coze-bridge 0.1.92-beta.5 → 0.1.92

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.
Files changed (2) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -88,7 +88,7 @@ WantedBy=${e}
88
88
  `},configPath(t){return vT(t.homeDir,".coze","bridge","task.xml")},async install(t){let n=`cmd.exe /c ${[`^"${t.nodeBin}^"`,`^"${t.entry}^"`,"--daemon",`>> ^"${t.logFile}^" 2>&1`].join(" ")}`;await bg("schtasks",["/Create","/SC","ONLOGON","/TN",Mo,"/TR",n,"/RU",t.userName,"/F"]),Pl.info("task scheduler entry created",{task:Mo,logFile:t.logFile})},async uninstall(t){await bg("schtasks",["/Delete","/TN",Mo,"/F"]).catch(e=>Pl.warn("schtasks /Delete failed (ignored)",{err:String(e)})),Pl.info("task scheduler entry removed",{task:Mo})}}});var xg={};Ni(xg,{buildContext:()=>AT,getSupervisor:()=>RT,launchdSupervisor:()=>xl,systemdSupervisor:()=>Ol,taskSchedulerSupervisor:()=>Cl});import{homedir as IT,userInfo as TT}from"node:os";function RT(t=process.platform){switch(t){case"darwin":return xl;case"linux":return Ol;case"win32":return Cl;default:throw new Error(`unsupported platform for OS supervisor: ${t}`)}}function bT(){let t={};for(let e of kT){let n=process.env[e];n&&(t[e]=n)}return t}function AT(){let t=F();return{nodeBin:process.execPath,entry:vl(t),logFile:t.logFile,homeDir:IT(),userName:TT().username,isRoot:process.getuid?.()===0,env:bT()}}var kT,Og=ve(()=>{"use strict";le();bo();Tg();kg();Ag();kT=["PATH","HOME","HTTP_PROXY","HTTPS_PROXY","NO_PROXY","ALL_PROXY","http_proxy","https_proxy","no_proxy","all_proxy","NODE_EXTRA_CA_CERTS"]});L();tn();var Kl=b("acp-installer-warmup"),mm=["claude-code","codex"];async function Xl(t={}){let e=t.ensure??en,r=(await Promise.allSettled(mm.map(async i=>{let s=await e(i);Kl.info("acp wrapper warmup ok",{framework:i,path:s})}))).filter(i=>i.status==="rejected");r.length>0&&Kl.warn("acp wrapper warmup partial failure (\u5C06\u5728\u4E0B\u6B21 createAgent \u65F6\u91CD\u8BD5\u5E76\u629B\u9519\u7ED9\u7528\u6237)",{failedCount:r.length,reasons:r.map(i=>i.reason instanceof Error?i.reason.message:String(i.reason))})}At();L();import{readdir as Am}from"node:fs/promises";import{mkdir as rd,writeFile as id}from"node:fs/promises";import{join as Jo}from"node:path";var bm={"claude-code":"CLAUDE.md",codex:"AGENTS.md",openclaw:"SOUL.md"};async function Ln(t,e,n){await rd(t,{recursive:!0});let r=bm[e],i=Jo(t,r);return await id(i,n??"","utf8"),i}async function sd(t){let e=Jo(t,".claude");await rd(e,{recursive:!0});let n=Jo(e,"settings.local.json"),r=JSON.stringify({permissions:{defaultMode:"bypassPermissions"}},null,2);return await id(n,r,"utf8"),n}var Oe=b("agent-detail-sync"),xm=6e4,Om=5*6e4,Ki=class{constructor(e){this.opts=e}opts;retryQueue=new Map;async syncAll(e){let n=this.opts.paths.agentsRoot,r;try{r=await Am(n)}catch(i){Oe.info("agents dir not found, skip detail sync",{root:n,err:String(i)});return}Oe.info("starting detail sync",{reason:e,count:r.length}),await Promise.allSettled(r.map(async i=>{let s=await me(i,this.opts.paths).catch(()=>null);if(s){if(s.disconnectedAt){Oe.debug("detail sync: skip disconnected agent",{agentId:i});return}try{await this.syncOne(i,s)}catch(o){Oe.warn("detail sync failed for agent, skipping",{agentId:i,err:String(o)})}}})),Oe.info("detail sync done",{reason:e})}async retryPending(){if(this.retryQueue.size===0)return;let e=Date.now(),n=[];for(let[r,i]of this.retryQueue)e>=i.dueAt&&n.push(r);if(n.length!==0){Oe.info("retrying pending detail syncs",{count:n.length});for(let r of n)try{await this.syncOne(r)}catch(i){Oe.debug("detail sync retry still failing, will try again",{agentId:r,err:String(i)})}}}async syncOne(e,n){let r=n??await me(e,this.opts.paths);if(!r){Oe.info("detail sync: agent config missing, skip",{agentId:e});return}let i;try{i=await this.opts.sendDetail({_meta:{cozeAgentId:e}}),this.retryQueue.delete(e)}catch(a){Oe.warn("detail RPC failed, using local data",{agentId:e,err:String(a)});let c=this.retryQueue.get(e),l=c?Math.min(c.currentDelay*2,Om):xm;this.retryQueue.set(e,{dueAt:Date.now()+l,currentDelay:l});return}if(i.agentId&&i.agentId!==e){Oe.warn("detail response agentId mismatch, ignoring",{agentId:e,responseAgentId:i.agentId});return}let s=!1,o=!1;if(i.agentName&&i.agentName!==r.agentName&&(r.agentName=i.agentName,s=!0),i.description!==void 0&&i.description!==r.description&&(r.description=i.description,s=!0),i.cozeIdentity&&i.cozeIdentity!==r.cozeIdentity&&(r.cozeIdentity=i.cozeIdentity,s=!0,o=!0),i.deployType&&Oe.info("detail.deployType",{agentId:e,deployType:i.deployType}),!s){Oe.debug("detail sync: no diff",{agentId:e});return}await Ae(r,this.opts.paths),Oe.info("detail sync: config updated",{agentId:e,identityChanged:o,agentName:r.agentName}),o&&(await Ln(r.workspace,r.framework,r.cozeIdentity),this.opts.handlers.reloadAgentSessionsPublic(e,"detail-sync"))}};var vf=ht(Bd(),1);import{lstat as lc,mkdir as dc,readFile as yf,readdir as r_,rm as i_,stat as s_,writeFile as uc}from"node:fs/promises";import{dirname as o_,join as at,normalize as a_,relative as pc,resolve as fc,sep as _f}from"node:path";import{Readable as Ef}from"node:stream";import{pipeline as Sf}from"node:stream/promises";import Ym from"events";import xe from"fs";import{EventEmitter as Va}from"node:events";import _u from"node:stream";import{StringDecoder as Qm}from"node:string_decoder";import vu from"node:path";import Vn from"node:fs";import{dirname as fw,parse as hw}from"path";import{EventEmitter as Sw}from"events";import Aa from"assert";import{Buffer as hn}from"buffer";import*as Hd from"zlib";import vw from"zlib";import{posix as zn}from"node:path";import{basename as Zw}from"node:path";import As from"fs";import it from"fs";import Kd from"path";import{win32 as oy}from"node:path";import ru from"path";import Mu from"node:fs";import Iy from"node:assert";import{randomBytes as Bu}from"node:crypto";import B from"node:fs";import ie from"node:path";import Uu from"fs";import Ms from"node:fs";import Jr from"node:path";import De from"node:fs";import Oy from"node:fs/promises";import Ps from"node:path";import{join as Ku}from"node:path";import Ce from"node:fs";import Qu from"node:path";var Km=Object.defineProperty,Xm=(t,e)=>{for(var n in e)Km(t,n,{get:e[n],enumerable:!0})},Ud=typeof process=="object"&&process?process:{stdout:null,stderr:null},ew=t=>!!t&&typeof t=="object"&&(t instanceof mn||t instanceof _u||tw(t)||nw(t)),tw=t=>!!t&&typeof t=="object"&&t instanceof Va&&typeof t.pipe=="function"&&t.pipe!==_u.Writable.prototype.pipe,nw=t=>!!t&&typeof t=="object"&&t instanceof Va&&typeof t.write=="function"&&typeof t.end=="function",mt=Symbol("EOF"),wt=Symbol("maybeEmitEnd"),Ot=Symbol("emittedEnd"),ts=Symbol("emittingEnd"),Pr=Symbol("emittedError"),ns=Symbol("closed"),zd=Symbol("read"),rs=Symbol("flush"),$d=Symbol("flushChunk"),je=Symbol("encoding"),Un=Symbol("decoder"),de=Symbol("flowing"),Cr=Symbol("paused"),jn=Symbol("resume"),ue=Symbol("buffer"),Re=Symbol("pipes"),fe=Symbol("bufferLength"),ea=Symbol("bufferPush"),is=Symbol("bufferShift"),Ie=Symbol("objectMode"),Q=Symbol("destroyed"),ta=Symbol("error"),na=Symbol("emitData"),Gd=Symbol("emitEnd"),ra=Symbol("emitEnd2"),et=Symbol("async"),ia=Symbol("abort"),ss=Symbol("aborted"),Dr=Symbol("signal"),rn=Symbol("dataListeners"),Pe=Symbol("discarded"),Nr=t=>Promise.resolve().then(t),rw=t=>t(),iw=t=>t==="end"||t==="finish"||t==="prefinish",sw=t=>t instanceof ArrayBuffer||!!t&&typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,ow=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),Eu=class{src;dest;opts;ondrain;constructor(t,e,n){this.src=t,this.dest=e,this.opts=n,this.ondrain=()=>t[jn](),this.dest.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(t){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},aw=class extends Eu{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(t,e,n){super(t,e,n),this.proxyErrors=r=>this.dest.emit("error",r),t.on("error",this.proxyErrors)}},cw=t=>!!t.objectMode,lw=t=>!t.objectMode&&!!t.encoding&&t.encoding!=="buffer",mn=class extends Va{[de]=!1;[Cr]=!1;[Re]=[];[ue]=[];[Ie];[je];[et];[Un];[mt]=!1;[Ot]=!1;[ts]=!1;[ns]=!1;[Pr]=null;[fe]=0;[Q]=!1;[Dr];[ss]=!1;[rn]=0;[Pe]=!1;writable=!0;readable=!0;constructor(...t){let e=t[0]||{};if(super(),e.objectMode&&typeof e.encoding=="string")throw new TypeError("Encoding and objectMode may not be used together");cw(e)?(this[Ie]=!0,this[je]=null):lw(e)?(this[je]=e.encoding,this[Ie]=!1):(this[Ie]=!1,this[je]=null),this[et]=!!e.async,this[Un]=this[je]?new Qm(this[je]):null,e&&e.debugExposeBuffer===!0&&Object.defineProperty(this,"buffer",{get:()=>this[ue]}),e&&e.debugExposePipes===!0&&Object.defineProperty(this,"pipes",{get:()=>this[Re]});let{signal:n}=e;n&&(this[Dr]=n,n.aborted?this[ia]():n.addEventListener("abort",()=>this[ia]()))}get bufferLength(){return this[fe]}get encoding(){return this[je]}set encoding(t){throw new Error("Encoding must be set at instantiation time")}setEncoding(t){throw new Error("Encoding must be set at instantiation time")}get objectMode(){return this[Ie]}set objectMode(t){throw new Error("objectMode must be set at instantiation time")}get async(){return this[et]}set async(t){this[et]=this[et]||!!t}[ia](){this[ss]=!0,this.emit("abort",this[Dr]?.reason),this.destroy(this[Dr]?.reason)}get aborted(){return this[ss]}set aborted(t){}write(t,e,n){if(this[ss])return!1;if(this[mt])throw new Error("write after end");if(this[Q])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof e=="function"&&(n=e,e="utf8"),e||(e="utf8");let r=this[et]?Nr:rw;if(!this[Ie]&&!Buffer.isBuffer(t)){if(ow(t))t=Buffer.from(t.buffer,t.byteOffset,t.byteLength);else if(sw(t))t=Buffer.from(t);else if(typeof t!="string")throw new Error("Non-contiguous data written to non-objectMode stream")}return this[Ie]?(this[de]&&this[fe]!==0&&this[rs](!0),this[de]?this.emit("data",t):this[ea](t),this[fe]!==0&&this.emit("readable"),n&&r(n),this[de]):t.length?(typeof t=="string"&&!(e===this[je]&&!this[Un]?.lastNeed)&&(t=Buffer.from(t,e)),Buffer.isBuffer(t)&&this[je]&&(t=this[Un].write(t)),this[de]&&this[fe]!==0&&this[rs](!0),this[de]?this.emit("data",t):this[ea](t),this[fe]!==0&&this.emit("readable"),n&&r(n),this[de]):(this[fe]!==0&&this.emit("readable"),n&&r(n),this[de])}read(t){if(this[Q])return null;if(this[Pe]=!1,this[fe]===0||t===0||t&&t>this[fe])return this[wt](),null;this[Ie]&&(t=null),this[ue].length>1&&!this[Ie]&&(this[ue]=[this[je]?this[ue].join(""):Buffer.concat(this[ue],this[fe])]);let e=this[zd](t||null,this[ue][0]);return this[wt](),e}[zd](t,e){if(this[Ie])this[is]();else{let n=e;t===n.length||t===null?this[is]():typeof n=="string"?(this[ue][0]=n.slice(t),e=n.slice(0,t),this[fe]-=t):(this[ue][0]=n.subarray(t),e=n.subarray(0,t),this[fe]-=t)}return this.emit("data",e),!this[ue].length&&!this[mt]&&this.emit("drain"),e}end(t,e,n){return typeof t=="function"&&(n=t,t=void 0),typeof e=="function"&&(n=e,e="utf8"),t!==void 0&&this.write(t,e),n&&this.once("end",n),this[mt]=!0,this.writable=!1,(this[de]||!this[Cr])&&this[wt](),this}[jn](){this[Q]||(!this[rn]&&!this[Re].length&&(this[Pe]=!0),this[Cr]=!1,this[de]=!0,this.emit("resume"),this[ue].length?this[rs]():this[mt]?this[wt]():this.emit("drain"))}resume(){return this[jn]()}pause(){this[de]=!1,this[Cr]=!0,this[Pe]=!1}get destroyed(){return this[Q]}get flowing(){return this[de]}get paused(){return this[Cr]}[ea](t){this[Ie]?this[fe]+=1:this[fe]+=t.length,this[ue].push(t)}[is](){return this[Ie]?this[fe]-=1:this[fe]-=this[ue][0].length,this[ue].shift()}[rs](t=!1){do;while(this[$d](this[is]())&&this[ue].length);!t&&!this[ue].length&&!this[mt]&&this.emit("drain")}[$d](t){return this.emit("data",t),this[de]}pipe(t,e){if(this[Q])return t;this[Pe]=!1;let n=this[Ot];return e=e||{},t===Ud.stdout||t===Ud.stderr?e.end=!1:e.end=e.end!==!1,e.proxyErrors=!!e.proxyErrors,n?e.end&&t.end():(this[Re].push(e.proxyErrors?new aw(this,t,e):new Eu(this,t,e)),this[et]?Nr(()=>this[jn]()):this[jn]()),t}unpipe(t){let e=this[Re].find(n=>n.dest===t);e&&(this[Re].length===1?(this[de]&&this[rn]===0&&(this[de]=!1),this[Re]=[]):this[Re].splice(this[Re].indexOf(e),1),e.unpipe())}addListener(t,e){return this.on(t,e)}on(t,e){let n=super.on(t,e);if(t==="data")this[Pe]=!1,this[rn]++,!this[Re].length&&!this[de]&&this[jn]();else if(t==="readable"&&this[fe]!==0)super.emit("readable");else if(iw(t)&&this[Ot])super.emit(t),this.removeAllListeners(t);else if(t==="error"&&this[Pr]){let r=e;this[et]?Nr(()=>r.call(this,this[Pr])):r.call(this,this[Pr])}return n}removeListener(t,e){return this.off(t,e)}off(t,e){let n=super.off(t,e);return t==="data"&&(this[rn]=this.listeners("data").length,this[rn]===0&&!this[Pe]&&!this[Re].length&&(this[de]=!1)),n}removeAllListeners(t){let e=super.removeAllListeners(t);return(t==="data"||t===void 0)&&(this[rn]=0,!this[Pe]&&!this[Re].length&&(this[de]=!1)),e}get emittedEnd(){return this[Ot]}[wt](){!this[ts]&&!this[Ot]&&!this[Q]&&this[ue].length===0&&this[mt]&&(this[ts]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[ns]&&this.emit("close"),this[ts]=!1)}emit(t,...e){let n=e[0];if(t!=="error"&&t!=="close"&&t!==Q&&this[Q])return!1;if(t==="data")return!this[Ie]&&!n?!1:this[et]?(Nr(()=>this[na](n)),!0):this[na](n);if(t==="end")return this[Gd]();if(t==="close"){if(this[ns]=!0,!this[Ot]&&!this[Q])return!1;let i=super.emit("close");return this.removeAllListeners("close"),i}else if(t==="error"){this[Pr]=n,super.emit(ta,n);let i=!this[Dr]||this.listeners("error").length?super.emit("error",n):!1;return this[wt](),i}else if(t==="resume"){let i=super.emit("resume");return this[wt](),i}else if(t==="finish"||t==="prefinish"){let i=super.emit(t);return this.removeAllListeners(t),i}let r=super.emit(t,...e);return this[wt](),r}[na](t){for(let n of this[Re])n.dest.write(t)===!1&&this.pause();let e=this[Pe]?!1:super.emit("data",t);return this[wt](),e}[Gd](){return this[Ot]?!1:(this[Ot]=!0,this.readable=!1,this[et]?(Nr(()=>this[ra]()),!0):this[ra]())}[ra](){if(this[Un]){let e=this[Un].end();if(e){for(let n of this[Re])n.dest.write(e);this[Pe]||super.emit("data",e)}}for(let e of this[Re])e.end();let t=super.emit("end");return this.removeAllListeners("end"),t}async collect(){let t=Object.assign([],{dataLength:0});this[Ie]||(t.dataLength=0);let e=this.promise();return this.on("data",n=>{t.push(n),this[Ie]||(t.dataLength+=n.length)}),await e,t}async concat(){if(this[Ie])throw new Error("cannot concat in objectMode");let t=await this.collect();return this[je]?t.join(""):Buffer.concat(t,t.dataLength)}async promise(){return new Promise((t,e)=>{this.on(Q,()=>e(new Error("stream destroyed"))),this.on("error",n=>e(n)),this.on("end",()=>t())})}[Symbol.asyncIterator](){this[Pe]=!1;let t=!1,e=async()=>(this.pause(),t=!0,{value:void 0,done:!0});return{next:()=>{if(t)return e();let n=this.read();if(n!==null)return Promise.resolve({done:!1,value:n});if(this[mt])return e();let r,i,s=l=>{this.off("data",o),this.off("end",a),this.off(Q,c),e(),i(l)},o=l=>{this.off("error",s),this.off("end",a),this.off(Q,c),this.pause(),r({value:l,done:!!this[mt]})},a=()=>{this.off("error",s),this.off("data",o),this.off(Q,c),e(),r({done:!0,value:void 0})},c=()=>s(new Error("stream destroyed"));return new Promise((l,d)=>{i=d,r=l,this.once(Q,c),this.once("error",s),this.once("end",a),this.once("data",o)})},throw:e,return:e,[Symbol.asyncIterator](){return this},[Symbol.asyncDispose]:async()=>{}}}[Symbol.iterator](){this[Pe]=!1;let t=!1,e=()=>(this.pause(),this.off(ta,e),this.off(Q,e),this.off("end",e),t=!0,{done:!0,value:void 0}),n=()=>{if(t)return e();let r=this.read();return r===null?e():{done:!1,value:r}};return this.once("end",e),this.once(ta,e),this.once(Q,e),{next:n,throw:e,return:e,[Symbol.iterator](){return this},[Symbol.dispose]:()=>{}}}destroy(t){if(this[Q])return t?this.emit("error",t):this.emit(Q),this;this[Q]=!0,this[Pe]=!0,this[ue].length=0,this[fe]=0;let e=this;return typeof e.close=="function"&&!this[ns]&&e.close(),t?this.emit("error",t):this.emit(Q),this}static get isStream(){return ew}},dw=xe.writev,zt=Symbol("_autoClose"),Je=Symbol("_close"),Lr=Symbol("_ended"),$=Symbol("_fd"),sa=Symbol("_finished"),St=Symbol("_flags"),oa=Symbol("_flush"),ka=Symbol("_handleChunk"),ba=Symbol("_makeBuf"),qr=Symbol("_mode"),os=Symbol("_needDrain"),Zn=Symbol("_onerror"),Kn=Symbol("_onopen"),aa=Symbol("_onread"),Wn=Symbol("_onwrite"),$t=Symbol("_open"),Ve=Symbol("_path"),Lt=Symbol("_pos"),nt=Symbol("_queue"),qn=Symbol("_read"),ca=Symbol("_readSize"),Et=Symbol("_reading"),Fr=Symbol("_remain"),la=Symbol("_size"),ms=Symbol("_write"),sn=Symbol("_writing"),ws=Symbol("_defaultFlag"),fn=Symbol("_errored"),Ja=class extends mn{[fn]=!1;[$];[Ve];[ca];[Et]=!1;[la];[Fr];[zt];constructor(t,e){if(e=e||{},super(e),this.readable=!0,this.writable=!1,typeof t!="string")throw new TypeError("path must be a string");this[fn]=!1,this[$]=typeof e.fd=="number"?e.fd:void 0,this[Ve]=t,this[ca]=e.readSize||16*1024*1024,this[Et]=!1,this[la]=typeof e.size=="number"?e.size:1/0,this[Fr]=this[la],this[zt]=typeof e.autoClose=="boolean"?e.autoClose:!0,typeof this[$]=="number"?this[qn]():this[$t]()}get fd(){return this[$]}get path(){return this[Ve]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[$t](){xe.open(this[Ve],"r",(t,e)=>this[Kn](t,e))}[Kn](t,e){t?this[Zn](t):(this[$]=e,this.emit("open",e),this[qn]())}[ba](){return Buffer.allocUnsafe(Math.min(this[ca],this[Fr]))}[qn](){if(!this[Et]){this[Et]=!0;let t=this[ba]();if(t.length===0)return process.nextTick(()=>this[aa](null,0,t));xe.read(this[$],t,0,t.length,null,(e,n,r)=>this[aa](e,n,r))}}[aa](t,e,n){this[Et]=!1,t?this[Zn](t):this[ka](e,n)&&this[qn]()}[Je](){if(this[zt]&&typeof this[$]=="number"){let t=this[$];this[$]=void 0,xe.close(t,e=>e?this.emit("error",e):this.emit("close"))}}[Zn](t){this[Et]=!0,this[Je](),this.emit("error",t)}[ka](t,e){let n=!1;return this[Fr]-=t,t>0&&(n=super.write(t<e.length?e.subarray(0,t):e)),(t===0||this[Fr]<=0)&&(n=!1,this[Je](),super.end()),n}emit(t,...e){switch(t){case"prefinish":case"finish":return!1;case"drain":return typeof this[$]=="number"&&this[qn](),!1;case"error":return this[fn]?!1:(this[fn]=!0,super.emit(t,...e));default:return super.emit(t,...e)}}},uw=class extends Ja{[$t](){let t=!0;try{this[Kn](null,xe.openSync(this[Ve],"r")),t=!1}finally{t&&this[Je]()}}[qn](){let t=!0;try{if(!this[Et]){this[Et]=!0;do{let e=this[ba](),n=e.length===0?0:xe.readSync(this[$],e,0,e.length,null);if(!this[ka](n,e))break}while(!0);this[Et]=!1}t=!1}finally{t&&this[Je]()}}[Je](){if(this[zt]&&typeof this[$]=="number"){let t=this[$];this[$]=void 0,xe.closeSync(t),this.emit("close")}}},Cs=class extends Ym{readable=!1;writable=!0;[fn]=!1;[sn]=!1;[Lr]=!1;[nt]=[];[os]=!1;[Ve];[qr];[zt];[$];[ws];[St];[sa]=!1;[Lt];constructor(t,e){e=e||{},super(e),this[Ve]=t,this[$]=typeof e.fd=="number"?e.fd:void 0,this[qr]=e.mode===void 0?438:e.mode,this[Lt]=typeof e.start=="number"?e.start:void 0,this[zt]=typeof e.autoClose=="boolean"?e.autoClose:!0;let n=this[Lt]!==void 0?"r+":"w";this[ws]=e.flags===void 0,this[St]=e.flags===void 0?n:e.flags,this[$]===void 0&&this[$t]()}emit(t,...e){if(t==="error"){if(this[fn])return!1;this[fn]=!0}return super.emit(t,...e)}get fd(){return this[$]}get path(){return this[Ve]}[Zn](t){this[Je](),this[sn]=!0,this.emit("error",t)}[$t](){xe.open(this[Ve],this[St],this[qr],(t,e)=>this[Kn](t,e))}[Kn](t,e){this[ws]&&this[St]==="r+"&&t&&t.code==="ENOENT"?(this[St]="w",this[$t]()):t?this[Zn](t):(this[$]=e,this.emit("open",e),this[sn]||this[oa]())}end(t,e){return t&&this.write(t,e),this[Lr]=!0,!this[sn]&&!this[nt].length&&typeof this[$]=="number"&&this[Wn](null,0),this}write(t,e){return typeof t=="string"&&(t=Buffer.from(t,e)),this[Lr]?(this.emit("error",new Error("write() after end()")),!1):this[$]===void 0||this[sn]||this[nt].length?(this[nt].push(t),this[os]=!0,!1):(this[sn]=!0,this[ms](t),!0)}[ms](t){xe.write(this[$],t,0,t.length,this[Lt],(e,n)=>this[Wn](e,n))}[Wn](t,e){t?this[Zn](t):(this[Lt]!==void 0&&typeof e=="number"&&(this[Lt]+=e),this[nt].length?this[oa]():(this[sn]=!1,this[Lr]&&!this[sa]?(this[sa]=!0,this[Je](),this.emit("finish")):this[os]&&(this[os]=!1,this.emit("drain"))))}[oa](){if(this[nt].length===0)this[Lr]&&this[Wn](null,0);else if(this[nt].length===1)this[ms](this[nt].pop());else{let t=this[nt];this[nt]=[],dw(this[$],t,this[Lt],(e,n)=>this[Wn](e,n))}}[Je](){if(this[zt]&&typeof this[$]=="number"){let t=this[$];this[$]=void 0,xe.close(t,e=>e?this.emit("error",e):this.emit("close"))}}},Su=class extends Cs{[$t](){let t;if(this[ws]&&this[St]==="r+")try{t=xe.openSync(this[Ve],this[St],this[qr])}catch(e){if(e?.code==="ENOENT")return this[St]="w",this[$t]();throw e}else t=xe.openSync(this[Ve],this[St],this[qr]);this[Kn](null,t)}[Je](){if(this[zt]&&typeof this[$]=="number"){let t=this[$];this[$]=void 0,xe.closeSync(t),this.emit("close")}}[ms](t){let e=!0;try{this[Wn](null,xe.writeSync(this[$],t,0,t.length,this[Lt])),e=!1}finally{if(e)try{this[Je]()}catch{}}}},pw=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"],["onentry","onReadEntry"]]),gw=t=>!!t.sync&&!!t.file,mw=t=>!t.sync&&!!t.file,ww=t=>!!t.sync&&!t.file,yw=t=>!t.sync&&!t.file,_w=t=>!!t.file,Ew=t=>pw.get(t)||t,Za=(t={})=>{if(!t)return{};let e={};for(let[n,r]of Object.entries(t)){let i=Ew(n);e[i]=r}return e.chmod===void 0&&e.noChmod===!1&&(e.chmod=!0),delete e.noChmod,e},ti=(t,e,n,r,i)=>Object.assign((s=[],o,a)=>{Array.isArray(s)&&(o=s,s={}),typeof o=="function"&&(a=o,o=void 0),o=o?Array.from(o):[];let c=Za(s);if(i?.(c,o),gw(c)){if(typeof a=="function")throw new TypeError("callback not supported for sync tar functions");return t(c,o)}else if(mw(c)){let l=e(c,o);return a?l.then(()=>a(),a):l}else if(ww(c)){if(typeof a=="function")throw new TypeError("callback not supported for sync tar functions");return n(c,o)}else if(yw(c)){if(typeof a=="function")throw new TypeError("callback only supported with file option");return r(c,o)}throw new Error("impossible options??")},{syncFile:t,asyncFile:e,syncNoFile:n,asyncNoFile:r,validate:i}),Iw=vw.constants||{ZLIB_VERNUM:4736},ot=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},Iw)),Tw=hn.concat,jd=Object.getOwnPropertyDescriptor(hn,"concat"),Rw=t=>t,da=jd?.writable===!0||jd?.set!==void 0?t=>{hn.concat=t?Rw:Tw}:t=>{},pn=Symbol("_superWrite"),as=class extends Error{code;errno;constructor(t,e){super("zlib: "+t.message,{cause:t}),this.code=t.code,this.errno=t.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+t.message,Error.captureStackTrace(this,e??this.constructor)}get name(){return"ZlibError"}},ua=Symbol("flushFlag"),Ka=class extends mn{#e=!1;#n=!1;#r;#s;#i;#t;#o;get sawError(){return this.#e}get handle(){return this.#t}get flushFlag(){return this.#r}constructor(t,e){if(!t||typeof t!="object")throw new TypeError("invalid options for ZlibBase constructor");if(super(t),this.#r=t.flush??0,this.#s=t.finishFlush??0,this.#i=t.fullFlushFlag??0,typeof Hd[e]!="function")throw new TypeError("Compression method not supported: "+e);try{this.#t=new Hd[e](t)}catch(n){throw new as(n,this.constructor)}this.#o=n=>{this.#e||(this.#e=!0,this.close(),this.emit("error",n))},this.#t?.on("error",n=>this.#o(new as(n))),this.once("end",()=>this.close)}close(){this.#t&&(this.#t.close(),this.#t=void 0,this.emit("close"))}reset(){if(!this.#e)return Aa(this.#t,"zlib binding closed"),this.#t.reset?.()}flush(t){this.ended||(typeof t!="number"&&(t=this.#i),this.write(Object.assign(hn.alloc(0),{[ua]:t})))}end(t,e,n){return typeof t=="function"&&(n=t,e=void 0,t=void 0),typeof e=="function"&&(n=e,e=void 0),t&&(e?this.write(t,e):this.write(t)),this.flush(this.#s),this.#n=!0,super.end(n)}get ended(){return this.#n}[pn](t){return super.write(t)}write(t,e,n){if(typeof e=="function"&&(n=e,e="utf8"),typeof t=="string"&&(t=hn.from(t,e)),this.#e)return;Aa(this.#t,"zlib binding closed");let r=this.#t._handle,i=r.close;r.close=()=>{};let s=this.#t.close;this.#t.close=()=>{},da(!0);let o;try{let c=typeof t[ua]=="number"?t[ua]:this.#r;o=this.#t._processChunk(t,c),da(!1)}catch(c){da(!1),this.#o(new as(c,this.write))}finally{this.#t&&(this.#t._handle=r,r.close=i,this.#t.close=s,this.#t.removeAllListeners("error"))}this.#t&&this.#t.on("error",c=>this.#o(new as(c,this.write)));let a;if(o)if(Array.isArray(o)&&o.length>0){let c=o[0];a=this[pn](hn.from(c));for(let l=1;l<o.length;l++)a=this[pn](o[l])}else a=this[pn](hn.from(o));return n&&n(),a}},Iu=class extends Ka{#e;#n;constructor(t,e){t=t||{},t.flush=t.flush||ot.Z_NO_FLUSH,t.finishFlush=t.finishFlush||ot.Z_FINISH,t.fullFlushFlag=ot.Z_FULL_FLUSH,super(t,e),this.#e=t.level,this.#n=t.strategy}params(t,e){if(!this.sawError){if(!this.handle)throw new Error("cannot switch params when binding is closed");if(!this.handle.params)throw new Error("not supported in this implementation");if(this.#e!==t||this.#n!==e){this.flush(ot.Z_SYNC_FLUSH),Aa(this.handle,"zlib binding closed");let n=this.handle.flush;this.handle.flush=(r,i)=>{typeof r=="function"&&(i=r,r=this.flushFlag),this.flush(r),i?.()};try{this.handle.params(t,e)}finally{this.handle.flush=n}this.handle&&(this.#e=t,this.#n=e)}}}},kw=class extends Iu{#e;constructor(t){super(t,"Gzip"),this.#e=t&&!!t.portable}[pn](t){return this.#e?(this.#e=!1,t[9]=255,super[pn](t)):super[pn](t)}},bw=class extends Iu{constructor(t){super(t,"Unzip")}},Tu=class extends Ka{constructor(t,e){t=t||{},t.flush=t.flush||ot.BROTLI_OPERATION_PROCESS,t.finishFlush=t.finishFlush||ot.BROTLI_OPERATION_FINISH,t.fullFlushFlag=ot.BROTLI_OPERATION_FLUSH,super(t,e)}},Aw=class extends Tu{constructor(t){super(t,"BrotliCompress")}},xw=class extends Tu{constructor(t){super(t,"BrotliDecompress")}},Ru=class extends Ka{constructor(t,e){t=t||{},t.flush=t.flush||ot.ZSTD_e_continue,t.finishFlush=t.finishFlush||ot.ZSTD_e_end,t.fullFlushFlag=ot.ZSTD_e_flush,super(t,e)}},Ow=class extends Ru{constructor(t){super(t,"ZstdCompress")}},Pw=class extends Ru{constructor(t){super(t,"ZstdDecompress")}},Cw=(t,e)=>{if(Number.isSafeInteger(t))t<0?Nw(t,e):Dw(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Dw=(t,e)=>{e[0]=128;for(var n=e.length;n>1;n--)e[n-1]=t&255,t=Math.floor(t/256)},Nw=(t,e)=>{e[0]=255;var n=!1;t=t*-1;for(var r=e.length;r>1;r--){var i=t&255;t=Math.floor(t/256),n?e[r-1]=ku(i):i===0?e[r-1]=0:(n=!0,e[r-1]=bu(i))}},Lw=t=>{let e=t[0],n=e===128?Mw(t.subarray(1,t.length)):e===255?Fw(t):null;if(n===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(n))throw Error("parsed number outside of javascript safe integer range");return n},Fw=t=>{for(var e=t.length,n=0,r=!1,i=e-1;i>-1;i--){var s=Number(t[i]),o;r?o=ku(s):s===0?o=s:(r=!0,o=bu(s)),o!==0&&(n-=o*Math.pow(256,e-i-1))}return n},Mw=t=>{for(var e=t.length,n=0,r=e-1;r>-1;r--){var i=Number(t[r]);i!==0&&(n+=i*Math.pow(256,e-r-1))}return n},ku=t=>(255^t)&255,bu=t=>(255^t)+1&255,Bw={};Xm(Bw,{code:()=>Xa,isCode:()=>ys,isName:()=>Uw,name:()=>Ds});var ys=t=>Ds.has(t),Uw=t=>Xa.has(t),Ds=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]),Xa=new Map(Array.from(Ds).map(t=>[t[1],t[0]])),gn=class{cksumValid=!1;needPax=!1;nullBlock=!1;block;path;mode;uid;gid;size;cksum;#e="Unsupported";linkpath;uname;gname;devmaj=0;devmin=0;atime;ctime;mtime;charset;comment;constructor(t,e=0,n,r){Buffer.isBuffer(t)?this.decode(t,e||0,n,r):t&&this.#n(t)}decode(t,e,n,r){if(e||(e=0),!t||!(t.length>=e+512))throw new Error("need 512 bytes for header");this.path=n?.path??on(t,e,100),this.mode=n?.mode??r?.mode??Ft(t,e+100,8),this.uid=n?.uid??r?.uid??Ft(t,e+108,8),this.gid=n?.gid??r?.gid??Ft(t,e+116,8),this.size=n?.size??r?.size??Ft(t,e+124,12),this.mtime=n?.mtime??r?.mtime??fa(t,e+136,12),this.cksum=Ft(t,e+148,12),r&&this.#n(r,!0),n&&this.#n(n);let i=on(t,e+156,1);if(ys(i)&&(this.#e=i||"0"),this.#e==="0"&&this.path.slice(-1)==="/"&&(this.#e="5"),this.#e==="5"&&(this.size=0),this.linkpath=on(t,e+157,100),t.subarray(e+257,e+265).toString()==="ustar\x0000")if(this.uname=n?.uname??r?.uname??on(t,e+265,32),this.gname=n?.gname??r?.gname??on(t,e+297,32),this.devmaj=n?.devmaj??r?.devmaj??Ft(t,e+329,8)??0,this.devmin=n?.devmin??r?.devmin??Ft(t,e+337,8)??0,t[e+475]!==0){let o=on(t,e+345,155);this.path=o+"/"+this.path}else{let o=on(t,e+345,130);o&&(this.path=o+"/"+this.path),this.atime=n?.atime??r?.atime??fa(t,e+476,12),this.ctime=n?.ctime??r?.ctime??fa(t,e+488,12)}let s=256;for(let o=e;o<e+148;o++)s+=t[o];for(let o=e+156;o<e+512;o++)s+=t[o];this.cksumValid=s===this.cksum,this.cksum===void 0&&s===256&&(this.nullBlock=!0)}#n(t,e=!1){Object.assign(this,Object.fromEntries(Object.entries(t).filter(([n,r])=>!(r==null||n==="path"&&e||n==="linkpath"&&e||n==="global"))))}encode(t,e=0){if(t||(t=this.block=Buffer.alloc(512)),this.#e==="Unsupported"&&(this.#e="0"),!(t.length>=e+512))throw new Error("need 512 bytes for header");let n=this.ctime||this.atime?130:155,r=zw(this.path||"",n),i=r[0],s=r[1];this.needPax=!!r[2],this.needPax=an(t,e,100,i)||this.needPax,this.needPax=Mt(t,e+100,8,this.mode)||this.needPax,this.needPax=Mt(t,e+108,8,this.uid)||this.needPax,this.needPax=Mt(t,e+116,8,this.gid)||this.needPax,this.needPax=Mt(t,e+124,12,this.size)||this.needPax,this.needPax=ha(t,e+136,12,this.mtime)||this.needPax,t[e+156]=Number(this.#e.codePointAt(0)),this.needPax=an(t,e+157,100,this.linkpath)||this.needPax,t.write("ustar\x0000",e+257,8),this.needPax=an(t,e+265,32,this.uname)||this.needPax,this.needPax=an(t,e+297,32,this.gname)||this.needPax,this.needPax=Mt(t,e+329,8,this.devmaj)||this.needPax,this.needPax=Mt(t,e+337,8,this.devmin)||this.needPax,this.needPax=an(t,e+345,n,s)||this.needPax,t[e+475]!==0?this.needPax=an(t,e+345,155,s)||this.needPax:(this.needPax=an(t,e+345,130,s)||this.needPax,this.needPax=ha(t,e+476,12,this.atime)||this.needPax,this.needPax=ha(t,e+488,12,this.ctime)||this.needPax);let o=256;for(let a=e;a<e+148;a++)o+=t[a];for(let a=e+156;a<e+512;a++)o+=t[a];return this.cksum=o,Mt(t,e+148,8,this.cksum),this.cksumValid=!0,this.needPax}get type(){return this.#e==="Unsupported"?this.#e:Ds.get(this.#e)}get typeKey(){return this.#e}set type(t){let e=String(Xa.get(t));if(ys(e)||e==="Unsupported")this.#e=e;else if(ys(t))this.#e=t;else throw new TypeError("invalid entry type: "+t)}},zw=(t,e)=>{let n=t,r="",i,s=zn.parse(t).root||".";if(Buffer.byteLength(n)<100)i=[n,r,!1];else{r=zn.dirname(n),n=zn.basename(n);do Buffer.byteLength(n)<=100&&Buffer.byteLength(r)<=e?i=[n,r,!1]:Buffer.byteLength(n)>100&&Buffer.byteLength(r)<=e?i=[n.slice(0,99),r,!0]:(n=zn.join(zn.basename(r),n),r=zn.dirname(r));while(r!==s&&i===void 0);i||(i=[t.slice(0,99),"",!0])}return i},on=(t,e,n)=>t.subarray(e,e+n).toString("utf8").replace(/\0.*/,""),fa=(t,e,n)=>$w(Ft(t,e,n)),$w=t=>t===void 0?void 0:new Date(t*1e3),Ft=(t,e,n)=>Number(t[e])&128?Lw(t.subarray(e,e+n)):Hw(t,e,n),Gw=t=>isNaN(t)?void 0:t,Hw=(t,e,n)=>Gw(parseInt(t.subarray(e,e+n).toString("utf8").replace(/\0.*$/,"").trim(),8)),jw={12:8589934591,8:2097151},Mt=(t,e,n,r)=>r===void 0?!1:r>jw[n]||r<0?(Cw(r,t.subarray(e,e+n)),!0):(Ww(t,e,n,r),!1),Ww=(t,e,n,r)=>t.write(qw(r,n),e,n,"ascii"),qw=(t,e)=>Vw(Math.floor(t).toString(8),e),Vw=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",ha=(t,e,n,r)=>r===void 0?!1:Mt(t,e,n,r.getTime()/1e3),Jw=new Array(156).join("\0"),an=(t,e,n,r)=>r===void 0?!1:(t.write(r+Jw,e,n,"utf8"),r.length!==Buffer.byteLength(r)||r.length>n),bs=class Au{atime;mtime;ctime;charset;comment;gid;uid;gname;uname;linkpath;dev;ino;nlink;path;size;mode;global;constructor(e,n=!1){this.atime=e.atime,this.charset=e.charset,this.comment=e.comment,this.ctime=e.ctime,this.dev=e.dev,this.gid=e.gid,this.global=n,this.gname=e.gname,this.ino=e.ino,this.linkpath=e.linkpath,this.mtime=e.mtime,this.nlink=e.nlink,this.path=e.path,this.size=e.size,this.uid=e.uid,this.uname=e.uname}encode(){let e=this.encodeBody();if(e==="")return Buffer.allocUnsafe(0);let n=Buffer.byteLength(e),r=512*Math.ceil(1+n/512),i=Buffer.allocUnsafe(r);for(let s=0;s<512;s++)i[s]=0;new gn({path:("PaxHeader/"+Zw(this.path??"")).slice(0,99),mode:this.mode||420,uid:this.uid,gid:this.gid,size:n,mtime:this.mtime,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime,ctime:this.ctime}).encode(i),i.write(e,512,n,"utf8");for(let s=n+512;s<i.length;s++)i[s]=0;return i}encodeBody(){return this.encodeField("path")+this.encodeField("ctime")+this.encodeField("atime")+this.encodeField("dev")+this.encodeField("ino")+this.encodeField("nlink")+this.encodeField("charset")+this.encodeField("comment")+this.encodeField("gid")+this.encodeField("gname")+this.encodeField("linkpath")+this.encodeField("mtime")+this.encodeField("size")+this.encodeField("uid")+this.encodeField("uname")}encodeField(e){if(this[e]===void 0)return"";let n=this[e],r=n instanceof Date?n.getTime()/1e3:n,i=" "+(e==="dev"||e==="ino"||e==="nlink"?"SCHILY.":"")+e+"="+r+`
