coze-bridge 0.1.91-beta.1 → 0.1.91

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
@@ -81,7 +81,7 @@ WantedBy=default.target
81
81
  `},configPath(t){return oT(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 gg("schtasks",["/Create","/SC","ONLOGON","/TN",bo,"/TR",n,"/RU",t.userName,"/F"]),El.info("task scheduler entry created",{task:bo,logFile:t.logFile})},async uninstall(t){await gg("schtasks",["/Delete","/TN",bo,"/F"]).catch(e=>El.warn("schtasks /Delete failed (ignored)",{err:String(e)})),El.info("task scheduler entry removed",{task:bo})}}});var wg={};Ri(wg,{buildContext:()=>dT,getSupervisor:()=>lT,launchdSupervisor:()=>yl,systemdSupervisor:()=>_l,taskSchedulerSupervisor:()=>Sl});import{homedir as aT,userInfo as cT}from"node:os";function lT(t=process.platform){switch(t){case"darwin":return yl;case"linux":return _l;case"win32":return Sl;default:throw new Error(`unsupported platform for OS supervisor: ${t}`)}}function dT(){let t=F();return{nodeBin:process.execPath,entry:fl(t),logFile:t.logFile,homeDir:aT(),userName:cT().username}}var yg=we(()=>{"use strict";se();mo();hg();pg();mg()});L();Xt();var Ml=A("acp-installer-warmup"),om=["claude-code","codex"];async function Bl(t={}){let e=t.ensure??Kt,r=(await Promise.allSettled(om.map(async i=>{let s=await e(i);Ml.info("acp wrapper warmup ok",{framework:i,path:s})}))).filter(i=>i.status==="rejected");r.length>0&&Ml.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))})}Rt();L();import{readdir as ym}from"node:fs/promises";import{mkdir as Wl,writeFile as ql}from"node:fs/promises";import{join as Mo}from"node:path";var wm={"claude-code":"CLAUDE.md",codex:"AGENTS.md",openclaw:"SOUL.md"};async function Pn(t,e,n){await Wl(t,{recursive:!0});let r=wm[e],i=Mo(t,r);return await ql(i,n??"","utf8"),i}async function Jl(t){let e=Mo(t,".claude");await Wl(e,{recursive:!0});let n=Mo(e,"settings.local.json"),r=JSON.stringify({permissions:{defaultMode:"acceptEdits"}},null,2);return await ql(n,r,"utf8"),n}var Ae=A("agent-detail-sync"),_m=6e4,Em=5*6e4,zi=class{constructor(e){this.opts=e}opts;retryQueue=new Map;async syncAll(e){let n=this.opts.paths.agentsRoot,r;try{r=await ym(n)}catch(i){Ae.info("agents dir not found, skip detail sync",{root:n,err:String(i)});return}Ae.info("starting detail sync",{reason:e,count:r.length}),await Promise.allSettled(r.map(async i=>{let s=await fe(i,this.opts.paths).catch(()=>null);if(s){if(s.disconnectedAt){Ae.debug("detail sync: skip disconnected agent",{agentId:i});return}try{await this.syncOne(i,s)}catch(o){Ae.warn("detail sync failed for agent, skipping",{agentId:i,err:String(o)})}}})),Ae.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){Ae.info("retrying pending detail syncs",{count:n.length});for(let r of n)try{await this.syncOne(r)}catch(i){Ae.debug("detail sync retry still failing, will try again",{agentId:r,err:String(i)})}}}async syncOne(e,n){let r=n??await fe(e,this.opts.paths);if(!r){Ae.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){Ae.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,Em):_m;this.retryQueue.set(e,{dueAt:Date.now()+l,currentDelay:l});return}if(i.agentId&&i.agentId!==e){Ae.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&&Ae.info("detail.deployType",{agentId:e,deployType:i.deployType}),!s){Ae.debug("detail sync: no diff",{agentId:e});return}await ke(r,this.opts.paths),Ae.info("detail sync: config updated",{agentId:e,identityChanged:o,agentName:r.agentName}),o&&(await Pn(r.workspace,r.framework,r.cozeIdentity),this.opts.handlers.reloadAgentSessionsPublic(e,"detail-sync"))}};var df=dt(kd(),1);import{lstat as Ya,mkdir as Qa,readFile as of,readdir as Jy,rm as Vy,stat as Zy,writeFile as ec}from"node:fs/promises";import{dirname as Ky,join as st,normalize as Xy,relative as rc,resolve as tc,sep as af}from"node:path";import{Readable as cf}from"node:stream";import{pipeline as lf}from"node:stream/promises";import Gm from"events";import be from"fs";import{EventEmitter as Fa}from"node:events";import au from"node:stream";import{StringDecoder as Hm}from"node:string_decoder";import du from"node:path";import Hn from"node:fs";import{dirname as nw,parse as rw}from"path";import{EventEmitter as uw}from"events";import wa from"assert";import{Buffer as ln}from"buffer";import*as Pd from"zlib";import fw from"zlib";import{posix as Fn}from"node:path";import{basename as Uw}from"node:path";import ys from"fs";import nt from"fs";import Bd from"path";import{win32 as Kw}from"node:path";import Wd from"path";import Ru from"node:fs";import hy from"node:assert";import{randomBytes as ku}from"node:crypto";import M from"node:fs";import ne from"node:path";import bu from"fs";import bs from"node:fs";import $r from"node:path";import Pe from"node:fs";import Ey from"node:fs/promises";import Ss from"node:path";import{join as Bu}from"node:path";import Oe from"node:fs";import $u from"node:path";var zm=Object.defineProperty,$m=(t,e)=>{for(var n in e)zm(t,n,{get:e[n],enumerable:!0})},bd=typeof process=="object"&&process?process:{stdout:null,stderr:null},jm=t=>!!t&&typeof t=="object"&&(t instanceof fn||t instanceof au||Wm(t)||qm(t)),Wm=t=>!!t&&typeof t=="object"&&t instanceof Fa&&typeof t.pipe=="function"&&t.pipe!==au.Writable.prototype.pipe,qm=t=>!!t&&typeof t=="object"&&t instanceof Fa&&typeof t.write=="function"&&typeof t.end=="function",ht=Symbol("EOF"),pt=Symbol("maybeEmitEnd"),bt=Symbol("emittedEnd"),Wi=Symbol("emittingEnd"),Tr=Symbol("emittedError"),qi=Symbol("closed"),Ad=Symbol("read"),Ji=Symbol("flush"),xd=Symbol("flushChunk"),Ge=Symbol("encoding"),Ln=Symbol("decoder"),oe=Symbol("flowing"),Rr=Symbol("paused"),zn=Symbol("resume"),ae=Symbol("buffer"),ve=Symbol("pipes"),ce=Symbol("bufferLength"),Ho=Symbol("bufferPush"),Vi=Symbol("bufferShift"),_e=Symbol("objectMode"),Y=Symbol("destroyed"),jo=Symbol("error"),Wo=Symbol("emitData"),Od=Symbol("emitEnd"),qo=Symbol("emitEnd2"),Ye=Symbol("async"),Jo=Symbol("abort"),Zi=Symbol("aborted"),kr=Symbol("signal"),Qt=Symbol("dataListeners"),xe=Symbol("discarded"),br=t=>Promise.resolve().then(t),Jm=t=>t(),Vm=t=>t==="end"||t==="finish"||t==="prefinish",Zm=t=>t instanceof ArrayBuffer||!!t&&typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Km=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),cu=class{src;dest;opts;ondrain;constructor(t,e,n){this.src=t,this.dest=e,this.opts=n,this.ondrain=()=>t[zn](),this.dest.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(t){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},Xm=class extends cu{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)}},Ym=t=>!!t.objectMode,Qm=t=>!t.objectMode&&!!t.encoding&&t.encoding!=="buffer",fn=class extends Fa{[oe]=!1;[Rr]=!1;[ve]=[];[ae]=[];[_e];[Ge];[Ye];[Ln];[ht]=!1;[bt]=!1;[Wi]=!1;[qi]=!1;[Tr]=null;[ce]=0;[Y]=!1;[kr];[Zi]=!1;[Qt]=0;[xe]=!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");Ym(e)?(this[_e]=!0,this[Ge]=null):Qm(e)?(this[Ge]=e.encoding,this[_e]=!1):(this[_e]=!1,this[Ge]=null),this[Ye]=!!e.async,this[Ln]=this[Ge]?new Hm(this[Ge]):null,e&&e.debugExposeBuffer===!0&&Object.defineProperty(this,"buffer",{get:()=>this[ae]}),e&&e.debugExposePipes===!0&&Object.defineProperty(this,"pipes",{get:()=>this[ve]});let{signal:n}=e;n&&(this[kr]=n,n.aborted?this[Jo]():n.addEventListener("abort",()=>this[Jo]()))}get bufferLength(){return this[ce]}get encoding(){return this[Ge]}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[_e]}set objectMode(t){throw new Error("objectMode must be set at instantiation time")}get async(){return this[Ye]}set async(t){this[Ye]=this[Ye]||!!t}[Jo](){this[Zi]=!0,this.emit("abort",this[kr]?.reason),this.destroy(this[kr]?.reason)}get aborted(){return this[Zi]}set aborted(t){}write(t,e,n){if(this[Zi])return!1;if(this[ht])throw new Error("write after end");if(this[Y])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[Ye]?br:Jm;if(!this[_e]&&!Buffer.isBuffer(t)){if(Km(t))t=Buffer.from(t.buffer,t.byteOffset,t.byteLength);else if(Zm(t))t=Buffer.from(t);else if(typeof t!="string")throw new Error("Non-contiguous data written to non-objectMode stream")}return this[_e]?(this[oe]&&this[ce]!==0&&this[Ji](!0),this[oe]?this.emit("data",t):this[Ho](t),this[ce]!==0&&this.emit("readable"),n&&r(n),this[oe]):t.length?(typeof t=="string"&&!(e===this[Ge]&&!this[Ln]?.lastNeed)&&(t=Buffer.from(t,e)),Buffer.isBuffer(t)&&this[Ge]&&(t=this[Ln].write(t)),this[oe]&&this[ce]!==0&&this[Ji](!0),this[oe]?this.emit("data",t):this[Ho](t),this[ce]!==0&&this.emit("readable"),n&&r(n),this[oe]):(this[ce]!==0&&this.emit("readable"),n&&r(n),this[oe])}read(t){if(this[Y])return null;if(this[xe]=!1,this[ce]===0||t===0||t&&t>this[ce])return this[pt](),null;this[_e]&&(t=null),this[ae].length>1&&!this[_e]&&(this[ae]=[this[Ge]?this[ae].join(""):Buffer.concat(this[ae],this[ce])]);let e=this[Ad](t||null,this[ae][0]);return this[pt](),e}[Ad](t,e){if(this[_e])this[Vi]();else{let n=e;t===n.length||t===null?this[Vi]():typeof n=="string"?(this[ae][0]=n.slice(t),e=n.slice(0,t),this[ce]-=t):(this[ae][0]=n.subarray(t),e=n.subarray(0,t),this[ce]-=t)}return this.emit("data",e),!this[ae].length&&!this[ht]&&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[ht]=!0,this.writable=!1,(this[oe]||!this[Rr])&&this[pt](),this}[zn](){this[Y]||(!this[Qt]&&!this[ve].length&&(this[xe]=!0),this[Rr]=!1,this[oe]=!0,this.emit("resume"),this[ae].length?this[Ji]():this[ht]?this[pt]():this.emit("drain"))}resume(){return this[zn]()}pause(){this[oe]=!1,this[Rr]=!0,this[xe]=!1}get destroyed(){return this[Y]}get flowing(){return this[oe]}get paused(){return this[Rr]}[Ho](t){this[_e]?this[ce]+=1:this[ce]+=t.length,this[ae].push(t)}[Vi](){return this[_e]?this[ce]-=1:this[ce]-=this[ae][0].length,this[ae].shift()}[Ji](t=!1){do;while(this[xd](this[Vi]())&&this[ae].length);!t&&!this[ae].length&&!this[ht]&&this.emit("drain")}[xd](t){return this.emit("data",t),this[oe]}pipe(t,e){if(this[Y])return t;this[xe]=!1;let n=this[bt];return e=e||{},t===bd.stdout||t===bd.stderr?e.end=!1:e.end=e.end!==!1,e.proxyErrors=!!e.proxyErrors,n?e.end&&t.end():(this[ve].push(e.proxyErrors?new Xm(this,t,e):new cu(this,t,e)),this[Ye]?br(()=>this[zn]()):this[zn]()),t}unpipe(t){let e=this[ve].find(n=>n.dest===t);e&&(this[ve].length===1?(this[oe]&&this[Qt]===0&&(this[oe]=!1),this[ve]=[]):this[ve].splice(this[ve].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[xe]=!1,this[Qt]++,!this[ve].length&&!this[oe]&&this[zn]();else if(t==="readable"&&this[ce]!==0)super.emit("readable");else if(Vm(t)&&this[bt])super.emit(t),this.removeAllListeners(t);else if(t==="error"&&this[Tr]){let r=e;this[Ye]?br(()=>r.call(this,this[Tr])):r.call(this,this[Tr])}return n}removeListener(t,e){return this.off(t,e)}off(t,e){let n=super.off(t,e);return t==="data"&&(this[Qt]=this.listeners("data").length,this[Qt]===0&&!this[xe]&&!this[ve].length&&(this[oe]=!1)),n}removeAllListeners(t){let e=super.removeAllListeners(t);return(t==="data"||t===void 0)&&(this[Qt]=0,!this[xe]&&!this[ve].length&&(this[oe]=!1)),e}get emittedEnd(){return this[bt]}[pt](){!this[Wi]&&!this[bt]&&!this[Y]&&this[ae].length===0&&this[ht]&&(this[Wi]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[qi]&&this.emit("close"),this[Wi]=!1)}emit(t,...e){let n=e[0];if(t!=="error"&&t!=="close"&&t!==Y&&this[Y])return!1;if(t==="data")return!this[_e]&&!n?!1:this[Ye]?(br(()=>this[Wo](n)),!0):this[Wo](n);if(t==="end")return this[Od]();if(t==="close"){if(this[qi]=!0,!this[bt]&&!this[Y])return!1;let i=super.emit("close");return this.removeAllListeners("close"),i}else if(t==="error"){this[Tr]=n,super.emit(jo,n);let i=!this[kr]||this.listeners("error").length?super.emit("error",n):!1;return this[pt](),i}else if(t==="resume"){let i=super.emit("resume");return this[pt](),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[pt](),r}[Wo](t){for(let n of this[ve])n.dest.write(t)===!1&&this.pause();let e=this[xe]?!1:super.emit("data",t);return this[pt](),e}[Od](){return this[bt]?!1:(this[bt]=!0,this.readable=!1,this[Ye]?(br(()=>this[qo]()),!0):this[qo]())}[qo](){if(this[Ln]){let e=this[Ln].end();if(e){for(let n of this[ve])n.dest.write(e);this[xe]||super.emit("data",e)}}for(let e of this[ve])e.end();let t=super.emit("end");return this.removeAllListeners("end"),t}async collect(){let t=Object.assign([],{dataLength:0});this[_e]||(t.dataLength=0);let e=this.promise();return this.on("data",n=>{t.push(n),this[_e]||(t.dataLength+=n.length)}),await e,t}async concat(){if(this[_e])throw new Error("cannot concat in objectMode");let t=await this.collect();return this[Ge]?t.join(""):Buffer.concat(t,t.dataLength)}async promise(){return new Promise((t,e)=>{this.on(Y,()=>e(new Error("stream destroyed"))),this.on("error",n=>e(n)),this.on("end",()=>t())})}[Symbol.asyncIterator](){this[xe]=!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[ht])return e();let r,i,s=l=>{this.off("data",o),this.off("end",a),this.off(Y,c),e(),i(l)},o=l=>{this.off("error",s),this.off("end",a),this.off(Y,c),this.pause(),r({value:l,done:!!this[ht]})},a=()=>{this.off("error",s),this.off("data",o),this.off(Y,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(Y,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[xe]=!1;let t=!1,e=()=>(this.pause(),this.off(jo,e),this.off(Y,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(jo,e),this.once(Y,e),{next:n,throw:e,return:e,[Symbol.iterator](){return this},[Symbol.dispose]:()=>{}}}destroy(t){if(this[Y])return t?this.emit("error",t):this.emit(Y),this;this[Y]=!0,this[xe]=!0,this[ae].length=0,this[ce]=0;let e=this;return typeof e.close=="function"&&!this[qi]&&e.close(),t?this.emit("error",t):this.emit(Y),this}static get isStream(){return jm}},ew=be.writev,Mt=Symbol("_autoClose"),qe=Symbol("_close"),Ar=Symbol("_ended"),$=Symbol("_fd"),Vo=Symbol("_finished"),yt=Symbol("_flags"),Zo=Symbol("_flush"),ga=Symbol("_handleChunk"),ma=Symbol("_makeBuf"),Ur=Symbol("_mode"),Ki=Symbol("_needDrain"),Wn=Symbol("_onerror"),qn=Symbol("_onopen"),Ko=Symbol("_onread"),$n=Symbol("_onwrite"),Bt=Symbol("_open"),We=Symbol("_path"),Ct=Symbol("_pos"),Qe=Symbol("_queue"),Gn=Symbol("_read"),Xo=Symbol("_readSize"),wt=Symbol("_reading"),xr=Symbol("_remain"),Yo=Symbol("_size"),os=Symbol("_write"),en=Symbol("_writing"),as=Symbol("_defaultFlag"),cn=Symbol("_errored"),Ma=class extends fn{[cn]=!1;[$];[We];[Xo];[wt]=!1;[Yo];[xr];[Mt];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[cn]=!1,this[$]=typeof e.fd=="number"?e.fd:void 0,this[We]=t,this[Xo]=e.readSize||16*1024*1024,this[wt]=!1,this[Yo]=typeof e.size=="number"?e.size:1/0,this[xr]=this[Yo],this[Mt]=typeof e.autoClose=="boolean"?e.autoClose:!0,typeof this[$]=="number"?this[Gn]():this[Bt]()}get fd(){return this[$]}get path(){return this[We]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[Bt](){be.open(this[We],"r",(t,e)=>this[qn](t,e))}[qn](t,e){t?this[Wn](t):(this[$]=e,this.emit("open",e),this[Gn]())}[ma](){return Buffer.allocUnsafe(Math.min(this[Xo],this[xr]))}[Gn](){if(!this[wt]){this[wt]=!0;let t=this[ma]();if(t.length===0)return process.nextTick(()=>this[Ko](null,0,t));be.read(this[$],t,0,t.length,null,(e,n,r)=>this[Ko](e,n,r))}}[Ko](t,e,n){this[wt]=!1,t?this[Wn](t):this[ga](e,n)&&this[Gn]()}[qe](){if(this[Mt]&&typeof this[$]=="number"){let t=this[$];this[$]=void 0,be.close(t,e=>e?this.emit("error",e):this.emit("close"))}}[Wn](t){this[wt]=!0,this[qe](),this.emit("error",t)}[ga](t,e){let n=!1;return this[xr]-=t,t>0&&(n=super.write(t<e.length?e.subarray(0,t):e)),(t===0||this[xr]<=0)&&(n=!1,this[qe](),super.end()),n}emit(t,...e){switch(t){case"prefinish":case"finish":return!1;case"drain":return typeof this[$]=="number"&&this[Gn](),!1;case"error":return this[cn]?!1:(this[cn]=!0,super.emit(t,...e));default:return super.emit(t,...e)}}},tw=class extends Ma{[Bt](){let t=!0;try{this[qn](null,be.openSync(this[We],"r")),t=!1}finally{t&&this[qe]()}}[Gn](){let t=!0;try{if(!this[wt]){this[wt]=!0;do{let e=this[ma](),n=e.length===0?0:be.readSync(this[$],e,0,e.length,null);if(!this[ga](n,e))break}while(!0);this[wt]=!1}t=!1}finally{t&&this[qe]()}}[qe](){if(this[Mt]&&typeof this[$]=="number"){let t=this[$];this[$]=void 0,be.closeSync(t),this.emit("close")}}},Is=class extends Gm{readable=!1;writable=!0;[cn]=!1;[en]=!1;[Ar]=!1;[Qe]=[];[Ki]=!1;[We];[Ur];[Mt];[$];[as];[yt];[Vo]=!1;[Ct];constructor(t,e){e=e||{},super(e),this[We]=t,this[$]=typeof e.fd=="number"?e.fd:void 0,this[Ur]=e.mode===void 0?438:e.mode,this[Ct]=typeof e.start=="number"?e.start:void 0,this[Mt]=typeof e.autoClose=="boolean"?e.autoClose:!0;let n=this[Ct]!==void 0?"r+":"w";this[as]=e.flags===void 0,this[yt]=e.flags===void 0?n:e.flags,this[$]===void 0&&this[Bt]()}emit(t,...e){if(t==="error"){if(this[cn])return!1;this[cn]=!0}return super.emit(t,...e)}get fd(){return this[$]}get path(){return this[We]}[Wn](t){this[qe](),this[en]=!0,this.emit("error",t)}[Bt](){be.open(this[We],this[yt],this[Ur],(t,e)=>this[qn](t,e))}[qn](t,e){this[as]&&this[yt]==="r+"&&t&&t.code==="ENOENT"?(this[yt]="w",this[Bt]()):t?this[Wn](t):(this[$]=e,this.emit("open",e),this[en]||this[Zo]())}end(t,e){return t&&this.write(t,e),this[Ar]=!0,!this[en]&&!this[Qe].length&&typeof this[$]=="number"&&this[$n](null,0),this}write(t,e){return typeof t=="string"&&(t=Buffer.from(t,e)),this[Ar]?(this.emit("error",new Error("write() after end()")),!1):this[$]===void 0||this[en]||this[Qe].length?(this[Qe].push(t),this[Ki]=!0,!1):(this[en]=!0,this[os](t),!0)}[os](t){be.write(this[$],t,0,t.length,this[Ct],(e,n)=>this[$n](e,n))}[$n](t,e){t?this[Wn](t):(this[Ct]!==void 0&&typeof e=="number"&&(this[Ct]+=e),this[Qe].length?this[Zo]():(this[en]=!1,this[Ar]&&!this[Vo]?(this[Vo]=!0,this[qe](),this.emit("finish")):this[Ki]&&(this[Ki]=!1,this.emit("drain"))))}[Zo](){if(this[Qe].length===0)this[Ar]&&this[$n](null,0);else if(this[Qe].length===1)this[os](this[Qe].pop());else{let t=this[Qe];this[Qe]=[],ew(this[$],t,this[Ct],(e,n)=>this[$n](e,n))}}[qe](){if(this[Mt]&&typeof this[$]=="number"){let t=this[$];this[$]=void 0,be.close(t,e=>e?this.emit("error",e):this.emit("close"))}}},lu=class extends Is{[Bt](){let t;if(this[as]&&this[yt]==="r+")try{t=be.openSync(this[We],this[yt],this[Ur])}catch(e){if(e?.code==="ENOENT")return this[yt]="w",this[Bt]();throw e}else t=be.openSync(this[We],this[yt],this[Ur]);this[qn](null,t)}[qe](){if(this[Mt]&&typeof this[$]=="number"){let t=this[$];this[$]=void 0,be.closeSync(t),this.emit("close")}}[os](t){let e=!0;try{this[$n](null,be.writeSync(this[$],t,0,t.length,this[Ct])),e=!1}finally{if(e)try{this[qe]()}catch{}}}},iw=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"]]),sw=t=>!!t.sync&&!!t.file,ow=t=>!t.sync&&!!t.file,aw=t=>!!t.sync&&!t.file,cw=t=>!t.sync&&!t.file,lw=t=>!!t.file,dw=t=>iw.get(t)||t,Ba=(t={})=>{if(!t)return{};let e={};for(let[n,r]of Object.entries(t)){let i=dw(n);e[i]=r}return e.chmod===void 0&&e.noChmod===!1&&(e.chmod=!0),delete e.noChmod,e},Vr=(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=Ba(s);if(i?.(c,o),sw(c)){if(typeof a=="function")throw new TypeError("callback not supported for sync tar functions");return t(c,o)}else if(ow(c)){let l=e(c,o);return a?l.then(()=>a(),a):l}else if(aw(c)){if(typeof a=="function")throw new TypeError("callback not supported for sync tar functions");return n(c,o)}else if(cw(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}),hw=fw.constants||{ZLIB_VERNUM:4736},it=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},hw)),pw=ln.concat,Cd=Object.getOwnPropertyDescriptor(ln,"concat"),gw=t=>t,Qo=Cd?.writable===!0||Cd?.set!==void 0?t=>{ln.concat=t?gw:pw}:t=>{},dn=Symbol("_superWrite"),Xi=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"}},ea=Symbol("flushFlag"),Ua=class extends fn{#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 Pd[e]!="function")throw new TypeError("Compression method not supported: "+e);try{this.#t=new Pd[e](t)}catch(n){throw new Xi(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 Xi(n))),this.once("end",()=>this.close)}close(){this.#t&&(this.#t.close(),this.#t=void 0,this.emit("close"))}reset(){if(!this.#e)return wa(this.#t,"zlib binding closed"),this.#t.reset?.()}flush(t){this.ended||(typeof t!="number"&&(t=this.#i),this.write(Object.assign(ln.alloc(0),{[ea]: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}[dn](t){return super.write(t)}write(t,e,n){if(typeof e=="function"&&(n=e,e="utf8"),typeof t=="string"&&(t=ln.from(t,e)),this.#e)return;wa(this.#t,"zlib binding closed");let r=this.#t._handle,i=r.close;r.close=()=>{};let s=this.#t.close;this.#t.close=()=>{},Qo(!0);let o;try{let c=typeof t[ea]=="number"?t[ea]:this.#r;o=this.#t._processChunk(t,c),Qo(!1)}catch(c){Qo(!1),this.#o(new Xi(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 Xi(c,this.write)));let a;if(o)if(Array.isArray(o)&&o.length>0){let c=o[0];a=this[dn](ln.from(c));for(let l=1;l<o.length;l++)a=this[dn](o[l])}else a=this[dn](ln.from(o));return n&&n(),a}},uu=class extends Ua{#e;#n;constructor(t,e){t=t||{},t.flush=t.flush||it.Z_NO_FLUSH,t.finishFlush=t.finishFlush||it.Z_FINISH,t.fullFlushFlag=it.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(it.Z_SYNC_FLUSH),wa(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)}}}},mw=class extends uu{#e;constructor(t){super(t,"Gzip"),this.#e=t&&!!t.portable}[dn](t){return this.#e?(this.#e=!1,t[9]=255,super[dn](t)):super[dn](t)}},ww=class extends uu{constructor(t){super(t,"Unzip")}},fu=class extends Ua{constructor(t,e){t=t||{},t.flush=t.flush||it.BROTLI_OPERATION_PROCESS,t.finishFlush=t.finishFlush||it.BROTLI_OPERATION_FINISH,t.fullFlushFlag=it.BROTLI_OPERATION_FLUSH,super(t,e)}},yw=class extends fu{constructor(t){super(t,"BrotliCompress")}},_w=class extends fu{constructor(t){super(t,"BrotliDecompress")}},hu=class extends Ua{constructor(t,e){t=t||{},t.flush=t.flush||it.ZSTD_e_continue,t.finishFlush=t.finishFlush||it.ZSTD_e_end,t.fullFlushFlag=it.ZSTD_e_flush,super(t,e)}},Ew=class extends hu{constructor(t){super(t,"ZstdCompress")}},Sw=class extends hu{constructor(t){super(t,"ZstdDecompress")}},Iw=(t,e)=>{if(Number.isSafeInteger(t))t<0?Tw(t,e):vw(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},vw=(t,e)=>{e[0]=128;for(var n=e.length;n>1;n--)e[n-1]=t&255,t=Math.floor(t/256)},Tw=(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]=pu(i):i===0?e[r-1]=0:(n=!0,e[r-1]=gu(i))}},Rw=t=>{let e=t[0],n=e===128?bw(t.subarray(1,t.length)):e===255?kw(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},kw=t=>{for(var e=t.length,n=0,r=!1,i=e-1;i>-1;i--){var s=Number(t[i]),o;r?o=pu(s):s===0?o=s:(r=!0,o=gu(s)),o!==0&&(n-=o*Math.pow(256,e-i-1))}return n},bw=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},pu=t=>(255^t)&255,gu=t=>(255^t)+1&255,Aw={};$m(Aw,{code:()=>za,isCode:()=>cs,isName:()=>xw,name:()=>vs});var cs=t=>vs.has(t),xw=t=>za.has(t),vs=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"]]),za=new Map(Array.from(vs).map(t=>[t[1],t[0]])),un=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??tn(t,e,100),this.mode=n?.mode??r?.mode??Dt(t,e+100,8),this.uid=n?.uid??r?.uid??Dt(t,e+108,8),this.gid=n?.gid??r?.gid??Dt(t,e+116,8),this.size=n?.size??r?.size??Dt(t,e+124,12),this.mtime=n?.mtime??r?.mtime??ta(t,e+136,12),this.cksum=Dt(t,e+148,12),r&&this.#n(r,!0),n&&this.#n(n);let i=tn(t,e+156,1);if(cs(i)&&(this.#e=i||"0"),this.#e==="0"&&this.path.slice(-1)==="/"&&(this.#e="5"),this.#e==="5"&&(this.size=0),this.linkpath=tn(t,e+157,100),t.subarray(e+257,e+265).toString()==="ustar\x0000")if(this.uname=n?.uname??r?.uname??tn(t,e+265,32),this.gname=n?.gname??r?.gname??tn(t,e+297,32),this.devmaj=n?.devmaj??r?.devmaj??Dt(t,e+329,8)??0,this.devmin=n?.devmin??r?.devmin??Dt(t,e+337,8)??0,t[e+475]!==0){let o=tn(t,e+345,155);this.path=o+"/"+this.path}else{let o=tn(t,e+345,130);o&&(this.path=o+"/"+this.path),this.atime=n?.atime??r?.atime??ta(t,e+476,12),this.ctime=n?.ctime??r?.ctime??ta(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=Ow(this.path||"",n),i=r[0],s=r[1];this.needPax=!!r[2],this.needPax=nn(t,e,100,i)||this.needPax,this.needPax=Nt(t,e+100,8,this.mode)||this.needPax,this.needPax=Nt(t,e+108,8,this.uid)||this.needPax,this.needPax=Nt(t,e+116,8,this.gid)||this.needPax,this.needPax=Nt(t,e+124,12,this.size)||this.needPax,this.needPax=na(t,e+136,12,this.mtime)||this.needPax,t[e+156]=Number(this.#e.codePointAt(0)),this.needPax=nn(t,e+157,100,this.linkpath)||this.needPax,t.write("ustar\x0000",e+257,8),this.needPax=nn(t,e+265,32,this.uname)||this.needPax,this.needPax=nn(t,e+297,32,this.gname)||this.needPax,this.needPax=Nt(t,e+329,8,this.devmaj)||this.needPax,this.needPax=Nt(t,e+337,8,this.devmin)||this.needPax,this.needPax=nn(t,e+345,n,s)||this.needPax,t[e+475]!==0?this.needPax=nn(t,e+345,155,s)||this.needPax:(this.needPax=nn(t,e+345,130,s)||this.needPax,this.needPax=na(t,e+476,12,this.atime)||this.needPax,this.needPax=na(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,Nt(t,e+148,8,this.cksum),this.cksumValid=!0,this.needPax}get type(){return this.#e==="Unsupported"?this.#e:vs.get(this.#e)}get typeKey(){return this.#e}set type(t){let e=String(za.get(t));if(cs(e)||e==="Unsupported")this.#e=e;else if(cs(t))this.#e=t;else throw new TypeError("invalid entry type: "+t)}},Ow=(t,e)=>{let n=t,r="",i,s=Fn.parse(t).root||".";if(Buffer.byteLength(n)<100)i=[n,r,!1];else{r=Fn.dirname(n),n=Fn.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=Fn.join(Fn.basename(r),n),r=Fn.dirname(r));while(r!==s&&i===void 0);i||(i=[t.slice(0,99),"",!0])}return i},tn=(t,e,n)=>t.subarray(e,e+n).toString("utf8").replace(/\0.*/,""),ta=(t,e,n)=>Pw(Dt(t,e,n)),Pw=t=>t===void 0?void 0:new Date(t*1e3),Dt=(t,e,n)=>Number(t[e])&128?Rw(t.subarray(e,e+n)):Dw(t,e,n),Cw=t=>isNaN(t)?void 0:t,Dw=(t,e,n)=>Cw(parseInt(t.subarray(e,e+n).toString("utf8").replace(/\0.*$/,"").trim(),8)),Nw={12:8589934591,8:2097151},Nt=(t,e,n,r)=>r===void 0?!1:r>Nw[n]||r<0?(Iw(r,t.subarray(e,e+n)),!0):(Lw(t,e,n,r),!1),Lw=(t,e,n,r)=>t.write(Fw(r,n),e,n,"ascii"),Fw=(t,e)=>Mw(Math.floor(t).toString(8),e),Mw=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",na=(t,e,n,r)=>r===void 0?!1:Nt(t,e,n,r.getTime()/1e3),Bw=new Array(156).join("\0"),nn=(t,e,n,r)=>r===void 0?!1:(t.write(r+Bw,e,n,"utf8"),r.length!==Buffer.byteLength(r)||r.length>n),ws=class mu{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 un({path:("PaxHeader/"+Uw(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+`
