ultracode 5.3.0 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/analysis-tool-handlers-H2RXLDPX.js +817 -0
- package/dist/chunks/analysis-tool-handlers-RJZAR6VT.js +817 -0
- package/dist/chunks/analysis-tool-handlers-Z2RF24T7.js +13 -0
- package/dist/chunks/autodoc-tool-handlers-CV5JEQUA.js +1112 -0
- package/dist/chunks/autodoc-tool-handlers-EHTNCH6I.js +1112 -0
- package/dist/chunks/autodoc-tool-handlers-MECXQJ2K.js +138 -0
- package/dist/chunks/chaos-CO7TOBOJ.js +18 -0
- package/dist/chunks/chaos-VM2PXERO.js +1573 -0
- package/dist/chunks/chaos-W3XRVJ7K.js +1564 -0
- package/dist/chunks/chunk-6K37BWK5.js +439 -0
- package/dist/chunks/chunk-EALTCYHZ.js +10 -0
- package/dist/chunks/chunk-FTBE7VMY.js +316 -0
- package/dist/chunks/chunk-KBW6LRQP.js +322 -0
- package/dist/chunks/chunk-NKUHX4CU.js +5 -0
- package/dist/chunks/chunk-NZFF4DQ4.js +3179 -0
- package/dist/chunks/chunk-RGP5UVQ7.js +3179 -0
- package/dist/chunks/chunk-RMZXFGQZ.js +322 -0
- package/dist/chunks/chunk-UG44F23Y.js +316 -0
- package/dist/chunks/chunk-V2SCB5H5.js +4403 -0
- package/dist/chunks/chunk-V6JAQNM3.js +1 -0
- package/dist/chunks/chunk-XFGXM4CR.js +4403 -0
- package/dist/chunks/dev-agent-JVIGBMHQ.js +1 -0
- package/dist/chunks/dev-agent-TRVP5U6N.js +1624 -0
- package/dist/chunks/dev-agent-Y5G5WKQ4.js +1624 -0
- package/dist/chunks/graph-storage-factory-AYZ57YSL.js +13 -0
- package/dist/chunks/graph-storage-factory-GTAIJEI5.js +1 -0
- package/dist/chunks/graph-storage-factory-T2WO5QVG.js +13 -0
- package/dist/chunks/incremental-updater-KDIQGAUU.js +14 -0
- package/dist/chunks/incremental-updater-OJRSTO3Q.js +1 -0
- package/dist/chunks/incremental-updater-SBEBH7KF.js +14 -0
- package/dist/chunks/indexer-agent-H3QIEL3Z.js +21 -0
- package/dist/chunks/indexer-agent-KHF5JMV7.js +21 -0
- package/dist/chunks/indexer-agent-SHJD6Z77.js +1 -0
- package/dist/chunks/indexing-pipeline-J6Z4BHKF.js +1 -0
- package/dist/chunks/indexing-pipeline-OY3337QN.js +249 -0
- package/dist/chunks/indexing-pipeline-WCXIDMAP.js +249 -0
- package/dist/chunks/merge-agent-LSUBDJB2.js +2481 -0
- package/dist/chunks/merge-agent-MJEW3HWU.js +2481 -0
- package/dist/chunks/merge-agent-O45OXF33.js +11 -0
- package/dist/chunks/merge-tool-handlers-BDSVNQVZ.js +277 -0
- package/dist/chunks/merge-tool-handlers-HP7DRBXJ.js +1 -0
- package/dist/chunks/merge-tool-handlers-RUJAKE3D.js +277 -0
- package/dist/chunks/pattern-tool-handlers-L62W3CXR.js +1549 -0
- package/dist/chunks/pattern-tool-handlers-SAHX2CVW.js +13 -0
- package/dist/chunks/query-agent-3TWDFIMT.js +191 -0
- package/dist/chunks/query-agent-HXQ3BMMF.js +191 -0
- package/dist/chunks/query-agent-USMC2GNG.js +1 -0
- package/dist/chunks/semantic-agent-MQCAWIAB.js +6381 -0
- package/dist/chunks/semantic-agent-NDGR3NAK.js +6381 -0
- package/dist/chunks/semantic-agent-S4ZL6GZC.js +137 -0
- package/dist/index.js +17 -17
- package/dist/roslyn-addon/.build-hash +1 -1
- package/dist/roslyn-addon/ILGPU.Algorithms.dll +0 -0
- package/dist/roslyn-addon/ILGPU.dll +0 -0
- package/dist/roslyn-addon/UltraCode.CSharp.deps.json +35 -0
- package/dist/roslyn-addon/UltraCode.CSharp.dll +0 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {a}from'./chunk-MTWE62OK.js';import {a as a$4}from'./chunk-NKUHX4CU.js';import {a as a$2}from'./chunk-YIOHS5R6.js';import'./chunk-6MFITFK4.js';import'./chunk-BLAZ5QEI.js';import {e,f,b as b$2,c as c$2}from'./chunk-WZJJIJJU.js';export{a as ALL_SUPPORTED_EXTENSIONS}from'./chunk-WZJJIJJU.js';import {a as a$6}from'./chunk-WUCFSFZP.js';import {a as a$7}from'./chunk-PWZ3AMZA.js';import {a as a$3,b as b$1}from'./chunk-DWXELIG2.js';import'./chunk-QBFXI33X.js';import {a as a$5}from'./chunk-7YC4KTAW.js';import {b}from'./chunk-V5VLOVE7.js';import {c as c$3,f as f$1}from'./chunk-3HWOZJ5W.js';import {h,d}from'./chunk-6K37BWK5.js';import'./chunk-RK5TLU72.js';import'./chunk-LESND2CW.js';import'./chunk-QUO46LUP.js';import'./chunk-3IFLFBQ4.js';import'./chunk-3X7W3DL2.js';import {H,u}from'./chunk-GVQNDMAK.js';import {c,b as b$3}from'./chunk-PZF7YC35.js';import'./chunk-F3VMUQ7O.js';import'./chunk-QZQIPXIR.js';import {c as c$1}from'./chunk-AIZJT6AG.js';import'./chunk-NWQZW3Y6.js';import {g,a as a$1,b as b$4}from'./chunk-KXUWGHHN.js';import'./chunk-2KIPXYOB.js';import'./chunk-OG62YNVF.js';import {R,I}from'./chunk-4BI7EBPQ.js';import'./chunk-F45ISXCP.js';import'./chunk-DXB73IDG.js';import {statSync,readFileSync,existsSync}from'fs';import {cpus}from'os';import {extname,basename,dirname}from'path';g();R();H();c();R();var Be=[".ts",".tsx",".js",".jsx",".mjs",".cjs",".py",".go",".rs",".java",".kt",".kts",".cs",".csx",".c",".cpp",".cc",".cxx",".h",".hpp",".swift",".tpl"];function fe(R){let t=[],r=[];for(let n of R){let i=extname(n).toLowerCase();Be.includes(i)?t.push(n):r.push(n);}return I.i("DEVAGENT","reindex_breakdown",{supported:t.length,heuristic:r.length,supportedSample:t.slice(0,3).map(n=>{let i=n.split(/[\\/]/);return i[i.length-1]})}),{supportedFiles:t,otherFiles:r}}e();var Ke=()=>new Promise(R=>setImmediate(R));function qe(){let R=b$4();return {maxConcurrency:R.devAgent?.maxConcurrency??3,memoryLimit:R.devAgent?.memoryLimit??256,priority:R.devAgent?.priority??7}}var ye=class extends b{parserAgent=null;indexerAgent=null;indexBatchSize;defaultBatchSize;defaultMaxConcurrency;defaultMemoryLimit;resourceMixin=new a;indexingLock=Promise.resolve();constructor(t){let r=qe();super("dev",{maxConcurrency:r.maxConcurrency,memoryLimit:r.memoryLimit,priority:r.priority}),this.defaultMaxConcurrency=this.capabilities.maxConcurrency,this.defaultMemoryLimit=this.capabilities.memoryLimit,this.defaultBatchSize=100,this.indexBatchSize=this.defaultBatchSize;}getIndexerAgent(){return this.indexerAgent}async onInitialize(){try{let t=a$1.getInstance();if(this.defaultBatchSize=t.getDevIndexBatchSize(),this.indexBatchSize=this.defaultBatchSize,t.shouldUseParser())try{this.parserAgent=new a$2,await this.parserAgent.initialize(),I.i("DEVAGENT","parser_init_ok");}catch(s){I.w("DEVAGENT","parser_unavail",{err:String(s)}),this.parserAgent=null;}let n=a$3()||process.cwd();I.i("DEVAGENT","indexer_ctx",{dir:n}),this.indexerAgent=new a$4,await this.indexerAgent.initialize();let i=u(n);h(n,i),I.i("DEVAGENT","global_ctx_set",{dir:n,branch:i}),I.i("DEVAGENT","indexer_init_ok"),this.tryEagerRoslynStart(n);}catch(t){throw I.e("DEVAGENT","subagent_init_fail",{err:String(t)}),t}a$5.subscribe(this.id,"task:implementation",async t=>{let r=t.data;if(r.targetAgent==="dev-agent"){let n={id:r.taskId,type:"implementation",priority:r.priority||5,payload:r,createdAt:Date.now()};await this.process(n);}}),a$5.subscribe(this.id,"resources:adjusted",t=>this.handleResourceAdjustment(t)),a$5.subscribe(this.id,"indexer:files:changed",async t=>{let r=t.data;r.files&&r.files.length>0&&r.source?.startsWith("git-watcher")&&(I.d("DEVAGENT","file_change_evt",{cnt:r.files.length,src:r.source}),await this.handleIncrementalReindex(r.files,r.repositoryPath));}),I.i("DEVAGENT","init_ready");}canProcessTask(t){return t.type==="index"||t.type==="implementation"||t.type==="refactor"||t.type==="dev"||t.type==="parse"}async handleMessage(t){I.d("DEVAGENT","recv_msg",{from:t.from,type:t.type});}async processTask(t){I.d("DEVAGENT","proc_task",{id:t.id,type:t.type});try{switch(t.type){case "index":return await this.handleIndexTask(t);case "implementation":return await this.handleImplementationTask(t);case "refactor":return await this.handleRefactorTask(t);case "parse":return await this.handleParseTask(t);default:return await this.delegateTask(t)}}catch(r){throw I.e("DEVAGENT","task_error",{err:String(r)}),r}}async handleIndexTask(t){let r=this.indexingLock,n;this.indexingLock=new Promise(s=>{n=s;}),await r;let i=t.payload;I.i("DEVAGENT","index_start",{dir:i.directory});try{if(!this.indexerAgent)throw new Error("Indexer agent not initialized");let s=u(i.directory);h(i.directory,s),this.indexerAgent.setProjectContext(i.directory),b$1(i.directory),I.d("DEVAGENT","set_ctx",{dir:i.directory,branch:s});let h$1={status:"started",directory:i.directory,incremental:i.incremental||!1,excludePatterns:i.excludePatterns||[],batchMode:i.batchMode||!1,timestamp:Date.now(),filesProcessed:0,entitiesExtracted:0,relationshipsCreated:0};a$5.publish("indexing:started",h$1,this.id);let m=await this.performRealIndexing(i);return {...h$1,...m,status:"completed",message:`Real indexing completed for ${i.directory}`}}finally{n();}}async handleImplementationTask(t){let r=t.payload;return I.i("DEVAGENT","impl_start",{desc:r.description||"task"}),{status:"completed",taskId:t.id,implementation:{description:r.description,targetAgent:"dev-agent",completed:true,timestamp:Date.now()}}}async handleRefactorTask(t){let r=t.payload;return I.i("DEVAGENT","refactor_start",{target:r.target||"code"}),{status:"completed",taskId:t.id,refactoring:{target:r.target,suggestions:[],completed:true,timestamp:Date.now()}}}async handleParseTask(t){let n=t.payload.filePath;if(!n)throw new Error("Parse task requires filePath in payload");if(I.d("DEVAGENT","parse_file",{file:n}),!this.parserAgent)return I.w("DEVAGENT","parser_unavail_empty"),{filePath:n,entities:[],relationships:[],error:"Parser not initialized",timestamp:Date.now()};try{let i=await this.parserAgent.parseFile(n,{});return I.d("DEVAGENT","parsed_ok",{file:n,cnt:i.entities?.length||0}),{filePath:n,entities:i.entities||[],relationships:i.relationships||[],timestamp:Date.now()}}catch(i){return I.e("DEVAGENT","parse_err",{file:n,err:String(i)}),{filePath:n,entities:[],relationships:[],error:String(i),timestamp:Date.now()}}}async delegateTask(t){return I.d("DEVAGENT","delegate_task",{id:t.id}),{status:"delegated",taskId:t.id,message:`Task ${t.id} delegated for processing`,timestamp:Date.now()}}async prepareIncrementalDiff(t,r){let n=await d(),i=await n.getAllIndexedFiles(),s=[];if(i.size===0)return {filesToProcess:t,deletedEntityIds:s,earlyReturn:null};let h=[],m=[],u=[];for(let o of t){let l=o.replace(/\\/g,"/"),p=i.get(l);if(p===void 0)m.push(o);else try{statSync(o).mtimeMs>p&&h.push(o);}catch{}}let E=new Set(t.map(o=>o.replace(/\\/g,"/")));for(let[o]of i)E.has(o)||u.push(o);if(u.length>0){I.i("DEVAGENT","Invalidating deleted files",{deleted:u.length});for(let o of u)try{let l=await n.deleteEntitiesByFilePath(o);s.push(...l),await n.deleteFileInfo(o);}catch(l){I.w("DEVAGENT","Failed to invalidate file",{file:o,error:l.message});}}for(let o of h)try{await n.deleteFileInfo(o);}catch{}let d$1=[...h,...m];return I.i("DEVAGENT","Smart incremental",{total:r,changed:h.length,new:m.length,deleted:u.length,toProcess:d$1.length,entitiesDeleted:s.length}),d$1.length===0?{filesToProcess:[],deletedEntityIds:s,earlyReturn:{filesProcessed:0,entitiesExtracted:0,relationshipsCreated:0,incrementalStats:{changedFiles:0,newFiles:0,deletedFiles:u.length,skippedFiles:r,deletedEntities:s.length}}}:{filesToProcess:d$1,deletedEntityIds:s,earlyReturn:null}}async initEmbeddingPipeline(t,r){if(t.provider==="llamacpp"){let{llamacppEmbeddingManager:n}=await import('./llamacpp-server-manager-UWVQUMVT.js'),{loadSemanticConfig:i,getDataDir:s}=await import('./config-paths-KTZQTAY2.js'),{existsSync:h,readdirSync:m}=await import('fs'),{join:u}=await import('path'),d=i()?.embedding?.llamacpp;if(d&&!n.getState().isRunning){let o=s(),l=[u(o,"hf-cache","multilingual-e5-base-Q8_0.gguf"),u(o,"llamacpp","models","multilingual-e5-base-Q8_0.gguf"),u(o,"models","multilingual-e5-base-Q8_0.gguf")],p=null;for(let a of l)if(h(a)){p=a;break}if(!p){let a=u(o,"hf-cache");if(h(a))try{let A=m(a).find(C=>C.endsWith(".gguf"));A&&(p=u(a,A));}catch{}}p&&(I.i("DEVAGENT","Starting llama-server for workers...",{port:8085,model:p}),await n.ensureRunning({modelPath:p,mode:"embedding",port:8085,contextSize:d.context_size||512,nGpuLayers:d.n_gpu_layers??99})?I.i("DEVAGENT","llama-server ready for workers"):I.w("DEVAGENT","llama-server start failed - embeddings may not work"));}}if(t.centralizedEmbeddings&&this.parserAgent)try{let{EmbeddingGenerator:n}=await import('./embedding-generator-3WPDCLZY.js'),{buildEmbeddingGeneratorOptions:i}=await import('./provider-config-SKCYXCWZ.js'),{loadSemanticConfig:s}=await import('./config-paths-KTZQTAY2.js'),{getConfig:h}=await import('./yaml-config-Z7563LIX.js'),m=s(),u=h(),E=i(t.provider,t.modelName,t.batchSize,m,u),d=new n(E),o=9e4;try{await Promise.race([d.initialize(),new Promise((l,p)=>setTimeout(()=>p(new Error(`TEI init timeout after ${o}ms`)),o))]);}catch(l){I.w("DEVAGENT","Centralized EmbeddingGenerator init timeout/fail, indexing will proceed without embeddings",{err:l.message});}await this.parserAgent.setEmbeddingGenerator(d),I.i("DEVAGENT","Centralized EmbeddingGenerator configured",{provider:t.provider,model:t.modelName});}catch(n){I.e("DEVAGENT","Failed to initialize centralized EmbeddingGenerator",{error:n.message});}}async initVectorProvider(t,r){if(!this.parserAgent)return;let{getProjectHash:n,getCurrentGitBranchOrDefault:i}=await import('./storage-paths-4D2SRV4U.js'),m=a$1.getInstance().getEmbeddingConfig().useLayeredIndex,u=n(t.directory),E=i(t.directory),d=null;try{if(m){let{getLayeredFaissProvider:o}=await import('./layered-faiss-provider-FXPMJ2GK.js'),l=o();"initialize"in l&&typeof l.initialize=="function"&&(I.d("DEVAGENT","Initializing LayeredFaissProvider",{dir:t.directory,projectHash:u,branch:E}),await l.initialize(t.directory,u,E)),d=l;}else {let{initializeFaissProvider:o}=await import('./faiss-provider-FFF3ZGO3.js'),l=await o();l&&(await l.setProjectContext(u,E),d=l);}}catch(o){I.w("DEVAGENT","Failed to get vector provider",{error:String(o)});}if(d){if(I.d("DEVAGENT","vector_provider_branch",{branch:E,layered:m}),this.parserAgent.setVectorProvider(d),I.i("DEVAGENT","Vector provider configured",{projectHash:u,dir:t.directory,layered:m}),r.length>0)try{let o=r.map(l=>l.startsWith("ent:")?l:`ent:${l}`);await d.remove(o),I.i("DEVAGENT","Removed embeddings for changed/deleted files",{count:o.length});}catch(o){I.w("DEVAGENT","Failed to remove embeddings",{error:o.message});}}else I.w("DEVAGENT","Vector provider not available - embeddings will not be saved");}async postIndexingCleanup(t,r,n,i,s,h,m){s.embFlush_start=Date.now()-i,s.commit_start=Date.now()-i;let u=(async()=>{if(!this.parserAgent)return;let d=this.parserAgent.getAccumulator();if(!d)return;let o=d.getPendingCount();if(o>0){I.i("DEVAGENT","Flushing pending embeddings to FAISS",{pending:o});try{let p=await d.flush();I.i("DEVAGENT","Embeddings flushed to FAISS",{flushed:p});}catch(p){I.e("DEVAGENT","Failed to flush embeddings",{error:p.message});}}let l=d.getStats();I.i("DEVAGENT","Embedding accumulator stats",{accumulated:l.accumulated,flushed:l.flushed,flushCount:l.flushCount,totalBytes:l.totalBytes});})(),E=(async()=>{try{let o=(await d()).getLibSQLAdapter?.();if(o?.createGraphCommit){let l=await o.createGraphCommit(`Index: ${r} files`);l&&I.i("DEVAGENT","graph_commit_created",{commit:l.slice(0,8),files:r,entities:n}),o.pruneAndGC?.(20)?.catch?.(p=>I.w("DEVAGENT","prune_gc_fail",{err:String(p)}));}}catch(d){I.w("DEVAGENT","graph_commit_failed",{error:d.message});}})();if(await Promise.all([u,E]),s.embFlush_end=Date.now()-i,s.commit_end=Date.now()-i,s.keepalive_start=Date.now()-i,this.parserAgent)try{let d=this.parserAgent.getTotalMemoryMB();I.i("DEVAGENT","Switching to keepalive mode (spawning ONE worker for incremental updates)",{memoryMB:d}),await this.parserAgent.enableKeepaliveMode();let o=this.parserAgent.getTotalMemoryMB();I.i("DEVAGENT","Keepalive mode enabled, ready for incremental updates",{memoryBeforeMB:d,memoryAfterMB:o}),I.flush();}catch(d){I.w("DEVAGENT","Failed to enable keepalive mode, falling back to shutdown",{error:d.message});try{await this.parserAgent.shutdown(),this.parserAgent=null;}catch{}}s.keepalive_end=Date.now()-i,c$1(true)&&I.i("DEVAGENT","gc_after_index");}buildPerfSummary(t,r,n,i,s,h,m,u){t.total=Date.now()-u,I.i("DEVAGENT","PERF_SUMMARY",{collectFiles:(t.collectFiles_end??0)-(t.collectFiles_start??0),destroyPools:(t.destroyPools_end??0)-(t.destroyPools_start??0),preSpawn:(t.preSpawn_end??0)-(t.preSpawn_start??0),parsing:(t.parsing_end??0)-(t.parsing_start??0),flush:(t.flush_end??0)-(t.flush_start??0),dataFiles:(t.dataFiles_end??0)-(t.dataFiles_start??0),swaggerLink:(t.swaggerLink_end??0)-(t.swaggerLink_start??0),embFlush:(t.embFlush_end??0)-(t.embFlush_start??0),keepalive:(t.keepalive_end??0)-(t.keepalive_start??0),total:t.total});}async performRealIndexing(t){let r=t.directory,n=t.excludePatterns||[],i=Date.now(),s={};I.i("DEVAGENT","Starting indexing",{directory:r,excludePatternsCount:n.length,samplePatterns:n.slice(0,5)});let h=t.incremental===true;s.collectFiles_start=Date.now()-i;let m=f(r,{excludePatterns:n,agentId:this.id}),u=null;!h&&this.parserAgent&&(s.preSpawnPrepare_start=Date.now()-i,u=(async()=>{I.i("DEVAGENT","Destroying existing worker pools for full reindex (parallel with collectFiles)"),await this.parserAgent.destroyWorkerPools(),await this.parserAgent.setPoolMode("per-language");let c=a$6();return c&&(this.parserAgent.setEmbeddingConfig(c),I.i("DEVAGENT","Embedding config passed to parser",{provider:c.provider,model:c.modelName})),{embeddingConfig:c}})());let E=await m,d=E.files;s.collectFiles_end=Date.now()-i,I.i("DEVAGENT","Files collected",{count:d.length,ms:s.collectFiles_end-s.collectFiles_start});let o=null;u&&(o=await u,s.preSpawnPrepare_end=Date.now()-i,I.i("DEVAGENT","PreSpawn preparation done (parallel)",{ms:s.preSpawnPrepare_end-s.preSpawnPrepare_start}));let l=[];if(h&&d.length>0){let c=await this.prepareIncrementalDiff(d,E.files.length);if(l=c.deletedEntityIds,c.earlyReturn)return I.i("DEVAGENT","No files changed, skipping indexing"),c.earlyReturn;d=c.filesToProcess;}let p=[],a=[];for(let c of d){let D=extname(c).toLowerCase();b$2(D)?p.push(c):a.push(c);}I.i("DEVAGENT","Files separated",{codeFiles:p.length,dataFiles:a.length});let f$1=process.env.MCP_DEBUG_MODE==="1",A=1/0;I.i("DEVAGENT","parser_batch",{files:p.length});let C=f$1?{batchSize:Math.max(1,Math.min(3,A)),useCache:false}:{},G=0,N=0,_=0,z=this.indexerAgent?.getIndexingStats()??{entitiesIndexed:0,relationshipsCreated:0},S=null;this.parserAgent&&(h?(await this.parserAgent.setPoolMode("universal"),I.i("DEVAGENT","Pool mode configured",{mode:"universal",isIncremental:h})):I.i("DEVAGENT","Pool mode configured",{mode:"per-language",isIncremental:h}));let T=o?.embeddingConfig??a$6();if(this.parserAgent&&T){h&&(this.parserAgent.setEmbeddingConfig(T),I.i("DEVAGENT","Embedding config passed to parser",{provider:T.provider,model:T.modelName}));let c=this.initEmbeddingPipeline(T,t);this.parserAgent&&this.parserAgent.setStreamingMode(true),!h&&p.length>0&&(s.preSpawn_start=Date.now()-i,S=this.parserAgent.preSpawnPools(p)),await c,await this.initVectorProvider(t,l);}let B=new Set,$=0,ee=0;this.parserAgent&&this.indexerAgent&&(this.parserAgent.setStreamingMode(true,(c,D,P,O)=>{if(!c.filePath||!c.entities||c.entities.length===0)return;B.add(c.filePath);let I=Date.now();this.indexerAgent.queueForIndexing(c.entities,c.filePath,c.relationships||[]),$+=Date.now()-I,ee++;}),I.i("DEVAGENT","Streaming mode enabled (batch accumulator)")),S&&(await S,s.preSpawn_end=Date.now()-i),s.parsing_start=Date.now()-i;let H=0,W=0,j=0,Q=p;for(let c=0;c<Q.length;c+=A){let D=Q.slice(c,Math.min(c+A,Q.length));try{if(this.parserAgent){let P={};for(let x of D){let v=extname(x).toLowerCase()||"(no ext)";P[v]=(P[v]||0)+1;}I.i("DEVAGENT","Sending batch to parser",{batchSize:D.length,batchIndex:c,extensions:P});let O={id:`parse-${Date.now()}-${c}`,type:"parse:batch",priority:8,payload:{files:D,options:C},createdAt:Date.now()},I$1=Date.now(),g=await this.parserAgent.process(O),w=Date.now()-I$1;H+=w;let y=Date.now();I.i("DEVAGENT","Parser batch completed",{batchSent:D.length,resultsReceived:g?.length||0,batchIndex:c,parseMs:w,filesPerSec:Math.round(D.length/w*1e3)}),I.flush();let V=0,b=0,te=0,M=0;for(let x of g||[])x?.filePath&&V++,Array.isArray(x?.entities)&&(x.entities.length>0?(b++,M+=x.entities.length):te++);I.d("DEVAGENT","batch_parse_analysis",{batch:c,results:g?.length||0,withPath:V,withEnts:b,empty:te,total:M});let F=new Map;for(let x of g||[]){let v=x?.filePath;if(!v)continue;let Z=F.get(v)??{entities:[],relationships:[]};if(Array.isArray(x.entities)&&Z.entities.push(...x.entities),Array.isArray(x.relationships))for(let L of x.relationships)L?.from&&L.to&&L.type&&Z.relationships.push({from:L.from,to:L.to,type:L.type,targetFile:v});F.set(v,Z);}let K=0,we=0;for(let x of g||[])Array.isArray(x?.relationships)&&x.relationships.length>0&&(we++,K+=x.relationships.length);I.d("DEVAGENT","batch_rels",{batch:c,withRels:we,total:K}),I.i("DEVAGENT","Files ready for indexing",{uniqueFiles:F.size,batchIndex:c,totalEntities:M,totalRelationships:K}),I.d("DEVAGENT","batch_summary",{batch:c,sent:D.length,results:g?.length||0,unique:F.size}),W+=Date.now()-y;let ke=Date.now(),Ie=8,oe=Array.from(F.entries()).filter(([x])=>!B.has(x));oe.length>0&&I.i("DEVAGENT","Post-batch indexing (non-streamed files)",{total:F.size,alreadyStreamed:B.size,remaining:oe.length});let X=[],le=0;for(let[x,v]of oe){let Z={id:`index-entities-${Date.now()}-${c}-${x}`,type:"index:entities",priority:7,payload:{entities:v.entities,relationships:v.relationships,filePath:x},createdAt:Date.now()},L=(async()=>{try{return {result:await this.indexerAgent?.enqueue(Z),error:null}}catch(Y){return I.w("DEVAGENT","index_file_fail",{file:x,err:Y.message}),{result:null,error:Y}}})();if(X.push(L),le++,le>=Ie){let Y=await Promise.all(X);for(let{result:ce}of Y)ce&&(G+=ce.entitiesIndexed||0,N+=ce.relationshipsCreated||0,_+=1);X=[],le=0,await Ke();}}if(X.length>0){let x=await Promise.all(X);for(let{result:v}of x)v&&(G+=v.entitiesIndexed||0,N+=v.relationshipsCreated||0,_+=1);}j+=Date.now()-ke;}else {let P=[],O=[];for(let g of D){let w=extname(g).toLowerCase(),y=basename(g),V=y.replace(/\.[^/.]+$/,""),b=w.slice(1)||y,te=b$2(w),M=c$2(w)||c$2("."+y.toLowerCase());if(!te&&!M)continue;let F,K;if(M)try{K=readFileSync(g,"utf-8"),F=b$3(K);}catch{}P.push({name:y,type:"file",filePath:g,language:b,location:{start:{line:1,column:0,index:0},end:{line:1,column:0,index:0}},metadata:{language:b,path:g,isDataFile:M,contentHash:F}}),!M&&(P.push({name:V,type:"module",filePath:g,language:b,location:{start:{line:1,column:0,index:0},end:{line:100,column:0,index:0}},metadata:{language:b,moduleType:"file"}}),b==="py"&&/^[A-Z]/.test(V)&&P.push({name:V,type:"class",filePath:g,language:"python",location:{start:{line:5,column:0,index:0},end:{line:50,column:0,index:0}},metadata:{language:"python",visibility:"public"}}),(b==="kt"||b==="kts"||b==="java")&&/^[A-Z]/.test(V)&&P.push({name:V,type:"class",filePath:g,language:b==="java"?"java":"kotlin",location:{start:{line:5,column:0,index:0},end:{line:50,column:0,index:0}},metadata:{language:b,visibility:"public"}}),(b==="js"||b==="ts")&&!g.includes(".test.")&&!g.includes(".spec.")&&P.push({name:"export_default",type:"function",filePath:g,language:b==="ts"?"typescript":"javascript",location:{start:{line:10,column:0,index:0},end:{line:30,column:0,index:0}},metadata:{language:b,exported:!0}}));}for(let g of P)if(g.type==="file"){let w=P.find(y=>y.type==="module"&&y.filePath===g.filePath);w&&O.push({from:g.name,to:w.name,type:"contains"});}for(let g of P)if(g.type==="module"){let w=P.filter(y=>(y.type==="class"||y.type==="function")&&y.filePath===g.filePath);for(let y of w)O.push({from:g.name,to:y.name,type:y.type==="class"?"defines_class":"defines_function",sourceFile:g.filePath});}for(let g of P)if(g.type==="class"){let w=P.filter(y=>y.type==="function"&&y.filePath===g.filePath);for(let y of w)O.push({from:g.name,to:y.name,type:"has_method",sourceFile:g.filePath});}let I$1=new Map;for(let g of P){if(!g.filePath)continue;let w=I$1.get(g.filePath)??{entities:[],relationships:[]};w.entities.push(g),I$1.set(g.filePath,w);}for(let g of O){let w=g.sourceFile||null;if(!w)continue;let y=I$1.get(w)??{entities:[],relationships:[]};y.relationships.push({from:g.from,to:g.to,type:g.type,targetFile:g.targetFile}),I$1.set(w,y);}for(let[g,w]of I$1.entries()){if(!w.entities.length)continue;let y={id:`index-entities-${Date.now()}-${c}-${g}`,type:"index:entities",priority:7,payload:{entities:w.entities,relationships:w.relationships,filePath:g},createdAt:Date.now()};try{let b=await this.indexerAgent?.process(y);b&&(G+=b.entitiesIndexed||0,N+=b.relationshipsCreated||0,_+=1);}catch(V){I.w("DEVAGENT","idx_fail",{file:g,err:String(V)});}}}}catch(P){I.e("DEVAGENT","batch_err",{batch:c,cnt:D.length,err:P instanceof Error?P.message:String(P)});}((c+A)%500===0||c+A>=Q.length)&&I.i("DEVAGENT","progress",{done:_,total:Q.length});}s.parsing_end=Date.now()-i;let k=(s.parsing_end??0)-(s.parsing_start??0),Ae=Math.max(0,H-$);I.i("DEVAGENT","PARSING_PHASE_BREAKDOWN",{totalMs:k,workerParseMs:H,streamingQueueMs:$,streamingCallbacks:ee,estimatedPureWorkerMs:Ae,mainProcessMs:W,mainIndexMs:j,overheadMs:k-H-W-j,pureWorkerPct:k>0?`${Math.round(Ae/k*100)}%`:"0%",streamingPct:k>0?`${Math.round($/k*100)}%`:"0%",mainProcessPct:k>0?`${Math.round(W/k*100)}%`:"0%",mainIndexPct:k>0?`${Math.round(j/k*100)}%`:"0%"}),this.parserAgent&&this.parserAgent.setStreamingMode(false),s.flush_start=Date.now()-i;let se=0,ae=0;if(this.indexerAgent){let c=this.indexerAgent.getPendingBatchStats();c.files>0&&I.i("DEVAGENT","Flushing remaining batch accumulator",c),await this.indexerAgent.flushPendingBatch();let D=this.indexerAgent.getIndexingStats();se=D.entitiesIndexed-z.entitiesIndexed,ae=D.relationshipsCreated-z.relationshipsCreated,I.i("DEVAGENT","Streaming mode disabled, code parsing complete",{streamedFiles:B.size,deltaEntities:se,deltaRelationships:ae});}if(G=se,N=ae,_+=B.size,s.flush_end=Date.now()-i,a.length>0){s.dataFiles_start=Date.now()-i;let c=await this.processDataFilesParallel(a);G+=c.entities,_+=c.files,s.dataFiles_end=Date.now()-i;}s.swaggerLink_start=Date.now()-i;try{let{resolveSwaggerLinks:c}=await import('./indexing-pipeline-J6Z4BHKF.js'),D=await c();D>0&&(N+=D,I.i("DEVAGENT","swagger_links_created",{count:D}));}catch(c){I.w("DEVAGENT","swagger_link_skip",{error:c.message});}return s.swaggerLink_end=Date.now()-i,s.indexing_end=Date.now()-i,I.i("DEVAGENT","index_done",{files:_,total:d.length,entities:G,rels:N,totalMs:s.indexing_end}),I.i("DEVAGENT","=== ALL BATCH PROCESSING COMPLETE ===",{totalBatches:Math.ceil(p.length/A),codeFiles:p.length,dataFiles:a.length,filesProcessed:_,totalEntities:G,totalRelationships:N,perfTimings:s}),I.flush(),await this.postIndexingCleanup(p,_,G,i,s,A,a),this.buildPerfSummary(s,p,a,_,G,N,A,i),{filesProcessed:_,entitiesExtracted:G,relationshipsCreated:N,totalFiles:d.length,perfTimings:s}}handleResourceAdjustment(t){this.resourceMixin.handleResourceAdjustment.call(this,t);}adjustConcurrency(t){let r=Math.max(1,Math.min(this.defaultMaxConcurrency*2,Math.floor(t)));this.capabilities.maxConcurrency!==r&&(I.d("DEVAGENT","adj_concurrency",{from:this.capabilities.maxConcurrency,to:r}),this.capabilities.maxConcurrency=r);}adjustBatchSize(t){let r=Math.max(.5,Math.min(2,t/this.defaultMemoryLimit)),n=Math.max(10,Math.round(this.defaultBatchSize*r));this.indexBatchSize!==n&&(I.d("DEVAGENT","adj_batch",{from:this.indexBatchSize,to:n}),this.indexBatchSize=n);}tryEagerRoslynStart(t){let r=t,n=null;for(let i=0;i<5&&(n=c$3(r),!n);i++){let s=dirname(r);if(s===r)break;r=s;}n&&(I.i("DEVAGENT","roslyn_eager_start",{sln:n}),f$1(n).then(i=>{i?I.i("DEVAGENT","roslyn_eager_ready",{sln:n}):I.w("DEVAGENT","roslyn_eager_fail",{sln:n});}).catch(i=>{I.w("DEVAGENT","roslyn_eager_error",{sln:n,err:String(i)});}));}async handleIncrementalReindex(t,r){if(!this.parserAgent||!this.indexerAgent){I.w("DEVAGENT","skip_reindex_no_agents");return}let n=Date.now();I.i("DEVAGENT","incr_reindex_start",{files:t.length});let{supportedFiles:i,otherFiles:s}=fe(t);if(i.length===0&&s.length===0){I.i("DEVAGENT","no_files_to_reindex");return}let h=[],m=[];for(let a of t)existsSync(a)?h.push(a):m.push(a);try{if(m.length>0){let a=await d();for(let f of m)try{await a.deleteEntitiesByFilePath(f),await a.deleteFileInfo(f);}catch{}I.i("DEVAGENT","incr_cleanup",{deleted:m.length,existing:h.length});}}catch(a){I.w("DEVAGENT","incr_cleanup_fail",{error:a.message});}let{supportedFiles:u,otherFiles:E}=fe(h),d$1=0,o=0,l=a$6();if(l&&this.parserAgent){this.parserAgent.setEmbeddingConfig(l),I.d("DEVAGENT","incr_embedding_config",{provider:l.provider});let A=a$1.getInstance().getEmbeddingConfig().useLayeredIndex,C=r||a$3()||process.cwd(),{getProjectHash:G,getCurrentGitBranchOrDefault:N}=await import('./storage-paths-4D2SRV4U.js'),_=G(C),z=N(C);try{if(A){let{getLayeredFaissProvider:S}=await import('./layered-faiss-provider-FXPMJ2GK.js'),T=S();"initialize"in T&&typeof T.initialize=="function"&&await T.initialize(C,_,z),this.parserAgent.setVectorProvider(T),I.i("DEVAGENT","incr_vector_provider",{branch:z,layered:!0});}else {let{initializeFaissProvider:S}=await import('./faiss-provider-FFF3ZGO3.js'),T=await S();T&&(await T.setProjectContext(_,z),this.parserAgent.setVectorProvider(T),I.i("DEVAGENT","incr_vector_provider",{branch:z,layered:!1}));}}catch(S){I.w("DEVAGENT","incr_vector_provider_fail",{error:String(S)});}if(I.d("DEVAGENT","incr_embedding_config",{provider:l.provider,centralized:l.centralizedEmbeddings,batchSize:l.batchSize}),l.centralizedEmbeddings)try{let{EmbeddingGenerator:S}=await import('./embedding-generator-3WPDCLZY.js'),{buildEmbeddingGeneratorOptions:T}=await import('./provider-config-SKCYXCWZ.js'),{loadSemanticConfig:B}=await import('./config-paths-KTZQTAY2.js'),{getConfig:$}=await import('./yaml-config-Z7563LIX.js'),ee=B(),H=$(),W=T(l.provider,l.modelName,l.batchSize,ee,H),j=new S(W);await j.initialize(),await this.parserAgent.setEmbeddingGenerator(j),I.i("DEVAGENT","incr_embedding_generator",{provider:l.provider,model:l.modelName});}catch(S){I.w("DEVAGENT","incr_embedding_generator_fail",{error:S.message});}}if(u.length>0)try{I.i("DEVAGENT","incr_parseBatch_start",{files:u.length});let a=await this.parserAgent.parseBatch(u,{});I.i("DEVAGENT","incr_parseBatch_done",{files:u.length,results:a.length});for(let f of a)if(f.entities&&f.entities.length>0)try{this.indexerAgent.queueForIndexing(f.entities,f.filePath,f.relationships),d$1++;}catch(A){I.e("DEVAGENT","queue_fail",{file:f.filePath,err:String(A)}),o++;}}catch(a){I.e("DEVAGENT","batch_parse_fail",{files:u.length,err:String(a)}),o+=u.length;}for(let a of E)try{let f=a$7(a);f.entities.length>0&&(this.indexerAgent.queueForIndexing(f.entities,a,f.relationships),d$1++);}catch(f){I.e("DEVAGENT","heuristic_fail",{file:a,err:String(f)}),o++;}try{let a=await this.indexerAgent.flushPendingBatch();I.i("DEVAGENT","incr_batch_flush",{entities:a.entities,relationships:a.relationships,files:a.files});}catch(a){I.e("DEVAGENT","incr_flush_fail",{err:String(a)});}let p=Date.now()-n;if(I.i("DEVAGENT","incr_reindex_done",{success:d$1,errors:o,deleted:m.length,ms:p}),this.parserAgent){let a=this.parserAgent.getAccumulator();if(a){let f=a.getPendingCount();if(f>0){I.i("DEVAGENT","Flushing incremental embeddings to FAISS",{pending:f});try{let A=await a.flush();I.i("DEVAGENT","Incremental embeddings flushed",{flushed:A});}catch(A){I.e("DEVAGENT","Failed to flush incremental embeddings",{error:A.message});}}try{if(a$1.getInstance().getEmbeddingConfig().useLayeredIndex){let{getLayeredFaissProvider:N}=await import('./layered-faiss-provider-FXPMJ2GK.js'),_=N();"save"in _&&typeof _.save=="function"&&(await _.save(),I.i("DEVAGENT","Saved layered FAISS index after incremental"));}}catch(A){I.w("DEVAGENT","Failed to save FAISS index after incremental",{error:A.message});}}}try{let f=(await d()).getLibSQLAdapter?.();if(f?.createGraphCommit&&d$1>0){let A=await f.createGraphCommit(`Incremental: ${d$1} files`);A&&I.i("DEVAGENT","incr_commit_created",{commit:A.slice(0,8),files:d$1}),f.pruneAndGC?.(20)?.catch?.(C=>I.w("DEVAGENT","incr_prune_gc_fail",{err:String(C)}));}}catch(a){I.w("DEVAGENT","incr_commit_failed",{error:a.message});}if(this.parserAgent)try{await this.parserAgent.killIfMemoryHigh(1024)&&(this.parserAgent=null,I.i("DEVAGENT","Parser workers killed (memory > 1GB after incremental)"));}catch{}c$1(true)&&I.d("DEVAGENT","gc_after_incremental"),a$5.publish("indexer:incremental:complete",{filesProcessed:d$1,errors:o,elapsedMs:p,source:"dev-agent"},this.id),d().then(a=>a.runGenerationGC()).then(a=>{(a.entities>0||a.tokens>0)&&I.i("DEVAGENT","gen_gc_complete",a);}).catch(a=>I.w("DEVAGENT","gen_gc_fail",{error:a.message}));}async processDataFilesParallel(t){if(t.length===0||!this.indexerAgent)return {entities:0,files:0};let r=Date.now();I.i("DEVAGENT","Processing data files in PARALLEL",{count:t.length});let n=Math.max(32,cpus().length*4),i=[];for(let E=0;E<t.length;E+=n){let d=t.slice(E,E+n),o=await Promise.all(d.map(async l=>{try{return a$7(l)}catch{return null}}));for(let l of o)l&&l.entities.length>0&&i.push(l);}let s=Math.max(32,cpus().length*2),h=0,m=0;for(let E=0;E<i.length;E+=s){let o=i.slice(E,E+s).map(async p=>{try{return {entities:(await this.indexerAgent.indexEntities(p.entities,p.filePath,p.relationships)).entitiesIndexed,success:!0}}catch{return {entities:0,success:false}}}),l=await Promise.all(o);for(let p of l)p.success&&(h+=p.entities,m++);}let u=Date.now()-r;return I.i("DEVAGENT","Data files processed in PARALLEL",{files:m,entities:h,elapsedMs:u,filesPerSec:Math.round(m/u*1e3)}),{entities:h,files:m}}getEmbeddingStats(){return this.parserAgent?.getEmbeddingPoolStats?.()??null}async onShutdown(){I.i("DEVAGENT","shutdown_start"),this.parserAgent&&await this.parserAgent.shutdown(),this.indexerAgent&&await this.indexerAgent.shutdown();}},vt=new ye;export{ye as DevAgent,vt as devAgent};
|