import {execFile,spawn}from'child_process';import {promisify}from'util';import {z as z$1}from'zod';/** * @claude-flow/plugin-gastown-bridge v0.1.3 * * WASM-accelerated Gas Town orchestration for Claude Flow V3 * Bundle optimized: <100KB gzipped total * * @license MIT * @copyright 2024 rUv */ var f=class{cache=new Map;head=null;tail=null;currentSize=0;maxSize;maxEntries;ttlMs;onEvict;constructor(e={}){this.maxSize=e.maxSize??50*1024*1024,this.maxEntries=e.maxEntries??1e3,this.ttlMs=e.ttlMs??0,this.onEvict=e.onEvict;}get(e){let t=this.cache.get(e);if(t){if(this.ttlMs>0&&Date.now()-t.createdAt>this.ttlMs){this.delete(e);return}return this.moveToFront(t),t.accessCount++,t.value}}set(e,t,r){let i=r??this.estimateSize(t),s=this.cache.get(e);if(s){this.currentSize-=s.size,s.value=t,s.size=i,s.createdAt=Date.now(),this.currentSize+=i,this.moveToFront(s);return}for(;(this.cache.size>=this.maxEntries||this.currentSize+i>this.maxSize)&&this.tail;)this.evictLRU();let a={key:e,value:t,prev:null,next:this.head,size:i,createdAt:Date.now(),accessCount:1};this.head&&(this.head.prev=a),this.head=a,this.tail||(this.tail=a),this.cache.set(e,a),this.currentSize+=i;}has(e){let t=this.cache.get(e);return t?this.ttlMs>0&&Date.now()-t.createdAt>this.ttlMs?(this.delete(e),false):true:false}delete(e){let t=this.cache.get(e);return t?(this.removeNode(t),this.cache.delete(e),this.currentSize-=t.size,true):false}clear(){if(this.onEvict)for(let[e,t]of this.cache)this.onEvict(e,t.value);this.cache.clear(),this.head=null,this.tail=null,this.currentSize=0;}stats(){let e=0;for(let t of this.cache.values())e+=t.accessCount;return {entries:this.cache.size,sizeBytes:this.currentSize,maxEntries:this.maxEntries,maxSizeBytes:this.maxSize,hitRate:this.cache.size>0?e/this.cache.size:0}}keys(){return this.cache.keys()}get size(){return this.cache.size}moveToFront(e){e!==this.head&&(this.removeNode(e),e.prev=null,e.next=this.head,this.head&&(this.head.prev=e),this.head=e,this.tail||(this.tail=e));}removeNode(e){e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev;}evictLRU(){if(!this.tail)return;let e=this.tail;this.removeNode(e),this.cache.delete(e.key),this.currentSize-=e.size,this.onEvict&&this.onEvict(e.key,e.value);}estimateSize(e){return e==null?8:typeof e=="string"?e.length*2:typeof e=="number"?8:typeof e=="boolean"?4:ArrayBuffer.isView(e)?e.byteLength:Array.isArray(e)?e.reduce((t,r)=>t+this.estimateSize(r),64):typeof e=="object"?JSON.stringify(e).length*2:64}},F=class{astCache;hashCache=new Map;constructor(e=500){this.astCache=new f({maxEntries:e,ttlMs:300*1e3});}get(e){let t=this.hashContent(e);return this.astCache.get(t)}set(e,t){let r=this.hashContent(e);this.astCache.set(r,t);}has(e){let t=this.hashContent(e);return this.astCache.has(t)}clear(){this.astCache.clear(),this.hashCache.clear();}stats(){let e=this.astCache.stats();return {entries:e.entries,sizeBytes:e.sizeBytes}}hashContent(e){let t=this.hashCache.get(e);if(t)return t;let r=2166136261;for(let s=0;s>>0;let i=r.toString(36);if(this.hashCache.set(e,i),this.hashCache.size>1e4){let s=this.hashCache.keys().next().value;s&&this.hashCache.delete(s);}return i}};var b=class{pending=new Map;timeoutMs;constructor(e=3e4){this.timeoutMs=e;}async dedupe(e,t){let r=this.pending.get(e);if(r)return new Promise((d,o)=>{r.resolvers.push({resolve:d,reject:o});});let i=[],s=(async()=>{try{let d=await t();for(let{resolve:o}of i)o(d);return d}catch(d){for(let{reject:o}of i)o(d);throw d}finally{this.pending.delete(e);}})(),a={promise:s,resolvers:i,startedAt:Date.now()};return this.pending.set(e,a),setTimeout(()=>{let d=this.pending.get(e);if(d===a){this.pending.delete(e);for(let{reject:o}of d.resolvers)o(new Error(`Request timed out after ${this.timeoutMs}ms`));}},this.timeoutMs),s}get pendingCount(){return this.pending.size}clear(){for(let[e,t]of this.pending)for(let{reject:r}of t.resolvers)r(new Error("Deduplicator cleared"));this.pending.clear();}},$=class{preloadQueue=[];loaded=new Map;errors=new Map;isPreloading=false;preloadPromise=null;register(e,t,r=0){this.loaded.has(e)||(this.preloadQueue.push({name:e,loader:t,priority:r}),this.preloadQueue.sort((i,s)=>s.priority-i.priority));}async startPreload(){if(!(this.isPreloading||this.preloadQueue.length===0)){this.isPreloading=true,this.preloadPromise=this.runPreload();try{await this.preloadPromise;}finally{this.isPreloading=false,this.preloadPromise=null;}}}get(e){return this.loaded.get(e)}isLoaded(e){return this.loaded.has(e)}getError(e){return this.errors.get(e)}status(){return {queued:this.preloadQueue.length,loaded:this.loaded.size,errors:this.errors.size,isPreloading:this.isPreloading}}async waitForPreload(){this.preloadPromise&&await this.preloadPromise;}async runPreload(){for(;this.preloadQueue.length>0;){let e=this.preloadQueue.shift();if(!e)break;await this.scheduleIdleTask(async()=>{try{let t=await e.loader();this.loaded.set(e.name,t);}catch(t){this.errors.set(e.name,t);}});}}scheduleIdleTask(e){return new Promise(t=>{typeof requestIdleCallback<"u"?requestIdleCallback(async()=>{await e(),t();}):typeof setImmediate<"u"?setImmediate(async()=>{await e(),t();}):setTimeout(async()=>{await e(),t();},0);})}};var V=class{constructor(e,t=100){this.emit=e;this.debounceMs=t;}pending=null;timeoutId=null;lastEmitTime=0;update(e){this.pending=e;let r=Date.now()-this.lastEmitTime;if(r>=this.debounceMs){this.flush();return}this.timeoutId||(this.timeoutId=setTimeout(()=>{this.flush();},this.debounceMs-r));}flush(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null),this.pending!==null&&(this.emit(this.pending),this.pending=null,this.lastEmitTime=Date.now());}cancel(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null),this.pending=null;}};var q=promisify(execFile),N=new f({maxEntries:200,ttlMs:30*1e3}),R=new f({maxEntries:500,ttlMs:300*1e3}),ee=new b,C=new f({maxEntries:500,ttlMs:60*1e3});function K(n){let e=2166136261;for(let t of n){for(let r=0;r>>0;e^=255;}return e.toString(36)}var B=z$1.string().max(1024,"String too long").refine(n=>!/[;&|`$(){}><\n\r\0]/.test(n),"String contains shell metacharacters"),te=z$1.string().min(1,"Identifier cannot be empty").max(64,"Identifier too long").regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/,"Invalid identifier format"),re=z$1.number().positive("Gas price must be positive").max(1e6,"Gas price exceeds maximum"),ie=z$1.number().int("Gas limit must be an integer").positive("Gas limit must be positive").max(3e7,"Gas limit exceeds maximum"),j=z$1.string().regex(/^0x[a-fA-F0-9]{64}$/,"Invalid transaction hash format"),I=z$1.string().regex(/^0x[a-fA-F0-9]{40}$/,"Invalid address format"),se=z$1.enum(["mainnet","goerli","sepolia","polygon","arbitrum","optimism","base","local"]),Q=z$1.string().max(512,"Argument too long").refine(n=>!n.includes("\0"),"Argument contains null byte").refine(n=>!/[;&|`$(){}><]/.test(n),"Argument contains shell metacharacters"),h=class extends Error{constructor(t,r,i,s,a){super(t);this.code=r;this.command=i;this.args=s;this.cause=a;this.name="GtBridgeError";}},ne={debug:(n,e)=>console.debug(`[gt-bridge] ${n}`,e??""),info:(n,e)=>console.info(`[gt-bridge] ${n}`,e??""),warn:(n,e)=>console.warn(`[gt-bridge] ${n}`,e??""),error:(n,e)=>console.error(`[gt-bridge] ${n}`,e??"")},ae=new Set(["estimate","status","network","price","tx","simulate","decode","encode","help","version","config"]),z=class n{config;logger;initialized=false;static CACHEABLE_COMMANDS=new Set(["version","status","price","decode","help","config"]);static STATIC_COMMANDS=new Set(["version","help","decode"]);constructor(e,t){this.config={gtPath:e?.gtPath??"gt",cwd:e?.cwd??process.cwd(),timeout:e?.timeout??3e4,maxBuffer:e?.maxBuffer??10*1024*1024,env:e?.env??process.env,defaultNetwork:e?.defaultNetwork??"mainnet"},this.logger=t??ne;}async initialize(){try{let e=await this.execGt(["version"]);if(!e.success)throw new h("Failed to verify gt installation","COMMAND_NOT_FOUND","gt",["version"]);this.initialized=!0,this.logger.info("Gas Town bridge initialized",{gtPath:this.config.gtPath,version:e.data});}catch(e){throw e instanceof h?e:new h("Failed to initialize Gas Town bridge","COMMAND_NOT_FOUND","gt",["version"],e)}}async execGt(e,t=false){let r=Date.now(),i=this.validateAndSanitizeArgs(e),s=i[0];if(s&&!ae.has(s))throw new h(`Command not allowed: ${s}`,"INVALID_ARGUMENT","gt",i);let a=K(i),d=!t&&s&&n.CACHEABLE_COMMANDS.has(s),o=s&&n.STATIC_COMMANDS.has(s);if(d){let l=o?R.get(a):N.get(a);if(l)return this.logger.debug("Cache hit for gt command",{command:s}),{...l,durationMs:0}}return ee.dedupe(a,async()=>{try{this.logger.debug("Executing gt command",{command:"gt",args:i});let{stdout:l,stderr:u}=await q(this.config.gtPath,i,{cwd:this.config.cwd,env:this.config.env,timeout:this.config.timeout,maxBuffer:this.config.maxBuffer,shell:!1,windowsHide:!0}),c=Date.now()-r;u&&u.trim()&&this.logger.warn("gt stderr output",{stderr:u});let p={success:!0,data:l.trim(),command:"gt",args:i,durationMs:c};return d&&p.success&&(o?R.set(a,p):N.set(a,p)),p}catch(l){let u=Date.now()-r,c=l;if(c.killed)throw new h("Command execution timed out","TIMEOUT","gt",i);if(c.code==="ENOENT")throw new h(`gt executable not found at: ${this.config.gtPath}`,"COMMAND_NOT_FOUND","gt",i);return {success:false,error:c.stderr||c.message,command:"gt",args:i,durationMs:u}}})}parseGtOutput(e){if(!e||e.trim()==="")throw new h("Empty output from gt command","INVALID_OUTPUT");let t=K([e]),r=C.get(t);if(r!==void 0)return r;try{let i=JSON.parse(e);return C.set(t,i),i}catch{let i=e.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(i)try{let s=JSON.parse(i[0]);return C.set(t,s),s}catch{throw new h("Failed to parse gt output as JSON","INVALID_OUTPUT")}throw new h("Output is not valid JSON","INVALID_OUTPUT")}}async estimateGas(e){this.ensureInitialized();let t=I.parse(e.to),r=e.network??this.config.defaultNetwork,i=["estimate","--to",t,"--network",r,"--json"];if(e.data){let a=B.parse(e.data);i.push("--data",a);}if(e.value){let a=B.parse(e.value);i.push("--value",a);}if(e.from){let a=I.parse(e.from);i.push("--from",a);}let s=await this.execGt(i);if(!s.success||!s.data)throw new h(s.error??"Gas estimation failed","EXECUTION_FAILED","gt",i);return this.parseGtOutput(s.data)}async getTxStatus(e,t){this.ensureInitialized();let i=["tx","status",j.parse(e),"--network",t??this.config.defaultNetwork,"--json"],s=await this.execGt(i);if(!s.success||!s.data)throw new h(s.error??"Failed to get transaction status","EXECUTION_FAILED","gt",i);return this.parseGtOutput(s.data)}async getNetworkStatus(e){this.ensureInitialized();let t=["network","status","--network",e??this.config.defaultNetwork,"--json"],r=await this.execGt(t);if(!r.success||!r.data)throw new h(r.error??"Failed to get network status","NETWORK_ERROR","gt",t);return this.parseGtOutput(r.data)}async getGasPrice(e){this.ensureInitialized();let t=["price","--network",e??this.config.defaultNetwork,"--json"],r=await this.execGt(t);if(!r.success||!r.data)throw new h(r.error??"Failed to get gas price","EXECUTION_FAILED","gt",t);return this.parseGtOutput(r.data)}async simulate(e){this.ensureInitialized();let t=I.parse(e.to),r=B.parse(e.data),i=e.network??this.config.defaultNetwork,s=["simulate","--to",t,"--data",r,"--network",i,"--json"];e.value&&s.push("--value",B.parse(e.value)),e.from&&s.push("--from",I.parse(e.from)),e.blockNumber!==void 0&&s.push("--block",String(e.blockNumber));let a=await this.execGt(s);if(!a.success||!a.data)throw new h(a.error??"Transaction simulation failed","EXECUTION_FAILED","gt",s);return this.parseGtOutput(a.data)}async decode(e,t){this.ensureInitialized();let i=["decode",B.parse(e),"--json"];if(t){let a=B.parse(t);i.push("--abi",a);}let s=await this.execGt(i);if(!s.success||!s.data)throw new h(s.error??"Failed to decode transaction data","EXECUTION_FAILED","gt",i);return this.parseGtOutput(s.data)}validateAndSanitizeArgs(e){return e.map((t,r)=>{try{return Q.parse(t)}catch(i){throw new h(`Invalid argument at index ${r}: ${t}`,"VALIDATION_ERROR","gt",e,i)}})}ensureInitialized(){if(!this.initialized)throw new h("Gas Town bridge not initialized. Call initialize() first.","EXECUTION_FAILED")}isInitialized(){return this.initialized}getConfig(){return {...this.config}}getCacheStats(){return {resultCache:N.stats(),staticCache:R.stats(),parsedCache:C.stats()}}clearCaches(){N.clear(),R.clear(),C.clear();}};function oe(n,e){return new z(n,e)}var ue=promisify(execFile),L=new f({maxEntries:100,ttlMs:30*1e3}),T=new f({maxEntries:500,ttlMs:60*1e3}),P=new f({maxEntries:50,ttlMs:300*1e3}),ge=new b,A=new f({maxEntries:100,ttlMs:30*1e3});function J(n){let e=2166136261;for(let t of n){for(let r=0;r>>0;e^=255;}return e.toString(36)}var w=z$1.string().max(4096,"String too long").refine(n=>!/[;&|`$(){}><\n\r\0]/.test(n),"String contains shell metacharacters");z$1.string().min(1,"Identifier cannot be empty").max(128,"Identifier too long").regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/,"Invalid identifier format");var x=z$1.string().min(1,"Bead ID cannot be empty").max(64,"Bead ID too long").regex(/^[a-zA-Z0-9_-]+$/,"Invalid bead ID format"),H=z$1.enum(["prompt","response","code","context","memory","tool-call","tool-result","system","error","metadata"]),_=z$1.object({id:x,type:H,content:z$1.string(),timestamp:z$1.string().datetime().optional(),metadata:z$1.record(z$1.unknown()).optional(),parentId:x.optional(),threadId:z$1.string().optional(),agentId:z$1.string().optional(),tags:z$1.array(z$1.string()).optional(),embedding:z$1.array(z$1.number()).optional(),hash:z$1.string().optional()}),Z=z$1.string().max(1024,"Argument too long").refine(n=>!n.includes("\0"),"Argument contains null byte").refine(n=>!/[;&|`$(){}><]/.test(n),"Argument contains shell metacharacters"),g=class extends Error{constructor(t,r,i,s,a){super(t);this.code=r;this.command=i;this.args=s;this.cause=a;this.name="BdBridgeError";}},he={debug:(n,e)=>console.debug(`[bd-bridge] ${n}`,e??""),info:(n,e)=>console.info(`[bd-bridge] ${n}`,e??""),warn:(n,e)=>console.warn(`[bd-bridge] ${n}`,e??""),error:(n,e)=>console.error(`[bd-bridge] ${n}`,e??"")},X=new Set(["list","get","create","update","delete","search","export","import","thread","stats","help","version","config","sync"]),O=class n{config;logger;initialized=false;static CACHEABLE_COMMANDS=new Set(["list","get","search","stats","version","help","config"]);static STATIC_COMMANDS=new Set(["version","help","stats","config"]);constructor(e,t){this.config={bdPath:e?.bdPath??"bd",cwd:e?.cwd??process.cwd(),timeout:e?.timeout??6e4,maxBuffer:e?.maxBuffer??50*1024*1024,env:e?.env??process.env,storagePath:e?.storagePath??""},this.logger=t??he;}async initialize(){try{let e=await this.execBd(["version"]);if(!e.success)throw new g("Failed to verify bd installation","COMMAND_NOT_FOUND","bd",["version"]);this.initialized=!0,this.logger.info("Beads bridge initialized",{bdPath:this.config.bdPath,version:e.data});}catch(e){throw e instanceof g?e:new g("Failed to initialize Beads bridge","COMMAND_NOT_FOUND","bd",["version"],e)}}async execBd(e,t=false){let r=Date.now(),i=this.validateAndSanitizeArgs(e),s=i[0];if(s&&!X.has(s))throw new g(`Command not allowed: ${s}`,"INVALID_ARGUMENT","bd",i);let a=J(i),d=!t&&s&&n.CACHEABLE_COMMANDS.has(s);s&&n.STATIC_COMMANDS.has(s);if(d){let l=P.get(a);if(l)return this.logger.debug("Cache hit for bd command",{command:s}),{...l,durationMs:0}}return ge.dedupe(a,async()=>{try{this.logger.debug("Executing bd command",{command:"bd",args:i});let{stdout:l,stderr:u}=await ue(this.config.bdPath,i,{cwd:this.config.cwd,env:this.config.env,timeout:this.config.timeout,maxBuffer:this.config.maxBuffer,shell:!1,windowsHide:!0}),c=Date.now()-r;u&&u.trim()&&this.logger.warn("bd stderr output",{stderr:u});let p={success:!0,data:l.trim(),command:"bd",args:i,durationMs:c};return d&&p.success&&P.set(a,p),p}catch(l){let u=Date.now()-r,c=l;if(c.killed)throw new g("Command execution timed out","TIMEOUT","bd",i);if(c.code==="ENOENT")throw new g(`bd executable not found at: ${this.config.bdPath}`,"COMMAND_NOT_FOUND","bd",i);return {success:false,error:c.stderr||c.message,command:"bd",args:i,durationMs:u}}})}execBdStreaming(e){let t=Date.now(),r=this.validateAndSanitizeArgs(e),i=r[0];if(i&&!X.has(i))throw new g(`Command not allowed: ${i}`,"INVALID_ARGUMENT","bd",r);this.logger.debug("Executing bd command (streaming)",{command:"bd",args:r});let s=spawn(this.config.bdPath,r,{cwd:this.config.cwd,env:this.config.env,timeout:this.config.timeout,shell:false,windowsHide:true}),a=new Promise((d,o)=>{let l="",u="";s.stdout?.on("data",c=>{l+=c.toString();}),s.stderr?.on("data",c=>{u+=c.toString();}),s.on("close",c=>{let p=Date.now()-t;d(c===0?{success:true,data:l.trim(),command:"bd",args:r,durationMs:p}:{success:false,error:u||`Process exited with code ${c}`,command:"bd",args:r,durationMs:p});}),s.on("error",c=>{o(new g(c.message,"EXECUTION_FAILED","bd",r));});});return {process:s,stdout:s.stdout,stderr:s.stderr,promise:a}}parseBdOutput(e){if(!e||e.trim()==="")return [];let t=J([e]),r=A.get(t);if(r)return r;let i=e.trim().split(` `),s=[],a=[];for(let d=0;d0&&this.logger.warn("Some beads failed to parse",{totalLines:i.length,parsed:s.length,errors:a.length,firstErrors:a.slice(0,3)}),A.set(t,s),s}parseSingleBead(e){if(!e||e.trim()==="")throw new g("Empty output from bd command","INVALID_OUTPUT");try{let t=JSON.parse(e);return _.parse(t)}catch(t){throw new g("Failed to parse bead output","PARSE_ERROR",void 0,void 0,t)}}async listBeads(e){this.ensureInitialized();let t=["list","--format","jsonl"];if(e?.type){let i=Array.isArray(e.type)?e.type:[e.type];for(let s of i)t.push("--type",s);}if(e?.threadId&&t.push("--thread",w.parse(e.threadId)),e?.agentId&&t.push("--agent",w.parse(e.agentId)),e?.tags&&e.tags.length>0)for(let i of e.tags)t.push("--tag",w.parse(i));e?.after&&t.push("--after",e.after),e?.before&&t.push("--before",e.before),e?.limit!==void 0&&t.push("--limit",String(Math.min(e.limit,1e4))),e?.offset!==void 0&&t.push("--offset",String(e.offset)),e?.sortBy&&t.push("--sort",e.sortBy),e?.sortOrder&&t.push("--order",e.sortOrder);let r=await this.execBd(t);if(!r.success)throw new g(r.error??"Failed to list beads","EXECUTION_FAILED","bd",t);return this.parseBdOutput(r.data??"")}async getBead(e){this.ensureInitialized();let t=x.parse(e),r=T.get(t);if(r)return this.logger.debug("Bead cache hit",{beadId:t}),r;let i=["get",t,"--format","json"],s=await this.execBd(i);if(!s.success)throw s.error?.includes("not found")?new g(`Bead not found: ${e}`,"BEAD_NOT_FOUND","bd",i):new g(s.error??"Failed to get bead","EXECUTION_FAILED","bd",i);let a=this.parseSingleBead(s.data??"");return T.set(a.id,a),a}async createBead(e){this.ensureInitialized();let t=["create","--type",e.type,"--content",w.parse(e.content),"--format","json"];if(e.parentId&&t.push("--parent",x.parse(e.parentId)),e.threadId&&t.push("--thread",w.parse(e.threadId)),e.agentId&&t.push("--agent",w.parse(e.agentId)),e.tags&&e.tags.length>0)for(let i of e.tags)t.push("--tag",w.parse(i));e.metadata&&t.push("--metadata",JSON.stringify(e.metadata));let r=await this.execBd(t);if(!r.success)throw new g(r.error??"Failed to create bead","EXECUTION_FAILED","bd",t);return this.parseSingleBead(r.data??"")}async searchBeads(e,t){this.ensureInitialized();let r=["search",w.parse(e),"--format","jsonl"];if(t?.limit!==void 0&&r.push("--limit",String(Math.min(t.limit,1e3))),t?.threshold!==void 0&&r.push("--threshold",String(t.threshold)),t?.type){let s=Array.isArray(t.type)?t.type:[t.type];for(let a of s)r.push("--type",a);}let i=await this.execBd(r);if(!i.success)throw new g(i.error??"Bead search failed","EXECUTION_FAILED","bd",r);return this.parseBdOutput(i.data??"")}async exportBeads(e){this.ensureInitialized();let t=["export","--format","jsonl"];e?.threadId&&t.push("--thread",w.parse(e.threadId)),e?.after&&t.push("--after",e.after),e?.before&&t.push("--before",e.before);let r=await this.execBd(t);if(!r.success)throw new g(r.error??"Export failed","EXECUTION_FAILED","bd",t);return r.data??""}async getStats(){this.ensureInitialized();let e=["stats","--format","json"],t=await this.execBd(e);if(!t.success)throw new g(t.error??"Failed to get stats","EXECUTION_FAILED","bd",e);try{return JSON.parse(t.data??"{}")}catch{throw new g("Failed to parse stats output","PARSE_ERROR","bd",e)}}validateAndSanitizeArgs(e){return e.map((t,r)=>{try{return Z.parse(t)}catch(i){throw new g(`Invalid argument at index ${r}: ${t}`,"VALIDATION_ERROR","bd",e,i)}})}ensureInitialized(){if(!this.initialized)throw new g("Beads bridge not initialized. Call initialize() first.","EXECUTION_FAILED")}isInitialized(){return this.initialized}getConfig(){return {...this.config}}getCacheStats(){return {beadQueryCache:L.stats(),singleBeadCache:T.stats(),staticCache:P.stats(),parsedCache:A.stats()}}clearCaches(){L.clear(),T.clear(),P.clear(),A.clear();}invalidateBeadCache(e){T.delete(e),L.clear(),A.clear();}};function U(n,e){return new O(n,e)}var E=new f({maxEntries:500,ttlMs:30*1e3}),M=new f({maxEntries:200,ttlMs:10*1e3});function G(n){let e=2166136261;for(let t of n){for(let r=0;r>>0;e^=255;}return e.toString(36)}var me=z$1.enum(["beads-wins","agentdb-wins","newest-wins","merge","manual"]),fe=z$1.enum(["to-agentdb","from-agentdb","bidirectional"]),pe=z$1.enum(["pending","in-progress","completed","failed","conflict"]),ye=z$1.object({key:z$1.string(),value:z$1.unknown(),namespace:z$1.string().optional(),metadata:z$1.record(z$1.unknown()).optional(),embedding:z$1.array(z$1.number()).optional(),createdAt:z$1.string().datetime().optional(),updatedAt:z$1.string().datetime().optional(),version:z$1.number().optional()}),v=class extends Error{constructor(t,r,i,s){super(t);this.code=r;this.details=i;this.cause=s;this.name="SyncBridgeError";}},we={debug:(n,e)=>console.debug(`[sync-bridge] ${n}`,e??""),info:(n,e)=>console.info(`[sync-bridge] ${n}`,e??""),warn:(n,e)=>console.warn(`[sync-bridge] ${n}`,e??""),error:(n,e)=>console.error(`[sync-bridge] ${n}`,e??"")},k=class{bdBridge;agentDB;config;logger;initialized=false;syncState;conflicts=new Map;constructor(e,t,r){this.agentDB=e,this.config={beadsBridge:t?.beadsBridge??{},agentdbNamespace:t?.agentdbNamespace??"beads",conflictStrategy:t?.conflictStrategy??"newest-wins",batchSize:t?.batchSize??100,preserveEmbeddings:t?.preserveEmbeddings??true,syncMetadata:t?.syncMetadata??true},this.logger=r??we,this.bdBridge=U(this.config.beadsBridge,{debug:(i,s)=>this.logger.debug(`[bd] ${i}`,s),info:(i,s)=>this.logger.info(`[bd] ${i}`,s),warn:(i,s)=>this.logger.warn(`[bd] ${i}`,s),error:(i,s)=>this.logger.error(`[bd] ${i}`,s)}),this.syncState={lastSyncTime:new Date(0).toISOString(),pendingConflicts:[],version:1};}async initialize(){try{await this.bdBridge.initialize();let e=await this.agentDB.retrieve("_sync_state",this.config.agentdbNamespace);if(e?.value){let t=e.value;this.syncState={lastSyncTime:t.lastSyncTime??new Date(0).toISOString(),lastBeadId:t.lastBeadId,lastAgentDBKey:t.lastAgentDBKey,pendingConflicts:t.pendingConflicts??[],version:(t.version??0)+1};}this.initialized=!0,this.logger.info("Sync bridge initialized",{namespace:this.config.agentdbNamespace,conflictStrategy:this.config.conflictStrategy,syncState:this.syncState});}catch(e){throw new v("Failed to initialize sync bridge","NOT_INITIALIZED",void 0,e)}}async syncToAgentDB(e){this.ensureInitialized();let t=Date.now(),r={success:true,direction:"to-agentdb",synced:0,created:0,updated:0,deleted:0,conflicts:0,errors:[],durationMs:0,timestamp:new Date().toISOString()};this.logger.info(`Starting sync to AgentDB: ${e.length} beads`);for(let i=0;i{let l=this.beadToKey(o),u=G([l,this.config.agentdbNamespace]);if(E.has(u))return {bead:o,key:l,existing:E.get(u)};let c=await this.agentDB.retrieve(l,this.config.agentdbNamespace);return E.set(u,c),{bead:o,key:l,existing:c}}),d=await Promise.all(a);for(let{bead:o,key:l,existing:u}of d)try{if(u){let p=G([o.id,o.content,u.key]),D=M.get(p);if(D===void 0&&(D=await this.detectConflict(o,u),M.set(p,D)),D&&!await this.resolveConflict(o,u)){r.conflicts++;continue}r.updated++;}else r.created++;await this.agentDB.store(l,this.beadToAgentDBValue(o),this.config.agentdbNamespace,this.buildMetadata(o));let c=G([l,this.config.agentdbNamespace]);E.delete(c),r.synced++;}catch(c){r.errors.push({id:o.id,error:c instanceof Error?c.message:String(c)}),this.logger.error(`Failed to sync bead ${o.id}`,{error:c});}}return this.syncState.lastSyncTime=r.timestamp,e.length>0&&(this.syncState.lastBeadId=e[e.length-1]?.id),await this.saveSyncState(),r.durationMs=Date.now()-t,r.success=r.errors.length===0&&r.conflicts===0,this.logger.info("Sync to AgentDB complete",{synced:r.synced,created:r.created,updated:r.updated,conflicts:r.conflicts,errors:r.errors.length,durationMs:r.durationMs}),r}async syncFromAgentDB(){this.ensureInitialized();let e=Date.now(),t=[];this.logger.info("Starting sync from AgentDB");try{let r=0,i=!0;for(;i;){let a=await this.agentDB.list(this.config.agentdbNamespace,this.config.batchSize,r);if(a.length===0){i=!1;continue}for(let d of a)if(d.key!=="_sync_state")try{let o=this.agentDBToBead(d);o&&t.push(o);}catch(o){this.logger.warn(`Failed to convert AgentDB entry to bead: ${d.key}`,{error:o instanceof Error?o.message:String(o)});}r+=a.length,i=a.length===this.config.batchSize;}this.syncState.lastSyncTime=new Date().toISOString(),await this.saveSyncState();let s=Date.now()-e;return this.logger.info("Sync from AgentDB complete",{beads:t.length,durationMs:s}),t}catch(r){throw new v("Failed to sync from AgentDB","SYNC_FAILED",void 0,r)}}async syncBidirectional(){this.ensureInitialized(),this.logger.info("Starting bidirectional sync");let e=await this.bdBridge.listBeads({after:this.syncState.lastSyncTime}),t=await this.syncToAgentDB(e),r=await this.syncFromAgentDB();return {toAgentDB:t,fromAgentDB:r}}getPendingConflicts(){return Array.from(this.conflicts.values()).filter(e=>e.resolution==="pending"||!e.resolution)}async resolveConflictManually(e,t,r){let i=this.conflicts.get(e);if(!i)throw new v(`No conflict found for bead: ${e}`,"VALIDATION_ERROR");let s=this.beadToKey(i.beadData);switch(t){case "beads":await this.agentDB.store(s,this.beadToAgentDBValue(i.beadData),this.config.agentdbNamespace,this.buildMetadata(i.beadData));break;case "agentdb":break;case "merged":if(!r)throw new v("Merged data required for merge resolution","VALIDATION_ERROR");let d={...i.beadData,...r};await this.agentDB.store(s,this.beadToAgentDBValue(d),this.config.agentdbNamespace,this.buildMetadata(d));break}i.resolution=t,i.resolvedAt=new Date().toISOString();let a=this.syncState.pendingConflicts.indexOf(e);a!==-1&&(this.syncState.pendingConflicts.splice(a,1),await this.saveSyncState()),this.logger.info(`Conflict resolved for bead ${e}`,{resolution:t});}getSyncState(){return {...this.syncState}}async getSyncStats(){return this.ensureInitialized(),{agentdbCount:(await this.agentDB.getNamespaceStats(this.config.agentdbNamespace)).count,lastSyncTime:this.syncState.lastSyncTime,pendingConflicts:this.syncState.pendingConflicts.length,syncVersion:this.syncState.version}}beadToKey(e){return `bead:${e.id}`}beadToAgentDBValue(e){let t={id:e.id,type:e.type,content:e.content,timestamp:e.timestamp,parentId:e.parentId,threadId:e.threadId,agentId:e.agentId,tags:e.tags,hash:e.hash};return this.config.preserveEmbeddings&&e.embedding&&(t.embedding=e.embedding),this.config.syncMetadata&&e.metadata&&(t.metadata=e.metadata),t}buildMetadata(e){return {beadType:e.type,threadId:e.threadId,agentId:e.agentId,syncedAt:new Date().toISOString(),syncVersion:this.syncState.version}}agentDBToBead(e){if(!e.value||typeof e.value!="object")return null;let t=e.value;return !t.id||!t.type||!t.content?null:{id:String(t.id),type:t.type,content:String(t.content),timestamp:t.timestamp,parentId:t.parentId,threadId:t.threadId,agentId:t.agentId,tags:t.tags,metadata:t.metadata,embedding:t.embedding,hash:t.hash}}async detectConflict(e,t){if(!t.value||typeof t.value!="object")return false;let r=t.value;if(r.content===e.content)return false;let i=e.timestamp?new Date(e.timestamp).getTime():0,s=t.updatedAt?new Date(t.updatedAt).getTime():0;return i>s?false:s>i&&r.content!==e.content}async resolveConflict(e,t){let r={beadId:e.id,beadData:e,agentdbData:t,conflictType:"update"};switch(this.config.conflictStrategy){case "beads-wins":return r.resolution="beads",this.conflicts.set(e.id,r),true;case "agentdb-wins":return r.resolution="agentdb",this.conflicts.set(e.id,r),false;case "newest-wins":{let i=e.timestamp?new Date(e.timestamp).getTime():0,s=t.updatedAt?new Date(t.updatedAt).getTime():0;return i>=s?(r.resolution="beads",this.conflicts.set(e.id,r),true):(r.resolution="agentdb",this.conflicts.set(e.id,r),false)}case "merge":{let i=t.value,s={...e,content:`${e.content} --- ${i.content}`,metadata:{...e.metadata,merged:true,mergedAt:new Date().toISOString()}};return r.beadData=s,r.resolution="merged",this.conflicts.set(e.id,r),true}case "manual":return r.resolution="pending",this.conflicts.set(e.id,r),this.syncState.pendingConflicts.push(e.id),false;default:return false}}async saveSyncState(){try{await this.agentDB.store("_sync_state",this.syncState,this.config.agentdbNamespace,{type:"sync-state"});}catch(e){this.logger.error("Failed to save sync state",{error:e instanceof Error?e.message:String(e)});}}ensureInitialized(){if(!this.initialized)throw new v("Sync bridge not initialized. Call initialize() first.","NOT_INITIALIZED")}isInitialized(){return this.initialized}getBeadsBridge(){return this.bdBridge}getCacheStats(){return {agentDBLookupCache:E.stats(),conflictCache:M.stats()}}clearCaches(){E.clear(),M.clear();}};function be(n,e,t){return new k(n,e,t)}export{ye as A,v as B,k as C,be as D,f as a,F as b,b as c,$ as d,V as e,B as f,te as g,re as h,ie as i,j,I as k,se as l,Q as m,h as n,z as o,oe as p,x as q,H as r,_ as s,Z as t,g as u,O as v,U as w,me as x,fe as y,pe as z};//# sourceMappingURL=chunk-IBKUMYUL.js.map //# sourceMappingURL=chunk-IBKUMYUL.js.map