@reason-machines/cli-linux-x64 0.2.408 → 0.2.410
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/bin/reason +2 -2
- package/bin/vm-hands/api-cjv8m2zy.js +2 -0
- package/bin/vm-hands/api-credentials-m5akr9fv.js +2 -0
- package/bin/vm-hands/connect-cli-nydbj6ae.js +2 -0
- package/bin/vm-hands/custom-endpoint-device-dkqb4rqy.js +2 -0
- package/bin/vm-hands/desktop-account-5v7x0ajx.js +2 -0
- package/bin/vm-hands/device-workspace-p9q9dckg.js +2 -0
- package/bin/vm-hands/{fsevents-vgg0dny6.js → fsevents-ekt70rcc.js} +1 -1
- package/bin/vm-hands/hands-worker-source-cgrpm21b.js +2 -0
- package/bin/vm-hands/{index-kx10kwyx.js → index-k8kcz8a3.js} +11 -11
- package/bin/vm-hands/install-receipt-7vt2y2vh.js +2 -0
- package/bin/vm-hands/local-automation-y9kx76wa.js +2 -0
- package/bin/vm-hands/local-capabilities-j6h63m79.js +2 -0
- package/bin/vm-hands/local-desktop-users-q886k0mm.js +2 -0
- package/bin/vm-hands/local-display-mac-w85956f1.js +2 -0
- package/bin/vm-hands/local-display-session-ftt74eb3.js +2 -0
- package/bin/vm-hands/local-pty-session-5f50sqq0.js +2 -0
- package/bin/vm-hands/managed-runtime-tjwpypgf.js +2 -0
- package/bin/vm-hands/network-contract-9x9kc5vv.js +2 -0
- package/bin/vm-hands/package-78fkast4.js +2 -0
- package/bin/vm-hands/permissions-byngw8v0.js +2 -0
- package/bin/vm-hands/reason-hands-protocol-2tnghj3b.js +2 -0
- package/bin/vm-hands/serve-service-j5wnq4bg.js +2 -0
- package/bin/vm-hands/status-8tjada6n.js +10 -0
- package/bin/vm-hands/version-5hrs2hvb.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-e5hbehqn.js → vm-hands-entry-lite-05rrh8yg.js} +16 -16
- package/bin/vm-hands/{vm-hands-entry-lite-wyh6dp1t.js → vm-hands-entry-lite-09m2cdkw.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-0g9xvgdy.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-4aejamqr.js → vm-hands-entry-lite-0xrsph3r.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-wf7ksh4e.js → vm-hands-entry-lite-10sbjfzx.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-fyjzrvj5.js → vm-hands-entry-lite-1cwqa4jr.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-ppytc9k7.js → vm-hands-entry-lite-1rrb66r9.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-pn92kh7b.js → vm-hands-entry-lite-1rtkf2xm.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-4geps3jz.js → vm-hands-entry-lite-1sg8sdw5.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-g3ja0c3y.js → vm-hands-entry-lite-22kfyvnk.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-hee1h411.js → vm-hands-entry-lite-46fkv5sp.js} +10 -10
- package/bin/vm-hands/{vm-hands-entry-lite-snmxxhza.js → vm-hands-entry-lite-66ctbcym.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-hzn1hf0p.js → vm-hands-entry-lite-6aeea05q.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-et2bh990.js → vm-hands-entry-lite-70ba2bqj.js} +22 -22
- package/bin/vm-hands/{vm-hands-entry-lite-hfmydph9.js → vm-hands-entry-lite-80y72d0e.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-mw0gzbds.js → vm-hands-entry-lite-88swf2qr.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-dkcm3hyn.js → vm-hands-entry-lite-89z488gz.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-8ns59paz.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-mvx29q2q.js → vm-hands-entry-lite-8t9xssf9.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-zn0v259d.js → vm-hands-entry-lite-907pa7f9.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-zg3b0c08.js → vm-hands-entry-lite-9ay6f56v.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-wd576mgy.js → vm-hands-entry-lite-9c95p6n9.js} +29 -29
- package/bin/vm-hands/{vm-hands-entry-lite-9ym3sx81.js → vm-hands-entry-lite-ab2m9erf.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-79s23abx.js → vm-hands-entry-lite-b885gwfh.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-51qvfk93.js → vm-hands-entry-lite-bdhjpv7g.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-bk6akkdt.js +540 -0
- package/bin/vm-hands/{vm-hands-entry-lite-5p5h1eng.js → vm-hands-entry-lite-ckv17tn8.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-8evzzh7v.js → vm-hands-entry-lite-eqgj4acy.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-v3xznxcw.js → vm-hands-entry-lite-f5e3dbgk.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-saqdrc2w.js → vm-hands-entry-lite-grm1tqs7.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-8gtgr399.js → vm-hands-entry-lite-gvwdy3rf.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-6p9c8nhf.js → vm-hands-entry-lite-hj8n59y9.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-ym1djztp.js → vm-hands-entry-lite-k278g9kj.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-hcw5tk5d.js → vm-hands-entry-lite-m11j0f9q.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-0n2f3kx7.js → vm-hands-entry-lite-pgb514h0.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-dq1m5ykp.js → vm-hands-entry-lite-q0k6kx6d.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-gc7c22pq.js → vm-hands-entry-lite-qysyf65v.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-762fbns7.js → vm-hands-entry-lite-r29k28kb.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-vrqzr15t.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-6whxyzz2.js → vm-hands-entry-lite-w59z67hf.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-w9ckj5k4.js → vm-hands-entry-lite-zg36myyf.js} +4 -4
- package/bin/vm-hands/vm-hands-entry-lite.js +2 -2
- package/bin/vm-hands/{vm-hands-executor-79av9nam.js → vm-hands-executor-rdmj1wv4.js} +6 -6
- package/bin/vm-hands/vm-hands-op-runner-f2bjvb7v.js +2 -0
- package/bin/vm-hands/{vm-hands-runtime-yacvv937.js → vm-hands-runtime-aa4p4pqz.js} +3 -3
- package/bin/vm-hands/worker-sandbox-smqj3mbe.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-8d760ppa.js +0 -2
- package/bin/vm-hands/api-credentials-eea1g4aw.js +0 -2
- package/bin/vm-hands/connect-cli-m8xafyn5.js +0 -2
- package/bin/vm-hands/custom-endpoint-device-nfjhs9fv.js +0 -2
- package/bin/vm-hands/desktop-account-rx4ajy2j.js +0 -2
- package/bin/vm-hands/device-workspace-n9tn4bzw.js +0 -2
- package/bin/vm-hands/hands-worker-source-yxsap3qk.js +0 -2
- package/bin/vm-hands/install-receipt-rmsjtfqy.js +0 -2
- package/bin/vm-hands/local-automation-7qcnytj6.js +0 -2
- package/bin/vm-hands/local-capabilities-hchsc804.js +0 -2
- package/bin/vm-hands/local-desktop-users-c6858avg.js +0 -2
- package/bin/vm-hands/local-display-mac-zmbp9z4c.js +0 -2
- package/bin/vm-hands/local-display-session-7bgp7gvf.js +0 -2
- package/bin/vm-hands/local-pty-session-8m175hqx.js +0 -2
- package/bin/vm-hands/managed-runtime-nkmg5s5h.js +0 -2
- package/bin/vm-hands/network-contract-qt2s82ap.js +0 -2
- package/bin/vm-hands/package-11mkdcmn.js +0 -2
- package/bin/vm-hands/permissions-67xv16a5.js +0 -2
- package/bin/vm-hands/reason-hands-protocol-r356wr4t.js +0 -2
- package/bin/vm-hands/serve-service-4n7e0b08.js +0 -2
- package/bin/vm-hands/status-e7r62q4e.js +0 -10
- package/bin/vm-hands/version-vdev7tyq.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-8bzqc4xa.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-qffs74x1.js +0 -540
- package/bin/vm-hands/vm-hands-entry-lite-rwr09j4w.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-w8kc4jtb.js +0 -3
- package/bin/vm-hands/vm-hands-op-runner-kh1myd15.js +0 -2
- package/bin/vm-hands/worker-sandbox-x8dsz324.js +0 -2
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{ue,Ee,J,xe,de,Ht,ze,Z,T,H,qr}from"./vm-hands-entry-lite-mvx29q2q.js";import{ji,k,Fe,ye,je,te,Ue,bn,we,Nt,ae,U,N,ce,Pr,Tr,Sn}from"./vm-hands-entry-lite-g3ja0c3y.js";import{ke,ie,pe,X,Ae,q,Y}from"./vm-hands-entry-lite-ym1djztp.js";import{bt,ur,Ze,W,D,O,S}from"./vm-hands-entry-lite-wd576mgy.js";import{pr,hr,an,Li,Le,cn}from"./vm-hands-entry-lite-mw0gzbds.js";import{Rt,j}from"./vm-hands-entry-lite-dq1m5ykp.js";import{Gi,Pn}from"./vm-hands-entry-lite-5p5h1eng.js";import{G}from"./vm-hands-entry-lite-v3xznxcw.js";import{fi}from"./vm-hands-entry-lite-8gtgr399.js";import{b,h,Mi}from"./vm-hands-entry-lite-wyh6dp1t.js";import{E}from"./vm-hands-entry-lite-0n2f3kx7.js";import{jt}from"./vm-hands-entry-lite-snmxxhza.js";import{a,ne,lo}from"./vm-hands-entry-lite-dkcm3hyn.js";import{L,ui,di,mo,y,t,A,ht,o,d,u,i,c,_,oe,s,n}from"./vm-hands-entry-lite-zn0v259d.js";import{hi}from"./vm-hands-entry-lite-4aejamqr.js";import{_o,se,yo,Te,x,Gr,Re,I}from"./vm-hands-entry-lite-zg3b0c08.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{execFile as aa}from"child_process";import{createRequire as ca}from"module";import{win32 as hn}from"path";var da=250,la=50,ua=250,fa=4194304;function Go(e){let l=/^(?:\[([^\]]+)\]|([^:]+)):([0-9]{1,5})$/.exec(e??""),f=Number(l?.[3]);return l&&f<=65535?{address:l[1]??l[2],port:f}:null}function pa(e){let l=[];for(let f of e.split(/\r?\n/)){let g=f.trim().split(/\s+/);if(g[0]!=="TCP"||g.length<5)continue;let w=Go(g[1]),v=Go(g[2]),P=Number(g.at(-1));if(!w||!v||!Number.isSafeInteger(P)||P<0)continue;l.push({pid:P,localAddress:w.address,localPort:w.port,remoteAddress:v.address,remotePort:v.port,listening:v.port===0})}return l}function _a(e){if(e.localAddress==="0.0.0.0"||e.localAddress==="::")return`*:${e.localPort}`;return e.localAddress.includes(":")?`[${e.localAddress}]:${e.localPort}`:`${e.localAddress}:${e.localPort}`}var Vo=(e)=>new Promise((l,f)=>aa(hn.join(Te("win32").split(";")[0],"NETSTAT.EXE"),["-ano"],{timeout:e,maxBuffer:fa,encoding:"utf8",windowsHide:!0,env:Gr()},(g,w)=>g?f(g):l(w)));function zn(e){let l=hn.normalize(e.startsWith("\\\\?\\")?e.slice(4):e);return l.length>3&&l.endsWith("\\")?l.slice(0,-1):l}function ma(e,l){let f=e.toLowerCase(),g=l.toLowerCase();return g===f||g.startsWith(f.endsWith("\\")?f:`${f}\\`)}function qo(e,l,f){let g=e.cwd(f),w=g?zn(g):null;return w&&hn.isAbsolute(w)&&ma(l,w)?w:null}var $t;function _t(){if($t!==void 0)return $t;if($t=null,process.platform!=="win32"||!["x64","arm64"].includes(process.arch))return null;let e;try{e=ca(import.meta.url)("bun:ffi")}catch{return null}let{FFIType:l,ptr:f}=e,g,w;try{g=e.dlopen("kernel32.dll",{CreateToolhelp32Snapshot:{args:[l.u32,l.u32],returns:l.u64},Process32FirstW:{args:[l.u64,l.ptr],returns:l.i32},Process32NextW:{args:[l.u64,l.ptr],returns:l.i32},OpenProcess:{args:[l.u32,l.i32,l.u32],returns:l.u64},ReadProcessMemory:{args:[l.u64,l.u64,l.ptr,l.u64,l.ptr],returns:l.i32},CloseHandle:{args:[l.u64],returns:l.i32}}).symbols,w=e.dlopen("ntdll.dll",{NtQueryInformationProcess:{args:[l.u64,l.i32,l.ptr,l.u32,l.ptr],returns:l.i32}}).symbols}catch{return null}let v=0xFFFFFFFFFFFFFFFFn,P=2,F=1040,R=568,M=(Q,z,C)=>{let re=Buffer.alloc(C);return g.ReadProcessMemory(Q,z,f(re),C,null)?re:null};return $t={processes(){let Q=BigInt(g.CreateToolhelp32Snapshot(P,0));if(Q===v)throw new r("process_inspection_failed","Reading this computer's processes did not complete.");try{let z=Buffer.alloc(R);z.writeUInt32LE(R,0);let C=f(z),re=[];for(let V=g.Process32FirstW(Q,C);V;V=g.Process32NextW(Q,C)){let K=z.toString("utf16le",44,R),_e=K.slice(0,K.includes("\x00")?K.indexOf("\x00"):void 0),ve=z.readUInt32LE(8);if(ve>0)re.push({pid:ve,parentPid:z.readUInt32LE(32),command:_e.replace(/\.exe$/i,"")||null})}return re}finally{g.CloseHandle(Q)}},cwd(Q){let z=BigInt(g.OpenProcess(F,0,Q));if(z===0n)return null;try{let C=Buffer.alloc(48);if(w.NtQueryInformationProcess(z,0,f(C),C.length,null)!==0)return null;let re=M(z,C.readBigUInt64LE(8)+0x20n,8)?.readBigUInt64LE(0),V=re?M(z,re+0x38n,16):null,K=V?.readUInt16LE(0)??0;if(!V||K===0||K%2!==0)return null;return M(z,V.readBigUInt64LE(8),K)?.toString("utf16le")??null}finally{g.CloseHandle(z)}}},$t}function Un(e){if(!e)throw new r("process_inspection_failed","Reading this computer's processes is unavailable.");return e}async function Yo(e,l){let f;try{f=await e(l)}catch{throw new r("process_inspection_failed","Reading this computer's ports did not complete.")}return pa(f)}async function bi(e,l=_t()){let f=Un(l),g=zn(e),w=[];for(let v of f.processes()){if(w.length>=da)break;let P=qo(f,g,v.pid);if(P)w.push({pid:v.pid,command:v.command,cwd:hn.relative(g,P)||"."})}return{processes:w}}async function vi(e,l=_t(),f=Vo){let g=Un(l),w=zn(e),v=(await Yo(f,5000)).filter((M)=>M.listening&&M.pid>0).map((M)=>({pid:M.pid,port:M.localPort,address:_a(M)})).sort((M,Q)=>M.pid-Q.pid||M.port-Q.port||(M.address<Q.address?-1:M.address>Q.address?1:0)),P=[...new Set(v.map((M)=>M.pid))].slice(0,la),F=new Set(P.filter((M)=>qo(g,w,M)!==null));if(F.size===0)return{ports:[]};let R=new Map(g.processes().map((M)=>[M.pid,M.command]));return{ports:v.filter((M)=>F.has(M.pid)).slice(0,ua).map((M)=>({pid:M.pid,command:R.get(M.pid)??null,address:M.address}))}}function Jo(e,l){let f=new Set([l]);for(let g=!0;g;){g=!1;for(let w of e)if(!f.has(w.pid)&&f.has(w.parentPid)&&w.pid!==w.parentPid)f.add(w.pid),g=!0}return f}function ha(e,l,f,g){let w=(v)=>v==="127.0.0.1"||v==="::ffff:127.0.0.1"||v==="::1";return e.flatMap((v)=>{if(!l.has(v.pid)||v.localPort!==g)return[];let P=v.listening&&(w(v.localAddress)||["0.0.0.0","::"].includes(v.localAddress)),F=!v.listening&&w(v.localAddress)&&w(v.remoteAddress);if(!P&&!F)return[];let R=`${v.localAddress}:${v.localPort}>${v.remoteAddress}:${v.remotePort}`;return[{pid:v.pid,processGroupId:f,descriptor:String(v.pid),kernelId:R,state:P?"listen":"established",port:g,peerPort:P?null:v.remotePort,host:v.localAddress==="::1"?"::1":"127.0.0.1"}]})}async function Xo(e,l,f=_t(),g=Vo){let w=Un(f),v=Jo(w.processes(),e),P=await Yo(g,1000),F=Jo(w.processes(),e);return ha(P,new Set([...v].filter((R)=>F.has(R))),e,l)}var p={chunk:32768,upload:1048576,total:536870912,streams:16,queued:512,buffered:262144,relayBuffered:8388608,requestMs:30000,lifetimeMs:600000,authorizationMs:2000,window:8};function gn(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function Zr(e,l,f=Number.MAX_SAFE_INTEGER){return typeof e==="number"&&Number.isSafeInteger(e)&&e>=l&&e<=f}function Qo(e){return typeof e==="string"&&/^[a-zA-Z0-9_-]{1,160}$/.test(e)}function es(e,l){let f=Buffer.from(e,"latin1");return Buffer.concat([Buffer.from([f.length]),f,l])}function et(e){if(!gn(e)||Object.keys(e).length!==12||![e.organizationId,e.userId,e.runId,e.deviceId,e.rootId,e.jobId,e.fenceId].every(Qo)||!Zr(e.attachmentRevision,0)||!Zr(e.grantRevision,1)||!Zr(e.generation,1)||!Zr(e.port,1024,65535)||!Zr(e.expiresAtMs,1))throw Error("preview_binding_invalid");return Object.freeze({...e})}function lt(e,l){return Object.keys(e).every((f)=>e[f]===l[f])}function Gt(e){if(e.length>4096||!e.startsWith("/")||e.startsWith("//")||/[\\\x00-\x20\x7f#]/.test(e))throw Error("preview_path_invalid");let l=decodeURIComponent(e);if(l.startsWith("//")||/[\\\x00-\x1f\x7f]/.test(l))throw Error("preview_path_invalid");return e}function Zo(e){return Array.isArray(e)&&e.length<=64&&e.every((l)=>Array.isArray(l)&&l.length===2&&typeof l[0]==="string"&&/^[a-zA-Z0-9-]{1,80}$/.test(l[0])&&typeof l[1]==="string"&&l[1].length<=4096&&!/[\x00-\x1f\x7f]/.test(l[1]))}function Kt(e,l=p.chunk){if(e.length>Math.ceil(l/3)*4||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e))throw Error("preview_data_invalid");let f=Buffer.from(e,"base64");if(f.length>l)throw Error("preview_data_too_large");return f}function rs(e){if(Array.isArray(e))return Buffer.concat(e);if(typeof e==="string")return Buffer.from(e,"utf8");if(e instanceof ArrayBuffer)return Buffer.from(e);return e}function ts(e){if(Buffer.byteLength(e)>p.upload*1.4+300000)throw Error("preview_frame_too_large");let l=JSON.parse(e);if(!gn(l))throw Error("preview_frame_invalid");if(l.type==="hello")return{type:"hello",binding:et(l.binding),...Zr(l.messages,p.chunk,p.upload)?{messages:l.messages}:{},...Zr(l.window,1,p.window)?{window:l.window}:{},...l.bytes===!0?{bytes:!0}:{}};if(l.type==="refused"&&typeof l.reason==="string"&&/^[a-z_]{1,32}$/.test(l.reason))return{type:"refused",binding:et(l.binding),reason:l.reason};if(!Qo(l.id))throw Error("preview_frame_invalid");if(l.type==="end"||l.type==="cancel"||l.type==="credit")return{type:l.type,id:l.id};if(l.type==="ws"&&typeof l.protocol==="string"&&/^[a-zA-Z0-9._-]{0,100}$/.test(l.protocol))return{type:"ws",id:l.id,protocol:l.protocol};if(l.type==="data"&&typeof l.data==="string"&&typeof l.binary==="boolean")return Kt(l.data,p.upload),{type:"data",id:l.id,data:l.data,binary:l.binary};if(l.type==="head"&&Zr(l.status,200,599)&&Zo(l.headers))return{type:"head",id:l.id,status:l.status,headers:l.headers};if(l.type==="request"&&typeof l.method==="string"&&/^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS)$/.test(l.method)&&typeof l.path==="string"&&Zo(l.headers)&&typeof l.body==="string"&&typeof l.upgrade==="boolean")return Kt(l.body,p.upload),{type:"request",id:l.id,method:l.method,path:Gt(l.path),headers:l.headers,body:l.body,upgrade:l.upgrade};throw Error("preview_frame_invalid")}function $n(e){let l=[...e],f=new Set(l.filter(([w])=>w.toLowerCase()==="connection").flatMap(([,w])=>w.toLowerCase().split(",").map((v)=>v.trim()))),g=new Set(["authorization","proxy-authorization","cookie","set-cookie","host","origin","referer","connection","upgrade","keep-alive","transfer-encoding","te","trailer","content-length","forwarded","alt-svc","service-worker-allowed","clear-site-data","refresh"]);return l.filter(([w])=>!g.has(w.toLowerCase())&&!f.has(w.toLowerCase())&&!/^(x-forwarded-|x-ara-|sec-websocket-|access-control-)/i.test(w))}async function Kn(e){let l;try{return await Promise.race([Promise.resolve().then(e).then((f)=>f===!0||(f===!1?!1:void 0),()=>{return}),new Promise((f)=>{l=setTimeout(()=>f(void 0),p.authorizationMs)})])}finally{clearTimeout(l)}}async function Jt(e){return await Kn(e)===!0}function wn(e,l){let f=new URL(e);if(f.username||f.password||f.search||f.hash||!(f.protocol==="wss:"||f.protocol==="ws:"&&["127.0.0.1","[::1]"].includes(f.hostname))||!new RegExp(`^/${l}/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]{32,}$`).test(f.pathname))throw Error("preview_relay_invalid");return f.href}function gt(e){if(!gn(e)||Object.keys(e).length!==2||typeof e.deviceRelayUrl!=="string")throw Error("preview_open_invalid");return{binding:et(e.binding),deviceRelayUrl:wn(e.deviceRelayUrl,"device")}}function ns(e){if(!gn(e)||Object.keys(e).length!==1||!("binding"in e))throw Error("preview_close_invalid");return{binding:et(e.binding)}}import{request as ya}from"http";import{pipeline as va}from"stream";import{constants as Gn,createBrotliCompress as ka,createGzip as Sa}from"zlib";import{WebSocket as Vt}from"ws";import{randomBytes as ga,timingSafeEqual as ba}from"crypto";import{createServer as wa}from"net";var os="x-preview-connection";async function ss(e,l){if(l.aborted)throw Error("preview_closed");let f=ga(32).toString("base64url"),g=new Set,w=!1,v=wa((R)=>{if(w||l.aborted||g.size>=p.streams*2)return R.destroy();g.add(R);let M=new AbortController;R.once("close",()=>{g.delete(R),M.abort()}),R.on("error",()=>R.destroy()),R.setTimeout(2000,()=>R.destroy());let Q=Buffer.alloc(0),z=(re)=>{Q=Buffer.concat([Q,re]);let V=Q.indexOf(`\r
|
|
2
|
+
import{ue,Ee,J,xe,de,zt,We,Z,T,H,Wr}from"./vm-hands-entry-lite-8t9xssf9.js";import{Hi,k,je,ye,Ue,te,He,Sn,we,Mt,ae,U,N,ce,Rr,Or,xn}from"./vm-hands-entry-lite-22kfyvnk.js";import{ke,ie,pe,X,Pe,q,Y}from"./vm-hands-entry-lite-k278g9kj.js";import{St,pr,Xe,W,D,O,S}from"./vm-hands-entry-lite-9c95p6n9.js";import{fr,mr,ln,$i,Me,un}from"./vm-hands-entry-lite-88swf2qr.js";import{It,j}from"./vm-hands-entry-lite-q0k6kx6d.js";import{Ji,Rn}from"./vm-hands-entry-lite-ckv17tn8.js";import{G}from"./vm-hands-entry-lite-f5e3dbgk.js";import{gi}from"./vm-hands-entry-lite-gvwdy3rf.js";import{b,h,Bi}from"./vm-hands-entry-lite-09m2cdkw.js";import{E}from"./vm-hands-entry-lite-pgb514h0.js";import{Ht}from"./vm-hands-entry-lite-66ctbcym.js";import{a,ne,po}from"./vm-hands-entry-lite-89z488gz.js";import{L,pi,hi,_o,y,t,A,mt,o,d,u,i,c,_,oe,s,n}from"./vm-hands-entry-lite-907pa7f9.js";import{mi}from"./vm-hands-entry-lite-0xrsph3r.js";import{wo,se,bo,Re,x,Jr,Oe,I}from"./vm-hands-entry-lite-9ay6f56v.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{execFile as aa}from"child_process";import{createRequire as ca}from"module";import{win32 as hn}from"path";var da=250,la=50,ua=250,fa=4194304;function Go(e){let l=/^(?:\[([^\]]+)\]|([^:]+)):([0-9]{1,5})$/.exec(e??""),f=Number(l?.[3]);return l&&f<=65535?{address:l[1]??l[2],port:f}:null}function pa(e){let l=[];for(let f of e.split(/\r?\n/)){let g=f.trim().split(/\s+/);if(g[0]!=="TCP"||g.length<5)continue;let w=Go(g[1]),v=Go(g[2]),P=Number(g.at(-1));if(!w||!v||!Number.isSafeInteger(P)||P<0)continue;l.push({pid:P,localAddress:w.address,localPort:w.port,remoteAddress:v.address,remotePort:v.port,listening:v.port===0})}return l}function _a(e){if(e.localAddress==="0.0.0.0"||e.localAddress==="::")return`*:${e.localPort}`;return e.localAddress.includes(":")?`[${e.localAddress}]:${e.localPort}`:`${e.localAddress}:${e.localPort}`}var Vo=(e)=>new Promise((l,f)=>aa(hn.join(Re("win32").split(";")[0],"NETSTAT.EXE"),["-ano"],{timeout:e,maxBuffer:fa,encoding:"utf8",windowsHide:!0,env:Jr()},(g,w)=>g?f(g):l(w)));function zn(e){let l=hn.normalize(e.startsWith("\\\\?\\")?e.slice(4):e);return l.length>3&&l.endsWith("\\")?l.slice(0,-1):l}function ma(e,l){let f=e.toLowerCase(),g=l.toLowerCase();return g===f||g.startsWith(f.endsWith("\\")?f:`${f}\\`)}function qo(e,l,f){let g=e.cwd(f),w=g?zn(g):null;return w&&hn.isAbsolute(w)&&ma(l,w)?w:null}var Kt;function wt(){if(Kt!==void 0)return Kt;if(Kt=null,process.platform!=="win32"||!["x64","arm64"].includes(process.arch))return null;let e;try{e=ca(import.meta.url)("bun:ffi")}catch{return null}let{FFIType:l,ptr:f}=e,g,w;try{g=e.dlopen("kernel32.dll",{CreateToolhelp32Snapshot:{args:[l.u32,l.u32],returns:l.u64},Process32FirstW:{args:[l.u64,l.ptr],returns:l.i32},Process32NextW:{args:[l.u64,l.ptr],returns:l.i32},OpenProcess:{args:[l.u32,l.i32,l.u32],returns:l.u64},ReadProcessMemory:{args:[l.u64,l.u64,l.ptr,l.u64,l.ptr],returns:l.i32},CloseHandle:{args:[l.u64],returns:l.i32}}).symbols,w=e.dlopen("ntdll.dll",{NtQueryInformationProcess:{args:[l.u64,l.i32,l.ptr,l.u32,l.ptr],returns:l.i32}}).symbols}catch{return null}let v=0xFFFFFFFFFFFFFFFFn,P=2,F=1040,R=568,M=(Q,z,C)=>{let re=Buffer.alloc(C);return g.ReadProcessMemory(Q,z,f(re),C,null)?re:null};return Kt={processes(){let Q=BigInt(g.CreateToolhelp32Snapshot(P,0));if(Q===v)throw new r("process_inspection_failed","Reading this computer's processes did not complete.");try{let z=Buffer.alloc(R);z.writeUInt32LE(R,0);let C=f(z),re=[];for(let V=g.Process32FirstW(Q,C);V;V=g.Process32NextW(Q,C)){let K=z.toString("utf16le",44,R),_e=K.slice(0,K.includes("\x00")?K.indexOf("\x00"):void 0),ve=z.readUInt32LE(8);if(ve>0)re.push({pid:ve,parentPid:z.readUInt32LE(32),command:_e.replace(/\.exe$/i,"")||null})}return re}finally{g.CloseHandle(Q)}},cwd(Q){let z=BigInt(g.OpenProcess(F,0,Q));if(z===0n)return null;try{let C=Buffer.alloc(48);if(w.NtQueryInformationProcess(z,0,f(C),C.length,null)!==0)return null;let re=M(z,C.readBigUInt64LE(8)+0x20n,8)?.readBigUInt64LE(0),V=re?M(z,re+0x38n,16):null,K=V?.readUInt16LE(0)??0;if(!V||K===0||K%2!==0)return null;return M(z,V.readBigUInt64LE(8),K)?.toString("utf16le")??null}finally{g.CloseHandle(z)}}},Kt}function Un(e){if(!e)throw new r("process_inspection_failed","Reading this computer's processes is unavailable.");return e}async function Yo(e,l){let f;try{f=await e(l)}catch{throw new r("process_inspection_failed","Reading this computer's ports did not complete.")}return pa(f)}async function Si(e,l=wt()){let f=Un(l),g=zn(e),w=[];for(let v of f.processes()){if(w.length>=da)break;let P=qo(f,g,v.pid);if(P)w.push({pid:v.pid,command:v.command,cwd:hn.relative(g,P)||"."})}return{processes:w}}async function Ei(e,l=wt(),f=Vo){let g=Un(l),w=zn(e),v=(await Yo(f,5000)).filter((M)=>M.listening&&M.pid>0).map((M)=>({pid:M.pid,port:M.localPort,address:_a(M)})).sort((M,Q)=>M.pid-Q.pid||M.port-Q.port||(M.address<Q.address?-1:M.address>Q.address?1:0)),P=[...new Set(v.map((M)=>M.pid))].slice(0,la),F=new Set(P.filter((M)=>qo(g,w,M)!==null));if(F.size===0)return{ports:[]};let R=new Map(g.processes().map((M)=>[M.pid,M.command]));return{ports:v.filter((M)=>F.has(M.pid)).slice(0,ua).map((M)=>({pid:M.pid,command:R.get(M.pid)??null,address:M.address}))}}function Jo(e,l){let f=new Set([l]);for(let g=!0;g;){g=!1;for(let w of e)if(!f.has(w.pid)&&f.has(w.parentPid)&&w.pid!==w.parentPid)f.add(w.pid),g=!0}return f}function ha(e,l,f,g){let w=(v)=>v==="127.0.0.1"||v==="::ffff:127.0.0.1"||v==="::1";return e.flatMap((v)=>{if(!l.has(v.pid)||v.localPort!==g)return[];let P=v.listening&&(w(v.localAddress)||["0.0.0.0","::"].includes(v.localAddress)),F=!v.listening&&w(v.localAddress)&&w(v.remoteAddress);if(!P&&!F)return[];let R=`${v.localAddress}:${v.localPort}>${v.remoteAddress}:${v.remotePort}`;return[{pid:v.pid,processGroupId:f,descriptor:String(v.pid),kernelId:R,state:P?"listen":"established",port:g,peerPort:P?null:v.remotePort,host:v.localAddress==="::1"?"::1":"127.0.0.1"}]})}async function Xo(e,l,f=wt(),g=Vo){let w=Un(f),v=Jo(w.processes(),e),P=await Yo(g,1000),F=Jo(w.processes(),e);return ha(P,new Set([...v].filter((R)=>F.has(R))),e,l)}var p={chunk:32768,upload:1048576,total:536870912,streams:16,queued:512,buffered:262144,relayBuffered:8388608,requestMs:30000,lifetimeMs:600000,authorizationMs:2000,window:8};function gn(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function et(e,l,f=Number.MAX_SAFE_INTEGER){return typeof e==="number"&&Number.isSafeInteger(e)&&e>=l&&e<=f}function Qo(e){return typeof e==="string"&&/^[a-zA-Z0-9_-]{1,160}$/.test(e)}function es(e,l){let f=Buffer.from(e,"latin1");return Buffer.concat([Buffer.from([f.length]),f,l])}function rt(e){if(!gn(e)||Object.keys(e).length!==12||![e.organizationId,e.userId,e.runId,e.deviceId,e.rootId,e.jobId,e.fenceId].every(Qo)||!et(e.attachmentRevision,0)||!et(e.grantRevision,1)||!et(e.generation,1)||!et(e.port,1024,65535)||!et(e.expiresAtMs,1))throw Error("preview_binding_invalid");return Object.freeze({...e})}function ut(e,l){return Object.keys(e).every((f)=>e[f]===l[f])}function Jt(e){if(e.length>4096||!e.startsWith("/")||e.startsWith("//")||/[\\\x00-\x20\x7f#]/.test(e))throw Error("preview_path_invalid");let l=decodeURIComponent(e);if(l.startsWith("//")||/[\\\x00-\x1f\x7f]/.test(l))throw Error("preview_path_invalid");return e}function Zo(e){return Array.isArray(e)&&e.length<=64&&e.every((l)=>Array.isArray(l)&&l.length===2&&typeof l[0]==="string"&&/^[a-zA-Z0-9-]{1,80}$/.test(l[0])&&typeof l[1]==="string"&&l[1].length<=4096&&!/[\x00-\x1f\x7f]/.test(l[1]))}function Gt(e,l=p.chunk){if(e.length>Math.ceil(l/3)*4||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e))throw Error("preview_data_invalid");let f=Buffer.from(e,"base64");if(f.length>l)throw Error("preview_data_too_large");return f}function rs(e){if(Array.isArray(e))return Buffer.concat(e);if(typeof e==="string")return Buffer.from(e,"utf8");if(e instanceof ArrayBuffer)return Buffer.from(e);return e}function ts(e){if(Buffer.byteLength(e)>p.upload*1.4+300000)throw Error("preview_frame_too_large");let l=JSON.parse(e);if(!gn(l))throw Error("preview_frame_invalid");if(l.type==="hello")return{type:"hello",binding:rt(l.binding),...et(l.messages,p.chunk,p.upload)?{messages:l.messages}:{},...et(l.window,1,p.window)?{window:l.window}:{},...l.bytes===!0?{bytes:!0}:{}};if(l.type==="refused"&&typeof l.reason==="string"&&/^[a-z_]{1,32}$/.test(l.reason))return{type:"refused",binding:rt(l.binding),reason:l.reason};if(!Qo(l.id))throw Error("preview_frame_invalid");if(l.type==="end"||l.type==="cancel"||l.type==="credit")return{type:l.type,id:l.id};if(l.type==="ws"&&typeof l.protocol==="string"&&/^[a-zA-Z0-9._-]{0,100}$/.test(l.protocol))return{type:"ws",id:l.id,protocol:l.protocol};if(l.type==="data"&&typeof l.data==="string"&&typeof l.binary==="boolean")return Gt(l.data,p.upload),{type:"data",id:l.id,data:l.data,binary:l.binary};if(l.type==="head"&&et(l.status,200,599)&&Zo(l.headers))return{type:"head",id:l.id,status:l.status,headers:l.headers};if(l.type==="request"&&typeof l.method==="string"&&/^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS)$/.test(l.method)&&typeof l.path==="string"&&Zo(l.headers)&&typeof l.body==="string"&&typeof l.upgrade==="boolean")return Gt(l.body,p.upload),{type:"request",id:l.id,method:l.method,path:Jt(l.path),headers:l.headers,body:l.body,upgrade:l.upgrade};throw Error("preview_frame_invalid")}function $n(e){let l=[...e],f=new Set(l.filter(([w])=>w.toLowerCase()==="connection").flatMap(([,w])=>w.toLowerCase().split(",").map((v)=>v.trim()))),g=new Set(["authorization","proxy-authorization","cookie","set-cookie","host","origin","referer","connection","upgrade","keep-alive","transfer-encoding","te","trailer","content-length","forwarded","alt-svc","service-worker-allowed","clear-site-data","refresh"]);return l.filter(([w])=>!g.has(w.toLowerCase())&&!f.has(w.toLowerCase())&&!/^(x-forwarded-|x-ara-|sec-websocket-|access-control-)/i.test(w))}async function Kn(e){let l;try{return await Promise.race([Promise.resolve().then(e).then((f)=>f===!0||(f===!1?!1:void 0),()=>{return}),new Promise((f)=>{l=setTimeout(()=>f(void 0),p.authorizationMs)})])}finally{clearTimeout(l)}}async function Vt(e){return await Kn(e)===!0}function bn(e,l){let f=new URL(e);if(f.username||f.password||f.search||f.hash||!(f.protocol==="wss:"||f.protocol==="ws:"&&["127.0.0.1","[::1]"].includes(f.hostname))||!new RegExp(`^/${l}/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]{32,}$`).test(f.pathname))throw Error("preview_relay_invalid");return f.href}function yt(e){if(!gn(e)||Object.keys(e).length!==2||typeof e.deviceRelayUrl!=="string")throw Error("preview_open_invalid");return{binding:rt(e.binding),deviceRelayUrl:bn(e.deviceRelayUrl,"device")}}function ns(e){if(!gn(e)||Object.keys(e).length!==1||!("binding"in e))throw Error("preview_close_invalid");return{binding:rt(e.binding)}}import{request as ya}from"http";import{pipeline as va}from"stream";import{constants as Gn,createBrotliCompress as ka,createGzip as Sa}from"zlib";import{WebSocket as qt}from"ws";import{randomBytes as ga,timingSafeEqual as ba}from"crypto";import{createServer as wa}from"net";var os="x-preview-connection";async function ss(e,l){if(l.aborted)throw Error("preview_closed");let f=ga(32).toString("base64url"),g=new Set,w=!1,v=wa((R)=>{if(w||l.aborted||g.size>=p.streams*2)return R.destroy();g.add(R);let M=new AbortController;R.once("close",()=>{g.delete(R),M.abort()}),R.on("error",()=>R.destroy()),R.setTimeout(2000,()=>R.destroy());let Q=Buffer.alloc(0),z=(re)=>{Q=Buffer.concat([Q,re]);let V=Q.indexOf(`\r
|
|
3
3
|
\r
|
|
4
4
|
`);if(V<0){if(Q.length>16384)R.destroy();return}if(R.pause(),R.off("data",z),V>16384||Q.length>p.upload+16384)return R.destroy();C(Q,V).catch(()=>R.destroy())};R.on("data",z);async function C(re,V){let K=re.subarray(0,V).toString("latin1").split(`\r
|
|
5
|
-
`),_e=/^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS) (\S+) HTTP\/1\.1$/.exec(K.shift()??"");if(!_e)throw Error("preview_request_invalid");
|
|
6
|
-
`);
|
|
7
|
-
`);let l=e.binding,f;try{f=
|
|
8
|
-
`).slice(1)){let M=R.trim().split(/\s+/);if(M.length<10||!["0A","01"].includes(M[3]))continue;let[Q,z]=M[1].split(":"),[C,re]=M[2].split(":");if(Number.parseInt(z,16)!==l)continue;let V=(ve)=>ve==="0100007F"||ve==="0000000000000000FFFF00000100007F"||ve===is,K=M[3]==="0A";if(!(V(Q)||K&&/^0+$/.test(Q??"")))continue;if(!K&&!V(C))continue;let _e=M[9];if(!/^[1-9][0-9]*$/.test(_e))continue;g.set(_e,{kernelId:_e,port:l,peerPort:K?null:Number.parseInt(re,16),state:K?"listen":"established",host:Q===is?"::1":"127.0.0.1"})}}let w=await f.directory("/proc");if(w.length>8192)throw Or();let v=[];for(let P of w){if(!/^[1-9][0-9]*$/.test(P))continue;try{let F=await f.text(`/proc/${P}/stat`),R=F.slice(F.lastIndexOf(")")+2).trim().split(/\s+/);if(Number(R[2])!==e)continue;let M=await f.directory(`/proc/${P}/fd`);if(M.length>1024)throw Or();let Q=[];for(let re of M){if(!/^[0-9]+$/.test(re))continue;let V=await f.link(`/proc/${P}/fd/${re}`).catch(()=>""),K=/^socket:\[([0-9]+)\]$/.exec(V)?.[1],_e=K?g.get(K):void 0;if(_e)Q.push({..._e,pid:Number(P),processGroupId:e,descriptor:re})}let z=await f.text(`/proc/${P}/stat`),C=z.slice(z.lastIndexOf(")")+2).trim().split(/\s+/);if(R[19]===C[19]&&R[2]===C[2])v.push(...Q)}catch(F){if(F instanceof Error&&F.message==="preview_port_ownership_unproved")throw F}}return v}function ja(e,l,f){if(e.length>2097152)throw Or();let g=0,w=0,v="",P="",F="",R="",M=[],Q=()=>{if(g<1||w!==l||!/^\d+$/.test(v)||!/^0x[0-9a-f]+$/i.test(P))return;let z=R==="LISTEN"&&["*","127.0.0.1","[::ffff:127.0.0.1]","[::1]"].some((re)=>F===`${re}:${f}`),C=new RegExp(`^(?:127\\.0\\.0\\.1|\\[::ffff:127\\.0\\.0\\.1\\]|\\[::1\\]):${f}->(?:127\\.0\\.0\\.1|\\[::ffff:127\\.0\\.0\\.1\\]|\\[::1\\]):([0-9]+)$`).exec(F);if(z||R==="ESTABLISHED"&&C)M.push({pid:g,processGroupId:w,descriptor:v,kernelId:P,state:z?"listen":"established",port:f,peerPort:z?null:Number(C[1]),host:F.startsWith("[::1]:")?"::1":"127.0.0.1"})};for(let z of e.split(/[\0\n]/)){let C=z.slice(1);if(z[0]==="p")Q(),g=Number(C),w=0,v=P=F=R="";else if(z[0]==="g")w=Number(C);else if(z[0]==="f")Q(),v=C,P=F=R="";else if(z[0]==="d")P=C;else if(z[0]==="n")F=C;else if(z.startsWith("TST="))R=z.slice(4)}return Q(),M}async function Wa(e,l){if(process.platform==="linux")return Ma(e,l);if(process.platform==="win32")return Xo(e,l);if(process.platform!=="darwin")throw Or();let f=await new Promise((g,w)=>Ta("/usr/sbin/lsof",["-nP","-a","-g",String(e),`-iTCP:${l}`,"-F0pgfdnT"],{timeout:1000,maxBuffer:2097152,encoding:"utf8",env:{PATH:"/usr/bin:/bin",LC_ALL:"C"}},(v,P)=>v?w(Or()):g(P)));return ja(f,e,l)}function Yt(e,l={}){let f=et(e.binding),g=l.inspectSockets??Wa,w=l.monotonicNow??(()=>performance.now());async function v(){let C=()=>{if(Date.now()>=f.expiresAtMs)throw Or("binding_expired");if(e.deniedPorts.has(f.port))throw Or("port_denied")};C();let re=await e.readCurrentJob(),V=re?.job,K=V?.process;if(C(),!re)throw Or("server_stopped");if(!lt(f,re.binding)||V?.jobId!==f.jobId)throw Or("binding_changed");if(V.state!=="running"||V.finishedAtMs!==null||V.leaseExpiresAtMs<f.expiresAtMs)throw Or("job_not_running");if(!K||K.pid<1||K.pid!==K.processGroupId||K.executorLaunchId!==re.executorLaunchId)throw Or("process_unproved");return{pid:K.pid,launch:K.executorLaunchId,started:V.startedAtMs}}let P,F;async function R(){let C=await v(),re=await g(C.pid,f.port).catch(()=>{throw Error(yn)}),V=await v();if(C.pid!==V.pid||C.launch!==V.launch||C.started!==V.started)throw Or("job_restarted");return re}async function M(C){for(;;){if(F&&F.startedAt>=C)return F.sockets;if(P&&P.startedAt>=C)return await P.sockets;if(P){await P.sockets.catch(()=>{});continue}let re={startedAt:w(),sockets:R()};P=re;try{let V=await re.sockets;if(!F||F.startedAt<=re.startedAt)F={startedAt:re.startedAt,sockets:V};return V}finally{if(P===re)P=void 0}}}async function Q(C=()=>{},re=w()){C();let V=await M(re);if(C(),Date.now()>=f.expiresAtMs)throw Or("binding_expired");if(!V.some((K)=>K.state==="listen"))throw Error(yn);return V}async function z(){try{return await Q(()=>{},w()-1000),null}catch(C){if(C instanceof Error&&C.message===yn)return"listener_unproved";return C instanceof Jn?C.code:"port_unproved"}}return{refusal:z,async check(){let C=await z();if(C==="listener_unproved")throw Error(yn);return C===null},async connect(C){if(C.aborted)throw Or();let re=w()+2000,V=new AbortController,K=new Promise((Ie)=>V.signal.addEventListener("abort",()=>Ie(null),{once:!0})),_e,ve=()=>{V.abort(),_e?.destroy()},he=setTimeout(ve,2000);C.addEventListener("abort",ve,{once:!0});let Oe=()=>{if(V.signal.aborted||C.aborted||w()>=re||_e?.destroyed)throw ve(),Or()};async function He(Ie){Oe();let be=await Promise.race([Ie().then((Me)=>({value:Me})),K]);if(Oe(),!be)throw Or();return be.value}try{let Ie=await He(()=>Q(Oe,w()-1000));Oe();let be=Ie.some((le)=>le.state==="listen"&&le.host==="127.0.0.1")?"127.0.0.1":"::1",Me=Na({host:be,port:f.port,signal:C});_e=Me,Me.once("close",ve),await He(()=>new Promise((le,fe)=>{Me.once("connect",le),Me.once("error",fe)}));let Ye=Me.localPort;if(!Ye)throw Or();let Be=w();while(!(await He(()=>Q(Oe,Be))).some((le)=>le.state==="established"&&le.peerPort===Ye))await He(()=>Ha(Math.min(20,Math.max(1,re-w())),void 0,{signal:V.signal})),Be=w();return Oe(),Me}catch(Ie){throw ve(),Ie}finally{clearTimeout(he),C.removeEventListener("abort",ve),_e?.off("close",ve),V.abort()}}}}var Fa=4,za=[2375,2376,9222,9229];function Qt(e){let l=new Set(za);for(let f of e){let g=new URL(f);l.add(Number(g.port||(["https:","wss:"].includes(g.protocol)?443:80)))}return l}function rt(){throw new r("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var Ua=60000;function as(e){let l=new AbortController,f=new Map,g=(R)=>JSON.stringify([R.jobId,R.port]);function w(R){let M=e.authority.owner;if(l.signal.aborted||!e.isCurrent()||e.expiresAtMs<=Date.now()||R.organization_id!==M.organization_id||R.user_id!==M.user_id||R.device_id!==M.device_id)rt()}function v(R){let M;try{M=e.environment.current()}catch{return null}return M.binding.target_generation===R.generation&&M.binding.target_fence_id===R.fenceId&&M.run_id===e.runId&&M.device_id===e.authority.owner.device_id&&M.root_id===e.authority.rootId?M:null}async function P(R,M,Q){let z=await F(R,M,Q);if(z!=="moved")return z;let C=await F(R,M,Q);return C==="moved"?null:C}async function F(R,M,Q){try{w(e.authority.owner);let z=e.identity();if(!z||Q.aborted||R.expiresAtMs<=Date.now()||R.expiresAtMs>e.expiresAtMs)return null;let C=M.opened,re=C!==void 0&&z.generation>C.generation,V=v(z);if(re){if(V){if(V.revision<=C.revision||R.expiresAtMs>Date.parse(V.expires_at)||V.binding.target_revision!==C.attachmentRevision||V.binding.root_grant_revision!==C.grantRevision)return null;M.recoveringSinceMs=void 0}else if(Date.now()-(M.recoveringSinceMs??=Date.now())>Ua)return null}else if(!V||R.expiresAtMs>Date.parse(V.expires_at)||C&&(z.generation!==C.generation||z.fenceId!==C.fenceId))return null;let K=await e.inspect(R.jobId,Q),_e=e.identity(),ve=_e&&v(_e);w(e.authority.owner);let he=V&&{generation:z.generation,fenceId:z.fenceId,snapshotId:V.snapshot_id,revision:V.revision,attachmentRevision:V.binding.target_revision,grantRevision:V.binding.root_grant_revision},Oe=re?C:he;if(Q.aborted||!_e)return null;if(_e.generation!==z.generation||_e.fenceId!==z.fenceId||ve?.snapshot_id!==V?.snapshot_id||ve?.revision!==V?.revision)return"moved";let He=K.ok&&K.job.environmentSnapshotId!==void 0&&K.job.environmentRevision!==void 0?{snapshotId:K.job.environmentSnapshotId,revision:K.job.environmentRevision}:null;if(!K.ok||K.generation!==z.generation||!Oe||!He)return null;if((He.snapshotId!==Oe.snapshotId||He.revision!==Oe.revision)&&(re||!e.environment.carried(He.snapshotId,He.revision)))return null;if(!C&&z.generation===R.generation&&z.fenceId===R.fenceId)M.opened={...Oe,...He};return{executorLaunchId:e.executorLaunchId,job:K.job,binding:{organizationId:e.authority.owner.organization_id,userId:e.authority.owner.user_id,deviceId:e.authority.owner.device_id,rootId:e.authority.rootId,runId:e.runId,attachmentRevision:Oe.attachmentRevision,grantRevision:Oe.grantRevision,generation:Oe.generation,fenceId:Oe.fenceId,jobId:K.job.jobId,port:R.port,expiresAtMs:R.expiresAtMs}}}catch{return null}}return{async open(R,M,Q){w(M);let{binding:z,deviceRelayUrl:C}=gt(R);if(Q.aborted||z.expiresAtMs<=Date.now()||z.expiresAtMs>Date.now()+p.lifetimeMs||new URL(C).origin!==e.authority.relayOrigin)rt();let re=g(z),V=f.get(re);if(V){if(!lt(V.binding,z)||V.relay!==C)rt();if(await V.opened,!await Jt(()=>V.port.check())||Q.aborted||V.abort.signal.aborted)rt();return{opened:!0,binding:z}}if(f.size>=Fa)rt();let K=new AbortController,_e={},ve=Yt({binding:z,deniedPorts:e.authority.deniedPorts,readCurrentJob:()=>P(z,_e,K.signal)}),he=()=>K.abort();if(Q.addEventListener("abort",he,{once:!0}),l.signal.addEventListener("abort",he,{once:!0}),Q.aborted||l.signal.aborted)he();let Oe=Xt({binding:z,deviceRelayUrl:C,port:ve,signal:K.signal}),He={binding:z,relay:C,abort:K,port:ve,opened:Oe};f.set(re,He);let Ie=()=>{if(Q.removeEventListener("abort",he),l.signal.removeEventListener("abort",he),f.get(re)===He)f.delete(re)};try{if((await Oe).closed.then(Ie),Q.removeEventListener("abort",he),w(M),K.signal.aborted||!await Jt(()=>ve.check()))rt();return{opened:!0,binding:z}}catch{K.abort(),Ie(),rt()}},async close(R,M){w(M);let{binding:Q}=ns(R),z=f.get(g(Q));if(!z||!lt(z.binding,Q))rt();return z.abort.abort(),await z.opened.then((C)=>C.closed,()=>{return}),{closed:!0,binding:Q}},dispose(){l.abort();for(let R of f.values())R.abort.abort();f.clear()}}}import{WebSocket as Vn}from"ws";var cs=(e)=>("data"in e)?e.data.length:e.bytes,ds=2*Ue;function yr(e){throw new r(e,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var St=(e)=>!["starting","running"].includes(e.state);function Si(e,l,f=Date.now()){let g=["relay_url","session_id","expires_at","cols","rows","pty","workspace"];if(Object.keys(e).length!==g.length||Object.keys(e).some((M)=>!g.includes(M))||!ae(l)||!ae(e.session_id)||typeof e.expires_at!=="string"||typeof e.relay_url!=="string"||e.relay_url.length>4096||![e.cols,e.rows].every((M)=>Number.isSafeInteger(M)&&Number(M)>=1&&Number(M)<=we))yr("invalid_pty_request");let w=e.pty;if(!w||typeof w!=="object"||Array.isArray(w))yr("invalid_pty_request");let v=w;if(Object.keys(v).length!==2||v.version!==1||!ce(v.jobId))yr("invalid_pty_request");let P;try{P=new URL(e.relay_url)}catch{return yr("invalid_pty_request")}if(!["ws:","wss:"].includes(P.protocol)||P.username||P.password||P.hash||P.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(P.hostname))yr("invalid_pty_request");let F=Date.parse(e.expires_at);if(!Number.isSafeInteger(F)||F<=f)yr("invalid_pty_request");return{workspace:H(e.workspace)??yr("invalid_pty_request"),session:{jobId:v.jobId,sessionId:e.session_id,operationId:l,relayUrl:P.href,cols:Number(e.cols),rows:Number(e.rows),leaseExpiresAtMs:Math.min(F,f+43200000)}}}async function ls(e){let{session:l,binding:f}=e;if(f.assertCurrent(),e.signal.aborted||Date.now()>=l.leaseExpiresAtMs)yr("cancelled");let g=new Vn(l.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:te}),w=new AbortController,v=()=>{},P=()=>{w.abort(),v()};e.signal.addEventListener("abort",P,{once:!0});let F=setTimeout(P,Math.max(1,l.leaseExpiresAtMs-Date.now())),R=[],M=0,Q=0,z=0,C=!1,re=!1,V=!1,K,_e,ve,he=(le)=>{ve=new r(le,"Bound terminal input was refused."),P()};g.on("error",()=>he("pty_relay_unavailable")),g.on("close",P),g.on("message",(le,fe)=>{if(w.signal.aborted)return;if(!re){he("pty_not_ready");return}let Se=Array.isArray(le)?Buffer.concat(le):le instanceof ArrayBuffer?Buffer.from(le):le;if(Se.length===0)return;let We=R.at(-1),Ge=fe&&We!==void 0&&"data"in We&&We.data.length+Se.length<=te;if(Se.length>te||M+Se.length>bn){he("pty_input_backpressure");return}if(Ge)We.data=Buffer.concat([We.data,Se]);else if(fe)R.push({data:Buffer.from(Se)});else try{let qe=JSON.parse(Se.toString("utf8"));if(qe&&qe.t==="close"&&Object.keys(qe).length===1){V=!0,P();return}if(!qe||qe.t!=="resize"||Object.keys(qe).length!==3||![qe.cols,qe.rows].every((Pe)=>Number.isSafeInteger(Pe)&&Pe>=1&&Pe<=we))throw Error("invalid_control");R.push({cols:qe.cols,rows:qe.rows,bytes:Se.length})}catch{he("invalid_pty_control");return}M+=Se.length,v()});function Oe(le){return Sn(JSON.stringify({...f.scope,version:1,sessionId:l.sessionId,operationId:l.operationId,job:{...le,output:[],pty:le.pty?{...le.pty,output:[]}:void 0}}))}function He(le){if(!le.ok)yr(le.error);let fe=le.job;if(le.generation!==f.scope.generation||fe.jobId!==l.jobId||!fe.pty||fe.leaseExpiresAtMs>l.leaseExpiresAtMs||fe.process&&fe.process.executorLaunchId!==f.scope.executorLaunchId||fe.process&&_e&&(fe.process.pid!==_e.pid||fe.process.processGroupId!==_e.processGroupId)||fe.state!=="starting"&&(fe.environmentRevision!==f.environment.revision||fe.environmentSnapshotId!==f.environment.snapshotId))yr("pty_binding_changed");if(Oe(fe),fe.process)_e??={...fe.process};return fe}async function Ie(le){f.assertCurrent();let fe=await f.request(le,w.signal);if(f.assertCurrent(),w.signal.aborted)yr("cancelled");let Se=He(fe);if(Se.inputSequence!==Q)yr("job_input_sequence");if(!St(Se)&&Se.leaseExpiresAtMs<=Date.now())yr("pty_binding_changed");return Se}function be(le){if(f.assertCurrent(),w.signal.aborted||g.readyState!==Vn.OPEN||g.bufferedAmount+Buffer.byteLength(le)>ds)yr("pty_output_backpressure");g.send(le)}function Me(le){if(le.firstCursor>z+1)z=le.firstCursor-1;for(let fe of le.pty.output){if(fe.cursor<=z)continue;if(fe.cursor!==z+1)yr("pty_output_gap");let Se=Buffer.from(fe.dataBase64,"base64");if(g.bufferedAmount+Se.length>ds)return!1;be(Se),z=fe.cursor}if(z!==le.nextCursor)yr("pty_output_gap");return!0}async function Ye(le,fe){let Se;try{await Promise.race([e.emit(le,fe),new Promise((We,Ge)=>{Se=setTimeout(()=>Ge(new r("pty_event_unavailable","Terminal metadata delivery timed out.")),2000)})])}finally{clearTimeout(Se)}}async function Be(){let le=AbortSignal.timeout(Nt),fe=f.request({jobId:l.jobId,action:"cancel",input:{}},le),Se,We=new Promise((Ge,qe)=>{if(Se=()=>qe(new r("pty_cleanup_unconfirmed","Terminal cleanup acknowledgement was not observed within authority.")),le.addEventListener("abort",Se,{once:!0}),le.aborted)Se()});try{let Ge=await Promise.race([fe,We]);if(le.aborted)yr("pty_cleanup_unconfirmed");return He(Ge)}finally{le.removeEventListener("abort",Se)}}try{await new Promise((Ge,qe)=>{let Pe=setTimeout(()=>{P(),qe(new r("pty_relay_unavailable","Terminal pairing timed out."))},5000),Xe=()=>{clearTimeout(Pe),qe(new r("cancelled","Terminal pairing was cancelled."))};if(w.signal.addEventListener("abort",Xe,{once:!0}),g.once("open",()=>{clearTimeout(Pe),w.signal.removeEventListener("abort",Xe),Ge()}),w.signal.aborted)Xe()}),f.assertCurrent(),C=!0,K=await Ie({jobId:l.jobId,action:"start",input:{mode:"pty",cols:l.cols,rows:l.rows,leaseExpiresAtMs:l.leaseExpiresAtMs}});let le=Date.now()+5000;while(K.state==="starting"){if(Date.now()>=le)yr("pty_not_ready");await new Promise((Ge)=>setTimeout(Ge,25)),K=await Ie({jobId:l.jobId,action:"inspect",input:{after:z}})}if(K.state!=="running"||K.inputSequence!==0||K.leaseExpiresAtMs<=Date.now())yr("pty_not_ready");await Ye("pty.ready",Oe(K)),re=!0,be(JSON.stringify({t:"open",cols:K.pty.cols,rows:K.pty.rows,receipt:Oe(K)}));let fe=!1,Se=0,We=!1;while(!w.signal.aborted){let Ge=K.firstCursor>z+1,qe=Me(K);if(St(K)){if(qe)break}else if(Ge)fe=!0;else if(fe&&qe&&Date.now()>=Se){fe=!1,Se=Date.now()+1000;let{cols:Xe,rows:dr}=K.pty;for(let mr of[{cols:Xe,rows:dr>1?dr-1:2},{cols:Xe,rows:dr}]){if(St(K))break;let Sr=++Q;if(K=await Ie({jobId:l.jobId,action:"resize",input:{sequence:Sr,...mr}}),K.inputSequence!==Sr)yr("job_input_sequence")}continue}let Pe=St(K)||We?void 0:R.shift();if(Pe){M-=cs(Pe);let Xe=++Q;try{K=await Ie("data"in Pe?{jobId:l.jobId,action:"input",input:{sequence:Xe,dataBase64:Pe.data.toString("base64")}}:{jobId:l.jobId,action:"resize",input:{sequence:Xe,cols:Pe.cols,rows:Pe.rows}})}catch(dr){if(!(dr instanceof r)||dr.code!=="job_input_backpressure")throw dr;Q-=1,R.unshift(Pe),M+=cs(Pe),We=!0;continue}if(K.inputSequence!==Xe)yr("job_input_sequence")}else if(await new Promise((Xe)=>{let dr=setTimeout(Xe,We||!qe?10:50);if(v=()=>{clearTimeout(dr),Xe()},w.signal.aborted||!We&&R.length)v()}),We=!1,v=()=>{},!w.signal.aborted&&qe)try{K=await Ie({jobId:l.jobId,action:"inspect",input:{after:z}})}catch(Xe){if(!V||!(Xe instanceof r)||Xe.code!=="cancelled")throw Xe}}}catch(le){ve??=le}finally{if(re=!1,R.length=0,clearTimeout(F),e.signal.removeEventListener("abort",P),P(),C&&(!K||!St(K)))try{K=await Be()}catch{K=void 0}try{if(!K||!St(K)||K.pty?.cleanup!=="confirmed")yr("pty_cleanup_unconfirmed");let le=Oe(K);if(g.readyState===Vn.OPEN)await new Promise((fe)=>{let Se=setTimeout(fe,500);g.send(JSON.stringify({t:"exit",code:K.exitCode,receipt:le}),()=>{clearTimeout(Se),fe()})});await Ye("pty.stopped",le)}catch(le){ve??=le}g.terminate()}if(ve)throw ve;if(e.signal.aborted)yr("cancelled");if(!K)yr("pty_cleanup_unconfirmed");return{receipt:Oe(K)}}var Ka=()=>{let e={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{unit:"entries",verb:"to have"}};function l(w){return e[w]??null}let f={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"},g={nan:"NaN"};return(w)=>{switch(w.code){case"invalid_type":{let v=g[w.expected]??w.expected,P=mo(w.input),F=g[P]??P;return`Invalid input: expected ${v}, received ${F}`}case"invalid_value":if(w.values.length===1)return`Invalid input: expected ${di(w.values[0])}`;return`Invalid option: expected one of ${ui(w.values,"|")}`;case"too_big":{let v=w.inclusive?"<=":"<",P=l(w.origin);if(P)return`Too big: expected ${w.origin??"value"} to have ${v}${w.maximum.toString()} ${P.unit??"elements"}`;return`Too big: expected ${w.origin??"value"} to be ${v}${w.maximum.toString()}`}case"too_small":{let v=w.inclusive?">=":">",P=l(w.origin);if(P)return`Too small: expected ${w.origin} to have ${v}${w.minimum.toString()} ${P.unit}`;return`Too small: expected ${w.origin} to be ${v}${w.minimum.toString()}`}case"invalid_format":{let v=w;if(v.format==="starts_with")return`Invalid string: must start with "${v.prefix}"`;if(v.format==="ends_with")return`Invalid string: must end with "${v.suffix}"`;if(v.format==="includes")return`Invalid string: must include "${v.includes}"`;if(v.format==="regex")return`Invalid string: must match pattern ${v.pattern}`;return`Invalid ${f[v.format]??w.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${w.divisor}`;case"unrecognized_keys":return`Unrecognized key${w.keys.length>1?"s":""}: ${ui(w.keys,", ")}`;case"invalid_key":return`Invalid key in ${w.origin}`;case"invalid_union":if(w.options&&Array.isArray(w.options)&&w.options.length>0)return`Invalid discriminator value. Expected ${w.options.map((P)=>`'${P}'`).join(" | ")}`;return"Invalid input";case"invalid_element":return`Invalid value in ${w.origin}`;default:return"Invalid input"}}};function qn(){return{localeError:Ka()}}L(qn());import{createHash as Ga,randomUUID as Qn}from"crypto";import{spawnSync as _s}from"child_process";import{closeSync as us,constants as Xn,fstatSync as Ja,fsyncSync as Va,lstatSync as Zt,mkdirSync as qa,mkdtempSync as ms,openSync as fs,readFileSync as Ya,readdirSync as hs,realpathSync as qt,rmSync as Zn,unlinkSync as Xa}from"fs";import{createConnection as Za}from"net";import{dirname as Qa,join as ut,sep as ec}from"path";import{tmpdir as rc}from"os";var xr=new Map,tt=new Map;function Vr(e,l){return Ga("sha256").update(JSON.stringify([e,l])).digest("hex")}function Et(e){try{qa(e,{mode:448})}catch(f){if(!(f instanceof Error&&("code"in f)&&f.code==="EEXIST"))throw f}let l=Zt(e);if(!l.isDirectory()||l.isSymbolicLink()||!I(l)||qt(e)!==e)throw new r("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function tc(e){let l;try{l=Zt(e)}catch(f){if(f instanceof Error&&"code"in f&&f.code==="ENOENT")return!1;throw f}return!l.isDirectory()||l.isSymbolicLink()||hs(e).length>0}function er(e){let l=Vr(e.root,e.runId),f=e.previousRuntimeDirectories?.find((P)=>tc(ut(P,"jobs",l.slice(0,16))))??e.runtimeDirectory;Et(f);let g=ut(f,"jobs");Et(g);let w=ut(g,l.slice(0,16));if(e.maxScopes!==void 0){let P=hs(g);if(!Number.isSafeInteger(e.maxScopes)||e.maxScopes<1||P.length>e.maxScopes||!P.includes(l.slice(0,16))&&P.length>=e.maxScopes)throw new r("process_journal_capacity","Managed process receipt capacity is full; preserve uncertain jobs and reconcile their existing receipts before starting more work.")}Et(w);let v=ms(ut(yo(),"reason-j-"));try{return Et(v),{journalDirectory:w,scopeId:l,launchDirectory:v,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${Qn()}`:ut(v,"control.sock"),disposeSocket:()=>Zn(v,{recursive:!0,force:!0})}}catch(P){throw Zn(v,{recursive:!0,force:!0}),P}}var nc=60000,oc=5000;function sc(e){if(process.platform==="win32")return ic(e);let l=_s("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:2000,env:{...process.env,LC_ALL:"C",LANG:"C"}}),f=l.status===0?/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(l.stdout.trim()):null,g=f?"JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(f[1]):-1;if(!f||g<0||g%3!==0)return null;let w=new Date(Number(f[6]),g/3,Number(f[2]),Number(f[3]),Number(f[4]),Number(f[5])).getTime();return Number.isFinite(w)?w:null}function ic(e){let l=_s(x("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:Gr()}),f=l.status===0?Date.parse(l.stdout.trim()):Number.NaN;return Number.isFinite(f)?f:null}function gs(e,l={}){let f=ut(e.journalDirectory,"owner.lock"),g;try{g=fs(f,Xn.O_RDONLY|Xn.O_NOFOLLOW)}catch{return null}try{let w=Ja(g);if(!w.isFile()||w.nlink!==1||!I(w)||w.size>4096)return null;let v=null;try{v=JSON.parse(Ya(g,"utf8"))}catch{}let P;if(v===null){if((l.now??Date.now)()-w.mtimeMs<nc)return null;P={reason:"never_written",executorLaunchId:null}}else{let{version:M,scopeId:Q,pid:z,createdAtMs:C,executorLaunchId:re}=v;if(M!==1||Q!==e.scopeId||typeof re!=="string"||typeof z!=="number"||!Number.isSafeInteger(z)||z<1||z===process.pid||typeof C!=="number"||!Number.isSafeInteger(C))return null;if(!(l.exists??((K)=>{try{return process.kill(K,0),!0}catch(_e){return!(_e instanceof Error&&("code"in _e)&&_e.code==="ESRCH")}}))(z))P={reason:"owner_exited",executorLaunchId:re};else{let K=(l.startedAtMs??sc)(z);if(K===null||K<=C+oc)return null;P={reason:"pid_reused",executorLaunchId:re}}}let F=Zt(f);if(F.dev!==w.dev||F.ino!==w.ino)return null;Xa(f);let R=fs(e.journalDirectory,Xn.O_RDONLY);try{Va(R)}finally{us(R)}return P}catch{return null}finally{us(g)}}function bs(e){let l={...e,workspace:e.workspace&&Object.freeze({...e.workspace}),previewAuthority:e.previewAuthority&&Object.freeze({...e.previewAuthority,owner:Object.freeze({...e.previewAuthority.owner}),deniedPorts:new Set(e.previewAuthority.deniedPorts)})},f=Vr(l.root,l.runId);if(xr.has(f)||l.operationId!==void 0&&tt.has(l.operationId))throw new r("hands_jobs_busy","The Session already has a live Hands job supervisor.");let g={binding:l,key:f,terminals:new Map};if(l.previewAuthority&&l.environment)g.previews=as({authority:l.previewAuthority,runId:l.runId,expiresAtMs:l.expiresAtMs,executorLaunchId:l.executorLaunchId,environment:l.environment,isCurrent:()=>xr.get(g.key)===g,identity:()=>{try{return Pt(l)}catch{return null}},inspect:(w,v)=>{if(xr.get(g.key)!==g)throw new r("preview_unavailable","The Hands supervisor is no longer current.");return ws(l,{jobId:w,action:"inspect",input:{after:0}},v)}});if(xr.set(f,g),l.operationId!==void 0)tt.set(l.operationId,g);return()=>{if(xr.get(g.key)===g)xr.delete(g.key);if(l.operationId!==void 0&&tt.get(l.operationId)===g)tt.delete(l.operationId);g.previews?.dispose();for(let w of g.terminals.values())w.abort()}}var ac=5000,cc=20;async function Ei(e){let l=(w)=>{throw new r("hands_rebind_unavailable",w)};if(!N(e.operationId)||!N(e.runId)||!N(e.fenceId)||!U(e.targetGeneration))l("Reason sent an invalid Hands rebind.");let f=tt.get(e.operationId);if(!f||f.binding.root!==e.root)return l("No live Hands supervisor owns this operation.");for(let w=Date.now()+ac;;){if(e.signal?.aborted)l("The Hands rebind was cancelled.");if(tt.get(e.operationId)!==f)l("The Hands supervisor is no longer current.");let v=null;try{v=Pt(f.binding)}catch{}if(v&&v.generation===e.targetGeneration&&v.fenceId===e.fenceId)break;if(v&&v.generation>e.targetGeneration||Date.now()>=w)l("The executor did not adopt this take.");await new Promise((P)=>setTimeout(P,cc))}if(tt.get(e.operationId)!==f||xr.get(f.key)!==f)l("The Hands supervisor is no longer current.");let g=Vr(e.root,e.runId);if(f.key===g)return;if(xr.has(g))l("The taking run already has a live Hands job supervisor.");xr.delete(f.key);for(let w of f.terminals.values())w.abort();f.key=g,xr.set(g,f)}function Ke(e){let l="operationId"in e?tt.get(e.operationId):xr.get(Vr(e.root,e.runId)),f=l&&l.binding.root===e.root?l.binding:void 0;if(!f?.environment||f.expiresAtMs<=Date.now())throw new r("environment_unavailable","No live Hands supervisor owns this environment.");return f.environment.install(e.payload)}async function xi(e){let l=xr.get(Vr(e.root,e.runId));if(!l?.previews||!e.owner)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return l.previews.open(e.payload,e.owner,e.signal)}async function ki(e){let l=xr.get(Vr(e.root,e.runId));if(!l?.previews||!e.owner||e.signal.aborted)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return l.previews.close(e.payload,e.owner)}async function Ci(e){let l=Vr(e.root,e.runId),f=xr.get(l),g=f?.binding,w=g?.runId,v=g?.previewAuthority,P=g?.environment,F=e.owner&&{...e.owner},R=e.authority&&{...e.authority},M=()=>{throw new r("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!f||!g||!v||!P||!F||!R||!g.workspace)return M();let Q=Object.freeze({...g.workspace}),z=Pt(g),C=P.current(),re=()=>{if(xr.get(l)!==f||F.organization_id!==v.owner.organization_id||F.user_id!==v.owner.user_id||F.device_id!==v.owner.device_id||e.deviceId!==v.owner.device_id||e.rootId!==v.rootId||T(e.workspace)!==T(Q))M();let K=Pt(g),_e=P.current();if(K.generation!==z.generation||K.fenceId!==z.fenceId||_e.run_id!==w||_e.device_id!==e.deviceId||_e.root_id!==e.rootId||_e.snapshot_id!==C.snapshot_id||_e.revision!==C.revision||_e.binding.target_generation!==z.generation||_e.binding.target_fence_id!==z.fenceId||R.device_id!==e.deviceId||R.binding!==_e.binding.kind||R.target_revision!==_e.binding.target_revision||R.root_grant_revision!==_e.binding.root_grant_revision||R.target_generation!==z.generation||R.target_fence_id!==z.fenceId)M()};if(re(),new URL(e.session.relayUrl).origin!==v.relayOrigin||f.terminals.has(e.session.jobId)||f.terminals.size>=4)return M();let V=new AbortController;f.terminals.set(e.session.jobId,V);try{return await ls({session:{...e.session,leaseExpiresAtMs:Math.min(e.session.leaseExpiresAtMs,z.expiresAtMs,Date.parse(C.expires_at))},signal:AbortSignal.any([e.signal,V.signal]),emit:e.emit,binding:{assertCurrent:re,environment:{revision:C.revision,snapshotId:C.snapshot_id},scope:{runId:e.runId,deviceId:e.deviceId,rootId:e.rootId,workspace:Q,binding:C.binding.kind,targetRevision:C.binding.target_revision,rootGrantRevision:C.binding.root_grant_revision,generation:z.generation,fenceId:z.fenceId,executorLaunchId:z.executorLaunchId},request:(K,_e)=>tr(z,Pr(JSON.stringify({...K,type:"job",version:2,generation:z.generation,id:Qn()})),_e)}})}finally{if(f.terminals.get(e.session.jobId)===V)f.terminals.delete(e.session.jobId)}}async function Ai(e){if(ce(e.payload.jobId))throw new r("pty_binding_required","PTY jobs require the bound terminal capability.");let l=xr.get(Vr(e.root,e.runId))?.binding;if(!l||l.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","No live Hands supervisor owns this Session and root.");return ws(l,e.payload,e.signal)}var dc=1e4,lc=20,uc=ye/2,fc=Fe/2,pc=(e)=>e.output.reduce((l,f)=>l+f.text.length,0);async function ws(e,l,f){if(Object.keys(l).some((M)=>!["jobId","action","input","waitForExitMs"].includes(M)))throw new r("invalid_payload","Unexpected job control field.");let{waitForExitMs:g,...w}=l;if(g!==void 0&&(w.action!=="start"||typeof w.input!=="object"||w.input===null||!("script"in w.input)||typeof g!=="number"||!Number.isSafeInteger(g)||g<1||g>dc))throw new r("invalid_payload","Only a script start may wait for its job, within its bound.");let v=(M)=>{let Q=Pt(e);return tr(Q,Pr(JSON.stringify({...M,type:"job",version:2,generation:Q.generation,id:Qn()})),f)},P=await v(w);if(g===void 0)return P;let F=Date.now()+g,R=P;while(R.ok&&["starting","running"].includes(R.job.state)&&R.job.output.length<uc&&pc(R.job)<fc&&!f.aborted&&Date.now()<F){if(await new Promise((M)=>setTimeout(M,Math.min(lc,F-Date.now()))),f.aborted)break;try{let M=await v({jobId:w.jobId,action:"inspect",input:{after:0}});if(!M.ok)break;R=M}catch{break}}return R}function Pt(e){if(e.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","Hands authority expired.");let l=e.readIdentity?e.readIdentity():e;if(!l||!U(l.generation)||!N(l.fenceId)||l.generation<e.generation||l.generation===e.generation&&l.fenceId!==e.fenceId)throw new r("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return e.generation=l.generation,e.fenceId=l.fenceId,{...e}}function tr(e,l,f){if(f.aborted)return Promise.reject(new r("cancelled","Job control was cancelled."));return new Promise((g,w)=>{let v=Za(e.socketPath),P="",F=!1,R,M=(z,C)=>{if(F)return;if(F=!0,clearTimeout(R),f.removeEventListener("abort",Q),v.destroy(),z)w(z);else g(C)},Q=()=>M(new r("cancelled","Job control waiter cancelled; inspect before retrying mutations."));f.addEventListener("abort",Q,{once:!0}),v.setEncoding("utf8"),R=setTimeout(()=>M(new r("hands_job_result_unknown","Job control timed out; inspect before retrying mutations.")),Math.min(1e4,Math.max(1,e.expiresAtMs-Date.now()))),v.on("error",()=>M(new r("hands_job_result_unknown","Hands job control connection failed."))),v.once("connect",()=>v.write(JSON.stringify({version:1,scopeId:e.scopeId,fenceId:e.fenceId,executorLaunchId:e.executorLaunchId,request:l})+`
|
|
9
|
-
`)),v.on("data",(z)=>{if(P+=z,Buffer.byteLength(P)>
|
|
10
|
-
`)}var
|
|
5
|
+
`),_e=/^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS) (\S+) HTTP\/1\.1$/.exec(K.shift()??"");if(!_e)throw Error("preview_request_invalid");Jt(_e[2]);let ve=!1,he=0,Ie=[];for(let be of K){let Fe=/^([a-zA-Z0-9-]+):[ \t]*([^\x00-\x08\x0a-\x1f\x7f]*)$/.exec(be);if(!Fe)throw Error("preview_header_invalid");if(Fe[1].toLowerCase()===os){he++;let qe=Buffer.from(Fe[2].trim());ve=qe.length===f.length&&ba(qe,Buffer.from(f))}else if(Fe[1].toLowerCase()!=="host")Ie.push(be)}if(!ve||he!==1||w||M.signal.aborted)throw Error("preview_connection_denied");let De=await e.connect(M.signal);if(w||M.signal.aborted)throw De.destroy(),Error("preview_closed");g.add(De),De.on("error",()=>R.destroy()),De.once("close",()=>{g.delete(De),R.destroy()}),R.once("close",()=>De.destroy()),R.setTimeout(0);let Te=[`${_e[1]} ${_e[2]} HTTP/1.1`,`Host: 127.0.0.1:${De.remotePort}`,...Ie,"",""].join(`\r
|
|
6
|
+
`);De.write(Buffer.concat([Buffer.from(Te,"latin1"),re.subarray(V+4)])),De.pipe(R),R.pipe(De),R.resume()}});await new Promise((R,M)=>{v.once("error",M),v.listen(0,"127.0.0.1",R)});let P=v.address();if(!P||typeof P==="string")throw v.close(),Error("preview_bind_failed");function F(){if(w)return;w=!0,l.removeEventListener("abort",F);for(let R of g)R.destroy();g.clear(),v.close()}if(l.addEventListener("abort",F,{once:!0}),l.aborted)F();return{port:P.port,headers:{[os]:f},close:F}}var Ea=60000,Ra=1e4,Pa=5000,Oa=/^(?:text\/(?!event-stream)|application\/(?:(?:x-)?javascript|json|[a-z.+-]*\+json|xml|[a-z.+-]*\+xml|wasm)|image\/svg\+xml)/i;function xa(e,l,f,g){let w=(R)=>l.find(([M])=>M.toLowerCase()===R)?.[1],v=(R)=>g.find(([M])=>M.toLowerCase()===R)?.[1],P=Number(v("content-length")??Number.NaN);if(e!=="GET"||f!==200||w("range")!==void 0||v("content-encoding")!==void 0||!Oa.test(v("content-type")??"")||/\bno-transform\b/i.test(v("cache-control")??"")||P<1024)return null;let F=(R)=>new RegExp(`(?:^|,)\\s*${R}\\s*(?:,|$|;\\s*q=(?:1|0?\\.0*[1-9]))`,"i").test(w("accept-encoding")??"");return F("br")?"br":F("gzip")?"gzip":null}function Aa(e,l){let f=e.filter(([g])=>g.toLowerCase()==="vary").map(([,g])=>g).join(", ");return[...e.filter(([g])=>!["vary","etag","content-md5"].includes(g.toLowerCase())),...e.filter(([g])=>g.toLowerCase()==="etag").map(([g,w])=>[g,w.startsWith("W/")?w:`W/${w}`]),["Content-Encoding",l],["Vary",f.split(",").some((g)=>/^\s*(?:accept-encoding|\*)\s*$/i.test(g))?f:f?`${f}, Accept-Encoding`:"Accept-Encoding"]]}async function tn(e){process.stderr.write(`${JSON.stringify({event:"worker_preview.open_refused",job_id:e.jobId,port:e.port,reason_code:e.reason})}
|
|
7
|
+
`);let l=e.binding,f;try{f=bn(e.deviceRelayUrl,"device")}catch{return}if(!l)return;await new Promise((g)=>{let w=new qt(f,{followRedirects:!1,perMessageDeflate:!1,maxPayload:4096}),v=setTimeout(()=>{w.terminate(),g()},p.authorizationMs*2);w.addEventListener("open",()=>{w.send(JSON.stringify({type:"refused",binding:l,reason:e.reason})),w.close(1000,`worker_refused_${e.reason}`)}),w.addEventListener("error",()=>{clearTimeout(v),g()}),w.addEventListener("close",()=>{clearTimeout(v),g()})})}async function Ia(e,l){let f=Date.now()+Ra,g;for(;;){if(!l())return"closed";let w=g??=e.refusal().finally(()=>{g=void 0}),v,P=await Promise.race([w.catch(()=>"port_unproved"),new Promise((F)=>{v=setTimeout(()=>F("port_check_timeout"),p.authorizationMs)})]).finally(()=>clearTimeout(v));if(P===null)return null;if(!["listener_unproved","port_check_timeout"].includes(P)||Date.now()+500>=f)return P;await new Promise((F)=>setTimeout(F,500))}}async function Qt(e){let l=rt(e.binding),f=()=>!e.signal.aborted&&Date.now()<l.expiresAtMs,g=l.expiresAtMs>Date.now()+p.lifetimeMs+Pa?"binding_mismatch":await Ia(e.port,f);if(g)throw await tn({deviceRelayUrl:e.deviceRelayUrl,binding:l,jobId:l.jobId,port:l.port,reason:g}),Error("preview_not_authorized",{cause:g});let w=bn(e.deviceRelayUrl,"device"),v=await ss(e.port,e.signal),P;try{P=new qt(w,{followRedirects:!1,perMessageDeflate:!1,maxPayload:p.upload*1.4+300000})}catch(le){throw v.close(),le}let F=new Map,R=!1,M=!1,Q=0,z=!1,C,re,V,K=new Promise((le)=>{V=le}),_e,ve,he=new Promise((le,fe)=>{_e=le,ve=fe}),Ie=!1,De=(le)=>{let fe=Buffer.isBuffer(le)?le:JSON.stringify(le);if(Q+=Buffer.byteLength(fe),!f()||M||P.readyState!==qt.OPEN)return Te(f()?"relay_closed":"expired");if(P.bufferedAmount>p.relayBuffered)return Te("relay_backlog");if(Q>p.total)return Te("quota");P.send(fe)};function Te(le="closed"){if(M)return;M=!0,clearInterval(qe),clearTimeout(Fe),e.signal.removeEventListener("abort",be);for(let fe of F.values())fe.stop();F.clear(),v.close(),P.close(1000,`worker_${le}`),ve(Error("preview_closed")),V()}let be=()=>Te("aborted"),Fe=setTimeout(()=>Te("pair_timeout"),p.requestMs),qe=setInterval(async()=>{if(!f())return Te(e.signal.aborted?"aborted":"expired");if(z)return;z=!0;try{let le=C??=Promise.resolve().then(()=>e.port.check()).finally(()=>{C=void 0}),fe=await Kn(()=>le);if(fe===!1)return Te("port_refused");if(fe){re=void 0;return}if(Date.now()-(re??=Date.now())>Ea)return Te("port_unknown");for(let Se of F.values())Se.stop()}finally{z=!1}},1000);if(e.signal.addEventListener("abort",be,{once:!0}),!f())Te(e.signal.aborted?"aborted":"expired");P.addEventListener("open",()=>De({type:"hello",binding:l,messages:p.upload,window:p.window})),P.addEventListener("close",()=>Te("relay_closed")),P.addEventListener("error",()=>Te("relay_error")),P.addEventListener("message",(le)=>{try{if(!f()||M)return Te(e.signal.aborted?"aborted":"expired");if(typeof le.data!=="string")throw Error("preview_frame_invalid");if(Q+=Buffer.byteLength(le.data),Q>p.total)return Te("quota");let fe=ts(le.data);if(!R){if(fe.type!=="hello"||!ut(l,fe.binding))return Te("binding_mismatch");R=!0,Ie=fe.bytes===!0,clearTimeout(Fe),_e();return}if(fe.type==="hello"||fe.type==="refused")return Te("invalid_frame");if(fe.type==="request"){Be(fe).catch(()=>Te("invalid_request"));return}let Se=F.get(fe.id);if(!Se)return;if(fe.type==="cancel"||fe.type==="end")Se.stop();else if(fe.type==="credit"&&Se.credit)Se.credit();else if(fe.type==="data"&&Se.ws){if(Se.ws.readyState!==qt.OPEN||Se.ws.bufferedAmount>p.buffered)return Se.stop();let ze=Gt(fe.data,p.upload);Se.ws.send(fe.binary?ze:ze.toString("utf8"))}else Te("invalid_frame")}catch{Te("invalid_frame")}});async function Be(le){if(F.has(le.id)||F.size>=p.streams)return Te("stream_limit");if(!f())return Te(e.signal.aborted?"aborted":"expired");let fe=new AbortController,Se,ze,Ke,Ve=0,Ae=($e=!1)=>{if(!F.delete(le.id))return;clearTimeout(Se),fe.abort(),ze?.close(1000,"preview_closed"),Ke?.(),De({type:$e?"end":"cancel",id:le.id})},Ye={stop:()=>Ae(),credit:()=>{Ve++,Ke?.()}};if(F.set(le.id,Ye),Se=setTimeout(Ae,p.requestMs),!await Vt(()=>e.port.check())||!f()||fe.signal.aborted)return Ae();let _r=Jt(le.path);if(le.upgrade){if(le.method!=="GET"||le.body)return Ae();let $e=le.headers.find(([Qe])=>Qe.toLowerCase()==="sec-websocket-protocol")?.[1].split(",").map((Qe)=>Qe.trim());if($e?.some((Qe)=>!/^[a-zA-Z0-9._-]{1,100}$/.test(Qe))||($e?.length??0)>8)return Ae();ze=new qt(`ws://127.0.0.1:${v.port}${_r}`,$e,{headers:v.headers,followRedirects:!1,perMessageDeflate:!1,maxPayload:p.upload}),Ye.ws=ze,ze.binaryType="arraybuffer",ze.addEventListener("open",()=>{clearTimeout(Se),De({type:"ws",id:le.id,protocol:ze.protocol})}),ze.addEventListener("message",(Qe)=>{let hr=typeof Qe.data!=="string",vr=rs(Qe.data);if(vr.length>p.upload)return Ae();De({type:"data",id:le.id,data:vr.toString("base64"),binary:hr})}),ze.addEventListener("error",()=>Ae()),ze.addEventListener("close",(Qe)=>Ae(Qe.wasClean));return}let br=Gt(le.body,p.upload),Pr=ya({hostname:"127.0.0.1",port:v.port,path:_r,method:le.method,headers:{...Object.fromEntries($n(le.headers)),...v.headers,connection:"close"},signal:fe.signal,agent:!1,maxHeaderSize:16384},async($e)=>{try{let Qe=[];for(let Kr=0;Kr<$e.rawHeaders.length;Kr+=2)Qe.push([$e.rawHeaders[Kr],$e.rawHeaders[Kr+1]]);let hr=$e.statusCode??502,vr=xa(le.method,le.headers,hr,Qe),Hr=vr==="br"?ka({flush:Gn.BROTLI_OPERATION_FLUSH,params:{[Gn.BROTLI_PARAM_QUALITY]:5}}):vr==="gzip"?Sa({level:6,flush:Gn.Z_SYNC_FLUSH}):void 0;if(De({type:"head",id:le.id,status:hr,headers:$n(vr?Aa(Qe,vr):Qe)}),clearTimeout(Se),Hr)va($e,Hr,()=>{});for await(let Kr of Hr??$e){let Fr=Buffer.from(Kr);for(let zr=0;zr<Fr.length;zr+=p.chunk){if(Ve===0&&!fe.signal.aborted)await new Promise((Yr)=>{Ke=Yr});if(Ke=void 0,fe.signal.aborted)return;Ve--;let at=Fr.subarray(zr,zr+p.chunk);De(Ie?es(le.id,at):{type:"data",id:le.id,data:at.toString("base64"),binary:!0})}}Ae(!0)}catch{Ae()}});Pr.on("error",()=>Ae()),Pr.end(br)}return await he,{close:Te,closed:K}}import{execFile as Ta}from"child_process";import{readFile as Ca,readdir as Da,readlink as La}from"fs/promises";import{connect as Na}from"net";import{setTimeout as Ha}from"timers/promises";var Ba={directory:Da,text:(e)=>Ca(e,"utf8"),link:La};class Jn extends Error{code;constructor(e="port_unproved"){super("preview_port_ownership_unproved");this.code=e}}var Ir=(e)=>new Jn(e),wn="preview_listener_unproved",is="00000000000000000000000001000000";async function Ma(e,l,f=Ba){let g=new Map;for(let P of["tcp","tcp6"]){let F=await f.text(`/proc/net/${P}`);if(F.length>4194304)throw Ir();for(let R of F.split(`
|
|
8
|
+
`).slice(1)){let M=R.trim().split(/\s+/);if(M.length<10||!["0A","01"].includes(M[3]))continue;let[Q,z]=M[1].split(":"),[C,re]=M[2].split(":");if(Number.parseInt(z,16)!==l)continue;let V=(ve)=>ve==="0100007F"||ve==="0000000000000000FFFF00000100007F"||ve===is,K=M[3]==="0A";if(!(V(Q)||K&&/^0+$/.test(Q??"")))continue;if(!K&&!V(C))continue;let _e=M[9];if(!/^[1-9][0-9]*$/.test(_e))continue;g.set(_e,{kernelId:_e,port:l,peerPort:K?null:Number.parseInt(re,16),state:K?"listen":"established",host:Q===is?"::1":"127.0.0.1"})}}let w=await f.directory("/proc");if(w.length>8192)throw Ir();let v=[];for(let P of w){if(!/^[1-9][0-9]*$/.test(P))continue;try{let F=await f.text(`/proc/${P}/stat`),R=F.slice(F.lastIndexOf(")")+2).trim().split(/\s+/);if(Number(R[2])!==e)continue;let M=await f.directory(`/proc/${P}/fd`);if(M.length>1024)throw Ir();let Q=[];for(let re of M){if(!/^[0-9]+$/.test(re))continue;let V=await f.link(`/proc/${P}/fd/${re}`).catch(()=>""),K=/^socket:\[([0-9]+)\]$/.exec(V)?.[1],_e=K?g.get(K):void 0;if(_e)Q.push({..._e,pid:Number(P),processGroupId:e,descriptor:re})}let z=await f.text(`/proc/${P}/stat`),C=z.slice(z.lastIndexOf(")")+2).trim().split(/\s+/);if(R[19]===C[19]&&R[2]===C[2])v.push(...Q)}catch(F){if(F instanceof Error&&F.message==="preview_port_ownership_unproved")throw F}}return v}function ja(e,l,f){if(e.length>2097152)throw Ir();let g=0,w=0,v="",P="",F="",R="",M=[],Q=()=>{if(g<1||w!==l||!/^\d+$/.test(v)||!/^0x[0-9a-f]+$/i.test(P))return;let z=R==="LISTEN"&&["*","127.0.0.1","[::ffff:127.0.0.1]","[::1]"].some((re)=>F===`${re}:${f}`),C=new RegExp(`^(?:127\\.0\\.0\\.1|\\[::ffff:127\\.0\\.0\\.1\\]|\\[::1\\]):${f}->(?:127\\.0\\.0\\.1|\\[::ffff:127\\.0\\.0\\.1\\]|\\[::1\\]):([0-9]+)$`).exec(F);if(z||R==="ESTABLISHED"&&C)M.push({pid:g,processGroupId:w,descriptor:v,kernelId:P,state:z?"listen":"established",port:f,peerPort:z?null:Number(C[1]),host:F.startsWith("[::1]:")?"::1":"127.0.0.1"})};for(let z of e.split(/[\0\n]/)){let C=z.slice(1);if(z[0]==="p")Q(),g=Number(C),w=0,v=P=F=R="";else if(z[0]==="g")w=Number(C);else if(z[0]==="f")Q(),v=C,P=F=R="";else if(z[0]==="d")P=C;else if(z[0]==="n")F=C;else if(z.startsWith("TST="))R=z.slice(4)}return Q(),M}async function Wa(e,l){if(process.platform==="linux")return Ma(e,l);if(process.platform==="win32")return Xo(e,l);if(process.platform!=="darwin")throw Ir();let f=await new Promise((g,w)=>Ta("/usr/sbin/lsof",["-nP","-a","-g",String(e),`-iTCP:${l}`,"-F0pgfdnT"],{timeout:1000,maxBuffer:2097152,encoding:"utf8",env:{PATH:"/usr/bin:/bin",LC_ALL:"C"}},(v,P)=>v?w(Ir()):g(P)));return ja(f,e,l)}function er(e,l={}){let f=rt(e.binding),g=l.inspectSockets??Wa,w=l.monotonicNow??(()=>performance.now());async function v(){let C=()=>{if(Date.now()>=f.expiresAtMs)throw Ir("binding_expired");if(e.deniedPorts.has(f.port))throw Ir("port_denied")};C();let re=await e.readCurrentJob(),V=re?.job,K=V?.process;if(C(),!re)throw Ir("server_stopped");if(!ut(f,re.binding)||V?.jobId!==f.jobId)throw Ir("binding_changed");if(V.state!=="running"||V.finishedAtMs!==null||V.leaseExpiresAtMs<f.expiresAtMs)throw Ir("job_not_running");if(!K||K.pid<1||K.pid!==K.processGroupId||K.executorLaunchId!==re.executorLaunchId)throw Ir("process_unproved");return{pid:K.pid,launch:K.executorLaunchId,started:V.startedAtMs}}let P,F;async function R(){let C=await v(),re=await g(C.pid,f.port).catch(()=>{throw Error(wn)}),V=await v();if(C.pid!==V.pid||C.launch!==V.launch||C.started!==V.started)throw Ir("job_restarted");return re}async function M(C){for(;;){if(F&&F.startedAt>=C)return F.sockets;if(P&&P.startedAt>=C)return await P.sockets;if(P){await P.sockets.catch(()=>{});continue}let re={startedAt:w(),sockets:R()};P=re;try{let V=await re.sockets;if(!F||F.startedAt<=re.startedAt)F={startedAt:re.startedAt,sockets:V};return V}finally{if(P===re)P=void 0}}}async function Q(C=()=>{},re=w()){C();let V=await M(re);if(C(),Date.now()>=f.expiresAtMs)throw Ir("binding_expired");if(!V.some((K)=>K.state==="listen"))throw Error(wn);return V}async function z(){try{return await Q(()=>{},w()-1000),null}catch(C){if(C instanceof Error&&C.message===wn)return"listener_unproved";return C instanceof Jn?C.code:"port_unproved"}}return{refusal:z,async check(){let C=await z();if(C==="listener_unproved")throw Error(wn);return C===null},async connect(C){if(C.aborted)throw Ir();let re=w()+2000,V=new AbortController,K=new Promise((Te)=>V.signal.addEventListener("abort",()=>Te(null),{once:!0})),_e,ve=()=>{V.abort(),_e?.destroy()},he=setTimeout(ve,2000);C.addEventListener("abort",ve,{once:!0});let Ie=()=>{if(V.signal.aborted||C.aborted||w()>=re||_e?.destroyed)throw ve(),Ir()};async function De(Te){Ie();let be=await Promise.race([Te().then((Fe)=>({value:Fe})),K]);if(Ie(),!be)throw Ir();return be.value}try{let Te=await De(()=>Q(Ie,w()-1000));Ie();let be=Te.some((le)=>le.state==="listen"&&le.host==="127.0.0.1")?"127.0.0.1":"::1",Fe=Na({host:be,port:f.port,signal:C});_e=Fe,Fe.once("close",ve),await De(()=>new Promise((le,fe)=>{Fe.once("connect",le),Fe.once("error",fe)}));let qe=Fe.localPort;if(!qe)throw Ir();let Be=w();while(!(await De(()=>Q(Ie,Be))).some((le)=>le.state==="established"&&le.peerPort===qe))await De(()=>Ha(Math.min(20,Math.max(1,re-w())),void 0,{signal:V.signal})),Be=w();return Ie(),Fe}catch(Te){throw ve(),Te}finally{clearTimeout(he),C.removeEventListener("abort",ve),_e?.off("close",ve),V.abort()}}}}var Fa=4,za=[2375,2376,9222,9229];function tr(e){let l=new Set(za);for(let f of e){let g=new URL(f);l.add(Number(g.port||(["https:","wss:"].includes(g.protocol)?443:80)))}return l}function tt(){throw new r("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var Ua=60000;function as(e){let l=new AbortController,f=new Map,g=(R)=>JSON.stringify([R.jobId,R.port]);function w(R){let M=e.authority.owner;if(l.signal.aborted||!e.isCurrent()||e.expiresAtMs<=Date.now()||R.organization_id!==M.organization_id||R.user_id!==M.user_id||R.device_id!==M.device_id)tt()}function v(R){let M;try{M=e.environment.current()}catch{return null}return M.binding.target_generation===R.generation&&M.binding.target_fence_id===R.fenceId&&M.run_id===e.runId&&M.device_id===e.authority.owner.device_id&&M.root_id===e.authority.rootId?M:null}async function P(R,M,Q){let z=await F(R,M,Q);if(z!=="moved")return z;let C=await F(R,M,Q);return C==="moved"?null:C}async function F(R,M,Q){try{w(e.authority.owner);let z=e.identity();if(!z||Q.aborted||R.expiresAtMs<=Date.now()||R.expiresAtMs>e.expiresAtMs)return null;let C=M.opened,re=C!==void 0&&z.generation>C.generation,V=v(z);if(re){if(V){if(V.revision<=C.revision||R.expiresAtMs>Date.parse(V.expires_at)||V.binding.target_revision!==C.attachmentRevision||V.binding.root_grant_revision!==C.grantRevision)return null;M.recoveringSinceMs=void 0}else if(Date.now()-(M.recoveringSinceMs??=Date.now())>Ua)return null}else if(!V||R.expiresAtMs>Date.parse(V.expires_at)||C&&(z.generation!==C.generation||z.fenceId!==C.fenceId))return null;let K=await e.inspect(R.jobId,Q),_e=e.identity(),ve=_e&&v(_e);w(e.authority.owner);let he=V&&{generation:z.generation,fenceId:z.fenceId,snapshotId:V.snapshot_id,revision:V.revision,attachmentRevision:V.binding.target_revision,grantRevision:V.binding.root_grant_revision},Ie=re?C:he;if(Q.aborted||!_e)return null;if(_e.generation!==z.generation||_e.fenceId!==z.fenceId||ve?.snapshot_id!==V?.snapshot_id||ve?.revision!==V?.revision)return"moved";let De=K.ok&&K.job.environmentSnapshotId!==void 0&&K.job.environmentRevision!==void 0?{snapshotId:K.job.environmentSnapshotId,revision:K.job.environmentRevision}:null;if(!K.ok||K.generation!==z.generation||!Ie||!De)return null;if((De.snapshotId!==Ie.snapshotId||De.revision!==Ie.revision)&&(re||!e.environment.carried(De.snapshotId,De.revision)))return null;if(!C&&z.generation===R.generation&&z.fenceId===R.fenceId)M.opened={...Ie,...De};return{executorLaunchId:e.executorLaunchId,job:K.job,binding:{organizationId:e.authority.owner.organization_id,userId:e.authority.owner.user_id,deviceId:e.authority.owner.device_id,rootId:e.authority.rootId,runId:e.runId,attachmentRevision:Ie.attachmentRevision,grantRevision:Ie.grantRevision,generation:Ie.generation,fenceId:Ie.fenceId,jobId:K.job.jobId,port:R.port,expiresAtMs:R.expiresAtMs}}}catch{return null}}return{async open(R,M,Q){w(M);let{binding:z,deviceRelayUrl:C}=yt(R);if(Q.aborted||z.expiresAtMs<=Date.now()||z.expiresAtMs>Date.now()+p.lifetimeMs||new URL(C).origin!==e.authority.relayOrigin)tt();let re=g(z),V=f.get(re);if(V){if(!ut(V.binding,z)||V.relay!==C)tt();if(await V.opened,!await Vt(()=>V.port.check())||Q.aborted||V.abort.signal.aborted)tt();return{opened:!0,binding:z}}if(f.size>=Fa)tt();let K=new AbortController,_e={},ve=er({binding:z,deniedPorts:e.authority.deniedPorts,readCurrentJob:()=>P(z,_e,K.signal)}),he=()=>K.abort();if(Q.addEventListener("abort",he,{once:!0}),l.signal.addEventListener("abort",he,{once:!0}),Q.aborted||l.signal.aborted)he();let Ie=Qt({binding:z,deviceRelayUrl:C,port:ve,signal:K.signal}),De={binding:z,relay:C,abort:K,port:ve,opened:Ie};f.set(re,De);let Te=()=>{if(Q.removeEventListener("abort",he),l.signal.removeEventListener("abort",he),f.get(re)===De)f.delete(re)};try{if((await Ie).closed.then(Te),Q.removeEventListener("abort",he),w(M),K.signal.aborted||!await Vt(()=>ve.check()))tt();return{opened:!0,binding:z}}catch{K.abort(),Te(),tt()}},async close(R,M){w(M);let{binding:Q}=ns(R),z=f.get(g(Q));if(!z||!ut(z.binding,Q))tt();return z.abort.abort(),await z.opened.then((C)=>C.closed,()=>{return}),{closed:!0,binding:Q}},dispose(){l.abort();for(let R of f.values())R.abort.abort();f.clear()}}}import{WebSocket as Vn}from"ws";var cs=(e)=>("data"in e)?e.data.length:e.bytes,ds=2*He;function kr(e){throw new r(e,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var Et=(e)=>!["starting","running"].includes(e.state);function xi(e,l,f=Date.now()){let g=["relay_url","session_id","expires_at","cols","rows","pty","workspace"];if(Object.keys(e).length!==g.length||Object.keys(e).some((M)=>!g.includes(M))||!ae(l)||!ae(e.session_id)||typeof e.expires_at!=="string"||typeof e.relay_url!=="string"||e.relay_url.length>4096||![e.cols,e.rows].every((M)=>Number.isSafeInteger(M)&&Number(M)>=1&&Number(M)<=we))kr("invalid_pty_request");let w=e.pty;if(!w||typeof w!=="object"||Array.isArray(w))kr("invalid_pty_request");let v=w;if(Object.keys(v).length!==2||v.version!==1||!ce(v.jobId))kr("invalid_pty_request");let P;try{P=new URL(e.relay_url)}catch{return kr("invalid_pty_request")}if(!["ws:","wss:"].includes(P.protocol)||P.username||P.password||P.hash||P.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(P.hostname))kr("invalid_pty_request");let F=Date.parse(e.expires_at);if(!Number.isSafeInteger(F)||F<=f)kr("invalid_pty_request");return{workspace:H(e.workspace)??kr("invalid_pty_request"),session:{jobId:v.jobId,sessionId:e.session_id,operationId:l,relayUrl:P.href,cols:Number(e.cols),rows:Number(e.rows),leaseExpiresAtMs:Math.min(F,f+43200000)}}}async function ls(e){let{session:l,binding:f}=e;if(f.assertCurrent(),e.signal.aborted||Date.now()>=l.leaseExpiresAtMs)kr("cancelled");let g=new Vn(l.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:te}),w=new AbortController,v=()=>{},P=()=>{w.abort(),v()};e.signal.addEventListener("abort",P,{once:!0});let F=setTimeout(P,Math.max(1,l.leaseExpiresAtMs-Date.now())),R=[],M=0,Q=0,z=0,C=!1,re=!1,V=!1,K,_e,ve,he=(le)=>{ve=new r(le,"Bound terminal input was refused."),P()};g.on("error",()=>he("pty_relay_unavailable")),g.on("close",P),g.on("message",(le,fe)=>{if(w.signal.aborted)return;if(!re){he("pty_not_ready");return}let Se=Array.isArray(le)?Buffer.concat(le):le instanceof ArrayBuffer?Buffer.from(le):le;if(Se.length===0)return;let ze=R.at(-1),Ke=fe&&ze!==void 0&&"data"in ze&&ze.data.length+Se.length<=te;if(Se.length>te||M+Se.length>Sn){he("pty_input_backpressure");return}if(Ke)ze.data=Buffer.concat([ze.data,Se]);else if(fe)R.push({data:Buffer.from(Se)});else try{let Ve=JSON.parse(Se.toString("utf8"));if(Ve&&Ve.t==="close"&&Object.keys(Ve).length===1){V=!0,P();return}if(!Ve||Ve.t!=="resize"||Object.keys(Ve).length!==3||![Ve.cols,Ve.rows].every((Ae)=>Number.isSafeInteger(Ae)&&Ae>=1&&Ae<=we))throw Error("invalid_control");R.push({cols:Ve.cols,rows:Ve.rows,bytes:Se.length})}catch{he("invalid_pty_control");return}M+=Se.length,v()});function Ie(le){return xn(JSON.stringify({...f.scope,version:1,sessionId:l.sessionId,operationId:l.operationId,job:{...le,output:[],pty:le.pty?{...le.pty,output:[]}:void 0}}))}function De(le){if(!le.ok)kr(le.error);let fe=le.job;if(le.generation!==f.scope.generation||fe.jobId!==l.jobId||!fe.pty||fe.leaseExpiresAtMs>l.leaseExpiresAtMs||fe.process&&fe.process.executorLaunchId!==f.scope.executorLaunchId||fe.process&&_e&&(fe.process.pid!==_e.pid||fe.process.processGroupId!==_e.processGroupId)||fe.state!=="starting"&&(fe.environmentRevision!==f.environment.revision||fe.environmentSnapshotId!==f.environment.snapshotId))kr("pty_binding_changed");if(Ie(fe),fe.process)_e??={...fe.process};return fe}async function Te(le){f.assertCurrent();let fe=await f.request(le,w.signal);if(f.assertCurrent(),w.signal.aborted)kr("cancelled");let Se=De(fe);if(Se.inputSequence!==Q)kr("job_input_sequence");if(!Et(Se)&&Se.leaseExpiresAtMs<=Date.now())kr("pty_binding_changed");return Se}function be(le){if(f.assertCurrent(),w.signal.aborted||g.readyState!==Vn.OPEN||g.bufferedAmount+Buffer.byteLength(le)>ds)kr("pty_output_backpressure");g.send(le)}function Fe(le){if(le.firstCursor>z+1)z=le.firstCursor-1;for(let fe of le.pty.output){if(fe.cursor<=z)continue;if(fe.cursor!==z+1)kr("pty_output_gap");let Se=Buffer.from(fe.dataBase64,"base64");if(g.bufferedAmount+Se.length>ds)return!1;be(Se),z=fe.cursor}if(z!==le.nextCursor)kr("pty_output_gap");return!0}async function qe(le,fe){let Se;try{await Promise.race([e.emit(le,fe),new Promise((ze,Ke)=>{Se=setTimeout(()=>Ke(new r("pty_event_unavailable","Terminal metadata delivery timed out.")),2000)})])}finally{clearTimeout(Se)}}async function Be(){let le=AbortSignal.timeout(Mt),fe=f.request({jobId:l.jobId,action:"cancel",input:{}},le),Se,ze=new Promise((Ke,Ve)=>{if(Se=()=>Ve(new r("pty_cleanup_unconfirmed","Terminal cleanup acknowledgement was not observed within authority.")),le.addEventListener("abort",Se,{once:!0}),le.aborted)Se()});try{let Ke=await Promise.race([fe,ze]);if(le.aborted)kr("pty_cleanup_unconfirmed");return De(Ke)}finally{le.removeEventListener("abort",Se)}}try{await new Promise((Ke,Ve)=>{let Ae=setTimeout(()=>{P(),Ve(new r("pty_relay_unavailable","Terminal pairing timed out."))},5000),Ye=()=>{clearTimeout(Ae),Ve(new r("cancelled","Terminal pairing was cancelled."))};if(w.signal.addEventListener("abort",Ye,{once:!0}),g.once("open",()=>{clearTimeout(Ae),w.signal.removeEventListener("abort",Ye),Ke()}),w.signal.aborted)Ye()}),f.assertCurrent(),C=!0,K=await Te({jobId:l.jobId,action:"start",input:{mode:"pty",cols:l.cols,rows:l.rows,leaseExpiresAtMs:l.leaseExpiresAtMs}});let le=Date.now()+5000;while(K.state==="starting"){if(Date.now()>=le)kr("pty_not_ready");await new Promise((Ke)=>setTimeout(Ke,25)),K=await Te({jobId:l.jobId,action:"inspect",input:{after:z}})}if(K.state!=="running"||K.inputSequence!==0||K.leaseExpiresAtMs<=Date.now())kr("pty_not_ready");await qe("pty.ready",Ie(K)),re=!0,be(JSON.stringify({t:"open",cols:K.pty.cols,rows:K.pty.rows,receipt:Ie(K)}));let fe=!1,Se=0,ze=!1;while(!w.signal.aborted){let Ke=K.firstCursor>z+1,Ve=Fe(K);if(Et(K)){if(Ve)break}else if(Ke)fe=!0;else if(fe&&Ve&&Date.now()>=Se){fe=!1,Se=Date.now()+1000;let{cols:Ye,rows:_r}=K.pty;for(let br of[{cols:Ye,rows:_r>1?_r-1:2},{cols:Ye,rows:_r}]){if(Et(K))break;let Pr=++Q;if(K=await Te({jobId:l.jobId,action:"resize",input:{sequence:Pr,...br}}),K.inputSequence!==Pr)kr("job_input_sequence")}continue}let Ae=Et(K)||ze?void 0:R.shift();if(Ae){M-=cs(Ae);let Ye=++Q;try{K=await Te("data"in Ae?{jobId:l.jobId,action:"input",input:{sequence:Ye,dataBase64:Ae.data.toString("base64")}}:{jobId:l.jobId,action:"resize",input:{sequence:Ye,cols:Ae.cols,rows:Ae.rows}})}catch(_r){if(!(_r instanceof r)||_r.code!=="job_input_backpressure")throw _r;Q-=1,R.unshift(Ae),M+=cs(Ae),ze=!0;continue}if(K.inputSequence!==Ye)kr("job_input_sequence")}else if(await new Promise((Ye)=>{let _r=setTimeout(Ye,ze||!Ve?10:50);if(v=()=>{clearTimeout(_r),Ye()},w.signal.aborted||!ze&&R.length)v()}),ze=!1,v=()=>{},!w.signal.aborted&&Ve)try{K=await Te({jobId:l.jobId,action:"inspect",input:{after:z}})}catch(Ye){if(!V||!(Ye instanceof r)||Ye.code!=="cancelled")throw Ye}}}catch(le){ve??=le}finally{if(re=!1,R.length=0,clearTimeout(F),e.signal.removeEventListener("abort",P),P(),C&&(!K||!Et(K)))try{K=await Be()}catch{K=void 0}try{if(!K||!Et(K)||K.pty?.cleanup!=="confirmed")kr("pty_cleanup_unconfirmed");let le=Ie(K);if(g.readyState===Vn.OPEN)await new Promise((fe)=>{let Se=setTimeout(fe,500);g.send(JSON.stringify({t:"exit",code:K.exitCode,receipt:le}),()=>{clearTimeout(Se),fe()})});await qe("pty.stopped",le)}catch(le){ve??=le}g.terminate()}if(ve)throw ve;if(e.signal.aborted)kr("cancelled");if(!K)kr("pty_cleanup_unconfirmed");return{receipt:Ie(K)}}var Ka=()=>{let e={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{unit:"entries",verb:"to have"}};function l(w){return e[w]??null}let f={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"},g={nan:"NaN"};return(w)=>{switch(w.code){case"invalid_type":{let v=g[w.expected]??w.expected,P=_o(w.input),F=g[P]??P;return`Invalid input: expected ${v}, received ${F}`}case"invalid_value":if(w.values.length===1)return`Invalid input: expected ${hi(w.values[0])}`;return`Invalid option: expected one of ${pi(w.values,"|")}`;case"too_big":{let v=w.inclusive?"<=":"<",P=l(w.origin);if(P)return`Too big: expected ${w.origin??"value"} to have ${v}${w.maximum.toString()} ${P.unit??"elements"}`;return`Too big: expected ${w.origin??"value"} to be ${v}${w.maximum.toString()}`}case"too_small":{let v=w.inclusive?">=":">",P=l(w.origin);if(P)return`Too small: expected ${w.origin} to have ${v}${w.minimum.toString()} ${P.unit}`;return`Too small: expected ${w.origin} to be ${v}${w.minimum.toString()}`}case"invalid_format":{let v=w;if(v.format==="starts_with")return`Invalid string: must start with "${v.prefix}"`;if(v.format==="ends_with")return`Invalid string: must end with "${v.suffix}"`;if(v.format==="includes")return`Invalid string: must include "${v.includes}"`;if(v.format==="regex")return`Invalid string: must match pattern ${v.pattern}`;return`Invalid ${f[v.format]??w.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${w.divisor}`;case"unrecognized_keys":return`Unrecognized key${w.keys.length>1?"s":""}: ${pi(w.keys,", ")}`;case"invalid_key":return`Invalid key in ${w.origin}`;case"invalid_union":if(w.options&&Array.isArray(w.options)&&w.options.length>0)return`Invalid discriminator value. Expected ${w.options.map((P)=>`'${P}'`).join(" | ")}`;return"Invalid input";case"invalid_element":return`Invalid value in ${w.origin}`;default:return"Invalid input"}}};function qn(){return{localeError:Ka()}}L(qn());import{createHash as Ga,randomUUID as Qn}from"crypto";import{spawnSync as _s}from"child_process";import{closeSync as us,constants as Xn,fstatSync as Ja,fsyncSync as Va,lstatSync as Xt,mkdirSync as qa,mkdtempSync as ms,openSync as fs,readFileSync as Ya,readdirSync as hs,realpathSync as Yt,rmSync as Zn,unlinkSync as Xa}from"fs";import{createConnection as Za}from"net";import{dirname as Qa,join as ft,sep as ec}from"path";import{tmpdir as rc}from"os";var Tr=new Map,nt=new Map;function Xr(e,l){return Ga("sha256").update(JSON.stringify([e,l])).digest("hex")}function Rt(e){try{qa(e,{mode:448})}catch(f){if(!(f instanceof Error&&("code"in f)&&f.code==="EEXIST"))throw f}let l=Xt(e);if(!l.isDirectory()||l.isSymbolicLink()||!I(l)||Yt(e)!==e)throw new r("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function tc(e){let l;try{l=Xt(e)}catch(f){if(f instanceof Error&&"code"in f&&f.code==="ENOENT")return!1;throw f}return!l.isDirectory()||l.isSymbolicLink()||hs(e).length>0}function rr(e){let l=Xr(e.root,e.runId),f=e.previousRuntimeDirectories?.find((P)=>tc(ft(P,"jobs",l.slice(0,16))))??e.runtimeDirectory;Rt(f);let g=ft(f,"jobs");Rt(g);let w=ft(g,l.slice(0,16));if(e.maxScopes!==void 0){let P=hs(g);if(!Number.isSafeInteger(e.maxScopes)||e.maxScopes<1||P.length>e.maxScopes||!P.includes(l.slice(0,16))&&P.length>=e.maxScopes)throw new r("process_journal_capacity","Managed process receipt capacity is full; preserve uncertain jobs and reconcile their existing receipts before starting more work.")}Rt(w);let v=ms(ft(bo(),"reason-j-"));try{return Rt(v),{journalDirectory:w,scopeId:l,launchDirectory:v,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${Qn()}`:ft(v,"control.sock"),disposeSocket:()=>Zn(v,{recursive:!0,force:!0})}}catch(P){throw Zn(v,{recursive:!0,force:!0}),P}}var nc=60000,oc=5000;function sc(e){if(process.platform==="win32")return ic(e);let l=_s("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:2000,env:{...process.env,LC_ALL:"C",LANG:"C"}}),f=l.status===0?/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(l.stdout.trim()):null,g=f?"JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(f[1]):-1;if(!f||g<0||g%3!==0)return null;let w=new Date(Number(f[6]),g/3,Number(f[2]),Number(f[3]),Number(f[4]),Number(f[5])).getTime();return Number.isFinite(w)?w:null}function ic(e){let l=_s(x("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:Jr()}),f=l.status===0?Date.parse(l.stdout.trim()):Number.NaN;return Number.isFinite(f)?f:null}function gs(e,l={}){let f=ft(e.journalDirectory,"owner.lock"),g;try{g=fs(f,Xn.O_RDONLY|Xn.O_NOFOLLOW)}catch{return null}try{let w=Ja(g);if(!w.isFile()||w.nlink!==1||!I(w)||w.size>4096)return null;let v=null;try{v=JSON.parse(Ya(g,"utf8"))}catch{}let P;if(v===null){if((l.now??Date.now)()-w.mtimeMs<nc)return null;P={reason:"never_written",executorLaunchId:null}}else{let{version:M,scopeId:Q,pid:z,createdAtMs:C,executorLaunchId:re}=v;if(M!==1||Q!==e.scopeId||typeof re!=="string"||typeof z!=="number"||!Number.isSafeInteger(z)||z<1||z===process.pid||typeof C!=="number"||!Number.isSafeInteger(C))return null;if(!(l.exists??((K)=>{try{return process.kill(K,0),!0}catch(_e){return!(_e instanceof Error&&("code"in _e)&&_e.code==="ESRCH")}}))(z))P={reason:"owner_exited",executorLaunchId:re};else{let K=(l.startedAtMs??sc)(z);if(K===null||K<=C+oc)return null;P={reason:"pid_reused",executorLaunchId:re}}}let F=Xt(f);if(F.dev!==w.dev||F.ino!==w.ino)return null;Xa(f);let R=fs(e.journalDirectory,Xn.O_RDONLY);try{Va(R)}finally{us(R)}return P}catch{return null}finally{us(g)}}function bs(e){let l={...e,workspace:e.workspace&&Object.freeze({...e.workspace}),previewAuthority:e.previewAuthority&&Object.freeze({...e.previewAuthority,owner:Object.freeze({...e.previewAuthority.owner}),deniedPorts:new Set(e.previewAuthority.deniedPorts)})},f=Xr(l.root,l.runId);if(Tr.has(f)||l.operationId!==void 0&&nt.has(l.operationId))throw new r("hands_jobs_busy","The Session already has a live Hands job supervisor.");let g={binding:l,key:f,terminals:new Map};if(l.previewAuthority&&l.environment)g.previews=as({authority:l.previewAuthority,runId:l.runId,expiresAtMs:l.expiresAtMs,executorLaunchId:l.executorLaunchId,environment:l.environment,isCurrent:()=>Tr.get(g.key)===g,identity:()=>{try{return Pt(l)}catch{return null}},inspect:(w,v)=>{if(Tr.get(g.key)!==g)throw new r("preview_unavailable","The Hands supervisor is no longer current.");return ws(l,{jobId:w,action:"inspect",input:{after:0}},v)}});if(Tr.set(f,g),l.operationId!==void 0)nt.set(l.operationId,g);return()=>{if(Tr.get(g.key)===g)Tr.delete(g.key);if(l.operationId!==void 0&&nt.get(l.operationId)===g)nt.delete(l.operationId);g.previews?.dispose();for(let w of g.terminals.values())w.abort()}}var ac=5000,cc=20;async function ki(e){let l=(w)=>{throw new r("hands_rebind_unavailable",w)};if(!N(e.operationId)||!N(e.runId)||!N(e.fenceId)||!U(e.targetGeneration))l("Reason sent an invalid Hands rebind.");let f=nt.get(e.operationId);if(!f||f.binding.root!==e.root)return l("No live Hands supervisor owns this operation.");for(let w=Date.now()+ac;;){if(e.signal?.aborted)l("The Hands rebind was cancelled.");if(nt.get(e.operationId)!==f)l("The Hands supervisor is no longer current.");let v=null;try{v=Pt(f.binding)}catch{}if(v&&v.generation===e.targetGeneration&&v.fenceId===e.fenceId)break;if(v&&v.generation>e.targetGeneration||Date.now()>=w)l("The executor did not adopt this take.");await new Promise((P)=>setTimeout(P,cc))}if(nt.get(e.operationId)!==f||Tr.get(f.key)!==f)l("The Hands supervisor is no longer current.");let g=Xr(e.root,e.runId);if(f.key===g)return;if(Tr.has(g))l("The taking run already has a live Hands job supervisor.");Tr.delete(f.key);for(let w of f.terminals.values())w.abort();f.key=g,Tr.set(g,f)}function Je(e){let l="operationId"in e?nt.get(e.operationId):Tr.get(Xr(e.root,e.runId)),f=l&&l.binding.root===e.root?l.binding:void 0;if(!f?.environment||f.expiresAtMs<=Date.now())throw new r("environment_unavailable","No live Hands supervisor owns this environment.");return f.environment.install(e.payload)}async function Ci(e){let l=Tr.get(Xr(e.root,e.runId));if(!l?.previews||!e.owner)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return l.previews.open(e.payload,e.owner,e.signal)}async function Ai(e){let l=Tr.get(Xr(e.root,e.runId));if(!l?.previews||!e.owner||e.signal.aborted)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return l.previews.close(e.payload,e.owner)}async function Pi(e){let l=Xr(e.root,e.runId),f=Tr.get(l),g=f?.binding,w=g?.runId,v=g?.previewAuthority,P=g?.environment,F=e.owner&&{...e.owner},R=e.authority&&{...e.authority},M=()=>{throw new r("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!f||!g||!v||!P||!F||!R||!g.workspace)return M();let Q=Object.freeze({...g.workspace}),z=Pt(g),C=P.current(),re=()=>{if(Tr.get(l)!==f||F.organization_id!==v.owner.organization_id||F.user_id!==v.owner.user_id||F.device_id!==v.owner.device_id||e.deviceId!==v.owner.device_id||e.rootId!==v.rootId||T(e.workspace)!==T(Q))M();let K=Pt(g),_e=P.current();if(K.generation!==z.generation||K.fenceId!==z.fenceId||_e.run_id!==w||_e.device_id!==e.deviceId||_e.root_id!==e.rootId||_e.snapshot_id!==C.snapshot_id||_e.revision!==C.revision||_e.binding.target_generation!==z.generation||_e.binding.target_fence_id!==z.fenceId||R.device_id!==e.deviceId||R.binding!==_e.binding.kind||R.target_revision!==_e.binding.target_revision||R.root_grant_revision!==_e.binding.root_grant_revision||R.target_generation!==z.generation||R.target_fence_id!==z.fenceId)M()};if(re(),new URL(e.session.relayUrl).origin!==v.relayOrigin||f.terminals.has(e.session.jobId)||f.terminals.size>=4)return M();let V=new AbortController;f.terminals.set(e.session.jobId,V);try{return await ls({session:{...e.session,leaseExpiresAtMs:Math.min(e.session.leaseExpiresAtMs,z.expiresAtMs,Date.parse(C.expires_at))},signal:AbortSignal.any([e.signal,V.signal]),emit:e.emit,binding:{assertCurrent:re,environment:{revision:C.revision,snapshotId:C.snapshot_id},scope:{runId:e.runId,deviceId:e.deviceId,rootId:e.rootId,workspace:Q,binding:C.binding.kind,targetRevision:C.binding.target_revision,rootGrantRevision:C.binding.root_grant_revision,generation:z.generation,fenceId:z.fenceId,executorLaunchId:z.executorLaunchId},request:(K,_e)=>nr(z,Rr(JSON.stringify({...K,type:"job",version:2,generation:z.generation,id:Qn()})),_e)}})}finally{if(f.terminals.get(e.session.jobId)===V)f.terminals.delete(e.session.jobId)}}async function Ti(e){if(ce(e.payload.jobId))throw new r("pty_binding_required","PTY jobs require the bound terminal capability.");let l=Tr.get(Xr(e.root,e.runId))?.binding;if(!l||l.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","No live Hands supervisor owns this Session and root.");return ws(l,e.payload,e.signal)}var dc=1e4,lc=20,uc=ye/2,fc=je/2,pc=(e)=>e.output.reduce((l,f)=>l+f.text.length,0);async function ws(e,l,f){if(Object.keys(l).some((M)=>!["jobId","action","input","waitForExitMs"].includes(M)))throw new r("invalid_payload","Unexpected job control field.");let{waitForExitMs:g,...w}=l;if(g!==void 0&&(w.action!=="start"||typeof w.input!=="object"||w.input===null||!("script"in w.input)||typeof g!=="number"||!Number.isSafeInteger(g)||g<1||g>dc))throw new r("invalid_payload","Only a script start may wait for its job, within its bound.");let v=(M)=>{let Q=Pt(e);return nr(Q,Rr(JSON.stringify({...M,type:"job",version:2,generation:Q.generation,id:Qn()})),f)},P=await v(w);if(g===void 0)return P;let F=Date.now()+g,R=P;while(R.ok&&["starting","running"].includes(R.job.state)&&R.job.output.length<uc&&pc(R.job)<fc&&!f.aborted&&Date.now()<F){if(await new Promise((M)=>setTimeout(M,Math.min(lc,F-Date.now()))),f.aborted)break;try{let M=await v({jobId:w.jobId,action:"inspect",input:{after:0}});if(!M.ok)break;R=M}catch{break}}return R}function Pt(e){if(e.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","Hands authority expired.");let l=e.readIdentity?e.readIdentity():e;if(!l||!U(l.generation)||!N(l.fenceId)||l.generation<e.generation||l.generation===e.generation&&l.fenceId!==e.fenceId)throw new r("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return e.generation=l.generation,e.fenceId=l.fenceId,{...e}}function nr(e,l,f){if(f.aborted)return Promise.reject(new r("cancelled","Job control was cancelled."));return new Promise((g,w)=>{let v=Za(e.socketPath),P="",F=!1,R,M=(z,C)=>{if(F)return;if(F=!0,clearTimeout(R),f.removeEventListener("abort",Q),v.destroy(),z)w(z);else g(C)},Q=()=>M(new r("cancelled","Job control waiter cancelled; inspect before retrying mutations."));f.addEventListener("abort",Q,{once:!0}),v.setEncoding("utf8"),R=setTimeout(()=>M(new r("hands_job_result_unknown","Job control timed out; inspect before retrying mutations.")),Math.min(1e4,Math.max(1,e.expiresAtMs-Date.now()))),v.on("error",()=>M(new r("hands_job_result_unknown","Hands job control connection failed."))),v.once("connect",()=>v.write(JSON.stringify({version:1,scopeId:e.scopeId,fenceId:e.fenceId,executorLaunchId:e.executorLaunchId,request:l})+`
|
|
9
|
+
`)),v.on("data",(z)=>{if(P+=z,Buffer.byteLength(P)>Ue)M(new r("hands_job_result_unknown","Hands job result exceeded its bound."))}),v.once("end",()=>{if(Date.now()>=e.expiresAtMs){M(new r("hands_job_result_unknown","Hands authority expired before the result was acknowledged."));return}try{let z=Or(P.trim());if(z.id!==l.id||z.generation!==e.generation||z.ok&&z.job.jobId!==l.jobId)throw Error("identity");M(void 0,z)}catch{M(new r("hands_job_result_unknown","Hands job response identity or shape was invalid."))}}),v.once("close",()=>{if(!F)M(new r("hands_job_result_unknown","Hands job control closed before an acknowledged result."))})})}function ps(e){let l=Yt(e.root),f=e.authority,g=Date.parse(e.leaseUntil),w=()=>{if(e.signal.throwIfAborted(),!Number.isFinite(g)||g<=Date.now())throw Error("local_device_gh_lease_expired")};if(w(),f.readOnly&&f.generation===null)return{root:l,readOnly:!0,signal:e.signal,deadlineMs:g,assertCurrent:w};let v=Xr(l,e.runId),P=Tr.get(v),F=P?.binding;if(!F?.environment||!F.workspace||F.localGithubConfinement!==!0)throw Error("local_device_gh_confinement_unavailable");let R=F.environment.current(),M=()=>{w();let z=F.environment.current(),C=Pt(F);if(Tr.get(v)!==P||z.github_auth!=="local_gh"||z.run_id!==F.runId||f.runId!==e.runId||z.device_id!==f.deviceId||z.root_id!==f.rootId||String(z.binding.root_grant_revision)!==f.rootRevision||z.binding.target_generation!==f.generation||z.binding.target_fence_id!==f.fenceId||C.generation!==f.generation||C.fenceId!==f.fenceId||z.snapshot_id!==R.snapshot_id||z.revision!==R.revision)throw Error("local_device_gh_authority_changed")};M();let Q=ne(l,F.workspace);return{root:Q.boundary,signal:e.signal,deadlineMs:g,privateDirectory:Qa(F.environment.path),repoPath:Q.path,readOnly:f.readOnly,forbiddenSecretValues:Object.values(R.variables),secretNames:(z)=>Object.entries(R.variables).filter(([,C])=>C.trim()===z.trim()).map(([C])=>`variable ${C}`),assertCurrent:M}}async function Ri(e,l){let f=ke.parse(e.request),g=ie.parse(e.authority);if(g.contributorRefresh&&f.kind==="read"&&g.readOnly)return l(ps(e));let w=Boolean(g.contributorRefresh);if(w&&(g.merge||f.kind!=="pr_mutation"||f.mutation.action!=="edit"||typeof f.mutation.body!=="string"||f.mutation.title!==void 0||f.mutation.base!==void 0||g.readOnly||g.runId!==e.runId||g.repoFullName!==f.repoFullName))throw Error("local_device_gh_contributor_refresh_authority_invalid");if(f.kind!=="pr_merge"&&!w){if(g.merge)throw Error("local_device_gh_merge_authority_invalid");return l(ps(e))}if(!w&&(!g.merge||g.readOnly||g.runId!==e.runId||g.repoFullName!==f.repoFullName||g.merge.source==="agent"&&(g.generation===null||g.fenceId===null)))throw Error("local_device_gh_merge_authority_invalid");let v=Yt(e.root),P=Xt(v),F=Date.parse(e.leaseUntil);if(!Number.isFinite(F)||F<=Date.now())throw Error("local_device_gh_lease_expired");let R=Yt(rc());if(R===v||R.startsWith(v+ec))throw Error("local_device_gh_private_scope_unavailable");let M=ms(ft(R,"reason-gh-merge-"));try{Rt(M);let Q=()=>{if(e.signal.throwIfAborted(),Date.now()>=F)throw Error("local_device_gh_lease_expired");let z=Xt(e.root);if(z.isSymbolicLink()||z.dev!==P.dev||z.ino!==P.ino||Yt(e.root)!==v)throw Error("local_device_gh_authority_changed");Rt(M)};return Q(),await l({root:v,readOnly:!1,privateDirectory:M,forbiddenSecretValues:[],signal:e.signal,deadlineMs:F,assertCurrent:Q})}finally{Zn(M,{recursive:!0,force:!0})}}var ks=43200000;function Ot(e){return Number.isSafeInteger(e)&&Math.abs(e)<=8640000000000000?e:null}function ys(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function vs(e,l){return Object.keys(e).length===l.length&&l.every((f)=>Object.hasOwn(e,f))}function Oi(e){if(!ys(e)||!vs(e,["version","outcome","clock_source","validation_now_ms","expiry_ms","remaining_ms","maximum_lifetime_ms","cli_artifact"])||e.version!==1||e.maximum_lifetime_ms!==43200000||typeof e.outcome!=="string"||!["accepted","parse","noncanonical","expired","over_cap"].includes(e.outcome)||typeof e.clock_source!=="string"||!["date_now","injected"].includes(e.clock_source))return null;for(let g of["validation_now_ms","expiry_ms"]){let w=e[g];if(w!==null&&(typeof w!=="number"||Ot(w)===null))return null}if(e.remaining_ms!==null&&(typeof e.remaining_ms!=="number"||!Number.isSafeInteger(e.remaining_ms)))return null;let l=typeof e.expiry_ms==="number"&&typeof e.validation_now_ms==="number"?e.expiry_ms-e.validation_now_ms:null;if(e.remaining_ms!==(l!==null&&Number.isSafeInteger(l)?l:null))return null;if(e.outcome==="parse"&&e.expiry_ms!==null)return null;if(e.outcome!=="parse"&&e.expiry_ms===null)return null;if(e.outcome==="expired"&&!(typeof l==="number"&&l<=0))return null;if(e.outcome==="over_cap"&&!(typeof l==="number"&&l>43200000))return null;if(e.outcome==="accepted"&&!(typeof l==="number"&&l>0&&l<=43200000))return null;let f=e.cli_artifact;if(!ys(f)||!vs(f,["kind","status","sha256","observed_at_ms"])||f.observed_at_ms!==null&&(typeof f.observed_at_ms!=="number"||Ot(f.observed_at_ms)===null))return null;if(f.kind==="entrypoint_file"){if(f.status!=="observed"||typeof f.sha256!=="string"||!/^[a-f0-9]{64}$/.test(f.sha256)||f.observed_at_ms===null)return null}else if(f.kind!=="unavailable"||f.sha256!==null||typeof f.status!=="string"||!["unsupported_entrypoint","read_failed","file_changed","size_limit","time_limit"].includes(f.status))return null;return e}var eo=c({kind:s(["workspace_source","mcp_control"]),target_revision:o().int().nonnegative(),root_grant_revision:o().int().positive()}),Ss=new RegExp(Xe.tokenPattern),_c=c({token_url:mt().max(2048),request_token:t().min(1).max(8192).regex(Ss),aws_credentials_url:mt().max(2048).nullable()});function Es(e,l){let f=(g,w)=>{try{let v=new URL(g);return v.origin===new URL(l).origin&&v.pathname===w&&!v.username&&!v.password&&!v.search&&!v.hash}catch{return!1}};if(!Ss.test(e.request_token)||!f(e.token_url,Xe.tokenPath)||e.aws_credentials_url!==null&&!f(e.aws_credentials_url,Xe.awsPath))return null;return{REASON_OIDC_TOKEN_URL:e.token_url,REASON_OIDC_REQUEST_TOKEN:e.request_token,...e.aws_credentials_url!==null?{AWS_CONTAINER_CREDENTIALS_FULL_URI:e.aws_credentials_url,AWS_CONTAINER_AUTHORIZATION_TOKEN:e.request_token}:{}}}function Rs(e){return new TextEncoder().encode(e).byteLength}function mc(e){return Rs(JSON.stringify(e)+`
|
|
10
|
+
`)}var ir=c({version:n(1),snapshot_id:A(),revision:o().int().positive(),run_id:t().min(1).max(160),device_id:A(),root_id:A(),binding:eo.extend({target_generation:o().int().positive(),target_fence_id:A()}),expires_at:y.datetime({offset:!0}),variables:oe(t().max(128).regex(St),t().refine((e)=>!e.includes("\x00")&&Rs(e)<=W.valueBytes)).refine((e)=>Object.keys(e).length<=W.variables),github_auth:n("local_gh").optional(),git:c({base_url:mt().max(2048),token:t().min(1).max(4096).regex(/^[A-Za-z0-9._~-]+$/),expires_at:y.datetime({offset:!0})}).nullable(),cloud_access:_c.optional()}).refine((e)=>e.github_auth!=="local_gh"||e.git===null,"conflicting git authority").refine((e)=>mc(e)<=W.snapshotBytes,"snapshot too large");import{spawn as hc}from"child_process";import{basename as gc,isAbsolute as np}from"path";var bc=0,Ps=120000,Os=15000,wc=65536;function ro(e=process.execPath,l=process.argv[1]){let f=gc(e),g=(f.startsWith("bun")||f.startsWith("node"))&&typeof l==="string"&&l.length>0;return{command:e,prefix:g?[l]:[]}}function Ii(e={}){let{command:l,prefix:f}=ro(e.executablePath,e.sourceEntrypoint),g=e.spawnProcess??hc,w=e.now??Date.now,v=null,P=0,F=!1,R=(Q)=>{try{Q.kill("SIGKILL")}catch{}},M=()=>{if(F)return;if(v&&w()-P<Ps-Os)return;if(v){let z=v;v=null,R(z)}let Q;try{Q=g(l,[...f,"__device","__hands-worker","--handoff-fd",String(bc)],{cwd:"/",env:{PATH:process.env.PATH??"/usr/local/bin:/usr/bin:/bin"},shell:!1,stdio:["pipe","ignore","pipe"]})}catch{return}v=Q,P=w(),Q.on("error",()=>{if(v===Q)v=null}),Q.once("exit",(z,C)=>{if(v!==Q)return;v=null,e.log?.("hands.worker_prespawn_exited",{exit_code:z,exit_signal:C})}),e.log?.("hands.worker_prespawned",{pid:Q.pid??null})};return{arm:M,take(Q){let z=v;if(!z||F)return null;let C=Q.args.at(-1),re=Q.options.env,V=Q.options.cwd,K=[...f,"__device","__hands-worker","--config"];if(Q.command!==l||Q.args.length!==K.length+1||K.some((Ie,De)=>Q.args[De]!==Ie)||typeof C!=="string"||!re||typeof V!=="string"||Q.options.shell||JSON.stringify(Q.options.stdio)!==JSON.stringify(["ignore","ignore","pipe"]))return null;v=null;let _e=z.stdin,ve={configPath:C,cwd:V,env:Object.fromEntries(Object.entries(re).filter((Ie)=>typeof Ie[1]==="string"))},he=JSON.stringify(ve);if(z.exitCode!==null||z.signalCode!==null||!_e||_e.destroyed||w()-P>=Ps-Os||Buffer.byteLength(he,"utf8")>wc)return R(z),null;return _e.on("error",()=>{return}),_e.end(he),z.once("exit",()=>{M()}),e.log?.("hands.worker_prespawn_taken",{pid:z.pid??null}),z},adopt(Q){Q.once("exit",()=>{M()})},close(){if(F=!0,v)R(v);v=null}}}import{accessSync as Rc,constants as Pc,statSync as Oc}from"fs";import{homedir as xc,tmpdir as Ac,userInfo as Ic}from"os";import{delimiter as Tc,win32 as Cc}from"path";var yc=new Set(["ALL_PROXY","BUN_BE_BUN","BUN_OPTIONS","CURL_CA_BUNDLE","GIT_SSL_CAINFO","GRPC_DEFAULT_SSL_ROOTS_FILE_PATH","HTTPS_PROXY","HTTP_PROXY","NO_PROXY","NODE_EXTRA_CA_CERTS","NODE_OPTIONS","NODE_TLS_REJECT_UNAUTHORIZED","REQUESTS_CA_BUNDLE","SSLKEYLOGFILE","SSL_CERT_DIR","SSL_CERT_FILE","all_proxy","http_proxy","https_proxy","no_proxy"]);var vc=["BUN_CONFIG_","BUN_INSPECT","DYLD_","NODE_DEBUG"],kc=new Set(["BUN_INSTALL"]);var Sc=/^--(?:max-old-space-size|max-semi-space-size|stack-size)=\d{1,9}$/;function Ec(e){return(e??"").split(/\s+/).filter(Boolean).every((l)=>Sc.test(l.replaceAll("_","-")))}function xs(e){return Object.keys(e).filter((l)=>yc.has(l)&&!(l==="NODE_OPTIONS"&&Ec(e[l]))||vc.some((f)=>l.startsWith(f))||l.startsWith("BUN_")&&!kc.has(l)).sort()}var Dc=new Set(["HOME","PATH","PWD","OLDPWD","SHLVL","_","TMPDIR","TMP","TEMP","SHELL","BASH_ENV","ENV","ZDOTDIR","PROMPT_COMMAND","IFS","CDPATH","GLOBIGNORE","SHELLOPTS","BASHOPTS","NODE_PATH"]),Lc=/^(?:ARA_|REASON_|PI_|GIT_|GH_|GITHUB_|LD_|DYLD_|BUN_|BASH_FUNC_|SSH_)/,Nc=/TOKEN|SECRET|PASSW|PASSPHRASE|CREDENTIAL|API_?KEY|ACCESS_?KEY|PRIVATE_?KEY|AUTH/i,Hc=/^[A-Za-z_][A-Za-z0-9_]*$/;function or(e=process.env){let l=(w)=>{if(!(process.platform==="win32"?Cc.isAbsolute(w):w.startsWith("/"))||/[\0\r\n]/.test(w)||w.length>32768)throw Error("invalid_host_execution_environment");return w};if(e.PATH!==void 0&&(/[\0\r\n]/.test(e.PATH)||e.PATH.length>32768))throw Error("invalid_host_execution_environment");let f=new Set(xs(e)),g=Object.fromEntries(Object.entries(e).filter((w)=>{let[v,P]=w;return typeof P==="string"&&P.length<=32768&&!P.includes("\x00")&&v.length<=128&&Hc.test(v)&&!f.has(v)&&!Dc.has(v)&&!Lc.test(v)&&!Nc.test(v)}).sort(([w],[v])=>w.localeCompare(v)).slice(0,512));return{home:l(e.HOME||(process.platform==="win32"?e.USERPROFILE:void 0)||xc()),path:((w)=>process.platform==="win32"?un(w):w)(mr(e.PATH??"").join(Tc)||fr),temporaryDirectory:l(e.TMPDIR||e.TMP||e.TEMP||Ac()),variables:g}}function sr(e=process.env,l=()=>Ic().shell){if(process.platform==="win32")return se();let f=(w)=>{if(!w||!/^\/[A-Za-z0-9._/-]*\/(?:bash|zsh)$/.test(w))return!1;try{return Rc(w,Pc.X_OK),Oc(w).isFile()}catch{return!1}};if(f(e.SHELL))return e.SHELL;let g;try{g=l()}catch{g=void 0}return f(g)?g:"/bin/zsh"}class xt extends Error{}function As(e){let l;try{l=new URL(e)}catch{throw new xt("The proxy must be a URL like https://proxy.example.com:3128.")}if(l.protocol!=="https:"&&l.protocol!=="http:")throw new xt("The proxy URL must use the https or http scheme.");if(!l.hostname)throw new xt("The proxy URL must name a host.");if(l.port!==""&&Number(l.port)<1)throw new xt("The proxy URL must use a port between 1 and 65535.");if(l.pathname!==""&&l.pathname!=="/"||l.search||l.hash)throw new xt("The proxy URL must not carry a path, query, or fragment.");return l.toString()}import{createHash as Bc}from"crypto";import{isAbsolute as Is,join as Ts,relative as Cs,resolve as vn,sep as Ds}from"path";var yn=t().min(1).refine(Is,"absolute path required"),to=c({version:n(1),apiOrigin:mt(),channel:s(["staging","production"]),stateDirectory:yn,workspaceRoot:yn,lifetime:s(["persistent","ephemeral"]),executionMode:s(["confined","host"]).default("confined"),name:t().min(1).max(160).default("Reason headless worker"),slots:o().int().min(1).max(4).default(1),shutdownGraceMs:o().int().min(0).max(300000).default(30000),proxy:c({version:n(It),url:t().refine((e)=>{try{return As(e)===e}catch{return!1}},"invalid proxy URL"),caFile:yn.optional()}).optional(),userChrome:d().optional(),cloudSessions:n(!0).optional(),localLogins:d().optional(),folders:u(yn).min(1).max(31).optional()}),Mc=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,B=_("channel",[to,to.extend({channel:n("pr"),apiOrigin:t(),prEnvironment:t()}),to.extend({channel:n("local-qa"),apiOrigin:t()})]).superRefine((e,l)=>{if(e.channel==="local-qa"){if(!Mc.test(e.apiOrigin))l.addIssue({code:"custom",message:"local QA worker requires an exact HTTPS trycloudflare.com quick-tunnel origin"})}else if(e.channel==="pr"){let g=e.prEnvironment,w=/^https:\/\/([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)\.up\.railway\.app$/.exec(e.apiOrigin),v=w?.[1]?.match(/(?:^|-)pr-[0-9]+(?=-|$)/g)?.map((P)=>P.replace(/^-/,""));if(!g||/^pr-[1-9][0-9]*$/.exec(g)?.[0]!==g||w?.[0]!==e.apiOrigin||v?.length!==1||v[0]!==g)l.addIssue({code:"custom",message:"PR worker requires explicit prEnvironment and an exact same-PR HTTPS Railway origin"})}else{let g=new URL(e.apiOrigin);if(g.origin!==e.apiOrigin||g.username||g.password||g.protocol!=="https:"&&!(g.protocol==="http:"&&Rn(g.origin))||!Rn(g.origin)&&!Ji(e.channel,g.origin))l.addIssue({code:"custom",message:"API origin must match channel (or loopback)"})}if(!Ne(e.workspaceRoot,e.stateDirectory))l.addIssue({code:"custom",message:"state and workspace must be disjoint"});let f=e.folders??[];if(new Set([e.workspaceRoot,...f]).size!==f.length+1||f.some((g)=>!Ne(g,e.stateDirectory)))l.addIssue({code:"custom",message:"folders must be distinct and disjoint from state"})});function m(e){return Ts(e.stateDirectory,`headless-${e.channel==="pr"?e.prEnvironment:e.channel}`)}function Ne(e,l){if(Zr(l,e))return!1;return!Zr(e,l)||E(Ts(Ds,Cs(vn(e),vn(l))))}function Zr(e,l){let f=Cs(vn(e),vn(l));return f===""||f!==".."&&!f.startsWith(`..${Ds}`)&&!Is(f)}function ee(e){let{proxy:l,userChrome:f,cloudSessions:g,localLogins:w,folders:v,...P}=e;return Bc("sha256").update(JSON.stringify(P)).digest("hex")}import{readdir as jc}from"fs/promises";var Wc=15000;function rn(e){let l=e instanceof Error&&"code"in e?e.code:null;return l==="EPERM"||l==="EACCES"}function nn(e){return new r("folder_access_denied",`macOS blocked Reason from opening ${e}. Allow Reason in System Settings \u203A Privacy & Security \u203A Files and Folders `+"(or Full Disk Access), then try again.")}async function Ls(e,{timeoutMs:l=Wc,open:f=(g)=>jc(g)}={}){let g,w=new Promise((v)=>{g=setTimeout(()=>v("pending"),l)});try{if(await Promise.race([f(e).then(()=>"open"),w])==="pending")throw new r("folder_access_pending",`macOS is asking whether Reason may open ${e}. Answer the prompt on this Mac, then try again.`)}catch(v){if(rn(v))throw nn(e);if(v instanceof r)throw v}finally{clearTimeout(g)}}import{chmodSync as bd,closeSync as wd,constants as mo,fstatSync as yd,lstatSync as Qs,openSync as vd,readSync as kd,realpathSync as ho,unlinkSync as Sd}from"fs";import{lookup as Ed}from"dns/promises";import{createRequire as Rd}from"module";import{request as Pd}from"http";import{request as Od}from"https";import _t from"net";import{platform as oi}from"os";import{basename as xd,extname as Ad,isAbsolute as ei,relative as go,resolve as Ct,sep as yo}from"path";var Ns=String.raw`
|
|
11
11
|
async (roots) => {
|
|
12
12
|
"use strict";
|
|
13
13
|
const version = 2;
|
|
@@ -302,14 +302,14 @@ async (input) => {
|
|
|
302
302
|
if (!bridge || typeof bridge.evaluate !== "function") throw new Error("Reason Hands browser bridge is not installed");
|
|
303
303
|
return await bridge.evaluate(typeof input === "string" ? input : input && input.code);
|
|
304
304
|
}
|
|
305
|
-
`.trim();import{Buffer as At}from"buffer";import{randomUUID as Fc}from"crypto";class Ws extends Error{code;constructor(e){super(e==="hands_repl_private_profile_attribute_denied"?"Private browser attribute read denied.":e);this.code=e;this.name="HandsReplBrowserDispatcherError"}}var Fs=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),Bs=/^hands_[A-Za-z0-9_-]{8,128}$/,zc=2048,zs=32,Us=1e4,Uc=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function $c(e){let l=e.split("+"),f=(l.pop()??"").replace(/^Key/,"").toLowerCase();if(f==="f12")return!0;if(l.some((g)=>["Control","ControlOrMeta","Meta"].includes(g))&&["l","n","t","j","i","p","s","w","u","o","r","tab","pageup","pagedown"].includes(f))return!0;if(l.some((g)=>["Control","ControlOrMeta","Meta"].includes(g))&&l.includes("Shift")&&f==="c")return!0;return l.includes("Alt")&&["d","arrowleft","arrowright","home"].includes(f)}var Kc=(e)=>{let l=e.closest("a[href],area[href]");return{password:e.tagName==="INPUT"&&e.type==="password",executableLink:Boolean(l&&!/^(https?:|about:blank)/i.test(l.href))}},$s={browser:{close:{returns:"void"},contexts:{returns:"context[]"},isConnected:{returns:"json"},version:{returns:"json"}},context:{addCookies:{returns:"void"},addInitScript:{returns:"void"},browser:{returns:"browser"},clearCookies:{returns:"void"},clearPermissions:{returns:"void"},close:{returns:"void"},cookies:{returns:"json"},grantPermissions:{returns:"void"},newPage:{returns:"page"},pages:{returns:"page[]"},setDefaultNavigationTimeout:{returns:"void"},setDefaultTimeout:{returns:"void"},setExtraHTTPHeaders:{returns:"void"},setGeolocation:{returns:"void"},setHTTPCredentials:{returns:"void"},setOffline:{returns:"void"},setViewportSize:{returns:"void"},storageState:{returns:"json"},viewportSize:{returns:"json",special:"contextViewportSize"}},page:{addInitScript:{returns:"void"},addScriptTag:{returns:"void"},addStyleTag:{returns:"void"},bringToFront:{returns:"void"},close:{returns:"void"},content:{returns:"json"},context:{returns:"context"},emulateMedia:{returns:"void"},evaluate:{returns:"json",requiresStringSource:!0},frame:{returns:"frame"},frameLocator:{returns:"frameLocator"},frames:{returns:"frame[]"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},goBack:{returns:"void"},goForward:{returns:"void"},goto:{returns:"void"},isClosed:{returns:"json"},locator:{returns:"locator"},mainFrame:{returns:"frame"},opener:{returns:"page"},pdf:{returns:"bytes"},reload:{returns:"void"},screenshot:{returns:"bytes"},selectOption:{returns:"json"},setContent:{returns:"void"},setDefaultNavigationTimeout:{returns:"void"},setDefaultTimeout:{returns:"void"},setExtraHTTPHeaders:{returns:"void"},setInputFiles:{returns:"void"},setViewportSize:{returns:"void"},title:{returns:"json"},url:{returns:"json"},viewportSize:{returns:"json"},waitForFunction:{returns:"void",requiresStringSource:!0},waitForLoadState:{returns:"void"},waitForNavigation:{returns:"void"},waitForTimeout:{returns:"void"},waitForURL:{returns:"void"}},locator:{all:{returns:"locator[]"},allInnerTexts:{returns:"json"},allTextContents:{returns:"json"},and:{returns:"locator"},ariaSnapshot:{returns:"json"},blur:{returns:"void"},boundingBox:{returns:"json"},check:{returns:"void"},clear:{returns:"void"},click:{returns:"void"},contentFrame:{returns:"frameLocator"},count:{returns:"json"},dblclick:{returns:"void"},dragTo:{returns:"void"},evaluate:{returns:"json",requiresStringSource:!0},evaluateAll:{returns:"json",requiresStringSource:!0},fill:{returns:"void"},filter:{returns:"locator"},first:{returns:"locator",special:"property"},focus:{returns:"void"},getAttribute:{returns:"json"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},hover:{returns:"void"},innerHTML:{returns:"json"},innerText:{returns:"json"},inputValue:{returns:"json"},isChecked:{returns:"json"},isEditable:{returns:"json"},isEnabled:{returns:"json"},isHidden:{returns:"json"},isVisible:{returns:"json"},last:{returns:"locator",special:"property"},locator:{returns:"locator"},nth:{returns:"locator"},or:{returns:"locator"},page:{returns:"page"},press:{returns:"void"},pressSequentially:{returns:"void"},scrollIntoViewIfNeeded:{returns:"void"},screenshot:{returns:"bytes"},selectOption:{returns:"json"},setInputFiles:{returns:"void"},tap:{returns:"void"},textContent:{returns:"json"},type:{returns:"void"},uncheck:{returns:"void"},waitFor:{returns:"void"}},frame:{addScriptTag:{returns:"void"},addStyleTag:{returns:"void"},childFrames:{returns:"frame[]"},content:{returns:"json"},evaluate:{returns:"json",requiresStringSource:!0},frameLocator:{returns:"frameLocator"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},goto:{returns:"void"},isDetached:{returns:"json"},locator:{returns:"locator"},name:{returns:"json"},page:{returns:"page"},parentFrame:{returns:"frame"},setContent:{returns:"void"},title:{returns:"json"},url:{returns:"json"},waitForFunction:{returns:"void",requiresStringSource:!0},waitForLoadState:{returns:"void"},waitForNavigation:{returns:"void"},waitForTimeout:{returns:"void"},waitForURL:{returns:"void"}},frameLocator:{getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},locator:{returns:"locator"},owner:{returns:"locator"}}};function Ce(e){throw new Ws(e)}function Nr(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let l=Object.getPrototypeOf(e);return l===Object.prototype||l===null}function It(e,l=0,f={nodes:0}){if(l>zs||++f.nodes>Us)Ce("hands_repl_json_too_complex");if(e===null||typeof e==="boolean"||typeof e==="string")return;if(typeof e==="number"){if(!Number.isFinite(e))Ce("hands_repl_invalid_json");return}if(Array.isArray(e)){for(let g of e)It(g,l+1,f);return}if(!Nr(e))Ce("hands_repl_invalid_json");for(let[g,w]of Object.entries(e)){if(Fs.has(g))Ce("hands_repl_invalid_json");It(w,l+1,f)}}function no(e){return typeof e==="string"&&Object.hasOwn($s,e)}function Gc(e){if(!e.endsWith("[]"))return null;let l=e.slice(0,-2);return no(l)?l:null}function Ms(e){return Nr(e)&&Object.keys(e).length===2&&e.$handsRepl==="bytes"&&typeof e.base64==="string"}function Jc(e){return Nr(e)&&Object.keys(e).length===1&&e.$handsRepl==="undefined"}function js(e){return Nr(e)&&Object.keys(e).length===2&&e.$handsRepl==="routeFulfill"&&"options"in e}function nt(e){return!!e&&typeof e==="object"}function En(){return Object.freeze({$handsRepl:"undefined"})}function Vc(e){if(!At.isBuffer(e)&&!(e instanceof Uint8Array))Ce("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:At.from(e).toString("base64")})}function Ks(e){if(!nt(e.browser)||!nt(e.context)||!nt(e.page))Ce("hands_repl_invalid_roots");if(typeof e.a11y!=="function"||typeof e.view!=="function")Ce("hands_repl_invalid_callbacks");let l=e.maxHandles??zc;if(!Number.isInteger(l)||l<3||l>1e5)Ce("hands_repl_invalid_handle_limit");let f=new Map,g=new WeakMap,w=e.createOpaqueId??Fc,v=(C,re)=>{if(!nt(re))Ce("hands_repl_expected_target");let V=g.get(re)?.get(C);if(V)return V;if(f.size>=l)Ce("hands_repl_handle_limit");let K="";for(let he=0;he<16;he+=1){let Oe=`hands_${w()}`;if(Bs.test(Oe)&&!f.has(Oe)){K=Oe;break}}if(!K)Ce("hands_repl_invalid_opaque_id");let _e=Object.freeze({$handsRepl:"handle",id:K,kind:C});f.set(K,{kind:C,target:re});let ve=g.get(re);if(!ve)ve=new Map,g.set(re,ve);return ve.set(C,_e),_e},P=Object.freeze({browser:v("browser",e.browser),context:v("context",e.context),page:v("page",e.page)}),F=(C)=>{if(!Nr(C)||Object.keys(C).length!==3||C.$handsRepl!=="handle"||typeof C.id!=="string"||!Bs.test(C.id)||!no(C.kind))Ce("hands_repl_invalid_handle");let re=f.get(C.id);if(!re||re.kind!==C.kind)Ce("hands_repl_unknown_handle");return re},R=(C,re=0,V=new Set)=>{if(re>zs)Ce("hands_repl_json_too_complex");if(C===void 0)return En();if(C===null||typeof C==="boolean"||typeof C==="string")return C;if(typeof C==="number"){if(!Number.isFinite(C))Ce("hands_repl_non_json_result");return C}if(Array.isArray(C)){if(V.has(C))Ce("hands_repl_cyclic_result");V.add(C);try{return C.map((K)=>R(K,re+1,V))}finally{V.delete(C)}}if(!Nr(C))Ce("hands_repl_non_json_result");if(V.has(C))Ce("hands_repl_cyclic_result");V.add(C);try{let K=Object.create(null);for(let _e of Object.keys(C)){let ve=Object.getOwnPropertyDescriptor(C,_e);if(!ve||!("value"in ve))continue;K[_e]=R(ve.value,re+1,V)}return K}finally{V.delete(C)}},M=(C,re)=>{if(re==="void")return En();if(re==="json")return R(C);if(re==="bytes")return Vc(C);let V=Gc(re);if(V){if(!Array.isArray(C))Ce("hands_repl_expected_target_list");if(V==="context"&&C.some((K)=>K!==e.context))Ce("hands_repl_foreign_context");return C.map((K)=>v(V,K))}if(C===null||C===void 0)return En();if(!no(re))Ce("hands_repl_invalid_return_kind");if(re==="context"&&C!==e.context)Ce("hands_repl_foreign_context");return v(re,C)},Q=(C)=>{if(Nr(C)&&C.$handsRepl==="handle")return F(C).target;if(Ms(C))return At.from(C.base64,"base64");if(Jc(C))return;if(js(C))Ce("hands_repl_route_fulfill_only");if(Array.isArray(C))return C.map(Q);if(!Nr(C))return C;let re=Object.create(null);for(let[V,K]of Object.entries(C))re[V]=Q(K);return re};return Object.freeze({roots:P,dispatch:async(C)=>{if(!Nr(C)||typeof C.type!=="string")Ce("hands_repl_invalid_request");if(C.type==="a11y"){let be=C.target===void 0?f.get(P.page.id):F(C.target);if(!be||be.kind!=="page"&&be.kind!=="locator")Ce("hands_repl_invalid_a11y_target");return R(await e.a11y(be.target))}if(C.type==="view"){if(It(C.source),C.options!==void 0)It(C.options);let be=Ms(C.source)?At.from(C.source.base64,"base64"):C.source;if(e.privateProfile&&!At.isBuffer(be))Ce("hands_repl_profile_requires_image_bytes");return R(await e.view(be,C.options))}if(C.type!=="call")Ce("hands_repl_invalid_request");if(typeof C.method!=="string"||C.method.length===0||C.method.length>128)Ce("hands_repl_invalid_method");if(Fs.has(C.method))Ce("hands_repl_forbidden_method");let re=F(C.target),V=C.args??[];if(!Array.isArray(V))Ce("hands_repl_invalid_arguments");if(It(V),re.kind==="page"&&C.method==="captureScreenshot"){if(V.length!==0)Ce("hands_repl_invalid_arguments");if(!e.screenshotExport)Ce("hands_repl_screenshot_export_unavailable");return R(await e.screenshotExport(re.target))}if(re.kind==="context"&&["startRecording","stopRecording"].includes(C.method)){if(!e.recording||re.target!==e.context)Ce("hands_repl_recording_unavailable");if(V.length>(C.method==="startRecording"?1:0))Ce("hands_repl_invalid_arguments");return R(C.method==="startRecording"?await e.recording.start(V[0]):await e.recording.stop())}if(e.privateProfile){let be=C.method;if(["evaluate","evaluateAll","waitForFunction","addInitScript","addScriptTag","addStyleTag","setContent","setInputFiles","route","content","cookies","storageState","addCookies","clearCookies","setExtraHTTPHeaders","setHTTPCredentials","grantPermissions","clearPermissions","innerHTML","textContent","allTextContents"].includes(be)||re.kind==="browser"&&be==="close"||re.kind==="context"&&be==="close")Ce("hands_repl_private_profile_method_denied");if(re.kind==="browser"&&be==="contexts")return M([e.context],"context[]");if((be==="screenshot"||be==="pdf")&&Nr(V[0])&&(("path"in V[0])||("style"in V[0])))Ce("hands_repl_private_profile_path_denied");if(be==="goto"){if(typeof V[0]!=="string")Ce("hands_repl_private_profile_url_denied");try{let Me=new URL(V[0]);if(!["http:","https:"].includes(Me.protocol)&&V[0]!=="about:blank")Ce("hands_repl_private_profile_url_denied")}catch{Ce("hands_repl_private_profile_url_denied")}}if(be==="getAttribute"&&(typeof V[0]!=="string"||!Uc.has(V[0].toLowerCase())))Ce("hands_repl_private_profile_attribute_denied");if(re.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(be)){let Me=[re.target];if(be==="allInnerTexts"){let Ye=Reflect.get(re.target,"all");if(typeof Ye!=="function")Ce("hands_repl_private_profile_probe_unavailable");let Be=await Reflect.apply(Ye,re.target,[]);if(!Array.isArray(Be)||Be.length>Us||!Be.every(nt))Ce("hands_repl_private_profile_probe_unavailable");Me=Be}for(let Ye of Me){let Be=Reflect.get(Ye,"isVisible");if(typeof Be!=="function"||!await Reflect.apply(Be,Ye,[]))Ce("hands_repl_private_profile_hidden_value_denied")}}if(be==="press"&&typeof V[0]==="string"&&$c(V[0]))Ce("hands_repl_private_profile_browser_shortcut_denied");if(re.kind==="locator"&&["inputValue","click","dblclick","tap","press"].includes(be)){let Me=Reflect.get(re.target,"evaluate");if(typeof Me!=="function")Ce("hands_repl_private_profile_probe_unavailable");let Ye=await Reflect.apply(Me,re.target,[Kc]);if(!Nr(Ye)||typeof Ye.password!=="boolean"||typeof Ye.executableLink!=="boolean")Ce("hands_repl_private_profile_probe_unavailable");if(be==="inputValue"&&Ye.password)Ce("hands_repl_private_profile_password_denied");if(be!=="inputValue"&&Ye.executableLink)Ce("hands_repl_private_profile_url_denied");if(be==="inputValue"){let Be=Reflect.get(re.target,"isVisible");if(typeof Be!=="function"||!await Reflect.apply(Be,re.target,[]))Ce("hands_repl_private_profile_hidden_value_denied")}}}let K=$s[re.kind][C.method];if(!K)Ce("hands_repl_method_not_allowed");if(K.requiresStringSource&&typeof V[0]!=="string")Ce("hands_repl_string_source_required");if(re.kind==="browser"&&C.method==="contexts")return[P.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(C.method)&&V.some((be)=>Nr(be)&&("path"in be)))Ce("hands_repl_file_path_not_allowed");if(C.method==="goto"&&typeof V[0]==="string"){let be;try{be=new URL(V[0]).protocol}catch{Ce("hands_repl_invalid_url")}if(!["http:","https:","data:","about:","blob:"].includes(be))Ce("hands_repl_file_path_not_allowed")}if(K.special==="contextViewportSize"){let be=Reflect.get(re.target,"pages");if(typeof be!=="function")Ce("hands_repl_method_unavailable");let Me=await Reflect.apply(be,re.target,[]),Ye=Array.isArray(Me)?Me[0]:void 0,Be=nt(Ye)?Reflect.get(Ye,"viewportSize"):void 0;if(typeof Be!=="function")return En();return M(await Reflect.apply(Be,Ye,[]),K.returns)}if(K.special==="property"){let be=Reflect.get(re.target,C.method);return M(typeof be==="function"?Reflect.apply(be,re.target,[]):be,K.returns)}let _e=Reflect.get(re.target,C.method);if(typeof _e!=="function")Ce("hands_repl_method_unavailable");if(K.special==="route"){let be=V[1];if(!js(be))Ce("hands_repl_invalid_route_handler");It(be.options);let Me=Q(be.options),Ye=async(fe)=>{if(!nt(fe))Ce("hands_repl_invalid_route");let Se=Reflect.get(fe,"fulfill");if(typeof Se!=="function")Ce("hands_repl_invalid_route");await Reflect.apply(Se,fe,[Me])},Be=[Q(V[0]??null),Ye],le=await Reflect.apply(_e,re.target,Be);return M(le,K.returns)}let ve=V.map(Q);if(C.method==="setInputFiles"){let be=re.kind==="locator"?0:1,Me=async(Be)=>{if(typeof Be!=="string"){if(!Nr(Be)||typeof Be.name!=="string"||typeof Be.mimeType!=="string"||!At.isBuffer(Be.buffer))Ce("hands_repl_invalid_file_input");return Be}if(!e.readWorkspaceFile)Ce("hands_repl_workspace_required");return e.readWorkspaceFile(Be)},Ye=ve[be];ve[be]=Array.isArray(Ye)?await Promise.all(Ye.map(Me)):await Me(Ye)}if(C.method==="goto")await e.beforeNavigation?.();let he=e.actionRecorder?.(),Oe=await Reflect.apply(_e,re.target,ve),Ie={click:"Click browser element",tap:"Click browser element",dblclick:"Double click browser element",fill:"Type text",type:"Type text",pressSequentially:"Type text",clear:"Clear browser field",press:"Press key",scrollIntoViewIfNeeded:"Scroll browser element into view",dragTo:"Drag on computer",selectOption:"Select browser option",check:"Check browser control",uncheck:"Uncheck browser control",hover:"Hover browser element",focus:"Focus browser element",goto:"Open browser page",reload:"Reload browser page",goBack:"Go back in browser",goForward:"Go forward in browser",screenshot:"Take browser screenshot"}[C.method];if(Ie){let be=Reflect.get(re.target,"page"),Me=re.kind==="page"?re.target:typeof be==="function"?Reflect.apply(be,re.target,[]):void 0;he?.(Ie,nt(Me)?Me:void 0)}return M(Oe,K.returns)}})}import{isIP as qs}from"net";import{Resolver as qc}from"dns/promises";import{isIP as On}from"net";var Yc=[["0.0.0.0",8],["10.0.0.0",8],["100.64.0.0",10],["127.0.0.0",8],["169.254.0.0",16],["172.16.0.0",12],["192.0.0.0",24],["192.0.2.0",24],["192.168.0.0",16],["198.18.0.0",15],["198.51.100.0",24],["203.0.113.0",24],["224.0.0.0",4],["240.0.0.0",4]];function oo(e){if(On(e)!==4)return null;let l=e.split(".");if(l.length!==4)return null;let f=0;for(let g of l){let w=Number(g);if(!Number.isInteger(w)||w<0||w>255)return null;f=f*256+w}return f>>>0}function Xc(e,l,f){let g=oo(l);if(g===null)return!1;let w=f===0?0:4294967295<<32-f>>>0;return(e&w)>>>0===(g&w)>>>0}function Gs(e){let l=oo(e);if(l===null)return!0;return Yc.some(([f,g])=>Xc(l,f,g))}function Zc(e){if(On(e)!==6)return null;let l=e.toLowerCase(),f=l.indexOf("%");if(f>=0)l=l.slice(0,f);let g=[],w=l.lastIndexOf(":"),v=w>=0?l.slice(w+1):"";if(v.includes(".")){let C=oo(v);if(C===null)return null;g=[C>>>16&65535,C&65535],l=l.slice(0,w+1)+"0:0"}let P=l.split("::");if(P.length>2)return null;let F=(C)=>{if(C==="")return[];let re=[];for(let V of C.split(":")){if(V===""||V.length>4||!/^[0-9a-f]+$/.test(V))return null;re.push(Number.parseInt(V,16))}return re},R=F(P[0]??"");if(R===null)return null;if(P.length===1){let C=R;if(C.length!==8)return null;return g.length>0?C.slice(0,6).concat(g):C}let M=F(P[1]??"");if(M===null)return null;let Q=8-R.length-M.length;if(Q<0)return null;let z=R.concat(Array(Q).fill(0),M);if(z.length!==8)return null;return g.length>0?z.slice(0,6).concat(g):z}function Qc(e,l){return`${e>>8&255}.${e&255}.${l>>8&255}.${l&255}`}function ed(e){let l=Zc(e);if(l===null)return!0;let[f,g,w]=l;if((f&57344)!==8192)return!0;if(f===8193&&(g&65024)===0)return!0;if(f===8193&&g===3512)return!0;if(f===16383&&(g&61440)===0)return!0;if(f===8194)return Gs(Qc(g,w));return!1}function or(e){return e.replace(/^\[|\]$/g,"")}function Rn(e){let l=or(e.trim()),f=On(l);if(f===4)return Gs(l);if(f===6)return ed(l);return!0}function Js(e){if(e instanceof Error&&e.name==="TimeoutError")return"dns_timeout";switch(typeof e==="object"&&e!==null&&"code"in e?e.code:void 0){case"ENOTFOUND":return"dns_not_found";case"ENODATA":return"dns_empty";case"EAI_AGAIN":case"ESERVFAIL":case"ECONNREFUSED":return"dns_temporary";case"ETIMEOUT":case"ETIMEDOUT":return"dns_timeout";default:return"dns_failed"}}var Vs=5000;function rd(e){return async(l,f)=>{if(f?.aborted)throw Error("aborted");let g=new qc({timeout:Vs,tries:1});if(e)g.setServers(e);let w=()=>g.cancel();f?.addEventListener("abort",w,{once:!0});try{let[v,P]=await Promise.allSettled([g.resolve4(l),g.resolve6(l)]),F=[...v.status==="fulfilled"?v.value:[],...P.status==="fulfilled"?P.value:[]];if(F.length>0)return F;let R=[v,P].flatMap((Q)=>Q.status==="rejected"?[Q.reason]:[]);throw R.find((Q)=>["dns_temporary","dns_timeout"].includes(Js(Q)))??R[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{f?.removeEventListener("abort",w)}}}var td=rd();async function nd(e,l,f,g){if(g?.aborted)throw Error("aborted");let w=new AbortController,v,P,F=l(e,w.signal);F.catch(()=>{});try{return await Promise.race([F,new Promise((R,M)=>{if(v=setTimeout(()=>M(new DOMException("DNS lookup timed out","TimeoutError")),f),g)P=()=>M(Error("aborted")),g.addEventListener("abort",P,{once:!0})})])}finally{if(v!==void 0)clearTimeout(v);if(g&&P)g.removeEventListener("abort",P);w.abort()}}async function Oi(e,l=td,f){let g=or(e);if(On(g))return Rn(g)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[g]};let w;try{w=await nd(g,l,Vs,f)}catch(v){return{ok:!1,reason:f?.aborted?f.reason instanceof Error&&f.reason.name==="TimeoutError"?"dns_timeout":"aborted":Js(v)}}if(w.length===0)return{ok:!1,reason:"dns_empty"};if(w.some(Rn))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:w}}var od=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function so(e){return e.length<=253&&od.test(e.toLowerCase())}function sd(e,l){let f=e.trim().toLowerCase();if(!so(f))return!1;if(f.startsWith("*.")){let g=f.slice(2);return l===g||l.endsWith(`.${g}`)}return f===l}function id(e){let l=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(e);if(!l)return null;let f=l.slice(1).map(Number);return f.some((g)=>g>255)?null:f}function io(e,l=[]){let f=(g)=>{if(g=g.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,""),!g.includes(":"))return g;try{g=new URL(`http://[${g}]/`).hostname.slice(1,-1)}catch{return g}let w=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(g);if(!w)return g;let v=parseInt(w[1],16),P=parseInt(w[2],16);return`${v>>8}.${v&255}.${P>>8}.${P&255}`};return l.some((g)=>f(g)===f(e))}function ft(e){e=e.toLowerCase().replace(/^\[|\]$/g,"");let l=id(e);if(l){let[v,P,F]=l;if(v===127)return"loopback";return v===0||v===10||v>=224||v===100&&P>=64&&P<=127||v===169&&P===254||v===172&&P>=16&&P<=31||v===192&&(P===168||P===0&&(F===0||F===2)||P===88&&F===99)||v===198&&(P===18||P===19||P===51&&F===100)||v===203&&P===0&&F===113?"private":"public"}if(!e.includes(":"))return"hostname";try{e=new URL(`http://[${e}]/`).hostname.slice(1,-1)}catch{return"private"}if(e==="::1")return"loopback";let f=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(e);if(f){let v=parseInt(f[1],16),P=parseInt(f[2],16);return ft(`${v>>8}.${v&255}.${P>>8}.${P&255}`)==="public"?"public":"private"}let[g,w=0]=e.split(":").map((v)=>parseInt(v||"0",16));return g<8192||g>16383||g===8194||g===8193&&(w<512||w===3512)||g===16383&&w<4096?"private":"public"}function Ne(e,l){let f;try{f=new URL(e)}catch{return{allowed:!1,url:e,host:null,reason:"invalid_url"}}if(["about:","data:","blob:"].includes(f.protocol))return{allowed:!0,url:e,host:null,reason:"local_document"};if(!["http:","https:","ws:","wss:"].includes(f.protocol))return{allowed:!1,url:e,host:f.hostname||null,reason:"unsupported_protocol"};let g=f.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(l.mode==="off")return{allowed:!0,url:e,host:g,reason:"policy_off"};let w=(F)=>({allowed:!1,url:e,host:g,reason:F});if(f.username||f.password)return w("invalid_url");if(l.mode==="public_web"){let F=ft(g)!=="public"&&ft(g)!=="hostname"||g==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(g)||!g.includes(".")&&!qs(g)||Boolean(qs(g)&&Rn(g));return{allowed:!F,url:e,host:g,reason:F?"private_network":"public_web"}}let v=Number(f.port||(["https:","wss:"].includes(f.protocol)?443:80));if(l.deniedPorts?.includes(v)||io(g,l.deniedHosts))return w("destination_not_allowed");let P=ft(g);if(P==="private"||["local","internal","arpa"].some((F)=>g===F||g.endsWith(`.${F}`)))return w("private_network");if(P==="loopback"||g==="localhost"||g.endsWith(".localhost"))return l.allowedLoopbackPorts?.includes(v)?{allowed:!0,url:e,host:g,reason:"loopback"}:w("destination_not_allowed");if(l.allowedDomains.some((F)=>sd(F,g)))return{allowed:!0,url:e,host:g,reason:"allowed_domain"};return{allowed:!1,url:e,host:g,reason:"destination_not_allowed"}}import Ys from"child_process";import{accessSync as ad,constants as cd,readFileSync as dd,statSync as ld}from"fs";import{createRequire as ud}from"module";import{dirname as r_,isAbsolute as ao,join as fd,resolve as t_,win32 as pd}from"path";var co=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:jt.dependencies["playwright-core"],browser:"chromium"}),Xs=["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Brave Browser.app/Contents/MacOS/Brave Browser","/Applications/Chromium.app/Contents/MacOS/Chromium"],uo=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function _d(e=process.env){let l=[e.ProgramFiles??"C:\\Program Files",e["ProgramFiles(x86)"]??"C:\\Program Files (x86)"],f=e.LOCALAPPDATA?[e.LOCALAPPDATA]:[],g=(w,...v)=>w.map((P)=>pd.join(P,...v));return[...g([...l,...f],"Google","Chrome","Application","chrome.exe"),...g(l,"Microsoft","Edge","Application","msedge.exe"),...g([...l,...f],"BraveSoftware","Brave-Browser","Application","brave.exe")]}function sn(e){try{return ad(e,cd.X_OK),ao(e)&&ld(e).isFile()}catch{return!1}}function fo(e,l=process.platform){let f=l==="darwin"?Xs:l==="linux"?uo:l==="win32"?_d():null;return f?(e??f).find(sn)??null:null}function md(){if(!process.versions.bun)return;let e=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,e))return;let l=[];Ys.spawn=new Proxy(Ys.spawn,{apply(f,g,w){let v=Reflect.apply(f,g,w),P=w[1],F=w[2]?.stdio;if(Array.isArray(P)&&P.includes("--remote-debugging-pipe")&&Array.isArray(F)&&F[3]==="pipe"&&F[4]==="pipe")l.push(v);return v}}),Object.defineProperty(globalThis,e,{value:l})}async function xn(e){if(md(),e!==void 0){if(!ao(e))throw Error("hands_browser_driver_path_must_be_absolute");let g=fd(e,"package.json"),w=JSON.parse(dd(g,"utf8"));if(w.name!==co.driver)throw Error("hands_browser_wrong_driver");let v=ud(g)(e),P=v.default?.chromium??v.chromium;if(!P)throw Error("hands_browser_missing_chromium");return{version:w.version,chromium:P}}let[l,f]=await Promise.all([import("./index-kx10kwyx.js"),import("./package-11mkdcmn.js").then((m)=>hi(m.default,1))]);return{version:f.default.version,chromium:l.chromium}}var hd=(e,l=co.driverVersion)=>({status:"unavailable",reason:e,expectedDriverVersion:l}),gd=(e)=>e.loadDriver?.()??xn(e.driverModuleDirectory);async function dn(e={}){return Zs(e,co.driverVersion)}async function po(e,l={}){if(e.driverVersion!=="1.61.1"||!ao(e.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return Zs({...l,driverModuleDirectory:e.driverModuleDirectory,allowSystemBrowser:!0},e.driverVersion)}async function Zs(e,l){let f=(R)=>hd(R,l),g=e.platform??process.platform;if(g!=="linux"&&g!=="darwin"&&g!=="win32")return f("unsupported_platform");let w;try{w=await gd(e)}catch{return f("driver_missing")}if(w.version!==l)return f("driver_version_mismatch");let v=(R,M)=>({status:"resolved",executablePath:R,source:M,driverVersion:w.version});if(e.executablePath!==void 0)return sn(e.executablePath)?v(e.executablePath,"configured"):f("executable_missing");let P=w.chromium.executablePath();if(sn(P))return v(P,"managed");let F=e.allowSystemBrowser===!0?fo(e.systemCandidates,g):null;return F?v(F,"system"):f("executable_missing")}var Id=["/usr/local/bin/chromium",...uo];function rn(e,l=oi()){return fo(e??(l==="linux"?Id:void 0),l)}async function Td(){try{return(await xn()).chromium}catch{return Rd(import.meta.url)("playwright-core").chromium}}var Cd=1048576,Dd=105000,Ld=20000,ri=5000,Nd=2000,Hd=1000,Bd=30000,ti=81920,Md={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function jd(e,l){let f=new URL(e.url()),g={...await e.allHeaders(),host:f.host};for(let w of Object.keys(g))if(/^(?:proxy-|connection$|upgrade$|transfer-encoding$|content-length$)/i.test(w))delete g[w];return new Promise((w,v)=>{let F=(f.protocol==="https:"?Od:Pd)(f,{method:e.method(),headers:g,agent:!1,lookup:(M,Q,z)=>{let C=pt.isIP(l);if(Q.all)z(null,[{address:l,family:C}]);else z(null,l,C)}},(M)=>{let Q=[],z=0;M.on("data",(C)=>{if(z+=C.length,z>33554432)F.destroy(Error("hands_browser_response_too_large"));else Q.push(C)}),M.on("error",v),M.on("end",()=>{let C={};for(let[re,V]of Object.entries(M.headers))if(V!==void 0&&!["transfer-encoding","connection","content-length"].includes(re))C[re]=Array.isArray(V)?V.join(`
|
|
306
|
-
`):V;w({status:M.statusCode??502,headers:C,body:Buffer.concat(Q)})})}),R=setTimeout(()=>F.destroy(Error("hands_browser_fetch_timeout")),Bd);F.once("close",()=>clearTimeout(R)),F.on("error",v),F.end(e.postDataBuffer()??void 0)})}async function Wd(e,l,f=()=>{},g={lookup:(w)=>Ed(w,{all:!0}),fetch:jd}){let w=new WeakSet,v=new WeakMap,P=(F)=>{let R=v.get(F);if(R)return R;let M=(async()=>{if(!e.newCDPSession)return;let Q=await e.newCDPSession(F),z=new Map;Q.on("Network.loadingFinished",({requestId:C})=>z.delete(C)),Q.on("Network.loadingFailed",({requestId:C})=>z.delete(C)),Q.on("Fetch.requestPaused",async(C)=>{let re=C.networkId??C.requestId,V=C.redirectedRequestId?(z.get(re)??0)+1:0;z.set(re,V);let K=
|
|
307
|
-
`)}function An(e){try{Sd(e)}catch{}}async function ii(e){if(e.managedBrowser&&e.driverModuleDirectory!==void 0)throw Error("hands_browser_ambiguous_driver_configuration");let l=e.launch||e.targetContext?null:e.managedBrowser?await
|
|
308
|
-
Viewing ${
|
|
309
|
-
${Qe}`}catch{return`${
|
|
310
|
-
Screen capture unavailable.`}}return
|
|
311
|
-
`);if(
|
|
312
|
-
`}catch{return!1}}var Jd=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function li(e){let l=Jd.exec(e.replace(/\/+$/,""));return l?`${l[1]}/repo`:null}import{randomUUID as Bl}from"crypto";import{spawn as Ml,spawnSync as jl}from"child_process";import{accessSync as Wl,chmodSync as un,closeSync as Fl,constants as Wt,fchmodSync as zl,fstatSync as Ul,openSync as $l,copyFileSync as Kl,existsSync as To,lstatSync as kr,statSync as mt,mkdtempSync as Gl,mkdirSync as Ft,realpathSync as br,renameSync as Ln,rmSync as Jl,writeFileSync as Nn}from"fs";import{homedir as Vl,tmpdir as ea}from"os";import{basename as ql,dirname as Cr,join as vr,resolve as ra,sep as Yl}from"path";var Vd={"navigation.ara-egress.invalid":"canary_navigation","fetch.ara-egress.invalid":"canary_fetch","subresource.ara-egress.invalid":"canary_subresource","codeload.github.com":"canary_redirect","websocket.ara-egress.invalid":"canary_websocket"};function pi(e){return e===null?"other":Vd[e]??"other"}function Br(e,l){if(e===void 0||l===void 0)return null;let f=Math.round(l-e);return Number.isSafeInteger(f)&&f>=0&&f<=600000?f:null}var _r="workspace_mode",ot="granted_root",Fr="project_root",Dt="terminal_root",Lt="terminal_benchmark_tool_profile",qd=["bash","bash-node-repl","bash-node-repl-files"],_i="hands_node_repl_persistent_execution_unsupported";function mi(e){return e==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function gi(e){return qd.includes(e)}var Kr="tool_scoped_standby";var T_=i({device_id:t().uuid(),root_id:t().uuid()}),ko=/^reason\/[0-9a-f]{8}$/,Yd=c({source_path:t().refine(Z).optional(),branch:t().regex(ko)}),C_=i({checkout_mode:s(["worktree","direct"]).optional(),project_workspace_source:i({kind:n("local_device"),device_id:t().uuid(),root_id:t().uuid(),path:t().refine(Z).optional(),worktree:Yd.optional()})});import{execFile as Xd}from"child_process";var Zd=20000,Qd=1e4,wi=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,el=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function yi(e,l=rl){let f=(_e,ve=Qd)=>l([...el,"-C",e,..._e],ve),g=async(_e)=>{let ve=await f(_e);return ve.status===0?ve.stdout.trim():null},w=await g(["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(!w||!wi.test(w))return null;let v=w.slice(0,12),P=(_e)=>({commit:w,from:"head",note:`reason: started from ${_e}`}),F=await g(["symbolic-ref","--quiet","HEAD"]);if(!F?.startsWith("refs/heads/"))return P(`the checkout's detached HEAD ${v}`);let R=F.slice(11),M=await f(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(M.status!==0||M.stdout.trim())return P(`${R} at ${v}: the checkout has uncommitted changes, which stay there`);let Q=await g(["config","--get",`branch.${R}.remote`]),z=await g(["config","--get",`branch.${R}.merge`]);if(!Q||!z?.startsWith("refs/")||Q.startsWith("-"))return P(`${R} at ${v}: it has no upstream to catch up with`);let C=Q==="."||(await f(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",Q,z],Zd)).status===0,re=await g(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),V=re?await g(["rev-parse","--verify","--quiet","@{upstream}^{commit}"]):null;if(!re||!V||!wi.test(V))return P(`${R} at ${v}: ${C?"it has no upstream to catch up with":`fetching ${Q} failed`}`);if(!C)return P(`${R} at ${v}: fetching ${re} failed, so it may be behind`);if(V===w)return P(`${R} at ${v}, the same commit as ${re} after fetching it`);if((await f(["merge-base","--is-ancestor",w,V])).status!==0)return P(`${R} at ${v}: it has commits that ${re} does not`);let K=await g(["rev-list","--count",`${w}..${V}`]);return{commit:V,from:"upstream",note:`reason: started from ${re} at ${V.slice(0,12)}, fetched just now: ${R} had no commits of its own and was ${K??"some"} commits behind it`}}function rl(e,l){return new Promise((f)=>{Xd("git",e,{encoding:"utf8",timeout:l,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(g,w)=>{let v=g?typeof g.code==="number"?g.code:null:0;f({status:v,stdout:String(w??"")})})})}import{lstatSync as tl,readdirSync as B_,readFileSync as M_,realpathSync as Ii,rmdirSync as j_,unlinkSync as W_,writeFileSync as nl}from"fs";import{join as So,resolve as z_}from"path";var ol=".reason-device";function Di(e,l,f){let g=l.split("/"),w=de.split("/");if(g.length!==w.length+2||w.some((v,P)=>g[P]!==v)||!Ht.test(g[w.length]))return;try{let v=sl(e,g[w.length]);nl(So(v,ol),f,{flag:"wx",mode:384})}catch{}}function sl(e,l){let f=()=>new r("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!Ht.test(l))throw f();let g=So(Ii(e),de),w=So(g,l);if(!tl(w).isDirectory()||Ii(w)!==w)throw f();return w}import{createHash as il}from"crypto";import{join as al}from"path";function cl(e){return ur(e)}function Xr(){throw new r("environment_unavailable","The private Session environment is unavailable or stale.")}function In(e){return il("sha256").update(JSON.stringify({...e,variables:Object.fromEntries(Object.entries(e.variables).sort(([l],[f])=>l.localeCompare(f)))})).digest("hex")}function Ni(e,l){b(e);let f=al(e,"environment.json"),g,w=new Set,v=(F,R)=>`${R}:${F}`,P=(F)=>{let R=rr.safeParse(F);if(!R.success)return Xr();let M=R.data,Q=l.identity(),z=Date.parse(M.expires_at);if(!Q||M.run_id!==l.runId||M.device_id!==l.deviceId||M.root_id!==l.rootId||M.binding.kind!==l.binding.kind||M.binding.target_revision!==l.binding.target_revision||M.binding.root_grant_revision!==l.binding.root_grant_revision||M.binding.target_generation!==Q.generation||M.binding.target_fence_id!==Q.fenceId||z<=Date.now()||z>l.expiresAtMs||l.expiresAtMs<=Date.now()||Object.keys(M.variables).some((C)=>!cl(C)))return Xr();if(M.git){let C=new URL(l.apiOrigin),re=new URL(M.git.base_url),V=Date.parse(M.git.expires_at);if(re.origin!==C.origin)throw new r("environment_git_origin_mismatch","The delivered Git broker is not on this worker's API origin.");if(!["/git","/git/"].includes(re.pathname)||re.username||re.password||re.search||re.hash||V<=Date.now()||V>z)return Xr()}if(M.cloud_access&&!Es(M.cloud_access,l.apiOrigin))throw new r("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return M};return{path:f,install(F){let R=P(F),M=In(R);if(g&&(R.revision<g.revision||R.revision===g.revision&&(M!==g.hash||R.snapshot_id!==g.snapshotId)))return Xr();if(!g||R.revision>g.revision){if(Mi(f,R,W.snapshotBytes),In(P(JSON.parse(h(f,W.snapshotBytes))))!==M)return Xr();let Q=g;if(g={revision:R.revision,hash:M,snapshotId:R.snapshot_id,generation:R.binding.target_generation},Q&&Q.generation<g.generation)w.add(v(Q.snapshotId,Q.revision))}else if(In(P(JSON.parse(h(f,W.snapshotBytes))))!==g.hash)return Xr();return{installed:!0,snapshot_id:R.snapshot_id,installed_revision:R.revision}},current(){if(!g)return Xr();try{let F=P(JSON.parse(h(f,W.snapshotBytes)));if(In(F)!==g.hash)return Xr();return F}catch{return Xr()}},carried:(F,R)=>w.has(v(F,R))}}var Bt=Object.freeze([Object.freeze({version:"0.2.61",artifact_sha256:"02ffcd514bf7cc0a9e73d4ce31ecea32709429cd0adf79e7062c1b70ff9ab8b8",legacy_linux_x64_sha256:"cdc0828abde3157e39afc6a64e033deee52ff7cfb09b55a42e60394df24980b9"}),Object.freeze({version:"0.2.62",artifact_sha256:"20a77fff617e18315c60777d46a2de2c433e42eba4e1c5e0b5535d967847303d",legacy_linux_x64_sha256:"cce594365d518b680abfb2378d234c8ef4e3daf257df83adef650a4523fb2d92"}),Object.freeze({version:"0.2.63",artifact_sha256:"20a77fff617e18315c60777d46a2de2c433e42eba4e1c5e0b5535d967847303d"}),Object.freeze({version:"0.2.64",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.65",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.66",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.67",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.68",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.69",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.70",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.71",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.72",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.73",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.74",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.75",artifact_sha256:"a6e0648894f1f4876affd77c0ff42642c1f9cbe9bb752de19d7a97a5fb3b820e"}),Object.freeze({version:"0.2.76",artifact_sha256:"857446b7e0b25fe1cc21e58860c7d984ee9a1c28efb4a4c49bc573a2d70bb3c0"}),Object.freeze({version:"0.2.77",artifact_sha256:"857446b7e0b25fe1cc21e58860c7d984ee9a1c28efb4a4c49bc573a2d70bb3c0"}),Object.freeze({version:"0.2.78",artifact_sha256:"0a7a7ece14850a28b8f972d66e4eef570eb2bb75d58f8a82f4e9afe91424e27f",pi_tools_v1:!0}),Object.freeze({version:"0.2.79",artifact_sha256:"96f52656b454fc5b9ffe520f5c5d55720b5173eb084cd326d2710e434623897b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.80",artifact_sha256:"6ee0ed70889e2771bd9b239ee039b549361b56ce870e08956ec7cce7fa199cd7",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.81",artifact_sha256:"c8909b36f4ee9316c0c3e298cb9adb5fc821a6ec5ca365cab60043eb942c258a",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.82",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.83",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.84",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.85",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.86",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.87",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.88",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.89",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.90",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.91",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.92",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.93",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.94",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.95",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.96",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.97",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.98",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.99",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.100",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.101",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.102",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.103",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.104",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.105",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.106",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.107",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.108",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.109",artifact_sha256:"7a82b33611b9f47478fb181d0da6f49a04f7e4bc401a7752530fecffb2dc5864",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.110",artifact_sha256:"00b7dcc9078a7d7ea4814414fbf92dcf9ba3b0fd51186aac1b967e9ae306a377",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.111",artifact_sha256:"7688e992667a48defe6fefb3b8624012b918e8776498faf9e5b20b69c13d7520",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.112",artifact_sha256:"7688e992667a48defe6fefb3b8624012b918e8776498faf9e5b20b69c13d7520",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.113",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.114",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.115",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.116",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.117",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.118",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.119",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.120",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.121",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.122",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.123",artifact_sha256:"ae68959cc57c3d3e360ba16883479d0706a0c2e742fe61a66b78e12fbbf5463e",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.124",artifact_sha256:"ae68959cc57c3d3e360ba16883479d0706a0c2e742fe61a66b78e12fbbf5463e",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.125",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.126",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.127",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.128",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.129",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.130",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.131",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.132",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.133",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.134",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.135",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.136",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.137",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.138",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.139",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.140",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.141",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.142",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.143",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.144",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.145",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.146",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.147",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.148",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.149",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.150",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.151",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.152",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.153",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.154",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.155",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.156",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.157",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.158",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.159",artifact_sha256:"cc806ca6df14c39d45a944d1e1db9827dae35b3e66e0265ededb3eea3d883dcb",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.160",artifact_sha256:"0b8f6c4598a19acbeff93929efc237dbc4e356ccb26abf6957e297bfc1b551e8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.161",artifact_sha256:"d570f5035bfc5916c31f4954ce5bcc00013eec83edb020edbbfbd3260b9c17d0",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.162",artifact_sha256:"6e52c44af7a3ea3633a4dc28aa63696143cd80044bca7f67a57c4c156985566f",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.163",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.164",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.165",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.166",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.167",artifact_sha256:"62658de309f9b9c8fd70041c83898d8625d85fed303ac6e60c3a17afc85477e2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.168",artifact_sha256:"24d7efe74218b862a90f48cf71dc59dce1d0dba29b167168aca06649bbfab364",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.169",artifact_sha256:"83879d03741c3f37c1502535d128685421cd7a498bc22543516a23ef2b21e496",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.170",artifact_sha256:"386b975277972e253599e5168b654e35c50b5eed9cbe711d7359e2efedd78f31",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.171",artifact_sha256:"386b975277972e253599e5168b654e35c50b5eed9cbe711d7359e2efedd78f31",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.172",artifact_sha256:"7a01a820961bd03b31007e46ba4f09df0a621ea5bfc9ee84548d6acdfd750169",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.173",artifact_sha256:"82c9ece017e109cf8b4b54734ac7a81b1ecb2ff35a426998369b6c3e690fd1ae",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.174",artifact_sha256:"07fa1db4f84afe909ad4de4bcdbda9bc785cf2598b51769b1f5620bb86b3743b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.175",artifact_sha256:"07fa1db4f84afe909ad4de4bcdbda9bc785cf2598b51769b1f5620bb86b3743b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.176",artifact_sha256:"ba3e211489877d0622aeca87be98e235d245f39d2b57f275cd924168d05f98ce",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0})]),dl="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",ll=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",dl]),Hi=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),im=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),am=new Set([S,...Bt.map((e)=>e.artifact_sha256),...ll,...Hi]);var cm=new Set([S,...Bt.filter((e)=>e.pi_tools_v1).map((e)=>e.artifact_sha256),...Hi]);var dm=new Set([S,...Bt.filter((e)=>e.pi_tools_confinement_v1).map((e)=>e.artifact_sha256)]);var lm=new Set([S,...Bt.filter((e)=>e.home_folder_v1).map((e)=>e.artifact_sha256)]);var um=new Set([S,...Bt.filter((e)=>e.background_bash_v1).map((e)=>e.artifact_sha256)]);var fm=new Set([S,...Bt.filter((e)=>e.machine_sdk_v1).map((e)=>e.artifact_sha256)]);var ul=[O,"reason-hands-worker.cjs"];function Bi(e){return typeof e==="string"&&ul.includes(e)}var fl;function Wi(){return fl??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as pl,constants as Eo,fstatSync as Fi,lstatSync as _l,openSync as ml,readSync as hl,realpathSync as gl,watch as bl}from"fs";import{dirname as zi}from"path";function Tn(e,l){let f;try{let g=zi(e),w=_l(g);if(!w.isDirectory()||w.isSymbolicLink()||!I(w,18)||gl(g)!==g)return null;f=ml(e,Eo.O_RDONLY|Eo.O_NOFOLLOW|Eo.O_NONBLOCK);let v=Fi(f);if(!v.isFile()||v.nlink!==1||!I(v)||v.size<1||v.size>8192)return null;let P=Buffer.alloc(8193),F=hl(f,P,0,P.length,0),R=Fi(f);if(F!==v.size||R.size!==v.size||R.nlink!==1||R.mtimeMs!==v.mtimeMs||R.ctimeMs!==v.ctimeMs)return null;let M=JSON.parse(P.subarray(0,F).toString("utf8"));if(!M||M.pid!==l.pid||!Number.isSafeInteger(M.pid)||M.pid<1||M.launchId!==l.launchId||M.workerVersion!==l.workerVersion||M.protocolVersion!==l.protocolVersion||M.workerArtifactSha256!==l.workerArtifactSha256||M.workerEntrypoint!==l.workerEntrypoint||M.workspaceAliasReady!==!0||!U(M.targetGeneration)||!U(M.generation)||!N(M.fenceId))return null;return{...l,generation:M.generation,targetGeneration:M.targetGeneration,fenceId:M.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(f!==void 0)pl(f)}}var wl=(e,l,f)=>{let g=bl(e,{persistent:!1},l);return g.on("error",f),g};function Ui(e){let l=new AbortController,f=e.initial,g=f.targetGeneration,w=!1,v=!1,P,F,R=()=>{if(v)return;v=!0,P?.close(),P=void 0,clearInterval(F),e.signal.removeEventListener("abort",R),l.abort()},M=()=>{if(v)return;if(!e.isAlive()){R();return}let Q=Tn(e.path,e.initial);if(!Q||Q.generation<f.generation||Q.targetGeneration<f.targetGeneration||Q.targetGeneration===f.targetGeneration&&Q.fenceId!==f.fenceId)return;if(f=Q,w||Q.targetGeneration<=g)return;g=Q.targetGeneration,w=!0,Promise.resolve().then(()=>(l.signal.throwIfAborted(),e.publish(Q,l.signal))).catch(()=>{if(!v)R(),e.failed?.()}).finally(()=>{w=!1,M()})};if(e.signal.aborted)return R(),{stop:R};e.signal.addEventListener("abort",R,{once:!0});try{P=(e.watch??wl)(zi(e.path),M,()=>{P?.close(),P=void 0})}catch{}return F=setInterval(M,1000),F.unref?.(),M(),{stop:R}}import{spawn as yl}from"child_process";import{chmodSync as vl,mkdtempSync as kl,realpathSync as Sl,rmSync as El,unlinkSync as Rl,writeFileSync as Pl}from"fs";import Ol from"net";import{platform as xl,tmpdir as Al}from"os";import{join as $i}from"path";var Ki=1048576,Oo=105000,Il=2000,Tl=String.raw`
|
|
305
|
+
`.trim();import{Buffer as At}from"buffer";import{randomUUID as Fc}from"crypto";class Ws extends Error{code;constructor(e){super(e==="hands_repl_private_profile_attribute_denied"?"Private browser attribute read denied.":e);this.code=e;this.name="HandsReplBrowserDispatcherError"}}var Fs=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),Bs=/^hands_[A-Za-z0-9_-]{8,128}$/,zc=2048,zs=32,Us=1e4,Uc=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function $c(e){let l=e.split("+"),f=(l.pop()??"").replace(/^Key/,"").toLowerCase();if(f==="f12")return!0;if(l.some((g)=>["Control","ControlOrMeta","Meta"].includes(g))&&["l","n","t","j","i","p","s","w","u","o","r","tab","pageup","pagedown"].includes(f))return!0;if(l.some((g)=>["Control","ControlOrMeta","Meta"].includes(g))&&l.includes("Shift")&&f==="c")return!0;return l.includes("Alt")&&["d","arrowleft","arrowright","home"].includes(f)}var Kc=(e)=>{let l=e.closest("a[href],area[href]");return{password:e.tagName==="INPUT"&&e.type==="password",executableLink:Boolean(l&&!/^(https?:|about:blank)/i.test(l.href))}},$s={browser:{close:{returns:"void"},contexts:{returns:"context[]"},isConnected:{returns:"json"},version:{returns:"json"}},context:{addCookies:{returns:"void"},addInitScript:{returns:"void"},browser:{returns:"browser"},clearCookies:{returns:"void"},clearPermissions:{returns:"void"},close:{returns:"void"},cookies:{returns:"json"},grantPermissions:{returns:"void"},newPage:{returns:"page"},pages:{returns:"page[]"},setDefaultNavigationTimeout:{returns:"void"},setDefaultTimeout:{returns:"void"},setExtraHTTPHeaders:{returns:"void"},setGeolocation:{returns:"void"},setHTTPCredentials:{returns:"void"},setOffline:{returns:"void"},setViewportSize:{returns:"void"},storageState:{returns:"json"},viewportSize:{returns:"json",special:"contextViewportSize"}},page:{addInitScript:{returns:"void"},addScriptTag:{returns:"void"},addStyleTag:{returns:"void"},bringToFront:{returns:"void"},close:{returns:"void"},content:{returns:"json"},context:{returns:"context"},emulateMedia:{returns:"void"},evaluate:{returns:"json",requiresStringSource:!0},frame:{returns:"frame"},frameLocator:{returns:"frameLocator"},frames:{returns:"frame[]"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},goBack:{returns:"void"},goForward:{returns:"void"},goto:{returns:"void"},isClosed:{returns:"json"},locator:{returns:"locator"},mainFrame:{returns:"frame"},opener:{returns:"page"},pdf:{returns:"bytes"},reload:{returns:"void"},screenshot:{returns:"bytes"},selectOption:{returns:"json"},setContent:{returns:"void"},setDefaultNavigationTimeout:{returns:"void"},setDefaultTimeout:{returns:"void"},setExtraHTTPHeaders:{returns:"void"},setInputFiles:{returns:"void"},setViewportSize:{returns:"void"},title:{returns:"json"},url:{returns:"json"},viewportSize:{returns:"json"},waitForFunction:{returns:"void",requiresStringSource:!0},waitForLoadState:{returns:"void"},waitForNavigation:{returns:"void"},waitForTimeout:{returns:"void"},waitForURL:{returns:"void"}},locator:{all:{returns:"locator[]"},allInnerTexts:{returns:"json"},allTextContents:{returns:"json"},and:{returns:"locator"},ariaSnapshot:{returns:"json"},blur:{returns:"void"},boundingBox:{returns:"json"},check:{returns:"void"},clear:{returns:"void"},click:{returns:"void"},contentFrame:{returns:"frameLocator"},count:{returns:"json"},dblclick:{returns:"void"},dragTo:{returns:"void"},evaluate:{returns:"json",requiresStringSource:!0},evaluateAll:{returns:"json",requiresStringSource:!0},fill:{returns:"void"},filter:{returns:"locator"},first:{returns:"locator",special:"property"},focus:{returns:"void"},getAttribute:{returns:"json"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},hover:{returns:"void"},innerHTML:{returns:"json"},innerText:{returns:"json"},inputValue:{returns:"json"},isChecked:{returns:"json"},isEditable:{returns:"json"},isEnabled:{returns:"json"},isHidden:{returns:"json"},isVisible:{returns:"json"},last:{returns:"locator",special:"property"},locator:{returns:"locator"},nth:{returns:"locator"},or:{returns:"locator"},page:{returns:"page"},press:{returns:"void"},pressSequentially:{returns:"void"},scrollIntoViewIfNeeded:{returns:"void"},screenshot:{returns:"bytes"},selectOption:{returns:"json"},setInputFiles:{returns:"void"},tap:{returns:"void"},textContent:{returns:"json"},type:{returns:"void"},uncheck:{returns:"void"},waitFor:{returns:"void"}},frame:{addScriptTag:{returns:"void"},addStyleTag:{returns:"void"},childFrames:{returns:"frame[]"},content:{returns:"json"},evaluate:{returns:"json",requiresStringSource:!0},frameLocator:{returns:"frameLocator"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},goto:{returns:"void"},isDetached:{returns:"json"},locator:{returns:"locator"},name:{returns:"json"},page:{returns:"page"},parentFrame:{returns:"frame"},setContent:{returns:"void"},title:{returns:"json"},url:{returns:"json"},waitForFunction:{returns:"void",requiresStringSource:!0},waitForLoadState:{returns:"void"},waitForNavigation:{returns:"void"},waitForTimeout:{returns:"void"},waitForURL:{returns:"void"}},frameLocator:{getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},locator:{returns:"locator"},owner:{returns:"locator"}}};function Ce(e){throw new Ws(e)}function Br(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let l=Object.getPrototypeOf(e);return l===Object.prototype||l===null}function Tt(e,l=0,f={nodes:0}){if(l>zs||++f.nodes>Us)Ce("hands_repl_json_too_complex");if(e===null||typeof e==="boolean"||typeof e==="string")return;if(typeof e==="number"){if(!Number.isFinite(e))Ce("hands_repl_invalid_json");return}if(Array.isArray(e)){for(let g of e)Tt(g,l+1,f);return}if(!Br(e))Ce("hands_repl_invalid_json");for(let[g,w]of Object.entries(e)){if(Fs.has(g))Ce("hands_repl_invalid_json");Tt(w,l+1,f)}}function no(e){return typeof e==="string"&&Object.hasOwn($s,e)}function Gc(e){if(!e.endsWith("[]"))return null;let l=e.slice(0,-2);return no(l)?l:null}function Ms(e){return Br(e)&&Object.keys(e).length===2&&e.$handsRepl==="bytes"&&typeof e.base64==="string"}function Jc(e){return Br(e)&&Object.keys(e).length===1&&e.$handsRepl==="undefined"}function js(e){return Br(e)&&Object.keys(e).length===2&&e.$handsRepl==="routeFulfill"&&"options"in e}function ot(e){return!!e&&typeof e==="object"}function kn(){return Object.freeze({$handsRepl:"undefined"})}function Vc(e){if(!At.isBuffer(e)&&!(e instanceof Uint8Array))Ce("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:At.from(e).toString("base64")})}function Ks(e){if(!ot(e.browser)||!ot(e.context)||!ot(e.page))Ce("hands_repl_invalid_roots");if(typeof e.a11y!=="function"||typeof e.view!=="function")Ce("hands_repl_invalid_callbacks");let l=e.maxHandles??zc;if(!Number.isInteger(l)||l<3||l>1e5)Ce("hands_repl_invalid_handle_limit");let f=new Map,g=new WeakMap,w=e.createOpaqueId??Fc,v=(C,re)=>{if(!ot(re))Ce("hands_repl_expected_target");let V=g.get(re)?.get(C);if(V)return V;if(f.size>=l)Ce("hands_repl_handle_limit");let K="";for(let he=0;he<16;he+=1){let Ie=`hands_${w()}`;if(Bs.test(Ie)&&!f.has(Ie)){K=Ie;break}}if(!K)Ce("hands_repl_invalid_opaque_id");let _e=Object.freeze({$handsRepl:"handle",id:K,kind:C});f.set(K,{kind:C,target:re});let ve=g.get(re);if(!ve)ve=new Map,g.set(re,ve);return ve.set(C,_e),_e},P=Object.freeze({browser:v("browser",e.browser),context:v("context",e.context),page:v("page",e.page)}),F=(C)=>{if(!Br(C)||Object.keys(C).length!==3||C.$handsRepl!=="handle"||typeof C.id!=="string"||!Bs.test(C.id)||!no(C.kind))Ce("hands_repl_invalid_handle");let re=f.get(C.id);if(!re||re.kind!==C.kind)Ce("hands_repl_unknown_handle");return re},R=(C,re=0,V=new Set)=>{if(re>zs)Ce("hands_repl_json_too_complex");if(C===void 0)return kn();if(C===null||typeof C==="boolean"||typeof C==="string")return C;if(typeof C==="number"){if(!Number.isFinite(C))Ce("hands_repl_non_json_result");return C}if(Array.isArray(C)){if(V.has(C))Ce("hands_repl_cyclic_result");V.add(C);try{return C.map((K)=>R(K,re+1,V))}finally{V.delete(C)}}if(!Br(C))Ce("hands_repl_non_json_result");if(V.has(C))Ce("hands_repl_cyclic_result");V.add(C);try{let K=Object.create(null);for(let _e of Object.keys(C)){let ve=Object.getOwnPropertyDescriptor(C,_e);if(!ve||!("value"in ve))continue;K[_e]=R(ve.value,re+1,V)}return K}finally{V.delete(C)}},M=(C,re)=>{if(re==="void")return kn();if(re==="json")return R(C);if(re==="bytes")return Vc(C);let V=Gc(re);if(V){if(!Array.isArray(C))Ce("hands_repl_expected_target_list");if(V==="context"&&C.some((K)=>K!==e.context))Ce("hands_repl_foreign_context");return C.map((K)=>v(V,K))}if(C===null||C===void 0)return kn();if(!no(re))Ce("hands_repl_invalid_return_kind");if(re==="context"&&C!==e.context)Ce("hands_repl_foreign_context");return v(re,C)},Q=(C)=>{if(Br(C)&&C.$handsRepl==="handle")return F(C).target;if(Ms(C))return At.from(C.base64,"base64");if(Jc(C))return;if(js(C))Ce("hands_repl_route_fulfill_only");if(Array.isArray(C))return C.map(Q);if(!Br(C))return C;let re=Object.create(null);for(let[V,K]of Object.entries(C))re[V]=Q(K);return re};return Object.freeze({roots:P,dispatch:async(C)=>{if(!Br(C)||typeof C.type!=="string")Ce("hands_repl_invalid_request");if(C.type==="a11y"){let be=C.target===void 0?f.get(P.page.id):F(C.target);if(!be||be.kind!=="page"&&be.kind!=="locator")Ce("hands_repl_invalid_a11y_target");return R(await e.a11y(be.target))}if(C.type==="view"){if(Tt(C.source),C.options!==void 0)Tt(C.options);let be=Ms(C.source)?At.from(C.source.base64,"base64"):C.source;if(e.privateProfile&&!At.isBuffer(be))Ce("hands_repl_profile_requires_image_bytes");return R(await e.view(be,C.options))}if(C.type!=="call")Ce("hands_repl_invalid_request");if(typeof C.method!=="string"||C.method.length===0||C.method.length>128)Ce("hands_repl_invalid_method");if(Fs.has(C.method))Ce("hands_repl_forbidden_method");let re=F(C.target),V=C.args??[];if(!Array.isArray(V))Ce("hands_repl_invalid_arguments");if(Tt(V),re.kind==="page"&&C.method==="captureScreenshot"){if(V.length!==0)Ce("hands_repl_invalid_arguments");if(!e.screenshotExport)Ce("hands_repl_screenshot_export_unavailable");return R(await e.screenshotExport(re.target))}if(re.kind==="context"&&["startRecording","stopRecording"].includes(C.method)){if(!e.recording||re.target!==e.context)Ce("hands_repl_recording_unavailable");if(V.length>(C.method==="startRecording"?1:0))Ce("hands_repl_invalid_arguments");return R(C.method==="startRecording"?await e.recording.start(V[0]):await e.recording.stop())}if(e.privateProfile){let be=C.method;if(["evaluate","evaluateAll","waitForFunction","addInitScript","addScriptTag","addStyleTag","setContent","setInputFiles","route","content","cookies","storageState","addCookies","clearCookies","setExtraHTTPHeaders","setHTTPCredentials","grantPermissions","clearPermissions","innerHTML","textContent","allTextContents"].includes(be)||re.kind==="browser"&&be==="close"||re.kind==="context"&&be==="close")Ce("hands_repl_private_profile_method_denied");if(re.kind==="browser"&&be==="contexts")return M([e.context],"context[]");if((be==="screenshot"||be==="pdf")&&Br(V[0])&&(("path"in V[0])||("style"in V[0])))Ce("hands_repl_private_profile_path_denied");if(be==="goto"){if(typeof V[0]!=="string")Ce("hands_repl_private_profile_url_denied");try{let Fe=new URL(V[0]);if(!["http:","https:"].includes(Fe.protocol)&&V[0]!=="about:blank")Ce("hands_repl_private_profile_url_denied")}catch{Ce("hands_repl_private_profile_url_denied")}}if(be==="getAttribute"&&(typeof V[0]!=="string"||!Uc.has(V[0].toLowerCase())))Ce("hands_repl_private_profile_attribute_denied");if(re.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(be)){let Fe=[re.target];if(be==="allInnerTexts"){let qe=Reflect.get(re.target,"all");if(typeof qe!=="function")Ce("hands_repl_private_profile_probe_unavailable");let Be=await Reflect.apply(qe,re.target,[]);if(!Array.isArray(Be)||Be.length>Us||!Be.every(ot))Ce("hands_repl_private_profile_probe_unavailable");Fe=Be}for(let qe of Fe){let Be=Reflect.get(qe,"isVisible");if(typeof Be!=="function"||!await Reflect.apply(Be,qe,[]))Ce("hands_repl_private_profile_hidden_value_denied")}}if(be==="press"&&typeof V[0]==="string"&&$c(V[0]))Ce("hands_repl_private_profile_browser_shortcut_denied");if(re.kind==="locator"&&["inputValue","click","dblclick","tap","press"].includes(be)){let Fe=Reflect.get(re.target,"evaluate");if(typeof Fe!=="function")Ce("hands_repl_private_profile_probe_unavailable");let qe=await Reflect.apply(Fe,re.target,[Kc]);if(!Br(qe)||typeof qe.password!=="boolean"||typeof qe.executableLink!=="boolean")Ce("hands_repl_private_profile_probe_unavailable");if(be==="inputValue"&&qe.password)Ce("hands_repl_private_profile_password_denied");if(be!=="inputValue"&&qe.executableLink)Ce("hands_repl_private_profile_url_denied");if(be==="inputValue"){let Be=Reflect.get(re.target,"isVisible");if(typeof Be!=="function"||!await Reflect.apply(Be,re.target,[]))Ce("hands_repl_private_profile_hidden_value_denied")}}}let K=$s[re.kind][C.method];if(!K)Ce("hands_repl_method_not_allowed");if(K.requiresStringSource&&typeof V[0]!=="string")Ce("hands_repl_string_source_required");if(re.kind==="browser"&&C.method==="contexts")return[P.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(C.method)&&V.some((be)=>Br(be)&&("path"in be)))Ce("hands_repl_file_path_not_allowed");if(C.method==="goto"&&typeof V[0]==="string"){let be;try{be=new URL(V[0]).protocol}catch{Ce("hands_repl_invalid_url")}if(!["http:","https:","data:","about:","blob:"].includes(be))Ce("hands_repl_file_path_not_allowed")}if(K.special==="contextViewportSize"){let be=Reflect.get(re.target,"pages");if(typeof be!=="function")Ce("hands_repl_method_unavailable");let Fe=await Reflect.apply(be,re.target,[]),qe=Array.isArray(Fe)?Fe[0]:void 0,Be=ot(qe)?Reflect.get(qe,"viewportSize"):void 0;if(typeof Be!=="function")return kn();return M(await Reflect.apply(Be,qe,[]),K.returns)}if(K.special==="property"){let be=Reflect.get(re.target,C.method);return M(typeof be==="function"?Reflect.apply(be,re.target,[]):be,K.returns)}let _e=Reflect.get(re.target,C.method);if(typeof _e!=="function")Ce("hands_repl_method_unavailable");if(K.special==="route"){let be=V[1];if(!js(be))Ce("hands_repl_invalid_route_handler");Tt(be.options);let Fe=Q(be.options),qe=async(fe)=>{if(!ot(fe))Ce("hands_repl_invalid_route");let Se=Reflect.get(fe,"fulfill");if(typeof Se!=="function")Ce("hands_repl_invalid_route");await Reflect.apply(Se,fe,[Fe])},Be=[Q(V[0]??null),qe],le=await Reflect.apply(_e,re.target,Be);return M(le,K.returns)}let ve=V.map(Q);if(C.method==="setInputFiles"){let be=re.kind==="locator"?0:1,Fe=async(Be)=>{if(typeof Be!=="string"){if(!Br(Be)||typeof Be.name!=="string"||typeof Be.mimeType!=="string"||!At.isBuffer(Be.buffer))Ce("hands_repl_invalid_file_input");return Be}if(!e.readWorkspaceFile)Ce("hands_repl_workspace_required");return e.readWorkspaceFile(Be)},qe=ve[be];ve[be]=Array.isArray(qe)?await Promise.all(qe.map(Fe)):await Fe(qe)}if(C.method==="goto")await e.beforeNavigation?.();let he=e.actionRecorder?.(),Ie=await Reflect.apply(_e,re.target,ve),Te={click:"Click browser element",tap:"Click browser element",dblclick:"Double click browser element",fill:"Type text",type:"Type text",pressSequentially:"Type text",clear:"Clear browser field",press:"Press key",scrollIntoViewIfNeeded:"Scroll browser element into view",dragTo:"Drag on computer",selectOption:"Select browser option",check:"Check browser control",uncheck:"Uncheck browser control",hover:"Hover browser element",focus:"Focus browser element",goto:"Open browser page",reload:"Reload browser page",goBack:"Go back in browser",goForward:"Go forward in browser",screenshot:"Take browser screenshot"}[C.method];if(Te){let be=Reflect.get(re.target,"page"),Fe=re.kind==="page"?re.target:typeof be==="function"?Reflect.apply(be,re.target,[]):void 0;he?.(Te,ot(Fe)?Fe:void 0)}return M(Ie,K.returns)}})}import{isIP as qs}from"net";import{Resolver as qc}from"dns/promises";import{isIP as Pn}from"net";var Yc=[["0.0.0.0",8],["10.0.0.0",8],["100.64.0.0",10],["127.0.0.0",8],["169.254.0.0",16],["172.16.0.0",12],["192.0.0.0",24],["192.0.2.0",24],["192.168.0.0",16],["198.18.0.0",15],["198.51.100.0",24],["203.0.113.0",24],["224.0.0.0",4],["240.0.0.0",4]];function oo(e){if(Pn(e)!==4)return null;let l=e.split(".");if(l.length!==4)return null;let f=0;for(let g of l){let w=Number(g);if(!Number.isInteger(w)||w<0||w>255)return null;f=f*256+w}return f>>>0}function Xc(e,l,f){let g=oo(l);if(g===null)return!1;let w=f===0?0:4294967295<<32-f>>>0;return(e&w)>>>0===(g&w)>>>0}function Gs(e){let l=oo(e);if(l===null)return!0;return Yc.some(([f,g])=>Xc(l,f,g))}function Zc(e){if(Pn(e)!==6)return null;let l=e.toLowerCase(),f=l.indexOf("%");if(f>=0)l=l.slice(0,f);let g=[],w=l.lastIndexOf(":"),v=w>=0?l.slice(w+1):"";if(v.includes(".")){let C=oo(v);if(C===null)return null;g=[C>>>16&65535,C&65535],l=l.slice(0,w+1)+"0:0"}let P=l.split("::");if(P.length>2)return null;let F=(C)=>{if(C==="")return[];let re=[];for(let V of C.split(":")){if(V===""||V.length>4||!/^[0-9a-f]+$/.test(V))return null;re.push(Number.parseInt(V,16))}return re},R=F(P[0]??"");if(R===null)return null;if(P.length===1){let C=R;if(C.length!==8)return null;return g.length>0?C.slice(0,6).concat(g):C}let M=F(P[1]??"");if(M===null)return null;let Q=8-R.length-M.length;if(Q<0)return null;let z=R.concat(Array(Q).fill(0),M);if(z.length!==8)return null;return g.length>0?z.slice(0,6).concat(g):z}function Qc(e,l){return`${e>>8&255}.${e&255}.${l>>8&255}.${l&255}`}function ed(e){let l=Zc(e);if(l===null)return!0;let[f,g,w]=l;if((f&57344)!==8192)return!0;if(f===8193&&(g&65024)===0)return!0;if(f===8193&&g===3512)return!0;if(f===16383&&(g&61440)===0)return!0;if(f===8194)return Gs(Qc(g,w));return!1}function ar(e){return e.replace(/^\[|\]$/g,"")}function En(e){let l=ar(e.trim()),f=Pn(l);if(f===4)return Gs(l);if(f===6)return ed(l);return!0}function Js(e){if(e instanceof Error&&e.name==="TimeoutError")return"dns_timeout";switch(typeof e==="object"&&e!==null&&"code"in e?e.code:void 0){case"ENOTFOUND":return"dns_not_found";case"ENODATA":return"dns_empty";case"EAI_AGAIN":case"ESERVFAIL":case"ECONNREFUSED":return"dns_temporary";case"ETIMEOUT":case"ETIMEDOUT":return"dns_timeout";default:return"dns_failed"}}var Vs=5000;function rd(e){return async(l,f)=>{if(f?.aborted)throw Error("aborted");let g=new qc({timeout:Vs,tries:1});if(e)g.setServers(e);let w=()=>g.cancel();f?.addEventListener("abort",w,{once:!0});try{let[v,P]=await Promise.allSettled([g.resolve4(l),g.resolve6(l)]),F=[...v.status==="fulfilled"?v.value:[],...P.status==="fulfilled"?P.value:[]];if(F.length>0)return F;let R=[v,P].flatMap((Q)=>Q.status==="rejected"?[Q.reason]:[]);throw R.find((Q)=>["dns_temporary","dns_timeout"].includes(Js(Q)))??R[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{f?.removeEventListener("abort",w)}}}var td=rd();async function nd(e,l,f,g){if(g?.aborted)throw Error("aborted");let w=new AbortController,v,P,F=l(e,w.signal);F.catch(()=>{});try{return await Promise.race([F,new Promise((R,M)=>{if(v=setTimeout(()=>M(new DOMException("DNS lookup timed out","TimeoutError")),f),g)P=()=>M(Error("aborted")),g.addEventListener("abort",P,{once:!0})})])}finally{if(v!==void 0)clearTimeout(v);if(g&&P)g.removeEventListener("abort",P);w.abort()}}async function Di(e,l=td,f){let g=ar(e);if(Pn(g))return En(g)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[g]};let w;try{w=await nd(g,l,Vs,f)}catch(v){return{ok:!1,reason:f?.aborted?f.reason instanceof Error&&f.reason.name==="TimeoutError"?"dns_timeout":"aborted":Js(v)}}if(w.length===0)return{ok:!1,reason:"dns_empty"};if(w.some(En))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:w}}var od=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function so(e){return e.length<=253&&od.test(e.toLowerCase())}function sd(e,l){let f=e.trim().toLowerCase();if(!so(f))return!1;if(f.startsWith("*.")){let g=f.slice(2);return l===g||l.endsWith(`.${g}`)}return f===l}function id(e){let l=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(e);if(!l)return null;let f=l.slice(1).map(Number);return f.some((g)=>g>255)?null:f}function io(e,l=[]){let f=(g)=>{if(g=g.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,""),!g.includes(":"))return g;try{g=new URL(`http://[${g}]/`).hostname.slice(1,-1)}catch{return g}let w=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(g);if(!w)return g;let v=parseInt(w[1],16),P=parseInt(w[2],16);return`${v>>8}.${v&255}.${P>>8}.${P&255}`};return l.some((g)=>f(g)===f(e))}function pt(e){e=e.toLowerCase().replace(/^\[|\]$/g,"");let l=id(e);if(l){let[v,P,F]=l;if(v===127)return"loopback";return v===0||v===10||v>=224||v===100&&P>=64&&P<=127||v===169&&P===254||v===172&&P>=16&&P<=31||v===192&&(P===168||P===0&&(F===0||F===2)||P===88&&F===99)||v===198&&(P===18||P===19||P===51&&F===100)||v===203&&P===0&&F===113?"private":"public"}if(!e.includes(":"))return"hostname";try{e=new URL(`http://[${e}]/`).hostname.slice(1,-1)}catch{return"private"}if(e==="::1")return"loopback";let f=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(e);if(f){let v=parseInt(f[1],16),P=parseInt(f[2],16);return pt(`${v>>8}.${v&255}.${P>>8}.${P&255}`)==="public"?"public":"private"}let[g,w=0]=e.split(":").map((v)=>parseInt(v||"0",16));return g<8192||g>16383||g===8194||g===8193&&(w<512||w===3512)||g===16383&&w<4096?"private":"public"}function Le(e,l){let f;try{f=new URL(e)}catch{return{allowed:!1,url:e,host:null,reason:"invalid_url"}}if(["about:","data:","blob:"].includes(f.protocol))return{allowed:!0,url:e,host:null,reason:"local_document"};if(!["http:","https:","ws:","wss:"].includes(f.protocol))return{allowed:!1,url:e,host:f.hostname||null,reason:"unsupported_protocol"};let g=f.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(l.mode==="off")return{allowed:!0,url:e,host:g,reason:"policy_off"};let w=(F)=>({allowed:!1,url:e,host:g,reason:F});if(f.username||f.password)return w("invalid_url");if(l.mode==="public_web"){let F=pt(g)!=="public"&&pt(g)!=="hostname"||g==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(g)||!g.includes(".")&&!qs(g)||Boolean(qs(g)&&En(g));return{allowed:!F,url:e,host:g,reason:F?"private_network":"public_web"}}let v=Number(f.port||(["https:","wss:"].includes(f.protocol)?443:80));if(l.deniedPorts?.includes(v)||io(g,l.deniedHosts))return w("destination_not_allowed");let P=pt(g);if(P==="private"||["local","internal","arpa"].some((F)=>g===F||g.endsWith(`.${F}`)))return w("private_network");if(P==="loopback"||g==="localhost"||g.endsWith(".localhost"))return l.allowedLoopbackPorts?.includes(v)?{allowed:!0,url:e,host:g,reason:"loopback"}:w("destination_not_allowed");if(l.allowedDomains.some((F)=>sd(F,g)))return{allowed:!0,url:e,host:g,reason:"allowed_domain"};return{allowed:!1,url:e,host:g,reason:"destination_not_allowed"}}import Ys from"child_process";import{accessSync as ad,constants as cd,readFileSync as dd,statSync as ld}from"fs";import{createRequire as ud}from"module";import{dirname as r_,isAbsolute as ao,join as fd,resolve as t_,win32 as pd}from"path";var co=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:Ht.dependencies["playwright-core"],browser:"chromium"}),Xs=["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Brave Browser.app/Contents/MacOS/Brave Browser","/Applications/Chromium.app/Contents/MacOS/Chromium"],lo=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function _d(e=process.env){let l=[e.ProgramFiles??"C:\\Program Files",e["ProgramFiles(x86)"]??"C:\\Program Files (x86)"],f=e.LOCALAPPDATA?[e.LOCALAPPDATA]:[],g=(w,...v)=>w.map((P)=>pd.join(P,...v));return[...g([...l,...f],"Google","Chrome","Application","chrome.exe"),...g(l,"Microsoft","Edge","Application","msedge.exe"),...g([...l,...f],"BraveSoftware","Brave-Browser","Application","brave.exe")]}function Zt(e){try{return ad(e,cd.X_OK),ao(e)&&ld(e).isFile()}catch{return!1}}function uo(e,l=process.platform){let f=l==="darwin"?Xs:l==="linux"?lo:l==="win32"?_d():null;return f?(e??f).find(Zt)??null:null}function md(){if(!process.versions.bun)return;let e=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,e))return;let l=[];Ys.spawn=new Proxy(Ys.spawn,{apply(f,g,w){let v=Reflect.apply(f,g,w),P=w[1],F=w[2]?.stdio;if(Array.isArray(P)&&P.includes("--remote-debugging-pipe")&&Array.isArray(F)&&F[3]==="pipe"&&F[4]==="pipe")l.push(v);return v}}),Object.defineProperty(globalThis,e,{value:l})}async function On(e){if(md(),e!==void 0){if(!ao(e))throw Error("hands_browser_driver_path_must_be_absolute");let g=fd(e,"package.json"),w=JSON.parse(dd(g,"utf8"));if(w.name!==co.driver)throw Error("hands_browser_wrong_driver");let v=ud(g)(e),P=v.default?.chromium??v.chromium;if(!P)throw Error("hands_browser_missing_chromium");return{version:w.version,chromium:P}}let[l,f]=await Promise.all([import("./index-k8kcz8a3.js"),import("./package-78fkast4.js").then((m)=>mi(m.default,1))]);return{version:f.default.version,chromium:l.chromium}}var hd=(e,l=co.driverVersion)=>({status:"unavailable",reason:e,expectedDriverVersion:l}),gd=(e)=>e.loadDriver?.()??On(e.driverModuleDirectory);async function en(e={}){return Zs(e,co.driverVersion)}async function fo(e,l={}){if(e.driverVersion!=="1.61.1"||!ao(e.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return Zs({...l,driverModuleDirectory:e.driverModuleDirectory,allowSystemBrowser:!0},e.driverVersion)}async function Zs(e,l){let f=(R)=>hd(R,l),g=e.platform??process.platform;if(g!=="linux"&&g!=="darwin"&&g!=="win32")return f("unsupported_platform");let w;try{w=await gd(e)}catch{return f("driver_missing")}if(w.version!==l)return f("driver_version_mismatch");let v=(R,M)=>({status:"resolved",executablePath:R,source:M,driverVersion:w.version});if(e.executablePath!==void 0)return Zt(e.executablePath)?v(e.executablePath,"configured"):f("executable_missing");let P=w.chromium.executablePath();if(Zt(P))return v(P,"managed");let F=e.allowSystemBrowser===!0?uo(e.systemCandidates,g):null;return F?v(F,"system"):f("executable_missing")}var Id=["/usr/local/bin/chromium",...lo];function on(e,l=oi()){return uo(e??(l==="linux"?Id:void 0),l)}async function Td(){try{return(await On()).chromium}catch{return Rd(import.meta.url)("playwright-core").chromium}}var Cd=1048576,Dd=105000,Ld=20000,ri=5000,Nd=2000,Hd=1000,Bd=30000,ti=81920,Md={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function jd(e,l){let f=new URL(e.url()),g={...await e.allHeaders(),host:f.host};for(let w of Object.keys(g))if(/^(?:proxy-|connection$|upgrade$|transfer-encoding$|content-length$)/i.test(w))delete g[w];return new Promise((w,v)=>{let F=(f.protocol==="https:"?Od:Pd)(f,{method:e.method(),headers:g,agent:!1,lookup:(M,Q,z)=>{let C=_t.isIP(l);if(Q.all)z(null,[{address:l,family:C}]);else z(null,l,C)}},(M)=>{let Q=[],z=0;M.on("data",(C)=>{if(z+=C.length,z>33554432)F.destroy(Error("hands_browser_response_too_large"));else Q.push(C)}),M.on("error",v),M.on("end",()=>{let C={};for(let[re,V]of Object.entries(M.headers))if(V!==void 0&&!["transfer-encoding","connection","content-length"].includes(re))C[re]=Array.isArray(V)?V.join(`
|
|
306
|
+
`):V;w({status:M.statusCode??502,headers:C,body:Buffer.concat(Q)})})}),R=setTimeout(()=>F.destroy(Error("hands_browser_fetch_timeout")),Bd);F.once("close",()=>clearTimeout(R)),F.on("error",v),F.end(e.postDataBuffer()??void 0)})}async function Wd(e,l,f=()=>{},g={lookup:(w)=>Ed(w,{all:!0}),fetch:jd}){let w=new WeakSet,v=new WeakMap,P=(F)=>{let R=v.get(F);if(R)return R;let M=(async()=>{if(!e.newCDPSession)return;let Q=await e.newCDPSession(F),z=new Map;Q.on("Network.loadingFinished",({requestId:C})=>z.delete(C)),Q.on("Network.loadingFailed",({requestId:C})=>z.delete(C)),Q.on("Fetch.requestPaused",async(C)=>{let re=C.networkId??C.requestId,V=C.redirectedRequestId?(z.get(re)??0)+1:0;z.set(re,V);let K=Le(C.request.url,l),_e=l.mode==="enforce"&&Boolean(C.redirectedRequestId)&&K.host!==null&&!_t.isIP(K.host),ve=!K.allowed?K:_e?{...K,allowed:!1,reason:"destination_not_allowed"}:V>20?{...K,allowed:!1,reason:"redirect_not_supported"}:null;try{if(ve)f(ve),await Q.send("Fetch.failRequest",{requestId:C.requestId,errorReason:"BlockedByClient"});else await Q.send("Fetch.continueRequest",{requestId:C.requestId})}catch{await Q.send("Fetch.failRequest",{requestId:C.requestId,errorReason:"Failed"}).catch(()=>{})}}),await Q.send("Network.enable"),await Q.send("Fetch.enable",{patterns:[{urlPattern:"*",requestStage:"Request"}]}),w.add(F)})();return v.set(F,M),M};return await e.route("**/*",async(F)=>{let R=F.request().url(),M=Le(R,l);if(M.allowed&&l.mode==="public_web"){await F.continue();return}let Q=F.request();if(M.allowed&&M.host&&_t.isIP(M.host)&&Q.isNavigationRequest?.()){let z=Q.frame();if(w.has(z.page())&&z===z.page().mainFrame()){await F.continue();return}}if(M.allowed&&(l.mode==="off"||M.reason==="local_document")){await F.continue();return}if(M.allowed&&M.host)try{let z=M.host,C=pt(z),re,V=await(async()=>{if(C!=="hostname")return[{address:z,family:_t.isIP(z)}];if(M.reason==="loopback")return[{address:"127.0.0.1",family:4}];try{return await Promise.race([g.lookup(z),new Promise((K,_e)=>{re=setTimeout(()=>_e(Error("hands_browser_dns_timeout")),5000)})])}finally{if(re)clearTimeout(re)}})();if(!V.length||V.some(({address:K})=>{let _e=pt(K);return!_t.isIP(K)||l.mode==="enforce"&&io(K,l.deniedHosts)||(M.reason==="loopback"?_e!=="loopback":_e!=="public")}))M={...M,allowed:!1,reason:"private_network"};else{let K=await g.fetch(F.request(),V[0].address);if(K.status>=300&&K.status<400){let _e=K.headers.location??R;try{_e=new URL(_e,R).href}catch{}let ve=Le(_e,l);M=ve.allowed?{...ve,allowed:!1,reason:"redirect_not_supported"}:ve}else{await F.fulfill(K);return}}}catch{await F.abort("failed");return}f(M),await F.abort("blockedbyclient")}),await e.routeWebSocket("**/*",async(F)=>{let R=Le(F.url(),l);if(l.mode==="enforce"&&R.allowed&&(!R.host||!_t.isIP(R.host)))R={...R,allowed:!1,reason:"destination_not_allowed"};if(R.allowed){F.connectToServer();return}f(R),await F.close({code:1008,reason:"Reason egress policy denied"})}),l.mode==="off"?void 0:{preparePage:P}}async function si(e,l=oi(),f){if(f){let w=await fo(f,{platform:l,systemCandidates:e});return w.status==="resolved"?w.executablePath:null}if(e!==void 0){let w=on(e,l);if(w)return w}let g=await en({platform:l,systemCandidates:e,allowSystemBrowser:!0});return g.status==="resolved"?g.executablePath:null}function ni(e,l){if(!e)throw Error("hands_repl_workspace_required");let f=ho(e),g=Ct(e),w=go(g,Ct(g,l)),P=w!==".."&&!w.startsWith(`..${yo}`)&&!ei(w)?Ct(f,w):Ct(f,l);if(E(Ct(g,l))||E(P))throw Error("hands_repl_protected_path");let F=(V)=>{let K=go(f,V);return K!==""&&K!==".."&&!K.startsWith(`..${yo}`)&&!ei(K)},R=ho(P);if(E(R))throw Error("hands_repl_protected_path");if(!F(P)||!F(R))throw Error("hands_repl_file_outside_workspace");let M=go(f,P).split(yo),Q=[f,...M.map((V,K)=>Ct(f,...M.slice(0,K+1)))],z=Q.map((V)=>Qs(V));if(z.some((V)=>V.isSymbolicLink()))throw Error("hands_repl_file_symlink");let C=z[z.length-1];if(!C.isFile()||C.nlink!==1||C.size>16777216)throw Error("hands_repl_file_not_regular_or_too_large");let re=vd(P,mo.O_RDONLY|mo.O_NOFOLLOW|mo.O_NONBLOCK);try{let V=yd(re);if(V.dev!==C.dev||V.ino!==C.ino||!V.isFile())throw Error("hands_repl_file_changed");for(let he=0;he<Q.length;he++){let Ie=Qs(Q[he]);if(Ie.dev!==z[he].dev||Ie.ino!==z[he].ino||Ie.isSymbolicLink())throw Error("hands_repl_file_changed")}if(!F(ho(P)))throw Error("hands_repl_file_outside_workspace");let K=Buffer.alloc(16777217),_e=0;while(_e<K.length){let he=kd(re,K,_e,K.length-_e,null);if(!he)break;_e+=he}if(_e===K.length)throw Error("hands_repl_file_too_large");let ve=K.subarray(0,_e);return{name:xd(P),mimeType:Md[Ad(P).toLowerCase()]??"application/octet-stream",buffer:ve}}finally{wd(re)}}function Dt(e,l){e.end(`${JSON.stringify(l)}
|
|
307
|
+
`)}function An(e){try{Sd(e)}catch{}}async function ii(e){if(e.managedBrowser&&e.driverModuleDirectory!==void 0)throw Error("hands_browser_ambiguous_driver_configuration");let l=e.launch||e.targetContext?null:e.managedBrowser?await fo(e.managedBrowser,{executablePath:e.browserExecutablePath}):await en({executablePath:e.browserExecutablePath,driverModuleDirectory:e.driverModuleDirectory});if(l?.status==="unavailable")throw Error(`hands_browser_${l.reason}`);let f=l?.status==="resolved"?l.executablePath:e.browserExecutablePath;if(!f||!Zt(f))throw Error("hands_browser_unavailable");let g=e.launch??(async(le)=>(e.targetContext?await Td():(await On(e.managedBrowser?.driverModuleDirectory??e.driverModuleDirectory)).chromium).launch(le)),w=[],v={},P=null,F=null,R=null,M=null,Q=!1,z=null,C=new Map,re=new WeakMap,V=null,K=()=>{if(Q)throw Error("hands_repl_stopped");if(M)throw M},_e=(le)=>{let fe=re.get(le);if(fe)return fe;let Se=Promise.resolve().then(()=>le.close()).then(()=>{C.delete(le)});return re.set(le,Se),Se},ve=async()=>{let le=[...C.entries()].reverse(),fe=V??=performance.now()+Hd,Se=Promise.allSettled(le.filter(([,Ae])=>Ae==="context").map(([Ae])=>_e(Ae))),ze;try{await Promise.race([Se,new Promise((Ae)=>{ze=setTimeout(Ae,Math.max(0,fe-performance.now()))})])}finally{if(ze)clearTimeout(ze)}let Ke=await Promise.allSettled(le.map(([Ae])=>_e(Ae))),Ve=[];for(let[Ae,Ye]of Ke.entries()){if(Ye.status!=="rejected")continue;let _r=Ye.reason instanceof Error&&["Error","TimeoutError","ProtocolError"].includes(Ye.reason.name)?Ye.reason.name:"unknown";Ve.push(Error(`hands_repl_close_failed: ${le[Ae][1]}: ${_r}`))}if(Ve.length)throw AggregateError(Ve,"hands_repl_stop_unconfirmed")},he=(le,fe)=>{if(C.set(le,fe),Q||M)_e(le).catch(()=>{return}),K();return le},Ie=async()=>{let le=await g({executablePath:f,headless:!0,chromiumSandbox:e.managedBrowser===void 0,args:["--disable-background-networking","--disable-quic","--disable-dev-shm-usage","--disable-gpu","--disable-software-rasterizer","--dns-prefetch-disable","--force-webrtc-ip-handling-policy=disable_non_proxied_udp","--no-pings"]}),fe=null;try{he(le,"browser"),fe=e.targetContext??he(await le.newContext({viewport:{width:1440,height:900},screen:{width:1440,height:900},serviceWorkers:"block",acceptDownloads:!1}),"context");let Se=await Wd(fe,e.networkPolicy??{mode:"off"},e.onEgressDenied);if(K(),Se){let $e=fe.newPage.bind(fe);fe.newPage=async()=>{let Qe=await $e();return await Se.preparePage(Qe),Qe}}let Ke=fe.pages()[0]??await fe.newPage();await Se?.preparePage(Ke),K();let Ve=async($e=Ke)=>{let Qe=$e;if(typeof Qe.ariaSnapshot==="function")return Qe.ariaSnapshot({timeout:1e4});return Ke.locator("body").innerText({timeout:1e4})},Ae=async($e,Qe={})=>{let hr=Qe&&typeof Qe==="object"&&!Array.isArray(Qe)?Qe:{},vr,Hr="image/png";if(Buffer.isBuffer($e)||$e instanceof Uint8Array)vr=Buffer.from($e);else if(typeof $e==="string"&&($e.startsWith("data:")||/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test($e)))vr=Buffer.from($e.replace(/^data:[^,]*,/,""),"base64");else if(typeof $e==="string"){let Yr=ni(e.workspaceRoot,$e);vr=Yr.buffer,Hr=Yr.mimeType}else throw Error("view() needs a Buffer, a base64 string, or a path to an image file");if(vr.length===0)throw Error("view(): the image is empty");let Kr=String(hr.label??"").replace(/[\r\n>]+/g," ").trim().slice(0,120),Fr=Number(hr.maxWidth)||1024,zr=Number(hr.quality)||72,at=e.targetContext?await le.newPage():await fe.newPage();try{let Yr=`data:${Hr};base64,${vr.toString("base64")}`;for(let xr=0;xr<5;xr+=1){let Gr=await at.evaluate(async(Ur)=>{let Vr=new Image;Vr.src=Ur.url,await Vr.decode();let ct=Math.min(1,Ur.maxWidth/Vr.naturalWidth),Nr=document.createElement("canvas");Nr.width=Math.max(1,Math.round(Vr.naturalWidth*ct)),Nr.height=Math.max(1,Math.round(Vr.naturalHeight*ct));let Dr=Nr.getContext("2d");if(!Dr)throw Error("view(): canvas unavailable");return Dr.fillStyle="#ffffff",Dr.fillRect(0,0,Nr.width,Nr.height),Dr.drawImage(Vr,0,0,Nr.width,Nr.height),{data:Nr.toDataURL("image/jpeg",Ur.q/100).split(",")[1]??"",width:Nr.width,height:Nr.height,sourceWidth:Vr.naturalWidth,sourceHeight:Vr.naturalHeight}},{url:Yr,maxWidth:Fr,q:zr}),gt=Buffer.from(Gr.data,"base64");if(gt.length<=ti){let Ur=Kr||"image";return`<<<ARA_VIEW_IMAGE ${Gr.data} image/jpeg ${Ur}>>>
|
|
308
|
+
Viewing ${Ur} (${Gr.sourceWidth}x${Gr.sourceHeight} source, sent at ${Gr.width}x${Gr.height}, ${Math.round(gt.length/1024)}KB).`}if(Fr>640)Fr=Math.round(Fr*0.75);else zr=Math.max(30,zr-15)}throw Error(`view(): could not reduce the image under ${Math.round(ti/1024)}KB`)}finally{await at.close().catch(()=>{return})}},Ye=Ks({browser:e.targetContext?.browser()??le,context:fe,page:Ke,a11y:Ve,view:Ae,readWorkspaceFile:($e)=>ni(e.workspaceRoot,$e),privateProfile:e.privateProfile,beforeNavigation:e.beforeNavigation,recording:e.recording,screenshotExport:e.screenshotExport,actionRecorder:()=>{let $e=w,Qe=v;return(hr,vr)=>{if($e.length<Hi)$e.push(hr);if(vr)Qe.page=vr}}}),_r=async($e)=>{K();let Qe=he(await le.newContext({serviceWorkers:"block",acceptDownloads:!1}),"context");try{await Qe.route("**/*",(vr)=>vr.abort()),K(),await Qe.routeWebSocket("**/*",(vr)=>vr.close({code:1008,reason:"Reason evaluator network denied"})),K(),await Qe.exposeBinding("__araHandsRpc",async(vr,Hr)=>e.onBrowserOperation?e.onBrowserOperation($e,()=>Ye.dispatch(Hr)):Ye.dispatch(Hr)),K();let hr=await Qe.newPage();return K(),await hr.goto("data:text/html,<title>Reason Hands evaluator</title>"),K(),await hr.evaluate(`(${Ns})(${JSON.stringify(Ye.roots)})`),{context:Qe,page:hr,runId:$e}}catch(hr){throw await _e(Qe).catch(()=>{return}),hr}},br=await _r(),Pr={browser:le,context:fe,page:Ke,evaluator:br,async captureProgressFrame($e){return Ae(await $e.screenshot({type:"jpeg",quality:65,timeout:2000}),{label:"Screen after browser action"})},async resetEvaluator($e){await _e(Pr.evaluator.context),Pr.evaluator=await _r($e)}};return K(),Pr}catch(Se){throw await ve().catch(()=>{return}),Se}},De=async()=>{if(K(),P)return P;if(!R){F=Ie();let le;R=Promise.race([F,new Promise((fe,Se)=>{le=setTimeout(()=>Se(Error("hands_browser_unavailable: startup timed out")),Ld)})]).then((fe)=>(K(),P=fe,fe)).catch(async()=>{M=Error("hands_browser_unavailable: startup failed or timed out");let fe;try{await Promise.race([ve(),new Promise((Se,ze)=>{fe=setTimeout(()=>ze(Error("hands_repl_stop_timeout")),ri)})])}catch{M=Error("hands_browser_unavailable: startup cleanup unconfirmed")}finally{if(fe)clearTimeout(fe)}throw M}).finally(()=>{if(le)clearTimeout(le)})}return R},Te=async(le,fe,Se=!1)=>{let ze=await De(),Ke=v;if(e.onBrowserOperation&&ze.evaluator.runId!==fe)await ze.resetEvaluator(fe);let Ae=(async()=>{let br=await ze.evaluator.page.evaluate(`(${Hs})(${JSON.stringify({code:le})})`);if(typeof br!=="string")throw Error("hands_repl_invalid_evaluator_output");let Pr=Ke.page;if(Se&&Pr&&!br.includes("<<<ARA_VIEW_IMAGE")){let $e=()=>ze.captureProgressFrame(Pr);try{let Qe=await(e.onBrowserOperation?e.onBrowserOperation(fe,$e):$e());return Ke.automaticProgressImage=!0,`${br}
|
|
309
|
+
${Qe}`}catch{return`${br}
|
|
310
|
+
Screen capture unavailable.`}}return br})(),Ye,_r=new Promise((br,Pr)=>{Ye=setTimeout(()=>Pr(Error("REPL evaluation timed out after 105 seconds")),Dd)});try{return await Promise.race([Ae,_r])}catch(br){if(br instanceof Error&&br.message.includes("timed out"))Ae.catch(()=>{return}),await ze.resetEvaluator(fe).catch(()=>{return});throw br}finally{if(Ye)clearTimeout(Ye)}},be=Promise.resolve(),Fe=new Set,qe=new Set;An(e.socketPath);let Be=_t.createServer((le)=>{Fe.add(le),le.once("close",()=>{Fe.delete(le),qe.delete(le)}),le.setEncoding("utf8");let fe="",Se=!1;le.on("data",(ze)=>{if(Se)return;if(fe+=ze,fe.length>Cd){Se=!0,Dt(le,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let Ke=fe.indexOf(`
|
|
311
|
+
`);if(Ke===-1)return;Se=!0;let Ve=fe.slice(0,Ke);if(e.onControl)try{let Ae=JSON.parse(Ve);if(typeof Ae.action==="string"&&Ae.action!=="evaluate")qe.add(le)}catch{}be=be.then(async()=>{if(le.destroyed)return;w=[],v={};try{let Ae=JSON.parse(Ve);if(Ae.action==="probe"){let $e=await De();await Te("undefined",$e.evaluator.runId),Dt(le,{ok:!0,output:"ARA_HANDS_REPL_READY"});return}if(typeof Ae.action==="string"&&Ae.action!=="evaluate"&&e.onControl){Dt(le,{ok:!0,output:await e.onControl(Ae.action,Ae)});return}if(Ae.action!=="evaluate"||typeof Ae.code!=="string")throw Error("Invalid REPL request");let Ye=Ae.code,_r=typeof Ae.runId==="string"?Ae.runId:void 0,br=()=>Te(Ye,_r,Ae.includeProgressCapture===!0),Pr=await(e.onEvaluate?e.onEvaluate(Ae,br):br());Dt(le,{ok:!0,output:Pr,browserActions:w,...v.automaticProgressImage?{automaticProgressImage:!0}:{}})}catch(Ae){Dt(le,{ok:!1,error:Ae instanceof Error?Ae.message:String(Ae),stack:Ae instanceof Error?Ae.stack:void 0,browserActions:w})}}).catch((Ae)=>{Dt(le,{ok:!1,error:Ae instanceof Error?Ae.message:String(Ae)})})})});try{await new Promise((le,fe)=>{Be.once("error",fe),Be.listen(e.socketPath,()=>{Be.off("error",fe);try{if(process.platform!=="win32")bd(e.socketPath,384);le()}catch(Se){Be.close(()=>fe(Se))}})})}catch(le){throw An(e.socketPath),le}return{socketPath:e.socketPath,browserExecutablePath:f,stop(){if(z)return z;Q=!0;let le=qe.size?setTimeout(()=>{for(let Ke of qe)Ke.destroy()},Nd):void 0,fe=new Promise((Ke)=>Be.close(()=>{if(le)clearTimeout(le);Ke()}));for(let Ke of Fe)if(!qe.has(Ke))Ke.destroy();be.catch(()=>{return});let Se=async()=>{await fe,An(e.socketPath);let Ke=[ve()];if(F)Ke.push(F.then(()=>{return},()=>{return}));let Ve=await Promise.allSettled(Ke),Ae=await Promise.allSettled([ve()]),Ye=[...Ve,...Ae].filter((_r)=>_r.status==="rejected");if(Ye.length)throw AggregateError(Ye.map((_r)=>_r.reason),"hands_repl_stop_unconfirmed")},ze;return z=Promise.race([Se(),new Promise((Ke,Ve)=>{ze=setTimeout(()=>Ve(Error("hands_repl_stop_timeout")),ri)})]).finally(()=>{if(ze)clearTimeout(ze);An(e.socketPath)}),z}}}var Fd=["private_runtime","runtime_root","temporary_directory","granted_root","workspace_layout","jobs","browser_socket","relay_url","environment_owner","job_environment","config_write"],zd=["ENOENT","EACCES","EPERM","EINVAL","ENOTDIR","EISDIR","ELOOP","EROFS","ENOSPC","EMFILE","ENFILE","EEXIST"];function ai(e,l){if(!e||!Fd.includes(e))return null;let f=typeof l==="object"&&l!==null&&"code"in l?l.code:null;return{workspace_stage:e,workspace_errno:typeof f==="string"&&zd.includes(f)?f:"unknown"}}import{lstatSync as Ud,readFileSync as $d}from"fs";var Kd="/run/sc/egress-guard",Gd=10002,vo=10003;function ci(e=process.platform,l=Kd){if(e!=="linux")return!1;try{let f=Ud(l);if(!f.isFile()||f.uid!==0||(f.mode&18)!==0)return!1;return $d(l,"utf8")===`v1 ${Gd} ${vo}
|
|
312
|
+
`}catch{return!1}}var Jd=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function di(e){let l=Jd.exec(e.replace(/\/+$/,""));return l?`${l[1]}/repo`:null}import{randomUUID as Bl}from"crypto";import{spawn as Ml,spawnSync as jl}from"child_process";import{accessSync as Wl,chmodSync as dn,closeSync as Fl,constants as Wt,fchmodSync as zl,fstatSync as Ul,openSync as $l,copyFileSync as Kl,existsSync as To,lstatSync as Er,statSync as ht,mkdtempSync as Gl,mkdirSync as Ft,realpathSync as yr,renameSync as Ln,rmSync as Jl,writeFileSync as Nn}from"fs";import{homedir as Vl,tmpdir as ea}from"os";import{basename as ql,dirname as Lr,join as Sr,resolve as ra,sep as Yl}from"path";var Vd={"navigation.ara-egress.invalid":"canary_navigation","fetch.ara-egress.invalid":"canary_fetch","subresource.ara-egress.invalid":"canary_subresource","codeload.github.com":"canary_redirect","websocket.ara-egress.invalid":"canary_websocket"};function li(e){return e===null?"other":Vd[e]??"other"}function jr(e,l){if(e===void 0||l===void 0)return null;let f=Math.round(l-e);return Number.isSafeInteger(f)&&f>=0&&f<=600000?f:null}var gr="workspace_mode",st="granted_root",$r="project_root",Lt="terminal_root",Nt="terminal_benchmark_tool_profile",qd=["bash","bash-node-repl","bash-node-repl-files"],ui="hands_node_repl_persistent_execution_unsupported";function fi(e){return e==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function _i(e){return qd.includes(e)}var qr="tool_scoped_standby";var T_=i({device_id:t().uuid(),root_id:t().uuid()}),ko=/^reason\/[0-9a-f]{8}$/,Yd=c({source_path:t().refine(Z).optional(),branch:t().regex(ko)}),C_=i({checkout_mode:s(["worktree","direct"]).optional(),project_workspace_source:i({kind:n("local_device"),device_id:t().uuid(),root_id:t().uuid(),path:t().refine(Z).optional(),worktree:Yd.optional()})});import{execFile as Xd}from"child_process";var Zd=20000,Qd=1e4,bi=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,el=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function wi(e,l=rl){let f=(_e,ve=Qd)=>l([...el,"-C",e,..._e],ve),g=async(_e)=>{let ve=await f(_e);return ve.status===0?ve.stdout.trim():null},w=await g(["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(!w||!bi.test(w))return null;let v=w.slice(0,12),P=(_e)=>({commit:w,from:"head",note:`reason: started from ${_e}`}),F=await g(["symbolic-ref","--quiet","HEAD"]);if(!F?.startsWith("refs/heads/"))return P(`the checkout's detached HEAD ${v}`);let R=F.slice(11),M=await f(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(M.status!==0||M.stdout.trim())return P(`${R} at ${v}: the checkout has uncommitted changes, which stay there`);let Q=await g(["config","--get",`branch.${R}.remote`]),z=await g(["config","--get",`branch.${R}.merge`]);if(!Q||!z?.startsWith("refs/")||Q.startsWith("-"))return P(`${R} at ${v}: it has no upstream to catch up with`);let C=Q==="."||(await f(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",Q,z],Zd)).status===0,re=await g(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),V=re?await g(["rev-parse","--verify","--quiet","@{upstream}^{commit}"]):null;if(!re||!V||!bi.test(V))return P(`${R} at ${v}: ${C?"it has no upstream to catch up with":`fetching ${Q} failed`}`);if(!C)return P(`${R} at ${v}: fetching ${re} failed, so it may be behind`);if(V===w)return P(`${R} at ${v}, the same commit as ${re} after fetching it`);if((await f(["merge-base","--is-ancestor",w,V])).status!==0)return P(`${R} at ${v}: it has commits that ${re} does not`);let K=await g(["rev-list","--count",`${w}..${V}`]);return{commit:V,from:"upstream",note:`reason: started from ${re} at ${V.slice(0,12)}, fetched just now: ${R} had no commits of its own and was ${K??"some"} commits behind it`}}function rl(e,l){return new Promise((f)=>{Xd("git",e,{encoding:"utf8",timeout:l,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(g,w)=>{let v=g?typeof g.code==="number"?g.code:null:0;f({status:v,stdout:String(w??"")})})})}import{lstatSync as tl,readdirSync as B_,readFileSync as M_,realpathSync as yi,rmdirSync as j_,unlinkSync as W_,writeFileSync as nl}from"fs";import{join as So,resolve as z_}from"path";var ol=".reason-device";function vi(e,l,f){let g=l.split("/"),w=de.split("/");if(g.length!==w.length+2||w.some((v,P)=>g[P]!==v)||!zt.test(g[w.length]))return;try{let v=sl(e,g[w.length]);nl(So(v,ol),f,{flag:"wx",mode:384})}catch{}}function sl(e,l){let f=()=>new r("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!zt.test(l))throw f();let g=So(yi(e),de),w=So(g,l);if(!tl(w).isDirectory()||yi(w)!==w)throw f();return w}import{createHash as il}from"crypto";import{join as al}from"path";function cl(e){return pr(e)}function Qr(){throw new r("environment_unavailable","The private Session environment is unavailable or stale.")}function In(e){return il("sha256").update(JSON.stringify({...e,variables:Object.fromEntries(Object.entries(e.variables).sort(([l],[f])=>l.localeCompare(f)))})).digest("hex")}function Li(e,l){b(e);let f=al(e,"environment.json"),g,w=new Set,v=(F,R)=>`${R}:${F}`,P=(F)=>{let R=ir.safeParse(F);if(!R.success)return Qr();let M=R.data,Q=l.identity(),z=Date.parse(M.expires_at);if(!Q||M.run_id!==l.runId||M.device_id!==l.deviceId||M.root_id!==l.rootId||M.binding.kind!==l.binding.kind||M.binding.target_revision!==l.binding.target_revision||M.binding.root_grant_revision!==l.binding.root_grant_revision||M.binding.target_generation!==Q.generation||M.binding.target_fence_id!==Q.fenceId||z<=Date.now()||z>l.expiresAtMs||l.expiresAtMs<=Date.now()||Object.keys(M.variables).some((C)=>!cl(C)))return Qr();if(M.git){let C=new URL(l.apiOrigin),re=new URL(M.git.base_url),V=Date.parse(M.git.expires_at);if(re.origin!==C.origin)throw new r("environment_git_origin_mismatch","The delivered Git broker is not on this worker's API origin.");if(!["/git","/git/"].includes(re.pathname)||re.username||re.password||re.search||re.hash||V<=Date.now()||V>z)return Qr()}if(M.cloud_access&&!Es(M.cloud_access,l.apiOrigin))throw new r("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return M};return{path:f,install(F){let R=P(F),M=In(R);if(g&&(R.revision<g.revision||R.revision===g.revision&&(M!==g.hash||R.snapshot_id!==g.snapshotId)))return Qr();if(!g||R.revision>g.revision){if(Bi(f,R,W.snapshotBytes),In(P(JSON.parse(h(f,W.snapshotBytes))))!==M)return Qr();let Q=g;if(g={revision:R.revision,hash:M,snapshotId:R.snapshot_id,generation:R.binding.target_generation},Q&&Q.generation<g.generation)w.add(v(Q.snapshotId,Q.revision))}else if(In(P(JSON.parse(h(f,W.snapshotBytes))))!==g.hash)return Qr();return{installed:!0,snapshot_id:R.snapshot_id,installed_revision:R.revision}},current(){if(!g)return Qr();try{let F=P(JSON.parse(h(f,W.snapshotBytes)));if(In(F)!==g.hash)return Qr();return F}catch{return Qr()}},carried:(F,R)=>w.has(v(F,R))}}var Bt=Object.freeze([Object.freeze({version:"0.2.61",artifact_sha256:"02ffcd514bf7cc0a9e73d4ce31ecea32709429cd0adf79e7062c1b70ff9ab8b8",legacy_linux_x64_sha256:"cdc0828abde3157e39afc6a64e033deee52ff7cfb09b55a42e60394df24980b9"}),Object.freeze({version:"0.2.62",artifact_sha256:"20a77fff617e18315c60777d46a2de2c433e42eba4e1c5e0b5535d967847303d",legacy_linux_x64_sha256:"cce594365d518b680abfb2378d234c8ef4e3daf257df83adef650a4523fb2d92"}),Object.freeze({version:"0.2.63",artifact_sha256:"20a77fff617e18315c60777d46a2de2c433e42eba4e1c5e0b5535d967847303d"}),Object.freeze({version:"0.2.64",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.65",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.66",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.67",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.68",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.69",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.70",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.71",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.72",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.73",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.74",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.75",artifact_sha256:"a6e0648894f1f4876affd77c0ff42642c1f9cbe9bb752de19d7a97a5fb3b820e"}),Object.freeze({version:"0.2.76",artifact_sha256:"857446b7e0b25fe1cc21e58860c7d984ee9a1c28efb4a4c49bc573a2d70bb3c0"}),Object.freeze({version:"0.2.77",artifact_sha256:"857446b7e0b25fe1cc21e58860c7d984ee9a1c28efb4a4c49bc573a2d70bb3c0"}),Object.freeze({version:"0.2.78",artifact_sha256:"0a7a7ece14850a28b8f972d66e4eef570eb2bb75d58f8a82f4e9afe91424e27f",pi_tools_v1:!0}),Object.freeze({version:"0.2.79",artifact_sha256:"96f52656b454fc5b9ffe520f5c5d55720b5173eb084cd326d2710e434623897b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.80",artifact_sha256:"6ee0ed70889e2771bd9b239ee039b549361b56ce870e08956ec7cce7fa199cd7",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.81",artifact_sha256:"c8909b36f4ee9316c0c3e298cb9adb5fc821a6ec5ca365cab60043eb942c258a",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.82",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.83",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.84",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.85",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.86",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.87",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.88",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.89",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.90",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.91",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.92",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.93",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.94",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.95",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.96",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.97",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.98",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.99",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.100",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.101",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.102",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.103",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.104",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.105",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.106",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.107",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.108",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.109",artifact_sha256:"7a82b33611b9f47478fb181d0da6f49a04f7e4bc401a7752530fecffb2dc5864",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.110",artifact_sha256:"00b7dcc9078a7d7ea4814414fbf92dcf9ba3b0fd51186aac1b967e9ae306a377",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.111",artifact_sha256:"7688e992667a48defe6fefb3b8624012b918e8776498faf9e5b20b69c13d7520",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.112",artifact_sha256:"7688e992667a48defe6fefb3b8624012b918e8776498faf9e5b20b69c13d7520",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.113",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.114",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.115",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.116",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.117",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.118",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.119",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.120",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.121",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.122",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.123",artifact_sha256:"ae68959cc57c3d3e360ba16883479d0706a0c2e742fe61a66b78e12fbbf5463e",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.124",artifact_sha256:"ae68959cc57c3d3e360ba16883479d0706a0c2e742fe61a66b78e12fbbf5463e",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.125",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.126",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.127",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.128",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.129",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.130",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.131",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.132",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.133",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.134",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.135",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.136",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.137",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.138",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.139",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.140",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.141",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.142",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.143",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.144",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.145",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.146",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.147",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.148",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.149",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.150",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.151",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.152",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.153",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.154",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.155",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.156",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.157",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.158",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.159",artifact_sha256:"cc806ca6df14c39d45a944d1e1db9827dae35b3e66e0265ededb3eea3d883dcb",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.160",artifact_sha256:"0b8f6c4598a19acbeff93929efc237dbc4e356ccb26abf6957e297bfc1b551e8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.161",artifact_sha256:"d570f5035bfc5916c31f4954ce5bcc00013eec83edb020edbbfbd3260b9c17d0",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.162",artifact_sha256:"6e52c44af7a3ea3633a4dc28aa63696143cd80044bca7f67a57c4c156985566f",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.163",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.164",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.165",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.166",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.167",artifact_sha256:"62658de309f9b9c8fd70041c83898d8625d85fed303ac6e60c3a17afc85477e2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.168",artifact_sha256:"24d7efe74218b862a90f48cf71dc59dce1d0dba29b167168aca06649bbfab364",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.169",artifact_sha256:"83879d03741c3f37c1502535d128685421cd7a498bc22543516a23ef2b21e496",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.170",artifact_sha256:"386b975277972e253599e5168b654e35c50b5eed9cbe711d7359e2efedd78f31",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.171",artifact_sha256:"386b975277972e253599e5168b654e35c50b5eed9cbe711d7359e2efedd78f31",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.172",artifact_sha256:"7a01a820961bd03b31007e46ba4f09df0a621ea5bfc9ee84548d6acdfd750169",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.173",artifact_sha256:"82c9ece017e109cf8b4b54734ac7a81b1ecb2ff35a426998369b6c3e690fd1ae",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.174",artifact_sha256:"07fa1db4f84afe909ad4de4bcdbda9bc785cf2598b51769b1f5620bb86b3743b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.175",artifact_sha256:"07fa1db4f84afe909ad4de4bcdbda9bc785cf2598b51769b1f5620bb86b3743b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.176",artifact_sha256:"ba3e211489877d0622aeca87be98e235d245f39d2b57f275cd924168d05f98ce",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0})]),dl="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",ll=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",dl]),Ni=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),im=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),am=new Set([S,...Bt.map((e)=>e.artifact_sha256),...ll,...Ni]);var cm=new Set([S,...Bt.filter((e)=>e.pi_tools_v1).map((e)=>e.artifact_sha256),...Ni]);var dm=new Set([S,...Bt.filter((e)=>e.pi_tools_confinement_v1).map((e)=>e.artifact_sha256)]);var lm=new Set([S,...Bt.filter((e)=>e.home_folder_v1).map((e)=>e.artifact_sha256)]);var um=new Set([S,...Bt.filter((e)=>e.background_bash_v1).map((e)=>e.artifact_sha256)]);var fm=new Set([S,...Bt.filter((e)=>e.machine_sdk_v1).map((e)=>e.artifact_sha256)]);var ul=[O,"reason-hands-worker.cjs"];function Mi(e){return typeof e==="string"&&ul.includes(e)}var fl;function ji(){return fl??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as pl,constants as Eo,fstatSync as Wi,lstatSync as _l,openSync as ml,readSync as hl,realpathSync as gl,watch as bl}from"fs";import{dirname as Fi}from"path";function Tn(e,l){let f;try{let g=Fi(e),w=_l(g);if(!w.isDirectory()||w.isSymbolicLink()||!I(w,18)||gl(g)!==g)return null;f=ml(e,Eo.O_RDONLY|Eo.O_NOFOLLOW|Eo.O_NONBLOCK);let v=Wi(f);if(!v.isFile()||v.nlink!==1||!I(v)||v.size<1||v.size>8192)return null;let P=Buffer.alloc(8193),F=hl(f,P,0,P.length,0),R=Wi(f);if(F!==v.size||R.size!==v.size||R.nlink!==1||R.mtimeMs!==v.mtimeMs||R.ctimeMs!==v.ctimeMs)return null;let M=JSON.parse(P.subarray(0,F).toString("utf8"));if(!M||M.pid!==l.pid||!Number.isSafeInteger(M.pid)||M.pid<1||M.launchId!==l.launchId||M.workerVersion!==l.workerVersion||M.protocolVersion!==l.protocolVersion||M.workerArtifactSha256!==l.workerArtifactSha256||M.workerEntrypoint!==l.workerEntrypoint||M.workspaceAliasReady!==!0||!U(M.targetGeneration)||!U(M.generation)||!N(M.fenceId))return null;return{...l,generation:M.generation,targetGeneration:M.targetGeneration,fenceId:M.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(f!==void 0)pl(f)}}var wl=(e,l,f)=>{let g=bl(e,{persistent:!1},l);return g.on("error",f),g};function zi(e){let l=new AbortController,f=e.initial,g=f.targetGeneration,w=!1,v=!1,P,F,R=()=>{if(v)return;v=!0,P?.close(),P=void 0,clearInterval(F),e.signal.removeEventListener("abort",R),l.abort()},M=()=>{if(v)return;if(!e.isAlive()){R();return}let Q=Tn(e.path,e.initial);if(!Q||Q.generation<f.generation||Q.targetGeneration<f.targetGeneration||Q.targetGeneration===f.targetGeneration&&Q.fenceId!==f.fenceId)return;if(f=Q,w||Q.targetGeneration<=g)return;g=Q.targetGeneration,w=!0,Promise.resolve().then(()=>(l.signal.throwIfAborted(),e.publish(Q,l.signal))).catch(()=>{if(!v)R(),e.failed?.()}).finally(()=>{w=!1,M()})};if(e.signal.aborted)return R(),{stop:R};e.signal.addEventListener("abort",R,{once:!0});try{P=(e.watch??wl)(Fi(e.path),M,()=>{P?.close(),P=void 0})}catch{}return F=setInterval(M,1000),F.unref?.(),M(),{stop:R}}import{spawn as yl}from"child_process";import{chmodSync as vl,mkdtempSync as kl,realpathSync as Sl,rmSync as El,unlinkSync as Rl,writeFileSync as Pl}from"fs";import Ol from"net";import{platform as xl,tmpdir as Al}from"os";import{join as Ui}from"path";var Ki=1048576,Oo=105000,Il=2000,Tl=String.raw`
|
|
313
313
|
const { writeSync } = require("node:fs");
|
|
314
314
|
const { createRequire } = require("node:module");
|
|
315
315
|
const { join } = require("node:path");
|
|
@@ -449,10 +449,10 @@ lines.on("line", (line) => {
|
|
|
449
449
|
}).catch((error) => respond({ ok: false, error: String(error) }));
|
|
450
450
|
});
|
|
451
451
|
`;function Cl(e=process.execPath,l=process.versions.bun){return l?"node":e}function Ro(e){try{Rl(e)}catch{}}function Cn(e,l){e.end(`${JSON.stringify(l)}
|
|
452
|
-
`)}function Po(e){return JSON.stringify(e)}function Dl(e){let l=kl(
|
|
453
|
-
`);Pl(f,w,{mode:384});let v=!1;return{command:"/usr/bin/sandbox-exec",args:["-f",f,e.nodeExecutable,...e.nodeArgs],cwd:e.workRoot,env:{...e.environment,TMPDIR:l},async cleanup(){if(v)return;v=!0,El(l,{recursive:!0,force:!0})}}}async function Ll(e){let l=Sl(e.workRoot),f=e.nodeExecutable??Cl(),g=["--max-old-space-size=512","--permission",`--allow-fs-read=${l}`,`--allow-fs-write=${l}`,"-e",Tl],w=
|
|
454
|
-
`);if(
|
|
455
|
-
`,(
|
|
456
|
-
`);if(Me===-1)return;He=!0;let Ye=Oe.slice(0,Me);K=K.then(async()=>{if(he.destroyed)return;try{let Be=JSON.parse(Ye);if(Be.action!=="evaluate"||typeof Be.code!=="string")throw Error("Invalid REPL request");Ie=!0;let le=await V({action:"evaluate",code:Be.code});if(Ie=!1,le.ok!==!0||typeof le.output!=="string")throw Error(typeof le.error==="string"?le.error:"hands_node_repl_failed");Cn(he,{ok:!0,output:le.output})}catch(Be){Ie=!1,Cn(he,{ok:!1,error:Be instanceof Error?Be.message:String(Be),stack:Be instanceof Error?Be.stack:void 0})}}).catch((Be)=>{Cn(he,{ok:!1,error:Be instanceof Error?Be.message:String(Be)})})})});try{await new Promise((he,Oe)=>{ve.once("error",Oe),ve.listen(e.socketPath,()=>{ve.off("error",Oe);try{vl(e.socketPath,384),he()}catch(He){ve.close(()=>Oe(He))}})})}catch(he){v=!0,f.kill("SIGKILL");try{await ln(g)}finally{await l.cleanup(),Ro(e.socketPath)}throw he}return{socketPath:e.socketPath,async stop(){if(v)return;v=!0;let he=new Promise((Oe)=>ve.close(()=>Oe()));for(let Oe of _e)Oe.destroy();await he,K.catch(()=>{return}),z();try{await ln(g)}finally{await l.cleanup(),Ro(e.socketPath)}}}}var xo=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var Vi="/workspace",qi="/var/lib/reason/sessions",Nl="/var/lib/reason/session-controls";function sr(e){let l=`${qi}/`;if(!e.startsWith(l))return null;let f=e.slice(l.length);if(!xo.test(f)||f!==f.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${Nl}/${f}/job.env`}function Hl(e){if(!xo.test(e))throw Error("personal_computer_invalid_identity");return e.toLowerCase()}function Dn(e){let l=Hl(e);return{runtimeRoot:`${qi}/${l}`,workspaceRoot:`${Vi}/sessions/${l}`,sharedRoot:Vi}}var Yi="/root/.ara/cloud-browser/repl.sock";function Ao(e){return e==="compute"}function Xi(e,l,f="linux"){if(e)Dn(e);if(f!=="linux")throw Error("cloud_browser_os_invalid");if(l!==void 0&&(!e||!/^[1-9][0-9]{0,18}$/.test(l)))throw Error("cloud_browser_generation_invalid");let g=e?`/var/lib/reason/browsers/${e.toLowerCase()}`:"/root/.ara/cloud-browser",w=e?`${g}/${l?`g${l}`:"current"}`:g,v=e?`/root/.b/${e.toLowerCase().replaceAll("-","")}`:g;return{temporarySessionDirectory:v,temporaryDirectory:e?`${v}/${l??"current"}`:`${w}/tmp`,directory:w,sessionDirectory:g,config:`${w}/config.json`,status:`${w}/status.json`,socket:`${w}/repl.sock`,bundle:`${w}/driver.mjs`,processName:e?`ara-browser-${e.toLowerCase()}${l?`-${l}`:""}`:"ara-cloud-browser"}}var Io="browser_egress",Zi=ks,Xl=45000,Zl=Nt+1500,st=/^[A-Za-z0-9._:-]{1,160}$/,Ql="/run/ara-hands";function eu(e,l,f=ea()){if(e==="darwin")return{temporaryRoot:f,prepareRoot:!1,sessionMode:448};return{temporaryRoot:l??Ql,prepareRoot:!0,sessionMode:457}}function me(e,l=process.platform,f=process.geteuid?.()){return e===!0&&l==="linux"&&f===0}function ge(e=G(),l=process.platform,f=process.geteuid?.()){return e&&l==="linux"&&f===0?{uid:e.uid,gid:e.gid,home:e.home,username:e.username}:null}function yt(e=ge(),l=ci){return e&&l()?vo:null}function ru(e,l){if(!l&&(e??"linux")==="linux")return Yi;return Xi(l,void 0,e??"linux").socket}function tu(e){return e[Kr]===!0?"sandbox_loopback":"ara_device_wss"}function Mt(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function ta(e){let l=e.toLowerCase().replace(/^\[|\]$/g,"");return l==="localhost"||l.endsWith(".localhost")||l==="::1"||l==="0:0:0:0:0:0:0:1"||l==="0.0.0.0"||l.startsWith("127.")}class ar extends r{expiryDiagnostic;constructor(e){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=e}}function nu(e){return Mt(e)&&Object.keys(e).every((l)=>l==="source_path"||l==="branch")&&(e.source_path===void 0||Z(e.source_path))&&typeof e.branch==="string"&&ko.test(e.branch)}function ou(e,l,f){let g=l===void 0?Date.now():l,w=["relay_url","session_id","environment_id","expires_at","policy_mode","policy_version","hands_protocol_version","hands_worker_version","hands_worker_artifact_sha256","hands_worker_entrypoint","target_generation","target_fence_id"],v=new Set([...w,"workspace_id","legacy_workspace_id",Ee,xe,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",_r,Kr,Io,Lt,Y,X,q]),P=Mt(e)?e:null,F=P?.[Io],R=P?.[Lt],M=P?.[X],Q=F===void 0||(P?.[_r]===ot||M===pe&&P?.[_r]===void 0)&&Mt(F)&&Object.keys(F).every((he)=>he==="mode"||he==="allowed_domains")&&F.mode==="enforce"&&Array.isArray(F.allowed_domains)&&F.allowed_domains.length<=256&&F.allowed_domains.every((he)=>typeof he==="string"&&so(he));if(!Mt(e)||w.some((he)=>!(he in e))||Object.keys(e).some((he)=>!v.has(he))||!Q||M!==void 0&&M!==pe||P?.[q]!==void 0&&P[q]!==Ae||P?.personal_workspace!==void 0&&(P.personal_workspace!==!0||P[_r]!==ot)||P?.cloud_browser!==void 0&&(P.cloud_browser!==!0||P[_r]!==ot)||P?.sandbox_provider!==void 0&&!Ao(P.sandbox_provider)||P?.sandbox_os!==void 0&&P.sandbox_os!=="linux"||R!==void 0&&(P?.[_r]!==Dt||!gi(R))||_r in e&&e[_r]!==ot&&e[_r]!==Dt&&e[_r]!==Fr||Kr in e&&e[Kr]!==!0||e.workspace_path!==void 0&&(!Z(e.workspace_path)||e[_r]!==Fr)||e.workspace_worktree!==void 0&&(e.workspace_path===void 0||!nu(e.workspace_worktree))||typeof e.relay_url!=="string"||typeof e.session_id!=="string"||!st.test(e.session_id)||e.workspace_id!==void 0&&(typeof e.workspace_id!=="string"||!st.test(e.workspace_id))||e.legacy_workspace_id!==void 0&&(typeof e.legacy_workspace_id!=="string"||!st.test(e.legacy_workspace_id))||e[Ee]!==void 0&&(e[Ee]!==ue||(_r in e))||e[xe]!==void 0&&(e[xe]!==J||(_r in e))||e[Y]!==void 0&&(typeof e[Y]!=="string"||!st.test(e[Y]))||typeof e.environment_id!=="string"||!st.test(e.environment_id)||typeof e.expires_at!=="string"||e.policy_mode!=="full_access"||e.policy_version!==1||e.hands_protocol_version!==k||e.hands_worker_version!==D||e.hands_worker_artifact_sha256!==S||!Bi(e.hands_worker_entrypoint)||!U(e.target_generation)||!N(e.target_fence_id))throw new r("invalid_hands_payload","Reason Hands connection payload is invalid.");let z;try{z=new URL(e.relay_url)}catch{throw new r("invalid_hands_relay","Reason Hands relay URL is invalid.")}let C=e[Kr]===!0,re=ta(z.hostname);if((C?z.protocol!=="ws:"||!re:re?z.protocol!=="ws:":z.protocol!=="wss:")||z.username||z.password||z.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(z.pathname))throw new r("invalid_hands_relay","Reason Hands relay URL is not allowed.");let V=Date.parse(e.expires_at),K=Number.isNaN(V)?"parse":new Date(V).toISOString()!==e.expires_at?"noncanonical":V<=g?"expired":V-g>Zi?"over_cap":"accepted",_e={version:1,outcome:K,clock_source:l===void 0?"date_now":"injected",validation_now_ms:Ot(g),expiry_ms:Ot(V),remaining_ms:Number.isSafeInteger(V-g)?V-g:null,maximum_lifetime_ms:Zi,cli_artifact:Wi()};if(K!=="accepted")throw new ar(_e);try{f?.(_e)}catch{}let ve=e.environment_binding===void 0?void 0:eo.safeParse(e.environment_binding);if(ve&&!ve.success)throw new r("invalid_hands_request","Reason Hands environment binding is invalid.");return{...e.cloud_browser===!0?{cloud_browser:!0}:{},...Ao(e.sandbox_provider)?{sandbox_provider:e.sandbox_provider}:{},...e.sandbox_os==="linux"?{sandbox_os:e.sandbox_os}:{},...e.personal_workspace===!0?{personal_workspace:!0}:{},relay_url:z.toString(),...ve?.success?{environment_binding:ve.data}:{},session_id:e.session_id,...e.workspace_id===void 0?{}:{workspace_id:e.workspace_id},...e.legacy_workspace_id===void 0?{}:{legacy_workspace_id:e.legacy_workspace_id},...e[Ee]===ue?{[Ee]:ue}:{},...e[xe]===J?{[xe]:J}:{},...typeof e[Y]==="string"?{[Y]:e[Y]}:{},...e[X]===pe?{[X]:pe}:{},...e[q]===Ae?{[q]:Ae}:{},...typeof e.workspace_path==="string"?{workspace_path:e.workspace_path}:{},...Mt(e.workspace_worktree)?{workspace_worktree:{...typeof e.workspace_worktree.source_path==="string"?{source_path:e.workspace_worktree.source_path}:{},branch:String(e.workspace_worktree.branch)}}:{},environment_id:e.environment_id,expires_at:e.expires_at,policy_mode:"full_access",policy_version:1,hands_protocol_version:k,hands_worker_version:D,hands_worker_artifact_sha256:S,hands_worker_entrypoint:O,target_generation:e.target_generation,target_fence_id:e.target_fence_id,..._r in e?{[_r]:e[_r]}:{},...C?{[Kr]:!0}:{},...R===void 0?{}:{[Lt]:R},...F===void 0?{}:{[Io]:{mode:"enforce",allowed_domains:[...new Set(F.allowed_domains)].sort()}}}}function su(){let e=new Map;return{acquire(l,f){if(e.has(l))return null;let g=[...e.values()],w=(P)=>f.group!==void 0&&P.group===f.group;if(f.exclusive?!g.every(w):g.some((P)=>P.exclusive))return null;if(f.limit!==void 0&&!g.some(w)&&new Set(g.map((P,F)=>P.group??F)).size>=f.limit)return null;e.set(l,f);let v=!1;return()=>{if(v)return;v=!0,e.delete(l)}},activeOwners:()=>[...e.keys()]}}var iu=su();function au(e,l){Ft(e,{recursive:!0,mode:448});let f=br(e),g=()=>new r("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let P of l.split("/")){let F=vr(f,P);try{let M=kr(F);if(M.isSymbolicLink()||!M.isDirectory())throw g()}catch(M){if(!(M&&typeof M==="object"&&("code"in M)&&M.code==="ENOENT"))throw M;try{Ft(F,{mode:448})}catch(Q){if(!(Q&&typeof Q==="object"&&("code"in Q)&&Q.code==="EEXIST"))throw Q}}let R=kr(F);if(R.isSymbolicLink()||!R.isDirectory()||br(F)!==F)throw g();f=F}if(process.platform==="win32"){let P=kr(f);if(P.isSymbolicLink()||!P.isDirectory()||br(f)!==f||!Yr(br(e),f))throw g();return f}let w=kr(f),v=$l(f,Wt.O_RDONLY|Wt.O_DIRECTORY|Wt.O_NOFOLLOW);try{let P=Ul(v);if(!P.isDirectory()||P.dev!==w.dev||P.ino!==w.ino||br(f)!==f)throw g();zl(v,448)}finally{Fl(v)}return f}function cu(e,l=lo(),f,g,w){if(!st.test(e)||f!==void 0&&!st.test(f))throw new r("invalid_hands_workspace","Reason Hands run identity is invalid.");let v=Cr(T({kind:"managed",workspaceId:e,...g?{base:g}:{},...w?{layout:w}:{}})),P=au(l,Cr(v)),F=vr(P,ql(v)),R=!1;try{let C=kr(F);if(R=!0,C.isSymbolicLink())throw new r("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!C.isDirectory())throw new r("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(C){if(C instanceof r||!(C&&typeof C==="object"&&("code"in C)&&C.code==="ENOENT"))throw C}if(w&&!R)try{let C=vr(br(l),Cr(T({kind:"managed",workspaceId:e,...g?{base:g}:{}}))),re=kr(C);if(!re.isSymbolicLink()&&re.isDirectory()&&br(C)===C)Ln(C,F),R=!0}catch{}if(f&&f!==e){let C=vr(P,f);try{let re=kr(C);if(re.isSymbolicLink()||!re.isDirectory())throw new r("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let V=br(C);if(Cr(V)!==P)throw new r("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let K=null;if(R){K=vr(P,`.${e}.previous`);try{throw kr(K),new r("invalid_hands_workspace","Reason Hands previous workspace backup already exists.")}catch(_e){if(_e instanceof r||!(_e&&typeof _e==="object"&&("code"in _e)&&_e.code==="ENOENT"))throw _e}Ln(F,K)}try{Ln(V,F)}catch(_e){if(K)Ln(K,F);throw _e}R=!0}catch(re){if(re instanceof r||!(re&&typeof re==="object"&&("code"in re)&&re.code==="ENOENT"))throw re}}Ft(F,{recursive:!0,mode:448}),un(F,448);let M=br(F);if(Cr(M)!==P)throw new r("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let Q=vr(M,"repo");try{let C=kr(Q);if(C.isSymbolicLink()||!C.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(C){if(C instanceof r||!(C&&typeof C==="object"&&("code"in C)&&C.code==="ENOENT"))throw C}Ft(Q,{recursive:!0,mode:448}),un(Q,448);let z=br(Q);if(Cr(z)!==M)throw new r("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:M,repoPath:z}}function cr(e){let l=null;try{l=kr(e)}catch{}if(!l||l.isSymbolicLink()||!l.isDirectory()||l.uid!==0||l.gid!==0||(l.mode&4095)!==493)throw new r("cloud_workspace_root_invalid","This cloud Session's workspace root is not root's 0755 directory, so Reason Hands cannot use it.")}function du(e,l,f=process.geteuid?.(),g=process.platform){if(g==="win32")return"unknown";let w;try{if(w=mt(e),!w.isDirectory())return"unready";Wl(e,Wt.R_OK|Wt.W_OK|Wt.X_OK)}catch{return"unready"}try{if(kr(e).isSymbolicLink()||br(e)!==e)return"unknown"}catch{return"unknown"}if(f!==0)return"checked";if(l===null||w.uid!==l.uid||(w.mode&448)!==448)return"unknown";for(let v=Cr(e);;v=Cr(v)){let P;try{P=mt(v)}catch{return"unknown"}if(!(P.uid===l.uid?(P.mode&64)!==0:P.gid===l.gid?(P.mode&8)!==0:(P.mode&1)!==0))return"unknown";if(v===Cr(v))return"checked"}}function lu(e,l){let f="/";for(let g of["",...e.split("/"),...l.split("/")].filter((w,v)=>v===0||w)){if(g)f=vr(f,g);let w;try{w=kr(f)}catch{return null}if(w.uid!==0)return w.uid;if((w.mode&2)!==0&&(w.mode&512)===0&&!w.isSymbolicLink())return-1;if(w.isSymbolicLink()||!w.isDirectory())return null}return null}function uu(e,l,f,g=process.geteuid?.(),w){if(!st.test(l))return null;let v,P;try{v=br(e),P=Cr(T({kind:"managed",workspaceId:l,...f?{base:f}:{},...w?{layout:w}:{}}))}catch{return null}let F=vr(v,P),R=qr(F)!==null,M=(V)=>new r("cloud_workspace_root_invalid",V),Q;if(g===0){let V=lu(v,P);if(V===null)return null;if(!R)throw new r("invalid_hands_workspace","As root, Reason Hands never prepares a workspace in folders another user owns.");Q=V}else{if(!R)return null;let V,K;try{V=kr(Cr(F)),K=kr(F)}catch{return null}if(V.isSymbolicLink()||!V.isDirectory()||V.uid===0||K.uid!==0)return null;Q=V.uid}let z=v;for(let V of P.split("/")){let K=vr(z,V),_e=!1;try{let ve=kr(K);_e=!ve.isSymbolicLink()&&ve.isDirectory()&&br(K)===K}catch{}if(!_e)throw M("This cloud Session's workspace root is missing or is not a real directory.");z=K}cr(F);let C;try{C=lr(F)}catch(V){if(V instanceof r)throw V;throw M("This cloud Session's workspace root changed while Reason Hands checked it.")}let re=null;try{re=mt(C.repoPath).uid}catch{}if(re!==Q)throw new r("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return C}function lr(e,l=!1){let f=br(e),g=vr(f,"repo"),w;try{w=kr(g)}catch{throw new r("invalid_hands_workspace","Reason Hands repository is missing from the granted root.")}if(l){if(!/^\/var\/lib\/reason\/sessions\/[0-9a-f-]{36}$/.test(f))throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");if(Dn(f.slice(f.lastIndexOf("/")+1)).runtimeRoot!==f)throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");let F=br("/workspace"),R=br(g);if(F!=="/workspace"||!mt(R).isDirectory()||!R.startsWith("/workspace/"))throw new r("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:f,repoPath:R}}let v=li(f);if(v&&w.isSymbolicLink()){let F=br(g);if(F!==br(v)||!mt(F).isDirectory())throw new r("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:f,repoPath:F}}if(w.isSymbolicLink()||!w.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let P=br(g);if(Cr(P)!==f)throw new r("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:f,repoPath:P}}function Co(e,l,f){if(l!==void 0&&!Z(l))throw new r("invalid_hands_workspace",`Reason Hands ${f} is invalid.`);let g=ra(e,l??".");if(!Yr(e,g))throw new r("invalid_hands_workspace",`Reason Hands ${f} escapes its granted root.`);return g}function na(e,l,f){if(ze(l)){let g=br(f);return{anchor:g,target:ra(g,l),boundary:vr(g,de)}}return{anchor:e,target:Co(e,l,"folder"),boundary:e}}function fu(e,l){if(!Yr(e,l))throw new r("invalid_hands_workspace","Reason Hands folder escapes its granted root.");let f=e;for(let g of l.slice(e.length).split(Yl).filter(Boolean)){f=vr(f,g);let w=null;try{w=kr(f)}catch(v){if(v.code!=="ENOENT")throw v}if(!w)Ft(f,{mode:448});else if(w.isSymbolicLink()||!w.isDirectory())throw new r("invalid_hands_workspace","Reason Hands folder must be made of real directories.")}}function oa(e,l){let f=br(Co(e,l.source_path,"repository"));if(!Yr(e,f)||!mt(f).isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a folder in its granted root.");return f}async function pu(e,l,f,g=a()){try{let w=br(e);if(To(na(w,l,g).target))return;return await yi(oa(w,f))??void 0}catch{return}}function _u(e,l,f,g,w=mu,v=a()){let P=br(e),{target:F,boundary:R,anchor:M}=na(P,l,v);if(f&&!To(F)){let C=oa(P,f);fu(M,Cr(F));let re=["-c","core.hooksPath=/dev/null","-C",C];if(g)w([...re,"update-ref","--create-reflog","-m",g.note,`refs/heads/${f.branch}`,g.commit,""]);let V=g?w([...re,"worktree","add",F,f.branch]):w([...re,"worktree","add","-b",f.branch,F]);if(!g&&V.status!==0&&/already exists/.test(V.stderr)&&!To(F))V=w([...re,"worktree","add",F,f.branch]);if(V.status!==0)throw new r(/not a git repository/i.test(V.stderr)?"workspace_not_git_repository":"workspace_worktree_failed","Reason could not create this Session's git worktree.")}let Q;try{Q=kr(F)}catch{throw new r("workspace_folder_missing","This Session's folder no longer exists.")}let z=br(F);if(Q.isSymbolicLink()&&!Yr(R,z))throw new r("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!mt(z).isDirectory()||!Yr(R,z))throw new r("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(E(z))throw new r("protected_path","Credential and secret folders are unavailable to Sessions.");return z}function mu(e){let l=_o();if(!l)return{status:null,stderr:"git was not found. Install Git for Windows (https://git-scm.com/download/win)."};let f=jl(l,e,{encoding:"utf8",timeout:60000,env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:["ignore","ignore","pipe"]});return{status:f.status,stderr:f.stderr??""}}function sa(e){return sr(e)??qr(e)?.jobEnv??vr(e,"job.env")}function hu(e,l){let f=sa(e),g=kr(f);if(g.isSymbolicLink()||!g.isFile())throw new r("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");Kl(f,l),un(l,384)}function gu(e){if(e.workspaceMode===Fr&&e.workspacePath!==void 0){let P=e.home??a(),F=_u(e.grantedRoot,e.workspacePath,e.workspaceWorktree,e.workspaceWorktreeStart,void 0,P);if(e.workspaceWorktree&&e.deviceId)Di(P,e.workspacePath,e.deviceId);return{workRoot:F,repoPath:F,workspace:{kind:"root",path:e.workspacePath},jobEnvPath:vr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if(e.workspaceMode===ot)return{...lr(e.grantedRoot,e.personalWorkspace),workspace:{kind:"root"},jobEnvPath:vr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if(e.workspaceMode===Dt||e.workspaceMode===Fr){let P=kr(e.grantedRoot);if(P.isSymbolicLink()||!P.isDirectory())throw new r("invalid_hands_workspace","Reason Hands root must be a real directory.");let F=br(e.grantedRoot);return{workRoot:F,repoPath:F,workspace:{kind:"root"},jobEnvPath:vr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}let l=e.workspaceId??e.runId,f={kind:"managed",workspaceId:l,...e.workspaceBase?{base:e.workspaceBase}:{},...e.workspaceLayout?{layout:e.workspaceLayout}:{}},g=ne(e.grantedRoot,f,e.home).anchor,w=uu(g,l,e.workspaceBase,void 0,e.workspaceLayout);if(w)return{...w,workspace:f,jobEnvPath:vr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1,cloudSessionRoot:!0};let v=cu(l,g,e.legacyWorkspaceId,e.workspaceBase,e.workspaceLayout);return{...v,workspace:f,jobEnvPath:vr(e.temporaryDirectory,"job.env"),workspacePoolPath:Cr(v.workRoot),managedWorkspace:!0}}function nn(e){let{command:l,prefix:f}=ro(e.executablePath,e.sourceEntrypoint),g=Le({home:Vl(),temporaryDirectory:e.temporaryDirectory,path:e.path});if(g.REASON_DEVICE_ROOT=g.ARA_DEVICE_ROOT=e.grantedRoot,g.REASON_HANDS_WORKSPACE=g.ARA_HANDS_WORKSPACE=e.workRoot,g.REASON_HANDS_REPO=g.ARA_HANDS_REPO=e.root,e.workspacePoolPath)g.REASON_HANDS_WORKSPACE_POOL=g.ARA_HANDS_WORKSPACE_POOL=e.workspacePoolPath;return{command:l,args:[...f,"__device","__hands-worker","--config",e.configPath],options:{cwd:e.root,env:g,shell:!1,stdio:[on,"ignore","pipe"]}}}var on=process.platform==="win32"?"pipe":"ignore";function Je(e,l){if(process.platform!=="win32")return e.kill(l);if(l==="SIGTERM")e.stdin?.end();else if(e.pid)Re(e.pid);return!0}function bu(e,l){let f="",g=!1,w=Date.now(),v=0,P=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled","permission_denied"].map((z)=>`hands.worker.${z}`)),F=new Set([null,"open_not_received","current_connection","obsolete_connection","request_aborted","request_timeout","client_closed","driver_stopped","driver_handoff","run_cancelled","run_finished","other","frame_too_large","invalid_json","invalid_claim","executor_mismatch","stale_generation","fence_conflict","SIGTERM","SIGINT","SIGHUP","expired","cleanup_complete","cleanup_failed","cancelled","settled","unsupported","unconfirmed",...["sandbox_policy","os_permission_unknown"].flatMap((z)=>["bash","read","write","edit"].map((C)=>`${z}:${C}`))]),R=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],M=["peerGeneration","socketState","closeCode"],Q=new Set(["event","reason","launchId",...R,...M]);return(z)=>{for(let C of z.toString().split(/(?<=\n)/)){let re=C.endsWith(`
|
|
457
|
-
`);if(!g&&f.length+C.length<=2048)f+=C;else g=!0;if(!re)continue;let V=f;if(f="",g){g=!1;continue}try{let K=JSON.parse(V);if(!K||typeof K!=="object"||Array.isArray(K)||Object.keys(K).some((_e)=>!Q.has(_e))||!P.has(K.event)||!F.has(K.reason)||K.event==="hands.worker.permission_denied"!==(typeof K.reason==="string"&&K.reason.includes(":"))||K.launchId!==e||R.some((_e)=>!Number.isSafeInteger(K[_e])||K[_e]<0)||M.some((_e)=>K[_e]!==null&&(!Number.isSafeInteger(K[_e])||K[_e]<0)))continue;if(Date.now()-w>=60000)w=Date.now(),v=0;if(v>=122)continue;v+=1,l(K)}catch{}}}}async function wu(e){let l=e.now()+e.timeoutMs;while(e.now()<l){if(e.signal.aborted)throw new r("cancelled","Reason Hands start was cancelled.");if(e.spawnFailed?.()||e.child.exitCode!==null||e.child.signalCode!==null)throw new r("hands_worker_exited","Reason Hands exited before ready.");let f=Tn(e.path,{pid:e.child.pid??-1,launchId:e.launchId,workerVersion:D,protocolVersion:k,workerArtifactSha256:S,workerEntrypoint:O});if(f?.targetGeneration===e.targetGeneration&&f.fenceId===e.fenceId)return f;await new Promise((g)=>setTimeout(g,10))}throw new r("hands_ready_timeout","Reason Hands did not become ready.")}async function yu(e,l){let f=()=>e.exitCode===0&&e.signalCode===null;if(e.exitCode!==null||e.signalCode!==null)return f()?"stopped":"already_exited";let g=new Promise((P)=>e.once("exit",()=>P()));try{if(!Je(e,"SIGTERM"))return f()?"stopped":"unobserved"}catch{return f()?"stopped":"unobserved"}if(await Qi(g,l))return f()?"stopped":"unobserved";try{Je(e,"SIGKILL")}catch{}return await Qi(g,l)?"forced":"unobserved"}async function Qi(e,l){let f;try{return await Promise.race([e.then(()=>!0),new Promise((g)=>{f=setTimeout(()=>g(!1),l)})])}finally{clearTimeout(f)}}function vu(e){return new Promise((l)=>{let f=!1,g=(F)=>{if(f)return;f=!0,clearTimeout(P),e.signal.removeEventListener("abort",w),e.child.off("exit",v),l(F)},w=()=>g("cancelled"),v=()=>g("exited"),P=setTimeout(()=>g("expired"),Math.max(0,e.expiresAt-e.now()));if(e.signal.addEventListener("abort",w,{once:!0}),e.child.once("exit",v),e.signal.aborted)w();else if(e.child.exitCode!==null||e.child.signalCode!==null)v()})}var ku=Li();function Su(e,l){if(!(e instanceof Error)||e instanceof r)return!1;let f=["hands_browser_driver_missing","hands_browser_driver_version_mismatch","hands_browser_executable_missing","hands_browser_unsupported_platform","hands_browser_unavailable"].includes(e.message),g=["ENOENT","EACCES","EPERM"].includes(e.code??"");if(!f&&!g)return!1;try{return kr(l),!1}catch(w){return Mt(w)&&w.code==="ENOENT"}}function Eu(e){return e.sandbox_provider==="compute"&&!e.cloud_browser&&!e[Kr]&&e[_r]===ot}function Ru(e,l,f){return e===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:Br(e,l),...f===void 0?{}:{worker_prespawned:f}}}}async function wt(e,l={}){let f=l.logDiagnostic??((le)=>console.warn(le)),g=new Map,w=(le)=>{let fe=Date.now();g.set(le,fe);try{f(JSON.stringify({event:"sandbox.hands_startup",stage:le,timestampMs:fe}))}catch{}};w("entered");let v=e.claimEnvironment;e.claimEnvironment=void 0;let P=l.now??Date.now,F,R=ou(e.payload,l.now?.(),(le)=>{F=le});if(e.managedPty&&(e.managedPty.version!==1||!e.headless||!e.runtimeDirectory||![void 0,!0].includes(e.managedPty.startupVerified)||!e.deviceIdentity||!e.claimOwner||e.claimOwner.device_id!==e.deviceIdentity.deviceId||!R.environment_binding||!["darwin","linux","win32"].includes(process.platform)))throw new r("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let M=async(le)=>{let fe;try{await Promise.race([le,new Promise((Se,We)=>{fe=setTimeout(()=>We(new r("hands_event_delivery_unavailable","Hands event delivery did not settle within its deadline.")),Math.max(1,Math.min(l.eventDeliveryTimeoutMs??5000,5000)))})])}finally{clearTimeout(fe)}},Q=async(le,fe)=>M(e.emitEvent(le,fe));if(e.headless&&(R.cloud_browser===!0||e.managedBrowser!==void 0||R[Kr]!==void 0||R[Lt]!==void 0||R[_r]!==void 0&&R[_r]!==Fr))throw new r("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let z=ge(),C=R[q]===void 0?null:yt(z);if(R[q]!==void 0&&(C===null||!e.headless||!me(e.hostExecution,l.hostIdentity?.platform,l.hostIdentity?.euid)))throw new r("hands_model_jobs_egress_unavailable","This worker cannot hold its jobs to the guest egress guard; the Hands did not start.");if(R[X]!==void 0&&!(e.headless&&me(e.hostExecution,l.hostIdentity?.platform,l.hostIdentity?.euid)))throw new r("hands_confinement_unavailable","Confined Hands need a root Linux worker in host mode.");if(R.cloud_browser&&process.platform!=="linux")throw new r("cloud_browser_target_invalid","Cloud browser is available only on a cloud machine.");let re=`${e.operationId}:${e.attemptId}`,V=R[_r]===Dt,K=e.headless||process.platform==="darwin"&&e.managedBrowser===void 0&&!R.cloud_browser&&!R.browser_egress&&!R[Kr]&&(R[_r]===void 0||R[_r]===Fr)||Eu(R),_e=V?R[Lt]??"bash":null,ve=_e?mi(_e):null;if(ve)throw new r(ve,"Persistent Node REPL execution is unavailable; this benchmark profile cannot start.");let he=R[_r],Oe=e.headless===!0&&e.ownComputer!==!0?e.handsSlots??1:void 0,He=(l.slot??iu).acquire(re,{exclusive:Oe===1||he!==void 0&&he!==Fr,...Oe!==void 0&&Oe>1?{limit:Oe}:{},...e.headless===!0&&R[Y]!==void 0?{group:R[Y]}:{}});if(!He)throw new r("hands_slot_busy",Oe!==void 0&&Oe>1?`This Reason worker runs at most ${Oe} sessions at a time.`:"This Reason Device runs one session at a time.");let Ie=e.headless===!0?fi(e.runId):null,be=null,Me=null,Ye,Be;try{w("browser_resolution");let le=e.headless&&l.browserExecutablePath===void 0?await dn():null,fe=V||R.cloud_browser?null:l.browserExecutablePath===void 0?e.headless?le?.status==="resolved"?le.executablePath:null:await si(void 0,process.platform,e.managedBrowser):l.browserExecutablePath;if(!V&&!R.cloud_browser&&!K&&!fe)throw new r("hands_browser_unavailable","Reason Hands requires Chrome, Edge, Brave, Chromium, or a Playwright Chromium install.");w("path_resolution");let Se;try{Se=await(l.resolvePathEnvironment??ku)()}catch{Se={path:an(),source:"fallback"}}if(w("workspace_setup"),process.platform==="darwin"){let gr=R[_r]===Fr&&R.workspace_path!==void 0?Co(e.root,R.workspace_worktree?R.workspace_worktree.source_path:R.workspace_path,"folder"):null;for(let Rr of new Set([e.root,...gr?[gr]:[]]))await Ls(Rr)}let Ge=R[_r]===ot||R[_r]===Dt?eu(process.platform,l.sandboxRuntimeRoot):null,qe=e.headless&&e.runtimeDirectory?e.runtimeDirectory:Ge?Ge.temporaryRoot:ea();if(be="private_runtime",e.headless&&e.runtimeDirectory){b(qe);let gr=br(e.root);if(!De(gr,qe))throw new r("invalid_hands_workspace","Private worker state must not overlap the granted workspace.")}if(e.headless&&e.runtimeDirectory&&(!e.deviceIdentity||!R.environment_binding))throw new r("environment_unavailable","Headless Hands requires a server-bound private environment.");if(be="runtime_root",Ge?.prepareRoot)Ft(qe,{recursive:!0,mode:457}),un(qe,457);be="temporary_directory";let Pe=br(Gl(vr(qe,"reason-hands-session-")));Me=Pe,un(Pe,Ge?.sessionMode??448);let Xe=vr(Pe,"hands-config.json"),dr=vr(Pe,"hands-ready.json"),mr=Bl(),Sr=R.target_fence_id;if(e.workspaceGrant){be="workspace_grant",w("workspace_grant_wait");let gr=e.workspaceGrant;await new Promise((Rr,dt)=>{let kt=()=>dt(new r("cancelled","Reason Hands was cancelled."));if(e.signal.aborted){kt();return}e.signal.addEventListener("abort",kt,{once:!0}),gr.then(Rr,dt).finally(()=>e.signal.removeEventListener("abort",kt))})}be="granted_root";let $e=br(e.root);be="workspace_layout";let Qe=R[_r]===Fr&&R.workspace_path!==void 0&&R.workspace_worktree?await pu($e,R.workspace_path,R.workspace_worktree):void 0,{workRoot:fr,repoPath:wr,jobEnvPath:Lr,workspacePoolPath:zr,managedWorkspace:Mr,workspace:jr,cloudSessionRoot:it}=gu({grantedRoot:$e,personalWorkspace:R.personal_workspace===!0,runId:e.runId,workspaceId:R.workspace_id,legacyWorkspaceId:R.legacy_workspace_id,workspaceBase:R[Ee],workspaceLayout:R[xe],temporaryDirectory:Pe,workspaceMode:R[_r],applicationSupportPath:l.applicationSupportPath,...R.workspace_path===void 0?{}:{workspacePath:R.workspace_path},...R.workspace_worktree?{workspaceWorktree:R.workspace_worktree}:{},...Qe?{workspaceWorktreeStart:Qe}:{},...e.deviceIdentity?{deviceId:e.deviceIdentity.deviceId}:{}}),Jr=tu(R);be="jobs";let Er=e.headless&&e.runtimeDirectory?er({runtimeDirectory:e.runtimeDirectory,root:$e,runId:e.runId}):void 0;Ye=Er?.disposeSocket;let Ur=Er?gs(Er):null;if(Ur)try{f(JSON.stringify({event:"hands.journal_owner_retired",run_id:e.runId,reason:Ur.reason,prior_executor_launch_id:Ur.executorLaunchId}))}catch{}if(Er&&[fr,wr].some((gr)=>!De(gr,Er.journalDirectory)))throw new r("invalid_hands_workspace","A Session can't work in the folder that holds this worker's settings; start it in a project or repository inside it.");let vt=R.personal_workspace?fr.slice(fr.lastIndexOf("/")+1):void 0;if(vt&&vt!==R.workspace_id)throw new r("invalid_hands_workspace","Personal session identity does not match its Device grant.");be="browser_socket";let Wr=R.cloud_browser?ru(R.sandbox_os,vt):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${mr}`:vr(Er?Er.launchDirectory:Pe,"repl.sock");be="relay_url";let $r=ta(new URL(R.relay_url).hostname),at=Jr==="ara_device_wss"&&!$r?(l.loadProxy??j)()?.url:void 0,Dr;be="environment_owner";let Ir=e.headless&&e.deviceIdentity&&R.environment_binding?Ni(Pe,{runId:e.runId,...e.deviceIdentity,binding:R.environment_binding,expiresAtMs:Date.parse(R.expires_at),identity:()=>Dr?.()??null}):void 0;be="job_environment";let zt=!Ir&&jr.kind==="managed"&&Mr?vr(fr,"job.env"):null;if(zt)try{Nn(zt,"",{mode:384,flag:"wx"})}catch(gr){if(!(gr instanceof Error&&("code"in gr)&&gr.code==="EEXIST"))throw gr}let Hn={url:R.relay_url,transport:Jr,...at===void 0?{}:{proxyUrl:at},...e.localGithubConfinement?{localGithubConfinement:!0}:{},...R[X]&&Ir?{gitCredentialEnvironment:!0}:{},workerVersion:D,protocolVersion:k,workerArtifactSha256:S,workerEntrypoint:O,...process.platform==="win32"?{bashExecutable:se()}:{},targetGeneration:R.target_generation,fenceId:Sr,workRoot:fr,workspaceAliasPath:fr,jobEnvPath:Lr,...Ir?{environmentSnapshotPath:Ir.path,...e.hostExecution?{executionEnvironment:nr()}:{},environmentExpectedBinding:{runId:e.runId,...e.deviceIdentity,binding:R.environment_binding}}:zt?{jobEnvSourcePath:zt,workspacePoolPath:Cr(fr)}:Mr?{}:{jobEnvSourcePath:sa(fr)},repoPath:wr,replSocketPath:Wr,...R.cloud_browser?{browserRunId:e.runId}:{},readyPath:dr,launchId:mr,expiresAtMs:Date.parse(R.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...Er?{managedJobs:{journalDirectory:Er.journalDirectory,scopeId:Er.scopeId},jobControlSocketPath:Er.socketPath}:{},...Er&&z?{jobsUser:{...z,...C!==null?{modelGid:C}:{}}}:{},...e.managedPty&&Er&&Ir?{managedPty:{version:1,...e.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:ir()}:{}}}:{},...K&&!fe?{allowedTools:["bash","read","write","edit"]}:V?{allowedTools:_e==="bash"?["bash"]:["bash","repl"]}:{}};if(Ir||Mr&&!zt)Nn(Lr,"",{mode:384});else hu(fr,Lr);be="config_write",Nn(Xe,JSON.stringify(Hn),{mode:384}),be=null;let ct={session_id:R.session_id,environment_id:R.environment_id,hands_protocol_version:k,hands_worker_version:D,hands_worker_artifact_sha256:S,hands_worker_entrypoint:O,target_generation:R.target_generation,target_fence_id:R.target_fence_id,executor_launch_id:mr},fn=null,Do=!1,Lo=!1,No,Ar=null,Ho,Bo,pn="failed",Mo=null,Bn=Promise.resolve(),jo=null,Mn=async(gr,Rr)=>{try{await Q(gr,Rr)}catch{}};try{w("event_started");let gr,Rr=(async()=>{await e.emitEvent("hands.started",{...ct,policy_mode:"full_access",policy_version:1,path_source:Se.source}),gr=Date.now()})();Rr.catch(()=>{return}),w("worker_setup");let dt=R.browser_egress?{mode:"enforce",allowedDomains:R.browser_egress.allowed_domains}:{mode:"off"};if(_e&&_e!=="bash")fn=await(l.startNodeRepl??Ji)({socketPath:Wr,workRoot:fr});else if(!V&&!R.cloud_browser&&fe)fn=await(l.startRepl??ii)({socketPath:Wr,browserExecutablePath:fe,workspaceRoot:wr,...e.managedBrowser?{managedBrowser:e.managedBrowser}:{},...e.desktopRecording?{recording:e.desktopRecording}:{},networkPolicy:dt,onEgressDenied:(Ve)=>{let Hr=pi(Ve.host);f(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:Hr,reason:Ve.reason,run_id:e.runId})),Bn=Bn.then(()=>Q("hands.browser_egress_denied",{destination_id:Hr,reason:Ve.reason})).catch((mn)=>{jo??=mn})}}).catch((Ve)=>{if(!K||e.signal.aborted||P()>=Date.parse(R.expires_at)||!Su(Ve,Wr))throw Ve;return Object.assign(Hn,{allowedTools:["bash","read","write","edit"]}),Nn(Xe,JSON.stringify(Hn),{mode:384}),Lo=!0,null});let kt=nn({configPath:Xe,root:wr,grantedRoot:$e,workRoot:fr,workspacePoolPath:zr,temporaryDirectory:Pe,path:Se.path,executablePath:l.executablePath,sourceEntrypoint:l.sourceEntrypoint}),jn=Date.now(),Wn,Wo,Fn=l.takePrespawnedWorker?.(kt)??null;if(No=l.takePrespawnedWorker?Fn!==null:void 0,Ar=Fn??(l.spawnWorker??((Ve)=>Ml(Ve.command,Ve.args,Ve.options)))(kt),!Fn)l.adoptSpawnedWorker?.(Ar);Ar.stderr?.on("data",bu(mr,(Ve)=>{if(Ve.event==="hands.worker.connecting")Wn??=Ve.timestampMs;else if(Ve.event==="hands.worker.open")Wo??=Ve.timestampMs;if(f(JSON.stringify({...Ve,run_id:e.runId})),Ve.event==="hands.worker.permission_denied"&&typeof Ve.reason==="string"){let[Hr,mn]=Ve.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(Hr??"")&&["bash","read","write","edit"].includes(mn??""))Q("permission.denied",{provenance:Hr,operation:mn}).catch(()=>{return})}}));let Fo=!1;Ar.on("error",()=>{Fo=!0}),Ar.once("exit",(Ve,Hr)=>{try{f(JSON.stringify({event:"hands.worker.exited",run_id:e.runId,launchId:mr,exit_code:Ve,exit_signal:Hr}))}catch{}}),Be=Ar,w("worker_ready_wait");let Ut=await wu({path:dr,launchId:mr,fenceId:Sr,targetGeneration:R.target_generation,child:Ar,spawnFailed:()=>Fo,signal:e.signal,timeoutMs:l.readyTimeoutMs??Xl,now:P}),ia=Date.now();if(Dr=()=>{if(!Ar||Ar.exitCode!==null||Ar.signalCode!==null)return null;let Ve=Tn(dr,Ut);return Ve?{generation:Ve.targetGeneration,fenceId:Ve.fenceId}:null},Er){let Ve={root:$e,runId:e.runId,operationId:e.operationId,scopeId:Er.scopeId,socketPath:Er.socketPath,generation:Ut.targetGeneration,fenceId:Ut.fenceId,executorLaunchId:mr,expiresAtMs:Date.parse(R.expires_at),readIdentity:Dr,workspace:jr,localGithubConfinement:e.localGithubConfinement===!0};if(Ir)Ve.environment=Ir;if(e.claimOwner&&e.deviceIdentity&&e.claimOwner.device_id===e.deviceIdentity.deviceId){let Hr=[e.deviceIdentity.apiOrigin,R.relay_url];if(at)Hr.push(at);Ve.previewAuthority={owner:Object.freeze({...e.claimOwner}),rootId:e.deviceIdentity.rootId,relayOrigin:new URL(R.relay_url).origin,deniedPorts:Qt(Hr)}}Bo=bs(Ve)}if(await new Promise((Ve)=>{setImmediate(Ve)}),it)cr(fr);let _n;if(v&&Ir){try{let Ve=Ir.install(v);_n={snapshot_id:Ve.snapshot_id,installed_revision:Ve.installed_revision}}catch{}try{f(JSON.stringify({event:"hands.environment_at_claim",run_id:e.runId,installed:_n!==void 0}))}catch{}}v=void 0;let zo=!1;if(e.headless){let Ve=du(wr,z);try{f(JSON.stringify({event:"hands.workspace_check",run_id:e.runId,outcome:Ve}))}catch{}if(Ve==="unready")throw new r("hands_workspace_unready","This Session's checkout is not a readable, writable directory at its own path, so Reason Hands cannot use it.");zo=Ve==="checked"}w("event_ready");let Uo=M(Rr);Uo.catch(()=>{return});let $o=Date.now();Do=!0,await Q("hands.ready",{...ct,expiry_diagnostic:F,startup_stages:{version:1,browser_resolution_ms:Br(g.get("browser_resolution"),g.get("path_resolution")),path_resolution_ms:Br(g.get("path_resolution"),g.get("workspace_setup")),workspace_setup_ms:Br(g.get("workspace_setup"),g.get("event_started")),repl_setup_ms:Br(g.get("worker_setup"),jn),worker_boot_ms:Br(jn,Wn),worker_dial_ms:Br(Wn,Wo),worker_ready_ms:Br(jn,ia),started_event_ms:Br(g.get("event_started"),gr),started_join_wait_ms:Br(g.get("event_ready"),$o),total_ms:Br(g.get("entered"),$o)},...Ru(e.claimedAtMs,g.get("entered"),No),...e.managedPty?.startupVerified===!0?{managed_pty:{version:1,execution_mode:"host",descendant_cleanup_verified:!0}}:{},policy_mode:"full_access",policy_version:1,path_source:Se.source,connection_generation:Ut.generation,..._n?{environment_installed:_n}:{},...zo?{workspace_checked:!0}:{},...K&&!fn?{browser_state:"unavailable",browser_reason_code:Lo?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await Uo,w("ready"),Ho=Ui({path:dr,initial:Ut,signal:e.signal,isAlive:()=>Ar!==null&&Ar.exitCode===null&&Ar.signalCode===null&&P()<Date.parse(R.expires_at),publish:(Ve,Hr)=>e.emitEvent("hands.reconnected",{...ct,target_generation:Ve.targetGeneration,target_fence_id:Ve.fenceId,connection_generation:Ve.generation},Hr),failed:()=>f(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:e.runId,executor_launch_id:mr}))});let Ko=await vu({child:Ar,signal:e.signal,expiresAt:Date.parse(R.expires_at),now:P});if(Ko==="cancelled"){let Ve=e.signal.reason instanceof r?e.signal.reason.code:"cancelled";throw pn=Ve,new r(Ve,"Reason Hands was cancelled.")}if(Ko==="exited")throw new r("hands_worker_exited","Reason Hands exited unexpectedly.");return pn="expired",{...ct,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(gr){Mo=gr;let Rr=gr instanceof r?gr.code:"hands_failed",dt=Rr==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(Rr);if(pn=dt?Rr:"failed",!dt)await Mn("hands.failed",{...ct,reason_code:Rr});throw gr}finally{Ho?.stop(),Bo?.();let gr=Ar?await yu(Ar,l.stopTimeoutMs??Zl):null,Rr=!1;await e.desktopRecording?.close();try{await fn?.stop()}catch{Rr=!0}if(await Bn,(gr==="stopped"||gr==="already_exited"&&!Do)&&!Rr)await Mn("hands.stopped",{...ct,reason_code:pn});else if(gr!==null||Rr){if(await Mn("hands.failed",{...ct,reason_code:gr==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),Mo===null||Rr)throw new r("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(jo!==null)throw new r("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(le){let fe=ai(be,le);if(fe)try{f(JSON.stringify({event:"sandbox.hands_workspace_failed",...fe}))}catch{}throw le}finally{try{if(!Be||Be.exitCode!==null||Be.signalCode!==null)Ye?.();if(Me!==null&&(!Be||Be.exitCode!==null||Be.signalCode!==null))Jl(Me,{recursive:!0,force:!0})}finally{Ie?.(),He()}}}
|
|
458
|
-
export{p,
|
|
452
|
+
`)}function Po(e){return JSON.stringify(e)}function Dl(e){let l=kl(Ui(Al(),"reason-node-repl-")),f=Ui(l,"node-repl.sb"),w=["(version 1)","(deny default)",'(import "system.sb")',"(allow process*)","(deny network*)",`(allow file-read* ${["/System","/usr","/bin","/opt/homebrew","/usr/local"].map((P)=>`(subpath ${Po(P)})`).join(" ")})`,`(allow file-read* file-write* (subpath ${Po(e.workRoot)}) (subpath ${Po(l)}))`].join(`
|
|
453
|
+
`);Pl(f,w,{mode:384});let v=!1;return{command:"/usr/bin/sandbox-exec",args:["-f",f,e.nodeExecutable,...e.nodeArgs],cwd:e.workRoot,env:{...e.environment,TMPDIR:l},async cleanup(){if(v)return;v=!0,El(l,{recursive:!0,force:!0})}}}async function Ll(e){let l=Sl(e.workRoot),f=e.nodeExecutable??Cl(),g=["--max-old-space-size=512","--permission",`--allow-fs-read=${l}`,`--allow-fs-write=${l}`,"-e",Tl],w=Me({home:l,temporaryDirectory:l}),v=e.platformName??xl();if(v==="linux")return{command:f,args:g,cwd:l,env:w,async cleanup(){}};if(v==="darwin")return Dl({nodeExecutable:f,nodeArgs:g,workRoot:l,environment:w});throw Error("hands_node_repl_platform_unsupported")}async function cn(e){let l;try{await Promise.race([e,new Promise((f,g)=>{l=setTimeout(()=>g(Error("hands_node_repl_child_cleanup_timeout")),Il)})])}finally{clearTimeout(l)}}async function Gi(e){if(e.executionMode!=="single-evaluation")throw Error(ui);let l=await Ll(e),f;try{f=yl(l.command,l.args,{cwd:l.cwd,env:l.env,stdio:["pipe","pipe","pipe"]})}catch(he){throw await l.cleanup(),he}let g=new Promise((he)=>f.once("close",()=>he())),w;f.once("error",(he)=>{w=he});let v=!1,P=!1,F="";f.stderr.setEncoding("utf8"),f.stderr.on("data",(he)=>{F=`${F}${he}`.slice(-16384)});let R=f.stdout,M,Q=(he,Ie,De)=>{if(De)he.failure??=De;if(he.finishing)return;he.finishing=!0,P=!0,f.kill("SIGKILL"),cn(g).then(()=>{if(he.failure)he.reject(he.failure);else he.resolve(Ie??{})},(Te)=>he.reject(Te))},z=()=>{if(P=!0,M)Q(M,void 0,Error("hands_node_repl_state_lost"));else f.kill("SIGKILL")},C="";R?.setEncoding("utf8"),R?.on("data",(he)=>{if(M?.finishing||P)return;if(C+=he,C.length>Ki){z();return}while(!0){let Ie=C.indexOf(`
|
|
454
|
+
`);if(Ie===-1)return;let De=C.slice(0,Ie);C=C.slice(Ie+1);let Te=M;if(!Te){z();return}try{let be=JSON.parse(De);if(Te.action==="probe")Te.resolve(be);else{Q(Te,be);return}}catch{Q(Te,void 0,Error("invalid_hands_node_repl_child_response"));return}}});let re=(he)=>{let Ie=F.trim(),De=he??Error(Ie?`hands_node_repl_child_exited:${Ie}`:"hands_node_repl_child_exited");if(P=!0,M&&!M.finishing)Q(M,void 0,De)};f.once("error",re),f.once("close",()=>re()),f.stdin.on("error",re);let V=(he)=>new Promise((Ie,De)=>{if(v||P||f.exitCode!==null||f.signalCode!==null){De(Error(P?"hands_node_repl_state_lost":"hands_node_repl_stopped"));return}let Te=setTimeout(z,he.action==="probe"?1e4:Math.max(1,Math.min(e.evaluationTimeoutMs??Oo-1000,Oo-1000))),be={action:he.action,finishing:!1,resolve(Fe){if(M===be)M=void 0;clearTimeout(Te),Ie(Fe)},reject(Fe){if(M===be)M=void 0;clearTimeout(Te),De(Fe)}};M=be,f.stdin.write(`${JSON.stringify(he)}
|
|
455
|
+
`,(Fe)=>{if(!Fe)return;Q(be,void 0,Fe)})});try{if(!R){if(f.pid===void 0)await cn(g);throw w??Error("hands_node_repl_control_pipe_missing")}let he=await V({action:"probe"});if(he.ok!==!0||he.output!=="ARA_HANDS_REPL_READY")throw Error("hands_node_repl_probe_failed")}catch(he){v=!0,f.kill("SIGKILL");try{await cn(g)}finally{await l.cleanup()}throw he}let K=Promise.resolve(),_e=new Set;Ro(e.socketPath);let ve=Ol.createServer((he)=>{_e.add(he),he.once("close",()=>_e.delete(he)),he.setEncoding("utf8");let Ie="",De=!1,Te=!1;he.once("close",()=>{if(Te)z()}),he.on("error",()=>he.destroy()),he.on("data",(be)=>{if(De)return;if(Ie+=be,Ie.length>Ki){De=!0,Cn(he,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let Fe=Ie.indexOf(`
|
|
456
|
+
`);if(Fe===-1)return;De=!0;let qe=Ie.slice(0,Fe);K=K.then(async()=>{if(he.destroyed)return;try{let Be=JSON.parse(qe);if(Be.action!=="evaluate"||typeof Be.code!=="string")throw Error("Invalid REPL request");Te=!0;let le=await V({action:"evaluate",code:Be.code});if(Te=!1,le.ok!==!0||typeof le.output!=="string")throw Error(typeof le.error==="string"?le.error:"hands_node_repl_failed");Cn(he,{ok:!0,output:le.output})}catch(Be){Te=!1,Cn(he,{ok:!1,error:Be instanceof Error?Be.message:String(Be),stack:Be instanceof Error?Be.stack:void 0})}}).catch((Be)=>{Cn(he,{ok:!1,error:Be instanceof Error?Be.message:String(Be)})})})});try{await new Promise((he,Ie)=>{ve.once("error",Ie),ve.listen(e.socketPath,()=>{ve.off("error",Ie);try{vl(e.socketPath,384),he()}catch(De){ve.close(()=>Ie(De))}})})}catch(he){v=!0,f.kill("SIGKILL");try{await cn(g)}finally{await l.cleanup(),Ro(e.socketPath)}throw he}return{socketPath:e.socketPath,async stop(){if(v)return;v=!0;let he=new Promise((Ie)=>ve.close(()=>Ie()));for(let Ie of _e)Ie.destroy();await he,K.catch(()=>{return}),z();try{await cn(g)}finally{await l.cleanup(),Ro(e.socketPath)}}}}var xo=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var Vi="/workspace",qi="/var/lib/reason/sessions",Nl="/var/lib/reason/session-controls";function cr(e){let l=`${qi}/`;if(!e.startsWith(l))return null;let f=e.slice(l.length);if(!xo.test(f)||f!==f.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${Nl}/${f}/job.env`}function Hl(e){if(!xo.test(e))throw Error("personal_computer_invalid_identity");return e.toLowerCase()}function Dn(e){let l=Hl(e);return{runtimeRoot:`${qi}/${l}`,workspaceRoot:`${Vi}/sessions/${l}`,sharedRoot:Vi}}var Yi="/root/.ara/cloud-browser/repl.sock";function Ao(e){return e==="compute"}function Xi(e,l,f="linux"){if(e)Dn(e);if(f!=="linux")throw Error("cloud_browser_os_invalid");if(l!==void 0&&(!e||!/^[1-9][0-9]{0,18}$/.test(l)))throw Error("cloud_browser_generation_invalid");let g=e?`/var/lib/reason/browsers/${e.toLowerCase()}`:"/root/.ara/cloud-browser",w=e?`${g}/${l?`g${l}`:"current"}`:g,v=e?`/root/.b/${e.toLowerCase().replaceAll("-","")}`:g;return{temporarySessionDirectory:v,temporaryDirectory:e?`${v}/${l??"current"}`:`${w}/tmp`,directory:w,sessionDirectory:g,config:`${w}/config.json`,status:`${w}/status.json`,socket:`${w}/repl.sock`,bundle:`${w}/driver.mjs`,processName:e?`ara-browser-${e.toLowerCase()}${l?`-${l}`:""}`:"ara-cloud-browser"}}var Io="browser_egress",Zi=ks,Xl=45000,Zl=Mt+1500,it=/^[A-Za-z0-9._:-]{1,160}$/,Ql="/run/ara-hands";function eu(e,l,f=ea()){if(e==="darwin")return{temporaryRoot:f,prepareRoot:!1,sessionMode:448};return{temporaryRoot:l??Ql,prepareRoot:!0,sessionMode:457}}function me(e,l=process.platform,f=process.geteuid?.()){return e===!0&&l==="linux"&&f===0}function ge(e=G(),l=process.platform,f=process.geteuid?.()){return e&&l==="linux"&&f===0?{uid:e.uid,gid:e.gid,home:e.home,username:e.username}:null}function bt(e=ge(),l=ci){return e&&l()?vo:null}function ru(e,l){if(!l&&(e??"linux")==="linux")return Yi;return Xi(l,void 0,e??"linux").socket}function tu(e){return e[qr]===!0?"sandbox_loopback":"ara_device_wss"}function jt(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function ta(e){let l=e.toLowerCase().replace(/^\[|\]$/g,"");return l==="localhost"||l.endsWith(".localhost")||l==="::1"||l==="0:0:0:0:0:0:0:1"||l==="0.0.0.0"||l.startsWith("127.")}class lr extends r{expiryDiagnostic;constructor(e){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=e}}function nu(e){return jt(e)&&Object.keys(e).every((l)=>l==="source_path"||l==="branch")&&(e.source_path===void 0||Z(e.source_path))&&typeof e.branch==="string"&&ko.test(e.branch)}function ou(e,l,f){let g=l===void 0?Date.now():l,w=["relay_url","session_id","environment_id","expires_at","policy_mode","policy_version","hands_protocol_version","hands_worker_version","hands_worker_artifact_sha256","hands_worker_entrypoint","target_generation","target_fence_id"],v=new Set([...w,"workspace_id","legacy_workspace_id",Ee,xe,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",gr,qr,Io,Nt,Y,X,q]),P=jt(e)?e:null,F=P?.[Io],R=P?.[Nt],M=P?.[X],Q=F===void 0||(P?.[gr]===st||M===pe&&P?.[gr]===void 0)&&jt(F)&&Object.keys(F).every((he)=>he==="mode"||he==="allowed_domains")&&F.mode==="enforce"&&Array.isArray(F.allowed_domains)&&F.allowed_domains.length<=256&&F.allowed_domains.every((he)=>typeof he==="string"&&so(he));if(!jt(e)||w.some((he)=>!(he in e))||Object.keys(e).some((he)=>!v.has(he))||!Q||M!==void 0&&M!==pe||P?.[q]!==void 0&&P[q]!==Pe||P?.personal_workspace!==void 0&&(P.personal_workspace!==!0||P[gr]!==st)||P?.cloud_browser!==void 0&&(P.cloud_browser!==!0||P[gr]!==st)||P?.sandbox_provider!==void 0&&!Ao(P.sandbox_provider)||P?.sandbox_os!==void 0&&P.sandbox_os!=="linux"||R!==void 0&&(P?.[gr]!==Lt||!_i(R))||gr in e&&e[gr]!==st&&e[gr]!==Lt&&e[gr]!==$r||qr in e&&e[qr]!==!0||e.workspace_path!==void 0&&(!Z(e.workspace_path)||e[gr]!==$r)||e.workspace_worktree!==void 0&&(e.workspace_path===void 0||!nu(e.workspace_worktree))||typeof e.relay_url!=="string"||typeof e.session_id!=="string"||!it.test(e.session_id)||e.workspace_id!==void 0&&(typeof e.workspace_id!=="string"||!it.test(e.workspace_id))||e.legacy_workspace_id!==void 0&&(typeof e.legacy_workspace_id!=="string"||!it.test(e.legacy_workspace_id))||e[Ee]!==void 0&&(e[Ee]!==ue||(gr in e))||e[xe]!==void 0&&(e[xe]!==J||(gr in e))||e[Y]!==void 0&&(typeof e[Y]!=="string"||!it.test(e[Y]))||typeof e.environment_id!=="string"||!it.test(e.environment_id)||typeof e.expires_at!=="string"||e.policy_mode!=="full_access"||e.policy_version!==1||e.hands_protocol_version!==k||e.hands_worker_version!==D||e.hands_worker_artifact_sha256!==S||!Mi(e.hands_worker_entrypoint)||!U(e.target_generation)||!N(e.target_fence_id))throw new r("invalid_hands_payload","Reason Hands connection payload is invalid.");let z;try{z=new URL(e.relay_url)}catch{throw new r("invalid_hands_relay","Reason Hands relay URL is invalid.")}let C=e[qr]===!0,re=ta(z.hostname);if((C?z.protocol!=="ws:"||!re:re?z.protocol!=="ws:":z.protocol!=="wss:")||z.username||z.password||z.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(z.pathname))throw new r("invalid_hands_relay","Reason Hands relay URL is not allowed.");let V=Date.parse(e.expires_at),K=Number.isNaN(V)?"parse":new Date(V).toISOString()!==e.expires_at?"noncanonical":V<=g?"expired":V-g>Zi?"over_cap":"accepted",_e={version:1,outcome:K,clock_source:l===void 0?"date_now":"injected",validation_now_ms:Ot(g),expiry_ms:Ot(V),remaining_ms:Number.isSafeInteger(V-g)?V-g:null,maximum_lifetime_ms:Zi,cli_artifact:ji()};if(K!=="accepted")throw new lr(_e);try{f?.(_e)}catch{}let ve=e.environment_binding===void 0?void 0:eo.safeParse(e.environment_binding);if(ve&&!ve.success)throw new r("invalid_hands_request","Reason Hands environment binding is invalid.");return{...e.cloud_browser===!0?{cloud_browser:!0}:{},...Ao(e.sandbox_provider)?{sandbox_provider:e.sandbox_provider}:{},...e.sandbox_os==="linux"?{sandbox_os:e.sandbox_os}:{},...e.personal_workspace===!0?{personal_workspace:!0}:{},relay_url:z.toString(),...ve?.success?{environment_binding:ve.data}:{},session_id:e.session_id,...e.workspace_id===void 0?{}:{workspace_id:e.workspace_id},...e.legacy_workspace_id===void 0?{}:{legacy_workspace_id:e.legacy_workspace_id},...e[Ee]===ue?{[Ee]:ue}:{},...e[xe]===J?{[xe]:J}:{},...typeof e[Y]==="string"?{[Y]:e[Y]}:{},...e[X]===pe?{[X]:pe}:{},...e[q]===Pe?{[q]:Pe}:{},...typeof e.workspace_path==="string"?{workspace_path:e.workspace_path}:{},...jt(e.workspace_worktree)?{workspace_worktree:{...typeof e.workspace_worktree.source_path==="string"?{source_path:e.workspace_worktree.source_path}:{},branch:String(e.workspace_worktree.branch)}}:{},environment_id:e.environment_id,expires_at:e.expires_at,policy_mode:"full_access",policy_version:1,hands_protocol_version:k,hands_worker_version:D,hands_worker_artifact_sha256:S,hands_worker_entrypoint:O,target_generation:e.target_generation,target_fence_id:e.target_fence_id,...gr in e?{[gr]:e[gr]}:{},...C?{[qr]:!0}:{},...R===void 0?{}:{[Nt]:R},...F===void 0?{}:{[Io]:{mode:"enforce",allowed_domains:[...new Set(F.allowed_domains)].sort()}}}}function su(){let e=new Map;return{acquire(l,f){if(e.has(l))return null;let g=[...e.values()],w=(P)=>f.group!==void 0&&P.group===f.group;if(f.exclusive?!g.every(w):g.some((P)=>P.exclusive))return null;if(f.limit!==void 0&&!g.some(w)&&new Set(g.map((P,F)=>P.group??F)).size>=f.limit)return null;e.set(l,f);let v=!1;return()=>{if(v)return;v=!0,e.delete(l)}},activeOwners:()=>[...e.keys()]}}var iu=su();function au(e,l){Ft(e,{recursive:!0,mode:448});let f=yr(e),g=()=>new r("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let P of l.split("/")){let F=Sr(f,P);try{let M=Er(F);if(M.isSymbolicLink()||!M.isDirectory())throw g()}catch(M){if(!(M&&typeof M==="object"&&("code"in M)&&M.code==="ENOENT"))throw M;try{Ft(F,{mode:448})}catch(Q){if(!(Q&&typeof Q==="object"&&("code"in Q)&&Q.code==="EEXIST"))throw Q}}let R=Er(F);if(R.isSymbolicLink()||!R.isDirectory()||yr(F)!==F)throw g();f=F}if(process.platform==="win32"){let P=Er(f);if(P.isSymbolicLink()||!P.isDirectory()||yr(f)!==f||!Zr(yr(e),f))throw g();return f}let w=Er(f),v=$l(f,Wt.O_RDONLY|Wt.O_DIRECTORY|Wt.O_NOFOLLOW);try{let P=Ul(v);if(!P.isDirectory()||P.dev!==w.dev||P.ino!==w.ino||yr(f)!==f)throw g();zl(v,448)}finally{Fl(v)}return f}function cu(e,l=po(),f,g,w){if(!it.test(e)||f!==void 0&&!it.test(f))throw new r("invalid_hands_workspace","Reason Hands run identity is invalid.");let v=Lr(T({kind:"managed",workspaceId:e,...g?{base:g}:{},...w?{layout:w}:{}})),P=au(l,Lr(v)),F=Sr(P,ql(v)),R=!1;try{let C=Er(F);if(R=!0,C.isSymbolicLink())throw new r("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!C.isDirectory())throw new r("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(C){if(C instanceof r||!(C&&typeof C==="object"&&("code"in C)&&C.code==="ENOENT"))throw C}if(w&&!R)try{let C=Sr(yr(l),Lr(T({kind:"managed",workspaceId:e,...g?{base:g}:{}}))),re=Er(C);if(!re.isSymbolicLink()&&re.isDirectory()&&yr(C)===C)Ln(C,F),R=!0}catch{}if(f&&f!==e){let C=Sr(P,f);try{let re=Er(C);if(re.isSymbolicLink()||!re.isDirectory())throw new r("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let V=yr(C);if(Lr(V)!==P)throw new r("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let K=null;if(R){K=Sr(P,`.${e}.previous`);try{throw Er(K),new r("invalid_hands_workspace","Reason Hands previous workspace backup already exists.")}catch(_e){if(_e instanceof r||!(_e&&typeof _e==="object"&&("code"in _e)&&_e.code==="ENOENT"))throw _e}Ln(F,K)}try{Ln(V,F)}catch(_e){if(K)Ln(K,F);throw _e}R=!0}catch(re){if(re instanceof r||!(re&&typeof re==="object"&&("code"in re)&&re.code==="ENOENT"))throw re}}Ft(F,{recursive:!0,mode:448}),dn(F,448);let M=yr(F);if(Lr(M)!==P)throw new r("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let Q=Sr(M,"repo");try{let C=Er(Q);if(C.isSymbolicLink()||!C.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(C){if(C instanceof r||!(C&&typeof C==="object"&&("code"in C)&&C.code==="ENOENT"))throw C}Ft(Q,{recursive:!0,mode:448}),dn(Q,448);let z=yr(Q);if(Lr(z)!==M)throw new r("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:M,repoPath:z}}function ur(e){let l=null;try{l=Er(e)}catch{}if(!l||l.isSymbolicLink()||!l.isDirectory()||l.uid!==0||l.gid!==0||(l.mode&4095)!==493)throw new r("cloud_workspace_root_invalid","This cloud Session's workspace root is not root's 0755 directory, so Reason Hands cannot use it.")}function du(e,l,f=process.geteuid?.(),g=process.platform){if(g==="win32")return"unknown";let w;try{if(w=ht(e),!w.isDirectory())return"unready";Wl(e,Wt.R_OK|Wt.W_OK|Wt.X_OK)}catch{return"unready"}try{if(Er(e).isSymbolicLink()||yr(e)!==e)return"unknown"}catch{return"unknown"}if(f!==0)return"checked";if(l===null||w.uid!==l.uid||(w.mode&448)!==448)return"unknown";for(let v=Lr(e);;v=Lr(v)){let P;try{P=ht(v)}catch{return"unknown"}if(!(P.uid===l.uid?(P.mode&64)!==0:P.gid===l.gid?(P.mode&8)!==0:(P.mode&1)!==0))return"unknown";if(v===Lr(v))return"checked"}}function lu(e,l){let f="/";for(let g of["",...e.split("/"),...l.split("/")].filter((w,v)=>v===0||w)){if(g)f=Sr(f,g);let w;try{w=Er(f)}catch{return null}if(w.uid!==0)return w.uid;if((w.mode&2)!==0&&(w.mode&512)===0&&!w.isSymbolicLink())return-1;if(w.isSymbolicLink()||!w.isDirectory())return null}return null}function uu(e,l,f,g=process.geteuid?.(),w){if(!it.test(l))return null;let v,P;try{v=yr(e),P=Lr(T({kind:"managed",workspaceId:l,...f?{base:f}:{},...w?{layout:w}:{}}))}catch{return null}let F=Sr(v,P),R=Wr(F)!==null,M=(V)=>new r("cloud_workspace_root_invalid",V),Q;if(g===0){let V=lu(v,P);if(V===null)return null;if(!R)throw new r("invalid_hands_workspace","As root, Reason Hands never prepares a workspace in folders another user owns.");Q=V}else{if(!R)return null;let V,K;try{V=Er(Lr(F)),K=Er(F)}catch{return null}if(V.isSymbolicLink()||!V.isDirectory()||V.uid===0||K.uid!==0)return null;Q=V.uid}let z=v;for(let V of P.split("/")){let K=Sr(z,V),_e=!1;try{let ve=Er(K);_e=!ve.isSymbolicLink()&&ve.isDirectory()&&yr(K)===K}catch{}if(!_e)throw M("This cloud Session's workspace root is missing or is not a real directory.");z=K}ur(F);let C;try{C=dr(F)}catch(V){if(V instanceof r)throw V;throw M("This cloud Session's workspace root changed while Reason Hands checked it.")}let re=null;try{re=ht(C.repoPath).uid}catch{}if(re!==Q)throw new r("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return C}function dr(e,l=!1){let f=yr(e),g=Sr(f,"repo"),w;try{w=Er(g)}catch{throw new r("invalid_hands_workspace","Reason Hands repository is missing from the granted root.")}if(l){if(!/^\/var\/lib\/reason\/sessions\/[0-9a-f-]{36}$/.test(f))throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");if(Dn(f.slice(f.lastIndexOf("/")+1)).runtimeRoot!==f)throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");let F=yr("/workspace"),R=yr(g);if(F!=="/workspace"||!ht(R).isDirectory()||!R.startsWith("/workspace/"))throw new r("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:f,repoPath:R}}let v=di(f);if(v&&w.isSymbolicLink()){let F=yr(g);if(F!==yr(v)||!ht(F).isDirectory())throw new r("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:f,repoPath:F}}if(w.isSymbolicLink()||!w.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let P=yr(g);if(Lr(P)!==f)throw new r("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:f,repoPath:P}}function Co(e,l,f){if(l!==void 0&&!Z(l))throw new r("invalid_hands_workspace",`Reason Hands ${f} is invalid.`);let g=ra(e,l??".");if(!Zr(e,g))throw new r("invalid_hands_workspace",`Reason Hands ${f} escapes its granted root.`);return g}function na(e,l,f){if(We(l)){let g=yr(f);return{anchor:g,target:ra(g,l),boundary:Sr(g,de)}}return{anchor:e,target:Co(e,l,"folder"),boundary:e}}function fu(e,l){if(!Zr(e,l))throw new r("invalid_hands_workspace","Reason Hands folder escapes its granted root.");let f=e;for(let g of l.slice(e.length).split(Yl).filter(Boolean)){f=Sr(f,g);let w=null;try{w=Er(f)}catch(v){if(v.code!=="ENOENT")throw v}if(!w)Ft(f,{mode:448});else if(w.isSymbolicLink()||!w.isDirectory())throw new r("invalid_hands_workspace","Reason Hands folder must be made of real directories.")}}function oa(e,l){let f=yr(Co(e,l.source_path,"repository"));if(!Zr(e,f)||!ht(f).isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a folder in its granted root.");return f}async function pu(e,l,f,g=a()){try{let w=yr(e);if(To(na(w,l,g).target))return;return await wi(oa(w,f))??void 0}catch{return}}function _u(e,l,f,g,w=mu,v=a()){let P=yr(e),{target:F,boundary:R,anchor:M}=na(P,l,v);if(f&&!To(F)){let C=oa(P,f);fu(M,Lr(F));let re=["-c","core.hooksPath=/dev/null","-C",C];if(g)w([...re,"update-ref","--create-reflog","-m",g.note,`refs/heads/${f.branch}`,g.commit,""]);let V=g?w([...re,"worktree","add",F,f.branch]):w([...re,"worktree","add","-b",f.branch,F]);if(!g&&V.status!==0&&/already exists/.test(V.stderr)&&!To(F))V=w([...re,"worktree","add",F,f.branch]);if(V.status!==0)throw new r(/not a git repository/i.test(V.stderr)?"workspace_not_git_repository":"workspace_worktree_failed","Reason could not create this Session's git worktree.")}let Q;try{Q=Er(F)}catch{throw new r("workspace_folder_missing","This Session's folder no longer exists.")}let z=yr(F);if(Q.isSymbolicLink()&&!Zr(R,z))throw new r("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!ht(z).isDirectory()||!Zr(R,z))throw new r("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(E(z))throw new r("protected_path","Credential and secret folders are unavailable to Sessions.");return z}function mu(e){let l=wo();if(!l)return{status:null,stderr:"git was not found. Install Git for Windows (https://git-scm.com/download/win)."};let f=jl(l,e,{encoding:"utf8",timeout:60000,env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:["ignore","ignore","pipe"]});return{status:f.status,stderr:f.stderr??""}}function sa(e){return cr(e)??Wr(e)?.jobEnv??Sr(e,"job.env")}function hu(e,l){let f=sa(e),g=Er(f);if(g.isSymbolicLink()||!g.isFile())throw new r("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");Kl(f,l),dn(l,384)}function gu(e){if(e.workspaceMode===$r&&e.workspacePath!==void 0){let P=e.home??a(),F=_u(e.grantedRoot,e.workspacePath,e.workspaceWorktree,e.workspaceWorktreeStart,void 0,P);if(e.workspaceWorktree&&e.deviceId)vi(P,e.workspacePath,e.deviceId);return{workRoot:F,repoPath:F,workspace:{kind:"root",path:e.workspacePath},jobEnvPath:Sr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if(e.workspaceMode===st)return{...dr(e.grantedRoot,e.personalWorkspace),workspace:{kind:"root"},jobEnvPath:Sr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if(e.workspaceMode===Lt||e.workspaceMode===$r){let P=Er(e.grantedRoot);if(P.isSymbolicLink()||!P.isDirectory())throw new r("invalid_hands_workspace","Reason Hands root must be a real directory.");let F=yr(e.grantedRoot);return{workRoot:F,repoPath:F,workspace:{kind:"root"},jobEnvPath:Sr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}let l=e.workspaceId??e.runId,f={kind:"managed",workspaceId:l,...e.workspaceBase?{base:e.workspaceBase}:{},...e.workspaceLayout?{layout:e.workspaceLayout}:{}},g=ne(e.grantedRoot,f,e.home).anchor,w=uu(g,l,e.workspaceBase,void 0,e.workspaceLayout);if(w)return{...w,workspace:f,jobEnvPath:Sr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1,cloudSessionRoot:!0};let v=cu(l,g,e.legacyWorkspaceId,e.workspaceBase,e.workspaceLayout);return{...v,workspace:f,jobEnvPath:Sr(e.temporaryDirectory,"job.env"),workspacePoolPath:Lr(v.workRoot),managedWorkspace:!0}}function sn(e){let{command:l,prefix:f}=ro(e.executablePath,e.sourceEntrypoint),g=Me({home:Vl(),temporaryDirectory:e.temporaryDirectory,path:e.path});if(g.REASON_DEVICE_ROOT=g.ARA_DEVICE_ROOT=e.grantedRoot,g.REASON_HANDS_WORKSPACE=g.ARA_HANDS_WORKSPACE=e.workRoot,g.REASON_HANDS_REPO=g.ARA_HANDS_REPO=e.root,e.workspacePoolPath)g.REASON_HANDS_WORKSPACE_POOL=g.ARA_HANDS_WORKSPACE_POOL=e.workspacePoolPath;return{command:l,args:[...f,"__device","__hands-worker","--config",e.configPath],options:{cwd:e.root,env:g,shell:!1,stdio:[an,"ignore","pipe"]}}}var an=process.platform==="win32"?"pipe":"ignore";function Ze(e,l){if(process.platform!=="win32")return e.kill(l);if(l==="SIGTERM")e.stdin?.end();else if(e.pid)Oe(e.pid);return!0}function bu(e,l){let f="",g=!1,w=Date.now(),v=0,P=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled","permission_denied"].map((z)=>`hands.worker.${z}`)),F=new Set([null,"open_not_received","current_connection","obsolete_connection","request_aborted","request_timeout","client_closed","driver_stopped","driver_handoff","run_cancelled","run_finished","other","frame_too_large","invalid_json","invalid_claim","executor_mismatch","stale_generation","fence_conflict","SIGTERM","SIGINT","SIGHUP","expired","cleanup_complete","cleanup_failed","cancelled","settled","unsupported","unconfirmed",...["sandbox_policy","os_permission_unknown"].flatMap((z)=>["bash","read","write","edit"].map((C)=>`${z}:${C}`))]),R=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],M=["peerGeneration","socketState","closeCode"],Q=new Set(["event","reason","launchId",...R,...M]);return(z)=>{for(let C of z.toString().split(/(?<=\n)/)){let re=C.endsWith(`
|
|
457
|
+
`);if(!g&&f.length+C.length<=2048)f+=C;else g=!0;if(!re)continue;let V=f;if(f="",g){g=!1;continue}try{let K=JSON.parse(V);if(!K||typeof K!=="object"||Array.isArray(K)||Object.keys(K).some((_e)=>!Q.has(_e))||!P.has(K.event)||!F.has(K.reason)||K.event==="hands.worker.permission_denied"!==(typeof K.reason==="string"&&K.reason.includes(":"))||K.launchId!==e||R.some((_e)=>!Number.isSafeInteger(K[_e])||K[_e]<0)||M.some((_e)=>K[_e]!==null&&(!Number.isSafeInteger(K[_e])||K[_e]<0)))continue;if(Date.now()-w>=60000)w=Date.now(),v=0;if(v>=122)continue;v+=1,l(K)}catch{}}}}async function wu(e){let l=e.now()+e.timeoutMs;while(e.now()<l){if(e.signal.aborted)throw new r("cancelled","Reason Hands start was cancelled.");if(e.spawnFailed?.()||e.child.exitCode!==null||e.child.signalCode!==null)throw new r("hands_worker_exited","Reason Hands exited before ready.");let f=Tn(e.path,{pid:e.child.pid??-1,launchId:e.launchId,workerVersion:D,protocolVersion:k,workerArtifactSha256:S,workerEntrypoint:O});if(f?.targetGeneration===e.targetGeneration&&f.fenceId===e.fenceId)return f;await new Promise((g)=>setTimeout(g,10))}throw new r("hands_ready_timeout","Reason Hands did not become ready.")}async function yu(e,l){let f=()=>e.exitCode===0&&e.signalCode===null;if(e.exitCode!==null||e.signalCode!==null)return f()?"stopped":"already_exited";let g=new Promise((P)=>e.once("exit",()=>P()));try{if(!Ze(e,"SIGTERM"))return f()?"stopped":"unobserved"}catch{return f()?"stopped":"unobserved"}if(await Qi(g,l))return f()?"stopped":"unobserved";try{Ze(e,"SIGKILL")}catch{}return await Qi(g,l)?"forced":"unobserved"}async function Qi(e,l){let f;try{return await Promise.race([e.then(()=>!0),new Promise((g)=>{f=setTimeout(()=>g(!1),l)})])}finally{clearTimeout(f)}}function vu(e){return new Promise((l)=>{let f=!1,g=(F)=>{if(f)return;f=!0,clearTimeout(P),e.signal.removeEventListener("abort",w),e.child.off("exit",v),l(F)},w=()=>g("cancelled"),v=()=>g("exited"),P=setTimeout(()=>g("expired"),Math.max(0,e.expiresAt-e.now()));if(e.signal.addEventListener("abort",w,{once:!0}),e.child.once("exit",v),e.signal.aborted)w();else if(e.child.exitCode!==null||e.child.signalCode!==null)v()})}var ku=$i();function Su(e,l){if(!(e instanceof Error)||e instanceof r)return!1;let f=["hands_browser_driver_missing","hands_browser_driver_version_mismatch","hands_browser_executable_missing","hands_browser_unsupported_platform","hands_browser_unavailable"].includes(e.message),g=["ENOENT","EACCES","EPERM"].includes(e.code??"");if(!f&&!g)return!1;try{return Er(l),!1}catch(w){return jt(w)&&w.code==="ENOENT"}}function Eu(e){return e.sandbox_provider==="compute"&&!e.cloud_browser&&!e[qr]&&e[gr]===st}function Ru(e,l,f){return e===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:jr(e,l),...f===void 0?{}:{worker_prespawned:f}}}}async function vt(e,l={}){let f=l.logDiagnostic??((le)=>console.warn(le)),g=new Map,w=(le)=>{let fe=Date.now();g.set(le,fe);try{f(JSON.stringify({event:"sandbox.hands_startup",stage:le,timestampMs:fe}))}catch{}};w("entered");let v=e.claimEnvironment;e.claimEnvironment=void 0;let P=l.now??Date.now,F,R=ou(e.payload,l.now?.(),(le)=>{F=le});if(e.managedPty&&(e.managedPty.version!==1||!e.headless||!e.runtimeDirectory||![void 0,!0].includes(e.managedPty.startupVerified)||!e.deviceIdentity||!e.claimOwner||e.claimOwner.device_id!==e.deviceIdentity.deviceId||!R.environment_binding||!["darwin","linux","win32"].includes(process.platform)))throw new r("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let M=async(le)=>{let fe;try{await Promise.race([le,new Promise((Se,ze)=>{fe=setTimeout(()=>ze(new r("hands_event_delivery_unavailable","Hands event delivery did not settle within its deadline.")),Math.max(1,Math.min(l.eventDeliveryTimeoutMs??5000,5000)))})])}finally{clearTimeout(fe)}},Q=async(le,fe)=>M(e.emitEvent(le,fe));if(e.headless&&(R.cloud_browser===!0||e.managedBrowser!==void 0||R[qr]!==void 0||R[Nt]!==void 0||R[gr]!==void 0&&R[gr]!==$r))throw new r("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let z=ge(),C=R[q]===void 0?null:bt(z);if(R[q]!==void 0&&(C===null||!e.headless||!me(e.hostExecution,l.hostIdentity?.platform,l.hostIdentity?.euid)))throw new r("hands_model_jobs_egress_unavailable","This worker cannot hold its jobs to the guest egress guard; the Hands did not start.");if(R[X]!==void 0&&!(e.headless&&me(e.hostExecution,l.hostIdentity?.platform,l.hostIdentity?.euid)))throw new r("hands_confinement_unavailable","Confined Hands need a root Linux worker in host mode.");if(R.cloud_browser&&process.platform!=="linux")throw new r("cloud_browser_target_invalid","Cloud browser is available only on a cloud machine.");let re=`${e.operationId}:${e.attemptId}`,V=R[gr]===Lt,K=e.headless||process.platform==="darwin"&&e.managedBrowser===void 0&&!R.cloud_browser&&!R.browser_egress&&!R[qr]&&(R[gr]===void 0||R[gr]===$r)||Eu(R),_e=V?R[Nt]??"bash":null,ve=_e?fi(_e):null;if(ve)throw new r(ve,"Persistent Node REPL execution is unavailable; this benchmark profile cannot start.");let he=R[gr],Ie=e.headless===!0&&e.ownComputer!==!0?e.handsSlots??1:void 0,De=(l.slot??iu).acquire(re,{exclusive:Ie===1||he!==void 0&&he!==$r,...Ie!==void 0&&Ie>1?{limit:Ie}:{},...e.headless===!0&&R[Y]!==void 0?{group:R[Y]}:{}});if(!De)throw new r("hands_slot_busy",Ie!==void 0&&Ie>1?`This Reason worker runs at most ${Ie} sessions at a time.`:"This Reason Device runs one session at a time.");let Te=e.headless===!0?gi(e.runId):null,be=null,Fe=null,qe,Be;try{w("browser_resolution");let le=e.headless&&l.browserExecutablePath===void 0?await en():null,fe=V||R.cloud_browser?null:l.browserExecutablePath===void 0?e.headless?le?.status==="resolved"?le.executablePath:null:await si(void 0,process.platform,e.managedBrowser):l.browserExecutablePath;if(!V&&!R.cloud_browser&&!K&&!fe)throw new r("hands_browser_unavailable","Reason Hands requires Chrome, Edge, Brave, Chromium, or a Playwright Chromium install.");w("path_resolution");let Se;try{Se=await(l.resolvePathEnvironment??ku)()}catch{Se={path:ln(),source:"fallback"}}if(w("workspace_setup"),process.platform==="darwin"){let wr=R[gr]===$r&&R.workspace_path!==void 0?Co(e.root,R.workspace_worktree?R.workspace_worktree.source_path:R.workspace_path,"folder"):null;for(let Ar of new Set([e.root,...wr?[wr]:[]]))await Ls(Ar)}let Ke=R[gr]===st||R[gr]===Lt?eu(process.platform,l.sandboxRuntimeRoot):null,Ve=e.headless&&e.runtimeDirectory?e.runtimeDirectory:Ke?Ke.temporaryRoot:ea();if(be="private_runtime",e.headless&&e.runtimeDirectory){b(Ve);let wr=yr(e.root);if(!Ne(wr,Ve))throw new r("invalid_hands_workspace","Private worker state must not overlap the granted workspace.")}if(e.headless&&e.runtimeDirectory&&(!e.deviceIdentity||!R.environment_binding))throw new r("environment_unavailable","Headless Hands requires a server-bound private environment.");if(be="runtime_root",Ke?.prepareRoot)Ft(Ve,{recursive:!0,mode:457}),dn(Ve,457);be="temporary_directory";let Ae=yr(Gl(Sr(Ve,"reason-hands-session-")));Fe=Ae,dn(Ae,Ke?.sessionMode??448);let Ye=Sr(Ae,"hands-config.json"),_r=Sr(Ae,"hands-ready.json"),br=Bl(),Pr=R.target_fence_id;if(e.workspaceGrant){be="workspace_grant",w("workspace_grant_wait");let wr=e.workspaceGrant;await new Promise((Ar,lt)=>{let kt=()=>lt(new r("cancelled","Reason Hands was cancelled."));if(e.signal.aborted){kt();return}e.signal.addEventListener("abort",kt,{once:!0}),wr.then(Ar,lt).finally(()=>e.signal.removeEventListener("abort",kt))})}be="granted_root";let $e=yr(e.root);be="workspace_layout";let Qe=R[gr]===$r&&R.workspace_path!==void 0&&R.workspace_worktree?await pu($e,R.workspace_path,R.workspace_worktree):void 0,{workRoot:hr,repoPath:vr,jobEnvPath:Hr,workspacePoolPath:Kr,managedWorkspace:Fr,workspace:zr,cloudSessionRoot:at}=gu({grantedRoot:$e,personalWorkspace:R.personal_workspace===!0,runId:e.runId,workspaceId:R.workspace_id,legacyWorkspaceId:R.legacy_workspace_id,workspaceBase:R[Ee],workspaceLayout:R[xe],temporaryDirectory:Ae,workspaceMode:R[gr],applicationSupportPath:l.applicationSupportPath,...R.workspace_path===void 0?{}:{workspacePath:R.workspace_path},...R.workspace_worktree?{workspaceWorktree:R.workspace_worktree}:{},...Qe?{workspaceWorktreeStart:Qe}:{},...e.deviceIdentity?{deviceId:e.deviceIdentity.deviceId}:{}}),Yr=tu(R);be="jobs";let xr=e.headless&&e.runtimeDirectory?rr({runtimeDirectory:e.runtimeDirectory,root:$e,runId:e.runId}):void 0;qe=xr?.disposeSocket;let Gr=xr?gs(xr):null;if(Gr)try{f(JSON.stringify({event:"hands.journal_owner_retired",run_id:e.runId,reason:Gr.reason,prior_executor_launch_id:Gr.executorLaunchId}))}catch{}if(xr&&[hr,vr].some((wr)=>!Ne(wr,xr.journalDirectory)))throw new r("invalid_hands_workspace","A Session can't work in the folder that holds this worker's settings; start it in a project or repository inside it.");let gt=R.personal_workspace?hr.slice(hr.lastIndexOf("/")+1):void 0;if(gt&>!==R.workspace_id)throw new r("invalid_hands_workspace","Personal session identity does not match its Device grant.");be="browser_socket";let Ur=R.cloud_browser?ru(R.sandbox_os,gt):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${br}`:Sr(xr?xr.launchDirectory:Ae,"repl.sock");be="relay_url";let Vr=ta(new URL(R.relay_url).hostname),ct=Yr==="ara_device_wss"&&!Vr?(l.loadProxy??j)()?.url:void 0,Nr;be="environment_owner";let Dr=e.headless&&e.deviceIdentity&&R.environment_binding?Li(Ae,{runId:e.runId,...e.deviceIdentity,binding:R.environment_binding,expiresAtMs:Date.parse(R.expires_at),identity:()=>Nr?.()??null}):void 0;be="job_environment";let Ut=!Dr&&zr.kind==="managed"&&Fr?Sr(hr,"job.env"):null;if(Ut)try{Nn(Ut,"",{mode:384,flag:"wx"})}catch(wr){if(!(wr instanceof Error&&("code"in wr)&&wr.code==="EEXIST"))throw wr}let Hn={url:R.relay_url,transport:Yr,...ct===void 0?{}:{proxyUrl:ct},...e.localGithubConfinement?{localGithubConfinement:!0}:{},...R[X]&&Dr?{gitCredentialEnvironment:!0}:{},workerVersion:D,protocolVersion:k,workerArtifactSha256:S,workerEntrypoint:O,...process.platform==="win32"?{bashExecutable:se()}:{},targetGeneration:R.target_generation,fenceId:Pr,workRoot:hr,workspaceAliasPath:hr,jobEnvPath:Hr,...Dr?{environmentSnapshotPath:Dr.path,...e.hostExecution?{executionEnvironment:or()}:{},environmentExpectedBinding:{runId:e.runId,...e.deviceIdentity,binding:R.environment_binding}}:Ut?{jobEnvSourcePath:Ut,workspacePoolPath:Lr(hr)}:Fr?{}:{jobEnvSourcePath:sa(hr)},repoPath:vr,replSocketPath:Ur,...R.cloud_browser?{browserRunId:e.runId}:{},readyPath:_r,launchId:br,expiresAtMs:Date.parse(R.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...xr?{managedJobs:{journalDirectory:xr.journalDirectory,scopeId:xr.scopeId},jobControlSocketPath:xr.socketPath}:{},...xr&&z?{jobsUser:{...z,...C!==null?{modelGid:C}:{}}}:{},...e.managedPty&&xr&&Dr?{managedPty:{version:1,...e.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:sr()}:{}}}:{},...K&&!fe?{allowedTools:["bash","read","write","edit"]}:V?{allowedTools:_e==="bash"?["bash"]:["bash","repl"]}:{}};if(Dr||Fr&&!Ut)Nn(Hr,"",{mode:384});else hu(hr,Hr);be="config_write",Nn(Ye,JSON.stringify(Hn),{mode:384}),be=null;let dt={session_id:R.session_id,environment_id:R.environment_id,hands_protocol_version:k,hands_worker_version:D,hands_worker_artifact_sha256:S,hands_worker_entrypoint:O,target_generation:R.target_generation,target_fence_id:R.target_fence_id,executor_launch_id:br},fn=null,Do=!1,Lo=!1,No,Cr=null,Ho,Bo,pn="failed",Mo=null,Bn=Promise.resolve(),jo=null,Mn=async(wr,Ar)=>{try{await Q(wr,Ar)}catch{}};try{w("event_started");let wr,Ar=(async()=>{await e.emitEvent("hands.started",{...dt,policy_mode:"full_access",policy_version:1,path_source:Se.source}),wr=Date.now()})();Ar.catch(()=>{return}),w("worker_setup");let lt=R.browser_egress?{mode:"enforce",allowedDomains:R.browser_egress.allowed_domains}:{mode:"off"};if(_e&&_e!=="bash")fn=await(l.startNodeRepl??Gi)({socketPath:Ur,workRoot:hr});else if(!V&&!R.cloud_browser&&fe)fn=await(l.startRepl??ii)({socketPath:Ur,browserExecutablePath:fe,workspaceRoot:vr,...e.managedBrowser?{managedBrowser:e.managedBrowser}:{},...e.desktopRecording?{recording:e.desktopRecording}:{},networkPolicy:lt,onEgressDenied:(Ge)=>{let Mr=li(Ge.host);f(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:Mr,reason:Ge.reason,run_id:e.runId})),Bn=Bn.then(()=>Q("hands.browser_egress_denied",{destination_id:Mr,reason:Ge.reason})).catch((mn)=>{jo??=mn})}}).catch((Ge)=>{if(!K||e.signal.aborted||P()>=Date.parse(R.expires_at)||!Su(Ge,Ur))throw Ge;return Object.assign(Hn,{allowedTools:["bash","read","write","edit"]}),Nn(Ye,JSON.stringify(Hn),{mode:384}),Lo=!0,null});let kt=sn({configPath:Ye,root:vr,grantedRoot:$e,workRoot:hr,workspacePoolPath:Kr,temporaryDirectory:Ae,path:Se.path,executablePath:l.executablePath,sourceEntrypoint:l.sourceEntrypoint}),jn=Date.now(),Wn,Wo,Fn=l.takePrespawnedWorker?.(kt)??null;if(No=l.takePrespawnedWorker?Fn!==null:void 0,Cr=Fn??(l.spawnWorker??((Ge)=>Ml(Ge.command,Ge.args,Ge.options)))(kt),!Fn)l.adoptSpawnedWorker?.(Cr);Cr.stderr?.on("data",bu(br,(Ge)=>{if(Ge.event==="hands.worker.connecting")Wn??=Ge.timestampMs;else if(Ge.event==="hands.worker.open")Wo??=Ge.timestampMs;if(f(JSON.stringify({...Ge,run_id:e.runId})),Ge.event==="hands.worker.permission_denied"&&typeof Ge.reason==="string"){let[Mr,mn]=Ge.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(Mr??"")&&["bash","read","write","edit"].includes(mn??""))Q("permission.denied",{provenance:Mr,operation:mn}).catch(()=>{return})}}));let Fo=!1;Cr.on("error",()=>{Fo=!0}),Cr.once("exit",(Ge,Mr)=>{try{f(JSON.stringify({event:"hands.worker.exited",run_id:e.runId,launchId:br,exit_code:Ge,exit_signal:Mr}))}catch{}}),Be=Cr,w("worker_ready_wait");let $t=await wu({path:_r,launchId:br,fenceId:Pr,targetGeneration:R.target_generation,child:Cr,spawnFailed:()=>Fo,signal:e.signal,timeoutMs:l.readyTimeoutMs??Xl,now:P}),ia=Date.now();if(Nr=()=>{if(!Cr||Cr.exitCode!==null||Cr.signalCode!==null)return null;let Ge=Tn(_r,$t);return Ge?{generation:Ge.targetGeneration,fenceId:Ge.fenceId}:null},xr){let Ge={root:$e,runId:e.runId,operationId:e.operationId,scopeId:xr.scopeId,socketPath:xr.socketPath,generation:$t.targetGeneration,fenceId:$t.fenceId,executorLaunchId:br,expiresAtMs:Date.parse(R.expires_at),readIdentity:Nr,workspace:zr,localGithubConfinement:e.localGithubConfinement===!0};if(Dr)Ge.environment=Dr;if(e.claimOwner&&e.deviceIdentity&&e.claimOwner.device_id===e.deviceIdentity.deviceId){let Mr=[e.deviceIdentity.apiOrigin,R.relay_url];if(ct)Mr.push(ct);Ge.previewAuthority={owner:Object.freeze({...e.claimOwner}),rootId:e.deviceIdentity.rootId,relayOrigin:new URL(R.relay_url).origin,deniedPorts:tr(Mr)}}Bo=bs(Ge)}if(await new Promise((Ge)=>{setImmediate(Ge)}),at)ur(hr);let _n;if(v&&Dr){try{let Ge=Dr.install(v);_n={snapshot_id:Ge.snapshot_id,installed_revision:Ge.installed_revision}}catch{}try{f(JSON.stringify({event:"hands.environment_at_claim",run_id:e.runId,installed:_n!==void 0}))}catch{}}v=void 0;let zo=!1;if(e.headless){let Ge=du(vr,z);try{f(JSON.stringify({event:"hands.workspace_check",run_id:e.runId,outcome:Ge}))}catch{}if(Ge==="unready")throw new r("hands_workspace_unready","This Session's checkout is not a readable, writable directory at its own path, so Reason Hands cannot use it.");zo=Ge==="checked"}w("event_ready");let Uo=M(Ar);Uo.catch(()=>{return});let $o=Date.now();Do=!0,await Q("hands.ready",{...dt,expiry_diagnostic:F,startup_stages:{version:1,browser_resolution_ms:jr(g.get("browser_resolution"),g.get("path_resolution")),path_resolution_ms:jr(g.get("path_resolution"),g.get("workspace_setup")),workspace_setup_ms:jr(g.get("workspace_setup"),g.get("event_started")),repl_setup_ms:jr(g.get("worker_setup"),jn),worker_boot_ms:jr(jn,Wn),worker_dial_ms:jr(Wn,Wo),worker_ready_ms:jr(jn,ia),started_event_ms:jr(g.get("event_started"),wr),started_join_wait_ms:jr(g.get("event_ready"),$o),total_ms:jr(g.get("entered"),$o)},...Ru(e.claimedAtMs,g.get("entered"),No),...e.managedPty?.startupVerified===!0?{managed_pty:{version:1,execution_mode:"host",descendant_cleanup_verified:!0}}:{},policy_mode:"full_access",policy_version:1,path_source:Se.source,connection_generation:$t.generation,..._n?{environment_installed:_n}:{},...zo?{workspace_checked:!0}:{},...K&&!fn?{browser_state:"unavailable",browser_reason_code:Lo?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await Uo,w("ready"),Ho=zi({path:_r,initial:$t,signal:e.signal,isAlive:()=>Cr!==null&&Cr.exitCode===null&&Cr.signalCode===null&&P()<Date.parse(R.expires_at),publish:(Ge,Mr)=>e.emitEvent("hands.reconnected",{...dt,target_generation:Ge.targetGeneration,target_fence_id:Ge.fenceId,connection_generation:Ge.generation},Mr),failed:()=>f(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:e.runId,executor_launch_id:br}))});let Ko=await vu({child:Cr,signal:e.signal,expiresAt:Date.parse(R.expires_at),now:P});if(Ko==="cancelled"){let Ge=e.signal.reason instanceof r?e.signal.reason.code:"cancelled";throw pn=Ge,new r(Ge,"Reason Hands was cancelled.")}if(Ko==="exited")throw new r("hands_worker_exited","Reason Hands exited unexpectedly.");return pn="expired",{...dt,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(wr){Mo=wr;let Ar=wr instanceof r?wr.code:"hands_failed",lt=Ar==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(Ar);if(pn=lt?Ar:"failed",!lt)await Mn("hands.failed",{...dt,reason_code:Ar});throw wr}finally{Ho?.stop(),Bo?.();let wr=Cr?await yu(Cr,l.stopTimeoutMs??Zl):null,Ar=!1;await e.desktopRecording?.close();try{await fn?.stop()}catch{Ar=!0}if(await Bn,(wr==="stopped"||wr==="already_exited"&&!Do)&&!Ar)await Mn("hands.stopped",{...dt,reason_code:pn});else if(wr!==null||Ar){if(await Mn("hands.failed",{...dt,reason_code:wr==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),Mo===null||Ar)throw new r("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(jo!==null)throw new r("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(le){let fe=ai(be,le);if(fe)try{f(JSON.stringify({event:"sandbox.hands_workspace_failed",...fe}))}catch{}throw le}finally{try{if(!Be||Be.exitCode!==null||Be.signalCode!==null)qe?.();if(Fe!==null&&(!Be||Be.exitCode!==null||Be.signalCode!==null))Jl(Fe,{recursive:!0,force:!0})}finally{Te?.(),De()}}}
|
|
458
|
+
export{p,yt,tn,Qt,wt,Si,Ei,er,tr,xi,rr,ki,Je,Ci,Ai,Pi,Ti,nr,Ri,Oi,ir,Ii,or,sr,B,m,Ne,ee,rn,nn,ar,Di,Le,on,cr,me,ge,bt,lr,ur,dr,sn,an,Ze,vt};
|