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