coze-bridge 0.1.90-beta.0 → 0.1.90
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -80,8 +80,8 @@ WantedBy=default.target
|
|
|
80
80
|
</Task>
|
|
81
81
|
`},configPath(t){return Uv(t.homeDir,".coze","bridge","task.xml")},async install(t){let r=`cmd.exe /c ${[`^"${t.nodeBin}^"`,`^"${t.entry}^"`,"--daemon",`>> ^"${t.logFile}^" 2>&1`].join(" ")}`;await rg("schtasks",["/Create","/SC","ONLOGON","/TN",Eo,"/TR",r,"/RU",t.userName,"/F"]),dl.info("task scheduler entry created",{task:Eo,logFile:t.logFile})},async uninstall(t){await rg("schtasks",["/Delete","/TN",Eo,"/F"]).catch(e=>dl.warn("schtasks /Delete failed (ignored)",{err:String(e)})),dl.info("task scheduler entry removed",{task:Eo})}}});var ig={};_i(ig,{buildContext:()=>Hv,getSupervisor:()=>Gv,launchdSupervisor:()=>cl,systemdSupervisor:()=>ll,taskSchedulerSupervisor:()=>ul});import{homedir as zv,userInfo as $v}from"node:os";function Gv(t=process.platform){switch(t){case"darwin":return cl;case"linux":return ll;case"win32":return ul;default:throw new Error(`unsupported platform for OS supervisor: ${t}`)}}function Hv(){let t=N();return{nodeBin:process.execPath,entry:tl(t),logFile:t.logFile,homeDir:zv(),userName:$v().username}}var sg=me(()=>{"use strict";se();nl();eg();tg();ng()});F();Vt();var bl=x("acp-installer-warmup"),Jg=["claude-code","codex"];async function Al(t={}){let e=t.ensure??vr,n=(await Promise.allSettled(Jg.map(async i=>{let s=await e(i);bl.info("acp wrapper warmup ok",{framework:i,path:s})}))).filter(i=>i.status==="rejected");n.length>0&&bl.warn("acp wrapper warmup partial failure (\u5C06\u5728\u4E0B\u6B21 createAgent \u65F6\u91CD\u8BD5\u5E76\u629B\u9519\u7ED9\u7528\u6237)",{failedCount:n.length,reasons:n.map(i=>i.reason instanceof Error?i.reason.message:String(i.reason))})}Rt();F();import{readdir as sm}from"node:fs/promises";import{mkdir as Ll,writeFile as Fl}from"node:fs/promises";import{join as Oo}from"node:path";var im={"claude-code":"CLAUDE.md",codex:"AGENTS.md",openclaw:"SOUL.md"};async function Rr(t,e,r){await Ll(t,{recursive:!0});let n=im[e],i=Oo(t,n);return await Fl(i,r??"","utf8"),i}async function Ml(t){let e=Oo(t,".claude");await Ll(e,{recursive:!0});let r=Oo(e,"settings.local.json"),n=JSON.stringify({permissions:{defaultMode:"bypassPermissions"}},null,2);return await Fl(r,n,"utf8"),r}var ke=x("agent-detail-sync"),om=6e4,am=5*6e4,Li=class{constructor(e){this.opts=e}opts;retryQueue=new Map;async syncAll(e){let r=this.opts.paths.agentsRoot,n;try{n=await sm(r)}catch(i){ke.info("agents dir not found, skip detail sync",{root:r,err:String(i)});return}ke.info("starting detail sync",{reason:e,count:n.length}),await Promise.allSettled(n.map(async i=>{let s=await ue(i,this.opts.paths).catch(()=>null);if(s){if(s.disconnectedAt){ke.debug("detail sync: skip disconnected agent",{agentId:i});return}try{await this.syncOne(i,s)}catch(o){ke.warn("detail sync failed for agent, skipping",{agentId:i,err:String(o)})}}})),ke.info("detail sync done",{reason:e})}async retryPending(){if(this.retryQueue.size===0)return;let e=Date.now(),r=[];for(let[n,i]of this.retryQueue)e>=i.dueAt&&r.push(n);if(r.length!==0){ke.info("retrying pending detail syncs",{count:r.length});for(let n of r)try{await this.syncOne(n)}catch(i){ke.debug("detail sync retry still failing, will try again",{agentId:n,err:String(i)})}}}async syncOne(e,r){let n=r??await ue(e,this.opts.paths);if(!n){ke.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){ke.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,am):om;this.retryQueue.set(e,{dueAt:Date.now()+l,currentDelay:l});return}if(i.agentId&&i.agentId!==e){ke.warn("detail response agentId mismatch, ignoring",{agentId:e,responseAgentId:i.agentId});return}let s=!1,o=!1;if(i.agentName&&i.agentName!==n.agentName&&(n.agentName=i.agentName,s=!0),i.description!==void 0&&i.description!==n.description&&(n.description=i.description,s=!0),i.cozeIdentity&&i.cozeIdentity!==n.cozeIdentity&&(n.cozeIdentity=i.cozeIdentity,s=!0,o=!0),i.deployType&&ke.info("detail.deployType",{agentId:e,deployType:i.deployType}),!s){ke.debug("detail sync: no diff",{agentId:e});return}await Te(n,this.opts.paths),ke.info("detail sync: config updated",{agentId:e,identityChanged:o,agentName:n.agentName}),o&&(await Rr(n.workspace,n.framework,n.cozeIdentity),this.opts.handlers.reloadAgentSessionsPublic(e,"detail-sync"))}};var eh=dt(md(),1);import{lstat as ja,mkdir as Wa,readFile as Ku,readdir as Ny,rm as Ly,stat as Fy,writeFile as qa}from"node:fs/promises";import{dirname as My,join as nt,normalize as By,relative as Za,resolve as Ja,sep as Xu}from"node:path";import{Readable as Yu}from"node:stream";import{pipeline as Qu}from"node:stream/promises";import xm from"events";import Re from"fs";import{EventEmitter as xa}from"node:events";import Xd from"node:stream";import{StringDecoder as Om}from"node:string_decoder";import eu from"node:path";import Mr from"node:fs";import{dirname as Hm,parse as jm}from"path";import{EventEmitter as Ym}from"events";import da from"assert";import{Buffer as sr}from"buffer";import*as Sd from"zlib";import Qm from"zlib";import{posix as Or}from"node:path";import{basename as kw}from"node:path";import fs from"fs";import Qe from"fs";import Ad from"path";import{win32 as Mw}from"node:path";import Ld from"path";import gu from"node:fs";import ey from"node:assert";import{randomBytes as mu}from"node:crypto";import L from"node:fs";import re from"node:path";import wu from"fs";import Is from"node:fs";import Ln from"node:path";import xe from"node:fs";import ay from"node:fs/promises";import ms from"node:path";import{join as Au}from"node:path";import Ae from"node:fs";import Pu from"node:path";var bm=Object.defineProperty,Am=(t,e)=>{for(var r in e)bm(t,r,{get:e[r],enumerable:!0})},wd=typeof process=="object"&&process?process:{stdout:null,stderr:null},Pm=t=>!!t&&typeof t=="object"&&(t instanceof cr||t instanceof Xd||Cm(t)||Dm(t)),Cm=t=>!!t&&typeof t=="object"&&t instanceof xa&&typeof t.pipe=="function"&&t.pipe!==Xd.Writable.prototype.pipe,Dm=t=>!!t&&typeof t=="object"&&t instanceof xa&&typeof t.write=="function"&&typeof t.end=="function",ut=Symbol("EOF"),ht=Symbol("maybeEmitEnd"),bt=Symbol("emittedEnd"),zi=Symbol("emittingEnd"),yn=Symbol("emittedError"),$i=Symbol("closed"),yd=Symbol("read"),Gi=Symbol("flush"),_d=Symbol("flushChunk"),ze=Symbol("encoding"),xr=Symbol("decoder"),oe=Symbol("flowing"),_n=Symbol("paused"),Nr=Symbol("resume"),ae=Symbol("buffer"),Se=Symbol("pipes"),ce=Symbol("bufferLength"),Fo=Symbol("bufferPush"),Hi=Symbol("bufferShift"),ye=Symbol("objectMode"),Y=Symbol("destroyed"),Mo=Symbol("error"),Bo=Symbol("emitData"),Ed=Symbol("emitEnd"),Uo=Symbol("emitEnd2"),Ke=Symbol("async"),zo=Symbol("abort"),ji=Symbol("aborted"),En=Symbol("signal"),Kt=Symbol("dataListeners"),be=Symbol("discarded"),Sn=t=>Promise.resolve().then(t),Nm=t=>t(),Lm=t=>t==="end"||t==="finish"||t==="prefinish",Fm=t=>t instanceof ArrayBuffer||!!t&&typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Mm=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),Yd=class{src;dest;opts;ondrain;constructor(t,e,r){this.src=t,this.dest=e,this.opts=r,this.ondrain=()=>t[Nr](),this.dest.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(t){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},Bm=class extends Yd{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(t,e,r){super(t,e,r),this.proxyErrors=n=>this.dest.emit("error",n),t.on("error",this.proxyErrors)}},Um=t=>!!t.objectMode,zm=t=>!t.objectMode&&!!t.encoding&&t.encoding!=="buffer",cr=class extends xa{[oe]=!1;[_n]=!1;[Se]=[];[ae]=[];[ye];[ze];[Ke];[xr];[ut]=!1;[bt]=!1;[zi]=!1;[$i]=!1;[yn]=null;[ce]=0;[Y]=!1;[En];[ji]=!1;[Kt]=0;[be]=!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");Um(e)?(this[ye]=!0,this[ze]=null):zm(e)?(this[ze]=e.encoding,this[ye]=!1):(this[ye]=!1,this[ze]=null),this[Ke]=!!e.async,this[xr]=this[ze]?new Om(this[ze]):null,e&&e.debugExposeBuffer===!0&&Object.defineProperty(this,"buffer",{get:()=>this[ae]}),e&&e.debugExposePipes===!0&&Object.defineProperty(this,"pipes",{get:()=>this[Se]});let{signal:r}=e;r&&(this[En]=r,r.aborted?this[zo]():r.addEventListener("abort",()=>this[zo]()))}get bufferLength(){return this[ce]}get encoding(){return this[ze]}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[ye]}set objectMode(t){throw new Error("objectMode must be set at instantiation time")}get async(){return this[Ke]}set async(t){this[Ke]=this[Ke]||!!t}[zo](){this[ji]=!0,this.emit("abort",this[En]?.reason),this.destroy(this[En]?.reason)}get aborted(){return this[ji]}set aborted(t){}write(t,e,r){if(this[ji])return!1;if(this[ut])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"&&(r=e,e="utf8"),e||(e="utf8");let n=this[Ke]?Sn:Nm;if(!this[ye]&&!Buffer.isBuffer(t)){if(Mm(t))t=Buffer.from(t.buffer,t.byteOffset,t.byteLength);else if(Fm(t))t=Buffer.from(t);else if(typeof t!="string")throw new Error("Non-contiguous data written to non-objectMode stream")}return this[ye]?(this[oe]&&this[ce]!==0&&this[Gi](!0),this[oe]?this.emit("data",t):this[Fo](t),this[ce]!==0&&this.emit("readable"),r&&n(r),this[oe]):t.length?(typeof t=="string"&&!(e===this[ze]&&!this[xr]?.lastNeed)&&(t=Buffer.from(t,e)),Buffer.isBuffer(t)&&this[ze]&&(t=this[xr].write(t)),this[oe]&&this[ce]!==0&&this[Gi](!0),this[oe]?this.emit("data",t):this[Fo](t),this[ce]!==0&&this.emit("readable"),r&&n(r),this[oe]):(this[ce]!==0&&this.emit("readable"),r&&n(r),this[oe])}read(t){if(this[Y])return null;if(this[be]=!1,this[ce]===0||t===0||t&&t>this[ce])return this[ht](),null;this[ye]&&(t=null),this[ae].length>1&&!this[ye]&&(this[ae]=[this[ze]?this[ae].join(""):Buffer.concat(this[ae],this[ce])]);let e=this[yd](t||null,this[ae][0]);return this[ht](),e}[yd](t,e){if(this[ye])this[Hi]();else{let r=e;t===r.length||t===null?this[Hi]():typeof r=="string"?(this[ae][0]=r.slice(t),e=r.slice(0,t),this[ce]-=t):(this[ae][0]=r.subarray(t),e=r.subarray(0,t),this[ce]-=t)}return this.emit("data",e),!this[ae].length&&!this[ut]&&this.emit("drain"),e}end(t,e,r){return typeof t=="function"&&(r=t,t=void 0),typeof e=="function"&&(r=e,e="utf8"),t!==void 0&&this.write(t,e),r&&this.once("end",r),this[ut]=!0,this.writable=!1,(this[oe]||!this[_n])&&this[ht](),this}[Nr](){this[Y]||(!this[Kt]&&!this[Se].length&&(this[be]=!0),this[_n]=!1,this[oe]=!0,this.emit("resume"),this[ae].length?this[Gi]():this[ut]?this[ht]():this.emit("drain"))}resume(){return this[Nr]()}pause(){this[oe]=!1,this[_n]=!0,this[be]=!1}get destroyed(){return this[Y]}get flowing(){return this[oe]}get paused(){return this[_n]}[Fo](t){this[ye]?this[ce]+=1:this[ce]+=t.length,this[ae].push(t)}[Hi](){return this[ye]?this[ce]-=1:this[ce]-=this[ae][0].length,this[ae].shift()}[Gi](t=!1){do;while(this[_d](this[Hi]())&&this[ae].length);!t&&!this[ae].length&&!this[ut]&&this.emit("drain")}[_d](t){return this.emit("data",t),this[oe]}pipe(t,e){if(this[Y])return t;this[be]=!1;let r=this[bt];return e=e||{},t===wd.stdout||t===wd.stderr?e.end=!1:e.end=e.end!==!1,e.proxyErrors=!!e.proxyErrors,r?e.end&&t.end():(this[Se].push(e.proxyErrors?new Bm(this,t,e):new Yd(this,t,e)),this[Ke]?Sn(()=>this[Nr]()):this[Nr]()),t}unpipe(t){let e=this[Se].find(r=>r.dest===t);e&&(this[Se].length===1?(this[oe]&&this[Kt]===0&&(this[oe]=!1),this[Se]=[]):this[Se].splice(this[Se].indexOf(e),1),e.unpipe())}addListener(t,e){return this.on(t,e)}on(t,e){let r=super.on(t,e);if(t==="data")this[be]=!1,this[Kt]++,!this[Se].length&&!this[oe]&&this[Nr]();else if(t==="readable"&&this[ce]!==0)super.emit("readable");else if(Lm(t)&&this[bt])super.emit(t),this.removeAllListeners(t);else if(t==="error"&&this[yn]){let n=e;this[Ke]?Sn(()=>n.call(this,this[yn])):n.call(this,this[yn])}return r}removeListener(t,e){return this.off(t,e)}off(t,e){let r=super.off(t,e);return t==="data"&&(this[Kt]=this.listeners("data").length,this[Kt]===0&&!this[be]&&!this[Se].length&&(this[oe]=!1)),r}removeAllListeners(t){let e=super.removeAllListeners(t);return(t==="data"||t===void 0)&&(this[Kt]=0,!this[be]&&!this[Se].length&&(this[oe]=!1)),e}get emittedEnd(){return this[bt]}[ht](){!this[zi]&&!this[bt]&&!this[Y]&&this[ae].length===0&&this[ut]&&(this[zi]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[$i]&&this.emit("close"),this[zi]=!1)}emit(t,...e){let r=e[0];if(t!=="error"&&t!=="close"&&t!==Y&&this[Y])return!1;if(t==="data")return!this[ye]&&!r?!1:this[Ke]?(Sn(()=>this[Bo](r)),!0):this[Bo](r);if(t==="end")return this[Ed]();if(t==="close"){if(this[$i]=!0,!this[bt]&&!this[Y])return!1;let i=super.emit("close");return this.removeAllListeners("close"),i}else if(t==="error"){this[yn]=r,super.emit(Mo,r);let i=!this[En]||this.listeners("error").length?super.emit("error",r):!1;return this[ht](),i}else if(t==="resume"){let i=super.emit("resume");return this[ht](),i}else if(t==="finish"||t==="prefinish"){let i=super.emit(t);return this.removeAllListeners(t),i}let n=super.emit(t,...e);return this[ht](),n}[Bo](t){for(let r of this[Se])r.dest.write(t)===!1&&this.pause();let e=this[be]?!1:super.emit("data",t);return this[ht](),e}[Ed](){return this[bt]?!1:(this[bt]=!0,this.readable=!1,this[Ke]?(Sn(()=>this[Uo]()),!0):this[Uo]())}[Uo](){if(this[xr]){let e=this[xr].end();if(e){for(let r of this[Se])r.dest.write(e);this[be]||super.emit("data",e)}}for(let e of this[Se])e.end();let t=super.emit("end");return this.removeAllListeners("end"),t}async collect(){let t=Object.assign([],{dataLength:0});this[ye]||(t.dataLength=0);let e=this.promise();return this.on("data",r=>{t.push(r),this[ye]||(t.dataLength+=r.length)}),await e,t}async concat(){if(this[ye])throw new Error("cannot concat in objectMode");let t=await this.collect();return this[ze]?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",r=>e(r)),this.on("end",()=>t())})}[Symbol.asyncIterator](){this[be]=!1;let t=!1,e=async()=>(this.pause(),t=!0,{value:void 0,done:!0});return{next:()=>{if(t)return e();let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[ut])return e();let n,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(),n({value:l,done:!!this[ut]})},a=()=>{this.off("error",s),this.off("data",o),this.off(Y,c),e(),n({done:!0,value:void 0})},c=()=>s(new Error("stream destroyed"));return new Promise((l,d)=>{i=d,n=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[be]=!1;let t=!1,e=()=>(this.pause(),this.off(Mo,e),this.off(Y,e),this.off("end",e),t=!0,{done:!0,value:void 0}),r=()=>{if(t)return e();let n=this.read();return n===null?e():{done:!1,value:n}};return this.once("end",e),this.once(Mo,e),this.once(Y,e),{next:r,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[be]=!0,this[ae].length=0,this[ce]=0;let e=this;return typeof e.close=="function"&&!this[$i]&&e.close(),t?this.emit("error",t):this.emit(Y),this}static get isStream(){return Pm}},$m=Re.writev,Mt=Symbol("_autoClose"),je=Symbol("_close"),In=Symbol("_ended"),U=Symbol("_fd"),$o=Symbol("_finished"),mt=Symbol("_flags"),Go=Symbol("_flush"),ca=Symbol("_handleChunk"),la=Symbol("_makeBuf"),Dn=Symbol("_mode"),Wi=Symbol("_needDrain"),Ur=Symbol("_onerror"),zr=Symbol("_onopen"),Ho=Symbol("_onread"),Lr=Symbol("_onwrite"),Bt=Symbol("_open"),He=Symbol("_path"),Ct=Symbol("_pos"),Xe=Symbol("_queue"),Fr=Symbol("_read"),jo=Symbol("_readSize"),gt=Symbol("_reading"),vn=Symbol("_remain"),Wo=Symbol("_size"),ts=Symbol("_write"),Xt=Symbol("_writing"),rs=Symbol("_defaultFlag"),ir=Symbol("_errored"),Oa=class extends cr{[ir]=!1;[U];[He];[jo];[gt]=!1;[Wo];[vn];[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[ir]=!1,this[U]=typeof e.fd=="number"?e.fd:void 0,this[He]=t,this[jo]=e.readSize||16*1024*1024,this[gt]=!1,this[Wo]=typeof e.size=="number"?e.size:1/0,this[vn]=this[Wo],this[Mt]=typeof e.autoClose=="boolean"?e.autoClose:!0,typeof this[U]=="number"?this[Fr]():this[Bt]()}get fd(){return this[U]}get path(){return this[He]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[Bt](){Re.open(this[He],"r",(t,e)=>this[zr](t,e))}[zr](t,e){t?this[Ur](t):(this[U]=e,this.emit("open",e),this[Fr]())}[la](){return Buffer.allocUnsafe(Math.min(this[jo],this[vn]))}[Fr](){if(!this[gt]){this[gt]=!0;let t=this[la]();if(t.length===0)return process.nextTick(()=>this[Ho](null,0,t));Re.read(this[U],t,0,t.length,null,(e,r,n)=>this[Ho](e,r,n))}}[Ho](t,e,r){this[gt]=!1,t?this[Ur](t):this[ca](e,r)&&this[Fr]()}[je](){if(this[Mt]&&typeof this[U]=="number"){let t=this[U];this[U]=void 0,Re.close(t,e=>e?this.emit("error",e):this.emit("close"))}}[Ur](t){this[gt]=!0,this[je](),this.emit("error",t)}[ca](t,e){let r=!1;return this[vn]-=t,t>0&&(r=super.write(t<e.length?e.subarray(0,t):e)),(t===0||this[vn]<=0)&&(r=!1,this[je](),super.end()),r}emit(t,...e){switch(t){case"prefinish":case"finish":return!1;case"drain":return typeof this[U]=="number"&&this[Fr](),!1;case"error":return this[ir]?!1:(this[ir]=!0,super.emit(t,...e));default:return super.emit(t,...e)}}},Gm=class extends Oa{[Bt](){let t=!0;try{this[zr](null,Re.openSync(this[He],"r")),t=!1}finally{t&&this[je]()}}[Fr](){let t=!0;try{if(!this[gt]){this[gt]=!0;do{let e=this[la](),r=e.length===0?0:Re.readSync(this[U],e,0,e.length,null);if(!this[ca](r,e))break}while(!0);this[gt]=!1}t=!1}finally{t&&this[je]()}}[je](){if(this[Mt]&&typeof this[U]=="number"){let t=this[U];this[U]=void 0,Re.closeSync(t),this.emit("close")}}},ws=class extends xm{readable=!1;writable=!0;[ir]=!1;[Xt]=!1;[In]=!1;[Xe]=[];[Wi]=!1;[He];[Dn];[Mt];[U];[rs];[mt];[$o]=!1;[Ct];constructor(t,e){e=e||{},super(e),this[He]=t,this[U]=typeof e.fd=="number"?e.fd:void 0,this[Dn]=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 r=this[Ct]!==void 0?"r+":"w";this[rs]=e.flags===void 0,this[mt]=e.flags===void 0?r:e.flags,this[U]===void 0&&this[Bt]()}emit(t,...e){if(t==="error"){if(this[ir])return!1;this[ir]=!0}return super.emit(t,...e)}get fd(){return this[U]}get path(){return this[He]}[Ur](t){this[je](),this[Xt]=!0,this.emit("error",t)}[Bt](){Re.open(this[He],this[mt],this[Dn],(t,e)=>this[zr](t,e))}[zr](t,e){this[rs]&&this[mt]==="r+"&&t&&t.code==="ENOENT"?(this[mt]="w",this[Bt]()):t?this[Ur](t):(this[U]=e,this.emit("open",e),this[Xt]||this[Go]())}end(t,e){return t&&this.write(t,e),this[In]=!0,!this[Xt]&&!this[Xe].length&&typeof this[U]=="number"&&this[Lr](null,0),this}write(t,e){return typeof t=="string"&&(t=Buffer.from(t,e)),this[In]?(this.emit("error",new Error("write() after end()")),!1):this[U]===void 0||this[Xt]||this[Xe].length?(this[Xe].push(t),this[Wi]=!0,!1):(this[Xt]=!0,this[ts](t),!0)}[ts](t){Re.write(this[U],t,0,t.length,this[Ct],(e,r)=>this[Lr](e,r))}[Lr](t,e){t?this[Ur](t):(this[Ct]!==void 0&&typeof e=="number"&&(this[Ct]+=e),this[Xe].length?this[Go]():(this[Xt]=!1,this[In]&&!this[$o]?(this[$o]=!0,this[je](),this.emit("finish")):this[Wi]&&(this[Wi]=!1,this.emit("drain"))))}[Go](){if(this[Xe].length===0)this[In]&&this[Lr](null,0);else if(this[Xe].length===1)this[ts](this[Xe].pop());else{let t=this[Xe];this[Xe]=[],$m(this[U],t,this[Ct],(e,r)=>this[Lr](e,r))}}[je](){if(this[Mt]&&typeof this[U]=="number"){let t=this[U];this[U]=void 0,Re.close(t,e=>e?this.emit("error",e):this.emit("close"))}}},Qd=class extends ws{[Bt](){let t;if(this[rs]&&this[mt]==="r+")try{t=Re.openSync(this[He],this[mt],this[Dn])}catch(e){if(e?.code==="ENOENT")return this[mt]="w",this[Bt]();throw e}else t=Re.openSync(this[He],this[mt],this[Dn]);this[zr](null,t)}[je](){if(this[Mt]&&typeof this[U]=="number"){let t=this[U];this[U]=void 0,Re.closeSync(t),this.emit("close")}}[ts](t){let e=!0;try{this[Lr](null,Re.writeSync(this[U],t,0,t.length,this[Ct])),e=!1}finally{if(e)try{this[je]()}catch{}}}},Wm=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"]]),qm=t=>!!t.sync&&!!t.file,Jm=t=>!t.sync&&!!t.file,Vm=t=>!!t.sync&&!t.file,Zm=t=>!t.sync&&!t.file,Km=t=>!!t.file,Xm=t=>Wm.get(t)||t,Pa=(t={})=>{if(!t)return{};let e={};for(let[r,n]of Object.entries(t)){let i=Xm(r);e[i]=n}return e.chmod===void 0&&e.noChmod===!1&&(e.chmod=!0),delete e.noChmod,e},Gn=(t,e,r,n,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=Pa(s);if(i?.(c,o),qm(c)){if(typeof a=="function")throw new TypeError("callback not supported for sync tar functions");return t(c,o)}else if(Jm(c)){let l=e(c,o);return a?l.then(()=>a(),a):l}else if(Vm(c)){if(typeof a=="function")throw new TypeError("callback not supported for sync tar functions");return r(c,o)}else if(Zm(c)){if(typeof a=="function")throw new TypeError("callback only supported with file option");return n(c,o)}throw new Error("impossible options??")},{syncFile:t,asyncFile:e,syncNoFile:r,asyncNoFile:n,validate:i}),ew=Qm.constants||{ZLIB_VERNUM:4736},rt=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},ew)),tw=sr.concat,Id=Object.getOwnPropertyDescriptor(sr,"concat"),rw=t=>t,qo=Id?.writable===!0||Id?.set!==void 0?t=>{sr.concat=t?rw:tw}:t=>{},or=Symbol("_superWrite"),qi=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"}},Jo=Symbol("flushFlag"),Ca=class extends cr{#e=!1;#r=!1;#n;#s;#i;#t;#o;get sawError(){return this.#e}get handle(){return this.#t}get flushFlag(){return this.#n}constructor(t,e){if(!t||typeof t!="object")throw new TypeError("invalid options for ZlibBase constructor");if(super(t),this.#n=t.flush??0,this.#s=t.finishFlush??0,this.#i=t.fullFlushFlag??0,typeof Sd[e]!="function")throw new TypeError("Compression method not supported: "+e);try{this.#t=new Sd[e](t)}catch(r){throw new qi(r,this.constructor)}this.#o=r=>{this.#e||(this.#e=!0,this.close(),this.emit("error",r))},this.#t?.on("error",r=>this.#o(new qi(r))),this.once("end",()=>this.close)}close(){this.#t&&(this.#t.close(),this.#t=void 0,this.emit("close"))}reset(){if(!this.#e)return da(this.#t,"zlib binding closed"),this.#t.reset?.()}flush(t){this.ended||(typeof t!="number"&&(t=this.#i),this.write(Object.assign(sr.alloc(0),{[Jo]:t})))}end(t,e,r){return typeof t=="function"&&(r=t,e=void 0,t=void 0),typeof e=="function"&&(r=e,e=void 0),t&&(e?this.write(t,e):this.write(t)),this.flush(this.#s),this.#r=!0,super.end(r)}get ended(){return this.#r}[or](t){return super.write(t)}write(t,e,r){if(typeof e=="function"&&(r=e,e="utf8"),typeof t=="string"&&(t=sr.from(t,e)),this.#e)return;da(this.#t,"zlib binding closed");let n=this.#t._handle,i=n.close;n.close=()=>{};let s=this.#t.close;this.#t.close=()=>{},qo(!0);let o;try{let c=typeof t[Jo]=="number"?t[Jo]:this.#n;o=this.#t._processChunk(t,c),qo(!1)}catch(c){qo(!1),this.#o(new qi(c,this.write))}finally{this.#t&&(this.#t._handle=n,n.close=i,this.#t.close=s,this.#t.removeAllListeners("error"))}this.#t&&this.#t.on("error",c=>this.#o(new qi(c,this.write)));let a;if(o)if(Array.isArray(o)&&o.length>0){let c=o[0];a=this[or](sr.from(c));for(let l=1;l<o.length;l++)a=this[or](o[l])}else a=this[or](sr.from(o));return r&&r(),a}},tu=class extends Ca{#e;#r;constructor(t,e){t=t||{},t.flush=t.flush||rt.Z_NO_FLUSH,t.finishFlush=t.finishFlush||rt.Z_FINISH,t.fullFlushFlag=rt.Z_FULL_FLUSH,super(t,e),this.#e=t.level,this.#r=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.#r!==e){this.flush(rt.Z_SYNC_FLUSH),da(this.handle,"zlib binding closed");let r=this.handle.flush;this.handle.flush=(n,i)=>{typeof n=="function"&&(i=n,n=this.flushFlag),this.flush(n),i?.()};try{this.handle.params(t,e)}finally{this.handle.flush=r}this.handle&&(this.#e=t,this.#r=e)}}}},nw=class extends tu{#e;constructor(t){super(t,"Gzip"),this.#e=t&&!!t.portable}[or](t){return this.#e?(this.#e=!1,t[9]=255,super[or](t)):super[or](t)}},iw=class extends tu{constructor(t){super(t,"Unzip")}},ru=class extends Ca{constructor(t,e){t=t||{},t.flush=t.flush||rt.BROTLI_OPERATION_PROCESS,t.finishFlush=t.finishFlush||rt.BROTLI_OPERATION_FINISH,t.fullFlushFlag=rt.BROTLI_OPERATION_FLUSH,super(t,e)}},sw=class extends ru{constructor(t){super(t,"BrotliCompress")}},ow=class extends ru{constructor(t){super(t,"BrotliDecompress")}},nu=class extends Ca{constructor(t,e){t=t||{},t.flush=t.flush||rt.ZSTD_e_continue,t.finishFlush=t.finishFlush||rt.ZSTD_e_end,t.fullFlushFlag=rt.ZSTD_e_flush,super(t,e)}},aw=class extends nu{constructor(t){super(t,"ZstdCompress")}},cw=class extends nu{constructor(t){super(t,"ZstdDecompress")}},lw=(t,e)=>{if(Number.isSafeInteger(t))t<0?uw(t,e):dw(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},dw=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},uw=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var n=e.length;n>1;n--){var i=t&255;t=Math.floor(t/256),r?e[n-1]=iu(i):i===0?e[n-1]=0:(r=!0,e[n-1]=su(i))}},hw=t=>{let e=t[0],r=e===128?pw(t.subarray(1,t.length)):e===255?fw(t):null;if(r===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(r))throw Error("parsed number outside of javascript safe integer range");return r},fw=t=>{for(var e=t.length,r=0,n=!1,i=e-1;i>-1;i--){var s=Number(t[i]),o;n?o=iu(s):s===0?o=s:(n=!0,o=su(s)),o!==0&&(r-=o*Math.pow(256,e-i-1))}return r},pw=t=>{for(var e=t.length,r=0,n=e-1;n>-1;n--){var i=Number(t[n]);i!==0&&(r+=i*Math.pow(256,e-n-1))}return r},iu=t=>(255^t)&255,su=t=>(255^t)+1&255,gw={};Am(gw,{code:()=>Da,isCode:()=>ns,isName:()=>mw,name:()=>ys});var ns=t=>ys.has(t),mw=t=>Da.has(t),ys=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"]]),Da=new Map(Array.from(ys).map(t=>[t[1],t[0]])),ar=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,r,n){Buffer.isBuffer(t)?this.decode(t,e||0,r,n):t&&this.#r(t)}decode(t,e,r,n){if(e||(e=0),!t||!(t.length>=e+512))throw new Error("need 512 bytes for header");this.path=r?.path??Yt(t,e,100),this.mode=r?.mode??n?.mode??Dt(t,e+100,8),this.uid=r?.uid??n?.uid??Dt(t,e+108,8),this.gid=r?.gid??n?.gid??Dt(t,e+116,8),this.size=r?.size??n?.size??Dt(t,e+124,12),this.mtime=r?.mtime??n?.mtime??Vo(t,e+136,12),this.cksum=Dt(t,e+148,12),n&&this.#r(n,!0),r&&this.#r(r);let i=Yt(t,e+156,1);if(ns(i)&&(this.#e=i||"0"),this.#e==="0"&&this.path.slice(-1)==="/"&&(this.#e="5"),this.#e==="5"&&(this.size=0),this.linkpath=Yt(t,e+157,100),t.subarray(e+257,e+265).toString()==="ustar\x0000")if(this.uname=r?.uname??n?.uname??Yt(t,e+265,32),this.gname=r?.gname??n?.gname??Yt(t,e+297,32),this.devmaj=r?.devmaj??n?.devmaj??Dt(t,e+329,8)??0,this.devmin=r?.devmin??n?.devmin??Dt(t,e+337,8)??0,t[e+475]!==0){let o=Yt(t,e+345,155);this.path=o+"/"+this.path}else{let o=Yt(t,e+345,130);o&&(this.path=o+"/"+this.path),this.atime=r?.atime??n?.atime??Vo(t,e+476,12),this.ctime=r?.ctime??n?.ctime??Vo(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)}#r(t,e=!1){Object.assign(this,Object.fromEntries(Object.entries(t).filter(([r,n])=>!(n==null||r==="path"&&e||r==="linkpath"&&e||r==="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 r=this.ctime||this.atime?130:155,n=ww(this.path||"",r),i=n[0],s=n[1];this.needPax=!!n[2],this.needPax=Qt(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=Zo(t,e+136,12,this.mtime)||this.needPax,t[e+156]=Number(this.#e.codePointAt(0)),this.needPax=Qt(t,e+157,100,this.linkpath)||this.needPax,t.write("ustar\x0000",e+257,8),this.needPax=Qt(t,e+265,32,this.uname)||this.needPax,this.needPax=Qt(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=Qt(t,e+345,r,s)||this.needPax,t[e+475]!==0?this.needPax=Qt(t,e+345,155,s)||this.needPax:(this.needPax=Qt(t,e+345,130,s)||this.needPax,this.needPax=Zo(t,e+476,12,this.atime)||this.needPax,this.needPax=Zo(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:ys.get(this.#e)}get typeKey(){return this.#e}set type(t){let e=String(Da.get(t));if(ns(e)||e==="Unsupported")this.#e=e;else if(ns(t))this.#e=t;else throw new TypeError("invalid entry type: "+t)}},ww=(t,e)=>{let r=t,n="",i,s=Or.parse(t).root||".";if(Buffer.byteLength(r)<100)i=[r,n,!1];else{n=Or.dirname(r),r=Or.basename(r);do Buffer.byteLength(r)<=100&&Buffer.byteLength(n)<=e?i=[r,n,!1]:Buffer.byteLength(r)>100&&Buffer.byteLength(n)<=e?i=[r.slice(0,99),n,!0]:(r=Or.join(Or.basename(n),r),n=Or.dirname(n));while(n!==s&&i===void 0);i||(i=[t.slice(0,99),"",!0])}return i},Yt=(t,e,r)=>t.subarray(e,e+r).toString("utf8").replace(/\0.*/,""),Vo=(t,e,r)=>yw(Dt(t,e,r)),yw=t=>t===void 0?void 0:new Date(t*1e3),Dt=(t,e,r)=>Number(t[e])&128?hw(t.subarray(e,e+r)):Ew(t,e,r),_w=t=>isNaN(t)?void 0:t,Ew=(t,e,r)=>_w(parseInt(t.subarray(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),Sw={12:8589934591,8:2097151},Nt=(t,e,r,n)=>n===void 0?!1:n>Sw[r]||n<0?(lw(n,t.subarray(e,e+r)),!0):(Iw(t,e,r,n),!1),Iw=(t,e,r,n)=>t.write(vw(n,r),e,r,"ascii"),vw=(t,e)=>Tw(Math.floor(t).toString(8),e),Tw=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",Zo=(t,e,r,n)=>n===void 0?!1:Nt(t,e,r,n.getTime()/1e3),Rw=new Array(156).join("\0"),Qt=(t,e,r,n)=>n===void 0?!1:(t.write(n+Rw,e,r,"utf8"),n.length!==Buffer.byteLength(n)||n.length>r),hs=class ou{atime;mtime;ctime;charset;comment;gid;uid;gname;uname;linkpath;dev;ino;nlink;path;size;mode;global;constructor(e,r=!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=r,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 r=Buffer.byteLength(e),n=512*Math.ceil(1+r/512),i=Buffer.allocUnsafe(n);for(let s=0;s<512;s++)i[s]=0;new ar({path:("PaxHeader/"+kw(this.path??"")).slice(0,99),mode:this.mode||420,uid:this.uid,gid:this.gid,size:r,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,r,"utf8");for(let s=r+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 r=this[e],n=r instanceof Date?r.getTime()/1e3:r,i=" "+(e==="dev"||e==="ino"||e==="nlink"?"SCHILY.":"")+e+"="+n+`
|
|
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,r,n=!1){return new ou(bw(Aw(e),r),n)}},bw=(t,e)=>e?Object.assign({},e,t):t,Aw=t=>t.replace(/\n$/,"").split(`
|
|
83
|
-
`).reduce(xw,Object.create(null)),xw=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.slice((r+" ").length);let n=e.split("="),i=n.shift();if(!i)return t;let s=i.replace(/^SCHILY\.(dev|ino|nlink)/,"$1"),o=n.join("=");return t[s]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(s)?new Date(Number(o)*1e3):/^[0-9]+$/.test(o)?+o:o,t},Ow=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,D=Ow!=="win32"?t=>t:t=>t&&t.replaceAll(/\\/g,"/"),au=class extends cr{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,r){switch(super({}),this.pause(),this.extended=e,this.globalExtended=r,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=D(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?D(t.linkpath):void 0,this.uname=t.uname,this.gname=t.gname,e&&this.#e(e),r&&this.#e(r,!0)}write(t){let e=t.length;if(e>this.blockRemain)throw new Error("writing more to entry than is appropriate");let r=this.remain,n=this.blockRemain;return this.remain=Math.max(0,r-e),this.blockRemain=Math.max(0,n-e),this.ignore?!0:r>=e?super.write(t):super.write(t.subarray(0,r))}#e(t,e=!1){t.path&&(t.path=D(t.path)),t.linkpath&&(t.linkpath=D(t.linkpath)),Object.assign(this,Object.fromEntries(Object.entries(t).filter(([r,n])=>!(n==null||r==="path"&&e))))}},_s=(t,e,r,n={})=>{t.file&&(n.file=t.file),t.cwd&&(n.cwd=t.cwd),n.code=r instanceof Error&&r.code||e,n.tarCode=e,!t.strict&&n.recoverable!==!1?(r instanceof Error&&(n=Object.assign(r,n),r=r.message),t.emit("warn",e,r,n)):r instanceof Error?t.emit("error",Object.assign(r,n)):t.emit("error",Object.assign(new Error(`${e}: ${r}`),n))},Pw=1024*1024,ua=Buffer.from([31,139]),ha=Buffer.from([40,181,47,253]),Cw=Math.max(ua.length,ha.length),Ne=Symbol("state"),er=Symbol("writeEntry"),ft=Symbol("readEntry"),Ko=Symbol("nextEntry"),vd=Symbol("processEntry"),Ye=Symbol("extendedHeader"),Tn=Symbol("globalExtendedHeader"),At=Symbol("meta"),Td=Symbol("emitMeta"),H=Symbol("buffer"),pt=Symbol("queue"),xt=Symbol("ended"),Xo=Symbol("emittedEnd"),tr=Symbol("emit"),Q=Symbol("unzip"),Ji=Symbol("consumeChunk"),Vi=Symbol("consumeChunkSub"),Yo=Symbol("consumeBody"),Rd=Symbol("consumeMeta"),kd=Symbol("consumeHeader"),Rn=Symbol("consuming"),Qo=Symbol("bufferConcat"),Zi=Symbol("maybeEnd"),Pr=Symbol("writing"),Ot=Symbol("aborted"),Ki=Symbol("onDone"),rr=Symbol("sawValidEntry"),Xi=Symbol("sawNullBlock"),Yi=Symbol("sawEOF"),bd=Symbol("closeStream"),Dw=()=>!0,$n=class extends Ym{file;strict;maxMetaEntrySize;filter;brotli;zstd;writable=!0;readable=!1;[pt]=[];[H];[ft];[er];[Ne]="begin";[At]="";[Ye];[Tn];[xt]=!1;[Q];[Ot]=!1;[rr];[Xi]=!1;[Yi]=!1;[Pr]=!1;[Rn]=!1;[Xo]=!1;constructor(t={}){super(),this.file=t.file||"",this.on(Ki,()=>{(this[Ne]==="begin"||this[rr]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),t.ondone?this.on(Ki,t.ondone):this.on(Ki,()=>{this.emit("prefinish"),this.emit("finish"),this.emit("end")}),this.strict=!!t.strict,this.maxMetaEntrySize=t.maxMetaEntrySize||Pw,this.filter=typeof t.filter=="function"?t.filter:Dw;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 r=t.file&&(t.file.endsWith(".tar.zst")||t.file.endsWith(".tzst"));this.zstd=!(t.gzip||t.brotli)&&t.zstd!==void 0?t.zstd:r?!0:void 0,this.on("end",()=>this[bd]()),typeof t.onwarn=="function"&&this.on("warn",t.onwarn),typeof t.onReadEntry=="function"&&this.on("entry",t.onReadEntry)}warn(t,e,r={}){_s(this,t,e,r)}[kd](t,e){this[rr]===void 0&&(this[rr]=!1);let r;try{r=new ar(t,e,this[Ye],this[Tn])}catch(n){return this.warn("TAR_ENTRY_INVALID",n)}if(r.nullBlock)this[Xi]?(this[Yi]=!0,this[Ne]==="begin"&&(this[Ne]="header"),this[tr]("eof")):(this[Xi]=!0,this[tr]("nullBlock"));else if(this[Xi]=!1,!r.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:r});else if(!r.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:r});else{let n=r.type;if(/^(Symbolic)?Link$/.test(n)&&!r.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:r});else if(!/^(Symbolic)?Link$/.test(n)&&!/^(Global)?ExtendedHeader$/.test(n)&&r.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:r});else{let i=this[er]=new au(r,this[Ye],this[Tn]);if(!this[rr])if(i.remain){let s=()=>{i.invalid||(this[rr]=!0)};i.on("end",s)}else this[rr]=!0;i.meta?i.size>this.maxMetaEntrySize?(i.ignore=!0,this[tr]("ignoredEntry",i),this[Ne]="ignore",i.resume()):i.size>0&&(this[At]="",i.on("data",s=>this[At]+=s),this[Ne]="meta"):(this[Ye]=void 0,i.ignore=i.ignore||!this.filter(i.path,i),i.ignore?(this[tr]("ignoredEntry",i),this[Ne]=i.remain?"ignore":"header",i.resume()):(i.remain?this[Ne]="body":(this[Ne]="header",i.end()),this[ft]?this[pt].push(i):(this[pt].push(i),this[Ko]())))}}}[bd](){queueMicrotask(()=>this.emit("close"))}[vd](t){let e=!0;if(!t)this[ft]=void 0,e=!1;else if(Array.isArray(t)){let[r,...n]=t;this.emit(r,...n)}else this[ft]=t,this.emit("entry",t),t.emittedEnd||(t.on("end",()=>this[Ko]()),e=!1);return e}[Ko](){do;while(this[vd](this[pt].shift()));if(this[pt].length===0){let t=this[ft];!t||t.flowing||t.size===t.remain?this[Pr]||this.emit("drain"):t.once("drain",()=>this.emit("drain"))}}[Yo](t,e){let r=this[er];if(!r)throw new Error("attempt to consume body without entry??");let n=r.blockRemain??0,i=n>=t.length&&e===0?t:t.subarray(e,e+n);return r.write(i),r.blockRemain||(this[Ne]="header",this[er]=void 0,r.end()),i.length}[Rd](t,e){let r=this[er],n=this[Yo](t,e);return!this[er]&&r&&this[Td](r),n}[tr](t,e,r){this[pt].length===0&&!this[ft]?this.emit(t,e,r):this[pt].push([t,e,r])}[Td](t){switch(this[tr]("meta",this[At]),t.type){case"ExtendedHeader":case"OldExtendedHeader":this[Ye]=hs.parse(this[At],this[Ye],!1);break;case"GlobalExtendedHeader":this[Tn]=hs.parse(this[At],this[Tn],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":{let e=this[Ye]??Object.create(null);this[Ye]=e,e.path=this[At].replace(/\0.*/,"");break}case"NextFileHasLongLinkpath":{let e=this[Ye]||Object.create(null);this[Ye]=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,r){if(typeof e=="function"&&(r=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,typeof e=="string"?e:"utf8")),this[Ot])return r?.(),!1;if((this[Q]===void 0||this.brotli===void 0&&this[Q]===!1)&&t){if(this[H]&&(t=Buffer.concat([this[H],t]),this[H]=void 0),t.length<Cw)return this[H]=t,r?.(),!0;for(let o=0;this[Q]===void 0&&o<ua.length;o++)t[o]!==ua[o]&&(this[Q]=!1);let i=!1;if(this[Q]===!1&&this.zstd!==!1){i=!0;for(let o=0;o<ha.length;o++)if(t[o]!==ha[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[H]=t,r?.(),!0;else try{new ar(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 iw({}):i?new cw({}):new ow({}),this[Q].on("data",c=>this[Ji](c)),this[Q].on("error",c=>this.abort(c)),this[Q].on("end",()=>{this[xt]=!0,this[Ji]()}),this[Pr]=!0;let a=!!this[Q][o?"end":"write"](t);return this[Pr]=!1,r?.(),a}}this[Pr]=!0,this[Q]?this[Q].write(t):this[Ji](t),this[Pr]=!1;let n=this[pt].length>0?!1:this[ft]?this[ft].flowing:!0;return!n&&this[pt].length===0&&this[ft]?.once("drain",()=>this.emit("drain")),r?.(),n}[Qo](t){t&&!this[Ot]&&(this[H]=this[H]?Buffer.concat([this[H],t]):t)}[Zi](){if(this[xt]&&!this[Xo]&&!this[Ot]&&!this[Rn]){this[Xo]=!0;let t=this[er];if(t&&t.blockRemain){let e=this[H]?this[H].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${t.blockRemain} more bytes, only ${e} available)`,{entry:t}),this[H]&&t.write(this[H]),t.end()}this[tr](Ki)}}[Ji](t){if(this[Rn]&&t)this[Qo](t);else if(!t&&!this[H])this[Zi]();else if(t){if(this[Rn]=!0,this[H]){this[Qo](t);let e=this[H];this[H]=void 0,this[Vi](e)}else this[Vi](t);for(;this[H]&&this[H]?.length>=512&&!this[Ot]&&!this[Yi];){let e=this[H];this[H]=void 0,this[Vi](e)}this[Rn]=!1}(!this[H]||this[xt])&&this[Zi]()}[Vi](t){let e=0,r=t.length;for(;e+512<=r&&!this[Ot]&&!this[Yi];)switch(this[Ne]){case"begin":case"header":this[kd](t,e),e+=512;break;case"ignore":case"body":e+=this[Yo](t,e);break;case"meta":e+=this[Rd](t,e);break;default:throw new Error("invalid state: "+this[Ne])}e<r&&(this[H]=this[H]?Buffer.concat([t.subarray(e),this[H]]):t.subarray(e))}end(t,e,r){return typeof t=="function"&&(r=t,e=void 0,t=void 0),typeof e=="function"&&(r=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,e)),r&&this.once("finish",r),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[Zi]())),this}},Nn=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)},Nw=t=>{let e=t.onReadEntry;t.onReadEntry=e?r=>{e(r),r.resume()}:r=>r.resume()},cu=(t,e)=>{let r=new Map(e.map(s=>[Nn(s),!0])),n=t.filter,i=(s,o="")=>{let a=o||jm(s).root||".",c;if(s===a)c=!1;else{let l=r.get(s);c=l!==void 0?l:i(Hm(s),a)}return r.set(s,c),c};t.filter=n?(s,o)=>n(s,o)&&i(Nn(s)):s=>i(Nn(s))},Lw=t=>{let e=new $n(t),r=t.file,n;try{n=Mr.openSync(r,"r");let i=Mr.fstatSync(n),s=t.maxReadSize||16*1024*1024;if(i.size<s){let o=Buffer.allocUnsafe(i.size),a=Mr.readSync(n,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=Mr.readSync(n,a,0,s,o);if(c===0)break;o+=c,e.write(a.subarray(0,c))}e.end()}}finally{if(typeof n=="number")try{Mr.closeSync(n)}catch{}}},Fw=(t,e)=>{let r=new $n(t),n=t.maxReadSize||16*1024*1024,i=t.file;return new Promise((s,o)=>{r.on("error",o),r.on("end",s),Mr.stat(i,(a,c)=>{if(a)o(a);else{let l=new Oa(i,{readSize:n,size:c.size});l.on("error",o),l.pipe(r)}})})},$r=Gn(Lw,Fw,t=>new $n(t),t=>new $n(t),(t,e)=>{e?.length&&cu(t,e),t.noResume||Nw(t)}),lu=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t),{isAbsolute:Bw,parse:xd}=Mw,Na=t=>{let e="",r=xd(t);for(;Bw(t)||r.root;){let n=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.slice(n.length),e+=n,r=xd(t)}return[e,t]},Es=["|","<",">","?",":"],La=Es.map(t=>String.fromCodePoint(61440+Number(t.codePointAt(0)))),Uw=new Map(Es.map((t,e)=>[t,La[e]])),zw=new Map(La.map((t,e)=>[t,Es[e]])),Od=t=>Es.reduce((e,r)=>e.split(r).join(Uw.get(r)),t),$w=t=>La.reduce((e,r)=>e.split(r).join(zw.get(r)),t),du=(t,e)=>e?(t=D(t).replace(/^\.(\/|$)/,""),Nn(e)+"/"+t):D(t),Gw=16*1024*1024,Pd=Symbol("process"),Cd=Symbol("file"),Dd=Symbol("directory"),fa=Symbol("symlink"),Nd=Symbol("hardlink"),kn=Symbol("header"),is=Symbol("read"),pa=Symbol("lstat"),ss=Symbol("onlstat"),ga=Symbol("onread"),ma=Symbol("onreadlink"),wa=Symbol("openfile"),ya=Symbol("onopenfile"),Lt=Symbol("close"),ps=Symbol("mode"),_a=Symbol("awaitDrain"),ea=Symbol("ondrain"),et=Symbol("prefix"),uu=class extends cr{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 r=Pa(e);super(),this.path=D(t),this.portable=!!r.portable,this.maxReadSize=r.maxReadSize||Gw,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=D(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime,this.prefix=r.prefix?D(r.prefix):void 0,this.onWriteEntry=r.onWriteEntry,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let n=!1;if(!this.preservePaths){let[s,o]=Na(this.path);s&&typeof o=="string"&&(this.path=o,n=s)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=$w(this.path.replaceAll(/\\/g,"/")),t=t.replaceAll(/\\/g,"/")),this.absolute=D(r.absolute||Ad.resolve(this.cwd,t)),this.path===""&&(this.path="./"),n&&this.warn("TAR_ENTRY_INFO",`stripping ${n} from absolute path`,{entry:this,path:n+this.path});let i=this.statCache.get(this.absolute);i?this[ss](i):this[pa]()}warn(t,e,r={}){return _s(this,t,e,r)}emit(t,...e){return t==="error"&&(this.#e=!0),super.emit(t,...e)}[pa](){Qe.lstat(this.absolute,(t,e)=>{if(t)return this.emit("error",t);this[ss](e)})}[ss](t){this.statCache.set(this.absolute,t),this.stat=t,t.isFile()||(t.size=0),this.type=Ww(t),this.emit("stat",t),this[Pd]()}[Pd](){switch(this.type){case"File":return this[Cd]();case"Directory":return this[Dd]();case"SymbolicLink":return this[fa]();default:return this.end()}}[ps](t){return lu(t,this.type==="Directory",this.portable)}[et](t){return du(t,this.prefix)}[kn](){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 ar({path:this[et](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[et](this.linkpath):this.linkpath,mode:this[ps](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 hs({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[et](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[et](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)}[Dd](){if(!this.stat)throw new Error("cannot create directory entry without stat");this.path.slice(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[kn](),this.end()}[fa](){Qe.readlink(this.absolute,(t,e)=>{if(t)return this.emit("error",t);this[ma](e)})}[ma](t){this.linkpath=D(t),this[kn](),this.end()}[Nd](t){if(!this.stat)throw new Error("cannot create link entry without stat");this.type="Link",this.linkpath=D(Ad.relative(this.cwd,t)),this.stat.size=0,this[kn](),this.end()}[Cd](){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[Nd](e);this.linkCache.set(t,this.absolute)}if(this[kn](),this.stat.size===0)return this.end();this[wa]()}[wa](){Qe.open(this.absolute,"r",(t,e)=>{if(t)return this.emit("error",t);this[ya](e)})}[ya](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[is]()}[is](){let{fd:t,buf:e,offset:r,length:n,pos:i}=this;if(t===void 0||e===void 0)throw new Error("cannot read file without first opening");Qe.read(t,e,r,n,i,(s,o)=>{if(s)return this[Lt](()=>this.emit("error",s));this[ga](o)})}[Lt](t=()=>{}){this.fd!==void 0&&Qe.close(this.fd,t)}[ga](t){if(t<=0&&this.remain>0){let r=Object.assign(new Error("encountered unexpected EOF"),{path:this.absolute,syscall:"read",code:"EOF"});return this[Lt](()=>this.emit("error",r))}if(t>this.remain){let r=Object.assign(new Error("did not encounter expected EOF"),{path:this.absolute,syscall:"read",code:"EOF"});return this[Lt](()=>this.emit("error",r))}if(!this.buf)throw new Error("should have created buffer prior to reading");if(t===this.remain)for(let r=t;r<this.length&&t<this.blockRemain;r++)this.buf[r+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[ea]():this[_a](()=>this[ea]())}[_a](t){this.once("drain",t)}write(t,e,r){if(typeof e=="function"&&(r=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,typeof e=="string"?e:"utf8")),this.blockRemain<t.length){let n=Object.assign(new Error("writing more data than expected"),{path:this.absolute});return this.emit("error",n)}return this.remain-=t.length,this.blockRemain-=t.length,this.pos+=t.length,this.offset+=t.length,super.write(t,null,r)}[ea](){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[is]()}},Hw=class extends uu{sync=!0;[pa](){this[ss](Qe.lstatSync(this.absolute))}[fa](){this[ma](Qe.readlinkSync(this.absolute))}[wa](){this[ya](Qe.openSync(this.absolute,"r"))}[is](){let t=!0;try{let{fd:e,buf:r,offset:n,length:i,pos:s}=this;if(e===void 0||r===void 0)throw new Error("fd and buf must be set in READ method");let o=Qe.readSync(e,r,n,i,s);this[ga](o),t=!1}finally{if(t)try{this[Lt](()=>{})}catch{}}}[_a](t){t()}[Lt](t=()=>{}){this.fd!==void 0&&Qe.closeSync(this.fd),t()}},jw=class extends cr{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,r={}){return _s(this,t,e,r)}constructor(t,e={}){let r=Pa(e);super(),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.onWriteEntry=r.onWriteEntry,this.readEntry=t;let{type:n}=t;if(n==="Unsupported")throw new Error("writing entry that should be ignored");this.type=n,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=r.prefix,this.path=D(t.path),this.mode=t.mode!==void 0?this[ps](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:r.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?D(t.linkpath):void 0,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let i=!1;if(!this.preservePaths){let[o,a]=Na(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 ar({path:this[et](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[et](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 hs({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[et](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[et](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)}[et](t){return du(t,this.prefix)}[ps](t){return lu(t,this.type==="Directory",this.portable)}write(t,e,r){typeof e=="function"&&(r=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,typeof e=="string"?e:"utf8"));let n=t.length;if(n>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=n,super.write(t,r)}end(t,e,r){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),typeof t=="function"&&(r=t,e=void 0,t=void 0),typeof e=="function"&&(r=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,e??"utf8")),r&&this.once("finish",r),t?super.end(t,r):super.end(r),this}},Ww=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported",qw=class Br{tail;head;length=0;static create(e=[]){return new Br(e)}constructor(e=[]){for(let r of e)this.push(r)}*[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 r=e.next,n=e.prev;return r&&(r.prev=n),n&&(n.next=r),e===this.head&&(this.head=r),e===this.tail&&(this.tail=n),this.length--,e.next=void 0,e.prev=void 0,e.list=void 0,r}unshiftNode(e){if(e===this.head)return;e.list&&e.list.removeNode(e);let r=this.head;e.list=this,e.next=r,r&&(r.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 r=this.tail;e.list=this,e.prev=r,r&&(r.next=e),this.tail=e,this.head||(this.head=e),this.length++}push(...e){for(let r=0,n=e.length;r<n;r++)Vw(this,e[r]);return this.length}unshift(...e){for(var r=0,n=e.length;r<n;r++)Zw(this,e[r]);return this.length}pop(){if(!this.tail)return;let e=this.tail.value,r=this.tail;return this.tail=this.tail.prev,this.tail?this.tail.next=void 0:this.head=void 0,r.list=void 0,this.length--,e}shift(){if(!this.head)return;let e=this.head.value,r=this.head;return this.head=this.head.next,this.head?this.head.prev=void 0:this.tail=void 0,r.list=void 0,this.length--,e}forEach(e,r){r=r||this;for(let n=this.head,i=0;n;i++)e.call(r,n.value,i,this),n=n.next}forEachReverse(e,r){r=r||this;for(let n=this.tail,i=this.length-1;n;i--)e.call(r,n.value,i,this),n=n.prev}get(e){let r=0,n=this.head;for(;n&&r<e;r++)n=n.next;if(r===e&&n)return n.value}getReverse(e){let r=0,n=this.tail;for(;n&&r<e;r++)n=n.prev;if(r===e&&n)return n.value}map(e,r){r=r||this;let n=new Br;for(let i=this.head;i;)n.push(e.call(r,i.value,this)),i=i.next;return n}mapReverse(e,r){r=r||this;var n=new Br;for(let i=this.tail;i;)n.push(e.call(r,i.value,this)),i=i.prev;return n}reduce(e,r){let n,i=this.head;if(arguments.length>1)n=r;else if(this.head)i=this.head.next,n=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var s=0;i;s++)n=e(n,i.value,s),i=i.next;return n}reduceReverse(e,r){let n,i=this.tail;if(arguments.length>1)n=r;else if(this.tail)i=this.tail.prev,n=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(let s=this.length-1;i;s--)n=e(n,i.value,s),i=i.prev;return n}toArray(){let e=new Array(this.length);for(let r=0,n=this.head;n;r++)e[r]=n.value,n=n.next;return e}toArrayReverse(){let e=new Array(this.length);for(let r=0,n=this.tail;n;r++)e[r]=n.value,n=n.prev;return e}slice(e=0,r=this.length){r<0&&(r+=this.length),e<0&&(e+=this.length);let n=new Br;if(r<e||r<0)return n;e<0&&(e=0),r>this.length&&(r=this.length);let i=this.head,s=0;for(s=0;i&&s<e;s++)i=i.next;for(;i&&s<r;s++,i=i.next)n.push(i.value);return n}sliceReverse(e=0,r=this.length){r<0&&(r+=this.length),e<0&&(e+=this.length);let n=new Br;if(r<e||r<0)return n;e<0&&(e=0),r>this.length&&(r=this.length);let i=this.length,s=this.tail;for(;s&&i>r;i--)s=s.prev;for(;s&&i>e;i--,s=s.prev)n.push(s.value);return n}splice(e,r=0,...n){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<r;o++)s.push(i.value),i=this.removeNode(i);i?i!==this.tail&&(i=i.prev):i=this.tail;for(let o of n)i=Jw(this,i,o);return s}reverse(){let e=this.head,r=this.tail;for(let n=e;n;n=n.prev){let i=n.prev;n.prev=n.next,n.next=i}return this.head=r,this.tail=e,this}};function Jw(t,e,r){let n=e,i=e?e.next:t.head,s=new Fa(r,n,i,t);return s.next===void 0&&(t.tail=s),s.prev===void 0&&(t.head=s),t.length++,s}function Vw(t,e){t.tail=new Fa(e,t.tail,void 0,t),t.head||(t.head=t.tail),t.length++}function Zw(t,e){t.head=new Fa(e,void 0,t.head,t),t.tail||(t.tail=t.head),t.length++}var Fa=class{list;next;prev;value;constructor(t,e,r,n){this.list=n,this.value=t,e?(e.next=this,this.prev=e):this.prev=void 0,r?(r.prev=this,this.next=r):this.next=void 0}},Fd=class{path;absolute;entry;stat;readdir;pending=!1;pendingLink=!1;ignore=!1;piped=!1;constructor(t,e){this.path=t||"./",this.absolute=e}},Md=Buffer.alloc(1024),os=Symbol("onStat"),bn=Symbol("ended"),$e=Symbol("queue"),An=Symbol("queue"),Pt=Symbol("current"),nr=Symbol("process"),xn=Symbol("processing"),Qi=Symbol("processJob"),Ge=Symbol("jobs"),ta=Symbol("jobDone"),as=Symbol("addFSEntry"),Bd=Symbol("addTarEntry"),Ea=Symbol("stat"),Sa=Symbol("readdir"),cs=Symbol("onreaddir"),ls=Symbol("pipe"),Ud=Symbol("entry"),ra=Symbol("entryOpt"),ds=Symbol("writeEntryClass"),hu=Symbol("write"),na=Symbol("ondrain"),Ss=class extends cr{sync=!1;opt;cwd;maxReadSize;preservePaths;strict;noPax;prefix;linkCache;statCache;file;portable;zip;readdirCache;noDirRecurse;follow;noMtime;mtime;filter;jobs;[ds];onWriteEntry;[$e];[An]=new Map;[Ge]=0;[xn]=!1;[bn]=!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=D(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[ds]=uu,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 nw(t.gzip)),t.brotli&&(typeof t.brotli!="object"&&(t.brotli={}),this.zip=new sw(t.brotli)),t.zstd&&(typeof t.zstd!="object"&&(t.zstd={}),this.zip=new aw(t.zstd)),!this.zip)throw new Error("impossible");let e=this.zip;e.on("data",r=>super.write(r)),e.on("end",()=>super.end()),e.on("drain",()=>this[na]()),this.on("resume",()=>e.resume())}else this.on("drain",this[na]);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[$e]=new qw,this[Ge]=0,this.jobs=Number(t.jobs)||4,this[xn]=!1,this[bn]=!1}[hu](t){return super.write(t)}add(t){return this.write(t),this}end(t,e,r){return typeof t=="function"&&(r=t,t=void 0),typeof e=="function"&&(r=e,e=void 0),t&&this.add(t),this[bn]=!0,this[nr](),r&&r(),this}write(t){if(this[bn])throw new Error("write after end");return t instanceof au?this[Bd](t):this[as](t),this.flowing}[Bd](t){let e=D(Ld.resolve(this.cwd,t.path));if(!this.filter(t.path,t))t.resume();else{let r=new Fd(t.path,e);r.entry=new jw(t,this[ra](r)),r.entry.on("end",()=>this[ta](r)),this[Ge]+=1,this[$e].push(r)}this[nr]()}[as](t){let e=D(Ld.resolve(this.cwd,t));this[$e].push(new Fd(t,e)),this[nr]()}[Ea](t){t.pending=!0,this[Ge]+=1;let e=this.follow?"stat":"lstat";fs[e](t.absolute,(r,n)=>{t.pending=!1,this[Ge]-=1,r?this.emit("error",r):this[os](t,n)})}[os](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[Qi](t);else{let r=`${e.dev}:${e.ino}`,n=this[An].get(r);n?n.push(t):this[An].set(r,[t]),t.pendingLink=!0,t.pending=!0}this[nr]()}[Sa](t){t.pending=!0,this[Ge]+=1,fs.readdir(t.absolute,(e,r)=>{if(t.pending=!1,this[Ge]-=1,e)return this.emit("error",e);this[cs](t,r)})}[cs](t,e){this.readdirCache.set(t.absolute,e),t.readdir=e,this[nr]()}[nr](){if(!this[xn]){this[xn]=!0;for(let t=this[$e].head;t&&this[Ge]<this.jobs;t=t.next)if(this[Qi](t.value),t.value.ignore){let e=t.next;this[$e].removeNode(t),t.next=e}this[xn]=!1,this[bn]&&this[$e].length===0&&this[Ge]===0&&(this.zip?this.zip.end(Md):(super.write(Md),super.end()))}}get[Pt](){return this[$e]&&this[$e].head&&this[$e].head.value}[ta](t){this[$e].shift(),this[Ge]-=1;let{stat:e}=t;if(e&&e.isFile()&&e.nlink>1){let r=`${e.dev}:${e.ino}`,n=this[An].get(r);if(n){this[An].delete(r);for(let i of n)i.pending=!1,this[Qi](i)}}this[nr]()}[Qi](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[ls](t);return}if(!t.stat){let e=this.statCache.get(t.absolute);e?this[os](t,e):this[Ea](t)}if(t.stat&&!t.ignore){if(!this.noDirRecurse&&t.stat.isDirectory()&&!t.readdir){let e=this.readdirCache.get(t.absolute);if(e?this[cs](t,e):this[Sa](t),!t.readdir)return}if(t.entry=this[Ud](t),!t.entry){t.ignore=!0;return}t===this[Pt]&&!t.piped&&this[ls](t)}}}[ra](t){return{onwarn:(e,r,n)=>this.warn(e,r,n),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}}[Ud](t){this[Ge]+=1;try{return new this[ds](t.path,this[ra](t)).on("end",()=>this[ta](t)).on("error",e=>this.emit("error",e))}catch(e){this.emit("error",e)}}[na](){this[Pt]&&this[Pt].entry&&this[Pt].entry.resume()}[ls](t){t.piped=!0,t.readdir&&t.readdir.forEach(n=>{let i=t.path,s=i==="./"?"":i.replace(/\/*$/,"/");this[as](s+n)});let e=t.entry,r=this.zip;if(!e)throw new Error("cannot pipe without source");r?e.on("data",n=>{r.write(n)||e.pause()}):e.on("data",n=>{super.write(n)||e.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}warn(t,e,r={}){_s(this,t,e,r)}},Ma=class extends Ss{sync=!0;constructor(t){super(t),this[ds]=Hw}pause(){}resume(){}[Ea](t){let e=this.follow?"statSync":"lstatSync";this[os](t,fs[e](t.absolute))}[Sa](t){this[cs](t,fs.readdirSync(t.absolute))}[ls](t){let e=t.entry,r=this.zip;if(t.readdir&&t.readdir.forEach(n=>{let i=t.path,s=i==="./"?"":i.replace(/\/*$/,"/");this[as](s+n)}),!e)throw new Error("Cannot pipe without source");r?e.on("data",n=>{r.write(n)}):e.on("data",n=>{super[hu](n)})}},Kw=(t,e)=>{let r=new Ma(t),n=new Qd(t.file,{mode:t.mode||438});r.pipe(n),fu(r,e)},Xw=(t,e)=>{let r=new Ss(t),n=new ws(t.file,{mode:t.mode||438});r.pipe(n);let i=new Promise((s,o)=>{n.on("error",o),n.on("close",s),r.on("error",o)});return pu(r,e).catch(s=>r.emit("error",s)),i},fu=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?$r({file:eu.resolve(t.cwd,r.slice(1)),sync:!0,noResume:!0,onReadEntry:n=>t.add(n)}):t.add(r)}),t.end()},pu=async(t,e)=>{for(let r of e)r.charAt(0)==="@"?await $r({file:eu.resolve(String(t.cwd),r.slice(1)),noResume:!0,onReadEntry:n=>{t.add(n)}}):t.add(r);t.end()},Yw=(t,e)=>{let r=new Ma(t);return fu(r,e),r},Qw=(t,e)=>{let r=new Ss(t);return pu(r,e).catch(n=>r.emit("error",n)),r},TR=Gn(Kw,Xw,Yw,Qw,(t,e)=>{if(!e?.length)throw new TypeError("no paths specified to add to archive")}),ty=process.env.__FAKE_PLATFORM__||process.platform,yu=ty==="win32",{O_CREAT:_u,O_NOFOLLOW:zd,O_TRUNC:Eu,O_WRONLY:Su}=wu.constants,Iu=Number(process.env.__FAKE_FS_O_FILENAME__)||wu.constants.UV_FS_O_FILEMAP||0,ry=yu&&!!Iu,ny=512*1024,iy=Iu|Eu|_u|Su,$d=!yu&&typeof zd=="number"?zd|Eu|_u|Su:null,vu=$d!==null?()=>$d:ry?t=>t<ny?iy:"w":()=>"w",Ia=(t,e,r)=>{try{return Is.lchownSync(t,e,r)}catch(n){if(n?.code!=="ENOENT")throw n}},gs=(t,e,r,n)=>{Is.lchown(t,e,r,i=>{n(i&&i?.code!=="ENOENT"?i:null)})},sy=(t,e,r,n,i)=>{if(e.isDirectory())Tu(Ln.resolve(t,e.name),r,n,s=>{if(s)return i(s);let o=Ln.resolve(t,e.name);gs(o,r,n,i)});else{let s=Ln.resolve(t,e.name);gs(s,r,n,i)}},Tu=(t,e,r,n)=>{Is.readdir(t,{withFileTypes:!0},(i,s)=>{if(i){if(i.code==="ENOENT")return n();if(i.code!=="ENOTDIR"&&i.code!=="ENOTSUP")return n(i)}if(i||!s.length)return gs(t,e,r,n);let o=s.length,a=null,c=l=>{if(!a){if(l)return n(a=l);if(--o===0)return gs(t,e,r,n)}};for(let l of s)sy(t,l,e,r,c)})},oy=(t,e,r,n)=>{e.isDirectory()&&Ru(Ln.resolve(t,e.name),r,n),Ia(Ln.resolve(t,e.name),r,n)},Ru=(t,e,r)=>{let n;try{n=Is.readdirSync(t,{withFileTypes:!0})}catch(i){let s=i;if(s?.code==="ENOENT")return;if(s?.code==="ENOTDIR"||s?.code==="ENOTSUP")return Ia(t,e,r);throw s}for(let i of n)oy(t,i,e,r);return Ia(t,e,r)},ku=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"}},vs=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"}},cy=(t,e)=>{xe.stat(t,(r,n)=>{(r||!n.isDirectory())&&(r=new ku(t,r?.code||"ENOTDIR")),e(r)})},ly=(t,e,r)=>{t=D(t);let n=e.umask??18,i=e.mode|448,s=(i&n)!==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=D(e.cwd),m=(f,g)=>{f?r(f):g&&c?Tu(g,o,a,w=>m(w)):s?xe.chmod(t,i,r):r()};if(t===p)return cy(t,m);if(l)return ay.mkdir(t,{mode:i,recursive:!0}).then(f=>m(null,f??void 0),m);let h=D(ms.relative(p,t)).split("/");va(p,h,i,d,p,void 0,m)},va=(t,e,r,n,i,s,o)=>{if(e.length===0)return o(null,s);let a=e.shift(),c=D(ms.resolve(t+"/"+a));xe.mkdir(c,r,bu(c,e,r,n,i,s,o))},bu=(t,e,r,n,i,s,o)=>a=>{a?xe.lstat(t,(c,l)=>{if(c)c.path=c.path&&D(c.path),o(c);else if(l.isDirectory())va(t,e,r,n,i,s,o);else if(n)xe.unlink(t,d=>{if(d)return o(d);xe.mkdir(t,r,bu(t,e,r,n,i,s,o))});else{if(l.isSymbolicLink())return o(new vs(t,t+"/"+e.join("/")));o(a)}}):(s=s||t,va(t,e,r,n,i,s,o))},dy=t=>{let e=!1,r;try{e=xe.statSync(t).isDirectory()}catch(n){r=n?.code}finally{if(!e)throw new ku(t,r??"ENOTDIR")}},uy=(t,e)=>{t=D(t);let r=e.umask??18,n=e.mode|448,i=(n&r)!==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=D(e.cwd),p=f=>{f&&a&&Ru(f,s,o),i&&xe.chmodSync(t,n)};if(t===d)return dy(d),p();if(c)return p(xe.mkdirSync(t,{mode:n,recursive:!0})??void 0);let m=D(ms.relative(d,t)).split("/"),h;for(let f=m.shift(),g=d;f&&(g+="/"+f);f=m.shift()){g=D(ms.resolve(g));try{xe.mkdirSync(g,n),h=h||g}catch{let w=xe.lstatSync(g);if(w.isDirectory())continue;if(l){xe.unlinkSync(g),xe.mkdirSync(g,n),h=h||g;continue}else if(w.isSymbolicLink())return new vs(g,g+"/"+m.join("/"))}}return p(h)},ia=Object.create(null),Gd=1e4,Cr=new Set,hy=t=>{Cr.has(t)?Cr.delete(t):ia[t]=t.normalize("NFD").toLocaleLowerCase("en").toLocaleUpperCase("en"),Cr.add(t);let e=ia[t],r=Cr.size-Gd;if(r>Gd/10){for(let n of Cr)if(Cr.delete(n),delete ia[n],--r<=0)break}return e},fy=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,py=fy==="win32",gy=t=>t.split("/").slice(0,-1).reduce((e,r)=>{let n=e.at(-1);return n!==void 0&&(r=Au(n,r)),e.push(r||"/"),e},[]),my=class{#e=new Map;#r=new Map;#n=new Set;reserve(t,e){t=py?["win32 parallelization disabled"]:t.map(n=>Nn(Au(hy(n))));let r=new Set(t.map(n=>gy(n)).reduce((n,i)=>n.concat(i)));this.#r.set(e,{dirs:r,paths:t});for(let n of t){let i=this.#e.get(n);i?i.push(e):this.#e.set(n,[e])}for(let n of r){let i=this.#e.get(n);if(!i)this.#e.set(n,[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.#r.get(t);if(!e)throw new Error("function does not have any path reservations");return{paths:e.paths.map(r=>this.#e.get(r)),dirs:[...e.dirs].map(r=>this.#e.get(r))}}check(t){let{paths:e,dirs:r}=this.#s(t);return e.every(n=>n&&n[0]===t)&&r.every(n=>n&&n[0]instanceof Set&&n[0].has(t))}#i(t){return this.#n.has(t)||!this.check(t)?!1:(this.#n.add(t),t(()=>this.#t(t)),!0)}#t(t){if(!this.#n.has(t))return!1;let e=this.#r.get(t);if(!e)throw new Error("invalid reservation");let{paths:r,dirs:n}=e,i=new Set;for(let s of r){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 n){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.#n.delete(t),i.forEach(s=>this.#i(s)),!0}},wy=()=>process.umask(),Hd=Symbol("onEntry"),Ta=Symbol("checkFs"),jd=Symbol("checkFs2"),Ra=Symbol("isReusable"),Le=Symbol("makeFs"),ka=Symbol("file"),ba=Symbol("directory"),us=Symbol("link"),Wd=Symbol("symlink"),qd=Symbol("hardlink"),Cn=Symbol("ensureNoSymlink"),Jd=Symbol("unsupported"),Vd=Symbol("checkPath"),sa=Symbol("stripAbsolutePath"),Ft=Symbol("mkdir"),le=Symbol("onError"),es=Symbol("pending"),Zd=Symbol("pend"),Dr=Symbol("unpend"),oa=Symbol("ended"),aa=Symbol("maybeClose"),Aa=Symbol("skip"),Fn=Symbol("doChown"),Mn=Symbol("uid"),Bn=Symbol("gid"),Un=Symbol("checkedCwd"),yy=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,zn=yy==="win32",_y=1024,Ey=(t,e)=>{if(!zn)return L.unlink(t,e);let r=t+".DELETE."+mu(16).toString("hex");L.rename(t,r,n=>{if(n)return e(n);L.unlink(r,e)})},Sy=t=>{if(!zn)return L.unlinkSync(t);let e=t+".DELETE."+mu(16).toString("hex");L.renameSync(t,e),L.unlinkSync(e)},Kd=(t,e,r)=>t!==void 0&&t===t>>>0?t:e!==void 0&&e===e>>>0?e:r,Ba=class extends $n{[oa]=!1;[Un]=!1;[es]=0;reservations=new my;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[oa]=!0,this[aa]()},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:_y,this.forceChown=t.forceChown===!0,this.win32=!!t.win32||zn,this.newer=!!t.newer,this.keep=!!t.keep,this.noMtime=!!t.noMtime,this.preservePaths=!!t.preservePaths,this.unlink=!!t.unlink,this.cwd=D(re.resolve(t.cwd||process.cwd())),this.strip=Number(t.strip)||0,this.processUmask=this.chmod?typeof t.processUmask=="number"?t.processUmask:wy():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[Hd](e))}warn(t,e,r={}){return(t==="TAR_BAD_ARCHIVE"||t==="TAR_ABORT")&&(r.recoverable=!1),super.warn(t,e,r)}[aa](){this[oa]&&this[es]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"))}[sa](t,e){let r=t[e],{type:n}=t;if(!r||this.preservePaths)return!0;let[i,s]=Na(r),o=s.replaceAll(/\\/g,"/").split("/");if(o.includes("..")||zn&&/^[a-z]:\.\.$/i.test(o[0]??"")){if(e==="path"||n==="Link")return this.warn("TAR_ENTRY_ERROR",`${e} contains '..'`,{entry:t,[e]:r}),!1;let a=re.posix.dirname(t.path),c=re.posix.normalize(re.posix.join(a,o.join("/")));if(c.startsWith("../")||c==="..")return this.warn("TAR_ENTRY_ERROR",`${e} escapes extraction directory`,{entry:t,[e]:r}),!1}return i&&(t[e]=String(s),this.warn("TAR_ENTRY_INFO",`stripping ${i} from absolute ${e}`,{entry:t,[e]:r})),!0}[Vd](t){let e=D(t.path),r=e.split("/");if(this.strip){if(r.length<this.strip)return!1;if(t.type==="Link"){let n=D(String(t.linkpath)).split("/");if(n.length>=this.strip)t.linkpath=n.slice(this.strip).join("/");else return!1}r.splice(0,this.strip),t.path=r.join("/")}if(isFinite(this.maxDepth)&&r.length>this.maxDepth)return this.warn("TAR_ENTRY_ERROR","path excessively deep",{entry:t,path:e,depth:r.length,maxDepth:this.maxDepth}),!1;if(!this[sa](t,"path")||!this[sa](t,"linkpath"))return!1;if(t.absolute=re.isAbsolute(t.path)?D(re.resolve(t.path)):D(re.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:D(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:n}=re.win32.parse(String(t.absolute));t.absolute=n+Od(String(t.absolute).slice(n.length));let{root:i}=re.win32.parse(t.path);t.path=i+Od(t.path.slice(i.length))}return!0}[Hd](t){if(!this[Vd](t))return t.resume();switch(ey.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[Ta](t);default:return this[Jd](t)}}[le](t,e){t.name==="CwdError"?this.emit("error",t):(this.warn("TAR_ENTRY_ERROR",t,{entry:e}),this[Dr](),e.resume())}[Ft](t,e,r){ly(D(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},r)}[Fn](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}[Mn](t){return Kd(this.uid,t.uid,this.processUid)}[Bn](t){return Kd(this.gid,t.gid,this.processGid)}[ka](t,e){let r=typeof t.mode=="number"?t.mode&4095:this.fmode,n=new ws(String(t.absolute),{flags:vu(t.size),mode:r,autoClose:!1});n.on("error",a=>{n.fd&&L.close(n.fd,()=>{}),n.write=()=>!0,this[le](a,t),e()});let i=1,s=a=>{if(a){n.fd&&L.close(n.fd,()=>{}),this[le](a,t),e();return}--i===0&&n.fd!==void 0&&L.close(n.fd,c=>{c?this[le](c,t):this[Dr](),e()})};n.on("finish",()=>{let a=String(t.absolute),c=n.fd;if(typeof c=="number"&&t.mtime&&!this.noMtime){i++;let l=t.atime||new Date,d=t.mtime;L.futimes(c,l,d,p=>p?L.utimes(a,l,d,m=>s(m&&p)):s())}if(typeof c=="number"&&this[Fn](t)){i++;let l=this[Mn](t),d=this[Bn](t);typeof l=="number"&&typeof d=="number"&&L.fchown(c,l,d,p=>p?L.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(n)}[ba](t,e){let r=typeof t.mode=="number"?t.mode&4095:this.dmode;this[Ft](String(t.absolute),r,n=>{if(n){this[le](n,t),e();return}let i=1,s=()=>{--i===0&&(e(),this[Dr](),t.resume())};t.mtime&&!this.noMtime&&(i++,L.utimes(String(t.absolute),t.atime||new Date,t.mtime,s)),this[Fn](t)&&(i++,L.chown(String(t.absolute),Number(this[Mn](t)),Number(this[Bn](t)),s)),s()})}[Jd](t){t.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${t.type}`,{entry:t}),t.resume()}[Wd](t,e){let r=D(re.relative(this.cwd,re.resolve(re.dirname(String(t.absolute)),String(t.linkpath)))).split("/");this[Cn](t,this.cwd,r,()=>this[us](t,String(t.linkpath),"symlink",e),n=>{this[le](n,t),e()})}[qd](t,e){let r=D(re.resolve(this.cwd,String(t.linkpath))),n=D(String(t.linkpath)).split("/");this[Cn](t,this.cwd,n,()=>this[us](t,r,"link",e),i=>{this[le](i,t),e()})}[Cn](t,e,r,n,i){let s=r.shift();if(this.preservePaths||s===void 0)return n();let o=re.resolve(e,s);L.lstat(o,(a,c)=>{if(a)return n();if(c?.isSymbolicLink())return i(new vs(o,re.resolve(o,r.join("/"))));this[Cn](t,o,r,n,i)})}[Zd](){this[es]++}[Dr](){this[es]--,this[aa]()}[Aa](t){this[Dr](),t.resume()}[Ra](t,e){return t.type==="File"&&!this.unlink&&e.isFile()&&e.nlink<=1&&!zn}[Ta](t){this[Zd]();let e=[t.path];t.linkpath&&e.push(t.linkpath),this.reservations.reserve(e,r=>this[jd](t,r))}[jd](t,e){let r=o=>{e(o)},n=()=>{this[Ft](this.cwd,this.dmode,o=>{if(o){this[le](o,t),r();return}this[Un]=!0,i()})},i=()=>{if(t.absolute!==this.cwd){let o=D(re.dirname(String(t.absolute)));if(o!==this.cwd)return this[Ft](o,this.dmode,a=>{if(a){this[le](a,t),r();return}s()})}s()},s=()=>{L.lstat(String(t.absolute),(o,a)=>{if(a&&(this.keep||this.newer&&a.mtime>(t.mtime??a.mtime))){this[Aa](t),r();return}if(o||this[Ra](t,a))return this[Le](null,t,r);if(a.isDirectory()){if(t.type==="Directory"){let c=this.chmod&&t.mode&&(a.mode&4095)!==t.mode,l=d=>this[Le](d??null,t,r);return c?L.chmod(String(t.absolute),Number(t.mode),l):l()}if(t.absolute!==this.cwd)return L.rmdir(String(t.absolute),c=>this[Le](c??null,t,r))}if(t.absolute===this.cwd)return this[Le](null,t,r);Ey(String(t.absolute),c=>this[Le](c??null,t,r))})};this[Un]?i():n()}[Le](t,e,r){if(t){this[le](t,e),r();return}switch(e.type){case"File":case"OldFile":case"ContiguousFile":return this[ka](e,r);case"Link":return this[qd](e,r);case"SymbolicLink":return this[Wd](e,r);case"Directory":case"GNUDumpDir":return this[ba](e,r)}}[us](t,e,r,n){L[r](e,String(t.absolute),i=>{i?this[le](i,t):(this[Dr](),t.resume()),n()})}},On=t=>{try{return[null,t()]}catch(e){return[e,null]}},xu=class extends Ba{sync=!0;[Le](t,e){return super[Le](t,e,()=>{})}[Ta](t){if(!this[Un]){let i=this[Ft](this.cwd,this.dmode);if(i)return this[le](i,t);this[Un]=!0}if(t.absolute!==this.cwd){let i=D(re.dirname(String(t.absolute)));if(i!==this.cwd){let s=this[Ft](i,this.dmode);if(s)return this[le](s,t)}}let[e,r]=On(()=>L.lstatSync(String(t.absolute)));if(r&&(this.keep||this.newer&&r.mtime>(t.mtime??r.mtime)))return this[Aa](t);if(e||this[Ra](t,r))return this[Le](null,t);if(r.isDirectory()){if(t.type==="Directory"){let s=this.chmod&&t.mode&&(r.mode&4095)!==t.mode,[o]=s?On(()=>{L.chmodSync(String(t.absolute),Number(t.mode))}):[];return this[Le](o,t)}let[i]=On(()=>L.rmdirSync(String(t.absolute)));this[Le](i,t)}let[n]=t.absolute===this.cwd?[]:On(()=>Sy(String(t.absolute)));this[Le](n,t)}[ka](t,e){let r=typeof t.mode=="number"?t.mode&4095:this.fmode,n=o=>{let a;try{L.closeSync(i)}catch(c){a=c}(o||a)&&this[le](o||a,t),e()},i;try{i=L.openSync(String(t.absolute),vu(t.size),r)}catch(o){return n(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{L.writeSync(i,o,0,o.length)}catch(a){n(a)}}),s.on("end",()=>{let o=null;if(t.mtime&&!this.noMtime){let a=t.atime||new Date,c=t.mtime;try{L.futimesSync(i,a,c)}catch(l){try{L.utimesSync(String(t.absolute),a,c)}catch{o=l}}}if(this[Fn](t)){let a=this[Mn](t),c=this[Bn](t);try{L.fchownSync(i,Number(a),Number(c))}catch(l){try{L.chownSync(String(t.absolute),Number(a),Number(c))}catch{o=o||l}}}n(o)})}[ba](t,e){let r=typeof t.mode=="number"?t.mode&4095:this.dmode,n=this[Ft](String(t.absolute),r);if(n){this[le](n,t),e();return}if(t.mtime&&!this.noMtime)try{L.utimesSync(String(t.absolute),t.atime||new Date,t.mtime)}catch{}if(this[Fn](t))try{L.chownSync(String(t.absolute),Number(this[Mn](t)),Number(this[Bn](t)))}catch{}e(),t.resume()}[Ft](t,e){try{return uy(D(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(r){return r}}[Cn](t,e,r,n,i){if(this.preservePaths||r.length===0)return n();let s=e;for(let o of r){s=re.resolve(s,o);let[a,c]=On(()=>L.lstatSync(s));if(a)return n();if(c.isSymbolicLink())return i(new vs(s,re.resolve(e,r.join("/"))))}n()}[us](t,e,r,n){let i=`${r}Sync`;try{L[i](e,String(t.absolute)),n(),t.resume()}catch(s){return this[le](s,t)}}},Iy=t=>{let e=new xu(t),r=t.file,n=gu.statSync(r),i=t.maxReadSize||16*1024*1024;new Gm(r,{readSize:i,size:n.size}).pipe(e)},vy=(t,e)=>{let r=new Ba(t),n=t.maxReadSize||16*1024*1024,i=t.file;return new Promise((s,o)=>{r.on("error",o),r.on("close",s),gu.stat(i,(a,c)=>{if(a)o(a);else{let l=new Oa(i,{readSize:n,size:c.size});l.on("error",o),l.pipe(r)}})})},Ou=Gn(Iy,vy,t=>new xu(t),t=>new Ba(t),(t,e)=>{e?.length&&cu(t,e)}),Ty=(t,e)=>{let r=new Ma(t),n=!0,i,s;try{try{i=Ae.openSync(t.file,"r+")}catch(c){if(c?.code==="ENOENT")i=Ae.openSync(t.file,"w+");else throw c}let o=Ae.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=Ae.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 ar(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)}n=!1,Ry(t,r,s,i,e)}finally{if(n)try{Ae.closeSync(i)}catch{}}},Ry=(t,e,r,n,i)=>{let s=new Qd(t.file,{fd:n,start:r});e.pipe(s),by(e,i)},ky=(t,e)=>{e=Array.from(e);let r=new Ss(t),n=(i,s,o)=>{let a=(m,h)=>{m?Ae.close(i,f=>o(m)):o(null,h)},c=0;if(s===0)return a(null,0);let l=0,d=Buffer.alloc(512),p=(m,h)=>{if(m||h===void 0)return a(m);if(l+=h,l<512&&h)return Ae.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 f=new ar(d);if(!f.cksumValid)return a(null,c);let g=512*Math.ceil((f.size??0)/512);if(c+g+512>s||(c+=g+512,c>=s))return a(null,c);t.mtimeCache&&f.mtime&&t.mtimeCache.set(String(f.path),f.mtime),l=0,Ae.read(i,d,0,512,c,p)};Ae.read(i,d,0,512,c,p)};return new Promise((i,s)=>{r.on("error",s);let o="r+",a=(c,l)=>{if(c&&c.code==="ENOENT"&&o==="r+")return o="w+",Ae.open(t.file,o,a);if(c||!l)return s(c);Ae.fstat(l,(d,p)=>{if(d)return Ae.close(l,()=>s(d));n(l,p.size,(m,h)=>{if(m)return s(m);let f=new ws(t.file,{fd:l,start:h});r.pipe(f),f.on("error",s),f.on("close",i),Ay(r,e)})})};Ae.open(t.file,o,a)})},by=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?$r({file:Pu.resolve(t.cwd,r.slice(1)),sync:!0,noResume:!0,onReadEntry:n=>t.add(n)}):t.add(r)}),t.end()},Ay=async(t,e)=>{for(let r of e)r.charAt(0)==="@"?await $r({file:Pu.resolve(String(t.cwd),r.slice(1)),noResume:!0,onReadEntry:n=>t.add(n)}):t.add(r);t.end()},Pn=Gn(Ty,ky,()=>{throw new TypeError("file is required")},()=>{throw new TypeError("file is required")},(t,e)=>{if(!Km(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")}),UR=Gn(Pn.syncFile,Pn.asyncFile,Pn.syncNoFile,Pn.asyncNoFile,(t,e=[])=>{Pn.validate?.(t,e),xy(t)}),xy=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,n)=>e(r,n)&&!((t.mtimeCache?.get(r)??n.mtime??0)>(n.mtime??0)):(r,n)=>!((t.mtimeCache?.get(r)??n.mtime??0)>(n.mtime??0))};Rt();var We={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 Hn(t){return t?.cozeDeployType==="cloud"?"cloud":"local"}function Cu(t){let e=t?.cozeAccountId?.trim();if(!(!e||e==="0"))return e}function Du(t){let e=t?.cozeGroupId?.trim();if(!(!e||e==="0"))return e}function Nu(t){let{_meta:e,...r}=t;return{stripped:r,meta:e}}function Gr(t){if(!t?.cozeAgentId)throw new Error("missing _meta.cozeAgentId");return t.cozeAgentId}Ee();F();se();Ee();function wt(t,e){if(Hn(t)!=="cloud")throw new _("OPERATION_NOT_ALLOWED_FOR_LOCAL",`${e} is not allowed for local agent`)}function Ts(t){return t.startsWith("http://")||t.startsWith("https://")}function Rs(t){return t.endsWith("/")?t.slice(0,-1):t}Ee();F();var ks="1008033",Lu="1289";var Fu="pbbp2",Mu="https://www.coze.cn",Bu="/api/coze_claw/resource/get_frontier_key",Py="https://www.coze.cn",Cy="wss://frontier.coze.cn";function bs(t){return t??process.env.COZE_BRIDGE_HANDSHAKE_URL??Py}function Uu(t){return t??process.env.COZE_BRIDGE_FRONTIER_URL??Cy}function Hr(t){let e={},r=t?.ttEnv??process.env.COZE_BRIDGE_TT_ENV,n=t?.usePpe??process.env.COZE_BRIDGE_USE_PPE;return r&&(e["x-tt-env"]=r),n&&(e["x-use-ppe"]=n),e}function Wn(t){return t?t.startsWith("boe_")?{ttEnv:t}:{ttEnv:t,usePpe:"1"}:{}}var jn=x("handshake");async function Ua(t){let e=bs(t.endpoint),r=t.timeoutMs??1e4,n=`${Rs(e)}${Bu}?aid=${encodeURIComponent(ks)}`,i={Authorization:`Bearer ${t.privatecode}`,Accept:"application/json",...Hr(t.ppeOverride)},s=new AbortController,o=setTimeout(()=>s.abort(),r);jn.info("frontier key handshake",{base:e});try{let a=await fetch(n,{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 f=await a.text().catch(()=>"");throw new _("UPSTREAM_HANDSHAKE_FAILED",`handshake HTTP ${a.status} logid=${c}: ${f.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,h=typeof p.device_id=="string"&&p.device_id||typeof p.deviceId=="string"&&p.deviceId||void 0;if(!m||!h){let f=JSON.stringify(d).slice(0,500);throw new _("UPSTREAM_HANDSHAKE_FAILED",`handshake response missing access_key/device_id (also tried camelCase) logid=${c}: ${f}`)}return jn.info("handshake ok",{remoteDeviceId:h,logid:c,traceId:l}),{accessKey:m,deviceId:h}}catch(a){if(a instanceof _)throw jn.error("handshake failed (bridge error)",{base:e,message:a.message,code:a.code}),a;if(a.name==="AbortError")throw jn.warn("handshake timeout",{base:e,timeoutMs:r}),new _("UPSTREAM_HANDSHAKE_FAILED",`handshake timeout (${r}ms)`,{cause:a});let c=a.cause;throw jn.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 za=process.env.COZE_BRIDGE_LLM_GATEWAY_URL?.trim()||"https://llm-gateway.coze.cn",qe="auto",zu=2e5;function $u(t){return{model:$a(t.model)??qe,...t.modelToken?{modelToken:t.modelToken}:{}}}function Gu(t){return!t||t===qe}var Dy=new Set(["auto","\u81EA\u52A8"]);function $a(t){let e=t?.trim();if(e)return Dy.has(e.toLowerCase())?qe:e}function Hu(t){let e={};return t.modelToken?(e.ANTHROPIC_BASE_URL=za,e.ANTHROPIC_AUTH_TOKEN=t.modelToken,e.ANTHROPIC_MODEL=t.model||qe,t.modelInfo?.contextWindow&&(e.CLAUDE_CODE_MAX_CONTEXT_TOKENS=String(t.modelInfo.contextWindow))):Gu(t.model)||(e.ANTHROPIC_MODEL=t.model),e}function ju(t){let e=[];if(t.modelToken?e.push("-c",`model="${t.model||qe}"`):Gu(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="${za}/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 r=t.modelInfo?.contextWindow??zu;e.push("-c",`model_context_window=${r}`)}return e}function Wu(t){return t.modelToken?{OPENAI_API_KEY:t.modelToken}:{}}function Ga(t,e){let{ttEnv:r,usePpe:n}=Wn(t),i={};return r&&(i["x-tt-env"]=r),n&&(i["x-use-ppe"]=n),e&&(i["x-mock-scenario"]=e),i}function qu(t,e,r){if(!t.modelToken)return{};let n=Ga(e,r);return Object.keys(n).length===0?{}:{ANTHROPIC_CUSTOM_HEADERS:Object.entries(n).map(([s,o])=>`${s}:${o}`).join(`
|
|
84
|
-
`)}}function Ha(t){return`coze-session-${t.replace(/[^A-Za-z0-9_-]+/g,"-")}`}function Ju(t,e,r){if(!t.modelToken)return null;let n=t.model||qe,i=Ga(e,r),s=["text"];t.modelInfo?.capabilities?.image===!0&&s.push("image");let o={baseUrl:`${za}/v1`,api:"openai-completions",apiKey:t.modelToken,models:[{id:n,name:n,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 Vu(t,e,r){if(!t.modelToken)return[];let n=Ga(e,r),i=[];for(let[s,o]of Object.entries(n))i.push("-c",`model_providers.coze.http_headers.${s}="${o}"`);return i}var ne=x("agent-handlers"),Zu=5*1024*1024,Uy=1,zy=6,$y=new Set(["node_modules",".git",".coze","dist","build",".next"]),As=class{constructor(e){this.opts=e}opts;async listSkills(e){wt(e._meta,"_agent/listSkills");let r=Gr(e._meta),n=await this.loadAgentCfg(r),i=n?.workspace??ve(r).workspace,s=n?.skills??[],o=[];for(let a of s){let c=nt(i,a.relPath,"SKILL.md");await Fy(c).then(d=>d.isFile()).catch(()=>!1)&&o.push(qy(a))}return{skills:o}}async addSkills(e){wt(e._meta,"_agent/addSkills");let r=Gr(e._meta),n=await this.requireAgentCfg(r),i=e.skills??[],s=[...n.skills??[]],o=new Map(s.map((c,l)=>[c.skillId,l])),a=[];for(let c of i){let l=await Ka({agentId:r,workspace:n.workspace,framework:n.framework,skill:c});Xa(s,o,l),a.push(c)}return await Di(r,s),this.reloadAgentSessions(r,"skills-added"),{installedSkills:a}}async removeSkills(e){wt(e._meta,"_agent/removeSkills");let r=Gr(e._meta),n=await this.requireAgentCfg(r),i=new Set(e.skillIds??[]),s=n.skills??[],o=[];for(let a of s){if(!i.has(a.skillId)){o.push(a);continue}let c=nt(n.workspace,a.relPath);await Ly(c,{recursive:!0,force:!0}),ne.info("skill removed",{agentId:r,skillId:a.skillId,relPath:a.relPath})}return await Di(r,o),this.reloadAgentSessions(r,"skills-removed"),{ok:!0}}reloadAgentSessionsPublic(e,r){this.reloadAgentSessions(e,r)}reloadAgentSessions(e,r){let n=this.opts.agents.get(e);if(n)for(let[i,s]of n.sessions){if(!s.downstream)continue;let o=s.acpSessionId;if(o&&n.activeTriggers.has(o)||this.isRuntimePendingPermission(s)){s.reloadAfterTurn=!0,ne.info("downstream busy, scheduling reload after turn",{reason:r,agentId:e,framework:n.framework,cloudId:i,acpId:o});continue}let c=s.downstream;s.downstream=void 0,ne.info("killing downstream for workspace reload (idle)",{reason:r,agentId:e,framework:n.framework,cloudId:i,acpId:o}),c.stop(r).catch(l=>ne.warn("downstream stop failed during reload (ignored)",{reason:r,agentId:e,cloudId:i,err:String(l)}))}}isRuntimePendingPermission(e){let r=this.opts.isRuntimePendingPermission;return!r||!e.downstream?!1:r(e.downstream)}async updateAgent(e){if(!e.cozeIdentity?.trim())return ne.info("_agent/update: empty cozeIdentity, noop",{agentId:e.agentId}),{ok:!0};let r=e.agentId,n=await ue(r);if(!n)throw new _("AGENT_NOT_FOUND",`agent not found: ${r}`);if(n.cozeIdentity===e.cozeIdentity)return ne.info("_agent/update: cozeIdentity unchanged, noop",{agentId:r}),{ok:!0};try{await Rr(n.workspace,n.framework,e.cozeIdentity)}catch(i){throw ne.error("_agent/update: writeInstructionFile failed, aborting update",{agentId:r,framework:n.framework,workspace:n.workspace,err:String(i)}),new _("AGENT_PROTOCOL_ERROR",`failed to write instruction file for agent ${r}: ${String(i)}`,{cause:i})}return n.cozeIdentity=e.cozeIdentity,await Te(n),ne.info("_agent/update: cozeIdentity rewritten",{agentId:r,framework:n.framework}),this.reloadAgentSessions(r,"identity-changed"),{ok:!0}}async disconnectAgent(e){let r=e.agentId;if(!r)throw new _("IPC_BAD_REQUEST","_agent/disconnect: missing agentId");let n=await ue(r);return n?(n.disconnectedAt=Date.now(),n.disconnectReason=e.reason??"",await Te(n),ne.info("agent disconnected",{agentId:r,reason:e.reason??"",force:e.force??!1}),this.opts.disposeAndMarkDisconnected&&await this.opts.disposeAndMarkDisconnected(r,e.reason??"disconnect"),{ok:!0}):(ne.warn("_agent/disconnect: agent not found, ignoring",{agentId:r}),{ok:!0})}async switchModel(e){if(wt(e._meta,"_agent/switchModel"),!e.agentId)throw new _("IPC_BAD_REQUEST","_agent/switchModel: missing agentId");let r=$a(e.model)??qe,n=await ue(e.agentId);if(!n)throw new _("AGENT_NOT_FOUND",`agent not found: ${e.agentId}`);n.model=r,e.modelInfo&&(n.modelInfo=e.modelInfo),await Te(n),ne.info("_agent/switchModel: model persisted",{agentId:e.agentId,model:r,reason:e.reason??""});let i=this.opts.agents.get(e.agentId);if(!i)return ne.info("_agent/switchModel: agent not running, config persisted only",{agentId:e.agentId}),{ok:!0};i.model=r,e.modelInfo&&i.setModelInfo(e.modelInfo),this.opts.cleanupOpenclawProviders&&await this.opts.cleanupOpenclawProviders(i).catch(o=>ne.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: ${r}`).catch(()=>{}),c.downstream=void 0)}));return await Promise.all(s),ne.info("_agent/switchModel: all session runtimes killed, next prompt will respawn",{agentId:e.agentId,model:r,cloudSessions:s.length}),{ok:!0}}async resetAgent(e){if(wt(e._meta,We.RESET),!e.agentId)throw new _("IPC_BAD_REQUEST",`${We.RESET}: missing agentId`);return await this.clearSessionMappings(e.agentId,We.RESET),await this.runDetailSync(e.agentId,We.RESET,e.reason),{ok:!0}}async clearSessionMappings(e,r){let n=this.opts.agents.get(e);if(!n){await this.clearPersistedAcpSessionIds(e),ne.info("reset: agent not in memory, cleared persisted acpSessionIds only",{agentId:e});return}await n.killAllRuntimes(r);for(let s of n.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 n.sessions)i.set(s,{modelToken:o.modelToken,tokenGeneratedAt:o.tokenGeneratedAt});await mn(e,i)}async clearPersistedAcpSessionIds(e){let r=await ue(e).catch(()=>null);if(!r?.sessions)return;let n=!1;for(let i of Object.values(r.sessions))i.acpSessionId&&(i.acpSessionId=void 0,n=!0);n&&await Te(r)}async repairAgent(e){if(wt(e._meta,We.REPAIR),!e.agentId)throw new _("IPC_BAD_REQUEST",`${We.REPAIR}: missing agentId`);let r=await this.loadAgentCfg(e.agentId);if(r&&r.framework!=="openclaw")throw new _("IPC_BAD_REQUEST",`${We.REPAIR} only allowed for openclaw, got ${r.framework}`);if(r&&this.opts.openclawRepair)try{await this.opts.openclawRepair(e.agentId,r.workspace)}catch(n){ne.warn("openclaw repair (delete+add) failed (ignored)",{agentId:e.agentId,reason:e.reason,err:String(n)})}return await this.runDetailSync(e.agentId,We.REPAIR,e.reason),{ok:!0}}async runDetailSync(e,r,n){if(!this.opts.detailSyncer){ne.warn("detailSyncer not wired, skipping sync",{method:r,agentId:e});return}try{await this.opts.detailSyncer(e)}catch(i){ne.warn("detail sync failed (ignored)",{method:r,agentId:e,reason:n,err:String(i)})}}async getFileTree(e){wt(e._meta,"_agent/getFileTree");let r=e._meta,n=Gr(r),i=await this.resolveWorkspace(n),s=e.filePath??"",o=this.safeJoin(i,s),a=await ja(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 gn(o,i))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${s}`);let c=n_(e.depth);return a.isDirectory()?{tree:await r_(i,o,s,c)}:{tree:[{name:i_(s),path:rh(s||"."),isDir:!1,size:a.size,modifiedAt:Math.floor(a.mtimeMs)}]}}async getFileContent(e){wt(e._meta,"_agent/getFileContent");let r=Gr(e._meta),n=await this.resolveWorkspace(r);if(!e.filePath)throw new _("IPC_BAD_REQUEST","filePath required");let i=this.safeJoin(n,e.filePath),s=await ja(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 gn(i,n))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${e.filePath}`);if(s.size>Zu)throw new _("IPC_BAD_REQUEST",`file too large: ${s.size} bytes (max ${Zu})`);let o=await Ku(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 r=this.opts.agents.get(e);return r?r.workspace:(await ue(e).catch(()=>null))?.workspace??ve(e).workspace}safeJoin(e,r){let n=Ja(e,r||"."),i=Za(e,n);if(i.startsWith("..")||i===".."||i.startsWith(`..${Xu}`))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${r}`);return n}loadAgentCfg(e){return ue(e)}async requireAgentCfg(e){let r=await this.loadAgentCfg(e);if(!r)throw new _("AGENT_NOT_FOUND",`no config for agent: ${e}`);return r}};function Gy(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 Hy(t){return t==="claude-code"?nt(".claude","skills"):nt(".agents","skills")}var jy=3e4,Wy=50*1024*1024,jr=3e4;async function Ka(t){let{agentId:e,workspace:r,framework:n,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=Gy(i.skillName),c=Hy(n),l=nt(c,a),d=nt(r,l);if(await Wa(d,{recursive:!0}),s){let m=Buffer.from(i.content,"utf8");qn(m.length),await qa(nt(d,"SKILL.md"),m,"utf8")}else{let m=await Jy(i.downloadUrl);Zy(m)?await Qy(m,d):Ky(m)?await Xy(m,d):await qa(nt(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 ne.info("skill installed",{agentId:e,skillId:i.skillId,skillName:i.skillName,relPath:l,source:s?"content":"downloadUrl"}),p}function Xa(t,e,r){let n=e.get(r.skillId);if(n!==void 0){t[n]=r;return}e.set(r.skillId,t.length),t.push(r)}function qy(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 Jy(t){if(!t)throw new _("IPC_BAD_REQUEST","skill missing downloadUrl");if(t.startsWith("data:")){let e=Math.floor(t.length*3/4);qn(e);let r=Vy(t);return qn(r.length),r}if(t.startsWith("file:")){let e=new URL(t).pathname,r=await Ku(e);return qn(r.length),r}if(Ts(t)){let e=new AbortController,r=setTimeout(()=>e.abort(),jy);try{let n=await fetch(t,{signal:e.signal});if(!n.ok)throw new _("IPC_BAD_REQUEST",`fetch skill failed HTTP ${n.status} ${t}`);let i=await n.arrayBuffer();return qn(i.byteLength),Buffer.from(i)}finally{clearTimeout(r)}}throw new _("IPC_BAD_REQUEST",`unsupported downloadUrl scheme (\u8981 https/data/file): ${t.slice(0,80)}`)}function qn(t){if(t>Wy)throw new _("IPC_BAD_REQUEST",`skill too large: ${t} bytes`)}function Vy(t){let e=/^data:([^,;]*)(;base64)?,(.*)$/s.exec(t);if(!e)throw new _("IPC_BAD_REQUEST","bad data URL");let r=!!e[2],n=e[3]??"";return r?Buffer.from(n,"base64"):Buffer.from(decodeURIComponent(n),"utf8")}function Zy(t){return t.length>=2&&t[0]===31&&t[1]===139}function Ky(t){if(t.length<4||t[0]!==80||t[1]!==75)return!1;let e=t[2],r=t[3];return e===3&&r===4||e===5&&r===6}function Va(t){return t==="__MACOSX"||t.startsWith("__MACOSX/")}async function Xy(t,e){let r,n;try{r=new eh.default(t),n=r.getEntries()}catch(o){throw new _("IPC_BAD_REQUEST",`zip parse failed: ${o.message}`,{cause:o})}for(let o of n){let a=o.entryName;if(!a||Va(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=Yy(n),s=Ja(e);for(let o of n){if(Va(o.entryName))continue;let a=o.entryName;if(i&&a.startsWith(i)&&(a=a.slice(i.length)),!a)continue;let c=Ja(e,a),l=Za(s,c);if(l.startsWith("..")||l==="..")throw new _("IPC_BAD_REQUEST",`zip entry escapes destDir: ${a}`);if(o.isDirectory){await Wa(c,{recursive:!0});continue}await Wa(My(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 qa(c,d)}}function Yy(t){let e;for(let r of t){let n=r.entryName;if(!n||Va(n))continue;let i=n.indexOf("/");if(i<=0)return;let s=n.slice(0,i+1);if(e===void 0)e=s;else if(e!==s)return}return e}async function Qy(t,e){await e_(t);let r=Ou({cwd:e,strip:1}),n=!1,i=setTimeout(()=>{n=!0,r.destroy(new _("IPC_BAD_REQUEST",`tar extract timeout (${jr}ms)`))},jr);try{await Qu(Yu.from(t),r)}catch(s){throw s instanceof _?s:n?new _("IPC_BAD_REQUEST",`tar extract timeout (${jr}ms)`):new _("IPC_BAD_REQUEST",`tar extract failed: ${s.message??String(s)}`,{cause:s})}finally{clearTimeout(i)}}async function e_(t){let e=[],r=$r({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}`)}}),n=!1,i=setTimeout(()=>{n=!0,r.destroy(new _("IPC_BAD_REQUEST",`tar list timeout (${jr}ms)`))},jr);try{await Qu(Yu.from(t),r)}catch(s){throw n?new _("IPC_BAD_REQUEST",`tar list timeout (${jr}ms)`):new _("IPC_BAD_REQUEST",`tar list failed: ${s.message??String(s)}`,{cause:s})}finally{clearTimeout(i)}if(e.length>0)throw new _("IPC_BAD_REQUEST",e[0]??"tar entry validation failed")}var t_=5e3;async function r_(t,e,r,n){return th(t,e,r,n,{count:0})}async function th(t,e,r,n,i){if(n<=0)return[];let s;try{s=await Ny(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let a of s){if($y.has(a.name)||a.isSymbolicLink())continue;if(i.count>=t_){o.push({name:"...",path:"...",isDir:!1,size:0,modifiedAt:0,hasMore:!0});break}let c=nt(e,a.name),l=By(nt(r,a.name)),d=null;try{d=await ja(c)}catch{continue}if(d.isSymbolicLink())continue;i.count++;let p={name:a.name,path:rh(Za(t,c)),isDir:d.isDirectory(),size:d.size,modifiedAt:Math.floor(d.mtimeMs)};d.isDirectory()&&n>1&&(p.children=await th(t,c,l,n-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 n_(t){return!t||t<=0?Uy:Math.min(t,zy)}function i_(t){if(!t||t==="."||t==="/")return".";let e=t.split(/[/\\]/);return e[e.length-1]||"."}function rh(t){return t.split(Xu).join("/")}F();import{readFileSync as Zk}from"node:fs";import{dirname as Xk,join as Yk}from"node:path";import{fileURLToPath as eb}from"node:url";var Wr="0.1.90-beta.0";var Ut=x("agent-health-reporter"),s_=1e4,Jn=class{constructor(e){this.opts=e;this.intervalMs=e.intervalMs??s_}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 r=[];for(let o of this.opts.core.agents.values()){let a=o_(o);if(!a)continue;let c={agentId:o.agentId,status:a};o.patToken&&(c.patToken=o.patToken),o.accountId&&(c.accountId=o.accountId),r.push(c)}if(r.length===0)return;let n={agents:r,bridgeVersion:Wr,_meta:{cozeDeviceId:e}},i;try{i=await this.opts.core.sendRequest("_agent/health",n,5e3)}catch(o){Ut.warn("heartbeat batch send failed",{count:r.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(r){Ut.warn("onTickEnd hook failed",{err:String(r)})}}};function o_(t){return t.status==="error"?"error":t.activeTriggers.size>0?"busy":t.status==="ok"?"online":null}Rt();import{chmod as L_,mkdir as Ms,rm as F_,stat as M_,writeFile as B_}from"node:fs/promises";import{homedir as U_}from"node:os";import{join as wh}from"node:path";Vt();import{spawnSync as p_}from"node:child_process";function Vn(t,e,r){return r===void 0?{jsonrpc:"2.0",id:t,method:e}:{jsonrpc:"2.0",id:t,method:e,params:r}}function Zn(t,e){return e===void 0?{jsonrpc:"2.0",method:t}:{jsonrpc:"2.0",method:t,params:e}}function qr(t,e){return{jsonrpc:"2.0",id:t,result:e}}function zt(t,e){return{jsonrpc:"2.0",id:t,error:e}}Ee();var xs=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)}},M={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};function nh(t){return"method"in t&&"id"in t&&t.id!==void 0}function ih(t){return"method"in t&&!("id"in t)}function Os(t){return!("method"in t)&&"id"in t}var a_={AGENT_NOT_FOUND:M.AGENT_NOT_FOUND,AGENT_BUSY:M.AGENT_BUSY,AGENT_DISCONNECTED:M.AGENT_DISCONNECTED,AGENT_TIMEOUT:M.AGENT_TIMEOUT,AGENT_FRAME_IDLE_TIMEOUT:M.AGENT_FRAME_IDLE_TIMEOUT,AGENT_SPAWN_FAILED:M.AGENT_SPAWN_FAILED,AGENT_PROTOCOL_ERROR:M.INTERNAL_ERROR,BRIDGE_CONFIG_INVALID:M.INTERNAL_ERROR,BRIDGE_INTERNAL:M.INTERNAL_ERROR,IPC_AUTH_FAILED:M.INTERNAL_ERROR,IPC_BAD_REQUEST:M.INVALID_REQUEST,MODEL_TOKEN_GEN_FAILED:M.MODEL_TOKEN_GEN_FAILED,MODEL_MODALITY_UNSUPPORTED:M.MODEL_MODALITY_UNSUPPORTED,OPERATION_NOT_ALLOWED_FOR_LOCAL:M.OPERATION_NOT_ALLOWED_FOR_LOCAL,UPSTREAM_DISCONNECTED:M.INTERNAL_ERROR,UPSTREAM_HANDSHAKE_FAILED:M.INTERNAL_ERROR,PATH_OUTSIDE_WORKSPACE:M.PATH_OUTSIDE_WORKSPACE,FILE_TOO_LARGE:M.FILE_TOO_LARGE,UNSUPPORTED_MIME:M.UNSUPPORTED_MIME,UPLOAD_FAILED:M.UPLOAD_FAILED,UPSTREAM_NOT_READY:M.UPSTREAM_NOT_READY,AGENT_DEPENDENCY_INSTALL_FAILED:M.AGENT_DEPENDENCY_INSTALL_FAILED};function c_(t){if(t!=null)return t instanceof Error?{name:t.name,message:Kn(t.message)}:typeof t=="string"?Kn(t):typeof t=="object"?d_(t):t}var l_=[[/\/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 Kn(t){let e=t;for(let[r,n]of l_)e=e.replace(r,n);return e}function d_(t){let e={};for(let[r,n]of Object.entries(t))typeof n=="string"?e[r]=Kn(n):e[r]=n;return e}function Xn(t){if(t instanceof _){let e=c_(t.cause),r={bridgeCode:t.code,retriable:t.retriable};return e!==void 0&&(r.cause=e),{code:a_[t.code]??M.INTERNAL_ERROR,message:Kn(t.message),data:r}}return{code:M.INTERNAL_ERROR,message:Kn(t instanceof Error?t.message:String(t))}}function sh(t){let e=t.data,r=e?.bridgeCode??"AGENT_PROTOCOL_ERROR",n=!!e&&typeof e.message=="string"&&!!e.message,i=n?e?.message:t.message,s=t.data;if(n&&e){let{message:o,...a}=e;s=a}return new _(r,i,{retriable:e?.retriable??!1,cause:s})}function ah(t){return`${JSON.stringify(t)}
|
|
83
|
+
`).reduce(xw,Object.create(null)),xw=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.slice((r+" ").length);let n=e.split("="),i=n.shift();if(!i)return t;let s=i.replace(/^SCHILY\.(dev|ino|nlink)/,"$1"),o=n.join("=");return t[s]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(s)?new Date(Number(o)*1e3):/^[0-9]+$/.test(o)?+o:o,t},Ow=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,D=Ow!=="win32"?t=>t:t=>t&&t.replaceAll(/\\/g,"/"),au=class extends cr{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,r){switch(super({}),this.pause(),this.extended=e,this.globalExtended=r,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=D(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?D(t.linkpath):void 0,this.uname=t.uname,this.gname=t.gname,e&&this.#e(e),r&&this.#e(r,!0)}write(t){let e=t.length;if(e>this.blockRemain)throw new Error("writing more to entry than is appropriate");let r=this.remain,n=this.blockRemain;return this.remain=Math.max(0,r-e),this.blockRemain=Math.max(0,n-e),this.ignore?!0:r>=e?super.write(t):super.write(t.subarray(0,r))}#e(t,e=!1){t.path&&(t.path=D(t.path)),t.linkpath&&(t.linkpath=D(t.linkpath)),Object.assign(this,Object.fromEntries(Object.entries(t).filter(([r,n])=>!(n==null||r==="path"&&e))))}},_s=(t,e,r,n={})=>{t.file&&(n.file=t.file),t.cwd&&(n.cwd=t.cwd),n.code=r instanceof Error&&r.code||e,n.tarCode=e,!t.strict&&n.recoverable!==!1?(r instanceof Error&&(n=Object.assign(r,n),r=r.message),t.emit("warn",e,r,n)):r instanceof Error?t.emit("error",Object.assign(r,n)):t.emit("error",Object.assign(new Error(`${e}: ${r}`),n))},Pw=1024*1024,ua=Buffer.from([31,139]),ha=Buffer.from([40,181,47,253]),Cw=Math.max(ua.length,ha.length),Ne=Symbol("state"),er=Symbol("writeEntry"),ft=Symbol("readEntry"),Ko=Symbol("nextEntry"),vd=Symbol("processEntry"),Ye=Symbol("extendedHeader"),Tn=Symbol("globalExtendedHeader"),At=Symbol("meta"),Td=Symbol("emitMeta"),H=Symbol("buffer"),pt=Symbol("queue"),xt=Symbol("ended"),Xo=Symbol("emittedEnd"),tr=Symbol("emit"),Q=Symbol("unzip"),Ji=Symbol("consumeChunk"),Vi=Symbol("consumeChunkSub"),Yo=Symbol("consumeBody"),Rd=Symbol("consumeMeta"),kd=Symbol("consumeHeader"),Rn=Symbol("consuming"),Qo=Symbol("bufferConcat"),Zi=Symbol("maybeEnd"),Pr=Symbol("writing"),Ot=Symbol("aborted"),Ki=Symbol("onDone"),rr=Symbol("sawValidEntry"),Xi=Symbol("sawNullBlock"),Yi=Symbol("sawEOF"),bd=Symbol("closeStream"),Dw=()=>!0,$n=class extends Ym{file;strict;maxMetaEntrySize;filter;brotli;zstd;writable=!0;readable=!1;[pt]=[];[H];[ft];[er];[Ne]="begin";[At]="";[Ye];[Tn];[xt]=!1;[Q];[Ot]=!1;[rr];[Xi]=!1;[Yi]=!1;[Pr]=!1;[Rn]=!1;[Xo]=!1;constructor(t={}){super(),this.file=t.file||"",this.on(Ki,()=>{(this[Ne]==="begin"||this[rr]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),t.ondone?this.on(Ki,t.ondone):this.on(Ki,()=>{this.emit("prefinish"),this.emit("finish"),this.emit("end")}),this.strict=!!t.strict,this.maxMetaEntrySize=t.maxMetaEntrySize||Pw,this.filter=typeof t.filter=="function"?t.filter:Dw;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 r=t.file&&(t.file.endsWith(".tar.zst")||t.file.endsWith(".tzst"));this.zstd=!(t.gzip||t.brotli)&&t.zstd!==void 0?t.zstd:r?!0:void 0,this.on("end",()=>this[bd]()),typeof t.onwarn=="function"&&this.on("warn",t.onwarn),typeof t.onReadEntry=="function"&&this.on("entry",t.onReadEntry)}warn(t,e,r={}){_s(this,t,e,r)}[kd](t,e){this[rr]===void 0&&(this[rr]=!1);let r;try{r=new ar(t,e,this[Ye],this[Tn])}catch(n){return this.warn("TAR_ENTRY_INVALID",n)}if(r.nullBlock)this[Xi]?(this[Yi]=!0,this[Ne]==="begin"&&(this[Ne]="header"),this[tr]("eof")):(this[Xi]=!0,this[tr]("nullBlock"));else if(this[Xi]=!1,!r.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:r});else if(!r.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:r});else{let n=r.type;if(/^(Symbolic)?Link$/.test(n)&&!r.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:r});else if(!/^(Symbolic)?Link$/.test(n)&&!/^(Global)?ExtendedHeader$/.test(n)&&r.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:r});else{let i=this[er]=new au(r,this[Ye],this[Tn]);if(!this[rr])if(i.remain){let s=()=>{i.invalid||(this[rr]=!0)};i.on("end",s)}else this[rr]=!0;i.meta?i.size>this.maxMetaEntrySize?(i.ignore=!0,this[tr]("ignoredEntry",i),this[Ne]="ignore",i.resume()):i.size>0&&(this[At]="",i.on("data",s=>this[At]+=s),this[Ne]="meta"):(this[Ye]=void 0,i.ignore=i.ignore||!this.filter(i.path,i),i.ignore?(this[tr]("ignoredEntry",i),this[Ne]=i.remain?"ignore":"header",i.resume()):(i.remain?this[Ne]="body":(this[Ne]="header",i.end()),this[ft]?this[pt].push(i):(this[pt].push(i),this[Ko]())))}}}[bd](){queueMicrotask(()=>this.emit("close"))}[vd](t){let e=!0;if(!t)this[ft]=void 0,e=!1;else if(Array.isArray(t)){let[r,...n]=t;this.emit(r,...n)}else this[ft]=t,this.emit("entry",t),t.emittedEnd||(t.on("end",()=>this[Ko]()),e=!1);return e}[Ko](){do;while(this[vd](this[pt].shift()));if(this[pt].length===0){let t=this[ft];!t||t.flowing||t.size===t.remain?this[Pr]||this.emit("drain"):t.once("drain",()=>this.emit("drain"))}}[Yo](t,e){let r=this[er];if(!r)throw new Error("attempt to consume body without entry??");let n=r.blockRemain??0,i=n>=t.length&&e===0?t:t.subarray(e,e+n);return r.write(i),r.blockRemain||(this[Ne]="header",this[er]=void 0,r.end()),i.length}[Rd](t,e){let r=this[er],n=this[Yo](t,e);return!this[er]&&r&&this[Td](r),n}[tr](t,e,r){this[pt].length===0&&!this[ft]?this.emit(t,e,r):this[pt].push([t,e,r])}[Td](t){switch(this[tr]("meta",this[At]),t.type){case"ExtendedHeader":case"OldExtendedHeader":this[Ye]=hs.parse(this[At],this[Ye],!1);break;case"GlobalExtendedHeader":this[Tn]=hs.parse(this[At],this[Tn],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":{let e=this[Ye]??Object.create(null);this[Ye]=e,e.path=this[At].replace(/\0.*/,"");break}case"NextFileHasLongLinkpath":{let e=this[Ye]||Object.create(null);this[Ye]=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,r){if(typeof e=="function"&&(r=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,typeof e=="string"?e:"utf8")),this[Ot])return r?.(),!1;if((this[Q]===void 0||this.brotli===void 0&&this[Q]===!1)&&t){if(this[H]&&(t=Buffer.concat([this[H],t]),this[H]=void 0),t.length<Cw)return this[H]=t,r?.(),!0;for(let o=0;this[Q]===void 0&&o<ua.length;o++)t[o]!==ua[o]&&(this[Q]=!1);let i=!1;if(this[Q]===!1&&this.zstd!==!1){i=!0;for(let o=0;o<ha.length;o++)if(t[o]!==ha[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[H]=t,r?.(),!0;else try{new ar(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 iw({}):i?new cw({}):new ow({}),this[Q].on("data",c=>this[Ji](c)),this[Q].on("error",c=>this.abort(c)),this[Q].on("end",()=>{this[xt]=!0,this[Ji]()}),this[Pr]=!0;let a=!!this[Q][o?"end":"write"](t);return this[Pr]=!1,r?.(),a}}this[Pr]=!0,this[Q]?this[Q].write(t):this[Ji](t),this[Pr]=!1;let n=this[pt].length>0?!1:this[ft]?this[ft].flowing:!0;return!n&&this[pt].length===0&&this[ft]?.once("drain",()=>this.emit("drain")),r?.(),n}[Qo](t){t&&!this[Ot]&&(this[H]=this[H]?Buffer.concat([this[H],t]):t)}[Zi](){if(this[xt]&&!this[Xo]&&!this[Ot]&&!this[Rn]){this[Xo]=!0;let t=this[er];if(t&&t.blockRemain){let e=this[H]?this[H].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${t.blockRemain} more bytes, only ${e} available)`,{entry:t}),this[H]&&t.write(this[H]),t.end()}this[tr](Ki)}}[Ji](t){if(this[Rn]&&t)this[Qo](t);else if(!t&&!this[H])this[Zi]();else if(t){if(this[Rn]=!0,this[H]){this[Qo](t);let e=this[H];this[H]=void 0,this[Vi](e)}else this[Vi](t);for(;this[H]&&this[H]?.length>=512&&!this[Ot]&&!this[Yi];){let e=this[H];this[H]=void 0,this[Vi](e)}this[Rn]=!1}(!this[H]||this[xt])&&this[Zi]()}[Vi](t){let e=0,r=t.length;for(;e+512<=r&&!this[Ot]&&!this[Yi];)switch(this[Ne]){case"begin":case"header":this[kd](t,e),e+=512;break;case"ignore":case"body":e+=this[Yo](t,e);break;case"meta":e+=this[Rd](t,e);break;default:throw new Error("invalid state: "+this[Ne])}e<r&&(this[H]=this[H]?Buffer.concat([t.subarray(e),this[H]]):t.subarray(e))}end(t,e,r){return typeof t=="function"&&(r=t,e=void 0,t=void 0),typeof e=="function"&&(r=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,e)),r&&this.once("finish",r),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[Zi]())),this}},Nn=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)},Nw=t=>{let e=t.onReadEntry;t.onReadEntry=e?r=>{e(r),r.resume()}:r=>r.resume()},cu=(t,e)=>{let r=new Map(e.map(s=>[Nn(s),!0])),n=t.filter,i=(s,o="")=>{let a=o||jm(s).root||".",c;if(s===a)c=!1;else{let l=r.get(s);c=l!==void 0?l:i(Hm(s),a)}return r.set(s,c),c};t.filter=n?(s,o)=>n(s,o)&&i(Nn(s)):s=>i(Nn(s))},Lw=t=>{let e=new $n(t),r=t.file,n;try{n=Mr.openSync(r,"r");let i=Mr.fstatSync(n),s=t.maxReadSize||16*1024*1024;if(i.size<s){let o=Buffer.allocUnsafe(i.size),a=Mr.readSync(n,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=Mr.readSync(n,a,0,s,o);if(c===0)break;o+=c,e.write(a.subarray(0,c))}e.end()}}finally{if(typeof n=="number")try{Mr.closeSync(n)}catch{}}},Fw=(t,e)=>{let r=new $n(t),n=t.maxReadSize||16*1024*1024,i=t.file;return new Promise((s,o)=>{r.on("error",o),r.on("end",s),Mr.stat(i,(a,c)=>{if(a)o(a);else{let l=new Oa(i,{readSize:n,size:c.size});l.on("error",o),l.pipe(r)}})})},$r=Gn(Lw,Fw,t=>new $n(t),t=>new $n(t),(t,e)=>{e?.length&&cu(t,e),t.noResume||Nw(t)}),lu=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t),{isAbsolute:Bw,parse:xd}=Mw,Na=t=>{let e="",r=xd(t);for(;Bw(t)||r.root;){let n=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.slice(n.length),e+=n,r=xd(t)}return[e,t]},Es=["|","<",">","?",":"],La=Es.map(t=>String.fromCodePoint(61440+Number(t.codePointAt(0)))),Uw=new Map(Es.map((t,e)=>[t,La[e]])),zw=new Map(La.map((t,e)=>[t,Es[e]])),Od=t=>Es.reduce((e,r)=>e.split(r).join(Uw.get(r)),t),$w=t=>La.reduce((e,r)=>e.split(r).join(zw.get(r)),t),du=(t,e)=>e?(t=D(t).replace(/^\.(\/|$)/,""),Nn(e)+"/"+t):D(t),Gw=16*1024*1024,Pd=Symbol("process"),Cd=Symbol("file"),Dd=Symbol("directory"),fa=Symbol("symlink"),Nd=Symbol("hardlink"),kn=Symbol("header"),is=Symbol("read"),pa=Symbol("lstat"),ss=Symbol("onlstat"),ga=Symbol("onread"),ma=Symbol("onreadlink"),wa=Symbol("openfile"),ya=Symbol("onopenfile"),Lt=Symbol("close"),ps=Symbol("mode"),_a=Symbol("awaitDrain"),ea=Symbol("ondrain"),et=Symbol("prefix"),uu=class extends cr{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 r=Pa(e);super(),this.path=D(t),this.portable=!!r.portable,this.maxReadSize=r.maxReadSize||Gw,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=D(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime,this.prefix=r.prefix?D(r.prefix):void 0,this.onWriteEntry=r.onWriteEntry,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let n=!1;if(!this.preservePaths){let[s,o]=Na(this.path);s&&typeof o=="string"&&(this.path=o,n=s)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=$w(this.path.replaceAll(/\\/g,"/")),t=t.replaceAll(/\\/g,"/")),this.absolute=D(r.absolute||Ad.resolve(this.cwd,t)),this.path===""&&(this.path="./"),n&&this.warn("TAR_ENTRY_INFO",`stripping ${n} from absolute path`,{entry:this,path:n+this.path});let i=this.statCache.get(this.absolute);i?this[ss](i):this[pa]()}warn(t,e,r={}){return _s(this,t,e,r)}emit(t,...e){return t==="error"&&(this.#e=!0),super.emit(t,...e)}[pa](){Qe.lstat(this.absolute,(t,e)=>{if(t)return this.emit("error",t);this[ss](e)})}[ss](t){this.statCache.set(this.absolute,t),this.stat=t,t.isFile()||(t.size=0),this.type=Ww(t),this.emit("stat",t),this[Pd]()}[Pd](){switch(this.type){case"File":return this[Cd]();case"Directory":return this[Dd]();case"SymbolicLink":return this[fa]();default:return this.end()}}[ps](t){return lu(t,this.type==="Directory",this.portable)}[et](t){return du(t,this.prefix)}[kn](){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 ar({path:this[et](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[et](this.linkpath):this.linkpath,mode:this[ps](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 hs({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[et](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[et](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)}[Dd](){if(!this.stat)throw new Error("cannot create directory entry without stat");this.path.slice(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[kn](),this.end()}[fa](){Qe.readlink(this.absolute,(t,e)=>{if(t)return this.emit("error",t);this[ma](e)})}[ma](t){this.linkpath=D(t),this[kn](),this.end()}[Nd](t){if(!this.stat)throw new Error("cannot create link entry without stat");this.type="Link",this.linkpath=D(Ad.relative(this.cwd,t)),this.stat.size=0,this[kn](),this.end()}[Cd](){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[Nd](e);this.linkCache.set(t,this.absolute)}if(this[kn](),this.stat.size===0)return this.end();this[wa]()}[wa](){Qe.open(this.absolute,"r",(t,e)=>{if(t)return this.emit("error",t);this[ya](e)})}[ya](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[is]()}[is](){let{fd:t,buf:e,offset:r,length:n,pos:i}=this;if(t===void 0||e===void 0)throw new Error("cannot read file without first opening");Qe.read(t,e,r,n,i,(s,o)=>{if(s)return this[Lt](()=>this.emit("error",s));this[ga](o)})}[Lt](t=()=>{}){this.fd!==void 0&&Qe.close(this.fd,t)}[ga](t){if(t<=0&&this.remain>0){let r=Object.assign(new Error("encountered unexpected EOF"),{path:this.absolute,syscall:"read",code:"EOF"});return this[Lt](()=>this.emit("error",r))}if(t>this.remain){let r=Object.assign(new Error("did not encounter expected EOF"),{path:this.absolute,syscall:"read",code:"EOF"});return this[Lt](()=>this.emit("error",r))}if(!this.buf)throw new Error("should have created buffer prior to reading");if(t===this.remain)for(let r=t;r<this.length&&t<this.blockRemain;r++)this.buf[r+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[ea]():this[_a](()=>this[ea]())}[_a](t){this.once("drain",t)}write(t,e,r){if(typeof e=="function"&&(r=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,typeof e=="string"?e:"utf8")),this.blockRemain<t.length){let n=Object.assign(new Error("writing more data than expected"),{path:this.absolute});return this.emit("error",n)}return this.remain-=t.length,this.blockRemain-=t.length,this.pos+=t.length,this.offset+=t.length,super.write(t,null,r)}[ea](){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[is]()}},Hw=class extends uu{sync=!0;[pa](){this[ss](Qe.lstatSync(this.absolute))}[fa](){this[ma](Qe.readlinkSync(this.absolute))}[wa](){this[ya](Qe.openSync(this.absolute,"r"))}[is](){let t=!0;try{let{fd:e,buf:r,offset:n,length:i,pos:s}=this;if(e===void 0||r===void 0)throw new Error("fd and buf must be set in READ method");let o=Qe.readSync(e,r,n,i,s);this[ga](o),t=!1}finally{if(t)try{this[Lt](()=>{})}catch{}}}[_a](t){t()}[Lt](t=()=>{}){this.fd!==void 0&&Qe.closeSync(this.fd),t()}},jw=class extends cr{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,r={}){return _s(this,t,e,r)}constructor(t,e={}){let r=Pa(e);super(),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.onWriteEntry=r.onWriteEntry,this.readEntry=t;let{type:n}=t;if(n==="Unsupported")throw new Error("writing entry that should be ignored");this.type=n,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=r.prefix,this.path=D(t.path),this.mode=t.mode!==void 0?this[ps](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:r.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?D(t.linkpath):void 0,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let i=!1;if(!this.preservePaths){let[o,a]=Na(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 ar({path:this[et](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[et](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 hs({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[et](this.path),linkpath:this.type==="Link"&&this.linkpath!==void 0?this[et](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)}[et](t){return du(t,this.prefix)}[ps](t){return lu(t,this.type==="Directory",this.portable)}write(t,e,r){typeof e=="function"&&(r=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,typeof e=="string"?e:"utf8"));let n=t.length;if(n>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=n,super.write(t,r)}end(t,e,r){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),typeof t=="function"&&(r=t,e=void 0,t=void 0),typeof e=="function"&&(r=e,e=void 0),typeof t=="string"&&(t=Buffer.from(t,e??"utf8")),r&&this.once("finish",r),t?super.end(t,r):super.end(r),this}},Ww=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported",qw=class Br{tail;head;length=0;static create(e=[]){return new Br(e)}constructor(e=[]){for(let r of e)this.push(r)}*[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 r=e.next,n=e.prev;return r&&(r.prev=n),n&&(n.next=r),e===this.head&&(this.head=r),e===this.tail&&(this.tail=n),this.length--,e.next=void 0,e.prev=void 0,e.list=void 0,r}unshiftNode(e){if(e===this.head)return;e.list&&e.list.removeNode(e);let r=this.head;e.list=this,e.next=r,r&&(r.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 r=this.tail;e.list=this,e.prev=r,r&&(r.next=e),this.tail=e,this.head||(this.head=e),this.length++}push(...e){for(let r=0,n=e.length;r<n;r++)Vw(this,e[r]);return this.length}unshift(...e){for(var r=0,n=e.length;r<n;r++)Zw(this,e[r]);return this.length}pop(){if(!this.tail)return;let e=this.tail.value,r=this.tail;return this.tail=this.tail.prev,this.tail?this.tail.next=void 0:this.head=void 0,r.list=void 0,this.length--,e}shift(){if(!this.head)return;let e=this.head.value,r=this.head;return this.head=this.head.next,this.head?this.head.prev=void 0:this.tail=void 0,r.list=void 0,this.length--,e}forEach(e,r){r=r||this;for(let n=this.head,i=0;n;i++)e.call(r,n.value,i,this),n=n.next}forEachReverse(e,r){r=r||this;for(let n=this.tail,i=this.length-1;n;i--)e.call(r,n.value,i,this),n=n.prev}get(e){let r=0,n=this.head;for(;n&&r<e;r++)n=n.next;if(r===e&&n)return n.value}getReverse(e){let r=0,n=this.tail;for(;n&&r<e;r++)n=n.prev;if(r===e&&n)return n.value}map(e,r){r=r||this;let n=new Br;for(let i=this.head;i;)n.push(e.call(r,i.value,this)),i=i.next;return n}mapReverse(e,r){r=r||this;var n=new Br;for(let i=this.tail;i;)n.push(e.call(r,i.value,this)),i=i.prev;return n}reduce(e,r){let n,i=this.head;if(arguments.length>1)n=r;else if(this.head)i=this.head.next,n=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var s=0;i;s++)n=e(n,i.value,s),i=i.next;return n}reduceReverse(e,r){let n,i=this.tail;if(arguments.length>1)n=r;else if(this.tail)i=this.tail.prev,n=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(let s=this.length-1;i;s--)n=e(n,i.value,s),i=i.prev;return n}toArray(){let e=new Array(this.length);for(let r=0,n=this.head;n;r++)e[r]=n.value,n=n.next;return e}toArrayReverse(){let e=new Array(this.length);for(let r=0,n=this.tail;n;r++)e[r]=n.value,n=n.prev;return e}slice(e=0,r=this.length){r<0&&(r+=this.length),e<0&&(e+=this.length);let n=new Br;if(r<e||r<0)return n;e<0&&(e=0),r>this.length&&(r=this.length);let i=this.head,s=0;for(s=0;i&&s<e;s++)i=i.next;for(;i&&s<r;s++,i=i.next)n.push(i.value);return n}sliceReverse(e=0,r=this.length){r<0&&(r+=this.length),e<0&&(e+=this.length);let n=new Br;if(r<e||r<0)return n;e<0&&(e=0),r>this.length&&(r=this.length);let i=this.length,s=this.tail;for(;s&&i>r;i--)s=s.prev;for(;s&&i>e;i--,s=s.prev)n.push(s.value);return n}splice(e,r=0,...n){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<r;o++)s.push(i.value),i=this.removeNode(i);i?i!==this.tail&&(i=i.prev):i=this.tail;for(let o of n)i=Jw(this,i,o);return s}reverse(){let e=this.head,r=this.tail;for(let n=e;n;n=n.prev){let i=n.prev;n.prev=n.next,n.next=i}return this.head=r,this.tail=e,this}};function Jw(t,e,r){let n=e,i=e?e.next:t.head,s=new Fa(r,n,i,t);return s.next===void 0&&(t.tail=s),s.prev===void 0&&(t.head=s),t.length++,s}function Vw(t,e){t.tail=new Fa(e,t.tail,void 0,t),t.head||(t.head=t.tail),t.length++}function Zw(t,e){t.head=new Fa(e,void 0,t.head,t),t.tail||(t.tail=t.head),t.length++}var Fa=class{list;next;prev;value;constructor(t,e,r,n){this.list=n,this.value=t,e?(e.next=this,this.prev=e):this.prev=void 0,r?(r.prev=this,this.next=r):this.next=void 0}},Fd=class{path;absolute;entry;stat;readdir;pending=!1;pendingLink=!1;ignore=!1;piped=!1;constructor(t,e){this.path=t||"./",this.absolute=e}},Md=Buffer.alloc(1024),os=Symbol("onStat"),bn=Symbol("ended"),$e=Symbol("queue"),An=Symbol("queue"),Pt=Symbol("current"),nr=Symbol("process"),xn=Symbol("processing"),Qi=Symbol("processJob"),Ge=Symbol("jobs"),ta=Symbol("jobDone"),as=Symbol("addFSEntry"),Bd=Symbol("addTarEntry"),Ea=Symbol("stat"),Sa=Symbol("readdir"),cs=Symbol("onreaddir"),ls=Symbol("pipe"),Ud=Symbol("entry"),ra=Symbol("entryOpt"),ds=Symbol("writeEntryClass"),hu=Symbol("write"),na=Symbol("ondrain"),Ss=class extends cr{sync=!1;opt;cwd;maxReadSize;preservePaths;strict;noPax;prefix;linkCache;statCache;file;portable;zip;readdirCache;noDirRecurse;follow;noMtime;mtime;filter;jobs;[ds];onWriteEntry;[$e];[An]=new Map;[Ge]=0;[xn]=!1;[bn]=!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=D(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[ds]=uu,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 nw(t.gzip)),t.brotli&&(typeof t.brotli!="object"&&(t.brotli={}),this.zip=new sw(t.brotli)),t.zstd&&(typeof t.zstd!="object"&&(t.zstd={}),this.zip=new aw(t.zstd)),!this.zip)throw new Error("impossible");let e=this.zip;e.on("data",r=>super.write(r)),e.on("end",()=>super.end()),e.on("drain",()=>this[na]()),this.on("resume",()=>e.resume())}else this.on("drain",this[na]);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[$e]=new qw,this[Ge]=0,this.jobs=Number(t.jobs)||4,this[xn]=!1,this[bn]=!1}[hu](t){return super.write(t)}add(t){return this.write(t),this}end(t,e,r){return typeof t=="function"&&(r=t,t=void 0),typeof e=="function"&&(r=e,e=void 0),t&&this.add(t),this[bn]=!0,this[nr](),r&&r(),this}write(t){if(this[bn])throw new Error("write after end");return t instanceof au?this[Bd](t):this[as](t),this.flowing}[Bd](t){let e=D(Ld.resolve(this.cwd,t.path));if(!this.filter(t.path,t))t.resume();else{let r=new Fd(t.path,e);r.entry=new jw(t,this[ra](r)),r.entry.on("end",()=>this[ta](r)),this[Ge]+=1,this[$e].push(r)}this[nr]()}[as](t){let e=D(Ld.resolve(this.cwd,t));this[$e].push(new Fd(t,e)),this[nr]()}[Ea](t){t.pending=!0,this[Ge]+=1;let e=this.follow?"stat":"lstat";fs[e](t.absolute,(r,n)=>{t.pending=!1,this[Ge]-=1,r?this.emit("error",r):this[os](t,n)})}[os](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[Qi](t);else{let r=`${e.dev}:${e.ino}`,n=this[An].get(r);n?n.push(t):this[An].set(r,[t]),t.pendingLink=!0,t.pending=!0}this[nr]()}[Sa](t){t.pending=!0,this[Ge]+=1,fs.readdir(t.absolute,(e,r)=>{if(t.pending=!1,this[Ge]-=1,e)return this.emit("error",e);this[cs](t,r)})}[cs](t,e){this.readdirCache.set(t.absolute,e),t.readdir=e,this[nr]()}[nr](){if(!this[xn]){this[xn]=!0;for(let t=this[$e].head;t&&this[Ge]<this.jobs;t=t.next)if(this[Qi](t.value),t.value.ignore){let e=t.next;this[$e].removeNode(t),t.next=e}this[xn]=!1,this[bn]&&this[$e].length===0&&this[Ge]===0&&(this.zip?this.zip.end(Md):(super.write(Md),super.end()))}}get[Pt](){return this[$e]&&this[$e].head&&this[$e].head.value}[ta](t){this[$e].shift(),this[Ge]-=1;let{stat:e}=t;if(e&&e.isFile()&&e.nlink>1){let r=`${e.dev}:${e.ino}`,n=this[An].get(r);if(n){this[An].delete(r);for(let i of n)i.pending=!1,this[Qi](i)}}this[nr]()}[Qi](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[ls](t);return}if(!t.stat){let e=this.statCache.get(t.absolute);e?this[os](t,e):this[Ea](t)}if(t.stat&&!t.ignore){if(!this.noDirRecurse&&t.stat.isDirectory()&&!t.readdir){let e=this.readdirCache.get(t.absolute);if(e?this[cs](t,e):this[Sa](t),!t.readdir)return}if(t.entry=this[Ud](t),!t.entry){t.ignore=!0;return}t===this[Pt]&&!t.piped&&this[ls](t)}}}[ra](t){return{onwarn:(e,r,n)=>this.warn(e,r,n),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}}[Ud](t){this[Ge]+=1;try{return new this[ds](t.path,this[ra](t)).on("end",()=>this[ta](t)).on("error",e=>this.emit("error",e))}catch(e){this.emit("error",e)}}[na](){this[Pt]&&this[Pt].entry&&this[Pt].entry.resume()}[ls](t){t.piped=!0,t.readdir&&t.readdir.forEach(n=>{let i=t.path,s=i==="./"?"":i.replace(/\/*$/,"/");this[as](s+n)});let e=t.entry,r=this.zip;if(!e)throw new Error("cannot pipe without source");r?e.on("data",n=>{r.write(n)||e.pause()}):e.on("data",n=>{super.write(n)||e.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}warn(t,e,r={}){_s(this,t,e,r)}},Ma=class extends Ss{sync=!0;constructor(t){super(t),this[ds]=Hw}pause(){}resume(){}[Ea](t){let e=this.follow?"statSync":"lstatSync";this[os](t,fs[e](t.absolute))}[Sa](t){this[cs](t,fs.readdirSync(t.absolute))}[ls](t){let e=t.entry,r=this.zip;if(t.readdir&&t.readdir.forEach(n=>{let i=t.path,s=i==="./"?"":i.replace(/\/*$/,"/");this[as](s+n)}),!e)throw new Error("Cannot pipe without source");r?e.on("data",n=>{r.write(n)}):e.on("data",n=>{super[hu](n)})}},Kw=(t,e)=>{let r=new Ma(t),n=new Qd(t.file,{mode:t.mode||438});r.pipe(n),fu(r,e)},Xw=(t,e)=>{let r=new Ss(t),n=new ws(t.file,{mode:t.mode||438});r.pipe(n);let i=new Promise((s,o)=>{n.on("error",o),n.on("close",s),r.on("error",o)});return pu(r,e).catch(s=>r.emit("error",s)),i},fu=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?$r({file:eu.resolve(t.cwd,r.slice(1)),sync:!0,noResume:!0,onReadEntry:n=>t.add(n)}):t.add(r)}),t.end()},pu=async(t,e)=>{for(let r of e)r.charAt(0)==="@"?await $r({file:eu.resolve(String(t.cwd),r.slice(1)),noResume:!0,onReadEntry:n=>{t.add(n)}}):t.add(r);t.end()},Yw=(t,e)=>{let r=new Ma(t);return fu(r,e),r},Qw=(t,e)=>{let r=new Ss(t);return pu(r,e).catch(n=>r.emit("error",n)),r},TR=Gn(Kw,Xw,Yw,Qw,(t,e)=>{if(!e?.length)throw new TypeError("no paths specified to add to archive")}),ty=process.env.__FAKE_PLATFORM__||process.platform,yu=ty==="win32",{O_CREAT:_u,O_NOFOLLOW:zd,O_TRUNC:Eu,O_WRONLY:Su}=wu.constants,Iu=Number(process.env.__FAKE_FS_O_FILENAME__)||wu.constants.UV_FS_O_FILEMAP||0,ry=yu&&!!Iu,ny=512*1024,iy=Iu|Eu|_u|Su,$d=!yu&&typeof zd=="number"?zd|Eu|_u|Su:null,vu=$d!==null?()=>$d:ry?t=>t<ny?iy:"w":()=>"w",Ia=(t,e,r)=>{try{return Is.lchownSync(t,e,r)}catch(n){if(n?.code!=="ENOENT")throw n}},gs=(t,e,r,n)=>{Is.lchown(t,e,r,i=>{n(i&&i?.code!=="ENOENT"?i:null)})},sy=(t,e,r,n,i)=>{if(e.isDirectory())Tu(Ln.resolve(t,e.name),r,n,s=>{if(s)return i(s);let o=Ln.resolve(t,e.name);gs(o,r,n,i)});else{let s=Ln.resolve(t,e.name);gs(s,r,n,i)}},Tu=(t,e,r,n)=>{Is.readdir(t,{withFileTypes:!0},(i,s)=>{if(i){if(i.code==="ENOENT")return n();if(i.code!=="ENOTDIR"&&i.code!=="ENOTSUP")return n(i)}if(i||!s.length)return gs(t,e,r,n);let o=s.length,a=null,c=l=>{if(!a){if(l)return n(a=l);if(--o===0)return gs(t,e,r,n)}};for(let l of s)sy(t,l,e,r,c)})},oy=(t,e,r,n)=>{e.isDirectory()&&Ru(Ln.resolve(t,e.name),r,n),Ia(Ln.resolve(t,e.name),r,n)},Ru=(t,e,r)=>{let n;try{n=Is.readdirSync(t,{withFileTypes:!0})}catch(i){let s=i;if(s?.code==="ENOENT")return;if(s?.code==="ENOTDIR"||s?.code==="ENOTSUP")return Ia(t,e,r);throw s}for(let i of n)oy(t,i,e,r);return Ia(t,e,r)},ku=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"}},vs=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"}},cy=(t,e)=>{xe.stat(t,(r,n)=>{(r||!n.isDirectory())&&(r=new ku(t,r?.code||"ENOTDIR")),e(r)})},ly=(t,e,r)=>{t=D(t);let n=e.umask??18,i=e.mode|448,s=(i&n)!==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=D(e.cwd),m=(f,g)=>{f?r(f):g&&c?Tu(g,o,a,w=>m(w)):s?xe.chmod(t,i,r):r()};if(t===p)return cy(t,m);if(l)return ay.mkdir(t,{mode:i,recursive:!0}).then(f=>m(null,f??void 0),m);let h=D(ms.relative(p,t)).split("/");va(p,h,i,d,p,void 0,m)},va=(t,e,r,n,i,s,o)=>{if(e.length===0)return o(null,s);let a=e.shift(),c=D(ms.resolve(t+"/"+a));xe.mkdir(c,r,bu(c,e,r,n,i,s,o))},bu=(t,e,r,n,i,s,o)=>a=>{a?xe.lstat(t,(c,l)=>{if(c)c.path=c.path&&D(c.path),o(c);else if(l.isDirectory())va(t,e,r,n,i,s,o);else if(n)xe.unlink(t,d=>{if(d)return o(d);xe.mkdir(t,r,bu(t,e,r,n,i,s,o))});else{if(l.isSymbolicLink())return o(new vs(t,t+"/"+e.join("/")));o(a)}}):(s=s||t,va(t,e,r,n,i,s,o))},dy=t=>{let e=!1,r;try{e=xe.statSync(t).isDirectory()}catch(n){r=n?.code}finally{if(!e)throw new ku(t,r??"ENOTDIR")}},uy=(t,e)=>{t=D(t);let r=e.umask??18,n=e.mode|448,i=(n&r)!==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=D(e.cwd),p=f=>{f&&a&&Ru(f,s,o),i&&xe.chmodSync(t,n)};if(t===d)return dy(d),p();if(c)return p(xe.mkdirSync(t,{mode:n,recursive:!0})??void 0);let m=D(ms.relative(d,t)).split("/"),h;for(let f=m.shift(),g=d;f&&(g+="/"+f);f=m.shift()){g=D(ms.resolve(g));try{xe.mkdirSync(g,n),h=h||g}catch{let w=xe.lstatSync(g);if(w.isDirectory())continue;if(l){xe.unlinkSync(g),xe.mkdirSync(g,n),h=h||g;continue}else if(w.isSymbolicLink())return new vs(g,g+"/"+m.join("/"))}}return p(h)},ia=Object.create(null),Gd=1e4,Cr=new Set,hy=t=>{Cr.has(t)?Cr.delete(t):ia[t]=t.normalize("NFD").toLocaleLowerCase("en").toLocaleUpperCase("en"),Cr.add(t);let e=ia[t],r=Cr.size-Gd;if(r>Gd/10){for(let n of Cr)if(Cr.delete(n),delete ia[n],--r<=0)break}return e},fy=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,py=fy==="win32",gy=t=>t.split("/").slice(0,-1).reduce((e,r)=>{let n=e.at(-1);return n!==void 0&&(r=Au(n,r)),e.push(r||"/"),e},[]),my=class{#e=new Map;#r=new Map;#n=new Set;reserve(t,e){t=py?["win32 parallelization disabled"]:t.map(n=>Nn(Au(hy(n))));let r=new Set(t.map(n=>gy(n)).reduce((n,i)=>n.concat(i)));this.#r.set(e,{dirs:r,paths:t});for(let n of t){let i=this.#e.get(n);i?i.push(e):this.#e.set(n,[e])}for(let n of r){let i=this.#e.get(n);if(!i)this.#e.set(n,[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.#r.get(t);if(!e)throw new Error("function does not have any path reservations");return{paths:e.paths.map(r=>this.#e.get(r)),dirs:[...e.dirs].map(r=>this.#e.get(r))}}check(t){let{paths:e,dirs:r}=this.#s(t);return e.every(n=>n&&n[0]===t)&&r.every(n=>n&&n[0]instanceof Set&&n[0].has(t))}#i(t){return this.#n.has(t)||!this.check(t)?!1:(this.#n.add(t),t(()=>this.#t(t)),!0)}#t(t){if(!this.#n.has(t))return!1;let e=this.#r.get(t);if(!e)throw new Error("invalid reservation");let{paths:r,dirs:n}=e,i=new Set;for(let s of r){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 n){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.#n.delete(t),i.forEach(s=>this.#i(s)),!0}},wy=()=>process.umask(),Hd=Symbol("onEntry"),Ta=Symbol("checkFs"),jd=Symbol("checkFs2"),Ra=Symbol("isReusable"),Le=Symbol("makeFs"),ka=Symbol("file"),ba=Symbol("directory"),us=Symbol("link"),Wd=Symbol("symlink"),qd=Symbol("hardlink"),Cn=Symbol("ensureNoSymlink"),Jd=Symbol("unsupported"),Vd=Symbol("checkPath"),sa=Symbol("stripAbsolutePath"),Ft=Symbol("mkdir"),le=Symbol("onError"),es=Symbol("pending"),Zd=Symbol("pend"),Dr=Symbol("unpend"),oa=Symbol("ended"),aa=Symbol("maybeClose"),Aa=Symbol("skip"),Fn=Symbol("doChown"),Mn=Symbol("uid"),Bn=Symbol("gid"),Un=Symbol("checkedCwd"),yy=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,zn=yy==="win32",_y=1024,Ey=(t,e)=>{if(!zn)return L.unlink(t,e);let r=t+".DELETE."+mu(16).toString("hex");L.rename(t,r,n=>{if(n)return e(n);L.unlink(r,e)})},Sy=t=>{if(!zn)return L.unlinkSync(t);let e=t+".DELETE."+mu(16).toString("hex");L.renameSync(t,e),L.unlinkSync(e)},Kd=(t,e,r)=>t!==void 0&&t===t>>>0?t:e!==void 0&&e===e>>>0?e:r,Ba=class extends $n{[oa]=!1;[Un]=!1;[es]=0;reservations=new my;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[oa]=!0,this[aa]()},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:_y,this.forceChown=t.forceChown===!0,this.win32=!!t.win32||zn,this.newer=!!t.newer,this.keep=!!t.keep,this.noMtime=!!t.noMtime,this.preservePaths=!!t.preservePaths,this.unlink=!!t.unlink,this.cwd=D(re.resolve(t.cwd||process.cwd())),this.strip=Number(t.strip)||0,this.processUmask=this.chmod?typeof t.processUmask=="number"?t.processUmask:wy():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[Hd](e))}warn(t,e,r={}){return(t==="TAR_BAD_ARCHIVE"||t==="TAR_ABORT")&&(r.recoverable=!1),super.warn(t,e,r)}[aa](){this[oa]&&this[es]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"))}[sa](t,e){let r=t[e],{type:n}=t;if(!r||this.preservePaths)return!0;let[i,s]=Na(r),o=s.replaceAll(/\\/g,"/").split("/");if(o.includes("..")||zn&&/^[a-z]:\.\.$/i.test(o[0]??"")){if(e==="path"||n==="Link")return this.warn("TAR_ENTRY_ERROR",`${e} contains '..'`,{entry:t,[e]:r}),!1;let a=re.posix.dirname(t.path),c=re.posix.normalize(re.posix.join(a,o.join("/")));if(c.startsWith("../")||c==="..")return this.warn("TAR_ENTRY_ERROR",`${e} escapes extraction directory`,{entry:t,[e]:r}),!1}return i&&(t[e]=String(s),this.warn("TAR_ENTRY_INFO",`stripping ${i} from absolute ${e}`,{entry:t,[e]:r})),!0}[Vd](t){let e=D(t.path),r=e.split("/");if(this.strip){if(r.length<this.strip)return!1;if(t.type==="Link"){let n=D(String(t.linkpath)).split("/");if(n.length>=this.strip)t.linkpath=n.slice(this.strip).join("/");else return!1}r.splice(0,this.strip),t.path=r.join("/")}if(isFinite(this.maxDepth)&&r.length>this.maxDepth)return this.warn("TAR_ENTRY_ERROR","path excessively deep",{entry:t,path:e,depth:r.length,maxDepth:this.maxDepth}),!1;if(!this[sa](t,"path")||!this[sa](t,"linkpath"))return!1;if(t.absolute=re.isAbsolute(t.path)?D(re.resolve(t.path)):D(re.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:D(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:n}=re.win32.parse(String(t.absolute));t.absolute=n+Od(String(t.absolute).slice(n.length));let{root:i}=re.win32.parse(t.path);t.path=i+Od(t.path.slice(i.length))}return!0}[Hd](t){if(!this[Vd](t))return t.resume();switch(ey.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[Ta](t);default:return this[Jd](t)}}[le](t,e){t.name==="CwdError"?this.emit("error",t):(this.warn("TAR_ENTRY_ERROR",t,{entry:e}),this[Dr](),e.resume())}[Ft](t,e,r){ly(D(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},r)}[Fn](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}[Mn](t){return Kd(this.uid,t.uid,this.processUid)}[Bn](t){return Kd(this.gid,t.gid,this.processGid)}[ka](t,e){let r=typeof t.mode=="number"?t.mode&4095:this.fmode,n=new ws(String(t.absolute),{flags:vu(t.size),mode:r,autoClose:!1});n.on("error",a=>{n.fd&&L.close(n.fd,()=>{}),n.write=()=>!0,this[le](a,t),e()});let i=1,s=a=>{if(a){n.fd&&L.close(n.fd,()=>{}),this[le](a,t),e();return}--i===0&&n.fd!==void 0&&L.close(n.fd,c=>{c?this[le](c,t):this[Dr](),e()})};n.on("finish",()=>{let a=String(t.absolute),c=n.fd;if(typeof c=="number"&&t.mtime&&!this.noMtime){i++;let l=t.atime||new Date,d=t.mtime;L.futimes(c,l,d,p=>p?L.utimes(a,l,d,m=>s(m&&p)):s())}if(typeof c=="number"&&this[Fn](t)){i++;let l=this[Mn](t),d=this[Bn](t);typeof l=="number"&&typeof d=="number"&&L.fchown(c,l,d,p=>p?L.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(n)}[ba](t,e){let r=typeof t.mode=="number"?t.mode&4095:this.dmode;this[Ft](String(t.absolute),r,n=>{if(n){this[le](n,t),e();return}let i=1,s=()=>{--i===0&&(e(),this[Dr](),t.resume())};t.mtime&&!this.noMtime&&(i++,L.utimes(String(t.absolute),t.atime||new Date,t.mtime,s)),this[Fn](t)&&(i++,L.chown(String(t.absolute),Number(this[Mn](t)),Number(this[Bn](t)),s)),s()})}[Jd](t){t.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${t.type}`,{entry:t}),t.resume()}[Wd](t,e){let r=D(re.relative(this.cwd,re.resolve(re.dirname(String(t.absolute)),String(t.linkpath)))).split("/");this[Cn](t,this.cwd,r,()=>this[us](t,String(t.linkpath),"symlink",e),n=>{this[le](n,t),e()})}[qd](t,e){let r=D(re.resolve(this.cwd,String(t.linkpath))),n=D(String(t.linkpath)).split("/");this[Cn](t,this.cwd,n,()=>this[us](t,r,"link",e),i=>{this[le](i,t),e()})}[Cn](t,e,r,n,i){let s=r.shift();if(this.preservePaths||s===void 0)return n();let o=re.resolve(e,s);L.lstat(o,(a,c)=>{if(a)return n();if(c?.isSymbolicLink())return i(new vs(o,re.resolve(o,r.join("/"))));this[Cn](t,o,r,n,i)})}[Zd](){this[es]++}[Dr](){this[es]--,this[aa]()}[Aa](t){this[Dr](),t.resume()}[Ra](t,e){return t.type==="File"&&!this.unlink&&e.isFile()&&e.nlink<=1&&!zn}[Ta](t){this[Zd]();let e=[t.path];t.linkpath&&e.push(t.linkpath),this.reservations.reserve(e,r=>this[jd](t,r))}[jd](t,e){let r=o=>{e(o)},n=()=>{this[Ft](this.cwd,this.dmode,o=>{if(o){this[le](o,t),r();return}this[Un]=!0,i()})},i=()=>{if(t.absolute!==this.cwd){let o=D(re.dirname(String(t.absolute)));if(o!==this.cwd)return this[Ft](o,this.dmode,a=>{if(a){this[le](a,t),r();return}s()})}s()},s=()=>{L.lstat(String(t.absolute),(o,a)=>{if(a&&(this.keep||this.newer&&a.mtime>(t.mtime??a.mtime))){this[Aa](t),r();return}if(o||this[Ra](t,a))return this[Le](null,t,r);if(a.isDirectory()){if(t.type==="Directory"){let c=this.chmod&&t.mode&&(a.mode&4095)!==t.mode,l=d=>this[Le](d??null,t,r);return c?L.chmod(String(t.absolute),Number(t.mode),l):l()}if(t.absolute!==this.cwd)return L.rmdir(String(t.absolute),c=>this[Le](c??null,t,r))}if(t.absolute===this.cwd)return this[Le](null,t,r);Ey(String(t.absolute),c=>this[Le](c??null,t,r))})};this[Un]?i():n()}[Le](t,e,r){if(t){this[le](t,e),r();return}switch(e.type){case"File":case"OldFile":case"ContiguousFile":return this[ka](e,r);case"Link":return this[qd](e,r);case"SymbolicLink":return this[Wd](e,r);case"Directory":case"GNUDumpDir":return this[ba](e,r)}}[us](t,e,r,n){L[r](e,String(t.absolute),i=>{i?this[le](i,t):(this[Dr](),t.resume()),n()})}},On=t=>{try{return[null,t()]}catch(e){return[e,null]}},xu=class extends Ba{sync=!0;[Le](t,e){return super[Le](t,e,()=>{})}[Ta](t){if(!this[Un]){let i=this[Ft](this.cwd,this.dmode);if(i)return this[le](i,t);this[Un]=!0}if(t.absolute!==this.cwd){let i=D(re.dirname(String(t.absolute)));if(i!==this.cwd){let s=this[Ft](i,this.dmode);if(s)return this[le](s,t)}}let[e,r]=On(()=>L.lstatSync(String(t.absolute)));if(r&&(this.keep||this.newer&&r.mtime>(t.mtime??r.mtime)))return this[Aa](t);if(e||this[Ra](t,r))return this[Le](null,t);if(r.isDirectory()){if(t.type==="Directory"){let s=this.chmod&&t.mode&&(r.mode&4095)!==t.mode,[o]=s?On(()=>{L.chmodSync(String(t.absolute),Number(t.mode))}):[];return this[Le](o,t)}let[i]=On(()=>L.rmdirSync(String(t.absolute)));this[Le](i,t)}let[n]=t.absolute===this.cwd?[]:On(()=>Sy(String(t.absolute)));this[Le](n,t)}[ka](t,e){let r=typeof t.mode=="number"?t.mode&4095:this.fmode,n=o=>{let a;try{L.closeSync(i)}catch(c){a=c}(o||a)&&this[le](o||a,t),e()},i;try{i=L.openSync(String(t.absolute),vu(t.size),r)}catch(o){return n(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{L.writeSync(i,o,0,o.length)}catch(a){n(a)}}),s.on("end",()=>{let o=null;if(t.mtime&&!this.noMtime){let a=t.atime||new Date,c=t.mtime;try{L.futimesSync(i,a,c)}catch(l){try{L.utimesSync(String(t.absolute),a,c)}catch{o=l}}}if(this[Fn](t)){let a=this[Mn](t),c=this[Bn](t);try{L.fchownSync(i,Number(a),Number(c))}catch(l){try{L.chownSync(String(t.absolute),Number(a),Number(c))}catch{o=o||l}}}n(o)})}[ba](t,e){let r=typeof t.mode=="number"?t.mode&4095:this.dmode,n=this[Ft](String(t.absolute),r);if(n){this[le](n,t),e();return}if(t.mtime&&!this.noMtime)try{L.utimesSync(String(t.absolute),t.atime||new Date,t.mtime)}catch{}if(this[Fn](t))try{L.chownSync(String(t.absolute),Number(this[Mn](t)),Number(this[Bn](t)))}catch{}e(),t.resume()}[Ft](t,e){try{return uy(D(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(r){return r}}[Cn](t,e,r,n,i){if(this.preservePaths||r.length===0)return n();let s=e;for(let o of r){s=re.resolve(s,o);let[a,c]=On(()=>L.lstatSync(s));if(a)return n();if(c.isSymbolicLink())return i(new vs(s,re.resolve(e,r.join("/"))))}n()}[us](t,e,r,n){let i=`${r}Sync`;try{L[i](e,String(t.absolute)),n(),t.resume()}catch(s){return this[le](s,t)}}},Iy=t=>{let e=new xu(t),r=t.file,n=gu.statSync(r),i=t.maxReadSize||16*1024*1024;new Gm(r,{readSize:i,size:n.size}).pipe(e)},vy=(t,e)=>{let r=new Ba(t),n=t.maxReadSize||16*1024*1024,i=t.file;return new Promise((s,o)=>{r.on("error",o),r.on("close",s),gu.stat(i,(a,c)=>{if(a)o(a);else{let l=new Oa(i,{readSize:n,size:c.size});l.on("error",o),l.pipe(r)}})})},Ou=Gn(Iy,vy,t=>new xu(t),t=>new Ba(t),(t,e)=>{e?.length&&cu(t,e)}),Ty=(t,e)=>{let r=new Ma(t),n=!0,i,s;try{try{i=Ae.openSync(t.file,"r+")}catch(c){if(c?.code==="ENOENT")i=Ae.openSync(t.file,"w+");else throw c}let o=Ae.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=Ae.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 ar(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)}n=!1,Ry(t,r,s,i,e)}finally{if(n)try{Ae.closeSync(i)}catch{}}},Ry=(t,e,r,n,i)=>{let s=new Qd(t.file,{fd:n,start:r});e.pipe(s),by(e,i)},ky=(t,e)=>{e=Array.from(e);let r=new Ss(t),n=(i,s,o)=>{let a=(m,h)=>{m?Ae.close(i,f=>o(m)):o(null,h)},c=0;if(s===0)return a(null,0);let l=0,d=Buffer.alloc(512),p=(m,h)=>{if(m||h===void 0)return a(m);if(l+=h,l<512&&h)return Ae.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 f=new ar(d);if(!f.cksumValid)return a(null,c);let g=512*Math.ceil((f.size??0)/512);if(c+g+512>s||(c+=g+512,c>=s))return a(null,c);t.mtimeCache&&f.mtime&&t.mtimeCache.set(String(f.path),f.mtime),l=0,Ae.read(i,d,0,512,c,p)};Ae.read(i,d,0,512,c,p)};return new Promise((i,s)=>{r.on("error",s);let o="r+",a=(c,l)=>{if(c&&c.code==="ENOENT"&&o==="r+")return o="w+",Ae.open(t.file,o,a);if(c||!l)return s(c);Ae.fstat(l,(d,p)=>{if(d)return Ae.close(l,()=>s(d));n(l,p.size,(m,h)=>{if(m)return s(m);let f=new ws(t.file,{fd:l,start:h});r.pipe(f),f.on("error",s),f.on("close",i),Ay(r,e)})})};Ae.open(t.file,o,a)})},by=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?$r({file:Pu.resolve(t.cwd,r.slice(1)),sync:!0,noResume:!0,onReadEntry:n=>t.add(n)}):t.add(r)}),t.end()},Ay=async(t,e)=>{for(let r of e)r.charAt(0)==="@"?await $r({file:Pu.resolve(String(t.cwd),r.slice(1)),noResume:!0,onReadEntry:n=>t.add(n)}):t.add(r);t.end()},Pn=Gn(Ty,ky,()=>{throw new TypeError("file is required")},()=>{throw new TypeError("file is required")},(t,e)=>{if(!Km(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")}),UR=Gn(Pn.syncFile,Pn.asyncFile,Pn.syncNoFile,Pn.asyncNoFile,(t,e=[])=>{Pn.validate?.(t,e),xy(t)}),xy=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,n)=>e(r,n)&&!((t.mtimeCache?.get(r)??n.mtime??0)>(n.mtime??0)):(r,n)=>!((t.mtimeCache?.get(r)??n.mtime??0)>(n.mtime??0))};Rt();var We={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 Hn(t){return t?.cozeDeployType==="cloud"?"cloud":"local"}function Cu(t){let e=t?.cozeAccountId?.trim();if(!(!e||e==="0"))return e}function Du(t){let e=t?.cozeGroupId?.trim();if(!(!e||e==="0"))return e}function Nu(t){let{_meta:e,...r}=t;return{stripped:r,meta:e}}function Gr(t){if(!t?.cozeAgentId)throw new Error("missing _meta.cozeAgentId");return t.cozeAgentId}Ee();F();se();Ee();function wt(t,e){if(Hn(t)!=="cloud")throw new _("OPERATION_NOT_ALLOWED_FOR_LOCAL",`${e} is not allowed for local agent`)}function Ts(t){return t.startsWith("http://")||t.startsWith("https://")}function Rs(t){return t.endsWith("/")?t.slice(0,-1):t}Ee();F();var ks="1008033",Lu="1289";var Fu="pbbp2",Mu="https://www.coze.cn",Bu="/api/coze_claw/resource/get_frontier_key",Py="https://www.coze.cn",Cy="wss://frontier.coze.cn";function bs(t){return t??process.env.COZE_BRIDGE_HANDSHAKE_URL??Py}function Uu(t){return t??process.env.COZE_BRIDGE_FRONTIER_URL??Cy}function Hr(t){let e={},r=t?.ttEnv??process.env.COZE_BRIDGE_TT_ENV,n=t?.usePpe??process.env.COZE_BRIDGE_USE_PPE;return r&&(e["x-tt-env"]=r),n&&(e["x-use-ppe"]=n),e}function Wn(t){return t?t.startsWith("boe_")?{ttEnv:t}:{ttEnv:t,usePpe:"1"}:{}}var jn=x("handshake");async function Ua(t){let e=bs(t.endpoint),r=t.timeoutMs??1e4,n=`${Rs(e)}${Bu}?aid=${encodeURIComponent(ks)}`,i={Authorization:`Bearer ${t.privatecode}`,Accept:"application/json",...Hr(t.ppeOverride)},s=new AbortController,o=setTimeout(()=>s.abort(),r);jn.info("frontier key handshake",{base:e});try{let a=await fetch(n,{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 f=await a.text().catch(()=>"");throw new _("UPSTREAM_HANDSHAKE_FAILED",`handshake HTTP ${a.status} logid=${c}: ${f.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,h=typeof p.device_id=="string"&&p.device_id||typeof p.deviceId=="string"&&p.deviceId||void 0;if(!m||!h){let f=JSON.stringify(d).slice(0,500);throw new _("UPSTREAM_HANDSHAKE_FAILED",`handshake response missing access_key/device_id (also tried camelCase) logid=${c}: ${f}`)}return jn.info("handshake ok",{remoteDeviceId:h,logid:c,traceId:l}),{accessKey:m,deviceId:h}}catch(a){if(a instanceof _)throw jn.error("handshake failed (bridge error)",{base:e,message:a.message,code:a.code}),a;if(a.name==="AbortError")throw jn.warn("handshake timeout",{base:e,timeoutMs:r}),new _("UPSTREAM_HANDSHAKE_FAILED",`handshake timeout (${r}ms)`,{cause:a});let c=a.cause;throw jn.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 za=process.env.COZE_BRIDGE_LLM_GATEWAY_URL?.trim()||"https://llm-gateway.coze.cn",qe="auto",zu=2e5;function $u(t){return{model:$a(t.model)??qe,...t.modelToken?{modelToken:t.modelToken}:{}}}function Gu(t){return!t||t===qe}var Dy=new Set(["auto","\u81EA\u52A8"]);function $a(t){let e=t?.trim();if(e)return Dy.has(e.toLowerCase())?qe:e}function Hu(t){let e={};if(t.modelToken){e.ANTHROPIC_BASE_URL=za,e.ANTHROPIC_AUTH_TOKEN=t.modelToken;let r=t.model||qe;e.ANTHROPIC_MODEL=r,e.ANTHROPIC_SMALL_FAST_MODEL=r,t.modelInfo?.contextWindow&&(e.CLAUDE_CODE_MAX_CONTEXT_TOKENS=String(t.modelInfo.contextWindow))}else Gu(t.model)||(e.ANTHROPIC_MODEL=t.model);return e}function ju(t){let e=[];if(t.modelToken?e.push("-c",`model="${t.model||qe}"`):Gu(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="${za}/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 r=t.modelInfo?.contextWindow??zu;e.push("-c",`model_context_window=${r}`)}return e}function Wu(t){return t.modelToken?{OPENAI_API_KEY:t.modelToken}:{}}function Ga(t,e){let{ttEnv:r,usePpe:n}=Wn(t),i={};return r&&(i["x-tt-env"]=r),n&&(i["x-use-ppe"]=n),e&&(i["x-mock-scenario"]=e),i}function qu(t,e,r){if(!t.modelToken)return{};let n=Ga(e,r);return Object.keys(n).length===0?{}:{ANTHROPIC_CUSTOM_HEADERS:Object.entries(n).map(([s,o])=>`${s}:${o}`).join(`
|
|
84
|
+
`)}}function Ha(t){return`coze-session-${t.replace(/[^A-Za-z0-9_-]+/g,"-")}`}function Ju(t,e,r){if(!t.modelToken)return null;let n=t.model||qe,i=Ga(e,r),s=["text"];t.modelInfo?.capabilities?.image===!0&&s.push("image");let o={baseUrl:`${za}/v1`,api:"openai-completions",apiKey:t.modelToken,models:[{id:n,name:n,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 Vu(t,e,r){if(!t.modelToken)return[];let n=Ga(e,r),i=[];for(let[s,o]of Object.entries(n))i.push("-c",`model_providers.coze.http_headers.${s}="${o}"`);return i}var ne=x("agent-handlers"),Zu=5*1024*1024,Uy=1,zy=6,$y=new Set(["node_modules",".git",".coze","dist","build",".next"]),As=class{constructor(e){this.opts=e}opts;async listSkills(e){wt(e._meta,"_agent/listSkills");let r=Gr(e._meta),n=await this.loadAgentCfg(r),i=n?.workspace??ve(r).workspace,s=n?.skills??[],o=[];for(let a of s){let c=nt(i,a.relPath,"SKILL.md");await Fy(c).then(d=>d.isFile()).catch(()=>!1)&&o.push(qy(a))}return{skills:o}}async addSkills(e){wt(e._meta,"_agent/addSkills");let r=Gr(e._meta),n=await this.requireAgentCfg(r),i=e.skills??[],s=[...n.skills??[]],o=new Map(s.map((c,l)=>[c.skillId,l])),a=[];for(let c of i){let l=await Ka({agentId:r,workspace:n.workspace,framework:n.framework,skill:c});Xa(s,o,l),a.push(c)}return await Di(r,s),this.reloadAgentSessions(r,"skills-added"),{installedSkills:a}}async removeSkills(e){wt(e._meta,"_agent/removeSkills");let r=Gr(e._meta),n=await this.requireAgentCfg(r),i=new Set(e.skillIds??[]),s=n.skills??[],o=[];for(let a of s){if(!i.has(a.skillId)){o.push(a);continue}let c=nt(n.workspace,a.relPath);await Ly(c,{recursive:!0,force:!0}),ne.info("skill removed",{agentId:r,skillId:a.skillId,relPath:a.relPath})}return await Di(r,o),this.reloadAgentSessions(r,"skills-removed"),{ok:!0}}reloadAgentSessionsPublic(e,r){this.reloadAgentSessions(e,r)}reloadAgentSessions(e,r){let n=this.opts.agents.get(e);if(n)for(let[i,s]of n.sessions){if(!s.downstream)continue;let o=s.acpSessionId;if(o&&n.activeTriggers.has(o)||this.isRuntimePendingPermission(s)){s.reloadAfterTurn=!0,ne.info("downstream busy, scheduling reload after turn",{reason:r,agentId:e,framework:n.framework,cloudId:i,acpId:o});continue}let c=s.downstream;s.downstream=void 0,ne.info("killing downstream for workspace reload (idle)",{reason:r,agentId:e,framework:n.framework,cloudId:i,acpId:o}),c.stop(r).catch(l=>ne.warn("downstream stop failed during reload (ignored)",{reason:r,agentId:e,cloudId:i,err:String(l)}))}}isRuntimePendingPermission(e){let r=this.opts.isRuntimePendingPermission;return!r||!e.downstream?!1:r(e.downstream)}async updateAgent(e){if(!e.cozeIdentity?.trim())return ne.info("_agent/update: empty cozeIdentity, noop",{agentId:e.agentId}),{ok:!0};let r=e.agentId,n=await ue(r);if(!n)throw new _("AGENT_NOT_FOUND",`agent not found: ${r}`);if(n.cozeIdentity===e.cozeIdentity)return ne.info("_agent/update: cozeIdentity unchanged, noop",{agentId:r}),{ok:!0};try{await Rr(n.workspace,n.framework,e.cozeIdentity)}catch(i){throw ne.error("_agent/update: writeInstructionFile failed, aborting update",{agentId:r,framework:n.framework,workspace:n.workspace,err:String(i)}),new _("AGENT_PROTOCOL_ERROR",`failed to write instruction file for agent ${r}: ${String(i)}`,{cause:i})}return n.cozeIdentity=e.cozeIdentity,await Te(n),ne.info("_agent/update: cozeIdentity rewritten",{agentId:r,framework:n.framework}),this.reloadAgentSessions(r,"identity-changed"),{ok:!0}}async disconnectAgent(e){let r=e.agentId;if(!r)throw new _("IPC_BAD_REQUEST","_agent/disconnect: missing agentId");let n=await ue(r);return n?(n.disconnectedAt=Date.now(),n.disconnectReason=e.reason??"",await Te(n),ne.info("agent disconnected",{agentId:r,reason:e.reason??"",force:e.force??!1}),this.opts.disposeAndMarkDisconnected&&await this.opts.disposeAndMarkDisconnected(r,e.reason??"disconnect"),{ok:!0}):(ne.warn("_agent/disconnect: agent not found, ignoring",{agentId:r}),{ok:!0})}async switchModel(e){if(wt(e._meta,"_agent/switchModel"),!e.agentId)throw new _("IPC_BAD_REQUEST","_agent/switchModel: missing agentId");let r=$a(e.model)??qe,n=await ue(e.agentId);if(!n)throw new _("AGENT_NOT_FOUND",`agent not found: ${e.agentId}`);n.model=r,e.modelInfo&&(n.modelInfo=e.modelInfo),await Te(n),ne.info("_agent/switchModel: model persisted",{agentId:e.agentId,model:r,reason:e.reason??""});let i=this.opts.agents.get(e.agentId);if(!i)return ne.info("_agent/switchModel: agent not running, config persisted only",{agentId:e.agentId}),{ok:!0};i.model=r,e.modelInfo&&i.setModelInfo(e.modelInfo),this.opts.cleanupOpenclawProviders&&await this.opts.cleanupOpenclawProviders(i).catch(o=>ne.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: ${r}`).catch(()=>{}),c.downstream=void 0)}));return await Promise.all(s),ne.info("_agent/switchModel: all session runtimes killed, next prompt will respawn",{agentId:e.agentId,model:r,cloudSessions:s.length}),{ok:!0}}async resetAgent(e){if(wt(e._meta,We.RESET),!e.agentId)throw new _("IPC_BAD_REQUEST",`${We.RESET}: missing agentId`);return await this.clearSessionMappings(e.agentId,We.RESET),await this.runDetailSync(e.agentId,We.RESET,e.reason),{ok:!0}}async clearSessionMappings(e,r){let n=this.opts.agents.get(e);if(!n){await this.clearPersistedAcpSessionIds(e),ne.info("reset: agent not in memory, cleared persisted acpSessionIds only",{agentId:e});return}await n.killAllRuntimes(r);for(let s of n.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 n.sessions)i.set(s,{modelToken:o.modelToken,tokenGeneratedAt:o.tokenGeneratedAt});await mn(e,i)}async clearPersistedAcpSessionIds(e){let r=await ue(e).catch(()=>null);if(!r?.sessions)return;let n=!1;for(let i of Object.values(r.sessions))i.acpSessionId&&(i.acpSessionId=void 0,n=!0);n&&await Te(r)}async repairAgent(e){if(wt(e._meta,We.REPAIR),!e.agentId)throw new _("IPC_BAD_REQUEST",`${We.REPAIR}: missing agentId`);let r=await this.loadAgentCfg(e.agentId);if(r&&r.framework!=="openclaw")throw new _("IPC_BAD_REQUEST",`${We.REPAIR} only allowed for openclaw, got ${r.framework}`);if(r&&this.opts.openclawRepair)try{await this.opts.openclawRepair(e.agentId,r.workspace)}catch(n){ne.warn("openclaw repair (delete+add) failed (ignored)",{agentId:e.agentId,reason:e.reason,err:String(n)})}return await this.runDetailSync(e.agentId,We.REPAIR,e.reason),{ok:!0}}async runDetailSync(e,r,n){if(!this.opts.detailSyncer){ne.warn("detailSyncer not wired, skipping sync",{method:r,agentId:e});return}try{await this.opts.detailSyncer(e)}catch(i){ne.warn("detail sync failed (ignored)",{method:r,agentId:e,reason:n,err:String(i)})}}async getFileTree(e){wt(e._meta,"_agent/getFileTree");let r=e._meta,n=Gr(r),i=await this.resolveWorkspace(n),s=e.filePath??"",o=this.safeJoin(i,s),a=await ja(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 gn(o,i))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${s}`);let c=n_(e.depth);return a.isDirectory()?{tree:await r_(i,o,s,c)}:{tree:[{name:i_(s),path:rh(s||"."),isDir:!1,size:a.size,modifiedAt:Math.floor(a.mtimeMs)}]}}async getFileContent(e){wt(e._meta,"_agent/getFileContent");let r=Gr(e._meta),n=await this.resolveWorkspace(r);if(!e.filePath)throw new _("IPC_BAD_REQUEST","filePath required");let i=this.safeJoin(n,e.filePath),s=await ja(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 gn(i,n))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${e.filePath}`);if(s.size>Zu)throw new _("IPC_BAD_REQUEST",`file too large: ${s.size} bytes (max ${Zu})`);let o=await Ku(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 r=this.opts.agents.get(e);return r?r.workspace:(await ue(e).catch(()=>null))?.workspace??ve(e).workspace}safeJoin(e,r){let n=Ja(e,r||"."),i=Za(e,n);if(i.startsWith("..")||i===".."||i.startsWith(`..${Xu}`))throw new _("IPC_BAD_REQUEST",`path escapes workspace: ${r}`);return n}loadAgentCfg(e){return ue(e)}async requireAgentCfg(e){let r=await this.loadAgentCfg(e);if(!r)throw new _("AGENT_NOT_FOUND",`no config for agent: ${e}`);return r}};function Gy(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 Hy(t){return t==="claude-code"?nt(".claude","skills"):nt(".agents","skills")}var jy=3e4,Wy=50*1024*1024,jr=3e4;async function Ka(t){let{agentId:e,workspace:r,framework:n,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=Gy(i.skillName),c=Hy(n),l=nt(c,a),d=nt(r,l);if(await Wa(d,{recursive:!0}),s){let m=Buffer.from(i.content,"utf8");qn(m.length),await qa(nt(d,"SKILL.md"),m,"utf8")}else{let m=await Jy(i.downloadUrl);Zy(m)?await Qy(m,d):Ky(m)?await Xy(m,d):await qa(nt(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 ne.info("skill installed",{agentId:e,skillId:i.skillId,skillName:i.skillName,relPath:l,source:s?"content":"downloadUrl"}),p}function Xa(t,e,r){let n=e.get(r.skillId);if(n!==void 0){t[n]=r;return}e.set(r.skillId,t.length),t.push(r)}function qy(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 Jy(t){if(!t)throw new _("IPC_BAD_REQUEST","skill missing downloadUrl");if(t.startsWith("data:")){let e=Math.floor(t.length*3/4);qn(e);let r=Vy(t);return qn(r.length),r}if(t.startsWith("file:")){let e=new URL(t).pathname,r=await Ku(e);return qn(r.length),r}if(Ts(t)){let e=new AbortController,r=setTimeout(()=>e.abort(),jy);try{let n=await fetch(t,{signal:e.signal});if(!n.ok)throw new _("IPC_BAD_REQUEST",`fetch skill failed HTTP ${n.status} ${t}`);let i=await n.arrayBuffer();return qn(i.byteLength),Buffer.from(i)}finally{clearTimeout(r)}}throw new _("IPC_BAD_REQUEST",`unsupported downloadUrl scheme (\u8981 https/data/file): ${t.slice(0,80)}`)}function qn(t){if(t>Wy)throw new _("IPC_BAD_REQUEST",`skill too large: ${t} bytes`)}function Vy(t){let e=/^data:([^,;]*)(;base64)?,(.*)$/s.exec(t);if(!e)throw new _("IPC_BAD_REQUEST","bad data URL");let r=!!e[2],n=e[3]??"";return r?Buffer.from(n,"base64"):Buffer.from(decodeURIComponent(n),"utf8")}function Zy(t){return t.length>=2&&t[0]===31&&t[1]===139}function Ky(t){if(t.length<4||t[0]!==80||t[1]!==75)return!1;let e=t[2],r=t[3];return e===3&&r===4||e===5&&r===6}function Va(t){return t==="__MACOSX"||t.startsWith("__MACOSX/")}async function Xy(t,e){let r,n;try{r=new eh.default(t),n=r.getEntries()}catch(o){throw new _("IPC_BAD_REQUEST",`zip parse failed: ${o.message}`,{cause:o})}for(let o of n){let a=o.entryName;if(!a||Va(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=Yy(n),s=Ja(e);for(let o of n){if(Va(o.entryName))continue;let a=o.entryName;if(i&&a.startsWith(i)&&(a=a.slice(i.length)),!a)continue;let c=Ja(e,a),l=Za(s,c);if(l.startsWith("..")||l==="..")throw new _("IPC_BAD_REQUEST",`zip entry escapes destDir: ${a}`);if(o.isDirectory){await Wa(c,{recursive:!0});continue}await Wa(My(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 qa(c,d)}}function Yy(t){let e;for(let r of t){let n=r.entryName;if(!n||Va(n))continue;let i=n.indexOf("/");if(i<=0)return;let s=n.slice(0,i+1);if(e===void 0)e=s;else if(e!==s)return}return e}async function Qy(t,e){await e_(t);let r=Ou({cwd:e,strip:1}),n=!1,i=setTimeout(()=>{n=!0,r.destroy(new _("IPC_BAD_REQUEST",`tar extract timeout (${jr}ms)`))},jr);try{await Qu(Yu.from(t),r)}catch(s){throw s instanceof _?s:n?new _("IPC_BAD_REQUEST",`tar extract timeout (${jr}ms)`):new _("IPC_BAD_REQUEST",`tar extract failed: ${s.message??String(s)}`,{cause:s})}finally{clearTimeout(i)}}async function e_(t){let e=[],r=$r({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}`)}}),n=!1,i=setTimeout(()=>{n=!0,r.destroy(new _("IPC_BAD_REQUEST",`tar list timeout (${jr}ms)`))},jr);try{await Qu(Yu.from(t),r)}catch(s){throw n?new _("IPC_BAD_REQUEST",`tar list timeout (${jr}ms)`):new _("IPC_BAD_REQUEST",`tar list failed: ${s.message??String(s)}`,{cause:s})}finally{clearTimeout(i)}if(e.length>0)throw new _("IPC_BAD_REQUEST",e[0]??"tar entry validation failed")}var t_=5e3;async function r_(t,e,r,n){return th(t,e,r,n,{count:0})}async function th(t,e,r,n,i){if(n<=0)return[];let s;try{s=await Ny(e,{withFileTypes:!0})}catch{return[]}let o=[];for(let a of s){if($y.has(a.name)||a.isSymbolicLink())continue;if(i.count>=t_){o.push({name:"...",path:"...",isDir:!1,size:0,modifiedAt:0,hasMore:!0});break}let c=nt(e,a.name),l=By(nt(r,a.name)),d=null;try{d=await ja(c)}catch{continue}if(d.isSymbolicLink())continue;i.count++;let p={name:a.name,path:rh(Za(t,c)),isDir:d.isDirectory(),size:d.size,modifiedAt:Math.floor(d.mtimeMs)};d.isDirectory()&&n>1&&(p.children=await th(t,c,l,n-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 n_(t){return!t||t<=0?Uy:Math.min(t,zy)}function i_(t){if(!t||t==="."||t==="/")return".";let e=t.split(/[/\\]/);return e[e.length-1]||"."}function rh(t){return t.split(Xu).join("/")}F();import{readFileSync as Zk}from"node:fs";import{dirname as Xk,join as Yk}from"node:path";import{fileURLToPath as eb}from"node:url";var Wr="0.1.90";var Ut=x("agent-health-reporter"),s_=1e4,Jn=class{constructor(e){this.opts=e;this.intervalMs=e.intervalMs??s_}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 r=[];for(let o of this.opts.core.agents.values()){let a=o_(o);if(!a)continue;let c={agentId:o.agentId,status:a};o.patToken&&(c.patToken=o.patToken),o.accountId&&(c.accountId=o.accountId),r.push(c)}if(r.length===0)return;let n={agents:r,bridgeVersion:Wr,_meta:{cozeDeviceId:e}},i;try{i=await this.opts.core.sendRequest("_agent/health",n,5e3)}catch(o){Ut.warn("heartbeat batch send failed",{count:r.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(r){Ut.warn("onTickEnd hook failed",{err:String(r)})}}};function o_(t){return t.status==="error"?"error":t.activeTriggers.size>0?"busy":t.status==="ok"?"online":null}Rt();import{chmod as L_,mkdir as Ms,rm as F_,stat as M_,writeFile as B_}from"node:fs/promises";import{homedir as U_}from"node:os";import{join as wh}from"node:path";Vt();import{spawnSync as p_}from"node:child_process";function Vn(t,e,r){return r===void 0?{jsonrpc:"2.0",id:t,method:e}:{jsonrpc:"2.0",id:t,method:e,params:r}}function Zn(t,e){return e===void 0?{jsonrpc:"2.0",method:t}:{jsonrpc:"2.0",method:t,params:e}}function qr(t,e){return{jsonrpc:"2.0",id:t,result:e}}function zt(t,e){return{jsonrpc:"2.0",id:t,error:e}}Ee();var xs=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)}},M={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};function nh(t){return"method"in t&&"id"in t&&t.id!==void 0}function ih(t){return"method"in t&&!("id"in t)}function Os(t){return!("method"in t)&&"id"in t}var a_={AGENT_NOT_FOUND:M.AGENT_NOT_FOUND,AGENT_BUSY:M.AGENT_BUSY,AGENT_DISCONNECTED:M.AGENT_DISCONNECTED,AGENT_TIMEOUT:M.AGENT_TIMEOUT,AGENT_FRAME_IDLE_TIMEOUT:M.AGENT_FRAME_IDLE_TIMEOUT,AGENT_SPAWN_FAILED:M.AGENT_SPAWN_FAILED,AGENT_PROTOCOL_ERROR:M.INTERNAL_ERROR,BRIDGE_CONFIG_INVALID:M.INTERNAL_ERROR,BRIDGE_INTERNAL:M.INTERNAL_ERROR,IPC_AUTH_FAILED:M.INTERNAL_ERROR,IPC_BAD_REQUEST:M.INVALID_REQUEST,MODEL_TOKEN_GEN_FAILED:M.MODEL_TOKEN_GEN_FAILED,MODEL_MODALITY_UNSUPPORTED:M.MODEL_MODALITY_UNSUPPORTED,OPERATION_NOT_ALLOWED_FOR_LOCAL:M.OPERATION_NOT_ALLOWED_FOR_LOCAL,UPSTREAM_DISCONNECTED:M.INTERNAL_ERROR,UPSTREAM_HANDSHAKE_FAILED:M.INTERNAL_ERROR,PATH_OUTSIDE_WORKSPACE:M.PATH_OUTSIDE_WORKSPACE,FILE_TOO_LARGE:M.FILE_TOO_LARGE,UNSUPPORTED_MIME:M.UNSUPPORTED_MIME,UPLOAD_FAILED:M.UPLOAD_FAILED,UPSTREAM_NOT_READY:M.UPSTREAM_NOT_READY,AGENT_DEPENDENCY_INSTALL_FAILED:M.AGENT_DEPENDENCY_INSTALL_FAILED};function c_(t){if(t!=null)return t instanceof Error?{name:t.name,message:Kn(t.message)}:typeof t=="string"?Kn(t):typeof t=="object"?d_(t):t}var l_=[[/\/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 Kn(t){let e=t;for(let[r,n]of l_)e=e.replace(r,n);return e}function d_(t){let e={};for(let[r,n]of Object.entries(t))typeof n=="string"?e[r]=Kn(n):e[r]=n;return e}function Xn(t){if(t instanceof _){let e=c_(t.cause),r={bridgeCode:t.code,retriable:t.retriable};return e!==void 0&&(r.cause=e),{code:a_[t.code]??M.INTERNAL_ERROR,message:Kn(t.message),data:r}}return{code:M.INTERNAL_ERROR,message:Kn(t instanceof Error?t.message:String(t))}}function sh(t){let e=t.data,r=e?.bridgeCode??"AGENT_PROTOCOL_ERROR",n=!!e&&typeof e.message=="string"&&!!e.message,i=n?e?.message:t.message,s=t.data;if(n&&e){let{message:o,...a}=e;s=a}return new _(r,i,{retriable:e?.retriable??!1,cause:s})}function ah(t){return`${JSON.stringify(t)}
|
|
85
85
|
`}var oh=10*1024*1024,Ps=class{buffer="";onError;constructor(e={}){this.onError=e.onError}push(e){if(this.buffer+=typeof e=="string"?e:e.toString("utf8"),this.buffer.length>oh){let i=this.buffer.length;return this.buffer="",this.onError?.({line:`<buffer overflow: ${i} bytes, dropped>`,error:new Error(`LdjsonDecoder buffer exceeded ${oh} bytes`)}),[]}let r=this.buffer.split(`
|
|
86
86
|
`);this.buffer=r.pop()??"";let n=[];for(let i of r){let s=i.replace(/\r$/,"").trim();if(s)try{n.push(JSON.parse(s))}catch(o){this.onError?.({line:s,error:o})}}return n}flush(){if(!this.buffer)return[];let e=this.buffer.replace(/\r$/,"").trim();if(this.buffer="",!e)return[];try{return[JSON.parse(e)]}catch(r){return this.onError?.({line:e,error:r}),[]}}};var lh={"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"},ub=Object.fromEntries(Object.entries(lh).map(([t,e])=>[e,t])),u_={"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:[]},Jr=class{seq=0;next(e,r){this.seq+=1;let n=lh[e]??h_(e),i=u_[n]??[],s=[n,String(this.seq)];if(i.length>0){let o=i.map(c=>ch(r?.[c]??"")),a=f_(o).join(":");a&&s.push(a)}else r&&Object.values(r).some(o=>o)&&s.push(Object.values(r).filter(Boolean).map(o=>ch(String(o))).join(":"));return s.join("_")}reset(){this.seq=0}};function h_(t){return t.replace(/[\s/]+/g,".").replace(/_+/g,"-")}function ch(t){return t.replace(/[:_\s]+/g,"-")}function f_(t){let e=t.length;for(;e>0&&!t[e-1];)e-=1;return t.slice(0,e)}Tt();Ei();Ee();F();var g_=vt("COZE_BRIDGE_INITIALIZE_TIMEOUT_MS",3e4),m_=200,w_=vt("COZE_BRIDGE_SESSION_PROMPT_MAX_MS",3600*1e3),y_=vt("COZE_BRIDGE_SESSION_PROMPT_FRAME_IDLE_MS",600*1e3),dh=500;function __(t){try{let e=JSON.stringify(t);return e===void 0||e.length<=dh?t:`${e.slice(0,dh)}...<truncated, total ${e.length} chars>`}catch{return"<unserializable>"}}function uh(t,e){if(!(typeof t!="number"||t<=0))try{if(process.platform==="win32"){let r=["/PID",String(t),"/T"];e==="SIGKILL"&&r.push("/F"),p_("taskkill",r,{stdio:"ignore",windowsHide:!0})}else process.kill(-t,e)}catch{}}var it=class{constructor(e){this.opts=e;this.log=x(`downstream.${this.constructor.name}`,this.opts.agentId),this.decoder=new Ps({onError:r=>this.log.warn("decode line failed",{line:r.line})})}opts;child;decoder;pending=new Map;inflightAgentRequests=new Map;idAllocator=new Jr;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",r=De(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=r,r.stdout?.setEncoding("utf8"),r.stdout?.on("data",n=>{try{for(let i of this.decoder.push(n))this.dispatch(i)}catch(i){this.log.warn("stdout dispatch threw, swallowed to keep daemon alive",{err:String(i)})}}),r.stderr?.setEncoding("utf8"),r.stderr?.on("data",n=>{let i=n.trimEnd();this.stderrRing.push(i),this.stderrRing.length>m_&&this.stderrRing.shift(),this.log.debug("stderr",{text:i})}),r.stdin?.on("error",n=>{this.log.warn("child stdin error",{err:String(n)})}),r.stdout?.on("error",n=>{this.log.warn("child stdout error",{err:String(n)})}),r.stderr?.on("error",n=>{this.log.warn("child stderr error",{err:String(n)})}),r.on("exit",(n,i)=>{this.stopped=!0,(n!==0||i!==null)&&this.stderrRing.length>0&&this.log.warn("downstream exited abnormally, recent stderr",{code:n,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 (${n}/${i})`));for(let o of this.exitHandlers)o(n,i)}),r.on("error",n=>{this.log.error("child error",{err:String(n)}),this.failAllPending(new _("AGENT_SPAWN_FAILED",String(n),{cause:n}))}),this.log.info("downstream started",{command:this.opts.command,pid:r.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 r=this.child,n=new Promise(s=>r.once("exit",()=>s()));uh(r.pid,"SIGTERM");let i=setTimeout(()=>{r.killed||uh(r.pid,"SIGKILL")},5e3);try{await n}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,r=w_,n=y_){return this.call("session/prompt",e,r,n)}async sessionCancel(e){!this.child||this.stopped||this.writeFrame(Zn("session/cancel",e))}onUpdate(e){this.updateHandlers.push(e)}onAgentRequest(e){this.agentRequestHandlers.push(e)}respondAgentRequest(e,r){if(this.inflightAgentRequests.delete(e),!(!this.child||this.stopped))try{this.writeFrame(qr(e,r))}catch(n){this.log.warn("respondAgentRequest write failed",{id:e,err:String(n)})}}respondAgentRequestError(e,r){if(this.inflightAgentRequests.delete(e),!(!this.child||this.stopped))try{this.writeFrame(zt(e,r))}catch(n){this.log.warn("respondAgentRequestError write failed",{id:e,err:String(n)})}}onExit(e){this.exitHandlers.push(e)}call(e,r,n=g_,i=0){if(!this.child||this.stopped)return Promise.reject(new _("AGENT_PROTOCOL_ERROR","downstream not started"));let s=this.idAllocator.next(e),o=Vn(s,e,r),a=(()=>{if(typeof r!="object"||r===null)return;let d=r.sessionId;return typeof d=="string"?d:void 0})(),c=n>0&&Number.isFinite(n),l=i>0&&Number.isFinite(i);return new Promise((d,p)=>{let m={resolve:d,reject:p,timer:null,frameIdleTimer:null,armFrameIdle:null,method:e};c&&(m.timer=setTimeout(()=>{this.pending.delete(s),m.frameIdleTimer&&clearTimeout(m.frameIdleTimer),this.log.warn("downstream call timeout",{id:s,method:e,timeoutMs:n,...a?{sessionId:a}:{}}),p(new _("AGENT_TIMEOUT",`${e} timed out after ${n}ms`))},n));let h=l?()=>{m.frameIdleTimer&&clearTimeout(m.frameIdleTimer),m.frameIdleTimer=setTimeout(()=>{if(this.inflightAgentRequests.size>0){this.log.debug("frame-idle fired but agent request inflight, re-arming",{id:s,method:e,inflight:this.inflightAgentRequests.size,...a?{sessionId:a}:{}}),h?.();return}m.timer&&clearTimeout(m.timer),this.pending.delete(s),this.log.warn("frame-idle timeout, rejecting pending call",{id:s,method:e,frameIdleMs:i,...a?{sessionId:a}:{}}),p(new _("AGENT_FRAME_IDLE_TIMEOUT",`${e} no session/update for ${i}ms (no inflight agent request)`))},i)}:null;m.armFrameIdle=h,this.pending.set(s,m),h?.();try{this.writeFrame(o)}catch(f){m.timer&&clearTimeout(m.timer),m.frameIdleTimer&&clearTimeout(m.frameIdleTimer),this.pending.delete(s),p(f)}})}writeFrame(e){if(!this.child?.stdin||this.child.stdin.destroyed)throw new _("AGENT_PROTOCOL_ERROR","downstream stdin not writable");this.child.stdin.write(ah(e),r=>{r&&this.log.warn("stdin write callback err",{err:String(r)})})}dispatch(e){if(Os(e)){let r=e.id!==null?this.pending.get(e.id):void 0;if(!r){this.log.warn("orphan response",{id:e.id});return}this.pending.delete(e.id),r.timer&&clearTimeout(r.timer),r.frameIdleTimer&&clearTimeout(r.frameIdleTimer),e.error?(this.log.warn("downstream returned error frame",{id:e.id,method:r.method,code:e.error.code,message:e.error.message,data:e.error.data}),r.reject(sh(e.error))):e.result===void 0?(this.log.warn("downstream response missing both result and error",{id:e.id,method:r.method}),r.reject(new _("AGENT_PROTOCOL_ERROR",`${r.method} response missing both result and error`))):(this.log.info("downstream returned result",{id:e.id,method:r.method,result:__(e.result)}),r.resolve(e.result));return}if(ih(e)){if(e.method==="session/update"){for(let r of this.pending.values())r.armFrameIdle?.();for(let r of this.updateHandlers)try{Promise.resolve(r(e.params)).catch(n=>this.log.warn("update handler failed (async)",{err:String(n)}))}catch(n){this.log.warn("update handler threw sync, swallowed",{err:String(n)})}}else this.log.info("unknown notification (drop, not forwarded)",{method:e.method});return}if(nh(e)){let r=e;try{this.handleAgentRequest(r).catch(n=>this.log.error("agent request handler failed (async)",{method:r.method,err:String(n)}))}catch(n){this.log.warn("handleAgentRequest threw sync, swallowed",{method:r.method,err:String(n)})}}}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 r of this.agentRequestHandlers)try{await r(e)}catch(n){this.log.error("agentRequestHandler threw",{method:e.method,err:String(n)});try{this.writeFrame(zt(e.id,Xn(n)))}catch{}this.inflightAgentRequests.delete(e.id)}}failAllPending(e){for(let r of this.pending.values())r.timer&&clearTimeout(r.timer),r.frameIdleTimer&&clearTimeout(r.frameIdleTimer),r.reject(e);this.pending.clear(),this.inflightAgentRequests.clear()}};function E_(t){let e={};for(let[r,n]of Object.entries(t))n!==void 0&&(r.startsWith("CLAUDE")||r==="AI_AGENT"||r==="BAGGAGE"||(e[r]=n));return e}var Cs=class extends it{framework="claude-code";constructor(e){let r=pn("claude-code",e.command),n=e.args??[],i={command:r,args:n,cwd:e.cwd,agentId:e.agentId,...e.env?{env:e.env}:{}};super(i)}sanitizeEnv(e){return E_(e)}};Vt();import{mkdtempSync as S_,rmSync as I_}from"node:fs";import{tmpdir as v_}from"node:os";import{join as T_}from"node:path";var Ds=class extends it{framework="codex";authMethodId;codexHomeDir;constructor(e){let r=pn("codex",e.command),n=e.args??[],i=e.extraArgs?[...n,...e.extraArgs]:n,s=e.isolateCodexHome?S_(T_(v_(),"coze-bridge-codex-home-")):void 0,o=s?{...e.env??{},CODEX_HOME:s}:e.env,a={command:r,args:i,cwd:e.cwd,agentId:e.agentId,...o?{env:o}:{}};super(a),this.authMethodId=e.authMethodId,this.codexHomeDir=s}async initialize(e){let r=await super.initialize(e);return this.authMethodId&&await this.call("authenticate",{methodId:this.authMethodId}),r}async stop(e){if(await super.stop(e),this.codexHomeDir)try{I_(this.codexHomeDir,{recursive:!0,force:!0})}catch{}}};var R_=3e4,Vr=class extends it{framework="openclaw";agentId;sessionName;slashModelOnStart;constructor(e){let r=e.sessionName??"default",n=["acp","--session",`agent:${e.agentId}:${r}`];e.gatewayToken&&n.push("--token",e.gatewayToken);let i={command:e.command,args:n,cwd:e.cwd,agentId:e.agentId,...e.env?{env:e.env}:{}};super(i),this.agentId=e.agentId,this.sessionName=r,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}`}]},R_))}get acpSessionName(){return this.sessionName}};Ee();F();se();function Ya(t){return t.replace(/[^A-Za-z0-9._-]+/g,"-")}Vt();var Zr=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((r,n)=>{this.slots.push({task:e,resolve:r,reject:n}),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 r=await e.task();e.resolve(r)}catch(r){e.reject(r)}}}finally{this.running=!1}}}};var Ns=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 r=this.sessionQueues.get(e);return(!r||r.isDisposed)&&(r=new Zr,this.sessionQueues.set(e,r)),r}allSessionQueues(){return this.sessionQueues.entries()}hasSessionQueue(e){let r=this.sessionQueues.get(e);return!!r&&!r.isDisposed}async dispose(e){this.status="stopped";let r=new Error(`AgentSession disposed${e?`: ${e}`:""}`);for(let n of this.sessionQueues.values())n.dispose(r);this.sessionQueues.clear(),await this.killAllRuntimes(e??"dispose")}async killAllRuntimes(e){let r=[];for(let[,n]of this.sessions)Yn(n),n.downstream&&(r.push(n.downstream.stop(e).catch(()=>{})),n.downstream=void 0);await Promise.all(r),this.activeTriggers.clear(),this.activeGroupIds.clear()}};function Yn(t){t.idleTimer&&(clearTimeout(t.idleTimer),t.idleTimer=void 0)}Tt();F();import{constants as hh,access as k_}from"node:fs/promises";import{delimiter as b_,join as A_}from"node:path";var $t=x("framework-detector"),fh={"claude-code":"claude",codex:"codex",openclaw:"openclaw"},x_=[".exe",".cmd",".bat",".ps1"],Gt=class{env;constructor(e={}){this.env={pathEnv:e.pathEnv??process.env.PATH??"",platform:e.platform??process.platform,spawn:e.spawn??De,access:e.access??k_}}async detect(e){let r=fh[e],n=await this.which(r);if(!n)return $t.debug("framework binary not found",{framework:e,bin:r}),null;let i=e==="openclaw"?["--log-level","silent"]:[],[s,o]=await Promise.all([this.probeVersion(n,i),e==="openclaw"?this.probeOpenclawDefaultAgent(n):Promise.resolve(null)]),a={path:n,version:s};return o&&(a.defaultAgent=o),a}async detectAll(){let e=await Promise.all(Object.keys(fh).map(async n=>[n,await this.detect(n)])),r={};for(let[n,i]of e)i&&(r[n]=i);return r}async which(e){let r=this.env.pathEnv.split(b_).filter(Boolean),n=this.env.platform==="win32"?["",...x_]:[""];for(let i of r)for(let s of n){let o=A_(i,e+s);if(await this.isExecutable(o))return o}return null}async isExecutable(e){try{let r=this.env.platform==="win32"?hh.F_OK:hh.X_OK;return await this.env.access(e,r),!0}catch{return!1}}async probeOpenclawDefaultAgent(e){let r=await this.runProbe(e,["--log-level","silent","agents","list","--json"]);if(!r)return $t.warn("openclaw default agent probe: runProbe returned null (spawn err / timeout)",{path:e}),null;if(r.code!==0)return $t.warn("openclaw default agent probe: non-zero exit",{path:e,code:r.code,stdoutHead:r.stdout.slice(0,200)}),null;let n=r.stdout.match(/\[\s*\{[\s\S]*\}\s*\]/);if(!n)return $t.warn("openclaw default agent probe: regex no match (no JSON array in stdout)",{path:e,stdoutHead:r.stdout.slice(0,200)}),null;try{let i=JSON.parse(n[0]);if(!Array.isArray(i))return $t.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?($t.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}:($t.info("openclaw default agent probe: no agent has isDefault=true",{path:e,agentCount:i.length}),null)}catch(i){return $t.warn("openclaw default agent probe: JSON.parse failed",{path:e,err:String(i),matchHead:n[0].slice(0,200)}),null}}async probeVersion(e,r=[]){let n=await this.runProbe(e,[...r,"--version"]);return n&&(P_(n.stdout).split(/\r?\n/)[0]??"").trim()||"unknown"}runProbe(e,r){return new Promise(n=>{let i="",s=!1,o,a=c=>{s||(s=!0,o&&clearTimeout(o),n(c))};try{let c=this.env.spawn(e,r,{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)}})}},O_=new RegExp("\x1B\\[[0-9;]*[A-Za-z]","g");function P_(t){return t.replace(O_,"")}import{homedir as C_}from"node:os";import{join as D_}from"node:path";Tt();Ee();Pi();F();async function mh(){let t=D_(C_(),".openclaw/openclaw.json");return(await Tr(t))?.gateway?.auth?.token??""}var ph=x("openclaw.config"),N_=[0,5e3,5e3],gh="models.providers.",Ls="agents.defaults.models",Fs=class{command;env;retryDelaysMs;queue=new Zr;constructor(e){this.command=e.command,this.env=e.env??process.env,this.retryDelaysMs=e.retryDelaysMs??N_}async withRetry(e,r){let n;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 r()}catch(o){n=o,ph.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: ${n?.message??"unknown"}`)}runCli(e){return new Promise((r,n)=>{let i=De(this.command,e,{stdio:["ignore","pipe","pipe"],env:this.env}),s="";i.stderr?.on("data",o=>{s+=o.toString("utf8")}),i.on("error",n),i.on("close",o=>{o===0?r():n(new Error(`exit ${o}: ${s.trim().slice(0,500)}`))})})}async runCliTolerant(e,r){try{await this.runCli(e)}catch(n){let i=String(n);if(r.some(s=>i.includes(s)))return;throw n}}async bestEffortUnset(e,r){try{await this.queue.enqueue(()=>this.withRetry(e,()=>this.runCli(["config","unset",r])))}catch(n){ph.warn(`${e} failed (best-effort)`,{configPath:r,err:String(n)})}}ensureProvider(e,r){return this.queue.enqueue(()=>this.withRetry(`config set models.providers.${e}`,()=>this.runCli(["config","set",`${gh}${e}`,JSON.stringify(r),"--strict-json","--merge"])))}removeProvider(e){return this.bestEffortUnset(`config unset models.providers.${e}`,`${gh}${e}`)}addModelToAllowlist(e,r){let n={[e]:r?{alias:r}:{}};return this.queue.enqueue(()=>this.withRetry(`config set ${Ls}[${e}]`,()=>this.runCli(["config","set",Ls,JSON.stringify(n),"--strict-json","--merge"])))}removeModelFromAllowlist(e){return this.bestEffortUnset(`config unset ${Ls}[${e}]`,`${Ls}.${e}`)}ensureAgent(e,r,n){let i=["agents","add",e,"--workspace",r,"--non-interactive"];return n&&i.push("--model",n),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 V=x("agent-manager"),z_=(t,e,r,n,i,s,o,a,c)=>{switch(t){case"claude-code":{let l={...i?{...Hu(i),...qu(i,o,a)}:{},...c??{},IS_SANDBOX:"1"};return new Cs({cwd:r,env:l,agentId:n})}case"codex":{let d=[...i?[...ju(i),...Vu(i,o,a)]:[],"-c",'sandbox_mode="danger-full-access"',"-c",'approval_policy="never"'],p={...i?Wu(i):{},...c??{}},m=!!i;return new Ds({cwd:r,agentId:n,...d.length>0?{extraArgs:d}:{},...Object.keys(p).length>0?{env:p}:{},...m?{authMethodId:"openai-api-key",isolateCodexHome:!0}:{}})}case"openclaw":return new Vr({command:e,cwd:r,agentId:n,...s?{sessionName:Ya(s)}:{}})}};function Qa(t){return t==="claude-code"||t==="codex"}function $_(t){let e=[],r=Object.keys(t).sort();for(let n of r){let i=t[n];i!==void 0&&(G_(i)||e.push(`${n}=${i}`))}return e.length===0?"":`${e.join(`
|
|
87
87
|
`)}
|
package/package.json
CHANGED