82
82
  `,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 mu(zw($w(e),n),r)}},zw=(t,e)=>e?Object.assign({},e,t):t,$w=t=>t.replace(/\n$/,"").split(`
83
83
  `).reduce(Gw,Object.create(null)),Gw=(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},Hw=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,N=Hw!=="win32"?t=>t:t=>t&&t.replaceAll(/\\/g,"/"),wu=class extends fn{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))))}},Ts=(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))},jw=1024*1024,ya=Buffer.from([31,139]),_a=Buffer.from([40,181,47,253]),Ww=Math.max(ya.length,_a.length),Fe=Symbol("state"),rn=Symbol("writeEntry"),gt=Symbol("readEntry"),ra=Symbol("nextEntry"),Dd=Symbol("processEntry"),et=Symbol("extendedHeader"),Or=Symbol("globalExtendedHeader"),At=Symbol("meta"),Nd=Symbol("emitMeta"),j=Symbol("buffer"),mt=Symbol("queue"),xt=Symbol("ended"),ia=Symbol("emittedEnd"),sn=Symbol("emit"),Q=Symbol("unzip"),Yi=Symbol("consumeChunk"),Qi=Symbol("consumeChunkSub"),sa=Symbol("consumeBody"),Ld=Symbol("consumeMeta"),Fd=Symbol("consumeHeader"),Pr=Symbol("consuming"),oa=Symbol("bufferConcat"),es=Symbol("maybeEnd"),Mn=Symbol("writing"),Ot=Symbol("aborted"),ts=Symbol("onDone"),on=Symbol("sawValidEntry"),ns=Symbol("sawNullBlock"),rs=Symbol("sawEOF"),Md=Symbol("closeStream"),qw=()=>!0,Jr=class extends uw{file;strict;maxMetaEntrySize;filter;brotli;zstd;writable=!0;readable=!1;[mt]=[];[j];[gt];[rn];[Fe]="begin";[At]="";[et];[Or];[xt]=!1;[Q];[Ot]=!1;[on];[ns]=!1;[rs]=!1;[Mn]=!1;[Pr]=!1;[ia]=!1;constructor(t={}){super(),this.file=t.file||"",this.on(ts,()=>{(this[Fe]==="begin"||this[on]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),t.ondone?this.on(ts,t.ondone):this.on(ts,()=>{this.emit("prefinish"),this.emit("finish"),this.emit("end")}),this.strict=!!t.strict,this.maxMetaEntrySize=t.maxMetaEntrySize||jw,this.filter=typeof t.filter=="function"?t.filter:qw;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[Md]()),typeof t.onwarn=="function"&&this.on("warn",t.onwarn),typeof t.onReadEntry=="function"&&this.on("entry",t.onReadEntry)}warn(t,e,n={}){Ts(this,t,e,n)}[Fd](t,e){this[on]===void 0&&(this[on]=!1);let n;try{n=new un(t,e,this[et],this[Or])}catch(r){return this.warn("TAR_ENTRY_INVALID",r)}if(n.nullBlock)this[ns]?(this[rs]=!0,this[Fe]==="begin"&&(this[Fe]="header"),this[sn]("eof")):(this[ns]=!0,this[sn]("nullBlock"));else if(this[ns]=!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[rn]=new wu(n,this[et],this[Or]);if(!this[on])if(i.remain){let s=()=>{i.invalid||(this[on]=!0)};i.on("end",s)}else this[on]=!0;i.meta?i.size>this.maxMetaEntrySize?(i.ignore=!0,this[sn]("ignoredEntry",i),this[Fe]="ignore",i.resume()):i.size>0&&(this[At]="",i.on("data",s=>this[At]+=s),this[Fe]="meta"):(this[et]=void 0,i.ignore=i.ignore||!this.filter(i.path,i),i.ignore?(this[sn]("ignoredEntry",i),this[Fe]=i.remain?"ignore":"header",i.resume()):(i.remain?this[Fe]="body":(this[Fe]="header",i.end()),this[gt]?this[mt].push(i):(this[mt].push(i),this[ra]())))}}}[Md](){queueMicrotask(()=>this.emit("close"))}[Dd](t){let e=!0;if(!t)this[gt]=void 0,e=!1;else if(Array.isArray(t)){let[n,...r]=t;this.emit(n,...r)}else this[gt]=t,this.emit("entry",t),t.emittedEnd||(t.on("end",()=>this[ra]()),e=!1);return e}[ra](){do;while(this[Dd](this[mt].shift()));if(this[mt].length===0){let t=this[gt];!t||t.flowing||t.size===t.remain?this[Mn]||this.emit("drain"):t.once("drain",()=>this.emit("drain"))}}[sa](t,e){let n=this[rn];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[Fe]="header",this[rn]=void 0,n.end()),i.length}[Ld](t,e){let n=this[rn],r=this[sa](t,e);return!this[rn]&&n&&this[Nd](n),r}[sn](t,e,n){this[mt].length===0&&!this[gt]?this.emit(t,e,n):this[mt].push([t,e,n])}[Nd](t){switch(this[sn]("meta",this[At]),t.type){case"ExtendedHeader":case"OldExtendedHeader":this[et]=ws.parse(this[At],this[et],!1);break;case"GlobalExtendedHeader":this[Or]=ws.parse(this[At],this[Or],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":{let e=this[et]??Object.create(null);this[et]=e,e.path=this[At].replace(/\0.*/,"");break}case"NextFileHasLongLinkpath":{let e=this[et]||Object.create(null);this[et]=e,e.linkpath=this[At].replace(/\0.*/,"");break}default:throw new Error("unknown meta: "+t.type)}}abort(t){this[Ot]=!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[Ot])return n?.(),!1;if((this[Q]===void 0||this.brotli===void 0&&this[Q]===!1)&&t){if(this[j]&&(t=Buffer.concat([this[j],t]),this[j]=void 0),t.length<Ww)return this[j]=t,n?.(),!0;for(let o=0;this[Q]===void 0&&o<ya.length;o++)t[o]!==ya[o]&&(this[Q]=!1);let i=!1;if(this[Q]===!1&&this.zstd!==!1){i=!0;for(let o=0;o<_a.length;o++)if(t[o]!==_a[o]){i=!1;break}}let s=this.brotli===void 0&&!i;if(this[Q]===!1&&s)if(t.length<512)if(this[xt])this.brotli=!0;else return this[j]=t,n?.(),!0;else try{new un(t.subarray(0,512)),this.brotli=!1}catch{this.brotli=!0}if(this[Q]===void 0||this[Q]===!1&&(this.brotli||i)){let o=this[xt];this[xt]=!1,this[Q]=this[Q]===void 0?new ww({}):i?new Sw({}):new _w({}),this[Q].on("data",c=>this[Yi](c)),this[Q].on("error",c=>this.abort(c)),this[Q].on("end",()=>{this[xt]=!0,this[Yi]()}),this[Mn]=!0;let a=!!this[Q][o?"end":"write"](t);return this[Mn]=!1,n?.(),a}}this[Mn]=!0,this[Q]?this[Q].write(t):this[Yi](t),this[Mn]=!1;let r=this[mt].length>0?!1:this[gt]?this[gt].flowing:!0;return!r&&this[mt].length===0&&this[gt]?.once("drain",()=>this.emit("drain")),n?.(),r}[oa](t){t&&!this[Ot]&&(this[j]=this[j]?Buffer.concat([this[j],t]):t)}[es](){if(this[xt]&&!this[ia]&&!this[Ot]&&!this[Pr]){this[ia]=!0;let t=this[rn];if(t&&t.blockRemain){let e=this[j]?this[j].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${t.blockRemain} more bytes, only ${e} available)`,{entry:t}),this[j]&&t.write(this[j]),t.end()}this[sn](ts)}}[Yi](t){if(this[Pr]&&t)this[oa](t);else if(!t&&!this[j])this[es]();else if(t){if(this[Pr]=!0,this[j]){this[oa](t);let e=this[j];this[j]=void 0,this[Qi](e)}else this[Qi](t);for(;this[j]&&this[j]?.length>=512&&!this[Ot]&&!this[rs];){let e=this[j];this[j]=void 0,this[Qi](e)}this[Pr]=!1}(!this[j]||this[xt])&&this[es]()}[Qi](t){let e=0,n=t.length;for(;e+512<=n&&!this[Ot]&&!this[rs];)switch(this[Fe]){case"begin":case"header":this[Fd](t,e),e+=512;break;case"ignore":case"body":e+=this[sa](t,e);break;case"meta":e+=this[Ld](t,e);break;default:throw new Error("invalid state: "+this[Fe])}e<n&&(this[j]=this[j]?Buffer.concat([t.subarray(e),this[j]]):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[Ot]||(this[Q]?(t&&this[Q].write(t),this[Q].end()):(this[xt]=!0,(this.brotli===void 0||this.zstd===void 0)&&(t=t||Buffer.alloc(0)),t&&this.write(t),this[es]())),this}},zr=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)},Jw=t=>{let e=t.onReadEntry;t.onReadEntry=e?n=>{e(n),n.resume()}:n=>n.resume()},yu=(t,e)=>{let n=new Map(e.map(s=>[zr(s),!0])),r=t.filter,i=(s,o="")=>{let a=o||rw(s).root||".",c;if(s===a)c=!1;else{let l=n.get(s);c=l!==void 0?l:i(nw(s),a)}return n.set(s,c),c};t.filter=r?(s,o)=>r(s,o)&&i(zr(s)):s=>i(zr(s))},Vw=t=>{let e=new Jr(t),n=t.file,r;try{r=Hn.openSync(n,"r");let i=Hn.fstatSync(r),s=t.maxReadSize||16*1024*1024;if(i.size<s){let o=Buffer.allocUnsafe(i.size),a=Hn.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=Hn.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{Hn.closeSync(r)}catch{}}},Zw=(t,e)=>{let n=new Jr(t),r=t.maxReadSize||16*1024*1024,i=t.file;return new Promise((s,o)=>{n.on("error",o),n.on("end",s),Hn.stat(i,(a,c)=>{if(a)o(a);else{let l=new Ma(i,{readSize:r,size:c.size});l.on("error",o),l.pipe(n)}})})},Jn=Vr(Vw,Zw,t=>new Jr(t),t=>new Jr(t),(t,e)=>{e?.length&&yu(t,e),t.noResume||Jw(t)}),_u=(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:Xw,parse:Ud}=Kw,$a=t=>{let e="",n=Ud(t);for(;Xw(t)||n.root;){let r=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":n.root;t=t.slice(r.length),e+=r,n=Ud(t)}return[e,t]},Rs=["|","<",">","?",":"],Ga=Rs.map(t=>String.fromCodePoint(61440+Number(t.codePointAt(0)))),Yw=new Map(Rs.map((t,e)=>[t,Ga[e]])),Qw=new Map(Ga.map((t,e)=>[t,Rs[e]])),zd=t=>Rs.reduce((e,n)=>e.split(n).join(Yw.get(n)),t),ey=t=>Ga.reduce((e,n)=>e.split(n).join(Qw.get(n)),t),Eu=(t,e)=>e?(t=N(t).replace(/^\.(\/|$)/,""),zr(e)+"/"+t):N(t),ty=16*1024*1024,$d=Symbol("process"),Gd=Symbol("file"),Hd=Symbol("directory"),Ea=Symbol("symlink"),jd=Symbol("hardlink"),Cr=Symbol("header"),ls=Symbol("read"),Sa=Symbol("lstat"),ds=Symbol("onlstat"),Ia=Symbol("onread"),va=Symbol("onreadlink"),Ta=Symbol("openfile"),Ra=Symbol("onopenfile"),Lt=Symbol("close"),_s=Symbol("mode"),ka=Symbol("awaitDrain"),aa=Symbol("ondrain"),rt=Symbol("prefix"),Su=class extends fn{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=Ba(e);super(),this.path=N(t),this.portable=!!n.portable,this.maxReadSize=n.maxReadSize||ty,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]=$a(this.path);s&&typeof o=="string"&&(this.path=o,r=s)}this.win32=!!n.win32||process.platform==="win32",this.win32&&(this.path=ey(this.path.replaceAll(/\\/g,"/")),t=t.replaceAll(/\\/g,"/")),this.absolute=N(n.absolute||Bd.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[ds](i):this[Sa]()}warn(t,e,n={}){return Ts(this,t,e,n)}emit(t,...e){return t==="error"&&(this.#e=!0),super.emit(t,...e)}[Sa](){nt.lstat(this.absolute,(t,e)=>{if(t)return this.emit("error",t);this[ds](e)})}[ds](t){this.statCache.set(this.absolute,t),this.stat=t,t.isFile()||(t.size=0),this.type=iy(t),this.emit("stat",t),this[$d]()}[$d](){switch(this.type){case"File":return this[Gd]();case"Directory":return this[Hd]();case"SymbolicLink":return this[Ea]();default:return this.end()}}[_s](t){return _u(t,this.type==="Directory",this.portable)}[rt](t){return Eu(t,this.prefix)}[Cr](){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 un({path:this[rt](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[rt](this.linkpath):this.linkpath,mode:this[_s](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 ws({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[rt](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[rt](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)}[Hd](){if(!this.stat)throw new Error("cannot create directory entry without stat");this.path.slice(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[Cr](),this.end()}[Ea](){nt.readlink(this.absolute,(t,e)=>{if(t)return this.emit("error",t);this[va](e)})}[va](t){this.linkpath=N(t),this[Cr](),this.end()}[jd](t){if(!this.stat)throw new Error("cannot create link entry without stat");this.type="Link",this.linkpath=N(Bd.relative(this.cwd,t)),this.stat.size=0,this[Cr](),this.end()}[Gd](){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[jd](e);this.linkCache.set(t,this.absolute)}if(this[Cr](),this.stat.size===0)return this.end();this[Ta]()}[Ta](){nt.open(this.absolute,"r",(t,e)=>{if(t)return this.emit("error",t);this[Ra](e)})}[Ra](t){if(this.fd=t,this.#e)return this[Lt]();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[ls]()}[ls](){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");nt.read(t,e,n,r,i,(s,o)=>{if(s)return this[Lt](()=>this.emit("error",s));this[Ia](o)})}[Lt](t=()=>{}){this.fd!==void 0&&nt.close(this.fd,t)}[Ia](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[Lt](()=>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[Lt](()=>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[aa]():this[ka](()=>this[aa]())}[ka](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)}[aa](){if(!this.remain)return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),this[Lt](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[ls]()}},ny=class extends Su{sync=!0;[Sa](){this[ds](nt.lstatSync(this.absolute))}[Ea](){this[va](nt.readlinkSync(this.absolute))}[Ta](){this[Ra](nt.openSync(this.absolute,"r"))}[ls](){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=nt.readSync(e,n,r,i,s);this[Ia](o),t=!1}finally{if(t)try{this[Lt](()=>{})}catch{}}}[ka](t){t()}[Lt](t=()=>{}){this.fd!==void 0&&nt.closeSync(this.fd),t()}},ry=class extends fn{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 Ts(this,t,e,n)}constructor(t,e={}){let n=Ba(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[_s](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]=$a(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 un({path:this[rt](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[rt](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 ws({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[rt](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[rt](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)}[rt](t){return Eu(t,this.prefix)}[_s](t){return _u(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}},iy=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported",sy=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++)ay(this,e[n]);return this.length}unshift(...e){for(var n=0,r=e.length;n<r;n++)cy(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=oy(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 oy(t,e,n){let r=e,i=e?e.next:t.head,s=new Ha(n,r,i,t);return s.next===void 0&&(t.tail=s),s.prev===void 0&&(t.head=s),t.length++,s}function ay(t,e){t.tail=new Ha(e,t.tail,void 0,t),t.head||(t.head=t.tail),t.length++}function cy(t,e){t.head=new Ha(e,void 0,t.head,t),t.tail||(t.tail=t.head),t.length++}var Ha=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}},qd=class{path;absolute;entry;stat;readdir;pending=!1;pendingLink=!1;ignore=!1;piped=!1;constructor(t,e){this.path=t||"./",this.absolute=e}},Jd=Buffer.alloc(1024),us=Symbol("onStat"),Dr=Symbol("ended"),He=Symbol("queue"),Nr=Symbol("queue"),Pt=Symbol("current"),an=Symbol("process"),Lr=Symbol("processing"),is=Symbol("processJob"),je=Symbol("jobs"),ca=Symbol("jobDone"),fs=Symbol("addFSEntry"),Vd=Symbol("addTarEntry"),ba=Symbol("stat"),Aa=Symbol("readdir"),hs=Symbol("onreaddir"),ps=Symbol("pipe"),Zd=Symbol("entry"),la=Symbol("entryOpt"),gs=Symbol("writeEntryClass"),Iu=Symbol("write"),da=Symbol("ondrain"),ks=class extends fn{sync=!1;opt;cwd;maxReadSize;preservePaths;strict;noPax;prefix;linkCache;statCache;file;portable;zip;readdirCache;noDirRecurse;follow;noMtime;mtime;filter;jobs;[gs];onWriteEntry;[He];[Nr]=new Map;[je]=0;[Lr]=!1;[Dr]=!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[gs]=Su,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 mw(t.gzip)),t.brotli&&(typeof t.brotli!="object"&&(t.brotli={}),this.zip=new yw(t.brotli)),t.zstd&&(typeof t.zstd!="object"&&(t.zstd={}),this.zip=new Ew(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[da]()),this.on("resume",()=>e.resume())}else this.on("drain",this[da]);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[He]=new sy,this[je]=0,this.jobs=Number(t.jobs)||4,this[Lr]=!1,this[Dr]=!1}[Iu](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[Dr]=!0,this[an](),n&&n(),this}write(t){if(this[Dr])throw new Error("write after end");return t instanceof wu?this[Vd](t):this[fs](t),this.flowing}[Vd](t){let e=N(Wd.resolve(this.cwd,t.path));if(!this.filter(t.path,t))t.resume();else{let n=new qd(t.path,e);n.entry=new ry(t,this[la](n)),n.entry.on("end",()=>this[ca](n)),this[je]+=1,this[He].push(n)}this[an]()}[fs](t){let e=N(Wd.resolve(this.cwd,t));this[He].push(new qd(t,e)),this[an]()}[ba](t){t.pending=!0,this[je]+=1;let e=this.follow?"stat":"lstat";ys[e](t.absolute,(n,r)=>{t.pending=!1,this[je]-=1,n?this.emit("error",n):this[us](t,r)})}[us](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[Pt])this[is](t);else{let n=`${e.dev}:${e.ino}`,r=this[Nr].get(n);r?r.push(t):this[Nr].set(n,[t]),t.pendingLink=!0,t.pending=!0}this[an]()}[Aa](t){t.pending=!0,this[je]+=1,ys.readdir(t.absolute,(e,n)=>{if(t.pending=!1,this[je]-=1,e)return this.emit("error",e);this[hs](t,n)})}[hs](t,e){this.readdirCache.set(t.absolute,e),t.readdir=e,this[an]()}[an](){if(!this[Lr]){this[Lr]=!0;for(let t=this[He].head;t&&this[je]<this.jobs;t=t.next)if(this[is](t.value),t.value.ignore){let e=t.next;this[He].removeNode(t),t.next=e}this[Lr]=!1,this[Dr]&&this[He].length===0&&this[je]===0&&(this.zip?this.zip.end(Jd):(super.write(Jd),super.end()))}}get[Pt](){return this[He]&&this[He].head&&this[He].head.value}[ca](t){this[He].shift(),this[je]-=1;let{stat:e}=t;if(e&&e.isFile()&&e.nlink>1){let n=`${e.dev}:${e.ino}`,r=this[Nr].get(n);if(r){this[Nr].delete(n);for(let i of r)i.pending=!1,this[is](i)}}this[an]()}[is](t){if(t.pending&&t.pendingLink&&t===this[Pt]&&(t.pending=!1,t.pendingLink=!1),!t.pending){if(t.entry){t===this[Pt]&&!t.piped&&this[ps](t);return}if(!t.stat){let e=this.statCache.get(t.absolute);e?this[us](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[hs](t,e):this[Aa](t),!t.readdir)return}if(t.entry=this[Zd](t),!t.entry){t.ignore=!0;return}t===this[Pt]&&!t.piped&&this[ps](t)}}}[la](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}}[Zd](t){this[je]+=1;try{return new this[gs](t.path,this[la](t)).on("end",()=>this[ca](t)).on("error",e=>this.emit("error",e))}catch(e){this.emit("error",e)}}[da](){this[Pt]&&this[Pt].entry&&this[Pt].entry.resume()}[ps](t){t.piped=!0,t.readdir&&t.readdir.forEach(r=>{let i=t.path,s=i==="./"?"":i.replace(/\/*$/,"/");this[fs](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={}){Ts(this,t,e,n)}},ja=class extends ks{sync=!0;constructor(t){super(t),this[gs]=ny}pause(){}resume(){}[ba](t){let e=this.follow?"statSync":"lstatSync";this[us](t,ys[e](t.absolute))}[Aa](t){this[hs](t,ys.readdirSync(t.absolute))}[ps](t){let e=t.entry,n=this.zip;if(t.readdir&&t.readdir.forEach(r=>{let i=t.path,s=i==="./"?"":i.replace(/\/*$/,"/");this[fs](s+r)}),!e)throw new Error("Cannot pipe without source");n?e.on("data",r=>{n.write(r)}):e.on("data",r=>{super[Iu](r)})}},ly=(t,e)=>{let n=new ja(t),r=new lu(t.file,{mode:t.mode||438});n.pipe(r),vu(n,e)},dy=(t,e)=>{let n=new ks(t),r=new Is(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 Tu(n,e).catch(s=>n.emit("error",s)),i},vu=(t,e)=>{e.forEach(n=>{n.charAt(0)==="@"?Jn({file:du.resolve(t.cwd,n.slice(1)),sync:!0,noResume:!0,onReadEntry:r=>t.add(r)}):t.add(n)}),t.end()},Tu=async(t,e)=>{for(let n of e)n.charAt(0)==="@"?await Jn({file:du.resolve(String(t.cwd),n.slice(1)),noResume:!0,onReadEntry:r=>{t.add(r)}}):t.add(n);t.end()},uy=(t,e)=>{let n=new ja(t);return vu(n,e),n},fy=(t,e)=>{let n=new ks(t);return Tu(n,e).catch(r=>n.emit("error",r)),n},WR=Vr(ly,dy,uy,fy,(t,e)=>{if(!e?.length)throw new TypeError("no paths specified to add to archive")}),py=process.env.__FAKE_PLATFORM__||process.platform,Au=py==="win32",{O_CREAT:xu,O_NOFOLLOW:Kd,O_TRUNC:Ou,O_WRONLY:Pu}=bu.constants,Cu=Number(process.env.__FAKE_FS_O_FILENAME__)||bu.constants.UV_FS_O_FILEMAP||0,gy=Au&&!!Cu,my=512*1024,wy=Cu|Ou|xu|Pu,Xd=!Au&&typeof Kd=="number"?Kd|Ou|xu|Pu:null,Du=Xd!==null?()=>Xd:gy?t=>t<my?wy:"w":()=>"w",xa=(t,e,n)=>{try{return bs.lchownSync(t,e,n)}catch(r){if(r?.code!=="ENOENT")throw r}},Es=(t,e,n,r)=>{bs.lchown(t,e,n,i=>{r(i&&i?.code!=="ENOENT"?i:null)})},yy=(t,e,n,r,i)=>{if(e.isDirectory())Nu($r.resolve(t,e.name),n,r,s=>{if(s)return i(s);let o=$r.resolve(t,e.name);Es(o,n,r,i)});else{let s=$r.resolve(t,e.name);Es(s,n,r,i)}},Nu=(t,e,n,r)=>{bs.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 Es(t,e,n,r);let o=s.length,a=null,c=l=>{if(!a){if(l)return r(a=l);if(--o===0)return Es(t,e,n,r)}};for(let l of s)yy(t,l,e,n,c)})},_y=(t,e,n,r)=>{e.isDirectory()&&Lu($r.resolve(t,e.name),n,r),xa($r.resolve(t,e.name),n,r)},Lu=(t,e,n)=>{let r;try{r=bs.readdirSync(t,{withFileTypes:!0})}catch(i){let s=i;if(s?.code==="ENOENT")return;if(s?.code==="ENOTDIR"||s?.code==="ENOTSUP")return xa(t,e,n);throw s}for(let i of r)_y(t,i,e,n);return xa(t,e,n)},Fu=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"}},As=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"}},Sy=(t,e)=>{Pe.stat(t,(n,r)=>{(n||!r.isDirectory())&&(n=new Fu(t,n?.code||"ENOTDIR")),e(n)})},Iy=(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?Nu(g,o,a,w=>m(w)):s?Pe.chmod(t,i,n):n()};if(t===p)return Sy(t,m);if(l)return Ey.mkdir(t,{mode:i,recursive:!0}).then(h=>m(null,h??void 0),m);let f=N(Ss.relative(p,t)).split("/");Oa(p,f,i,d,p,void 0,m)},Oa=(t,e,n,r,i,s,o)=>{if(e.length===0)return o(null,s);let a=e.shift(),c=N(Ss.resolve(t+"/"+a));Pe.mkdir(c,n,Mu(c,e,n,r,i,s,o))},Mu=(t,e,n,r,i,s,o)=>a=>{a?Pe.lstat(t,(c,l)=>{if(c)c.path=c.path&&N(c.path),o(c);else if(l.isDirectory())Oa(t,e,n,r,i,s,o);else if(r)Pe.unlink(t,d=>{if(d)return o(d);Pe.mkdir(t,n,Mu(t,e,n,r,i,s,o))});else{if(l.isSymbolicLink())return o(new As(t,t+"/"+e.join("/")));o(a)}}):(s=s||t,Oa(t,e,n,r,i,s,o))},vy=t=>{let e=!1,n;try{e=Pe.statSync(t).isDirectory()}catch(r){n=r?.code}finally{if(!e)throw new Fu(t,n??"ENOTDIR")}},Ty=(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&&Lu(h,s,o),i&&Pe.chmodSync(t,r)};if(t===d)return vy(d),p();if(c)return p(Pe.mkdirSync(t,{mode:r,recursive:!0})??void 0);let m=N(Ss.relative(d,t)).split("/"),f;for(let h=m.shift(),g=d;h&&(g+="/"+h);h=m.shift()){g=N(Ss.resolve(g));try{Pe.mkdirSync(g,r),f=f||g}catch{let w=Pe.lstatSync(g);if(w.isDirectory())continue;if(l){Pe.unlinkSync(g),Pe.mkdirSync(g,r),f=f||g;continue}else if(w.isSymbolicLink())return new As(g,g+"/"+m.join("/"))}}return p(f)},ua=Object.create(null),Yd=1e4,Bn=new Set,Ry=t=>{Bn.has(t)?Bn.delete(t):ua[t]=t.normalize("NFD").toLocaleLowerCase("en").toLocaleUpperCase("en"),Bn.add(t);let e=ua[t],n=Bn.size-Yd;if(n>Yd/10){for(let r of Bn)if(Bn.delete(r),delete ua[r],--n<=0)break}return e},ky=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,by=ky==="win32",Ay=t=>t.split("/").slice(0,-1).reduce((e,n)=>{let r=e.at(-1);return r!==void 0&&(n=Bu(r,n)),e.push(n||"/"),e},[]),xy=class{#e=new Map;#n=new Map;#r=new Set;reserve(t,e){t=by?["win32 parallelization disabled"]:t.map(r=>zr(Bu(Ry(r))));let n=new Set(t.map(r=>Ay(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}},Oy=()=>process.umask(),Qd=Symbol("onEntry"),Pa=Symbol("checkFs"),eu=Symbol("checkFs2"),Ca=Symbol("isReusable"),Me=Symbol("makeFs"),Da=Symbol("file"),Na=Symbol("directory"),ms=Symbol("link"),tu=Symbol("symlink"),nu=Symbol("hardlink"),Br=Symbol("ensureNoSymlink"),ru=Symbol("unsupported"),iu=Symbol("checkPath"),fa=Symbol("stripAbsolutePath"),Ft=Symbol("mkdir"),le=Symbol("onError"),ss=Symbol("pending"),su=Symbol("pend"),Un=Symbol("unpend"),ha=Symbol("ended"),pa=Symbol("maybeClose"),La=Symbol("skip"),Gr=Symbol("doChown"),Hr=Symbol("uid"),jr=Symbol("gid"),Wr=Symbol("checkedCwd"),Py=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,qr=Py==="win32",Cy=1024,Dy=(t,e)=>{if(!qr)return M.unlink(t,e);let n=t+".DELETE."+ku(16).toString("hex");M.rename(t,n,r=>{if(r)return e(r);M.unlink(n,e)})},Ny=t=>{if(!qr)return M.unlinkSync(t);let e=t+".DELETE."+ku(16).toString("hex");M.renameSync(t,e),M.unlinkSync(e)},ou=(t,e,n)=>t!==void 0&&t===t>>>0?t:e!==void 0&&e===e>>>0?e:n,Wa=class extends Jr{[ha]=!1;[Wr]=!1;[ss]=0;reservations=new xy;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[ha]=!0,this[pa]()},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:Cy,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(ne.resolve(t.cwd||process.cwd())),this.strip=Number(t.strip)||0,this.processUmask=this.chmod?typeof t.processUmask=="number"?t.processUmask:Oy():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[Qd](e))}warn(t,e,n={}){return(t==="TAR_BAD_ARCHIVE"||t==="TAR_ABORT")&&(n.recoverable=!1),super.warn(t,e,n)}[pa](){this[ha]&&this[ss]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"))}[fa](t,e){let n=t[e],{type:r}=t;if(!n||this.preservePaths)return!0;let[i,s]=$a(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=ne.posix.dirname(t.path),c=ne.posix.normalize(ne.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}[iu](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[fa](t,"path")||!this[fa](t,"linkpath"))return!1;if(t.absolute=ne.isAbsolute(t.path)?N(ne.resolve(t.path)):N(ne.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}=ne.win32.parse(String(t.absolute));t.absolute=r+zd(String(t.absolute).slice(r.length));let{root:i}=ne.win32.parse(t.path);t.path=i+zd(t.path.slice(i.length))}return!0}[Qd](t){if(!this[iu](t))return t.resume();switch(hy.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[Pa](t);default:return this[ru](t)}}[le](t,e){t.name==="CwdError"?this.emit("error",t):(this.warn("TAR_ENTRY_ERROR",t,{entry:e}),this[Un](),e.resume())}[Ft](t,e,n){Iy(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)}[Gr](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}[Hr](t){return ou(this.uid,t.uid,this.processUid)}[jr](t){return ou(this.gid,t.gid,this.processGid)}[Da](t,e){let n=typeof t.mode=="number"?t.mode&4095:this.fmode,r=new Is(String(t.absolute),{flags:Du(t.size),mode:n,autoClose:!1});r.on("error",a=>{r.fd&&M.close(r.fd,()=>{}),r.write=()=>!0,this[le](a,t),e()});let i=1,s=a=>{if(a){r.fd&&M.close(r.fd,()=>{}),this[le](a,t),e();return}--i===0&&r.fd!==void 0&&M.close(r.fd,c=>{c?this[le](c,t):this[Un](),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;M.futimes(c,l,d,p=>p?M.utimes(a,l,d,m=>s(m&&p)):s())}if(typeof c=="number"&&this[Gr](t)){i++;let l=this[Hr](t),d=this[jr](t);typeof l=="number"&&typeof d=="number"&&M.fchown(c,l,d,p=>p?M.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[le](a,t),e()}),t.pipe(o)),o.pipe(r)}[Na](t,e){let n=typeof t.mode=="number"?t.mode&4095:this.dmode;this[Ft](String(t.absolute),n,r=>{if(r){this[le](r,t),e();return}let i=1,s=()=>{--i===0&&(e(),this[Un](),t.resume())};t.mtime&&!this.noMtime&&(i++,M.utimes(String(t.absolute),t.atime||new Date,t.mtime,s)),this[Gr](t)&&(i++,M.chown(String(t.absolute),Number(this[Hr](t)),Number(this[jr](t)),s)),s()})}[ru](t){t.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${t.type}`,{entry:t}),t.resume()}[tu](t,e){let n=N(ne.relative(this.cwd,ne.resolve(ne.dirname(String(t.absolute)),String(t.linkpath)))).split("/");this[Br](t,this.cwd,n,()=>this[ms](t,String(t.linkpath),"symlink",e),r=>{this[le](r,t),e()})}[nu](t,e){let n=N(ne.resolve(this.cwd,String(t.linkpath))),r=N(String(t.linkpath)).split("/");this[Br](t,this.cwd,r,()=>this[ms](t,n,"link",e),i=>{this[le](i,t),e()})}[Br](t,e,n,r,i){let s=n.shift();if(this.preservePaths||s===void 0)return r();let o=ne.resolve(e,s);M.lstat(o,(a,c)=>{if(a)return r();if(c?.isSymbolicLink())return i(new As(o,ne.resolve(o,n.join("/"))));this[Br](t,o,n,r,i)})}[su](){this[ss]++}[Un](){this[ss]--,this[pa]()}[La](t){this[Un](),t.resume()}[Ca](t,e){return t.type==="File"&&!this.unlink&&e.isFile()&&e.nlink<=1&&!qr}[Pa](t){this[su]();let e=[t.path];t.linkpath&&e.push(t.linkpath),this.reservations.reserve(e,n=>this[eu](t,n))}[eu](t,e){let n=o=>{e(o)},r=()=>{this[Ft](this.cwd,this.dmode,o=>{if(o){this[le](o,t),n();return}this[Wr]=!0,i()})},i=()=>{if(t.absolute!==this.cwd){let o=N(ne.dirname(String(t.absolute)));if(o!==this.cwd)return this[Ft](o,this.dmode,a=>{if(a){this[le](a,t),n();return}s()})}s()},s=()=>{M.lstat(String(t.absolute),(o,a)=>{if(a&&(this.keep||this.newer&&a.mtime>(t.mtime??a.mtime))){this[La](t),n();return}if(o||this[Ca](t,a))return this[Me](null,t,n);if(a.isDirectory()){if(t.type==="Directory"){let c=this.chmod&&t.mode&&(a.mode&4095)!==t.mode,l=d=>this[Me](d??null,t,n);return c?M.chmod(String(t.absolute),Number(t.mode),l):l()}if(t.absolute!==this.cwd)return M.rmdir(String(t.absolute),c=>this[Me](c??null,t,n))}if(t.absolute===this.cwd)return this[Me](null,t,n);Dy(String(t.absolute),c=>this[Me](c??null,t,n))})};this[Wr]?i():r()}[Me](t,e,n){if(t){this[le](t,e),n();return}switch(e.type){case"File":case"OldFile":case"ContiguousFile":return this[Da](e,n);case"Link":return this[nu](e,n);case"SymbolicLink":return this[tu](e,n);case"Directory":case"GNUDumpDir":return this[Na](e,n)}}[ms](t,e,n,r){M[n](e,String(t.absolute),i=>{i?this[le](i,t):(this[Un](),t.resume()),r()})}},Fr=t=>{try{return[null,t()]}catch(e){return[e,null]}},Uu=class extends Wa{sync=!0;[Me](t,e){return super[Me](t,e,()=>{})}[Pa](t){if(!this[Wr]){let i=this[Ft](this.cwd,this.dmode);if(i)return this[le](i,t);this[Wr]=!0}if(t.absolute!==this.cwd){let i=N(ne.dirname(String(t.absolute)));if(i!==this.cwd){let s=this[Ft](i,this.dmode);if(s)return this[le](s,t)}}let[e,n]=Fr(()=>M.lstatSync(String(t.absolute)));if(n&&(this.keep||this.newer&&n.mtime>(t.mtime??n.mtime)))return this[La](t);if(e||this[Ca](t,n))return this[Me](null,t);if(n.isDirectory()){if(t.type==="Directory"){let s=this.chmod&&t.mode&&(n.mode&4095)!==t.mode,[o]=s?Fr(()=>{M.chmodSync(String(t.absolute),Number(t.mode))}):[];return this[Me](o,t)}let[i]=Fr(()=>M.rmdirSync(String(t.absolute)));this[Me](i,t)}let[r]=t.absolute===this.cwd?[]:Fr(()=>Ny(String(t.absolute)));this[Me](r,t)}[Da](t,e){let n=typeof t.mode=="number"?t.mode&4095:this.fmode,r=o=>{let a;try{M.closeSync(i)}catch(c){a=c}(o||a)&&this[le](o||a,t),e()},i;try{i=M.openSync(String(t.absolute),Du(t.size),n)}catch(o){return r(o)}let s=this.transform&&this.transform(t)||t;s!==t&&(s.on("error",o=>this[le](o,t)),t.pipe(s)),s.on("data",o=>{try{M.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{M.futimesSync(i,a,c)}catch(l){try{M.utimesSync(String(t.absolute),a,c)}catch{o=l}}}if(this[Gr](t)){let a=this[Hr](t),c=this[jr](t);try{M.fchownSync(i,Number(a),Number(c))}catch(l){try{M.chownSync(String(t.absolute),Number(a),Number(c))}catch{o=o||l}}}r(o)})}[Na](t,e){let n=typeof t.mode=="number"?t.mode&4095:this.dmode,r=this[Ft](String(t.absolute),n);if(r){this[le](r,t),e();return}if(t.mtime&&!this.noMtime)try{M.utimesSync(String(t.absolute),t.atime||new Date,t.mtime)}catch{}if(this[Gr](t))try{M.chownSync(String(t.absolute),Number(this[Hr](t)),Number(this[jr](t)))}catch{}e(),t.resume()}[Ft](t,e){try{return Ty(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}}[Br](t,e,n,r,i){if(this.preservePaths||n.length===0)return r();let s=e;for(let o of n){s=ne.resolve(s,o);let[a,c]=Fr(()=>M.lstatSync(s));if(a)return r();if(c.isSymbolicLink())return i(new As(s,ne.resolve(e,n.join("/"))))}r()}[ms](t,e,n,r){let i=`${n}Sync`;try{M[i](e,String(t.absolute)),r(),t.resume()}catch(s){return this[le](s,t)}}},Ly=t=>{let e=new Uu(t),n=t.file,r=Ru.statSync(n),i=t.maxReadSize||16*1024*1024;new tw(n,{readSize:i,size:r.size}).pipe(e)},Fy=(t,e)=>{let n=new Wa(t),r=t.maxReadSize||16*1024*1024,i=t.file;return new Promise((s,o)=>{n.on("error",o),n.on("close",s),Ru.stat(i,(a,c)=>{if(a)o(a);else{let l=new Ma(i,{readSize:r,size:c.size});l.on("error",o),l.pipe(n)}})})},zu=Vr(Ly,Fy,t=>new Uu(t),t=>new Wa(t),(t,e)=>{e?.length&&yu(t,e)}),My=(t,e)=>{let n=new ja(t),r=!0,i,s;try{try{i=Oe.openSync(t.file,"r+")}catch(c){if(c?.code==="ENOENT")i=Oe.openSync(t.file,"w+");else throw c}let o=Oe.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=Oe.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 un(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,By(t,n,s,i,e)}finally{if(r)try{Oe.closeSync(i)}catch{}}},By=(t,e,n,r,i)=>{let s=new lu(t.file,{fd:r,start:n});e.pipe(s),zy(e,i)},Uy=(t,e)=>{e=Array.from(e);let n=new ks(t),r=(i,s,o)=>{let a=(m,f)=>{m?Oe.close(i,h=>o(m)):o(null,f)},c=0;if(s===0)return a(null,0);let l=0,d=Buffer.alloc(512),p=(m,f)=>{if(m||f===void 0)return a(m);if(l+=f,l<512&&f)return Oe.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 un(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,Oe.read(i,d,0,512,c,p)};Oe.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+",Oe.open(t.file,o,a);if(c||!l)return s(c);Oe.fstat(l,(d,p)=>{if(d)return Oe.close(l,()=>s(d));r(l,p.size,(m,f)=>{if(m)return s(m);let h=new Is(t.file,{fd:l,start:f});n.pipe(h),h.on("error",s),h.on("close",i),$y(n,e)})})};Oe.open(t.file,o,a)})},zy=(t,e)=>{e.forEach(n=>{n.charAt(0)==="@"?Jn({file:$u.resolve(t.cwd,n.slice(1)),sync:!0,noResume:!0,onReadEntry:r=>t.add(r)}):t.add(n)}),t.end()},$y=async(t,e)=>{for(let n of e)n.charAt(0)==="@"?await Jn({file:$u.resolve(String(t.cwd),n.slice(1)),noResume:!0,onReadEntry:r=>t.add(r)}):t.add(n);t.end()},Mr=Vr(My,Uy,()=>{throw new TypeError("file is required")},()=>{throw new TypeError("file is required")},(t,e)=>{if(!lw(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")}),ok=Vr(Mr.syncFile,Mr.asyncFile,Mr.syncNoFile,Mr.asyncNoFile,(t,e=[])=>{Mr.validate?.(t,e),Gy(t)}),Gy=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))};Rt();var Je={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 Zr(t){return t?.cozeDeployType==="cloud"?"cloud":"local"}function Gu(t){let e=t?.cozeAccountId?.trim();if(!(!e||e==="0"))return e}function qa(t){let e=t?.cozeGroupId?.trim();if(!(!e||e==="0"))return e}function Hu(t){let{_meta:e,...n}=t;return{stripped:n,meta:e}}function Vn(t){if(!t?.cozeAgentId)throw new Error("missing _meta.cozeAgentId");return t.cozeAgentId}Ie();L();se();Ie();function _t(t,e){if(Zr(t)!=="cloud")throw new _("OPERATION_NOT_ALLOWED_FOR_LOCAL",`${e} is not allowed for local agent`)}function xs(t){return t.startsWith("http://")||t.startsWith("https://")}function Os(t){return t.endsWith("/")?t.slice(0,-1):t}Ie();L();var Ps="1008033",ju="1289";var Wu="pbbp2",qu="https://www.coze.cn",Ju="/api/coze_claw/resource/get_frontier_key",jy="https://www.coze.cn",Wy="wss://frontier.coze.cn";function Cs(t){return t??process.env.COZE_BRIDGE_HANDSHAKE_URL??jy}function Vu(t){return t??process.env.COZE_BRIDGE_FRONTIER_URL??Wy}function Zn(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 Xr(t){return t?t.startsWith("boe_")?{ttEnv:t}:{ttEnv:t,usePpe:"1"}:{}}var Kr=A("handshake");async function Ja(t){let e=Cs(t.endpoint),n=t.timeoutMs??1e4,r=`${Os(e)}${Ju}?aid=${encodeURIComponent(Ps)}`,i={Authorization:`Bearer ${t.privatecode}`,Accept:"application/json",...Zn(t.ppeOverride)},s=new AbortController,o=setTimeout(()=>s.abort(),n);Kr.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,f=typeof p.device_id=="string"&&p.device_id||typeof p.deviceId=="string"&&p.deviceId||void 0;if(!m||!f){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 Kr.info("handshake ok",{remoteDeviceId:f,logid:c,traceId:l}),{accessKey:m,deviceId:f}}catch(a){if(a instanceof _)throw Kr.error("handshake failed (bridge error)",{base:e,message:a.message,code:a.code}),a;if(a.name==="AbortError")throw Kr.warn("handshake timeout",{base:e,timeoutMs:n}),new _("UPSTREAM_HANDSHAKE_FAILED",`handshake timeout (${n}ms)`,{cause:a});let c=a.cause;throw Kr.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 Va=process.env.COZE_BRIDGE_LLM_GATEWAY_URL?.trim()||"https://llm-gateway.coze.cn",Ve="auto",Zu=2e5;function Ku(t){return{model:Za(t.model)??Ve,...t.modelToken?{modelToken:t.modelToken}:{}}}function Xu(t){return!t||t===Ve}var qy=new Set(["auto","\u81EA\u52A8"]);function Za(t){let e=t?.trim();if(e)return qy.has(e.toLowerCase())?Ve:e}function Yu(t){let e={};if(t.modelToken){e.ANTHROPIC_BASE_URL=Va,e.ANTHROPIC_AUTH_TOKEN=t.modelToken;let n=t.model||Ve;e.ANTHROPIC_MODEL=n,e.ANTHROPIC_SMALL_FAST_MODEL=n,t.modelInfo?.contextWindow&&(e.CLAUDE_CODE_MAX_CONTEXT_TOKENS=String(t.modelInfo.contextWindow))}else Xu(t.model)||(e.ANTHROPIC_MODEL=t.model);return e}function Qu(t){let e=[];if(t.modelToken?e.push("-c",`model="${t.model||Ve}"`):Xu(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="${Va}/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??Zu;e.push("-c",`model_context_window=${n}`)}return e}function ef(t){return t.modelToken?{OPENAI_API_KEY:t.modelToken}:{}}function Ka(t,e){let{ttEnv:n,usePpe:r}=Xr(t),i={};return n&&(i["x-tt-env"]=n),r&&(i["x-use-ppe"]=r),e&&(i["x-mock-scenario"]=e),i}function tf(t,e,n){if(!t.modelToken)return{};let r=Ka(e,n);return Object.keys(r).length===0?{}:{ANTHROPIC_CUSTOM_HEADERS:Object.entries(r).map(([s,o])=>`${s}:${o}`).join(`
84
- `)}}function Xa(t){return`coze-session-${t.replace(/[^A-Za-z0-9_-]+/g,"-")}`}function nf(t,e,n){if(!t.modelToken)return null;let r=t.model||Ve,i=Ka(e,n),s=["text"];t.modelInfo?.capabilities?.image===!0&&s.push("image");let o={baseUrl:`${Va}/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??Zu,maxTokens:8192,api:"openai-completions"}]};return Object.keys(i).length>0&&(o.headers=i),o}function rf(t,e,n){if(!t.modelToken)return[];let r=Ka(e,n),i=[];for(let[s,o]of Object.entries(r))i.push("-c",`model_providers.coze.http_headers.${s}="${o}"`);return i}var re=A("agent-handlers"),sf=5*1024*1024,Yy=1,Qy=6,e_=new Set(["node_modules",".git",".coze","dist","build",".next"]),Ds=class{constructor(e){this.opts=e}opts;async listSkills(e){_t(e._meta,"_agent/listSkills");let n=Vn(e._meta),r=await this.loadAgentCfg(n),i=r?.workspace??Re(n).workspace,s=r?.skills??[],o=[];for(let a of s){let c=st(i,a.relPath,"SKILL.md");await Zy(c).then(d=>d.isFile()).catch(()=>!1)&&o.push(s_(a))}return{skills:o}}async addSkills(e){_t(e._meta,"_agent/addSkills");let n=Vn(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 ic({agentId:n,workspace:r.workspace,framework:r.framework,skill:c});sc(s,o,l),a.push(c)}return await Bi(n,s),this.reloadAgentSessions(n,"skills-added"),{installedSkills:a}}async removeSkills(e){_t(e._meta,"_agent/removeSkills");let n=Vn(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=st(r.workspace,a.relPath);await Vy(c,{recursive:!0,force:!0}),re.info("skill removed",{agentId:n,skillId:a.skillId,relPath:a.relPath})}return await Bi(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,re.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,re.info("killing downstream for workspace reload (idle)",{reason:n,agentId:e,framework:r.framework,cloudId:i,acpId:o}),c.stop(n).catch(l=>re.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 re.info("_agent/update: empty cozeIdentity, noop",{agentId:e.agentId}),{ok:!0};let n=e.agentId,r=await fe(n);if(!r)throw new _("AGENT_NOT_FOUND",`agent not found: ${n}`);if(r.cozeIdentity===e.cozeIdentity)return re.info("_agent/update: cozeIdentity unchanged, noop",{agentId:n}),{ok:!0};try{await Pn(r.workspace,r.framework,e.cozeIdentity)}catch(i){throw re.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 ke(r),re.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 fe(n);return r?(r.disconnectedAt=Date.now(),r.disconnectReason=e.reason??"",await ke(r),re.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}):(re.warn("_agent/disconnect: agent not found, ignoring",{agentId:n}),{ok:!0})}async switchModel(e){if(_t(e._meta,"_agent/switchModel"),!e.agentId)throw new _("IPC_BAD_REQUEST","_agent/switchModel: missing agentId");let n=Za(e.model)??Ve,r=await fe(e.agentId);if(!r)throw new _("AGENT_NOT_FOUND",`agent not found: ${e.agentId}`);r.model=n,e.modelInfo&&(r.modelInfo=e.modelInfo),await ke(r),re.info("_agent/switchModel: model persisted",{agentId:e.agentId,model:n,reason:e.reason??""});let i=this.opts.agents.get(e.agentId);if(!i)return re.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=>re.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),re.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(_t(e._meta,Je.RESET),!e.agentId)throw new _("IPC_BAD_REQUEST",`${Je.RESET}: missing agentId`);return await this.clearSessionMappings(e.agentId,Je.RESET),await this.runDetailSync(e.agentId,Je.RESET,e.reason),{ok:!0}}async clearSessionMappings(e,n){let r=this.opts.agents.get(e);if(!r){await this.clearPersistedAcpSessionIds(e),re.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 Ir(e,i)}async clearPersistedAcpSessionIds(e){let n=await fe(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 ke(n)}async repairAgent(e){if(_t(e._meta,Je.REPAIR),!e.agentId)throw new _("IPC_BAD_REQUEST",`${Je.REPAIR}: missing agentId`);let n=await this.loadAgentCfg(e.agentId);if(n&&n.framework!=="openclaw")throw new _("IPC_BAD_REQUEST",`${Je.REPAIR} only allowed for openclaw, got ${n.framework}`);if(n&&this.opts.openclawRepair)try{await this.opts.openclawRepair(e.agentId,n.workspace)}catch(r){re.warn("openclaw repair (delete+add) failed (ignored)",{agentId:e.agentId,reason:e.reason,err:String(r)})}return await this.runDetailSync(e.agentId,Je.REPAIR,e.reason),{ok:!0}}async runDetailSync(e,n,r){if(!this.opts.detailSyncer){re.warn("detailSyncer not wired, skipping sync",{method:n,agentId:e});return}try{await this.opts.detailSyncer(e)}catch(i){re.warn("detail sync failed (ignored)",{method:n,agentId:e,reason:r,err:String(i)})}}async getFileTree(e){_t(e._meta,"_agent/getFileTree");let n=e._meta,r=Vn(n),i=await this.resolveWorkspace(r),s=e.filePath??"",o=this.safeJoin(i,s),a=await Ya(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 Sr(o,i))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${s}`);let c=m_(e.depth);return a.isDirectory()?{tree:await g_(i,o,s,c)}:{tree:[{name:w_(s),path:ff(s||"."),isDir:!1,size:a.size,modifiedAt:Math.floor(a.mtimeMs)}]}}async getFileContent(e){_t(e._meta,"_agent/getFileContent");let n=Vn(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 Ya(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 Sr(i,r))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${e.filePath}`);if(s.size>sf)throw new _("IPC_BAD_REQUEST",`file too large: ${s.size} bytes (max ${sf})`);let o=await of(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 fe(e).catch(()=>null))?.workspace??Re(e).workspace}safeJoin(e,n){let r=tc(e,n||"."),i=rc(e,r);if(i.startsWith("..")||i===".."||i.startsWith(`..${af}`))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${n}`);return r}loadAgentCfg(e){return fe(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 t_(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 n_(t){return t==="claude-code"?st(".claude","skills"):st(".agents","skills")}var r_=3e4,i_=50*1024*1024,Kn=3e4;async function ic(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=t_(i.skillName),c=n_(r),l=st(c,a),d=st(n,l);if(await Qa(d,{recursive:!0}),s){let m=Buffer.from(i.content,"utf8");Yr(m.length),await ec(st(d,"SKILL.md"),m,"utf8")}else{let m=await o_(i.downloadUrl);c_(m)?await f_(m,d):l_(m)?await d_(m,d):await ec(st(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 re.info("skill installed",{agentId:e,skillId:i.skillId,skillName:i.skillName,relPath:l,source:s?"content":"downloadUrl"}),p}function sc(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 s_(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 o_(t){if(!t)throw new _("IPC_BAD_REQUEST","skill missing downloadUrl");if(t.startsWith("data:")){let e=Math.floor(t.length*3/4);Yr(e);let n=a_(t);return Yr(n.length),n}if(t.startsWith("file:")){let e=new URL(t).pathname,n=await of(e);return Yr(n.length),n}if(xs(t)){let e=new AbortController,n=setTimeout(()=>e.abort(),r_);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 Yr(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 Yr(t){if(t>i_)throw new _("IPC_BAD_REQUEST",`skill too large: ${t} bytes`)}function a_(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 c_(t){return t.length>=2&&t[0]===31&&t[1]===139}function l_(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 nc(t){return t==="__MACOSX"||t.startsWith("__MACOSX/")}async function d_(t,e){let n,r;try{n=new df.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||nc(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=u_(r),s=tc(e);for(let o of r){if(nc(o.entryName))continue;let a=o.entryName;if(i&&a.startsWith(i)&&(a=a.slice(i.length)),!a)continue;let c=tc(e,a),l=rc(s,c);if(l.startsWith("..")||l==="..")throw new _("IPC_BAD_REQUEST",`zip entry escapes destDir: ${a}`);if(o.isDirectory){await Qa(c,{recursive:!0});continue}await Qa(Ky(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 ec(c,d)}}function u_(t){let e;for(let n of t){let r=n.entryName;if(!r||nc(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 f_(t,e){await h_(t);let n=zu({cwd:e,strip:1}),r=!1,i=setTimeout(()=>{r=!0,n.destroy(new _("IPC_BAD_REQUEST",`tar extract timeout (${Kn}ms)`))},Kn);try{await lf(cf.from(t),n)}catch(s){throw s instanceof _?s:r?new _("IPC_BAD_REQUEST",`tar extract timeout (${Kn}ms)`):new _("IPC_BAD_REQUEST",`tar extract failed: ${s.message??String(s)}`,{cause:s})}finally{clearTimeout(i)}}async function h_(t){let e=[],n=Jn({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 (${Kn}ms)`))},Kn);try{await lf(cf.from(t),n)}catch(s){throw r?new _("IPC_BAD_REQUEST",`tar list timeout (${Kn}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 p_=5e3;async function g_(t,e,n,r){return uf(t,e,n,r,{count:0})}async function uf(t,e,n,r,i){if(r<=0)return[];let s;try{s=await Jy(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let a of s){if(e_.has(a.name)||a.isSymbolicLink())continue;if(i.count>=p_){o.push({name:"...",path:"...",isDir:!1,size:0,modifiedAt:0,hasMore:!0});break}let c=st(e,a.name),l=Xy(st(n,a.name)),d=null;try{d=await Ya(c)}catch{continue}if(d.isSymbolicLink())continue;i.count++;let p={name:a.name,path:ff(rc(t,c)),isDir:d.isDirectory(),size:d.size,modifiedAt:Math.floor(d.mtimeMs)};d.isDirectory()&&r>1&&(p.children=await uf(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 m_(t){return!t||t<=0?Yy:Math.min(t,Qy)}function w_(t){if(!t||t==="."||t==="/")return".";let e=t.split(/[/\\]/);return e[e.length-1]||"."}function ff(t){return t.split(af).join("/")}L();import{readFileSync as mb}from"node:fs";import{dirname as yb,join as _b}from"node:path";import{fileURLToPath as Sb}from"node:url";var Xn="0.1.91-beta.1";var Ut=A("agent-health-reporter"),y_=1e4,Qr=class{constructor(e){this.opts=e;this.intervalMs=e.intervalMs??y_}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()}),Ut.info("heartbeat started",{intervalMs:this.intervalMs}),this.tick())}stop(){this.timer&&(clearInterval(this.timer),this.timer=null,this.unsubscribeRegister&&(this.unsubscribeRegister(),this.unsubscribeRegister=null),Ut.info("heartbeat stopped"))}async tick(){if(this.inFlight){Ut.debug("previous tick still in-flight, skip");return}let e=this.opts.getDeviceId();if(!e){Ut.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=__(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:Xn,_meta:{cozeDeviceId:e}},i;try{i=await this.opts.core.sendRequest("_agent/health",r,5e3)}catch(o){Ut.warn("heartbeat batch send failed",{count:n.length,err:String(o)})}let s=i?.authFailures;if(s&&s.length>0&&(Ut.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){Ut.warn("onAuthFailures callback failed (ignored)",{err:String(o)})}}finally{this.inFlight=!1}if(this.opts.onTickEnd)try{await this.opts.onTickEnd()}catch(n){Ut.warn("onTickEnd hook failed",{err:String(n)})}}};function __(t){return t.status==="error"?"error":t.activeTriggers.size>0?"busy":t.status==="ok"?"online":null}Rt();import{chmod as Q_,mkdir as Gs,rm as eE,stat as tE,writeFile as nE}from"node:fs/promises";import{homedir as rE}from"node:os";import{join as Cf}from"node:path";Xt();import{spawnSync as b_}from"node:child_process";function ei(t,e,n){return n===void 0?{jsonrpc:"2.0",id:t,method:e}:{jsonrpc:"2.0",id:t,method:e,params:n}}function Yn(t,e){return e===void 0?{jsonrpc:"2.0",method:t}:{jsonrpc:"2.0",method:t,params:e}}function Qn(t,e){return{jsonrpc:"2.0",id:t,result:e}}function zt(t,e){return{jsonrpc:"2.0",id:t,error:e}}Ie();var Ns=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)}},B={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 hf(t){return"method"in t&&"id"in t&&t.id!==void 0}function pf(t){return"method"in t&&!("id"in t)}function Ls(t){return!("method"in t)&&"id"in t}var E_={AGENT_NOT_FOUND:B.AGENT_NOT_FOUND,AGENT_BUSY:B.AGENT_BUSY,AGENT_DISCONNECTED:B.AGENT_DISCONNECTED,AGENT_TIMEOUT:B.AGENT_TIMEOUT,AGENT_FRAME_IDLE_TIMEOUT:B.AGENT_FRAME_IDLE_TIMEOUT,AGENT_SPAWN_FAILED:B.AGENT_SPAWN_FAILED,AGENT_PROTOCOL_ERROR:B.INTERNAL_ERROR,BRIDGE_CONFIG_INVALID:B.INTERNAL_ERROR,BRIDGE_INTERNAL:B.INTERNAL_ERROR,IPC_AUTH_FAILED:B.INTERNAL_ERROR,IPC_BAD_REQUEST:B.INVALID_REQUEST,MODEL_TOKEN_GEN_FAILED:B.MODEL_TOKEN_GEN_FAILED,MODEL_MODALITY_UNSUPPORTED:B.MODEL_MODALITY_UNSUPPORTED,OPERATION_NOT_ALLOWED_FOR_LOCAL:B.OPERATION_NOT_ALLOWED_FOR_LOCAL,UPSTREAM_DISCONNECTED:B.INTERNAL_ERROR,UPSTREAM_HANDSHAKE_FAILED:B.INTERNAL_ERROR,PATH_OUTSIDE_WORKSPACE:B.PATH_OUTSIDE_WORKSPACE,FILE_TOO_LARGE:B.FILE_TOO_LARGE,UNSUPPORTED_MIME:B.UNSUPPORTED_MIME,UPLOAD_FAILED:B.UPLOAD_FAILED,UPSTREAM_NOT_READY:B.UPSTREAM_NOT_READY,AGENT_DEPENDENCY_INSTALL_FAILED:B.AGENT_DEPENDENCY_INSTALL_FAILED,AGENT_APPROVAL_TIMEOUT:B.AGENT_APPROVAL_TIMEOUT};function S_(t){if(t!=null)return t instanceof Error?{name:t.name,message:ti(t.message)}:typeof t=="string"?ti(t):typeof t=="object"?v_(t):t}var I_=[[/\/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 ti(t){let e=t;for(let[n,r]of I_)e=e.replace(n,r);return e}function v_(t){let e={};for(let[n,r]of Object.entries(t))typeof r=="string"?e[n]=ti(r):e[n]=r;return e}function ni(t){if(t instanceof _){let e=S_(t.cause),n={bridgeCode:t.code,retriable:t.retriable};return e!==void 0&&(n.cause=e),{code:E_[t.code]??B.INTERNAL_ERROR,message:ti(t.message),data:n}}return{code:B.INTERNAL_ERROR,message:ti(t instanceof Error?t.message:String(t))}}function gf(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 wf(t){return`${JSON.stringify(t)}
84
+ `)}}function Xa(t){return`coze-session-${t.replace(/[^A-Za-z0-9_-]+/g,"-")}`}function nf(t,e,n){if(!t.modelToken)return null;let r=t.model||Ve,i=Ka(e,n),s=["text"];t.modelInfo?.capabilities?.image===!0&&s.push("image");let o={baseUrl:`${Va}/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??Zu,maxTokens:8192,api:"openai-completions"}]};return Object.keys(i).length>0&&(o.headers=i),o}function rf(t,e,n){if(!t.modelToken)return[];let r=Ka(e,n),i=[];for(let[s,o]of Object.entries(r))i.push("-c",`model_providers.coze.http_headers.${s}="${o}"`);return i}var re=A("agent-handlers"),sf=5*1024*1024,Yy=1,Qy=6,e_=new Set(["node_modules",".git",".coze","dist","build",".next"]),Ds=class{constructor(e){this.opts=e}opts;async listSkills(e){_t(e._meta,"_agent/listSkills");let n=Vn(e._meta),r=await this.loadAgentCfg(n),i=r?.workspace??Re(n).workspace,s=r?.skills??[],o=[];for(let a of s){let c=st(i,a.relPath,"SKILL.md");await Zy(c).then(d=>d.isFile()).catch(()=>!1)&&o.push(s_(a))}return{skills:o}}async addSkills(e){_t(e._meta,"_agent/addSkills");let n=Vn(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 ic({agentId:n,workspace:r.workspace,framework:r.framework,skill:c});sc(s,o,l),a.push(c)}return await Bi(n,s),this.reloadAgentSessions(n,"skills-added"),{installedSkills:a}}async removeSkills(e){_t(e._meta,"_agent/removeSkills");let n=Vn(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=st(r.workspace,a.relPath);await Vy(c,{recursive:!0,force:!0}),re.info("skill removed",{agentId:n,skillId:a.skillId,relPath:a.relPath})}return await Bi(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,re.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,re.info("killing downstream for workspace reload (idle)",{reason:n,agentId:e,framework:r.framework,cloudId:i,acpId:o}),c.stop(n).catch(l=>re.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 re.info("_agent/update: empty cozeIdentity, noop",{agentId:e.agentId}),{ok:!0};let n=e.agentId,r=await fe(n);if(!r)throw new _("AGENT_NOT_FOUND",`agent not found: ${n}`);if(r.cozeIdentity===e.cozeIdentity)return re.info("_agent/update: cozeIdentity unchanged, noop",{agentId:n}),{ok:!0};try{await Pn(r.workspace,r.framework,e.cozeIdentity)}catch(i){throw re.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 ke(r),re.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 fe(n);return r?(r.disconnectedAt=Date.now(),r.disconnectReason=e.reason??"",await ke(r),re.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}):(re.warn("_agent/disconnect: agent not found, ignoring",{agentId:n}),{ok:!0})}async switchModel(e){if(_t(e._meta,"_agent/switchModel"),!e.agentId)throw new _("IPC_BAD_REQUEST","_agent/switchModel: missing agentId");let n=Za(e.model)??Ve,r=await fe(e.agentId);if(!r)throw new _("AGENT_NOT_FOUND",`agent not found: ${e.agentId}`);r.model=n,e.modelInfo&&(r.modelInfo=e.modelInfo),await ke(r),re.info("_agent/switchModel: model persisted",{agentId:e.agentId,model:n,reason:e.reason??""});let i=this.opts.agents.get(e.agentId);if(!i)return re.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=>re.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),re.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(_t(e._meta,Je.RESET),!e.agentId)throw new _("IPC_BAD_REQUEST",`${Je.RESET}: missing agentId`);return await this.clearSessionMappings(e.agentId,Je.RESET),await this.runDetailSync(e.agentId,Je.RESET,e.reason),{ok:!0}}async clearSessionMappings(e,n){let r=this.opts.agents.get(e);if(!r){await this.clearPersistedAcpSessionIds(e),re.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 Ir(e,i)}async clearPersistedAcpSessionIds(e){let n=await fe(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 ke(n)}async repairAgent(e){if(_t(e._meta,Je.REPAIR),!e.agentId)throw new _("IPC_BAD_REQUEST",`${Je.REPAIR}: missing agentId`);let n=await this.loadAgentCfg(e.agentId);if(n&&n.framework!=="openclaw")throw new _("IPC_BAD_REQUEST",`${Je.REPAIR} only allowed for openclaw, got ${n.framework}`);if(n&&this.opts.openclawRepair)try{await this.opts.openclawRepair(e.agentId,n.workspace)}catch(r){re.warn("openclaw repair (delete+add) failed (ignored)",{agentId:e.agentId,reason:e.reason,err:String(r)})}return await this.runDetailSync(e.agentId,Je.REPAIR,e.reason),{ok:!0}}async runDetailSync(e,n,r){if(!this.opts.detailSyncer){re.warn("detailSyncer not wired, skipping sync",{method:n,agentId:e});return}try{await this.opts.detailSyncer(e)}catch(i){re.warn("detail sync failed (ignored)",{method:n,agentId:e,reason:r,err:String(i)})}}async getFileTree(e){_t(e._meta,"_agent/getFileTree");let n=e._meta,r=Vn(n),i=await this.resolveWorkspace(r),s=e.filePath??"",o=this.safeJoin(i,s),a=await Ya(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 Sr(o,i))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${s}`);let c=m_(e.depth);return a.isDirectory()?{tree:await g_(i,o,s,c)}:{tree:[{name:w_(s),path:ff(s||"."),isDir:!1,size:a.size,modifiedAt:Math.floor(a.mtimeMs)}]}}async getFileContent(e){_t(e._meta,"_agent/getFileContent");let n=Vn(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 Ya(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 Sr(i,r))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${e.filePath}`);if(s.size>sf)throw new _("IPC_BAD_REQUEST",`file too large: ${s.size} bytes (max ${sf})`);let o=await of(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 fe(e).catch(()=>null))?.workspace??Re(e).workspace}safeJoin(e,n){let r=tc(e,n||"."),i=rc(e,r);if(i.startsWith("..")||i===".."||i.startsWith(`..${af}`))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${n}`);return r}loadAgentCfg(e){return fe(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 t_(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 n_(t){return t==="claude-code"?st(".claude","skills"):st(".agents","skills")}var r_=3e4,i_=50*1024*1024,Kn=3e4;async function ic(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=t_(i.skillName),c=n_(r),l=st(c,a),d=st(n,l);if(await Qa(d,{recursive:!0}),s){let m=Buffer.from(i.content,"utf8");Yr(m.length),await ec(st(d,"SKILL.md"),m,"utf8")}else{let m=await o_(i.downloadUrl);c_(m)?await f_(m,d):l_(m)?await d_(m,d):await ec(st(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 re.info("skill installed",{agentId:e,skillId:i.skillId,skillName:i.skillName,relPath:l,source:s?"content":"downloadUrl"}),p}function sc(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 s_(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 o_(t){if(!t)throw new _("IPC_BAD_REQUEST","skill missing downloadUrl");if(t.startsWith("data:")){let e=Math.floor(t.length*3/4);Yr(e);let n=a_(t);return Yr(n.length),n}if(t.startsWith("file:")){let e=new URL(t).pathname,n=await of(e);return Yr(n.length),n}if(xs(t)){let e=new AbortController,n=setTimeout(()=>e.abort(),r_);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 Yr(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 Yr(t){if(t>i_)throw new _("IPC_BAD_REQUEST",`skill too large: ${t} bytes`)}function a_(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 c_(t){return t.length>=2&&t[0]===31&&t[1]===139}function l_(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 nc(t){return t==="__MACOSX"||t.startsWith("__MACOSX/")}async function d_(t,e){let n,r;try{n=new df.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||nc(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=u_(r),s=tc(e);for(let o of r){if(nc(o.entryName))continue;let a=o.entryName;if(i&&a.startsWith(i)&&(a=a.slice(i.length)),!a)continue;let c=tc(e,a),l=rc(s,c);if(l.startsWith("..")||l==="..")throw new _("IPC_BAD_REQUEST",`zip entry escapes destDir: ${a}`);if(o.isDirectory){await Qa(c,{recursive:!0});continue}await Qa(Ky(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 ec(c,d)}}function u_(t){let e;for(let n of t){let r=n.entryName;if(!r||nc(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 f_(t,e){await h_(t);let n=zu({cwd:e,strip:1}),r=!1,i=setTimeout(()=>{r=!0,n.destroy(new _("IPC_BAD_REQUEST",`tar extract timeout (${Kn}ms)`))},Kn);try{await lf(cf.from(t),n)}catch(s){throw s instanceof _?s:r?new _("IPC_BAD_REQUEST",`tar extract timeout (${Kn}ms)`):new _("IPC_BAD_REQUEST",`tar extract failed: ${s.message??String(s)}`,{cause:s})}finally{clearTimeout(i)}}async function h_(t){let e=[],n=Jn({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 (${Kn}ms)`))},Kn);try{await lf(cf.from(t),n)}catch(s){throw r?new _("IPC_BAD_REQUEST",`tar list timeout (${Kn}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 p_=5e3;async function g_(t,e,n,r){return uf(t,e,n,r,{count:0})}async function uf(t,e,n,r,i){if(r<=0)return[];let s;try{s=await Jy(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let a of s){if(e_.has(a.name)||a.isSymbolicLink())continue;if(i.count>=p_){o.push({name:"...",path:"...",isDir:!1,size:0,modifiedAt:0,hasMore:!0});break}let c=st(e,a.name),l=Xy(st(n,a.name)),d=null;try{d=await Ya(c)}catch{continue}if(d.isSymbolicLink())continue;i.count++;let p={name:a.name,path:ff(rc(t,c)),isDir:d.isDirectory(),size:d.size,modifiedAt:Math.floor(d.mtimeMs)};d.isDirectory()&&r>1&&(p.children=await uf(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 m_(t){return!t||t<=0?Yy:Math.min(t,Qy)}function w_(t){if(!t||t==="."||t==="/")return".";let e=t.split(/[/\\]/);return e[e.length-1]||"."}function ff(t){return t.split(af).join("/")}L();import{readFileSync as mb}from"node:fs";import{dirname as yb,join as _b}from"node:path";import{fileURLToPath as Sb}from"node:url";var Xn="0.1.91";var Ut=A("agent-health-reporter"),y_=1e4,Qr=class{constructor(e){this.opts=e;this.intervalMs=e.intervalMs??y_}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()}),Ut.info("heartbeat started",{intervalMs:this.intervalMs}),this.tick())}stop(){this.timer&&(clearInterval(this.timer),this.timer=null,this.unsubscribeRegister&&(this.unsubscribeRegister(),this.unsubscribeRegister=null),Ut.info("heartbeat stopped"))}async tick(){if(this.inFlight){Ut.debug("previous tick still in-flight, skip");return}let e=this.opts.getDeviceId();if(!e){Ut.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=__(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:Xn,_meta:{cozeDeviceId:e}},i;try{i=await this.opts.core.sendRequest("_agent/health",r,5e3)}catch(o){Ut.warn("heartbeat batch send failed",{count:n.length,err:String(o)})}let s=i?.authFailures;if(s&&s.length>0&&(Ut.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){Ut.warn("onAuthFailures callback failed (ignored)",{err:String(o)})}}finally{this.inFlight=!1}if(this.opts.onTickEnd)try{await this.opts.onTickEnd()}catch(n){Ut.warn("onTickEnd hook failed",{err:String(n)})}}};function __(t){return t.status==="error"?"error":t.activeTriggers.size>0?"busy":t.status==="ok"?"online":null}Rt();import{chmod as Q_,mkdir as Gs,rm as eE,stat as tE,writeFile as nE}from"node:fs/promises";import{homedir as rE}from"node:os";import{join as Cf}from"node:path";Xt();import{spawnSync as b_}from"node:child_process";function ei(t,e,n){return n===void 0?{jsonrpc:"2.0",id:t,method:e}:{jsonrpc:"2.0",id:t,method:e,params:n}}function Yn(t,e){return e===void 0?{jsonrpc:"2.0",method:t}:{jsonrpc:"2.0",method:t,params:e}}function Qn(t,e){return{jsonrpc:"2.0",id:t,result:e}}function zt(t,e){return{jsonrpc:"2.0",id:t,error:e}}Ie();var Ns=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)}},B={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 hf(t){return"method"in t&&"id"in t&&t.id!==void 0}function pf(t){return"method"in t&&!("id"in t)}function Ls(t){return!("method"in t)&&"id"in t}var E_={AGENT_NOT_FOUND:B.AGENT_NOT_FOUND,AGENT_BUSY:B.AGENT_BUSY,AGENT_DISCONNECTED:B.AGENT_DISCONNECTED,AGENT_TIMEOUT:B.AGENT_TIMEOUT,AGENT_FRAME_IDLE_TIMEOUT:B.AGENT_FRAME_IDLE_TIMEOUT,AGENT_SPAWN_FAILED:B.AGENT_SPAWN_FAILED,AGENT_PROTOCOL_ERROR:B.INTERNAL_ERROR,BRIDGE_CONFIG_INVALID:B.INTERNAL_ERROR,BRIDGE_INTERNAL:B.INTERNAL_ERROR,IPC_AUTH_FAILED:B.INTERNAL_ERROR,IPC_BAD_REQUEST:B.INVALID_REQUEST,MODEL_TOKEN_GEN_FAILED:B.MODEL_TOKEN_GEN_FAILED,MODEL_MODALITY_UNSUPPORTED:B.MODEL_MODALITY_UNSUPPORTED,OPERATION_NOT_ALLOWED_FOR_LOCAL:B.OPERATION_NOT_ALLOWED_FOR_LOCAL,UPSTREAM_DISCONNECTED:B.INTERNAL_ERROR,UPSTREAM_HANDSHAKE_FAILED:B.INTERNAL_ERROR,PATH_OUTSIDE_WORKSPACE:B.PATH_OUTSIDE_WORKSPACE,FILE_TOO_LARGE:B.FILE_TOO_LARGE,UNSUPPORTED_MIME:B.UNSUPPORTED_MIME,UPLOAD_FAILED:B.UPLOAD_FAILED,UPSTREAM_NOT_READY:B.UPSTREAM_NOT_READY,AGENT_DEPENDENCY_INSTALL_FAILED:B.AGENT_DEPENDENCY_INSTALL_FAILED,AGENT_APPROVAL_TIMEOUT:B.AGENT_APPROVAL_TIMEOUT};function S_(t){if(t!=null)return t instanceof Error?{name:t.name,message:ti(t.message)}:typeof t=="string"?ti(t):typeof t=="object"?v_(t):t}var I_=[[/\/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 ti(t){let e=t;for(let[n,r]of I_)e=e.replace(n,r);return e}function v_(t){let e={};for(let[n,r]of Object.entries(t))typeof r=="string"?e[n]=ti(r):e[n]=r;return e}function ni(t){if(t instanceof _){let e=S_(t.cause),n={bridgeCode:t.code,retriable:t.retriable};return e!==void 0&&(n.cause=e),{code:E_[t.code]??B.INTERNAL_ERROR,message:ti(t.message),data:n}}return{code:B.INTERNAL_ERROR,message:ti(t instanceof Error?t.message:String(t))}}function gf(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 wf(t){return`${JSON.stringify(t)}
85
85
  `}var mf=10*1024*1024,Fs=class{buffer="";onError;constructor(e={}){this.onError=e.onError}push(e){if(this.buffer+=typeof e=="string"?e:e.toString("utf8"),this.buffer.length>mf){let i=this.buffer.length;return this.buffer="",this.onError?.({line:`<buffer overflow: ${i} bytes, dropped>`,error:new Error(`LdjsonDecoder buffer exceeded ${mf} bytes`)}),[]}let n=this.buffer.split(`
86
86
  `);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 _f={"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"},Cb=Object.fromEntries(Object.entries(_f).map(([t,e])=>[e,t])),T_={"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:[]},er=class{seq=0;next(e,n){this.seq+=1;let r=_f[e]??R_(e),i=T_[r]??[],s=[r,String(this.seq)];if(i.length>0){let o=i.map(c=>yf(n?.[c]??"")),a=k_(o).join(":");a&&s.push(a)}else n&&Object.values(n).some(o=>o)&&s.push(Object.values(n).filter(Boolean).map(o=>yf(String(o))).join(":"));return s.join("_")}reset(){this.seq=0}};function R_(t){return t.replace(/[\s/]+/g,".").replace(/_+/g,"-")}function yf(t){return t.replace(/[:_\s]+/g,"-")}function k_(t){let e=t.length;for(;e>0&&!t[e-1];)e-=1;return t.slice(0,e)}ft();ki();Ie();L();var A_=ut("COZE_BRIDGE_INITIALIZE_TIMEOUT_MS",3e4),x_=200,O_=ut("COZE_BRIDGE_SESSION_PROMPT_MAX_MS",3600*1e3),P_=ut("COZE_BRIDGE_SESSION_PROMPT_FRAME_IDLE_MS",600*1e3),C_=ut("COZE_BRIDGE_SESSION_PROMPT_APPROVAL_MAX_MS",1440*60*1e3),Ef=500;function D_(t){try{let e=JSON.stringify(t);return e===void 0||e.length<=Ef?t:`${e.slice(0,Ef)}...<truncated, total ${e.length} chars>`}catch{return"<unserializable>"}}function Sf(t,e){if(!(typeof t!="number"||t<=0))try{if(process.platform==="win32"){let n=["/PID",String(t),"/T"];e==="SIGKILL"&&n.push("/F"),b_("taskkill",n,{stdio:"ignore",windowsHide:!0})}else process.kill(-t,e)}catch{}}var ot=class{constructor(e){this.opts=e;this.log=A(`downstream.${this.constructor.name}`,this.opts.agentId),this.decoder=new Fs({onError:n=>this.log.warn("decode line failed",{line:n.line})})}opts;child;decoder;pending=new Map;inflightAgentRequests=new Map;idAllocator=new er;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=Le(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>x_&&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()));Sf(n.pid,"SIGTERM");let i=setTimeout(()=>{n.killed||Sf(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=O_,r=P_,i=C_){return this.call("session/prompt",e,n,r,i)}async sessionCancel(e){!this.child||this.stopped||this.writeFrame(Yn("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(Qn(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(zt(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=A_,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=ei(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 f={resolve:p,reject:m,timer:null,frameIdleTimer:null,armFrameIdle:null,method:e},h=Date.now();if(l){let w=()=>{f.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),f.frameIdleTimer&&clearTimeout(f.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?()=>{f.frameIdleTimer&&clearTimeout(f.frameIdleTimer),f.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}f.timer&&clearTimeout(f.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;f.armFrameIdle=g,this.pending.set(o,f),g?.();try{this.writeFrame(a)}catch(w){f.timer&&clearTimeout(f.timer),f.frameIdleTimer&&clearTimeout(f.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(wf(e),n=>{n&&this.log.warn("stdin write callback err",{err:String(n)})})}dispatch(e){if(Ls(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(gf(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:D_(e.result)}),n.resolve(e.result));return}if(pf(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(hf(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(zt(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(zt(e.id,ni(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 N_(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 Ms=class extends ot{framework="claude-code";constructor(e){let n=Er("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 N_(e)}};Xt();import{mkdtempSync as L_,rmSync as F_}from"node:fs";import{tmpdir as M_}from"node:os";import{join as B_}from"node:path";var Bs=class extends ot{framework="codex";authMethodId;codexHomeDir;constructor(e){let n=Er("codex",e.command),r=e.args??[],i=e.extraArgs?[...r,...e.extraArgs]:r,s=e.isolateCodexHome?L_(B_(M_(),"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{F_(this.codexHomeDir,{recursive:!0,force:!0})}catch{}}};var U_=3e4,tr=class extends ot{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}`}]},U_))}get acpSessionName(){return this.sessionName}};Ie();L();se();function oc(t){return t.replace(/[^A-Za-z0-9._-]+/g,"-")}Xt();var $t=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 Us=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 $t,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)ri(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 ri(t){t.idleTimer&&(clearTimeout(t.idleTimer),t.idleTimer=void 0)}ft();L();import{promises as ac}from"node:fs";import{join as z_}from"node:path";var hn=A("agents.codex-sandbox-installer"),If="@openai/codex@0.135.0",vf="https://registry.npmmirror.com",cc="/usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin/codex",$_="/usr/bin",Tf=["apply_patch","applypatch","codex-execve-wrapper","codex-linux-sandbox"],G_=9e4,H_=5e3,ii=null,Rf=!1;async function kf(t,e={}){if((e.platform??process.platform)!=="linux"||Rf)return;if(ii)return ii;let r=e.exec??bn,i=e.statFile??(async a=>{try{return await ac.stat(a),!0}catch{return!1}}),s=e.symlink??((a,c)=>ac.symlink(a,c)),o=e.unlink??(a=>ac.unlink(a));return ii=(async()=>{try{let a=!1;try{let{stdout:l}=await r("which",["codex"],{timeout:H_});a=l.trim().length>0}catch{a=!1}if(a)hn.info("codex already present, skip install");else{hn.info("codex not found, installing",{package:If,registry:vf});try{await r("npm",["i","-g",If,`--registry=${vf}`],{timeout:G_,maxBuffer:10*1024*1024,signal:t}),hn.info("codex install ok")}catch(l){hn.warn("codex install failed (skip symlinks)",{err:String(l)});return}}if(!await i(cc)){hn.warn("codex vendor bin not found, skip symlinks",{target:cc});return}let c=0;for(let l of Tf){let d=z_($_,l);try{await o(d).catch(()=>{}),await s(cc,d),c+=1,hn.info("codex sandbox symlink created",{link:d})}catch(p){hn.warn("codex sandbox symlink failed (ignored)",{link:d,err:String(p)})}}c===Tf.length&&(Rf=!0)}finally{ii=null}})(),ii}ft();L();import{constants as bf,access as j_}from"node:fs/promises";import{delimiter as W_,join as q_}from"node:path";var Gt=A("framework-detector"),Af={"claude-code":"claude",codex:"codex",openclaw:"openclaw"},J_=[".exe",".cmd",".bat",".ps1"],Ht=class{env;constructor(e={}){this.env={pathEnv:e.pathEnv??process.env.PATH??"",platform:e.platform??process.platform,spawn:e.spawn??Le,access:e.access??j_}}async detect(e){let n=Af[e],r=await this.which(n);if(!r)return Gt.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(Af).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(W_).filter(Boolean),r=this.env.platform==="win32"?["",...J_]:[""];for(let i of n)for(let s of r){let o=q_(i,e+s);if(await this.isExecutable(o))return o}return null}async isExecutable(e){try{let n=this.env.platform==="win32"?bf.F_OK:bf.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 Gt.warn("openclaw default agent probe: runProbe returned null (spawn err / timeout)",{path:e}),null;if(n.code!==0)return Gt.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 Gt.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 Gt.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?(Gt.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}:(Gt.info("openclaw default agent probe: no agent has isDefault=true",{path:e,agentCount:i.length}),null)}catch(i){return Gt.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&&(Z_(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)}})}},V_=new RegExp("\x1B\\[[0-9;]*[A-Za-z]","g");function Z_(t){return t.replace(V_,"")}import{homedir as K_}from"node:os";import{join as X_}from"node:path";ft();Ie();Fi();L();async function Pf(){let t=X_(K_(),".openclaw/openclaw.json");return(await On(t))?.gateway?.auth?.token??""}var xf=A("openclaw.config"),Y_=[0,5e3,5e3],Of="models.providers.",zs="agents.defaults.models",$s=class{command;env;retryDelaysMs;queue=new $t;constructor(e){this.command=e.command,this.env=e.env??process.env,this.retryDelaysMs=e.retryDelaysMs??Y_}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,xf.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=Le(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){xf.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",`${Of}${e}`,JSON.stringify(n),"--strict-json","--merge"])))}removeProvider(e){return this.bestEffortUnset(`config unset models.providers.${e}`,`${Of}${e}`)}addModelToAllowlist(e,n){let r={[e]:n?{alias:n}:{}};return this.queue.enqueue(()=>this.withRetry(`config set ${zs}[${e}]`,()=>this.runCli(["config","set",zs,JSON.stringify(r),"--strict-json","--merge"])))}removeModelFromAllowlist(e){return this.bestEffortUnset(`config unset ${zs}[${e}]`,`${zs}.${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 Z=A("agent-manager"),iE=(t,e,n,r,i,s,o,a,c)=>{switch(t){case"claude-code":{let l={...i?{...Yu(i),...tf(i,o,a)}:{},...c??{},IS_SANDBOX:"1"};return new Ms({cwd:n,env:l,agentId:r})}case"codex":{let d=[...i?[...Qu(i),...rf(i,o,a)]:[],"-c",'sandbox_mode="workspace-write"',"-c",'approval_policy="on-request"'],p={...i?ef(i):{},...c??{}},m=!!i;return new Bs({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 tr({command:e,cwd:n,agentId:r,...s?{sessionName:oc(s)}:{}})}};function lc(t){return t==="claude-code"||t==="codex"}function sE(t){let e=[],n=Object.keys(t).sort();for(let r of n){let i=t[r];i!==void 0&&(oE(i)||e.push(`${r}=${i}`))}return e.length===0?"":`${e.join(`
87
87
  `)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coze-bridge",
3
- "version": "0.1.91-beta.1",
3
+ "version": "0.1.91",
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",