89
89
  `,s=Buffer.byteLength(i),o=Math.floor(Math.log(s)/Math.log(10))+1;return s+o>=Math.pow(10,o)&&(o+=1),o+s+i}static parse(e,n,r=!1){return new Au(Kw(Xw(e),n),r)}},Kw=(t,e)=>e?Object.assign({},e,t):t,Xw=t=>t.replace(/\n$/,"").split(`
90
90
  `).reduce(Yw,Object.create(null)),Yw=(t,e)=>{let n=parseInt(e,10);if(n!==Buffer.byteLength(e)+1)return t;e=e.slice((n+" ").length);let r=e.split("="),i=r.shift();if(!i)return t;let s=i.replace(/^SCHILY\.(dev|ino|nlink)/,"$1"),o=r.join("=");return t[s]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(s)?new Date(Number(o)*1e3):/^[0-9]+$/.test(o)?+o:o,t},Qw=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,N=Qw!=="win32"?t=>t:t=>t&&t.replaceAll(/\\/g,"/"),xu=class extends mn{extended;globalExtended;header;startBlockSize;blockRemain;remain;type;meta=!1;ignore=!1;path;mode;uid;gid;uname;gname;size=0;mtime;atime;ctime;linkpath;dev;ino;nlink;invalid=!1;absolute;unsupported=!1;constructor(t,e,n){switch(super({}),this.pause(),this.extended=e,this.globalExtended=n,this.header=t,this.remain=t.size??0,this.startBlockSize=512*Math.ceil(this.remain/512),this.blockRemain=this.startBlockSize,this.type=t.type,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}if(!t.path)throw new Error("no path provided for tar.ReadEntry");this.path=N(t.path),this.mode=t.mode,this.mode&&(this.mode=this.mode&4095),this.uid=t.uid,this.gid=t.gid,this.uname=t.uname,this.gname=t.gname,this.size=this.remain,this.mtime=t.mtime,this.atime=t.atime,this.ctime=t.ctime,this.linkpath=t.linkpath?N(t.linkpath):void 0,this.uname=t.uname,this.gname=t.gname,e&&this.#e(e),n&&this.#e(n,!0)}write(t){let e=t.length;if(e>this.blockRemain)throw new Error("writing more to entry than is appropriate");let n=this.remain,r=this.blockRemain;return this.remain=Math.max(0,n-e),this.blockRemain=Math.max(0,r-e),this.ignore?!0:n>=e?super.write(t):super.write(t.subarray(0,n))}#e(t,e=!1){t.path&&(t.path=N(t.path)),t.linkpath&&(t.linkpath=N(t.linkpath)),Object.assign(this,Object.fromEntries(Object.entries(t).filter(([n,r])=>!(r==null||n==="path"&&e))))}},Ns=(t,e,n,r={})=>{t.file&&(r.file=t.file),t.cwd&&(r.cwd=t.cwd),r.code=n instanceof Error&&n.code||e,r.tarCode=e,!t.strict&&r.recoverable!==!1?(n instanceof Error&&(r=Object.assign(n,r),n=n.message),t.emit("warn",e,n,r)):n instanceof Error?t.emit("error",Object.assign(n,r)):t.emit("error",Object.assign(new Error(`${e}: ${n}`),r))},ey=1024*1024,xa=Buffer.from([31,139]),Oa=Buffer.from([40,181,47,253]),ty=Math.max(xa.length,Oa.length),Me=Symbol("state"),cn=Symbol("writeEntry"),yt=Symbol("readEntry"),pa=Symbol("nextEntry"),Wd=Symbol("processEntry"),rt=Symbol("extendedHeader"),Mr=Symbol("globalExtendedHeader"),Pt=Symbol("meta"),qd=Symbol("emitMeta"),W=Symbol("buffer"),_t=Symbol("queue"),Ct=Symbol("ended"),ga=Symbol("emittedEnd"),ln=Symbol("emit"),ee=Symbol("unzip"),cs=Symbol("consumeChunk"),ls=Symbol("consumeChunkSub"),ma=Symbol("consumeBody"),Vd=Symbol("consumeMeta"),Jd=Symbol("consumeHeader"),Br=Symbol("consuming"),wa=Symbol("bufferConcat"),ds=Symbol("maybeEnd"),$n=Symbol("writing"),Dt=Symbol("aborted"),us=Symbol("onDone"),dn=Symbol("sawValidEntry"),fs=Symbol("sawNullBlock"),hs=Symbol("sawEOF"),Zd=Symbol("closeStream"),ny=()=>!0,ei=class extends Sw{file;strict;maxMetaEntrySize;filter;brotli;zstd;writable=!0;readable=!1;[_t]=[];[W];[yt];[cn];[Me]="begin";[Pt]="";[rt];[Mr];[Ct]=!1;[ee];[Dt]=!1;[dn];[fs]=!1;[hs]=!1;[$n]=!1;[Br]=!1;[ga]=!1;constructor(t={}){super(),this.file=t.file||"",this.on(us,()=>{(this[Me]==="begin"||this[dn]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),t.ondone?this.on(us,t.ondone):this.on(us,()=>{this.emit("prefinish"),this.emit("finish"),this.emit("end")}),this.strict=!!t.strict,this.maxMetaEntrySize=t.maxMetaEntrySize||ey,this.filter=typeof t.filter=="function"?t.filter:ny;let e=t.file&&(t.file.endsWith(".tar.br")||t.file.endsWith(".tbr"));this.brotli=!(t.gzip||t.zstd)&&t.brotli!==void 0?t.brotli:e?void 0:!1;let n=t.file&&(t.file.endsWith(".tar.zst")||t.file.endsWith(".tzst"));this.zstd=!(t.gzip||t.brotli)&&t.zstd!==void 0?t.zstd:n?!0:void 0,this.on("end",()=>this[Zd]()),typeof t.onwarn=="function"&&this.on("warn",t.onwarn),typeof t.onReadEntry=="function"&&this.on("entry",t.onReadEntry)}warn(t,e,n={}){Ns(this,t,e,n)}[Jd](t,e){this[dn]===void 0&&(this[dn]=!1);let n;try{n=new gn(t,e,this[rt],this[Mr])}catch(r){return this.warn("TAR_ENTRY_INVALID",r)}if(n.nullBlock)this[fs]?(this[hs]=!0,this[Me]==="begin"&&(this[Me]="header"),this[ln]("eof")):(this[fs]=!0,this[ln]("nullBlock"));else if(this[fs]=!1,!n.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:n});else if(!n.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:n});else{let r=n.type;if(/^(Symbolic)?Link$/.test(r)&&!n.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:n});else if(!/^(Symbolic)?Link$/.test(r)&&!/^(Global)?ExtendedHeader$/.test(r)&&n.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:n});else{let i=this[cn]=new xu(n,this[rt],this[Mr]);if(!this[dn])if(i.remain){let s=()=>{i.invalid||(this[dn]=!0)};i.on("end",s)}else this[dn]=!0;i.meta?i.size>this.maxMetaEntrySize?(i.ignore=!0,this[ln]("ignoredEntry",i),this[Me]="ignore",i.resume()):i.size>0&&(this[Pt]="",i.on("data",s=>this[Pt]+=s),this[Me]="meta"):(this[rt]=void 0,i.ignore=i.ignore||!this.filter(i.path,i),i.ignore?(this[ln]("ignoredEntry",i),this[Me]=i.remain?"ignore":"header",i.resume()):(i.remain?this[Me]="body":(this[Me]="header",i.end()),this[yt]?this[_t].push(i):(this[_t].push(i),this[pa]())))}}}[Zd](){queueMicrotask(()=>this.emit("close"))}[Wd](t){let e=!0;if(!t)this[yt]=void 0,e=!1;else if(Array.isArray(t)){let[n,...r]=t;this.emit(n,...r)}else this[yt]=t,this.emit("entry",t),t.emittedEnd||(t.on("end",()=>this[pa]()),e=!1);return e}[pa](){do;while(this[Wd](this[_t].shift()));if(this[_t].length===0){let t=this[yt];!t||t.flowing||t.size===t.remain?this[$n]||this.emit("drain"):t.once("drain",()=>this.emit("drain"))}}[ma](t,e){let n=this[cn];if(!n)throw new Error("attempt to consume body without entry??");let r=n.blockRemain??0,i=r>=t.length&&e===0?t:t.subarray(e,e+r);return n.write(i),n.blockRemain||(this[Me]="header",this[cn]=void 0,n.end()),i.length}[Vd](t,e){let n=this[cn],r=this[ma](t,e);return!this[cn]&&n&&this[qd](n),r}[ln](t,e,n){this[_t].length===0&&!this[yt]?this.emit(t,e,n):this[_t].push([t,e,n])}[qd](t){switch(this[ln]("meta",this[Pt]),t.type){case"ExtendedHeader":case"OldExtendedHeader":this[rt]=bs.parse(this[Pt],this[rt],!1);break;case"GlobalExtendedHeader":this[Mr]=bs.parse(this[Pt],this[Mr],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":{let e=this[rt]??Object.create(null);this[rt]=e,e.path=this[Pt].replace(/\0.*/,"");break}case"NextFileHasLongLinkpath":{let e=this[rt]||Object.create(null);this[rt]=e,e.linkpath=this[Pt].replace(/\0.*/,"");break}default:throw new Error("unknown meta: "+t.type)}}abort(t){this[Dt]=!0,this.emit("abort",t),this.warn("TAR_ABORT",t,{recoverable:!1})}write(t,e,n){if(typeof e=="function"&&(n=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,typeof e=="string"?e:"utf8")),this[Dt])return n?.(),!1;if((this[ee]===void 0||this.brotli===void 0&&this[ee]===!1)&&t){if(this[W]&&(t=Buffer.concat([this[W],t]),this[W]=void 0),t.length<ty)return this[W]=t,n?.(),!0;for(let o=0;this[ee]===void 0&&o<xa.length;o++)t[o]!==xa[o]&&(this[ee]=!1);let i=!1;if(this[ee]===!1&&this.zstd!==!1){i=!0;for(let o=0;o<Oa.length;o++)if(t[o]!==Oa[o]){i=!1;break}}let s=this.brotli===void 0&&!i;if(this[ee]===!1&&s)if(t.length<512)if(this[Ct])this.brotli=!0;else return this[W]=t,n?.(),!0;else try{new gn(t.subarray(0,512)),this.brotli=!1}catch{this.brotli=!0}if(this[ee]===void 0||this[ee]===!1&&(this.brotli||i)){let o=this[Ct];this[Ct]=!1,this[ee]=this[ee]===void 0?new bw({}):i?new Pw({}):new xw({}),this[ee].on("data",c=>this[cs](c)),this[ee].on("error",c=>this.abort(c)),this[ee].on("end",()=>{this[Ct]=!0,this[cs]()}),this[$n]=!0;let a=!!this[ee][o?"end":"write"](t);return this[$n]=!1,n?.(),a}}this[$n]=!0,this[ee]?this[ee].write(t):this[cs](t),this[$n]=!1;let r=this[_t].length>0?!1:this[yt]?this[yt].flowing:!0;return!r&&this[_t].length===0&&this[yt]?.once("drain",()=>this.emit("drain")),n?.(),r}[wa](t){t&&!this[Dt]&&(this[W]=this[W]?Buffer.concat([this[W],t]):t)}[ds](){if(this[Ct]&&!this[ga]&&!this[Dt]&&!this[Br]){this[ga]=!0;let t=this[cn];if(t&&t.blockRemain){let e=this[W]?this[W].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${t.blockRemain} more bytes, only ${e} available)`,{entry:t}),this[W]&&t.write(this[W]),t.end()}this[ln](us)}}[cs](t){if(this[Br]&&t)this[wa](t);else if(!t&&!this[W])this[ds]();else if(t){if(this[Br]=!0,this[W]){this[wa](t);let e=this[W];this[W]=void 0,this[ls](e)}else this[ls](t);for(;this[W]&&this[W]?.length>=512&&!this[Dt]&&!this[hs];){let e=this[W];this[W]=void 0,this[ls](e)}this[Br]=!1}(!this[W]||this[Ct])&&this[ds]()}[ls](t){let e=0,n=t.length;for(;e+512<=n&&!this[Dt]&&!this[hs];)switch(this[Me]){case"begin":case"header":this[Jd](t,e),e+=512;break;case"ignore":case"body":e+=this[ma](t,e);break;case"meta":e+=this[Vd](t,e);break;default:throw new Error("invalid state: "+this[Me])}e<n&&(this[W]=this[W]?Buffer.concat([t.subarray(e),this[W]]):t.subarray(e))}end(t,e,n){return typeof t=="function"&&(n=t,e=void 0,t=void 0),typeof e=="function"&&(n=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,e)),n&&this.once("finish",n),this[Dt]||(this[ee]?(t&&this[ee].write(t),this[ee].end()):(this[Ct]=!0,(this.brotli===void 0||this.zstd===void 0)&&(t=t||Buffer.alloc(0)),t&&this.write(t),this[ds]())),this}},Vr=t=>{let e=t.length-1,n=-1;for(;e>-1&&t.charAt(e)==="/";)n=e,e--;return n===-1?t:t.slice(0,n)},ry=t=>{let e=t.onReadEntry;t.onReadEntry=e?n=>{e(n),n.resume()}:n=>n.resume()},Ou=(t,e)=>{let n=new Map(e.map(s=>[Vr(s),!0])),r=t.filter,i=(s,o="")=>{let a=o||hw(s).root||".",c;if(s===a)c=!1;else{let l=n.get(s);c=l!==void 0?l:i(fw(s),a)}return n.set(s,c),c};t.filter=r?(s,o)=>r(s,o)&&i(Vr(s)):s=>i(Vr(s))},iy=t=>{let e=new ei(t),n=t.file,r;try{r=Vn.openSync(n,"r");let i=Vn.fstatSync(r),s=t.maxReadSize||16*1024*1024;if(i.size<s){let o=Buffer.allocUnsafe(i.size),a=Vn.readSync(r,o,0,i.size,0);e.end(a===o.byteLength?o:o.subarray(0,a))}else{let o=0,a=Buffer.allocUnsafe(s);for(;o<i.size;){let c=Vn.readSync(r,a,0,s,o);if(c===0)break;o+=c,e.write(a.subarray(0,c))}e.end()}}finally{if(typeof r=="number")try{Vn.closeSync(r)}catch{}}},sy=(t,e)=>{let n=new ei(t),r=t.maxReadSize||16*1024*1024,i=t.file;return new Promise((s,o)=>{n.on("error",o),n.on("end",s),Vn.stat(i,(a,c)=>{if(a)o(a);else{let l=new Ja(i,{readSize:r,size:c.size});l.on("error",o),l.pipe(n)}})})},Xn=ti(iy,sy,t=>new ei(t),t=>new ei(t),(t,e)=>{e?.length&&Ou(t,e),t.noResume||ry(t)}),Pu=(t,e,n)=>(t&=4095,n&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t),{isAbsolute:ay,parse:Xd}=oy,Ya=t=>{let e="",n=Xd(t);for(;ay(t)||n.root;){let r=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":n.root;t=t.slice(r.length),e+=r,n=Xd(t)}return[e,t]},Ls=["|","<",">","?",":"],Qa=Ls.map(t=>String.fromCodePoint(61440+Number(t.codePointAt(0)))),cy=new Map(Ls.map((t,e)=>[t,Qa[e]])),ly=new Map(Qa.map((t,e)=>[t,Ls[e]])),Yd=t=>Ls.reduce((e,n)=>e.split(n).join(cy.get(n)),t),dy=t=>Qa.reduce((e,n)=>e.split(n).join(ly.get(n)),t),Cu=(t,e)=>e?(t=N(t).replace(/^\.(\/|$)/,""),Vr(e)+"/"+t):N(t),uy=16*1024*1024,Qd=Symbol("process"),eu=Symbol("file"),tu=Symbol("directory"),Pa=Symbol("symlink"),nu=Symbol("hardlink"),Ur=Symbol("header"),_s=Symbol("read"),Ca=Symbol("lstat"),Es=Symbol("onlstat"),Da=Symbol("onread"),Na=Symbol("onreadlink"),La=Symbol("openfile"),Fa=Symbol("onopenfile"),Bt=Symbol("close"),xs=Symbol("mode"),Ma=Symbol("awaitDrain"),ya=Symbol("ondrain"),st=Symbol("prefix"),Du=class extends mn{path;portable;myuid=process.getuid&&process.getuid()||0;myuser=process.env.USER||"";maxReadSize;linkCache;statCache;preservePaths;cwd;strict;mtime;noPax;noMtime;prefix;fd;blockLen=0;blockRemain=0;buf;pos=0;remain=0;length=0;offset=0;win32;absolute;header;type;linkpath;stat;onWriteEntry;#e=!1;constructor(t,e={}){let n=Za(e);super(),this.path=N(t),this.portable=!!n.portable,this.maxReadSize=n.maxReadSize||uy,this.linkCache=n.linkCache||new Map,this.statCache=n.statCache||new Map,this.preservePaths=!!n.preservePaths,this.cwd=N(n.cwd||process.cwd()),this.strict=!!n.strict,this.noPax=!!n.noPax,this.noMtime=!!n.noMtime,this.mtime=n.mtime,this.prefix=n.prefix?N(n.prefix):void 0,this.onWriteEntry=n.onWriteEntry,typeof n.onwarn=="function"&&this.on("warn",n.onwarn);let r=!1;if(!this.preservePaths){let[s,o]=Ya(this.path);s&&typeof o=="string"&&(this.path=o,r=s)}this.win32=!!n.win32||process.platform==="win32",this.win32&&(this.path=dy(this.path.replaceAll(/\\/g,"/")),t=t.replaceAll(/\\/g,"/")),this.absolute=N(n.absolute||Kd.resolve(this.cwd,t)),this.path===""&&(this.path="./"),r&&this.warn("TAR_ENTRY_INFO",`stripping ${r} from absolute path`,{entry:this,path:r+this.path});let i=this.statCache.get(this.absolute);i?this[Es](i):this[Ca]()}warn(t,e,n={}){return Ns(this,t,e,n)}emit(t,...e){return t==="error"&&(this.#e=!0),super.emit(t,...e)}[Ca](){it.lstat(this.absolute,(t,e)=>{if(t)return this.emit("error",t);this[Es](e)})}[Es](t){this.statCache.set(this.absolute,t),this.stat=t,t.isFile()||(t.size=0),this.type=py(t),this.emit("stat",t),this[Qd]()}[Qd](){switch(this.type){case"File":return this[eu]();case"Directory":return this[tu]();case"SymbolicLink":return this[Pa]();default:return this.end()}}[xs](t){return Pu(t,this.type==="Directory",this.portable)}[st](t){return Cu(t,this.prefix)}[Ur](){if(!this.stat)throw new Error("cannot write header before stat");this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.onWriteEntry?.(this),this.header=new gn({path:this[st](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[st](this.linkpath):this.linkpath,mode:this[xs](this.stat.mode),uid:this.portable?void 0:this.stat.uid,gid:this.portable?void 0:this.stat.gid,size:this.stat.size,mtime:this.noMtime?void 0:this.mtime||this.stat.mtime,type:this.type==="Unsupported"?void 0:this.type,uname:this.portable?void 0:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?void 0:this.stat.atime,ctime:this.portable?void 0:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new bs({atime:this.portable?void 0:this.header.atime,ctime:this.portable?void 0:this.header.ctime,gid:this.portable?void 0:this.header.gid,mtime:this.noMtime?void 0:this.mtime||this.header.mtime,path:this[st](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[st](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?void 0:this.header.uid,uname:this.portable?void 0:this.header.uname,dev:this.portable?void 0:this.stat.dev,ino:this.portable?void 0:this.stat.ino,nlink:this.portable?void 0:this.stat.nlink}).encode());let t=this.header?.block;if(!t)throw new Error("failed to encode header");super.write(t)}[tu](){if(!this.stat)throw new Error("cannot create directory entry without stat");this.path.slice(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[Ur](),this.end()}[Pa](){it.readlink(this.absolute,(t,e)=>{if(t)return this.emit("error",t);this[Na](e)})}[Na](t){this.linkpath=N(t),this[Ur](),this.end()}[nu](t){if(!this.stat)throw new Error("cannot create link entry without stat");this.type="Link",this.linkpath=N(Kd.relative(this.cwd,t)),this.stat.size=0,this[Ur](),this.end()}[eu](){if(!this.stat)throw new Error("cannot create file entry without stat");if(this.stat.nlink>1){let t=`${this.stat.dev}:${this.stat.ino}`,e=this.linkCache.get(t);if(e?.indexOf(this.cwd)===0)return this[nu](e);this.linkCache.set(t,this.absolute)}if(this[Ur](),this.stat.size===0)return this.end();this[La]()}[La](){it.open(this.absolute,"r",(t,e)=>{if(t)return this.emit("error",t);this[Fa](e)})}[Fa](t){if(this.fd=t,this.#e)return this[Bt]();if(!this.stat)throw new Error("should stat before calling onopenfile");this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let e=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(e),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[_s]()}[_s](){let{fd:t,buf:e,offset:n,length:r,pos:i}=this;if(t===void 0||e===void 0)throw new Error("cannot read file without first opening");it.read(t,e,n,r,i,(s,o)=>{if(s)return this[Bt](()=>this.emit("error",s));this[Da](o)})}[Bt](t=()=>{}){this.fd!==void 0&&it.close(this.fd,t)}[Da](t){if(t<=0&&this.remain>0){let n=Object.assign(new Error("encountered unexpected EOF"),{path:this.absolute,syscall:"read",code:"EOF"});return this[Bt](()=>this.emit("error",n))}if(t>this.remain){let n=Object.assign(new Error("did not encounter expected EOF"),{path:this.absolute,syscall:"read",code:"EOF"});return this[Bt](()=>this.emit("error",n))}if(!this.buf)throw new Error("should have created buffer prior to reading");if(t===this.remain)for(let n=t;n<this.length&&t<this.blockRemain;n++)this.buf[n+this.offset]=0,t++,this.remain++;let e=this.offset===0&&t===this.buf.length?this.buf:this.buf.subarray(this.offset,this.offset+t);this.write(e)?this[ya]():this[Ma](()=>this[ya]())}[Ma](t){this.once("drain",t)}write(t,e,n){if(typeof e=="function"&&(n=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,typeof e=="string"?e:"utf8")),this.blockRemain<t.length){let r=Object.assign(new Error("writing more data than expected"),{path:this.absolute});return this.emit("error",r)}return this.remain-=t.length,this.blockRemain-=t.length,this.pos+=t.length,this.offset+=t.length,super.write(t,null,n)}[ya](){if(!this.remain)return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),this[Bt](t=>t?this.emit("error",t):this.end());if(!this.buf)throw new Error("buffer lost somehow in ONDRAIN");this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[_s]()}},fy=class extends Du{sync=!0;[Ca](){this[Es](it.lstatSync(this.absolute))}[Pa](){this[Na](it.readlinkSync(this.absolute))}[La](){this[Fa](it.openSync(this.absolute,"r"))}[_s](){let t=!0;try{let{fd:e,buf:n,offset:r,length:i,pos:s}=this;if(e===void 0||n===void 0)throw new Error("fd and buf must be set in READ method");let o=it.readSync(e,n,r,i,s);this[Da](o),t=!1}finally{if(t)try{this[Bt](()=>{})}catch{}}}[Ma](t){t()}[Bt](t=()=>{}){this.fd!==void 0&&it.closeSync(this.fd),t()}},hy=class extends mn{blockLen=0;blockRemain=0;buf=0;pos=0;remain=0;length=0;preservePaths;portable;strict;noPax;noMtime;readEntry;type;prefix;path;mode;uid;gid;uname;gname;header;mtime;atime;ctime;linkpath;size;onWriteEntry;warn(t,e,n={}){return Ns(this,t,e,n)}constructor(t,e={}){let n=Za(e);super(),this.preservePaths=!!n.preservePaths,this.portable=!!n.portable,this.strict=!!n.strict,this.noPax=!!n.noPax,this.noMtime=!!n.noMtime,this.onWriteEntry=n.onWriteEntry,this.readEntry=t;let{type:r}=t;if(r==="Unsupported")throw new Error("writing entry that should be ignored");this.type=r,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=n.prefix,this.path=N(t.path),this.mode=t.mode!==void 0?this[xs](t.mode):void 0,this.uid=this.portable?void 0:t.uid,this.gid=this.portable?void 0:t.gid,this.uname=this.portable?void 0:t.uname,this.gname=this.portable?void 0:t.gname,this.size=t.size,this.mtime=this.noMtime?void 0:n.mtime||t.mtime,this.atime=this.portable?void 0:t.atime,this.ctime=this.portable?void 0:t.ctime,this.linkpath=t.linkpath!==void 0?N(t.linkpath):void 0,typeof n.onwarn=="function"&&this.on("warn",n.onwarn);let i=!1;if(!this.preservePaths){let[o,a]=Ya(this.path);o&&typeof a=="string"&&(this.path=a,i=o)}this.remain=t.size,this.blockRemain=t.startBlockSize,this.onWriteEntry?.(this),this.header=new gn({path:this[st](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[st](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?void 0:this.uid,gid:this.portable?void 0:this.gid,size:this.size,mtime:this.noMtime?void 0:this.mtime,type:this.type,uname:this.portable?void 0:this.uname,atime:this.portable?void 0:this.atime,ctime:this.portable?void 0:this.ctime}),i&&this.warn("TAR_ENTRY_INFO",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new bs({atime:this.portable?void 0:this.atime,ctime:this.portable?void 0:this.ctime,gid:this.portable?void 0:this.gid,mtime:this.noMtime?void 0:this.mtime,path:this[st](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[st](this.linkpath):this.linkpath,size:this.size,uid:this.portable?void 0:this.uid,uname:this.portable?void 0:this.uname,dev:this.portable?void 0:this.readEntry.dev,ino:this.portable?void 0:this.readEntry.ino,nlink:this.portable?void 0:this.readEntry.nlink}).encode());let s=this.header?.block;if(!s)throw new Error("failed to encode header");super.write(s),t.pipe(this)}[st](t){return Cu(t,this.prefix)}[xs](t){return Pu(t,this.type==="Directory",this.portable)}write(t,e,n){typeof e=="function"&&(n=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,typeof e=="string"?e:"utf8"));let r=t.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(t,n)}end(t,e,n){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),typeof t=="function"&&(n=t,e=void 0,t=void 0),typeof e=="function"&&(n=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,e??"utf8")),n&&this.once("finish",n),t?super.end(t,n):super.end(n),this}},py=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported",gy=class Jn{tail;head;length=0;static create(e=[]){return new Jn(e)}constructor(e=[]){for(let n of e)this.push(n)}*[Symbol.iterator](){for(let e=this.head;e;e=e.next)yield e.value}removeNode(e){if(e.list!==this)throw new Error("removing node which does not belong to this list");let n=e.next,r=e.prev;return n&&(n.prev=r),r&&(r.next=n),e===this.head&&(this.head=n),e===this.tail&&(this.tail=r),this.length--,e.next=void 0,e.prev=void 0,e.list=void 0,n}unshiftNode(e){if(e===this.head)return;e.list&&e.list.removeNode(e);let n=this.head;e.list=this,e.next=n,n&&(n.prev=e),this.head=e,this.tail||(this.tail=e),this.length++}pushNode(e){if(e===this.tail)return;e.list&&e.list.removeNode(e);let n=this.tail;e.list=this,e.prev=n,n&&(n.next=e),this.tail=e,this.head||(this.head=e),this.length++}push(...e){for(let n=0,r=e.length;n<r;n++)wy(this,e[n]);return this.length}unshift(...e){for(var n=0,r=e.length;n<r;n++)yy(this,e[n]);return this.length}pop(){if(!this.tail)return;let e=this.tail.value,n=this.tail;return this.tail=this.tail.prev,this.tail?this.tail.next=void 0:this.head=void 0,n.list=void 0,this.length--,e}shift(){if(!this.head)return;let e=this.head.value,n=this.head;return this.head=this.head.next,this.head?this.head.prev=void 0:this.tail=void 0,n.list=void 0,this.length--,e}forEach(e,n){n=n||this;for(let r=this.head,i=0;r;i++)e.call(n,r.value,i,this),r=r.next}forEachReverse(e,n){n=n||this;for(let r=this.tail,i=this.length-1;r;i--)e.call(n,r.value,i,this),r=r.prev}get(e){let n=0,r=this.head;for(;r&&n<e;n++)r=r.next;if(n===e&&r)return r.value}getReverse(e){let n=0,r=this.tail;for(;r&&n<e;n++)r=r.prev;if(n===e&&r)return r.value}map(e,n){n=n||this;let r=new Jn;for(let i=this.head;i;)r.push(e.call(n,i.value,this)),i=i.next;return r}mapReverse(e,n){n=n||this;var r=new Jn;for(let i=this.tail;i;)r.push(e.call(n,i.value,this)),i=i.prev;return r}reduce(e,n){let r,i=this.head;if(arguments.length>1)r=n;else if(this.head)i=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var s=0;i;s++)r=e(r,i.value,s),i=i.next;return r}reduceReverse(e,n){let r,i=this.tail;if(arguments.length>1)r=n;else if(this.tail)i=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(let s=this.length-1;i;s--)r=e(r,i.value,s),i=i.prev;return r}toArray(){let e=new Array(this.length);for(let n=0,r=this.head;r;n++)e[n]=r.value,r=r.next;return e}toArrayReverse(){let e=new Array(this.length);for(let n=0,r=this.tail;r;n++)e[n]=r.value,r=r.prev;return e}slice(e=0,n=this.length){n<0&&(n+=this.length),e<0&&(e+=this.length);let r=new Jn;if(n<e||n<0)return r;e<0&&(e=0),n>this.length&&(n=this.length);let i=this.head,s=0;for(s=0;i&&s<e;s++)i=i.next;for(;i&&s<n;s++,i=i.next)r.push(i.value);return r}sliceReverse(e=0,n=this.length){n<0&&(n+=this.length),e<0&&(e+=this.length);let r=new Jn;if(n<e||n<0)return r;e<0&&(e=0),n>this.length&&(n=this.length);let i=this.length,s=this.tail;for(;s&&i>n;i--)s=s.prev;for(;s&&i>e;i--,s=s.prev)r.push(s.value);return r}splice(e,n=0,...r){e>this.length&&(e=this.length-1),e<0&&(e=this.length+e);let i=this.head;for(let o=0;i&&o<e;o++)i=i.next;let s=[];for(let o=0;i&&o<n;o++)s.push(i.value),i=this.removeNode(i);i?i!==this.tail&&(i=i.prev):i=this.tail;for(let o of r)i=my(this,i,o);return s}reverse(){let e=this.head,n=this.tail;for(let r=e;r;r=r.prev){let i=r.prev;r.prev=r.next,r.next=i}return this.head=n,this.tail=e,this}};function my(t,e,n){let r=e,i=e?e.next:t.head,s=new ec(n,r,i,t);return s.next===void 0&&(t.tail=s),s.prev===void 0&&(t.head=s),t.length++,s}function wy(t,e){t.tail=new ec(e,t.tail,void 0,t),t.head||(t.head=t.tail),t.length++}function yy(t,e){t.head=new ec(e,void 0,t.head,t),t.tail||(t.tail=t.head),t.length++}var ec=class{list;next;prev;value;constructor(t,e,n,r){this.list=r,this.value=t,e?(e.next=this,this.prev=e):this.prev=void 0,n?(n.prev=this,this.next=n):this.next=void 0}},iu=class{path;absolute;entry;stat;readdir;pending=!1;pendingLink=!1;ignore=!1;piped=!1;constructor(t,e){this.path=t||"./",this.absolute=e}},su=Buffer.alloc(1024),Ss=Symbol("onStat"),zr=Symbol("ended"),We=Symbol("queue"),$r=Symbol("queue"),Nt=Symbol("current"),un=Symbol("process"),Gr=Symbol("processing"),ps=Symbol("processJob"),qe=Symbol("jobs"),_a=Symbol("jobDone"),vs=Symbol("addFSEntry"),ou=Symbol("addTarEntry"),Ba=Symbol("stat"),Ua=Symbol("readdir"),Is=Symbol("onreaddir"),Ts=Symbol("pipe"),au=Symbol("entry"),Ea=Symbol("entryOpt"),Rs=Symbol("writeEntryClass"),Nu=Symbol("write"),Sa=Symbol("ondrain"),Fs=class extends mn{sync=!1;opt;cwd;maxReadSize;preservePaths;strict;noPax;prefix;linkCache;statCache;file;portable;zip;readdirCache;noDirRecurse;follow;noMtime;mtime;filter;jobs;[Rs];onWriteEntry;[We];[$r]=new Map;[qe]=0;[Gr]=!1;[zr]=!1;constructor(t={}){if(super(),this.opt=t,this.file=t.file||"",this.cwd=t.cwd||process.cwd(),this.maxReadSize=t.maxReadSize,this.preservePaths=!!t.preservePaths,this.strict=!!t.strict,this.noPax=!!t.noPax,this.prefix=N(t.prefix||""),this.linkCache=t.linkCache||new Map,this.statCache=t.statCache||new Map,this.readdirCache=t.readdirCache||new Map,this.onWriteEntry=t.onWriteEntry,this[Rs]=Du,typeof t.onwarn=="function"&&this.on("warn",t.onwarn),this.portable=!!t.portable,t.gzip||t.brotli||t.zstd){if((t.gzip?1:0)+(t.brotli?1:0)+(t.zstd?1:0)>1)throw new TypeError("gzip, brotli, zstd are mutually exclusive");if(t.gzip&&(typeof t.gzip!="object"&&(t.gzip={}),this.portable&&(t.gzip.portable=!0),this.zip=new kw(t.gzip)),t.brotli&&(typeof t.brotli!="object"&&(t.brotli={}),this.zip=new Aw(t.brotli)),t.zstd&&(typeof t.zstd!="object"&&(t.zstd={}),this.zip=new Ow(t.zstd)),!this.zip)throw new Error("impossible");let e=this.zip;e.on("data",n=>super.write(n)),e.on("end",()=>super.end()),e.on("drain",()=>this[Sa]()),this.on("resume",()=>e.resume())}else this.on("drain",this[Sa]);this.noDirRecurse=!!t.noDirRecurse,this.follow=!!t.follow,this.noMtime=!!t.noMtime,t.mtime&&(this.mtime=t.mtime),this.filter=typeof t.filter=="function"?t.filter:()=>!0,this[We]=new gy,this[qe]=0,this.jobs=Number(t.jobs)||4,this[Gr]=!1,this[zr]=!1}[Nu](t){return super.write(t)}add(t){return this.write(t),this}end(t,e,n){return typeof t=="function"&&(n=t,t=void 0),typeof e=="function"&&(n=e,e=void 0),t&&this.add(t),this[zr]=!0,this[un](),n&&n(),this}write(t){if(this[zr])throw new Error("write after end");return t instanceof xu?this[ou](t):this[vs](t),this.flowing}[ou](t){let e=N(ru.resolve(this.cwd,t.path));if(!this.filter(t.path,t))t.resume();else{let n=new iu(t.path,e);n.entry=new hy(t,this[Ea](n)),n.entry.on("end",()=>this[_a](n)),this[qe]+=1,this[We].push(n)}this[un]()}[vs](t){let e=N(ru.resolve(this.cwd,t));this[We].push(new iu(t,e)),this[un]()}[Ba](t){t.pending=!0,this[qe]+=1;let e=this.follow?"stat":"lstat";As[e](t.absolute,(n,r)=>{t.pending=!1,this[qe]-=1,n?this.emit("error",n):this[Ss](t,r)})}[Ss](t,e){if(this.statCache.set(t.absolute,e),t.stat=e,!this.filter(t.path,e))t.ignore=!0;else if(e.isFile()&&e.nlink>1&&!this.linkCache.get(`${e.dev}:${e.ino}`)&&!this.sync)if(t===this[Nt])this[ps](t);else{let n=`${e.dev}:${e.ino}`,r=this[$r].get(n);r?r.push(t):this[$r].set(n,[t]),t.pendingLink=!0,t.pending=!0}this[un]()}[Ua](t){t.pending=!0,this[qe]+=1,As.readdir(t.absolute,(e,n)=>{if(t.pending=!1,this[qe]-=1,e)return this.emit("error",e);this[Is](t,n)})}[Is](t,e){this.readdirCache.set(t.absolute,e),t.readdir=e,this[un]()}[un](){if(!this[Gr]){this[Gr]=!0;for(let t=this[We].head;t&&this[qe]<this.jobs;t=t.next)if(this[ps](t.value),t.value.ignore){let e=t.next;this[We].removeNode(t),t.next=e}this[Gr]=!1,this[zr]&&this[We].length===0&&this[qe]===0&&(this.zip?this.zip.end(su):(super.write(su),super.end()))}}get[Nt](){return this[We]&&this[We].head&&this[We].head.value}[_a](t){this[We].shift(),this[qe]-=1;let{stat:e}=t;if(e&&e.isFile()&&e.nlink>1){let n=`${e.dev}:${e.ino}`,r=this[$r].get(n);if(r){this[$r].delete(n);for(let i of r)i.pending=!1,this[ps](i)}}this[un]()}[ps](t){if(t.pending&&t.pendingLink&&t===this[Nt]&&(t.pending=!1,t.pendingLink=!1),!t.pending){if(t.entry){t===this[Nt]&&!t.piped&&this[Ts](t);return}if(!t.stat){let e=this.statCache.get(t.absolute);e?this[Ss](t,e):this[Ba](t)}if(t.stat&&!t.ignore){if(!this.noDirRecurse&&t.stat.isDirectory()&&!t.readdir){let e=this.readdirCache.get(t.absolute);if(e?this[Is](t,e):this[Ua](t),!t.readdir)return}if(t.entry=this[au](t),!t.entry){t.ignore=!0;return}t===this[Nt]&&!t.piped&&this[Ts](t)}}}[Ea](t){return{onwarn:(e,n,r)=>this.warn(e,n,r),noPax:this.noPax,cwd:this.cwd,absolute:t.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix,onWriteEntry:this.onWriteEntry}}[au](t){this[qe]+=1;try{return new this[Rs](t.path,this[Ea](t)).on("end",()=>this[_a](t)).on("error",e=>this.emit("error",e))}catch(e){this.emit("error",e)}}[Sa](){this[Nt]&&this[Nt].entry&&this[Nt].entry.resume()}[Ts](t){t.piped=!0,t.readdir&&t.readdir.forEach(r=>{let i=t.path,s=i==="./"?"":i.replace(/\/*$/,"/");this[vs](s+r)});let e=t.entry,n=this.zip;if(!e)throw new Error("cannot pipe without source");n?e.on("data",r=>{n.write(r)||e.pause()}):e.on("data",r=>{super.write(r)||e.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}warn(t,e,n={}){Ns(this,t,e,n)}},tc=class extends Fs{sync=!0;constructor(t){super(t),this[Rs]=fy}pause(){}resume(){}[Ba](t){let e=this.follow?"statSync":"lstatSync";this[Ss](t,As[e](t.absolute))}[Ua](t){this[Is](t,As.readdirSync(t.absolute))}[Ts](t){let e=t.entry,n=this.zip;if(t.readdir&&t.readdir.forEach(r=>{let i=t.path,s=i==="./"?"":i.replace(/\/*$/,"/");this[vs](s+r)}),!e)throw new Error("Cannot pipe without source");n?e.on("data",r=>{n.write(r)}):e.on("data",r=>{super[Nu](r)})}},_y=(t,e)=>{let n=new tc(t),r=new Su(t.file,{mode:t.mode||438});n.pipe(r),Lu(n,e)},Ey=(t,e)=>{let n=new Fs(t),r=new Cs(t.file,{mode:t.mode||438});n.pipe(r);let i=new Promise((s,o)=>{r.on("error",o),r.on("close",s),n.on("error",o)});return Fu(n,e).catch(s=>n.emit("error",s)),i},Lu=(t,e)=>{e.forEach(n=>{n.charAt(0)==="@"?Xn({file:vu.resolve(t.cwd,n.slice(1)),sync:!0,noResume:!0,onReadEntry:r=>t.add(r)}):t.add(n)}),t.end()},Fu=async(t,e)=>{for(let n of e)n.charAt(0)==="@"?await Xn({file:vu.resolve(String(t.cwd),n.slice(1)),noResume:!0,onReadEntry:r=>{t.add(r)}}):t.add(n);t.end()},Sy=(t,e)=>{let n=new tc(t);return Lu(n,e),n},vy=(t,e)=>{let n=new Fs(t);return Fu(n,e).catch(r=>n.emit("error",r)),n},uk=ti(_y,Ey,Sy,vy,(t,e)=>{if(!e?.length)throw new TypeError("no paths specified to add to archive")}),Ty=process.env.__FAKE_PLATFORM__||process.platform,zu=Ty==="win32",{O_CREAT:$u,O_NOFOLLOW:cu,O_TRUNC:Gu,O_WRONLY:Hu}=Uu.constants,ju=Number(process.env.__FAKE_FS_O_FILENAME__)||Uu.constants.UV_FS_O_FILEMAP||0,Ry=zu&&!!ju,ky=512*1024,by=ju|Gu|$u|Hu,lu=!zu&&typeof cu=="number"?cu|Gu|$u|Hu:null,Wu=lu!==null?()=>lu:Ry?t=>t<ky?by:"w":()=>"w",za=(t,e,n)=>{try{return Ms.lchownSync(t,e,n)}catch(r){if(r?.code!=="ENOENT")throw r}},Os=(t,e,n,r)=>{Ms.lchown(t,e,n,i=>{r(i&&i?.code!=="ENOENT"?i:null)})},Ay=(t,e,n,r,i)=>{if(e.isDirectory())qu(Jr.resolve(t,e.name),n,r,s=>{if(s)return i(s);let o=Jr.resolve(t,e.name);Os(o,n,r,i)});else{let s=Jr.resolve(t,e.name);Os(s,n,r,i)}},qu=(t,e,n,r)=>{Ms.readdir(t,{withFileTypes:!0},(i,s)=>{if(i){if(i.code==="ENOENT")return r();if(i.code!=="ENOTDIR"&&i.code!=="ENOTSUP")return r(i)}if(i||!s.length)return Os(t,e,n,r);let o=s.length,a=null,c=l=>{if(!a){if(l)return r(a=l);if(--o===0)return Os(t,e,n,r)}};for(let l of s)Ay(t,l,e,n,c)})},xy=(t,e,n,r)=>{e.isDirectory()&&Vu(Jr.resolve(t,e.name),n,r),za(Jr.resolve(t,e.name),n,r)},Vu=(t,e,n)=>{let r;try{r=Ms.readdirSync(t,{withFileTypes:!0})}catch(i){let s=i;if(s?.code==="ENOENT")return;if(s?.code==="ENOTDIR"||s?.code==="ENOTSUP")return za(t,e,n);throw s}for(let i of r)xy(t,i,e,n);return za(t,e,n)},Ju=class extends Error{path;code;syscall="chdir";constructor(t,e){super(`${e}: Cannot cd into '${t}'`),this.path=t,this.code=e}get name(){return"CwdError"}},Bs=class extends Error{path;symlink;syscall="symlink";code="TAR_SYMLINK_ERROR";constructor(t,e){super("TAR_SYMLINK_ERROR: Cannot extract through symbolic link"),this.symlink=t,this.path=e}get name(){return"SymlinkError"}},Py=(t,e)=>{De.stat(t,(n,r)=>{(n||!r.isDirectory())&&(n=new Ju(t,n?.code||"ENOTDIR")),e(n)})},Cy=(t,e,n)=>{t=N(t);let r=e.umask??18,i=e.mode|448,s=(i&r)!==0,o=e.uid,a=e.gid,c=typeof o=="number"&&typeof a=="number"&&(o!==e.processUid||a!==e.processGid),l=e.preserve,d=e.unlink,p=N(e.cwd),m=(h,g)=>{h?n(h):g&&c?qu(g,o,a,w=>m(w)):s?De.chmod(t,i,n):n()};if(t===p)return Py(t,m);if(l)return Oy.mkdir(t,{mode:i,recursive:!0}).then(h=>m(null,h??void 0),m);let u=N(Ps.relative(p,t)).split("/");$a(p,u,i,d,p,void 0,m)},$a=(t,e,n,r,i,s,o)=>{if(e.length===0)return o(null,s);let a=e.shift(),c=N(Ps.resolve(t+"/"+a));De.mkdir(c,n,Zu(c,e,n,r,i,s,o))},Zu=(t,e,n,r,i,s,o)=>a=>{a?De.lstat(t,(c,l)=>{if(c)c.path=c.path&&N(c.path),o(c);else if(l.isDirectory())$a(t,e,n,r,i,s,o);else if(r)De.unlink(t,d=>{if(d)return o(d);De.mkdir(t,n,Zu(t,e,n,r,i,s,o))});else{if(l.isSymbolicLink())return o(new Bs(t,t+"/"+e.join("/")));o(a)}}):(s=s||t,$a(t,e,n,r,i,s,o))},Dy=t=>{let e=!1,n;try{e=De.statSync(t).isDirectory()}catch(r){n=r?.code}finally{if(!e)throw new Ju(t,n??"ENOTDIR")}},Ny=(t,e)=>{t=N(t);let n=e.umask??18,r=e.mode|448,i=(r&n)!==0,s=e.uid,o=e.gid,a=typeof s=="number"&&typeof o=="number"&&(s!==e.processUid||o!==e.processGid),c=e.preserve,l=e.unlink,d=N(e.cwd),p=h=>{h&&a&&Vu(h,s,o),i&&De.chmodSync(t,r)};if(t===d)return Dy(d),p();if(c)return p(De.mkdirSync(t,{mode:r,recursive:!0})??void 0);let m=N(Ps.relative(d,t)).split("/"),u;for(let h=m.shift(),g=d;h&&(g+="/"+h);h=m.shift()){g=N(Ps.resolve(g));try{De.mkdirSync(g,r),u=u||g}catch{let w=De.lstatSync(g);if(w.isDirectory())continue;if(l){De.unlinkSync(g),De.mkdirSync(g,r),u=u||g;continue}else if(w.isSymbolicLink())return new Bs(g,g+"/"+m.join("/"))}}return p(u)},va=Object.create(null),du=1e4,Gn=new Set,Ly=t=>{Gn.has(t)?Gn.delete(t):va[t]=t.normalize("NFD").toLocaleLowerCase("en").toLocaleUpperCase("en"),Gn.add(t);let e=va[t],n=Gn.size-du;if(n>du/10){for(let r of Gn)if(Gn.delete(r),delete va[r],--n<=0)break}return e},Fy=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,My=Fy==="win32",By=t=>t.split("/").slice(0,-1).reduce((e,n)=>{let r=e.at(-1);return r!==void 0&&(n=Ku(r,n)),e.push(n||"/"),e},[]),Uy=class{#e=new Map;#n=new Map;#r=new Set;reserve(t,e){t=My?["win32 parallelization disabled"]:t.map(r=>Vr(Ku(Ly(r))));let n=new Set(t.map(r=>By(r)).reduce((r,i)=>r.concat(i)));this.#n.set(e,{dirs:n,paths:t});for(let r of t){let i=this.#e.get(r);i?i.push(e):this.#e.set(r,[e])}for(let r of n){let i=this.#e.get(r);if(!i)this.#e.set(r,[new Set([e])]);else{let s=i.at(-1);s instanceof Set?s.add(e):i.push(new Set([e]))}}return this.#i(e)}#s(t){let e=this.#n.get(t);if(!e)throw new Error("function does not have any path reservations");return{paths:e.paths.map(n=>this.#e.get(n)),dirs:[...e.dirs].map(n=>this.#e.get(n))}}check(t){let{paths:e,dirs:n}=this.#s(t);return e.every(r=>r&&r[0]===t)&&n.every(r=>r&&r[0]instanceof Set&&r[0].has(t))}#i(t){return this.#r.has(t)||!this.check(t)?!1:(this.#r.add(t),t(()=>this.#t(t)),!0)}#t(t){if(!this.#r.has(t))return!1;let e=this.#n.get(t);if(!e)throw new Error("invalid reservation");let{paths:n,dirs:r}=e,i=new Set;for(let s of n){let o=this.#e.get(s);if(!o||o?.[0]!==t)continue;let a=o[1];if(!a){this.#e.delete(s);continue}if(o.shift(),typeof a=="function")i.add(a);else for(let c of a)i.add(c)}for(let s of r){let o=this.#e.get(s),a=o?.[0];if(!(!o||!(a instanceof Set)))if(a.size===1&&o.length===1){this.#e.delete(s);continue}else if(a.size===1){o.shift();let c=o[0];typeof c=="function"&&i.add(c)}else a.delete(t)}return this.#r.delete(t),i.forEach(s=>this.#i(s)),!0}},zy=()=>process.umask(),uu=Symbol("onEntry"),Ga=Symbol("checkFs"),fu=Symbol("checkFs2"),Ha=Symbol("isReusable"),Be=Symbol("makeFs"),ja=Symbol("file"),Wa=Symbol("directory"),ks=Symbol("link"),hu=Symbol("symlink"),pu=Symbol("hardlink"),Wr=Symbol("ensureNoSymlink"),gu=Symbol("unsupported"),mu=Symbol("checkPath"),Ia=Symbol("stripAbsolutePath"),Ut=Symbol("mkdir"),he=Symbol("onError"),gs=Symbol("pending"),wu=Symbol("pend"),Hn=Symbol("unpend"),Ta=Symbol("ended"),Ra=Symbol("maybeClose"),qa=Symbol("skip"),Zr=Symbol("doChown"),Kr=Symbol("uid"),Xr=Symbol("gid"),Yr=Symbol("checkedCwd"),$y=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,Qr=$y==="win32",Gy=1024,Hy=(t,e)=>{if(!Qr)return B.unlink(t,e);let n=t+".DELETE."+Bu(16).toString("hex");B.rename(t,n,r=>{if(r)return e(r);B.unlink(n,e)})},jy=t=>{if(!Qr)return B.unlinkSync(t);let e=t+".DELETE."+Bu(16).toString("hex");B.renameSync(t,e),B.unlinkSync(e)},yu=(t,e,n)=>t!==void 0&&t===t>>>0?t:e!==void 0&&e===e>>>0?e:n,nc=class extends ei{[Ta]=!1;[Yr]=!1;[gs]=0;reservations=new Uy;transform;writable=!0;readable=!1;uid;gid;setOwner;preserveOwner;processGid;processUid;maxDepth;forceChown;win32;newer;keep;noMtime;preservePaths;unlink;cwd;strip;processUmask;umask;dmode;fmode;chmod;constructor(t={}){if(t.ondone=()=>{this[Ta]=!0,this[Ra]()},super(t),this.transform=t.transform,this.chmod=!!t.chmod,typeof t.uid=="number"||typeof t.gid=="number"){if(typeof t.uid!="number"||typeof t.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(t.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=t.uid,this.gid=t.gid,this.setOwner=!0}else this.uid=void 0,this.gid=void 0,this.setOwner=!1;this.preserveOwner=t.preserveOwner===void 0&&typeof t.uid!="number"?!!(process.getuid&&process.getuid()===0):!!t.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():void 0,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():void 0,this.maxDepth=typeof t.maxDepth=="number"?t.maxDepth:Gy,this.forceChown=t.forceChown===!0,this.win32=!!t.win32||Qr,this.newer=!!t.newer,this.keep=!!t.keep,this.noMtime=!!t.noMtime,this.preservePaths=!!t.preservePaths,this.unlink=!!t.unlink,this.cwd=N(ie.resolve(t.cwd||process.cwd())),this.strip=Number(t.strip)||0,this.processUmask=this.chmod?typeof t.processUmask=="number"?t.processUmask:zy():0,this.umask=typeof t.umask=="number"?t.umask:this.processUmask,this.dmode=t.dmode||511&~this.umask,this.fmode=t.fmode||438&~this.umask,this.on("entry",e=>this[uu](e))}warn(t,e,n={}){return(t==="TAR_BAD_ARCHIVE"||t==="TAR_ABORT")&&(n.recoverable=!1),super.warn(t,e,n)}[Ra](){this[Ta]&&this[gs]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"))}[Ia](t,e){let n=t[e],{type:r}=t;if(!n||this.preservePaths)return!0;let[i,s]=Ya(n),o=s.replaceAll(/\\/g,"/").split("/");if(o.includes("..")||Qr&&/^[a-z]:\.\.$/i.test(o[0]??"")){if(e==="path"||r==="Link")return this.warn("TAR_ENTRY_ERROR",`${e} contains '..'`,{entry:t,[e]:n}),!1;let a=ie.posix.dirname(t.path),c=ie.posix.normalize(ie.posix.join(a,o.join("/")));if(c.startsWith("../")||c==="..")return this.warn("TAR_ENTRY_ERROR",`${e} escapes extraction directory`,{entry:t,[e]:n}),!1}return i&&(t[e]=String(s),this.warn("TAR_ENTRY_INFO",`stripping ${i} from absolute ${e}`,{entry:t,[e]:n})),!0}[mu](t){let e=N(t.path),n=e.split("/");if(this.strip){if(n.length<this.strip)return!1;if(t.type==="Link"){let r=N(String(t.linkpath)).split("/");if(r.length>=this.strip)t.linkpath=r.slice(this.strip).join("/");else return!1}n.splice(0,this.strip),t.path=n.join("/")}if(isFinite(this.maxDepth)&&n.length>this.maxDepth)return this.warn("TAR_ENTRY_ERROR","path excessively deep",{entry:t,path:e,depth:n.length,maxDepth:this.maxDepth}),!1;if(!this[Ia](t,"path")||!this[Ia](t,"linkpath"))return!1;if(t.absolute=ie.isAbsolute(t.path)?N(ie.resolve(t.path)):N(ie.resolve(this.cwd,t.path)),!this.preservePaths&&typeof t.absolute=="string"&&t.absolute.indexOf(this.cwd+"/")!==0&&t.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:t,path:N(t.path),resolvedPath:t.absolute,cwd:this.cwd}),!1;if(t.absolute===this.cwd&&t.type!=="Directory"&&t.type!=="GNUDumpDir")return!1;if(this.win32){let{root:r}=ie.win32.parse(String(t.absolute));t.absolute=r+Yd(String(t.absolute).slice(r.length));let{root:i}=ie.win32.parse(t.path);t.path=i+Yd(t.path.slice(i.length))}return!0}[uu](t){if(!this[mu](t))return t.resume();switch(Iy.equal(typeof t.absolute,"string"),t.type){case"Directory":case"GNUDumpDir":t.mode&&(t.mode=t.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[Ga](t);default:return this[gu](t)}}[he](t,e){t.name==="CwdError"?this.emit("error",t):(this.warn("TAR_ENTRY_ERROR",t,{entry:e}),this[Hn](),e.resume())}[Ut](t,e,n){Cy(N(t),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cwd:this.cwd,mode:e},n)}[Zr](t){return this.forceChown||this.preserveOwner&&(typeof t.uid=="number"&&t.uid!==this.processUid||typeof t.gid=="number"&&t.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[Kr](t){return yu(this.uid,t.uid,this.processUid)}[Xr](t){return yu(this.gid,t.gid,this.processGid)}[ja](t,e){let n=typeof t.mode=="number"?t.mode&4095:this.fmode,r=new Cs(String(t.absolute),{flags:Wu(t.size),mode:n,autoClose:!1});r.on("error",a=>{r.fd&&B.close(r.fd,()=>{}),r.write=()=>!0,this[he](a,t),e()});let i=1,s=a=>{if(a){r.fd&&B.close(r.fd,()=>{}),this[he](a,t),e();return}--i===0&&r.fd!==void 0&&B.close(r.fd,c=>{c?this[he](c,t):this[Hn](),e()})};r.on("finish",()=>{let a=String(t.absolute),c=r.fd;if(typeof c=="number"&&t.mtime&&!this.noMtime){i++;let l=t.atime||new Date,d=t.mtime;B.futimes(c,l,d,p=>p?B.utimes(a,l,d,m=>s(m&&p)):s())}if(typeof c=="number"&&this[Zr](t)){i++;let l=this[Kr](t),d=this[Xr](t);typeof l=="number"&&typeof d=="number"&&B.fchown(c,l,d,p=>p?B.chown(a,l,d,m=>s(m&&p)):s())}s()});let o=this.transform&&this.transform(t)||t;o!==t&&(o.on("error",a=>{this[he](a,t),e()}),t.pipe(o)),o.pipe(r)}[Wa](t,e){let n=typeof t.mode=="number"?t.mode&4095:this.dmode;this[Ut](String(t.absolute),n,r=>{if(r){this[he](r,t),e();return}let i=1,s=()=>{--i===0&&(e(),this[Hn](),t.resume())};t.mtime&&!this.noMtime&&(i++,B.utimes(String(t.absolute),t.atime||new Date,t.mtime,s)),this[Zr](t)&&(i++,B.chown(String(t.absolute),Number(this[Kr](t)),Number(this[Xr](t)),s)),s()})}[gu](t){t.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${t.type}`,{entry:t}),t.resume()}[hu](t,e){let n=N(ie.relative(this.cwd,ie.resolve(ie.dirname(String(t.absolute)),String(t.linkpath)))).split("/");this[Wr](t,this.cwd,n,()=>this[ks](t,String(t.linkpath),"symlink",e),r=>{this[he](r,t),e()})}[pu](t,e){let n=N(ie.resolve(this.cwd,String(t.linkpath))),r=N(String(t.linkpath)).split("/");this[Wr](t,this.cwd,r,()=>this[ks](t,n,"link",e),i=>{this[he](i,t),e()})}[Wr](t,e,n,r,i){let s=n.shift();if(this.preservePaths||s===void 0)return r();let o=ie.resolve(e,s);B.lstat(o,(a,c)=>{if(a)return r();if(c?.isSymbolicLink())return i(new Bs(o,ie.resolve(o,n.join("/"))));this[Wr](t,o,n,r,i)})}[wu](){this[gs]++}[Hn](){this[gs]--,this[Ra]()}[qa](t){this[Hn](),t.resume()}[Ha](t,e){return t.type==="File"&&!this.unlink&&e.isFile()&&e.nlink<=1&&!Qr}[Ga](t){this[wu]();let e=[t.path];t.linkpath&&e.push(t.linkpath),this.reservations.reserve(e,n=>this[fu](t,n))}[fu](t,e){let n=o=>{e(o)},r=()=>{this[Ut](this.cwd,this.dmode,o=>{if(o){this[he](o,t),n();return}this[Yr]=!0,i()})},i=()=>{if(t.absolute!==this.cwd){let o=N(ie.dirname(String(t.absolute)));if(o!==this.cwd)return this[Ut](o,this.dmode,a=>{if(a){this[he](a,t),n();return}s()})}s()},s=()=>{B.lstat(String(t.absolute),(o,a)=>{if(a&&(this.keep||this.newer&&a.mtime>(t.mtime??a.mtime))){this[qa](t),n();return}if(o||this[Ha](t,a))return this[Be](null,t,n);if(a.isDirectory()){if(t.type==="Directory"){let c=this.chmod&&t.mode&&(a.mode&4095)!==t.mode,l=d=>this[Be](d??null,t,n);return c?B.chmod(String(t.absolute),Number(t.mode),l):l()}if(t.absolute!==this.cwd)return B.rmdir(String(t.absolute),c=>this[Be](c??null,t,n))}if(t.absolute===this.cwd)return this[Be](null,t,n);Hy(String(t.absolute),c=>this[Be](c??null,t,n))})};this[Yr]?i():r()}[Be](t,e,n){if(t){this[he](t,e),n();return}switch(e.type){case"File":case"OldFile":case"ContiguousFile":return this[ja](e,n);case"Link":return this[pu](e,n);case"SymbolicLink":return this[hu](e,n);case"Directory":case"GNUDumpDir":return this[Wa](e,n)}}[ks](t,e,n,r){B[n](e,String(t.absolute),i=>{i?this[he](i,t):(this[Hn](),t.resume()),r()})}},Hr=t=>{try{return[null,t()]}catch(e){return[e,null]}},Xu=class extends nc{sync=!0;[Be](t,e){return super[Be](t,e,()=>{})}[Ga](t){if(!this[Yr]){let i=this[Ut](this.cwd,this.dmode);if(i)return this[he](i,t);this[Yr]=!0}if(t.absolute!==this.cwd){let i=N(ie.dirname(String(t.absolute)));if(i!==this.cwd){let s=this[Ut](i,this.dmode);if(s)return this[he](s,t)}}let[e,n]=Hr(()=>B.lstatSync(String(t.absolute)));if(n&&(this.keep||this.newer&&n.mtime>(t.mtime??n.mtime)))return this[qa](t);if(e||this[Ha](t,n))return this[Be](null,t);if(n.isDirectory()){if(t.type==="Directory"){let s=this.chmod&&t.mode&&(n.mode&4095)!==t.mode,[o]=s?Hr(()=>{B.chmodSync(String(t.absolute),Number(t.mode))}):[];return this[Be](o,t)}let[i]=Hr(()=>B.rmdirSync(String(t.absolute)));this[Be](i,t)}let[r]=t.absolute===this.cwd?[]:Hr(()=>jy(String(t.absolute)));this[Be](r,t)}[ja](t,e){let n=typeof t.mode=="number"?t.mode&4095:this.fmode,r=o=>{let a;try{B.closeSync(i)}catch(c){a=c}(o||a)&&this[he](o||a,t),e()},i;try{i=B.openSync(String(t.absolute),Wu(t.size),n)}catch(o){return r(o)}let s=this.transform&&this.transform(t)||t;s!==t&&(s.on("error",o=>this[he](o,t)),t.pipe(s)),s.on("data",o=>{try{B.writeSync(i,o,0,o.length)}catch(a){r(a)}}),s.on("end",()=>{let o=null;if(t.mtime&&!this.noMtime){let a=t.atime||new Date,c=t.mtime;try{B.futimesSync(i,a,c)}catch(l){try{B.utimesSync(String(t.absolute),a,c)}catch{o=l}}}if(this[Zr](t)){let a=this[Kr](t),c=this[Xr](t);try{B.fchownSync(i,Number(a),Number(c))}catch(l){try{B.chownSync(String(t.absolute),Number(a),Number(c))}catch{o=o||l}}}r(o)})}[Wa](t,e){let n=typeof t.mode=="number"?t.mode&4095:this.dmode,r=this[Ut](String(t.absolute),n);if(r){this[he](r,t),e();return}if(t.mtime&&!this.noMtime)try{B.utimesSync(String(t.absolute),t.atime||new Date,t.mtime)}catch{}if(this[Zr](t))try{B.chownSync(String(t.absolute),Number(this[Kr](t)),Number(this[Xr](t)))}catch{}e(),t.resume()}[Ut](t,e){try{return Ny(N(t),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cwd:this.cwd,mode:e})}catch(n){return n}}[Wr](t,e,n,r,i){if(this.preservePaths||n.length===0)return r();let s=e;for(let o of n){s=ie.resolve(s,o);let[a,c]=Hr(()=>B.lstatSync(s));if(a)return r();if(c.isSymbolicLink())return i(new Bs(s,ie.resolve(e,n.join("/"))))}r()}[ks](t,e,n,r){let i=`${n}Sync`;try{B[i](e,String(t.absolute)),r(),t.resume()}catch(s){return this[he](s,t)}}},Wy=t=>{let e=new Xu(t),n=t.file,r=Mu.statSync(n),i=t.maxReadSize||16*1024*1024;new uw(n,{readSize:i,size:r.size}).pipe(e)},qy=(t,e)=>{let n=new nc(t),r=t.maxReadSize||16*1024*1024,i=t.file;return new Promise((s,o)=>{n.on("error",o),n.on("close",s),Mu.stat(i,(a,c)=>{if(a)o(a);else{let l=new Ja(i,{readSize:r,size:c.size});l.on("error",o),l.pipe(n)}})})},Yu=ti(Wy,qy,t=>new Xu(t),t=>new nc(t),(t,e)=>{e?.length&&Ou(t,e)}),Vy=(t,e)=>{let n=new tc(t),r=!0,i,s;try{try{i=Ce.openSync(t.file,"r+")}catch(c){if(c?.code==="ENOENT")i=Ce.openSync(t.file,"w+");else throw c}let o=Ce.fstatSync(i),a=Buffer.alloc(512);e:for(s=0;s<o.size;s+=512){for(let d=0,p=0;d<512;d+=p){if(p=Ce.readSync(i,a,d,a.length-d,s+d),s===0&&a[0]===31&&a[1]===139)throw new Error("cannot append to compressed archives");if(!p)break e}let c=new gn(a);if(!c.cksumValid)break;let l=512*Math.ceil((c.size||0)/512);if(s+l+512>o.size)break;s+=l,t.mtimeCache&&c.mtime&&t.mtimeCache.set(String(c.path),c.mtime)}r=!1,Jy(t,n,s,i,e)}finally{if(r)try{Ce.closeSync(i)}catch{}}},Jy=(t,e,n,r,i)=>{let s=new Su(t.file,{fd:r,start:n});e.pipe(s),Ky(e,i)},Zy=(t,e)=>{e=Array.from(e);let n=new Fs(t),r=(i,s,o)=>{let a=(m,u)=>{m?Ce.close(i,h=>o(m)):o(null,u)},c=0;if(s===0)return a(null,0);let l=0,d=Buffer.alloc(512),p=(m,u)=>{if(m||u===void 0)return a(m);if(l+=u,l<512&&u)return Ce.read(i,d,l,d.length-l,c+l,p);if(c===0&&d[0]===31&&d[1]===139)return a(new Error("cannot append to compressed archives"));if(l<512)return a(null,c);let h=new gn(d);if(!h.cksumValid)return a(null,c);let g=512*Math.ceil((h.size??0)/512);if(c+g+512>s||(c+=g+512,c>=s))return a(null,c);t.mtimeCache&&h.mtime&&t.mtimeCache.set(String(h.path),h.mtime),l=0,Ce.read(i,d,0,512,c,p)};Ce.read(i,d,0,512,c,p)};return new Promise((i,s)=>{n.on("error",s);let o="r+",a=(c,l)=>{if(c&&c.code==="ENOENT"&&o==="r+")return o="w+",Ce.open(t.file,o,a);if(c||!l)return s(c);Ce.fstat(l,(d,p)=>{if(d)return Ce.close(l,()=>s(d));r(l,p.size,(m,u)=>{if(m)return s(m);let h=new Cs(t.file,{fd:l,start:u});n.pipe(h),h.on("error",s),h.on("close",i),Xy(n,e)})})};Ce.open(t.file,o,a)})},Ky=(t,e)=>{e.forEach(n=>{n.charAt(0)==="@"?Xn({file:Qu.resolve(t.cwd,n.slice(1)),sync:!0,noResume:!0,onReadEntry:r=>t.add(r)}):t.add(n)}),t.end()},Xy=async(t,e)=>{for(let n of e)n.charAt(0)==="@"?await Xn({file:Qu.resolve(String(t.cwd),n.slice(1)),noResume:!0,onReadEntry:r=>t.add(r)}):t.add(n);t.end()},jr=ti(Vy,Zy,()=>{throw new TypeError("file is required")},()=>{throw new TypeError("file is required")},(t,e)=>{if(!_w(t))throw new TypeError("file is required");if(t.gzip||t.brotli||t.zstd||t.file.endsWith(".br")||t.file.endsWith(".tbr"))throw new TypeError("cannot append to compressed archives");if(!e?.length)throw new TypeError("no paths specified to add/replace")}),kk=ti(jr.syncFile,jr.asyncFile,jr.syncNoFile,jr.asyncNoFile,(t,e=[])=>{jr.validate?.(t,e),Yy(t)}),Yy=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(n,r)=>e(n,r)&&!((t.mtimeCache?.get(n)??r.mtime??0)>(r.mtime??0)):(n,r)=>!((t.mtimeCache?.get(n)??r.mtime??0)>(r.mtime??0))};At();var Ze={PAIR:"_agent/pair",CREATE:"_agent/create",HEALTH:"_agent/health",LIST_SKILLS:"_agent/listSkills",ADD_SKILLS:"_agent/addSkills",REMOVE_SKILLS:"_agent/removeSkills",GET_FILE_TREE:"_agent/getFileTree",GET_FILE_CONTENT:"_agent/getFileContent",DETAIL:"_agent/detail",UPDATE:"_agent/update",DISCONNECT:"_agent/disconnect",SWITCH_MODEL:"_agent/switchModel",GEN_MODEL_TOKEN:"_agent/genModelToken",RESET:"_agent/reset",REPAIR:"_agent/repair",DELETE:"_agent/delete"};function ni(t){return t?.cozeDeployType==="cloud"?"cloud":"local"}function ef(t){let e=t?.cozeAccountId?.trim();if(!(!e||e==="0"))return e}function rc(t){let e=t?.cozeGroupId?.trim();if(!(!e||e==="0"))return e}function tf(t){let{_meta:e,...n}=t;return{stripped:n,meta:e}}function Yn(t){if(!t?.cozeAgentId)throw new Error("missing _meta.cozeAgentId");return t.cozeAgentId}Te();L();le();Te();function vt(t,e){if(ni(t)!=="cloud")throw new _("OPERATION_NOT_ALLOWED_FOR_LOCAL",`${e} is not allowed for local agent`)}function Us(t){return t.startsWith("http://")||t.startsWith("https://")}function zs(t){return t.endsWith("/")?t.slice(0,-1):t}Te();L();var $s="1008033",nf="1289";var rf="pbbp2",sf="https://www.coze.cn",of="/api/coze_claw/resource/get_frontier_key",e_="https://www.coze.cn",t_="wss://frontier.coze.cn";function Gs(t){return t??process.env.COZE_BRIDGE_HANDSHAKE_URL??e_}function af(t){return t??process.env.COZE_BRIDGE_FRONTIER_URL??t_}function Qn(t){let e={},n=t?.ttEnv??process.env.COZE_BRIDGE_TT_ENV,r=t?.usePpe??process.env.COZE_BRIDGE_USE_PPE;return n&&(e["x-tt-env"]=n),r&&(e["x-use-ppe"]=r),e}function ii(t){return t?t.startsWith("boe_")?{ttEnv:t}:{ttEnv:t,usePpe:"1"}:{}}var ri=b("handshake");async function ic(t){let e=Gs(t.endpoint),n=t.timeoutMs??1e4,r=`${zs(e)}${of}?aid=${encodeURIComponent($s)}`,i={Authorization:`Bearer ${t.privatecode}`,Accept:"application/json",...Qn(t.ppeOverride)},s=new AbortController,o=setTimeout(()=>s.abort(),n);ri.info("frontier key handshake",{base:e});try{let a=await fetch(r,{method:"GET",headers:i,signal:s.signal}),c=a.headers.get("x-tt-logid")??"",l=a.headers.get("x-tt-trace-id")??"";if(!a.ok){let h=await a.text().catch(()=>"");throw new _("UPSTREAM_HANDSHAKE_FAILED",`handshake HTTP ${a.status} logid=${c}: ${h.slice(0,200)}`)}let d=await a.json();if(d.code!==void 0&&d.code!==0)throw new _("UPSTREAM_HANDSHAKE_FAILED",`handshake code=${d.code} msg=${d.msg??"-"} logid=${c}`);let p=d.data??{},m=typeof p.access_key=="string"&&p.access_key||typeof p.accessKey=="string"&&p.accessKey||void 0,u=typeof p.device_id=="string"&&p.device_id||typeof p.deviceId=="string"&&p.deviceId||void 0;if(!m||!u){let h=JSON.stringify(d).slice(0,500);throw new _("UPSTREAM_HANDSHAKE_FAILED",`handshake response missing access_key/device_id (also tried camelCase) logid=${c}: ${h}`)}return ri.info("handshake ok",{remoteDeviceId:u,logid:c,traceId:l}),{accessKey:m,deviceId:u}}catch(a){if(a instanceof _)throw ri.error("handshake failed (bridge error)",{base:e,message:a.message,code:a.code}),a;if(a.name==="AbortError")throw ri.warn("handshake timeout",{base:e,timeoutMs:n}),new _("UPSTREAM_HANDSHAKE_FAILED",`handshake timeout (${n}ms)`,{cause:a});let c=a.cause;throw ri.error("handshake error",{base:e,message:a instanceof Error?a.message:String(a),errno:c?.code,syscall:c?.syscall,cause:String(a).slice(0,300)}),new _("UPSTREAM_HANDSHAKE_FAILED",String(a),{cause:a})}finally{clearTimeout(o)}}var sc=process.env.COZE_BRIDGE_LLM_GATEWAY_URL?.trim()||"https://llm-gateway.coze.cn",Ke="auto",cf=2e5;function lf(t){return{model:oc(t.model)??Ke,...t.modelToken?{modelToken:t.modelToken}:{}}}function df(t){return!t||t===Ke}var n_=new Set(["auto","\u81EA\u52A8"]);function oc(t){let e=t?.trim();if(e)return n_.has(e.toLowerCase())?Ke:e}function uf(t){let e={};if(t.modelToken){e.ANTHROPIC_BASE_URL=sc,e.ANTHROPIC_AUTH_TOKEN=t.modelToken;let n=t.model||Ke;e.ANTHROPIC_MODEL=n,e.ANTHROPIC_SMALL_FAST_MODEL=n,t.modelInfo?.contextWindow&&(e.CLAUDE_CODE_MAX_CONTEXT_TOKENS=String(t.modelInfo.contextWindow))}else df(t.model)||(e.ANTHROPIC_MODEL=t.model);return e}function ff(t){let e=[];if(t.modelToken?e.push("-c",`model="${t.model||Ke}"`):df(t.model)||e.push("-c",`model="${t.model}"`),t.modelToken){e.push("-c",'model_providers.coze.name="coze"'),e.push("-c",`model_providers.coze.base_url="${sc}/v1"`),e.push("-c",'model_providers.coze.env_key="OPENAI_API_KEY"'),e.push("-c",'model_providers.coze.wire_api="responses"'),e.push("-c","model_providers.coze.requires_openai_auth=false"),e.push("-c","model_providers.coze.supports_websockets=false"),e.push("-c",'model_provider="coze"');let n=t.modelInfo?.contextWindow??cf;e.push("-c",`model_context_window=${n}`)}return e}function hf(t){return t.modelToken?{OPENAI_API_KEY:t.modelToken}:{}}function ac(t,e){let{ttEnv:n,usePpe:r}=ii(t),i={};return n&&(i["x-tt-env"]=n),r&&(i["x-use-ppe"]=r),e&&(i["x-mock-scenario"]=e),i}function pf(t,e,n){if(!t.modelToken)return{};let r=ac(e,n);return Object.keys(r).length===0?{}:{ANTHROPIC_CUSTOM_HEADERS:Object.entries(r).map(([s,o])=>`${s}:${o}`).join(`
91
- `)}}function cc(t){return`coze-session-${t.replace(/[^A-Za-z0-9_-]+/g,"-")}`}function gf(t,e,n){if(!t.modelToken)return null;let r=t.model||Ke,i=ac(e,n),s=["text"];t.modelInfo?.capabilities?.image===!0&&s.push("image");let o={baseUrl:`${sc}/v1`,api:"openai-completions",apiKey:t.modelToken,models:[{id:r,name:r,reasoning:!1,input:s,cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:t.modelInfo?.contextWindow??cf,maxTokens:8192,api:"openai-completions"}]};return Object.keys(i).length>0&&(o.headers=i),o}function mf(t,e,n){if(!t.modelToken)return[];let r=ac(e,n),i=[];for(let[s,o]of Object.entries(r))i.push("-c",`model_providers.coze.http_headers.${s}="${o}"`);return i}var se=b("agent-handlers"),wf=5*1024*1024,c_=1,l_=6,d_=new Set(["node_modules",".git",".coze","dist","build",".next"]),Hs=class{constructor(e){this.opts=e}opts;async listSkills(e){vt(e._meta,"_agent/listSkills");let n=Yn(e._meta),r=await this.loadAgentCfg(n),i=r?.workspace??be(n).workspace,s=r?.skills??[],o=[];for(let a of s){let c=at(i,a.relPath,"SKILL.md");await s_(c).then(d=>d.isFile()).catch(()=>!1)&&o.push(g_(a))}return{skills:o}}async addSkills(e){vt(e._meta,"_agent/addSkills");let n=Yn(e._meta),r=await this.requireAgentCfg(n),i=e.skills??[],s=[...r.skills??[]],o=new Map(s.map((c,l)=>[c.skillId,l])),a=[];for(let c of i){let l=await gc({agentId:n,workspace:r.workspace,framework:r.framework,skill:c});mc(s,o,l),a.push(c)}return await Ji(n,s),this.reloadAgentSessions(n,"skills-added"),{installedSkills:a}}async removeSkills(e){vt(e._meta,"_agent/removeSkills");let n=Yn(e._meta),r=await this.requireAgentCfg(n),i=new Set(e.skillIds??[]),s=r.skills??[],o=[];for(let a of s){if(!i.has(a.skillId)){o.push(a);continue}let c=at(r.workspace,a.relPath);await i_(c,{recursive:!0,force:!0}),se.info("skill removed",{agentId:n,skillId:a.skillId,relPath:a.relPath})}return await Ji(n,o),this.reloadAgentSessions(n,"skills-removed"),{ok:!0}}reloadAgentSessionsPublic(e,n){this.reloadAgentSessions(e,n)}reloadAgentSessions(e,n){let r=this.opts.agents.get(e);if(r)for(let[i,s]of r.sessions){if(!s.downstream)continue;let o=s.acpSessionId;if(o&&r.activeTriggers.has(o)||this.isRuntimePendingPermission(s)){s.reloadAfterTurn=!0,se.info("downstream busy, scheduling reload after turn",{reason:n,agentId:e,framework:r.framework,cloudId:i,acpId:o});continue}let c=s.downstream;s.downstream=void 0,se.info("killing downstream for workspace reload (idle)",{reason:n,agentId:e,framework:r.framework,cloudId:i,acpId:o}),c.stop(n).catch(l=>se.warn("downstream stop failed during reload (ignored)",{reason:n,agentId:e,cloudId:i,err:String(l)}))}}isRuntimePendingPermission(e){let n=this.opts.isRuntimePendingPermission;return!n||!e.downstream?!1:n(e.downstream)}async updateAgent(e){if(!e.cozeIdentity?.trim())return se.info("_agent/update: empty cozeIdentity, noop",{agentId:e.agentId}),{ok:!0};let n=e.agentId,r=await me(n);if(!r)throw new _("AGENT_NOT_FOUND",`agent not found: ${n}`);if(r.cozeIdentity===e.cozeIdentity)return se.info("_agent/update: cozeIdentity unchanged, noop",{agentId:n}),{ok:!0};try{await Ln(r.workspace,r.framework,e.cozeIdentity)}catch(i){throw se.error("_agent/update: writeInstructionFile failed, aborting update",{agentId:n,framework:r.framework,workspace:r.workspace,err:String(i)}),new _("AGENT_PROTOCOL_ERROR",`failed to write instruction file for agent ${n}: ${String(i)}`,{cause:i})}return r.cozeIdentity=e.cozeIdentity,await Ae(r),se.info("_agent/update: cozeIdentity rewritten",{agentId:n,framework:r.framework}),this.reloadAgentSessions(n,"identity-changed"),{ok:!0}}async disconnectAgent(e){let n=e.agentId;if(!n)throw new _("IPC_BAD_REQUEST","_agent/disconnect: missing agentId");let r=await me(n);return r?(r.disconnectedAt=Date.now(),r.disconnectReason=e.reason??"",await Ae(r),se.info("agent disconnected",{agentId:n,reason:e.reason??"",force:e.force??!1}),this.opts.disposeAndMarkDisconnected&&await this.opts.disposeAndMarkDisconnected(n,e.reason??"disconnect"),{ok:!0}):(se.warn("_agent/disconnect: agent not found, ignoring",{agentId:n}),{ok:!0})}async switchModel(e){if(vt(e._meta,"_agent/switchModel"),!e.agentId)throw new _("IPC_BAD_REQUEST","_agent/switchModel: missing agentId");let n=oc(e.model)??Ke,r=await me(e.agentId);if(!r)throw new _("AGENT_NOT_FOUND",`agent not found: ${e.agentId}`);r.model=n,e.modelInfo&&(r.modelInfo=e.modelInfo),await Ae(r),se.info("_agent/switchModel: model persisted",{agentId:e.agentId,model:n,reason:e.reason??""});let i=this.opts.agents.get(e.agentId);if(!i)return se.info("_agent/switchModel: agent not running, config persisted only",{agentId:e.agentId}),{ok:!0};i.model=n,e.modelInfo&&i.setModelInfo(e.modelInfo),this.opts.cleanupOpenclawProviders&&await this.opts.cleanupOpenclawProviders(i).catch(o=>se.warn("cleanupOpenclawProviders before switchModel failed (ignored)",{agentId:e.agentId,err:String(o)}));let s=[];for(let[o,a]of i.allSessionQueues())s.push(a.enqueue(async()=>{let c=i.sessions.get(o);c?.downstream&&(await c.downstream.stop(`switchModel: ${n}`).catch(()=>{}),c.downstream=void 0)}));return await Promise.all(s),se.info("_agent/switchModel: all session runtimes killed, next prompt will respawn",{agentId:e.agentId,model:n,cloudSessions:s.length}),{ok:!0}}async resetAgent(e){if(vt(e._meta,Ze.RESET),!e.agentId)throw new _("IPC_BAD_REQUEST",`${Ze.RESET}: missing agentId`);return await this.clearSessionMappings(e.agentId,Ze.RESET),await this.runDetailSync(e.agentId,Ze.RESET,e.reason),{ok:!0}}async clearSessionMappings(e,n){let r=this.opts.agents.get(e);if(!r){await this.clearPersistedAcpSessionIds(e),se.info("reset: agent not in memory, cleared persisted acpSessionIds only",{agentId:e});return}await r.killAllRuntimes(n);for(let s of r.sessions.values())s.acpSessionId=void 0,s.replySeq=0,s.loadingSession=!1,s.spawnFailCount=void 0,s.spawnFailedAt=void 0;let i=new Map;for(let[s,o]of r.sessions)i.set(s,{modelToken:o.modelToken,tokenGeneratedAt:o.tokenGeneratedAt});await xr(e,i)}async clearPersistedAcpSessionIds(e){let n=await me(e).catch(()=>null);if(!n?.sessions)return;let r=!1;for(let i of Object.values(n.sessions))i.acpSessionId&&(i.acpSessionId=void 0,r=!0);r&&await Ae(n)}async repairAgent(e){if(vt(e._meta,Ze.REPAIR),!e.agentId)throw new _("IPC_BAD_REQUEST",`${Ze.REPAIR}: missing agentId`);let n=await this.loadAgentCfg(e.agentId);if(n&&n.framework!=="openclaw")throw new _("IPC_BAD_REQUEST",`${Ze.REPAIR} only allowed for openclaw, got ${n.framework}`);if(n&&this.opts.openclawRepair)try{await this.opts.openclawRepair(e.agentId,n.workspace)}catch(r){se.warn("openclaw repair (delete+add) failed (ignored)",{agentId:e.agentId,reason:e.reason,err:String(r)})}return await this.runDetailSync(e.agentId,Ze.REPAIR,e.reason),{ok:!0}}async runDetailSync(e,n,r){if(!this.opts.detailSyncer){se.warn("detailSyncer not wired, skipping sync",{method:n,agentId:e});return}try{await this.opts.detailSyncer(e)}catch(i){se.warn("detail sync failed (ignored)",{method:n,agentId:e,reason:r,err:String(i)})}}async getFileTree(e){vt(e._meta,"_agent/getFileTree");let n=e._meta,r=Yn(n),i=await this.resolveWorkspace(r),s=e.filePath??"",o=this.safeJoin(i,s),a=await lc(o).catch(()=>null);if(!a)throw new _("IPC_BAD_REQUEST",`path not found: ${s}`);if(a.isSymbolicLink())throw new _("IPC_BAD_REQUEST",`symlink not allowed: ${s}`);if(!await Ar(o,i))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${s}`);let c=k_(e.depth);return a.isDirectory()?{tree:await R_(i,o,s,c)}:{tree:[{name:b_(s),path:Tf(s||"."),isDir:!1,size:a.size,modifiedAt:Math.floor(a.mtimeMs)}]}}async getFileContent(e){vt(e._meta,"_agent/getFileContent");let n=Yn(e._meta),r=await this.resolveWorkspace(n);if(!e.filePath)throw new _("IPC_BAD_REQUEST","filePath required");let i=this.safeJoin(r,e.filePath),s=await lc(i).catch(()=>null);if(!s||!s.isFile())throw new _("IPC_BAD_REQUEST",`not a file: ${e.filePath}`);if(s.isSymbolicLink())throw new _("IPC_BAD_REQUEST",`symlink not allowed: ${e.filePath}`);if(!await Ar(i,r))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${e.filePath}`);if(s.size>wf)throw new _("IPC_BAD_REQUEST",`file too large: ${s.size} bytes (max ${wf})`);let o=await yf(i);return o.includes(0)?{content:o.toString("base64"),encoding:"base64",size:s.size}:{content:o.toString("utf8"),encoding:"utf-8",size:s.size}}async resolveWorkspace(e){let n=this.opts.agents.get(e);return n?n.workspace:(await me(e).catch(()=>null))?.workspace??be(e).workspace}safeJoin(e,n){let r=fc(e,n||"."),i=pc(e,r);if(i.startsWith("..")||i===".."||i.startsWith(`..${_f}`))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${n}`);return r}loadAgentCfg(e){return me(e)}async requireAgentCfg(e){let n=await this.loadAgentCfg(e);if(!n)throw new _("AGENT_NOT_FOUND",`no config for agent: ${e}`);return n}};function u_(t){let e=t.trim().replace(/[\x00-\x1f<>:"|?*/\\]+/g,"-").replace(/^[\s.-]+|[\s.-]+$/g,"").slice(0,64);if(!e||e==="."||e==="..")throw new _("IPC_BAD_REQUEST",`invalid skill name: ${t}`);if(/^(con|prn|aux|nul|com[1-9]|lpt[1-9])$/i.test(e))throw new _("IPC_BAD_REQUEST",`reserved windows filename: ${t}`);return e}function f_(t){return t==="claude-code"?at(".claude","skills"):at(".agents","skills")}var h_=3e4,p_=50*1024*1024,er=3e4;async function gc(t){let{agentId:e,workspace:n,framework:r,skill:i}=t;if(!i.skillName)throw new _("IPC_BAD_REQUEST","skill missing skillName");let s=typeof i.content=="string"&&i.content.length>0,o=typeof i.downloadUrl=="string"&&i.downloadUrl.length>0;if(!s&&!o)throw new _("IPC_BAD_REQUEST",`skill ${i.skillId} missing both content and downloadUrl`);let a=u_(i.skillName),c=f_(r),l=at(c,a),d=at(n,l);if(await dc(d,{recursive:!0}),s){let m=Buffer.from(i.content,"utf8");si(m.length),await uc(at(d,"SKILL.md"),m,"utf8")}else{let m=await m_(i.downloadUrl);y_(m)?await v_(m,d):__(m)?await E_(m,d):await uc(at(d,"SKILL.md"),m.toString("utf8"),"utf8")}let p={skillId:i.skillId,skillName:i.skillName,relPath:l,installedAt:Date.now(),...i.description?{description:i.description}:{},...i.icon?{icon:i.icon}:{},...i.version?{version:i.version}:{},...i.downloadUrl?{downloadUrl:i.downloadUrl}:{},...i.config?{config:i.config}:{},...i.builtin?{builtin:i.builtin}:{}};return se.info("skill installed",{agentId:e,skillId:i.skillId,skillName:i.skillName,relPath:l,source:s?"content":"downloadUrl"}),p}function mc(t,e,n){let r=e.get(n.skillId);if(r!==void 0){t[r]=n;return}e.set(n.skillId,t.length),t.push(n)}function g_(t){return{skillId:t.skillId,skillName:t.skillName,...t.description?{description:t.description}:{},...t.icon?{icon:t.icon}:{},...t.version?{version:t.version}:{},...t.config?{config:t.config}:{},...t.builtin?{builtin:t.builtin}:{}}}async function m_(t){if(!t)throw new _("IPC_BAD_REQUEST","skill missing downloadUrl");if(t.startsWith("data:")){let e=Math.floor(t.length*3/4);si(e);let n=w_(t);return si(n.length),n}if(t.startsWith("file:")){let e=new URL(t).pathname,n=await yf(e);return si(n.length),n}if(Us(t)){let e=new AbortController,n=setTimeout(()=>e.abort(),h_);try{let r=await fetch(t,{signal:e.signal});if(!r.ok)throw new _("IPC_BAD_REQUEST",`fetch skill failed HTTP ${r.status} ${t}`);let i=await r.arrayBuffer();return si(i.byteLength),Buffer.from(i)}finally{clearTimeout(n)}}throw new _("IPC_BAD_REQUEST",`unsupported downloadUrl scheme (\u8981 https/data/file): ${t.slice(0,80)}`)}function si(t){if(t>p_)throw new _("IPC_BAD_REQUEST",`skill too large: ${t} bytes`)}function w_(t){let e=/^data:([^,;]*)(;base64)?,(.*)$/s.exec(t);if(!e)throw new _("IPC_BAD_REQUEST","bad data URL");let n=!!e[2],r=e[3]??"";return n?Buffer.from(r,"base64"):Buffer.from(decodeURIComponent(r),"utf8")}function y_(t){return t.length>=2&&t[0]===31&&t[1]===139}function __(t){if(t.length<4||t[0]!==80||t[1]!==75)return!1;let e=t[2],n=t[3];return e===3&&n===4||e===5&&n===6}function hc(t){return t==="__MACOSX"||t.startsWith("__MACOSX/")}async function E_(t,e){let n,r;try{n=new vf.default(t),r=n.getEntries()}catch(o){throw new _("IPC_BAD_REQUEST",`zip parse failed: ${o.message}`,{cause:o})}for(let o of r){let a=o.entryName;if(!a||hc(a))continue;if(a.startsWith("/")||/^[A-Za-z]:[\\/]/.test(a))throw new _("IPC_BAD_REQUEST",`zip entry absolute path: ${a}`);if(a.split(/[/\\]/).some(l=>l===".."))throw new _("IPC_BAD_REQUEST",`zip entry contains '..' (traversal): ${a}`);let c=o.header.attr>>>16&61440;if(c!==0&&c!==32768&&c!==16384)throw new _("IPC_BAD_REQUEST",`zip entry kind 0x${c.toString(16)} not allowed (symlink/hardlink/special): ${a}`)}let i=S_(r),s=fc(e);for(let o of r){if(hc(o.entryName))continue;let a=o.entryName;if(i&&a.startsWith(i)&&(a=a.slice(i.length)),!a)continue;let c=fc(e,a),l=pc(s,c);if(l.startsWith("..")||l==="..")throw new _("IPC_BAD_REQUEST",`zip entry escapes destDir: ${a}`);if(o.isDirectory){await dc(c,{recursive:!0});continue}await dc(o_(c),{recursive:!0});let d;try{d=o.getData()}catch(p){throw new _("IPC_BAD_REQUEST",`zip entry getData failed (${o.entryName}): ${p.message}`,{cause:p})}await uc(c,d)}}function S_(t){let e;for(let n of t){let r=n.entryName;if(!r||hc(r))continue;let i=r.indexOf("/");if(i<=0)return;let s=r.slice(0,i+1);if(e===void 0)e=s;else if(e!==s)return}return e}async function v_(t,e){await I_(t);let n=Yu({cwd:e,strip:1}),r=!1,i=setTimeout(()=>{r=!0,n.destroy(new _("IPC_BAD_REQUEST",`tar extract timeout (${er}ms)`))},er);try{await Sf(Ef.from(t),n)}catch(s){throw s instanceof _?s:r?new _("IPC_BAD_REQUEST",`tar extract timeout (${er}ms)`):new _("IPC_BAD_REQUEST",`tar extract failed: ${s.message??String(s)}`,{cause:s})}finally{clearTimeout(i)}}async function I_(t){let e=[],n=Xn({onReadEntry:s=>{let o=s.path,a=s.type;if(a!=="File"&&a!=="Directory"){e.push(`tar entry kind '${a}' not allowed (symlink/hardlink/special): ${o.slice(0,100)}`);return}if(o.startsWith("/")||o.startsWith("\\")||/^[a-zA-Z]:[\\/]/.test(o)){e.push(`tar entry absolute path: ${o}`);return}o.split(/[/\\]/).some(l=>l==="..")&&e.push(`tar entry contains '..': ${o}`)}}),r=!1,i=setTimeout(()=>{r=!0,n.destroy(new _("IPC_BAD_REQUEST",`tar list timeout (${er}ms)`))},er);try{await Sf(Ef.from(t),n)}catch(s){throw r?new _("IPC_BAD_REQUEST",`tar list timeout (${er}ms)`):new _("IPC_BAD_REQUEST",`tar list failed: ${s.message??String(s)}`,{cause:s})}finally{clearTimeout(i)}if(e.length>0)throw new _("IPC_BAD_REQUEST",e[0]??"tar entry validation failed")}var T_=5e3;async function R_(t,e,n,r){return If(t,e,n,r,{count:0})}async function If(t,e,n,r,i){if(r<=0)return[];let s;try{s=await r_(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let a of s){if(d_.has(a.name)||a.isSymbolicLink())continue;if(i.count>=T_){o.push({name:"...",path:"...",isDir:!1,size:0,modifiedAt:0,hasMore:!0});break}let c=at(e,a.name),l=a_(at(n,a.name)),d=null;try{d=await lc(c)}catch{continue}if(d.isSymbolicLink())continue;i.count++;let p={name:a.name,path:Tf(pc(t,c)),isDir:d.isDirectory(),size:d.size,modifiedAt:Math.floor(d.mtimeMs)};d.isDirectory()&&r>1&&(p.children=await If(t,c,l,r-1,i)),o.push(p)}return o.sort((a,c)=>a.isDir!==c.isDir?a.isDir?-1:1:a.name.localeCompare(c.name)),o}function k_(t){return!t||t<=0?c_:Math.min(t,l_)}function b_(t){if(!t||t==="."||t==="/")return".";let e=t.split(/[/\\]/);return e[e.length-1]||"."}function Tf(t){return t.split(_f).join("/")}L();import{readFileSync as Fb}from"node:fs";import{dirname as Bb,join as Ub}from"node:path";import{fileURLToPath as $b}from"node:url";var tr="0.1.92-beta.5";var Gt=b("agent-health-reporter"),A_=1e4,oi=class{constructor(e){this.opts=e;this.intervalMs=e.intervalMs??A_}opts;timer=null;inFlight=!1;unsubscribeRegister=null;intervalMs;start(){this.timer||(this.timer=setInterval(()=>{this.tick()},this.intervalMs),this.timer.unref?.(),this.unsubscribeRegister=this.opts.core.onAgentRegister(()=>{this.tick()}),Gt.info("heartbeat started",{intervalMs:this.intervalMs}),this.tick())}stop(){this.timer&&(clearInterval(this.timer),this.timer=null,this.unsubscribeRegister&&(this.unsubscribeRegister(),this.unsubscribeRegister=null),Gt.info("heartbeat stopped"))}async tick(){if(this.inFlight){Gt.debug("previous tick still in-flight, skip");return}let e=this.opts.getDeviceId();if(!e){Gt.debug("deviceId not available, skip tick (\u5C1A\u672A pair)");return}this.inFlight=!0;try{let n=[];for(let o of this.opts.core.agents.values()){let a=x_(o);if(!a)continue;let c={agentId:o.agentId,status:a};o.patToken&&(c.patToken=o.patToken),o.accountId&&(c.accountId=o.accountId),n.push(c)}if(n.length===0)return;let r={agents:n,bridgeVersion:tr,_meta:{cozeDeviceId:e}},i;try{i=await this.opts.core.sendRequest("_agent/health",r,5e3)}catch(o){Gt.warn("heartbeat batch send failed",{count:n.length,err:String(o)})}let s=i?.authFailures;if(s&&s.length>0&&(Gt.warn("heartbeat received authFailures from cloud",{count:s.length,agentIds:s.map(o=>o.agentId)}),this.opts.onAuthFailures))try{await this.opts.onAuthFailures(s)}catch(o){Gt.warn("onAuthFailures callback failed (ignored)",{err:String(o)})}}finally{this.inFlight=!1}if(this.opts.onTickEnd)try{await this.opts.onTickEnd()}catch(n){Gt.warn("onTickEnd hook failed",{err:String(n)})}}};function x_(t){return t.status==="error"?"error":t.activeTriggers.size>0?"busy":t.status==="ok"?"online":null}At();import{chmod as lE,mkdir as Ys,rm as dE,stat as uE,writeFile as fE}from"node:fs/promises";import{homedir as hE}from"node:os";import{join as jf}from"node:path";tn();import{spawnSync as M_}from"node:child_process";function ai(t,e,n){return n===void 0?{jsonrpc:"2.0",id:t,method:e}:{jsonrpc:"2.0",id:t,method:e,params:n}}function nr(t,e){return e===void 0?{jsonrpc:"2.0",method:t}:{jsonrpc:"2.0",method:t,params:e}}function rr(t,e){return{jsonrpc:"2.0",id:t,result:e}}function Ht(t,e){return{jsonrpc:"2.0",id:t,error:e}}Te();var js=class extends Error{code;data;constructor(e){super(`JSON-RPC error code=${e.code} ${e.message}`),this.name="RemoteRpcError",this.code=e.code,e.data!==void 0&&(this.data=e.data)}},U={PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,INTERNAL_ERROR:-32603,AGENT_NOT_FOUND:-32001,AGENT_BUSY:-32002,AGENT_TIMEOUT:-32003,AGENT_SPAWN_FAILED:-32004,OPERATION_NOT_ALLOWED_FOR_LOCAL:-32005,AGENT_DISCONNECTED:-32006,MODEL_TOKEN_GEN_FAILED:-32009,PATH_OUTSIDE_WORKSPACE:-32010,FILE_TOO_LARGE:-32011,UNSUPPORTED_MIME:-32012,UPLOAD_FAILED:-32013,UPSTREAM_NOT_READY:-32014,AGENT_FRAME_IDLE_TIMEOUT:-32016,MODEL_MODALITY_UNSUPPORTED:-32017,AGENT_DEPENDENCY_INSTALL_FAILED:-32018,AGENT_APPROVAL_TIMEOUT:-32019};function Rf(t){return"method"in t&&"id"in t&&t.id!==void 0}function kf(t){return"method"in t&&!("id"in t)}function Ws(t){return!("method"in t)&&"id"in t}var O_={AGENT_NOT_FOUND:U.AGENT_NOT_FOUND,AGENT_BUSY:U.AGENT_BUSY,AGENT_DISCONNECTED:U.AGENT_DISCONNECTED,AGENT_TIMEOUT:U.AGENT_TIMEOUT,AGENT_FRAME_IDLE_TIMEOUT:U.AGENT_FRAME_IDLE_TIMEOUT,AGENT_SPAWN_FAILED:U.AGENT_SPAWN_FAILED,AGENT_PROTOCOL_ERROR:U.INTERNAL_ERROR,BRIDGE_CONFIG_INVALID:U.INTERNAL_ERROR,BRIDGE_INTERNAL:U.INTERNAL_ERROR,IPC_AUTH_FAILED:U.INTERNAL_ERROR,IPC_BAD_REQUEST:U.INVALID_REQUEST,MODEL_TOKEN_GEN_FAILED:U.MODEL_TOKEN_GEN_FAILED,MODEL_MODALITY_UNSUPPORTED:U.MODEL_MODALITY_UNSUPPORTED,OPERATION_NOT_ALLOWED_FOR_LOCAL:U.OPERATION_NOT_ALLOWED_FOR_LOCAL,UPSTREAM_DISCONNECTED:U.INTERNAL_ERROR,UPSTREAM_HANDSHAKE_FAILED:U.INTERNAL_ERROR,PATH_OUTSIDE_WORKSPACE:U.PATH_OUTSIDE_WORKSPACE,FILE_TOO_LARGE:U.FILE_TOO_LARGE,UNSUPPORTED_MIME:U.UNSUPPORTED_MIME,UPLOAD_FAILED:U.UPLOAD_FAILED,UPSTREAM_NOT_READY:U.UPSTREAM_NOT_READY,AGENT_DEPENDENCY_INSTALL_FAILED:U.AGENT_DEPENDENCY_INSTALL_FAILED,AGENT_APPROVAL_TIMEOUT:U.AGENT_APPROVAL_TIMEOUT};function P_(t){if(t!=null)return t instanceof Error?{name:t.name,message:ci(t.message)}:typeof t=="string"?ci(t):typeof t=="object"?D_(t):t}var C_=[[/\/Users\/[^/\s'"`)]+/g,"/Users/<redacted>"],[/\/home\/[^/\s'"`)]+/g,"/home/<redacted>"],[/[A-Za-z]:\\Users\\[^\\\s'"`)]+/g,"C:\\Users\\<redacted>"],[/(Bearer|Token|Authorization:)\s+[\w._-]+/gi,"$1 <redacted>"],[/\b(sk|pat|ak)[-_][A-Za-z0-9_-]{20,}\b/g,"<redacted-key>"]];function ci(t){let e=t;for(let[n,r]of C_)e=e.replace(n,r);return e}function D_(t){let e={};for(let[n,r]of Object.entries(t))typeof r=="string"?e[n]=ci(r):e[n]=r;return e}function li(t){if(t instanceof _){let e=P_(t.cause),n={bridgeCode:t.code,retriable:t.retriable};return e!==void 0&&(n.cause=e),{code:O_[t.code]??U.INTERNAL_ERROR,message:ci(t.message),data:n}}return{code:U.INTERNAL_ERROR,message:ci(t instanceof Error?t.message:String(t))}}function bf(t){let e=t.data,n=e?.bridgeCode??"AGENT_PROTOCOL_ERROR",r=!!e&&typeof e.message=="string"&&!!e.message,i=r?e?.message:t.message,s=t.data;if(r&&e){let{message:o,...a}=e;s=a}return new _(n,i,{retriable:e?.retriable??!1,cause:s})}function xf(t){return`${JSON.stringify(t)}
91
+ `)}}function cc(t){return`coze-session-${t.replace(/[^A-Za-z0-9_-]+/g,"-")}`}function gf(t,e,n){if(!t.modelToken)return null;let r=t.model||Ke,i=ac(e,n),s=["text"];t.modelInfo?.capabilities?.image===!0&&s.push("image");let o={baseUrl:`${sc}/v1`,api:"openai-completions",apiKey:t.modelToken,models:[{id:r,name:r,reasoning:!1,input:s,cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:t.modelInfo?.contextWindow??cf,maxTokens:8192,api:"openai-completions"}]};return Object.keys(i).length>0&&(o.headers=i),o}function mf(t,e,n){if(!t.modelToken)return[];let r=ac(e,n),i=[];for(let[s,o]of Object.entries(r))i.push("-c",`model_providers.coze.http_headers.${s}="${o}"`);return i}var se=b("agent-handlers"),wf=5*1024*1024,c_=1,l_=6,d_=new Set(["node_modules",".git",".coze","dist","build",".next"]),Hs=class{constructor(e){this.opts=e}opts;async listSkills(e){vt(e._meta,"_agent/listSkills");let n=Yn(e._meta),r=await this.loadAgentCfg(n),i=r?.workspace??be(n).workspace,s=r?.skills??[],o=[];for(let a of s){let c=at(i,a.relPath,"SKILL.md");await s_(c).then(d=>d.isFile()).catch(()=>!1)&&o.push(g_(a))}return{skills:o}}async addSkills(e){vt(e._meta,"_agent/addSkills");let n=Yn(e._meta),r=await this.requireAgentCfg(n),i=e.skills??[],s=[...r.skills??[]],o=new Map(s.map((c,l)=>[c.skillId,l])),a=[];for(let c of i){let l=await gc({agentId:n,workspace:r.workspace,framework:r.framework,skill:c});mc(s,o,l),a.push(c)}return await Ji(n,s),this.reloadAgentSessions(n,"skills-added"),{installedSkills:a}}async removeSkills(e){vt(e._meta,"_agent/removeSkills");let n=Yn(e._meta),r=await this.requireAgentCfg(n),i=new Set(e.skillIds??[]),s=r.skills??[],o=[];for(let a of s){if(!i.has(a.skillId)){o.push(a);continue}let c=at(r.workspace,a.relPath);await i_(c,{recursive:!0,force:!0}),se.info("skill removed",{agentId:n,skillId:a.skillId,relPath:a.relPath})}return await Ji(n,o),this.reloadAgentSessions(n,"skills-removed"),{ok:!0}}reloadAgentSessionsPublic(e,n){this.reloadAgentSessions(e,n)}reloadAgentSessions(e,n){let r=this.opts.agents.get(e);if(r)for(let[i,s]of r.sessions){if(!s.downstream)continue;let o=s.acpSessionId;if(o&&r.activeTriggers.has(o)||this.isRuntimePendingPermission(s)){s.reloadAfterTurn=!0,se.info("downstream busy, scheduling reload after turn",{reason:n,agentId:e,framework:r.framework,cloudId:i,acpId:o});continue}let c=s.downstream;s.downstream=void 0,se.info("killing downstream for workspace reload (idle)",{reason:n,agentId:e,framework:r.framework,cloudId:i,acpId:o}),c.stop(n).catch(l=>se.warn("downstream stop failed during reload (ignored)",{reason:n,agentId:e,cloudId:i,err:String(l)}))}}isRuntimePendingPermission(e){let n=this.opts.isRuntimePendingPermission;return!n||!e.downstream?!1:n(e.downstream)}async updateAgent(e){if(!e.cozeIdentity?.trim())return se.info("_agent/update: empty cozeIdentity, noop",{agentId:e.agentId}),{ok:!0};let n=e.agentId,r=await me(n);if(!r)throw new _("AGENT_NOT_FOUND",`agent not found: ${n}`);if(r.cozeIdentity===e.cozeIdentity)return se.info("_agent/update: cozeIdentity unchanged, noop",{agentId:n}),{ok:!0};try{await Ln(r.workspace,r.framework,e.cozeIdentity)}catch(i){throw se.error("_agent/update: writeInstructionFile failed, aborting update",{agentId:n,framework:r.framework,workspace:r.workspace,err:String(i)}),new _("AGENT_PROTOCOL_ERROR",`failed to write instruction file for agent ${n}: ${String(i)}`,{cause:i})}return r.cozeIdentity=e.cozeIdentity,await Ae(r),se.info("_agent/update: cozeIdentity rewritten",{agentId:n,framework:r.framework}),this.reloadAgentSessions(n,"identity-changed"),{ok:!0}}async disconnectAgent(e){let n=e.agentId;if(!n)throw new _("IPC_BAD_REQUEST","_agent/disconnect: missing agentId");let r=await me(n);return r?(r.disconnectedAt=Date.now(),r.disconnectReason=e.reason??"",await Ae(r),se.info("agent disconnected",{agentId:n,reason:e.reason??"",force:e.force??!1}),this.opts.disposeAndMarkDisconnected&&await this.opts.disposeAndMarkDisconnected(n,e.reason??"disconnect"),{ok:!0}):(se.warn("_agent/disconnect: agent not found, ignoring",{agentId:n}),{ok:!0})}async switchModel(e){if(vt(e._meta,"_agent/switchModel"),!e.agentId)throw new _("IPC_BAD_REQUEST","_agent/switchModel: missing agentId");let n=oc(e.model)??Ke,r=await me(e.agentId);if(!r)throw new _("AGENT_NOT_FOUND",`agent not found: ${e.agentId}`);r.model=n,e.modelInfo&&(r.modelInfo=e.modelInfo),await Ae(r),se.info("_agent/switchModel: model persisted",{agentId:e.agentId,model:n,reason:e.reason??""});let i=this.opts.agents.get(e.agentId);if(!i)return se.info("_agent/switchModel: agent not running, config persisted only",{agentId:e.agentId}),{ok:!0};i.model=n,e.modelInfo&&i.setModelInfo(e.modelInfo),this.opts.cleanupOpenclawProviders&&await this.opts.cleanupOpenclawProviders(i).catch(o=>se.warn("cleanupOpenclawProviders before switchModel failed (ignored)",{agentId:e.agentId,err:String(o)}));let s=[];for(let[o,a]of i.allSessionQueues())s.push(a.enqueue(async()=>{let c=i.sessions.get(o);c?.downstream&&(await c.downstream.stop(`switchModel: ${n}`).catch(()=>{}),c.downstream=void 0)}));return await Promise.all(s),se.info("_agent/switchModel: all session runtimes killed, next prompt will respawn",{agentId:e.agentId,model:n,cloudSessions:s.length}),{ok:!0}}async resetAgent(e){if(vt(e._meta,Ze.RESET),!e.agentId)throw new _("IPC_BAD_REQUEST",`${Ze.RESET}: missing agentId`);return await this.clearSessionMappings(e.agentId,Ze.RESET),await this.runDetailSync(e.agentId,Ze.RESET,e.reason),{ok:!0}}async clearSessionMappings(e,n){let r=this.opts.agents.get(e);if(!r){await this.clearPersistedAcpSessionIds(e),se.info("reset: agent not in memory, cleared persisted acpSessionIds only",{agentId:e});return}await r.killAllRuntimes(n);for(let s of r.sessions.values())s.acpSessionId=void 0,s.replySeq=0,s.loadingSession=!1,s.spawnFailCount=void 0,s.spawnFailedAt=void 0;let i=new Map;for(let[s,o]of r.sessions)i.set(s,{modelToken:o.modelToken,tokenGeneratedAt:o.tokenGeneratedAt});await xr(e,i)}async clearPersistedAcpSessionIds(e){let n=await me(e).catch(()=>null);if(!n?.sessions)return;let r=!1;for(let i of Object.values(n.sessions))i.acpSessionId&&(i.acpSessionId=void 0,r=!0);r&&await Ae(n)}async repairAgent(e){if(vt(e._meta,Ze.REPAIR),!e.agentId)throw new _("IPC_BAD_REQUEST",`${Ze.REPAIR}: missing agentId`);let n=await this.loadAgentCfg(e.agentId);if(n&&n.framework!=="openclaw")throw new _("IPC_BAD_REQUEST",`${Ze.REPAIR} only allowed for openclaw, got ${n.framework}`);if(n&&this.opts.openclawRepair)try{await this.opts.openclawRepair(e.agentId,n.workspace)}catch(r){se.warn("openclaw repair (delete+add) failed (ignored)",{agentId:e.agentId,reason:e.reason,err:String(r)})}return await this.runDetailSync(e.agentId,Ze.REPAIR,e.reason),{ok:!0}}async runDetailSync(e,n,r){if(!this.opts.detailSyncer){se.warn("detailSyncer not wired, skipping sync",{method:n,agentId:e});return}try{await this.opts.detailSyncer(e)}catch(i){se.warn("detail sync failed (ignored)",{method:n,agentId:e,reason:r,err:String(i)})}}async getFileTree(e){vt(e._meta,"_agent/getFileTree");let n=e._meta,r=Yn(n),i=await this.resolveWorkspace(r),s=e.filePath??"",o=this.safeJoin(i,s),a=await lc(o).catch(()=>null);if(!a)throw new _("IPC_BAD_REQUEST",`path not found: ${s}`);if(a.isSymbolicLink())throw new _("IPC_BAD_REQUEST",`symlink not allowed: ${s}`);if(!await Ar(o,i))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${s}`);let c=k_(e.depth);return a.isDirectory()?{tree:await R_(i,o,s,c)}:{tree:[{name:b_(s),path:Tf(s||"."),isDir:!1,size:a.size,modifiedAt:Math.floor(a.mtimeMs)}]}}async getFileContent(e){vt(e._meta,"_agent/getFileContent");let n=Yn(e._meta),r=await this.resolveWorkspace(n);if(!e.filePath)throw new _("IPC_BAD_REQUEST","filePath required");let i=this.safeJoin(r,e.filePath),s=await lc(i).catch(()=>null);if(!s||!s.isFile())throw new _("IPC_BAD_REQUEST",`not a file: ${e.filePath}`);if(s.isSymbolicLink())throw new _("IPC_BAD_REQUEST",`symlink not allowed: ${e.filePath}`);if(!await Ar(i,r))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${e.filePath}`);if(s.size>wf)throw new _("IPC_BAD_REQUEST",`file too large: ${s.size} bytes (max ${wf})`);let o=await yf(i);return o.includes(0)?{content:o.toString("base64"),encoding:"base64",size:s.size}:{content:o.toString("utf8"),encoding:"utf-8",size:s.size}}async resolveWorkspace(e){let n=this.opts.agents.get(e);return n?n.workspace:(await me(e).catch(()=>null))?.workspace??be(e).workspace}safeJoin(e,n){let r=fc(e,n||"."),i=pc(e,r);if(i.startsWith("..")||i===".."||i.startsWith(`..${_f}`))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${n}`);return r}loadAgentCfg(e){return me(e)}async requireAgentCfg(e){let n=await this.loadAgentCfg(e);if(!n)throw new _("AGENT_NOT_FOUND",`no config for agent: ${e}`);return n}};function u_(t){let e=t.trim().replace(/[\x00-\x1f<>:"|?*/\\]+/g,"-").replace(/^[\s.-]+|[\s.-]+$/g,"").slice(0,64);if(!e||e==="."||e==="..")throw new _("IPC_BAD_REQUEST",`invalid skill name: ${t}`);if(/^(con|prn|aux|nul|com[1-9]|lpt[1-9])$/i.test(e))throw new _("IPC_BAD_REQUEST",`reserved windows filename: ${t}`);return e}function f_(t){return t==="claude-code"?at(".claude","skills"):at(".agents","skills")}var h_=3e4,p_=50*1024*1024,er=3e4;async function gc(t){let{agentId:e,workspace:n,framework:r,skill:i}=t;if(!i.skillName)throw new _("IPC_BAD_REQUEST","skill missing skillName");let s=typeof i.content=="string"&&i.content.length>0,o=typeof i.downloadUrl=="string"&&i.downloadUrl.length>0;if(!s&&!o)throw new _("IPC_BAD_REQUEST",`skill ${i.skillId} missing both content and downloadUrl`);let a=u_(i.skillName),c=f_(r),l=at(c,a),d=at(n,l);if(await dc(d,{recursive:!0}),s){let m=Buffer.from(i.content,"utf8");si(m.length),await uc(at(d,"SKILL.md"),m,"utf8")}else{let m=await m_(i.downloadUrl);y_(m)?await v_(m,d):__(m)?await E_(m,d):await uc(at(d,"SKILL.md"),m.toString("utf8"),"utf8")}let p={skillId:i.skillId,skillName:i.skillName,relPath:l,installedAt:Date.now(),...i.description?{description:i.description}:{},...i.icon?{icon:i.icon}:{},...i.version?{version:i.version}:{},...i.downloadUrl?{downloadUrl:i.downloadUrl}:{},...i.config?{config:i.config}:{},...i.builtin?{builtin:i.builtin}:{}};return se.info("skill installed",{agentId:e,skillId:i.skillId,skillName:i.skillName,relPath:l,source:s?"content":"downloadUrl"}),p}function mc(t,e,n){let r=e.get(n.skillId);if(r!==void 0){t[r]=n;return}e.set(n.skillId,t.length),t.push(n)}function g_(t){return{skillId:t.skillId,skillName:t.skillName,...t.description?{description:t.description}:{},...t.icon?{icon:t.icon}:{},...t.version?{version:t.version}:{},...t.config?{config:t.config}:{},...t.builtin?{builtin:t.builtin}:{}}}async function m_(t){if(!t)throw new _("IPC_BAD_REQUEST","skill missing downloadUrl");if(t.startsWith("data:")){let e=Math.floor(t.length*3/4);si(e);let n=w_(t);return si(n.length),n}if(t.startsWith("file:")){let e=new URL(t).pathname,n=await yf(e);return si(n.length),n}if(Us(t)){let e=new AbortController,n=setTimeout(()=>e.abort(),h_);try{let r=await fetch(t,{signal:e.signal});if(!r.ok)throw new _("IPC_BAD_REQUEST",`fetch skill failed HTTP ${r.status} ${t}`);let i=await r.arrayBuffer();return si(i.byteLength),Buffer.from(i)}finally{clearTimeout(n)}}throw new _("IPC_BAD_REQUEST",`unsupported downloadUrl scheme (\u8981 https/data/file): ${t.slice(0,80)}`)}function si(t){if(t>p_)throw new _("IPC_BAD_REQUEST",`skill too large: ${t} bytes`)}function w_(t){let e=/^data:([^,;]*)(;base64)?,(.*)$/s.exec(t);if(!e)throw new _("IPC_BAD_REQUEST","bad data URL");let n=!!e[2],r=e[3]??"";return n?Buffer.from(r,"base64"):Buffer.from(decodeURIComponent(r),"utf8")}function y_(t){return t.length>=2&&t[0]===31&&t[1]===139}function __(t){if(t.length<4||t[0]!==80||t[1]!==75)return!1;let e=t[2],n=t[3];return e===3&&n===4||e===5&&n===6}function hc(t){return t==="__MACOSX"||t.startsWith("__MACOSX/")}async function E_(t,e){let n,r;try{n=new vf.default(t),r=n.getEntries()}catch(o){throw new _("IPC_BAD_REQUEST",`zip parse failed: ${o.message}`,{cause:o})}for(let o of r){let a=o.entryName;if(!a||hc(a))continue;if(a.startsWith("/")||/^[A-Za-z]:[\\/]/.test(a))throw new _("IPC_BAD_REQUEST",`zip entry absolute path: ${a}`);if(a.split(/[/\\]/).some(l=>l===".."))throw new _("IPC_BAD_REQUEST",`zip entry contains '..' (traversal): ${a}`);let c=o.header.attr>>>16&61440;if(c!==0&&c!==32768&&c!==16384)throw new _("IPC_BAD_REQUEST",`zip entry kind 0x${c.toString(16)} not allowed (symlink/hardlink/special): ${a}`)}let i=S_(r),s=fc(e);for(let o of r){if(hc(o.entryName))continue;let a=o.entryName;if(i&&a.startsWith(i)&&(a=a.slice(i.length)),!a)continue;let c=fc(e,a),l=pc(s,c);if(l.startsWith("..")||l==="..")throw new _("IPC_BAD_REQUEST",`zip entry escapes destDir: ${a}`);if(o.isDirectory){await dc(c,{recursive:!0});continue}await dc(o_(c),{recursive:!0});let d;try{d=o.getData()}catch(p){throw new _("IPC_BAD_REQUEST",`zip entry getData failed (${o.entryName}): ${p.message}`,{cause:p})}await uc(c,d)}}function S_(t){let e;for(let n of t){let r=n.entryName;if(!r||hc(r))continue;let i=r.indexOf("/");if(i<=0)return;let s=r.slice(0,i+1);if(e===void 0)e=s;else if(e!==s)return}return e}async function v_(t,e){await I_(t);let n=Yu({cwd:e,strip:1}),r=!1,i=setTimeout(()=>{r=!0,n.destroy(new _("IPC_BAD_REQUEST",`tar extract timeout (${er}ms)`))},er);try{await Sf(Ef.from(t),n)}catch(s){throw s instanceof _?s:r?new _("IPC_BAD_REQUEST",`tar extract timeout (${er}ms)`):new _("IPC_BAD_REQUEST",`tar extract failed: ${s.message??String(s)}`,{cause:s})}finally{clearTimeout(i)}}async function I_(t){let e=[],n=Xn({onReadEntry:s=>{let o=s.path,a=s.type;if(a!=="File"&&a!=="Directory"){e.push(`tar entry kind '${a}' not allowed (symlink/hardlink/special): ${o.slice(0,100)}`);return}if(o.startsWith("/")||o.startsWith("\\")||/^[a-zA-Z]:[\\/]/.test(o)){e.push(`tar entry absolute path: ${o}`);return}o.split(/[/\\]/).some(l=>l==="..")&&e.push(`tar entry contains '..': ${o}`)}}),r=!1,i=setTimeout(()=>{r=!0,n.destroy(new _("IPC_BAD_REQUEST",`tar list timeout (${er}ms)`))},er);try{await Sf(Ef.from(t),n)}catch(s){throw r?new _("IPC_BAD_REQUEST",`tar list timeout (${er}ms)`):new _("IPC_BAD_REQUEST",`tar list failed: ${s.message??String(s)}`,{cause:s})}finally{clearTimeout(i)}if(e.length>0)throw new _("IPC_BAD_REQUEST",e[0]??"tar entry validation failed")}var T_=5e3;async function R_(t,e,n,r){return If(t,e,n,r,{count:0})}async function If(t,e,n,r,i){if(r<=0)return[];let s;try{s=await r_(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let a of s){if(d_.has(a.name)||a.isSymbolicLink())continue;if(i.count>=T_){o.push({name:"...",path:"...",isDir:!1,size:0,modifiedAt:0,hasMore:!0});break}let c=at(e,a.name),l=a_(at(n,a.name)),d=null;try{d=await lc(c)}catch{continue}if(d.isSymbolicLink())continue;i.count++;let p={name:a.name,path:Tf(pc(t,c)),isDir:d.isDirectory(),size:d.size,modifiedAt:Math.floor(d.mtimeMs)};d.isDirectory()&&r>1&&(p.children=await If(t,c,l,r-1,i)),o.push(p)}return o.sort((a,c)=>a.isDir!==c.isDir?a.isDir?-1:1:a.name.localeCompare(c.name)),o}function k_(t){return!t||t<=0?c_:Math.min(t,l_)}function b_(t){if(!t||t==="."||t==="/")return".";let e=t.split(/[/\\]/);return e[e.length-1]||"."}function Tf(t){return t.split(_f).join("/")}L();import{readFileSync as Fb}from"node:fs";import{dirname as Bb,join as Ub}from"node:path";import{fileURLToPath as $b}from"node:url";var tr="0.1.92";var Gt=b("agent-health-reporter"),A_=1e4,oi=class{constructor(e){this.opts=e;this.intervalMs=e.intervalMs??A_}opts;timer=null;inFlight=!1;unsubscribeRegister=null;intervalMs;start(){this.timer||(this.timer=setInterval(()=>{this.tick()},this.intervalMs),this.timer.unref?.(),this.unsubscribeRegister=this.opts.core.onAgentRegister(()=>{this.tick()}),Gt.info("heartbeat started",{intervalMs:this.intervalMs}),this.tick())}stop(){this.timer&&(clearInterval(this.timer),this.timer=null,this.unsubscribeRegister&&(this.unsubscribeRegister(),this.unsubscribeRegister=null),Gt.info("heartbeat stopped"))}async tick(){if(this.inFlight){Gt.debug("previous tick still in-flight, skip");return}let e=this.opts.getDeviceId();if(!e){Gt.debug("deviceId not available, skip tick (\u5C1A\u672A pair)");return}this.inFlight=!0;try{let n=[];for(let o of this.opts.core.agents.values()){let a=x_(o);if(!a)continue;let c={agentId:o.agentId,status:a};o.patToken&&(c.patToken=o.patToken),o.accountId&&(c.accountId=o.accountId),n.push(c)}if(n.length===0)return;let r={agents:n,bridgeVersion:tr,_meta:{cozeDeviceId:e}},i;try{i=await this.opts.core.sendRequest("_agent/health",r,5e3)}catch(o){Gt.warn("heartbeat batch send failed",{count:n.length,err:String(o)})}let s=i?.authFailures;if(s&&s.length>0&&(Gt.warn("heartbeat received authFailures from cloud",{count:s.length,agentIds:s.map(o=>o.agentId)}),this.opts.onAuthFailures))try{await this.opts.onAuthFailures(s)}catch(o){Gt.warn("onAuthFailures callback failed (ignored)",{err:String(o)})}}finally{this.inFlight=!1}if(this.opts.onTickEnd)try{await this.opts.onTickEnd()}catch(n){Gt.warn("onTickEnd hook failed",{err:String(n)})}}};function x_(t){return t.status==="error"?"error":t.activeTriggers.size>0?"busy":t.status==="ok"?"online":null}At();import{chmod as lE,mkdir as Ys,rm as dE,stat as uE,writeFile as fE}from"node:fs/promises";import{homedir as hE}from"node:os";import{join as jf}from"node:path";tn();import{spawnSync as M_}from"node:child_process";function ai(t,e,n){return n===void 0?{jsonrpc:"2.0",id:t,method:e}:{jsonrpc:"2.0",id:t,method:e,params:n}}function nr(t,e){return e===void 0?{jsonrpc:"2.0",method:t}:{jsonrpc:"2.0",method:t,params:e}}function rr(t,e){return{jsonrpc:"2.0",id:t,result:e}}function Ht(t,e){return{jsonrpc:"2.0",id:t,error:e}}Te();var js=class extends Error{code;data;constructor(e){super(`JSON-RPC error code=${e.code} ${e.message}`),this.name="RemoteRpcError",this.code=e.code,e.data!==void 0&&(this.data=e.data)}},U={PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,INTERNAL_ERROR:-32603,AGENT_NOT_FOUND:-32001,AGENT_BUSY:-32002,AGENT_TIMEOUT:-32003,AGENT_SPAWN_FAILED:-32004,OPERATION_NOT_ALLOWED_FOR_LOCAL:-32005,AGENT_DISCONNECTED:-32006,MODEL_TOKEN_GEN_FAILED:-32009,PATH_OUTSIDE_WORKSPACE:-32010,FILE_TOO_LARGE:-32011,UNSUPPORTED_MIME:-32012,UPLOAD_FAILED:-32013,UPSTREAM_NOT_READY:-32014,AGENT_FRAME_IDLE_TIMEOUT:-32016,MODEL_MODALITY_UNSUPPORTED:-32017,AGENT_DEPENDENCY_INSTALL_FAILED:-32018,AGENT_APPROVAL_TIMEOUT:-32019};function Rf(t){return"method"in t&&"id"in t&&t.id!==void 0}function kf(t){return"method"in t&&!("id"in t)}function Ws(t){return!("method"in t)&&"id"in t}var O_={AGENT_NOT_FOUND:U.AGENT_NOT_FOUND,AGENT_BUSY:U.AGENT_BUSY,AGENT_DISCONNECTED:U.AGENT_DISCONNECTED,AGENT_TIMEOUT:U.AGENT_TIMEOUT,AGENT_FRAME_IDLE_TIMEOUT:U.AGENT_FRAME_IDLE_TIMEOUT,AGENT_SPAWN_FAILED:U.AGENT_SPAWN_FAILED,AGENT_PROTOCOL_ERROR:U.INTERNAL_ERROR,BRIDGE_CONFIG_INVALID:U.INTERNAL_ERROR,BRIDGE_INTERNAL:U.INTERNAL_ERROR,IPC_AUTH_FAILED:U.INTERNAL_ERROR,IPC_BAD_REQUEST:U.INVALID_REQUEST,MODEL_TOKEN_GEN_FAILED:U.MODEL_TOKEN_GEN_FAILED,MODEL_MODALITY_UNSUPPORTED:U.MODEL_MODALITY_UNSUPPORTED,OPERATION_NOT_ALLOWED_FOR_LOCAL:U.OPERATION_NOT_ALLOWED_FOR_LOCAL,UPSTREAM_DISCONNECTED:U.INTERNAL_ERROR,UPSTREAM_HANDSHAKE_FAILED:U.INTERNAL_ERROR,PATH_OUTSIDE_WORKSPACE:U.PATH_OUTSIDE_WORKSPACE,FILE_TOO_LARGE:U.FILE_TOO_LARGE,UNSUPPORTED_MIME:U.UNSUPPORTED_MIME,UPLOAD_FAILED:U.UPLOAD_FAILED,UPSTREAM_NOT_READY:U.UPSTREAM_NOT_READY,AGENT_DEPENDENCY_INSTALL_FAILED:U.AGENT_DEPENDENCY_INSTALL_FAILED,AGENT_APPROVAL_TIMEOUT:U.AGENT_APPROVAL_TIMEOUT};function P_(t){if(t!=null)return t instanceof Error?{name:t.name,message:ci(t.message)}:typeof t=="string"?ci(t):typeof t=="object"?D_(t):t}var C_=[[/\/Users\/[^/\s'"`)]+/g,"/Users/<redacted>"],[/\/home\/[^/\s'"`)]+/g,"/home/<redacted>"],[/[A-Za-z]:\\Users\\[^\\\s'"`)]+/g,"C:\\Users\\<redacted>"],[/(Bearer|Token|Authorization:)\s+[\w._-]+/gi,"$1 <redacted>"],[/\b(sk|pat|ak)[-_][A-Za-z0-9_-]{20,}\b/g,"<redacted-key>"]];function ci(t){let e=t;for(let[n,r]of C_)e=e.replace(n,r);return e}function D_(t){let e={};for(let[n,r]of Object.entries(t))typeof r=="string"?e[n]=ci(r):e[n]=r;return e}function li(t){if(t instanceof _){let e=P_(t.cause),n={bridgeCode:t.code,retriable:t.retriable};return e!==void 0&&(n.cause=e),{code:O_[t.code]??U.INTERNAL_ERROR,message:ci(t.message),data:n}}return{code:U.INTERNAL_ERROR,message:ci(t instanceof Error?t.message:String(t))}}function bf(t){let e=t.data,n=e?.bridgeCode??"AGENT_PROTOCOL_ERROR",r=!!e&&typeof e.message=="string"&&!!e.message,i=r?e?.message:t.message,s=t.data;if(r&&e){let{message:o,...a}=e;s=a}return new _(n,i,{retriable:e?.retriable??!1,cause:s})}function xf(t){return`${JSON.stringify(t)}
92
92
  `}var Af=10*1024*1024,qs=class{buffer="";onError;constructor(e={}){this.onError=e.onError}push(e){if(this.buffer+=typeof e=="string"?e:e.toString("utf8"),this.buffer.length>Af){let i=this.buffer.length;return this.buffer="",this.onError?.({line:`<buffer overflow: ${i} bytes, dropped>`,error:new Error(`LdjsonDecoder buffer exceeded ${Af} bytes`)}),[]}let n=this.buffer.split(`
93
93
  `);this.buffer=n.pop()??"";let r=[];for(let i of n){let s=i.replace(/\r$/,"").trim();if(s)try{r.push(JSON.parse(s))}catch(o){this.onError?.({line:s,error:o})}}return r}flush(){if(!this.buffer)return[];let e=this.buffer.replace(/\r$/,"").trim();if(this.buffer="",!e)return[];try{return[JSON.parse(e)]}catch(n){return this.onError?.({line:e,error:n}),[]}}};var Pf={"session/prompt":"session.prompt","session/cancel":"session.cancel","session/new":"session.new","session/load":"session.load","_agent/create":"agent.create","_agent/health":"agent.health","_agent/pair":"agent.pair","_agent/listSkills":"agent.listSkills","_agent/addSkills":"agent.addSkills","_agent/removeSkills":"agent.removeSkills","_agent/getFileTree":"agent.getFileTree","_agent/getFileContent":"agent.getFileContent","_agent/detail":"agent.detail","_agent/update":"agent.update","_agent/disconnect":"agent.disconnect","_agent/switchModel":"agent.switchModel","_agent/genModelToken":"agent.genModelToken","_agent/reset":"agent.reset","_agent/repair":"agent.repair","session/request_permission":"session.requestPermission",initialize:"initialize"},Yb=Object.fromEntries(Object.entries(Pf).map(([t,e])=>[e,t])),N_={"session.prompt":["agentId","triggerMsgId","sessionId"],"session.cancel":["agentId","triggerMsgId","sessionId"],"session.new":["agentId"],"session.load":["agentId"],"agent.create":["agentId"],"agent.health":[],"agent.listSkills":["agentId"],"agent.addSkills":["agentId"],"agent.removeSkills":["agentId"],"agent.getFileTree":["agentId"],"agent.getFileContent":["agentId"],"agent.detail":["agentId"],"agent.update":["agentId"],"agent.disconnect":["agentId"],"agent.switchModel":["agentId"],"agent.genModelToken":["agentId","sessionId"],"agent.reset":["agentId"],"agent.repair":["agentId"],"session.requestPermission":["agentId","sessionId"],"agent.pair":[],initialize:[]},ir=class{seq=0;next(e,n){this.seq+=1;let r=Pf[e]??L_(e),i=N_[r]??[],s=[r,String(this.seq)];if(i.length>0){let o=i.map(c=>Of(n?.[c]??"")),a=F_(o).join(":");a&&s.push(a)}else n&&Object.values(n).some(o=>o)&&s.push(Object.values(n).filter(Boolean).map(o=>Of(String(o))).join(":"));return s.join("_")}reset(){this.seq=0}};function L_(t){return t.replace(/[\s/]+/g,".").replace(/_+/g,"-")}function Of(t){return t.replace(/[:_\s]+/g,"-")}function F_(t){let e=t.length;for(;e>0&&!t[e-1];)e-=1;return t.slice(0,e)}gt();Li();Te();L();var B_=pt("COZE_BRIDGE_INITIALIZE_TIMEOUT_MS",3e4),U_=200,z_=pt("COZE_BRIDGE_SESSION_PROMPT_MAX_MS",3600*1e3),$_=pt("COZE_BRIDGE_SESSION_PROMPT_FRAME_IDLE_MS",600*1e3),G_=pt("COZE_BRIDGE_SESSION_PROMPT_APPROVAL_MAX_MS",1440*60*1e3),Cf=500;function H_(t){try{let e=JSON.stringify(t);return e===void 0||e.length<=Cf?t:`${e.slice(0,Cf)}...<truncated, total ${e.length} chars>`}catch{return"<unserializable>"}}function Df(t,e){if(!(typeof t!="number"||t<=0))try{if(process.platform==="win32"){let n=["/PID",String(t),"/T"];e==="SIGKILL"&&n.push("/F"),M_("taskkill",n,{stdio:"ignore",windowsHide:!0})}else process.kill(-t,e)}catch{}}var ct=class{constructor(e){this.opts=e;this.log=b(`downstream.${this.constructor.name}`,this.opts.agentId),this.decoder=new qs({onError:n=>this.log.warn("decode line failed",{line:n.line})})}opts;child;decoder;pending=new Map;inflightAgentRequests=new Map;idAllocator=new ir;updateHandlers=[];agentRequestHandlers=[];exitHandlers=[];log;stopped=!1;stderrRing=[];sanitizeEnv(e){return e}async start(){if(this.child)throw new _("BRIDGE_INTERNAL","Downstream already started");let e=process.platform!=="win32",n=Fe(this.opts.command,this.opts.args,{cwd:this.opts.cwd,env:{...this.sanitizeEnv(process.env),...this.opts.env},stdio:["pipe","pipe","pipe"],detached:e});this.child=n,n.stdout?.setEncoding("utf8"),n.stdout?.on("data",r=>{try{for(let i of this.decoder.push(r))this.dispatch(i)}catch(i){this.log.warn("stdout dispatch threw, swallowed to keep daemon alive",{err:String(i)})}}),n.stderr?.setEncoding("utf8"),n.stderr?.on("data",r=>{let i=r.trimEnd();this.stderrRing.push(i),this.stderrRing.length>U_&&this.stderrRing.shift(),this.log.debug("stderr",{text:i})}),n.stdin?.on("error",r=>{this.log.warn("child stdin error",{err:String(r)})}),n.stdout?.on("error",r=>{this.log.warn("child stdout error",{err:String(r)})}),n.stderr?.on("error",r=>{this.log.warn("child stderr error",{err:String(r)})}),n.on("exit",(r,i)=>{this.stopped=!0,(r!==0||i!==null)&&this.stderrRing.length>0&&this.log.warn("downstream exited abnormally, recent stderr",{code:r,signal:i,recentStderr:[...this.stderrRing]});try{for(let o of this.decoder.flush())this.dispatch(o)}catch(o){this.log.debug("decoder.flush on exit threw (ignored)",{err:String(o)})}this.failAllPending(new _("AGENT_PROTOCOL_ERROR",`agent exited (${r}/${i})`));for(let o of this.exitHandlers)o(r,i)}),n.on("error",r=>{this.log.error("child error",{err:String(r)}),this.failAllPending(new _("AGENT_SPAWN_FAILED",String(r),{cause:r}))}),this.log.info("downstream started",{command:this.opts.command,pid:n.pid,cwd:this.opts.cwd})}async stop(e){if(!this.child||this.stopped)return;this.stopped=!0,this.log.info("downstream stopping",{reason:e});let n=this.child,r=new Promise(s=>n.once("exit",()=>s()));Df(n.pid,"SIGTERM");let i=setTimeout(()=>{n.killed||Df(n.pid,"SIGKILL")},5e3);try{await r}finally{clearTimeout(i)}}pid(){return this.child?.pid}isAlive(){return!!this.child&&!this.stopped}getStderrTail(){return[...this.stderrRing]}initialize(e){return this.call("initialize",e)}sessionNew(e){return this.call("session/new",{mcpServers:[],...e})}sessionLoad(e){return this.call("session/load",{mcpServers:[],...e})}sessionPrompt(e,n=z_,r=$_,i=G_){return this.call("session/prompt",e,n,r,i)}async sessionCancel(e){!this.child||this.stopped||this.writeFrame(nr("session/cancel",e))}onUpdate(e){this.updateHandlers.push(e)}onAgentRequest(e){this.agentRequestHandlers.push(e)}respondAgentRequest(e,n){if(this.inflightAgentRequests.delete(e),!(!this.child||this.stopped))try{this.writeFrame(rr(e,n))}catch(r){this.log.warn("respondAgentRequest write failed",{id:e,err:String(r)})}}respondAgentRequestError(e,n){if(this.inflightAgentRequests.delete(e),!(!this.child||this.stopped))try{this.writeFrame(Ht(e,n))}catch(r){this.log.warn("respondAgentRequestError write failed",{id:e,err:String(r)})}}onExit(e){this.exitHandlers.push(e)}call(e,n,r=B_,i=0,s=0){if(!this.child||this.stopped)return Promise.reject(new _("AGENT_PROTOCOL_ERROR","downstream not started"));let o=this.idAllocator.next(e),a=ai(o,e,n),c=(()=>{if(typeof n!="object"||n===null)return;let p=n.sessionId;return typeof p=="string"?p:void 0})(),l=r>0&&Number.isFinite(r),d=i>0&&Number.isFinite(i);return new Promise((p,m)=>{let u={resolve:p,reject:m,timer:null,frameIdleTimer:null,armFrameIdle:null,method:e},h=Date.now();if(l){let w=()=>{u.timer=setTimeout(()=>{let S=Date.now()-h;if(this.inflightAgentRequests.size>0&&S<s){this.log.debug("hard cap fired but agent request inflight, extending to approval cap",{id:o,method:e,elapsed:S,approvalMaxMs:s,...c?{sessionId:c}:{}}),w();return}this.pending.delete(o),u.frameIdleTimer&&clearTimeout(u.frameIdleTimer);let v=this.inflightAgentRequests.size>0;this.log.warn("downstream call timeout",{id:o,method:e,timeoutMs:r,approvalMaxMs:s,awaitingApproval:v,...c?{sessionId:c}:{}}),m(v?new _("AGENT_APPROVAL_TIMEOUT",`${e} awaiting permission timed out after ${s}ms`):new _("AGENT_TIMEOUT",`${e} timed out after ${r}ms`))},r)};w()}let g=d?()=>{u.frameIdleTimer&&clearTimeout(u.frameIdleTimer),u.frameIdleTimer=setTimeout(()=>{if(this.inflightAgentRequests.size>0){this.log.debug("frame-idle fired but agent request inflight, re-arming",{id:o,method:e,inflight:this.inflightAgentRequests.size,...c?{sessionId:c}:{}}),g?.();return}u.timer&&clearTimeout(u.timer),this.pending.delete(o),this.log.warn("frame-idle timeout, rejecting pending call",{id:o,method:e,frameIdleMs:i,...c?{sessionId:c}:{}}),m(new _("AGENT_FRAME_IDLE_TIMEOUT",`${e} no session/update for ${i}ms (no inflight agent request)`))},i)}:null;u.armFrameIdle=g,this.pending.set(o,u),g?.();try{this.writeFrame(a)}catch(w){u.timer&&clearTimeout(u.timer),u.frameIdleTimer&&clearTimeout(u.frameIdleTimer),this.pending.delete(o),m(w)}})}writeFrame(e){if(!this.child?.stdin||this.child.stdin.destroyed)throw new _("AGENT_PROTOCOL_ERROR","downstream stdin not writable");this.child.stdin.write(xf(e),n=>{n&&this.log.warn("stdin write callback err",{err:String(n)})})}dispatch(e){if(Ws(e)){let n=e.id!==null?this.pending.get(e.id):void 0;if(!n){this.log.warn("orphan response",{id:e.id});return}this.pending.delete(e.id),n.timer&&clearTimeout(n.timer),n.frameIdleTimer&&clearTimeout(n.frameIdleTimer),e.error?(this.log.warn("downstream returned error frame",{id:e.id,method:n.method,code:e.error.code,message:e.error.message,data:e.error.data}),n.reject(bf(e.error))):e.result===void 0?(this.log.warn("downstream response missing both result and error",{id:e.id,method:n.method}),n.reject(new _("AGENT_PROTOCOL_ERROR",`${n.method} response missing both result and error`))):(this.log.info("downstream returned result",{id:e.id,method:n.method,result:H_(e.result)}),n.resolve(e.result));return}if(kf(e)){if(e.method==="session/update"){for(let n of this.pending.values())n.armFrameIdle?.();for(let n of this.updateHandlers)try{Promise.resolve(n(e.params)).catch(r=>this.log.warn("update handler failed (async)",{err:String(r)}))}catch(r){this.log.warn("update handler threw sync, swallowed",{err:String(r)})}}else this.log.info("unknown notification (drop, not forwarded)",{method:e.method});return}if(Rf(e)){let n=e;try{this.handleAgentRequest(n).catch(r=>this.log.error("agent request handler failed (async)",{method:n.method,err:String(r)}))}catch(r){this.log.warn("handleAgentRequest threw sync, swallowed",{method:n.method,err:String(r)})}}}async handleAgentRequest(e){if(this.agentRequestHandlers.length===0){this.writeFrame(Ht(e.id,{code:-32601,message:`method not handled by Bridge: ${e.method}`}));return}this.inflightAgentRequests.set(e.id,e.method);for(let n of this.agentRequestHandlers)try{await n(e)}catch(r){this.log.error("agentRequestHandler threw",{method:e.method,err:String(r)});try{this.writeFrame(Ht(e.id,li(r)))}catch{}this.inflightAgentRequests.delete(e.id)}}failAllPending(e){for(let n of this.pending.values())n.timer&&clearTimeout(n.timer),n.frameIdleTimer&&clearTimeout(n.frameIdleTimer),n.reject(e);this.pending.clear(),this.inflightAgentRequests.clear()}};function j_(t){let e={};for(let[n,r]of Object.entries(t))r!==void 0&&(n.startsWith("CLAUDE")||n==="AI_AGENT"||n==="BAGGAGE"||(e[n]=r));return e}var Vs=class extends ct{framework="claude-code";constructor(e){let n=br("claude-code",e.command),r=e.args??[],i={command:n,args:r,cwd:e.cwd,agentId:e.agentId,...e.env?{env:e.env}:{}};super(i)}sanitizeEnv(e){return j_(e)}};tn();import{mkdtempSync as W_,rmSync as q_}from"node:fs";import{tmpdir as V_}from"node:os";import{join as J_}from"node:path";var Js=class extends ct{framework="codex";authMethodId;codexHomeDir;constructor(e){let n=br("codex",e.command),r=e.args??[],i=e.extraArgs?[...r,...e.extraArgs]:r,s=e.isolateCodexHome?W_(J_(V_(),"coze-bridge-codex-home-")):void 0,o=s?{...e.env??{},CODEX_HOME:s}:e.env,a={command:n,args:i,cwd:e.cwd,agentId:e.agentId,...o?{env:o}:{}};super(a),this.authMethodId=e.authMethodId,this.codexHomeDir=s}async initialize(e){let n=await super.initialize(e);return this.authMethodId&&await this.call("authenticate",{methodId:this.authMethodId}),n}async stop(e){if(await super.stop(e),this.codexHomeDir)try{q_(this.codexHomeDir,{recursive:!0,force:!0})}catch{}}};var Z_=3e4,sr=class extends ct{framework="openclaw";agentId;sessionName;slashModelOnStart;constructor(e){let n=e.sessionName??"default",r=["acp","--session",`agent:${e.agentId}:${n}`];e.gatewayToken&&r.push("--token",e.gatewayToken);let i={command:e.command,args:r,cwd:e.cwd,agentId:e.agentId,...e.env?{env:e.env}:{}};super(i),this.agentId=e.agentId,this.sessionName=n,this.slashModelOnStart=e.slashModelOnStart}async afterSessionEstablished(e){this.slashModelOnStart&&(this.log.info("switching session to per-session provider via /model",{agentId:this.agentId,sessionName:this.sessionName,slash:this.slashModelOnStart}),await this.sessionPrompt({sessionId:e,prompt:[{type:"text",text:`/model ${this.slashModelOnStart}`}]},Z_))}get acpSessionName(){return this.sessionName}};Te();L();le();function wc(t){return t.replace(/[^A-Za-z0-9._-]+/g,"-")}tn();var jt=class{slots=[];running=!1;closed=!1;disposed=!1;enqueue(e){return this.disposed?Promise.reject(new Error("AsyncQueue disposed")):this.closed?Promise.reject(new Error("AsyncQueue closed")):new Promise((n,r)=>{this.slots.push({task:e,resolve:n,reject:r}),this.drain()})}close(){this.closed=!0}dispose(e=new Error("AsyncQueue disposed")){for(this.disposed=!0,this.closed=!0;this.slots.length>0;)this.slots.shift()?.reject(e)}get size(){return this.slots.length}get isRunning(){return this.running}get isDisposed(){return this.disposed}async drain(){if(!this.running){this.running=!0;try{for(;this.slots.length>0&&!this.disposed;){let e=this.slots.shift();if(!e)break;try{let n=await e.task();e.resolve(n)}catch(n){e.reject(n)}}}finally{this.running=!1}}}};var Zs=class{agentId;framework;workspace;deployType;accountId;patToken;modelInfo;sessions=new Map;sessionQueues=new Map;activeTriggers=new Map;activeGroupIds=new Map;status="ok";model;lastActiveAt=Date.now();constructor(e){this.agentId=e.agentId,this.framework=e.framework,this.workspace=e.workspace,this.model=e.model,this.deployType=e.deployType??"local",e.accountId&&(this.accountId=e.accountId),e.patToken&&(this.patToken=e.patToken),e.modelInfo&&(this.modelInfo=e.modelInfo)}setPatToken(e){this.patToken=e}setModelInfo(e){this.modelInfo=e}getSessionQueue(e){let n=this.sessionQueues.get(e);return(!n||n.isDisposed)&&(n=new jt,this.sessionQueues.set(e,n)),n}allSessionQueues(){return this.sessionQueues.entries()}hasSessionQueue(e){let n=this.sessionQueues.get(e);return!!n&&!n.isDisposed}async dispose(e){this.status="stopped";let n=new Error(`AgentSession disposed${e?`: ${e}`:""}`);for(let r of this.sessionQueues.values())r.dispose(n);this.sessionQueues.clear(),await this.killAllRuntimes(e??"dispose")}async killAllRuntimes(e){let n=[];for(let[,r]of this.sessions)di(r),r.downstream&&(n.push(r.downstream.stop(e).catch(()=>{})),r.downstream=void 0);await Promise.all(n),this.activeTriggers.clear(),this.activeGroupIds.clear()}};function di(t){t.idleTimer&&(clearTimeout(t.idleTimer),t.idleTimer=void 0)}gt();L();import{promises as yc}from"node:fs";import{join as K_}from"node:path";var wn=b("agents.codex-sandbox-installer"),Nf="@openai/codex@0.135.0",Lf="https://registry.npmmirror.com",_c="/usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin/codex",X_="/usr/bin",Ff=["apply_patch","applypatch","codex-execve-wrapper","codex-linux-sandbox"],Y_=9e4,Q_=5e3,ui=null,Mf=!1;async function Bf(t,e={}){if((e.platform??process.platform)!=="linux"||Mf)return;if(ui)return ui;let r=e.exec??Pn,i=e.statFile??(async a=>{try{return await yc.stat(a),!0}catch{return!1}}),s=e.symlink??((a,c)=>yc.symlink(a,c)),o=e.unlink??(a=>yc.unlink(a));return ui=(async()=>{try{let a=!1;try{let{stdout:l}=await r("which",["codex"],{timeout:Q_});a=l.trim().length>0}catch{a=!1}if(a)wn.info("codex already present, skip install");else{wn.info("codex not found, installing",{package:Nf,registry:Lf});try{await r("npm",["i","-g",Nf,`--registry=${Lf}`],{timeout:Y_,maxBuffer:10*1024*1024,signal:t}),wn.info("codex install ok")}catch(l){wn.warn("codex install failed (skip symlinks)",{err:String(l)});return}}if(!await i(_c)){wn.warn("codex vendor bin not found, skip symlinks",{target:_c});return}let c=0;for(let l of Ff){let d=K_(X_,l);try{await o(d).catch(()=>{}),await s(_c,d),c+=1,wn.info("codex sandbox symlink created",{link:d})}catch(p){wn.warn("codex sandbox symlink failed (ignored)",{link:d,err:String(p)})}}c===Ff.length&&(Mf=!0)}finally{ui=null}})(),ui}gt();L();import{constants as Uf,access as eE}from"node:fs/promises";import{delimiter as tE,join as nE}from"node:path";var Wt=b("framework-detector"),zf={"claude-code":"claude",codex:"codex",openclaw:"openclaw"},rE=[".exe",".cmd",".bat",".ps1"],qt=class{env;constructor(e={}){this.env={pathEnv:e.pathEnv??process.env.PATH??"",platform:e.platform??process.platform,spawn:e.spawn??Fe,access:e.access??eE}}async detect(e){let n=zf[e],r=await this.which(n);if(!r)return Wt.debug("framework binary not found",{framework:e,bin:n}),null;let i=e==="openclaw"?["--log-level","silent"]:[],[s,o]=await Promise.all([this.probeVersion(r,i),e==="openclaw"?this.probeOpenclawDefaultAgent(r):Promise.resolve(null)]),a={path:r,version:s};return o&&(a.defaultAgent=o),a}async detectAll(){let e=await Promise.all(Object.keys(zf).map(async r=>[r,await this.detect(r)])),n={};for(let[r,i]of e)i&&(n[r]=i);return n}async which(e){let n=this.env.pathEnv.split(tE).filter(Boolean),r=this.env.platform==="win32"?["",...rE]:[""];for(let i of n)for(let s of r){let o=nE(i,e+s);if(await this.isExecutable(o))return o}return null}async isExecutable(e){try{let n=this.env.platform==="win32"?Uf.F_OK:Uf.X_OK;return await this.env.access(e,n),!0}catch{return!1}}async probeOpenclawDefaultAgent(e){let n=await this.runProbe(e,["--log-level","silent","agents","list","--json"]);if(!n)return Wt.warn("openclaw default agent probe: runProbe returned null (spawn err / timeout)",{path:e}),null;if(n.code!==0)return Wt.warn("openclaw default agent probe: non-zero exit",{path:e,code:n.code,stdoutHead:n.stdout.slice(0,200)}),null;let r=n.stdout.match(/\[\s*\{[\s\S]*\}\s*\]/);if(!r)return Wt.warn("openclaw default agent probe: regex no match (no JSON array in stdout)",{path:e,stdoutHead:n.stdout.slice(0,200)}),null;try{let i=JSON.parse(r[0]);if(!Array.isArray(i))return Wt.warn("openclaw default agent probe: JSON parsed but not an array",{path:e}),null;let s=i.find(o=>o?.isDefault===!0);return s?!s.id||!s.workspace?(Wt.warn("openclaw default agent probe: default agent missing id or workspace",{path:e,hasId:!!s.id,hasWorkspace:!!s.workspace}),null):{id:s.id,workspace:s.workspace}:(Wt.info("openclaw default agent probe: no agent has isDefault=true",{path:e,agentCount:i.length}),null)}catch(i){return Wt.warn("openclaw default agent probe: JSON.parse failed",{path:e,err:String(i),matchHead:r[0].slice(0,200)}),null}}async probeVersion(e,n=[]){let r=await this.runProbe(e,[...n,"--version"]);return r&&(sE(r.stdout).split(/\r?\n/)[0]??"").trim()||"unknown"}runProbe(e,n){return new Promise(r=>{let i="",s=!1,o,a=c=>{s||(s=!0,o&&clearTimeout(o),r(c))};try{let c=this.env.spawn(e,n,{stdio:["ignore","pipe","pipe"]});o=setTimeout(()=>{c.kill("SIGKILL"),a(null)},15e3),c.stdout?.on("data",l=>{i+=l.toString("utf8")}),c.on("error",()=>a(null)),c.on("close",l=>a({code:l,stdout:i}))}catch{a(null)}})}},iE=new RegExp("\x1B\\[[0-9;]*[A-Za-z]","g");function sE(t){return t.replace(iE,"")}import{homedir as oE}from"node:os";import{join as aE}from"node:path";gt();Te();Wi();L();async function Hf(){let t=aE(oE(),".openclaw/openclaw.json");return(await Nn(t))?.gateway?.auth?.token??""}var $f=b("openclaw.config"),cE=[0,5e3,5e3],Gf="models.providers.",Ks="agents.defaults.models",Xs=class{command;env;retryDelaysMs;queue=new jt;constructor(e){this.command=e.command,this.env=e.env??process.env,this.retryDelaysMs=e.retryDelaysMs??cE}async withRetry(e,n){let r;for(let i=0;i<this.retryDelaysMs.length;i++){let s=this.retryDelaysMs[i]??0;s>0&&await new Promise(o=>setTimeout(o,s));try{return await n()}catch(o){r=o,$f.warn("openclaw cli failed, will retry",{label:e,attempt:i+1,err:String(o)})}}throw new _("AGENT_SPAWN_FAILED",`openclaw cli ${e} failed after ${this.retryDelaysMs.length} attempts: ${r?.message??"unknown"}`)}runCli(e){return new Promise((n,r)=>{let i=Fe(this.command,e,{stdio:["ignore","pipe","pipe"],env:this.env}),s="";i.stderr?.on("data",o=>{s+=o.toString("utf8")}),i.on("error",r),i.on("close",o=>{o===0?n():r(new Error(`exit ${o}: ${s.trim().slice(0,500)}`))})})}async runCliTolerant(e,n){try{await this.runCli(e)}catch(r){let i=String(r);if(n.some(s=>i.includes(s)))return;throw r}}async bestEffortUnset(e,n){try{await this.queue.enqueue(()=>this.withRetry(e,()=>this.runCli(["config","unset",n])))}catch(r){$f.warn(`${e} failed (best-effort)`,{configPath:n,err:String(r)})}}ensureProvider(e,n){return this.queue.enqueue(()=>this.withRetry(`config set models.providers.${e}`,()=>this.runCli(["config","set",`${Gf}${e}`,JSON.stringify(n),"--strict-json","--merge"])))}removeProvider(e){return this.bestEffortUnset(`config unset models.providers.${e}`,`${Gf}${e}`)}addModelToAllowlist(e,n){let r={[e]:n?{alias:n}:{}};return this.queue.enqueue(()=>this.withRetry(`config set ${Ks}[${e}]`,()=>this.runCli(["config","set",Ks,JSON.stringify(r),"--strict-json","--merge"])))}removeModelFromAllowlist(e){return this.bestEffortUnset(`config unset ${Ks}[${e}]`,`${Ks}.${e}`)}ensureAgent(e,n,r){let i=["agents","add",e,"--workspace",n,"--non-interactive"];return r&&i.push("--model",r),this.queue.enqueue(()=>this.withRetry(`agents add ${e}`,()=>this.runCliTolerant(i,["already exists","already registered"])))}restartGateway(){return this.queue.enqueue(()=>this.withRetry("gateway restart",()=>this.runCli(["gateway","restart"])))}deleteAgent(e){return this.queue.enqueue(()=>this.withRetry(`agents delete ${e}`,()=>this.runCliTolerant(["agents","delete",e,"--force"],["not found","does not exist"])))}};var K=b("agent-manager"),pE=(t,e,n,r,i,s,o,a,c)=>{switch(t){case"claude-code":{let l={...i?{...uf(i),...pf(i,o,a)}:{},...c??{},IS_SANDBOX:"1"};return new Vs({cwd:n,env:l,agentId:r})}case"codex":{let d=[...i?[...ff(i),...mf(i,o,a)]:[],"-c",'sandbox_mode="danger-full-access"',"-c",'approval_policy="never"'],p={...i?hf(i):{},...c??{}},m=!!i;return new Js({cwd:n,agentId:r,...d.length>0?{extraArgs:d}:{},...Object.keys(p).length>0?{env:p}:{},...m?{authMethodId:"openai-api-key",isolateCodexHome:!0}:{}})}case"openclaw":return new sr({command:e,cwd:n,agentId:r,...s?{sessionName:wc(s)}:{}})}};function Ec(t){return t==="claude-code"||t==="codex"}function gE(t){let e=[],n=Object.keys(t).sort();for(let r of n){let i=t[r];i!==void 0&&(mE(i)||e.push(`${r}=${i}`))}return e.length===0?"":`${e.join(`
94
94
  `)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coze-bridge",
3
- "version": "0.1.92-beta.5",
3
+ "version": "0.1.92",
4
4
  "description": "Local daemon that bridges cloud Agent Service and on-device AI agents (Claude Code / Codex / OpenClaw) over extended ACP.",
5
5
  "license": "MIT",
6
6
  "type": "module",