pando-ai 0.5.5 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js
CHANGED
|
@@ -280,8 +280,8 @@ ${t}`.split(/\r?\n/).map(s=>s.trim()).filter(s=>s.length>0&&!s.startsWith("__PAN
|
|
|
280
280
|
`);return{success:!1,error:`query-db failed: ${i}
|
|
281
281
|
|
|
282
282
|
Available tables and columns:
|
|
283
|
-
${l}`,hints:["Fix the SQL to use the correct table and column names shown above, then retry."]}}}catch{}return{success:!1,error:`query-db failed: ${i}`}}}}});function As(...n){zu&&console.log(...n)}function Aj(n){let e=n.split(yo.default.sep),t=e.lastIndexOf("src");return t===-1?null:[...e.slice(0,t),"out",...e.slice(t+1)].join(yo.default.sep)}function QE(n){let e=yo.default.join(__dirname,n);if(go.default.existsSync(e))return e;let t=Aj(__dirname);if(t){let r=yo.default.join(t,n);if(go.default.existsSync(r))return r}return e}var yo,go,YE,Ij,zu,wb,Bu,Xs,Gf=ne(()=>{"use strict";yo=q(require("path")),go=q(require("fs")),YE=require("worker_threads");dr();gt();Ij={maxOldGenerationSizeMb:1024},zu=Ht(),wb=Math.max(5e3,Number(process.env.PANDO_SQLITE_WRITER_CALL_TIMEOUT_MS||12e4));Bu=()=>({writeMs:0,writeTrackedMs:0,writePreDeleteMs:0,writeInsertExportsMs:0,writeInsertNodesMs:0,writeInsertImportsMs:0,writeInsertImportBindingsMs:0,writeInsertFileMs:0,writeFinalizeMs:0,writeInsertFtsMs:0,writeResidualMs:0}),Xs=class n{constructor(e){this.dbPath=e;this.nextId=1;this.pending=new Map;this.terminating=!1;let t=this.findWorkerScript();zu&&As(`[SqliteWriterClient] Creating worker with script: ${t}`),this.worker=new YE.Worker(t,{resourceLimits:{...Ij}}),this.worker.on("message",r=>this.handleMessage(r)),this.worker.on("error",r=>this.handleWorkerError(r instanceof Error?r:new Error(String(r)))),this.worker.on("exit",r=>{r!==0&&this.handleWorkerError(new Error(`sqlite writer exited with code ${r}`))}),this.ready=new Promise((r,s)=>{this.readyResolve=r,this.readyReject=s})}static{this.shared=new Map}static async getShared(e,t){let r=this.shared.get(e);if(r)return r.refs+=1,r.initPromise&&await r.initPromise,r.client;let s=new n(e),i={client:s,refs:1,initPromise:s.init(t)};this.shared.set(e,i);try{await i.initPromise}catch(o){throw this.shared.delete(e),o}finally{i.initPromise=null}return s}static async releaseShared(e){let t=e.dbPath,r=this.shared.get(t);r&&(r.refs=Math.max(0,r.refs-1),!(r.refs>0)&&(this.shared.delete(t),await e.shutdown()))}static async shutdownAllShared(e){let t=Array.from(this.shared.values());this.shared.clear();let r=!!e?.force;if(X("SqliteWriterClient","shutdownAllShared begin",{count:t.length,force:r,reason:e?.reason??null,dbPaths:t.map(({client:s})=>s.dbPath)}),r){for(let{client:s}of t)try{s.forceDispose(e?.reason??"force shared shutdown")}catch{}X("SqliteWriterClient","shutdownAllShared force-dispatched",{count:t.length,reason:e?.reason??null});return}await Promise.all(t.map(async({client:s})=>{try{await s.shutdown()}catch{}})),X("SqliteWriterClient","shutdownAllShared complete",{count:t.length,force:r,reason:e?.reason??null})}findWorkerScript(){let e=ks("sqlite-writer-worker");if(e)return e;let t=process.env.PANDO_SQLITE_WORKER_SCRIPT;if(t&&go.default.existsSync(t))return t;let r=process.env.PANDO_WORKER_SCRIPT_DIR;if(r){let i=yo.default.join(r,"sqlite-writer-worker.mjs");if(go.default.existsSync(i))return i;let o=yo.default.join(r,"sqlite-writer-worker.js");if(go.default.existsSync(o))return o}let s=QE("workers/sqlite-writer-worker.mjs");return go.default.existsSync(s)?s:QE("workers/sqlite-writer-worker.js")}async init(e){try{go.default.mkdirSync(yo.default.dirname(this.dbPath),{recursive:!0})}catch(r){As("[SqliteWriterClient] Failed to ensure DB directory:",r?.message??r)}let t={cmd:"init",dbPath:this.dbPath,pragmas:e.pragmas,projectRoot:e.projectRoot};this.worker.postMessage(t),await this.ready}batchPreDelete(e){return e.length?this.call("batchPreDelete",{files:e}):Promise.resolve(null)}enqueueWrite(e){return this.call("write",{payload:e}).then(t=>t??Bu())}enqueueWriteBatch(e){return e.length?this.call("writeBatch",{payloads:e}).then(t=>t??Bu()):Promise.resolve(Bu())}flush(){return this.call("flush",{})}async shutdown(){X("SqliteWriterClient","shutdown begin",{dbPath:this.dbPath,pending:this.pending.size,terminating:this.terminating});try{await this.call("shutdown",{})}catch(e){As("[SqliteWriterClient] shutdown request failed:",e?.message??e),X("SqliteWriterClient","shutdown request failed",{dbPath:this.dbPath,error:e?.message??String(e)})}finally{await this.terminateWorker("graceful shutdown"),X("SqliteWriterClient","shutdown complete",{dbPath:this.dbPath})}}forceDispose(e="force dispose"){if(this.terminating)return;X("SqliteWriterClient","forceDispose",{dbPath:this.dbPath,reason:e,pending:this.pending.size});let t=new Error(`sqlite writer force disposed: ${e}`);for(let[r,s]of this.pending)s.timeoutHandle&&clearTimeout(s.timeoutHandle),s.reject(t),this.pending.delete(r);try{this.readyReject?.(t)}catch{}finally{this.readyReject=void 0,this.readyResolve=void 0}this.pendingWatchdog&&(clearInterval(this.pendingWatchdog),this.pendingWatchdog=void 0),this.terminateWorker(e)}call(e,t){let r=this.nextId++,s={cmd:e,id:r,dbPath:this.dbPath,...t},i;if(e==="write"&&t?.payload){let o=t.payload;i={fileRel:o.fileRel,lang:o.lang,exports:o.exportRows?.length??0,nodes:o.nodeRows?.length??0,refs:o.referenceRows?.length??0,symbolMentions:o.symbolMentionRows?.length??0,imports:o.importRows?.length??0,importBindings:o.importBindingRows?.length??0,hasFts:!!o.fts}}else if(e==="writeBatch"&&t?.payloads){let o=t.payloads;i={fileCount:o.length,sample:o.slice(0,5).map(a=>a.fileRel)}}else if(e==="batchPreDelete"&&t?.files){let o=t.files;i={fileCount:o.length,sample:o.slice(0,10)}}return new Promise((o,a)=>{let c={resolve:o,reject:a,cmd:e,startedAt:Date.now(),summary:i};if(c.timeoutHandle=setTimeout(()=>{let l=this.pending.get(r);if(!l)return;this.pending.delete(r);let u=new Error(`sqlite writer timed out after ${wb}ms (cmd=${e}, id=${r})`);try{As(`[${new Date().toISOString()}] [SqliteWriterClient] timeout`,{dbPath:this.dbPath,id:r,cmd:e,timeoutMs:wb,pending:this.pending.size,summary:l.summary})}catch{}l.reject(u),this.handleWorkerError(u)},wb),this.pending.set(r,c),zu){let l={dbPath:this.dbPath,id:r,cmd:e,pendingBeforeSend:this.pending.size-1};i&&Object.assign(l,i),As(`[${new Date().toISOString()}] [SqliteWriterClient] dispatch`,l)}this.worker.postMessage(s),this.pendingWatchdog||(this.pendingWatchdog=setInterval(()=>{if(this.pending.size===0){clearInterval(this.pendingWatchdog),this.pendingWatchdog=void 0;return}let l=Date.now();for(let[u,d]of this.pending){let p=l-d.startedAt;if(p>5e3){let f={dbPath:this.dbPath,id:u,cmd:d.cmd,ms:p};d.summary&&Object.assign(f,d.summary),As(`[${new Date().toISOString()}] [SqliteWriterClient] pending request slow`,f)}}},2e3))})}handleMessage(e){if(e.type==="ready"){zu&&As(`[${new Date().toISOString()}] [SqliteWriterClient] worker ready`,{dbPath:this.dbPath}),this.readyResolve?.(),this.readyResolve=void 0,this.readyReject=void 0;return}if(e.type==="error"){let t=new Error(e.message||"sqlite writer error");if(e.stack&&(t.stack=e.stack),typeof e.id=="number"&&this.pending.has(e.id)){let r=this.pending.get(e.id);this.pending.delete(e.id),r.timeoutHandle&&clearTimeout(r.timeoutHandle),As(`[${new Date().toISOString()}] [SqliteWriterClient] response error`,{dbPath:this.dbPath,id:e.id,cmd:r.cmd,pending:this.pending.size,message:t.message}),r.reject(t)}else As(`[${new Date().toISOString()}] [SqliteWriterClient] worker error (unbound)`,{dbPath:this.dbPath,id:e.id,message:t.message,pending:this.pending.size}),this.handleWorkerError(t);return}if(e.type==="response"){let t=this.pending.get(e.id);if(!t)return;let r=Date.now()-t.startedAt;if(this.pending.delete(e.id),t.timeoutHandle&&clearTimeout(t.timeoutHandle),this.pending.size===0&&this.pendingWatchdog&&(clearInterval(this.pendingWatchdog),this.pendingWatchdog=void 0),zu&&r<=2e3&&As(`[${new Date().toISOString()}] [SqliteWriterClient] response`,{dbPath:this.dbPath,id:e.id,cmd:t.cmd,ms:r,pending:this.pending.size}),r>2e3){let s={dbPath:this.dbPath,id:e.id,cmd:t.cmd,ms:r,pending:this.pending.size,metrics:e.metrics??null};t.summary&&Object.assign(s,t.summary),As(`[${new Date().toISOString()}] [SqliteWriterClient] response slow`,s)}t.resolve(e.metrics??null)}}handleWorkerError(e){for(let[,t]of this.pending)t.timeoutHandle&&clearTimeout(t.timeoutHandle),t.reject(e);this.pending.clear(),this.readyReject&&(this.readyReject(e),this.readyReject=void 0,this.readyResolve=void 0)}async terminateWorker(e){if(!this.terminating){this.terminating=!0,X("SqliteWriterClient","terminateWorker begin",{dbPath:this.dbPath,reason:e,pending:this.pending.size});try{this.pendingWatchdog&&(clearInterval(this.pendingWatchdog),this.pendingWatchdog=void 0),await this.worker.terminate(),X("SqliteWriterClient","terminateWorker complete",{dbPath:this.dbPath,reason:e})}catch(t){As("[SqliteWriterClient] worker termination failed:",t?.message??t),X("SqliteWriterClient","terminateWorker failed",{dbPath:this.dbPath,reason:e,error:t?.message??String(t)})}}}}});function Vn(n,e="Operation cancelled"){let t=typeof n=="string"&&n.trim()?n.trim():n instanceof Error&&n.message.trim()?n.message.trim():e,r=new Error(t);return r.name="AbortError",r.code="ABORT_ERR",r}function zi(n){return n&&n instanceof Error?n.name==="AbortError"||n.code==="ABORT_ERR":!1}function lt(n,e){if(n?.aborted)throw Vn(n.reason,e)}async function qu(n){lt(n),await new Promise(e=>setImmediate(e)),lt(n)}function vb(n,e="Operation cancelled",t){if(!n)return{promise:new Promise(()=>{}),cleanup:()=>{}};if(n.aborted){try{t?.()}catch{}return{promise:Promise.reject(Vn(n.reason,e)),cleanup:()=>{}}}let r=!1,s=()=>{i();try{t?.()}catch{}o(Vn(n.reason,e))},i=()=>{if(!r){r=!0;try{n.removeEventListener("abort",s)}catch{}}},o;return{promise:new Promise((c,l)=>{o=l,n.addEventListener("abort",s,{once:!0})}),cleanup:i}}function eT(...n){let e=n.filter(o=>!!o);if(e.length===0)return{signal:void 0,cleanup:()=>{}};if(e.length===1)return{signal:e[0],cleanup:()=>{}};let t=new AbortController,r=[],s=()=>{for(let o of r)o.signal.removeEventListener("abort",o.handler);r.length=0},i=o=>{t.signal.aborted||t.abort(o.reason),s()};for(let o of e){if(o.aborted)return i(o),{signal:t.signal,cleanup:s};let a=()=>i(o);o.addEventListener("abort",a,{once:!0}),r.push({signal:o,handler:a})}return{signal:t.signal,cleanup:s}}var da=ne(()=>{"use strict"});function Fj(n,e){X("BatchAnalysisScheduler",n,e)}function Oj(n,e){X("IndexTiming",n,e)}var tT,nT,Nj,Mj,Dj,Jf,rT=ne(()=>{"use strict";gt();tT=Math.max(1,Number(process.env.PANDO_BATCH_INDEX_MAX_FILES||"64")),nT=Math.max(1,Number(process.env.PANDO_BATCH_INDEX_MAX_BYTES||`${1024*1024}`)),Nj=Math.max(1,Number(process.env.PANDO_BATCH_INDEX_MAX_WAIT_MS||"15")),Mj=Math.max(tT,Number(process.env.PANDO_BATCH_INDEX_MAX_PENDING_FILES||"256")),Dj=Math.max(nT,Number(process.env.PANDO_BATCH_INDEX_MAX_PENDING_BYTES||`${8*1024*1024}`));Jf=class{constructor(e,t){this.indexer=e;this.batches=new Map;this.inFlight=new Set;this.capacityWaiters=[];this.drainWaiters=[];this.pendingFiles=0;this.pendingBytes=0;this.closed=!1;this.maxFilesPerBatch=t?.maxFilesPerBatch??tT,this.maxBatchBytes=t?.maxBatchBytes??nT,this.maxWaitMs=t?.maxWaitMs??Nj,this.maxPendingFiles=t?.maxPendingFiles??Mj,this.maxPendingBytes=t?.maxPendingBytes??Dj}async waitForCapacity(e){for(;!this.closed;){let t=this.pendingFiles<this.maxPendingFiles,r=this.pendingBytes===0||this.pendingBytes+Math.max(0,e)<=this.maxPendingBytes;if(t&&r)return;await new Promise(s=>this.capacityWaiters.push(s))}}async enqueue(e){if(this.closed)throw new Error("batch analysis scheduler is closed");let t=await this.indexer.prepare(e.prepareInput),r=this.indexer.batchKey(t),s=this.batches.get(r)??{items:[],bytes:0,timer:null};this.batches.has(r)||this.batches.set(r,s),this.pendingFiles+=1,this.pendingBytes+=t.meta?.size??0;let i=new Promise((o,a)=>{s.items.push({prepared:t,entry:e,resolve:o,reject:a}),s.bytes+=t.meta?.size??0});return s.items.length>=this.maxFilesPerBatch||s.bytes>=this.maxBatchBytes?this.flushBatch(r,s.items.length>=this.maxFilesPerBatch?"max-files":"max-bytes"):s.timer||(s.timer=setTimeout(()=>{s.timer=null,this.flushBatch(r,"max-wait")},this.maxWaitMs)),i}async flushAll(){let e=Array.from(this.batches.keys());for(let t of e)this.flushBatch(t,"flush-all");for(;this.batches.size||this.inFlight.size;)await new Promise(t=>this.drainWaiters.push(t));await this.indexer.flush?.()}async close(){this.closed||(this.closed=!0,await this.flushAll(),await this.indexer.close?.())}flushBatch(e,t){let r=this.batches.get(e);if(!r||!r.items.length){r&&!r.items.length&&this.clearBatch(e,r);return}r.timer&&(clearTimeout(r.timer),r.timer=null);let s=r.items.splice(0,r.items.length);r.bytes=0,Fj("flush",{batchKey:e,reason:t,fileCount:s.length,batchBytes:s.reduce((o,a)=>o+(a.prepared.meta?.size??0),0),pendingFiles:this.pendingFiles,pendingBytes:this.pendingBytes}),this.clearBatch(e,r);let i=this.runBatch(s).finally(()=>{this.inFlight.delete(i),this.notifyWaiters()});this.inFlight.add(i)}async runBatch(e){let t=Date.now(),r=e.reduce((f,m)=>f+(m.prepared.meta?.size??0),0),s=e[0]?.prepared?this.indexer.batchKey(e[0].prepared):"<unknown>",i,o=0;try{let f=e.map(h=>h.prepared),m=Date.now();i=await this.indexer.analyzeBatch(f),o=Date.now()-m}catch(f){o=Date.now()-t;let m=f instanceof Error?f:new Error(String(f));i=new Map(e.map(h=>[h.prepared.fileKey,{error:m.message}]))}let a=Date.now(),c=0;await Promise.all(e.map(async f=>{try{let m=await this.indexer.buildProcessedFile({...f.entry.prepareInput,content:f.entry.getContent()},f.prepared,i.get(f.prepared.fileKey)??{error:`missing analysis result for ${f.prepared.relPath}`});f.resolve(m)}catch(m){c+=1,f.reject(m instanceof Error?m:new Error(String(m)))}finally{this.pendingFiles=Math.max(0,this.pendingFiles-1),this.pendingBytes=Math.max(0,this.pendingBytes-(f.prepared.meta?.size??0))}}));let l=Date.now()-a,u=Date.now()-t,d=0,p=0;for(let f of i.values())f&&typeof f=="object"&&"error"in f?p+=1:d+=1;Oj("batch-analysis.complete",{batchKey:s,fileCount:e.length,batchBytes:r,analyzeDurationMs:o,buildDurationMs:l,totalDurationMs:u,analyzedOk:d,analyzedErrors:p,buildErrors:c,pendingFiles:this.pendingFiles,pendingBytes:this.pendingBytes})}clearBatch(e,t){t.timer&&(clearTimeout(t.timer),t.timer=null),this.batches.delete(e)}notifyWaiters(){let e=this.capacityWaiters.splice(0,this.capacityWaiters.length);for(let r of e)try{r()}catch{}if(this.batches.size||this.inFlight.size)return;let t=this.drainWaiters.splice(0,this.drainWaiters.length);for(let r of t)try{r()}catch{}}}});function $j(n,e){return jr.default.relative(n,e).replace(/\\/g,"/")}function mt(...n){process.env.PANDO_QUIET||console.log(jj([`[${new Date().toISOString()}]`,...n]))}function jj(n){return n.map(Lj).join(" ")}function Lj(n){if(typeof n=="string")return n;if(n instanceof Error)return n.stack||n.message;try{let e=JSON.stringify(n);if(typeof e=="string")return e}catch{}return(0,uT.inspect)(n,{depth:null,breakLength:1/0,compact:!0})}function $r(n,e){let t=n.replace(/^\[WorkerController\]\s*/,"");X("WorkerController",t,e)}function Hu(n,e){X("IndexTiming",n,e)}function zj(n){let e=n.split(jr.default.sep),t=e.lastIndexOf("src");return t===-1?null:[...e.slice(0,t),"out",...e.slice(t+1)].join(jr.default.sep)}function bo(n){let e=jr.default.join(__dirname,n);if(vr.default.existsSync(e))return e;let t=zj(__dirname);if(t){let r=jr.default.join(t,n);if(vr.default.existsSync(r))return r}return e}function Hj(n=4){try{let e=new Error().stack;return e?e.split(`
|
|
284
|
-
`).slice(2,2+n).map(t=>t.trim()).join(" | "):"unknown"}catch{return"unknown"}}async function Wj(n,e){ut.idleTimer&&(clearTimeout(ut.idleTimer),ut.idleTimer=null),ut.scriptPath&&ut.scriptPath!==n&&pa("worker script path changed"),ut.scriptPath=n;let t=Math.max(1,e);for(;ut.indexWorkers.length<t;)ut.indexWorkers.push(new Wu(n,"index"));await Promise.all(ut.indexWorkers.map(i=>i.ready())),ut.refCount+=1;let r=ut.generation;mt("[SharedWorkers] acquired",{generation:r,refCount:ut.refCount,targetCount:t,activeIndexWorkers:ut.indexWorkers.length});let s=!1;return{indexWorkers:ut.indexWorkers,release:()=>{if(!s){if(s=!0,r!==ut.generation){mt("[SharedWorkers] release skipped (stale generation)",{leaseGeneration:r,currentGeneration:ut.generation,refCount:ut.refCount});return}if(ut.refCount=Math.max(0,ut.refCount-1),mt("[SharedWorkers] released",{generation:ut.generation,refCount:ut.refCount}),ut.refCount===0){let i=Math.max(0,Number(process.env.PANDO_SHARED_WORKER_IDLE_MS||3e4));if(i===0){pa("last shared worker lease released");return}let o=ut.generation;ut.idleTimer=setTimeout(()=>{ut.idleTimer=null,ut.refCount===0&&ut.generation===o&&pa(`shared worker idle timeout (${i}ms)`)},i);try{ut.idleTimer.unref?.()}catch{}mt("[SharedWorkers] idle shutdown scheduled",{generation:o,idleMs:i,indexWorkers:ut.indexWorkers.length})}}}}}function pa(n="shared workers shutdown"){ut.idleTimer&&(clearTimeout(ut.idleTimer),ut.idleTimer=null);let e=ut.generation+1;mt("[SharedWorkers] shutdown",{reason:n,currentGeneration:ut.generation,nextGeneration:e,refCount:ut.refCount,indexWorkers:ut.indexWorkers.length,scriptPath:ut.scriptPath,caller:Hj()}),ut.generation+=1;for(let t of ut.indexWorkers)try{t.dispose()}catch{}ut.indexWorkers=[],ut.refCount=0,ut.scriptPath=null}function Xf(){for(let n of Array.from(Tb))try{n.stop()}catch{}}async function Uj(n){let e=await iT.promises.readFile(n),t=new SharedArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}function Kj(n,e){return Buffer.from(n).toString(e)}function kb(n,e,t,r,s,i){let o=Buffer.from(n),a=(0,lT.createHash)("sha1").update(o).digest("hex"),c=i??o.toString(s),l=c?c.split(/\r?\n/).length:0;return{relPath:e,size:t,mtime:r,objectId:a,lineCount:l,encoding:s}}var jr,vr,iT,oT,aT,cT,lT,xi,uT,Bj,Vf,Rb,dT,sT,qj,Eb,Tb,ut,Wu,Uu,Pb,Qf=ne(()=>{"use strict";jr=q(require("path")),vr=q(require("fs")),iT=require("fs"),oT=q(require("os")),aT=require("worker_threads"),cT=require("events"),lT=require("crypto"),xi=require("perf_hooks"),uT=require("util");Bn();sf();dr();da();gt();rT();Bj={maxOldGenerationSizeMb:1024},Vf=1*1024*1024,Rb=Math.max(3e4,Number(process.env.PANDO_WORKER_INIT_TIMEOUT_MS||12e4)),dT=Math.max(1e3,Number(process.env.PANDO_ACTIVE_CONTEXT_STALL_LOG_MS||1e4)),sT=Math.max(dT,Number(process.env.PANDO_ACTIVE_CONTEXT_STALL_FAIL_MS||6e5)),qj=yu(),Eb=class{constructor(e){this.queue=[];this.available=Math.max(1,e|0),this.maxPermits=this.available}async acquire(){if(this.available>0){this.available-=1;return}await new Promise(e=>{this.queue.push(()=>{this.available-=1,e()})})}release(){if(this.available+=1,this.available>0&&this.queue.length){let e=this.queue.shift();e&&e()}}getAvailable(){return this.available}getQueued(){return this.queue.length}getInUse(){return Math.max(0,this.maxPermits-this.available)}getMax(){return this.maxPermits}},Tb=new Set,ut={scriptPath:null,indexWorkers:[],refCount:0,generation:0,idleTimer:null};Wu=class{constructor(e,t,r,s){this.pending=new Map;this.readySettled=!1;this.seq=0;this._load=0;this.totalProcessed=0;this.totalErrors=0;this.totalTimeMs=0;this.maxTimeMs=0;this.lastTimeMs=0;this.disposing=!1;this.createdAt=Date.now();this.role=t,this.scriptPath=e,mt(`[WorkerController] Creating ${t} worker with script: ${e}`),$r("[WorkerController] create",{role:t,scriptPath:e,scriptExists:vr.default.existsSync(e),projectRoot:r??null,extraInitKeys:s?Object.keys(s):[],pid:process.pid,runtimePaths:Rs(),envWorkerRoot:process.env.PANDO_WORKER_SCRIPT_DIR??null,envRuntimeRoot:process.env.PANDO_RUNTIME_ROOT??null});try{this.worker=new aT.Worker(e,{resourceLimits:{...Bj}})}catch(a){throw mt(`[WorkerController] Failed to create ${t} worker:`,a?.message||a),$r("[WorkerController] create failed",{role:t,scriptPath:e,error:a?.message||String(a)}),a}this.worker.on("online",()=>{$r("[WorkerController] online",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,pending:this.pending.size})}),this.worker.on("message",a=>this.onMessage(a)),this.worker.on("error",a=>{if(this.disposing){mt(`[WorkerController] ${t} worker error during shutdown:`,a?.message||a),$r("[WorkerController] error during shutdown",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,error:a?.message||String(a),reason:this.disposeReason??null});return}mt(`[WorkerController] ${t} worker error:`,a?.message||a),$r("[WorkerController] error",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,error:a?.stack||a?.message||String(a),pending:this.pending.size}),this.failAll(a)}),this.worker.on("exit",a=>{if(this.disposing){mt(`[WorkerController] ${t} worker terminated during shutdown`,{code:a,reason:this.disposeReason}),$r("[WorkerController] exit during shutdown",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,code:a,reason:this.disposeReason??null,pending:this.pending.size});return}mt(`[WorkerController] ${t} worker exited with code ${a}`),$r("[WorkerController] exit",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,code:a,pending:this.pending.size,sinceCreateMs:Date.now()-this.createdAt}),a!==0&&this.failAll(new Error(`worker exited with code ${a}`))}),this.readyPromise=new Promise((a,c)=>{this.readyResolve=()=>{this.readySettled||(this.readySettled=!0,a())},this.readyReject=l=>{this.readySettled||(this.readySettled=!0,c(l))}});let i=setTimeout(()=>{mt(`[WorkerController] ${t} worker initialization timeout after ${Math.round(Rb/1e3)}s`),$r("[WorkerController] init timeout",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,timeoutMs:Rb,pending:this.pending.size,readySettled:this.readySettled,sinceCreateMs:Date.now()-this.createdAt,memory:process.memoryUsage()});try{this.worker.terminate()}catch{}this.readyReject(new Error(`${t} worker initialization timeout`))},Rb);this.readyPromise.then(()=>clearTimeout(i)).catch(()=>clearTimeout(i));let o={cmd:"init",mode:t,...s};r&&(o.projectRoot=r),$r("[WorkerController] init posted",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,initPayload:o}),this.worker.postMessage(o)}get load(){return this._load}get pendingCount(){return this.pending.size}get stats(){let e=this.totalProcessed?Math.round(this.totalTimeMs/this.totalProcessed):0;return{role:this.role,load:this._load,pending:this.pending.size,processed:this.totalProcessed,errors:this.totalErrors,avgMs:e,maxMs:this.maxTimeMs,lastMs:this.lastTimeMs}}async ready(){await this.readyPromise}async process(e){await this.ready();let t=++this.seq,r={cmd:"process",requestId:t,role:this.role,projectRoot:e.projectRoot,file:e},s=new Promise((i,o)=>{this.pending.set(t,{kind:"process",resolve:i,reject:o,startedAt:xi.performance.now()})});return this._load+=1,this.worker.postMessage(r),s.finally(()=>{this._load=Math.max(0,this._load-1)})}async scan(e,t){await this.ready();let r=++this.seq,s={cmd:"scan",requestId:r,projectRoot:e.projectRoot,excludeDirs:e.excludeDirs,languageSupport:e.languageSupport,batchSize:e.batchSize,maxFileBytes:e.maxFileBytes},i=new Promise((o,a)=>{this.pending.set(r,{kind:"scan",resolve:o,reject:a,startedAt:xi.performance.now(),onBatch:t})});return this.worker.postMessage(s),i}cancelScans(){for(let[e,t]of this.pending)if(t.kind==="scan")try{this.worker.postMessage({cmd:"scan-cancel",requestId:e})}catch{}}dispose(e="worker disposed"){if(this.disposing)return;this.disposing=!0,this.disposeReason=e;let t=Vn(e,`${this.role} worker cancelled`);this.failAll(t),this.readyReject(t);try{this.worker.terminate()}catch{}}onMessage(e){if(e?.type==="ready"){mt(`[WorkerController] ${this.role} worker ready`),$r("[WorkerController] ready",{role:this.role,scriptPath:this.scriptPath,threadId:this.worker.threadId,pending:this.pending.size,sinceCreateMs:Date.now()-this.createdAt}),this.readyResolve();return}if(e?.type==="result"){let t=this.pending.get(e.requestId);if(t&&t.kind==="process"){this.pending.delete(e.requestId);let r=xi.performance.now()-t.startedAt;this.totalProcessed+=1,this.totalTimeMs+=r,this.lastTimeMs=Math.round(r),r>this.maxTimeMs&&(this.maxTimeMs=Math.round(r)),t.resolve(e.result)}return}if(e?.type==="scan:batch"){let t=this.pending.get(e.requestId);if(!t||t.kind!=="scan")return;Promise.resolve(t.onBatch(Array.isArray(e.files)?e.files:[])).then(()=>{try{this.worker.postMessage({cmd:"scan-ack",requestId:e.requestId})}catch(r){t.reject(r instanceof Error?r:new Error(String(r))),this.pending.delete(e.requestId)}}).catch(r=>{let s=r instanceof Error?r:new Error(String(r));t.reject(s),this.pending.delete(e.requestId);try{this.worker.postMessage({cmd:"scan-cancel",requestId:e.requestId})}catch{}});return}if(e?.type==="scan:done"){let t=this.pending.get(e.requestId);if(!t||t.kind!=="scan")return;this.pending.delete(e.requestId);let r=xi.performance.now()-t.startedAt;this.totalProcessed+=1,this.totalTimeMs+=r,this.lastTimeMs=Math.round(r),r>this.maxTimeMs&&(this.maxTimeMs=Math.round(r)),t.resolve({discovered:Number(e.discovered)||0,skipped:Number(e.skipped)||0,cancelled:!!e.cancelled});return}if(e?.type==="error"){mt(`[WorkerController] ${this.role} worker reported error:`,e.message),$r("[WorkerController] worker reported error",{role:this.role,scriptPath:this.scriptPath,threadId:this.worker.threadId,message:e.message??null,requestId:typeof e.requestId=="number"?e.requestId:null,stack:e.stack??null,pending:this.pending.size});let t=new Error(e.message||"worker error");if(e.stack&&(t.stack=e.stack),typeof e.requestId=="number"){let r=this.pending.get(e.requestId);if(r){this.pending.delete(e.requestId);let s=xi.performance.now()-r.startedAt;this.totalErrors+=1,this.totalTimeMs+=s,this.lastTimeMs=Math.round(s),s>this.maxTimeMs&&(this.maxTimeMs=Math.round(s)),r.reject(t);return}}this.totalErrors+=1,this.failAll(t);return}e?.type&&e.type!=="progress"&&e.type!=="mem"&&mt(`[WorkerController] ${this.role} worker sent message type: ${e.type}`)}failAll(e){for(let[t,r]of this.pending)r.reject(e),this.pending.delete(t)}},Uu=class extends cT.EventEmitter{constructor(t,r){super();this.indexWorkers=[];this.scanWorker=null;this.inflightBytes=0;this.inflightByteWaiters=[];this.contexts=new Map;this.discovered=0;this.processed=0;this.workerScanSkipped=0;this.skipCounts=new Map;this.skipSamples=new Map;this.ctxSeq=0;this.started=!1;this.stopped=!1;this.discoveryPromise=null;this.workerInitPromise=null;this.ownsWorkers=!0;this.releaseShared=null;this.statusInterval=null;this.batchSchedulers=new Map;this.batchSchedulerInitErrors=new Map;this.projectRoot=t,this.options=r??{},this.languageSupport=this.options.languageSupport??qj,this.supportedExtensions=bu(this.languageSupport),this.runId=this.options.runId??Math.random().toString(36).slice(2,8);let s=this.options.maxInFlight??10;this.inflightSemaphore=new Eb(s),this.maxInFlightBytes=Math.max(0,this.options.maxInFlightBytes??96*1024*1024),Tb.add(this)}on(t,r){return super.on(t,r),this}emit(t,...r){return super.emit(t,...r)}async ensureWorkers(){if(this.workerInitPromise)return this.workerInitPromise;let t=async()=>{let r=Date.now(),s=this.workerScriptPath(),i=this.options.concurrency??Math.max(2,oT.default.cpus()?.length||5);if($r("[StreamingIndexer] ensureWorkers start",{runId:this.runId,root:this.projectRoot,scriptPath:s,scriptExists:vr.default.existsSync(s),concurrency:i,sharedWorkers:!!this.options.sharedWorkers,runtimePaths:Rs(),envWorkerRoot:process.env.PANDO_WORKER_SCRIPT_DIR??null,envRuntimeRoot:process.env.PANDO_RUNTIME_ROOT??null}),mt(`[${new Date().toISOString()}] [StreamingIndexer] ensureWorkers: scriptPath=${s}, exists=${vr.default.existsSync(s)}, concurrency=${i}, __dirname=${__dirname} runId=${this.runId} root=${this.projectRoot}`),!vr.default.existsSync(s)){mt(`[${new Date().toISOString()}] [StreamingIndexer] ERROR: Worker script not found at ${s}`);let o=bo("workers/indexer-worker.mjs"),a=bo(jr.default.join("..","..","dist","workers","indexer-worker.mjs"));mt(`[${new Date().toISOString()}] [StreamingIndexer] Alternative paths: ${o} (exists=${vr.default.existsSync(o)}), ${a} (exists=${vr.default.existsSync(a)})`)}if(this.options.sharedWorkers){let o=await Wj(s,i);this.indexWorkers=o.indexWorkers,this.releaseShared=o.release,this.ownsWorkers=!1}else{for(let o=0;o<i;o++)this.indexWorkers.push(new Wu(s,"index",this.projectRoot));this.ownsWorkers=!0}this.scanWorker=new Wu(s,"scan",this.projectRoot),mt(`[${new Date().toISOString()}] [StreamingIndexer] ensureWorkers: waiting for ${this.indexWorkers.length} index workers and scan worker to be ready... runId=${this.runId}`),await Promise.all([...this.indexWorkers.map(o=>o.ready()),this.scanWorker.ready()]),Hu("streaming.ensure-workers.complete",{runId:this.runId,root:this.projectRoot,concurrency:i,durationMs:Date.now()-r,sharedWorkers:!!this.options.sharedWorkers}),$r("[StreamingIndexer] ensureWorkers ready",{runId:this.runId,root:this.projectRoot,indexWorkers:this.indexWorkers.length,ownsWorkers:this.ownsWorkers}),mt(`[${new Date().toISOString()}] [StreamingIndexer] ensureWorkers: all workers ready runId=${this.runId}`)};this.workerInitPromise=t().catch(r=>{throw mt(`[${new Date().toISOString()}] [StreamingIndexer] ensureWorkers failed:`,r?.message||r),$r("[StreamingIndexer] ensureWorkers failed",{runId:this.runId,root:this.projectRoot,error:r?.stack||r?.message||String(r),runtimePaths:Rs()}),this.workerInitPromise=null,r}),await this.workerInitPromise}async start(){this.started||(this.started=!0,await this.ensureWorkers(),this.discoveryPromise=this.runDiscovery())}async waitForDrain(){let t=Date.now();mt(`[${new Date().toISOString()}] [StreamingIndexer] waitForDrain: awaiting discovery completion runId=${this.runId}`),await this.discoveryPromise;let r=Date.now()-t;mt(`[${new Date().toISOString()}] [StreamingIndexer] waitForDrain: discovery completed in ${r}ms runId=${this.runId}`)}async scanFiles(t){await this.ensureWorkers();let r=this.scanWorker;if(!r)throw new Error("scan worker missing");let s=this.options,i=Date.now();mt(`[${new Date().toISOString()}] [StreamingIndexer] workerScan:start`,{runId:this.runId,root:this.projectRoot,excludeDirs:s.excludeDirs??[],scanOrigin:"worker"});let o=await r.scan({projectRoot:this.projectRoot,excludeDirs:s.excludeDirs??[],languageSupport:this.languageSupport,batchSize:100,maxFileBytes:Vf},async a=>{if(!t||this.stopped||!a.length)return;let c=a.map(l=>({relPath:l.relPath,absPath:l.absPath,lang:l.lang,size:l.size,mtime:l.mtimeMs}));await t(c)});return Hu("streaming.scan.complete",{runId:this.runId,root:this.projectRoot,discovered:o.discovered,skipped:o.skipped,cancelled:o.cancelled,durationMs:Date.now()-i}),mt(`[${new Date().toISOString()}] [StreamingIndexer] workerScan:done count=${o.discovered} ms=${Date.now()-i}`,{runId:this.runId,discovered:o.discovered,skipped:o.skipped,cancelled:o.cancelled,scanOrigin:"worker"}),o}async processFileEntries(t){if(!Array.isArray(t)||t.length===0)return;let r=Date.now();await this.ensureWorkers();let s=Date.now()-r;s>1e3&&Hu("streaming.manual.ensure-workers.complete",{runId:this.runId,root:this.projectRoot,entryCount:t.length,durationMs:s,sharedWorkers:!!this.options.sharedWorkers});let i=Date.now(),o=this.options.encoding??"utf8";for(let a of t){if(this.stopped)break;let c=a.absPath;if(typeof c!="string"||!c)continue;let l=jr.default.extname(c).toLowerCase();if(!this.supportedExtensions.has(l)){this.recordSkip(c,"unsupported-extension");continue}if(!vr.default.existsSync(c)){this.recordSkip(c,"missing");continue}if(a.size&&a.size>Vf){this.recordSkip(c,"oversize");continue}a.size&&a.size>10*1024*1024&&mt(`[${new Date().toISOString()}] [StreamingIndexer] Large file queued`,{absPath:c,sizeMB:Math.round(a.size/(1024*1024)*100)/100});let u=a.relPath??$j(this.projectRoot,c);if(!u||u.startsWith("..")){this.recordSkip(c,"outside-root");continue}let d=a.lang??Bt(u);if(!d){this.recordSkip(c,"unsupported-language");continue}await this.awaitBatchSchedulerCapacity(d,typeof a.size=="number"?a.size:0);let p=a.size,f=a.mtime;if(p===void 0||f===void 0)try{let m=vr.default.statSync(c);p=p??m.size,f=f??Math.floor(m.mtimeMs)}catch(m){this.recordSkip(c,`stat-error:${m?.message??m}`);continue}if(typeof p=="number"&&p>Vf){this.recordSkip(c,"oversize");continue}try{await this.processResolvedFile({absPath:c,relPath:u,lang:d,size:typeof p=="number"?p:0,mtime:typeof f=="number"?f:Math.floor(Date.now()),encoding:a.encoding??o,preDeleted:!!a.preDeleted,emitMode:a.emitMode})}catch(m){this.emit("error",m instanceof Error?m:new Error(String(m)))}}this.skipCounts.size&&mt(`[${new Date().toISOString()}] [StreamingIndexer] manual skip summary runId=${this.runId}`,{total:Array.from(this.skipCounts.values()).reduce((a,c)=>a+c,0),reasons:Object.fromEntries(this.skipCounts.entries()),samples:Object.fromEntries(this.skipSamples.entries())}),await this.flushBatchSchedulers(),await this.awaitActiveContexts(),Hu("streaming.manual.complete",{runId:this.runId,root:this.projectRoot,entryCount:t.length,discovered:this.discovered,processed:this.processed,durationMs:Date.now()-i})}stop(){if(this.stopped)return;this.stopped=!0;try{this.scanWorker?.cancelScans()}catch{}let t=Array.from(this.batchSchedulers.values());this.batchSchedulers.clear(),this.batchSchedulerInitErrors.clear();for(let r of t)r.close().catch(()=>{});if(this.ownsWorkers){for(let r of this.indexWorkers)r.dispose("streaming indexer stop");this.scanWorker?.dispose("streaming indexer stop"),this.indexWorkers=[],this.scanWorker=null}else if(this.releaseShared){try{this.releaseShared()}catch{}this.scanWorker?.dispose("streaming indexer stop"),this.scanWorker=null}this.workerInitPromise=null,this.started=!1,Tb.delete(this)}requestStop(){this.stopped=!0;try{this.scanWorker?.cancelScans()}catch{}}workerScriptPath(){let t=ks("indexer-worker");if(t)return t;let r=process.env.PANDO_INDEXER_WORKER_SCRIPT;if(r&&vr.default.existsSync(r))return r;let s=process.env.PANDO_WORKER_SCRIPT_DIR;if(s){let o=jr.default.join(s,"indexer-worker.mjs");if(vr.default.existsSync(o))return o;let a=jr.default.join(s,"indexer-worker.js");if(vr.default.existsSync(a))return a}let i=[bo(jr.default.join("..","workers","indexer-worker.mjs")),bo("workers/indexer-worker.mjs"),bo(jr.default.join("..","..","dist","workers","indexer-worker.mjs")),bo(jr.default.join("..","workers","indexer-worker.js")),bo("workers/indexer-worker.js"),bo(jr.default.join("..","..","dist","workers","indexer-worker.js"))];for(let o of i)if(vr.default.existsSync(o))return o;return i[0]}async runDiscovery(){let t=Date.now();mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: starting discovery for ${this.projectRoot} runId=${this.runId}`),await this.ensureWorkers(),mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: workers ready, starting worker scan... runId=${this.runId}`),this.logStatus("start"),this.statusInterval||(this.statusInterval=setInterval(()=>this.logStatus("periodic"),1e4));let r=0,s=xi.performance.now(),i=new Pb(Math.max(100,(this.options.maxInFlight??10)*20)),o=Math.max(1,Math.min(4,this.indexWorkers.length||this.options.concurrency||1)),a=Array.from({length:o},async()=>{try{for(;;){let c=await i.shift();if(!c||this.stopped)return;await this.processResolvedFile({absPath:c.absPath,relPath:c.relPath,lang:c.lang,size:c.size,mtime:c.mtime,encoding:this.options.encoding??"utf8",preDeleted:!1}),r+=1,r%500===0&&(mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: discovered ${r} files, contexts.size=${this.contexts.size}, processed=${this.processed} runId=${this.runId}`),this.logStatus("progress"))}}catch(c){throw i.close(),c}});try{let c=await this.scanFiles(async l=>{await i.pushMany(l)});this.workerScanSkipped=c.skipped,i.close(),await Promise.all(a),mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: discovery loop complete. Total discovered=${r}, time=${(xi.performance.now()-s).toFixed(0)}ms runId=${this.runId}`),this.skipCounts.size&&mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: skip summary runId=${this.runId}`,{total:Array.from(this.skipCounts.values()).reduce((l,u)=>l+u,0),reasons:Object.fromEntries(this.skipCounts.entries()),samples:Object.fromEntries(this.skipSamples.entries())})}catch(c){i.close(),mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: error during discovery runId=${this.runId}:`,c?.message||c),this.emit("error",c instanceof Error?c:new Error(String(c)))}finally{i.close(),this.statusInterval&&(clearInterval(this.statusInterval),this.statusInterval=null),await this.flushBatchSchedulers(),mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: waiting for active contexts to complete... contexts.size=${this.contexts.size} runId=${this.runId}`),await this.awaitActiveContexts(),Hu("streaming.discovery.complete",{runId:this.runId,root:this.projectRoot,discovered:this.discovered,processed:this.processed,activeContexts:this.contexts.size,durationMs:Date.now()-t}),mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: all contexts complete, emitting drain runId=${this.runId}`),this.emit("drain"),this.stop()}}getWorkerScanSkippedCount(){return this.workerScanSkipped}logStatus(t){let r=new Date().toISOString(),s=this.indexWorkers.map((l,u)=>({idx:u,...l.stats})),i=s.reduce((l,u)=>l+u.pending,0),o=s.reduce((l,u)=>l+u.load,0),a=s.length?Math.round(o/s.length*100)/100:0,c=[...s].sort((l,u)=>u.pending-l.pending).slice(0,3).map(l=>({idx:l.idx,pending:l.pending,load:l.load,avgMs:l.avgMs,maxMs:l.maxMs,lastMs:l.lastMs}));mt(`[${r}] [StreamingIndexer] status:${t}`,{runId:this.runId,discovered:this.discovered,processed:this.processed,activeContexts:this.contexts.size,inflight:{inUse:this.inflightSemaphore.getInUse(),max:this.inflightSemaphore.getMax(),queued:this.inflightSemaphore.getQueued(),bytesInUse:this.inflightBytes,maxBytes:this.maxInFlightBytes,byteWaiters:this.inflightByteWaiters.length},workers:{count:s.length,avgLoad:a,totalPending:i,topPending:c}})}recordSkip(t,r){this.emit("file:skipped",t,r);let s=r||"unknown",i=(this.skipCounts.get(s)??0)+1;if(this.skipCounts.set(s,i),i<=5){let o=this.skipSamples.get(s)??[];o.length<5&&o.push(t),this.skipSamples.set(s,o)}}createContext(t){return{id:++this.ctxSeq,relPath:t.relPath,absPath:t.absPath,lang:t.lang,sharedBuffer:t.sharedBuffer,size:t.size,mtime:t.mtime,encoding:t.encoding,consumers:new Set(["index"]),startedAt:xi.performance.now(),preDeleted:t.preDeleted,emitMode:t.emitMode??"light"}}async acquireInflight(t){await this.inflightSemaphore.acquire();let r=Math.max(0,Math.trunc(t)||0);if(!(this.maxInFlightBytes<=0||r<=0)){for(;!this.stopped;){if(this.inflightBytes===0||this.inflightBytes+r<=this.maxInFlightBytes){this.inflightBytes+=r;return}await new Promise(s=>this.inflightByteWaiters.push(s))}this.inflightBytes+=r}}releaseInflight(t){let r=Math.max(0,Math.trunc(t)||0);if(this.inflightSemaphore.release(),r>0&&(this.inflightBytes=Math.max(0,this.inflightBytes-r)),this.inflightByteWaiters.length){let s=this.inflightByteWaiters.splice(0,this.inflightByteWaiters.length);for(let i of s)try{i()}catch{}}}scheduleIndexTask(t){let r=Gs(t.lang);if(ia(r)){let o=this.getBatchScheduler(t.lang);if(!o){let l=lo(t.lang,t.relPath,{size:t.size,mtime:t.mtime});this.emit("index:result",t,{payload:l.payload,meta:{size:l.fileSize,mtime:l.mtime},snapshotSummary:kb(t.sharedBuffer,t.relPath,t.size,t.mtime,t.encoding)}),this.markConsumerDone(t,"index");return}let a=null,c=()=>(a==null&&(a=Kj(t.sharedBuffer,t.encoding)),a);o.enqueue({prepareInput:{absPath:t.absPath,relPath:t.relPath,content:c(),meta:{size:t.size,mtime:t.mtime},preDeleted:t.preDeleted,lang:t.lang,emitMode:t.emitMode},getContent:c}).then(l=>{this.contexts.has(t.id)&&(this.emit("index:result",t,{payload:l.payload,meta:{size:l.fileSize,mtime:l.mtime},snapshotSummary:kb(t.sharedBuffer,t.relPath,t.size,t.mtime,t.encoding,c())}),this.markConsumerDone(t,"index"))}).catch(l=>{this.contexts.has(t.id)&&this.handleTaskError(l,t,"index")});return}let s=this.pickLeastLoadedWorker();if(!s){this.emit("error",new Error("no index workers available"));return}let i={projectRoot:this.projectRoot,absPath:t.absPath,relPath:t.relPath,lang:t.lang,sharedBuffer:t.sharedBuffer,size:t.size,mtime:t.mtime,encoding:t.encoding,preDeleted:t.preDeleted,emitMode:t.emitMode};s.process(i).then(o=>{this.contexts.has(t.id)&&(this.emit("index:result",t,o),this.markConsumerDone(t,"index"))}).catch(o=>{this.contexts.has(t.id)&&this.handleTaskError(o,t,"index")})}pickLeastLoadedWorker(){if(!this.indexWorkers.length)return null;let t=this.indexWorkers[0];for(let r=1;r<this.indexWorkers.length;r++)this.indexWorkers[r].load<t.load&&(t=this.indexWorkers[r]);return t}handleTaskError(t,r,s){let i=t instanceof Error?t:new Error(String(t));if(mt(`[${new Date().toISOString()}] [StreamingIndexer] task error`,{runId:this.runId,role:s,relPath:r.relPath,lang:r.lang,message:i.message}),s==="index"&&r.lang&&r.lang!=="ts"&&r.lang!=="js"){mt(`[${new Date().toISOString()}] [StreamingIndexer] soft-fail indexer error`,{lang:r.lang,relPath:r.relPath,message:i.message});let o=lo(r.lang,r.relPath,{size:r.size,mtime:r.mtime});this.emit("index:result",r,{payload:o.payload,meta:{size:o.fileSize,mtime:o.mtime},snapshotSummary:kb(r.sharedBuffer,r.relPath,r.size,r.mtime,r.encoding)})}else this.emit("error",i);this.markConsumerDone(r,s)}markConsumerDone(t,r){t.consumers.has(r)&&(t.consumers.delete(r),t.consumers.size===0&&(this.contexts.delete(t.id),t.sharedBuffer=null,this.releaseInflight(t.size),this.processed+=1))}async awaitActiveContexts(){let t=0;for(;this.contexts.size;){let r=xi.performance.now();if(r-t>=dT){t=r;let i=Array.from(this.contexts.values()).map(o=>({id:o.id,relPath:o.relPath,lang:o.lang,ageMs:Math.round(r-o.startedAt),consumers:Array.from(o.consumers),size:o.size})).sort((o,a)=>a.ageMs-o.ageMs);mt(`[${new Date().toISOString()}] [StreamingIndexer] active contexts still pending`,{runId:this.runId,count:i.length,oldest:i.slice(0,10),stallFailMs:sT})}let s=Array.from(this.contexts.values()).filter(i=>r-i.startedAt>=sT);for(let i of s){mt(`[${new Date().toISOString()}] [StreamingIndexer] force-skipping stalled context`,{runId:this.runId,id:i.id,relPath:i.relPath,lang:i.lang,ageMs:Math.round(r-i.startedAt),consumers:Array.from(i.consumers)}),this.recordSkip(i.absPath,`stalled:${i.lang}`);for(let o of Array.from(i.consumers))this.markConsumerDone(i,o)}await new Promise(i=>setTimeout(i,25))}}async awaitBatchSchedulerCapacity(t,r){let s=this.getBatchScheduler(t);s&&await s.waitForCapacity(r)}async flushBatchSchedulers(){let t=Array.from(this.batchSchedulers.values());await Promise.all(t.map(async r=>r.flushAll()))}getBatchScheduler(t){let r=this.batchSchedulers.get(t);if(r)return r;if(this.batchSchedulerInitErrors.has(t))return null;let s=Gs(t);if(!ia(s))return null;try{let i=new Jf(s.createBatchIndexer(this.projectRoot,"index"),s.getBatchSchedulerOptions?.());return this.batchSchedulers.set(t,i),i}catch(i){let o=i instanceof Error?i:new Error(String(i));return this.batchSchedulerInitErrors.set(t,o),mt(`[${new Date().toISOString()}] [StreamingIndexer] batch scheduler init failed`,{runId:this.runId,lang:t,message:o.message}),null}}async processResolvedFile(t){if(t.size>Vf){this.recordSkip(t.absPath,"oversize");return}await this.awaitBatchSchedulerCapacity(t.lang,t.size),await this.acquireInflight(t.size);let r;try{r=await Uj(t.absPath)}catch(i){this.releaseInflight(t.size),this.recordSkip(t.absPath,`read-error:${i?.message??i}`);return}let s=this.createContext({absPath:t.absPath,relPath:t.relPath,lang:t.lang,size:t.size,mtime:t.mtime,sharedBuffer:r,encoding:t.encoding,preDeleted:t.preDeleted,emitMode:t.emitMode});this.contexts.set(s.id,s),this.emit("file:discovered",s),this.scheduleIndexTask(s),this.discovered+=1}},Pb=class{constructor(e){this.capacity=e;this.items=[];this.pushWaiters=[];this.shiftWaiters=[];this.closed=!1}async push(e){for(;!this.closed&&this.items.length>=this.capacity;)await new Promise(r=>this.pushWaiters.push(r));if(this.closed)return;let t=this.shiftWaiters.shift();if(t){t(e);return}this.items.push(e)}async pushMany(e){for(let t of e)await this.push(t)}async shift(){if(this.items.length>0){let e=this.items.shift(),t=this.pushWaiters.shift();return t&&t(),e}return this.closed?null:new Promise(e=>this.shiftWaiters.push(e))}close(){if(this.closed)return;this.closed=!0;let e=this.shiftWaiters.splice(0,this.shiftWaiters.length);for(let r of e)r(null);let t=this.pushWaiters.splice(0,this.pushWaiters.length);for(let r of t)r()}}});function Zj(n,e){if(!e)return!1;let t=typeof e.last_modified=="number"?e.last_modified:void 0,r=typeof e.file_size=="number"?e.file_size:void 0;return t===void 0||n.mtime===void 0||t!==n.mtime?!1:r===void 0||n.size===void 0?!0:r===n.size}function Gj(n,e){return n.emitMode!=="full"?!0:Number(e?.fully_indexed||0)===1}function pT(n){let e=new Map,{shardCount:t,shardPendingLoads:r,knownMap:s,predictCost:i}=n,o=(p,f)=>{if(typeof f=="number"&&f>=0&&f<t)return f;let m=0,h=r[0];for(let g=1;g<r.length;g++)r[g]<h&&(h=r[g],m=g);return m};return{register:p=>{let f=e.get(p.relPath);if(f)return f;let m=s.get(p.relPath),h=i(p),g=o(h,m?.chunk_id),y={entry:p,relPath:p.relPath,absPath:p.absPath,size:p.size,mtime:p.mtime,predicted:h,oldChunk:m?.chunk_id,hadExisting:!!m,targetChunk:g};return e.set(p.relPath,y),r[g]+=h,y},get:p=>e.get(p),delete:p=>{e.delete(p)},has:p=>e.has(p),shouldSkip:p=>{let f=s.get(p.relPath);return Zj(p,f)&&Gj(p,f)},values:()=>e.values()}}var fT=ne(()=>{"use strict"});function Jj(n){n.exec(`
|
|
283
|
+
${l}`,hints:["Fix the SQL to use the correct table and column names shown above, then retry."]}}}catch{}return{success:!1,error:`query-db failed: ${i}`}}}}});function As(...n){zu&&console.log(...n)}function Aj(n){let e=n.split(yo.default.sep),t=e.lastIndexOf("src");return t===-1?null:[...e.slice(0,t),"out",...e.slice(t+1)].join(yo.default.sep)}function QE(n){let e=yo.default.join(__dirname,n);if(go.default.existsSync(e))return e;let t=Aj(__dirname);if(t){let r=yo.default.join(t,n);if(go.default.existsSync(r))return r}return e}var yo,go,YE,Ij,zu,wb,Bu,Xs,Gf=ne(()=>{"use strict";yo=q(require("path")),go=q(require("fs")),YE=require("worker_threads");dr();gt();Ij={maxOldGenerationSizeMb:1024},zu=Ht(),wb=Math.max(5e3,Number(process.env.PANDO_SQLITE_WRITER_CALL_TIMEOUT_MS||12e4));Bu=()=>({writeMs:0,writeTrackedMs:0,writePreDeleteMs:0,writeInsertExportsMs:0,writeInsertNodesMs:0,writeInsertImportsMs:0,writeInsertImportBindingsMs:0,writeInsertFileMs:0,writeFinalizeMs:0,writeInsertFtsMs:0,writeResidualMs:0}),Xs=class n{constructor(e){this.dbPath=e;this.nextId=1;this.pending=new Map;this.terminating=!1;let t=this.findWorkerScript();zu&&As(`[SqliteWriterClient] Creating worker with script: ${t}`),this.worker=new YE.Worker(t,{resourceLimits:{...Ij}}),this.worker.on("message",r=>this.handleMessage(r)),this.worker.on("error",r=>this.handleWorkerError(r instanceof Error?r:new Error(String(r)))),this.worker.on("exit",r=>{r!==0&&this.handleWorkerError(new Error(`sqlite writer exited with code ${r}`))}),this.ready=new Promise((r,s)=>{this.readyResolve=r,this.readyReject=s})}static{this.shared=new Map}static async getShared(e,t){let r=this.shared.get(e);if(r)return r.refs+=1,r.initPromise&&await r.initPromise,r.client;let s=new n(e),i={client:s,refs:1,initPromise:s.init(t)};this.shared.set(e,i);try{await i.initPromise}catch(o){throw this.shared.delete(e),o}finally{i.initPromise=null}return s}static async releaseShared(e){let t=e.dbPath,r=this.shared.get(t);r&&(r.refs=Math.max(0,r.refs-1),!(r.refs>0)&&(this.shared.delete(t),await e.shutdown()))}static async shutdownAllShared(e){let t=Array.from(this.shared.values());this.shared.clear();let r=!!e?.force;if(X("SqliteWriterClient","shutdownAllShared begin",{count:t.length,force:r,reason:e?.reason??null,dbPaths:t.map(({client:s})=>s.dbPath)}),r){for(let{client:s}of t)try{s.forceDispose(e?.reason??"force shared shutdown")}catch{}X("SqliteWriterClient","shutdownAllShared force-dispatched",{count:t.length,reason:e?.reason??null});return}await Promise.all(t.map(async({client:s})=>{try{await s.shutdown()}catch{}})),X("SqliteWriterClient","shutdownAllShared complete",{count:t.length,force:r,reason:e?.reason??null})}findWorkerScript(){let e=ks("sqlite-writer-worker");if(e)return e;let t=process.env.PANDO_SQLITE_WORKER_SCRIPT;if(t&&go.default.existsSync(t))return t;let r=process.env.PANDO_WORKER_SCRIPT_DIR;if(r){let i=yo.default.join(r,"sqlite-writer-worker.mjs");if(go.default.existsSync(i))return i;let o=yo.default.join(r,"sqlite-writer-worker.js");if(go.default.existsSync(o))return o}let s=QE("workers/sqlite-writer-worker.mjs");return go.default.existsSync(s)?s:QE("workers/sqlite-writer-worker.js")}async init(e){try{go.default.mkdirSync(yo.default.dirname(this.dbPath),{recursive:!0})}catch(r){As("[SqliteWriterClient] Failed to ensure DB directory:",r?.message??r)}let t={cmd:"init",dbPath:this.dbPath,pragmas:e.pragmas,projectRoot:e.projectRoot};this.worker.postMessage(t),await this.ready}batchPreDelete(e){return e.length?this.call("batchPreDelete",{files:e}):Promise.resolve(null)}enqueueWrite(e){return this.call("write",{payload:e}).then(t=>t??Bu())}enqueueWriteBatch(e){return e.length?this.call("writeBatch",{payloads:e}).then(t=>t??Bu()):Promise.resolve(Bu())}flush(){return this.call("flush",{})}async shutdown(){X("SqliteWriterClient","shutdown begin",{dbPath:this.dbPath,pending:this.pending.size,terminating:this.terminating});try{await this.call("shutdown",{})}catch(e){As("[SqliteWriterClient] shutdown request failed:",e?.message??e),X("SqliteWriterClient","shutdown request failed",{dbPath:this.dbPath,error:e?.message??String(e)})}finally{await this.terminateWorker("graceful shutdown"),X("SqliteWriterClient","shutdown complete",{dbPath:this.dbPath})}}forceDispose(e="force dispose"){if(this.terminating)return;X("SqliteWriterClient","forceDispose",{dbPath:this.dbPath,reason:e,pending:this.pending.size});let t=new Error(`sqlite writer force disposed: ${e}`);for(let[r,s]of this.pending)s.timeoutHandle&&clearTimeout(s.timeoutHandle),s.reject(t),this.pending.delete(r);try{this.readyReject?.(t)}catch{}finally{this.readyReject=void 0,this.readyResolve=void 0}this.pendingWatchdog&&(clearInterval(this.pendingWatchdog),this.pendingWatchdog=void 0),this.terminateWorker(e)}call(e,t){let r=this.nextId++,s={cmd:e,id:r,dbPath:this.dbPath,...t},i;if(e==="write"&&t?.payload){let o=t.payload;i={fileRel:o.fileRel,lang:o.lang,exports:o.exportRows?.length??0,nodes:o.nodeRows?.length??0,refs:o.referenceRows?.length??0,symbolMentions:o.symbolMentionRows?.length??0,imports:o.importRows?.length??0,importBindings:o.importBindingRows?.length??0,hasFts:!!o.fts}}else if(e==="writeBatch"&&t?.payloads){let o=t.payloads;i={fileCount:o.length,sample:o.slice(0,5).map(a=>a.fileRel)}}else if(e==="batchPreDelete"&&t?.files){let o=t.files;i={fileCount:o.length,sample:o.slice(0,10)}}return new Promise((o,a)=>{let c={resolve:o,reject:a,cmd:e,startedAt:Date.now(),summary:i};if(c.timeoutHandle=setTimeout(()=>{let l=this.pending.get(r);if(!l)return;this.pending.delete(r);let u=new Error(`sqlite writer timed out after ${wb}ms (cmd=${e}, id=${r})`);try{As(`[${new Date().toISOString()}] [SqliteWriterClient] timeout`,{dbPath:this.dbPath,id:r,cmd:e,timeoutMs:wb,pending:this.pending.size,summary:l.summary})}catch{}l.reject(u),this.handleWorkerError(u)},wb),this.pending.set(r,c),zu){let l={dbPath:this.dbPath,id:r,cmd:e,pendingBeforeSend:this.pending.size-1};i&&Object.assign(l,i),As(`[${new Date().toISOString()}] [SqliteWriterClient] dispatch`,l)}this.worker.postMessage(s),this.pendingWatchdog||(this.pendingWatchdog=setInterval(()=>{if(this.pending.size===0){clearInterval(this.pendingWatchdog),this.pendingWatchdog=void 0;return}let l=Date.now();for(let[u,d]of this.pending){let p=l-d.startedAt;if(p>5e3){let f={dbPath:this.dbPath,id:u,cmd:d.cmd,ms:p};d.summary&&Object.assign(f,d.summary),As(`[${new Date().toISOString()}] [SqliteWriterClient] pending request slow`,f)}}},2e3))})}handleMessage(e){if(e.type==="ready"){zu&&As(`[${new Date().toISOString()}] [SqliteWriterClient] worker ready`,{dbPath:this.dbPath}),this.readyResolve?.(),this.readyResolve=void 0,this.readyReject=void 0;return}if(e.type==="error"){let t=new Error(e.message||"sqlite writer error");if(e.stack&&(t.stack=e.stack),typeof e.id=="number"&&this.pending.has(e.id)){let r=this.pending.get(e.id);this.pending.delete(e.id),r.timeoutHandle&&clearTimeout(r.timeoutHandle),As(`[${new Date().toISOString()}] [SqliteWriterClient] response error`,{dbPath:this.dbPath,id:e.id,cmd:r.cmd,pending:this.pending.size,message:t.message}),r.reject(t)}else As(`[${new Date().toISOString()}] [SqliteWriterClient] worker error (unbound)`,{dbPath:this.dbPath,id:e.id,message:t.message,pending:this.pending.size}),this.handleWorkerError(t);return}if(e.type==="response"){let t=this.pending.get(e.id);if(!t)return;let r=Date.now()-t.startedAt;if(this.pending.delete(e.id),t.timeoutHandle&&clearTimeout(t.timeoutHandle),this.pending.size===0&&this.pendingWatchdog&&(clearInterval(this.pendingWatchdog),this.pendingWatchdog=void 0),zu&&r<=2e3&&As(`[${new Date().toISOString()}] [SqliteWriterClient] response`,{dbPath:this.dbPath,id:e.id,cmd:t.cmd,ms:r,pending:this.pending.size}),r>2e3){let s={dbPath:this.dbPath,id:e.id,cmd:t.cmd,ms:r,pending:this.pending.size,metrics:e.metrics??null};t.summary&&Object.assign(s,t.summary),As(`[${new Date().toISOString()}] [SqliteWriterClient] response slow`,s)}t.resolve(e.metrics??null)}}handleWorkerError(e){for(let[,t]of this.pending)t.timeoutHandle&&clearTimeout(t.timeoutHandle),t.reject(e);this.pending.clear(),this.readyReject&&(this.readyReject(e),this.readyReject=void 0,this.readyResolve=void 0)}async terminateWorker(e){if(!this.terminating){this.terminating=!0,X("SqliteWriterClient","terminateWorker begin",{dbPath:this.dbPath,reason:e,pending:this.pending.size});try{this.pendingWatchdog&&(clearInterval(this.pendingWatchdog),this.pendingWatchdog=void 0),await this.worker.terminate(),X("SqliteWriterClient","terminateWorker complete",{dbPath:this.dbPath,reason:e})}catch(t){As("[SqliteWriterClient] worker termination failed:",t?.message??t),X("SqliteWriterClient","terminateWorker failed",{dbPath:this.dbPath,reason:e,error:t?.message??String(t)})}}}}});function Vn(n,e="Operation cancelled"){let t=typeof n=="string"&&n.trim()?n.trim():n instanceof Error&&n.message.trim()?n.message.trim():e,r=new Error(t);return r.name="AbortError",r.code="ABORT_ERR",r}function zi(n){return n&&n instanceof Error?n.name==="AbortError"||n.code==="ABORT_ERR":!1}function lt(n,e){if(n?.aborted)throw Vn(n.reason,e)}async function qu(n){lt(n),await new Promise(e=>setImmediate(e)),lt(n)}function vb(n,e="Operation cancelled",t){if(!n)return{promise:new Promise(()=>{}),cleanup:()=>{}};if(n.aborted){try{t?.()}catch{}return{promise:Promise.reject(Vn(n.reason,e)),cleanup:()=>{}}}let r=!1,s=()=>{i();try{t?.()}catch{}o(Vn(n.reason,e))},i=()=>{if(!r){r=!0;try{n.removeEventListener("abort",s)}catch{}}},o;return{promise:new Promise((c,l)=>{o=l,n.addEventListener("abort",s,{once:!0})}),cleanup:i}}function eT(...n){let e=n.filter(o=>!!o);if(e.length===0)return{signal:void 0,cleanup:()=>{}};if(e.length===1)return{signal:e[0],cleanup:()=>{}};let t=new AbortController,r=[],s=()=>{for(let o of r)o.signal.removeEventListener("abort",o.handler);r.length=0},i=o=>{t.signal.aborted||t.abort(o.reason),s()};for(let o of e){if(o.aborted)return i(o),{signal:t.signal,cleanup:s};let a=()=>i(o);o.addEventListener("abort",a,{once:!0}),r.push({signal:o,handler:a})}return{signal:t.signal,cleanup:s}}var da=ne(()=>{"use strict"});function Fj(n,e){X("BatchAnalysisScheduler",n,e)}function Oj(n,e){X("IndexTiming",n,e)}var tT,nT,Nj,Mj,Dj,Jf,rT=ne(()=>{"use strict";gt();tT=Math.max(1,Number(process.env.PANDO_BATCH_INDEX_MAX_FILES||"64")),nT=Math.max(1,Number(process.env.PANDO_BATCH_INDEX_MAX_BYTES||`${1024*1024}`)),Nj=Math.max(1,Number(process.env.PANDO_BATCH_INDEX_MAX_WAIT_MS||"15")),Mj=Math.max(tT,Number(process.env.PANDO_BATCH_INDEX_MAX_PENDING_FILES||"256")),Dj=Math.max(nT,Number(process.env.PANDO_BATCH_INDEX_MAX_PENDING_BYTES||`${8*1024*1024}`));Jf=class{constructor(e,t){this.indexer=e;this.batches=new Map;this.inFlight=new Set;this.capacityWaiters=[];this.drainWaiters=[];this.pendingFiles=0;this.pendingBytes=0;this.closed=!1;this.maxFilesPerBatch=t?.maxFilesPerBatch??tT,this.maxBatchBytes=t?.maxBatchBytes??nT,this.maxWaitMs=t?.maxWaitMs??Nj,this.maxPendingFiles=t?.maxPendingFiles??Mj,this.maxPendingBytes=t?.maxPendingBytes??Dj}async waitForCapacity(e){for(;!this.closed;){let t=this.pendingFiles<this.maxPendingFiles,r=this.pendingBytes===0||this.pendingBytes+Math.max(0,e)<=this.maxPendingBytes;if(t&&r)return;await new Promise(s=>this.capacityWaiters.push(s))}}async enqueue(e){if(this.closed)throw new Error("batch analysis scheduler is closed");let t=await this.indexer.prepare(e.prepareInput),r=this.indexer.batchKey(t),s=this.batches.get(r)??{items:[],bytes:0,timer:null};this.batches.has(r)||this.batches.set(r,s),this.pendingFiles+=1,this.pendingBytes+=t.meta?.size??0;let i=new Promise((o,a)=>{s.items.push({prepared:t,entry:e,resolve:o,reject:a}),s.bytes+=t.meta?.size??0});return s.items.length>=this.maxFilesPerBatch||s.bytes>=this.maxBatchBytes?this.flushBatch(r,s.items.length>=this.maxFilesPerBatch?"max-files":"max-bytes"):s.timer||(s.timer=setTimeout(()=>{s.timer=null,this.flushBatch(r,"max-wait")},this.maxWaitMs)),i}async flushAll(){let e=Array.from(this.batches.keys());for(let t of e)this.flushBatch(t,"flush-all");for(;this.batches.size||this.inFlight.size;)await new Promise(t=>this.drainWaiters.push(t));await this.indexer.flush?.()}async close(){this.closed||(this.closed=!0,await this.flushAll(),await this.indexer.close?.())}flushBatch(e,t){let r=this.batches.get(e);if(!r||!r.items.length){r&&!r.items.length&&this.clearBatch(e,r);return}r.timer&&(clearTimeout(r.timer),r.timer=null);let s=r.items.splice(0,r.items.length);r.bytes=0,Fj("flush",{batchKey:e,reason:t,fileCount:s.length,batchBytes:s.reduce((o,a)=>o+(a.prepared.meta?.size??0),0),pendingFiles:this.pendingFiles,pendingBytes:this.pendingBytes}),this.clearBatch(e,r);let i=this.runBatch(s).finally(()=>{this.inFlight.delete(i),this.notifyWaiters()});this.inFlight.add(i)}async runBatch(e){let t=Date.now(),r=e.reduce((f,m)=>f+(m.prepared.meta?.size??0),0),s=e[0]?.prepared?this.indexer.batchKey(e[0].prepared):"<unknown>",i,o=0;try{let f=e.map(h=>h.prepared),m=Date.now();i=await this.indexer.analyzeBatch(f),o=Date.now()-m}catch(f){o=Date.now()-t;let m=f instanceof Error?f:new Error(String(f));i=new Map(e.map(h=>[h.prepared.fileKey,{error:m.message}]))}let a=Date.now(),c=0;await Promise.all(e.map(async f=>{try{let m=await this.indexer.buildProcessedFile({...f.entry.prepareInput,content:f.entry.getContent()},f.prepared,i.get(f.prepared.fileKey)??{error:`missing analysis result for ${f.prepared.relPath}`});f.resolve(m)}catch(m){c+=1,f.reject(m instanceof Error?m:new Error(String(m)))}finally{this.pendingFiles=Math.max(0,this.pendingFiles-1),this.pendingBytes=Math.max(0,this.pendingBytes-(f.prepared.meta?.size??0))}}));let l=Date.now()-a,u=Date.now()-t,d=0,p=0;for(let f of i.values())f&&typeof f=="object"&&"error"in f?p+=1:d+=1;Oj("batch-analysis.complete",{batchKey:s,fileCount:e.length,batchBytes:r,analyzeDurationMs:o,buildDurationMs:l,totalDurationMs:u,analyzedOk:d,analyzedErrors:p,buildErrors:c,pendingFiles:this.pendingFiles,pendingBytes:this.pendingBytes})}clearBatch(e,t){t.timer&&(clearTimeout(t.timer),t.timer=null),this.batches.delete(e)}notifyWaiters(){let e=this.capacityWaiters.splice(0,this.capacityWaiters.length);for(let r of e)try{r()}catch{}if(this.batches.size||this.inFlight.size)return;let t=this.drainWaiters.splice(0,this.drainWaiters.length);for(let r of t)try{r()}catch{}}}});function $j(n,e){return $r.default.relative(n,e).replace(/\\/g,"/")}function mt(...n){process.env.PANDO_QUIET||console.log(jj([`[${new Date().toISOString()}]`,...n]))}function jj(n){return n.map(Lj).join(" ")}function Lj(n){if(typeof n=="string")return n;if(n instanceof Error)return n.stack||n.message;try{let e=JSON.stringify(n);if(typeof e=="string")return e}catch{}return(0,uT.inspect)(n,{depth:null,breakLength:1/0,compact:!0})}function Or(n,e){let t=n.replace(/^\[WorkerController\]\s*/,"");X("WorkerController",t,e)}function Hu(n,e){X("IndexTiming",n,e)}function zj(n){let e=n.split($r.default.sep),t=e.lastIndexOf("src");return t===-1?null:[...e.slice(0,t),"out",...e.slice(t+1)].join($r.default.sep)}function bo(n){let e=$r.default.join(__dirname,n);if(vr.default.existsSync(e))return e;let t=zj(__dirname);if(t){let r=$r.default.join(t,n);if(vr.default.existsSync(r))return r}return e}function Hj(n=4){try{let e=new Error().stack;return e?e.split(`
|
|
284
|
+
`).slice(2,2+n).map(t=>t.trim()).join(" | "):"unknown"}catch{return"unknown"}}async function Wj(n,e){ut.idleTimer&&(clearTimeout(ut.idleTimer),ut.idleTimer=null),ut.scriptPath&&ut.scriptPath!==n&&pa("worker script path changed"),ut.scriptPath=n;let t=Math.max(1,e);for(;ut.indexWorkers.length<t;)ut.indexWorkers.push(new Wu(n,"index"));await Promise.all(ut.indexWorkers.map(i=>i.ready())),ut.refCount+=1;let r=ut.generation;mt("[SharedWorkers] acquired",{generation:r,refCount:ut.refCount,targetCount:t,activeIndexWorkers:ut.indexWorkers.length});let s=!1;return{indexWorkers:ut.indexWorkers,release:()=>{if(!s){if(s=!0,r!==ut.generation){mt("[SharedWorkers] release skipped (stale generation)",{leaseGeneration:r,currentGeneration:ut.generation,refCount:ut.refCount});return}if(ut.refCount=Math.max(0,ut.refCount-1),mt("[SharedWorkers] released",{generation:ut.generation,refCount:ut.refCount}),ut.refCount===0){let i=Math.max(0,Number(process.env.PANDO_SHARED_WORKER_IDLE_MS||3e4));if(i===0){pa("last shared worker lease released");return}let o=ut.generation;ut.idleTimer=setTimeout(()=>{ut.idleTimer=null,ut.refCount===0&&ut.generation===o&&pa(`shared worker idle timeout (${i}ms)`)},i);try{ut.idleTimer.unref?.()}catch{}mt("[SharedWorkers] idle shutdown scheduled",{generation:o,idleMs:i,indexWorkers:ut.indexWorkers.length})}}}}}function pa(n="shared workers shutdown"){ut.idleTimer&&(clearTimeout(ut.idleTimer),ut.idleTimer=null);let e=ut.generation+1;mt("[SharedWorkers] shutdown",{reason:n,currentGeneration:ut.generation,nextGeneration:e,refCount:ut.refCount,indexWorkers:ut.indexWorkers.length,scriptPath:ut.scriptPath,caller:Hj()}),ut.generation+=1;for(let t of ut.indexWorkers)try{t.dispose()}catch{}ut.indexWorkers=[],ut.refCount=0,ut.scriptPath=null}function Xf(){for(let n of Array.from(Tb))try{n.stop()}catch{}}async function Uj(n){let e=await iT.promises.readFile(n),t=new SharedArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}function Kj(n,e){return Buffer.from(n).toString(e)}function kb(n,e,t,r,s,i){let o=Buffer.from(n),a=(0,lT.createHash)("sha1").update(o).digest("hex"),c=i??o.toString(s),l=c?c.split(/\r?\n/).length:0;return{relPath:e,size:t,mtime:r,objectId:a,lineCount:l,encoding:s}}var $r,vr,iT,oT,aT,cT,lT,xi,uT,Bj,Vf,Rb,dT,sT,qj,Eb,Tb,ut,Wu,Uu,Pb,Qf=ne(()=>{"use strict";$r=q(require("path")),vr=q(require("fs")),iT=require("fs"),oT=q(require("os")),aT=require("worker_threads"),cT=require("events"),lT=require("crypto"),xi=require("perf_hooks"),uT=require("util");Bn();sf();dr();da();gt();rT();Bj={maxOldGenerationSizeMb:1024},Vf=1*1024*1024,Rb=Math.max(3e4,Number(process.env.PANDO_WORKER_INIT_TIMEOUT_MS||12e4)),dT=Math.max(1e3,Number(process.env.PANDO_ACTIVE_CONTEXT_STALL_LOG_MS||1e4)),sT=Math.max(dT,Number(process.env.PANDO_ACTIVE_CONTEXT_STALL_FAIL_MS||6e5)),qj=yu(),Eb=class{constructor(e){this.queue=[];this.available=Math.max(1,e|0),this.maxPermits=this.available}async acquire(){if(this.available>0){this.available-=1;return}await new Promise(e=>{this.queue.push(()=>{this.available-=1,e()})})}release(){if(this.available+=1,this.available>0&&this.queue.length){let e=this.queue.shift();e&&e()}}getAvailable(){return this.available}getQueued(){return this.queue.length}getInUse(){return Math.max(0,this.maxPermits-this.available)}getMax(){return this.maxPermits}},Tb=new Set,ut={scriptPath:null,indexWorkers:[],refCount:0,generation:0,idleTimer:null};Wu=class{constructor(e,t,r,s){this.pending=new Map;this.readySettled=!1;this.seq=0;this._load=0;this.totalProcessed=0;this.totalErrors=0;this.totalTimeMs=0;this.maxTimeMs=0;this.lastTimeMs=0;this.disposing=!1;this.createdAt=Date.now();this.role=t,this.scriptPath=e,mt(`[WorkerController] Creating ${t} worker with script: ${e}`),Or("[WorkerController] create",{role:t,scriptPath:e,scriptExists:vr.default.existsSync(e),projectRoot:r??null,extraInitKeys:s?Object.keys(s):[],pid:process.pid,runtimePaths:Rs(),envWorkerRoot:process.env.PANDO_WORKER_SCRIPT_DIR??null,envRuntimeRoot:process.env.PANDO_RUNTIME_ROOT??null});try{this.worker=new aT.Worker(e,{resourceLimits:{...Bj}})}catch(a){throw mt(`[WorkerController] Failed to create ${t} worker:`,a?.message||a),Or("[WorkerController] create failed",{role:t,scriptPath:e,error:a?.message||String(a)}),a}this.worker.on("online",()=>{Or("[WorkerController] online",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,pending:this.pending.size})}),this.worker.on("message",a=>this.onMessage(a)),this.worker.on("error",a=>{if(this.disposing){mt(`[WorkerController] ${t} worker error during shutdown:`,a?.message||a),Or("[WorkerController] error during shutdown",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,error:a?.message||String(a),reason:this.disposeReason??null});return}mt(`[WorkerController] ${t} worker error:`,a?.message||a),Or("[WorkerController] error",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,error:a?.stack||a?.message||String(a),pending:this.pending.size}),this.failAll(a)}),this.worker.on("exit",a=>{if(this.disposing){mt(`[WorkerController] ${t} worker terminated during shutdown`,{code:a,reason:this.disposeReason}),Or("[WorkerController] exit during shutdown",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,code:a,reason:this.disposeReason??null,pending:this.pending.size});return}mt(`[WorkerController] ${t} worker exited with code ${a}`),Or("[WorkerController] exit",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,code:a,pending:this.pending.size,sinceCreateMs:Date.now()-this.createdAt}),a!==0&&this.failAll(new Error(`worker exited with code ${a}`))}),this.readyPromise=new Promise((a,c)=>{this.readyResolve=()=>{this.readySettled||(this.readySettled=!0,a())},this.readyReject=l=>{this.readySettled||(this.readySettled=!0,c(l))}});let i=setTimeout(()=>{mt(`[WorkerController] ${t} worker initialization timeout after ${Math.round(Rb/1e3)}s`),Or("[WorkerController] init timeout",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,timeoutMs:Rb,pending:this.pending.size,readySettled:this.readySettled,sinceCreateMs:Date.now()-this.createdAt,memory:process.memoryUsage()});try{this.worker.terminate()}catch{}this.readyReject(new Error(`${t} worker initialization timeout`))},Rb);this.readyPromise.then(()=>clearTimeout(i)).catch(()=>clearTimeout(i));let o={cmd:"init",mode:t,...s};r&&(o.projectRoot=r),Or("[WorkerController] init posted",{role:t,scriptPath:this.scriptPath,threadId:this.worker.threadId,initPayload:o}),this.worker.postMessage(o)}get load(){return this._load}get pendingCount(){return this.pending.size}get stats(){let e=this.totalProcessed?Math.round(this.totalTimeMs/this.totalProcessed):0;return{role:this.role,load:this._load,pending:this.pending.size,processed:this.totalProcessed,errors:this.totalErrors,avgMs:e,maxMs:this.maxTimeMs,lastMs:this.lastTimeMs}}async ready(){await this.readyPromise}async process(e){await this.ready();let t=++this.seq,r={cmd:"process",requestId:t,role:this.role,projectRoot:e.projectRoot,file:e},s=new Promise((i,o)=>{this.pending.set(t,{kind:"process",resolve:i,reject:o,startedAt:xi.performance.now()})});return this._load+=1,this.worker.postMessage(r),s.finally(()=>{this._load=Math.max(0,this._load-1)})}async scan(e,t){await this.ready();let r=++this.seq,s={cmd:"scan",requestId:r,projectRoot:e.projectRoot,excludeDirs:e.excludeDirs,languageSupport:e.languageSupport,batchSize:e.batchSize,maxFileBytes:e.maxFileBytes},i=new Promise((o,a)=>{this.pending.set(r,{kind:"scan",resolve:o,reject:a,startedAt:xi.performance.now(),onBatch:t})});return this.worker.postMessage(s),i}cancelScans(){for(let[e,t]of this.pending)if(t.kind==="scan")try{this.worker.postMessage({cmd:"scan-cancel",requestId:e})}catch{}}dispose(e="worker disposed"){if(this.disposing)return;this.disposing=!0,this.disposeReason=e;let t=Vn(e,`${this.role} worker cancelled`);this.failAll(t),this.readyReject(t);try{this.worker.terminate()}catch{}}onMessage(e){if(e?.type==="ready"){mt(`[WorkerController] ${this.role} worker ready`),Or("[WorkerController] ready",{role:this.role,scriptPath:this.scriptPath,threadId:this.worker.threadId,pending:this.pending.size,sinceCreateMs:Date.now()-this.createdAt}),this.readyResolve();return}if(e?.type==="result"){let t=this.pending.get(e.requestId);if(t&&t.kind==="process"){this.pending.delete(e.requestId);let r=xi.performance.now()-t.startedAt;this.totalProcessed+=1,this.totalTimeMs+=r,this.lastTimeMs=Math.round(r),r>this.maxTimeMs&&(this.maxTimeMs=Math.round(r)),t.resolve(e.result)}return}if(e?.type==="scan:batch"){let t=this.pending.get(e.requestId);if(!t||t.kind!=="scan")return;Promise.resolve(t.onBatch(Array.isArray(e.files)?e.files:[])).then(()=>{try{this.worker.postMessage({cmd:"scan-ack",requestId:e.requestId})}catch(r){t.reject(r instanceof Error?r:new Error(String(r))),this.pending.delete(e.requestId)}}).catch(r=>{let s=r instanceof Error?r:new Error(String(r));t.reject(s),this.pending.delete(e.requestId);try{this.worker.postMessage({cmd:"scan-cancel",requestId:e.requestId})}catch{}});return}if(e?.type==="scan:done"){let t=this.pending.get(e.requestId);if(!t||t.kind!=="scan")return;this.pending.delete(e.requestId);let r=xi.performance.now()-t.startedAt;this.totalProcessed+=1,this.totalTimeMs+=r,this.lastTimeMs=Math.round(r),r>this.maxTimeMs&&(this.maxTimeMs=Math.round(r)),t.resolve({discovered:Number(e.discovered)||0,skipped:Number(e.skipped)||0,cancelled:!!e.cancelled});return}if(e?.type==="error"){mt(`[WorkerController] ${this.role} worker reported error:`,e.message),Or("[WorkerController] worker reported error",{role:this.role,scriptPath:this.scriptPath,threadId:this.worker.threadId,message:e.message??null,requestId:typeof e.requestId=="number"?e.requestId:null,stack:e.stack??null,pending:this.pending.size});let t=new Error(e.message||"worker error");if(e.stack&&(t.stack=e.stack),typeof e.requestId=="number"){let r=this.pending.get(e.requestId);if(r){this.pending.delete(e.requestId);let s=xi.performance.now()-r.startedAt;this.totalErrors+=1,this.totalTimeMs+=s,this.lastTimeMs=Math.round(s),s>this.maxTimeMs&&(this.maxTimeMs=Math.round(s)),r.reject(t);return}}this.totalErrors+=1,this.failAll(t);return}e?.type&&e.type!=="progress"&&e.type!=="mem"&&mt(`[WorkerController] ${this.role} worker sent message type: ${e.type}`)}failAll(e){for(let[t,r]of this.pending)r.reject(e),this.pending.delete(t)}},Uu=class extends cT.EventEmitter{constructor(t,r){super();this.indexWorkers=[];this.scanWorker=null;this.inflightBytes=0;this.inflightByteWaiters=[];this.contexts=new Map;this.discovered=0;this.processed=0;this.workerScanSkipped=0;this.skipCounts=new Map;this.skipSamples=new Map;this.ctxSeq=0;this.started=!1;this.stopped=!1;this.discoveryPromise=null;this.workerInitPromise=null;this.ownsWorkers=!0;this.releaseShared=null;this.statusInterval=null;this.batchSchedulers=new Map;this.batchSchedulerInitErrors=new Map;this.projectRoot=t,this.options=r??{},this.languageSupport=this.options.languageSupport??qj,this.supportedExtensions=bu(this.languageSupport),this.runId=this.options.runId??Math.random().toString(36).slice(2,8);let s=this.options.maxInFlight??10;this.inflightSemaphore=new Eb(s),this.maxInFlightBytes=Math.max(0,this.options.maxInFlightBytes??96*1024*1024),Tb.add(this)}on(t,r){return super.on(t,r),this}emit(t,...r){return super.emit(t,...r)}async ensureWorkers(){if(this.workerInitPromise)return this.workerInitPromise;let t=async()=>{let r=Date.now(),s=this.workerScriptPath(),i=this.options.concurrency??Math.max(2,oT.default.cpus()?.length||5);if(Or("[StreamingIndexer] ensureWorkers start",{runId:this.runId,root:this.projectRoot,scriptPath:s,scriptExists:vr.default.existsSync(s),concurrency:i,sharedWorkers:!!this.options.sharedWorkers,runtimePaths:Rs(),envWorkerRoot:process.env.PANDO_WORKER_SCRIPT_DIR??null,envRuntimeRoot:process.env.PANDO_RUNTIME_ROOT??null}),mt(`[${new Date().toISOString()}] [StreamingIndexer] ensureWorkers: scriptPath=${s}, exists=${vr.default.existsSync(s)}, concurrency=${i}, __dirname=${__dirname} runId=${this.runId} root=${this.projectRoot}`),!vr.default.existsSync(s)){mt(`[${new Date().toISOString()}] [StreamingIndexer] ERROR: Worker script not found at ${s}`);let o=bo("workers/indexer-worker.mjs"),a=bo($r.default.join("..","..","dist","workers","indexer-worker.mjs"));mt(`[${new Date().toISOString()}] [StreamingIndexer] Alternative paths: ${o} (exists=${vr.default.existsSync(o)}), ${a} (exists=${vr.default.existsSync(a)})`)}if(this.options.sharedWorkers){let o=await Wj(s,i);this.indexWorkers=o.indexWorkers,this.releaseShared=o.release,this.ownsWorkers=!1}else{for(let o=0;o<i;o++)this.indexWorkers.push(new Wu(s,"index",this.projectRoot));this.ownsWorkers=!0}this.scanWorker=new Wu(s,"scan",this.projectRoot),mt(`[${new Date().toISOString()}] [StreamingIndexer] ensureWorkers: waiting for ${this.indexWorkers.length} index workers and scan worker to be ready... runId=${this.runId}`),await Promise.all([...this.indexWorkers.map(o=>o.ready()),this.scanWorker.ready()]),Hu("streaming.ensure-workers.complete",{runId:this.runId,root:this.projectRoot,concurrency:i,durationMs:Date.now()-r,sharedWorkers:!!this.options.sharedWorkers}),Or("[StreamingIndexer] ensureWorkers ready",{runId:this.runId,root:this.projectRoot,indexWorkers:this.indexWorkers.length,ownsWorkers:this.ownsWorkers}),mt(`[${new Date().toISOString()}] [StreamingIndexer] ensureWorkers: all workers ready runId=${this.runId}`)};this.workerInitPromise=t().catch(r=>{throw mt(`[${new Date().toISOString()}] [StreamingIndexer] ensureWorkers failed:`,r?.message||r),Or("[StreamingIndexer] ensureWorkers failed",{runId:this.runId,root:this.projectRoot,error:r?.stack||r?.message||String(r),runtimePaths:Rs()}),this.workerInitPromise=null,r}),await this.workerInitPromise}async start(){this.started||(this.started=!0,await this.ensureWorkers(),this.discoveryPromise=this.runDiscovery())}async waitForDrain(){let t=Date.now();mt(`[${new Date().toISOString()}] [StreamingIndexer] waitForDrain: awaiting discovery completion runId=${this.runId}`),await this.discoveryPromise;let r=Date.now()-t;mt(`[${new Date().toISOString()}] [StreamingIndexer] waitForDrain: discovery completed in ${r}ms runId=${this.runId}`)}async scanFiles(t){await this.ensureWorkers();let r=this.scanWorker;if(!r)throw new Error("scan worker missing");let s=this.options,i=Date.now();mt(`[${new Date().toISOString()}] [StreamingIndexer] workerScan:start`,{runId:this.runId,root:this.projectRoot,excludeDirs:s.excludeDirs??[],scanOrigin:"worker"});let o=await r.scan({projectRoot:this.projectRoot,excludeDirs:s.excludeDirs??[],languageSupport:this.languageSupport,batchSize:100,maxFileBytes:Vf},async a=>{if(!t||this.stopped||!a.length)return;let c=a.map(l=>({relPath:l.relPath,absPath:l.absPath,lang:l.lang,size:l.size,mtime:l.mtimeMs}));await t(c)});return Hu("streaming.scan.complete",{runId:this.runId,root:this.projectRoot,discovered:o.discovered,skipped:o.skipped,cancelled:o.cancelled,durationMs:Date.now()-i}),mt(`[${new Date().toISOString()}] [StreamingIndexer] workerScan:done count=${o.discovered} ms=${Date.now()-i}`,{runId:this.runId,discovered:o.discovered,skipped:o.skipped,cancelled:o.cancelled,scanOrigin:"worker"}),o}async processFileEntries(t){if(!Array.isArray(t)||t.length===0)return;let r=Date.now();await this.ensureWorkers();let s=Date.now()-r;s>1e3&&Hu("streaming.manual.ensure-workers.complete",{runId:this.runId,root:this.projectRoot,entryCount:t.length,durationMs:s,sharedWorkers:!!this.options.sharedWorkers});let i=Date.now(),o=this.options.encoding??"utf8";for(let a of t){if(this.stopped)break;let c=a.absPath;if(typeof c!="string"||!c)continue;let l=$r.default.extname(c).toLowerCase();if(!this.supportedExtensions.has(l)){this.recordSkip(c,"unsupported-extension");continue}if(!vr.default.existsSync(c)){this.recordSkip(c,"missing");continue}if(a.size&&a.size>Vf){this.recordSkip(c,"oversize");continue}a.size&&a.size>10*1024*1024&&mt(`[${new Date().toISOString()}] [StreamingIndexer] Large file queued`,{absPath:c,sizeMB:Math.round(a.size/(1024*1024)*100)/100});let u=a.relPath??$j(this.projectRoot,c);if(!u||u.startsWith("..")){this.recordSkip(c,"outside-root");continue}let d=a.lang??Bt(u);if(!d){this.recordSkip(c,"unsupported-language");continue}await this.awaitBatchSchedulerCapacity(d,typeof a.size=="number"?a.size:0);let p=a.size,f=a.mtime;if(p===void 0||f===void 0)try{let m=vr.default.statSync(c);p=p??m.size,f=f??Math.floor(m.mtimeMs)}catch(m){this.recordSkip(c,`stat-error:${m?.message??m}`);continue}if(typeof p=="number"&&p>Vf){this.recordSkip(c,"oversize");continue}try{await this.processResolvedFile({absPath:c,relPath:u,lang:d,size:typeof p=="number"?p:0,mtime:typeof f=="number"?f:Math.floor(Date.now()),encoding:a.encoding??o,preDeleted:!!a.preDeleted,emitMode:a.emitMode})}catch(m){this.emit("error",m instanceof Error?m:new Error(String(m)))}}this.skipCounts.size&&mt(`[${new Date().toISOString()}] [StreamingIndexer] manual skip summary runId=${this.runId}`,{total:Array.from(this.skipCounts.values()).reduce((a,c)=>a+c,0),reasons:Object.fromEntries(this.skipCounts.entries()),samples:Object.fromEntries(this.skipSamples.entries())}),await this.flushBatchSchedulers(),await this.awaitActiveContexts(),Hu("streaming.manual.complete",{runId:this.runId,root:this.projectRoot,entryCount:t.length,discovered:this.discovered,processed:this.processed,durationMs:Date.now()-i})}stop(){if(this.stopped)return;this.stopped=!0;try{this.scanWorker?.cancelScans()}catch{}let t=Array.from(this.batchSchedulers.values());this.batchSchedulers.clear(),this.batchSchedulerInitErrors.clear();for(let r of t)r.close().catch(()=>{});if(this.ownsWorkers){for(let r of this.indexWorkers)r.dispose("streaming indexer stop");this.scanWorker?.dispose("streaming indexer stop"),this.indexWorkers=[],this.scanWorker=null}else if(this.releaseShared){try{this.releaseShared()}catch{}this.scanWorker?.dispose("streaming indexer stop"),this.scanWorker=null}this.workerInitPromise=null,this.started=!1,Tb.delete(this)}requestStop(){this.stopped=!0;try{this.scanWorker?.cancelScans()}catch{}}workerScriptPath(){let t=ks("indexer-worker");if(t)return t;let r=process.env.PANDO_INDEXER_WORKER_SCRIPT;if(r&&vr.default.existsSync(r))return r;let s=process.env.PANDO_WORKER_SCRIPT_DIR;if(s){let o=$r.default.join(s,"indexer-worker.mjs");if(vr.default.existsSync(o))return o;let a=$r.default.join(s,"indexer-worker.js");if(vr.default.existsSync(a))return a}let i=[bo($r.default.join("..","workers","indexer-worker.mjs")),bo("workers/indexer-worker.mjs"),bo($r.default.join("..","..","dist","workers","indexer-worker.mjs")),bo($r.default.join("..","workers","indexer-worker.js")),bo("workers/indexer-worker.js"),bo($r.default.join("..","..","dist","workers","indexer-worker.js"))];for(let o of i)if(vr.default.existsSync(o))return o;return i[0]}async runDiscovery(){let t=Date.now();mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: starting discovery for ${this.projectRoot} runId=${this.runId}`),await this.ensureWorkers(),mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: workers ready, starting worker scan... runId=${this.runId}`),this.logStatus("start"),this.statusInterval||(this.statusInterval=setInterval(()=>this.logStatus("periodic"),1e4));let r=0,s=xi.performance.now(),i=new Pb(Math.max(100,(this.options.maxInFlight??10)*20)),o=Math.max(1,Math.min(4,this.indexWorkers.length||this.options.concurrency||1)),a=Array.from({length:o},async()=>{try{for(;;){let c=await i.shift();if(!c||this.stopped)return;await this.processResolvedFile({absPath:c.absPath,relPath:c.relPath,lang:c.lang,size:c.size,mtime:c.mtime,encoding:this.options.encoding??"utf8",preDeleted:!1}),r+=1,r%500===0&&(mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: discovered ${r} files, contexts.size=${this.contexts.size}, processed=${this.processed} runId=${this.runId}`),this.logStatus("progress"))}}catch(c){throw i.close(),c}});try{let c=await this.scanFiles(async l=>{await i.pushMany(l)});this.workerScanSkipped=c.skipped,i.close(),await Promise.all(a),mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: discovery loop complete. Total discovered=${r}, time=${(xi.performance.now()-s).toFixed(0)}ms runId=${this.runId}`),this.skipCounts.size&&mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: skip summary runId=${this.runId}`,{total:Array.from(this.skipCounts.values()).reduce((l,u)=>l+u,0),reasons:Object.fromEntries(this.skipCounts.entries()),samples:Object.fromEntries(this.skipSamples.entries())})}catch(c){i.close(),mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: error during discovery runId=${this.runId}:`,c?.message||c),this.emit("error",c instanceof Error?c:new Error(String(c)))}finally{i.close(),this.statusInterval&&(clearInterval(this.statusInterval),this.statusInterval=null),await this.flushBatchSchedulers(),mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: waiting for active contexts to complete... contexts.size=${this.contexts.size} runId=${this.runId}`),await this.awaitActiveContexts(),Hu("streaming.discovery.complete",{runId:this.runId,root:this.projectRoot,discovered:this.discovered,processed:this.processed,activeContexts:this.contexts.size,durationMs:Date.now()-t}),mt(`[${new Date().toISOString()}] [StreamingIndexer] runDiscovery: all contexts complete, emitting drain runId=${this.runId}`),this.emit("drain"),this.stop()}}getWorkerScanSkippedCount(){return this.workerScanSkipped}logStatus(t){let r=new Date().toISOString(),s=this.indexWorkers.map((l,u)=>({idx:u,...l.stats})),i=s.reduce((l,u)=>l+u.pending,0),o=s.reduce((l,u)=>l+u.load,0),a=s.length?Math.round(o/s.length*100)/100:0,c=[...s].sort((l,u)=>u.pending-l.pending).slice(0,3).map(l=>({idx:l.idx,pending:l.pending,load:l.load,avgMs:l.avgMs,maxMs:l.maxMs,lastMs:l.lastMs}));mt(`[${r}] [StreamingIndexer] status:${t}`,{runId:this.runId,discovered:this.discovered,processed:this.processed,activeContexts:this.contexts.size,inflight:{inUse:this.inflightSemaphore.getInUse(),max:this.inflightSemaphore.getMax(),queued:this.inflightSemaphore.getQueued(),bytesInUse:this.inflightBytes,maxBytes:this.maxInFlightBytes,byteWaiters:this.inflightByteWaiters.length},workers:{count:s.length,avgLoad:a,totalPending:i,topPending:c}})}recordSkip(t,r){this.emit("file:skipped",t,r);let s=r||"unknown",i=(this.skipCounts.get(s)??0)+1;if(this.skipCounts.set(s,i),i<=5){let o=this.skipSamples.get(s)??[];o.length<5&&o.push(t),this.skipSamples.set(s,o)}}createContext(t){return{id:++this.ctxSeq,relPath:t.relPath,absPath:t.absPath,lang:t.lang,sharedBuffer:t.sharedBuffer,size:t.size,mtime:t.mtime,encoding:t.encoding,consumers:new Set(["index"]),startedAt:xi.performance.now(),preDeleted:t.preDeleted,emitMode:t.emitMode??"light"}}async acquireInflight(t){await this.inflightSemaphore.acquire();let r=Math.max(0,Math.trunc(t)||0);if(!(this.maxInFlightBytes<=0||r<=0)){for(;!this.stopped;){if(this.inflightBytes===0||this.inflightBytes+r<=this.maxInFlightBytes){this.inflightBytes+=r;return}await new Promise(s=>this.inflightByteWaiters.push(s))}this.inflightBytes+=r}}releaseInflight(t){let r=Math.max(0,Math.trunc(t)||0);if(this.inflightSemaphore.release(),r>0&&(this.inflightBytes=Math.max(0,this.inflightBytes-r)),this.inflightByteWaiters.length){let s=this.inflightByteWaiters.splice(0,this.inflightByteWaiters.length);for(let i of s)try{i()}catch{}}}scheduleIndexTask(t){let r=Gs(t.lang);if(ia(r)){let o=this.getBatchScheduler(t.lang);if(!o){let l=lo(t.lang,t.relPath,{size:t.size,mtime:t.mtime});this.emit("index:result",t,{payload:l.payload,meta:{size:l.fileSize,mtime:l.mtime},snapshotSummary:kb(t.sharedBuffer,t.relPath,t.size,t.mtime,t.encoding)}),this.markConsumerDone(t,"index");return}let a=null,c=()=>(a==null&&(a=Kj(t.sharedBuffer,t.encoding)),a);o.enqueue({prepareInput:{absPath:t.absPath,relPath:t.relPath,content:c(),meta:{size:t.size,mtime:t.mtime},preDeleted:t.preDeleted,lang:t.lang,emitMode:t.emitMode},getContent:c}).then(l=>{this.contexts.has(t.id)&&(this.emit("index:result",t,{payload:l.payload,meta:{size:l.fileSize,mtime:l.mtime},snapshotSummary:kb(t.sharedBuffer,t.relPath,t.size,t.mtime,t.encoding,c())}),this.markConsumerDone(t,"index"))}).catch(l=>{this.contexts.has(t.id)&&this.handleTaskError(l,t,"index")});return}let s=this.pickLeastLoadedWorker();if(!s){this.emit("error",new Error("no index workers available"));return}let i={projectRoot:this.projectRoot,absPath:t.absPath,relPath:t.relPath,lang:t.lang,sharedBuffer:t.sharedBuffer,size:t.size,mtime:t.mtime,encoding:t.encoding,preDeleted:t.preDeleted,emitMode:t.emitMode};s.process(i).then(o=>{this.contexts.has(t.id)&&(this.emit("index:result",t,o),this.markConsumerDone(t,"index"))}).catch(o=>{this.contexts.has(t.id)&&this.handleTaskError(o,t,"index")})}pickLeastLoadedWorker(){if(!this.indexWorkers.length)return null;let t=this.indexWorkers[0];for(let r=1;r<this.indexWorkers.length;r++)this.indexWorkers[r].load<t.load&&(t=this.indexWorkers[r]);return t}handleTaskError(t,r,s){let i=t instanceof Error?t:new Error(String(t));if(mt(`[${new Date().toISOString()}] [StreamingIndexer] task error`,{runId:this.runId,role:s,relPath:r.relPath,lang:r.lang,message:i.message}),s==="index"&&r.lang&&r.lang!=="ts"&&r.lang!=="js"){mt(`[${new Date().toISOString()}] [StreamingIndexer] soft-fail indexer error`,{lang:r.lang,relPath:r.relPath,message:i.message});let o=lo(r.lang,r.relPath,{size:r.size,mtime:r.mtime});this.emit("index:result",r,{payload:o.payload,meta:{size:o.fileSize,mtime:o.mtime},snapshotSummary:kb(r.sharedBuffer,r.relPath,r.size,r.mtime,r.encoding)})}else this.emit("error",i);this.markConsumerDone(r,s)}markConsumerDone(t,r){t.consumers.has(r)&&(t.consumers.delete(r),t.consumers.size===0&&(this.contexts.delete(t.id),t.sharedBuffer=null,this.releaseInflight(t.size),this.processed+=1))}async awaitActiveContexts(){let t=0;for(;this.contexts.size;){let r=xi.performance.now();if(r-t>=dT){t=r;let i=Array.from(this.contexts.values()).map(o=>({id:o.id,relPath:o.relPath,lang:o.lang,ageMs:Math.round(r-o.startedAt),consumers:Array.from(o.consumers),size:o.size})).sort((o,a)=>a.ageMs-o.ageMs);mt(`[${new Date().toISOString()}] [StreamingIndexer] active contexts still pending`,{runId:this.runId,count:i.length,oldest:i.slice(0,10),stallFailMs:sT})}let s=Array.from(this.contexts.values()).filter(i=>r-i.startedAt>=sT);for(let i of s){mt(`[${new Date().toISOString()}] [StreamingIndexer] force-skipping stalled context`,{runId:this.runId,id:i.id,relPath:i.relPath,lang:i.lang,ageMs:Math.round(r-i.startedAt),consumers:Array.from(i.consumers)}),this.recordSkip(i.absPath,`stalled:${i.lang}`);for(let o of Array.from(i.consumers))this.markConsumerDone(i,o)}await new Promise(i=>setTimeout(i,25))}}async awaitBatchSchedulerCapacity(t,r){let s=this.getBatchScheduler(t);s&&await s.waitForCapacity(r)}async flushBatchSchedulers(){let t=Array.from(this.batchSchedulers.values());await Promise.all(t.map(async r=>r.flushAll()))}getBatchScheduler(t){let r=this.batchSchedulers.get(t);if(r)return r;if(this.batchSchedulerInitErrors.has(t))return null;let s=Gs(t);if(!ia(s))return null;try{let i=new Jf(s.createBatchIndexer(this.projectRoot,"index"),s.getBatchSchedulerOptions?.());return this.batchSchedulers.set(t,i),i}catch(i){let o=i instanceof Error?i:new Error(String(i));return this.batchSchedulerInitErrors.set(t,o),mt(`[${new Date().toISOString()}] [StreamingIndexer] batch scheduler init failed`,{runId:this.runId,lang:t,message:o.message}),null}}async processResolvedFile(t){if(t.size>Vf){this.recordSkip(t.absPath,"oversize");return}await this.awaitBatchSchedulerCapacity(t.lang,t.size),await this.acquireInflight(t.size);let r;try{r=await Uj(t.absPath)}catch(i){this.releaseInflight(t.size),this.recordSkip(t.absPath,`read-error:${i?.message??i}`);return}let s=this.createContext({absPath:t.absPath,relPath:t.relPath,lang:t.lang,size:t.size,mtime:t.mtime,sharedBuffer:r,encoding:t.encoding,preDeleted:t.preDeleted,emitMode:t.emitMode});this.contexts.set(s.id,s),this.emit("file:discovered",s),this.scheduleIndexTask(s),this.discovered+=1}},Pb=class{constructor(e){this.capacity=e;this.items=[];this.pushWaiters=[];this.shiftWaiters=[];this.closed=!1}async push(e){for(;!this.closed&&this.items.length>=this.capacity;)await new Promise(r=>this.pushWaiters.push(r));if(this.closed)return;let t=this.shiftWaiters.shift();if(t){t(e);return}this.items.push(e)}async pushMany(e){for(let t of e)await this.push(t)}async shift(){if(this.items.length>0){let e=this.items.shift(),t=this.pushWaiters.shift();return t&&t(),e}return this.closed?null:new Promise(e=>this.shiftWaiters.push(e))}close(){if(this.closed)return;this.closed=!0;let e=this.shiftWaiters.splice(0,this.shiftWaiters.length);for(let r of e)r(null);let t=this.pushWaiters.splice(0,this.pushWaiters.length);for(let r of t)r()}}});function Zj(n,e){if(!e)return!1;let t=typeof e.last_modified=="number"?e.last_modified:void 0,r=typeof e.file_size=="number"?e.file_size:void 0;return t===void 0||n.mtime===void 0||t!==n.mtime?!1:r===void 0||n.size===void 0?!0:r===n.size}function Gj(n,e){return n.emitMode!=="full"?!0:Number(e?.fully_indexed||0)===1}function pT(n){let e=new Map,{shardCount:t,shardPendingLoads:r,knownMap:s,predictCost:i}=n,o=(p,f)=>{if(typeof f=="number"&&f>=0&&f<t)return f;let m=0,h=r[0];for(let g=1;g<r.length;g++)r[g]<h&&(h=r[g],m=g);return m};return{register:p=>{let f=e.get(p.relPath);if(f)return f;let m=s.get(p.relPath),h=i(p),g=o(h,m?.chunk_id),y={entry:p,relPath:p.relPath,absPath:p.absPath,size:p.size,mtime:p.mtime,predicted:h,oldChunk:m?.chunk_id,hadExisting:!!m,targetChunk:g};return e.set(p.relPath,y),r[g]+=h,y},get:p=>e.get(p),delete:p=>{e.delete(p)},has:p=>e.has(p),shouldSkip:p=>{let f=s.get(p.relPath);return Zj(p,f)&&Gj(p,f)},values:()=>e.values()}}var fT=ne(()=>{"use strict"});function Jj(n){n.exec(`
|
|
285
285
|
PRAGMA journal_mode=WAL;
|
|
286
286
|
PRAGMA synchronous=OFF;
|
|
287
287
|
PRAGMA temp_store=MEMORY;
|
|
@@ -523,7 +523,7 @@ ${l}`,hints:["Fix the SQL to use the correct table and column names shown above,
|
|
|
523
523
|
|
|
524
524
|
`),fa(n,"files","fully_indexed","INTEGER DEFAULT 0"),fa(n,"nodes","parent_node_id","INTEGER"),fa(n,"nodes","role","TEXT"),fa(n,"nodes","index_in_parent","INTEGER"),fa(n,"nodes","depth","INTEGER DEFAULT 0"),fa(n,"nodes","body_start_pos","INTEGER"),fa(n,"nodes","body_end_pos","INTEGER"),n.exec(`
|
|
525
525
|
CREATE INDEX IF NOT EXISTS idx_nodes_parent ON nodes(parent_node_id);
|
|
526
|
-
`)}function fa(n,e,t,r){n.prepare(`PRAGMA table_info("${e.replace(/"/g,'""')}")`).all().some(i=>i.name===t)||n.exec(`ALTER TABLE "${e.replace(/"/g,'""')}" ADD COLUMN ${t} ${r}`)}var mT,gT,Cb=ne(()=>{"use strict";mT=q(require("os"));gT=10});function Qs(n,e){em&&X("ThreadedIndexer",n,e)}function le(...n){em&&console.log(Xj([`[${new Date().toISOString()}]`,...n]))}function Xj(n){return n.map(Qj).join(" ")}function Qj(n){if(typeof n=="string")return n;if(n instanceof Error)return n.stack||n.message;try{let e=JSON.stringify(n);if(typeof e=="string")return e}catch{}return(0,wT.inspect)(n,{depth:null,breakLength:1/0,compact:!0})}function Rr(n,e){em&&X("ThreadedIndexer",n,e)}function yT(n,e){X("IndexTiming",n,e)}function Yj(n,e,t){return Math.max(e,Math.min(t,n))}function tL(){if(!ST){ST=!0;try{process.execArgv.some(n=>n.startsWith("--max-old-space-size"))||(0,_T.setFlagsFromString)(`--max_old_space_size=${eL}`)}catch{}}}function xT(n,e){Qs("createExcludePredicate input",{root:n,excludeDirs:e});let t=Xr(n,e);return t||null}var Ab,qi,Lr,Nb,_T,wT,Vj,em,Yf,Bi,Ib,bT,eL,ST,ma,Mb=ne(()=>{"use strict";Ab=q(require("os")),qi=q(require("path")),Lr=q(require("fs")),Nb=require("perf_hooks"),_T=require("v8"),wT=require("util");rn();aa();gt();Gf();Qf();oa();fT();ru();Mu();Vt();Cb();dr();Vj=["lang","parent_node_id","role","index_in_parent","depth","body_start_pos","body_end_pos"],em=Ht();Yf=1,Bi=3,Ib=Math.max(24,Number(process.env.AST_INDEX_MAX_INFLIGHT||192)),bT=Math.max(16*1024*1024,Number(process.env.AST_INDEX_MAX_INFLIGHT_BYTES||96*1024*1024)),eL=4096,ST=!1;ma=class{constructor(e,t,r){this.indexingActiveSessions=0;this.indexingTotalEstimate=0;this.indexingProcessed=0;this.indexingBytesProcessed=0;this.indexingFailedFiles=0;this.indexingSkippedFiles=0;this.indexingFinalState="completed";this.indexingSessionMode="full";this.lastDbProgressWrite=0;this.cancelRequested=!1;this.cancelActiveIndexing=null;this.activeStreamingIndexer=null;this.schemaVersionChecked=!1;this.PROGRESS_WRITE_INTERVAL_MS=5e3;this.PROGRESS_WRITE_FILE_INTERVAL=50;this.SESSION_STATS_WRITE_INTERVAL_MS=1e4;this.SESSION_STATS_WRITE_FILE_INTERVAL=500;this.SESSION_STATS_DISCOVERED_INTERVAL=1e3;this.INDEXING_SESSION_STATS_META_KEY="indexing_session_stats";if(tL(),this.coordId=Math.random().toString(36).slice(2,8),this.projectRoot=e,this.indexingTracker=Ks.getInstance(this.projectRoot),this.rootExists=(()=>{try{return Lr.default.existsSync(e)}catch{return!1}})(),!this.rootExists)try{le("[ThreadedIndexer] project root does not exist; indexing will be skipped",e)}catch{}let s=Ab.default.cpus()?.length||4;this.workerCount=Yj(t??s,Yf,Bi),this.excludeDirs=this.normalizeExcludeEntries(r?.excludeDirs??[]),this.languageSupport=r?.languageSupport,Qs("constructor exclude directories",this.excludeDirs),this.excludePredicate=xT(this.projectRoot,this.excludeDirs),this.store=new sr(e),le(`[${new Date().toISOString()}] [ThreadedIndexer] constructor created FileChunkMappingStore`,{projectRoot:this.projectRoot,metaDbPath:gc(this.projectRoot)}),this.excludePredicate||this.rebuildExcludePredicate(),le("[ThreadedIndexer] coordinator init",{coordId:this.coordId,projectRoot:this.projectRoot,workerCount:this.workerCount,rootExists:this.rootExists,pid:process.pid,runtimePaths:Rs(),resolvedWorkerScript:ks("indexer-worker"),envWorkerRoot:process.env.PANDO_WORKER_SCRIPT_DIR??null,envRuntimeRoot:process.env.PANDO_RUNTIME_ROOT??null}),this.ensureSchemaVersion()}ensureSchemaVersion(){if(this.schemaVersionChecked)return!1;this.schemaVersionChecked=!0;let e=String(gT);le(`[${new Date().toISOString()}] [ThreadedIndexer] ensureSchemaVersion start`,{projectRoot:this.projectRoot,current:e});let t=this.store.getIndexerMeta("schema_version");le(`[${new Date().toISOString()}] [ThreadedIndexer] ensureSchemaVersion stored`,{projectRoot:this.projectRoot,stored:t});let r=this.hasExistingIndexFiles();le(`[${new Date().toISOString()}] [ThreadedIndexer] ensureSchemaVersion hasExisting`,{projectRoot:this.projectRoot,hasExisting:r});let s=r?this.detectMissingNodeColumns():[],i=s.length>0;return le(`[${new Date().toISOString()}] [ThreadedIndexer] ensureSchemaVersion structural check`,{projectRoot:this.projectRoot,structurallyBroken:i,missingColumns:s}),le(`[${new Date().toISOString()}] [ThreadedIndexer] ensureSchemaVersion summary`,{projectRoot:this.projectRoot,current:e,stored:t,hasExisting:r,structurallyBroken:i,missingColumns:s}),r&&i?(le("[ThreadedIndexer] Structural schema drift detected - deleting stale index DBs for fresh rebuild",{missingColumns:s}),this.cleanupAllIndexFiles(`ensureSchemaVersion: schema drift, missing nodes columns [${s.join(", ")}]`),this.store=new sr(this.projectRoot),this.store.setIndexerMeta("schema_version",e),!0):!t&&r?(le("[ThreadedIndexer] Schema version missing with existing index files; backfilling schema_version (no cleanup)."),le("[ThreadedIndexer] schema write (backfill) starting",{projectRoot:this.projectRoot,schemaVersion:e}),this.store.setIndexerMeta("schema_version",e),!1):(t&&t===e||(t&&t!==e&&(le(`[ThreadedIndexer] Schema version mismatch (have ${t}, want ${e}) - updating version, no reindex`),this.store=new sr(this.projectRoot)),le("[ThreadedIndexer] schema write (post-check) starting",{projectRoot:this.projectRoot,schemaVersion:e}),this.store.setIndexerMeta("schema_version",e)),!1)}detectMissingNodeColumns(){let e=Ln(this.projectRoot,0);if(!Lr.default.existsSync(e))return[];try{let t=new At(e,{readonly:!0}),r;try{let s=t.prepare("PRAGMA table_info(nodes)").all();r=new Set(s.map(i=>i.name).filter(i=>typeof i=="string"))}finally{t.close()}return r.size===0?[]:Vj.filter(s=>!r.has(s))}catch(t){return le("[ThreadedIndexer] Failed to inspect nodes schema:",t?.message??t),[]}}hasExistingIndexFiles(){let e=st(this.projectRoot);if(!Lr.default.existsSync(e))return!1;try{let t=Lr.default.readdirSync(e);return le(`[${new Date().toISOString()}] [ThreadedIndexer] hasExistingIndexFiles dir listing`,{dir:e,count:t.length,sample:t.slice(0,20)}),t.some(r=>r.startsWith(".pando-index-chunk-")&&r.endsWith(".db")||r.startsWith(".pando-fts-chunk-")&&r.endsWith(".db")||r==="meta.db")}catch(t){return le("[ThreadedIndexer] Failed to read index directory for schema check:",t?.message??t),!1}}cleanupAllIndexFiles(e){let t=st(this.projectRoot);le("[ThreadedIndexer] cleanupAllIndexFiles deleting stale index DBs for rebuild",{projectRoot:this.projectRoot,dataDir:t,reason:e??"unknown"});let r;try{r=Lr.default.existsSync(t)?Lr.default.readdirSync(t):[]}catch(o){le("[ThreadedIndexer] cleanupAllIndexFiles failed to read data dir:",o?.message??o);return}let s=o=>{let a=o.replace(/-(wal|shm)$/,"");return a.startsWith(".pando-index-chunk-")&&a.endsWith(".db")||a.startsWith(".pando-fts-chunk-")&&a.endsWith(".db")||a==="meta.db"},i=0;for(let o of r){if(!s(o))continue;let a=qi.default.join(t,o);try{Lr.default.rmSync(a,{force:!0}),i+=1}catch(c){le("[ThreadedIndexer] cleanupAllIndexFiles failed to delete file:",{target:a,error:c?.message??c})}}le("[ThreadedIndexer] cleanupAllIndexFiles done",{dataDir:t,deleted:i,reason:e??"unknown"})}checkAndCleanupIfNeeded(){return!1}mergeIndexRunState(e,t){let r=s=>{switch(s){case"failed":return 4;case"canceled":return 3;case"partial":return 2;default:return 1}};return r(t)>=r(e)?t:e}beginIndexingSession(e,t="full"){let r=Math.max(1,Math.floor(e||1));if(this.indexingActiveSessions===0){this.indexingProcessed=0,this.indexingBytesProcessed=0,this.indexingFailedFiles=0,this.indexingSkippedFiles=0,this.indexingTotalEstimate=r,this.indexingFinalState="completed",this.indexingFailureMessage=void 0,this.indexingSessionMode=t,this.lastDbProgressWrite=Date.now(),this.indexingTracker.startIndexing(r);try{ca.getInstance(this.projectRoot).start()}catch{}this.store.startIndexingSession(r);try{this.store.setIndexerMeta(this.INDEXING_SESSION_STATS_META_KEY,JSON.stringify({isIndexing:!0,runState:"running",filesDiscovered:r,totalFilesEstimate:r,filesIndexed:0,filesProcessed:0,filesSkipped:0,filesFailed:0,byExtension:{},processedByExtension:{},updatedAt:Date.now()}))}catch(i){le("[ThreadedIndexer] Failed to initialize indexing session stats meta:",i?.message??i)}}else r>this.indexingTotalEstimate&&(this.indexingTotalEstimate=r,this.indexingTracker.setTotalFiles(r));this.indexingActiveSessions++;let s=!1;return(i="completed",o)=>{if(!s&&(s=!0,this.indexingActiveSessions>0&&(this.indexingFinalState=this.mergeIndexRunState(this.indexingFinalState,i),o&&!this.indexingFailureMessage&&(this.indexingFailureMessage=o),this.indexingActiveSessions--,this.indexingActiveSessions===0))){this.indexingTracker.completeIndexing();let a=this.indexingProcessed+this.indexingSkippedFiles+this.indexingFailedFiles,c=this.indexingFailedFiles===0&&a>=Math.max(1,this.indexingTotalEstimate),l=this.indexingSessionMode==="incremental"&&this.indexingFinalState==="completed"&&this.indexingFailedFiles===0,u=this.indexingFinalState==="completed"&&!c&&!l?"partial":this.indexingFinalState,d=u==="completed"?Math.max(a,Math.max(1,this.indexingTotalEstimate)):a,p=Math.max(this.indexingSkippedFiles,d-this.indexingProcessed-this.indexingFailedFiles,0);le(`[ThreadedIndexer] finalizeIndexingSession: processed=${this.indexingProcessed}, skipped=${this.indexingSkippedFiles}, total=${this.indexingTotalEstimate}, failed=${this.indexingFailedFiles}, completedByInvariant=${c}, completedByQueueDrain=${l}, finalState=${this.indexingFinalState}, terminalState=${u}`);try{this.store.updateSessionProgress(d,this.indexingBytesProcessed,this.indexingTotalEstimate)}catch(f){le("[ThreadedIndexer] Failed to persist final session progress to DB:",f?.message??f)}this.store.finalizeIndexingSession(u,this.indexingFailureMessage);try{u==="completed"?ca.getInstance(this.projectRoot).complete():ca.getInstance(this.projectRoot).error(`index_${u}`)}catch{}try{let f=this.store.getIndexerMeta(this.INDEXING_SESSION_STATS_META_KEY),m={};if(f)try{let h=JSON.parse(f);h&&typeof h=="object"&&(m=h)}catch{}this.store.setIndexerMeta(this.INDEXING_SESSION_STATS_META_KEY,JSON.stringify({...m,isIndexing:!1,runState:u,filesDiscovered:Math.max(Math.max(1,this.indexingTotalEstimate),Number(m.filesDiscovered)||0,d),totalFilesEstimate:Math.max(1,this.indexingTotalEstimate),filesIndexed:Math.max(Math.max(0,this.indexingProcessed),Number(m.filesIndexed)||0),filesProcessed:Math.max(d,Number(m.filesProcessed)||0),filesSkipped:Math.max(p,Number(m.filesSkipped)||0),filesFailed:Math.max(this.indexingFailedFiles,Number(m.filesFailed)||0),failureMessage:this.indexingFailureMessage??null,updatedAt:Date.now()}))}catch(f){le("[ThreadedIndexer] Failed to finalize indexing session stats meta:",f?.message??f)}this.indexingProcessed=0,this.indexingBytesProcessed=0,this.indexingFailedFiles=0,this.indexingSkippedFiles=0,this.indexingTotalEstimate=0,this.indexingFinalState="completed",this.indexingFailureMessage=void 0,this.indexingSessionMode="full"}}}bumpIndexingTotal(e){if(this.indexingActiveSessions===0)return;let t=Math.max(1,Math.floor(e||1));t>this.indexingTotalEstimate&&(this.indexingTotalEstimate=t,this.indexingTracker.setTotalFiles(t))}reportIndexedFile(e,t){if(this.indexingActiveSessions===0)return;this.indexingProcessed+=1,typeof t=="number"&&t>0&&(this.indexingBytesProcessed+=t),this.indexingTracker.updateProgress(this.indexingProcessed,e);let r=Date.now(),i=r-this.lastDbProgressWrite>=this.PROGRESS_WRITE_INTERVAL_MS,o=this.indexingProcessed%this.PROGRESS_WRITE_FILE_INTERVAL===0;if(i||o)try{this.store.updateSessionProgress(this.indexingProcessed,this.indexingBytesProcessed,this.indexingTotalEstimate),this.lastDbProgressWrite=r}catch(a){le("[ThreadedIndexer] Failed to write session progress to DB:",a?.message??a)}}currentIndexingProgress(){return this.indexingProcessed}computeWorkerConcurrency(e){if(!e.length)return 1;let t=this.store.getIndexerMeta("worker_concurrency_hint");if(t){let h=Number(t);if(Number.isFinite(h)&&h>=1){let g=Math.max(Yf,Math.min(Bi,Math.floor(h)));return Math.min(g,e.length||1)}}let r=Math.max(1,Ab.default.cpus()?.length||4),s=Math.min(Bi,r),i=32,o=16*1024*1024,a=0,c=0,l=0,u=Nb.performance.now();for(let h of e){if(a>=i||l>=o)break;try{let y=Lr.default.readFileSync(h).length;a+=1,l+=y,c+=y}catch(g){Qs("computeWorkerConcurrency.sampleError",{file:h,error:g?.message||String(g)})}}let d=Math.max(1,Nb.performance.now()-u),p=d/1e3,f=Bi;if(a>0&&l>0&&p>0){let h=c/1048576,g=h/a,y=h/p;if(Number.isFinite(g)&&g>0&&Number.isFinite(y)&&y>0){let b=Math.ceil(y/g);f=Math.max(Yf,Math.min(Bi,b))}}let m=Math.min(s,f,Bi);m=Math.max(Yf,m),m=Math.min(Bi,m),m=Math.min(m,e.length||1);try{this.store.setIndexerMeta("worker_concurrency_hint",String(m));let h=JSON.stringify({sampledFiles:a,sampledBytes:l,totalSizeBytes:c,elapsedMs:d});this.store.setIndexerMeta("worker_concurrency_sample",h)}catch(h){Qs("computeWorkerConcurrency.persistError",{error:h?.message||String(h)})}return m}normalizeExcludeEntries(e){let t=e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean).map(r=>r.replace(/^\/+/,"").replace(/\/+$/,""));return Qs("normalizeExcludeEntries result",t),t}relFromAbs(e){let t=qi.default.relative(this.projectRoot,e).replace(/\\/g,"/");return!t||t.startsWith("..")?null:t}absFromRel(e){return qi.default.join(this.projectRoot,e)}rebuildExcludePredicate(){this.excludePredicate=xT(this.projectRoot,this.excludeDirs)}isExcluded(e){return this.excludePredicate?this.excludePredicate(e):!1}filterExcluded(e){if(!this.excludePredicate)return e;Qs("filterExcluded input",{count:e.length});let t=e.filter(r=>!(this.excludePredicate&&this.excludePredicate(r)));return Qs("filterExcluded output",{count:t.length,excluded:e.length-t.length}),t}getExpectedShardCount(){let e=-1,t=0,r=[];try{let i=this.store.all();t=i.length,r=i.slice(0,5),e=i.reduce((o,a)=>{let c=Number.isFinite(a?.chunk_id)?Number(a.chunk_id):-1;return c>o?c:o},-1)}catch{}let s=Math.max(Math.max(1,this.workerCount),e+1);return le(`[${new Date().toISOString()}] [ThreadedIndexer] getExpectedShardCount`,{workerCount:this.workerCount,maxStoredChunk:e,storeRows:t,storeSample:r,expected:s}),s}checkIndexIntegrity(){return le("[ThreadedIndexer] checkIndexIntegrity called but DISABLED - always returning empty (no missing files)",{message:"Index integrity checking has been disabled. Missing files will not trigger cleanup."}),le("[ThreadedIndexer] INTEGRITY CHECK DISABLED: Method always returns empty array"),[]}deletedPathsIncludeCritical(e){if(le(`[ThreadedIndexer] deletedPathsIncludeCritical checking ${e.length} paths`),!e.length)return!1;let t=[st(this.projectRoot),co(this.projectRoot),gc(this.projectRoot),".pando-index-chunk-",".pando-fts-chunk-"];for(let r of e){let s=this.relFromAbs(r)||r;le(`[ThreadedIndexer] Checking path: ${r} (rel: ${s})`);for(let i of t)if(s.includes(i)||r.includes(i))return le(`[ThreadedIndexer] \u2713 MATCH: "${r}" matches critical pattern "${i}"`),!0}return le("[ThreadedIndexer] No critical patterns matched"),!1}checkIntegrityAndCleanup(e){return!1}cancelIndexing(e){if(!this.cancelRequested){if(this.cancelRequested=!0,this.cancelActiveIndexing)try{this.cancelActiveIndexing()}catch{}e&&le("[ThreadedIndexer] indexing cancelled",{reason:e})}}dispose(e){this.cancelRequested=!0;try{this.activeStreamingIndexer?.stop()}catch{}if(this.activeStreamingIndexer=null,this.cancelActiveIndexing)try{this.cancelActiveIndexing()}catch{}this.cancelActiveIndexing=null,e&&le("[ThreadedIndexer] disposed",{reason:e})}isRetryableIndexFailure(e){let t=String(e?.message||e||"").toLowerCase();return t?t.includes("worker exited")||t.includes("worker error")||t.includes("worker initialization timeout")||t.includes("err_worker_not_running")||t.includes("must be spawned as a worker thread"):!1}async runIndex(e,t,r){let s=em,i=this.rootExists||(()=>{try{return Lr.default.existsSync(this.projectRoot)}catch{return!1}})();if(!i)return{processed:0,shardDbs:[],captures:[]};le("[ThreadedIndexer] runIndex start",{coordId:this.coordId,projectRoot:this.projectRoot,manualMode:Array.isArray(e),manualCount:Array.isArray(e)?e.length:0,workerCount:this.workerCount,consistencyModel:"eventual",pid:process.pid}),this.cancelRequested=!1;let o=!1;this.rootExists=i;let a=Array.isArray(e),c=a?e:[],l=!!(r?.captureContents&&!a);if(a&&c.length===0)return{processed:0,shardDbs:[],captures:[]};let u=Date.now(),d={},p=(_,R)=>{d[_]=Date.now()-R,yT(`threaded.${_}.complete`,{coordId:this.coordId,projectRoot:this.projectRoot,manualMode:Array.isArray(e),durationMs:d[_]})},f=[];if(a){for(let _ of c)if(_.size===void 0||_.mtime===void 0)try{let R=Lr.default.statSync(_.absPath);_.size=R.size,_.mtime=Math.floor(R.mtimeMs)}catch(R){le(`[ThreadedIndexer] fs.statSync failed for ${_.absPath}:`,R?.message??R)}}let m;if(a){let _=c.map(R=>R.relPath);m=_.length?this.store.getMany(_):new Map}else m=this.store.getAllKnownFiles();let h=Math.max(1,a?c.length:m.size||c.length||1),g=this.beginIndexingSession(h,a?"incremental":"full"),y="completed",b,S=null;try{let _=Array.from(a?new Set(c.map(H=>H.relPath)):m.keys()),R=this.store.getFileCosts(_),E=this.store.getThroughput(),T=[];try{T=this.store.all()}catch(H){le("[ThreadedIndexer] Failed to read chunk mapping store:",H?.message??H)}let x=T.reduce((H,ie)=>{let Ie=Number.isFinite(ie?.chunk_id)?Number(ie.chunk_id):-1;return Ie>H?Ie:H},-1),w=Math.max(Math.max(1,this.workerCount),x+1),D=new Array(w).fill(0),F=pT({shardCount:w,shardPendingLoads:D,knownMap:m,predictCost:H=>this.predictWorkCost(H.relPath,H.size,R,E)}),N=Math.random().toString(36).slice(2,8),C=!a;C&&(S=N,this.store.beginScanSeenRun(N)),le(`[${new Date().toISOString()}] [ThreadedIndexer] selection snapshot`,{runId:N,manualMode:a,manualEntries:c.length,captureContents:l,knownMap:m.size,costMap:R.size,throughput:E,shardCount:w,shardPendingLoads:D});let O=Array.from({length:w},(H,ie)=>Ln(this.projectRoot,ie)),M=Date.now(),P=await Promise.all(O.map(H=>Xs.getShared(H,{projectRoot:this.projectRoot})));p("writers-acquire",M);let A=P.map(H=>({client:H,queue:[],processing:!1,loopPromise:null})),v=[],I=[],k=new Map,$=new Map,L=0,j=[],z=Date.now(),U=0,K=0,G=0,te=0,pe=0,ke=0,re=Date.now(),W=Date.now(),me=Date.now(),_e=Date.now(),Se=Date.now(),Q=0,B=0,Z=new Map,se=H=>{let ie=qi.default.extname(H).toLowerCase()||"<none>";Z.set(ie,(Z.get(ie)??0)+1)},ae=(H,ie)=>{ie&&(H.writeMs+=ie.writeMs,H.writeTrackedMs+=ie.writeTrackedMs,H.writePreDeleteMs+=ie.writePreDeleteMs,H.writeInsertExportsMs+=ie.writeInsertExportsMs,H.writeInsertNodesMs+=ie.writeInsertNodesMs,H.writeInsertImportsMs+=ie.writeInsertImportsMs,H.writeInsertImportBindingsMs+=ie.writeInsertImportBindingsMs,H.writeInsertFileMs+=ie.writeInsertFileMs,H.writeInsertFtsMs+=ie.writeInsertFtsMs,H.writeFinalizeMs+=ie.writeFinalizeMs,H.writeResidualMs+=ie.writeResidualMs)},De=(...H)=>{let ie=Bu();for(let Ie of H)ae(ie,Ie||void 0);return ie},he=A,Ke=40,Ze=1500*1024,Ye=Math.max(Ze,Number(process.env.PANDO_AST_DENSE_WRITE_BATCH_BYTES||`${6*1024*1024}`)),Ft=1e3,Ee=25,rt=Math.max(1e3,Number(process.env.PANDO_WRITE_BATCH_STALL_LOG_MS||"10000")),xe=H=>H.type==="write",Me=5e5,ge=H=>(H.nodeRows?.length??0)>=1e3||(H.nodeRows?.length??0)+(H.referenceRows?.length??0)+(H.symbolMentionRows?.length??0)+(H.importRows?.length??0)+(H.importBindingRows?.length??0)>=1500,ye=H=>ge(H)?Ye:Ze,Ve=H=>{let ie=Array.isArray(H.fileRow)?H.fileRow:[],Ie=typeof ie[2]=="number"?ie[2]:0,ht=H.fts&&typeof H.fts.content=="string"?H.fts.content.length:0,It=H.nodeRows?.length??0,Zt=(H.exportRows?.length??0)+It+(H.referenceRows?.length??0)+(H.symbolMentionRows?.length??0)+(H.importRows?.length??0)+(H.importBindingRows?.length??0),$n=It>=1e3?96:It>=250?160:256,bn=Zt*$n;return Math.max(0,Ie+ht+bn)},bt=(H,ie)=>{let Ie=Ve(H.payload);return H.payload.fts?.content&&Ie>Me&&s&&le(`[Writer chunk ${ie}] large payload retained with FTS`,{file:H.relPath,estimated:Ie,threshold:Me}),Ie},Fn=(H,ie)=>{ie.processing=!0,ie.loopPromise=(async()=>{for(;ie.queue.length;){let Ie=ie.queue.shift();if(Ie.type==="delete"){try{await ie.client.batchPreDelete([Ie.relPath])}catch(it){le(`[Writer chunk ${H}] pre-delete failed for ${Ie.relPath}:`,it?.message??it)}continue}if(!xe(Ie))continue;if(ie.queue.length===0){let it=Date.now()+Ft;for(;Date.now()<it&&ie.queue.length<Ke-1;)await new Promise(Sr=>setTimeout(Sr,Ee))}let ht=[Ie],It=bt(Ie,H),Zt=ye(Ie.payload);for(;ie.queue.length&&ht.length<Ke&&It<Zt;){let it=ie.queue[0];if(!it||!xe(it))break;let Sr=bt(it,H),Mi=Math.max(Zt,ye(it.payload));if(ht.length+1>Ke||It+Sr>Mi)break;let Kl=ie.queue.shift();ht.push(Kl),It+=Sr,Zt=Mi}s&&le(`[Writer chunk ${H}] batch selected`,{count:ht.length,bytes:It,byteLimit:Zt,sample:ht.slice(0,5).map(it=>it.relPath)});let $n=ht.filter(it=>it.shouldPreDelete).map(it=>it.relPath);if($n.length)try{le(`[Writer chunk ${H}] pre-delete batch`,{count:$n.length,sample:$n.slice(0,5)}),await ie.client.batchPreDelete($n);for(let it of ht)it.shouldPreDelete&&(it.payload.preDeleted=!0)}catch(it){le(`[Writer chunk ${H}] pre-delete failed for batch:`,it?.message??it)}let bn=Date.now(),Ni,Gr=null;try{Gr=setInterval(()=>{let it=Date.now()-bn;le(`[Writer chunk ${H}] write batch still pending`,{runId:N,ageMs:it,batchCount:ht.length,queueRemaining:ie.queue.length,sample:ht.slice(0,3).map(Sr=>Sr.relPath)})},rt),Ni=await ie.client.enqueueWriteBatch(ht.map(it=>it.payload))}catch(it){let Sr=ht[0]?.relPath??"unknown";throw le(`[Writer chunk ${H}] write batch failed for ${Sr}:`,it?.message??it),it}finally{Gr&&(clearInterval(Gr),Gr=null)}let br=Date.now()-bn;(br>2e3||s)&&le(`[Writer chunk ${H}] slow batch`,{count:ht.length,ms:br,metrics:Ni});let fi=Math.max(1,ht.length?Ni.writeMs/ht.length:Ni.writeMs);for(let it of ht){let Sr=Array.isArray(it.payload.fileRow)?it.payload.fileRow:[],Mi=it.meta?.size??(typeof Sr[2]=="number"?Sr[2]:void 0),Kl=it.meta?.mtime??(typeof Sr[1]=="number"?Sr[1]:void 0),pc=typeof Sr[3]=="string"?Sr[3]:"completed";if(typeof Mi=="number"&&(U+=Mi),K+=fi,G+=1,W=Date.now(),me=W,vt(Ne,it.relPath),pc==="completed")te+=1,this.reportIndexedFile(fi,Mi);else if(pc==="failed"){this.indexingFailedFiles+=1;try{this.store.addSessionFailures(1)}catch{}X("IndexingAudit","index payload persisted as failed",{runId:N,relPath:it.relPath,chunkId:H,status:pc,size:Mi,mtime:Kl})}else X("IndexingAudit","index payload persisted with unexpected status",{runId:N,relPath:it.relPath,chunkId:H,status:pc});if(On(),I.push({file_path:it.relPath,durationMs:fi}),v.push({file_path:it.relPath,size:Mi,mtime:Kl,fully_indexed:it.payload.fullyIndexed===!0}),pc==="completed")k.set(it.relPath,H);else try{this.store.removeMappings([it.relPath])}catch(fc){X("IndexingAudit","failed to remove mapping for failed payload",{runId:N,relPath:it.relPath,error:fc?.message??String(fc)})}if(L<5&&(L+=1,le(`[${new Date().toISOString()}] [ThreadedIndexer] mapping update queued`,{runId:N,relPath:it.relPath,chunkId:H,status:pc,size:Mi,mtime:Kl})),se(it.relPath),yn(),G-pe>=100){let fc=Date.now(),py=Math.max(1,fc-re),wR=G-pe,vR=U-ke,RR=wR/(py/1e3),kR=vR/(1024*1024)/(py/1e3),ER=Math.max(1,fc-u),TR=G/(ER/1e3),PR=Math.max(this.indexingTotalEstimate,de,G),OF=Math.max(0,PR-G);le(`[${new Date().toISOString()}] [ThreadedIndexer] milestone`,{runId:N,processedTotal:G,indexedTotal:te,failedTotal:this.indexingFailedFiles,skippedTotal:f.length,totalEstimate:PR,filesLeft:OF,elapsedMs:ER,processedSinceLast:wR,bytesSinceLast:vR,sinceMs:py,avgFilesPerSec:Number.isFinite(TR)?Number(TR.toFixed(2)):null,filesPerSec:Number.isFinite(RR)?Number(RR.toFixed(2)):null,mbPerSec:Number.isFinite(kR)?Number(kR.toFixed(2)):null,extSinceLast:Object.fromEntries(Array.from(Z.entries()).sort(($F,jF)=>jF[1]-$F[1]))}),pe=G,ke=U,re=fc,Z.clear()}}}})().catch(Ie=>{throw le(`[Writer chunk ${H}] loop failed:`,Ie?.message??Ie),Ie}).finally(()=>{ie.processing=!1,ie.loopPromise=null})},nr=(H,ie)=>{let Ie=he[H];if(!Ie){le(`[ThreadedIndexer] Attempted to enqueue task for missing writer ${H}`,ie);return}Ie.queue.push(ie),Ie.processing||Fn(H,Ie)},vn=a?Math.max(1,Math.min(Math.max(c.length,1)*2,Ib)):Ib,Ot=Math.min(w,Bi);le(`[${new Date().toISOString()}] [ThreadedIndexer] Starting StreamingIndexer`,{manualMode:a,manualEntries:c.length,shardCount:w,indexerConcurrency:Ot,maxInFlight:vn,runId:N});let ze=new Uu(this.projectRoot,{excludeDirs:this.excludeDirs,concurrency:Ot,snapshotConcurrency:1,maxInFlight:vn,maxInFlightBytes:bT,sharedWorkers:!0,languageSupport:this.languageSupport,runId:N});this.activeStreamingIndexer=ze,this.cancelActiveIndexing=()=>{o=!0;try{ze.stop()}catch{}};let $t=[],Kt=new Map,Je=new Map,wt=0,xt=0,ft=[],de=0,Ae=new Set,We=new Map,ve=new Map,Ne=new Map,Ge=0,Be=H=>qi.default.extname(H).toLowerCase()||"<none>",vt=(H,ie)=>{let Ie=Be(ie);H.set(Ie,(H.get(Ie)??0)+1)},Rn=H=>Object.fromEntries(Array.from(H.entries()).sort((ie,Ie)=>Ie[1]-ie[1])),On=(H=!1)=>{let ie=Date.now(),Ie=ie-Ge>=this.SESSION_STATS_WRITE_INTERVAL_MS,ht=G>0&&G%this.SESSION_STATS_WRITE_FILE_INTERVAL===0,It=de>0&&de%this.SESSION_STATS_DISCOVERED_INTERVAL===0;if(!(!H&&!Ie&&!ht&&!It))try{let $n=f.length+wt+xt;this.indexingSkippedFiles=$n;let bn=this.indexingFailedFiles,Ni=te,Gr=G+$n+bn,br=Math.max(this.indexingTotalEstimate,de,Gr,1);this.store.setIndexerMeta(this.INDEXING_SESSION_STATS_META_KEY,JSON.stringify({isIndexing:!0,runState:"running",filesDiscovered:br,totalFilesEstimate:br,filesIndexed:Ni,filesProcessed:Gr,filesSkipped:$n,filesFailed:bn,byExtension:Rn(ve),processedByExtension:Rn(Ne),updatedAt:ie})),Ge=ie}catch(Zt){le("[ThreadedIndexer] Failed to persist indexing session stats meta:",Zt?.message??Zt)}},yn=(H=!1)=>{let ie=Date.now(),Ie=ie-z>=5e3,ht=G>0&&G%200===0;if(!(!H&&!Ie&&!ht)){if(k.size){let It=Array.from(k.entries()).map(([Zt,$n])=>({file_path:Zt,chunk_id:$n}));k.clear();try{this.store.upsertChunkMappings(It)}catch(Zt){for(let $n of It)k.set($n.file_path,$n.chunk_id);le("[ThreadedIndexer] Incremental mapping flush failed:",Zt?.message??Zt)}}if(v.length){let It=v.splice(0,v.length);try{this.store.batchUpdateSeen(It)}catch(Zt){v.unshift(...It),le("[ThreadedIndexer] Incremental seen-state flush failed:",Zt?.message??Zt)}}if(I.length){let It=I.splice(0,I.length);try{this.store.recordFileCosts(It)}catch(Zt){I.unshift(...It),le("[ThreadedIndexer] Incremental file-cost flush failed:",Zt?.message??Zt)}}z=ie}},Ws=setInterval(()=>{let H=Date.now(),ie=new Date(H).toISOString(),Ie=he.map(br=>br.queue.length),ht=Ie.reduce((br,fi)=>br+fi,0),It=he.filter(br=>br.processing).length,Zt=Ie.map((br,fi)=>({idx:fi,size:br,processing:he[fi].processing})).sort((br,fi)=>fi.size-br.size).slice(0,3),$n=H-me,bn=H-_e,Ni=G-Q,Gr=de-B;le(`[${ie}] [ThreadedIndexer] writer-status`,{runId:N,writers:he.length,activeWriters:It,totalQueued:ht,topQueues:Zt,processedCount:G,totalBytesProcessed:U,processedDelta:Ni,discoveredDelta:Gr,sinceLastProcessedMs:$n,sinceLastDiscoveredMs:bn,sinceLastStatusMs:H-Se}),Se=H,Q=G,B=de,ht>0&&H-W>15e3&&le(`[${new Date().toISOString()}] [ThreadedIndexer] stall-suspected`,{runId:N,totalQueued:ht,activeWriters:It,sinceLastProcessedMs:H-me,sinceLastDiscoveredMs:H-_e})},1e4),yr=[],_R=()=>{!C||yr.length===0||(this.store.markScanSeen(N,yr),yr=[])};ze.on("error",H=>{let ie=H instanceof Error?H:new Error(String(H));$t.push(ie),this.indexingFailedFiles+=1;try{this.store.addSessionFailures(1)}catch{}le(`[${new Date().toISOString()}] [ThreadedIndexer] StreamingIndexer error`,ie.message)}),ze.on("file:skipped",(H,ie)=>{wt+=1,this.indexingSkippedFiles=f.length+wt;let Ie=ie||"unknown",ht=(Kt.get(Ie)??0)+1;if(Kt.set(Ie,ht),ht<=5){let It=Je.get(Ie)??[];It.length<5&&It.push(H),Je.set(Ie,It)}s&&ht%100===0&&le(`[${new Date().toISOString()}] [ThreadedIndexer] skipped files`,{runId:N,reason:Ie,count:ht})}),ze.on("file:discovered",H=>{l&&H.sharedBuffer instanceof SharedArrayBuffer&&j.push({logicalPath:H.relPath,contentB64:Buffer.from(H.sharedBuffer).toString("base64")});let ie={absPath:H.absPath,relPath:H.relPath,size:H.size,mtime:H.mtime};F.register(ie),C&&(yr.push(H.relPath),yr.length>=500&&_R()),_e=Date.now(),Ae.has(H.lang)||(Ae.add(H.lang),le("[ThreadedIndexer] discovered language",{lang:H.lang,sample:H.relPath})),a||(de+=1,this.bumpIndexingTotal(de)),vt(ve,H.relPath),On()}),ze.on("index:result",(H,ie)=>{let Ie=F.get(H.relPath);if(!Ie){le(`[ThreadedIndexer] Received index result for unknown file ${H.relPath}`);return}let ht=Ie.targetChunk??0;if(ht<0||ht>=he.length){le(`[ThreadedIndexer] Invalid writer chunk ${ht} for ${H.relPath}`);return}Ie.hadExisting&&Ie.oldChunk!==void 0&&Ie.oldChunk>=0&&Ie.oldChunk!==ht&&nr(Ie.oldChunk,{type:"delete",relPath:H.relPath});let It=ie?.payload;if(!It){le(`[ThreadedIndexer] Missing payload for ${H.relPath}`);return}It.preDeleted=!1,Ie.hadExisting&&Ie.oldChunk!==void 0&&Ie.oldChunk!==ht&&le("[ThreadedIndexer] existing file moved to new shard",{runId:N,relPath:H.relPath,lang:H.lang,oldChunk:Ie.oldChunk,targetChunk:ht});let Zt=Array.isArray(It.fileRow)?It.fileRow[3]:void 0;if(Zt==="completed"){let Gr=(We.get(H.lang)??0)+1;We.set(H.lang,Gr),Gr%100===0&&le("[ThreadedIndexer] completed 100 files",{lang:H.lang,total:Gr})}else Zt==="failed"&&X("IndexingAudit","index payload generated as failed",{runId:N,relPath:H.relPath,lang:H.lang,fileRow:It.fileRow});let $n=ie?.meta,bn=ie?.snapshotSummary;bn?.relPath&&bn?.objectId&&$.set(bn.relPath,{relPath:bn.relPath,objectId:bn.objectId,size:typeof bn.size=="number"?bn.size:void 0,mtime:typeof bn.mtime=="number"?bn.mtime:void 0,lineCount:typeof bn.lineCount=="number"?bn.lineCount:void 0,encoding:typeof bn.encoding=="string"?bn.encoding:void 0}),nr(ht,{type:"write",relPath:H.relPath,payload:It,meta:$n,predicted:Ie.predicted,oldChunk:Ie.oldChunk,shouldPreDelete:Ie.hadExisting})}),t&&await t(O);let Op=[],DF=Date.now();if(a){for(let H of c){if(F.shouldSkip(H)){f.push(H);continue}de+=1,vt(ve,H.relPath),Op.push({absPath:H.absPath,relPath:H.relPath,size:H.size,mtime:H.mtime,preDeleted:!1,emitMode:H.emitMode})}this.bumpIndexingTotal(this.currentIndexingProgress()+Op.length),On(!0),Op.length&&await ze.processFileEntries(Op)}else{await ze.start(),le(`[${new Date().toISOString()}] [ThreadedIndexer] waitForDrain: start runId=${N}`);let H=Date.now();await ze.waitForDrain(),xt=ze.getWorkerScanSkippedCount(),Rr("threaded-indexer.runIndex.waitForDrain.complete",{projectRoot:this.projectRoot,runId:N,manualMode:a,elapsedMs:Date.now()-H}),le(`[${new Date().toISOString()}] [ThreadedIndexer] waitForDrain: done runId=${N}`,{ms:Date.now()-H})}if(p(a?"manual-processing":"discovery-processing",DF),_R(),ze.stop(),this.activeStreamingIndexer=null,clearInterval(Ws),$t.length){let H=$t.map(ie=>ie.message);le("[ThreadedIndexer] StreamingIndexer completed with errors",H)}if(Kt.size&&le(`[${new Date().toISOString()}] [ThreadedIndexer] skip summary`,{runId:N,total:Array.from(Kt.values()).reduce((H,ie)=>H+ie,0),reasons:Object.fromEntries(Kt.entries()),samples:Object.fromEntries(Je.entries())}),C&&!o&&(ft=this.store.listUnseenForRun(N)),C)try{this.store.endScanSeenRun(N),S=null}catch(H){le("[ThreadedIndexer] endScanSeenRun failed",H?.message??H)}let FF=he.map(H=>H.loopPromise??Promise.resolve());le(`[${new Date().toISOString()}] [ThreadedIndexer] writer loops: waiting runId=${N}`);let dy=Date.now();await Promise.all(FF),p("writer-drain",dy),Rr("threaded-indexer.runIndex.writerLoops.complete",{projectRoot:this.projectRoot,runId:N,elapsedMs:Date.now()-dy,shardCount:he.length}),le(`[${new Date().toISOString()}] [ThreadedIndexer] writer loops: done runId=${N}`,{ms:Date.now()-dy});try{let H=Date.now();await Promise.all(P.map(ie=>ie.flush().catch(()=>null))),p("writer-flush",H),Rr("threaded-indexer.runIndex.writersFlush.complete",{projectRoot:this.projectRoot,runId:N,elapsedMs:Date.now()-H}),le(`[${new Date().toISOString()}] [ThreadedIndexer] writers flush complete`,{runId:N,ms:Date.now()-H})}finally{await Promise.all(P.map(H=>Xs.releaseShared(H).catch(()=>{})))}if(ft.length){let H=Date.now();le(`[${new Date().toISOString()}] [ThreadedIndexer] db-tracked deleted files`,{runId:N,count:ft.length,sample:ft.slice(0,25)});try{await this.purgeDeleted(ft)}catch(ie){le("[ThreadedIndexer] purgeDeleted from db-tracked list failed",ie?.message??ie)}try{this.store.removeMappings(ft)}catch(ie){le("[ThreadedIndexer] removeMappings from db-tracked list failed",ie?.message??ie)}try{this.store.deleteSnapshotSummaries(ft)}catch(ie){le("[ThreadedIndexer] deleteSnapshotSummaries from db-tracked list failed",ie?.message??ie)}p("deleted-purge",H)}if(f.length)for(let H of f)(typeof H.size=="number"||typeof H.mtime=="number")&&v.push({file_path:H.relPath,size:H.size,mtime:H.mtime});if(this.indexingSkippedFiles=f.length+wt+xt,yn(!0),k.size){let H=Array.from(k.entries()).map(([Ie,ht])=>({file_path:Ie,chunk_id:ht}));le(`[${new Date().toISOString()}] [ThreadedIndexer] mapping updates flush start`,{runId:N,count:H.length,sample:H.slice(0,5)});let ie=Date.now();this.store.upsertChunkMappings(H),p("mapping-flush",ie),Rr("threaded-indexer.runIndex.mappingFlush.complete",{projectRoot:this.projectRoot,runId:N,count:H.length,elapsedMs:Date.now()-ie}),le(`[${new Date().toISOString()}] [ThreadedIndexer] mapping updates flush done`,{runId:N,count:H.length})}else le(`[${new Date().toISOString()}] [ThreadedIndexer] mapping updates empty`,{runId:N});if($.size){let H=Array.from($.values()).map(ie=>({file_path:ie.relPath,object_id:ie.objectId,file_size:ie.size,last_modified:ie.mtime,line_count:ie.lineCount,encoding:ie.encoding}));try{let ie=Date.now();this.store.upsertSnapshotSummaries(H),p("snapshot-summary-flush",ie),Rr("threaded-indexer.runIndex.snapshotSummaryFlush.complete",{projectRoot:this.projectRoot,runId:N,count:H.length,elapsedMs:Date.now()-ie}),le(`[${new Date().toISOString()}] [ThreadedIndexer] snapshot summary flush done`,{runId:N,count:H.length,sample:H.slice(0,5).map(Ie=>({file_path:Ie.file_path,object_id:Ie.object_id}))})}catch(ie){le("[ThreadedIndexer] snapshot summary flush failed",ie?.message??ie)}}else le(`[${new Date().toISOString()}] [ThreadedIndexer] snapshot summary flush empty`,{runId:N});if(v.length){le(`[${new Date().toISOString()}] [ThreadedIndexer] seen updates flush start`,{runId:N,count:v.length,sample:v.slice(0,5)});let H=Date.now();this.store.batchUpdateSeen(v),p("seen-flush",H),Rr("threaded-indexer.runIndex.seenFlush.complete",{projectRoot:this.projectRoot,runId:N,count:v.length,elapsedMs:Date.now()-H}),le(`[${new Date().toISOString()}] [ThreadedIndexer] seen updates flush done`,{runId:N,count:v.length})}else le(`[${new Date().toISOString()}] [ThreadedIndexer] seen updates empty`,{runId:N});let $p=Math.max(1,Date.now()-u);if(te>0&&K>0){let H=K/1e3,ie=te/H,Ie=U/H;this.store.recordThroughput(ie,Ie,te,U)}return o?y="canceled":($t.length>0||this.indexingFailedFiles>0)&&(y="partial"),On(!0),le(`[${new Date().toISOString()}] [ThreadedIndexer] runIndex complete`,{runId:N,processed:G,indexed:te,skipped:f.length+wt+xt,failed:this.indexingFailedFiles,bytes:U,durationMs:$p,processingMs:K,manualMode:a,shardCount:he.length}),yT("threaded.run.complete",{coordId:this.coordId,projectRoot:this.projectRoot,runId:N,manualMode:a,processed:G,indexed:te,skipped:f.length+wt,discoverySkipped:xt,failed:this.indexingFailedFiles,durationMs:$p,processingMs:K,phaseTimings:d}),Rr("threaded-indexer.runIndex.complete",{projectRoot:this.projectRoot,runId:N,processed:G,indexed:te,skipped:f.length+wt,discoverySkipped:xt,failed:this.indexingFailedFiles,bytes:U,durationMs:$p,processingMs:K,manualMode:a,shardCount:he.length}),{processed:G,shardDbs:O,captures:j,metrics:{filesProcessed:G,bytesProcessed:U,durationMs:$p,processingMs:K,skipped:f.length+wt+xt}}}catch(_){throw y="failed",b=_?.message??String(_),_}finally{if(this.activeStreamingIndexer=null,S)try{this.store.endScanSeenRun(S)}catch{}this.cancelActiveIndexing=null,g(y,b)}}predictWorkCost(e,t,r,s){let i=r.get(e);if(i&&Number.isFinite(i.avg_ms)&&i.avg_ms>0)return i.avg_ms;let o=200,a=typeof t=="number"?Math.min(t/1024,2e3):0;if(s&&Number.isFinite(s.avg_files_per_sec)&&(s.avg_files_per_sec??0)>0){let c=1/s.avg_files_per_sec*1e3;return o+a+c}return o+a}deleteFileFromShard(e,t){if(!Number.isFinite(e)||e<0)return;let r=Ln(this.projectRoot,e);if(!Lr.default.existsSync(r))return;let s=new At(r);try{s.exec("BEGIN");let o=s.prepare("SELECT id FROM dict_files WHERE path = ?").get(t)?.id;if(typeof o=="number"){s.prepare("DELETE FROM nodes WHERE file_id = ?").run(o);let a=[["exports","file_id"],["files","file_id"],["file_imports","file_id"],["file_import_bindings","file_id"],["file_symbol_mentions","file_id"],["file_deps","src_file_id"]];for(let[c,l]of a)s.prepare(`DELETE FROM ${c} WHERE ${l} = ?`).run(o)}s.exec("COMMIT")}catch(i){try{s.exec("ROLLBACK")}catch(o){le(`[ThreadedIndexer] Failed to rollback shard delete for ${t}:`,o?.message??o)}throw i}finally{try{s.close()}catch(i){le(`[ThreadedIndexer] Failed to close shard DB for ${t}:`,i?.message??i)}}}async applyExplicitChanges(e,t){let r=Date.now();Rr("threaded-indexer.applyExplicitChanges.start",{projectRoot:this.projectRoot,created:e.created?.length||0,modified:e.modified?.length||0,deleted:e.deleted?.length||0,coordId:this.coordId,workerCount:this.workerCount,runtimePaths:Rs(),resolvedWorkerScript:ks("indexer-worker")});let s=_=>qi.default.normalize(qi.default.isAbsolute(_)?_:qi.default.join(this.projectRoot,_)),i=_=>Array.from(new Set((_??[]).filter(R=>typeof R=="string"&&R.length>0).map(s))),o=i(e.deleted);if(this.checkIntegrityAndCleanup(o))return Rr("threaded-indexer.applyExplicitChanges.fullReindex",{projectRoot:this.projectRoot,created:e.created?.length||0,modified:e.modified?.length||0,deleted:e.deleted?.length||0,elapsedMs:Date.now()-r}),{indexed:0,purged:0,needsFullReindex:!0,captures:[]};let c=new Set(o),l=i(e.modified).filter(_=>!c.has(_)),u=new Set(l),d=i([...e.created??[],...e.modified??[]]).filter(_=>!c.has(_)),p=[],f=[],m=new Map,h=[];for(let _ of d){if(Lr.default.existsSync(_)){if(p.push(_),u.has(_)){let E=this.relFromAbs(_);E&&(f.push(E),m.set(_,E))}continue}let R=this.relFromAbs(_);R&&h.push(R)}let g=Array.from(new Set([...o.map(_=>this.relFromAbs(_)).filter(_=>!!_),...h])),y=0,b=0,S=[];try{if(t?.resetModifiedToLight!==!1&&f.length){let _=Array.from(new Set(f));Rr("threaded-indexer.applyExplicitChanges.resetModifiedToLight.start",{projectRoot:this.projectRoot,coordId:this.coordId,modified:_.length,sample:_.slice(0,20)}),b+=await this.purgeDeleted(_),Rr("threaded-indexer.applyExplicitChanges.resetModifiedToLight.complete",{projectRoot:this.projectRoot,coordId:this.coordId,modified:_.length})}if(p.length){let _=[],R=p;if(t?.resetModifiedToLight===!1&&f.length){let E=new Set,T=this.store.getMany(Array.from(new Set(f)));for(let[x,w]of T.entries())Number(w.fully_indexed||0)===1&&E.add(x);if(E.size){R=[];for(let x of p){let w=m.get(x);w&&E.has(w)?_.push(x):R.push(x)}}}if(Rr("threaded-indexer.applyExplicitChanges.indexFiles.start",{projectRoot:this.projectRoot,coordId:this.coordId,present:p.length,light:R.length,full:_.length,sample:p.slice(0,20)}),R.length){let E=await this.indexFiles(R,{emitMode:"light"});y+=E.processed,S.push(...E.captures)}if(_.length){let E=await this.indexFiles(_,{emitMode:"full"});y+=E.processed,S.push(...E.captures)}Rr("threaded-indexer.applyExplicitChanges.indexFiles.complete",{projectRoot:this.projectRoot,coordId:this.coordId,indexed:y,captureCount:S.length})}return g.length&&(b=await this.purgeDeleted(g)),Rr("threaded-indexer.applyExplicitChanges.complete",{projectRoot:this.projectRoot,indexed:y,purged:b,present:p.length,deleted:g.length,elapsedMs:Date.now()-r}),{indexed:y,purged:b,captures:S}}catch(_){let R=_?.message??String(_);throw Rr("threaded-indexer.applyExplicitChanges.failed",{projectRoot:this.projectRoot,indexed:y,purged:b,present:p.length,deleted:g.length,elapsedMs:Date.now()-r,error:R}),_}}async scanFiles(e){if(!(this.rootExists||(()=>{try{return Lr.default.existsSync(this.projectRoot)}catch{return!1}})()))return[];let s=Array.from(new Set((e?.relativeDirs??[]).map(l=>typeof l=="string"?l.trim().replace(/^[\\/]+/,"").replace(/[\\/]+$/,""):"").filter(Boolean).map(l=>l.replace(/\\/g,"/")))).map(l=>`${l}/`),i=l=>{if(!s.length)return!0;let u=l.replace(/\\/g,"/");return s.some(d=>u===d.slice(0,-1)||u.startsWith(d))},o=`scan-${Math.random().toString(36).slice(2,8)}`,a=new Uu(this.projectRoot,{excludeDirs:this.excludeDirs,concurrency:Math.min(this.workerCount,Bi),snapshotConcurrency:1,maxInFlight:Ib,maxInFlightBytes:bT,sharedWorkers:!0,languageSupport:this.languageSupport,runId:o}),c=[];this.activeStreamingIndexer=a,this.cancelActiveIndexing=()=>{this.cancelRequested=!0;try{a.stop()}catch{}};try{return await a.scanFiles(async l=>{for(let u of l)i(u.relPath)&&c.push(u)}),c}finally{this.activeStreamingIndexer=null,this.cancelActiveIndexing=null,a.stop()}}async indexAll(e,t){let r=Date.now();Qs("indexAll start",{excludeDirs:this.excludeDirs});let s;try{s=await this.runIndex(null,e,t)}catch(a){if(!this.isRetryableIndexFailure(a))throw a;le("[ThreadedIndexer] indexAll retry after worker failure",{message:a?.message??String(a)}),s=await this.runIndex(null,e,t)}let i=Date.now()-r;le(`[${new Date().toISOString()}] [Indexer] Indexed ${s.processed} files in ${i}ms`);let o=s.metrics?{durationMs:s.metrics.durationMs,processingMs:s.metrics.processingMs,filesProcessed:s.metrics.filesProcessed,bytesProcessed:s.metrics.bytesProcessed,skipped:s.metrics.skipped}:void 0;return{processed:s.processed,shardDbs:s.shardDbs,totals:o,captures:s.captures}}async indexFiles(e,t){if(Qs("indexFiles start",{count:e.length,excludeDirs:this.excludeDirs,emitMode:t?.emitMode??"light"}),e=this.filterExcluded(e),Qs("indexFiles after filter",{count:e.length}),!e.length)return{processed:0,captures:[]};let r=this.computeWorkerConcurrency(e);r!==this.workerCount&&(Qs("indexFiles adjusting workerCount",{previous:this.workerCount,next:r}),this.workerCount=r);let s=[];for(let o of e){let a=this.relFromAbs(o);a&&s.push({absPath:o,relPath:a,emitMode:t?.emitMode})}if(!s.length)return{processed:0,captures:[]};let i;try{i=await this.runIndex(s)}catch(o){if(!this.isRetryableIndexFailure(o))throw o;le("[ThreadedIndexer] indexFiles retry after worker failure",{message:o?.message??String(o),entries:s.length}),i=await this.runIndex(s)}return{processed:i.processed,captures:i.captures}}async purgeDeleted(e){if(!Array.isArray(e)||e.length===0)return 0;let t=Array.from(new Set(e.filter(c=>typeof c=="string"&&c.length>0)));if(!t.length)return 0;let r=this.store.getMany(t),s=new Map,i=[];for(let c of t){let l=r.get(c)?.chunk_id;if(typeof l=="number"&&l>=0){let u=s.get(l)??[];u.push(c),s.set(l,u)}else i.push(c)}let o=Array.from(s.keys()).sort((c,l)=>c-l);if(i.length>0){let c=Math.max(1,this.workerCount);for(let l=0;l<c;l+=1)s.has(l)||(s.set(l,[]),o.push(l));o.sort((l,u)=>l-u)}let a=await Promise.all(o.map(async c=>({chunkId:c,writer:await Xs.getShared(Ln(this.projectRoot,c),{projectRoot:this.projectRoot})})));try{for(let{chunkId:c,writer:l}of a){let u=[...s.get(c)??[],...i];if(u.length!==0)try{await l.batchPreDelete(u)}catch(d){le(`[Purge] writer ${c} batchPreDelete failed`,d?.message||d)}}}finally{await Promise.all(a.map(({writer:c})=>Xs.releaseShared(c).catch(()=>{})))}for(let c of t)try{this.store.delete(c)}catch(l){le(`[ThreadedIndexer] Failed to remove mapping for ${c}:`,l?.message??l)}try{this.store.deleteSnapshotSummaries(t)}catch(c){le("[ThreadedIndexer] Failed to remove snapshot summaries for purged files:",c?.message??c)}return t.length}}});function nL(n){for(let e of n)if(vT.default.existsSync(e))return e;return n[n.length-1]}var So,vT,RT,tm,kT=ne(()=>{"use strict";So=q(require("path")),vT=q(require("fs")),RT=require("worker_threads");dr();da();tm=class{constructor(e,t){this.projectRoot=e;this.getExcludeDirs=t;this.worker=null;this.running=!1;this.debounceTimer=null;this.pending=null;this.pendingRejects=new Set;this.inFlightReject=null;this.inFlightCleanup=null}scriptPath(){let e=ks("snapshot-worker");return e||nL([So.default.join(__dirname,"workers","snapshot-worker.mjs"),So.default.join(__dirname,"workers","snapshot-worker.js"),So.default.resolve(__dirname,"..","..","..","out","pando-core","versioning","workers","snapshot-worker.mjs"),So.default.resolve(__dirname,"..","..","..","out","pando-core","versioning","workers","snapshot-worker.js"),So.default.resolve(process.cwd(),"out","pando-core","versioning","workers","snapshot-worker.mjs"),So.default.resolve(process.cwd(),"out","pando-core","versioning","workers","snapshot-worker.js"),So.default.join(__dirname,"workers","snapshot-worker.js")])}async ensure(){if(this.worker)return;let e=new RT.Worker(this.scriptPath()),t=r=>{try{let s=new Date().toISOString();console.log(`[${s}] [SnapshotWorker] error:`,r?.message||String(r)),r?.stack&&console.log(r.stack)}catch{}};e.on("error",r=>{t(r),this.worker=null,this.failInFlight(r instanceof Error?r:new Error(String(r)))}),e.on("exit",r=>{let s=!this.running&&!this.inFlightReject;this.worker=null,s||this.failInFlight(new Error(r===0?"Snapshot worker exited unexpectedly.":`Snapshot worker exited with code ${r}.`))}),await new Promise((r,s)=>{let i=()=>{c(),r()},o=l=>{c(),s(l instanceof Error?l:new Error(String(l)))},a=l=>{c(),s(new Error(l===0?"Snapshot worker exited before initialization.":`Snapshot worker exited with code ${l} before initialization.`))},c=()=>{e.off("message",i),e.off("error",o),e.off("exit",a)};e.on("message",i),e.on("error",o),e.on("exit",a),e.postMessage({cmd:"init",projectRoot:this.projectRoot,excludeDirs:this.currentExcludeDirs()})}),this.worker=e}failInFlight(e){let t=this.inFlightCleanup,r=this.inFlightReject;this.inFlightCleanup=null,this.inFlightReject=null,this.running=!1;try{t?.()}catch{}try{r?.(e)}catch{}}bindAbortSignal(e,t){return e?e.aborted?(t(),()=>{}):(e.addEventListener("abort",t,{once:!0}),()=>{try{e.removeEventListener("abort",t)}catch{}}):()=>{}}currentExcludeDirs(){try{let e=this.getExcludeDirs?.()||[];return Array.isArray(e)?e.slice():[]}catch{return[]}}async snapshotAll(e,t){return this.snapshotFiles([],e,void 0,t)}async snapshotAllWithCaptured(e,t,r){return this.snapshotFilesWithCaptured([],e,t,void 0,r)}async snapshotFilesWithCaptured(e,t,r,s,i){if(i?.aborted)throw Vn(i.reason,"Snapshot cancelled");return this.pending={files:e&&e.length?e:void 0,message:r,parent:s,captured:Array.isArray(t)?t:[]},new Promise((o,a)=>{let c=!1,l=f=>{c||(c=!0,this.pendingRejects.delete(u),p(),o(f))},u=f=>{c||(c=!0,this.pendingRejects.delete(u),p(),a(f))};this.pendingRejects.add(u);let d=()=>{clearTimeout(this.debounceTimer),this.pending=null,u(Vn(i?.reason,"Snapshot cancelled"))},p=this.bindAbortSignal(i,d);clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{(async()=>{try{let f=await this.runPending(i);l(f)}catch(f){u(f instanceof Error?f:new Error(String(f)))}})()},800)})}async snapshotFiles(e,t,r,s){if(s?.aborted)throw Vn(s.reason,"Snapshot cancelled");return this.pending={files:e&&e.length?e:void 0,message:t,parent:r},new Promise((i,o)=>{let a=!1,c=p=>{a||(a=!0,this.pendingRejects.delete(l),d(),i(p))},l=p=>{a||(a=!0,this.pendingRejects.delete(l),d(),o(p))};this.pendingRejects.add(l);let u=()=>{clearTimeout(this.debounceTimer),this.pending=null,l(Vn(s?.reason,"Snapshot cancelled"))},d=this.bindAbortSignal(s,u);clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{(async()=>{try{let p=await this.runPending(s);c(p)}catch(p){l(p instanceof Error?p:new Error(String(p)))}})()},800)})}async snapshotCaptured(e,t,r,s){if(s?.aborted)throw Vn(s.reason,"Snapshot cancelled");await this.ensure();let i=this.worker;return new Promise((o,a)=>{let c=!1,l=m=>{c||(c=!0,this.inFlightCleanup=null,this.inFlightReject=null,f(),m())},u=m=>{m?.type==="result"?l(()=>o({snapshotId:m.snapshotId,parent:m.parent})):m?.type==="error"&&l(()=>a(new Error(m.message)))},d=()=>{this.worker===i&&(this.worker=null),i.terminate().catch(()=>{}),l(()=>a(Vn(s?.reason,"Snapshot cancelled")))},p=this.bindAbortSignal(s,d),f=()=>{i.off("message",u),p()};this.inFlightReject=m=>l(()=>a(m)),this.inFlightCleanup=f,i.on("message",u),i.postMessage({cmd:"snapshot-captured",payload:{members:e,message:t,parent:r},excludeDirs:this.currentExcludeDirs()})})}async runPending(e){if(!this.pending)return Promise.resolve({snapshotId:"",parent:void 0});let t=this.pending;if(this.pending=null,this.running)return new Promise((s,i)=>{this.debounceTimer=setTimeout(async()=>{try{let o=await this.runPending(e);s(o)}catch(o){i(o)}},300)});if(e?.aborted)throw Vn(e.reason,"Snapshot cancelled");await this.ensure(),this.running=!0;let r=this.worker;return new Promise((s,i)=>{let o=!1,a=p=>{o||(o=!0,this.running=!1,this.inFlightCleanup=null,this.inFlightReject=null,d(),p())},c=p=>{p?.type==="result"?a(()=>s({snapshotId:p.snapshotId,parent:p.parent})):p?.type==="error"&&a(()=>i(new Error(p.message)))},l=()=>{this.worker===r&&(this.worker=null),r.terminate().catch(()=>{}),a(()=>i(Vn(e?.reason,"Snapshot cancelled")))},u=this.bindAbortSignal(e,l),d=()=>{r.off("message",c),u()};this.inFlightReject=p=>a(()=>i(p)),this.inFlightCleanup=d,r.on("message",c),r.postMessage({cmd:"snapshot",payload:t,excludeDirs:this.currentExcludeDirs()})})}dispose(){clearTimeout(this.debounceTimer),this.pending=null,this.running=!1;let e=Vn("snapshot worker disposed","Snapshot cancelled");for(let t of Array.from(this.pendingRejects))try{t(e)}catch{}if(this.pendingRejects.clear(),this.failInFlight(e),this.worker){try{this.worker.terminate().catch(()=>{})}catch{}this.worker=null}}}});var Fb={};Lt(Fb,{PositionPathCache:()=>Db,convertToPositionPath:()=>oL,generatePositionPath:()=>ha,getPathErrorType:()=>rL,hasPathError:()=>sL,isErrorRoot:()=>iL,resolvePositionPath:()=>Pn});function ha(n,e,t,r){let s=n.getSourceFile(),i=s.getFilePath(),o;if(e?o=ET.relative(e,i).replace(/\\/g,"/"):o=i,n===s)return`${o}#`;let a=n.getStart?.(!1)??n.getStart?.(),c=n.getEnd(),l=n.getKindName(),u=Pt.getAbbrev(l,r??"ts"),d=t?`${t}:${a}-${c}:${u}`:`${a}-${c}:${u}`;return`${o}#${d}`}function rL(n){return n.includes("#SyntaxError:")||n.includes("/SyntaxError:")?"SyntaxError":n.includes("#CompileError:")||n.includes("/CompileError:")?"CompileError":null}function sL(n){return n.includes("SyntaxError:")||n.includes("CompileError:")}function iL(n){if(!n.match(/(#|\/)(SyntaxError|CompileError):/))return!1;let t=n.split("/"),r=t.filter(s=>s.includes("SyntaxError:")||s.includes("CompileError:")).pop();return t[t.length-1]===r}function Pn(n,e,t){try{if(typeof n=="string"&&n.includes("@")){let f=n.length>80?n.slice(0,80)+"\u2026":n;console.log(`[resolvePositionPath] WARNING: nodePath contains hash suffix '@': ${f}`);try{console.log(new Error("[resolvePositionPath] caller stack").stack?.split(`
|
|
526
|
+
`)}function fa(n,e,t,r){n.prepare(`PRAGMA table_info("${e.replace(/"/g,'""')}")`).all().some(i=>i.name===t)||n.exec(`ALTER TABLE "${e.replace(/"/g,'""')}" ADD COLUMN ${t} ${r}`)}var mT,gT,Cb=ne(()=>{"use strict";mT=q(require("os"));gT=10});function Qs(n,e){em&&X("ThreadedIndexer",n,e)}function le(...n){em&&console.log(Xj([`[${new Date().toISOString()}]`,...n]))}function Xj(n){return n.map(Qj).join(" ")}function Qj(n){if(typeof n=="string")return n;if(n instanceof Error)return n.stack||n.message;try{let e=JSON.stringify(n);if(typeof e=="string")return e}catch{}return(0,wT.inspect)(n,{depth:null,breakLength:1/0,compact:!0})}function Rr(n,e){em&&X("ThreadedIndexer",n,e)}function yT(n,e){X("IndexTiming",n,e)}function Yj(n,e,t){return Math.max(e,Math.min(t,n))}function tL(){if(!ST){ST=!0;try{process.execArgv.some(n=>n.startsWith("--max-old-space-size"))||(0,_T.setFlagsFromString)(`--max_old_space_size=${eL}`)}catch{}}}function xT(n,e){Qs("createExcludePredicate input",{root:n,excludeDirs:e});let t=Xr(n,e);return t||null}var Ab,qi,jr,Nb,_T,wT,Vj,em,Yf,Bi,Ib,bT,eL,ST,ma,Mb=ne(()=>{"use strict";Ab=q(require("os")),qi=q(require("path")),jr=q(require("fs")),Nb=require("perf_hooks"),_T=require("v8"),wT=require("util");rn();aa();gt();Gf();Qf();oa();fT();ru();Mu();Vt();Cb();dr();Vj=["lang","parent_node_id","role","index_in_parent","depth","body_start_pos","body_end_pos"],em=Ht();Yf=1,Bi=3,Ib=Math.max(24,Number(process.env.AST_INDEX_MAX_INFLIGHT||192)),bT=Math.max(16*1024*1024,Number(process.env.AST_INDEX_MAX_INFLIGHT_BYTES||96*1024*1024)),eL=4096,ST=!1;ma=class{constructor(e,t,r){this.indexingActiveSessions=0;this.indexingTotalEstimate=0;this.indexingProcessed=0;this.indexingBytesProcessed=0;this.indexingFailedFiles=0;this.indexingSkippedFiles=0;this.indexingFinalState="completed";this.indexingSessionMode="full";this.lastDbProgressWrite=0;this.cancelRequested=!1;this.cancelActiveIndexing=null;this.activeStreamingIndexer=null;this.schemaVersionChecked=!1;this.PROGRESS_WRITE_INTERVAL_MS=5e3;this.PROGRESS_WRITE_FILE_INTERVAL=50;this.SESSION_STATS_WRITE_INTERVAL_MS=1e4;this.SESSION_STATS_WRITE_FILE_INTERVAL=500;this.SESSION_STATS_DISCOVERED_INTERVAL=1e3;this.INDEXING_SESSION_STATS_META_KEY="indexing_session_stats";if(tL(),this.coordId=Math.random().toString(36).slice(2,8),this.projectRoot=e,this.indexingTracker=Ks.getInstance(this.projectRoot),this.rootExists=(()=>{try{return jr.default.existsSync(e)}catch{return!1}})(),!this.rootExists)try{le("[ThreadedIndexer] project root does not exist; indexing will be skipped",e)}catch{}let s=Ab.default.cpus()?.length||4;this.workerCount=Yj(t??s,Yf,Bi),this.excludeDirs=this.normalizeExcludeEntries(r?.excludeDirs??[]),this.languageSupport=r?.languageSupport,Qs("constructor exclude directories",this.excludeDirs),this.excludePredicate=xT(this.projectRoot,this.excludeDirs),this.store=new sr(e),le(`[${new Date().toISOString()}] [ThreadedIndexer] constructor created FileChunkMappingStore`,{projectRoot:this.projectRoot,metaDbPath:gc(this.projectRoot)}),this.excludePredicate||this.rebuildExcludePredicate(),le("[ThreadedIndexer] coordinator init",{coordId:this.coordId,projectRoot:this.projectRoot,workerCount:this.workerCount,rootExists:this.rootExists,pid:process.pid,runtimePaths:Rs(),resolvedWorkerScript:ks("indexer-worker"),envWorkerRoot:process.env.PANDO_WORKER_SCRIPT_DIR??null,envRuntimeRoot:process.env.PANDO_RUNTIME_ROOT??null}),this.ensureSchemaVersion()}ensureSchemaVersion(){if(this.schemaVersionChecked)return!1;this.schemaVersionChecked=!0;let e=String(gT);le(`[${new Date().toISOString()}] [ThreadedIndexer] ensureSchemaVersion start`,{projectRoot:this.projectRoot,current:e});let t=this.store.getIndexerMeta("schema_version");le(`[${new Date().toISOString()}] [ThreadedIndexer] ensureSchemaVersion stored`,{projectRoot:this.projectRoot,stored:t});let r=this.hasExistingIndexFiles();le(`[${new Date().toISOString()}] [ThreadedIndexer] ensureSchemaVersion hasExisting`,{projectRoot:this.projectRoot,hasExisting:r});let s=r?this.detectMissingNodeColumns():[],i=s.length>0;return le(`[${new Date().toISOString()}] [ThreadedIndexer] ensureSchemaVersion structural check`,{projectRoot:this.projectRoot,structurallyBroken:i,missingColumns:s}),le(`[${new Date().toISOString()}] [ThreadedIndexer] ensureSchemaVersion summary`,{projectRoot:this.projectRoot,current:e,stored:t,hasExisting:r,structurallyBroken:i,missingColumns:s}),r&&i?(le("[ThreadedIndexer] Structural schema drift detected - deleting stale index DBs for fresh rebuild",{missingColumns:s}),this.cleanupAllIndexFiles(`ensureSchemaVersion: schema drift, missing nodes columns [${s.join(", ")}]`),this.store=new sr(this.projectRoot),this.store.setIndexerMeta("schema_version",e),!0):!t&&r?(le("[ThreadedIndexer] Schema version missing with existing index files; backfilling schema_version (no cleanup)."),le("[ThreadedIndexer] schema write (backfill) starting",{projectRoot:this.projectRoot,schemaVersion:e}),this.store.setIndexerMeta("schema_version",e),!1):(t&&t===e||(t&&t!==e&&(le(`[ThreadedIndexer] Schema version mismatch (have ${t}, want ${e}) - updating version, no reindex`),this.store=new sr(this.projectRoot)),le("[ThreadedIndexer] schema write (post-check) starting",{projectRoot:this.projectRoot,schemaVersion:e}),this.store.setIndexerMeta("schema_version",e)),!1)}detectMissingNodeColumns(){let e=Ln(this.projectRoot,0);if(!jr.default.existsSync(e))return[];try{let t=new At(e,{readonly:!0}),r;try{let s=t.prepare("PRAGMA table_info(nodes)").all();r=new Set(s.map(i=>i.name).filter(i=>typeof i=="string"))}finally{t.close()}return r.size===0?[]:Vj.filter(s=>!r.has(s))}catch(t){return le("[ThreadedIndexer] Failed to inspect nodes schema:",t?.message??t),[]}}hasExistingIndexFiles(){let e=st(this.projectRoot);if(!jr.default.existsSync(e))return!1;try{let t=jr.default.readdirSync(e);return le(`[${new Date().toISOString()}] [ThreadedIndexer] hasExistingIndexFiles dir listing`,{dir:e,count:t.length,sample:t.slice(0,20)}),t.some(r=>r.startsWith(".pando-index-chunk-")&&r.endsWith(".db")||r.startsWith(".pando-fts-chunk-")&&r.endsWith(".db")||r==="meta.db")}catch(t){return le("[ThreadedIndexer] Failed to read index directory for schema check:",t?.message??t),!1}}cleanupAllIndexFiles(e){let t=st(this.projectRoot);le("[ThreadedIndexer] cleanupAllIndexFiles deleting stale index DBs for rebuild",{projectRoot:this.projectRoot,dataDir:t,reason:e??"unknown"});let r;try{r=jr.default.existsSync(t)?jr.default.readdirSync(t):[]}catch(o){le("[ThreadedIndexer] cleanupAllIndexFiles failed to read data dir:",o?.message??o);return}let s=o=>{let a=o.replace(/-(wal|shm)$/,"");return a.startsWith(".pando-index-chunk-")&&a.endsWith(".db")||a.startsWith(".pando-fts-chunk-")&&a.endsWith(".db")||a==="meta.db"},i=0;for(let o of r){if(!s(o))continue;let a=qi.default.join(t,o);try{jr.default.rmSync(a,{force:!0}),i+=1}catch(c){le("[ThreadedIndexer] cleanupAllIndexFiles failed to delete file:",{target:a,error:c?.message??c})}}le("[ThreadedIndexer] cleanupAllIndexFiles done",{dataDir:t,deleted:i,reason:e??"unknown"})}checkAndCleanupIfNeeded(){return!1}mergeIndexRunState(e,t){let r=s=>{switch(s){case"failed":return 4;case"canceled":return 3;case"partial":return 2;default:return 1}};return r(t)>=r(e)?t:e}beginIndexingSession(e,t="full"){let r=Math.max(1,Math.floor(e||1));if(this.indexingActiveSessions===0){this.indexingProcessed=0,this.indexingBytesProcessed=0,this.indexingFailedFiles=0,this.indexingSkippedFiles=0,this.indexingTotalEstimate=r,this.indexingFinalState="completed",this.indexingFailureMessage=void 0,this.indexingSessionMode=t,this.lastDbProgressWrite=Date.now(),this.indexingTracker.startIndexing(r);try{ca.getInstance(this.projectRoot).start()}catch{}this.store.startIndexingSession(r);try{this.store.setIndexerMeta(this.INDEXING_SESSION_STATS_META_KEY,JSON.stringify({isIndexing:!0,runState:"running",filesDiscovered:r,totalFilesEstimate:r,filesIndexed:0,filesProcessed:0,filesSkipped:0,filesFailed:0,byExtension:{},processedByExtension:{},updatedAt:Date.now()}))}catch(i){le("[ThreadedIndexer] Failed to initialize indexing session stats meta:",i?.message??i)}}else r>this.indexingTotalEstimate&&(this.indexingTotalEstimate=r,this.indexingTracker.setTotalFiles(r));this.indexingActiveSessions++;let s=!1;return(i="completed",o)=>{if(!s&&(s=!0,this.indexingActiveSessions>0&&(this.indexingFinalState=this.mergeIndexRunState(this.indexingFinalState,i),o&&!this.indexingFailureMessage&&(this.indexingFailureMessage=o),this.indexingActiveSessions--,this.indexingActiveSessions===0))){this.indexingTracker.completeIndexing();let a=this.indexingProcessed+this.indexingSkippedFiles+this.indexingFailedFiles,c=this.indexingFailedFiles===0&&a>=Math.max(1,this.indexingTotalEstimate),l=this.indexingSessionMode==="incremental"&&this.indexingFinalState==="completed"&&this.indexingFailedFiles===0,u=this.indexingFinalState==="completed"&&!c&&!l?"partial":this.indexingFinalState,d=u==="completed"?Math.max(a,Math.max(1,this.indexingTotalEstimate)):a,p=Math.max(this.indexingSkippedFiles,d-this.indexingProcessed-this.indexingFailedFiles,0);le(`[ThreadedIndexer] finalizeIndexingSession: processed=${this.indexingProcessed}, skipped=${this.indexingSkippedFiles}, total=${this.indexingTotalEstimate}, failed=${this.indexingFailedFiles}, completedByInvariant=${c}, completedByQueueDrain=${l}, finalState=${this.indexingFinalState}, terminalState=${u}`);try{this.store.updateSessionProgress(d,this.indexingBytesProcessed,this.indexingTotalEstimate)}catch(f){le("[ThreadedIndexer] Failed to persist final session progress to DB:",f?.message??f)}this.store.finalizeIndexingSession(u,this.indexingFailureMessage);try{u==="completed"?ca.getInstance(this.projectRoot).complete():ca.getInstance(this.projectRoot).error(`index_${u}`)}catch{}try{let f=this.store.getIndexerMeta(this.INDEXING_SESSION_STATS_META_KEY),m={};if(f)try{let h=JSON.parse(f);h&&typeof h=="object"&&(m=h)}catch{}this.store.setIndexerMeta(this.INDEXING_SESSION_STATS_META_KEY,JSON.stringify({...m,isIndexing:!1,runState:u,filesDiscovered:Math.max(Math.max(1,this.indexingTotalEstimate),Number(m.filesDiscovered)||0,d),totalFilesEstimate:Math.max(1,this.indexingTotalEstimate),filesIndexed:Math.max(Math.max(0,this.indexingProcessed),Number(m.filesIndexed)||0),filesProcessed:Math.max(d,Number(m.filesProcessed)||0),filesSkipped:Math.max(p,Number(m.filesSkipped)||0),filesFailed:Math.max(this.indexingFailedFiles,Number(m.filesFailed)||0),failureMessage:this.indexingFailureMessage??null,updatedAt:Date.now()}))}catch(f){le("[ThreadedIndexer] Failed to finalize indexing session stats meta:",f?.message??f)}this.indexingProcessed=0,this.indexingBytesProcessed=0,this.indexingFailedFiles=0,this.indexingSkippedFiles=0,this.indexingTotalEstimate=0,this.indexingFinalState="completed",this.indexingFailureMessage=void 0,this.indexingSessionMode="full"}}}bumpIndexingTotal(e){if(this.indexingActiveSessions===0)return;let t=Math.max(1,Math.floor(e||1));t>this.indexingTotalEstimate&&(this.indexingTotalEstimate=t,this.indexingTracker.setTotalFiles(t))}reportIndexedFile(e,t){if(this.indexingActiveSessions===0)return;this.indexingProcessed+=1,typeof t=="number"&&t>0&&(this.indexingBytesProcessed+=t),this.indexingTracker.updateProgress(this.indexingProcessed,e);let r=Date.now(),i=r-this.lastDbProgressWrite>=this.PROGRESS_WRITE_INTERVAL_MS,o=this.indexingProcessed%this.PROGRESS_WRITE_FILE_INTERVAL===0;if(i||o)try{this.store.updateSessionProgress(this.indexingProcessed,this.indexingBytesProcessed,this.indexingTotalEstimate),this.lastDbProgressWrite=r}catch(a){le("[ThreadedIndexer] Failed to write session progress to DB:",a?.message??a)}}currentIndexingProgress(){return this.indexingProcessed}computeWorkerConcurrency(e){if(!e.length)return 1;let t=this.store.getIndexerMeta("worker_concurrency_hint");if(t){let h=Number(t);if(Number.isFinite(h)&&h>=1){let g=Math.max(Yf,Math.min(Bi,Math.floor(h)));return Math.min(g,e.length||1)}}let r=Math.max(1,Ab.default.cpus()?.length||4),s=Math.min(Bi,r),i=32,o=16*1024*1024,a=0,c=0,l=0,u=Nb.performance.now();for(let h of e){if(a>=i||l>=o)break;try{let y=jr.default.readFileSync(h).length;a+=1,l+=y,c+=y}catch(g){Qs("computeWorkerConcurrency.sampleError",{file:h,error:g?.message||String(g)})}}let d=Math.max(1,Nb.performance.now()-u),p=d/1e3,f=Bi;if(a>0&&l>0&&p>0){let h=c/1048576,g=h/a,y=h/p;if(Number.isFinite(g)&&g>0&&Number.isFinite(y)&&y>0){let b=Math.ceil(y/g);f=Math.max(Yf,Math.min(Bi,b))}}let m=Math.min(s,f,Bi);m=Math.max(Yf,m),m=Math.min(Bi,m),m=Math.min(m,e.length||1);try{this.store.setIndexerMeta("worker_concurrency_hint",String(m));let h=JSON.stringify({sampledFiles:a,sampledBytes:l,totalSizeBytes:c,elapsedMs:d});this.store.setIndexerMeta("worker_concurrency_sample",h)}catch(h){Qs("computeWorkerConcurrency.persistError",{error:h?.message||String(h)})}return m}normalizeExcludeEntries(e){let t=e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean).map(r=>r.replace(/^\/+/,"").replace(/\/+$/,""));return Qs("normalizeExcludeEntries result",t),t}relFromAbs(e){let t=qi.default.relative(this.projectRoot,e).replace(/\\/g,"/");return!t||t.startsWith("..")?null:t}absFromRel(e){return qi.default.join(this.projectRoot,e)}rebuildExcludePredicate(){this.excludePredicate=xT(this.projectRoot,this.excludeDirs)}isExcluded(e){return this.excludePredicate?this.excludePredicate(e):!1}filterExcluded(e){if(!this.excludePredicate)return e;Qs("filterExcluded input",{count:e.length});let t=e.filter(r=>!(this.excludePredicate&&this.excludePredicate(r)));return Qs("filterExcluded output",{count:t.length,excluded:e.length-t.length}),t}getExpectedShardCount(){let e=-1,t=0,r=[];try{let i=this.store.all();t=i.length,r=i.slice(0,5),e=i.reduce((o,a)=>{let c=Number.isFinite(a?.chunk_id)?Number(a.chunk_id):-1;return c>o?c:o},-1)}catch{}let s=Math.max(Math.max(1,this.workerCount),e+1);return le(`[${new Date().toISOString()}] [ThreadedIndexer] getExpectedShardCount`,{workerCount:this.workerCount,maxStoredChunk:e,storeRows:t,storeSample:r,expected:s}),s}checkIndexIntegrity(){return le("[ThreadedIndexer] checkIndexIntegrity called but DISABLED - always returning empty (no missing files)",{message:"Index integrity checking has been disabled. Missing files will not trigger cleanup."}),le("[ThreadedIndexer] INTEGRITY CHECK DISABLED: Method always returns empty array"),[]}deletedPathsIncludeCritical(e){if(le(`[ThreadedIndexer] deletedPathsIncludeCritical checking ${e.length} paths`),!e.length)return!1;let t=[st(this.projectRoot),co(this.projectRoot),gc(this.projectRoot),".pando-index-chunk-",".pando-fts-chunk-"];for(let r of e){let s=this.relFromAbs(r)||r;le(`[ThreadedIndexer] Checking path: ${r} (rel: ${s})`);for(let i of t)if(s.includes(i)||r.includes(i))return le(`[ThreadedIndexer] \u2713 MATCH: "${r}" matches critical pattern "${i}"`),!0}return le("[ThreadedIndexer] No critical patterns matched"),!1}checkIntegrityAndCleanup(e){return!1}cancelIndexing(e){if(!this.cancelRequested){if(this.cancelRequested=!0,this.cancelActiveIndexing)try{this.cancelActiveIndexing()}catch{}e&&le("[ThreadedIndexer] indexing cancelled",{reason:e})}}dispose(e){this.cancelRequested=!0;try{this.activeStreamingIndexer?.stop()}catch{}if(this.activeStreamingIndexer=null,this.cancelActiveIndexing)try{this.cancelActiveIndexing()}catch{}this.cancelActiveIndexing=null,e&&le("[ThreadedIndexer] disposed",{reason:e})}isRetryableIndexFailure(e){let t=String(e?.message||e||"").toLowerCase();return t?t.includes("worker exited")||t.includes("worker error")||t.includes("worker initialization timeout")||t.includes("err_worker_not_running")||t.includes("must be spawned as a worker thread"):!1}async runIndex(e,t,r){let s=em,i=this.rootExists||(()=>{try{return jr.default.existsSync(this.projectRoot)}catch{return!1}})();if(!i)return{processed:0,shardDbs:[],captures:[]};le("[ThreadedIndexer] runIndex start",{coordId:this.coordId,projectRoot:this.projectRoot,manualMode:Array.isArray(e),manualCount:Array.isArray(e)?e.length:0,workerCount:this.workerCount,consistencyModel:"eventual",pid:process.pid}),this.cancelRequested=!1;let o=!1;this.rootExists=i;let a=Array.isArray(e),c=a?e:[],l=!!(r?.captureContents&&!a);if(a&&c.length===0)return{processed:0,shardDbs:[],captures:[]};let u=Date.now(),d={},p=(_,R)=>{d[_]=Date.now()-R,yT(`threaded.${_}.complete`,{coordId:this.coordId,projectRoot:this.projectRoot,manualMode:Array.isArray(e),durationMs:d[_]})},f=[];if(a){for(let _ of c)if(_.size===void 0||_.mtime===void 0)try{let R=jr.default.statSync(_.absPath);_.size=R.size,_.mtime=Math.floor(R.mtimeMs)}catch(R){le(`[ThreadedIndexer] fs.statSync failed for ${_.absPath}:`,R?.message??R)}}let m;if(a){let _=c.map(R=>R.relPath);m=_.length?this.store.getMany(_):new Map}else m=this.store.getAllKnownFiles();let h=Math.max(1,a?c.length:m.size||c.length||1),g=this.beginIndexingSession(h,a?"incremental":"full"),y="completed",b,S=null;try{let _=Array.from(a?new Set(c.map(H=>H.relPath)):m.keys()),R=this.store.getFileCosts(_),E=this.store.getThroughput(),T=[];try{T=this.store.all()}catch(H){le("[ThreadedIndexer] Failed to read chunk mapping store:",H?.message??H)}let x=T.reduce((H,ie)=>{let Ie=Number.isFinite(ie?.chunk_id)?Number(ie.chunk_id):-1;return Ie>H?Ie:H},-1),w=Math.max(Math.max(1,this.workerCount),x+1),D=new Array(w).fill(0),F=pT({shardCount:w,shardPendingLoads:D,knownMap:m,predictCost:H=>this.predictWorkCost(H.relPath,H.size,R,E)}),N=Math.random().toString(36).slice(2,8),C=!a;C&&(S=N,this.store.beginScanSeenRun(N)),le(`[${new Date().toISOString()}] [ThreadedIndexer] selection snapshot`,{runId:N,manualMode:a,manualEntries:c.length,captureContents:l,knownMap:m.size,costMap:R.size,throughput:E,shardCount:w,shardPendingLoads:D});let O=Array.from({length:w},(H,ie)=>Ln(this.projectRoot,ie)),M=Date.now(),P=await Promise.all(O.map(H=>Xs.getShared(H,{projectRoot:this.projectRoot})));p("writers-acquire",M);let A=P.map(H=>({client:H,queue:[],processing:!1,loopPromise:null})),v=[],I=[],k=new Map,$=new Map,L=0,j=[],z=Date.now(),U=0,K=0,G=0,te=0,pe=0,ke=0,re=Date.now(),W=Date.now(),me=Date.now(),_e=Date.now(),Se=Date.now(),Q=0,B=0,Z=new Map,se=H=>{let ie=qi.default.extname(H).toLowerCase()||"<none>";Z.set(ie,(Z.get(ie)??0)+1)},ae=(H,ie)=>{ie&&(H.writeMs+=ie.writeMs,H.writeTrackedMs+=ie.writeTrackedMs,H.writePreDeleteMs+=ie.writePreDeleteMs,H.writeInsertExportsMs+=ie.writeInsertExportsMs,H.writeInsertNodesMs+=ie.writeInsertNodesMs,H.writeInsertImportsMs+=ie.writeInsertImportsMs,H.writeInsertImportBindingsMs+=ie.writeInsertImportBindingsMs,H.writeInsertFileMs+=ie.writeInsertFileMs,H.writeInsertFtsMs+=ie.writeInsertFtsMs,H.writeFinalizeMs+=ie.writeFinalizeMs,H.writeResidualMs+=ie.writeResidualMs)},De=(...H)=>{let ie=Bu();for(let Ie of H)ae(ie,Ie||void 0);return ie},he=A,Ke=40,Ze=1500*1024,Ye=Math.max(Ze,Number(process.env.PANDO_AST_DENSE_WRITE_BATCH_BYTES||`${6*1024*1024}`)),Ft=1e3,Ee=25,rt=Math.max(1e3,Number(process.env.PANDO_WRITE_BATCH_STALL_LOG_MS||"10000")),xe=H=>H.type==="write",Me=5e5,ge=H=>(H.nodeRows?.length??0)>=1e3||(H.nodeRows?.length??0)+(H.referenceRows?.length??0)+(H.symbolMentionRows?.length??0)+(H.importRows?.length??0)+(H.importBindingRows?.length??0)>=1500,ye=H=>ge(H)?Ye:Ze,Ve=H=>{let ie=Array.isArray(H.fileRow)?H.fileRow:[],Ie=typeof ie[2]=="number"?ie[2]:0,ht=H.fts&&typeof H.fts.content=="string"?H.fts.content.length:0,It=H.nodeRows?.length??0,Zt=(H.exportRows?.length??0)+It+(H.referenceRows?.length??0)+(H.symbolMentionRows?.length??0)+(H.importRows?.length??0)+(H.importBindingRows?.length??0),$n=It>=1e3?96:It>=250?160:256,bn=Zt*$n;return Math.max(0,Ie+ht+bn)},bt=(H,ie)=>{let Ie=Ve(H.payload);return H.payload.fts?.content&&Ie>Me&&s&&le(`[Writer chunk ${ie}] large payload retained with FTS`,{file:H.relPath,estimated:Ie,threshold:Me}),Ie},Fn=(H,ie)=>{ie.processing=!0,ie.loopPromise=(async()=>{for(;ie.queue.length;){let Ie=ie.queue.shift();if(Ie.type==="delete"){try{await ie.client.batchPreDelete([Ie.relPath])}catch(it){le(`[Writer chunk ${H}] pre-delete failed for ${Ie.relPath}:`,it?.message??it)}continue}if(!xe(Ie))continue;if(ie.queue.length===0){let it=Date.now()+Ft;for(;Date.now()<it&&ie.queue.length<Ke-1;)await new Promise(Sr=>setTimeout(Sr,Ee))}let ht=[Ie],It=bt(Ie,H),Zt=ye(Ie.payload);for(;ie.queue.length&&ht.length<Ke&&It<Zt;){let it=ie.queue[0];if(!it||!xe(it))break;let Sr=bt(it,H),Mi=Math.max(Zt,ye(it.payload));if(ht.length+1>Ke||It+Sr>Mi)break;let Kl=ie.queue.shift();ht.push(Kl),It+=Sr,Zt=Mi}s&&le(`[Writer chunk ${H}] batch selected`,{count:ht.length,bytes:It,byteLimit:Zt,sample:ht.slice(0,5).map(it=>it.relPath)});let $n=ht.filter(it=>it.shouldPreDelete).map(it=>it.relPath);if($n.length)try{le(`[Writer chunk ${H}] pre-delete batch`,{count:$n.length,sample:$n.slice(0,5)}),await ie.client.batchPreDelete($n);for(let it of ht)it.shouldPreDelete&&(it.payload.preDeleted=!0)}catch(it){le(`[Writer chunk ${H}] pre-delete failed for batch:`,it?.message??it)}let bn=Date.now(),Ni,Gr=null;try{Gr=setInterval(()=>{let it=Date.now()-bn;le(`[Writer chunk ${H}] write batch still pending`,{runId:N,ageMs:it,batchCount:ht.length,queueRemaining:ie.queue.length,sample:ht.slice(0,3).map(Sr=>Sr.relPath)})},rt),Ni=await ie.client.enqueueWriteBatch(ht.map(it=>it.payload))}catch(it){let Sr=ht[0]?.relPath??"unknown";throw le(`[Writer chunk ${H}] write batch failed for ${Sr}:`,it?.message??it),it}finally{Gr&&(clearInterval(Gr),Gr=null)}let br=Date.now()-bn;(br>2e3||s)&&le(`[Writer chunk ${H}] slow batch`,{count:ht.length,ms:br,metrics:Ni});let fi=Math.max(1,ht.length?Ni.writeMs/ht.length:Ni.writeMs);for(let it of ht){let Sr=Array.isArray(it.payload.fileRow)?it.payload.fileRow:[],Mi=it.meta?.size??(typeof Sr[2]=="number"?Sr[2]:void 0),Kl=it.meta?.mtime??(typeof Sr[1]=="number"?Sr[1]:void 0),pc=typeof Sr[3]=="string"?Sr[3]:"completed";if(typeof Mi=="number"&&(U+=Mi),K+=fi,G+=1,W=Date.now(),me=W,vt(Ne,it.relPath),pc==="completed")te+=1,this.reportIndexedFile(fi,Mi);else if(pc==="failed"){this.indexingFailedFiles+=1;try{this.store.addSessionFailures(1)}catch{}X("IndexingAudit","index payload persisted as failed",{runId:N,relPath:it.relPath,chunkId:H,status:pc,size:Mi,mtime:Kl})}else X("IndexingAudit","index payload persisted with unexpected status",{runId:N,relPath:it.relPath,chunkId:H,status:pc});if(On(),I.push({file_path:it.relPath,durationMs:fi}),v.push({file_path:it.relPath,size:Mi,mtime:Kl,fully_indexed:it.payload.fullyIndexed===!0}),pc==="completed")k.set(it.relPath,H);else try{this.store.removeMappings([it.relPath])}catch(fc){X("IndexingAudit","failed to remove mapping for failed payload",{runId:N,relPath:it.relPath,error:fc?.message??String(fc)})}if(L<5&&(L+=1,le(`[${new Date().toISOString()}] [ThreadedIndexer] mapping update queued`,{runId:N,relPath:it.relPath,chunkId:H,status:pc,size:Mi,mtime:Kl})),se(it.relPath),yn(),G-pe>=100){let fc=Date.now(),py=Math.max(1,fc-re),wR=G-pe,vR=U-ke,RR=wR/(py/1e3),kR=vR/(1024*1024)/(py/1e3),ER=Math.max(1,fc-u),TR=G/(ER/1e3),PR=Math.max(this.indexingTotalEstimate,de,G),OF=Math.max(0,PR-G);le(`[${new Date().toISOString()}] [ThreadedIndexer] milestone`,{runId:N,processedTotal:G,indexedTotal:te,failedTotal:this.indexingFailedFiles,skippedTotal:f.length,totalEstimate:PR,filesLeft:OF,elapsedMs:ER,processedSinceLast:wR,bytesSinceLast:vR,sinceMs:py,avgFilesPerSec:Number.isFinite(TR)?Number(TR.toFixed(2)):null,filesPerSec:Number.isFinite(RR)?Number(RR.toFixed(2)):null,mbPerSec:Number.isFinite(kR)?Number(kR.toFixed(2)):null,extSinceLast:Object.fromEntries(Array.from(Z.entries()).sort(($F,jF)=>jF[1]-$F[1]))}),pe=G,ke=U,re=fc,Z.clear()}}}})().catch(Ie=>{throw le(`[Writer chunk ${H}] loop failed:`,Ie?.message??Ie),Ie}).finally(()=>{ie.processing=!1,ie.loopPromise=null})},nr=(H,ie)=>{let Ie=he[H];if(!Ie){le(`[ThreadedIndexer] Attempted to enqueue task for missing writer ${H}`,ie);return}Ie.queue.push(ie),Ie.processing||Fn(H,Ie)},vn=a?Math.max(1,Math.min(Math.max(c.length,1)*2,Ib)):Ib,Ot=Math.min(w,Bi);le(`[${new Date().toISOString()}] [ThreadedIndexer] Starting StreamingIndexer`,{manualMode:a,manualEntries:c.length,shardCount:w,indexerConcurrency:Ot,maxInFlight:vn,runId:N});let ze=new Uu(this.projectRoot,{excludeDirs:this.excludeDirs,concurrency:Ot,snapshotConcurrency:1,maxInFlight:vn,maxInFlightBytes:bT,sharedWorkers:!0,languageSupport:this.languageSupport,runId:N});this.activeStreamingIndexer=ze,this.cancelActiveIndexing=()=>{o=!0;try{ze.stop()}catch{}};let $t=[],Kt=new Map,Je=new Map,wt=0,xt=0,ft=[],de=0,Ae=new Set,We=new Map,ve=new Map,Ne=new Map,Ge=0,Be=H=>qi.default.extname(H).toLowerCase()||"<none>",vt=(H,ie)=>{let Ie=Be(ie);H.set(Ie,(H.get(Ie)??0)+1)},Rn=H=>Object.fromEntries(Array.from(H.entries()).sort((ie,Ie)=>Ie[1]-ie[1])),On=(H=!1)=>{let ie=Date.now(),Ie=ie-Ge>=this.SESSION_STATS_WRITE_INTERVAL_MS,ht=G>0&&G%this.SESSION_STATS_WRITE_FILE_INTERVAL===0,It=de>0&&de%this.SESSION_STATS_DISCOVERED_INTERVAL===0;if(!(!H&&!Ie&&!ht&&!It))try{let $n=f.length+wt+xt;this.indexingSkippedFiles=$n;let bn=this.indexingFailedFiles,Ni=te,Gr=G+$n+bn,br=Math.max(this.indexingTotalEstimate,de,Gr,1);this.store.setIndexerMeta(this.INDEXING_SESSION_STATS_META_KEY,JSON.stringify({isIndexing:!0,runState:"running",filesDiscovered:br,totalFilesEstimate:br,filesIndexed:Ni,filesProcessed:Gr,filesSkipped:$n,filesFailed:bn,byExtension:Rn(ve),processedByExtension:Rn(Ne),updatedAt:ie})),Ge=ie}catch(Zt){le("[ThreadedIndexer] Failed to persist indexing session stats meta:",Zt?.message??Zt)}},yn=(H=!1)=>{let ie=Date.now(),Ie=ie-z>=5e3,ht=G>0&&G%200===0;if(!(!H&&!Ie&&!ht)){if(k.size){let It=Array.from(k.entries()).map(([Zt,$n])=>({file_path:Zt,chunk_id:$n}));k.clear();try{this.store.upsertChunkMappings(It)}catch(Zt){for(let $n of It)k.set($n.file_path,$n.chunk_id);le("[ThreadedIndexer] Incremental mapping flush failed:",Zt?.message??Zt)}}if(v.length){let It=v.splice(0,v.length);try{this.store.batchUpdateSeen(It)}catch(Zt){v.unshift(...It),le("[ThreadedIndexer] Incremental seen-state flush failed:",Zt?.message??Zt)}}if(I.length){let It=I.splice(0,I.length);try{this.store.recordFileCosts(It)}catch(Zt){I.unshift(...It),le("[ThreadedIndexer] Incremental file-cost flush failed:",Zt?.message??Zt)}}z=ie}},Ws=setInterval(()=>{let H=Date.now(),ie=new Date(H).toISOString(),Ie=he.map(br=>br.queue.length),ht=Ie.reduce((br,fi)=>br+fi,0),It=he.filter(br=>br.processing).length,Zt=Ie.map((br,fi)=>({idx:fi,size:br,processing:he[fi].processing})).sort((br,fi)=>fi.size-br.size).slice(0,3),$n=H-me,bn=H-_e,Ni=G-Q,Gr=de-B;le(`[${ie}] [ThreadedIndexer] writer-status`,{runId:N,writers:he.length,activeWriters:It,totalQueued:ht,topQueues:Zt,processedCount:G,totalBytesProcessed:U,processedDelta:Ni,discoveredDelta:Gr,sinceLastProcessedMs:$n,sinceLastDiscoveredMs:bn,sinceLastStatusMs:H-Se}),Se=H,Q=G,B=de,ht>0&&H-W>15e3&&le(`[${new Date().toISOString()}] [ThreadedIndexer] stall-suspected`,{runId:N,totalQueued:ht,activeWriters:It,sinceLastProcessedMs:H-me,sinceLastDiscoveredMs:H-_e})},1e4),yr=[],_R=()=>{!C||yr.length===0||(this.store.markScanSeen(N,yr),yr=[])};ze.on("error",H=>{let ie=H instanceof Error?H:new Error(String(H));$t.push(ie),this.indexingFailedFiles+=1;try{this.store.addSessionFailures(1)}catch{}le(`[${new Date().toISOString()}] [ThreadedIndexer] StreamingIndexer error`,ie.message)}),ze.on("file:skipped",(H,ie)=>{wt+=1,this.indexingSkippedFiles=f.length+wt;let Ie=ie||"unknown",ht=(Kt.get(Ie)??0)+1;if(Kt.set(Ie,ht),ht<=5){let It=Je.get(Ie)??[];It.length<5&&It.push(H),Je.set(Ie,It)}s&&ht%100===0&&le(`[${new Date().toISOString()}] [ThreadedIndexer] skipped files`,{runId:N,reason:Ie,count:ht})}),ze.on("file:discovered",H=>{l&&H.sharedBuffer instanceof SharedArrayBuffer&&j.push({logicalPath:H.relPath,contentB64:Buffer.from(H.sharedBuffer).toString("base64")});let ie={absPath:H.absPath,relPath:H.relPath,size:H.size,mtime:H.mtime};F.register(ie),C&&(yr.push(H.relPath),yr.length>=500&&_R()),_e=Date.now(),Ae.has(H.lang)||(Ae.add(H.lang),le("[ThreadedIndexer] discovered language",{lang:H.lang,sample:H.relPath})),a||(de+=1,this.bumpIndexingTotal(de)),vt(ve,H.relPath),On()}),ze.on("index:result",(H,ie)=>{let Ie=F.get(H.relPath);if(!Ie){le(`[ThreadedIndexer] Received index result for unknown file ${H.relPath}`);return}let ht=Ie.targetChunk??0;if(ht<0||ht>=he.length){le(`[ThreadedIndexer] Invalid writer chunk ${ht} for ${H.relPath}`);return}Ie.hadExisting&&Ie.oldChunk!==void 0&&Ie.oldChunk>=0&&Ie.oldChunk!==ht&&nr(Ie.oldChunk,{type:"delete",relPath:H.relPath});let It=ie?.payload;if(!It){le(`[ThreadedIndexer] Missing payload for ${H.relPath}`);return}It.preDeleted=!1,Ie.hadExisting&&Ie.oldChunk!==void 0&&Ie.oldChunk!==ht&&le("[ThreadedIndexer] existing file moved to new shard",{runId:N,relPath:H.relPath,lang:H.lang,oldChunk:Ie.oldChunk,targetChunk:ht});let Zt=Array.isArray(It.fileRow)?It.fileRow[3]:void 0;if(Zt==="completed"){let Gr=(We.get(H.lang)??0)+1;We.set(H.lang,Gr),Gr%100===0&&le("[ThreadedIndexer] completed 100 files",{lang:H.lang,total:Gr})}else Zt==="failed"&&X("IndexingAudit","index payload generated as failed",{runId:N,relPath:H.relPath,lang:H.lang,fileRow:It.fileRow});let $n=ie?.meta,bn=ie?.snapshotSummary;bn?.relPath&&bn?.objectId&&$.set(bn.relPath,{relPath:bn.relPath,objectId:bn.objectId,size:typeof bn.size=="number"?bn.size:void 0,mtime:typeof bn.mtime=="number"?bn.mtime:void 0,lineCount:typeof bn.lineCount=="number"?bn.lineCount:void 0,encoding:typeof bn.encoding=="string"?bn.encoding:void 0}),nr(ht,{type:"write",relPath:H.relPath,payload:It,meta:$n,predicted:Ie.predicted,oldChunk:Ie.oldChunk,shouldPreDelete:Ie.hadExisting})}),t&&await t(O);let Op=[],DF=Date.now();if(a){for(let H of c){if(F.shouldSkip(H)){f.push(H);continue}de+=1,vt(ve,H.relPath),Op.push({absPath:H.absPath,relPath:H.relPath,size:H.size,mtime:H.mtime,preDeleted:!1,emitMode:H.emitMode})}this.bumpIndexingTotal(this.currentIndexingProgress()+Op.length),On(!0),Op.length&&await ze.processFileEntries(Op)}else{await ze.start(),le(`[${new Date().toISOString()}] [ThreadedIndexer] waitForDrain: start runId=${N}`);let H=Date.now();await ze.waitForDrain(),xt=ze.getWorkerScanSkippedCount(),Rr("threaded-indexer.runIndex.waitForDrain.complete",{projectRoot:this.projectRoot,runId:N,manualMode:a,elapsedMs:Date.now()-H}),le(`[${new Date().toISOString()}] [ThreadedIndexer] waitForDrain: done runId=${N}`,{ms:Date.now()-H})}if(p(a?"manual-processing":"discovery-processing",DF),_R(),ze.stop(),this.activeStreamingIndexer=null,clearInterval(Ws),$t.length){let H=$t.map(ie=>ie.message);le("[ThreadedIndexer] StreamingIndexer completed with errors",H)}if(Kt.size&&le(`[${new Date().toISOString()}] [ThreadedIndexer] skip summary`,{runId:N,total:Array.from(Kt.values()).reduce((H,ie)=>H+ie,0),reasons:Object.fromEntries(Kt.entries()),samples:Object.fromEntries(Je.entries())}),C&&!o&&(ft=this.store.listUnseenForRun(N)),C)try{this.store.endScanSeenRun(N),S=null}catch(H){le("[ThreadedIndexer] endScanSeenRun failed",H?.message??H)}let FF=he.map(H=>H.loopPromise??Promise.resolve());le(`[${new Date().toISOString()}] [ThreadedIndexer] writer loops: waiting runId=${N}`);let dy=Date.now();await Promise.all(FF),p("writer-drain",dy),Rr("threaded-indexer.runIndex.writerLoops.complete",{projectRoot:this.projectRoot,runId:N,elapsedMs:Date.now()-dy,shardCount:he.length}),le(`[${new Date().toISOString()}] [ThreadedIndexer] writer loops: done runId=${N}`,{ms:Date.now()-dy});try{let H=Date.now();await Promise.all(P.map(ie=>ie.flush().catch(()=>null))),p("writer-flush",H),Rr("threaded-indexer.runIndex.writersFlush.complete",{projectRoot:this.projectRoot,runId:N,elapsedMs:Date.now()-H}),le(`[${new Date().toISOString()}] [ThreadedIndexer] writers flush complete`,{runId:N,ms:Date.now()-H})}finally{await Promise.all(P.map(H=>Xs.releaseShared(H).catch(()=>{})))}if(ft.length){let H=Date.now();le(`[${new Date().toISOString()}] [ThreadedIndexer] db-tracked deleted files`,{runId:N,count:ft.length,sample:ft.slice(0,25)});try{await this.purgeDeleted(ft)}catch(ie){le("[ThreadedIndexer] purgeDeleted from db-tracked list failed",ie?.message??ie)}try{this.store.removeMappings(ft)}catch(ie){le("[ThreadedIndexer] removeMappings from db-tracked list failed",ie?.message??ie)}try{this.store.deleteSnapshotSummaries(ft)}catch(ie){le("[ThreadedIndexer] deleteSnapshotSummaries from db-tracked list failed",ie?.message??ie)}p("deleted-purge",H)}if(f.length)for(let H of f)(typeof H.size=="number"||typeof H.mtime=="number")&&v.push({file_path:H.relPath,size:H.size,mtime:H.mtime});if(this.indexingSkippedFiles=f.length+wt+xt,yn(!0),k.size){let H=Array.from(k.entries()).map(([Ie,ht])=>({file_path:Ie,chunk_id:ht}));le(`[${new Date().toISOString()}] [ThreadedIndexer] mapping updates flush start`,{runId:N,count:H.length,sample:H.slice(0,5)});let ie=Date.now();this.store.upsertChunkMappings(H),p("mapping-flush",ie),Rr("threaded-indexer.runIndex.mappingFlush.complete",{projectRoot:this.projectRoot,runId:N,count:H.length,elapsedMs:Date.now()-ie}),le(`[${new Date().toISOString()}] [ThreadedIndexer] mapping updates flush done`,{runId:N,count:H.length})}else le(`[${new Date().toISOString()}] [ThreadedIndexer] mapping updates empty`,{runId:N});if($.size){let H=Array.from($.values()).map(ie=>({file_path:ie.relPath,object_id:ie.objectId,file_size:ie.size,last_modified:ie.mtime,line_count:ie.lineCount,encoding:ie.encoding}));try{let ie=Date.now();this.store.upsertSnapshotSummaries(H),p("snapshot-summary-flush",ie),Rr("threaded-indexer.runIndex.snapshotSummaryFlush.complete",{projectRoot:this.projectRoot,runId:N,count:H.length,elapsedMs:Date.now()-ie}),le(`[${new Date().toISOString()}] [ThreadedIndexer] snapshot summary flush done`,{runId:N,count:H.length,sample:H.slice(0,5).map(Ie=>({file_path:Ie.file_path,object_id:Ie.object_id}))})}catch(ie){le("[ThreadedIndexer] snapshot summary flush failed",ie?.message??ie)}}else le(`[${new Date().toISOString()}] [ThreadedIndexer] snapshot summary flush empty`,{runId:N});if(v.length){le(`[${new Date().toISOString()}] [ThreadedIndexer] seen updates flush start`,{runId:N,count:v.length,sample:v.slice(0,5)});let H=Date.now();this.store.batchUpdateSeen(v),p("seen-flush",H),Rr("threaded-indexer.runIndex.seenFlush.complete",{projectRoot:this.projectRoot,runId:N,count:v.length,elapsedMs:Date.now()-H}),le(`[${new Date().toISOString()}] [ThreadedIndexer] seen updates flush done`,{runId:N,count:v.length})}else le(`[${new Date().toISOString()}] [ThreadedIndexer] seen updates empty`,{runId:N});let $p=Math.max(1,Date.now()-u);if(te>0&&K>0){let H=K/1e3,ie=te/H,Ie=U/H;this.store.recordThroughput(ie,Ie,te,U)}return o?y="canceled":($t.length>0||this.indexingFailedFiles>0)&&(y="partial"),On(!0),le(`[${new Date().toISOString()}] [ThreadedIndexer] runIndex complete`,{runId:N,processed:G,indexed:te,skipped:f.length+wt+xt,failed:this.indexingFailedFiles,bytes:U,durationMs:$p,processingMs:K,manualMode:a,shardCount:he.length}),yT("threaded.run.complete",{coordId:this.coordId,projectRoot:this.projectRoot,runId:N,manualMode:a,processed:G,indexed:te,skipped:f.length+wt,discoverySkipped:xt,failed:this.indexingFailedFiles,durationMs:$p,processingMs:K,phaseTimings:d}),Rr("threaded-indexer.runIndex.complete",{projectRoot:this.projectRoot,runId:N,processed:G,indexed:te,skipped:f.length+wt,discoverySkipped:xt,failed:this.indexingFailedFiles,bytes:U,durationMs:$p,processingMs:K,manualMode:a,shardCount:he.length}),{processed:G,shardDbs:O,captures:j,metrics:{filesProcessed:G,bytesProcessed:U,durationMs:$p,processingMs:K,skipped:f.length+wt+xt}}}catch(_){throw y="failed",b=_?.message??String(_),_}finally{if(this.activeStreamingIndexer=null,S)try{this.store.endScanSeenRun(S)}catch{}this.cancelActiveIndexing=null,g(y,b)}}predictWorkCost(e,t,r,s){let i=r.get(e);if(i&&Number.isFinite(i.avg_ms)&&i.avg_ms>0)return i.avg_ms;let o=200,a=typeof t=="number"?Math.min(t/1024,2e3):0;if(s&&Number.isFinite(s.avg_files_per_sec)&&(s.avg_files_per_sec??0)>0){let c=1/s.avg_files_per_sec*1e3;return o+a+c}return o+a}deleteFileFromShard(e,t){if(!Number.isFinite(e)||e<0)return;let r=Ln(this.projectRoot,e);if(!jr.default.existsSync(r))return;let s=new At(r);try{s.exec("BEGIN");let o=s.prepare("SELECT id FROM dict_files WHERE path = ?").get(t)?.id;if(typeof o=="number"){s.prepare("DELETE FROM nodes WHERE file_id = ?").run(o);let a=[["exports","file_id"],["files","file_id"],["file_imports","file_id"],["file_import_bindings","file_id"],["file_symbol_mentions","file_id"],["file_deps","src_file_id"]];for(let[c,l]of a)s.prepare(`DELETE FROM ${c} WHERE ${l} = ?`).run(o)}s.exec("COMMIT")}catch(i){try{s.exec("ROLLBACK")}catch(o){le(`[ThreadedIndexer] Failed to rollback shard delete for ${t}:`,o?.message??o)}throw i}finally{try{s.close()}catch(i){le(`[ThreadedIndexer] Failed to close shard DB for ${t}:`,i?.message??i)}}}async applyExplicitChanges(e,t){let r=Date.now();Rr("threaded-indexer.applyExplicitChanges.start",{projectRoot:this.projectRoot,created:e.created?.length||0,modified:e.modified?.length||0,deleted:e.deleted?.length||0,coordId:this.coordId,workerCount:this.workerCount,runtimePaths:Rs(),resolvedWorkerScript:ks("indexer-worker")});let s=_=>qi.default.normalize(qi.default.isAbsolute(_)?_:qi.default.join(this.projectRoot,_)),i=_=>Array.from(new Set((_??[]).filter(R=>typeof R=="string"&&R.length>0).map(s))),o=i(e.deleted);if(this.checkIntegrityAndCleanup(o))return Rr("threaded-indexer.applyExplicitChanges.fullReindex",{projectRoot:this.projectRoot,created:e.created?.length||0,modified:e.modified?.length||0,deleted:e.deleted?.length||0,elapsedMs:Date.now()-r}),{indexed:0,purged:0,needsFullReindex:!0,captures:[]};let c=new Set(o),l=i(e.modified).filter(_=>!c.has(_)),u=new Set(l),d=i([...e.created??[],...e.modified??[]]).filter(_=>!c.has(_)),p=[],f=[],m=new Map,h=[];for(let _ of d){if(jr.default.existsSync(_)){if(p.push(_),u.has(_)){let E=this.relFromAbs(_);E&&(f.push(E),m.set(_,E))}continue}let R=this.relFromAbs(_);R&&h.push(R)}let g=Array.from(new Set([...o.map(_=>this.relFromAbs(_)).filter(_=>!!_),...h])),y=0,b=0,S=[];try{if(t?.resetModifiedToLight!==!1&&f.length){let _=Array.from(new Set(f));Rr("threaded-indexer.applyExplicitChanges.resetModifiedToLight.start",{projectRoot:this.projectRoot,coordId:this.coordId,modified:_.length,sample:_.slice(0,20)}),b+=await this.purgeDeleted(_),Rr("threaded-indexer.applyExplicitChanges.resetModifiedToLight.complete",{projectRoot:this.projectRoot,coordId:this.coordId,modified:_.length})}if(p.length){let _=[],R=p;if(t?.resetModifiedToLight===!1&&f.length){let E=new Set,T=this.store.getMany(Array.from(new Set(f)));for(let[x,w]of T.entries())Number(w.fully_indexed||0)===1&&E.add(x);if(E.size){R=[];for(let x of p){let w=m.get(x);w&&E.has(w)?_.push(x):R.push(x)}}}if(Rr("threaded-indexer.applyExplicitChanges.indexFiles.start",{projectRoot:this.projectRoot,coordId:this.coordId,present:p.length,light:R.length,full:_.length,sample:p.slice(0,20)}),R.length){let E=await this.indexFiles(R,{emitMode:"light"});y+=E.processed,S.push(...E.captures)}if(_.length){let E=await this.indexFiles(_,{emitMode:"full"});y+=E.processed,S.push(...E.captures)}Rr("threaded-indexer.applyExplicitChanges.indexFiles.complete",{projectRoot:this.projectRoot,coordId:this.coordId,indexed:y,captureCount:S.length})}return g.length&&(b=await this.purgeDeleted(g)),Rr("threaded-indexer.applyExplicitChanges.complete",{projectRoot:this.projectRoot,indexed:y,purged:b,present:p.length,deleted:g.length,elapsedMs:Date.now()-r}),{indexed:y,purged:b,captures:S}}catch(_){let R=_?.message??String(_);throw Rr("threaded-indexer.applyExplicitChanges.failed",{projectRoot:this.projectRoot,indexed:y,purged:b,present:p.length,deleted:g.length,elapsedMs:Date.now()-r,error:R}),_}}async scanFiles(e){if(!(this.rootExists||(()=>{try{return jr.default.existsSync(this.projectRoot)}catch{return!1}})()))return[];let s=Array.from(new Set((e?.relativeDirs??[]).map(l=>typeof l=="string"?l.trim().replace(/^[\\/]+/,"").replace(/[\\/]+$/,""):"").filter(Boolean).map(l=>l.replace(/\\/g,"/")))).map(l=>`${l}/`),i=l=>{if(!s.length)return!0;let u=l.replace(/\\/g,"/");return s.some(d=>u===d.slice(0,-1)||u.startsWith(d))},o=`scan-${Math.random().toString(36).slice(2,8)}`,a=new Uu(this.projectRoot,{excludeDirs:this.excludeDirs,concurrency:Math.min(this.workerCount,Bi),snapshotConcurrency:1,maxInFlight:Ib,maxInFlightBytes:bT,sharedWorkers:!0,languageSupport:this.languageSupport,runId:o}),c=[];this.activeStreamingIndexer=a,this.cancelActiveIndexing=()=>{this.cancelRequested=!0;try{a.stop()}catch{}};try{return await a.scanFiles(async l=>{for(let u of l)i(u.relPath)&&c.push(u)}),c}finally{this.activeStreamingIndexer=null,this.cancelActiveIndexing=null,a.stop()}}async indexAll(e,t){let r=Date.now();Qs("indexAll start",{excludeDirs:this.excludeDirs});let s;try{s=await this.runIndex(null,e,t)}catch(a){if(!this.isRetryableIndexFailure(a))throw a;le("[ThreadedIndexer] indexAll retry after worker failure",{message:a?.message??String(a)}),s=await this.runIndex(null,e,t)}let i=Date.now()-r;le(`[${new Date().toISOString()}] [Indexer] Indexed ${s.processed} files in ${i}ms`);let o=s.metrics?{durationMs:s.metrics.durationMs,processingMs:s.metrics.processingMs,filesProcessed:s.metrics.filesProcessed,bytesProcessed:s.metrics.bytesProcessed,skipped:s.metrics.skipped}:void 0;return{processed:s.processed,shardDbs:s.shardDbs,totals:o,captures:s.captures}}async indexFiles(e,t){if(Qs("indexFiles start",{count:e.length,excludeDirs:this.excludeDirs,emitMode:t?.emitMode??"light"}),e=this.filterExcluded(e),Qs("indexFiles after filter",{count:e.length}),!e.length)return{processed:0,captures:[]};let r=this.computeWorkerConcurrency(e);r!==this.workerCount&&(Qs("indexFiles adjusting workerCount",{previous:this.workerCount,next:r}),this.workerCount=r);let s=[];for(let o of e){let a=this.relFromAbs(o);a&&s.push({absPath:o,relPath:a,emitMode:t?.emitMode})}if(!s.length)return{processed:0,captures:[]};let i;try{i=await this.runIndex(s)}catch(o){if(!this.isRetryableIndexFailure(o))throw o;le("[ThreadedIndexer] indexFiles retry after worker failure",{message:o?.message??String(o),entries:s.length}),i=await this.runIndex(s)}return{processed:i.processed,captures:i.captures}}async purgeDeleted(e){if(!Array.isArray(e)||e.length===0)return 0;let t=Array.from(new Set(e.filter(c=>typeof c=="string"&&c.length>0)));if(!t.length)return 0;let r=this.store.getMany(t),s=new Map,i=[];for(let c of t){let l=r.get(c)?.chunk_id;if(typeof l=="number"&&l>=0){let u=s.get(l)??[];u.push(c),s.set(l,u)}else i.push(c)}let o=Array.from(s.keys()).sort((c,l)=>c-l);if(i.length>0){let c=Math.max(1,this.workerCount);for(let l=0;l<c;l+=1)s.has(l)||(s.set(l,[]),o.push(l));o.sort((l,u)=>l-u)}let a=await Promise.all(o.map(async c=>({chunkId:c,writer:await Xs.getShared(Ln(this.projectRoot,c),{projectRoot:this.projectRoot})})));try{for(let{chunkId:c,writer:l}of a){let u=[...s.get(c)??[],...i];if(u.length!==0)try{await l.batchPreDelete(u)}catch(d){le(`[Purge] writer ${c} batchPreDelete failed`,d?.message||d)}}}finally{await Promise.all(a.map(({writer:c})=>Xs.releaseShared(c).catch(()=>{})))}for(let c of t)try{this.store.delete(c)}catch(l){le(`[ThreadedIndexer] Failed to remove mapping for ${c}:`,l?.message??l)}try{this.store.deleteSnapshotSummaries(t)}catch(c){le("[ThreadedIndexer] Failed to remove snapshot summaries for purged files:",c?.message??c)}return t.length}}});function nL(n){for(let e of n)if(vT.default.existsSync(e))return e;return n[n.length-1]}var So,vT,RT,tm,kT=ne(()=>{"use strict";So=q(require("path")),vT=q(require("fs")),RT=require("worker_threads");dr();da();tm=class{constructor(e,t){this.projectRoot=e;this.getExcludeDirs=t;this.worker=null;this.running=!1;this.debounceTimer=null;this.pending=null;this.pendingRejects=new Set;this.inFlightReject=null;this.inFlightCleanup=null}scriptPath(){let e=ks("snapshot-worker");return e||nL([So.default.join(__dirname,"workers","snapshot-worker.mjs"),So.default.join(__dirname,"workers","snapshot-worker.js"),So.default.resolve(__dirname,"..","..","..","out","pando-core","versioning","workers","snapshot-worker.mjs"),So.default.resolve(__dirname,"..","..","..","out","pando-core","versioning","workers","snapshot-worker.js"),So.default.resolve(process.cwd(),"out","pando-core","versioning","workers","snapshot-worker.mjs"),So.default.resolve(process.cwd(),"out","pando-core","versioning","workers","snapshot-worker.js"),So.default.join(__dirname,"workers","snapshot-worker.js")])}async ensure(){if(this.worker)return;let e=new RT.Worker(this.scriptPath()),t=r=>{try{let s=new Date().toISOString();console.log(`[${s}] [SnapshotWorker] error:`,r?.message||String(r)),r?.stack&&console.log(r.stack)}catch{}};e.on("error",r=>{t(r),this.worker=null,this.failInFlight(r instanceof Error?r:new Error(String(r)))}),e.on("exit",r=>{let s=!this.running&&!this.inFlightReject;this.worker=null,s||this.failInFlight(new Error(r===0?"Snapshot worker exited unexpectedly.":`Snapshot worker exited with code ${r}.`))}),await new Promise((r,s)=>{let i=()=>{c(),r()},o=l=>{c(),s(l instanceof Error?l:new Error(String(l)))},a=l=>{c(),s(new Error(l===0?"Snapshot worker exited before initialization.":`Snapshot worker exited with code ${l} before initialization.`))},c=()=>{e.off("message",i),e.off("error",o),e.off("exit",a)};e.on("message",i),e.on("error",o),e.on("exit",a),e.postMessage({cmd:"init",projectRoot:this.projectRoot,excludeDirs:this.currentExcludeDirs()})}),this.worker=e}failInFlight(e){let t=this.inFlightCleanup,r=this.inFlightReject;this.inFlightCleanup=null,this.inFlightReject=null,this.running=!1;try{t?.()}catch{}try{r?.(e)}catch{}}bindAbortSignal(e,t){return e?e.aborted?(t(),()=>{}):(e.addEventListener("abort",t,{once:!0}),()=>{try{e.removeEventListener("abort",t)}catch{}}):()=>{}}currentExcludeDirs(){try{let e=this.getExcludeDirs?.()||[];return Array.isArray(e)?e.slice():[]}catch{return[]}}async snapshotAll(e,t){return this.snapshotFiles([],e,void 0,t)}async snapshotAllWithCaptured(e,t,r){return this.snapshotFilesWithCaptured([],e,t,void 0,r)}async snapshotFilesWithCaptured(e,t,r,s,i){if(i?.aborted)throw Vn(i.reason,"Snapshot cancelled");return this.pending={files:e&&e.length?e:void 0,message:r,parent:s,captured:Array.isArray(t)?t:[]},new Promise((o,a)=>{let c=!1,l=f=>{c||(c=!0,this.pendingRejects.delete(u),p(),o(f))},u=f=>{c||(c=!0,this.pendingRejects.delete(u),p(),a(f))};this.pendingRejects.add(u);let d=()=>{clearTimeout(this.debounceTimer),this.pending=null,u(Vn(i?.reason,"Snapshot cancelled"))},p=this.bindAbortSignal(i,d);clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{(async()=>{try{let f=await this.runPending(i);l(f)}catch(f){u(f instanceof Error?f:new Error(String(f)))}})()},800)})}async snapshotFiles(e,t,r,s){if(s?.aborted)throw Vn(s.reason,"Snapshot cancelled");return this.pending={files:e&&e.length?e:void 0,message:t,parent:r},new Promise((i,o)=>{let a=!1,c=p=>{a||(a=!0,this.pendingRejects.delete(l),d(),i(p))},l=p=>{a||(a=!0,this.pendingRejects.delete(l),d(),o(p))};this.pendingRejects.add(l);let u=()=>{clearTimeout(this.debounceTimer),this.pending=null,l(Vn(s?.reason,"Snapshot cancelled"))},d=this.bindAbortSignal(s,u);clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{(async()=>{try{let p=await this.runPending(s);c(p)}catch(p){l(p instanceof Error?p:new Error(String(p)))}})()},800)})}async snapshotCaptured(e,t,r,s){if(s?.aborted)throw Vn(s.reason,"Snapshot cancelled");await this.ensure();let i=this.worker;return new Promise((o,a)=>{let c=!1,l=m=>{c||(c=!0,this.inFlightCleanup=null,this.inFlightReject=null,f(),m())},u=m=>{m?.type==="result"?l(()=>o({snapshotId:m.snapshotId,parent:m.parent})):m?.type==="error"&&l(()=>a(new Error(m.message)))},d=()=>{this.worker===i&&(this.worker=null),i.terminate().catch(()=>{}),l(()=>a(Vn(s?.reason,"Snapshot cancelled")))},p=this.bindAbortSignal(s,d),f=()=>{i.off("message",u),p()};this.inFlightReject=m=>l(()=>a(m)),this.inFlightCleanup=f,i.on("message",u),i.postMessage({cmd:"snapshot-captured",payload:{members:e,message:t,parent:r},excludeDirs:this.currentExcludeDirs()})})}async runPending(e){if(!this.pending)return Promise.resolve({snapshotId:"",parent:void 0});let t=this.pending;if(this.pending=null,this.running)return new Promise((s,i)=>{this.debounceTimer=setTimeout(async()=>{try{let o=await this.runPending(e);s(o)}catch(o){i(o)}},300)});if(e?.aborted)throw Vn(e.reason,"Snapshot cancelled");await this.ensure(),this.running=!0;let r=this.worker;return new Promise((s,i)=>{let o=!1,a=p=>{o||(o=!0,this.running=!1,this.inFlightCleanup=null,this.inFlightReject=null,d(),p())},c=p=>{p?.type==="result"?a(()=>s({snapshotId:p.snapshotId,parent:p.parent})):p?.type==="error"&&a(()=>i(new Error(p.message)))},l=()=>{this.worker===r&&(this.worker=null),r.terminate().catch(()=>{}),a(()=>i(Vn(e?.reason,"Snapshot cancelled")))},u=this.bindAbortSignal(e,l),d=()=>{r.off("message",c),u()};this.inFlightReject=p=>a(()=>i(p)),this.inFlightCleanup=d,r.on("message",c),r.postMessage({cmd:"snapshot",payload:t,excludeDirs:this.currentExcludeDirs()})})}dispose(){clearTimeout(this.debounceTimer),this.pending=null,this.running=!1;let e=Vn("snapshot worker disposed","Snapshot cancelled");for(let t of Array.from(this.pendingRejects))try{t(e)}catch{}if(this.pendingRejects.clear(),this.failInFlight(e),this.worker){try{this.worker.terminate().catch(()=>{})}catch{}this.worker=null}}}});var Fb={};Lt(Fb,{PositionPathCache:()=>Db,convertToPositionPath:()=>oL,generatePositionPath:()=>ha,getPathErrorType:()=>rL,hasPathError:()=>sL,isErrorRoot:()=>iL,resolvePositionPath:()=>Pn});function ha(n,e,t,r){let s=n.getSourceFile(),i=s.getFilePath(),o;if(e?o=ET.relative(e,i).replace(/\\/g,"/"):o=i,n===s)return`${o}#`;let a=n.getStart?.(!1)??n.getStart?.(),c=n.getEnd(),l=n.getKindName(),u=Pt.getAbbrev(l,r??"ts"),d=t?`${t}:${a}-${c}:${u}`:`${a}-${c}:${u}`;return`${o}#${d}`}function rL(n){return n.includes("#SyntaxError:")||n.includes("/SyntaxError:")?"SyntaxError":n.includes("#CompileError:")||n.includes("/CompileError:")?"CompileError":null}function sL(n){return n.includes("SyntaxError:")||n.includes("CompileError:")}function iL(n){if(!n.match(/(#|\/)(SyntaxError|CompileError):/))return!1;let t=n.split("/"),r=t.filter(s=>s.includes("SyntaxError:")||s.includes("CompileError:")).pop();return t[t.length-1]===r}function Pn(n,e,t){try{if(typeof n=="string"&&n.includes("@")){let f=n.length>80?n.slice(0,80)+"\u2026":n;console.log(`[resolvePositionPath] WARNING: nodePath contains hash suffix '@': ${f}`);try{console.log(new Error("[resolvePositionPath] caller stack").stack?.split(`
|
|
527
527
|
`).slice(0,6).join(`
|
|
528
528
|
`)||"")}catch{}}}catch{}if(!n)return e;let r=n;(n.startsWith("SyntaxError:")||n.startsWith("CompileError:"))&&(r=n.substring(n.indexOf(":")+1));let s=r.lastIndexOf(":");if(s===-1){console.log(`[resolvePositionPath] Invalid path format (missing kind): ${r}`);return}let i=r.substring(0,s),o=r.substring(s+1);if(o==="REF"){let[f,m]=i.split("-"),h=parseInt(f,10),g=parseInt(m,10);if(isNaN(h)||isNaN(g)){console.log(`[resolvePositionPath] Invalid REF position in path: ${n}`);return}let y=g-h,b=e.getDescendantAtStartWithWidth?.(h,y);if(b){let _=b.getStart?.(!1)??b.getStart?.(),R=b.getEnd?.();if(_===h&&R===g)return b}let S=e.getDescendantAtPos?.(h);for(;S;){let _=S.getStart?.(!1)??S.getStart?.(),R=S.getEnd?.();if(_===h&&R===g)return S;S=S.getParent?.()}console.log(`[resolvePositionPath] \u274C REF resolution failed for ${h}-${g}`);return}let a=null;try{a=Pt.getKindFromAbbrev(o,t??"ts")}catch{a=null}Ht()&&console.log(`[resolvePositionPath] Expanding abbreviation '${o}' to '${a}'`);let[c,l]=i.split("-"),u=parseInt(c,10),d=parseInt(l,10);if(isNaN(u)||isNaN(d)){console.log(`[resolvePositionPath] Invalid position in path: ${n}`);return}Ht()&&console.log(`[resolvePositionPath] Looking for node: start=${u}, end=${d}, kind=${a}`);let p;return e.forEachDescendant(f=>{let m=f.getStart?.(!1)??f.getStart?.(),h=f.getEnd(),g=f.getKindName(),y=Di(f).kind,b=g.toLowerCase(),S=y.toLowerCase(),_=a?a.toLowerCase():null;if(m===u&&h===d&&(!a||b===_||S===_||o==="REF"))return p=f,!0}),p}function oL(n,e){return ha(n)}var ET,Db,Hi=ne(()=>{"use strict";vs();su();ET=q(require("path"));gt();Db=class{constructor(){this.pathMap=new Map;this.positionToNode=new Map;this.sourceFile=null}computeAllPaths(e){this.clear(),this.sourceFile=e;let t=e.getFilePath();e.forEachDescendant(r=>{let s=r.getFullStart?.()??r.getStart(!1),i=r.getEnd(),o=r.getKindName(),a=`${t}#${s}-${i}:${o}`;this.pathMap.set(r,a),this.positionToNode.set(`${s}-${i}:${o}`,r)})}getPath(e){return this.pathMap.has(e)?this.pathMap.get(e):ha(e)}resolvePositionPath(e){return e?this.positionToNode.get(e):this.sourceFile||void 0}clear(){this.pathMap.clear(),this.positionToNode.clear(),this.sourceFile=null}size(){return this.pathMap.size}}});var Yr={};Lt(Yr,{logger:()=>Xe});function aL(){return new Date().toISOString()}function nm(n,e,t){let r=`[${aL()}] [${n.toUpperCase()}] ${e}`;if(!t)return r;try{return r+" "+JSON.stringify(t)}catch{return r}}var Xe,qn=ne(()=>{"use strict";Xe={debug:(n,e)=>{try{process.stderr.write(nm("debug",n,e)+`
|
|
529
529
|
`)}catch{}},info:(n,e)=>{try{process.stderr.write(nm("info",n,e)+`
|
|
@@ -533,8 +533,8 @@ ${l}`,hints:["Fix the SQL to use the correct table and column names shown above,
|
|
|
533
533
|
Expected: ${h}
|
|
534
534
|
Current: ${g}
|
|
535
535
|
${S}
|
|
536
|
-
Path: ${c}`)}Xe.debug("[resolvePathRef] Hash OK")}return u}static getNodePath(e,t){let r=ha(e,t);try{e.getKindName()==="VariableDeclaration"&&e.getText().includes("renamedParentUrl")&&Xe.debug(`[BaseExecutor.getNodePath] RUNTIME PATH for renamedParentUrl: ${r}`)}catch{}let s=ga(r,e.getText(),Ku(e));return`${r}${s}`}static getNodePathOnly(e,t){return ha(e,t)}static resolvePosition(e,t,r,s){if(Ht())try{console.log("[resolvePosition] Called with position:",JSON.stringify(e))}catch{}let i=o=>{if(o.includes("@"))throw new Error("Invalid path format: Path should not include hash (@). Provide the path without the hash and pass the hash separately as expectedHash parameter.");let a=s&&typeof s.expectedHash=="string"?s.expectedHash:void 0,c=!o.includes("#");if(!a&&!c)throw new Error(`Hash verification is mandatory for all operations. Provide expectedHash parameter for: ${o}`);if(o.includes("#")){if(a&&String(a).includes("@"))throw new Error("expectedHash must not include '@'. Pass the hash portion only (e.g., 'p12345678:c987654321').");let l=`@${a}`,u=fr(o,l);return this.resolvePathRef(u,r,t.projectRoot)}else{let l=pr.isAbsolute(o)?pr.resolve(o):pr.resolve(t.projectRoot,o),u=pr.resolve(t.projectRoot),d=pr.relative(u,l);if(d.startsWith("..")||pr.isAbsolute(d))throw new Error(`Target file '${o}' must reside within the project root.`);let p=d.split(pr.sep).join("/"),f=r.getSourceFile(l)||r.getSourceFile(p);if(!f&&Ob.default.existsSync(l)&&(f=r.addSourceFileAtPath(l)),!f)throw new Error(`Source file not found: ${p}`);let m=this.getNodePath(f,t.projectRoot),h=f.getText(),g=et(m,h);if(a&&String(a).includes("@"))throw new Error("expectedHash must not include '@'. Pass the hash portion only (e.g., 'p12345678:c987654321').");if(a){let y=`@${a}`;if(g!==y)throw new Error(`Hash mismatch for file ${pr}. Expected: ${g}, Got: ${y}. The file has been modified since your reference was created. Use find-nodes scoped to this file and request include.self to get the current file hash.`)}return f}};try{let o=e;typeof o=="string"&&(o={end:o});let a=s?.resolvedNodes?.anchor,c=l=>{if(!s?.expectedHash)return;if(String(s.expectedHash).includes("@"))throw new Error("expectedHash must not include '@'. Pass the hash portion only (e.g., 'p12345678:c987654321').");let d=(s.expectedHash.startsWith("@")?s.expectedHash:`@${s.expectedHash}`).slice(1),f=this.getNodePath(l,t.projectRoot).split("@")[1];if(f!==d)throw new Error(`Hash mismatch for anchor. Expected: @${d}, Current: @${f}. Target changed since selection.`)};if("before"in o){let l=a??i(o.before);if(!l)return{error:`Reference node not found: ${o.before}. The path may be stale. Re-run find-nodes to refresh the target, then retry with the new path and expectedHash.`,error_code:"resolve_failed"};a&&c(l);let u=l.getParent();return u?{parent:u,index:l.getChildIndex(),anchor:"before"}:{error:"Reference node has no parent"}}if("after"in o){let l=a??i(o.after);if(!l)return{error:`Reference node not found: ${o.after}. The path may be stale. Re-run find-nodes to refresh the target, then retry with the new path and expectedHash.`,error_code:"resolve_failed"};a&&c(l);let u=l.getParent();return u?{parent:u,index:l.getChildIndex()+1,anchor:"after"}:{error:"Reference node has no parent"}}if("start"in o){let l=a??i(o.start);if(!l)return{error:`Container not found: ${o.start}. Parent container path is stale or invalid. Re-run find-nodes for the container (e.g., class/function), then retry with the literal path and expectedHash.`,error_code:"resolve_failed"};a&&c(l);try{let u=l.getBody?.();u&&sn.Node.isBlock(u)&&(l=u)}catch(u){console.log("[AtomicBase] getBody failed",String(u?.message||u))}return{parent:l,index:0,anchor:"start"}}if("end"in o){let l=a??i(o.end);if(!l)return{error:`Container not found: ${o.end}. Parent container path is stale or invalid. Re-run find-nodes for the container (e.g., class/function), then retry with the literal path and expectedHash.`,error_code:"resolve_failed"};a&&c(l);try{let d=l.getBody?.();d&&sn.Node.isBlock(d)&&(l=d)}catch(d){console.log("[AtomicBase] getBody failed",String(d?.message||d))}let u=this.getStatements(l);return{parent:l,index:u.length,anchor:"end"}}return{error:"Invalid position specification"}}catch(o){return{error:o.message}}}static getStatements(e){if(sn.Node.isSourceFile(e)||sn.Node.isBlock(e))return e.getStatements();if(sn.Node.isFunctionDeclaration(e)||sn.Node.isMethodDeclaration(e)||sn.Node.isArrowFunction(e)||sn.Node.isFunctionExpression(e)){let t=e.getBody();if(t&&sn.Node.isBlock(t))return t.getStatements()}if(sn.Node.isClassDeclaration(e))return e.getMembers();try{if(sn.Node.isInterfaceDeclaration?.(e))return e.getMembers?.()||[]}catch(t){console.log("[AtomicBase] interface member access failed",String(t?.message||t))}if(sn.Node.isIfStatement(e)){let t=e.getThenStatement();if(sn.Node.isBlock(t))return t.getStatements()}if(sn.Node.isTryStatement(e))return e.getTryBlock().getStatements();if(sn.Node.isCatchClause(e))return e.getBlock().getStatements();if(sn.Node.isForStatement(e)||sn.Node.isWhileStatement(e)||sn.Node.isDoStatement(e)||sn.Node.isForOfStatement(e)||sn.Node.isForInStatement(e)){let t=e.getStatement();if(t&&sn.Node.isBlock(t))return t.getStatements()}return sn.Node.isSwitchStatement(e)?e.getClauses():sn.Node.isCaseClause(e)||sn.Node.isDefaultClause(e)?e.getStatements():e.getChildren()}static createResult(e,t,r,s){if(!e||!t)return{success:e,error:"Failed to create node"};let i=ns(t,s);return{success:!0,created:{node:i.ref,path:i.path,hash:i.hash,ref:i.ref,self:i.self,before:{before:i.path},after:{after:i.path},...r}}}}});var AT={};Lt(AT,{buildHashStructuralPath:()=>IT,buildNodeRef:()=>ns,combinePathAndHash:()=>fr,compareHashes:()=>on,ensureSingleHash:()=>pL,findFirstDifference:()=>uL,generateEnhancedHash:()=>et,generateNodePathHash:()=>ga,getNodeContentSignature:()=>lL,getNodeHashIdentity:()=>Ku,getNodeReference:()=>dL,initializeXXHash:()=>jb,normalizeHashIdentity:()=>im,packageContentForResponse:()=>Bc,parseHash:()=>zc,splitPathAndHash:()=>
|
|
537
|
-
... [truncated]`,contentLength:n.length,contentTruncated:!0,truncationType:"FROM_START"}}function ns(n,e){let t=$b(n,e),{path:r}=
|
|
536
|
+
Path: ${c}`)}Xe.debug("[resolvePathRef] Hash OK")}return u}static getNodePath(e,t){let r=ha(e,t);try{e.getKindName()==="VariableDeclaration"&&e.getText().includes("renamedParentUrl")&&Xe.debug(`[BaseExecutor.getNodePath] RUNTIME PATH for renamedParentUrl: ${r}`)}catch{}let s=ga(r,e.getText(),Ku(e));return`${r}${s}`}static getNodePathOnly(e,t){return ha(e,t)}static resolvePosition(e,t,r,s){if(Ht())try{console.log("[resolvePosition] Called with position:",JSON.stringify(e))}catch{}let i=o=>{if(o.includes("@"))throw new Error("Invalid path format: Path should not include hash (@). Provide the path without the hash and pass the hash separately as expectedHash parameter.");let a=s&&typeof s.expectedHash=="string"?s.expectedHash:void 0,c=!o.includes("#");if(!a&&!c)throw new Error(`Hash verification is mandatory for all operations. Provide expectedHash parameter for: ${o}`);if(o.includes("#")){if(a&&String(a).includes("@"))throw new Error("expectedHash must not include '@'. Pass the hash portion only (e.g., 'p12345678:c987654321').");let l=`@${a}`,u=fr(o,l);return this.resolvePathRef(u,r,t.projectRoot)}else{let l=pr.isAbsolute(o)?pr.resolve(o):pr.resolve(t.projectRoot,o),u=pr.resolve(t.projectRoot),d=pr.relative(u,l);if(d.startsWith("..")||pr.isAbsolute(d))throw new Error(`Target file '${o}' must reside within the project root.`);let p=d.split(pr.sep).join("/"),f=r.getSourceFile(l)||r.getSourceFile(p);if(!f&&Ob.default.existsSync(l)&&(f=r.addSourceFileAtPath(l)),!f)throw new Error(`Source file not found: ${p}`);let m=this.getNodePath(f,t.projectRoot),h=f.getText(),g=et(m,h);if(a&&String(a).includes("@"))throw new Error("expectedHash must not include '@'. Pass the hash portion only (e.g., 'p12345678:c987654321').");if(a){let y=`@${a}`;if(g!==y)throw new Error(`Hash mismatch for file ${pr}. Expected: ${g}, Got: ${y}. The file has been modified since your reference was created. Use find-nodes scoped to this file and request include.self to get the current file hash.`)}return f}};try{let o=e;typeof o=="string"&&(o={end:o});let a=s?.resolvedNodes?.anchor,c=l=>{if(!s?.expectedHash)return;if(String(s.expectedHash).includes("@"))throw new Error("expectedHash must not include '@'. Pass the hash portion only (e.g., 'p12345678:c987654321').");let d=(s.expectedHash.startsWith("@")?s.expectedHash:`@${s.expectedHash}`).slice(1),f=this.getNodePath(l,t.projectRoot).split("@")[1];if(f!==d)throw new Error(`Hash mismatch for anchor. Expected: @${d}, Current: @${f}. Target changed since selection.`)};if("before"in o){let l=a??i(o.before);if(!l)return{error:`Reference node not found: ${o.before}. The path may be stale. Re-run find-nodes to refresh the target, then retry with the new path and expectedHash.`,error_code:"resolve_failed"};a&&c(l);let u=l.getParent();return u?{parent:u,index:l.getChildIndex(),anchor:"before"}:{error:"Reference node has no parent"}}if("after"in o){let l=a??i(o.after);if(!l)return{error:`Reference node not found: ${o.after}. The path may be stale. Re-run find-nodes to refresh the target, then retry with the new path and expectedHash.`,error_code:"resolve_failed"};a&&c(l);let u=l.getParent();return u?{parent:u,index:l.getChildIndex()+1,anchor:"after"}:{error:"Reference node has no parent"}}if("start"in o){let l=a??i(o.start);if(!l)return{error:`Container not found: ${o.start}. Parent container path is stale or invalid. Re-run find-nodes for the container (e.g., class/function), then retry with the literal path and expectedHash.`,error_code:"resolve_failed"};a&&c(l);try{let u=l.getBody?.();u&&sn.Node.isBlock(u)&&(l=u)}catch(u){console.log("[AtomicBase] getBody failed",String(u?.message||u))}return{parent:l,index:0,anchor:"start"}}if("end"in o){let l=a??i(o.end);if(!l)return{error:`Container not found: ${o.end}. Parent container path is stale or invalid. Re-run find-nodes for the container (e.g., class/function), then retry with the literal path and expectedHash.`,error_code:"resolve_failed"};a&&c(l);try{let d=l.getBody?.();d&&sn.Node.isBlock(d)&&(l=d)}catch(d){console.log("[AtomicBase] getBody failed",String(d?.message||d))}let u=this.getStatements(l);return{parent:l,index:u.length,anchor:"end"}}return{error:"Invalid position specification"}}catch(o){return{error:o.message}}}static getStatements(e){if(sn.Node.isSourceFile(e)||sn.Node.isBlock(e))return e.getStatements();if(sn.Node.isFunctionDeclaration(e)||sn.Node.isMethodDeclaration(e)||sn.Node.isArrowFunction(e)||sn.Node.isFunctionExpression(e)){let t=e.getBody();if(t&&sn.Node.isBlock(t))return t.getStatements()}if(sn.Node.isClassDeclaration(e))return e.getMembers();try{if(sn.Node.isInterfaceDeclaration?.(e))return e.getMembers?.()||[]}catch(t){console.log("[AtomicBase] interface member access failed",String(t?.message||t))}if(sn.Node.isIfStatement(e)){let t=e.getThenStatement();if(sn.Node.isBlock(t))return t.getStatements()}if(sn.Node.isTryStatement(e))return e.getTryBlock().getStatements();if(sn.Node.isCatchClause(e))return e.getBlock().getStatements();if(sn.Node.isForStatement(e)||sn.Node.isWhileStatement(e)||sn.Node.isDoStatement(e)||sn.Node.isForOfStatement(e)||sn.Node.isForInStatement(e)){let t=e.getStatement();if(t&&sn.Node.isBlock(t))return t.getStatements()}return sn.Node.isSwitchStatement(e)?e.getClauses():sn.Node.isCaseClause(e)||sn.Node.isDefaultClause(e)?e.getStatements():e.getChildren()}static createResult(e,t,r,s){if(!e||!t)return{success:e,error:"Failed to create node"};let i=ns(t,s);return{success:!0,created:{node:i.ref,path:i.path,hash:i.hash,ref:i.ref,self:i.self,before:{before:i.path},after:{after:i.path},...r}}}}});var AT={};Lt(AT,{buildHashStructuralPath:()=>IT,buildNodeRef:()=>ns,combinePathAndHash:()=>fr,compareHashes:()=>on,ensureSingleHash:()=>pL,findFirstDifference:()=>uL,generateEnhancedHash:()=>et,generateNodePathHash:()=>ga,getNodeContentSignature:()=>lL,getNodeHashIdentity:()=>Ku,getNodeReference:()=>dL,initializeXXHash:()=>jb,normalizeHashIdentity:()=>im,packageContentForResponse:()=>Bc,parseHash:()=>zc,splitPathAndHash:()=>Lr});async function jb(){return ya||(ya=await CT.default(),sm[rm]=ya),ya}function cL(){return!ya&&sm[rm]&&(ya=sm[rm]??null),ya}function lL(n){return`${n.getKind()}:${n.getPos()}:${n.getEnd()}`}function et(n,e){let t=cL();if(!t)throw new Error("xxHash not initialized! Call initializeXXHash() before using hash functions.");let r=t.h64ToString(n).slice(0,8),s=t.h64ToString(e).slice(0,10);return`@p${r}:c${s}`}function im(n){if(typeof n!="string")return null;let e=n.trim();return e.length>0?e:null}function IT(n,e){let t=im(e);return t?`${n}::${t}`:n}function Ku(n){if(!n||typeof n!="object")return null;let e=im(n.__pandoHashIdentity);if(e)return e;let t=n.getPandoHashIdentity;if(typeof t=="function")try{return im(t.call(n))}catch{return null}return null}function ga(n,e,t){return et(IT(n,t),e)}function zc(n){if(!n)return null;let e=n.match(/^@p([a-f0-9]{8}):c([a-f0-9]{10})$/);return e?{full:n,pathHash:e[1],contentHash:e[2]}:null}function on(n,e){let t=zc(n),r=zc(e);if(!t||!r)return{type:"FORMAT",message:"Invalid hash format",requested:t,current:r};let s=t.pathHash===r.pathHash,i=t.contentHash===r.contentHash;return s&&i?{type:"MATCH",message:"Hashes match",requested:t,current:r}:!s&&!i?{type:"BOTH",message:"Both structure and content have changed",requested:t,current:r}:s?{type:"CONTENT",message:"Code has been edited",requested:t,current:r}:{type:"PATH",message:"Node has moved or been reindexed",requested:t,current:r}}function uL(n,e){let t=Math.min(n.length,e.length),r=-1;for(let p=0;p<t;p++)if(n[p]!==e[p]){r=p;break}if(r===-1&&n.length!==e.length&&(r=t),r===-1)return null;let s=30,i=Math.max(0,r-s),o=n.slice(i,r),a=r,c=r;for(;a<n.length&&c<e.length&&n[a]!==e[c];)a++,c++;let l=n.slice(r,Math.min(r+20,a)),u=e.slice(r,Math.min(r+20,c)),d=n.slice(a,Math.min(a+s,n.length));return{offset:r,before:o.length>20?"..."+o.slice(-20):o,old:l,new:u,after:d.length>20?d.slice(0,20)+"...":d}}function dL(n,e){let t=$b(n,e),s=Lr(t).path,i=et(s,n.getText());return fr(s,i)}function pL(n,e){let t=Lr(n),r=et(t.path,e);return fr(t.path,r)}function fr(n,e){let t=e.startsWith("@")?e:`@${e}`;if(!/^@p([a-f0-9]{8}):c([a-f0-9]{10})$/i.test(t))throw new Error(`Invalid hash format for combinePathAndHash: '${e}'. Expected '@pXXXXXXXX:cYYYYYYYYYY'.`);return`${n}${t}`}function Lr(n){if(!n)return{path:""};let e=n.lastIndexOf("@");return e>0&&n.includes("#")&&e>n.indexOf("#")?{path:n.substring(0,e),hash:n.substring(e+1)}:{path:n}}function Bc(n,e){if(n.length<=TT)return{content:n,contentLength:n.length,contentTruncated:!1,truncationType:"FULL"};if(e!==void 0&&e>=0){let t=Math.max(0,e-PT),r=Math.min(n.length,e+PT);return{content:(t>0?"...":"")+n.slice(t,r)+(r<n.length?"...":""),contentLength:n.length,contentTruncated:!0,truncationType:"FOCUSED_ON_CHANGE",focusRange:{start:t,end:r,changeOffset:e}}}return{content:n.slice(0,TT-100)+`
|
|
537
|
+
... [truncated]`,contentLength:n.length,contentTruncated:!0,truncationType:"FROM_START"}}function ns(n,e){let t=$b(n,e),{path:r}=Lr(t),s=ga(r,n.getText(),Ku(n)),i=fr(r,s),o=n.getKindName?.()||"Unknown",a=n&&typeof n.getName=="function"?n.getName():void 0,c=Bc(n.getText());return{path:r,hash:s,ref:i,self:{type:o,name:a,code:c}}}var CT,rm,sm,ya,TT,PT,Xn=ne(()=>{"use strict";CT=q(require("xxhash-wasm"));ts();rm="__pando_xxhash_instance__",sm=globalThis,ya=sm[rm]??null;TT=15e3,PT=200});function an(n,e){if(!n||typeof n!="string")return null;let t=n.lastIndexOf("@"),s=(t>=0?n.slice(0,t):n).split("#");if(s.length<2)return null;let i=s[0];if(!i)return null;let o=Lb.default.isAbsolute(i)?i:Lb.default.resolve(e,i),a=s[1];if(!a)return null;for(let h of fL)if(a.startsWith(h)){a=a.slice(h.length);break}let c=a.lastIndexOf(":");if(c===-1)return null;let l=a.slice(0,c),[u,d]=l.split("-"),p=Number(u),f=Number(d);if(!Number.isFinite(p)||!Number.isFinite(f))return null;let m=Bt(i);return{fileAbs:o,fileRel:i,start:p,end:f,lang:m}}function ba(n,e){let t=Math.max(0,Math.min(e,n.length)),r=0,s=0;for(let i=0;i<t;i+=1)n[i]===`
|
|
538
538
|
`&&(r+=1,s=i+1);return{line:r,character:t-s}}function _i(n,e){let t=Math.max(0,Math.min(e,Buffer.byteLength(n,"utf8")));return t===0?0:Buffer.from(n,"utf8").slice(0,t).toString("utf8").length}function MT(n){return!!n&&n!=="ts"&&n!=="js"&&n!=="csharp"}function rs(n,e,t){return MT(t)?_i(n,e):Math.max(0,Math.min(e,n.length))}function ss(n,e,t){let r=Buffer.from(n,"utf8"),s=Math.max(0,Math.min(e,r.length)),i=Math.max(s,Math.min(t,r.length));return r.slice(s,i).toString("utf8")}function qc(n,e,t){let r=rs(n,e.start,t),s=rs(n,e.end,t);return{start:r,end:Math.max(s,r)}}function Nt(n,e,t){return MT(t)?ss(n,e.start,e.end):n.slice(e.start,e.end)}function NT(n,e){let t=Math.max(0,e.line),r=0,s=0;for(;s<n.length&&r<t;){let i=n.indexOf(`
|
|
539
539
|
`,s);if(i===-1){s=n.length;break}s=i+1,r+=1}return Math.min(s+Math.max(0,e.character),n.length)}function Ys(n,e){let t=NT(n,e.start),r=NT(n,e.end);return{start:t,end:Math.max(r,t)}}function mL(n){let e=[],t=[...n];for(;t.length;){let r=t.pop();r&&(e.push(r),r.children&&r.children.length&&t.push(...r.children))}return e}function Pe(n){let e=Zu.default.readFileSync(n,"utf8");return e.charCodeAt(0)===65279?e.slice(1):e}function un(n,e){let r=(Zu.default.existsSync(n)?Zu.default.readFileSync(n,"utf8"):"").charCodeAt(0)===65279,s=e.charCodeAt(0)===65279?e:r?`\uFEFF${e}`:e;Zu.default.writeFileSync(n,s,"utf8")}function Hc(n,e,t,r){let s=mL(n),i=null;for(let o of s){let a=Ys(e,o.range);if(a.start===t&&a.end===r)return o;if(a.start<=t&&a.end>=r){let c=a.end-a.start;(!i||c<i.span)&&(i={symbol:o,span:c})}}return i?i.symbol:null}var Zu,Lb,fL,kr=ne(()=>{"use strict";Zu=q(require("fs")),Lb=q(require("path"));Bn();vs();fL=["SyntaxError:","CompileError:"]});function xo(n){let e=st(n);try{let r=om.default.readdirSync(e).filter(s=>/^\.pando-index-chunk-\d+\.db$/.test(s)).map(s=>Gu.default.join(e,s)).sort((s,i)=>Gu.default.basename(s).localeCompare(Gu.default.basename(i)));if(r.length>0)return r}catch{}return[Ln(n,0)]}function hL(n){if(!n)return null;try{let e=typeof n=="string"?JSON.parse(n):n;if(e&&typeof e=="object"&&typeof e.symbolKey=="string")return e.symbolKey}catch{}return null}function gL(n){if(!n)return null;try{let e=typeof n=="string"?JSON.parse(n):n;return e&&typeof e=="object"?e:null}catch{return null}}function DT(n,e){return{nodeId:n.node_id?String(n.node_id):null,name:n.name?String(n.name):null,fileId:typeof n.file_id=="number"?n.file_id:null,isExported:typeof n.is_exported=="number"?n.is_exported:null,symbolKey:hL(n.metadata)??(typeof n.symbol_key=="string"&&n.symbol_key?n.symbol_key:null),paramCount:typeof n.param_count=="number"?n.param_count:null,fileRel:typeof n.file_path=="string"&&n.file_path?String(n.file_path).replace(/\\/g,"/"):e.fileRel,kind:typeof n.kind=="string"?n.kind:null,metadata:gL(n.metadata),start:typeof n.start_pos=="number"?n.start_pos:e.start,end:typeof n.end_pos=="number"?n.end_pos:e.end}}function zb(n){return!n?.fileRel||!n.kind||!Number.isFinite(n.start)||!Number.isFinite(n.end)||n.end<n.start?null:`${n.fileRel}#${n.start}-${n.end}:${n.kind}`}function yL(n){return!!(n?.fileRel&&/\.(clj|cljc|cljs)$/i.test(n.fileRel))}function bL(n){return yL(n)&&typeof n?.symbolKey=="string"&&n.symbolKey.trim()?n.symbolKey.trim():null}function Wi(n,e,t){return ga(n,e,bL(t))}function SL(n,e){let t=e.trim();if(!t)return null;for(let r of xo(n))try{let s=new At(r,{readonly:!0});try{let i=s.prepare(`
|
|
540
540
|
SELECT CAST(n.id AS TEXT) AS node_id,
|
|
@@ -792,25 +792,25 @@ Path: ${c}`)}Xe.debug("[resolvePathRef] Hash OK")}return u}static getNodePath(e,
|
|
|
792
792
|
WHERE e.lang = 'clojure'
|
|
793
793
|
AND e.reexport_from = ?
|
|
794
794
|
AND rs.text = ?
|
|
795
|
-
`).all(o,a):[];for(let p of d){p.export_name&&t.names.add(String(p.export_name)),p.reexport_from&&t.namespaces.add(String(p.reexport_from));let f=typeof p.exporter_namespace=="string"?p.exporter_namespace.trim():"",m=typeof p.export_name=="string"?p.export_name.trim():"",h=f&&m?`${f}/${m}`:null;Qb(t,h)&&r.push(String(h)),Qb(t,p.exported_symbol_key??null)&&r.push(String(p.exported_symbol_key))}}catch{}finally{try{u?.close()}catch{}}}}return t}async function uP(n,e,t){let r=Yb(n,e);if(r.symbolKeys.size===0)return[];let s=Array.from(new Set((t||[]).map(u=>String(u||"").trim()).filter(Boolean))),i=new Mt(n),o=new Set;for(let u of r.symbolKeys)for(let d of i.findCandidateFilesForTargetSymbolKey(u))o.add(String(d||"").replace(/\\/g,"/"));for(let u of r.names)for(let d of i.findCandidateFilesForSymbol(u))o.add(String(d||"").replace(/\\/g,"/"));for(let u of r.namespaces)for(let d of Au(n,u)??[])o.add(String(d||"").replace(/\\/g,"/"));if(o.size===0)return[];let a=await rd(n,Array.from(o),{relTypes:s.length?s:void 0}),c=[],l=new Set;for(let u of a.rows){if(!YL(u,e,r))continue;let d=String(u.file_path||"").replace(/\\/g,"/");if(!d)continue;let p=String(u.ref_kind||"reference"),f=`${d}:${u.start_pos}:${u.end_pos}:${p}`;l.has(f)||(l.add(f),c.push({file_path:d,start_pos:Number(u.start_pos),end_pos:Number(u.end_pos),rel_type:p,ref_kind:typeof u.ref_kind=="string"?u.ref_kind:null,metadata:typeof u.metadata=="string"?u.metadata:null}))}return c}var eS=ne(()=>{"use strict";rn();Ns();zT();ki();sd();um();Vs()});function pP(n,e,t){return`${n}:${e}:${t}`}function ez(n){if(!n||typeof n!="object")return null;let e=n;for(let t of["before","after","start","end","bodyStartOf","bodyEndOf"]){let r=e[t];if(typeof r=="string"&&r.includes("#"))return r}return null}function tS(n){if(!n||typeof n!="object")return null;let e=n;for(let t of[e.path,e.of,e.to,ez(e.to)])if(typeof t=="string"&&t.includes("#"))return t;return null}function tz(n){switch(String(n||"").toLowerCase()){case"rename":case"find-references":case"find-callers":case"change-signature":return"canonical";default:return"exact"}}function fP(n,e){let t=Math.max(0,Math.min(e,n.length));return Buffer.byteLength(n.slice(0,t),"utf8")}function mP(n,e){if(!e?.name)return null;let t=Number(e.start),r=Number(e.end);if(!Number.isFinite(t)||!Number.isFinite(r)||r<t)return null;let s=ss(n,t,r);if(!s)return null;let i=e.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=[new RegExp(`^\\s*\\((?:clojure\\.core\\/)?[A-Za-z0-9*+!_?.<>=/-]+\\s+(${i})(?=[\\s\\[\\](){}]|$)`),new RegExp(`(^|[^A-Za-z0-9_\\-.\\/])(${i})(?=[^A-Za-z0-9_\\-.\\/]|$)`)];for(let a of o){let c=s.match(a);if(!c||c.index==null)continue;let l=c[1]===e.name?c[1]:c[2],u=c[0].lastIndexOf(l);if(u<0)continue;let d=c.index+u,p=d+l.length,f=t+Buffer.byteLength(s.slice(0,d),"utf8"),m=t+Buffer.byteLength(s.slice(0,p),"utf8");if(f>=t&&m<=r)return{start:f,end:m}}return null}function nz(n,e,t,r){if(!r||!Number.isFinite(e)||!Number.isFinite(t)||t<e)return null;let s=/[A-Za-z0-9*+!_?.<>=-]/,i=e,o=t;for(;i>0;){let l=n[i-1];if(l==="/"||s.test(l)){i-=1;continue}break}for(;o<n.length;){let l=n[o];if(l==="/"||s.test(l)){o+=1;continue}break}let a=n.slice(i,o);if(!a||!a.includes(r))return null;let c=0;for(;c<a.length;){let l=a.indexOf(r,c);if(l<0)break;let u=l>0?a[l-1]:"",d=l+r.length,p=d<a.length?a[d]:"",f=!u||u==="/"||!s.test(u),m=!p||!s.test(p)&&p!=="/";if(f&&m)return{start:i+l,end:i+l+r.length};c=l+r.length}return null}function hP(n,e,t,r){if(!r||!Number.isFinite(e)||!Number.isFinite(t)||t<e)return null;let s=_i(n,e),i=_i(n,t),o=nz(n,s,i,r);return o?{start:fP(n,o.start),end:fP(n,o.end)}:null}async function Rm(n,e,t,r){let s=Pe(t.fileAbs),i=ss(s,t.start,t.end),o=r.startsWith("@")?r:`@${r}`,a=Sn(n.projectRoot,t.fileAbs,t.start,t.end,{plainPath:e,expectedHash:o,content:i});if(!a)throw new Error("Ambiguous Clojure target identity. Re-run find-nodes to refresh the target hash.");let c=Wi(e,i,a),l=on(o,c);if(l.type!=="MATCH")throw new Error(`Hash mismatch (${l.type}). Re-run find-nodes to refresh the target.`);let u=mP(s,a)??hP(s,t.start,t.end,a?.name||"")??{start:t.start,end:t.end};return{content:s,declarationNameSpan:u,target:a,requestedTarget:a,fileAbs:t.fileAbs,relFile:id.default.relative(n.projectRoot,t.fileAbs).replace(/\\/g,"/"),nodePath:e,currentHash:c,wasCanonicalized:!1}}async function rz(n,e,t,r){let s=await Rm(n,e,t,r),i=FT(n.projectRoot,s.target);if(!i)return s;let o=zb(i)??s.nodePath,a=id.default.resolve(n.projectRoot,i.fileRel),c=Pe(a),l=ss(c,i.start,i.end),u=Wi(o,l,i),d=mP(c,i)??hP(c,i.start,i.end,i?.name||"")??{start:i.start,end:i.end};return{content:c,declarationNameSpan:d,target:i,requestedTarget:s.target,fileAbs:a,relFile:i.fileRel,nodePath:o,currentHash:u,wasCanonicalized:i.fileRel!==s.relFile||i.start!==s.target?.start||i.end!==s.target?.end||i.symbolKey!==s.target?.symbolKey}}async function Ei(n,e,t){if(!e||typeof e!="object")return null;let r=tS(e);if(!r)return null;let s=typeof e.expectedHash=="string"?e.expectedHash.trim():"";if(!s||s.includes("@"))return null;let i=an(r,n.projectRoot);if(!i||i.lang!=="clojure")return null;let o=tz(t??e.op),a=n.getOperationMetadata(e,dP),c=a?.[o];if(c&&c.path===r&&c.expectedHash===s)return c;let l=o==="canonical"?await rz(n,r,i,s):await Rm(n,r,i,s),u={mode:o,path:r,expectedHash:s,parsed:i,resolved:l};return n.setOperationMetadata(e,dP,{...a||{},[o]:u}),u}async function gP(n,e,t,r){let s=[],i=new Set;if(t){let a=pP(e.fileAbs,e.declarationNameSpan.start,e.declarationNameSpan.end);i.add(a),s.push({absFile:e.fileAbs,relFile:e.relFile,start:e.declarationNameSpan.start,end:e.declarationNameSpan.end,isDefinition:!0,sourceToken:ss(e.content,e.declarationNameSpan.start,e.declarationNameSpan.end),relationshipType:"reference",metadata:null})}let o=await uP(n.projectRoot,e.target,r&&r!=="reference"?[r]:null);for(let a of o){if(r==="call"&&!am(a))continue;let c=$T(a),l=c==="call"?cm(a,a.start_pos,a.end_pos,"head"):{start:a.start_pos,end:a.end_pos},u=id.default.isAbsolute(a.file_path)?a.file_path:id.default.join(n.projectRoot,a.file_path),d=pP(u,l.start,l.end);if(i.has(d))continue;let p=Pe(u),f=ss(p,l.start,l.end);i.add(d),s.push({absFile:u,relFile:a.file_path,start:l.start,end:l.end,isDefinition:!1,sourceToken:f,relationshipType:c,metadata:a.metadata??null})}return s}var id,dP,ka=ne(()=>{"use strict";id=q(require("path"));Xn();um();eS();Ns();kr();dP=Symbol("pando.clojureOperationTargetResolution")});function sz(n){return`PANDO_${n.toUpperCase()}_INDEXER_CMD`}function yP(n){return process.env[sz(n)]||`pando-${n}-indexer`}var bP=ne(()=>{"use strict"});function Kc(n){if(!n)return null;let e=n;(e.startsWith("SyntaxError:")||e.startsWith("CompileError:"))&&(e=e.substring(e.indexOf(":")+1));let t=e.lastIndexOf(":"),r=t>=0?e.slice(0,t):e,[s,i]=r.split("-"),o=Number(s),a=Number(i);return!Number.isFinite(o)||!Number.isFinite(a)||a<o?null:{start:o,end:a}}function Br(n,e){return n&&(nS.default.isAbsolute(n)?nS.default.relative(e,n).replace(/\\/g,"/"):n.replace(/\\/g,"/"))}function xP(n,e,t,r){let s=yP(r),o=(0,SP.spawnSync)(s,["--resolve","--file",e,"--root",n,"--lang",r,"--nodePath",t],{encoding:"utf8"});if(o.error)return null;let a=(o.stdout||"").trim();if(!a)return null;try{let c=JSON.parse(a);return!c||c.error||typeof c.start!="number"||typeof c.end!="number"?null:c}catch{return null}}var SP,nS,od=ne(()=>{"use strict";SP=require("child_process"),nS=q(require("path"));bP()});async function os(n,e,t,r){let s=Gs(r);return s?.resolveSpan?await s.resolveSpan(n,e,t):xP(n,e,t,r)}var Ea=ne(()=>{"use strict";Bn();od()});async function qr(n,e){let t=an(e,n);if(!t?.fileAbs||!_P.default.existsSync(t.fileAbs))return null;if(t.lang&&t.lang!=="ts"&&t.lang!=="js"){let s=e.split("#")[1];if(s)try{let o=await os(n,t.fileAbs,s,t.lang);if(o?.text&&typeof o.text=="string")return{parsed:t,text:o.text};if(o){let a=Pe(t.fileAbs);return{parsed:t,text:Nt(a,{start:o.start,end:o.end},t.lang)}}}catch{}let i=Pe(t.fileAbs);return{parsed:t,text:Nt(i,{start:t.start,end:t.end},t.lang)}}let r=Pe(t.fileAbs);return{parsed:t,text:r.slice(t.start,t.end)}}var _P,Zc=ne(()=>{"use strict";_P=q(require("fs"));kr();Ea()});function iz(n){let e=n.getParent(),t=()=>!!n.getFirstAncestor(a=>{let c=a.getKind();return c===Xt.SyntaxKind.ImportSpecifier||c===Xt.SyntaxKind.ImportClause||c===Xt.SyntaxKind.NamespaceImport||c===Xt.SyntaxKind.ImportEqualsDeclaration||c===Xt.SyntaxKind.ImportDeclaration}),r=()=>!!n.getFirstAncestor(a=>{let c=a.getKind();return c===Xt.SyntaxKind.ExportSpecifier||c===Xt.SyntaxKind.ExportAssignment||c===Xt.SyntaxKind.ExportDeclaration});if(t())return"import";if(r())return"export";if(e){if(e.getKind()===Xt.SyntaxKind.CallExpression&&e.getExpression?.()===n)return"call";if(e.getKind()===Xt.SyntaxKind.NewExpression&&e.getExpression?.()===n)return"new";if(e.getKind()===Xt.SyntaxKind.PropertyAccessExpression){let a=e.getParent();if(a?.getKind()===Xt.SyntaxKind.CallExpression&&a.getExpression?.()===e)return"call";if(a?.getKind()===Xt.SyntaxKind.NewExpression&&a.getExpression?.()===e)return"new"}}let s=n.getFirstAncestorByKind(Xt.SyntaxKind.HeritageClause);if(s){let a=s.getToken?.();if(a===Xt.SyntaxKind.ExtendsKeyword)return"extends";if(a===Xt.SyntaxKind.ImplementsKeyword)return"implements"}let i=[Xt.SyntaxKind.TypeReference,Xt.SyntaxKind.ExpressionWithTypeArguments,Xt.SyntaxKind.TypeQuery,Xt.SyntaxKind.TypeLiteral,Xt.SyntaxKind.TypeAliasDeclaration,Xt.SyntaxKind.InterfaceDeclaration,Xt.SyntaxKind.TypeAssertionExpression,Xt.SyntaxKind.AsExpression,Xt.SyntaxKind.ImportType];return n.getFirstAncestor(a=>i.includes(a.getKind()))?"type":"reference"}function rS(n,e,t,r){let s=r-t,i=n.getSourceFile(e);if(!i)try{i=n.addSourceFileAtPathIfExists?.(e)??n.addSourceFileAtPath(e)}catch{}let o;if(i&&(o=i.getDescendantAtStartWithWidth?.(t,s),o||(o=i.getDescendantAtPos(t)),o&&o.getStart(!1)!==t)){let u=o.getFirstDescendant(d=>d.getStart?.(!1)===t&&d.getEnd?.()===r);u&&(o=u)}let a,c,l="reference";if(o){try{a=o.getText()}catch{}try{c=o.getKindName()}catch{}try{l=iz(o)}catch{}}else try{a=wP.default.readFileSync(e,"utf8").slice(t,r)}catch{}return!c&&a&&(c="Unknown"),{node:o,sourceToken:a,sourceKind:c,relationshipType:l}}var wP,Xt,vP=ne(()=>{"use strict";wP=q(require("fs")),Xt=require("ts-morph")});function sS(n,e){Ht()&&X("ClojureTrace",n,e)}function iS(n,e){X("FindReferences",n,e)}function oz(){return["python3","python","python2"]}function ad(n,e,t,r,s){if(!s||!/^[A-Za-z_][A-Za-z0-9_]*$/.test(s))return{start:t,end:r};try{let i=An.default.resolve(n,e),o=Pe(i),a="[A-Za-z0-9_]",c=new RegExp(`(?<!${a})${lz(s)}(?!${a})`,"g"),l=cz(o,t,r);for(let u of l){let d=o.slice(u.start,u.end),p=Array.from(d.matchAll(c));if(p.length!==1||p[0].index==null)continue;let f=u.start+p[0].index;return{start:f,end:f+s.length}}for(let u of l){let d=az(o,u,s,c);if(d)return d}return{start:t,end:r}}catch{return{start:t,end:r}}}function az(n,e,t,r){let i=Math.max(0,e.start-256),o=Math.min(n.length,e.end+256),a=n.slice(i,o),c=Array.from(a.matchAll(r)).filter(d=>d.index!=null);if(c.length===0)return null;c.sort((d,p)=>{let f=i+(d.index??0),m=i+(p.index??0);return Math.abs(f-e.start)-Math.abs(m-e.start)});let l=c[0],u=i+(l.index??0);return{start:u,end:u+t.length}}function cz(n,e,t){let r=[{start:e,end:t}],s=n.startsWith("#!")?n.match(/^#![^\r\n]*(?:\r\n|\n|\r)?/):null;if(s?.[0]){let i=s[0].length;r.push({start:e+i,end:t+i})}return r}function lz(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function uz(n,e){return An.default.isAbsolute(n)?An.default.resolve(n):An.default.resolve(e,n)}function RP(n){let e=n;if(typeof e.getNameNode=="function"){let t=e.getNameNode();if(t)return t.getStart()}if(typeof e.getName=="function"){let t=e.getName();if(t&&typeof t=="string"){let r=n.getFirstDescendant(s=>s.getText?.()===t);if(r)return r.getStart()}}return null}function dz(n){let e=RP(n);if(e!=null)return{node:n,position:e};let t=n;for(;t&&t.getKind()!==km.SyntaxKind.SourceFile&&(t=t.getParent(),!(!t||t.getKind()===km.SyntaxKind.SourceFile));){let s=RP(t);if(s!=null)return{node:t,position:s,warning:`Target ${n.getKindName()} has no direct name; using ancestor ${t.getKindName()} for reference lookup.`}}let r=n.getFirstDescendantByKind(km.SyntaxKind.Identifier);return r?{node:n,position:r.getStart(!1),warning:`Target ${n.getKindName()} has no direct name; using first identifier token for reference lookup.`}:null}function pz(n,e){return n.analysis||(n.analysis=rS(e,n.absFile,n.start,n.end)),n.analysis}function cd(n){if(typeof n!="string")return null;let e=n.trim().toLowerCase();switch(e){case"call":case"new":case"type":case"reference":case"import":case"export":case"extends":case"implements":return e;default:return null}}function fz(n){let e=typeof n=="string"?n.trim().toLowerCase():"";switch(e){case"call":case"new":case"type":return e;default:return"reference"}}function oS(n,e){if(!n.length)return;let t=(e?.direction??"asc").toLowerCase()==="desc"?-1:1,r=e?.by??"file";n.sort((s,i)=>{if(r==="start")return(s.start-i.start||s.relFile.localeCompare(i.relFile))*t;let o=s.relFile.localeCompare(i.relFile);if(o!==0)return o*t;let a=s.start-i.start;return a!==0?a*t:(s.end-i.end)*t})}var An,kP,km,EP,Ta,aS=ne(()=>{"use strict";An=q(require("path")),kP=require("child_process"),km=require("ts-morph"),EP=require("url");ts();qn();gt();vs();Xn();Vt();rn();ki();uu();Ns();ka();kr();Zc();vP();sd();Ta=class{static{this.DEFAULT_LIMIT=10}static{this.MAX_LIMIT=100}static buildReferenceRelTypeFilter(e){let t=cd(e);return t&&t!=="reference"?{clause:" AND k.text = ?",params:[t]}:{clause:"",params:[]}}static buildEmptyResult(e,t){let r=[],{limit:s,offset:i}=this.normalizePagination(e,0,r);return t&&r.push(t),{success:!0,results:[],page:{limit:s,offset:i,hasMore:!1,totalCount:0},warnings:r.length?r:void 0}}static normalizePagination(e,t,r){if(e.__collectAll===!0)return{limit:t,offset:0,hasMore:!1,collectAll:!0};let s=Number(e.limit??this.DEFAULT_LIMIT),i=Number(e.offset??0),o=Math.max(1,Math.min(this.MAX_LIMIT,Number.isFinite(s)?s:this.DEFAULT_LIMIT)),a=Math.max(0,Number.isFinite(i)?i:0);return s!==o&&r.push("limit capped to 100"),i!==a&&r.push("offset adjusted to be >= 0"),{limit:o,offset:a,hasMore:a+o<t,collectAll:!1}}static mergeDbReferenceRows(e,t){if(!t.length)return e;let r=e.length?[...e]:[],s=new Set(r.map(i=>`${i.file_path}:${i.start_pos}:${i.end_pos}`));for(let i of t){let o=`${i.file_path}:${i.start_pos}:${i.end_pos}`;s.has(o)||(s.add(o),r.push(i))}return r}static async collectDbReferenceResults(e,t,r,s,i,o=xo(e.projectRoot)){let a=[],c=new Set,l=new Mt(e.projectRoot),u=s.map(g=>String(g||"").trim()).filter(Boolean),d=new Set,p=!1;if(t.symbolKey)for(let g of l.findCandidateFilesForTargetSymbolKey(t.symbolKey))d.add(g),p=!0;if(!p&&t.sameFileName)for(let g of l.findCandidateFilesForSymbol(t.sameFileName))d.add(g);t.sameFileRel&&d.add(t.sameFileRel);let f=i?Math.max(1,i.offset+i.limit+1):void 0,m=await vm(e.projectRoot,Array.from(d).sort((g,y)=>g.localeCompare(y)),{symbolKey:t.symbolKey,nodeId:t.nodeId==null?null:String(t.nodeId),fileRel:t.sameFileRel,name:t.sameFileName,paramCount:t.paramCount??null,allowImplicitReceiverArity:t.allowImplicitReceiverArity===!0},{relTypes:u,maxMatches:f}),h=m.rows.map(g=>({file_path:g.file_path,start_pos:g.start_pos,end_pos:g.end_pos,rel_type:g.ref_kind}));for(let g of h||[]){let y=String(g.file_path||"");if(!y)continue;let b=t.narrowName?ad(e.projectRoot,y,g.start_pos,g.end_pos,t.narrowName):{start:g.start_pos,end:g.end_pos},S=`${y}:${b.start}:${b.end}`;c.has(S)||(c.add(S),a.push({id:`${y}#${b.start}-${b.end}:REF`,file_path:y,start:b.start,end:b.end,sourceToken:void 0,sourceKind:void 0,relationshipType:g.rel_type||"reference",isDefinition:!1}))}return{results:a,truncated:m.truncated}}static buildDbReferenceResult(e,t,r,s,i=!1,o=!1){if(t.length===0&&(!i||!e.includeDeclaration||!s))return null;if(e.includeDeclaration&&s){let m=`${s.fileRel}:${s.start}:${s.end}`,h=t.findIndex(y=>String(y.file_path||"")===s.fileRel&&Number(y.start)===s.start&&Number(y.end)===s.end),g={id:`${s.fileRel}#${s.start}-${s.end}:REF`,file_path:s.fileRel,start:s.start,end:s.end,sourceToken:void 0,sourceKind:void 0,relationshipType:"reference",isDefinition:!0};h>=0&&t.splice(h,1),t.some(y=>`${y.file_path}:${y.start}:${y.end}`===m)||t.unshift(g)}if(t.length){let m=(e.sort?.direction??"asc").toLowerCase()==="desc"?-1:1,h=e.sort?.by??"file";t.sort((g,y)=>{if(h==="start")return(g.start-y.start||String(g.file_path).localeCompare(String(y.file_path)))*m;let b=String(g.file_path).localeCompare(String(y.file_path));if(b!==0)return b*m;let S=g.start-y.start;return S!==0?S*m:(g.end-y.end)*m})}let a=o?void 0:t.length,{limit:c,offset:l,hasMore:u,collectAll:d}=this.normalizePagination(e,a??t.length,r);return{success:!0,results:d?t:t.slice(l,l+c),page:{limit:c,offset:l,hasMore:o?!0:u,...a!==void 0&&{totalCount:a}},warnings:r.length?r:void 0}}static async execute(e,t,r){try{if(!e?.to)return{success:!1,error:'Missing required parameter "to" (node path).'};if(typeof e.to!="string"||e.to.includes("@"))return{success:!1,error:'Parameter "to" must be the node path without the @hash suffix. Provide the hash via expectedHash.'};let s=e.expectedHash;if(typeof s!="string"||!s.trim()||s.includes("@"))return{success:!1,error:'Parameter "expectedHash" is required and must omit the @ prefix.'};let i=s.trim(),o=an(e.to,t.projectRoot),a=o?.lang;if(a&&a!=="ts"&&a!=="js"){if(a==="clojure"){sS("find-references.execute clojure entry",{target:e.to,projectRoot:t.projectRoot,includeDeclaration:!!e.includeDeclaration});try{let k=await this.executeViaClojureIndexed(e,t,o,i);return k?.success?k:{success:!1,error:`Clojure find-references failed.${k?.error?` Reason: ${k.error}`:""}`,error_code:"reference_lookup_failed"}}catch(k){return{success:!1,error:`Clojure find-references failed. ${k?.message||String(k)}`,error_code:"reference_lookup_failed"}}}if(!(e.forceLsp===!0))if(a==="csharp"){let k=await this.executeViaCsharpQuery(e,t,o,i);if(k)return await this.writeResolverCacheEntry(t,o,e.to),k}else{let k=await this.executeViaDbNonTs(e,t,o);if(k)return k;let $=await this.executeViaResolverCache(e,t,o);if($)return $;if(a==="python"){let L=await this.executeViaPythonResolver(e,t,o);if(L)return await this.writeResolverCacheEntry(t,o,e.to),L}}if(!t.lsp){Xe.warn("[find-references] non-TS request has no LSP host configured",{lang:a,target:e.to,projectRoot:t.projectRoot,hint:"CLI runners construct CodeEngine without lspHost; use extension runtime or inject a host via CodeEngineFactory options."});try{console.warn(`[find-references][diag] no LSP host configured (lang=${a}, target=${e.to})`)}catch{}return this.buildEmptyResult(e,`${a} LSP not available (no LSP host configured); returning empty results.`)}try{let k=await this.executeViaLsp(e,t,o,i);return k?.success?(await this.writeResolverCacheEntry(t,o,e.to),k):this.buildEmptyResult(e,`${a} LSP failed; returning empty results. ${k?.error?`Reason: ${k.error}`:""}`.trim())}catch(k){return this.buildEmptyResult(e,`${a} LSP failed; returning empty results. ${k?.message||String(k)}`)}}if(e.asOf)return{success:!1,error:"find-references no longer supports snapshot (asOf) queries. Re-run the request against the live workspace or restore the snapshot first."};let c=t.queries;if(!c?.findRenameLocations)return{success:!1,error:"find-references requires an active TypeScript language service session."};let l=[],u=!!e.includeDeclaration,d=cd(e.relType),p=`${e.to}@${i}`,f=es(p,r,t.projectRoot);if(!f)return{success:!1,error:"Target declaration not found. Refresh the path/hash via find-nodes and retry."};let m=dz(f);if(!m)return{success:!1,error:`Cannot determine declaration name position for ${f.getKindName()}.`};m.warning&&l.push(m.warning);let h=m.node,g=m.position,y=h.getSourceFile().getFilePath();try{t.ls.ensureInProgram(y)}catch(I){Xe.warn("[find-references] ensureInProgram failed for declaration file",{file:y,message:I?.message||String(I)})}let b=!!e.includeStrings,S=!!e.includeComments,_=[];try{_=c.findRenameLocations(y,g,b,S,{providePrefixAndSuffixTextForRename:!0})||[]}catch(I){return{success:!1,error:`TypeScript findRenameLocations failed: ${I?.message||I}`}}let R=new Set,E=new Set,T=[],x=g,w=(()=>{try{let I=h.getNameNode?.();if(I)return I.getEnd()-I.getStart()}catch{}})();for(let I of _){if(!I?.textSpan||!I.fileName)continue;let k=Number(I.textSpan.start),$=Number(I.textSpan.length);if(!Number.isFinite(k)||!Number.isFinite($)||$<0)continue;let L=uz(I.fileName,t.projectRoot),j=`${L}:${k}:${$}:${I.prefixText??""}:${I.suffixText??""}`;if(R.has(j))continue;if(R.add(j),!E.has(L)){try{t.ls.ensureInProgram(L)}catch(G){Xe.warn("[find-references] ensureInProgram failed for reference file",{file:L,message:G?.message||String(G)})}E.add(L)}let z=!!I.isDefinition||L===y&&k===x&&(w===void 0||$===w);if(!u&&z)continue;let U=k+$,K;d&&(K=rS(r,L,k,U),K.relationshipType!==d)||T.push({absFile:L,relFile:An.default.relative(t.projectRoot,L).replace(/\\/g,"/"),start:k,end:U,isDefinition:z,analysis:K,prefixText:I.prefixText??void 0,suffixText:I.suffixText??void 0})}let D=Array.isArray(e.dbCandidateFiles)?e.dbCandidateFiles:null,F=e.dbCandidateFilesComplete===!0;if(D&&F){let I=new Set(D.map(k=>k.replace(/\\/g,"/")));for(let k=T.length-1;k>=0;k-=1)I.has(T[k].relFile)||T.splice(k,1)}oS(T,e.sort);let N=T.length,{limit:C,offset:O,hasMore:M,collectAll:P}=this.normalizePagination(e,N,l);return{success:!0,results:(P?T:T.slice(O,O+C)).map(I=>{let k=pz(I,r);return{id:`${I.relFile}#${I.start}-${I.end}:REF`,file_path:I.relFile,start:I.start,end:I.end,sourceToken:k.sourceToken,sourceKind:k.sourceKind,relationshipType:k.relationshipType,isDefinition:I.isDefinition,prefixText:I.prefixText,suffixText:I.suffixText}}),page:{limit:C,offset:O,hasMore:M,totalCount:N},warnings:l.length?l:void 0}}catch(s){return Xe.error("[find-references] Unexpected failure",{message:s?.message||String(s),stack:s?.stack}),{success:!1,error:`Failed to find references: ${s?.message||s}`}}}static async executeViaLsp(e,t,r,s){if(!r)return{success:!1,error:"Unable to parse node path for LSP lookup."};let i=t.lsp;if(!i)return{success:!1,error:"find-references requires an active LSP host for this language."};let o=!!e.includeDeclaration,a=cd(e.relType),c=[];a&&a!=="reference"&&c.push(`LSP find-references does not support relType '${a}'; treated as 'reference'.`);let l=Pe(r.fileAbs),d=(await qr(t.projectRoot,e.to))?.text??(r.lang&&r.lang!=="ts"&&r.lang!=="js"?ss(l,r.start,r.end):l.slice(r.start,r.end)),p=s.startsWith("@")?s:`@${s}`,f=et(e.to,d),m=on(p,f);if(m.type!=="MATCH")return{success:!1,error:`Hash mismatch (${m.type}). Re-run find-nodes to refresh the target.`};try{let h=r.lang&&r.lang!=="ts"&&r.lang!=="js"?Sn(t.projectRoot,r.fileAbs,r.start,r.end):null,g={start:r.start,end:r.end},y=r.lang&&r.lang!=="ts"&&r.lang!=="js"?_i(l,g.start):r.start,b=await i.documentSymbols(r.fileAbs),S=Hc(b,l,y,y),_=S?.selectionRange?.start??ba(l,y);sS("find-references.executeViaLsp resolved position",{targetPath:e.to,file:r.fileAbs,parsedSpan:{start:r.start,end:r.end,lang:r.lang},targetName:h?.name??null,declarationNameSpan:g,positionOffset:y,directPosition:ba(l,y),chosenPosition:_,symbolName:S?.name??null,symbolKind:S?.kind??null,symbolRange:S?.range??null,symbolSelectionRange:S?.selectionRange??null,includeDeclaration:o,symbolCount:Array.isArray(b)?b.length:0});let R=await i.references(r.fileAbs,_,o);sS("find-references.executeViaLsp raw references result",{targetPath:e.to,count:Array.isArray(R)?R.length:0,sample:Array.isArray(R)?R.slice(0,5).map(M=>({uri:M.uri,range:M.range})):[]});let E=[],T=new Set;for(let M of R){let P=M.uri.startsWith("file:")?(0,EP.fileURLToPath)(M.uri):M.uri,A=Pe(P),v=Ys(A,M.range),I=r.lang&&r.lang!=="ts"&&r.lang!=="js"?Buffer.byteLength(A.slice(0,v.start),"utf8"):v.start,k=r.lang&&r.lang!=="ts"&&r.lang!=="js"?Buffer.byteLength(A.slice(0,v.end),"utf8"):v.end,$=`${P}:${I}:${k}`;if(T.has($))continue;T.add($);let L=P===r.fileAbs&&I===g.start&&k===g.end;!o&&L||E.push({absFile:P,relFile:An.default.relative(t.projectRoot,P).replace(/\\/g,"/"),start:I,end:k,isDefinition:L})}oS(E,e.sort);let x=E.length,{limit:w,offset:D,hasMore:F,collectAll:N}=this.normalizePagination(e,x,c);return{success:!0,results:(N?E:E.slice(D,D+w)).map(M=>{let P=Pe(M.absFile),A=r.lang&&r.lang!=="ts"&&r.lang!=="js"?ss(P,M.start,M.end):P.slice(M.start,M.end);return{id:`${M.relFile}#${M.start}-${M.end}:${Pt.getAbbrev("REF",r.lang??"ts")}`,file_path:M.relFile,start:M.start,end:M.end,sourceToken:A,sourceKind:void 0,relationshipType:"reference",isDefinition:M.isDefinition}}),page:{limit:w,offset:D,hasMore:F,totalCount:x},warnings:c.length?c:void 0}}catch(h){return{success:!1,error:`LSP find-references failed: ${h?.message||h}`}}}static async executeViaClojureIndexed(e,t,r,s){let i=[],o=cd(e.relType);try{let a=await Ei(t,e,"find-references");if(!a)return{success:!1,error:"Unable to resolve canonical Clojure target for find-references."};let c=a.resolved,l=await gP(t,c,!!e.includeDeclaration,o),u=o&&o!=="reference"?l.filter(y=>y.relationshipType===o):l;iS("executeViaClojureIndexed.collected",{target:e.to,expectedHash:s,resolved:{nodePath:c.nodePath,currentHash:c.currentHash,relFile:c.relFile,symbolKey:c.target?.symbolKey??null,name:c.target?.name??null,declarationNameSpan:c.declarationNameSpan},relTypeFilter:o??null,entryCount:u.length,sample:u.slice(0,10).map(y=>{let b=Pe(y.absFile),S=_i(b,y.start),_=_i(b,y.end);return{file:y.relFile,start:y.start,end:y.end,charStart:S,charEnd:_,isDefinition:y.isDefinition,relationshipType:y.relationshipType,byteSourceToken:ss(b,y.start,y.end),charSourceToken:b.slice(S,_)}})}),oS(u,e.sort);let d=u.length,{limit:p,offset:f,hasMore:m,collectAll:h}=this.normalizePagination(e,d,i);return{success:!0,results:(h?u:u.slice(f,f+p)).map(y=>({id:`${y.relFile}#${y.start}-${y.end}:${Pt.getAbbrev("REF","clojure")}`,file_path:y.relFile,start:y.start,end:y.end,sourceToken:y.sourceToken,sourceKind:void 0,relationshipType:y.relationshipType||"reference",isDefinition:y.isDefinition,metadata:y.metadata??void 0})),page:{limit:p,offset:f,hasMore:m,totalCount:d},warnings:i.length?i:void 0}}catch(a){return{success:!1,error:`DB-backed Clojure reference lookup failed: ${a?.message||a}`}}}static async executeViaResolverCache(e,t,r){if(!r?.fileAbs||!r?.lang)return null;let s=An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/"),i=null;try{for(let c of xo(t.projectRoot)){let l=new At(c,{readonly:!0});try{if(i=l.prepare(`
|
|
795
|
+
`).all(o,a):[];for(let p of d){p.export_name&&t.names.add(String(p.export_name)),p.reexport_from&&t.namespaces.add(String(p.reexport_from));let f=typeof p.exporter_namespace=="string"?p.exporter_namespace.trim():"",m=typeof p.export_name=="string"?p.export_name.trim():"",h=f&&m?`${f}/${m}`:null;Qb(t,h)&&r.push(String(h)),Qb(t,p.exported_symbol_key??null)&&r.push(String(p.exported_symbol_key))}}catch{}finally{try{u?.close()}catch{}}}}return t}async function uP(n,e,t){let r=Yb(n,e);if(r.symbolKeys.size===0)return[];let s=Array.from(new Set((t||[]).map(u=>String(u||"").trim()).filter(Boolean))),i=new Mt(n),o=new Set;for(let u of r.symbolKeys)for(let d of i.findCandidateFilesForTargetSymbolKey(u))o.add(String(d||"").replace(/\\/g,"/"));for(let u of r.names)for(let d of i.findCandidateFilesForSymbol(u))o.add(String(d||"").replace(/\\/g,"/"));for(let u of r.namespaces)for(let d of Au(n,u)??[])o.add(String(d||"").replace(/\\/g,"/"));if(o.size===0)return[];let a=await rd(n,Array.from(o),{relTypes:s.length?s:void 0}),c=[],l=new Set;for(let u of a.rows){if(!YL(u,e,r))continue;let d=String(u.file_path||"").replace(/\\/g,"/");if(!d)continue;let p=String(u.ref_kind||"reference"),f=`${d}:${u.start_pos}:${u.end_pos}:${p}`;l.has(f)||(l.add(f),c.push({file_path:d,start_pos:Number(u.start_pos),end_pos:Number(u.end_pos),rel_type:p,ref_kind:typeof u.ref_kind=="string"?u.ref_kind:null,metadata:typeof u.metadata=="string"?u.metadata:null}))}return c}var eS=ne(()=>{"use strict";rn();Ns();zT();ki();sd();um();Vs()});function pP(n,e,t){return`${n}:${e}:${t}`}function ez(n){if(!n||typeof n!="object")return null;let e=n;for(let t of["before","after","start","end","bodyStartOf","bodyEndOf"]){let r=e[t];if(typeof r=="string"&&r.includes("#"))return r}return null}function tS(n){if(!n||typeof n!="object")return null;let e=n;for(let t of[e.path,e.of,e.to,ez(e.to)])if(typeof t=="string"&&t.includes("#"))return t;return null}function tz(n){switch(String(n||"").toLowerCase()){case"rename":case"find-references":case"find-callers":case"change-signature":return"canonical";default:return"exact"}}function fP(n,e){let t=Math.max(0,Math.min(e,n.length));return Buffer.byteLength(n.slice(0,t),"utf8")}function mP(n,e){if(!e?.name)return null;let t=Number(e.start),r=Number(e.end);if(!Number.isFinite(t)||!Number.isFinite(r)||r<t)return null;let s=ss(n,t,r);if(!s)return null;let i=e.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=[new RegExp(`^\\s*\\((?:clojure\\.core\\/)?[A-Za-z0-9*+!_?.<>=/-]+\\s+(${i})(?=[\\s\\[\\](){}]|$)`),new RegExp(`(^|[^A-Za-z0-9_\\-.\\/])(${i})(?=[^A-Za-z0-9_\\-.\\/]|$)`)];for(let a of o){let c=s.match(a);if(!c||c.index==null)continue;let l=c[1]===e.name?c[1]:c[2],u=c[0].lastIndexOf(l);if(u<0)continue;let d=c.index+u,p=d+l.length,f=t+Buffer.byteLength(s.slice(0,d),"utf8"),m=t+Buffer.byteLength(s.slice(0,p),"utf8");if(f>=t&&m<=r)return{start:f,end:m}}return null}function nz(n,e,t,r){if(!r||!Number.isFinite(e)||!Number.isFinite(t)||t<e)return null;let s=/[A-Za-z0-9*+!_?.<>=-]/,i=e,o=t;for(;i>0;){let l=n[i-1];if(l==="/"||s.test(l)){i-=1;continue}break}for(;o<n.length;){let l=n[o];if(l==="/"||s.test(l)){o+=1;continue}break}let a=n.slice(i,o);if(!a||!a.includes(r))return null;let c=0;for(;c<a.length;){let l=a.indexOf(r,c);if(l<0)break;let u=l>0?a[l-1]:"",d=l+r.length,p=d<a.length?a[d]:"",f=!u||u==="/"||!s.test(u),m=!p||!s.test(p)&&p!=="/";if(f&&m)return{start:i+l,end:i+l+r.length};c=l+r.length}return null}function hP(n,e,t,r){if(!r||!Number.isFinite(e)||!Number.isFinite(t)||t<e)return null;let s=_i(n,e),i=_i(n,t),o=nz(n,s,i,r);return o?{start:fP(n,o.start),end:fP(n,o.end)}:null}async function Rm(n,e,t,r){let s=Pe(t.fileAbs),i=ss(s,t.start,t.end),o=r.startsWith("@")?r:`@${r}`,a=Sn(n.projectRoot,t.fileAbs,t.start,t.end,{plainPath:e,expectedHash:o,content:i});if(!a)throw new Error("Ambiguous Clojure target identity. Re-run find-nodes to refresh the target hash.");let c=Wi(e,i,a),l=on(o,c);if(l.type!=="MATCH")throw new Error(`Hash mismatch (${l.type}). Re-run find-nodes to refresh the target.`);let u=mP(s,a)??hP(s,t.start,t.end,a?.name||"")??{start:t.start,end:t.end};return{content:s,declarationNameSpan:u,target:a,requestedTarget:a,fileAbs:t.fileAbs,relFile:id.default.relative(n.projectRoot,t.fileAbs).replace(/\\/g,"/"),nodePath:e,currentHash:c,wasCanonicalized:!1}}async function rz(n,e,t,r){let s=await Rm(n,e,t,r),i=FT(n.projectRoot,s.target);if(!i)return s;let o=zb(i)??s.nodePath,a=id.default.resolve(n.projectRoot,i.fileRel),c=Pe(a),l=ss(c,i.start,i.end),u=Wi(o,l,i),d=mP(c,i)??hP(c,i.start,i.end,i?.name||"")??{start:i.start,end:i.end};return{content:c,declarationNameSpan:d,target:i,requestedTarget:s.target,fileAbs:a,relFile:i.fileRel,nodePath:o,currentHash:u,wasCanonicalized:i.fileRel!==s.relFile||i.start!==s.target?.start||i.end!==s.target?.end||i.symbolKey!==s.target?.symbolKey}}async function Ei(n,e,t){if(!e||typeof e!="object")return null;let r=tS(e);if(!r)return null;let s=typeof e.expectedHash=="string"?e.expectedHash.trim():"";if(!s||s.includes("@"))return null;let i=an(r,n.projectRoot);if(!i||i.lang!=="clojure")return null;let o=tz(t??e.op),a=n.getOperationMetadata(e,dP),c=a?.[o];if(c&&c.path===r&&c.expectedHash===s)return c;let l=o==="canonical"?await rz(n,r,i,s):await Rm(n,r,i,s),u={mode:o,path:r,expectedHash:s,parsed:i,resolved:l};return n.setOperationMetadata(e,dP,{...a||{},[o]:u}),u}async function gP(n,e,t,r){let s=[],i=new Set;if(t){let a=pP(e.fileAbs,e.declarationNameSpan.start,e.declarationNameSpan.end);i.add(a),s.push({absFile:e.fileAbs,relFile:e.relFile,start:e.declarationNameSpan.start,end:e.declarationNameSpan.end,isDefinition:!0,sourceToken:ss(e.content,e.declarationNameSpan.start,e.declarationNameSpan.end),relationshipType:"reference",metadata:null})}let o=await uP(n.projectRoot,e.target,r&&r!=="reference"?[r]:null);for(let a of o){if(r==="call"&&!am(a))continue;let c=$T(a),l=c==="call"?cm(a,a.start_pos,a.end_pos,"head"):{start:a.start_pos,end:a.end_pos},u=id.default.isAbsolute(a.file_path)?a.file_path:id.default.join(n.projectRoot,a.file_path),d=pP(u,l.start,l.end);if(i.has(d))continue;let p=Pe(u),f=ss(p,l.start,l.end);i.add(d),s.push({absFile:u,relFile:a.file_path,start:l.start,end:l.end,isDefinition:!1,sourceToken:f,relationshipType:c,metadata:a.metadata??null})}return s}var id,dP,ka=ne(()=>{"use strict";id=q(require("path"));Xn();um();eS();Ns();kr();dP=Symbol("pando.clojureOperationTargetResolution")});function sz(n){return`PANDO_${n.toUpperCase()}_INDEXER_CMD`}function yP(n){return process.env[sz(n)]||`pando-${n}-indexer`}var bP=ne(()=>{"use strict"});function Kc(n){if(!n)return null;let e=n;(e.startsWith("SyntaxError:")||e.startsWith("CompileError:"))&&(e=e.substring(e.indexOf(":")+1));let t=e.lastIndexOf(":"),r=t>=0?e.slice(0,t):e,[s,i]=r.split("-"),o=Number(s),a=Number(i);return!Number.isFinite(o)||!Number.isFinite(a)||a<o?null:{start:o,end:a}}function zr(n,e){return n&&(nS.default.isAbsolute(n)?nS.default.relative(e,n).replace(/\\/g,"/"):n.replace(/\\/g,"/"))}function xP(n,e,t,r){let s=yP(r),o=(0,SP.spawnSync)(s,["--resolve","--file",e,"--root",n,"--lang",r,"--nodePath",t],{encoding:"utf8"});if(o.error)return null;let a=(o.stdout||"").trim();if(!a)return null;try{let c=JSON.parse(a);return!c||c.error||typeof c.start!="number"||typeof c.end!="number"?null:c}catch{return null}}var SP,nS,od=ne(()=>{"use strict";SP=require("child_process"),nS=q(require("path"));bP()});async function os(n,e,t,r){let s=Gs(r);return s?.resolveSpan?await s.resolveSpan(n,e,t):xP(n,e,t,r)}var Ea=ne(()=>{"use strict";Bn();od()});async function Br(n,e){let t=an(e,n);if(!t?.fileAbs||!_P.default.existsSync(t.fileAbs))return null;if(t.lang&&t.lang!=="ts"&&t.lang!=="js"){let s=e.split("#")[1];if(s)try{let o=await os(n,t.fileAbs,s,t.lang);if(o?.text&&typeof o.text=="string")return{parsed:t,text:o.text};if(o){let a=Pe(t.fileAbs);return{parsed:t,text:Nt(a,{start:o.start,end:o.end},t.lang)}}}catch{}let i=Pe(t.fileAbs);return{parsed:t,text:Nt(i,{start:t.start,end:t.end},t.lang)}}let r=Pe(t.fileAbs);return{parsed:t,text:r.slice(t.start,t.end)}}var _P,Zc=ne(()=>{"use strict";_P=q(require("fs"));kr();Ea()});function iz(n){let e=n.getParent(),t=()=>!!n.getFirstAncestor(a=>{let c=a.getKind();return c===Xt.SyntaxKind.ImportSpecifier||c===Xt.SyntaxKind.ImportClause||c===Xt.SyntaxKind.NamespaceImport||c===Xt.SyntaxKind.ImportEqualsDeclaration||c===Xt.SyntaxKind.ImportDeclaration}),r=()=>!!n.getFirstAncestor(a=>{let c=a.getKind();return c===Xt.SyntaxKind.ExportSpecifier||c===Xt.SyntaxKind.ExportAssignment||c===Xt.SyntaxKind.ExportDeclaration});if(t())return"import";if(r())return"export";if(e){if(e.getKind()===Xt.SyntaxKind.CallExpression&&e.getExpression?.()===n)return"call";if(e.getKind()===Xt.SyntaxKind.NewExpression&&e.getExpression?.()===n)return"new";if(e.getKind()===Xt.SyntaxKind.PropertyAccessExpression){let a=e.getParent();if(a?.getKind()===Xt.SyntaxKind.CallExpression&&a.getExpression?.()===e)return"call";if(a?.getKind()===Xt.SyntaxKind.NewExpression&&a.getExpression?.()===e)return"new"}}let s=n.getFirstAncestorByKind(Xt.SyntaxKind.HeritageClause);if(s){let a=s.getToken?.();if(a===Xt.SyntaxKind.ExtendsKeyword)return"extends";if(a===Xt.SyntaxKind.ImplementsKeyword)return"implements"}let i=[Xt.SyntaxKind.TypeReference,Xt.SyntaxKind.ExpressionWithTypeArguments,Xt.SyntaxKind.TypeQuery,Xt.SyntaxKind.TypeLiteral,Xt.SyntaxKind.TypeAliasDeclaration,Xt.SyntaxKind.InterfaceDeclaration,Xt.SyntaxKind.TypeAssertionExpression,Xt.SyntaxKind.AsExpression,Xt.SyntaxKind.ImportType];return n.getFirstAncestor(a=>i.includes(a.getKind()))?"type":"reference"}function rS(n,e,t,r){let s=r-t,i=n.getSourceFile(e);if(!i)try{i=n.addSourceFileAtPathIfExists?.(e)??n.addSourceFileAtPath(e)}catch{}let o;if(i&&(o=i.getDescendantAtStartWithWidth?.(t,s),o||(o=i.getDescendantAtPos(t)),o&&o.getStart(!1)!==t)){let u=o.getFirstDescendant(d=>d.getStart?.(!1)===t&&d.getEnd?.()===r);u&&(o=u)}let a,c,l="reference";if(o){try{a=o.getText()}catch{}try{c=o.getKindName()}catch{}try{l=iz(o)}catch{}}else try{a=wP.default.readFileSync(e,"utf8").slice(t,r)}catch{}return!c&&a&&(c="Unknown"),{node:o,sourceToken:a,sourceKind:c,relationshipType:l}}var wP,Xt,vP=ne(()=>{"use strict";wP=q(require("fs")),Xt=require("ts-morph")});function sS(n,e){Ht()&&X("ClojureTrace",n,e)}function iS(n,e){X("FindReferences",n,e)}function oz(){return["python3","python","python2"]}function ad(n,e,t,r,s){if(!s||!/^[A-Za-z_][A-Za-z0-9_]*$/.test(s))return{start:t,end:r};try{let i=An.default.resolve(n,e),o=Pe(i),a="[A-Za-z0-9_]",c=new RegExp(`(?<!${a})${lz(s)}(?!${a})`,"g"),l=cz(o,t,r);for(let u of l){let d=o.slice(u.start,u.end),p=Array.from(d.matchAll(c));if(p.length!==1||p[0].index==null)continue;let f=u.start+p[0].index;return{start:f,end:f+s.length}}for(let u of l){let d=az(o,u,s,c);if(d)return d}return{start:t,end:r}}catch{return{start:t,end:r}}}function az(n,e,t,r){let i=Math.max(0,e.start-256),o=Math.min(n.length,e.end+256),a=n.slice(i,o),c=Array.from(a.matchAll(r)).filter(d=>d.index!=null);if(c.length===0)return null;c.sort((d,p)=>{let f=i+(d.index??0),m=i+(p.index??0);return Math.abs(f-e.start)-Math.abs(m-e.start)});let l=c[0],u=i+(l.index??0);return{start:u,end:u+t.length}}function cz(n,e,t){let r=[{start:e,end:t}],s=n.startsWith("#!")?n.match(/^#![^\r\n]*(?:\r\n|\n|\r)?/):null;if(s?.[0]){let i=s[0].length;r.push({start:e+i,end:t+i})}return r}function lz(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function uz(n,e){return An.default.isAbsolute(n)?An.default.resolve(n):An.default.resolve(e,n)}function RP(n){let e=n;if(typeof e.getNameNode=="function"){let t=e.getNameNode();if(t)return t.getStart()}if(typeof e.getName=="function"){let t=e.getName();if(t&&typeof t=="string"){let r=n.getFirstDescendant(s=>s.getText?.()===t);if(r)return r.getStart()}}return null}function dz(n){let e=RP(n);if(e!=null)return{node:n,position:e};let t=n;for(;t&&t.getKind()!==km.SyntaxKind.SourceFile&&(t=t.getParent(),!(!t||t.getKind()===km.SyntaxKind.SourceFile));){let s=RP(t);if(s!=null)return{node:t,position:s,warning:`Target ${n.getKindName()} has no direct name; using ancestor ${t.getKindName()} for reference lookup.`}}let r=n.getFirstDescendantByKind(km.SyntaxKind.Identifier);return r?{node:n,position:r.getStart(!1),warning:`Target ${n.getKindName()} has no direct name; using first identifier token for reference lookup.`}:null}function pz(n,e){return n.analysis||(n.analysis=rS(e,n.absFile,n.start,n.end)),n.analysis}function cd(n){if(typeof n!="string")return null;let e=n.trim().toLowerCase();switch(e){case"call":case"new":case"type":case"reference":case"import":case"export":case"extends":case"implements":return e;default:return null}}function fz(n){let e=typeof n=="string"?n.trim().toLowerCase():"";switch(e){case"call":case"new":case"type":return e;default:return"reference"}}function oS(n,e){if(!n.length)return;let t=(e?.direction??"asc").toLowerCase()==="desc"?-1:1,r=e?.by??"file";n.sort((s,i)=>{if(r==="start")return(s.start-i.start||s.relFile.localeCompare(i.relFile))*t;let o=s.relFile.localeCompare(i.relFile);if(o!==0)return o*t;let a=s.start-i.start;return a!==0?a*t:(s.end-i.end)*t})}var An,kP,km,EP,Ta,aS=ne(()=>{"use strict";An=q(require("path")),kP=require("child_process"),km=require("ts-morph"),EP=require("url");ts();qn();gt();vs();Xn();Vt();rn();ki();uu();Ns();ka();kr();Zc();vP();sd();Ta=class{static{this.DEFAULT_LIMIT=10}static{this.MAX_LIMIT=100}static buildReferenceRelTypeFilter(e){let t=cd(e);return t&&t!=="reference"?{clause:" AND k.text = ?",params:[t]}:{clause:"",params:[]}}static buildEmptyResult(e,t){let r=[],{limit:s,offset:i}=this.normalizePagination(e,0,r);return t&&r.push(t),{success:!0,results:[],page:{limit:s,offset:i,hasMore:!1,totalCount:0},warnings:r.length?r:void 0}}static normalizePagination(e,t,r){if(e.__collectAll===!0)return{limit:t,offset:0,hasMore:!1,collectAll:!0};let s=Number(e.limit??this.DEFAULT_LIMIT),i=Number(e.offset??0),o=Math.max(1,Math.min(this.MAX_LIMIT,Number.isFinite(s)?s:this.DEFAULT_LIMIT)),a=Math.max(0,Number.isFinite(i)?i:0);return s!==o&&r.push("limit capped to 100"),i!==a&&r.push("offset adjusted to be >= 0"),{limit:o,offset:a,hasMore:a+o<t,collectAll:!1}}static mergeDbReferenceRows(e,t){if(!t.length)return e;let r=e.length?[...e]:[],s=new Set(r.map(i=>`${i.file_path}:${i.start_pos}:${i.end_pos}`));for(let i of t){let o=`${i.file_path}:${i.start_pos}:${i.end_pos}`;s.has(o)||(s.add(o),r.push(i))}return r}static async collectDbReferenceResults(e,t,r,s,i,o=xo(e.projectRoot)){let a=[],c=new Set,l=new Mt(e.projectRoot),u=s.map(g=>String(g||"").trim()).filter(Boolean),d=new Set,p=!1;if(t.symbolKey)for(let g of l.findCandidateFilesForTargetSymbolKey(t.symbolKey))d.add(g),p=!0;if(!p&&t.sameFileName)for(let g of l.findCandidateFilesForSymbol(t.sameFileName))d.add(g);t.sameFileRel&&d.add(t.sameFileRel);let f=i?Math.max(1,i.offset+i.limit+1):void 0,m=await vm(e.projectRoot,Array.from(d).sort((g,y)=>g.localeCompare(y)),{symbolKey:t.symbolKey,nodeId:t.nodeId==null?null:String(t.nodeId),fileRel:t.sameFileRel,name:t.sameFileName,paramCount:t.paramCount??null,allowImplicitReceiverArity:t.allowImplicitReceiverArity===!0},{relTypes:u,maxMatches:f}),h=m.rows.map(g=>({file_path:g.file_path,start_pos:g.start_pos,end_pos:g.end_pos,rel_type:g.ref_kind}));for(let g of h||[]){let y=String(g.file_path||"");if(!y)continue;let b=t.narrowName?ad(e.projectRoot,y,g.start_pos,g.end_pos,t.narrowName):{start:g.start_pos,end:g.end_pos},S=`${y}:${b.start}:${b.end}`;c.has(S)||(c.add(S),a.push({id:`${y}#${b.start}-${b.end}:REF`,file_path:y,start:b.start,end:b.end,sourceToken:void 0,sourceKind:void 0,relationshipType:g.rel_type||"reference",isDefinition:!1}))}return{results:a,truncated:m.truncated}}static buildDbReferenceResult(e,t,r,s,i=!1,o=!1){if(t.length===0&&(!i||!e.includeDeclaration||!s))return null;if(e.includeDeclaration&&s){let m=`${s.fileRel}:${s.start}:${s.end}`,h=t.findIndex(y=>String(y.file_path||"")===s.fileRel&&Number(y.start)===s.start&&Number(y.end)===s.end),g={id:`${s.fileRel}#${s.start}-${s.end}:REF`,file_path:s.fileRel,start:s.start,end:s.end,sourceToken:void 0,sourceKind:void 0,relationshipType:"reference",isDefinition:!0};h>=0&&t.splice(h,1),t.some(y=>`${y.file_path}:${y.start}:${y.end}`===m)||t.unshift(g)}if(t.length){let m=(e.sort?.direction??"asc").toLowerCase()==="desc"?-1:1,h=e.sort?.by??"file";t.sort((g,y)=>{if(h==="start")return(g.start-y.start||String(g.file_path).localeCompare(String(y.file_path)))*m;let b=String(g.file_path).localeCompare(String(y.file_path));if(b!==0)return b*m;let S=g.start-y.start;return S!==0?S*m:(g.end-y.end)*m})}let a=o?void 0:t.length,{limit:c,offset:l,hasMore:u,collectAll:d}=this.normalizePagination(e,a??t.length,r);return{success:!0,results:d?t:t.slice(l,l+c),page:{limit:c,offset:l,hasMore:o?!0:u,...a!==void 0&&{totalCount:a}},warnings:r.length?r:void 0}}static async execute(e,t,r){try{if(!e?.to)return{success:!1,error:'Missing required parameter "to" (node path).'};if(typeof e.to!="string"||e.to.includes("@"))return{success:!1,error:'Parameter "to" must be the node path without the @hash suffix. Provide the hash via expectedHash.'};let s=e.expectedHash;if(typeof s!="string"||!s.trim()||s.includes("@"))return{success:!1,error:'Parameter "expectedHash" is required and must omit the @ prefix.'};let i=s.trim(),o=an(e.to,t.projectRoot),a=o?.lang;if(a&&a!=="ts"&&a!=="js"){if(a==="clojure"){sS("find-references.execute clojure entry",{target:e.to,projectRoot:t.projectRoot,includeDeclaration:!!e.includeDeclaration});try{let k=await this.executeViaClojureIndexed(e,t,o,i);return k?.success?k:{success:!1,error:`Clojure find-references failed.${k?.error?` Reason: ${k.error}`:""}`,error_code:"reference_lookup_failed"}}catch(k){return{success:!1,error:`Clojure find-references failed. ${k?.message||String(k)}`,error_code:"reference_lookup_failed"}}}if(!(e.forceLsp===!0))if(a==="csharp"){let k=await this.executeViaCsharpQuery(e,t,o,i);if(k)return await this.writeResolverCacheEntry(t,o,e.to),k}else{let k=await this.executeViaDbNonTs(e,t,o);if(k)return k;let $=await this.executeViaResolverCache(e,t,o);if($)return $;if(a==="python"){let L=await this.executeViaPythonResolver(e,t,o);if(L)return await this.writeResolverCacheEntry(t,o,e.to),L}}if(!t.lsp){Xe.warn("[find-references] non-TS request has no LSP host configured",{lang:a,target:e.to,projectRoot:t.projectRoot,hint:"CLI runners construct CodeEngine without lspHost; use extension runtime or inject a host via CodeEngineFactory options."});try{console.warn(`[find-references][diag] no LSP host configured (lang=${a}, target=${e.to})`)}catch{}return this.buildEmptyResult(e,`${a} LSP not available (no LSP host configured); returning empty results.`)}try{let k=await this.executeViaLsp(e,t,o,i);return k?.success?(await this.writeResolverCacheEntry(t,o,e.to),k):this.buildEmptyResult(e,`${a} LSP failed; returning empty results. ${k?.error?`Reason: ${k.error}`:""}`.trim())}catch(k){return this.buildEmptyResult(e,`${a} LSP failed; returning empty results. ${k?.message||String(k)}`)}}if(e.asOf)return{success:!1,error:"find-references no longer supports snapshot (asOf) queries. Re-run the request against the live workspace or restore the snapshot first."};let c=t.queries;if(!c?.findRenameLocations)return{success:!1,error:"find-references requires an active TypeScript language service session."};let l=[],u=!!e.includeDeclaration,d=cd(e.relType),p=`${e.to}@${i}`,f=es(p,r,t.projectRoot);if(!f)return{success:!1,error:"Target declaration not found. Refresh the path/hash via find-nodes and retry."};let m=dz(f);if(!m)return{success:!1,error:`Cannot determine declaration name position for ${f.getKindName()}.`};m.warning&&l.push(m.warning);let h=m.node,g=m.position,y=h.getSourceFile().getFilePath();try{t.ls.ensureInProgram(y)}catch(I){Xe.warn("[find-references] ensureInProgram failed for declaration file",{file:y,message:I?.message||String(I)})}let b=!!e.includeStrings,S=!!e.includeComments,_=[];try{_=c.findRenameLocations(y,g,b,S,{providePrefixAndSuffixTextForRename:!0})||[]}catch(I){return{success:!1,error:`TypeScript findRenameLocations failed: ${I?.message||I}`}}let R=new Set,E=new Set,T=[],x=g,w=(()=>{try{let I=h.getNameNode?.();if(I)return I.getEnd()-I.getStart()}catch{}})();for(let I of _){if(!I?.textSpan||!I.fileName)continue;let k=Number(I.textSpan.start),$=Number(I.textSpan.length);if(!Number.isFinite(k)||!Number.isFinite($)||$<0)continue;let L=uz(I.fileName,t.projectRoot),j=`${L}:${k}:${$}:${I.prefixText??""}:${I.suffixText??""}`;if(R.has(j))continue;if(R.add(j),!E.has(L)){try{t.ls.ensureInProgram(L)}catch(G){Xe.warn("[find-references] ensureInProgram failed for reference file",{file:L,message:G?.message||String(G)})}E.add(L)}let z=!!I.isDefinition||L===y&&k===x&&(w===void 0||$===w);if(!u&&z)continue;let U=k+$,K;d&&(K=rS(r,L,k,U),K.relationshipType!==d)||T.push({absFile:L,relFile:An.default.relative(t.projectRoot,L).replace(/\\/g,"/"),start:k,end:U,isDefinition:z,analysis:K,prefixText:I.prefixText??void 0,suffixText:I.suffixText??void 0})}let D=Array.isArray(e.dbCandidateFiles)?e.dbCandidateFiles:null,F=e.dbCandidateFilesComplete===!0;if(D&&F){let I=new Set(D.map(k=>k.replace(/\\/g,"/")));for(let k=T.length-1;k>=0;k-=1)I.has(T[k].relFile)||T.splice(k,1)}oS(T,e.sort);let N=T.length,{limit:C,offset:O,hasMore:M,collectAll:P}=this.normalizePagination(e,N,l);return{success:!0,results:(P?T:T.slice(O,O+C)).map(I=>{let k=pz(I,r);return{id:`${I.relFile}#${I.start}-${I.end}:REF`,file_path:I.relFile,start:I.start,end:I.end,sourceToken:k.sourceToken,sourceKind:k.sourceKind,relationshipType:k.relationshipType,isDefinition:I.isDefinition,prefixText:I.prefixText,suffixText:I.suffixText}}),page:{limit:C,offset:O,hasMore:M,totalCount:N},warnings:l.length?l:void 0}}catch(s){return Xe.error("[find-references] Unexpected failure",{message:s?.message||String(s),stack:s?.stack}),{success:!1,error:`Failed to find references: ${s?.message||s}`}}}static async executeViaLsp(e,t,r,s){if(!r)return{success:!1,error:"Unable to parse node path for LSP lookup."};let i=t.lsp;if(!i)return{success:!1,error:"find-references requires an active LSP host for this language."};let o=!!e.includeDeclaration,a=cd(e.relType),c=[];a&&a!=="reference"&&c.push(`LSP find-references does not support relType '${a}'; treated as 'reference'.`);let l=Pe(r.fileAbs),d=(await Br(t.projectRoot,e.to))?.text??(r.lang&&r.lang!=="ts"&&r.lang!=="js"?ss(l,r.start,r.end):l.slice(r.start,r.end)),p=s.startsWith("@")?s:`@${s}`,f=et(e.to,d),m=on(p,f);if(m.type!=="MATCH")return{success:!1,error:`Hash mismatch (${m.type}). Re-run find-nodes to refresh the target.`};try{let h=r.lang&&r.lang!=="ts"&&r.lang!=="js"?Sn(t.projectRoot,r.fileAbs,r.start,r.end):null,g={start:r.start,end:r.end},y=r.lang&&r.lang!=="ts"&&r.lang!=="js"?_i(l,g.start):r.start,b=await i.documentSymbols(r.fileAbs),S=Hc(b,l,y,y),_=S?.selectionRange?.start??ba(l,y);sS("find-references.executeViaLsp resolved position",{targetPath:e.to,file:r.fileAbs,parsedSpan:{start:r.start,end:r.end,lang:r.lang},targetName:h?.name??null,declarationNameSpan:g,positionOffset:y,directPosition:ba(l,y),chosenPosition:_,symbolName:S?.name??null,symbolKind:S?.kind??null,symbolRange:S?.range??null,symbolSelectionRange:S?.selectionRange??null,includeDeclaration:o,symbolCount:Array.isArray(b)?b.length:0});let R=await i.references(r.fileAbs,_,o);sS("find-references.executeViaLsp raw references result",{targetPath:e.to,count:Array.isArray(R)?R.length:0,sample:Array.isArray(R)?R.slice(0,5).map(M=>({uri:M.uri,range:M.range})):[]});let E=[],T=new Set;for(let M of R){let P=M.uri.startsWith("file:")?(0,EP.fileURLToPath)(M.uri):M.uri,A=Pe(P),v=Ys(A,M.range),I=r.lang&&r.lang!=="ts"&&r.lang!=="js"?Buffer.byteLength(A.slice(0,v.start),"utf8"):v.start,k=r.lang&&r.lang!=="ts"&&r.lang!=="js"?Buffer.byteLength(A.slice(0,v.end),"utf8"):v.end,$=`${P}:${I}:${k}`;if(T.has($))continue;T.add($);let L=P===r.fileAbs&&I===g.start&&k===g.end;!o&&L||E.push({absFile:P,relFile:An.default.relative(t.projectRoot,P).replace(/\\/g,"/"),start:I,end:k,isDefinition:L})}oS(E,e.sort);let x=E.length,{limit:w,offset:D,hasMore:F,collectAll:N}=this.normalizePagination(e,x,c);return{success:!0,results:(N?E:E.slice(D,D+w)).map(M=>{let P=Pe(M.absFile),A=r.lang&&r.lang!=="ts"&&r.lang!=="js"?ss(P,M.start,M.end):P.slice(M.start,M.end);return{id:`${M.relFile}#${M.start}-${M.end}:${Pt.getAbbrev("REF",r.lang??"ts")}`,file_path:M.relFile,start:M.start,end:M.end,sourceToken:A,sourceKind:void 0,relationshipType:"reference",isDefinition:M.isDefinition}}),page:{limit:w,offset:D,hasMore:F,totalCount:x},warnings:c.length?c:void 0}}catch(h){return{success:!1,error:`LSP find-references failed: ${h?.message||h}`}}}static async executeViaClojureIndexed(e,t,r,s){let i=[],o=cd(e.relType);try{let a=await Ei(t,e,"find-references");if(!a)return{success:!1,error:"Unable to resolve canonical Clojure target for find-references."};let c=a.resolved,l=await gP(t,c,!!e.includeDeclaration,o),u=o&&o!=="reference"?l.filter(y=>y.relationshipType===o):l;iS("executeViaClojureIndexed.collected",{target:e.to,expectedHash:s,resolved:{nodePath:c.nodePath,currentHash:c.currentHash,relFile:c.relFile,symbolKey:c.target?.symbolKey??null,name:c.target?.name??null,declarationNameSpan:c.declarationNameSpan},relTypeFilter:o??null,entryCount:u.length,sample:u.slice(0,10).map(y=>{let b=Pe(y.absFile),S=_i(b,y.start),_=_i(b,y.end);return{file:y.relFile,start:y.start,end:y.end,charStart:S,charEnd:_,isDefinition:y.isDefinition,relationshipType:y.relationshipType,byteSourceToken:ss(b,y.start,y.end),charSourceToken:b.slice(S,_)}})}),oS(u,e.sort);let d=u.length,{limit:p,offset:f,hasMore:m,collectAll:h}=this.normalizePagination(e,d,i);return{success:!0,results:(h?u:u.slice(f,f+p)).map(y=>({id:`${y.relFile}#${y.start}-${y.end}:${Pt.getAbbrev("REF","clojure")}`,file_path:y.relFile,start:y.start,end:y.end,sourceToken:y.sourceToken,sourceKind:void 0,relationshipType:y.relationshipType||"reference",isDefinition:y.isDefinition,metadata:y.metadata??void 0})),page:{limit:p,offset:f,hasMore:m,totalCount:d},warnings:i.length?i:void 0}}catch(a){return{success:!1,error:`DB-backed Clojure reference lookup failed: ${a?.message||a}`}}}static async executeViaResolverCache(e,t,r){if(!r?.fileAbs||!r?.lang)return null;let s=An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/"),i=null;try{for(let c of xo(t.projectRoot)){let l=new At(c,{readonly:!0});try{if(i=l.prepare(`
|
|
796
796
|
SELECT resolved_node_id, resolved_symbol_key
|
|
797
797
|
FROM resolver_cache
|
|
798
798
|
WHERE file_path = ? AND start_pos = ? AND end_pos = ? AND lang = ? AND symbol_id = ?
|
|
799
799
|
LIMIT 1
|
|
800
|
-
`).get(s,r.start,r.end,r.lang,e.to),i?.resolved_node_id!=null||i?.resolved_symbol_key)break}finally{try{l.close()}catch{}}}}catch{return null}let o=i?.resolved_symbol_key??null,a=i?.resolved_node_id??null;return!o&&!a?null:this.executeViaDbTargetLookup(e,t,r,o,a)}static async executeViaDbTargetLookup(e,t,r,s,i){let o=[],{clause:a,params:c}=this.buildReferenceRelTypeFilter(e.relType),l=Number(e.limit??this.DEFAULT_LIMIT),u=Number(e.offset??0),d={limit:Math.max(1,Math.min(this.MAX_LIMIT,Number.isFinite(l)?l:this.DEFAULT_LIMIT)),offset:Math.max(0,Number.isFinite(u)?u:0)};try{let p=r?.fileAbs?An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/"):null,f=await this.collectDbReferenceResults(t,{symbolKey:s,nodeId:i,sameFileRel:p,sameFileName:s&&s.split("/").pop()||null,includeSameFileFallback:!0,sameFileFallbackOnlyWhenEmpty:!0},a,c,d);return this.buildDbReferenceResult(e,f.results,o,r?.fileAbs?{fileRel:An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/"),start:r.start,end:r.end}:null,!1,f.truncated)}catch{return null}}static async executeViaDbNonTs(e,t,r){if(!r?.fileAbs)return null;let s=Sn(t.projectRoot,r.fileAbs,r.start,r.end),i=s?.fileRel??An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/");if(!s)return null;let o=[],{clause:a,params:c}=this.buildReferenceRelTypeFilter(e.relType),l=Number(e.limit??this.DEFAULT_LIMIT),u=Number(e.offset??0),d={limit:Math.max(1,Math.min(this.MAX_LIMIT,Number.isFinite(l)?l:this.DEFAULT_LIMIT)),offset:Math.max(0,Number.isFinite(u)?u:0)};try{let p=await this.collectDbReferenceResults(t,{symbolKey:s.symbolKey,nodeId:s.nodeId,sameFileRel:i,sameFileName:s.name,includeSameFileFallback:!!s.name&&s.isExported===0,sameFileFallbackOnlyWhenEmpty:!1,narrowName:r.lang==="csharp"?s.name:null},a,c,d),f=r.lang==="csharp"?ad(t.projectRoot,i,r.start,r.end,s.name):{start:r.start,end:r.end};return this.buildDbReferenceResult(e,p.results,o,{fileRel:i,start:f.start,end:f.end},!0,p.truncated)}catch{return null}}static async executeViaPythonResolver(e,t,r){if(!r?.fileAbs)return null;let s=An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/"),i=Sn(t.projectRoot,r.fileAbs,r.start,r.end),o=new Mt(t.projectRoot),a=i?.name||o.getNodeName(e.to)||null;if(!a)return null;let c=new Set;if(i?.symbolKey)for(let E of o.findCandidateFilesForTargetSymbolKey(i.symbolKey))c.add(E);for(let E of o.findCandidateFilesForSymbol(a))c.add(E);let l=Array.from(c).map(E=>An.default.resolve(t.projectRoot,E));if(l.length===0)return null;let u={targetFile:r.fileAbs,start:r.start,end:r.end,candidates:l},d=An.default.resolve(t.projectRoot,"tools/python-indexer/pando_python_resolver.py"),p=oz(),f=null;for(let E of p)try{let T=(0,kP.spawnSync)(E,["-u",d],{input:JSON.stringify(u),encoding:"utf8",maxBuffer:10485760});if(T.status!==0&&T.status!==null)continue;let x=T.stdout?.toString?.()??"";if(!x)continue;let w=JSON.parse(x);if(w?.ok&&Array.isArray(w.references)){f=w.references;break}}catch{continue}if(!f||f.length===0)return null;let m=[],h=f.map(E=>{let T=An.default.relative(t.projectRoot,E.file).replace(/\\/g,"/");return{id:`${T}#${E.start}-${E.end}:REF`,file_path:T,start:E.start,end:E.end,sourceToken:void 0,sourceKind:void 0,relationshipType:"reference",isDefinition:!1}});e.includeDeclaration&&h.unshift({id:`${s}#${r.start}-${r.end}:REF`,file_path:s,start:r.start,end:r.end,sourceToken:void 0,sourceKind:void 0,relationshipType:"reference",isDefinition:!0});let g=h.length,{limit:y,offset:b,hasMore:S,collectAll:_}=this.normalizePagination(e,g,m);return{success:!0,results:_?h:h.slice(b,b+y),page:{limit:y,offset:b,hasMore:S,totalCount:g},warnings:m.length?m:void 0}}static async executeViaCsharpQuery(e,t,r,s){if(!r?.fileAbs)return null;let i=Pe(r.fileAbs),a=(await
|
|
800
|
+
`).get(s,r.start,r.end,r.lang,e.to),i?.resolved_node_id!=null||i?.resolved_symbol_key)break}finally{try{l.close()}catch{}}}}catch{return null}let o=i?.resolved_symbol_key??null,a=i?.resolved_node_id??null;return!o&&!a?null:this.executeViaDbTargetLookup(e,t,r,o,a)}static async executeViaDbTargetLookup(e,t,r,s,i){let o=[],{clause:a,params:c}=this.buildReferenceRelTypeFilter(e.relType),l=Number(e.limit??this.DEFAULT_LIMIT),u=Number(e.offset??0),d={limit:Math.max(1,Math.min(this.MAX_LIMIT,Number.isFinite(l)?l:this.DEFAULT_LIMIT)),offset:Math.max(0,Number.isFinite(u)?u:0)};try{let p=r?.fileAbs?An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/"):null,f=await this.collectDbReferenceResults(t,{symbolKey:s,nodeId:i,sameFileRel:p,sameFileName:s&&s.split("/").pop()||null,includeSameFileFallback:!0,sameFileFallbackOnlyWhenEmpty:!0},a,c,d);return this.buildDbReferenceResult(e,f.results,o,r?.fileAbs?{fileRel:An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/"),start:r.start,end:r.end}:null,!1,f.truncated)}catch{return null}}static async executeViaDbNonTs(e,t,r){if(!r?.fileAbs)return null;let s=Sn(t.projectRoot,r.fileAbs,r.start,r.end),i=s?.fileRel??An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/");if(!s)return null;let o=[],{clause:a,params:c}=this.buildReferenceRelTypeFilter(e.relType),l=Number(e.limit??this.DEFAULT_LIMIT),u=Number(e.offset??0),d={limit:Math.max(1,Math.min(this.MAX_LIMIT,Number.isFinite(l)?l:this.DEFAULT_LIMIT)),offset:Math.max(0,Number.isFinite(u)?u:0)};try{let p=await this.collectDbReferenceResults(t,{symbolKey:s.symbolKey,nodeId:s.nodeId,sameFileRel:i,sameFileName:s.name,includeSameFileFallback:!!s.name&&s.isExported===0,sameFileFallbackOnlyWhenEmpty:!1,narrowName:r.lang==="csharp"?s.name:null},a,c,d),f=r.lang==="csharp"?ad(t.projectRoot,i,r.start,r.end,s.name):{start:r.start,end:r.end};return this.buildDbReferenceResult(e,p.results,o,{fileRel:i,start:f.start,end:f.end},!0,p.truncated)}catch{return null}}static async executeViaPythonResolver(e,t,r){if(!r?.fileAbs)return null;let s=An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/"),i=Sn(t.projectRoot,r.fileAbs,r.start,r.end),o=new Mt(t.projectRoot),a=i?.name||o.getNodeName(e.to)||null;if(!a)return null;let c=new Set;if(i?.symbolKey)for(let E of o.findCandidateFilesForTargetSymbolKey(i.symbolKey))c.add(E);for(let E of o.findCandidateFilesForSymbol(a))c.add(E);let l=Array.from(c).map(E=>An.default.resolve(t.projectRoot,E));if(l.length===0)return null;let u={targetFile:r.fileAbs,start:r.start,end:r.end,candidates:l},d=An.default.resolve(t.projectRoot,"tools/python-indexer/pando_python_resolver.py"),p=oz(),f=null;for(let E of p)try{let T=(0,kP.spawnSync)(E,["-u",d],{input:JSON.stringify(u),encoding:"utf8",maxBuffer:10485760});if(T.status!==0&&T.status!==null)continue;let x=T.stdout?.toString?.()??"";if(!x)continue;let w=JSON.parse(x);if(w?.ok&&Array.isArray(w.references)){f=w.references;break}}catch{continue}if(!f||f.length===0)return null;let m=[],h=f.map(E=>{let T=An.default.relative(t.projectRoot,E.file).replace(/\\/g,"/");return{id:`${T}#${E.start}-${E.end}:REF`,file_path:T,start:E.start,end:E.end,sourceToken:void 0,sourceKind:void 0,relationshipType:"reference",isDefinition:!1}});e.includeDeclaration&&h.unshift({id:`${s}#${r.start}-${r.end}:REF`,file_path:s,start:r.start,end:r.end,sourceToken:void 0,sourceKind:void 0,relationshipType:"reference",isDefinition:!0});let g=h.length,{limit:y,offset:b,hasMore:S,collectAll:_}=this.normalizePagination(e,g,m);return{success:!0,results:_?h:h.slice(b,b+y),page:{limit:y,offset:b,hasMore:S,totalCount:g},warnings:m.length?m:void 0}}static async executeViaCsharpQuery(e,t,r,s){if(!r?.fileAbs)return null;let i=Pe(r.fileAbs),a=(await Br(t.projectRoot,e.to))?.text??Nt(i,{start:r.start,end:r.end},r.lang),c=s.startsWith("@")?s:`@${s}`,l=et(e.to,a),u=on(c,l);if(u.type!=="MATCH")return{success:!1,error:`Hash mismatch (${u.type}). Re-run find-nodes to refresh the target.`};let d=new Mt(t.projectRoot),p=Sn(t.projectRoot,r.fileAbs,r.start,r.end),f=p?.name||d.getNodeName(e.to)||null;if(!f)return null;let m=An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/"),h=new Set;h.add(m);let g=!1;if(p?.symbolKey)for(let v of d.findCandidateFilesForTargetSymbolKey(p.symbolKey))h.add(v),g=!0;if(!g)for(let v of d.findCandidateFilesForSymbol(f))h.add(v);let y=Array.from(h).sort((v,I)=>v.localeCompare(I)),b=[],S=cd(e.relType),_=S?[S]:void 0,R=e.__collectAll===!0,E=Number(e.limit??this.DEFAULT_LIMIT),T=Number(e.offset??0),x=Math.max(0,Number.isFinite(T)?T:0),w=Math.max(1,Math.min(this.MAX_LIMIT,Number.isFinite(E)?E:this.DEFAULT_LIMIT)),D=R?void 0:x+w+1,F=[],N=new Set,C=!1;if(y.length>0){let v=y.map($=>An.default.resolve(t.projectRoot,$));iS("executeViaCsharpQuery.resolve.begin",{target:e.to,targetName:f,candidateCount:v.length,collectAllRequested:R,maxResults:D??null,relTypes:_??null});let I=await lf(t.projectRoot,r.fileAbs,e.to,v,{relTypes:_,maxResults:D}),k=I?.references??[];C=I?.truncated===!0,iS("executeViaCsharpQuery.resolve.result",{target:e.to,targetName:f,referenceCount:k.length,truncated:C,collectAllRequested:R,maxResults:D??null});for(let $ of k){let L=fz($.refKind);if(S&&L!==S)continue;let j=An.default.relative(t.projectRoot,$.file).replace(/\\/g,"/"),z=ad(t.projectRoot,j,$.start,$.end,f),U=`${j}#${z.start}-${z.end}:REF`;if(N.has(U))continue;N.add(U);let K=$.enclosingKind?{csharpEnclosingKind:$.enclosingKind,csharpEnclosingStart:$.enclosingStart??null,csharpEnclosingEnd:$.enclosingEnd??null}:void 0;F.push({id:U,file_path:j,start:z.start,end:z.end,sourceToken:void 0,sourceKind:void 0,relationshipType:L,isDefinition:!1,metadata:K})}}if(e.includeDeclaration){let v=ad(t.projectRoot,m,r.start,r.end,f),I={id:`${m}#${v.start}-${v.end}:REF`,file_path:m,start:v.start,end:v.end,sourceToken:void 0,sourceKind:void 0,relationshipType:"reference",isDefinition:!0,metadata:void 0};(!S||I.relationshipType===S)&&F.unshift(I)}let O=C?void 0:F.length,{hasMore:M,collectAll:P}=this.normalizePagination(e,O??F.length,b);return{success:!0,results:P?F:F.slice(x,x+w),page:{limit:w,offset:x,hasMore:C?!0:M,...O!==void 0&&{totalCount:O}},warnings:b.length?b:void 0}}static async writeResolverCacheEntry(e,t,r){if(!t?.fileAbs||!t?.lang)return;let s=An.default.relative(e.projectRoot,t.fileAbs).replace(/\\/g,"/"),i=Ln(e.projectRoot,0),o=Sn(e.projectRoot,t.fileAbs,t.start,t.end),a=o?.nodeId??null,c=o?.symbolKey??null;if(!(a==null&&!c))try{let l=new At(i);try{l.prepare(`
|
|
801
801
|
INSERT INTO resolver_cache (file_path, start_pos, end_pos, lang, symbol_id, resolved_node_id, resolved_symbol_key, updated_at)
|
|
802
802
|
VALUES (?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
|
|
803
803
|
ON CONFLICT(file_path, start_pos, end_pos, lang, symbol_id) DO UPDATE SET
|
|
804
804
|
resolved_node_id=excluded.resolved_node_id,
|
|
805
805
|
resolved_symbol_key=excluded.resolved_symbol_key,
|
|
806
806
|
updated_at=CURRENT_TIMESTAMP
|
|
807
|
-
`).run(s,t.start,t.end,t.lang,r,a,c)}finally{try{l.close()}catch{}}}catch{return}}static async executeViaCsharpDb(e,t,r,s){if(!r?.fileAbs)return null;try{let i=Pe(r.fileAbs),a=(await qr(t.projectRoot,e.to))?.text??Nt(i,{start:r.start,end:r.end},r.lang),c=s.startsWith("@")?s:`@${s}`,l=et(e.to,a),u=on(c,l);if(u.type!=="MATCH")return{success:!1,error:`Hash mismatch (${u.type}). Re-run find-nodes to refresh the target.`};let d=/\(\s*this\b/.test(a),p=Ln(t.projectRoot,0),f=Sn(t.projectRoot,r.fileAbs,r.start,r.end),m=f?.symbolKey??null,h=f?.nodeId??null,g=f?.name??null,y=f?.fileRel??An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/");if(!m&&h==null&&!g)return null;let b=[],{clause:S,params:_}=this.buildReferenceRelTypeFilter(e.relType),R=Number(e.limit??this.DEFAULT_LIMIT),E=Number(e.offset??0),T={limit:Math.max(1,Math.min(this.MAX_LIMIT,Number.isFinite(R)?R:this.DEFAULT_LIMIT)),offset:Math.max(0,Number.isFinite(E)?E:0)};try{let x=await this.collectDbReferenceResults(t,{symbolKey:m,nodeId:h,sameFileRel:y,sameFileName:g,includeSameFileFallback:!!g&&f?.isExported===0,sameFileFallbackOnlyWhenEmpty:!1,narrowName:g,paramCount:f?.paramCount??null,allowImplicitReceiverArity:d},S,_,T,m?[p]:void 0),w=ad(t.projectRoot,y,r.start,r.end,g);return this.buildDbReferenceResult(e,x.results,b,{fileRel:y,start:w.start,end:w.end},!1,x.truncated)}catch{return null}}catch{return null}}}});var CP={};Lt(CP,{getFileModificationTime:()=>bz,hasFileBeenModifiedSince:()=>yz,processFilesInBatches:()=>gz,saveFileWithTimestamp:()=>Qn,saveFilesWithTimestamps:()=>mz,touchFileWithTimestamp:()=>PP,touchFilesWithTimestamp:()=>hz});function Qn(n){n.saveSync();let e=n.getFilePath();return PP(e)}function PP(n){let e=Date.now(),t=new Date(e);try{(0,Gc.utimesSync)(n,t,t),console.log(`[FileOps] Updated timestamp for ${TP.basename(n)} to ${e}`)}catch(r){console.log(`[FileOps] Failed to update timestamp for ${n}:`,r)}return e}function mz(n){let e=new Map;for(let t of n){let r=Qn(t);e.set(t.getFilePath(),r)}return e}function hz(n){let e=Date.now(),t=new Date(e),r=0,s=0;for(let i of n)try{(0,Gc.utimesSync)(i,t,t),r++}catch{s++}try{let i=r+s;console.log(`[FileOps] Updated timestamps for ${r}/${i} files to ${e}`)}catch{}return e}async function gz(n,e,t){let r=[],s=new Em.Project({useInMemoryFileSystem:!0,compilerOptions:{allowJs:!0,jsx:Em.ts.JsxEmit.React,skipLibCheck:!0,skipDefaultLibCheck:!0}});for(let i=0;i<n.length;i+=e){let o=n.slice(i,i+e),a=await t(s,o);r.push(a);let c=s.getSourceFiles();for(let l of c){try{l.forget?.()}catch{}try{s.removeSourceFile(l)}catch{}}try{s.resetProgram?.()}catch{}}return r}function yz(n,e){try{return(0,Gc.statSync)(n).mtimeMs>e}catch{return!1}}function bz(n){try{return(0,Gc.statSync)(n).mtimeMs}catch{return null}}var Em,Gc,TP,vo=ne(()=>{"use strict";Em=require("ts-morph"),Gc=require("fs"),TP=q(require("path"))});function IP(n,e){return n?Ca.default.isAbsolute(n)?Ca.default.resolve(n):Ca.default.resolve(e,n):e}function Pa(n,e){X("ReferenceEditPipeline",n,e)}function ld(n,e){let t=an(n,e);if(!t||!t.lang||t.lang==="ts"||t.lang==="js")return Pa("getDbCandidateFilesForTarget.skip",{targetPath:n,projectRoot:e,parsed:t?{lang:t.lang,start:t.start,end:t.end,fileAbs:t.fileAbs}:null,reason:"not-db-backed-language"}),null;let r=Sn(e,t.fileAbs,t.start,t.end);if(!r)return Pa("getDbCandidateFilesForTarget.miss",{targetPath:n,projectRoot:e,file:Ca.default.relative(e,t.fileAbs).replace(/\\/g,"/"),span:{start:t.start,end:t.end}}),null;let s=new Set;try{let o=new Mt(e);if(r.symbolKey)for(let c of o.findCandidateFilesForTargetSymbolKey(r.symbolKey))c&&s.add(String(c).replace(/\\/g,"/"));let a=r.name?String(r.name).trim():"";if(a)for(let c of o.findCandidateFilesForSymbol(a))c&&s.add(String(c).replace(/\\/g,"/"))}catch{return null}if(s.size===0)return Pa("getDbCandidateFilesForTarget.empty",{targetPath:n,projectRoot:e,target:{symbolKey:r.symbolKey??null,nodeId:r.nodeId??null,name:r.name??null},complete:!1}),null;let i={files:Array.from(s),complete:!1};return Pa("getDbCandidateFilesForTarget.hit",{targetPath:n,projectRoot:e,target:{symbolKey:r.symbolKey??null,nodeId:r.nodeId??null,name:r.name??null},complete:!1,candidateCount:i.files.length,sample:i.files.slice(0,10)}),i}async function as(n,e,t,r,s){let i=ld(n,r.projectRoot);Pa("collectReferenceEditLocations.begin",{targetPath:n,expectedHash:e,projectRoot:r.projectRoot,options:{includeDeclaration:t.includeDeclaration,includeStrings:!!t.includeStrings,includeComments:!!t.includeComments,forceLsp:t.forceLsp===!0,boundary:t.boundary??null,relType:t.relType??null,sort:t.sort??null},candidates:i?{count:i.files.length,complete:i.complete===!0,sample:i.files.slice(0,10)}:null});let o={op:"find-references",to:n,expectedHash:e,includeDeclaration:t.includeDeclaration,includeStrings:!!t.includeStrings,includeComments:!!t.includeComments,forceLsp:t.forceLsp===!0,boundary:t.boundary,relType:t.relType,sort:t.sort,__collectAll:!0};i?.files?.length&&(o.dbCandidateFiles=i.files,o.dbCandidateFilesComplete=i.complete===!0);let a=await Ta.execute(o,r,s);if(!a?.success)return Pa("collectReferenceEditLocations.failure",{targetPath:n,expectedHash:e,error:a?.error??null,details:a?.details??null}),{success:!1,error:a?.error,details:a?.details};let c=Array.isArray(a.results)?a.results:[];Pa("collectReferenceEditLocations.result",{targetPath:n,expectedHash:e,totalCount:Number(a?.page?.totalCount??c.length),collectedCount:c.length,warnings:Array.isArray(a?.warnings)?a.warnings:[],sample:c.slice(0,10).map(d=>({file_path:d?.file_path||d?.filePath||null,start:d?.start??null,end:d?.end??null,isDefinition:!!d?.isDefinition,relationshipType:d?.relationshipType??null,sourceToken:d?.sourceToken??null,prefixText:d?.prefixText??null,suffixText:d?.suffixText??null}))});let l=[],u=c;for(let d of u){let p=d?.file_path||d?.filePath;if(typeof p!="string")continue;let f=Number(d?.start),m=Number(d?.end);!Number.isFinite(f)||!Number.isFinite(m)||m<f||l.push({file:p,start:f,length:m-f,prefixText:d?.prefixText??void 0,suffixText:d?.suffixText??void 0,isDefinition:!!d?.isDefinition,sourceToken:d?.sourceToken??void 0,sourceKind:d?.sourceKind??void 0,relationshipType:d?.relationshipType??void 0,metadata:d?.metadata??void 0})}return{success:!0,locations:l}}function Fs(n,e){let t=new Set,r=[];for(let s of n){let i=IP(s.file,e),o=(()=>{if(typeof s.metadata=="string")return s.metadata;if(s.metadata==null)return"";try{return JSON.stringify(s.metadata)}catch{return""}})(),a=`${i}:${s.start}:${s.length}:${s.prefixText??""}:${s.suffixText??""}:${s.isDefinition?"1":"0"}:${o}`;t.has(a)||(t.add(a),r.push({...s,file:i}))}return r.sort((s,i)=>s.file===i.file?s.start-i.start:s.file.localeCompare(i.file)),r}function Pm(n,e){let t=new Map;for(let s of n){let i=IP(s.file,e.projectRoot),o=t.get(i)||[];o.push({...s,file:i}),t.set(i,o)}let r=new Set;for(let[s,i]of t){if(!Tm.default.existsSync(s))continue;try{e.context.ls.ensureInProgram(s)}catch{}let o=e.project.getSourceFile(s)||e.project.addSourceFileAtPath(s),a=e.batchSaves===!0&&o?o.getFullText():Tm.default.readFileSync(s,"utf8");i.sort((c,l)=>l.start-c.start);for(let c of i){let l=c.start+c.length;if(c.start<0||l>a.length||l<c.start)throw new Error(`Invalid text edit span for ${Ca.default.relative(e.projectRoot,s)} (${c.start}-${l}).`);a=a.slice(0,c.start)+c.replacement+a.slice(l)}o?(o.replaceWithText(a),e.batchSaves!==!0&&Qn(o),e.context.ls.bump(s)):Tm.default.writeFileSync(s,a,"utf8"),r.add(Ca.default.relative(e.projectRoot,s).replace(/\\/g,"/"))}return{changedFiles:Array.from(r)}}function AP(n,e,t){let r=Number(e?.limit??t),s=Number(e?.offset??0),i=Math.max(0,s),o=Math.max(1,Math.min(100,r)),a=n.length,c=n.slice(i,i+o),l=i+c.length<a,u=[];return r!==o&&u.push("page.limit capped to 100"),s!==i&&u.push("page.offset adjusted to be >= 0"),{pageSlice:c,totalCount:a,limit:o,offset:i,hasMore:l,warnings:u}}var Tm,Ca,Cm=ne(()=>{"use strict";Tm=q(require("fs")),Ca=q(require("path"));aS();vo();kr();Ns();gt();ki()});var hr,Os,Wn,Ro,NP=ne(()=>{"use strict";hr=require("ts-morph"),Os=q(require("fs")),Wn=q(require("path"));qn();Xn();ts();kr();Ns();ka();Cm();Ro=class n{static isReferenceBearingTsDeleteTarget(e){return hr.Node.isIdentifier(e)||hr.Node.isFunctionDeclaration(e)||hr.Node.isMethodDeclaration(e)||hr.Node.isConstructorDeclaration(e)||hr.Node.isClassDeclaration(e)||hr.Node.isInterfaceDeclaration(e)||hr.Node.isTypeAliasDeclaration(e)||hr.Node.isEnumDeclaration(e)||hr.Node.isVariableDeclaration(e)||hr.Node.isParameterDeclaration(e)||hr.Node.isPropertyDeclaration(e)||hr.Node.isGetAccessorDeclaration(e)||hr.Node.isSetAccessorDeclaration(e)}static spansOverlap(e,t,r,s){return e<s&&r<t}static sliceTargetText(e,t){return Nt(e,{start:t.start,end:t.end},t.lang)}static toCharOffset(e,t,r){return rs(e,r,t.lang)}static buildSoftFailResult(e,t){return{success:!0,changes:{summary:"No changes applied (soft-fail).",count:0},details:{changedFiles:[]},warnings:[t]}}static commentPrefixForLang(e){return e==="clojure"?"#_":e==="python"?"#":"//"}static deletedRefMarkerForLang(e,t){let r=(t||"ref").replace(/[^A-Za-z0-9_$-]/g,"_");return e==="clojure"?`#_[:pando/manual-review "DELETED_REF_${r}"]`:`${this.commentPrefixForLang(e)} $$$DELETED_REF_${r}$$$`}static stripDeletedRefMarkers(e){return e.replace(/\$\$\$DELETED_REF_[A-Za-z0-9_\$-]+\$\$\$/g,"").replace(/#_\s*\[:pando\/manual-review\s+"DELETED_REF_[A-Za-z0-9_\$-]+"\]/g,"")}static sanitizeMarkerName(e,t){return(e||t||"ref").trim().replace(/[^A-Za-z0-9_$-]/g,"_")||t}static charOffsetToByteOffset(e,t){let r=Math.max(0,Math.min(t,e.length));return Buffer.byteLength(e.slice(0,r),"utf8")}static buildTsDeleteMarker(e,t="ref"){return`/* $$$DELETED_REF_${this.sanitizeMarkerName(e,t)}$$$ */`}static isClojureSymbolChar(e){return!!e&&/[A-Za-z0-9*+!_?.<>=-]/.test(e)}static expandClojureDeleteSpan(e,t,r){let s=t,i=r;for(;s>0;){let a=e[s-1];if(a==="/"||this.isClojureSymbolChar(a)){s-=1;continue}break}for(;i<e.length;){let a=e[i];if(a==="/"||this.isClojureSymbolChar(a)){i+=1;continue}break}if(e.slice(Math.max(0,s-2),s)==="#'")s-=2;else{let a=s>0?e[s-1]:"";(a==="'"||a==="@")&&(s-=1)}return{start:s,end:i}}static expandCsharpEnumMemberDeleteSpan(e,t,r){let s=e.lastIndexOf(`
|
|
807
|
+
`).run(s,t.start,t.end,t.lang,r,a,c)}finally{try{l.close()}catch{}}}catch{return}}static async executeViaCsharpDb(e,t,r,s){if(!r?.fileAbs)return null;try{let i=Pe(r.fileAbs),a=(await Br(t.projectRoot,e.to))?.text??Nt(i,{start:r.start,end:r.end},r.lang),c=s.startsWith("@")?s:`@${s}`,l=et(e.to,a),u=on(c,l);if(u.type!=="MATCH")return{success:!1,error:`Hash mismatch (${u.type}). Re-run find-nodes to refresh the target.`};let d=/\(\s*this\b/.test(a),p=Ln(t.projectRoot,0),f=Sn(t.projectRoot,r.fileAbs,r.start,r.end),m=f?.symbolKey??null,h=f?.nodeId??null,g=f?.name??null,y=f?.fileRel??An.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/");if(!m&&h==null&&!g)return null;let b=[],{clause:S,params:_}=this.buildReferenceRelTypeFilter(e.relType),R=Number(e.limit??this.DEFAULT_LIMIT),E=Number(e.offset??0),T={limit:Math.max(1,Math.min(this.MAX_LIMIT,Number.isFinite(R)?R:this.DEFAULT_LIMIT)),offset:Math.max(0,Number.isFinite(E)?E:0)};try{let x=await this.collectDbReferenceResults(t,{symbolKey:m,nodeId:h,sameFileRel:y,sameFileName:g,includeSameFileFallback:!!g&&f?.isExported===0,sameFileFallbackOnlyWhenEmpty:!1,narrowName:g,paramCount:f?.paramCount??null,allowImplicitReceiverArity:d},S,_,T,m?[p]:void 0),w=ad(t.projectRoot,y,r.start,r.end,g);return this.buildDbReferenceResult(e,x.results,b,{fileRel:y,start:w.start,end:w.end},!1,x.truncated)}catch{return null}}catch{return null}}}});var CP={};Lt(CP,{getFileModificationTime:()=>bz,hasFileBeenModifiedSince:()=>yz,processFilesInBatches:()=>gz,saveFileWithTimestamp:()=>Qn,saveFilesWithTimestamps:()=>mz,touchFileWithTimestamp:()=>PP,touchFilesWithTimestamp:()=>hz});function Qn(n){n.saveSync();let e=n.getFilePath();return PP(e)}function PP(n){let e=Date.now(),t=new Date(e);try{(0,Gc.utimesSync)(n,t,t),console.log(`[FileOps] Updated timestamp for ${TP.basename(n)} to ${e}`)}catch(r){console.log(`[FileOps] Failed to update timestamp for ${n}:`,r)}return e}function mz(n){let e=new Map;for(let t of n){let r=Qn(t);e.set(t.getFilePath(),r)}return e}function hz(n){let e=Date.now(),t=new Date(e),r=0,s=0;for(let i of n)try{(0,Gc.utimesSync)(i,t,t),r++}catch{s++}try{let i=r+s;console.log(`[FileOps] Updated timestamps for ${r}/${i} files to ${e}`)}catch{}return e}async function gz(n,e,t){let r=[],s=new Em.Project({useInMemoryFileSystem:!0,compilerOptions:{allowJs:!0,jsx:Em.ts.JsxEmit.React,skipLibCheck:!0,skipDefaultLibCheck:!0}});for(let i=0;i<n.length;i+=e){let o=n.slice(i,i+e),a=await t(s,o);r.push(a);let c=s.getSourceFiles();for(let l of c){try{l.forget?.()}catch{}try{s.removeSourceFile(l)}catch{}}try{s.resetProgram?.()}catch{}}return r}function yz(n,e){try{return(0,Gc.statSync)(n).mtimeMs>e}catch{return!1}}function bz(n){try{return(0,Gc.statSync)(n).mtimeMs}catch{return null}}var Em,Gc,TP,vo=ne(()=>{"use strict";Em=require("ts-morph"),Gc=require("fs"),TP=q(require("path"))});function IP(n,e){return n?Ca.default.isAbsolute(n)?Ca.default.resolve(n):Ca.default.resolve(e,n):e}function Pa(n,e){X("ReferenceEditPipeline",n,e)}function ld(n,e){let t=an(n,e);if(!t||!t.lang||t.lang==="ts"||t.lang==="js")return Pa("getDbCandidateFilesForTarget.skip",{targetPath:n,projectRoot:e,parsed:t?{lang:t.lang,start:t.start,end:t.end,fileAbs:t.fileAbs}:null,reason:"not-db-backed-language"}),null;let r=Sn(e,t.fileAbs,t.start,t.end);if(!r)return Pa("getDbCandidateFilesForTarget.miss",{targetPath:n,projectRoot:e,file:Ca.default.relative(e,t.fileAbs).replace(/\\/g,"/"),span:{start:t.start,end:t.end}}),null;let s=new Set;try{let o=new Mt(e);if(r.symbolKey)for(let c of o.findCandidateFilesForTargetSymbolKey(r.symbolKey))c&&s.add(String(c).replace(/\\/g,"/"));let a=r.name?String(r.name).trim():"";if(a)for(let c of o.findCandidateFilesForSymbol(a))c&&s.add(String(c).replace(/\\/g,"/"))}catch{return null}if(s.size===0)return Pa("getDbCandidateFilesForTarget.empty",{targetPath:n,projectRoot:e,target:{symbolKey:r.symbolKey??null,nodeId:r.nodeId??null,name:r.name??null},complete:!1}),null;let i={files:Array.from(s),complete:!1};return Pa("getDbCandidateFilesForTarget.hit",{targetPath:n,projectRoot:e,target:{symbolKey:r.symbolKey??null,nodeId:r.nodeId??null,name:r.name??null},complete:!1,candidateCount:i.files.length,sample:i.files.slice(0,10)}),i}async function as(n,e,t,r,s){let i=ld(n,r.projectRoot);Pa("collectReferenceEditLocations.begin",{targetPath:n,expectedHash:e,projectRoot:r.projectRoot,options:{includeDeclaration:t.includeDeclaration,includeStrings:!!t.includeStrings,includeComments:!!t.includeComments,forceLsp:t.forceLsp===!0,boundary:t.boundary??null,relType:t.relType??null,sort:t.sort??null},candidates:i?{count:i.files.length,complete:i.complete===!0,sample:i.files.slice(0,10)}:null});let o={op:"find-references",to:n,expectedHash:e,includeDeclaration:t.includeDeclaration,includeStrings:!!t.includeStrings,includeComments:!!t.includeComments,forceLsp:t.forceLsp===!0,boundary:t.boundary,relType:t.relType,sort:t.sort,__collectAll:!0};i?.files?.length&&(o.dbCandidateFiles=i.files,o.dbCandidateFilesComplete=i.complete===!0);let a=await Ta.execute(o,r,s);if(!a?.success)return Pa("collectReferenceEditLocations.failure",{targetPath:n,expectedHash:e,error:a?.error??null,details:a?.details??null}),{success:!1,error:a?.error,details:a?.details};let c=Array.isArray(a.results)?a.results:[];Pa("collectReferenceEditLocations.result",{targetPath:n,expectedHash:e,totalCount:Number(a?.page?.totalCount??c.length),collectedCount:c.length,warnings:Array.isArray(a?.warnings)?a.warnings:[],sample:c.slice(0,10).map(d=>({file_path:d?.file_path||d?.filePath||null,start:d?.start??null,end:d?.end??null,isDefinition:!!d?.isDefinition,relationshipType:d?.relationshipType??null,sourceToken:d?.sourceToken??null,prefixText:d?.prefixText??null,suffixText:d?.suffixText??null}))});let l=[],u=c;for(let d of u){let p=d?.file_path||d?.filePath;if(typeof p!="string")continue;let f=Number(d?.start),m=Number(d?.end);!Number.isFinite(f)||!Number.isFinite(m)||m<f||l.push({file:p,start:f,length:m-f,prefixText:d?.prefixText??void 0,suffixText:d?.suffixText??void 0,isDefinition:!!d?.isDefinition,sourceToken:d?.sourceToken??void 0,sourceKind:d?.sourceKind??void 0,relationshipType:d?.relationshipType??void 0,metadata:d?.metadata??void 0})}return{success:!0,locations:l}}function Fs(n,e){let t=new Set,r=[];for(let s of n){let i=IP(s.file,e),o=(()=>{if(typeof s.metadata=="string")return s.metadata;if(s.metadata==null)return"";try{return JSON.stringify(s.metadata)}catch{return""}})(),a=`${i}:${s.start}:${s.length}:${s.prefixText??""}:${s.suffixText??""}:${s.isDefinition?"1":"0"}:${o}`;t.has(a)||(t.add(a),r.push({...s,file:i}))}return r.sort((s,i)=>s.file===i.file?s.start-i.start:s.file.localeCompare(i.file)),r}function Pm(n,e){let t=new Map;for(let s of n){let i=IP(s.file,e.projectRoot),o=t.get(i)||[];o.push({...s,file:i}),t.set(i,o)}let r=new Set;for(let[s,i]of t){if(!Tm.default.existsSync(s))continue;try{e.context.ls.ensureInProgram(s)}catch{}let o=e.project.getSourceFile(s)||e.project.addSourceFileAtPath(s),a=e.batchSaves===!0&&o?o.getFullText():Tm.default.readFileSync(s,"utf8");i.sort((c,l)=>l.start-c.start);for(let c of i){let l=c.start+c.length;if(c.start<0||l>a.length||l<c.start)throw new Error(`Invalid text edit span for ${Ca.default.relative(e.projectRoot,s)} (${c.start}-${l}).`);a=a.slice(0,c.start)+c.replacement+a.slice(l)}o?(o.replaceWithText(a),e.batchSaves!==!0&&Qn(o),e.context.ls.bump(s)):Tm.default.writeFileSync(s,a,"utf8"),r.add(Ca.default.relative(e.projectRoot,s).replace(/\\/g,"/"))}return{changedFiles:Array.from(r)}}function AP(n,e,t){let r=Number(e?.limit??t),s=Number(e?.offset??0),i=Math.max(0,s),o=Math.max(1,Math.min(100,r)),a=n.length,c=n.slice(i,i+o),l=i+c.length<a,u=[];return r!==o&&u.push("page.limit capped to 100"),s!==i&&u.push("page.offset adjusted to be >= 0"),{pageSlice:c,totalCount:a,limit:o,offset:i,hasMore:l,warnings:u}}var Tm,Ca,Cm=ne(()=>{"use strict";Tm=q(require("fs")),Ca=q(require("path"));aS();vo();kr();Ns();gt();ki()});var hr,Os,Wn,Ro,NP=ne(()=>{"use strict";hr=require("ts-morph"),Os=q(require("fs")),Wn=q(require("path"));qn();Xn();ts();kr();Ns();ka();Cm();Ro=class n{static isReferenceBearingTsDeleteTarget(e){return hr.Node.isIdentifier(e)||hr.Node.isFunctionDeclaration(e)||hr.Node.isMethodDeclaration(e)||hr.Node.isConstructorDeclaration(e)||hr.Node.isClassDeclaration(e)||hr.Node.isInterfaceDeclaration(e)||hr.Node.isTypeAliasDeclaration(e)||hr.Node.isEnumDeclaration(e)||hr.Node.isVariableDeclaration(e)||hr.Node.isParameterDeclaration(e)||hr.Node.isPropertyDeclaration(e)||hr.Node.isGetAccessorDeclaration(e)||hr.Node.isSetAccessorDeclaration(e)}static spansOverlap(e,t,r,s){return e<s&&r<t}static sliceTargetText(e,t){return Nt(e,{start:t.start,end:t.end},t.lang)}static toCharOffset(e,t,r){return rs(e,r,t.lang)}static buildSoftFailResult(e,t){return{success:!0,changes:{summary:"No changes applied (soft-fail).",count:0},details:{changedFiles:[]},warnings:[t]}}static commentPrefixForLang(e){return e==="clojure"?"#_":e==="python"?"#":"//"}static deletedRefMarkerForLang(e,t){let r=(t||"ref").replace(/[^A-Za-z0-9_$-]/g,"_");return e==="clojure"?`#_[:pando/manual-review "DELETED_REF_${r}"]`:`${this.commentPrefixForLang(e)} $$$DELETED_REF_${r}$$$`}static stripDeletedRefMarkers(e){return e.replace(/\$\$\$DELETED_REF_[A-Za-z0-9_\$-]+\$\$\$/g,"").replace(/#_\s*\[:pando\/manual-review\s+"DELETED_REF_[A-Za-z0-9_\$-]+"\]/g,"")}static sanitizeMarkerName(e,t){return(e||t||"ref").trim().replace(/[^A-Za-z0-9_$-]/g,"_")||t}static charOffsetToByteOffset(e,t){let r=Math.max(0,Math.min(t,e.length));return Buffer.byteLength(e.slice(0,r),"utf8")}static buildTsDeleteMarker(e,t="ref"){return`/* $$$DELETED_REF_${this.sanitizeMarkerName(e,t)}$$$ */`}static isClojureSymbolChar(e){return!!e&&/[A-Za-z0-9*+!_?.<>=-]/.test(e)}static expandClojureDeleteSpan(e,t,r){let s=t,i=r;for(;s>0;){let a=e[s-1];if(a==="/"||this.isClojureSymbolChar(a)){s-=1;continue}break}for(;i<e.length;){let a=e[i];if(a==="/"||this.isClojureSymbolChar(a)){i+=1;continue}break}if(e.slice(Math.max(0,s-2),s)==="#'")s-=2;else{let a=s>0?e[s-1]:"";(a==="'"||a==="@")&&(s-=1)}return{start:s,end:i}}static expandCsharpEnumMemberDeleteSpan(e,t,r){let s=e.lastIndexOf(`
|
|
808
808
|
`,Math.max(0,t-1))+1,i=e.indexOf(`
|
|
809
809
|
`,r),o=i===-1?e.length:i+1,a=e.slice(s,o),l=e.slice(t,r).replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`^\\s*${l}\\s*,?\\s*(?:\\r?\\n)?$`).test(a)?{start:s,end:o}:{start:t,end:r}}static expandStatementDeleteSpan(e,t,r){let s=Math.max(0,Math.min(t,e.length)),i=Math.max(s,Math.min(r,e.length)),o=s;for(;o>0;){let c=e[o-1];if(c===" "||c===" "){o-=1;continue}break}o>0&&e[o-1]!==`
|
|
810
810
|
`&&(o=s);let a=i;return a<e.length&&e[a]==="\r"&&(a+=1),a<e.length&&e[a]===`
|
|
811
811
|
`&&(a+=1),{start:o,end:a}}static expandCsharpFieldDeleteSpan(e,t,r){let s=e.lastIndexOf(`
|
|
812
812
|
`,Math.max(0,t-1))+1,i=e.indexOf(`
|
|
813
|
-
`,r),o=i===-1?e.length:i+1,a=e.slice(s,o),c=e.slice(t,r);return a.includes(c)?/^\s*(?:public|private|protected|internal|static|readonly|const|volatile|required|\s)+.+;\s*(?:\r?\n)?$/.test(a)?{start:s,end:o}:{start:t,end:r}:{start:t,end:r}}static shouldUseCsharpIdentifierFallback(e){let t=String(e?.kind||"").trim();return t==="VariableDeclarator"||t==="Field"||t==="PropertyDeclaration"||t==="Property"||t==="EnumMemberDeclaration"||t==="EnumMember"}static collectCsharpIdentifierFallbackLocations(e,t,r,s){let i=typeof r?.name=="string"?r.name.trim():"";if(!i)return[];let o=new Set,a=ld(t,e.projectRoot);for(let h of a?.files||[])h&&o.add(String(h).replace(/\\/g,"/"));r?.fileRel&&o.add(String(r.fileRel).replace(/\\/g,"/"));let c=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),l=new RegExp(`(?<![A-Za-z0-9_])${c}(?![A-Za-z0-9_])`,"g"),u=new Set(s.map(h=>`${Wn.default.resolve(h.file)}:${h.start}:${h.length}`)),d=[],p=Number(r?.start),f=Number(r?.end),m=r?.fileRel?Wn.default.resolve(e.projectRoot,String(r.fileRel).replace(/\\/g,"/")):null;for(let h of o){let g=Wn.default.resolve(e.projectRoot,h);if(!Os.default.existsSync(g))continue;let y=Pe(g);for(let b of y.matchAll(l)){let S=b.index??-1;if(S<0)continue;let _=Buffer.byteLength(y.slice(0,S),"utf8"),R=Buffer.byteLength(i,"utf8"),E=_+R;if(m&&g===m&&Number.isFinite(p)&&Number.isFinite(f)&&_>=p&&E<=f)continue;let T=`${g}:${_}:${R}`;u.has(T)||(u.add(T),d.push({file:g,start:_,length:R,isDefinition:!1,relationshipType:"reference"}))}}return d}static async executeViaLsp(e,t,r){let s=t.lsp;if(!s)return{success:!1,error:"delete requires an active LSP host for this language."};let i=new Map,o=new Set,a=Array.isArray(e.path)?e.path:[e.path];for(let l=0;l<a.length;l++){let u=a[l],d=r[l];if(!d)return{success:!1,error:`Unable to parse node path for ${u}.`,error_code:"resolve_failed"};let p=e.expectedHashes[l],f=Pe(d.fileAbs),m=this.sliceTargetText(f,d),h=p.startsWith("@")?p:`@${p}`;if(d.lang==="clojure"){let T=Ui(t.projectRoot,d.fileAbs,d.start,d.end,{plainPath:u,expectedHash:h,content:m});if(!T.target)return{success:!1,error:"Ambiguous Clojure target identity. Re-run find-nodes to refresh the target hash."};if(T.comparison?.type!=="MATCH")return{success:!1,error:`Hash mismatch (${T.comparison?.type??"FORMAT"}) for ${u}. Re-run find-nodes.`}}else{let T=et(u,m),x=on(h,T);if(x.type!=="MATCH")return{success:!1,error:`Hash mismatch (${x.type}) for ${u}. Re-run find-nodes.`}}let g=await s.documentSymbols(d.fileAbs),b=Hc(g,f,this.toCharOffset(f,d,d.start),this.toCharOffset(f,d,d.end))?.name||"UNKNOWN",_=`${this.commentPrefixForLang(d.lang??null)} $$$DELETED_REF_${b}$$$`,R=await as(u,p,{includeDeclaration:!0,forceLsp:!0},t,t.project);if(!R.success)return{success:!1,error:R.error||"find-references failed"};let E=Fs(R.locations,t.projectRoot);for(let T of E){let x=T.file,w=Number(T.start),D=Number(T.start+T.length);if(!Number.isFinite(w)||!Number.isFinite(D))continue;let F=Wn.default.relative(t.projectRoot,x).replace(/\\/g,"/"),N=an(`${F}#${w}-${D}:REF`,t.projectRoot),C=w,O=D;if(N&&N.lang&&N.lang!=="ts"&&N.lang!=="js"){let P=Pe(x);C=this.toCharOffset(P,N,w),O=this.toCharOffset(P,N,D)}if(x===d.fileAbs){let P=this.toCharOffset(f,d,d.start),A=this.toCharOffset(f,d,d.end);if(this.spansOverlap(C,O,P,A))continue}let M=i.get(x)||[];M.push({start:C,end:O,newText:_}),i.set(x,M)}}for(let[l,u]of i){if(!Os.default.existsSync(l))continue;let d=Pe(l);u.sort((p,f)=>f.start-p.start);for(let p of u)d=d.slice(0,p.start)+p.newText+d.slice(p.end);un(l,d),o.add(Wn.default.relative(t.projectRoot,l).replace(/\\/g,"/"))}let c=Array.from(o);return{success:!0,changes:{summary:`LSP delete applied. Files: ${o.size}`,count:o.size},details:{changedFiles:c}}}static async executeViaClojureDbDelete(e,t,r){let s=Array.isArray(e.path)?e.path:[e.path],i=Array.isArray(e.expectedHashes)?e.expectedHashes:[],o=e.forceDeleteReferencesMayBreakSyntax!==!1,a=new Set,c=[],l=[],u=e.batchSaves===!0,d=0,p=[];for(let m=0;m<s.length;m+=1){let h=s[m],g=i[m],y=an(h,t.projectRoot);if(!y||y.lang!=="clojure")return{success:!1,error:`Clojure target parse failed for ${h}`};let b=await Rm(t,h,y,g),S=await as(h,g,{includeDeclaration:!1,forceLsp:!1},t,r);if(!S.success)return{success:!1,error:`Clojure DB reference lookup failed; no deletes applied. ${S.error?`Reason: ${S.error}`:""}`.trim(),details:{changedFiles:Array.from(a)}};let _=Fs(S.locations,t.projectRoot);if(_.length>0&&!o)return{success:!1,error:`Delete blocked: ${_.length} references found for ${h}. Set forceDeleteReferencesMayBreakSyntax=true to proceed.`,details:{changedFiles:Array.from(a)}};let R=b.content,E=b.target?.name||b.target?.symbolKey?.split("/").pop()||Nt(R,{start:y.start,end:y.end},y.lang).trim().split(/\s+/)[0]||"ref",T=new Map,x=new Map;x.set(y.fileAbs,R);let w=new Set;for(let N of _){let C=N.file,O=N.start,M=N.start+N.length;if(C===y.fileAbs&&this.spansOverlap(O,M,b.declarationNameSpan.start,b.declarationNameSpan.end))continue;let P=x.get(C);P==null&&(P=Pe(C),x.set(C,P));let{start:A,end:v}=qc(P,{start:O,end:M},y.lang),I=this.expandClojureDeleteSpan(P,A,v),k=`${C}:${I.start}:${I.end}`;if(w.has(k))continue;w.add(k);let $=n.deletedRefMarkerForLang("clojure",E),L=T.get(C)||[];L.push({start:I.start,end:I.end,replacement:$}),T.set(C,L)}let D=T.get(y.fileAbs)||[];D.push({start:rs(R,y.start,y.lang),end:rs(R,y.end,y.lang),replacement:""}),T.set(y.fileAbs,D);for(let[N,C]of T){let O=x.get(N)??Pe(N);C.sort((M,P)=>P.start-M.start);for(let M of C)O=O.slice(0,M.start)+M.replacement+O.slice(M.end);un(N,O),a.add(Wn.default.relative(t.projectRoot,N).replace(/\\/g,"/"))}d+=1;let F=Wn.default.relative(t.projectRoot,y.fileAbs).replace(/\\/g,"/");if(a.has(F))try{let N=Os.default.readFileSync(y.fileAbs,"utf8");if(n.stripDeletedRefMarkers(N).replace(/\/\*[\s\S]*?\*\//g,"").replace(/(^|\s)\/\/.*$/gm,"").replace(/(^|\s)#.*$/gm,"").replace(/\s+/g,"").length===0)if(u)l.push(F);else{try{Os.default.unlinkSync(y.fileAbs)}catch{}c.push(F),a.delete(F)}}catch{}}let f=Array.from(a);return{success:!0,changes:{summary:`Deleted ${d} target${d!==1?"s":""}`,count:f.length},details:{deletedCount:d,changedFiles:f,deletedFiles:c,deletedFilesCandidates:l.length?l:void 0,receipt:{op:"delete",targets:s,changedFiles:f}},warnings:p.length?p:void 0}}static async executeViaDbNonTsDelete(e,t,r){let s=Array.isArray(e.path)?e.path:[e.path],i=Array.isArray(e.expectedHashes)?e.expectedHashes:[],o=e.forceDeleteReferencesMayBreakSyntax!==!1,a=new Set,c=[],l=[],u=e.batchSaves===!0,d=0,p=[];for(let m=0;m<s.length;m+=1){let h=s[m],g=i[m],y=an(h,t.projectRoot),b=y?.lang;if(!y||!b||b==="ts"||b==="js")return{fallbackToLsp:!1,result:{success:!1,error:`Non-TS target parse failed for ${h}`}};let S=Pe(y.fileAbs),_=this.sliceTargetText(S,y),R=g.startsWith("@")?g:`@${g}`;if(b==="clojure"){let M=Ui(t.projectRoot,y.fileAbs,y.start,y.end,{plainPath:h,expectedHash:R,content:_});if(!M.target)return{fallbackToLsp:!1,result:{success:!1,error:"Ambiguous Clojure target identity. Re-run find-nodes to refresh the target hash.",error_code:"resolve_failed"}};if(M.comparison?.type!=="MATCH")return{fallbackToLsp:!1,result:{success:!1,error:`Hash mismatch (${M.comparison?.type??"FORMAT"}) for ${h}. Re-run find-nodes.`,error_code:"resolve_failed"}}}else{let M=et(h,_),P=on(R,M);if(P.type!=="MATCH")return{fallbackToLsp:!1,result:{success:!1,error:`Hash mismatch (${P.type}) for ${h}. Re-run find-nodes.`,error_code:"resolve_failed"}}}let E=await as(h,g,{includeDeclaration:!1,forceLsp:!1},t,r);if(!E.success)return{fallbackToLsp:!0,result:n.buildSoftFailResult(e,`${b} DB reference lookup failed; no deletes applied. ${E.error?`Reason: ${E.error}`:""}`.trim())};let T=Fs(E.locations,t.projectRoot);if(T.length>0&&!o)return{fallbackToLsp:!1,result:{success:!1,error:`Delete blocked: ${T.length} references found for ${h}. Set forceDeleteReferencesMayBreakSyntax=true to proceed.`,details:{changedFiles:Array.from(a)}}};let x=new Map,w=new Map;w.set(y.fileAbs,S);let D=Sn(t.projectRoot,y.fileAbs,y.start,y.end),F=D?.name||D?.symbolKey?.split("/").pop()||_.trim().split(/\s+/)[0]||"ref";b==="csharp"&&D&&this.shouldUseCsharpIdentifierFallback(D)&&T.length===0&&T.push(...this.collectCsharpIdentifierFallbackLocations(t,h,D,T));let N=[],C=[];for(let M of T){let P=M.file,A=w.get(P);A===void 0&&(A=Pe(P),w.set(P,A));let v=M.start,I=M.start+M.length,k=this.toCharOffset(S,y,y.start),$=this.toCharOffset(S,y,y.end);if(P===y.fileAbs&&this.spansOverlap(v,I,k,$))continue;let L=v,j=I,z=n.deletedRefMarkerForLang(b,F),U=M?.metadata;if(b==="csharp")if(U?.csharpEnclosingKind==="statement"&&typeof U.csharpEnclosingStart=="number"&&typeof U.csharpEnclosingEnd=="number"&&U.csharpEnclosingEnd>U.csharpEnclosingStart){let te=n.expandStatementDeleteSpan(A,U.csharpEnclosingStart,U.csharpEnclosingEnd);L=te.start,j=te.end,z=""}else o?(C.push({file:P,start:v,end:I}),z=n.buildTsDeleteMarker(F,F)):(N.push({file:P,start:v,end:I}),z=null);if(z===null)continue;let K=x.get(P)||[];K.some(te=>te.start===L&&te.end===j&&te.replacement===z)||(K.push({start:L,end:j,replacement:z}),x.set(P,K))}if(N.length>0){let M=N.slice(0,5).map(A=>`${Wn.default.relative(t.projectRoot,A.file).replace(/\\/g,"/")}@${A.start}-${A.end}`).join(", "),P=N.length>5?` (+${N.length-5} more)`:"";p.push(`Delete skipped ${N.length} expression-context reference(s) that cannot be removed without breaking syntax. Manual review required: ${M}${P}`)}if(C.length>0){let M=C.slice(0,5).map(A=>`${Wn.default.relative(t.projectRoot,A.file).replace(/\\/g,"/")}@${A.start}-${A.end}`).join(", "),P=C.length>5?` (+${C.length-5} more)`:"";p.push(`Delete marker-replaced ${C.length} C# expression-context reference(s) because forceDeleteReferencesMayBreakSyntax=true: ${M}${P}`)}{let M=x.get(y.fileAbs)||[],P=this.toCharOffset(S,y,y.start),A=this.toCharOffset(S,y,y.end);if(b==="csharp"&&D?.kind==="EnumMember"){let v=this.expandCsharpEnumMemberDeleteSpan(S,P,A);P=v.start,A=v.end}else if(b==="csharp"&&D?.kind==="Field"){let v=this.expandCsharpFieldDeleteSpan(S,P,A);P=v.start,A=v.end}M.push({start:P,end:A,replacement:""}),x.set(y.fileAbs,M)}for(let[M,P]of x){if(!Os.default.existsSync(M))continue;let A=w.get(M),v=A!==void 0?A:Pe(M);P.sort((I,k)=>k.start-I.start);for(let I of P){if(I.start<0||I.end<I.start||I.end>v.length)return{fallbackToLsp:!1,result:{success:!1,error:`Invalid reference span while deleting ${Wn.default.relative(t.projectRoot,M)} (${I.start}-${I.end}).`,details:{changedFiles:Array.from(a)}}};v=v.slice(0,I.start)+I.replacement+v.slice(I.end)}un(M,v),a.add(Wn.default.relative(t.projectRoot,M).replace(/\\/g,"/"))}d+=1;let O=Wn.default.relative(t.projectRoot,y.fileAbs).replace(/\\/g,"/");if(a.has(O))try{let M=Os.default.readFileSync(y.fileAbs,"utf8");if(n.stripDeletedRefMarkers(M).replace(/\/\*[\s\S]*?\*\//g,"").replace(/(^|\s)\/\/.*$/gm,"").replace(/(^|\s)#.*$/gm,"").replace(/\s+/g,"").length===0)if(u)l.push(O);else{try{Os.default.unlinkSync(y.fileAbs)}catch{}c.push(O),a.delete(O)}}catch{}}if(d===0)return{fallbackToLsp:!0,result:n.buildSoftFailResult(e,"DB/span delete found no targets to modify.")};let f=Array.from(a);return{fallbackToLsp:!1,result:{success:!0,changes:{summary:`Deleted ${d} target${d!==1?"s":""}`,count:f.length},details:{deletedCount:d,changedFiles:f,deletedFiles:c,deletedFilesCandidates:l.length?l:void 0,receipt:{op:"delete",targets:s,changedFiles:f}},warnings:p}}}static async execute(e,t,r){if(e?.asOf)return{success:!1,error:"delete does not support asOf (time-travel edits are not supported). Restore a snapshot first if needed."};if(!e||!e.path)return{success:!1,error:'Missing required parameter: "path"'};if(typeof e.dryRun<"u"||typeof e.softDelete<"u")return{success:!1,error:"Please use restore-snapshot after any operation to undo it"};if(!e.expectedHashes)return{success:!1,error:'Missing required parameter: "expectedHashes"'};if(!Array.isArray(e.expectedHashes))return{success:!1,error:'Parameter type error: "expectedHashes" must be an array'};for(let b=0;b<e.expectedHashes.length;b++)if(typeof e.expectedHashes[b]!="string"||e.expectedHashes[b].includes("@"))return{success:!1,error:`Invalid expectedHashes[${b}]: must be the hash portion only without '@' (e.g., 'p12345678:c987654321')`};let s=e.forceDeleteReferencesMayBreakSyntax===!0;if(!s)return{success:!1,error:"Delete requires forceDeleteReferencesMayBreakSyntax=true for mutating runs because references may need marker replacement.",details:{changedFiles:[]}};let i=Array.isArray(e.path)?e.path:[e.path],o=Array.isArray(e.expectedHashes)?e.expectedHashes:[];if(i.length===0)return{success:!1,error:"Delete requires at least one path."};if(i.length>10)return{success:!1,error:`Delete accepts at most 10 targets per call; received ${i.length}.`};for(let b=0;b<i.length;b+=1)if(typeof i[b]!="string"||!i[b].trim())return{success:!1,error:`Invalid path${Array.isArray(e.path)?`[${b}]`:""}: must be a non-empty string.`};if(o.length!==i.length)return{success:!1,error:`Hash count mismatch: ${i.length} paths but ${o.length} hashes`};let a=i.map(b=>an(b,t.projectRoot));if(a.every(b=>b?.lang==="clojure"))return await this.executeViaClojureDbDelete(e,t,r);if(a.every(b=>b?.lang&&!["ts","js"].includes(b.lang))){let b=await this.executeViaDbNonTsDelete(e,t,r);if(b.result.success||!b.fallbackToLsp||!t.lsp)return b.result;try{let S=await this.executeViaLsp(e,t,a);if(!S?.success){let _=a[0]?.lang||"non-ts";return{...b.result,warnings:[...b.result?.warnings||[],`${_} LSP fallback failed; no additional deletes applied. ${S?.error?`Reason: ${S.error}`:""}`.trim()]}}return{...S,warnings:[...S.warnings||[],"delete used LSP fallback because DB/span path did not complete."]}}catch(S){let _=a[0]?.lang||"non-ts";return{...b.result,warnings:[...b.result?.warnings||[],`${_} LSP fallback threw; no additional deletes applied. ${S?.message||String(S)}`]}}}if(i.length>1){let b=i.map((_,R)=>{let E=o[R],T=`${_}@${E}`,x=es(T,r,t.projectRoot);return x?{path:_,hash:E,orderFile:x.getSourceFile().getFilePath(),orderStart:x.getStart(!1)}:{path:_,hash:E,orderFile:"",orderStart:-1,error:{success:!1,error:"Target declaration not found (hash or path mismatch)",error_code:"resolve_failed",details:{deletedCount:0,failedAt:{pathWithHash:T,reason:"target_resolution_failed"},suggestion:"Use find-nodes with include.body to refresh path@hash and retry",changedFiles:[]}}}}),S=b.find(_=>_.error);if(S?.error)return S.error;b.sort((_,R)=>{let E=_.orderFile.localeCompare(R.orderFile);return E!==0?E:R.orderStart-_.orderStart}),i=b.map(_=>_.path),o=b.map(_=>_.hash)}try{Xe.info("[DeleteV4] Starting delete operation",{force:s,targets:i.length})}catch{}let u=0,d=0,p=new Set,f=[];for(let b=0;b<i.length;b++){let S=i[b],_=o[b];if(!_)return{success:!1,error:`Missing expectedHash for path index ${b}`};console.log(`[DeleteV4] Processing target ${S} with hash ${_}`);try{let M=S.split("#")[0],P=Wn.default.isAbsolute(M)?M:Wn.default.join(t.projectRoot,M);t.ls.ensureInProgram(P)}catch(M){Xe.warn("[DeleteV4] ensureInProgram failed",{targetPath:S,message:M?.message||String(M)})}let R=`${S}@${_}`,E=es(R,r,t.projectRoot);if(!E)return{success:!1,error:"Target declaration not found (hash or path mismatch)",error_code:"resolve_failed",details:{deletedCount:u,failedAt:{pathWithHash:R,reason:"target_resolution_failed"},suggestion:"Use find-nodes with include.body to refresh path@hash and retry",changedFiles:Array.from(p)}};let x=E.getSourceFile().getFilePath(),w=E.getStart(!1),D=E.getEnd(),F="declaration";hr.Node.isIdentifier(E)?F=E.getText():hr.Node.hasName(E)&&(F=E.getName());let N=[];if(this.isReferenceBearingTsDeleteTarget(E)){let M=await as(S,_,{includeDeclaration:!1},t,r);if(!M.success)return{success:!1,error:M.error||"find-references failed",details:{deletedCount:u,failedAt:{pathWithHash:R,reason:"find_references_failed"},suggestion:"Refresh target via find-nodes with include.body and retry delete with expectedHashes.",...M.details?{inner:M.details}:{}}};N=Fs(M.locations,t.projectRoot).filter(P=>!(P.file===x&&P.start>=w&&P.start+P.length<=D))}try{Xe.info("[DeleteV4] References accumulated",{count:N.length})}catch{}let C=e.batchSaves===!0,O=N.map(M=>({...M,replacement:n.buildTsDeleteMarker(M.sourceToken,F)}));O.push({file:x,start:w,length:D-w,replacement:"",isDefinition:!0,sourceToken:F,sourceKind:E.getKindName()});try{let M=Pm(O,{projectRoot:t.projectRoot,project:r,context:t,batchSaves:C}).changedFiles;for(let P of M)p.add(P);d+=M.length;for(let P of N)f.push({file:Wn.default.relative(t.projectRoot,P.file).replace(/\\/g,"/"),start:P.start,end:P.start+P.length,relationshipType:P.relationshipType,sourceToken:P.sourceToken,sourceKind:P.sourceKind});try{Xe.info("[DeleteV4] Deleted declaration",{name:F})}catch{}u++}catch(M){return{success:!1,error:`Failed to delete target: ${M?.message||M}`,details:{deletedCount:u,failedAt:{pathWithHash:R,reason:"text_edit_apply_failed"},failure:{message:M?.message,stack:M?.stack,file:x,start:w,end:D,expectedKind:E.getKindName()},changedFiles:Array.from(p)}}}}let m=[],h=[],g=e.batchSaves===!0;try{for(let b of Array.from(p))try{let S=Wn.default.isAbsolute(b)?b:Wn.default.join(t.projectRoot,b);if(!Os.default.existsSync(S)||!Os.default.statSync(S).isFile())continue;let _=Os.default.readFileSync(S,"utf8");if(n.stripDeletedRefMarkers(_).replace(/\/\*[\s\S]*?\*\//g,"").replace(/(^|\s)\/\/.*$/gm,"").replace(/(^|\s)#.*$/gm,"").replace(/\s+/g,"").length===0){let D=Wn.default.relative(t.projectRoot,S).replace(/\\/g,"/");if(g)h.push(D);else{try{Os.default.unlinkSync(S)}catch{}try{let F=r.getSourceFile(S);F&&r.removeSourceFile(F)}catch{}m.push(D)}}}catch{}}catch{}let y=Array.from(p);return{success:!0,changes:{summary:`Deleted ${u} target${u!==1?"s":""}`,count:d},details:{deletedCount:u,changedFiles:y,changedFileCount:y.length,deletedFiles:m,deletedFilesCandidates:h.length?h:void 0,receipt:{op:"delete",targets:i,changedFileCount:y.length,appliedReferences:f,failedReferences:[]}}}}}});function Sz(n,e){let t=ti.default.resolve(n),r=ti.default.join(t,"tsconfig.json"),s=e?ti.default.dirname(e):t,i;try{i=Ia.default.findConfigFile(s,Ia.default.sys.fileExists,"tsconfig.json")??void 0}catch{i=void 0}if(!i&&lS.default.existsSync(r)&&(i=r),i)try{let o=Ia.default.readConfigFile(i,Ia.default.sys.readFile),a={...o.config||{},compilerOptions:{...o.config&&o.config.compilerOptions||{},allowJs:!0}};return{compilerOptions:{...Ia.default.parseJsonConfigFileContent(a,Ia.default.sys,ti.default.dirname(i)).options,...Us.getSupportedEditCompilerOptions()},configUsed:i}}catch{}return{compilerOptions:{...MP},configUsed:null}}function DP(n){let e=[],t=ti.default.resolve(n.projectRoot),r=new Set,s=t.endsWith(ti.default.sep)?t:`${t}${ti.default.sep}`;for(let u of n.requiredFiles??[]){let d=ti.default.isAbsolute(u)?ti.default.resolve(u):ti.default.resolve(t,u);d.startsWith(s)&&r.add(d)}if(!r.size)return{project:new cS.Project({compilerOptions:{...MP},skipAddingFilesFromTsConfig:!0}),loadedFiles:[],configUsed:null,warnings:["Scoped project requested with no files; returning empty project."]};let i=Array.from(r)[0],{compilerOptions:o,configUsed:a}=Sz(t,i),c=new cS.Project({compilerOptions:o,skipAddingFilesFromTsConfig:!0}),l=[];for(let u of r)try{if(!lS.default.existsSync(u)){e.push(`Required file missing on disk: ${u}`);continue}c.getSourceFile(u)||c.addSourceFileAtPath(u),l.push(u)}catch(d){e.push(`Failed to add ${u}: ${d?.message||String(d)}`)}return{project:c,loadedFiles:l,configUsed:a,warnings:e}}var cS,ti,lS,Ia,MP,FP=ne(()=>{"use strict";cS=require("ts-morph"),ti=q(require("path")),lS=q(require("fs")),Ia=q(require("typescript"));Gl();MP=Us.getDefaultCompilerOptions()});function xz(n,e){if(!n)return!1;switch(e){case"exact":return n==="exact";case"heuristic":return n==="exact"||n==="heuristic";case"dynamic":return n==="exact"||n==="heuristic"||n==="dynamic";default:return!1}}async function OP(n,e,t){let r=e.target;if(!r)return null;let s=r.name||r.symbolKey?.split("/").pop()||null;if(!s)return null;let i=Yb(n.projectRoot,r),o=new Set([e.relFile]);for(let d of i.namespaces)for(let p of Au(n.projectRoot,d)??[])o.add(String(p||"").replace(/\\/g,"/"));let a=new Mt(n.projectRoot);for(let d of i.symbolKeys)for(let p of a.findCandidateFilesForTargetSymbolKey(d))o.add(String(p||"").replace(/\\/g,"/"));for(let d of i.names.size?i.names:new Set([s]))for(let p of a.findCandidateFilesForSymbol(d))o.add(String(p||"").replace(/\\/g,"/"));let c=[],l=[],u=new Set;try{let d=await rd(n.projectRoot,Array.from(o),{relTypes:["call"]});for(let p of d.rows){let f=String(p.file_path||"").replace(/\\/g,"/");if(!f||!o.has(f)||!xz(p.confidence,t)||!lm(p,r,i))continue;let m=cm(p,Number(p.start_pos),Number(p.end_pos),"head"),h=`${f}#${m.start}-${m.end}:REF`;if(u.has(h))continue;u.add(h);let g=a.getEnclosingFunction(f,m.start,m.end,void 0,"clojure")||void 0;c.push({file_path:f,start:m.start,end:m.end,relationshipType:"call",caller_decl_id:g,ref_name:p.ref_name??null,confidence:p.confidence})}}catch{return null}return c.length>0?{references:c,warnings:l}:null}var $P=ne(()=>{"use strict";ki();Vs();um();eS();sd()});var uS={};Lt(uS,{ensureSnapshotExists:()=>_z});function _z(n,e){if(e)try{let{openSnapshotsDb:t}=(wi(),be(_o)),r=t(n,{readonly:!0});try{if(!r.prepare("SELECT 1 FROM snapshots WHERE snapshot_id = ? LIMIT 1").get(e))throw new Error(`Unknown snapshotId: ${e}`)}finally{try{r.close()}catch{}}}catch(t){let r=t?.message||String(t);throw/Unknown snapshotId/.test(r)?t:new Error(`Unknown snapshotId: ${e}`)}}var dS=ne(()=>{"use strict"});var LP={};Lt(LP,{resolveTargetAtSnapshot:()=>wz});function wz(n,e,t,r){try{let[s,i]=String(t).split("#");if(!s||!i)return null;let{openSnapshotsDb:o}=(wi(),be(_o)),a=o(n,{readonly:!0});try{let{computeEffectiveMap:c}=(ei(),be(Zi)),d=c(a,String(e)).get(s)?.oid;if(!d)return null;let p=require("fs"),f=require("zlib"),m=jP.join(co(n),".git","objects",d.slice(0,2),d.slice(2)),h=p.readFileSync(m),g=f.inflateSync(h),y=g.indexOf(0),S=g.slice(y+1).toString("utf8"),{Project:_}=require("ts-morph"),E=new _({useInMemoryFileSystem:!0}).createSourceFile(s,S,{overwrite:!0}),{resolvePositionPath:T}=(Hi(),be(Fb)),x=T(i,E);if(!x){if(r){let N=E.getDescendants?.()||[];for(let C of N)try{let O=C.getName?.();if(O&&O===r){let M=C.getStart?.(),P=C.getEnd?.();if(typeof M=="number"&&typeof P=="number")return{name:O,start:M,end:P}}}catch{}}return null}let w;try{let N=x.getNameNode?.();w=N&&N.getText?N.getText():x.getName?.()||void 0}catch{}let D=x.getStart?.(),F=x.getEnd?.();return{name:w,start:D,end:F}}finally{try{a.close()}catch{}}}catch{return null}}var jP,zP=ne(()=>{"use strict";jP=q(require("path"));Vt()});function Rz(n){let e=n.indexOf("#");if(e<0)return null;let t=n.slice(e+1),r=t.lastIndexOf(":");return r<0?null:t.slice(r+1).trim()||null}function kz(n){return n?vz.has(n):!1}async function ud(n,e,t,r){let s=await qr(n,e);if(s?.text)return s.text;let i=r??(t?.fileAbs?Pe(t.fileAbs):"");return t?.lang&&t.lang!=="ts"&&t.lang!=="js"?ss(i,t.start,t.end):i.slice(t?.start??0,t?.end??0)}function Ez(){return["python3","python","python2"]}function Aa(n,e,t,r){let s=!!e.aggregate,i=e.sort,o=r.truncated?void 0:n.length,a=(i?.direction||"asc").toLowerCase()==="desc"?-1:1;if(s){let d=new Map;for(let g of n){let y=g.caller_decl_id||g.source_ref_id;d.set(y,(d.get(y)||0)+1)}let p=Array.from(d.entries()).map(([g,y])=>({path:g,count:y}));i?.by==="count"?p.sort((g,y)=>a*(g.count-y.count||g.path.localeCompare(y.path))):p.sort((g,y)=>a*g.path.localeCompare(y.path));let f=r.truncated?void 0:p.length,m=p.slice(r.offset,r.offset+r.limit),h=r.truncated?!0:r.offset+m.length<(f??0);return{success:!0,results:m,page:{limit:r.limit,offset:r.offset,hasMore:h,...f!==void 0&&{totalCount:f}},warnings:t.length?t:void 0}}let c=[...n];i?.by==="start"?c.sort((d,p)=>{let f=Nm(d.source_ref_id),m=Nm(p.source_ref_id);if(f!==m)return a*(f-m);let h=a*Am(d.source_ref_id).localeCompare(Am(p.source_ref_id));return h!==0?h:a*(d.depth-p.depth)}):c.sort((d,p)=>{let f=a*Am(d.source_ref_id).localeCompare(Am(p.source_ref_id));if(f!==0)return f;let m=a*(Nm(d.source_ref_id)-Nm(p.source_ref_id));return m!==0?m:a*(d.depth-p.depth)});let l=c.slice(r.offset,r.offset+r.limit).map(d=>({source_ref_id:d.source_ref_id,caller_decl_id:d.caller_decl_id,relationshipType:d.relationshipType,depth:d.depth})),u=r.truncated?!0:r.offset+l.length<(o??0);return{success:!0,results:l,page:{limit:r.limit,offset:r.offset,hasMore:u,...o!==void 0&&{totalCount:o}},warnings:t.length?t:void 0}}function Cz(n){if(n==null)return{relTypes:new Set(["call","new"])};let e=String(n).trim().toLowerCase();return e==="all"?{relTypes:new Set(["call","new","type"])}:e==="call"||e==="new"||e==="type"?{relTypes:new Set([e])}:{relTypes:new Set,error:`Invalid relType '${n}'. Supported values: call, new, type, all.`}}function Iz(n){let e=typeof n=="string"?n.trim().toLowerCase():"";switch(e){case"call":case"new":case"type":return e;default:return null}}function Az(n,e){return typeof e.callerStart!="number"||typeof e.callerEnd!="number"||!e.callerKind?void 0:`${En.default.relative(n,e.file).replace(/\\/g,"/")}#${e.callerStart}-${e.callerEnd}:${Pt.getAbbrev(e.callerKind,"csharp")}`}function Nz(n,e){if(n==null)return 1;if(typeof n=="string"){let t=n.trim().toLowerCase();if(t==="all")return Number.POSITIVE_INFINITY;let r=Number(t);Number.isNaN(r)||(n=r)}if(typeof n=="number"&&Number.isFinite(n)){if(n<=1)return 1;let t=Math.min(Math.floor(n),10);return t!==n&&e.push("depth capped to 10 for stability."),t}return 1}function Mz(n){let e=n.getNameNode?.();if(e&&typeof e.getStart=="function")return e.getStart();let t=n.getName?.();if(t&&typeof t=="string"){let r=n.getFirstDescendant(s=>s.getText?.()===t);if(r)return r.getStart()}return null}function Dz(n){let e=n.getParent?.();if(!e)return null;if(e.getKind?.()===Wt.SyntaxKind.CallExpression&&e.getExpression?.()===n)return"call";if(e.getKind?.()===Wt.SyntaxKind.NewExpression&&e.getExpression?.()===n)return"new";if(e.getKind?.()===Wt.SyntaxKind.PropertyAccessExpression){let s=e.getParent?.();if(s?.getKind?.()===Wt.SyntaxKind.CallExpression&&s.getExpression?.()===e)return"call";if(s?.getKind?.()===Wt.SyntaxKind.NewExpression&&s.getExpression?.()===e)return"new"}let t=[Wt.SyntaxKind.TypeReference,Wt.SyntaxKind.ExpressionWithTypeArguments,Wt.SyntaxKind.TypeQuery,Wt.SyntaxKind.TypeAliasDeclaration,Wt.SyntaxKind.InterfaceDeclaration,Wt.SyntaxKind.ImportType];return n.getFirstAncestor?.(s=>t.includes(s.getKind?.()??-1))?"type":null}function Fz(n){let e=[],t=new Set(["call","new"]),r=Array.from(n.relTypes).filter(f=>t.has(f));if(n.relTypes.size&&r.length===0)return e.push("relType filter excludes supported call relationships in asOf mode (call/new). Returning empty set."),{callSites:[],warnings:e};let s=r.length?r:["call","new"],i=n.target.getNameNode?.(),o=i&&i.getText?i.getText():n.target.getName?.()||null;try{let{resolveTargetAtSnapshot:f}=(zP(),be(LP)),m=f(n.projectRoot,n.asOf,n.targetPath,o||void 0);m&&m.name&&(o=String(m.name))}catch{}if(!o)return{callSites:[],warnings:e};let a=[],c=Math.max(n.limitHint||0,250),l=new Mt(n.projectRoot),u=l.findReferenceSpansByName(o,n.asOf),d=[];for(let f of u){let m=String(f.ref_kind||"").toLowerCase();if(!s.includes(m))continue;let h=String(f.file_path||"").replace(/\\/g,"/");if(h&&(d.push({filePath:h,start_pos:f.start_pos,end_pos:f.end_pos,relKind:m}),d.length>=c))break}let p=l.getEnclosingFunctionBatch(d.map(f=>({file:f.filePath,start:f.start_pos,end:f.end_pos})),n.asOf,"python");for(let f of d){let m=p.get(`${f.filePath}\0${f.start_pos}\0${f.end_pos}`)||void 0;a.push({source_ref_id:`${f.filePath}#${f.start_pos}-${f.end_pos}:REF`,caller_decl_id:m,relationshipType:f.relKind||"call"})}return{callSites:a,warnings:e}}function Am(n){return n.split("#")[0]||n}function Nm(n){let e=n.indexOf("#");if(e===-1)return 0;let r=n.slice(e+1).split(":")[0]?.split("-")[0];return Number(r||0)}function Oz(n){let e=[],t=[],r=new Set,s=new Mt(n.projectRoot),i=new Map,o=m=>{let h=typeof m=="string"?m.trim():"";if(!h)return[];if(i.has(h))return i.get(h);let g=[];try{g=s.findCandidateFilesForSymbol(h)||[]}catch(S){e.push(`Candidate discovery failed for '${h}': ${S?.message||S}`)}let y=[],b=new Set;for(let S of g){let _=Kz(n.projectRoot,S);!_||b.has(_)||(y.push(_),b.add(_))}return i.set(h,y),y},a=BP(n.rootDeclaration,n.projectRoot,0);if(!a)return e.push("Unable to describe target declaration for traversal."),{callSites:t,warnings:e,truncated:!1};let c=new Map,l=[],u=m=>{let h=o(m.name).filter(g=>g!==m.absPath);return{descriptor:m,pendingFiles:[...h],processedFiles:new Set,cachedSites:[],fullyExpanded:!1}},d=(m,h)=>{let g=BP(m,n.projectRoot,h);if(!g||c.has(g.key))return;let y=u(g);c.set(g.key,y),l.push(y)},p=u(a);c.set(a.key,p),l.push(p);let f=!1;for(;l.length&&t.length<n.fetchTarget;){let m=l[0],h=!m.processedFiles.has(m.descriptor.absPath),g=jz(m,Pz-1);if(!h&&g.length===0){m.fullyExpanded=!0,l.shift();continue}if(Lz({state:m,candidateBatch:g,relTypes:n.relTypes,projectRoot:n.projectRoot,warnings:e,seenRefKeys:r,callSites:t,fetchTarget:n.fetchTarget,maxDepth:n.maxDepth,enqueueDeclaration:d}).truncated){f=!0;break}$z(m)||(m.fullyExpanded=!0,l.shift())}return{callSites:t,warnings:e,truncated:f}}function $z(n){return n.fullyExpanded?!1:n.processedFiles.has(n.descriptor.absPath)?n.pendingFiles.length>0:!0}function jz(n,e){if(e<=0)return[];let t=[];for(;n.pendingFiles.length&&t.length<e;){let r=n.pendingFiles.shift();n.processedFiles.has(r)||t.push(r)}return t}function Lz(n){let e=new Set([n.state.descriptor.absPath]);for(let c of n.candidateBatch)e.add(c);let t=DP({projectRoot:n.projectRoot,requiredFiles:e});n.warnings.push(...t.warnings);let r=t.project,s=zz(r,n.state.descriptor);if(!s)return n.warnings.push(`Unable to rehydrate declaration for ${n.state.descriptor.key}.`),pS(n.state,e),{truncated:!1};let i=WP(s);if(!i)return n.warnings.push(`Missing declaration name node for ${n.state.descriptor.key}.`),pS(n.state,e),{truncated:!1};let o=i.findReferencesAsNodes?.()??[],a=!1;for(let c of o){if(Hz(i,c))continue;let l=En.default.resolve(c.getSourceFile().getFilePath());if(!e.has(l)||n.state.processedFiles.has(l))continue;let u=Dz(c);if(!u||!n.relTypes.has(u))continue;let d=Wz(c,n.projectRoot);if(!d)continue;let{callerDeclId:p,callerNode:f}=Uz(c,n.projectRoot),m=`${p||""}|${d}`;if(n.seenRefKeys.has(m))continue;n.seenRefKeys.add(m);let h=n.state.descriptor.depth+1,g={source_ref_id:d,caller_decl_id:p,relationshipType:u,depth:h};if(n.callSites.push(g),n.state.cachedSites.push(g),n.callSites.length>=n.fetchTarget){a=!0;break}f&&u!=="type"&&(n.maxDepth===Number.POSITIVE_INFINITY||h<n.maxDepth)&&n.enqueueDeclaration(f,h)}return pS(n.state,e),{truncated:a}}function pS(n,e){for(let t of e)n.processedFiles.add(t)}function zz(n,e){let t=n.getSourceFile(e.absPath)||n.getSourceFile(e.relPath);if(!t&&typeof n.addSourceFileAtPathIfExists=="function"&&(t=n.addSourceFileAtPathIfExists(e.absPath)),!t)return;let r=t.getDescendantAtPos(e.start);for(;r&&(r.getStart()!==e.start||r.getEnd()!==e.end);)r=r.getParent();return r||t.getDescendants().find(i=>i.getStart()===e.start&&i.getEnd()===e.end)}function BP(n,e,t){let r=Bz(n,e);if(!r)return null;let s=En.default.resolve(n.getSourceFile().getFilePath()),i=En.default.relative(e,s).replace(/\\/g,"/");return{absPath:s,relPath:i,start:n.getStart(),end:n.getEnd(),depth:t,key:r,name:qz(n)}}function Bz(n,e){try{let t=En.default.resolve(n.getSourceFile().getFilePath()),r=En.default.relative(e,t).replace(/\\/g,"/"),s=n.getStart(),i=n.getEnd(),o=Pt.getAbbrev(n.getKindName());return`${r}#${s}-${i}:${o}`}catch{return null}}function WP(n){if(Wt.Node.isFunctionDeclaration(n)||Wt.Node.isMethodDeclaration(n)||Wt.Node.isClassDeclaration(n)||Wt.Node.isInterfaceDeclaration(n))return n.getNameNode();if(Wt.Node.isFunctionExpression(n)||Wt.Node.isArrowFunction(n)){let e=n.getParent();if(!e)return;if(Wt.Node.isVariableDeclaration(e)||Wt.Node.isPropertyAssignment(e)||Wt.Node.isPropertyDeclaration(e)||Wt.Node.isPropertySignature(e))return e.getNameNode?.()}}function qz(n){try{let e=n.getName?.();if(typeof e=="string"&&e.trim())return e.trim();let t=WP(n);if(t){let r=t.getText();if(r&&r.trim())return r.trim()}}catch{}return null}function Hz(n,e){try{return e.getSourceFile().getFilePath()===n.getSourceFile().getFilePath()&&e.getStart()===n.getStart()}catch{return!1}}function Wz(n,e){try{return`${En.default.relative(e,n.getSourceFile().getFilePath()).replace(/\\/g,"/")}#${n.getStart()}-${n.getEnd()}:REF`}catch{return null}}function Uz(n,e){let t=n.getFirstAncestor(r=>Wt.Node.isFunctionDeclaration(r)||Wt.Node.isMethodDeclaration(r)||Wt.Node.isFunctionExpression(r)||Wt.Node.isArrowFunction(r));if(!t)return{};try{let r=En.default.relative(e,t.getSourceFile().getFilePath()).replace(/\\/g,"/"),s=Pt.getAbbrev(t.getKindName());return{callerDeclId:`${r}#${t.getStart()}-${t.getEnd()}:${s}`,callerNode:t}}catch{return{callerNode:t}}}function Kz(n,e){if(typeof e!="string"||!e.trim())return null;let t=En.default.isAbsolute(e)?En.default.resolve(e):En.default.resolve(n,e),r=En.default.resolve(n),s=r.endsWith(En.default.sep)?r:`${r}${En.default.sep}`;return t===r||t.startsWith(s)?t:null}var Wt,qP,En,HP,vz,dd,Tz,Pz,Im,UP=ne(()=>{"use strict";Wt=require("ts-morph"),qP=require("url");ki();qn();En=q(require("path"));ts();FP();vs();Xn();HP=require("child_process");uu();kr();Ns();$P();ka();sd();Zc();vz=new Set(["Function","FunctionDeclaration","Constructor","ConstructorDeclaration","Method","MethodDeclaration","LocalFunctionStatement","ArrowFunction","FunctionExpression"]);dd=class{static buildCallerRelTypeFilter(e){let t=e.size?Array.from(e):["call","new"];return{clause:` AND k.text IN (${t.map(()=>"?").join(", ")})`,params:t}}static buildEmptyResult(e,t,r){let s=Number(e.limit??10),i=Number(e.offset??0),o=Math.max(0,i),a=Math.max(1,Math.min(100,s)),c=[...t];return s!==a&&c.push("limit capped to MAX_PAGE_SIZE"),i!==o&&c.push("offset adjusted to be >= 0"),r&&c.push(r),{success:!0,results:[],page:{limit:a,offset:o,hasMore:!1,totalCount:0},warnings:c.length?c:void 0}}static async execute(e,t,r){try{if(e.asOf){let{ensureSnapshotExists:E}=(dS(),be(uS));try{E(t.projectRoot,String(e.asOf))}catch(T){return{success:!1,error:T?.message||String(T)}}}if(!e.of)return{success:!1,error:"Target path (of) is required for find-callers operation"};if(typeof e.of=="string"&&e.of.includes("@"))return{success:!1,error:"of must not include @hash. Provide the node path only and pass the hash via expectedHash."};let s=Number(e.limit??10),i=Number(e.offset??0),o=Math.max(0,i),a=Math.max(1,Math.min(100,s)),c=[];s!==a&&c.push("limit capped to MAX_PAGE_SIZE"),i!==o&&c.push("offset adjusted to be >= 0");let l=e.expectedHash;if(typeof l!="string"||!l.trim()||l.includes("@"))return{success:!1,error:"expectedHash is required for find-callers and must omit the @ prefix."};let u=l.trim(),d=Cz(e.relType);if(d.error)return{success:!1,error:d.error};let p=d.relTypes,f=Nz(e.depth,c),m=e.asOf,h=an(e.of,t.projectRoot),g=h?.lang;if(g&&g!=="ts"&&g!=="js"){let E=Rz(e.of);if(!kz(E))return{success:!1,error:`find-callers requires a callable declaration; use find-references for ${E?E.toLowerCase():"non-callable targets"}.`}}if(g==="python"){if(!h)return{success:!1,error:"Unable to parse node path for python callers."};if(m){f>1&&f!==Number.POSITIVE_INFINITY?c.push("python callers currently support depth=1 in asOf mode; returning direct callers only."):f===Number.POSITIVE_INFINITY&&c.push('python callers currently support depth=1 in asOf mode; treating depth="all" as 1.');let x=Pe(h.fileAbs),w=await ud(t.projectRoot,e.of,h,x),D=u.startsWith("@")?u:`@${u}`,F=et(e.of,w),N=on(D,F);if(N.type!=="MATCH")return{success:!1,error:`Hash mismatch (${N.type}). Re-run find-nodes to refresh the target.`};let C=new Mt(t.projectRoot),O=C.getNodeName(e.of,m)||C.getNodeName(e.of);if(!O)return{success:!1,error:"Could not determine name of the target symbol."};let M=C.findReferenceSpansByName(O,m),P=[],A=Math.max(o+a+50,250);for(let v of M){let I=String(v.ref_kind||"").toLowerCase();if(p.size&&!p.has(I))continue;let k=String(v.file_path||"").replace(/\\/g,"/"),$=`${k}#${v.start_pos}-${v.end_pos}:REF`,L=C.getEnclosingFunction(k,v.start_pos,v.end_pos,m,"python")||void 0;if(P.push({source_ref_id:$,caller_decl_id:L,relationshipType:I||"call",depth:1}),P.length>=A)break}return Aa(P,e,c,{limit:a,offset:o})}let E=await this.executeViaDbNonTs(e,t,h,u,p,c);if(E)return E;let T=await this.executeViaPythonResolver(e,t,h,u,c);if(T)return T;if(!t.lsp){try{let{logger:x}=(qn(),be(Yr));x.warn("[find-callers] python request has no LSP host configured",{lang:"python",target:e.of,projectRoot:t.projectRoot,hint:"CLI runners construct CodeEngine without lspHost; use extension runtime or inject a host via CodeEngineFactory options."})}catch{}try{console.warn(`[find-callers][diag] no LSP host configured (lang=python, target=${e.of})`)}catch{}return this.buildEmptyResult(e,c,"python LSP not available (no LSP host configured); returning empty results.")}try{let x=await this.executeViaLsp(e,t,h,u,c);return x?.success?x:this.buildEmptyResult(e,c,`python LSP failed; returning empty results. ${x?.error?`Reason: ${x.error}`:""}`.trim())}catch(x){return this.buildEmptyResult(e,c,`python LSP failed; returning empty results. ${x?.message||String(x)}`)}}if(g&&g!=="ts"&&g!=="js"){if(g==="clojure"){if(!p.has("call"))return this.buildEmptyResult(e,c,"Clojure find-callers only supports relType=call.");let E=await Ei(t,e,"find-callers");if(!E)return{success:!1,error:"Unable to resolve canonical Clojure target for find-callers."};let T=E.resolved,x=e.minConfidence,w=F=>{let N=[...F.warnings||[],...c];return N.length?{...F,warnings:N}:F},D=x?[x]:["exact","heuristic","dynamic"];for(let F of D){let N=await this.executeViaDbClojure(e,t,T,p,c,F);if(N)return w(N)}return w(this.buildEmptyResult(e,c,"Clojure DB caller lookup returned no results."))}if(g==="csharp"){let E=await this.executeViaCsharpQuery(e,t,h,u,p,c);if(E)return E}else{let E=await this.executeViaDbNonTs(e,t,h,u,p,c);if(E)return E}if(!t.lsp){try{let{logger:E}=(qn(),be(Yr));E.warn("[find-callers] non-TS request has no LSP host configured",{lang:g,target:e.of,projectRoot:t.projectRoot,hint:"CLI runners construct CodeEngine without lspHost; use extension runtime or inject a host via CodeEngineFactory options."})}catch{}try{console.warn(`[find-callers][diag] no LSP host configured (lang=${g}, target=${e.of})`)}catch{}return this.buildEmptyResult(e,c,`${g} LSP not available (no LSP host configured); returning empty results.`)}try{let E=await this.executeViaLsp(e,t,h,u,c);return E?.success?E:this.buildEmptyResult(e,c,`${g} LSP failed; returning empty results. ${E?.error?`Reason: ${E.error}`:""}`.trim())}catch(E){return this.buildEmptyResult(e,c,`${g} LSP failed; returning empty results. ${E?.message||String(E)}`)}}let y;try{y=es(`${e.of}@${u}`,r,t.projectRoot)}catch(E){return{success:!1,error:E?.message||String(E)}}if(!y)return{success:!1,error:"Target declaration not found"};if(Mz(y)==null)return{success:!1,error:`Cannot determine declaration name position for ${y.getKindName()}`};let S=e.of,_=[],R=!1;if(m){f>1&&f!==Number.POSITIVE_INFINITY?c.push("asOf callers currently support depth=1; returning direct callers only."):f===Number.POSITIVE_INFINITY&&c.push('asOf callers currently support depth=1; treating depth="all" as 1.');let E=Fz({projectRoot:t.projectRoot,target:y,targetPath:S,asOf:m,relTypes:p,limitHint:o+a+50});c.push(...E.warnings),_.push(...E.callSites.map(T=>({...T,depth:1})))}else{if(!y.getName?.())return{success:!1,error:"Could not determine name of the target symbol."};let T=Oz({projectRoot:t.projectRoot,rootDeclaration:y,relTypes:p,maxDepth:f,fetchTarget:Math.min(o+a+1,Tz)});c.push(...T.warnings),_.push(...T.callSites),R=T.truncated}return Aa(_,e,c,{limit:a,offset:o,truncated:R})}catch(s){return{success:!1,error:`Find callers failed: ${s?.message||s}`}}}static async executeViaDbClojure(e,t,r,s,i,o){let a=Date.now(),c=new Map,l=new Map,u=_=>{c.set(_,Date.now())},d=_=>{let R=c.get(_);R!=null&&(c.delete(_),l.set(_,(l.get(_)||0)+(Date.now()-R)))},p=(_,R)=>{Xe.info("[find-callers][clojure-db][timing]",{target:e.of,confidence:o,exit:_,elapsedMs:Date.now()-a,phases:Object.fromEntries(l),...R||{}})};u("hash_validation"),d("hash_validation"),u("db_call_collection");let f=await OP(t,r,o);if(d("db_call_collection"),!f)return p("no_results"),null;i.push(...f.warnings);let m=f.references.map(_=>({source_ref_id:`${_.file_path}#${_.start}-${_.end}:REF`,caller_decl_id:_.caller_decl_id,relationshipType:_.relationshipType,depth:1}));u("result_format");let h=Number(e.limit??10),g=Number(e.offset??0),y=Math.max(0,g),b=Math.max(1,Math.min(100,h));h!==b&&i.push("limit capped to MAX_PAGE_SIZE"),g!==y&&i.push("offset adjusted to be >= 0");let S=Aa(m,e,i,{limit:b,offset:y});return S.confidenceLevel=o,d("result_format"),p("success",{canonicalPath:r.nodePath,callSiteCount:m.length}),S}static async executeViaDbNonTs(e,t,r,s,i,o){if(!r)return null;let a=Pe(r.fileAbs),c=await ud(t.projectRoot,e.of,r,a),l=s.startsWith("@")?s:`@${s}`,u=et(e.of,c),d=on(l,u);if(d.type!=="MATCH")return{success:!1,error:`Hash mismatch (${d.type}). Re-run find-nodes to refresh the target.`};let p=r.lang==="csharp"&&/\(\s*this\b/.test(c),f=Sn(t.projectRoot,r.fileAbs,r.start,r.end);if(!f)return null;let{clause:m,params:h}=this.buildCallerRelTypeFilter(i),g=[],y=!1;try{let E=new Mt(t.projectRoot),T=h.map(v=>String(v||"").trim()).filter(Boolean),x=new Set,w=!1;if(f.symbolKey)for(let v of E.findCandidateFilesForTargetSymbolKey(f.symbolKey))x.add(v),w=!0;if(!w&&f.name)for(let v of E.findCandidateMentionFilesForSymbol(f.name,T))x.add(v);x.add(r.fileRel.replace(/\\/g,"/"));let D=Number(e.limit??10),F=Number(e.offset??0),N=Math.max(0,F),C=Math.max(1,Math.min(100,D)),O=await vm(t.projectRoot,Array.from(x).sort((v,I)=>v.localeCompare(I)),{symbolKey:f.symbolKey,nodeId:f.nodeId,fileRel:r.fileRel.replace(/\\/g,"/"),name:f.name,paramCount:f.paramCount,allowImplicitReceiverArity:p},{relTypes:T,maxMatches:N+C+1});y=O.truncated;let M=O.rows.map(v=>({file_path:v.file_path,start_pos:v.start_pos,end_pos:v.end_pos,rel_type:v.ref_kind||"call"}));if(!M.length)return null;let P=M.filter(v=>String(v.file_path||"").replace(/\\/g,"/")),A=E.getEnclosingFunctionBatch(P.map(v=>({file:String(v.file_path||"").replace(/\\/g,"/"),start:v.start_pos,end:v.end_pos})),void 0,r.lang??void 0);for(let v of P){let I=String(v.file_path||"").replace(/\\/g,"/");if(!I)continue;let k=`${I}#${v.start_pos}-${v.end_pos}:REF`,$=A.get(`${I}\0${v.start_pos}\0${v.end_pos}`)||void 0;g.push({source_ref_id:k,caller_decl_id:$,relationshipType:v.rel_type||"call",depth:1})}}catch{return null}let b=Number(e.limit??10),S=Number(e.offset??0),_=Math.max(0,S),R=Math.max(1,Math.min(100,b));return b!==R&&o.push("limit capped to MAX_PAGE_SIZE"),S!==_&&o.push("offset adjusted to be >= 0"),Aa(g,e,o,{limit:R,offset:_,truncated:y})}static async executeViaPythonResolver(e,t,r,s,i){if(!r?.fileAbs)return null;let o=Pe(r.fileAbs),a=await ud(t.projectRoot,e.of,r,o),c=s.startsWith("@")?s:`@${s}`,l=et(e.of,a),u=on(c,l);if(u.type!=="MATCH")return{success:!1,error:`Hash mismatch (${u.type}). Re-run find-nodes to refresh the target.`};let d=new Mt(t.projectRoot),p=d.getNodeName(e.of)||null;if(!p)return null;let f=Sn(t.projectRoot,r.fileAbs,r.start,r.end),m=new Set;if(f?.symbolKey)for(let w of d.findCandidateFilesForTargetSymbolKey(f.symbolKey))m.add(w);for(let w of d.findCandidateFilesForSymbol(p))m.add(w);let h=Array.from(m).map(w=>En.default.resolve(t.projectRoot,w));if(h.length===0)return null;let g={targetFile:r.fileAbs,start:r.start,end:r.end,candidates:h},y=En.default.resolve(t.projectRoot,"tools/python-indexer/pando_python_resolver.py"),b=Ez(),S=null;for(let w of b)try{let D=(0,HP.spawnSync)(w,["-u",y],{input:JSON.stringify(g),encoding:"utf8",maxBuffer:10485760});if(D.status!==0&&D.status!==null)continue;let F=D.stdout?.toString?.()??"";if(!F)continue;let N=JSON.parse(F);if(N?.ok&&Array.isArray(N.references)){S=N.references;break}}catch{continue}if(!S||S.length===0)return null;let _=[];for(let w of S){let D=En.default.relative(t.projectRoot,w.file).replace(/\\/g,"/"),F=d.getEnclosingFunction(D,w.start,w.end,void 0,"python")||void 0;_.push({source_ref_id:`${D}#${w.start}-${w.end}:REF`,caller_decl_id:F,relationshipType:"call",depth:1})}let R=Number(e.limit??10),E=Number(e.offset??0),T=Math.max(0,E),x=Math.max(1,Math.min(100,R));return R!==x&&i.push("limit capped to MAX_PAGE_SIZE"),E!==T&&i.push("offset adjusted to be >= 0"),Aa(_,e,i,{limit:x,offset:T})}static async executeViaCsharpQuery(e,t,r,s,i,o){if(!r?.fileAbs)return null;let a=Pe(r.fileAbs),c=await ud(t.projectRoot,e.of,r,a),l=s.startsWith("@")?s:`@${s}`,u=et(e.of,c),d=on(l,u);if(d.type!=="MATCH")return{success:!1,error:`Hash mismatch (${d.type}). Re-run find-nodes to refresh the target.`};let p=new Mt(t.projectRoot),f=Sn(t.projectRoot,r.fileAbs,r.start,r.end),m=f?.name||p.getNodeName(e.of)||null;if(!m)return null;let h=new Set;h.add(En.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/"));let g=Array.from(i),y=!1;if(f?.symbolKey)for(let C of p.findCandidateFilesForTargetSymbolKey(f.symbolKey))h.add(C),y=!0;if(!y)for(let C of p.findCandidateMentionFilesForSymbol(m,g))h.add(C);let b=Array.from(h).sort((C,O)=>C.localeCompare(O));if(!b.length)return this.buildEmptyResult(e,o);let S=Number(e.limit??10),_=Number(e.offset??0),R=Math.max(0,_),E=Math.max(1,Math.min(100,S)),T=R+E,x=[],w=new Set,D=new Map,F=!1,N=!!e.aggregate;for(let C=0;C<b.length;C+=Im){let O=b.slice(C,C+Im),M=await lf(t.projectRoot,r.fileAbs,e.of,O.map(A=>En.default.resolve(t.projectRoot,A)),{relTypes:g,maxResults:N?Math.max(1,T-D.size):Math.max(1,T-x.length),includeTargetFileReferences:C===0,aggregateByCaller:N}),P=M?.references??[];for(let A of P){let v=Iz(A.refKind);if(!v||!i.has(v))continue;let k=`${En.default.relative(t.projectRoot,A.file).replace(/\\/g,"/")}#${A.start}-${A.end}:REF`;if(w.has(k))continue;w.add(k);let $=Az(t.projectRoot,A);if(x.push({source_ref_id:k,caller_decl_id:$,relationshipType:v,depth:1}),N){let L=$||k;D.set(L,(D.get(L)||0)+1)}}if(N){if(D.size>=T||M?.truncated===!0){F=M?.truncated===!0||C+Im<b.length;break}}else if(x.length>=T||M?.truncated===!0){F=M?.truncated===!0||C+Im<b.length;break}}return x.length===0?this.buildEmptyResult(e,o):(S!==E&&o.push("limit capped to MAX_PAGE_SIZE"),_!==R&&o.push("offset adjusted to be >= 0"),Aa(x,e,o,{limit:E,offset:R,truncated:F}))}static async executeViaLsp(e,t,r,s,i){if(!r)return{success:!1,error:"Unable to parse node path for LSP callers."};let o=t.lsp;if(!o)return{success:!1,error:"find-callers requires an active LSP host for this language."};e.asOf&&i.push("asOf is ignored for LSP-backed callers.");let a=e.relType;if(a&&String(a).toLowerCase()!=="call"&&String(a).toLowerCase()!=="all")return{success:!1,error:"LSP callers only support relType 'call'."};let c=Pe(r.fileAbs),l=await ud(t.projectRoot,e.of,r,c),u=s.startsWith("@")?s:`@${s}`,d=et(e.of,l),p=on(u,d);if(p.type!=="MATCH")return{success:!1,error:`Hash mismatch (${p.type}). Re-run find-nodes to refresh the target.`};let f=await o.documentSymbols(r.fileAbs),m=Hc(f,c,r.start,r.end),h=r.lang&&r.lang!=="ts"&&r.lang!=="js"?_i(c,r.start):r.start,g=m?.selectionRange?.start??ba(c,h),y=await o.incomingCalls(r.fileAbs,g),b=[];for(let T of y){let x=T.uri.startsWith("file:")?(0,qP.fileURLToPath)(T.uri):T.uri,w=En.default.relative(t.projectRoot,x).replace(/\\/g,"/"),D=Pe(x),F=Ys(D,T.selectionRange),N=`${w}#${F.start}-${F.end}:${Pt.getAbbrev(T.kind,r.lang??"ts")}`,C=T.fromRanges&&T.fromRanges.length?T.fromRanges:[T.selectionRange];for(let O of C){let M=Ys(D,O),P=`${w}#${M.start}-${M.end}:REF`;b.push({source_ref_id:P,caller_decl_id:N,relationshipType:"call",depth:1})}}let S=Number(e.limit??10),_=Number(e.offset??0),R=Math.max(0,_),E=Math.max(1,Math.min(100,S));return S!==E&&i.push("limit capped to MAX_PAGE_SIZE"),_!==R&&i.push("offset adjusted to be >= 0"),Aa(b,e,i,{limit:E,offset:R})}};Tz=5e3,Pz=15,Im=48});function Zz(n){let e=n;if(typeof e.getNameNode=="function"){let t=e.getNameNode();if(t)return t.getStart()}if(typeof e.getName=="function"){let t=e.getName();if(t&&typeof t=="string"){let r=n.getFirstDescendant(s=>s.getText?.()===t);if(r)return r.getStart()}}return null}function Gz(n,e,t){if(!e?.name)return null;let r=Number(e.start),s=Number(e.end);if(!Number.isFinite(r)||!Number.isFinite(s)||s<=r)return null;let i=!!t&&t!=="ts"&&t!=="js"&&t!=="csharp",o=Nt(n,{start:r,end:s},t);if(!o)return null;let a=e.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=[new RegExp(`^\\s*\\((?:clojure\\.core\\/)?[A-Za-z0-9*+!_?.<>=/-]+\\s+(${a})(?=[\\s\\[\\](){}]|$)`),new RegExp(`(^|[^A-Za-z0-9_\\-.\\/])(${a})(?=[^A-Za-z0-9_\\-.\\/]|$)`)];for(let l of c){let u=o.match(l);if(!u||u.index==null)continue;let d=u[1]===e.name?u[1]:u[2],p=u[0].lastIndexOf(d);if(p<0)continue;let f=u.index+p,m=f+d.length,h=i?r+Buffer.byteLength(o.slice(0,f),"utf8"):r+f,g=h+d.length;if(i){let y=Buffer.byteLength(o.slice(f,m),"utf8");if(y!==d.length)return{start:h,end:h+y}}if(h>=r&&g<=s)return{start:h,end:g}}return null}function Jz(n,e,t,r,s,i,o){let a=n.match(/^(\d+)-(\d+)(:.+)$/);if(!a)return n;let c=t,l=r,u=!!o&&o!=="ts"&&o!=="js"&&o!=="csharp",d=s.filter(p=>ni.default.resolve(p.file)===ni.default.resolve(e)).slice().sort((p,f)=>p.start-f.start);for(let p of d){let f=p.start,m=p.start+p.length,h=`${p.prefixText||""}${i}${p.suffixText||""}`,y=(u?Buffer.byteLength(h,"utf8"):h.length)-p.length;y!==0&&(m<=c?(c+=y,l+=y):f<l&&(l+=y))}return`${c}-${l}${a[3]}`}var ni,Na,ko,KP,Eo,fS=ne(()=>{"use strict";ni=q(require("path")),Na=q(require("fs")),ko=require("ts-morph"),KP=require("url");ts();Xn();Ea();Hi();kr();Ns();ka();Cm();Zc();Eo=class{static shouldUseCsharpIdentifierFallback(e){let t=String(e?.kind||"").trim();return t==="VariableDeclarator"||t==="Field"||t==="PropertyDeclaration"||t==="Property"||t==="EnumMemberDeclaration"||t==="EnumMember"}static shouldRenameCsharpConstructors(e){let t=String(e?.kind||"").trim();return t==="ClassDeclaration"||t==="Class"}static collectCsharpConstructorDeclarationLocations(e,t,r){let s=typeof e?.name=="string"?e.name.trim():"";if(!s||!e?.fileRel)return[];let i=ni.default.resolve(r,e.fileRel);if(!Na.default.existsSync(i))return[];let o=Pe(i),a=Number(e.start),c=Number(e.end);if(!Number.isFinite(a)||!Number.isFinite(c)||c<=a)return[];let l=Nt(o,{start:a,end:c},"csharp");if(!l)return[];let u=s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp(`(?<![A-Za-z0-9_])${u}(?=\\s*\\()`,"g"),p=new Set(t.map(m=>`${ni.default.resolve(m.file)}:${m.start}:${m.length}`)),f=[];for(let m of l.matchAll(d)){let h=m.index??-1;if(h<0)continue;let g=a+h,y=s.length,b=`${i}:${g}:${y}`;p.has(b)||(p.add(b),f.push({file:i,start:g,length:y,isDefinition:!0,sourceKind:"ConstructorDeclaration",relationshipType:"reference"}))}return f}static collectCsharpIdentifierFallbackLocations(e,t,r,s){let i=typeof r?.name=="string"?r.name.trim():"";if(!i)return[];let o=new Set,a=ld(t,e.projectRoot);for(let p of a?.files||[])p&&o.add(String(p).replace(/\\/g,"/"));r?.fileRel&&o.add(String(r.fileRel).replace(/\\/g,"/"));let c=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),l=new RegExp(`(?<![A-Za-z0-9_])${c}(?![A-Za-z0-9_])`,"g"),u=new Set(s.map(p=>`${ni.default.resolve(p.file)}:${p.start}:${p.length}`)),d=[];for(let p of o){let f=ni.default.resolve(e.projectRoot,p);if(!Na.default.existsSync(f))continue;let m=Pe(f);for(let h of m.matchAll(l)){let g=h.index??-1;if(g<0)continue;let y=g,b=i.length,S=`${f}:${y}:${b}`;u.has(S)||(u.add(S),d.push({file:f,start:y,length:b,isDefinition:!1,relationshipType:"reference"}))}}return d}static buildSoftFailResult(e,t){let r=Number(e.page?.limit??5),s=Number(e.page?.offset??0),i=Math.max(0,s),o=Math.max(1,Math.min(100,r)),a=0,c=!1,l={op:"rename",path:e.path,newName:e.newName,changedFiles:[]},u=[t];return r!==o&&u.push("page.limit capped to 100"),s!==i&&u.push("page.offset adjusted to be >= 0"),{success:!0,changes:{summary:"No changes applied (soft-fail).",count:0},details:{changedFiles:[],changedFilesPage:{totalCount:a,limit:o,offset:i,hasMore:c},receipt:l,updatedTargets:void 0},warnings:u}}static async execute(e,t,r){try{if(e&&typeof e.dryRun<"u")return{success:!1,error:"Please use restore-snapshot after any operation to undo it"};if(e.asOf)return{success:!1,error:"rename does not support asOf (time-travel edits are not supported). Apply changes to the current workspace or restore a snapshot first."};if(!e.path||!e.newName)return{success:!1,error:"path and newName are required"};if(typeof e.path=="string"&&e.path.includes("@"))return{success:!1,error:"path must not include @hash for rename. Provide the path portion only."};if(typeof e.expectedHash!="string"||!e.expectedHash||e.expectedHash.includes("@"))return{success:!1,error:"expectedHash is required for rename and must omit the @ prefix"};let s=String(e.expectedHash),i=an(e.path,t.projectRoot),o=i?.lang;if(o&&o!=="ts"&&o!=="js"){if(o==="clojure")return(await this.executeViaDbNonTsRename(e,t,i,s,r)).result;let A=await this.executeViaDbNonTsRename(e,t,i,s,r);if(A.result.success||!A.fallbackToLsp||!t.lsp)return A.result;try{let v=await this.executeViaLsp(e,t,i,s,r);if(!v?.success)return{...A.result,warnings:[...A.result?.warnings||[],`${o} LSP fallback failed. ${v?.error?`Reason: ${v.error}`:"No additional detail provided."}`.trim()]};let I=[...v.warnings||[],`${o} rename used LSP fallback because DB references were empty.`];return{...v,warnings:I}}catch(v){return{...A.result,warnings:[...A.result?.warnings||[],`${o} LSP fallback threw. ${v?.message||String(v)}`]}}}let a=t.queries;if(!a?.getRenameInfo)return{success:!1,error:"Rename executor requires a scoped query layer. Ensure the operation is routed through the code engine."};let c=`${e.path}@${s}`,l=es(c,r,t.projectRoot);if(!l)return{success:!1,error:"Declaration not found for rename: the specified node path does not exist or its hash has changed.",error_code:"resolve_failed",hints:["IMPORTANT: Call find-nodes on the target file to get the current path and hash, then retry rename with the fresh values."],details:{suggestion:"Refresh the target by running find-nodes with include.body to obtain a fresh path and hash, then retry with expectedHash.",changedFiles:[]}};let u=l.getSourceFile().getFilePath();try{t.ls.ensureInProgram(u)}catch(A){try{(qn(),be(Yr)).logger.warn("[Rename] ensureInProgram failed",{file:u,message:A?.message||String(A)})}catch{}}let d=Zz(l);if(d==null)return{success:!1,error:`Cannot determine declaration name position for ${l.getKindName()}`,details:{changedFiles:[]}};try{let A=a.getRenameInfo(u,d);if(A&&A.canRename===!1)return{success:!1,error:this.describeNonRenameable(l)??A.localizedErrorMessage??"This node cannot be renamed. Use find-nodes to locate a renameable declaration.",details:{changedFiles:[]}}}catch(A){let v=this.describeNonRenameable(l);return v?{success:!1,error:v,details:{changedFiles:[]}}:{success:!1,error:`Unable to validate rename target: ${A?.message||A}`}}let p=!!e.includeStrings,f=!!e.includeComments,m=(()=>{try{if(typeof l.getName=="function"){let v=l.getName();if(typeof v=="string"&&v.length)return v}let A=l.getNameNode?.();if(A&&typeof A.getText=="function"){let v=A.getText();if(typeof v=="string"&&v.length)return v}}catch{}return null})();if(m&&m===e.newName)return{success:!1,error:"newName matches the existing identifier. Provide a different name.",details:{changedFiles:[]}};let h=await as(e.path,s,{includeDeclaration:!0,includeStrings:p,includeComments:f},t,r);if(!h.success)return{success:!1,error:h.error||"Unable to collect rename locations",details:h.details??{changedFiles:[]}};let g=Fs(h.locations,t.projectRoot);if((qn(),be(Yr)).logger.info("[Rename] Locations collected",{references:g.length}),!g.length)return{success:!1,error:"No rename locations returned by the reference query.",details:{changedFiles:[]}};let y=g.reduce((A,v)=>A+(v.isDefinition?0:1),0),b=e.expectedHash?`${e.path}@${e.expectedHash}`:e.path,S,_,R=e.batchSaves===!0,E=Date.now(),T=[];try{T=Pm(g.map(A=>({...A,replacement:`${A.prefixText||""}${e.newName}${A.suffixText||""}`})),{projectRoot:t.projectRoot,project:r,context:t,batchSaves:R}).changedFiles}catch(A){return{success:!1,error:`Failed applying rename edits: ${A?.message||A}`}}if(T.includes(ni.default.relative(t.projectRoot,u).replace(/\\/g,"/"))){let A=(e.path||"").split("#")[1],v=r.getSourceFile(u);if(A&&v){let I=Pn(A,v);if(I){let{buildNodeRef:k}=(Xn(),be(AT)),$=k(I,t.projectRoot);S=$.ref,_=$.hash}}}if((qn(),be(Yr)).logger.info("[Rename] Edits applied",{changedFiles:T.length,ms:Date.now()-E}),T.length===0)return{success:!1,error:"Rename produced no edits. Ensure the target is valid and the newName differs from the current identifier.",details:{changedFiles:[]}};let{pageSlice:x,totalCount:w,limit:D,offset:F,hasMore:N,warnings:C}=AP(T,e.page,5),O={op:"rename",path:e.path,newName:e.newName,changedFileCount:T.length},M=[...C];e.asOf&&M.push("asOf ignored for rename");let P=S&&_?[{oldRef:b,newRef:S,newHash:_}]:void 0;return(qn(),be(Yr)).logger.info("[Rename] Done",{changedFiles:T.length}),{success:!0,changes:{summary:`TS LS rename applied. Files: ${T.length}`,count:T.length},details:{changedFiles:T,changedFilesPage:{totalCount:w,limit:D,offset:F,hasMore:N},receipt:O,updatedTargets:P,referencesRenamed:y},warnings:M.length?M:void 0}}catch(s){return{success:!1,error:`TS LS rename failed: ${s.message}`,details:{changedFiles:[]}}}}static async executeViaDbNonTsRename(e,t,r,s,i){let o=r.lang||"non-ts",a=o==="clojure"?(await Ei(t,e,"rename"))?.resolved??null:null;if(o==="clojure"&&!a)return{fallbackToLsp:!1,result:{success:!1,error:"Unable to resolve canonical Clojure target for rename.",error_code:"resolve_failed",details:{changedFiles:[]}}};let c=a?.nodePath??e.path,l=a?.currentHash?a.currentHash.startsWith("@")?a.currentHash.slice(1):a.currentHash:s,u=a?an(c,t.projectRoot):r;if(!u)return{fallbackToLsp:!1,result:{success:!1,error:"Unable to parse canonical target for rename.",error_code:"resolve_failed",details:{changedFiles:[]}}};if(o!=="clojure"){let $=(await qr(t.projectRoot,e.path))?.text??Nt(Pe(r.fileAbs),{start:r.start,end:r.end},r.lang),L=s.startsWith("@")?s:`@${s}`,j=et(e.path,$),z=on(L,j);if(z.type!=="MATCH")return{fallbackToLsp:!1,result:{success:!1,error:`Hash mismatch (${z.type}). Re-run find-nodes to refresh the target.`,error_code:"resolve_failed",details:{changedFiles:[]}}}}let d=!!e.includeStrings,p=!!e.includeComments,f=await as(c,l,{includeDeclaration:!0,includeStrings:d,includeComments:p,forceLsp:!1},t,i);if(!f.success)return{fallbackToLsp:!0,result:this.buildSoftFailResult(e,`${o} DB reference lookup failed; no rename applied. ${f.error?`Reason: ${f.error}`:""}`.trim())};let m=Fs(f.locations,t.projectRoot),h=o==="csharp"?Sn(t.projectRoot,u.fileAbs,u.start,u.end):null;if(o==="csharp"&&h&&this.shouldUseCsharpIdentifierFallback(h)&&m.every(k=>k.isDefinition)){let k=this.collectCsharpIdentifierFallbackLocations(t,c,h,m);k.length&&(m.push(...k),m.sort(($,L)=>$.file===L.file?$.start-L.start:$.file.localeCompare(L.file)))}if(o==="csharp"&&h&&this.shouldRenameCsharpConstructors(h)){let k=this.collectCsharpConstructorDeclarationLocations(h,m,t.projectRoot);k.length&&(m.push(...k),m.sort(($,L)=>$.file===L.file?$.start-L.start:$.file.localeCompare(L.file)))}if(!m.length)return{fallbackToLsp:!0,result:this.buildSoftFailResult(e,`${o} DB reference lookup returned 0 matches; no rename applied.`)};let g=new Map;for(let k of m){let $=g.get(k.file)||[];$.push({start:k.start,length:k.length,prefixText:k.prefixText,suffixText:k.suffixText}),g.set(k.file,$)}let y=new Set,b=`${c}@${l}`,S,_;for(let[k,$]of g){if(!Na.default.existsSync(k))continue;let L=o==="csharp"?Pe(k):Na.default.readFileSync(k,"utf8");$.sort((j,z)=>z.start-j.start);for(let j of $){let{start:z,end:U}=qc(L,{start:j.start,end:j.start+j.length},o);if(z<0||U>L.length||U<z)return{fallbackToLsp:!1,result:{success:!1,error:`Invalid reference span while renaming ${ni.default.relative(t.projectRoot,k)} (${z}-${U}).`,details:{changedFiles:Array.from(y)}}};let K=`${j.prefixText||""}${e.newName}${j.suffixText||""}`;L=L.slice(0,z)+K+L.slice(U)}o==="csharp"?un(k,L):Na.default.writeFileSync(k,L,"utf8"),y.add(ni.default.relative(t.projectRoot,k).replace(/\\/g,"/"))}if(y.size===0)return{fallbackToLsp:!1,result:{success:!1,error:"Rename produced no edits. Ensure the target is valid and the newName differs from the current identifier.",details:{changedFiles:[]}}};let R=String(c.split("#")[0]||""),E=String(c.split("#")[1]||"");if(E&&u.lang)try{if(o==="clojure")_=void 0,S=void 0;else{let k=Jz(E,u.fileAbs,u.start,u.end,m,e.newName,u.lang),$=await os(t.projectRoot,u.fileAbs,k,u.lang);if($){let L=Pe(u.fileAbs),j=$.text??Nt(L,{start:$.start,end:$.end},u.lang),z=`${R}#${k}`,U=et(z,j);_=U;let K=U.startsWith("@")?U:`@${U}`;S=`${z}${K}`}}}catch{}let T=Array.from(y),x=Number(e.page?.limit??5),w=Number(e.page?.offset??0),D=Math.max(0,w),F=Math.max(1,Math.min(100,x)),N=T.length,C=T.slice(D,D+F),O=D+C.length<N,M={op:"rename",path:e.path,newName:e.newName,changedFileCount:T.length},P=[];x!==F&&P.push("page.limit capped to 100"),w!==D&&P.push("page.offset adjusted to be >= 0"),o==="clojure"&&P.push("Re-run find-nodes after Clojure rename to refresh the target path and hash."),P.push(`${o} rename executed via DB/span pipeline (no LSP required).`);let A=m.reduce((k,$)=>k+($.isDefinition?0:1),0),v=m.length,I=S&&_?[{oldRef:b,newRef:S,newHash:_}]:void 0;return{fallbackToLsp:!1,result:{success:!0,changes:{summary:`DB/span rename applied. Files: ${y.size}. Edits: ${v}`,count:v},details:{changedFiles:C,allChangedFiles:T,changedFileCount:N,changedFilesPage:{totalCount:N,limit:F,offset:D,hasMore:O},receipt:M,updatedTargets:I,referencesRenamed:A},warnings:P}}}static async executeViaLsp(e,t,r,s,i){if(!r)return{success:!1,error:"Unable to parse node path for LSP rename.",error_code:"resolve_failed"};let o=t.lsp;if(!o)return{success:!1,error:"rename requires an active LSP host for this language."};let a=Pe(r.fileAbs),l=(await qr(t.projectRoot,e.path))?.text??Nt(a,{start:r.start,end:r.end},r.lang),u=s.startsWith("@")?s:`@${s}`,d=et(e.path,l),p=on(u,d);if(p.type!=="MATCH")return{success:!1,error:`Hash mismatch (${p.type}). Re-run find-nodes to refresh the target.`};let f=Gz(a,Sn(t.projectRoot,r.fileAbs,r.start,r.end),r.lang)??{start:r.start,end:r.end},m=ba(a,rs(a,f.start,r.lang)),h=await o.rename(r.fileAbs,m,e.newName);if(!h||!h.changes||Object.keys(h.changes).length===0)return{success:!1,error:"LSP rename returned no edits.",details:{changedFiles:[]}};let g=new Set,y=0,b=new Map(Object.entries(h.changes).map(([P,A])=>{let v=P.startsWith("file:")?(0,KP.fileURLToPath)(P):P,I=Pe(v);return[v,A.map(k=>({start:Ys(I,k.range).start,end:Ys(I,k.range).end,newText:k.newText,isDefinition:v===r.fileAbs&&Ys(I,k.range).start===f.start&&Ys(I,k.range).end===f.end}))]}));for(let[P,A]of b){if(!Na.default.existsSync(P))continue;let v=Pe(P),I=A.sort((k,$)=>$.start-k.start);for(let k of I)k.isDefinition||P===r.fileAbs&&k.start===f.start&&k.end===f.end||(y+=1),v=v.slice(0,k.start)+k.newText+v.slice(k.end);un(P,v),g.add(ni.default.relative(t.projectRoot,P).replace(/\\/g,"/"))}if(g.size===0)return{success:!1,error:"Rename produced no edits. Ensure the target is valid and the newName differs from the current identifier.",details:{changedFiles:[]}};let S=Array.from(g),_=Number(e.page?.limit??5),R=Number(e.page?.offset??0),E=Math.max(0,R),T=Math.max(1,Math.min(100,_)),x=S.length,w=S.slice(E,E+T),D=E+w.length<x,F={op:"rename",path:e.path,newName:e.newName,changedFileCount:S.length},N=[];_!==T&&N.push("page.limit capped to 100"),R!==E&&N.push("page.offset adjusted to be >= 0");let C,O=`${e.path}@${s}`,M=String(e.path.split("#")[1]||"");if(M&&r?.lang)try{let P=await os(t.projectRoot,r.fileAbs,M,r.lang);if(P){let A=Pe(r.fileAbs),v=P.text??Nt(A,{start:P.start,end:P.end},r.lang),k=`${e.path.split("#")[0]||r.fileRel}#${P.start}-${P.end}`,$=et(k,v),L=$.startsWith("@")?$:`@${$}`,j=`${k}${L}`;C=[{oldRef:O,newRef:j,newHash:$}]}}catch{}return{success:!0,changes:{summary:`LSP rename applied. Files: ${g.size}. Edits: ${y+1}`,count:y+1},details:{changedFiles:w,allChangedFiles:S,changedFileCount:x,changedFilesPage:{totalCount:x,limit:T,offset:E,hasMore:D},receipt:F,updatedTargets:C,referencesRenamed:y},warnings:N.length?N:void 0}}static describeNonRenameable(e){switch(e.getKind()){case ko.SyntaxKind.ArrowFunction:return"Arrow functions don't have names. Use 'rename' on the variable they're assigned to instead.";case ko.SyntaxKind.FunctionExpression:return"Anonymous functions don't have names. Use 'rename' on the variable they're assigned to instead.";case ko.SyntaxKind.StringLiteral:case ko.SyntaxKind.NoSubstitutionTemplateLiteral:return"String literals are values, not identifiers. Use 'delete' followed by appropriate 'add-*' operations to change string content.";case ko.SyntaxKind.NumericLiteral:return"Number literals are values, not identifiers. Use 'delete' followed by appropriate 'add-*' operations to change numeric values.";case ko.SyntaxKind.TrueKeyword:case ko.SyntaxKind.FalseKeyword:return"Boolean literals are values, not identifiers. Use 'delete' followed by appropriate 'add-*' operations to change boolean values.";default:return}}}});function Xz(n){if(!n)return null;let e=n.lastIndexOf("/");return e>=0?n.slice(e+1):n}function Qz(n){if(n.type!=="vector")return 0;let e=0;for(let t of n.items)t.type==="symbol"&&t.value==="&"||(e+=1);return e}function Yz(n){if(!n||typeof n!="string")return null;let e=n.lastIndexOf("@"),t=e>=0?n.slice(0,e):n,r=t.lastIndexOf("#");if(r<0)return null;let s=t.slice(r+1),i=s.lastIndexOf(":");if(i<0)return null;let o=s.slice(0,i),a=o.indexOf("-");if(a<0)return null;let c=Number(o.slice(0,a)),l=Number(o.slice(a+1));return!Number.isFinite(c)||!Number.isFinite(l)||l<c?null:{start:c,end:l}}function ZP(n,e,t){let r=Buffer.from(n,"utf8"),s=Math.max(0,Math.min(e,r.length)),i=Math.max(s,Math.min(t,r.length));return r.slice(s,i).toString("utf8")}function GP(n,e){let t=Yz(e);if(!t)return[];let r=ZP(n,t.start,t.end);if(!r.trim())return[];try{let i=new mS(r).readAll();if(i.length!==1||i[0].type!=="list")return[];let o=i[0];if(o.items.length<2||o.items[0].type!=="symbol")return[];let a=Xz(o.items[0].value)??o.items[0].value;if(!Vz.has(a))return[];let c=[];for(let l=2;l<o.items.length;l+=1){let u=o.items[l];if(u.type==="string"||u.type==="map")continue;if(u.type!=="list"||u.items.length===0||u.items[0].type!=="vector"){if(c.length===0)return[];break}let d=u.items[0],p=ZP(r,d.start,d.end);c.push({arityIndex:c.length,start:t.start+u.start,end:t.start+u.end,paramCount:Qz(d),argVector:p,variadic:p.includes("&")})}return c.length>1?c:[]}catch{return[]}}var Vz,mS,JP=ne(()=>{"use strict";Vz=new Set(["defn","defn-","defmacro","defenterprise","defendpoint"]),mS=class{constructor(e){this.pos=0;this.lastBytePos=0;this.lastByteOffsetValue=0;this.src=e}byteOffset(){return this.pos===this.lastBytePos?this.lastByteOffsetValue:this.pos<this.lastBytePos?Buffer.byteLength(this.src.slice(0,this.pos),"utf8"):(this.lastByteOffsetValue+=Buffer.byteLength(this.src.slice(this.lastBytePos,this.pos),"utf8"),this.lastBytePos=this.pos,this.lastByteOffsetValue)}readAll(){let e=[];for(;this.pos<this.src.length&&(this.skipWhitespaceAndComments(),!(this.pos>=this.src.length));){let t=this.pos,r=this.readForm();r&&e.push(r),this.pos===t&&(this.pos+=1)}return e}peek(){return this.src[this.pos]??""}advance(){return this.src[this.pos++]??""}skipWhitespaceAndComments(){for(;this.pos<this.src.length;){let e=this.peek();if(e===" "||e===" "||e===`
|
|
813
|
+
`,r),o=i===-1?e.length:i+1,a=e.slice(s,o),c=e.slice(t,r);return a.includes(c)?/^\s*(?:public|private|protected|internal|static|readonly|const|volatile|required|\s)+.+;\s*(?:\r?\n)?$/.test(a)?{start:s,end:o}:{start:t,end:r}:{start:t,end:r}}static shouldUseCsharpIdentifierFallback(e){let t=String(e?.kind||"").trim();return t==="VariableDeclarator"||t==="Field"||t==="PropertyDeclaration"||t==="Property"||t==="EnumMemberDeclaration"||t==="EnumMember"}static collectCsharpIdentifierFallbackLocations(e,t,r,s){let i=typeof r?.name=="string"?r.name.trim():"";if(!i)return[];let o=new Set,a=ld(t,e.projectRoot);for(let h of a?.files||[])h&&o.add(String(h).replace(/\\/g,"/"));r?.fileRel&&o.add(String(r.fileRel).replace(/\\/g,"/"));let c=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),l=new RegExp(`(?<![A-Za-z0-9_])${c}(?![A-Za-z0-9_])`,"g"),u=new Set(s.map(h=>`${Wn.default.resolve(h.file)}:${h.start}:${h.length}`)),d=[],p=Number(r?.start),f=Number(r?.end),m=r?.fileRel?Wn.default.resolve(e.projectRoot,String(r.fileRel).replace(/\\/g,"/")):null;for(let h of o){let g=Wn.default.resolve(e.projectRoot,h);if(!Os.default.existsSync(g))continue;let y=Pe(g);for(let b of y.matchAll(l)){let S=b.index??-1;if(S<0)continue;let _=Buffer.byteLength(y.slice(0,S),"utf8"),R=Buffer.byteLength(i,"utf8"),E=_+R;if(m&&g===m&&Number.isFinite(p)&&Number.isFinite(f)&&_>=p&&E<=f)continue;let T=`${g}:${_}:${R}`;u.has(T)||(u.add(T),d.push({file:g,start:_,length:R,isDefinition:!1,relationshipType:"reference"}))}}return d}static async executeViaLsp(e,t,r){let s=t.lsp;if(!s)return{success:!1,error:"delete requires an active LSP host for this language."};let i=new Map,o=new Set,a=Array.isArray(e.path)?e.path:[e.path];for(let l=0;l<a.length;l++){let u=a[l],d=r[l];if(!d)return{success:!1,error:`Unable to parse node path for ${u}.`,error_code:"resolve_failed"};let p=e.expectedHashes[l],f=Pe(d.fileAbs),m=this.sliceTargetText(f,d),h=p.startsWith("@")?p:`@${p}`;if(d.lang==="clojure"){let T=Ui(t.projectRoot,d.fileAbs,d.start,d.end,{plainPath:u,expectedHash:h,content:m});if(!T.target)return{success:!1,error:"Ambiguous Clojure target identity. Re-run find-nodes to refresh the target hash."};if(T.comparison?.type!=="MATCH")return{success:!1,error:`Hash mismatch (${T.comparison?.type??"FORMAT"}) for ${u}. Re-run find-nodes.`}}else{let T=et(u,m),x=on(h,T);if(x.type!=="MATCH")return{success:!1,error:`Hash mismatch (${x.type}) for ${u}. Re-run find-nodes.`}}let g=await s.documentSymbols(d.fileAbs),b=Hc(g,f,this.toCharOffset(f,d,d.start),this.toCharOffset(f,d,d.end))?.name||"UNKNOWN",_=`${this.commentPrefixForLang(d.lang??null)} $$$DELETED_REF_${b}$$$`,R=await as(u,p,{includeDeclaration:!0,forceLsp:!0},t,t.project);if(!R.success)return{success:!1,error:R.error||"find-references failed"};let E=Fs(R.locations,t.projectRoot);for(let T of E){let x=T.file,w=Number(T.start),D=Number(T.start+T.length);if(!Number.isFinite(w)||!Number.isFinite(D))continue;let F=Wn.default.relative(t.projectRoot,x).replace(/\\/g,"/"),N=an(`${F}#${w}-${D}:REF`,t.projectRoot),C=w,O=D;if(N&&N.lang&&N.lang!=="ts"&&N.lang!=="js"){let P=Pe(x);C=this.toCharOffset(P,N,w),O=this.toCharOffset(P,N,D)}if(x===d.fileAbs){let P=this.toCharOffset(f,d,d.start),A=this.toCharOffset(f,d,d.end);if(this.spansOverlap(C,O,P,A))continue}let M=i.get(x)||[];M.push({start:C,end:O,newText:_}),i.set(x,M)}}for(let[l,u]of i){if(!Os.default.existsSync(l))continue;let d=Pe(l);u.sort((p,f)=>f.start-p.start);for(let p of u)d=d.slice(0,p.start)+p.newText+d.slice(p.end);un(l,d),o.add(Wn.default.relative(t.projectRoot,l).replace(/\\/g,"/"))}let c=Array.from(o);return{success:!0,changes:{summary:`LSP delete applied. Files: ${o.size}`,count:o.size},details:{changedFiles:c}}}static async executeViaClojureDbDelete(e,t,r){let s=Array.isArray(e.path)?e.path:[e.path],i=Array.isArray(e.expectedHashes)?e.expectedHashes:[],o=e.forceDeleteReferencesMayBreakSyntax!==!1,a=new Set,c=[],l=[],u=e.batchSaves===!0,d=0,p=[];for(let m=0;m<s.length;m+=1){let h=s[m],g=i[m],y=an(h,t.projectRoot);if(!y||y.lang!=="clojure")return{success:!1,error:`Clojure target parse failed for ${h}`};let b=await Rm(t,h,y,g),S=await as(h,g,{includeDeclaration:!1,forceLsp:!1},t,r);if(!S.success)return{success:!1,error:`Clojure DB reference lookup failed; no deletes applied. ${S.error?`Reason: ${S.error}`:""}`.trim(),details:{changedFiles:Array.from(a)}};let _=Fs(S.locations,t.projectRoot);if(_.length>0&&!o)return{success:!1,error:`Delete blocked: ${_.length} references found for ${h}. Set forceDeleteReferencesMayBreakSyntax=true to proceed.`,details:{changedFiles:Array.from(a)}};let R=b.content,E=b.target?.name||b.target?.symbolKey?.split("/").pop()||Nt(R,{start:y.start,end:y.end},y.lang).trim().split(/\s+/)[0]||"ref",T=new Map,x=new Map;x.set(y.fileAbs,R);let w=new Set;for(let N of _){let C=N.file,O=N.start,M=N.start+N.length;if(C===y.fileAbs&&this.spansOverlap(O,M,b.declarationNameSpan.start,b.declarationNameSpan.end))continue;let P=x.get(C);P==null&&(P=Pe(C),x.set(C,P));let{start:A,end:v}=qc(P,{start:O,end:M},y.lang),I=this.expandClojureDeleteSpan(P,A,v),k=`${C}:${I.start}:${I.end}`;if(w.has(k))continue;w.add(k);let $=n.deletedRefMarkerForLang("clojure",E),L=T.get(C)||[];L.push({start:I.start,end:I.end,replacement:$}),T.set(C,L)}let D=T.get(y.fileAbs)||[];D.push({start:rs(R,y.start,y.lang),end:rs(R,y.end,y.lang),replacement:""}),T.set(y.fileAbs,D);for(let[N,C]of T){let O=x.get(N)??Pe(N);C.sort((M,P)=>P.start-M.start);for(let M of C)O=O.slice(0,M.start)+M.replacement+O.slice(M.end);un(N,O),a.add(Wn.default.relative(t.projectRoot,N).replace(/\\/g,"/"))}d+=1;let F=Wn.default.relative(t.projectRoot,y.fileAbs).replace(/\\/g,"/");if(a.has(F))try{let N=Os.default.readFileSync(y.fileAbs,"utf8");if(n.stripDeletedRefMarkers(N).replace(/\/\*[\s\S]*?\*\//g,"").replace(/(^|\s)\/\/.*$/gm,"").replace(/(^|\s)#.*$/gm,"").replace(/\s+/g,"").length===0)if(u)l.push(F);else{try{Os.default.unlinkSync(y.fileAbs)}catch{}c.push(F),a.delete(F)}}catch{}}let f=Array.from(a);return{success:!0,changes:{summary:`Deleted ${d} target${d!==1?"s":""}`,count:f.length},details:{deletedCount:d,changedFiles:f,deletedFiles:c,deletedFilesCandidates:l.length?l:void 0,receipt:{op:"delete",targets:s,changedFiles:f}},warnings:p.length?p:void 0}}static async executeViaDbNonTsDelete(e,t,r){let s=Array.isArray(e.path)?e.path:[e.path],i=Array.isArray(e.expectedHashes)?e.expectedHashes:[],o=e.forceDeleteReferencesMayBreakSyntax!==!1,a=new Set,c=[],l=[],u=e.batchSaves===!0,d=0,p=[];for(let m=0;m<s.length;m+=1){let h=s[m],g=i[m],y=an(h,t.projectRoot),b=y?.lang;if(!y||!b||b==="ts"||b==="js")return{fallbackToLsp:!1,result:{success:!1,error:`Non-TS target parse failed for ${h}`}};let S=Pe(y.fileAbs),_=this.sliceTargetText(S,y),R=g.startsWith("@")?g:`@${g}`;if(b==="clojure"){let M=Ui(t.projectRoot,y.fileAbs,y.start,y.end,{plainPath:h,expectedHash:R,content:_});if(!M.target)return{fallbackToLsp:!1,result:{success:!1,error:"Ambiguous Clojure target identity. Re-run find-nodes to refresh the target hash.",error_code:"resolve_failed"}};if(M.comparison?.type!=="MATCH")return{fallbackToLsp:!1,result:{success:!1,error:`Hash mismatch (${M.comparison?.type??"FORMAT"}) for ${h}. Re-run find-nodes.`,error_code:"resolve_failed"}}}else{let M=et(h,_),P=on(R,M);if(P.type!=="MATCH")return{fallbackToLsp:!1,result:{success:!1,error:`Hash mismatch (${P.type}) for ${h}. Re-run find-nodes.`,error_code:"resolve_failed"}}}let E=await as(h,g,{includeDeclaration:!1,forceLsp:!1},t,r);if(!E.success)return{fallbackToLsp:!0,result:n.buildSoftFailResult(e,`${b} DB reference lookup failed; no deletes applied. ${E.error?`Reason: ${E.error}`:""}`.trim())};let T=Fs(E.locations,t.projectRoot);if(T.length>0&&!o)return{fallbackToLsp:!1,result:{success:!1,error:`Delete blocked: ${T.length} references found for ${h}. Set forceDeleteReferencesMayBreakSyntax=true to proceed.`,details:{changedFiles:Array.from(a)}}};let x=new Map,w=new Map;w.set(y.fileAbs,S);let D=Sn(t.projectRoot,y.fileAbs,y.start,y.end),F=D?.name||D?.symbolKey?.split("/").pop()||_.trim().split(/\s+/)[0]||"ref";b==="csharp"&&D&&this.shouldUseCsharpIdentifierFallback(D)&&T.length===0&&T.push(...this.collectCsharpIdentifierFallbackLocations(t,h,D,T));let N=[],C=[];for(let M of T){let P=M.file,A=w.get(P);A===void 0&&(A=Pe(P),w.set(P,A));let v=M.start,I=M.start+M.length,k=this.toCharOffset(S,y,y.start),$=this.toCharOffset(S,y,y.end);if(P===y.fileAbs&&this.spansOverlap(v,I,k,$))continue;let L=v,j=I,z=n.deletedRefMarkerForLang(b,F),U=M?.metadata;if(b==="csharp")if(U?.csharpEnclosingKind==="statement"&&typeof U.csharpEnclosingStart=="number"&&typeof U.csharpEnclosingEnd=="number"&&U.csharpEnclosingEnd>U.csharpEnclosingStart){let te=n.expandStatementDeleteSpan(A,U.csharpEnclosingStart,U.csharpEnclosingEnd);L=te.start,j=te.end,z=""}else o?(C.push({file:P,start:v,end:I}),z=n.buildTsDeleteMarker(F,F)):(N.push({file:P,start:v,end:I}),z=null);if(z===null)continue;let K=x.get(P)||[];K.some(te=>te.start===L&&te.end===j&&te.replacement===z)||(K.push({start:L,end:j,replacement:z}),x.set(P,K))}if(N.length>0){let M=N.slice(0,5).map(A=>`${Wn.default.relative(t.projectRoot,A.file).replace(/\\/g,"/")}@${A.start}-${A.end}`).join(", "),P=N.length>5?` (+${N.length-5} more)`:"";p.push(`Delete skipped ${N.length} expression-context reference(s) that cannot be removed without breaking syntax. Manual review required: ${M}${P}`)}if(C.length>0){let M=C.slice(0,5).map(A=>`${Wn.default.relative(t.projectRoot,A.file).replace(/\\/g,"/")}@${A.start}-${A.end}`).join(", "),P=C.length>5?` (+${C.length-5} more)`:"";p.push(`Delete marker-replaced ${C.length} C# expression-context reference(s) because forceDeleteReferencesMayBreakSyntax=true: ${M}${P}`)}{let M=x.get(y.fileAbs)||[],P=this.toCharOffset(S,y,y.start),A=this.toCharOffset(S,y,y.end);if(b==="csharp"&&D?.kind==="EnumMember"){let v=this.expandCsharpEnumMemberDeleteSpan(S,P,A);P=v.start,A=v.end}else if(b==="csharp"&&D?.kind==="Field"){let v=this.expandCsharpFieldDeleteSpan(S,P,A);P=v.start,A=v.end}M.push({start:P,end:A,replacement:""}),x.set(y.fileAbs,M)}for(let[M,P]of x){if(!Os.default.existsSync(M))continue;let A=w.get(M),v=A!==void 0?A:Pe(M);P.sort((I,k)=>k.start-I.start);for(let I of P){if(I.start<0||I.end<I.start||I.end>v.length)return{fallbackToLsp:!1,result:{success:!1,error:`Invalid reference span while deleting ${Wn.default.relative(t.projectRoot,M)} (${I.start}-${I.end}).`,details:{changedFiles:Array.from(a)}}};v=v.slice(0,I.start)+I.replacement+v.slice(I.end)}un(M,v),a.add(Wn.default.relative(t.projectRoot,M).replace(/\\/g,"/"))}d+=1;let O=Wn.default.relative(t.projectRoot,y.fileAbs).replace(/\\/g,"/");if(a.has(O))try{let M=Os.default.readFileSync(y.fileAbs,"utf8");if(n.stripDeletedRefMarkers(M).replace(/\/\*[\s\S]*?\*\//g,"").replace(/(^|\s)\/\/.*$/gm,"").replace(/(^|\s)#.*$/gm,"").replace(/\s+/g,"").length===0)if(u)l.push(O);else{try{Os.default.unlinkSync(y.fileAbs)}catch{}c.push(O),a.delete(O)}}catch{}}if(d===0)return{fallbackToLsp:!0,result:n.buildSoftFailResult(e,"DB/span delete found no targets to modify.")};let f=Array.from(a);return{fallbackToLsp:!1,result:{success:!0,changes:{summary:`Deleted ${d} target${d!==1?"s":""}`,count:f.length},details:{deletedCount:d,changedFiles:f,deletedFiles:c,deletedFilesCandidates:l.length?l:void 0,receipt:{op:"delete",targets:s,changedFiles:f}},warnings:p}}}static async execute(e,t,r){if(e?.asOf)return{success:!1,error:"delete does not support asOf (time-travel edits are not supported). Restore a snapshot first if needed."};if(!e||!e.path)return{success:!1,error:'Missing required parameter: "path"'};if(typeof e.dryRun<"u"||typeof e.softDelete<"u")return{success:!1,error:"Please use restore-snapshot after any operation to undo it"};if(!e.expectedHashes)return{success:!1,error:'Missing required parameter: "expectedHashes"'};if(!Array.isArray(e.expectedHashes))return{success:!1,error:'Parameter type error: "expectedHashes" must be an array'};for(let b=0;b<e.expectedHashes.length;b++)if(typeof e.expectedHashes[b]!="string"||e.expectedHashes[b].includes("@"))return{success:!1,error:`Invalid expectedHashes[${b}]: must be the hash portion only without '@' (e.g., 'p12345678:c987654321')`};let s=e.forceDeleteReferencesMayBreakSyntax===!0;if(!s)return{success:!1,error:"Delete requires forceDeleteReferencesMayBreakSyntax=true for mutating runs because references may need marker replacement.",details:{changedFiles:[]}};let i=Array.isArray(e.path)?e.path:[e.path],o=Array.isArray(e.expectedHashes)?e.expectedHashes:[];if(i.length===0)return{success:!1,error:"Delete requires at least one path."};if(i.length>10)return{success:!1,error:`Delete accepts at most 10 targets per call; received ${i.length}.`};for(let b=0;b<i.length;b+=1)if(typeof i[b]!="string"||!i[b].trim())return{success:!1,error:`Invalid path${Array.isArray(e.path)?`[${b}]`:""}: must be a non-empty string.`};if(o.length!==i.length)return{success:!1,error:`Hash count mismatch: ${i.length} paths but ${o.length} hashes`};let a=i.map(b=>an(b,t.projectRoot));if(a.every(b=>b?.lang==="clojure"))return await this.executeViaClojureDbDelete(e,t,r);if(a.every(b=>b?.lang&&!["ts","js"].includes(b.lang))){let b=await this.executeViaDbNonTsDelete(e,t,r);if(b.result.success||!b.fallbackToLsp||!t.lsp)return b.result;try{let S=await this.executeViaLsp(e,t,a);if(!S?.success){let _=a[0]?.lang||"non-ts";return{...b.result,warnings:[...b.result?.warnings||[],`${_} LSP fallback failed; no additional deletes applied. ${S?.error?`Reason: ${S.error}`:""}`.trim()]}}return{...S,warnings:[...S.warnings||[],"delete used LSP fallback because DB/span path did not complete."]}}catch(S){let _=a[0]?.lang||"non-ts";return{...b.result,warnings:[...b.result?.warnings||[],`${_} LSP fallback threw; no additional deletes applied. ${S?.message||String(S)}`]}}}if(i.length>1){let b=i.map((_,R)=>{let E=o[R],T=`${_}@${E}`,x=es(T,r,t.projectRoot);return x?{path:_,hash:E,orderFile:x.getSourceFile().getFilePath(),orderStart:x.getStart(!1)}:{path:_,hash:E,orderFile:"",orderStart:-1,error:{success:!1,error:"Target declaration not found (hash or path mismatch)",error_code:"resolve_failed",details:{deletedCount:0,failedAt:{pathWithHash:T,reason:"target_resolution_failed"},suggestion:"Use find-nodes with include.body to refresh path@hash and retry",changedFiles:[]}}}}),S=b.find(_=>_.error);if(S?.error)return S.error;b.sort((_,R)=>{let E=_.orderFile.localeCompare(R.orderFile);return E!==0?E:R.orderStart-_.orderStart}),i=b.map(_=>_.path),o=b.map(_=>_.hash)}try{Xe.info("[DeleteV4] Starting delete operation",{force:s,targets:i.length})}catch{}let u=0,d=0,p=new Set,f=[];for(let b=0;b<i.length;b++){let S=i[b],_=o[b];if(!_)return{success:!1,error:`Missing expectedHash for path index ${b}`};console.log(`[DeleteV4] Processing target ${S} with hash ${_}`);try{let M=S.split("#")[0],P=Wn.default.isAbsolute(M)?M:Wn.default.join(t.projectRoot,M);t.ls.ensureInProgram(P)}catch(M){Xe.warn("[DeleteV4] ensureInProgram failed",{targetPath:S,message:M?.message||String(M)})}let R=`${S}@${_}`,E=es(R,r,t.projectRoot);if(!E)return{success:!1,error:"Target declaration not found (hash or path mismatch)",error_code:"resolve_failed",details:{deletedCount:u,failedAt:{pathWithHash:R,reason:"target_resolution_failed"},suggestion:"Use find-nodes with include.body to refresh path@hash and retry",changedFiles:Array.from(p)}};let x=E.getSourceFile().getFilePath(),w=E.getStart(!1),D=E.getEnd(),F="declaration";hr.Node.isIdentifier(E)?F=E.getText():hr.Node.hasName(E)&&(F=E.getName());let N=[];if(this.isReferenceBearingTsDeleteTarget(E)){let M=await as(S,_,{includeDeclaration:!1},t,r);if(!M.success)return{success:!1,error:M.error||"find-references failed",details:{deletedCount:u,failedAt:{pathWithHash:R,reason:"find_references_failed"},suggestion:"Refresh target via find-nodes with include.body and retry delete with expectedHashes.",...M.details?{inner:M.details}:{}}};N=Fs(M.locations,t.projectRoot).filter(P=>!(P.file===x&&P.start>=w&&P.start+P.length<=D))}try{Xe.info("[DeleteV4] References accumulated",{count:N.length})}catch{}let C=e.batchSaves===!0,O=N.map(M=>({...M,replacement:n.buildTsDeleteMarker(M.sourceToken,F)}));O.push({file:x,start:w,length:D-w,replacement:"",isDefinition:!0,sourceToken:F,sourceKind:E.getKindName()});try{let M=Pm(O,{projectRoot:t.projectRoot,project:r,context:t,batchSaves:C}).changedFiles;for(let P of M)p.add(P);d+=M.length;for(let P of N)f.push({file:Wn.default.relative(t.projectRoot,P.file).replace(/\\/g,"/"),start:P.start,end:P.start+P.length,relationshipType:P.relationshipType,sourceToken:P.sourceToken,sourceKind:P.sourceKind});try{Xe.info("[DeleteV4] Deleted declaration",{name:F})}catch{}u++}catch(M){return{success:!1,error:`Failed to delete target: ${M?.message||M}`,details:{deletedCount:u,failedAt:{pathWithHash:R,reason:"text_edit_apply_failed"},failure:{message:M?.message,stack:M?.stack,file:x,start:w,end:D,expectedKind:E.getKindName()},changedFiles:Array.from(p)}}}}let m=[],h=[],g=e.batchSaves===!0;try{for(let b of Array.from(p))try{let S=Wn.default.isAbsolute(b)?b:Wn.default.join(t.projectRoot,b);if(!Os.default.existsSync(S)||!Os.default.statSync(S).isFile())continue;let _=Os.default.readFileSync(S,"utf8");if(n.stripDeletedRefMarkers(_).replace(/\/\*[\s\S]*?\*\//g,"").replace(/(^|\s)\/\/.*$/gm,"").replace(/(^|\s)#.*$/gm,"").replace(/\s+/g,"").length===0){let D=Wn.default.relative(t.projectRoot,S).replace(/\\/g,"/");if(g)h.push(D);else{try{Os.default.unlinkSync(S)}catch{}try{let F=r.getSourceFile(S);F&&r.removeSourceFile(F)}catch{}m.push(D)}}}catch{}}catch{}let y=Array.from(p);return{success:!0,changes:{summary:`Deleted ${u} target${u!==1?"s":""}`,count:d},details:{deletedCount:u,changedFiles:y,changedFileCount:y.length,deletedFiles:m,deletedFilesCandidates:h.length?h:void 0,receipt:{op:"delete",targets:i,changedFileCount:y.length,appliedReferences:f,failedReferences:[]}}}}}});function Sz(n,e){let t=ti.default.resolve(n),r=ti.default.join(t,"tsconfig.json"),s=e?ti.default.dirname(e):t,i;try{i=Ia.default.findConfigFile(s,Ia.default.sys.fileExists,"tsconfig.json")??void 0}catch{i=void 0}if(!i&&lS.default.existsSync(r)&&(i=r),i)try{let o=Ia.default.readConfigFile(i,Ia.default.sys.readFile),a={...o.config||{},compilerOptions:{...o.config&&o.config.compilerOptions||{},allowJs:!0}};return{compilerOptions:{...Ia.default.parseJsonConfigFileContent(a,Ia.default.sys,ti.default.dirname(i)).options,...Us.getSupportedEditCompilerOptions()},configUsed:i}}catch{}return{compilerOptions:{...MP},configUsed:null}}function DP(n){let e=[],t=ti.default.resolve(n.projectRoot),r=new Set,s=t.endsWith(ti.default.sep)?t:`${t}${ti.default.sep}`;for(let u of n.requiredFiles??[]){let d=ti.default.isAbsolute(u)?ti.default.resolve(u):ti.default.resolve(t,u);d.startsWith(s)&&r.add(d)}if(!r.size)return{project:new cS.Project({compilerOptions:{...MP},skipAddingFilesFromTsConfig:!0}),loadedFiles:[],configUsed:null,warnings:["Scoped project requested with no files; returning empty project."]};let i=Array.from(r)[0],{compilerOptions:o,configUsed:a}=Sz(t,i),c=new cS.Project({compilerOptions:o,skipAddingFilesFromTsConfig:!0}),l=[];for(let u of r)try{if(!lS.default.existsSync(u)){e.push(`Required file missing on disk: ${u}`);continue}c.getSourceFile(u)||c.addSourceFileAtPath(u),l.push(u)}catch(d){e.push(`Failed to add ${u}: ${d?.message||String(d)}`)}return{project:c,loadedFiles:l,configUsed:a,warnings:e}}var cS,ti,lS,Ia,MP,FP=ne(()=>{"use strict";cS=require("ts-morph"),ti=q(require("path")),lS=q(require("fs")),Ia=q(require("typescript"));Gl();MP=Us.getDefaultCompilerOptions()});function xz(n,e){if(!n)return!1;switch(e){case"exact":return n==="exact";case"heuristic":return n==="exact"||n==="heuristic";case"dynamic":return n==="exact"||n==="heuristic"||n==="dynamic";default:return!1}}async function OP(n,e,t){let r=e.target;if(!r)return null;let s=r.name||r.symbolKey?.split("/").pop()||null;if(!s)return null;let i=Yb(n.projectRoot,r),o=new Set([e.relFile]);for(let d of i.namespaces)for(let p of Au(n.projectRoot,d)??[])o.add(String(p||"").replace(/\\/g,"/"));let a=new Mt(n.projectRoot);for(let d of i.symbolKeys)for(let p of a.findCandidateFilesForTargetSymbolKey(d))o.add(String(p||"").replace(/\\/g,"/"));for(let d of i.names.size?i.names:new Set([s]))for(let p of a.findCandidateFilesForSymbol(d))o.add(String(p||"").replace(/\\/g,"/"));let c=[],l=[],u=new Set;try{let d=await rd(n.projectRoot,Array.from(o),{relTypes:["call"]});for(let p of d.rows){let f=String(p.file_path||"").replace(/\\/g,"/");if(!f||!o.has(f)||!xz(p.confidence,t)||!lm(p,r,i))continue;let m=cm(p,Number(p.start_pos),Number(p.end_pos),"head"),h=`${f}#${m.start}-${m.end}:REF`;if(u.has(h))continue;u.add(h);let g=a.getEnclosingFunction(f,m.start,m.end,void 0,"clojure")||void 0;c.push({file_path:f,start:m.start,end:m.end,relationshipType:"call",caller_decl_id:g,ref_name:p.ref_name??null,confidence:p.confidence})}}catch{return null}return c.length>0?{references:c,warnings:l}:null}var $P=ne(()=>{"use strict";ki();Vs();um();eS();sd()});var uS={};Lt(uS,{ensureSnapshotExists:()=>_z});function _z(n,e){if(e)try{let{openSnapshotsDb:t}=(wi(),be(_o)),r=t(n,{readonly:!0});try{if(!r.prepare("SELECT 1 FROM snapshots WHERE snapshot_id = ? LIMIT 1").get(e))throw new Error(`Unknown snapshotId: ${e}`)}finally{try{r.close()}catch{}}}catch(t){let r=t?.message||String(t);throw/Unknown snapshotId/.test(r)?t:new Error(`Unknown snapshotId: ${e}`)}}var dS=ne(()=>{"use strict"});var LP={};Lt(LP,{resolveTargetAtSnapshot:()=>wz});function wz(n,e,t,r){try{let[s,i]=String(t).split("#");if(!s||!i)return null;let{openSnapshotsDb:o}=(wi(),be(_o)),a=o(n,{readonly:!0});try{let{computeEffectiveMap:c}=(ei(),be(Zi)),d=c(a,String(e)).get(s)?.oid;if(!d)return null;let p=require("fs"),f=require("zlib"),m=jP.join(co(n),".git","objects",d.slice(0,2),d.slice(2)),h=p.readFileSync(m),g=f.inflateSync(h),y=g.indexOf(0),S=g.slice(y+1).toString("utf8"),{Project:_}=require("ts-morph"),E=new _({useInMemoryFileSystem:!0}).createSourceFile(s,S,{overwrite:!0}),{resolvePositionPath:T}=(Hi(),be(Fb)),x=T(i,E);if(!x){if(r){let N=E.getDescendants?.()||[];for(let C of N)try{let O=C.getName?.();if(O&&O===r){let M=C.getStart?.(),P=C.getEnd?.();if(typeof M=="number"&&typeof P=="number")return{name:O,start:M,end:P}}}catch{}}return null}let w;try{let N=x.getNameNode?.();w=N&&N.getText?N.getText():x.getName?.()||void 0}catch{}let D=x.getStart?.(),F=x.getEnd?.();return{name:w,start:D,end:F}}finally{try{a.close()}catch{}}}catch{return null}}var jP,zP=ne(()=>{"use strict";jP=q(require("path"));Vt()});function Rz(n){let e=n.indexOf("#");if(e<0)return null;let t=n.slice(e+1),r=t.lastIndexOf(":");return r<0?null:t.slice(r+1).trim()||null}function kz(n){return n?vz.has(n):!1}async function ud(n,e,t,r){let s=await Br(n,e);if(s?.text)return s.text;let i=r??(t?.fileAbs?Pe(t.fileAbs):"");return t?.lang&&t.lang!=="ts"&&t.lang!=="js"?ss(i,t.start,t.end):i.slice(t?.start??0,t?.end??0)}function Ez(){return["python3","python","python2"]}function Aa(n,e,t,r){let s=!!e.aggregate,i=e.sort,o=r.truncated?void 0:n.length,a=(i?.direction||"asc").toLowerCase()==="desc"?-1:1;if(s){let d=new Map;for(let g of n){let y=g.caller_decl_id||g.source_ref_id;d.set(y,(d.get(y)||0)+1)}let p=Array.from(d.entries()).map(([g,y])=>({path:g,count:y}));i?.by==="count"?p.sort((g,y)=>a*(g.count-y.count||g.path.localeCompare(y.path))):p.sort((g,y)=>a*g.path.localeCompare(y.path));let f=r.truncated?void 0:p.length,m=p.slice(r.offset,r.offset+r.limit),h=r.truncated?!0:r.offset+m.length<(f??0);return{success:!0,results:m,page:{limit:r.limit,offset:r.offset,hasMore:h,...f!==void 0&&{totalCount:f}},warnings:t.length?t:void 0}}let c=[...n];i?.by==="start"?c.sort((d,p)=>{let f=Nm(d.source_ref_id),m=Nm(p.source_ref_id);if(f!==m)return a*(f-m);let h=a*Am(d.source_ref_id).localeCompare(Am(p.source_ref_id));return h!==0?h:a*(d.depth-p.depth)}):c.sort((d,p)=>{let f=a*Am(d.source_ref_id).localeCompare(Am(p.source_ref_id));if(f!==0)return f;let m=a*(Nm(d.source_ref_id)-Nm(p.source_ref_id));return m!==0?m:a*(d.depth-p.depth)});let l=c.slice(r.offset,r.offset+r.limit).map(d=>({source_ref_id:d.source_ref_id,caller_decl_id:d.caller_decl_id,relationshipType:d.relationshipType,depth:d.depth})),u=r.truncated?!0:r.offset+l.length<(o??0);return{success:!0,results:l,page:{limit:r.limit,offset:r.offset,hasMore:u,...o!==void 0&&{totalCount:o}},warnings:t.length?t:void 0}}function Cz(n){if(n==null)return{relTypes:new Set(["call","new"])};let e=String(n).trim().toLowerCase();return e==="all"?{relTypes:new Set(["call","new","type"])}:e==="call"||e==="new"||e==="type"?{relTypes:new Set([e])}:{relTypes:new Set,error:`Invalid relType '${n}'. Supported values: call, new, type, all.`}}function Iz(n){let e=typeof n=="string"?n.trim().toLowerCase():"";switch(e){case"call":case"new":case"type":return e;default:return null}}function Az(n,e){return typeof e.callerStart!="number"||typeof e.callerEnd!="number"||!e.callerKind?void 0:`${En.default.relative(n,e.file).replace(/\\/g,"/")}#${e.callerStart}-${e.callerEnd}:${Pt.getAbbrev(e.callerKind,"csharp")}`}function Nz(n,e){if(n==null)return 1;if(typeof n=="string"){let t=n.trim().toLowerCase();if(t==="all")return Number.POSITIVE_INFINITY;let r=Number(t);Number.isNaN(r)||(n=r)}if(typeof n=="number"&&Number.isFinite(n)){if(n<=1)return 1;let t=Math.min(Math.floor(n),10);return t!==n&&e.push("depth capped to 10 for stability."),t}return 1}function Mz(n){let e=n.getNameNode?.();if(e&&typeof e.getStart=="function")return e.getStart();let t=n.getName?.();if(t&&typeof t=="string"){let r=n.getFirstDescendant(s=>s.getText?.()===t);if(r)return r.getStart()}return null}function Dz(n){let e=n.getParent?.();if(!e)return null;if(e.getKind?.()===Wt.SyntaxKind.CallExpression&&e.getExpression?.()===n)return"call";if(e.getKind?.()===Wt.SyntaxKind.NewExpression&&e.getExpression?.()===n)return"new";if(e.getKind?.()===Wt.SyntaxKind.PropertyAccessExpression){let s=e.getParent?.();if(s?.getKind?.()===Wt.SyntaxKind.CallExpression&&s.getExpression?.()===e)return"call";if(s?.getKind?.()===Wt.SyntaxKind.NewExpression&&s.getExpression?.()===e)return"new"}let t=[Wt.SyntaxKind.TypeReference,Wt.SyntaxKind.ExpressionWithTypeArguments,Wt.SyntaxKind.TypeQuery,Wt.SyntaxKind.TypeAliasDeclaration,Wt.SyntaxKind.InterfaceDeclaration,Wt.SyntaxKind.ImportType];return n.getFirstAncestor?.(s=>t.includes(s.getKind?.()??-1))?"type":null}function Fz(n){let e=[],t=new Set(["call","new"]),r=Array.from(n.relTypes).filter(f=>t.has(f));if(n.relTypes.size&&r.length===0)return e.push("relType filter excludes supported call relationships in asOf mode (call/new). Returning empty set."),{callSites:[],warnings:e};let s=r.length?r:["call","new"],i=n.target.getNameNode?.(),o=i&&i.getText?i.getText():n.target.getName?.()||null;try{let{resolveTargetAtSnapshot:f}=(zP(),be(LP)),m=f(n.projectRoot,n.asOf,n.targetPath,o||void 0);m&&m.name&&(o=String(m.name))}catch{}if(!o)return{callSites:[],warnings:e};let a=[],c=Math.max(n.limitHint||0,250),l=new Mt(n.projectRoot),u=l.findReferenceSpansByName(o,n.asOf),d=[];for(let f of u){let m=String(f.ref_kind||"").toLowerCase();if(!s.includes(m))continue;let h=String(f.file_path||"").replace(/\\/g,"/");if(h&&(d.push({filePath:h,start_pos:f.start_pos,end_pos:f.end_pos,relKind:m}),d.length>=c))break}let p=l.getEnclosingFunctionBatch(d.map(f=>({file:f.filePath,start:f.start_pos,end:f.end_pos})),n.asOf,"python");for(let f of d){let m=p.get(`${f.filePath}\0${f.start_pos}\0${f.end_pos}`)||void 0;a.push({source_ref_id:`${f.filePath}#${f.start_pos}-${f.end_pos}:REF`,caller_decl_id:m,relationshipType:f.relKind||"call"})}return{callSites:a,warnings:e}}function Am(n){return n.split("#")[0]||n}function Nm(n){let e=n.indexOf("#");if(e===-1)return 0;let r=n.slice(e+1).split(":")[0]?.split("-")[0];return Number(r||0)}function Oz(n){let e=[],t=[],r=new Set,s=new Mt(n.projectRoot),i=new Map,o=m=>{let h=typeof m=="string"?m.trim():"";if(!h)return[];if(i.has(h))return i.get(h);let g=[];try{g=s.findCandidateFilesForSymbol(h)||[]}catch(S){e.push(`Candidate discovery failed for '${h}': ${S?.message||S}`)}let y=[],b=new Set;for(let S of g){let _=Kz(n.projectRoot,S);!_||b.has(_)||(y.push(_),b.add(_))}return i.set(h,y),y},a=BP(n.rootDeclaration,n.projectRoot,0);if(!a)return e.push("Unable to describe target declaration for traversal."),{callSites:t,warnings:e,truncated:!1};let c=new Map,l=[],u=m=>{let h=o(m.name).filter(g=>g!==m.absPath);return{descriptor:m,pendingFiles:[...h],processedFiles:new Set,cachedSites:[],fullyExpanded:!1}},d=(m,h)=>{let g=BP(m,n.projectRoot,h);if(!g||c.has(g.key))return;let y=u(g);c.set(g.key,y),l.push(y)},p=u(a);c.set(a.key,p),l.push(p);let f=!1;for(;l.length&&t.length<n.fetchTarget;){let m=l[0],h=!m.processedFiles.has(m.descriptor.absPath),g=jz(m,Pz-1);if(!h&&g.length===0){m.fullyExpanded=!0,l.shift();continue}if(Lz({state:m,candidateBatch:g,relTypes:n.relTypes,projectRoot:n.projectRoot,warnings:e,seenRefKeys:r,callSites:t,fetchTarget:n.fetchTarget,maxDepth:n.maxDepth,enqueueDeclaration:d}).truncated){f=!0;break}$z(m)||(m.fullyExpanded=!0,l.shift())}return{callSites:t,warnings:e,truncated:f}}function $z(n){return n.fullyExpanded?!1:n.processedFiles.has(n.descriptor.absPath)?n.pendingFiles.length>0:!0}function jz(n,e){if(e<=0)return[];let t=[];for(;n.pendingFiles.length&&t.length<e;){let r=n.pendingFiles.shift();n.processedFiles.has(r)||t.push(r)}return t}function Lz(n){let e=new Set([n.state.descriptor.absPath]);for(let c of n.candidateBatch)e.add(c);let t=DP({projectRoot:n.projectRoot,requiredFiles:e});n.warnings.push(...t.warnings);let r=t.project,s=zz(r,n.state.descriptor);if(!s)return n.warnings.push(`Unable to rehydrate declaration for ${n.state.descriptor.key}.`),pS(n.state,e),{truncated:!1};let i=WP(s);if(!i)return n.warnings.push(`Missing declaration name node for ${n.state.descriptor.key}.`),pS(n.state,e),{truncated:!1};let o=i.findReferencesAsNodes?.()??[],a=!1;for(let c of o){if(Hz(i,c))continue;let l=En.default.resolve(c.getSourceFile().getFilePath());if(!e.has(l)||n.state.processedFiles.has(l))continue;let u=Dz(c);if(!u||!n.relTypes.has(u))continue;let d=Wz(c,n.projectRoot);if(!d)continue;let{callerDeclId:p,callerNode:f}=Uz(c,n.projectRoot),m=`${p||""}|${d}`;if(n.seenRefKeys.has(m))continue;n.seenRefKeys.add(m);let h=n.state.descriptor.depth+1,g={source_ref_id:d,caller_decl_id:p,relationshipType:u,depth:h};if(n.callSites.push(g),n.state.cachedSites.push(g),n.callSites.length>=n.fetchTarget){a=!0;break}f&&u!=="type"&&(n.maxDepth===Number.POSITIVE_INFINITY||h<n.maxDepth)&&n.enqueueDeclaration(f,h)}return pS(n.state,e),{truncated:a}}function pS(n,e){for(let t of e)n.processedFiles.add(t)}function zz(n,e){let t=n.getSourceFile(e.absPath)||n.getSourceFile(e.relPath);if(!t&&typeof n.addSourceFileAtPathIfExists=="function"&&(t=n.addSourceFileAtPathIfExists(e.absPath)),!t)return;let r=t.getDescendantAtPos(e.start);for(;r&&(r.getStart()!==e.start||r.getEnd()!==e.end);)r=r.getParent();return r||t.getDescendants().find(i=>i.getStart()===e.start&&i.getEnd()===e.end)}function BP(n,e,t){let r=Bz(n,e);if(!r)return null;let s=En.default.resolve(n.getSourceFile().getFilePath()),i=En.default.relative(e,s).replace(/\\/g,"/");return{absPath:s,relPath:i,start:n.getStart(),end:n.getEnd(),depth:t,key:r,name:qz(n)}}function Bz(n,e){try{let t=En.default.resolve(n.getSourceFile().getFilePath()),r=En.default.relative(e,t).replace(/\\/g,"/"),s=n.getStart(),i=n.getEnd(),o=Pt.getAbbrev(n.getKindName());return`${r}#${s}-${i}:${o}`}catch{return null}}function WP(n){if(Wt.Node.isFunctionDeclaration(n)||Wt.Node.isMethodDeclaration(n)||Wt.Node.isClassDeclaration(n)||Wt.Node.isInterfaceDeclaration(n))return n.getNameNode();if(Wt.Node.isFunctionExpression(n)||Wt.Node.isArrowFunction(n)){let e=n.getParent();if(!e)return;if(Wt.Node.isVariableDeclaration(e)||Wt.Node.isPropertyAssignment(e)||Wt.Node.isPropertyDeclaration(e)||Wt.Node.isPropertySignature(e))return e.getNameNode?.()}}function qz(n){try{let e=n.getName?.();if(typeof e=="string"&&e.trim())return e.trim();let t=WP(n);if(t){let r=t.getText();if(r&&r.trim())return r.trim()}}catch{}return null}function Hz(n,e){try{return e.getSourceFile().getFilePath()===n.getSourceFile().getFilePath()&&e.getStart()===n.getStart()}catch{return!1}}function Wz(n,e){try{return`${En.default.relative(e,n.getSourceFile().getFilePath()).replace(/\\/g,"/")}#${n.getStart()}-${n.getEnd()}:REF`}catch{return null}}function Uz(n,e){let t=n.getFirstAncestor(r=>Wt.Node.isFunctionDeclaration(r)||Wt.Node.isMethodDeclaration(r)||Wt.Node.isFunctionExpression(r)||Wt.Node.isArrowFunction(r));if(!t)return{};try{let r=En.default.relative(e,t.getSourceFile().getFilePath()).replace(/\\/g,"/"),s=Pt.getAbbrev(t.getKindName());return{callerDeclId:`${r}#${t.getStart()}-${t.getEnd()}:${s}`,callerNode:t}}catch{return{callerNode:t}}}function Kz(n,e){if(typeof e!="string"||!e.trim())return null;let t=En.default.isAbsolute(e)?En.default.resolve(e):En.default.resolve(n,e),r=En.default.resolve(n),s=r.endsWith(En.default.sep)?r:`${r}${En.default.sep}`;return t===r||t.startsWith(s)?t:null}var Wt,qP,En,HP,vz,dd,Tz,Pz,Im,UP=ne(()=>{"use strict";Wt=require("ts-morph"),qP=require("url");ki();qn();En=q(require("path"));ts();FP();vs();Xn();HP=require("child_process");uu();kr();Ns();$P();ka();sd();Zc();vz=new Set(["Function","FunctionDeclaration","Constructor","ConstructorDeclaration","Method","MethodDeclaration","LocalFunctionStatement","ArrowFunction","FunctionExpression"]);dd=class{static buildCallerRelTypeFilter(e){let t=e.size?Array.from(e):["call","new"];return{clause:` AND k.text IN (${t.map(()=>"?").join(", ")})`,params:t}}static buildEmptyResult(e,t,r){let s=Number(e.limit??10),i=Number(e.offset??0),o=Math.max(0,i),a=Math.max(1,Math.min(100,s)),c=[...t];return s!==a&&c.push("limit capped to MAX_PAGE_SIZE"),i!==o&&c.push("offset adjusted to be >= 0"),r&&c.push(r),{success:!0,results:[],page:{limit:a,offset:o,hasMore:!1,totalCount:0},warnings:c.length?c:void 0}}static async execute(e,t,r){try{if(e.asOf){let{ensureSnapshotExists:E}=(dS(),be(uS));try{E(t.projectRoot,String(e.asOf))}catch(T){return{success:!1,error:T?.message||String(T)}}}if(!e.of)return{success:!1,error:"Target path (of) is required for find-callers operation"};if(typeof e.of=="string"&&e.of.includes("@"))return{success:!1,error:"of must not include @hash. Provide the node path only and pass the hash via expectedHash."};let s=Number(e.limit??10),i=Number(e.offset??0),o=Math.max(0,i),a=Math.max(1,Math.min(100,s)),c=[];s!==a&&c.push("limit capped to MAX_PAGE_SIZE"),i!==o&&c.push("offset adjusted to be >= 0");let l=e.expectedHash;if(typeof l!="string"||!l.trim()||l.includes("@"))return{success:!1,error:"expectedHash is required for find-callers and must omit the @ prefix."};let u=l.trim(),d=Cz(e.relType);if(d.error)return{success:!1,error:d.error};let p=d.relTypes,f=Nz(e.depth,c),m=e.asOf,h=an(e.of,t.projectRoot),g=h?.lang;if(g&&g!=="ts"&&g!=="js"){let E=Rz(e.of);if(!kz(E))return{success:!1,error:`find-callers requires a callable declaration; use find-references for ${E?E.toLowerCase():"non-callable targets"}.`}}if(g==="python"){if(!h)return{success:!1,error:"Unable to parse node path for python callers."};if(m){f>1&&f!==Number.POSITIVE_INFINITY?c.push("python callers currently support depth=1 in asOf mode; returning direct callers only."):f===Number.POSITIVE_INFINITY&&c.push('python callers currently support depth=1 in asOf mode; treating depth="all" as 1.');let x=Pe(h.fileAbs),w=await ud(t.projectRoot,e.of,h,x),D=u.startsWith("@")?u:`@${u}`,F=et(e.of,w),N=on(D,F);if(N.type!=="MATCH")return{success:!1,error:`Hash mismatch (${N.type}). Re-run find-nodes to refresh the target.`};let C=new Mt(t.projectRoot),O=C.getNodeName(e.of,m)||C.getNodeName(e.of);if(!O)return{success:!1,error:"Could not determine name of the target symbol."};let M=C.findReferenceSpansByName(O,m),P=[],A=Math.max(o+a+50,250);for(let v of M){let I=String(v.ref_kind||"").toLowerCase();if(p.size&&!p.has(I))continue;let k=String(v.file_path||"").replace(/\\/g,"/"),$=`${k}#${v.start_pos}-${v.end_pos}:REF`,L=C.getEnclosingFunction(k,v.start_pos,v.end_pos,m,"python")||void 0;if(P.push({source_ref_id:$,caller_decl_id:L,relationshipType:I||"call",depth:1}),P.length>=A)break}return Aa(P,e,c,{limit:a,offset:o})}let E=await this.executeViaDbNonTs(e,t,h,u,p,c);if(E)return E;let T=await this.executeViaPythonResolver(e,t,h,u,c);if(T)return T;if(!t.lsp){try{let{logger:x}=(qn(),be(Yr));x.warn("[find-callers] python request has no LSP host configured",{lang:"python",target:e.of,projectRoot:t.projectRoot,hint:"CLI runners construct CodeEngine without lspHost; use extension runtime or inject a host via CodeEngineFactory options."})}catch{}try{console.warn(`[find-callers][diag] no LSP host configured (lang=python, target=${e.of})`)}catch{}return this.buildEmptyResult(e,c,"python LSP not available (no LSP host configured); returning empty results.")}try{let x=await this.executeViaLsp(e,t,h,u,c);return x?.success?x:this.buildEmptyResult(e,c,`python LSP failed; returning empty results. ${x?.error?`Reason: ${x.error}`:""}`.trim())}catch(x){return this.buildEmptyResult(e,c,`python LSP failed; returning empty results. ${x?.message||String(x)}`)}}if(g&&g!=="ts"&&g!=="js"){if(g==="clojure"){if(!p.has("call"))return this.buildEmptyResult(e,c,"Clojure find-callers only supports relType=call.");let E=await Ei(t,e,"find-callers");if(!E)return{success:!1,error:"Unable to resolve canonical Clojure target for find-callers."};let T=E.resolved,x=e.minConfidence,w=F=>{let N=[...F.warnings||[],...c];return N.length?{...F,warnings:N}:F},D=x?[x]:["exact","heuristic","dynamic"];for(let F of D){let N=await this.executeViaDbClojure(e,t,T,p,c,F);if(N)return w(N)}return w(this.buildEmptyResult(e,c,"Clojure DB caller lookup returned no results."))}if(g==="csharp"){let E=await this.executeViaCsharpQuery(e,t,h,u,p,c);if(E)return E}else{let E=await this.executeViaDbNonTs(e,t,h,u,p,c);if(E)return E}if(!t.lsp){try{let{logger:E}=(qn(),be(Yr));E.warn("[find-callers] non-TS request has no LSP host configured",{lang:g,target:e.of,projectRoot:t.projectRoot,hint:"CLI runners construct CodeEngine without lspHost; use extension runtime or inject a host via CodeEngineFactory options."})}catch{}try{console.warn(`[find-callers][diag] no LSP host configured (lang=${g}, target=${e.of})`)}catch{}return this.buildEmptyResult(e,c,`${g} LSP not available (no LSP host configured); returning empty results.`)}try{let E=await this.executeViaLsp(e,t,h,u,c);return E?.success?E:this.buildEmptyResult(e,c,`${g} LSP failed; returning empty results. ${E?.error?`Reason: ${E.error}`:""}`.trim())}catch(E){return this.buildEmptyResult(e,c,`${g} LSP failed; returning empty results. ${E?.message||String(E)}`)}}let y;try{y=es(`${e.of}@${u}`,r,t.projectRoot)}catch(E){return{success:!1,error:E?.message||String(E)}}if(!y)return{success:!1,error:"Target declaration not found"};if(Mz(y)==null)return{success:!1,error:`Cannot determine declaration name position for ${y.getKindName()}`};let S=e.of,_=[],R=!1;if(m){f>1&&f!==Number.POSITIVE_INFINITY?c.push("asOf callers currently support depth=1; returning direct callers only."):f===Number.POSITIVE_INFINITY&&c.push('asOf callers currently support depth=1; treating depth="all" as 1.');let E=Fz({projectRoot:t.projectRoot,target:y,targetPath:S,asOf:m,relTypes:p,limitHint:o+a+50});c.push(...E.warnings),_.push(...E.callSites.map(T=>({...T,depth:1})))}else{if(!y.getName?.())return{success:!1,error:"Could not determine name of the target symbol."};let T=Oz({projectRoot:t.projectRoot,rootDeclaration:y,relTypes:p,maxDepth:f,fetchTarget:Math.min(o+a+1,Tz)});c.push(...T.warnings),_.push(...T.callSites),R=T.truncated}return Aa(_,e,c,{limit:a,offset:o,truncated:R})}catch(s){return{success:!1,error:`Find callers failed: ${s?.message||s}`}}}static async executeViaDbClojure(e,t,r,s,i,o){let a=Date.now(),c=new Map,l=new Map,u=_=>{c.set(_,Date.now())},d=_=>{let R=c.get(_);R!=null&&(c.delete(_),l.set(_,(l.get(_)||0)+(Date.now()-R)))},p=(_,R)=>{Xe.info("[find-callers][clojure-db][timing]",{target:e.of,confidence:o,exit:_,elapsedMs:Date.now()-a,phases:Object.fromEntries(l),...R||{}})};u("hash_validation"),d("hash_validation"),u("db_call_collection");let f=await OP(t,r,o);if(d("db_call_collection"),!f)return p("no_results"),null;i.push(...f.warnings);let m=f.references.map(_=>({source_ref_id:`${_.file_path}#${_.start}-${_.end}:REF`,caller_decl_id:_.caller_decl_id,relationshipType:_.relationshipType,depth:1}));u("result_format");let h=Number(e.limit??10),g=Number(e.offset??0),y=Math.max(0,g),b=Math.max(1,Math.min(100,h));h!==b&&i.push("limit capped to MAX_PAGE_SIZE"),g!==y&&i.push("offset adjusted to be >= 0");let S=Aa(m,e,i,{limit:b,offset:y});return S.confidenceLevel=o,d("result_format"),p("success",{canonicalPath:r.nodePath,callSiteCount:m.length}),S}static async executeViaDbNonTs(e,t,r,s,i,o){if(!r)return null;let a=Pe(r.fileAbs),c=await ud(t.projectRoot,e.of,r,a),l=s.startsWith("@")?s:`@${s}`,u=et(e.of,c),d=on(l,u);if(d.type!=="MATCH")return{success:!1,error:`Hash mismatch (${d.type}). Re-run find-nodes to refresh the target.`};let p=r.lang==="csharp"&&/\(\s*this\b/.test(c),f=Sn(t.projectRoot,r.fileAbs,r.start,r.end);if(!f)return null;let{clause:m,params:h}=this.buildCallerRelTypeFilter(i),g=[],y=!1;try{let E=new Mt(t.projectRoot),T=h.map(v=>String(v||"").trim()).filter(Boolean),x=new Set,w=!1;if(f.symbolKey)for(let v of E.findCandidateFilesForTargetSymbolKey(f.symbolKey))x.add(v),w=!0;if(!w&&f.name)for(let v of E.findCandidateMentionFilesForSymbol(f.name,T))x.add(v);x.add(r.fileRel.replace(/\\/g,"/"));let D=Number(e.limit??10),F=Number(e.offset??0),N=Math.max(0,F),C=Math.max(1,Math.min(100,D)),O=await vm(t.projectRoot,Array.from(x).sort((v,I)=>v.localeCompare(I)),{symbolKey:f.symbolKey,nodeId:f.nodeId,fileRel:r.fileRel.replace(/\\/g,"/"),name:f.name,paramCount:f.paramCount,allowImplicitReceiverArity:p},{relTypes:T,maxMatches:N+C+1});y=O.truncated;let M=O.rows.map(v=>({file_path:v.file_path,start_pos:v.start_pos,end_pos:v.end_pos,rel_type:v.ref_kind||"call"}));if(!M.length)return null;let P=M.filter(v=>String(v.file_path||"").replace(/\\/g,"/")),A=E.getEnclosingFunctionBatch(P.map(v=>({file:String(v.file_path||"").replace(/\\/g,"/"),start:v.start_pos,end:v.end_pos})),void 0,r.lang??void 0);for(let v of P){let I=String(v.file_path||"").replace(/\\/g,"/");if(!I)continue;let k=`${I}#${v.start_pos}-${v.end_pos}:REF`,$=A.get(`${I}\0${v.start_pos}\0${v.end_pos}`)||void 0;g.push({source_ref_id:k,caller_decl_id:$,relationshipType:v.rel_type||"call",depth:1})}}catch{return null}let b=Number(e.limit??10),S=Number(e.offset??0),_=Math.max(0,S),R=Math.max(1,Math.min(100,b));return b!==R&&o.push("limit capped to MAX_PAGE_SIZE"),S!==_&&o.push("offset adjusted to be >= 0"),Aa(g,e,o,{limit:R,offset:_,truncated:y})}static async executeViaPythonResolver(e,t,r,s,i){if(!r?.fileAbs)return null;let o=Pe(r.fileAbs),a=await ud(t.projectRoot,e.of,r,o),c=s.startsWith("@")?s:`@${s}`,l=et(e.of,a),u=on(c,l);if(u.type!=="MATCH")return{success:!1,error:`Hash mismatch (${u.type}). Re-run find-nodes to refresh the target.`};let d=new Mt(t.projectRoot),p=d.getNodeName(e.of)||null;if(!p)return null;let f=Sn(t.projectRoot,r.fileAbs,r.start,r.end),m=new Set;if(f?.symbolKey)for(let w of d.findCandidateFilesForTargetSymbolKey(f.symbolKey))m.add(w);for(let w of d.findCandidateFilesForSymbol(p))m.add(w);let h=Array.from(m).map(w=>En.default.resolve(t.projectRoot,w));if(h.length===0)return null;let g={targetFile:r.fileAbs,start:r.start,end:r.end,candidates:h},y=En.default.resolve(t.projectRoot,"tools/python-indexer/pando_python_resolver.py"),b=Ez(),S=null;for(let w of b)try{let D=(0,HP.spawnSync)(w,["-u",y],{input:JSON.stringify(g),encoding:"utf8",maxBuffer:10485760});if(D.status!==0&&D.status!==null)continue;let F=D.stdout?.toString?.()??"";if(!F)continue;let N=JSON.parse(F);if(N?.ok&&Array.isArray(N.references)){S=N.references;break}}catch{continue}if(!S||S.length===0)return null;let _=[];for(let w of S){let D=En.default.relative(t.projectRoot,w.file).replace(/\\/g,"/"),F=d.getEnclosingFunction(D,w.start,w.end,void 0,"python")||void 0;_.push({source_ref_id:`${D}#${w.start}-${w.end}:REF`,caller_decl_id:F,relationshipType:"call",depth:1})}let R=Number(e.limit??10),E=Number(e.offset??0),T=Math.max(0,E),x=Math.max(1,Math.min(100,R));return R!==x&&i.push("limit capped to MAX_PAGE_SIZE"),E!==T&&i.push("offset adjusted to be >= 0"),Aa(_,e,i,{limit:x,offset:T})}static async executeViaCsharpQuery(e,t,r,s,i,o){if(!r?.fileAbs)return null;let a=Pe(r.fileAbs),c=await ud(t.projectRoot,e.of,r,a),l=s.startsWith("@")?s:`@${s}`,u=et(e.of,c),d=on(l,u);if(d.type!=="MATCH")return{success:!1,error:`Hash mismatch (${d.type}). Re-run find-nodes to refresh the target.`};let p=new Mt(t.projectRoot),f=Sn(t.projectRoot,r.fileAbs,r.start,r.end),m=f?.name||p.getNodeName(e.of)||null;if(!m)return null;let h=new Set;h.add(En.default.relative(t.projectRoot,r.fileAbs).replace(/\\/g,"/"));let g=Array.from(i),y=!1;if(f?.symbolKey)for(let C of p.findCandidateFilesForTargetSymbolKey(f.symbolKey))h.add(C),y=!0;if(!y)for(let C of p.findCandidateMentionFilesForSymbol(m,g))h.add(C);let b=Array.from(h).sort((C,O)=>C.localeCompare(O));if(!b.length)return this.buildEmptyResult(e,o);let S=Number(e.limit??10),_=Number(e.offset??0),R=Math.max(0,_),E=Math.max(1,Math.min(100,S)),T=R+E,x=[],w=new Set,D=new Map,F=!1,N=!!e.aggregate;for(let C=0;C<b.length;C+=Im){let O=b.slice(C,C+Im),M=await lf(t.projectRoot,r.fileAbs,e.of,O.map(A=>En.default.resolve(t.projectRoot,A)),{relTypes:g,maxResults:N?Math.max(1,T-D.size):Math.max(1,T-x.length),includeTargetFileReferences:C===0,aggregateByCaller:N}),P=M?.references??[];for(let A of P){let v=Iz(A.refKind);if(!v||!i.has(v))continue;let k=`${En.default.relative(t.projectRoot,A.file).replace(/\\/g,"/")}#${A.start}-${A.end}:REF`;if(w.has(k))continue;w.add(k);let $=Az(t.projectRoot,A);if(x.push({source_ref_id:k,caller_decl_id:$,relationshipType:v,depth:1}),N){let L=$||k;D.set(L,(D.get(L)||0)+1)}}if(N){if(D.size>=T||M?.truncated===!0){F=M?.truncated===!0||C+Im<b.length;break}}else if(x.length>=T||M?.truncated===!0){F=M?.truncated===!0||C+Im<b.length;break}}return x.length===0?this.buildEmptyResult(e,o):(S!==E&&o.push("limit capped to MAX_PAGE_SIZE"),_!==R&&o.push("offset adjusted to be >= 0"),Aa(x,e,o,{limit:E,offset:R,truncated:F}))}static async executeViaLsp(e,t,r,s,i){if(!r)return{success:!1,error:"Unable to parse node path for LSP callers."};let o=t.lsp;if(!o)return{success:!1,error:"find-callers requires an active LSP host for this language."};e.asOf&&i.push("asOf is ignored for LSP-backed callers.");let a=e.relType;if(a&&String(a).toLowerCase()!=="call"&&String(a).toLowerCase()!=="all")return{success:!1,error:"LSP callers only support relType 'call'."};let c=Pe(r.fileAbs),l=await ud(t.projectRoot,e.of,r,c),u=s.startsWith("@")?s:`@${s}`,d=et(e.of,l),p=on(u,d);if(p.type!=="MATCH")return{success:!1,error:`Hash mismatch (${p.type}). Re-run find-nodes to refresh the target.`};let f=await o.documentSymbols(r.fileAbs),m=Hc(f,c,r.start,r.end),h=r.lang&&r.lang!=="ts"&&r.lang!=="js"?_i(c,r.start):r.start,g=m?.selectionRange?.start??ba(c,h),y=await o.incomingCalls(r.fileAbs,g),b=[];for(let T of y){let x=T.uri.startsWith("file:")?(0,qP.fileURLToPath)(T.uri):T.uri,w=En.default.relative(t.projectRoot,x).replace(/\\/g,"/"),D=Pe(x),F=Ys(D,T.selectionRange),N=`${w}#${F.start}-${F.end}:${Pt.getAbbrev(T.kind,r.lang??"ts")}`,C=T.fromRanges&&T.fromRanges.length?T.fromRanges:[T.selectionRange];for(let O of C){let M=Ys(D,O),P=`${w}#${M.start}-${M.end}:REF`;b.push({source_ref_id:P,caller_decl_id:N,relationshipType:"call",depth:1})}}let S=Number(e.limit??10),_=Number(e.offset??0),R=Math.max(0,_),E=Math.max(1,Math.min(100,S));return S!==E&&i.push("limit capped to MAX_PAGE_SIZE"),_!==R&&i.push("offset adjusted to be >= 0"),Aa(b,e,i,{limit:E,offset:R})}};Tz=5e3,Pz=15,Im=48});function Zz(n){let e=n;if(typeof e.getNameNode=="function"){let t=e.getNameNode();if(t)return t.getStart()}if(typeof e.getName=="function"){let t=e.getName();if(t&&typeof t=="string"){let r=n.getFirstDescendant(s=>s.getText?.()===t);if(r)return r.getStart()}}return null}function Gz(n,e,t){if(!e?.name)return null;let r=Number(e.start),s=Number(e.end);if(!Number.isFinite(r)||!Number.isFinite(s)||s<=r)return null;let i=!!t&&t!=="ts"&&t!=="js"&&t!=="csharp",o=Nt(n,{start:r,end:s},t);if(!o)return null;let a=e.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=[new RegExp(`^\\s*\\((?:clojure\\.core\\/)?[A-Za-z0-9*+!_?.<>=/-]+\\s+(${a})(?=[\\s\\[\\](){}]|$)`),new RegExp(`(^|[^A-Za-z0-9_\\-.\\/])(${a})(?=[^A-Za-z0-9_\\-.\\/]|$)`)];for(let l of c){let u=o.match(l);if(!u||u.index==null)continue;let d=u[1]===e.name?u[1]:u[2],p=u[0].lastIndexOf(d);if(p<0)continue;let f=u.index+p,m=f+d.length,h=i?r+Buffer.byteLength(o.slice(0,f),"utf8"):r+f,g=h+d.length;if(i){let y=Buffer.byteLength(o.slice(f,m),"utf8");if(y!==d.length)return{start:h,end:h+y}}if(h>=r&&g<=s)return{start:h,end:g}}return null}function Jz(n,e,t,r,s,i,o){let a=n.match(/^(\d+)-(\d+)(:.+)$/);if(!a)return n;let c=t,l=r,u=!!o&&o!=="ts"&&o!=="js"&&o!=="csharp",d=s.filter(p=>ni.default.resolve(p.file)===ni.default.resolve(e)).slice().sort((p,f)=>p.start-f.start);for(let p of d){let f=p.start,m=p.start+p.length,h=`${p.prefixText||""}${i}${p.suffixText||""}`,y=(u?Buffer.byteLength(h,"utf8"):h.length)-p.length;y!==0&&(m<=c?(c+=y,l+=y):f<l&&(l+=y))}return`${c}-${l}${a[3]}`}var ni,Na,ko,KP,Eo,fS=ne(()=>{"use strict";ni=q(require("path")),Na=q(require("fs")),ko=require("ts-morph"),KP=require("url");ts();Xn();Ea();Hi();kr();Ns();ka();Cm();Zc();Eo=class{static shouldUseCsharpIdentifierFallback(e){let t=String(e?.kind||"").trim();return t==="VariableDeclarator"||t==="Field"||t==="PropertyDeclaration"||t==="Property"||t==="EnumMemberDeclaration"||t==="EnumMember"}static shouldRenameCsharpConstructors(e){let t=String(e?.kind||"").trim();return t==="ClassDeclaration"||t==="Class"}static collectCsharpConstructorDeclarationLocations(e,t,r){let s=typeof e?.name=="string"?e.name.trim():"";if(!s||!e?.fileRel)return[];let i=ni.default.resolve(r,e.fileRel);if(!Na.default.existsSync(i))return[];let o=Pe(i),a=Number(e.start),c=Number(e.end);if(!Number.isFinite(a)||!Number.isFinite(c)||c<=a)return[];let l=Nt(o,{start:a,end:c},"csharp");if(!l)return[];let u=s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp(`(?<![A-Za-z0-9_])${u}(?=\\s*\\()`,"g"),p=new Set(t.map(m=>`${ni.default.resolve(m.file)}:${m.start}:${m.length}`)),f=[];for(let m of l.matchAll(d)){let h=m.index??-1;if(h<0)continue;let g=a+h,y=s.length,b=`${i}:${g}:${y}`;p.has(b)||(p.add(b),f.push({file:i,start:g,length:y,isDefinition:!0,sourceKind:"ConstructorDeclaration",relationshipType:"reference"}))}return f}static collectCsharpIdentifierFallbackLocations(e,t,r,s){let i=typeof r?.name=="string"?r.name.trim():"";if(!i)return[];let o=new Set,a=ld(t,e.projectRoot);for(let p of a?.files||[])p&&o.add(String(p).replace(/\\/g,"/"));r?.fileRel&&o.add(String(r.fileRel).replace(/\\/g,"/"));let c=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),l=new RegExp(`(?<![A-Za-z0-9_])${c}(?![A-Za-z0-9_])`,"g"),u=new Set(s.map(p=>`${ni.default.resolve(p.file)}:${p.start}:${p.length}`)),d=[];for(let p of o){let f=ni.default.resolve(e.projectRoot,p);if(!Na.default.existsSync(f))continue;let m=Pe(f);for(let h of m.matchAll(l)){let g=h.index??-1;if(g<0)continue;let y=g,b=i.length,S=`${f}:${y}:${b}`;u.has(S)||(u.add(S),d.push({file:f,start:y,length:b,isDefinition:!1,relationshipType:"reference"}))}}return d}static buildSoftFailResult(e,t){let r=Number(e.page?.limit??5),s=Number(e.page?.offset??0),i=Math.max(0,s),o=Math.max(1,Math.min(100,r)),a=0,c=!1,l={op:"rename",path:e.path,newName:e.newName,changedFiles:[]},u=[t];return r!==o&&u.push("page.limit capped to 100"),s!==i&&u.push("page.offset adjusted to be >= 0"),{success:!0,changes:{summary:"No changes applied (soft-fail).",count:0},details:{changedFiles:[],changedFilesPage:{totalCount:a,limit:o,offset:i,hasMore:c},receipt:l,updatedTargets:void 0},warnings:u}}static async execute(e,t,r){try{if(e&&typeof e.dryRun<"u")return{success:!1,error:"Please use restore-snapshot after any operation to undo it"};if(e.asOf)return{success:!1,error:"rename does not support asOf (time-travel edits are not supported). Apply changes to the current workspace or restore a snapshot first."};if(!e.path||!e.newName)return{success:!1,error:"path and newName are required"};if(typeof e.path=="string"&&e.path.includes("@"))return{success:!1,error:"path must not include @hash for rename. Provide the path portion only."};if(typeof e.expectedHash!="string"||!e.expectedHash||e.expectedHash.includes("@"))return{success:!1,error:"expectedHash is required for rename and must omit the @ prefix"};let s=String(e.expectedHash),i=an(e.path,t.projectRoot),o=i?.lang;if(o&&o!=="ts"&&o!=="js"){if(o==="clojure")return(await this.executeViaDbNonTsRename(e,t,i,s,r)).result;let A=await this.executeViaDbNonTsRename(e,t,i,s,r);if(A.result.success||!A.fallbackToLsp||!t.lsp)return A.result;try{let v=await this.executeViaLsp(e,t,i,s,r);if(!v?.success)return{...A.result,warnings:[...A.result?.warnings||[],`${o} LSP fallback failed. ${v?.error?`Reason: ${v.error}`:"No additional detail provided."}`.trim()]};let I=[...v.warnings||[],`${o} rename used LSP fallback because DB references were empty.`];return{...v,warnings:I}}catch(v){return{...A.result,warnings:[...A.result?.warnings||[],`${o} LSP fallback threw. ${v?.message||String(v)}`]}}}let a=t.queries;if(!a?.getRenameInfo)return{success:!1,error:"Rename executor requires a scoped query layer. Ensure the operation is routed through the code engine."};let c=`${e.path}@${s}`,l=es(c,r,t.projectRoot);if(!l)return{success:!1,error:"Declaration not found for rename: the specified node path does not exist or its hash has changed.",error_code:"resolve_failed",hints:["IMPORTANT: Call find-nodes on the target file to get the current path and hash, then retry rename with the fresh values."],details:{suggestion:"Refresh the target by running find-nodes with include.body to obtain a fresh path and hash, then retry with expectedHash.",changedFiles:[]}};let u=l.getSourceFile().getFilePath();try{t.ls.ensureInProgram(u)}catch(A){try{(qn(),be(Yr)).logger.warn("[Rename] ensureInProgram failed",{file:u,message:A?.message||String(A)})}catch{}}let d=Zz(l);if(d==null)return{success:!1,error:`Cannot determine declaration name position for ${l.getKindName()}`,details:{changedFiles:[]}};try{let A=a.getRenameInfo(u,d);if(A&&A.canRename===!1)return{success:!1,error:this.describeNonRenameable(l)??A.localizedErrorMessage??"This node cannot be renamed. Use find-nodes to locate a renameable declaration.",details:{changedFiles:[]}}}catch(A){let v=this.describeNonRenameable(l);return v?{success:!1,error:v,details:{changedFiles:[]}}:{success:!1,error:`Unable to validate rename target: ${A?.message||A}`}}let p=!!e.includeStrings,f=!!e.includeComments,m=(()=>{try{if(typeof l.getName=="function"){let v=l.getName();if(typeof v=="string"&&v.length)return v}let A=l.getNameNode?.();if(A&&typeof A.getText=="function"){let v=A.getText();if(typeof v=="string"&&v.length)return v}}catch{}return null})();if(m&&m===e.newName)return{success:!1,error:"newName matches the existing identifier. Provide a different name.",details:{changedFiles:[]}};let h=await as(e.path,s,{includeDeclaration:!0,includeStrings:p,includeComments:f},t,r);if(!h.success)return{success:!1,error:h.error||"Unable to collect rename locations",details:h.details??{changedFiles:[]}};let g=Fs(h.locations,t.projectRoot);if((qn(),be(Yr)).logger.info("[Rename] Locations collected",{references:g.length}),!g.length)return{success:!1,error:"No rename locations returned by the reference query.",details:{changedFiles:[]}};let y=g.reduce((A,v)=>A+(v.isDefinition?0:1),0),b=e.expectedHash?`${e.path}@${e.expectedHash}`:e.path,S,_,R=e.batchSaves===!0,E=Date.now(),T=[];try{T=Pm(g.map(A=>({...A,replacement:`${A.prefixText||""}${e.newName}${A.suffixText||""}`})),{projectRoot:t.projectRoot,project:r,context:t,batchSaves:R}).changedFiles}catch(A){return{success:!1,error:`Failed applying rename edits: ${A?.message||A}`}}if(T.includes(ni.default.relative(t.projectRoot,u).replace(/\\/g,"/"))){let A=(e.path||"").split("#")[1],v=r.getSourceFile(u);if(A&&v){let I=Pn(A,v);if(I){let{buildNodeRef:k}=(Xn(),be(AT)),$=k(I,t.projectRoot);S=$.ref,_=$.hash}}}if((qn(),be(Yr)).logger.info("[Rename] Edits applied",{changedFiles:T.length,ms:Date.now()-E}),T.length===0)return{success:!1,error:"Rename produced no edits. Ensure the target is valid and the newName differs from the current identifier.",details:{changedFiles:[]}};let{pageSlice:x,totalCount:w,limit:D,offset:F,hasMore:N,warnings:C}=AP(T,e.page,5),O={op:"rename",path:e.path,newName:e.newName,changedFileCount:T.length},M=[...C];e.asOf&&M.push("asOf ignored for rename");let P=S&&_?[{oldRef:b,newRef:S,newHash:_}]:void 0;return(qn(),be(Yr)).logger.info("[Rename] Done",{changedFiles:T.length}),{success:!0,changes:{summary:`TS LS rename applied. Files: ${T.length}`,count:T.length},details:{changedFiles:T,changedFilesPage:{totalCount:w,limit:D,offset:F,hasMore:N},receipt:O,updatedTargets:P,referencesRenamed:y},warnings:M.length?M:void 0}}catch(s){return{success:!1,error:`TS LS rename failed: ${s.message}`,details:{changedFiles:[]}}}}static async executeViaDbNonTsRename(e,t,r,s,i){let o=r.lang||"non-ts",a=o==="clojure"?(await Ei(t,e,"rename"))?.resolved??null:null;if(o==="clojure"&&!a)return{fallbackToLsp:!1,result:{success:!1,error:"Unable to resolve canonical Clojure target for rename.",error_code:"resolve_failed",details:{changedFiles:[]}}};let c=a?.nodePath??e.path,l=a?.currentHash?a.currentHash.startsWith("@")?a.currentHash.slice(1):a.currentHash:s,u=a?an(c,t.projectRoot):r;if(!u)return{fallbackToLsp:!1,result:{success:!1,error:"Unable to parse canonical target for rename.",error_code:"resolve_failed",details:{changedFiles:[]}}};if(o!=="clojure"){let $=(await Br(t.projectRoot,e.path))?.text??Nt(Pe(r.fileAbs),{start:r.start,end:r.end},r.lang),L=s.startsWith("@")?s:`@${s}`,j=et(e.path,$),z=on(L,j);if(z.type!=="MATCH")return{fallbackToLsp:!1,result:{success:!1,error:`Hash mismatch (${z.type}). Re-run find-nodes to refresh the target.`,error_code:"resolve_failed",details:{changedFiles:[]}}}}let d=!!e.includeStrings,p=!!e.includeComments,f=await as(c,l,{includeDeclaration:!0,includeStrings:d,includeComments:p,forceLsp:!1},t,i);if(!f.success)return{fallbackToLsp:!0,result:this.buildSoftFailResult(e,`${o} DB reference lookup failed; no rename applied. ${f.error?`Reason: ${f.error}`:""}`.trim())};let m=Fs(f.locations,t.projectRoot),h=o==="csharp"?Sn(t.projectRoot,u.fileAbs,u.start,u.end):null;if(o==="csharp"&&h&&this.shouldUseCsharpIdentifierFallback(h)&&m.every(k=>k.isDefinition)){let k=this.collectCsharpIdentifierFallbackLocations(t,c,h,m);k.length&&(m.push(...k),m.sort(($,L)=>$.file===L.file?$.start-L.start:$.file.localeCompare(L.file)))}if(o==="csharp"&&h&&this.shouldRenameCsharpConstructors(h)){let k=this.collectCsharpConstructorDeclarationLocations(h,m,t.projectRoot);k.length&&(m.push(...k),m.sort(($,L)=>$.file===L.file?$.start-L.start:$.file.localeCompare(L.file)))}if(!m.length)return{fallbackToLsp:!0,result:this.buildSoftFailResult(e,`${o} DB reference lookup returned 0 matches; no rename applied.`)};let g=new Map;for(let k of m){let $=g.get(k.file)||[];$.push({start:k.start,length:k.length,prefixText:k.prefixText,suffixText:k.suffixText}),g.set(k.file,$)}let y=new Set,b=`${c}@${l}`,S,_;for(let[k,$]of g){if(!Na.default.existsSync(k))continue;let L=o==="csharp"?Pe(k):Na.default.readFileSync(k,"utf8");$.sort((j,z)=>z.start-j.start);for(let j of $){let{start:z,end:U}=qc(L,{start:j.start,end:j.start+j.length},o);if(z<0||U>L.length||U<z)return{fallbackToLsp:!1,result:{success:!1,error:`Invalid reference span while renaming ${ni.default.relative(t.projectRoot,k)} (${z}-${U}).`,details:{changedFiles:Array.from(y)}}};let K=`${j.prefixText||""}${e.newName}${j.suffixText||""}`;L=L.slice(0,z)+K+L.slice(U)}o==="csharp"?un(k,L):Na.default.writeFileSync(k,L,"utf8"),y.add(ni.default.relative(t.projectRoot,k).replace(/\\/g,"/"))}if(y.size===0)return{fallbackToLsp:!1,result:{success:!1,error:"Rename produced no edits. Ensure the target is valid and the newName differs from the current identifier.",details:{changedFiles:[]}}};let R=String(c.split("#")[0]||""),E=String(c.split("#")[1]||"");if(E&&u.lang)try{if(o==="clojure")_=void 0,S=void 0;else{let k=Jz(E,u.fileAbs,u.start,u.end,m,e.newName,u.lang),$=await os(t.projectRoot,u.fileAbs,k,u.lang);if($){let L=Pe(u.fileAbs),j=$.text??Nt(L,{start:$.start,end:$.end},u.lang),z=`${R}#${k}`,U=et(z,j);_=U;let K=U.startsWith("@")?U:`@${U}`;S=`${z}${K}`}}}catch{}let T=Array.from(y),x=Number(e.page?.limit??5),w=Number(e.page?.offset??0),D=Math.max(0,w),F=Math.max(1,Math.min(100,x)),N=T.length,C=T.slice(D,D+F),O=D+C.length<N,M={op:"rename",path:e.path,newName:e.newName,changedFileCount:T.length},P=[];x!==F&&P.push("page.limit capped to 100"),w!==D&&P.push("page.offset adjusted to be >= 0"),o==="clojure"&&P.push("Re-run find-nodes after Clojure rename to refresh the target path and hash."),P.push(`${o} rename executed via DB/span pipeline (no LSP required).`);let A=m.reduce((k,$)=>k+($.isDefinition?0:1),0),v=m.length,I=S&&_?[{oldRef:b,newRef:S,newHash:_}]:void 0;return{fallbackToLsp:!1,result:{success:!0,changes:{summary:`DB/span rename applied. Files: ${y.size}. Edits: ${v}`,count:v},details:{changedFiles:C,allChangedFiles:T,changedFileCount:N,changedFilesPage:{totalCount:N,limit:F,offset:D,hasMore:O},receipt:M,updatedTargets:I,referencesRenamed:A},warnings:P}}}static async executeViaLsp(e,t,r,s,i){if(!r)return{success:!1,error:"Unable to parse node path for LSP rename.",error_code:"resolve_failed"};let o=t.lsp;if(!o)return{success:!1,error:"rename requires an active LSP host for this language."};let a=Pe(r.fileAbs),l=(await Br(t.projectRoot,e.path))?.text??Nt(a,{start:r.start,end:r.end},r.lang),u=s.startsWith("@")?s:`@${s}`,d=et(e.path,l),p=on(u,d);if(p.type!=="MATCH")return{success:!1,error:`Hash mismatch (${p.type}). Re-run find-nodes to refresh the target.`};let f=Gz(a,Sn(t.projectRoot,r.fileAbs,r.start,r.end),r.lang)??{start:r.start,end:r.end},m=ba(a,rs(a,f.start,r.lang)),h=await o.rename(r.fileAbs,m,e.newName);if(!h||!h.changes||Object.keys(h.changes).length===0)return{success:!1,error:"LSP rename returned no edits.",details:{changedFiles:[]}};let g=new Set,y=0,b=new Map(Object.entries(h.changes).map(([P,A])=>{let v=P.startsWith("file:")?(0,KP.fileURLToPath)(P):P,I=Pe(v);return[v,A.map(k=>({start:Ys(I,k.range).start,end:Ys(I,k.range).end,newText:k.newText,isDefinition:v===r.fileAbs&&Ys(I,k.range).start===f.start&&Ys(I,k.range).end===f.end}))]}));for(let[P,A]of b){if(!Na.default.existsSync(P))continue;let v=Pe(P),I=A.sort((k,$)=>$.start-k.start);for(let k of I)k.isDefinition||P===r.fileAbs&&k.start===f.start&&k.end===f.end||(y+=1),v=v.slice(0,k.start)+k.newText+v.slice(k.end);un(P,v),g.add(ni.default.relative(t.projectRoot,P).replace(/\\/g,"/"))}if(g.size===0)return{success:!1,error:"Rename produced no edits. Ensure the target is valid and the newName differs from the current identifier.",details:{changedFiles:[]}};let S=Array.from(g),_=Number(e.page?.limit??5),R=Number(e.page?.offset??0),E=Math.max(0,R),T=Math.max(1,Math.min(100,_)),x=S.length,w=S.slice(E,E+T),D=E+w.length<x,F={op:"rename",path:e.path,newName:e.newName,changedFileCount:S.length},N=[];_!==T&&N.push("page.limit capped to 100"),R!==E&&N.push("page.offset adjusted to be >= 0");let C,O=`${e.path}@${s}`,M=String(e.path.split("#")[1]||"");if(M&&r?.lang)try{let P=await os(t.projectRoot,r.fileAbs,M,r.lang);if(P){let A=Pe(r.fileAbs),v=P.text??Nt(A,{start:P.start,end:P.end},r.lang),k=`${e.path.split("#")[0]||r.fileRel}#${P.start}-${P.end}`,$=et(k,v),L=$.startsWith("@")?$:`@${$}`,j=`${k}${L}`;C=[{oldRef:O,newRef:j,newHash:$}]}}catch{}return{success:!0,changes:{summary:`LSP rename applied. Files: ${g.size}. Edits: ${y+1}`,count:y+1},details:{changedFiles:w,allChangedFiles:S,changedFileCount:x,changedFilesPage:{totalCount:x,limit:T,offset:E,hasMore:D},receipt:F,updatedTargets:C,referencesRenamed:y},warnings:N.length?N:void 0}}static describeNonRenameable(e){switch(e.getKind()){case ko.SyntaxKind.ArrowFunction:return"Arrow functions don't have names. Use 'rename' on the variable they're assigned to instead.";case ko.SyntaxKind.FunctionExpression:return"Anonymous functions don't have names. Use 'rename' on the variable they're assigned to instead.";case ko.SyntaxKind.StringLiteral:case ko.SyntaxKind.NoSubstitutionTemplateLiteral:return"String literals are values, not identifiers. Use 'delete' followed by appropriate 'add-*' operations to change string content.";case ko.SyntaxKind.NumericLiteral:return"Number literals are values, not identifiers. Use 'delete' followed by appropriate 'add-*' operations to change numeric values.";case ko.SyntaxKind.TrueKeyword:case ko.SyntaxKind.FalseKeyword:return"Boolean literals are values, not identifiers. Use 'delete' followed by appropriate 'add-*' operations to change boolean values.";default:return}}}});function Xz(n){if(!n)return null;let e=n.lastIndexOf("/");return e>=0?n.slice(e+1):n}function Qz(n){if(n.type!=="vector")return 0;let e=0;for(let t of n.items)t.type==="symbol"&&t.value==="&"||(e+=1);return e}function Yz(n){if(!n||typeof n!="string")return null;let e=n.lastIndexOf("@"),t=e>=0?n.slice(0,e):n,r=t.lastIndexOf("#");if(r<0)return null;let s=t.slice(r+1),i=s.lastIndexOf(":");if(i<0)return null;let o=s.slice(0,i),a=o.indexOf("-");if(a<0)return null;let c=Number(o.slice(0,a)),l=Number(o.slice(a+1));return!Number.isFinite(c)||!Number.isFinite(l)||l<c?null:{start:c,end:l}}function ZP(n,e,t){let r=Buffer.from(n,"utf8"),s=Math.max(0,Math.min(e,r.length)),i=Math.max(s,Math.min(t,r.length));return r.slice(s,i).toString("utf8")}function GP(n,e){let t=Yz(e);if(!t)return[];let r=ZP(n,t.start,t.end);if(!r.trim())return[];try{let i=new mS(r).readAll();if(i.length!==1||i[0].type!=="list")return[];let o=i[0];if(o.items.length<2||o.items[0].type!=="symbol")return[];let a=Xz(o.items[0].value)??o.items[0].value;if(!Vz.has(a))return[];let c=[];for(let l=2;l<o.items.length;l+=1){let u=o.items[l];if(u.type==="string"||u.type==="map")continue;if(u.type!=="list"||u.items.length===0||u.items[0].type!=="vector"){if(c.length===0)return[];break}let d=u.items[0],p=ZP(r,d.start,d.end);c.push({arityIndex:c.length,start:t.start+u.start,end:t.start+u.end,paramCount:Qz(d),argVector:p,variadic:p.includes("&")})}return c.length>1?c:[]}catch{return[]}}var Vz,mS,JP=ne(()=>{"use strict";Vz=new Set(["defn","defn-","defmacro","defenterprise","defendpoint"]),mS=class{constructor(e){this.pos=0;this.lastBytePos=0;this.lastByteOffsetValue=0;this.src=e}byteOffset(){return this.pos===this.lastBytePos?this.lastByteOffsetValue:this.pos<this.lastBytePos?Buffer.byteLength(this.src.slice(0,this.pos),"utf8"):(this.lastByteOffsetValue+=Buffer.byteLength(this.src.slice(this.lastBytePos,this.pos),"utf8"),this.lastBytePos=this.pos,this.lastByteOffsetValue)}readAll(){let e=[];for(;this.pos<this.src.length&&(this.skipWhitespaceAndComments(),!(this.pos>=this.src.length));){let t=this.pos,r=this.readForm();r&&e.push(r),this.pos===t&&(this.pos+=1)}return e}peek(){return this.src[this.pos]??""}advance(){return this.src[this.pos++]??""}skipWhitespaceAndComments(){for(;this.pos<this.src.length;){let e=this.peek();if(e===" "||e===" "||e===`
|
|
814
814
|
`||e==="\r"||e===",")this.pos+=1;else if(e===";")for(;this.pos<this.src.length&&this.src[this.pos]!==`
|
|
815
815
|
`;)this.pos+=1;else if(e==="#"&&this.src[this.pos+1]==="!")for(;this.pos<this.src.length&&this.src[this.pos]!==`
|
|
816
816
|
`;)this.pos+=1;else break}}readForm(){if(this.skipWhitespaceAndComments(),this.pos>=this.src.length)return null;let e=this.peek();return e==="#"?this.readDispatch():e==="^"?this.readMeta():e==="'"||e==="`"?this.readQuoted():e==="~"?this.readUnquote():e==="@"?this.readDeref():e==="("?this.readList():e==="["?this.readVector():e==="{"?this.readMap():e==='"'?this.readString():e===":"?this.readKeyword():this.isDigitStart(e)?this.readNumber():this.readSymbol()}readList(){let e=this.byteOffset();this.advance();let t=this.readForms(")");return this.advance(),{type:"list",items:t,start:e,end:this.byteOffset()}}readVector(){let e=this.byteOffset();this.advance();let t=this.readForms("]");return this.advance(),{type:"vector",items:t,start:e,end:this.byteOffset()}}readMap(){let e=this.byteOffset();this.advance();let t=this.readForms("}");return this.advance(),{type:"map",items:t,start:e,end:this.byteOffset()}}readForms(e){let t=[];for(;this.skipWhitespaceAndComments(),!(this.pos>=this.src.length||this.peek()===e);){let r=this.pos,s=this.readForm();s&&t.push(s),this.pos===r&&(this.pos+=1)}return t}readString(){let e=this.byteOffset();this.advance();let t="";for(;this.pos<this.src.length;){let r=this.advance();if(r==="\\")t+=r+this.advance();else{if(r==='"')break;t+=r}}return{type:"string",value:t,start:e,end:this.byteOffset()}}readKeyword(){let e=this.byteOffset();this.advance(),this.peek()===":"&&this.advance();let t="";for(;this.pos<this.src.length&&this.isSymbolChar(this.peek());)t+=this.advance();return{type:"keyword",value:t,start:e,end:this.byteOffset()}}readSymbol(){let e=this.byteOffset(),t="";for(;this.pos<this.src.length&&this.isSymbolChar(this.peek());)t+=this.advance();return t?{type:"symbol",value:t,start:e,end:this.byteOffset()}:null}readNumber(){let e=this.byteOffset(),t="";for((this.peek()==="-"||this.peek()==="+")&&(t+=this.advance());this.pos<this.src.length;){let r=this.peek();if(this.isDigitOrNumPart(r))t+=this.advance();else break}if(this.peek()==="/"&&this.pos+1<this.src.length)for(t+=this.advance();this.pos<this.src.length&&this.isDigitOrNumPart(this.peek());)t+=this.advance();return{type:"number",value:parseFloat(t)||0,start:e,end:this.byteOffset()}}readMeta(){let e=this.byteOffset();this.advance();let t=this.readForm(),r=this.readForm();return{type:"meta",meta:t,target:r,start:e,end:this.byteOffset()}}readQuoted(){let e=this.byteOffset();return this.advance(),{type:"quoted",inner:this.readForm(),start:e,end:this.byteOffset()}}readUnquote(){let e=this.byteOffset();return this.advance(),this.peek()==="@"&&this.advance(),{type:"quoted",inner:this.readForm(),start:e,end:this.byteOffset()}}readDeref(){let e=this.byteOffset();return this.advance(),{type:"deref",inner:this.readForm(),start:e,end:this.byteOffset()}}readDispatch(){let e=this.byteOffset();this.advance();let t=this.peek();if(t==="{"){this.advance();let s=this.readForms("}");return this.advance(),{type:"set",items:s,start:e,end:this.byteOffset()}}if(t==='"'){this.advance();let s="";for(;this.pos<this.src.length;){let i=this.advance();if(i==="\\")s+=i+this.advance();else{if(i==='"')break;s+=i}}return{type:"regex",pattern:s,start:e,end:this.byteOffset()}}if(t==="("){let s=this.readList();return{type:"list",items:s.items,start:e,end:s.end}}if(t==="'")return this.advance(),{type:"var-quote",inner:this.readForm(),start:e,end:this.byteOffset()};if(t==="_")return this.advance(),this.readForm(),null;if(t==="?")return this.advance(),this.peek()==="@"&&this.advance(),{type:"reader-macro",tag:"?",inner:this.readForm(),start:e,end:this.byteOffset()};let r="";for(;this.pos<this.src.length&&this.isSymbolChar(this.peek());)r+=this.advance();if(r){this.skipWhitespaceAndComments();let s=this.readForm();return{type:"tagged-literal",tag:r,inner:s,start:e,end:this.byteOffset()}}return null}isSymbolChar(e){return e?!/[\s()\[\]{}"`,;@^~\\]/.test(e):!1}isDigitStart(e){if(e>="0"&&e<="9")return!0;if((e==="-"||e==="+")&&this.pos+1<this.src.length){let t=this.src[this.pos+1];return t>="0"&&t<="9"}return!1}isDigitOrNumPart(e){return/[0-9a-fA-FxXrRnNmM._eE+\-]/.test(e)}}});function eB(n,e,t){let r=Buffer.from(n,"utf8"),s=Math.max(0,Math.min(e,r.length)),i=Math.max(s,Math.min(t,r.length));return r.slice(s,i).toString("utf8")}function To(n,e,t){let r=pd.default.isAbsolute(e)?pd.default.resolve(e):pd.default.resolve(n,e);if(!hS.default.existsSync(r))return[];let s=pd.default.relative(n,r).replace(/\\/g,"/"),i=hS.default.readFileSync(r,"utf8");return GP(i,t).map(o=>{let a=`${s}#${o.start}-${o.end}:FunctionArity`,c=eB(i,o.start,o.end),l=et(a,c);return{path:a,hash:l,ref:fr(a,l),arityIndex:o.arityIndex,paramCount:o.paramCount,argVector:o.argVector,variadic:o.variadic}})}var hS,pd,Mm=ne(()=>{"use strict";hS=q(require("fs")),pd=q(require("path"));JP();Xn()});function VP(){return["find-nodes usage:","- Required: op='find-nodes'","- Required request shape: { op, scope, datalog }","- Optional top-level fields: lang, snapshot, prefilter, include, page","- Pagination is cursor-only: page = { limit, cursor }"," \u2022 default limit is 5 when omitted"," \u2022 max limit is 20 per page","- Scope must be exactly one of:"," \u2022 { workspace: true }"," \u2022 { dir: 'src' }"," \u2022 { files: ['src/a.ts', 'src/b.cs'] }"," \u2022 { node: { path: 'src/app.ts#10-40:FunctionDeclaration', expectedHash: 'p123:c456' } }","- Datalog must include query, bindings, and result.nodeVar","- Optional prefilter: { fts: 'register*' }"," \u2022 narrows candidate files before per-file Datalog execution","","include object (optional):","- include: { self?: true, body?: true, parents?: true, arities?: true, maxChars?: number, topN?: number }"," \u2022 self: include node's span and content with hash"," \u2022 body: include full body content when applicable"," \u2022 parents: include parent chain summary"," \u2022 arities: include explicit Clojure arity targets when applicable"," \u2022 topN: apply includes to first N results on the page (default 3, max 5)"," \u2022 maxChars: cap content length per included block (e.g., 4000)","","Notes:","- find-nodes is Datalog-only. Legacy fields such as type, name, q, qMode, scopeNode, limit, offset, cursor, and sort are rejected.","- Results are ordered by file path ascending, then node path ascending.","- Datalog executes lazily per file and stops as soon as the requested page is full.","- Candidate files come from the index first, then exact AST facts are materialized per candidate file as needed.","- Unnamed AST nodes are valid targets. For an if/return/call/etc., find a stable enclosing node, then search inside it with scope.node and predicates such as :node/kind, :node/text, :node/parent, :node/role, or :node/index-in-parent.","","Example:",`{
|
|
@@ -826,14 +826,14 @@ Path: ${c}`)}Xe.debug("[resolvePathRef] Hash OK")}return u}static getNodePath(e,
|
|
|
826
826
|
include: { self: true },
|
|
827
827
|
page: { limit: 5, cursor: null }
|
|
828
828
|
}`].join(`
|
|
829
|
-
`)}var XP=ne(()=>{"use strict"});function rB(n){if(!tB)return()=>{};let e=n||"FindNodes",t=process.hrtime.bigint(),r=t;return(s,i)=>{let o=process.hrtime.bigint(),a=Number(o-t)/1e6,c=Number(o-r)/1e6;r=o;let l={stage:s,sinceStartMs:a,sinceLastMs:c,...i||{}};try{console.log(`[${e}][PROFILE]`,JSON.stringify(l))}catch{console.log(`[${e}][PROFILE]`,l)}}}function sB(n,e,t){let r=n.getSourceFile(t);if(r){try{r.refreshFromFileSystemSync()}catch{}return r}let s=Ma.default.isAbsolute(t)?t:Ma.default.join(e,t);if(Jc.default.existsSync(s)){r=n.addSourceFileAtPath(s);try{r.refreshFromFileSystemSync()}catch{}}return r}function iB(n,e){let t=new Map,r=new Map;return{resolve(s,i){if(typeof s!="string"||!s.includes("#"))return null;let[o,a]=s.split("#");if(!o||!a)return null;let c=a.split("@")[0],l=typeof i?.symbol_key=="string"&&i.symbol_key.trim().length>0?i.symbol_key.trim():"",u=`${o}#${c}::${l}`;if(r.has(u))return r.get(u)||null;let d=Ma.default.isAbsolute(o)?o:Ma.default.join(e,o),p=Bt(d);if(p&&p!=="ts"&&p!=="js"){try{let b=an(s,e);if(b&&Jc.default.existsSync(b.fileAbs)){let S=Pe(b.fileAbs),_=Nt(S,{start:b.start,end:b.end},p);try{let F=bS(p)?.resolveSpanSync?.(e,b.fileAbs,`${o}#${c}`);F&&typeof F.text=="string"&&F.text.length>0&&(_=F.text)}catch{}let R=c.lastIndexOf(":"),E=R>=0?c.slice(R+1):"Unknown",T=Pt.getKindFromAbbrev(E,p)||E,w={node:{getText:()=>_,getStart:()=>b.start,getEnd:()=>b.end,getKindName:()=>T,getName:()=>typeof i?.name=="string"?i.name:void 0,getSourceFile:()=>({getFilePath:()=>b.fileAbs}),__pandoHashIdentity:p==="clojure"&&l?l:void 0,getPandoHashIdentity:()=>p==="clojure"&&l?l:void 0,getParent:()=>{},getBody:()=>{},isSynthetic:!0},filePart:o,nodePartRaw:a,cleanNodePart:c};return r.set(u,w),w}}catch{}return r.set(u,null),null}let m=t.get(o);if(m||(m=sB(n,e,o),m&&t.set(o,m)),!m)return r.set(u,null),null;let h=Pn(c,m);if(!h)try{m.refreshFromFileSystemSync()}catch{}let g=h||Pn(c,m);if(!g)return r.set(u,null),null;let y={node:g,filePart:o,nodePartRaw:a,cleanNodePart:c};return r.set(u,y),y}}}function yS(n,e){if(!n)return e;if(!e)return n;let t={...e,...n};return!t?.code&&e?.code&&(t.code=e.code),!t?.type&&e?.type&&(t.type=e.type),!t?.name&&e?.name&&(t.name=e.name),t}async function YP(n,e,t){if(!n||typeof n.path!="string"||!n.path.includes("#")||!t||t==="ts"||t==="js")return null;let{path:r}=zr(n.path),s=await qr(e,r);if(!s)return null;let{text:i}=s,o=typeof n.hash=="string"&&n.hash.trim().length>0?n.hash.startsWith("@")?n.hash:`@${n.hash}`:et(r,i),a=fr(r,o),c=yS(n.self,{type:typeof n.type=="string"?n.type:void 0,name:typeof n.name=="string"?n.name:void 0,code:Bc(i)});return{...n,path:r,hash:o,ref:a,self:c}}function oB(n,e,t){if(!n||typeof n.path!="string"||!n.path.includes("#")||t!=="ts"&&t!=="js")return null;let{path:r}=zr(n.path),[s,i]=r.split("#");if(!s||!i)return null;let o=Ma.default.isAbsolute(s)?s:Ma.default.join(e,s);if(!Jc.default.existsSync(o))return null;let a;try{a=Jc.default.readFileSync(o,"utf8")}catch{return null}let c=aB(a,i,n);if(typeof c!="string")return null;let l=typeof n.hash=="string"&&n.hash.trim().length>0?n.hash.startsWith("@")?n.hash:`@${n.hash}`:et(r,c),u=fr(r,l),d=yS(n.self,{type:typeof n.type=="string"?n.type:void 0,name:typeof n.name=="string"?n.name:void 0,code:Bc(c)});return{...n,path:u,hash:l,ref:u,self:d}}function aB(n,e,t){let r=Number.isFinite(Number(t?.start_pos))?Number(t.start_pos):null,s=Number.isFinite(Number(t?.end_pos))?Number(t.end_pos):null;if(r!=null&&s!=null&&r>=0&&s>=r)return n.slice(r,s);let i=String(e).match(/^(?:SyntaxError:|CompileError:)?(\d+)-(\d+):/);if(!i)return null;let o=Number(i[1]),a=Number(i[2]);return!Number.isFinite(o)||!Number.isFinite(a)||o<0||a<o?null:n.slice(o,a)}async function cB(n){let e=an(n.scopeNode,n.projectRoot);if(!e||!Jc.default.existsSync(e.fileAbs))return!1;let t=bS(n.lang),r=null;try{r=(await qr(n.projectRoot,n.scopeNode))?.text??null}catch{r=null}if(r==null){let o=Pe(e.fileAbs);r=Nt(o,{start:e.start,end:e.end},n.lang)}let s=et(n.scopeNode,r),i=n.expectedHash.startsWith("@")?n.expectedHash:`@${n.expectedHash}`;return s===i}function bS(n){if(!n)return null;try{return Gs(n)}catch{return null}}function lB(n){let e=new Set(["op","lang","snapshot","scope","datalog","prefilter","include","page"]);return Object.keys(n).some(t=>!e.has(t))}function uB(n){if(n==null)return{ok:!0};if(!ri(n))return{ok:!1,error:"find-nodes prefilter must be an object."};let e=Object.keys(n);for(let r of e)if(r!=="fts")return{ok:!1,error:`find-nodes prefilter does not support '${r}'. Use only prefilter.fts.`};let t=n.fts;return t==null?{ok:!0}:typeof t!="string"||t.trim().length===0?{ok:!1,error:"find-nodes prefilter.fts must be a non-empty string."}:{ok:!0,prefilter:{fts:t.trim()}}}function dB(n){if(n==null)return{ok:!0,limit:QP,cursor:null};if(!ri(n))return{ok:!1,error:"find-nodes page must be an object containing limit and optional cursor."};let e=Object.keys(n);for(let o of e)if(o!=="limit"&&o!=="cursor")return{ok:!1,error:`find-nodes page does not support '${o}'. Use only page.limit and page.cursor.`};let t=n.limit,r=t==null?QP:gB(t);if(!Number.isFinite(r))return{ok:!1,error:"find-nodes page.limit must be a positive integer."};let s=Math.max(1,Math.min(nB,Math.trunc(Number(r)))),i=n.cursor;return i==null||typeof i=="string"?{ok:!0,limit:s,cursor:typeof i=="string"&&i.length>0?i:null}:{ok:!1,error:"find-nodes page.cursor must be a string or null."}}async function pB(n){let e=n.scope;if(!ri(e))return{ok:!1,error:"find-nodes scope must be an object."};if(["workspace","dir","files","node"].filter(r=>e[r]!=null).length!==1)return{ok:!1,error:"find-nodes scope must specify exactly one of workspace, dir, files, or node."};if(e.workspace===!0)return{ok:!0,scopeSelector:""};if(typeof e.dir=="string"){let r=gS(e.dir);return r?{ok:!0,scopeSelector:r.endsWith("/")?r:`${r}/`}:{ok:!1,error:"find-nodes scope.dir must be a non-empty workspace-relative directory."}}if(Array.isArray(e.files)){let r=e.files.map(i=>gS(i)).filter(i=>!!i);if(r.length===0)return{ok:!1,error:"find-nodes scope.files must contain at least one workspace-relative file path."};let s=Array.from(new Set(r)).sort();return{ok:!0,scopeSelector:s[0],candidateFiles:s}}if(ri(e.node)){let r=typeof e.node.path=="string"?gS(e.node.path):"",s=typeof e.node.expectedHash=="string"?e.node.expectedHash.trim():"";if(!r||!r.includes("#"))return{ok:!1,error:"find-nodes scope.node.path must be a node path like file#start-end:Kind."};if(!s)return{ok:!1,error:"find-nodes scope.node.expectedHash is required."};if(s.includes("@"))return{ok:!1,error:"find-nodes scope.node.expectedHash must omit the '@' prefix."};let i=r.split("#")[0],o=Bt(i)??null;try{if(o&&o!=="ts"&&o!=="js"&&o!=="python"){if(!await cB({projectRoot:n.projectRoot,scopeNode:r,expectedHash:s,lang:o}))return{ok:!1,error:"find-nodes scope.node hash verification failed. Refresh the scope node and retry."}}else if(!es(fr(r,s),n.project,n.projectRoot))return{ok:!1,error:"find-nodes scope.node hash verification failed. Refresh the scope node and retry."}}catch(a){return{ok:!1,error:`find-nodes scope.node verification failed: ${a?.message||String(a)}`}}return{ok:!0,scopeSelector:r,candidateFiles:[i]}}return{ok:!1,error:"find-nodes scope is invalid."}}function fB(n,e,t){let s=(Array.isArray(n.lang)?n.lang:typeof n.lang=="string"?[n.lang]:[]).map(a=>eC(String(a||"").trim())).filter(Boolean);if(s.length>0)return Array.from(new Set(s)).sort();let i=[];for(let a of t||[])i.push(a);e&&i.push(e.split("#")[0]);let o=i.map(a=>Bt(String(a))).map(a=>a&&eC(a)).filter(a=>typeof a=="string"&&a.length>0);return Array.from(new Set(o)).sort()}function eC(n){let e=String(n||"").trim().toLowerCase();return e==="tsx"||e==="mts"||e==="cts"?"ts":e==="jsx"||e==="mjs"||e==="cjs"?"js":e}function mB(n,e,t){if(!n||typeof n!="object")return n;let r=typeof n.path=="string"?zr(n.path).path:"",s=typeof n.file_path=="string"?n.file_path:r.includes("#")?r.split("#")[0]:void 0,i=s?Bt(s)??void 0:void 0,o=typeof n.hash=="string"&&n.hash.trim().length>0?n.hash.startsWith("@")?n.hash:`@${n.hash}`:void 0,a=r&&o?fr(r,o):typeof n.ref=="string"?n.ref:void 0,c=hB(n.columns,e,t);return{...n,...r?{path:r}:{},...o?{hash:o}:{},...a?{ref:a}:{},...s?{file:s}:{},...typeof n.type=="string"?{kind:n.type}:{},...i?{lang:i}:{},...typeof n.start=="number"||typeof n.end=="number"?{span:{...typeof n.start=="number"?{start:n.start}:{},...typeof n.end=="number"?{end:n.end}:{}}}:{},...c?{columns:c}:{}}}function hB(n,e,t){if(!ri(n))return;let r={};for(let[s,i]of Object.entries(n)){if(ri(i)&&typeof i.path=="string"&&i.path.includes("#")){let o=zr(i.path).path,a=t.resolve(o);if(a){let c=ns(a.node,e);r[s]={path:c.path,hash:c.hash,ref:c.ref}}else r[s]={path:o};continue}r[s]=i}return Object.keys(r).length>0?r:void 0}function gS(n){if(typeof n!="string")return"";let e=n.trim().replace(/\\/g,"/");return e?e.replace(/^\.\/+/,""):""}function ri(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function gB(n){if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"){let e=n.trim();if(!e)return;let t=Number(e);if(Number.isFinite(t))return t}}var Ma,Jc,tB,QP,nB,Da,SS=ne(()=>{"use strict";Xn();ts();Hi();vs();Mm();Ma=q(require("path")),Jc=q(require("fs"));Bn();gt();XP();kr();Zc();tB=process.env.AST_FIND_NODES_PROFILING==="1",QP=5,nB=20;Da=class{static async execute(e,t,r){let s=rB("FindNodes");e={...e||{}},s("start",{scope:ri(e?.scope)?Object.keys(e.scope):typeof e?.scope,page:ri(e?.page)?Object.keys(e.page):typeof e?.page,snapshot:e?.snapshot,lang:Array.isArray(e?.lang)?e.lang:typeof e?.lang=="string"?[e.lang]:void 0,include:e?.include?Object.keys(e.include):void 0});try{let i=Ht();if(i)try{let v={scope:e?.scope,page:e?.page,snapshot:e?.snapshot,lang:e?.lang,hasDatalog:!!e?.datalog};console.log("[FindNodes][DEBUG] incoming",JSON.stringify(v)),console.log("[FindNodes][DEBUG] projectRoot",t.projectRoot)}catch(v){console.log("[FindNodes][DEBUG] failed to print preview",String(v?.message||v))}if(lB(e))return{success:!1,error:"find-nodes now accepts only { op, lang?, snapshot?, scope, datalog, prefilter?, include?, page }. Remove legacy fields such as type/name/q/qMode/scopeNode/limit/offset/cursor/sort/asOf.",help:VP()};if(!ri(e?.scope))return{success:!1,error:"find-nodes requires a structured scope object."};if(!ri(e?.datalog)||typeof e?.datalog?.query!="string")return{success:!1,error:"find-nodes requires a datalog query."};if(!Array.isArray(e?.datalog?.bindings)||e.datalog.bindings.length===0)return{success:!1,error:"find-nodes datalog queries must provide bindings matching the :find clause."};if(!ri(e?.datalog?.result)||typeof e.datalog.result.nodeVar!="string")return{success:!1,error:"find-nodes datalog.result.nodeVar is required."};let o=uB(e.prefilter);if(!o.ok)return{success:!1,error:o.error};let a=dB(e.page);if(!a.ok)return{success:!1,error:a.error};let c=typeof e?.snapshot=="string"&&e.snapshot.trim().length>0?String(e.snapshot).trim():void 0;if(c){let{ensureSnapshotExists:v}=(dS(),be(uS));try{v(t.projectRoot,c)}catch(I){return s("ensureSnapshotExists.error",{message:I?.message||String(I)}),{success:!1,error:I?.message||String(I)}}}let l=await pB({project:r,projectRoot:t.projectRoot,scope:e.scope});if(!l.ok)return{success:!1,error:l.error};let u=fB(e,l.scopeSelector,l.candidateFiles);for(let v of u)if(v!=="ts"&&v!=="js"&&v!=="python"){let I=bS(v);if(!(I?.indexingMode==="worker"||I?.indexingMode==="batch"))return{success:!1,error:`find-nodes does not support datalog execution for language '${v}'.`}}let d=a.limit,p=a.cursor;s("normalizePagination",{limit:d,cursorPresent:typeof p=="string"&&p.length>0});let f={scope:l.scopeSelector,candidateFiles:l.candidateFiles,limit:d,asOf:c,lang:u.length===0?void 0:u,datalog:e.datalog,prefilter:o.prefilter},m=t.queries;s("buildPayload",{hasQueries:!!m,limit:d,langs:u,candidateFiles:l.candidateFiles?.length,scope:l.scopeSelector});let h={scope:f.scope,candidateFiles:f.candidateFiles,limit:d,cursor:typeof p=="string"?p:void 0,lang:f.lang,asOf:c,datalog:f.datalog,prefilter:f.prefilter},g=typeof m.findNodesPagedAsync=="function"?await m.findNodesPagedAsync(h):m.findNodesPaged(h);if(s("queries.findNodesPaged.complete",{resultsCount:Array.isArray(g?.items)?g.items.length:void 0,hasMore:g?.hasMore}),typeof g?.error=="string"){let v={success:!1,error:String(g.error)};return typeof g?.error_code=="string"&&(v.error_code=String(g.error_code)),g?.details&&(v.details=g.details),g?.diag&&(v.diagnostics=g.diag),Array.isArray(g?.warnings)&&g.warnings.length>0&&(v.warnings=[...g.warnings]),v}if(i)try{let v=g?.diag||{};console.log("[FindNodes][DEBUG] page.diag",JSON.stringify(v)),console.log("[FindNodes][DEBUG] page.count",{items:g.items?.length,hasMore:g.hasMore})}catch(v){console.log("[FindNodes][DEBUG] failed to print page diagnostics",String(v?.message||v))}let y=Array.isArray(g.items)?g.items:[];s("page.items.received",{results:y.length});let b=iB(r,t.projectRoot),S=new Set,_=new Set,R=(await Promise.all(y.map(async(v,I)=>{if(!v||typeof v.path!="string"||!v.path.includes("#"))return[v];let{path:k}=zr(v.path),$=Bt(k.split("#")[0]||k);if($&&$!=="ts"&&$!=="js"){let j=await YP(v,t.projectRoot,$);if(j)return[j]}try{let j=b.resolve(v.path,v);if(j){let z=ns(j.node,t.projectRoot),U=fr(z.path,z.hash),K=yS(v.self,z.self);return v.path===U&&v.hash&&v.ref&&K?.code?K!==v.self?[{...v,self:K}]:[v]:[{...v,path:z.path,hash:v.hash||z.hash,ref:v.ref||U,self:K}]}}catch(j){s("results.hash.failed",{index:I,path:v.path,error:j?.message||String(j)})}let L=oB(v,t.projectRoot,$);return L?(_.add(k),[L]):$&&$!=="ts"&&$!=="js"?[{...v,path:k}]:(S.add(k),[])}))).flat(),E=!!g.hasMore,T={limit:d,hasMore:E,cursor:typeof g.cursor=="string"&&g.cursor.length>0?String(g.cursor):null},x=v=>v.map(({symbol_key:I,...k})=>k).map(I=>mB(I,t.projectRoot,b)),w={success:!0,items:R,page:T,consistency_token:g.consistency_token};if(g.plan&&typeof g.plan=="object"&&(w.plan=g.plan),g.diag&&(w.diagnostics=g.diag),g.warnings&&g.warnings.length)for(let v of g.warnings)(w.warnings||=[]).push(v);S.size>0&&(w.warnings||=[]).push(`Omitted ${S.size} unstable result${S.size===1?"":"s"} because find-nodes could not re-resolve a canonical live AST path. Refresh the in-memory project state and retry.`),_.size>0&&(w.warnings||=[]).push(`Returned ${_.size} indexed fallback result${_.size===1?"":"s"} because live AST canonicalization was unavailable.`);let D=e?.include||{},F=typeof D.topN=="number"?Number(D.topN):void 0,N=F!==void 0?Math.max(0,Math.min(F,5)):void 0,C=D.parents===!0,O=D.body===!0,M=D.arities===!0,P=D.self===!0;if(!!(D&&(P||C||O||M||N!==void 0))&&w&&w.success&&Array.isArray(w.items)){let v=w.items,I=[],k=N!==void 0?N:3,$=typeof D.maxChars=="number"&&D.maxChars>0?D.maxChars:void 0;for(let L=0;L<v.length;L++){let j=v[L],z=typeof j?.file=="string"?Bt(String(j.file)):typeof j?.file_path=="string"?Bt(String(j.file_path)):void 0,U=C&&L<k,K=O&&L<k,G=M&&L<k;if(!(P||U||K)){if(G&&typeof j?.path=="string"&&typeof j?.file_path=="string"&&z==="clojure"){I.push({...j,arities:To(t.projectRoot,String(j.file_path),String(j.path)).map(pe=>({path:pe.path,hash:pe.hash,ref:pe.ref,arityIndex:pe.arityIndex,paramCount:pe.paramCount,argVector:pe.argVector,variadic:pe.variadic}))});continue}I.push(j);continue}if(z&&z!=="ts"&&z!=="js"){let pe=await YP(j,t.projectRoot,z);if(pe){let ke={...j,...pe};P||delete ke.self,G&&z==="clojure"&&typeof j?.path=="string"&&typeof j?.file_path=="string"&&(ke.arities=To(t.projectRoot,String(j.file_path),String(j.path)).map(re=>({path:re.path,hash:re.hash,ref:re.ref,arityIndex:re.arityIndex,paramCount:re.paramCount,argVector:re.argVector,variadic:re.variadic}))),I.push(ke);continue}}try{s("enrich.node.start",{index:L,path:j?.path});let pe=b.resolve(String(j?.path||""),j);if(!pe){P&&(w.warnings||=[]).push(`include.self requested but node could not be resolved for ${String(j?.path||"")}`),I.push(j);continue}let{node:ke,filePart:re,nodePartRaw:W}=pe;s("enrich.node.resolved",{index:L,path:j.path});let me=ns(ke,t.projectRoot),_e=fr(me.path,me.hash),Se={...j,path:me.path,hash:me.hash,ref:_e};if(P&&(Se.self=me.self),U)try{let Q=[],B=ke.getParent?.();for(;B&&typeof B.getKindName=="function"&&typeof B.getSourceFile=="function"&&B.getKindName()!=="SourceFile";){let Z=B.getKindName(),se=typeof B.getName=="function"?B.getName():void 0,ae=typeof B.getStartLineNumber=="function"?B.getStartLineNumber():void 0;Q.push({kind:Z,name:se,line:ae}),B=B.getParent?.()}Se.parents=Q}catch(Q){try{(w.warnings||=[]).push(`include.parents failed for ${re}#${W}: ${Q?.message||String(Q)}`)}catch{}}if(K)try{let Q=ke.getBody?.();if(Q&&typeof Q.getText=="function"){let B=Q.getText(),Z=Bc(B);if(typeof $=="number"&&Z.contentLength>$){let se=B.slice(0,$-12)+`
|
|
829
|
+
`)}var XP=ne(()=>{"use strict"});function rB(n){if(!tB)return()=>{};let e=n||"FindNodes",t=process.hrtime.bigint(),r=t;return(s,i)=>{let o=process.hrtime.bigint(),a=Number(o-t)/1e6,c=Number(o-r)/1e6;r=o;let l={stage:s,sinceStartMs:a,sinceLastMs:c,...i||{}};try{console.log(`[${e}][PROFILE]`,JSON.stringify(l))}catch{console.log(`[${e}][PROFILE]`,l)}}}function sB(n,e,t){let r=n.getSourceFile(t);if(r){try{r.refreshFromFileSystemSync()}catch{}return r}let s=Ma.default.isAbsolute(t)?t:Ma.default.join(e,t);if(Jc.default.existsSync(s)){r=n.addSourceFileAtPath(s);try{r.refreshFromFileSystemSync()}catch{}}return r}function iB(n,e){let t=new Map,r=new Map;return{resolve(s,i){if(typeof s!="string"||!s.includes("#"))return null;let[o,a]=s.split("#");if(!o||!a)return null;let c=a.split("@")[0],l=typeof i?.symbol_key=="string"&&i.symbol_key.trim().length>0?i.symbol_key.trim():"",u=`${o}#${c}::${l}`;if(r.has(u))return r.get(u)||null;let d=Ma.default.isAbsolute(o)?o:Ma.default.join(e,o),p=Bt(d);if(p&&p!=="ts"&&p!=="js"){try{let b=an(s,e);if(b&&Jc.default.existsSync(b.fileAbs)){let S=Pe(b.fileAbs),_=Nt(S,{start:b.start,end:b.end},p);try{let F=bS(p)?.resolveSpanSync?.(e,b.fileAbs,`${o}#${c}`);F&&typeof F.text=="string"&&F.text.length>0&&(_=F.text)}catch{}let R=c.lastIndexOf(":"),E=R>=0?c.slice(R+1):"Unknown",T=Pt.getKindFromAbbrev(E,p)||E,w={node:{getText:()=>_,getStart:()=>b.start,getEnd:()=>b.end,getKindName:()=>T,getName:()=>typeof i?.name=="string"?i.name:void 0,getSourceFile:()=>({getFilePath:()=>b.fileAbs}),__pandoHashIdentity:p==="clojure"&&l?l:void 0,getPandoHashIdentity:()=>p==="clojure"&&l?l:void 0,getParent:()=>{},getBody:()=>{},isSynthetic:!0},filePart:o,nodePartRaw:a,cleanNodePart:c};return r.set(u,w),w}}catch{}return r.set(u,null),null}let m=t.get(o);if(m||(m=sB(n,e,o),m&&t.set(o,m)),!m)return r.set(u,null),null;let h=Pn(c,m);if(!h)try{m.refreshFromFileSystemSync()}catch{}let g=h||Pn(c,m);if(!g)return r.set(u,null),null;let y={node:g,filePart:o,nodePartRaw:a,cleanNodePart:c};return r.set(u,y),y}}}function yS(n,e){if(!n)return e;if(!e)return n;let t={...e,...n};return!t?.code&&e?.code&&(t.code=e.code),!t?.type&&e?.type&&(t.type=e.type),!t?.name&&e?.name&&(t.name=e.name),t}async function YP(n,e,t){if(!n||typeof n.path!="string"||!n.path.includes("#")||!t||t==="ts"||t==="js")return null;let{path:r}=Lr(n.path),s=await Br(e,r);if(!s)return null;let{text:i}=s,o=typeof n.hash=="string"&&n.hash.trim().length>0?n.hash.startsWith("@")?n.hash:`@${n.hash}`:et(r,i),a=fr(r,o),c=yS(n.self,{type:typeof n.type=="string"?n.type:void 0,name:typeof n.name=="string"?n.name:void 0,code:Bc(i)});return{...n,path:r,hash:o,ref:a,self:c}}function oB(n,e,t){if(!n||typeof n.path!="string"||!n.path.includes("#")||t!=="ts"&&t!=="js")return null;let{path:r}=Lr(n.path),[s,i]=r.split("#");if(!s||!i)return null;let o=Ma.default.isAbsolute(s)?s:Ma.default.join(e,s);if(!Jc.default.existsSync(o))return null;let a;try{a=Jc.default.readFileSync(o,"utf8")}catch{return null}let c=aB(a,i,n);if(typeof c!="string")return null;let l=typeof n.hash=="string"&&n.hash.trim().length>0?n.hash.startsWith("@")?n.hash:`@${n.hash}`:et(r,c),u=fr(r,l),d=yS(n.self,{type:typeof n.type=="string"?n.type:void 0,name:typeof n.name=="string"?n.name:void 0,code:Bc(c)});return{...n,path:u,hash:l,ref:u,self:d}}function aB(n,e,t){let r=Number.isFinite(Number(t?.start_pos))?Number(t.start_pos):null,s=Number.isFinite(Number(t?.end_pos))?Number(t.end_pos):null;if(r!=null&&s!=null&&r>=0&&s>=r)return n.slice(r,s);let i=String(e).match(/^(?:SyntaxError:|CompileError:)?(\d+)-(\d+):/);if(!i)return null;let o=Number(i[1]),a=Number(i[2]);return!Number.isFinite(o)||!Number.isFinite(a)||o<0||a<o?null:n.slice(o,a)}async function cB(n){let e=an(n.scopeNode,n.projectRoot);if(!e||!Jc.default.existsSync(e.fileAbs))return!1;let t=bS(n.lang),r=null;try{r=(await Br(n.projectRoot,n.scopeNode))?.text??null}catch{r=null}if(r==null){let o=Pe(e.fileAbs);r=Nt(o,{start:e.start,end:e.end},n.lang)}let s=et(n.scopeNode,r),i=n.expectedHash.startsWith("@")?n.expectedHash:`@${n.expectedHash}`;return s===i}function bS(n){if(!n)return null;try{return Gs(n)}catch{return null}}function lB(n){let e=new Set(["op","lang","snapshot","scope","datalog","prefilter","include","page"]);return Object.keys(n).some(t=>!e.has(t))}function uB(n){if(n==null)return{ok:!0};if(!ri(n))return{ok:!1,error:"find-nodes prefilter must be an object."};let e=Object.keys(n);for(let r of e)if(r!=="fts")return{ok:!1,error:`find-nodes prefilter does not support '${r}'. Use only prefilter.fts.`};let t=n.fts;return t==null?{ok:!0}:typeof t!="string"||t.trim().length===0?{ok:!1,error:"find-nodes prefilter.fts must be a non-empty string."}:{ok:!0,prefilter:{fts:t.trim()}}}function dB(n){if(n==null)return{ok:!0,limit:QP,cursor:null};if(!ri(n))return{ok:!1,error:"find-nodes page must be an object containing limit and optional cursor."};let e=Object.keys(n);for(let o of e)if(o!=="limit"&&o!=="cursor")return{ok:!1,error:`find-nodes page does not support '${o}'. Use only page.limit and page.cursor.`};let t=n.limit,r=t==null?QP:gB(t);if(!Number.isFinite(r))return{ok:!1,error:"find-nodes page.limit must be a positive integer."};let s=Math.max(1,Math.min(nB,Math.trunc(Number(r)))),i=n.cursor;return i==null||typeof i=="string"?{ok:!0,limit:s,cursor:typeof i=="string"&&i.length>0?i:null}:{ok:!1,error:"find-nodes page.cursor must be a string or null."}}async function pB(n){let e=n.scope;if(!ri(e))return{ok:!1,error:"find-nodes scope must be an object."};if(["workspace","dir","files","node"].filter(r=>e[r]!=null).length!==1)return{ok:!1,error:"find-nodes scope must specify exactly one of workspace, dir, files, or node."};if(e.workspace===!0)return{ok:!0,scopeSelector:""};if(typeof e.dir=="string"){let r=gS(e.dir);return r?{ok:!0,scopeSelector:r.endsWith("/")?r:`${r}/`}:{ok:!1,error:"find-nodes scope.dir must be a non-empty workspace-relative directory."}}if(Array.isArray(e.files)){let r=e.files.map(i=>gS(i)).filter(i=>!!i);if(r.length===0)return{ok:!1,error:"find-nodes scope.files must contain at least one workspace-relative file path."};let s=Array.from(new Set(r)).sort();return{ok:!0,scopeSelector:s[0],candidateFiles:s}}if(ri(e.node)){let r=typeof e.node.path=="string"?gS(e.node.path):"",s=typeof e.node.expectedHash=="string"?e.node.expectedHash.trim():"";if(!r||!r.includes("#"))return{ok:!1,error:"find-nodes scope.node.path must be a node path like file#start-end:Kind."};if(!s)return{ok:!1,error:"find-nodes scope.node.expectedHash is required."};if(s.includes("@"))return{ok:!1,error:"find-nodes scope.node.expectedHash must omit the '@' prefix."};let i=r.split("#")[0],o=Bt(i)??null;try{if(o&&o!=="ts"&&o!=="js"&&o!=="python"){if(!await cB({projectRoot:n.projectRoot,scopeNode:r,expectedHash:s,lang:o}))return{ok:!1,error:"find-nodes scope.node hash verification failed. Refresh the scope node and retry."}}else if(!es(fr(r,s),n.project,n.projectRoot))return{ok:!1,error:"find-nodes scope.node hash verification failed. Refresh the scope node and retry."}}catch(a){return{ok:!1,error:`find-nodes scope.node verification failed: ${a?.message||String(a)}`}}return{ok:!0,scopeSelector:r,candidateFiles:[i]}}return{ok:!1,error:"find-nodes scope is invalid."}}function fB(n,e,t){let s=(Array.isArray(n.lang)?n.lang:typeof n.lang=="string"?[n.lang]:[]).map(a=>eC(String(a||"").trim())).filter(Boolean);if(s.length>0)return Array.from(new Set(s)).sort();let i=[];for(let a of t||[])i.push(a);e&&i.push(e.split("#")[0]);let o=i.map(a=>Bt(String(a))).map(a=>a&&eC(a)).filter(a=>typeof a=="string"&&a.length>0);return Array.from(new Set(o)).sort()}function eC(n){let e=String(n||"").trim().toLowerCase();return e==="tsx"||e==="mts"||e==="cts"?"ts":e==="jsx"||e==="mjs"||e==="cjs"?"js":e}function mB(n,e,t){if(!n||typeof n!="object")return n;let r=typeof n.path=="string"?Lr(n.path).path:"",s=typeof n.file_path=="string"?n.file_path:r.includes("#")?r.split("#")[0]:void 0,i=s?Bt(s)??void 0:void 0,o=typeof n.hash=="string"&&n.hash.trim().length>0?n.hash.startsWith("@")?n.hash:`@${n.hash}`:void 0,a=r&&o?fr(r,o):typeof n.ref=="string"?n.ref:void 0,c=hB(n.columns,e,t);return{...n,...r?{path:r}:{},...o?{hash:o}:{},...a?{ref:a}:{},...s?{file:s}:{},...typeof n.type=="string"?{kind:n.type}:{},...i?{lang:i}:{},...typeof n.start=="number"||typeof n.end=="number"?{span:{...typeof n.start=="number"?{start:n.start}:{},...typeof n.end=="number"?{end:n.end}:{}}}:{},...c?{columns:c}:{}}}function hB(n,e,t){if(!ri(n))return;let r={};for(let[s,i]of Object.entries(n)){if(ri(i)&&typeof i.path=="string"&&i.path.includes("#")){let o=Lr(i.path).path,a=t.resolve(o);if(a){let c=ns(a.node,e);r[s]={path:c.path,hash:c.hash,ref:c.ref}}else r[s]={path:o};continue}r[s]=i}return Object.keys(r).length>0?r:void 0}function gS(n){if(typeof n!="string")return"";let e=n.trim().replace(/\\/g,"/");return e?e.replace(/^\.\/+/,""):""}function ri(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function gB(n){if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"){let e=n.trim();if(!e)return;let t=Number(e);if(Number.isFinite(t))return t}}var Ma,Jc,tB,QP,nB,Da,SS=ne(()=>{"use strict";Xn();ts();Hi();vs();Mm();Ma=q(require("path")),Jc=q(require("fs"));Bn();gt();XP();kr();Zc();tB=process.env.AST_FIND_NODES_PROFILING==="1",QP=5,nB=20;Da=class{static async execute(e,t,r){let s=rB("FindNodes");e={...e||{}},s("start",{scope:ri(e?.scope)?Object.keys(e.scope):typeof e?.scope,page:ri(e?.page)?Object.keys(e.page):typeof e?.page,snapshot:e?.snapshot,lang:Array.isArray(e?.lang)?e.lang:typeof e?.lang=="string"?[e.lang]:void 0,include:e?.include?Object.keys(e.include):void 0});try{let i=Ht();if(i)try{let v={scope:e?.scope,page:e?.page,snapshot:e?.snapshot,lang:e?.lang,hasDatalog:!!e?.datalog};console.log("[FindNodes][DEBUG] incoming",JSON.stringify(v)),console.log("[FindNodes][DEBUG] projectRoot",t.projectRoot)}catch(v){console.log("[FindNodes][DEBUG] failed to print preview",String(v?.message||v))}if(lB(e))return{success:!1,error:"find-nodes now accepts only { op, lang?, snapshot?, scope, datalog, prefilter?, include?, page }. Remove legacy fields such as type/name/q/qMode/scopeNode/limit/offset/cursor/sort/asOf.",help:VP()};if(!ri(e?.scope))return{success:!1,error:"find-nodes requires a structured scope object."};if(!ri(e?.datalog)||typeof e?.datalog?.query!="string")return{success:!1,error:"find-nodes requires a datalog query."};if(!Array.isArray(e?.datalog?.bindings)||e.datalog.bindings.length===0)return{success:!1,error:"find-nodes datalog queries must provide bindings matching the :find clause."};if(!ri(e?.datalog?.result)||typeof e.datalog.result.nodeVar!="string")return{success:!1,error:"find-nodes datalog.result.nodeVar is required."};let o=uB(e.prefilter);if(!o.ok)return{success:!1,error:o.error};let a=dB(e.page);if(!a.ok)return{success:!1,error:a.error};let c=typeof e?.snapshot=="string"&&e.snapshot.trim().length>0?String(e.snapshot).trim():void 0;if(c){let{ensureSnapshotExists:v}=(dS(),be(uS));try{v(t.projectRoot,c)}catch(I){return s("ensureSnapshotExists.error",{message:I?.message||String(I)}),{success:!1,error:I?.message||String(I)}}}let l=await pB({project:r,projectRoot:t.projectRoot,scope:e.scope});if(!l.ok)return{success:!1,error:l.error};let u=fB(e,l.scopeSelector,l.candidateFiles);for(let v of u)if(v!=="ts"&&v!=="js"&&v!=="python"){let I=bS(v);if(!(I?.indexingMode==="worker"||I?.indexingMode==="batch"))return{success:!1,error:`find-nodes does not support datalog execution for language '${v}'.`}}let d=a.limit,p=a.cursor;s("normalizePagination",{limit:d,cursorPresent:typeof p=="string"&&p.length>0});let f={scope:l.scopeSelector,candidateFiles:l.candidateFiles,limit:d,asOf:c,lang:u.length===0?void 0:u,datalog:e.datalog,prefilter:o.prefilter},m=t.queries;s("buildPayload",{hasQueries:!!m,limit:d,langs:u,candidateFiles:l.candidateFiles?.length,scope:l.scopeSelector});let h={scope:f.scope,candidateFiles:f.candidateFiles,limit:d,cursor:typeof p=="string"?p:void 0,lang:f.lang,asOf:c,datalog:f.datalog,prefilter:f.prefilter},g=typeof m.findNodesPagedAsync=="function"?await m.findNodesPagedAsync(h):m.findNodesPaged(h);if(s("queries.findNodesPaged.complete",{resultsCount:Array.isArray(g?.items)?g.items.length:void 0,hasMore:g?.hasMore}),typeof g?.error=="string"){let v={success:!1,error:String(g.error)};return typeof g?.error_code=="string"&&(v.error_code=String(g.error_code)),g?.details&&(v.details=g.details),g?.diag&&(v.diagnostics=g.diag),Array.isArray(g?.warnings)&&g.warnings.length>0&&(v.warnings=[...g.warnings]),v}if(i)try{let v=g?.diag||{};console.log("[FindNodes][DEBUG] page.diag",JSON.stringify(v)),console.log("[FindNodes][DEBUG] page.count",{items:g.items?.length,hasMore:g.hasMore})}catch(v){console.log("[FindNodes][DEBUG] failed to print page diagnostics",String(v?.message||v))}let y=Array.isArray(g.items)?g.items:[];s("page.items.received",{results:y.length});let b=iB(r,t.projectRoot),S=new Set,_=new Set,R=(await Promise.all(y.map(async(v,I)=>{if(!v||typeof v.path!="string"||!v.path.includes("#"))return[v];let{path:k}=Lr(v.path),$=Bt(k.split("#")[0]||k);if($&&$!=="ts"&&$!=="js"){let j=await YP(v,t.projectRoot,$);if(j)return[j]}try{let j=b.resolve(v.path,v);if(j){let z=ns(j.node,t.projectRoot),U=fr(z.path,z.hash),K=yS(v.self,z.self);return v.path===U&&v.hash&&v.ref&&K?.code?K!==v.self?[{...v,self:K}]:[v]:[{...v,path:z.path,hash:v.hash||z.hash,ref:v.ref||U,self:K}]}}catch(j){s("results.hash.failed",{index:I,path:v.path,error:j?.message||String(j)})}let L=oB(v,t.projectRoot,$);return L?(_.add(k),[L]):$&&$!=="ts"&&$!=="js"?[{...v,path:k}]:(S.add(k),[])}))).flat(),E=!!g.hasMore,T={limit:d,hasMore:E,cursor:typeof g.cursor=="string"&&g.cursor.length>0?String(g.cursor):null},x=v=>v.map(({symbol_key:I,...k})=>k).map(I=>mB(I,t.projectRoot,b)),w={success:!0,items:R,page:T,consistency_token:g.consistency_token};if(g.plan&&typeof g.plan=="object"&&(w.plan=g.plan),g.diag&&(w.diagnostics=g.diag),g.warnings&&g.warnings.length)for(let v of g.warnings)(w.warnings||=[]).push(v);S.size>0&&(w.warnings||=[]).push(`Omitted ${S.size} unstable result${S.size===1?"":"s"} because find-nodes could not re-resolve a canonical live AST path. Refresh the in-memory project state and retry.`),_.size>0&&(w.warnings||=[]).push(`Returned ${_.size} indexed fallback result${_.size===1?"":"s"} because live AST canonicalization was unavailable.`);let D=e?.include||{},F=typeof D.topN=="number"?Number(D.topN):void 0,N=F!==void 0?Math.max(0,Math.min(F,5)):void 0,C=D.parents===!0,O=D.body===!0,M=D.arities===!0,P=D.self===!0;if(!!(D&&(P||C||O||M||N!==void 0))&&w&&w.success&&Array.isArray(w.items)){let v=w.items,I=[],k=N!==void 0?N:3,$=typeof D.maxChars=="number"&&D.maxChars>0?D.maxChars:void 0;for(let L=0;L<v.length;L++){let j=v[L],z=typeof j?.file=="string"?Bt(String(j.file)):typeof j?.file_path=="string"?Bt(String(j.file_path)):void 0,U=C&&L<k,K=O&&L<k,G=M&&L<k;if(!(P||U||K)){if(G&&typeof j?.path=="string"&&typeof j?.file_path=="string"&&z==="clojure"){I.push({...j,arities:To(t.projectRoot,String(j.file_path),String(j.path)).map(pe=>({path:pe.path,hash:pe.hash,ref:pe.ref,arityIndex:pe.arityIndex,paramCount:pe.paramCount,argVector:pe.argVector,variadic:pe.variadic}))});continue}I.push(j);continue}if(z&&z!=="ts"&&z!=="js"){let pe=await YP(j,t.projectRoot,z);if(pe){let ke={...j,...pe};P||delete ke.self,G&&z==="clojure"&&typeof j?.path=="string"&&typeof j?.file_path=="string"&&(ke.arities=To(t.projectRoot,String(j.file_path),String(j.path)).map(re=>({path:re.path,hash:re.hash,ref:re.ref,arityIndex:re.arityIndex,paramCount:re.paramCount,argVector:re.argVector,variadic:re.variadic}))),I.push(ke);continue}}try{s("enrich.node.start",{index:L,path:j?.path});let pe=b.resolve(String(j?.path||""),j);if(!pe){P&&(w.warnings||=[]).push(`include.self requested but node could not be resolved for ${String(j?.path||"")}`),I.push(j);continue}let{node:ke,filePart:re,nodePartRaw:W}=pe;s("enrich.node.resolved",{index:L,path:j.path});let me=ns(ke,t.projectRoot),_e=fr(me.path,me.hash),Se={...j,path:me.path,hash:me.hash,ref:_e};if(P&&(Se.self=me.self),U)try{let Q=[],B=ke.getParent?.();for(;B&&typeof B.getKindName=="function"&&typeof B.getSourceFile=="function"&&B.getKindName()!=="SourceFile";){let Z=B.getKindName(),se=typeof B.getName=="function"?B.getName():void 0,ae=typeof B.getStartLineNumber=="function"?B.getStartLineNumber():void 0;Q.push({kind:Z,name:se,line:ae}),B=B.getParent?.()}Se.parents=Q}catch(Q){try{(w.warnings||=[]).push(`include.parents failed for ${re}#${W}: ${Q?.message||String(Q)}`)}catch{}}if(K)try{let Q=ke.getBody?.();if(Q&&typeof Q.getText=="function"){let B=Q.getText(),Z=Bc(B);if(typeof $=="number"&&Z.contentLength>$){let se=B.slice(0,$-12)+`
|
|
830
830
|
... [truncated]`;Se.body={content:se,contentLength:B.length,truncated:!0}}else Se.body={content:Z.content,contentLength:Z.contentLength,truncated:Z.contentTruncated}}else(w.warnings||=[]).push("include.body requested for a node without a body (omitted).")}catch(Q){try{(w.warnings||=[]).push(`include.body failed: ${Q?.message||String(Q)}`)}catch{}}if(G)try{Bt(String(j?.file_path||re))==="clojure"&&(Se.arities=To(t.projectRoot,String(j?.file_path||re),String(j.path)).map(B=>({path:B.path,hash:B.hash,ref:B.ref,arityIndex:B.arityIndex,paramCount:B.paramCount,argVector:B.argVector,variadic:B.variadic})))}catch(Q){try{(w.warnings||=[]).push(`include.arities failed: ${Q?.message||String(Q)}`)}catch{}}I.push(Se)}catch(pe){if(s("enrich.node.error",{index:L,path:j?.path,error:pe?.message||String(pe)}),i)try{console.log("[FindNodes][DEBUG] enrichment failed; returning path-only",{error:String(pe?.message||pe)})}catch{}I.push(j)}}return s("enrich.complete",{enrichedCount:I.length}),{...w,items:x(I)}}return s("complete",{enriched:!1,resultCount:Array.isArray(w?.items)?w.items.length:void 0}),Array.isArray(w.items)&&(w.items=x(w.items)),w}catch(i){s("error",{message:i?.message||String(i)});try{console.log("[FindNodes][ERROR]",i?.stack||String(i))}catch{}return{success:!1,error:`find-nodes failed: ${i?.message||String(i)}`}}}}});function yB(){return["python3","python","python2"]}function bB(n){let e=["import ast,sys","p=sys.argv[1]","src=open(p,'r',encoding='utf-8',errors='ignore').read()","ast.parse(src, filename=p)"].join(";"),t;for(let r of yB())try{let s=(0,tC.spawnSync)(r,["-c",e,n],{encoding:"utf8"});if(s.status===0)return{ok:!0};let i=(s.stderr||s.stdout||"").trim();i&&(t=i)}catch(s){t=s?.message||String(s)}return{ok:!1,error:t||"Python syntax validation failed."}}function Ti(n,e,t){return n==="python"?bB(t):n==="c"||n==="cpp"?Wk(e,t,n):n==="csharp"?Ak(e,t):n==="dart"?Gk(e,t):n==="java"?Qk(e,t):n==="clojure"?Pu(e,t):{ok:!1,error:`No validator available for language: ${n}`}}var tC,Dm=ne(()=>{"use strict";tC=require("child_process");Wy();Vs();uu();Gy();Qy()});function SB(n){return/\r\n/.test(n)?`\r
|
|
831
831
|
`:`
|
|
832
832
|
`}function xB(n,e){let t=Math.max(0,Math.min(e,n.length));for(;t>0;){let r=n[t-1];if(r===`
|
|
833
|
-
`||r==="\r")break;t--}return t}function Fm(n,e){if(e<0||e>n.length)return null;let t=SB(n),r=xB(n,e),s=n.slice(r,e);if(!s.length)return null;let i=s.match(/^[ \t]*/);return i?{indent:i[0]||"",newline:t}:null}function Om(n,e,t){let s=n.replace(/\r\n|\r|\n/g,t).split(t),i=null;for(let c of s){if(!c.trim())continue;let l=c.match(/^[ \t]*/),u=l?l[0].length:0;(i==null||u<i)&&(i=u)}let o=i??0;return s.map(c=>{if(!c.trim())return"";let l=c.startsWith(" ")||c.startsWith(" ")?c.slice(o):c;return e+l}).join(t)}var xS=ne(()=>{"use strict"});var nC={};Lt(nC,{InsertCodeExecutor:()=>Ji});var Vc,Yn,Gi,Ji,fd=ne(()=>{"use strict";Vc=require("ts-morph");ts();vo();Yn=q(require("path")),Gi=q(require("fs"));Hi();Xn();Bn();od();Ea();Dm();xS();Vs();Ns();Mm();kr();Ji=class extends _t{static isClojureArityPath(e){return typeof e=="string"&&/:FunctionArity(?:@|$)/.test(e)}static async execute(e,t,r){if(!e||typeof e!="object")return{success:!1,error:"Invalid operation"};if(typeof e.code!="string")return{success:!1,error:"code is required (string)"};if(typeof e.replaceExistingNodeAtPath!="boolean")return{success:!1,error:"replaceExistingNodeAtPath is required (boolean) and must be explicitly set"};let s=e.createFileIfMissing===!0,i=(()=>{let M=[],P=v=>{typeof v=="string"&&v.trim()&&M.push(String(v).trim())},A=e.to;return typeof A=="string"?P(A):A&&typeof A=="object"&&(P(A.before),P(A.after),P(A.start),P(A.end),P(A.bodyStartOf),P(A.bodyEndOf)),M})(),o=i.some(M=>M.includes("#")),a=i.filter(M=>!M.includes("#")),l=!o&&a.length===1,u=null;if(s){if(e.replaceExistingNodeAtPath)return{success:!1,error:"createFileIfMissing is incompatible with replaceExistingNodeAtPath=true."};if(o||a.length!==1)return{success:!1,error:"createFileIfMissing requires a single file anchor (start/end) without a node path."};let P=a[0].trim(),A=Yn.default.isAbsolute(P)?Yn.default.resolve(P):Yn.default.resolve(t.projectRoot,P),v=Yn.default.resolve(t.projectRoot),I=Yn.default.relative(v,A);if(I.startsWith("..")||Yn.default.isAbsolute(I))return{success:!1,error:`Target file '${P}' must reside within the project root.`};let k=Yn.default.dirname(A);if(!Gi.default.existsSync(A)){l=!0,u=A,Gi.default.mkdirSync(k,{recursive:!0});let $=typeof e.newFileInitialContent=="string"?e.newFileInitialContent:"";Gi.default.writeFileSync(A,$,"utf8");let L=I.split(Yn.default.sep).join("/"),j=r.getSourceFile(A)||r.getSourceFile(L);if(j||(j=r.addSourceFileAtPath(A)||r.addSourceFileAtPath(L)),!j)return{success:!1,error:`Failed to initialize source file for ${P}`};j.getFullText()!==$&&j.replaceWithText($)}}let d=typeof e.expectedHash=="string"?e.expectedHash.trim():"";if(l){if(d.includes("@"))return{success:!1,error:"expectedHash must omit the '@' prefix"}}else{if(!d)return{success:!1,error:"expectedHash is required for insert and must omit the @ prefix"};if(d.includes("@"))return{success:!1,error:"expectedHash must omit the '@' prefix"}}d?e.expectedHash=d:delete e.expectedHash;let f=(()=>{let M=e.to;if(typeof M=="string")return{mode:"after",value:M};if(!M||typeof M!="object")return{error:'insert requires a valid "to" anchor.'};let A=[["before",M.before],["after",M.after],["start",M.start],["end",M.end],["bodyStartOf",M.bodyStartOf],["bodyEndOf",M.bodyEndOf]].filter(([,v])=>typeof v=="string"&&String(v).trim());return A.length!==1?{error:"insert requires exactly one anchor (before/after/start/end/bodyStartOf/bodyEndOf)."}:{mode:A[0][0],value:String(A[0][1]).trim()}})();if("error"in f)return{success:!1,error:f.error};let m=f.value,[h,g]=m.split("#"),y=h?Bt(h):null;if(y&&y!=="ts"&&y!=="js"){let M=Yn.default.isAbsolute(h)?Yn.default.resolve(h):Yn.default.resolve(t.projectRoot,h);if(!g&&s&&!Gi.default.existsSync(M)){Gi.default.mkdirSync(Yn.default.dirname(M),{recursive:!0});let Se=typeof e.newFileInitialContent=="string"?e.newFileInitialContent:"";Gi.default.writeFileSync(M,Se,"utf8"),u=M}if(!Gi.default.existsSync(M))return{success:!1,error:`Target file not found: ${h}`};let P=Pe(M),A=P,v=Br(h,t.projectRoot),I=0,k=null,$=null;if(g){if(!d)return{success:!1,error:"expectedHash is required for insert with node anchors."};let Se=await os(t.projectRoot,M,g,y),Q=Se?{start:Se.start,end:Se.end}:Kc(g);if(!Q)return{success:!1,error:"Unable to resolve anchor span for non-TS/JS file.",error_code:"resolve_failed"};let B=Se?.text??Nt(P,Q,y),Z=`${Br(h,t.projectRoot)}#${g}`;if(y==="clojure"){let ae=this.isClojureArityPath(g)?g:null;if(ae){if(et(Z,B)!==`@${d}`)return{success:!1,error:"Hash mismatch for Clojure arity insert anchor. Re-run find-nodes to refresh the target."}}else{let Ee=Ui(t.projectRoot,M,Q.start,Q.end,{plainPath:Z,expectedHash:d,content:B});if(!Ee.target)return{success:!1,error:"Ambiguous Clojure target identity. Re-run find-nodes to refresh the target hash."};if(Ee.comparison?.type!=="MATCH")return{success:!1,error:`Hash mismatch (${Ee.comparison?.type??"FORMAT"}) for insert anchor. Re-run find-nodes to refresh the target.`};$=Ee.target}if(!ae&&(f.mode==="bodyStartOf"||f.mode==="bodyEndOf")){let Ee=To(t.projectRoot,h,m);if(Ee.length>1)return{success:!1,error:"Ambiguous Clojure body insert target: multi-arity function bodies require an explicit arity path. Re-run find-nodes with include.arities and retry using one returned arity path.",error_code:"clojure_arity_target_required",details:{arityCount:Ee.length,arities:Ee.map(({path:rt,hash:xe,ref:Me,arityIndex:ge,paramCount:ye,argVector:Ve,variadic:bt})=>({path:rt,hash:xe,ref:Me,arityIndex:ge,paramCount:ye,argVector:Ve,variadic:bt}))}}}if(e.replaceExistingNodeAtPath===!0){let Ee=$?.symbolKey?Dc(t.projectRoot,M,$.symbolKey,String(e.code??"")):Cu(t.projectRoot,M,g,String(e.code??""));if(!Ee?.content)return{success:!1,error:"Clojure replace-existing insert failed in tool adapter."};try{un(M,Ee.content)}catch(ge){return{success:!1,error:`Failed to write file: ${ge?.message||ge}`,error_code:"io_write_failed"}}if(!(e.forceInsertWillBreakSyntax===!0)){let ge=Ti(y,t.projectRoot,M);if(!ge.ok)return this.restoreNonTsFile(M,A,u),{success:!1,error:`Invalid after insertion (syntax validation failed): ${ge.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the replacement text or provide forceInsertWillBreakSyntax=true to override validation."]}}return{success:!0,details:{changedFiles:[Br(h,t.projectRoot)],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},receipt:{replaceExisting:!0,anchor:e.to,insertedLength:String(e.code??"").length}}}}let De=f.mode==="before"||f.mode==="start"?"before":f.mode==="after"||f.mode==="end"?"after":f.mode==="bodyStartOf"?"bodyStart":"bodyEnd",he=String(e.code??""),Ke=$?.symbolKey?$f(t.projectRoot,M,$.symbolKey,De,he):Of(t.projectRoot,M,g,De,he);if(!Ke?.content&&$?.symbolKey){try{console.log("[Insert][Clojure] symbol-key insert failed; retrying with node path",{file:h,nodePath:g,symbolKey:$.symbolKey,mode:De})}catch{}Ke=Of(t.projectRoot,M,g,De,he)}else if(!Ke?.content&&!$?.symbolKey)try{console.log("[Insert][Clojure] node-path insert failed with no symbol key available",{file:h,nodePath:g,mode:De})}catch{}if(!Ke?.content)return{success:!1,error:"Clojure insert failed in tool adapter."};try{un(M,Ke.content)}catch(Ee){return{success:!1,error:`Failed to write file: ${Ee?.message||Ee}`,error_code:"io_write_failed"}}if(!(e.forceInsertWillBreakSyntax===!0)){let Ee=Ti(y,t.projectRoot,M);if(!Ee.ok)return this.restoreNonTsFile(M,A,u),{success:!1,error:`Invalid after insertion (syntax validation failed): ${Ee.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the inserted text or provide forceInsertWillBreakSyntax=true to override validation."]}}return{success:!0,details:{changedFiles:[Br(h,t.projectRoot)],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},receipt:{replaceExisting:!1,anchor:e.to,insertedLength:String(e.code??"").length}}}}if(et(Z,B)!==`@${d}`)return{success:!1,error:"Hash mismatch for insert anchor."};if(f.mode==="before"||f.mode==="start")I=Q.start;else if(f.mode==="after"||f.mode==="end")I=Q.end;else{let ae=Se?.bodyStart??null,De=Se?.bodyEnd??null;if(ae==null||De==null){let he=B.indexOf("{"),Ke=B.lastIndexOf("}");he>=0&&Ke>he&&(ae=Q.start+he+1,De=Q.start+Ke)}if(ae==null||De==null)return{success:!1,error:"Unable to resolve body span for insert anchor."};if(y==="python"&&(k=Fm(P,ae),!k))return{success:!1,error:"Unable to determine Python block indentation at body start (empty body or malformed span).",error_code:"python_indent_unresolved"};I=f.mode==="bodyStartOf"?ae:De}}else{if(d&&et(v,P)!==`@${d}`)return{success:!1,error:"Hash mismatch for insert file anchor."};f.mode==="end"||f.mode==="after"||f.mode==="bodyEndOf"?I=P.length:I=0}let L=String(e.code??"");y==="python"&&k&&(L.trim()||(L="pass"),L=Om(L,k.indent,k.newline));let j=P.slice(Math.max(0,I-1),I),z=P.slice(I,I+1),U=L.slice(0,1),K=L.slice(-1),G=Se=>/[A-Za-z0-9_$]/.test(Se),te=Se=>/\s/.test(Se),pe=Se=>/[})\];]/.test(Se),ke=Se=>/[a-z]/i.test(Se);j&&U&&!te(j)&&!te(U)&&(G(j)&&G(U)||pe(j)&&ke(U))&&(L=` ${L}`),z&&K&&!te(z)&&!te(K)&&(G(K)&&G(z)||ke(K)&&/[{([]/.test(z))&&(L=`${L} `);let re=P.slice(0,I)+L+P.slice(I);try{un(M,re)}catch(Se){return{success:!1,error:`Failed to write file: ${Se?.message||Se}`,error_code:"io_write_failed"}}if(!(e.forceInsertWillBreakSyntax===!0)){let Se=Ti(y,t.projectRoot,M);if(!Se.ok)return this.restoreNonTsFile(M,A,u),{success:!1,error:`Invalid after insertion (syntax validation failed): ${Se.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the inserted text or provide forceInsertWillBreakSyntax=true to override validation."]}}let me=Br(h,t.projectRoot),_e={changedFiles:[me],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},receipt:{replaceExisting:!1,anchor:e.to,insertedLength:L.length}};return u&&(_e.createdFiles=[me]),{success:!0,details:_e}}let b=e.batchSaves===!0,S=null,_,R,E="after",T=0,x=!1,w=0,D=0,F="",N="",C=[],O="";try{if(e.replaceExistingNodeAtPath===!0){x=!0;let re;if(typeof e.to=="string")re=String(e.to);else if(typeof e.to=="object"&&e.to){let se=e.to;if(typeof se.before=="string")re=se.before;else if(typeof se.after=="string")re=se.after;else if(typeof se.start=="string")re=se.start;else if(typeof se.end=="string")re=se.end;else return{success:!1,error:"replaceExistingNodeAtPath requires a specific target node path (before/after or direct path)"}}if(!re)return{success:!1,error:"replaceExistingNodeAtPath requires a target node path"};let W=this.resolveNodeFromPathRef(re,t,r,e.expectedHash),{sourceFile:me,node:_e,error:Se}=W;if(Se||!me||!_e)return{success:!1,error:Se||"failed to resolve target node"};let Q=_e,B=Q.getPos?.(),Z=Q.getEnd?.();if(typeof B!="number"||typeof Z!="number"||Z<B)return{success:!1,error:"failed to determine target span for replacement"};S=me,O=S.getFullText(),C=S.getPreEmitDiagnostics?.()||[],R=Q.getParent?.(),_=B,w=B,F=O.slice(0,B),N=O.slice(Z)}else{let re=this.normalizeInsertPosition(e.to,t,r);if("error"in re){let Q=String(re.error||"insert_failed"),B=/not found|Anchor not found|Container not found|Anchor requires/i.test(Q);return{success:!1,error:Q,...B?{error_code:"resolve_failed"}:{}}}typeof re.expectedHash!="string"&&(re.expectedHash=e.expectedHash);let W=!!re.anchor||typeof re.expectedHash=="string",me=W?{...e}:e;W&&(me.resolvedNodes=re.anchor?{anchor:re.anchor}:e.resolvedNodes,typeof re.expectedHash=="string"&&(me.expectedHash=re.expectedHash));let _e=this.resolvePosition(re.to,t,r,me);if("error"in _e){let Q=String(_e.error||"insert_failed"),B=/not found|Anchor not found|Container not found|Anchor requires/i.test(Q);return{success:!1,error:Q,...B?{error_code:"resolve_failed"}:{}}}R=_e.parent,T=_e.index,E=_e.anchor,S=R.getSourceFile(),O=S.getFullText(),C=S.getPreEmitDiagnostics?.()||[];let Se=this.getStatements(R);if(Se.length===0){let Q=R.getChildSyntaxList?.();Vc.Node.isSourceFile(R)?E==="end"?_=R.getEnd():E==="start"?_=R.getPos?.()??0:Q&&typeof Q.getPos=="function"?_=Q.getPos():R.getPos?_=R.getPos():_=0:Q&&typeof Q.getPos=="function"?_=Q.getPos():R.getPos?_=R.getPos():_=0}else T<=0?_=Se[0].getPos():T>=Se.length?_=Se[Se.length-1].getEnd():_=Se[T].getPos();F=O.slice(0,_),N=O.slice(_),w=_}let M=String(e.code||""),P=F.slice(-1),A=N.slice(0,1),v=M.slice(0,1),I=M.slice(-1),k=re=>/[A-Za-z0-9_$]/.test(re),$=re=>/\s/.test(re),L=re=>/[})\];]/.test(re),j=re=>/[a-z]/i.test(re);P&&v&&!$(P)&&!$(v)&&(k(P)&&k(v)||L(P)&&j(v))&&(M=` ${M}`),A&&I&&!$(A)&&!$(I)&&(k(I)&&k(A)||j(I)&&/[{([]/.test(A))&&(M=`${M} `);let z=F+M+N;if(D=w+M.length,S.replaceWithText(z),!(e.forceInsertWillBreakSyntax===!0)){let re=S.getPreEmitDiagnostics?.()||[],W=S.getPreEmitDiagnostics?.()||re,me=C.length||0;if((W.length||0)>me){try{S.replaceWithText(O)}catch{}return{success:!1,error:`Invalid after insertion (file diagnostics increased): ${W.slice(0,5).map(Q=>{try{return String(Q.getMessageText?.()||Q.getMessage?.()||Q)}catch{return"Diagnostic"}}).join("; ")}`,error_code:"would_introduce_syntax_error",hints:["The inserted text likely broke syntax or spacing. Ensure tokens are separated and the insertion point is valid.","Try inserting with surrounding whitespace or at a different anchor."]}}}let G=this.collectNodesInRange(S,w,D).map(re=>{try{return ns(re,t.projectRoot)}catch{return}}).filter(re=>!!re),te=require("path").relative(t.projectRoot,S.getFilePath()).split(Yn.default.sep).join("/"),pe={changedFiles:[te],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},receipt:{replaceExisting:x,anchor:e.to,insertedLength:M.length}};u&&(pe.createdFiles=[te]),G.length>0&&(pe.createdNodes=G.map(re=>({path:re.path,hash:re.hash,ref:re.ref,type:re.self.type,name:re.self.name,code:re.self.code})));let ke={success:!0,details:pe};if(G.length>0){let[re]=G;ke.created={node:re.ref,path:re.path,hash:re.hash,ref:re.ref,self:re.self,before:{before:re.path},after:{after:re.path}}}return b||Qn(S),ke}catch(M){try{S?.replaceWithText(O),!b&&S&&Qn(S)}catch{}return{success:!1,error:`insert failed: ${M?.message||String(M)}`}}}static normalizeInsertPosition(e,t,r){if(!e)return{error:'insert requires "to" to be an object with before/after/start/end/bodyStartOf/bodyEndOf anchors.'};if(typeof e=="string")return{to:{end:e}};let s={...e},i,o;if(s.bodyStartOf&&s.bodyEndOf)return{error:"Provide either bodyStartOf or bodyEndOf, not both."};if(typeof s.bodyStartOf=="string"){let c=this.convertBodyAnchor(s.bodyStartOf,"start",t,r);if(c.error)return{error:c.error};s.start=c.path,delete s.bodyStartOf,i=c.anchor??i,o=c.expectedHash??o}if(typeof s.bodyEndOf=="string"){let c=this.convertBodyAnchor(s.bodyEndOf,"end",t,r);if(c.error)return{error:c.error};s.end=c.path,delete s.bodyEndOf,i=c.anchor??i,o=c.expectedHash??o}return["before","after","start","end"].some(c=>typeof s[c]=="string")?{to:s,anchor:i,expectedHash:o}:{error:"insert requires an anchor (before/after/start/end)."}}static convertBodyAnchor(e,t,r,s){if(!e||typeof e!="string")return{error:"bodyStartOf/bodyEndOf requires a string path."};let i=e.includes("@")?e.split("@")[0]:e;if(i==="$MATCH")return{error:`${t==="start"?"bodyStartOf":"bodyEndOf"} with "$MATCH" is only supported in filter-map-reduce operations. Provide a concrete node path when using direct insert.`};let o=this.resolveNodeFromPathRef(i,r,s);if(o.error)return{error:o.error};let a=o.node??o.sourceFile;if(!a)return{error:`Anchor not found for ${e}`};let c;if(typeof a.getBody=="function"){let f=a.getBody();f&&Vc.Node.isBlock(f)&&(c=f)}if(c||(Vc.Node.isInterfaceDeclaration?.(a)||Vc.Node.isSourceFile(a))&&(c=a),!c)return{error:`Target specified by ${e} does not expose a block body for ${t==="start"?"bodyStartOf":"bodyEndOf"}.`};let u=_t.getNodePath(c,r.projectRoot).split("@"),d=u[0],p=u.length>1?u[1]:void 0;return{path:d,anchor:c,expectedHash:p}}static collectNodesInRange(e,t,r){let s=Math.max(0,t),i=Math.max(s,r);if(i<=s)return[];let o=[];if(e.forEachDescendant(a=>{if(!this.isReportableNode(a))return;let c=a.getStart(),l=a.getEnd();c>=s&&l<=i&&o.push(a)}),!o.length){let a=e.getDescendantAtStartWithWidth?.(s,i-s);a&&this.isReportableNode(a)&&o.push(a)}return this.filterTopLevelNodes(o)}static filterTopLevelNodes(e){if(!e.length)return[];let t=[...e].sort((s,i)=>{let o=s.getStart()-i.getStart();return o!==0?o:i.getEnd()-s.getEnd()}),r=[];for(let s of t){let i=s.getStart(),o=s.getEnd();r.some(c=>c.getStart()<=i&&c.getEnd()>=o)||r.push(s)}return r}static isReportableNode(e){if(!e||Vc.Node.isSourceFile(e))return!1;let t=e.getKindName?.();return!(t==="SyntaxList"||t==="EndOfFileToken")}static restoreNonTsFile(e,t,r){try{if(r&&Yn.default.resolve(r)===Yn.default.resolve(e)){Gi.default.rmSync(e,{force:!0});return}un(e,t)}catch{}}static resolveNodeFromPathRef(e,t,r,s){try{if(typeof e!="string"||!e.trim())return{error:"anchor path must be a non-empty string"};let[i,o]=e.split("@");if(!i.includes("#"))return{error:"replaceExistingNodeAtPath requires a concrete node path (file#nodePath)"};let a=i.indexOf("#"),c=i.slice(0,a),l=i.slice(a+1),u=Yn.default.isAbsolute(c)?c:Yn.default.join(t.projectRoot,c),d=r.getSourceFile(u)||r.addSourceFileAtPath(u);if(!d)return{error:"target file not found"};if(!l)return{sourceFile:d};let p=Pn(l,d);if(!p)return{error:"Target node not found. Call find-nodes on the target file to get current node paths, then retry insert with the correct path.",sourceFile:d};let f=typeof s=="string"&&s.trim()?s.trim():typeof o=="string"&&o.trim()?o.trim():void 0;if(f){if(f.includes("@"))return{error:"expectedHash must omit the '@' prefix"};let h=_t.getNodePath(p,t.projectRoot).split("@")[1];if(h!==f)return{error:`Hash mismatch for replacement target. Expected: @${f}, Current: @${h}. Target changed since selection.`}}return{sourceFile:d,node:p,insertAt:p.getPos?.()??0}}catch(i){return{error:i?.message||"failed to resolve target node"}}}}});var $m={};Lt($m,{ReplaceBodyExecutor:()=>hd});var md,hd,gd=ne(()=>{"use strict";md=require("ts-morph");ts();vo();Xn();Bn();od();Ea();Dm();xS();Vs();Ns();kr();Mm();hd=class extends _t{static rebuildNonTsNodePath(e,t,r){let s=e.indexOf(":");return s>=0?`${t}-${r}${e.slice(s)}`:`${t}-${r}`}static lengthInLanguageOffsets(e,t){return t&&t!=="ts"&&t!=="js"&&t!=="csharp"?Buffer.byteLength(e,"utf8"):e.length}static isClojureArityPath(e){return typeof e=="string"&&/:FunctionArity(?:@|$)/.test(e)}static restoreNonTsFile(e,t){try{un(e,t)}catch{}}static async execute(e,t,r){if(e.scope&&e.scope!=="body")return{success:!1,error:'replace scope must be "body" when using replace-body executor.'};if(!e||typeof e!="object")return{success:!1,error:"Invalid operation"};if(typeof e.path!="string"||!e.path.includes("#"))return{success:!1,error:"path is required (file#nodePath)"};if(typeof e.with!="string")return{success:!1,error:"with is required (string) and must contain only inner body content (no braces)"};if(typeof e.expectedHash!="string"||!e.expectedHash)return{success:!1,error:"expectedHash is required (string)"};let[s,i]=String(e.path).split("#"),o=s?Bt(s):null;if(o&&o!=="ts"&&o!=="js"){let R=require("path").isAbsolute(s)?require("path").resolve(s):require("path").resolve(t.projectRoot,s);if(!require("fs").existsSync(R))return{success:!1,error:`Target file not found: ${s}`};let E=Pe(R),T=i?await os(t.projectRoot,R,i,o):null,x=i?T?{start:T.start,end:T.end}:Kc(i):null;if(!x)return{success:!1,error:"Unable to resolve node span for non-TS/JS replace scope=body.",error_code:"resolve_failed"};let w=T?.text??Nt(E,x,o),D=`${Br(s,t.projectRoot)}#${i}`,F=e.expectedHash.startsWith("@")?e.expectedHash:`@${e.expectedHash}`;if(o==="clojure"){let Z=this.isClojureArityPath(i)?i:null,se=null;if(Z){if(et(D,w)!==F)return{success:!1,error:"Hash mismatch for replace scope=body arity target. Re-run find-nodes to refresh the target."}}else{let ye=Ui(t.projectRoot,R,x.start,x.end,{plainPath:D,expectedHash:F,content:w});if(!ye.target)return{success:!1,error:"Ambiguous Clojure target identity. Re-run find-nodes to refresh the target hash."};if(ye.comparison?.type!=="MATCH")return{success:!1,error:`Hash mismatch (${ye.comparison?.type??"FORMAT"}) for replace scope=body target. Re-run find-nodes to refresh the target.`};let Ve=To(t.projectRoot,s,e.path);if(Ve.length>1)return{success:!1,error:"Ambiguous Clojure replace-body target: multi-arity function bodies require an explicit arity path. Re-run find-nodes with include.arities and retry using one returned arity path.",error_code:"clojure_arity_target_required",details:{arityCount:Ve.length,arities:Ve.map(({path:bt,hash:Fn,ref:nr,arityIndex:vn,paramCount:Ot,argVector:ze,variadic:$t})=>({path:bt,hash:Fn,ref:nr,arityIndex:vn,paramCount:Ot,argVector:ze,variadic:$t}))}};se=ye.target}let ae=se?.symbolKey?Ff(t.projectRoot,R,se.symbolKey,String(e.with||"")):null;if(!ae&&i&&(ae=gb(t.projectRoot,R,i,String(e.with||""))),!ae?.content)return{success:!1,error:"Clojure replace-body failed in tool adapter."};try{un(R,ae.content)}catch(ye){return{success:!1,error:`Failed to write file: ${ye?.message||ye}`,error_code:"io_write_failed"}}if(!(e.forceReplaceWillBreakSyntax===!0)){let ye=Ti(o,t.projectRoot,R);if(!ye.ok)return this.restoreNonTsFile(R,E),{success:!1,error:`Invalid after replacement (syntax validation failed): ${ye.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the replacement text or provide forceReplaceWillBreakSyntax=true to override validation."]}}let he=Br(s,t.projectRoot),Ke=Pe(R),Ze=typeof ae.bodyStart=="number"?ae.bodyStart:typeof T?.bodyStart=="number"?T.bodyStart:null,Ye=typeof ae.bodyEnd=="number"?ae.bodyEnd:typeof T?.bodyEnd=="number"?T.bodyEnd:null,Ft=Buffer.byteLength(String(e.with||""),"utf8"),Ee=Ze!=null&&Ye!=null&&Ye>=Ze?Ye-Ze:0,rt={start:x.start,end:x.end+Ft-Ee},xe=Nt(Ke,rt,o),Me=`${he}#${this.rebuildNonTsNodePath(i,rt.start,rt.end)}`,ge=Z?et(Me,xe):Wi(Me,xe,se);return{success:!0,details:{changedFiles:[he],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},updatedTargets:[{oldRef:`${D}${F}`,newRef:`${Me}${ge}`,newHash:ge}],receipt:{path:e.path}}}}if(et(D,w)!==F)return{success:!1,error:"Hash mismatch for replace scope=body target."};let C=T?.bodyStart??null,O=T?.bodyEnd??null;if(C==null||O==null){let Z=w.indexOf("{"),se=w.lastIndexOf("}");Z>=0&&se>Z&&(C=x.start+Z+1,O=x.start+se)}if(C==null||O==null||O<C)return{success:!1,error:"target_has_no_brace_body (use replace to replace entire node)"};let M=rs(E,C,o),P=rs(E,O,o),A=E.slice(0,M),v=E.slice(P),I=String(e.with||"");if(o==="python"){let Z=Fm(E,C);if(!Z)return{success:!1,error:"Unable to determine Python block indentation at body start (empty body or malformed span).",error_code:"python_indent_unresolved"};I.trim()||(I="pass"),I=Om(I,Z.indent,Z.newline)}let k=A.slice(-1),$=v.slice(0,1),L=I.slice(0,1),j=I.slice(-1),z=Z=>/[A-Za-z0-9_$]/.test(Z),U=Z=>/\s/.test(Z),K=Z=>/[})\];]/.test(Z),G=Z=>/[a-z]/i.test(Z);k&&L&&!U(k)&&!U(L)&&(z(k)&&z(L)||K(k)&&G(L))&&(I=` ${I}`),$&&j&&!U($)&&!U(j)&&(z(j)&&z($)||G(j)&&/[{([]/.test($))&&(I=`${I} `);let te=A+I+v;try{un(R,te)}catch(Z){return{success:!1,error:`Failed to write file: ${Z?.message||Z}`,error_code:"io_write_failed"}}if(!(e.forceReplaceWillBreakSyntax===!0)){let Z=Ti(o,t.projectRoot,R);if(!Z.ok)return this.restoreNonTsFile(R,E),{success:!1,error:`Invalid after replacement (syntax validation failed): ${Z.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the replacement text or provide forceReplaceWillBreakSyntax=true to override validation."]}}let ke=Br(s,t.projectRoot),re=O-C,W=this.lengthInLanguageOffsets(I,o),me={start:x.start,end:x.end+W-re},_e=Nt(te,me,o),Se=this.rebuildNonTsNodePath(i,me.start,me.end),Q=`${ke}#${Se}`,B=et(Q,_e);return{success:!0,details:{changedFiles:[ke],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},updatedTargets:[{oldRef:`${D}${F}`,newRef:`${Q}${B}`,newHash:B}],receipt:{path:e.path}}}}let a=`${e.path}@${e.expectedHash}`,c=_t.resolvePathRef(a,r,t.projectRoot);if(!c)return{success:!1,error:"target_not_found_or_hash_mismatch",error_code:"resolve_failed"};let l=c.getSourceFile(),u=l.getFullText(),d=e.batchSaves===!0,p=l.getPreEmitDiagnostics?.()||[],f=c.getStart?.(!1)??c.getStart?.(),m=c.getEnd?.(),h=typeof c.getKind=="function"?c.getKind():void 0,g,y,b=R=>{if(!R)return;let E=l.getFullText();try{let T=R.getFirstChildByKind?.(md.SyntaxKind.OpenBraceToken)||R.getFirstDescendantByKind?.(md.SyntaxKind.OpenBraceToken),x=R.getLastChildByKind?.(md.SyntaxKind.CloseBraceToken)||R.getLastDescendantByKind?.(md.SyntaxKind.CloseBraceToken);if(T&&x){g=T.getEnd?.(),y=x.getStart?.();return}}catch{}try{let T=R.getStart?.(),x=R.getEnd?.();if(typeof T=="number"&&typeof x=="number"&&x>T){let w=E.slice(T,x),D=w.indexOf("{"),F=w.lastIndexOf("}");D>=0&&F>D&&(g=T+D+1,y=T+F)}}catch{}},S=typeof c.getBody=="function"?c.getBody():void 0;if(b(S),(g===void 0||y===void 0)&&b(c),typeof g!="number"||typeof y!="number"||y<g)return{success:!1,error:"target_has_no_brace_body (use replace to replace entire node or select a node with a Block body)"};let _=String(e.with||"");try{let R=_.replace(/\r\n|\r|\n/g,/\r\n/.test(u)?`\r
|
|
833
|
+
`||r==="\r")break;t--}return t}function Fm(n,e){if(e<0||e>n.length)return null;let t=SB(n),r=xB(n,e),s=n.slice(r,e);if(!s.length)return null;let i=s.match(/^[ \t]*/);return i?{indent:i[0]||"",newline:t}:null}function Om(n,e,t){let s=n.replace(/\r\n|\r|\n/g,t).split(t),i=null;for(let c of s){if(!c.trim())continue;let l=c.match(/^[ \t]*/),u=l?l[0].length:0;(i==null||u<i)&&(i=u)}let o=i??0;return s.map(c=>{if(!c.trim())return"";let l=c.startsWith(" ")||c.startsWith(" ")?c.slice(o):c;return e+l}).join(t)}var xS=ne(()=>{"use strict"});var nC={};Lt(nC,{InsertCodeExecutor:()=>Ji});var Vc,Yn,Gi,Ji,fd=ne(()=>{"use strict";Vc=require("ts-morph");ts();vo();Yn=q(require("path")),Gi=q(require("fs"));Hi();Xn();Bn();od();Ea();Dm();xS();Vs();Ns();Mm();kr();Ji=class extends _t{static isClojureArityPath(e){return typeof e=="string"&&/:FunctionArity(?:@|$)/.test(e)}static async execute(e,t,r){if(!e||typeof e!="object")return{success:!1,error:"Invalid operation"};if(typeof e.code!="string")return{success:!1,error:"code is required (string)"};if(typeof e.replaceExistingNodeAtPath!="boolean")return{success:!1,error:"replaceExistingNodeAtPath is required (boolean) and must be explicitly set"};let s=e.createFileIfMissing===!0,i=(()=>{let M=[],P=v=>{typeof v=="string"&&v.trim()&&M.push(String(v).trim())},A=e.to;return typeof A=="string"?P(A):A&&typeof A=="object"&&(P(A.before),P(A.after),P(A.start),P(A.end),P(A.bodyStartOf),P(A.bodyEndOf)),M})(),o=i.some(M=>M.includes("#")),a=i.filter(M=>!M.includes("#")),l=!o&&a.length===1,u=null;if(s){if(e.replaceExistingNodeAtPath)return{success:!1,error:"createFileIfMissing is incompatible with replaceExistingNodeAtPath=true."};if(o||a.length!==1)return{success:!1,error:"createFileIfMissing requires a single file anchor (start/end) without a node path."};let P=a[0].trim(),A=Yn.default.isAbsolute(P)?Yn.default.resolve(P):Yn.default.resolve(t.projectRoot,P),v=Yn.default.resolve(t.projectRoot),I=Yn.default.relative(v,A);if(I.startsWith("..")||Yn.default.isAbsolute(I))return{success:!1,error:`Target file '${P}' must reside within the project root.`};let k=Yn.default.dirname(A);if(!Gi.default.existsSync(A)){l=!0,u=A,Gi.default.mkdirSync(k,{recursive:!0});let $=typeof e.newFileInitialContent=="string"?e.newFileInitialContent:"";Gi.default.writeFileSync(A,$,"utf8");let L=I.split(Yn.default.sep).join("/"),j=r.getSourceFile(A)||r.getSourceFile(L);if(j||(j=r.addSourceFileAtPath(A)||r.addSourceFileAtPath(L)),!j)return{success:!1,error:`Failed to initialize source file for ${P}`};j.getFullText()!==$&&j.replaceWithText($)}}let d=typeof e.expectedHash=="string"?e.expectedHash.trim():"";if(l){if(d.includes("@"))return{success:!1,error:"expectedHash must omit the '@' prefix"}}else{if(!d)return{success:!1,error:"expectedHash is required for insert and must omit the @ prefix"};if(d.includes("@"))return{success:!1,error:"expectedHash must omit the '@' prefix"}}d?e.expectedHash=d:delete e.expectedHash;let f=(()=>{let M=e.to;if(typeof M=="string")return{mode:"after",value:M};if(!M||typeof M!="object")return{error:'insert requires a valid "to" anchor.'};let A=[["before",M.before],["after",M.after],["start",M.start],["end",M.end],["bodyStartOf",M.bodyStartOf],["bodyEndOf",M.bodyEndOf]].filter(([,v])=>typeof v=="string"&&String(v).trim());return A.length!==1?{error:"insert requires exactly one anchor (before/after/start/end/bodyStartOf/bodyEndOf)."}:{mode:A[0][0],value:String(A[0][1]).trim()}})();if("error"in f)return{success:!1,error:f.error};let m=f.value,[h,g]=m.split("#"),y=h?Bt(h):null;if(y&&y!=="ts"&&y!=="js"){let M=Yn.default.isAbsolute(h)?Yn.default.resolve(h):Yn.default.resolve(t.projectRoot,h);if(!g&&s&&!Gi.default.existsSync(M)){Gi.default.mkdirSync(Yn.default.dirname(M),{recursive:!0});let Se=typeof e.newFileInitialContent=="string"?e.newFileInitialContent:"";Gi.default.writeFileSync(M,Se,"utf8"),u=M}if(!Gi.default.existsSync(M))return{success:!1,error:`Target file not found: ${h}`};let P=Pe(M),A=P,v=zr(h,t.projectRoot),I=0,k=null,$=null;if(g){if(!d)return{success:!1,error:"expectedHash is required for insert with node anchors."};let Se=await os(t.projectRoot,M,g,y),Q=Se?{start:Se.start,end:Se.end}:Kc(g);if(!Q)return{success:!1,error:"Unable to resolve anchor span for non-TS/JS file.",error_code:"resolve_failed"};let B=Se?.text??Nt(P,Q,y),Z=`${zr(h,t.projectRoot)}#${g}`;if(y==="clojure"){let ae=this.isClojureArityPath(g)?g:null;if(ae){if(et(Z,B)!==`@${d}`)return{success:!1,error:"Hash mismatch for Clojure arity insert anchor. Re-run find-nodes to refresh the target."}}else{let Ee=Ui(t.projectRoot,M,Q.start,Q.end,{plainPath:Z,expectedHash:d,content:B});if(!Ee.target)return{success:!1,error:"Ambiguous Clojure target identity. Re-run find-nodes to refresh the target hash."};if(Ee.comparison?.type!=="MATCH")return{success:!1,error:`Hash mismatch (${Ee.comparison?.type??"FORMAT"}) for insert anchor. Re-run find-nodes to refresh the target.`};$=Ee.target}if(!ae&&(f.mode==="bodyStartOf"||f.mode==="bodyEndOf")){let Ee=To(t.projectRoot,h,m);if(Ee.length>1)return{success:!1,error:"Ambiguous Clojure body insert target: multi-arity function bodies require an explicit arity path. Re-run find-nodes with include.arities and retry using one returned arity path.",error_code:"clojure_arity_target_required",details:{arityCount:Ee.length,arities:Ee.map(({path:rt,hash:xe,ref:Me,arityIndex:ge,paramCount:ye,argVector:Ve,variadic:bt})=>({path:rt,hash:xe,ref:Me,arityIndex:ge,paramCount:ye,argVector:Ve,variadic:bt}))}}}if(e.replaceExistingNodeAtPath===!0){let Ee=$?.symbolKey?Dc(t.projectRoot,M,$.symbolKey,String(e.code??"")):Cu(t.projectRoot,M,g,String(e.code??""));if(!Ee?.content)return{success:!1,error:"Clojure replace-existing insert failed in tool adapter."};try{un(M,Ee.content)}catch(ge){return{success:!1,error:`Failed to write file: ${ge?.message||ge}`,error_code:"io_write_failed"}}if(!(e.forceInsertWillBreakSyntax===!0)){let ge=Ti(y,t.projectRoot,M);if(!ge.ok)return this.restoreNonTsFile(M,A,u),{success:!1,error:`Invalid after insertion (syntax validation failed): ${ge.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the replacement text or provide forceInsertWillBreakSyntax=true to override validation."]}}return{success:!0,details:{changedFiles:[zr(h,t.projectRoot)],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},receipt:{replaceExisting:!0,anchor:e.to,insertedLength:String(e.code??"").length}}}}let De=f.mode==="before"||f.mode==="start"?"before":f.mode==="after"||f.mode==="end"?"after":f.mode==="bodyStartOf"?"bodyStart":"bodyEnd",he=String(e.code??""),Ke=$?.symbolKey?$f(t.projectRoot,M,$.symbolKey,De,he):Of(t.projectRoot,M,g,De,he);if(!Ke?.content&&$?.symbolKey){try{console.log("[Insert][Clojure] symbol-key insert failed; retrying with node path",{file:h,nodePath:g,symbolKey:$.symbolKey,mode:De})}catch{}Ke=Of(t.projectRoot,M,g,De,he)}else if(!Ke?.content&&!$?.symbolKey)try{console.log("[Insert][Clojure] node-path insert failed with no symbol key available",{file:h,nodePath:g,mode:De})}catch{}if(!Ke?.content)return{success:!1,error:"Clojure insert failed in tool adapter."};try{un(M,Ke.content)}catch(Ee){return{success:!1,error:`Failed to write file: ${Ee?.message||Ee}`,error_code:"io_write_failed"}}if(!(e.forceInsertWillBreakSyntax===!0)){let Ee=Ti(y,t.projectRoot,M);if(!Ee.ok)return this.restoreNonTsFile(M,A,u),{success:!1,error:`Invalid after insertion (syntax validation failed): ${Ee.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the inserted text or provide forceInsertWillBreakSyntax=true to override validation."]}}return{success:!0,details:{changedFiles:[zr(h,t.projectRoot)],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},receipt:{replaceExisting:!1,anchor:e.to,insertedLength:String(e.code??"").length}}}}if(et(Z,B)!==`@${d}`)return{success:!1,error:"Hash mismatch for insert anchor."};if(f.mode==="before"||f.mode==="start")I=Q.start;else if(f.mode==="after"||f.mode==="end")I=Q.end;else{let ae=Se?.bodyStart??null,De=Se?.bodyEnd??null;if(ae==null||De==null){let he=B.indexOf("{"),Ke=B.lastIndexOf("}");he>=0&&Ke>he&&(ae=Q.start+he+1,De=Q.start+Ke)}if(ae==null||De==null)return{success:!1,error:"Unable to resolve body span for insert anchor."};if(y==="python"&&(k=Fm(P,ae),!k))return{success:!1,error:"Unable to determine Python block indentation at body start (empty body or malformed span).",error_code:"python_indent_unresolved"};I=f.mode==="bodyStartOf"?ae:De}}else{if(d&&et(v,P)!==`@${d}`)return{success:!1,error:"Hash mismatch for insert file anchor."};f.mode==="end"||f.mode==="after"||f.mode==="bodyEndOf"?I=P.length:I=0}let L=String(e.code??"");y==="python"&&k&&(L.trim()||(L="pass"),L=Om(L,k.indent,k.newline));let j=P.slice(Math.max(0,I-1),I),z=P.slice(I,I+1),U=L.slice(0,1),K=L.slice(-1),G=Se=>/[A-Za-z0-9_$]/.test(Se),te=Se=>/\s/.test(Se),pe=Se=>/[})\];]/.test(Se),ke=Se=>/[a-z]/i.test(Se);j&&U&&!te(j)&&!te(U)&&(G(j)&&G(U)||pe(j)&&ke(U))&&(L=` ${L}`),z&&K&&!te(z)&&!te(K)&&(G(K)&&G(z)||ke(K)&&/[{([]/.test(z))&&(L=`${L} `);let re=P.slice(0,I)+L+P.slice(I);try{un(M,re)}catch(Se){return{success:!1,error:`Failed to write file: ${Se?.message||Se}`,error_code:"io_write_failed"}}if(!(e.forceInsertWillBreakSyntax===!0)){let Se=Ti(y,t.projectRoot,M);if(!Se.ok)return this.restoreNonTsFile(M,A,u),{success:!1,error:`Invalid after insertion (syntax validation failed): ${Se.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the inserted text or provide forceInsertWillBreakSyntax=true to override validation."]}}let me=zr(h,t.projectRoot),_e={changedFiles:[me],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},receipt:{replaceExisting:!1,anchor:e.to,insertedLength:L.length}};return u&&(_e.createdFiles=[me]),{success:!0,details:_e}}let b=e.batchSaves===!0,S=null,_,R,E="after",T=0,x=!1,w=0,D=0,F="",N="",C=[],O="";try{if(e.replaceExistingNodeAtPath===!0){x=!0;let re;if(typeof e.to=="string")re=String(e.to);else if(typeof e.to=="object"&&e.to){let se=e.to;if(typeof se.before=="string")re=se.before;else if(typeof se.after=="string")re=se.after;else if(typeof se.start=="string")re=se.start;else if(typeof se.end=="string")re=se.end;else return{success:!1,error:"replaceExistingNodeAtPath requires a specific target node path (before/after or direct path)"}}if(!re)return{success:!1,error:"replaceExistingNodeAtPath requires a target node path"};let W=this.resolveNodeFromPathRef(re,t,r,e.expectedHash),{sourceFile:me,node:_e,error:Se}=W;if(Se||!me||!_e)return{success:!1,error:Se||"failed to resolve target node"};let Q=_e,B=Q.getPos?.(),Z=Q.getEnd?.();if(typeof B!="number"||typeof Z!="number"||Z<B)return{success:!1,error:"failed to determine target span for replacement"};S=me,O=S.getFullText(),C=S.getPreEmitDiagnostics?.()||[],R=Q.getParent?.(),_=B,w=B,F=O.slice(0,B),N=O.slice(Z)}else{let re=this.normalizeInsertPosition(e.to,t,r);if("error"in re){let Q=String(re.error||"insert_failed"),B=/not found|Anchor not found|Container not found|Anchor requires/i.test(Q);return{success:!1,error:Q,...B?{error_code:"resolve_failed"}:{}}}typeof re.expectedHash!="string"&&(re.expectedHash=e.expectedHash);let W=!!re.anchor||typeof re.expectedHash=="string",me=W?{...e}:e;W&&(me.resolvedNodes=re.anchor?{anchor:re.anchor}:e.resolvedNodes,typeof re.expectedHash=="string"&&(me.expectedHash=re.expectedHash));let _e=this.resolvePosition(re.to,t,r,me);if("error"in _e){let Q=String(_e.error||"insert_failed"),B=/not found|Anchor not found|Container not found|Anchor requires/i.test(Q);return{success:!1,error:Q,...B?{error_code:"resolve_failed"}:{}}}R=_e.parent,T=_e.index,E=_e.anchor,S=R.getSourceFile(),O=S.getFullText(),C=S.getPreEmitDiagnostics?.()||[];let Se=this.getStatements(R);if(Se.length===0){let Q=R.getChildSyntaxList?.();Vc.Node.isSourceFile(R)?E==="end"?_=R.getEnd():E==="start"?_=R.getPos?.()??0:Q&&typeof Q.getPos=="function"?_=Q.getPos():R.getPos?_=R.getPos():_=0:Q&&typeof Q.getPos=="function"?_=Q.getPos():R.getPos?_=R.getPos():_=0}else T<=0?_=Se[0].getPos():T>=Se.length?_=Se[Se.length-1].getEnd():_=Se[T].getPos();F=O.slice(0,_),N=O.slice(_),w=_}let M=String(e.code||""),P=F.slice(-1),A=N.slice(0,1),v=M.slice(0,1),I=M.slice(-1),k=re=>/[A-Za-z0-9_$]/.test(re),$=re=>/\s/.test(re),L=re=>/[})\];]/.test(re),j=re=>/[a-z]/i.test(re);P&&v&&!$(P)&&!$(v)&&(k(P)&&k(v)||L(P)&&j(v))&&(M=` ${M}`),A&&I&&!$(A)&&!$(I)&&(k(I)&&k(A)||j(I)&&/[{([]/.test(A))&&(M=`${M} `);let z=F+M+N;if(D=w+M.length,S.replaceWithText(z),!(e.forceInsertWillBreakSyntax===!0)){let re=S.getPreEmitDiagnostics?.()||[],W=S.getPreEmitDiagnostics?.()||re,me=C.length||0;if((W.length||0)>me){try{S.replaceWithText(O)}catch{}return{success:!1,error:`Invalid after insertion (file diagnostics increased): ${W.slice(0,5).map(Q=>{try{return String(Q.getMessageText?.()||Q.getMessage?.()||Q)}catch{return"Diagnostic"}}).join("; ")}`,error_code:"would_introduce_syntax_error",hints:["The inserted text likely broke syntax or spacing. Ensure tokens are separated and the insertion point is valid.","Try inserting with surrounding whitespace or at a different anchor."]}}}let G=this.collectNodesInRange(S,w,D).map(re=>{try{return ns(re,t.projectRoot)}catch{return}}).filter(re=>!!re),te=require("path").relative(t.projectRoot,S.getFilePath()).split(Yn.default.sep).join("/"),pe={changedFiles:[te],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},receipt:{replaceExisting:x,anchor:e.to,insertedLength:M.length}};u&&(pe.createdFiles=[te]),G.length>0&&(pe.createdNodes=G.map(re=>({path:re.path,hash:re.hash,ref:re.ref,type:re.self.type,name:re.self.name,code:re.self.code})));let ke={success:!0,details:pe};if(G.length>0){let[re]=G;ke.created={node:re.ref,path:re.path,hash:re.hash,ref:re.ref,self:re.self,before:{before:re.path},after:{after:re.path}}}return b||Qn(S),ke}catch(M){try{S?.replaceWithText(O),!b&&S&&Qn(S)}catch{}return{success:!1,error:`insert failed: ${M?.message||String(M)}`}}}static normalizeInsertPosition(e,t,r){if(!e)return{error:'insert requires "to" to be an object with before/after/start/end/bodyStartOf/bodyEndOf anchors.'};if(typeof e=="string")return{to:{end:e}};let s={...e},i,o;if(s.bodyStartOf&&s.bodyEndOf)return{error:"Provide either bodyStartOf or bodyEndOf, not both."};if(typeof s.bodyStartOf=="string"){let c=this.convertBodyAnchor(s.bodyStartOf,"start",t,r);if(c.error)return{error:c.error};s.start=c.path,delete s.bodyStartOf,i=c.anchor??i,o=c.expectedHash??o}if(typeof s.bodyEndOf=="string"){let c=this.convertBodyAnchor(s.bodyEndOf,"end",t,r);if(c.error)return{error:c.error};s.end=c.path,delete s.bodyEndOf,i=c.anchor??i,o=c.expectedHash??o}return["before","after","start","end"].some(c=>typeof s[c]=="string")?{to:s,anchor:i,expectedHash:o}:{error:"insert requires an anchor (before/after/start/end)."}}static convertBodyAnchor(e,t,r,s){if(!e||typeof e!="string")return{error:"bodyStartOf/bodyEndOf requires a string path."};let i=e.includes("@")?e.split("@")[0]:e;if(i==="$MATCH")return{error:`${t==="start"?"bodyStartOf":"bodyEndOf"} with "$MATCH" is only supported in filter-map-reduce operations. Provide a concrete node path when using direct insert.`};let o=this.resolveNodeFromPathRef(i,r,s);if(o.error)return{error:o.error};let a=o.node??o.sourceFile;if(!a)return{error:`Anchor not found for ${e}`};let c;if(typeof a.getBody=="function"){let f=a.getBody();f&&Vc.Node.isBlock(f)&&(c=f)}if(c||(Vc.Node.isInterfaceDeclaration?.(a)||Vc.Node.isSourceFile(a))&&(c=a),!c)return{error:`Target specified by ${e} does not expose a block body for ${t==="start"?"bodyStartOf":"bodyEndOf"}.`};let u=_t.getNodePath(c,r.projectRoot).split("@"),d=u[0],p=u.length>1?u[1]:void 0;return{path:d,anchor:c,expectedHash:p}}static collectNodesInRange(e,t,r){let s=Math.max(0,t),i=Math.max(s,r);if(i<=s)return[];let o=[];if(e.forEachDescendant(a=>{if(!this.isReportableNode(a))return;let c=a.getStart(),l=a.getEnd();c>=s&&l<=i&&o.push(a)}),!o.length){let a=e.getDescendantAtStartWithWidth?.(s,i-s);a&&this.isReportableNode(a)&&o.push(a)}return this.filterTopLevelNodes(o)}static filterTopLevelNodes(e){if(!e.length)return[];let t=[...e].sort((s,i)=>{let o=s.getStart()-i.getStart();return o!==0?o:i.getEnd()-s.getEnd()}),r=[];for(let s of t){let i=s.getStart(),o=s.getEnd();r.some(c=>c.getStart()<=i&&c.getEnd()>=o)||r.push(s)}return r}static isReportableNode(e){if(!e||Vc.Node.isSourceFile(e))return!1;let t=e.getKindName?.();return!(t==="SyntaxList"||t==="EndOfFileToken")}static restoreNonTsFile(e,t,r){try{if(r&&Yn.default.resolve(r)===Yn.default.resolve(e)){Gi.default.rmSync(e,{force:!0});return}un(e,t)}catch{}}static resolveNodeFromPathRef(e,t,r,s){try{if(typeof e!="string"||!e.trim())return{error:"anchor path must be a non-empty string"};let[i,o]=e.split("@");if(!i.includes("#"))return{error:"replaceExistingNodeAtPath requires a concrete node path (file#nodePath)"};let a=i.indexOf("#"),c=i.slice(0,a),l=i.slice(a+1),u=Yn.default.isAbsolute(c)?c:Yn.default.join(t.projectRoot,c),d=r.getSourceFile(u)||r.addSourceFileAtPath(u);if(!d)return{error:"target file not found"};if(!l)return{sourceFile:d};let p=Pn(l,d);if(!p)return{error:"Target node not found. Call find-nodes on the target file to get current node paths, then retry insert with the correct path.",sourceFile:d};let f=typeof s=="string"&&s.trim()?s.trim():typeof o=="string"&&o.trim()?o.trim():void 0;if(f){if(f.includes("@"))return{error:"expectedHash must omit the '@' prefix"};let h=_t.getNodePath(p,t.projectRoot).split("@")[1];if(h!==f)return{error:`Hash mismatch for replacement target. Expected: @${f}, Current: @${h}. Target changed since selection.`}}return{sourceFile:d,node:p,insertAt:p.getPos?.()??0}}catch(i){return{error:i?.message||"failed to resolve target node"}}}}});var $m={};Lt($m,{ReplaceBodyExecutor:()=>hd});var md,hd,gd=ne(()=>{"use strict";md=require("ts-morph");ts();vo();Xn();Bn();od();Ea();Dm();xS();Vs();Ns();kr();Mm();hd=class extends _t{static rebuildNonTsNodePath(e,t,r){let s=e.indexOf(":");return s>=0?`${t}-${r}${e.slice(s)}`:`${t}-${r}`}static lengthInLanguageOffsets(e,t){return t&&t!=="ts"&&t!=="js"&&t!=="csharp"?Buffer.byteLength(e,"utf8"):e.length}static isClojureArityPath(e){return typeof e=="string"&&/:FunctionArity(?:@|$)/.test(e)}static restoreNonTsFile(e,t){try{un(e,t)}catch{}}static async execute(e,t,r){if(e.scope&&e.scope!=="body")return{success:!1,error:'replace scope must be "body" when using replace-body executor.'};if(!e||typeof e!="object")return{success:!1,error:"Invalid operation"};if(typeof e.path!="string"||!e.path.includes("#"))return{success:!1,error:"path is required (file#nodePath)"};if(typeof e.with!="string")return{success:!1,error:"with is required (string) and must contain only inner body content (no braces)"};if(typeof e.expectedHash!="string"||!e.expectedHash)return{success:!1,error:"expectedHash is required (string)"};let[s,i]=String(e.path).split("#"),o=s?Bt(s):null;if(o&&o!=="ts"&&o!=="js"){let R=require("path").isAbsolute(s)?require("path").resolve(s):require("path").resolve(t.projectRoot,s);if(!require("fs").existsSync(R))return{success:!1,error:`Target file not found: ${s}`};let E=Pe(R),T=i?await os(t.projectRoot,R,i,o):null,x=i?T?{start:T.start,end:T.end}:Kc(i):null;if(!x)return{success:!1,error:"Unable to resolve node span for non-TS/JS replace scope=body.",error_code:"resolve_failed"};let w=T?.text??Nt(E,x,o),D=`${zr(s,t.projectRoot)}#${i}`,F=e.expectedHash.startsWith("@")?e.expectedHash:`@${e.expectedHash}`;if(o==="clojure"){let Z=this.isClojureArityPath(i)?i:null,se=null;if(Z){if(et(D,w)!==F)return{success:!1,error:"Hash mismatch for replace scope=body arity target. Re-run find-nodes to refresh the target."}}else{let ye=Ui(t.projectRoot,R,x.start,x.end,{plainPath:D,expectedHash:F,content:w});if(!ye.target)return{success:!1,error:"Ambiguous Clojure target identity. Re-run find-nodes to refresh the target hash."};if(ye.comparison?.type!=="MATCH")return{success:!1,error:`Hash mismatch (${ye.comparison?.type??"FORMAT"}) for replace scope=body target. Re-run find-nodes to refresh the target.`};let Ve=To(t.projectRoot,s,e.path);if(Ve.length>1)return{success:!1,error:"Ambiguous Clojure replace-body target: multi-arity function bodies require an explicit arity path. Re-run find-nodes with include.arities and retry using one returned arity path.",error_code:"clojure_arity_target_required",details:{arityCount:Ve.length,arities:Ve.map(({path:bt,hash:Fn,ref:nr,arityIndex:vn,paramCount:Ot,argVector:ze,variadic:$t})=>({path:bt,hash:Fn,ref:nr,arityIndex:vn,paramCount:Ot,argVector:ze,variadic:$t}))}};se=ye.target}let ae=se?.symbolKey?Ff(t.projectRoot,R,se.symbolKey,String(e.with||"")):null;if(!ae&&i&&(ae=gb(t.projectRoot,R,i,String(e.with||""))),!ae?.content)return{success:!1,error:"Clojure replace-body failed in tool adapter."};try{un(R,ae.content)}catch(ye){return{success:!1,error:`Failed to write file: ${ye?.message||ye}`,error_code:"io_write_failed"}}if(!(e.forceReplaceWillBreakSyntax===!0)){let ye=Ti(o,t.projectRoot,R);if(!ye.ok)return this.restoreNonTsFile(R,E),{success:!1,error:`Invalid after replacement (syntax validation failed): ${ye.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the replacement text or provide forceReplaceWillBreakSyntax=true to override validation."]}}let he=zr(s,t.projectRoot),Ke=Pe(R),Ze=typeof ae.bodyStart=="number"?ae.bodyStart:typeof T?.bodyStart=="number"?T.bodyStart:null,Ye=typeof ae.bodyEnd=="number"?ae.bodyEnd:typeof T?.bodyEnd=="number"?T.bodyEnd:null,Ft=Buffer.byteLength(String(e.with||""),"utf8"),Ee=Ze!=null&&Ye!=null&&Ye>=Ze?Ye-Ze:0,rt={start:x.start,end:x.end+Ft-Ee},xe=Nt(Ke,rt,o),Me=`${he}#${this.rebuildNonTsNodePath(i,rt.start,rt.end)}`,ge=Z?et(Me,xe):Wi(Me,xe,se);return{success:!0,details:{changedFiles:[he],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},updatedTargets:[{oldRef:`${D}${F}`,newRef:`${Me}${ge}`,newHash:ge}],receipt:{path:e.path}}}}if(et(D,w)!==F)return{success:!1,error:"Hash mismatch for replace scope=body target."};let C=T?.bodyStart??null,O=T?.bodyEnd??null;if(C==null||O==null){let Z=w.indexOf("{"),se=w.lastIndexOf("}");Z>=0&&se>Z&&(C=x.start+Z+1,O=x.start+se)}if(C==null||O==null||O<C)return{success:!1,error:"target_has_no_brace_body (use replace to replace entire node)"};let M=rs(E,C,o),P=rs(E,O,o),A=E.slice(0,M),v=E.slice(P),I=String(e.with||"");if(o==="python"){let Z=Fm(E,C);if(!Z)return{success:!1,error:"Unable to determine Python block indentation at body start (empty body or malformed span).",error_code:"python_indent_unresolved"};I.trim()||(I="pass"),I=Om(I,Z.indent,Z.newline)}let k=A.slice(-1),$=v.slice(0,1),L=I.slice(0,1),j=I.slice(-1),z=Z=>/[A-Za-z0-9_$]/.test(Z),U=Z=>/\s/.test(Z),K=Z=>/[})\];]/.test(Z),G=Z=>/[a-z]/i.test(Z);k&&L&&!U(k)&&!U(L)&&(z(k)&&z(L)||K(k)&&G(L))&&(I=` ${I}`),$&&j&&!U($)&&!U(j)&&(z(j)&&z($)||G(j)&&/[{([]/.test($))&&(I=`${I} `);let te=A+I+v;try{un(R,te)}catch(Z){return{success:!1,error:`Failed to write file: ${Z?.message||Z}`,error_code:"io_write_failed"}}if(!(e.forceReplaceWillBreakSyntax===!0)){let Z=Ti(o,t.projectRoot,R);if(!Z.ok)return this.restoreNonTsFile(R,E),{success:!1,error:`Invalid after replacement (syntax validation failed): ${Z.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the replacement text or provide forceReplaceWillBreakSyntax=true to override validation."]}}let ke=zr(s,t.projectRoot),re=O-C,W=this.lengthInLanguageOffsets(I,o),me={start:x.start,end:x.end+W-re},_e=Nt(te,me,o),Se=this.rebuildNonTsNodePath(i,me.start,me.end),Q=`${ke}#${Se}`,B=et(Q,_e);return{success:!0,details:{changedFiles:[ke],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},updatedTargets:[{oldRef:`${D}${F}`,newRef:`${Q}${B}`,newHash:B}],receipt:{path:e.path}}}}let a=`${e.path}@${e.expectedHash}`,c=_t.resolvePathRef(a,r,t.projectRoot);if(!c)return{success:!1,error:"target_not_found_or_hash_mismatch",error_code:"resolve_failed"};let l=c.getSourceFile(),u=l.getFullText(),d=e.batchSaves===!0,p=l.getPreEmitDiagnostics?.()||[],f=c.getStart?.(!1)??c.getStart?.(),m=c.getEnd?.(),h=typeof c.getKind=="function"?c.getKind():void 0,g,y,b=R=>{if(!R)return;let E=l.getFullText();try{let T=R.getFirstChildByKind?.(md.SyntaxKind.OpenBraceToken)||R.getFirstDescendantByKind?.(md.SyntaxKind.OpenBraceToken),x=R.getLastChildByKind?.(md.SyntaxKind.CloseBraceToken)||R.getLastDescendantByKind?.(md.SyntaxKind.CloseBraceToken);if(T&&x){g=T.getEnd?.(),y=x.getStart?.();return}}catch{}try{let T=R.getStart?.(),x=R.getEnd?.();if(typeof T=="number"&&typeof x=="number"&&x>T){let w=E.slice(T,x),D=w.indexOf("{"),F=w.lastIndexOf("}");D>=0&&F>D&&(g=T+D+1,y=T+F)}}catch{}},S=typeof c.getBody=="function"?c.getBody():void 0;if(b(S),(g===void 0||y===void 0)&&b(c),typeof g!="number"||typeof y!="number"||y<g)return{success:!1,error:"target_has_no_brace_body (use replace to replace entire node or select a node with a Block body)"};let _=String(e.with||"");try{let R=_.replace(/\r\n|\r|\n/g,/\r\n/.test(u)?`\r
|
|
834
834
|
`:`
|
|
835
835
|
`),E=u.slice(0,g),T=u.slice(y),x=E+R+T;if(x===u)return{success:!1,error:"Replacement produced no changes (new body matches original)."};l.replaceWithText(x);let w=e.forceReplaceWillBreakSyntax===!0;if(!d&&!w){let v=l.getPreEmitDiagnostics?.()||[];if(((l.getPreEmitDiagnostics?.()||v).length||0)>(p.length||0)){try{l.replaceWithText(u)}catch{}return{success:!1,error:"Invalid after replacement (file diagnostics increased)",error_code:"would_introduce_syntax_error",hints:["If you intend to allow syntax errors, set forceReplaceWillBreakSyntax=true."]}}}let D=require("path").relative(t.projectRoot,l.getFilePath()).replace(/\\/g,"/"),F=e.path.split("@")[0],N=this.resolveUpdatedOwnerNode(l,f,h);if(!N)return{success:!1,error:"updated_target_resolution_failed",error_code:"resolve_failed",details:{path:e.path,ownerStart:f,ownerKind:h}};let C=N?ns(N,t.projectRoot):void 0,O=e.expectedHash.startsWith("@")?e.expectedHash.slice(1):e.expectedHash,M=`${F}@${O}`,P={changedFiles:[D],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},receipt:{path:e.path}};C&&(P.updatedTargets=[{oldRef:M,newRef:C.ref,newHash:C.hash}],P.updatedNode={path:C.path,hash:C.hash,ref:C.ref,type:C.self.type,name:C.self.name});let A={success:!0,details:P};return d||Qn(l),A}catch(R){try{l.replaceWithText(u),d||Qn(l)}catch{}return{success:!1,error:`replace (scope=body) failed: ${R?.message||String(R)}`}}}static resolveUpdatedOwnerNode(e,t,r){if(!e||typeof t!="number"||typeof r!="number")return;let s;return e.forEachDescendant(i=>{if(!i||typeof i.getStart!="function")return;let o=i.getStart(!1),a=typeof i.getKind=="function"?i.getKind():void 0;if(o===t&&a===r)return s=i,!1}),s}}});var jm={};Lt(jm,{ReplaceNodeExecutor:()=>yd});var yd,bd=ne(()=>{"use strict";ts();vo();Xn();Bn();od();Ea();Dm();Vs();Ns();kr();yd=class extends _t{static rebuildNonTsNodePath(e,t,r){let s=e.indexOf(":");return s>=0?`${t}-${r}${e.slice(s)}`:`${t}-${r}`}static lengthInLanguageOffsets(e,t){return t&&t!=="ts"&&t!=="js"&&t!=="csharp"?Buffer.byteLength(e,"utf8"):e.length}static restoreNonTsFile(e,t){try{un(e,t)}catch{}}static normalizeCsharpNodeReplacementIndent(e,t,r){let s=Math.max(e.lastIndexOf(`
|
|
836
|
-
`,Math.max(0,t-1))+1,0),i=e.slice(s,t);return!i||!/^[ \t]+$/.test(i)?r:r.startsWith(i)?r.slice(i.length):r}static toNonTsCharRange(e,t,r){return qc(e,t,r)}static async execute(e,t,r){if(!e||typeof e!="object")return{success:!1,error:"Invalid operation"};if(typeof e.path!="string"||!e.path.includes("#"))return{success:!1,error:"path is required (file#nodePath)"};if(typeof e.with!="string")return{success:!1,error:"with is required (string)"};if(typeof e.expectedHash!="string"||!e.expectedHash)return{success:!1,error:"expectedHash is required (string)"};let[s,i]=String(e.path).split("#"),o=s?Bt(s):null;if(o&&o!=="ts"&&o!=="js"){let h=require("path").isAbsolute(s)?require("path").resolve(s):require("path").resolve(t.projectRoot,s);if(!require("fs").existsSync(h))return{success:!1,error:`Target file not found: ${s}`};let g=Pe(h),y=i?await os(t.projectRoot,h,i,o):null,b=i?y?{start:y.start,end:y.end}:Kc(i):null;if(!b)return{success:!1,error:"Unable to resolve node span for non-TS/JS replace.",error_code:"resolve_failed"};let S=y?.text??Nt(g,b,o),_=`${Br(s,t.projectRoot)}#${i}`,R=e.expectedHash.startsWith("@")?e.expectedHash:`@${e.expectedHash}`;if(o==="clojure"){let $=Ui(t.projectRoot,h,b.start,b.end,{plainPath:_,expectedHash:R,content:S});if(!$.target)return{success:!1,error:"Ambiguous Clojure target identity. Re-run find-nodes to refresh the target hash."};if($.comparison?.type!=="MATCH")return{success:!1,error:`Hash mismatch (${$.comparison?.type??"FORMAT"}) for replace target. Re-run find-nodes to refresh the target.`};let L=$.target,j=L?.symbolKey?Dc(t.projectRoot,h,L.symbolKey,String(e.with??"")):Cu(t.projectRoot,h,i,String(e.with??""));if(!j?.content)return{success:!1,error:"Clojure replace failed in tool adapter."};try{un(h,j.content)}catch(W){return{success:!1,error:`Failed to write file: ${W?.message||W}`,error_code:"io_write_failed"}}if(!(e.forceReplaceWillBreakSyntax===!0)){let W=Ti(o,t.projectRoot,h);if(!W.ok)return this.restoreNonTsFile(h,g),{success:!1,error:`Invalid after replacement (syntax validation failed): ${W.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the replacement text or provide forceReplaceWillBreakSyntax=true to override validation."]}}let U=Br(s,t.projectRoot),K=Pe(h),G=String(e.with??""),te={start:b.start,end:b.start+Buffer.byteLength(G,"utf8")},pe=Nt(K,te,o),ke=`${U}#${this.rebuildNonTsNodePath(i,te.start,te.end)}`,re=Wi(ke,pe,L);return{success:!0,details:{changedFiles:[U],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},updatedTargets:[{oldRef:`${_}${R}`,newRef:`${ke}${re}`,newHash:re}],receipt:{path:e.path}}}}if(et(_,S)!==R)return{success:!1,error:"Hash mismatch for replace target."};let T=String(e.with??""),{start:x,end:w}=this.toNonTsCharRange(g,b,o);o==="csharp"&&(T=this.normalizeCsharpNodeReplacementIndent(g,x,T));let D=g.slice(0,x),F=g.slice(w),N=D+T+F;try{un(h,N)}catch($){return{success:!1,error:`Failed to write file: ${$?.message||$}`,error_code:"io_write_failed"}}if(!(e.forceReplaceWillBreakSyntax===!0)){let $=Ti(o,t.projectRoot,h);if(!$.ok)return this.restoreNonTsFile(h,g),{success:!1,error:`Invalid after replacement (syntax validation failed): ${$.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the replacement text or provide forceReplaceWillBreakSyntax=true to override validation."]}}let O=Br(s,t.projectRoot),M=Pe(h),P={start:b.start,end:b.start+this.lengthInLanguageOffsets(T,o)},A=Nt(M,P,o),v=this.rebuildNonTsNodePath(i,P.start,P.end),I=`${O}#${v}`,k=et(I,A);return{success:!0,details:{changedFiles:[O],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},updatedTargets:[{oldRef:`${_}${R}`,newRef:`${I}${k}`,newHash:k}],receipt:{path:e.path}}}}let a=`${e.path}@${e.expectedHash}`,c=_t.resolvePathRef(a,r,t.projectRoot);if(!c)try{let h=String(e.path),g=h.split("#")[0],y=h.split("#")[1]||"",b=r.getSourceFile(g)||r.addSourceFileAtPath(require("path").isAbsolute(g)?g:require("path").join(t.projectRoot,g));return(b?(Hi(),be(Fb)).resolvePositionPath(y,b):null)?{success:!1,error:"Hash mismatch: the node exists but its hash has changed (likely due to a prior edit).",error_code:"hash_mismatch_or_stale_path",hints:["IMPORTANT: Call find-nodes again on this file to get the updated path and expectedHash, then retry replace with the NEW hash.","Every edit changes node hashes. Always re-find nodes after any modification before using replace."]}:{success:!1,error:"Reference node not found: the specified node path does not exist in the current file.",error_code:"resolve_failed",hints:["IMPORTANT: Call find-nodes on the target file to discover current node paths, then retry with the correct path.","If the file was recently edited, node positions may have shifted. Re-run find-nodes to get fresh paths."]}}catch{return{success:!1,error:"Target not found or hash mismatch.",error_code:"resolve_failed",hints:["IMPORTANT: Call find-nodes on the target file to get current node paths and hashes, then retry."]}}let l=c.getSourceFile(),u=l.getFullText(),d=l.getPreEmitDiagnostics?.()||[],p=e.batchSaves===!0,f=c.getStart?.(),m=c.getEnd?.();if(typeof f!="number"||typeof m!="number"||m<f)return{success:!1,error:"unable_to_compute_node_region"};try{let h=u.slice(0,f),g=u.slice(m),y=String(e.with||""),b=f,S=b+y.length,_=h+y+g;if(_===u)return{success:!1,error:"Replacement produced no changes (new text matches original)."};l.replaceWithText(_);let R=e.forceReplaceWillBreakSyntax===!0;if(!p&&!R){let C=l.getPreEmitDiagnostics?.()||[];if(((l.getPreEmitDiagnostics?.()||C).length||0)>(d.length||0)){try{l.replaceWithText(u)}catch{}return{success:!1,error:"Invalid after replacement (file diagnostics increased)",error_code:"would_introduce_syntax_error",hints:["The replacement likely broke syntax or spacing. Verify tokens are separated (e.g., avoid merging keywords/identifiers).","Fetch current node text via find-nodes include.body to build a whitespace-preserving replacement.","If you intend to allow syntax errors, set forceReplaceWillBreakSyntax=true."]}}}let E=require("path").relative(t.projectRoot,l.getFilePath()).replace(/\\/g,"/"),T=typeof e.path=="string"?e.path.split("@")[0]:e.path,x=_t.resolvePathRef(T,r,t.projectRoot)||this.findReplacementNode(l,b,S),w=x?ns(x,t.projectRoot):void 0,D=e.expectedHash.startsWith("@")?e.expectedHash.slice(1):e.expectedHash,F={changedFiles:[E],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},receipt:{path:e.path}};w&&(F.updatedTargets=[{oldRef:`${T}@${D}`,newRef:w.ref,newHash:w.hash}],F.updatedNode={path:w.path,hash:w.hash,ref:w.ref,type:w.self.type,name:w.self.name});let N={success:!0,details:F};return p||Qn(l),N}catch(h){try{l.replaceWithText(u),p||Qn(l)}catch{}return{success:!1,error:`replace failed: ${h?.message||String(h)}`}}}static findReplacementNode(e,t,r){if(!e||t>=r)return;let s;return e.forEachDescendant(i=>{if(!this.isReportableNode(i))return;let o=i.getStart(),a=i.getEnd();o>=t&&a<=r&&(!s||a-o>s.getEnd()-s.getStart())&&(s=i)}),s}static isReportableNode(e){if(!e)return!1;let t=e.getKindName?.();return t!=="SyntaxList"&&t!=="EndOfFileToken"}}});var rC={};Lt(rC,{FilterMapReduceExecutor:()=>Lm});function _B(n,e,t,r){return{op:"find-nodes",scope:{files:[dn.default.isAbsolute(e)?dn.default.relative(n,e).replace(/\\/g,"/"):e]},datalog:{query:"[:find ?n :in $ ?name ?type :where [?n :node/name ?name] [?n :node/type ?type]]",bindings:["?n"],inputs:[t,r],result:{nodeVar:"?n"}},page:{limit:5,cursor:null}}}function wB(n){return{lang:n.lang,snapshot:n.snapshot,scope:n.scope,prefilter:n.prefilter,datalog:n.datalog?{query:n.datalog.query,bindings:n.datalog.bindings,inputsCount:Array.isArray(n.datalog.inputs)?n.datalog.inputs.length:0,nodeVar:n.datalog.result?.nodeVar,columns:n.datalog.result?.columns}:void 0,page:n.page}}function vB(n){return JSON.parse(JSON.stringify(n||{}))}var dn,Er,Lm,_S=ne(()=>{"use strict";dn=q(require("path")),Er=require("ts-morph");SS();fd();vo();Hi();ts();fS();wS();Jp();kr();Xn();Lm=class n{static async execute(e,t,r){let s=new Set;try{let i=e.query||{},o=Array.isArray(e.transforms)?e.transforms.map(B=>{let Z=B;if(typeof Z=="string")try{Z=JSON.parse(Z)}catch{return Z}return!Z||typeof Z!="object"?Z:Z.op==="add-code"?{...Z,op:"insert"}:Z.op==="replace-body"?{...Z,op:"replace",scope:"body"}:Z}):[],a=e.apply||{},c=a.stopOnFirstFailure===!0,l=a.batchSaves!==!1,u=typeof a.failureThreshold=="number"?a.failureThreshold:void 0,d=typeof a.failureRate=="number"?a.failureRate:void 0,p=a.markFailures==="in-code"?"in-code":"report-only",f=typeof a.maxDurationMs=="number"?a.maxDurationMs:void 0,m=typeof a.maxMatches=="number"&&a.maxMatches>0?Math.floor(a.maxMatches):void 0,h=typeof a.pageSize=="number"&&a.pageSize>0?Math.floor(a.pageSize):void 0;if(!o.length)return{success:!1,error:"transforms[] is required (1..500)"};if(o.length>500)return{success:!1,error:"transforms[] exceeds maximum of 500"};if("expectedHash"in e||"expectedHashes"in e)return{success:!1,error:"filter-map-reduce does NOT accept expectedHash or expectedHashes. Remove all hash fields from the request; this operation derives hashes automatically from matched nodes.",details:{reason:"unexpected_hash_parameter",suggestion:"Do not pass expectedHash or expectedHashes to filter-map-reduce. Select nodes with query and let the operation derive hashes from each match."},warnings:["filter-map-reduce is hashless for callers: do not provide expectedHash or expectedHashes anywhere in the request."],hints:["Remove top-level expectedHash / expectedHashes fields.","Remove expectedHash / expectedHashes from every transform.","Use query + $MATCH / $LABEL / $CREATED anchors instead."]};for(let B=0;B<o.length;B++){let Z=o[B],se=typeof Z?.op=="string"?String(Z.op):void 0;if(!se)return{success:!1,error:`Invalid transform structure at index ${B}: missing 'op' (string).`,details:{transformIndex:B,reason:"invalid_transform_shape",suggestion:"Provide op:'insert' or op:'delete' with supported fields (e.g., path:'$MATCH' or anchors)."}};if("expectedHash"in Z||"expectedHashes"in Z)return{success:!1,error:`Transform at index ${B} must not include expectedHash or expectedHashes. filter-map-reduce does NOT require hashes from the caller; it derives every hash automatically from matches.`,details:{transformIndex:B,reason:"unexpected_expectedHash",suggestion:"Remove all hash fields from this transform. Use $MATCH / $LABEL / $CREATED references only; filter-map-reduce supplies hashes automatically."},warnings:["filter-map-reduce never needs caller-supplied hashes in transforms."],hints:["Delete expectedHash / expectedHashes from this transform.","Keep only op/path/of/to/code/with/scope/force* fields as needed."]};if(se==="insert"&&typeof Z.replaceExistingNodeAtPath!="boolean")return{success:!1,error:`Invalid transform structure at index ${B}: 'replaceExistingNodeAtPath' is required (boolean) for insert`,details:{transformIndex:B,reason:"invalid_transform_shape",suggestion:"Provide replaceExistingNodeAtPath:true|false explicitly."}};if(se==="add")return{success:!1,error:"'add' is no longer supported in FMR. Use op:'insert' with fields { to, code }.",details:{transformIndex:B,reason:"op_deprecated"}};if(se==="delete"&&("where"in Z||"find"in Z))return{success:!1,error:"Invalid transform structure: 'delete' does not support 'where' or 'find'.",details:{transformIndex:B,reason:"invalid_transform_shape",suggestion:"To delete a child node, target it directly: (1) make your query match the child kind (e.g., type:'ThrowStatement') and then use delete with path:'$MATCH'; or (2) anchor to the exact child path using before/after/start/end relative to $MATCH and delete that explicit path."}}}if(typeof e.dryRun<"u")return{success:!1,error:"Please use restore-snapshot after any operation to undo it"};let g=i&&typeof i.page=="object"&&!Array.isArray(i.page)?{...i.page}:{},y=typeof g.limit=="number"&&g.limit>0?Math.floor(g.limit):10,b=Math.max(1,Math.min(h??y,100)),S=typeof g.cursor=="string"?String(g.cursor):null,_=m??y,R=[];for(;_>0;){let B=Math.min(b,_),{limit:Z,offset:se,cursor:ae,asOf:De,...he}=i,Ke={...he,op:"find-nodes",page:{...g,limit:B,cursor:S}},Ze=await Da.execute(Ke,t,r);if(!Ze||!Ze.success)return Ze;let Ye=Ze.items||Ze.results||[];if(!Ye.length)break;let Ft=Math.min(Ye.length,_);if(R.push(...Ye.slice(0,Ft)),_-=Ft,S=typeof Ze.page?.cursor=="string"?String(Ze.page.cursor):null,!(Ft<Ye.length?!0:Ze.page?.hasMore===!0)||_<=0)break;if(!S)return{success:!1,error:"filter-map-reduce paging failed: find-nodes reported more results without returning a cursor."}}let E=new Map;for(let B=0;B<R.length;B++){let Z=R[B],se=String(Z?.path||""),ae=se.includes("#")?se.split("#")[0]:se;E.has(ae)||E.set(ae,[]),E.get(ae).push({item:Z,origIndex:B})}let T=[];for(let[,B]of E)B.sort((Z,se)=>{let ae=String(Z.item?.path||""),De=String(se.item?.path||""),he=ae.split("#")[1]||"",Ke=De.split("#")[1]||"",Ze=parseInt((he.split(":")[0]||"").split("-")[0]||"0",10),Ye=parseInt((Ke.split(":")[0]||"").split("-")[0]||"0",10);return(isNaN(Ye)?0:Ye)-(isNaN(Ze)?0:Ze)}),T.push(...B);s=new Set;let x=new Map,w=new Set,D=new Set,F=0,N=null,C=[],O={},M={legitimate:0,engine:0},P=5,A=Date.now(),v=new Set(["invalid_match_path","file_not_found","node_not_found","anchor_not_resolved","target_not_found","reference_node_not_found","span_mismatch"]),I=(B,Z,se,ae,De,he)=>{let Ke=v.has(ae)?"resolve_failed":void 0,Ze={index:B,matchPath:Z,transformIndex:se,reason:ae,category:De,detail:he,error_code:Ke};C.push(Ze),N=Ze,O[ae]||(O[ae]={count:0,samples:[]});let Ye=O[ae];Ye.count++,Ye.samples.length<P&&Ye.samples.push({matchPath:Z,transformIndex:se,category:De}),De&&(M[De]=(M[De]||0)+1)},k=B=>{let Z=Date.now()-A;return!!(c||typeof u=="number"&&C.length>u||typeof d=="number"&&B>0&&C.length/B>d||typeof f=="number"&&Z>f)},$=B=>{let Z=dn.default.relative(t.projectRoot,B.getFilePath()).replace(/\\/g,"/");l?(x.set(Z,B),s.add(Z)):(Qn(B),s.add(Z))},L=R.length,j=m!==void 0&&_<=0;for(let B=0;B<T.length;B++){let Z=T[B].item,se=T[B].origIndex,ae=Z?.path;if(typeof ae!="string"||!ae.includes("#")){if(I(se,String(ae||""),-1,"invalid_match_path"),k(B+1))break;continue}let De=an(ae,t.projectRoot);if(!!(De?.lang&&De.lang!=="ts"&&De.lang!=="js")){let Ot=!0,ze=[],$t=new Map,Kt=zr(ae),Je=Kt.path,wt=Kt.hash||String(Z?.hash||"").replace(/^@/,""),xt=ft=>{if(typeof ft!="string")return;let de=ft.trim();if(de==="$MATCH")return{pathOnly:Je,hashNoAt:wt};if(de.startsWith("$LABEL(")&&de.endsWith(")")){let We=de.slice(7,-1).trim();return $t.get(We)}if(de.startsWith("$CREATED[")&&de.endsWith("]")){let We=de.slice(9,-1).trim(),ve=parseInt(We,10);return isNaN(ve)?void 0:(ve<0&&(ve=ze.length+ve),ze[ve])}let Ae=zr(de);if(!(!Ae.path||!Ae.path.includes("#")))return{pathOnly:Ae.path,hashNoAt:Ae.hash}};for(let ft=0;ft<o.length;ft++){let de=o[ft];try{if(de.op==="insert"){let Ae={...de.to||{}},We=["before","after","start","end","bodyStartOf","bodyEndOf"];for(let yn of We)if(typeof Ae[yn]=="string"){let Ws=xt(Ae[yn]);Ws?.pathOnly&&(Ae[yn]=Ws.pathOnly)}let ve=["before","after","start","end","bodyStartOf","bodyEndOf"].find(yn=>typeof Ae[yn]=="string");if(!ve)throw new Error("anchor_not_resolved");let Ge=xt(Ae[ve])?.hashNoAt||wt;if(!Ge)throw new Error("hash_mismatch");let Be={op:"insert",to:Ae,code:de.code,replaceExistingNodeAtPath:!!de.replaceExistingNodeAtPath,expectedHash:Ge};typeof de.forceInsertWillBreakSyntax=="boolean"&&(Be.forceInsertWillBreakSyntax=de.forceInsertWillBreakSyntax),typeof de.createFileIfMissing=="boolean"&&(Be.createFileIfMissing=de.createFileIfMissing),typeof de.newFileInitialContent=="string"&&(Be.newFileInitialContent=de.newFileInitialContent),l&&(Be.batchSaves=!0);let vt=await Ji.execute(Be,t,r);if(!vt||!vt.success)throw new Error(vt?.error||"transform_failed");let Rn=Array.isArray(vt.details?.changedFiles)?vt.details.changedFiles:[];for(let yn of Rn)s.add(yn),l&&w.add(yn);let On=vt.created;if(On&&typeof On.path=="string"){let yn=String(On.path),Ws=String(On.hash||"").replace(/^@/,"");ze.push({pathOnly:yn,hashNoAt:Ws});let yr=String(de.label||"").trim();yr&&$t.set(yr,{pathOnly:yn,hashNoAt:Ws})}continue}if(de.op==="replace"){let Ae=xt(de.path||de.of||"$MATCH");if(!Ae?.pathOnly||!Ae.hashNoAt)throw new Error("target_not_found");let We={op:"replace",path:Ae.pathOnly,with:de.with,expectedHash:Ae.hashNoAt};if(de.scope&&(We.scope=de.scope),typeof de.forceReplaceWillBreakSyntax=="boolean"&&(We.forceReplaceWillBreakSyntax=de.forceReplaceWillBreakSyntax),l&&(We.batchSaves=!0),de.scope==="body"){let{ReplaceBodyExecutor:ve}=(gd(),be($m)),Ne=await ve.execute(We,t,r);if(!Ne||!Ne.success)throw new Error(Ne?.error||"replace_body_failed");let Ge=Array.isArray(Ne.details?.changedFiles)?Ne.details.changedFiles:[];for(let Be of Ge)s.add(Be),l&&w.add(Be)}else{let{ReplaceNodeExecutor:ve}=(bd(),be(jm)),Ne=await ve.execute(We,t,r);if(!Ne||!Ne.success)throw new Error(Ne?.error||"replace_failed");let Ge=Array.isArray(Ne.details?.changedFiles)?Ne.details.changedFiles:[];for(let Be of Ge)s.add(Be),l&&w.add(Be)}continue}if(de.op==="rename"){let Ae=xt(de.path||de.of||"$MATCH");if(!Ae?.pathOnly||!Ae.hashNoAt)throw new Error("target_not_found");let We={op:"rename",path:Ae.pathOnly,newName:de.newName,expectedHash:Ae.hashNoAt};l&&(We.batchSaves=!0);let ve=await Eo.execute(We,t,r);if(!ve||!ve.success)throw new Error(ve?.error||"rename_failed");let Ne=Array.isArray(ve.details?.changedFiles)?ve.details.changedFiles:[];for(let Be of Ne)s.add(Be),l&&w.add(Be);let Ge=ve.details?.updatedTargets?.[0];if(Ge&&Ae.pathOnly===Je&&typeof Ge.newRef=="string"){let Be=zr(String(Ge.newRef));Be.path&&(Je=Be.path),Be.hash&&(wt=Be.hash)}continue}if(de.op==="delete"){let Ae=xt(de.path||de.of||"$MATCH");if(!Ae?.pathOnly||!Ae.hashNoAt)throw new Error("target_not_found");let We={op:"delete",path:[Ae.pathOnly],expectedHashes:[Ae.hashNoAt],forceDeleteReferencesMayBreakSyntax:de.forceDeleteReferencesMayBreakSyntax!==!1};l&&(We.batchSaves=!0);let ve=await Ro.execute(We,t,r);if(!ve||!ve.success)throw new Error(ve?.error||"delete_failed");let Ne=Array.isArray(ve.details?.changedFiles)?ve.details.changedFiles:[];for(let Be of Ne)s.add(Be),l&&w.add(Be);let Ge=ve.details?.deletedFilesCandidates;Array.isArray(Ge)&&Ge.forEach(Be=>D.add(Be)),Ae.pathOnly===Je&&(wt="");continue}throw new Error(`unsupported_transform_op:${String(de.op)}`)}catch(Ae){let We=String(Ae?.message||"error");I(se,ae,ft,We,"engine"),Ot=!1;break}}if(Ot)F++;else if(k(B+1))break;continue}let[Ke,Ze]=ae.split("#"),Ye=typeof Ze=="string"?Ze.split("@")[0]:Ze,Ft=dn.default.isAbsolute(Ke)?Ke:dn.default.join(t.projectRoot,Ke),Ee=r.getSourceFile(Ft)||r.addSourceFileAtPath(Ft);if(!Ee){if(I(se,ae,-1,"file_not_found"),k(B+1))break;continue}let rt=Ye,xe=Pn(rt,Ee);if(!xe){if(I(se,ae,-1,"node_not_found","engine","Initial resolve failed for match (position drift or invalid path)"),k(B+1))break;continue}let Me=_t.getNodePath(xe,t.projectRoot),ge=Me.split("@")[0],ye=Me.split("@")[1],Ve=!0,bt=[],Fn=new Map,nr=Ot=>{if(typeof Ot!="string")return;let ze=Ot.trim();if(ze.startsWith("$LABEL(")&&ze.endsWith(")")){let $t=ze.slice(7,-1).trim();return Fn.get($t)}if(ze.startsWith("$CREATED[")&&ze.endsWith("]")){let $t=ze.slice(9,-1).trim(),Kt=parseInt($t,10);return isNaN(Kt)?void 0:(Kt<0&&(Kt=bt.length+Kt),bt[Kt])}},vn={};for(let Ot=0;Ot<o.length;Ot++){let ze=o[Ot];try{let $t=Pn(rt,Ee);if($t||($t=Pn(Ye,Ee)),!$t)try{let Je=(rt||Ye||"").split("@")[0],wt=Je.lastIndexOf(":");if(wt>0){let xt=Je.substring(0,wt),ft=Je.substring(wt+1),de=xt.indexOf("-"),Ae=parseInt(xt.substring(0,de),10);if(!isNaN(Ae)){let ve=Ee.getDescendantAtPos?.(Ae),Ne;try{Ne=(vs(),be(uk)).Abbrev.getKindFromAbbrev(ft)}catch{}for(;ve;){if(!Ne||String(ve.getKindName?.()||"")===Ne){$t=ve;break}ve=ve.getParent?.()}}}}catch{}let Kt=!1;if(!$t)try{let Je=vn.renamed?.newName||(typeof Z?.name=="string"?Z.name:void 0),wt=typeof Z?.type=="string"?Z.type:void 0;if(Je&&wt){let xt=_B(t.projectRoot,Ke,Je,wt),ft=await Da.execute(xt,t,r),de=ft&&(ft.items||ft.results)?ft.items||ft.results:[];if(de.length===1){let Ae=String(de[0].path||""),[We,ve]=Ae.split("#"),Ne=typeof ve=="string"?ve.split("@")[0]:ve,Ge=dn.default.isAbsolute(We)?We:dn.default.join(t.projectRoot,We),Be=Ee.getFilePath()===Ge?Ee:r.getSourceFile(Ge)||r.addSourceFileAtPath(Ge);if(Be&&Ne){let vt=Pn(Ne,Be);if(vt){$t=vt;let Rn=_t.getNodePath($t,t.projectRoot);Me=Rn,ge=Rn.split("@")[0],ye=Rn.split("@")[1];try{rt=ge.split("#")[1]||rt}catch{}}}}else if(de.length>1)try{let Ae=xe,We=Ne=>!!(Ne&&(Ne.getKindName?.()==="ClassDeclaration"||Ne.getKindName?.()==="InterfaceDeclaration"||Ne.getKindName?.()==="SourceFile"||Ne.getKindName?.()==="ModuleDeclaration"));for(;Ae&&!We(Ae);)Ae=Ae.getParent?.();let ve=[];for(let Ne of de)try{let Ge=String(Ne.path||""),[Be,vt]=Ge.split("#"),Rn=typeof vt=="string"?vt.split("@")[0]:vt,On=dn.default.isAbsolute(Be)?Be:dn.default.join(t.projectRoot,Be),yn=Ee.getFilePath()===On?Ee:r.getSourceFile(On)||r.addSourceFileAtPath(On);if(!yn||!Rn)continue;let Ws=Rn?Pn(Rn,yn):void 0;if(!Ws)continue;let yr=Ws;for(;yr&&!We(yr);)yr=yr.getParent?.();Ae&&yr&&yr.getKindName?.()===Ae.getKindName?.()&&ve.push({r:Ne,nn:Ws})}catch{}if(ve.length===1){$t=ve[0].nn;let Ge=_t.getNodePath($t,t.projectRoot);Me=Ge,ge=Ge.split("@")[0],ye=Ge.split("@")[1];try{rt=ge.split("#")[1]||rt}catch{}}else Kt=!0}catch{Kt=!0}}}catch{}if(!$t){let Je="node_not_found";try{typeof xe?.wasForgotten=="function"&&xe.wasForgotten()?Je="ast_invalidated_external":Kt&&(Je="ambiguous_refind")}catch{}if(p==="in-code")try{n.insertFailureMarker(xe,Ee,"$$$TRANSFORM_FAILED$$$",Je),$(Ee)}catch{}if(vn.deleted)I(se,ae,Ot,"target_deleted","legitimate","Target was deleted by a previous transform");else if(vn.renamed){let wt=vn.renamed;I(se,ae,Ot,"target_renamed","legitimate",`Target renamed from '${wt?.oldName||"old"}' to '${wt?.newName||"new"}' by a previous transform`)}else Je==="ambiguous_refind"?I(se,ae,Ot,Je,"legitimate","Multiple candidates found in file; re-find is ambiguous"):Je==="ast_invalidated_external"?I(se,ae,Ot,Je,"engine","AST invalidated by external edits; updatedTargets unavailable"):I(se,ae,Ot,Je,"engine","Re-resolution failed; likely position drift");Ve=!1;break}xe=$t,Me=_t.getNodePath(xe,t.projectRoot),ge=Me.split("@")[0],ye=Me.split("@")[1];try{rt=ge.split("#")[1]||rt}catch{}if(ze.op==="insert"){let Je={...ze.to};try{if(typeof Je.bodyStartOf=="string"){let Ge=nr(Je.bodyStartOf);Ge?.pathOnly&&(Je.start=Ge.pathOnly,delete Je.bodyStartOf)}if(typeof Je.bodyEndOf=="string"){let Ge=nr(Je.bodyEndOf);Ge?.pathOnly&&(Je.end=Ge.pathOnly,delete Je.bodyEndOf)}let Ne=["before","after","start","end"];for(let Ge of Ne)if(typeof Je[Ge]=="string"){let Be=nr(Je[Ge]);Be?.pathOnly&&(Je[Ge]=Be.pathOnly)}}catch{}let{toObj:wt,anchor:xt,error:ft}=n.computeAnchor(Je,xe,Ee,t.projectRoot,r);if(ft&&ft)throw new Error(ft);if(!xt){I(se,ae,Ot,"structure_incompatible","legitimate","Anchor requires Block body but node has no Block"),Ve=!1;break}let de={...ze},We=_t.getNodePath(xt,t.projectRoot).split("@")[1];de.expectedHash=We,de.to=wt,xt&&(de.resolvedNodes={anchor:xt}),l&&(de.batchSaves=!0),typeof de.code=="string"&&(de.code=n.ensureBlockInsertionFormatting(de.code,xt,wt,t.projectRoot));let ve=await Ji.execute(de,t,r);if(!ve||!ve.success)throw new Error(ve?.error||"transform_failed");try{let Ne=ve.created;if(Ne&&typeof Ne.path=="string"){let Ge=String(Ne.path),Be=String(Ne.hash||"").startsWith("@")?String(Ne.hash).slice(1):Ne.hash;bt.push({pathOnly:Ge,hashNoAt:Be});let vt=ze.label;typeof vt=="string"&&vt.trim()&&Fn.set(vt.trim(),{pathOnly:Ge,hashNoAt:Be})}}catch{}$(Ee);try{let Ne=ze.to||{};if(Ne?.before==="$MATCH"||Ne?.start==="$MATCH"||Ne?.after==="$MATCH"||Ne?.end==="$MATCH"||Ne?.bodyStartOf==="$MATCH"||Ne?.bodyEndOf==="$MATCH"){let Be=_t.getNodePath(xe,t.projectRoot);Me=Be,ge=Be.split("@")[0],ye=Be.split("@")[1];try{rt=ge.split("#")[1]||rt}catch{}}}catch{}continue}if(ze.op==="replace"){let Je=ge,wt=ye,xt=ze.path||ze.of||"$MATCH";if(typeof xt=="string"&&xt!=="$MATCH"){let de=nr(xt);if(de&&de.pathOnly)Je=de.pathOnly,de.hashNoAt&&(wt=de.hashNoAt);else{let[Ae,We]=xt.split("#"),ve=typeof We=="string"?We.split("@")[0]:We,Ne=dn.default.isAbsolute(Ae)?Ae:dn.default.join(t.projectRoot,Ae),Ge=r.getSourceFile(Ne)||r.addSourceFileAtPath(Ne),Be=ve?Ge?Pn(ve,Ge):void 0:Ge;if(!Be)throw new Error("target_not_found");let vt=_t.getNodePath(Be,t.projectRoot);Je=vt.split("@")[0],wt=vt.split("@")[1]}}let ft={op:"replace",path:Je,with:ze.with};if(ze.scope&&(ft.scope=ze.scope),typeof ze.forceReplaceWillBreakSyntax=="boolean"&&(ft.forceReplaceWillBreakSyntax=ze.forceReplaceWillBreakSyntax),ft.expectedHash=wt,l&&(ft.batchSaves=!0),ze.scope==="body"){let{ReplaceBodyExecutor:de}=(gd(),be($m)),Ae=await de.execute(ft,t,r);if(!Ae||!Ae.success)throw new Error(Ae?.error||"replace_body_failed");let We=Array.isArray(Ae.details?.changedFiles)?Ae.details.changedFiles:[];for(let ve of We)s.add(ve),l&&w.add(ve)}else{let{ReplaceNodeExecutor:de}=(bd(),be(jm)),Ae=await de.execute(ft,t,r);if(!Ae||!Ae.success)throw new Error(Ae?.error||"replace_failed");let We=Array.isArray(Ae.details?.changedFiles)?Ae.details.changedFiles:[];for(let ve of We)s.add(ve),l&&w.add(ve)}$(Ee);continue}if(ze.op==="rename"){let Je=ge,wt=ye,xt=ze.path||ze.of||"$MATCH";if(typeof xt=="string"&&xt!=="$MATCH"){let[We,ve]=xt.split("#"),Ne=typeof ve=="string"?ve.split("@")[0]:ve,Ge=dn.default.isAbsolute(We)?We:dn.default.join(t.projectRoot,We),Be=r.getSourceFile(Ge)||r.addSourceFileAtPath(Ge),vt=Ne?Be?Pn(Ne,Be):void 0:Be;if(!vt)throw new Error("target_not_found");try{if(Er.Node.isArrowFunction?.(vt)||Er.Node.isFunctionExpression?.(vt)){I(se,ae,Ot,"unrenameable_target","legitimate","Arrow/function expression has no renameable identifier; rename its binding instead"),Ve=!1;break}}catch{}let Rn=_t.getNodePath(vt,t.projectRoot);Je=Rn.split("@")[0],wt=Rn.split("@")[1]}else try{if(Er.Node.isArrowFunction?.(xe)||Er.Node.isFunctionExpression?.(xe)){I(se,ae,Ot,"unrenameable_target","legitimate","Arrow/function expression has no renameable identifier; rename its binding instead"),Ve=!1;break}}catch{}let ft={op:"rename",path:Je,newName:ze.newName};ft.expectedHash=wt,l&&(ft.batchSaves=!0);let de=await Eo.execute(ft,t,r);if(!de||!de.success)throw new Error(de?.error||"rename_failed");try{vn.renamed={oldName:String(Z?.name||""),newName:String(ze.newName||"")}}catch{}let Ae=Array.isArray(de.details?.changedFiles)?de.details.changedFiles:[];for(let We of Ae)s.add(We),l&&w.add(We);try{let We=de.details?.updatedTargets?.[0];if(We&&typeof We.newRef=="string"){let ve=We.newRef;try{let yn=ve.split("#")[1]||"";yn.includes("@")&&console.log(`[FMR] updatedTargets.newRef nodePart contains '@' (rename): ${yn.slice(0,80)}\u2026`)}catch{}let[Ne,Ge]=ve.split("#"),Be=(Ge||"").split("@")[0],vt=dn.default.isAbsolute(Ne)?Ne:dn.default.join(t.projectRoot,Ne),Rn=Ee.getFilePath()===vt?Ee:r.getSourceFile(vt)||r.addSourceFileAtPath(vt),On=Be&&Rn?Pn(Be,Rn):void 0;if(On){xe=On,ge=ve.split("@")[0],ye=String(We.newHash||"");try{rt=Be||rt}catch{}}}}catch{}continue}if(ze.op==="delete"){let Je=ge,wt=ye,xt=ze.path||ze.of||"$MATCH";if(typeof xt=="string"&&xt!=="$MATCH"){let ve=nr(xt);if(ve&&ve.pathOnly)Je=ve.pathOnly,ve.hashNoAt&&(wt=ve.hashNoAt);else{let[Ne,Ge]=xt.split("#"),Be=typeof Ge=="string"?Ge.split("@")[0]:Ge,vt=dn.default.isAbsolute(Ne)?Ne:dn.default.join(t.projectRoot,Ne),Rn=r.getSourceFile(vt)||r.addSourceFileAtPath(vt),On=Be?Rn?Pn(Be,Rn):void 0:Rn;if(!On)throw new Error("target_not_found");let yn=_t.getNodePath(On,t.projectRoot);Je=yn.split("@")[0],wt=yn.split("@")[1]}}let ft={op:"delete",path:[Je],expectedHashes:[wt],forceDeleteReferencesMayBreakSyntax:ze.forceDeleteReferencesMayBreakSyntax!==!1};l&&(ft.batchSaves=!0);let de=await Ro.execute(ft,t,r);if(!de||!de.success)throw new Error(de?.error||"delete_failed");vn.deleted=!0;let Ae=Array.isArray(de.details?.changedFiles)?de.details.changedFiles:[];for(let ve of Ae)s.add(ve);let We=de.details?.deletedFilesCandidates;Array.isArray(We)&&We.forEach(ve=>D.add(ve));continue}throw"where"in ze||"find"in ze?new Error("invalid_transform_shape: 'where'/'find' are not supported in transforms. For delete, match the child node in the query (e.g., type:'ThrowStatement') and delete path:'$MATCH'."):new Error(`unsupported_transform_op:${String(ze.op)}`)}catch($t){let Kt=String($t?.message||"error");if(p==="in-code")try{n.insertFailureMarker(xe,Ee,"$$$TRANSFORM_FAILED$$$",Kt),$(Ee)}catch{}Kt==="no_function_body"?I(se,ae,Ot,"structure_incompatible","legitimate","Anchor requires Block body but node has no Block"):I(se,ae,Ot,Kt,"engine"),Ve=!1;break}}if(!Ve){let Ot=B+1;if(k(Ot))break}Ve&&F++}if(l){let B=Date.now(),Z=x.size,se=D.size,ae=s.size;(qn(),be(Yr)).logger.info("[Batch] Flush start",{dirty:Z,deferredDeletes:se,changedBefore:ae});let De=Date.now();for(let[,rt]of x)rt.saveSync();(qn(),be(Yr)).logger.info("[Batch] Flush stage: save-dirty",{ms:Date.now()-De,dirty:Z});let he=require("fs"),{touchFileWithTimestamp:Ke,touchFilesWithTimestamp:Ze}=(vo(),be(CP)),Ye=[],Ft=Date.now();for(let rt of Array.from(D)){let xe=dn.default.isAbsolute(rt)?rt:dn.default.join(t.projectRoot,rt);he.existsSync(xe)&&he.unlinkSync(xe);let Me=r.getSourceFile(xe);Me&&r.removeSourceFile(Me),Ye.push(rt),s.delete(rt)}(qn(),be(Yr)).logger.info("[Batch] Flush stage: delete",{ms:Date.now()-Ft,deleted:Ye.length});let Ee=Date.now();if(s.size>0){let rt=Array.from(s).map(xe=>dn.default.isAbsolute(xe)?xe:dn.default.join(t.projectRoot,xe));try{Ze(rt)}catch{for(let xe of rt)try{Ke(xe)}catch{}}}(qn(),be(Yr)).logger.info("[Batch] Flush stage: touch",{ms:Date.now()-Ee,touched:s.size}),Ye.length>0&&(a.__deletedFilesFinal=Ye),(qn(),be(Yr)).logger.info("[Batch] Flush done",{ms:Date.now()-B,changedAfter:s.size,deleted:Ye.length})}let z=Array.from(s),U=Number(e.apply?.page?.limit??e.page?.limit??5),K=Number(e.apply?.page?.offset??e.page?.offset??0),G=Math.max(0,K),te=Math.max(1,Math.min(100,U)),pe=z.length,ke=z.slice(G,G+te),re=G+ke.length<pe,W=C.length>0?`Applied to ${F}/${L} locations (${L?Math.round(F/L*100):0}% success); Files: ${s.size}`:`Applied to ${F} location(s); Files: ${s.size}`;j&&m!==void 0&&(W+=` (stopped after reaching maxMatches=${m})`);let me={op:"filter-map-reduce",querySummary:wB(i),succeededCount:F,failedAt:N||void 0,changedFiles:z,processedCount:L,maxMatches:m,truncatedByMax:j||void 0},_e=()=>{let B={succeeded:F,failed:C.length,failuresByReason:O,failuresByCategory:M},Z={no_function_body:"Arrow/abstract have no body. Filter for hasBody:true.",anchor_not_resolved:"Target position not found. Verify selector/anchor.",transform_failed:"Template/structure invalid. Check syntax/bindings.",hash_mismatch:"Target changed. Re-resolve and retry.",unexpected_expectedHash:"filter-map-reduce does NOT accept caller-supplied hashes. Remove expectedHash / expectedHashes entirely; hashes are derived automatically from matches.",ts_program_error:"TS program invalid. Check tsconfig or path mapping.",module_resolution_error:"Module not resolved. Check paths/aliases.",delete_requires_force:"Set forceDeleteReferencesMayBreakSyntax to proceed."};try{let ae=Object.keys(O||{}),De={};for(let he of ae)Z[he]&&(De[he]=Z[he]);Object.keys(De).length&&(B.hints=De)}catch{}let se={};try{se["AST-Op"]="filter-map-reduce"}catch{}try{se["AST-Receipt"]=JSON.stringify(me)}catch{}try{se["AST-Report"]=JSON.stringify(B)}catch{}try{se["AST-Query"]=JSON.stringify(vB(i))}catch{}try{let ae=o.map(De=>({op:De.op,nodeType:De.nodeType,action:De.action,to:De.to?"[pos]":void 0})).slice(0,20);se["AST-Transforms"]=JSON.stringify(ae)}catch{}return se};(qn(),be(Yr)).logger.info("[Batch] Transforms complete",{changedFiles:s.size,failures:C.length});let Se=s.size===0&&F>0&&C.length===0,Q={success:s.size>0||Se,changes:{summary:W,count:s.size},details:{succeededCount:F,failedCount:C.length,partial:C.length>0,noop:Se||void 0,failures:C.length?C:void 0,failedAt:N||void 0,changedFiles:ke,changedFilesPage:{totalCount:pe,limit:te,offset:G,hasMore:re},receipt:me,trailers:_e()}};if(l){Q.details.changedFiles=z;let B=a.__deletedFilesFinal;Array.isArray(B)&&B.length&&(Q.details.deletedFiles=B)}if(!Q.success){let B=N,Z=C[0];B?.reason==="unexpected_expectedHash"||Z?.reason==="unexpected_expectedHash"?Q.error="filter-map-reduce failed: remove expectedHash / expectedHashes. This operation does NOT take hashes from the caller; it derives them automatically from matches.":B?.reason?Q.error=`filter-map-reduce failed: ${B.reason}`:Z?.reason?Q.error=`filter-map-reduce failed: ${Z.reason}`:L===0?Q.error="filter-map-reduce matched no nodes.":Q.error="filter-map-reduce produced no changes."}return Q}catch(i){try{let o=Array.from(s||[]),a=String(i?.message||"unknown error");return{success:!1,error:a.includes("expectedHash")?"filter-map-reduce failed: remove expectedHash / expectedHashes. This operation does NOT take hashes from the caller; it derives them automatically from matches.":`filter-map-reduce failed: ${a}`,details:{changedFiles:o}}}catch{let o=String(i?.message||"unknown error");return{success:!1,error:o.includes("expectedHash")?"filter-map-reduce failed: remove expectedHash / expectedHashes. This operation does NOT take hashes from the caller; it derives them automatically from matches.":`filter-map-reduce failed: ${o}`}}}}static bindAnchor(e,t,r,s){if(e.bodyStartOf==="$MATCH"){let o=t.getBody?.();return o&&Er.Node.isBlock(o)?{start:_t.getNodePath(o,s).split("@")[0]}:Er.Node.isInterfaceDeclaration?.(t)?{start:_t.getNodePath(t,s).split("@")[0]}:{error:"no_function_body"}}if(e.bodyEndOf==="$MATCH"){let o=t.getBody?.();return o&&Er.Node.isBlock(o)?{end:_t.getNodePath(o,s).split("@")[0]}:Er.Node.isInterfaceDeclaration?.(t)?{end:_t.getNodePath(t,s).split("@")[0]}:{error:"no_function_body"}}let i=_t.getNodePath(t,s).split("@")[0];return e.before==="$MATCH"?{before:i}:e.after==="$MATCH"?{after:i}:e.start==="$MATCH"?{start:i}:e.end==="$MATCH"?{end:i}:e}static computeAnchor(e,t,r,s,i){if(e.bodyStartOf==="$MATCH"){let l=t.getBody?.();return l&&Er.Node.isBlock(l)?{toObj:{start:_t.getNodePath(l,s).split("@")[0]},anchor:l}:Er.Node.isInterfaceDeclaration?.(t)?{toObj:{start:_t.getNodePath(t,s).split("@")[0]},anchor:t}:{toObj:{start:""},error:"no_function_body"}}if(e.bodyEndOf==="$MATCH"){let l=t.getBody?.();return l&&Er.Node.isBlock(l)?{toObj:{end:_t.getNodePath(l,s).split("@")[0]},anchor:l}:Er.Node.isInterfaceDeclaration?.(t)?{toObj:{end:_t.getNodePath(t,s).split("@")[0]},anchor:t}:{toObj:{end:""},error:"no_function_body"}}let o=_t.getNodePath(t,s).split("@")[0];if(e.before==="$MATCH")return{toObj:{before:o},anchor:t};if(e.after==="$MATCH")return{toObj:{after:o},anchor:t};if(e.start==="$MATCH")return{toObj:{start:o},anchor:t};if(e.end==="$MATCH")return{toObj:{end:o},anchor:t};let a=e,c=["before","after","start","end"];for(let l of c)if(a[l]&&typeof a[l]=="string"){let u=a[l],[d,p]=u.split("#"),f=typeof p=="string"?p.split("@")[0]:p,m=dn.default.isAbsolute(d)?d:dn.default.join(s||"",d),h;try{h=r.getFilePath()===m?r:i.getSourceFile(m)||i.addSourceFileAtPath(m)}catch{h=void 0}let g=f?h?Pn(f,h):void 0:h;return g?{toObj:e,anchor:g}:{toObj:e,error:"anchor_not_found"}}return{toObj:e,anchor:t}}static ensureBlockInsertionFormatting(e,t,r,s){if(!t||!Er.Node.isBlock(t)||!r||typeof r!="object")return e;let i=typeof r.start=="string"?r.start:typeof r.end=="string"?r.end:null;if(!i)return e;let o=_t.getNodePath(t,s).split("@")[0];if(i!==o)return e;let a=t.getSourceFile(),l=a.getFullText().includes(`\r
|
|
836
|
+
`,Math.max(0,t-1))+1,0),i=e.slice(s,t);return!i||!/^[ \t]+$/.test(i)?r:r.startsWith(i)?r.slice(i.length):r}static toNonTsCharRange(e,t,r){return qc(e,t,r)}static async execute(e,t,r){if(!e||typeof e!="object")return{success:!1,error:"Invalid operation"};if(typeof e.path!="string"||!e.path.includes("#"))return{success:!1,error:"path is required (file#nodePath)"};if(typeof e.with!="string")return{success:!1,error:"with is required (string)"};if(typeof e.expectedHash!="string"||!e.expectedHash)return{success:!1,error:"expectedHash is required (string)"};let[s,i]=String(e.path).split("#"),o=s?Bt(s):null;if(o&&o!=="ts"&&o!=="js"){let h=require("path").isAbsolute(s)?require("path").resolve(s):require("path").resolve(t.projectRoot,s);if(!require("fs").existsSync(h))return{success:!1,error:`Target file not found: ${s}`};let g=Pe(h),y=i?await os(t.projectRoot,h,i,o):null,b=i?y?{start:y.start,end:y.end}:Kc(i):null;if(!b)return{success:!1,error:"Unable to resolve node span for non-TS/JS replace.",error_code:"resolve_failed"};let S=y?.text??Nt(g,b,o),_=`${zr(s,t.projectRoot)}#${i}`,R=e.expectedHash.startsWith("@")?e.expectedHash:`@${e.expectedHash}`;if(o==="clojure"){let $=Ui(t.projectRoot,h,b.start,b.end,{plainPath:_,expectedHash:R,content:S});if(!$.target)return{success:!1,error:"Ambiguous Clojure target identity. Re-run find-nodes to refresh the target hash."};if($.comparison?.type!=="MATCH")return{success:!1,error:`Hash mismatch (${$.comparison?.type??"FORMAT"}) for replace target. Re-run find-nodes to refresh the target.`};let L=$.target,j=L?.symbolKey?Dc(t.projectRoot,h,L.symbolKey,String(e.with??"")):Cu(t.projectRoot,h,i,String(e.with??""));if(!j?.content)return{success:!1,error:"Clojure replace failed in tool adapter."};try{un(h,j.content)}catch(W){return{success:!1,error:`Failed to write file: ${W?.message||W}`,error_code:"io_write_failed"}}if(!(e.forceReplaceWillBreakSyntax===!0)){let W=Ti(o,t.projectRoot,h);if(!W.ok)return this.restoreNonTsFile(h,g),{success:!1,error:`Invalid after replacement (syntax validation failed): ${W.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the replacement text or provide forceReplaceWillBreakSyntax=true to override validation."]}}let U=zr(s,t.projectRoot),K=Pe(h),G=String(e.with??""),te={start:b.start,end:b.start+Buffer.byteLength(G,"utf8")},pe=Nt(K,te,o),ke=`${U}#${this.rebuildNonTsNodePath(i,te.start,te.end)}`,re=Wi(ke,pe,L);return{success:!0,details:{changedFiles:[U],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},updatedTargets:[{oldRef:`${_}${R}`,newRef:`${ke}${re}`,newHash:re}],receipt:{path:e.path}}}}if(et(_,S)!==R)return{success:!1,error:"Hash mismatch for replace target."};let T=String(e.with??""),{start:x,end:w}=this.toNonTsCharRange(g,b,o);o==="csharp"&&(T=this.normalizeCsharpNodeReplacementIndent(g,x,T));let D=g.slice(0,x),F=g.slice(w),N=D+T+F;try{un(h,N)}catch($){return{success:!1,error:`Failed to write file: ${$?.message||$}`,error_code:"io_write_failed"}}if(!(e.forceReplaceWillBreakSyntax===!0)){let $=Ti(o,t.projectRoot,h);if(!$.ok)return this.restoreNonTsFile(h,g),{success:!1,error:`Invalid after replacement (syntax validation failed): ${$.error||"unknown error"}`,error_code:"validation_failed",hints:["Fix the replacement text or provide forceReplaceWillBreakSyntax=true to override validation."]}}let O=zr(s,t.projectRoot),M=Pe(h),P={start:b.start,end:b.start+this.lengthInLanguageOffsets(T,o)},A=Nt(M,P,o),v=this.rebuildNonTsNodePath(i,P.start,P.end),I=`${O}#${v}`,k=et(I,A);return{success:!0,details:{changedFiles:[O],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},updatedTargets:[{oldRef:`${_}${R}`,newRef:`${I}${k}`,newHash:k}],receipt:{path:e.path}}}}let a=`${e.path}@${e.expectedHash}`,c=_t.resolvePathRef(a,r,t.projectRoot);if(!c)try{let h=String(e.path),g=h.split("#")[0],y=h.split("#")[1]||"",b=r.getSourceFile(g)||r.addSourceFileAtPath(require("path").isAbsolute(g)?g:require("path").join(t.projectRoot,g));return(b?(Hi(),be(Fb)).resolvePositionPath(y,b):null)?{success:!1,error:"Hash mismatch: the node exists but its hash has changed (likely due to a prior edit).",error_code:"hash_mismatch_or_stale_path",hints:["IMPORTANT: Call find-nodes again on this file to get the updated path and expectedHash, then retry replace with the NEW hash.","Every edit changes node hashes. Always re-find nodes after any modification before using replace."]}:{success:!1,error:"Reference node not found: the specified node path does not exist in the current file.",error_code:"resolve_failed",hints:["IMPORTANT: Call find-nodes on the target file to discover current node paths, then retry with the correct path.","If the file was recently edited, node positions may have shifted. Re-run find-nodes to get fresh paths."]}}catch{return{success:!1,error:"Target not found or hash mismatch.",error_code:"resolve_failed",hints:["IMPORTANT: Call find-nodes on the target file to get current node paths and hashes, then retry."]}}let l=c.getSourceFile(),u=l.getFullText(),d=l.getPreEmitDiagnostics?.()||[],p=e.batchSaves===!0,f=c.getStart?.(),m=c.getEnd?.();if(typeof f!="number"||typeof m!="number"||m<f)return{success:!1,error:"unable_to_compute_node_region"};try{let h=u.slice(0,f),g=u.slice(m),y=String(e.with||""),b=f,S=b+y.length,_=h+y+g;if(_===u)return{success:!1,error:"Replacement produced no changes (new text matches original)."};l.replaceWithText(_);let R=e.forceReplaceWillBreakSyntax===!0;if(!p&&!R){let C=l.getPreEmitDiagnostics?.()||[];if(((l.getPreEmitDiagnostics?.()||C).length||0)>(d.length||0)){try{l.replaceWithText(u)}catch{}return{success:!1,error:"Invalid after replacement (file diagnostics increased)",error_code:"would_introduce_syntax_error",hints:["The replacement likely broke syntax or spacing. Verify tokens are separated (e.g., avoid merging keywords/identifiers).","Fetch current node text via find-nodes include.body to build a whitespace-preserving replacement.","If you intend to allow syntax errors, set forceReplaceWillBreakSyntax=true."]}}}let E=require("path").relative(t.projectRoot,l.getFilePath()).replace(/\\/g,"/"),T=typeof e.path=="string"?e.path.split("@")[0]:e.path,x=_t.resolvePathRef(T,r,t.projectRoot)||this.findReplacementNode(l,b,S),w=x?ns(x,t.projectRoot):void 0,D=e.expectedHash.startsWith("@")?e.expectedHash.slice(1):e.expectedHash,F={changedFiles:[E],changedFilesPage:{totalCount:1,limit:10,offset:0,hasMore:!1},receipt:{path:e.path}};w&&(F.updatedTargets=[{oldRef:`${T}@${D}`,newRef:w.ref,newHash:w.hash}],F.updatedNode={path:w.path,hash:w.hash,ref:w.ref,type:w.self.type,name:w.self.name});let N={success:!0,details:F};return p||Qn(l),N}catch(h){try{l.replaceWithText(u),p||Qn(l)}catch{}return{success:!1,error:`replace failed: ${h?.message||String(h)}`}}}static findReplacementNode(e,t,r){if(!e||t>=r)return;let s;return e.forEachDescendant(i=>{if(!this.isReportableNode(i))return;let o=i.getStart(),a=i.getEnd();o>=t&&a<=r&&(!s||a-o>s.getEnd()-s.getStart())&&(s=i)}),s}static isReportableNode(e){if(!e)return!1;let t=e.getKindName?.();return t!=="SyntaxList"&&t!=="EndOfFileToken"}}});var rC={};Lt(rC,{FilterMapReduceExecutor:()=>Lm});function _B(n,e,t,r){return{op:"find-nodes",scope:{files:[dn.default.isAbsolute(e)?dn.default.relative(n,e).replace(/\\/g,"/"):e]},datalog:{query:"[:find ?n :in $ ?name ?type :where [?n :node/name ?name] [?n :node/type ?type]]",bindings:["?n"],inputs:[t,r],result:{nodeVar:"?n"}},page:{limit:5,cursor:null}}}function wB(n){return{lang:n.lang,snapshot:n.snapshot,scope:n.scope,prefilter:n.prefilter,datalog:n.datalog?{query:n.datalog.query,bindings:n.datalog.bindings,inputsCount:Array.isArray(n.datalog.inputs)?n.datalog.inputs.length:0,nodeVar:n.datalog.result?.nodeVar,columns:n.datalog.result?.columns}:void 0,page:n.page}}function vB(n){return JSON.parse(JSON.stringify(n||{}))}var dn,Er,Lm,_S=ne(()=>{"use strict";dn=q(require("path")),Er=require("ts-morph");SS();fd();vo();Hi();ts();fS();wS();Jp();kr();Xn();Lm=class n{static async execute(e,t,r){let s=new Set;try{let i=e.query||{},o=Array.isArray(e.transforms)?e.transforms.map(B=>{let Z=B;if(typeof Z=="string")try{Z=JSON.parse(Z)}catch{return Z}return!Z||typeof Z!="object"?Z:Z.op==="add-code"?{...Z,op:"insert"}:Z.op==="replace-body"?{...Z,op:"replace",scope:"body"}:Z}):[],a=e.apply||{},c=a.stopOnFirstFailure===!0,l=a.batchSaves!==!1,u=typeof a.failureThreshold=="number"?a.failureThreshold:void 0,d=typeof a.failureRate=="number"?a.failureRate:void 0,p=a.markFailures==="in-code"?"in-code":"report-only",f=typeof a.maxDurationMs=="number"?a.maxDurationMs:void 0,m=typeof a.maxMatches=="number"&&a.maxMatches>0?Math.floor(a.maxMatches):void 0,h=typeof a.pageSize=="number"&&a.pageSize>0?Math.floor(a.pageSize):void 0;if(!o.length)return{success:!1,error:"transforms[] is required (1..500)"};if(o.length>500)return{success:!1,error:"transforms[] exceeds maximum of 500"};if("expectedHash"in e||"expectedHashes"in e)return{success:!1,error:"filter-map-reduce does NOT accept expectedHash or expectedHashes. Remove all hash fields from the request; this operation derives hashes automatically from matched nodes.",details:{reason:"unexpected_hash_parameter",suggestion:"Do not pass expectedHash or expectedHashes to filter-map-reduce. Select nodes with query and let the operation derive hashes from each match."},warnings:["filter-map-reduce is hashless for callers: do not provide expectedHash or expectedHashes anywhere in the request."],hints:["Remove top-level expectedHash / expectedHashes fields.","Remove expectedHash / expectedHashes from every transform.","Use query + $MATCH / $LABEL / $CREATED anchors instead."]};for(let B=0;B<o.length;B++){let Z=o[B],se=typeof Z?.op=="string"?String(Z.op):void 0;if(!se)return{success:!1,error:`Invalid transform structure at index ${B}: missing 'op' (string).`,details:{transformIndex:B,reason:"invalid_transform_shape",suggestion:"Provide op:'insert' or op:'delete' with supported fields (e.g., path:'$MATCH' or anchors)."}};if("expectedHash"in Z||"expectedHashes"in Z)return{success:!1,error:`Transform at index ${B} must not include expectedHash or expectedHashes. filter-map-reduce does NOT require hashes from the caller; it derives every hash automatically from matches.`,details:{transformIndex:B,reason:"unexpected_expectedHash",suggestion:"Remove all hash fields from this transform. Use $MATCH / $LABEL / $CREATED references only; filter-map-reduce supplies hashes automatically."},warnings:["filter-map-reduce never needs caller-supplied hashes in transforms."],hints:["Delete expectedHash / expectedHashes from this transform.","Keep only op/path/of/to/code/with/scope/force* fields as needed."]};if(se==="insert"&&typeof Z.replaceExistingNodeAtPath!="boolean")return{success:!1,error:`Invalid transform structure at index ${B}: 'replaceExistingNodeAtPath' is required (boolean) for insert`,details:{transformIndex:B,reason:"invalid_transform_shape",suggestion:"Provide replaceExistingNodeAtPath:true|false explicitly."}};if(se==="add")return{success:!1,error:"'add' is no longer supported in FMR. Use op:'insert' with fields { to, code }.",details:{transformIndex:B,reason:"op_deprecated"}};if(se==="delete"&&("where"in Z||"find"in Z))return{success:!1,error:"Invalid transform structure: 'delete' does not support 'where' or 'find'.",details:{transformIndex:B,reason:"invalid_transform_shape",suggestion:"To delete a child node, target it directly: (1) make your query match the child kind (e.g., type:'ThrowStatement') and then use delete with path:'$MATCH'; or (2) anchor to the exact child path using before/after/start/end relative to $MATCH and delete that explicit path."}}}if(typeof e.dryRun<"u")return{success:!1,error:"Please use restore-snapshot after any operation to undo it"};let g=i&&typeof i.page=="object"&&!Array.isArray(i.page)?{...i.page}:{},y=typeof g.limit=="number"&&g.limit>0?Math.floor(g.limit):10,b=Math.max(1,Math.min(h??y,100)),S=typeof g.cursor=="string"?String(g.cursor):null,_=m??y,R=[];for(;_>0;){let B=Math.min(b,_),{limit:Z,offset:se,cursor:ae,asOf:De,...he}=i,Ke={...he,op:"find-nodes",page:{...g,limit:B,cursor:S}},Ze=await Da.execute(Ke,t,r);if(!Ze||!Ze.success)return Ze;let Ye=Ze.items||Ze.results||[];if(!Ye.length)break;let Ft=Math.min(Ye.length,_);if(R.push(...Ye.slice(0,Ft)),_-=Ft,S=typeof Ze.page?.cursor=="string"?String(Ze.page.cursor):null,!(Ft<Ye.length?!0:Ze.page?.hasMore===!0)||_<=0)break;if(!S)return{success:!1,error:"filter-map-reduce paging failed: find-nodes reported more results without returning a cursor."}}let E=new Map;for(let B=0;B<R.length;B++){let Z=R[B],se=String(Z?.path||""),ae=se.includes("#")?se.split("#")[0]:se;E.has(ae)||E.set(ae,[]),E.get(ae).push({item:Z,origIndex:B})}let T=[];for(let[,B]of E)B.sort((Z,se)=>{let ae=String(Z.item?.path||""),De=String(se.item?.path||""),he=ae.split("#")[1]||"",Ke=De.split("#")[1]||"",Ze=parseInt((he.split(":")[0]||"").split("-")[0]||"0",10),Ye=parseInt((Ke.split(":")[0]||"").split("-")[0]||"0",10);return(isNaN(Ye)?0:Ye)-(isNaN(Ze)?0:Ze)}),T.push(...B);s=new Set;let x=new Map,w=new Set,D=new Set,F=0,N=null,C=[],O={},M={legitimate:0,engine:0},P=5,A=Date.now(),v=new Set(["invalid_match_path","file_not_found","node_not_found","anchor_not_resolved","target_not_found","reference_node_not_found","span_mismatch"]),I=(B,Z,se,ae,De,he)=>{let Ke=v.has(ae)?"resolve_failed":void 0,Ze={index:B,matchPath:Z,transformIndex:se,reason:ae,category:De,detail:he,error_code:Ke};C.push(Ze),N=Ze,O[ae]||(O[ae]={count:0,samples:[]});let Ye=O[ae];Ye.count++,Ye.samples.length<P&&Ye.samples.push({matchPath:Z,transformIndex:se,category:De}),De&&(M[De]=(M[De]||0)+1)},k=B=>{let Z=Date.now()-A;return!!(c||typeof u=="number"&&C.length>u||typeof d=="number"&&B>0&&C.length/B>d||typeof f=="number"&&Z>f)},$=B=>{let Z=dn.default.relative(t.projectRoot,B.getFilePath()).replace(/\\/g,"/");l?(x.set(Z,B),s.add(Z)):(Qn(B),s.add(Z))},L=R.length,j=m!==void 0&&_<=0;for(let B=0;B<T.length;B++){let Z=T[B].item,se=T[B].origIndex,ae=Z?.path;if(typeof ae!="string"||!ae.includes("#")){if(I(se,String(ae||""),-1,"invalid_match_path"),k(B+1))break;continue}let De=an(ae,t.projectRoot);if(!!(De?.lang&&De.lang!=="ts"&&De.lang!=="js")){let Ot=!0,ze=[],$t=new Map,Kt=Lr(ae),Je=Kt.path,wt=Kt.hash||String(Z?.hash||"").replace(/^@/,""),xt=ft=>{if(typeof ft!="string")return;let de=ft.trim();if(de==="$MATCH")return{pathOnly:Je,hashNoAt:wt};if(de.startsWith("$LABEL(")&&de.endsWith(")")){let We=de.slice(7,-1).trim();return $t.get(We)}if(de.startsWith("$CREATED[")&&de.endsWith("]")){let We=de.slice(9,-1).trim(),ve=parseInt(We,10);return isNaN(ve)?void 0:(ve<0&&(ve=ze.length+ve),ze[ve])}let Ae=Lr(de);if(!(!Ae.path||!Ae.path.includes("#")))return{pathOnly:Ae.path,hashNoAt:Ae.hash}};for(let ft=0;ft<o.length;ft++){let de=o[ft];try{if(de.op==="insert"){let Ae={...de.to||{}},We=["before","after","start","end","bodyStartOf","bodyEndOf"];for(let yn of We)if(typeof Ae[yn]=="string"){let Ws=xt(Ae[yn]);Ws?.pathOnly&&(Ae[yn]=Ws.pathOnly)}let ve=["before","after","start","end","bodyStartOf","bodyEndOf"].find(yn=>typeof Ae[yn]=="string");if(!ve)throw new Error("anchor_not_resolved");let Ge=xt(Ae[ve])?.hashNoAt||wt;if(!Ge)throw new Error("hash_mismatch");let Be={op:"insert",to:Ae,code:de.code,replaceExistingNodeAtPath:!!de.replaceExistingNodeAtPath,expectedHash:Ge};typeof de.forceInsertWillBreakSyntax=="boolean"&&(Be.forceInsertWillBreakSyntax=de.forceInsertWillBreakSyntax),typeof de.createFileIfMissing=="boolean"&&(Be.createFileIfMissing=de.createFileIfMissing),typeof de.newFileInitialContent=="string"&&(Be.newFileInitialContent=de.newFileInitialContent),l&&(Be.batchSaves=!0);let vt=await Ji.execute(Be,t,r);if(!vt||!vt.success)throw new Error(vt?.error||"transform_failed");let Rn=Array.isArray(vt.details?.changedFiles)?vt.details.changedFiles:[];for(let yn of Rn)s.add(yn),l&&w.add(yn);let On=vt.created;if(On&&typeof On.path=="string"){let yn=String(On.path),Ws=String(On.hash||"").replace(/^@/,"");ze.push({pathOnly:yn,hashNoAt:Ws});let yr=String(de.label||"").trim();yr&&$t.set(yr,{pathOnly:yn,hashNoAt:Ws})}continue}if(de.op==="replace"){let Ae=xt(de.path||de.of||"$MATCH");if(!Ae?.pathOnly||!Ae.hashNoAt)throw new Error("target_not_found");let We={op:"replace",path:Ae.pathOnly,with:de.with,expectedHash:Ae.hashNoAt};if(de.scope&&(We.scope=de.scope),typeof de.forceReplaceWillBreakSyntax=="boolean"&&(We.forceReplaceWillBreakSyntax=de.forceReplaceWillBreakSyntax),l&&(We.batchSaves=!0),de.scope==="body"){let{ReplaceBodyExecutor:ve}=(gd(),be($m)),Ne=await ve.execute(We,t,r);if(!Ne||!Ne.success)throw new Error(Ne?.error||"replace_body_failed");let Ge=Array.isArray(Ne.details?.changedFiles)?Ne.details.changedFiles:[];for(let Be of Ge)s.add(Be),l&&w.add(Be)}else{let{ReplaceNodeExecutor:ve}=(bd(),be(jm)),Ne=await ve.execute(We,t,r);if(!Ne||!Ne.success)throw new Error(Ne?.error||"replace_failed");let Ge=Array.isArray(Ne.details?.changedFiles)?Ne.details.changedFiles:[];for(let Be of Ge)s.add(Be),l&&w.add(Be)}continue}if(de.op==="rename"){let Ae=xt(de.path||de.of||"$MATCH");if(!Ae?.pathOnly||!Ae.hashNoAt)throw new Error("target_not_found");let We={op:"rename",path:Ae.pathOnly,newName:de.newName,expectedHash:Ae.hashNoAt};l&&(We.batchSaves=!0);let ve=await Eo.execute(We,t,r);if(!ve||!ve.success)throw new Error(ve?.error||"rename_failed");let Ne=Array.isArray(ve.details?.changedFiles)?ve.details.changedFiles:[];for(let Be of Ne)s.add(Be),l&&w.add(Be);let Ge=ve.details?.updatedTargets?.[0];if(Ge&&Ae.pathOnly===Je&&typeof Ge.newRef=="string"){let Be=Lr(String(Ge.newRef));Be.path&&(Je=Be.path),Be.hash&&(wt=Be.hash)}continue}if(de.op==="delete"){let Ae=xt(de.path||de.of||"$MATCH");if(!Ae?.pathOnly||!Ae.hashNoAt)throw new Error("target_not_found");let We={op:"delete",path:[Ae.pathOnly],expectedHashes:[Ae.hashNoAt],forceDeleteReferencesMayBreakSyntax:de.forceDeleteReferencesMayBreakSyntax!==!1};l&&(We.batchSaves=!0);let ve=await Ro.execute(We,t,r);if(!ve||!ve.success)throw new Error(ve?.error||"delete_failed");let Ne=Array.isArray(ve.details?.changedFiles)?ve.details.changedFiles:[];for(let Be of Ne)s.add(Be),l&&w.add(Be);let Ge=ve.details?.deletedFilesCandidates;Array.isArray(Ge)&&Ge.forEach(Be=>D.add(Be)),Ae.pathOnly===Je&&(wt="");continue}throw new Error(`unsupported_transform_op:${String(de.op)}`)}catch(Ae){let We=String(Ae?.message||"error");I(se,ae,ft,We,"engine"),Ot=!1;break}}if(Ot)F++;else if(k(B+1))break;continue}let[Ke,Ze]=ae.split("#"),Ye=typeof Ze=="string"?Ze.split("@")[0]:Ze,Ft=dn.default.isAbsolute(Ke)?Ke:dn.default.join(t.projectRoot,Ke),Ee=r.getSourceFile(Ft)||r.addSourceFileAtPath(Ft);if(!Ee){if(I(se,ae,-1,"file_not_found"),k(B+1))break;continue}let rt=Ye,xe=Pn(rt,Ee);if(!xe){if(I(se,ae,-1,"node_not_found","engine","Initial resolve failed for match (position drift or invalid path)"),k(B+1))break;continue}let Me=_t.getNodePath(xe,t.projectRoot),ge=Me.split("@")[0],ye=Me.split("@")[1],Ve=!0,bt=[],Fn=new Map,nr=Ot=>{if(typeof Ot!="string")return;let ze=Ot.trim();if(ze.startsWith("$LABEL(")&&ze.endsWith(")")){let $t=ze.slice(7,-1).trim();return Fn.get($t)}if(ze.startsWith("$CREATED[")&&ze.endsWith("]")){let $t=ze.slice(9,-1).trim(),Kt=parseInt($t,10);return isNaN(Kt)?void 0:(Kt<0&&(Kt=bt.length+Kt),bt[Kt])}},vn={};for(let Ot=0;Ot<o.length;Ot++){let ze=o[Ot];try{let $t=Pn(rt,Ee);if($t||($t=Pn(Ye,Ee)),!$t)try{let Je=(rt||Ye||"").split("@")[0],wt=Je.lastIndexOf(":");if(wt>0){let xt=Je.substring(0,wt),ft=Je.substring(wt+1),de=xt.indexOf("-"),Ae=parseInt(xt.substring(0,de),10);if(!isNaN(Ae)){let ve=Ee.getDescendantAtPos?.(Ae),Ne;try{Ne=(vs(),be(uk)).Abbrev.getKindFromAbbrev(ft)}catch{}for(;ve;){if(!Ne||String(ve.getKindName?.()||"")===Ne){$t=ve;break}ve=ve.getParent?.()}}}}catch{}let Kt=!1;if(!$t)try{let Je=vn.renamed?.newName||(typeof Z?.name=="string"?Z.name:void 0),wt=typeof Z?.type=="string"?Z.type:void 0;if(Je&&wt){let xt=_B(t.projectRoot,Ke,Je,wt),ft=await Da.execute(xt,t,r),de=ft&&(ft.items||ft.results)?ft.items||ft.results:[];if(de.length===1){let Ae=String(de[0].path||""),[We,ve]=Ae.split("#"),Ne=typeof ve=="string"?ve.split("@")[0]:ve,Ge=dn.default.isAbsolute(We)?We:dn.default.join(t.projectRoot,We),Be=Ee.getFilePath()===Ge?Ee:r.getSourceFile(Ge)||r.addSourceFileAtPath(Ge);if(Be&&Ne){let vt=Pn(Ne,Be);if(vt){$t=vt;let Rn=_t.getNodePath($t,t.projectRoot);Me=Rn,ge=Rn.split("@")[0],ye=Rn.split("@")[1];try{rt=ge.split("#")[1]||rt}catch{}}}}else if(de.length>1)try{let Ae=xe,We=Ne=>!!(Ne&&(Ne.getKindName?.()==="ClassDeclaration"||Ne.getKindName?.()==="InterfaceDeclaration"||Ne.getKindName?.()==="SourceFile"||Ne.getKindName?.()==="ModuleDeclaration"));for(;Ae&&!We(Ae);)Ae=Ae.getParent?.();let ve=[];for(let Ne of de)try{let Ge=String(Ne.path||""),[Be,vt]=Ge.split("#"),Rn=typeof vt=="string"?vt.split("@")[0]:vt,On=dn.default.isAbsolute(Be)?Be:dn.default.join(t.projectRoot,Be),yn=Ee.getFilePath()===On?Ee:r.getSourceFile(On)||r.addSourceFileAtPath(On);if(!yn||!Rn)continue;let Ws=Rn?Pn(Rn,yn):void 0;if(!Ws)continue;let yr=Ws;for(;yr&&!We(yr);)yr=yr.getParent?.();Ae&&yr&&yr.getKindName?.()===Ae.getKindName?.()&&ve.push({r:Ne,nn:Ws})}catch{}if(ve.length===1){$t=ve[0].nn;let Ge=_t.getNodePath($t,t.projectRoot);Me=Ge,ge=Ge.split("@")[0],ye=Ge.split("@")[1];try{rt=ge.split("#")[1]||rt}catch{}}else Kt=!0}catch{Kt=!0}}}catch{}if(!$t){let Je="node_not_found";try{typeof xe?.wasForgotten=="function"&&xe.wasForgotten()?Je="ast_invalidated_external":Kt&&(Je="ambiguous_refind")}catch{}if(p==="in-code")try{n.insertFailureMarker(xe,Ee,"$$$TRANSFORM_FAILED$$$",Je),$(Ee)}catch{}if(vn.deleted)I(se,ae,Ot,"target_deleted","legitimate","Target was deleted by a previous transform");else if(vn.renamed){let wt=vn.renamed;I(se,ae,Ot,"target_renamed","legitimate",`Target renamed from '${wt?.oldName||"old"}' to '${wt?.newName||"new"}' by a previous transform`)}else Je==="ambiguous_refind"?I(se,ae,Ot,Je,"legitimate","Multiple candidates found in file; re-find is ambiguous"):Je==="ast_invalidated_external"?I(se,ae,Ot,Je,"engine","AST invalidated by external edits; updatedTargets unavailable"):I(se,ae,Ot,Je,"engine","Re-resolution failed; likely position drift");Ve=!1;break}xe=$t,Me=_t.getNodePath(xe,t.projectRoot),ge=Me.split("@")[0],ye=Me.split("@")[1];try{rt=ge.split("#")[1]||rt}catch{}if(ze.op==="insert"){let Je={...ze.to};try{if(typeof Je.bodyStartOf=="string"){let Ge=nr(Je.bodyStartOf);Ge?.pathOnly&&(Je.start=Ge.pathOnly,delete Je.bodyStartOf)}if(typeof Je.bodyEndOf=="string"){let Ge=nr(Je.bodyEndOf);Ge?.pathOnly&&(Je.end=Ge.pathOnly,delete Je.bodyEndOf)}let Ne=["before","after","start","end"];for(let Ge of Ne)if(typeof Je[Ge]=="string"){let Be=nr(Je[Ge]);Be?.pathOnly&&(Je[Ge]=Be.pathOnly)}}catch{}let{toObj:wt,anchor:xt,error:ft}=n.computeAnchor(Je,xe,Ee,t.projectRoot,r);if(ft&&ft)throw new Error(ft);if(!xt){I(se,ae,Ot,"structure_incompatible","legitimate","Anchor requires Block body but node has no Block"),Ve=!1;break}let de={...ze},We=_t.getNodePath(xt,t.projectRoot).split("@")[1];de.expectedHash=We,de.to=wt,xt&&(de.resolvedNodes={anchor:xt}),l&&(de.batchSaves=!0),typeof de.code=="string"&&(de.code=n.ensureBlockInsertionFormatting(de.code,xt,wt,t.projectRoot));let ve=await Ji.execute(de,t,r);if(!ve||!ve.success)throw new Error(ve?.error||"transform_failed");try{let Ne=ve.created;if(Ne&&typeof Ne.path=="string"){let Ge=String(Ne.path),Be=String(Ne.hash||"").startsWith("@")?String(Ne.hash).slice(1):Ne.hash;bt.push({pathOnly:Ge,hashNoAt:Be});let vt=ze.label;typeof vt=="string"&&vt.trim()&&Fn.set(vt.trim(),{pathOnly:Ge,hashNoAt:Be})}}catch{}$(Ee);try{let Ne=ze.to||{};if(Ne?.before==="$MATCH"||Ne?.start==="$MATCH"||Ne?.after==="$MATCH"||Ne?.end==="$MATCH"||Ne?.bodyStartOf==="$MATCH"||Ne?.bodyEndOf==="$MATCH"){let Be=_t.getNodePath(xe,t.projectRoot);Me=Be,ge=Be.split("@")[0],ye=Be.split("@")[1];try{rt=ge.split("#")[1]||rt}catch{}}}catch{}continue}if(ze.op==="replace"){let Je=ge,wt=ye,xt=ze.path||ze.of||"$MATCH";if(typeof xt=="string"&&xt!=="$MATCH"){let de=nr(xt);if(de&&de.pathOnly)Je=de.pathOnly,de.hashNoAt&&(wt=de.hashNoAt);else{let[Ae,We]=xt.split("#"),ve=typeof We=="string"?We.split("@")[0]:We,Ne=dn.default.isAbsolute(Ae)?Ae:dn.default.join(t.projectRoot,Ae),Ge=r.getSourceFile(Ne)||r.addSourceFileAtPath(Ne),Be=ve?Ge?Pn(ve,Ge):void 0:Ge;if(!Be)throw new Error("target_not_found");let vt=_t.getNodePath(Be,t.projectRoot);Je=vt.split("@")[0],wt=vt.split("@")[1]}}let ft={op:"replace",path:Je,with:ze.with};if(ze.scope&&(ft.scope=ze.scope),typeof ze.forceReplaceWillBreakSyntax=="boolean"&&(ft.forceReplaceWillBreakSyntax=ze.forceReplaceWillBreakSyntax),ft.expectedHash=wt,l&&(ft.batchSaves=!0),ze.scope==="body"){let{ReplaceBodyExecutor:de}=(gd(),be($m)),Ae=await de.execute(ft,t,r);if(!Ae||!Ae.success)throw new Error(Ae?.error||"replace_body_failed");let We=Array.isArray(Ae.details?.changedFiles)?Ae.details.changedFiles:[];for(let ve of We)s.add(ve),l&&w.add(ve)}else{let{ReplaceNodeExecutor:de}=(bd(),be(jm)),Ae=await de.execute(ft,t,r);if(!Ae||!Ae.success)throw new Error(Ae?.error||"replace_failed");let We=Array.isArray(Ae.details?.changedFiles)?Ae.details.changedFiles:[];for(let ve of We)s.add(ve),l&&w.add(ve)}$(Ee);continue}if(ze.op==="rename"){let Je=ge,wt=ye,xt=ze.path||ze.of||"$MATCH";if(typeof xt=="string"&&xt!=="$MATCH"){let[We,ve]=xt.split("#"),Ne=typeof ve=="string"?ve.split("@")[0]:ve,Ge=dn.default.isAbsolute(We)?We:dn.default.join(t.projectRoot,We),Be=r.getSourceFile(Ge)||r.addSourceFileAtPath(Ge),vt=Ne?Be?Pn(Ne,Be):void 0:Be;if(!vt)throw new Error("target_not_found");try{if(Er.Node.isArrowFunction?.(vt)||Er.Node.isFunctionExpression?.(vt)){I(se,ae,Ot,"unrenameable_target","legitimate","Arrow/function expression has no renameable identifier; rename its binding instead"),Ve=!1;break}}catch{}let Rn=_t.getNodePath(vt,t.projectRoot);Je=Rn.split("@")[0],wt=Rn.split("@")[1]}else try{if(Er.Node.isArrowFunction?.(xe)||Er.Node.isFunctionExpression?.(xe)){I(se,ae,Ot,"unrenameable_target","legitimate","Arrow/function expression has no renameable identifier; rename its binding instead"),Ve=!1;break}}catch{}let ft={op:"rename",path:Je,newName:ze.newName};ft.expectedHash=wt,l&&(ft.batchSaves=!0);let de=await Eo.execute(ft,t,r);if(!de||!de.success)throw new Error(de?.error||"rename_failed");try{vn.renamed={oldName:String(Z?.name||""),newName:String(ze.newName||"")}}catch{}let Ae=Array.isArray(de.details?.changedFiles)?de.details.changedFiles:[];for(let We of Ae)s.add(We),l&&w.add(We);try{let We=de.details?.updatedTargets?.[0];if(We&&typeof We.newRef=="string"){let ve=We.newRef;try{let yn=ve.split("#")[1]||"";yn.includes("@")&&console.log(`[FMR] updatedTargets.newRef nodePart contains '@' (rename): ${yn.slice(0,80)}\u2026`)}catch{}let[Ne,Ge]=ve.split("#"),Be=(Ge||"").split("@")[0],vt=dn.default.isAbsolute(Ne)?Ne:dn.default.join(t.projectRoot,Ne),Rn=Ee.getFilePath()===vt?Ee:r.getSourceFile(vt)||r.addSourceFileAtPath(vt),On=Be&&Rn?Pn(Be,Rn):void 0;if(On){xe=On,ge=ve.split("@")[0],ye=String(We.newHash||"");try{rt=Be||rt}catch{}}}}catch{}continue}if(ze.op==="delete"){let Je=ge,wt=ye,xt=ze.path||ze.of||"$MATCH";if(typeof xt=="string"&&xt!=="$MATCH"){let ve=nr(xt);if(ve&&ve.pathOnly)Je=ve.pathOnly,ve.hashNoAt&&(wt=ve.hashNoAt);else{let[Ne,Ge]=xt.split("#"),Be=typeof Ge=="string"?Ge.split("@")[0]:Ge,vt=dn.default.isAbsolute(Ne)?Ne:dn.default.join(t.projectRoot,Ne),Rn=r.getSourceFile(vt)||r.addSourceFileAtPath(vt),On=Be?Rn?Pn(Be,Rn):void 0:Rn;if(!On)throw new Error("target_not_found");let yn=_t.getNodePath(On,t.projectRoot);Je=yn.split("@")[0],wt=yn.split("@")[1]}}let ft={op:"delete",path:[Je],expectedHashes:[wt],forceDeleteReferencesMayBreakSyntax:ze.forceDeleteReferencesMayBreakSyntax!==!1};l&&(ft.batchSaves=!0);let de=await Ro.execute(ft,t,r);if(!de||!de.success)throw new Error(de?.error||"delete_failed");vn.deleted=!0;let Ae=Array.isArray(de.details?.changedFiles)?de.details.changedFiles:[];for(let ve of Ae)s.add(ve);let We=de.details?.deletedFilesCandidates;Array.isArray(We)&&We.forEach(ve=>D.add(ve));continue}throw"where"in ze||"find"in ze?new Error("invalid_transform_shape: 'where'/'find' are not supported in transforms. For delete, match the child node in the query (e.g., type:'ThrowStatement') and delete path:'$MATCH'."):new Error(`unsupported_transform_op:${String(ze.op)}`)}catch($t){let Kt=String($t?.message||"error");if(p==="in-code")try{n.insertFailureMarker(xe,Ee,"$$$TRANSFORM_FAILED$$$",Kt),$(Ee)}catch{}Kt==="no_function_body"?I(se,ae,Ot,"structure_incompatible","legitimate","Anchor requires Block body but node has no Block"):I(se,ae,Ot,Kt,"engine"),Ve=!1;break}}if(!Ve){let Ot=B+1;if(k(Ot))break}Ve&&F++}if(l){let B=Date.now(),Z=x.size,se=D.size,ae=s.size;(qn(),be(Yr)).logger.info("[Batch] Flush start",{dirty:Z,deferredDeletes:se,changedBefore:ae});let De=Date.now();for(let[,rt]of x)rt.saveSync();(qn(),be(Yr)).logger.info("[Batch] Flush stage: save-dirty",{ms:Date.now()-De,dirty:Z});let he=require("fs"),{touchFileWithTimestamp:Ke,touchFilesWithTimestamp:Ze}=(vo(),be(CP)),Ye=[],Ft=Date.now();for(let rt of Array.from(D)){let xe=dn.default.isAbsolute(rt)?rt:dn.default.join(t.projectRoot,rt);he.existsSync(xe)&&he.unlinkSync(xe);let Me=r.getSourceFile(xe);Me&&r.removeSourceFile(Me),Ye.push(rt),s.delete(rt)}(qn(),be(Yr)).logger.info("[Batch] Flush stage: delete",{ms:Date.now()-Ft,deleted:Ye.length});let Ee=Date.now();if(s.size>0){let rt=Array.from(s).map(xe=>dn.default.isAbsolute(xe)?xe:dn.default.join(t.projectRoot,xe));try{Ze(rt)}catch{for(let xe of rt)try{Ke(xe)}catch{}}}(qn(),be(Yr)).logger.info("[Batch] Flush stage: touch",{ms:Date.now()-Ee,touched:s.size}),Ye.length>0&&(a.__deletedFilesFinal=Ye),(qn(),be(Yr)).logger.info("[Batch] Flush done",{ms:Date.now()-B,changedAfter:s.size,deleted:Ye.length})}let z=Array.from(s),U=Number(e.apply?.page?.limit??e.page?.limit??5),K=Number(e.apply?.page?.offset??e.page?.offset??0),G=Math.max(0,K),te=Math.max(1,Math.min(100,U)),pe=z.length,ke=z.slice(G,G+te),re=G+ke.length<pe,W=C.length>0?`Applied to ${F}/${L} locations (${L?Math.round(F/L*100):0}% success); Files: ${s.size}`:`Applied to ${F} location(s); Files: ${s.size}`;j&&m!==void 0&&(W+=` (stopped after reaching maxMatches=${m})`);let me={op:"filter-map-reduce",querySummary:wB(i),succeededCount:F,failedAt:N||void 0,changedFiles:z,processedCount:L,maxMatches:m,truncatedByMax:j||void 0},_e=()=>{let B={succeeded:F,failed:C.length,failuresByReason:O,failuresByCategory:M},Z={no_function_body:"Arrow/abstract have no body. Filter for hasBody:true.",anchor_not_resolved:"Target position not found. Verify selector/anchor.",transform_failed:"Template/structure invalid. Check syntax/bindings.",hash_mismatch:"Target changed. Re-resolve and retry.",unexpected_expectedHash:"filter-map-reduce does NOT accept caller-supplied hashes. Remove expectedHash / expectedHashes entirely; hashes are derived automatically from matches.",ts_program_error:"TS program invalid. Check tsconfig or path mapping.",module_resolution_error:"Module not resolved. Check paths/aliases.",delete_requires_force:"Set forceDeleteReferencesMayBreakSyntax to proceed."};try{let ae=Object.keys(O||{}),De={};for(let he of ae)Z[he]&&(De[he]=Z[he]);Object.keys(De).length&&(B.hints=De)}catch{}let se={};try{se["AST-Op"]="filter-map-reduce"}catch{}try{se["AST-Receipt"]=JSON.stringify(me)}catch{}try{se["AST-Report"]=JSON.stringify(B)}catch{}try{se["AST-Query"]=JSON.stringify(vB(i))}catch{}try{let ae=o.map(De=>({op:De.op,nodeType:De.nodeType,action:De.action,to:De.to?"[pos]":void 0})).slice(0,20);se["AST-Transforms"]=JSON.stringify(ae)}catch{}return se};(qn(),be(Yr)).logger.info("[Batch] Transforms complete",{changedFiles:s.size,failures:C.length});let Se=s.size===0&&F>0&&C.length===0,Q={success:s.size>0||Se,changes:{summary:W,count:s.size},details:{succeededCount:F,failedCount:C.length,partial:C.length>0,noop:Se||void 0,failures:C.length?C:void 0,failedAt:N||void 0,changedFiles:ke,changedFilesPage:{totalCount:pe,limit:te,offset:G,hasMore:re},receipt:me,trailers:_e()}};if(l){Q.details.changedFiles=z;let B=a.__deletedFilesFinal;Array.isArray(B)&&B.length&&(Q.details.deletedFiles=B)}if(!Q.success){let B=N,Z=C[0];B?.reason==="unexpected_expectedHash"||Z?.reason==="unexpected_expectedHash"?Q.error="filter-map-reduce failed: remove expectedHash / expectedHashes. This operation does NOT take hashes from the caller; it derives them automatically from matches.":B?.reason?Q.error=`filter-map-reduce failed: ${B.reason}`:Z?.reason?Q.error=`filter-map-reduce failed: ${Z.reason}`:L===0?Q.error="filter-map-reduce matched no nodes.":Q.error="filter-map-reduce produced no changes."}return Q}catch(i){try{let o=Array.from(s||[]),a=String(i?.message||"unknown error");return{success:!1,error:a.includes("expectedHash")?"filter-map-reduce failed: remove expectedHash / expectedHashes. This operation does NOT take hashes from the caller; it derives them automatically from matches.":`filter-map-reduce failed: ${a}`,details:{changedFiles:o}}}catch{let o=String(i?.message||"unknown error");return{success:!1,error:o.includes("expectedHash")?"filter-map-reduce failed: remove expectedHash / expectedHashes. This operation does NOT take hashes from the caller; it derives them automatically from matches.":`filter-map-reduce failed: ${o}`}}}}static bindAnchor(e,t,r,s){if(e.bodyStartOf==="$MATCH"){let o=t.getBody?.();return o&&Er.Node.isBlock(o)?{start:_t.getNodePath(o,s).split("@")[0]}:Er.Node.isInterfaceDeclaration?.(t)?{start:_t.getNodePath(t,s).split("@")[0]}:{error:"no_function_body"}}if(e.bodyEndOf==="$MATCH"){let o=t.getBody?.();return o&&Er.Node.isBlock(o)?{end:_t.getNodePath(o,s).split("@")[0]}:Er.Node.isInterfaceDeclaration?.(t)?{end:_t.getNodePath(t,s).split("@")[0]}:{error:"no_function_body"}}let i=_t.getNodePath(t,s).split("@")[0];return e.before==="$MATCH"?{before:i}:e.after==="$MATCH"?{after:i}:e.start==="$MATCH"?{start:i}:e.end==="$MATCH"?{end:i}:e}static computeAnchor(e,t,r,s,i){if(e.bodyStartOf==="$MATCH"){let l=t.getBody?.();return l&&Er.Node.isBlock(l)?{toObj:{start:_t.getNodePath(l,s).split("@")[0]},anchor:l}:Er.Node.isInterfaceDeclaration?.(t)?{toObj:{start:_t.getNodePath(t,s).split("@")[0]},anchor:t}:{toObj:{start:""},error:"no_function_body"}}if(e.bodyEndOf==="$MATCH"){let l=t.getBody?.();return l&&Er.Node.isBlock(l)?{toObj:{end:_t.getNodePath(l,s).split("@")[0]},anchor:l}:Er.Node.isInterfaceDeclaration?.(t)?{toObj:{end:_t.getNodePath(t,s).split("@")[0]},anchor:t}:{toObj:{end:""},error:"no_function_body"}}let o=_t.getNodePath(t,s).split("@")[0];if(e.before==="$MATCH")return{toObj:{before:o},anchor:t};if(e.after==="$MATCH")return{toObj:{after:o},anchor:t};if(e.start==="$MATCH")return{toObj:{start:o},anchor:t};if(e.end==="$MATCH")return{toObj:{end:o},anchor:t};let a=e,c=["before","after","start","end"];for(let l of c)if(a[l]&&typeof a[l]=="string"){let u=a[l],[d,p]=u.split("#"),f=typeof p=="string"?p.split("@")[0]:p,m=dn.default.isAbsolute(d)?d:dn.default.join(s||"",d),h;try{h=r.getFilePath()===m?r:i.getSourceFile(m)||i.addSourceFileAtPath(m)}catch{h=void 0}let g=f?h?Pn(f,h):void 0:h;return g?{toObj:e,anchor:g}:{toObj:e,error:"anchor_not_found"}}return{toObj:e,anchor:t}}static ensureBlockInsertionFormatting(e,t,r,s){if(!t||!Er.Node.isBlock(t)||!r||typeof r!="object")return e;let i=typeof r.start=="string"?r.start:typeof r.end=="string"?r.end:null;if(!i)return e;let o=_t.getNodePath(t,s).split("@")[0];if(i!==o)return e;let a=t.getSourceFile(),l=a.getFullText().includes(`\r
|
|
837
837
|
`)?`\r
|
|
838
838
|
`:`
|
|
839
839
|
`,u=typeof a.getIndentationText=="function"?a.getIndentationText():" ",d=typeof t.getIndentationLevel=="function"?t.getIndentationLevel():0,p=u.repeat(d+1),f=e;return/^[\r\n]/.test(f)||(f=`${l}${p}${f}`),/[\r\n]\s*$/.test(f)||(f=`${f}${l}`),f}static insertFailureMarker(e,t,r,s){let i=e.getBody?.();if(i&&Er.Node.isBlock(i)){let a=`/* ${r}: ${s} */`;i.insertStatements?.(0,a);return}let o=`/* ${r}: ${s} */`;t.addStatements?.([o])}}});var wS=ne(()=>{"use strict";NP();aS();UP();fS();_S();fd()});function sC(n,e){return typeof e=="number"?Number.isInteger(e)?e:-1:n.findIndex(t=>t.name===e)}function RB(n){let e=!1;for(let t of n){if(t.isOptional){e=!0;continue}if(e)return!0}return!1}function vS(n,e){let t=[],r=n.map((a,c)=>({originalIndex:c,name:a.name,isOptional:a.isOptional,defaultValue:a.defaultValue})),s=r.length,i=!1,o=null;if(!e)return{originalParamCount:s,finalParams:r,finalOrderFromCurrentIndices:o,hasParameterChanges:i,warnings:t};if(e.remove&&e.remove.length>0){i=!0;let a=new Set;for(let c of e.remove){let l=sC(r,c);l>=0&&l<r.length?a.add(l):t.push(`Invalid parameter target to remove: ${c}`)}Array.from(a).sort((c,l)=>l-c).forEach(c=>r.splice(c,1))}if(e.modify&&e.modify.length>0){i=!0;for(let a of e.modify){let c=sC(r,a.target);if(c<0||c>=r.length){t.push(`Invalid parameter target to modify: ${a.target}`);continue}let l=r[c];a.newName&&(l.name=a.newName),a.newDefaultValue!==void 0&&(a.newDefaultValue===""?(delete l.defaultValue,l.isOptional=!1):(l.defaultValue=a.newDefaultValue,l.isOptional=!0))}}if(e.add&&e.add.length>0){i=!0;for(let a of e.add){let c=a.position??r.length,l=Math.max(0,Math.min(c,r.length));r.splice(l,0,{originalIndex:null,name:a.name,isOptional:a.defaultValue!==void 0,defaultValue:a.defaultValue,callSiteArg:a.callSiteArg})}}if(e.reorder&&e.reorder.length>0)if(i=!0,e.reorder.length!==r.length)t.push(`Reorder array length (${e.reorder.length}) doesn't match parameter count (${r.length})`);else{let a=new Set,c=!0;for(let l of e.reorder){if(!Number.isInteger(l)||l<0||l>=r.length||a.has(l)){t.push(`Invalid reorder index: ${l}`),c=!1;break}a.add(l)}if(c){let l=e.reorder.map(u=>r[u]);RB(l)?t.push("Requested reorder would place a required parameter after an optional/defaulted parameter, which is not a safe TypeScript signature."):(o=e.reorder.slice(),r.splice(0,r.length,...l))}}return{originalParamCount:s,finalParams:r,finalOrderFromCurrentIndices:o,hasParameterChanges:i,warnings:t}}function zm(n,e,t){let r=[],s=n.slice(e.originalParamCount),i=!1;for(let o=0;o<e.finalParams.length;o++){let a=e.finalParams[o];if(a.originalIndex!=null){a.originalIndex<n.length&&r.push(n[a.originalIndex]);continue}let c=e.finalParams.slice(o+1).some(u=>u.originalIndex!=null&&u.originalIndex<n.length)||s.length>0,l=a.callSiteArg??a.defaultValue;if(l){r.push(l);continue}(!a.isOptional||c)&&(r.push(t(a)),i=!0)}return{args:[...r,...s],needsManualReview:i}}var iC=ne(()=>{"use strict"});function kB(n){return n.some(e=>{let t=e.getNameNode();return Fa.Node.isArrayBindingPattern(t)||Fa.Node.isObjectBindingPattern(t)||e.getName()==="this"})}function EB(n){return n.hasModifier(Fa.SyntaxKind.DeclareKeyword)}function Bm(n){if(!Fa.Node.isFunctionDeclaration(n)&&!Fa.Node.isMethodDeclaration(n))return{kind:"single",declarations:[n],implementation:n};let e=n.getImplementation?.()??(n.getBody()?n:void 0),t=e?e.getOverloads():n.getOverloads();return t.length?e?{kind:"overload-family",declarations:[...t,e],implementation:e}:{error:"Overload groups require a concrete implementation declaration."}:{kind:"single",declarations:[n],implementation:n}}function oC(n){let e=[],t=Bm(n);if("error"in t)return e.push(t.error),e;for(let r of t.declarations){if(EB(r)){e.push("Ambient declarations are not supported for TypeScript change-signature.");break}if(kB(r.getParameters())){e.push("Destructured parameters and `this` parameters are not yet supported for TypeScript change-signature.");break}if(r.getParameters().some(s=>s.isRestParameter())){e.push("Rest parameters are not yet supported for TypeScript change-signature.");break}}return e}var Fa,aC=ne(()=>{"use strict";Fa=require("ts-morph")});function TB(n){return n==="clojure"?";":n==="python"?"#":"//"}function PB(n){return`PANDO_SIGNATURE_REVIEW_${(n||"arg").replace(/[^A-Za-z0-9_$-]/g,"_")}`}function qm(n,e,t){let r=(n||"func").replace(/[^A-Za-z0-9_$-]/g,"_"),s=e.replace(/[^A-Za-z0-9_$-]/g,"_");return`${TB(t)} $$$SIGNATURE_CHANGE_${r}_${s}$$$`}function Hm(n,e,t){return t==="clojure"?PB(n.name):n.isOptional?`undefined /* TODO: optional ${n.name} for ${e} */`:`undefined /* TODO: required ${n.name} for ${e} */`}function RS(n,e,t){let r=n.lastIndexOf(`
|
|
@@ -863,10 +863,10 @@ ${r.join(`
|
|
|
863
863
|
`)}${s}`}function DC(n){if(!Cn(n))return{valid:!1,error:"Operation payload must be an object.",issues:[{param:"operation",code:"invalid_type",message:"Invalid operation payload type.",expected:"object",actual:ds(n),value:n}]};let e=typeof n.op=="string"?n.op.trim():"",t=[];if(!e)return t.push({param:"op",code:"missing_required",message:'Missing required parameter "op".',expected:"known operation string",actual:ds(n.op),value:n.op}),{valid:!1,error:"Invalid operation parameters.",issues:t};if(!GB.has(e))return{valid:!0};let r=n;switch(e){case"read_this_first":case"get-project-root":case"workspace-overview":case"repair-history":{xn(e,r,new Set(["op"]),t);break}case"set-enabled-languages":{xn(e,r,new Set(["op","languages"]),t);break}case"get-db-schema":{xn(e,r,new Set(["op","includeColumns"]),t),"includeColumns"in r&&si(r,"includeColumns",t);break}case"query-db":{xn(e,r,new Set(["op","sql","maxRows"]),t),"sql"in r?Ut(r,"sql",t,{nonEmpty:!0}):t.push({param:"sql",code:"missing_required",message:'Missing required parameter "sql".'}),"maxRows"in r&&ii(t,"maxRows",r.maxRows,{min:1,max:1e4,integer:!0});break}case"find-nodes":{xn(e,r,new Set(["op","lang","snapshot","scope","datalog","prefilter","include","page"]),t),"scope"in r?QB(r.scope,"scope",t):t.push({param:"scope",code:"missing_required",message:'Missing required parameter "scope".'}),"datalog"in r?YB(r.datalog,"datalog",t):t.push({param:"datalog",code:"missing_required",message:'Missing required parameter "datalog".'}),"lang"in r&&(typeof r.lang=="string"||Array.isArray(r.lang)?Array.isArray(r.lang)&&ja(r.lang,"lang",t,{nonEmpty:!0}):He(t,"lang",r.lang,"string | string[]")),"snapshot"in r&&Ut(r,"snapshot",t,{nonEmpty:!0}),"prefilter"in r&&e1(r.prefilter,"prefilter",t),"page"in r&&XB(r.page,"page",t),"include"in r&&!Cn(r.include)&&He(t,"include",r.include,"object");break}case"find-references":{xn(e,r,new Set(["op","to","expectedHash","boundary","includeDeclaration","includeStrings","includeComments","limit","offset","relType","sort","asOf"]),t);for(let s of["to","expectedHash"])s in r||t.push({param:s,code:"missing_required",message:`Missing required parameter "${s}".`});"to"in r&&Ut(r,"to",t,{nonEmpty:!0}),"expectedHash"in r&&Ut(r,"expectedHash",t,{nonEmpty:!0}),$S(r,"limit",t,{allowAllString:!0,max:100}),jS(r,"offset",t);for(let s of["includeDeclaration","includeStrings","includeComments"])s in r&&si(r,s,t);if("relType"in r){let s=new Set(["call","new","type","reference","import","export","extends","implements"]);(typeof r.relType!="string"||!s.has(r.relType))&&t.push({param:"relType",code:"invalid_value",message:'Invalid value for "relType".',expected:Array.from(s).join(" | "),value:r.relType})}"sort"in r&&MC(r.sort,"sort",t);break}case"find-callers":{xn(e,r,new Set(["op","of","expectedHash","depth","aggregate","boundary","asOf","limit","offset","relType","sort","minConfidence"]),t);for(let s of["of","expectedHash"])s in r||t.push({param:s,code:"missing_required",message:`Missing required parameter "${s}".`});if("depth"in r&&r.depth!=="all"&&ii(t,"depth",r.depth,{min:1,max:10,integer:!0}),$S(r,"limit",t,{allowAllString:!0,max:100}),jS(r,"offset",t),"aggregate"in r&&si(r,"aggregate",t),"sort"in r&&MC(r.sort,"sort",t),"minConfidence"in r){let s=new Set(["exact","heuristic","dynamic"]);(typeof r.minConfidence!="string"||!s.has(r.minConfidence))&&t.push({param:"minConfidence",code:"invalid_value",message:'Invalid value for "minConfidence".',expected:"exact | heuristic | dynamic",value:r.minConfidence})}break}case"list-exports":case"analyze-imports":case"clojure-namespace-graph":case"clojure-namespace-dependencies":case"clojure-namespace-dependents":case"plan-clojure-namespace-move":case"plan-clojure-namespace-rename":case"move-clojure-namespace":case"rename-clojure-namespace":case"list-snapshots":{if(xn(e,r,{"list-exports":new Set(["op","scope","symbolKinds","export_kinds","limit","offset"]),"analyze-imports":new Set(["op","groupBy","limit","offset"]),"clojure-namespace-graph":new Set(["op","includeExternal","scope","namespacePrefix","edgeKinds","limit","offset"]),"clojure-namespace-dependencies":new Set(["op","namespace","transitive","edgeKinds","limit","offset"]),"clojure-namespace-dependents":new Set(["op","namespace","transitive","edgeKinds","limit","offset"]),"plan-clojure-namespace-move":new Set(["op","namespace","newFile"]),"plan-clojure-namespace-rename":new Set(["op","oldNamespace","newNamespace"]),"move-clojure-namespace":new Set(["op","namespace","newFile"]),"rename-clojure-namespace":new Set(["op","oldNamespace","newNamespace"]),"list-snapshots":new Set(["op","limit","offset"])}[e],t),"limit"in r&&$S(r,"limit",t,{max:100}),"offset"in r&&jS(r,"offset",t),"scope"in r&&typeof r.scope!="string"&&He(t,"scope",r.scope,"string"),"symbolKinds"in r&&ja(r.symbolKinds,"symbolKinds",t),"export_kinds"in r&&ja(r.export_kinds,"export_kinds",t),e==="analyze-imports"&&"groupBy"in r&&r.groupBy!=="module"&&r.groupBy!=="file"&&t.push({param:"groupBy",code:"invalid_value",message:'Invalid value for "groupBy".',expected:"module | file",value:r.groupBy}),e==="clojure-namespace-graph"&&"includeExternal"in r&&si(r,"includeExternal",t),e==="clojure-namespace-graph"&&("scope"in r&&Ut(r,"scope",t,{nonEmpty:!0}),"namespacePrefix"in r&&Ut(r,"namespacePrefix",t,{nonEmpty:!0}),"edgeKinds"in r&&ja(r.edgeKinds,"edgeKinds",t)),(e==="clojure-namespace-dependencies"||e==="clojure-namespace-dependents")&&("namespace"in r?Ut(r,"namespace",t,{nonEmpty:!0}):t.push({param:"namespace",code:"missing_required",message:'Missing required parameter "namespace".'}),"transitive"in r&&si(r,"transitive",t),"edgeKinds"in r&&ja(r.edgeKinds,"edgeKinds",t)),e==="plan-clojure-namespace-move"||e==="move-clojure-namespace")for(let i of["namespace","newFile"])i in r?Ut(r,i,t,{nonEmpty:!0}):t.push({param:i,code:"missing_required",message:`Missing required parameter "${i}".`});if(e==="plan-clojure-namespace-rename"||e==="rename-clojure-namespace")for(let i of["oldNamespace","newNamespace"])i in r?Ut(r,i,t,{nonEmpty:!0}):t.push({param:i,code:"missing_required",message:`Missing required parameter "${i}".`});break}case"rename":{xn(e,r,new Set(["op","path","newName","expectedHash","boundary","requireConfirmation","confirmed","includeStrings","includeComments","page"]),t);for(let s of["path","newName","expectedHash"])s in r?Ut(r,s,t,{nonEmpty:!0}):t.push({param:s,code:"missing_required",message:`Missing required parameter "${s}".`});"page"in r&&Qm(r.page,"page",t);for(let s of["requireConfirmation","confirmed","includeStrings","includeComments"])s in r&&si(r,s,t);break}case"change-signature":{xn(e,r,new Set(["op","path","expectedHash","parameters","returnType","makeAsync","makeSyncFromAsync","batchSaves","boundary"]),t);for(let s of["path","expectedHash"])s in r?Ut(r,s,t,{nonEmpty:!0}):t.push({param:s,code:"missing_required",message:`Missing required parameter "${s}".`});"returnType"in r&&Ut(r,"returnType",t,{nonEmpty:!0});for(let s of["makeAsync","makeSyncFromAsync","batchSaves"])s in r&&si(r,s,t);if("parameters"in r)if(!Cn(r.parameters))He(t,"parameters",r.parameters,"object");else{let s=r.parameters,i=new Set(["add","remove","modify","reorder"]);for(let o of Object.keys(s))i.has(o)||t.push({param:`parameters.${o}`,code:"unknown_param",message:`Unknown parameter "parameters.${o}".`,expected:`Allowed: ${Array.from(i).sort().join(", ")}`,actual:o,value:s[o]});if("add"in s)if(!Array.isArray(s.add))He(t,"parameters.add",s.add,"array");else for(let o=0;o<s.add.length;o+=1){let a=s.add[o];if(!Cn(a)){He(t,`parameters.add[${o}]`,a,"object");continue}"name"in a?(typeof a.name!="string"||a.name.trim().length===0)&&t.push({param:`parameters.add[${o}].name`,code:"invalid_value",message:'Invalid value for "parameters.add[].name": expected non-empty string.',expected:"non-empty string",value:a.name}):t.push({param:`parameters.add[${o}].name`,code:"missing_required",message:'Missing required parameter "parameters.add[].name".'});for(let c of["type","defaultValue","callSiteArg"])c in a&&typeof a[c]!="string"&&He(t,`parameters.add[${o}].${c}`,a[c],"string");"position"in a&&ii(t,`parameters.add[${o}].position`,a.position,{min:0,integer:!0})}if("remove"in s)if(!Array.isArray(s.remove))He(t,"parameters.remove",s.remove,"(string | number)[]");else for(let o=0;o<s.remove.length;o+=1){let a=s.remove[o];typeof a=="string"||Number.isInteger(a)||t.push({param:`parameters.remove[${o}]`,code:"invalid_type",message:'Invalid type for "parameters.remove[]".',expected:"string | integer",actual:ds(a),value:a})}if("modify"in s)if(!Array.isArray(s.modify))He(t,"parameters.modify",s.modify,"array");else for(let o=0;o<s.modify.length;o+=1){let a=s.modify[o];if(!Cn(a)){He(t,`parameters.modify[${o}]`,a,"object");continue}"target"in a?typeof a.target=="string"||Number.isInteger(a.target)||t.push({param:`parameters.modify[${o}].target`,code:"invalid_type",message:'Invalid type for "parameters.modify[].target".',expected:"string | integer",actual:ds(a.target),value:a.target}):t.push({param:`parameters.modify[${o}].target`,code:"missing_required",message:'Missing required parameter "parameters.modify[].target".'});for(let c of["newName","newType","newDefaultValue"])c in a&&typeof a[c]!="string"&&He(t,`parameters.modify[${o}].${c}`,a[c],"string")}if("reorder"in s)if(!Array.isArray(s.reorder))He(t,"parameters.reorder",s.reorder,"integer[]");else for(let o=0;o<s.reorder.length;o+=1)ii(t,`parameters.reorder[${o}]`,s.reorder[o],{min:0,integer:!0})}break}case"delete":{if(xn(e,r,new Set(["op","path","expectedHashes","forceDeleteReferencesMayBreakSyntax"]),t),!("path"in r))t.push({param:"path",code:"missing_required",message:'Missing required parameter "path".'});else if(!(typeof r.path=="string"||Array.isArray(r.path)))He(t,"path",r.path,"string | string[]");else{let s=Array.isArray(r.path)?r.path:[r.path];s.length===0?t.push({param:"path",code:"invalid_value",message:'Invalid "path": non-empty string or string[] required.',expected:"non-empty string | non-empty string[]",actual:"empty array",value:r.path}):s.length>10&&t.push({param:"path",code:"invalid_value",message:'Invalid "path": delete accepts at most 10 targets per call.',expected:"1..10 targets",actual:`${s.length} targets`,value:r.path});for(let i=0;i<s.length;i+=1)(typeof s[i]!="string"||s[i].trim().length===0)&&t.push({param:Array.isArray(r.path)?`path[${i}]`:"path",code:"invalid_value",message:`Invalid value for "${Array.isArray(r.path)?`path[${i}]`:"path"}": expected non-empty string.`,expected:"non-empty string",value:s[i]})}if(!Array.isArray(r.expectedHashes)||r.expectedHashes.length===0)t.push({param:"expectedHashes",code:"invalid_type",message:'Invalid "expectedHashes": non-empty string[] required.',expected:"non-empty string[]",actual:ds(r.expectedHashes),value:r.expectedHashes});else{let s=Array.isArray(r.path)?r.path.length:typeof r.path=="string"?1:null;s!==null&&r.expectedHashes.length!==s&&t.push({param:"expectedHashes",code:"invalid_value",message:'Invalid "expectedHashes": must have exactly one hash per path.',expected:`${s} hash${s===1?"":"es"}`,actual:`${r.expectedHashes.length} hashes`,value:r.expectedHashes});for(let i=0;i<r.expectedHashes.length;i+=1)(typeof r.expectedHashes[i]!="string"||r.expectedHashes[i].trim().length===0)&&t.push({param:`expectedHashes[${i}]`,code:"invalid_value",message:`Invalid value for "expectedHashes[${i}]": expected non-empty string.`,expected:"non-empty string",value:r.expectedHashes[i]})}"forceDeleteReferencesMayBreakSyntax"in r&&si(r,"forceDeleteReferencesMayBreakSyntax",t);break}case"insert":case"add-code":{xn(e,r,new Set(["op","to","code","replaceExistingNodeAtPath","expectedHash","createFileIfMissing","newFileInitialContent","forceInsertWillBreakSyntax"]),t);for(let s of["to","code","replaceExistingNodeAtPath"])s in r||t.push({param:s,code:"missing_required",message:`Missing required parameter "${s}".`});"to"in r&&!(typeof r.to=="string"||Cn(r.to))&&He(t,"to",r.to,"string | object"),"code"in r&&typeof r.code!="string"&&He(t,"code",r.code,"string"),"replaceExistingNodeAtPath"in r&&typeof r.replaceExistingNodeAtPath!="boolean"&&He(t,"replaceExistingNodeAtPath",r.replaceExistingNodeAtPath,"boolean");for(let s of["createFileIfMissing","forceInsertWillBreakSyntax"])s in r&&si(r,s,t);"expectedHash"in r&&Ut(r,"expectedHash",t,{nonEmpty:!0}),"newFileInitialContent"in r&&typeof r.newFileInitialContent!="string"&&He(t,"newFileInitialContent",r.newFileInitialContent,"string");break}case"replace":case"replace-body":{xn(e,r,new Set(["op","path","with","expectedHash","scope","forceReplaceWillBreakSyntax"]),t);let s=e==="replace-body"||e==="replace"&&r.scope==="body";for(let i of["path","with","expectedHash"]){if(!(i in r)){t.push({param:i,code:"missing_required",message:`Missing required parameter "${i}".`});continue}if(i==="with"){Ut(r,i,t,{nonEmpty:!s});continue}Ut(r,i,t,{nonEmpty:!0})}e==="replace-body"?"scope"in r&&r.scope!=="body"&&t.push({param:"scope",code:"invalid_value",message:'replace-body only supports scope="body".',expected:"body",value:r.scope}):"scope"in r&&r.scope!=="node"&&r.scope!=="body"&&t.push({param:"scope",code:"invalid_value",message:'Invalid value for "scope".',expected:"node | body",value:r.scope}),"forceReplaceWillBreakSyntax"in r&&si(r,"forceReplaceWillBreakSyntax",t);break}case"edit-file-text":{xn(e,r,new Set(["op","file","expectedSha256","content","replacements","edits"]),t);for(let i of["file","expectedSha256"])i in r?Ut(r,i,t,{nonEmpty:!0}):t.push({param:i,code:"missing_required",message:`Missing required parameter "${i}".`});let s=0;"content"in r&&(s+=1,typeof r.content!="string"&&He(t,"content",r.content,"string")),"replacements"in r&&(s+=1,Array.isArray(r.replacements)?r.replacements.length===0?t.push({param:"replacements",code:"invalid_value",message:'"replacements" must be non-empty.',expected:"non-empty array",value:r.replacements}):r.replacements.forEach((i,o)=>{if(!Cn(i)){He(t,`replacements[${o}]`,i,"object");return}for(let a of Object.keys(i))["old","new","replaceAll"].includes(a)||t.push({param:`replacements[${o}].${a}`,code:"unknown_param",message:`Unknown parameter "replacements[${o}].${a}".`,expected:"old, new, replaceAll",actual:a,value:i[a]});"old"in i?(typeof i.old!="string"||i.old.trim().length===0)&&t.push({param:`replacements[${o}].old`,code:"invalid_type",message:'"old" must be a non-empty string.',expected:"non-empty string",actual:ds(i.old),value:i.old}):t.push({param:`replacements[${o}].old`,code:"missing_required",message:'Missing required parameter "old".'}),"new"in i?typeof i.new!="string"&&He(t,`replacements[${o}].new`,i.new,"string"):t.push({param:`replacements[${o}].new`,code:"missing_required",message:'Missing required parameter "new".'}),"replaceAll"in i&&typeof i.replaceAll!="boolean"&&He(t,`replacements[${o}].replaceAll`,i.replaceAll,"boolean")}):He(t,"replacements",r.replacements,"array")),"edits"in r&&(s+=1,Array.isArray(r.edits)?r.edits.length===0?t.push({param:"edits",code:"invalid_value",message:'"edits" must be non-empty.',expected:"non-empty array",value:r.edits}):r.edits.forEach((i,o)=>{if(!Cn(i)){He(t,`edits[${o}]`,i,"object");return}for(let a of Object.keys(i))["start","end","with"].includes(a)||t.push({param:`edits[${o}].${a}`,code:"unknown_param",message:`Unknown parameter "edits[${o}].${a}".`,expected:"start, end, with",actual:a,value:i[a]});for(let a of["start","end"])a in i?(typeof i[a]!="number"||!Number.isInteger(i[a])||i[a]<0)&&t.push({param:`edits[${o}].${a}`,code:"invalid_type",message:`"${a}" must be a non-negative integer.`,expected:"integer >= 0",actual:ds(i[a]),value:i[a]}):t.push({param:`edits[${o}].${a}`,code:"missing_required",message:`Missing required parameter "${a}".`});"with"in i?typeof i.with!="string"&&He(t,`edits[${o}].with`,i.with,"string"):t.push({param:`edits[${o}].with`,code:"missing_required",message:'Missing required parameter "with".'})}):He(t,"edits",r.edits,"array")),s!==1&&t.push({param:"content|replacements|edits",code:"invalid_value",message:"Provide exactly one of content, replacements, or edits.",expected:"exactly one edit mode"});break}case"filter-map-reduce":{if(xn(e,r,new Set(["op","query","transforms","apply"]),t),"expectedHash"in r&&t.push({param:"expectedHash",code:"unknown_param",message:'filter-map-reduce does NOT accept "expectedHash". Remove it entirely; this operation derives hashes automatically from matched nodes.',expected:"parameter omitted",actual:ds(r.expectedHash),value:r.expectedHash}),"expectedHashes"in r&&t.push({param:"expectedHashes",code:"unknown_param",message:'filter-map-reduce does NOT accept "expectedHashes". Remove them entirely; this operation derives hashes automatically from matched nodes.',expected:"parameter omitted",actual:ds(r.expectedHashes),value:r.expectedHashes}),Cn(r.query)||He(t,"query",r.query,"object"),Array.isArray(r.transforms)?r.transforms.length===0&&t.push({param:"transforms",code:"invalid_value",message:'Invalid value for "transforms": at least one transform required.',expected:"non-empty array",actual:"empty array",value:r.transforms}):He(t,"transforms",r.transforms,"array"),Array.isArray(r.transforms))for(let s=0;s<r.transforms.length;s+=1){let i=r.transforms[s];Cn(i)&&("expectedHash"in i&&t.push({param:`transforms[${s}].expectedHash`,code:"unknown_param",message:`filter-map-reduce does NOT accept "transforms[${s}].expectedHash". Remove all hash fields from transforms; hashes are derived automatically from each match.`,expected:"parameter omitted",actual:ds(i.expectedHash),value:i.expectedHash}),"expectedHashes"in i&&t.push({param:`transforms[${s}].expectedHashes`,code:"unknown_param",message:`filter-map-reduce does NOT accept "transforms[${s}].expectedHashes". Remove all hash fields from transforms; hashes are derived automatically from each match.`,expected:"parameter omitted",actual:ds(i.expectedHashes),value:i.expectedHashes}))}"apply"in r&&!Cn(r.apply)&&He(t,"apply",r.apply,"object"),Array.isArray(r.transforms)&&r.transforms.length>500&&t.push({param:"transforms",code:"out_of_range",message:'Value for "transforms" exceeds maximum supported length.',expected:"<= 500 transforms",actual:String(r.transforms.length),value:r.transforms.length});break}case"shell-command":{xn(e,r,new Set(["op","command","reason","timeoutMs","shell","maxOutputBytes"]),t);for(let s of["command","reason"])s in r?Ut(r,s,t,{nonEmpty:!0}):t.push({param:s,code:"missing_required",message:`Missing required parameter "${s}".`});"timeoutMs"in r&&ii(t,"timeoutMs",r.timeoutMs,{min:1e3,max:6e5,integer:!0}),"maxOutputBytes"in r&&ii(t,"maxOutputBytes",r.maxOutputBytes,{min:1024,max:1e6,integer:!0}),"shell"in r&&Ut(r,"shell",t,{nonEmpty:!0});break}case"diff-snapshots":{xn(e,r,new Set(["op","head","base","page"]),t),"head"in r?Ut(r,"head",t,{nonEmpty:!0}):t.push({param:"head",code:"missing_required",message:'Missing required parameter "head".'}),"page"in r&&Qm(r.page,"page",t);break}case"get-snapshot-trailers":{if(xn(e,r,new Set(["op","snapshotId","keys"]),t),"snapshotId"in r?Ut(r,"snapshotId",t,{nonEmpty:!0}):t.push({param:"snapshotId",code:"missing_required",message:'Missing required parameter "snapshotId".'}),"keys"in r&&!Array.isArray(r.keys)&&He(t,"keys",r.keys,"string[]"),Array.isArray(r.keys))for(let s=0;s<r.keys.length;s+=1)typeof r.keys[s]!="string"&&He(t,`keys[${s}]`,r.keys[s],"string");break}case"get-snapshot-file":{xn(e,r,new Set(["op","snapshotId","path","oid"]),t),!("oid"in r)&&!("snapshotId"in r&&"path"in r)&&t.push({param:"snapshotId/path/oid",code:"missing_required",message:'Provide either "oid", or both "snapshotId" and "path".',expected:"oid OR (snapshotId + path)"}),"oid"in r&&Ut(r,"oid",t,{nonEmpty:!0}),"snapshotId"in r&&Ut(r,"snapshotId",t,{nonEmpty:!0}),"path"in r&&Ut(r,"path",t,{nonEmpty:!0});break}case"snapshot-worktree":{xn(e,r,new Set(["op","message","trailers"]),t),"message"in r&&typeof r.message!="string"&&He(t,"message",r.message,"string"),"trailers"in r&&OS(r.trailers,"trailers",t);break}case"restore-snapshot":{xn(e,r,new Set(["op","snapshotId","trailers","page","shouldCreateNewSnapshot","deleteSnapshotId","allowLargeDeletes","allowPartialSnapshot"]),t),"snapshotId"in r?Ut(r,"snapshotId",t,{nonEmpty:!0}):t.push({param:"snapshotId",code:"missing_required",message:'Missing required parameter "snapshotId".'}),"page"in r&&Qm(r.page,"page",t),"trailers"in r&&OS(r.trailers,"trailers",t);for(let s of["shouldCreateNewSnapshot","allowLargeDeletes","allowPartialSnapshot"])s in r&&si(r,s,t);"deleteSnapshotId"in r&&Ut(r,"deleteSnapshotId",t,{nonEmpty:!0});break}case"restore-files":{if(xn(e,r,new Set(["op","snapshotId","files","page","trailers"]),t),"snapshotId"in r?Ut(r,"snapshotId",t,{nonEmpty:!0}):t.push({param:"snapshotId",code:"missing_required",message:'Missing required parameter "snapshotId".'}),!Array.isArray(r.files)||r.files.length===0)t.push({param:"files",code:"invalid_value",message:'Invalid "files": non-empty string[] required.',expected:"non-empty string[]",actual:ds(r.files),value:r.files});else for(let s=0;s<r.files.length;s+=1)(typeof r.files[s]!="string"||r.files[s].trim().length===0)&&t.push({param:`files[${s}]`,code:"invalid_value",message:`Invalid value for "files[${s}]": expected non-empty string.`,expected:"non-empty string",value:r.files[s]});"page"in r&&Qm(r.page,"page",t),"trailers"in r&&OS(r.trailers,"trailers",t);break}case"add-exclude-dir":case"remove-exclude-dir":{xn(e,r,new Set(["op","directory"]),t),"directory"in r?Ut(r,"directory",t,{nonEmpty:!0}):t.push({param:"directory",code:"missing_required",message:'Missing required parameter "directory".'});break}default:break}if(t.length>0){let s=t.map(i=>n1(e,i,[]));return{valid:!1,error:r1(e,s),issues:s}}return{valid:!0}}var GB,JB,AC,NC,VB,FC=ne(()=>{"use strict";GB=new Set(["read_this_first","get-project-root","set-enabled-languages","get-db-schema","query-db","find-nodes","find-references","find-callers","workspace-overview","list-exports","analyze-imports","clojure-namespace-graph","clojure-namespace-dependencies","clojure-namespace-dependents","plan-clojure-namespace-move","plan-clojure-namespace-rename","move-clojure-namespace","rename-clojure-namespace","rename","change-signature","delete","insert","add-code","replace","replace-body","edit-file-text","filter-map-reduce","shell-command","list-snapshots","diff-snapshots","get-snapshot-trailers","get-snapshot-file","snapshot-worktree","restore-snapshot","restore-files","repair-history","add-exclude-dir","remove-exclude-dir"]),JB={rename:new Set(["batchSaves"]),"change-signature":new Set(["batchSaves"]),delete:new Set(["batchSaves"]),insert:new Set(["batchSaves"]),"add-code":new Set(["batchSaves"]),replace:new Set(["batchSaves"]),"replace-body":new Set(["batchSaves"]),"edit-file-text":new Set(["batchSaves"]),"shell-command":new Set(["batchSaves"])},AC=new Set(["op","boundary","reachabilityDepth","reachabilityOptions"]),NC={op:{definition:"Operation name.",inputType:"string",examples:["find-nodes","replace"],doc:"resources/tools/generated_tools.md"},path:{definition:"Node path in format file#nodePath (without @hash).",inputType:"string",examples:["src/app.ts#FD:0"],doc:"src/pando-core/docs/api-specification.ts"},expectedHash:{definition:"Hash for optimistic concurrency (without '@').",inputType:"string",examples:["p123:c456"],doc:"src/pando-core/docs/api-specification.ts"},expectedHashes:{definition:"List of hashes aligned with path entries.",inputType:"string[]",examples:[["p123:c1","p124:c2"]],doc:"src/pando-core/docs/api-specification.ts"},limit:{definition:"Page size limit.",inputType:"integer | 'all' on selected read ops",range:"integer 1..100 (or 'all' for selected read ops)",examples:[10,50,"all"],doc:"src/pando-core/docs/api-specification.ts"},offset:{definition:"Pagination start index.",inputType:"integer",range:"integer >= 0",examples:[0,100],doc:"src/pando-core/docs/api-specification.ts"},page:{definition:"Pagination object.",inputType:"object",examples:[{limit:20,cursor:null}],doc:"src/pando-core/docs/api-specification.ts"},"page.limit":{definition:"Pagination page size. Operation executors apply their own upper caps.",inputType:"integer",range:"integer >= 1",examples:[5,20],doc:"src/pando-core/docs/api-specification.ts"},"page.offset":{definition:"Pagination offset.",inputType:"integer",range:"integer >= 0",examples:[0],doc:"src/pando-core/docs/api-specification.ts"},"page.cursor":{definition:"Opaque resume cursor.",inputType:"string | null",examples:[null,"opaque"],doc:"src/pando-core/docs/api-specification.ts"},prefilter:{definition:"Optional candidate-file prefilter for find-nodes.",inputType:"object",examples:[{fts:"register*"}],doc:"src/pando-core/docs/api-specification.ts"},"prefilter.fts":{definition:"SQLite FTS5 MATCH query passed through unchanged after trimming; used only to narrow candidate files before Datalog execution.",inputType:"string",examples:["register*",'"error boundary"',"foo AND bar","foo OR bar","foo NEAR/1 bar"],doc:"src/pando-core/docs/api-specification.ts"},sort:{definition:"Sort configuration object.",inputType:"object",examples:[{by:"name",direction:"asc"}],doc:"src/pando-core/docs/api-specification.ts"},"sort.by":{definition:"Sort key field.",inputType:"string",examples:["name","file_path"],doc:"src/pando-core/docs/api-specification.ts"},"sort.direction":{definition:"Sort direction.",inputType:"string",allowedValues:["asc","desc"],examples:["asc"],doc:"src/pando-core/docs/api-specification.ts"},qMode:{definition:"Search query mode.",inputType:"string",allowedValues:["fts","like"],examples:["fts"],doc:"src/pando-core/docs/api-specification.ts"},relType:{definition:"Relationship category filter.",inputType:"string",allowedValues:["call","new","type","reference","import","export","extends","implements"],doc:"src/pando-core/docs/api-specification.ts"},depth:{definition:"Caller graph traversal depth.",inputType:"integer | 'all'",range:"integer 1..10 or 'all'",examples:[1,2,"all"],doc:"src/pando-core/docs/api-specification.ts"},maxBytes:{definition:"Maximum bytes to read.",inputType:"integer",range:"integer 1..400_000 (get-storage-content)",doc:"src/pando-core/docs/api-specification.ts"},includeSelfTopN:{definition:"Include full details for top N nodes.",inputType:"integer",range:"integer 1..5",examples:[3],doc:"src/pando-core/docs/api-specification.ts"},boundary:{definition:"Scope boundary for cross-project operations.",inputType:"string",allowedValues:["project","reachable","workspace"],doc:"src/pando-core/docs/api-specification.ts"},root:{definition:"Explicit workspace root path.",inputType:"string",doc:"src/pando-core/docs/api-specification.ts"},languages:{definition:"Enabled language ids for indexing.",inputType:"string[]",examples:[["clojure"],["ts","js"]],doc:"src/pando-core/docs/api-specification.ts"},includeColumns:{definition:"Include column details in schema response.",inputType:"boolean",examples:[!0,!1],doc:"src/pando-core/docs/api-specification.ts"},sql:{definition:"Raw SQL query to execute against the unified index chunks.",inputType:"string",examples:["SELECT name FROM sqlite_master LIMIT 10"],doc:"src/pando-core/docs/api-specification.ts"},maxRows:{definition:"Maximum rows returned after global merge.",inputType:"integer",range:"integer 1..10000",examples:[100,1e3],doc:"src/pando-core/docs/api-specification.ts"},bucket:{definition:"Storage bucket name.",inputType:"string",examples:["tool-results"],doc:"src/pando-core/docs/api-specification.ts"},key:{definition:"Object key in storage bucket.",inputType:"string",examples:["threads/<thread-id>/tool-results/<call-id>.json"],doc:"src/pando-core/docs/api-specification.ts"},encoding:{definition:"Storage content encoding mode.",inputType:"string",allowedValues:["auto","text","base64"],examples:["auto","base64"],doc:"src/pando-core/docs/api-specification.ts"},expectedSha256:{definition:"Expected object checksum for integrity check.",inputType:"string",range:"64-char lowercase hex",examples:["8d969eef6ecad3c29a3a629280e686cff8fabd1b5d5b8f7f6f5fbc5f5f2f6e14"],doc:"src/pando-core/docs/api-specification.ts"},content:{definition:"Full replacement text.",inputType:"string",examples:["{:lint-as {}}"],doc:"src/pando-core/docs/api-specification.ts"},command:{definition:"Shell command to run with cwd fixed to the selected project root.",inputType:"string",examples:["npm test"],doc:"resources/tools/generated_tools.md"},reason:{definition:"Required audit reason explaining why this shell command is being run.",inputType:"string",examples:["Run the focused test suite after changing command handling."],doc:"resources/tools/generated_tools.md"},timeoutMs:{definition:"Maximum command runtime in milliseconds.",inputType:"integer",range:"integer 1000..600000",examples:[12e4],doc:"resources/tools/generated_tools.md"},maxOutputBytes:{definition:"Maximum combined stdout/stderr bytes returned to the agent.",inputType:"integer",range:"integer 1024..1000000",examples:[2e5],doc:"resources/tools/generated_tools.md"},shell:{definition:"Optional shell executable used to run the command.",inputType:"string",examples:["/bin/zsh"],doc:"resources/tools/generated_tools.md"},replacements:{definition:"Exact text replacements.",inputType:"{old:string,new:string,replaceAll?:boolean}[]",examples:[[{old:"old",new:"new"}]],doc:"src/pando-core/docs/api-specification.ts"},edits:{definition:"Character-offset text edits.",inputType:"{start:number,end:number,with:string}[]",examples:[[{start:0,end:3,with:"new"}]],doc:"src/pando-core/docs/api-specification.ts"},files:{definition:"List of repo-relative file paths.",inputType:"string[]",examples:[["src/app.ts","src/utils.ts"]],doc:"src/pando-core/docs/api-specification.ts"},snapshotId:{definition:"Snapshot identifier.",inputType:"string",examples:["S_previous"],doc:"src/pando-core/docs/api-specification.ts"},head:{definition:"Head snapshot identifier.",inputType:"string",examples:["S_current"],doc:"src/pando-core/docs/api-specification.ts"},base:{definition:"Base snapshot identifier.",inputType:"string",examples:["S_previous"],doc:"src/pando-core/docs/api-specification.ts"},directory:{definition:"Directory path for exclusion/include.",inputType:"string",examples:["src/generated/"],doc:"src/pando-core/docs/api-specification.ts"},scope:{definition:"Structured find-nodes scope object.",inputType:"object",examples:[{dir:"src"},{files:["src/app.ts"]},{workspace:!0}],doc:"src/pando-core/docs/api-specification.ts"},scopeNode:{definition:"Legacy find-nodes scope parameter.",inputType:"string",examples:["src/metabase/tracing/core.clj","src/metabase/tracing/","src/app.ts#FD:0"],doc:"src/pando-core/docs/api-specification.ts"},namespace:{definition:"Fully qualified Clojure namespace name.",inputType:"string",examples:["metabase.tracing.events"],doc:"src/pando-core/docs/api-specification.ts"},namespacePrefix:{definition:"Optional Clojure namespace-name prefix filter, separate from path-based scope.",inputType:"string",examples:["metabase.tracing"],doc:"src/pando-core/docs/api-specification.ts"},includeExternal:{definition:"Include external namespaces such as clojure.* in graph results.",inputType:"boolean",examples:[!0,!1],doc:"src/pando-core/docs/api-specification.ts"},edgeKinds:{definition:"Namespace edge kinds to include in graph traversals.",inputType:"string[]",examples:[["require","refer"]],doc:"src/pando-core/docs/api-specification.ts"}},VB={"get-db-schema":{op:"get-db-schema",includeColumns:!0},"query-db":{op:"query-db",sql:"SELECT name FROM sqlite_master LIMIT 20",maxRows:100},"find-nodes":{op:"find-nodes",lang:["ts"],scope:{dir:"src"},prefilter:{fts:"register*"},datalog:{query:'[:find ?n :where [?n :node/kind "IfStatement"]]',bindings:["?n"],result:{nodeVar:"?n"}},page:{limit:5,cursor:null}},"find-references":{op:"find-references",to:"src/app.ts#FD:0",expectedHash:"p123:c456",limit:20},"find-callers":{op:"find-callers",of:"src/service.ts#FD:2",expectedHash:"pabc:cdef",depth:2},"list-exports":{op:"list-exports",scope:"src/",limit:20,offset:0},"analyze-imports":{op:"analyze-imports",groupBy:"module",limit:20,offset:0},"clojure-namespace-graph":{op:"clojure-namespace-graph",scope:"src/metabase/tracing/",namespacePrefix:"metabase.tracing",includeExternal:!1,limit:20,offset:0},"clojure-namespace-dependencies":{op:"clojure-namespace-dependencies",namespace:"myapp.core",limit:20,offset:0},"clojure-namespace-dependents":{op:"clojure-namespace-dependents",namespace:"myapp.util",limit:20,offset:0},"plan-clojure-namespace-move":{op:"plan-clojure-namespace-move",namespace:"myapp.old.location",newFile:"src/myapp/new/location.clj"},"plan-clojure-namespace-rename":{op:"plan-clojure-namespace-rename",oldNamespace:"myapp.util",newNamespace:"myapp.helpers"},"move-clojure-namespace":{op:"move-clojure-namespace",namespace:"myapp.old.location",newFile:"src/myapp/new/location.clj"},"rename-clojure-namespace":{op:"rename-clojure-namespace",oldNamespace:"myapp.util",newNamespace:"myapp.helpers"},"list-snapshots":{op:"list-snapshots",limit:20,offset:0},rename:{op:"rename",path:"src/app.ts#FD:0",newName:"initApp",expectedHash:"p123:c456"},"change-signature":{op:"change-signature",path:"src/app.ts#FD:0",expectedHash:"p123:c456",parameters:{add:[{name:"locale",type:"string",callSiteArg:'"en-US"'}],reorder:[1,0]}},delete:{op:"delete",path:"src/app.ts#FD:0",expectedHashes:["p123:c456"],forceDeleteReferencesMayBreakSyntax:!0},insert:{op:"insert",to:"src/app.ts#FD:0",code:`const x = 1;
|
|
864
864
|
`,replaceExistingNodeAtPath:!1,expectedHash:"p123:c456"},"add-code":{op:"add-code",to:"src/app.ts#FD:0",code:`const x = 1;
|
|
865
865
|
`,replaceExistingNodeAtPath:!1,expectedHash:"p123:c456"},replace:{op:"replace",path:"src/app.ts#FD:0",expectedHash:"p123:c456",with:`function app() {}
|
|
866
|
-
`},"replace-body":{op:"replace-body",path:"src/app.ts#FD:0",expectedHash:"p123:c456",with:"console.log(1);"},"filter-map-reduce":{op:"filter-map-reduce",query:{lang:["ts","js"],scope:{workspace:!0},datalog:{query:'[:find ?n :where [?n :node/name "init"]]',bindings:["?n"],result:{nodeVar:"?n"}},page:{limit:20,cursor:null}},transforms:[{op:"replace",path:"$MATCH",with:"function initApp() {}"}]},"shell-command":{op:"shell-command",command:"npm test",reason:"Verify the current change."},"diff-snapshots":{op:"diff-snapshots",head:"S_current",base:"S_previous"},"set-enabled-languages":{op:"set-enabled-languages"},"get-snapshot-trailers":{op:"get-snapshot-trailers",snapshotId:"S_current",keys:["message"]},"get-snapshot-file":{op:"get-snapshot-file",snapshotId:"S_current",path:"src/app.ts"},"snapshot-worktree":{op:"snapshot-worktree",message:"checkpoint"},"restore-snapshot":{op:"restore-snapshot",snapshotId:"S_previous"},"restore-files":{op:"restore-files",snapshotId:"S_previous",files:["src/app.ts"]},"add-exclude-dir":{op:"add-exclude-dir",directory:"dist/"},"remove-exclude-dir":{op:"remove-exclude-dir",directory:"dist/"}}});var BS={};Lt(BS,{SnapshotService:()=>zS});var OC,LS,zS,qS=ne(()=>{"use strict";OC=q(require("path")),LS=q(require("fs"));da();zS=class{static async takeSnapshotNow(e,t,r,s,i,o,a){lt(a,"Snapshot cancelled");let c=f=>f.replace(/^\.\//,"").replace(/\\/g,"/"),l=Array.from(new Set((t||[]).map(c))).filter(Boolean),u=[];for(let f=0;f<l.length;f++){f>0&&f%128===0&&await qu(a),lt(a,"Snapshot cancelled");let m=l[f],h=OC.default.join(e,m);LS.default.existsSync(h)&&LS.default.statSync(h).isFile()&&u.push(m)}let{openSnapshotsDb:d}=(wi(),be(_o)),p=d(e);try{lt(a,"Snapshot cancelled");let{SnapshotManager:f}=(Zm(),be(Km)),m=new f(p,e),h={"AST-Op":r,"AST-Receipt":JSON.stringify(s||{})};if(i)for(let[b,S]of Object.entries(i))h[b]=S;let{snapshotId:g,parentId:y}=await m.createSnapshotFromFiles(u,{op:r,description:"apply",params:h,dbWrite:"immediate",deleted:Array.isArray(o)?o:void 0},a);lt(a,"Snapshot cancelled");try{await m.indexSnapshotBlobsNodes(p,g,y),console.info(`[SnapshotService] Blob node index updated snapshot=${g} parent=${y||"none"}`)}catch(b){console.log(`[SnapshotService] Blob node indexing failed snapshot=${g}: ${b?.message||b}`)}return{snapshotId:g,parentId:y}}finally{try{p.close()}catch{}}}}});var $C={};Lt($C,{TypeInference:()=>HS});var
|
|
867
|
-
`);return t.includes("return results")||t.includes("return items")?"any[]":t.includes("return true")||t.includes("return false")?"boolean":t.includes("return")&&!t.includes("return;")?"any":"void"}}});var qC={};Lt(qC,{TextFileEditExecutor:()=>WS});function LC(n){return BC.default.createHash("sha256").update(n,"utf8").digest("hex")}function s1(n){return n.replace(/\\/g,"/")}function zC(n,e){let t=La.default.relative(n,e);return t===""||!!t&&!t.startsWith("..")&&!La.default.isAbsolute(t)}function i1(n,e){let t=String(e||"").trim();if(!t)return{abs:n,rel:"",error:'Parameter "file" is required.'};if(t.includes("\0"))return{abs:n,rel:"",error:'Parameter "file" contains an invalid NUL byte.'};let r=La.default.resolve(n),s=La.default.resolve(r,t);if(!zC(r,s))return{abs:s,rel:"",error:"Text edits are restricted to files inside the workspace root."};let i=s1(La.default.relative(r,s)),o=i.split("/").filter(Boolean);if(o[0]!==".clj-kondo")return{abs:s,rel:i,error:"edit-file-text is restricted to .clj-kondo config and hook files."};if(o.includes(".cache"))return{abs:s,rel:i,error:"edit-file-text refuses .clj-kondo/.cache files."};let a=La.default.extname(i).toLowerCase();if(!(i===".clj-kondo/config.edn"||a===".edn"||a===".clj"||a===".cljc"||a===".cljs"))return{abs:s,rel:i,error:"edit-file-text only supports .clj-kondo EDN and Clojure hook/source files."};try{let l=(Qc.default.realpathSync.native??Qc.default.realpathSync)(r),u=(Qc.default.realpathSync.native??Qc.default.realpathSync)(s);if(!zC(l,u))return{abs:s,rel:i,error:"Resolved file path escapes the workspace root."}}catch{return{abs:s,rel:i,error:"edit-file-text requires an existing regular file."}}try{if(!Qc.default.statSync(s).isFile())return{abs:s,rel:i,error:"edit-file-text target must be a regular file."}}catch{return{abs:s,rel:i,error:"edit-file-text requires an existing regular file."}}return{abs:s,rel:i}}function o1(n,e){let t=n,r=0;for(let s=0;s<e.length;s+=1){let i=e[s];if(typeof i?.old!="string"||typeof i?.new!="string")return{text:t,applied:r,error:`replacements[${s}] requires string old and new fields.`};if(i.old.length===0)return{text:t,applied:r,error:`replacements[${s}].old must be non-empty.`};let o=t.split(i.old).length-1;if(o===0)return{text:t,applied:r,error:`replacements[${s}].old was not found.`};if(!i.replaceAll&&o!==1)return{text:t,applied:r,error:`replacements[${s}].old matched ${o} times; set replaceAll=true or use a more specific old string.`};t=i.replaceAll?t.split(i.old).join(i.new):t.replace(i.old,i.new),r+=i.replaceAll?o:1}return{text:t,applied:r}}function a1(n,e){let t=[];for(let s=0;s<e.length;s+=1){let i=e[s];if(!i||typeof i.with!="string")return{text:n,applied:0,error:`edits[${s}] requires a string with field.`};let o=Number(i.start),a=Number(i.end);if(!Number.isInteger(o)||!Number.isInteger(a)||o<0||a<o||a>n.length)return{text:n,applied:0,error:`edits[${s}] has invalid character offsets.`};t.push({...i,start:o,end:a,index:s})}t.sort((s,i)=>i.start-s.start);for(let s=1;s<t.length;s+=1)if(t[s].end>t[s-1].start)return{text:n,applied:0,error:`edits[${t[s].index}] overlaps another edit.`};let r=n;for(let s of t)r=r.slice(0,s.start)+s.with+r.slice(s.end);return{text:r,applied:t.length}}var BC,Qc,La,WS,HC=ne(()=>{"use strict";BC=q(require("crypto")),Qc=q(require("fs")),La=q(require("path"));kr();WS=class{static async execute(e,t){let r=i1(t.projectRoot,e.file);if(r.error)return{success:!1,error:r.error,error_code:"validation_failed"};let s=String(e.expectedSha256||"").trim().toLowerCase();if(!/^[a-f0-9]{64}$/.test(s))return{success:!1,error:"expectedSha256 must be a 64-character lowercase hex SHA-256 of the current file text.",error_code:"validation_failed"};let i=Pe(r.abs),o=LC(i);if(o!==s)return{success:!1,error:"SHA-256 mismatch for text edit target. Re-read the file and retry with the current expectedSha256.",error_code:"hash_mismatch",details:{file:r.rel,expectedSha256:s,actualSha256:o}};if([typeof e.content=="string",Array.isArray(e.replacements),Array.isArray(e.edits)].filter(Boolean).length!==1)return{success:!1,error:"Provide exactly one of content, replacements, or edits.",error_code:"validation_failed"};let c=i,l=1;if(typeof e.content=="string")c=e.content;else if(Array.isArray(e.replacements)){if(e.replacements.length===0)return{success:!1,error:"replacements must be non-empty.",error_code:"validation_failed"};let d=o1(i,e.replacements);if(d.error)return{success:!1,error:d.error,error_code:"validation_failed",details:{file:r.rel}};c=d.text,l=d.applied}else if(Array.isArray(e.edits)){if(e.edits.length===0)return{success:!1,error:"edits must be non-empty.",error_code:"validation_failed"};let d=a1(i,e.edits);if(d.error)return{success:!1,error:d.error,error_code:"validation_failed",details:{file:r.rel}};c=d.text,l=d.applied}if(c===i)return{success:!0,message:"No text changes were needed.",details:{changedFiles:[],allChangedFiles:[],file:r.rel,appliedEdits:0,sha256:o}};un(r.abs,c);let u=LC(c);return{success:!0,message:`Edited ${r.rel}`,details:{changedFiles:[r.rel],allChangedFiles:[r.rel],file:r.rel,appliedEdits:l,previousSha256:o,sha256:u,receipt:{op:"edit-file-text",target:r.rel,appliedEdits:l,previousSha256:o,sha256:u,textOnly:!0}}}}}});var WC=ne(()=>{"use strict"});var UC={};Lt(UC,{AtomicExecutor:()=>US});var US,KC=ne(()=>{"use strict";ru();SS();fd();bd();gd();WC();US=class{static async execute(e,t,r,s){let i=String(e.op||""),o=["find-nodes"],a=i==="add-code"?"insert":i==="replace-body"?"replace":i;if(a!=="find-nodes"){let d=!o.includes(a),p=a==="insert"&&e.createFileIfMissing===!0;if(d&&!p&&!("expectedHash"in e))return{success:!1,error:`Operation ${e.op} requires expectedHash field.`}}let c;switch(a){case"find-nodes":c=await Da.execute(e,t,r);break;case"insert":c=await Ji.execute({...e,op:"insert"},t,r);break;case"replace":i==="replace-body"||e.scope==="body"?c=await hd.execute({...e,op:"replace",scope:"body"},t,r):c=await yd.execute({...e,op:"replace"},t,r);break;default:c={success:!1,error:`Atomic operation ${e.op} not yet implemented`};break}let u=Ks.getInstance(t.projectRoot).getStatus();if(u.isIndexing){c.indexingStatus=u;let d="Warning: Reindexing in progress, results might not be complete or up to date.";if(u.totalFiles&&u.filesProcessed!==void 0){let p=u.totalFiles-u.filesProcessed;if(d+=` ${p} files remaining`,u.estimatedSecondsRemaining)if(u.estimatedSecondsRemaining<60)d+=` (est. ${u.estimatedSecondsRemaining}s)`;else{let f=Math.ceil(u.estimatedSecondsRemaining/60);d+=` (est. ${f} minute${f>1?"s":""})`}}c.message?c.message+=" "+d:c.message=d}return c}}});function V(n,e){X("CodeEngine",n,e)}function Nn(...n){if(n.length===0)return;let[e,...t]=n;if(typeof e=="string"){if(t.length===0){X("CodeEngine",e);return}if(t.length===1){X("CodeEngine",e,t[0]);return}X("CodeEngine",e,t);return}X("CodeEngine","log",n)}function Mn(n,e){if(!Ht())return;let t=e&&typeof e=="object"&&!Array.isArray(e)?{pid:process.pid,...e}:{pid:process.pid,details:e};X("CodeEngineReindex",n,t)}function c1(n){return n===void 0||n===0||n===1}function l1(n){let e=String(n??"").replace(/\s+/g," ").trim();return e?e.length>160?`${e.slice(0,157)}...`:e:"Unknown diagnostic"}function u1(n){let e=n.flatMap(r=>(r.topNewDiagnostics||[]).map(s=>`${r.path}:${s.line+1}:${s.column+1} ${s.message}`)).slice(0,3);return e.length>0?`Post-operation validation failed; changes rolled back. Top new diagnostics: ${e.join(" | ")}`:`Post-operation validation failed; changes rolled back. Changed files introduced diagnostics: ${n.slice(0,3).map(r=>{let s=Number(r.newDiagnostics||0);return`${r.path} (${r.errors} error(s)${s>0?`, ${s} new`:""})`}).join("; ")}`}function GC(n,e,t,r){if(n==null)return e;let s=typeof n=="number"||typeof n=="string"?Number(n):NaN;return Number.isFinite(s)?Math.max(t,Math.min(r,Math.floor(s))):e}function d1(n,e=500){let t=n.replace(/\s+/g," ").trim();return t.length<=e?t:`${t.slice(0,e)}...`}function p1(n){return new Promise(e=>{let t="",r="",s=0,i=0,o=!1,a=!1,c=!1,l,u=!1,d=(y,b)=>{let S=Math.max(0,n.maxOutputBytes-s-i);if(S<=0){o=!0;return}let _=b.length>S?b.subarray(0,S):b;_.length<b.length&&(o=!0);let R=_.toString("utf8");y==="stdout"?(t+=R,s+=_.length):(r+=R,i+=_.length)},p=()=>{clearTimeout(g);try{n.signal?.removeEventListener("abort",h)}catch{}},f=y=>{c||(c=!0,p(),e({...y,stdout:t,stderr:r,outputTruncated:o}))},m=()=>{try{l&&!u&&(l.kill("SIGTERM"),setTimeout(()=>{try{l&&!u&&l.kill("SIGKILL")}catch{}},1e3).unref?.())}catch{}},h=()=>{m()},g=setTimeout(()=>{a=!0,m()},n.timeoutMs);if(g.unref?.(),n.signal?.aborted){clearTimeout(g),e({exitCode:null,signal:null,timedOut:!1,error:"Command cancelled before start",stdout:"",stderr:"",outputTruncated:!1});return}n.signal?.addEventListener("abort",h,{once:!0});try{l=(0,wd.spawn)(n.command,{cwd:n.cwd,shell:n.shell||!0,env:process.env,stdio:["ignore","pipe","pipe"]})}catch(y){f({exitCode:null,signal:null,timedOut:a,error:y?.message||String(y),stdout:"",stderr:"",outputTruncated:o});return}l.stdout?.on("data",y=>d("stdout",y)),l.stderr?.on("data",y=>d("stderr",y)),l.on("error",y=>{f({exitCode:null,signal:null,timedOut:a,error:y.message,stdout:"",stderr:"",outputTruncated:o})}),l.on("close",(y,b)=>{u=!0,f({exitCode:y,signal:b,timedOut:a,error:n.signal?.aborted?"Command cancelled":void 0,stdout:"",stderr:"",outputTruncated:o})})})}function ps(n){return require("path").resolve(n)}function f1(n){let e=n;if(typeof e.getNameNode=="function"){let t=e.getNameNode();if(t)return t.getStart()}if(typeof e.getName=="function"){let t=e.getName();if(t&&typeof t=="string"){let r=n.getFirstDescendant?.(s=>s.getText?.()===t);if(r&&typeof r.getStart=="function")return r.getStart()}}return null}var wd,KS,ZC,tu,_y=ne(()=>{"use strict";wd=require("child_process"),KS=q(require("fs"));JR();Gl();XE();Mb();kT();aa();lb();ru();Vt();fy();gt();da();Ru();Xo();oa();Bn();Xn();wS();uC();vC();PC();Gm();IC();ts();FC();Zc();ka();dr();ZC="language_support_reconcile";tu=class n{constructor(e,t,r){this.operationCount=0;this.modifyingOpActive=!1;this.operationResetController=new AbortController;this.workspaceSyncController=new AbortController;this.refreshingInProgress=!1;this.refreshingFiles=[];this.pendingProjectSync=null;this.pendingLspWorkspaceSync=null;this.batchInProgress=!1;this.batchRunner=null;this.queuedBatch=null;this.indexExcludeDirs=[];this.pendingStatusReindex=[];this.indexingInProgress=!1;this.pendingFullReindex=!1;this.languageSupportReconcileTask=null;this.languageSupportReconcileQueued=!1;this.initialSnapshotTask=null;this.transientIndexers=new Set;let s=Lp("CodeEngineInit");s("start",{projectPath:e,hasTestProject:!!t}),this.testProject=t;let i=this.resolveInitialProjectPath(e);this.projectPath=i,s("projectPath.set",{projectPath:this.projectPath}),s("projectInit.start"),this.project=Us.initializeProject(this.projectPath,this.testProject),s("projectInit.complete",{sourceFiles:this.project.getSourceFiles().length}),this.snapshotter=new tm(this.projectPath,()=>this.indexExcludeDirs.slice()),s("snapshotter.ready"),this.indexExcludeDirs=Js(this.projectPath),V("Loaded indexExcludeDirs",this.indexExcludeDirs),s("indexExcludes.loaded",{count:this.indexExcludeDirs.length}),this.languageSupport=r?.languageSupport,this.lspHost=r?.lspHost;try{V("constructor runtime wiring",{projectPath:this.projectPath,hasLanguageSupport:!!this.languageSupport,hasLspHost:!!this.lspHost})}catch{}s("initializeXXHash.start"),this.xxHashReady=(async()=>{try{await jb(),s("initializeXXHash.complete")}catch(o){throw Nn("FATAL: Failed to initialize xxHash:",o),o}})(),r?.enableASTStorage&&V("\u{1F4DD} Incremental AST indexing configured. Call startIndexing() when ready.")}static{this.DIAGNOSTIC_VALIDATION_TIMEOUT_MS=Math.max(500,Number(process.env.PANDO_DIAGNOSTIC_VALIDATION_TIMEOUT_MS||"3000"))}static{this.LARGE_INCREMENTAL_BATCH_FILES=Math.max(1e3,Number(process.env.PANDO_INCREMENTAL_FULL_REINDEX_FILE_THRESHOLD||"5000"))}static{this.LARGE_INCREMENTAL_BATCH_PERCENT=Math.max(1,Number(process.env.PANDO_INCREMENTAL_FULL_REINDEX_PERCENT_THRESHOLD||"15"))}static{this.PROJECT_SYNC_HEARTBEAT_MS=Math.max(1e3,Number(process.env.PANDO_PROJECT_SYNC_HEARTBEAT_MS||"5000"))}static{this.PROJECT_SYNC_SUPERSEDE_SETTLE_MS=Math.max(25,Number(process.env.PANDO_PROJECT_SYNC_SUPERSEDE_SETTLE_MS||"250"))}static{this.RESTORE_FAST_PATH_MAX_AGE_MS=Math.max(1e3,Number(process.env.PANDO_RESTORE_FAST_PATH_MAX_AGE_MS||"300000"))}cancelWorkspaceSync(e){let t=this.workspaceSyncController;if(this.workspaceSyncController=new AbortController,!t.signal.aborted)try{t.abort(Vn(e,"Workspace sync cancelled"))}catch{try{t.abort()}catch{}}}clearPendingProjectSyncState(e){e&&this.pendingProjectSyncToken!==e||(this.pendingProjectSync=null,this.pendingProjectSyncToken=void 0,this.pendingProjectSyncId=void 0,this.pendingProjectSyncEnqueuedAt=void 0,this.pendingProjectSyncReason=void 0)}invalidateRestoreFastPathState(e,t){this.restoreFastPathState&&(V("[RestoreFastPath] invalidated",{reason:e,currentSnapshotId:this.restoreFastPathState.currentSnapshotId,sourceOp:this.restoreFastPathState.sourceOp??null,ageMs:Date.now()-this.restoreFastPathState.createdAt,...t||{}}),this.restoreFastPathState=void 0)}recordRestoreFastPathState(e,t){let r=typeof t?.snapshotAfter=="string"?String(t.snapshotAfter).trim():"";if(!r||r==="<none>"){this.invalidateRestoreFastPathState("missing-snapshot-after",{op:e??null,success:!!t?.success});return}this.restoreFastPathState={currentSnapshotId:r,sourceOp:e??null,createdAt:Date.now()},V("[RestoreFastPath] state.recorded",{currentSnapshotId:r,sourceOp:e??null})}installRestoreFastPathMetadata(e,t){let r=this.restoreFastPathState;if(!r){t.clearOperationMetadata(e,xd);return}let s=Date.now()-r.createdAt;if(s>n.RESTORE_FAST_PATH_MAX_AGE_MS){this.invalidateRestoreFastPathState("stale",{ageMs:s}),t.clearOperationMetadata(e,xd);return}t.setOperationMetadata(e,xd,r),V("[RestoreFastPath] metadata.installed",{currentSnapshotId:r.currentSnapshotId,sourceOp:r.sourceOp??null,ageMs:s})}async supersedePendingProjectSyncForRestore(e){let t=this.pendingProjectSync;if(!t)return;let r=Date.now();V("[ProjectSync] superseding for restore",{operation:e??null,syncId:this.pendingProjectSyncId??null,reason:this.pendingProjectSyncReason??null,queuedForMs:this.pendingProjectSyncEnqueuedAt?Date.now()-this.pendingProjectSyncEnqueuedAt:null,queuedBatch:this.describeQueuedBatch(),batchInProgress:this.batchInProgress,batchPhase:this.batchPhase??null}),this.queuedBatch=null,this.clearPendingProjectSyncState(),this.cancelWorkspaceSync(`${String(e||"restore-snapshot")} superseded pending project sync`);let s=n.PROJECT_SYNC_SUPERSEDE_SETTLE_MS,i,o=new Promise(a=>{i=setTimeout(()=>a("timeout"),s),i.unref?.()});try{let a=await Promise.race([t.then(()=>"settled").catch(c=>(zi(c)||V("[ProjectSync] supersede settle saw failure",{operation:e??null,message:c?.message||String(c)}),"settled")),o]);V("[ProjectSync] supersede settle complete",{operation:e??null,settled:a,settleTimeoutMs:s,durationMs:Date.now()-r})}finally{i&&clearTimeout(i)}}async collectDiagnostics(e,t){let r=Date.now();try{V("collectDiagnostics:start",{projectPath:this.projectPath,files:t,hasEngineLspHost:!!this.lspHost,hasContextLspHost:!!e.lsp})}catch{}if(!e.lsp)if(this.lspHost)e.setLspHost(this.lspHost);else try{let{CodeEngineFactory:u}=(ws(),be(yc)),d=u.getEngineOptions(this.projectPath);d?.lspHost&&e.setLspHost(d.lspHost),V("collectDiagnostics:recoveredRuntimeOptions",{projectPath:this.projectPath,hasStoredLspHost:!!d?.lspHost})}catch{}let s=e.lsp;try{V("collectDiagnostics:resolvedHost",{projectPath:this.projectPath,hasLspHost:!!s})}catch{}let i=new Map,o=require("path"),a=require("fs"),{resolveLanguageIdForPath:c}=(Bn(),be(eb)),{getClojureDiagnostics:l}=(Vs(),be(jE));for(let u of t){let d=Date.now(),p=o.isAbsolute(u)?u:o.join(this.projectPath,u);if(!a.existsSync(p))continue;let f;try{f=c(p);let m;if(f==="clojure")m=l(this.projectPath,p);else{if(!s)continue;m=await Promise.race([s.diagnostics(p),new Promise((b,S)=>setTimeout(()=>S(new Error("__pando_diag_timeout__")),n.DIAGNOSTIC_VALIDATION_TIMEOUT_MS))])}let h=new Set,g=[],y=0;for(let b of m||[]){let S=b.severity;if(c1(S)){y+=1;let _=b.range,R=`${b.message??""}|${_?.start?.line??0}:${_?.start?.character??0}-${_?.end?.line??0}:${_?.end?.character??0}`;h.add(R),g.length<10&&g.push({signature:R,message:l1(b.message),line:Number(_?.start?.line??0),column:Number(_?.start?.character??0)})}}i.set(u,{errors:y,signatures:h,diagnostics:g})}catch(m){if(String(m?.message||m||"")==="__pando_diag_timeout__"){i.set(u,{errors:0,signatures:new Set,skipped:!0});continue}i.set(u,{errors:1,signatures:new Set(["diagnostics_error"])})}finally{let m=Date.now()-d;m>1e3&&V("collectDiagnostics:file.slow",{projectPath:this.projectPath,file:u,lang:f??null,durationMs:m})}}return V("collectDiagnostics:complete",{projectPath:this.projectPath,files:t.length,captured:i.size,durationMs:Date.now()-r}),i}async validateChangedFiles(e,t,r){try{V("validateChangedFiles:start",{projectPath:this.projectPath,changedFiles:t,hasEngineLspHost:!!this.lspHost,hasContextLspHost:!!e.lsp})}catch{}if(!e.lsp)if(this.lspHost)e.setLspHost(this.lspHost);else try{let{CodeEngineFactory:l}=(ws(),be(yc)),u=l.getEngineOptions(this.projectPath);u?.lspHost&&e.setLspHost(u.lspHost),V("validateChangedFiles:recoveredRuntimeOptions",{projectPath:this.projectPath,hasStoredLspHost:!!u?.lspHost})}catch{}let{resolveLanguageIdForPath:s}=(Bn(),be(eb)),i=t.some(l=>{let u=require("path").isAbsolute(l)?l:require("path").join(this.projectPath,l);return s(u)!=="clojure"});if(!e.lsp&&i){try{V("validateChangedFiles:skippedNoHost",{projectPath:this.projectPath})}catch{}return{ok:!0,skipped:!0,warning:"Post-operation validation skipped: no active LSP host."}}let o=await this.collectDiagnostics(e,t),a=[],c=[];for(let l of t){let u=o.get(l);if(!u)continue;let d=r?.get(l);if(!d)continue;if(d.skipped||u.skipped){c.push(l);continue}let p=Array.from(u.signatures).filter(f=>!d.signatures.has(f)).length;if(u.errors>d.errors||p>0){let f=(u.diagnostics||[]).filter(m=>!d.signatures.has(m.signature)).slice(0,3).map(({signature:m,...h})=>h);a.push({path:l,errors:u.errors,newDiagnostics:p,topNewDiagnostics:f})}}if(a.length>0){let l=a.flatMap(u=>(u.topNewDiagnostics||[]).map(d=>`${u.path}:${d.line+1}:${d.column+1} ${d.message}`)).slice(0,3);return{ok:!1,errors:a,topDiagnostics:l,error:u1(a)}}return c.length>0?{ok:!0,skipped:!0,warning:`Post-operation validation skipped for ${c.length} file(s) because diagnostics did not respond within ${n.DIAGNOSTIC_VALIDATION_TIMEOUT_MS}ms.`}:{ok:!0}}extractTouchedFiles(e){let t=new Set,r=i=>{if(typeof i!="string"||!i.trim())return;let o=i.split("#")[0];o&&t.add(o)},s=i=>{if(typeof i=="string"){r(i);return}if(i&&typeof i=="object"){let o=i;r(o.before),r(o.after),r(o.start),r(o.end),r(o.bodyStartOf),r(o.bodyEndOf)}};if(r(e?.path),Array.isArray(e?.path))for(let i of e.path)r(i);if(r(e?.of),s(e?.to),Array.isArray(e?.files))for(let i of e.files)r(i);return Array.from(t)}async preflightExpectedHashCheck(e,t,r){let s=typeof e?.expectedHash=="string"?e.expectedHash.trim():"";if(!s||s.includes("@"))return{ok:!0};let i=tS(e),o=typeof i=="string"&&/:FunctionArity(?:@|$)/.test(i);try{if(!o&&await Ei(t,e,r))return{ok:!0}}catch(a){return{ok:!1,error:a?.message||String(a)}}if(typeof i!="string"||!i.includes("#"))return{ok:!0};try{let a=await qr(this.projectPath,i);if(!a)return{ok:!0};let c=et(i,a.text),l=s.startsWith("@")?s:`@${s}`,u=on(l,c);if(u.type!=="MATCH")return{ok:!1,error:`Hash mismatch (${u.type}). Re-run find-nodes to refresh the target.`}}catch{return{ok:!0}}return{ok:!0}}get indexer(){return this._indexer||(this._indexer=new ma(this.projectPath,void 0,{excludeDirs:this.indexExcludeDirs,languageSupport:this.languageSupport})),this._indexer}createTransientIndexer(e="transient"){let t=Rs(),r=ks("indexer-worker");V("[IndexerDiag] createTransientIndexer",{projectPath:this.projectPath,reason:e,activeTransientIndexers:this.transientIndexers.size,workerScript:r,workerScriptExists:r?KS.default.existsSync(r):!1,runtimePaths:t,env:{runtimeRoot:process.env.PANDO_RUNTIME_ROOT??null,workerRoot:process.env.PANDO_WORKER_SCRIPT_DIR??null}});let s=new ma(this.projectPath,void 0,{excludeDirs:this.indexExcludeDirs,languageSupport:this.languageSupport});return this.transientIndexers.add(s),s}disposeTransientIndexer(e,t="transient indexer complete"){if(e){V("[IndexerDiag] disposeTransientIndexer",{projectPath:this.projectPath,reason:t,activeTransientIndexers:this.transientIndexers.size}),this.transientIndexers.delete(e);try{e.dispose(t)}catch{}}}async withTransientIndexer(e,t="transient run"){let r=this.createTransientIndexer(t);try{return await e(r)}finally{this.disposeTransientIndexer(r,t)}}cancelIndexing(e){if(this._indexer)try{this._indexer.cancelIndexing(e)}catch{}for(let t of Array.from(this.transientIndexers))try{t.cancelIndexing(e)}catch{}}cancelActiveOperations(e){let t=this.operationResetController;if(this.operationResetController=new AbortController,!t.signal.aborted)try{t.abort(Vn(e,"Operation cancelled"))}catch{try{t.abort()}catch{}}}dispose(){this.cancelActiveOperations("engine dispose"),this.cancelWorkspaceSync("engine dispose"),this.cancelIndexing("dispose");try{Ks.getInstance(this.projectPath).reset()}catch{}try{let{SnapshotStatusTracker:e}=(ua(),be(la));e.getInstance(this.projectPath).complete()}catch{}try{let{FTSStatusTracker:e}=(Mu(),be(zf));e.getInstance(this.projectPath).complete()}catch{}if(this._indexer&&typeof this._indexer.dispose=="function")try{this._indexer.dispose("engine dispose")}catch{}this._indexer=void 0;for(let e of Array.from(this.transientIndexers))this.disposeTransientIndexer(e,"engine dispose");if(this.snapshotter){try{this.snapshotter.dispose()}catch{}this.snapshotter=void 0}}async drainPendingProjectSync(e="external wait"){let t=this.pendingProjectSync;t&&(V("[ProjectSync] drain requested",{reason:e,syncId:this.pendingProjectSyncId??null,pendingReason:this.pendingProjectSyncReason??null,queuedForMs:this.pendingProjectSyncEnqueuedAt?Date.now()-this.pendingProjectSyncEnqueuedAt:null,batchInProgress:this.batchInProgress,batchPhase:this.batchPhase??null}),await t,V("[ProjectSync] drain complete",{reason:e,syncId:this.pendingProjectSyncId??null,pendingReason:this.pendingProjectSyncReason??null}))}setRuntimeOptions(e){this.languageSupport=e?.languageSupport,this.lspHost=e?.lspHost;try{V("setRuntimeOptions",{projectPath:this.projectPath,hasLanguageSupport:!!this.languageSupport,hasLspHost:!!this.lspHost})}catch{}}getIndexingStore(){return this.indexingStore||(this.indexingStore=new sr(this.projectPath)),this.indexingStore}readLanguageSupportReconcileState(){try{let e=this.getIndexingStore().getIndexerMeta(ZC);if(!e)return null;let t=JSON.parse(e);if(!t||typeof t!="object")return null;let r=t.state==="pending"||t.state==="applying"||t.state==="applied"?t.state:null;return r?{state:r,desiredEnabledLanguages:Array.isArray(t.desiredEnabledLanguages)?t.desiredEnabledLanguages.filter(s=>typeof s=="string"):[],appliedEnabledLanguages:Array.isArray(t.appliedEnabledLanguages)?t.appliedEnabledLanguages.filter(s=>typeof s=="string"):[],updatedAt:typeof t.updatedAt=="number"?t.updatedAt:Date.now(),message:typeof t.message=="string"?t.message:"",startedAt:typeof t.startedAt=="number"?t.startedAt:void 0,completedAt:typeof t.completedAt=="number"?t.completedAt:void 0,purgedIndexedFiles:typeof t.purgedIndexedFiles=="number"?t.purgedIndexedFiles:void 0,coldWorkspace:typeof t.coldWorkspace=="boolean"?t.coldWorkspace:void 0,pendingRestart:typeof t.pendingRestart=="boolean"?t.pendingRestart:void 0,lastError:typeof t.lastError=="string"?t.lastError:void 0}:null}catch{return null}}writeLanguageSupportReconcileState(e){this.getIndexingStore().setIndexerMeta(ZC,`${JSON.stringify(e)}
|
|
866
|
+
`},"replace-body":{op:"replace-body",path:"src/app.ts#FD:0",expectedHash:"p123:c456",with:"console.log(1);"},"filter-map-reduce":{op:"filter-map-reduce",query:{lang:["ts","js"],scope:{workspace:!0},datalog:{query:'[:find ?n :where [?n :node/name "init"]]',bindings:["?n"],result:{nodeVar:"?n"}},page:{limit:20,cursor:null}},transforms:[{op:"replace",path:"$MATCH",with:"function initApp() {}"}]},"shell-command":{op:"shell-command",command:"npm test",reason:"Verify the current change."},"diff-snapshots":{op:"diff-snapshots",head:"S_current",base:"S_previous"},"set-enabled-languages":{op:"set-enabled-languages"},"get-snapshot-trailers":{op:"get-snapshot-trailers",snapshotId:"S_current",keys:["message"]},"get-snapshot-file":{op:"get-snapshot-file",snapshotId:"S_current",path:"src/app.ts"},"snapshot-worktree":{op:"snapshot-worktree",message:"checkpoint"},"restore-snapshot":{op:"restore-snapshot",snapshotId:"S_previous"},"restore-files":{op:"restore-files",snapshotId:"S_previous",files:["src/app.ts"]},"add-exclude-dir":{op:"add-exclude-dir",directory:"dist/"},"remove-exclude-dir":{op:"remove-exclude-dir",directory:"dist/"}}});var BS={};Lt(BS,{SnapshotService:()=>zS});var OC,LS,zS,qS=ne(()=>{"use strict";OC=q(require("path")),LS=q(require("fs"));da();zS=class{static async takeSnapshotNow(e,t,r,s,i,o,a){lt(a,"Snapshot cancelled");let c=f=>f.replace(/^\.\//,"").replace(/\\/g,"/"),l=Array.from(new Set((t||[]).map(c))).filter(Boolean),u=[];for(let f=0;f<l.length;f++){f>0&&f%128===0&&await qu(a),lt(a,"Snapshot cancelled");let m=l[f],h=OC.default.join(e,m);LS.default.existsSync(h)&&LS.default.statSync(h).isFile()&&u.push(m)}let{openSnapshotsDb:d}=(wi(),be(_o)),p=d(e);try{lt(a,"Snapshot cancelled");let{SnapshotManager:f}=(Zm(),be(Km)),m=new f(p,e),h={"AST-Op":r,"AST-Receipt":JSON.stringify(s||{})};if(i)for(let[b,S]of Object.entries(i))h[b]=S;let{snapshotId:g,parentId:y}=await m.createSnapshotFromFiles(u,{op:r,description:"apply",params:h,dbWrite:"immediate",deleted:Array.isArray(o)?o:void 0},a);lt(a,"Snapshot cancelled");try{await m.indexSnapshotBlobsNodes(p,g,y),console.info(`[SnapshotService] Blob node index updated snapshot=${g} parent=${y||"none"}`)}catch(b){console.log(`[SnapshotService] Blob node indexing failed snapshot=${g}: ${b?.message||b}`)}return{snapshotId:g,parentId:y}}finally{try{p.close()}catch{}}}}});var $C={};Lt($C,{TypeInference:()=>HS});var qr,HS,jC=ne(()=>{"use strict";qr=require("ts-morph"),HS=class{static{this.typeCache=new Map}static{this.MAX_CACHE_SIZE=1e3}static getCacheKey(e){let t=e.getSourceFile(),r=e.getStart(),s=e.getEnd();return`${t.getFilePath()}:${r}-${s}`}static clearCache(){this.typeCache.clear()}static addToCache(e,t){this.typeCache.size>=this.MAX_CACHE_SIZE&&Array.from(this.typeCache.keys()).slice(0,100).forEach(s=>this.typeCache.delete(s)),this.typeCache.set(e,t)}static inferIdentifierType(e){let t=this.getCacheKey(e),r=this.typeCache.get(t);if(r)return r;try{let s=e.getSymbol();if(s){let c=s.getTypeAtLocation(e),l=this.typeToString(c);return this.addToCache(t,l),l}let i=e.getDefinitions();if(i.length>0){let l=i[0].getDeclarationNode();if(l){if(qr.Node.isVariableDeclaration(l))return this.inferVariableType(l);if(qr.Node.isParameterDeclaration(l))return this.inferParameterType(l)}}let o=e.getParent();if(qr.Node.isPropertyAccessExpression(o))return this.inferPropertyAccessType(o);let a="any";return this.addToCache(t,a),a}catch{return this.addToCache(t,"any"),"any"}}static inferVariableType(e){let t=e.getTypeNode();if(t)return t.getText();let r=e.getInitializer();return r?this.inferExpressionType(r):"any"}static inferParameterType(e){let t=e.getTypeNode();if(t)return t.getText();let r=e.getInitializer();return r?this.inferExpressionType(r):"any"}static inferExpressionType(e){try{let t=e.getType();return this.typeToString(t)}catch{if(qr.Node.isStringLiteral(e))return"string";if(qr.Node.isNumericLiteral(e))return"number";if(qr.Node.isTrueLiteral(e)||qr.Node.isFalseLiteral(e))return"boolean";if(qr.Node.isArrayLiteralExpression(e)){let t=e.getElements();return t.length>0?`${this.inferExpressionType(t[0])}[]`:"any[]"}else{if(qr.Node.isObjectLiteralExpression(e))return this.inferObjectLiteralType(e);if(qr.Node.isCallExpression(e))return this.inferCallExpressionType(e)}return"any"}}static inferPropertyAccessType(e){try{let t=e.getType();return this.typeToString(t)}catch{let t=e.getName();return t==="length"?"number":t==="toString"?"() => string":t.startsWith("is")||t.startsWith("has")?"boolean":"any"}}static inferObjectLiteralType(e){let t=e.getProperties();if(t.length===0)return"{}";let r=[];for(let s of t.slice(0,3))if(qr.Node.isPropertyAssignment(s)){let i=s.getName(),o=s.getInitializer();if(o){let a=this.inferExpressionType(o);r.push(`${i}: ${a}`)}}return t.length>3&&r.push("..."),`{ ${r.join(", ")} }`}static inferCallExpressionType(e){try{let t=e.getReturnType();return this.typeToString(t)}catch{let t=e.getExpression().getText();return t.includes("fetch")?"Promise<Response>":t.includes("getElementById")?"HTMLElement | null":t.includes("querySelector")?"Element | null":t.includes("parseInt")?"number":t.includes("JSON.parse")?"any":t.includes("JSON.stringify")?"string":"any"}}static typeToString(e){if(!e)return"any";if(e.isLiteral()){if(e.isStringLiteral())return"string";if(e.isNumberLiteral())return"number";if(e.isBooleanLiteral())return"boolean"}let r=e.getText().replace(/import\([^)]*\)\./g,"").replace(/\n/g," ").replace(/\s+/g," ").trim();if(r.length>50){if(r.includes("Promise<")){let s=r.match(/Promise<([^>]+)>/);if(s)return`Promise<${this.simplifyType(s[1])}>`}if(e.isArray()){let s=e.getArrayElementType();if(s)return`${this.typeToString(s)}[]`}return"any"}return r}static simplifyType(e){return e=e.replace(/import\([^)]*\)\./g,""),e=e.replace(/\w+\./g,""),e.split("|").length>3?"any":e}static inferParameterTypes(e,t){let r=[];t.forEachDescendant(s=>{if(qr.Node.isIdentifier(s)){let i=s.getText();if(e.includes(i)&&!r.find(o=>o.name===i)){let o=this.inferIdentifierType(s);r.push({name:i,type:o})}}});for(let s of e)r.find(i=>i.name===s)||r.push({name:s,type:"any"});return r}static inferReturnType(e){for(let r of e){let s=[];if(r.forEachDescendant(i=>{qr.Node.isReturnStatement(i)&&s.push(i)}),s.length>0){let o=s[0].getExpression();if(o){let a=this.inferExpressionType(o);if(a!=="any")return a}}}let t=e.map(r=>r.getText()).join(`
|
|
867
|
+
`);return t.includes("return results")||t.includes("return items")?"any[]":t.includes("return true")||t.includes("return false")?"boolean":t.includes("return")&&!t.includes("return;")?"any":"void"}}});var qC={};Lt(qC,{TextFileEditExecutor:()=>WS});function LC(n){return BC.default.createHash("sha256").update(n,"utf8").digest("hex")}function s1(n){return n.replace(/\\/g,"/")}function zC(n,e){let t=La.default.relative(n,e);return t===""||!!t&&!t.startsWith("..")&&!La.default.isAbsolute(t)}function i1(n,e){let t=String(e||"").trim();if(!t)return{abs:n,rel:"",error:'Parameter "file" is required.'};if(t.includes("\0"))return{abs:n,rel:"",error:'Parameter "file" contains an invalid NUL byte.'};let r=La.default.resolve(n),s=La.default.resolve(r,t);if(!zC(r,s))return{abs:s,rel:"",error:"Text edits are restricted to files inside the workspace root."};let i=s1(La.default.relative(r,s)),o=i.split("/").filter(Boolean);if(o[0]!==".clj-kondo")return{abs:s,rel:i,error:"edit-file-text is restricted to .clj-kondo config and hook files."};if(o.includes(".cache"))return{abs:s,rel:i,error:"edit-file-text refuses .clj-kondo/.cache files."};let a=La.default.extname(i).toLowerCase();if(!(i===".clj-kondo/config.edn"||a===".edn"||a===".clj"||a===".cljc"||a===".cljs"))return{abs:s,rel:i,error:"edit-file-text only supports .clj-kondo EDN and Clojure hook/source files."};try{let l=(Qc.default.realpathSync.native??Qc.default.realpathSync)(r),u=(Qc.default.realpathSync.native??Qc.default.realpathSync)(s);if(!zC(l,u))return{abs:s,rel:i,error:"Resolved file path escapes the workspace root."}}catch{return{abs:s,rel:i,error:"edit-file-text requires an existing regular file."}}try{if(!Qc.default.statSync(s).isFile())return{abs:s,rel:i,error:"edit-file-text target must be a regular file."}}catch{return{abs:s,rel:i,error:"edit-file-text requires an existing regular file."}}return{abs:s,rel:i}}function o1(n,e){let t=n,r=0;for(let s=0;s<e.length;s+=1){let i=e[s];if(typeof i?.old!="string"||typeof i?.new!="string")return{text:t,applied:r,error:`replacements[${s}] requires string old and new fields.`};if(i.old.length===0)return{text:t,applied:r,error:`replacements[${s}].old must be non-empty.`};let o=t.split(i.old).length-1;if(o===0)return{text:t,applied:r,error:`replacements[${s}].old was not found.`};if(!i.replaceAll&&o!==1)return{text:t,applied:r,error:`replacements[${s}].old matched ${o} times; set replaceAll=true or use a more specific old string.`};t=i.replaceAll?t.split(i.old).join(i.new):t.replace(i.old,i.new),r+=i.replaceAll?o:1}return{text:t,applied:r}}function a1(n,e){let t=[];for(let s=0;s<e.length;s+=1){let i=e[s];if(!i||typeof i.with!="string")return{text:n,applied:0,error:`edits[${s}] requires a string with field.`};let o=Number(i.start),a=Number(i.end);if(!Number.isInteger(o)||!Number.isInteger(a)||o<0||a<o||a>n.length)return{text:n,applied:0,error:`edits[${s}] has invalid character offsets.`};t.push({...i,start:o,end:a,index:s})}t.sort((s,i)=>i.start-s.start);for(let s=1;s<t.length;s+=1)if(t[s].end>t[s-1].start)return{text:n,applied:0,error:`edits[${t[s].index}] overlaps another edit.`};let r=n;for(let s of t)r=r.slice(0,s.start)+s.with+r.slice(s.end);return{text:r,applied:t.length}}var BC,Qc,La,WS,HC=ne(()=>{"use strict";BC=q(require("crypto")),Qc=q(require("fs")),La=q(require("path"));kr();WS=class{static async execute(e,t){let r=i1(t.projectRoot,e.file);if(r.error)return{success:!1,error:r.error,error_code:"validation_failed"};let s=String(e.expectedSha256||"").trim().toLowerCase();if(!/^[a-f0-9]{64}$/.test(s))return{success:!1,error:"expectedSha256 must be a 64-character lowercase hex SHA-256 of the current file text.",error_code:"validation_failed"};let i=Pe(r.abs),o=LC(i);if(o!==s)return{success:!1,error:"SHA-256 mismatch for text edit target. Re-read the file and retry with the current expectedSha256.",error_code:"hash_mismatch",details:{file:r.rel,expectedSha256:s,actualSha256:o}};if([typeof e.content=="string",Array.isArray(e.replacements),Array.isArray(e.edits)].filter(Boolean).length!==1)return{success:!1,error:"Provide exactly one of content, replacements, or edits.",error_code:"validation_failed"};let c=i,l=1;if(typeof e.content=="string")c=e.content;else if(Array.isArray(e.replacements)){if(e.replacements.length===0)return{success:!1,error:"replacements must be non-empty.",error_code:"validation_failed"};let d=o1(i,e.replacements);if(d.error)return{success:!1,error:d.error,error_code:"validation_failed",details:{file:r.rel}};c=d.text,l=d.applied}else if(Array.isArray(e.edits)){if(e.edits.length===0)return{success:!1,error:"edits must be non-empty.",error_code:"validation_failed"};let d=a1(i,e.edits);if(d.error)return{success:!1,error:d.error,error_code:"validation_failed",details:{file:r.rel}};c=d.text,l=d.applied}if(c===i)return{success:!0,message:"No text changes were needed.",details:{changedFiles:[],allChangedFiles:[],file:r.rel,appliedEdits:0,sha256:o}};un(r.abs,c);let u=LC(c);return{success:!0,message:`Edited ${r.rel}`,details:{changedFiles:[r.rel],allChangedFiles:[r.rel],file:r.rel,appliedEdits:l,previousSha256:o,sha256:u,receipt:{op:"edit-file-text",target:r.rel,appliedEdits:l,previousSha256:o,sha256:u,textOnly:!0}}}}}});var WC=ne(()=>{"use strict"});var UC={};Lt(UC,{AtomicExecutor:()=>US});var US,KC=ne(()=>{"use strict";ru();SS();fd();bd();gd();WC();US=class{static async execute(e,t,r,s){let i=String(e.op||""),o=["find-nodes"],a=i==="add-code"?"insert":i==="replace-body"?"replace":i;if(a!=="find-nodes"){let d=!o.includes(a),p=a==="insert"&&e.createFileIfMissing===!0;if(d&&!p&&!("expectedHash"in e))return{success:!1,error:`Operation ${e.op} requires expectedHash field.`}}let c;switch(a){case"find-nodes":c=await Da.execute(e,t,r);break;case"insert":c=await Ji.execute({...e,op:"insert"},t,r);break;case"replace":i==="replace-body"||e.scope==="body"?c=await hd.execute({...e,op:"replace",scope:"body"},t,r):c=await yd.execute({...e,op:"replace"},t,r);break;default:c={success:!1,error:`Atomic operation ${e.op} not yet implemented`};break}let u=Ks.getInstance(t.projectRoot).getStatus();if(u.isIndexing){c.indexingStatus=u;let d="Warning: Reindexing in progress, results might not be complete or up to date.";if(u.totalFiles&&u.filesProcessed!==void 0){let p=u.totalFiles-u.filesProcessed;if(d+=` ${p} files remaining`,u.estimatedSecondsRemaining)if(u.estimatedSecondsRemaining<60)d+=` (est. ${u.estimatedSecondsRemaining}s)`;else{let f=Math.ceil(u.estimatedSecondsRemaining/60);d+=` (est. ${f} minute${f>1?"s":""})`}}c.message?c.message+=" "+d:c.message=d}return c}}});function V(n,e){X("CodeEngine",n,e)}function Nn(...n){if(n.length===0)return;let[e,...t]=n;if(typeof e=="string"){if(t.length===0){X("CodeEngine",e);return}if(t.length===1){X("CodeEngine",e,t[0]);return}X("CodeEngine",e,t);return}X("CodeEngine","log",n)}function Mn(n,e){if(!Ht())return;let t=e&&typeof e=="object"&&!Array.isArray(e)?{pid:process.pid,...e}:{pid:process.pid,details:e};X("CodeEngineReindex",n,t)}function c1(n){return n===void 0||n===0||n===1}function l1(n){let e=String(n??"").replace(/\s+/g," ").trim();return e?e.length>160?`${e.slice(0,157)}...`:e:"Unknown diagnostic"}function u1(n){let e=n.flatMap(r=>(r.topNewDiagnostics||[]).map(s=>`${r.path}:${s.line+1}:${s.column+1} ${s.message}`)).slice(0,3);return e.length>0?`Post-operation validation failed; changes rolled back. Top new diagnostics: ${e.join(" | ")}`:`Post-operation validation failed; changes rolled back. Changed files introduced diagnostics: ${n.slice(0,3).map(r=>{let s=Number(r.newDiagnostics||0);return`${r.path} (${r.errors} error(s)${s>0?`, ${s} new`:""})`}).join("; ")}`}function GC(n,e,t,r){if(n==null)return e;let s=typeof n=="number"||typeof n=="string"?Number(n):NaN;return Number.isFinite(s)?Math.max(t,Math.min(r,Math.floor(s))):e}function d1(n,e=500){let t=n.replace(/\s+/g," ").trim();return t.length<=e?t:`${t.slice(0,e)}...`}function p1(n){return new Promise(e=>{let t="",r="",s=0,i=0,o=!1,a=!1,c=!1,l,u=!1,d=(y,b)=>{let S=Math.max(0,n.maxOutputBytes-s-i);if(S<=0){o=!0;return}let _=b.length>S?b.subarray(0,S):b;_.length<b.length&&(o=!0);let R=_.toString("utf8");y==="stdout"?(t+=R,s+=_.length):(r+=R,i+=_.length)},p=()=>{clearTimeout(g);try{n.signal?.removeEventListener("abort",h)}catch{}},f=y=>{c||(c=!0,p(),e({...y,stdout:t,stderr:r,outputTruncated:o}))},m=()=>{try{l&&!u&&(l.kill("SIGTERM"),setTimeout(()=>{try{l&&!u&&l.kill("SIGKILL")}catch{}},1e3).unref?.())}catch{}},h=()=>{m()},g=setTimeout(()=>{a=!0,m()},n.timeoutMs);if(g.unref?.(),n.signal?.aborted){clearTimeout(g),e({exitCode:null,signal:null,timedOut:!1,error:"Command cancelled before start",stdout:"",stderr:"",outputTruncated:!1});return}n.signal?.addEventListener("abort",h,{once:!0});try{l=(0,wd.spawn)(n.command,{cwd:n.cwd,shell:n.shell||!0,env:process.env,stdio:["ignore","pipe","pipe"]})}catch(y){f({exitCode:null,signal:null,timedOut:a,error:y?.message||String(y),stdout:"",stderr:"",outputTruncated:o});return}l.stdout?.on("data",y=>d("stdout",y)),l.stderr?.on("data",y=>d("stderr",y)),l.on("error",y=>{f({exitCode:null,signal:null,timedOut:a,error:y.message,stdout:"",stderr:"",outputTruncated:o})}),l.on("close",(y,b)=>{u=!0,f({exitCode:y,signal:b,timedOut:a,error:n.signal?.aborted?"Command cancelled":void 0,stdout:"",stderr:"",outputTruncated:o})})})}function ps(n){return require("path").resolve(n)}function f1(n){let e=n;if(typeof e.getNameNode=="function"){let t=e.getNameNode();if(t)return t.getStart()}if(typeof e.getName=="function"){let t=e.getName();if(t&&typeof t=="string"){let r=n.getFirstDescendant?.(s=>s.getText?.()===t);if(r&&typeof r.getStart=="function")return r.getStart()}}return null}var wd,KS,ZC,tu,_y=ne(()=>{"use strict";wd=require("child_process"),KS=q(require("fs"));JR();Gl();XE();Mb();kT();aa();lb();ru();Vt();fy();gt();da();Ru();Xo();oa();Bn();Xn();wS();uC();vC();PC();Gm();IC();ts();FC();Zc();ka();dr();ZC="language_support_reconcile";tu=class n{constructor(e,t,r){this.operationCount=0;this.modifyingOpActive=!1;this.operationResetController=new AbortController;this.workspaceSyncController=new AbortController;this.refreshingInProgress=!1;this.refreshingFiles=[];this.pendingProjectSync=null;this.pendingLspWorkspaceSync=null;this.batchInProgress=!1;this.batchRunner=null;this.queuedBatch=null;this.indexExcludeDirs=[];this.pendingStatusReindex=[];this.indexingInProgress=!1;this.pendingFullReindex=!1;this.languageSupportReconcileTask=null;this.languageSupportReconcileQueued=!1;this.initialSnapshotTask=null;this.transientIndexers=new Set;let s=Lp("CodeEngineInit");s("start",{projectPath:e,hasTestProject:!!t}),this.testProject=t;let i=this.resolveInitialProjectPath(e);this.projectPath=i,s("projectPath.set",{projectPath:this.projectPath}),s("projectInit.start"),this.project=Us.initializeProject(this.projectPath,this.testProject),s("projectInit.complete",{sourceFiles:this.project.getSourceFiles().length}),this.snapshotter=new tm(this.projectPath,()=>this.indexExcludeDirs.slice()),s("snapshotter.ready"),this.indexExcludeDirs=Js(this.projectPath),V("Loaded indexExcludeDirs",this.indexExcludeDirs),s("indexExcludes.loaded",{count:this.indexExcludeDirs.length}),this.languageSupport=r?.languageSupport,this.lspHost=r?.lspHost;try{V("constructor runtime wiring",{projectPath:this.projectPath,hasLanguageSupport:!!this.languageSupport,hasLspHost:!!this.lspHost})}catch{}s("initializeXXHash.start"),this.xxHashReady=(async()=>{try{await jb(),s("initializeXXHash.complete")}catch(o){throw Nn("FATAL: Failed to initialize xxHash:",o),o}})(),r?.enableASTStorage&&V("\u{1F4DD} Incremental AST indexing configured. Call startIndexing() when ready.")}static{this.DIAGNOSTIC_VALIDATION_TIMEOUT_MS=Math.max(500,Number(process.env.PANDO_DIAGNOSTIC_VALIDATION_TIMEOUT_MS||"3000"))}static{this.LARGE_INCREMENTAL_BATCH_FILES=Math.max(1e3,Number(process.env.PANDO_INCREMENTAL_FULL_REINDEX_FILE_THRESHOLD||"5000"))}static{this.LARGE_INCREMENTAL_BATCH_PERCENT=Math.max(1,Number(process.env.PANDO_INCREMENTAL_FULL_REINDEX_PERCENT_THRESHOLD||"15"))}static{this.PROJECT_SYNC_HEARTBEAT_MS=Math.max(1e3,Number(process.env.PANDO_PROJECT_SYNC_HEARTBEAT_MS||"5000"))}static{this.PROJECT_SYNC_SUPERSEDE_SETTLE_MS=Math.max(25,Number(process.env.PANDO_PROJECT_SYNC_SUPERSEDE_SETTLE_MS||"250"))}static{this.RESTORE_FAST_PATH_MAX_AGE_MS=Math.max(1e3,Number(process.env.PANDO_RESTORE_FAST_PATH_MAX_AGE_MS||"300000"))}cancelWorkspaceSync(e){let t=this.workspaceSyncController;if(this.workspaceSyncController=new AbortController,!t.signal.aborted)try{t.abort(Vn(e,"Workspace sync cancelled"))}catch{try{t.abort()}catch{}}}clearPendingProjectSyncState(e){e&&this.pendingProjectSyncToken!==e||(this.pendingProjectSync=null,this.pendingProjectSyncToken=void 0,this.pendingProjectSyncId=void 0,this.pendingProjectSyncEnqueuedAt=void 0,this.pendingProjectSyncReason=void 0)}invalidateRestoreFastPathState(e,t){this.restoreFastPathState&&(V("[RestoreFastPath] invalidated",{reason:e,currentSnapshotId:this.restoreFastPathState.currentSnapshotId,sourceOp:this.restoreFastPathState.sourceOp??null,ageMs:Date.now()-this.restoreFastPathState.createdAt,...t||{}}),this.restoreFastPathState=void 0)}recordRestoreFastPathState(e,t){let r=typeof t?.snapshotAfter=="string"?String(t.snapshotAfter).trim():"";if(!r||r==="<none>"){this.invalidateRestoreFastPathState("missing-snapshot-after",{op:e??null,success:!!t?.success});return}this.restoreFastPathState={currentSnapshotId:r,sourceOp:e??null,createdAt:Date.now()},V("[RestoreFastPath] state.recorded",{currentSnapshotId:r,sourceOp:e??null})}installRestoreFastPathMetadata(e,t){let r=this.restoreFastPathState;if(!r){t.clearOperationMetadata(e,xd);return}let s=Date.now()-r.createdAt;if(s>n.RESTORE_FAST_PATH_MAX_AGE_MS){this.invalidateRestoreFastPathState("stale",{ageMs:s}),t.clearOperationMetadata(e,xd);return}t.setOperationMetadata(e,xd,r),V("[RestoreFastPath] metadata.installed",{currentSnapshotId:r.currentSnapshotId,sourceOp:r.sourceOp??null,ageMs:s})}async supersedePendingProjectSyncForRestore(e){let t=this.pendingProjectSync;if(!t)return;let r=Date.now();V("[ProjectSync] superseding for restore",{operation:e??null,syncId:this.pendingProjectSyncId??null,reason:this.pendingProjectSyncReason??null,queuedForMs:this.pendingProjectSyncEnqueuedAt?Date.now()-this.pendingProjectSyncEnqueuedAt:null,queuedBatch:this.describeQueuedBatch(),batchInProgress:this.batchInProgress,batchPhase:this.batchPhase??null}),this.queuedBatch=null,this.clearPendingProjectSyncState(),this.cancelWorkspaceSync(`${String(e||"restore-snapshot")} superseded pending project sync`);let s=n.PROJECT_SYNC_SUPERSEDE_SETTLE_MS,i,o=new Promise(a=>{i=setTimeout(()=>a("timeout"),s),i.unref?.()});try{let a=await Promise.race([t.then(()=>"settled").catch(c=>(zi(c)||V("[ProjectSync] supersede settle saw failure",{operation:e??null,message:c?.message||String(c)}),"settled")),o]);V("[ProjectSync] supersede settle complete",{operation:e??null,settled:a,settleTimeoutMs:s,durationMs:Date.now()-r})}finally{i&&clearTimeout(i)}}async collectDiagnostics(e,t){let r=Date.now();try{V("collectDiagnostics:start",{projectPath:this.projectPath,files:t,hasEngineLspHost:!!this.lspHost,hasContextLspHost:!!e.lsp})}catch{}if(!e.lsp)if(this.lspHost)e.setLspHost(this.lspHost);else try{let{CodeEngineFactory:u}=(ws(),be(yc)),d=u.getEngineOptions(this.projectPath);d?.lspHost&&e.setLspHost(d.lspHost),V("collectDiagnostics:recoveredRuntimeOptions",{projectPath:this.projectPath,hasStoredLspHost:!!d?.lspHost})}catch{}let s=e.lsp;try{V("collectDiagnostics:resolvedHost",{projectPath:this.projectPath,hasLspHost:!!s})}catch{}let i=new Map,o=require("path"),a=require("fs"),{resolveLanguageIdForPath:c}=(Bn(),be(eb)),{getClojureDiagnostics:l}=(Vs(),be(jE));for(let u of t){let d=Date.now(),p=o.isAbsolute(u)?u:o.join(this.projectPath,u);if(!a.existsSync(p))continue;let f;try{f=c(p);let m;if(f==="clojure")m=l(this.projectPath,p);else{if(!s)continue;m=await Promise.race([s.diagnostics(p),new Promise((b,S)=>setTimeout(()=>S(new Error("__pando_diag_timeout__")),n.DIAGNOSTIC_VALIDATION_TIMEOUT_MS))])}let h=new Set,g=[],y=0;for(let b of m||[]){let S=b.severity;if(c1(S)){y+=1;let _=b.range,R=`${b.message??""}|${_?.start?.line??0}:${_?.start?.character??0}-${_?.end?.line??0}:${_?.end?.character??0}`;h.add(R),g.length<10&&g.push({signature:R,message:l1(b.message),line:Number(_?.start?.line??0),column:Number(_?.start?.character??0)})}}i.set(u,{errors:y,signatures:h,diagnostics:g})}catch(m){if(String(m?.message||m||"")==="__pando_diag_timeout__"){i.set(u,{errors:0,signatures:new Set,skipped:!0});continue}i.set(u,{errors:1,signatures:new Set(["diagnostics_error"])})}finally{let m=Date.now()-d;m>1e3&&V("collectDiagnostics:file.slow",{projectPath:this.projectPath,file:u,lang:f??null,durationMs:m})}}return V("collectDiagnostics:complete",{projectPath:this.projectPath,files:t.length,captured:i.size,durationMs:Date.now()-r}),i}async validateChangedFiles(e,t,r){try{V("validateChangedFiles:start",{projectPath:this.projectPath,changedFiles:t,hasEngineLspHost:!!this.lspHost,hasContextLspHost:!!e.lsp})}catch{}if(!e.lsp)if(this.lspHost)e.setLspHost(this.lspHost);else try{let{CodeEngineFactory:l}=(ws(),be(yc)),u=l.getEngineOptions(this.projectPath);u?.lspHost&&e.setLspHost(u.lspHost),V("validateChangedFiles:recoveredRuntimeOptions",{projectPath:this.projectPath,hasStoredLspHost:!!u?.lspHost})}catch{}let{resolveLanguageIdForPath:s}=(Bn(),be(eb)),i=t.some(l=>{let u=require("path").isAbsolute(l)?l:require("path").join(this.projectPath,l);return s(u)!=="clojure"});if(!e.lsp&&i){try{V("validateChangedFiles:skippedNoHost",{projectPath:this.projectPath})}catch{}return{ok:!0,skipped:!0,warning:"Post-operation validation skipped: no active LSP host."}}let o=await this.collectDiagnostics(e,t),a=[],c=[];for(let l of t){let u=o.get(l);if(!u)continue;let d=r?.get(l);if(!d)continue;if(d.skipped||u.skipped){c.push(l);continue}let p=Array.from(u.signatures).filter(f=>!d.signatures.has(f)).length;if(u.errors>d.errors||p>0){let f=(u.diagnostics||[]).filter(m=>!d.signatures.has(m.signature)).slice(0,3).map(({signature:m,...h})=>h);a.push({path:l,errors:u.errors,newDiagnostics:p,topNewDiagnostics:f})}}if(a.length>0){let l=a.flatMap(u=>(u.topNewDiagnostics||[]).map(d=>`${u.path}:${d.line+1}:${d.column+1} ${d.message}`)).slice(0,3);return{ok:!1,errors:a,topDiagnostics:l,error:u1(a)}}return c.length>0?{ok:!0,skipped:!0,warning:`Post-operation validation skipped for ${c.length} file(s) because diagnostics did not respond within ${n.DIAGNOSTIC_VALIDATION_TIMEOUT_MS}ms.`}:{ok:!0}}extractTouchedFiles(e){let t=new Set,r=i=>{if(typeof i!="string"||!i.trim())return;let o=i.split("#")[0];o&&t.add(o)},s=i=>{if(typeof i=="string"){r(i);return}if(i&&typeof i=="object"){let o=i;r(o.before),r(o.after),r(o.start),r(o.end),r(o.bodyStartOf),r(o.bodyEndOf)}};if(r(e?.path),Array.isArray(e?.path))for(let i of e.path)r(i);if(r(e?.of),s(e?.to),Array.isArray(e?.files))for(let i of e.files)r(i);return Array.from(t)}async preflightExpectedHashCheck(e,t,r){let s=typeof e?.expectedHash=="string"?e.expectedHash.trim():"";if(!s||s.includes("@"))return{ok:!0};let i=tS(e),o=typeof i=="string"&&/:FunctionArity(?:@|$)/.test(i);try{if(!o&&await Ei(t,e,r))return{ok:!0}}catch(a){return{ok:!1,error:a?.message||String(a)}}if(typeof i!="string"||!i.includes("#"))return{ok:!0};try{let a=await Br(this.projectPath,i);if(!a)return{ok:!0};let c=et(i,a.text),l=s.startsWith("@")?s:`@${s}`,u=on(l,c);if(u.type!=="MATCH")return{ok:!1,error:`Hash mismatch (${u.type}). Re-run find-nodes to refresh the target.`}}catch{return{ok:!0}}return{ok:!0}}get indexer(){return this._indexer||(this._indexer=new ma(this.projectPath,void 0,{excludeDirs:this.indexExcludeDirs,languageSupport:this.languageSupport})),this._indexer}createTransientIndexer(e="transient"){let t=Rs(),r=ks("indexer-worker");V("[IndexerDiag] createTransientIndexer",{projectPath:this.projectPath,reason:e,activeTransientIndexers:this.transientIndexers.size,workerScript:r,workerScriptExists:r?KS.default.existsSync(r):!1,runtimePaths:t,env:{runtimeRoot:process.env.PANDO_RUNTIME_ROOT??null,workerRoot:process.env.PANDO_WORKER_SCRIPT_DIR??null}});let s=new ma(this.projectPath,void 0,{excludeDirs:this.indexExcludeDirs,languageSupport:this.languageSupport});return this.transientIndexers.add(s),s}disposeTransientIndexer(e,t="transient indexer complete"){if(e){V("[IndexerDiag] disposeTransientIndexer",{projectPath:this.projectPath,reason:t,activeTransientIndexers:this.transientIndexers.size}),this.transientIndexers.delete(e);try{e.dispose(t)}catch{}}}async withTransientIndexer(e,t="transient run"){let r=this.createTransientIndexer(t);try{return await e(r)}finally{this.disposeTransientIndexer(r,t)}}cancelIndexing(e){if(this._indexer)try{this._indexer.cancelIndexing(e)}catch{}for(let t of Array.from(this.transientIndexers))try{t.cancelIndexing(e)}catch{}}cancelActiveOperations(e){let t=this.operationResetController;if(this.operationResetController=new AbortController,!t.signal.aborted)try{t.abort(Vn(e,"Operation cancelled"))}catch{try{t.abort()}catch{}}}dispose(){this.cancelActiveOperations("engine dispose"),this.cancelWorkspaceSync("engine dispose"),this.cancelIndexing("dispose");try{Ks.getInstance(this.projectPath).reset()}catch{}try{let{SnapshotStatusTracker:e}=(ua(),be(la));e.getInstance(this.projectPath).complete()}catch{}try{let{FTSStatusTracker:e}=(Mu(),be(zf));e.getInstance(this.projectPath).complete()}catch{}if(this._indexer&&typeof this._indexer.dispose=="function")try{this._indexer.dispose("engine dispose")}catch{}this._indexer=void 0;for(let e of Array.from(this.transientIndexers))this.disposeTransientIndexer(e,"engine dispose");if(this.snapshotter){try{this.snapshotter.dispose()}catch{}this.snapshotter=void 0}}async drainPendingProjectSync(e="external wait"){let t=this.pendingProjectSync;t&&(V("[ProjectSync] drain requested",{reason:e,syncId:this.pendingProjectSyncId??null,pendingReason:this.pendingProjectSyncReason??null,queuedForMs:this.pendingProjectSyncEnqueuedAt?Date.now()-this.pendingProjectSyncEnqueuedAt:null,batchInProgress:this.batchInProgress,batchPhase:this.batchPhase??null}),await t,V("[ProjectSync] drain complete",{reason:e,syncId:this.pendingProjectSyncId??null,pendingReason:this.pendingProjectSyncReason??null}))}setRuntimeOptions(e){this.languageSupport=e?.languageSupport,this.lspHost=e?.lspHost;try{V("setRuntimeOptions",{projectPath:this.projectPath,hasLanguageSupport:!!this.languageSupport,hasLspHost:!!this.lspHost})}catch{}}getIndexingStore(){return this.indexingStore||(this.indexingStore=new sr(this.projectPath)),this.indexingStore}readLanguageSupportReconcileState(){try{let e=this.getIndexingStore().getIndexerMeta(ZC);if(!e)return null;let t=JSON.parse(e);if(!t||typeof t!="object")return null;let r=t.state==="pending"||t.state==="applying"||t.state==="applied"?t.state:null;return r?{state:r,desiredEnabledLanguages:Array.isArray(t.desiredEnabledLanguages)?t.desiredEnabledLanguages.filter(s=>typeof s=="string"):[],appliedEnabledLanguages:Array.isArray(t.appliedEnabledLanguages)?t.appliedEnabledLanguages.filter(s=>typeof s=="string"):[],updatedAt:typeof t.updatedAt=="number"?t.updatedAt:Date.now(),message:typeof t.message=="string"?t.message:"",startedAt:typeof t.startedAt=="number"?t.startedAt:void 0,completedAt:typeof t.completedAt=="number"?t.completedAt:void 0,purgedIndexedFiles:typeof t.purgedIndexedFiles=="number"?t.purgedIndexedFiles:void 0,coldWorkspace:typeof t.coldWorkspace=="boolean"?t.coldWorkspace:void 0,pendingRestart:typeof t.pendingRestart=="boolean"?t.pendingRestart:void 0,lastError:typeof t.lastError=="string"?t.lastError:void 0}:null}catch{return null}}writeLanguageSupportReconcileState(e){this.getIndexingStore().setIndexerMeta(ZC,`${JSON.stringify(e)}
|
|
868
868
|
`)}hasCompletedIndexRun(){try{let e=this.getIndexingStore();if(e.getIndexingSession()?.run_state==="completed")return!0;let r=e.getIndexerMeta("indexing_session_stats");if(r)try{if(JSON.parse(r)?.runState==="completed")return!0}catch{}return!1}catch{return!1}}async waitForIndexingToSettle(e=3e4){let t=Date.now()+Math.max(1e3,e);for(;this.indexingInProgress&&Date.now()<t;)await new Promise(r=>setTimeout(r,100));return!this.indexingInProgress}enqueueLanguageSupportReconcile(){if(this.languageSupportReconcileTask){this.languageSupportReconcileQueued=!0;return}this.languageSupportReconcileTask=(async()=>{do this.languageSupportReconcileQueued=!1,await this.runLanguageSupportReconcile();while(this.languageSupportReconcileQueued)})().catch(e=>{let t=Jo(this.projectPath).enabledLanguages;this.writeLanguageSupportReconcileState({state:"pending",desiredEnabledLanguages:t,appliedEnabledLanguages:this.readLanguageSupportReconcileState()?.appliedEnabledLanguages??t,updatedAt:Date.now(),message:"Language support reconcile failed; config is saved but not fully applied yet.",lastError:e instanceof Error?e.message:String(e)}),V("language support reconcile failed",{projectPath:this.projectPath,error:e instanceof Error?e.message:String(e)})}).finally(()=>{this.languageSupportReconcileTask=null,this.languageSupportReconcileQueued&&this.enqueueLanguageSupportReconcile()})}async runLanguageSupportReconcile(){let e=Jo(this.projectPath).enabledLanguages,t=this.readLanguageSupportReconcileState();this.languageSupport=Vo(this.projectPath);let r=Date.now();if(this.writeLanguageSupportReconcileState({state:"applying",desiredEnabledLanguages:e,appliedEnabledLanguages:t?.appliedEnabledLanguages??e,updatedAt:r,startedAt:r,message:"Applying language support configuration in the background."}),!this.hasCompletedIndexRun()){this.writeLanguageSupportReconcileState({state:"applied",desiredEnabledLanguages:e,appliedEnabledLanguages:e,updatedAt:Date.now(),startedAt:r,completedAt:Date.now(),coldWorkspace:!0,message:"Applied to future indexing; no completed index existed yet."});return}let s=Es(this.languageSupport),i=this.collectIndexedFileRels().filter(l=>{let u=require("path").extname(l).toLowerCase();return!s.has(u)});if(this.cancelIndexing("language support changed"),this._indexer){try{this._indexer.dispose("language support changed")}catch{}this._indexer=void 0}for(let l of Array.from(this.transientIndexers))this.disposeTransientIndexer(l,"language support changed");let o=await this.waitForIndexingToSettle(),a=0;i.length>0&&(a=await this.withTransientIndexer(l=>l.purgeDeleted(i),"purge disabled language files"));let c=!1;o?await this.startIndexing():(c=!0,this.pendingFullReindex=!0),this.writeLanguageSupportReconcileState({state:"applied",desiredEnabledLanguages:e,appliedEnabledLanguages:e,updatedAt:Date.now(),startedAt:r,completedAt:Date.now(),purgedIndexedFiles:a,pendingRestart:c,message:c?"Applied config and purged disabled-language files; a restart of indexing is queued.":"Applied config and reconciled index state."})}computeIndexingEta(){try{let e=this.getIndexingStore(),t=e.getThroughput(),r=e.getPendingStats(),s=typeof t.avg_files_per_sec=="number"&&t.avg_files_per_sec>0?t.avg_files_per_sec:null;if(s&&r.count>0)return{seconds:Math.max(1,Math.ceil(r.count/s)),basis:"files"};let i=typeof t.avg_bytes_per_sec=="number"&&t.avg_bytes_per_sec>0?t.avg_bytes_per_sec:null;if(i&&r.known_bytes>0)return{seconds:Math.max(1,Math.ceil(r.known_bytes/i)),basis:"bytes"}}catch(e){try{X("CodeEngine","computeIndexingEta failed",{error:e?.message||e})}catch{}}return null}isPathExcludedForIndex(e){let t=Date.now(),r=kE(this.projectPath,this.indexExcludeDirs,e),s=Date.now()-t;return V("isPathExcludedForIndex result",{absPath:e,excluded:r,entries:this.indexExcludeDirs}),s>50&&V("[BatchQueue] isPathExcludedForIndex slow",{absPath:e,excluded:r,elapsedMs:s,entries:this.indexExcludeDirs}),r}finishBatch(e,t){let r=this.batchStartMs?Date.now()-this.batchStartMs:null;V("[BatchQueue] finishBatch",{reason:e,elapsedMs:r,phase:this.batchPhase??null,phaseElapsedMs:this.batchPhaseStartMs?Date.now()-this.batchPhaseStartMs:null,...t||{}}),this.batchInProgress=!1,this.batchStartMs=void 0,this.batchPhase=void 0,this.batchPhaseStartMs=void 0,this.batchWatchdogTimer&&(clearInterval(this.batchWatchdogTimer),this.batchWatchdogTimer=void 0),V("[BatchQueue] finishBatch complete",{batchInProgress:this.batchInProgress,indexingInProgress:this.indexingInProgress,refreshingInProgress:this.refreshingInProgress,queuedBatch:this.describeQueuedBatch(),pendingFullReindex:this.pendingFullReindex,pendingStatusReindex:this.pendingStatusReindex.length,watchdogActive:!!this.batchWatchdogTimer})}describeQueuedBatch(){return this.queuedBatch?{created:this.queuedBatch.created.size,modified:this.queuedBatch.modified.size,deleted:this.queuedBatch.deleted.size}:null}mergeQueuedBatch(e,t){this.queuedBatch?this.queuedBatch.source==="post-write-sync"&&t!=="post-write-sync"&&(this.queuedBatch.source=t):this.queuedBatch={created:new Set,modified:new Set,deleted:new Set,source:t};let r=this.queuedBatch,s=a=>{let c=ps(a);r.deleted.delete(c),r.modified.delete(c),r.created.add(c)},i=a=>{let c=ps(a);r.deleted.has(c)||r.created.has(c)||r.modified.add(c)},o=a=>{let c=ps(a);r.created.delete(c),r.modified.delete(c),r.deleted.add(c)};for(let a of e.created)s(a);for(let a of e.modified)i(a);for(let a of e.deleted)o(a);return this.describeQueuedBatch()??{created:0,modified:0,deleted:0}}takeQueuedBatch(){if(!this.queuedBatch)return null;let e={created:Array.from(this.queuedBatch.created),modified:Array.from(this.queuedBatch.modified),deleted:Array.from(this.queuedBatch.deleted),source:this.queuedBatch.source};return this.queuedBatch=null,e.created.length+e.modified.length+e.deleted.length>0?e:null}shouldEscalateBatchToFullReindex(e){if(e>=n.LARGE_INCREMENTAL_BATCH_FILES)return{should:!0,reason:`file-count:${e}>=${n.LARGE_INCREMENTAL_BATCH_FILES}`};if(e<1e3)return{should:!1};try{let t=new sr(this.projectPath).getAllKnownFiles().size,r=Math.max(1,Math.ceil(t*n.LARGE_INCREMENTAL_BATCH_PERCENT/100));if(t>0&&e>=r)return{should:!0,reason:`file-percent:${e}/${t}>=${n.LARGE_INCREMENTAL_BATCH_PERCENT}%`,knownFiles:t}}catch{}return{should:!1}}ensureBatchRunner(){if(this.batchRunner)return this.batchRunner;if(this.indexingInProgress)return Promise.resolve();let e=this.runBatchRunnerLoop().catch(t=>{Nn("[BatchQueue] runner failed",t?.message||t)}).finally(()=>{this.batchRunner===e&&(this.batchRunner=null),this.queuedBatch&&!this.indexingInProgress&&this.ensureBatchRunner()});return this.batchRunner=e,e}async runBatchRunnerLoop(){for(;;){if(this.indexingInProgress)return;let e=this.takeQueuedBatch();if(!e)return;await this.processQueuedBatch(e,this.workspaceSyncController.signal)}}filterExcludedAbsolutePaths(e){if(!this.indexExcludeDirs.length)return e;V("filterExcludedAbsolutePaths input",{count:e.length,sample:e.slice(0,10)});let t=e.filter(r=>!this.isPathExcludedForIndex(r));return V("filterExcludedAbsolutePaths output",{count:t.length,excluded:e.length-t.length,sample:t.slice(0,10)}),t}async handleAddExcludeDir(e){let t=typeof e.directory=="string"?e.directory.trim():"";if(!t)return{success:!1,error:"Parameter 'directory' is required"};let r=Af(this.projectPath,[t]);if(r.length===0)return{success:!1,error:"Directory must be inside the workspace root",details:{directory:t}};let s=r[0];if(V("handleAddExcludeDir normalized entry",{dirInput:t,normalizedEntry:s}),this.indexExcludeDirs.includes(s))return{success:!0,details:{alreadyExcluded:!0,excludeDirs:this.indexExcludeDirs}};let i=[];try{i=(await this.withTransientIndexer(l=>l.scanFiles({relativeDirs:[s]}))).map(l=>l.relPath)}catch(c){return{success:!1,error:`Failed to scan target directory: ${c?.message||c}`}}let o=vE(this.projectPath,s,this.indexExcludeDirs);V("handleAddExcludeDir updated exclude list",o),ob(this.projectPath,o),this.indexExcludeDirs=Js(this.projectPath),V("handleAddExcludeDir reloaded exclude list",this.indexExcludeDirs);let a=0;if(i.length)try{a=await this.withTransientIndexer(c=>c.purgeDeleted(i))}catch(c){return{success:!1,error:`Failed to purge excluded files: ${c?.message||c}`}}return{success:!0,details:{excludeDirs:this.indexExcludeDirs,newlyExcluded:s,purged:a,candidatesRemoved:i.length}}}async handleRemoveExcludeDir(e){let t=typeof e.directory=="string"?e.directory.trim():"";if(!t)return{success:!1,error:"Parameter 'directory' is required"};let r=Af(this.projectPath,[t]);if(r.length===0)return{success:!1,error:"Directory must be inside the workspace root",details:{directory:t}};let s=r[0];if(V("handleRemoveExcludeDir normalized entry",{dirInput:t,normalizedEntry:s}),s===".clj-kondo")return{success:!0,details:{removed:!1,protectedDefault:!0,excludeDirs:this.indexExcludeDirs,message:".clj-kondo remains excluded from semantic indexing by default; use edit-file-text for supported .clj-kondo config/hook edits. .clj-kondo/.cache is always hard-ignored."}};if(!this.indexExcludeDirs.includes(s))return{success:!0,details:{removed:!1,excludeDirs:this.indexExcludeDirs}};let i=RE(this.projectPath,s,this.indexExcludeDirs);V("handleRemoveExcludeDir updated list",i),ob(this.projectPath,i),this.indexExcludeDirs=Js(this.projectPath),V("handleRemoveExcludeDir reloaded exclude list",this.indexExcludeDirs);let o=[];try{let c=await this.withTransientIndexer(l=>l.scanFiles({relativeDirs:[s]}));o=this.filterExcludedAbsolutePaths(c.map(l=>ps(l.absPath)))}catch(c){return{success:!1,error:`Failed to scan newly included directory: ${c?.message||c}`}}let a=0;if(o.length){try{a=(await this.withTransientIndexer(l=>l.indexFiles(o.map(u=>ps(u))))).processed}catch(c){return{success:!1,error:`Failed to index newly included files: ${c?.message||c}`}}try{await this.refreshFilesFromDisk(o)}catch(c){Nn("[ExcludeDirs] refresh failed",c?.message||c)}}return{success:!0,details:{excludeDirs:this.indexExcludeDirs,newlyIncluded:s,indexed:a,candidates:o.length}}}handleGetProjectRoot(){try{return{success:!0,details:{root:this.projectPath}}}catch(e){return{success:!1,error:`Failed to read project root: ${e?.message||e}`}}}collectIndexedFileRels(){let e=new Set,t=[];try{t=KS.default.readdirSync(st(this.projectPath)).filter(s=>s.startsWith(".pando-index-chunk-")&&s.endsWith(".db")).map(s=>require("path").join(st(this.projectPath),s)).sort((s,i)=>s.localeCompare(i))}catch{t=[]}if(t.length===0)return[];let{default:r}=(rn(),be(Jr));for(let s of t){let i;try{i=new r(s,{readonly:!0,fileMustExist:!0});let o=i.prepare("SELECT df.path AS path FROM files f JOIN dict_files df ON f.file_id = df.id").all();for(let a of o)typeof a.path=="string"&&a.path.length>0&&e.add(a.path)}catch{}finally{try{i?.close?.()}catch{}}}return Array.from(e)}async handleSetEnabledLanguages(e){let t;try{t=Jo(this.projectPath)}catch(a){return{success:!1,error:`Failed to read enabled languages: ${a?.message||a}`}}if(!("languages"in e)||e.languages==null)return{success:!0,details:{...t,languageSupportChanged:!1}};if(!Array.isArray(e.languages))return{success:!0,details:{...t,valid:!1,error:"Parameter 'languages' must be an array when provided.",languageSupportChanged:!1}};let r=new Set(t.availableLanguages),s=e.languages.filter(a=>typeof a!="string"||!r.has(a));if(s.length>0)return{success:!0,details:{...t,valid:!1,error:"Invalid enabled language value.",invalidLanguages:s,languageSupportChanged:!1}};let i=Ty(this.projectPath,e.languages),o=JSON.stringify(t.enabledLanguages)===JSON.stringify(i.enabledLanguages);return this.languageSupport=Vo(this.projectPath),o?this.writeLanguageSupportReconcileState({state:"applied",desiredEnabledLanguages:i.enabledLanguages,appliedEnabledLanguages:i.enabledLanguages,updatedAt:Date.now(),completedAt:Date.now(),message:"Language support config already applied."}):(this.writeLanguageSupportReconcileState({state:"pending",desiredEnabledLanguages:i.enabledLanguages,appliedEnabledLanguages:this.readLanguageSupportReconcileState()?.appliedEnabledLanguages??t.enabledLanguages,updatedAt:Date.now(),message:"Language support config saved; reconcile is queued."}),this.enqueueLanguageSupportReconcile()),{success:!0,details:{...i,languageSupportChanged:!o,reconcileScheduled:!o,reconcileState:o?"applied":"pending"}}}async handleSnapshotWorktree(e,t){let r=typeof e.message=="string"?e.message.trim():"",s=e.trailers&&typeof e.trailers=="object"?e.trailers:{},i=(()=>{try{return(ua(),be(la)).SnapshotStatusTracker.getInstance(this.projectPath)}catch{return null}})();if(i&&i.isSnapshotting)return{success:!1,error:"Snapshotting in progress; retry shortly."};let{openSnapshotsDb:o}=(wi(),be(_o)),a=o(this.projectPath);try{lt(t,"snapshot-worktree cancelled");let l=a.prepare("SELECT snapshot_id FROM snapshots ORDER BY timestamp DESC, rowid DESC LIMIT 1").get()?.snapshot_id,u=Xr(this.projectPath,this.indexExcludeDirs),d=SE(this.projectPath,{shouldExclude:u??void 0,gitignoreRoot:this.projectPath}),p=require("path"),f=require("fs"),m=require("crypto"),h=d.map(x=>p.relative(this.projectPath,x).replace(/\\/g,"/")).filter(Boolean).sort((x,w)=>x.localeCompare(w));await qu(t);let g=l?(ei(),be(Zi)).computeEffectiveMap(a,l):new Map,y=x=>{let w=Buffer.from(`blob ${x.length}\0`,"utf8");return m.createHash("sha1").update(w).update(x).digest("hex")},b=[],S=new Set;for(let x=0;x<h.length;x++){x>0&&x%64===0&&await qu(t),lt(t,"snapshot-worktree cancelled");let w=h[x];S.add(w);let D=p.join(this.projectPath,w),F="";try{F=y(f.readFileSync(D))}catch{F=""}let N=g.get(w)?.oid;(!l||N==null||N!==F)&&b.push(w)}lt(t,"snapshot-worktree cancelled");let _=l?Array.from(g.keys()).filter(x=>!S.has(x)).sort((x,w)=>x.localeCompare(w)):[],R={op:"snapshot-worktree",message:r||void 0,timestamp:Date.now(),scannedFilesCount:h.length,changedFilesCount:b.length,deletedFilesCount:_.length};if(b.length===0&&_.length===0){try{i?.complete()}catch{}return this.pendingShellCommandSnapshotFailure=void 0,{success:!0,snapshotBefore:l||"<none>",snapshotAfter:l||"<none>",details:{receipt:R,changedFiles:[],deletedFiles:[],snapshotSkipped:!0,message:"No changes detected since the latest Pando snapshot."}}}let{SnapshotService:E}=(qS(),be(BS)),T={};r&&(T["AST-Message"]=r);for(let[x,w]of Object.entries(s))w!=null&&(T[String(x)]=String(w));try{i?.start(b.length,_.length)}catch{}try{let{snapshotId:x,parentId:w}=await E.takeSnapshotNow(this.projectPath,b,"snapshot-worktree",R,T,_,t);try{i?.complete()}catch{}return this.pendingShellCommandSnapshotFailure=void 0,{success:!0,snapshotBefore:w||l||"<none>",snapshotAfter:x,details:{receipt:R,changedFiles:b,deletedFiles:_}}}catch(x){try{i?.complete()}catch{}throw x}}catch(c){try{i?.complete()}catch{}throw c}finally{try{a.close()}catch{}}}async handlePandoShellCommand(e,t){let r=typeof e.command=="string"?e.command:"",s=typeof e.reason=="string"?e.reason.trim():"",i=GC(e.timeoutMs,12e4,1e3,6e5),o=GC(e.maxOutputBytes,2e5,1024,1e6),a=typeof e.shell=="string"&&e.shell.trim()?e.shell.trim():void 0,c=Date.now(),l=await p1({command:r,cwd:this.projectPath,shell:a,timeoutMs:i,maxOutputBytes:o,signal:t}),u=`shell-command: ${s}`,d;try{d=await this.handleSnapshotWorktree({message:u,trailers:{"AST-Reason":s,"AST-Command":d1(r),"AST-Exit-Code":l.exitCode==null?"":String(l.exitCode),"AST-Timed-Out":String(l.timedOut)}})}catch(h){let g=h?.message||String(h);return this.pendingShellCommandSnapshotFailure={reason:s,command:r,error:g,failedAt:Date.now()},{success:!1,error:`Command completed but snapshot failed: ${g}`,details:{reason:s,command:r,cwd:this.projectPath,shell:a??null,timeoutMs:i,maxOutputBytes:o,commandResult:l,snapshotFailed:!0}}}if(!d?.success){let h=d?.error||"Unknown snapshot failure";return this.pendingShellCommandSnapshotFailure={reason:s,command:r,error:h,failedAt:Date.now()},{success:!1,error:`Command completed but snapshot failed: ${h}`,snapshotBefore:d?.snapshotBefore,snapshotAfter:d?.snapshotAfter,details:{reason:s,command:r,cwd:this.projectPath,shell:a??null,timeoutMs:i,maxOutputBytes:o,commandResult:l,snapshotResult:d,snapshotFailed:!0}}}let p=d?.details||{},f=l.exitCode===0&&!l.timedOut&&!l.error,m=f?void 0:l.timedOut?`Command timed out after ${i}ms`:l.error||`Command exited with code ${l.exitCode??"unknown"}`;return{success:f,...m?{error:m}:{},snapshotBefore:d.snapshotBefore,snapshotAfter:d.snapshotAfter,details:{reason:s,command:r,cwd:this.projectPath,shell:a??null,timeoutMs:i,maxOutputBytes:o,commandResult:l,durationMs:Date.now()-c,receipt:p.receipt,changedFiles:Array.isArray(p.changedFiles)?p.changedFiles:[],deletedFiles:Array.isArray(p.deletedFiles)?p.deletedFiles:[],snapshotSkipped:!!p.snapshotSkipped,snapshotMessage:u}}}getWorktreeChanges(e){try{let t=(0,wd.execFileSync)("git",["rev-parse","--show-prefix"],{cwd:e,encoding:"utf8"}).toString().replace(/\r?\n/g,""),s=(0,wd.execFileSync)("git",["status","--porcelain","-z"],{cwd:e,encoding:"utf8"}).toString().split("\0").filter(Boolean),i=new Set,o=new Set,a=l=>l.replace(/^\.\//,"").replace(/\\/g,"/"),c=l=>{if(!t)return a(l);let u=a(l);return u.startsWith(t)?u.slice(t.length):u};for(let l of s){if(l.length<3)continue;let u=l.slice(0,2),d=l.slice(3);if(!d)continue;let p=u.includes("D"),f=d.split(" -> "),m=c(f[f.length-1].trim());if(m&&(i.add(m),p&&o.add(m)),f.length>1){let h=c(f[0].trim());h&&o.add(h)}}return{ok:!0,changedFiles:Array.from(i),deletedFiles:Array.from(o)}}catch(t){return{ok:!1,error:`Failed to read git worktree status: ${t instanceof Error?t.message:String(t)}`}}}resolveInitialProjectPath(e){return e}evaluateIndexStatus(){let e=require("fs"),t=require("path");try{let{FileChunkMappingStore:r}=(aa(),be(cb)),i=new r(this.projectPath).all();if(!i||i.length===0)return{resetAll:!1,reindexAbs:[]};let o=/^\.pando-index-chunk-(\d+)\.db$/,a=e.readdirSync(st(this.projectPath)),c=new Map;for(let m of a){let h=o.exec(m);if(!h)continue;let g=Number(h[1]);c.set(g,t.join(st(this.projectPath),m))}if(c.size===0)return V("evaluateIndexStatus missing chunk databases",{mappingCount:i.length}),{resetAll:!0,reindexAbs:[]};let{default:l}=(rn(),be(Jr)),u=new Map,d=new Set,p=0;for(let[m,h]of c){let g;try{Nn(`[IndexStatus] open chunk db :: ${h}`),g=new l(h);let y=g.prepare("SELECT COUNT(*) AS c FROM files").get();p+=Number(y?.c||0);let b=g.prepare("SELECT df.path AS file_path, f.status FROM files f JOIN dict_files df ON df.id = f.file_id").all();if(b&&b.length){let S=u.get(m);S||(S=new Set,u.set(m,S));for(let _ of b){let R=String(_.file_path);d.add(R),(!_.status||String(_.status).toLowerCase()!=="completed")&&S.add(R)}S.size===0&&u.delete(m)}}catch(y){return Nn("[IndexStatus] failed to inspect chunk",h,y?.message||y),{resetAll:!0,reindexAbs:[]}}finally{if(g)try{g.close()}catch{}}}for(let m of i)if(!d.has(m.file_path)){let h=u.get(m.chunk_id);h||(h=new Set,u.set(m.chunk_id,h)),h.add(m.file_path)}let f=[];for(let[m,h]of u){let g=c.get(m);if(!g)return V("evaluateIndexStatus missing db path for chunk",{chunkId:m}),{resetAll:!0,reindexAbs:[]};let y=Array.from(h);if(y.length){try{this.purgeFilesFromChunk(g,y)}catch(b){return Nn("[IndexStatus] failed to purge chunk before reindex",g,b?.message||b),{resetAll:!0,reindexAbs:[]}}for(let b of y)f.push(t.join(this.projectPath,b))}}return p===0&&f.length===0?(V("evaluateIndexStatus empty index with no remediation",{mappingCount:i.length}),{resetAll:!0,reindexAbs:[]}):{resetAll:!1,reindexAbs:f}}catch(r){return Nn("[IndexStatus] unable to evaluate status table",r?.message||r),{resetAll:!0,reindexAbs:[]}}}purgeFilesFromChunk(e,t){if(!t||t.length===0)return;let{default:r}=(rn(),be(Jr)),s=new r(e);try{s.transaction(a=>{let c=u=>{for(let d=0;d<a.length;d+=200){let p=a.slice(d,d+200);p.length!==0&&u(p)}},l=(u,d="file_id")=>{c(p=>{let f=p.map(h=>s.prepare("SELECT id FROM dict_files WHERE path = ?").get(h)).map(h=>h?.id).filter(h=>typeof h=="number");if(!f.length)return;let m=f.map(()=>"?").join(",");s.prepare(`DELETE FROM ${u} WHERE ${d} IN (${m})`).run(...f)})};l("nodes"),l("exports"),l("files"),l("file_imports"),l("file_import_bindings"),c(u=>{let d=u.map(f=>s.prepare("SELECT id FROM dict_files WHERE path = ?").get(f)).map(f=>f?.id).filter(f=>typeof f=="number");if(!d.length)return;let p=d.map(()=>"?").join(",");s.prepare(`DELETE FROM file_deps WHERE src_file_id IN (${p})`).run(...d)})})(t),V("purgeFilesFromChunk removed stale entries",{dbPath:e,count:t.length})}catch(i){throw Nn("[IndexStatus] failed to purge chunk entries",e,i?.message||i),i}finally{try{s.close()}catch{}}}prepareIndexingRun(){let e=require("fs");if(!(()=>{try{return e.existsSync(this.projectPath)}catch{return!1}})()){V("prepareIndexingRun skipped; project root missing",{projectPath:this.projectPath}),this.pendingStatusReindex=[];return}let r=st(this.projectPath);V("prepareIndexingRun start",{dotPando:r});try{e.mkdirSync(r,{recursive:!0})}catch{}this.pendingStatusReindex=[]}async startIndexing(){let e=this.operationResetController.signal;V("[DEBUG] startIndexing ENTRY",{projectPath:this.projectPath,indexingInProgress:this.indexingInProgress}),V("\u{1F680} Starting AST indexing...");try{if(lt(e,"Indexing cancelled before start"),this.indexingInProgress){this.pendingFullReindex=!0,V("startIndexing skipped (already running)",{projectPath:this.projectPath}),V("[DEBUG] startIndexing EXIT (already in progress)");return}this.indexingInProgress=!0;let t=Math.random().toString(36).slice(2,8);V("startIndexing begin",{projectPath:this.projectPath,runId:t}),V("[DEBUG] startIndexing about to call initializeASTStorage"),await this.initializeASTStorage(e),lt(e,"Indexing cancelled"),this.scheduleInitialSnapshotAfterIndex("post-root-check",e),lt(e,"Indexing cancelled"),V("startIndexing end",{projectPath:this.projectPath,runId:t}),V("[DEBUG] startIndexing completed successfully"),V("\u2705 AST indexing completed successfully")}catch(t){if(zi(t))V("startIndexing aborted",{projectPath:this.projectPath,error:t instanceof Error?t.message:String(t)});else{let r=t instanceof Error?t.message:String(t);V("[DEBUG] startIndexing caught error",{error:r}),Nn("\u274C Failed to initialize AST storage:",t)}}finally{if(this.indexingInProgress=!1,V("INDEXING DONE",{projectPath:this.projectPath}),e.aborted&&(this.pendingFullReindex=!1),this.pendingFullReindex){this.pendingFullReindex=!1,V("queued full reindex starting",{projectPath:this.projectPath}),await this.startIndexing();return}this.queuedBatch&&!e.aborted&&this.ensureBatchRunner()}}readSnapshotCount(){try{let{openSnapshotsDb:e}=(wi(),be(_o)),t=e(this.projectPath,{readonly:!0});try{return Number(t.prepare("SELECT COUNT(*) AS c FROM snapshots").get()?.c??0)}finally{try{t.close()}catch{}}}catch(e){return Nn("\u26A0\uFE0F Failed to inspect snapshot count",e?.message||e),null}}scheduleInitialSnapshotAfterIndex(e,t,r){let s=require("fs"),i=require("path");if(!s.existsSync(this.projectPath))return"unavailable";if(this.initialSnapshotTask)return V("initial snapshot already scheduled",{projectPath:this.projectPath,reason:e}),"inflight";let o=this.readSnapshotCount();if(o==null)return"unavailable";if(o>0)return"existing";let{SnapshotStatusTracker:a}=(ua(),be(la)),c=a.getInstance(this.projectPath),l=st(this.projectPath),u=i.join(l,"history"),d=Ln(this.projectPath,0);return c.start(0,0),this.initialSnapshotTask=(async()=>{let p=Date.now();try{lt(t,"Initial snapshot cancelled"),V("\u{1F504} Starting initial snapshot after indexing...",{projectPath:this.projectPath,reason:e}),V(`[SnapshotDiag] ${e==="full-index"?"fullIndex":"postIndex"}.preSnapshot`,{projectPath:this.projectPath,pandoDataDir:l,historyDir:u,historyExists:s.existsSync(u),dbPath:d});let f=Array.isArray(r)?r:[],m=f.length>0&&typeof this.snapshotter.snapshotAllWithCaptured=="function"?await this.snapshotter.snapshotAllWithCaptured(f,"ast: initial snapshot (captured-indexed-files)",t):await this.snapshotter.snapshotAll("ast: initial snapshot (serial)",t),h=Date.now()-p;V("\u2705 snapshotAll complete",{elapsedMs:h,capturedFiles:f.length}),V(`[SnapshotDiag] ${e==="full-index"?"fullIndex":"postIndex"}.postSnapshot`,{snapshotId:m?.snapshotId,parent:m?.parent,historyExists:s.existsSync(u)}),V("\u2705 Initial snapshot created and recorded",{snapshotId:m?.snapshotId})}catch(f){zi(f)?V("initial snapshot aborted",{projectPath:this.projectPath,reason:e,error:f instanceof Error?f.message:String(f)}):(Nn("\u26A0\uFE0F initial snapshot failed",f?.message,f?.stack),V("[SnapshotDiag] initialSnapshot.error",{projectPath:this.projectPath,reason:e,message:f?.message||String(f),stack:f?.stack,historyExists:s.existsSync(u),dbPath:d}))}finally{try{c.complete()}catch{}this.initialSnapshotTask=null}})(),this.initialSnapshotTask.catch(()=>{}),"scheduled"}async processQueuedBatch(e,t){let r=Date.now(),s=`${st(this.projectPath)}/`,i=b=>{let S=0,_=0,R=[],E=[];for(let T of b){if(T.startsWith(s)){S++,R.length<10&&R.push(T);continue}this.isPathExcludedForIndex(T)&&(_++,E.length<10&&E.push(T))}return{internal:S,excluded:_,internalSample:R,excludedSample:E}},o=i(e.created),a=i(e.modified),c=i(e.deleted);Mn("code-engine.batch.start",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,createdSample:e.created.slice(0,20),modifiedSample:e.modified.slice(0,20),deletedSample:e.deleted.slice(0,20),internalCounts:{created:o.internal,modified:a.internal,deleted:c.internal},excludedCounts:{created:o.excluded,modified:a.excluded,deleted:c.excluded},internalSample:[...o.internalSample,...a.internalSample,...c.internalSample].slice(0,20),excludedSample:[...o.excludedSample,...a.excludedSample,...c.excludedSample].slice(0,20),queuedAfterTake:this.describeQueuedBatch()}),V("batch-change event",{created:e.created.length,modified:e.modified.length,deleted:e.deleted.length}),this.batchInProgress=!0,this.batchStartMs=Date.now(),this.batchPhase="start",this.batchPhaseStartMs=Date.now(),this.batchWatchdogTimer||(this.batchWatchdogTimer=setInterval(()=>{let b=this.batchStartMs?Date.now()-this.batchStartMs:null,S=this.batchPhaseStartMs?Date.now()-this.batchPhaseStartMs:null;V("[BatchQueue] watchdog",{batchInProgress:this.batchInProgress,batchStartMs:this.batchStartMs??null,elapsedMs:b,phase:this.batchPhase??null,phaseElapsedMs:S,queuedBatch:this.describeQueuedBatch()})},1e4));let l=()=>{let b=process.memoryUsage(),S=_=>Math.round(_/(1024*1024));return`rss=${S(b.rss)}MB heapUsed=${S(b.heapUsed)}MB heapTotal=${S(b.heapTotal)}MB ext=${S(b.external)}MB`};this.batchPhase="filtering",this.batchPhaseStartMs=Date.now(),V("[BatchQueue] filtering start",{created:e.created.length,modified:e.modified.length,deleted:e.deleted.length});let u=(b,S)=>{let _=Date.now(),R=b.length,E=0,T=0,x=[];for(let D of b){if(D.startsWith(s)){E++;continue}if(this.isPathExcludedForIndex(D)){T++;continue}x.push(D)}let w=Date.now()-_;return V("[BatchQueue] filterList done",{label:S,input:R,output:x.length,internalSkipped:E,excludedSkipped:T,elapsedMs:w,sample:x.slice(0,10)}),x};e={created:u(e.created,"created"),modified:u(e.modified,"modified"),deleted:u(e.deleted,"deleted"),source:e.source},Mn("code-engine.batch.afterFilter",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,createdSample:e.created.slice(0,20),modifiedSample:e.modified.slice(0,20),deletedSample:e.deleted.slice(0,20)});let d=e.created.length+e.modified.length+e.deleted.length;if(d===0){Mn("code-engine.batch.filteredToZero",{projectRoot:this.projectPath,elapsedMs:Date.now()-r}),this.finishBatch("no-work-after-filtering");return}this.scheduleLspWorkspaceSync(e,"watcher-batch");let p=this.batchPhaseStartMs?Date.now()-this.batchPhaseStartMs:null;V("[BatchQueue] filtering complete",{created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,elapsedMs:p});let f=this.shouldEscalateBatchToFullReindex(d);if(f.should){Mn("code-engine.batch.fullReindexFallback",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,totalFiles:d,reason:f.reason,knownFiles:f.knownFiles??null}),V("[BatchQueue] large batch fallback",{totalFiles:d,reason:f.reason,knownFiles:f.knownFiles??null}),this.finishBatch("large-batch-full-reindex",{totalFiles:d,reason:f.reason,knownFiles:f.knownFiles??null}),await this.startIndexing();return}try{let b=S=>S.length<=10?S:[...S.slice(0,10),`... +${S.length-10} more`];V("batch-change filtered",{internalDbPrefix:s,created:b(e.created),modified:b(e.modified),deleted:b(e.deleted)}),Mn("code-engine.batch.filtered",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,createdSample:e.created.slice(0,20),modifiedSample:e.modified.slice(0,20),deletedSample:e.deleted.slice(0,20)})}catch{}let m=Date.now();V("\u{1F680} Processing batch",{files:d,mem:l()});let h=b=>b.length<=20?b:[...b.slice(0,20),`... +${b.length-20} more`];e.created.length&&V("batch created",{files:h(e.created)}),e.modified.length&&V("batch modified",{files:h(e.modified)}),e.deleted.length&&V("batch deleted",{files:h(e.deleted)});for(let b of e.deleted){let S=this.project.getSourceFile(b);S&&this.project.removeSourceFile(S)}let g=[...e.created,...e.modified];g.length&&V("batch reindex targets",{files:h(g)});let y=!1;try{lt(t,"Batch indexing cancelled"),this.batchPhase="applyExplicitChanges",this.batchPhaseStartMs=Date.now(),V("[BatchQueue] applyExplicitChanges start",{created:e.created.length,modified:e.modified.length,deleted:e.deleted.length});let b=this.createTransientIndexer(),S=Math.max(3e4,Number(process.env.PANDO_PROCESS_CHANGES_TIMEOUT_MS||18e4)),_=e.created.map(M=>ps(M)),R=e.modified.map(M=>ps(M)),E=e.deleted.map(M=>ps(M));Mn("code-engine.batch.applyExplicitChanges.invoke",{projectRoot:this.projectPath,created:_.length,modified:R.length,deleted:E.length,timeoutMs:S});let T,x=()=>{try{b.cancelIndexing("Batch indexing cancelled")}catch{}},w=t.aborted?(()=>{}):(t.addEventListener("abort",x,{once:!0}),()=>{try{t.removeEventListener("abort",x)}catch{}}),D=new Promise((M,P)=>{T=setTimeout(()=>{try{b.cancelIndexing(`applyExplicitChanges timeout after ${S}ms`)}catch{}Mn("code-engine.batch.applyExplicitChanges.timeout",{projectRoot:this.projectPath,created:_.length,modified:R.length,deleted:E.length,timeoutMs:S}),P(new Error(`applyExplicitChanges timed out after ${S}ms`))},S),T.unref?.()}),F,N=vb(t,"Batch indexing cancelled",()=>{try{b.cancelIndexing("Batch indexing cancelled")}catch{}});try{F=await Promise.race([b.applyExplicitChanges({created:_.length?_:void 0,modified:R.length?R:void 0,deleted:E.length?E:void 0},{resetModifiedToLight:e.source!=="post-write-sync"}),N.promise,D])}finally{N.cleanup(),w(),T&&clearTimeout(T),this.disposeTransientIndexer(b,"batch applyExplicitChanges complete")}lt(t,"Batch indexing cancelled");let C=this.batchPhaseStartMs?Date.now()-this.batchPhaseStartMs:null;V("[BatchQueue] applyExplicitChanges done",{elapsedMs:C,indexed:F.indexed,purged:F.purged,needsFullReindex:F.needsFullReindex??!1}),Mn("code-engine.batch.applyExplicitChanges.complete",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,elapsedMs:this.batchPhaseStartMs?Date.now()-this.batchPhaseStartMs:null,indexed:F.indexed,purged:F.purged,needsFullReindex:F.needsFullReindex??!1}),y=F.needsFullReindex===!0;let O=(Date.now()-m)/1e3;V("\u2705 Explicit batch applied",{durationSeconds:Number(O.toFixed(1)),mem:l()})}catch(b){if(zi(b)){this.finishBatch("batch-cancelled",{created:e.created.length,modified:e.modified.length,deleted:e.deleted.length});return}Mn("code-engine.batch.applyExplicitChanges.failed",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,elapsedMs:this.batchPhaseStartMs?Date.now()-this.batchPhaseStartMs:null,error:b?.message||String(b)});let S=this.batchPhaseStartMs?Date.now()-this.batchPhaseStartMs:null;V("[BatchQueue] applyExplicitChanges failed",{elapsedMs:S,error:b?.message||String(b)}),Nn("\u274C Failed to process queued batch:",b)}if(this.finishBatch(y?"apply-explicit-needs-full-reindex":"batch-complete",{created:e.created.length,modified:e.modified.length,deleted:e.deleted.length}),!y)try{g.length>0&&(this.batchPhase="refreshFiles",this.batchPhaseStartMs=Date.now(),await this.refreshFilesFromDisk(g,t),Mn("code-engine.batch.refreshFiles.complete",{projectRoot:this.projectPath,files:g.length,elapsedMs:this.batchPhaseStartMs?Date.now()-this.batchPhaseStartMs:null,batchElapsedMs:Date.now()-r}),V("[Batch] Post-index refresh done",{files:g.length}))}catch(b){if(zi(b)){Mn("code-engine.batch.refreshFiles.aborted",{projectRoot:this.projectPath,files:g.length,elapsedMs:this.batchPhaseStartMs?Date.now()-this.batchPhaseStartMs:null,batchElapsedMs:Date.now()-r}),V("[Batch] Post-index refresh aborted",{files:g.length});return}Mn("code-engine.batch.refreshFiles.failed",{projectRoot:this.projectPath,error:b?.message||String(b),batchElapsedMs:Date.now()-r}),Nn("[Batch] Post-index refresh failed",b?.message||b)}Mn("code-engine.batch.complete",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,elapsedMs:Date.now()-r,fullReindexTriggered:y}),y&&(V("\u{1F504} Critical index files deleted, triggering full reindex..."),await this.startIndexing())}isIndexingInProgress(){return this.indexingInProgress}async initializeASTStorage(e){V("\u{1F504} Initializing AST storage (single-pass, incremental)..."),V("initializeASTStorage begin",{projectPath:this.projectPath}),V("initializeASTStorage start",{excludes:this.indexExcludeDirs});let t=require("fs"),r=require("path");if(lt(e,"Indexing cancelled"),!(()=>{try{return t.existsSync(this.projectPath)}catch{return!1}})()){V("initializeASTStorage skipped; project root missing",{projectPath:this.projectPath});return}this.prepareIndexingRun();let i=this.createTransientIndexer();try{let o=i.checkAndCleanupIfNeeded();V("initializeASTStorage integrity",{projectPath:this.projectPath,needsReindex:o});let a=Ln(this.projectPath,0),c=st(this.projectPath),l=r.join(c,"history"),u=!o&&t.existsSync(a)&&t.statSync(a).size>0,d=null;V("initializeASTStorage DB status",{dbPath:a,dbExists:u}),V("initializeASTStorage dbStatus",{projectPath:this.projectPath,exists:u});try{let v={projectPath:this.projectPath,dbPath:a,pandoDataDir:c,historyDir:l,dbExists:u,needsReindex:o,historyExists:t.existsSync(l)};try{let{openSnapshotsDb:I}=(wi(),be(_o)),k=I(this.projectPath,{readonly:!0});try{let $=Number(k.prepare("SELECT COUNT(*) AS c FROM snapshots").get()?.c??-1);d=$>=0?$:null,v.snapshots=$,v.snapshot_members=Number(k.prepare("SELECT COUNT(*) AS c FROM snapshot_members").get()?.c??-1),v.snapshot_meta=Number(k.prepare("SELECT COUNT(*) AS c FROM snapshot_meta").get()?.c??-1)}finally{try{k.close()}catch{}}}catch(I){v.snapshotCountReadError=I?.message||String(I)}V("[SnapshotDiag] initializeASTStorage.entry",v)}catch{}let p=u&&d===0;p&&V("[SnapshotDiag] missingInitialSnapshot forcing full index path",{projectPath:this.projectPath,dbPath:a,snapshots:d});let f=this.pendingStatusReindex.slice();if(this.pendingStatusReindex=[],!u||p){if(this.indexingInProgress&&this.pendingFullReindex){V("initializeASTStorage fullIndex skipped (reindex queued)",{projectPath:this.projectPath});return}V(`\u{1F4C0} ${o?"Index integrity repair":p?"Initial snapshot missing":"No existing DB detected"}. Running full index-all...`),V("initializeASTStorage fullIndex start",{projectPath:this.projectPath});let I=Date.now(),k=vb(e,"Indexing cancelled",()=>{try{i.cancelIndexing("Indexing cancelled")}catch{}}),$;try{$=await Promise.race([i.indexAll(void 0,{captureContents:!0}),k.promise])}finally{k.cleanup()}lt(e,"Indexing cancelled");let L=Date.now()-I;V("\u2705 indexAll complete",{elapsedMs:L}),V("initializeASTStorage fullIndex done",{projectPath:this.projectPath});let j=this.scheduleInitialSnapshotAfterIndex("full-index",e,Array.isArray($?.captures)?$.captures:void 0);V("\u2705 Full indexing complete!",{dbPath:a,initialSnapshotState:j}),V("initializeASTStorage end",{projectPath:this.projectPath});return}V("\u{1F9EE} Existing DB found. Computing incremental changes...");try{let{default:v}=(rn(),be(Jr)),I=new v(a,{readonly:!0}),k=Number(I.prepare("SELECT COUNT(*) AS c FROM snapshots").get()?.c??-1),$=Number(I.prepare("SELECT COUNT(*) AS c FROM snapshot_members").get()?.c??-1);I.close(),k===0&&V("[SnapshotDiag] incrementalPathWithNoSnapshots",{projectPath:this.projectPath,dbPath:a,snapshots:k,snapshot_members:$,historyExists:t.existsSync(l)})}catch(v){Nn("[SnapshotDiag] incrementalSnapshotCheck.error",v?.message||v)}V("initializeASTStorage incremental start",{projectPath:this.projectPath}),V("BUILD_STAMP incremental-logs-v1");let m=v=>r.relative(this.projectPath,v).replace(/\\/g,"/");V("workerScan:start",{projectPath:this.projectPath});let h=Date.now(),g=await this.withTransientIndexer(v=>v.scanFiles());V("workerScan:done",{count:g.length,elapsedMs:Date.now()-h,projectPath:this.projectPath});let y=new Set,b=new Map;for(let v of g){let I=v.relPath||m(v.absPath);!I||I.startsWith("..")||(y.add(I),b.set(I,{mtime:Math.floor(v.mtime),size:v.size}))}V("incremental diskMeta built",{projectPath:this.projectPath,count:b.size,source:"workerScan"});let{FileChunkMappingStore:S}=(aa(),be(cb)),_=new S(this.projectPath),R=[],E=process.env.REINDEX_ON_MTIME_DECREASE==="1",T=f.slice(),x={missingMapping:0,sizeChanged:0,mtimeIncreased:0,mtimeDecreased:0},w=[],D=Math.max(0,Math.min(100,Number(process.env.PANDO_INDEX_DIAG_LIMIT||"25"))),F=(v,I,k,$)=>{w.length>=D||w.push({rel:v,reason:I,disk:{mtime:k?.mtime??0,size:k?.size??0},chunk:$?{last_modified:$.last_modified??0,file_size:$.file_size??0}:void 0})};V("incremental map.all start",{projectPath:this.projectPath});let N=Date.now(),C=_.all(),O=C.length,M=new Map;for(let v of C)M.set(v.file_path,v);V("incremental map.all done",{projectPath:this.projectPath,elapsedMs:Date.now()-N,count:O}),V("incremental map lookup loop start",{projectPath:this.projectPath,count:b.size});let P=Date.now();for(let[v,I]of b){let k=M.get(v);if(!k){x.missingMapping++,F(v,"missingMapping",I),R.push(r.join(this.projectPath,v));continue}let $=(I.mtime||0)>(k.last_modified||0),L=(I.mtime||0)<(k.last_modified||0),j=(I.size||0)!==(k.file_size||0);j&&x.sizeChanged++,$&&x.mtimeIncreased++,L&&x.mtimeDecreased++,(j||$||E&&L)&&(F(v,j?"sizeChanged":$?"mtimeIncreased":"mtimeDecreased",I,k),R.push(r.join(this.projectPath,v)))}if(V("incremental map lookup loop done",{projectPath:this.projectPath,elapsedMs:Date.now()-P,staleOrNew:R.length}),T.length){let v=new Set(R.map(k=>ps(k))),I=0;for(let k of T){let $=ps(k);if(!v.has($)){let L=m(k),j=b.get(L)||{mtime:0,size:0};F(L,"status",j),R.push(k),v.add($),I++}}I>0&&V("initializeASTStorage merged status-driven targets",{added:I,total:R.length})}let A=[];V("incremental deleted scan start",{projectPath:this.projectPath});for(let v of M.keys())y.has(v)||A.push(v);if(V("incremental deleted scan done",{projectPath:this.projectPath,deleted:A.length}),V("[IndexerDiag] re-index evaluation",{diskCount:b.size,mappingCount:O,staleOrNew:R.length,pendingStatus:T.length,counts:x,sample:w}),A.length>0&&V("[IndexerDiag] deleted candidates",{count:A.length,sample:A.slice(0,Math.max(0,Math.min(D,25)))}),V("\u{1F4CA} Incremental indexing",{staleOrNew:R.length,deleted:A.length}),A.length>0)for(let v of A)_.delete(v);R.length>0?(V("incremental indexFiles start",{count:R.length}),await this.withTransientIndexer(v=>v.indexFiles(R)),V("incremental indexFiles done",{count:R.length}),V("\u2705 Incremental indexing complete.")):(V("incremental no-op",{deleted:A.length}),V("\u2705 Everything up to date. No indexing needed."))}finally{this.disposeTransientIndexer(i,"initializeASTStorage complete")}}async forceSave(){await this.project.save()}getStats(){return{projectPath:this.projectPath,operationCount:this.operationCount,sourceFiles:this.project.getSourceFiles().length,projectStats:Us.getProjectStats(this.project),useASTStorage:!1}}refresh(){this.project.getSourceFiles().forEach(e=>e.refreshFromFileSystemSync())}async execute(e,t){this.operationCount++;let r=Date.now(),s=c=>{let l=Math.max(0,Date.now()-r),u=c??{success:!1},{success:d=!1,projectRoot:p,...f}=u;return{projectRoot:this.projectPath,success:d,elapsedMs:l,...f}},{signal:i,cleanup:o}=eT(t?.signal,this.operationResetController.signal);t?.clearTypeCache&&(jC(),be($C)).TypeInference.clearCache();let a=this.project;try{if(lt(i,"Operation cancelled before execution started"),!this.lspHost)try{let{CodeEngineFactory:u}=(ws(),be(yc)),d=u.getEngineOptions(this.projectPath);(d?.lspHost||d?.languageSupport)&&this.setRuntimeOptions(d)}catch{}let c=new Kp(a,this.projectPath);if(this.lspHost&&c.setLspHost(this.lspHost),!Array.isArray(e)){let u=await this.executeSingle(e,c,i);return u.success&&u.changes?.count&&u.changes.count>0&&await this.project.save(),u}let l=[];for(let u of e){let d=await this.executeSingle(u,c,i);if(!d.success){if(t?.continueOnError){l.push(d);continue}throw new Error(`Operation failed: ${d.error}`)}l.push(d)}if(!t?.dryRun&&l.some(u=>u.success&&u.changes?.count&&u.changes.count>0)){let u=0;for(let d of l)d.success&&d.changes?.count&&(u+=d.changes.count);u>0&&await this.project.save()}return l}catch(c){let l=zi(c),u=l?c?.message||"Operation cancelled":c.message;return Array.isArray(e)?[s({success:!1,error:u,...l?{error_code:"cancelled"}:{}})]:s({success:!1,error:u,...l?{error_code:"cancelled"}:{}})}finally{o()}}async executeWithContext(e,t,r){if(!Array.isArray(e))return this.executeSingle(e,t,r?.signal);let s=[];for(let i of e){let o=await this.executeSingle(i,t,r?.signal);if(!o.success)throw new Error(`Operation failed: ${o.error}`);s.push(o)}return s}async executeSingle(e,t,r){lt(r);let s=e.op,i=s==="add-code"?"insert":s==="replace-body"?"replace":s,o=new Set(["rename","delete","insert","add-code","replace","replace-body","edit-file-text","change-signature","filter-map-reduce","shell-command","move-clojure-namespace","rename-clojure-namespace","restore-snapshot","restore-files","snapshot-worktree","repair-history","add-exclude-dir","remove-exclude-dir"]),a=new Set(["get-project-root","read_this_first","list-snapshots","diff-snapshots","get-snapshot-file","get-snapshot-trailers","get-db-schema","query-db"]),c=new Set(["snapshot-worktree","restore-snapshot","restore-files","shell-command"]),l=new Set(["change-signature","snapshot-worktree","restore-snapshot","restore-files","repair-history","shell-command"]),u=typeof i=="string"&&o.has(i)||typeof s=="string"&&o.has(s),d=typeof i=="string"&&c.has(i),p=typeof i=="string"&&l.has(i),f=typeof i=="string"&&a.has(i);if(u&&i!=="snapshot-worktree"&&this.pendingShellCommandSnapshotFailure){let P=this.pendingShellCommandSnapshotFailure;return{projectRoot:this.projectPath,success:!1,error:"A previous shell-command completed but its snapshot failed. Run snapshot-worktree successfully before another modifying operation.",details:{reason:"pending_shell_command_snapshot",failedCommand:P.command,failedReason:P.reason,snapshotError:P.error,failedAt:P.failedAt}}}let m=Date.now(),h=P=>{let A=Math.max(0,Date.now()-m),v=P??{success:!1},{success:I=!1,projectRoot:k,...$}=v;return{projectRoot:this.projectPath,success:I,elapsedMs:A,...$}};try{await this.xxHashReady}catch(P){return h({success:!1,error:`xxHash initialization failed: ${P?.message||String(P)}`})}let g=DC(e);if(!g.valid)return h({success:!1,error:g.error,error_code:"validation_failed",details:{operation:i??null,issues:g.issues}});let y=i==="restore-snapshot";if(y&&(await this.supersedePendingProjectSyncForRestore(i),this.installRestoreFastPathMetadata(e,t)),!f)try{await this.awaitPendingProjectSync(i)}catch(P){return h({success:!1,error:`Project refresh failed after prior write: ${P?.message||String(P)}`,details:{reason:"project_refresh_failed",operation:i??null,pendingProjectSyncReason:this.pendingProjectSyncReason??null}})}let b=Ks.getInstance(this.projectPath),S=(()=>{try{return(Mu(),be(zf)).FTSStatusTracker.getInstance(this.projectPath)}catch{return null}})(),_=(()=>{try{return(ua(),be(la)).SnapshotStatusTracker.getInstance(this.projectPath)}catch{return null}})(),R=null,E=null,T=!1,x=!0,w="Ready for write operations",D=null;try{let P=this.getIndexingStore();R=P?.getIndexingSession?.()??null,E=Lc(this.projectPath,0);let A=Math.max(0,Math.floor(Number(E?.totalFiles)||0)),v=Math.max(0,Math.floor(Number(E?.filesProcessed)||0)),I=Nf({projectRoot:this.projectPath,store:P,sessionData:R,pendingCount:Math.max(0,Number(P.getPendingStats?.()?.count||0)),overviewTotal:A,overviewProcessed:v,indexingIsIndexing:b.isIndexing(),snapshotIsSnapshotting:!!_?.isSnapshotting,snapshotFilesChanged:_?.status?.filesChanged,snapshotFilesDeleted:_?.status?.filesDeleted,logScope:"CodeEngine"});R=I.sessionData,T=I.indexingActive,x=I.writesPermitted,w=I.writeBlockMessage,D=I.writeBlockReason}catch{R=null}let F=!!(S&&S.isBuilding),N=!!(_&&_.isSnapshotting);if(y&&!x&&!N&&!T&&(x=!0,D="ready",w="Restore-snapshot allowed as a recovery operation while metadata indexing is idle."),u&&!x){let P=Lc(this.projectPath,0),A=this.computeIndexingEta()??(P?.estimatedSecondsRemaining!=null?{seconds:Math.max(1,Math.ceil(P.estimatedSecondsRemaining)),basis:"files"}:null),v={reason:D||"background_work_in_progress",operation:i??null},I=[`Operation '${String(i||"unknown")}' is temporarily blocked. ${w}`];if(P&&P.totalFiles!=null&&P.filesProcessed!=null){let $=Number(P.filesProcessed),L=Number(P.totalFiles),j=L>0?L:0,z=j>0?Math.round($/j*100):void 0,U=j>0?Math.max(0,j-$):void 0;v.indexing={isIndexing:!0,filesIndexed:P.filesIndexed??void 0,filesSkipped:P.filesSkipped??void 0,filesFailed:P.filesFailed??void 0,filesProcessed:$,totalFiles:j,filesRemaining:U,percentComplete:z,estSecondsRemaining:P.estimatedSecondsRemaining??(A?A.seconds:void 0),statusMessage:P.message??void 0},I.push(`Progress: ${$}/${j} files${z!=null?` (${z}%)`:""}.`)}else if(R&&R.total_files_estimate!=null&&R.files_processed!=null){let $=Math.max(0,Math.floor(Number(R.files_processed)||0)),L=Math.max(0,Math.floor(Number(R.total_files_estimate)||0)),j=L>0?Math.round($/L*100):void 0,z=L>0?Math.max(0,L-$):void 0;v.indexing={isIndexing:!0,filesProcessed:$,totalFiles:L,filesRemaining:z,percentComplete:j,statusMessage:R.run_state?`run_state=${R.run_state}`:void 0},I.push(`Progress: ${$}/${L} files${j!=null?` (${j}%)`:""}.`)}A?(I.push(`Estimated retry window: ~${A.seconds}s.`),v.retryAfterSeconds=A.seconds,v.retryAfterBasis=A.basis):I.push("Retry shortly."),v.message=I.join(" "),v.indexing&&A?(v.indexing.retryAfterSeconds=A.seconds,v.indexing.retryAfterBasis=A.basis):!v.indexing&&A&&(v.indexing={isIndexing:T,retryAfterSeconds:A.seconds,retryAfterBasis:A.basis}),F&&(v.fts={state:S?.status?.state,snapshotId:S?.status?.snapshotId,blocking:!1}),N&&(v.snapshot={state:"snapshotting"});let k=v.message||"BUSY_RETRY_LATER";return h({success:!1,error:k,hints:["Wait a few seconds and retry the same operation. The indexer is still processing files."],details:v})}if(this.refreshingInProgress&&!f){let P=this.refreshingFiles.length,A=Math.max(1,Math.ceil(P/50));return V("[OperationGate] blocked by refresh",{op:i??null,totalFiles:P,etaSeconds:A,sampleFiles:this.refreshingFiles.slice(0,10)}),h({success:!1,error:`Engine is reconciling in-memory state with disk changes. Refreshing ${P} files, rough ETA ~${A}s. Retry in ~${A} seconds.`,hints:[`Wait ~${A} seconds and retry the same operation.`],details:{reason:"refreshing_in_progress",operation:i??null,message:`Engine is reconciling in-memory state with disk changes. Refreshing ${P} files, progress 0/${P}, rough ETA ~${A}s.`,retryAfterSeconds:A,refresh:{filesProcessed:0,totalFiles:P,estSecondsRemaining:A,sampleFiles:this.refreshingFiles.slice(0,10)}}})}if(u){if(this.modifyingOpActive){V("[OperationGate] blocked by active modifying op",{op:i??null,activeOp:this.modifyingOpName||"unknown",pendingProjectSyncReason:this.pendingProjectSyncReason??null,batchInProgress:this.batchInProgress,batchPhase:this.batchPhase??null,batchPhaseAgeMs:this.batchPhaseStartMs?Date.now()-this.batchPhaseStartMs:null});let P={},A=[`Another modifying operation ('${this.modifyingOpName||"unknown"}') is in progress.`],v=this.computeIndexingEta(),I=b.getStatus?.(),k=null,$=null;try{let z=this.getIndexingStore();$=z?(()=>{let U=z.getThroughput();return{avg_files_per_sec:U.avg_files_per_sec??null,avg_bytes_per_sec:U.avg_bytes_per_sec??null}})():null,k=z?.getIndexerMeta("worker_concurrency_hint")??null}catch(z){try{X("CodeEngine","busyRetry indexing telemetry failed",{error:z?.message||z})}catch{}}!v&&I?.estimatedSecondsRemaining!=null&&(v={seconds:Math.max(1,Math.ceil(I.estimatedSecondsRemaining)),basis:"files"}),v?(A.push(`Estimated completion in ~${v.seconds}s (${v.basis}).`),P.retryAfterSeconds=v.seconds,P.retryAfterBasis=v.basis):A.push("Please retry shortly.");let L={};if(I&&(I.filesProcessed!=null&&(L.filesProcessed=I.filesProcessed),I.totalFiles!=null&&(L.totalFiles=I.totalFiles),I.estimatedSecondsRemaining!=null&&(L.estSecondsRemaining=I.estimatedSecondsRemaining,P.retryAfterSeconds||(P.retryAfterSeconds=Math.max(1,Math.ceil(I.estimatedSecondsRemaining)),P.retryAfterBasis="files"))),v&&(L.retryAfterSeconds=v.seconds,L.retryAfterBasis=v.basis),$&&($.avg_files_per_sec!=null&&(L.avgFilesPerSecond=$.avg_files_per_sec),$.avg_bytes_per_sec!=null&&(L.avgBytesPerSecond=$.avg_bytes_per_sec)),k){let z=Number(k);L.workerConcurrencyHint=Number.isFinite(z)?z:k}if(Object.keys(L).length>0&&(P.indexing=L),_&&_.isSnapshotting){let z=_.status;if(P.snapshot={state:z.state,startedAt:z.startedAt??void 0,filesChanged:z.filesChanged??void 0,filesDeleted:z.filesDeleted??void 0},!v&&z.startedAt){let U=Math.max(1,Math.floor((Date.now()-z.startedAt)/1e3));P.snapshot.elapsedSeconds=U}}P.message=A.join(" ");let j=P.message||"BUSY_RETRY_LATER";return h({success:!1,error:j,hints:["Wait a few seconds and retry the same operation."],details:P})}this.modifyingOpActive=!0,this.modifyingOpName=i,V("[OperationGate] acquired modifying op lock",{op:i??null,projectPath:this.projectPath})}let C=()=>{u&&(this.modifyingOpActive=!1,this.modifyingOpName=void 0)},O;try{let P=String(i||"").toLowerCase()==="delete"||!!e?.forceMayBreakSyntax;if(u&&!P&&!p){let A=await this.preflightExpectedHashCheck(e,t,i);if(!A.ok)return C(),h({success:!1,error:A.error});let v=this.extractTouchedFiles(e);v.length>0&&(O=await this.collectDiagnostics(t,v))}}catch{O=void 0}let M=P=>{let A=P??{success:!1};if(!u){let v=[],k=(()=>{let $=A?.indexing;if($&&typeof $=="object")return $;let L=A?.data?.indexing;return L&&typeof L=="object"?L:null})()??Lc(this.projectPath,0);if(k.isIndexing){let $=Math.max(0,Math.floor(Number(k.filesProcessed)||0)),L=Math.max(0,Math.floor(Number(k.totalFiles)||0)),j=k.estimatedSecondsRemaining!=null?k.estimatedSecondsRemaining:this.computeIndexingEta()?.seconds??null;(j==null||!Number.isFinite(j))&&this.computeIndexingEta()?.seconds!=null&&(j=this.computeIndexingEta().seconds);let z=L>0?Math.round($/L*100):void 0,U=[k.filesIndexed?`${k.filesIndexed} indexed`:null,k.filesSkipped?`${k.filesSkipped} skipped`:null,k.filesFailed?`${k.filesFailed} failed`:null].filter(Boolean).join(", ");v.push(`Indexing in progress: ${$||"?"} / ${L||"?"} files${z!=null?` (${z}%)`:""}${j!=null?`, est. ${j}s remaining`:""}${U?`; ${U}`:""}. Results may be incomplete.`)}S&&S.isBuilding&&v.push("FTS index building in background; text/FTS queries may be partial until ready."),_&&_.isSnapshotting&&v.push("Snapshotting in progress; results may lag until snapshot completes."),v.length&&(A.warnings=Array.isArray(A.warnings)?[...A.warnings,...v]:v)}return h(A)};try{let P=RC(e),{boundary:A}=P,{requireConfirmation:v,confirmed:I}=P,k=e.path||e.to||e.of||void 0;V("[OperationDispatch] begin",{op:i,rawOpName:s,isModifying:u,projectPath:this.projectPath,targetPath:k||null});let $=require("path"),L=require("fs"),j=k&&typeof k=="string"&&k.includes("#")?k.split("#")[0]:void 0,z=this.projectPath;if(j)z=$.isAbsolute(j)?j:$.join(this.projectPath,j);else if(e.scopeNode||e.scope){let Q=e.scope,B=e.scopeNode?String(e.scopeNode):Q?.node?.path||Q?.files?.[0]||Q?.dir||"";B.includes("#")&&(B=B.split("#")[0]);let Z=$.isAbsolute(B)?B:$.join(this.projectPath,B);try{L.existsSync(Z)&&L.statSync(Z).isDirectory()?z=$.join(Z,"__virtual__.ts"):z=Z}catch{z=Z}}let U=Oa(z),K=new Set;e&&e.boundary==null&&!k&&!e.scopeNode&&!e.scope&&(A="workspace");try{L.existsSync(U)||(A="workspace")}catch{A="workspace"}if(A==="project")if(!k&&!e.scopeNode&&!e.scope){let Q=MS(this.projectPath);if(Q.length>0)for(let B of Q)K.add(B);else K.add(U)}else K.add(U);else if(A==="reachable"){let Q={maxDepth:e.reachabilityDepth,...e.reachabilityOptions||{}},B=kC(this.projectPath,U,Q);for(let Z of B)K.add(Z)}let G=new Jm(this.projectPath,{allowedTsconfigs:K,mode:A},t.ls.getForFile,async Q=>{let B=String(Q||"").replace(/\\/g,"/");if(!B)return!1;let Z=$.isAbsolute(B)?B:$.join(this.projectPath,B);try{if(!L.existsSync(Z)||!L.statSync(Z).isFile())return!1}catch{return!1}return(await this.withTransientIndexer(ae=>ae.indexFiles([Z],{emitMode:"full"}),"find-nodes full AST JIT")).processed>0});if(t.setQueryLayer(G),String(i||"").toLowerCase()==="rename"&&A!=="project"&&v&&!I)try{if(k){let Q=e.expectedHash?`${k}@${e.expectedHash}`:`${k}`,B=es(Q,this.project,this.projectPath);if(B){let Z=B.getSourceFile().getFilePath(),se=f1(B);if(se!=null){let ae=[],De=!!e.includeStrings,he=!!e.includeComments,Ke=G.findRenameLocations(Z,se,De,he);ae=Array.from(new Set(Ke.map(Ye=>$.resolve(Ye.fileName))));let Ze=Vm.build("rename",EC(Q),this.projectPath,ae,{boundary:A,allowedTsconfigs:Array.from(K),referenceCount:Ke.length,rename:{newName:e.newName,locations:Ke,page:e.page}});return M({success:!1,error:"Cross-project rename requires explicit approval",crossProjectConfirmation:Ze})}}}}catch{}let pe=!!e?.dryRun,ke=(()=>{try{let{openSnapshotsDb:Q}=(wi(),be(_o)),B=Q(this.projectPath,{readonly:!0});try{return B.prepare("SELECT snapshot_id FROM snapshots ORDER BY timestamp DESC, rowid DESC LIMIT 1").get()?.snapshot_id}finally{try{B.close()}catch{}}}catch{return}})(),re=Q=>Q?!!(String(Q.op||"").toLowerCase()==="delete"||Q.forceMayBreakSyntax||Q.forceInsertWillBreakSyntax===!0||Q.forceReplaceWillBreakSyntax===!0||Q.forceDeleteReferencesMayBreakSyntax===!0):!1,W;switch(i){case"read_this_first":{let B=["Pando is an AST-aware code navigation and editing layer for large repos.","It keeps a light index of supported source files, uses that index to narrow candidate files, then parses exact AST details at query or edit time.","","Use Pando for source-code search, navigation, references, callers, exports, renames, inserts, replacements, and deletes.","Use shell/text tools for builds, tests, generated files, non-code files, and unsupported languages.",".clj-kondo is special: those files are intentionally excluded from semantic Clojure indexing to avoid indexing loops, but Pando exposes edit-file-text for .clj-kondo config and hook text edits.","","Read next:","- workspace-overview: quick inventory of indexed files and symbols.","- find-nodes: search by language, scope, and Datalog; request include.self/topN when you need paths and hashes for edits.","- get-content: read files or node paths returned by search tools.","- list-exports, find-references, and find-callers: follow symbols before changing them.","- Writers: rename, replace, replace-body, insert, delete, and edit-file-text for .clj-kondo config/hook files. Use edit-file-text for supported .clj-kondo text edits even though those files are excluded from the semantic index. Re-run find-nodes first if a path or hash is stale.","","Unnamed nodes can and should still be edited with Pando.","Statements, returns, calls, arguments, branches, literals, and other unnamed syntax are normal AST nodes; find them by starting from a named entity or file, then narrowing by kind, text, role, parent, or child index.","","Examples:","- In one find-nodes call, search for a function by name within the workspace and request include.self/topN to get the exact node path and hash.",'- To edit a statement inside a named function, find the function with include.self, then call find-nodes again with scope.node set to { path, expectedHash } for that function. Use predicates such as :node/kind "ReturnStatement" or :node/text "oldValue", then pass the returned statement path and hash without @ to replace or insert; delete uses expectedHashes.',"- For scripts or top-level code, scope find-nodes to the file path instead of a named node, find the statement by kind/text/role/index, then edit that returned node with a writer.","- Insert code is literal: include the newline and indentation you want when inserting before or after a statement anchor."].join(`
|
|
869
|
-
`);try{let Z=require("fs"),ae=require("path").resolve(__dirname,"..","..","mcp-pando-server","resources","messages.json");if(Z.existsSync(ae)){let he=JSON.parse(Z.readFileSync(ae,"utf8"))?.read_this_first;typeof he=="string"&&he.trim().length>0&&(B=he)}}catch{}W={success:!0,help:{title:"read_this_first",body:B}};break}case"insert":{let{InsertCodeExecutor:Q}=await Promise.resolve().then(()=>(fd(),nC)),B=s==="add-code"?{...e,op:"insert"}:e;W=await Q.execute(B,t,this.project);break}case"workspace-overview":W=await Hf.execute(e,t,this.project);break;case"list-exports":W=Wf.execute(e,t,this.project);break;case"analyze-imports":W=Uf.execute(e,t,this.project);break;case"clojure-namespace-graph":W=Kf.execute(e,t,this.project);break;case"clojure-namespace-dependencies":W=Fu.executeDependencies(e,t,this.project);break;case"clojure-namespace-dependents":W=Fu.executeDependents(e,t,this.project);break;case"plan-clojure-namespace-move":W=Ou.executeMove(e,t,this.project);break;case"plan-clojure-namespace-rename":W=Ou.executeRename(e,t,this.project);break;case"move-clojure-namespace":W=await $u.executeMove(e,t,this.project);break;case"rename-clojure-namespace":W=await $u.executeRename(e,t,this.project);break;case"get-db-schema":W=ju.execute(e,t,this.project);break;case"query-db":W=await Zf.execute(e,t,this.project);break;case"delete":W=await Ro.execute(e,t,this.project);break;case"find-references":W=await Ta.execute(e,t,this.project);break;case"find-callers":W=await dd.execute(e,t,this.project);break;case"rename":W=await Eo.execute(e,t,this.project);break;case"filter-map-reduce":{let{FilterMapReduceExecutor:Q}=await Promise.resolve().then(()=>(_S(),rC));W=await Q.execute(e,t,this.project);break}case"shell-command":W=await this.handlePandoShellCommand(e,r);break;case"replace":{let Q=s==="replace-body"?{...e,op:"replace",scope:"body"}:e;if(Q.scope==="body"){let{ReplaceBodyExecutor:B}=await Promise.resolve().then(()=>(gd(),$m));W=await B.execute(Q,t,this.project)}else{let{ReplaceNodeExecutor:B}=await Promise.resolve().then(()=>(bd(),jm));W=await B.execute(Q,t,this.project)}break}case"edit-file-text":{let{TextFileEditExecutor:Q}=await Promise.resolve().then(()=>(HC(),qC));W=await Q.execute(e,t);break}case"add-exclude-dir":W=await this.handleAddExcludeDir(e);break;case"remove-exclude-dir":W=await this.handleRemoveExcludeDir(e);break;case"set-enabled-languages":W=await this.handleSetEnabledLanguages(e);break;case"list-snapshots":W=us.listSnapshots(e,t,this.project);break;case"diff-snapshots":W=us.diffSnapshots(e,t,this.project);break;case"get-snapshot-file":W=await us.getSnapshotFile(e,t,this.project);break;case"get-snapshot-trailers":W=us.getSnapshotTrailers(e,t,this.project);break;case"snapshot-worktree":W=await this.handleSnapshotWorktree(e,r);break;case"repair-history":W=await us.repairShadowHistory(e,t,this.project);break;case"restore-snapshot":W=await us.restoreSnapshot(e,t,this.project);break;case"restore-files":W=await us.restoreFiles(e,t,this.project);break;case"change-signature":V("[OperationDispatch] entering ChangeSignatureExecutor",{op:i,targetPath:e?.path??null}),W=await Wm.execute(e,t,this.project);break;case"get-project-root":W=this.handleGetProjectRoot();break;default:try{let{AtomicExecutor:Q}=await Promise.resolve().then(()=>(KC(),UC));W=await Q.execute(e,t,this.project,this)}catch{W={success:!1,error:`Operation ${e.op} not implemented`}}}V("[OperationDispatch] executor returned",{op:i,success:!!W?.success,error:W?.error??null,errorCode:W?.error_code??null,changedFiles:Array.isArray(W?.details?.changedFiles)?W.details.changedFiles.length:null,allChangedFiles:Array.isArray(W?.details?.allChangedFiles)?W.details.allChangedFiles.length:null});let me=Date.now(),_e={executorMs:Math.max(0,me-m)},Se=String(i||"").toLowerCase()==="delete"||!!e?.forceMayBreakSyntax;if(u&&W&&!W.success&&!pe&&!re(e)){let Q=W.error_code;if((Q==="would_introduce_syntax_error"||Q==="validation_failed"||Q==="io_write_failed")&&ke){let Z=Array.isArray(W.details?.changedFiles)?W.details.changedFiles:[];if(Z.length>0)try{await us.restoreSnapshot({op:"restore-snapshot",snapshotId:ke,shouldCreateNewSnapshot:!1,restrictToPaths:Z},t,this.project),W.details=W.details||{},W.details.rollbackAttempted=!0,W.details.snapshotBefore=ke}catch{}}}if(u&&W&&W.success&&!pe&&!d){try{let Q=Array.isArray(W.details?.allChangedFiles)?W.details.allChangedFiles:Array.isArray(W.details?.changedFiles)?W.details.changedFiles:[],B=Array.isArray(W.details?.deletedFiles)?W.details.deletedFiles:[];if((!Q||Q.length===0)&&(!B||B.length===0))return V("[OperationDispatch] skipping snapshot because no files changed",{op:i}),M(W);let Z=W.details?.receipt||{op:i,target:e.path||e.to||e.of,timestamp:Date.now(),changedFilesCount:Q.length},{SnapshotService:se}=(qS(),be(BS)),{SnapshotStatusTracker:ae}=(ua(),be(la)),De=Date.now();V("[SnapshotService] Starting snapshot",{files:Q.length,deleted:B.length});try{ae.getInstance(this.projectPath).start(Q.length,B.length)}catch{}let he=W.details&&W.details.trailers?W.details.trailers:void 0,{snapshotId:Ke,parentId:Ze}=await se.takeSnapshotNow(this.projectPath,Q,i,Z,he,B,r);_e.snapshotMs=Date.now()-De,V("[SnapshotService] Snapshot finished",{durationMs:_e.snapshotMs,snapshotId:Ke});try{ae.getInstance(this.projectPath).complete()}catch{}if(W.snapshotBefore=Ze||"<none>",W.snapshotAfter=Ke,W.details||(W.details={}),W.details.receipt=Z,W.details&&W.details.trailers){let Ye=W.details.trailers,Ft={};for(let Ee of Object.keys(Ye)){let rt=String(Ye[Ee]??"");Ft[Ee]=rt.length>200?rt.slice(0,200):rt}delete W.details.trailers,W.details.trailersPreview=Ft,W.details.trailersNote="Trailers truncated to 200 chars. Use list-snapshots/get-snapshot-trailers to fetch full trailers."}}catch(Q){return V("[OperationDispatch] snapshot finalization failed",{op:i,error:Q?.message||String(Q)}),M({success:!1,error:`Snapshot failure: ${Q?.message||Q}`})}if(!Se&&!p){let Q=Array.isArray(W.details?.allChangedFiles)?W.details.allChangedFiles:Array.isArray(W.details?.changedFiles)?W.details.changedFiles:[];if(Q.length>0){let B=Date.now(),Z=await this.validateChangedFiles(t,Q,O);if(_e.validationMs=Date.now()-B,Z.skipped&&Z.warning&&(W.warnings=Array.isArray(W.warnings)?[...W.warnings,Z.warning]:[Z.warning]),!Z.ok){let se=W.snapshotBefore,ae=W.snapshotAfter;if(se&&ae&&ae!=="<none>")try{await us.restoreSnapshot({op:"restore-snapshot",snapshotId:se,shouldCreateNewSnapshot:!1,deleteSnapshotId:ae,restrictToPaths:Q},t,this.project)}catch{}return M({success:!1,error:Z.error||"Post-operation validation failed; changes rolled back.",details:{validation:Z,snapshotBefore:se,snapshotAfter:ae,rollbackAttempted:!0}})}}}}u&&(W?.success?this.recordRestoreFastPathState(i,W):this.invalidateRestoreFastPathState("modifying-op-failed",{op:i??null,error:W?.error??null}));try{if(u&&W&&!pe){let Q=Date.now(),B=require("path"),Z=Array.isArray(W.details?.allChangedFiles)?W.details.allChangedFiles:Array.isArray(W.details?.changedFiles)?W.details.changedFiles:[],se=Array.isArray(W.details?.createdFiles)?W.details.createdFiles:[],ae=Array.isArray(W.details?.deletedFiles)?W.details.deletedFiles:[],De=Ee=>B.isAbsolute(Ee)?Ee:B.join(this.projectPath,Ee),he=Ee=>Array.from(new Set(Ee.filter(Boolean))),Ke=he(se.map(De)),Ze=new Set(Ke),Ye=he(Z.map(De)).filter(Ee=>!Ze.has(Ee)),Ft=he(ae.map(De));(Ye.length>0||Ft.length>0||Ke.length>0)&&this.scheduleProjectSync({created:Ke,modified:Ye,deleted:Ft},`${String(i||s||"unknown")} post-write sync`).catch(Ee=>{Nn("[RefreshFromDisk] post-op refresh failed",Ee?.message||Ee)}),_e.syncEnqueueMs=Date.now()-Q}}catch(Q){Nn("[RefreshFromDisk] post-op refresh failed",Q?.message||Q)}return V("[OperationDispatch] post-execution complete",{op:i,success:!!W?.success,totalElapsedMs:Math.max(0,Date.now()-m),postExecutionMs:Math.max(0,Date.now()-me),timings:_e,changedFiles:Array.isArray(W?.details?.changedFiles)?W.details.changedFiles.length:null,allChangedFiles:Array.isArray(W?.details?.allChangedFiles)?W.details.allChangedFiles.length:null}),M(W)}finally{V("[OperationGate] releasing modifying op lock",{op:i??null,activeOp:this.modifyingOpName||null}),C()}}async refreshFilesFromDisk(e,t){let r=require("fs"),s=require("path"),i=a=>{try{return s.relative(this.projectPath,a).replace(/\\/g,"/")}catch{return a}};if(e=this.filterExcludedAbsolutePaths(e),!e.length)return;lt(t,"Workspace sync refresh cancelled"),this.refreshingInProgress=!0,this.refreshingFiles=e.map(i);let o=Date.now();try{for(let a of e){lt(t,"Workspace sync refresh cancelled");try{let c=r.existsSync(a),l=this.project.getSourceFile(a);if(!c){l&&this.project.removeSourceFile(l);continue}(l||this.project.addSourceFileAtPath(a)).refreshFromFileSystemSync()}catch(c){Nn("[RefreshFromDisk] Failed for",a,c?.message||c)}}}finally{let a=Date.now()-o;Mn("code-engine.refreshFilesFromDisk.complete",{projectRoot:this.projectPath,files:e.length,sample:e.slice(0,20).map(i),elapsedMs:a}),V("[RefreshFromDisk] Completed",{files:e.length,ms:a}),this.refreshingInProgress=!1,this.refreshingFiles=[]}}scheduleProjectSync(e,t){let r=`project-sync:${Date.now().toString(36)}:${Math.random().toString(36).slice(2,8)}`,s=Date.now(),i=this.workspaceSyncController.signal;V("[ProjectSync] enqueue",{syncId:r,reason:t,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,hadPending:!!this.pendingProjectSync,pendingSyncId:this.pendingProjectSyncId??null,pendingReason:this.pendingProjectSyncReason??null});let o=async()=>{let l=Date.now();V("[ProjectSync] begin",{syncId:r,reason:t,queueWaitMs:l-s,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length});try{if(await this.handleBatchFileChanges(e,{signal:i,source:"post-write-sync"}),i.aborted){V("[ProjectSync] superseded",{syncId:r,reason:t,durationMs:Date.now()-l,totalMs:Date.now()-s});return}V("[ProjectSync] complete",{syncId:r,reason:t,durationMs:Date.now()-l,totalMs:Date.now()-s})}catch(u){if(zi(u)||i.aborted){V("[ProjectSync] superseded",{syncId:r,reason:t,durationMs:Date.now()-l,totalMs:Date.now()-s,message:u?.message||String(u)});return}throw V("[ProjectSync] failed",{syncId:r,reason:t,durationMs:Date.now()-l,totalMs:Date.now()-s,message:u?.message||String(u)}),u}},a=(this.pendingProjectSync??Promise.resolve()).catch(l=>{if(zi(l)){V("[ProjectSync] previous queued refresh superseded",{syncId:r,reason:t,message:l?.message||String(l)});return}Nn("[ProjectSync] previous queued refresh failed",l?.message||l)}).then(o),c=Symbol(r);return this.pendingProjectSyncToken=c,this.pendingProjectSyncId=r,this.pendingProjectSyncEnqueuedAt=s,this.pendingProjectSyncReason=t,this.pendingProjectSync=a.finally(()=>{this.clearPendingProjectSyncState(c)}),this.pendingProjectSync}async awaitPendingProjectSync(e){let t=this.pendingProjectSync;if(!t)return;let r=Date.now();V("[ProjectSync] awaiting queued refresh before operation",{syncId:this.pendingProjectSyncId??null,operation:e??null,reason:this.pendingProjectSyncReason??null,queuedForMs:this.pendingProjectSyncEnqueuedAt?r-this.pendingProjectSyncEnqueuedAt:null});let s=setInterval(()=>{V("[ProjectSync] waiting",{syncId:this.pendingProjectSyncId??null,operation:e??null,reason:this.pendingProjectSyncReason??null,queuedForMs:this.pendingProjectSyncEnqueuedAt?Date.now()-this.pendingProjectSyncEnqueuedAt:null,waitedMs:Date.now()-r})},n.PROJECT_SYNC_HEARTBEAT_MS);s.unref?.();try{await t,V("[ProjectSync] awaited queued refresh complete",{syncId:this.pendingProjectSyncId??null,operation:e??null,reason:this.pendingProjectSyncReason??null,waitedMs:Date.now()-r})}finally{clearInterval(s)}}async awaitPostWriteWorkSettled(e="external"){let t=Date.now();V("[PostWriteDrain] begin",{reason:e,pendingProjectSync:!!this.pendingProjectSync,pendingProjectSyncId:this.pendingProjectSyncId??null,batchRunner:!!this.batchRunner,batchInProgress:this.batchInProgress,refreshingInProgress:this.refreshingInProgress});let r=setInterval(()=>{V("[PostWriteDrain] waiting",{reason:e,waitedMs:Date.now()-t,pendingProjectSync:!!this.pendingProjectSync,pendingProjectSyncId:this.pendingProjectSyncId??null,pendingProjectSyncReason:this.pendingProjectSyncReason??null,batchRunner:!!this.batchRunner,batchInProgress:this.batchInProgress,refreshingInProgress:this.refreshingInProgress,queuedBatch:this.describeQueuedBatch()})},n.PROJECT_SYNC_HEARTBEAT_MS);r.unref?.();try{for(;;){let s=this.pendingProjectSync;if(s){await s;continue}let i=this.batchRunner;if(i){await i;continue}if(!this.batchInProgress&&!this.refreshingInProgress&&!this.queuedBatch)break;await new Promise(o=>setTimeout(o,25))}}finally{clearInterval(r),V("[PostWriteDrain] complete",{reason:e,waitedMs:Date.now()-t,pendingProjectSync:!!this.pendingProjectSync,batchRunner:!!this.batchRunner,batchInProgress:this.batchInProgress,refreshingInProgress:this.refreshingInProgress})}}scheduleLspWorkspaceSync(e,t){let r=this.lspHost,s=r?.workspaceFilesChanged?.bind(r),i=e.created.length+e.modified.length+e.deleted.length;if(!s||i===0)return Mn("code-engine.batch.workspaceFilesChanged.skipped",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,reason:s?"empty-batch":"no-lsp-host"}),Promise.resolve();Mn("code-engine.batch.workspaceFilesChanged.scheduled",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,reason:t});let o=async()=>{let c=Date.now();Mn("code-engine.batch.workspaceFilesChanged.start",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,createdSample:e.created.slice(0,20),modifiedSample:e.modified.slice(0,20),deletedSample:e.deleted.slice(0,20),reason:t});try{await s(e),Mn("code-engine.batch.workspaceFilesChanged.complete",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,elapsedMs:Date.now()-c,reason:t})}catch(l){Mn("code-engine.batch.workspaceFilesChanged.failed",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,elapsedMs:Date.now()-c,error:l?.message||String(l),reason:t}),Nn("[LspWorkspaceSync] workspaceFilesChanged failed",l?.message||l)}},a=(this.pendingLspWorkspaceSync??Promise.resolve()).catch(c=>{Nn("[LspWorkspaceSync] previous queued sync failed",c?.message||c)}).then(o);return this.pendingLspWorkspaceSync=a.finally(()=>{this.pendingLspWorkspaceSync===a&&(this.pendingLspWorkspaceSync=null)}),this.pendingLspWorkspaceSync}withSnapshotReceipt(e,t,r){return{...r}}async handleBatchFileChanges(e,t){let r=t?.source??"external",s=t?.signal??this.workspaceSyncController.signal;if(V("batch-change event",{created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,source:r,signalAborted:s.aborted}),e.created.length+e.modified.length+e.deleted.length===0)return;if(r!=="post-write-sync"&&this.invalidateRestoreFastPathState("batch-change",{source:r,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length}),s.aborted){V("[BatchQueue] skipped aborted batch",{source:r,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length});return}let o={created:e.created.map(ps),modified:e.modified.map(ps),deleted:e.deleted.map(ps)};Mn("code-engine.batch.enqueue",{projectRoot:this.projectPath,created:o.created.length,modified:o.modified.length,deleted:o.deleted.length,createdSample:o.created.slice(0,20),modifiedSample:o.modified.slice(0,20),deletedSample:o.deleted.slice(0,20)});let a=`${st(this.projectPath)}/`,c=o.deleted.find(u=>u.startsWith(a)&&u.endsWith(".db"));if(c&&!this.indexingInProgress){V("\u{1F504} Index DB deleted; triggering full reindex...",{file:c}),await this.startIndexing();return}let l=this.mergeQueuedBatch(o,r);V("[BatchQueue] enqueue",{incoming:{created:o.created.length,modified:o.modified.length,deleted:o.deleted.length},source:r,queued:l,indexingInProgress:this.indexingInProgress,batchInProgress:this.batchInProgress,runnerActive:!!this.batchRunner}),!this.indexingInProgress&&await this.ensureBatchRunner()}}});var dc=q(require("path"));_y();ws();gt();var vd=class{constructor(e){this.options=e;this.workspaceRoots=new Set;this.explicitProjectRoot=null;this.registeredRoots=new Set}getWorkspaceRoots(){return Array.from(this.workspaceRoots).sort((e,t)=>e.localeCompare(t))}getExplicitProjectRoot(){return this.explicitProjectRoot}getRegisteredRoots(){return Array.from(this.registeredRoots).sort((e,t)=>e.localeCompare(t))}async setWorkspaceRoots(e,t){return this.workspaceRoots=new Set(e.map(r=>this.options.normalizeRoot(r)).filter(r=>!!r)),this.refreshEffectiveRoots(t)}async setProjectRoot(e,t){let r=Date.now();X("ProjectRootManager","setProjectRoot begin",{rootOrPath:e,currentExplicitRoot:this.explicitProjectRoot,opts:t});let s=this.options.normalizeRoot(e);if(!s)return X("ProjectRootManager","setProjectRoot normalized to null",{rootOrPath:e,elapsedMs:Date.now()-r}),null;let i=this.options.resolveIndexRoot(s);return i?this.explicitProjectRoot===i?(X("ProjectRootManager","setProjectRoot no-op",{rootOrPath:e,resolvedInput:s,targetDir:i,elapsedMs:Date.now()-r}),i):(this.explicitProjectRoot=i,await this.refreshEffectiveRoots(t),X("ProjectRootManager","setProjectRoot complete",{rootOrPath:e,resolvedInput:s,targetDir:i,registeredRoots:this.getRegisteredRoots(),elapsedMs:Date.now()-r}),i):(X("ProjectRootManager","setProjectRoot resolveIndexRoot returned null",{rootOrPath:e,resolvedInput:s,elapsedMs:Date.now()-r}),null)}async refreshEffectiveRoots(e){let t=Date.now(),r=this.explicitProjectRoot?new Set([this.explicitProjectRoot]):new Set(this.workspaceRoots),s=new Set(this.registeredRoots),i=[];X("ProjectRootManager","refreshEffectiveRoots begin",{effective:Array.from(r),registeredBefore:Array.from(s),opts:e});for(let o of r){if(this.registeredRoots.has(o))continue;let a=Date.now(),c=await this.options.registerRoot(o);X("ProjectRootManager","refreshEffectiveRoots registerRoot resolved",{requestedRoot:o,registered:c,elapsedMs:Date.now()-a}),c&&(this.registeredRoots.add(c),i.push(c))}for(let o of s)r.has(o)||(this.options.disposeRoot(o),this.registeredRoots.delete(o));if(e?.indexNewRoots&&this.options.startIndexingForRoot)for(let o of i)X("ProjectRootManager","refreshEffectiveRoots startIndexingForRoot dispatch",{root:o}),this.options.startIndexingForRoot(o);return X("ProjectRootManager","refreshEffectiveRoots complete",{newlyRegistered:i,finalRoots:this.getRegisteredRoots(),elapsedMs:Date.now()-t}),{newlyRegistered:i,finalRoots:this.getRegisteredRoots()}}};ws();Xo();Bn();Ru();oa();var ZS=5e4,m1=1*1024*1024;function JC(n,e){let t=typeof e?.limit=="number"&&Number.isFinite(e.limit)?Math.max(1,Math.trunc(e.limit)):ZS,r=e?.languageSupport,s=Js(n),i=bu(r),o=Xr(n,s),a=_E(n,i,{shouldExclude:o,maxFileBytes:m1,limit:t});return{root:n,candidateIndexableFiles:a.count,limit:t,exceeded:a.limitExceeded}}function VC(n){let e=n.exceeded?"at least":"exactly";return new Error(`Refusing to index '${n.root}': candidate_indexable_files is ${e} ${n.candidateIndexableFiles}, above the limit of ${n.limit}. Choose a narrower root or add excludes before retrying.`)}Vt();gt();var Rd=class n{constructor(e,t){this.options=t;this.indexingSuppressedRoots=new Set;this.rootManager=new vd({normalizeRoot:r=>{let s=r.trim();return s?tn(s):null},resolveIndexRoot:r=>r,registerRoot:async r=>{let s=Date.now();X("DirectProjectRootManager","registerRoot begin",{root:r,hasOptions:!!this.options});let i=this.getOptionsForRoot(r);return i&&kn.setEngineOptions(r,i),kn.getEngine(r,i),X("DirectProjectRootManager","registerRoot complete",{root:r,elapsedMs:Date.now()-s}),r},disposeRoot:r=>{X("DirectProjectRootManager","disposeRoot",{root:r}),kn.clearEngine(r)},startIndexingForRoot:async r=>{let s=Date.now();if(X("DirectProjectRootManager","startIndexingForRoot begin",{root:r}),this.indexingSuppressedRoots.has(tn(r))){X("DirectProjectRootManager","startIndexingForRoot skipped (root over indexing limit)",{root:r});return}let i=kn.getEngine(r,this.getOptionsForRoot(r));typeof i?.startIndexing=="function"&&await i.startIndexing(),X("DirectProjectRootManager","startIndexingForRoot dispatched",{root:r,elapsedMs:Date.now()-s})}}),this.initialRoot=e}static async create(e,t){let r=new n(e,t);return await r.validateProjectRoot(e),await r.rootManager.setWorkspaceRoots([e]),r}getProjectRoot(){let e=this.rootManager.getExplicitProjectRoot();return e||(this.rootManager.getRegisteredRoots()[0]??null)}getEngine(){let e=this.getProjectRoot();if(!e)throw new Error("No project root configured.");return kn.getEngine(e,this.getOptionsForRoot(e))}async validateProjectRoot(e){let t=e.trim();if(!t)return null;let r=tn(t),s=JC(r,{languageSupport:this.getOptionsForRoot(r)?.languageSupport,limit:this.indexingLimitOverride});if(s.exceeded){this.indexingSuppressedRoots.add(r);let i=VC(s).message;X("DirectProjectRootManager","validateProjectRoot indexing suppressed",{root:r,candidateIndexableFiles:s.candidateIndexableFiles,limit:s.limit,reason:i})}else this.indexingSuppressedRoots.delete(r);return r}isIndexingSuppressed(e){return this.indexingSuppressedRoots.has(tn(e))}setIndexingLimitOverrideForTesting(e){this.indexingLimitOverride=e}async setProjectRoot(e){let t=Date.now();X("DirectProjectRootManager","setProjectRoot begin",{root:e}),await this.validateProjectRoot(e);let r=await this.rootManager.setProjectRoot(e,{indexNewRoots:!0});return X("DirectProjectRootManager","setProjectRoot complete",{root:e,resolved:r,elapsedMs:Date.now()-t}),r}updateRootOptions(e,t){let r=tn(e),s=t??this.getOptionsForRoot(r);s&&kn.setEngineOptions(r,s)}getOptionsForRoot(e){let t=tn(e),r=this.options?.languageSupport??Vo(t),s=this.options?.lspHost;if(!(!r&&!s))return{...r?{languageSupport:r}:{},...s?{lspHost:s}:{}}}};ki();Gf();Xo();Bn();Vs();ei();var h1=q(require("fs")),g1=q(require("path"));Qf();var rI=require("events");Gf();Qf();Bn();Xo();ws();Vt();var eI=require("child_process");ws();dr();gt();var GS=require("child_process"),za=null,kd=null;async function QC(n){return za||kd||(kd=Promise.resolve().then(()=>{let e=XC();if(e.available)return za=e,e;let t=b1(),r=e.error;for(let s of t){n?.(`[NodeFileWatcher] watchman missing; trying install via ${s.label}`);let i=y1(s),o=XC();if(o.available)return za={available:!0,version:o.version,installAttempted:!0,installSucceeded:!0,installMethod:s.label},za;r=i.error??o.error??r}return za={available:!1,installAttempted:t.length>0,installSucceeded:!1,error:r},za}).finally(()=>{kd=null}),kd)}function XC(){let n=(0,GS.spawnSync)("watchman",["--version"],{encoding:"utf8",stdio:"pipe",shell:process.platform==="win32"});return n.status===0?{available:!0,version:`${n.stdout||n.stderr||""}`.trim()||void 0,installAttempted:!1,installSucceeded:!1}:{available:!1,installAttempted:!1,installSucceeded:!1,error:YC(n.error,n.stderr,n.stdout)}}function y1(n){for(let e of n.steps){let t=(0,GS.spawnSync)(e.cmd,e.args,{encoding:"utf8",stdio:"pipe",shell:process.platform==="win32"});if(t.status!==0)return{ok:!1,error:YC(t.error,t.stderr,t.stdout)}}return{ok:!0}}function b1(){let n=typeof process.getuid=="function"?process.getuid()===0:!1,e=(t,r)=>n?{cmd:t,args:r}:{cmd:"sudo",args:["-n",t,...r]};switch(process.platform){case"darwin":return[{label:"homebrew",steps:[{cmd:"brew",args:["install","watchman"]}]},{label:"macports",steps:[e("port",["install","watchman"])]}];case"linux":return[{label:"homebrew",steps:[{cmd:"brew",args:["install","watchman"]}]},{label:"apt",steps:[e("apt-get",["update"]),e("apt-get",["install","-y","watchman"])]},{label:"dnf",steps:[e("dnf",["install","-y","watchman"])]},{label:"pacman",steps:[e("pacman",["-S","--noconfirm","watchman"])]}];case"win32":return[{label:"chocolatey",steps:[{cmd:"choco",args:["install","watchman","-y"]}]},{label:"winget",steps:[{cmd:"winget",args:["install","--id","Facebook.Watchman","-e"]}]}];default:return[]}}function YC(n,e,t){if(n instanceof Error&&n.message)return n.message;let r=`${e??""}`.trim();return r||`${t??""}`.trim()||void 0}function Dn(n,e){if(!Ht())return;let t=e&&typeof e=="object"&&!Array.isArray(e)?{pid:process.pid,...e}:{pid:process.pid,details:e};X("WatcherTrace",n,t)}var Ym=class{constructor(e){this.log=e;this.projectRoot=null;this.languageSupport=null;this.watcherChild=null;this.watcherGeneration=0;this.shutdownGraceMs=1e3;this.switchChain=Promise.resolve()}async activate(e,t){this.languageSupport=t,await this.updateProjectRoot(e,t)}async updateProjectRoot(e,t){if(t&&(this.languageSupport=t),!e||!this.languageSupport||e===this.projectRoot&&!t)return;let r=this.languageSupport,s=this.switchChain.catch(()=>{}).then(async()=>{let i=this.projectRoot,o=this.watcherChild,a=this.watcherGeneration+1;this.log(`[NodeFileWatcher] updateProjectRoot begin from=${i??"null"} to=${e}`),Dn("node-watcher.updateProjectRoot.begin",{fromRoot:i,toRoot:e,previousGeneration:o?.generation??null,hasWatcher:!!o}),o&&(Dn("node-watcher.updateProjectRoot.await-previous-exit",{fromRoot:i,toRoot:e,previousGeneration:o.generation,childPid:o.process.pid??null}),await this.shutdownChild(o,"root-switch"));let c=await QC(this.log);Dn("node-watcher.watchman.status",{root:e,generation:a,available:c.available,version:c.version,installAttempted:c.installAttempted,installSucceeded:c.installSucceeded,installMethod:c.installMethod,error:c.error});let l=this.spawnWatcherChild(e,r,a,c);this.projectRoot=e,this.watcherChild=l,this.watcherGeneration=a,Dn("node-watcher.updateProjectRoot.complete",{fromRoot:i,toRoot:e,generation:a,childPid:l.process.pid??null,scriptPath:l.scriptPath})});this.switchChain=s,await s}async dispose(){let e=this.switchChain.catch(()=>{}).then(async()=>{let t=this.watcherChild,r=this.projectRoot,s=this.watcherGeneration;this.projectRoot=null,this.watcherChild=null,t&&(Dn("node-watcher.dispose",{root:r,generation:s,childPid:t.process.pid??null}),await this.shutdownChild(t,"dispose"))});this.switchChain=e,await e}spawnWatcherChild(e,t,r,s){let i=wk();if(!i)throw new Error("Could not resolve watcher child process script");this.log(`[NodeFileWatcher] activate root=${e}`),Dn("node-watcher.spawn.start",{root:e,generation:r,scriptPath:i});let o=(0,eI.fork)(i,[],{cwd:e,env:{...process.env,PANDO_WATCH_ROOT:e,PANDO_WATCH_GENERATION:String(r),PANDO_WATCH_LANGUAGE_SUPPORT_JSON:JSON.stringify(t),PANDO_WATCH_WATCHMAN_AVAILABLE:s.available?"1":"0",PANDO_WATCH_WATCHMAN_INSTALL_ATTEMPTED:s.installAttempted?"1":"0",PANDO_WATCH_WATCHMAN_INSTALL_SUCCEEDED:s.installSucceeded?"1":"0"},stdio:["ignore","inherit","inherit","ipc"]}),a=()=>{},c=new Promise(u=>{a=u}),l={process:o,root:e,generation:r,scriptPath:i,shutdownTimer:null,shuttingDown:!1,exitPromise:c,resolveExit:a};return o.on("message",u=>{this.handleChildMessage(l,u)}),o.on("exit",(u,d)=>{l.shutdownTimer&&(clearTimeout(l.shutdownTimer),l.shutdownTimer=null),Dn("node-watcher.child.exit",{root:l.root,generation:l.generation,childPid:o.pid??null,code:u,signal:d,shuttingDown:l.shuttingDown}),this.watcherChild===l&&(this.watcherChild=null),l.resolveExit()}),o.on("error",u=>{let d=u instanceof Error?u.message:String(u);this.log(`[NodeFileWatcher] watcher child error root=${e} error=${d}`),Dn("node-watcher.child.error",{root:e,generation:r,childPid:o.pid??null,error:d})}),Dn("node-watcher.spawn.complete",{root:e,generation:r,scriptPath:i,childPid:o.pid??null}),l}async handleChildMessage(e,t){if(!(!t||typeof t!="object"))switch(t.type){case"ready":this.handleReadyMessage(e,t);return;case"error":this.handleErrorMessage(e,t);return;case"batch":await this.handleBatchMessage(e,t);return;default:return}}handleReadyMessage(e,t){if(!this.isActiveChild(e)){Dn("node-watcher.ready.stale",{root:t.root,generation:t.generation,activeRoot:this.projectRoot,activeGeneration:this.watcherGeneration});return}this.log(`[NodeFileWatcher] ready root=${t.root} watchRoots=${t.watchRootCount??0} backend=${t.backendPreference??"native"}`),Dn("node-watcher.ready",{root:t.root,generation:t.generation,childPid:e.process.pid??null,watchRootCount:t.watchRootCount,backendPreference:t.backendPreference,watchmanAvailable:t.watchmanAvailable,watchmanInstallAttempted:t.watchmanInstallAttempted,watchmanInstallSucceeded:t.watchmanInstallSucceeded})}handleErrorMessage(e,t){let r=!this.isActiveChild(e);this.log(`[NodeFileWatcher] watch error path=${t.root} error=${t.error}`),Dn(r?"node-watcher.error.stale":"node-watcher.error",{root:t.root,generation:t.generation,childPid:e.process.pid??null,activeRoot:this.projectRoot,activeGeneration:this.watcherGeneration,error:t.error})}async handleBatchMessage(e,t){if(!this.isActiveChild(e)){Dn("node-watcher.batch.stale",{root:t.root,generation:t.generation,batchId:t.batchId,activeRoot:this.projectRoot,activeGeneration:this.watcherGeneration}),this.sendToChild(e,{type:"batch-ack",batchId:t.batchId,ok:!0});return}let r=kn.getExistingEngine(t.root);if(Dn("node-watcher.batch.start",{root:t.root,generation:t.generation,batchId:t.batchId,childPid:e.process.pid??null,created:t.changes.created.length,modified:t.changes.modified.length,deleted:t.changes.deleted.length,hasEngine:!!r,hasBatchHandler:typeof r?.handleBatchFileChanges=="function"}),!r||typeof r.handleBatchFileChanges!="function"){this.sendToChild(e,{type:"batch-ack",batchId:t.batchId,ok:!1,error:`No batch handler available for root ${t.root}`});return}try{await r.handleBatchFileChanges(t.changes),Dn("node-watcher.batch.complete",{root:t.root,generation:t.generation,batchId:t.batchId,childPid:e.process.pid??null}),this.sendToChild(e,{type:"batch-ack",batchId:t.batchId,ok:!0})}catch(s){let i=s instanceof Error?s.message:String(s);Dn("node-watcher.batch.failed",{root:t.root,generation:t.generation,batchId:t.batchId,childPid:e.process.pid??null,error:i}),this.sendToChild(e,{type:"batch-ack",batchId:t.batchId,ok:!1,error:i})}}isActiveChild(e){return this.watcherChild===e&&this.projectRoot===e.root&&this.watcherGeneration===e.generation}sendToChild(e,t){try{e.process.send?.(t)}catch(r){Dn("node-watcher.child.send.failed",{root:e.root,generation:e.generation,childPid:e.process.pid??null,messageType:t.type,error:r instanceof Error?r.message:String(r)})}}async shutdownChild(e,t){if(e.shuttingDown){await e.exitPromise;return}e.shuttingDown=!0,Dn("node-watcher.child.shutdown.begin",{root:e.root,generation:e.generation,childPid:e.process.pid??null,reason:t}),this.sendToChild(e,{type:"shutdown",reason:t}),e.shutdownTimer=setTimeout(()=>{Dn("node-watcher.child.shutdown.force-kill",{root:e.root,generation:e.generation,childPid:e.process.pid??null,reason:t,graceMs:this.shutdownGraceMs});try{e.process.kill("SIGKILL")}catch(r){Dn("node-watcher.child.shutdown.force-kill.failed",{root:e.root,generation:e.generation,childPid:e.process.pid??null,reason:t,error:r instanceof Error?r.message:String(r)})}},this.shutdownGraceMs),await e.exitPromise}};var tI=nI();function nI(){return process.env.PANDO_RUNTIME_HOST==="vscode-extension"||process.env.VSCODE_PID||process.env.VSCODE_IPC_HOOK||process.env.VSCODE_CWD?"vscode-extension":process.env.PANDO_RUNTIME_HOST==="standalone-cli"?"standalone-cli":"unknown"}function JS(n){tI=n,process.env.PANDO_RUNTIME_HOST=n}function VS(){return tI==="vscode-extension"}dr();ws();async function XS(n){let e=kn.getEngine(n),t={root:n,isIndexing:typeof e?.isIndexingInProgress=="function"?!!e.isIndexingInProgress():!1};try{let r=await e.execute({op:"workspace-overview"});if(!r?.success)return t;let s=r.indexing??{};return{root:n,isIndexing:!!(s.isIndexing??t.isIndexing),progress:typeof s.progress=="number"?s.progress:void 0,totalFiles:typeof s.totalFiles=="number"?s.totalFiles:void 0,filesProcessed:typeof s.filesProcessed=="number"?s.filesProcessed:void 0,filesIndexed:typeof s.filesIndexed=="number"?s.filesIndexed:void 0,filesSkipped:typeof s.filesSkipped=="number"?s.filesSkipped:void 0,filesFailed:typeof s.filesFailed=="number"?s.filesFailed:void 0,message:typeof s.message=="string"?s.message:void 0}}catch{return t}}gt();var Ed=class n extends rI.EventEmitter{constructor(t,r){super();this.rootManager=t;this.options=r;this.watcher=null}static async create(t){Rs()||Yo(process.cwd(),t.runtimePaths);let r=await Rd.create(t.initialRoot,{languageSupport:t.languageSupport,lspHost:t.lspHost}),s=new n(r,{...t});return s.warnIfIndexingSuppressed(r.getProjectRoot()),await s.configureWatcher(),s}warnIfIndexingSuppressed(t){!t||!this.rootManager.isIndexingSuppressed(t)||this.options.log?.(`indexing is OFF for '${t}': it has too many files to index safely. Pando is running but its code-graph tools will be empty here. Indexing will start automatically when you set the project root to a folder with fewer than ${ZS.toLocaleString()} files.`)}getProjectRoot(){return this.rootManager.getProjectRoot()}getRoots(){let t=this.getProjectRoot();return t?[t]:[]}getEngine(){return this.rootManager.getEngine()}async setProjectRoot(t){let r=this.getProjectRoot(),s=tn(t),i=Date.now();if(X("PandoRuntime","setProjectRoot begin",{requestedRoot:t,currentRoot:r,nextRoot:s}),await this.rootManager.validateProjectRoot(t),this.warnIfIndexingSuppressed(s),r===s)return X("PandoRuntime","setProjectRoot no-op",{requestedRoot:t,currentRoot:r,nextRoot:s,elapsedMs:Date.now()-i}),r;if(r&&r!==s){let c=kn.getExistingEngine(r),l=`project root switching from ${r} to ${s}`,u=(p,f,m)=>{X("PandoRuntime",`setProjectRoot phase:${p}`,{requestedRoot:t,currentRoot:r,nextRoot:s,elapsedMs:Date.now()-f,...m})},d=Date.now();try{c?.cancelActiveOperations?.("project root switching")}catch{}u("cancelActiveOperations",d,{hasEngine:!!c}),d=Date.now();try{c?.cancelIndexing?.("project root switching")}catch{}u("cancelIndexing",d),d=Date.now();try{kn.resetEngine(r)}catch{}u("resetEngine",d),d=Date.now(),Xf(),u("shutdownActiveStreamingIndexers",d),d=Date.now(),await Xs.shutdownAllShared({force:!0,reason:l}).catch(()=>{}),u("shutdownAllShared(force)",d),d=Date.now(),pa(l),u("shutdownSharedWorkers",d)}let o=Date.now(),a=await this.rootManager.setProjectRoot(t);if(X("PandoRuntime","setProjectRoot rootManager resolved",{requestedRoot:t,currentRoot:r,nextRoot:s,resolved:a,elapsedMs:Date.now()-o}),a){let c=Date.now();X("PandoRuntime","setProjectRoot watcher.updateProjectRoot begin",{requestedRoot:t,currentRoot:r,nextRoot:s,resolved:a,hasWatcher:!!this.watcher}),this.rootManager.isIndexingSuppressed(a)?X("PandoRuntime","setProjectRoot watcher skipped (root over indexing limit)",{requestedRoot:t,resolved:a}):await this.watcher?.updateProjectRoot(a,this.resolveLanguageSupport(a)),X("PandoRuntime","setProjectRoot watcher.updateProjectRoot complete",{requestedRoot:t,currentRoot:r,nextRoot:s,resolved:a,elapsedMs:Date.now()-c});let l=Date.now();X("PandoRuntime","setProjectRoot emit rootChanged begin",{requestedRoot:t,currentRoot:r,nextRoot:s,resolved:a}),this.emit("rootChanged",a),X("PandoRuntime","setProjectRoot emit rootChanged complete",{requestedRoot:t,currentRoot:r,nextRoot:s,resolved:a,elapsedMs:Date.now()-l})}return X("PandoRuntime","setProjectRoot complete",{requestedRoot:t,currentRoot:r,nextRoot:s,resolved:a,elapsedMs:Date.now()-i}),a}async startIndexing(){let t=this.getProjectRoot();if(!t)return;if(this.rootManager.isIndexingSuppressed(t)){X("PandoRuntime","startIndexing skipped (root over indexing limit)",{root:t}),this.emit("indexing",{root:t,isIndexing:!1});return}let r=this.rootManager.getEngine();this.emit("indexing",{root:t,isIndexing:!0}),r.startIndexing?.()}async getIndexingStatus(){let t=this.getProjectRoot();return t?XS(t):null}async getWorkspaceOverview(){let t=this.getProjectRoot();if(!t)return null;let r=this.rootManager.getEngine();try{let s=await r.execute({op:"workspace-overview"});if(!s?.success)return null;let i=s.nodes??{},o=Wr(i.functions),a=Wr(i.classes),c=Wr(i.interfaces),l=Wr(i.types),u=Wr(i.enums),d=Wr(i.variables),p=[o,a,c,l,u,d].filter(f=>typeof f=="number").reduce((f,m)=>f+m,0);return{root:t,files:{total:Wr(s.files?.total),testFiles:Wr(s.files?.testFiles)},nodes:{total:p||void 0,functions:o,classes:a,interfaces:c,types:l,enums:u,variables:d},indexing:{root:t,isIndexing:!!s.indexing?.isIndexing,totalFiles:Wr(s.indexing?.totalFiles),filesProcessed:Wr(s.indexing?.filesProcessed),filesIndexed:Wr(s.indexing?.filesIndexed),filesSkipped:Wr(s.indexing?.filesSkipped),filesFailed:Wr(s.indexing?.filesFailed),progress:Wr(s.indexing?.progress),message:typeof s.indexing?.message=="string"?s.indexing.message:void 0},writes:{ready:!!s.writes?.ready,blocked:!!(s.writes?.blocked??!s.writes?.ready),reason:typeof s.writes?.reason=="string"?s.writes.reason:void 0,message:typeof s.writes?.message=="string"?s.writes.message:void 0,gates:{metadataIndexingComplete:!!s.writes?.gates?.metadataIndexingComplete,snapshotComplete:!!s.writes?.gates?.snapshotComplete,ftsRequired:!1}},lsp:s.lsp&&typeof s.lsp=="object"?s.lsp:void 0}}catch{return null}}async stop(){let t=this.getProjectRoot();await this.watcher?.dispose(),this.watcher=null;let r=t?tn(t):null,s=r?kn.getExistingEngine(r):null;try{s?.cancelActiveOperations?.("runtime stopped")}catch{}try{s?.cancelIndexing?.("runtime stopped")}catch{}if(Xf(),await Xs.shutdownAllShared({force:!0,reason:"runtime stopped"}).catch(()=>{}),pa("runtime stopped"),Yy(),!!r){try{s?.dispose?.()}catch{}kn.clearEngine(r)}}reloadLanguageSupport(t){let r=tn(t),s=this.resolveLanguageSupport(r);this.rootManager.updateRootOptions(r,{languageSupport:s,lspHost:this.options.lspHost}),this.getProjectRoot()===r&&this.watcher?.updateProjectRoot(r,s)}async configureWatcher(){if(this.options.enableFileWatching===!1||VS())return;let t=this.getProjectRoot();if(t){if(this.rootManager.isIndexingSuppressed(t)){X("PandoRuntime","configureWatcher skipped (root over indexing limit)",{root:t});return}this.watcher=new Ym(r=>this.options.log?.(r)??void 0),await this.watcher.activate(t,this.resolveLanguageSupport(t))}}resolveLanguageSupport(t){return this.options.languageSupport??Vo(t)}};function Wr(n){return typeof n=="number"?n:void 0}dr();async function eh(n,e={}){return e.hostKind&&JS(e.hostKind),e.runtimePaths&&Yo(e.runtimePaths.runtimeRoot??n,e.runtimePaths),Ed.create({initialRoot:n,languageSupport:e.languageSupport,lspHost:e.lspHost,transportMode:e.transportMode,enableFileWatching:e.enableFileWatching,log:e.log,runtimePaths:e.runtimePaths})}dr();var Id=q(require("path"));ws();Vt();var S1="Compared against a smart non-pando workflow that would only send targeted declaration/reference snippets and minimal surrounding context, not full files.";var Ba={language:null,charsPerLine:40,charsPerToken:4,searchLines:6,confidence:"heuristic"},x1={c:{language:"c",charsPerLine:40.09,charsPerToken:3.98,searchLines:5.91,confidence:"trace-high"},cpp:{language:"cpp",charsPerLine:42.56,charsPerToken:3.99,searchLines:6.89,confidence:"trace-high"},csharp:{language:"csharp",charsPerLine:38.55,charsPerToken:3.99,searchLines:3.76,confidence:"trace-low"},js:{language:"js",charsPerLine:39.75,charsPerToken:3.98,searchLines:6.02,confidence:"trace-high"},ts:{language:"ts",charsPerLine:37.3,charsPerToken:3.99,searchLines:7.67,confidence:"trace-high"},java:{language:"java",charsPerLine:40,charsPerToken:4,searchLines:6,confidence:"trace-sparse"},clojure:{language:"clojure",charsPerLine:40,charsPerToken:4,searchLines:6,confidence:"modeled-only"},dart:{language:"dart",charsPerLine:40,charsPerToken:4,searchLines:6,confidence:"modeled-only"}};function Xi(n){return typeof n!="number"||!Number.isFinite(n)?0:Math.max(0,Math.floor(n))}function Cd(n){return Math.max(0,Math.floor(n))}function cI(n,e=Ba){return Cd(Math.round(n*e.charsPerLine))}function nh(n,e=Ba){return n<=0?0:Cd(Math.ceil(n/e.charsPerToken))}function _1(n){return Buffer.byteLength(n,"utf8")}function w1(n){let e=n[n.length-1],t=n[n.length-2],r=n[n.length-3];return e?e==="content"&&t==="body"||e==="content"&&t==="code"&&r==="self"||e==="content"&&t==="code"?!0:e==="source"||e==="sourceText"||e==="sourceCode"||e==="rawSource"||e==="excerpt"||e==="snippet"||e==="oldString"||e==="old_string"||e==="originalFile"||e==="gitDiff"||e==="diff"||e==="patch":!1}function lI(n){let e=new Set,t=(r,s)=>{if(typeof r=="string")return w1(s)?_1(r):0;if(!r||typeof r!="object"||e.has(r))return 0;if(e.add(r),Array.isArray(r))return r.reduce((o,a,c)=>o+t(a,[...s,String(c)]),0);let i=0;for(let[o,a]of Object.entries(r))i+=t(a,[...s,o]);return i};return Cd(t(n,[]))}function tx(n){if(Array.isArray(n))return n.length===1?tx(n[0]):null;if(typeof n!="string")return null;let e=n.trim().toLowerCase();return e?e==="typescript"||e==="tsx"?"ts":e==="javascript"||e==="jsx"?"js":e==="c++"||e==="cc"||e==="cxx"?"cpp":e==="c#"||e==="cs"?"csharp":e==="clj"||e==="cljs"||e==="cljc"?"clojure":e:null}function Un(n){if(typeof n!="string")return null;let e=n.split("#",1)[0].split("?",1)[0].toLowerCase();return/\.(ts|tsx)$/.test(e)?"ts":/\.(js|jsx|mjs|cjs)$/.test(e)?"js":/\.(cc|cpp|cxx|c\+\+|hpp|hh|hxx)$/.test(e)?"cpp":/\.(c|h)$/.test(e)?"c":/\.cs$/.test(e)?"csharp":/\.java$/.test(e)?"java":/\.(clj|cljs|cljc|edn)$/.test(e)?"clojure":/\.dart$/.test(e)?"dart":null}function th(n){let e=tx(n?.lang??n?.language);if(e)return e;let t=Un(n?.path)??Un(n?.file)??Un(n?.file_path)??Un(n?.newFile)??Un(n?.oldFile)??Un(n?.bodyEndOf)??Un(n?.bodyStartOf)??Un(n?.before)??Un(n?.after)??Un(n?.start)??Un(n?.end)??Un(n?.location?.file);return t||null}function v1(n,e){let t=tx(n.lang)??Un(n.path)??Un(n.to)??Un(n.of)??Un(n.file)??Un(n.newFile)??th(n.to)??th(n.scope)??Un(n.scope?.file)??(Array.isArray(n.scope?.files)?Un(n.scope.files[0]):null);if(t)return t;for(let r of[e.results,e.items,e.exports])if(Array.isArray(r))for(let s of r){let i=th(s);if(i)return i}return th(e)}function R1(n,e){let t=v1(n,e);return t?x1[t]??{...Ba,language:t,confidence:"heuristic"}:Ba}function k1(n,e){return e==="trace-high"?n:e==="trace-low"||e==="trace-sparse"||e==="modeled-only"?"low":n==="high"?"medium":n}function QS(n,e){let t=n.savedItems.map(s=>{let i=cI(s.estimatedLinesNotSent,e);return{...s,estimatedCharsNotSent:i,estimatedTokensNotSent:nh(i,e)}}),r=t.reduce((s,i)=>s+i.estimatedCharsNotSent,0);return{...n,confidence:k1(n.confidence,e.confidence),savedItems:t,language:e.language,calibrationConfidence:e.confidence,charsPerLine:e.charsPerLine,charsPerToken:e.charsPerToken,counterfactualTextToolChars:r,estimatedCharsNotSent:r,estimatedTokensNotSent:nh(r,e)}}function sI(n,e){return Math.max(1,Math.round(n.searchLines||e))}function Tn(n,e,t,r,s){let i=Xi(t),o=Xi(r);if(i<=0||o<=0)return null;let a=i*o,c=cI(a),l=nh(c);return{key:n,label:e,count:i,linesPerUnit:o,estimatedLinesNotSent:a,estimatedCharsNotSent:c,estimatedTokensNotSent:l,note:s}}function iI(){return{version:1,calls:0,successfulCalls:0,callsWithSavings:0,estimatedLinesNotSent:0,counterfactualTextToolChars:0,pandoActualSourceChars:0,estimatedCharsNotSent:0,estimatedTokensNotSent:0,byOperation:{},lastUpdatedAt:null}}function Cr(n,e,t,r,s,i){let o=i.filter(d=>d!==null),a=o.reduce((d,p)=>d+p.estimatedLinesNotSent,0),c=o.reduce((d,p)=>d+p.estimatedCharsNotSent,0),l=c,u=o.reduce((d,p)=>d+p.estimatedTokensNotSent,0);return{version:1,op:n,success:e,method:t,confidence:r,comparisonBaseline:S1,rationale:s,savedItems:o,estimatedLinesNotSent:a,language:null,calibrationConfidence:Ba.confidence,charsPerLine:Ba.charsPerLine,charsPerToken:Ba.charsPerToken,counterfactualTextToolChars:c,pandoActualSourceChars:0,estimatedCharsNotSent:l,estimatedTokensNotSent:u}}function YS(n,e){let t=lI(e);if(!n.success||n.counterfactualTextToolChars<=0)return{...n,pandoActualSourceChars:t};let r=Cd(n.counterfactualTextToolChars-t);return{...n,pandoActualSourceChars:t,estimatedCharsNotSent:r,estimatedTokensNotSent:nh(r,{language:n.language,charsPerLine:n.charsPerLine,charsPerToken:n.charsPerToken,searchLines:6,confidence:n.calibrationConfidence})}}function Td(n,e,t){return Cr(n,e,"none","low",t,[])}function E1(n){switch(n.key){case"candidate-node-metadata":return"declaration snippets";case"candidate-node-self":return"extra declaration context";case"candidate-node-body":return"residual declaration context";case"reference-sites":return"reference snippets";case"caller-sites":return"caller snippets";case"export-result-contexts":return"export snippets";case"import-file-summaries":case"import-module-summaries":return"import snippets";case"namespace-graph-nodes":return"namespace declaration snippets";case"namespace-graph-edges":return"namespace dependency snippets";case"namespace-plan-edits":return"planned rewrite snippets";case"namespace-plan-declaration-context":return"namespace declaration context";case"reference-edit-contexts":return"reference edit snippets";case"declaration-context":return"declaration context";case"delete-target-context":return"delete target snippets";case"delete-reference-contexts":return"reference deletion snippets";case"signature-declaration-context":return"signature declaration context";case"signature-callsite-contexts":return"call-site rewrite snippets";case"fmr-match-contexts":return"matched code snippets";case"namespace-rewrite-files":return"namespace rewrite snippets";case"namespace-declaration-context":return"namespace declaration context";case"text-file-edit-context":return"text file edit context";default:return n.label.replace(/\bthat did not need to be sent\b/gi,"").replace(/\bdid not need raw import snippets\b/gi,"").replace(/\s+/g," ").trim().replace(/[.;:]$/,"")}}function rh(n){if(!n||n.estimatedTokensNotSent<=0&&n.pandoActualSourceChars<=0)return;let e=n.savedItems.filter(i=>i.estimatedTokensNotSent>0).map(i=>({label:E1(i),count:i.count,estimatedLines:i.estimatedLinesNotSent,estimatedChars:i.estimatedCharsNotSent,estimatedTokens:i.estimatedTokensNotSent})),t=e.reduce((i,o)=>i+o.count,0),r=t===1?"snippet":"snippets",s=`; Pando returned ${n.pandoActualSourceChars} chars of source`;return{version:1,op:n.op,summary:`Would have sent about ${n.estimatedCharsNotSent} chars / ${n.estimatedTokensNotSent} tokens across ${t} ${r}${s}.`,confidence:n.confidence,language:n.language,calibrationConfidence:n.calibrationConfidence,charsPerLine:n.charsPerLine,charsPerToken:n.charsPerToken,estimatedLines:n.estimatedLinesNotSent,counterfactualTextToolChars:n.counterfactualTextToolChars,pandoActualSourceChars:n.pandoActualSourceChars,estimatedChars:n.estimatedCharsNotSent,estimatedTokens:n.estimatedTokensNotSent,wouldSend:e}}function uI(n){return Array.isArray(n.results)?n.results:Array.isArray(n.items)?n.items:Array.isArray(n.exports)?n.exports:[]}function nx(n){let e=n.details;return typeof e?.changedFileCount=="number"?Xi(e.changedFileCount):Array.isArray(e?.allChangedFiles)?e.allChangedFiles.length:Array.isArray(e?.changedFiles)?e.changedFiles.length:Xi(n.changes?.count??0)}function qa(n){return Array.isArray(n)?n.length:0}function T1(n,e){let t=uI(e),r=0,s=0,i=0;for(let o of t){if(o?.body?.content){i+=1;continue}if(o?.self?.code?.content){s+=1;continue}r+=1}return Cr(n,e.success,"mixed","medium","Structured node discovery avoids sending most candidate snippets; when self/body is requested, the saved amount is reduced rather than treated as zero.",[Tn("candidate-node-metadata","Candidate node snippets that did not need to be sent",r,4,"Metadata-only results usually avoid sending the declaration line plus minimal surrounding context for each candidate."),Tn("candidate-node-self","Additional node context avoided even when self was requested",s,2,"Including the node itself still avoids some surrounding context a smart text workflow would usually inspect."),Tn("candidate-node-body","Residual declaration context avoided when body content was requested",i,1,"Requesting body content removes most of the privacy advantage, so only a minimal declaration-context saving is counted.")])}function oI(n,e,t,r){let s=uI(e).length;return Cr(n,e.success,"exact-counts","high","Structured locations avoid sending per-location code snippets and nearby context.",[Tn(t,t==="reference-sites"?"Reference-site snippets that did not need to be sent":"Caller-site snippets that did not need to be sent",s,r,"The comparison assumes a smart text workflow would only send a minimal location snippet for each result.")])}function P1(n,e){let t=qa(e.exports);return Cr(n,e.success,"exact-counts","medium","Structured export lookup answers declaration-discovery questions without sending export snippets or nearby code.",[Tn("export-result-contexts","Export declaration snippets that did not need to be sent",t,2,"Only the returned export entries are counted, which keeps paginated list-exports calls conservative.")])}function C1(n,e){let t=e.imports,r=qa(t?.files),s=qa(t?.external),i=qa(t?.internal);return Cr(n,e.success,"exact-counts","medium","Import analysis returns grouped dependency structure without sending raw import blocks; only visible grouped entries are counted.",[Tn("import-file-summaries","Per-file import summaries that did not need raw import snippets",r,2,"When grouped by file, the estimate counts one small import-summary snippet per returned file entry."),Tn("import-module-summaries","Grouped import summaries that did not need raw import snippets",s+i,2,"When grouped by module, the estimate counts only the returned grouped entries rather than every underlying import usage.")])}function aI(n,e,t){let r=qa(e.namespaces),s=qa(e.edges);return Cr(n,e.success,"exact-counts","medium",t,[Tn("namespace-graph-nodes","Namespace declaration snippets that did not need to be sent",r,1,"Each returned namespace usually corresponds to at least one small ns-form context in a text-based workflow."),Tn("namespace-graph-edges","Namespace dependency snippets that did not need to be sent",s,2,"Each returned edge usually corresponds to one focused require/refer snippet in a text-based workflow.")])}function I1(n,e){let t=qa(e.namespaceEdits);return Cr(n,e.success,"exact-counts","medium","Namespace planning computes the affected declaration and dependent files without sending each candidate require/ns snippet to the provider.",[Tn("namespace-plan-edits","Planned namespace rewrite snippets that did not need to be sent",t,4,"The estimate counts one small rewrite-planning snippet per planned file edit."),Tn("namespace-plan-declaration-context","Namespace declaration context that only needed to be localized once",e.success?1:0,6,"The source namespace still needs one focused declaration context to build the plan.")])}function A1(n,e){let t=Xi(e.details?.referencesRenamed);return Cr(n,e.success,"exact-counts","high","Rename uses exact reference counts already produced by the executor, then applies a conservative per-reference context window.",[Tn("reference-edit-contexts","Reference edit contexts that did not need to be sent",t,3,"A smart non-pando workflow would still need to send each reference with a small amount of surrounding code before editing or approving it."),Tn("declaration-context","Declaration context that only needed to be localized once",e.success?1:0,6,"The declaration still has to be identified, but pando does not require the model to receive surrounding code for every downstream edit.")])}function N1(n,e){let t=Xi(e.details?.deletedCount),r=Array.isArray(e.details?.receipt?.appliedReferences)?e.details.receipt.appliedReferences.length:0;return Cr(n,e.success,r>0?"mixed":"heuristic",r>0?"high":"medium","Applied reference counts are exact when the executor exposes them; otherwise only the target-level deletion context is counted.",[Tn("delete-target-context","Delete target contexts that did not need to be sent",t,6,"Each delete target typically needs declaration-level context in a text-based workflow."),Tn("delete-reference-contexts","Reference deletion contexts that did not need to be sent",r,4,"When reference edits are applied automatically, pando avoids sending each reference and a small surrounding window.")])}function M1(n,e){let t=Xi(e.details?.callSiteStats?.auto_rewritten??e.changes?.callSitesAutoRewritten??0);return Cr(n,e.success,"exact-counts","high","The executor already reports how many call sites were rewritten automatically, so the privacy estimate can stay count-exact while using conservative context windows.",[Tn("signature-declaration-context","Function signature context that did not need to be sent repeatedly",e.success?1:0,6,"Only one declaration/signature context is counted for the target function."),Tn("signature-callsite-contexts","Auto-rewritten call-site contexts that did not need to be sent",t,5,"The estimate only counts call sites pando rewrote automatically; manual-review sites are not claimed as privacy savings.")])}function D1(n,e,t){let r=Xi(t.details?.receipt?.processedCount??t.details?.processedCount??t.details?.succeededCount??0),i=(Array.isArray(e.transforms)?e.transforms.length:0)>0?"filter-map-reduce localizes and rewrites matches without shipping matched code to the provider; the count is based on processed matches, not full-file size.":"filter-map-reduce localizes matches without shipping matched code to the provider.";return Cr(n,t.success,"exact-counts","high",i,[Tn("fmr-match-contexts","Matched-node contexts that did not need to be sent",r,6,"The baseline assumes a smart text workflow would still need to send a small snippet for every matched location before applying or validating a transform.")])}function ex(n,e,t,r,s){let i=nx(e);return Cr(n,e.success,"heuristic","medium",s,[Tn(`${n}-target-context`,r,i>0?1:0,t,"The estimate assumes one minimal target/anchor snippet would otherwise need to be sent for a single focused edit.")])}function F1(n,e){let t=nx(e),r=Xi(e.details?.appliedEdits??e.details?.receipt?.appliedEdits??0);return Cr(n,e.success,"heuristic","medium","Text-only edits to intentionally unindexed config/hook files avoid sending the target file or surrounding edit context to the provider; this estimate counts only a small local context window per changed file.",[Tn("text-file-edit-context","Text-file edit context that did not need to be sent",t>0?Math.max(1,r):0,8,"The baseline assumes a smart text workflow would inspect at least a focused snippet for each applied text edit, not necessarily the whole config file.")])}function O1(n,e){let t=nx(e);return Cr(n,e.success,"mixed","medium","Namespace rewrites typically require touching several import/require sites; the estimate stays conservative and file-based.",[Tn("namespace-rewrite-files","Namespace/import rewrite snippets that did not need to be sent",t,4,"A smart text workflow would usually send at least one small require/import snippet per changed file."),Tn("namespace-declaration-context","Namespace declaration context that only needed to be localized once",e.success?1:0,6,"The namespace declaration itself still needs one focused context window.")])}function dI(n,e,t){let r=!!t?.success,s=R1(e,t);if(!n)return YS(QS(Td("unknown",r,"Operation name unavailable; no privacy savings claimed."),s),t);if(!r)return YS(QS(Td(n,!1,"Operation did not succeed, so no privacy savings are claimed."),s),t);let i=(()=>{switch(n){case"find-nodes":return T1(n,t);case"find-references":return oI(n,t,"reference-sites",sI(s,6));case"find-callers":return oI(n,t,"caller-sites",sI(s,6));case"list-exports":return P1(n,t);case"analyze-imports":return C1(n,t);case"clojure-namespace-graph":return aI(n,t,"Namespace graph queries return cross-file dependency structure without sending the underlying ns/require snippets.");case"clojure-namespace-dependencies":case"clojure-namespace-dependents":return aI(n,t,"Namespace traversal returns dependency edges directly, avoiding per-edge code snippets in the provider request.");case"plan-clojure-namespace-move":case"plan-clojure-namespace-rename":return I1(n,t);case"rename":return A1(n,t);case"delete":return N1(n,t);case"change-signature":return M1(n,t);case"filter-map-reduce":return D1(n,e,t);case"replace":return ex(n,t,10,"Target replacement context that did not need to be sent","A focused replace still needs target localization in a text-based workflow; pando avoids sending that local code window.");case"replace-body":return ex(n,t,12,"Body replacement context that did not need to be sent","Body replacement typically requires a slightly larger context window than full-node replacement.");case"edit-file-text":return F1(n,t);case"insert":case"add-code":return e?.createFileIfMissing?Td(n,!0,"Insert created a new file, so no existing code context savings are claimed."):ex(n,t,8,"Insertion anchor context that did not need to be sent","A targeted insert usually needs local anchor context in a text-based workflow; pando keeps that out of the provider request.");case"rename-clojure-namespace":case"move-clojure-namespace":return O1(n,t);default:return Td(n,!0,"Administrative or metadata-only operation; privacy savings are too small or too uncertain to claim conservatively.")}})();return YS(QS(i,s),t)}function rx(n,e){if(e.length===0)return Td(n,!0,"No underlying operation estimates were available.");let t=e.every(u=>u.success),r=e.every(u=>u.method==="exact-counts")?"exact-counts":e.some(u=>u.method==="none")?"mixed":e.every(u=>u.method==="heuristic")?"heuristic":"mixed",s=e.every(u=>u.confidence==="high")?"high":e.some(u=>u.confidence==="low")?"low":"medium",i=new Map;for(let u of e)for(let d of u.savedItems){let p=i.get(d.key);if(!p){i.set(d.key,{...d});continue}p.count+=d.count,p.estimatedLinesNotSent+=d.estimatedLinesNotSent,p.estimatedCharsNotSent+=d.estimatedCharsNotSent,p.estimatedTokensNotSent+=d.estimatedTokensNotSent}let o=Cr(n,t,r,s,"Combined from per-root operation estimates in the current dispatcher session.",Array.from(i.values())),a=e.reduce((u,d)=>u+d.pandoActualSourceChars,0),c=Cd(o.counterfactualTextToolChars-a),l=e.reduce((u,d)=>u+d.estimatedTokensNotSent,0);return{...o,language:e.every(u=>u.language===e[0]?.language)?e[0]?.language??null:null,calibrationConfidence:e.every(u=>u.calibrationConfidence==="trace-high")?"trace-high":e.some(u=>u.calibrationConfidence==="modeled-only")?"modeled-only":e.some(u=>u.calibrationConfidence==="trace-low")?"trace-low":e.some(u=>u.calibrationConfidence==="trace-sparse")?"trace-sparse":"heuristic",pandoActualSourceChars:a,estimatedCharsNotSent:c,estimatedTokensNotSent:l}}var Pd=class{constructor(){this.summary=iI()}record(e,t,r){let s=dI(e,t,r),i=this.summary.byOperation[e]??{calls:0,successfulCalls:0,callsWithSavings:0,estimatedLinesNotSent:0,counterfactualTextToolChars:0,pandoActualSourceChars:0,estimatedCharsNotSent:0,estimatedTokensNotSent:0};return i.calls+=1,s.success&&(i.successfulCalls+=1),s.estimatedTokensNotSent>0&&(i.callsWithSavings+=1),i.estimatedLinesNotSent+=s.estimatedLinesNotSent,i.counterfactualTextToolChars+=s.counterfactualTextToolChars,i.pandoActualSourceChars+=s.pandoActualSourceChars,i.estimatedCharsNotSent+=s.estimatedCharsNotSent,i.estimatedTokensNotSent+=s.estimatedTokensNotSent,this.summary.byOperation[e]=i,this.summary.calls+=1,s.success&&(this.summary.successfulCalls+=1),s.estimatedTokensNotSent>0&&(this.summary.callsWithSavings+=1),this.summary.estimatedLinesNotSent+=s.estimatedLinesNotSent,this.summary.counterfactualTextToolChars+=s.counterfactualTextToolChars,this.summary.pandoActualSourceChars+=s.pandoActualSourceChars,this.summary.estimatedCharsNotSent+=s.estimatedCharsNotSent,this.summary.estimatedTokensNotSent+=s.estimatedTokensNotSent,this.summary.lastUpdatedAt=new Date().toISOString(),{operation:s,session:this.getSessionSummary()}}getSessionSummary(){let e={};for(let[t,r]of Object.entries(this.summary.byOperation))e[t]={...r};return{...this.summary,byOperation:e}}reset(){return this.summary=iI(),this.getSessionSummary()}};gt();function js(n){let e=n.details;return e?typeof e.changedFileCount=="number"?e.changedFileCount:Array.isArray(e.allChangedFiles)?e.allChangedFiles.length:Array.isArray(e.changedFiles)?e.changedFiles.length:n.changes?.count??0:n.changes?.count??0}function sh(n){return n.page?.totalCount??n.totalCount??(Array.isArray(n.results)?n.results.length:0)}var $1={rename:n=>({primary:js(n),secondary:n.details?.referencesRenamed??0}),delete:n=>({primary:js(n),secondary:n.details?.deletedCount??0}),insert:n=>({primary:js(n),secondary:n.created?1:0}),replace:n=>({primary:js(n),secondary:0}),"replace-body":n=>({primary:js(n),secondary:0}),"change-signature":n=>({primary:js(n),secondary:n.changes?.callSitesAutoRewritten??0}),"filter-map-reduce":n=>({primary:js(n),secondary:0}),"find-references":n=>({primary:sh(n),secondary:0}),"find-callers":n=>({primary:sh(n),secondary:0}),"find-nodes":n=>({primary:sh(n),secondary:0}),"workspace-overview":()=>({primary:0,secondary:0}),"list-exports":n=>({primary:n.page?.totalCount??(Array.isArray(n.exports)?n.exports.length:0),secondary:0}),"analyze-imports":n=>{let e=n.page;return{primary:e?.files?.totalCount??(e?.external?.totalCount??0)+(e?.internal?.totalCount??0),secondary:0}},"clojure-namespace-graph":n=>({primary:n.details?.namespaceCount??0,secondary:n.details?.edgeCount??0}),"clojure-namespace-dependencies":n=>({primary:n.namespacesPage?.totalCount??(Array.isArray(n.namespaces)?n.namespaces.length:0),secondary:n.edgesPage?.totalCount??(Array.isArray(n.edges)?n.edges.length:0)}),"clojure-namespace-dependents":n=>({primary:n.namespacesPage?.totalCount??(Array.isArray(n.namespaces)?n.namespaces.length:0),secondary:n.edgesPage?.totalCount??(Array.isArray(n.edges)?n.edges.length:0)}),"move-clojure-namespace":n=>({primary:js(n),secondary:0}),"rename-clojure-namespace":n=>({primary:js(n),secondary:0}),"snapshot-worktree":()=>({primary:0,secondary:0}),"restore-snapshot":n=>({primary:js(n),secondary:0}),"restore-files":n=>({primary:js(n),secondary:0})},j1=n=>({primary:js(n),secondary:sh(n)});function L1(n,e){let t=$1[n]??j1;try{return t(e)}catch{return{primary:0,secondary:0}}}var z1=0;function sx(){return`${Date.now()}-${++z1}`}function pI(n,e,t,r){let s=L1(n,e);return{schema_version:1,call_id:r,op:n,success:e.success,duration_ms:Math.max(0,Math.round(t)),error_code:e.error_code??void 0,primary_count:s.primary,secondary_count:s.secondary,timestamp:new Date().toISOString()}}var fI="_privacyOperation";function hI(n){let e=n.trim();if(!e)return null;let t=e;return(e.startsWith("pando_")||e.startsWith("pando-"))&&(t=e.slice(6)),t?t.replace(/_/g,"-"):null}function gI(n,e){let t={...e};return delete t.root,t}var Yc=class{constructor(e){this.config=e;this.privacyCounter=new Pd}async dispatch(e,t,r){let s=Date.now();X("PandoOp","op begin",{tool:e});let i;try{i=await this.dispatchInner(e,t,r)}catch(o){let a=o instanceof Error?o.message:String(o);throw X("PandoOp","op threw",{tool:e,error:a,elapsedMs:Date.now()-s}),o}return X("PandoOp","op end",{tool:e,success:i.success,...i.success?{}:{error:i.error},elapsedMs:Date.now()-s}),i}async dispatchInner(e,t,r){let s=hI(e);if(!s)return{success:!1,error:`Unknown tool: ${e}`};if(s==="set-project-root"){let p=typeof t.root=="string"?t.root.trim():"";if(!p)return{success:!1,error:"Missing required parameter: root"};if(B1(p))return{success:!1,error:"Filesystem root '/' cannot be used as a project root."};let f=Date.now();X("PandoToolDispatcher","set-project-root begin",{toolName:e,requestedRoot:p});let m;try{m=await this.config.onProjectRootAdded?.(p)}catch(h){let g=h instanceof Error?h.message:String(h);return X("PandoToolDispatcher","set-project-root rejected",{toolName:e,requestedRoot:p,error:g,elapsedMs:Date.now()-f}),{success:!1,error:g}}return m?(X("PandoToolDispatcher","set-project-root complete",{toolName:e,requestedRoot:p,resolvedRoot:m,elapsedMs:Date.now()-f}),{success:!0,data:this.attachPrivacyToData("set-project-root",t,{projectRoot:m},{success:!0})}):(X("PandoToolDispatcher","set-project-root failed",{toolName:e,requestedRoot:p,elapsedMs:Date.now()-f}),{success:!1,error:`Unable to add project root: ${p}`})}let i=this.resolveToolRoots(t);if(!i.roots.length&&i.error)return{success:!1,error:i.error,data:i.availableRoots?{availableRoots:i.availableRoots}:void 0};let o=i.roots;if(s==="get-project-root")return o.length<=1?{success:!0,data:this.attachPrivacyToData("get-project-root",t,{projectRoot:o[0]??null},{success:!0})}:{success:!0,data:this.attachPrivacyToData("get-project-root",t,{projectRoots:o},{success:!0})};if(!o.length)return{success:!1,error:"No workspace root available."};if(s==="read-this-first")return{success:!0,data:this.attachPrivacyToData("read-this-first",t,{help:this.config.loadReadThisFirstMessage()},{success:!0})};let a=gI(s,t),c={op:s,...a},l=sx(),u=r?.telemetry;if(this.isReadOnlyTool(e,s))return this.dispatchReadOnly(o,c,r?.signal,l,u);if(o.length>1){let p=[];for(let m of o)p.push(await this.executeOne(m,c,r?.signal,l,u));await this.handlePostDispatchEffects(s,p);let f=this.buildAggregatePrivacy(s,p);return{success:!0,data:{perRoot:p,...f?{privacy:f}:{}}}}let d=await this.executeOne(o[0],c,r?.signal,l,u);if(!d.success){let p=d.error??"Operation failed",f=Array.isArray(d.result?.hints)?d.result.hints:void 0;return{success:!1,error:p,...f?{hints:f}:{},data:d.result??{success:!1,error:p}}}return await this.handlePostDispatchEffects(s,[d]),{success:!0,data:d.result}}getPrivacySummary(){return this.privacyCounter.getSessionSummary()}resetPrivacySummary(){return this.privacyCounter.reset()}resolveToolRoots(e){if(this.config.resolveRoots)return this.config.resolveRoots(e);let t=this.config.roots(),r=typeof e.root=="string"?e.root.trim():"";if(!r)return{roots:t};let s=tn(Id.default.isAbsolute(r)?r:Id.default.resolve(t[0]??process.cwd(),r)),i=t.map(o=>tn(o));return i.includes(s)?{roots:[s]}:{roots:[],error:`Requested root is not registered: ${r}`,availableRoots:i}}async dispatchReadOnly(e,t,r,s,i){if(e.length===1){let d=await this.executeOne(e[0],t,r,s,i);if(!d.success){let p=d.error??"Operation failed",f=Array.isArray(d.result?.hints)?d.result.hints:void 0;return{success:!1,error:p,...f?{hints:f}:{},data:d.result??{success:!1,error:p}}}return{success:!0,data:d.result}}let o=[],a=[],c=0,l=!1;for(let d of e){let p=await this.executeOne(d,t,r,s,i);if(o.push(p),!p.success||!p.result)continue;let f=Array.isArray(p.result.items)?p.result.items:Array.isArray(p.result.results)?p.result.results:null;if(!f)continue;for(let g of f)a.push({...g,root:d});let m=p.result.page,h=typeof m?.totalCount=="number"?m.totalCount:typeof p.result.totalCount=="number"?p.result.totalCount:f.length;c+=h,l=l||!!m?.hasMore||!!p.result.hasMore}let u=this.buildAggregatePrivacy(String(t.op||"unknown"),o);return{success:!0,data:{summary:H1(o,a.length?{shownCount:a.length,totalCount:c,hasMore:l}:void 0),results:a.length?a:void 0,totalCount:a.length?c:void 0,hasMore:a.length?l:void 0,perRoot:o,...u?{privacy:u}:{}}}}async executeOne(e,t,r,s,i){let o=typeof t.op=="string"?t.op:"unknown",a=Date.now();try{let l=await kn.getEngine(e).execute(t,{signal:r}),u=this.attachPrivacyToResult(o,t,l);if(await this.emitTelemetry(o,l,Date.now()-a,e,s,i),!l.success){let d=mI(l.error||"Operation failed");return{root:e,success:!1,error:d,result:{...u,error:d}}}return{root:e,success:!0,result:u}}catch(c){let l={success:!1,error:c instanceof Error?c.message:String(c)},u=this.attachPrivacyToResult(o,t,l);await this.emitTelemetry(o,l,Date.now()-a,e,s,i);let d=mI(c instanceof Error?c.message:String(c));return{root:e,success:!1,error:d,result:{...u,error:d}}}}async emitTelemetry(e,t,r,s,i,o){try{let a=this.config.onTelemetry?.(pI(e,t,r,i??sx()),s,o);if(!a)return;let c=Promise.resolve(a);if(!this.config.awaitTelemetry){c.catch(()=>{});return}await q1(c,this.config.telemetryTimeoutMs??1e3)}catch{}}async handlePostDispatchEffects(e,t){if(e==="set-enabled-languages")for(let r of t)r.success&&r.result?.details?.languageSupportChanged===!0&&await this.config.onLanguageSupportChanged?.(r.root)}isReadOnlyTool(e,t){let r=t.replace(/-/g,"_");return this.config.readOnlyTools.has(e)||this.config.readOnlyTools.has(t)||this.config.readOnlyTools.has(r)||this.config.readOnlyTools.has(`pando_${r}`)||this.config.readOnlyTools.has(`pando-${t}`)}attachPrivacyToResult(e,t,r){let s=this.privacyCounter.record(e,t,r),i=rh(s.operation),o={...r,...i?{privacy:i}:{}};return Object.defineProperty(o,fI,{value:s.operation,enumerable:!1,configurable:!0,writable:!1}),o}attachPrivacyToData(e,t,r,s){let i=rh(this.privacyCounter.record(e,t,s).operation);return{...r,...i?{privacy:i}:{}}}buildAggregatePrivacy(e,t){let r=t.map(s=>s.result?.[fI]).filter(s=>!!s);return rh(rx(e,r))}};function B1(n){let e=Id.default.resolve(n);return Id.default.parse(e).root===e}function mI(n){return n.length<=1e3?n:`${n.slice(0,1e3)}\u2026 [truncated]`}function q1(n,e){let t=Math.max(0,Math.trunc(e));return t===0?n:Promise.race([n,new Promise(r=>{setTimeout(r,t)})])}function H1(n,e){let t=n.length,r=n.filter(o=>o.success).length,s=t-r,i=n.map(o=>o.error??(typeof o.result?.error=="string"?o.result.error:void 0)).find(o=>typeof o=="string"&&o.trim().length>0);return{rootsTotal:t,rootsSucceeded:r,rootsFailed:s,shownCount:e?.shownCount,totalCount:e?.totalCount,hasMore:e?.hasMore,error:i}}var yI=q(require("fs")),W1=["set-project-root","set-enabled-languages","workspace-overview","get-db-schema","query-db","find-nodes","find-references","rename","replace","edit-file-text","insert","delete","filter-map-reduce","shell-command"];function el(n,e){let t=yI.default.readFileSync(n,"utf8"),r=JSON.parse(t),s=Array.isArray(r.tools)?r.tools:[],i=new Map(W1.map((o,a)=>[o,a]));return s.filter(o=>typeof o?.name=="string").filter(o=>o.category!=="orchestrator").filter(o=>!(e?.excludeNames?.has(o.name)??!1)).sort((o,a)=>{let c=i.get(o.name),l=i.get(a.name);return c!=null&&l!=null?c-l:c!=null?-1:l!=null?1:o.name.localeCompare(a.name)})}function ix(n){let e=n.parameters&&n.parameters.type==="object"?{...n.parameters,type:"object",properties:U1(n.parameters.properties)}:{type:"object",properties:{},required:[],additionalProperties:!1};return{name:n.name,description:n.description,inputSchema:e}}function ih(n,e){return n.find(r=>r.name===e)?.description??""}function U1(n){if(!n)return;let e={};for(let[t,r]of Object.entries(n))r&&typeof r=="object"&&(e[t]=r);return e}var Rt;(function(n){n.assertEqual=s=>{};function e(s){}n.assertIs=e;function t(s){throw new Error}n.assertNever=t,n.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},n.getValidEnumValues=s=>{let i=n.objectKeys(s).filter(a=>typeof s[s[a]]!="number"),o={};for(let a of i)o[a]=s[a];return n.objectValues(o)},n.objectValues=s=>n.objectKeys(s).map(function(i){return s[i]}),n.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let i=[];for(let o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.push(o);return i},n.find=(s,i)=>{for(let o of s)if(i(o))return o},n.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}n.joinValues=r,n.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(Rt||(Rt={}));var bI;(function(n){n.mergeShapes=(e,t)=>({...e,...t})})(bI||(bI={}));var Te=Rt.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Qi=n=>{switch(typeof n){case"undefined":return Te.undefined;case"string":return Te.string;case"number":return Number.isNaN(n)?Te.nan:Te.number;case"boolean":return Te.boolean;case"function":return Te.function;case"bigint":return Te.bigint;case"symbol":return Te.symbol;case"object":return Array.isArray(n)?Te.array:n===null?Te.null:n.then&&typeof n.then=="function"&&n.catch&&typeof n.catch=="function"?Te.promise:typeof Map<"u"&&n instanceof Map?Te.map:typeof Set<"u"&&n instanceof Set?Te.set:typeof Date<"u"&&n instanceof Date?Te.date:Te.object;default:return Te.unknown}};var ce=Rt.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);var fs=class n extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(i){return i.message},r={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)r._errors.push(t(o));else{let a=r,c=0;for(;c<o.path.length;){let l=o.path[c];c===o.path.length-1?(a[l]=a[l]||{_errors:[]},a[l]._errors.push(t(o))):a[l]=a[l]||{_errors:[]},a=a[l],c++}}};return s(this),r}static assert(e){if(!(e instanceof n))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,Rt.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){let t={},r=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];t[i]=t[i]||[],t[i].push(e(s))}else r.push(e(s));return{formErrors:r,fieldErrors:t}}get formErrors(){return this.flatten()}};fs.create=n=>new fs(n);var K1=(n,e)=>{let t;switch(n.code){case ce.invalid_type:n.received===Te.undefined?t="Required":t=`Expected ${n.expected}, received ${n.received}`;break;case ce.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(n.expected,Rt.jsonStringifyReplacer)}`;break;case ce.unrecognized_keys:t=`Unrecognized key(s) in object: ${Rt.joinValues(n.keys,", ")}`;break;case ce.invalid_union:t="Invalid input";break;case ce.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${Rt.joinValues(n.options)}`;break;case ce.invalid_enum_value:t=`Invalid enum value. Expected ${Rt.joinValues(n.options)}, received '${n.received}'`;break;case ce.invalid_arguments:t="Invalid function arguments";break;case ce.invalid_return_type:t="Invalid function return type";break;case ce.invalid_date:t="Invalid date";break;case ce.invalid_string:typeof n.validation=="object"?"includes"in n.validation?(t=`Invalid input: must include "${n.validation.includes}"`,typeof n.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${n.validation.position}`)):"startsWith"in n.validation?t=`Invalid input: must start with "${n.validation.startsWith}"`:"endsWith"in n.validation?t=`Invalid input: must end with "${n.validation.endsWith}"`:Rt.assertNever(n.validation):n.validation!=="regex"?t=`Invalid ${n.validation}`:t="Invalid";break;case ce.too_small:n.type==="array"?t=`Array must contain ${n.exact?"exactly":n.inclusive?"at least":"more than"} ${n.minimum} element(s)`:n.type==="string"?t=`String must contain ${n.exact?"exactly":n.inclusive?"at least":"over"} ${n.minimum} character(s)`:n.type==="number"?t=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`:n.type==="bigint"?t=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`:n.type==="date"?t=`Date must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(n.minimum))}`:t="Invalid input";break;case ce.too_big:n.type==="array"?t=`Array must contain ${n.exact?"exactly":n.inclusive?"at most":"less than"} ${n.maximum} element(s)`:n.type==="string"?t=`String must contain ${n.exact?"exactly":n.inclusive?"at most":"under"} ${n.maximum} character(s)`:n.type==="number"?t=`Number must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`:n.type==="bigint"?t=`BigInt must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`:n.type==="date"?t=`Date must be ${n.exact?"exactly":n.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(n.maximum))}`:t="Invalid input";break;case ce.custom:t="Invalid input";break;case ce.invalid_intersection_types:t="Intersection results could not be merged";break;case ce.not_multiple_of:t=`Number must be a multiple of ${n.multipleOf}`;break;case ce.not_finite:t="Number must be finite";break;default:t=e.defaultError,Rt.assertNever(n)}return{message:t}},Po=K1;var Z1=Po;function Ad(){return Z1}var oh=n=>{let{data:e,path:t,errorMaps:r,issueData:s}=n,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="",c=r.filter(l=>!!l).slice().reverse();for(let l of c)a=l(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}};function Re(n,e){let t=Ad(),r=oh({issueData:e,data:n.data,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,t,t===Po?void 0:Po].filter(s=>!!s)});n.common.issues.push(r)}var gr=class n{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){let r=[];for(let s of t){if(s.status==="aborted")return tt;s.status==="dirty"&&e.dirty(),r.push(s.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,t){let r=[];for(let s of t){let i=await s.key,o=await s.value;r.push({key:i,value:o})}return n.mergeObjectSync(e,r)}static mergeObjectSync(e,t){let r={};for(let s of t){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return tt;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(r[i.value]=o.value)}return{status:e.value,value:r}}},tt=Object.freeze({status:"aborted"}),tl=n=>({status:"dirty",value:n}),Ir=n=>({status:"valid",value:n}),ox=n=>n.status==="aborted",ax=n=>n.status==="dirty",Ha=n=>n.status==="valid",Nd=n=>typeof Promise<"u"&&n instanceof Promise;var Oe;(function(n){n.errToObj=e=>typeof e=="string"?{message:e}:e||{},n.toString=e=>typeof e=="string"?e:e?.message})(Oe||(Oe={}));var Ls=class{constructor(e,t,r,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=r,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},SI=(n,e)=>{if(Ha(e))return{success:!0,data:e.value};if(!n.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new fs(n.common.issues);return this._error=t,this._error}}};function pt(n){if(!n)return{};let{errorMap:e,invalid_type_error:t,required_error:r,description:s}=n;if(e&&(t||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:c}=n;return o.code==="invalid_enum_value"?{message:c??a.defaultError}:typeof a.data>"u"?{message:c??r??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:c??t??a.defaultError}},description:s}}var St=class{get description(){return this._def.description}_getType(e){return Qi(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:Qi(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new gr,ctx:{common:e.parent.common,data:e.data,parsedType:Qi(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(Nd(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let r=this.safeParse(e,t);if(r.success)return r.data;throw r.error}safeParse(e,t){let r={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qi(e)},s=this._parseSync({data:e,path:r.path,parent:r});return SI(r,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qi(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:t});return Ha(r)?{value:r.value}:{issues:t.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(r=>Ha(r)?{value:r.value}:{issues:t.common.issues})}async parseAsync(e,t){let r=await this.safeParseAsync(e,t);if(r.success)return r.data;throw r.error}async safeParseAsync(e,t){let r={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qi(e)},s=this._parse({data:e,path:r.path,parent:r}),i=await(Nd(s)?s:Promise.resolve(s));return SI(r,i)}refine(e,t){let r=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:ce.custom,...r(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((r,s)=>e(r)?!0:(s.addIssue(typeof t=="function"?t(r,s):t),!1))}_refinement(e){return new oi({schema:this,typeName:ue.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return ms.create(this,this._def)}nullable(){return to.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Io.create(this)}promise(){return Wa.create(this,this._def)}or(e){return ol.create([this,e],this._def)}and(e){return al.create(this,e,this._def)}transform(e){return new oi({...pt(this._def),schema:this,typeName:ue.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new pl({...pt(this._def),innerType:this,defaultValue:t,typeName:ue.ZodDefault})}brand(){return new ah({typeName:ue.ZodBranded,type:this,...pt(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new fl({...pt(this._def),innerType:this,catchValue:t,typeName:ue.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return ch.create(this,e)}readonly(){return ml.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},G1=/^c[^\s-]{8,}$/i,J1=/^[0-9a-z]+$/,V1=/^[0-9A-HJKMNP-TV-Z]{26}$/i,X1=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Q1=/^[a-z0-9_-]{21}$/i,Y1=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,eq=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,tq=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,nq="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",cx,rq=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,sq=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,iq=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,oq=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,aq=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,cq=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,xI="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",lq=new RegExp(`^${xI}$`);function _I(n){let e="[0-5]\\d";n.precision?e=`${e}\\.\\d{${n.precision}}`:n.precision==null&&(e=`${e}(\\.\\d+)?`);let t=n.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function uq(n){return new RegExp(`^${_I(n)}$`)}function dq(n){let e=`${xI}T${_I(n)}`,t=[];return t.push(n.local?"Z?":"Z"),n.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function pq(n,e){return!!((e==="v4"||!e)&&rq.test(n)||(e==="v6"||!e)&&iq.test(n))}function fq(n,e){if(!Y1.test(n))return!1;try{let[t]=n.split(".");if(!t)return!1;let r=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(r));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function mq(n,e){return!!((e==="v4"||!e)&&sq.test(n)||(e==="v6"||!e)&&oq.test(n))}var rl=class n extends St{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==Te.string){let i=this._getOrReturnCtx(e);return Re(i,{code:ce.invalid_type,expected:Te.string,received:i.parsedType}),tt}let r=new gr,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,a=e.data.length<i.value;(o||a)&&(s=this._getOrReturnCtx(e,s),o?Re(s,{code:ce.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&Re(s,{code:ce.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),r.dirty())}else if(i.kind==="email")tq.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"email",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")cx||(cx=new RegExp(nq,"u")),cx.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"emoji",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")X1.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"uuid",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")Q1.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"nanoid",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")G1.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"cuid",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")J1.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"cuid2",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")V1.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"ulid",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),Re(s,{validation:"url",code:ce.invalid_string,message:i.message}),r.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"regex",code:ce.invalid_string,message:i.message}),r.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),r.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.invalid_string,validation:{startsWith:i.value},message:i.message}),r.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?dq(i).test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?lq.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?uq(i).test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?eq.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"duration",code:ce.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?pq(e.data,i.version)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"ip",code:ce.invalid_string,message:i.message}),r.dirty()):i.kind==="jwt"?fq(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"jwt",code:ce.invalid_string,message:i.message}),r.dirty()):i.kind==="cidr"?mq(e.data,i.version)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"cidr",code:ce.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?aq.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"base64",code:ce.invalid_string,message:i.message}),r.dirty()):i.kind==="base64url"?cq.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"base64url",code:ce.invalid_string,message:i.message}),r.dirty()):Rt.assertNever(i);return{status:r.value,value:e.data}}_regex(e,t,r){return this.refinement(s=>e.test(s),{validation:t,code:ce.invalid_string,...Oe.errToObj(r)})}_addCheck(e){return new n({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...Oe.errToObj(e)})}url(e){return this._addCheck({kind:"url",...Oe.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...Oe.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...Oe.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...Oe.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...Oe.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...Oe.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...Oe.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...Oe.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...Oe.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...Oe.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...Oe.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...Oe.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...Oe.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...Oe.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...Oe.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...Oe.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...Oe.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...Oe.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...Oe.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...Oe.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...Oe.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...Oe.errToObj(t)})}nonempty(e){return this.min(1,Oe.errToObj(e))}trim(){return new n({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new n({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new n({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};rl.create=n=>new rl({checks:[],typeName:ue.ZodString,coerce:n?.coerce??!1,...pt(n)});function hq(n,e){let t=(n.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=t>r?t:r,i=Number.parseInt(n.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var Md=class n extends St{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==Te.number){let i=this._getOrReturnCtx(e);return Re(i,{code:ce.invalid_type,expected:Te.number,received:i.parsedType}),tt}let r,s=new gr;for(let i of this._def.checks)i.kind==="int"?Rt.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?hq(e.data,i.value)!==0&&(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.not_finite,message:i.message}),s.dirty()):Rt.assertNever(i);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,Oe.toString(t))}gt(e,t){return this.setLimit("min",e,!1,Oe.toString(t))}lte(e,t){return this.setLimit("max",e,!0,Oe.toString(t))}lt(e,t){return this.setLimit("max",e,!1,Oe.toString(t))}setLimit(e,t,r,s){return new n({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:Oe.toString(s)}]})}_addCheck(e){return new n({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:Oe.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:Oe.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:Oe.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:Oe.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:Oe.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:Oe.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:Oe.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:Oe.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:Oe.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&Rt.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(t===null||r.value>t)&&(t=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(t)&&Number.isFinite(e)}};Md.create=n=>new Md({checks:[],typeName:ue.ZodNumber,coerce:n?.coerce||!1,...pt(n)});var Dd=class n extends St{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==Te.bigint)return this._getInvalidInput(e);let r,s=new gr;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):Rt.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return Re(t,{code:ce.invalid_type,expected:Te.bigint,received:t.parsedType}),tt}gte(e,t){return this.setLimit("min",e,!0,Oe.toString(t))}gt(e,t){return this.setLimit("min",e,!1,Oe.toString(t))}lte(e,t){return this.setLimit("max",e,!0,Oe.toString(t))}lt(e,t){return this.setLimit("max",e,!1,Oe.toString(t))}setLimit(e,t,r,s){return new n({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:Oe.toString(s)}]})}_addCheck(e){return new n({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:Oe.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:Oe.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:Oe.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:Oe.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:Oe.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};Dd.create=n=>new Dd({checks:[],typeName:ue.ZodBigInt,coerce:n?.coerce??!1,...pt(n)});var Fd=class extends St{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==Te.boolean){let r=this._getOrReturnCtx(e);return Re(r,{code:ce.invalid_type,expected:Te.boolean,received:r.parsedType}),tt}return Ir(e.data)}};Fd.create=n=>new Fd({typeName:ue.ZodBoolean,coerce:n?.coerce||!1,...pt(n)});var Od=class n extends St{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==Te.date){let i=this._getOrReturnCtx(e);return Re(i,{code:ce.invalid_type,expected:Te.date,received:i.parsedType}),tt}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return Re(i,{code:ce.invalid_date}),tt}let r=new gr,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):Rt.assertNever(i);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new n({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:Oe.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:Oe.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}};Od.create=n=>new Od({checks:[],coerce:n?.coerce||!1,typeName:ue.ZodDate,...pt(n)});var $d=class extends St{_parse(e){if(this._getType(e)!==Te.symbol){let r=this._getOrReturnCtx(e);return Re(r,{code:ce.invalid_type,expected:Te.symbol,received:r.parsedType}),tt}return Ir(e.data)}};$d.create=n=>new $d({typeName:ue.ZodSymbol,...pt(n)});var sl=class extends St{_parse(e){if(this._getType(e)!==Te.undefined){let r=this._getOrReturnCtx(e);return Re(r,{code:ce.invalid_type,expected:Te.undefined,received:r.parsedType}),tt}return Ir(e.data)}};sl.create=n=>new sl({typeName:ue.ZodUndefined,...pt(n)});var il=class extends St{_parse(e){if(this._getType(e)!==Te.null){let r=this._getOrReturnCtx(e);return Re(r,{code:ce.invalid_type,expected:Te.null,received:r.parsedType}),tt}return Ir(e.data)}};il.create=n=>new il({typeName:ue.ZodNull,...pt(n)});var jd=class extends St{constructor(){super(...arguments),this._any=!0}_parse(e){return Ir(e.data)}};jd.create=n=>new jd({typeName:ue.ZodAny,...pt(n)});var Co=class extends St{constructor(){super(...arguments),this._unknown=!0}_parse(e){return Ir(e.data)}};Co.create=n=>new Co({typeName:ue.ZodUnknown,...pt(n)});var Pi=class extends St{_parse(e){let t=this._getOrReturnCtx(e);return Re(t,{code:ce.invalid_type,expected:Te.never,received:t.parsedType}),tt}};Pi.create=n=>new Pi({typeName:ue.ZodNever,...pt(n)});var Ld=class extends St{_parse(e){if(this._getType(e)!==Te.undefined){let r=this._getOrReturnCtx(e);return Re(r,{code:ce.invalid_type,expected:Te.void,received:r.parsedType}),tt}return Ir(e.data)}};Ld.create=n=>new Ld({typeName:ue.ZodVoid,...pt(n)});var Io=class n extends St{_parse(e){let{ctx:t,status:r}=this._processInputParams(e),s=this._def;if(t.parsedType!==Te.array)return Re(t,{code:ce.invalid_type,expected:Te.array,received:t.parsedType}),tt;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&(Re(t,{code:o?ce.too_big:ce.too_small,minimum:a?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),r.dirty())}if(s.minLength!==null&&t.data.length<s.minLength.value&&(Re(t,{code:ce.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),r.dirty()),s.maxLength!==null&&t.data.length>s.maxLength.value&&(Re(t,{code:ce.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),r.dirty()),t.common.async)return Promise.all([...t.data].map((o,a)=>s.type._parseAsync(new Ls(t,o,t.path,a)))).then(o=>gr.mergeArray(r,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new Ls(t,o,t.path,a)));return gr.mergeArray(r,i)}get element(){return this._def.type}min(e,t){return new n({...this._def,minLength:{value:e,message:Oe.toString(t)}})}max(e,t){return new n({...this._def,maxLength:{value:e,message:Oe.toString(t)}})}length(e,t){return new n({...this._def,exactLength:{value:e,message:Oe.toString(t)}})}nonempty(e){return this.min(1,e)}};Io.create=(n,e)=>new Io({type:n,minLength:null,maxLength:null,exactLength:null,typeName:ue.ZodArray,...pt(e)});function nl(n){if(n instanceof hs){let e={};for(let t in n.shape){let r=n.shape[t];e[t]=ms.create(nl(r))}return new hs({...n._def,shape:()=>e})}else return n instanceof Io?new Io({...n._def,type:nl(n.element)}):n instanceof ms?ms.create(nl(n.unwrap())):n instanceof to?to.create(nl(n.unwrap())):n instanceof eo?eo.create(n.items.map(e=>nl(e))):n}var hs=class n extends St{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=Rt.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==Te.object){let l=this._getOrReturnCtx(e);return Re(l,{code:ce.invalid_type,expected:Te.object,received:l.parsedType}),tt}let{status:r,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof Pi&&this._def.unknownKeys==="strip"))for(let l in s.data)o.includes(l)||a.push(l);let c=[];for(let l of o){let u=i[l],d=s.data[l];c.push({key:{status:"valid",value:l},value:u._parse(new Ls(s,d,s.path,l)),alwaysSet:l in s.data})}if(this._def.catchall instanceof Pi){let l=this._def.unknownKeys;if(l==="passthrough")for(let u of a)c.push({key:{status:"valid",value:u},value:{status:"valid",value:s.data[u]}});else if(l==="strict")a.length>0&&(Re(s,{code:ce.unrecognized_keys,keys:a}),r.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let l=this._def.catchall;for(let u of a){let d=s.data[u];c.push({key:{status:"valid",value:u},value:l._parse(new Ls(s,d,s.path,u)),alwaysSet:u in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let l=[];for(let u of c){let d=await u.key,p=await u.value;l.push({key:d,value:p,alwaysSet:u.alwaysSet})}return l}).then(l=>gr.mergeObjectSync(r,l)):gr.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return Oe.errToObj,new n({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,r)=>{let s=this._def.errorMap?.(t,r).message??r.defaultError;return t.code==="unrecognized_keys"?{message:Oe.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new n({...this._def,unknownKeys:"strip"})}passthrough(){return new n({...this._def,unknownKeys:"passthrough"})}extend(e){return new n({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new n({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:ue.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new n({...this._def,catchall:e})}pick(e){let t={};for(let r of Rt.objectKeys(e))e[r]&&this.shape[r]&&(t[r]=this.shape[r]);return new n({...this._def,shape:()=>t})}omit(e){let t={};for(let r of Rt.objectKeys(this.shape))e[r]||(t[r]=this.shape[r]);return new n({...this._def,shape:()=>t})}deepPartial(){return nl(this)}partial(e){let t={};for(let r of Rt.objectKeys(this.shape)){let s=this.shape[r];e&&!e[r]?t[r]=s:t[r]=s.optional()}return new n({...this._def,shape:()=>t})}required(e){let t={};for(let r of Rt.objectKeys(this.shape))if(e&&!e[r])t[r]=this.shape[r];else{let i=this.shape[r];for(;i instanceof ms;)i=i._def.innerType;t[r]=i}return new n({...this._def,shape:()=>t})}keyof(){return wI(Rt.objectKeys(this.shape))}};hs.create=(n,e)=>new hs({shape:()=>n,unknownKeys:"strip",catchall:Pi.create(),typeName:ue.ZodObject,...pt(e)});hs.strictCreate=(n,e)=>new hs({shape:()=>n,unknownKeys:"strict",catchall:Pi.create(),typeName:ue.ZodObject,...pt(e)});hs.lazycreate=(n,e)=>new hs({shape:n,unknownKeys:"strip",catchall:Pi.create(),typeName:ue.ZodObject,...pt(e)});var ol=class extends St{_parse(e){let{ctx:t}=this._processInputParams(e),r=this._def.options;function s(i){for(let a of i)if(a.result.status==="valid")return a.result;for(let a of i)if(a.result.status==="dirty")return t.common.issues.push(...a.ctx.common.issues),a.result;let o=i.map(a=>new fs(a.ctx.common.issues));return Re(t,{code:ce.invalid_union,unionErrors:o}),tt}if(t.common.async)return Promise.all(r.map(async i=>{let o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let c of r){let l={...t,common:{...t.common,issues:[]},parent:null},u=c._parseSync({data:t.data,path:t.path,parent:l});if(u.status==="valid")return u;u.status==="dirty"&&!i&&(i={result:u,ctx:l}),l.common.issues.length&&o.push(l.common.issues)}if(i)return t.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(c=>new fs(c));return Re(t,{code:ce.invalid_union,unionErrors:a}),tt}}get options(){return this._def.options}};ol.create=(n,e)=>new ol({options:n,typeName:ue.ZodUnion,...pt(e)});var Yi=n=>n instanceof cl?Yi(n.schema):n instanceof oi?Yi(n.innerType()):n instanceof ll?[n.value]:n instanceof ul?n.options:n instanceof dl?Rt.objectValues(n.enum):n instanceof pl?Yi(n._def.innerType):n instanceof sl?[void 0]:n instanceof il?[null]:n instanceof ms?[void 0,...Yi(n.unwrap())]:n instanceof to?[null,...Yi(n.unwrap())]:n instanceof ah||n instanceof ml?Yi(n.unwrap()):n instanceof fl?Yi(n._def.innerType):[],lx=class n extends St{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==Te.object)return Re(t,{code:ce.invalid_type,expected:Te.object,received:t.parsedType}),tt;let r=this.discriminator,s=t.data[r],i=this.optionsMap.get(s);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(Re(t,{code:ce.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),tt)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,r){let s=new Map;for(let i of t){let o=Yi(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i)}}return new n({typeName:ue.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...pt(r)})}};function ux(n,e){let t=Qi(n),r=Qi(e);if(n===e)return{valid:!0,data:n};if(t===Te.object&&r===Te.object){let s=Rt.objectKeys(e),i=Rt.objectKeys(n).filter(a=>s.indexOf(a)!==-1),o={...n,...e};for(let a of i){let c=ux(n[a],e[a]);if(!c.valid)return{valid:!1};o[a]=c.data}return{valid:!0,data:o}}else if(t===Te.array&&r===Te.array){if(n.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<n.length;i++){let o=n[i],a=e[i],c=ux(o,a);if(!c.valid)return{valid:!1};s.push(c.data)}return{valid:!0,data:s}}else return t===Te.date&&r===Te.date&&+n==+e?{valid:!0,data:n}:{valid:!1}}var al=class extends St{_parse(e){let{status:t,ctx:r}=this._processInputParams(e),s=(i,o)=>{if(ox(i)||ox(o))return tt;let a=ux(i.value,o.value);return a.valid?((ax(i)||ax(o))&&t.dirty(),{status:t.value,value:a.data}):(Re(r,{code:ce.invalid_intersection_types}),tt)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};al.create=(n,e,t)=>new al({left:n,right:e,typeName:ue.ZodIntersection,...pt(t)});var eo=class n extends St{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==Te.array)return Re(r,{code:ce.invalid_type,expected:Te.array,received:r.parsedType}),tt;if(r.data.length<this._def.items.length)return Re(r,{code:ce.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),tt;!this._def.rest&&r.data.length>this._def.items.length&&(Re(r,{code:ce.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let i=[...r.data].map((o,a)=>{let c=this._def.items[a]||this._def.rest;return c?c._parse(new Ls(r,o,r.path,a)):null}).filter(o=>!!o);return r.common.async?Promise.all(i).then(o=>gr.mergeArray(t,o)):gr.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new n({...this._def,rest:e})}};eo.create=(n,e)=>{if(!Array.isArray(n))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new eo({items:n,typeName:ue.ZodTuple,rest:null,...pt(e)})};var dx=class n extends St{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==Te.object)return Re(r,{code:ce.invalid_type,expected:Te.object,received:r.parsedType}),tt;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in r.data)s.push({key:i._parse(new Ls(r,a,r.path,a)),value:o._parse(new Ls(r,r.data[a],r.path,a)),alwaysSet:a in r.data});return r.common.async?gr.mergeObjectAsync(t,s):gr.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,r){return t instanceof St?new n({keyType:e,valueType:t,typeName:ue.ZodRecord,...pt(r)}):new n({keyType:rl.create(),valueType:e,typeName:ue.ZodRecord,...pt(t)})}},zd=class extends St{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==Te.map)return Re(r,{code:ce.invalid_type,expected:Te.map,received:r.parsedType}),tt;let s=this._def.keyType,i=this._def.valueType,o=[...r.data.entries()].map(([a,c],l)=>({key:s._parse(new Ls(r,a,r.path,[l,"key"])),value:i._parse(new Ls(r,c,r.path,[l,"value"]))}));if(r.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let c of o){let l=await c.key,u=await c.value;if(l.status==="aborted"||u.status==="aborted")return tt;(l.status==="dirty"||u.status==="dirty")&&t.dirty(),a.set(l.value,u.value)}return{status:t.value,value:a}})}else{let a=new Map;for(let c of o){let l=c.key,u=c.value;if(l.status==="aborted"||u.status==="aborted")return tt;(l.status==="dirty"||u.status==="dirty")&&t.dirty(),a.set(l.value,u.value)}return{status:t.value,value:a}}}};zd.create=(n,e,t)=>new zd({valueType:e,keyType:n,typeName:ue.ZodMap,...pt(t)});var Bd=class n extends St{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==Te.set)return Re(r,{code:ce.invalid_type,expected:Te.set,received:r.parsedType}),tt;let s=this._def;s.minSize!==null&&r.data.size<s.minSize.value&&(Re(r,{code:ce.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),s.maxSize!==null&&r.data.size>s.maxSize.value&&(Re(r,{code:ce.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function o(c){let l=new Set;for(let u of c){if(u.status==="aborted")return tt;u.status==="dirty"&&t.dirty(),l.add(u.value)}return{status:t.value,value:l}}let a=[...r.data.values()].map((c,l)=>i._parse(new Ls(r,c,r.path,l)));return r.common.async?Promise.all(a).then(c=>o(c)):o(a)}min(e,t){return new n({...this._def,minSize:{value:e,message:Oe.toString(t)}})}max(e,t){return new n({...this._def,maxSize:{value:e,message:Oe.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};Bd.create=(n,e)=>new Bd({valueType:n,minSize:null,maxSize:null,typeName:ue.ZodSet,...pt(e)});var px=class n extends St{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==Te.function)return Re(t,{code:ce.invalid_type,expected:Te.function,received:t.parsedType}),tt;function r(a,c){return oh({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Ad(),Po].filter(l=>!!l),issueData:{code:ce.invalid_arguments,argumentsError:c}})}function s(a,c){return oh({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Ad(),Po].filter(l=>!!l),issueData:{code:ce.invalid_return_type,returnTypeError:c}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof Wa){let a=this;return Ir(async function(...c){let l=new fs([]),u=await a._def.args.parseAsync(c,i).catch(f=>{throw l.addIssue(r(c,f)),l}),d=await Reflect.apply(o,this,u);return await a._def.returns._def.type.parseAsync(d,i).catch(f=>{throw l.addIssue(s(d,f)),l})})}else{let a=this;return Ir(function(...c){let l=a._def.args.safeParse(c,i);if(!l.success)throw new fs([r(c,l.error)]);let u=Reflect.apply(o,this,l.data),d=a._def.returns.safeParse(u,i);if(!d.success)throw new fs([s(u,d.error)]);return d.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new n({...this._def,args:eo.create(e).rest(Co.create())})}returns(e){return new n({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,r){return new n({args:e||eo.create([]).rest(Co.create()),returns:t||Co.create(),typeName:ue.ZodFunction,...pt(r)})}},cl=class extends St{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};cl.create=(n,e)=>new cl({getter:n,typeName:ue.ZodLazy,...pt(e)});var ll=class extends St{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return Re(t,{received:t.data,code:ce.invalid_literal,expected:this._def.value}),tt}return{status:"valid",value:e.data}}get value(){return this._def.value}};ll.create=(n,e)=>new ll({value:n,typeName:ue.ZodLiteral,...pt(e)});function wI(n,e){return new ul({values:n,typeName:ue.ZodEnum,...pt(e)})}var ul=class n extends St{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),r=this._def.values;return Re(t,{expected:Rt.joinValues(r),received:t.parsedType,code:ce.invalid_type}),tt}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),r=this._def.values;return Re(t,{received:t.data,code:ce.invalid_enum_value,options:r}),tt}return Ir(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return n.create(e,{...this._def,...t})}exclude(e,t=this._def){return n.create(this.options.filter(r=>!e.includes(r)),{...this._def,...t})}};ul.create=wI;var dl=class extends St{_parse(e){let t=Rt.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==Te.string&&r.parsedType!==Te.number){let s=Rt.objectValues(t);return Re(r,{expected:Rt.joinValues(s),received:r.parsedType,code:ce.invalid_type}),tt}if(this._cache||(this._cache=new Set(Rt.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=Rt.objectValues(t);return Re(r,{received:r.data,code:ce.invalid_enum_value,options:s}),tt}return Ir(e.data)}get enum(){return this._def.values}};dl.create=(n,e)=>new dl({values:n,typeName:ue.ZodNativeEnum,...pt(e)});var Wa=class extends St{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==Te.promise&&t.common.async===!1)return Re(t,{code:ce.invalid_type,expected:Te.promise,received:t.parsedType}),tt;let r=t.parsedType===Te.promise?t.data:Promise.resolve(t.data);return Ir(r.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};Wa.create=(n,e)=>new Wa({type:n,typeName:ue.ZodPromise,...pt(e)});var oi=class extends St{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===ue.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:r}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{Re(r,o),o.fatal?t.abort():t.dirty()},get path(){return r.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(r.data,i);if(r.common.async)return Promise.resolve(o).then(async a=>{if(t.value==="aborted")return tt;let c=await this._def.schema._parseAsync({data:a,path:r.path,parent:r});return c.status==="aborted"?tt:c.status==="dirty"?tl(c.value):t.value==="dirty"?tl(c.value):c});{if(t.value==="aborted")return tt;let a=this._def.schema._parseSync({data:o,path:r.path,parent:r});return a.status==="aborted"?tt:a.status==="dirty"?tl(a.value):t.value==="dirty"?tl(a.value):a}}if(s.type==="refinement"){let o=a=>{let c=s.refinement(a,i);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(r.common.async===!1){let a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?tt:(a.status==="dirty"&&t.dirty(),o(a.value),{status:t.value,value:a.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>a.status==="aborted"?tt:(a.status==="dirty"&&t.dirty(),o(a.value).then(()=>({status:t.value,value:a.value}))))}if(s.type==="transform")if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Ha(o))return tt;let a=s.transform(o.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>Ha(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):tt);Rt.assertNever(s)}};oi.create=(n,e,t)=>new oi({schema:n,typeName:ue.ZodEffects,effect:e,...pt(t)});oi.createWithPreprocess=(n,e,t)=>new oi({schema:e,effect:{type:"preprocess",transform:n},typeName:ue.ZodEffects,...pt(t)});var ms=class extends St{_parse(e){return this._getType(e)===Te.undefined?Ir(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ms.create=(n,e)=>new ms({innerType:n,typeName:ue.ZodOptional,...pt(e)});var to=class extends St{_parse(e){return this._getType(e)===Te.null?Ir(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};to.create=(n,e)=>new to({innerType:n,typeName:ue.ZodNullable,...pt(e)});var pl=class extends St{_parse(e){let{ctx:t}=this._processInputParams(e),r=t.data;return t.parsedType===Te.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};pl.create=(n,e)=>new pl({innerType:n,typeName:ue.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...pt(e)});var fl=class extends St{_parse(e){let{ctx:t}=this._processInputParams(e),r={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return Nd(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new fs(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new fs(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};fl.create=(n,e)=>new fl({innerType:n,typeName:ue.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...pt(e)});var qd=class extends St{_parse(e){if(this._getType(e)!==Te.nan){let r=this._getOrReturnCtx(e);return Re(r,{code:ce.invalid_type,expected:Te.nan,received:r.parsedType}),tt}return{status:"valid",value:e.data}}};qd.create=n=>new qd({typeName:ue.ZodNaN,...pt(n)});var ah=class extends St{_parse(e){let{ctx:t}=this._processInputParams(e),r=t.data;return this._def.type._parse({data:r,path:t.path,parent:t})}unwrap(){return this._def.type}},ch=class n extends St{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?tt:i.status==="dirty"?(t.dirty(),tl(i.value)):this._def.out._parseAsync({data:i.value,path:r.path,parent:r})})();{let s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?tt:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(e,t){return new n({in:e,out:t,typeName:ue.ZodPipeline})}},ml=class extends St{_parse(e){let t=this._def.innerType._parse(e),r=s=>(Ha(s)&&(s.value=Object.freeze(s.value)),s);return Nd(t)?t.then(s=>r(s)):r(t)}unwrap(){return this._def.innerType}};ml.create=(n,e)=>new ml({innerType:n,typeName:ue.ZodReadonly,...pt(e)});var Yee={object:hs.lazycreate},ue;(function(n){n.ZodString="ZodString",n.ZodNumber="ZodNumber",n.ZodNaN="ZodNaN",n.ZodBigInt="ZodBigInt",n.ZodBoolean="ZodBoolean",n.ZodDate="ZodDate",n.ZodSymbol="ZodSymbol",n.ZodUndefined="ZodUndefined",n.ZodNull="ZodNull",n.ZodAny="ZodAny",n.ZodUnknown="ZodUnknown",n.ZodNever="ZodNever",n.ZodVoid="ZodVoid",n.ZodArray="ZodArray",n.ZodObject="ZodObject",n.ZodUnion="ZodUnion",n.ZodDiscriminatedUnion="ZodDiscriminatedUnion",n.ZodIntersection="ZodIntersection",n.ZodTuple="ZodTuple",n.ZodRecord="ZodRecord",n.ZodMap="ZodMap",n.ZodSet="ZodSet",n.ZodFunction="ZodFunction",n.ZodLazy="ZodLazy",n.ZodLiteral="ZodLiteral",n.ZodEnum="ZodEnum",n.ZodEffects="ZodEffects",n.ZodNativeEnum="ZodNativeEnum",n.ZodOptional="ZodOptional",n.ZodNullable="ZodNullable",n.ZodDefault="ZodDefault",n.ZodCatch="ZodCatch",n.ZodPromise="ZodPromise",n.ZodBranded="ZodBranded",n.ZodPipeline="ZodPipeline",n.ZodReadonly="ZodReadonly"})(ue||(ue={}));var ete=rl.create,tte=Md.create,nte=qd.create,rte=Dd.create,ste=Fd.create,ite=Od.create,ote=$d.create,ate=sl.create,cte=il.create,lte=jd.create,ute=Co.create,dte=Pi.create,pte=Ld.create,fte=Io.create,vI=hs.create,mte=hs.strictCreate,hte=ol.create,gte=lx.create,yte=al.create,bte=eo.create,Ste=dx.create,xte=zd.create,_te=Bd.create,wte=px.create,vte=cl.create,Rte=ll.create,kte=ul.create,Ete=dl.create,Tte=Wa.create,Pte=oi.create,Cte=ms.create,Ite=to.create,Ate=oi.createWithPreprocess,Nte=ch.create;var gq=Object.freeze({status:"aborted"});function ee(n,e,t){function r(a,c){var l;Object.defineProperty(a,"_zod",{value:a._zod??{},enumerable:!1}),(l=a._zod).traits??(l.traits=new Set),a._zod.traits.add(n),e(a,c);for(let u in o.prototype)u in a||Object.defineProperty(a,u,{value:o.prototype[u].bind(a)});a._zod.constr=o,a._zod.def=c}let s=t?.Parent??Object;class i extends s{}Object.defineProperty(i,"name",{value:n});function o(a){var c;let l=t?.Parent?new i:this;r(l,a),(c=l._zod).deferred??(c.deferred=[]);for(let u of l._zod.deferred)u();return l}return Object.defineProperty(o,"init",{value:r}),Object.defineProperty(o,Symbol.hasInstance,{value:a=>t?.Parent&&a instanceof t.Parent?!0:a?._zod?.traits?.has(n)}),Object.defineProperty(o,"name",{value:n}),o}var no=class extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}},lh={};function gs(n){return n&&Object.assign(lh,n),lh}var kt={};Lt(kt,{BIGINT_FORMAT_RANGES:()=>kI,Class:()=>mx,NUMBER_FORMAT_RANGES:()=>_x,aborted:()=>Ka,allowsEval:()=>bx,assert:()=>_q,assertEqual:()=>yq,assertIs:()=>Sq,assertNever:()=>xq,assertNotEqual:()=>bq,assignProp:()=>yx,cached:()=>Ud,captureStackTrace:()=>dh,cleanEnum:()=>Dq,cleanRegex:()=>Zd,clone:()=>ys,createTransparentProxy:()=>Tq,defineLazy:()=>Qt,esc:()=>Ua,escapeRegex:()=>Ao,extend:()=>Iq,finalizeIssue:()=>ai,floatSafeRemainder:()=>gx,getElementAtPath:()=>wq,getEnumValues:()=>Wd,getLengthableOrigin:()=>Gd,getParsedType:()=>Eq,getSizableOrigin:()=>EI,isObject:()=>hl,isPlainObject:()=>gl,issue:()=>wx,joinValues:()=>uh,jsonStringifyReplacer:()=>hx,merge:()=>Aq,normalizeParams:()=>Qe,nullish:()=>Kd,numKeys:()=>kq,omit:()=>Cq,optionalKeys:()=>xx,partial:()=>Nq,pick:()=>Pq,prefixIssues:()=>Ci,primitiveTypes:()=>RI,promiseAllObject:()=>vq,propertyKeyTypes:()=>Sx,randomString:()=>Rq,required:()=>Mq,stringifyPrimitive:()=>ph,unwrapMessage:()=>Hd});function yq(n){return n}function bq(n){return n}function Sq(n){}function xq(n){throw new Error}function _q(n){}function Wd(n){let e=Object.values(n).filter(r=>typeof r=="number");return Object.entries(n).filter(([r,s])=>e.indexOf(+r)===-1).map(([r,s])=>s)}function uh(n,e="|"){return n.map(t=>ph(t)).join(e)}function hx(n,e){return typeof e=="bigint"?e.toString():e}function Ud(n){return{get value(){{let t=n();return Object.defineProperty(this,"value",{value:t}),t}throw new Error("cached value already set")}}}function Kd(n){return n==null}function Zd(n){let e=n.startsWith("^")?1:0,t=n.endsWith("$")?n.length-1:n.length;return n.slice(e,t)}function gx(n,e){let t=(n.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=t>r?t:r,i=Number.parseInt(n.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}function Qt(n,e,t){Object.defineProperty(n,e,{get(){{let s=t();return n[e]=s,s}throw new Error("cached value already set")},set(s){Object.defineProperty(n,e,{value:s})},configurable:!0})}function yx(n,e,t){Object.defineProperty(n,e,{value:t,writable:!0,enumerable:!0,configurable:!0})}function wq(n,e){return e?e.reduce((t,r)=>t?.[r],n):n}function vq(n){let e=Object.keys(n),t=e.map(r=>n[r]);return Promise.all(t).then(r=>{let s={};for(let i=0;i<e.length;i++)s[e[i]]=r[i];return s})}function Rq(n=10){let e="abcdefghijklmnopqrstuvwxyz",t="";for(let r=0;r<n;r++)t+=e[Math.floor(Math.random()*e.length)];return t}function Ua(n){return JSON.stringify(n)}var dh=Error.captureStackTrace?Error.captureStackTrace:(...n)=>{};function hl(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}var bx=Ud(()=>{if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{let n=Function;return new n(""),!0}catch{return!1}});function gl(n){if(hl(n)===!1)return!1;let e=n.constructor;if(e===void 0)return!0;let t=e.prototype;return!(hl(t)===!1||Object.prototype.hasOwnProperty.call(t,"isPrototypeOf")===!1)}function kq(n){let e=0;for(let t in n)Object.prototype.hasOwnProperty.call(n,t)&&e++;return e}var Eq=n=>{let e=typeof n;switch(e){case"undefined":return"undefined";case"string":return"string";case"number":return Number.isNaN(n)?"nan":"number";case"boolean":return"boolean";case"function":return"function";case"bigint":return"bigint";case"symbol":return"symbol";case"object":return Array.isArray(n)?"array":n===null?"null":n.then&&typeof n.then=="function"&&n.catch&&typeof n.catch=="function"?"promise":typeof Map<"u"&&n instanceof Map?"map":typeof Set<"u"&&n instanceof Set?"set":typeof Date<"u"&&n instanceof Date?"date":typeof File<"u"&&n instanceof File?"file":"object";default:throw new Error(`Unknown data type: ${e}`)}},Sx=new Set(["string","number","symbol"]),RI=new Set(["string","number","bigint","boolean","symbol","undefined"]);function Ao(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ys(n,e,t){let r=new n._zod.constr(e??n._zod.def);return(!e||t?.parent)&&(r._zod.parent=n),r}function Qe(n){let e=n;if(!e)return{};if(typeof e=="string")return{error:()=>e};if(e?.message!==void 0){if(e?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");e.error=e.message}return delete e.message,typeof e.error=="string"?{...e,error:()=>e.error}:e}function Tq(n){let e;return new Proxy({},{get(t,r,s){return e??(e=n()),Reflect.get(e,r,s)},set(t,r,s,i){return e??(e=n()),Reflect.set(e,r,s,i)},has(t,r){return e??(e=n()),Reflect.has(e,r)},deleteProperty(t,r){return e??(e=n()),Reflect.deleteProperty(e,r)},ownKeys(t){return e??(e=n()),Reflect.ownKeys(e)},getOwnPropertyDescriptor(t,r){return e??(e=n()),Reflect.getOwnPropertyDescriptor(e,r)},defineProperty(t,r,s){return e??(e=n()),Reflect.defineProperty(e,r,s)}})}function ph(n){return typeof n=="bigint"?n.toString()+"n":typeof n=="string"?`"${n}"`:`${n}`}function xx(n){return Object.keys(n).filter(e=>n[e]._zod.optin==="optional"&&n[e]._zod.optout==="optional")}var _x={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},kI={int64:[BigInt("-9223372036854775808"),BigInt("9223372036854775807")],uint64:[BigInt(0),BigInt("18446744073709551615")]};function Pq(n,e){let t={},r=n._zod.def;for(let s in e){if(!(s in r.shape))throw new Error(`Unrecognized key: "${s}"`);e[s]&&(t[s]=r.shape[s])}return ys(n,{...n._zod.def,shape:t,checks:[]})}function Cq(n,e){let t={...n._zod.def.shape},r=n._zod.def;for(let s in e){if(!(s in r.shape))throw new Error(`Unrecognized key: "${s}"`);e[s]&&delete t[s]}return ys(n,{...n._zod.def,shape:t,checks:[]})}function Iq(n,e){if(!gl(e))throw new Error("Invalid input to extend: expected a plain object");let t={...n._zod.def,get shape(){let r={...n._zod.def.shape,...e};return yx(this,"shape",r),r},checks:[]};return ys(n,t)}function Aq(n,e){return ys(n,{...n._zod.def,get shape(){let t={...n._zod.def.shape,...e._zod.def.shape};return yx(this,"shape",t),t},catchall:e._zod.def.catchall,checks:[]})}function Nq(n,e,t){let r=e._zod.def.shape,s={...r};if(t)for(let i in t){if(!(i in r))throw new Error(`Unrecognized key: "${i}"`);t[i]&&(s[i]=n?new n({type:"optional",innerType:r[i]}):r[i])}else for(let i in r)s[i]=n?new n({type:"optional",innerType:r[i]}):r[i];return ys(e,{...e._zod.def,shape:s,checks:[]})}function Mq(n,e,t){let r=e._zod.def.shape,s={...r};if(t)for(let i in t){if(!(i in s))throw new Error(`Unrecognized key: "${i}"`);t[i]&&(s[i]=new n({type:"nonoptional",innerType:r[i]}))}else for(let i in r)s[i]=new n({type:"nonoptional",innerType:r[i]});return ys(e,{...e._zod.def,shape:s,checks:[]})}function Ka(n,e=0){for(let t=e;t<n.issues.length;t++)if(n.issues[t]?.continue!==!0)return!0;return!1}function Ci(n,e){return e.map(t=>{var r;return(r=t).path??(r.path=[]),t.path.unshift(n),t})}function Hd(n){return typeof n=="string"?n:n?.message}function ai(n,e,t){let r={...n,path:n.path??[]};if(!n.message){let s=Hd(n.inst?._zod.def?.error?.(n))??Hd(e?.error?.(n))??Hd(t.customError?.(n))??Hd(t.localeError?.(n))??"Invalid input";r.message=s}return delete r.inst,delete r.continue,e?.reportInput||delete r.input,r}function EI(n){return n instanceof Set?"set":n instanceof Map?"map":n instanceof File?"file":"unknown"}function Gd(n){return Array.isArray(n)?"array":typeof n=="string"?"string":"unknown"}function wx(...n){let[e,t,r]=n;return typeof e=="string"?{message:e,code:"custom",input:t,inst:r}:{...e}}function Dq(n){return Object.entries(n).filter(([e,t])=>Number.isNaN(Number.parseInt(e,10))).map(e=>e[1])}var mx=class{constructor(...e){}};var TI=(n,e)=>{n.name="$ZodError",Object.defineProperty(n,"_zod",{value:n._zod,enumerable:!1}),Object.defineProperty(n,"issues",{value:e,enumerable:!1}),Object.defineProperty(n,"message",{get(){return JSON.stringify(e,hx,2)},enumerable:!0}),Object.defineProperty(n,"toString",{value:()=>n.message,enumerable:!1})},fh=ee("$ZodError",TI),Jd=ee("$ZodError",TI,{Parent:Error});function vx(n,e=t=>t.message){let t={},r=[];for(let s of n.issues)s.path.length>0?(t[s.path[0]]=t[s.path[0]]||[],t[s.path[0]].push(e(s))):r.push(e(s));return{formErrors:r,fieldErrors:t}}function Rx(n,e){let t=e||function(i){return i.message},r={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union"&&o.errors.length)o.errors.map(a=>s({issues:a}));else if(o.code==="invalid_key")s({issues:o.issues});else if(o.code==="invalid_element")s({issues:o.issues});else if(o.path.length===0)r._errors.push(t(o));else{let a=r,c=0;for(;c<o.path.length;){let l=o.path[c];c===o.path.length-1?(a[l]=a[l]||{_errors:[]},a[l]._errors.push(t(o))):a[l]=a[l]||{_errors:[]},a=a[l],c++}}};return s(n),r}var kx=n=>(e,t,r,s)=>{let i=r?Object.assign(r,{async:!1}):{async:!1},o=e._zod.run({value:t,issues:[]},i);if(o instanceof Promise)throw new no;if(o.issues.length){let a=new(s?.Err??n)(o.issues.map(c=>ai(c,i,gs())));throw dh(a,s?.callee),a}return o.value},Ex=kx(Jd),Tx=n=>async(e,t,r,s)=>{let i=r?Object.assign(r,{async:!0}):{async:!0},o=e._zod.run({value:t,issues:[]},i);if(o instanceof Promise&&(o=await o),o.issues.length){let a=new(s?.Err??n)(o.issues.map(c=>ai(c,i,gs())));throw dh(a,s?.callee),a}return o.value},Px=Tx(Jd),Cx=n=>(e,t,r)=>{let s=r?{...r,async:!1}:{async:!1},i=e._zod.run({value:t,issues:[]},s);if(i instanceof Promise)throw new no;return i.issues.length?{success:!1,error:new(n??fh)(i.issues.map(o=>ai(o,s,gs())))}:{success:!0,data:i.value}},Za=Cx(Jd),Ix=n=>async(e,t,r)=>{let s=r?Object.assign(r,{async:!0}):{async:!0},i=e._zod.run({value:t,issues:[]},s);return i instanceof Promise&&(i=await i),i.issues.length?{success:!1,error:new n(i.issues.map(o=>ai(o,s,gs())))}:{success:!0,data:i.value}},Ga=Ix(Jd);var PI=/^[cC][^\s-]{8,}$/,CI=/^[0-9a-z]+$/,II=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,AI=/^[0-9a-vA-V]{20}$/,NI=/^[A-Za-z0-9]{27}$/,MI=/^[a-zA-Z0-9_-]{21}$/,DI=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/;var FI=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,Ax=n=>n?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${n}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/;var OI=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;var Oq="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function $I(){return new RegExp(Oq,"u")}var jI=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,LI=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/,zI=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,BI=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,qI=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Nx=/^[A-Za-z0-9_-]*$/,HI=/^([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+$/;var WI=/^\+(?:[0-9]){6,14}[0-9]$/,UI="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",KI=new RegExp(`^${UI}$`);function ZI(n){let e="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof n.precision=="number"?n.precision===-1?`${e}`:n.precision===0?`${e}:[0-5]\\d`:`${e}:[0-5]\\d\\.\\d{${n.precision}}`:`${e}(?::[0-5]\\d(?:\\.\\d+)?)?`}function GI(n){return new RegExp(`^${ZI(n)}$`)}function JI(n){let e=ZI({precision:n.precision}),t=["Z"];n.local&&t.push(""),n.offset&&t.push("([+-]\\d{2}:\\d{2})");let r=`${e}(?:${t.join("|")})`;return new RegExp(`^${UI}T(?:${r})$`)}var VI=n=>{let e=n?`[\\s\\S]{${n?.minimum??0},${n?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${e}$`)};var XI=/^\d+$/,QI=/^-?\d+(?:\.\d+)?/i,YI=/true|false/i,eA=/null/i;var tA=/^[^A-Z]*$/,nA=/^[^a-z]*$/;var ir=ee("$ZodCheck",(n,e)=>{var t;n._zod??(n._zod={}),n._zod.def=e,(t=n._zod).onattach??(t.onattach=[])}),rA={number:"number",bigint:"bigint",object:"date"},Mx=ee("$ZodCheckLessThan",(n,e)=>{ir.init(n,e);let t=rA[typeof e.value];n._zod.onattach.push(r=>{let s=r._zod.bag,i=(e.inclusive?s.maximum:s.exclusiveMaximum)??Number.POSITIVE_INFINITY;e.value<i&&(e.inclusive?s.maximum=e.value:s.exclusiveMaximum=e.value)}),n._zod.check=r=>{(e.inclusive?r.value<=e.value:r.value<e.value)||r.issues.push({origin:t,code:"too_big",maximum:e.value,input:r.value,inclusive:e.inclusive,inst:n,continue:!e.abort})}}),Dx=ee("$ZodCheckGreaterThan",(n,e)=>{ir.init(n,e);let t=rA[typeof e.value];n._zod.onattach.push(r=>{let s=r._zod.bag,i=(e.inclusive?s.minimum:s.exclusiveMinimum)??Number.NEGATIVE_INFINITY;e.value>i&&(e.inclusive?s.minimum=e.value:s.exclusiveMinimum=e.value)}),n._zod.check=r=>{(e.inclusive?r.value>=e.value:r.value>e.value)||r.issues.push({origin:t,code:"too_small",minimum:e.value,input:r.value,inclusive:e.inclusive,inst:n,continue:!e.abort})}}),sA=ee("$ZodCheckMultipleOf",(n,e)=>{ir.init(n,e),n._zod.onattach.push(t=>{var r;(r=t._zod.bag).multipleOf??(r.multipleOf=e.value)}),n._zod.check=t=>{if(typeof t.value!=typeof e.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof t.value=="bigint"?t.value%e.value===BigInt(0):gx(t.value,e.value)===0)||t.issues.push({origin:typeof t.value,code:"not_multiple_of",divisor:e.value,input:t.value,inst:n,continue:!e.abort})}}),iA=ee("$ZodCheckNumberFormat",(n,e)=>{ir.init(n,e),e.format=e.format||"float64";let t=e.format?.includes("int"),r=t?"int":"number",[s,i]=_x[e.format];n._zod.onattach.push(o=>{let a=o._zod.bag;a.format=e.format,a.minimum=s,a.maximum=i,t&&(a.pattern=XI)}),n._zod.check=o=>{let a=o.value;if(t){if(!Number.isInteger(a)){o.issues.push({expected:r,format:e.format,code:"invalid_type",input:a,inst:n});return}if(!Number.isSafeInteger(a)){a>0?o.issues.push({input:a,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:n,origin:r,continue:!e.abort}):o.issues.push({input:a,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:n,origin:r,continue:!e.abort});return}}a<s&&o.issues.push({origin:"number",input:a,code:"too_small",minimum:s,inclusive:!0,inst:n,continue:!e.abort}),a>i&&o.issues.push({origin:"number",input:a,code:"too_big",maximum:i,inst:n})}});var oA=ee("$ZodCheckMaxLength",(n,e)=>{var t;ir.init(n,e),(t=n._zod.def).when??(t.when=r=>{let s=r.value;return!Kd(s)&&s.length!==void 0}),n._zod.onattach.push(r=>{let s=r._zod.bag.maximum??Number.POSITIVE_INFINITY;e.maximum<s&&(r._zod.bag.maximum=e.maximum)}),n._zod.check=r=>{let s=r.value;if(s.length<=e.maximum)return;let o=Gd(s);r.issues.push({origin:o,code:"too_big",maximum:e.maximum,inclusive:!0,input:s,inst:n,continue:!e.abort})}}),aA=ee("$ZodCheckMinLength",(n,e)=>{var t;ir.init(n,e),(t=n._zod.def).when??(t.when=r=>{let s=r.value;return!Kd(s)&&s.length!==void 0}),n._zod.onattach.push(r=>{let s=r._zod.bag.minimum??Number.NEGATIVE_INFINITY;e.minimum>s&&(r._zod.bag.minimum=e.minimum)}),n._zod.check=r=>{let s=r.value;if(s.length>=e.minimum)return;let o=Gd(s);r.issues.push({origin:o,code:"too_small",minimum:e.minimum,inclusive:!0,input:s,inst:n,continue:!e.abort})}}),cA=ee("$ZodCheckLengthEquals",(n,e)=>{var t;ir.init(n,e),(t=n._zod.def).when??(t.when=r=>{let s=r.value;return!Kd(s)&&s.length!==void 0}),n._zod.onattach.push(r=>{let s=r._zod.bag;s.minimum=e.length,s.maximum=e.length,s.length=e.length}),n._zod.check=r=>{let s=r.value,i=s.length;if(i===e.length)return;let o=Gd(s),a=i>e.length;r.issues.push({origin:o,...a?{code:"too_big",maximum:e.length}:{code:"too_small",minimum:e.length},inclusive:!0,exact:!0,input:r.value,inst:n,continue:!e.abort})}}),Vd=ee("$ZodCheckStringFormat",(n,e)=>{var t,r;ir.init(n,e),n._zod.onattach.push(s=>{let i=s._zod.bag;i.format=e.format,e.pattern&&(i.patterns??(i.patterns=new Set),i.patterns.add(e.pattern))}),e.pattern?(t=n._zod).check??(t.check=s=>{e.pattern.lastIndex=0,!e.pattern.test(s.value)&&s.issues.push({origin:"string",code:"invalid_format",format:e.format,input:s.value,...e.pattern?{pattern:e.pattern.toString()}:{},inst:n,continue:!e.abort})}):(r=n._zod).check??(r.check=()=>{})}),lA=ee("$ZodCheckRegex",(n,e)=>{Vd.init(n,e),n._zod.check=t=>{e.pattern.lastIndex=0,!e.pattern.test(t.value)&&t.issues.push({origin:"string",code:"invalid_format",format:"regex",input:t.value,pattern:e.pattern.toString(),inst:n,continue:!e.abort})}}),uA=ee("$ZodCheckLowerCase",(n,e)=>{e.pattern??(e.pattern=tA),Vd.init(n,e)}),dA=ee("$ZodCheckUpperCase",(n,e)=>{e.pattern??(e.pattern=nA),Vd.init(n,e)}),pA=ee("$ZodCheckIncludes",(n,e)=>{ir.init(n,e);let t=Ao(e.includes),r=new RegExp(typeof e.position=="number"?`^.{${e.position}}${t}`:t);e.pattern=r,n._zod.onattach.push(s=>{let i=s._zod.bag;i.patterns??(i.patterns=new Set),i.patterns.add(r)}),n._zod.check=s=>{s.value.includes(e.includes,e.position)||s.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:e.includes,input:s.value,inst:n,continue:!e.abort})}}),fA=ee("$ZodCheckStartsWith",(n,e)=>{ir.init(n,e);let t=new RegExp(`^${Ao(e.prefix)}.*`);e.pattern??(e.pattern=t),n._zod.onattach.push(r=>{let s=r._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(t)}),n._zod.check=r=>{r.value.startsWith(e.prefix)||r.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:e.prefix,input:r.value,inst:n,continue:!e.abort})}}),mA=ee("$ZodCheckEndsWith",(n,e)=>{ir.init(n,e);let t=new RegExp(`.*${Ao(e.suffix)}$`);e.pattern??(e.pattern=t),n._zod.onattach.push(r=>{let s=r._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(t)}),n._zod.check=r=>{r.value.endsWith(e.suffix)||r.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:e.suffix,input:r.value,inst:n,continue:!e.abort})}});var hA=ee("$ZodCheckOverwrite",(n,e)=>{ir.init(n,e),n._zod.check=t=>{t.value=e.tx(t.value)}});var hh=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),this.indent-=1}write(e){if(typeof e=="function"){e(this,{execution:"sync"}),e(this,{execution:"async"});return}let r=e.split(`
|
|
869
|
+
`);try{let Z=require("fs"),ae=require("path").resolve(__dirname,"..","..","mcp-pando-server","resources","messages.json");if(Z.existsSync(ae)){let he=JSON.parse(Z.readFileSync(ae,"utf8"))?.read_this_first;typeof he=="string"&&he.trim().length>0&&(B=he)}}catch{}W={success:!0,help:{title:"read_this_first",body:B}};break}case"insert":{let{InsertCodeExecutor:Q}=await Promise.resolve().then(()=>(fd(),nC)),B=s==="add-code"?{...e,op:"insert"}:e;W=await Q.execute(B,t,this.project);break}case"workspace-overview":W=await Hf.execute(e,t,this.project);break;case"list-exports":W=Wf.execute(e,t,this.project);break;case"analyze-imports":W=Uf.execute(e,t,this.project);break;case"clojure-namespace-graph":W=Kf.execute(e,t,this.project);break;case"clojure-namespace-dependencies":W=Fu.executeDependencies(e,t,this.project);break;case"clojure-namespace-dependents":W=Fu.executeDependents(e,t,this.project);break;case"plan-clojure-namespace-move":W=Ou.executeMove(e,t,this.project);break;case"plan-clojure-namespace-rename":W=Ou.executeRename(e,t,this.project);break;case"move-clojure-namespace":W=await $u.executeMove(e,t,this.project);break;case"rename-clojure-namespace":W=await $u.executeRename(e,t,this.project);break;case"get-db-schema":W=ju.execute(e,t,this.project);break;case"query-db":W=await Zf.execute(e,t,this.project);break;case"delete":W=await Ro.execute(e,t,this.project);break;case"find-references":W=await Ta.execute(e,t,this.project);break;case"find-callers":W=await dd.execute(e,t,this.project);break;case"rename":W=await Eo.execute(e,t,this.project);break;case"filter-map-reduce":{let{FilterMapReduceExecutor:Q}=await Promise.resolve().then(()=>(_S(),rC));W=await Q.execute(e,t,this.project);break}case"shell-command":W=await this.handlePandoShellCommand(e,r);break;case"replace":{let Q=s==="replace-body"?{...e,op:"replace",scope:"body"}:e;if(Q.scope==="body"){let{ReplaceBodyExecutor:B}=await Promise.resolve().then(()=>(gd(),$m));W=await B.execute(Q,t,this.project)}else{let{ReplaceNodeExecutor:B}=await Promise.resolve().then(()=>(bd(),jm));W=await B.execute(Q,t,this.project)}break}case"edit-file-text":{let{TextFileEditExecutor:Q}=await Promise.resolve().then(()=>(HC(),qC));W=await Q.execute(e,t);break}case"add-exclude-dir":W=await this.handleAddExcludeDir(e);break;case"remove-exclude-dir":W=await this.handleRemoveExcludeDir(e);break;case"set-enabled-languages":W=await this.handleSetEnabledLanguages(e);break;case"list-snapshots":W=us.listSnapshots(e,t,this.project);break;case"diff-snapshots":W=us.diffSnapshots(e,t,this.project);break;case"get-snapshot-file":W=await us.getSnapshotFile(e,t,this.project);break;case"get-snapshot-trailers":W=us.getSnapshotTrailers(e,t,this.project);break;case"snapshot-worktree":W=await this.handleSnapshotWorktree(e,r);break;case"repair-history":W=await us.repairShadowHistory(e,t,this.project);break;case"restore-snapshot":W=await us.restoreSnapshot(e,t,this.project);break;case"restore-files":W=await us.restoreFiles(e,t,this.project);break;case"change-signature":V("[OperationDispatch] entering ChangeSignatureExecutor",{op:i,targetPath:e?.path??null}),W=await Wm.execute(e,t,this.project);break;case"get-project-root":W=this.handleGetProjectRoot();break;default:try{let{AtomicExecutor:Q}=await Promise.resolve().then(()=>(KC(),UC));W=await Q.execute(e,t,this.project,this)}catch{W={success:!1,error:`Operation ${e.op} not implemented`}}}V("[OperationDispatch] executor returned",{op:i,success:!!W?.success,error:W?.error??null,errorCode:W?.error_code??null,changedFiles:Array.isArray(W?.details?.changedFiles)?W.details.changedFiles.length:null,allChangedFiles:Array.isArray(W?.details?.allChangedFiles)?W.details.allChangedFiles.length:null});let me=Date.now(),_e={executorMs:Math.max(0,me-m)},Se=String(i||"").toLowerCase()==="delete"||!!e?.forceMayBreakSyntax;if(u&&W&&!W.success&&!pe&&!re(e)){let Q=W.error_code;if((Q==="would_introduce_syntax_error"||Q==="validation_failed"||Q==="io_write_failed")&&ke){let Z=Array.isArray(W.details?.changedFiles)?W.details.changedFiles:[];if(Z.length>0)try{await us.restoreSnapshot({op:"restore-snapshot",snapshotId:ke,shouldCreateNewSnapshot:!1,restrictToPaths:Z},t,this.project),W.details=W.details||{},W.details.rollbackAttempted=!0,W.details.snapshotBefore=ke}catch{}}}if(u&&W&&W.success&&!pe&&!d){try{let Q=Array.isArray(W.details?.allChangedFiles)?W.details.allChangedFiles:Array.isArray(W.details?.changedFiles)?W.details.changedFiles:[],B=Array.isArray(W.details?.deletedFiles)?W.details.deletedFiles:[];if((!Q||Q.length===0)&&(!B||B.length===0))return V("[OperationDispatch] skipping snapshot because no files changed",{op:i}),M(W);let Z=W.details?.receipt||{op:i,target:e.path||e.to||e.of,timestamp:Date.now(),changedFilesCount:Q.length},{SnapshotService:se}=(qS(),be(BS)),{SnapshotStatusTracker:ae}=(ua(),be(la)),De=Date.now();V("[SnapshotService] Starting snapshot",{files:Q.length,deleted:B.length});try{ae.getInstance(this.projectPath).start(Q.length,B.length)}catch{}let he=W.details&&W.details.trailers?W.details.trailers:void 0,{snapshotId:Ke,parentId:Ze}=await se.takeSnapshotNow(this.projectPath,Q,i,Z,he,B,r);_e.snapshotMs=Date.now()-De,V("[SnapshotService] Snapshot finished",{durationMs:_e.snapshotMs,snapshotId:Ke});try{ae.getInstance(this.projectPath).complete()}catch{}if(W.snapshotBefore=Ze||"<none>",W.snapshotAfter=Ke,W.details||(W.details={}),W.details.receipt=Z,W.details&&W.details.trailers){let Ye=W.details.trailers,Ft={};for(let Ee of Object.keys(Ye)){let rt=String(Ye[Ee]??"");Ft[Ee]=rt.length>200?rt.slice(0,200):rt}delete W.details.trailers,W.details.trailersPreview=Ft,W.details.trailersNote="Trailers truncated to 200 chars. Use list-snapshots/get-snapshot-trailers to fetch full trailers."}}catch(Q){return V("[OperationDispatch] snapshot finalization failed",{op:i,error:Q?.message||String(Q)}),M({success:!1,error:`Snapshot failure: ${Q?.message||Q}`})}if(!Se&&!p){let Q=Array.isArray(W.details?.allChangedFiles)?W.details.allChangedFiles:Array.isArray(W.details?.changedFiles)?W.details.changedFiles:[];if(Q.length>0){let B=Date.now(),Z=await this.validateChangedFiles(t,Q,O);if(_e.validationMs=Date.now()-B,Z.skipped&&Z.warning&&(W.warnings=Array.isArray(W.warnings)?[...W.warnings,Z.warning]:[Z.warning]),!Z.ok){let se=W.snapshotBefore,ae=W.snapshotAfter;if(se&&ae&&ae!=="<none>")try{await us.restoreSnapshot({op:"restore-snapshot",snapshotId:se,shouldCreateNewSnapshot:!1,deleteSnapshotId:ae,restrictToPaths:Q},t,this.project)}catch{}return M({success:!1,error:Z.error||"Post-operation validation failed; changes rolled back.",details:{validation:Z,snapshotBefore:se,snapshotAfter:ae,rollbackAttempted:!0}})}}}}u&&(W?.success?this.recordRestoreFastPathState(i,W):this.invalidateRestoreFastPathState("modifying-op-failed",{op:i??null,error:W?.error??null}));try{if(u&&W&&!pe){let Q=Date.now(),B=require("path"),Z=Array.isArray(W.details?.allChangedFiles)?W.details.allChangedFiles:Array.isArray(W.details?.changedFiles)?W.details.changedFiles:[],se=Array.isArray(W.details?.createdFiles)?W.details.createdFiles:[],ae=Array.isArray(W.details?.deletedFiles)?W.details.deletedFiles:[],De=Ee=>B.isAbsolute(Ee)?Ee:B.join(this.projectPath,Ee),he=Ee=>Array.from(new Set(Ee.filter(Boolean))),Ke=he(se.map(De)),Ze=new Set(Ke),Ye=he(Z.map(De)).filter(Ee=>!Ze.has(Ee)),Ft=he(ae.map(De));(Ye.length>0||Ft.length>0||Ke.length>0)&&this.scheduleProjectSync({created:Ke,modified:Ye,deleted:Ft},`${String(i||s||"unknown")} post-write sync`).catch(Ee=>{Nn("[RefreshFromDisk] post-op refresh failed",Ee?.message||Ee)}),_e.syncEnqueueMs=Date.now()-Q}}catch(Q){Nn("[RefreshFromDisk] post-op refresh failed",Q?.message||Q)}return V("[OperationDispatch] post-execution complete",{op:i,success:!!W?.success,totalElapsedMs:Math.max(0,Date.now()-m),postExecutionMs:Math.max(0,Date.now()-me),timings:_e,changedFiles:Array.isArray(W?.details?.changedFiles)?W.details.changedFiles.length:null,allChangedFiles:Array.isArray(W?.details?.allChangedFiles)?W.details.allChangedFiles.length:null}),M(W)}finally{V("[OperationGate] releasing modifying op lock",{op:i??null,activeOp:this.modifyingOpName||null}),C()}}async refreshFilesFromDisk(e,t){let r=require("fs"),s=require("path"),i=a=>{try{return s.relative(this.projectPath,a).replace(/\\/g,"/")}catch{return a}};if(e=this.filterExcludedAbsolutePaths(e),!e.length)return;lt(t,"Workspace sync refresh cancelled"),this.refreshingInProgress=!0,this.refreshingFiles=e.map(i);let o=Date.now();try{for(let a of e){lt(t,"Workspace sync refresh cancelled");try{let c=r.existsSync(a),l=this.project.getSourceFile(a);if(!c){l&&this.project.removeSourceFile(l);continue}(l||this.project.addSourceFileAtPath(a)).refreshFromFileSystemSync()}catch(c){Nn("[RefreshFromDisk] Failed for",a,c?.message||c)}}}finally{let a=Date.now()-o;Mn("code-engine.refreshFilesFromDisk.complete",{projectRoot:this.projectPath,files:e.length,sample:e.slice(0,20).map(i),elapsedMs:a}),V("[RefreshFromDisk] Completed",{files:e.length,ms:a}),this.refreshingInProgress=!1,this.refreshingFiles=[]}}scheduleProjectSync(e,t){let r=`project-sync:${Date.now().toString(36)}:${Math.random().toString(36).slice(2,8)}`,s=Date.now(),i=this.workspaceSyncController.signal;V("[ProjectSync] enqueue",{syncId:r,reason:t,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,hadPending:!!this.pendingProjectSync,pendingSyncId:this.pendingProjectSyncId??null,pendingReason:this.pendingProjectSyncReason??null});let o=async()=>{let l=Date.now();V("[ProjectSync] begin",{syncId:r,reason:t,queueWaitMs:l-s,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length});try{if(await this.handleBatchFileChanges(e,{signal:i,source:"post-write-sync"}),i.aborted){V("[ProjectSync] superseded",{syncId:r,reason:t,durationMs:Date.now()-l,totalMs:Date.now()-s});return}V("[ProjectSync] complete",{syncId:r,reason:t,durationMs:Date.now()-l,totalMs:Date.now()-s})}catch(u){if(zi(u)||i.aborted){V("[ProjectSync] superseded",{syncId:r,reason:t,durationMs:Date.now()-l,totalMs:Date.now()-s,message:u?.message||String(u)});return}throw V("[ProjectSync] failed",{syncId:r,reason:t,durationMs:Date.now()-l,totalMs:Date.now()-s,message:u?.message||String(u)}),u}},a=(this.pendingProjectSync??Promise.resolve()).catch(l=>{if(zi(l)){V("[ProjectSync] previous queued refresh superseded",{syncId:r,reason:t,message:l?.message||String(l)});return}Nn("[ProjectSync] previous queued refresh failed",l?.message||l)}).then(o),c=Symbol(r);return this.pendingProjectSyncToken=c,this.pendingProjectSyncId=r,this.pendingProjectSyncEnqueuedAt=s,this.pendingProjectSyncReason=t,this.pendingProjectSync=a.finally(()=>{this.clearPendingProjectSyncState(c)}),this.pendingProjectSync}async awaitPendingProjectSync(e){let t=this.pendingProjectSync;if(!t)return;let r=Date.now();V("[ProjectSync] awaiting queued refresh before operation",{syncId:this.pendingProjectSyncId??null,operation:e??null,reason:this.pendingProjectSyncReason??null,queuedForMs:this.pendingProjectSyncEnqueuedAt?r-this.pendingProjectSyncEnqueuedAt:null});let s=setInterval(()=>{V("[ProjectSync] waiting",{syncId:this.pendingProjectSyncId??null,operation:e??null,reason:this.pendingProjectSyncReason??null,queuedForMs:this.pendingProjectSyncEnqueuedAt?Date.now()-this.pendingProjectSyncEnqueuedAt:null,waitedMs:Date.now()-r})},n.PROJECT_SYNC_HEARTBEAT_MS);s.unref?.();try{await t,V("[ProjectSync] awaited queued refresh complete",{syncId:this.pendingProjectSyncId??null,operation:e??null,reason:this.pendingProjectSyncReason??null,waitedMs:Date.now()-r})}finally{clearInterval(s)}}async awaitPostWriteWorkSettled(e="external"){let t=Date.now();V("[PostWriteDrain] begin",{reason:e,pendingProjectSync:!!this.pendingProjectSync,pendingProjectSyncId:this.pendingProjectSyncId??null,batchRunner:!!this.batchRunner,batchInProgress:this.batchInProgress,refreshingInProgress:this.refreshingInProgress});let r=setInterval(()=>{V("[PostWriteDrain] waiting",{reason:e,waitedMs:Date.now()-t,pendingProjectSync:!!this.pendingProjectSync,pendingProjectSyncId:this.pendingProjectSyncId??null,pendingProjectSyncReason:this.pendingProjectSyncReason??null,batchRunner:!!this.batchRunner,batchInProgress:this.batchInProgress,refreshingInProgress:this.refreshingInProgress,queuedBatch:this.describeQueuedBatch()})},n.PROJECT_SYNC_HEARTBEAT_MS);r.unref?.();try{for(;;){let s=this.pendingProjectSync;if(s){await s;continue}let i=this.batchRunner;if(i){await i;continue}if(!this.batchInProgress&&!this.refreshingInProgress&&!this.queuedBatch)break;await new Promise(o=>setTimeout(o,25))}}finally{clearInterval(r),V("[PostWriteDrain] complete",{reason:e,waitedMs:Date.now()-t,pendingProjectSync:!!this.pendingProjectSync,batchRunner:!!this.batchRunner,batchInProgress:this.batchInProgress,refreshingInProgress:this.refreshingInProgress})}}scheduleLspWorkspaceSync(e,t){let r=this.lspHost,s=r?.workspaceFilesChanged?.bind(r),i=e.created.length+e.modified.length+e.deleted.length;if(!s||i===0)return Mn("code-engine.batch.workspaceFilesChanged.skipped",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,reason:s?"empty-batch":"no-lsp-host"}),Promise.resolve();Mn("code-engine.batch.workspaceFilesChanged.scheduled",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,reason:t});let o=async()=>{let c=Date.now();Mn("code-engine.batch.workspaceFilesChanged.start",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,createdSample:e.created.slice(0,20),modifiedSample:e.modified.slice(0,20),deletedSample:e.deleted.slice(0,20),reason:t});try{await s(e),Mn("code-engine.batch.workspaceFilesChanged.complete",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,elapsedMs:Date.now()-c,reason:t})}catch(l){Mn("code-engine.batch.workspaceFilesChanged.failed",{projectRoot:this.projectPath,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,elapsedMs:Date.now()-c,error:l?.message||String(l),reason:t}),Nn("[LspWorkspaceSync] workspaceFilesChanged failed",l?.message||l)}},a=(this.pendingLspWorkspaceSync??Promise.resolve()).catch(c=>{Nn("[LspWorkspaceSync] previous queued sync failed",c?.message||c)}).then(o);return this.pendingLspWorkspaceSync=a.finally(()=>{this.pendingLspWorkspaceSync===a&&(this.pendingLspWorkspaceSync=null)}),this.pendingLspWorkspaceSync}withSnapshotReceipt(e,t,r){return{...r}}async handleBatchFileChanges(e,t){let r=t?.source??"external",s=t?.signal??this.workspaceSyncController.signal;if(V("batch-change event",{created:e.created.length,modified:e.modified.length,deleted:e.deleted.length,source:r,signalAborted:s.aborted}),e.created.length+e.modified.length+e.deleted.length===0)return;if(r!=="post-write-sync"&&this.invalidateRestoreFastPathState("batch-change",{source:r,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length}),s.aborted){V("[BatchQueue] skipped aborted batch",{source:r,created:e.created.length,modified:e.modified.length,deleted:e.deleted.length});return}let o={created:e.created.map(ps),modified:e.modified.map(ps),deleted:e.deleted.map(ps)};Mn("code-engine.batch.enqueue",{projectRoot:this.projectPath,created:o.created.length,modified:o.modified.length,deleted:o.deleted.length,createdSample:o.created.slice(0,20),modifiedSample:o.modified.slice(0,20),deletedSample:o.deleted.slice(0,20)});let a=`${st(this.projectPath)}/`,c=o.deleted.find(u=>u.startsWith(a)&&u.endsWith(".db"));if(c&&!this.indexingInProgress){V("\u{1F504} Index DB deleted; triggering full reindex...",{file:c}),await this.startIndexing();return}let l=this.mergeQueuedBatch(o,r);V("[BatchQueue] enqueue",{incoming:{created:o.created.length,modified:o.modified.length,deleted:o.deleted.length},source:r,queued:l,indexingInProgress:this.indexingInProgress,batchInProgress:this.batchInProgress,runnerActive:!!this.batchRunner}),!this.indexingInProgress&&await this.ensureBatchRunner()}}});var dc=q(require("path"));_y();ws();gt();var vd=class{constructor(e){this.options=e;this.workspaceRoots=new Set;this.explicitProjectRoot=null;this.registeredRoots=new Set}getWorkspaceRoots(){return Array.from(this.workspaceRoots).sort((e,t)=>e.localeCompare(t))}getExplicitProjectRoot(){return this.explicitProjectRoot}getRegisteredRoots(){return Array.from(this.registeredRoots).sort((e,t)=>e.localeCompare(t))}async setWorkspaceRoots(e,t){return this.workspaceRoots=new Set(e.map(r=>this.options.normalizeRoot(r)).filter(r=>!!r)),this.refreshEffectiveRoots(t)}async setProjectRoot(e,t){let r=Date.now();X("ProjectRootManager","setProjectRoot begin",{rootOrPath:e,currentExplicitRoot:this.explicitProjectRoot,opts:t});let s=this.options.normalizeRoot(e);if(!s)return X("ProjectRootManager","setProjectRoot normalized to null",{rootOrPath:e,elapsedMs:Date.now()-r}),null;let i=this.options.resolveIndexRoot(s);return i?this.explicitProjectRoot===i?(X("ProjectRootManager","setProjectRoot no-op",{rootOrPath:e,resolvedInput:s,targetDir:i,elapsedMs:Date.now()-r}),i):(this.explicitProjectRoot=i,await this.refreshEffectiveRoots(t),X("ProjectRootManager","setProjectRoot complete",{rootOrPath:e,resolvedInput:s,targetDir:i,registeredRoots:this.getRegisteredRoots(),elapsedMs:Date.now()-r}),i):(X("ProjectRootManager","setProjectRoot resolveIndexRoot returned null",{rootOrPath:e,resolvedInput:s,elapsedMs:Date.now()-r}),null)}async refreshEffectiveRoots(e){let t=Date.now(),r=this.explicitProjectRoot?new Set([this.explicitProjectRoot]):new Set(this.workspaceRoots),s=new Set(this.registeredRoots),i=[];X("ProjectRootManager","refreshEffectiveRoots begin",{effective:Array.from(r),registeredBefore:Array.from(s),opts:e});for(let o of r){if(this.registeredRoots.has(o))continue;let a=Date.now(),c=await this.options.registerRoot(o);X("ProjectRootManager","refreshEffectiveRoots registerRoot resolved",{requestedRoot:o,registered:c,elapsedMs:Date.now()-a}),c&&(this.registeredRoots.add(c),i.push(c))}for(let o of s)r.has(o)||(this.options.disposeRoot(o),this.registeredRoots.delete(o));if(e?.indexNewRoots&&this.options.startIndexingForRoot)for(let o of i)X("ProjectRootManager","refreshEffectiveRoots startIndexingForRoot dispatch",{root:o}),this.options.startIndexingForRoot(o);return X("ProjectRootManager","refreshEffectiveRoots complete",{newlyRegistered:i,finalRoots:this.getRegisteredRoots(),elapsedMs:Date.now()-t}),{newlyRegistered:i,finalRoots:this.getRegisteredRoots()}}};ws();Xo();Bn();Ru();oa();var ZS=5e4,m1=1*1024*1024;function JC(n,e){let t=typeof e?.limit=="number"&&Number.isFinite(e.limit)?Math.max(1,Math.trunc(e.limit)):ZS,r=e?.languageSupport,s=Js(n),i=bu(r),o=Xr(n,s),a=_E(n,i,{shouldExclude:o,maxFileBytes:m1,limit:t});return{root:n,candidateIndexableFiles:a.count,limit:t,exceeded:a.limitExceeded}}function VC(n){let e=n.exceeded?"at least":"exactly";return new Error(`Refusing to index '${n.root}': candidate_indexable_files is ${e} ${n.candidateIndexableFiles}, above the limit of ${n.limit}. Choose a narrower root or add excludes before retrying.`)}Vt();gt();var Rd=class n{constructor(e,t){this.options=t;this.indexingSuppressedRoots=new Set;this.rootManager=new vd({normalizeRoot:r=>{let s=r.trim();return s?tn(s):null},resolveIndexRoot:r=>r,registerRoot:async r=>{let s=Date.now();X("DirectProjectRootManager","registerRoot begin",{root:r,hasOptions:!!this.options});let i=this.getOptionsForRoot(r);return i&&kn.setEngineOptions(r,i),kn.getEngine(r,i),X("DirectProjectRootManager","registerRoot complete",{root:r,elapsedMs:Date.now()-s}),r},disposeRoot:r=>{X("DirectProjectRootManager","disposeRoot",{root:r}),kn.clearEngine(r)},startIndexingForRoot:async r=>{let s=Date.now();if(X("DirectProjectRootManager","startIndexingForRoot begin",{root:r}),this.indexingSuppressedRoots.has(tn(r))){X("DirectProjectRootManager","startIndexingForRoot skipped (root over indexing limit)",{root:r});return}let i=kn.getEngine(r,this.getOptionsForRoot(r));typeof i?.startIndexing=="function"&&await i.startIndexing(),X("DirectProjectRootManager","startIndexingForRoot dispatched",{root:r,elapsedMs:Date.now()-s})}}),this.initialRoot=e}static async create(e,t){let r=new n(e,t);return await r.validateProjectRoot(e),await r.rootManager.setWorkspaceRoots([e]),r}getProjectRoot(){let e=this.rootManager.getExplicitProjectRoot();return e||(this.rootManager.getRegisteredRoots()[0]??null)}getEngine(){let e=this.getProjectRoot();if(!e)throw new Error("No project root configured.");return kn.getEngine(e,this.getOptionsForRoot(e))}async validateProjectRoot(e){let t=e.trim();if(!t)return null;let r=tn(t),s=JC(r,{languageSupport:this.getOptionsForRoot(r)?.languageSupport,limit:this.indexingLimitOverride});if(s.exceeded){this.indexingSuppressedRoots.add(r);let i=VC(s).message;X("DirectProjectRootManager","validateProjectRoot indexing suppressed",{root:r,candidateIndexableFiles:s.candidateIndexableFiles,limit:s.limit,reason:i})}else this.indexingSuppressedRoots.delete(r);return r}isIndexingSuppressed(e){return this.indexingSuppressedRoots.has(tn(e))}setIndexingLimitOverrideForTesting(e){this.indexingLimitOverride=e}async setProjectRoot(e){let t=Date.now();X("DirectProjectRootManager","setProjectRoot begin",{root:e}),await this.validateProjectRoot(e);let r=await this.rootManager.setProjectRoot(e,{indexNewRoots:!0});return X("DirectProjectRootManager","setProjectRoot complete",{root:e,resolved:r,elapsedMs:Date.now()-t}),r}updateRootOptions(e,t){let r=tn(e),s=t??this.getOptionsForRoot(r);s&&kn.setEngineOptions(r,s)}getOptionsForRoot(e){let t=tn(e),r=this.options?.languageSupport??Vo(t),s=this.options?.lspHost;if(!(!r&&!s))return{...r?{languageSupport:r}:{},...s?{lspHost:s}:{}}}};ki();Gf();Xo();Bn();Vs();ei();var h1=q(require("fs")),g1=q(require("path"));Qf();var rI=require("events");Gf();Qf();Bn();Xo();ws();Vt();var eI=require("child_process");ws();dr();gt();var GS=require("child_process"),za=null,kd=null;async function QC(n){return za||kd||(kd=Promise.resolve().then(()=>{let e=XC();if(e.available)return za=e,e;let t=b1(),r=e.error;for(let s of t){n?.(`[NodeFileWatcher] watchman missing; trying install via ${s.label}`);let i=y1(s),o=XC();if(o.available)return za={available:!0,version:o.version,installAttempted:!0,installSucceeded:!0,installMethod:s.label},za;r=i.error??o.error??r}return za={available:!1,installAttempted:t.length>0,installSucceeded:!1,error:r},za}).finally(()=>{kd=null}),kd)}function XC(){let n=(0,GS.spawnSync)("watchman",["--version"],{encoding:"utf8",stdio:"pipe",shell:process.platform==="win32"});return n.status===0?{available:!0,version:`${n.stdout||n.stderr||""}`.trim()||void 0,installAttempted:!1,installSucceeded:!1}:{available:!1,installAttempted:!1,installSucceeded:!1,error:YC(n.error,n.stderr,n.stdout)}}function y1(n){for(let e of n.steps){let t=(0,GS.spawnSync)(e.cmd,e.args,{encoding:"utf8",stdio:"pipe",shell:process.platform==="win32"});if(t.status!==0)return{ok:!1,error:YC(t.error,t.stderr,t.stdout)}}return{ok:!0}}function b1(){let n=typeof process.getuid=="function"?process.getuid()===0:!1,e=(t,r)=>n?{cmd:t,args:r}:{cmd:"sudo",args:["-n",t,...r]};switch(process.platform){case"darwin":return[{label:"homebrew",steps:[{cmd:"brew",args:["install","watchman"]}]},{label:"macports",steps:[e("port",["install","watchman"])]}];case"linux":return[{label:"homebrew",steps:[{cmd:"brew",args:["install","watchman"]}]},{label:"apt",steps:[e("apt-get",["update"]),e("apt-get",["install","-y","watchman"])]},{label:"dnf",steps:[e("dnf",["install","-y","watchman"])]},{label:"pacman",steps:[e("pacman",["-S","--noconfirm","watchman"])]}];case"win32":return[{label:"chocolatey",steps:[{cmd:"choco",args:["install","watchman","-y"]}]},{label:"winget",steps:[{cmd:"winget",args:["install","--id","Facebook.Watchman","-e"]}]}];default:return[]}}function YC(n,e,t){if(n instanceof Error&&n.message)return n.message;let r=`${e??""}`.trim();return r||`${t??""}`.trim()||void 0}function Dn(n,e){if(!Ht())return;let t=e&&typeof e=="object"&&!Array.isArray(e)?{pid:process.pid,...e}:{pid:process.pid,details:e};X("WatcherTrace",n,t)}var Ym=class{constructor(e){this.log=e;this.projectRoot=null;this.languageSupport=null;this.watcherChild=null;this.watcherGeneration=0;this.shutdownGraceMs=1e3;this.switchChain=Promise.resolve()}async activate(e,t){this.languageSupport=t,await this.updateProjectRoot(e,t)}async updateProjectRoot(e,t){if(t&&(this.languageSupport=t),!e||!this.languageSupport||e===this.projectRoot&&!t)return;let r=this.languageSupport,s=this.switchChain.catch(()=>{}).then(async()=>{let i=this.projectRoot,o=this.watcherChild,a=this.watcherGeneration+1;this.log(`[NodeFileWatcher] updateProjectRoot begin from=${i??"null"} to=${e}`),Dn("node-watcher.updateProjectRoot.begin",{fromRoot:i,toRoot:e,previousGeneration:o?.generation??null,hasWatcher:!!o}),o&&(Dn("node-watcher.updateProjectRoot.await-previous-exit",{fromRoot:i,toRoot:e,previousGeneration:o.generation,childPid:o.process.pid??null}),await this.shutdownChild(o,"root-switch"));let c=await QC(this.log);Dn("node-watcher.watchman.status",{root:e,generation:a,available:c.available,version:c.version,installAttempted:c.installAttempted,installSucceeded:c.installSucceeded,installMethod:c.installMethod,error:c.error});let l=this.spawnWatcherChild(e,r,a,c);this.projectRoot=e,this.watcherChild=l,this.watcherGeneration=a,Dn("node-watcher.updateProjectRoot.complete",{fromRoot:i,toRoot:e,generation:a,childPid:l.process.pid??null,scriptPath:l.scriptPath})});this.switchChain=s,await s}async dispose(){let e=this.switchChain.catch(()=>{}).then(async()=>{let t=this.watcherChild,r=this.projectRoot,s=this.watcherGeneration;this.projectRoot=null,this.watcherChild=null,t&&(Dn("node-watcher.dispose",{root:r,generation:s,childPid:t.process.pid??null}),await this.shutdownChild(t,"dispose"))});this.switchChain=e,await e}spawnWatcherChild(e,t,r,s){let i=wk();if(!i)throw new Error("Could not resolve watcher child process script");this.log(`[NodeFileWatcher] activate root=${e}`),Dn("node-watcher.spawn.start",{root:e,generation:r,scriptPath:i});let o=(0,eI.fork)(i,[],{cwd:e,env:{...process.env,PANDO_WATCH_ROOT:e,PANDO_WATCH_GENERATION:String(r),PANDO_WATCH_LANGUAGE_SUPPORT_JSON:JSON.stringify(t),PANDO_WATCH_WATCHMAN_AVAILABLE:s.available?"1":"0",PANDO_WATCH_WATCHMAN_INSTALL_ATTEMPTED:s.installAttempted?"1":"0",PANDO_WATCH_WATCHMAN_INSTALL_SUCCEEDED:s.installSucceeded?"1":"0"},stdio:["ignore","inherit","inherit","ipc"]}),a=()=>{},c=new Promise(u=>{a=u}),l={process:o,root:e,generation:r,scriptPath:i,shutdownTimer:null,shuttingDown:!1,exitPromise:c,resolveExit:a};return o.on("message",u=>{this.handleChildMessage(l,u)}),o.on("exit",(u,d)=>{l.shutdownTimer&&(clearTimeout(l.shutdownTimer),l.shutdownTimer=null),Dn("node-watcher.child.exit",{root:l.root,generation:l.generation,childPid:o.pid??null,code:u,signal:d,shuttingDown:l.shuttingDown}),this.watcherChild===l&&(this.watcherChild=null),l.resolveExit()}),o.on("error",u=>{let d=u instanceof Error?u.message:String(u);this.log(`[NodeFileWatcher] watcher child error root=${e} error=${d}`),Dn("node-watcher.child.error",{root:e,generation:r,childPid:o.pid??null,error:d})}),Dn("node-watcher.spawn.complete",{root:e,generation:r,scriptPath:i,childPid:o.pid??null}),l}async handleChildMessage(e,t){if(!(!t||typeof t!="object"))switch(t.type){case"ready":this.handleReadyMessage(e,t);return;case"error":this.handleErrorMessage(e,t);return;case"batch":await this.handleBatchMessage(e,t);return;default:return}}handleReadyMessage(e,t){if(!this.isActiveChild(e)){Dn("node-watcher.ready.stale",{root:t.root,generation:t.generation,activeRoot:this.projectRoot,activeGeneration:this.watcherGeneration});return}this.log(`[NodeFileWatcher] ready root=${t.root} watchRoots=${t.watchRootCount??0} backend=${t.backendPreference??"native"}`),Dn("node-watcher.ready",{root:t.root,generation:t.generation,childPid:e.process.pid??null,watchRootCount:t.watchRootCount,backendPreference:t.backendPreference,watchmanAvailable:t.watchmanAvailable,watchmanInstallAttempted:t.watchmanInstallAttempted,watchmanInstallSucceeded:t.watchmanInstallSucceeded})}handleErrorMessage(e,t){let r=!this.isActiveChild(e);this.log(`[NodeFileWatcher] watch error path=${t.root} error=${t.error}`),Dn(r?"node-watcher.error.stale":"node-watcher.error",{root:t.root,generation:t.generation,childPid:e.process.pid??null,activeRoot:this.projectRoot,activeGeneration:this.watcherGeneration,error:t.error})}async handleBatchMessage(e,t){if(!this.isActiveChild(e)){Dn("node-watcher.batch.stale",{root:t.root,generation:t.generation,batchId:t.batchId,activeRoot:this.projectRoot,activeGeneration:this.watcherGeneration}),this.sendToChild(e,{type:"batch-ack",batchId:t.batchId,ok:!0});return}let r=kn.getExistingEngine(t.root);if(Dn("node-watcher.batch.start",{root:t.root,generation:t.generation,batchId:t.batchId,childPid:e.process.pid??null,created:t.changes.created.length,modified:t.changes.modified.length,deleted:t.changes.deleted.length,hasEngine:!!r,hasBatchHandler:typeof r?.handleBatchFileChanges=="function"}),!r||typeof r.handleBatchFileChanges!="function"){this.sendToChild(e,{type:"batch-ack",batchId:t.batchId,ok:!1,error:`No batch handler available for root ${t.root}`});return}try{await r.handleBatchFileChanges(t.changes),Dn("node-watcher.batch.complete",{root:t.root,generation:t.generation,batchId:t.batchId,childPid:e.process.pid??null}),this.sendToChild(e,{type:"batch-ack",batchId:t.batchId,ok:!0})}catch(s){let i=s instanceof Error?s.message:String(s);Dn("node-watcher.batch.failed",{root:t.root,generation:t.generation,batchId:t.batchId,childPid:e.process.pid??null,error:i}),this.sendToChild(e,{type:"batch-ack",batchId:t.batchId,ok:!1,error:i})}}isActiveChild(e){return this.watcherChild===e&&this.projectRoot===e.root&&this.watcherGeneration===e.generation}sendToChild(e,t){try{e.process.send?.(t)}catch(r){Dn("node-watcher.child.send.failed",{root:e.root,generation:e.generation,childPid:e.process.pid??null,messageType:t.type,error:r instanceof Error?r.message:String(r)})}}async shutdownChild(e,t){if(e.shuttingDown){await e.exitPromise;return}e.shuttingDown=!0,Dn("node-watcher.child.shutdown.begin",{root:e.root,generation:e.generation,childPid:e.process.pid??null,reason:t}),this.sendToChild(e,{type:"shutdown",reason:t}),e.shutdownTimer=setTimeout(()=>{Dn("node-watcher.child.shutdown.force-kill",{root:e.root,generation:e.generation,childPid:e.process.pid??null,reason:t,graceMs:this.shutdownGraceMs});try{e.process.kill("SIGKILL")}catch(r){Dn("node-watcher.child.shutdown.force-kill.failed",{root:e.root,generation:e.generation,childPid:e.process.pid??null,reason:t,error:r instanceof Error?r.message:String(r)})}},this.shutdownGraceMs),await e.exitPromise}};var tI=nI();function nI(){return process.env.PANDO_RUNTIME_HOST==="vscode-extension"||process.env.VSCODE_PID||process.env.VSCODE_IPC_HOOK||process.env.VSCODE_CWD?"vscode-extension":process.env.PANDO_RUNTIME_HOST==="standalone-cli"?"standalone-cli":"unknown"}function JS(n){tI=n,process.env.PANDO_RUNTIME_HOST=n}function VS(){return tI==="vscode-extension"}dr();ws();async function XS(n){let e=kn.getEngine(n),t={root:n,isIndexing:typeof e?.isIndexingInProgress=="function"?!!e.isIndexingInProgress():!1};try{let r=await e.execute({op:"workspace-overview"});if(!r?.success)return t;let s=r.indexing??{};return{root:n,isIndexing:!!(s.isIndexing??t.isIndexing),progress:typeof s.progress=="number"?s.progress:void 0,totalFiles:typeof s.totalFiles=="number"?s.totalFiles:void 0,filesProcessed:typeof s.filesProcessed=="number"?s.filesProcessed:void 0,filesIndexed:typeof s.filesIndexed=="number"?s.filesIndexed:void 0,filesSkipped:typeof s.filesSkipped=="number"?s.filesSkipped:void 0,filesFailed:typeof s.filesFailed=="number"?s.filesFailed:void 0,message:typeof s.message=="string"?s.message:void 0}}catch{return t}}gt();var Ed=class n extends rI.EventEmitter{constructor(t,r){super();this.rootManager=t;this.options=r;this.watcher=null}static async create(t){Rs()||Yo(process.cwd(),t.runtimePaths);let r=await Rd.create(t.initialRoot,{languageSupport:t.languageSupport,lspHost:t.lspHost}),s=new n(r,{...t});return s.warnIfIndexingSuppressed(r.getProjectRoot()),await s.configureWatcher(),s}warnIfIndexingSuppressed(t){!t||!this.rootManager.isIndexingSuppressed(t)||this.options.log?.(`indexing is OFF for '${t}': it has too many files to index safely. Pando is running but its code-graph tools will be empty here. Indexing will start automatically when you set the project root to a folder with fewer than ${ZS.toLocaleString()} files.`)}getProjectRoot(){return this.rootManager.getProjectRoot()}getRoots(){let t=this.getProjectRoot();return t?[t]:[]}getEngine(){return this.rootManager.getEngine()}async setProjectRoot(t){let r=this.getProjectRoot(),s=tn(t),i=Date.now();if(X("PandoRuntime","setProjectRoot begin",{requestedRoot:t,currentRoot:r,nextRoot:s}),await this.rootManager.validateProjectRoot(t),this.warnIfIndexingSuppressed(s),r===s)return X("PandoRuntime","setProjectRoot no-op",{requestedRoot:t,currentRoot:r,nextRoot:s,elapsedMs:Date.now()-i}),r;if(r&&r!==s){let c=kn.getExistingEngine(r),l=`project root switching from ${r} to ${s}`,u=(p,f,m)=>{X("PandoRuntime",`setProjectRoot phase:${p}`,{requestedRoot:t,currentRoot:r,nextRoot:s,elapsedMs:Date.now()-f,...m})},d=Date.now();try{c?.cancelActiveOperations?.("project root switching")}catch{}u("cancelActiveOperations",d,{hasEngine:!!c}),d=Date.now();try{c?.cancelIndexing?.("project root switching")}catch{}u("cancelIndexing",d),d=Date.now();try{kn.resetEngine(r)}catch{}u("resetEngine",d),d=Date.now(),Xf(),u("shutdownActiveStreamingIndexers",d),d=Date.now(),await Xs.shutdownAllShared({force:!0,reason:l}).catch(()=>{}),u("shutdownAllShared(force)",d),d=Date.now(),pa(l),u("shutdownSharedWorkers",d)}let o=Date.now(),a=await this.rootManager.setProjectRoot(t);if(X("PandoRuntime","setProjectRoot rootManager resolved",{requestedRoot:t,currentRoot:r,nextRoot:s,resolved:a,elapsedMs:Date.now()-o}),a){let c=Date.now();X("PandoRuntime","setProjectRoot watcher.updateProjectRoot begin",{requestedRoot:t,currentRoot:r,nextRoot:s,resolved:a,hasWatcher:!!this.watcher}),this.rootManager.isIndexingSuppressed(a)?X("PandoRuntime","setProjectRoot watcher skipped (root over indexing limit)",{requestedRoot:t,resolved:a}):await this.watcher?.updateProjectRoot(a,this.resolveLanguageSupport(a)),X("PandoRuntime","setProjectRoot watcher.updateProjectRoot complete",{requestedRoot:t,currentRoot:r,nextRoot:s,resolved:a,elapsedMs:Date.now()-c});let l=Date.now();X("PandoRuntime","setProjectRoot emit rootChanged begin",{requestedRoot:t,currentRoot:r,nextRoot:s,resolved:a}),this.emit("rootChanged",a),X("PandoRuntime","setProjectRoot emit rootChanged complete",{requestedRoot:t,currentRoot:r,nextRoot:s,resolved:a,elapsedMs:Date.now()-l})}return X("PandoRuntime","setProjectRoot complete",{requestedRoot:t,currentRoot:r,nextRoot:s,resolved:a,elapsedMs:Date.now()-i}),a}async startIndexing(){let t=this.getProjectRoot();if(!t)return;if(this.rootManager.isIndexingSuppressed(t)){X("PandoRuntime","startIndexing skipped (root over indexing limit)",{root:t}),this.emit("indexing",{root:t,isIndexing:!1});return}let r=this.rootManager.getEngine();this.emit("indexing",{root:t,isIndexing:!0}),r.startIndexing?.()}async getIndexingStatus(){let t=this.getProjectRoot();return t?XS(t):null}async getWorkspaceOverview(){let t=this.getProjectRoot();if(!t)return null;let r=this.rootManager.getEngine();try{let s=await r.execute({op:"workspace-overview"});if(!s?.success)return null;let i=s.nodes??{},o=Hr(i.functions),a=Hr(i.classes),c=Hr(i.interfaces),l=Hr(i.types),u=Hr(i.enums),d=Hr(i.variables),p=[o,a,c,l,u,d].filter(f=>typeof f=="number").reduce((f,m)=>f+m,0);return{root:t,files:{total:Hr(s.files?.total),testFiles:Hr(s.files?.testFiles)},nodes:{total:p||void 0,functions:o,classes:a,interfaces:c,types:l,enums:u,variables:d},indexing:{root:t,isIndexing:!!s.indexing?.isIndexing,totalFiles:Hr(s.indexing?.totalFiles),filesProcessed:Hr(s.indexing?.filesProcessed),filesIndexed:Hr(s.indexing?.filesIndexed),filesSkipped:Hr(s.indexing?.filesSkipped),filesFailed:Hr(s.indexing?.filesFailed),progress:Hr(s.indexing?.progress),message:typeof s.indexing?.message=="string"?s.indexing.message:void 0},writes:{ready:!!s.writes?.ready,blocked:!!(s.writes?.blocked??!s.writes?.ready),reason:typeof s.writes?.reason=="string"?s.writes.reason:void 0,message:typeof s.writes?.message=="string"?s.writes.message:void 0,gates:{metadataIndexingComplete:!!s.writes?.gates?.metadataIndexingComplete,snapshotComplete:!!s.writes?.gates?.snapshotComplete,ftsRequired:!1}},lsp:s.lsp&&typeof s.lsp=="object"?s.lsp:void 0}}catch{return null}}async stop(){let t=this.getProjectRoot();await this.watcher?.dispose(),this.watcher=null;let r=t?tn(t):null,s=r?kn.getExistingEngine(r):null;try{s?.cancelActiveOperations?.("runtime stopped")}catch{}try{s?.cancelIndexing?.("runtime stopped")}catch{}if(Xf(),await Xs.shutdownAllShared({force:!0,reason:"runtime stopped"}).catch(()=>{}),pa("runtime stopped"),Yy(),!!r){try{s?.dispose?.()}catch{}kn.clearEngine(r)}}reloadLanguageSupport(t){let r=tn(t),s=this.resolveLanguageSupport(r);this.rootManager.updateRootOptions(r,{languageSupport:s,lspHost:this.options.lspHost}),this.getProjectRoot()===r&&this.watcher?.updateProjectRoot(r,s)}async configureWatcher(){if(this.options.enableFileWatching===!1||VS())return;let t=this.getProjectRoot();if(t){if(this.rootManager.isIndexingSuppressed(t)){X("PandoRuntime","configureWatcher skipped (root over indexing limit)",{root:t});return}this.watcher=new Ym(r=>this.options.log?.(r)??void 0),await this.watcher.activate(t,this.resolveLanguageSupport(t))}}resolveLanguageSupport(t){return this.options.languageSupport??Vo(t)}};function Hr(n){return typeof n=="number"?n:void 0}dr();async function eh(n,e={}){return e.hostKind&&JS(e.hostKind),e.runtimePaths&&Yo(e.runtimePaths.runtimeRoot??n,e.runtimePaths),Ed.create({initialRoot:n,languageSupport:e.languageSupport,lspHost:e.lspHost,transportMode:e.transportMode,enableFileWatching:e.enableFileWatching,log:e.log,runtimePaths:e.runtimePaths})}dr();var Id=q(require("path"));ws();Vt();var S1="Compared against a smart non-pando workflow that would only send targeted declaration/reference snippets and minimal surrounding context, not full files.";var Ba={language:null,charsPerLine:40,charsPerToken:4,searchLines:6,confidence:"heuristic"},x1={c:{language:"c",charsPerLine:40.09,charsPerToken:3.98,searchLines:5.91,confidence:"trace-high"},cpp:{language:"cpp",charsPerLine:42.56,charsPerToken:3.99,searchLines:6.89,confidence:"trace-high"},csharp:{language:"csharp",charsPerLine:38.55,charsPerToken:3.99,searchLines:3.76,confidence:"trace-low"},js:{language:"js",charsPerLine:39.75,charsPerToken:3.98,searchLines:6.02,confidence:"trace-high"},ts:{language:"ts",charsPerLine:37.3,charsPerToken:3.99,searchLines:7.67,confidence:"trace-high"},java:{language:"java",charsPerLine:40,charsPerToken:4,searchLines:6,confidence:"trace-sparse"},clojure:{language:"clojure",charsPerLine:40,charsPerToken:4,searchLines:6,confidence:"modeled-only"},dart:{language:"dart",charsPerLine:40,charsPerToken:4,searchLines:6,confidence:"modeled-only"}};function Xi(n){return typeof n!="number"||!Number.isFinite(n)?0:Math.max(0,Math.floor(n))}function Cd(n){return Math.max(0,Math.floor(n))}function cI(n,e=Ba){return Cd(Math.round(n*e.charsPerLine))}function nh(n,e=Ba){return n<=0?0:Cd(Math.ceil(n/e.charsPerToken))}function _1(n){return Buffer.byteLength(n,"utf8")}function w1(n){let e=n[n.length-1],t=n[n.length-2],r=n[n.length-3];return e?e==="content"&&t==="body"||e==="content"&&t==="code"&&r==="self"||e==="content"&&t==="code"?!0:e==="source"||e==="sourceText"||e==="sourceCode"||e==="rawSource"||e==="excerpt"||e==="snippet"||e==="oldString"||e==="old_string"||e==="originalFile"||e==="gitDiff"||e==="diff"||e==="patch":!1}function lI(n){let e=new Set,t=(r,s)=>{if(typeof r=="string")return w1(s)?_1(r):0;if(!r||typeof r!="object"||e.has(r))return 0;if(e.add(r),Array.isArray(r))return r.reduce((o,a,c)=>o+t(a,[...s,String(c)]),0);let i=0;for(let[o,a]of Object.entries(r))i+=t(a,[...s,o]);return i};return Cd(t(n,[]))}function tx(n){if(Array.isArray(n))return n.length===1?tx(n[0]):null;if(typeof n!="string")return null;let e=n.trim().toLowerCase();return e?e==="typescript"||e==="tsx"?"ts":e==="javascript"||e==="jsx"?"js":e==="c++"||e==="cc"||e==="cxx"?"cpp":e==="c#"||e==="cs"?"csharp":e==="clj"||e==="cljs"||e==="cljc"?"clojure":e:null}function Un(n){if(typeof n!="string")return null;let e=n.split("#",1)[0].split("?",1)[0].toLowerCase();return/\.(ts|tsx)$/.test(e)?"ts":/\.(js|jsx|mjs|cjs)$/.test(e)?"js":/\.(cc|cpp|cxx|c\+\+|hpp|hh|hxx)$/.test(e)?"cpp":/\.(c|h)$/.test(e)?"c":/\.cs$/.test(e)?"csharp":/\.java$/.test(e)?"java":/\.(clj|cljs|cljc|edn)$/.test(e)?"clojure":/\.dart$/.test(e)?"dart":null}function th(n){let e=tx(n?.lang??n?.language);if(e)return e;let t=Un(n?.path)??Un(n?.file)??Un(n?.file_path)??Un(n?.newFile)??Un(n?.oldFile)??Un(n?.bodyEndOf)??Un(n?.bodyStartOf)??Un(n?.before)??Un(n?.after)??Un(n?.start)??Un(n?.end)??Un(n?.location?.file);return t||null}function v1(n,e){let t=tx(n.lang)??Un(n.path)??Un(n.to)??Un(n.of)??Un(n.file)??Un(n.newFile)??th(n.to)??th(n.scope)??Un(n.scope?.file)??(Array.isArray(n.scope?.files)?Un(n.scope.files[0]):null);if(t)return t;for(let r of[e.results,e.items,e.exports])if(Array.isArray(r))for(let s of r){let i=th(s);if(i)return i}return th(e)}function R1(n,e){let t=v1(n,e);return t?x1[t]??{...Ba,language:t,confidence:"heuristic"}:Ba}function k1(n,e){return e==="trace-high"?n:e==="trace-low"||e==="trace-sparse"||e==="modeled-only"?"low":n==="high"?"medium":n}function QS(n,e){let t=n.savedItems.map(s=>{let i=cI(s.estimatedLinesNotSent,e);return{...s,estimatedCharsNotSent:i,estimatedTokensNotSent:nh(i,e)}}),r=t.reduce((s,i)=>s+i.estimatedCharsNotSent,0);return{...n,confidence:k1(n.confidence,e.confidence),savedItems:t,language:e.language,calibrationConfidence:e.confidence,charsPerLine:e.charsPerLine,charsPerToken:e.charsPerToken,counterfactualTextToolChars:r,estimatedCharsNotSent:r,estimatedTokensNotSent:nh(r,e)}}function sI(n,e){return Math.max(1,Math.round(n.searchLines||e))}function Tn(n,e,t,r,s){let i=Xi(t),o=Xi(r);if(i<=0||o<=0)return null;let a=i*o,c=cI(a),l=nh(c);return{key:n,label:e,count:i,linesPerUnit:o,estimatedLinesNotSent:a,estimatedCharsNotSent:c,estimatedTokensNotSent:l,note:s}}function iI(){return{version:1,calls:0,successfulCalls:0,callsWithSavings:0,estimatedLinesNotSent:0,counterfactualTextToolChars:0,pandoActualSourceChars:0,estimatedCharsNotSent:0,estimatedTokensNotSent:0,byOperation:{},lastUpdatedAt:null}}function Cr(n,e,t,r,s,i){let o=i.filter(d=>d!==null),a=o.reduce((d,p)=>d+p.estimatedLinesNotSent,0),c=o.reduce((d,p)=>d+p.estimatedCharsNotSent,0),l=c,u=o.reduce((d,p)=>d+p.estimatedTokensNotSent,0);return{version:1,op:n,success:e,method:t,confidence:r,comparisonBaseline:S1,rationale:s,savedItems:o,estimatedLinesNotSent:a,language:null,calibrationConfidence:Ba.confidence,charsPerLine:Ba.charsPerLine,charsPerToken:Ba.charsPerToken,counterfactualTextToolChars:c,pandoActualSourceChars:0,estimatedCharsNotSent:l,estimatedTokensNotSent:u}}function YS(n,e){let t=lI(e);if(!n.success||n.counterfactualTextToolChars<=0)return{...n,pandoActualSourceChars:t};let r=Cd(n.counterfactualTextToolChars-t);return{...n,pandoActualSourceChars:t,estimatedCharsNotSent:r,estimatedTokensNotSent:nh(r,{language:n.language,charsPerLine:n.charsPerLine,charsPerToken:n.charsPerToken,searchLines:6,confidence:n.calibrationConfidence})}}function Td(n,e,t){return Cr(n,e,"none","low",t,[])}function E1(n){switch(n.key){case"candidate-node-metadata":return"declaration snippets";case"candidate-node-self":return"extra declaration context";case"candidate-node-body":return"residual declaration context";case"reference-sites":return"reference snippets";case"caller-sites":return"caller snippets";case"export-result-contexts":return"export snippets";case"import-file-summaries":case"import-module-summaries":return"import snippets";case"namespace-graph-nodes":return"namespace declaration snippets";case"namespace-graph-edges":return"namespace dependency snippets";case"namespace-plan-edits":return"planned rewrite snippets";case"namespace-plan-declaration-context":return"namespace declaration context";case"reference-edit-contexts":return"reference edit snippets";case"declaration-context":return"declaration context";case"delete-target-context":return"delete target snippets";case"delete-reference-contexts":return"reference deletion snippets";case"signature-declaration-context":return"signature declaration context";case"signature-callsite-contexts":return"call-site rewrite snippets";case"fmr-match-contexts":return"matched code snippets";case"namespace-rewrite-files":return"namespace rewrite snippets";case"namespace-declaration-context":return"namespace declaration context";case"text-file-edit-context":return"text file edit context";default:return n.label.replace(/\bthat did not need to be sent\b/gi,"").replace(/\bdid not need raw import snippets\b/gi,"").replace(/\s+/g," ").trim().replace(/[.;:]$/,"")}}function rh(n){if(!n||n.estimatedTokensNotSent<=0&&n.pandoActualSourceChars<=0)return;let e=n.savedItems.filter(i=>i.estimatedTokensNotSent>0).map(i=>({label:E1(i),count:i.count,estimatedLines:i.estimatedLinesNotSent,estimatedChars:i.estimatedCharsNotSent,estimatedTokens:i.estimatedTokensNotSent})),t=e.reduce((i,o)=>i+o.count,0),r=t===1?"snippet":"snippets",s=`; Pando returned ${n.pandoActualSourceChars} chars of source`;return{version:1,op:n.op,summary:`Would have sent about ${n.estimatedCharsNotSent} chars / ${n.estimatedTokensNotSent} tokens across ${t} ${r}${s}.`,confidence:n.confidence,language:n.language,calibrationConfidence:n.calibrationConfidence,charsPerLine:n.charsPerLine,charsPerToken:n.charsPerToken,estimatedLines:n.estimatedLinesNotSent,counterfactualTextToolChars:n.counterfactualTextToolChars,pandoActualSourceChars:n.pandoActualSourceChars,estimatedChars:n.estimatedCharsNotSent,estimatedTokens:n.estimatedTokensNotSent,wouldSend:e}}function uI(n){return Array.isArray(n.results)?n.results:Array.isArray(n.items)?n.items:Array.isArray(n.exports)?n.exports:[]}function nx(n){let e=n.details;return typeof e?.changedFileCount=="number"?Xi(e.changedFileCount):Array.isArray(e?.allChangedFiles)?e.allChangedFiles.length:Array.isArray(e?.changedFiles)?e.changedFiles.length:Xi(n.changes?.count??0)}function qa(n){return Array.isArray(n)?n.length:0}function T1(n,e){let t=uI(e),r=0,s=0,i=0;for(let o of t){if(o?.body?.content){i+=1;continue}if(o?.self?.code?.content){s+=1;continue}r+=1}return Cr(n,e.success,"mixed","medium","Structured node discovery avoids sending most candidate snippets; when self/body is requested, the saved amount is reduced rather than treated as zero.",[Tn("candidate-node-metadata","Candidate node snippets that did not need to be sent",r,4,"Metadata-only results usually avoid sending the declaration line plus minimal surrounding context for each candidate."),Tn("candidate-node-self","Additional node context avoided even when self was requested",s,2,"Including the node itself still avoids some surrounding context a smart text workflow would usually inspect."),Tn("candidate-node-body","Residual declaration context avoided when body content was requested",i,1,"Requesting body content removes most of the privacy advantage, so only a minimal declaration-context saving is counted.")])}function oI(n,e,t,r){let s=uI(e).length;return Cr(n,e.success,"exact-counts","high","Structured locations avoid sending per-location code snippets and nearby context.",[Tn(t,t==="reference-sites"?"Reference-site snippets that did not need to be sent":"Caller-site snippets that did not need to be sent",s,r,"The comparison assumes a smart text workflow would only send a minimal location snippet for each result.")])}function P1(n,e){let t=qa(e.exports);return Cr(n,e.success,"exact-counts","medium","Structured export lookup answers declaration-discovery questions without sending export snippets or nearby code.",[Tn("export-result-contexts","Export declaration snippets that did not need to be sent",t,2,"Only the returned export entries are counted, which keeps paginated list-exports calls conservative.")])}function C1(n,e){let t=e.imports,r=qa(t?.files),s=qa(t?.external),i=qa(t?.internal);return Cr(n,e.success,"exact-counts","medium","Import analysis returns grouped dependency structure without sending raw import blocks; only visible grouped entries are counted.",[Tn("import-file-summaries","Per-file import summaries that did not need raw import snippets",r,2,"When grouped by file, the estimate counts one small import-summary snippet per returned file entry."),Tn("import-module-summaries","Grouped import summaries that did not need raw import snippets",s+i,2,"When grouped by module, the estimate counts only the returned grouped entries rather than every underlying import usage.")])}function aI(n,e,t){let r=qa(e.namespaces),s=qa(e.edges);return Cr(n,e.success,"exact-counts","medium",t,[Tn("namespace-graph-nodes","Namespace declaration snippets that did not need to be sent",r,1,"Each returned namespace usually corresponds to at least one small ns-form context in a text-based workflow."),Tn("namespace-graph-edges","Namespace dependency snippets that did not need to be sent",s,2,"Each returned edge usually corresponds to one focused require/refer snippet in a text-based workflow.")])}function I1(n,e){let t=qa(e.namespaceEdits);return Cr(n,e.success,"exact-counts","medium","Namespace planning computes the affected declaration and dependent files without sending each candidate require/ns snippet to the provider.",[Tn("namespace-plan-edits","Planned namespace rewrite snippets that did not need to be sent",t,4,"The estimate counts one small rewrite-planning snippet per planned file edit."),Tn("namespace-plan-declaration-context","Namespace declaration context that only needed to be localized once",e.success?1:0,6,"The source namespace still needs one focused declaration context to build the plan.")])}function A1(n,e){let t=Xi(e.details?.referencesRenamed);return Cr(n,e.success,"exact-counts","high","Rename uses exact reference counts already produced by the executor, then applies a conservative per-reference context window.",[Tn("reference-edit-contexts","Reference edit contexts that did not need to be sent",t,3,"A smart non-pando workflow would still need to send each reference with a small amount of surrounding code before editing or approving it."),Tn("declaration-context","Declaration context that only needed to be localized once",e.success?1:0,6,"The declaration still has to be identified, but pando does not require the model to receive surrounding code for every downstream edit.")])}function N1(n,e){let t=Xi(e.details?.deletedCount),r=Array.isArray(e.details?.receipt?.appliedReferences)?e.details.receipt.appliedReferences.length:0;return Cr(n,e.success,r>0?"mixed":"heuristic",r>0?"high":"medium","Applied reference counts are exact when the executor exposes them; otherwise only the target-level deletion context is counted.",[Tn("delete-target-context","Delete target contexts that did not need to be sent",t,6,"Each delete target typically needs declaration-level context in a text-based workflow."),Tn("delete-reference-contexts","Reference deletion contexts that did not need to be sent",r,4,"When reference edits are applied automatically, pando avoids sending each reference and a small surrounding window.")])}function M1(n,e){let t=Xi(e.details?.callSiteStats?.auto_rewritten??e.changes?.callSitesAutoRewritten??0);return Cr(n,e.success,"exact-counts","high","The executor already reports how many call sites were rewritten automatically, so the privacy estimate can stay count-exact while using conservative context windows.",[Tn("signature-declaration-context","Function signature context that did not need to be sent repeatedly",e.success?1:0,6,"Only one declaration/signature context is counted for the target function."),Tn("signature-callsite-contexts","Auto-rewritten call-site contexts that did not need to be sent",t,5,"The estimate only counts call sites pando rewrote automatically; manual-review sites are not claimed as privacy savings.")])}function D1(n,e,t){let r=Xi(t.details?.receipt?.processedCount??t.details?.processedCount??t.details?.succeededCount??0),i=(Array.isArray(e.transforms)?e.transforms.length:0)>0?"filter-map-reduce localizes and rewrites matches without shipping matched code to the provider; the count is based on processed matches, not full-file size.":"filter-map-reduce localizes matches without shipping matched code to the provider.";return Cr(n,t.success,"exact-counts","high",i,[Tn("fmr-match-contexts","Matched-node contexts that did not need to be sent",r,6,"The baseline assumes a smart text workflow would still need to send a small snippet for every matched location before applying or validating a transform.")])}function ex(n,e,t,r,s){let i=nx(e);return Cr(n,e.success,"heuristic","medium",s,[Tn(`${n}-target-context`,r,i>0?1:0,t,"The estimate assumes one minimal target/anchor snippet would otherwise need to be sent for a single focused edit.")])}function F1(n,e){let t=nx(e),r=Xi(e.details?.appliedEdits??e.details?.receipt?.appliedEdits??0);return Cr(n,e.success,"heuristic","medium","Text-only edits to intentionally unindexed config/hook files avoid sending the target file or surrounding edit context to the provider; this estimate counts only a small local context window per changed file.",[Tn("text-file-edit-context","Text-file edit context that did not need to be sent",t>0?Math.max(1,r):0,8,"The baseline assumes a smart text workflow would inspect at least a focused snippet for each applied text edit, not necessarily the whole config file.")])}function O1(n,e){let t=nx(e);return Cr(n,e.success,"mixed","medium","Namespace rewrites typically require touching several import/require sites; the estimate stays conservative and file-based.",[Tn("namespace-rewrite-files","Namespace/import rewrite snippets that did not need to be sent",t,4,"A smart text workflow would usually send at least one small require/import snippet per changed file."),Tn("namespace-declaration-context","Namespace declaration context that only needed to be localized once",e.success?1:0,6,"The namespace declaration itself still needs one focused context window.")])}function dI(n,e,t){let r=!!t?.success,s=R1(e,t);if(!n)return YS(QS(Td("unknown",r,"Operation name unavailable; no privacy savings claimed."),s),t);if(!r)return YS(QS(Td(n,!1,"Operation did not succeed, so no privacy savings are claimed."),s),t);let i=(()=>{switch(n){case"find-nodes":return T1(n,t);case"find-references":return oI(n,t,"reference-sites",sI(s,6));case"find-callers":return oI(n,t,"caller-sites",sI(s,6));case"list-exports":return P1(n,t);case"analyze-imports":return C1(n,t);case"clojure-namespace-graph":return aI(n,t,"Namespace graph queries return cross-file dependency structure without sending the underlying ns/require snippets.");case"clojure-namespace-dependencies":case"clojure-namespace-dependents":return aI(n,t,"Namespace traversal returns dependency edges directly, avoiding per-edge code snippets in the provider request.");case"plan-clojure-namespace-move":case"plan-clojure-namespace-rename":return I1(n,t);case"rename":return A1(n,t);case"delete":return N1(n,t);case"change-signature":return M1(n,t);case"filter-map-reduce":return D1(n,e,t);case"replace":return ex(n,t,10,"Target replacement context that did not need to be sent","A focused replace still needs target localization in a text-based workflow; pando avoids sending that local code window.");case"replace-body":return ex(n,t,12,"Body replacement context that did not need to be sent","Body replacement typically requires a slightly larger context window than full-node replacement.");case"edit-file-text":return F1(n,t);case"insert":case"add-code":return e?.createFileIfMissing?Td(n,!0,"Insert created a new file, so no existing code context savings are claimed."):ex(n,t,8,"Insertion anchor context that did not need to be sent","A targeted insert usually needs local anchor context in a text-based workflow; pando keeps that out of the provider request.");case"rename-clojure-namespace":case"move-clojure-namespace":return O1(n,t);default:return Td(n,!0,"Administrative or metadata-only operation; privacy savings are too small or too uncertain to claim conservatively.")}})();return YS(QS(i,s),t)}function rx(n,e){if(e.length===0)return Td(n,!0,"No underlying operation estimates were available.");let t=e.every(u=>u.success),r=e.every(u=>u.method==="exact-counts")?"exact-counts":e.some(u=>u.method==="none")?"mixed":e.every(u=>u.method==="heuristic")?"heuristic":"mixed",s=e.every(u=>u.confidence==="high")?"high":e.some(u=>u.confidence==="low")?"low":"medium",i=new Map;for(let u of e)for(let d of u.savedItems){let p=i.get(d.key);if(!p){i.set(d.key,{...d});continue}p.count+=d.count,p.estimatedLinesNotSent+=d.estimatedLinesNotSent,p.estimatedCharsNotSent+=d.estimatedCharsNotSent,p.estimatedTokensNotSent+=d.estimatedTokensNotSent}let o=Cr(n,t,r,s,"Combined from per-root operation estimates in the current dispatcher session.",Array.from(i.values())),a=e.reduce((u,d)=>u+d.pandoActualSourceChars,0),c=Cd(o.counterfactualTextToolChars-a),l=e.reduce((u,d)=>u+d.estimatedTokensNotSent,0);return{...o,language:e.every(u=>u.language===e[0]?.language)?e[0]?.language??null:null,calibrationConfidence:e.every(u=>u.calibrationConfidence==="trace-high")?"trace-high":e.some(u=>u.calibrationConfidence==="modeled-only")?"modeled-only":e.some(u=>u.calibrationConfidence==="trace-low")?"trace-low":e.some(u=>u.calibrationConfidence==="trace-sparse")?"trace-sparse":"heuristic",pandoActualSourceChars:a,estimatedCharsNotSent:c,estimatedTokensNotSent:l}}var Pd=class{constructor(){this.summary=iI()}record(e,t,r){let s=dI(e,t,r),i=this.summary.byOperation[e]??{calls:0,successfulCalls:0,callsWithSavings:0,estimatedLinesNotSent:0,counterfactualTextToolChars:0,pandoActualSourceChars:0,estimatedCharsNotSent:0,estimatedTokensNotSent:0};return i.calls+=1,s.success&&(i.successfulCalls+=1),s.estimatedTokensNotSent>0&&(i.callsWithSavings+=1),i.estimatedLinesNotSent+=s.estimatedLinesNotSent,i.counterfactualTextToolChars+=s.counterfactualTextToolChars,i.pandoActualSourceChars+=s.pandoActualSourceChars,i.estimatedCharsNotSent+=s.estimatedCharsNotSent,i.estimatedTokensNotSent+=s.estimatedTokensNotSent,this.summary.byOperation[e]=i,this.summary.calls+=1,s.success&&(this.summary.successfulCalls+=1),s.estimatedTokensNotSent>0&&(this.summary.callsWithSavings+=1),this.summary.estimatedLinesNotSent+=s.estimatedLinesNotSent,this.summary.counterfactualTextToolChars+=s.counterfactualTextToolChars,this.summary.pandoActualSourceChars+=s.pandoActualSourceChars,this.summary.estimatedCharsNotSent+=s.estimatedCharsNotSent,this.summary.estimatedTokensNotSent+=s.estimatedTokensNotSent,this.summary.lastUpdatedAt=new Date().toISOString(),{operation:s,session:this.getSessionSummary()}}getSessionSummary(){let e={};for(let[t,r]of Object.entries(this.summary.byOperation))e[t]={...r};return{...this.summary,byOperation:e}}reset(){return this.summary=iI(),this.getSessionSummary()}};gt();function js(n){let e=n.details;return e?typeof e.changedFileCount=="number"?e.changedFileCount:Array.isArray(e.allChangedFiles)?e.allChangedFiles.length:Array.isArray(e.changedFiles)?e.changedFiles.length:n.changes?.count??0:n.changes?.count??0}function sh(n){return n.page?.totalCount??n.totalCount??(Array.isArray(n.results)?n.results.length:0)}var $1={rename:n=>({primary:js(n),secondary:n.details?.referencesRenamed??0}),delete:n=>({primary:js(n),secondary:n.details?.deletedCount??0}),insert:n=>({primary:js(n),secondary:n.created?1:0}),replace:n=>({primary:js(n),secondary:0}),"replace-body":n=>({primary:js(n),secondary:0}),"change-signature":n=>({primary:js(n),secondary:n.changes?.callSitesAutoRewritten??0}),"filter-map-reduce":n=>({primary:js(n),secondary:0}),"find-references":n=>({primary:sh(n),secondary:0}),"find-callers":n=>({primary:sh(n),secondary:0}),"find-nodes":n=>({primary:sh(n),secondary:0}),"workspace-overview":()=>({primary:0,secondary:0}),"list-exports":n=>({primary:n.page?.totalCount??(Array.isArray(n.exports)?n.exports.length:0),secondary:0}),"analyze-imports":n=>{let e=n.page;return{primary:e?.files?.totalCount??(e?.external?.totalCount??0)+(e?.internal?.totalCount??0),secondary:0}},"clojure-namespace-graph":n=>({primary:n.details?.namespaceCount??0,secondary:n.details?.edgeCount??0}),"clojure-namespace-dependencies":n=>({primary:n.namespacesPage?.totalCount??(Array.isArray(n.namespaces)?n.namespaces.length:0),secondary:n.edgesPage?.totalCount??(Array.isArray(n.edges)?n.edges.length:0)}),"clojure-namespace-dependents":n=>({primary:n.namespacesPage?.totalCount??(Array.isArray(n.namespaces)?n.namespaces.length:0),secondary:n.edgesPage?.totalCount??(Array.isArray(n.edges)?n.edges.length:0)}),"move-clojure-namespace":n=>({primary:js(n),secondary:0}),"rename-clojure-namespace":n=>({primary:js(n),secondary:0}),"snapshot-worktree":()=>({primary:0,secondary:0}),"restore-snapshot":n=>({primary:js(n),secondary:0}),"restore-files":n=>({primary:js(n),secondary:0})},j1=n=>({primary:js(n),secondary:sh(n)});function L1(n,e){let t=$1[n]??j1;try{return t(e)}catch{return{primary:0,secondary:0}}}var z1=0;function sx(){return`${Date.now()}-${++z1}`}function pI(n,e,t,r){let s=L1(n,e);return{schema_version:1,call_id:r,op:n,success:e.success,duration_ms:Math.max(0,Math.round(t)),error_code:e.error_code??void 0,primary_count:s.primary,secondary_count:s.secondary,timestamp:new Date().toISOString()}}var fI="_privacyOperation";function hI(n){let e=n.trim();if(!e)return null;let t=e;return(e.startsWith("pando_")||e.startsWith("pando-"))&&(t=e.slice(6)),t?t.replace(/_/g,"-"):null}function gI(n,e){let t={...e};return delete t.root,t}var Yc=class{constructor(e){this.config=e;this.privacyCounter=new Pd}async dispatch(e,t,r){let s=Date.now();X("PandoOp","op begin",{tool:e});let i;try{i=await this.dispatchInner(e,t,r)}catch(o){let a=o instanceof Error?o.message:String(o);throw X("PandoOp","op threw",{tool:e,error:a,elapsedMs:Date.now()-s}),o}return X("PandoOp","op end",{tool:e,success:i.success,...i.success?{}:{error:i.error},elapsedMs:Date.now()-s}),i}async dispatchInner(e,t,r){let s=hI(e);if(!s)return{success:!1,error:`Unknown tool: ${e}`};if(s==="set-project-root"){let p=typeof t.root=="string"?t.root.trim():"";if(!p)return{success:!1,error:"Missing required parameter: root"};if(B1(p))return{success:!1,error:"Filesystem root '/' cannot be used as a project root."};let f=Date.now();X("PandoToolDispatcher","set-project-root begin",{toolName:e,requestedRoot:p});let m;try{m=await this.config.onProjectRootAdded?.(p)}catch(h){let g=h instanceof Error?h.message:String(h);return X("PandoToolDispatcher","set-project-root rejected",{toolName:e,requestedRoot:p,error:g,elapsedMs:Date.now()-f}),{success:!1,error:g}}return m?(X("PandoToolDispatcher","set-project-root complete",{toolName:e,requestedRoot:p,resolvedRoot:m,elapsedMs:Date.now()-f}),{success:!0,data:this.attachPrivacyToData("set-project-root",t,{projectRoot:m},{success:!0})}):(X("PandoToolDispatcher","set-project-root failed",{toolName:e,requestedRoot:p,elapsedMs:Date.now()-f}),{success:!1,error:`Unable to add project root: ${p}`})}let i=this.resolveToolRoots(t);if(!i.roots.length&&i.error)return{success:!1,error:i.error,data:i.availableRoots?{availableRoots:i.availableRoots}:void 0};let o=i.roots;if(s==="get-project-root")return o.length<=1?{success:!0,data:this.attachPrivacyToData("get-project-root",t,{projectRoot:o[0]??null},{success:!0})}:{success:!0,data:this.attachPrivacyToData("get-project-root",t,{projectRoots:o},{success:!0})};if(!o.length)return{success:!1,error:"No workspace root available."};if(s==="read-this-first")return{success:!0,data:this.attachPrivacyToData("read-this-first",t,{help:this.config.loadReadThisFirstMessage()},{success:!0})};let a=gI(s,t),c={op:s,...a},l=sx(),u=r?.telemetry;if(this.isReadOnlyTool(e,s))return this.dispatchReadOnly(o,c,r?.signal,l,u);if(o.length>1){let p=[];for(let m of o)p.push(await this.executeOne(m,c,r?.signal,l,u));await this.handlePostDispatchEffects(s,p);let f=this.buildAggregatePrivacy(s,p);return{success:!0,data:{perRoot:p,...f?{privacy:f}:{}}}}let d=await this.executeOne(o[0],c,r?.signal,l,u);if(!d.success){let p=d.error??"Operation failed",f=Array.isArray(d.result?.hints)?d.result.hints:void 0;return{success:!1,error:p,...f?{hints:f}:{},data:d.result??{success:!1,error:p}}}return await this.handlePostDispatchEffects(s,[d]),{success:!0,data:d.result}}getPrivacySummary(){return this.privacyCounter.getSessionSummary()}resetPrivacySummary(){return this.privacyCounter.reset()}resolveToolRoots(e){if(this.config.resolveRoots)return this.config.resolveRoots(e);let t=this.config.roots(),r=typeof e.root=="string"?e.root.trim():"";if(!r)return{roots:t};let s=tn(Id.default.isAbsolute(r)?r:Id.default.resolve(t[0]??process.cwd(),r)),i=t.map(o=>tn(o));return i.includes(s)?{roots:[s]}:{roots:[],error:`Requested root is not registered: ${r}`,availableRoots:i}}async dispatchReadOnly(e,t,r,s,i){if(e.length===1){let d=await this.executeOne(e[0],t,r,s,i);if(!d.success){let p=d.error??"Operation failed",f=Array.isArray(d.result?.hints)?d.result.hints:void 0;return{success:!1,error:p,...f?{hints:f}:{},data:d.result??{success:!1,error:p}}}return{success:!0,data:d.result}}let o=[],a=[],c=0,l=!1;for(let d of e){let p=await this.executeOne(d,t,r,s,i);if(o.push(p),!p.success||!p.result)continue;let f=Array.isArray(p.result.items)?p.result.items:Array.isArray(p.result.results)?p.result.results:null;if(!f)continue;for(let g of f)a.push({...g,root:d});let m=p.result.page,h=typeof m?.totalCount=="number"?m.totalCount:typeof p.result.totalCount=="number"?p.result.totalCount:f.length;c+=h,l=l||!!m?.hasMore||!!p.result.hasMore}let u=this.buildAggregatePrivacy(String(t.op||"unknown"),o);return{success:!0,data:{summary:H1(o,a.length?{shownCount:a.length,totalCount:c,hasMore:l}:void 0),results:a.length?a:void 0,totalCount:a.length?c:void 0,hasMore:a.length?l:void 0,perRoot:o,...u?{privacy:u}:{}}}}async executeOne(e,t,r,s,i){let o=typeof t.op=="string"?t.op:"unknown",a=Date.now();try{let l=await kn.getEngine(e).execute(t,{signal:r}),u=this.attachPrivacyToResult(o,t,l);if(await this.emitTelemetry(o,l,Date.now()-a,e,s,i),!l.success){let d=mI(l.error||"Operation failed");return{root:e,success:!1,error:d,result:{...u,error:d}}}return{root:e,success:!0,result:u}}catch(c){let l={success:!1,error:c instanceof Error?c.message:String(c)},u=this.attachPrivacyToResult(o,t,l);await this.emitTelemetry(o,l,Date.now()-a,e,s,i);let d=mI(c instanceof Error?c.message:String(c));return{root:e,success:!1,error:d,result:{...u,error:d}}}}async emitTelemetry(e,t,r,s,i,o){try{let a=this.config.onTelemetry?.(pI(e,t,r,i??sx()),s,o);if(!a)return;let c=Promise.resolve(a);if(!this.config.awaitTelemetry){c.catch(()=>{});return}await q1(c,this.config.telemetryTimeoutMs??1e3)}catch{}}async handlePostDispatchEffects(e,t){if(e==="set-enabled-languages")for(let r of t)r.success&&r.result?.details?.languageSupportChanged===!0&&await this.config.onLanguageSupportChanged?.(r.root)}isReadOnlyTool(e,t){let r=t.replace(/-/g,"_");return this.config.readOnlyTools.has(e)||this.config.readOnlyTools.has(t)||this.config.readOnlyTools.has(r)||this.config.readOnlyTools.has(`pando_${r}`)||this.config.readOnlyTools.has(`pando-${t}`)}attachPrivacyToResult(e,t,r){let s=this.privacyCounter.record(e,t,r),i=rh(s.operation),o={...r,...i?{privacy:i}:{}};return Object.defineProperty(o,fI,{value:s.operation,enumerable:!1,configurable:!0,writable:!1}),o}attachPrivacyToData(e,t,r,s){let i=rh(this.privacyCounter.record(e,t,s).operation);return{...r,...i?{privacy:i}:{}}}buildAggregatePrivacy(e,t){let r=t.map(s=>s.result?.[fI]).filter(s=>!!s);return rh(rx(e,r))}};function B1(n){let e=Id.default.resolve(n);return Id.default.parse(e).root===e}function mI(n){return n.length<=1e3?n:`${n.slice(0,1e3)}\u2026 [truncated]`}function q1(n,e){let t=Math.max(0,Math.trunc(e));return t===0?n:Promise.race([n,new Promise(r=>{setTimeout(r,t)})])}function H1(n,e){let t=n.length,r=n.filter(o=>o.success).length,s=t-r,i=n.map(o=>o.error??(typeof o.result?.error=="string"?o.result.error:void 0)).find(o=>typeof o=="string"&&o.trim().length>0);return{rootsTotal:t,rootsSucceeded:r,rootsFailed:s,shownCount:e?.shownCount,totalCount:e?.totalCount,hasMore:e?.hasMore,error:i}}var yI=q(require("fs")),W1=["set-project-root","set-enabled-languages","workspace-overview","get-db-schema","query-db","find-nodes","find-references","rename","replace","edit-file-text","insert","delete","filter-map-reduce","shell-command"];function el(n,e){let t=yI.default.readFileSync(n,"utf8"),r=JSON.parse(t),s=Array.isArray(r.tools)?r.tools:[],i=new Map(W1.map((o,a)=>[o,a]));return s.filter(o=>typeof o?.name=="string").filter(o=>o.category!=="orchestrator").filter(o=>!(e?.excludeNames?.has(o.name)??!1)).sort((o,a)=>{let c=i.get(o.name),l=i.get(a.name);return c!=null&&l!=null?c-l:c!=null?-1:l!=null?1:o.name.localeCompare(a.name)})}function ix(n){let e=n.parameters&&n.parameters.type==="object"?{...n.parameters,type:"object",properties:U1(n.parameters.properties)}:{type:"object",properties:{},required:[],additionalProperties:!1};return{name:n.name,description:n.description,inputSchema:e}}function ih(n,e){return n.find(r=>r.name===e)?.description??""}function U1(n){if(!n)return;let e={};for(let[t,r]of Object.entries(n))r&&typeof r=="object"&&(e[t]=r);return e}var Rt;(function(n){n.assertEqual=s=>{};function e(s){}n.assertIs=e;function t(s){throw new Error}n.assertNever=t,n.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},n.getValidEnumValues=s=>{let i=n.objectKeys(s).filter(a=>typeof s[s[a]]!="number"),o={};for(let a of i)o[a]=s[a];return n.objectValues(o)},n.objectValues=s=>n.objectKeys(s).map(function(i){return s[i]}),n.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let i=[];for(let o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.push(o);return i},n.find=(s,i)=>{for(let o of s)if(i(o))return o},n.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}n.joinValues=r,n.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i})(Rt||(Rt={}));var bI;(function(n){n.mergeShapes=(e,t)=>({...e,...t})})(bI||(bI={}));var Te=Rt.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Qi=n=>{switch(typeof n){case"undefined":return Te.undefined;case"string":return Te.string;case"number":return Number.isNaN(n)?Te.nan:Te.number;case"boolean":return Te.boolean;case"function":return Te.function;case"bigint":return Te.bigint;case"symbol":return Te.symbol;case"object":return Array.isArray(n)?Te.array:n===null?Te.null:n.then&&typeof n.then=="function"&&n.catch&&typeof n.catch=="function"?Te.promise:typeof Map<"u"&&n instanceof Map?Te.map:typeof Set<"u"&&n instanceof Set?Te.set:typeof Date<"u"&&n instanceof Date?Te.date:Te.object;default:return Te.unknown}};var ce=Rt.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);var fs=class n extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(i){return i.message},r={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)r._errors.push(t(o));else{let a=r,c=0;for(;c<o.path.length;){let l=o.path[c];c===o.path.length-1?(a[l]=a[l]||{_errors:[]},a[l]._errors.push(t(o))):a[l]=a[l]||{_errors:[]},a=a[l],c++}}};return s(this),r}static assert(e){if(!(e instanceof n))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,Rt.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){let t={},r=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];t[i]=t[i]||[],t[i].push(e(s))}else r.push(e(s));return{formErrors:r,fieldErrors:t}}get formErrors(){return this.flatten()}};fs.create=n=>new fs(n);var K1=(n,e)=>{let t;switch(n.code){case ce.invalid_type:n.received===Te.undefined?t="Required":t=`Expected ${n.expected}, received ${n.received}`;break;case ce.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(n.expected,Rt.jsonStringifyReplacer)}`;break;case ce.unrecognized_keys:t=`Unrecognized key(s) in object: ${Rt.joinValues(n.keys,", ")}`;break;case ce.invalid_union:t="Invalid input";break;case ce.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${Rt.joinValues(n.options)}`;break;case ce.invalid_enum_value:t=`Invalid enum value. Expected ${Rt.joinValues(n.options)}, received '${n.received}'`;break;case ce.invalid_arguments:t="Invalid function arguments";break;case ce.invalid_return_type:t="Invalid function return type";break;case ce.invalid_date:t="Invalid date";break;case ce.invalid_string:typeof n.validation=="object"?"includes"in n.validation?(t=`Invalid input: must include "${n.validation.includes}"`,typeof n.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${n.validation.position}`)):"startsWith"in n.validation?t=`Invalid input: must start with "${n.validation.startsWith}"`:"endsWith"in n.validation?t=`Invalid input: must end with "${n.validation.endsWith}"`:Rt.assertNever(n.validation):n.validation!=="regex"?t=`Invalid ${n.validation}`:t="Invalid";break;case ce.too_small:n.type==="array"?t=`Array must contain ${n.exact?"exactly":n.inclusive?"at least":"more than"} ${n.minimum} element(s)`:n.type==="string"?t=`String must contain ${n.exact?"exactly":n.inclusive?"at least":"over"} ${n.minimum} character(s)`:n.type==="number"?t=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`:n.type==="bigint"?t=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`:n.type==="date"?t=`Date must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(n.minimum))}`:t="Invalid input";break;case ce.too_big:n.type==="array"?t=`Array must contain ${n.exact?"exactly":n.inclusive?"at most":"less than"} ${n.maximum} element(s)`:n.type==="string"?t=`String must contain ${n.exact?"exactly":n.inclusive?"at most":"under"} ${n.maximum} character(s)`:n.type==="number"?t=`Number must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`:n.type==="bigint"?t=`BigInt must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`:n.type==="date"?t=`Date must be ${n.exact?"exactly":n.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(n.maximum))}`:t="Invalid input";break;case ce.custom:t="Invalid input";break;case ce.invalid_intersection_types:t="Intersection results could not be merged";break;case ce.not_multiple_of:t=`Number must be a multiple of ${n.multipleOf}`;break;case ce.not_finite:t="Number must be finite";break;default:t=e.defaultError,Rt.assertNever(n)}return{message:t}},Po=K1;var Z1=Po;function Ad(){return Z1}var oh=n=>{let{data:e,path:t,errorMaps:r,issueData:s}=n,i=[...t,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return{...s,path:i,message:s.message};let a="",c=r.filter(l=>!!l).slice().reverse();for(let l of c)a=l(o,{data:e,defaultError:a}).message;return{...s,path:i,message:a}};function Re(n,e){let t=Ad(),r=oh({issueData:e,data:n.data,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,t,t===Po?void 0:Po].filter(s=>!!s)});n.common.issues.push(r)}var gr=class n{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){let r=[];for(let s of t){if(s.status==="aborted")return tt;s.status==="dirty"&&e.dirty(),r.push(s.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,t){let r=[];for(let s of t){let i=await s.key,o=await s.value;r.push({key:i,value:o})}return n.mergeObjectSync(e,r)}static mergeObjectSync(e,t){let r={};for(let s of t){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return tt;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(r[i.value]=o.value)}return{status:e.value,value:r}}},tt=Object.freeze({status:"aborted"}),tl=n=>({status:"dirty",value:n}),Ir=n=>({status:"valid",value:n}),ox=n=>n.status==="aborted",ax=n=>n.status==="dirty",Ha=n=>n.status==="valid",Nd=n=>typeof Promise<"u"&&n instanceof Promise;var Oe;(function(n){n.errToObj=e=>typeof e=="string"?{message:e}:e||{},n.toString=e=>typeof e=="string"?e:e?.message})(Oe||(Oe={}));var Ls=class{constructor(e,t,r,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=r,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},SI=(n,e)=>{if(Ha(e))return{success:!0,data:e.value};if(!n.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new fs(n.common.issues);return this._error=t,this._error}}};function pt(n){if(!n)return{};let{errorMap:e,invalid_type_error:t,required_error:r,description:s}=n;if(e&&(t||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:c}=n;return o.code==="invalid_enum_value"?{message:c??a.defaultError}:typeof a.data>"u"?{message:c??r??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:c??t??a.defaultError}},description:s}}var St=class{get description(){return this._def.description}_getType(e){return Qi(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:Qi(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new gr,ctx:{common:e.parent.common,data:e.data,parsedType:Qi(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(Nd(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let r=this.safeParse(e,t);if(r.success)return r.data;throw r.error}safeParse(e,t){let r={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qi(e)},s=this._parseSync({data:e,path:r.path,parent:r});return SI(r,s)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qi(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:t});return Ha(r)?{value:r.value}:{issues:t.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(r=>Ha(r)?{value:r.value}:{issues:t.common.issues})}async parseAsync(e,t){let r=await this.safeParseAsync(e,t);if(r.success)return r.data;throw r.error}async safeParseAsync(e,t){let r={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qi(e)},s=this._parse({data:e,path:r.path,parent:r}),i=await(Nd(s)?s:Promise.resolve(s));return SI(r,i)}refine(e,t){let r=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:ce.custom,...r(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?!0:(a(),!1)):o?!0:(a(),!1)})}refinement(e,t){return this._refinement((r,s)=>e(r)?!0:(s.addIssue(typeof t=="function"?t(r,s):t),!1))}_refinement(e){return new oi({schema:this,typeName:ue.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return ms.create(this,this._def)}nullable(){return to.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Io.create(this)}promise(){return Wa.create(this,this._def)}or(e){return ol.create([this,e],this._def)}and(e){return al.create(this,e,this._def)}transform(e){return new oi({...pt(this._def),schema:this,typeName:ue.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new pl({...pt(this._def),innerType:this,defaultValue:t,typeName:ue.ZodDefault})}brand(){return new ah({typeName:ue.ZodBranded,type:this,...pt(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new fl({...pt(this._def),innerType:this,catchValue:t,typeName:ue.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return ch.create(this,e)}readonly(){return ml.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},G1=/^c[^\s-]{8,}$/i,J1=/^[0-9a-z]+$/,V1=/^[0-9A-HJKMNP-TV-Z]{26}$/i,X1=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Q1=/^[a-z0-9_-]{21}$/i,Y1=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,eq=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,tq=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,nq="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",cx,rq=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,sq=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,iq=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,oq=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,aq=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,cq=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,xI="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",lq=new RegExp(`^${xI}$`);function _I(n){let e="[0-5]\\d";n.precision?e=`${e}\\.\\d{${n.precision}}`:n.precision==null&&(e=`${e}(\\.\\d+)?`);let t=n.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function uq(n){return new RegExp(`^${_I(n)}$`)}function dq(n){let e=`${xI}T${_I(n)}`,t=[];return t.push(n.local?"Z?":"Z"),n.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function pq(n,e){return!!((e==="v4"||!e)&&rq.test(n)||(e==="v6"||!e)&&iq.test(n))}function fq(n,e){if(!Y1.test(n))return!1;try{let[t]=n.split(".");if(!t)return!1;let r=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(r));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return!1}}function mq(n,e){return!!((e==="v4"||!e)&&sq.test(n)||(e==="v6"||!e)&&oq.test(n))}var rl=class n extends St{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==Te.string){let i=this._getOrReturnCtx(e);return Re(i,{code:ce.invalid_type,expected:Te.string,received:i.parsedType}),tt}let r=new gr,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,a=e.data.length<i.value;(o||a)&&(s=this._getOrReturnCtx(e,s),o?Re(s,{code:ce.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&Re(s,{code:ce.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),r.dirty())}else if(i.kind==="email")tq.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"email",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")cx||(cx=new RegExp(nq,"u")),cx.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"emoji",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")X1.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"uuid",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")Q1.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"nanoid",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")G1.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"cuid",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")J1.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"cuid2",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")V1.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"ulid",code:ce.invalid_string,message:i.message}),r.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),Re(s,{validation:"url",code:ce.invalid_string,message:i.message}),r.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"regex",code:ce.invalid_string,message:i.message}),r.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),r.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.invalid_string,validation:{startsWith:i.value},message:i.message}),r.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?dq(i).test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?lq.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?uq(i).test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?eq.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"duration",code:ce.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?pq(e.data,i.version)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"ip",code:ce.invalid_string,message:i.message}),r.dirty()):i.kind==="jwt"?fq(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"jwt",code:ce.invalid_string,message:i.message}),r.dirty()):i.kind==="cidr"?mq(e.data,i.version)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"cidr",code:ce.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?aq.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"base64",code:ce.invalid_string,message:i.message}),r.dirty()):i.kind==="base64url"?cq.test(e.data)||(s=this._getOrReturnCtx(e,s),Re(s,{validation:"base64url",code:ce.invalid_string,message:i.message}),r.dirty()):Rt.assertNever(i);return{status:r.value,value:e.data}}_regex(e,t,r){return this.refinement(s=>e.test(s),{validation:t,code:ce.invalid_string,...Oe.errToObj(r)})}_addCheck(e){return new n({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...Oe.errToObj(e)})}url(e){return this._addCheck({kind:"url",...Oe.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...Oe.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...Oe.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...Oe.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...Oe.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...Oe.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...Oe.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...Oe.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...Oe.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...Oe.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...Oe.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...Oe.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...Oe.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...Oe.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...Oe.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...Oe.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...Oe.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...Oe.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...Oe.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...Oe.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...Oe.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...Oe.errToObj(t)})}nonempty(e){return this.min(1,Oe.errToObj(e))}trim(){return new n({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new n({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new n({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};rl.create=n=>new rl({checks:[],typeName:ue.ZodString,coerce:n?.coerce??!1,...pt(n)});function hq(n,e){let t=(n.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=t>r?t:r,i=Number.parseInt(n.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}var Md=class n extends St{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==Te.number){let i=this._getOrReturnCtx(e);return Re(i,{code:ce.invalid_type,expected:Te.number,received:i.parsedType}),tt}let r,s=new gr;for(let i of this._def.checks)i.kind==="int"?Rt.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),s.dirty()):i.kind==="multipleOf"?hq(e.data,i.value)!==0&&(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.not_finite,message:i.message}),s.dirty()):Rt.assertNever(i);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,Oe.toString(t))}gt(e,t){return this.setLimit("min",e,!1,Oe.toString(t))}lte(e,t){return this.setLimit("max",e,!0,Oe.toString(t))}lt(e,t){return this.setLimit("max",e,!1,Oe.toString(t))}setLimit(e,t,r,s){return new n({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:Oe.toString(s)}]})}_addCheck(e){return new n({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:Oe.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:Oe.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:Oe.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:Oe.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:Oe.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:Oe.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:Oe.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:Oe.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:Oe.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&Rt.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(t===null||r.value>t)&&(t=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(t)&&Number.isFinite(e)}};Md.create=n=>new Md({checks:[],typeName:ue.ZodNumber,coerce:n?.coerce||!1,...pt(n)});var Dd=class n extends St{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==Te.bigint)return this._getInvalidInput(e);let r,s=new gr;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),Re(r,{code:ce.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):Rt.assertNever(i);return{status:s.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return Re(t,{code:ce.invalid_type,expected:Te.bigint,received:t.parsedType}),tt}gte(e,t){return this.setLimit("min",e,!0,Oe.toString(t))}gt(e,t){return this.setLimit("min",e,!1,Oe.toString(t))}lte(e,t){return this.setLimit("max",e,!0,Oe.toString(t))}lt(e,t){return this.setLimit("max",e,!1,Oe.toString(t))}setLimit(e,t,r,s){return new n({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:Oe.toString(s)}]})}_addCheck(e){return new n({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:Oe.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:Oe.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:Oe.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:Oe.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:Oe.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};Dd.create=n=>new Dd({checks:[],typeName:ue.ZodBigInt,coerce:n?.coerce??!1,...pt(n)});var Fd=class extends St{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==Te.boolean){let r=this._getOrReturnCtx(e);return Re(r,{code:ce.invalid_type,expected:Te.boolean,received:r.parsedType}),tt}return Ir(e.data)}};Fd.create=n=>new Fd({typeName:ue.ZodBoolean,coerce:n?.coerce||!1,...pt(n)});var Od=class n extends St{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==Te.date){let i=this._getOrReturnCtx(e);return Re(i,{code:ce.invalid_type,expected:Te.date,received:i.parsedType}),tt}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return Re(i,{code:ce.invalid_date}),tt}let r=new gr,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),Re(s,{code:ce.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):Rt.assertNever(i);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new n({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:Oe.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:Oe.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}};Od.create=n=>new Od({checks:[],coerce:n?.coerce||!1,typeName:ue.ZodDate,...pt(n)});var $d=class extends St{_parse(e){if(this._getType(e)!==Te.symbol){let r=this._getOrReturnCtx(e);return Re(r,{code:ce.invalid_type,expected:Te.symbol,received:r.parsedType}),tt}return Ir(e.data)}};$d.create=n=>new $d({typeName:ue.ZodSymbol,...pt(n)});var sl=class extends St{_parse(e){if(this._getType(e)!==Te.undefined){let r=this._getOrReturnCtx(e);return Re(r,{code:ce.invalid_type,expected:Te.undefined,received:r.parsedType}),tt}return Ir(e.data)}};sl.create=n=>new sl({typeName:ue.ZodUndefined,...pt(n)});var il=class extends St{_parse(e){if(this._getType(e)!==Te.null){let r=this._getOrReturnCtx(e);return Re(r,{code:ce.invalid_type,expected:Te.null,received:r.parsedType}),tt}return Ir(e.data)}};il.create=n=>new il({typeName:ue.ZodNull,...pt(n)});var jd=class extends St{constructor(){super(...arguments),this._any=!0}_parse(e){return Ir(e.data)}};jd.create=n=>new jd({typeName:ue.ZodAny,...pt(n)});var Co=class extends St{constructor(){super(...arguments),this._unknown=!0}_parse(e){return Ir(e.data)}};Co.create=n=>new Co({typeName:ue.ZodUnknown,...pt(n)});var Pi=class extends St{_parse(e){let t=this._getOrReturnCtx(e);return Re(t,{code:ce.invalid_type,expected:Te.never,received:t.parsedType}),tt}};Pi.create=n=>new Pi({typeName:ue.ZodNever,...pt(n)});var Ld=class extends St{_parse(e){if(this._getType(e)!==Te.undefined){let r=this._getOrReturnCtx(e);return Re(r,{code:ce.invalid_type,expected:Te.void,received:r.parsedType}),tt}return Ir(e.data)}};Ld.create=n=>new Ld({typeName:ue.ZodVoid,...pt(n)});var Io=class n extends St{_parse(e){let{ctx:t,status:r}=this._processInputParams(e),s=this._def;if(t.parsedType!==Te.array)return Re(t,{code:ce.invalid_type,expected:Te.array,received:t.parsedType}),tt;if(s.exactLength!==null){let o=t.data.length>s.exactLength.value,a=t.data.length<s.exactLength.value;(o||a)&&(Re(t,{code:o?ce.too_big:ce.too_small,minimum:a?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:s.exactLength.message}),r.dirty())}if(s.minLength!==null&&t.data.length<s.minLength.value&&(Re(t,{code:ce.too_small,minimum:s.minLength.value,type:"array",inclusive:!0,exact:!1,message:s.minLength.message}),r.dirty()),s.maxLength!==null&&t.data.length>s.maxLength.value&&(Re(t,{code:ce.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),r.dirty()),t.common.async)return Promise.all([...t.data].map((o,a)=>s.type._parseAsync(new Ls(t,o,t.path,a)))).then(o=>gr.mergeArray(r,o));let i=[...t.data].map((o,a)=>s.type._parseSync(new Ls(t,o,t.path,a)));return gr.mergeArray(r,i)}get element(){return this._def.type}min(e,t){return new n({...this._def,minLength:{value:e,message:Oe.toString(t)}})}max(e,t){return new n({...this._def,maxLength:{value:e,message:Oe.toString(t)}})}length(e,t){return new n({...this._def,exactLength:{value:e,message:Oe.toString(t)}})}nonempty(e){return this.min(1,e)}};Io.create=(n,e)=>new Io({type:n,minLength:null,maxLength:null,exactLength:null,typeName:ue.ZodArray,...pt(e)});function nl(n){if(n instanceof hs){let e={};for(let t in n.shape){let r=n.shape[t];e[t]=ms.create(nl(r))}return new hs({...n._def,shape:()=>e})}else return n instanceof Io?new Io({...n._def,type:nl(n.element)}):n instanceof ms?ms.create(nl(n.unwrap())):n instanceof to?to.create(nl(n.unwrap())):n instanceof eo?eo.create(n.items.map(e=>nl(e))):n}var hs=class n extends St{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=Rt.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==Te.object){let l=this._getOrReturnCtx(e);return Re(l,{code:ce.invalid_type,expected:Te.object,received:l.parsedType}),tt}let{status:r,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof Pi&&this._def.unknownKeys==="strip"))for(let l in s.data)o.includes(l)||a.push(l);let c=[];for(let l of o){let u=i[l],d=s.data[l];c.push({key:{status:"valid",value:l},value:u._parse(new Ls(s,d,s.path,l)),alwaysSet:l in s.data})}if(this._def.catchall instanceof Pi){let l=this._def.unknownKeys;if(l==="passthrough")for(let u of a)c.push({key:{status:"valid",value:u},value:{status:"valid",value:s.data[u]}});else if(l==="strict")a.length>0&&(Re(s,{code:ce.unrecognized_keys,keys:a}),r.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let l=this._def.catchall;for(let u of a){let d=s.data[u];c.push({key:{status:"valid",value:u},value:l._parse(new Ls(s,d,s.path,u)),alwaysSet:u in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let l=[];for(let u of c){let d=await u.key,p=await u.value;l.push({key:d,value:p,alwaysSet:u.alwaysSet})}return l}).then(l=>gr.mergeObjectSync(r,l)):gr.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return Oe.errToObj,new n({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,r)=>{let s=this._def.errorMap?.(t,r).message??r.defaultError;return t.code==="unrecognized_keys"?{message:Oe.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new n({...this._def,unknownKeys:"strip"})}passthrough(){return new n({...this._def,unknownKeys:"passthrough"})}extend(e){return new n({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new n({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:ue.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new n({...this._def,catchall:e})}pick(e){let t={};for(let r of Rt.objectKeys(e))e[r]&&this.shape[r]&&(t[r]=this.shape[r]);return new n({...this._def,shape:()=>t})}omit(e){let t={};for(let r of Rt.objectKeys(this.shape))e[r]||(t[r]=this.shape[r]);return new n({...this._def,shape:()=>t})}deepPartial(){return nl(this)}partial(e){let t={};for(let r of Rt.objectKeys(this.shape)){let s=this.shape[r];e&&!e[r]?t[r]=s:t[r]=s.optional()}return new n({...this._def,shape:()=>t})}required(e){let t={};for(let r of Rt.objectKeys(this.shape))if(e&&!e[r])t[r]=this.shape[r];else{let i=this.shape[r];for(;i instanceof ms;)i=i._def.innerType;t[r]=i}return new n({...this._def,shape:()=>t})}keyof(){return wI(Rt.objectKeys(this.shape))}};hs.create=(n,e)=>new hs({shape:()=>n,unknownKeys:"strip",catchall:Pi.create(),typeName:ue.ZodObject,...pt(e)});hs.strictCreate=(n,e)=>new hs({shape:()=>n,unknownKeys:"strict",catchall:Pi.create(),typeName:ue.ZodObject,...pt(e)});hs.lazycreate=(n,e)=>new hs({shape:n,unknownKeys:"strip",catchall:Pi.create(),typeName:ue.ZodObject,...pt(e)});var ol=class extends St{_parse(e){let{ctx:t}=this._processInputParams(e),r=this._def.options;function s(i){for(let a of i)if(a.result.status==="valid")return a.result;for(let a of i)if(a.result.status==="dirty")return t.common.issues.push(...a.ctx.common.issues),a.result;let o=i.map(a=>new fs(a.ctx.common.issues));return Re(t,{code:ce.invalid_union,unionErrors:o}),tt}if(t.common.async)return Promise.all(r.map(async i=>{let o={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let c of r){let l={...t,common:{...t.common,issues:[]},parent:null},u=c._parseSync({data:t.data,path:t.path,parent:l});if(u.status==="valid")return u;u.status==="dirty"&&!i&&(i={result:u,ctx:l}),l.common.issues.length&&o.push(l.common.issues)}if(i)return t.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(c=>new fs(c));return Re(t,{code:ce.invalid_union,unionErrors:a}),tt}}get options(){return this._def.options}};ol.create=(n,e)=>new ol({options:n,typeName:ue.ZodUnion,...pt(e)});var Yi=n=>n instanceof cl?Yi(n.schema):n instanceof oi?Yi(n.innerType()):n instanceof ll?[n.value]:n instanceof ul?n.options:n instanceof dl?Rt.objectValues(n.enum):n instanceof pl?Yi(n._def.innerType):n instanceof sl?[void 0]:n instanceof il?[null]:n instanceof ms?[void 0,...Yi(n.unwrap())]:n instanceof to?[null,...Yi(n.unwrap())]:n instanceof ah||n instanceof ml?Yi(n.unwrap()):n instanceof fl?Yi(n._def.innerType):[],lx=class n extends St{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==Te.object)return Re(t,{code:ce.invalid_type,expected:Te.object,received:t.parsedType}),tt;let r=this.discriminator,s=t.data[r],i=this.optionsMap.get(s);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(Re(t,{code:ce.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),tt)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,r){let s=new Map;for(let i of t){let o=Yi(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i)}}return new n({typeName:ue.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...pt(r)})}};function ux(n,e){let t=Qi(n),r=Qi(e);if(n===e)return{valid:!0,data:n};if(t===Te.object&&r===Te.object){let s=Rt.objectKeys(e),i=Rt.objectKeys(n).filter(a=>s.indexOf(a)!==-1),o={...n,...e};for(let a of i){let c=ux(n[a],e[a]);if(!c.valid)return{valid:!1};o[a]=c.data}return{valid:!0,data:o}}else if(t===Te.array&&r===Te.array){if(n.length!==e.length)return{valid:!1};let s=[];for(let i=0;i<n.length;i++){let o=n[i],a=e[i],c=ux(o,a);if(!c.valid)return{valid:!1};s.push(c.data)}return{valid:!0,data:s}}else return t===Te.date&&r===Te.date&&+n==+e?{valid:!0,data:n}:{valid:!1}}var al=class extends St{_parse(e){let{status:t,ctx:r}=this._processInputParams(e),s=(i,o)=>{if(ox(i)||ox(o))return tt;let a=ux(i.value,o.value);return a.valid?((ax(i)||ax(o))&&t.dirty(),{status:t.value,value:a.data}):(Re(r,{code:ce.invalid_intersection_types}),tt)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};al.create=(n,e,t)=>new al({left:n,right:e,typeName:ue.ZodIntersection,...pt(t)});var eo=class n extends St{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==Te.array)return Re(r,{code:ce.invalid_type,expected:Te.array,received:r.parsedType}),tt;if(r.data.length<this._def.items.length)return Re(r,{code:ce.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),tt;!this._def.rest&&r.data.length>this._def.items.length&&(Re(r,{code:ce.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let i=[...r.data].map((o,a)=>{let c=this._def.items[a]||this._def.rest;return c?c._parse(new Ls(r,o,r.path,a)):null}).filter(o=>!!o);return r.common.async?Promise.all(i).then(o=>gr.mergeArray(t,o)):gr.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new n({...this._def,rest:e})}};eo.create=(n,e)=>{if(!Array.isArray(n))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new eo({items:n,typeName:ue.ZodTuple,rest:null,...pt(e)})};var dx=class n extends St{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==Te.object)return Re(r,{code:ce.invalid_type,expected:Te.object,received:r.parsedType}),tt;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in r.data)s.push({key:i._parse(new Ls(r,a,r.path,a)),value:o._parse(new Ls(r,r.data[a],r.path,a)),alwaysSet:a in r.data});return r.common.async?gr.mergeObjectAsync(t,s):gr.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(e,t,r){return t instanceof St?new n({keyType:e,valueType:t,typeName:ue.ZodRecord,...pt(r)}):new n({keyType:rl.create(),valueType:e,typeName:ue.ZodRecord,...pt(t)})}},zd=class extends St{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==Te.map)return Re(r,{code:ce.invalid_type,expected:Te.map,received:r.parsedType}),tt;let s=this._def.keyType,i=this._def.valueType,o=[...r.data.entries()].map(([a,c],l)=>({key:s._parse(new Ls(r,a,r.path,[l,"key"])),value:i._parse(new Ls(r,c,r.path,[l,"value"]))}));if(r.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let c of o){let l=await c.key,u=await c.value;if(l.status==="aborted"||u.status==="aborted")return tt;(l.status==="dirty"||u.status==="dirty")&&t.dirty(),a.set(l.value,u.value)}return{status:t.value,value:a}})}else{let a=new Map;for(let c of o){let l=c.key,u=c.value;if(l.status==="aborted"||u.status==="aborted")return tt;(l.status==="dirty"||u.status==="dirty")&&t.dirty(),a.set(l.value,u.value)}return{status:t.value,value:a}}}};zd.create=(n,e,t)=>new zd({valueType:e,keyType:n,typeName:ue.ZodMap,...pt(t)});var Bd=class n extends St{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==Te.set)return Re(r,{code:ce.invalid_type,expected:Te.set,received:r.parsedType}),tt;let s=this._def;s.minSize!==null&&r.data.size<s.minSize.value&&(Re(r,{code:ce.too_small,minimum:s.minSize.value,type:"set",inclusive:!0,exact:!1,message:s.minSize.message}),t.dirty()),s.maxSize!==null&&r.data.size>s.maxSize.value&&(Re(r,{code:ce.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let i=this._def.valueType;function o(c){let l=new Set;for(let u of c){if(u.status==="aborted")return tt;u.status==="dirty"&&t.dirty(),l.add(u.value)}return{status:t.value,value:l}}let a=[...r.data.values()].map((c,l)=>i._parse(new Ls(r,c,r.path,l)));return r.common.async?Promise.all(a).then(c=>o(c)):o(a)}min(e,t){return new n({...this._def,minSize:{value:e,message:Oe.toString(t)}})}max(e,t){return new n({...this._def,maxSize:{value:e,message:Oe.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};Bd.create=(n,e)=>new Bd({valueType:n,minSize:null,maxSize:null,typeName:ue.ZodSet,...pt(e)});var px=class n extends St{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==Te.function)return Re(t,{code:ce.invalid_type,expected:Te.function,received:t.parsedType}),tt;function r(a,c){return oh({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Ad(),Po].filter(l=>!!l),issueData:{code:ce.invalid_arguments,argumentsError:c}})}function s(a,c){return oh({data:a,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Ad(),Po].filter(l=>!!l),issueData:{code:ce.invalid_return_type,returnTypeError:c}})}let i={errorMap:t.common.contextualErrorMap},o=t.data;if(this._def.returns instanceof Wa){let a=this;return Ir(async function(...c){let l=new fs([]),u=await a._def.args.parseAsync(c,i).catch(f=>{throw l.addIssue(r(c,f)),l}),d=await Reflect.apply(o,this,u);return await a._def.returns._def.type.parseAsync(d,i).catch(f=>{throw l.addIssue(s(d,f)),l})})}else{let a=this;return Ir(function(...c){let l=a._def.args.safeParse(c,i);if(!l.success)throw new fs([r(c,l.error)]);let u=Reflect.apply(o,this,l.data),d=a._def.returns.safeParse(u,i);if(!d.success)throw new fs([s(u,d.error)]);return d.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new n({...this._def,args:eo.create(e).rest(Co.create())})}returns(e){return new n({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,r){return new n({args:e||eo.create([]).rest(Co.create()),returns:t||Co.create(),typeName:ue.ZodFunction,...pt(r)})}},cl=class extends St{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};cl.create=(n,e)=>new cl({getter:n,typeName:ue.ZodLazy,...pt(e)});var ll=class extends St{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return Re(t,{received:t.data,code:ce.invalid_literal,expected:this._def.value}),tt}return{status:"valid",value:e.data}}get value(){return this._def.value}};ll.create=(n,e)=>new ll({value:n,typeName:ue.ZodLiteral,...pt(e)});function wI(n,e){return new ul({values:n,typeName:ue.ZodEnum,...pt(e)})}var ul=class n extends St{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),r=this._def.values;return Re(t,{expected:Rt.joinValues(r),received:t.parsedType,code:ce.invalid_type}),tt}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),r=this._def.values;return Re(t,{received:t.data,code:ce.invalid_enum_value,options:r}),tt}return Ir(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return n.create(e,{...this._def,...t})}exclude(e,t=this._def){return n.create(this.options.filter(r=>!e.includes(r)),{...this._def,...t})}};ul.create=wI;var dl=class extends St{_parse(e){let t=Rt.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==Te.string&&r.parsedType!==Te.number){let s=Rt.objectValues(t);return Re(r,{expected:Rt.joinValues(s),received:r.parsedType,code:ce.invalid_type}),tt}if(this._cache||(this._cache=new Set(Rt.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=Rt.objectValues(t);return Re(r,{received:r.data,code:ce.invalid_enum_value,options:s}),tt}return Ir(e.data)}get enum(){return this._def.values}};dl.create=(n,e)=>new dl({values:n,typeName:ue.ZodNativeEnum,...pt(e)});var Wa=class extends St{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==Te.promise&&t.common.async===!1)return Re(t,{code:ce.invalid_type,expected:Te.promise,received:t.parsedType}),tt;let r=t.parsedType===Te.promise?t.data:Promise.resolve(t.data);return Ir(r.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};Wa.create=(n,e)=>new Wa({type:n,typeName:ue.ZodPromise,...pt(e)});var oi=class extends St{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===ue.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:r}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{Re(r,o),o.fatal?t.abort():t.dirty()},get path(){return r.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(r.data,i);if(r.common.async)return Promise.resolve(o).then(async a=>{if(t.value==="aborted")return tt;let c=await this._def.schema._parseAsync({data:a,path:r.path,parent:r});return c.status==="aborted"?tt:c.status==="dirty"?tl(c.value):t.value==="dirty"?tl(c.value):c});{if(t.value==="aborted")return tt;let a=this._def.schema._parseSync({data:o,path:r.path,parent:r});return a.status==="aborted"?tt:a.status==="dirty"?tl(a.value):t.value==="dirty"?tl(a.value):a}}if(s.type==="refinement"){let o=a=>{let c=s.refinement(a,i);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(r.common.async===!1){let a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?tt:(a.status==="dirty"&&t.dirty(),o(a.value),{status:t.value,value:a.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>a.status==="aborted"?tt:(a.status==="dirty"&&t.dirty(),o(a.value).then(()=>({status:t.value,value:a.value}))))}if(s.type==="transform")if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Ha(o))return tt;let a=s.transform(o.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>Ha(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:t.value,value:a})):tt);Rt.assertNever(s)}};oi.create=(n,e,t)=>new oi({schema:n,typeName:ue.ZodEffects,effect:e,...pt(t)});oi.createWithPreprocess=(n,e,t)=>new oi({schema:e,effect:{type:"preprocess",transform:n},typeName:ue.ZodEffects,...pt(t)});var ms=class extends St{_parse(e){return this._getType(e)===Te.undefined?Ir(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ms.create=(n,e)=>new ms({innerType:n,typeName:ue.ZodOptional,...pt(e)});var to=class extends St{_parse(e){return this._getType(e)===Te.null?Ir(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};to.create=(n,e)=>new to({innerType:n,typeName:ue.ZodNullable,...pt(e)});var pl=class extends St{_parse(e){let{ctx:t}=this._processInputParams(e),r=t.data;return t.parsedType===Te.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};pl.create=(n,e)=>new pl({innerType:n,typeName:ue.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...pt(e)});var fl=class extends St{_parse(e){let{ctx:t}=this._processInputParams(e),r={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return Nd(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new fs(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new fs(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};fl.create=(n,e)=>new fl({innerType:n,typeName:ue.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...pt(e)});var qd=class extends St{_parse(e){if(this._getType(e)!==Te.nan){let r=this._getOrReturnCtx(e);return Re(r,{code:ce.invalid_type,expected:Te.nan,received:r.parsedType}),tt}return{status:"valid",value:e.data}}};qd.create=n=>new qd({typeName:ue.ZodNaN,...pt(n)});var ah=class extends St{_parse(e){let{ctx:t}=this._processInputParams(e),r=t.data;return this._def.type._parse({data:r,path:t.path,parent:t})}unwrap(){return this._def.type}},ch=class n extends St{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?tt:i.status==="dirty"?(t.dirty(),tl(i.value)):this._def.out._parseAsync({data:i.value,path:r.path,parent:r})})();{let s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?tt:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(e,t){return new n({in:e,out:t,typeName:ue.ZodPipeline})}},ml=class extends St{_parse(e){let t=this._def.innerType._parse(e),r=s=>(Ha(s)&&(s.value=Object.freeze(s.value)),s);return Nd(t)?t.then(s=>r(s)):r(t)}unwrap(){return this._def.innerType}};ml.create=(n,e)=>new ml({innerType:n,typeName:ue.ZodReadonly,...pt(e)});var Yee={object:hs.lazycreate},ue;(function(n){n.ZodString="ZodString",n.ZodNumber="ZodNumber",n.ZodNaN="ZodNaN",n.ZodBigInt="ZodBigInt",n.ZodBoolean="ZodBoolean",n.ZodDate="ZodDate",n.ZodSymbol="ZodSymbol",n.ZodUndefined="ZodUndefined",n.ZodNull="ZodNull",n.ZodAny="ZodAny",n.ZodUnknown="ZodUnknown",n.ZodNever="ZodNever",n.ZodVoid="ZodVoid",n.ZodArray="ZodArray",n.ZodObject="ZodObject",n.ZodUnion="ZodUnion",n.ZodDiscriminatedUnion="ZodDiscriminatedUnion",n.ZodIntersection="ZodIntersection",n.ZodTuple="ZodTuple",n.ZodRecord="ZodRecord",n.ZodMap="ZodMap",n.ZodSet="ZodSet",n.ZodFunction="ZodFunction",n.ZodLazy="ZodLazy",n.ZodLiteral="ZodLiteral",n.ZodEnum="ZodEnum",n.ZodEffects="ZodEffects",n.ZodNativeEnum="ZodNativeEnum",n.ZodOptional="ZodOptional",n.ZodNullable="ZodNullable",n.ZodDefault="ZodDefault",n.ZodCatch="ZodCatch",n.ZodPromise="ZodPromise",n.ZodBranded="ZodBranded",n.ZodPipeline="ZodPipeline",n.ZodReadonly="ZodReadonly"})(ue||(ue={}));var ete=rl.create,tte=Md.create,nte=qd.create,rte=Dd.create,ste=Fd.create,ite=Od.create,ote=$d.create,ate=sl.create,cte=il.create,lte=jd.create,ute=Co.create,dte=Pi.create,pte=Ld.create,fte=Io.create,vI=hs.create,mte=hs.strictCreate,hte=ol.create,gte=lx.create,yte=al.create,bte=eo.create,Ste=dx.create,xte=zd.create,_te=Bd.create,wte=px.create,vte=cl.create,Rte=ll.create,kte=ul.create,Ete=dl.create,Tte=Wa.create,Pte=oi.create,Cte=ms.create,Ite=to.create,Ate=oi.createWithPreprocess,Nte=ch.create;var gq=Object.freeze({status:"aborted"});function ee(n,e,t){function r(a,c){var l;Object.defineProperty(a,"_zod",{value:a._zod??{},enumerable:!1}),(l=a._zod).traits??(l.traits=new Set),a._zod.traits.add(n),e(a,c);for(let u in o.prototype)u in a||Object.defineProperty(a,u,{value:o.prototype[u].bind(a)});a._zod.constr=o,a._zod.def=c}let s=t?.Parent??Object;class i extends s{}Object.defineProperty(i,"name",{value:n});function o(a){var c;let l=t?.Parent?new i:this;r(l,a),(c=l._zod).deferred??(c.deferred=[]);for(let u of l._zod.deferred)u();return l}return Object.defineProperty(o,"init",{value:r}),Object.defineProperty(o,Symbol.hasInstance,{value:a=>t?.Parent&&a instanceof t.Parent?!0:a?._zod?.traits?.has(n)}),Object.defineProperty(o,"name",{value:n}),o}var no=class extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}},lh={};function gs(n){return n&&Object.assign(lh,n),lh}var kt={};Lt(kt,{BIGINT_FORMAT_RANGES:()=>kI,Class:()=>mx,NUMBER_FORMAT_RANGES:()=>_x,aborted:()=>Ka,allowsEval:()=>bx,assert:()=>_q,assertEqual:()=>yq,assertIs:()=>Sq,assertNever:()=>xq,assertNotEqual:()=>bq,assignProp:()=>yx,cached:()=>Ud,captureStackTrace:()=>dh,cleanEnum:()=>Dq,cleanRegex:()=>Zd,clone:()=>ys,createTransparentProxy:()=>Tq,defineLazy:()=>Qt,esc:()=>Ua,escapeRegex:()=>Ao,extend:()=>Iq,finalizeIssue:()=>ai,floatSafeRemainder:()=>gx,getElementAtPath:()=>wq,getEnumValues:()=>Wd,getLengthableOrigin:()=>Gd,getParsedType:()=>Eq,getSizableOrigin:()=>EI,isObject:()=>hl,isPlainObject:()=>gl,issue:()=>wx,joinValues:()=>uh,jsonStringifyReplacer:()=>hx,merge:()=>Aq,normalizeParams:()=>Qe,nullish:()=>Kd,numKeys:()=>kq,omit:()=>Cq,optionalKeys:()=>xx,partial:()=>Nq,pick:()=>Pq,prefixIssues:()=>Ci,primitiveTypes:()=>RI,promiseAllObject:()=>vq,propertyKeyTypes:()=>Sx,randomString:()=>Rq,required:()=>Mq,stringifyPrimitive:()=>ph,unwrapMessage:()=>Hd});function yq(n){return n}function bq(n){return n}function Sq(n){}function xq(n){throw new Error}function _q(n){}function Wd(n){let e=Object.values(n).filter(r=>typeof r=="number");return Object.entries(n).filter(([r,s])=>e.indexOf(+r)===-1).map(([r,s])=>s)}function uh(n,e="|"){return n.map(t=>ph(t)).join(e)}function hx(n,e){return typeof e=="bigint"?e.toString():e}function Ud(n){return{get value(){{let t=n();return Object.defineProperty(this,"value",{value:t}),t}throw new Error("cached value already set")}}}function Kd(n){return n==null}function Zd(n){let e=n.startsWith("^")?1:0,t=n.endsWith("$")?n.length-1:n.length;return n.slice(e,t)}function gx(n,e){let t=(n.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=t>r?t:r,i=Number.parseInt(n.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}function Qt(n,e,t){Object.defineProperty(n,e,{get(){{let s=t();return n[e]=s,s}throw new Error("cached value already set")},set(s){Object.defineProperty(n,e,{value:s})},configurable:!0})}function yx(n,e,t){Object.defineProperty(n,e,{value:t,writable:!0,enumerable:!0,configurable:!0})}function wq(n,e){return e?e.reduce((t,r)=>t?.[r],n):n}function vq(n){let e=Object.keys(n),t=e.map(r=>n[r]);return Promise.all(t).then(r=>{let s={};for(let i=0;i<e.length;i++)s[e[i]]=r[i];return s})}function Rq(n=10){let e="abcdefghijklmnopqrstuvwxyz",t="";for(let r=0;r<n;r++)t+=e[Math.floor(Math.random()*e.length)];return t}function Ua(n){return JSON.stringify(n)}var dh=Error.captureStackTrace?Error.captureStackTrace:(...n)=>{};function hl(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}var bx=Ud(()=>{if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{let n=Function;return new n(""),!0}catch{return!1}});function gl(n){if(hl(n)===!1)return!1;let e=n.constructor;if(e===void 0)return!0;let t=e.prototype;return!(hl(t)===!1||Object.prototype.hasOwnProperty.call(t,"isPrototypeOf")===!1)}function kq(n){let e=0;for(let t in n)Object.prototype.hasOwnProperty.call(n,t)&&e++;return e}var Eq=n=>{let e=typeof n;switch(e){case"undefined":return"undefined";case"string":return"string";case"number":return Number.isNaN(n)?"nan":"number";case"boolean":return"boolean";case"function":return"function";case"bigint":return"bigint";case"symbol":return"symbol";case"object":return Array.isArray(n)?"array":n===null?"null":n.then&&typeof n.then=="function"&&n.catch&&typeof n.catch=="function"?"promise":typeof Map<"u"&&n instanceof Map?"map":typeof Set<"u"&&n instanceof Set?"set":typeof Date<"u"&&n instanceof Date?"date":typeof File<"u"&&n instanceof File?"file":"object";default:throw new Error(`Unknown data type: ${e}`)}},Sx=new Set(["string","number","symbol"]),RI=new Set(["string","number","bigint","boolean","symbol","undefined"]);function Ao(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ys(n,e,t){let r=new n._zod.constr(e??n._zod.def);return(!e||t?.parent)&&(r._zod.parent=n),r}function Qe(n){let e=n;if(!e)return{};if(typeof e=="string")return{error:()=>e};if(e?.message!==void 0){if(e?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");e.error=e.message}return delete e.message,typeof e.error=="string"?{...e,error:()=>e.error}:e}function Tq(n){let e;return new Proxy({},{get(t,r,s){return e??(e=n()),Reflect.get(e,r,s)},set(t,r,s,i){return e??(e=n()),Reflect.set(e,r,s,i)},has(t,r){return e??(e=n()),Reflect.has(e,r)},deleteProperty(t,r){return e??(e=n()),Reflect.deleteProperty(e,r)},ownKeys(t){return e??(e=n()),Reflect.ownKeys(e)},getOwnPropertyDescriptor(t,r){return e??(e=n()),Reflect.getOwnPropertyDescriptor(e,r)},defineProperty(t,r,s){return e??(e=n()),Reflect.defineProperty(e,r,s)}})}function ph(n){return typeof n=="bigint"?n.toString()+"n":typeof n=="string"?`"${n}"`:`${n}`}function xx(n){return Object.keys(n).filter(e=>n[e]._zod.optin==="optional"&&n[e]._zod.optout==="optional")}var _x={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},kI={int64:[BigInt("-9223372036854775808"),BigInt("9223372036854775807")],uint64:[BigInt(0),BigInt("18446744073709551615")]};function Pq(n,e){let t={},r=n._zod.def;for(let s in e){if(!(s in r.shape))throw new Error(`Unrecognized key: "${s}"`);e[s]&&(t[s]=r.shape[s])}return ys(n,{...n._zod.def,shape:t,checks:[]})}function Cq(n,e){let t={...n._zod.def.shape},r=n._zod.def;for(let s in e){if(!(s in r.shape))throw new Error(`Unrecognized key: "${s}"`);e[s]&&delete t[s]}return ys(n,{...n._zod.def,shape:t,checks:[]})}function Iq(n,e){if(!gl(e))throw new Error("Invalid input to extend: expected a plain object");let t={...n._zod.def,get shape(){let r={...n._zod.def.shape,...e};return yx(this,"shape",r),r},checks:[]};return ys(n,t)}function Aq(n,e){return ys(n,{...n._zod.def,get shape(){let t={...n._zod.def.shape,...e._zod.def.shape};return yx(this,"shape",t),t},catchall:e._zod.def.catchall,checks:[]})}function Nq(n,e,t){let r=e._zod.def.shape,s={...r};if(t)for(let i in t){if(!(i in r))throw new Error(`Unrecognized key: "${i}"`);t[i]&&(s[i]=n?new n({type:"optional",innerType:r[i]}):r[i])}else for(let i in r)s[i]=n?new n({type:"optional",innerType:r[i]}):r[i];return ys(e,{...e._zod.def,shape:s,checks:[]})}function Mq(n,e,t){let r=e._zod.def.shape,s={...r};if(t)for(let i in t){if(!(i in s))throw new Error(`Unrecognized key: "${i}"`);t[i]&&(s[i]=new n({type:"nonoptional",innerType:r[i]}))}else for(let i in r)s[i]=new n({type:"nonoptional",innerType:r[i]});return ys(e,{...e._zod.def,shape:s,checks:[]})}function Ka(n,e=0){for(let t=e;t<n.issues.length;t++)if(n.issues[t]?.continue!==!0)return!0;return!1}function Ci(n,e){return e.map(t=>{var r;return(r=t).path??(r.path=[]),t.path.unshift(n),t})}function Hd(n){return typeof n=="string"?n:n?.message}function ai(n,e,t){let r={...n,path:n.path??[]};if(!n.message){let s=Hd(n.inst?._zod.def?.error?.(n))??Hd(e?.error?.(n))??Hd(t.customError?.(n))??Hd(t.localeError?.(n))??"Invalid input";r.message=s}return delete r.inst,delete r.continue,e?.reportInput||delete r.input,r}function EI(n){return n instanceof Set?"set":n instanceof Map?"map":n instanceof File?"file":"unknown"}function Gd(n){return Array.isArray(n)?"array":typeof n=="string"?"string":"unknown"}function wx(...n){let[e,t,r]=n;return typeof e=="string"?{message:e,code:"custom",input:t,inst:r}:{...e}}function Dq(n){return Object.entries(n).filter(([e,t])=>Number.isNaN(Number.parseInt(e,10))).map(e=>e[1])}var mx=class{constructor(...e){}};var TI=(n,e)=>{n.name="$ZodError",Object.defineProperty(n,"_zod",{value:n._zod,enumerable:!1}),Object.defineProperty(n,"issues",{value:e,enumerable:!1}),Object.defineProperty(n,"message",{get(){return JSON.stringify(e,hx,2)},enumerable:!0}),Object.defineProperty(n,"toString",{value:()=>n.message,enumerable:!1})},fh=ee("$ZodError",TI),Jd=ee("$ZodError",TI,{Parent:Error});function vx(n,e=t=>t.message){let t={},r=[];for(let s of n.issues)s.path.length>0?(t[s.path[0]]=t[s.path[0]]||[],t[s.path[0]].push(e(s))):r.push(e(s));return{formErrors:r,fieldErrors:t}}function Rx(n,e){let t=e||function(i){return i.message},r={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union"&&o.errors.length)o.errors.map(a=>s({issues:a}));else if(o.code==="invalid_key")s({issues:o.issues});else if(o.code==="invalid_element")s({issues:o.issues});else if(o.path.length===0)r._errors.push(t(o));else{let a=r,c=0;for(;c<o.path.length;){let l=o.path[c];c===o.path.length-1?(a[l]=a[l]||{_errors:[]},a[l]._errors.push(t(o))):a[l]=a[l]||{_errors:[]},a=a[l],c++}}};return s(n),r}var kx=n=>(e,t,r,s)=>{let i=r?Object.assign(r,{async:!1}):{async:!1},o=e._zod.run({value:t,issues:[]},i);if(o instanceof Promise)throw new no;if(o.issues.length){let a=new(s?.Err??n)(o.issues.map(c=>ai(c,i,gs())));throw dh(a,s?.callee),a}return o.value},Ex=kx(Jd),Tx=n=>async(e,t,r,s)=>{let i=r?Object.assign(r,{async:!0}):{async:!0},o=e._zod.run({value:t,issues:[]},i);if(o instanceof Promise&&(o=await o),o.issues.length){let a=new(s?.Err??n)(o.issues.map(c=>ai(c,i,gs())));throw dh(a,s?.callee),a}return o.value},Px=Tx(Jd),Cx=n=>(e,t,r)=>{let s=r?{...r,async:!1}:{async:!1},i=e._zod.run({value:t,issues:[]},s);if(i instanceof Promise)throw new no;return i.issues.length?{success:!1,error:new(n??fh)(i.issues.map(o=>ai(o,s,gs())))}:{success:!0,data:i.value}},Za=Cx(Jd),Ix=n=>async(e,t,r)=>{let s=r?Object.assign(r,{async:!0}):{async:!0},i=e._zod.run({value:t,issues:[]},s);return i instanceof Promise&&(i=await i),i.issues.length?{success:!1,error:new n(i.issues.map(o=>ai(o,s,gs())))}:{success:!0,data:i.value}},Ga=Ix(Jd);var PI=/^[cC][^\s-]{8,}$/,CI=/^[0-9a-z]+$/,II=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,AI=/^[0-9a-vA-V]{20}$/,NI=/^[A-Za-z0-9]{27}$/,MI=/^[a-zA-Z0-9_-]{21}$/,DI=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/;var FI=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,Ax=n=>n?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${n}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/;var OI=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;var Oq="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function $I(){return new RegExp(Oq,"u")}var jI=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,LI=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/,zI=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,BI=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,qI=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Nx=/^[A-Za-z0-9_-]*$/,HI=/^([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+$/;var WI=/^\+(?:[0-9]){6,14}[0-9]$/,UI="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",KI=new RegExp(`^${UI}$`);function ZI(n){let e="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof n.precision=="number"?n.precision===-1?`${e}`:n.precision===0?`${e}:[0-5]\\d`:`${e}:[0-5]\\d\\.\\d{${n.precision}}`:`${e}(?::[0-5]\\d(?:\\.\\d+)?)?`}function GI(n){return new RegExp(`^${ZI(n)}$`)}function JI(n){let e=ZI({precision:n.precision}),t=["Z"];n.local&&t.push(""),n.offset&&t.push("([+-]\\d{2}:\\d{2})");let r=`${e}(?:${t.join("|")})`;return new RegExp(`^${UI}T(?:${r})$`)}var VI=n=>{let e=n?`[\\s\\S]{${n?.minimum??0},${n?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${e}$`)};var XI=/^\d+$/,QI=/^-?\d+(?:\.\d+)?/i,YI=/true|false/i,eA=/null/i;var tA=/^[^A-Z]*$/,nA=/^[^a-z]*$/;var ir=ee("$ZodCheck",(n,e)=>{var t;n._zod??(n._zod={}),n._zod.def=e,(t=n._zod).onattach??(t.onattach=[])}),rA={number:"number",bigint:"bigint",object:"date"},Mx=ee("$ZodCheckLessThan",(n,e)=>{ir.init(n,e);let t=rA[typeof e.value];n._zod.onattach.push(r=>{let s=r._zod.bag,i=(e.inclusive?s.maximum:s.exclusiveMaximum)??Number.POSITIVE_INFINITY;e.value<i&&(e.inclusive?s.maximum=e.value:s.exclusiveMaximum=e.value)}),n._zod.check=r=>{(e.inclusive?r.value<=e.value:r.value<e.value)||r.issues.push({origin:t,code:"too_big",maximum:e.value,input:r.value,inclusive:e.inclusive,inst:n,continue:!e.abort})}}),Dx=ee("$ZodCheckGreaterThan",(n,e)=>{ir.init(n,e);let t=rA[typeof e.value];n._zod.onattach.push(r=>{let s=r._zod.bag,i=(e.inclusive?s.minimum:s.exclusiveMinimum)??Number.NEGATIVE_INFINITY;e.value>i&&(e.inclusive?s.minimum=e.value:s.exclusiveMinimum=e.value)}),n._zod.check=r=>{(e.inclusive?r.value>=e.value:r.value>e.value)||r.issues.push({origin:t,code:"too_small",minimum:e.value,input:r.value,inclusive:e.inclusive,inst:n,continue:!e.abort})}}),sA=ee("$ZodCheckMultipleOf",(n,e)=>{ir.init(n,e),n._zod.onattach.push(t=>{var r;(r=t._zod.bag).multipleOf??(r.multipleOf=e.value)}),n._zod.check=t=>{if(typeof t.value!=typeof e.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof t.value=="bigint"?t.value%e.value===BigInt(0):gx(t.value,e.value)===0)||t.issues.push({origin:typeof t.value,code:"not_multiple_of",divisor:e.value,input:t.value,inst:n,continue:!e.abort})}}),iA=ee("$ZodCheckNumberFormat",(n,e)=>{ir.init(n,e),e.format=e.format||"float64";let t=e.format?.includes("int"),r=t?"int":"number",[s,i]=_x[e.format];n._zod.onattach.push(o=>{let a=o._zod.bag;a.format=e.format,a.minimum=s,a.maximum=i,t&&(a.pattern=XI)}),n._zod.check=o=>{let a=o.value;if(t){if(!Number.isInteger(a)){o.issues.push({expected:r,format:e.format,code:"invalid_type",input:a,inst:n});return}if(!Number.isSafeInteger(a)){a>0?o.issues.push({input:a,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:n,origin:r,continue:!e.abort}):o.issues.push({input:a,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:n,origin:r,continue:!e.abort});return}}a<s&&o.issues.push({origin:"number",input:a,code:"too_small",minimum:s,inclusive:!0,inst:n,continue:!e.abort}),a>i&&o.issues.push({origin:"number",input:a,code:"too_big",maximum:i,inst:n})}});var oA=ee("$ZodCheckMaxLength",(n,e)=>{var t;ir.init(n,e),(t=n._zod.def).when??(t.when=r=>{let s=r.value;return!Kd(s)&&s.length!==void 0}),n._zod.onattach.push(r=>{let s=r._zod.bag.maximum??Number.POSITIVE_INFINITY;e.maximum<s&&(r._zod.bag.maximum=e.maximum)}),n._zod.check=r=>{let s=r.value;if(s.length<=e.maximum)return;let o=Gd(s);r.issues.push({origin:o,code:"too_big",maximum:e.maximum,inclusive:!0,input:s,inst:n,continue:!e.abort})}}),aA=ee("$ZodCheckMinLength",(n,e)=>{var t;ir.init(n,e),(t=n._zod.def).when??(t.when=r=>{let s=r.value;return!Kd(s)&&s.length!==void 0}),n._zod.onattach.push(r=>{let s=r._zod.bag.minimum??Number.NEGATIVE_INFINITY;e.minimum>s&&(r._zod.bag.minimum=e.minimum)}),n._zod.check=r=>{let s=r.value;if(s.length>=e.minimum)return;let o=Gd(s);r.issues.push({origin:o,code:"too_small",minimum:e.minimum,inclusive:!0,input:s,inst:n,continue:!e.abort})}}),cA=ee("$ZodCheckLengthEquals",(n,e)=>{var t;ir.init(n,e),(t=n._zod.def).when??(t.when=r=>{let s=r.value;return!Kd(s)&&s.length!==void 0}),n._zod.onattach.push(r=>{let s=r._zod.bag;s.minimum=e.length,s.maximum=e.length,s.length=e.length}),n._zod.check=r=>{let s=r.value,i=s.length;if(i===e.length)return;let o=Gd(s),a=i>e.length;r.issues.push({origin:o,...a?{code:"too_big",maximum:e.length}:{code:"too_small",minimum:e.length},inclusive:!0,exact:!0,input:r.value,inst:n,continue:!e.abort})}}),Vd=ee("$ZodCheckStringFormat",(n,e)=>{var t,r;ir.init(n,e),n._zod.onattach.push(s=>{let i=s._zod.bag;i.format=e.format,e.pattern&&(i.patterns??(i.patterns=new Set),i.patterns.add(e.pattern))}),e.pattern?(t=n._zod).check??(t.check=s=>{e.pattern.lastIndex=0,!e.pattern.test(s.value)&&s.issues.push({origin:"string",code:"invalid_format",format:e.format,input:s.value,...e.pattern?{pattern:e.pattern.toString()}:{},inst:n,continue:!e.abort})}):(r=n._zod).check??(r.check=()=>{})}),lA=ee("$ZodCheckRegex",(n,e)=>{Vd.init(n,e),n._zod.check=t=>{e.pattern.lastIndex=0,!e.pattern.test(t.value)&&t.issues.push({origin:"string",code:"invalid_format",format:"regex",input:t.value,pattern:e.pattern.toString(),inst:n,continue:!e.abort})}}),uA=ee("$ZodCheckLowerCase",(n,e)=>{e.pattern??(e.pattern=tA),Vd.init(n,e)}),dA=ee("$ZodCheckUpperCase",(n,e)=>{e.pattern??(e.pattern=nA),Vd.init(n,e)}),pA=ee("$ZodCheckIncludes",(n,e)=>{ir.init(n,e);let t=Ao(e.includes),r=new RegExp(typeof e.position=="number"?`^.{${e.position}}${t}`:t);e.pattern=r,n._zod.onattach.push(s=>{let i=s._zod.bag;i.patterns??(i.patterns=new Set),i.patterns.add(r)}),n._zod.check=s=>{s.value.includes(e.includes,e.position)||s.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:e.includes,input:s.value,inst:n,continue:!e.abort})}}),fA=ee("$ZodCheckStartsWith",(n,e)=>{ir.init(n,e);let t=new RegExp(`^${Ao(e.prefix)}.*`);e.pattern??(e.pattern=t),n._zod.onattach.push(r=>{let s=r._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(t)}),n._zod.check=r=>{r.value.startsWith(e.prefix)||r.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:e.prefix,input:r.value,inst:n,continue:!e.abort})}}),mA=ee("$ZodCheckEndsWith",(n,e)=>{ir.init(n,e);let t=new RegExp(`.*${Ao(e.suffix)}$`);e.pattern??(e.pattern=t),n._zod.onattach.push(r=>{let s=r._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(t)}),n._zod.check=r=>{r.value.endsWith(e.suffix)||r.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:e.suffix,input:r.value,inst:n,continue:!e.abort})}});var hA=ee("$ZodCheckOverwrite",(n,e)=>{ir.init(n,e),n._zod.check=t=>{t.value=e.tx(t.value)}});var hh=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),this.indent-=1}write(e){if(typeof e=="function"){e(this,{execution:"sync"}),e(this,{execution:"async"});return}let r=e.split(`
|
|
870
870
|
`).filter(o=>o),s=Math.min(...r.map(o=>o.length-o.trimStart().length)),i=r.map(o=>o.slice(s)).map(o=>" ".repeat(this.indent*2)+o);for(let o of i)this.content.push(o)}compile(){let e=Function,t=this?.args,s=[...(this?.content??[""]).map(i=>` ${i}`)];return new e(...t,s.join(`
|
|
871
871
|
`))}};var yA={major:4,minor:0,patch:0};var qt=ee("$ZodType",(n,e)=>{var t;n??(n={}),n._zod.def=e,n._zod.bag=n._zod.bag||{},n._zod.version=yA;let r=[...n._zod.def.checks??[]];n._zod.traits.has("$ZodCheck")&&r.unshift(n);for(let s of r)for(let i of s._zod.onattach)i(n);if(r.length===0)(t=n._zod).deferred??(t.deferred=[]),n._zod.deferred?.push(()=>{n._zod.run=n._zod.parse});else{let s=(i,o,a)=>{let c=Ka(i),l;for(let u of o){if(u._zod.def.when){if(!u._zod.def.when(i))continue}else if(c)continue;let d=i.issues.length,p=u._zod.check(i);if(p instanceof Promise&&a?.async===!1)throw new no;if(l||p instanceof Promise)l=(l??Promise.resolve()).then(async()=>{await p,i.issues.length!==d&&(c||(c=Ka(i,d)))});else{if(i.issues.length===d)continue;c||(c=Ka(i,d))}}return l?l.then(()=>i):i};n._zod.run=(i,o)=>{let a=n._zod.parse(i,o);if(a instanceof Promise){if(o.async===!1)throw new no;return a.then(c=>s(c,r,o))}return s(a,r,o)}}n["~standard"]={validate:s=>{try{let i=Za(n,s);return i.success?{value:i.data}:{issues:i.error?.issues}}catch{return Ga(n,s).then(o=>o.success?{value:o.data}:{issues:o.error?.issues})}},vendor:"zod",version:1}}),Xd=ee("$ZodString",(n,e)=>{qt.init(n,e),n._zod.pattern=[...n?._zod.bag?.patterns??[]].pop()??VI(n._zod.bag),n._zod.parse=(t,r)=>{if(e.coerce)try{t.value=String(t.value)}catch{}return typeof t.value=="string"||t.issues.push({expected:"string",code:"invalid_type",input:t.value,inst:n}),t}}),Yt=ee("$ZodStringFormat",(n,e)=>{Vd.init(n,e),Xd.init(n,e)}),Ox=ee("$ZodGUID",(n,e)=>{e.pattern??(e.pattern=FI),Yt.init(n,e)}),$x=ee("$ZodUUID",(n,e)=>{if(e.version){let r={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[e.version];if(r===void 0)throw new Error(`Invalid UUID version: "${e.version}"`);e.pattern??(e.pattern=Ax(r))}else e.pattern??(e.pattern=Ax());Yt.init(n,e)}),jx=ee("$ZodEmail",(n,e)=>{e.pattern??(e.pattern=OI),Yt.init(n,e)}),Lx=ee("$ZodURL",(n,e)=>{Yt.init(n,e),n._zod.check=t=>{try{let r=t.value,s=new URL(r),i=s.href;e.hostname&&(e.hostname.lastIndex=0,e.hostname.test(s.hostname)||t.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:HI.source,input:t.value,inst:n,continue:!e.abort})),e.protocol&&(e.protocol.lastIndex=0,e.protocol.test(s.protocol.endsWith(":")?s.protocol.slice(0,-1):s.protocol)||t.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:e.protocol.source,input:t.value,inst:n,continue:!e.abort})),!r.endsWith("/")&&i.endsWith("/")?t.value=i.slice(0,-1):t.value=i;return}catch{t.issues.push({code:"invalid_format",format:"url",input:t.value,inst:n,continue:!e.abort})}}}),zx=ee("$ZodEmoji",(n,e)=>{e.pattern??(e.pattern=$I()),Yt.init(n,e)}),Bx=ee("$ZodNanoID",(n,e)=>{e.pattern??(e.pattern=MI),Yt.init(n,e)}),qx=ee("$ZodCUID",(n,e)=>{e.pattern??(e.pattern=PI),Yt.init(n,e)}),Hx=ee("$ZodCUID2",(n,e)=>{e.pattern??(e.pattern=CI),Yt.init(n,e)}),Wx=ee("$ZodULID",(n,e)=>{e.pattern??(e.pattern=II),Yt.init(n,e)}),Ux=ee("$ZodXID",(n,e)=>{e.pattern??(e.pattern=AI),Yt.init(n,e)}),Kx=ee("$ZodKSUID",(n,e)=>{e.pattern??(e.pattern=NI),Yt.init(n,e)}),TA=ee("$ZodISODateTime",(n,e)=>{e.pattern??(e.pattern=JI(e)),Yt.init(n,e)}),PA=ee("$ZodISODate",(n,e)=>{e.pattern??(e.pattern=KI),Yt.init(n,e)}),CA=ee("$ZodISOTime",(n,e)=>{e.pattern??(e.pattern=GI(e)),Yt.init(n,e)}),IA=ee("$ZodISODuration",(n,e)=>{e.pattern??(e.pattern=DI),Yt.init(n,e)}),Zx=ee("$ZodIPv4",(n,e)=>{e.pattern??(e.pattern=jI),Yt.init(n,e),n._zod.onattach.push(t=>{let r=t._zod.bag;r.format="ipv4"})}),Gx=ee("$ZodIPv6",(n,e)=>{e.pattern??(e.pattern=LI),Yt.init(n,e),n._zod.onattach.push(t=>{let r=t._zod.bag;r.format="ipv6"}),n._zod.check=t=>{try{new URL(`http://[${t.value}]`)}catch{t.issues.push({code:"invalid_format",format:"ipv6",input:t.value,inst:n,continue:!e.abort})}}}),Jx=ee("$ZodCIDRv4",(n,e)=>{e.pattern??(e.pattern=zI),Yt.init(n,e)}),Vx=ee("$ZodCIDRv6",(n,e)=>{e.pattern??(e.pattern=BI),Yt.init(n,e),n._zod.check=t=>{let[r,s]=t.value.split("/");try{if(!s)throw new Error;let i=Number(s);if(`${i}`!==s)throw new Error;if(i<0||i>128)throw new Error;new URL(`http://[${r}]`)}catch{t.issues.push({code:"invalid_format",format:"cidrv6",input:t.value,inst:n,continue:!e.abort})}}});function AA(n){if(n==="")return!0;if(n.length%4!==0)return!1;try{return atob(n),!0}catch{return!1}}var Xx=ee("$ZodBase64",(n,e)=>{e.pattern??(e.pattern=qI),Yt.init(n,e),n._zod.onattach.push(t=>{t._zod.bag.contentEncoding="base64"}),n._zod.check=t=>{AA(t.value)||t.issues.push({code:"invalid_format",format:"base64",input:t.value,inst:n,continue:!e.abort})}});function $q(n){if(!Nx.test(n))return!1;let e=n.replace(/[-_]/g,r=>r==="-"?"+":"/"),t=e.padEnd(Math.ceil(e.length/4)*4,"=");return AA(t)}var Qx=ee("$ZodBase64URL",(n,e)=>{e.pattern??(e.pattern=Nx),Yt.init(n,e),n._zod.onattach.push(t=>{t._zod.bag.contentEncoding="base64url"}),n._zod.check=t=>{$q(t.value)||t.issues.push({code:"invalid_format",format:"base64url",input:t.value,inst:n,continue:!e.abort})}}),Yx=ee("$ZodE164",(n,e)=>{e.pattern??(e.pattern=WI),Yt.init(n,e)});function jq(n,e=null){try{let t=n.split(".");if(t.length!==3)return!1;let[r]=t;if(!r)return!1;let s=JSON.parse(atob(r));return!("typ"in s&&s?.typ!=="JWT"||!s.alg||e&&(!("alg"in s)||s.alg!==e))}catch{return!1}}var e_=ee("$ZodJWT",(n,e)=>{Yt.init(n,e),n._zod.check=t=>{jq(t.value,e.alg)||t.issues.push({code:"invalid_format",format:"jwt",input:t.value,inst:n,continue:!e.abort})}});var yh=ee("$ZodNumber",(n,e)=>{qt.init(n,e),n._zod.pattern=n._zod.bag.pattern??QI,n._zod.parse=(t,r)=>{if(e.coerce)try{t.value=Number(t.value)}catch{}let s=t.value;if(typeof s=="number"&&!Number.isNaN(s)&&Number.isFinite(s))return t;let i=typeof s=="number"?Number.isNaN(s)?"NaN":Number.isFinite(s)?void 0:"Infinity":void 0;return t.issues.push({expected:"number",code:"invalid_type",input:s,inst:n,...i?{received:i}:{}}),t}}),t_=ee("$ZodNumber",(n,e)=>{iA.init(n,e),yh.init(n,e)}),n_=ee("$ZodBoolean",(n,e)=>{qt.init(n,e),n._zod.pattern=YI,n._zod.parse=(t,r)=>{if(e.coerce)try{t.value=!!t.value}catch{}let s=t.value;return typeof s=="boolean"||t.issues.push({expected:"boolean",code:"invalid_type",input:s,inst:n}),t}});var r_=ee("$ZodNull",(n,e)=>{qt.init(n,e),n._zod.pattern=eA,n._zod.values=new Set([null]),n._zod.parse=(t,r)=>{let s=t.value;return s===null||t.issues.push({expected:"null",code:"invalid_type",input:s,inst:n}),t}});var s_=ee("$ZodUnknown",(n,e)=>{qt.init(n,e),n._zod.parse=t=>t}),i_=ee("$ZodNever",(n,e)=>{qt.init(n,e),n._zod.parse=(t,r)=>(t.issues.push({expected:"never",code:"invalid_type",input:t.value,inst:n}),t)});function bA(n,e,t){n.issues.length&&e.issues.push(...Ci(t,n.issues)),e.value[t]=n.value}var o_=ee("$ZodArray",(n,e)=>{qt.init(n,e),n._zod.parse=(t,r)=>{let s=t.value;if(!Array.isArray(s))return t.issues.push({expected:"array",code:"invalid_type",input:s,inst:n}),t;t.value=Array(s.length);let i=[];for(let o=0;o<s.length;o++){let a=s[o],c=e.element._zod.run({value:a,issues:[]},r);c instanceof Promise?i.push(c.then(l=>bA(l,t,o))):bA(c,t,o)}return i.length?Promise.all(i).then(()=>t):t}});function gh(n,e,t){n.issues.length&&e.issues.push(...Ci(t,n.issues)),e.value[t]=n.value}function SA(n,e,t,r){n.issues.length?r[t]===void 0?t in r?e.value[t]=void 0:e.value[t]=n.value:e.issues.push(...Ci(t,n.issues)):n.value===void 0?t in r&&(e.value[t]=void 0):e.value[t]=n.value}var bh=ee("$ZodObject",(n,e)=>{qt.init(n,e);let t=Ud(()=>{let d=Object.keys(e.shape);for(let f of d)if(!(e.shape[f]instanceof qt))throw new Error(`Invalid element at key "${f}": expected a Zod schema`);let p=xx(e.shape);return{shape:e.shape,keys:d,keySet:new Set(d),numKeys:d.length,optionalKeys:new Set(p)}});Qt(n._zod,"propValues",()=>{let d=e.shape,p={};for(let f in d){let m=d[f]._zod;if(m.values){p[f]??(p[f]=new Set);for(let h of m.values)p[f].add(h)}}return p});let r=d=>{let p=new hh(["shape","payload","ctx"]),f=t.value,m=b=>{let S=Ua(b);return`shape[${S}]._zod.run({ value: input[${S}], issues: [] }, ctx)`};p.write("const input = payload.value;");let h=Object.create(null),g=0;for(let b of f.keys)h[b]=`key_${g++}`;p.write("const newResult = {}");for(let b of f.keys)if(f.optionalKeys.has(b)){let S=h[b];p.write(`const ${S} = ${m(b)};`);let _=Ua(b);p.write(`
|
|
872
872
|
if (${S}.issues.length) {
|
|
@@ -893,7 +893,7 @@ ${r.join(`
|
|
|
893
893
|
path: iss.path ? [${Ua(b)}, ...iss.path] : [${Ua(b)}]
|
|
894
894
|
})));`),p.write(`newResult[${Ua(b)}] = ${S}.value`)}p.write("payload.value = newResult;"),p.write("return payload;");let y=p.compile();return(b,S)=>y(d,b,S)},s,i=hl,o=!lh.jitless,c=o&&bx.value,l=e.catchall,u;n._zod.parse=(d,p)=>{u??(u=t.value);let f=d.value;if(!i(f))return d.issues.push({expected:"object",code:"invalid_type",input:f,inst:n}),d;let m=[];if(o&&c&&p?.async===!1&&p.jitless!==!0)s||(s=r(e.shape)),d=s(d,p);else{d.value={};let S=u.shape;for(let _ of u.keys){let R=S[_],E=R._zod.run({value:f[_],issues:[]},p),T=R._zod.optin==="optional"&&R._zod.optout==="optional";E instanceof Promise?m.push(E.then(x=>T?SA(x,d,_,f):gh(x,d,_))):T?SA(E,d,_,f):gh(E,d,_)}}if(!l)return m.length?Promise.all(m).then(()=>d):d;let h=[],g=u.keySet,y=l._zod,b=y.def.type;for(let S of Object.keys(f)){if(g.has(S))continue;if(b==="never"){h.push(S);continue}let _=y.run({value:f[S],issues:[]},p);_ instanceof Promise?m.push(_.then(R=>gh(R,d,S))):gh(_,d,S)}return h.length&&d.issues.push({code:"unrecognized_keys",keys:h,input:f,inst:n}),m.length?Promise.all(m).then(()=>d):d}});function xA(n,e,t,r){for(let s of n)if(s.issues.length===0)return e.value=s.value,e;return e.issues.push({code:"invalid_union",input:e.value,inst:t,errors:n.map(s=>s.issues.map(i=>ai(i,r,gs())))}),e}var Sh=ee("$ZodUnion",(n,e)=>{qt.init(n,e),Qt(n._zod,"optin",()=>e.options.some(t=>t._zod.optin==="optional")?"optional":void 0),Qt(n._zod,"optout",()=>e.options.some(t=>t._zod.optout==="optional")?"optional":void 0),Qt(n._zod,"values",()=>{if(e.options.every(t=>t._zod.values))return new Set(e.options.flatMap(t=>Array.from(t._zod.values)))}),Qt(n._zod,"pattern",()=>{if(e.options.every(t=>t._zod.pattern)){let t=e.options.map(r=>r._zod.pattern);return new RegExp(`^(${t.map(r=>Zd(r.source)).join("|")})$`)}}),n._zod.parse=(t,r)=>{let s=!1,i=[];for(let o of e.options){let a=o._zod.run({value:t.value,issues:[]},r);if(a instanceof Promise)i.push(a),s=!0;else{if(a.issues.length===0)return a;i.push(a)}}return s?Promise.all(i).then(o=>xA(o,t,n,r)):xA(i,t,n,r)}}),a_=ee("$ZodDiscriminatedUnion",(n,e)=>{Sh.init(n,e);let t=n._zod.parse;Qt(n._zod,"propValues",()=>{let s={};for(let i of e.options){let o=i._zod.propValues;if(!o||Object.keys(o).length===0)throw new Error(`Invalid discriminated union option at index "${e.options.indexOf(i)}"`);for(let[a,c]of Object.entries(o)){s[a]||(s[a]=new Set);for(let l of c)s[a].add(l)}}return s});let r=Ud(()=>{let s=e.options,i=new Map;for(let o of s){let a=o._zod.propValues[e.discriminator];if(!a||a.size===0)throw new Error(`Invalid discriminated union option at index "${e.options.indexOf(o)}"`);for(let c of a){if(i.has(c))throw new Error(`Duplicate discriminator value "${String(c)}"`);i.set(c,o)}}return i});n._zod.parse=(s,i)=>{let o=s.value;if(!hl(o))return s.issues.push({code:"invalid_type",expected:"object",input:o,inst:n}),s;let a=r.value.get(o?.[e.discriminator]);return a?a._zod.run(s,i):e.unionFallback?t(s,i):(s.issues.push({code:"invalid_union",errors:[],note:"No matching discriminator",input:o,path:[e.discriminator],inst:n}),s)}}),c_=ee("$ZodIntersection",(n,e)=>{qt.init(n,e),n._zod.parse=(t,r)=>{let s=t.value,i=e.left._zod.run({value:s,issues:[]},r),o=e.right._zod.run({value:s,issues:[]},r);return i instanceof Promise||o instanceof Promise?Promise.all([i,o]).then(([c,l])=>_A(t,c,l)):_A(t,i,o)}});function Fx(n,e){if(n===e)return{valid:!0,data:n};if(n instanceof Date&&e instanceof Date&&+n==+e)return{valid:!0,data:n};if(gl(n)&&gl(e)){let t=Object.keys(e),r=Object.keys(n).filter(i=>t.indexOf(i)!==-1),s={...n,...e};for(let i of r){let o=Fx(n[i],e[i]);if(!o.valid)return{valid:!1,mergeErrorPath:[i,...o.mergeErrorPath]};s[i]=o.data}return{valid:!0,data:s}}if(Array.isArray(n)&&Array.isArray(e)){if(n.length!==e.length)return{valid:!1,mergeErrorPath:[]};let t=[];for(let r=0;r<n.length;r++){let s=n[r],i=e[r],o=Fx(s,i);if(!o.valid)return{valid:!1,mergeErrorPath:[r,...o.mergeErrorPath]};t.push(o.data)}return{valid:!0,data:t}}return{valid:!1,mergeErrorPath:[]}}function _A(n,e,t){if(e.issues.length&&n.issues.push(...e.issues),t.issues.length&&n.issues.push(...t.issues),Ka(n))return n;let r=Fx(e.value,t.value);if(!r.valid)throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(r.mergeErrorPath)}`);return n.value=r.data,n}var l_=ee("$ZodRecord",(n,e)=>{qt.init(n,e),n._zod.parse=(t,r)=>{let s=t.value;if(!gl(s))return t.issues.push({expected:"record",code:"invalid_type",input:s,inst:n}),t;let i=[];if(e.keyType._zod.values){let o=e.keyType._zod.values;t.value={};for(let c of o)if(typeof c=="string"||typeof c=="number"||typeof c=="symbol"){let l=e.valueType._zod.run({value:s[c],issues:[]},r);l instanceof Promise?i.push(l.then(u=>{u.issues.length&&t.issues.push(...Ci(c,u.issues)),t.value[c]=u.value})):(l.issues.length&&t.issues.push(...Ci(c,l.issues)),t.value[c]=l.value)}let a;for(let c in s)o.has(c)||(a=a??[],a.push(c));a&&a.length>0&&t.issues.push({code:"unrecognized_keys",input:s,inst:n,keys:a})}else{t.value={};for(let o of Reflect.ownKeys(s)){if(o==="__proto__")continue;let a=e.keyType._zod.run({value:o,issues:[]},r);if(a instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(a.issues.length){t.issues.push({origin:"record",code:"invalid_key",issues:a.issues.map(l=>ai(l,r,gs())),input:o,path:[o],inst:n}),t.value[a.value]=a.value;continue}let c=e.valueType._zod.run({value:s[o],issues:[]},r);c instanceof Promise?i.push(c.then(l=>{l.issues.length&&t.issues.push(...Ci(o,l.issues)),t.value[a.value]=l.value})):(c.issues.length&&t.issues.push(...Ci(o,c.issues)),t.value[a.value]=c.value)}}return i.length?Promise.all(i).then(()=>t):t}});var u_=ee("$ZodEnum",(n,e)=>{qt.init(n,e);let t=Wd(e.entries);n._zod.values=new Set(t),n._zod.pattern=new RegExp(`^(${t.filter(r=>Sx.has(typeof r)).map(r=>typeof r=="string"?Ao(r):r.toString()).join("|")})$`),n._zod.parse=(r,s)=>{let i=r.value;return n._zod.values.has(i)||r.issues.push({code:"invalid_value",values:t,input:i,inst:n}),r}}),d_=ee("$ZodLiteral",(n,e)=>{qt.init(n,e),n._zod.values=new Set(e.values),n._zod.pattern=new RegExp(`^(${e.values.map(t=>typeof t=="string"?Ao(t):t?t.toString():String(t)).join("|")})$`),n._zod.parse=(t,r)=>{let s=t.value;return n._zod.values.has(s)||t.issues.push({code:"invalid_value",values:e.values,input:s,inst:n}),t}});var p_=ee("$ZodTransform",(n,e)=>{qt.init(n,e),n._zod.parse=(t,r)=>{let s=e.transform(t.value,t);if(r.async)return(s instanceof Promise?s:Promise.resolve(s)).then(o=>(t.value=o,t));if(s instanceof Promise)throw new no;return t.value=s,t}}),f_=ee("$ZodOptional",(n,e)=>{qt.init(n,e),n._zod.optin="optional",n._zod.optout="optional",Qt(n._zod,"values",()=>e.innerType._zod.values?new Set([...e.innerType._zod.values,void 0]):void 0),Qt(n._zod,"pattern",()=>{let t=e.innerType._zod.pattern;return t?new RegExp(`^(${Zd(t.source)})?$`):void 0}),n._zod.parse=(t,r)=>e.innerType._zod.optin==="optional"?e.innerType._zod.run(t,r):t.value===void 0?t:e.innerType._zod.run(t,r)}),m_=ee("$ZodNullable",(n,e)=>{qt.init(n,e),Qt(n._zod,"optin",()=>e.innerType._zod.optin),Qt(n._zod,"optout",()=>e.innerType._zod.optout),Qt(n._zod,"pattern",()=>{let t=e.innerType._zod.pattern;return t?new RegExp(`^(${Zd(t.source)}|null)$`):void 0}),Qt(n._zod,"values",()=>e.innerType._zod.values?new Set([...e.innerType._zod.values,null]):void 0),n._zod.parse=(t,r)=>t.value===null?t:e.innerType._zod.run(t,r)}),h_=ee("$ZodDefault",(n,e)=>{qt.init(n,e),n._zod.optin="optional",Qt(n._zod,"values",()=>e.innerType._zod.values),n._zod.parse=(t,r)=>{if(t.value===void 0)return t.value=e.defaultValue,t;let s=e.innerType._zod.run(t,r);return s instanceof Promise?s.then(i=>wA(i,e)):wA(s,e)}});function wA(n,e){return n.value===void 0&&(n.value=e.defaultValue),n}var g_=ee("$ZodPrefault",(n,e)=>{qt.init(n,e),n._zod.optin="optional",Qt(n._zod,"values",()=>e.innerType._zod.values),n._zod.parse=(t,r)=>(t.value===void 0&&(t.value=e.defaultValue),e.innerType._zod.run(t,r))}),y_=ee("$ZodNonOptional",(n,e)=>{qt.init(n,e),Qt(n._zod,"values",()=>{let t=e.innerType._zod.values;return t?new Set([...t].filter(r=>r!==void 0)):void 0}),n._zod.parse=(t,r)=>{let s=e.innerType._zod.run(t,r);return s instanceof Promise?s.then(i=>vA(i,n)):vA(s,n)}});function vA(n,e){return!n.issues.length&&n.value===void 0&&n.issues.push({code:"invalid_type",expected:"nonoptional",input:n.value,inst:e}),n}var b_=ee("$ZodCatch",(n,e)=>{qt.init(n,e),n._zod.optin="optional",Qt(n._zod,"optout",()=>e.innerType._zod.optout),Qt(n._zod,"values",()=>e.innerType._zod.values),n._zod.parse=(t,r)=>{let s=e.innerType._zod.run(t,r);return s instanceof Promise?s.then(i=>(t.value=i.value,i.issues.length&&(t.value=e.catchValue({...t,error:{issues:i.issues.map(o=>ai(o,r,gs()))},input:t.value}),t.issues=[]),t)):(t.value=s.value,s.issues.length&&(t.value=e.catchValue({...t,error:{issues:s.issues.map(i=>ai(i,r,gs()))},input:t.value}),t.issues=[]),t)}});var S_=ee("$ZodPipe",(n,e)=>{qt.init(n,e),Qt(n._zod,"values",()=>e.in._zod.values),Qt(n._zod,"optin",()=>e.in._zod.optin),Qt(n._zod,"optout",()=>e.out._zod.optout),n._zod.parse=(t,r)=>{let s=e.in._zod.run(t,r);return s instanceof Promise?s.then(i=>RA(i,e,r)):RA(s,e,r)}});function RA(n,e,t){return Ka(n)?n:e.out._zod.run({value:n.value,issues:n.issues},t)}var x_=ee("$ZodReadonly",(n,e)=>{qt.init(n,e),Qt(n._zod,"propValues",()=>e.innerType._zod.propValues),Qt(n._zod,"values",()=>e.innerType._zod.values),Qt(n._zod,"optin",()=>e.innerType._zod.optin),Qt(n._zod,"optout",()=>e.innerType._zod.optout),n._zod.parse=(t,r)=>{let s=e.innerType._zod.run(t,r);return s instanceof Promise?s.then(kA):kA(s)}});function kA(n){return n.value=Object.freeze(n.value),n}var __=ee("$ZodCustom",(n,e)=>{ir.init(n,e),qt.init(n,e),n._zod.parse=(t,r)=>t,n._zod.check=t=>{let r=t.value,s=e.fn(r);if(s instanceof Promise)return s.then(i=>EA(i,t,r,n));EA(s,t,r,n)}});function EA(n,e,t,r){if(!n){let s={code:"custom",input:t,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(s.params=r._zod.def.params),e.issues.push(wx(s))}}var Lq=n=>{let e=typeof n;switch(e){case"number":return Number.isNaN(n)?"NaN":"number";case"object":{if(Array.isArray(n))return"array";if(n===null)return"null";if(Object.getPrototypeOf(n)!==Object.prototype&&n.constructor)return n.constructor.name}}return e},zq=()=>{let n={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"}};function e(r){return n[r]??null}let t={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"};return r=>{switch(r.code){case"invalid_type":return`Invalid input: expected ${r.expected}, received ${Lq(r.input)}`;case"invalid_value":return r.values.length===1?`Invalid input: expected ${ph(r.values[0])}`:`Invalid option: expected one of ${uh(r.values,"|")}`;case"too_big":{let s=r.inclusive?"<=":"<",i=e(r.origin);return i?`Too big: expected ${r.origin??"value"} to have ${s}${r.maximum.toString()} ${i.unit??"elements"}`:`Too big: expected ${r.origin??"value"} to be ${s}${r.maximum.toString()}`}case"too_small":{let s=r.inclusive?">=":">",i=e(r.origin);return i?`Too small: expected ${r.origin} to have ${s}${r.minimum.toString()} ${i.unit}`:`Too small: expected ${r.origin} to be ${s}${r.minimum.toString()}`}case"invalid_format":{let s=r;return s.format==="starts_with"?`Invalid string: must start with "${s.prefix}"`:s.format==="ends_with"?`Invalid string: must end with "${s.suffix}"`:s.format==="includes"?`Invalid string: must include "${s.includes}"`:s.format==="regex"?`Invalid string: must match pattern ${s.pattern}`:`Invalid ${t[s.format]??r.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${r.divisor}`;case"unrecognized_keys":return`Unrecognized key${r.keys.length>1?"s":""}: ${uh(r.keys,", ")}`;case"invalid_key":return`Invalid key in ${r.origin}`;case"invalid_union":return"Invalid input";case"invalid_element":return`Invalid value in ${r.origin}`;default:return"Invalid input"}}};function NA(){return{localeError:zq()}}var Qd=class{constructor(){this._map=new Map,this._idmap=new Map}add(e,...t){let r=t[0];if(this._map.set(e,r),r&&typeof r=="object"&&"id"in r){if(this._idmap.has(r.id))throw new Error(`ID ${r.id} already exists in the registry`);this._idmap.set(r.id,e)}return this}clear(){return this._map=new Map,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t=="object"&&"id"in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let r={...this.get(t)??{}};return delete r.id,{...r,...this._map.get(e)}}return this._map.get(e)}has(e){return this._map.has(e)}};function MA(){return new Qd}var No=MA();function w_(n,e){return new n({type:"string",...Qe(e)})}function v_(n,e){return new n({type:"string",format:"email",check:"string_format",abort:!1,...Qe(e)})}function xh(n,e){return new n({type:"string",format:"guid",check:"string_format",abort:!1,...Qe(e)})}function R_(n,e){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,...Qe(e)})}function k_(n,e){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...Qe(e)})}function E_(n,e){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...Qe(e)})}function T_(n,e){return new n({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...Qe(e)})}function P_(n,e){return new n({type:"string",format:"url",check:"string_format",abort:!1,...Qe(e)})}function C_(n,e){return new n({type:"string",format:"emoji",check:"string_format",abort:!1,...Qe(e)})}function I_(n,e){return new n({type:"string",format:"nanoid",check:"string_format",abort:!1,...Qe(e)})}function A_(n,e){return new n({type:"string",format:"cuid",check:"string_format",abort:!1,...Qe(e)})}function N_(n,e){return new n({type:"string",format:"cuid2",check:"string_format",abort:!1,...Qe(e)})}function M_(n,e){return new n({type:"string",format:"ulid",check:"string_format",abort:!1,...Qe(e)})}function D_(n,e){return new n({type:"string",format:"xid",check:"string_format",abort:!1,...Qe(e)})}function F_(n,e){return new n({type:"string",format:"ksuid",check:"string_format",abort:!1,...Qe(e)})}function O_(n,e){return new n({type:"string",format:"ipv4",check:"string_format",abort:!1,...Qe(e)})}function $_(n,e){return new n({type:"string",format:"ipv6",check:"string_format",abort:!1,...Qe(e)})}function j_(n,e){return new n({type:"string",format:"cidrv4",check:"string_format",abort:!1,...Qe(e)})}function L_(n,e){return new n({type:"string",format:"cidrv6",check:"string_format",abort:!1,...Qe(e)})}function z_(n,e){return new n({type:"string",format:"base64",check:"string_format",abort:!1,...Qe(e)})}function B_(n,e){return new n({type:"string",format:"base64url",check:"string_format",abort:!1,...Qe(e)})}function q_(n,e){return new n({type:"string",format:"e164",check:"string_format",abort:!1,...Qe(e)})}function H_(n,e){return new n({type:"string",format:"jwt",check:"string_format",abort:!1,...Qe(e)})}function DA(n,e){return new n({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...Qe(e)})}function FA(n,e){return new n({type:"string",format:"date",check:"string_format",...Qe(e)})}function OA(n,e){return new n({type:"string",format:"time",check:"string_format",precision:null,...Qe(e)})}function $A(n,e){return new n({type:"string",format:"duration",check:"string_format",...Qe(e)})}function W_(n,e){return new n({type:"number",checks:[],...Qe(e)})}function U_(n,e){return new n({type:"number",check:"number_format",abort:!1,format:"safeint",...Qe(e)})}function K_(n,e){return new n({type:"boolean",...Qe(e)})}function Z_(n,e){return new n({type:"null",...Qe(e)})}function G_(n){return new n({type:"unknown"})}function J_(n,e){return new n({type:"never",...Qe(e)})}function _h(n,e){return new Mx({check:"less_than",...Qe(e),value:n,inclusive:!1})}function Yd(n,e){return new Mx({check:"less_than",...Qe(e),value:n,inclusive:!0})}function wh(n,e){return new Dx({check:"greater_than",...Qe(e),value:n,inclusive:!1})}function ep(n,e){return new Dx({check:"greater_than",...Qe(e),value:n,inclusive:!0})}function vh(n,e){return new sA({check:"multiple_of",...Qe(e),value:n})}function Rh(n,e){return new oA({check:"max_length",...Qe(e),maximum:n})}function yl(n,e){return new aA({check:"min_length",...Qe(e),minimum:n})}function kh(n,e){return new cA({check:"length_equals",...Qe(e),length:n})}function V_(n,e){return new lA({check:"string_format",format:"regex",...Qe(e),pattern:n})}function X_(n){return new uA({check:"string_format",format:"lowercase",...Qe(n)})}function Q_(n){return new dA({check:"string_format",format:"uppercase",...Qe(n)})}function Y_(n,e){return new pA({check:"string_format",format:"includes",...Qe(e),includes:n})}function ew(n,e){return new fA({check:"string_format",format:"starts_with",...Qe(e),prefix:n})}function tw(n,e){return new mA({check:"string_format",format:"ends_with",...Qe(e),suffix:n})}function Ja(n){return new hA({check:"overwrite",tx:n})}function nw(n){return Ja(e=>e.normalize(n))}function rw(){return Ja(n=>n.trim())}function sw(){return Ja(n=>n.toLowerCase())}function iw(){return Ja(n=>n.toUpperCase())}function jA(n,e,t){return new n({type:"array",element:e,...Qe(t)})}function ow(n,e,t){let r=Qe(t);return r.abort??(r.abort=!0),new n({type:"custom",check:"custom",fn:e,...r})}function aw(n,e,t){return new n({type:"custom",check:"custom",fn:e,...Qe(t)})}var Eh=class{constructor(e){this.counter=0,this.metadataRegistry=e?.metadata??No,this.target=e?.target??"draft-2020-12",this.unrepresentable=e?.unrepresentable??"throw",this.override=e?.override??(()=>{}),this.io=e?.io??"output",this.seen=new Map}process(e,t={path:[],schemaPath:[]}){var r;let s=e._zod.def,i={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},o=this.seen.get(e);if(o)return o.count++,t.schemaPath.includes(e)&&(o.cycle=t.path),o.schema;let a={schema:{},count:1,cycle:void 0,path:t.path};this.seen.set(e,a);let c=e._zod.toJSONSchema?.();if(c)a.schema=c;else{let d={...t,schemaPath:[...t.schemaPath,e],path:t.path},p=e._zod.parent;if(p)a.ref=p,this.process(p,d),this.seen.get(p).isParent=!0;else{let f=a.schema;switch(s.type){case"string":{let m=f;m.type="string";let{minimum:h,maximum:g,format:y,patterns:b,contentEncoding:S}=e._zod.bag;if(typeof h=="number"&&(m.minLength=h),typeof g=="number"&&(m.maxLength=g),y&&(m.format=i[y]??y,m.format===""&&delete m.format),S&&(m.contentEncoding=S),b&&b.size>0){let _=[...b];_.length===1?m.pattern=_[0].source:_.length>1&&(a.schema.allOf=[..._.map(R=>({...this.target==="draft-7"?{type:"string"}:{},pattern:R.source}))])}break}case"number":{let m=f,{minimum:h,maximum:g,format:y,multipleOf:b,exclusiveMaximum:S,exclusiveMinimum:_}=e._zod.bag;typeof y=="string"&&y.includes("int")?m.type="integer":m.type="number",typeof _=="number"&&(m.exclusiveMinimum=_),typeof h=="number"&&(m.minimum=h,typeof _=="number"&&(_>=h?delete m.minimum:delete m.exclusiveMinimum)),typeof S=="number"&&(m.exclusiveMaximum=S),typeof g=="number"&&(m.maximum=g,typeof S=="number"&&(S<=g?delete m.maximum:delete m.exclusiveMaximum)),typeof b=="number"&&(m.multipleOf=b);break}case"boolean":{let m=f;m.type="boolean";break}case"bigint":{if(this.unrepresentable==="throw")throw new Error("BigInt cannot be represented in JSON Schema");break}case"symbol":{if(this.unrepresentable==="throw")throw new Error("Symbols cannot be represented in JSON Schema");break}case"null":{f.type="null";break}case"any":break;case"unknown":break;case"undefined":{if(this.unrepresentable==="throw")throw new Error("Undefined cannot be represented in JSON Schema");break}case"void":{if(this.unrepresentable==="throw")throw new Error("Void cannot be represented in JSON Schema");break}case"never":{f.not={};break}case"date":{if(this.unrepresentable==="throw")throw new Error("Date cannot be represented in JSON Schema");break}case"array":{let m=f,{minimum:h,maximum:g}=e._zod.bag;typeof h=="number"&&(m.minItems=h),typeof g=="number"&&(m.maxItems=g),m.type="array",m.items=this.process(s.element,{...d,path:[...d.path,"items"]});break}case"object":{let m=f;m.type="object",m.properties={};let h=s.shape;for(let b in h)m.properties[b]=this.process(h[b],{...d,path:[...d.path,"properties",b]});let g=new Set(Object.keys(h)),y=new Set([...g].filter(b=>{let S=s.shape[b]._zod;return this.io==="input"?S.optin===void 0:S.optout===void 0}));y.size>0&&(m.required=Array.from(y)),s.catchall?._zod.def.type==="never"?m.additionalProperties=!1:s.catchall?s.catchall&&(m.additionalProperties=this.process(s.catchall,{...d,path:[...d.path,"additionalProperties"]})):this.io==="output"&&(m.additionalProperties=!1);break}case"union":{let m=f;m.anyOf=s.options.map((h,g)=>this.process(h,{...d,path:[...d.path,"anyOf",g]}));break}case"intersection":{let m=f,h=this.process(s.left,{...d,path:[...d.path,"allOf",0]}),g=this.process(s.right,{...d,path:[...d.path,"allOf",1]}),y=S=>"allOf"in S&&Object.keys(S).length===1,b=[...y(h)?h.allOf:[h],...y(g)?g.allOf:[g]];m.allOf=b;break}case"tuple":{let m=f;m.type="array";let h=s.items.map((b,S)=>this.process(b,{...d,path:[...d.path,"prefixItems",S]}));if(this.target==="draft-2020-12"?m.prefixItems=h:m.items=h,s.rest){let b=this.process(s.rest,{...d,path:[...d.path,"items"]});this.target==="draft-2020-12"?m.items=b:m.additionalItems=b}s.rest&&(m.items=this.process(s.rest,{...d,path:[...d.path,"items"]}));let{minimum:g,maximum:y}=e._zod.bag;typeof g=="number"&&(m.minItems=g),typeof y=="number"&&(m.maxItems=y);break}case"record":{let m=f;m.type="object",m.propertyNames=this.process(s.keyType,{...d,path:[...d.path,"propertyNames"]}),m.additionalProperties=this.process(s.valueType,{...d,path:[...d.path,"additionalProperties"]});break}case"map":{if(this.unrepresentable==="throw")throw new Error("Map cannot be represented in JSON Schema");break}case"set":{if(this.unrepresentable==="throw")throw new Error("Set cannot be represented in JSON Schema");break}case"enum":{let m=f,h=Wd(s.entries);h.every(g=>typeof g=="number")&&(m.type="number"),h.every(g=>typeof g=="string")&&(m.type="string"),m.enum=h;break}case"literal":{let m=f,h=[];for(let g of s.values)if(g===void 0){if(this.unrepresentable==="throw")throw new Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof g=="bigint"){if(this.unrepresentable==="throw")throw new Error("BigInt literals cannot be represented in JSON Schema");h.push(Number(g))}else h.push(g);if(h.length!==0)if(h.length===1){let g=h[0];m.type=g===null?"null":typeof g,m.const=g}else h.every(g=>typeof g=="number")&&(m.type="number"),h.every(g=>typeof g=="string")&&(m.type="string"),h.every(g=>typeof g=="boolean")&&(m.type="string"),h.every(g=>g===null)&&(m.type="null"),m.enum=h;break}case"file":{let m=f,h={type:"string",format:"binary",contentEncoding:"binary"},{minimum:g,maximum:y,mime:b}=e._zod.bag;g!==void 0&&(h.minLength=g),y!==void 0&&(h.maxLength=y),b?b.length===1?(h.contentMediaType=b[0],Object.assign(m,h)):m.anyOf=b.map(S=>({...h,contentMediaType:S})):Object.assign(m,h);break}case"transform":{if(this.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema");break}case"nullable":{let m=this.process(s.innerType,d);f.anyOf=[m,{type:"null"}];break}case"nonoptional":{this.process(s.innerType,d),a.ref=s.innerType;break}case"success":{let m=f;m.type="boolean";break}case"default":{this.process(s.innerType,d),a.ref=s.innerType,f.default=JSON.parse(JSON.stringify(s.defaultValue));break}case"prefault":{this.process(s.innerType,d),a.ref=s.innerType,this.io==="input"&&(f._prefault=JSON.parse(JSON.stringify(s.defaultValue)));break}case"catch":{this.process(s.innerType,d),a.ref=s.innerType;let m;try{m=s.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}f.default=m;break}case"nan":{if(this.unrepresentable==="throw")throw new Error("NaN cannot be represented in JSON Schema");break}case"template_literal":{let m=f,h=e._zod.pattern;if(!h)throw new Error("Pattern not found in template literal");m.type="string",m.pattern=h.source;break}case"pipe":{let m=this.io==="input"?s.in._zod.def.type==="transform"?s.out:s.in:s.out;this.process(m,d),a.ref=m;break}case"readonly":{this.process(s.innerType,d),a.ref=s.innerType,f.readOnly=!0;break}case"promise":{this.process(s.innerType,d),a.ref=s.innerType;break}case"optional":{this.process(s.innerType,d),a.ref=s.innerType;break}case"lazy":{let m=e._zod.innerType;this.process(m,d),a.ref=m;break}case"custom":{if(this.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema");break}default:}}}let l=this.metadataRegistry.get(e);return l&&Object.assign(a.schema,l),this.io==="input"&&Kn(e)&&(delete a.schema.examples,delete a.schema.default),this.io==="input"&&a.schema._prefault&&((r=a.schema).default??(r.default=a.schema._prefault)),delete a.schema._prefault,this.seen.get(e).schema}emit(e,t){let r={cycles:t?.cycles??"ref",reused:t?.reused??"inline",external:t?.external??void 0},s=this.seen.get(e);if(!s)throw new Error("Unprocessed schema. This is a bug in Zod.");let i=u=>{let d=this.target==="draft-2020-12"?"$defs":"definitions";if(r.external){let h=r.external.registry.get(u[0])?.id,g=r.external.uri??(b=>b);if(h)return{ref:g(h)};let y=u[1].defId??u[1].schema.id??`schema${this.counter++}`;return u[1].defId=y,{defId:y,ref:`${g("__shared")}#/${d}/${y}`}}if(u[1]===s)return{ref:"#"};let f=`#/${d}/`,m=u[1].schema.id??`__schema${this.counter++}`;return{defId:m,ref:f+m}},o=u=>{if(u[1].schema.$ref)return;let d=u[1],{ref:p,defId:f}=i(u);d.def={...d.schema},f&&(d.defId=f);let m=d.schema;for(let h in m)delete m[h];m.$ref=p};if(r.cycles==="throw")for(let u of this.seen.entries()){let d=u[1];if(d.cycle)throw new Error(`Cycle detected: #/${d.cycle?.join("/")}/<root>
|
|
895
895
|
|
|
896
|
-
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let u of this.seen.entries()){let d=u[1];if(e===u[0]){o(u);continue}if(r.external){let f=r.external.registry.get(u[0])?.id;if(e!==u[0]&&f){o(u);continue}}if(this.metadataRegistry.get(u[0])?.id){o(u);continue}if(d.cycle){o(u);continue}if(d.count>1&&r.reused==="ref"){o(u);continue}}let a=(u,d)=>{let p=this.seen.get(u),f=p.def??p.schema,m={...f};if(p.ref===null)return;let h=p.ref;if(p.ref=null,h){a(h,d);let g=this.seen.get(h).schema;g.$ref&&d.target==="draft-7"?(f.allOf=f.allOf??[],f.allOf.push(g)):(Object.assign(f,g),Object.assign(f,m))}p.isParent||this.override({zodSchema:u,jsonSchema:f,path:p.path??[]})};for(let u of[...this.seen.entries()].reverse())a(u[0],{target:this.target});let c={};if(this.target==="draft-2020-12"?c.$schema="https://json-schema.org/draft/2020-12/schema":this.target==="draft-7"?c.$schema="http://json-schema.org/draft-07/schema#":console.warn(`Invalid target: ${this.target}`),r.external?.uri){let u=r.external.registry.get(e)?.id;if(!u)throw new Error("Schema is missing an `id` property");c.$id=r.external.uri(u)}Object.assign(c,s.def);let l=r.external?.defs??{};for(let u of this.seen.entries()){let d=u[1];d.def&&d.defId&&(l[d.defId]=d.def)}r.external||Object.keys(l).length>0&&(this.target==="draft-2020-12"?c.$defs=l:c.definitions=l);try{return JSON.parse(JSON.stringify(c))}catch{throw new Error("Error converting schema to JSON.")}}};function cw(n,e){if(n instanceof Qd){let r=new Eh(e),s={};for(let a of n._idmap.entries()){let[c,l]=a;r.process(l)}let i={},o={registry:n,uri:e?.uri,defs:s};for(let a of n._idmap.entries()){let[c,l]=a;i[c]=r.emit(l,{...e,external:o})}if(Object.keys(s).length>0){let a=r.target==="draft-2020-12"?"$defs":"definitions";i.__shared={[a]:s}}return{schemas:i}}let t=new Eh(e);return t.process(n),t.emit(n,e)}function Kn(n,e){let t=e??{seen:new Set};if(t.seen.has(n))return!1;t.seen.add(n);let s=n._zod.def;switch(s.type){case"string":case"number":case"bigint":case"boolean":case"date":case"symbol":case"undefined":case"null":case"any":case"unknown":case"never":case"void":case"literal":case"enum":case"nan":case"file":case"template_literal":return!1;case"array":return Kn(s.element,t);case"object":{for(let i in s.shape)if(Kn(s.shape[i],t))return!0;return!1}case"union":{for(let i of s.options)if(Kn(i,t))return!0;return!1}case"intersection":return Kn(s.left,t)||Kn(s.right,t);case"tuple":{for(let i of s.items)if(Kn(i,t))return!0;return!!(s.rest&&Kn(s.rest,t))}case"record":return Kn(s.keyType,t)||Kn(s.valueType,t);case"map":return Kn(s.keyType,t)||Kn(s.valueType,t);case"set":return Kn(s.valueType,t);case"promise":case"optional":case"nonoptional":case"nullable":case"readonly":return Kn(s.innerType,t);case"lazy":return Kn(s.getter(),t);case"default":return Kn(s.innerType,t);case"prefault":return Kn(s.innerType,t);case"custom":return!1;case"transform":return!0;case"pipe":return Kn(s.in,t)||Kn(s.out,t);case"success":return!1;case"catch":return!1;default:}throw new Error(`Unknown schema type: ${s.type}`)}var _H=ee("ZodMiniType",(n,e)=>{if(!n._zod)throw new Error("Uninitialized schema in ZodMiniType.");qt.init(n,e),n.def=e,n.parse=(t,r)=>Ex(n,t,r,{callee:n.parse}),n.safeParse=(t,r)=>Za(n,t,r),n.parseAsync=async(t,r)=>Px(n,t,r,{callee:n.parseAsync}),n.safeParseAsync=async(t,r)=>Ga(n,t,r),n.check=(...t)=>n.clone({...e,checks:[...e.checks??[],...t.map(r=>typeof r=="function"?{_zod:{check:r,def:{check:"custom"},onattach:[]}}:r)]}),n.clone=(t,r)=>ys(n,t,r),n.brand=()=>n,n.register=((t,r)=>(t.add(n,r),n))});var wH=ee("ZodMiniObject",(n,e)=>{bh.init(n,e),_H.init(n,e),kt.defineLazy(n,"shape",()=>e.shape)});function lw(n,e){let t={type:"object",get shape(){return kt.assignProp(this,"shape",{...n}),this.shape},...kt.normalizeParams(e)};return new wH(t)}function zs(n){return!!n._zod}function Xa(n){let e=Object.values(n);if(e.length===0)return lw({});let t=e.every(zs),r=e.every(s=>!zs(s));if(t)return lw(n);if(r)return vI(n);throw new Error("Mixed Zod versions detected in object shape.")}function Mo(n,e){return zs(n)?Za(n,e):n.safeParse(e)}async function Th(n,e){return zs(n)?await Ga(n,e):await n.safeParseAsync(e)}function Do(n){if(!n)return;let e;if(zs(n)?e=n._zod?.def?.shape:e=n.shape,!!e){if(typeof e=="function")try{return e()}catch{return}return e}}function bl(n){if(n){if(typeof n=="object"){let e=n,t=n;if(!e._def&&!t._zod){let r=Object.values(n);if(r.length>0&&r.every(s=>typeof s=="object"&&s!==null&&(s._def!==void 0||s._zod!==void 0||typeof s.parse=="function")))return Xa(n)}}if(zs(n)){let t=n._zod?.def;if(t&&(t.type==="object"||t.shape!==void 0))return n}else if(n.shape!==void 0)return n}}function Ph(n){if(n&&typeof n=="object"){if("message"in n&&typeof n.message=="string")return n.message;if("issues"in n&&Array.isArray(n.issues)&&n.issues.length>0){let e=n.issues[0];if(e&&typeof e=="object"&&"message"in e)return String(e.message)}try{return JSON.stringify(n)}catch{return String(n)}}return String(n)}function zA(n){return n.description}function BA(n){if(zs(n))return n._zod?.def?.type==="optional";let e=n;return typeof n.isOptional=="function"?n.isOptional():e._def?.typeName==="ZodOptional"}function Ch(n){if(zs(n)){let i=n._zod?.def;if(i){if(i.value!==void 0)return i.value;if(Array.isArray(i.values)&&i.values.length>0)return i.values[0]}}let t=n._def;if(t){if(t.value!==void 0)return t.value;if(Array.isArray(t.values)&&t.values.length>0)return t.values[0]}let r=n.value;if(r!==void 0)return r}var tp={};Lt(tp,{ZodISODate:()=>HA,ZodISODateTime:()=>qA,ZodISODuration:()=>UA,ZodISOTime:()=>WA,date:()=>dw,datetime:()=>uw,duration:()=>fw,time:()=>pw});var qA=ee("ZodISODateTime",(n,e)=>{TA.init(n,e),pn.init(n,e)});function uw(n){return DA(qA,n)}var HA=ee("ZodISODate",(n,e)=>{PA.init(n,e),pn.init(n,e)});function dw(n){return FA(HA,n)}var WA=ee("ZodISOTime",(n,e)=>{CA.init(n,e),pn.init(n,e)});function pw(n){return OA(WA,n)}var UA=ee("ZodISODuration",(n,e)=>{IA.init(n,e),pn.init(n,e)});function fw(n){return $A(UA,n)}var KA=(n,e)=>{fh.init(n,e),n.name="ZodError",Object.defineProperties(n,{format:{value:t=>Rx(n,t)},flatten:{value:t=>vx(n,t)},addIssue:{value:t=>n.issues.push(t)},addIssues:{value:t=>n.issues.push(...t)},isEmpty:{get(){return n.issues.length===0}}})},Bne=ee("ZodError",KA),np=ee("ZodError",KA,{Parent:Error});var ZA=kx(np),GA=Tx(np),JA=Cx(np),VA=Ix(np);var _n=ee("ZodType",(n,e)=>(qt.init(n,e),n.def=e,Object.defineProperty(n,"_def",{value:e}),n.check=(...t)=>n.clone({...e,checks:[...e.checks??[],...t.map(r=>typeof r=="function"?{_zod:{check:r,def:{check:"custom"},onattach:[]}}:r)]}),n.clone=(t,r)=>ys(n,t,r),n.brand=()=>n,n.register=((t,r)=>(t.add(n,r),n)),n.parse=(t,r)=>ZA(n,t,r,{callee:n.parse}),n.safeParse=(t,r)=>JA(n,t,r),n.parseAsync=async(t,r)=>GA(n,t,r,{callee:n.parseAsync}),n.safeParseAsync=async(t,r)=>VA(n,t,r),n.spa=n.safeParseAsync,n.refine=(t,r)=>n.check(SW(t,r)),n.superRefine=t=>n.check(xW(t)),n.overwrite=t=>n.check(Ja(t)),n.optional=()=>mn(n),n.nullable=()=>YA(n),n.nullish=()=>mn(YA(n)),n.nonoptional=t=>pW(n,t),n.array=()=>Et(n),n.or=t=>ln([n,t]),n.and=t=>Ah(n,t),n.transform=t=>hw(n,iN(t)),n.default=t=>lW(n,t),n.prefault=t=>dW(n,t),n.catch=t=>mW(n,t),n.pipe=t=>hw(n,t),n.readonly=()=>yW(n),n.describe=t=>{let r=n.clone();return No.add(r,{description:t}),r},Object.defineProperty(n,"description",{get(){return No.get(n)?.description},configurable:!0}),n.meta=(...t)=>{if(t.length===0)return No.get(n);let r=n.clone();return No.add(r,t[0]),r},n.isOptional=()=>n.safeParse(void 0).success,n.isNullable=()=>n.safeParse(null).success,n)),eN=ee("_ZodString",(n,e)=>{Xd.init(n,e),_n.init(n,e);let t=n._zod.bag;n.format=t.format??null,n.minLength=t.minimum??null,n.maxLength=t.maximum??null,n.regex=(...r)=>n.check(V_(...r)),n.includes=(...r)=>n.check(Y_(...r)),n.startsWith=(...r)=>n.check(ew(...r)),n.endsWith=(...r)=>n.check(tw(...r)),n.min=(...r)=>n.check(yl(...r)),n.max=(...r)=>n.check(Rh(...r)),n.length=(...r)=>n.check(kh(...r)),n.nonempty=(...r)=>n.check(yl(1,...r)),n.lowercase=r=>n.check(X_(r)),n.uppercase=r=>n.check(Q_(r)),n.trim=()=>n.check(rw()),n.normalize=(...r)=>n.check(nw(...r)),n.toLowerCase=()=>n.check(sw()),n.toUpperCase=()=>n.check(iw())}),AH=ee("ZodString",(n,e)=>{Xd.init(n,e),eN.init(n,e),n.email=t=>n.check(v_(NH,t)),n.url=t=>n.check(P_(MH,t)),n.jwt=t=>n.check(H_(GH,t)),n.emoji=t=>n.check(C_(DH,t)),n.guid=t=>n.check(xh(XA,t)),n.uuid=t=>n.check(R_(Ih,t)),n.uuidv4=t=>n.check(k_(Ih,t)),n.uuidv6=t=>n.check(E_(Ih,t)),n.uuidv7=t=>n.check(T_(Ih,t)),n.nanoid=t=>n.check(I_(FH,t)),n.guid=t=>n.check(xh(XA,t)),n.cuid=t=>n.check(A_(OH,t)),n.cuid2=t=>n.check(N_($H,t)),n.ulid=t=>n.check(M_(jH,t)),n.base64=t=>n.check(z_(UH,t)),n.base64url=t=>n.check(B_(KH,t)),n.xid=t=>n.check(D_(LH,t)),n.ksuid=t=>n.check(F_(zH,t)),n.ipv4=t=>n.check(O_(BH,t)),n.ipv6=t=>n.check($_(qH,t)),n.cidrv4=t=>n.check(j_(HH,t)),n.cidrv6=t=>n.check(L_(WH,t)),n.e164=t=>n.check(q_(ZH,t)),n.datetime=t=>n.check(uw(t)),n.date=t=>n.check(dw(t)),n.time=t=>n.check(pw(t)),n.duration=t=>n.check(fw(t))});function Y(n){return w_(AH,n)}var pn=ee("ZodStringFormat",(n,e)=>{Yt.init(n,e),eN.init(n,e)}),NH=ee("ZodEmail",(n,e)=>{jx.init(n,e),pn.init(n,e)});var XA=ee("ZodGUID",(n,e)=>{Ox.init(n,e),pn.init(n,e)});var Ih=ee("ZodUUID",(n,e)=>{$x.init(n,e),pn.init(n,e)});var MH=ee("ZodURL",(n,e)=>{Lx.init(n,e),pn.init(n,e)});var DH=ee("ZodEmoji",(n,e)=>{zx.init(n,e),pn.init(n,e)});var FH=ee("ZodNanoID",(n,e)=>{Bx.init(n,e),pn.init(n,e)});var OH=ee("ZodCUID",(n,e)=>{qx.init(n,e),pn.init(n,e)});var $H=ee("ZodCUID2",(n,e)=>{Hx.init(n,e),pn.init(n,e)});var jH=ee("ZodULID",(n,e)=>{Wx.init(n,e),pn.init(n,e)});var LH=ee("ZodXID",(n,e)=>{Ux.init(n,e),pn.init(n,e)});var zH=ee("ZodKSUID",(n,e)=>{Kx.init(n,e),pn.init(n,e)});var BH=ee("ZodIPv4",(n,e)=>{Zx.init(n,e),pn.init(n,e)});var qH=ee("ZodIPv6",(n,e)=>{Gx.init(n,e),pn.init(n,e)});var HH=ee("ZodCIDRv4",(n,e)=>{Jx.init(n,e),pn.init(n,e)});var WH=ee("ZodCIDRv6",(n,e)=>{Vx.init(n,e),pn.init(n,e)});var UH=ee("ZodBase64",(n,e)=>{Xx.init(n,e),pn.init(n,e)});var KH=ee("ZodBase64URL",(n,e)=>{Qx.init(n,e),pn.init(n,e)});var ZH=ee("ZodE164",(n,e)=>{Yx.init(n,e),pn.init(n,e)});var GH=ee("ZodJWT",(n,e)=>{e_.init(n,e),pn.init(n,e)});var tN=ee("ZodNumber",(n,e)=>{yh.init(n,e),_n.init(n,e),n.gt=(r,s)=>n.check(wh(r,s)),n.gte=(r,s)=>n.check(ep(r,s)),n.min=(r,s)=>n.check(ep(r,s)),n.lt=(r,s)=>n.check(_h(r,s)),n.lte=(r,s)=>n.check(Yd(r,s)),n.max=(r,s)=>n.check(Yd(r,s)),n.int=r=>n.check(QA(r)),n.safe=r=>n.check(QA(r)),n.positive=r=>n.check(wh(0,r)),n.nonnegative=r=>n.check(ep(0,r)),n.negative=r=>n.check(_h(0,r)),n.nonpositive=r=>n.check(Yd(0,r)),n.multipleOf=(r,s)=>n.check(vh(r,s)),n.step=(r,s)=>n.check(vh(r,s)),n.finite=()=>n;let t=n._zod.bag;n.minValue=Math.max(t.minimum??Number.NEGATIVE_INFINITY,t.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,n.maxValue=Math.min(t.maximum??Number.POSITIVE_INFINITY,t.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,n.isInt=(t.format??"").includes("int")||Number.isSafeInteger(t.multipleOf??.5),n.isFinite=!0,n.format=t.format??null});function zt(n){return W_(tN,n)}var JH=ee("ZodNumberFormat",(n,e)=>{t_.init(n,e),tN.init(n,e)});function QA(n){return U_(JH,n)}var VH=ee("ZodBoolean",(n,e)=>{n_.init(n,e),_n.init(n,e)});function er(n){return K_(VH,n)}var XH=ee("ZodNull",(n,e)=>{r_.init(n,e),_n.init(n,e)});function nN(n){return Z_(XH,n)}var QH=ee("ZodUnknown",(n,e)=>{s_.init(n,e),_n.init(n,e)});function fn(){return G_(QH)}var YH=ee("ZodNever",(n,e)=>{i_.init(n,e),_n.init(n,e)});function eW(n){return J_(YH,n)}var tW=ee("ZodArray",(n,e)=>{o_.init(n,e),_n.init(n,e),n.element=e.element,n.min=(t,r)=>n.check(yl(t,r)),n.nonempty=t=>n.check(yl(1,t)),n.max=(t,r)=>n.check(Rh(t,r)),n.length=(t,r)=>n.check(kh(t,r)),n.unwrap=()=>n.element});function Et(n,e){return jA(tW,n,e)}var rN=ee("ZodObject",(n,e)=>{bh.init(n,e),_n.init(n,e),kt.defineLazy(n,"shape",()=>e.shape),n.keyof=()=>Ur(Object.keys(n._zod.def.shape)),n.catchall=t=>n.clone({...n._zod.def,catchall:t}),n.passthrough=()=>n.clone({...n._zod.def,catchall:fn()}),n.loose=()=>n.clone({...n._zod.def,catchall:fn()}),n.strict=()=>n.clone({...n._zod.def,catchall:eW()}),n.strip=()=>n.clone({...n._zod.def,catchall:void 0}),n.extend=t=>kt.extend(n,t),n.merge=t=>kt.merge(n,t),n.pick=t=>kt.pick(n,t),n.omit=t=>kt.omit(n,t),n.partial=(...t)=>kt.partial(oN,n,t[0]),n.required=(...t)=>kt.required(aN,n,t[0])});function Ce(n,e){let t={type:"object",get shape(){return kt.assignProp(this,"shape",{...n}),this.shape},...kt.normalizeParams(e)};return new rN(t)}function Ar(n,e){return new rN({type:"object",get shape(){return kt.assignProp(this,"shape",{...n}),this.shape},catchall:fn(),...kt.normalizeParams(e)})}var sN=ee("ZodUnion",(n,e)=>{Sh.init(n,e),_n.init(n,e),n.options=e.options});function ln(n,e){return new sN({type:"union",options:n,...kt.normalizeParams(e)})}var nW=ee("ZodDiscriminatedUnion",(n,e)=>{sN.init(n,e),a_.init(n,e)});function gw(n,e,t){return new nW({type:"union",options:e,discriminator:n,...kt.normalizeParams(t)})}var rW=ee("ZodIntersection",(n,e)=>{c_.init(n,e),_n.init(n,e)});function Ah(n,e){return new rW({type:"intersection",left:n,right:e})}var sW=ee("ZodRecord",(n,e)=>{l_.init(n,e),_n.init(n,e),n.keyType=e.keyType,n.valueType=e.valueType});function en(n,e,t){return new sW({type:"record",keyType:n,valueType:e,...kt.normalizeParams(t)})}var mw=ee("ZodEnum",(n,e)=>{u_.init(n,e),_n.init(n,e),n.enum=e.entries,n.options=Object.values(e.entries);let t=new Set(Object.keys(e.entries));n.extract=(r,s)=>{let i={};for(let o of r)if(t.has(o))i[o]=e.entries[o];else throw new Error(`Key ${o} not found in enum`);return new mw({...e,checks:[],...kt.normalizeParams(s),entries:i})},n.exclude=(r,s)=>{let i={...e.entries};for(let o of r)if(t.has(o))delete i[o];else throw new Error(`Key ${o} not found in enum`);return new mw({...e,checks:[],...kt.normalizeParams(s),entries:i})}});function Ur(n,e){let t=Array.isArray(n)?Object.fromEntries(n.map(r=>[r,r])):n;return new mw({type:"enum",entries:t,...kt.normalizeParams(e)})}var iW=ee("ZodLiteral",(n,e)=>{d_.init(n,e),_n.init(n,e),n.values=new Set(e.values),Object.defineProperty(n,"value",{get(){if(e.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return e.values[0]}})});function Le(n,e){return new iW({type:"literal",values:Array.isArray(n)?n:[n],...kt.normalizeParams(e)})}var oW=ee("ZodTransform",(n,e)=>{p_.init(n,e),_n.init(n,e),n._zod.parse=(t,r)=>{t.addIssue=i=>{if(typeof i=="string")t.issues.push(kt.issue(i,t.value,e));else{let o=i;o.fatal&&(o.continue=!1),o.code??(o.code="custom"),o.input??(o.input=t.value),o.inst??(o.inst=n),o.continue??(o.continue=!0),t.issues.push(kt.issue(o))}};let s=e.transform(t.value,t);return s instanceof Promise?s.then(i=>(t.value=i,t)):(t.value=s,t)}});function iN(n){return new oW({type:"transform",transform:n})}var oN=ee("ZodOptional",(n,e)=>{f_.init(n,e),_n.init(n,e),n.unwrap=()=>n._zod.def.innerType});function mn(n){return new oN({type:"optional",innerType:n})}var aW=ee("ZodNullable",(n,e)=>{m_.init(n,e),_n.init(n,e),n.unwrap=()=>n._zod.def.innerType});function YA(n){return new aW({type:"nullable",innerType:n})}var cW=ee("ZodDefault",(n,e)=>{h_.init(n,e),_n.init(n,e),n.unwrap=()=>n._zod.def.innerType,n.removeDefault=n.unwrap});function lW(n,e){return new cW({type:"default",innerType:n,get defaultValue(){return typeof e=="function"?e():e}})}var uW=ee("ZodPrefault",(n,e)=>{g_.init(n,e),_n.init(n,e),n.unwrap=()=>n._zod.def.innerType});function dW(n,e){return new uW({type:"prefault",innerType:n,get defaultValue(){return typeof e=="function"?e():e}})}var aN=ee("ZodNonOptional",(n,e)=>{y_.init(n,e),_n.init(n,e),n.unwrap=()=>n._zod.def.innerType});function pW(n,e){return new aN({type:"nonoptional",innerType:n,...kt.normalizeParams(e)})}var fW=ee("ZodCatch",(n,e)=>{b_.init(n,e),_n.init(n,e),n.unwrap=()=>n._zod.def.innerType,n.removeCatch=n.unwrap});function mW(n,e){return new fW({type:"catch",innerType:n,catchValue:typeof e=="function"?e:()=>e})}var hW=ee("ZodPipe",(n,e)=>{S_.init(n,e),_n.init(n,e),n.in=e.in,n.out=e.out});function hw(n,e){return new hW({type:"pipe",in:n,out:e})}var gW=ee("ZodReadonly",(n,e)=>{x_.init(n,e),_n.init(n,e)});function yW(n){return new gW({type:"readonly",innerType:n})}var cN=ee("ZodCustom",(n,e)=>{__.init(n,e),_n.init(n,e)});function bW(n){let e=new ir({check:"custom"});return e._zod.check=n,e}function lN(n,e){return ow(cN,n??(()=>!0),e)}function SW(n,e={}){return aw(cN,n,e)}function xW(n){let e=bW(t=>(t.addIssue=r=>{if(typeof r=="string")t.issues.push(kt.issue(r,t.value,e._zod.def));else{let s=r;s.fatal&&(s.continue=!1),s.code??(s.code="custom"),s.input??(s.input=t.value),s.inst??(s.inst=e),s.continue??(s.continue=!e._zod.def.abort),t.issues.push(kt.issue(s))}},n(t.value,t)));return e}function yw(n,e){return hw(iN(n),e)}gs(NA());var Sw="2025-11-25",uN="2025-03-26",xl=[Sw,"2025-06-18","2025-03-26","2024-11-05","2024-10-07"],Fo="io.modelcontextprotocol/related-task",Mh="2.0",Zn=lN(n=>n!==null&&(typeof n=="object"||typeof n=="function")),dN=ln([Y(),zt().int()]),pN=Y(),tre=Ar({ttl:zt().optional(),pollInterval:zt().optional()}),_W=Ce({ttl:zt().optional()}),wW=Ce({taskId:Y()}),xw=Ar({progressToken:dN.optional(),[Fo]:wW.optional()}),bs=Ce({_meta:xw.optional()}),rp=bs.extend({task:_W.optional()}),fN=n=>rp.safeParse(n).success,or=Ce({method:Y(),params:bs.loose().optional()}),Bs=Ce({_meta:xw.optional()}),qs=Ce({method:Y(),params:Bs.loose().optional()}),ar=Ar({_meta:xw.optional()}),Dh=ln([Y(),zt().int()]),mN=Ce({jsonrpc:Le(Mh),id:Dh,...or.shape}).strict(),Oo=n=>mN.safeParse(n).success,hN=Ce({jsonrpc:Le(Mh),...qs.shape}).strict(),gN=n=>hN.safeParse(n).success,_w=Ce({jsonrpc:Le(Mh),id:Dh,result:ar}).strict(),ro=n=>_w.safeParse(n).success;var Ue;(function(n){n[n.ConnectionClosed=-32e3]="ConnectionClosed",n[n.RequestTimeout=-32001]="RequestTimeout",n[n.ParseError=-32700]="ParseError",n[n.InvalidRequest=-32600]="InvalidRequest",n[n.MethodNotFound=-32601]="MethodNotFound",n[n.InvalidParams=-32602]="InvalidParams",n[n.InternalError=-32603]="InternalError",n[n.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(Ue||(Ue={}));var ww=Ce({jsonrpc:Le(Mh),id:Dh.optional(),error:Ce({code:zt().int(),message:Y(),data:fn().optional()})}).strict();var _l=n=>ww.safeParse(n).success;var sp=ln([mN,hN,_w,ww]),nre=ln([_w,ww]),Fh=ar.strict(),vW=Bs.extend({requestId:Dh.optional(),reason:Y().optional()}),Oh=qs.extend({method:Le("notifications/cancelled"),params:vW}),RW=Ce({src:Y(),mimeType:Y().optional(),sizes:Et(Y()).optional(),theme:Ur(["light","dark"]).optional()}),ip=Ce({icons:Et(RW).optional()}),Sl=Ce({name:Y(),title:Y().optional()}),yN=Sl.extend({...Sl.shape,...ip.shape,version:Y(),websiteUrl:Y().optional(),description:Y().optional()}),kW=Ah(Ce({applyDefaults:er().optional()}),en(Y(),fn())),EW=yw(n=>n&&typeof n=="object"&&!Array.isArray(n)&&Object.keys(n).length===0?{form:{}}:n,Ah(Ce({form:kW.optional(),url:Zn.optional()}),en(Y(),fn()).optional())),TW=Ar({list:Zn.optional(),cancel:Zn.optional(),requests:Ar({sampling:Ar({createMessage:Zn.optional()}).optional(),elicitation:Ar({create:Zn.optional()}).optional()}).optional()}),PW=Ar({list:Zn.optional(),cancel:Zn.optional(),requests:Ar({tools:Ar({call:Zn.optional()}).optional()}).optional()}),CW=Ce({experimental:en(Y(),Zn).optional(),sampling:Ce({context:Zn.optional(),tools:Zn.optional()}).optional(),elicitation:EW.optional(),roots:Ce({listChanged:er().optional()}).optional(),tasks:TW.optional(),extensions:en(Y(),Zn).optional()}),IW=bs.extend({protocolVersion:Y(),capabilities:CW,clientInfo:yN}),$h=or.extend({method:Le("initialize"),params:IW}),vw=n=>$h.safeParse(n).success,AW=Ce({experimental:en(Y(),Zn).optional(),logging:Zn.optional(),completions:Zn.optional(),prompts:Ce({listChanged:er().optional()}).optional(),resources:Ce({subscribe:er().optional(),listChanged:er().optional()}).optional(),tools:Ce({listChanged:er().optional()}).optional(),tasks:PW.optional(),extensions:en(Y(),Zn).optional()}),NW=ar.extend({protocolVersion:Y(),capabilities:AW,serverInfo:yN,instructions:Y().optional()}),Rw=qs.extend({method:Le("notifications/initialized"),params:Bs.optional()});var jh=or.extend({method:Le("ping"),params:bs.optional()}),MW=Ce({progress:zt(),total:mn(zt()),message:mn(Y())}),DW=Ce({...Bs.shape,...MW.shape,progressToken:dN}),Lh=qs.extend({method:Le("notifications/progress"),params:DW}),FW=bs.extend({cursor:pN.optional()}),op=or.extend({params:FW.optional()}),ap=ar.extend({nextCursor:pN.optional()}),OW=Ur(["working","input_required","completed","failed","cancelled"]),cp=Ce({taskId:Y(),status:OW,ttl:ln([zt(),nN()]),createdAt:Y(),lastUpdatedAt:Y(),pollInterval:mn(zt()),statusMessage:mn(Y())}),wl=ar.extend({task:cp}),$W=Bs.merge(cp),lp=qs.extend({method:Le("notifications/tasks/status"),params:$W}),zh=or.extend({method:Le("tasks/get"),params:bs.extend({taskId:Y()})}),Bh=ar.merge(cp),qh=or.extend({method:Le("tasks/result"),params:bs.extend({taskId:Y()})}),rre=ar.loose(),Hh=op.extend({method:Le("tasks/list")}),Wh=ap.extend({tasks:Et(cp)}),Uh=or.extend({method:Le("tasks/cancel"),params:bs.extend({taskId:Y()})}),bN=ar.merge(cp),SN=Ce({uri:Y(),mimeType:mn(Y()),_meta:en(Y(),fn()).optional()}),xN=SN.extend({text:Y()}),kw=Y().refine(n=>{try{return atob(n),!0}catch{return!1}},{message:"Invalid Base64 string"}),_N=SN.extend({blob:kw}),up=Ur(["user","assistant"]),vl=Ce({audience:Et(up).optional(),priority:zt().min(0).max(1).optional(),lastModified:tp.datetime({offset:!0}).optional()}),wN=Ce({...Sl.shape,...ip.shape,uri:Y(),description:mn(Y()),mimeType:mn(Y()),size:mn(zt()),annotations:vl.optional(),_meta:mn(Ar({}))}),jW=Ce({...Sl.shape,...ip.shape,uriTemplate:Y(),description:mn(Y()),mimeType:mn(Y()),annotations:vl.optional(),_meta:mn(Ar({}))}),Kh=op.extend({method:Le("resources/list")}),LW=ap.extend({resources:Et(wN)}),Zh=op.extend({method:Le("resources/templates/list")}),zW=ap.extend({resourceTemplates:Et(jW)}),Ew=bs.extend({uri:Y()}),BW=Ew,Gh=or.extend({method:Le("resources/read"),params:BW}),qW=ar.extend({contents:Et(ln([xN,_N]))}),HW=qs.extend({method:Le("notifications/resources/list_changed"),params:Bs.optional()}),WW=Ew,UW=or.extend({method:Le("resources/subscribe"),params:WW}),KW=Ew,ZW=or.extend({method:Le("resources/unsubscribe"),params:KW}),GW=Bs.extend({uri:Y()}),JW=qs.extend({method:Le("notifications/resources/updated"),params:GW}),VW=Ce({name:Y(),description:mn(Y()),required:mn(er())}),XW=Ce({...Sl.shape,...ip.shape,description:mn(Y()),arguments:mn(Et(VW)),_meta:mn(Ar({}))}),Jh=op.extend({method:Le("prompts/list")}),QW=ap.extend({prompts:Et(XW)}),YW=bs.extend({name:Y(),arguments:en(Y(),Y()).optional()}),Vh=or.extend({method:Le("prompts/get"),params:YW}),Tw=Ce({type:Le("text"),text:Y(),annotations:vl.optional(),_meta:en(Y(),fn()).optional()}),Pw=Ce({type:Le("image"),data:kw,mimeType:Y(),annotations:vl.optional(),_meta:en(Y(),fn()).optional()}),Cw=Ce({type:Le("audio"),data:kw,mimeType:Y(),annotations:vl.optional(),_meta:en(Y(),fn()).optional()}),eU=Ce({type:Le("tool_use"),name:Y(),id:Y(),input:en(Y(),fn()),_meta:en(Y(),fn()).optional()}),tU=Ce({type:Le("resource"),resource:ln([xN,_N]),annotations:vl.optional(),_meta:en(Y(),fn()).optional()}),nU=wN.extend({type:Le("resource_link")}),Iw=ln([Tw,Pw,Cw,nU,tU]),rU=Ce({role:up,content:Iw}),sU=ar.extend({description:Y().optional(),messages:Et(rU)}),iU=qs.extend({method:Le("notifications/prompts/list_changed"),params:Bs.optional()}),oU=Ce({title:Y().optional(),readOnlyHint:er().optional(),destructiveHint:er().optional(),idempotentHint:er().optional(),openWorldHint:er().optional()}),aU=Ce({taskSupport:Ur(["required","optional","forbidden"]).optional()}),vN=Ce({...Sl.shape,...ip.shape,description:Y().optional(),inputSchema:Ce({type:Le("object"),properties:en(Y(),Zn).optional(),required:Et(Y()).optional()}).catchall(fn()),outputSchema:Ce({type:Le("object"),properties:en(Y(),Zn).optional(),required:Et(Y()).optional()}).catchall(fn()).optional(),annotations:oU.optional(),execution:aU.optional(),_meta:en(Y(),fn()).optional()}),Rl=op.extend({method:Le("tools/list")}),cU=ap.extend({tools:Et(vN)}),Xh=ar.extend({content:Et(Iw).default([]),structuredContent:en(Y(),fn()).optional(),isError:er().optional()}),sre=Xh.or(ar.extend({toolResult:fn()})),lU=rp.extend({name:Y(),arguments:en(Y(),fn()).optional()}),$o=or.extend({method:Le("tools/call"),params:lU}),uU=qs.extend({method:Le("notifications/tools/list_changed"),params:Bs.optional()}),ire=Ce({autoRefresh:er().default(!0),debounceMs:zt().int().nonnegative().default(300)}),dp=Ur(["debug","info","notice","warning","error","critical","alert","emergency"]),dU=bs.extend({level:dp}),Aw=or.extend({method:Le("logging/setLevel"),params:dU}),pU=Bs.extend({level:dp,logger:Y().optional(),data:fn()}),fU=qs.extend({method:Le("notifications/message"),params:pU}),mU=Ce({name:Y().optional()}),hU=Ce({hints:Et(mU).optional(),costPriority:zt().min(0).max(1).optional(),speedPriority:zt().min(0).max(1).optional(),intelligencePriority:zt().min(0).max(1).optional()}),gU=Ce({mode:Ur(["auto","required","none"]).optional()}),yU=Ce({type:Le("tool_result"),toolUseId:Y().describe("The unique identifier for the corresponding tool call."),content:Et(Iw).default([]),structuredContent:Ce({}).loose().optional(),isError:er().optional(),_meta:en(Y(),fn()).optional()}),bU=gw("type",[Tw,Pw,Cw]),Nh=gw("type",[Tw,Pw,Cw,eU,yU]),SU=Ce({role:up,content:ln([Nh,Et(Nh)]),_meta:en(Y(),fn()).optional()}),xU=rp.extend({messages:Et(SU),modelPreferences:hU.optional(),systemPrompt:Y().optional(),includeContext:Ur(["none","thisServer","allServers"]).optional(),temperature:zt().optional(),maxTokens:zt().int(),stopSequences:Et(Y()).optional(),metadata:Zn.optional(),tools:Et(vN).optional(),toolChoice:gU.optional()}),_U=or.extend({method:Le("sampling/createMessage"),params:xU}),pp=ar.extend({model:Y(),stopReason:mn(Ur(["endTurn","stopSequence","maxTokens"]).or(Y())),role:up,content:bU}),Nw=ar.extend({model:Y(),stopReason:mn(Ur(["endTurn","stopSequence","maxTokens","toolUse"]).or(Y())),role:up,content:ln([Nh,Et(Nh)])}),wU=Ce({type:Le("boolean"),title:Y().optional(),description:Y().optional(),default:er().optional()}),vU=Ce({type:Le("string"),title:Y().optional(),description:Y().optional(),minLength:zt().optional(),maxLength:zt().optional(),format:Ur(["email","uri","date","date-time"]).optional(),default:Y().optional()}),RU=Ce({type:Ur(["number","integer"]),title:Y().optional(),description:Y().optional(),minimum:zt().optional(),maximum:zt().optional(),default:zt().optional()}),kU=Ce({type:Le("string"),title:Y().optional(),description:Y().optional(),enum:Et(Y()),default:Y().optional()}),EU=Ce({type:Le("string"),title:Y().optional(),description:Y().optional(),oneOf:Et(Ce({const:Y(),title:Y()})),default:Y().optional()}),TU=Ce({type:Le("string"),title:Y().optional(),description:Y().optional(),enum:Et(Y()),enumNames:Et(Y()).optional(),default:Y().optional()}),PU=ln([kU,EU]),CU=Ce({type:Le("array"),title:Y().optional(),description:Y().optional(),minItems:zt().optional(),maxItems:zt().optional(),items:Ce({type:Le("string"),enum:Et(Y())}),default:Et(Y()).optional()}),IU=Ce({type:Le("array"),title:Y().optional(),description:Y().optional(),minItems:zt().optional(),maxItems:zt().optional(),items:Ce({anyOf:Et(Ce({const:Y(),title:Y()}))}),default:Et(Y()).optional()}),AU=ln([CU,IU]),NU=ln([TU,PU,AU]),MU=ln([NU,wU,vU,RU]),DU=rp.extend({mode:Le("form").optional(),message:Y(),requestedSchema:Ce({type:Le("object"),properties:en(Y(),MU),required:Et(Y()).optional()})}),FU=rp.extend({mode:Le("url"),message:Y(),elicitationId:Y(),url:Y().url()}),OU=ln([DU,FU]),$U=or.extend({method:Le("elicitation/create"),params:OU}),jU=Bs.extend({elicitationId:Y()}),LU=qs.extend({method:Le("notifications/elicitation/complete"),params:jU}),kl=ar.extend({action:Ur(["accept","decline","cancel"]),content:yw(n=>n===null?void 0:n,en(Y(),ln([Y(),zt(),er(),Et(Y())])).optional())}),zU=Ce({type:Le("ref/resource"),uri:Y()});var BU=Ce({type:Le("ref/prompt"),name:Y()}),qU=bs.extend({ref:ln([BU,zU]),argument:Ce({name:Y(),value:Y()}),context:Ce({arguments:en(Y(),Y()).optional()}).optional()}),Qh=or.extend({method:Le("completion/complete"),params:qU});function RN(n){if(n.params.ref.type!=="ref/prompt")throw new TypeError(`Expected CompleteRequestPrompt, but got ${n.params.ref.type}`)}function kN(n){if(n.params.ref.type!=="ref/resource")throw new TypeError(`Expected CompleteRequestResourceTemplate, but got ${n.params.ref.type}`)}var HU=ar.extend({completion:Ar({values:Et(Y()).max(100),total:mn(zt().int()),hasMore:mn(er())})}),WU=Ce({uri:Y().startsWith("file://"),name:Y().optional(),_meta:en(Y(),fn()).optional()}),UU=or.extend({method:Le("roots/list"),params:bs.optional()}),Mw=ar.extend({roots:Et(WU)}),KU=qs.extend({method:Le("notifications/roots/list_changed"),params:Bs.optional()}),ore=ln([jh,$h,Qh,Aw,Vh,Jh,Kh,Zh,Gh,UW,ZW,$o,Rl,zh,qh,Hh,Uh]),are=ln([Oh,Lh,Rw,KU,lp]),cre=ln([Fh,pp,Nw,kl,Mw,Bh,Wh,wl]),lre=ln([jh,_U,$U,UU,zh,qh,Hh,Uh]),ure=ln([Oh,Lh,fU,JW,HW,uU,iU,lp,LU]),dre=ln([Fh,NW,HU,sU,QW,LW,zW,qW,Xh,cU,Bh,Wh,wl]),je=class n extends Error{constructor(e,t,r){super(`MCP error ${e}: ${t}`),this.code=e,this.data=r,this.name="McpError"}static fromError(e,t,r){if(e===Ue.UrlElicitationRequired&&r){let s=r;if(s.elicitations)return new bw(s.elicitations,t)}return new n(e,t,r)}},bw=class extends je{constructor(e,t=`URL elicitation${e.length>1?"s":""} required`){super(Ue.UrlElicitationRequired,t,{elicitations:e})}get elicitations(){return this.data?.elicitations??[]}};function jo(n){return n==="completed"||n==="failed"||n==="cancelled"}var TN=Symbol("Let zodToJsonSchema decide on which parser to use");var EN={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"},PN=n=>typeof n=="string"?{...EN,name:n}:{...EN,...n};var CN=n=>{let e=PN(n),t=e.name!==void 0?[...e.basePath,e.definitionPath,e.name]:e.basePath;return{...e,flags:{hasReferencedOpenAiAnyType:!1},currentPath:t,propertyPath:void 0,seen:new Map(Object.entries(e.definitions).map(([r,s])=>[s._def,{def:s._def,path:[...e.basePath,e.definitionPath,r],jsonSchema:void 0}]))}};function Dw(n,e,t,r){r?.errorMessages&&t&&(n.errorMessage={...n.errorMessage,[e]:t})}function Tt(n,e,t,r,s){n[e]=t,Dw(n,e,r,s)}var Yh=(n,e)=>{let t=0;for(;t<n.length&&t<e.length&&n[t]===e[t];t++);return[(n.length-t).toString(),...e.slice(t)].join("/")};function hn(n){if(n.target!=="openAi")return{};let e=[...n.basePath,n.definitionPath,n.openAiAnyTypeName];return n.flags.hasReferencedOpenAiAnyType=!0,{$ref:n.$refStrategy==="relative"?Yh(e,n.currentPath):e.join("/")}}function IN(n,e){let t={type:"array"};return n.type?._def&&n.type?._def?.typeName!==ue.ZodAny&&(t.items=nt(n.type._def,{...e,currentPath:[...e.currentPath,"items"]})),n.minLength&&Tt(t,"minItems",n.minLength.value,n.minLength.message,e),n.maxLength&&Tt(t,"maxItems",n.maxLength.value,n.maxLength.message,e),n.exactLength&&(Tt(t,"minItems",n.exactLength.value,n.exactLength.message,e),Tt(t,"maxItems",n.exactLength.value,n.exactLength.message,e)),t}function AN(n,e){let t={type:"integer",format:"int64"};if(!n.checks)return t;for(let r of n.checks)switch(r.kind){case"min":e.target==="jsonSchema7"?r.inclusive?Tt(t,"minimum",r.value,r.message,e):Tt(t,"exclusiveMinimum",r.value,r.message,e):(r.inclusive||(t.exclusiveMinimum=!0),Tt(t,"minimum",r.value,r.message,e));break;case"max":e.target==="jsonSchema7"?r.inclusive?Tt(t,"maximum",r.value,r.message,e):Tt(t,"exclusiveMaximum",r.value,r.message,e):(r.inclusive||(t.exclusiveMaximum=!0),Tt(t,"maximum",r.value,r.message,e));break;case"multipleOf":Tt(t,"multipleOf",r.value,r.message,e);break}return t}function NN(){return{type:"boolean"}}function eg(n,e){return nt(n.type._def,e)}var MN=(n,e)=>nt(n.innerType._def,e);function Fw(n,e,t){let r=t??e.dateStrategy;if(Array.isArray(r))return{anyOf:r.map((s,i)=>Fw(n,e,s))};switch(r){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return ZU(n,e)}}var ZU=(n,e)=>{let t={type:"integer",format:"unix-time"};if(e.target==="openApi3")return t;for(let r of n.checks)switch(r.kind){case"min":Tt(t,"minimum",r.value,r.message,e);break;case"max":Tt(t,"maximum",r.value,r.message,e);break}return t};function DN(n,e){return{...nt(n.innerType._def,e),default:n.defaultValue()}}function FN(n,e){return e.effectStrategy==="input"?nt(n.schema._def,e):hn(e)}function ON(n){return{type:"string",enum:Array.from(n.values)}}var GU=n=>"type"in n&&n.type==="string"?!1:"allOf"in n;function $N(n,e){let t=[nt(n.left._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),nt(n.right._def,{...e,currentPath:[...e.currentPath,"allOf","1"]})].filter(i=>!!i),r=e.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,s=[];return t.forEach(i=>{if(GU(i))s.push(...i.allOf),i.unevaluatedProperties===void 0&&(r=void 0);else{let o=i;if("additionalProperties"in i&&i.additionalProperties===!1){let{additionalProperties:a,...c}=i;o=c}else r=void 0;s.push(o)}}),s.length?{allOf:s,...r}:void 0}function jN(n,e){let t=typeof n.value;return t!=="bigint"&&t!=="number"&&t!=="boolean"&&t!=="string"?{type:Array.isArray(n.value)?"array":"object"}:e.target==="openApi3"?{type:t==="bigint"?"integer":t,enum:[n.value]}:{type:t==="bigint"?"integer":t,const:n.value}}var Ow,ci={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>(Ow===void 0&&(Ow=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),Ow),uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function tg(n,e){let t={type:"string"};if(n.checks)for(let r of n.checks)switch(r.kind){case"min":Tt(t,"minLength",typeof t.minLength=="number"?Math.max(t.minLength,r.value):r.value,r.message,e);break;case"max":Tt(t,"maxLength",typeof t.maxLength=="number"?Math.min(t.maxLength,r.value):r.value,r.message,e);break;case"email":switch(e.emailStrategy){case"format:email":li(t,"email",r.message,e);break;case"format:idn-email":li(t,"idn-email",r.message,e);break;case"pattern:zod":Nr(t,ci.email,r.message,e);break}break;case"url":li(t,"uri",r.message,e);break;case"uuid":li(t,"uuid",r.message,e);break;case"regex":Nr(t,r.regex,r.message,e);break;case"cuid":Nr(t,ci.cuid,r.message,e);break;case"cuid2":Nr(t,ci.cuid2,r.message,e);break;case"startsWith":Nr(t,RegExp(`^${$w(r.value,e)}`),r.message,e);break;case"endsWith":Nr(t,RegExp(`${$w(r.value,e)}$`),r.message,e);break;case"datetime":li(t,"date-time",r.message,e);break;case"date":li(t,"date",r.message,e);break;case"time":li(t,"time",r.message,e);break;case"duration":li(t,"duration",r.message,e);break;case"length":Tt(t,"minLength",typeof t.minLength=="number"?Math.max(t.minLength,r.value):r.value,r.message,e),Tt(t,"maxLength",typeof t.maxLength=="number"?Math.min(t.maxLength,r.value):r.value,r.message,e);break;case"includes":{Nr(t,RegExp($w(r.value,e)),r.message,e);break}case"ip":{r.version!=="v6"&&li(t,"ipv4",r.message,e),r.version!=="v4"&&li(t,"ipv6",r.message,e);break}case"base64url":Nr(t,ci.base64url,r.message,e);break;case"jwt":Nr(t,ci.jwt,r.message,e);break;case"cidr":{r.version!=="v6"&&Nr(t,ci.ipv4Cidr,r.message,e),r.version!=="v4"&&Nr(t,ci.ipv6Cidr,r.message,e);break}case"emoji":Nr(t,ci.emoji(),r.message,e);break;case"ulid":{Nr(t,ci.ulid,r.message,e);break}case"base64":{switch(e.base64Strategy){case"format:binary":{li(t,"binary",r.message,e);break}case"contentEncoding:base64":{Tt(t,"contentEncoding","base64",r.message,e);break}case"pattern:zod":{Nr(t,ci.base64,r.message,e);break}}break}case"nanoid":Nr(t,ci.nanoid,r.message,e);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return t}function $w(n,e){return e.patternStrategy==="escape"?VU(n):n}var JU=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function VU(n){let e="";for(let t=0;t<n.length;t++)JU.has(n[t])||(e+="\\"),e+=n[t];return e}function li(n,e,t,r){n.format||n.anyOf?.some(s=>s.format)?(n.anyOf||(n.anyOf=[]),n.format&&(n.anyOf.push({format:n.format,...n.errorMessage&&r.errorMessages&&{errorMessage:{format:n.errorMessage.format}}}),delete n.format,n.errorMessage&&(delete n.errorMessage.format,Object.keys(n.errorMessage).length===0&&delete n.errorMessage)),n.anyOf.push({format:e,...t&&r.errorMessages&&{errorMessage:{format:t}}})):Tt(n,"format",e,t,r)}function Nr(n,e,t,r){n.pattern||n.allOf?.some(s=>s.pattern)?(n.allOf||(n.allOf=[]),n.pattern&&(n.allOf.push({pattern:n.pattern,...n.errorMessage&&r.errorMessages&&{errorMessage:{pattern:n.errorMessage.pattern}}}),delete n.pattern,n.errorMessage&&(delete n.errorMessage.pattern,Object.keys(n.errorMessage).length===0&&delete n.errorMessage)),n.allOf.push({pattern:LN(e,r),...t&&r.errorMessages&&{errorMessage:{pattern:t}}})):Tt(n,"pattern",LN(e,r),t,r)}function LN(n,e){if(!e.applyRegexFlags||!n.flags)return n.source;let t={i:n.flags.includes("i"),m:n.flags.includes("m"),s:n.flags.includes("s")},r=t.i?n.source.toLowerCase():n.source,s="",i=!1,o=!1,a=!1;for(let c=0;c<r.length;c++){if(i){s+=r[c],i=!1;continue}if(t.i){if(o){if(r[c].match(/[a-z]/)){a?(s+=r[c],s+=`${r[c-2]}-${r[c]}`.toUpperCase(),a=!1):r[c+1]==="-"&&r[c+2]?.match(/[a-z]/)?(s+=r[c],a=!0):s+=`${r[c]}${r[c].toUpperCase()}`;continue}}else if(r[c].match(/[a-z]/)){s+=`[${r[c]}${r[c].toUpperCase()}]`;continue}}if(t.m){if(r[c]==="^"){s+=`(^|(?<=[\r
|
|
896
|
+
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let u of this.seen.entries()){let d=u[1];if(e===u[0]){o(u);continue}if(r.external){let f=r.external.registry.get(u[0])?.id;if(e!==u[0]&&f){o(u);continue}}if(this.metadataRegistry.get(u[0])?.id){o(u);continue}if(d.cycle){o(u);continue}if(d.count>1&&r.reused==="ref"){o(u);continue}}let a=(u,d)=>{let p=this.seen.get(u),f=p.def??p.schema,m={...f};if(p.ref===null)return;let h=p.ref;if(p.ref=null,h){a(h,d);let g=this.seen.get(h).schema;g.$ref&&d.target==="draft-7"?(f.allOf=f.allOf??[],f.allOf.push(g)):(Object.assign(f,g),Object.assign(f,m))}p.isParent||this.override({zodSchema:u,jsonSchema:f,path:p.path??[]})};for(let u of[...this.seen.entries()].reverse())a(u[0],{target:this.target});let c={};if(this.target==="draft-2020-12"?c.$schema="https://json-schema.org/draft/2020-12/schema":this.target==="draft-7"?c.$schema="http://json-schema.org/draft-07/schema#":console.warn(`Invalid target: ${this.target}`),r.external?.uri){let u=r.external.registry.get(e)?.id;if(!u)throw new Error("Schema is missing an `id` property");c.$id=r.external.uri(u)}Object.assign(c,s.def);let l=r.external?.defs??{};for(let u of this.seen.entries()){let d=u[1];d.def&&d.defId&&(l[d.defId]=d.def)}r.external||Object.keys(l).length>0&&(this.target==="draft-2020-12"?c.$defs=l:c.definitions=l);try{return JSON.parse(JSON.stringify(c))}catch{throw new Error("Error converting schema to JSON.")}}};function cw(n,e){if(n instanceof Qd){let r=new Eh(e),s={};for(let a of n._idmap.entries()){let[c,l]=a;r.process(l)}let i={},o={registry:n,uri:e?.uri,defs:s};for(let a of n._idmap.entries()){let[c,l]=a;i[c]=r.emit(l,{...e,external:o})}if(Object.keys(s).length>0){let a=r.target==="draft-2020-12"?"$defs":"definitions";i.__shared={[a]:s}}return{schemas:i}}let t=new Eh(e);return t.process(n),t.emit(n,e)}function Kn(n,e){let t=e??{seen:new Set};if(t.seen.has(n))return!1;t.seen.add(n);let s=n._zod.def;switch(s.type){case"string":case"number":case"bigint":case"boolean":case"date":case"symbol":case"undefined":case"null":case"any":case"unknown":case"never":case"void":case"literal":case"enum":case"nan":case"file":case"template_literal":return!1;case"array":return Kn(s.element,t);case"object":{for(let i in s.shape)if(Kn(s.shape[i],t))return!0;return!1}case"union":{for(let i of s.options)if(Kn(i,t))return!0;return!1}case"intersection":return Kn(s.left,t)||Kn(s.right,t);case"tuple":{for(let i of s.items)if(Kn(i,t))return!0;return!!(s.rest&&Kn(s.rest,t))}case"record":return Kn(s.keyType,t)||Kn(s.valueType,t);case"map":return Kn(s.keyType,t)||Kn(s.valueType,t);case"set":return Kn(s.valueType,t);case"promise":case"optional":case"nonoptional":case"nullable":case"readonly":return Kn(s.innerType,t);case"lazy":return Kn(s.getter(),t);case"default":return Kn(s.innerType,t);case"prefault":return Kn(s.innerType,t);case"custom":return!1;case"transform":return!0;case"pipe":return Kn(s.in,t)||Kn(s.out,t);case"success":return!1;case"catch":return!1;default:}throw new Error(`Unknown schema type: ${s.type}`)}var _H=ee("ZodMiniType",(n,e)=>{if(!n._zod)throw new Error("Uninitialized schema in ZodMiniType.");qt.init(n,e),n.def=e,n.parse=(t,r)=>Ex(n,t,r,{callee:n.parse}),n.safeParse=(t,r)=>Za(n,t,r),n.parseAsync=async(t,r)=>Px(n,t,r,{callee:n.parseAsync}),n.safeParseAsync=async(t,r)=>Ga(n,t,r),n.check=(...t)=>n.clone({...e,checks:[...e.checks??[],...t.map(r=>typeof r=="function"?{_zod:{check:r,def:{check:"custom"},onattach:[]}}:r)]}),n.clone=(t,r)=>ys(n,t,r),n.brand=()=>n,n.register=((t,r)=>(t.add(n,r),n))});var wH=ee("ZodMiniObject",(n,e)=>{bh.init(n,e),_H.init(n,e),kt.defineLazy(n,"shape",()=>e.shape)});function lw(n,e){let t={type:"object",get shape(){return kt.assignProp(this,"shape",{...n}),this.shape},...kt.normalizeParams(e)};return new wH(t)}function zs(n){return!!n._zod}function Xa(n){let e=Object.values(n);if(e.length===0)return lw({});let t=e.every(zs),r=e.every(s=>!zs(s));if(t)return lw(n);if(r)return vI(n);throw new Error("Mixed Zod versions detected in object shape.")}function Mo(n,e){return zs(n)?Za(n,e):n.safeParse(e)}async function Th(n,e){return zs(n)?await Ga(n,e):await n.safeParseAsync(e)}function Do(n){if(!n)return;let e;if(zs(n)?e=n._zod?.def?.shape:e=n.shape,!!e){if(typeof e=="function")try{return e()}catch{return}return e}}function bl(n){if(n){if(typeof n=="object"){let e=n,t=n;if(!e._def&&!t._zod){let r=Object.values(n);if(r.length>0&&r.every(s=>typeof s=="object"&&s!==null&&(s._def!==void 0||s._zod!==void 0||typeof s.parse=="function")))return Xa(n)}}if(zs(n)){let t=n._zod?.def;if(t&&(t.type==="object"||t.shape!==void 0))return n}else if(n.shape!==void 0)return n}}function Ph(n){if(n&&typeof n=="object"){if("message"in n&&typeof n.message=="string")return n.message;if("issues"in n&&Array.isArray(n.issues)&&n.issues.length>0){let e=n.issues[0];if(e&&typeof e=="object"&&"message"in e)return String(e.message)}try{return JSON.stringify(n)}catch{return String(n)}}return String(n)}function zA(n){return n.description}function BA(n){if(zs(n))return n._zod?.def?.type==="optional";let e=n;return typeof n.isOptional=="function"?n.isOptional():e._def?.typeName==="ZodOptional"}function Ch(n){if(zs(n)){let i=n._zod?.def;if(i){if(i.value!==void 0)return i.value;if(Array.isArray(i.values)&&i.values.length>0)return i.values[0]}}let t=n._def;if(t){if(t.value!==void 0)return t.value;if(Array.isArray(t.values)&&t.values.length>0)return t.values[0]}let r=n.value;if(r!==void 0)return r}var tp={};Lt(tp,{ZodISODate:()=>HA,ZodISODateTime:()=>qA,ZodISODuration:()=>UA,ZodISOTime:()=>WA,date:()=>dw,datetime:()=>uw,duration:()=>fw,time:()=>pw});var qA=ee("ZodISODateTime",(n,e)=>{TA.init(n,e),pn.init(n,e)});function uw(n){return DA(qA,n)}var HA=ee("ZodISODate",(n,e)=>{PA.init(n,e),pn.init(n,e)});function dw(n){return FA(HA,n)}var WA=ee("ZodISOTime",(n,e)=>{CA.init(n,e),pn.init(n,e)});function pw(n){return OA(WA,n)}var UA=ee("ZodISODuration",(n,e)=>{IA.init(n,e),pn.init(n,e)});function fw(n){return $A(UA,n)}var KA=(n,e)=>{fh.init(n,e),n.name="ZodError",Object.defineProperties(n,{format:{value:t=>Rx(n,t)},flatten:{value:t=>vx(n,t)},addIssue:{value:t=>n.issues.push(t)},addIssues:{value:t=>n.issues.push(...t)},isEmpty:{get(){return n.issues.length===0}}})},Bne=ee("ZodError",KA),np=ee("ZodError",KA,{Parent:Error});var ZA=kx(np),GA=Tx(np),JA=Cx(np),VA=Ix(np);var _n=ee("ZodType",(n,e)=>(qt.init(n,e),n.def=e,Object.defineProperty(n,"_def",{value:e}),n.check=(...t)=>n.clone({...e,checks:[...e.checks??[],...t.map(r=>typeof r=="function"?{_zod:{check:r,def:{check:"custom"},onattach:[]}}:r)]}),n.clone=(t,r)=>ys(n,t,r),n.brand=()=>n,n.register=((t,r)=>(t.add(n,r),n)),n.parse=(t,r)=>ZA(n,t,r,{callee:n.parse}),n.safeParse=(t,r)=>JA(n,t,r),n.parseAsync=async(t,r)=>GA(n,t,r,{callee:n.parseAsync}),n.safeParseAsync=async(t,r)=>VA(n,t,r),n.spa=n.safeParseAsync,n.refine=(t,r)=>n.check(SW(t,r)),n.superRefine=t=>n.check(xW(t)),n.overwrite=t=>n.check(Ja(t)),n.optional=()=>mn(n),n.nullable=()=>YA(n),n.nullish=()=>mn(YA(n)),n.nonoptional=t=>pW(n,t),n.array=()=>Et(n),n.or=t=>ln([n,t]),n.and=t=>Ah(n,t),n.transform=t=>hw(n,iN(t)),n.default=t=>lW(n,t),n.prefault=t=>dW(n,t),n.catch=t=>mW(n,t),n.pipe=t=>hw(n,t),n.readonly=()=>yW(n),n.describe=t=>{let r=n.clone();return No.add(r,{description:t}),r},Object.defineProperty(n,"description",{get(){return No.get(n)?.description},configurable:!0}),n.meta=(...t)=>{if(t.length===0)return No.get(n);let r=n.clone();return No.add(r,t[0]),r},n.isOptional=()=>n.safeParse(void 0).success,n.isNullable=()=>n.safeParse(null).success,n)),eN=ee("_ZodString",(n,e)=>{Xd.init(n,e),_n.init(n,e);let t=n._zod.bag;n.format=t.format??null,n.minLength=t.minimum??null,n.maxLength=t.maximum??null,n.regex=(...r)=>n.check(V_(...r)),n.includes=(...r)=>n.check(Y_(...r)),n.startsWith=(...r)=>n.check(ew(...r)),n.endsWith=(...r)=>n.check(tw(...r)),n.min=(...r)=>n.check(yl(...r)),n.max=(...r)=>n.check(Rh(...r)),n.length=(...r)=>n.check(kh(...r)),n.nonempty=(...r)=>n.check(yl(1,...r)),n.lowercase=r=>n.check(X_(r)),n.uppercase=r=>n.check(Q_(r)),n.trim=()=>n.check(rw()),n.normalize=(...r)=>n.check(nw(...r)),n.toLowerCase=()=>n.check(sw()),n.toUpperCase=()=>n.check(iw())}),AH=ee("ZodString",(n,e)=>{Xd.init(n,e),eN.init(n,e),n.email=t=>n.check(v_(NH,t)),n.url=t=>n.check(P_(MH,t)),n.jwt=t=>n.check(H_(GH,t)),n.emoji=t=>n.check(C_(DH,t)),n.guid=t=>n.check(xh(XA,t)),n.uuid=t=>n.check(R_(Ih,t)),n.uuidv4=t=>n.check(k_(Ih,t)),n.uuidv6=t=>n.check(E_(Ih,t)),n.uuidv7=t=>n.check(T_(Ih,t)),n.nanoid=t=>n.check(I_(FH,t)),n.guid=t=>n.check(xh(XA,t)),n.cuid=t=>n.check(A_(OH,t)),n.cuid2=t=>n.check(N_($H,t)),n.ulid=t=>n.check(M_(jH,t)),n.base64=t=>n.check(z_(UH,t)),n.base64url=t=>n.check(B_(KH,t)),n.xid=t=>n.check(D_(LH,t)),n.ksuid=t=>n.check(F_(zH,t)),n.ipv4=t=>n.check(O_(BH,t)),n.ipv6=t=>n.check($_(qH,t)),n.cidrv4=t=>n.check(j_(HH,t)),n.cidrv6=t=>n.check(L_(WH,t)),n.e164=t=>n.check(q_(ZH,t)),n.datetime=t=>n.check(uw(t)),n.date=t=>n.check(dw(t)),n.time=t=>n.check(pw(t)),n.duration=t=>n.check(fw(t))});function Y(n){return w_(AH,n)}var pn=ee("ZodStringFormat",(n,e)=>{Yt.init(n,e),eN.init(n,e)}),NH=ee("ZodEmail",(n,e)=>{jx.init(n,e),pn.init(n,e)});var XA=ee("ZodGUID",(n,e)=>{Ox.init(n,e),pn.init(n,e)});var Ih=ee("ZodUUID",(n,e)=>{$x.init(n,e),pn.init(n,e)});var MH=ee("ZodURL",(n,e)=>{Lx.init(n,e),pn.init(n,e)});var DH=ee("ZodEmoji",(n,e)=>{zx.init(n,e),pn.init(n,e)});var FH=ee("ZodNanoID",(n,e)=>{Bx.init(n,e),pn.init(n,e)});var OH=ee("ZodCUID",(n,e)=>{qx.init(n,e),pn.init(n,e)});var $H=ee("ZodCUID2",(n,e)=>{Hx.init(n,e),pn.init(n,e)});var jH=ee("ZodULID",(n,e)=>{Wx.init(n,e),pn.init(n,e)});var LH=ee("ZodXID",(n,e)=>{Ux.init(n,e),pn.init(n,e)});var zH=ee("ZodKSUID",(n,e)=>{Kx.init(n,e),pn.init(n,e)});var BH=ee("ZodIPv4",(n,e)=>{Zx.init(n,e),pn.init(n,e)});var qH=ee("ZodIPv6",(n,e)=>{Gx.init(n,e),pn.init(n,e)});var HH=ee("ZodCIDRv4",(n,e)=>{Jx.init(n,e),pn.init(n,e)});var WH=ee("ZodCIDRv6",(n,e)=>{Vx.init(n,e),pn.init(n,e)});var UH=ee("ZodBase64",(n,e)=>{Xx.init(n,e),pn.init(n,e)});var KH=ee("ZodBase64URL",(n,e)=>{Qx.init(n,e),pn.init(n,e)});var ZH=ee("ZodE164",(n,e)=>{Yx.init(n,e),pn.init(n,e)});var GH=ee("ZodJWT",(n,e)=>{e_.init(n,e),pn.init(n,e)});var tN=ee("ZodNumber",(n,e)=>{yh.init(n,e),_n.init(n,e),n.gt=(r,s)=>n.check(wh(r,s)),n.gte=(r,s)=>n.check(ep(r,s)),n.min=(r,s)=>n.check(ep(r,s)),n.lt=(r,s)=>n.check(_h(r,s)),n.lte=(r,s)=>n.check(Yd(r,s)),n.max=(r,s)=>n.check(Yd(r,s)),n.int=r=>n.check(QA(r)),n.safe=r=>n.check(QA(r)),n.positive=r=>n.check(wh(0,r)),n.nonnegative=r=>n.check(ep(0,r)),n.negative=r=>n.check(_h(0,r)),n.nonpositive=r=>n.check(Yd(0,r)),n.multipleOf=(r,s)=>n.check(vh(r,s)),n.step=(r,s)=>n.check(vh(r,s)),n.finite=()=>n;let t=n._zod.bag;n.minValue=Math.max(t.minimum??Number.NEGATIVE_INFINITY,t.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,n.maxValue=Math.min(t.maximum??Number.POSITIVE_INFINITY,t.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,n.isInt=(t.format??"").includes("int")||Number.isSafeInteger(t.multipleOf??.5),n.isFinite=!0,n.format=t.format??null});function zt(n){return W_(tN,n)}var JH=ee("ZodNumberFormat",(n,e)=>{t_.init(n,e),tN.init(n,e)});function QA(n){return U_(JH,n)}var VH=ee("ZodBoolean",(n,e)=>{n_.init(n,e),_n.init(n,e)});function er(n){return K_(VH,n)}var XH=ee("ZodNull",(n,e)=>{r_.init(n,e),_n.init(n,e)});function nN(n){return Z_(XH,n)}var QH=ee("ZodUnknown",(n,e)=>{s_.init(n,e),_n.init(n,e)});function fn(){return G_(QH)}var YH=ee("ZodNever",(n,e)=>{i_.init(n,e),_n.init(n,e)});function eW(n){return J_(YH,n)}var tW=ee("ZodArray",(n,e)=>{o_.init(n,e),_n.init(n,e),n.element=e.element,n.min=(t,r)=>n.check(yl(t,r)),n.nonempty=t=>n.check(yl(1,t)),n.max=(t,r)=>n.check(Rh(t,r)),n.length=(t,r)=>n.check(kh(t,r)),n.unwrap=()=>n.element});function Et(n,e){return jA(tW,n,e)}var rN=ee("ZodObject",(n,e)=>{bh.init(n,e),_n.init(n,e),kt.defineLazy(n,"shape",()=>e.shape),n.keyof=()=>Wr(Object.keys(n._zod.def.shape)),n.catchall=t=>n.clone({...n._zod.def,catchall:t}),n.passthrough=()=>n.clone({...n._zod.def,catchall:fn()}),n.loose=()=>n.clone({...n._zod.def,catchall:fn()}),n.strict=()=>n.clone({...n._zod.def,catchall:eW()}),n.strip=()=>n.clone({...n._zod.def,catchall:void 0}),n.extend=t=>kt.extend(n,t),n.merge=t=>kt.merge(n,t),n.pick=t=>kt.pick(n,t),n.omit=t=>kt.omit(n,t),n.partial=(...t)=>kt.partial(oN,n,t[0]),n.required=(...t)=>kt.required(aN,n,t[0])});function Ce(n,e){let t={type:"object",get shape(){return kt.assignProp(this,"shape",{...n}),this.shape},...kt.normalizeParams(e)};return new rN(t)}function Ar(n,e){return new rN({type:"object",get shape(){return kt.assignProp(this,"shape",{...n}),this.shape},catchall:fn(),...kt.normalizeParams(e)})}var sN=ee("ZodUnion",(n,e)=>{Sh.init(n,e),_n.init(n,e),n.options=e.options});function ln(n,e){return new sN({type:"union",options:n,...kt.normalizeParams(e)})}var nW=ee("ZodDiscriminatedUnion",(n,e)=>{sN.init(n,e),a_.init(n,e)});function gw(n,e,t){return new nW({type:"union",options:e,discriminator:n,...kt.normalizeParams(t)})}var rW=ee("ZodIntersection",(n,e)=>{c_.init(n,e),_n.init(n,e)});function Ah(n,e){return new rW({type:"intersection",left:n,right:e})}var sW=ee("ZodRecord",(n,e)=>{l_.init(n,e),_n.init(n,e),n.keyType=e.keyType,n.valueType=e.valueType});function en(n,e,t){return new sW({type:"record",keyType:n,valueType:e,...kt.normalizeParams(t)})}var mw=ee("ZodEnum",(n,e)=>{u_.init(n,e),_n.init(n,e),n.enum=e.entries,n.options=Object.values(e.entries);let t=new Set(Object.keys(e.entries));n.extract=(r,s)=>{let i={};for(let o of r)if(t.has(o))i[o]=e.entries[o];else throw new Error(`Key ${o} not found in enum`);return new mw({...e,checks:[],...kt.normalizeParams(s),entries:i})},n.exclude=(r,s)=>{let i={...e.entries};for(let o of r)if(t.has(o))delete i[o];else throw new Error(`Key ${o} not found in enum`);return new mw({...e,checks:[],...kt.normalizeParams(s),entries:i})}});function Wr(n,e){let t=Array.isArray(n)?Object.fromEntries(n.map(r=>[r,r])):n;return new mw({type:"enum",entries:t,...kt.normalizeParams(e)})}var iW=ee("ZodLiteral",(n,e)=>{d_.init(n,e),_n.init(n,e),n.values=new Set(e.values),Object.defineProperty(n,"value",{get(){if(e.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return e.values[0]}})});function Le(n,e){return new iW({type:"literal",values:Array.isArray(n)?n:[n],...kt.normalizeParams(e)})}var oW=ee("ZodTransform",(n,e)=>{p_.init(n,e),_n.init(n,e),n._zod.parse=(t,r)=>{t.addIssue=i=>{if(typeof i=="string")t.issues.push(kt.issue(i,t.value,e));else{let o=i;o.fatal&&(o.continue=!1),o.code??(o.code="custom"),o.input??(o.input=t.value),o.inst??(o.inst=n),o.continue??(o.continue=!0),t.issues.push(kt.issue(o))}};let s=e.transform(t.value,t);return s instanceof Promise?s.then(i=>(t.value=i,t)):(t.value=s,t)}});function iN(n){return new oW({type:"transform",transform:n})}var oN=ee("ZodOptional",(n,e)=>{f_.init(n,e),_n.init(n,e),n.unwrap=()=>n._zod.def.innerType});function mn(n){return new oN({type:"optional",innerType:n})}var aW=ee("ZodNullable",(n,e)=>{m_.init(n,e),_n.init(n,e),n.unwrap=()=>n._zod.def.innerType});function YA(n){return new aW({type:"nullable",innerType:n})}var cW=ee("ZodDefault",(n,e)=>{h_.init(n,e),_n.init(n,e),n.unwrap=()=>n._zod.def.innerType,n.removeDefault=n.unwrap});function lW(n,e){return new cW({type:"default",innerType:n,get defaultValue(){return typeof e=="function"?e():e}})}var uW=ee("ZodPrefault",(n,e)=>{g_.init(n,e),_n.init(n,e),n.unwrap=()=>n._zod.def.innerType});function dW(n,e){return new uW({type:"prefault",innerType:n,get defaultValue(){return typeof e=="function"?e():e}})}var aN=ee("ZodNonOptional",(n,e)=>{y_.init(n,e),_n.init(n,e),n.unwrap=()=>n._zod.def.innerType});function pW(n,e){return new aN({type:"nonoptional",innerType:n,...kt.normalizeParams(e)})}var fW=ee("ZodCatch",(n,e)=>{b_.init(n,e),_n.init(n,e),n.unwrap=()=>n._zod.def.innerType,n.removeCatch=n.unwrap});function mW(n,e){return new fW({type:"catch",innerType:n,catchValue:typeof e=="function"?e:()=>e})}var hW=ee("ZodPipe",(n,e)=>{S_.init(n,e),_n.init(n,e),n.in=e.in,n.out=e.out});function hw(n,e){return new hW({type:"pipe",in:n,out:e})}var gW=ee("ZodReadonly",(n,e)=>{x_.init(n,e),_n.init(n,e)});function yW(n){return new gW({type:"readonly",innerType:n})}var cN=ee("ZodCustom",(n,e)=>{__.init(n,e),_n.init(n,e)});function bW(n){let e=new ir({check:"custom"});return e._zod.check=n,e}function lN(n,e){return ow(cN,n??(()=>!0),e)}function SW(n,e={}){return aw(cN,n,e)}function xW(n){let e=bW(t=>(t.addIssue=r=>{if(typeof r=="string")t.issues.push(kt.issue(r,t.value,e._zod.def));else{let s=r;s.fatal&&(s.continue=!1),s.code??(s.code="custom"),s.input??(s.input=t.value),s.inst??(s.inst=e),s.continue??(s.continue=!e._zod.def.abort),t.issues.push(kt.issue(s))}},n(t.value,t)));return e}function yw(n,e){return hw(iN(n),e)}gs(NA());var Sw="2025-11-25",uN="2025-03-26",xl=[Sw,"2025-06-18","2025-03-26","2024-11-05","2024-10-07"],Fo="io.modelcontextprotocol/related-task",Mh="2.0",Zn=lN(n=>n!==null&&(typeof n=="object"||typeof n=="function")),dN=ln([Y(),zt().int()]),pN=Y(),tre=Ar({ttl:zt().optional(),pollInterval:zt().optional()}),_W=Ce({ttl:zt().optional()}),wW=Ce({taskId:Y()}),xw=Ar({progressToken:dN.optional(),[Fo]:wW.optional()}),bs=Ce({_meta:xw.optional()}),rp=bs.extend({task:_W.optional()}),fN=n=>rp.safeParse(n).success,or=Ce({method:Y(),params:bs.loose().optional()}),Bs=Ce({_meta:xw.optional()}),qs=Ce({method:Y(),params:Bs.loose().optional()}),ar=Ar({_meta:xw.optional()}),Dh=ln([Y(),zt().int()]),mN=Ce({jsonrpc:Le(Mh),id:Dh,...or.shape}).strict(),Oo=n=>mN.safeParse(n).success,hN=Ce({jsonrpc:Le(Mh),...qs.shape}).strict(),gN=n=>hN.safeParse(n).success,_w=Ce({jsonrpc:Le(Mh),id:Dh,result:ar}).strict(),ro=n=>_w.safeParse(n).success;var Ue;(function(n){n[n.ConnectionClosed=-32e3]="ConnectionClosed",n[n.RequestTimeout=-32001]="RequestTimeout",n[n.ParseError=-32700]="ParseError",n[n.InvalidRequest=-32600]="InvalidRequest",n[n.MethodNotFound=-32601]="MethodNotFound",n[n.InvalidParams=-32602]="InvalidParams",n[n.InternalError=-32603]="InternalError",n[n.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(Ue||(Ue={}));var ww=Ce({jsonrpc:Le(Mh),id:Dh.optional(),error:Ce({code:zt().int(),message:Y(),data:fn().optional()})}).strict();var _l=n=>ww.safeParse(n).success;var sp=ln([mN,hN,_w,ww]),nre=ln([_w,ww]),Fh=ar.strict(),vW=Bs.extend({requestId:Dh.optional(),reason:Y().optional()}),Oh=qs.extend({method:Le("notifications/cancelled"),params:vW}),RW=Ce({src:Y(),mimeType:Y().optional(),sizes:Et(Y()).optional(),theme:Wr(["light","dark"]).optional()}),ip=Ce({icons:Et(RW).optional()}),Sl=Ce({name:Y(),title:Y().optional()}),yN=Sl.extend({...Sl.shape,...ip.shape,version:Y(),websiteUrl:Y().optional(),description:Y().optional()}),kW=Ah(Ce({applyDefaults:er().optional()}),en(Y(),fn())),EW=yw(n=>n&&typeof n=="object"&&!Array.isArray(n)&&Object.keys(n).length===0?{form:{}}:n,Ah(Ce({form:kW.optional(),url:Zn.optional()}),en(Y(),fn()).optional())),TW=Ar({list:Zn.optional(),cancel:Zn.optional(),requests:Ar({sampling:Ar({createMessage:Zn.optional()}).optional(),elicitation:Ar({create:Zn.optional()}).optional()}).optional()}),PW=Ar({list:Zn.optional(),cancel:Zn.optional(),requests:Ar({tools:Ar({call:Zn.optional()}).optional()}).optional()}),CW=Ce({experimental:en(Y(),Zn).optional(),sampling:Ce({context:Zn.optional(),tools:Zn.optional()}).optional(),elicitation:EW.optional(),roots:Ce({listChanged:er().optional()}).optional(),tasks:TW.optional(),extensions:en(Y(),Zn).optional()}),IW=bs.extend({protocolVersion:Y(),capabilities:CW,clientInfo:yN}),$h=or.extend({method:Le("initialize"),params:IW}),vw=n=>$h.safeParse(n).success,AW=Ce({experimental:en(Y(),Zn).optional(),logging:Zn.optional(),completions:Zn.optional(),prompts:Ce({listChanged:er().optional()}).optional(),resources:Ce({subscribe:er().optional(),listChanged:er().optional()}).optional(),tools:Ce({listChanged:er().optional()}).optional(),tasks:PW.optional(),extensions:en(Y(),Zn).optional()}),NW=ar.extend({protocolVersion:Y(),capabilities:AW,serverInfo:yN,instructions:Y().optional()}),Rw=qs.extend({method:Le("notifications/initialized"),params:Bs.optional()});var jh=or.extend({method:Le("ping"),params:bs.optional()}),MW=Ce({progress:zt(),total:mn(zt()),message:mn(Y())}),DW=Ce({...Bs.shape,...MW.shape,progressToken:dN}),Lh=qs.extend({method:Le("notifications/progress"),params:DW}),FW=bs.extend({cursor:pN.optional()}),op=or.extend({params:FW.optional()}),ap=ar.extend({nextCursor:pN.optional()}),OW=Wr(["working","input_required","completed","failed","cancelled"]),cp=Ce({taskId:Y(),status:OW,ttl:ln([zt(),nN()]),createdAt:Y(),lastUpdatedAt:Y(),pollInterval:mn(zt()),statusMessage:mn(Y())}),wl=ar.extend({task:cp}),$W=Bs.merge(cp),lp=qs.extend({method:Le("notifications/tasks/status"),params:$W}),zh=or.extend({method:Le("tasks/get"),params:bs.extend({taskId:Y()})}),Bh=ar.merge(cp),qh=or.extend({method:Le("tasks/result"),params:bs.extend({taskId:Y()})}),rre=ar.loose(),Hh=op.extend({method:Le("tasks/list")}),Wh=ap.extend({tasks:Et(cp)}),Uh=or.extend({method:Le("tasks/cancel"),params:bs.extend({taskId:Y()})}),bN=ar.merge(cp),SN=Ce({uri:Y(),mimeType:mn(Y()),_meta:en(Y(),fn()).optional()}),xN=SN.extend({text:Y()}),kw=Y().refine(n=>{try{return atob(n),!0}catch{return!1}},{message:"Invalid Base64 string"}),_N=SN.extend({blob:kw}),up=Wr(["user","assistant"]),vl=Ce({audience:Et(up).optional(),priority:zt().min(0).max(1).optional(),lastModified:tp.datetime({offset:!0}).optional()}),wN=Ce({...Sl.shape,...ip.shape,uri:Y(),description:mn(Y()),mimeType:mn(Y()),size:mn(zt()),annotations:vl.optional(),_meta:mn(Ar({}))}),jW=Ce({...Sl.shape,...ip.shape,uriTemplate:Y(),description:mn(Y()),mimeType:mn(Y()),annotations:vl.optional(),_meta:mn(Ar({}))}),Kh=op.extend({method:Le("resources/list")}),LW=ap.extend({resources:Et(wN)}),Zh=op.extend({method:Le("resources/templates/list")}),zW=ap.extend({resourceTemplates:Et(jW)}),Ew=bs.extend({uri:Y()}),BW=Ew,Gh=or.extend({method:Le("resources/read"),params:BW}),qW=ar.extend({contents:Et(ln([xN,_N]))}),HW=qs.extend({method:Le("notifications/resources/list_changed"),params:Bs.optional()}),WW=Ew,UW=or.extend({method:Le("resources/subscribe"),params:WW}),KW=Ew,ZW=or.extend({method:Le("resources/unsubscribe"),params:KW}),GW=Bs.extend({uri:Y()}),JW=qs.extend({method:Le("notifications/resources/updated"),params:GW}),VW=Ce({name:Y(),description:mn(Y()),required:mn(er())}),XW=Ce({...Sl.shape,...ip.shape,description:mn(Y()),arguments:mn(Et(VW)),_meta:mn(Ar({}))}),Jh=op.extend({method:Le("prompts/list")}),QW=ap.extend({prompts:Et(XW)}),YW=bs.extend({name:Y(),arguments:en(Y(),Y()).optional()}),Vh=or.extend({method:Le("prompts/get"),params:YW}),Tw=Ce({type:Le("text"),text:Y(),annotations:vl.optional(),_meta:en(Y(),fn()).optional()}),Pw=Ce({type:Le("image"),data:kw,mimeType:Y(),annotations:vl.optional(),_meta:en(Y(),fn()).optional()}),Cw=Ce({type:Le("audio"),data:kw,mimeType:Y(),annotations:vl.optional(),_meta:en(Y(),fn()).optional()}),eU=Ce({type:Le("tool_use"),name:Y(),id:Y(),input:en(Y(),fn()),_meta:en(Y(),fn()).optional()}),tU=Ce({type:Le("resource"),resource:ln([xN,_N]),annotations:vl.optional(),_meta:en(Y(),fn()).optional()}),nU=wN.extend({type:Le("resource_link")}),Iw=ln([Tw,Pw,Cw,nU,tU]),rU=Ce({role:up,content:Iw}),sU=ar.extend({description:Y().optional(),messages:Et(rU)}),iU=qs.extend({method:Le("notifications/prompts/list_changed"),params:Bs.optional()}),oU=Ce({title:Y().optional(),readOnlyHint:er().optional(),destructiveHint:er().optional(),idempotentHint:er().optional(),openWorldHint:er().optional()}),aU=Ce({taskSupport:Wr(["required","optional","forbidden"]).optional()}),vN=Ce({...Sl.shape,...ip.shape,description:Y().optional(),inputSchema:Ce({type:Le("object"),properties:en(Y(),Zn).optional(),required:Et(Y()).optional()}).catchall(fn()),outputSchema:Ce({type:Le("object"),properties:en(Y(),Zn).optional(),required:Et(Y()).optional()}).catchall(fn()).optional(),annotations:oU.optional(),execution:aU.optional(),_meta:en(Y(),fn()).optional()}),Rl=op.extend({method:Le("tools/list")}),cU=ap.extend({tools:Et(vN)}),Xh=ar.extend({content:Et(Iw).default([]),structuredContent:en(Y(),fn()).optional(),isError:er().optional()}),sre=Xh.or(ar.extend({toolResult:fn()})),lU=rp.extend({name:Y(),arguments:en(Y(),fn()).optional()}),$o=or.extend({method:Le("tools/call"),params:lU}),uU=qs.extend({method:Le("notifications/tools/list_changed"),params:Bs.optional()}),ire=Ce({autoRefresh:er().default(!0),debounceMs:zt().int().nonnegative().default(300)}),dp=Wr(["debug","info","notice","warning","error","critical","alert","emergency"]),dU=bs.extend({level:dp}),Aw=or.extend({method:Le("logging/setLevel"),params:dU}),pU=Bs.extend({level:dp,logger:Y().optional(),data:fn()}),fU=qs.extend({method:Le("notifications/message"),params:pU}),mU=Ce({name:Y().optional()}),hU=Ce({hints:Et(mU).optional(),costPriority:zt().min(0).max(1).optional(),speedPriority:zt().min(0).max(1).optional(),intelligencePriority:zt().min(0).max(1).optional()}),gU=Ce({mode:Wr(["auto","required","none"]).optional()}),yU=Ce({type:Le("tool_result"),toolUseId:Y().describe("The unique identifier for the corresponding tool call."),content:Et(Iw).default([]),structuredContent:Ce({}).loose().optional(),isError:er().optional(),_meta:en(Y(),fn()).optional()}),bU=gw("type",[Tw,Pw,Cw]),Nh=gw("type",[Tw,Pw,Cw,eU,yU]),SU=Ce({role:up,content:ln([Nh,Et(Nh)]),_meta:en(Y(),fn()).optional()}),xU=rp.extend({messages:Et(SU),modelPreferences:hU.optional(),systemPrompt:Y().optional(),includeContext:Wr(["none","thisServer","allServers"]).optional(),temperature:zt().optional(),maxTokens:zt().int(),stopSequences:Et(Y()).optional(),metadata:Zn.optional(),tools:Et(vN).optional(),toolChoice:gU.optional()}),_U=or.extend({method:Le("sampling/createMessage"),params:xU}),pp=ar.extend({model:Y(),stopReason:mn(Wr(["endTurn","stopSequence","maxTokens"]).or(Y())),role:up,content:bU}),Nw=ar.extend({model:Y(),stopReason:mn(Wr(["endTurn","stopSequence","maxTokens","toolUse"]).or(Y())),role:up,content:ln([Nh,Et(Nh)])}),wU=Ce({type:Le("boolean"),title:Y().optional(),description:Y().optional(),default:er().optional()}),vU=Ce({type:Le("string"),title:Y().optional(),description:Y().optional(),minLength:zt().optional(),maxLength:zt().optional(),format:Wr(["email","uri","date","date-time"]).optional(),default:Y().optional()}),RU=Ce({type:Wr(["number","integer"]),title:Y().optional(),description:Y().optional(),minimum:zt().optional(),maximum:zt().optional(),default:zt().optional()}),kU=Ce({type:Le("string"),title:Y().optional(),description:Y().optional(),enum:Et(Y()),default:Y().optional()}),EU=Ce({type:Le("string"),title:Y().optional(),description:Y().optional(),oneOf:Et(Ce({const:Y(),title:Y()})),default:Y().optional()}),TU=Ce({type:Le("string"),title:Y().optional(),description:Y().optional(),enum:Et(Y()),enumNames:Et(Y()).optional(),default:Y().optional()}),PU=ln([kU,EU]),CU=Ce({type:Le("array"),title:Y().optional(),description:Y().optional(),minItems:zt().optional(),maxItems:zt().optional(),items:Ce({type:Le("string"),enum:Et(Y())}),default:Et(Y()).optional()}),IU=Ce({type:Le("array"),title:Y().optional(),description:Y().optional(),minItems:zt().optional(),maxItems:zt().optional(),items:Ce({anyOf:Et(Ce({const:Y(),title:Y()}))}),default:Et(Y()).optional()}),AU=ln([CU,IU]),NU=ln([TU,PU,AU]),MU=ln([NU,wU,vU,RU]),DU=rp.extend({mode:Le("form").optional(),message:Y(),requestedSchema:Ce({type:Le("object"),properties:en(Y(),MU),required:Et(Y()).optional()})}),FU=rp.extend({mode:Le("url"),message:Y(),elicitationId:Y(),url:Y().url()}),OU=ln([DU,FU]),$U=or.extend({method:Le("elicitation/create"),params:OU}),jU=Bs.extend({elicitationId:Y()}),LU=qs.extend({method:Le("notifications/elicitation/complete"),params:jU}),kl=ar.extend({action:Wr(["accept","decline","cancel"]),content:yw(n=>n===null?void 0:n,en(Y(),ln([Y(),zt(),er(),Et(Y())])).optional())}),zU=Ce({type:Le("ref/resource"),uri:Y()});var BU=Ce({type:Le("ref/prompt"),name:Y()}),qU=bs.extend({ref:ln([BU,zU]),argument:Ce({name:Y(),value:Y()}),context:Ce({arguments:en(Y(),Y()).optional()}).optional()}),Qh=or.extend({method:Le("completion/complete"),params:qU});function RN(n){if(n.params.ref.type!=="ref/prompt")throw new TypeError(`Expected CompleteRequestPrompt, but got ${n.params.ref.type}`)}function kN(n){if(n.params.ref.type!=="ref/resource")throw new TypeError(`Expected CompleteRequestResourceTemplate, but got ${n.params.ref.type}`)}var HU=ar.extend({completion:Ar({values:Et(Y()).max(100),total:mn(zt().int()),hasMore:mn(er())})}),WU=Ce({uri:Y().startsWith("file://"),name:Y().optional(),_meta:en(Y(),fn()).optional()}),UU=or.extend({method:Le("roots/list"),params:bs.optional()}),Mw=ar.extend({roots:Et(WU)}),KU=qs.extend({method:Le("notifications/roots/list_changed"),params:Bs.optional()}),ore=ln([jh,$h,Qh,Aw,Vh,Jh,Kh,Zh,Gh,UW,ZW,$o,Rl,zh,qh,Hh,Uh]),are=ln([Oh,Lh,Rw,KU,lp]),cre=ln([Fh,pp,Nw,kl,Mw,Bh,Wh,wl]),lre=ln([jh,_U,$U,UU,zh,qh,Hh,Uh]),ure=ln([Oh,Lh,fU,JW,HW,uU,iU,lp,LU]),dre=ln([Fh,NW,HU,sU,QW,LW,zW,qW,Xh,cU,Bh,Wh,wl]),je=class n extends Error{constructor(e,t,r){super(`MCP error ${e}: ${t}`),this.code=e,this.data=r,this.name="McpError"}static fromError(e,t,r){if(e===Ue.UrlElicitationRequired&&r){let s=r;if(s.elicitations)return new bw(s.elicitations,t)}return new n(e,t,r)}},bw=class extends je{constructor(e,t=`URL elicitation${e.length>1?"s":""} required`){super(Ue.UrlElicitationRequired,t,{elicitations:e})}get elicitations(){return this.data?.elicitations??[]}};function jo(n){return n==="completed"||n==="failed"||n==="cancelled"}var TN=Symbol("Let zodToJsonSchema decide on which parser to use");var EN={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"},PN=n=>typeof n=="string"?{...EN,name:n}:{...EN,...n};var CN=n=>{let e=PN(n),t=e.name!==void 0?[...e.basePath,e.definitionPath,e.name]:e.basePath;return{...e,flags:{hasReferencedOpenAiAnyType:!1},currentPath:t,propertyPath:void 0,seen:new Map(Object.entries(e.definitions).map(([r,s])=>[s._def,{def:s._def,path:[...e.basePath,e.definitionPath,r],jsonSchema:void 0}]))}};function Dw(n,e,t,r){r?.errorMessages&&t&&(n.errorMessage={...n.errorMessage,[e]:t})}function Tt(n,e,t,r,s){n[e]=t,Dw(n,e,r,s)}var Yh=(n,e)=>{let t=0;for(;t<n.length&&t<e.length&&n[t]===e[t];t++);return[(n.length-t).toString(),...e.slice(t)].join("/")};function hn(n){if(n.target!=="openAi")return{};let e=[...n.basePath,n.definitionPath,n.openAiAnyTypeName];return n.flags.hasReferencedOpenAiAnyType=!0,{$ref:n.$refStrategy==="relative"?Yh(e,n.currentPath):e.join("/")}}function IN(n,e){let t={type:"array"};return n.type?._def&&n.type?._def?.typeName!==ue.ZodAny&&(t.items=nt(n.type._def,{...e,currentPath:[...e.currentPath,"items"]})),n.minLength&&Tt(t,"minItems",n.minLength.value,n.minLength.message,e),n.maxLength&&Tt(t,"maxItems",n.maxLength.value,n.maxLength.message,e),n.exactLength&&(Tt(t,"minItems",n.exactLength.value,n.exactLength.message,e),Tt(t,"maxItems",n.exactLength.value,n.exactLength.message,e)),t}function AN(n,e){let t={type:"integer",format:"int64"};if(!n.checks)return t;for(let r of n.checks)switch(r.kind){case"min":e.target==="jsonSchema7"?r.inclusive?Tt(t,"minimum",r.value,r.message,e):Tt(t,"exclusiveMinimum",r.value,r.message,e):(r.inclusive||(t.exclusiveMinimum=!0),Tt(t,"minimum",r.value,r.message,e));break;case"max":e.target==="jsonSchema7"?r.inclusive?Tt(t,"maximum",r.value,r.message,e):Tt(t,"exclusiveMaximum",r.value,r.message,e):(r.inclusive||(t.exclusiveMaximum=!0),Tt(t,"maximum",r.value,r.message,e));break;case"multipleOf":Tt(t,"multipleOf",r.value,r.message,e);break}return t}function NN(){return{type:"boolean"}}function eg(n,e){return nt(n.type._def,e)}var MN=(n,e)=>nt(n.innerType._def,e);function Fw(n,e,t){let r=t??e.dateStrategy;if(Array.isArray(r))return{anyOf:r.map((s,i)=>Fw(n,e,s))};switch(r){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return ZU(n,e)}}var ZU=(n,e)=>{let t={type:"integer",format:"unix-time"};if(e.target==="openApi3")return t;for(let r of n.checks)switch(r.kind){case"min":Tt(t,"minimum",r.value,r.message,e);break;case"max":Tt(t,"maximum",r.value,r.message,e);break}return t};function DN(n,e){return{...nt(n.innerType._def,e),default:n.defaultValue()}}function FN(n,e){return e.effectStrategy==="input"?nt(n.schema._def,e):hn(e)}function ON(n){return{type:"string",enum:Array.from(n.values)}}var GU=n=>"type"in n&&n.type==="string"?!1:"allOf"in n;function $N(n,e){let t=[nt(n.left._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),nt(n.right._def,{...e,currentPath:[...e.currentPath,"allOf","1"]})].filter(i=>!!i),r=e.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,s=[];return t.forEach(i=>{if(GU(i))s.push(...i.allOf),i.unevaluatedProperties===void 0&&(r=void 0);else{let o=i;if("additionalProperties"in i&&i.additionalProperties===!1){let{additionalProperties:a,...c}=i;o=c}else r=void 0;s.push(o)}}),s.length?{allOf:s,...r}:void 0}function jN(n,e){let t=typeof n.value;return t!=="bigint"&&t!=="number"&&t!=="boolean"&&t!=="string"?{type:Array.isArray(n.value)?"array":"object"}:e.target==="openApi3"?{type:t==="bigint"?"integer":t,enum:[n.value]}:{type:t==="bigint"?"integer":t,const:n.value}}var Ow,ci={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>(Ow===void 0&&(Ow=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),Ow),uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function tg(n,e){let t={type:"string"};if(n.checks)for(let r of n.checks)switch(r.kind){case"min":Tt(t,"minLength",typeof t.minLength=="number"?Math.max(t.minLength,r.value):r.value,r.message,e);break;case"max":Tt(t,"maxLength",typeof t.maxLength=="number"?Math.min(t.maxLength,r.value):r.value,r.message,e);break;case"email":switch(e.emailStrategy){case"format:email":li(t,"email",r.message,e);break;case"format:idn-email":li(t,"idn-email",r.message,e);break;case"pattern:zod":Nr(t,ci.email,r.message,e);break}break;case"url":li(t,"uri",r.message,e);break;case"uuid":li(t,"uuid",r.message,e);break;case"regex":Nr(t,r.regex,r.message,e);break;case"cuid":Nr(t,ci.cuid,r.message,e);break;case"cuid2":Nr(t,ci.cuid2,r.message,e);break;case"startsWith":Nr(t,RegExp(`^${$w(r.value,e)}`),r.message,e);break;case"endsWith":Nr(t,RegExp(`${$w(r.value,e)}$`),r.message,e);break;case"datetime":li(t,"date-time",r.message,e);break;case"date":li(t,"date",r.message,e);break;case"time":li(t,"time",r.message,e);break;case"duration":li(t,"duration",r.message,e);break;case"length":Tt(t,"minLength",typeof t.minLength=="number"?Math.max(t.minLength,r.value):r.value,r.message,e),Tt(t,"maxLength",typeof t.maxLength=="number"?Math.min(t.maxLength,r.value):r.value,r.message,e);break;case"includes":{Nr(t,RegExp($w(r.value,e)),r.message,e);break}case"ip":{r.version!=="v6"&&li(t,"ipv4",r.message,e),r.version!=="v4"&&li(t,"ipv6",r.message,e);break}case"base64url":Nr(t,ci.base64url,r.message,e);break;case"jwt":Nr(t,ci.jwt,r.message,e);break;case"cidr":{r.version!=="v6"&&Nr(t,ci.ipv4Cidr,r.message,e),r.version!=="v4"&&Nr(t,ci.ipv6Cidr,r.message,e);break}case"emoji":Nr(t,ci.emoji(),r.message,e);break;case"ulid":{Nr(t,ci.ulid,r.message,e);break}case"base64":{switch(e.base64Strategy){case"format:binary":{li(t,"binary",r.message,e);break}case"contentEncoding:base64":{Tt(t,"contentEncoding","base64",r.message,e);break}case"pattern:zod":{Nr(t,ci.base64,r.message,e);break}}break}case"nanoid":Nr(t,ci.nanoid,r.message,e);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return t}function $w(n,e){return e.patternStrategy==="escape"?VU(n):n}var JU=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function VU(n){let e="";for(let t=0;t<n.length;t++)JU.has(n[t])||(e+="\\"),e+=n[t];return e}function li(n,e,t,r){n.format||n.anyOf?.some(s=>s.format)?(n.anyOf||(n.anyOf=[]),n.format&&(n.anyOf.push({format:n.format,...n.errorMessage&&r.errorMessages&&{errorMessage:{format:n.errorMessage.format}}}),delete n.format,n.errorMessage&&(delete n.errorMessage.format,Object.keys(n.errorMessage).length===0&&delete n.errorMessage)),n.anyOf.push({format:e,...t&&r.errorMessages&&{errorMessage:{format:t}}})):Tt(n,"format",e,t,r)}function Nr(n,e,t,r){n.pattern||n.allOf?.some(s=>s.pattern)?(n.allOf||(n.allOf=[]),n.pattern&&(n.allOf.push({pattern:n.pattern,...n.errorMessage&&r.errorMessages&&{errorMessage:{pattern:n.errorMessage.pattern}}}),delete n.pattern,n.errorMessage&&(delete n.errorMessage.pattern,Object.keys(n.errorMessage).length===0&&delete n.errorMessage)),n.allOf.push({pattern:LN(e,r),...t&&r.errorMessages&&{errorMessage:{pattern:t}}})):Tt(n,"pattern",LN(e,r),t,r)}function LN(n,e){if(!e.applyRegexFlags||!n.flags)return n.source;let t={i:n.flags.includes("i"),m:n.flags.includes("m"),s:n.flags.includes("s")},r=t.i?n.source.toLowerCase():n.source,s="",i=!1,o=!1,a=!1;for(let c=0;c<r.length;c++){if(i){s+=r[c],i=!1;continue}if(t.i){if(o){if(r[c].match(/[a-z]/)){a?(s+=r[c],s+=`${r[c-2]}-${r[c]}`.toUpperCase(),a=!1):r[c+1]==="-"&&r[c+2]?.match(/[a-z]/)?(s+=r[c],a=!0):s+=`${r[c]}${r[c].toUpperCase()}`;continue}}else if(r[c].match(/[a-z]/)){s+=`[${r[c]}${r[c].toUpperCase()}]`;continue}}if(t.m){if(r[c]==="^"){s+=`(^|(?<=[\r
|
|
897
897
|
]))`;continue}else if(r[c]==="$"){s+=`($|(?=[\r
|
|
898
898
|
]))`;continue}}if(t.s&&r[c]==="."){s+=o?`${r[c]}\r
|
|
899
899
|
`:`[${r[c]}\r
|
|
@@ -1046,10 +1046,10 @@ Output:
|
|
|
1046
1046
|
data: ${JSON.stringify(e)}
|
|
1047
1047
|
|
|
1048
1048
|
`}function z2(n,e,t){let r=Array.isArray(n)?[...n]:[];return!e||B2(t)?Array.isArray(n)?r:void 0:(r.some(s=>at(s)&&s.name==="recall")||r.push({name:"recall",description:"Emergency recovery of older exact archived sources in chronological order. Use it only when needed exact raw text is not visible in active memory.",input_schema:{type:"object",additionalProperties:!1,properties:{offset:{type:"integer",minimum:0},limit:{type:"integer",minimum:1}},required:["offset","limit"]}}),r)}function B2(n){if(!at(n))return!1;let e=n.type;return e==="tool"||e==="none"}function q2(n){let e=new Set(n.pieces.map(t=>t.sourceId));return n.processedSourceIds.some(t=>!e.has(t))}function oD(n){return(Array.isArray(n)?n:[]).filter(t=>at(t)&&t.type==="tool_result")}function H2(n){return(Array.isArray(n)?n:[]).some(t=>at(t)&&t.type==="tool_use")}function aD(n){return at(n)?U2(n.content).includes("<pando_task_memory>"):!1}function W2(n){return at(n)&&typeof n.text=="string"&&n.text.includes("<pando_task_memory>")}function U2(n){return typeof n=="string"?n:Array.isArray(n)?n.map(e=>typeof e=="string"?e:at(e)&&typeof e.text=="string"?e.text:"").join(`
|
|
1049
|
-
`):""}function K2(n){return new TextEncoder().encode(gn(n)).byteLength}async function Wo(n,e){return at(n)&&typeof n.id=="string"&&n.id?n.id:`${e}_${await ui(gn(n),20)}`}var Lv=q(require("os")),cD=q(require("path")),Z2="auto",G2="https://api.openai.com/v1",J2="https://chatgpt.com/backend-api/codex",lD="gpt-5.4-mini",uD="gpt-5.4",dD=4e5,pD=1047576,fD=12e4,mD=28e4;function hD(n){return n==="~"?Lv.default.homedir():n.startsWith("~/")?cD.default.join(Lv.default.homedir(),n.slice(2)):n}function gD(n){return n.replace(/\/+$/,"")}function Bg(n){return`${gD(n)}/responses`}function qg(n,e){return n!==Z2?gD(n):V2(e)?G2:J2}function V2(n){return n?n.replace(/^Bearer\s+/i,"").trim().startsWith("sk-"):!1}var zv=q(require("fs/promises")),yD=q(require("path"));function Wg(n){return n?new Bv(n):{log:async()=>{}}}function Hs(n){let e={};for(let[t,r]of n.entries())e[t]=t.toLowerCase()==="authorization"?"[redacted]":r;return e}function
|
|
1049
|
+
`):""}function K2(n){return new TextEncoder().encode(gn(n)).byteLength}async function Wo(n,e){return at(n)&&typeof n.id=="string"&&n.id?n.id:`${e}_${await ui(gn(n),20)}`}var Lv=q(require("os")),cD=q(require("path")),Z2="auto",G2="https://api.openai.com/v1",J2="https://chatgpt.com/backend-api/codex",lD="gpt-5.4-mini",uD="gpt-5.4",dD=4e5,pD=1047576,fD=12e4,mD=28e4;function hD(n){return n==="~"?Lv.default.homedir():n.startsWith("~/")?cD.default.join(Lv.default.homedir(),n.slice(2)):n}function gD(n){return n.replace(/\/+$/,"")}function Bg(n){return`${gD(n)}/responses`}function qg(n,e){return n!==Z2?gD(n):V2(e)?G2:J2}function V2(n){return n?n.replace(/^Bearer\s+/i,"").trim().startsWith("sk-"):!1}var zv=q(require("fs/promises")),yD=q(require("path"));function Wg(n){return n?new Bv(n):{log:async()=>{}}}function Hs(n){let e={};for(let[t,r]of n.entries())e[t]=t.toLowerCase()==="authorization"?"[redacted]":r;return e}function Ur(n){return Hg(n)}var Bv=class{#t;constructor(e){this.#t=e}async log(e,t={}){let r=JSON.stringify({ts:new Date().toISOString(),event:e,...Hg(t)});await zv.default.mkdir(yD.default.dirname(this.#t),{recursive:!0}),await zv.default.appendFile(this.#t,`${r}
|
|
1050
1050
|
`,"utf8")}};function Hg(n){if(Array.isArray(n))return n.map(Hg);if(!n||typeof n!="object")return n;let e={};for(let[t,r]of Object.entries(n))e[t]=X2(t)?"[redacted]":Hg(r);return e}function X2(n){let e=n.toLowerCase();return e==="authorization"||e==="proxy-authorization"||e==="access_token"||e==="refresh_token"||e==="id_token"||e==="api_key"||e==="apikey"||e==="openai_api_key"||e==="anthropic_api_key"||e==="x-api-key"||e==="cookie"||e==="set-cookie"||e==="sessionkey"}function Ug(n){if(typeof n.payload=="string")return n.payload;if(Y2(n.payload)){let e=eG(n.payload);if(e.trim().length>0)return e}return gn(n.payload)}function bD(n,e){let t=Ug(n);return{kind:"chunks",sourceTextLength:t.length,segments:Q2(e,t.length).map(r=>({...r,text:t.slice(r.start,r.end)}))}}function Ll(n){if(n.segments.length===0)return"";let e=[],t=0;for(let[r,s]of n.segments.entries())s.start>t?e.push(`<gap omittedChars=${s.start-t} />`):r>0&&e.push("<gap omittedChars=0 />"),e.push(`<segment start=${s.start} end=${s.end}>`),e.push(s.text),e.push("</segment>"),t=s.end;return t<n.sourceTextLength&&e.push(`<gap omittedChars=${n.sourceTextLength-t} />`),e.join(`
|
|
1051
1051
|
`)}function qv(n){return n.length>160?`${n.slice(0,157)}...`:n}function SD(n){return new TextEncoder().encode(n.segments.map(e=>e.text).join("")).byteLength}function Q2(n,e){let t=n.filter(i=>Number.isInteger(i.start)&&Number.isInteger(i.end)).map(i=>({start:Math.max(0,Math.min(e,i.start)),end:Math.max(0,Math.min(e,i.end))})).filter(i=>i.end>i.start).sort((i,o)=>i.start-o.start||i.end-o.end),r=[],s=-1;for(let i of t)i.start<s||(r.push(i),s=i.end);return r}function Y2(n){return!!n&&typeof n=="object"&&!Array.isArray(n)&&n.type==="message"}function eG(n){let e=n.content;return Array.isArray(e)?e.map(t=>{if(typeof t=="string")return t;if(!t||typeof t!="object"||Array.isArray(t))return"";let r=t;return typeof r.text=="string"?r.text:typeof r.input_text=="string"?r.input_text:typeof r.output_text=="string"?r.output_text:""}).join(`
|
|
1052
|
-
`):""}var tG=["results","rows","items","exports","changedFiles","namespaces","edges"];async function wD(n,e){let t=[],r=n.filter(o=>o.sourceKind!=="user"&&!(o.sourceKind==="tool"&&Wv(o.toolName))&&o.sourceKind!=="tool_call"),s=r.length>0?await aG(r,e):{selectorsBySourceId:new Map,modelSelectedSourceIds:new Set},i=new Set(s.modelSelectedSourceIds);for(let o of n){let a;o.sourceKind==="user"||o.sourceKind==="tool_call"?a=[{kind:"whole"}]:o.sourceKind==="tool"&&Wv(o.toolName)?a=nG(o.payload):a=s.selectorsBySourceId.get(o.sourceId)??[{kind:"whole"}];let c=xD(o,a);t.push(...c.length>0?c:xD(o,[{kind:"whole"}]))}return{pieces:t,chunkedViaModelSourceCount:i.size,chunkedDeterministicSourceCount:n.length-i.size}}function Wv(n){return typeof n=="string"&&(n.startsWith("mcp__pando__")||n.startsWith("pando."))}function nG(n){if(Array.isArray(n))return n.map((e,t)=>({kind:"object_path",path:[t]}));for(let e of[[],["data"]])for(let t of tG){let r=[...e,t],s=vD(n,r);if(Array.isArray(s)&&s.length>0)return s.map((i,o)=>({kind:"object_path",path:[...r,o]}))}return[{kind:"whole"}]}function xD(n,e){let t=rG(e),r=[];for(let[s,i]of t.entries()){let o=Uv(n,i);if(!o)continue;let a=uG(n,i),c={id:`${n.sourceId}:${s}`,sourceKind:n.sourceKind,sourceId:n.sourceId,...n.toolName?{toolName:n.toolName}:{},content:o.content,previewText:o.previewText,...a?{pointer:a}:{},byteSize:o.byteSize,selector:i};c.byteSize>0&&r.push(c)}return r}function rG(n){let e=new Set,t=[];for(let r of n){let s=sG(r),i=JSON.stringify(s);e.has(i)||(e.add(i),t.push(s))}return t}function sG(n){if(n.kind!=="chunks")return n;let e=[...n.chunks].filter(r=>Number.isInteger(r.start)&&Number.isInteger(r.end)&&r.end>r.start).map(r=>({start:r.start,end:r.end})).sort((r,s)=>r.start-s.start||r.end-s.end),t=[];for(let r of e){let s=t.at(-1);if(!s||r.start>s.end){t.push(r);continue}s.end=Math.max(s.end,r.end)}return t.length===0?{kind:"whole"}:{kind:"chunks",chunks:t}}function Uv(n,e){if(e.kind==="whole"){if(n.sourceKind==="tool"&&Wv(n.toolName)){let s=n.payload;return{content:s,previewText:_D(s),byteSize:Hv(s)}}let r=Ug(n);return{content:r,previewText:qv(r),byteSize:Hv(r)}}if(e.kind==="chunks"){let r=bD(n,e.chunks),s=Ll(r);return{content:r,previewText:qv(s),byteSize:SD(r)}}let t=vD(n.payload,e.path);return t===void 0?null:{content:t,previewText:_D(t),byteSize:Hv(t)}}var iG=7,oG=null;async function aG(n,e){let t=new Map,r=new Map;for(let c of n){let l=Ug(c);t.set(c.sourceId,l),r.set(c.sourceId,[{start:0,end:l.length}])}let s=!1,i=new Set;for(let c=0;c<iG;c+=1){let l=[],u=[];for(let E of n){let T=r.get(E.sourceId)??[],x=t.get(E.sourceId)??"";for(let[w,D]of T.entries()){if(D.end<=D.start){i.add(E.sourceId);continue}let F=`s${u.length}`;l.push({itemId:F,text:x.slice(D.start,D.end)}),u.push({sourceId:E.sourceId,spanIndex:w})}}if(l.length===0)break;let d=Date.now(),p=await lG(e,{items:l}).catch(()=>null),f=Date.now()-d;if(!p||!Array.isArray(p.results)){s=!0;break}let m=new Map;for(let E of p.results){if(!E||typeof E!="object"||Array.isArray(E))continue;let T=E;typeof T.itemId=="string"&&m.set(T.itemId,E)}let h=0,g=0,y=[],b=[],S=new Map;for(let E of n)S.set(E.sourceId,[]);for(let[E,T]of l.entries()){let x=u[E],D=(r.get(x.sourceId)??[])[x.spanIndex],F=S.get(x.sourceId)??[],N=m.get(T.itemId),C=N&&Array.isArray(N.sections)?N.sections:null;if(typeof N?.error=="string"&&(g+=1),!C){y.push(0),b.push(1),F.push(D),S.set(x.sourceId,F);continue}i.add(x.sourceId);let O=cG(T.text,C);if(y.push(C.length),b.push(O.length),O.length<2){F.push(D),S.set(x.sourceId,F);continue}for(let M of O)F.push({start:D.start+M.start,end:D.start+M.end});S.set(x.sourceId,F),h+=1}for(let[E,T]of S)r.set(E,T);let _=Array.from(r.values()).reduce((E,T)=>E+T.length,0),R=Array.from(r.values()).reduce((E,T)=>T.reduce((x,w)=>Math.max(x,w.end-w.start),E),0);if(oG?.({round:c+1,itemCount:l.length,itemSizes:l.map(E=>E.text.length),realSplits:h,itemErrors:g,perItemSections:y,perItemResulting:b,resultingChunkCount:_,resultingLargest:R,durationMs:f}),h===0)break}let o=new Map,a=new Set;for(let c of n){let l=t.get(c.sourceId)??"",u=r.get(c.sourceId)??[],d=u.length>0&&u[0].start===0&&u[u.length-1].end===l.length&&u.every((p,f)=>p.end>p.start&&(f===0||p.start===u[f-1].end));if(s||!d){o.set(c.sourceId,[{kind:"whole"}]);continue}if(u.length<=1&&!i.has(c.sourceId)){o.set(c.sourceId,[{kind:"whole"}]);continue}o.set(c.sourceId,u.map(p=>({kind:"chunks",chunks:[{start:p.start,end:p.end}]}))),a.add(c.sourceId)}return{selectorsBySourceId:o,modelSelectedSourceIds:a}}function cG(n,e){if(n.length===0)return[];if(e.length===0)return[{start:0,end:n.length}];let t=0,r=[];for(let i of e){let o=typeof i.anchor=="string"?i.anchor:"";if(!o)continue;let a=n.indexOf(o,t);a<0||(r.push(a),t=a+Math.max(1,o.length))}if(r.length===0)return[{start:0,end:n.length}];r[0]!==0&&r.unshift(0);let s=[];for(let i=0;i<r.length;i+=1){let o=r[i],a=i+1<r.length?r[i+1]:n.length;a>o&&s.push({start:o,end:a})}return s.length===0||s[0].start!==0||s[s.length-1].end!==n.length?[{start:0,end:n.length}]:s}async function lG(n,e){let t=null;for(let r=1;r<=2;r+=1)try{return await n.sourceChunkBatch(e,r)}catch(s){t=s}throw t}function uG(n,e){let t={...n.pointer??{},selector:e};return Object.keys(t).length>0?t:null}function vD(n,e){let t=n;for(let r of e){if(typeof r=="number"){if(!Array.isArray(t))return;t=t[r];continue}if(!t||typeof t!="object"||Array.isArray(t))return;t=t[r]}return t}function Hv(n){return new TextEncoder().encode(typeof n=="string"?n:JSON.stringify(n)).length}function _D(n){let e=typeof n=="string"?n:JSON.stringify(n);return e.length>160?`${e.slice(0,157)}...`:e}var dG=new Set(["exact_duplicate","explicitly_invalidated_by_user","old_task_after_confirmed_task_switch","pure_ack_or_chatter","transient_format_request_only","clearly_unrelated_to_current_work","empty_or_invalid"]),pG=new Set(["exact_duplicate","explicitly_invalidated_by_user","old_task_after_confirmed_task_switch","pure_ack_or_chatter","transient_format_request_only","empty_or_invalid"]),fG=18e4,mG=996e3,hG=4,Pp=5;async function ED(n,e,t,r=[]){if(!n.activeTask)return{kind:"new_task"};if(e.length===0)return{kind:"same_task"};let s=0;try{for(;;){let i={activeTask:n.activeTask,activePieces:MG(n,r),archivePage:DG(n.archivedTasks,s),archivedTasks:FG(n.archivedTasks,s),newUserPieces:e},o=await CD(a=>t.taskRoute(i,a),kG,"task_route");if(o.kind!=="more_archived_tasks")return o;if(!i.archivePage.hasMore)return{kind:"same_task"};s+=Pp}}catch{return{kind:"same_task"}}}async function TD(n,e,t,r,s=[]){let i=n.roundSeq+1,o=new Map(s.map(k=>[k.id,k.renderText])),a=new Map(e.map(k=>[k.id,ID(k.content)])),c=await Promise.all(e.map(k=>bG(k,i)));for(let k of c){let $=a.get(k.id);$!==void 0&&o.set(k.id,$)}let l=gG(n,t,i,OG(e,i)),u=l.effectiveRoute.kind==="new_task",d=l.prePruneDuplicatePreferredPieceIds.size>0?kD(l.baseOldPieces,l.prePruneDuplicatePreferredPieceIds):{pieces:l.baseOldPieces.map(zl),duplicateIds:new Set},p=u?{oldPieces:d.pieces,newPieces:c.map(zl),duplicateIds:new Set}:SG(d.pieces,c),f=p.duplicateIds,m=p.newPieces.filter(k=>!f.has(k.id)),h=p.oldPieces,g=lr([...h,...m]),y=wG({activeTask:l.activeTask,taskRoute:l.effectiveRoute,candidatePieces:g,renderedById:o,latestUserPieceIds:c.filter(k=>k.sourceKind==="user").map(k=>k.id),tokenLimit:r.pruneBatchTokenLimit??fG,singleBatchTokenLimit:r.pruneSingleBatchTokenLimit??r.pruneBatchTokenLimit??mG}),b=[];for(let k of y){let $=await RG(k,r);b.push(...$.decisions)}let S={taskRoute:l.effectiveRoute,activeTask:l.activeTask,oldPieceIds:new Set(h.map(k=>k.id))},_=new Set(Gv(g,b,S).filter(k=>k.reason==="exact_duplicate").map(k=>k.pieceId)),R=b.filter(k=>!(k.drop===!0&&k.reason==="exact_duplicate")),E=AG(g,R,S),x=[...new Set(Gv(g,R,S).map(k=>k.pieceId))].filter(k=>!E.has(k)),w=lr(g.filter(k=>!E.has(k.id))),D=u?kD(w,new Set(m.map(k=>k.id))):{pieces:w,duplicateIds:new Set},F=xG(D.pieces,_,new Set(m.map(k=>k.id)),o),N=D.duplicateIds,C=new Set([...d.duplicateIds,...f,...N,...F.duplicateIds]),O=F.pieces,M=O.length>0?{...l.activeTask,pieceIds:O.map(k=>k.id),lastRound:i}:null,P=kp({roundSeq:i,activeTask:M,archivedTasks:l.archivedTasks,pieces:O,processedSourceIds:$g([...n.processedSourceIds,...e.map(k=>k.sourceId)])}),A=[...C].map(k=>({pieceId:k,drop:!0,reason:"exact_duplicate"})),v=new Set([...f,...m.filter(k=>C.has(k.id)).map(k=>k.id),...m.filter(k=>E.has(k.id)).map(k=>k.id)]),I=new Set([...h.filter(k=>C.has(k.id)).map(k=>k.id),...h.filter(k=>E.has(k.id)).map(k=>k.id)]);return{memory:P,taskRoute:l.effectiveRoute,newDropDecisions:{decisions:[...A.filter(k=>c.some($=>$.id===k.pieceId)),...R.filter(k=>!C.has(k.pieceId)&&m.some($=>$.id===k.pieceId))]},oldDropDecisions:{decisions:[...A.filter(k=>h.some($=>$.id===k.pieceId)),...R.filter(k=>!C.has(k.pieceId)&&h.some($=>$.id===k.pieceId))]},pruneCandidatePieceIds:g.map(k=>k.id),acceptedPruneDropPieceIds:[...E],sanityRejectedDropPieceIds:x,keptOldPieceIds:h.filter(k=>!I.has(k.id)).map(k=>k.id),droppedOldPieceIds:[...I],keptNewPieceIds:m.filter(k=>!v.has(k.id)).map(k=>k.id),droppedNewPieceIds:[...v],duplicateDroppedPieceIds:[...C]}}function gG(n,e,t,r){if(e.kind==="same_task"&&n.activeTask)return{activeTask:n.activeTask,archivedTasks:n.archivedTasks,baseOldPieces:n.pieces,effectiveRoute:e,prePruneDuplicatePreferredPieceIds:new Set};if(e.kind==="revive_task"){let s=yG(n.archivedTasks,e.relativeIndex);if(s){let i=n.archivedTasks.filter((a,c)=>c!==s.index),o=RD(i,n.activeTask,n.pieces,t);return{activeTask:{id:s.task.id,title:s.task.title,pieceIds:s.task.pieces.map(a=>a.id),startedRound:s.task.startedRound,lastRound:t},archivedTasks:o,baseOldPieces:lr([...s.task.pieces,...n.pieces]),effectiveRoute:e,prePruneDuplicatePreferredPieceIds:new Set(s.task.pieces.map(a=>a.id))}}if(n.activeTask)return{activeTask:n.activeTask,archivedTasks:n.archivedTasks,baseOldPieces:n.pieces,effectiveRoute:{kind:"same_task"},prePruneDuplicatePreferredPieceIds:new Set}}return{activeTask:{id:`task_${t}_${crypto.randomUUID().slice(0,8)}`,title:r,pieceIds:[],startedRound:t,lastRound:t},archivedTasks:RD(n.archivedTasks,n.activeTask,n.pieces,t),baseOldPieces:n.pieces,effectiveRoute:e.kind==="new_task"?e:{kind:"new_task"},prePruneDuplicatePreferredPieceIds:new Set}}function RD(n,e,t,r){return!e||t.length===0?n:[...n.filter(s=>s.id!==e.id),{id:e.id,title:e.title,pieces:lr(t),startedRound:e.startedRound,archivedRound:r}]}function yG(n,e){if(!Number.isInteger(e)||e>=0)return null;let t=n.length+e,r=n[t];return r?{task:r,index:t}:null}async function bG(n,e){let t=await ui(gn(n.content),20);return{id:n.id,sourceKind:n.sourceKind,sourceId:n.sourceId,...n.toolName?{toolName:n.toolName}:{},previewText:n.previewText,...n.pointer?{pointer:n.pointer}:{},byteSize:n.byteSize,createdSeq:e,selector:n.selector,contentHash:t}}function SG(n,e){let t=n.map(zl),r=e.map(zl),s=new Map(t.map(c=>[c.id,c])),i=new Map(r.map(c=>[c.id,c])),o=new Map,a=new Set;for(let c of t)o.has(c.contentHash)||o.set(c.contentHash,{kind:"old",pieceId:c.id});for(let c of r){let l=o.get(c.contentHash);if(l){a.add(c.id);let u=l.kind==="old"?s.get(l.pieceId):i.get(l.pieceId);u&&ic(u,Kg(c));continue}o.set(c.contentHash,{kind:"new",pieceId:c.id})}return{oldPieces:t,newPieces:r,duplicateIds:a}}function kD(n,e){let t=new Map,r=new Set;for(let s of lr(n).map(zl)){let i=t.get(s.contentHash);if(!i){t.set(s.contentHash,s);continue}if(e.has(s.id)&&!e.has(i.id)){ic(s,Kg(i));for(let o of i.duplicateSources??[])ic(s,o);r.add(i.id),t.set(s.contentHash,s);continue}ic(i,Kg(s));for(let o of s.duplicateSources??[])ic(i,o);r.add(s.id)}return{pieces:lr([...t.values()]),duplicateIds:r}}function xG(n,e,t,r){if(e.size===0)return{pieces:n,duplicateIds:new Set};let s=lr(n).map(zl),i=new Map;for(let a of s){let c=$G(r.get(a.id));c&&i.set(c,[...i.get(c)??[],a])}let o=new Set;for(let a of i.values()){if(a.length<2)continue;let c=a.filter(u=>e.has(u.id));if(c.length===0)continue;let l=_G(a,e,t);for(let u of c)if(u.id!==l.id){ic(l,Kg(u));for(let d of u.duplicateSources??[])ic(l,d);o.add(u.id)}}return{pieces:lr(s.filter(a=>!o.has(a.id))),duplicateIds:o}}function _G(n,e,t){let r=lr(n),s=r.filter(i=>!e.has(i.id));return s.length>0?s.filter(o=>t.has(o.id)).at(-1)??s[0]:r[0]}function zl(n){return{...n,...n.duplicateSources?{duplicateSources:n.duplicateSources.map(e=>({...e}))}:{}}}function ic(n,e){let t=n.duplicateSources??[];t.some(r=>r.pieceId===e.pieceId)||(n.duplicateSources=[...t,e])}function Kg(n){return{pieceId:n.id,sourceId:n.sourceId,sourceKind:n.sourceKind,createdSeq:n.createdSeq,...n.toolName?{toolName:n.toolName}:{},pointer:n.pointer??{selector:n.selector}}}function wG(n){let e=n.candidatePieces.map(l=>PD(l,!1)),t=n.latestUserPieceIds.map(l=>Zv(n.candidatePieces,n.renderedById,l)).filter(l=>!!l),r=vG(n.candidatePieces,n.renderedById,{activeTask:n.activeTask,taskRoute:n.taskRoute,latestUserPieces:t,sharedUserPieces:[],candidateManifest:e,evaluatedPieces:[]},n.tokenLimit),s=r.includedAllUserPieces,i=n.candidatePieces.filter(l=>n.renderedById.has(l.id)&&(s||l.sourceKind==="user")),o=[],a=[],c=()=>{a.length!==0&&(o.push(Kv(n.activeTask,n.taskRoute,t,r.pieces,n.candidatePieces,a)),a=[])};for(let l of i){let u=Zv(n.candidatePieces,n.renderedById,l.id);if(!u)continue;let d=Kv(n.activeTask,n.taskRoute,t,r.pieces,n.candidatePieces,[u]),p=Jv(d);if(p>n.singleBatchTokenLimit)continue;if(p>n.tokenLimit){c(),o.push(d);continue}let f=Kv(n.activeTask,n.taskRoute,t,r.pieces,n.candidatePieces,[...a,u]);if(Jv(f)>n.tokenLimit){c(),a.push(u);continue}a.push(u)}return c(),o}function Kv(n,e,t,r,s,i){let o=new Set(i.map(a=>a.id));return{activeTask:n,taskRoute:e,latestUserPieces:t,sharedUserPieces:r,candidateManifest:s.map(a=>PD(a,o.has(a.id))),evaluatedPieces:i}}function vG(n,e,t,r){let s=lr(n).filter(o=>o.sourceKind==="user"&&e.has(o.id)).reverse(),i=[];for(let o of s){let a=Zv(n,e,o.id);if(!a)continue;let c={...t,sharedUserPieces:[...i,a]};Jv(c)>r||i.push(a)}return{pieces:i.reverse(),includedAllUserPieces:i.length===s.length}}function PD(n,e){return{id:n.id,sourceKind:n.sourceKind,sourceId:n.sourceId,...n.toolName?{toolName:n.toolName}:{},createdSeq:n.createdSeq,...n.duplicateSources?{duplicateSources:n.duplicateSources}:{},byteSize:n.byteSize,fullPayloadIncludedInThisBatch:e}}function Zv(n,e,t){let r=n.find(i=>i.id===t),s=e.get(t);return!r||s===void 0?null:{id:r.id,sourceKind:r.sourceKind,sourceId:r.sourceId,...r.toolName?{toolName:r.toolName}:{},createdSeq:r.createdSeq,...r.duplicateSources?{duplicateSources:r.duplicateSources}:{},byteSize:r.byteSize,contentText:s}}async function RG(n,e){try{return await CD(t=>e.pieceDropBatch(n,t),t=>TG(t,n.evaluatedPieces),"piece_drop_batch")}catch{return{decisions:n.evaluatedPieces.map(t=>({pieceId:t.id,drop:!1,reason:null}))}}}function kG(n){let e=EG(n);return e?{ok:!0,value:e}:{ok:!1,errors:["task_route response must be an object"]}}function EG(n){if(!n||typeof n!="object"||Array.isArray(n))return null;let e=n;if(e.kind==="new_task")return{kind:"new_task"};if(e.kind==="more_archived_tasks")return{kind:"more_archived_tasks"};if(e.kind==="revive_task"){let t=typeof e.relativeIndex=="number"?Math.trunc(e.relativeIndex):-1;return t<0?{kind:"revive_task",relativeIndex:t}:{kind:"same_task"}}return{kind:"same_task"}}function TG(n,e){if(!n||typeof n!="object"||Array.isArray(n))return{ok:!1,errors:["piece_drop_batch response must be an object"]};let t=n;if(!Array.isArray(t.decisions))return{ok:!1,errors:["piece_drop_batch.decisions must be an array"]};let r=PG(t,e);return r.length===0?{ok:!0,value:t}:{ok:!1,errors:r}}function PG(n,e){let t=new Set(e.map(i=>i.id)),r=new Set,s=[];for(let i of n.decisions){if(!t.has(i.pieceId)){s.push(`piece_drop_batch references unknown piece ${i.pieceId}`);continue}r.has(i.pieceId)&&s.push(`piece_drop_batch duplicated piece ${i.pieceId}`),r.add(i.pieceId)}return s}function CG(n){return n.drop===!0&&typeof n.reason=="string"&&dG.has(n.reason)}function Gv(n,e,t){let r=new Map(n.map(s=>[s.id,s]));return e.filter(s=>{if(!CG(s))return!1;let i=r.get(s.pieceId);return i?IG(s.reason,i,t):!1})}function IG(n,e,t){return n!=="old_task_after_confirmed_task_switch"?!0:t.taskRoute.kind==="new_task"&&t.oldPieceIds.has(e.id)&&e.createdSeq<t.activeTask.startedRound}function AG(n,e,t){let r=Gv(n,e,t),s=new Set(r.map(o=>o.pieceId)),i=n.filter(o=>!s.has(o.id));return NG(n,i)?new Set(r.filter(o=>o.reason!==null&&pG.has(o.reason)).map(o=>o.pieceId)):s}function NG(n,e){return n.some(t=>t.sourceKind!=="assistant")?e.length===0||e.every(t=>t.sourceKind==="assistant"):!1}function MG(n,e){let t=new Map(e.map(r=>[r.id,r.renderText]));return lr(n.pieces).map(r=>({id:r.id,sourceKind:r.sourceKind,sourceId:r.sourceId,...r.toolName?{toolName:r.toolName}:{},createdSeq:r.createdSeq,byteSize:r.byteSize,contentText:t.get(r.id)??r.previewText}))}function DG(n,e){let t=e+Pp<n.length;return{offset:e,pageSize:Pp,hasMore:t,nextRelativeIndex:t?-(e+Pp+1):null}}function FG(n,e){return n.map((t,r)=>({relativeIndex:r-n.length,id:t.id,title:t.title,pieceCount:t.pieces.length,startedRound:t.startedRound,archivedRound:t.archivedRound})).reverse().slice(e,e+Pp)}function OG(n,e){let t=n.find(o=>o.sourceKind==="user"),r=t?ID(t.content):`Task ${e}`,i=(r.split(/\r?\n/).map(o=>o.trim()).find(Boolean)??r.trim()).replace(/\s+/g," ").trim()||`Task ${e}`;return i.length>120?`${i.slice(0,117)}...`:i}async function CD(n,e,t){let r=[],s=null;for(let i=1;i<=2;i+=1){let o;try{o=await n(i)}catch(c){s=c;continue}let a=e(o);if(a.ok)return a.value;r=a.errors}throw s&&r.length===0?s:new Error(`${t} validation failed: ${r.join("; ")}`)}function ID(n){return typeof n=="string"?n:AD(n)?Ll(n):JSON.stringify(n,null,2)}function $G(n){if(typeof n!="string"||n.length===0)return null;let e=jG(n);return e?LG(e):zG(n)??n}function jG(n){try{let e=JSON.parse(n);return AD(e)?e:null}catch{return null}}function AD(n){if(!n||typeof n!="object"||Array.isArray(n))return!1;let e=n;return e.kind!=="chunks"||!Array.isArray(e.segments)?!1:e.segments.every(t=>t&&typeof t=="object"&&!Array.isArray(t)&&Number.isInteger(t.start)&&Number.isInteger(t.end)&&typeof t.text=="string")}function LG(n){return n.segments.map(e=>e.text).join("")}function zG(n){let e=[...n.matchAll(/<segment start=\d+ end=\d+>\n([\s\S]*?)\n<\/segment>/g)];return e.length===0?null:e.map(t=>t[1]??"").join("")}function Jv(n){return Math.ceil(gn(n).length/hG)}function ND(n){return{roundSeq:n.roundSeq,activeTaskId:n.activeTask?.id??null,activeTaskPieceCount:n.activeTask?.pieceIds.length??0,archivedTaskCount:n.archivedTasks.length,pieceCount:n.pieces.length,pieceIds:n.pieces.map(e=>e.id),pieceBytes:n.pieces.reduce((e,t)=>e+t.byteSize,0),processedSourceCount:n.processedSourceIds.length}}function Zg(n){let e=BG(n);return e?{inputTokens:oc(e,["input_tokens","prompt_tokens"]),cachedInputTokens:qG(e),outputTokens:oc(e,["output_tokens","completion_tokens"]),totalTokens:oc(e,["total_tokens"])??WG(oc(e,["input_tokens","prompt_tokens"]),oc(e,["output_tokens","completion_tokens"])),raw:e}:null}function BG(n){if(!n||typeof n!="object")return null;if(!Array.isArray(n)&&"usage"in n){let e=n.usage;if(e&&typeof e=="object"&&!Array.isArray(e))return e}return null}function oc(n,e){for(let t of e){let r=n[t];if(typeof r=="number"&&Number.isFinite(r))return r}}function qG(n){let e=oc(n,["cached_input_tokens"]);if(e!==void 0)return e;let t=HG(n,["input_tokens_details","prompt_tokens_details"]);if(t)return oc(t,["cached_tokens"])}function HG(n,e){for(let t of e){let r=n[t];if(r&&typeof r=="object"&&!Array.isArray(r))return r}}function WG(n,e){if(!(n===void 0&&e===void 0))return(n??0)+(e??0)}async function MD(n,e,t,r={},s=[]){if(await r.logger?.log("memory_round_sources",{sessionKey:r.sessionKey,requestId:r.requestId,activeTaskBefore:n.activeTask,sources:e.map(m=>({sourceId:m.sourceId,sourceKind:m.sourceKind,toolName:m.toolName??null,pointer:m.pointer??null,payload:m.payload}))}),e.length===0)return await r.logger?.log("memory_round_skipped",{sessionKey:r.sessionKey,requestId:r.requestId,reason:"no_new_sources"}),{memory:n,changed:!1,newPieceIds:[],droppedPieceIds:[],sources:e};let i=new Set(n.pieces.map(m=>m.id)),o=e.filter(m=>m.sourceKind==="user").map(m=>({id:m.sourceId,sourceId:m.sourceId,content:m.payload,previewText:GG(m.payload),...m.pointer?{pointer:m.pointer}:{}})),[a,c]=await JG([wD(e,t),ED(n,o,t,s)]);await r.logger?.log("memory_round_chunked",{sessionKey:r.sessionKey,requestId:r.requestId,pieceCount:a.pieces.length,chunkedViaModelSourceCount:a.chunkedViaModelSourceCount,chunkedDeterministicSourceCount:a.chunkedDeterministicSourceCount,pieces:a.pieces.map(m=>({id:m.id,sourceId:m.sourceId,sourceKind:m.sourceKind,toolName:m.toolName??null,selector:m.selector,byteSize:m.byteSize,pointer:m.pointer??null,content:m.content}))});let l=await TD(n,a.pieces,c,t,s),u=l.memory,d=new Set(u.pieces.map(m=>m.id)),p=[...d].filter(m=>!i.has(m)),f=[...i].filter(m=>!d.has(m));return await r.logger?.log("memory_round_decision",{sessionKey:r.sessionKey,requestId:r.requestId,activeTaskBefore:n.activeTask,activeTaskAfter:u.activeTask,taskRoute:l.taskRoute,newDropDecisions:l.newDropDecisions.decisions,oldDropDecisions:l.oldDropDecisions.decisions,pruneCandidatePieceIds:l.pruneCandidatePieceIds,acceptedPruneDropPieceIds:l.acceptedPruneDropPieceIds,sanityRejectedDropPieceIds:l.sanityRejectedDropPieceIds,keptOldPieceIds:l.keptOldPieceIds,droppedOldPieceIds:l.droppedOldPieceIds,keptNewPieceIds:l.keptNewPieceIds,droppedNewPieceIds:l.droppedNewPieceIds,duplicateDroppedPieceIds:l.duplicateDroppedPieceIds}),await r.logger?.log("memory_round_updated",{sessionKey:r.sessionKey,requestId:r.requestId,newPieceIds:p,droppedPieceIds:f,...ND(u)}),await KG(u,r,{reason:"round_complete",newPieceIds:p,droppedPieceIds:f}),u.pieces.length===0&&(n.pieces.length>0||a.pieces.length>0)&&await r.logger?.log("empty_active_working_set",{sessionKey:r.sessionKey,requestId:r.requestId,activeTaskBefore:n.activeTask,taskRoute:l.taskRoute,previousPieceCount:n.pieces.length,chunkedPieceCount:a.pieces.length,droppedOldPieceIds:l.droppedOldPieceIds,droppedNewPieceIds:l.droppedNewPieceIds}),{memory:u,changed:!0,newPieceIds:p,droppedPieceIds:f,sources:e}}var UG=40;async function KG(n,e,t={}){if(!e.logger)return;let r=n.pieces.reduce((s,i)=>s+i.byteSize,0);await e.logger.log("memory_state_dump",{sessionKey:e.sessionKey,requestId:e.requestId,roundSeq:n.roundSeq,pieceCount:n.pieces.length,totalBytes:r,activeTask:n.activeTask?{id:n.activeTask.id,title:n.activeTask.title,pieceCount:n.activeTask.pieceIds.length}:null,archivedTaskCount:n.archivedTasks.length,processedSourceCount:n.processedSourceIds.length,pieces:n.pieces.map(s=>({id:s.id,sourceKind:s.sourceKind,toolName:s.toolName??null,byteSize:s.byteSize,preview:ZG(jg(s),UG)})),...t})}function ZG(n,e){let t=n.replace(/\s+/g," ").trim();return t.length>e?`${t.slice(0,e)}\u2026`:t}function GG(n){let e=typeof n=="string"?n:gn(n);return e.length>160?`${e.slice(0,157)}...`:e}async function JG(n){let e=await Promise.allSettled(n),t=e.find(r=>r.status==="rejected");if(t)throw t.reason;return[e[0].value,e[1].value]}var Gg=4096,VG=4;function LD(n,e,t,r,s,i,o,a,c){return{taskRoute:async(l,u=1)=>{let d=await Qv(n,e,t,mJ,l,uJ,"task_route",u,r,o,a,c);await Vv(d,s);try{return yJ(d.value),gJ(d.value)}catch(p){throw await o?.(Xv(d,l,d.value,ql(p))),p}},sourceChunkBatch:async(l,u=1)=>{let d=lJ(l);if(!XG(n,tR,d,eR))return await i?.({classifier:"source_chunk_batch",requestModel:e,estimatedInputTokens:Jg(tR,d,eR),reason:"exceeds_overflow_window",fallback:"whole_chunk_batch",sourceCount:l.items.length}),{results:l.items.map(f=>({itemId:f.itemId,error:"exceeds_overflow_window"}))};let p=await Qv(n,e,t,tR,l,eR,"source_chunk_batch",u,r,o,a,c,d);await Vv(p,s);try{return _J(l,p.value),wJ(l,p.value)}catch(f){throw await o?.(Xv(p,l,p.value,ql(f))),f}},pieceDropBatch:async(l,u=1)=>{let d=dJ(l),p=await Qv(n,e,t,hJ,l,d,"piece_drop_batch",u,r,o,a,c);await Vv(p,s);try{return SJ(l,p.value),bJ(l,p.value)}catch(f){throw await o?.(Xv(p,l,p.value,ql(f))),f}},pruneBatchTokenLimit:Math.max(1,Math.floor((n.smallStructuredContextWindow-Gg)*.7)),pruneSingleBatchTokenLimit:Math.max(1,n.overflowStructuredContextWindow-Gg)}}async function Vv(n,e){await e?.({classifier:n.selection.classifier,requestModel:n.selection.requestModel,chosenModel:n.selection.chosenModel,estimatedInputTokens:n.selection.estimatedInputTokens,selectionReason:n.selection.selectionReason,attempt:n.attempt,durationMs:n.durationMs,inputTokens:n.usage?.inputTokens,inputTokenDelta:n.usage?.inputTokens!==void 0?n.usage.inputTokens-n.selection.estimatedInputTokens:void 0,cachedInputTokens:n.usage?.cachedInputTokens,outputTokens:n.usage?.outputTokens,totalTokens:n.usage?.totalTokens})}function Xv(n,e,t,r){return{...Bl(n.selection,n.attempt,n.durationMs,"validation_error",r),requestBody:Kr(e),responseBody:t,usage:n.usage}}function XG(n,e,t,r){return Jg(e,t,r)<=n.overflowStructuredContextWindow-Gg}function QG(n,e,t){return Jg(n,gn(e),t)}function Jg(n,e,t){return Math.ceil((n.length+e.length+gn(t).length)/VG)}async function Qv(n,e,t,r,s,i,o,a,c,l,u,d,p){if(!t)throw new Error("No Authorization header or OPENAI_API_KEY available for structured model calls");let f=YG(n,e,r,s,i,o,p);await c?.(f);let m=Bg(qg(n.upstreamBaseUrl,t)),h=p??gn(s),g={model:f.chosenModel,instructions:r,stream:!0,store:!1,...eJ(f),text:{format:{type:"json_schema",name:o,strict:!0,schema:i}},input:[{role:"user",content:[{type:"input_text",text:h}]}]};await u?.({...Yv(f,a,m),requestHeaders:{authorization:"[redacted]","content-type":"application/json"},requestBody:Kr(g)});let y=performance.now(),b=!1;try{let S=await fetch(m,{method:"POST",headers:{authorization:t,"content-type":"application/json"},body:JSON.stringify(g),signal:AbortSignal.timeout(n.modelTimeoutMs)});if(!S.ok){let F=await S.text().catch(()=>""),N=Math.round(performance.now()-y);await d?.({...Yv(f,a,m),responseStatus:S.status,responseStatusText:S.statusText,responseHeaders:Hs(S.headers),responseBody:F,durationMs:N});let C=`Structured model call failed: ${S.status} ${F.slice(0,500)}`;throw b=!0,await l?.({...Bl(f,a,N,"http_error",C),responseStatus:S.status,responseContentType:S.headers.get("content-type"),bodyBytes:rR(F),requestBody:Kr(g),responseBody:F}),new Error(C)}let _=await S.text(),R=Math.round(performance.now()-y);await d?.({...Yv(f,a,m),responseStatus:S.status,responseStatusText:S.statusText,responseHeaders:Hs(S.headers),responseBody:_,durationMs:R});let E=sR(S,_),T=null,x="";try{E?x=nJ(_):(T=JSON.parse(_),x=zD(T))}catch(F){let N=`Structured model response was not parseable JSON: ${ql(F)}`;throw b=!0,await l?.({...Bl(f,a,R,"invalid_json",N),responseStatus:S.status,responseContentType:S.headers.get("content-type"),bodyBytes:rR(_),bodyLooksLikeEventStream:E,requestBody:Kr(g),responseBody:_}),new Error(N)}if(!x){let F=FD(S,_),N="Structured model response did not include text";throw b=!0,await l?.({...Bl(f,a,R,"no_output_text",N),...DD(S,_,T),usage:F,requestBody:Kr(g),responseBody:_}),new Error(N)}let w=FD(S,_),D;try{D=UM(x)}catch(F){let N=ql(F);throw b=!0,await l?.({...Bl(f,a,R,"invalid_json",N),...DD(S,_,T),usage:w,requestBody:Kr(g),responseBody:_}),F}return{value:D,usage:w,selection:f,attempt:a,durationMs:R}}catch(S){if(!b){let _=ql(S);await l?.({...Bl(f,a,Math.round(performance.now()-y),"unexpected_error",_),requestBody:Kr(g)})}throw S}}function Yv(n,e,t){return{classifier:n.classifier,requestModel:n.requestModel,chosenModel:n.chosenModel,estimatedInputTokens:n.estimatedInputTokens,selectionReason:n.selectionReason,attempt:e,url:t}}function Bl(n,e,t,r,s){return{classifier:n.classifier,requestModel:n.requestModel,chosenModel:n.chosenModel,estimatedInputTokens:n.estimatedInputTokens,selectionReason:n.selectionReason,attempt:e,durationMs:t,failureKind:r,message:s}}function DD(n,e,t=null){let r=sR(n,e),s={responseStatus:n.status,responseContentType:n.headers.get("content-type"),bodyBytes:rR(e),bodyLooksLikeEventStream:r};if(r){let o=sJ(e);s.sseEventCount=o.length,s.sseEventTypes=nR(o.map(c=>Cp(c,"type")??Cp($D(c,"response"),"status")??"unknown")).slice(0,25);let a=cJ(o.map(c=>$D(c,"response")).filter(Boolean));return a&&OD(s,a),s}let i=t??BD(e);return i&&typeof i=="object"&&OD(s,i),s}function YG(n,e,t,r,s,i,o){let a=o===void 0?QG(t,r,s):Jg(t,o,s);return i==="source_chunk_batch"?{classifier:i,requestModel:e,estimatedInputTokens:a,chosenModel:n.overflowStructuredModel,selectionReason:"forced_source_chunk_full_model"}:a<=n.smallStructuredContextWindow-Gg?{classifier:i,requestModel:e,estimatedInputTokens:a,chosenModel:n.smallStructuredModel,selectionReason:"fits_small_window"}:{classifier:i,requestModel:e,estimatedInputTokens:a,chosenModel:n.overflowStructuredModel,selectionReason:"overflow_to_large"}}function eJ(n){return n.classifier==="source_chunk_batch"&&tJ(n.chosenModel)?{reasoning:{effort:"low"},service_tier:"priority"}:n.classifier==="source_chunk_batch"?{service_tier:"priority"}:{}}function tJ(n){return/^gpt-5(?:[.-]|$)/.test(n)}function sR(n,e){return(n.headers.get("content-type")?.toLowerCase().includes("text/event-stream")??!1)||e.startsWith("event:")||e.startsWith("data:")||e.includes(`
|
|
1052
|
+
`):""}var tG=["results","rows","items","exports","changedFiles","namespaces","edges"];async function wD(n,e){let t=[],r=n.filter(o=>o.sourceKind!=="user"&&!(o.sourceKind==="tool"&&Wv(o.toolName))&&o.sourceKind!=="tool_call"),s=r.length>0?await aG(r,e):{selectorsBySourceId:new Map,modelSelectedSourceIds:new Set},i=new Set(s.modelSelectedSourceIds);for(let o of n){let a;o.sourceKind==="user"||o.sourceKind==="tool_call"?a=[{kind:"whole"}]:o.sourceKind==="tool"&&Wv(o.toolName)?a=nG(o.payload):a=s.selectorsBySourceId.get(o.sourceId)??[{kind:"whole"}];let c=xD(o,a);t.push(...c.length>0?c:xD(o,[{kind:"whole"}]))}return{pieces:t,chunkedViaModelSourceCount:i.size,chunkedDeterministicSourceCount:n.length-i.size}}function Wv(n){return typeof n=="string"&&(n.startsWith("mcp__pando__")||n.startsWith("pando."))}function nG(n){if(Array.isArray(n))return n.map((e,t)=>({kind:"object_path",path:[t]}));for(let e of[[],["data"]])for(let t of tG){let r=[...e,t],s=vD(n,r);if(Array.isArray(s)&&s.length>0)return s.map((i,o)=>({kind:"object_path",path:[...r,o]}))}return[{kind:"whole"}]}function xD(n,e){let t=rG(e),r=[];for(let[s,i]of t.entries()){let o=Uv(n,i);if(!o)continue;let a=uG(n,i),c={id:`${n.sourceId}:${s}`,sourceKind:n.sourceKind,sourceId:n.sourceId,...n.toolName?{toolName:n.toolName}:{},content:o.content,previewText:o.previewText,...a?{pointer:a}:{},byteSize:o.byteSize,selector:i};c.byteSize>0&&r.push(c)}return r}function rG(n){let e=new Set,t=[];for(let r of n){let s=sG(r),i=JSON.stringify(s);e.has(i)||(e.add(i),t.push(s))}return t}function sG(n){if(n.kind!=="chunks")return n;let e=[...n.chunks].filter(r=>Number.isInteger(r.start)&&Number.isInteger(r.end)&&r.end>r.start).map(r=>({start:r.start,end:r.end})).sort((r,s)=>r.start-s.start||r.end-s.end),t=[];for(let r of e){let s=t.at(-1);if(!s||r.start>s.end){t.push(r);continue}s.end=Math.max(s.end,r.end)}return t.length===0?{kind:"whole"}:{kind:"chunks",chunks:t}}function Uv(n,e){if(e.kind==="whole"){if(n.sourceKind==="tool"&&Wv(n.toolName)){let s=n.payload;return{content:s,previewText:_D(s),byteSize:Hv(s)}}let r=Ug(n);return{content:r,previewText:qv(r),byteSize:Hv(r)}}if(e.kind==="chunks"){let r=bD(n,e.chunks),s=Ll(r);return{content:r,previewText:qv(s),byteSize:SD(r)}}let t=vD(n.payload,e.path);return t===void 0?null:{content:t,previewText:_D(t),byteSize:Hv(t)}}var iG=7,oG=null;async function aG(n,e){let t=new Map,r=new Map;for(let c of n){let l=Ug(c);t.set(c.sourceId,l),r.set(c.sourceId,[{start:0,end:l.length}])}let s=!1,i=new Set;for(let c=0;c<iG;c+=1){let l=[],u=[];for(let E of n){let T=r.get(E.sourceId)??[],x=t.get(E.sourceId)??"";for(let[w,D]of T.entries()){if(D.end<=D.start){i.add(E.sourceId);continue}let F=`s${u.length}`;l.push({itemId:F,text:x.slice(D.start,D.end)}),u.push({sourceId:E.sourceId,spanIndex:w})}}if(l.length===0)break;let d=Date.now(),p=await lG(e,{items:l}).catch(()=>null),f=Date.now()-d;if(!p||!Array.isArray(p.results)){s=!0;break}let m=new Map;for(let E of p.results){if(!E||typeof E!="object"||Array.isArray(E))continue;let T=E;typeof T.itemId=="string"&&m.set(T.itemId,E)}let h=0,g=0,y=[],b=[],S=new Map;for(let E of n)S.set(E.sourceId,[]);for(let[E,T]of l.entries()){let x=u[E],D=(r.get(x.sourceId)??[])[x.spanIndex],F=S.get(x.sourceId)??[],N=m.get(T.itemId),C=N&&Array.isArray(N.sections)?N.sections:null;if(typeof N?.error=="string"&&(g+=1),!C){y.push(0),b.push(1),F.push(D),S.set(x.sourceId,F);continue}i.add(x.sourceId);let O=cG(T.text,C);if(y.push(C.length),b.push(O.length),O.length<2){F.push(D),S.set(x.sourceId,F);continue}for(let M of O)F.push({start:D.start+M.start,end:D.start+M.end});S.set(x.sourceId,F),h+=1}for(let[E,T]of S)r.set(E,T);let _=Array.from(r.values()).reduce((E,T)=>E+T.length,0),R=Array.from(r.values()).reduce((E,T)=>T.reduce((x,w)=>Math.max(x,w.end-w.start),E),0);if(oG?.({round:c+1,itemCount:l.length,itemSizes:l.map(E=>E.text.length),realSplits:h,itemErrors:g,perItemSections:y,perItemResulting:b,resultingChunkCount:_,resultingLargest:R,durationMs:f}),h===0)break}let o=new Map,a=new Set;for(let c of n){let l=t.get(c.sourceId)??"",u=r.get(c.sourceId)??[],d=u.length>0&&u[0].start===0&&u[u.length-1].end===l.length&&u.every((p,f)=>p.end>p.start&&(f===0||p.start===u[f-1].end));if(s||!d){o.set(c.sourceId,[{kind:"whole"}]);continue}if(u.length<=1&&!i.has(c.sourceId)){o.set(c.sourceId,[{kind:"whole"}]);continue}o.set(c.sourceId,u.map(p=>({kind:"chunks",chunks:[{start:p.start,end:p.end}]}))),a.add(c.sourceId)}return{selectorsBySourceId:o,modelSelectedSourceIds:a}}function cG(n,e){if(n.length===0)return[];if(e.length===0)return[{start:0,end:n.length}];let t=0,r=[];for(let i of e){let o=typeof i.anchor=="string"?i.anchor:"";if(!o)continue;let a=n.indexOf(o,t);a<0||(r.push(a),t=a+Math.max(1,o.length))}if(r.length===0)return[{start:0,end:n.length}];r[0]!==0&&r.unshift(0);let s=[];for(let i=0;i<r.length;i+=1){let o=r[i],a=i+1<r.length?r[i+1]:n.length;a>o&&s.push({start:o,end:a})}return s.length===0||s[0].start!==0||s[s.length-1].end!==n.length?[{start:0,end:n.length}]:s}async function lG(n,e){let t=null;for(let r=1;r<=2;r+=1)try{return await n.sourceChunkBatch(e,r)}catch(s){t=s}throw t}function uG(n,e){let t={...n.pointer??{},selector:e};return Object.keys(t).length>0?t:null}function vD(n,e){let t=n;for(let r of e){if(typeof r=="number"){if(!Array.isArray(t))return;t=t[r];continue}if(!t||typeof t!="object"||Array.isArray(t))return;t=t[r]}return t}function Hv(n){return new TextEncoder().encode(typeof n=="string"?n:JSON.stringify(n)).length}function _D(n){let e=typeof n=="string"?n:JSON.stringify(n);return e.length>160?`${e.slice(0,157)}...`:e}var dG=new Set(["exact_duplicate","explicitly_invalidated_by_user","old_task_after_confirmed_task_switch","pure_ack_or_chatter","transient_format_request_only","clearly_unrelated_to_current_work","empty_or_invalid"]),pG=new Set(["exact_duplicate","explicitly_invalidated_by_user","old_task_after_confirmed_task_switch","pure_ack_or_chatter","transient_format_request_only","empty_or_invalid"]),fG=18e4,mG=996e3,hG=4,Pp=5;async function ED(n,e,t,r=[]){if(!n.activeTask)return{kind:"new_task"};if(e.length===0)return{kind:"same_task"};let s=0;try{for(;;){let i={activeTask:n.activeTask,activePieces:MG(n,r),archivePage:DG(n.archivedTasks,s),archivedTasks:FG(n.archivedTasks,s),newUserPieces:e},o=await CD(a=>t.taskRoute(i,a),kG,"task_route");if(o.kind!=="more_archived_tasks")return o;if(!i.archivePage.hasMore)return{kind:"same_task"};s+=Pp}}catch{return{kind:"same_task"}}}async function TD(n,e,t,r,s=[]){let i=n.roundSeq+1,o=new Map(s.map(k=>[k.id,k.renderText])),a=new Map(e.map(k=>[k.id,ID(k.content)])),c=await Promise.all(e.map(k=>bG(k,i)));for(let k of c){let $=a.get(k.id);$!==void 0&&o.set(k.id,$)}let l=gG(n,t,i,OG(e,i)),u=l.effectiveRoute.kind==="new_task",d=l.prePruneDuplicatePreferredPieceIds.size>0?kD(l.baseOldPieces,l.prePruneDuplicatePreferredPieceIds):{pieces:l.baseOldPieces.map(zl),duplicateIds:new Set},p=u?{oldPieces:d.pieces,newPieces:c.map(zl),duplicateIds:new Set}:SG(d.pieces,c),f=p.duplicateIds,m=p.newPieces.filter(k=>!f.has(k.id)),h=p.oldPieces,g=lr([...h,...m]),y=wG({activeTask:l.activeTask,taskRoute:l.effectiveRoute,candidatePieces:g,renderedById:o,latestUserPieceIds:c.filter(k=>k.sourceKind==="user").map(k=>k.id),tokenLimit:r.pruneBatchTokenLimit??fG,singleBatchTokenLimit:r.pruneSingleBatchTokenLimit??r.pruneBatchTokenLimit??mG}),b=[];for(let k of y){let $=await RG(k,r);b.push(...$.decisions)}let S={taskRoute:l.effectiveRoute,activeTask:l.activeTask,oldPieceIds:new Set(h.map(k=>k.id))},_=new Set(Gv(g,b,S).filter(k=>k.reason==="exact_duplicate").map(k=>k.pieceId)),R=b.filter(k=>!(k.drop===!0&&k.reason==="exact_duplicate")),E=AG(g,R,S),x=[...new Set(Gv(g,R,S).map(k=>k.pieceId))].filter(k=>!E.has(k)),w=lr(g.filter(k=>!E.has(k.id))),D=u?kD(w,new Set(m.map(k=>k.id))):{pieces:w,duplicateIds:new Set},F=xG(D.pieces,_,new Set(m.map(k=>k.id)),o),N=D.duplicateIds,C=new Set([...d.duplicateIds,...f,...N,...F.duplicateIds]),O=F.pieces,M=O.length>0?{...l.activeTask,pieceIds:O.map(k=>k.id),lastRound:i}:null,P=kp({roundSeq:i,activeTask:M,archivedTasks:l.archivedTasks,pieces:O,processedSourceIds:$g([...n.processedSourceIds,...e.map(k=>k.sourceId)])}),A=[...C].map(k=>({pieceId:k,drop:!0,reason:"exact_duplicate"})),v=new Set([...f,...m.filter(k=>C.has(k.id)).map(k=>k.id),...m.filter(k=>E.has(k.id)).map(k=>k.id)]),I=new Set([...h.filter(k=>C.has(k.id)).map(k=>k.id),...h.filter(k=>E.has(k.id)).map(k=>k.id)]);return{memory:P,taskRoute:l.effectiveRoute,newDropDecisions:{decisions:[...A.filter(k=>c.some($=>$.id===k.pieceId)),...R.filter(k=>!C.has(k.pieceId)&&m.some($=>$.id===k.pieceId))]},oldDropDecisions:{decisions:[...A.filter(k=>h.some($=>$.id===k.pieceId)),...R.filter(k=>!C.has(k.pieceId)&&h.some($=>$.id===k.pieceId))]},pruneCandidatePieceIds:g.map(k=>k.id),acceptedPruneDropPieceIds:[...E],sanityRejectedDropPieceIds:x,keptOldPieceIds:h.filter(k=>!I.has(k.id)).map(k=>k.id),droppedOldPieceIds:[...I],keptNewPieceIds:m.filter(k=>!v.has(k.id)).map(k=>k.id),droppedNewPieceIds:[...v],duplicateDroppedPieceIds:[...C]}}function gG(n,e,t,r){if(e.kind==="same_task"&&n.activeTask)return{activeTask:n.activeTask,archivedTasks:n.archivedTasks,baseOldPieces:n.pieces,effectiveRoute:e,prePruneDuplicatePreferredPieceIds:new Set};if(e.kind==="revive_task"){let s=yG(n.archivedTasks,e.relativeIndex);if(s){let i=n.archivedTasks.filter((a,c)=>c!==s.index),o=RD(i,n.activeTask,n.pieces,t);return{activeTask:{id:s.task.id,title:s.task.title,pieceIds:s.task.pieces.map(a=>a.id),startedRound:s.task.startedRound,lastRound:t},archivedTasks:o,baseOldPieces:lr([...s.task.pieces,...n.pieces]),effectiveRoute:e,prePruneDuplicatePreferredPieceIds:new Set(s.task.pieces.map(a=>a.id))}}if(n.activeTask)return{activeTask:n.activeTask,archivedTasks:n.archivedTasks,baseOldPieces:n.pieces,effectiveRoute:{kind:"same_task"},prePruneDuplicatePreferredPieceIds:new Set}}return{activeTask:{id:`task_${t}_${crypto.randomUUID().slice(0,8)}`,title:r,pieceIds:[],startedRound:t,lastRound:t},archivedTasks:RD(n.archivedTasks,n.activeTask,n.pieces,t),baseOldPieces:n.pieces,effectiveRoute:e.kind==="new_task"?e:{kind:"new_task"},prePruneDuplicatePreferredPieceIds:new Set}}function RD(n,e,t,r){return!e||t.length===0?n:[...n.filter(s=>s.id!==e.id),{id:e.id,title:e.title,pieces:lr(t),startedRound:e.startedRound,archivedRound:r}]}function yG(n,e){if(!Number.isInteger(e)||e>=0)return null;let t=n.length+e,r=n[t];return r?{task:r,index:t}:null}async function bG(n,e){let t=await ui(gn(n.content),20);return{id:n.id,sourceKind:n.sourceKind,sourceId:n.sourceId,...n.toolName?{toolName:n.toolName}:{},previewText:n.previewText,...n.pointer?{pointer:n.pointer}:{},byteSize:n.byteSize,createdSeq:e,selector:n.selector,contentHash:t}}function SG(n,e){let t=n.map(zl),r=e.map(zl),s=new Map(t.map(c=>[c.id,c])),i=new Map(r.map(c=>[c.id,c])),o=new Map,a=new Set;for(let c of t)o.has(c.contentHash)||o.set(c.contentHash,{kind:"old",pieceId:c.id});for(let c of r){let l=o.get(c.contentHash);if(l){a.add(c.id);let u=l.kind==="old"?s.get(l.pieceId):i.get(l.pieceId);u&&ic(u,Kg(c));continue}o.set(c.contentHash,{kind:"new",pieceId:c.id})}return{oldPieces:t,newPieces:r,duplicateIds:a}}function kD(n,e){let t=new Map,r=new Set;for(let s of lr(n).map(zl)){let i=t.get(s.contentHash);if(!i){t.set(s.contentHash,s);continue}if(e.has(s.id)&&!e.has(i.id)){ic(s,Kg(i));for(let o of i.duplicateSources??[])ic(s,o);r.add(i.id),t.set(s.contentHash,s);continue}ic(i,Kg(s));for(let o of s.duplicateSources??[])ic(i,o);r.add(s.id)}return{pieces:lr([...t.values()]),duplicateIds:r}}function xG(n,e,t,r){if(e.size===0)return{pieces:n,duplicateIds:new Set};let s=lr(n).map(zl),i=new Map;for(let a of s){let c=$G(r.get(a.id));c&&i.set(c,[...i.get(c)??[],a])}let o=new Set;for(let a of i.values()){if(a.length<2)continue;let c=a.filter(u=>e.has(u.id));if(c.length===0)continue;let l=_G(a,e,t);for(let u of c)if(u.id!==l.id){ic(l,Kg(u));for(let d of u.duplicateSources??[])ic(l,d);o.add(u.id)}}return{pieces:lr(s.filter(a=>!o.has(a.id))),duplicateIds:o}}function _G(n,e,t){let r=lr(n),s=r.filter(i=>!e.has(i.id));return s.length>0?s.filter(o=>t.has(o.id)).at(-1)??s[0]:r[0]}function zl(n){return{...n,...n.duplicateSources?{duplicateSources:n.duplicateSources.map(e=>({...e}))}:{}}}function ic(n,e){let t=n.duplicateSources??[];t.some(r=>r.pieceId===e.pieceId)||(n.duplicateSources=[...t,e])}function Kg(n){return{pieceId:n.id,sourceId:n.sourceId,sourceKind:n.sourceKind,createdSeq:n.createdSeq,...n.toolName?{toolName:n.toolName}:{},pointer:n.pointer??{selector:n.selector}}}function wG(n){let e=n.candidatePieces.map(l=>PD(l,!1)),t=n.latestUserPieceIds.map(l=>Zv(n.candidatePieces,n.renderedById,l)).filter(l=>!!l),r=vG(n.candidatePieces,n.renderedById,{activeTask:n.activeTask,taskRoute:n.taskRoute,latestUserPieces:t,sharedUserPieces:[],candidateManifest:e,evaluatedPieces:[]},n.tokenLimit),s=r.includedAllUserPieces,i=n.candidatePieces.filter(l=>n.renderedById.has(l.id)&&(s||l.sourceKind==="user")),o=[],a=[],c=()=>{a.length!==0&&(o.push(Kv(n.activeTask,n.taskRoute,t,r.pieces,n.candidatePieces,a)),a=[])};for(let l of i){let u=Zv(n.candidatePieces,n.renderedById,l.id);if(!u)continue;let d=Kv(n.activeTask,n.taskRoute,t,r.pieces,n.candidatePieces,[u]),p=Jv(d);if(p>n.singleBatchTokenLimit)continue;if(p>n.tokenLimit){c(),o.push(d);continue}let f=Kv(n.activeTask,n.taskRoute,t,r.pieces,n.candidatePieces,[...a,u]);if(Jv(f)>n.tokenLimit){c(),a.push(u);continue}a.push(u)}return c(),o}function Kv(n,e,t,r,s,i){let o=new Set(i.map(a=>a.id));return{activeTask:n,taskRoute:e,latestUserPieces:t,sharedUserPieces:r,candidateManifest:s.map(a=>PD(a,o.has(a.id))),evaluatedPieces:i}}function vG(n,e,t,r){let s=lr(n).filter(o=>o.sourceKind==="user"&&e.has(o.id)).reverse(),i=[];for(let o of s){let a=Zv(n,e,o.id);if(!a)continue;let c={...t,sharedUserPieces:[...i,a]};Jv(c)>r||i.push(a)}return{pieces:i.reverse(),includedAllUserPieces:i.length===s.length}}function PD(n,e){return{id:n.id,sourceKind:n.sourceKind,sourceId:n.sourceId,...n.toolName?{toolName:n.toolName}:{},createdSeq:n.createdSeq,...n.duplicateSources?{duplicateSources:n.duplicateSources}:{},byteSize:n.byteSize,fullPayloadIncludedInThisBatch:e}}function Zv(n,e,t){let r=n.find(i=>i.id===t),s=e.get(t);return!r||s===void 0?null:{id:r.id,sourceKind:r.sourceKind,sourceId:r.sourceId,...r.toolName?{toolName:r.toolName}:{},createdSeq:r.createdSeq,...r.duplicateSources?{duplicateSources:r.duplicateSources}:{},byteSize:r.byteSize,contentText:s}}async function RG(n,e){try{return await CD(t=>e.pieceDropBatch(n,t),t=>TG(t,n.evaluatedPieces),"piece_drop_batch")}catch{return{decisions:n.evaluatedPieces.map(t=>({pieceId:t.id,drop:!1,reason:null}))}}}function kG(n){let e=EG(n);return e?{ok:!0,value:e}:{ok:!1,errors:["task_route response must be an object"]}}function EG(n){if(!n||typeof n!="object"||Array.isArray(n))return null;let e=n;if(e.kind==="new_task")return{kind:"new_task"};if(e.kind==="more_archived_tasks")return{kind:"more_archived_tasks"};if(e.kind==="revive_task"){let t=typeof e.relativeIndex=="number"?Math.trunc(e.relativeIndex):-1;return t<0?{kind:"revive_task",relativeIndex:t}:{kind:"same_task"}}return{kind:"same_task"}}function TG(n,e){if(!n||typeof n!="object"||Array.isArray(n))return{ok:!1,errors:["piece_drop_batch response must be an object"]};let t=n;if(!Array.isArray(t.decisions))return{ok:!1,errors:["piece_drop_batch.decisions must be an array"]};let r=PG(t,e);return r.length===0?{ok:!0,value:t}:{ok:!1,errors:r}}function PG(n,e){let t=new Set(e.map(i=>i.id)),r=new Set,s=[];for(let i of n.decisions){if(!t.has(i.pieceId)){s.push(`piece_drop_batch references unknown piece ${i.pieceId}`);continue}r.has(i.pieceId)&&s.push(`piece_drop_batch duplicated piece ${i.pieceId}`),r.add(i.pieceId)}return s}function CG(n){return n.drop===!0&&typeof n.reason=="string"&&dG.has(n.reason)}function Gv(n,e,t){let r=new Map(n.map(s=>[s.id,s]));return e.filter(s=>{if(!CG(s))return!1;let i=r.get(s.pieceId);return i?IG(s.reason,i,t):!1})}function IG(n,e,t){return n!=="old_task_after_confirmed_task_switch"?!0:t.taskRoute.kind==="new_task"&&t.oldPieceIds.has(e.id)&&e.createdSeq<t.activeTask.startedRound}function AG(n,e,t){let r=Gv(n,e,t),s=new Set(r.map(o=>o.pieceId)),i=n.filter(o=>!s.has(o.id));return NG(n,i)?new Set(r.filter(o=>o.reason!==null&&pG.has(o.reason)).map(o=>o.pieceId)):s}function NG(n,e){return n.some(t=>t.sourceKind!=="assistant")?e.length===0||e.every(t=>t.sourceKind==="assistant"):!1}function MG(n,e){let t=new Map(e.map(r=>[r.id,r.renderText]));return lr(n.pieces).map(r=>({id:r.id,sourceKind:r.sourceKind,sourceId:r.sourceId,...r.toolName?{toolName:r.toolName}:{},createdSeq:r.createdSeq,byteSize:r.byteSize,contentText:t.get(r.id)??r.previewText}))}function DG(n,e){let t=e+Pp<n.length;return{offset:e,pageSize:Pp,hasMore:t,nextRelativeIndex:t?-(e+Pp+1):null}}function FG(n,e){return n.map((t,r)=>({relativeIndex:r-n.length,id:t.id,title:t.title,pieceCount:t.pieces.length,startedRound:t.startedRound,archivedRound:t.archivedRound})).reverse().slice(e,e+Pp)}function OG(n,e){let t=n.find(o=>o.sourceKind==="user"),r=t?ID(t.content):`Task ${e}`,i=(r.split(/\r?\n/).map(o=>o.trim()).find(Boolean)??r.trim()).replace(/\s+/g," ").trim()||`Task ${e}`;return i.length>120?`${i.slice(0,117)}...`:i}async function CD(n,e,t){let r=[],s=null;for(let i=1;i<=2;i+=1){let o;try{o=await n(i)}catch(c){s=c;continue}let a=e(o);if(a.ok)return a.value;r=a.errors}throw s&&r.length===0?s:new Error(`${t} validation failed: ${r.join("; ")}`)}function ID(n){return typeof n=="string"?n:AD(n)?Ll(n):JSON.stringify(n,null,2)}function $G(n){if(typeof n!="string"||n.length===0)return null;let e=jG(n);return e?LG(e):zG(n)??n}function jG(n){try{let e=JSON.parse(n);return AD(e)?e:null}catch{return null}}function AD(n){if(!n||typeof n!="object"||Array.isArray(n))return!1;let e=n;return e.kind!=="chunks"||!Array.isArray(e.segments)?!1:e.segments.every(t=>t&&typeof t=="object"&&!Array.isArray(t)&&Number.isInteger(t.start)&&Number.isInteger(t.end)&&typeof t.text=="string")}function LG(n){return n.segments.map(e=>e.text).join("")}function zG(n){let e=[...n.matchAll(/<segment start=\d+ end=\d+>\n([\s\S]*?)\n<\/segment>/g)];return e.length===0?null:e.map(t=>t[1]??"").join("")}function Jv(n){return Math.ceil(gn(n).length/hG)}function ND(n){return{roundSeq:n.roundSeq,activeTaskId:n.activeTask?.id??null,activeTaskPieceCount:n.activeTask?.pieceIds.length??0,archivedTaskCount:n.archivedTasks.length,pieceCount:n.pieces.length,pieceIds:n.pieces.map(e=>e.id),pieceBytes:n.pieces.reduce((e,t)=>e+t.byteSize,0),processedSourceCount:n.processedSourceIds.length}}function Zg(n){let e=BG(n);return e?{inputTokens:oc(e,["input_tokens","prompt_tokens"]),cachedInputTokens:qG(e),outputTokens:oc(e,["output_tokens","completion_tokens"]),totalTokens:oc(e,["total_tokens"])??WG(oc(e,["input_tokens","prompt_tokens"]),oc(e,["output_tokens","completion_tokens"])),raw:e}:null}function BG(n){if(!n||typeof n!="object")return null;if(!Array.isArray(n)&&"usage"in n){let e=n.usage;if(e&&typeof e=="object"&&!Array.isArray(e))return e}return null}function oc(n,e){for(let t of e){let r=n[t];if(typeof r=="number"&&Number.isFinite(r))return r}}function qG(n){let e=oc(n,["cached_input_tokens"]);if(e!==void 0)return e;let t=HG(n,["input_tokens_details","prompt_tokens_details"]);if(t)return oc(t,["cached_tokens"])}function HG(n,e){for(let t of e){let r=n[t];if(r&&typeof r=="object"&&!Array.isArray(r))return r}}function WG(n,e){if(!(n===void 0&&e===void 0))return(n??0)+(e??0)}async function MD(n,e,t,r={},s=[]){if(await r.logger?.log("memory_round_sources",{sessionKey:r.sessionKey,requestId:r.requestId,activeTaskBefore:n.activeTask,sources:e.map(m=>({sourceId:m.sourceId,sourceKind:m.sourceKind,toolName:m.toolName??null,pointer:m.pointer??null,payload:m.payload}))}),e.length===0)return await r.logger?.log("memory_round_skipped",{sessionKey:r.sessionKey,requestId:r.requestId,reason:"no_new_sources"}),{memory:n,changed:!1,newPieceIds:[],droppedPieceIds:[],sources:e};let i=new Set(n.pieces.map(m=>m.id)),o=e.filter(m=>m.sourceKind==="user").map(m=>({id:m.sourceId,sourceId:m.sourceId,content:m.payload,previewText:GG(m.payload),...m.pointer?{pointer:m.pointer}:{}})),[a,c]=await JG([wD(e,t),ED(n,o,t,s)]);await r.logger?.log("memory_round_chunked",{sessionKey:r.sessionKey,requestId:r.requestId,pieceCount:a.pieces.length,chunkedViaModelSourceCount:a.chunkedViaModelSourceCount,chunkedDeterministicSourceCount:a.chunkedDeterministicSourceCount,pieces:a.pieces.map(m=>({id:m.id,sourceId:m.sourceId,sourceKind:m.sourceKind,toolName:m.toolName??null,selector:m.selector,byteSize:m.byteSize,pointer:m.pointer??null,content:m.content}))});let l=await TD(n,a.pieces,c,t,s),u=l.memory,d=new Set(u.pieces.map(m=>m.id)),p=[...d].filter(m=>!i.has(m)),f=[...i].filter(m=>!d.has(m));return await r.logger?.log("memory_round_decision",{sessionKey:r.sessionKey,requestId:r.requestId,activeTaskBefore:n.activeTask,activeTaskAfter:u.activeTask,taskRoute:l.taskRoute,newDropDecisions:l.newDropDecisions.decisions,oldDropDecisions:l.oldDropDecisions.decisions,pruneCandidatePieceIds:l.pruneCandidatePieceIds,acceptedPruneDropPieceIds:l.acceptedPruneDropPieceIds,sanityRejectedDropPieceIds:l.sanityRejectedDropPieceIds,keptOldPieceIds:l.keptOldPieceIds,droppedOldPieceIds:l.droppedOldPieceIds,keptNewPieceIds:l.keptNewPieceIds,droppedNewPieceIds:l.droppedNewPieceIds,duplicateDroppedPieceIds:l.duplicateDroppedPieceIds}),await r.logger?.log("memory_round_updated",{sessionKey:r.sessionKey,requestId:r.requestId,newPieceIds:p,droppedPieceIds:f,...ND(u)}),await KG(u,r,{reason:"round_complete",newPieceIds:p,droppedPieceIds:f}),u.pieces.length===0&&(n.pieces.length>0||a.pieces.length>0)&&await r.logger?.log("empty_active_working_set",{sessionKey:r.sessionKey,requestId:r.requestId,activeTaskBefore:n.activeTask,taskRoute:l.taskRoute,previousPieceCount:n.pieces.length,chunkedPieceCount:a.pieces.length,droppedOldPieceIds:l.droppedOldPieceIds,droppedNewPieceIds:l.droppedNewPieceIds}),{memory:u,changed:!0,newPieceIds:p,droppedPieceIds:f,sources:e}}var UG=40;async function KG(n,e,t={}){if(!e.logger)return;let r=n.pieces.reduce((s,i)=>s+i.byteSize,0);await e.logger.log("memory_state_dump",{sessionKey:e.sessionKey,requestId:e.requestId,roundSeq:n.roundSeq,pieceCount:n.pieces.length,totalBytes:r,activeTask:n.activeTask?{id:n.activeTask.id,title:n.activeTask.title,pieceCount:n.activeTask.pieceIds.length}:null,archivedTaskCount:n.archivedTasks.length,processedSourceCount:n.processedSourceIds.length,pieces:n.pieces.map(s=>({id:s.id,sourceKind:s.sourceKind,toolName:s.toolName??null,byteSize:s.byteSize,preview:ZG(jg(s),UG)})),...t})}function ZG(n,e){let t=n.replace(/\s+/g," ").trim();return t.length>e?`${t.slice(0,e)}\u2026`:t}function GG(n){let e=typeof n=="string"?n:gn(n);return e.length>160?`${e.slice(0,157)}...`:e}async function JG(n){let e=await Promise.allSettled(n),t=e.find(r=>r.status==="rejected");if(t)throw t.reason;return[e[0].value,e[1].value]}var Gg=4096,VG=4;function LD(n,e,t,r,s,i,o,a,c){return{taskRoute:async(l,u=1)=>{let d=await Qv(n,e,t,mJ,l,uJ,"task_route",u,r,o,a,c);await Vv(d,s);try{return yJ(d.value),gJ(d.value)}catch(p){throw await o?.(Xv(d,l,d.value,ql(p))),p}},sourceChunkBatch:async(l,u=1)=>{let d=lJ(l);if(!XG(n,tR,d,eR))return await i?.({classifier:"source_chunk_batch",requestModel:e,estimatedInputTokens:Jg(tR,d,eR),reason:"exceeds_overflow_window",fallback:"whole_chunk_batch",sourceCount:l.items.length}),{results:l.items.map(f=>({itemId:f.itemId,error:"exceeds_overflow_window"}))};let p=await Qv(n,e,t,tR,l,eR,"source_chunk_batch",u,r,o,a,c,d);await Vv(p,s);try{return _J(l,p.value),wJ(l,p.value)}catch(f){throw await o?.(Xv(p,l,p.value,ql(f))),f}},pieceDropBatch:async(l,u=1)=>{let d=dJ(l),p=await Qv(n,e,t,hJ,l,d,"piece_drop_batch",u,r,o,a,c);await Vv(p,s);try{return SJ(l,p.value),bJ(l,p.value)}catch(f){throw await o?.(Xv(p,l,p.value,ql(f))),f}},pruneBatchTokenLimit:Math.max(1,Math.floor((n.smallStructuredContextWindow-Gg)*.7)),pruneSingleBatchTokenLimit:Math.max(1,n.overflowStructuredContextWindow-Gg)}}async function Vv(n,e){await e?.({classifier:n.selection.classifier,requestModel:n.selection.requestModel,chosenModel:n.selection.chosenModel,estimatedInputTokens:n.selection.estimatedInputTokens,selectionReason:n.selection.selectionReason,attempt:n.attempt,durationMs:n.durationMs,inputTokens:n.usage?.inputTokens,inputTokenDelta:n.usage?.inputTokens!==void 0?n.usage.inputTokens-n.selection.estimatedInputTokens:void 0,cachedInputTokens:n.usage?.cachedInputTokens,outputTokens:n.usage?.outputTokens,totalTokens:n.usage?.totalTokens})}function Xv(n,e,t,r){return{...Bl(n.selection,n.attempt,n.durationMs,"validation_error",r),requestBody:Ur(e),responseBody:t,usage:n.usage}}function XG(n,e,t,r){return Jg(e,t,r)<=n.overflowStructuredContextWindow-Gg}function QG(n,e,t){return Jg(n,gn(e),t)}function Jg(n,e,t){return Math.ceil((n.length+e.length+gn(t).length)/VG)}async function Qv(n,e,t,r,s,i,o,a,c,l,u,d,p){if(!t)throw new Error("No Authorization header or OPENAI_API_KEY available for structured model calls");let f=YG(n,e,r,s,i,o,p);await c?.(f);let m=Bg(qg(n.upstreamBaseUrl,t)),h=p??gn(s),g={model:f.chosenModel,instructions:r,stream:!0,store:!1,...eJ(f),text:{format:{type:"json_schema",name:o,strict:!0,schema:i}},input:[{role:"user",content:[{type:"input_text",text:h}]}]};await u?.({...Yv(f,a,m),requestHeaders:{authorization:"[redacted]","content-type":"application/json"},requestBody:Ur(g)});let y=performance.now(),b=!1;try{let S=await fetch(m,{method:"POST",headers:{authorization:t,"content-type":"application/json"},body:JSON.stringify(g),signal:AbortSignal.timeout(n.modelTimeoutMs)});if(!S.ok){let F=await S.text().catch(()=>""),N=Math.round(performance.now()-y);await d?.({...Yv(f,a,m),responseStatus:S.status,responseStatusText:S.statusText,responseHeaders:Hs(S.headers),responseBody:F,durationMs:N});let C=`Structured model call failed: ${S.status} ${F.slice(0,500)}`;throw b=!0,await l?.({...Bl(f,a,N,"http_error",C),responseStatus:S.status,responseContentType:S.headers.get("content-type"),bodyBytes:rR(F),requestBody:Ur(g),responseBody:F}),new Error(C)}let _=await S.text(),R=Math.round(performance.now()-y);await d?.({...Yv(f,a,m),responseStatus:S.status,responseStatusText:S.statusText,responseHeaders:Hs(S.headers),responseBody:_,durationMs:R});let E=sR(S,_),T=null,x="";try{E?x=nJ(_):(T=JSON.parse(_),x=zD(T))}catch(F){let N=`Structured model response was not parseable JSON: ${ql(F)}`;throw b=!0,await l?.({...Bl(f,a,R,"invalid_json",N),responseStatus:S.status,responseContentType:S.headers.get("content-type"),bodyBytes:rR(_),bodyLooksLikeEventStream:E,requestBody:Ur(g),responseBody:_}),new Error(N)}if(!x){let F=FD(S,_),N="Structured model response did not include text";throw b=!0,await l?.({...Bl(f,a,R,"no_output_text",N),...DD(S,_,T),usage:F,requestBody:Ur(g),responseBody:_}),new Error(N)}let w=FD(S,_),D;try{D=UM(x)}catch(F){let N=ql(F);throw b=!0,await l?.({...Bl(f,a,R,"invalid_json",N),...DD(S,_,T),usage:w,requestBody:Ur(g),responseBody:_}),F}return{value:D,usage:w,selection:f,attempt:a,durationMs:R}}catch(S){if(!b){let _=ql(S);await l?.({...Bl(f,a,Math.round(performance.now()-y),"unexpected_error",_),requestBody:Ur(g)})}throw S}}function Yv(n,e,t){return{classifier:n.classifier,requestModel:n.requestModel,chosenModel:n.chosenModel,estimatedInputTokens:n.estimatedInputTokens,selectionReason:n.selectionReason,attempt:e,url:t}}function Bl(n,e,t,r,s){return{classifier:n.classifier,requestModel:n.requestModel,chosenModel:n.chosenModel,estimatedInputTokens:n.estimatedInputTokens,selectionReason:n.selectionReason,attempt:e,durationMs:t,failureKind:r,message:s}}function DD(n,e,t=null){let r=sR(n,e),s={responseStatus:n.status,responseContentType:n.headers.get("content-type"),bodyBytes:rR(e),bodyLooksLikeEventStream:r};if(r){let o=sJ(e);s.sseEventCount=o.length,s.sseEventTypes=nR(o.map(c=>Cp(c,"type")??Cp($D(c,"response"),"status")??"unknown")).slice(0,25);let a=cJ(o.map(c=>$D(c,"response")).filter(Boolean));return a&&OD(s,a),s}let i=t??BD(e);return i&&typeof i=="object"&&OD(s,i),s}function YG(n,e,t,r,s,i,o){let a=o===void 0?QG(t,r,s):Jg(t,o,s);return i==="source_chunk_batch"?{classifier:i,requestModel:e,estimatedInputTokens:a,chosenModel:n.overflowStructuredModel,selectionReason:"forced_source_chunk_full_model"}:a<=n.smallStructuredContextWindow-Gg?{classifier:i,requestModel:e,estimatedInputTokens:a,chosenModel:n.smallStructuredModel,selectionReason:"fits_small_window"}:{classifier:i,requestModel:e,estimatedInputTokens:a,chosenModel:n.overflowStructuredModel,selectionReason:"overflow_to_large"}}function eJ(n){return n.classifier==="source_chunk_batch"&&tJ(n.chosenModel)?{reasoning:{effort:"low"},service_tier:"priority"}:n.classifier==="source_chunk_batch"?{service_tier:"priority"}:{}}function tJ(n){return/^gpt-5(?:[.-]|$)/.test(n)}function sR(n,e){return(n.headers.get("content-type")?.toLowerCase().includes("text/event-stream")??!1)||e.startsWith("event:")||e.startsWith("data:")||e.includes(`
|
|
1053
1053
|
data:`)}function nJ(n){let e=[],t="";for(let r of n.split(/\r?\n/)){if(!r.startsWith("data:"))continue;let s=r.slice(5).trim();if(!s||s==="[DONE]")continue;let i;try{i=JSON.parse(s)}catch{continue}let o=iJ(i);o&&(t=o);let a=oJ(i);a&&e.push(a)}return t||e.join("")}function FD(n,e){if(sR(n,e))return rJ(e);try{return Zg(JSON.parse(e))}catch{return null}}function rJ(n){let e=null;for(let t of n.split(/\r?\n/)){if(!t.startsWith("data:"))continue;let r=t.slice(5).trim();if(!(!r||r==="[DONE]"))try{let s=JSON.parse(r);e=Zg(s)??Zg(s&&typeof s=="object"&&"response"in s?s.response:s)??e}catch{continue}}return e}function sJ(n){let e=[];for(let t of n.split(/\r?\n/)){if(!t.startsWith("data:"))continue;let r=t.slice(5).trim();if(!r||r==="[DONE]")continue;let s=BD(r);s&&typeof s=="object"&&e.push(s)}return e}function iJ(n){return!n||typeof n!="object"?"":zD(n.response??n)}function oJ(n){if(!n||typeof n!="object")return"";let e=n;return typeof e.delta=="string"?e.delta:typeof e.text=="string"&&String(e.type??"").endsWith(".delta")?e.text:""}function zD(n){if(n&&typeof n=="object"&&typeof n.output_text=="string")return String(n.output_text);let e=n&&typeof n=="object"?n.output:void 0;if(!Array.isArray(e))return"";let t=[];for(let r of e){if(!r||typeof r!="object")continue;let s=r.content;if(Array.isArray(s))for(let i of s)i&&typeof i=="object"&&typeof i.text=="string"&&t.push(String(i.text))}return t.join(`
|
|
1054
1054
|
`)}function OD(n,e){n.responseApiStatus=Cp(e,"status")??void 0,n.responseIncompleteDetails=e.incomplete_details,n.responseError=e.error;let t=e.output;if(!Array.isArray(t))return;n.outputItemTypes=nR(t.map(s=>Cp(s,"type")??"unknown")).slice(0,25);let r=[];for(let s of t){let i=aJ(s,"content");for(let o of i)r.push(Cp(o,"type")??"unknown")}n.outputContentTypes=nR(r).slice(0,25)}function $D(n,e){if(!n||typeof n!="object")return null;let t=n[e];return t&&typeof t=="object"?t:null}function Cp(n,e){if(!n||typeof n!="object")return null;let t=n[e];return typeof t=="string"?t:null}function aJ(n,e){if(!n||typeof n!="object")return[];let t=n[e];return Array.isArray(t)?t:[]}function cJ(n){for(let e=n.length-1;e>=0;e-=1)if(n[e])return n[e];return null}function nR(n){return[...new Set(n)]}function BD(n){try{return JSON.parse(n)}catch{return null}}function rR(n){return new TextEncoder().encode(n).length}function lJ(n){let e=["Produce outlines with anchors for each item below.",""];for(let t of n.items)e.push(`<item itemId=${JSON.stringify(t.itemId)} length=${t.text.length}>`,"<body>",t.text,"</body>","</item>","");return e.join(`
|
|
1055
1055
|
`)}function ql(n){return n instanceof Error?n.message:String(n)}var uJ={type:"object",properties:{kind:{type:"string",enum:["same_task","new_task","revive_task","more_archived_tasks"]},relativeIndex:{type:"integer"}},required:["kind","relativeIndex"],additionalProperties:!1},eR={type:"object",additionalProperties:!1,required:["results"],properties:{results:{type:"array",items:{anyOf:[{type:"object",additionalProperties:!1,required:["itemId","sections"],properties:{itemId:{type:"string"},sections:{type:"array",items:{type:"object",additionalProperties:!1,required:["label","anchor"],properties:{label:{type:"string"},anchor:{type:"string"}}}}}},{type:"object",additionalProperties:!1,required:["itemId","error"],properties:{itemId:{type:"string"},error:{type:"string"}}}]}}}};function dJ(n){let e=fJ(),t=pJ(n.evaluatedPieces.map(r=>r.id));return{type:"object",properties:{defaultDecision:e,overrides:{type:"array",items:t}},required:["defaultDecision","overrides"],additionalProperties:!1}}function pJ(n){let e={type:"string",enum:n},t=qD();return{anyOf:[{type:"object",properties:{pieceId:e,drop:{type:"boolean",enum:[!1]},reason:{type:"null"}},required:["pieceId","drop","reason"],additionalProperties:!1},{type:"object",properties:{pieceId:e,drop:{type:"boolean",enum:[!0]},reason:t},required:["pieceId","drop","reason"],additionalProperties:!1}]}}function fJ(){let n=qD();return{anyOf:[{type:"object",properties:{drop:{type:"boolean",enum:[!1]},reason:{type:"null"}},required:["drop","reason"],additionalProperties:!1},{type:"object",properties:{drop:{type:"boolean",enum:[!0]},reason:n},required:["drop","reason"],additionalProperties:!1}]}}function qD(){return{type:"string",enum:["exact_duplicate","explicitly_invalidated_by_user","old_task_after_confirmed_task_switch","pure_ack_or_chatter","transient_format_request_only","clearly_unrelated_to_current_work","empty_or_invalid"]}}var mJ=`
|
|
@@ -1106,19 +1106,19 @@ Rules:
|
|
|
1106
1106
|
- Return JSON only.
|
|
1107
1107
|
`.trim();function gJ(n){if(!n||typeof n!="object"||Array.isArray(n))return{kind:"same_task"};let e=n;if(e.kind==="new_task")return{kind:"new_task"};if(e.kind==="more_archived_tasks")return{kind:"more_archived_tasks"};if(e.kind==="revive_task"){let t=typeof e.relativeIndex=="number"?Math.trunc(e.relativeIndex):-1;return t<0?{kind:"revive_task",relativeIndex:t}:{kind:"same_task"}}return{kind:"same_task"}}function yJ(n){if(!n||typeof n!="object"||Array.isArray(n))throw new Error("task_route response must be an object");let e=n;if(e.kind!=="same_task"&&e.kind!=="new_task"&&e.kind!=="revive_task"&&e.kind!=="more_archived_tasks")throw new Error("task_route.kind is invalid");if(typeof e.relativeIndex!="number"||!Number.isInteger(e.relativeIndex))throw new Error("task_route.relativeIndex must be an integer");if((e.kind==="same_task"||e.kind==="new_task"||e.kind==="more_archived_tasks")&&e.relativeIndex!==0)throw new Error("task_route.relativeIndex must be 0 for same_task/new_task/more_archived_tasks");if(e.kind==="revive_task"&&e.relativeIndex>=0)throw new Error("task_route.relativeIndex must be negative for revive_task")}function bJ(n,e){let t=new Map(e.overrides.map(r=>[r.pieceId,r]));return{decisions:n.evaluatedPieces.map(r=>{let s=t.get(r.id)??e.defaultDecision;return{pieceId:r.id,drop:s.drop,reason:s.reason}})}}function SJ(n,e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("piece_drop_batch response must be an object");let t=e;if(jD(t.defaultDecision,"piece_drop_batch.defaultDecision"),!Array.isArray(t.overrides))throw new Error("piece_drop_batch.overrides must be an array");let r=new Set(n.evaluatedPieces.map(i=>i.id)),s=new Set;for(let[i,o]of t.overrides.entries()){let a=`piece_drop_batch.overrides[${i}]`;if(!o||typeof o!="object"||Array.isArray(o))throw new Error(`${a} must be an object`);let c=o;if(typeof c.pieceId!="string"||!r.has(c.pieceId))throw new Error(`${a}.pieceId must reference an evaluated piece`);if(s.has(c.pieceId))throw new Error(`${a}.pieceId is duplicated`);s.add(c.pieceId),jD(c,a)}}function jD(n,e){if(!n||typeof n!="object"||Array.isArray(n))throw new Error(`${e} must be an object`);let t=n;if(typeof t.drop!="boolean")throw new Error(`${e}.drop must be a boolean`);if(t.drop===!0){if(xJ(t.reason)===null)throw new Error(`${e}.reason must be an accepted reason when drop=true`);return}if(t.reason!==null)throw new Error(`${e}.reason must be null when drop=false`)}function xJ(n){return typeof n=="string"&&(n==="exact_duplicate"||n==="explicitly_invalidated_by_user"||n==="old_task_after_confirmed_task_switch"||n==="pure_ack_or_chatter"||n==="transient_format_request_only"||n==="clearly_unrelated_to_current_work"||n==="empty_or_invalid")?n:null}function _J(n,e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("source_chunk_batch response must be an object");let t=e;if(!Array.isArray(t.results))throw new Error("source_chunk_batch.results must be an array");let r=new Set(n.items.map(i=>i.itemId)),s=new Set;for(let[i,o]of t.results.entries()){let a=`source_chunk_batch.results[${i}]`;if(!o||typeof o!="object"||Array.isArray(o))throw new Error(`${a} must be an object`);let c=o;if(typeof c.itemId!="string"||!r.has(c.itemId))throw new Error(`${a}.itemId must reference a requested item`);if(s.has(c.itemId))throw new Error(`${a}.itemId is duplicated`);if(s.add(c.itemId),typeof c.error!="string"){if(!Array.isArray(c.sections))throw new Error(`${a}.sections must be an array (or provide error)`);for(let[l,u]of c.sections.entries()){let d=`${a}.sections[${l}]`;if(!u||typeof u!="object"||Array.isArray(u))throw new Error(`${d} must be an object`);let p=u;if(typeof p.label!="string")throw new Error(`${d}.label must be a string`);if(typeof p.anchor!="string")throw new Error(`${d}.anchor must be a string`)}}}}function wJ(n,e){let t=e,r=new Map;for(let s of t.results)r.set(s.itemId,s);return{results:n.items.map(s=>{let i=r.get(s.itemId);return i||{itemId:s.itemId,error:"missing_from_response"}})}}var Uo=q(require("fs/promises")),ac=q(require("path"));function vJ(n,e){return n.flatMap(t=>{let r=e.get(t.sourceId);if(!r)return[];let s=Uv(r,t.selector);return s?[{...t,renderText:RJ(s.content)}]:[]})}var Vg=class{#t;#e=new Map;constructor(e){this.#t=hD(e)}async load(e){let t=await this.#n(e),r=ac.default.join(t,"state.json");try{let s=JSON.parse(await Uo.default.readFile(r,"utf8"));if(!at(s)||!at(s.memory))return Pv();let i=s;return i.memory=kp(i.memory),Iv(i.memory),i}catch(s){if(iR(s))return Pv();throw s}}async save(e,t){let r=await this.#n(e),s=kp(structuredClone(t.memory));Iv(s),await HD(`${r}/state.json`,`${JSON.stringify({memory:s},null,2)}
|
|
1108
1108
|
`)}async materializeMemory(e,t){return{...t,pieces:await this.materializePieces(e,t.pieces)}}async materializePieces(e,t){let r=await this.#s(e,t.map(s=>s.sourceId));return vJ(t,r)}async archiveSources(e,t){let r=await this.#n(e),s=ac.default.join(r,"archive");await Uo.default.mkdir(s,{recursive:!0});for(let i of t){let o=ac.default.join(r,await this.#r(i.sourceId));try{await Uo.default.stat(o);continue}catch(a){if(!iR(a))throw a}await HD(o,`${JSON.stringify(i)}
|
|
1109
|
-
`)}}async getArchivedSources(e,t){let r=await this.#n(e),s=[];for(let i of t)try{let o=ac.default.join(r,await this.#r(i)),a=JSON.parse(await Uo.default.readFile(o,"utf8"));a&&typeof a=="object"&&!Array.isArray(a)&&typeof a.sourceId=="string"&&a.sourceId===i&&s.push(a)}catch(o){if(!iR(o))throw o}return s}async withLock(e,t){let r=this.#e.get(e)??Promise.resolve(),s,i=new Promise(a=>{s=a}),o=r.then(()=>i);this.#e.set(e,o),await r;try{return await t()}finally{s(),this.#e.get(e)===o&&this.#e.delete(e)}}async#s(e,t){let r=await this.getArchivedSources(e,[...new Set(t)]);return new Map(r.map(s=>[s.sourceId,s]))}async#r(e){return ac.default.join("archive",`${await ui(e,16)}.json`)}async#n(e){let t=e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,72)||"default",r=await ui(e,10);return ac.default.join(this.#t,"sessions",`${t}_${r}`)}};function RJ(n){return typeof n=="string"?n:kJ(n)?Ll(n):JSON.stringify(n,null,2)}function kJ(n){return!!n&&typeof n=="object"&&!Array.isArray(n)&&n.kind==="chunks"}async function HD(n,e){let t=`${n}.${crypto.randomUUID()}.tmp`;await Uo.default.mkdir(EJ(n),{recursive:!0}),await Uo.default.writeFile(t,e,"utf8"),await Uo.default.rename(t,n)}function EJ(n){let e=n.lastIndexOf("/");return e<=0?".":n.slice(0,e)}function iR(n){return!!(n&&typeof n=="object"&&n.code==="ENOENT")}async function aR(n){let e=TJ(n.gatewayConfig,n.structuredUpstreamBaseUrl),t=Wg(e.logFile),r=new Vg(e.stateDir),s=n.headers.get("authorization"),i=n.adapter.structuredAuthHeader(n.headers),o=await n.adapter.sessionKey(n.headers,n.body,n.fallbackSessionKey),a=crypto.randomUUID();try{return await r.withLock(o,async()=>{let c=await r.load(o),l=await r.materializeMemory(o,c.memory),u=await n.adapter.rewriteRequest(n.body,l,e),d=await n.adapter.runUpstream({gatewayConfig:n.gatewayConfig,proxyConfig:e,targetUrl:n.targetUrl,headers:n.headers,body:u,authHeader:s,memory:l,logger:t,sessionKey:o,resolveArchivedSources:y=>r.getArchivedSources(o,y)});if(!d.ok)return d.response;let p=await n.adapter.requestSources(u,new Set(c.memory.processedSourceIds)),f=d.assistantSources.filter(y=>!c.memory.processedSourceIds.includes(y.sourceId)),m=LD(e,n.adapter.requestModel(n.body),i,void 0,void 0,void 0,y=>t.log("structured_model_error",{requestId:a,sessionKey:o,...y})),h=await r.materializePieces(o,KM(c.memory)),g=await MD(c.memory,[...p,...f],m,{logger:t,requestId:a,sessionKey:o},h);return await r.archiveSources(o,g.sources),g.changed&&await r.save(o,{memory:g.memory}),d.response})}catch(c){return n.log(`${n.adapter.protocol} memory handler failed: ${c instanceof Error?c.message:String(c)}`),Response.json({error:{message:"pando gateway memory handler failed"}},{status:502})}}function TJ(n,e){return{upstreamBaseUrl:oo(e),apiKey:process.env.OPENAI_API_KEY??null,smallStructuredModel:process.env.PANDO_GATEWAY_SMALL_STRUCTURED_MODEL??process.env.PANDO_PROXY_SMALL_STRUCTURED_MODEL??lD,overflowStructuredModel:process.env.PANDO_GATEWAY_OVERFLOW_STRUCTURED_MODEL??process.env.PANDO_PROXY_OVERFLOW_STRUCTURED_MODEL??uD,smallStructuredContextWindow:oR(process.env.PANDO_GATEWAY_SMALL_STRUCTURED_CONTEXT_WINDOW??process.env.PANDO_PROXY_SMALL_STRUCTURED_CONTEXT_WINDOW,dD),overflowStructuredContextWindow:oR(process.env.PANDO_GATEWAY_OVERFLOW_STRUCTURED_CONTEXT_WINDOW??process.env.PANDO_PROXY_OVERFLOW_STRUCTURED_CONTEXT_WINDOW,pD),modelTimeoutMs:oR(process.env.PANDO_GATEWAY_MODEL_TIMEOUT_MS??process.env.PANDO_PROXY_MODEL_TIMEOUT_MS,fD),stateDir:n.stateDir,memoryEnabled:!0,logFile:n.logFile,codexAutoCompactTokenLimit:mD}}function oR(n,e){if(!n)return e;let t=Number(n);return Number.isInteger(t)&&t>0?t:e}async function WD(n,e,t){for(let s of["x-pando-session-id","x-codex-session-id","x-openai-conversation-id","openai-conversation-id"]){let i=n.headers.get(s);if(i)return i}for(let s of["conversation_id","session_id","conversation"]){let i=e[s];if(typeof i=="string"&&i.trim())return i}let r=e.metadata;if(at(r))for(let s of["session_id","conversation_id","cwd"]){let i=r[s];if(typeof i=="string"&&i.trim())return i}return t||`default_${await ui(JSON.stringify({model:e.model}))}`}function UD(n){return typeof n.model=="string"?n.model:null}var cR=3,di=2,Hl=500;async function ZD(n,e,t,r,s){let i=[],o=[],a=[];for(let c=0;c<=cR;c+=1){let l=await PJ(e.body,t,a);await e.logger?.log("upstream_loop_iteration",{sessionKey:s,iteration:c,loopOutputCount:a.length,requestBody:l});let u=await MJ(n,e.authHeader,l,e.logger);if(!u.ok)return{ok:!1,response:u.response,recalls:i};let d=u.body;o.push(...await Nv(d));let p=IJ(d);if(p.length===0)return{ok:!0,finalBody:d,response:FJ(d,!!e.body.stream),assistantSources:o,recalls:i};if(i.length+p.length>cR)throw new Error(`Exceeded max local recall calls (${cR})`);for(let f of p){let m=await CJ(t,f,r),h=m.items;i.push({offset:f.offset,limit:f.limit,returnedSourceIds:h.map(g=>g.sourceId),returnedBytes:KD(h.map(g=>g.payload))}),await e.logger?.log("archive_recall",{sessionKey:s,offset:f.offset,limit:f.limit,returnedSourceIds:h.map(g=>g.sourceId),returnedBytes:KD(h.map(g=>g.payload)),returnedSources:h}),a.push(f.item),a.push({type:"function_call_output",call_id:f.callId,output:gn({source:"archive",remainingArchivedSourceCount:m.remainingArchivedSourceCount,requestedOffset:f.offset,requestedLimit:f.limit,returnedCount:h.length,note:"The following items are from the per-session archive, not active memory. They were dropped from working memory earlier and will not automatically persist in future prompts.",items:h.map(g=>({sourceId:g.sourceId,sourceKind:g.sourceKind,...g.toolName?{toolName:g.toolName}:{},payload:g.payload}))})})}}throw new Error("Unreachable local tool loop state")}async function PJ(n,e,t){let r=Fv(e,e.pieces),s=await tD([...zg(n.input),...t],r);return{...NJ(n),input:s.input,stream:!0,store:!1}}async function CJ(n,e,t){let r=new Set(n.pieces.map(o=>o.sourceId)),s=n.processedSourceIds.filter(o=>!r.has(o)),i=s.slice(e.offset,e.offset+e.limit);return{remainingArchivedSourceCount:Math.max(0,s.length-(e.offset+i.length)),items:await t(i)}}function IJ(n){let e=Array.isArray(n.output)?n.output:[],t=[];for(let r of e){if(!at(r)||r.type!=="function_call"||r.name!=="recall"||typeof r.call_id!="string")continue;let s=AJ(r.arguments);t.push({callId:r.call_id,offset:s.offset,limit:s.limit,item:r})}return t}function AJ(n){let e=n;if(typeof n=="string"&&(e=JSON.parse(n)),!at(e))return{offset:0,limit:5};let t=typeof e.offset=="number"&&Number.isInteger(e.offset)&&e.offset>=0?e.offset:0,r=typeof e.limit=="number"&&Number.isInteger(e.limit)?e.limit:5,s=Math.max(1,r);return{offset:t,limit:s}}function KD(n){return new TextEncoder().encode(gn(n)).byteLength}function NJ(n){let e={...n};return delete e.previous_response_id,delete e.input,delete e.stream,delete e.store,e}async function MJ(n,e,t,r){let s=new Headers({"content-type":"application/json"});e&&s.set("authorization",e);let i=Bg(qg(n.upstreamBaseUrl,e)),o=JSON.stringify(t),a=null;for(let c=1;c<=di;c+=1){await r?.log("upstream_request",{attempt:c,maxAttempts:di,url:i,headers:Hs(s),body:
|
|
1109
|
+
`)}}async getArchivedSources(e,t){let r=await this.#n(e),s=[];for(let i of t)try{let o=ac.default.join(r,await this.#r(i)),a=JSON.parse(await Uo.default.readFile(o,"utf8"));a&&typeof a=="object"&&!Array.isArray(a)&&typeof a.sourceId=="string"&&a.sourceId===i&&s.push(a)}catch(o){if(!iR(o))throw o}return s}async withLock(e,t){let r=this.#e.get(e)??Promise.resolve(),s,i=new Promise(a=>{s=a}),o=r.then(()=>i);this.#e.set(e,o),await r;try{return await t()}finally{s(),this.#e.get(e)===o&&this.#e.delete(e)}}async#s(e,t){let r=await this.getArchivedSources(e,[...new Set(t)]);return new Map(r.map(s=>[s.sourceId,s]))}async#r(e){return ac.default.join("archive",`${await ui(e,16)}.json`)}async#n(e){let t=e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,72)||"default",r=await ui(e,10);return ac.default.join(this.#t,"sessions",`${t}_${r}`)}};function RJ(n){return typeof n=="string"?n:kJ(n)?Ll(n):JSON.stringify(n,null,2)}function kJ(n){return!!n&&typeof n=="object"&&!Array.isArray(n)&&n.kind==="chunks"}async function HD(n,e){let t=`${n}.${crypto.randomUUID()}.tmp`;await Uo.default.mkdir(EJ(n),{recursive:!0}),await Uo.default.writeFile(t,e,"utf8"),await Uo.default.rename(t,n)}function EJ(n){let e=n.lastIndexOf("/");return e<=0?".":n.slice(0,e)}function iR(n){return!!(n&&typeof n=="object"&&n.code==="ENOENT")}async function aR(n){let e=TJ(n.gatewayConfig,n.structuredUpstreamBaseUrl),t=Wg(e.logFile),r=new Vg(e.stateDir),s=n.headers.get("authorization"),i=n.adapter.structuredAuthHeader(n.headers),o=await n.adapter.sessionKey(n.headers,n.body,n.fallbackSessionKey),a=crypto.randomUUID();try{return await r.withLock(o,async()=>{let c=await r.load(o),l=await r.materializeMemory(o,c.memory),u=await n.adapter.rewriteRequest(n.body,l,e),d=await n.adapter.runUpstream({gatewayConfig:n.gatewayConfig,proxyConfig:e,targetUrl:n.targetUrl,headers:n.headers,body:u,authHeader:s,memory:l,logger:t,sessionKey:o,resolveArchivedSources:y=>r.getArchivedSources(o,y)});if(!d.ok)return d.response;let p=await n.adapter.requestSources(u,new Set(c.memory.processedSourceIds)),f=d.assistantSources.filter(y=>!c.memory.processedSourceIds.includes(y.sourceId)),m=LD(e,n.adapter.requestModel(n.body),i,void 0,void 0,void 0,y=>t.log("structured_model_error",{requestId:a,sessionKey:o,...y})),h=await r.materializePieces(o,KM(c.memory)),g=await MD(c.memory,[...p,...f],m,{logger:t,requestId:a,sessionKey:o},h);return await r.archiveSources(o,g.sources),g.changed&&await r.save(o,{memory:g.memory}),d.response})}catch(c){return n.log(`${n.adapter.protocol} memory handler failed: ${c instanceof Error?c.message:String(c)}`),Response.json({error:{message:"pando gateway memory handler failed"}},{status:502})}}function TJ(n,e){return{upstreamBaseUrl:oo(e),apiKey:process.env.OPENAI_API_KEY??null,smallStructuredModel:process.env.PANDO_GATEWAY_SMALL_STRUCTURED_MODEL??process.env.PANDO_PROXY_SMALL_STRUCTURED_MODEL??lD,overflowStructuredModel:process.env.PANDO_GATEWAY_OVERFLOW_STRUCTURED_MODEL??process.env.PANDO_PROXY_OVERFLOW_STRUCTURED_MODEL??uD,smallStructuredContextWindow:oR(process.env.PANDO_GATEWAY_SMALL_STRUCTURED_CONTEXT_WINDOW??process.env.PANDO_PROXY_SMALL_STRUCTURED_CONTEXT_WINDOW,dD),overflowStructuredContextWindow:oR(process.env.PANDO_GATEWAY_OVERFLOW_STRUCTURED_CONTEXT_WINDOW??process.env.PANDO_PROXY_OVERFLOW_STRUCTURED_CONTEXT_WINDOW,pD),modelTimeoutMs:oR(process.env.PANDO_GATEWAY_MODEL_TIMEOUT_MS??process.env.PANDO_PROXY_MODEL_TIMEOUT_MS,fD),stateDir:n.stateDir,memoryEnabled:!0,logFile:n.logFile,codexAutoCompactTokenLimit:mD}}function oR(n,e){if(!n)return e;let t=Number(n);return Number.isInteger(t)&&t>0?t:e}async function WD(n,e,t){for(let s of["x-pando-session-id","x-codex-session-id","x-openai-conversation-id","openai-conversation-id"]){let i=n.headers.get(s);if(i)return i}for(let s of["conversation_id","session_id","conversation"]){let i=e[s];if(typeof i=="string"&&i.trim())return i}let r=e.metadata;if(at(r))for(let s of["session_id","conversation_id","cwd"]){let i=r[s];if(typeof i=="string"&&i.trim())return i}return t||`default_${await ui(JSON.stringify({model:e.model}))}`}function UD(n){return typeof n.model=="string"?n.model:null}var cR=3,di=2,Hl=500;async function ZD(n,e,t,r,s){let i=[],o=[],a=[];for(let c=0;c<=cR;c+=1){let l=await PJ(e.body,t,a);await e.logger?.log("upstream_loop_iteration",{sessionKey:s,iteration:c,loopOutputCount:a.length,requestBody:l});let u=await MJ(n,e.authHeader,l,e.logger);if(!u.ok)return{ok:!1,response:u.response,recalls:i};let d=u.body;o.push(...await Nv(d));let p=IJ(d);if(p.length===0)return{ok:!0,finalBody:d,response:FJ(d,!!e.body.stream),assistantSources:o,recalls:i};if(i.length+p.length>cR)throw new Error(`Exceeded max local recall calls (${cR})`);for(let f of p){let m=await CJ(t,f,r),h=m.items;i.push({offset:f.offset,limit:f.limit,returnedSourceIds:h.map(g=>g.sourceId),returnedBytes:KD(h.map(g=>g.payload))}),await e.logger?.log("archive_recall",{sessionKey:s,offset:f.offset,limit:f.limit,returnedSourceIds:h.map(g=>g.sourceId),returnedBytes:KD(h.map(g=>g.payload)),returnedSources:h}),a.push(f.item),a.push({type:"function_call_output",call_id:f.callId,output:gn({source:"archive",remainingArchivedSourceCount:m.remainingArchivedSourceCount,requestedOffset:f.offset,requestedLimit:f.limit,returnedCount:h.length,note:"The following items are from the per-session archive, not active memory. They were dropped from working memory earlier and will not automatically persist in future prompts.",items:h.map(g=>({sourceId:g.sourceId,sourceKind:g.sourceKind,...g.toolName?{toolName:g.toolName}:{},payload:g.payload}))})})}}throw new Error("Unreachable local tool loop state")}async function PJ(n,e,t){let r=Fv(e,e.pieces),s=await tD([...zg(n.input),...t],r);return{...NJ(n),input:s.input,stream:!0,store:!1}}async function CJ(n,e,t){let r=new Set(n.pieces.map(o=>o.sourceId)),s=n.processedSourceIds.filter(o=>!r.has(o)),i=s.slice(e.offset,e.offset+e.limit);return{remainingArchivedSourceCount:Math.max(0,s.length-(e.offset+i.length)),items:await t(i)}}function IJ(n){let e=Array.isArray(n.output)?n.output:[],t=[];for(let r of e){if(!at(r)||r.type!=="function_call"||r.name!=="recall"||typeof r.call_id!="string")continue;let s=AJ(r.arguments);t.push({callId:r.call_id,offset:s.offset,limit:s.limit,item:r})}return t}function AJ(n){let e=n;if(typeof n=="string"&&(e=JSON.parse(n)),!at(e))return{offset:0,limit:5};let t=typeof e.offset=="number"&&Number.isInteger(e.offset)&&e.offset>=0?e.offset:0,r=typeof e.limit=="number"&&Number.isInteger(e.limit)?e.limit:5,s=Math.max(1,r);return{offset:t,limit:s}}function KD(n){return new TextEncoder().encode(gn(n)).byteLength}function NJ(n){let e={...n};return delete e.previous_response_id,delete e.input,delete e.stream,delete e.store,e}async function MJ(n,e,t,r){let s=new Headers({"content-type":"application/json"});e&&s.set("authorization",e);let i=Bg(qg(n.upstreamBaseUrl,e)),o=JSON.stringify(t),a=null;for(let c=1;c<=di;c+=1){await r?.log("upstream_request",{attempt:c,maxAttempts:di,url:i,headers:Hs(s),body:Ur(t)});let l;try{l=await fetch(i,{method:"POST",headers:s,body:o})}catch(p){if(a=p,c===di)throw await r?.log("upstream_failed",{attempt:c,maxAttempts:di,reason:"fetch_error",message:Xg(p)}),p;await r?.log("upstream_retry",{attempt:c,nextAttempt:c+1,maxAttempts:di,reason:"fetch_error",message:Xg(p),delayMs:Hl}),await lR(Hl);continue}let u=await l.text();await r?.log("upstream_response",{attempt:c,maxAttempts:di,status:l.status,statusText:l.statusText,contentType:l.headers.get("content-type"),headers:Hs(l.headers),body:u});let d=new Response(u,{status:l.status,statusText:l.statusText,headers:{"content-type":l.headers.get("content-type")??"application/json"}});if(!l.ok){if(DJ(l.status)&&c<di){await r?.log("upstream_retry",{attempt:c,nextAttempt:c+1,maxAttempts:di,reason:"retryable_status",status:l.status,statusText:l.statusText,headers:Hs(l.headers),body:u,delayMs:Hl}),await lR(Hl);continue}return{ok:!1,response:d}}try{let p=OJ(l.headers.get("content-type"),u);if(!at(p))throw new Error("Upstream response was not a JSON object");return{ok:!0,body:p,response:d}}catch(p){if(a=p,c===di)throw await r?.log("upstream_failed",{attempt:c,maxAttempts:di,reason:"invalid_response_body",message:Xg(p),status:l.status,statusText:l.statusText,contentType:l.headers.get("content-type"),headers:Hs(l.headers),body:u}),p;await r?.log("upstream_retry",{attempt:c,nextAttempt:c+1,maxAttempts:di,reason:"invalid_response_body",message:Xg(p),status:l.status,statusText:l.statusText,contentType:l.headers.get("content-type"),headers:Hs(l.headers),body:u,delayMs:Hl}),await lR(Hl)}}throw a??new Error("Upstream response was not parseable")}function DJ(n){return n===408||n===409||n===425||n===429||n>=500}function lR(n){return new Promise(e=>setTimeout(e,n))}function Xg(n){return n instanceof Error?n.message:String(n)}function FJ(n,e){if(!e)return new Response(JSON.stringify(n),{status:200,headers:{"content-type":"application/json"}});let t=[],r=Array.isArray(n.output)?n.output:[];for(let s=0;s<r.length;s+=1){let i=r[s];t.push(uR("response.output_item.added",{type:"response.output_item.added",output_index:s,item:i})),t.push(uR("response.output_item.done",{type:"response.output_item.done",output_index:s,item:i}))}return t.push(uR("response.completed",{type:"response.completed",response:n})),t.push(`data: [DONE]
|
|
1110
1110
|
|
|
1111
1111
|
`),new Response(t.join(""),{status:200,headers:{"content-type":"text/event-stream","cache-control":"no-cache",connection:"keep-alive"}})}function OJ(n,e){return $J(n,e)?jJ(e):JSON.parse(e)}function $J(n,e){return(n?.toLowerCase().includes("text/event-stream")??!1)||e.startsWith("event:")||e.startsWith("data:")||e.includes(`
|
|
1112
1112
|
data:`)}function jJ(n){let e=null,t=new Map;for(let r of n.split(/\r?\n/)){if(!r.startsWith("data:"))continue;let s=r.slice(5).trim();if(!s||s==="[DONE]")continue;let i;try{i=JSON.parse(s)}catch{continue}at(i)&&(at(i.response)?e=i.response:(Array.isArray(i.output)||typeof i.output_text=="string")&&(e=i),typeof i.output_index=="number"&&"item"in i&&t.set(i.output_index,i.item))}if(!e)throw new Error("Upstream SSE response did not include a final response object");return t.size>0&&(e.output=[...t.entries()].sort((r,s)=>r[0]-s[0]).map(([,r])=>r)),e}function uR(n,e){return`event: ${n}
|
|
1113
1113
|
data: ${JSON.stringify(e)}
|
|
1114
1114
|
|
|
1115
|
-
`}var GD={protocol:"openai-responses",async sessionKey(n,e,t){let r=new Request("http://pando.local/v1/responses",{method:"POST",headers:n,body:JSON.stringify(e)});return await WD(r,e,t??void 0)},requestModel(n){return UD(n)},structuredAuthHeader(n){return n.get("authorization")??(process.env.OPENAI_API_KEY?`Bearer ${process.env.OPENAI_API_KEY}`:null)},async rewriteRequest(n,e,t){return(await eD(n,e,t)).body},async requestSources(n,e){return await Av(n,e)},async runUpstream(n){return await ZD(n.proxyConfig,{authHeader:n.authHeader,body:n.body,logger:n.logger},n.memory,n.resolveArchivedSources,n.sessionKey)}};gt();var XD=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade","host","content-length","content-encoding"]),JD="Reminder: raw shell is strongly discouraged for code search, navigation, references, and edits. Prefer Pando AST/index tools first; use shell freely for tests, builds/compiles, package managers, git, generated or non-code files, unsupported languages, and anything Pando itself does not support.";function LJ(n,e,t,r=256){return new Promise((s,i)=>{let o=t,a=0,c=u=>{if(u.code==="EADDRINUSE"&&a<r){a+=1,o+=1,setImmediate(l);return}n.removeListener("error",c),i(u)},l=()=>{n.listen(o,e)};n.on("error",c),n.once("listening",()=>{n.removeListener("error",c),s(o)}),l()})}async function zJ(n){let e=[];for await(let t of n)e.push(typeof t=="string"?Buffer.from(t):t);return Buffer.concat(e)}function Yg(n){let e={};for(let[t,r]of Object.entries(n.headers))XD.has(t.toLowerCase())||r!==void 0&&(e[t]=Array.isArray(r)?r.join(", "):r);return e}function BJ(n){return Hs(new Headers(Yg(n)))}function qJ(n,e){return!n||n.length===0?null:e?
|
|
1115
|
+
`}var GD={protocol:"openai-responses",async sessionKey(n,e,t){let r=new Request("http://pando.local/v1/responses",{method:"POST",headers:n,body:JSON.stringify(e)});return await WD(r,e,t??void 0)},requestModel(n){return UD(n)},structuredAuthHeader(n){return n.get("authorization")??(process.env.OPENAI_API_KEY?`Bearer ${process.env.OPENAI_API_KEY}`:null)},async rewriteRequest(n,e,t){return(await eD(n,e,t)).body},async requestSources(n,e){return await Av(n,e)},async runUpstream(n){return await ZD(n.proxyConfig,{authHeader:n.authHeader,body:n.body,logger:n.logger},n.memory,n.resolveArchivedSources,n.sessionKey)}};gt();var XD=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade","host","content-length","content-encoding"]),JD="Reminder: raw shell is strongly discouraged for code search, navigation, references, and edits. Prefer Pando AST/index tools first; use shell freely for tests, builds/compiles, package managers, git, generated or non-code files, unsupported languages, and anything Pando itself does not support.";function LJ(n,e,t,r=256){return new Promise((s,i)=>{let o=t,a=0,c=u=>{if(u.code==="EADDRINUSE"&&a<r){a+=1,o+=1,setImmediate(l);return}n.removeListener("error",c),i(u)},l=()=>{n.listen(o,e)};n.on("error",c),n.once("listening",()=>{n.removeListener("error",c),s(o)}),l()})}async function zJ(n){let e=[];for await(let t of n)e.push(typeof t=="string"?Buffer.from(t):t);return Buffer.concat(e)}function Yg(n){let e={};for(let[t,r]of Object.entries(n.headers))XD.has(t.toLowerCase())||r!==void 0&&(e[t]=Array.isArray(r)?r.join(", "):r);return e}function BJ(n){return Hs(new Headers(Yg(n)))}function qJ(n,e){return!n||n.length===0?null:e?Ur(e):{encoding:"utf8",text:n.toString("utf8")}}function HJ(n){if(!n||n.length===0)return null;try{let e=JSON.parse(n.toString("utf8"));return xs(e)?e:null}catch{return null}}function WJ(n,e){nn(n,{actor:"agent",channel:"provider",...e})}function cc(n){WJ("provider.request",{requestId:n.requestId,sessionKey:n.sessionKey,protocol:n.protocol,method:n.method,targetUrl:n.targetUrl,stage:n.stage,headers:n.headers,body:qJ(n.body,n.parsedBody)}),QD({requestId:n.requestId,sessionKey:n.sessionKey,protocol:n.protocol,source:"request",stage:n.stage,body:n.parsedBody})}function QD(n){if(!n.body)return;let e=UJ(n.protocol,n.source,n.body);for(let t=0;t<e.length;t+=1){let r=e[t];nn("provider.transcript.item",{actor:r.actor,channel:"provider",requestId:n.requestId,sessionKey:n.sessionKey,protocol:n.protocol,source:n.source,stage:n.stage,itemIndex:t,itemType:r.itemType,body:Ur(r.body)})}}function UJ(n,e,t){return n==="anthropic-messages"?e==="request"?GJ(t):JJ(t):e==="request"?KJ(t):ZJ(t)}function KJ(n){let e=[];typeof n.instructions=="string"&&n.instructions.trim()&&e.push({actor:"system",itemType:"instructions",body:n.instructions});let t=n.input;if(typeof t=="string")return e.push({actor:"user",itemType:"input_text",body:t}),e;let r=Array.isArray(t)?t:xs(t)?[t]:[];for(let s of r)xs(s)&&e.push({actor:YD(s),itemType:typeof s.type=="string"?s.type:typeof s.role=="string"?s.role:"input_item",body:s});return e}function ZJ(n){let e=Array.isArray(n.output)?n.output:[],t=[];for(let r of e)xs(r)&&t.push({actor:YD(r),itemType:typeof r.type=="string"?r.type:typeof r.role=="string"?r.role:"output_item",body:r});return typeof n.output_text=="string"&&n.output_text.trim()&&t.length===0&&t.push({actor:"assistant",itemType:"output_text",body:n.output_text}),t}function YD(n){let e=typeof n.role=="string"?n.role:"";if(e==="user"||e==="assistant"||e==="system"||e==="developer")return e;let t=typeof n.type=="string"?n.type:"";return t.includes("tool_call_output")||t==="function_call_output"?"tool":t.includes("tool_call")||t==="function_call"||t==="reasoning"||t.includes("reasoning")||t.includes("thinking")?"assistant":t.includes("message")?e||"assistant":e||"unknown"}function GJ(n){let e=[];n.system!==void 0&&e.push({actor:"system",itemType:"system",body:n.system});let t=Array.isArray(n.messages)?n.messages:[];for(let r of t)xs(r)&&e.push({actor:VJ(r),itemType:typeof r.role=="string"?r.role:"message",body:r});return e}function JJ(n){return Array.isArray(n.content)?n.content.map(e=>({actor:(xs(e)&&e.type==="tool_use","assistant"),itemType:xs(e)&&typeof e.type=="string"?e.type:"content",body:e})):[]}function VJ(n){return(Array.isArray(n.content)?n.content:[]).some(r=>xs(r)&&r.type==="tool_result")?"tool":(typeof n.role=="string"?n.role:"")||"unknown"}async function Qg(n,e,t){let r=n;try{let s=n.clone(),i=await s.text(),o=XJ(t.protocol,s.headers.get("content-type")??"",i);nn("provider.response",{actor:t.source==="firewall"?"pando.firewall":"provider",channel:"provider",requestId:t.requestId,sessionKey:t.sessionKey,protocol:t.protocol,source:t.source,status:n.status,headers:Hs(n.headers),body:o?Ur(o):{encoding:"utf8",text:i}}),QD({requestId:t.requestId,sessionKey:t.sessionKey,protocol:t.protocol,source:"response",stage:t.source,body:o}),r=QJ(n,i)}catch(s){nn("provider.response.audit_error",{actor:"pando.gateway",channel:"provider",requestId:t.requestId,sessionKey:t.sessionKey,protocol:t.protocol,source:t.source,error:s instanceof Error?s.message:String(s)})}await sV(r,e)}function XJ(n,e,t){try{if(tV(e,t))return n==="openai-responses"?YJ(t):eV(t);let r=JSON.parse(t);return xs(r)?r:null}catch{return null}}function QJ(n,e){let t=new Headers;return n.headers.forEach((r,s)=>{let i=s.toLowerCase();i==="content-encoding"||i==="content-length"||t.set(s,r)}),new Response(e,{status:n.status,statusText:n.statusText,headers:t})}function YJ(n){let e=null,t=new Map;for(let r of eF(n))xs(r.response)&&(e=r.response),(Array.isArray(r.output)||typeof r.output_text=="string")&&(e=r),typeof r.output_index=="number"&&"item"in r&&t.set(r.output_index,r.item);return e&&t.size>0&&(e.output=[...t.entries()].sort((r,s)=>r[0]-s[0]).map(([,r])=>r)),e}function eV(n){let e=[];for(let t of eF(n))if(t.type==="content_block_start"&&xs(t.content_block)&&e.push(t.content_block),xs(t.message)&&Array.isArray(t.message.content))return t.message;return e.length>0?{content:e}:null}function eF(n){let e=[];for(let t of n.split(/\r?\n/)){if(!t.startsWith("data:"))continue;let r=t.slice(5).trim();if(!(!r||r==="[DONE]"))try{let s=JSON.parse(r);xs(s)&&e.push(s)}catch{}}return e}function tV(n,e){return n.toLowerCase().includes("text/event-stream")||e.startsWith("event:")||e.startsWith("data:")||e.includes(`
|
|
1116
1116
|
data:`)}function xs(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function nV(n,e,t){let r=e&&e.trim()?e:"anonymous-openai-session",s=t.get(r)??{sessionStartSent:!1,sawContinuation:!1,resetReminderSent:!1};t.set(r,s);let i=typeof n.previous_response_id=="string"&&n.previous_response_id.trim().length>0,o=null;return s.sessionStartSent?!i&&s.sawContinuation&&!s.resetReminderSent&&(s.resetReminderSent=!0,o="post-compaction"):(s.sessionStartSent=!0,o="session-start"),i&&(s.sawContinuation=!0,s.resetReminderSent=!1),o?(rV(n,o==="post-compaction"?`Post-compaction/context-reset reminder: ${JD}`:`Session-start reminder: ${JD}`),o):null}function rV(n,e){let t={type:"message",role:"developer",content:[{type:"input_text",text:e}]};if(Array.isArray(n.input)){n.input=[t,...n.input];return}if(typeof n.instructions=="string"&&n.instructions.trim()){n.instructions=`${n.instructions}
|
|
1117
1117
|
|
|
1118
1118
|
${e}`;return}n.instructions=e}async function sV(n,e){let t={};if(n.headers.forEach((s,i)=>{XD.has(i.toLowerCase())||(t[i]=s)}),e.writeHead(n.status,t),!n.body){e.end();return}let r=n.body.getReader();try{for(;;){let{done:s,value:i}=await r.read();if(s)break;i&&e.write(Buffer.from(i))}}finally{e.end()}}async function Wl(n,e=()=>{}){let t=WM(n.memoryEnabled,e),r=Dr(),s=new Map,i=Wg(n.logFile);i.log("gateway_started",{host:n.host,memoryEnabled:n.memoryEnabled,policyDefaultAction:r.defaultAction,policyNativeTools:r.nativeTools,policyOtherMcpMode:r.otherMcp.mode}).catch(()=>{});let o=VD.createServer((d,p)=>{a(d,p).catch(f=>{e(`request failed: ${f instanceof Error?f.message:String(f)}`),p.headersSent||p.writeHead(502,{"content-type":"application/json"}),p.end(JSON.stringify({error:{message:"pando gateway upstream error"}}))})});async function a(d,p){let f=d.url||"/";if(f==="/health"||f==="/healthz"){p.writeHead(200,{"content-type":"application/json"}),p.end(JSON.stringify({status:"ok",memory:n.memoryEnabled}));return}let m=d.headers.authorization??null,h=d.headers["x-api-key"]??null,g=d.headers["x-pando-session"]??d.headers.session_id??h??m;if(f.startsWith("/v1/messages")){let y=oo(n.anthropicUpstreamBaseUrl);await c(`${y}${f}`,d,p,"anthropic-messages",g);return}if(f.startsWith("/v1/responses")){let y=NM(n.openaiUpstreamBaseUrl,m),b=f.slice(3);await c(`${oo(y)}${b}`,d,p,"openai-responses",g,oo(y));return}p.writeHead(404,{"content-type":"application/json"}),p.end(JSON.stringify({error:{message:"pando gateway: unknown route"}}))}async function c(d,p,f,m,h,g){let y=crypto.randomUUID(),b={logger:i,sessionKey:h,requestId:y},S=p.method==="GET"||p.method==="HEAD"?void 0:await zJ(p),_=null;if(S&&S.length>0)try{let w=JSON.parse(S.toString("utf8"));w&&typeof w=="object"&&!Array.isArray(w)&&(_=w)}catch{_=null}let R=BJ(p);if(cc({requestId:y,sessionKey:h,protocol:m,method:p.method,targetUrl:d,headers:R,body:S,parsedBody:_,stage:"received"}),m==="openai-responses"&&_&&S&&S.length>0){let w=nV(_,h,s);w&&(S=Buffer.from(JSON.stringify(_),"utf8"),cc({requestId:y,sessionKey:h,protocol:m,method:p.method,targetUrl:d,headers:R,body:S,parsedBody:_,stage:"lifecycle_reminder"}),i.log("lifecycle_reminder_injected",{requestId:y,sessionKey:h,protocol:m,reminderKind:w}).catch(()=>{}))}if(i.log("request_received",{requestId:y,sessionKey:h,protocol:m,method:p.method,targetUrl:d,hasBody:!!(S&&S.length>0),memoryEnabled:n.memoryEnabled}).catch(()=>{}),_&&S&&S.length>0){let w=OM(m,_,r,b);if(w.response){e("request tool policy blocked provider-bound transcript item(s): "+w.blockedToolNames.join(", ")),i.log("request_short_circuited",{requestId:y,sessionKey:h,protocol:m,reason:"request_tool_policy_block",blockedToolNames:w.blockedToolNames}).catch(()=>{}),await Qg(w.response,f,{requestId:y,sessionKey:h,protocol:m,source:"firewall"});return}w.removedToolNames.length>0&&(_=w.body,S=Buffer.from(JSON.stringify(_),"utf8"),cc({requestId:y,sessionKey:h,protocol:m,method:p.method,targetUrl:d,headers:R,body:S,parsedBody:_,stage:"sanitized"}),e(`request tool policy removed definition(s): ${w.removedToolNames.join(", ")}; forwarding sanitized request`))}if(n.memoryEnabled&&m==="openai-responses"&&g&&p.method==="POST"&&d.endsWith("/responses")&&_){i.log("memory_request_begin",{requestId:y,sessionKey:h,protocol:m}).catch(()=>{}),cc({requestId:y,sessionKey:h,protocol:m,method:p.method,targetUrl:d,headers:R,body:S,parsedBody:_,stage:"forwarded"});let w=await aR({adapter:GD,gatewayConfig:n,structuredUpstreamBaseUrl:g,targetUrl:d,headers:new Headers(Yg(p)),body:_,fallbackSessionKey:h,log:e}),D=await Fg(w,m,_,r,b);i.log("memory_request_complete",{requestId:y,sessionKey:h,protocol:m,upstreamStatus:w.status}).catch(()=>{}),await Qg(D,f,{requestId:y,sessionKey:h,protocol:m,source:"memory"});return}if(n.memoryEnabled&&m==="anthropic-messages"&&p.method==="POST"&&_&&d.includes("/v1/messages")){i.log("memory_request_begin",{requestId:y,sessionKey:h,protocol:m}).catch(()=>{}),cc({requestId:y,sessionKey:h,protocol:m,method:p.method,targetUrl:d,headers:R,body:S,parsedBody:_,stage:"forwarded"});let w=await aR({adapter:iD,gatewayConfig:n,structuredUpstreamBaseUrl:n.openaiUpstreamBaseUrl,targetUrl:d,headers:new Headers(Yg(p)),body:_,fallbackSessionKey:h,log:e}),D=await Fg(w,m,_,r,b);i.log("memory_request_complete",{requestId:y,sessionKey:h,protocol:m,upstreamStatus:w.status}).catch(()=>{}),await Qg(D,f,{requestId:y,sessionKey:h,protocol:m,source:"memory"});return}if(n.memoryEnabled&&S&&S.length>0&&_)try{let w=await t.rewriteRequestBody(_,{protocol:m,sessionKey:h,stateDir:n.stateDir});S=Buffer.from(JSON.stringify(w),"utf8"),_=HJ(S),cc({requestId:y,sessionKey:h,protocol:m,method:p.method,targetUrl:d,headers:R,body:S,parsedBody:_,stage:"memory_rewritten"}),i.log("memory_sieve_rewrote_request",{requestId:y,sessionKey:h,protocol:m}).catch(()=>{})}catch(w){let D=w instanceof Error?w.message:String(w);i.log("memory_sieve_rewrite_skipped",{requestId:y,sessionKey:h,protocol:m,reason:D}).catch(()=>{}),e(`memory rewrite skipped (${D}); forwarding original body`)}let E={method:p.method,headers:Yg(p),body:S&&S.length>0?S:void 0};S&&S.length>0&&(E.duplex="half"),cc({requestId:y,sessionKey:h,protocol:m,method:p.method,targetUrl:d,headers:R,body:S,parsedBody:_,stage:"forwarded"}),i.log("upstream_forward",{requestId:y,sessionKey:h,protocol:m,targetUrl:d,method:p.method}).catch(()=>{});let T;try{T=await fetch(d,E)}catch(w){throw nn("provider.request.error",{actor:"pando.gateway",channel:"provider",requestId:y,sessionKey:h,protocol:m,method:p.method,targetUrl:d,error:w instanceof Error?w.message:String(w)}),w}i.log("upstream_response",{requestId:y,sessionKey:h,protocol:m,upstreamStatus:T.status}).catch(()=>{});let x=await Fg(T,m,_,r,b);await Qg(x,f,{requestId:y,sessionKey:h,protocol:m,source:"upstream"}),i.log("request_complete",{requestId:y,sessionKey:h,protocol:m}).catch(()=>{})}let l=await LJ(o,n.host,n.portStart),u=`http://${n.host}:${l}`;return e(`gateway listening on ${u} (memory=${n.memoryEnabled?"on":"off"})`),{host:n.host,port:l,openaiBaseUrl:`${u}/v1`,anthropicBaseUrl:u,close:()=>new Promise(d=>{o.close(()=>d())})}}var ny=require("child_process"),vF=q(require("fs")),RF=q(require("os")),Ul=q(require("path"));var tF=q(require("fs")),Ip=q(require("path"));function dR(n=process.cwd()){let e=[".git",".hg",".pando-root","package.json","Cargo.toml","go.mod"],t=Ip.default.resolve(n);for(;;){for(let s of e)if(iV(t,s))return t;let r=Ip.default.dirname(t);if(r===t)return Ip.default.resolve(n);t=r}}function iV(n,e){try{return tF.default.accessSync(Ip.default.join(n,e)),!0}catch{return!1}}var ey=q(require("fs")),oF=q(require("os")),Ko=q(require("path"));var rF=q(require("fs")),pR=q(require("path"));function fR(n,e=[]){let t=oV();return t&&!aV(t)?{command:process.execPath,args:[t,n,...e]}:{command:"npx",args:["-y","pando-ai@latest",n,...e]}}function sF(n,e=[]){let t=fR(n,e);return[nF(t.command),...t.args.map(nF)].join(" ")}function oV(){let n=pR.default.resolve(__dirname,"cli.js");try{return rF.default.accessSync(n),n}catch{return null}}function aV(n){return/^(1|true|yes)$/i.test(process.env.PANDO_FORCE_NPX_SELF_INVOCATION||"")?!0:n.split(pR.default.sep).join("/").includes("/.npm/_npx/")}function nF(n){return`'${n.replace(/'/g,"'\\''")}'`}var ty="pando";function aF(n){return fR("serve",[n])}function cF(n,e=null){let t=aF(n);return{mcpServers:{...cV(n,e),[ty]:{command:t.command,args:t.args}}}}function lF(n,e=null){return JSON.stringify(cF(n,e))}function uF(n,e=null){let t=cF(n,e),r=Ko.default.join(Ss(),"mcp");ey.default.mkdirSync(r,{recursive:!0});let s=Ko.default.join(r,"claude-mcp-config.json");return ey.default.writeFileSync(s,`${JSON.stringify(t,null,2)}
|
|
1119
1119
|
`),s}function cV(n,e){let t=e===null?null:new Set(e.map(iF).filter(Boolean));if(t&&t.size===0)return{};let r={};for(let s of lV(n)){let i;try{i=JSON.parse(ey.default.readFileSync(s,"utf8"))}catch{continue}let o=uV(i);for(let[a,c]of Object.entries(o))(t===null||t.has(iF(a)))&&!(a in r)&&(r[a]=c)}return r}function lV(n){let e=process.env.PANDO_CLAUDE_MCP_CONFIG?[process.env.PANDO_CLAUDE_MCP_CONFIG]:[],t=oF.default.homedir();return[...e,Ko.default.join(n,".mcp.json"),Ko.default.join(process.cwd(),".mcp.json"),Ko.default.join(t,".mcp.json"),Ko.default.join(t,".claude","mcp.json"),Ko.default.join(t,".config","claude","mcp.json")]}function uV(n){if(!n||typeof n!="object"||Array.isArray(n))return{};let e=n,t=e.mcpServers??e.mcp_servers;return!t||typeof t!="object"||Array.isArray(t)?{}:t}function iF(n){return n.replace(/^mcp__/,"").replace(/__.*$/,"").trim()}function dF(n){let e=aF(n),t=`mcp_servers.${ty}`,r=JSON.stringify(e.args);return["-c",`${t}.command=${JSON.stringify(e.command)}`,"-c",`${t}.args=${r}`,"-c",`${t}.required=true`,"-c",`${t}.enabled=true`,"-c",`${t}.default_tools_approval_mode="approve"`]}var mR=q(require("fs")),hR=q(require("path"));var dV=["mcp__computer-use","mcp__computer-use__*"],gR=["SessionStart","Setup","InstructionsLoaded","UserPromptSubmit","UserPromptExpansion","MessageDisplay","PreToolUse","PermissionRequest","PostToolUse","PostToolUseFailure","PostToolBatch","PermissionDenied","Notification","SubagentStart","SubagentStop","TaskCreated","TaskCompleted","Stop","StopFailure","TeammateIdle","ConfigChange","CwdChanged","WorktreeCreate","WorktreeRemove","PreCompact","PostCompact","SessionEnd","Elicitation","ElicitationResult"];function pF(){return JSON.stringify(mF())}function fF(){let n=hR.default.join(Ss(),"claude");mR.default.mkdirSync(n,{recursive:!0});let e=hR.default.join(n,"hook-settings.json");return mR.default.writeFileSync(e,`${JSON.stringify(mF(),null,2)}
|
|
1120
|
-
`),e}function mF(){let n=pV(),e={};for(let t of gR)e[t]=[{hooks:[n]}];return{hooks:e,permissions:{deny:[...dV]}}}function pV(){return{type:"command",command:sF("claude-hook")}}function hF(n,e={}){let t=[],r={ENABLE_CLAUDEAI_MCP_SERVERS:"false"},s=[];n.nativeTools==="deny"&&(t.push("--tools",""),s.push('native tools disabled (--tools ""); MCP remains available')),s.push("Claude.ai MCP/connectors disabled (ENABLE_CLAUDEAI_MCP_SERVERS=false)");let i=e.supportedFlags;i?.disableSlashCommands&&s.push("Claude slash commands/skills left enabled (not disabled)"),i?.bare&&s.push("Claude bare mode left OFF (preserves subscription/OAuth auth and hooks)"),i?.noChrome&&(t.push("--no-chrome"),s.push("Claude Chrome/browser tool surface disabled"));let o=dR(),a=fV(n);switch(uF(o,a),t.push("--mcp-config",lF(o,a),"--strict-mcp-config"),s.push(`Pando MCP dynamically injected via --mcp-config/--strict-mcp-config, root-scoped to ${o}; on-disk Claude config left untouched`),(e.hooksEnabled??!0)&&(fF(),t.push("--settings",pF()),s.push("Claude hooks installed for tool call/result enforcement and transcript audit")),n.otherMcp.mode){case"deny_all":s.push("other MCP servers blocked (strict: Pando only)");break;case"allow_list":n.otherMcp.tools.length>0&&t.push(`--allowedTools=${n.otherMcp.tools.join(",")}`),s.push(`other MCP restricted to allow-list (${n.otherMcp.servers.join(", ")||"none"}); strict config in effect`);break;case"deny_list":if(n.otherMcp.tools.length>0||n.otherMcp.servers.length>0){let c=[...n.otherMcp.tools,...n.otherMcp.servers.map(l=>`mcp__${l}`)];t.push(`--disallowedTools=${c.join(",")}`),s.push(`other MCP deny-list removed from Claude context (${c.join(", ")})`)}break;default:s.push("other MCP servers preserved in strict generated config");break}return{extraArgs:t,env:r,notes:s}}function fV(n){switch(n.otherMcp.mode){case"deny_all":return[];case"allow_list":return n.otherMcp.servers;default:return null}}function gF(n){let e=[],t={},r=[];n.nativeTools==="deny"&&(e.push("-c",'sandbox_mode="read-only"'),e.push("-c",'web_search="disabled"'),r.push("native tools restricted (read-only sandbox, web search disabled, best-effort); tool traffic is enforced at the gateway"));let s=dR();switch(e.push(...dF(s)),r.push(`Pando MCP (${ty}) dynamically injected via Codex -c overrides, root-scoped to ${s}; user MCP files are not modified`),n.otherMcp.mode){case"deny_all":case"allow_list":case"deny_list":r.push(`other MCP policy "${n.otherMcp.mode}" is best-effort for Codex (no strict-MCP flag); enforced at the gateway, not via config`);break;default:r.push("other MCP servers allowed");break}return{extraArgs:e,env:t,notes:r}}var yF=new Set(["-c","--config","--enable","--disable","--remote","--remote-auth-token-env","-i","--image","-m","--model","--local-provider","-p","--profile","-s","--sandbox","-a","--ask-for-approval","-C","--cd","--add-dir"]);function bF(n){for(let e=0;e<n.length;e+=1){let t=n[e];if(t==="--")return null;if(!mV(t)){if(yF.has(t)){e+=1;continue}if(!t.startsWith("-"))return{name:t,index:e}}}return null}function mV(n){let[e,t]=n.split("=",2);return t!==void 0&&yF.has(e)}var SF="pando-proxy";function hV(n){let e=`model_providers.${SF}`;return["-c",`model_provider="${SF}"`,"-c",`model_auto_compact_token_limit=${n.codexAutoCompactTokenLimit}`,"-c",`${e}.name="Pando Firewall"`,"-c",`${e}.base_url="http://${n.host}:${n.port}/v1"`,"-c",`${e}.wire_api="responses"`,"-c",`${e}.transport="responses_http"`,"-c",`${e}.requires_openai_auth=true`]}function xF(n,e){let t=hV(e),r=bF(n);return r?[...n.slice(0,r.index+1),...t,...n.slice(r.index+1)]:[...t,...n]}gt();Vt();var gV=28e4;function Fr(n){console.error(`[pando] ${n}`)}function yV(n){let e=st(n);process.env.PANDO_LOG_DIR||(process.env.PANDO_LOG_DIR=e),process.env.PANDO_GATEWAY_LOG_FILE||(process.env.PANDO_GATEWAY_LOG_FILE=Ul.default.join(e,"gateway-debug.jsonl"))}async function ry(n,e){yV(process.cwd());let t=Zo();nn("session.start",{actor:"pando.launcher",channel:"session",tool:n,projectRoot:process.cwd(),originalArgs:e});let r=pM(n);if(!r)return Fr(`could not find the real \`${n}\` binary. Is it installed and on PATH (outside ~/.pando/bin)?`),nn("session.end",{actor:"pando.launcher",channel:"session",tool:n,sessionId:t,exitCode:127,reason:"real_binary_not_found"}),127;let s=Dr();if(n==="claude"){let h=_V();if(h)return Fr(`refusing to launch claude: Claude hooks are disabled by ${h}. Pando requires hooks for subscription-mode tool/result enforcement.`),nn("session.end",{actor:"pando.launcher",channel:"session",tool:n,sessionId:t,exitCode:78,reason:"claude_hooks_disabled",disabledBy:h}),78}let i=$l({memoryEnabled:s.memory}),o=s.proxy[n]==="enforce",a=n==="claude"?bV():!1,c=o&&(n==="codex"||a),l=/^(1|true|yes)$/i.test(process.env.PANDO_ALLOW_UNSUPERVISED||""),u=null;if(c)try{u=await Wl(i,h=>Fr(`gateway: ${h}`))}catch(h){let g=h instanceof Error?h.message:String(h);if(!l)return Fr(`refusing to launch ${n}: the Pando gateway could not start (${g}). Fix the problem, or set PANDO_ALLOW_UNSUPERVISED=1 to run ${n} without wire interception (NOT recommended \u2014 the firewall will be off).`),nn("session.end",{actor:"pando.launcher",channel:"session",tool:n,sessionId:t,exitCode:78,reason:"gateway_start_failed",error:g}),78;Fr(`gateway failed to start (${g}); PANDO_ALLOW_UNSUPERVISED is set, so launching ${n} WITHOUT wire interception.`)}let d=n==="claude"&&!u;o?d&&!a?Fr("Claude gateway auth not configured; using Claude hooks-only fallback for tool call/result firewalling."):d&&Fr("Claude gateway unavailable; using Claude hooks-only fallback for tool call/result firewalling."):Fr(`${n} provider proxy disabled by policy; ${n==="claude"?"using Claude hooks only":"Codex provider-bound gateway enforcement is off"}.`);let{childArgs:p,childEnv:f}=IV(n,e,s,u,r);/^(1|true|yes)$/i.test(process.env.PANDO_DEBUG_LAUNCH_ARGS||"")&&(Fr(`debug launch args: ${JSON.stringify(p)}`),Fr(`debug launch env: ANTHROPIC_BASE_URL=${f.ANTHROPIC_BASE_URL?"set":"unset"} PANDO_ALLOW_UNSUPERVISED=${f.PANDO_ALLOW_UNSUPERVISED?"set":"unset"} PANDO_GATEWAY_MEMORY=${f.PANDO_GATEWAY_MEMORY?"set":"unset"}`)),Fr(`supervising ${n}: gateway=${u?"on":"off"} ${n==="claude"?"hooks=on ":""}pando_mcp=on policy native_tools=${s.nativeTools} other_mcp=${s.otherMcp.mode}`),X("Launch","supervised run start",{sessionId:t,tool:n,gateway:u?"on":"off",memory:s.memory,nativeTools:s.nativeTools,otherMcp:s.otherMcp.mode}),await MV(n);let m=await DV(r,p,f);return u&&await u.close().catch(()=>{}),X("Launch","supervised run end",{tool:n,exitCode:m}),nn("session.end",{actor:"pando.launcher",channel:"session",tool:n,sessionId:t,exitCode:m}),m}function bV(){return!!(process.env.ANTHROPIC_API_KEY||process.env.ANTHROPIC_AUTH_TOKEN||SV())}function SV(){for(let n of kF()){let e=EF(n);if(!e)continue;if(typeof e.apiKeyHelper=="string"&&e.apiKeyHelper.trim())return!0;let t=e.env;if(t&&typeof t=="object"&&!Array.isArray(t)&&(_F(t.ANTHROPIC_API_KEY)||_F(t.ANTHROPIC_AUTH_TOKEN)))return!0}return!1}function kF(){let n=xV(),e=process.env.CLAUDE_CONFIG_DIR||Ul.default.join(n,".claude"),t=process.cwd();return[...process.platform==="darwin"?[...process.env.PANDO_CLAUDE_MANAGED_SETTINGS?[process.env.PANDO_CLAUDE_MANAGED_SETTINGS]:[],"/Library/Application Support/ClaudeCode/managed-settings.json"]:process.platform==="win32"?process.env.PANDO_CLAUDE_MANAGED_SETTINGS?[process.env.PANDO_CLAUDE_MANAGED_SETTINGS]:[]:[...process.env.PANDO_CLAUDE_MANAGED_SETTINGS?[process.env.PANDO_CLAUDE_MANAGED_SETTINGS]:[],"/etc/claude-code/managed-settings.json"],Ul.default.join(t,".claude","settings.json"),Ul.default.join(t,".claude","settings.local.json"),Ul.default.join(e,"settings.json")]}function xV(){return process.env.PANDO_CLAUDE_HOME_OVERRIDE||process.env.PANDO_HOME_OVERRIDE||process.env.HOME||RF.default.homedir()}function _V(){for(let n of kF()){let e=EF(n);if(e&&wV(e.disableAllHooks))return n}return null}function wV(n){return typeof n=="boolean"?n:typeof n!="string"?!1:/^(1|true|yes|on)$/i.test(n.trim())}function EF(n){try{let e=JSON.parse(vF.default.readFileSync(n,"utf8"));return e&&typeof e=="object"&&!Array.isArray(e)?e:null}catch{return null}}function _F(n){return typeof n=="string"&&n.trim().length>0}var vV=new Set(["--add-dir","--agents","--agent","--allowed-tools","--allowedTools","--append-system-prompt","--betas","--disallowed-tools","--disallowedTools","--fallback-model","--input-format","--json-schema","--mcp-config","--model","--output-format","--permission-mode","--plugin-dir","--session-id","--setting-sources","--settings","--system-prompt","--tools"]),RV=new Set(["--add-dir","--agent","--agents","--allowed-tools","--allowedTools","--disallowed-tools","--disallowedTools","--mcp-config","--permission-mode","--plugin-dir","--setting-sources","--settings","--tools"]),kV=new Set(["--allow-dangerously-skip-permissions","--dangerously-load-development-channels","--dangerously-skip-permissions","--ide"]);function EV(n,e){let t=TV(n),r=CV(t.args);return r===null?{args:[...t.args,...e],removed:t.removed}:{args:[...t.args.slice(0,r),...e,...t.args.slice(r)],removed:t.removed}}function TV(n){let e=[],t=[];for(let r=0;r<n.length;r+=1){let s=n[r];if(!s.startsWith("--")){e.push(s);continue}let[i,o]=PV(s);if(kV.has(i)){t.push(i);continue}if(RV.has(i)){if(t.push(i),o!==void 0)continue;for(;r+1<n.length&&!n[r+1].startsWith("-");)r+=1;continue}e.push(s)}return{args:e,removed:t}}function PV(n){let e=n.indexOf("=");return e===-1?[n,void 0]:[n.slice(0,e),n.slice(e+1)]}function CV(n){for(let e=0;e<n.length;e+=1){let t=n[e];if(t==="--")return e;if(t.startsWith("--")){let[r,s]=t.split("=",2);s===void 0&&vV.has(r)&&(e+=1);continue}if(!t.startsWith("-"))return e}return null}function IV(n,e,t,r,s){let i={...process.env};NV(i);let o,a;if(n==="codex")a=gF(t),r?o=xF(e,{host:r.host,port:r.port,codexAutoCompactTokenLimit:gV}):o=[...e],o=[...o,...a.extraArgs];else{a=hF(t,{supportedFlags:AV(s)});let c=EV(e,a.extraArgs);o=c.args,c.removed.length>0&&Fr(`policy: stripped Claude flags that can bypass Pando enforcement (${[...new Set(c.removed)].join(", ")})`),r&&(i.ANTHROPIC_BASE_URL=r.anthropicBaseUrl)}for(let[c,l]of Object.entries(a.env))i[c]=l;for(let c of a.notes)Fr(`policy: ${c}`);return{childArgs:o,childEnv:i}}var wF=new Map;function AV(n){let e=wF.get(n);if(e)return e;let t=(0,ny.spawnSync)(n,["--help"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:5e3}),r=`${t.stdout||""}
|
|
1121
|
-
${t.stderr||""}`,s={bare:r.includes("--bare"),noChrome:r.includes("--no-chrome"),disableSlashCommands:r.includes("--disable-slash-commands")};return wF.set(n,s),s}function NV(n){for(let e of["PANDO_ALLOW_UNSUPERVISED","PANDO_DEBUG","PANDO_DEBUG_LAUNCH_ARGS","PANDO_GATEWAY_ANTHROPIC_BASE_URL","PANDO_GATEWAY_HOST","PANDO_GATEWAY_LOG_FILE","PANDO_GATEWAY_MEMORY","PANDO_GATEWAY_OPENAI_BASE_URL","PANDO_GATEWAY_PORT","PANDO_GATEWAY_STATE_DIR"])delete n[e]}async function MV(n){for(let e of[3,2,1])
|
|
1120
|
+
`),e}function mF(){let n=pV(),e={};for(let t of gR)e[t]=[{hooks:[n]}];return{hooks:e,permissions:{deny:[...dV]}}}function pV(){return{type:"command",command:sF("claude-hook")}}function hF(n,e={}){let t=[],r={ENABLE_CLAUDEAI_MCP_SERVERS:"false"},s=[];n.nativeTools==="deny"&&(t.push("--tools",""),s.push('native tools disabled (--tools ""); MCP remains available')),s.push("Claude.ai MCP/connectors disabled (ENABLE_CLAUDEAI_MCP_SERVERS=false)");let i=e.supportedFlags;i?.disableSlashCommands&&s.push("Claude slash commands/skills left enabled (not disabled)"),i?.bare&&s.push("Claude bare mode left OFF (preserves subscription/OAuth auth and hooks)"),i?.noChrome&&(t.push("--no-chrome"),s.push("Claude Chrome/browser tool surface disabled"));let o=dR(),a=fV(n);switch(uF(o,a),t.push("--mcp-config",lF(o,a),"--strict-mcp-config"),s.push(`Pando MCP dynamically injected via --mcp-config/--strict-mcp-config, root-scoped to ${o}; on-disk Claude config left untouched`),(e.hooksEnabled??!0)&&(fF(),t.push("--settings",pF()),s.push("Claude hooks installed for tool call/result enforcement and transcript audit")),n.otherMcp.mode){case"deny_all":s.push("other MCP servers blocked (strict: Pando only)");break;case"allow_list":n.otherMcp.tools.length>0&&t.push(`--allowedTools=${n.otherMcp.tools.join(",")}`),s.push(`other MCP restricted to allow-list (${n.otherMcp.servers.join(", ")||"none"}); strict config in effect`);break;case"deny_list":if(n.otherMcp.tools.length>0||n.otherMcp.servers.length>0){let c=[...n.otherMcp.tools,...n.otherMcp.servers.map(l=>`mcp__${l}`)];t.push(`--disallowedTools=${c.join(",")}`),s.push(`other MCP deny-list removed from Claude context (${c.join(", ")})`)}break;default:s.push("other MCP servers preserved in strict generated config");break}return{extraArgs:t,env:r,notes:s}}function fV(n){switch(n.otherMcp.mode){case"deny_all":return[];case"allow_list":return n.otherMcp.servers;default:return null}}function gF(n){let e=[],t={},r=[];n.nativeTools==="deny"&&(e.push("-c",'sandbox_mode="read-only"'),e.push("-c",'web_search="disabled"'),r.push("native tools restricted (read-only sandbox, web search disabled, best-effort); tool traffic is enforced at the gateway"));let s=dR();switch(e.push(...dF(s)),r.push(`Pando MCP (${ty}) dynamically injected via Codex -c overrides, root-scoped to ${s}; user MCP files are not modified`),n.otherMcp.mode){case"deny_all":case"allow_list":case"deny_list":r.push(`other MCP policy "${n.otherMcp.mode}" is best-effort for Codex (no strict-MCP flag); enforced at the gateway, not via config`);break;default:r.push("other MCP servers allowed");break}return{extraArgs:e,env:t,notes:r}}var yF=new Set(["-c","--config","--enable","--disable","--remote","--remote-auth-token-env","-i","--image","-m","--model","--local-provider","-p","--profile","-s","--sandbox","-a","--ask-for-approval","-C","--cd","--add-dir"]);function bF(n){for(let e=0;e<n.length;e+=1){let t=n[e];if(t==="--")return null;if(!mV(t)){if(yF.has(t)){e+=1;continue}if(!t.startsWith("-"))return{name:t,index:e}}}return null}function mV(n){let[e,t]=n.split("=",2);return t!==void 0&&yF.has(e)}var SF="pando-proxy";function hV(n){let e=`model_providers.${SF}`;return["-c",`model_provider="${SF}"`,"-c",`model_auto_compact_token_limit=${n.codexAutoCompactTokenLimit}`,"-c",`${e}.name="Pando Firewall"`,"-c",`${e}.base_url="http://${n.host}:${n.port}/v1"`,"-c",`${e}.wire_api="responses"`,"-c",`${e}.transport="responses_http"`,"-c",`${e}.requires_openai_auth=true`]}function xF(n,e){let t=hV(e),r=bF(n);return r?[...n.slice(0,r.index+1),...t,...n.slice(r.index+1)]:[...t,...n]}gt();Vt();var gV=28e4;function Kr(n){console.error(`[pando] ${n}`)}function yV(n){let e=st(n);process.env.PANDO_LOG_DIR||(process.env.PANDO_LOG_DIR=e),process.env.PANDO_GATEWAY_LOG_FILE||(process.env.PANDO_GATEWAY_LOG_FILE=Ul.default.join(e,"gateway-debug.jsonl"))}async function ry(n,e){yV(process.cwd());let t=Zo();nn("session.start",{actor:"pando.launcher",channel:"session",tool:n,projectRoot:process.cwd(),originalArgs:e});let r=pM(n);if(!r)return Kr(`could not find the real \`${n}\` binary. Is it installed and on PATH (outside ~/.pando/bin)?`),nn("session.end",{actor:"pando.launcher",channel:"session",tool:n,sessionId:t,exitCode:127,reason:"real_binary_not_found"}),127;let s=Dr();if(n==="claude"){let h=_V();if(h)return Kr(`refusing to launch claude: Claude hooks are disabled by ${h}. Pando requires hooks for subscription-mode tool/result enforcement.`),nn("session.end",{actor:"pando.launcher",channel:"session",tool:n,sessionId:t,exitCode:78,reason:"claude_hooks_disabled",disabledBy:h}),78}let i=$l({memoryEnabled:s.memory}),o=s.proxy[n]==="enforce",a=n==="claude"?bV():!1,c=o&&(n==="codex"||a),l=/^(1|true|yes)$/i.test(process.env.PANDO_ALLOW_UNSUPERVISED||""),u=null;if(c)try{u=await Wl(i,h=>{X("Gateway","runtime log",{message:h})})}catch(h){let g=h instanceof Error?h.message:String(h);if(!l)return Kr(`refusing to launch ${n}: the Pando gateway could not start (${g}). Fix the problem, or set PANDO_ALLOW_UNSUPERVISED=1 to run ${n} without wire interception (NOT recommended \u2014 the firewall will be off).`),nn("session.end",{actor:"pando.launcher",channel:"session",tool:n,sessionId:t,exitCode:78,reason:"gateway_start_failed",error:g}),78;Kr(`gateway failed to start (${g}); PANDO_ALLOW_UNSUPERVISED is set, so launching ${n} WITHOUT wire interception.`)}let d=n==="claude"&&!u;o?d&&!a?Kr("Claude gateway auth not configured; using Claude hooks-only fallback for tool call/result firewalling."):d&&Kr("Claude gateway unavailable; using Claude hooks-only fallback for tool call/result firewalling."):Kr(`${n} provider proxy disabled by policy; ${n==="claude"?"using Claude hooks only":"Codex provider-bound gateway enforcement is off"}.`);let{childArgs:p,childEnv:f}=IV(n,e,s,u,r);/^(1|true|yes)$/i.test(process.env.PANDO_DEBUG_LAUNCH_ARGS||"")&&(Kr(`debug launch args: ${JSON.stringify(p)}`),Kr(`debug launch env: ANTHROPIC_BASE_URL=${f.ANTHROPIC_BASE_URL?"set":"unset"} PANDO_ALLOW_UNSUPERVISED=${f.PANDO_ALLOW_UNSUPERVISED?"set":"unset"} PANDO_GATEWAY_MEMORY=${f.PANDO_GATEWAY_MEMORY?"set":"unset"}`)),Kr(`supervising ${n}: gateway=${u?"on":"off"} ${n==="claude"?"hooks=on ":""}pando_mcp=on policy native_tools=${s.nativeTools} other_mcp=${s.otherMcp.mode}`),X("Launch","supervised run start",{sessionId:t,tool:n,gateway:u?"on":"off",memory:s.memory,nativeTools:s.nativeTools,otherMcp:s.otherMcp.mode}),await MV(n);let m=await DV(r,p,f);return u&&await u.close().catch(()=>{}),X("Launch","supervised run end",{tool:n,exitCode:m}),nn("session.end",{actor:"pando.launcher",channel:"session",tool:n,sessionId:t,exitCode:m}),m}function bV(){return!!(process.env.ANTHROPIC_API_KEY||process.env.ANTHROPIC_AUTH_TOKEN||SV())}function SV(){for(let n of kF()){let e=EF(n);if(!e)continue;if(typeof e.apiKeyHelper=="string"&&e.apiKeyHelper.trim())return!0;let t=e.env;if(t&&typeof t=="object"&&!Array.isArray(t)&&(_F(t.ANTHROPIC_API_KEY)||_F(t.ANTHROPIC_AUTH_TOKEN)))return!0}return!1}function kF(){let n=xV(),e=process.env.CLAUDE_CONFIG_DIR||Ul.default.join(n,".claude"),t=process.cwd();return[...process.platform==="darwin"?[...process.env.PANDO_CLAUDE_MANAGED_SETTINGS?[process.env.PANDO_CLAUDE_MANAGED_SETTINGS]:[],"/Library/Application Support/ClaudeCode/managed-settings.json"]:process.platform==="win32"?process.env.PANDO_CLAUDE_MANAGED_SETTINGS?[process.env.PANDO_CLAUDE_MANAGED_SETTINGS]:[]:[...process.env.PANDO_CLAUDE_MANAGED_SETTINGS?[process.env.PANDO_CLAUDE_MANAGED_SETTINGS]:[],"/etc/claude-code/managed-settings.json"],Ul.default.join(t,".claude","settings.json"),Ul.default.join(t,".claude","settings.local.json"),Ul.default.join(e,"settings.json")]}function xV(){return process.env.PANDO_CLAUDE_HOME_OVERRIDE||process.env.PANDO_HOME_OVERRIDE||process.env.HOME||RF.default.homedir()}function _V(){for(let n of kF()){let e=EF(n);if(e&&wV(e.disableAllHooks))return n}return null}function wV(n){return typeof n=="boolean"?n:typeof n!="string"?!1:/^(1|true|yes|on)$/i.test(n.trim())}function EF(n){try{let e=JSON.parse(vF.default.readFileSync(n,"utf8"));return e&&typeof e=="object"&&!Array.isArray(e)?e:null}catch{return null}}function _F(n){return typeof n=="string"&&n.trim().length>0}var vV=new Set(["--add-dir","--agents","--agent","--allowed-tools","--allowedTools","--append-system-prompt","--betas","--disallowed-tools","--disallowedTools","--fallback-model","--input-format","--json-schema","--mcp-config","--model","--output-format","--permission-mode","--plugin-dir","--session-id","--setting-sources","--settings","--system-prompt","--tools"]),RV=new Set(["--add-dir","--agent","--agents","--allowed-tools","--allowedTools","--disallowed-tools","--disallowedTools","--mcp-config","--permission-mode","--plugin-dir","--setting-sources","--settings","--tools"]),kV=new Set(["--allow-dangerously-skip-permissions","--dangerously-load-development-channels","--dangerously-skip-permissions","--ide"]);function EV(n,e){let t=TV(n),r=CV(t.args);return r===null?{args:[...t.args,...e],removed:t.removed}:{args:[...t.args.slice(0,r),...e,...t.args.slice(r)],removed:t.removed}}function TV(n){let e=[],t=[];for(let r=0;r<n.length;r+=1){let s=n[r];if(!s.startsWith("--")){e.push(s);continue}let[i,o]=PV(s);if(kV.has(i)){t.push(i);continue}if(RV.has(i)){if(t.push(i),o!==void 0)continue;for(;r+1<n.length&&!n[r+1].startsWith("-");)r+=1;continue}e.push(s)}return{args:e,removed:t}}function PV(n){let e=n.indexOf("=");return e===-1?[n,void 0]:[n.slice(0,e),n.slice(e+1)]}function CV(n){for(let e=0;e<n.length;e+=1){let t=n[e];if(t==="--")return e;if(t.startsWith("--")){let[r,s]=t.split("=",2);s===void 0&&vV.has(r)&&(e+=1);continue}if(!t.startsWith("-"))return e}return null}function IV(n,e,t,r,s){let i={...process.env};NV(i);let o,a;if(n==="codex")a=gF(t),r?o=xF(e,{host:r.host,port:r.port,codexAutoCompactTokenLimit:gV}):o=[...e],o=[...o,...a.extraArgs];else{a=hF(t,{supportedFlags:AV(s)});let c=EV(e,a.extraArgs);o=c.args,c.removed.length>0&&Kr(`policy: stripped Claude flags that can bypass Pando enforcement (${[...new Set(c.removed)].join(", ")})`),r&&(i.ANTHROPIC_BASE_URL=r.anthropicBaseUrl)}for(let[c,l]of Object.entries(a.env))i[c]=l;for(let c of a.notes)Kr(`policy: ${c}`);return{childArgs:o,childEnv:i}}var wF=new Map;function AV(n){let e=wF.get(n);if(e)return e;let t=(0,ny.spawnSync)(n,["--help"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:5e3}),r=`${t.stdout||""}
|
|
1121
|
+
${t.stderr||""}`,s={bare:r.includes("--bare"),noChrome:r.includes("--no-chrome"),disableSlashCommands:r.includes("--disable-slash-commands")};return wF.set(n,s),s}function NV(n){for(let e of["PANDO_ALLOW_UNSUPERVISED","PANDO_DEBUG","PANDO_DEBUG_LAUNCH_ARGS","PANDO_GATEWAY_ANTHROPIC_BASE_URL","PANDO_GATEWAY_HOST","PANDO_GATEWAY_LOG_FILE","PANDO_GATEWAY_MEMORY","PANDO_GATEWAY_OPENAI_BASE_URL","PANDO_GATEWAY_PORT","PANDO_GATEWAY_STATE_DIR"])delete n[e]}async function MV(n){for(let e of[3,2,1])Kr(`starting ${n} in ${e}...`),await new Promise(t=>setTimeout(t,1e3))}function DV(n,e,t){return new Promise(r=>{let s=(0,ny.spawn)(n,e,{stdio:"inherit",env:t}),i=c=>{try{s.kill(c)}catch{}},o=()=>i("SIGINT"),a=()=>i("SIGTERM");process.on("SIGINT",o),process.on("SIGTERM",a),s.on("error",c=>{Kr(`failed to launch: ${c instanceof Error?c.message:String(c)}`),process.off("SIGINT",o),process.off("SIGTERM",a),r(127)}),s.on("exit",(c,l)=>{if(process.off("SIGINT",o),process.off("SIGTERM",a),l){r(128+({SIGINT:2,SIGTERM:15}[l]??0));return}r(c??0)})})}var ao=q(require("fs")),_s=q(require("path")),bR=require("child_process");var yR=q(require("fs")),sy=q(require("path"));Vt();function FV(){let n=process.env.PANDO_GATEWAY_LOG_FILE;return n?n.startsWith("~/")?sy.default.join(hi(),n.slice(2)):n:Dg(process.env.PANDO_DEBUG)===!1?null:sy.default.join(hi(),Rv)}function Ai(n,e={}){let t=FV();if(t)try{let r=JSON.stringify({ts:new Date().toISOString(),event:`installer_${n}`,...e});yR.default.mkdirSync(sy.default.dirname(t),{recursive:!0}),yR.default.appendFileSync(t,`${r}
|
|
1122
1122
|
`,"utf8")}catch{}}var OV=["codex","claude"],$V=[".pando",".pando-ai",".pando-data"];function Zr(n){return n?"\u2713":"\u2717"}function jV(){try{ao.default.readdirSync(Gn()).length===0&&ao.default.rmdirSync(Gn())}catch{}}function LV(n){let e=_s.default.resolve(Pl()),t=_s.default.resolve(n);return t===e||t===_s.default.parse(t).root||_s.default.dirname(t)!==e?!1:$V.includes(_s.default.basename(t))}function zV(n){if(!ao.default.existsSync(n))return{status:"not_present",target:n};if(!LV(n))return{status:"failed",target:n,message:"refusing to remove unexpected path"};try{return ao.default.rmSync(n,{recursive:!0,force:!0}),ao.default.existsSync(n)?{status:"failed",target:n,message:"path still exists after removal"}:{status:"removed",target:n}}catch(e){return{status:"failed",target:n,message:e instanceof Error?e.message:String(e)}}}function BV(){let n=Pl();return[Ss(),_s.default.join(n,".pando-ai"),_s.default.join(n,".pando-data")].map(zV)}function TF(n){try{return ao.default.realpathSync.native(n)}catch{return _s.default.resolve(n)}}function qV(n){let e=_s.default.resolve(n);for(;;){let t=_s.default.join(e,"package.json");try{if(JSON.parse(ao.default.readFileSync(t,"utf8"))?.name===wn)return e}catch{}let r=_s.default.dirname(e);if(r===e)return null;e=r}}function PF(){let n=process.env.npm_execpath;return n&&ao.default.existsSync(n)?{command:process.execPath,args:[n]}:{command:"npm",args:[]}}function HV(){let n=PF(),e=(0,bR.spawnSync)(n.command,[...n.args,"root","-g"],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(e.status!==0)return null;let t=e.stdout.trim();return t||null}function WV(){let n=qV(__dirname),e=HV();if(!n||!e)return{status:"not_global"};let t=TF(_s.default.join(e,wn)),r=TF(n);if(r!==t)return{status:"not_global"};let s=PF(),i=(0,bR.spawnSync)(s.command,[...s.args,"uninstall","-g",wn],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return i.status===0?{status:"removed_global",packageRoot:r}:{status:"failed",message:(i.stderr||i.stdout||`exit ${i.status}`).trim()}}function iy(){console.log(""),console.log(" Pando uninstall"),console.log(""),Ai("uninstall_start",{});for(let s of OV){let i=xM(s);switch(Ai("shim_uninstall",{tool:s,status:i.status,shimPath:i.shimPath}),i.status){case"removed":console.log(` ${Zr(!0)} ${s}: removed shim at ${i.shimPath}`);break;case"not_present":console.log(` ${s}: no Pando shim found`);break;case"failed":console.log(` ${Zr(!1)} ${s}: could not remove shim \u2014 ${i.message}`);break}}let n=yM();switch(Ai("self_shim_uninstall",{status:n.status,shimPath:n.shimPath}),n.status){case"removed":console.log(` ${Zr(!0)} pando-ai: removed command shim at ${n.shimPath}`);break;case"not_present":console.log(" pando-ai: no Pando command shim found");break;case"failed":console.log(` ${Zr(!1)} pando-ai: could not remove command shim \u2014 ${n.message}`);break}for(let s of bM())switch(s.status){case"removed":console.log(` ${Zr(!0)} pando-ai: removed current-terminal shim at ${s.shimPath}`);break;case"failed":console.log(` ${Zr(!1)} pando-ai: could not remove current-terminal shim \u2014 ${s.message}`);break;case"not_present":break}jV();let e=RM();switch(Ai("path_deactivate",{status:e.status,target:e.target}),e.status){case"activated":console.log(` ${Zr(!0)} PATH: removed managed Pando block from ${e.target}`);break;case"already_present":console.log(" PATH: no managed Pando block found");break;case"manual_required":console.log(` PATH: manual cleanup may be required. ${e.hint??""}`.trimEnd());break;case"failed":console.log(` ${Zr(!1)} PATH: could not update ${e.target} \u2014 ${e.message}`);break}let t=PM();console.log(t?` ${Zr(!0)} state: removed ${ec()}`:` ${Zr(!1)} state: could not remove ${ec()}`);let r=WV();switch(r.status){case"removed_global":console.log(` ${Zr(!0)} npm package: removed global ${wn} package`);break;case"not_global":console.log(" npm package: no global package install detected");break;case"failed":console.log(` ${Zr(!1)} npm package: could not remove global ${wn} package \u2014 ${r.message}`);break}for(let s of BV())switch(s.status){case"removed":console.log(` ${Zr(!0)} data: removed ${s.target}`);break;case"not_present":console.log(` data: no ${s.target} found`);break;case"failed":console.log(` ${Zr(!1)} data: could not remove ${s.target} \u2014 ${s.message}`);break}console.log(""),console.log(" Done. Pando has been removed.")}var Ap=["codex","claude"];function SR(){return new Date().toISOString()}function pi(n){return n?"\u2713":"\u2717"}function UV(n){return!n.realPath&&!n.shimPath?` ${n.tool.padEnd(7)} not installed`:n.proxied?` ${n.tool.padEnd(7)} ${pi(!0)} protected`:n.realPath?` ${n.tool.padEnd(7)} ${pi(!1)} unprotected (real binary present, shim not ahead on PATH)`:` ${n.tool.padEnd(7)} ${pi(!1)} shim present but real binary missing`}function oy(n,e=process.env.PATH||""){let t=Dr(),r=bv(e);console.log(""),console.log(" Pando \u2014 AI coding firewall"),console.log("");for(let s of n)console.log(UV(s));console.log(""),console.log(` PATH ~/.pando/bin ${r.present?r.first?"first \u2713":"present but not first \u2717":"missing \u2717"}`),console.log(` Policy native_tools=${t.nativeTools} other_mcp=${t.otherMcp.mode} default=${t.defaultAction}`),console.log(` source: ${z0()?Ya():"built-in defaults"}`),console.log(""),r.first||(console.log(" Pando has configured future shells with this PATH entry:"),console.log(` ${Ig()}`),console.log(""))}var CF=!1;function KV(){CF=!0}function Np(){CF&&(console.log(""),console.log(" Current terminal note:"),console.log(" New terminals will pick up Pando automatically."),console.log(" This already-open terminal will not use Pando for `codex`/`claude` until you either open a new terminal or run exactly:"),console.log(` ${Ig()}`))}function ay(n){let e=SM(n);switch(Ai("shim_install",{tool:n,status:e.status,shimPath:e.shimPath,realPath:e.realPath}),e.status){case"installed":case"updated":return console.log(` ${pi(!0)} ${n}: shim ${e.status} at ${e.shimPath}`),TM(n,e.realPath,SR()),!0;case"skipped_no_real_binary":return console.log(` ${n}: skipped (no real binary on PATH to supervise)`),!1;case"failed":return console.log(` ${pi(!1)} ${n}: install failed \u2014 ${e.message}`),!1}}function ZV(){let n=gM();switch(Ai("self_shim_install",{status:n.status,shimPath:n.shimPath,currentPathShimPath:n.currentPathShimPath}),n.status){case"installed":case"updated":console.log(` ${pi(!0)} pando-ai: command shim ${n.status} at ${n.shimPath}`),n.currentPathShimPath&&console.log(` ${pi(!0)} pando-ai: current-terminal command shim ${n.currentPathShimStatus} at ${n.currentPathShimPath}`),Mp();break;case"failed":console.log(` ${pi(!1)} pando-ai: could not install command shim \u2014 ${n.message}`);break}}function Mp(){if(bv().first)return;KV();let n=vM();switch(Ai("path_activate",{status:n.status,target:n.target}),n.status){case"activated":console.log(` ${pi(!0)} PATH: added ~/.pando/bin to ${n.target}`);break;case"already_present":console.log(` PATH: ~/.pando/bin already configured in ${n.target}`);break;case"manual_required":console.log(` ${pi(!1)} PATH: manual step required.`),n.hint&&console.log(` ${n.hint}`);break;case"failed":console.log(` ${pi(!1)} PATH: could not update startup file \u2014 ${n.message}`),console.log(` Add this yourself: ${Ig()}`);break}}async function GV(n){let e=Mg(),t=n.filter(s=>s.realPath&&!s.proxied&&!e.declined[s.tool]);if(t.length===0)return!1;let r=!1;if(t.length===Ap.length){if(await _v(" Pando is an AI coding firewall. Replace `codex` and `claude` with Pando-supervised launchers?"))for(let i of t)ay(i.tool)&&(r=!0);else for(let i of t)Sv(i.tool,SR());return r&&Mp(),r&&Np(),r}for(let s of t)await _v(` \`${s.tool}\` is not protected by Pando yet. Install the supervised launcher?`)?ay(s.tool)&&(r=!0):Sv(s.tool,SR());return r&&Mp(),r&&Np(),r}async function JV(){try{let n=await Wl($l(),()=>{}),e=await fetch(`http://${n.host}:${n.port}/health`).then(t=>t.json());console.log(` gateway: ok (memory=${e.memory?"on":"off"})`),await n.close()}catch(n){console.log(` gateway: failed \u2014 ${n instanceof Error?n.message:String(n)}`)}}async function VV(n){switch(await CM(" What would you like to do?",["Install / repair launchers","Show / edit policy","Check gateway","Launch codex now","Launch claude now","Uninstall Pando launchers","Quit"])){case 0:{let t=!1;for(let r of n)r.realPath&&ay(r.tool)&&(t=!0);return t&&Mp(),t&&Np(),{action:"continue",refreshStatus:!0}}case 1:return console.log(""),console.log(rv(Dr())),console.log(` Edit ${Ya()} to change the ruleset.`),{action:"continue",refreshStatus:!1};case 2:return await JV(),{action:"continue",refreshStatus:!1};case 3:return{action:"launch",tool:"codex"};case 4:return{action:"launch",tool:"claude"};case 5:return iy(),{action:"uninstalled"};default:return{action:"quit"}}}async function IF(n={}){Ai("wizard_start",{force:!!n.force}),ZV();let e=process.env.PATH||"",t=Ap.map(s=>zo(s,e));if(oy(t,e),n.force){let s=!1;for(let i of t)i.realPath&&ay(i.tool)&&(s=!0);s&&Mp(),s&&Np(),e=process.env.PATH||"",t=Ap.map(i=>zo(i,e)),oy(t,e)}else await GV(t)&&(e=process.env.PATH||"",t=Ap.map(i=>zo(i,e)),oy(t,e));let r=!1;for(;;){let s=await VV(t);if(s.action==="quit")break;if(s.action==="uninstalled"){r=!0;break}if(s.action==="launch"){console.log("");let i=await ry(s.tool,[]);process.exit(i)}s.refreshStatus&&(e=process.env.PATH||"",t=Ap.map(i=>zo(i,e)),oy(t,e))}console.log(""),r?console.log(" Done. Pando launchers have been removed."):(Np(),console.log(` Done. Keep using \`codex\` and \`claude\` as usual \u2014 ${wn} supervises each launch.`))}async function AF(n={}){await IF({force:n.force})}async function NF(n,e){let t=n.includes("--memory"),r=$l({memoryEnabled:t||void 0}),s=a=>console.error(`[pando-gateway] ${a}`),i=await Wl(r,s);s(`OpenAI base: ${i.openaiBaseUrl}`),s(`Anthropic base: ${i.anthropicBaseUrl}`),s("Press Ctrl-C to stop.");let o=async a=>{s(`received ${a}, shutting down`),await i.close(),process.exit(0)};process.once("SIGINT",()=>{o("SIGINT")}),process.once("SIGTERM",()=>{o("SIGTERM")}),await new Promise(()=>{})}gt();var XV=new Set(gR),QV="Reminder: raw shell is strongly discouraged for code search, navigation, references, and edits. Prefer Pando AST/index tools first; use shell freely for tests, builds/compiles, package managers, git, generated or non-code files, unsupported languages, and anything Pando itself does not support.";function YV(n){return XV.has(n)}eu(!0);async function MF(){let n=await o4(),e=e4(n),t=typeof e.hook_event_name=="string"?e.hook_event_name:"",r=Dr();if(nn("claude_hook.request",{actor:"pando.hook",channel:"claude_hook",hookEventName:t||"unknown",parsed:e.__pandoParseError!==!0,input:e,...e.__pandoParseError===!0?{rawInput:n}:{}}),c4(t||"unknown",e),t==="PreToolUse"){let i=cy(e);if(i&&qo(i,r))return X("ClaudeHook","tool ALLOWED",{tool:i,event:t}),lc({hookEventName:t,toolName:i,decision:"allow",blockedToolNames:[],reason:"Allowed by Pando policy.",output:{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow",permissionDecisionReason:"Allowed by Pando policy."}}});let o=i??"unknown",a=ly(o);return X("ClaudeHook","tool BLOCKED",{tool:o,event:t}),lc({hookEventName:t,toolName:o,decision:"deny",blockedToolNames:[o],reason:a,output:{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:a}}})}if(t==="PostToolUse"||t==="PostToolUseFailure"){let i=cy(e);if(!i||!qo(i,r)){let o=i??"unknown",a=ly(o);return lc(t==="PostToolUse"?{hookEventName:t,toolName:o,decision:"block",blockedToolNames:[o],reason:a,output:{decision:"block",reason:a,hookSpecificOutput:{hookEventName:"PostToolUse",additionalContext:a,...n4(i,a)}}}:{hookEventName:t,toolName:o,decision:"steer",blockedToolNames:[o],reason:a,output:{hookSpecificOutput:{hookEventName:"PostToolUseFailure",additionalContext:a}}})}Fp({hookEventName:t,toolName:i,decision:"allow",blockedToolNames:[],reason:"Allowed by Pando policy.",output:null});return}if(t==="PostToolBatch"){let i=t4(e,r);if(i.length>0){let o=ly(i.join(", "));return lc({hookEventName:t,toolName:i.join(", "),decision:"block",blockedToolNames:i,reason:o,output:{continue:!1,decision:"block",reason:o,hookSpecificOutput:{hookEventName:"PostToolBatch",additionalContext:o}}})}Fp({hookEventName:t,toolName:null,decision:"allow",blockedToolNames:[],reason:"Allowed by Pando policy.",output:null});return}if(t==="PermissionDenied"){let i=cy(e);if(!i||!qo(i,r)){let o=i??"unknown",a=ly(o);return lc({hookEventName:t,toolName:o,decision:"retry",blockedToolNames:[o],reason:a,output:{hookSpecificOutput:{hookEventName:"PermissionDenied",retry:!0,additionalContext:a}}})}Fp({hookEventName:t,toolName:i,decision:"allow",blockedToolNames:[],reason:"Allowed by Pando policy.",output:null});return}if(t==="SessionStart"||t==="PostCompact")return lc({hookEventName:t,toolName:null,decision:"remind",blockedToolNames:[],reason:"Injected Pando tool-selection reminder.",output:{hookSpecificOutput:{hookEventName:t,additionalContext:QV}}});let s=YV(t);Fp({hookEventName:t||"unknown",toolName:cy(e),decision:"observe",blockedToolNames:[],reason:s?"Recorded (observe-only lifecycle event; not gated by Pando policy).":"Recorded (event not registered by Pando; captured for audit).",output:null})}function e4(n){try{let e=JSON.parse(n);return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{__pandoParseError:!0}}}function cy(n){return typeof n.tool_name=="string"&&n.tool_name.trim()?n.tool_name:null}function t4(n,e){let t=s4(n);return[...new Set(t.filter(r=>!qo(r,e)))]}function ly(n){return`Pando firewall blocked off-policy Claude tool use/result: ${n}. Retry using Pando MCP tools only.`}function n4(n,e){return n&&r4(n)?{updatedMCPToolOutput:e}:{updatedToolOutput:e}}function r4(n){return n.startsWith("mcp__")}function s4(n){return[...i4(n.tool_calls),...xR(n)]}function i4(n){if(!Array.isArray(n))return[];let e=[];for(let t of n){if(!t||typeof t!="object"||Array.isArray(t))continue;let r=t.tool_name;typeof r=="string"&&r.trim()&&e.push(r)}return e}function xR(n,e=0){if(e>6||!n||typeof n!="object")return[];if(Array.isArray(n))return n.flatMap(i=>xR(i,e+1));let t=n,r=typeof t.tool_name=="string"&&t.tool_name.trim()?[t.tool_name]:[],s=["tool_calls","tool_results","tool_responses","tool_uses","content","items"];return[...r,...s.flatMap(i=>xR(t[i],e+1))]}async function o4(){let n=[];for await(let e of process.stdin)n.push(typeof e=="string"?Buffer.from(e):e);return Buffer.concat(n).toString("utf8")}function a4(n){process.stdout.write(`${JSON.stringify(n)}
|
|
1123
1123
|
`)}function lc(n){Fp(n),a4(n.output)}function Fp(n){nn("claude_hook.decision",{actor:n.blockedToolNames.length>0?"pando.firewall":"pando.hook",channel:"claude_hook",hookEventName:n.hookEventName,toolName:n.toolName,decision:n.decision,blockedToolNames:n.blockedToolNames,reason:n.reason,output:n.output})}function c4(n,e){let t=l4(n,e);for(let r=0;r<t.length;r+=1){let s=t[r];nn("provider.transcript.item",{actor:s.actor,channel:"claude_hook",source:"claude_hook",hookEventName:n,itemIndex:r,itemType:s.itemType,body:s.body})}}function l4(n,e){switch(n){case"UserPromptSubmit":return Dp(e,"prompt")?[{actor:"user",itemType:"user_prompt",body:{prompt:e.prompt}}]:[];case"UserPromptExpansion":return[{actor:"user",itemType:"user_prompt_expansion",body:uc(e,["command","prompt","expanded_prompt","expansion"])}];case"MessageDisplay":return[{actor:"assistant",itemType:Dp(e,"message_type")??Dp(e,"type")??"message_display",body:e}];case"Stop":return Dp(e,"last_assistant_message")?[{actor:"assistant",itemType:"last_assistant_message",body:{text:e.last_assistant_message,stop_hook_active:e.stop_hook_active??null}}]:[];case"StopFailure":return[{actor:"assistant",itemType:"stop_failure",body:uc(e,["error","error_details","last_assistant_message"])}];case"SubagentStop":return Dp(e,"last_assistant_message")?[{actor:"assistant",itemType:"subagent_last_assistant_message",body:uc(e,["agent_id","agent_type","agent_transcript_path","last_assistant_message","stop_hook_active"])}]:[];case"PreToolUse":case"PermissionRequest":return[{actor:"assistant",itemType:"tool_call",body:uc(e,["tool_name","tool_input"])}];case"PostToolUse":case"PostToolUseFailure":return[{actor:"tool",itemType:n==="PostToolUse"?"tool_result":"tool_error",body:uc(e,["tool_name","tool_input","tool_response","error","error_details"])}];case"PostToolBatch":return[{actor:"tool",itemType:"tool_batch_result",body:uc(e,["tool_calls","tool_results","tool_responses"])}];case"Elicitation":return[{actor:"tool",itemType:"elicitation_request",body:e}];case"ElicitationResult":return[{actor:"user",itemType:"elicitation_result",body:e}];case"Notification":return[{actor:"assistant",itemType:"notification",body:e}];case"TaskCreated":case"TaskCompleted":return[{actor:"assistant",itemType:n==="TaskCreated"?"task_created":"task_completed",body:uc(e,["task_id","task_subject","task_description","teammate_name","team_name"])}];default:return[]}}function Dp(n,e){let t=n[e];return typeof t=="string"&&t.trim()?t:null}function uc(n,e){let t={};for(let r of e)n[r]!==void 0&&(t[r]=n[r]);return t}function u4(n,e){let t=n[0]==="serve-http"?"serve-http":"serve",r=n[1];return n.length>2&&(console.error(`Unexpected argument: ${n[2]}`),process.exit(1)),{command:t,projectPath:r?dc.default.resolve(r):null,httpHost:e.httpHost,httpPort:e.httpPort,disableAuth:e.disableAuth}}var d4=new Set(["gateway","launch"]);function p4(n){let e={help:!1,version:!1,httpHost:"127.0.0.1",httpPort:5888,disableAuth:!1,positional:[],passthrough:[],subArgs:null},t=2;for(;t<n.length;t++){let r=n[t];if(e.positional.length===0&&!r.startsWith("-")&&d4.has(r)){e.positional.push(r),e.subArgs=n.slice(t+1);break}if(r==="--"){e.passthrough=n.slice(t+1);break}else if(r==="--help"||r==="-h")e.help=!0;else if(r==="--version"||r==="-v")e.version=!0;else if(r==="--disable-auth"||r==="--no-auth")e.disableAuth=!0;else if(r==="--host"){let s=n[++t];s||(console.error("--host requires a value"),process.exit(1)),e.httpHost=s}else if(r==="--port"){let s=n[++t],i=Number(s);(!Number.isInteger(i)||i<=0||i>65535)&&(console.error("--port requires a TCP port number"),process.exit(1)),e.httpPort=i}else r.startsWith("-")?(console.error(`Unknown option: ${r}`),process.exit(1)):e.positional.push(r)}return e}function f4(){console.error(`Usage: ${wn} Install / update Pando-supervised launchers
|
|
1124
1124
|
${wn} install Re-run the installer wizard
|