@reason-machines/cli-linux-arm64-musl 0.2.296 → 0.2.297
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/ara +1 -1
- package/bin/vm-hands/{connect-cli-6j1pxtm6.js → connect-cli-rwhzc14d.js} +1 -1
- package/bin/vm-hands/{local-automation-1b5pgjmh.js → local-automation-22z2k4vz.js} +1 -1
- package/bin/vm-hands/{local-capabilities-j9aa1shb.js → local-capabilities-fyq9h5jc.js} +1 -1
- package/bin/vm-hands/{local-display-session-f033e7en.js → local-display-session-j6w3b26a.js} +1 -1
- package/bin/vm-hands/{permissions-7fw8kh54.js → permissions-dgzk0zvh.js} +1 -1
- package/bin/vm-hands/{status-g3jav4j0.js → status-8jpvepeq.js} +2 -2
- package/bin/vm-hands/{version-92d8018j.js → version-929j7g2j.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-987hd3pc.js → vm-hands-entry-lite-19b6k3f1.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-5js1vtfd.js → vm-hands-entry-lite-99qvkd2y.js} +21 -21
- package/bin/vm-hands/{vm-hands-entry-lite-7vscxzd1.js → vm-hands-entry-lite-brkpme0v.js} +25 -25
- package/bin/vm-hands/{vm-hands-entry-lite-425yvj0s.js → vm-hands-entry-lite-e9fkzekb.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-9ez4yads.js → vm-hands-entry-lite-g8dsm099.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-aswtt2b5.js → vm-hands-entry-lite-h36c6h4q.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-7gfb36ez.js → vm-hands-entry-lite-m5jamh2w.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-3s3jsrmq.js → vm-hands-entry-lite-rn0j7azy.js} +1 -1
- package/bin/vm-hands/vm-hands-entry-lite.js +1 -1
- package/bin/vm-hands/{vm-hands-executor-5vqhd6bn.js → vm-hands-executor-wwefyz6j.js} +1 -1
- package/bin/vm-hands/{vm-hands-op-runner-1n9sw4m8.js → vm-hands-op-runner-bdj7se5y.js} +1 -1
- package/bin/vm-hands/{vm-hands-runtime-0jf6d2gd.js → vm-hands-runtime-mq34wp9n.js} +2 -2
- package/package.json +1 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Ab as
|
|
2
|
+
import{Ab as L9,Bb as n0,Ib as K0,wb as LQ,xb as Y8,yb as s9,zb as _0}from"./vm-hands-entry-lite-rrk5g62b.js";import{Qb as EQ,Rb as SQ,Sb as X4,Tb as J4,Ub as V8}from"./vm-hands-entry-lite-qvrnx0vk.js";import{Zb as b0}from"./vm-hands-entry-lite-n07kxrd1.js";import{Bd as q0,Oc as t$,Rc as e$,ud as w9,vd as o0,wd as W8,xd as g0}from"./vm-hands-entry-lite-8st97h7b.js";import{ae as x}from"./vm-hands-entry-lite-q6fshf3h.js";import{Ke as mQ,Le as y8,Ze as fQ,df as i9,ef as f8}from"./vm-hands-entry-lite-pf1ft65e.js";import{Af as R8,Df as p9,Mf as I8,Nf as S0,Of as O0,Pf as u9,Wf as w8,Xf as XQ,Yf as i$,gf as jZ,jf as B9,sf as $Q,tf as QQ,vf as ZQ,xf as d9,yf as s$,zf as n$}from"./vm-hands-entry-lite-q2pb31vh.js";import{Yg as Q4}from"./vm-hands-entry-lite-7k65s010.js";import{$g as l9,_g as N8,ch as $4}from"./vm-hands-entry-lite-em388nee.js";import{dh as B8,eh as i0,fh as L8,gh as a0,hh as H9,ih as J8,jh as e8,kh as s0,lh as p0,mh as l$,xh as W$}from"./vm-hands-entry-lite-yp315y25.js";import{Ch as KZ}from"./vm-hands-entry-lite-h36c6h4q.js";import{Ih as Z4}from"./vm-hands-entry-lite-wgx7z7gt.js";import{Kh as q}from"./vm-hands-entry-lite-xsq25kmd.js";import{Lh as P1,Oh as YZ}from"./vm-hands-entry-lite-hf0mk7vd.js";var v={chunk:32768,upload:1048576,total:536870912,streams:16,queued:512,buffered:262144,relayBuffered:8388608,requestMs:30000,lifetimeMs:600000,authorizationMs:2000,window:8};function h9($){return $!==null&&typeof $==="object"&&!Array.isArray($)}function P0($,Q,Z=Number.MAX_SAFE_INTEGER){return typeof $==="number"&&Number.isSafeInteger($)&&$>=Q&&$<=Z}function E$($){return typeof $==="string"&&/^[a-zA-Z0-9_-]{1,160}$/.test($)}function S$($,Q){let Z=Buffer.from($,"latin1");return Buffer.concat([Buffer.from([Z.length]),Z,Q])}function I0($){if(!h9($)||Object.keys($).length!==12||![$.organizationId,$.userId,$.runId,$.deviceId,$.rootId,$.jobId,$.fenceId].every(E$)||!P0($.attachmentRevision,0)||!P0($.grantRevision,1)||!P0($.generation,1)||!P0($.port,1024,65535)||!P0($.expiresAtMs,1))throw Error("preview_binding_invalid");return Object.freeze({...$})}function c0($,Q){return Object.keys($).every((Z)=>$[Z]===Q[Z])}function C9($){if($.length>4096||!$.startsWith("/")||$.startsWith("//")||/[\\\x00-\x20\x7f#]/.test($))throw Error("preview_path_invalid");let Q=decodeURIComponent($);if(Q.startsWith("//")||/[\\\x00-\x1f\x7f]/.test(Q))throw Error("preview_path_invalid");return $}function R$($){return Array.isArray($)&&$.length<=64&&$.every((Q)=>Array.isArray(Q)&&Q.length===2&&typeof Q[0]==="string"&&/^[a-zA-Z0-9-]{1,80}$/.test(Q[0])&&typeof Q[1]==="string"&&Q[1].length<=4096&&!/[\x00-\x1f\x7f]/.test(Q[1]))}function q9($,Q=v.chunk){if($.length>Math.ceil(Q/3)*4||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test($))throw Error("preview_data_invalid");let Z=Buffer.from($,"base64");if(Z.length>Q)throw Error("preview_data_too_large");return Z}function w$($){if(Array.isArray($))return Buffer.concat($);if(typeof $==="string")return Buffer.from($,"utf8");if($ instanceof ArrayBuffer)return Buffer.from($);return $}function b$($){if(Buffer.byteLength($)>v.upload*1.4+300000)throw Error("preview_frame_too_large");let Q=JSON.parse($);if(!h9(Q))throw Error("preview_frame_invalid");if(Q.type==="hello")return{type:"hello",binding:I0(Q.binding),...P0(Q.messages,v.chunk,v.upload)?{messages:Q.messages}:{},...P0(Q.window,1,v.window)?{window:Q.window}:{},...Q.bytes===!0?{bytes:!0}:{}};if(Q.type==="refused"&&typeof Q.reason==="string"&&/^[a-z_]{1,32}$/.test(Q.reason))return{type:"refused",binding:I0(Q.binding),reason:Q.reason};if(!E$(Q.id))throw Error("preview_frame_invalid");if(Q.type==="end"||Q.type==="cancel"||Q.type==="credit")return{type:Q.type,id:Q.id};if(Q.type==="ws"&&typeof Q.protocol==="string"&&/^[a-zA-Z0-9._-]{0,100}$/.test(Q.protocol))return{type:"ws",id:Q.id,protocol:Q.protocol};if(Q.type==="data"&&typeof Q.data==="string"&&typeof Q.binary==="boolean")return q9(Q.data,v.upload),{type:"data",id:Q.id,data:Q.data,binary:Q.binary};if(Q.type==="head"&&P0(Q.status,200,599)&&R$(Q.headers))return{type:"head",id:Q.id,status:Q.status,headers:Q.headers};if(Q.type==="request"&&typeof Q.method==="string"&&/^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS)$/.test(Q.method)&&typeof Q.path==="string"&&R$(Q.headers)&&typeof Q.body==="string"&&typeof Q.upgrade==="boolean")return q9(Q.body,v.upload),{type:"request",id:Q.id,method:Q.method,path:C9(Q.path),headers:Q.headers,body:Q.body,upgrade:Q.upgrade};throw Error("preview_frame_invalid")}function D8($){let Q=[...$],Z=new Set(Q.filter(([J])=>J.toLowerCase()==="connection").flatMap(([,J])=>J.toLowerCase().split(",").map((Y)=>Y.trim()))),X=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 Q.filter(([J])=>!X.has(J.toLowerCase())&&!Z.has(J.toLowerCase())&&!/^(x-forwarded-|x-ara-|sec-websocket-|access-control-)/i.test(J))}async function _8($){let Q;try{return await Promise.race([Promise.resolve().then($).then((Z)=>Z===!0||(Z===!1?!1:void 0),()=>{return}),new Promise((Z)=>{Q=setTimeout(()=>Z(void 0),v.authorizationMs)})])}finally{clearTimeout(Q)}}async function T9($){return await _8($)===!0}function v9($,Q){let Z=new URL($);if(Z.username||Z.password||Z.search||Z.hash||!(Z.protocol==="wss:"||Z.protocol==="ws:"&&["127.0.0.1","[::1]"].includes(Z.hostname))||!new RegExp(`^/${Q}/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]{32,}$`).test(Z.pathname))throw Error("preview_relay_invalid");return Z.href}function k$($){if(!h9($)||Object.keys($).length!==2||typeof $.deviceRelayUrl!=="string")throw Error("preview_open_invalid");return{binding:I0($.binding),deviceRelayUrl:v9($.deviceRelayUrl,"device")}}function f$($){if(!h9($)||Object.keys($).length!==1||!("binding"in $))throw Error("preview_close_invalid");return{binding:I0($.binding)}}import{request as C4}from"http";import{pipeline as T4}from"stream";import{constants as A8,createBrotliCompress as O4,createGzip as D4}from"zlib";import{WebSocket as O9}from"ws";import{randomBytes as M4,timingSafeEqual as j4}from"crypto";import{createServer as q4}from"net";var g$="x-preview-connection";async function m$($,Q){if(Q.aborted)throw Error("preview_closed");let Z=M4(32).toString("base64url"),X=new Set,J=!1,Y=q4((G)=>{if(J||Q.aborted||X.size>=v.streams*2)return G.destroy();X.add(G);let F=new AbortController;G.once("close",()=>{X.delete(G),F.abort()}),G.on("error",()=>G.destroy()),G.setTimeout(2000,()=>G.destroy());let B=Buffer.alloc(0),H=(L)=>{B=Buffer.concat([B,L]);let W=B.indexOf(`\r
|
|
3
3
|
\r
|
|
4
4
|
`);if(W<0){if(B.length>16384)G.destroy();return}if(G.pause(),G.off("data",H),W>16384||B.length>v.upload+16384)return G.destroy();z(B,W).catch(()=>G.destroy())};G.on("data",H);async function z(L,W){let U=L.subarray(0,W).toString("latin1").split(`\r
|
|
5
|
-
`),j=/^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS) (\S+) HTTP\/1\.1$/.exec(U.shift()??"");if(!j)throw Error("preview_request_invalid");
|
|
6
|
-
`);R.write(Buffer.concat([Buffer.from(P,"latin1"),L.subarray(W+4)])),R.pipe(G),G.pipe(R),G.resume()}});await new Promise((G,F)=>{Y.once("error",F),Y.listen(0,"127.0.0.1",G)});let K=Y.address();if(!K||typeof K==="string")throw Y.close(),Error("preview_bind_failed");function V(){if(J)return;J=!0,Q.removeEventListener("abort",V);for(let G of X)G.destroy();X.clear(),Y.close()}if(Q.addEventListener("abort",V,{once:!0}),Q.aborted)V();return{port:K.port,headers:{[
|
|
7
|
-
`);let Q=$.binding,Z;try{Z=
|
|
8
|
-
`).slice(1)){let F=G.trim().split(/\s+/);if(F.length<10||!["0A","01"].includes(F[3]))continue;let[B,H]=F[1].split(":"),[z,L]=F[2].split(":");if(Number.parseInt(H,16)!==Q)continue;let W=(O)=>O==="0100007F"||O==="0000000000000000FFFF00000100007F"||O===y$,U=F[3]==="0A";if(!(W(B)||U&&/^0+$/.test(B??"")))continue;if(!U&&!W(z))continue;let j=F[9];if(!/^[1-9][0-9]*$/.test(j))continue;X.set(j,{kernelId:j,port:Q,peerPort:U?null:Number.parseInt(L,16),state:U?"listen":"established",host:B===y$?"::1":"127.0.0.1"})}}let J=await Z.directory("/proc");if(J.length>8192)throw e();let Y=[];for(let K of J){if(!/^[1-9][0-9]*$/.test(K))continue;try{let V=await Z.text(`/proc/${K}/stat`),G=V.slice(V.lastIndexOf(")")+2).trim().split(/\s+/);if(Number(G[2])!==$)continue;let F=await Z.directory(`/proc/${K}/fd`);if(F.length>1024)throw e();let B=[];for(let L of F){if(!/^[0-9]+$/.test(L))continue;let W=await Z.link(`/proc/${K}/fd/${L}`).catch(()=>""),U=/^socket:\[([0-9]+)\]$/.exec(W)?.[1],j=U?X.get(U):void 0;if(j)B.push({...j,pid:Number(K),processGroupId:$,descriptor:L})}let H=await Z.text(`/proc/${K}/stat`),z=H.slice(H.lastIndexOf(")")+2).trim().split(/\s+/);if(G[19]===z[19]&&G[2]===z[2])Y.push(...B)}catch(V){if(V instanceof Error&&V.message==="preview_port_ownership_unproved")throw V}}return Y}function m4($,Q,Z){if($.length>2097152)throw e();let X=0,J=0,Y="",K="",V="",G="",F=[],B=()=>{if(X<1||J!==Q||!/^\d+$/.test(Y)||!/^0x[0-9a-f]+$/i.test(K))return;let H=G==="LISTEN"&&["*","127.0.0.1","[::ffff:127.0.0.1]","[::1]"].some((L)=>V===`${L}:${Z}`),z=new RegExp(`^(?:127\\.0\\.0\\.1|\\[::ffff:127\\.0\\.0\\.1\\]|\\[::1\\]):${Z}->(?:127\\.0\\.0\\.1|\\[::ffff:127\\.0\\.0\\.1\\]|\\[::1\\]):([0-9]+)$`).exec(V);if(H||G==="ESTABLISHED"&&z)F.push({pid:X,processGroupId:J,descriptor:Y,kernelId:K,state:H?"listen":"established",port:Z,peerPort:H?null:Number(z[1]),host:V.startsWith("[::1]:")?"::1":"127.0.0.1"})};for(let H of $.split(/[\0\n]/)){let z=H.slice(1);if(H[0]==="p")B(),X=Number(z),J=0,Y=K=V=G="";else if(H[0]==="g")J=Number(z);else if(H[0]==="f")B(),Y=z,K=V=G="";else if(H[0]==="d")K=z;else if(H[0]==="n")V=z;else if(H.startsWith("TST="))G=H.slice(4)}return B(),F}async function g4($,Q){if(process.platform==="linux")return f4($,Q);if(process.platform!=="darwin")throw e();let Z=await new Promise((X,J)=>I4("/usr/sbin/lsof",["-nP","-a","-g",String($),`-iTCP:${Q}`,"-F0pgfdnT"],{timeout:1000,maxBuffer:2097152,encoding:"utf8",env:{PATH:"/usr/bin:/bin",LC_ALL:"C"}},(Y,K)=>Y?J(e()):X(K)));return m4(Z,$,Q)}function h$($,Q={}){let Z=I0($.binding),X=Q.inspectSockets??g4,J=Q.monotonicNow??(()=>performance.now());async function Y(){let z=()=>{if(Date.now()>=Z.expiresAtMs)throw e("binding_expired");if($.deniedPorts.has(Z.port))throw e("port_denied")};z();let L=await $.readCurrentJob(),W=L?.job,U=W?.process;if(z(),!L)throw e("server_stopped");if(!c0(Z,L.binding)||W?.jobId!==Z.jobId)throw e("binding_changed");if(W.state!=="running"||W.finishedAtMs!==null||W.leaseExpiresAtMs<Z.expiresAtMs)throw e("job_not_running");if(!U||U.pid<1||U.pid!==U.processGroupId||U.executorLaunchId!==L.executorLaunchId)throw e("process_unproved");return{pid:U.pid,launch:U.executorLaunchId,started:W.startedAtMs}}let K,V;async function G(){let z=await Y(),L=await X(z.pid,Z.port).catch(()=>{throw Error(v9)}),W=await Y();if(z.pid!==W.pid||z.launch!==W.launch||z.started!==W.started)throw e("job_restarted");return L}async function F(z){for(;;){if(V&&V.startedAt>=z)return V.sockets;if(K&&K.startedAt>=z)return await K.sockets;if(K){await K.sockets.catch(()=>{});continue}let L={startedAt:J(),sockets:G()};K=L;try{let W=await L.sockets;if(!V||V.startedAt<=L.startedAt)V={startedAt:L.startedAt,sockets:W};return W}finally{if(K===L)K=void 0}}}async function B(z=()=>{},L=J()){z();let W=await F(L);if(z(),Date.now()>=Z.expiresAtMs)throw e("binding_expired");if(!W.some((U)=>U.state==="listen"))throw Error(v9);return W}async function H(){try{return await B(()=>{},J()-1000),null}catch(z){if(z instanceof Error&&z.message===v9)return"listener_unproved";return z instanceof _8?z.code:"port_unproved"}}return{refusal:H,async check(){let z=await H();if(z==="listener_unproved")throw Error(v9);return z===null},async connect(z){if(z.aborted)throw e();let L=J()+2000,W=new AbortController,U=new Promise((P)=>W.signal.addEventListener("abort",()=>P(null),{once:!0})),j,O=()=>{W.abort(),j?.destroy()},C=setTimeout(O,2000);z.addEventListener("abort",O,{once:!0});let A=()=>{if(W.signal.aborted||z.aborted||J()>=L||j?.destroyed)throw O(),e()};async function R(P){A();let T=await Promise.race([P().then((S)=>({value:S})),U]);if(A(),!T)throw e();return T.value}try{let P=await R(()=>B(A,J()-1000));A();let T=P.some((N)=>N.state==="listen"&&N.host==="127.0.0.1")?"127.0.0.1":"::1",S=w4({host:T,port:Z.port,signal:z});j=S,S.once("close",O),await R(()=>new Promise((N,M)=>{S.once("connect",N),S.once("error",M)}));let m=S.localPort;if(!m)throw e();let E=J();while(!(await R(()=>B(A,E))).some((N)=>N.state==="established"&&N.peerPort===m))await R(()=>b4(Math.min(20,Math.max(1,L-J())),void 0,{signal:W.signal})),E=J();return A(),S}catch(P){throw O(),P}finally{clearTimeout(C),z.removeEventListener("abort",O),j?.off("close",O),W.abort()}}}}var y4=4,h4=[2375,2376,9222,9229];function v$($){let Q=new Set(h4);for(let Z of $){let X=new URL(Z);Q.add(Number(X.port||(["https:","wss:"].includes(X.protocol)?443:80)))}return Q}function R0(){throw new q("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var v4=60000;function c$($){let Q=new AbortController,Z=new Map,X=(G)=>JSON.stringify([G.jobId,G.port]);function J(G){let F=$.authority.owner;if(Q.signal.aborted||!$.isCurrent()||$.expiresAtMs<=Date.now()||G.organization_id!==F.organization_id||G.user_id!==F.user_id||G.device_id!==F.device_id)R0()}function Y(G){let F;try{F=$.environment.current()}catch{return null}return F.binding.target_generation===G.generation&&F.binding.target_fence_id===G.fenceId&&F.run_id===$.runId&&F.device_id===$.authority.owner.device_id&&F.root_id===$.authority.rootId?F:null}async function K(G,F,B){let H=await V(G,F,B);if(H!=="moved")return H;let z=await V(G,F,B);return z==="moved"?null:z}async function V(G,F,B){try{J($.authority.owner);let H=$.identity();if(!H||B.aborted||G.expiresAtMs<=Date.now()||G.expiresAtMs>$.expiresAtMs)return null;let z=F.opened,L=z!==void 0&&H.generation>z.generation,W=Y(H);if(L){if(W){if(W.revision<=z.revision||G.expiresAtMs>Date.parse(W.expires_at)||W.binding.target_revision!==z.attachmentRevision||W.binding.root_grant_revision!==z.grantRevision)return null;F.recoveringSinceMs=void 0}else if(Date.now()-(F.recoveringSinceMs??=Date.now())>v4)return null}else if(!W||G.expiresAtMs>Date.parse(W.expires_at)||z&&(H.generation!==z.generation||H.fenceId!==z.fenceId))return null;let U=await $.inspect(G.jobId,B),j=$.identity(),O=j&&Y(j);J($.authority.owner);let C=W&&{generation:H.generation,fenceId:H.fenceId,snapshotId:W.snapshot_id,revision:W.revision,attachmentRevision:W.binding.target_revision,grantRevision:W.binding.root_grant_revision},A=L?z:C;if(B.aborted||!j)return null;if(j.generation!==H.generation||j.fenceId!==H.fenceId||O?.snapshot_id!==W?.snapshot_id||O?.revision!==W?.revision)return"moved";let R=U.ok&&U.job.environmentSnapshotId!==void 0&&U.job.environmentRevision!==void 0?{snapshotId:U.job.environmentSnapshotId,revision:U.job.environmentRevision}:null;if(!U.ok||U.generation!==H.generation||!A||!R)return null;if((R.snapshotId!==A.snapshotId||R.revision!==A.revision)&&(L||!$.environment.carried(R.snapshotId,R.revision)))return null;if(!z&&H.generation===G.generation&&H.fenceId===G.fenceId)F.opened={...A,...R};return{executorLaunchId:$.executorLaunchId,job:U.job,binding:{organizationId:$.authority.owner.organization_id,userId:$.authority.owner.user_id,deviceId:$.authority.owner.device_id,rootId:$.authority.rootId,runId:$.runId,attachmentRevision:A.attachmentRevision,grantRevision:A.grantRevision,generation:A.generation,fenceId:A.fenceId,jobId:U.job.jobId,port:G.port,expiresAtMs:G.expiresAtMs}}}catch{return null}}return{async open(G,F,B){J(F);let{binding:H,deviceRelayUrl:z}=b$(G);if(B.aborted||H.expiresAtMs<=Date.now()||H.expiresAtMs>Date.now()+v.lifetimeMs||new URL(z).origin!==$.authority.relayOrigin)R0();let L=X(H),W=Z.get(L);if(W){if(!c0(W.binding,H)||W.relay!==z)R0();if(await W.opened,!await C9(()=>W.port.check())||B.aborted||W.abort.signal.aborted)R0();return{opened:!0,binding:H}}if(Z.size>=y4)R0();let U=new AbortController,j={},O=h$({binding:H,deniedPorts:$.authority.deniedPorts,readCurrentJob:()=>K(H,j,U.signal)}),C=()=>U.abort();if(B.addEventListener("abort",C,{once:!0}),Q.signal.addEventListener("abort",C,{once:!0}),B.aborted||Q.signal.aborted)C();let A=g$({binding:H,deviceRelayUrl:z,port:O,signal:U.signal}),R={binding:H,relay:z,abort:U,port:O,opened:A};Z.set(L,R);let P=()=>{if(B.removeEventListener("abort",C),Q.signal.removeEventListener("abort",C),Z.get(L)===R)Z.delete(L)};try{if((await A).closed.then(P),B.removeEventListener("abort",C),J(F),U.signal.aborted||!await C9(()=>O.check()))R0();return{opened:!0,binding:H}}catch{U.abort(),P(),R0()}},async close(G,F){J(F);let{binding:B}=k$(G),H=Z.get(X(B));if(!H||!c0(H.binding,B))R0();return H.abort.abort(),await H.opened.then((z)=>z.closed,()=>{return}),{closed:!0,binding:B}},dispose(){Q.abort();for(let G of Z.values())G.abort.abort();Z.clear()}}}import{WebSocket as A8}from"ws";var d$=($)=>("data"in $)?$.data.length:$.bytes,p$=2*l$;function i($){throw new q($,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var t0=($)=>!["starting","running"].includes($.state);function q2($,Q,Z=Date.now()){let X=["relay_url","session_id","expires_at","cols","rows","pty","workspace"];if(Object.keys($).length!==X.length||Object.keys($).some((F)=>!X.includes(F))||!x8(Q)||!x8($.session_id)||typeof $.expires_at!=="string"||typeof $.relay_url!=="string"||$.relay_url.length>4096||![$.cols,$.rows].every((F)=>Number.isSafeInteger(F)&&Number(F)>=1&&Number(F)<=P8))i("invalid_pty_request");let J=$.pty;if(!J||typeof J!=="object"||Array.isArray(J))i("invalid_pty_request");let Y=J;if(Object.keys(Y).length!==2||Y.version!==1||!p9(Y.jobId))i("invalid_pty_request");let K;try{K=new URL($.relay_url)}catch{return i("invalid_pty_request")}if(!["ws:","wss:"].includes(K.protocol)||K.username||K.password||K.hash||K.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(K.hostname))i("invalid_pty_request");let V=Date.parse($.expires_at);if(!Number.isSafeInteger(V)||V<=Z)i("invalid_pty_request");return{workspace:u$($.workspace)??i("invalid_pty_request"),session:{jobId:Y.jobId,sessionId:$.session_id,operationId:Q,relayUrl:K.href,cols:Number($.cols),rows:Number($.rows),leaseExpiresAtMs:Math.min(V,Z+43200000)}}}async function i$($){let{session:Q,binding:Z}=$;if(Z.assertCurrent(),$.signal.aborted||Date.now()>=Q.leaseExpiresAtMs)i("cancelled");let X=new A8(Q.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:c9}),J=new AbortController,Y=()=>{},K=()=>{J.abort(),Y()};$.signal.addEventListener("abort",K,{once:!0});let V=setTimeout(K,Math.max(1,Q.leaseExpiresAtMs-Date.now())),G=[],F=0,B=0,H=0,z=!1,L=!1,W=!1,U,j,O,C=(N)=>{O=new q(N,"Bound terminal input was refused."),K()};X.on("error",()=>C("pty_relay_unavailable")),X.on("close",K),X.on("message",(N,M)=>{if(J.signal.aborted)return;if(!L){C("pty_not_ready");return}let D=Array.isArray(N)?Buffer.concat(N):N instanceof ArrayBuffer?Buffer.from(N):N;if(D.length===0)return;let w=G.at(-1),k=M&&w!==void 0&&"data"in w&&w.data.length+D.length<=c9;if(D.length>c9||F+D.length>s$){C("pty_input_backpressure");return}if(k)w.data=Buffer.concat([w.data,D]);else if(M)G.push({data:Buffer.from(D)});else try{let f=JSON.parse(D.toString("utf8"));if(f&&f.t==="close"&&Object.keys(f).length===1){W=!0,K();return}if(!f||f.t!=="resize"||Object.keys(f).length!==3||![f.cols,f.rows].every((_)=>Number.isSafeInteger(_)&&_>=1&&_<=P8))throw Error("invalid_control");G.push({cols:f.cols,rows:f.rows,bytes:D.length})}catch{C("invalid_pty_control");return}F+=D.length,Y()});function A(N){return n$(JSON.stringify({...Z.scope,version:1,sessionId:Q.sessionId,operationId:Q.operationId,job:{...N,output:[],pty:N.pty?{...N.pty,output:[]}:void 0}}))}function R(N){if(!N.ok)i(N.error);let M=N.job;if(N.generation!==Z.scope.generation||M.jobId!==Q.jobId||!M.pty||M.leaseExpiresAtMs>Q.leaseExpiresAtMs||M.process&&M.process.executorLaunchId!==Z.scope.executorLaunchId||M.process&&j&&(M.process.pid!==j.pid||M.process.processGroupId!==j.processGroupId)||M.state!=="starting"&&(M.environmentRevision!==Z.environment.revision||M.environmentSnapshotId!==Z.environment.snapshotId))i("pty_binding_changed");if(A(M),M.process)j??={...M.process};return M}async function P(N){Z.assertCurrent();let M=await Z.request(N,J.signal);if(Z.assertCurrent(),J.signal.aborted)i("cancelled");let D=R(M);if(D.inputSequence!==B)i("job_input_sequence");if(!t0(D)&&D.leaseExpiresAtMs<=Date.now())i("pty_binding_changed");return D}function T(N){if(Z.assertCurrent(),J.signal.aborted||X.readyState!==A8.OPEN||X.bufferedAmount+Buffer.byteLength(N)>p$)i("pty_output_backpressure");X.send(N)}function S(N){if(N.firstCursor>H+1)H=N.firstCursor-1;for(let M of N.pty.output){if(M.cursor<=H)continue;if(M.cursor!==H+1)i("pty_output_gap");let D=Buffer.from(M.dataBase64,"base64");if(X.bufferedAmount+D.length>p$)return!1;T(D),H=M.cursor}if(H!==N.nextCursor)i("pty_output_gap");return!0}async function m(N,M){let D;try{await Promise.race([$.emit(N,M),new Promise((w,k)=>{D=setTimeout(()=>k(new q("pty_event_unavailable","Terminal metadata delivery timed out.")),2000)})])}finally{clearTimeout(D)}}async function E(){let N=AbortSignal.timeout(d9),M=Z.request({jobId:Q.jobId,action:"cancel",input:{}},N),D,w=new Promise((k,f)=>{if(D=()=>f(new q("pty_cleanup_unconfirmed","Terminal cleanup acknowledgement was not observed within authority.")),N.addEventListener("abort",D,{once:!0}),N.aborted)D()});try{let k=await Promise.race([M,w]);if(N.aborted)i("pty_cleanup_unconfirmed");return R(k)}finally{N.removeEventListener("abort",D)}}try{await new Promise((k,f)=>{let _=setTimeout(()=>{K(),f(new q("pty_relay_unavailable","Terminal pairing timed out."))},5000),g=()=>{clearTimeout(_),f(new q("cancelled","Terminal pairing was cancelled."))};if(J.signal.addEventListener("abort",g,{once:!0}),X.once("open",()=>{clearTimeout(_),J.signal.removeEventListener("abort",g),k()}),J.signal.aborted)g()}),Z.assertCurrent(),z=!0,U=await P({jobId:Q.jobId,action:"start",input:{mode:"pty",cols:Q.cols,rows:Q.rows,leaseExpiresAtMs:Q.leaseExpiresAtMs}});let N=Date.now()+5000;while(U.state==="starting"){if(Date.now()>=N)i("pty_not_ready");await new Promise((k)=>setTimeout(k,25)),U=await P({jobId:Q.jobId,action:"inspect",input:{after:H}})}if(U.state!=="running"||U.inputSequence!==0||U.leaseExpiresAtMs<=Date.now())i("pty_not_ready");await m("pty.ready",A(U)),L=!0,T(JSON.stringify({t:"open",cols:U.pty.cols,rows:U.pty.rows,receipt:A(U)}));let M=!1,D=0,w=!1;while(!J.signal.aborted){let k=U.firstCursor>H+1,f=S(U);if(t0(U)){if(f)break}else if(k)M=!0;else if(M&&f&&Date.now()>=D){M=!1,D=Date.now()+1000;let{cols:g,rows:c}=U.pty;for(let u of[{cols:g,rows:c>1?c-1:2},{cols:g,rows:c}]){if(t0(U))break;let o=++B;if(U=await P({jobId:Q.jobId,action:"resize",input:{sequence:o,...u}}),U.inputSequence!==o)i("job_input_sequence")}continue}let _=t0(U)||w?void 0:G.shift();if(_){F-=d$(_);let g=++B;try{U=await P("data"in _?{jobId:Q.jobId,action:"input",input:{sequence:g,dataBase64:_.data.toString("base64")}}:{jobId:Q.jobId,action:"resize",input:{sequence:g,cols:_.cols,rows:_.rows}})}catch(c){if(!(c instanceof q)||c.code!=="job_input_backpressure")throw c;B-=1,G.unshift(_),F+=d$(_),w=!0;continue}if(U.inputSequence!==g)i("job_input_sequence")}else if(await new Promise((g)=>{let c=setTimeout(g,w||!f?10:50);if(Y=()=>{clearTimeout(c),g()},J.signal.aborted||!w&&G.length)Y()}),w=!1,Y=()=>{},!J.signal.aborted&&f)try{U=await P({jobId:Q.jobId,action:"inspect",input:{after:H}})}catch(g){if(!W||!(g instanceof q)||g.code!=="cancelled")throw g}}}catch(N){O??=N}finally{if(L=!1,G.length=0,clearTimeout(V),$.signal.removeEventListener("abort",K),K(),z&&(!U||!t0(U)))try{U=await E()}catch{U=void 0}try{if(!U||!t0(U)||U.pty?.cleanup!=="confirmed")i("pty_cleanup_unconfirmed");let N=A(U);if(X.readyState===A8.OPEN)await new Promise((M)=>{let D=setTimeout(M,500);X.send(JSON.stringify({t:"exit",code:U.exitCode,receipt:N}),()=>{clearTimeout(D),M()})});await m("pty.stopped",N)}catch(N){O??=N}X.terminate()}if(O)throw O;if($.signal.aborted)i("cancelled");if(!U)i("pty_cleanup_unconfirmed");return{receipt:A(U)}}import{createHash as c4,randomUUID as XQ}from"crypto";import{spawnSync as d4}from"child_process";import{closeSync as a$,constants as I8,fstatSync as p4,fsyncSync as u4,lstatSync as O9,mkdirSync as l4,mkdtempSync as JQ,openSync as o$,readFileSync as s4,readdirSync as YQ,realpathSync as $9,rmSync as R8,unlinkSync as n4}from"fs";import{createConnection as i4}from"net";import{dirname as a4,join as d0,sep as o4}from"path";import{tmpdir as r4}from"os";var $0=new Map,E0=new Map;function D0($,Q){return c4("sha256").update(JSON.stringify([$,Q])).digest("hex")}function e0($){try{l4($,{mode:448})}catch(Z){if(!(Z instanceof Error&&("code"in Z)&&Z.code==="EEXIST"))throw Z}let Q=O9($);if(!Q.isDirectory()||Q.isSymbolicLink()||Q.uid!==process.getuid?.()||(Q.mode&63)!==0||$9($)!==$)throw new q("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function t4($){let Q;try{Q=O9($)}catch(Z){if(Z instanceof Error&&"code"in Z&&Z.code==="ENOENT")return!1;throw Z}return!Q.isDirectory()||Q.isSymbolicLink()||YQ($).length>0}function GQ($){let Q=D0($.root,$.runId),Z=$.previousRuntimeDirectories?.find((K)=>t4(d0(K,"jobs",Q.slice(0,16))))??$.runtimeDirectory;e0(Z);let X=d0(Z,"jobs");e0(X);let J=d0(X,Q.slice(0,16));if($.maxScopes!==void 0){let K=YQ(X);if(!Number.isSafeInteger($.maxScopes)||$.maxScopes<1||K.length>$.maxScopes||!K.includes(Q.slice(0,16))&&K.length>=$.maxScopes)throw new q("process_journal_capacity","Managed process receipt capacity is full; preserve uncertain jobs and reconcile their existing receipts before starting more work.")}e0(J);let Y=JQ(d0($9("/tmp"),"reason-j-"));try{return e0(Y),{journalDirectory:J,scopeId:Q,socketPath:d0(Y,"control.sock"),disposeSocket:()=>R8(Y,{recursive:!0,force:!0})}}catch(K){throw R8(Y,{recursive:!0,force:!0}),K}}var e4=60000,$3=5000;function Q3($){let Q=d4("ps",["-o","lstart=","-p",String($)],{encoding:"utf8",timeout:2000,env:{...process.env,LC_ALL:"C",LANG:"C"}}),Z=Q.status===0?/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(Q.stdout.trim()):null,X=Z?"JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(Z[1]):-1;if(!Z||X<0||X%3!==0)return null;let J=new Date(Number(Z[6]),X/3,Number(Z[2]),Number(Z[3]),Number(Z[4]),Number(Z[5])).getTime();return Number.isFinite(J)?J:null}function zQ($,Q={}){let Z=d0($.journalDirectory,"owner.lock"),X;try{X=o$(Z,I8.O_RDONLY|I8.O_NOFOLLOW)}catch{return null}try{let J=p4(X);if(!J.isFile()||J.nlink!==1||J.uid!==process.getuid?.()||(J.mode&63)!==0||J.size>4096)return null;let Y=null;try{Y=JSON.parse(s4(X,"utf8"))}catch{}let K;if(Y===null){if((Q.now??Date.now)()-J.mtimeMs<e4)return null;K={reason:"never_written",executorLaunchId:null}}else{let{version:F,scopeId:B,pid:H,createdAtMs:z,executorLaunchId:L}=Y;if(F!==1||B!==$.scopeId||typeof L!=="string"||typeof H!=="number"||!Number.isSafeInteger(H)||H<1||H===process.pid||typeof z!=="number"||!Number.isSafeInteger(z))return null;if(!(Q.exists??((U)=>{try{return process.kill(U,0),!0}catch(j){return!(j instanceof Error&&("code"in j)&&j.code==="ESRCH")}}))(H))K={reason:"owner_exited",executorLaunchId:L};else{let U=(Q.startedAtMs??Q3)(H);if(U===null||U<=z+$3)return null;K={reason:"pid_reused",executorLaunchId:L}}}let V=O9(Z);if(V.dev!==J.dev||V.ino!==J.ino)return null;n4(Z);let G=o$($.journalDirectory,I8.O_RDONLY);try{u4(G)}finally{a$(G)}return K}catch{return null}finally{a$(X)}}function KQ($){let Q={...$,workspace:$.workspace&&Object.freeze({...$.workspace}),previewAuthority:$.previewAuthority&&Object.freeze({...$.previewAuthority,owner:Object.freeze({...$.previewAuthority.owner}),deniedPorts:new Set($.previewAuthority.deniedPorts)})},Z=D0(Q.root,Q.runId);if($0.has(Z)||Q.operationId!==void 0&&E0.has(Q.operationId))throw new q("hands_jobs_busy","The Session already has a live Hands job supervisor.");let X={binding:Q,key:Z,terminals:new Map};if(Q.previewAuthority&&Q.environment)X.previews=c$({authority:Q.previewAuthority,runId:Q.runId,expiresAtMs:Q.expiresAtMs,executorLaunchId:Q.executorLaunchId,environment:Q.environment,isCurrent:()=>$0.get(X.key)===X,identity:()=>{try{return Q9(Q)}catch{return null}},inspect:(J,Y)=>{if($0.get(X.key)!==X)throw new q("preview_unavailable","The Hands supervisor is no longer current.");return VQ(Q,{jobId:J,action:"inspect",input:{after:0}},Y)}});if($0.set(Z,X),Q.operationId!==void 0)E0.set(Q.operationId,X);return()=>{if($0.get(X.key)===X)$0.delete(X.key);if(Q.operationId!==void 0&&E0.get(Q.operationId)===X)E0.delete(Q.operationId);X.previews?.dispose();for(let J of X.terminals.values())J.abort()}}var Z3=5000,X3=20;async function k2($){let Q=(J)=>{throw new q("hands_rebind_unavailable",J)};if(!O0($.operationId)||!O0($.runId)||!O0($.fenceId)||!S0($.targetGeneration))Q("Reason sent an invalid Hands rebind.");let Z=E0.get($.operationId);if(!Z||Z.binding.root!==$.root)return Q("No live Hands supervisor owns this operation.");for(let J=Date.now()+Z3;;){if($.signal?.aborted)Q("The Hands rebind was cancelled.");if(E0.get($.operationId)!==Z)Q("The Hands supervisor is no longer current.");let Y=null;try{Y=Q9(Z.binding)}catch{}if(Y&&Y.generation===$.targetGeneration&&Y.fenceId===$.fenceId)break;if(Y&&Y.generation>$.targetGeneration||Date.now()>=J)Q("The executor did not adopt this take.");await new Promise((K)=>setTimeout(K,X3))}if(E0.get($.operationId)!==Z||$0.get(Z.key)!==Z)Q("The Hands supervisor is no longer current.");let X=D0($.root,$.runId);if(Z.key===X)return;if($0.has(X))Q("The taking run already has a live Hands job supervisor.");$0.delete(Z.key);for(let J of Z.terminals.values())J.abort();Z.key=X,$0.set(X,Z)}function f2($){let Q="operationId"in $?E0.get($.operationId):$0.get(D0($.root,$.runId)),Z=Q&&Q.binding.root===$.root?Q.binding:void 0;if(!Z?.environment||Z.expiresAtMs<=Date.now())throw new q("environment_unavailable","No live Hands supervisor owns this environment.");return Z.environment.install($.payload)}async function m2($){let Q=$0.get(D0($.root,$.runId));if(!Q?.previews||!$.owner)throw new q("preview_unavailable","No authenticated Hands supervisor owns this preview.");return Q.previews.open($.payload,$.owner,$.signal)}async function g2($){let Q=$0.get(D0($.root,$.runId));if(!Q?.previews||!$.owner||$.signal.aborted)throw new q("preview_unavailable","No authenticated Hands supervisor owns this preview.");return Q.previews.close($.payload,$.owner)}async function y2($){let Q=D0($.root,$.runId),Z=$0.get(Q),X=Z?.binding,J=X?.runId,Y=X?.previewAuthority,K=X?.environment,V=$.owner&&{...$.owner},G=$.authority&&{...$.authority},F=()=>{throw new q("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!Z||!X||!Y||!K||!V||!G||!X.workspace)return F();let B=Object.freeze({...X.workspace}),H=Q9(X),z=K.current(),L=()=>{if($0.get(Q)!==Z||V.organization_id!==Y.owner.organization_id||V.user_id!==Y.owner.user_id||V.device_id!==Y.owner.device_id||$.deviceId!==Y.owner.device_id||$.rootId!==Y.rootId||p0($.workspace)!==p0(B))F();let U=Q9(X),j=K.current();if(U.generation!==H.generation||U.fenceId!==H.fenceId||j.run_id!==J||j.device_id!==$.deviceId||j.root_id!==$.rootId||j.snapshot_id!==z.snapshot_id||j.revision!==z.revision||j.binding.target_generation!==H.generation||j.binding.target_fence_id!==H.fenceId||G.device_id!==$.deviceId||G.binding!==j.binding.kind||G.target_revision!==j.binding.target_revision||G.root_grant_revision!==j.binding.root_grant_revision||G.target_generation!==H.generation||G.target_fence_id!==H.fenceId)F()};if(L(),new URL($.session.relayUrl).origin!==Y.relayOrigin||Z.terminals.has($.session.jobId)||Z.terminals.size>=4)return F();let W=new AbortController;Z.terminals.set($.session.jobId,W);try{return await i$({session:{...$.session,leaseExpiresAtMs:Math.min($.session.leaseExpiresAtMs,H.expiresAtMs,Date.parse(z.expires_at))},signal:AbortSignal.any([$.signal,W.signal]),emit:$.emit,binding:{assertCurrent:L,environment:{revision:z.revision,snapshotId:z.snapshot_id},scope:{runId:$.runId,deviceId:$.deviceId,rootId:$.rootId,workspace:B,binding:z.binding.kind,targetRevision:z.binding.target_revision,rootGrantRevision:z.binding.root_grant_revision,generation:H.generation,fenceId:H.fenceId,executorLaunchId:H.executorLaunchId},request:(U,j)=>FQ(H,E8(JSON.stringify({...U,type:"job",version:2,generation:H.generation,id:XQ()})),j)}})}finally{if(Z.terminals.get($.session.jobId)===W)Z.terminals.delete($.session.jobId)}}async function h2($){if(p9($.payload.jobId))throw new q("pty_binding_required","PTY jobs require the bound terminal capability.");let Q=$0.get(D0($.root,$.runId))?.binding;if(!Q||Q.expiresAtMs<=Date.now())throw new q("hands_jobs_unavailable","No live Hands supervisor owns this Session and root.");return VQ(Q,$.payload,$.signal)}var J3=1e4,Y3=20,G3=$Q/2,z3=e$/2,K3=($)=>$.output.reduce((Q,Z)=>Q+Z.text.length,0);async function VQ($,Q,Z){if(Object.keys(Q).some((F)=>!["jobId","action","input","waitForExitMs"].includes(F)))throw new q("invalid_payload","Unexpected job control field.");let{waitForExitMs:X,...J}=Q;if(X!==void 0&&(J.action!=="start"||typeof J.input!=="object"||J.input===null||!("script"in J.input)||typeof X!=="number"||!Number.isSafeInteger(X)||X<1||X>J3))throw new q("invalid_payload","Only a script start may wait for its job, within its bound.");let Y=(F)=>{let B=Q9($);return FQ(B,E8(JSON.stringify({...F,type:"job",version:2,generation:B.generation,id:XQ()})),Z)},K=await Y(J);if(X===void 0)return K;let V=Date.now()+X,G=K;while(G.ok&&["starting","running"].includes(G.job.state)&&G.job.output.length<G3&&K3(G.job)<z3&&!Z.aborted&&Date.now()<V){if(await new Promise((F)=>setTimeout(F,Math.min(Y3,V-Date.now()))),Z.aborted)break;try{let F=await Y({jobId:J.jobId,action:"inspect",input:{after:0}});if(!F.ok)break;G=F}catch{break}}return G}function Q9($){if($.expiresAtMs<=Date.now())throw new q("hands_jobs_unavailable","Hands authority expired.");let Q=$.readIdentity?$.readIdentity():$;if(!Q||!S0(Q.generation)||!O0(Q.fenceId)||Q.generation<$.generation||Q.generation===$.generation&&Q.fenceId!==$.fenceId)throw new q("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return $.generation=Q.generation,$.fenceId=Q.fenceId,{...$}}function FQ($,Q,Z){if(Z.aborted)return Promise.reject(new q("cancelled","Job control was cancelled."));return new Promise((X,J)=>{let Y=i4($.socketPath),K="",V=!1,G,F=(H,z)=>{if(V)return;if(V=!0,clearTimeout(G),Z.removeEventListener("abort",B),Y.destroy(),H)J(H);else X(z)},B=()=>F(new q("cancelled","Job control waiter cancelled; inspect before retrying mutations."));Z.addEventListener("abort",B,{once:!0}),Y.setEncoding("utf8"),G=setTimeout(()=>F(new q("hands_job_result_unknown","Job control timed out; inspect before retrying mutations.")),Math.min(1e4,Math.max(1,$.expiresAtMs-Date.now()))),Y.on("error",()=>F(new q("hands_job_result_unknown","Hands job control connection failed."))),Y.once("connect",()=>Y.write(JSON.stringify({version:1,scopeId:$.scopeId,fenceId:$.fenceId,executorLaunchId:$.executorLaunchId,request:Q})+`
|
|
9
|
-
`)),Y.on("data",(H)=>{if(K+=H,Buffer.byteLength(K)>
|
|
10
|
-
`)}var
|
|
11
|
-
`;if(Buffer.byteLength(J,"utf8")>Z)throw Error("worker_file_too_large");if(D9(DQ($)),s9($))_9($,Z);let Y=`${$}.${U3()}`;try{q3(Y,J,{mode:384,flag:"wx"}),M3(Y,$)}finally{if(s9(Y))j3(Y)}}import{spawn as C3}from"child_process";import{basename as T3,isAbsolute as $5}from"path";var O3=0,D3=120000,_3=15000,A3=65536;function w8($=process.execPath,Q=process.argv[1]){let Z=T3($),X=(Z.startsWith("bun")||Z.startsWith("node"))&&typeof Q==="string"&&Q.length>0;return{command:$,prefix:X?[Q]:[]}}function Q5($={}){let{command:Q,prefix:Z}=w8($.executablePath,$.sourceEntrypoint),X=$.spawnProcess??C3,J=$.now??Date.now,Y=null,K=0,V=!1,G=(B)=>{try{B.kill("SIGKILL")}catch{}},F=()=>{if(V||Y)return;let B;try{B=X(Q,[...Z,"__device","__hands-worker","--handoff-fd",String(O3)],{cwd:"/",env:{PATH:process.env.PATH??"/usr/local/bin:/usr/bin:/bin"},shell:!1,stdio:["pipe","ignore","pipe"]})}catch{return}Y=B,K=J(),B.on("error",()=>{if(Y===B)Y=null}),B.once("exit",(H,z)=>{if(Y!==B)return;Y=null,$.log?.("hands.worker_prespawn_exited",{exit_code:H,exit_signal:z})}),$.log?.("hands.worker_prespawned",{pid:B.pid??null})};return{arm:F,take(B){let H=Y;if(!H||V)return null;let z=B.args.at(-1),L=B.options.env,W=B.options.cwd,U=[...Z,"__device","__hands-worker","--config"];if(B.command!==Q||B.args.length!==U.length+1||U.some((A,R)=>B.args[R]!==A)||typeof z!=="string"||!L||typeof W!=="string"||B.options.shell||JSON.stringify(B.options.stdio)!==JSON.stringify(["ignore","ignore","pipe"]))return null;Y=null;let j=H.stdin,O={configPath:z,cwd:W,env:Object.fromEntries(Object.entries(L).filter((A)=>typeof A[1]==="string"))},C=JSON.stringify(O);if(H.exitCode!==null||H.signalCode!==null||!j||j.destroyed||J()-K>=D3-_3||Buffer.byteLength(C,"utf8")>A3)return G(H),null;return j.on("error",()=>{return}),j.end(C),H.once("exit",()=>{F()}),$.log?.("hands.worker_prespawn_taken",{pid:H.pid??null}),H},adopt(B){B.once("exit",()=>{F()})},close(){if(V=!0,Y)G(Y);Y=null}}}import{accessSync as S3,constants as w3,statSync as b3}from"fs";import{homedir as k3,tmpdir as f3,userInfo as m3}from"os";var x3=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 P3=["BUN_CONFIG_","BUN_INSPECT","DYLD_","NODE_DEBUG"],I3=new Set(["BUN_INSTALL"]);var R3=/^--(?:max-old-space-size|max-semi-space-size|stack-size)=\d{1,9}$/;function E3($){return($??"").split(/\s+/).filter(Boolean).every((Q)=>R3.test(Q.replaceAll("_","-")))}function IQ($){return Object.keys($).filter((Q)=>x3.has(Q)&&!(Q==="NODE_OPTIONS"&&E3($[Q]))||P3.some((Z)=>Q.startsWith(Z))||Q.startsWith("BUN_")&&!I3.has(Q)).sort()}var g3=new Set(["HOME","PATH","PWD","OLDPWD","SHLVL","_","TMPDIR","TMP","TEMP","SHELL","BASH_ENV","ENV","ZDOTDIR","PROMPT_COMMAND","IFS","CDPATH","GLOBIGNORE","SHELLOPTS","BASHOPTS","NODE_PATH"]),y3=/^(?:ARA_|REASON_|PI_|GIT_|GH_|GITHUB_|LD_|DYLD_|BUN_|BASH_FUNC_|SSH_)/,h3=/TOKEN|SECRET|PASSW|PASSPHRASE|CREDENTIAL|API_?KEY|ACCESS_?KEY|PRIVATE_?KEY|AUTH/i,v3=/^[A-Za-z_][A-Za-z0-9_]*$/;function SQ($=process.env){let Q=(J)=>{if(!J.startsWith("/")||/[\0\r\n]/.test(J)||J.length>32768)throw Error("invalid_host_execution_environment");return J};if($.PATH!==void 0&&(/[\0\r\n]/.test($.PATH)||$.PATH.length>32768))throw Error("invalid_host_execution_environment");let Z=new Set(IQ($)),X=Object.fromEntries(Object.entries($).filter((J)=>{let[Y,K]=J;return typeof K==="string"&&K.length<=32768&&!K.includes("\x00")&&Y.length<=128&&v3.test(Y)&&!Z.has(Y)&&!g3.has(Y)&&!y3.test(Y)&&!h3.test(Y)}).sort(([J],[Y])=>J.localeCompare(Y)).slice(0,512));return{home:Q($.HOME||k3()),path:EQ($.PATH??"").join(":")||RQ,temporaryDirectory:Q($.TMPDIR||$.TMP||$.TEMP||f3()),variables:X}}function wQ($=process.env,Q=()=>m3().shell){let Z=(J)=>{if(!J||!/^\/[A-Za-z0-9._/-]*\/(?:bash|zsh)$/.test(J))return!1;try{return S3(J,w3.X_OK),b3(J).isFile()}catch{return!1}};if(Z($.SHELL))return $.SHELL;let X;try{X=Q()}catch{X=void 0}return Z(X)?X:"/bin/zsh"}import{readFileSync as fQ,realpathSync as bQ,statSync as c3}from"fs";import{homedir as d3}from"os";import{dirname as p3,isAbsolute as u3,join as A9,sep as l3}from"path";var P5="--proxy",I5="--proxy-ca-file",s3=262144;class J0 extends Error{}function k8($){let Q;try{Q=new URL($)}catch{throw new J0("The proxy must be a URL like https://proxy.example.com:3128.")}if(Q.protocol!=="https:"&&Q.protocol!=="http:")throw new J0("The proxy URL must use the https or http scheme.");if(!Q.hostname)throw new J0("The proxy URL must name a host.");if(Q.port!==""&&Number(Q.port)<1)throw new J0("The proxy URL must use a port between 1 and 65535.");if(Q.pathname!==""&&Q.pathname!=="/"||Q.search||Q.hash)throw new J0("The proxy URL must not carry a path, query, or fragment.");return Q.toString()}function R5($){let Q=new URL($.url),Z=Q.port||(Q.protocol==="https:"?"443":"80");return`${Q.hostname}:${Z}`}function n3($={}){let Q=$.home??d3(),Z=$.statePath??kQ();return[p3(Z),A9(Q,".ssh"),A9(Q,".aws"),A9(Q,".gnupg"),A9(Q,".kube"),A9(Q,"Library","Keychains")]}function i3($,Q){return Q===$||Q.startsWith($+l3)}function a3($,Q={}){if(!u3($))throw new J0("The proxy CA file must be an absolute path.");let Z,X,J;try{Z=bQ($);let V=c3(Z);X=V.size,J=V.isFile()}catch{throw new J0("The proxy CA file does not exist or is not readable.")}if(!J)throw new J0("The proxy CA file must be a regular file.");if(X>s3)throw new J0("The proxy CA file must be 256 KB or smaller.");let Y=n3(Q).flatMap((V)=>{try{let G=bQ(V);return G===V?[V]:[V,G]}catch{return[V]}});for(let V of[$,Z])if(Y.some((G)=>i3(G,V)))throw new J0("The proxy CA file must not live inside a credential directory.");let K;try{K=fQ(Z,"utf8")}catch{throw new J0("The proxy CA file is not readable.")}if(!K.includes("-----BEGIN CERTIFICATE-----"))throw new J0("The proxy CA file must be a PEM certificate bundle.");return Z}function E5($,Q={}){if(!$.proxyUrl)throw new J0("A proxy URL is required.");let Z=k8($.proxyUrl),X=$.caFile===void 0?void 0:a3($.caFile,Q);return{version:n9,url:Z,...X===void 0?{}:{caFile:X}}}function S5($,Q=fetch){if(!$)return Q;let Z,X=!1;return(Y,K)=>{if(!X){if($.caFile)try{Z=fQ($.caFile,"utf8")}catch{throw new J0(`The configured proxy CA file is not readable: ${$.caFile}`)}X=!0}let V={...K,proxy:$.url,...Z===void 0?{}:{tls:{ca:Z}}};return Q(Y,V)}}import{createHash as o3}from"crypto";import{isAbsolute as gQ,join as yQ,relative as hQ,resolve as a9,sep as vQ}from"path";var i9=x.string().min(1).refine(gQ,"absolute path required"),f8=x.strictObject({version:x.literal(1),apiOrigin:x.url(),channel:x.enum(["staging","production"]),stateDirectory:i9,workspaceRoot:i9,lifetime:x.enum(["persistent","ephemeral"]),executionMode:x.enum(["confined","host"]).default("confined"),name:x.string().min(1).max(160).default("Reason headless worker"),slots:x.number().int().min(1).max(4).default(1),shutdownGraceMs:x.number().int().min(0).max(300000).default(30000),proxy:x.strictObject({version:x.literal(n9),url:x.string().refine(($)=>{try{return k8($)===$}catch{return!1}},"invalid proxy URL"),caFile:i9.optional()}).optional(),userChrome:x.boolean().optional(),cloudSessions:x.literal(!0).optional(),localLogins:x.boolean().optional(),folders:x.array(i9).min(1).max(31).optional()}),r3=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,v5=x.discriminatedUnion("channel",[f8,f8.extend({channel:x.literal("pr"),apiOrigin:x.string(),prEnvironment:x.string()}),f8.extend({channel:x.literal("local-qa"),apiOrigin:x.string()})]).superRefine(($,Q)=>{if($.channel==="local-qa"){if(!r3.test($.apiOrigin))Q.addIssue({code:"custom",message:"local QA worker requires an exact HTTPS trycloudflare.com quick-tunnel origin"})}else if($.channel==="pr"){let X=$.prEnvironment,J=/^https:\/\/([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)\.up\.railway\.app$/.exec($.apiOrigin),Y=J?.[1]?.match(/(?:^|-)pr-[0-9]+(?=-|$)/g)?.map((K)=>K.replace(/^-/,""));if(!X||/^pr-[1-9][0-9]*$/.exec(X)?.[0]!==X||J?.[0]!==$.apiOrigin||Y?.length!==1||Y[0]!==X)Q.addIssue({code:"custom",message:"PR worker requires explicit prEnvironment and an exact same-PR HTTPS Railway origin"})}else{let X=new URL($.apiOrigin);if(X.origin!==$.apiOrigin||X.username||X.password||X.protocol!=="https:"&&!(X.protocol==="http:"&&m8(X.origin))||!m8(X.origin)&&!mQ($.channel,X.origin))Q.addIssue({code:"custom",message:"API origin must match channel (or loopback)"})}if(!x9($.workspaceRoot,$.stateDirectory))Q.addIssue({code:"custom",message:"state and workspace must be disjoint"});let Z=$.folders??[];if(new Set([$.workspaceRoot,...Z]).size!==Z.length+1||Z.some((X)=>!x9(X,$.stateDirectory)))Q.addIssue({code:"custom",message:"folders must be distinct and disjoint from state"})});function t3($){return yQ($.stateDirectory,`headless-${$.channel==="pr"?$.prEnvironment:$.channel}`)}function c5($,Q={},Z={}){let X=$.executionMode==="host"?"unsandboxed":"sandboxed";return{worker:Object.freeze({executionMode:X,runtimeDirectory:t3($),handsSlots:$.slots,readiness:Object.freeze({...Q}),...Z.persistentTerminals?{persistentTerminals:!0}:{},...Z.probing?.length?{probing:Object.freeze([...Z.probing])}:{},...Z.displayVideo?{displayVideo:!0}:{},...Z.handsBrowser&&Q["hands.connect"]===!0?{handsBrowser:!0}:{},...Z.githubSignedIn===void 0?{}:{githubSignedIn:Z.githubSignedIn},...$.userChrome!==!1&&Z.userChrome?{userChrome:Z.userChrome}:{},...$.cloudSessions&&Q["automation.call.v1"]===!0?{cloudSessions:!0}:{}}),proxy:$.proxy??null}}function x9($,Q){if(w0(Q,$))return!1;return!w0($,Q)||b0(yQ(vQ,hQ(a9($),a9(Q))))}function w0($,Q){let Z=hQ(a9($),a9(Q));return Z===""||Z!==".."&&!Z.startsWith(`..${vQ}`)&&!gQ(Z)}function d5($){let{proxy:Q,userChrome:Z,cloudSessions:X,localLogins:J,folders:Y,...K}=$;return o3("sha256").update(JSON.stringify(K)).digest("hex")}import{readdir as e3}from"fs/promises";var $1=15000;function Q1($){let Q=$ instanceof Error&&"code"in $?$.code:null;return Q==="EPERM"||Q==="EACCES"}function Z1($){return new q("folder_access_denied",`macOS blocked Reason from opening ${$}. Allow Reason in System Settings \u203A Privacy & Security \u203A Files and Folders `+"(or Full Disk Access), then try again.")}async function cQ($,{timeoutMs:Q=$1,open:Z=(X)=>e3(X)}={}){let X,J=new Promise((Y)=>{X=setTimeout(()=>Y("pending"),Q)});try{if(await Promise.race([Z($).then(()=>"open"),J])==="pending")throw new q("folder_access_pending",`macOS is asking whether Reason may open ${$}. Answer the prompt on this Mac, then try again.`)}catch(Y){if(Q1(Y))throw Z1($);if(Y instanceof q)throw Y}finally{clearTimeout(X)}}import{chmodSync as b1,closeSync as k1,constants as s8,fstatSync as f1,lstatSync as VZ,openSync as m1,readSync as g1,realpathSync as n8,unlinkSync as y1}from"fs";import{lookup as h1}from"dns/promises";import{createRequire as v1}from"module";import{request as c1}from"http";import{request as d1}from"https";import l0 from"net";import{platform as LZ}from"os";import{basename as p1,extname as u1,isAbsolute as FZ,relative as i8,resolve as G9,sep as a8}from"path";var dQ=String.raw`
|
|
5
|
+
`),j=/^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS) (\S+) HTTP\/1\.1$/.exec(U.shift()??"");if(!j)throw Error("preview_request_invalid");C9(j[2]);let O=!1,C=0,A=[];for(let T of U){let S=/^([a-zA-Z0-9-]+):[ \t]*([^\x00-\x08\x0a-\x1f\x7f]*)$/.exec(T);if(!S)throw Error("preview_header_invalid");if(S[1].toLowerCase()===g$){C++;let g=Buffer.from(S[2].trim());O=g.length===Z.length&&j4(g,Buffer.from(Z))}else if(S[1].toLowerCase()!=="host")A.push(T)}if(!O||C!==1||J||F.signal.aborted)throw Error("preview_connection_denied");let R=await $.connect(F.signal);if(J||F.signal.aborted)throw R.destroy(),Error("preview_closed");X.add(R),R.on("error",()=>G.destroy()),R.once("close",()=>{X.delete(R),G.destroy()}),G.once("close",()=>R.destroy()),G.setTimeout(0);let P=[`${j[1]} ${j[2]} HTTP/1.1`,`Host: 127.0.0.1:${R.remotePort}`,...A,"",""].join(`\r
|
|
6
|
+
`);R.write(Buffer.concat([Buffer.from(P,"latin1"),L.subarray(W+4)])),R.pipe(G),G.pipe(R),G.resume()}});await new Promise((G,F)=>{Y.once("error",F),Y.listen(0,"127.0.0.1",G)});let K=Y.address();if(!K||typeof K==="string")throw Y.close(),Error("preview_bind_failed");function V(){if(J)return;J=!0,Q.removeEventListener("abort",V);for(let G of X)G.destroy();X.clear(),Y.close()}if(Q.addEventListener("abort",V,{once:!0}),Q.aborted)V();return{port:K.port,headers:{[g$]:Z},close:V}}var _4=60000,A4=1e4,x4=5000,P4=/^(?:text\/(?!event-stream)|application\/(?:(?:x-)?javascript|json|[a-z.+-]*\+json|xml|[a-z.+-]*\+xml|wasm)|image\/svg\+xml)/i;function I4($,Q,Z,X){let J=(G)=>Q.find(([F])=>F.toLowerCase()===G)?.[1],Y=(G)=>X.find(([F])=>F.toLowerCase()===G)?.[1],K=Number(Y("content-length")??Number.NaN);if($!=="GET"||Z!==200||J("range")!==void 0||Y("content-encoding")!==void 0||!P4.test(Y("content-type")??"")||/\bno-transform\b/i.test(Y("cache-control")??"")||K<1024)return null;let V=(G)=>new RegExp(`(?:^|,)\\s*${G}\\s*(?:,|$|;\\s*q=(?:1|0?\\.0*[1-9]))`,"i").test(J("accept-encoding")??"");return V("br")?"br":V("gzip")?"gzip":null}function R4($,Q){let Z=$.filter(([X])=>X.toLowerCase()==="vary").map(([,X])=>X).join(", ");return[...$.filter(([X])=>!["vary","etag","content-md5"].includes(X.toLowerCase())),...$.filter(([X])=>X.toLowerCase()==="etag").map(([X,J])=>[X,J.startsWith("W/")?J:`W/${J}`]),["Content-Encoding",Q],["Vary",Z.split(",").some((X)=>/^\s*(?:accept-encoding|\*)\s*$/i.test(X))?Z:Z?`${Z}, Accept-Encoding`:"Accept-Encoding"]]}async function E4($){process.stderr.write(`${JSON.stringify({event:"worker_preview.open_refused",job_id:$.jobId,port:$.port,reason_code:$.reason})}
|
|
7
|
+
`);let Q=$.binding,Z;try{Z=v9($.deviceRelayUrl,"device")}catch{return}if(!Q)return;await new Promise((X)=>{let J=new O9(Z,{followRedirects:!1,perMessageDeflate:!1,maxPayload:4096}),Y=setTimeout(()=>{J.terminate(),X()},v.authorizationMs*2);J.addEventListener("open",()=>{J.send(JSON.stringify({type:"refused",binding:Q,reason:$.reason})),J.close(1000,`worker_refused_${$.reason}`)}),J.addEventListener("error",()=>{clearTimeout(Y),X()}),J.addEventListener("close",()=>{clearTimeout(Y),X()})})}async function S4($,Q){let Z=Date.now()+A4,X;for(;;){if(!Q())return"closed";let J=X??=$.refusal().finally(()=>{X=void 0}),Y,K=await Promise.race([J.catch(()=>"port_unproved"),new Promise((V)=>{Y=setTimeout(()=>V("port_check_timeout"),v.authorizationMs)})]).finally(()=>clearTimeout(Y));if(K===null)return null;if(!["listener_unproved","port_check_timeout"].includes(K)||Date.now()+500>=Z)return K;await new Promise((V)=>setTimeout(V,500))}}async function y$($){let Q=I0($.binding),Z=()=>!$.signal.aborted&&Date.now()<Q.expiresAtMs,X=Q.expiresAtMs>Date.now()+v.lifetimeMs+x4?"binding_mismatch":await S4($.port,Z);if(X)throw await E4({deviceRelayUrl:$.deviceRelayUrl,binding:Q,jobId:Q.jobId,port:Q.port,reason:X}),Error("preview_not_authorized",{cause:X});let J=v9($.deviceRelayUrl,"device"),Y=await m$($.port,$.signal),K;try{K=new O9(J,{followRedirects:!1,perMessageDeflate:!1,maxPayload:v.upload*1.4+300000})}catch(N){throw Y.close(),N}let V=new Map,G=!1,F=!1,B=0,H=!1,z,L,W,U=new Promise((N)=>{W=N}),j,O,C=new Promise((N,M)=>{j=N,O=M}),A=!1,R=(N)=>{let M=Buffer.isBuffer(N)?N:JSON.stringify(N);if(B+=Buffer.byteLength(M),!Z()||F||K.readyState!==O9.OPEN)return P(Z()?"relay_closed":"expired");if(K.bufferedAmount>v.relayBuffered)return P("relay_backlog");if(B>v.total)return P("quota");K.send(M)};function P(N="closed"){if(F)return;F=!0,clearInterval(g),clearTimeout(S),$.signal.removeEventListener("abort",T);for(let M of V.values())M.stop();V.clear(),Y.close(),K.close(1000,`worker_${N}`),O(Error("preview_closed")),W()}let T=()=>P("aborted"),S=setTimeout(()=>P("pair_timeout"),v.requestMs),g=setInterval(async()=>{if(!Z())return P($.signal.aborted?"aborted":"expired");if(H)return;H=!0;try{let N=z??=Promise.resolve().then(()=>$.port.check()).finally(()=>{z=void 0}),M=await _8(()=>N);if(M===!1)return P("port_refused");if(M){L=void 0;return}if(Date.now()-(L??=Date.now())>_4)return P("port_unknown");for(let D of V.values())D.stop()}finally{H=!1}},1000);if($.signal.addEventListener("abort",T,{once:!0}),!Z())P($.signal.aborted?"aborted":"expired");K.addEventListener("open",()=>R({type:"hello",binding:Q,messages:v.upload,window:v.window})),K.addEventListener("close",()=>P("relay_closed")),K.addEventListener("error",()=>P("relay_error")),K.addEventListener("message",(N)=>{try{if(!Z()||F)return P($.signal.aborted?"aborted":"expired");if(typeof N.data!=="string")throw Error("preview_frame_invalid");if(B+=Buffer.byteLength(N.data),B>v.total)return P("quota");let M=b$(N.data);if(!G){if(M.type!=="hello"||!c0(Q,M.binding))return P("binding_mismatch");G=!0,A=M.bytes===!0,clearTimeout(S),j();return}if(M.type==="hello"||M.type==="refused")return P("invalid_frame");if(M.type==="request"){E(M).catch(()=>P("invalid_request"));return}let D=V.get(M.id);if(!D)return;if(M.type==="cancel"||M.type==="end")D.stop();else if(M.type==="credit"&&D.credit)D.credit();else if(M.type==="data"&&D.ws){if(D.ws.readyState!==O9.OPEN||D.ws.bufferedAmount>v.buffered)return D.stop();let w=q9(M.data,v.upload);D.ws.send(M.binary?w:w.toString("utf8"))}else P("invalid_frame")}catch{P("invalid_frame")}});async function E(N){if(V.has(N.id)||V.size>=v.streams)return P("stream_limit");if(!Z())return P($.signal.aborted?"aborted":"expired");let M=new AbortController,D,w,k,f=0,_=(b=!1)=>{if(!V.delete(N.id))return;clearTimeout(D),M.abort(),w?.close(1000,"preview_closed"),k?.(),R({type:b?"end":"cancel",id:N.id})},m={stop:()=>_(),credit:()=>{f++,k?.()}};if(V.set(N.id,m),D=setTimeout(_,v.requestMs),!await T9(()=>$.port.check())||!Z()||M.signal.aborted)return _();let c=C9(N.path);if(N.upgrade){if(N.method!=="GET"||N.body)return _();let b=N.headers.find(([y])=>y.toLowerCase()==="sec-websocket-protocol")?.[1].split(",").map((y)=>y.trim());if(b?.some((y)=>!/^[a-zA-Z0-9._-]{1,100}$/.test(y))||(b?.length??0)>8)return _();w=new O9(`ws://127.0.0.1:${Y.port}${c}`,b,{headers:Y.headers,followRedirects:!1,perMessageDeflate:!1,maxPayload:v.upload}),m.ws=w,w.binaryType="arraybuffer",w.addEventListener("open",()=>{clearTimeout(D),R({type:"ws",id:N.id,protocol:w.protocol})}),w.addEventListener("message",(y)=>{let d=typeof y.data!=="string",l=w$(y.data);if(l.length>v.upload)return _();R({type:"data",id:N.id,data:l.toString("base64"),binary:d})}),w.addEventListener("error",()=>_()),w.addEventListener("close",(y)=>_(y.wasClean));return}let u=q9(N.body,v.upload),o=C4({hostname:"127.0.0.1",port:Y.port,path:c,method:N.method,headers:{...Object.fromEntries(D8(N.headers)),...Y.headers,connection:"close"},signal:M.signal,agent:!1,maxHeaderSize:16384},async(b)=>{try{let y=[];for(let N0=0;N0<b.rawHeaders.length;N0+=2)y.push([b.rawHeaders[N0],b.rawHeaders[N0+1]]);let d=b.statusCode??502,l=I4(N.method,N.headers,d,y),G0=l==="br"?O4({flush:A8.BROTLI_OPERATION_FLUSH,params:{[A8.BROTLI_PARAM_QUALITY]:5}}):l==="gzip"?D4({level:6,flush:A8.Z_SYNC_FLUSH}):void 0;if(R({type:"head",id:N.id,status:d,headers:D8(l?R4(y,l):y)}),clearTimeout(D),G0)T4(b,G0,()=>{});for await(let N0 of G0??b){let H0=Buffer.from(N0);for(let U0=0;U0<H0.length;U0+=v.chunk){if(f===0&&!M.signal.aborted)await new Promise((C0)=>{k=C0});if(k=void 0,M.signal.aborted)return;f--;let y0=H0.subarray(U0,U0+v.chunk);R(A?S$(N.id,y0):{type:"data",id:N.id,data:y0.toString("base64"),binary:!0})}}_(!0)}catch{_()}});o.on("error",()=>_()),o.end(u)}return await C,{close:P,closed:U}}import{execFile as w4}from"child_process";import{readFile as b4,readdir as k4,readlink as f4}from"fs/promises";import{connect as g4}from"net";import{setTimeout as m4}from"timers/promises";var y4={directory:k4,text:($)=>b4($,"utf8"),link:f4};class x8 extends Error{code;constructor($="port_unproved"){super("preview_port_ownership_unproved");this.code=$}}var e=($)=>new x8($),c9="preview_listener_unproved",h$="00000000000000000000000001000000";async function h4($,Q,Z=y4){let X=new Map;for(let K of["tcp","tcp6"]){let V=await Z.text(`/proc/net/${K}`);if(V.length>4194304)throw e();for(let G of V.split(`
|
|
8
|
+
`).slice(1)){let F=G.trim().split(/\s+/);if(F.length<10||!["0A","01"].includes(F[3]))continue;let[B,H]=F[1].split(":"),[z,L]=F[2].split(":");if(Number.parseInt(H,16)!==Q)continue;let W=(O)=>O==="0100007F"||O==="0000000000000000FFFF00000100007F"||O===h$,U=F[3]==="0A";if(!(W(B)||U&&/^0+$/.test(B??"")))continue;if(!U&&!W(z))continue;let j=F[9];if(!/^[1-9][0-9]*$/.test(j))continue;X.set(j,{kernelId:j,port:Q,peerPort:U?null:Number.parseInt(L,16),state:U?"listen":"established",host:B===h$?"::1":"127.0.0.1"})}}let J=await Z.directory("/proc");if(J.length>8192)throw e();let Y=[];for(let K of J){if(!/^[1-9][0-9]*$/.test(K))continue;try{let V=await Z.text(`/proc/${K}/stat`),G=V.slice(V.lastIndexOf(")")+2).trim().split(/\s+/);if(Number(G[2])!==$)continue;let F=await Z.directory(`/proc/${K}/fd`);if(F.length>1024)throw e();let B=[];for(let L of F){if(!/^[0-9]+$/.test(L))continue;let W=await Z.link(`/proc/${K}/fd/${L}`).catch(()=>""),U=/^socket:\[([0-9]+)\]$/.exec(W)?.[1],j=U?X.get(U):void 0;if(j)B.push({...j,pid:Number(K),processGroupId:$,descriptor:L})}let H=await Z.text(`/proc/${K}/stat`),z=H.slice(H.lastIndexOf(")")+2).trim().split(/\s+/);if(G[19]===z[19]&&G[2]===z[2])Y.push(...B)}catch(V){if(V instanceof Error&&V.message==="preview_port_ownership_unproved")throw V}}return Y}function v4($,Q,Z){if($.length>2097152)throw e();let X=0,J=0,Y="",K="",V="",G="",F=[],B=()=>{if(X<1||J!==Q||!/^\d+$/.test(Y)||!/^0x[0-9a-f]+$/i.test(K))return;let H=G==="LISTEN"&&["*","127.0.0.1","[::ffff:127.0.0.1]","[::1]"].some((L)=>V===`${L}:${Z}`),z=new RegExp(`^(?:127\\.0\\.0\\.1|\\[::ffff:127\\.0\\.0\\.1\\]|\\[::1\\]):${Z}->(?:127\\.0\\.0\\.1|\\[::ffff:127\\.0\\.0\\.1\\]|\\[::1\\]):([0-9]+)$`).exec(V);if(H||G==="ESTABLISHED"&&z)F.push({pid:X,processGroupId:J,descriptor:Y,kernelId:K,state:H?"listen":"established",port:Z,peerPort:H?null:Number(z[1]),host:V.startsWith("[::1]:")?"::1":"127.0.0.1"})};for(let H of $.split(/[\0\n]/)){let z=H.slice(1);if(H[0]==="p")B(),X=Number(z),J=0,Y=K=V=G="";else if(H[0]==="g")J=Number(z);else if(H[0]==="f")B(),Y=z,K=V=G="";else if(H[0]==="d")K=z;else if(H[0]==="n")V=z;else if(H.startsWith("TST="))G=H.slice(4)}return B(),F}async function c4($,Q){if(process.platform==="linux")return h4($,Q);if(process.platform!=="darwin")throw e();let Z=await new Promise((X,J)=>w4("/usr/sbin/lsof",["-nP","-a","-g",String($),`-iTCP:${Q}`,"-F0pgfdnT"],{timeout:1000,maxBuffer:2097152,encoding:"utf8",env:{PATH:"/usr/bin:/bin",LC_ALL:"C"}},(Y,K)=>Y?J(e()):X(K)));return v4(Z,$,Q)}function v$($,Q={}){let Z=I0($.binding),X=Q.inspectSockets??c4,J=Q.monotonicNow??(()=>performance.now());async function Y(){let z=()=>{if(Date.now()>=Z.expiresAtMs)throw e("binding_expired");if($.deniedPorts.has(Z.port))throw e("port_denied")};z();let L=await $.readCurrentJob(),W=L?.job,U=W?.process;if(z(),!L)throw e("server_stopped");if(!c0(Z,L.binding)||W?.jobId!==Z.jobId)throw e("binding_changed");if(W.state!=="running"||W.finishedAtMs!==null||W.leaseExpiresAtMs<Z.expiresAtMs)throw e("job_not_running");if(!U||U.pid<1||U.pid!==U.processGroupId||U.executorLaunchId!==L.executorLaunchId)throw e("process_unproved");return{pid:U.pid,launch:U.executorLaunchId,started:W.startedAtMs}}let K,V;async function G(){let z=await Y(),L=await X(z.pid,Z.port).catch(()=>{throw Error(c9)}),W=await Y();if(z.pid!==W.pid||z.launch!==W.launch||z.started!==W.started)throw e("job_restarted");return L}async function F(z){for(;;){if(V&&V.startedAt>=z)return V.sockets;if(K&&K.startedAt>=z)return await K.sockets;if(K){await K.sockets.catch(()=>{});continue}let L={startedAt:J(),sockets:G()};K=L;try{let W=await L.sockets;if(!V||V.startedAt<=L.startedAt)V={startedAt:L.startedAt,sockets:W};return W}finally{if(K===L)K=void 0}}}async function B(z=()=>{},L=J()){z();let W=await F(L);if(z(),Date.now()>=Z.expiresAtMs)throw e("binding_expired");if(!W.some((U)=>U.state==="listen"))throw Error(c9);return W}async function H(){try{return await B(()=>{},J()-1000),null}catch(z){if(z instanceof Error&&z.message===c9)return"listener_unproved";return z instanceof x8?z.code:"port_unproved"}}return{refusal:H,async check(){let z=await H();if(z==="listener_unproved")throw Error(c9);return z===null},async connect(z){if(z.aborted)throw e();let L=J()+2000,W=new AbortController,U=new Promise((P)=>W.signal.addEventListener("abort",()=>P(null),{once:!0})),j,O=()=>{W.abort(),j?.destroy()},C=setTimeout(O,2000);z.addEventListener("abort",O,{once:!0});let A=()=>{if(W.signal.aborted||z.aborted||J()>=L||j?.destroyed)throw O(),e()};async function R(P){A();let T=await Promise.race([P().then((S)=>({value:S})),U]);if(A(),!T)throw e();return T.value}try{let P=await R(()=>B(A,J()-1000));A();let T=P.some((N)=>N.state==="listen"&&N.host==="127.0.0.1")?"127.0.0.1":"::1",S=g4({host:T,port:Z.port,signal:z});j=S,S.once("close",O),await R(()=>new Promise((N,M)=>{S.once("connect",N),S.once("error",M)}));let g=S.localPort;if(!g)throw e();let E=J();while(!(await R(()=>B(A,E))).some((N)=>N.state==="established"&&N.peerPort===g))await R(()=>m4(Math.min(20,Math.max(1,L-J())),void 0,{signal:W.signal})),E=J();return A(),S}catch(P){throw O(),P}finally{clearTimeout(C),z.removeEventListener("abort",O),j?.off("close",O),W.abort()}}}}var d4=4,p4=[2375,2376,9222,9229];function c$($){let Q=new Set(p4);for(let Z of $){let X=new URL(Z);Q.add(Number(X.port||(["https:","wss:"].includes(X.protocol)?443:80)))}return Q}function R0(){throw new q("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var u4=60000;function d$($){let Q=new AbortController,Z=new Map,X=(G)=>JSON.stringify([G.jobId,G.port]);function J(G){let F=$.authority.owner;if(Q.signal.aborted||!$.isCurrent()||$.expiresAtMs<=Date.now()||G.organization_id!==F.organization_id||G.user_id!==F.user_id||G.device_id!==F.device_id)R0()}function Y(G){let F;try{F=$.environment.current()}catch{return null}return F.binding.target_generation===G.generation&&F.binding.target_fence_id===G.fenceId&&F.run_id===$.runId&&F.device_id===$.authority.owner.device_id&&F.root_id===$.authority.rootId?F:null}async function K(G,F,B){let H=await V(G,F,B);if(H!=="moved")return H;let z=await V(G,F,B);return z==="moved"?null:z}async function V(G,F,B){try{J($.authority.owner);let H=$.identity();if(!H||B.aborted||G.expiresAtMs<=Date.now()||G.expiresAtMs>$.expiresAtMs)return null;let z=F.opened,L=z!==void 0&&H.generation>z.generation,W=Y(H);if(L){if(W){if(W.revision<=z.revision||G.expiresAtMs>Date.parse(W.expires_at)||W.binding.target_revision!==z.attachmentRevision||W.binding.root_grant_revision!==z.grantRevision)return null;F.recoveringSinceMs=void 0}else if(Date.now()-(F.recoveringSinceMs??=Date.now())>u4)return null}else if(!W||G.expiresAtMs>Date.parse(W.expires_at)||z&&(H.generation!==z.generation||H.fenceId!==z.fenceId))return null;let U=await $.inspect(G.jobId,B),j=$.identity(),O=j&&Y(j);J($.authority.owner);let C=W&&{generation:H.generation,fenceId:H.fenceId,snapshotId:W.snapshot_id,revision:W.revision,attachmentRevision:W.binding.target_revision,grantRevision:W.binding.root_grant_revision},A=L?z:C;if(B.aborted||!j)return null;if(j.generation!==H.generation||j.fenceId!==H.fenceId||O?.snapshot_id!==W?.snapshot_id||O?.revision!==W?.revision)return"moved";let R=U.ok&&U.job.environmentSnapshotId!==void 0&&U.job.environmentRevision!==void 0?{snapshotId:U.job.environmentSnapshotId,revision:U.job.environmentRevision}:null;if(!U.ok||U.generation!==H.generation||!A||!R)return null;if((R.snapshotId!==A.snapshotId||R.revision!==A.revision)&&(L||!$.environment.carried(R.snapshotId,R.revision)))return null;if(!z&&H.generation===G.generation&&H.fenceId===G.fenceId)F.opened={...A,...R};return{executorLaunchId:$.executorLaunchId,job:U.job,binding:{organizationId:$.authority.owner.organization_id,userId:$.authority.owner.user_id,deviceId:$.authority.owner.device_id,rootId:$.authority.rootId,runId:$.runId,attachmentRevision:A.attachmentRevision,grantRevision:A.grantRevision,generation:A.generation,fenceId:A.fenceId,jobId:U.job.jobId,port:G.port,expiresAtMs:G.expiresAtMs}}}catch{return null}}return{async open(G,F,B){J(F);let{binding:H,deviceRelayUrl:z}=k$(G);if(B.aborted||H.expiresAtMs<=Date.now()||H.expiresAtMs>Date.now()+v.lifetimeMs||new URL(z).origin!==$.authority.relayOrigin)R0();let L=X(H),W=Z.get(L);if(W){if(!c0(W.binding,H)||W.relay!==z)R0();if(await W.opened,!await T9(()=>W.port.check())||B.aborted||W.abort.signal.aborted)R0();return{opened:!0,binding:H}}if(Z.size>=d4)R0();let U=new AbortController,j={},O=v$({binding:H,deniedPorts:$.authority.deniedPorts,readCurrentJob:()=>K(H,j,U.signal)}),C=()=>U.abort();if(B.addEventListener("abort",C,{once:!0}),Q.signal.addEventListener("abort",C,{once:!0}),B.aborted||Q.signal.aborted)C();let A=y$({binding:H,deviceRelayUrl:z,port:O,signal:U.signal}),R={binding:H,relay:z,abort:U,port:O,opened:A};Z.set(L,R);let P=()=>{if(B.removeEventListener("abort",C),Q.signal.removeEventListener("abort",C),Z.get(L)===R)Z.delete(L)};try{if((await A).closed.then(P),B.removeEventListener("abort",C),J(F),U.signal.aborted||!await T9(()=>O.check()))R0();return{opened:!0,binding:H}}catch{U.abort(),P(),R0()}},async close(G,F){J(F);let{binding:B}=f$(G),H=Z.get(X(B));if(!H||!c0(H.binding,B))R0();return H.abort.abort(),await H.opened.then((z)=>z.closed,()=>{return}),{closed:!0,binding:B}},dispose(){Q.abort();for(let G of Z.values())G.abort.abort();Z.clear()}}}import{WebSocket as P8}from"ws";var p$=($)=>("data"in $)?$.data.length:$.bytes,u$=2*s$;function i($){throw new q($,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var t0=($)=>!["starting","running"].includes($.state);function D2($,Q,Z=Date.now()){let X=["relay_url","session_id","expires_at","cols","rows","pty","workspace"];if(Object.keys($).length!==X.length||Object.keys($).some((F)=>!X.includes(F))||!I8(Q)||!I8($.session_id)||typeof $.expires_at!=="string"||typeof $.relay_url!=="string"||$.relay_url.length>4096||![$.cols,$.rows].every((F)=>Number.isSafeInteger(F)&&Number(F)>=1&&Number(F)<=R8))i("invalid_pty_request");let J=$.pty;if(!J||typeof J!=="object"||Array.isArray(J))i("invalid_pty_request");let Y=J;if(Object.keys(Y).length!==2||Y.version!==1||!u9(Y.jobId))i("invalid_pty_request");let K;try{K=new URL($.relay_url)}catch{return i("invalid_pty_request")}if(!["ws:","wss:"].includes(K.protocol)||K.username||K.password||K.hash||K.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(K.hostname))i("invalid_pty_request");let V=Date.parse($.expires_at);if(!Number.isSafeInteger(V)||V<=Z)i("invalid_pty_request");return{workspace:l$($.workspace)??i("invalid_pty_request"),session:{jobId:Y.jobId,sessionId:$.session_id,operationId:Q,relayUrl:K.href,cols:Number($.cols),rows:Number($.rows),leaseExpiresAtMs:Math.min(V,Z+43200000)}}}async function a$($){let{session:Q,binding:Z}=$;if(Z.assertCurrent(),$.signal.aborted||Date.now()>=Q.leaseExpiresAtMs)i("cancelled");let X=new P8(Q.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:d9}),J=new AbortController,Y=()=>{},K=()=>{J.abort(),Y()};$.signal.addEventListener("abort",K,{once:!0});let V=setTimeout(K,Math.max(1,Q.leaseExpiresAtMs-Date.now())),G=[],F=0,B=0,H=0,z=!1,L=!1,W=!1,U,j,O,C=(N)=>{O=new q(N,"Bound terminal input was refused."),K()};X.on("error",()=>C("pty_relay_unavailable")),X.on("close",K),X.on("message",(N,M)=>{if(J.signal.aborted)return;if(!L){C("pty_not_ready");return}let D=Array.isArray(N)?Buffer.concat(N):N instanceof ArrayBuffer?Buffer.from(N):N;if(D.length===0)return;let w=G.at(-1),k=M&&w!==void 0&&"data"in w&&w.data.length+D.length<=d9;if(D.length>d9||F+D.length>n$){C("pty_input_backpressure");return}if(k)w.data=Buffer.concat([w.data,D]);else if(M)G.push({data:Buffer.from(D)});else try{let f=JSON.parse(D.toString("utf8"));if(f&&f.t==="close"&&Object.keys(f).length===1){W=!0,K();return}if(!f||f.t!=="resize"||Object.keys(f).length!==3||![f.cols,f.rows].every((_)=>Number.isSafeInteger(_)&&_>=1&&_<=R8))throw Error("invalid_control");G.push({cols:f.cols,rows:f.rows,bytes:D.length})}catch{C("invalid_pty_control");return}F+=D.length,Y()});function A(N){return i$(JSON.stringify({...Z.scope,version:1,sessionId:Q.sessionId,operationId:Q.operationId,job:{...N,output:[],pty:N.pty?{...N.pty,output:[]}:void 0}}))}function R(N){if(!N.ok)i(N.error);let M=N.job;if(N.generation!==Z.scope.generation||M.jobId!==Q.jobId||!M.pty||M.leaseExpiresAtMs>Q.leaseExpiresAtMs||M.process&&M.process.executorLaunchId!==Z.scope.executorLaunchId||M.process&&j&&(M.process.pid!==j.pid||M.process.processGroupId!==j.processGroupId)||M.state!=="starting"&&(M.environmentRevision!==Z.environment.revision||M.environmentSnapshotId!==Z.environment.snapshotId))i("pty_binding_changed");if(A(M),M.process)j??={...M.process};return M}async function P(N){Z.assertCurrent();let M=await Z.request(N,J.signal);if(Z.assertCurrent(),J.signal.aborted)i("cancelled");let D=R(M);if(D.inputSequence!==B)i("job_input_sequence");if(!t0(D)&&D.leaseExpiresAtMs<=Date.now())i("pty_binding_changed");return D}function T(N){if(Z.assertCurrent(),J.signal.aborted||X.readyState!==P8.OPEN||X.bufferedAmount+Buffer.byteLength(N)>u$)i("pty_output_backpressure");X.send(N)}function S(N){if(N.firstCursor>H+1)H=N.firstCursor-1;for(let M of N.pty.output){if(M.cursor<=H)continue;if(M.cursor!==H+1)i("pty_output_gap");let D=Buffer.from(M.dataBase64,"base64");if(X.bufferedAmount+D.length>u$)return!1;T(D),H=M.cursor}if(H!==N.nextCursor)i("pty_output_gap");return!0}async function g(N,M){let D;try{await Promise.race([$.emit(N,M),new Promise((w,k)=>{D=setTimeout(()=>k(new q("pty_event_unavailable","Terminal metadata delivery timed out.")),2000)})])}finally{clearTimeout(D)}}async function E(){let N=AbortSignal.timeout(p9),M=Z.request({jobId:Q.jobId,action:"cancel",input:{}},N),D,w=new Promise((k,f)=>{if(D=()=>f(new q("pty_cleanup_unconfirmed","Terminal cleanup acknowledgement was not observed within authority.")),N.addEventListener("abort",D,{once:!0}),N.aborted)D()});try{let k=await Promise.race([M,w]);if(N.aborted)i("pty_cleanup_unconfirmed");return R(k)}finally{N.removeEventListener("abort",D)}}try{await new Promise((k,f)=>{let _=setTimeout(()=>{K(),f(new q("pty_relay_unavailable","Terminal pairing timed out."))},5000),m=()=>{clearTimeout(_),f(new q("cancelled","Terminal pairing was cancelled."))};if(J.signal.addEventListener("abort",m,{once:!0}),X.once("open",()=>{clearTimeout(_),J.signal.removeEventListener("abort",m),k()}),J.signal.aborted)m()}),Z.assertCurrent(),z=!0,U=await P({jobId:Q.jobId,action:"start",input:{mode:"pty",cols:Q.cols,rows:Q.rows,leaseExpiresAtMs:Q.leaseExpiresAtMs}});let N=Date.now()+5000;while(U.state==="starting"){if(Date.now()>=N)i("pty_not_ready");await new Promise((k)=>setTimeout(k,25)),U=await P({jobId:Q.jobId,action:"inspect",input:{after:H}})}if(U.state!=="running"||U.inputSequence!==0||U.leaseExpiresAtMs<=Date.now())i("pty_not_ready");await g("pty.ready",A(U)),L=!0,T(JSON.stringify({t:"open",cols:U.pty.cols,rows:U.pty.rows,receipt:A(U)}));let M=!1,D=0,w=!1;while(!J.signal.aborted){let k=U.firstCursor>H+1,f=S(U);if(t0(U)){if(f)break}else if(k)M=!0;else if(M&&f&&Date.now()>=D){M=!1,D=Date.now()+1000;let{cols:m,rows:c}=U.pty;for(let u of[{cols:m,rows:c>1?c-1:2},{cols:m,rows:c}]){if(t0(U))break;let o=++B;if(U=await P({jobId:Q.jobId,action:"resize",input:{sequence:o,...u}}),U.inputSequence!==o)i("job_input_sequence")}continue}let _=t0(U)||w?void 0:G.shift();if(_){F-=p$(_);let m=++B;try{U=await P("data"in _?{jobId:Q.jobId,action:"input",input:{sequence:m,dataBase64:_.data.toString("base64")}}:{jobId:Q.jobId,action:"resize",input:{sequence:m,cols:_.cols,rows:_.rows}})}catch(c){if(!(c instanceof q)||c.code!=="job_input_backpressure")throw c;B-=1,G.unshift(_),F+=p$(_),w=!0;continue}if(U.inputSequence!==m)i("job_input_sequence")}else if(await new Promise((m)=>{let c=setTimeout(m,w||!f?10:50);if(Y=()=>{clearTimeout(c),m()},J.signal.aborted||!w&&G.length)Y()}),w=!1,Y=()=>{},!J.signal.aborted&&f)try{U=await P({jobId:Q.jobId,action:"inspect",input:{after:H}})}catch(m){if(!W||!(m instanceof q)||m.code!=="cancelled")throw m}}}catch(N){O??=N}finally{if(L=!1,G.length=0,clearTimeout(V),$.signal.removeEventListener("abort",K),K(),z&&(!U||!t0(U)))try{U=await E()}catch{U=void 0}try{if(!U||!t0(U)||U.pty?.cleanup!=="confirmed")i("pty_cleanup_unconfirmed");let N=A(U);if(X.readyState===P8.OPEN)await new Promise((M)=>{let D=setTimeout(M,500);X.send(JSON.stringify({t:"exit",code:U.exitCode,receipt:N}),()=>{clearTimeout(D),M()})});await g("pty.stopped",N)}catch(N){O??=N}X.terminate()}if(O)throw O;if($.signal.aborted)i("cancelled");if(!U)i("pty_cleanup_unconfirmed");return{receipt:A(U)}}import{createHash as l4,randomUUID as JQ}from"crypto";import{spawnSync as s4}from"child_process";import{closeSync as o$,constants as E8,fstatSync as n4,fsyncSync as i4,lstatSync as D9,mkdirSync as a4,mkdtempSync as YQ,openSync as r$,readFileSync as o4,readdirSync as GQ,realpathSync as $9,rmSync as S8,unlinkSync as r4}from"fs";import{createConnection as t4}from"net";import{dirname as e4,join as d0,sep as $3}from"path";import{tmpdir as Q3}from"os";var $0=new Map,E0=new Map;function D0($,Q){return l4("sha256").update(JSON.stringify([$,Q])).digest("hex")}function e0($){try{a4($,{mode:448})}catch(Z){if(!(Z instanceof Error&&("code"in Z)&&Z.code==="EEXIST"))throw Z}let Q=D9($);if(!Q.isDirectory()||Q.isSymbolicLink()||Q.uid!==process.getuid?.()||(Q.mode&63)!==0||$9($)!==$)throw new q("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function Z3($){let Q;try{Q=D9($)}catch(Z){if(Z instanceof Error&&"code"in Z&&Z.code==="ENOENT")return!1;throw Z}return!Q.isDirectory()||Q.isSymbolicLink()||GQ($).length>0}function zQ($){let Q=D0($.root,$.runId),Z=$.previousRuntimeDirectories?.find((K)=>Z3(d0(K,"jobs",Q.slice(0,16))))??$.runtimeDirectory;e0(Z);let X=d0(Z,"jobs");e0(X);let J=d0(X,Q.slice(0,16));if($.maxScopes!==void 0){let K=GQ(X);if(!Number.isSafeInteger($.maxScopes)||$.maxScopes<1||K.length>$.maxScopes||!K.includes(Q.slice(0,16))&&K.length>=$.maxScopes)throw new q("process_journal_capacity","Managed process receipt capacity is full; preserve uncertain jobs and reconcile their existing receipts before starting more work.")}e0(J);let Y=YQ(d0($9("/tmp"),"reason-j-"));try{return e0(Y),{journalDirectory:J,scopeId:Q,socketPath:d0(Y,"control.sock"),disposeSocket:()=>S8(Y,{recursive:!0,force:!0})}}catch(K){throw S8(Y,{recursive:!0,force:!0}),K}}var X3=60000,J3=5000;function Y3($){let Q=s4("ps",["-o","lstart=","-p",String($)],{encoding:"utf8",timeout:2000,env:{...process.env,LC_ALL:"C",LANG:"C"}}),Z=Q.status===0?/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(Q.stdout.trim()):null,X=Z?"JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(Z[1]):-1;if(!Z||X<0||X%3!==0)return null;let J=new Date(Number(Z[6]),X/3,Number(Z[2]),Number(Z[3]),Number(Z[4]),Number(Z[5])).getTime();return Number.isFinite(J)?J:null}function KQ($,Q={}){let Z=d0($.journalDirectory,"owner.lock"),X;try{X=r$(Z,E8.O_RDONLY|E8.O_NOFOLLOW)}catch{return null}try{let J=n4(X);if(!J.isFile()||J.nlink!==1||J.uid!==process.getuid?.()||(J.mode&63)!==0||J.size>4096)return null;let Y=null;try{Y=JSON.parse(o4(X,"utf8"))}catch{}let K;if(Y===null){if((Q.now??Date.now)()-J.mtimeMs<X3)return null;K={reason:"never_written",executorLaunchId:null}}else{let{version:F,scopeId:B,pid:H,createdAtMs:z,executorLaunchId:L}=Y;if(F!==1||B!==$.scopeId||typeof L!=="string"||typeof H!=="number"||!Number.isSafeInteger(H)||H<1||H===process.pid||typeof z!=="number"||!Number.isSafeInteger(z))return null;if(!(Q.exists??((U)=>{try{return process.kill(U,0),!0}catch(j){return!(j instanceof Error&&("code"in j)&&j.code==="ESRCH")}}))(H))K={reason:"owner_exited",executorLaunchId:L};else{let U=(Q.startedAtMs??Y3)(H);if(U===null||U<=z+J3)return null;K={reason:"pid_reused",executorLaunchId:L}}}let V=D9(Z);if(V.dev!==J.dev||V.ino!==J.ino)return null;r4(Z);let G=r$($.journalDirectory,E8.O_RDONLY);try{i4(G)}finally{o$(G)}return K}catch{return null}finally{o$(X)}}function VQ($){let Q={...$,workspace:$.workspace&&Object.freeze({...$.workspace}),previewAuthority:$.previewAuthority&&Object.freeze({...$.previewAuthority,owner:Object.freeze({...$.previewAuthority.owner}),deniedPorts:new Set($.previewAuthority.deniedPorts)})},Z=D0(Q.root,Q.runId);if($0.has(Z)||Q.operationId!==void 0&&E0.has(Q.operationId))throw new q("hands_jobs_busy","The Session already has a live Hands job supervisor.");let X={binding:Q,key:Z,terminals:new Map};if(Q.previewAuthority&&Q.environment)X.previews=d$({authority:Q.previewAuthority,runId:Q.runId,expiresAtMs:Q.expiresAtMs,executorLaunchId:Q.executorLaunchId,environment:Q.environment,isCurrent:()=>$0.get(X.key)===X,identity:()=>{try{return Q9(Q)}catch{return null}},inspect:(J,Y)=>{if($0.get(X.key)!==X)throw new q("preview_unavailable","The Hands supervisor is no longer current.");return FQ(Q,{jobId:J,action:"inspect",input:{after:0}},Y)}});if($0.set(Z,X),Q.operationId!==void 0)E0.set(Q.operationId,X);return()=>{if($0.get(X.key)===X)$0.delete(X.key);if(Q.operationId!==void 0&&E0.get(Q.operationId)===X)E0.delete(Q.operationId);X.previews?.dispose();for(let J of X.terminals.values())J.abort()}}var G3=5000,z3=20;async function y2($){let Q=(J)=>{throw new q("hands_rebind_unavailable",J)};if(!O0($.operationId)||!O0($.runId)||!O0($.fenceId)||!S0($.targetGeneration))Q("Reason sent an invalid Hands rebind.");let Z=E0.get($.operationId);if(!Z||Z.binding.root!==$.root)return Q("No live Hands supervisor owns this operation.");for(let J=Date.now()+G3;;){if($.signal?.aborted)Q("The Hands rebind was cancelled.");if(E0.get($.operationId)!==Z)Q("The Hands supervisor is no longer current.");let Y=null;try{Y=Q9(Z.binding)}catch{}if(Y&&Y.generation===$.targetGeneration&&Y.fenceId===$.fenceId)break;if(Y&&Y.generation>$.targetGeneration||Date.now()>=J)Q("The executor did not adopt this take.");await new Promise((K)=>setTimeout(K,z3))}if(E0.get($.operationId)!==Z||$0.get(Z.key)!==Z)Q("The Hands supervisor is no longer current.");let X=D0($.root,$.runId);if(Z.key===X)return;if($0.has(X))Q("The taking run already has a live Hands job supervisor.");$0.delete(Z.key);for(let J of Z.terminals.values())J.abort();Z.key=X,$0.set(X,Z)}function h2($){let Q="operationId"in $?E0.get($.operationId):$0.get(D0($.root,$.runId)),Z=Q&&Q.binding.root===$.root?Q.binding:void 0;if(!Z?.environment||Z.expiresAtMs<=Date.now())throw new q("environment_unavailable","No live Hands supervisor owns this environment.");return Z.environment.install($.payload)}async function v2($){let Q=$0.get(D0($.root,$.runId));if(!Q?.previews||!$.owner)throw new q("preview_unavailable","No authenticated Hands supervisor owns this preview.");return Q.previews.open($.payload,$.owner,$.signal)}async function c2($){let Q=$0.get(D0($.root,$.runId));if(!Q?.previews||!$.owner||$.signal.aborted)throw new q("preview_unavailable","No authenticated Hands supervisor owns this preview.");return Q.previews.close($.payload,$.owner)}async function d2($){let Q=D0($.root,$.runId),Z=$0.get(Q),X=Z?.binding,J=X?.runId,Y=X?.previewAuthority,K=X?.environment,V=$.owner&&{...$.owner},G=$.authority&&{...$.authority},F=()=>{throw new q("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!Z||!X||!Y||!K||!V||!G||!X.workspace)return F();let B=Object.freeze({...X.workspace}),H=Q9(X),z=K.current(),L=()=>{if($0.get(Q)!==Z||V.organization_id!==Y.owner.organization_id||V.user_id!==Y.owner.user_id||V.device_id!==Y.owner.device_id||$.deviceId!==Y.owner.device_id||$.rootId!==Y.rootId||p0($.workspace)!==p0(B))F();let U=Q9(X),j=K.current();if(U.generation!==H.generation||U.fenceId!==H.fenceId||j.run_id!==J||j.device_id!==$.deviceId||j.root_id!==$.rootId||j.snapshot_id!==z.snapshot_id||j.revision!==z.revision||j.binding.target_generation!==H.generation||j.binding.target_fence_id!==H.fenceId||G.device_id!==$.deviceId||G.binding!==j.binding.kind||G.target_revision!==j.binding.target_revision||G.root_grant_revision!==j.binding.root_grant_revision||G.target_generation!==H.generation||G.target_fence_id!==H.fenceId)F()};if(L(),new URL($.session.relayUrl).origin!==Y.relayOrigin||Z.terminals.has($.session.jobId)||Z.terminals.size>=4)return F();let W=new AbortController;Z.terminals.set($.session.jobId,W);try{return await a$({session:{...$.session,leaseExpiresAtMs:Math.min($.session.leaseExpiresAtMs,H.expiresAtMs,Date.parse(z.expires_at))},signal:AbortSignal.any([$.signal,W.signal]),emit:$.emit,binding:{assertCurrent:L,environment:{revision:z.revision,snapshotId:z.snapshot_id},scope:{runId:$.runId,deviceId:$.deviceId,rootId:$.rootId,workspace:B,binding:z.binding.kind,targetRevision:z.binding.target_revision,rootGrantRevision:z.binding.root_grant_revision,generation:H.generation,fenceId:H.fenceId,executorLaunchId:H.executorLaunchId},request:(U,j)=>HQ(H,w8(JSON.stringify({...U,type:"job",version:2,generation:H.generation,id:JQ()})),j)}})}finally{if(Z.terminals.get($.session.jobId)===W)Z.terminals.delete($.session.jobId)}}async function p2($){if(u9($.payload.jobId))throw new q("pty_binding_required","PTY jobs require the bound terminal capability.");let Q=$0.get(D0($.root,$.runId))?.binding;if(!Q||Q.expiresAtMs<=Date.now())throw new q("hands_jobs_unavailable","No live Hands supervisor owns this Session and root.");return FQ(Q,$.payload,$.signal)}var K3=1e4,V3=20,F3=QQ/2,H3=$Q/2,U3=($)=>$.output.reduce((Q,Z)=>Q+Z.text.length,0);async function FQ($,Q,Z){if(Object.keys(Q).some((F)=>!["jobId","action","input","waitForExitMs"].includes(F)))throw new q("invalid_payload","Unexpected job control field.");let{waitForExitMs:X,...J}=Q;if(X!==void 0&&(J.action!=="start"||typeof J.input!=="object"||J.input===null||!("script"in J.input)||typeof X!=="number"||!Number.isSafeInteger(X)||X<1||X>K3))throw new q("invalid_payload","Only a script start may wait for its job, within its bound.");let Y=(F)=>{let B=Q9($);return HQ(B,w8(JSON.stringify({...F,type:"job",version:2,generation:B.generation,id:JQ()})),Z)},K=await Y(J);if(X===void 0)return K;let V=Date.now()+X,G=K;while(G.ok&&["starting","running"].includes(G.job.state)&&G.job.output.length<F3&&U3(G.job)<H3&&!Z.aborted&&Date.now()<V){if(await new Promise((F)=>setTimeout(F,Math.min(V3,V-Date.now()))),Z.aborted)break;try{let F=await Y({jobId:J.jobId,action:"inspect",input:{after:0}});if(!F.ok)break;G=F}catch{break}}return G}function Q9($){if($.expiresAtMs<=Date.now())throw new q("hands_jobs_unavailable","Hands authority expired.");let Q=$.readIdentity?$.readIdentity():$;if(!Q||!S0(Q.generation)||!O0(Q.fenceId)||Q.generation<$.generation||Q.generation===$.generation&&Q.fenceId!==$.fenceId)throw new q("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return $.generation=Q.generation,$.fenceId=Q.fenceId,{...$}}function HQ($,Q,Z){if(Z.aborted)return Promise.reject(new q("cancelled","Job control was cancelled."));return new Promise((X,J)=>{let Y=t4($.socketPath),K="",V=!1,G,F=(H,z)=>{if(V)return;if(V=!0,clearTimeout(G),Z.removeEventListener("abort",B),Y.destroy(),H)J(H);else X(z)},B=()=>F(new q("cancelled","Job control waiter cancelled; inspect before retrying mutations."));Z.addEventListener("abort",B,{once:!0}),Y.setEncoding("utf8"),G=setTimeout(()=>F(new q("hands_job_result_unknown","Job control timed out; inspect before retrying mutations.")),Math.min(1e4,Math.max(1,$.expiresAtMs-Date.now()))),Y.on("error",()=>F(new q("hands_job_result_unknown","Hands job control connection failed."))),Y.once("connect",()=>Y.write(JSON.stringify({version:1,scopeId:$.scopeId,fenceId:$.fenceId,executorLaunchId:$.executorLaunchId,request:Q})+`
|
|
9
|
+
`)),Y.on("data",(H)=>{if(K+=H,Buffer.byteLength(K)>ZQ)F(new q("hands_job_result_unknown","Hands job result exceeded its bound."))}),Y.once("end",()=>{if(Date.now()>=$.expiresAtMs){F(new q("hands_job_result_unknown","Hands authority expired before the result was acknowledged."));return}try{let H=XQ(K.trim());if(H.id!==Q.id||H.generation!==$.generation||H.ok&&H.job.jobId!==Q.jobId)throw Error("identity");F(void 0,H)}catch{F(new q("hands_job_result_unknown","Hands job response identity or shape was invalid."))}}),Y.once("close",()=>{if(!V)F(new q("hands_job_result_unknown","Hands job control closed before an acknowledged result."))})})}function W3($){let Q=$9($.root),Z=$.authority,X=Date.parse($.leaseUntil),J=()=>{if($.signal.throwIfAborted(),!Number.isFinite(X)||X<=Date.now())throw Error("local_device_gh_lease_expired")};if(J(),Z.readOnly&&Z.generation===null)return{root:Q,readOnly:!0,signal:$.signal,deadlineMs:X,assertCurrent:J};let Y=D0(Q,$.runId),K=$0.get(Y),V=K?.binding;if(!V?.environment||!V.workspace||V.localGithubConfinement!==!0)throw Error("local_device_gh_confinement_unavailable");let G=V.environment.current(),F=()=>{J();let H=V.environment.current(),z=Q9(V);if($0.get(Y)!==K||H.github_auth!=="local_gh"||H.run_id!==V.runId||Z.runId!==$.runId||H.device_id!==Z.deviceId||H.root_id!==Z.rootId||String(H.binding.root_grant_revision)!==Z.rootRevision||H.binding.target_generation!==Z.generation||H.binding.target_fence_id!==Z.fenceId||z.generation!==Z.generation||z.fenceId!==Z.fenceId||H.snapshot_id!==G.snapshot_id||H.revision!==G.revision)throw Error("local_device_gh_authority_changed")};F();let B=l9(Q,V.workspace);return{root:B.boundary,signal:$.signal,deadlineMs:X,privateDirectory:e4(V.environment.path),repoPath:B.path,readOnly:Z.readOnly,forbiddenSecretValues:Object.values(G.variables),secretNames:(H)=>Object.entries(G.variables).filter(([,z])=>z.trim()===H.trim()).map(([z])=>`variable ${z}`),assertCurrent:F}}async function u2($,Q){let Z=t$.parse($.request),X=e$.parse($.authority);if(Z.kind!=="pr_merge"){if(X.merge)throw Error("local_device_gh_merge_authority_invalid");return Q(W3($))}if(!X.merge||X.readOnly||X.runId!==$.runId||X.repoFullName!==Z.repoFullName||X.merge.source==="agent"&&(X.generation===null||X.fenceId===null))throw Error("local_device_gh_merge_authority_invalid");let J=$9($.root),Y=D9(J),K=Date.parse($.leaseUntil);if(!Number.isFinite(K)||K<=Date.now())throw Error("local_device_gh_lease_expired");let V=$9(Q3());if(V===J||V.startsWith(J+$3))throw Error("local_device_gh_private_scope_unavailable");let G=YQ(d0(V,"reason-gh-merge-"));try{e0(G);let F=()=>{if($.signal.throwIfAborted(),Date.now()>=K)throw Error("local_device_gh_lease_expired");let B=D9($.root);if(B.isSymbolicLink()||B.dev!==Y.dev||B.ino!==Y.ino||$9($.root)!==J)throw Error("local_device_gh_authority_changed");e0(G)};return F(),await Q({root:J,readOnly:!1,privateDirectory:G,forbiddenSecretValues:[],signal:$.signal,deadlineMs:K,assertCurrent:F})}finally{S8(G,{recursive:!0,force:!0})}}var BQ=43200000;function Z9($){return Number.isSafeInteger($)&&Math.abs($)<=8640000000000000?$:null}function UQ($){return $!==null&&typeof $==="object"&&!Array.isArray($)}function WQ($,Q){return Object.keys($).length===Q.length&&Q.every((Z)=>Object.hasOwn($,Z))}function s2($){if(!UQ($)||!WQ($,["version","outcome","clock_source","validation_now_ms","expiry_ms","remaining_ms","maximum_lifetime_ms","cli_artifact"])||$.version!==1||$.maximum_lifetime_ms!==43200000||typeof $.outcome!=="string"||!["accepted","parse","noncanonical","expired","over_cap"].includes($.outcome)||typeof $.clock_source!=="string"||!["date_now","injected"].includes($.clock_source))return null;for(let X of["validation_now_ms","expiry_ms"]){let J=$[X];if(J!==null&&(typeof J!=="number"||Z9(J)===null))return null}if($.remaining_ms!==null&&(typeof $.remaining_ms!=="number"||!Number.isSafeInteger($.remaining_ms)))return null;let Q=typeof $.expiry_ms==="number"&&typeof $.validation_now_ms==="number"?$.expiry_ms-$.validation_now_ms:null;if($.remaining_ms!==(Q!==null&&Number.isSafeInteger(Q)?Q:null))return null;if($.outcome==="parse"&&$.expiry_ms!==null)return null;if($.outcome!=="parse"&&$.expiry_ms===null)return null;if($.outcome==="expired"&&!(typeof Q==="number"&&Q<=0))return null;if($.outcome==="over_cap"&&!(typeof Q==="number"&&Q>43200000))return null;if($.outcome==="accepted"&&!(typeof Q==="number"&&Q>0&&Q<=43200000))return null;let Z=$.cli_artifact;if(!UQ(Z)||!WQ(Z,["kind","status","sha256","observed_at_ms"])||Z.observed_at_ms!==null&&(typeof Z.observed_at_ms!=="number"||Z9(Z.observed_at_ms)===null))return null;if(Z.kind==="entrypoint_file"){if(Z.status!=="observed"||typeof Z.sha256!=="string"||!/^[a-f0-9]{64}$/.test(Z.sha256)||Z.observed_at_ms===null)return null}else if(Z.kind!=="unavailable"||Z.sha256!==null||typeof Z.status!=="string"||!["unsupported_entrypoint","read_failed","file_changed","size_limit","time_limit"].includes(Z.status))return null;return $}var b8=x.strictObject({kind:x.enum(["workspace_source","mcp_control"]),target_revision:x.number().int().nonnegative(),root_grant_revision:x.number().int().positive()}),NQ=new RegExp(s9.tokenPattern),B3=x.strictObject({token_url:x.url().max(2048),request_token:x.string().min(1).max(8192).regex(NQ),aws_credentials_url:x.url().max(2048).nullable()});function MQ($,Q){let Z=(X,J)=>{try{let Y=new URL(X);return Y.origin===new URL(Q).origin&&Y.pathname===J&&!Y.username&&!Y.password&&!Y.search&&!Y.hash}catch{return!1}};if(!NQ.test($.request_token)||!Z($.token_url,s9.tokenPath)||$.aws_credentials_url!==null&&!Z($.aws_credentials_url,s9.awsPath))return null;return{REASON_OIDC_TOKEN_URL:$.token_url,REASON_OIDC_REQUEST_TOKEN:$.request_token,...$.aws_credentials_url!==null?{AWS_CONTAINER_CREDENTIALS_FULL_URI:$.aws_credentials_url,AWS_CONTAINER_AUTHORIZATION_TOKEN:$.request_token}:{}}}function jQ($){return new TextEncoder().encode($).byteLength}function L3($){return jQ(JSON.stringify($)+`
|
|
10
|
+
`)}var qQ=x.strictObject({version:x.literal(1),snapshot_id:x.uuid(),revision:x.number().int().positive(),run_id:x.string().min(1).max(160),device_id:x.uuid(),root_id:x.uuid(),binding:b8.extend({target_generation:x.number().int().positive(),target_fence_id:x.uuid()}),expires_at:x.iso.datetime({offset:!0}),variables:x.record(x.string().max(128).regex(LQ),x.string().refine(($)=>!$.includes("\x00")&&jQ($)<=_0.valueBytes)).refine(($)=>Object.keys($).length<=_0.variables),github_auth:x.literal("local_gh").optional(),git:x.strictObject({base_url:x.url().max(2048),token:x.string().min(1).max(4096).regex(/^[A-Za-z0-9._~-]+$/),expires_at:x.iso.datetime({offset:!0})}).nullable(),cloud_access:B3.optional()}).refine(($)=>$.github_auth!=="local_gh"||$.git===null,"conflicting git authority").refine(($)=>L3($)<=_0.snapshotBytes,"snapshot too large");import{randomUUID as N3}from"crypto";import{closeSync as M3,constants as CQ,fstatSync as j3,lstatSync as TQ,mkdirSync as OQ,openSync as q3,readFileSync as C3,realpathSync as DQ,renameSync as T3,unlinkSync as O3,writeFileSync as D3}from"fs";import{dirname as _Q,resolve as AQ}from"path";var xQ=65536;function n9($){try{return TQ($),!0}catch(Q){if(Q instanceof Error&&"code"in Q&&Q.code==="ENOENT")return!1;throw Q}}function _9($,Q=!1){if(!n9($)){if(!Q)throw Error("worker_state_missing");PQ($),OQ($,{mode:448})}let Z=TQ($);if(!Z.isDirectory()||Z.isSymbolicLink()||Z.uid!==process.getuid?.()||(Z.mode&63)!==0||DQ($)!==AQ($))throw Error("worker_state_directory_not_private_or_canonical")}function PQ($){let Q=_Q($);if(!n9(Q))PQ(Q),OQ(Q,{mode:448});if(DQ(Q)!==AQ(Q))throw Error("worker_parent_not_canonical")}function A9($,Q=xQ){let Z=q3($,CQ.O_RDONLY|CQ.O_NOFOLLOW);try{let X=j3(Z);if(!X.isFile()||X.nlink!==1||X.uid!==process.getuid?.()||(X.mode&63)!==0||X.size>Q)throw Error("worker_file_not_private");return C3(Z,"utf8")}finally{M3(Z)}}function IQ($,Q,Z=xQ){let X=JSON.stringify(Q);if(X===void 0)throw Error("worker_file_invalid");let J=X+`
|
|
11
|
+
`;if(Buffer.byteLength(J,"utf8")>Z)throw Error("worker_file_too_large");if(_9(_Q($)),n9($))A9($,Z);let Y=`${$}.${N3()}`;try{D3(Y,J,{mode:384,flag:"wx"}),T3(Y,$)}finally{if(n9(Y))O3(Y)}}import{spawn as _3}from"child_process";import{basename as A3,isAbsolute as J5}from"path";var x3=0,P3=120000,I3=15000,R3=65536;function k8($=process.execPath,Q=process.argv[1]){let Z=A3($),X=(Z.startsWith("bun")||Z.startsWith("node"))&&typeof Q==="string"&&Q.length>0;return{command:$,prefix:X?[Q]:[]}}function Y5($={}){let{command:Q,prefix:Z}=k8($.executablePath,$.sourceEntrypoint),X=$.spawnProcess??_3,J=$.now??Date.now,Y=null,K=0,V=!1,G=(B)=>{try{B.kill("SIGKILL")}catch{}},F=()=>{if(V||Y)return;let B;try{B=X(Q,[...Z,"__device","__hands-worker","--handoff-fd",String(x3)],{cwd:"/",env:{PATH:process.env.PATH??"/usr/local/bin:/usr/bin:/bin"},shell:!1,stdio:["pipe","ignore","pipe"]})}catch{return}Y=B,K=J(),B.on("error",()=>{if(Y===B)Y=null}),B.once("exit",(H,z)=>{if(Y!==B)return;Y=null,$.log?.("hands.worker_prespawn_exited",{exit_code:H,exit_signal:z})}),$.log?.("hands.worker_prespawned",{pid:B.pid??null})};return{arm:F,take(B){let H=Y;if(!H||V)return null;let z=B.args.at(-1),L=B.options.env,W=B.options.cwd,U=[...Z,"__device","__hands-worker","--config"];if(B.command!==Q||B.args.length!==U.length+1||U.some((A,R)=>B.args[R]!==A)||typeof z!=="string"||!L||typeof W!=="string"||B.options.shell||JSON.stringify(B.options.stdio)!==JSON.stringify(["ignore","ignore","pipe"]))return null;Y=null;let j=H.stdin,O={configPath:z,cwd:W,env:Object.fromEntries(Object.entries(L).filter((A)=>typeof A[1]==="string"))},C=JSON.stringify(O);if(H.exitCode!==null||H.signalCode!==null||!j||j.destroyed||J()-K>=P3-I3||Buffer.byteLength(C,"utf8")>R3)return G(H),null;return j.on("error",()=>{return}),j.end(C),H.once("exit",()=>{F()}),$.log?.("hands.worker_prespawn_taken",{pid:H.pid??null}),H},adopt(B){B.once("exit",()=>{F()})},close(){if(V=!0,Y)G(Y);Y=null}}}import{accessSync as f3,constants as g3,statSync as m3}from"fs";import{homedir as y3,tmpdir as h3,userInfo as v3}from"os";var E3=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 S3=["BUN_CONFIG_","BUN_INSPECT","DYLD_","NODE_DEBUG"],w3=new Set(["BUN_INSTALL"]);var b3=/^--(?:max-old-space-size|max-semi-space-size|stack-size)=\d{1,9}$/;function k3($){return($??"").split(/\s+/).filter(Boolean).every((Q)=>b3.test(Q.replaceAll("_","-")))}function RQ($){return Object.keys($).filter((Q)=>E3.has(Q)&&!(Q==="NODE_OPTIONS"&&k3($[Q]))||S3.some((Z)=>Q.startsWith(Z))||Q.startsWith("BUN_")&&!w3.has(Q)).sort()}var c3=new Set(["HOME","PATH","PWD","OLDPWD","SHLVL","_","TMPDIR","TMP","TEMP","SHELL","BASH_ENV","ENV","ZDOTDIR","PROMPT_COMMAND","IFS","CDPATH","GLOBIGNORE","SHELLOPTS","BASHOPTS","NODE_PATH"]),d3=/^(?:ARA_|REASON_|PI_|GIT_|GH_|GITHUB_|LD_|DYLD_|BUN_|BASH_FUNC_|SSH_)/,p3=/TOKEN|SECRET|PASSW|PASSPHRASE|CREDENTIAL|API_?KEY|ACCESS_?KEY|PRIVATE_?KEY|AUTH/i,u3=/^[A-Za-z_][A-Za-z0-9_]*$/;function wQ($=process.env){let Q=(J)=>{if(!J.startsWith("/")||/[\0\r\n]/.test(J)||J.length>32768)throw Error("invalid_host_execution_environment");return J};if($.PATH!==void 0&&(/[\0\r\n]/.test($.PATH)||$.PATH.length>32768))throw Error("invalid_host_execution_environment");let Z=new Set(RQ($)),X=Object.fromEntries(Object.entries($).filter((J)=>{let[Y,K]=J;return typeof K==="string"&&K.length<=32768&&!K.includes("\x00")&&Y.length<=128&&u3.test(Y)&&!Z.has(Y)&&!c3.has(Y)&&!d3.test(Y)&&!p3.test(Y)}).sort(([J],[Y])=>J.localeCompare(Y)).slice(0,512));return{home:Q($.HOME||y3()),path:SQ($.PATH??"").join(":")||EQ,temporaryDirectory:Q($.TMPDIR||$.TMP||$.TEMP||h3()),variables:X}}function bQ($=process.env,Q=()=>v3().shell){let Z=(J)=>{if(!J||!/^\/[A-Za-z0-9._/-]*\/(?:bash|zsh)$/.test(J))return!1;try{return f3(J,g3.X_OK),m3(J).isFile()}catch{return!1}};if(Z($.SHELL))return $.SHELL;let X;try{X=Q()}catch{X=void 0}return Z(X)?X:"/bin/zsh"}import{readFileSync as gQ,realpathSync as kQ,statSync as l3}from"fs";import{homedir as s3}from"os";import{dirname as n3,isAbsolute as i3,join as x9,sep as a3}from"path";var S5="--proxy",w5="--proxy-ca-file",o3=262144;class J0 extends Error{}function g8($){let Q;try{Q=new URL($)}catch{throw new J0("The proxy must be a URL like https://proxy.example.com:3128.")}if(Q.protocol!=="https:"&&Q.protocol!=="http:")throw new J0("The proxy URL must use the https or http scheme.");if(!Q.hostname)throw new J0("The proxy URL must name a host.");if(Q.port!==""&&Number(Q.port)<1)throw new J0("The proxy URL must use a port between 1 and 65535.");if(Q.pathname!==""&&Q.pathname!=="/"||Q.search||Q.hash)throw new J0("The proxy URL must not carry a path, query, or fragment.");return Q.toString()}function b5($){let Q=new URL($.url),Z=Q.port||(Q.protocol==="https:"?"443":"80");return`${Q.hostname}:${Z}`}function r3($={}){let Q=$.home??s3(),Z=$.statePath??fQ();return[n3(Z),x9(Q,".ssh"),x9(Q,".aws"),x9(Q,".gnupg"),x9(Q,".kube"),x9(Q,"Library","Keychains")]}function t3($,Q){return Q===$||Q.startsWith($+a3)}function e3($,Q={}){if(!i3($))throw new J0("The proxy CA file must be an absolute path.");let Z,X,J;try{Z=kQ($);let V=l3(Z);X=V.size,J=V.isFile()}catch{throw new J0("The proxy CA file does not exist or is not readable.")}if(!J)throw new J0("The proxy CA file must be a regular file.");if(X>o3)throw new J0("The proxy CA file must be 256 KB or smaller.");let Y=r3(Q).flatMap((V)=>{try{let G=kQ(V);return G===V?[V]:[V,G]}catch{return[V]}});for(let V of[$,Z])if(Y.some((G)=>t3(G,V)))throw new J0("The proxy CA file must not live inside a credential directory.");let K;try{K=gQ(Z,"utf8")}catch{throw new J0("The proxy CA file is not readable.")}if(!K.includes("-----BEGIN CERTIFICATE-----"))throw new J0("The proxy CA file must be a PEM certificate bundle.");return Z}function k5($,Q={}){if(!$.proxyUrl)throw new J0("A proxy URL is required.");let Z=g8($.proxyUrl),X=$.caFile===void 0?void 0:e3($.caFile,Q);return{version:i9,url:Z,...X===void 0?{}:{caFile:X}}}function f5($,Q=fetch){if(!$)return Q;let Z,X=!1;return(Y,K)=>{if(!X){if($.caFile)try{Z=gQ($.caFile,"utf8")}catch{throw new J0(`The configured proxy CA file is not readable: ${$.caFile}`)}X=!0}let V={...K,proxy:$.url,...Z===void 0?{}:{tls:{ca:Z}}};return Q(Y,V)}}import{createHash as $1}from"crypto";import{isAbsolute as yQ,join as hQ,relative as vQ,resolve as o9,sep as cQ}from"path";var a9=x.string().min(1).refine(yQ,"absolute path required"),m8=x.strictObject({version:x.literal(1),apiOrigin:x.url(),channel:x.enum(["staging","production"]),stateDirectory:a9,workspaceRoot:a9,lifetime:x.enum(["persistent","ephemeral"]),executionMode:x.enum(["confined","host"]).default("confined"),name:x.string().min(1).max(160).default("Reason headless worker"),slots:x.number().int().min(1).max(4).default(1),shutdownGraceMs:x.number().int().min(0).max(300000).default(30000),proxy:x.strictObject({version:x.literal(i9),url:x.string().refine(($)=>{try{return g8($)===$}catch{return!1}},"invalid proxy URL"),caFile:a9.optional()}).optional(),userChrome:x.boolean().optional(),cloudSessions:x.literal(!0).optional(),localLogins:x.boolean().optional(),folders:x.array(a9).min(1).max(31).optional()}),Q1=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,u5=x.discriminatedUnion("channel",[m8,m8.extend({channel:x.literal("pr"),apiOrigin:x.string(),prEnvironment:x.string()}),m8.extend({channel:x.literal("local-qa"),apiOrigin:x.string()})]).superRefine(($,Q)=>{if($.channel==="local-qa"){if(!Q1.test($.apiOrigin))Q.addIssue({code:"custom",message:"local QA worker requires an exact HTTPS trycloudflare.com quick-tunnel origin"})}else if($.channel==="pr"){let X=$.prEnvironment,J=/^https:\/\/([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)\.up\.railway\.app$/.exec($.apiOrigin),Y=J?.[1]?.match(/(?:^|-)pr-[0-9]+(?=-|$)/g)?.map((K)=>K.replace(/^-/,""));if(!X||/^pr-[1-9][0-9]*$/.exec(X)?.[0]!==X||J?.[0]!==$.apiOrigin||Y?.length!==1||Y[0]!==X)Q.addIssue({code:"custom",message:"PR worker requires explicit prEnvironment and an exact same-PR HTTPS Railway origin"})}else{let X=new URL($.apiOrigin);if(X.origin!==$.apiOrigin||X.username||X.password||X.protocol!=="https:"&&!(X.protocol==="http:"&&y8(X.origin))||!y8(X.origin)&&!mQ($.channel,X.origin))Q.addIssue({code:"custom",message:"API origin must match channel (or loopback)"})}if(!P9($.workspaceRoot,$.stateDirectory))Q.addIssue({code:"custom",message:"state and workspace must be disjoint"});let Z=$.folders??[];if(new Set([$.workspaceRoot,...Z]).size!==Z.length+1||Z.some((X)=>!P9(X,$.stateDirectory)))Q.addIssue({code:"custom",message:"folders must be distinct and disjoint from state"})});function Z1($){return hQ($.stateDirectory,`headless-${$.channel==="pr"?$.prEnvironment:$.channel}`)}function l5($,Q={},Z={}){let X=$.executionMode==="host"?"unsandboxed":"sandboxed";return{worker:Object.freeze({executionMode:X,runtimeDirectory:Z1($),handsSlots:$.slots,readiness:Object.freeze({...Q}),...Z.persistentTerminals?{persistentTerminals:!0}:{},...Z.probing?.length?{probing:Object.freeze([...Z.probing])}:{},...Z.displayVideo?{displayVideo:!0}:{},...Z.handsBrowser&&Q["hands.connect"]===!0?{handsBrowser:!0}:{},...Z.githubSignedIn===void 0?{}:{githubSignedIn:Z.githubSignedIn},...$.userChrome!==!1&&Z.userChrome?{userChrome:Z.userChrome}:{},...$.cloudSessions&&Q["automation.call.v1"]===!0?{cloudSessions:!0}:{}}),proxy:$.proxy??null}}function P9($,Q){if(w0(Q,$))return!1;return!w0($,Q)||b0(hQ(cQ,vQ(o9($),o9(Q))))}function w0($,Q){let Z=vQ(o9($),o9(Q));return Z===""||Z!==".."&&!Z.startsWith(`..${cQ}`)&&!yQ(Z)}function s5($){let{proxy:Q,userChrome:Z,cloudSessions:X,localLogins:J,folders:Y,...K}=$;return $1("sha256").update(JSON.stringify(K)).digest("hex")}import{readdir as X1}from"fs/promises";var J1=15000;function Y1($){let Q=$ instanceof Error&&"code"in $?$.code:null;return Q==="EPERM"||Q==="EACCES"}function G1($){return new q("folder_access_denied",`macOS blocked Reason from opening ${$}. Allow Reason in System Settings \u203A Privacy & Security \u203A Files and Folders `+"(or Full Disk Access), then try again.")}async function dQ($,{timeoutMs:Q=J1,open:Z=(X)=>X1(X)}={}){let X,J=new Promise((Y)=>{X=setTimeout(()=>Y("pending"),Q)});try{if(await Promise.race([Z($).then(()=>"open"),J])==="pending")throw new q("folder_access_pending",`macOS is asking whether Reason may open ${$}. Answer the prompt on this Mac, then try again.`)}catch(Y){if(Y1(Y))throw G1($);if(Y instanceof q)throw Y}finally{clearTimeout(X)}}import{chmodSync as m1,closeSync as y1,constants as n8,fstatSync as h1,lstatSync as WZ,openSync as v1,readSync as c1,realpathSync as i8,unlinkSync as d1}from"fs";import{lookup as p1}from"dns/promises";import{createRequire as u1}from"module";import{request as l1}from"http";import{request as s1}from"https";import l0 from"net";import{platform as qZ}from"os";import{basename as n1,extname as i1,isAbsolute as BZ,relative as a8,resolve as z9,sep as o8}from"path";var pQ=String.raw`
|
|
12
12
|
async (roots) => {
|
|
13
13
|
"use strict";
|
|
14
14
|
const version = 2;
|
|
@@ -297,20 +297,20 @@ async (roots) => {
|
|
|
297
297
|
install("a11y", a11y); install("view", view); install("routeFulfill", routeFulfill); install("console", replConsole);
|
|
298
298
|
install("__araHandsRepl", Object.freeze({ version, evaluate }));
|
|
299
299
|
}
|
|
300
|
-
`.trim(),
|
|
300
|
+
`.trim(),uQ=String.raw`
|
|
301
301
|
async (input) => {
|
|
302
302
|
const bridge = globalThis.__araHandsRepl;
|
|
303
303
|
if (!bridge || typeof bridge.evaluate !== "function") throw new Error("Reason Hands browser bridge is not installed");
|
|
304
304
|
return await bridge.evaluate(typeof input === "string" ? input : input && input.code);
|
|
305
305
|
}
|
|
306
|
-
`.trim();import{Buffer as X9}from"buffer";import{randomUUID as X1}from"crypto";class nQ extends Error{code;constructor($){super($==="hands_repl_private_profile_attribute_denied"?"Private browser attribute read denied.":$);this.code=$;this.name="HandsReplBrowserDispatcherError"}}var iQ=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),uQ=/^hands_[A-Za-z0-9_-]{8,128}$/,J1=2048,aQ=32,oQ=1e4,Y1=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function G1($){let Q=$.split("+"),Z=(Q.pop()??"").replace(/^Key/,"").toLowerCase();if(Z==="f12")return!0;if(Q.some((X)=>["Control","ControlOrMeta","Meta"].includes(X))&&["l","n","t","j","i","p","s","w","u","o","r","tab","pageup","pagedown"].includes(Z))return!0;if(Q.some((X)=>["Control","ControlOrMeta","Meta"].includes(X))&&Q.includes("Shift")&&Z==="c")return!0;return Q.includes("Alt")&&["d","arrowleft","arrowright","home"].includes(Z)}var z1=($)=>{let Q=$.closest("a[href],area[href]");return{password:$.tagName==="INPUT"&&$.type==="password",executableLink:Boolean(Q&&!/^(https?:|about:blank)/i.test(Q.href))}},rQ={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 I($){throw new nQ($)}function z0($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Q=Object.getPrototypeOf($);return Q===Object.prototype||Q===null}function J9($,Q=0,Z={nodes:0}){if(Q>aQ||++Z.nodes>oQ)I("hands_repl_json_too_complex");if($===null||typeof $==="boolean"||typeof $==="string")return;if(typeof $==="number"){if(!Number.isFinite($))I("hands_repl_invalid_json");return}if(Array.isArray($)){for(let X of $)J9(X,Q+1,Z);return}if(!z0($))I("hands_repl_invalid_json");for(let[X,J]of Object.entries($)){if(iQ.has(X))I("hands_repl_invalid_json");J9(J,Q+1,Z)}}function g8($){return typeof $==="string"&&Object.hasOwn(rQ,$)}function K1($){if(!$.endsWith("[]"))return null;let Q=$.slice(0,-2);return g8(Q)?Q:null}function lQ($){return z0($)&&Object.keys($).length===2&&$.$handsRepl==="bytes"&&typeof $.base64==="string"}function V1($){return z0($)&&Object.keys($).length===1&&$.$handsRepl==="undefined"}function sQ($){return z0($)&&Object.keys($).length===2&&$.$handsRepl==="routeFulfill"&&"options"in $}function k0($){return!!$&&typeof $==="object"}function o9(){return Object.freeze({$handsRepl:"undefined"})}function F1($){if(!X9.isBuffer($)&&!($ instanceof Uint8Array))I("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:X9.from($).toString("base64")})}function tQ($){if(!k0($.browser)||!k0($.context)||!k0($.page))I("hands_repl_invalid_roots");if(typeof $.a11y!=="function"||typeof $.view!=="function")I("hands_repl_invalid_callbacks");let Q=$.maxHandles??J1;if(!Number.isInteger(Q)||Q<3||Q>1e5)I("hands_repl_invalid_handle_limit");let Z=new Map,X=new WeakMap,J=$.createOpaqueId??X1,Y=(z,L)=>{if(!k0(L))I("hands_repl_expected_target");let W=X.get(L)?.get(z);if(W)return W;if(Z.size>=Q)I("hands_repl_handle_limit");let U="";for(let C=0;C<16;C+=1){let A=`hands_${J()}`;if(uQ.test(A)&&!Z.has(A)){U=A;break}}if(!U)I("hands_repl_invalid_opaque_id");let j=Object.freeze({$handsRepl:"handle",id:U,kind:z});Z.set(U,{kind:z,target:L});let O=X.get(L);if(!O)O=new Map,X.set(L,O);return O.set(z,j),j},K=Object.freeze({browser:Y("browser",$.browser),context:Y("context",$.context),page:Y("page",$.page)}),V=(z)=>{if(!z0(z)||Object.keys(z).length!==3||z.$handsRepl!=="handle"||typeof z.id!=="string"||!uQ.test(z.id)||!g8(z.kind))I("hands_repl_invalid_handle");let L=Z.get(z.id);if(!L||L.kind!==z.kind)I("hands_repl_unknown_handle");return L},G=(z,L=0,W=new Set)=>{if(L>aQ)I("hands_repl_json_too_complex");if(z===void 0)return o9();if(z===null||typeof z==="boolean"||typeof z==="string")return z;if(typeof z==="number"){if(!Number.isFinite(z))I("hands_repl_non_json_result");return z}if(Array.isArray(z)){if(W.has(z))I("hands_repl_cyclic_result");W.add(z);try{return z.map((U)=>G(U,L+1,W))}finally{W.delete(z)}}if(!z0(z))I("hands_repl_non_json_result");if(W.has(z))I("hands_repl_cyclic_result");W.add(z);try{let U=Object.create(null);for(let j of Object.keys(z)){let O=Object.getOwnPropertyDescriptor(z,j);if(!O||!("value"in O))continue;U[j]=G(O.value,L+1,W)}return U}finally{W.delete(z)}},F=(z,L)=>{if(L==="void")return o9();if(L==="json")return G(z);if(L==="bytes")return F1(z);let W=K1(L);if(W){if(!Array.isArray(z))I("hands_repl_expected_target_list");if(W==="context"&&z.some((U)=>U!==$.context))I("hands_repl_foreign_context");return z.map((U)=>Y(W,U))}if(z===null||z===void 0)return o9();if(!g8(L))I("hands_repl_invalid_return_kind");if(L==="context"&&z!==$.context)I("hands_repl_foreign_context");return Y(L,z)},B=(z)=>{if(z0(z)&&z.$handsRepl==="handle")return V(z).target;if(lQ(z))return X9.from(z.base64,"base64");if(V1(z))return;if(sQ(z))I("hands_repl_route_fulfill_only");if(Array.isArray(z))return z.map(B);if(!z0(z))return z;let L=Object.create(null);for(let[W,U]of Object.entries(z))L[W]=B(U);return L};return Object.freeze({roots:K,dispatch:async(z)=>{if(!z0(z)||typeof z.type!=="string")I("hands_repl_invalid_request");if(z.type==="a11y"){let T=z.target===void 0?Z.get(K.page.id):V(z.target);if(!T||T.kind!=="page"&&T.kind!=="locator")I("hands_repl_invalid_a11y_target");return G(await $.a11y(T.target))}if(z.type==="view"){if(J9(z.source),z.options!==void 0)J9(z.options);let T=lQ(z.source)?X9.from(z.source.base64,"base64"):z.source;if($.privateProfile&&!X9.isBuffer(T))I("hands_repl_profile_requires_image_bytes");return G(await $.view(T,z.options))}if(z.type!=="call")I("hands_repl_invalid_request");if(typeof z.method!=="string"||z.method.length===0||z.method.length>128)I("hands_repl_invalid_method");if(iQ.has(z.method))I("hands_repl_forbidden_method");let L=V(z.target),W=z.args??[];if(!Array.isArray(W))I("hands_repl_invalid_arguments");if(J9(W),L.kind==="page"&&z.method==="captureScreenshot"){if(W.length!==0)I("hands_repl_invalid_arguments");if(!$.screenshotExport)I("hands_repl_screenshot_export_unavailable");return G(await $.screenshotExport(L.target))}if(L.kind==="context"&&["startRecording","stopRecording"].includes(z.method)){if(!$.recording||L.target!==$.context)I("hands_repl_recording_unavailable");if(W.length>(z.method==="startRecording"?1:0))I("hands_repl_invalid_arguments");return G(z.method==="startRecording"?await $.recording.start(W[0]):await $.recording.stop())}if($.privateProfile){let T=z.method;if(["evaluate","evaluateAll","waitForFunction","addInitScript","addScriptTag","addStyleTag","setContent","setInputFiles","route","content","cookies","storageState","addCookies","clearCookies","setExtraHTTPHeaders","setHTTPCredentials","grantPermissions","clearPermissions","innerHTML","textContent","allTextContents"].includes(T)||L.kind==="browser"&&T==="close"||L.kind==="context"&&T==="close")I("hands_repl_private_profile_method_denied");if(L.kind==="browser"&&T==="contexts")return F([$.context],"context[]");if((T==="screenshot"||T==="pdf")&&z0(W[0])&&(("path"in W[0])||("style"in W[0])))I("hands_repl_private_profile_path_denied");if(T==="goto"){if(typeof W[0]!=="string")I("hands_repl_private_profile_url_denied");try{let S=new URL(W[0]);if(!["http:","https:"].includes(S.protocol)&&W[0]!=="about:blank")I("hands_repl_private_profile_url_denied")}catch{I("hands_repl_private_profile_url_denied")}}if(T==="getAttribute"&&(typeof W[0]!=="string"||!Y1.has(W[0].toLowerCase())))I("hands_repl_private_profile_attribute_denied");if(L.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(T)){let S=[L.target];if(T==="allInnerTexts"){let m=Reflect.get(L.target,"all");if(typeof m!=="function")I("hands_repl_private_profile_probe_unavailable");let E=await Reflect.apply(m,L.target,[]);if(!Array.isArray(E)||E.length>oQ||!E.every(k0))I("hands_repl_private_profile_probe_unavailable");S=E}for(let m of S){let E=Reflect.get(m,"isVisible");if(typeof E!=="function"||!await Reflect.apply(E,m,[]))I("hands_repl_private_profile_hidden_value_denied")}}if(T==="press"&&typeof W[0]==="string"&&G1(W[0]))I("hands_repl_private_profile_browser_shortcut_denied");if(L.kind==="locator"&&["inputValue","click","dblclick","tap","press"].includes(T)){let S=Reflect.get(L.target,"evaluate");if(typeof S!=="function")I("hands_repl_private_profile_probe_unavailable");let m=await Reflect.apply(S,L.target,[z1]);if(!z0(m)||typeof m.password!=="boolean"||typeof m.executableLink!=="boolean")I("hands_repl_private_profile_probe_unavailable");if(T==="inputValue"&&m.password)I("hands_repl_private_profile_password_denied");if(T!=="inputValue"&&m.executableLink)I("hands_repl_private_profile_url_denied");if(T==="inputValue"){let E=Reflect.get(L.target,"isVisible");if(typeof E!=="function"||!await Reflect.apply(E,L.target,[]))I("hands_repl_private_profile_hidden_value_denied")}}}let U=rQ[L.kind][z.method];if(!U)I("hands_repl_method_not_allowed");if(U.requiresStringSource&&typeof W[0]!=="string")I("hands_repl_string_source_required");if(L.kind==="browser"&&z.method==="contexts")return[K.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(z.method)&&W.some((T)=>z0(T)&&("path"in T)))I("hands_repl_file_path_not_allowed");if(z.method==="goto"&&typeof W[0]==="string"){let T;try{T=new URL(W[0]).protocol}catch{I("hands_repl_invalid_url")}if(!["http:","https:","data:","about:","blob:"].includes(T))I("hands_repl_file_path_not_allowed")}if(U.special==="contextViewportSize"){let T=Reflect.get(L.target,"pages");if(typeof T!=="function")I("hands_repl_method_unavailable");let S=await Reflect.apply(T,L.target,[]),m=Array.isArray(S)?S[0]:void 0,E=k0(m)?Reflect.get(m,"viewportSize"):void 0;if(typeof E!=="function")return o9();return F(await Reflect.apply(E,m,[]),U.returns)}if(U.special==="property"){let T=Reflect.get(L.target,z.method);return F(typeof T==="function"?Reflect.apply(T,L.target,[]):T,U.returns)}let j=Reflect.get(L.target,z.method);if(typeof j!=="function")I("hands_repl_method_unavailable");if(U.special==="route"){let T=W[1];if(!sQ(T))I("hands_repl_invalid_route_handler");J9(T.options);let S=B(T.options),m=async(M)=>{if(!k0(M))I("hands_repl_invalid_route");let D=Reflect.get(M,"fulfill");if(typeof D!=="function")I("hands_repl_invalid_route");await Reflect.apply(D,M,[S])},E=[B(W[0]??null),m],N=await Reflect.apply(j,L.target,E);return F(N,U.returns)}let O=W.map(B);if(z.method==="setInputFiles"){let T=L.kind==="locator"?0:1,S=async(E)=>{if(typeof E!=="string"){if(!z0(E)||typeof E.name!=="string"||typeof E.mimeType!=="string"||!X9.isBuffer(E.buffer))I("hands_repl_invalid_file_input");return E}if(!$.readWorkspaceFile)I("hands_repl_workspace_required");return $.readWorkspaceFile(E)},m=O[T];O[T]=Array.isArray(m)?await Promise.all(m.map(S)):await S(m)}if(z.method==="goto")await $.beforeNavigation?.();let C=$.actionRecorder?.(),A=await Reflect.apply(j,L.target,O),P={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"}[z.method];if(P){let T=Reflect.get(L.target,"page"),S=L.kind==="page"?L.target:typeof T==="function"?Reflect.apply(T,L.target,[]):void 0;C?.(P,k0(S)?S:void 0)}return F(A,U.returns)}})}import{isIP as XZ}from"net";import{Resolver as H1}from"dns/promises";import{isIP as t9}from"net";var U1=[["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 y8($){if(t9($)!==4)return null;let Q=$.split(".");if(Q.length!==4)return null;let Z=0;for(let X of Q){let J=Number(X);if(!Number.isInteger(J)||J<0||J>255)return null;Z=Z*256+J}return Z>>>0}function W1($,Q,Z){let X=y8(Q);if(X===null)return!1;let J=Z===0?0:4294967295<<32-Z>>>0;return($&J)>>>0===(X&J)>>>0}function eQ($){let Q=y8($);if(Q===null)return!0;return U1.some(([Z,X])=>W1(Q,Z,X))}function B1($){if(t9($)!==6)return null;let Q=$.toLowerCase(),Z=Q.indexOf("%");if(Z>=0)Q=Q.slice(0,Z);let X=[],J=Q.lastIndexOf(":"),Y=J>=0?Q.slice(J+1):"";if(Y.includes(".")){let z=y8(Y);if(z===null)return null;X=[z>>>16&65535,z&65535],Q=Q.slice(0,J+1)+"0:0"}let K=Q.split("::");if(K.length>2)return null;let V=(z)=>{if(z==="")return[];let L=[];for(let W of z.split(":")){if(W===""||W.length>4||!/^[0-9a-f]+$/.test(W))return null;L.push(Number.parseInt(W,16))}return L},G=V(K[0]??"");if(G===null)return null;if(K.length===1){let z=G;if(z.length!==8)return null;return X.length>0?z.slice(0,6).concat(X):z}let F=V(K[1]??"");if(F===null)return null;let B=8-G.length-F.length;if(B<0)return null;let H=G.concat(Array(B).fill(0),F);if(H.length!==8)return null;return X.length>0?H.slice(0,6).concat(X):H}function L1($,Q){return`${$>>8&255}.${$&255}.${Q>>8&255}.${Q&255}`}function N1($){let Q=B1($);if(Q===null)return!0;let[Z,X,J]=Q;if((Z&57344)!==8192)return!0;if(Z===8193&&(X&65024)===0)return!0;if(Z===8193&&X===3512)return!0;if(Z===16383&&(X&61440)===0)return!0;if(Z===8194)return eQ(L1(X,J));return!1}function $Z($){return $.replace(/^\[|\]$/g,"")}function r9($){let Q=$Z($.trim()),Z=t9(Q);if(Z===4)return eQ(Q);if(Z===6)return N1(Q);return!0}function QZ($){if($ instanceof Error&&$.name==="TimeoutError")return"dns_timeout";switch(typeof $==="object"&&$!==null&&"code"in $?$.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 ZZ=5000;function M1($){return async(Q,Z)=>{if(Z?.aborted)throw Error("aborted");let X=new H1({timeout:ZZ,tries:1});if($)X.setServers($);let J=()=>X.cancel();Z?.addEventListener("abort",J,{once:!0});try{let[Y,K]=await Promise.allSettled([X.resolve4(Q),X.resolve6(Q)]),V=[...Y.status==="fulfilled"?Y.value:[],...K.status==="fulfilled"?K.value:[]];if(V.length>0)return V;let G=[Y,K].flatMap((B)=>B.status==="rejected"?[B.reason]:[]);throw G.find((B)=>["dns_temporary","dns_timeout"].includes(QZ(B)))??G[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{Z?.removeEventListener("abort",J)}}}var j1=M1();async function q1($,Q,Z,X){if(X?.aborted)throw Error("aborted");let J=new AbortController,Y,K,V=Q($,J.signal);V.catch(()=>{});try{return await Promise.race([V,new Promise((G,F)=>{if(Y=setTimeout(()=>F(new DOMException("DNS lookup timed out","TimeoutError")),Z),X)K=()=>F(Error("aborted")),X.addEventListener("abort",K,{once:!0})})])}finally{if(Y!==void 0)clearTimeout(Y);if(X&&K)X.removeEventListener("abort",K);J.abort()}}async function e5($,Q=j1,Z){let X=$Z($);if(t9(X))return r9(X)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[X]};let J;try{J=await q1(X,Q,ZZ,Z)}catch(Y){return{ok:!1,reason:Z?.aborted?Z.reason instanceof Error&&Z.reason.name==="TimeoutError"?"dns_timeout":"aborted":QZ(Y)}}if(J.length===0)return{ok:!1,reason:"dns_empty"};if(J.some(r9))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:J}}var C1=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function h8($){return $.length<=253&&C1.test($.toLowerCase())}function T1($,Q){let Z=$.trim().toLowerCase();if(!h8(Z))return!1;if(Z.startsWith("*.")){let X=Z.slice(2);return Q===X||Q.endsWith(`.${X}`)}return Z===Q}function O1($){let Q=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec($);if(!Q)return null;let Z=Q.slice(1).map(Number);return Z.some((X)=>X>255)?null:Z}function v8($,Q=[]){let Z=(X)=>{if(X=X.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,""),!X.includes(":"))return X;try{X=new URL(`http://[${X}]/`).hostname.slice(1,-1)}catch{return X}let J=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(X);if(!J)return X;let Y=parseInt(J[1],16),K=parseInt(J[2],16);return`${Y>>8}.${Y&255}.${K>>8}.${K&255}`};return Q.some((X)=>Z(X)===Z($))}function u0($){$=$.toLowerCase().replace(/^\[|\]$/g,"");let Q=O1($);if(Q){let[Y,K,V]=Q;if(Y===127)return"loopback";return Y===0||Y===10||Y>=224||Y===100&&K>=64&&K<=127||Y===169&&K===254||Y===172&&K>=16&&K<=31||Y===192&&(K===168||K===0&&(V===0||V===2)||K===88&&V===99)||Y===198&&(K===18||K===19||K===51&&V===100)||Y===203&&K===0&&V===113?"private":"public"}if(!$.includes(":"))return"hostname";try{$=new URL(`http://[${$}]/`).hostname.slice(1,-1)}catch{return"private"}if($==="::1")return"loopback";let Z=/^::ffff:([\da-f]+):([\da-f]+)$/.exec($);if(Z){let Y=parseInt(Z[1],16),K=parseInt(Z[2],16);return u0(`${Y>>8}.${Y&255}.${K>>8}.${K&255}`)==="public"?"public":"private"}let[X,J=0]=$.split(":").map((Y)=>parseInt(Y||"0",16));return X<8192||X>16383||X===8194||X===8193&&(J<512||J===3512)||X===16383&&J<4096?"private":"public"}function P9($,Q){let Z;try{Z=new URL($)}catch{return{allowed:!1,url:$,host:null,reason:"invalid_url"}}if(["about:","data:","blob:"].includes(Z.protocol))return{allowed:!0,url:$,host:null,reason:"local_document"};if(!["http:","https:","ws:","wss:"].includes(Z.protocol))return{allowed:!1,url:$,host:Z.hostname||null,reason:"unsupported_protocol"};let X=Z.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(Q.mode==="off")return{allowed:!0,url:$,host:X,reason:"policy_off"};let J=(V)=>({allowed:!1,url:$,host:X,reason:V});if(Z.username||Z.password)return J("invalid_url");if(Q.mode==="public_web"){let V=u0(X)!=="public"&&u0(X)!=="hostname"||X==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(X)||!X.includes(".")&&!XZ(X)||Boolean(XZ(X)&&r9(X));return{allowed:!V,url:$,host:X,reason:V?"private_network":"public_web"}}let Y=Number(Z.port||(["https:","wss:"].includes(Z.protocol)?443:80));if(Q.deniedPorts?.includes(Y)||v8(X,Q.deniedHosts))return J("destination_not_allowed");let K=u0(X);if(K==="private"||["local","internal","arpa"].some((V)=>X===V||X.endsWith(`.${V}`)))return J("private_network");if(K==="loopback"||X==="localhost"||X.endsWith(".localhost"))return Q.allowedLoopbackPorts?.includes(Y)?{allowed:!0,url:$,host:X,reason:"loopback"}:J("destination_not_allowed");if(Q.allowedDomains.some((V)=>T1(V,X)))return{allowed:!0,url:$,host:X,reason:"allowed_domain"};return{allowed:!1,url:$,host:X,reason:"destination_not_allowed"}}import YZ from"child_process";import{accessSync as _1,constants as A1,readFileSync as x1,statSync as P1}from"fs";import{createRequire as I1}from"module";import{isAbsolute as c8,join as R1}from"path";var d8=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:GZ.dependencies["playwright-core"],browser:"chromium"}),zZ=["/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"],p8=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function I9($){try{return _1($,A1.X_OK),c8($)&&P1($).isFile()}catch{return!1}}function u8($,Q=process.platform){let Z=Q==="darwin"?zZ:Q==="linux"?p8:null;return Z?($??Z).find(I9)??null:null}function E1(){if(!process.versions.bun)return;let $=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,$))return;let Q=[];YZ.spawn=new Proxy(YZ.spawn,{apply(Z,X,J){let Y=Reflect.apply(Z,X,J),K=J[1],V=J[2]?.stdio;if(Array.isArray(K)&&K.includes("--remote-debugging-pipe")&&Array.isArray(V)&&V[3]==="pipe"&&V[4]==="pipe")Q.push(Y);return Y}}),Object.defineProperty(globalThis,$,{value:Q})}async function e9($){if(E1(),$!==void 0){if(!c8($))throw Error("hands_browser_driver_path_must_be_absolute");let X=R1($,"package.json"),J=JSON.parse(x1(X,"utf8"));if(J.name!==d8.driver)throw Error("hands_browser_wrong_driver");let Y=I1(X)($),K=Y.default?.chromium??Y.chromium;if(!K)throw Error("hands_browser_missing_chromium");return{version:J.version,chromium:K}}let[Q,Z]=await Promise.all([import("./index-nxzv9qe7.js"),import("./package-s6y0j1as.js").then((m)=>D1(m.default,1))]);return{version:Z.default.version,chromium:Q.chromium}}var S1=($,Q=d8.driverVersion)=>({status:"unavailable",reason:$,expectedDriverVersion:Q}),w1=($)=>$.loadDriver?.()??e9($.driverModuleDirectory);async function Y9($={}){return KZ($,d8.driverVersion)}async function l8($,Q={}){if($.driverVersion!=="1.61.1"||!c8($.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return KZ({...Q,driverModuleDirectory:$.driverModuleDirectory,allowSystemBrowser:!0},$.driverVersion)}async function KZ($,Q){let Z=(G)=>S1(G,Q),X=$.platform??process.platform;if(X!=="linux"&&X!=="darwin")return Z("unsupported_platform");let J;try{J=await w1($)}catch{return Z("driver_missing")}if(J.version!==Q)return Z("driver_version_mismatch");let Y=(G,F)=>({status:"resolved",executablePath:G,source:F,driverVersion:J.version});if($.executablePath!==void 0)return I9($.executablePath)?Y($.executablePath,"configured"):Z("executable_missing");let K=J.chromium.executablePath();if(I9(K))return Y(K,"managed");let V=$.allowSystemBrowser===!0?u8($.systemCandidates,X):null;return V?Y(V,"system"):Z("executable_missing")}var l1=["/usr/local/bin/chromium",...p8];function s1($,Q=LZ()){return u8($??(Q==="linux"?l1:void 0),Q)}async function n1(){try{return(await e9()).chromium}catch{return v1(import.meta.url)("playwright-core").chromium}}var i1=1048576,a1=105000,o1=20000,HZ=5000,r1=2000,t1=1000,e1=30000,UZ=81920,$7={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function Q7($,Q){let Z=new URL($.url()),X={...await $.allHeaders(),host:Z.host};for(let J of Object.keys(X))if(/^(?:proxy-|connection$|upgrade$|transfer-encoding$|content-length$)/i.test(J))delete X[J];return new Promise((J,Y)=>{let V=(Z.protocol==="https:"?d1:c1)(Z,{method:$.method(),headers:X,agent:!1,lookup:(F,B,H)=>{let z=l0.isIP(Q);if(B.all)H(null,[{address:Q,family:z}]);else H(null,Q,z)}},(F)=>{let B=[],H=0;F.on("data",(z)=>{if(H+=z.length,H>33554432)V.destroy(Error("hands_browser_response_too_large"));else B.push(z)}),F.on("error",Y),F.on("end",()=>{let z={};for(let[L,W]of Object.entries(F.headers))if(W!==void 0&&!["transfer-encoding","connection","content-length"].includes(L))z[L]=Array.isArray(W)?W.join(`
|
|
307
|
-
`):W;J({status:F.statusCode??502,headers:z,body:Buffer.concat(B)})})}),G=setTimeout(()=>V.destroy(Error("hands_browser_fetch_timeout")),
|
|
308
|
-
`)}function
|
|
309
|
-
Viewing ${W0} (${M0.sourceWidth}x${M0.sourceHeight} source, sent at ${M0.width}x${M0.height}, ${Math.round(r0.length/1024)}KB).`}if(H0>640)H0=Math.round(H0*0.75);else U0=Math.max(30,U0-15)}throw Error(`view(): could not reduce the image under ${Math.round(
|
|
306
|
+
`.trim();import{Buffer as X9}from"buffer";import{randomUUID as z1}from"crypto";class iQ extends Error{code;constructor($){super($==="hands_repl_private_profile_attribute_denied"?"Private browser attribute read denied.":$);this.code=$;this.name="HandsReplBrowserDispatcherError"}}var aQ=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),lQ=/^hands_[A-Za-z0-9_-]{8,128}$/,K1=2048,oQ=32,rQ=1e4,V1=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function F1($){let Q=$.split("+"),Z=(Q.pop()??"").replace(/^Key/,"").toLowerCase();if(Z==="f12")return!0;if(Q.some((X)=>["Control","ControlOrMeta","Meta"].includes(X))&&["l","n","t","j","i","p","s","w","u","o","r","tab","pageup","pagedown"].includes(Z))return!0;if(Q.some((X)=>["Control","ControlOrMeta","Meta"].includes(X))&&Q.includes("Shift")&&Z==="c")return!0;return Q.includes("Alt")&&["d","arrowleft","arrowright","home"].includes(Z)}var H1=($)=>{let Q=$.closest("a[href],area[href]");return{password:$.tagName==="INPUT"&&$.type==="password",executableLink:Boolean(Q&&!/^(https?:|about:blank)/i.test(Q.href))}},tQ={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 I($){throw new iQ($)}function z0($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Q=Object.getPrototypeOf($);return Q===Object.prototype||Q===null}function J9($,Q=0,Z={nodes:0}){if(Q>oQ||++Z.nodes>rQ)I("hands_repl_json_too_complex");if($===null||typeof $==="boolean"||typeof $==="string")return;if(typeof $==="number"){if(!Number.isFinite($))I("hands_repl_invalid_json");return}if(Array.isArray($)){for(let X of $)J9(X,Q+1,Z);return}if(!z0($))I("hands_repl_invalid_json");for(let[X,J]of Object.entries($)){if(aQ.has(X))I("hands_repl_invalid_json");J9(J,Q+1,Z)}}function h8($){return typeof $==="string"&&Object.hasOwn(tQ,$)}function U1($){if(!$.endsWith("[]"))return null;let Q=$.slice(0,-2);return h8(Q)?Q:null}function sQ($){return z0($)&&Object.keys($).length===2&&$.$handsRepl==="bytes"&&typeof $.base64==="string"}function W1($){return z0($)&&Object.keys($).length===1&&$.$handsRepl==="undefined"}function nQ($){return z0($)&&Object.keys($).length===2&&$.$handsRepl==="routeFulfill"&&"options"in $}function k0($){return!!$&&typeof $==="object"}function r9(){return Object.freeze({$handsRepl:"undefined"})}function B1($){if(!X9.isBuffer($)&&!($ instanceof Uint8Array))I("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:X9.from($).toString("base64")})}function eQ($){if(!k0($.browser)||!k0($.context)||!k0($.page))I("hands_repl_invalid_roots");if(typeof $.a11y!=="function"||typeof $.view!=="function")I("hands_repl_invalid_callbacks");let Q=$.maxHandles??K1;if(!Number.isInteger(Q)||Q<3||Q>1e5)I("hands_repl_invalid_handle_limit");let Z=new Map,X=new WeakMap,J=$.createOpaqueId??z1,Y=(z,L)=>{if(!k0(L))I("hands_repl_expected_target");let W=X.get(L)?.get(z);if(W)return W;if(Z.size>=Q)I("hands_repl_handle_limit");let U="";for(let C=0;C<16;C+=1){let A=`hands_${J()}`;if(lQ.test(A)&&!Z.has(A)){U=A;break}}if(!U)I("hands_repl_invalid_opaque_id");let j=Object.freeze({$handsRepl:"handle",id:U,kind:z});Z.set(U,{kind:z,target:L});let O=X.get(L);if(!O)O=new Map,X.set(L,O);return O.set(z,j),j},K=Object.freeze({browser:Y("browser",$.browser),context:Y("context",$.context),page:Y("page",$.page)}),V=(z)=>{if(!z0(z)||Object.keys(z).length!==3||z.$handsRepl!=="handle"||typeof z.id!=="string"||!lQ.test(z.id)||!h8(z.kind))I("hands_repl_invalid_handle");let L=Z.get(z.id);if(!L||L.kind!==z.kind)I("hands_repl_unknown_handle");return L},G=(z,L=0,W=new Set)=>{if(L>oQ)I("hands_repl_json_too_complex");if(z===void 0)return r9();if(z===null||typeof z==="boolean"||typeof z==="string")return z;if(typeof z==="number"){if(!Number.isFinite(z))I("hands_repl_non_json_result");return z}if(Array.isArray(z)){if(W.has(z))I("hands_repl_cyclic_result");W.add(z);try{return z.map((U)=>G(U,L+1,W))}finally{W.delete(z)}}if(!z0(z))I("hands_repl_non_json_result");if(W.has(z))I("hands_repl_cyclic_result");W.add(z);try{let U=Object.create(null);for(let j of Object.keys(z)){let O=Object.getOwnPropertyDescriptor(z,j);if(!O||!("value"in O))continue;U[j]=G(O.value,L+1,W)}return U}finally{W.delete(z)}},F=(z,L)=>{if(L==="void")return r9();if(L==="json")return G(z);if(L==="bytes")return B1(z);let W=U1(L);if(W){if(!Array.isArray(z))I("hands_repl_expected_target_list");if(W==="context"&&z.some((U)=>U!==$.context))I("hands_repl_foreign_context");return z.map((U)=>Y(W,U))}if(z===null||z===void 0)return r9();if(!h8(L))I("hands_repl_invalid_return_kind");if(L==="context"&&z!==$.context)I("hands_repl_foreign_context");return Y(L,z)},B=(z)=>{if(z0(z)&&z.$handsRepl==="handle")return V(z).target;if(sQ(z))return X9.from(z.base64,"base64");if(W1(z))return;if(nQ(z))I("hands_repl_route_fulfill_only");if(Array.isArray(z))return z.map(B);if(!z0(z))return z;let L=Object.create(null);for(let[W,U]of Object.entries(z))L[W]=B(U);return L};return Object.freeze({roots:K,dispatch:async(z)=>{if(!z0(z)||typeof z.type!=="string")I("hands_repl_invalid_request");if(z.type==="a11y"){let T=z.target===void 0?Z.get(K.page.id):V(z.target);if(!T||T.kind!=="page"&&T.kind!=="locator")I("hands_repl_invalid_a11y_target");return G(await $.a11y(T.target))}if(z.type==="view"){if(J9(z.source),z.options!==void 0)J9(z.options);let T=sQ(z.source)?X9.from(z.source.base64,"base64"):z.source;if($.privateProfile&&!X9.isBuffer(T))I("hands_repl_profile_requires_image_bytes");return G(await $.view(T,z.options))}if(z.type!=="call")I("hands_repl_invalid_request");if(typeof z.method!=="string"||z.method.length===0||z.method.length>128)I("hands_repl_invalid_method");if(aQ.has(z.method))I("hands_repl_forbidden_method");let L=V(z.target),W=z.args??[];if(!Array.isArray(W))I("hands_repl_invalid_arguments");if(J9(W),L.kind==="page"&&z.method==="captureScreenshot"){if(W.length!==0)I("hands_repl_invalid_arguments");if(!$.screenshotExport)I("hands_repl_screenshot_export_unavailable");return G(await $.screenshotExport(L.target))}if(L.kind==="context"&&["startRecording","stopRecording"].includes(z.method)){if(!$.recording||L.target!==$.context)I("hands_repl_recording_unavailable");if(W.length>(z.method==="startRecording"?1:0))I("hands_repl_invalid_arguments");return G(z.method==="startRecording"?await $.recording.start(W[0]):await $.recording.stop())}if($.privateProfile){let T=z.method;if(["evaluate","evaluateAll","waitForFunction","addInitScript","addScriptTag","addStyleTag","setContent","setInputFiles","route","content","cookies","storageState","addCookies","clearCookies","setExtraHTTPHeaders","setHTTPCredentials","grantPermissions","clearPermissions","innerHTML","textContent","allTextContents"].includes(T)||L.kind==="browser"&&T==="close"||L.kind==="context"&&T==="close")I("hands_repl_private_profile_method_denied");if(L.kind==="browser"&&T==="contexts")return F([$.context],"context[]");if((T==="screenshot"||T==="pdf")&&z0(W[0])&&(("path"in W[0])||("style"in W[0])))I("hands_repl_private_profile_path_denied");if(T==="goto"){if(typeof W[0]!=="string")I("hands_repl_private_profile_url_denied");try{let S=new URL(W[0]);if(!["http:","https:"].includes(S.protocol)&&W[0]!=="about:blank")I("hands_repl_private_profile_url_denied")}catch{I("hands_repl_private_profile_url_denied")}}if(T==="getAttribute"&&(typeof W[0]!=="string"||!V1.has(W[0].toLowerCase())))I("hands_repl_private_profile_attribute_denied");if(L.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(T)){let S=[L.target];if(T==="allInnerTexts"){let g=Reflect.get(L.target,"all");if(typeof g!=="function")I("hands_repl_private_profile_probe_unavailable");let E=await Reflect.apply(g,L.target,[]);if(!Array.isArray(E)||E.length>rQ||!E.every(k0))I("hands_repl_private_profile_probe_unavailable");S=E}for(let g of S){let E=Reflect.get(g,"isVisible");if(typeof E!=="function"||!await Reflect.apply(E,g,[]))I("hands_repl_private_profile_hidden_value_denied")}}if(T==="press"&&typeof W[0]==="string"&&F1(W[0]))I("hands_repl_private_profile_browser_shortcut_denied");if(L.kind==="locator"&&["inputValue","click","dblclick","tap","press"].includes(T)){let S=Reflect.get(L.target,"evaluate");if(typeof S!=="function")I("hands_repl_private_profile_probe_unavailable");let g=await Reflect.apply(S,L.target,[H1]);if(!z0(g)||typeof g.password!=="boolean"||typeof g.executableLink!=="boolean")I("hands_repl_private_profile_probe_unavailable");if(T==="inputValue"&&g.password)I("hands_repl_private_profile_password_denied");if(T!=="inputValue"&&g.executableLink)I("hands_repl_private_profile_url_denied");if(T==="inputValue"){let E=Reflect.get(L.target,"isVisible");if(typeof E!=="function"||!await Reflect.apply(E,L.target,[]))I("hands_repl_private_profile_hidden_value_denied")}}}let U=tQ[L.kind][z.method];if(!U)I("hands_repl_method_not_allowed");if(U.requiresStringSource&&typeof W[0]!=="string")I("hands_repl_string_source_required");if(L.kind==="browser"&&z.method==="contexts")return[K.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(z.method)&&W.some((T)=>z0(T)&&("path"in T)))I("hands_repl_file_path_not_allowed");if(z.method==="goto"&&typeof W[0]==="string"){let T;try{T=new URL(W[0]).protocol}catch{I("hands_repl_invalid_url")}if(!["http:","https:","data:","about:","blob:"].includes(T))I("hands_repl_file_path_not_allowed")}if(U.special==="contextViewportSize"){let T=Reflect.get(L.target,"pages");if(typeof T!=="function")I("hands_repl_method_unavailable");let S=await Reflect.apply(T,L.target,[]),g=Array.isArray(S)?S[0]:void 0,E=k0(g)?Reflect.get(g,"viewportSize"):void 0;if(typeof E!=="function")return r9();return F(await Reflect.apply(E,g,[]),U.returns)}if(U.special==="property"){let T=Reflect.get(L.target,z.method);return F(typeof T==="function"?Reflect.apply(T,L.target,[]):T,U.returns)}let j=Reflect.get(L.target,z.method);if(typeof j!=="function")I("hands_repl_method_unavailable");if(U.special==="route"){let T=W[1];if(!nQ(T))I("hands_repl_invalid_route_handler");J9(T.options);let S=B(T.options),g=async(M)=>{if(!k0(M))I("hands_repl_invalid_route");let D=Reflect.get(M,"fulfill");if(typeof D!=="function")I("hands_repl_invalid_route");await Reflect.apply(D,M,[S])},E=[B(W[0]??null),g],N=await Reflect.apply(j,L.target,E);return F(N,U.returns)}let O=W.map(B);if(z.method==="setInputFiles"){let T=L.kind==="locator"?0:1,S=async(E)=>{if(typeof E!=="string"){if(!z0(E)||typeof E.name!=="string"||typeof E.mimeType!=="string"||!X9.isBuffer(E.buffer))I("hands_repl_invalid_file_input");return E}if(!$.readWorkspaceFile)I("hands_repl_workspace_required");return $.readWorkspaceFile(E)},g=O[T];O[T]=Array.isArray(g)?await Promise.all(g.map(S)):await S(g)}if(z.method==="goto")await $.beforeNavigation?.();let C=$.actionRecorder?.(),A=await Reflect.apply(j,L.target,O),P={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"}[z.method];if(P){let T=Reflect.get(L.target,"page"),S=L.kind==="page"?L.target:typeof T==="function"?Reflect.apply(T,L.target,[]):void 0;C?.(P,k0(S)?S:void 0)}return F(A,U.returns)}})}import{isIP as JZ}from"net";import{Resolver as L1}from"dns/promises";import{isIP as e9}from"net";var N1=[["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 v8($){if(e9($)!==4)return null;let Q=$.split(".");if(Q.length!==4)return null;let Z=0;for(let X of Q){let J=Number(X);if(!Number.isInteger(J)||J<0||J>255)return null;Z=Z*256+J}return Z>>>0}function M1($,Q,Z){let X=v8(Q);if(X===null)return!1;let J=Z===0?0:4294967295<<32-Z>>>0;return($&J)>>>0===(X&J)>>>0}function $Z($){let Q=v8($);if(Q===null)return!0;return N1.some(([Z,X])=>M1(Q,Z,X))}function j1($){if(e9($)!==6)return null;let Q=$.toLowerCase(),Z=Q.indexOf("%");if(Z>=0)Q=Q.slice(0,Z);let X=[],J=Q.lastIndexOf(":"),Y=J>=0?Q.slice(J+1):"";if(Y.includes(".")){let z=v8(Y);if(z===null)return null;X=[z>>>16&65535,z&65535],Q=Q.slice(0,J+1)+"0:0"}let K=Q.split("::");if(K.length>2)return null;let V=(z)=>{if(z==="")return[];let L=[];for(let W of z.split(":")){if(W===""||W.length>4||!/^[0-9a-f]+$/.test(W))return null;L.push(Number.parseInt(W,16))}return L},G=V(K[0]??"");if(G===null)return null;if(K.length===1){let z=G;if(z.length!==8)return null;return X.length>0?z.slice(0,6).concat(X):z}let F=V(K[1]??"");if(F===null)return null;let B=8-G.length-F.length;if(B<0)return null;let H=G.concat(Array(B).fill(0),F);if(H.length!==8)return null;return X.length>0?H.slice(0,6).concat(X):H}function q1($,Q){return`${$>>8&255}.${$&255}.${Q>>8&255}.${Q&255}`}function C1($){let Q=j1($);if(Q===null)return!0;let[Z,X,J]=Q;if((Z&57344)!==8192)return!0;if(Z===8193&&(X&65024)===0)return!0;if(Z===8193&&X===3512)return!0;if(Z===16383&&(X&61440)===0)return!0;if(Z===8194)return $Z(q1(X,J));return!1}function QZ($){return $.replace(/^\[|\]$/g,"")}function t9($){let Q=QZ($.trim()),Z=e9(Q);if(Z===4)return $Z(Q);if(Z===6)return C1(Q);return!0}function ZZ($){if($ instanceof Error&&$.name==="TimeoutError")return"dns_timeout";switch(typeof $==="object"&&$!==null&&"code"in $?$.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 XZ=5000;function T1($){return async(Q,Z)=>{if(Z?.aborted)throw Error("aborted");let X=new L1({timeout:XZ,tries:1});if($)X.setServers($);let J=()=>X.cancel();Z?.addEventListener("abort",J,{once:!0});try{let[Y,K]=await Promise.allSettled([X.resolve4(Q),X.resolve6(Q)]),V=[...Y.status==="fulfilled"?Y.value:[],...K.status==="fulfilled"?K.value:[]];if(V.length>0)return V;let G=[Y,K].flatMap((B)=>B.status==="rejected"?[B.reason]:[]);throw G.find((B)=>["dns_temporary","dns_timeout"].includes(ZZ(B)))??G[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{Z?.removeEventListener("abort",J)}}}var O1=T1();async function D1($,Q,Z,X){if(X?.aborted)throw Error("aborted");let J=new AbortController,Y,K,V=Q($,J.signal);V.catch(()=>{});try{return await Promise.race([V,new Promise((G,F)=>{if(Y=setTimeout(()=>F(new DOMException("DNS lookup timed out","TimeoutError")),Z),X)K=()=>F(Error("aborted")),X.addEventListener("abort",K,{once:!0})})])}finally{if(Y!==void 0)clearTimeout(Y);if(X&&K)X.removeEventListener("abort",K);J.abort()}}async function XX($,Q=O1,Z){let X=QZ($);if(e9(X))return t9(X)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[X]};let J;try{J=await D1(X,Q,XZ,Z)}catch(Y){return{ok:!1,reason:Z?.aborted?Z.reason instanceof Error&&Z.reason.name==="TimeoutError"?"dns_timeout":"aborted":ZZ(Y)}}if(J.length===0)return{ok:!1,reason:"dns_empty"};if(J.some(t9))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:J}}var _1=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function c8($){return $.length<=253&&_1.test($.toLowerCase())}function A1($,Q){let Z=$.trim().toLowerCase();if(!c8(Z))return!1;if(Z.startsWith("*.")){let X=Z.slice(2);return Q===X||Q.endsWith(`.${X}`)}return Z===Q}function x1($){let Q=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec($);if(!Q)return null;let Z=Q.slice(1).map(Number);return Z.some((X)=>X>255)?null:Z}function d8($,Q=[]){let Z=(X)=>{if(X=X.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,""),!X.includes(":"))return X;try{X=new URL(`http://[${X}]/`).hostname.slice(1,-1)}catch{return X}let J=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(X);if(!J)return X;let Y=parseInt(J[1],16),K=parseInt(J[2],16);return`${Y>>8}.${Y&255}.${K>>8}.${K&255}`};return Q.some((X)=>Z(X)===Z($))}function u0($){$=$.toLowerCase().replace(/^\[|\]$/g,"");let Q=x1($);if(Q){let[Y,K,V]=Q;if(Y===127)return"loopback";return Y===0||Y===10||Y>=224||Y===100&&K>=64&&K<=127||Y===169&&K===254||Y===172&&K>=16&&K<=31||Y===192&&(K===168||K===0&&(V===0||V===2)||K===88&&V===99)||Y===198&&(K===18||K===19||K===51&&V===100)||Y===203&&K===0&&V===113?"private":"public"}if(!$.includes(":"))return"hostname";try{$=new URL(`http://[${$}]/`).hostname.slice(1,-1)}catch{return"private"}if($==="::1")return"loopback";let Z=/^::ffff:([\da-f]+):([\da-f]+)$/.exec($);if(Z){let Y=parseInt(Z[1],16),K=parseInt(Z[2],16);return u0(`${Y>>8}.${Y&255}.${K>>8}.${K&255}`)==="public"?"public":"private"}let[X,J=0]=$.split(":").map((Y)=>parseInt(Y||"0",16));return X<8192||X>16383||X===8194||X===8193&&(J<512||J===3512)||X===16383&&J<4096?"private":"public"}function I9($,Q){let Z;try{Z=new URL($)}catch{return{allowed:!1,url:$,host:null,reason:"invalid_url"}}if(["about:","data:","blob:"].includes(Z.protocol))return{allowed:!0,url:$,host:null,reason:"local_document"};if(!["http:","https:","ws:","wss:"].includes(Z.protocol))return{allowed:!1,url:$,host:Z.hostname||null,reason:"unsupported_protocol"};let X=Z.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(Q.mode==="off")return{allowed:!0,url:$,host:X,reason:"policy_off"};let J=(V)=>({allowed:!1,url:$,host:X,reason:V});if(Z.username||Z.password)return J("invalid_url");if(Q.mode==="public_web"){let V=u0(X)!=="public"&&u0(X)!=="hostname"||X==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(X)||!X.includes(".")&&!JZ(X)||Boolean(JZ(X)&&t9(X));return{allowed:!V,url:$,host:X,reason:V?"private_network":"public_web"}}let Y=Number(Z.port||(["https:","wss:"].includes(Z.protocol)?443:80));if(Q.deniedPorts?.includes(Y)||d8(X,Q.deniedHosts))return J("destination_not_allowed");let K=u0(X);if(K==="private"||["local","internal","arpa"].some((V)=>X===V||X.endsWith(`.${V}`)))return J("private_network");if(K==="loopback"||X==="localhost"||X.endsWith(".localhost"))return Q.allowedLoopbackPorts?.includes(Y)?{allowed:!0,url:$,host:X,reason:"loopback"}:J("destination_not_allowed");if(Q.allowedDomains.some((V)=>A1(V,X)))return{allowed:!0,url:$,host:X,reason:"allowed_domain"};return{allowed:!1,url:$,host:X,reason:"destination_not_allowed"}}import GZ from"child_process";import{accessSync as I1,constants as R1,readFileSync as E1,statSync as VZ}from"fs";import{createRequire as FZ}from"module";import{homedir as zZ}from"os";import{dirname as S1,isAbsolute as p8,join as Y9,resolve as w1}from"path";var $8=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:KZ.dependencies["playwright-core"],browser:"chromium"}),HZ=["/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"],u8=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function R9($){try{return I1($,R1.X_OK),p8($)&&VZ($).isFile()}catch{return!1}}function l8($,Q=process.platform){let Z=Q==="darwin"?HZ:Q==="linux"?u8:null;return Z?($??Z).find(R9)??null:null}function b1(){if(!process.versions.bun)return;let $=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,$))return;let Q=[];GZ.spawn=new Proxy(GZ.spawn,{apply(Z,X,J){let Y=Reflect.apply(Z,X,J),K=J[1],V=J[2]?.stdio;if(Array.isArray(K)&&K.includes("--remote-debugging-pipe")&&Array.isArray(V)&&V[3]==="pipe"&&V[4]==="pipe")Q.push(Y);return Y}}),Object.defineProperty(globalThis,$,{value:Q})}async function Q8($){if(b1(),$!==void 0){if(!p8($))throw Error("hands_browser_driver_path_must_be_absolute");let X=Y9($,"package.json"),J=JSON.parse(E1(X,"utf8"));if(J.name!==$8.driver)throw Error("hands_browser_wrong_driver");let Y=FZ(X)($),K=Y.default?.chromium??Y.chromium;if(!K)throw Error("hands_browser_missing_chromium");return{version:J.version,chromium:K}}let[Q,Z]=await Promise.all([import("./index-nxzv9qe7.js"),import("./package-s6y0j1as.js").then((m)=>P1(m.default,1))]);return{version:Z.default.version,chromium:Q.chromium}}var k1=($,Q=$8.driverVersion)=>({status:"unavailable",reason:$,expectedDriverVersion:Q}),f1=($)=>$.loadDriver?.()??Q8($.driverModuleDirectory),g1={"1.60.0":"1223"};function BX(){let $=process.platform,Q=g1[$8.driverVersion];if(!Q||$!=="linux"&&$!=="darwin")return!1;let Z=(X)=>process.env[X]??process.env[`npm_config_${X.toLowerCase()}`]??process.env[`npm_package_config_${X.toLowerCase()}`];try{let X=Z("PLAYWRIGHT_BROWSERS_PATH"),J=X==="0"?Y9(S1(FZ(import.meta.url).resolve("playwright-core/package.json")),".local-browsers"):X?w1(Z("INIT_CWD")||process.cwd(),X):Y9($==="darwin"?Y9(zZ(),"Library","Caches"):process.env.XDG_CACHE_HOME||Y9(zZ(),".cache"),"ms-playwright");return VZ(Y9(J,`chromium-${Q}`,"INSTALLATION_COMPLETE")).isFile()}catch{return!1}}async function G9($={}){return UZ($,$8.driverVersion)}async function s8($,Q={}){if($.driverVersion!=="1.61.1"||!p8($.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return UZ({...Q,driverModuleDirectory:$.driverModuleDirectory,allowSystemBrowser:!0},$.driverVersion)}async function UZ($,Q){let Z=(G)=>k1(G,Q),X=$.platform??process.platform;if(X!=="linux"&&X!=="darwin")return Z("unsupported_platform");let J;try{J=await f1($)}catch{return Z("driver_missing")}if(J.version!==Q)return Z("driver_version_mismatch");let Y=(G,F)=>({status:"resolved",executablePath:G,source:F,driverVersion:J.version});if($.executablePath!==void 0)return R9($.executablePath)?Y($.executablePath,"configured"):Z("executable_missing");let K=J.chromium.executablePath();if(R9(K))return Y(K,"managed");let V=$.allowSystemBrowser===!0?l8($.systemCandidates,X):null;return V?Y(V,"system"):Z("executable_missing")}var a1=["/usr/local/bin/chromium",...u8];function o1($,Q=qZ()){return l8($??(Q==="linux"?a1:void 0),Q)}async function r1(){try{return(await Q8()).chromium}catch{return u1(import.meta.url)("playwright-core").chromium}}var t1=1048576,e1=105000,$7=20000,LZ=5000,Q7=2000,Z7=1000,X7=30000,NZ=81920,J7={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function Y7($,Q){let Z=new URL($.url()),X={...await $.allHeaders(),host:Z.host};for(let J of Object.keys(X))if(/^(?:proxy-|connection$|upgrade$|transfer-encoding$|content-length$)/i.test(J))delete X[J];return new Promise((J,Y)=>{let V=(Z.protocol==="https:"?s1:l1)(Z,{method:$.method(),headers:X,agent:!1,lookup:(F,B,H)=>{let z=l0.isIP(Q);if(B.all)H(null,[{address:Q,family:z}]);else H(null,Q,z)}},(F)=>{let B=[],H=0;F.on("data",(z)=>{if(H+=z.length,H>33554432)V.destroy(Error("hands_browser_response_too_large"));else B.push(z)}),F.on("error",Y),F.on("end",()=>{let z={};for(let[L,W]of Object.entries(F.headers))if(W!==void 0&&!["transfer-encoding","connection","content-length"].includes(L))z[L]=Array.isArray(W)?W.join(`
|
|
307
|
+
`):W;J({status:F.statusCode??502,headers:z,body:Buffer.concat(B)})})}),G=setTimeout(()=>V.destroy(Error("hands_browser_fetch_timeout")),X7);V.once("close",()=>clearTimeout(G)),V.on("error",Y),V.end($.postDataBuffer()??void 0)})}async function G7($,Q,Z=()=>{},X={lookup:(J)=>p1(J,{all:!0}),fetch:Y7}){let J=new WeakSet,Y=new WeakMap,K=(V)=>{let G=Y.get(V);if(G)return G;let F=(async()=>{if(!$.newCDPSession)return;let B=await $.newCDPSession(V),H=new Map;B.on("Network.loadingFinished",({requestId:z})=>H.delete(z)),B.on("Network.loadingFailed",({requestId:z})=>H.delete(z)),B.on("Fetch.requestPaused",async(z)=>{let L=z.networkId??z.requestId,W=z.redirectedRequestId?(H.get(L)??0)+1:0;H.set(L,W);let U=I9(z.request.url,Q),j=Q.mode==="enforce"&&Boolean(z.redirectedRequestId)&&U.host!==null&&!l0.isIP(U.host),O=!U.allowed?U:j?{...U,allowed:!1,reason:"destination_not_allowed"}:W>20?{...U,allowed:!1,reason:"redirect_not_supported"}:null;try{if(O)Z(O),await B.send("Fetch.failRequest",{requestId:z.requestId,errorReason:"BlockedByClient"});else await B.send("Fetch.continueRequest",{requestId:z.requestId})}catch{await B.send("Fetch.failRequest",{requestId:z.requestId,errorReason:"Failed"}).catch(()=>{})}}),await B.send("Network.enable"),await B.send("Fetch.enable",{patterns:[{urlPattern:"*",requestStage:"Request"}]}),J.add(V)})();return Y.set(V,F),F};return await $.route("**/*",async(V)=>{let G=V.request().url(),F=I9(G,Q);if(F.allowed&&Q.mode==="public_web"){await V.continue();return}let B=V.request();if(F.allowed&&F.host&&l0.isIP(F.host)&&B.isNavigationRequest?.()){let H=B.frame();if(J.has(H.page())&&H===H.page().mainFrame()){await V.continue();return}}if(F.allowed&&(Q.mode==="off"||F.reason==="local_document")){await V.continue();return}if(F.allowed&&F.host)try{let H=F.host,z=u0(H),L,W=await(async()=>{if(z!=="hostname")return[{address:H,family:l0.isIP(H)}];if(F.reason==="loopback")return[{address:"127.0.0.1",family:4}];try{return await Promise.race([X.lookup(H),new Promise((U,j)=>{L=setTimeout(()=>j(Error("hands_browser_dns_timeout")),5000)})])}finally{if(L)clearTimeout(L)}})();if(!W.length||W.some(({address:U})=>{let j=u0(U);return!l0.isIP(U)||Q.mode==="enforce"&&d8(U,Q.deniedHosts)||(F.reason==="loopback"?j!=="loopback":j!=="public")}))F={...F,allowed:!1,reason:"private_network"};else{let U=await X.fetch(V.request(),W[0].address);if(U.status>=300&&U.status<400){let j=U.headers.location??G;try{j=new URL(j,G).href}catch{}let O=I9(j,Q);F=O.allowed?{...O,allowed:!1,reason:"redirect_not_supported"}:O}else{await V.fulfill(U);return}}}catch{await V.abort("failed");return}Z(F),await V.abort("blockedbyclient")}),await $.routeWebSocket("**/*",async(V)=>{let G=I9(V.url(),Q);if(Q.mode==="enforce"&&G.allowed&&(!G.host||!l0.isIP(G.host)))G={...G,allowed:!1,reason:"destination_not_allowed"};if(G.allowed){V.connectToServer();return}Z(G),await V.close({code:1008,reason:"Reason egress policy denied"})}),Q.mode==="off"?void 0:{preparePage:K}}async function CZ($,Q=qZ(),Z){if(Z){let J=await s8(Z,{platform:Q,systemCandidates:$});return J.status==="resolved"?J.executablePath:null}if($!==void 0){let J=o1($,Q);if(J)return J}let X=await G9({platform:Q,systemCandidates:$,allowSystemBrowser:!0});return X.status==="resolved"?X.executablePath:null}function MZ($,Q){if(!$)throw Error("hands_repl_workspace_required");let Z=i8($),X=z9($),J=a8(X,z9(X,Q)),K=J!==".."&&!J.startsWith(`..${o8}`)&&!BZ(J)?z9(Z,J):z9(Z,Q);if(b0(z9(X,Q))||b0(K))throw Error("hands_repl_protected_path");let V=(W)=>{let U=a8(Z,W);return U!==""&&U!==".."&&!U.startsWith(`..${o8}`)&&!BZ(U)},G=i8(K);if(b0(G))throw Error("hands_repl_protected_path");if(!V(K)||!V(G))throw Error("hands_repl_file_outside_workspace");let F=a8(Z,K).split(o8),B=[Z,...F.map((W,U)=>z9(Z,...F.slice(0,U+1)))],H=B.map((W)=>WZ(W));if(H.some((W)=>W.isSymbolicLink()))throw Error("hands_repl_file_symlink");let z=H[H.length-1];if(!z.isFile()||z.nlink!==1||z.size>16777216)throw Error("hands_repl_file_not_regular_or_too_large");let L=v1(K,n8.O_RDONLY|n8.O_NOFOLLOW|n8.O_NONBLOCK);try{let W=h1(L);if(W.dev!==z.dev||W.ino!==z.ino||!W.isFile())throw Error("hands_repl_file_changed");for(let C=0;C<B.length;C++){let A=WZ(B[C]);if(A.dev!==H[C].dev||A.ino!==H[C].ino||A.isSymbolicLink())throw Error("hands_repl_file_changed")}if(!V(i8(K)))throw Error("hands_repl_file_outside_workspace");let U=Buffer.alloc(16777217),j=0;while(j<U.length){let C=c1(L,U,j,U.length-j,null);if(!C)break;j+=C}if(j===U.length)throw Error("hands_repl_file_too_large");let O=U.subarray(0,j);return{name:n1(K),mimeType:J7[i1(K).toLowerCase()]??"application/octet-stream",buffer:O}}finally{y1(L)}}function K9($,Q){$.end(`${JSON.stringify(Q)}
|
|
308
|
+
`)}function Z8($){try{d1($)}catch{}}async function TZ($){if($.managedBrowser&&$.driverModuleDirectory!==void 0)throw Error("hands_browser_ambiguous_driver_configuration");let Q=$.launch||$.targetContext?null:$.managedBrowser?await s8($.managedBrowser,{executablePath:$.browserExecutablePath}):await G9({executablePath:$.browserExecutablePath,driverModuleDirectory:$.driverModuleDirectory});if(Q?.status==="unavailable")throw Error(`hands_browser_${Q.reason}`);let Z=Q?.status==="resolved"?Q.executablePath:$.browserExecutablePath;if(!Z||!R9(Z))throw Error("hands_browser_unavailable");let X=$.launch??(async(N)=>($.targetContext?await r1():(await Q8($.managedBrowser?.driverModuleDirectory??$.driverModuleDirectory)).chromium).launch(N)),J=[],Y={},K=null,V=null,G=null,F=null,B=!1,H=null,z=new Map,L=new WeakMap,W=null,U=()=>{if(B)throw Error("hands_repl_stopped");if(F)throw F},j=(N)=>{let M=L.get(N);if(M)return M;let D=Promise.resolve().then(()=>N.close()).then(()=>{z.delete(N)});return L.set(N,D),D},O=async()=>{let N=[...z.entries()].reverse(),M=W??=performance.now()+Z7,D=Promise.allSettled(N.filter(([,_])=>_==="context").map(([_])=>j(_))),w;try{await Promise.race([D,new Promise((_)=>{w=setTimeout(_,Math.max(0,M-performance.now()))})])}finally{if(w)clearTimeout(w)}let k=await Promise.allSettled(N.map(([_])=>j(_))),f=[];for(let[_,m]of k.entries()){if(m.status!=="rejected")continue;let c=m.reason instanceof Error&&["Error","TimeoutError","ProtocolError"].includes(m.reason.name)?m.reason.name:"unknown";f.push(Error(`hands_repl_close_failed: ${N[_][1]}: ${c}`))}if(f.length)throw AggregateError(f,"hands_repl_stop_unconfirmed")},C=(N,M)=>{if(z.set(N,M),B||F)j(N).catch(()=>{return}),U();return N},A=async()=>{let N=await X({executablePath:Z,headless:!0,chromiumSandbox:$.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"]}),M=null;try{C(N,"browser"),M=$.targetContext??C(await N.newContext({viewport:{width:1440,height:900},screen:{width:1440,height:900},serviceWorkers:"block",acceptDownloads:!1}),"context");let D=await G7(M,$.networkPolicy??{mode:"off"},$.onEgressDenied);if(U(),D){let b=M.newPage.bind(M);M.newPage=async()=>{let y=await b();return await D.preparePage(y),y}}let k=M.pages()[0]??await M.newPage();await D?.preparePage(k),U();let f=async(b=k)=>{let y=b;if(typeof y.ariaSnapshot==="function")return y.ariaSnapshot({timeout:1e4});return k.locator("body").innerText({timeout:1e4})},_=async(b,y={})=>{let d=y&&typeof y==="object"&&!Array.isArray(y)?y:{},l,G0="image/png";if(Buffer.isBuffer(b)||b instanceof Uint8Array)l=Buffer.from(b);else if(typeof b==="string"&&(b.startsWith("data:")||/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(b)))l=Buffer.from(b.replace(/^data:[^,]*,/,""),"base64");else if(typeof b==="string"){let C0=MZ($.workspaceRoot,b);l=C0.buffer,G0=C0.mimeType}else throw Error("view() needs a Buffer, a base64 string, or a path to an image file");if(l.length===0)throw Error("view(): the image is empty");let N0=String(d.label??"").replace(/[\r\n>]+/g," ").trim().slice(0,120),H0=Number(d.maxWidth)||1024,U0=Number(d.quality)||72,y0=$.targetContext?await N.newPage():await M.newPage();try{let C0=`data:${G0};base64,${l.toString("base64")}`;for(let r=0;r<5;r+=1){let M0=await y0.evaluate(async(W0)=>{let j0=new Image;j0.src=W0.url,await j0.decode();let h0=Math.min(1,W0.maxWidth/j0.naturalWidth),Y0=document.createElement("canvas");Y0.width=Math.max(1,Math.round(j0.naturalWidth*h0)),Y0.height=Math.max(1,Math.round(j0.naturalHeight*h0));let X0=Y0.getContext("2d");if(!X0)throw Error("view(): canvas unavailable");return X0.fillStyle="#ffffff",X0.fillRect(0,0,Y0.width,Y0.height),X0.drawImage(j0,0,0,Y0.width,Y0.height),{data:Y0.toDataURL("image/jpeg",W0.q/100).split(",")[1]??"",width:Y0.width,height:Y0.height,sourceWidth:j0.naturalWidth,sourceHeight:j0.naturalHeight}},{url:C0,maxWidth:H0,q:U0}),r0=Buffer.from(M0.data,"base64");if(r0.length<=NZ){let W0=N0||"image";return`<<<ARA_VIEW_IMAGE ${M0.data} image/jpeg ${W0}>>>
|
|
309
|
+
Viewing ${W0} (${M0.sourceWidth}x${M0.sourceHeight} source, sent at ${M0.width}x${M0.height}, ${Math.round(r0.length/1024)}KB).`}if(H0>640)H0=Math.round(H0*0.75);else U0=Math.max(30,U0-15)}throw Error(`view(): could not reduce the image under ${Math.round(NZ/1024)}KB`)}finally{await y0.close().catch(()=>{return})}},m=eQ({browser:$.targetContext?.browser()??N,context:M,page:k,a11y:f,view:_,readWorkspaceFile:(b)=>MZ($.workspaceRoot,b),privateProfile:$.privateProfile,beforeNavigation:$.beforeNavigation,recording:$.recording,screenshotExport:$.screenshotExport,actionRecorder:()=>{let b=J,y=Y;return(d,l)=>{if(b.length<jZ)b.push(d);if(l)y.page=l}}}),c=async(b)=>{U();let y=C(await N.newContext({serviceWorkers:"block",acceptDownloads:!1}),"context");try{await y.route("**/*",(l)=>l.abort()),U(),await y.routeWebSocket("**/*",(l)=>l.close({code:1008,reason:"Reason evaluator network denied"})),U(),await y.exposeBinding("__araHandsRpc",async(l,G0)=>$.onBrowserOperation?$.onBrowserOperation(b,()=>m.dispatch(G0)):m.dispatch(G0)),U();let d=await y.newPage();return U(),await d.goto("data:text/html,<title>Reason Hands evaluator</title>"),U(),await d.evaluate(`(${pQ})(${JSON.stringify(m.roots)})`),{context:y,page:d,runId:b}}catch(d){throw await j(y).catch(()=>{return}),d}},u=await c(),o={browser:N,context:M,page:k,evaluator:u,async captureProgressFrame(b){return _(await b.screenshot({type:"jpeg",quality:65,timeout:2000}),{label:"Screen after browser action"})},async resetEvaluator(b){await j(o.evaluator.context),o.evaluator=await c(b)}};return U(),o}catch(D){throw await O().catch(()=>{return}),D}},R=async()=>{if(U(),K)return K;if(!G){V=A();let N;G=Promise.race([V,new Promise((M,D)=>{N=setTimeout(()=>D(Error("hands_browser_unavailable: startup timed out")),$7)})]).then((M)=>{return U(),K=M,M}).catch(async()=>{F=Error("hands_browser_unavailable: startup failed or timed out");let M;try{await Promise.race([O(),new Promise((D,w)=>{M=setTimeout(()=>w(Error("hands_repl_stop_timeout")),LZ)})])}catch{F=Error("hands_browser_unavailable: startup cleanup unconfirmed")}finally{if(M)clearTimeout(M)}throw F}).finally(()=>{if(N)clearTimeout(N)})}return G},P=async(N,M,D=!1)=>{let w=await R(),k=Y;if($.onBrowserOperation&&w.evaluator.runId!==M)await w.resetEvaluator(M);let _=(async()=>{let u=await w.evaluator.page.evaluate(`(${uQ})(${JSON.stringify({code:N})})`);if(typeof u!=="string")throw Error("hands_repl_invalid_evaluator_output");let o=k.page;if(D&&o&&!u.includes("<<<ARA_VIEW_IMAGE")){let b=()=>w.captureProgressFrame(o);try{let y=await($.onBrowserOperation?$.onBrowserOperation(M,b):b());return k.automaticProgressImage=!0,`${u}
|
|
310
310
|
${y}`}catch{return`${u}
|
|
311
|
-
Screen capture unavailable.`}}return u})(),
|
|
312
|
-
`);if(k===-1)return;D=!0;let f=M.slice(0,k);if($.onControl)try{let _=JSON.parse(f);if(typeof _.action==="string"&&_.action!=="evaluate")
|
|
313
|
-
`}catch{return!1}}var V7=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function CZ($){let Q=V7.exec($.replace(/\/+$/,""));return Q?`${Q[1]}/repo`:null}import{randomUUID as Y6}from"crypto";import{spawn as G6,spawnSync as z6}from"child_process";import{chmodSync as w9,closeSync as K6,constants as V$,fchmodSync as V6,fstatSync as F6,openSync as H6,copyFileSync as U6,existsSync as H$,lstatSync as t,statSync as b9,mkdtempSync as W6,mkdirSync as L9,realpathSync as n,renameSync as V8,rmSync as B6,writeFileSync as F8}from"fs";import{homedir as L6,tmpdir as Q4}from"os";import{basename as N6,dirname as V0,join as a,resolve as Z4}from"path";var F7={"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 TZ($){return $===null?"other":F7[$]??"other"}function F0($,Q){if($===void 0||Q===void 0)return null;let Z=Math.round(Q-$);return Number.isSafeInteger(Z)&&Z>=0&&Z<=600000?Z:null}var p="workspace_mode",f0="granted_root",B0="project_root",K9="terminal_root",V9="terminal_benchmark_tool_profile",H7=["bash","bash-node-repl","bash-node-repl-files"],OZ="hands_node_repl_persistent_execution_unsupported";function DZ($){return $==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function r8($){return H7.includes($)}function wX($){return _Z($)&&$.workspace_mode==="terminal_root"&&r8($.terminal_benchmark_tool_profile)}var L0="tool_scoped_standby";function bX($){return _Z($)&&$[L0]===!0}function _Z($){return typeof $==="object"&&$!==null&&!Array.isArray($)}var yX=x.object({device_id:x.string().uuid(),root_id:x.string().uuid()}),e8=/^reason\/[0-9a-f]{8}$/,U7=x.strictObject({source_path:x.string().refine(s0).optional(),branch:x.string().regex(e8)}),hX=x.object({checkout_mode:x.enum(["worktree","direct"]).optional(),project_workspace_source:x.object({kind:x.literal("local_device"),device_id:x.string().uuid(),root_id:x.string().uuid(),path:x.string().refine(s0).optional(),worktree:U7.optional()})});import{execFile as W7}from"child_process";var B7=20000,L7=1e4,AZ=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,N7=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function xZ($,Q=M7){let Z=(j,O=L7)=>Q([...N7,"-C",$,...j],O),X=async(j)=>{let O=await Z(j);return O.status===0?O.stdout.trim():null},J=await X(["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(!J||!AZ.test(J))return null;let Y=J.slice(0,12),K=(j)=>({commit:J,from:"head",note:`reason: started from ${j}`}),V=await X(["symbolic-ref","--quiet","HEAD"]);if(!V?.startsWith("refs/heads/"))return K(`the checkout's detached HEAD ${Y}`);let G=V.slice(11),F=await Z(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(F.status!==0||F.stdout.trim())return K(`${G} at ${Y}: the checkout has uncommitted changes, which stay there`);let B=await X(["config","--get",`branch.${G}.remote`]),H=await X(["config","--get",`branch.${G}.merge`]);if(!B||!H?.startsWith("refs/")||B.startsWith("-"))return K(`${G} at ${Y}: it has no upstream to catch up with`);let z=B==="."||(await Z(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",B,H],B7)).status===0,L=await X(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),W=L?await X(["rev-parse","--verify","--quiet","@{upstream}^{commit}"]):null;if(!L||!W||!AZ.test(W))return K(`${G} at ${Y}: ${z?"it has no upstream to catch up with":`fetching ${B} failed`}`);if(!z)return K(`${G} at ${Y}: fetching ${L} failed, so it may be behind`);if(W===J)return K(`${G} at ${Y}, the same commit as ${L} after fetching it`);if((await Z(["merge-base","--is-ancestor",J,W])).status!==0)return K(`${G} at ${Y}: it has commits that ${L} does not`);let U=await X(["rev-list","--count",`${J}..${W}`]);return{commit:W,from:"upstream",note:`reason: started from ${L} at ${W.slice(0,12)}, fetched just now: ${G} had no commits of its own and was ${U??"some"} commits behind it`}}function M7($,Q){return new Promise((Z)=>{W7("git",$,{encoding:"utf8",timeout:Q,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(X,J)=>{let Y=X?typeof X.code==="number"?X.code:null:0;Z({status:Y,stdout:String(J??"")})})})}import{execFile as j7}from"child_process";import{lstatSync as Z$,readdirSync as $$,readFileSync as RZ,realpathSync as Q8,rmdirSync as PZ,unlinkSync as q7,writeFileSync as C7}from"fs";import{readFile as T7}from"fs/promises";import{join as A0,resolve as IZ}from"path";var R9=".reason-device",O7=86400000,D7=500,_7=60000;function EZ($,Q,Z){let X=Q.split("/"),J=F9.split("/");if(X.length!==J.length+2||J.some((Y,K)=>X[K]!==Y)||!Z8.test(X[J.length]))return;try{let Y=SZ($,X[J.length]);C7(A0(Y,R9),Z,{flag:"wx",mode:384})}catch{}}function SZ($,Q){let Z=()=>new q("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!Z8.test(Q))throw Z();let X=A0(Q8($),F9),J=A0(X,Q);if(!Z$(J).isDirectory()||Q8(J)!==J)throw Z();return J}async function A7($,Q,Z=P7){let X;try{X=SZ($,Q)}catch(J){if(Q$(J))return!0;throw J}for(let J of $$(X,{withFileTypes:!0})){if(J.name===R9||!J.isDirectory())continue;let Y=A0(X,J.name),K=await x7(Y);if(K){let V=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false",`--git-dir=${K}`,"worktree"];if((await Z([...V,"remove","--force",Y])).status===0)await Z([...V,"prune"])}else try{PZ(Y)}catch{}}if($$(X).some((J)=>J!==R9))return!1;try{q7(A0(X,R9))}catch(J){if(!Q$(J))throw J}return PZ(X),!0}async function x7($){try{let Q=A0($,".git");if(!Z$(Q).isFile())return null;let Z=/^gitdir: (.+)$/m.exec(RZ(Q,"utf8"));if(!Z)return null;let X=IZ($,Z[1].trim());return IZ(X,(await T7(A0(X,"commondir"),"utf8")).trim())}catch{return null}}async function aX($){let Q;try{if(Q=A0(Q8($.home),F9),!Z$(Q).isDirectory())return{status:"skipped",reason:"workspace_untrusted"};if(Q8(Q)!==Q)return{status:"skipped",reason:"workspace_untrusted"}}catch(Y){if(Q$(Y))return{status:"skipped",reason:"no_workspace"};throw Y}let Z=$$(Q,{withFileTypes:!0}).filter((Y)=>Y.isDirectory()&&Z8.test(Y.name)).map((Y)=>Y.name).filter((Y)=>{try{return RZ(A0(Q,Y,R9),"utf8")===$.deviceId}catch{return!1}}).sort().slice(0,D7);if(!Z.length)return{status:"done",removed:[],kept:[],failed:[]};let X=await $.liveIds(Z);if(X===null)return{status:"skipped",reason:"server_unsupported"};let J={status:"done",removed:[],kept:Z.filter((Y)=>X.includes(Y)),failed:[]};for(let Y of Z.filter((K)=>!X.includes(K)))(await A7($.home,Y,$.runGit).catch(()=>!1)?J.removed:J.failed).push(Y);return J}function oX($,Q,Z=O7){if(Q.aborted)return;let X=!1,J=()=>{if(X||Q.aborted)return;X=!0,$().catch(()=>{return}).finally(()=>{X=!1})},Y=setInterval(J,Z);Y.unref?.(),Q.addEventListener("abort",()=>clearInterval(Y),{once:!0}),J()}function Q$($){return typeof $==="object"&&$!==null&&$.code==="ENOENT"}function P7($){return new Promise((Q)=>{j7("git",$,{encoding:"utf8",timeout:_7,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(Z,X,J)=>{let Y=Z&&typeof Z.code==="number"?Z.code:null;Q({status:Z?Y??1:0,stderr:J??""})})})}import{createHash as I7}from"crypto";import{join as R7}from"path";function E7($){return X8($)}function x0(){throw new q("environment_unavailable","The private Session environment is unavailable or stale.")}function J8($){return I7("sha256").update(JSON.stringify({...$,variables:Object.fromEntries(Object.entries($.variables).sort(([Q],[Z])=>Q.localeCompare(Z)))})).digest("hex")}function wZ($,Q){D9($);let Z=R7($,"environment.json"),X,J=new Set,Y=(V,G)=>`${G}:${V}`,K=(V)=>{let G=jQ.safeParse(V);if(!G.success)return x0();let F=G.data,B=Q.identity(),H=Date.parse(F.expires_at);if(!B||F.run_id!==Q.runId||F.device_id!==Q.deviceId||F.root_id!==Q.rootId||F.binding.kind!==Q.binding.kind||F.binding.target_revision!==Q.binding.target_revision||F.binding.root_grant_revision!==Q.binding.root_grant_revision||F.binding.target_generation!==B.generation||F.binding.target_fence_id!==B.fenceId||H<=Date.now()||H>Q.expiresAtMs||Q.expiresAtMs<=Date.now()||Object.keys(F.variables).some((z)=>!E7(z)))return x0();if(F.git){let z=new URL(Q.apiOrigin),L=new URL(F.git.base_url),W=Date.parse(F.git.expires_at);if(L.origin!==z.origin)throw new q("environment_git_origin_mismatch","The delivered Git broker is not on this worker's API origin.");if(!["/git","/git/"].includes(L.pathname)||L.username||L.password||L.search||L.hash||W<=Date.now()||W>H)return x0()}if(F.cloud_access&&!NQ(F.cloud_access,Q.apiOrigin))throw new q("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return F};return{path:Z,install(V){let G=K(V),F=J8(G);if(X&&(G.revision<X.revision||G.revision===X.revision&&(F!==X.hash||G.snapshot_id!==X.snapshotId)))return x0();if(!X||G.revision>X.revision){if(PQ(Z,G,_0.snapshotBytes),J8(K(JSON.parse(_9(Z,_0.snapshotBytes))))!==F)return x0();let B=X;if(X={revision:G.revision,hash:F,snapshotId:G.snapshot_id,generation:G.binding.target_generation},B&&B.generation<X.generation)J.add(Y(B.snapshotId,B.revision))}else if(J8(K(JSON.parse(_9(Z,_0.snapshotBytes))))!==X.hash)return x0();return{installed:!0,snapshot_id:G.snapshot_id,installed_revision:G.revision}},current(){if(!X)return x0();try{let V=K(JSON.parse(_9(Z,_0.snapshotBytes)));if(J8(V)!==X.hash)return x0();return V}catch{return x0()}},carried:(V,G)=>J.has(Y(V,G))}}var H9=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})]),S7="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",w7=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",S7]),bZ=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),UJ=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),WJ=new Set([K0,...H9.map(($)=>$.artifact_sha256),...w7,...bZ]);var BJ=new Set([K0,...H9.filter(($)=>$.pi_tools_v1).map(($)=>$.artifact_sha256),...bZ]);var LJ=new Set([K0,...H9.filter(($)=>$.pi_tools_confinement_v1).map(($)=>$.artifact_sha256)]);var NJ=new Set([K0,...H9.filter(($)=>$.home_folder_v1).map(($)=>$.artifact_sha256)]);var MJ=new Set([K0,...H9.filter(($)=>$.background_bash_v1).map(($)=>$.artifact_sha256)]);var jJ=new Set([K0,...H9.filter(($)=>$.machine_sdk_v1).map(($)=>$.artifact_sha256)]);var b7=[n0,"reason-hands-worker.cjs"];function kZ($){return typeof $==="string"&&b7.includes($)}var k7;function fZ(){return k7??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as f7,constants as X$,fstatSync as mZ,lstatSync as m7,openSync as g7,readSync as y7,realpathSync as h7,watch as v7}from"fs";import{dirname as gZ}from"path";function Y8($,Q){let Z;try{let X=gZ($),J=m7(X);if(!J.isDirectory()||J.isSymbolicLink()||J.uid!==process.getuid?.()||(J.mode&18)!==0||h7(X)!==X)return null;Z=g7($,X$.O_RDONLY|X$.O_NOFOLLOW|X$.O_NONBLOCK);let Y=mZ(Z);if(!Y.isFile()||Y.nlink!==1||Y.uid!==process.getuid?.()||(Y.mode&63)!==0||Y.size<1||Y.size>8192)return null;let K=Buffer.alloc(8193),V=y7(Z,K,0,K.length,0),G=mZ(Z);if(V!==Y.size||G.size!==Y.size||G.nlink!==1||G.mtimeMs!==Y.mtimeMs||G.ctimeMs!==Y.ctimeMs)return null;let F=JSON.parse(K.subarray(0,V).toString("utf8"));if(!F||F.pid!==Q.pid||!Number.isSafeInteger(F.pid)||F.pid<1||F.launchId!==Q.launchId||F.workerVersion!==Q.workerVersion||F.protocolVersion!==Q.protocolVersion||F.workerArtifactSha256!==Q.workerArtifactSha256||F.workerEntrypoint!==Q.workerEntrypoint||F.workspaceAliasReady!==!0||!S0(F.targetGeneration)||!S0(F.generation)||!O0(F.fenceId))return null;return{...Q,generation:F.generation,targetGeneration:F.targetGeneration,fenceId:F.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(Z!==void 0)f7(Z)}}var c7=($,Q,Z)=>{let X=v7($,{persistent:!1},Q);return X.on("error",Z),X};function yZ($){let Q=new AbortController,Z=$.initial,X=Z.targetGeneration,J=!1,Y=!1,K,V,G=()=>{if(Y)return;Y=!0,K?.close(),K=void 0,clearInterval(V),$.signal.removeEventListener("abort",G),Q.abort()},F=()=>{if(Y)return;if(!$.isAlive()){G();return}let B=Y8($.path,$.initial);if(!B||B.generation<Z.generation||B.targetGeneration<Z.targetGeneration||B.targetGeneration===Z.targetGeneration&&B.fenceId!==Z.fenceId)return;if(Z=B,J||B.targetGeneration<=X)return;X=B.targetGeneration,J=!0,Promise.resolve().then(()=>{return Q.signal.throwIfAborted(),$.publish(B,Q.signal)}).catch(()=>{if(!Y)G(),$.failed?.()}).finally(()=>{J=!1,F()})};if($.signal.aborted)return G(),{stop:G};$.signal.addEventListener("abort",G,{once:!0});try{K=($.watch??c7)(gZ($.path),F,()=>{K?.close(),K=void 0})}catch{}return V=setInterval(F,1000),V.unref?.(),F(),{stop:G}}import{spawn as d7}from"child_process";import{chmodSync as p7,mkdtempSync as u7,realpathSync as l7,rmSync as s7,unlinkSync as n7,writeFileSync as i7}from"fs";import a7 from"net";import{platform as o7,tmpdir as r7}from"os";import{join as hZ}from"path";var vZ=1048576,G$=105000,t7=2000,e7=String.raw`
|
|
311
|
+
Screen capture unavailable.`}}return u})(),m,c=new Promise((u,o)=>{m=setTimeout(()=>o(Error("REPL evaluation timed out after 105 seconds")),e1)});try{return await Promise.race([_,c])}catch(u){if(u instanceof Error&&u.message.includes("timed out"))_.catch(()=>{return}),await w.resetEvaluator(M).catch(()=>{return});throw u}finally{if(m)clearTimeout(m)}},T=Promise.resolve(),S=new Set,g=new Set;Z8($.socketPath);let E=l0.createServer((N)=>{S.add(N),N.once("close",()=>{S.delete(N),g.delete(N)}),N.setEncoding("utf8");let M="",D=!1;N.on("data",(w)=>{if(D)return;if(M+=w,M.length>t1){D=!0,K9(N,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let k=M.indexOf(`
|
|
312
|
+
`);if(k===-1)return;D=!0;let f=M.slice(0,k);if($.onControl)try{let _=JSON.parse(f);if(typeof _.action==="string"&&_.action!=="evaluate")g.add(N)}catch{}T=T.then(async()=>{if(N.destroyed)return;J=[],Y={};try{let _=JSON.parse(f);if(_.action==="probe"){let b=await R();await P("undefined",b.evaluator.runId),K9(N,{ok:!0,output:"ARA_HANDS_REPL_READY"});return}if(typeof _.action==="string"&&_.action!=="evaluate"&&$.onControl){K9(N,{ok:!0,output:await $.onControl(_.action,_)});return}if(_.action!=="evaluate"||typeof _.code!=="string")throw Error("Invalid REPL request");let m=_.code,c=typeof _.runId==="string"?_.runId:void 0,u=()=>P(m,c,_.includeProgressCapture===!0),o=await($.onEvaluate?$.onEvaluate(_,u):u());K9(N,{ok:!0,output:o,browserActions:J,...Y.automaticProgressImage?{automaticProgressImage:!0}:{}})}catch(_){K9(N,{ok:!1,error:_ instanceof Error?_.message:String(_),stack:_ instanceof Error?_.stack:void 0,browserActions:J})}}).catch((_)=>{K9(N,{ok:!1,error:_ instanceof Error?_.message:String(_)})})})});try{await new Promise((N,M)=>{E.once("error",M),E.listen($.socketPath,()=>{E.off("error",M);try{m1($.socketPath,384),N()}catch(D){E.close(()=>M(D))}})})}catch(N){throw Z8($.socketPath),N}return{socketPath:$.socketPath,browserExecutablePath:Z,stop(){if(H)return H;B=!0;let N=g.size?setTimeout(()=>{for(let k of g)k.destroy()},Q7):void 0,M=new Promise((k)=>E.close(()=>{if(N)clearTimeout(N);k()}));for(let k of S)if(!g.has(k))k.destroy();T.catch(()=>{return});let D=async()=>{await M,Z8($.socketPath);let k=[O()];if(V)k.push(V.then(()=>{return},()=>{return}));let f=await Promise.allSettled(k),_=await Promise.allSettled([O()]),m=[...f,..._].filter((c)=>c.status==="rejected");if(m.length)throw AggregateError(m.map((c)=>c.reason),"hands_repl_stop_unconfirmed")},w;return H=Promise.race([D(),new Promise((k,f)=>{w=setTimeout(()=>f(Error("hands_repl_stop_timeout")),LZ)})]).finally(()=>{if(w)clearTimeout(w);Z8($.socketPath)}),H}}}var z7=["private_runtime","runtime_root","temporary_directory","granted_root","workspace_layout","jobs","browser_socket","relay_url","environment_owner","job_environment","config_write"],K7=["ENOENT","EACCES","EPERM","EINVAL","ENOTDIR","EISDIR","ELOOP","EROFS","ENOSPC","EMFILE","ENFILE","EEXIST"];function OZ($,Q){if(!$||!z7.includes($))return null;let Z=typeof Q==="object"&&Q!==null&&"code"in Q?Q.code:null;return{workspace_stage:$,workspace_errno:typeof Z==="string"&&K7.includes(Z)?Z:"unknown"}}import{lstatSync as V7,readFileSync as F7}from"fs";var H7="/run/sc/egress-guard",U7=10002,r8=10003;function DZ($=process.platform,Q=H7){if($!=="linux")return!1;try{let Z=V7(Q);if(!Z.isFile()||Z.uid!==0||(Z.mode&18)!==0)return!1;return F7(Q,"utf8")===`v1 ${U7} ${r8}
|
|
313
|
+
`}catch{return!1}}var W7=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function _Z($){let Q=W7.exec($.replace(/\/+$/,""));return Q?`${Q[1]}/repo`:null}import{randomUUID as V6}from"crypto";import{spawn as F6,spawnSync as H6}from"child_process";import{chmodSync as b9,closeSync as U6,constants as F$,fchmodSync as W6,fstatSync as B6,openSync as L6,copyFileSync as N6,existsSync as U$,lstatSync as t,statSync as k9,mkdtempSync as M6,mkdirSync as N9,realpathSync as n,renameSync as H8,rmSync as j6,writeFileSync as U8}from"fs";import{homedir as q6,tmpdir as Y4}from"os";import{basename as C6,dirname as V0,join as a,resolve as G4}from"path";var B7={"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 AZ($){return $===null?"other":B7[$]??"other"}function F0($,Q){if($===void 0||Q===void 0)return null;let Z=Math.round(Q-$);return Number.isSafeInteger(Z)&&Z>=0&&Z<=600000?Z:null}var p="workspace_mode",f0="granted_root",B0="project_root",V9="terminal_root",F9="terminal_benchmark_tool_profile",L7=["bash","bash-node-repl","bash-node-repl-files"],xZ="hands_node_repl_persistent_execution_unsupported";function PZ($){return $==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function t8($){return L7.includes($)}function yX($){return IZ($)&&$.workspace_mode==="terminal_root"&&t8($.terminal_benchmark_tool_profile)}var L0="tool_scoped_standby";function hX($){return IZ($)&&$[L0]===!0}function IZ($){return typeof $==="object"&&$!==null&&!Array.isArray($)}var uX=x.object({device_id:x.string().uuid(),root_id:x.string().uuid()}),$$=/^reason\/[0-9a-f]{8}$/,N7=x.strictObject({source_path:x.string().refine(s0).optional(),branch:x.string().regex($$)}),lX=x.object({checkout_mode:x.enum(["worktree","direct"]).optional(),project_workspace_source:x.object({kind:x.literal("local_device"),device_id:x.string().uuid(),root_id:x.string().uuid(),path:x.string().refine(s0).optional(),worktree:N7.optional()})});import{execFile as M7}from"child_process";var j7=20000,q7=1e4,RZ=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,C7=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function EZ($,Q=T7){let Z=(j,O=q7)=>Q([...C7,"-C",$,...j],O),X=async(j)=>{let O=await Z(j);return O.status===0?O.stdout.trim():null},J=await X(["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(!J||!RZ.test(J))return null;let Y=J.slice(0,12),K=(j)=>({commit:J,from:"head",note:`reason: started from ${j}`}),V=await X(["symbolic-ref","--quiet","HEAD"]);if(!V?.startsWith("refs/heads/"))return K(`the checkout's detached HEAD ${Y}`);let G=V.slice(11),F=await Z(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(F.status!==0||F.stdout.trim())return K(`${G} at ${Y}: the checkout has uncommitted changes, which stay there`);let B=await X(["config","--get",`branch.${G}.remote`]),H=await X(["config","--get",`branch.${G}.merge`]);if(!B||!H?.startsWith("refs/")||B.startsWith("-"))return K(`${G} at ${Y}: it has no upstream to catch up with`);let z=B==="."||(await Z(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",B,H],j7)).status===0,L=await X(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),W=L?await X(["rev-parse","--verify","--quiet","@{upstream}^{commit}"]):null;if(!L||!W||!RZ.test(W))return K(`${G} at ${Y}: ${z?"it has no upstream to catch up with":`fetching ${B} failed`}`);if(!z)return K(`${G} at ${Y}: fetching ${L} failed, so it may be behind`);if(W===J)return K(`${G} at ${Y}, the same commit as ${L} after fetching it`);if((await Z(["merge-base","--is-ancestor",J,W])).status!==0)return K(`${G} at ${Y}: it has commits that ${L} does not`);let U=await X(["rev-list","--count",`${J}..${W}`]);return{commit:W,from:"upstream",note:`reason: started from ${L} at ${W.slice(0,12)}, fetched just now: ${G} had no commits of its own and was ${U??"some"} commits behind it`}}function T7($,Q){return new Promise((Z)=>{M7("git",$,{encoding:"utf8",timeout:Q,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(X,J)=>{let Y=X?typeof X.code==="number"?X.code:null:0;Z({status:Y,stdout:String(J??"")})})})}import{execFile as O7}from"child_process";import{lstatSync as X$,readdirSync as Q$,readFileSync as bZ,realpathSync as X8,rmdirSync as SZ,unlinkSync as D7,writeFileSync as _7}from"fs";import{readFile as A7}from"fs/promises";import{join as A0,resolve as wZ}from"path";var E9=".reason-device",x7=86400000,P7=500,I7=60000;function kZ($,Q,Z){let X=Q.split("/"),J=H9.split("/");if(X.length!==J.length+2||J.some((Y,K)=>X[K]!==Y)||!J8.test(X[J.length]))return;try{let Y=fZ($,X[J.length]);_7(A0(Y,E9),Z,{flag:"wx",mode:384})}catch{}}function fZ($,Q){let Z=()=>new q("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!J8.test(Q))throw Z();let X=A0(X8($),H9),J=A0(X,Q);if(!X$(J).isDirectory()||X8(J)!==J)throw Z();return J}async function R7($,Q,Z=S7){let X;try{X=fZ($,Q)}catch(J){if(Z$(J))return!0;throw J}for(let J of Q$(X,{withFileTypes:!0})){if(J.name===E9||!J.isDirectory())continue;let Y=A0(X,J.name),K=await E7(Y);if(K){let V=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false",`--git-dir=${K}`,"worktree"];if((await Z([...V,"remove","--force",Y])).status===0)await Z([...V,"prune"])}else try{SZ(Y)}catch{}}if(Q$(X).some((J)=>J!==E9))return!1;try{D7(A0(X,E9))}catch(J){if(!Z$(J))throw J}return SZ(X),!0}async function E7($){try{let Q=A0($,".git");if(!X$(Q).isFile())return null;let Z=/^gitdir: (.+)$/m.exec(bZ(Q,"utf8"));if(!Z)return null;let X=wZ($,Z[1].trim());return wZ(X,(await A7(A0(X,"commondir"),"utf8")).trim())}catch{return null}}async function QJ($){let Q;try{if(Q=A0(X8($.home),H9),!X$(Q).isDirectory())return{status:"skipped",reason:"workspace_untrusted"};if(X8(Q)!==Q)return{status:"skipped",reason:"workspace_untrusted"}}catch(Y){if(Z$(Y))return{status:"skipped",reason:"no_workspace"};throw Y}let Z=Q$(Q,{withFileTypes:!0}).filter((Y)=>Y.isDirectory()&&J8.test(Y.name)).map((Y)=>Y.name).filter((Y)=>{try{return bZ(A0(Q,Y,E9),"utf8")===$.deviceId}catch{return!1}}).sort().slice(0,P7);if(!Z.length)return{status:"done",removed:[],kept:[],failed:[]};let X=await $.liveIds(Z);if(X===null)return{status:"skipped",reason:"server_unsupported"};let J={status:"done",removed:[],kept:Z.filter((Y)=>X.includes(Y)),failed:[]};for(let Y of Z.filter((K)=>!X.includes(K)))(await R7($.home,Y,$.runGit).catch(()=>!1)?J.removed:J.failed).push(Y);return J}function ZJ($,Q,Z=x7){if(Q.aborted)return;let X=!1,J=()=>{if(X||Q.aborted)return;X=!0,$().catch(()=>{return}).finally(()=>{X=!1})},Y=setInterval(J,Z);Y.unref?.(),Q.addEventListener("abort",()=>clearInterval(Y),{once:!0}),J()}function Z$($){return typeof $==="object"&&$!==null&&$.code==="ENOENT"}function S7($){return new Promise((Q)=>{O7("git",$,{encoding:"utf8",timeout:I7,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(Z,X,J)=>{let Y=Z&&typeof Z.code==="number"?Z.code:null;Q({status:Z?Y??1:0,stderr:J??""})})})}import{createHash as w7}from"crypto";import{join as b7}from"path";function k7($){return Y8($)}function x0(){throw new q("environment_unavailable","The private Session environment is unavailable or stale.")}function G8($){return w7("sha256").update(JSON.stringify({...$,variables:Object.fromEntries(Object.entries($.variables).sort(([Q],[Z])=>Q.localeCompare(Z)))})).digest("hex")}function gZ($,Q){_9($);let Z=b7($,"environment.json"),X,J=new Set,Y=(V,G)=>`${G}:${V}`,K=(V)=>{let G=qQ.safeParse(V);if(!G.success)return x0();let F=G.data,B=Q.identity(),H=Date.parse(F.expires_at);if(!B||F.run_id!==Q.runId||F.device_id!==Q.deviceId||F.root_id!==Q.rootId||F.binding.kind!==Q.binding.kind||F.binding.target_revision!==Q.binding.target_revision||F.binding.root_grant_revision!==Q.binding.root_grant_revision||F.binding.target_generation!==B.generation||F.binding.target_fence_id!==B.fenceId||H<=Date.now()||H>Q.expiresAtMs||Q.expiresAtMs<=Date.now()||Object.keys(F.variables).some((z)=>!k7(z)))return x0();if(F.git){let z=new URL(Q.apiOrigin),L=new URL(F.git.base_url),W=Date.parse(F.git.expires_at);if(L.origin!==z.origin)throw new q("environment_git_origin_mismatch","The delivered Git broker is not on this worker's API origin.");if(!["/git","/git/"].includes(L.pathname)||L.username||L.password||L.search||L.hash||W<=Date.now()||W>H)return x0()}if(F.cloud_access&&!MQ(F.cloud_access,Q.apiOrigin))throw new q("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return F};return{path:Z,install(V){let G=K(V),F=G8(G);if(X&&(G.revision<X.revision||G.revision===X.revision&&(F!==X.hash||G.snapshot_id!==X.snapshotId)))return x0();if(!X||G.revision>X.revision){if(IQ(Z,G,_0.snapshotBytes),G8(K(JSON.parse(A9(Z,_0.snapshotBytes))))!==F)return x0();let B=X;if(X={revision:G.revision,hash:F,snapshotId:G.snapshot_id,generation:G.binding.target_generation},B&&B.generation<X.generation)J.add(Y(B.snapshotId,B.revision))}else if(G8(K(JSON.parse(A9(Z,_0.snapshotBytes))))!==X.hash)return x0();return{installed:!0,snapshot_id:G.snapshot_id,installed_revision:G.revision}},current(){if(!X)return x0();try{let V=K(JSON.parse(A9(Z,_0.snapshotBytes)));if(G8(V)!==X.hash)return x0();return V}catch{return x0()}},carried:(V,G)=>J.has(Y(V,G))}}var U9=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})]),f7="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",g7=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",f7]),mZ=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),jJ=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),qJ=new Set([K0,...U9.map(($)=>$.artifact_sha256),...g7,...mZ]);var CJ=new Set([K0,...U9.filter(($)=>$.pi_tools_v1).map(($)=>$.artifact_sha256),...mZ]);var TJ=new Set([K0,...U9.filter(($)=>$.pi_tools_confinement_v1).map(($)=>$.artifact_sha256)]);var OJ=new Set([K0,...U9.filter(($)=>$.home_folder_v1).map(($)=>$.artifact_sha256)]);var DJ=new Set([K0,...U9.filter(($)=>$.background_bash_v1).map(($)=>$.artifact_sha256)]);var _J=new Set([K0,...U9.filter(($)=>$.machine_sdk_v1).map(($)=>$.artifact_sha256)]);var m7=[n0,"reason-hands-worker.cjs"];function yZ($){return typeof $==="string"&&m7.includes($)}var y7;function hZ(){return y7??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as h7,constants as J$,fstatSync as vZ,lstatSync as v7,openSync as c7,readSync as d7,realpathSync as p7,watch as u7}from"fs";import{dirname as cZ}from"path";function z8($,Q){let Z;try{let X=cZ($),J=v7(X);if(!J.isDirectory()||J.isSymbolicLink()||J.uid!==process.getuid?.()||(J.mode&18)!==0||p7(X)!==X)return null;Z=c7($,J$.O_RDONLY|J$.O_NOFOLLOW|J$.O_NONBLOCK);let Y=vZ(Z);if(!Y.isFile()||Y.nlink!==1||Y.uid!==process.getuid?.()||(Y.mode&63)!==0||Y.size<1||Y.size>8192)return null;let K=Buffer.alloc(8193),V=d7(Z,K,0,K.length,0),G=vZ(Z);if(V!==Y.size||G.size!==Y.size||G.nlink!==1||G.mtimeMs!==Y.mtimeMs||G.ctimeMs!==Y.ctimeMs)return null;let F=JSON.parse(K.subarray(0,V).toString("utf8"));if(!F||F.pid!==Q.pid||!Number.isSafeInteger(F.pid)||F.pid<1||F.launchId!==Q.launchId||F.workerVersion!==Q.workerVersion||F.protocolVersion!==Q.protocolVersion||F.workerArtifactSha256!==Q.workerArtifactSha256||F.workerEntrypoint!==Q.workerEntrypoint||F.workspaceAliasReady!==!0||!S0(F.targetGeneration)||!S0(F.generation)||!O0(F.fenceId))return null;return{...Q,generation:F.generation,targetGeneration:F.targetGeneration,fenceId:F.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(Z!==void 0)h7(Z)}}var l7=($,Q,Z)=>{let X=u7($,{persistent:!1},Q);return X.on("error",Z),X};function dZ($){let Q=new AbortController,Z=$.initial,X=Z.targetGeneration,J=!1,Y=!1,K,V,G=()=>{if(Y)return;Y=!0,K?.close(),K=void 0,clearInterval(V),$.signal.removeEventListener("abort",G),Q.abort()},F=()=>{if(Y)return;if(!$.isAlive()){G();return}let B=z8($.path,$.initial);if(!B||B.generation<Z.generation||B.targetGeneration<Z.targetGeneration||B.targetGeneration===Z.targetGeneration&&B.fenceId!==Z.fenceId)return;if(Z=B,J||B.targetGeneration<=X)return;X=B.targetGeneration,J=!0,Promise.resolve().then(()=>{return Q.signal.throwIfAborted(),$.publish(B,Q.signal)}).catch(()=>{if(!Y)G(),$.failed?.()}).finally(()=>{J=!1,F()})};if($.signal.aborted)return G(),{stop:G};$.signal.addEventListener("abort",G,{once:!0});try{K=($.watch??l7)(cZ($.path),F,()=>{K?.close(),K=void 0})}catch{}return V=setInterval(F,1000),V.unref?.(),F(),{stop:G}}import{spawn as s7}from"child_process";import{chmodSync as n7,mkdtempSync as i7,realpathSync as a7,rmSync as o7,unlinkSync as r7,writeFileSync as t7}from"fs";import e7 from"net";import{platform as $6,tmpdir as Q6}from"os";import{join as pZ}from"path";var uZ=1048576,z$=105000,Z6=2000,X6=String.raw`
|
|
314
314
|
const { writeSync } = require("node:fs");
|
|
315
315
|
const { createRequire } = require("node:module");
|
|
316
316
|
const { join } = require("node:path");
|
|
@@ -318,7 +318,7 @@ const { createInterface } = require("node:readline");
|
|
|
318
318
|
const { formatWithOptions, inspect } = require("node:util");
|
|
319
319
|
const vm = require("node:vm");
|
|
320
320
|
|
|
321
|
-
const timeoutMs = ${
|
|
321
|
+
const timeoutMs = ${z$};
|
|
322
322
|
const maxLogChars = 524288;
|
|
323
323
|
let activeOutput = [];
|
|
324
324
|
let activeOutputChars = 0;
|
|
@@ -449,11 +449,11 @@ lines.on("line", (line) => {
|
|
|
449
449
|
}
|
|
450
450
|
}).catch((error) => respond({ ok: false, error: String(error) }));
|
|
451
451
|
});
|
|
452
|
-
`;function
|
|
453
|
-
`)}function
|
|
454
|
-
`);
|
|
455
|
-
`);if(A===-1)return;let R=z.slice(0,A);z=z.slice(A+1);let P=F;if(!P){H();return}try{let T=JSON.parse(R);if(P.action==="probe")P.resolve(T);else{B(P,T);return}}catch{B(P,void 0,Error("invalid_hands_node_repl_child_response"));return}}});let L=(C)=>{let A=V.trim(),R=C??Error(A?`hands_node_repl_child_exited:${A}`:"hands_node_repl_child_exited");if(K=!0,F&&!F.finishing)B(F,void 0,R)};Z.once("error",L),Z.once("close",()=>L()),Z.stdin.on("error",L);let W=(C)=>new Promise((A,R)=>{if(Y||K||Z.exitCode!==null||Z.signalCode!==null){R(Error(K?"hands_node_repl_state_lost":"hands_node_repl_stopped"));return}let P=setTimeout(H,C.action==="probe"?1e4:Math.max(1,Math.min($.evaluationTimeoutMs??
|
|
456
|
-
`,(S)=>{if(!S)return;B(T,void 0,S)})});try{if(!G){if(Z.pid===void 0)await
|
|
457
|
-
`);if(S===-1)return;R=!0;let m=A.slice(0,S);U=U.then(async()=>{if(C.destroyed)return;try{let E=JSON.parse(m);if(E.action!=="evaluate"||typeof E.code!=="string")throw Error("Invalid REPL request");P=!0;let N=await W({action:"evaluate",code:E.code});if(P=!1,N.ok!==!0||typeof N.output!=="string")throw Error(typeof N.error==="string"?N.error:"hands_node_repl_failed");G8(C,{ok:!0,output:N.output})}catch(E){P=!1,G8(C,{ok:!1,error:E instanceof Error?E.message:String(E),stack:E instanceof Error?E.stack:void 0})}}).catch((E)=>{G8(C,{ok:!1,error:E instanceof Error?E.message:String(E)})})})});try{await new Promise((C,A)=>{O.once("error",A),O.listen($.socketPath,()=>{O.off("error",A);try{p7($.socketPath,384),C()}catch(R){O.close(()=>A(R))}})})}catch(C){Y=!0,Z.kill("SIGKILL");try{await E9(X)}finally{await Q.cleanup(),J$($.socketPath)}throw C}return{socketPath:$.socketPath,async stop(){if(Y)return;Y=!0;let C=new Promise((A)=>O.close(()=>A()));for(let A of j)A.destroy();await C,U.catch(()=>{return}),H();try{await E9(X)}finally{await Q.cleanup(),J$($.socketPath)}}}}var z$=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var dZ="/workspace",pZ="/var/lib/reason/sessions",X6="/var/lib/reason/session-controls";function uZ($){let Q=`${pZ}/`;if(!$.startsWith(Q))return null;let Z=$.slice(Q.length);if(!z$.test(Z)||Z!==Z.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${X6}/${Z}/job.env`}function J6($){if(!z$.test($))throw Error("personal_computer_invalid_identity");return $.toLowerCase()}function K8($){let Q=J6($);return{runtimeRoot:`${pZ}/${Q}`,workspaceRoot:`${dZ}/sessions/${Q}`,sharedRoot:dZ}}var lZ="/root/.ara/cloud-browser/repl.sock";function K$($){return $==="compute"}function sZ($,Q,Z="linux"){if($)K8($);if(Z!=="linux")throw Error("cloud_browser_os_invalid");if(Q!==void 0&&(!$||!/^[1-9][0-9]{0,18}$/.test(Q)))throw Error("cloud_browser_generation_invalid");let X=$?`/var/lib/reason/browsers/${$.toLowerCase()}`:"/root/.ara/cloud-browser",J=$?`${X}/${Q?`g${Q}`:"current"}`:X,Y=$?`/root/.b/${$.toLowerCase().replaceAll("-","")}`:X;return{temporarySessionDirectory:Y,temporaryDirectory:$?`${Y}/${Q??"current"}`:`${J}/tmp`,directory:J,sessionDirectory:X,config:`${J}/config.json`,status:`${J}/status.json`,socket:`${J}/repl.sock`,bundle:`${J}/driver.mjs`,processName:$?`ara-browser-${$.toLowerCase()}${Q?`-${Q}`:""}`:"ara-cloud-browser"}}var F$="browser_egress",nZ=WQ,M6=45000,j6=d9+1500,g0=/^[A-Za-z0-9._:-]{1,160}$/,q6="/run/ara-hands";function C6($,Q,Z=Q4()){if($==="darwin")return{temporaryRoot:Z,prepareRoot:!1,sessionMode:448};return{temporaryRoot:Q??q6,prepareRoot:!0,sessionMode:457}}function iZ($,Q=process.platform,Z=process.geteuid?.()){return $===!0&&Q==="linux"&&Z===0}function W$($=rZ(),Q=process.platform,Z=process.geteuid?.()){return $&&Q==="linux"&&Z===0?{uid:$.uid,gid:$.gid,home:$.home,username:$.username}:null}function T6($=W$(),Q=qZ){return $&&Q()?o8:null}function wY($=W$(),Q=process.platform,Z=process.geteuid?.()){return Q!=="linux"||Z!==0||$!==null}function bY($=process.platform,Q=process.geteuid?.()){return $!=="linux"||Q!==0}function O6($,Q){if(!Q&&($??"linux")==="linux")return lZ;return sZ(Q,void 0,$??"linux").socket}function D6($){return $[L0]===!0?"sandbox_loopback":"ara_device_wss"}function U9($){return Boolean($)&&typeof $==="object"&&!Array.isArray($)}function X4($){let Q=$.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q.endsWith(".localhost")||Q==="::1"||Q==="0:0:0:0:0:0:0:1"||Q==="0.0.0.0"||Q.startsWith("127.")}class J4 extends q{expiryDiagnostic;constructor($){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=$}}function _6($){return U9($)&&Object.keys($).every((Q)=>Q==="source_path"||Q==="branch")&&($.source_path===void 0||s0($.source_path))&&typeof $.branch==="string"&&e8.test($.branch)}function A6($,Q,Z){let X=Q===void 0?Date.now():Q,J=["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"],Y=new Set([...J,"workspace_id","legacy_workspace_id",i0,a0,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",p,L0,F$,V9,q0,o0,m0]),K=U9($)?$:null,V=K?.[F$],G=K?.[V9],F=K?.[o0],B=V===void 0||(K?.[p]===f0||F===S9&&K?.[p]===void 0)&&U9(V)&&Object.keys(V).every((C)=>C==="mode"||C==="allowed_domains")&&V.mode==="enforce"&&Array.isArray(V.allowed_domains)&&V.allowed_domains.length<=256&&V.allowed_domains.every((C)=>typeof C==="string"&&h8(C));if(!U9($)||J.some((C)=>!(C in $))||Object.keys($).some((C)=>!Y.has(C))||!B||F!==void 0&&F!==S9||K?.[m0]!==void 0&&K[m0]!==H8||K?.personal_workspace!==void 0&&(K.personal_workspace!==!0||K[p]!==f0)||K?.cloud_browser!==void 0&&(K.cloud_browser!==!0||K[p]!==f0)||K?.sandbox_provider!==void 0&&!K$(K.sandbox_provider)||K?.sandbox_os!==void 0&&K.sandbox_os!=="linux"||G!==void 0&&(K?.[p]!==K9||!r8(G))||p in $&&$[p]!==f0&&$[p]!==K9&&$[p]!==B0||L0 in $&&$[L0]!==!0||$.workspace_path!==void 0&&(!s0($.workspace_path)||$[p]!==B0)||$.workspace_worktree!==void 0&&($.workspace_path===void 0||!_6($.workspace_worktree))||typeof $.relay_url!=="string"||typeof $.session_id!=="string"||!g0.test($.session_id)||$.workspace_id!==void 0&&(typeof $.workspace_id!=="string"||!g0.test($.workspace_id))||$.legacy_workspace_id!==void 0&&(typeof $.legacy_workspace_id!=="string"||!g0.test($.legacy_workspace_id))||$[i0]!==void 0&&($[i0]!==U8||(p in $))||$[a0]!==void 0&&($[a0]!==W8||(p in $))||$[q0]!==void 0&&(typeof $[q0]!=="string"||!g0.test($[q0]))||typeof $.environment_id!=="string"||!g0.test($.environment_id)||typeof $.expires_at!=="string"||$.policy_mode!=="full_access"||$.policy_version!==1||$.hands_protocol_version!==W9||$.hands_worker_version!==B9||$.hands_worker_artifact_sha256!==K0||!kZ($.hands_worker_entrypoint)||!S0($.target_generation)||!O0($.target_fence_id))throw new q("invalid_hands_payload","Reason Hands connection payload is invalid.");let H;try{H=new URL($.relay_url)}catch{throw new q("invalid_hands_relay","Reason Hands relay URL is invalid.")}let z=$[L0]===!0,L=X4(H.hostname);if((z?H.protocol!=="ws:"||!L:L?H.protocol!=="ws:":H.protocol!=="wss:")||H.username||H.password||H.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(H.pathname))throw new q("invalid_hands_relay","Reason Hands relay URL is not allowed.");let W=Date.parse($.expires_at),U=Number.isNaN(W)?"parse":new Date(W).toISOString()!==$.expires_at?"noncanonical":W<=X?"expired":W-X>nZ?"over_cap":"accepted",j={version:1,outcome:U,clock_source:Q===void 0?"date_now":"injected",validation_now_ms:Z9(X),expiry_ms:Z9(W),remaining_ms:Number.isSafeInteger(W-X)?W-X:null,maximum_lifetime_ms:nZ,cli_artifact:fZ()};if(U!=="accepted")throw new J4(j);try{Z?.(j)}catch{}let O=$.environment_binding===void 0?void 0:S8.safeParse($.environment_binding);if(O&&!O.success)throw new q("invalid_hands_request","Reason Hands environment binding is invalid.");return{...$.cloud_browser===!0?{cloud_browser:!0}:{},...K$($.sandbox_provider)?{sandbox_provider:$.sandbox_provider}:{},...$.sandbox_os==="linux"?{sandbox_os:$.sandbox_os}:{},...$.personal_workspace===!0?{personal_workspace:!0}:{},relay_url:H.toString(),...O?.success?{environment_binding:O.data}:{},session_id:$.session_id,...$.workspace_id===void 0?{}:{workspace_id:$.workspace_id},...$.legacy_workspace_id===void 0?{}:{legacy_workspace_id:$.legacy_workspace_id},...$[i0]===U8?{[i0]:U8}:{},...$[a0]===W8?{[a0]:W8}:{},...typeof $[q0]==="string"?{[q0]:$[q0]}:{},...$[o0]===S9?{[o0]:S9}:{},...$[m0]===H8?{[m0]:H8}:{},...typeof $.workspace_path==="string"?{workspace_path:$.workspace_path}:{},...U9($.workspace_worktree)?{workspace_worktree:{...typeof $.workspace_worktree.source_path==="string"?{source_path:$.workspace_worktree.source_path}:{},branch:String($.workspace_worktree.branch)}}:{},environment_id:$.environment_id,expires_at:$.expires_at,policy_mode:"full_access",policy_version:1,hands_protocol_version:W9,hands_worker_version:B9,hands_worker_artifact_sha256:K0,hands_worker_entrypoint:n0,target_generation:$.target_generation,target_fence_id:$.target_fence_id,...p in $?{[p]:$[p]}:{},...z?{[L0]:!0}:{},...G===void 0?{}:{[V9]:G},...V===void 0?{}:{[F$]:{mode:"enforce",allowed_domains:[...new Set(V.allowed_domains)].sort()}}}}function x6(){let $=new Map;return{acquire(Q,Z){if($.has(Q))return null;let X=[...$.values()],J=(K)=>Z.group!==void 0&&K.group===Z.group;if(Z.exclusive?!X.every(J):X.some((K)=>K.exclusive))return null;if(Z.limit!==void 0&&!X.some(J)&&new Set(X.map((K,V)=>K.group??V)).size>=Z.limit)return null;$.set(Q,Z);let Y=!1;return()=>{if(Y)return;Y=!0,$.delete(Q)}},activeOwners:()=>[...$.keys()]}}var P6=x6();function I6($,Q){L9($,{recursive:!0,mode:448});let Z=n($),X=()=>new q("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let K of Q.split("/")){let V=a(Z,K);try{let F=t(V);if(F.isSymbolicLink()||!F.isDirectory())throw X()}catch(F){if(!(F&&typeof F==="object"&&("code"in F)&&F.code==="ENOENT"))throw F;try{L9(V,{mode:448})}catch(B){if(!(B&&typeof B==="object"&&("code"in B)&&B.code==="EEXIST"))throw B}}let G=t(V);if(G.isSymbolicLink()||!G.isDirectory()||n(V)!==V)throw X();Z=V}let J=t(Z),Y=H6(Z,V$.O_RDONLY|V$.O_DIRECTORY|V$.O_NOFOLLOW);try{let K=F6(Y);if(!K.isDirectory()||K.dev!==J.dev||K.ino!==J.ino||n(Z)!==Z)throw X();V6(Y,448)}finally{K6(Y)}return Z}function R6($,Q=oZ(),Z,X,J){if(!g0.test($)||Z!==void 0&&!g0.test(Z))throw new q("invalid_hands_workspace","Reason Hands run identity is invalid.");let Y=V0(p0({kind:"managed",workspaceId:$,...X?{base:X}:{},...J?{layout:J}:{}})),K=I6(Q,V0(Y)),V=a(K,N6(Y)),G=!1;try{let z=t(V);if(G=!0,z.isSymbolicLink())throw new q("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!z.isDirectory())throw new q("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(z){if(z instanceof q||!(z&&typeof z==="object"&&("code"in z)&&z.code==="ENOENT"))throw z}if(J&&!G)try{let z=a(n(Q),V0(p0({kind:"managed",workspaceId:$,...X?{base:X}:{}}))),L=t(z);if(!L.isSymbolicLink()&&L.isDirectory()&&n(z)===z)V8(z,V),G=!0}catch{}if(Z&&Z!==$){let z=a(K,Z);try{let L=t(z);if(L.isSymbolicLink()||!L.isDirectory())throw new q("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let W=n(z);if(V0(W)!==K)throw new q("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let U=null;if(G){U=a(K,`.${$}.previous`);try{throw t(U),new q("invalid_hands_workspace","Reason Hands previous workspace backup already exists.")}catch(j){if(j instanceof q||!(j&&typeof j==="object"&&("code"in j)&&j.code==="ENOENT"))throw j}V8(V,U)}try{V8(W,V)}catch(j){if(U)V8(U,V);throw j}G=!0}catch(L){if(L instanceof q||!(L&&typeof L==="object"&&("code"in L)&&L.code==="ENOENT"))throw L}}L9(V,{recursive:!0,mode:448}),w9(V,448);let F=n(V);if(V0(F)!==K)throw new q("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let B=a(F,"repo");try{let z=t(B);if(z.isSymbolicLink()||!z.isDirectory())throw new q("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(z){if(z instanceof q||!(z&&typeof z==="object"&&("code"in z)&&z.code==="ENOENT"))throw z}L9(B,{recursive:!0,mode:448}),w9(B,448);let H=n(B);if(V0(H)!==F)throw new q("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:F,repoPath:H}}function Y4($){let Q=null;try{Q=t($)}catch{}if(!Q||Q.isSymbolicLink()||!Q.isDirectory()||Q.uid!==0||Q.gid!==0||(Q.mode&4095)!==493)throw new q("cloud_workspace_root_invalid","This cloud Session's workspace root is not root's 0755 directory, so Reason Hands cannot use it.")}function E6($,Q){let Z="/";for(let X of["",...$.split("/"),...Q.split("/")].filter((J,Y)=>Y===0||J)){if(X)Z=a(Z,X);let J;try{J=t(Z)}catch{return null}if(J.uid!==0)return J.uid;if((J.mode&2)!==0&&(J.mode&512)===0&&!J.isSymbolicLink())return-1;if(J.isSymbolicLink()||!J.isDirectory())return null}return null}function S6($,Q,Z,X=process.geteuid?.(),J){if(!g0.test(Q))return null;let Y,K;try{Y=n($),K=V0(p0({kind:"managed",workspaceId:Q,...Z?{base:Z}:{},...J?{layout:J}:{}}))}catch{return null}let V=a(Y,K),G=U$(V)!==null,F=(W)=>new q("cloud_workspace_root_invalid",W),B;if(X===0){let W=E6(Y,K);if(W===null)return null;if(!G)throw new q("invalid_hands_workspace","As root, Reason Hands never prepares a workspace in folders another user owns.");B=W}else{if(!G)return null;let W,U;try{W=t(V0(V)),U=t(V)}catch{return null}if(W.isSymbolicLink()||!W.isDirectory()||W.uid===0||U.uid!==0)return null;B=W.uid}let H=Y;for(let W of K.split("/")){let U=a(H,W),j=!1;try{let O=t(U);j=!O.isSymbolicLink()&&O.isDirectory()&&n(U)===U}catch{}if(!j)throw F("This cloud Session's workspace root is missing or is not a real directory.");H=U}Y4(V);let z;try{z=G4(V)}catch(W){if(W instanceof q)throw W;throw F("This cloud Session's workspace root changed while Reason Hands checked it.")}let L=null;try{L=b9(z.repoPath).uid}catch{}if(L!==B)throw new q("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return z}function G4($,Q=!1){let Z=n($),X=a(Z,"repo"),J;try{J=t(X)}catch{throw new q("invalid_hands_workspace","Reason Hands repository is missing from the granted root.")}if(Q){if(!/^\/var\/lib\/reason\/sessions\/[0-9a-f-]{36}$/.test(Z))throw new q("invalid_hands_workspace","Personal runtime identity is invalid.");if(K8(Z.slice(Z.lastIndexOf("/")+1)).runtimeRoot!==Z)throw new q("invalid_hands_workspace","Personal runtime identity is invalid.");let V=n("/workspace"),G=n(X);if(V!=="/workspace"||!b9(G).isDirectory()||!G.startsWith("/workspace/"))throw new q("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:Z,repoPath:G}}let Y=CZ(Z);if(Y&&J.isSymbolicLink()){let V=n(X);if(V!==n(Y)||!b9(V).isDirectory())throw new q("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:Z,repoPath:V}}if(J.isSymbolicLink()||!J.isDirectory())throw new q("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let K=n(X);if(V0(K)!==Z)throw new q("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:Z,repoPath:K}}function B$($,Q,Z){if(Q!==void 0&&!s0(Q))throw new q("invalid_hands_workspace",`Reason Hands ${Z} is invalid.`);let X=Z4($,Q??".");if(!w0($,X))throw new q("invalid_hands_workspace",`Reason Hands ${Z} escapes its granted root.`);return X}function z4($,Q,Z){if(t8(Q)){let X=n(Z);return{anchor:X,target:Z4(X,Q),boundary:a(X,F9)}}return{anchor:$,target:B$($,Q,"folder"),boundary:$}}function w6($,Q){if(!w0($,Q))throw new q("invalid_hands_workspace","Reason Hands folder escapes its granted root.");let Z=$;for(let X of Q.slice($.length).split("/").filter(Boolean)){Z=a(Z,X);let J=null;try{J=t(Z)}catch(Y){if(Y.code!=="ENOENT")throw Y}if(!J)L9(Z,{mode:448});else if(J.isSymbolicLink()||!J.isDirectory())throw new q("invalid_hands_workspace","Reason Hands folder must be made of real directories.")}}function K4($,Q){let Z=n(B$($,Q.source_path,"repository"));if(!w0($,Z)||!b9(Z).isDirectory())throw new q("invalid_hands_workspace","Reason Hands repository must be a folder in its granted root.");return Z}async function b6($,Q,Z,X=B8()){try{let J=n($);if(H$(z4(J,Q,X).target))return;return await xZ(K4(J,Z))??void 0}catch{return}}function k6($,Q,Z,X,J=f6,Y=B8()){let K=n($),{target:V,boundary:G,anchor:F}=z4(K,Q,Y);if(Z&&!H$(V)){let z=K4(K,Z);w6(F,V0(V));let L=["-c","core.hooksPath=/dev/null","-C",z];if(X)J([...L,"update-ref","--create-reflog","-m",X.note,`refs/heads/${Z.branch}`,X.commit,""]);let W=X?J([...L,"worktree","add",V,Z.branch]):J([...L,"worktree","add","-b",Z.branch,V]);if(!X&&W.status!==0&&/already exists/.test(W.stderr)&&!H$(V))W=J([...L,"worktree","add",V,Z.branch]);if(W.status!==0)throw new q(/not a git repository/i.test(W.stderr)?"workspace_not_git_repository":"workspace_worktree_failed","Reason could not create this Session's git worktree.")}let B;try{B=t(V)}catch{throw new q("workspace_folder_missing","This Session's folder no longer exists.")}let H=n(V);if(B.isSymbolicLink()&&!w0(G,H))throw new q("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!b9(H).isDirectory()||!w0(G,H))throw new q("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(b0(H))throw new q("protected_path","Credential and secret folders are unavailable to Sessions.");return H}function f6($){let Q=z6("git",$,{encoding:"utf8",timeout:60000,env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:["ignore","ignore","pipe"]});return{status:Q.status,stderr:Q.stderr??""}}function V4($){return uZ($)??U$($)?.jobEnv??a($,"job.env")}function m6($,Q){let Z=V4($),X=t(Z);if(X.isSymbolicLink()||!X.isFile())throw new q("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");U6(Z,Q),w9(Q,384)}function g6($){if($.workspaceMode===B0&&$.workspacePath!==void 0){let K=$.home??B8(),V=k6($.grantedRoot,$.workspacePath,$.workspaceWorktree,$.workspaceWorktreeStart,void 0,K);if($.workspaceWorktree&&$.deviceId)EZ(K,$.workspacePath,$.deviceId);return{workRoot:V,repoPath:V,workspace:{kind:"root",path:$.workspacePath},jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if($.workspaceMode===f0)return{...G4($.grantedRoot,$.personalWorkspace),workspace:{kind:"root"},jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if($.workspaceMode===K9||$.workspaceMode===B0){let K=t($.grantedRoot);if(K.isSymbolicLink()||!K.isDirectory())throw new q("invalid_hands_workspace","Reason Hands root must be a real directory.");let V=n($.grantedRoot);return{workRoot:V,repoPath:V,workspace:{kind:"root"},jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}let Q=$.workspaceId??$.runId,Z={kind:"managed",workspaceId:Q,...$.workspaceBase?{base:$.workspaceBase}:{},...$.workspaceLayout?{layout:$.workspaceLayout}:{}},X=u9($.grantedRoot,Z,$.home).anchor,J=S6(X,Q,$.workspaceBase,void 0,$.workspaceLayout);if(J)return{...J,workspace:Z,jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1,cloudSessionRoot:!0};let Y=R6(Q,X,$.legacyWorkspaceId,$.workspaceBase,$.workspaceLayout);return{...Y,workspace:Z,jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:V0(Y.workRoot),managedWorkspace:!0}}function y6($){let{command:Q,prefix:Z}=w8($.executablePath,$.sourceEntrypoint),X=z8({home:L6(),temporaryDirectory:$.temporaryDirectory,path:$.path});if(X.REASON_DEVICE_ROOT=X.ARA_DEVICE_ROOT=$.grantedRoot,X.REASON_HANDS_WORKSPACE=X.ARA_HANDS_WORKSPACE=$.workRoot,X.REASON_HANDS_REPO=X.ARA_HANDS_REPO=$.root,$.workspacePoolPath)X.REASON_HANDS_WORKSPACE_POOL=X.ARA_HANDS_WORKSPACE_POOL=$.workspacePoolPath;return{command:Q,args:[...Z,"__device","__hands-worker","--config",$.configPath],options:{cwd:$.root,env:X,shell:!1,stdio:["ignore","ignore","pipe"]}}}function h6($,Q){let Z="",X=!1,J=Date.now(),Y=0,K=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled"].map((H)=>`hands.worker.${H}`)),V=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"]),G=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],F=["peerGeneration","socketState","closeCode"],B=new Set(["event","reason","launchId",...G,...F]);return(H)=>{for(let z of H.toString().split(/(?<=\n)/)){let L=z.endsWith(`
|
|
458
|
-
`);if(!X&&Z.length+z.length<=2048)Z+=z;else X=!0;if(!L)continue;let W=Z;if(Z="",X){X=!1;continue}try{let U=JSON.parse(W);if(!U||typeof U!=="object"||Array.isArray(U)||Object.keys(U).some((j)=>!B.has(j))||!K.has(U.event)||!V.has(U.reason)||U.launchId!==$||G.some((j)=>!Number.isSafeInteger(U[j])||U[j]<0)||F.some((j)=>U[j]!==null&&(!Number.isSafeInteger(U[j])||U[j]<0)))continue;if(Date.now()-J>=60000)J=Date.now(),Y=0;if(Y>=122)continue;Y+=1,Q(U)}catch{}}}}async function v6($){let Q=$.now()+$.timeoutMs;while($.now()<Q){if($.signal.aborted)throw new q("cancelled","Reason Hands start was cancelled.");if($.spawnFailed?.()||$.child.exitCode!==null||$.child.signalCode!==null)throw new q("hands_worker_exited","Reason Hands exited before ready.");let Z=Y8($.path,{pid:$.child.pid??-1,launchId:$.launchId,workerVersion:B9,protocolVersion:W9,workerArtifactSha256:K0,workerEntrypoint:n0});if(Z?.targetGeneration===$.targetGeneration&&Z.fenceId===$.fenceId)return Z;await new Promise((X)=>setTimeout(X,10))}throw new q("hands_ready_timeout","Reason Hands did not become ready.")}async function c6($,Q){let Z=()=>$.exitCode===0&&$.signalCode===null;if($.exitCode!==null||$.signalCode!==null)return Z()?"stopped":"already_exited";let X=new Promise((K)=>$.once("exit",()=>K()));try{if(!$.kill("SIGTERM"))return Z()?"stopped":"unobserved"}catch{return Z()?"stopped":"unobserved"}if(await aZ(X,Q))return Z()?"stopped":"unobserved";try{$.kill("SIGKILL")}catch{}return await aZ(X,Q)?"forced":"unobserved"}async function aZ($,Q){let Z;try{return await Promise.race([$.then(()=>!0),new Promise((X)=>{Z=setTimeout(()=>X(!1),Q)})])}finally{clearTimeout(Z)}}function d6($){return new Promise((Q)=>{let Z=!1,X=(V)=>{if(Z)return;Z=!0,clearTimeout(K),$.signal.removeEventListener("abort",J),$.child.off("exit",Y),Q(V)},J=()=>X("cancelled"),Y=()=>X("exited"),K=setTimeout(()=>X("expired"),Math.max(0,$.expiresAt-$.now()));if($.signal.addEventListener("abort",J,{once:!0}),$.child.once("exit",Y),$.signal.aborted)J();else if($.child.exitCode!==null||$.child.signalCode!==null)Y()})}var F4=$4();function p6($,Q){if(!($ instanceof Error)||$ instanceof q)return!1;let Z=["hands_browser_driver_missing","hands_browser_driver_version_mismatch","hands_browser_executable_missing","hands_browser_unsupported_platform","hands_browser_unavailable"].includes($.message),X=["ENOENT","EACCES","EPERM"].includes($.code??"");if(!Z&&!X)return!1;try{return t(Q),!1}catch(J){return U9(J)&&J.code==="ENOENT"}}function u6($){return $.sandbox_provider==="compute"&&!$.cloud_browser&&!$[L0]&&$[p]===f0}function l6($,Q,Z){return $===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:F0($,Q),...Z===void 0?{}:{worker_prespawned:Z}}}}function kY(){F4().catch(()=>{return}),Y9().catch(()=>{return})}async function fY($,Q={}){let Z=Q.logDiagnostic??((N)=>console.warn(N)),X=new Map,J=(N)=>{let M=Date.now();X.set(N,M);try{Z(JSON.stringify({event:"sandbox.hands_startup",stage:N,timestampMs:M}))}catch{}};J("entered");let Y=$.claimEnvironment;$.claimEnvironment=void 0;let K=Q.now??Date.now,V,G=A6($.payload,Q.now?.(),(N)=>{V=N});if($.managedPty&&($.managedPty.version!==1||!$.headless||!$.runtimeDirectory||![void 0,!0].includes($.managedPty.startupVerified)||!$.deviceIdentity||!$.claimOwner||$.claimOwner.device_id!==$.deviceIdentity.deviceId||!G.environment_binding||!["darwin","linux"].includes(process.platform)))throw new q("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let F=async(N)=>{let M;try{await Promise.race([N,new Promise((D,w)=>{M=setTimeout(()=>w(new q("hands_event_delivery_unavailable","Hands event delivery did not settle within its deadline.")),Math.max(1,Math.min(Q.eventDeliveryTimeoutMs??5000,5000)))})])}finally{clearTimeout(M)}},B=async(N,M)=>F($.emitEvent(N,M));if($.headless&&(G.cloud_browser===!0||$.managedBrowser!==void 0||G[L0]!==void 0||G[V9]!==void 0||G[p]!==void 0&&G[p]!==B0))throw new q("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let H=W$(),z=G[m0]===void 0?null:T6(H);if(G[m0]!==void 0&&(z===null||!$.headless||!iZ($.hostExecution,Q.hostIdentity?.platform,Q.hostIdentity?.euid)))throw new q("hands_model_jobs_egress_unavailable","This worker cannot hold its jobs to the guest egress guard; the Hands did not start.");if(G[o0]!==void 0&&!($.headless&&iZ($.hostExecution,Q.hostIdentity?.platform,Q.hostIdentity?.euid)))throw new q("hands_confinement_unavailable","Confined Hands need a root Linux worker in host mode.");if(G.cloud_browser&&process.platform!=="linux")throw new q("cloud_browser_target_invalid","Cloud browser is available only on a cloud machine.");let L=`${$.operationId}:${$.attemptId}`,W=G[p]===K9,U=$.headless||process.platform==="darwin"&&$.managedBrowser===void 0&&!G.cloud_browser&&!G.browser_egress&&!G[L0]&&(G[p]===void 0||G[p]===B0)||u6(G),j=W?G[V9]??"bash":null,O=j?DZ(j):null;if(O)throw new q(O,"Persistent Node REPL execution is unavailable; this benchmark profile cannot start.");let C=G[p],A=$.headless===!0?$.handsSlots??1:void 0,R=(Q.slot??P6).acquire(L,{exclusive:A===1||C!==void 0&&C!==B0,...A!==void 0&&A>1?{limit:A}:{},...$.headless===!0&&G[q0]!==void 0?{group:G[q0]}:{}});if(!R)throw new q("hands_slot_busy",A!==void 0&&A>1?`This Reason worker runs at most ${A} sessions at a time.`:"This Reason Device runs one session at a time.");let P=$.headless===!0?tZ($.runId):null,T=null,S=null,m,E;try{J("browser_resolution");let N=$.headless&&Q.browserExecutablePath===void 0?await Y9():null,M=W||G.cloud_browser?null:Q.browserExecutablePath===void 0?$.headless?N?.status==="resolved"?N.executablePath:null:await NZ(void 0,process.platform,$.managedBrowser):Q.browserExecutablePath;if(!W&&!G.cloud_browser&&!U&&!M)throw new q("hands_browser_unavailable","Reason Hands requires Chrome, Edge, Brave, Chromium, or a Playwright Chromium install.");J("path_resolution");let D;try{D=await(Q.resolvePathEnvironment??F4)()}catch{D={path:eZ(),source:"fallback"}}if(J("workspace_setup"),process.platform==="darwin"){let s=G[p]===B0&&G.workspace_path!==void 0?B$($.root,G.workspace_worktree?G.workspace_worktree.source_path:G.workspace_path,"folder"):null;for(let Z0 of new Set([$.root,...s?[s]:[]]))await cQ(Z0)}let k=G[p]===f0||G[p]===K9?C6(process.platform,Q.sandboxRuntimeRoot):null,f=$.headless&&$.runtimeDirectory?$.runtimeDirectory:k?k.temporaryRoot:Q4();if(T="private_runtime",$.headless&&$.runtimeDirectory){D9(f);let s=n($.root);if(!x9(s,f))throw new q("invalid_hands_workspace","Private worker state must not overlap the granted workspace.")}if($.headless&&$.runtimeDirectory&&(!$.deviceIdentity||!G.environment_binding))throw new q("environment_unavailable","Headless Hands requires a server-bound private environment.");if(T="runtime_root",k?.prepareRoot)L9(f,{recursive:!0,mode:457}),w9(f,457);T="temporary_directory";let _=n(W6(a(f,"reason-hands-session-")));S=_,w9(_,k?.sessionMode??448);let g=a(_,"hands-config.json"),c=a(_,"hands-ready.json"),u=Y6(),o=G.target_fence_id;T="granted_root";let b=n($.root);T="workspace_layout";let y=G[p]===B0&&G.workspace_path!==void 0&&G.workspace_worktree?await b6(b,G.workspace_path,G.workspace_worktree):void 0,{workRoot:d,repoPath:l,jobEnvPath:G0,workspacePoolPath:N0,managedWorkspace:H0,workspace:U0,cloudSessionRoot:y0}=g6({grantedRoot:b,personalWorkspace:G.personal_workspace===!0,runId:$.runId,workspaceId:G.workspace_id,legacyWorkspaceId:G.legacy_workspace_id,workspaceBase:G[i0],workspaceLayout:G[a0],temporaryDirectory:_,workspaceMode:G[p],applicationSupportPath:Q.applicationSupportPath,...G.workspace_path===void 0?{}:{workspacePath:G.workspace_path},...G.workspace_worktree?{workspaceWorktree:G.workspace_worktree}:{},...y?{workspaceWorktreeStart:y}:{},...$.deviceIdentity?{deviceId:$.deviceIdentity.deviceId}:{}}),C0=D6(G);T="jobs";let r=$.headless&&$.runtimeDirectory?GQ({runtimeDirectory:$.runtimeDirectory,root:b,runId:$.runId}):void 0;m=r?.disposeSocket;let M0=r?zQ(r):null;if(M0)try{Z(JSON.stringify({event:"hands.journal_owner_retired",run_id:$.runId,reason:M0.reason,prior_executor_launch_id:M0.executorLaunchId}))}catch{}if(r&&[d,l].some((s)=>!x9(s,r.journalDirectory)))throw new q("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 r0=G.personal_workspace?d.slice(d.lastIndexOf("/")+1):void 0;if(r0&&r0!==G.workspace_id)throw new q("invalid_hands_workspace","Personal session identity does not match its Device grant.");T="browser_socket";let W0=G.cloud_browser?O6(G.sandbox_os,r0):a(r?V0(r.socketPath):_,"repl.sock");T="relay_url";let j0=X4(new URL(G.relay_url).hostname),h0=C0==="ara_device_wss"&&!j0?(Q.loadProxy??b8)()?.url:void 0,Y0;T="environment_owner";let X0=$.headless&&$.deviceIdentity&&G.environment_binding?wZ(_,{runId:$.runId,...$.deviceIdentity,binding:G.environment_binding,expiresAtMs:Date.parse(G.expires_at),identity:()=>Y0?.()??null}):void 0;T="job_environment";let N9=!X0&&U0.kind==="managed"&&H0?a(d,"job.env"):null;if(N9)try{F8(N9,"",{mode:384,flag:"wx"})}catch(s){if(!(s instanceof Error&&("code"in s)&&s.code==="EEXIST"))throw s}let L8={url:G.relay_url,transport:C0,...h0===void 0?{}:{proxyUrl:h0},...$.localGithubConfinement?{localGithubConfinement:!0}:{},...G[o0]&&X0?{gitCredentialEnvironment:!0}:{},workerVersion:B9,protocolVersion:W9,workerArtifactSha256:K0,workerEntrypoint:n0,targetGeneration:G.target_generation,fenceId:o,workRoot:d,workspaceAliasPath:d,jobEnvPath:G0,...X0?{environmentSnapshotPath:X0.path,...$.hostExecution?{executionEnvironment:SQ()}:{},environmentExpectedBinding:{runId:$.runId,...$.deviceIdentity,binding:G.environment_binding}}:N9?{jobEnvSourcePath:N9,workspacePoolPath:V0(d)}:H0?{}:{jobEnvSourcePath:V4(d)},repoPath:l,replSocketPath:W0,...G.cloud_browser?{browserRunId:$.runId}:{},readyPath:c,launchId:u,expiresAtMs:Date.parse(G.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...r?{managedJobs:{journalDirectory:r.journalDirectory,scopeId:r.scopeId},jobControlSocketPath:r.socketPath}:{},...r&&H?{jobsUser:{...H,...z!==null?{modelGid:z}:{}}}:{},...$.managedPty&&r&&X0?{managedPty:{version:1,...$.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:wQ()}:{}}}:{},...U&&!M?{allowedTools:["bash","read","write","edit"]}:W?{allowedTools:j==="bash"?["bash"]:["bash","repl"]}:{}};if(X0||H0&&!N9)F8(G0,"",{mode:384});else m6(d,G0);T="config_write",F8(g,JSON.stringify(L8),{mode:384}),T=null;let v0={session_id:G.session_id,environment_id:G.environment_id,hands_protocol_version:W9,hands_worker_version:B9,hands_worker_artifact_sha256:K0,hands_worker_entrypoint:n0,target_generation:G.target_generation,target_fence_id:G.target_fence_id,executor_launch_id:u},k9=null,L$=!1,N$=!1,M$,Q0=null,j$,q$,f9="failed",C$=null,N8=Promise.resolve(),T$=null,M8=async(s,Z0)=>{try{await B(s,Z0)}catch{}};try{J("event_started");let s,Z0=(async()=>{await $.emitEvent("hands.started",{...v0,policy_mode:"full_access",policy_version:1,path_source:D.source}),s=Date.now()})();Z0.catch(()=>{return}),J("worker_setup");let m9=G.browser_egress?{mode:"enforce",allowedDomains:G.browser_egress.allowed_domains}:{mode:"off"};if(j&&j!=="bash")k9=await(Q.startNodeRepl??cZ)({socketPath:W0,workRoot:d});else if(!W&&!G.cloud_browser&&M)k9=await(Q.startRepl??MZ)({socketPath:W0,browserExecutablePath:M,workspaceRoot:l,...$.managedBrowser?{managedBrowser:$.managedBrowser}:{},...$.desktopRecording?{recording:$.desktopRecording}:{},networkPolicy:m9,onEgressDenied:(h)=>{let T0=TZ(h.host);Z(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:T0,reason:h.reason,run_id:$.runId})),N8=N8.then(()=>B("hands.browser_egress_denied",{destination_id:T0,reason:h.reason})).catch((U4)=>{T$??=U4})}}).catch((h)=>{if(!U||$.signal.aborted||K()>=Date.parse(G.expires_at)||!p6(h,W0))throw h;return Object.assign(L8,{allowedTools:["bash","read","write","edit"]}),F8(g,JSON.stringify(L8),{mode:384}),N$=!0,null});let O$=y6({configPath:g,root:l,grantedRoot:b,workRoot:d,workspacePoolPath:N0,temporaryDirectory:_,path:D.path,executablePath:Q.executablePath,sourceEntrypoint:Q.sourceEntrypoint}),j8=Date.now(),q8,D$,C8=Q.takePrespawnedWorker?.(O$)??null;if(M$=Q.takePrespawnedWorker?C8!==null:void 0,Q0=C8??(Q.spawnWorker??((h)=>G6(h.command,h.args,h.options)))(O$),!C8)Q.adoptSpawnedWorker?.(Q0);Q0.stderr?.on("data",h6(u,(h)=>{if(h.event==="hands.worker.connecting")q8??=h.timestampMs;else if(h.event==="hands.worker.open")D$??=h.timestampMs;Z(JSON.stringify({...h,run_id:$.runId}))}));let _$=!1;Q0.on("error",()=>{_$=!0}),Q0.once("exit",(h,T0)=>{try{Z(JSON.stringify({event:"hands.worker.exited",run_id:$.runId,launchId:u,exit_code:h,exit_signal:T0}))}catch{}}),E=Q0,J("worker_ready_wait");let M9=await v6({path:c,launchId:u,fenceId:o,targetGeneration:G.target_generation,child:Q0,spawnFailed:()=>_$,signal:$.signal,timeoutMs:Q.readyTimeoutMs??M6,now:K}),H4=Date.now();if(Y0=()=>{if(!Q0||Q0.exitCode!==null||Q0.signalCode!==null)return null;let h=Y8(c,M9);return h?{generation:h.targetGeneration,fenceId:h.fenceId}:null},r){let h={root:b,runId:$.runId,operationId:$.operationId,scopeId:r.scopeId,socketPath:r.socketPath,generation:M9.targetGeneration,fenceId:M9.fenceId,executorLaunchId:u,expiresAtMs:Date.parse(G.expires_at),readIdentity:Y0,workspace:U0,localGithubConfinement:$.localGithubConfinement===!0};if(X0)h.environment=X0;if($.claimOwner&&$.deviceIdentity&&$.claimOwner.device_id===$.deviceIdentity.deviceId){let T0=[$.deviceIdentity.apiOrigin,G.relay_url];if(h0)T0.push(h0);h.previewAuthority={owner:Object.freeze({...$.claimOwner}),rootId:$.deviceIdentity.rootId,relayOrigin:new URL(G.relay_url).origin,deniedPorts:v$(T0)}}q$=KQ(h)}if(await new Promise((h)=>{setImmediate(h)}),y0)Y4(d);let g9;if(Y&&X0){try{let h=X0.install(Y);g9={snapshot_id:h.snapshot_id,installed_revision:h.installed_revision}}catch{}try{Z(JSON.stringify({event:"hands.environment_at_claim",run_id:$.runId,installed:g9!==void 0}))}catch{}}Y=void 0,J("event_ready");let A$=F(Z0);A$.catch(()=>{return});let x$=Date.now();L$=!0,await B("hands.ready",{...v0,expiry_diagnostic:V,startup_stages:{version:1,browser_resolution_ms:F0(X.get("browser_resolution"),X.get("path_resolution")),path_resolution_ms:F0(X.get("path_resolution"),X.get("workspace_setup")),workspace_setup_ms:F0(X.get("workspace_setup"),X.get("event_started")),repl_setup_ms:F0(X.get("worker_setup"),j8),worker_boot_ms:F0(j8,q8),worker_dial_ms:F0(q8,D$),worker_ready_ms:F0(j8,H4),started_event_ms:F0(X.get("event_started"),s),started_join_wait_ms:F0(X.get("event_ready"),x$),total_ms:F0(X.get("entered"),x$)},...l6($.claimedAtMs,X.get("entered"),M$),...$.managedPty?.startupVerified===!0?{managed_pty:{version:1,execution_mode:"host",descendant_cleanup_verified:!0}}:{},policy_mode:"full_access",policy_version:1,path_source:D.source,connection_generation:M9.generation,...g9?{environment_installed:g9}:{},...U&&!k9?{browser_state:"unavailable",browser_reason_code:N$?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await A$,J("ready"),j$=yZ({path:c,initial:M9,signal:$.signal,isAlive:()=>Q0!==null&&Q0.exitCode===null&&Q0.signalCode===null&&K()<Date.parse(G.expires_at),publish:(h,T0)=>$.emitEvent("hands.reconnected",{...v0,target_generation:h.targetGeneration,target_fence_id:h.fenceId,connection_generation:h.generation},T0),failed:()=>Z(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:$.runId,executor_launch_id:u}))});let P$=await d6({child:Q0,signal:$.signal,expiresAt:Date.parse(G.expires_at),now:K});if(P$==="cancelled"){let h=$.signal.reason instanceof q?$.signal.reason.code:"cancelled";throw f9=h,new q(h,"Reason Hands was cancelled.")}if(P$==="exited")throw new q("hands_worker_exited","Reason Hands exited unexpectedly.");return f9="expired",{...v0,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(s){C$=s;let Z0=s instanceof q?s.code:"hands_failed",m9=Z0==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(Z0);if(f9=m9?Z0:"failed",!m9)await M8("hands.failed",{...v0,reason_code:Z0});throw s}finally{j$?.stop(),q$?.();let s=Q0?await c6(Q0,Q.stopTimeoutMs??j6):null,Z0=!1;await $.desktopRecording?.close();try{await k9?.stop()}catch{Z0=!0}if(await N8,(s==="stopped"||s==="already_exited"&&!L$)&&!Z0)await M8("hands.stopped",{...v0,reason_code:f9});else if(s!==null||Z0){if(await M8("hands.failed",{...v0,reason_code:s==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),C$===null||Z0)throw new q("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(T$!==null)throw new q("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(N){let M=jZ(T,N);if(M)try{Z(JSON.stringify({event:"sandbox.hands_workspace_failed",...M}))}catch{}throw N}finally{try{if(!E||E.exitCode!==null||E.signalCode!==null)m?.();if(S!==null&&(!E||E.exitCode!==null||E.signalCode!==null))B6(S,{recursive:!0,force:!0})}finally{P?.(),R()}}}
|
|
459
|
-
export{v as ga,
|
|
452
|
+
`;function J6($=process.execPath,Q=process.versions.bun){return Q?"node":$}function Y$($){try{r7($)}catch{}}function K8($,Q){$.end(`${JSON.stringify(Q)}
|
|
453
|
+
`)}function G$($){return JSON.stringify($)}function Y6($){let Q=i7(pZ(Q6(),"reason-node-repl-")),Z=pZ(Q,"node-repl.sb"),J=["(version 1)","(deny default)",'(import "system.sb")',"(allow process*)","(deny network*)",`(allow file-read* ${["/System","/usr","/bin","/opt/homebrew","/usr/local"].map((K)=>`(subpath ${G$(K)})`).join(" ")})`,`(allow file-read* file-write* (subpath ${G$($.workRoot)}) (subpath ${G$(Q)}))`].join(`
|
|
454
|
+
`);t7(Z,J,{mode:384});let Y=!1;return{command:"/usr/bin/sandbox-exec",args:["-f",Z,$.nodeExecutable,...$.nodeArgs],cwd:$.workRoot,env:{...$.environment,TMPDIR:Q},async cleanup(){if(Y)return;Y=!0,o7(Q,{recursive:!0,force:!0})}}}async function G6($){let Q=a7($.workRoot),Z=$.nodeExecutable??J6(),X=["--max-old-space-size=512","--permission",`--allow-fs-read=${Q}`,`--allow-fs-write=${Q}`,"-e",X6],J=V8({home:Q,temporaryDirectory:Q}),Y=$.platformName??$6();if(Y==="linux")return{command:Z,args:X,cwd:Q,env:J,async cleanup(){}};if(Y==="darwin")return Y6({nodeExecutable:Z,nodeArgs:X,workRoot:Q,environment:J});throw Error("hands_node_repl_platform_unsupported")}async function S9($){let Q;try{await Promise.race([$,new Promise((Z,X)=>{Q=setTimeout(()=>X(Error("hands_node_repl_child_cleanup_timeout")),Z6)})])}finally{clearTimeout(Q)}}async function lZ($){if($.executionMode!=="single-evaluation")throw Error(xZ);let Q=await G6($),Z;try{Z=s7(Q.command,Q.args,{cwd:Q.cwd,env:Q.env,stdio:["pipe","pipe","pipe"]})}catch(C){throw await Q.cleanup(),C}let X=new Promise((C)=>Z.once("close",()=>C())),J;Z.once("error",(C)=>{J=C});let Y=!1,K=!1,V="";Z.stderr.setEncoding("utf8"),Z.stderr.on("data",(C)=>{V=`${V}${C}`.slice(-16384)});let G=Z.stdout,F,B=(C,A,R)=>{if(R)C.failure??=R;if(C.finishing)return;C.finishing=!0,K=!0,Z.kill("SIGKILL"),S9(X).then(()=>{if(C.failure)C.reject(C.failure);else C.resolve(A??{})},(P)=>C.reject(P))},H=()=>{if(K=!0,F)B(F,void 0,Error("hands_node_repl_state_lost"));else Z.kill("SIGKILL")},z="";G?.setEncoding("utf8"),G?.on("data",(C)=>{if(F?.finishing||K)return;if(z+=C,z.length>uZ){H();return}while(!0){let A=z.indexOf(`
|
|
455
|
+
`);if(A===-1)return;let R=z.slice(0,A);z=z.slice(A+1);let P=F;if(!P){H();return}try{let T=JSON.parse(R);if(P.action==="probe")P.resolve(T);else{B(P,T);return}}catch{B(P,void 0,Error("invalid_hands_node_repl_child_response"));return}}});let L=(C)=>{let A=V.trim(),R=C??Error(A?`hands_node_repl_child_exited:${A}`:"hands_node_repl_child_exited");if(K=!0,F&&!F.finishing)B(F,void 0,R)};Z.once("error",L),Z.once("close",()=>L()),Z.stdin.on("error",L);let W=(C)=>new Promise((A,R)=>{if(Y||K||Z.exitCode!==null||Z.signalCode!==null){R(Error(K?"hands_node_repl_state_lost":"hands_node_repl_stopped"));return}let P=setTimeout(H,C.action==="probe"?1e4:Math.max(1,Math.min($.evaluationTimeoutMs??z$-1000,z$-1000))),T={action:C.action,finishing:!1,resolve(S){if(F===T)F=void 0;clearTimeout(P),A(S)},reject(S){if(F===T)F=void 0;clearTimeout(P),R(S)}};F=T,Z.stdin.write(`${JSON.stringify(C)}
|
|
456
|
+
`,(S)=>{if(!S)return;B(T,void 0,S)})});try{if(!G){if(Z.pid===void 0)await S9(X);throw J??Error("hands_node_repl_control_pipe_missing")}let C=await W({action:"probe"});if(C.ok!==!0||C.output!=="ARA_HANDS_REPL_READY")throw Error("hands_node_repl_probe_failed")}catch(C){Y=!0,Z.kill("SIGKILL");try{await S9(X)}finally{await Q.cleanup()}throw C}let U=Promise.resolve(),j=new Set;Y$($.socketPath);let O=e7.createServer((C)=>{j.add(C),C.once("close",()=>j.delete(C)),C.setEncoding("utf8");let A="",R=!1,P=!1;C.once("close",()=>{if(P)H()}),C.on("error",()=>C.destroy()),C.on("data",(T)=>{if(R)return;if(A+=T,A.length>uZ){R=!0,K8(C,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let S=A.indexOf(`
|
|
457
|
+
`);if(S===-1)return;R=!0;let g=A.slice(0,S);U=U.then(async()=>{if(C.destroyed)return;try{let E=JSON.parse(g);if(E.action!=="evaluate"||typeof E.code!=="string")throw Error("Invalid REPL request");P=!0;let N=await W({action:"evaluate",code:E.code});if(P=!1,N.ok!==!0||typeof N.output!=="string")throw Error(typeof N.error==="string"?N.error:"hands_node_repl_failed");K8(C,{ok:!0,output:N.output})}catch(E){P=!1,K8(C,{ok:!1,error:E instanceof Error?E.message:String(E),stack:E instanceof Error?E.stack:void 0})}}).catch((E)=>{K8(C,{ok:!1,error:E instanceof Error?E.message:String(E)})})})});try{await new Promise((C,A)=>{O.once("error",A),O.listen($.socketPath,()=>{O.off("error",A);try{n7($.socketPath,384),C()}catch(R){O.close(()=>A(R))}})})}catch(C){Y=!0,Z.kill("SIGKILL");try{await S9(X)}finally{await Q.cleanup(),Y$($.socketPath)}throw C}return{socketPath:$.socketPath,async stop(){if(Y)return;Y=!0;let C=new Promise((A)=>O.close(()=>A()));for(let A of j)A.destroy();await C,U.catch(()=>{return}),H();try{await S9(X)}finally{await Q.cleanup(),Y$($.socketPath)}}}}var K$=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var sZ="/workspace",nZ="/var/lib/reason/sessions",z6="/var/lib/reason/session-controls";function iZ($){let Q=`${nZ}/`;if(!$.startsWith(Q))return null;let Z=$.slice(Q.length);if(!K$.test(Z)||Z!==Z.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${z6}/${Z}/job.env`}function K6($){if(!K$.test($))throw Error("personal_computer_invalid_identity");return $.toLowerCase()}function F8($){let Q=K6($);return{runtimeRoot:`${nZ}/${Q}`,workspaceRoot:`${sZ}/sessions/${Q}`,sharedRoot:sZ}}var aZ="/root/.ara/cloud-browser/repl.sock";function V$($){return $==="compute"}function oZ($,Q,Z="linux"){if($)F8($);if(Z!=="linux")throw Error("cloud_browser_os_invalid");if(Q!==void 0&&(!$||!/^[1-9][0-9]{0,18}$/.test(Q)))throw Error("cloud_browser_generation_invalid");let X=$?`/var/lib/reason/browsers/${$.toLowerCase()}`:"/root/.ara/cloud-browser",J=$?`${X}/${Q?`g${Q}`:"current"}`:X,Y=$?`/root/.b/${$.toLowerCase().replaceAll("-","")}`:X;return{temporarySessionDirectory:Y,temporaryDirectory:$?`${Y}/${Q??"current"}`:`${J}/tmp`,directory:J,sessionDirectory:X,config:`${J}/config.json`,status:`${J}/status.json`,socket:`${J}/repl.sock`,bundle:`${J}/driver.mjs`,processName:$?`ara-browser-${$.toLowerCase()}${Q?`-${Q}`:""}`:"ara-cloud-browser"}}var H$="browser_egress",rZ=BQ,T6=45000,O6=p9+1500,m0=/^[A-Za-z0-9._:-]{1,160}$/,D6="/run/ara-hands";function _6($,Q,Z=Y4()){if($==="darwin")return{temporaryRoot:Z,prepareRoot:!1,sessionMode:448};return{temporaryRoot:Q??D6,prepareRoot:!0,sessionMode:457}}function tZ($,Q=process.platform,Z=process.geteuid?.()){return $===!0&&Q==="linux"&&Z===0}function B$($=Q4(),Q=process.platform,Z=process.geteuid?.()){return $&&Q==="linux"&&Z===0?{uid:$.uid,gid:$.gid,home:$.home,username:$.username}:null}function A6($=B$(),Q=DZ){return $&&Q()?r8:null}function yY($=B$(),Q=process.platform,Z=process.geteuid?.()){return Q!=="linux"||Z!==0||$!==null}function hY($=process.platform,Q=process.geteuid?.()){return $!=="linux"||Q!==0}function x6($,Q){if(!Q&&($??"linux")==="linux")return aZ;return oZ(Q,void 0,$??"linux").socket}function P6($){return $[L0]===!0?"sandbox_loopback":"ara_device_wss"}function W9($){return Boolean($)&&typeof $==="object"&&!Array.isArray($)}function z4($){let Q=$.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q.endsWith(".localhost")||Q==="::1"||Q==="0:0:0:0:0:0:0:1"||Q==="0.0.0.0"||Q.startsWith("127.")}class K4 extends q{expiryDiagnostic;constructor($){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=$}}function I6($){return W9($)&&Object.keys($).every((Q)=>Q==="source_path"||Q==="branch")&&($.source_path===void 0||s0($.source_path))&&typeof $.branch==="string"&&$$.test($.branch)}function R6($,Q,Z){let X=Q===void 0?Date.now():Q,J=["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"],Y=new Set([...J,"workspace_id","legacy_workspace_id",i0,a0,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",p,L0,H$,F9,q0,o0,g0]),K=W9($)?$:null,V=K?.[H$],G=K?.[F9],F=K?.[o0],B=V===void 0||(K?.[p]===f0||F===w9&&K?.[p]===void 0)&&W9(V)&&Object.keys(V).every((C)=>C==="mode"||C==="allowed_domains")&&V.mode==="enforce"&&Array.isArray(V.allowed_domains)&&V.allowed_domains.length<=256&&V.allowed_domains.every((C)=>typeof C==="string"&&c8(C));if(!W9($)||J.some((C)=>!(C in $))||Object.keys($).some((C)=>!Y.has(C))||!B||F!==void 0&&F!==w9||K?.[g0]!==void 0&&K[g0]!==W8||K?.personal_workspace!==void 0&&(K.personal_workspace!==!0||K[p]!==f0)||K?.cloud_browser!==void 0&&(K.cloud_browser!==!0||K[p]!==f0)||K?.sandbox_provider!==void 0&&!V$(K.sandbox_provider)||K?.sandbox_os!==void 0&&K.sandbox_os!=="linux"||G!==void 0&&(K?.[p]!==V9||!t8(G))||p in $&&$[p]!==f0&&$[p]!==V9&&$[p]!==B0||L0 in $&&$[L0]!==!0||$.workspace_path!==void 0&&(!s0($.workspace_path)||$[p]!==B0)||$.workspace_worktree!==void 0&&($.workspace_path===void 0||!I6($.workspace_worktree))||typeof $.relay_url!=="string"||typeof $.session_id!=="string"||!m0.test($.session_id)||$.workspace_id!==void 0&&(typeof $.workspace_id!=="string"||!m0.test($.workspace_id))||$.legacy_workspace_id!==void 0&&(typeof $.legacy_workspace_id!=="string"||!m0.test($.legacy_workspace_id))||$[i0]!==void 0&&($[i0]!==B8||(p in $))||$[a0]!==void 0&&($[a0]!==L8||(p in $))||$[q0]!==void 0&&(typeof $[q0]!=="string"||!m0.test($[q0]))||typeof $.environment_id!=="string"||!m0.test($.environment_id)||typeof $.expires_at!=="string"||$.policy_mode!=="full_access"||$.policy_version!==1||$.hands_protocol_version!==B9||$.hands_worker_version!==L9||$.hands_worker_artifact_sha256!==K0||!yZ($.hands_worker_entrypoint)||!S0($.target_generation)||!O0($.target_fence_id))throw new q("invalid_hands_payload","Reason Hands connection payload is invalid.");let H;try{H=new URL($.relay_url)}catch{throw new q("invalid_hands_relay","Reason Hands relay URL is invalid.")}let z=$[L0]===!0,L=z4(H.hostname);if((z?H.protocol!=="ws:"||!L:L?H.protocol!=="ws:":H.protocol!=="wss:")||H.username||H.password||H.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(H.pathname))throw new q("invalid_hands_relay","Reason Hands relay URL is not allowed.");let W=Date.parse($.expires_at),U=Number.isNaN(W)?"parse":new Date(W).toISOString()!==$.expires_at?"noncanonical":W<=X?"expired":W-X>rZ?"over_cap":"accepted",j={version:1,outcome:U,clock_source:Q===void 0?"date_now":"injected",validation_now_ms:Z9(X),expiry_ms:Z9(W),remaining_ms:Number.isSafeInteger(W-X)?W-X:null,maximum_lifetime_ms:rZ,cli_artifact:hZ()};if(U!=="accepted")throw new K4(j);try{Z?.(j)}catch{}let O=$.environment_binding===void 0?void 0:b8.safeParse($.environment_binding);if(O&&!O.success)throw new q("invalid_hands_request","Reason Hands environment binding is invalid.");return{...$.cloud_browser===!0?{cloud_browser:!0}:{},...V$($.sandbox_provider)?{sandbox_provider:$.sandbox_provider}:{},...$.sandbox_os==="linux"?{sandbox_os:$.sandbox_os}:{},...$.personal_workspace===!0?{personal_workspace:!0}:{},relay_url:H.toString(),...O?.success?{environment_binding:O.data}:{},session_id:$.session_id,...$.workspace_id===void 0?{}:{workspace_id:$.workspace_id},...$.legacy_workspace_id===void 0?{}:{legacy_workspace_id:$.legacy_workspace_id},...$[i0]===B8?{[i0]:B8}:{},...$[a0]===L8?{[a0]:L8}:{},...typeof $[q0]==="string"?{[q0]:$[q0]}:{},...$[o0]===w9?{[o0]:w9}:{},...$[g0]===W8?{[g0]:W8}:{},...typeof $.workspace_path==="string"?{workspace_path:$.workspace_path}:{},...W9($.workspace_worktree)?{workspace_worktree:{...typeof $.workspace_worktree.source_path==="string"?{source_path:$.workspace_worktree.source_path}:{},branch:String($.workspace_worktree.branch)}}:{},environment_id:$.environment_id,expires_at:$.expires_at,policy_mode:"full_access",policy_version:1,hands_protocol_version:B9,hands_worker_version:L9,hands_worker_artifact_sha256:K0,hands_worker_entrypoint:n0,target_generation:$.target_generation,target_fence_id:$.target_fence_id,...p in $?{[p]:$[p]}:{},...z?{[L0]:!0}:{},...G===void 0?{}:{[F9]:G},...V===void 0?{}:{[H$]:{mode:"enforce",allowed_domains:[...new Set(V.allowed_domains)].sort()}}}}function E6(){let $=new Map;return{acquire(Q,Z){if($.has(Q))return null;let X=[...$.values()],J=(K)=>Z.group!==void 0&&K.group===Z.group;if(Z.exclusive?!X.every(J):X.some((K)=>K.exclusive))return null;if(Z.limit!==void 0&&!X.some(J)&&new Set(X.map((K,V)=>K.group??V)).size>=Z.limit)return null;$.set(Q,Z);let Y=!1;return()=>{if(Y)return;Y=!0,$.delete(Q)}},activeOwners:()=>[...$.keys()]}}var S6=E6();function w6($,Q){N9($,{recursive:!0,mode:448});let Z=n($),X=()=>new q("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let K of Q.split("/")){let V=a(Z,K);try{let F=t(V);if(F.isSymbolicLink()||!F.isDirectory())throw X()}catch(F){if(!(F&&typeof F==="object"&&("code"in F)&&F.code==="ENOENT"))throw F;try{N9(V,{mode:448})}catch(B){if(!(B&&typeof B==="object"&&("code"in B)&&B.code==="EEXIST"))throw B}}let G=t(V);if(G.isSymbolicLink()||!G.isDirectory()||n(V)!==V)throw X();Z=V}let J=t(Z),Y=L6(Z,F$.O_RDONLY|F$.O_DIRECTORY|F$.O_NOFOLLOW);try{let K=B6(Y);if(!K.isDirectory()||K.dev!==J.dev||K.ino!==J.ino||n(Z)!==Z)throw X();W6(Y,448)}finally{U6(Y)}return Z}function b6($,Q=$4(),Z,X,J){if(!m0.test($)||Z!==void 0&&!m0.test(Z))throw new q("invalid_hands_workspace","Reason Hands run identity is invalid.");let Y=V0(p0({kind:"managed",workspaceId:$,...X?{base:X}:{},...J?{layout:J}:{}})),K=w6(Q,V0(Y)),V=a(K,C6(Y)),G=!1;try{let z=t(V);if(G=!0,z.isSymbolicLink())throw new q("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!z.isDirectory())throw new q("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(z){if(z instanceof q||!(z&&typeof z==="object"&&("code"in z)&&z.code==="ENOENT"))throw z}if(J&&!G)try{let z=a(n(Q),V0(p0({kind:"managed",workspaceId:$,...X?{base:X}:{}}))),L=t(z);if(!L.isSymbolicLink()&&L.isDirectory()&&n(z)===z)H8(z,V),G=!0}catch{}if(Z&&Z!==$){let z=a(K,Z);try{let L=t(z);if(L.isSymbolicLink()||!L.isDirectory())throw new q("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let W=n(z);if(V0(W)!==K)throw new q("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let U=null;if(G){U=a(K,`.${$}.previous`);try{throw t(U),new q("invalid_hands_workspace","Reason Hands previous workspace backup already exists.")}catch(j){if(j instanceof q||!(j&&typeof j==="object"&&("code"in j)&&j.code==="ENOENT"))throw j}H8(V,U)}try{H8(W,V)}catch(j){if(U)H8(U,V);throw j}G=!0}catch(L){if(L instanceof q||!(L&&typeof L==="object"&&("code"in L)&&L.code==="ENOENT"))throw L}}N9(V,{recursive:!0,mode:448}),b9(V,448);let F=n(V);if(V0(F)!==K)throw new q("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let B=a(F,"repo");try{let z=t(B);if(z.isSymbolicLink()||!z.isDirectory())throw new q("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(z){if(z instanceof q||!(z&&typeof z==="object"&&("code"in z)&&z.code==="ENOENT"))throw z}N9(B,{recursive:!0,mode:448}),b9(B,448);let H=n(B);if(V0(H)!==F)throw new q("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:F,repoPath:H}}function V4($){let Q=null;try{Q=t($)}catch{}if(!Q||Q.isSymbolicLink()||!Q.isDirectory()||Q.uid!==0||Q.gid!==0||(Q.mode&4095)!==493)throw new q("cloud_workspace_root_invalid","This cloud Session's workspace root is not root's 0755 directory, so Reason Hands cannot use it.")}function k6($,Q){let Z="/";for(let X of["",...$.split("/"),...Q.split("/")].filter((J,Y)=>Y===0||J)){if(X)Z=a(Z,X);let J;try{J=t(Z)}catch{return null}if(J.uid!==0)return J.uid;if((J.mode&2)!==0&&(J.mode&512)===0&&!J.isSymbolicLink())return-1;if(J.isSymbolicLink()||!J.isDirectory())return null}return null}function f6($,Q,Z,X=process.geteuid?.(),J){if(!m0.test(Q))return null;let Y,K;try{Y=n($),K=V0(p0({kind:"managed",workspaceId:Q,...Z?{base:Z}:{},...J?{layout:J}:{}}))}catch{return null}let V=a(Y,K),G=W$(V)!==null,F=(W)=>new q("cloud_workspace_root_invalid",W),B;if(X===0){let W=k6(Y,K);if(W===null)return null;if(!G)throw new q("invalid_hands_workspace","As root, Reason Hands never prepares a workspace in folders another user owns.");B=W}else{if(!G)return null;let W,U;try{W=t(V0(V)),U=t(V)}catch{return null}if(W.isSymbolicLink()||!W.isDirectory()||W.uid===0||U.uid!==0)return null;B=W.uid}let H=Y;for(let W of K.split("/")){let U=a(H,W),j=!1;try{let O=t(U);j=!O.isSymbolicLink()&&O.isDirectory()&&n(U)===U}catch{}if(!j)throw F("This cloud Session's workspace root is missing or is not a real directory.");H=U}V4(V);let z;try{z=F4(V)}catch(W){if(W instanceof q)throw W;throw F("This cloud Session's workspace root changed while Reason Hands checked it.")}let L=null;try{L=k9(z.repoPath).uid}catch{}if(L!==B)throw new q("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return z}function F4($,Q=!1){let Z=n($),X=a(Z,"repo"),J;try{J=t(X)}catch{throw new q("invalid_hands_workspace","Reason Hands repository is missing from the granted root.")}if(Q){if(!/^\/var\/lib\/reason\/sessions\/[0-9a-f-]{36}$/.test(Z))throw new q("invalid_hands_workspace","Personal runtime identity is invalid.");if(F8(Z.slice(Z.lastIndexOf("/")+1)).runtimeRoot!==Z)throw new q("invalid_hands_workspace","Personal runtime identity is invalid.");let V=n("/workspace"),G=n(X);if(V!=="/workspace"||!k9(G).isDirectory()||!G.startsWith("/workspace/"))throw new q("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:Z,repoPath:G}}let Y=_Z(Z);if(Y&&J.isSymbolicLink()){let V=n(X);if(V!==n(Y)||!k9(V).isDirectory())throw new q("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:Z,repoPath:V}}if(J.isSymbolicLink()||!J.isDirectory())throw new q("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let K=n(X);if(V0(K)!==Z)throw new q("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:Z,repoPath:K}}function L$($,Q,Z){if(Q!==void 0&&!s0(Q))throw new q("invalid_hands_workspace",`Reason Hands ${Z} is invalid.`);let X=G4($,Q??".");if(!w0($,X))throw new q("invalid_hands_workspace",`Reason Hands ${Z} escapes its granted root.`);return X}function H4($,Q,Z){if(e8(Q)){let X=n(Z);return{anchor:X,target:G4(X,Q),boundary:a(X,H9)}}return{anchor:$,target:L$($,Q,"folder"),boundary:$}}function g6($,Q){if(!w0($,Q))throw new q("invalid_hands_workspace","Reason Hands folder escapes its granted root.");let Z=$;for(let X of Q.slice($.length).split("/").filter(Boolean)){Z=a(Z,X);let J=null;try{J=t(Z)}catch(Y){if(Y.code!=="ENOENT")throw Y}if(!J)N9(Z,{mode:448});else if(J.isSymbolicLink()||!J.isDirectory())throw new q("invalid_hands_workspace","Reason Hands folder must be made of real directories.")}}function U4($,Q){let Z=n(L$($,Q.source_path,"repository"));if(!w0($,Z)||!k9(Z).isDirectory())throw new q("invalid_hands_workspace","Reason Hands repository must be a folder in its granted root.");return Z}async function m6($,Q,Z,X=N8()){try{let J=n($);if(U$(H4(J,Q,X).target))return;return await EZ(U4(J,Z))??void 0}catch{return}}function y6($,Q,Z,X,J=h6,Y=N8()){let K=n($),{target:V,boundary:G,anchor:F}=H4(K,Q,Y);if(Z&&!U$(V)){let z=U4(K,Z);g6(F,V0(V));let L=["-c","core.hooksPath=/dev/null","-C",z];if(X)J([...L,"update-ref","--create-reflog","-m",X.note,`refs/heads/${Z.branch}`,X.commit,""]);let W=X?J([...L,"worktree","add",V,Z.branch]):J([...L,"worktree","add","-b",Z.branch,V]);if(!X&&W.status!==0&&/already exists/.test(W.stderr)&&!U$(V))W=J([...L,"worktree","add",V,Z.branch]);if(W.status!==0)throw new q(/not a git repository/i.test(W.stderr)?"workspace_not_git_repository":"workspace_worktree_failed","Reason could not create this Session's git worktree.")}let B;try{B=t(V)}catch{throw new q("workspace_folder_missing","This Session's folder no longer exists.")}let H=n(V);if(B.isSymbolicLink()&&!w0(G,H))throw new q("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!k9(H).isDirectory()||!w0(G,H))throw new q("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(b0(H))throw new q("protected_path","Credential and secret folders are unavailable to Sessions.");return H}function h6($){let Q=H6("git",$,{encoding:"utf8",timeout:60000,env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:["ignore","ignore","pipe"]});return{status:Q.status,stderr:Q.stderr??""}}function W4($){return iZ($)??W$($)?.jobEnv??a($,"job.env")}function v6($,Q){let Z=W4($),X=t(Z);if(X.isSymbolicLink()||!X.isFile())throw new q("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");N6(Z,Q),b9(Q,384)}function c6($){if($.workspaceMode===B0&&$.workspacePath!==void 0){let K=$.home??N8(),V=y6($.grantedRoot,$.workspacePath,$.workspaceWorktree,$.workspaceWorktreeStart,void 0,K);if($.workspaceWorktree&&$.deviceId)kZ(K,$.workspacePath,$.deviceId);return{workRoot:V,repoPath:V,workspace:{kind:"root",path:$.workspacePath},jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if($.workspaceMode===f0)return{...F4($.grantedRoot,$.personalWorkspace),workspace:{kind:"root"},jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if($.workspaceMode===V9||$.workspaceMode===B0){let K=t($.grantedRoot);if(K.isSymbolicLink()||!K.isDirectory())throw new q("invalid_hands_workspace","Reason Hands root must be a real directory.");let V=n($.grantedRoot);return{workRoot:V,repoPath:V,workspace:{kind:"root"},jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}let Q=$.workspaceId??$.runId,Z={kind:"managed",workspaceId:Q,...$.workspaceBase?{base:$.workspaceBase}:{},...$.workspaceLayout?{layout:$.workspaceLayout}:{}},X=l9($.grantedRoot,Z,$.home).anchor,J=f6(X,Q,$.workspaceBase,void 0,$.workspaceLayout);if(J)return{...J,workspace:Z,jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1,cloudSessionRoot:!0};let Y=b6(Q,X,$.legacyWorkspaceId,$.workspaceBase,$.workspaceLayout);return{...Y,workspace:Z,jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:V0(Y.workRoot),managedWorkspace:!0}}function d6($){let{command:Q,prefix:Z}=k8($.executablePath,$.sourceEntrypoint),X=V8({home:q6(),temporaryDirectory:$.temporaryDirectory,path:$.path});if(X.REASON_DEVICE_ROOT=X.ARA_DEVICE_ROOT=$.grantedRoot,X.REASON_HANDS_WORKSPACE=X.ARA_HANDS_WORKSPACE=$.workRoot,X.REASON_HANDS_REPO=X.ARA_HANDS_REPO=$.root,$.workspacePoolPath)X.REASON_HANDS_WORKSPACE_POOL=X.ARA_HANDS_WORKSPACE_POOL=$.workspacePoolPath;return{command:Q,args:[...Z,"__device","__hands-worker","--config",$.configPath],options:{cwd:$.root,env:X,shell:!1,stdio:["ignore","ignore","pipe"]}}}function p6($,Q){let Z="",X=!1,J=Date.now(),Y=0,K=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled"].map((H)=>`hands.worker.${H}`)),V=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"]),G=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],F=["peerGeneration","socketState","closeCode"],B=new Set(["event","reason","launchId",...G,...F]);return(H)=>{for(let z of H.toString().split(/(?<=\n)/)){let L=z.endsWith(`
|
|
458
|
+
`);if(!X&&Z.length+z.length<=2048)Z+=z;else X=!0;if(!L)continue;let W=Z;if(Z="",X){X=!1;continue}try{let U=JSON.parse(W);if(!U||typeof U!=="object"||Array.isArray(U)||Object.keys(U).some((j)=>!B.has(j))||!K.has(U.event)||!V.has(U.reason)||U.launchId!==$||G.some((j)=>!Number.isSafeInteger(U[j])||U[j]<0)||F.some((j)=>U[j]!==null&&(!Number.isSafeInteger(U[j])||U[j]<0)))continue;if(Date.now()-J>=60000)J=Date.now(),Y=0;if(Y>=122)continue;Y+=1,Q(U)}catch{}}}}async function u6($){let Q=$.now()+$.timeoutMs;while($.now()<Q){if($.signal.aborted)throw new q("cancelled","Reason Hands start was cancelled.");if($.spawnFailed?.()||$.child.exitCode!==null||$.child.signalCode!==null)throw new q("hands_worker_exited","Reason Hands exited before ready.");let Z=z8($.path,{pid:$.child.pid??-1,launchId:$.launchId,workerVersion:L9,protocolVersion:B9,workerArtifactSha256:K0,workerEntrypoint:n0});if(Z?.targetGeneration===$.targetGeneration&&Z.fenceId===$.fenceId)return Z;await new Promise((X)=>setTimeout(X,10))}throw new q("hands_ready_timeout","Reason Hands did not become ready.")}async function l6($,Q){let Z=()=>$.exitCode===0&&$.signalCode===null;if($.exitCode!==null||$.signalCode!==null)return Z()?"stopped":"already_exited";let X=new Promise((K)=>$.once("exit",()=>K()));try{if(!$.kill("SIGTERM"))return Z()?"stopped":"unobserved"}catch{return Z()?"stopped":"unobserved"}if(await eZ(X,Q))return Z()?"stopped":"unobserved";try{$.kill("SIGKILL")}catch{}return await eZ(X,Q)?"forced":"unobserved"}async function eZ($,Q){let Z;try{return await Promise.race([$.then(()=>!0),new Promise((X)=>{Z=setTimeout(()=>X(!1),Q)})])}finally{clearTimeout(Z)}}function s6($){return new Promise((Q)=>{let Z=!1,X=(V)=>{if(Z)return;Z=!0,clearTimeout(K),$.signal.removeEventListener("abort",J),$.child.off("exit",Y),Q(V)},J=()=>X("cancelled"),Y=()=>X("exited"),K=setTimeout(()=>X("expired"),Math.max(0,$.expiresAt-$.now()));if($.signal.addEventListener("abort",J,{once:!0}),$.child.once("exit",Y),$.signal.aborted)J();else if($.child.exitCode!==null||$.child.signalCode!==null)Y()})}var B4=J4();function n6($,Q){if(!($ instanceof Error)||$ instanceof q)return!1;let Z=["hands_browser_driver_missing","hands_browser_driver_version_mismatch","hands_browser_executable_missing","hands_browser_unsupported_platform","hands_browser_unavailable"].includes($.message),X=["ENOENT","EACCES","EPERM"].includes($.code??"");if(!Z&&!X)return!1;try{return t(Q),!1}catch(J){return W9(J)&&J.code==="ENOENT"}}function i6($){return $.sandbox_provider==="compute"&&!$.cloud_browser&&!$[L0]&&$[p]===f0}function a6($,Q,Z){return $===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:F0($,Q),...Z===void 0?{}:{worker_prespawned:Z}}}}function vY(){B4().catch(()=>{return}),G9().catch(()=>{return})}async function cY($,Q={}){let Z=Q.logDiagnostic??((N)=>console.warn(N)),X=new Map,J=(N)=>{let M=Date.now();X.set(N,M);try{Z(JSON.stringify({event:"sandbox.hands_startup",stage:N,timestampMs:M}))}catch{}};J("entered");let Y=$.claimEnvironment;$.claimEnvironment=void 0;let K=Q.now??Date.now,V,G=R6($.payload,Q.now?.(),(N)=>{V=N});if($.managedPty&&($.managedPty.version!==1||!$.headless||!$.runtimeDirectory||![void 0,!0].includes($.managedPty.startupVerified)||!$.deviceIdentity||!$.claimOwner||$.claimOwner.device_id!==$.deviceIdentity.deviceId||!G.environment_binding||!["darwin","linux"].includes(process.platform)))throw new q("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let F=async(N)=>{let M;try{await Promise.race([N,new Promise((D,w)=>{M=setTimeout(()=>w(new q("hands_event_delivery_unavailable","Hands event delivery did not settle within its deadline.")),Math.max(1,Math.min(Q.eventDeliveryTimeoutMs??5000,5000)))})])}finally{clearTimeout(M)}},B=async(N,M)=>F($.emitEvent(N,M));if($.headless&&(G.cloud_browser===!0||$.managedBrowser!==void 0||G[L0]!==void 0||G[F9]!==void 0||G[p]!==void 0&&G[p]!==B0))throw new q("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let H=B$(),z=G[g0]===void 0?null:A6(H);if(G[g0]!==void 0&&(z===null||!$.headless||!tZ($.hostExecution,Q.hostIdentity?.platform,Q.hostIdentity?.euid)))throw new q("hands_model_jobs_egress_unavailable","This worker cannot hold its jobs to the guest egress guard; the Hands did not start.");if(G[o0]!==void 0&&!($.headless&&tZ($.hostExecution,Q.hostIdentity?.platform,Q.hostIdentity?.euid)))throw new q("hands_confinement_unavailable","Confined Hands need a root Linux worker in host mode.");if(G.cloud_browser&&process.platform!=="linux")throw new q("cloud_browser_target_invalid","Cloud browser is available only on a cloud machine.");let L=`${$.operationId}:${$.attemptId}`,W=G[p]===V9,U=$.headless||process.platform==="darwin"&&$.managedBrowser===void 0&&!G.cloud_browser&&!G.browser_egress&&!G[L0]&&(G[p]===void 0||G[p]===B0)||i6(G),j=W?G[F9]??"bash":null,O=j?PZ(j):null;if(O)throw new q(O,"Persistent Node REPL execution is unavailable; this benchmark profile cannot start.");let C=G[p],A=$.headless===!0?$.handsSlots??1:void 0,R=(Q.slot??S6).acquire(L,{exclusive:A===1||C!==void 0&&C!==B0,...A!==void 0&&A>1?{limit:A}:{},...$.headless===!0&&G[q0]!==void 0?{group:G[q0]}:{}});if(!R)throw new q("hands_slot_busy",A!==void 0&&A>1?`This Reason worker runs at most ${A} sessions at a time.`:"This Reason Device runs one session at a time.");let P=$.headless===!0?Z4($.runId):null,T=null,S=null,g,E;try{J("browser_resolution");let N=$.headless&&Q.browserExecutablePath===void 0?await G9():null,M=W||G.cloud_browser?null:Q.browserExecutablePath===void 0?$.headless?N?.status==="resolved"?N.executablePath:null:await CZ(void 0,process.platform,$.managedBrowser):Q.browserExecutablePath;if(!W&&!G.cloud_browser&&!U&&!M)throw new q("hands_browser_unavailable","Reason Hands requires Chrome, Edge, Brave, Chromium, or a Playwright Chromium install.");J("path_resolution");let D;try{D=await(Q.resolvePathEnvironment??B4)()}catch{D={path:X4(),source:"fallback"}}if(J("workspace_setup"),process.platform==="darwin"){let s=G[p]===B0&&G.workspace_path!==void 0?L$($.root,G.workspace_worktree?G.workspace_worktree.source_path:G.workspace_path,"folder"):null;for(let Z0 of new Set([$.root,...s?[s]:[]]))await dQ(Z0)}let k=G[p]===f0||G[p]===V9?_6(process.platform,Q.sandboxRuntimeRoot):null,f=$.headless&&$.runtimeDirectory?$.runtimeDirectory:k?k.temporaryRoot:Y4();if(T="private_runtime",$.headless&&$.runtimeDirectory){_9(f);let s=n($.root);if(!P9(s,f))throw new q("invalid_hands_workspace","Private worker state must not overlap the granted workspace.")}if($.headless&&$.runtimeDirectory&&(!$.deviceIdentity||!G.environment_binding))throw new q("environment_unavailable","Headless Hands requires a server-bound private environment.");if(T="runtime_root",k?.prepareRoot)N9(f,{recursive:!0,mode:457}),b9(f,457);T="temporary_directory";let _=n(M6(a(f,"reason-hands-session-")));S=_,b9(_,k?.sessionMode??448);let m=a(_,"hands-config.json"),c=a(_,"hands-ready.json"),u=V6(),o=G.target_fence_id;T="granted_root";let b=n($.root);T="workspace_layout";let y=G[p]===B0&&G.workspace_path!==void 0&&G.workspace_worktree?await m6(b,G.workspace_path,G.workspace_worktree):void 0,{workRoot:d,repoPath:l,jobEnvPath:G0,workspacePoolPath:N0,managedWorkspace:H0,workspace:U0,cloudSessionRoot:y0}=c6({grantedRoot:b,personalWorkspace:G.personal_workspace===!0,runId:$.runId,workspaceId:G.workspace_id,legacyWorkspaceId:G.legacy_workspace_id,workspaceBase:G[i0],workspaceLayout:G[a0],temporaryDirectory:_,workspaceMode:G[p],applicationSupportPath:Q.applicationSupportPath,...G.workspace_path===void 0?{}:{workspacePath:G.workspace_path},...G.workspace_worktree?{workspaceWorktree:G.workspace_worktree}:{},...y?{workspaceWorktreeStart:y}:{},...$.deviceIdentity?{deviceId:$.deviceIdentity.deviceId}:{}}),C0=P6(G);T="jobs";let r=$.headless&&$.runtimeDirectory?zQ({runtimeDirectory:$.runtimeDirectory,root:b,runId:$.runId}):void 0;g=r?.disposeSocket;let M0=r?KQ(r):null;if(M0)try{Z(JSON.stringify({event:"hands.journal_owner_retired",run_id:$.runId,reason:M0.reason,prior_executor_launch_id:M0.executorLaunchId}))}catch{}if(r&&[d,l].some((s)=>!P9(s,r.journalDirectory)))throw new q("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 r0=G.personal_workspace?d.slice(d.lastIndexOf("/")+1):void 0;if(r0&&r0!==G.workspace_id)throw new q("invalid_hands_workspace","Personal session identity does not match its Device grant.");T="browser_socket";let W0=G.cloud_browser?x6(G.sandbox_os,r0):a(r?V0(r.socketPath):_,"repl.sock");T="relay_url";let j0=z4(new URL(G.relay_url).hostname),h0=C0==="ara_device_wss"&&!j0?(Q.loadProxy??f8)()?.url:void 0,Y0;T="environment_owner";let X0=$.headless&&$.deviceIdentity&&G.environment_binding?gZ(_,{runId:$.runId,...$.deviceIdentity,binding:G.environment_binding,expiresAtMs:Date.parse(G.expires_at),identity:()=>Y0?.()??null}):void 0;T="job_environment";let M9=!X0&&U0.kind==="managed"&&H0?a(d,"job.env"):null;if(M9)try{U8(M9,"",{mode:384,flag:"wx"})}catch(s){if(!(s instanceof Error&&("code"in s)&&s.code==="EEXIST"))throw s}let M8={url:G.relay_url,transport:C0,...h0===void 0?{}:{proxyUrl:h0},...$.localGithubConfinement?{localGithubConfinement:!0}:{},...G[o0]&&X0?{gitCredentialEnvironment:!0}:{},workerVersion:L9,protocolVersion:B9,workerArtifactSha256:K0,workerEntrypoint:n0,targetGeneration:G.target_generation,fenceId:o,workRoot:d,workspaceAliasPath:d,jobEnvPath:G0,...X0?{environmentSnapshotPath:X0.path,...$.hostExecution?{executionEnvironment:wQ()}:{},environmentExpectedBinding:{runId:$.runId,...$.deviceIdentity,binding:G.environment_binding}}:M9?{jobEnvSourcePath:M9,workspacePoolPath:V0(d)}:H0?{}:{jobEnvSourcePath:W4(d)},repoPath:l,replSocketPath:W0,...G.cloud_browser?{browserRunId:$.runId}:{},readyPath:c,launchId:u,expiresAtMs:Date.parse(G.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...r?{managedJobs:{journalDirectory:r.journalDirectory,scopeId:r.scopeId},jobControlSocketPath:r.socketPath}:{},...r&&H?{jobsUser:{...H,...z!==null?{modelGid:z}:{}}}:{},...$.managedPty&&r&&X0?{managedPty:{version:1,...$.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:bQ()}:{}}}:{},...U&&!M?{allowedTools:["bash","read","write","edit"]}:W?{allowedTools:j==="bash"?["bash"]:["bash","repl"]}:{}};if(X0||H0&&!M9)U8(G0,"",{mode:384});else v6(d,G0);T="config_write",U8(m,JSON.stringify(M8),{mode:384}),T=null;let v0={session_id:G.session_id,environment_id:G.environment_id,hands_protocol_version:B9,hands_worker_version:L9,hands_worker_artifact_sha256:K0,hands_worker_entrypoint:n0,target_generation:G.target_generation,target_fence_id:G.target_fence_id,executor_launch_id:u},f9=null,N$=!1,M$=!1,j$,Q0=null,q$,C$,g9="failed",T$=null,j8=Promise.resolve(),O$=null,q8=async(s,Z0)=>{try{await B(s,Z0)}catch{}};try{J("event_started");let s,Z0=(async()=>{await $.emitEvent("hands.started",{...v0,policy_mode:"full_access",policy_version:1,path_source:D.source}),s=Date.now()})();Z0.catch(()=>{return}),J("worker_setup");let m9=G.browser_egress?{mode:"enforce",allowedDomains:G.browser_egress.allowed_domains}:{mode:"off"};if(j&&j!=="bash")f9=await(Q.startNodeRepl??lZ)({socketPath:W0,workRoot:d});else if(!W&&!G.cloud_browser&&M)f9=await(Q.startRepl??TZ)({socketPath:W0,browserExecutablePath:M,workspaceRoot:l,...$.managedBrowser?{managedBrowser:$.managedBrowser}:{},...$.desktopRecording?{recording:$.desktopRecording}:{},networkPolicy:m9,onEgressDenied:(h)=>{let T0=AZ(h.host);Z(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:T0,reason:h.reason,run_id:$.runId})),j8=j8.then(()=>B("hands.browser_egress_denied",{destination_id:T0,reason:h.reason})).catch((N4)=>{O$??=N4})}}).catch((h)=>{if(!U||$.signal.aborted||K()>=Date.parse(G.expires_at)||!n6(h,W0))throw h;return Object.assign(M8,{allowedTools:["bash","read","write","edit"]}),U8(m,JSON.stringify(M8),{mode:384}),M$=!0,null});let D$=d6({configPath:m,root:l,grantedRoot:b,workRoot:d,workspacePoolPath:N0,temporaryDirectory:_,path:D.path,executablePath:Q.executablePath,sourceEntrypoint:Q.sourceEntrypoint}),C8=Date.now(),T8,_$,O8=Q.takePrespawnedWorker?.(D$)??null;if(j$=Q.takePrespawnedWorker?O8!==null:void 0,Q0=O8??(Q.spawnWorker??((h)=>F6(h.command,h.args,h.options)))(D$),!O8)Q.adoptSpawnedWorker?.(Q0);Q0.stderr?.on("data",p6(u,(h)=>{if(h.event==="hands.worker.connecting")T8??=h.timestampMs;else if(h.event==="hands.worker.open")_$??=h.timestampMs;Z(JSON.stringify({...h,run_id:$.runId}))}));let A$=!1;Q0.on("error",()=>{A$=!0}),Q0.once("exit",(h,T0)=>{try{Z(JSON.stringify({event:"hands.worker.exited",run_id:$.runId,launchId:u,exit_code:h,exit_signal:T0}))}catch{}}),E=Q0,J("worker_ready_wait");let j9=await u6({path:c,launchId:u,fenceId:o,targetGeneration:G.target_generation,child:Q0,spawnFailed:()=>A$,signal:$.signal,timeoutMs:Q.readyTimeoutMs??T6,now:K}),L4=Date.now();if(Y0=()=>{if(!Q0||Q0.exitCode!==null||Q0.signalCode!==null)return null;let h=z8(c,j9);return h?{generation:h.targetGeneration,fenceId:h.fenceId}:null},r){let h={root:b,runId:$.runId,operationId:$.operationId,scopeId:r.scopeId,socketPath:r.socketPath,generation:j9.targetGeneration,fenceId:j9.fenceId,executorLaunchId:u,expiresAtMs:Date.parse(G.expires_at),readIdentity:Y0,workspace:U0,localGithubConfinement:$.localGithubConfinement===!0};if(X0)h.environment=X0;if($.claimOwner&&$.deviceIdentity&&$.claimOwner.device_id===$.deviceIdentity.deviceId){let T0=[$.deviceIdentity.apiOrigin,G.relay_url];if(h0)T0.push(h0);h.previewAuthority={owner:Object.freeze({...$.claimOwner}),rootId:$.deviceIdentity.rootId,relayOrigin:new URL(G.relay_url).origin,deniedPorts:c$(T0)}}C$=VQ(h)}if(await new Promise((h)=>{setImmediate(h)}),y0)V4(d);let y9;if(Y&&X0){try{let h=X0.install(Y);y9={snapshot_id:h.snapshot_id,installed_revision:h.installed_revision}}catch{}try{Z(JSON.stringify({event:"hands.environment_at_claim",run_id:$.runId,installed:y9!==void 0}))}catch{}}Y=void 0,J("event_ready");let x$=F(Z0);x$.catch(()=>{return});let P$=Date.now();N$=!0,await B("hands.ready",{...v0,expiry_diagnostic:V,startup_stages:{version:1,browser_resolution_ms:F0(X.get("browser_resolution"),X.get("path_resolution")),path_resolution_ms:F0(X.get("path_resolution"),X.get("workspace_setup")),workspace_setup_ms:F0(X.get("workspace_setup"),X.get("event_started")),repl_setup_ms:F0(X.get("worker_setup"),C8),worker_boot_ms:F0(C8,T8),worker_dial_ms:F0(T8,_$),worker_ready_ms:F0(C8,L4),started_event_ms:F0(X.get("event_started"),s),started_join_wait_ms:F0(X.get("event_ready"),P$),total_ms:F0(X.get("entered"),P$)},...a6($.claimedAtMs,X.get("entered"),j$),...$.managedPty?.startupVerified===!0?{managed_pty:{version:1,execution_mode:"host",descendant_cleanup_verified:!0}}:{},policy_mode:"full_access",policy_version:1,path_source:D.source,connection_generation:j9.generation,...y9?{environment_installed:y9}:{},...U&&!f9?{browser_state:"unavailable",browser_reason_code:M$?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await x$,J("ready"),q$=dZ({path:c,initial:j9,signal:$.signal,isAlive:()=>Q0!==null&&Q0.exitCode===null&&Q0.signalCode===null&&K()<Date.parse(G.expires_at),publish:(h,T0)=>$.emitEvent("hands.reconnected",{...v0,target_generation:h.targetGeneration,target_fence_id:h.fenceId,connection_generation:h.generation},T0),failed:()=>Z(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:$.runId,executor_launch_id:u}))});let I$=await s6({child:Q0,signal:$.signal,expiresAt:Date.parse(G.expires_at),now:K});if(I$==="cancelled"){let h=$.signal.reason instanceof q?$.signal.reason.code:"cancelled";throw g9=h,new q(h,"Reason Hands was cancelled.")}if(I$==="exited")throw new q("hands_worker_exited","Reason Hands exited unexpectedly.");return g9="expired",{...v0,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(s){T$=s;let Z0=s instanceof q?s.code:"hands_failed",m9=Z0==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(Z0);if(g9=m9?Z0:"failed",!m9)await q8("hands.failed",{...v0,reason_code:Z0});throw s}finally{q$?.stop(),C$?.();let s=Q0?await l6(Q0,Q.stopTimeoutMs??O6):null,Z0=!1;await $.desktopRecording?.close();try{await f9?.stop()}catch{Z0=!0}if(await j8,(s==="stopped"||s==="already_exited"&&!N$)&&!Z0)await q8("hands.stopped",{...v0,reason_code:g9});else if(s!==null||Z0){if(await q8("hands.failed",{...v0,reason_code:s==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),T$===null||Z0)throw new q("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(O$!==null)throw new q("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(N){let M=OZ(T,N);if(M)try{Z(JSON.stringify({event:"sandbox.hands_workspace_failed",...M}))}catch{}throw N}finally{try{if(!E||E.exitCode!==null||E.signalCode!==null)g?.();if(S!==null&&(!E||E.exitCode!==null||E.signalCode!==null))j6(S,{recursive:!0,force:!0})}finally{P?.(),R()}}}
|
|
459
|
+
export{v as ga,b$ as ha,k$ as ia,E4 as ja,y$ as ka,v$ as la,c$ as ma,D2 as na,zQ as oa,y2 as pa,h2 as qa,v2 as ra,c2 as sa,d2 as ta,p2 as ua,HQ as va,u2 as wa,s2 as xa,p as ya,B0 as za,yX as Aa,hX as Ba,QJ as Ca,ZJ as Da,qQ as Ea,n9 as Fa,_9 as Ga,A9 as Ha,IQ as Ia,gZ as Ja,Y5 as Ka,RQ as La,wQ as Ma,bQ as Na,S5 as Oa,w5 as Pa,J0 as Qa,b5 as Ra,k5 as Sa,f5 as Ta,u5 as Ua,Z1 as Va,l5 as Wa,P9 as Xa,w0 as Ya,s5 as Za,BX as _a,Y1 as $a,G1 as ab,QZ as bb,XX as cb,I9 as db,o1 as eb,K$ as fb,iZ as gb,tZ as hb,B$ as ib,A6 as jb,yY as kb,hY as lb,K4 as mb,E6 as nb,V4 as ob,F4 as pb,d6 as qb,vY as rb,cY as sb};
|