@reason-machines/cli-linux-x64 0.2.407 → 0.2.410

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/THIRD_PARTY_NOTICES.txt +8 -7
  2. package/bin/reason +2 -2
  3. package/bin/runtime/srt/sandbox-runtime.mjs +52 -52
  4. package/bin/vm-hands/api-cjv8m2zy.js +2 -0
  5. package/bin/vm-hands/api-credentials-m5akr9fv.js +2 -0
  6. package/bin/vm-hands/connect-cli-nydbj6ae.js +2 -0
  7. package/bin/vm-hands/custom-endpoint-device-dkqb4rqy.js +2 -0
  8. package/bin/vm-hands/desktop-account-5v7x0ajx.js +2 -0
  9. package/bin/vm-hands/device-workspace-p9q9dckg.js +2 -0
  10. package/bin/vm-hands/fsevents-ekt70rcc.js +2 -0
  11. package/bin/vm-hands/hands-worker-source-cgrpm21b.js +2 -0
  12. package/bin/vm-hands/index-k8kcz8a3.js +12818 -0
  13. package/bin/vm-hands/install-receipt-7vt2y2vh.js +2 -0
  14. package/bin/vm-hands/local-automation-y9kx76wa.js +2 -0
  15. package/bin/vm-hands/local-capabilities-j6h63m79.js +2 -0
  16. package/bin/vm-hands/local-desktop-users-q886k0mm.js +2 -0
  17. package/bin/vm-hands/local-display-mac-w85956f1.js +2 -0
  18. package/bin/vm-hands/local-display-session-ftt74eb3.js +2 -0
  19. package/bin/vm-hands/local-pty-session-5f50sqq0.js +2 -0
  20. package/bin/vm-hands/managed-runtime-tjwpypgf.js +2 -0
  21. package/bin/vm-hands/network-contract-9x9kc5vv.js +2 -0
  22. package/bin/vm-hands/package-78fkast4.js +2 -0
  23. package/bin/vm-hands/permissions-byngw8v0.js +2 -0
  24. package/bin/vm-hands/reason-hands-protocol-2tnghj3b.js +2 -0
  25. package/bin/vm-hands/serve-service-j5wnq4bg.js +2 -0
  26. package/bin/vm-hands/status-8tjada6n.js +10 -0
  27. package/bin/vm-hands/version-5hrs2hvb.js +2 -0
  28. package/bin/vm-hands/vm-hands-entry-lite-05rrh8yg.js +250 -0
  29. package/bin/vm-hands/vm-hands-entry-lite-09m2cdkw.js +4 -0
  30. package/bin/vm-hands/vm-hands-entry-lite-0g9xvgdy.js +2 -0
  31. package/bin/vm-hands/vm-hands-entry-lite-0xrsph3r.js +3 -0
  32. package/bin/vm-hands/vm-hands-entry-lite-10sbjfzx.js +9 -0
  33. package/bin/vm-hands/vm-hands-entry-lite-1cwqa4jr.js +3 -0
  34. package/bin/vm-hands/vm-hands-entry-lite-1rrb66r9.js +3 -0
  35. package/bin/vm-hands/vm-hands-entry-lite-1rtkf2xm.js +3 -0
  36. package/bin/vm-hands/vm-hands-entry-lite-1sg8sdw5.js +5 -0
  37. package/bin/vm-hands/vm-hands-entry-lite-22kfyvnk.js +2 -0
  38. package/bin/vm-hands/vm-hands-entry-lite-46fkv5sp.js +105 -0
  39. package/bin/vm-hands/vm-hands-entry-lite-66ctbcym.js +3 -0
  40. package/bin/vm-hands/vm-hands-entry-lite-6aeea05q.js +3 -0
  41. package/bin/vm-hands/vm-hands-entry-lite-70ba2bqj.js +458 -0
  42. package/bin/vm-hands/{vm-hands-entry-lite-vr4sva78.js → vm-hands-entry-lite-80y72d0e.js} +5 -9
  43. package/bin/vm-hands/vm-hands-entry-lite-88swf2qr.js +6 -0
  44. package/bin/vm-hands/vm-hands-entry-lite-89z488gz.js +3 -0
  45. package/bin/vm-hands/vm-hands-entry-lite-8ns59paz.js +3 -0
  46. package/bin/vm-hands/vm-hands-entry-lite-8t9xssf9.js +3 -0
  47. package/bin/vm-hands/vm-hands-entry-lite-907pa7f9.js +65 -0
  48. package/bin/vm-hands/vm-hands-entry-lite-9ay6f56v.js +3 -0
  49. package/bin/vm-hands/{vm-hands-entry-lite-jcd21jpm.js → vm-hands-entry-lite-9c95p6n9.js} +54 -54
  50. package/bin/vm-hands/vm-hands-entry-lite-ab2m9erf.js +2 -0
  51. package/bin/vm-hands/vm-hands-entry-lite-b885gwfh.js +7 -0
  52. package/bin/vm-hands/{vm-hands-entry-lite-xqve205b.js → vm-hands-entry-lite-bdhjpv7g.js} +2 -2
  53. package/bin/vm-hands/vm-hands-entry-lite-bk6akkdt.js +540 -0
  54. package/bin/vm-hands/vm-hands-entry-lite-ckv17tn8.js +3 -0
  55. package/bin/vm-hands/vm-hands-entry-lite-eqgj4acy.js +112 -0
  56. package/bin/vm-hands/vm-hands-entry-lite-f5e3dbgk.js +4 -0
  57. package/bin/vm-hands/vm-hands-entry-lite-grm1tqs7.js +3 -0
  58. package/bin/vm-hands/vm-hands-entry-lite-gvwdy3rf.js +4 -0
  59. package/bin/vm-hands/vm-hands-entry-lite-hj8n59y9.js +3 -0
  60. package/bin/vm-hands/vm-hands-entry-lite-k278g9kj.js +42 -0
  61. package/bin/vm-hands/{vm-hands-entry-lite-wer0qzxg.js → vm-hands-entry-lite-m11j0f9q.js} +2 -2
  62. package/bin/vm-hands/vm-hands-entry-lite-pgb514h0.js +3 -0
  63. package/bin/vm-hands/vm-hands-entry-lite-pmcz7j7t.js +3 -0
  64. package/bin/vm-hands/vm-hands-entry-lite-q0k6kx6d.js +5 -0
  65. package/bin/vm-hands/vm-hands-entry-lite-qy9xg6em.js +3 -0
  66. package/bin/vm-hands/vm-hands-entry-lite-qysyf65v.js +2 -0
  67. package/bin/vm-hands/vm-hands-entry-lite-r29k28kb.js +14 -0
  68. package/bin/vm-hands/{vm-hands-entry-lite-fbpxs065.js → vm-hands-entry-lite-t7an5zg2.js} +2 -2
  69. package/bin/vm-hands/vm-hands-entry-lite-vrqzr15t.js +3 -0
  70. package/bin/vm-hands/vm-hands-entry-lite-w59z67hf.js +52 -0
  71. package/bin/vm-hands/vm-hands-entry-lite-zg36myyf.js +5 -0
  72. package/bin/vm-hands/vm-hands-entry-lite.js +3 -1
  73. package/bin/vm-hands/vm-hands-executor-rdmj1wv4.js +11 -0
  74. package/bin/vm-hands/vm-hands-op-runner-f2bjvb7v.js +2 -0
  75. package/bin/vm-hands/vm-hands-runtime-aa4p4pqz.js +4 -0
  76. package/bin/vm-hands/worker-sandbox-smqj3mbe.js +2 -0
  77. package/package.json +1 -1
  78. package/bin/vm-hands/api-credentials-4e2gypqj.js +0 -2
  79. package/bin/vm-hands/api-f48wa4ym.js +0 -2
  80. package/bin/vm-hands/ask-relay-jatz6zdz.js +0 -8
  81. package/bin/vm-hands/connect-cli-7jc6q164.js +0 -2
  82. package/bin/vm-hands/custom-endpoint-device-8h95wy87.js +0 -2
  83. package/bin/vm-hands/desktop-account-2kkxwv1y.js +0 -2
  84. package/bin/vm-hands/device-workspace-nzz3kd5t.js +0 -2
  85. package/bin/vm-hands/hands-worker-source-as5wepvk.js +0 -2
  86. package/bin/vm-hands/index-2kk983b8.js +0 -12818
  87. package/bin/vm-hands/install-receipt-e6s355j1.js +0 -2
  88. package/bin/vm-hands/local-automation-c7sk21zn.js +0 -2
  89. package/bin/vm-hands/local-capabilities-dgaqqaw9.js +0 -2
  90. package/bin/vm-hands/local-desktop-users-sevkfkye.js +0 -2
  91. package/bin/vm-hands/local-display-mac-jzc0g5ge.js +0 -2
  92. package/bin/vm-hands/local-display-session-gcndscvj.js +0 -2
  93. package/bin/vm-hands/local-pty-session-fe6jz2zy.js +0 -2
  94. package/bin/vm-hands/managed-runtime-pveke48y.js +0 -2
  95. package/bin/vm-hands/network-contract-9smga6kn.js +0 -2
  96. package/bin/vm-hands/package-qjr5q0bp.js +0 -2
  97. package/bin/vm-hands/permissions-92a6yh7t.js +0 -2
  98. package/bin/vm-hands/reason-hands-protocol-5fhd49en.js +0 -2
  99. package/bin/vm-hands/serve-service-rjbca0dj.js +0 -2
  100. package/bin/vm-hands/status-1tqes7gw.js +0 -96
  101. package/bin/vm-hands/version-8qryvrwt.js +0 -2
  102. package/bin/vm-hands/vm-hands-entry-lite-05qq23fw.js +0 -3
  103. package/bin/vm-hands/vm-hands-entry-lite-1sc3wc94.js +0 -3
  104. package/bin/vm-hands/vm-hands-entry-lite-2nec0vk1.js +0 -3
  105. package/bin/vm-hands/vm-hands-entry-lite-2s9the7x.js +0 -3
  106. package/bin/vm-hands/vm-hands-entry-lite-32ch1nr1.js +0 -346
  107. package/bin/vm-hands/vm-hands-entry-lite-40nkzw38.js +0 -3
  108. package/bin/vm-hands/vm-hands-entry-lite-4bgxq9ps.js +0 -9
  109. package/bin/vm-hands/vm-hands-entry-lite-5rkakg10.js +0 -4
  110. package/bin/vm-hands/vm-hands-entry-lite-69ray4x8.js +0 -6
  111. package/bin/vm-hands/vm-hands-entry-lite-6berk108.js +0 -3
  112. package/bin/vm-hands/vm-hands-entry-lite-72nn2b4n.js +0 -3
  113. package/bin/vm-hands/vm-hands-entry-lite-7k3vp3fe.js +0 -52
  114. package/bin/vm-hands/vm-hands-entry-lite-8f3px72v.js +0 -3
  115. package/bin/vm-hands/vm-hands-entry-lite-8gjrr6hg.js +0 -3
  116. package/bin/vm-hands/vm-hands-entry-lite-8tcnbfnm.js +0 -5
  117. package/bin/vm-hands/vm-hands-entry-lite-9vf97byd.js +0 -4
  118. package/bin/vm-hands/vm-hands-entry-lite-er3nrbb9.js +0 -3
  119. package/bin/vm-hands/vm-hands-entry-lite-f6714myc.js +0 -3
  120. package/bin/vm-hands/vm-hands-entry-lite-g5c9ec33.js +0 -5
  121. package/bin/vm-hands/vm-hands-entry-lite-h0y0xv5f.js +0 -3
  122. package/bin/vm-hands/vm-hands-entry-lite-h9t84ekh.js +0 -3
  123. package/bin/vm-hands/vm-hands-entry-lite-hd4a0a6f.js +0 -112
  124. package/bin/vm-hands/vm-hands-entry-lite-hepppjp0.js +0 -3
  125. package/bin/vm-hands/vm-hands-entry-lite-hye6r7dy.js +0 -3
  126. package/bin/vm-hands/vm-hands-entry-lite-jw5y1aa5.js +0 -3
  127. package/bin/vm-hands/vm-hands-entry-lite-ky0w7t09.js +0 -42
  128. package/bin/vm-hands/vm-hands-entry-lite-mapxp682.js +0 -4
  129. package/bin/vm-hands/vm-hands-entry-lite-mxdztdmq.js +0 -11
  130. package/bin/vm-hands/vm-hands-entry-lite-np1fcr2t.js +0 -5
  131. package/bin/vm-hands/vm-hands-entry-lite-nqvb7a2m.js +0 -3
  132. package/bin/vm-hands/vm-hands-entry-lite-q4tcfj61.js +0 -3
  133. package/bin/vm-hands/vm-hands-entry-lite-q590arx5.js +0 -251
  134. package/bin/vm-hands/vm-hands-entry-lite-r2xmr627.js +0 -4
  135. package/bin/vm-hands/vm-hands-entry-lite-r6f6qkw6.js +0 -105
  136. package/bin/vm-hands/vm-hands-entry-lite-swwb5mp2.js +0 -3
  137. package/bin/vm-hands/vm-hands-entry-lite-tkb2b6x8.js +0 -540
  138. package/bin/vm-hands/vm-hands-entry-lite-va3vbvsk.js +0 -458
  139. package/bin/vm-hands/vm-hands-entry-lite-vr38bh6k.js +0 -66
  140. package/bin/vm-hands/vm-hands-entry-lite-wa261sf8.js +0 -3
  141. package/bin/vm-hands/vm-hands-entry-lite-yg5h9mhm.js +0 -7
  142. package/bin/vm-hands/vm-hands-entry-lite-yqrmr2c8.js +0 -5
  143. package/bin/vm-hands/vm-hands-executor-etthkykm.js +0 -11
  144. package/bin/vm-hands/vm-hands-op-runner-bbp6fzn2.js +0 -2
  145. package/bin/vm-hands/vm-hands-runtime-2x1ryrxr.js +0 -4
  146. package/bin/vm-hands/worker-sandbox-p242st5d.js +0 -2
@@ -1,458 +0,0 @@
1
- // @bun
2
- import{Jc as uZ,Kc as lZ,Lc as T4,Mc as O4,Nc as j8,Oc as sZ}from"./vm-hands-entry-lite-69ray4x8.js";import{$c as F0,Pc as mZ,Qc as W8,Rc as e9,Sc as _0,Tc as q9,Uc as a0}from"./vm-hands-entry-lite-jcd21jpm.js";import{cd as L8,dd as B8,ed as oQ}from"./vm-hands-entry-lite-5rkakg10.js";import{Ee as MZ,Je as jZ,rf as y9,sf as t0,tf as O8,uf as m0,yf as C0}from"./vm-hands-entry-lite-ky0w7t09.js";import{Qg as oZ,Wg as Z8,Xg as n8}from"./vm-hands-entry-lite-yqrmr2c8.js";import{ah as q4}from"./vm-hands-entry-lite-9vf97byd.js";import{Ah as o9,Jh as h8,Kh as w0,Lh as O0,Mh as r9,Th as p8,Uh as OZ,Vh as WZ,dh as wQ,gh as j9,ph as qZ,qh as CZ,sh as TZ,uh as a9,vh as VZ,wh as HZ,xh as v8}from"./vm-hands-entry-lite-mapxp682.js";import{Ei as tZ,Fi as o8}from"./vm-hands-entry-lite-q4tcfj61.js";import{ej as b0}from"./vm-hands-entry-lite-8f3px72v.js";import{Bj as j4,xj as A8,yj as t9}from"./vm-hands-entry-lite-hye6r7dy.js";import{Cj as D8,Dj as o0,Ej as _8,Fj as r0,Gj as B9,Hj as H8,Ij as W$,Jj as i0,Kj as u0,Lj as FZ,Wj as A$}from"./vm-hands-entry-lite-6berk108.js";import{$j as OQ}from"./vm-hands-entry-lite-05qq23fw.js";import{uk as x}from"./vm-hands-entry-lite-vr38bh6k.js";import{Ak as C4}from"./vm-hands-entry-lite-r2xmr627.js";import{Dk as N4,Fk as $8,Gk as DZ,Hk as p$,Ik as _Z,Jk as p9,Mk as M4,Nk as Y9}from"./vm-hands-entry-lite-8gjrr6hg.js";import{Rk as q}from"./vm-hands-entry-lite-40nkzw38.js";import{Sk as l1,Xk as CQ}from"./vm-hands-entry-lite-72nn2b4n.js";import{execFile as k4}from"child_process";import{createRequire as f4}from"module";import{win32 as u9}from"path";var m4=250,y4=50,g4=250,h4=4194304;function c$($){let Z=/^(?:\[([^\]]+)\]|([^:]+)):([0-9]{1,5})$/.exec($??""),Q=Number(Z?.[3]);return Z&&Q<=65535?{address:Z[1]??Z[2],port:Q}:null}function v4($){let Z=[];for(let Q of $.split(/\r?\n/)){let X=Q.trim().split(/\s+/);if(X[0]!=="TCP"||X.length<5)continue;let J=c$(X[1]),Y=c$(X[2]),z=Number(X.at(-1));if(!J||!Y||!Number.isSafeInteger(z)||z<0)continue;Z.push({pid:z,localAddress:J.address,localPort:J.port,remoteAddress:Y.address,remotePort:Y.port,listening:Y.port===0})}return Z}function c4($){if($.localAddress==="0.0.0.0"||$.localAddress==="::")return`*:${$.localPort}`;return $.localAddress.includes(":")?`[${$.localAddress}]:${$.localPort}`:`${$.localAddress}:${$.localPort}`}var w8=($)=>new Promise((Z,Q)=>k4(u9.join(p$("win32").split(";")[0],"NETSTAT.EXE"),["-ano"],{timeout:$,maxBuffer:h4,encoding:"utf8",windowsHide:!0,env:p9()},(X,J)=>X?Q(X):Z(J)));function _9($){let Z=u9.normalize($.startsWith("\\\\?\\")?$.slice(4):$);return Z.length>3&&Z.endsWith("\\")?Z.slice(0,-1):Z}function d4($,Z){let Q=$.toLowerCase(),X=Z.toLowerCase();return X===Q||X.startsWith(Q.endsWith("\\")?Q:`${Q}\\`)}function u$($,Z,Q){let X=$.cwd(Q),J=X?_9(X):null;return J&&u9.isAbsolute(J)&&d4(Z,J)?J:null}var D9;function l9(){if(D9!==void 0)return D9;if(D9=null,process.platform!=="win32"||!["x64","arm64"].includes(process.arch))return null;let $;try{$=f4(import.meta.url)("bun:ffi")}catch{return null}let{FFIType:Z,ptr:Q}=$,X,J;try{X=$.dlopen("kernel32.dll",{CreateToolhelp32Snapshot:{args:[Z.u32,Z.u32],returns:Z.u64},Process32FirstW:{args:[Z.u64,Z.ptr],returns:Z.i32},Process32NextW:{args:[Z.u64,Z.ptr],returns:Z.i32},OpenProcess:{args:[Z.u32,Z.i32,Z.u32],returns:Z.u64},ReadProcessMemory:{args:[Z.u64,Z.u64,Z.ptr,Z.u64,Z.ptr],returns:Z.i32},CloseHandle:{args:[Z.u64],returns:Z.i32}}).symbols,J=$.dlopen("ntdll.dll",{NtQueryInformationProcess:{args:[Z.u64,Z.i32,Z.ptr,Z.u32,Z.ptr],returns:Z.i32}}).symbols}catch{return null}let Y=0xFFFF_FFFF_FFFF_FFFFn,z=2,F=1040,G=568,V=(B,H,K)=>{let L=Buffer.alloc(K);return X.ReadProcessMemory(B,H,Q(L),K,null)?L:null};return D9={processes(){let B=BigInt(X.CreateToolhelp32Snapshot(z,0));if(B===Y)throw new q("process_inspection_failed","Reading this computer's processes did not complete.");try{let H=Buffer.alloc(G);H.writeUInt32LE(G,0);let K=Q(H),L=[];for(let U=X.Process32FirstW(B,K);U;U=X.Process32NextW(B,K)){let W=H.toString("utf16le",44,G),j=W.slice(0,W.includes("\x00")?W.indexOf("\x00"):void 0),O=H.readUInt32LE(8);if(O>0)L.push({pid:O,parentPid:H.readUInt32LE(32),command:j.replace(/\.exe$/i,"")||null})}return L}finally{X.CloseHandle(B)}},cwd(B){let H=BigInt(X.OpenProcess(F,0,B));if(H===0n)return null;try{let K=Buffer.alloc(48);if(J.NtQueryInformationProcess(H,0,Q(K),K.length,null)!==0)return null;let L=V(H,K.readBigUInt64LE(8)+0x20n,8)?.readBigUInt64LE(0),U=L?V(H,L+0x38n,16):null,W=U?.readUInt16LE(0)??0;if(!U||W===0||W%2!==0)return null;return V(H,U.readBigUInt64LE(8),W)?.toString("utf16le")??null}finally{X.CloseHandle(H)}}},D9}function b8($){if(!$)throw new q("process_inspection_failed","Reading this computer's processes is unavailable.");return $}async function l$($,Z){let Q;try{Q=await $(Z)}catch{throw new q("process_inspection_failed","Reading this computer's ports did not complete.")}return v4(Q)}async function A2($,Z=l9()){let Q=b8(Z),X=_9($),J=[];for(let Y of Q.processes()){if(J.length>=m4)break;let z=u$(Q,X,Y.pid);if(z)J.push({pid:Y.pid,command:Y.command,cwd:u9.relative(X,z)||"."})}return{processes:J}}async function x2($,Z=l9(),Q=w8){let X=b8(Z),J=_9($),Y=(await l$(Q,5000)).filter((V)=>V.listening&&V.pid>0).map((V)=>({pid:V.pid,port:V.localPort,address:c4(V)})).sort((V,B)=>V.pid-B.pid||V.port-B.port||(V.address<B.address?-1:V.address>B.address?1:0)),z=[...new Set(Y.map((V)=>V.pid))].slice(0,y4),F=new Set(z.filter((V)=>u$(X,J,V)!==null));if(F.size===0)return{ports:[]};let G=new Map(X.processes().map((V)=>[V.pid,V.command]));return{ports:Y.filter((V)=>F.has(V.pid)).slice(0,g4).map((V)=>({pid:V.pid,command:G.get(V.pid)??null,address:V.address}))}}function d$($,Z){let Q=new Set([Z]);for(let X=!0;X;){X=!1;for(let J of $)if(!Q.has(J.pid)&&Q.has(J.parentPid)&&J.pid!==J.parentPid)Q.add(J.pid),X=!0}return Q}function p4($,Z,Q,X){let J=(Y)=>Y==="127.0.0.1"||Y==="::ffff:127.0.0.1"||Y==="::1";return $.flatMap((Y)=>{if(!Z.has(Y.pid)||Y.localPort!==X)return[];let z=Y.listening&&(J(Y.localAddress)||["0.0.0.0","::"].includes(Y.localAddress)),F=!Y.listening&&J(Y.localAddress)&&J(Y.remoteAddress);if(!z&&!F)return[];let G=`${Y.localAddress}:${Y.localPort}>${Y.remoteAddress}:${Y.remotePort}`;return[{pid:Y.pid,processGroupId:Q,descriptor:String(Y.pid),kernelId:G,state:z?"listen":"established",port:X,peerPort:z?null:Y.remotePort,host:Y.localAddress==="::1"?"::1":"127.0.0.1"}]})}async function s$($,Z,Q=l9(),X=w8){let J=b8(Q),Y=d$(J.processes(),$),z=await l$(X,1000),F=d$(J.processes(),$);return p4(z,new Set([...Y].filter((G)=>F.has(G))),$,Z)}async function I2($,Z=l9(),Q=w8){if(!Z||$.aborted)return!1;let X=Z.processes().some((F)=>F.pid===process.pid),J=Z.cwd(process.pid),Y=J!==null&&_9(J).toLowerCase()===_9(process.cwd()).toLowerCase(),z=await Q(5000).then((F)=>/^\s*TCP\s/m.test(F),()=>!1);return X&&Y&&z&&!$.aborted}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 s9($){return $!==null&&typeof $==="object"&&!Array.isArray($)}function P0($,Z,Q=Number.MAX_SAFE_INTEGER){return typeof $==="number"&&Number.isSafeInteger($)&&$>=Z&&$<=Q}function i$($){return typeof $==="string"&&/^[a-zA-Z0-9_-]{1,160}$/.test($)}function a$($,Z){let Q=Buffer.from($,"latin1");return Buffer.concat([Buffer.from([Q.length]),Q,Z])}function R0($){if(!s9($)||Object.keys($).length!==12||![$.organizationId,$.userId,$.runId,$.deviceId,$.rootId,$.jobId,$.fenceId].every(i$)||!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 d0($,Z){return Object.keys($).every((Q)=>$[Q]===Z[Q])}function x9($){if($.length>4096||!$.startsWith("/")||$.startsWith("//")||/[\\\x00-\x20\x7f#]/.test($))throw Error("preview_path_invalid");let Z=decodeURIComponent($);if(Z.startsWith("//")||/[\\\x00-\x1f\x7f]/.test(Z))throw Error("preview_path_invalid");return $}function n$($){return Array.isArray($)&&$.length<=64&&$.every((Z)=>Array.isArray(Z)&&Z.length===2&&typeof Z[0]==="string"&&/^[a-zA-Z0-9-]{1,80}$/.test(Z[0])&&typeof Z[1]==="string"&&Z[1].length<=4096&&!/[\x00-\x1f\x7f]/.test(Z[1]))}function A9($,Z=v.chunk){if($.length>Math.ceil(Z/3)*4||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test($))throw Error("preview_data_invalid");let Q=Buffer.from($,"base64");if(Q.length>Z)throw Error("preview_data_too_large");return Q}function o$($){if(Array.isArray($))return Buffer.concat($);if(typeof $==="string")return Buffer.from($,"utf8");if($ instanceof ArrayBuffer)return Buffer.from($);return $}function r$($){if(Buffer.byteLength($)>v.upload*1.4+300000)throw Error("preview_frame_too_large");let Z=JSON.parse($);if(!s9(Z))throw Error("preview_frame_invalid");if(Z.type==="hello")return{type:"hello",binding:R0(Z.binding),...P0(Z.messages,v.chunk,v.upload)?{messages:Z.messages}:{},...P0(Z.window,1,v.window)?{window:Z.window}:{},...Z.bytes===!0?{bytes:!0}:{}};if(Z.type==="refused"&&typeof Z.reason==="string"&&/^[a-z_]{1,32}$/.test(Z.reason))return{type:"refused",binding:R0(Z.binding),reason:Z.reason};if(!i$(Z.id))throw Error("preview_frame_invalid");if(Z.type==="end"||Z.type==="cancel"||Z.type==="credit")return{type:Z.type,id:Z.id};if(Z.type==="ws"&&typeof Z.protocol==="string"&&/^[a-zA-Z0-9._-]{0,100}$/.test(Z.protocol))return{type:"ws",id:Z.id,protocol:Z.protocol};if(Z.type==="data"&&typeof Z.data==="string"&&typeof Z.binary==="boolean")return A9(Z.data,v.upload),{type:"data",id:Z.id,data:Z.data,binary:Z.binary};if(Z.type==="head"&&P0(Z.status,200,599)&&n$(Z.headers))return{type:"head",id:Z.id,status:Z.status,headers:Z.headers};if(Z.type==="request"&&typeof Z.method==="string"&&/^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS)$/.test(Z.method)&&typeof Z.path==="string"&&n$(Z.headers)&&typeof Z.body==="string"&&typeof Z.upgrade==="boolean")return A9(Z.body,v.upload),{type:"request",id:Z.id,method:Z.method,path:x9(Z.path),headers:Z.headers,body:Z.body,upgrade:Z.upgrade};throw Error("preview_frame_invalid")}function k8($){let Z=[...$],Q=new Set(Z.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 Z.filter(([J])=>!X.has(J.toLowerCase())&&!Q.has(J.toLowerCase())&&!/^(x-forwarded-|x-ara-|sec-websocket-|access-control-)/i.test(J))}async function f8($){let Z;try{return await Promise.race([Promise.resolve().then($).then((Q)=>Q===!0||(Q===!1?!1:void 0),()=>{return}),new Promise((Q)=>{Z=setTimeout(()=>Q(void 0),v.authorizationMs)})])}finally{clearTimeout(Z)}}async function I9($){return await f8($)===!0}function n9($,Z){let Q=new URL($);if(Q.username||Q.password||Q.search||Q.hash||!(Q.protocol==="wss:"||Q.protocol==="ws:"&&["127.0.0.1","[::1]"].includes(Q.hostname))||!new RegExp(`^/${Z}/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]{32,}$`).test(Q.pathname))throw Error("preview_relay_invalid");return Q.href}function t$($){if(!s9($)||Object.keys($).length!==2||typeof $.deviceRelayUrl!=="string")throw Error("preview_open_invalid");return{binding:R0($.binding),deviceRelayUrl:n9($.deviceRelayUrl,"device")}}function e$($){if(!s9($)||Object.keys($).length!==1||!("binding"in $))throw Error("preview_close_invalid");return{binding:R0($.binding)}}import{request as n4}from"http";import{pipeline as i4}from"stream";import{constants as m8,createBrotliCompress as a4,createGzip as o4}from"zlib";import{WebSocket as P9}from"ws";import{randomBytes as u4,timingSafeEqual as l4}from"crypto";import{createServer as s4}from"net";var $Z="x-preview-connection";async function ZZ($,Z){if(Z.aborted)throw Error("preview_closed");let Q=u4(32).toString("base64url"),X=new Set,J=!1,Y=s4((G)=>{if(J||Z.aborted||X.size>=v.streams*2)return G.destroy();X.add(G);let V=new AbortController;G.once("close",()=>{X.delete(G),V.abort()}),G.on("error",()=>G.destroy()),G.setTimeout(2000,()=>G.destroy());let B=Buffer.alloc(0),H=(L)=>{B=Buffer.concat([B,L]);let U=B.indexOf(`\r
3
- \r
4
- `);if(U<0){if(B.length>16384)G.destroy();return}if(G.pause(),G.off("data",H),U>16384||B.length>v.upload+16384)return G.destroy();K(B,U).catch(()=>G.destroy())};G.on("data",H);async function K(L,U){let W=L.subarray(0,U).toString("latin1").split(`\r
5
- `),j=/^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS) (\S+) HTTP\/1\.1$/.exec(W.shift()??"");if(!j)throw Error("preview_request_invalid");x9(j[2]);let O=!1,C=0,A=[];for(let T of W){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()===$Z){C++;let y=Buffer.from(S[2].trim());O=y.length===Q.length&&l4(y,Buffer.from(Q))}else if(S[1].toLowerCase()!=="host")A.push(T)}if(!O||C!==1||J||V.signal.aborted)throw Error("preview_connection_denied");let R=await $.connect(V.signal);if(J||V.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 I=[`${j[1]} ${j[2]} HTTP/1.1`,`Host: 127.0.0.1:${R.remotePort}`,...A,"",""].join(`\r
6
- `);R.write(Buffer.concat([Buffer.from(I,"latin1"),L.subarray(U+4)])),R.pipe(G),G.pipe(R),G.resume()}});await new Promise((G,V)=>{Y.once("error",V),Y.listen(0,"127.0.0.1",G)});let z=Y.address();if(!z||typeof z==="string")throw Y.close(),Error("preview_bind_failed");function F(){if(J)return;J=!0,Z.removeEventListener("abort",F);for(let G of X)G.destroy();X.clear(),Y.close()}if(Z.addEventListener("abort",F,{once:!0}),Z.aborted)F();return{port:z.port,headers:{[$Z]:Q},close:F}}var r4=60000,t4=1e4,e4=5000,$3=/^(?:text\/(?!event-stream)|application\/(?:(?:x-)?javascript|json|[a-z.+-]*\+json|xml|[a-z.+-]*\+xml|wasm)|image\/svg\+xml)/i;function Z3($,Z,Q,X){let J=(G)=>Z.find(([V])=>V.toLowerCase()===G)?.[1],Y=(G)=>X.find(([V])=>V.toLowerCase()===G)?.[1],z=Number(Y("content-length")??Number.NaN);if($!=="GET"||Q!==200||J("range")!==void 0||Y("content-encoding")!==void 0||!$3.test(Y("content-type")??"")||/\bno-transform\b/i.test(Y("cache-control")??"")||z<1024)return null;let F=(G)=>new RegExp(`(?:^|,)\\s*${G}\\s*(?:,|$|;\\s*q=(?:1|0?\\.0*[1-9]))`,"i").test(J("accept-encoding")??"");return F("br")?"br":F("gzip")?"gzip":null}function Q3($,Z){let Q=$.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",Z],["Vary",Q.split(",").some((X)=>/^\s*(?:accept-encoding|\*)\s*$/i.test(X))?Q:Q?`${Q}, Accept-Encoding`:"Accept-Encoding"]]}async function X3($){process.stderr.write(`${JSON.stringify({event:"worker_preview.open_refused",job_id:$.jobId,port:$.port,reason_code:$.reason})}
7
- `);let Z=$.binding,Q;try{Q=n9($.deviceRelayUrl,"device")}catch{return}if(!Z)return;await new Promise((X)=>{let J=new P9(Q,{followRedirects:!1,perMessageDeflate:!1,maxPayload:4096}),Y=setTimeout(()=>{J.terminate(),X()},v.authorizationMs*2);J.addEventListener("open",()=>{J.send(JSON.stringify({type:"refused",binding:Z,reason:$.reason})),J.close(1000,`worker_refused_${$.reason}`)}),J.addEventListener("error",()=>{clearTimeout(Y),X()}),J.addEventListener("close",()=>{clearTimeout(Y),X()})})}async function J3($,Z){let Q=Date.now()+t4,X;for(;;){if(!Z())return"closed";let J=X??=$.refusal().finally(()=>{X=void 0}),Y,z=await Promise.race([J.catch(()=>"port_unproved"),new Promise((F)=>{Y=setTimeout(()=>F("port_check_timeout"),v.authorizationMs)})]).finally(()=>clearTimeout(Y));if(z===null)return null;if(!["listener_unproved","port_check_timeout"].includes(z)||Date.now()+500>=Q)return z;await new Promise((F)=>setTimeout(F,500))}}async function QZ($){let Z=R0($.binding),Q=()=>!$.signal.aborted&&Date.now()<Z.expiresAtMs,X=Z.expiresAtMs>Date.now()+v.lifetimeMs+e4?"binding_mismatch":await J3($.port,Q);if(X)throw await X3({deviceRelayUrl:$.deviceRelayUrl,binding:Z,jobId:Z.jobId,port:Z.port,reason:X}),Error("preview_not_authorized",{cause:X});let J=n9($.deviceRelayUrl,"device"),Y=await ZZ($.port,$.signal),z;try{z=new P9(J,{followRedirects:!1,perMessageDeflate:!1,maxPayload:v.upload*1.4+300000})}catch(N){throw Y.close(),N}let F=new Map,G=!1,V=!1,B=0,H=!1,K,L,U,W=new Promise((N)=>{U=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),!Q()||V||z.readyState!==P9.OPEN)return I(Q()?"relay_closed":"expired");if(z.bufferedAmount>v.relayBuffered)return I("relay_backlog");if(B>v.total)return I("quota");z.send(M)};function I(N="closed"){if(V)return;V=!0,clearInterval(y),clearTimeout(S),$.signal.removeEventListener("abort",T);for(let M of F.values())M.stop();F.clear(),Y.close(),z.close(1000,`worker_${N}`),O(Error("preview_closed")),U()}let T=()=>I("aborted"),S=setTimeout(()=>I("pair_timeout"),v.requestMs),y=setInterval(async()=>{if(!Q())return I($.signal.aborted?"aborted":"expired");if(H)return;H=!0;try{let N=K??=Promise.resolve().then(()=>$.port.check()).finally(()=>{K=void 0}),M=await f8(()=>N);if(M===!1)return I("port_refused");if(M){L=void 0;return}if(Date.now()-(L??=Date.now())>r4)return I("port_unknown");for(let D of F.values())D.stop()}finally{H=!1}},1000);if($.signal.addEventListener("abort",T,{once:!0}),!Q())I($.signal.aborted?"aborted":"expired");z.addEventListener("open",()=>R({type:"hello",binding:Z,messages:v.upload,window:v.window})),z.addEventListener("close",()=>I("relay_closed")),z.addEventListener("error",()=>I("relay_error")),z.addEventListener("message",(N)=>{try{if(!Q()||V)return I($.signal.aborted?"aborted":"expired");if(typeof N.data!=="string")throw Error("preview_frame_invalid");if(B+=Buffer.byteLength(N.data),B>v.total)return I("quota");let M=r$(N.data);if(!G){if(M.type!=="hello"||!d0(Z,M.binding))return I("binding_mismatch");G=!0,A=M.bytes===!0,clearTimeout(S),j();return}if(M.type==="hello"||M.type==="refused")return I("invalid_frame");if(M.type==="request"){E(M).catch(()=>I("invalid_request"));return}let D=F.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!==P9.OPEN||D.ws.bufferedAmount>v.buffered)return D.stop();let w=A9(M.data,v.upload);D.ws.send(M.binary?w:w.toString("utf8"))}else I("invalid_frame")}catch{I("invalid_frame")}});async function E(N){if(F.has(N.id)||F.size>=v.streams)return I("stream_limit");if(!Q())return I($.signal.aborted?"aborted":"expired");let M=new AbortController,D,w,k,m=0,_=(b=!1)=>{if(!F.delete(N.id))return;clearTimeout(D),M.abort(),w?.close(1000,"preview_closed"),k?.(),R({type:b?"end":"cancel",id:N.id})},g={stop:()=>_(),credit:()=>{m++,k?.()}};if(F.set(N.id,g),D=setTimeout(_,v.requestMs),!await I9(()=>$.port.check())||!Q()||M.signal.aborted)return _();let c=x9(N.path);if(N.upgrade){if(N.method!=="GET"||N.body)return _();let b=N.headers.find(([h])=>h.toLowerCase()==="sec-websocket-protocol")?.[1].split(",").map((h)=>h.trim());if(b?.some((h)=>!/^[a-zA-Z0-9._-]{1,100}$/.test(h))||(b?.length??0)>8)return _();w=new P9(`ws://127.0.0.1:${Y.port}${c}`,b,{headers:Y.headers,followRedirects:!1,perMessageDeflate:!1,maxPayload:v.upload}),g.ws=w,w.binaryType="arraybuffer",w.addEventListener("open",()=>{clearTimeout(D),R({type:"ws",id:N.id,protocol:w.protocol})}),w.addEventListener("message",(h)=>{let d=typeof h.data!=="string",n=o$(h.data);if(n.length>v.upload)return _();R({type:"data",id:N.id,data:n.toString("base64"),binary:d})}),w.addEventListener("error",()=>_()),w.addEventListener("close",(h)=>_(h.wasClean));return}let u=A9(N.body,v.upload),r=n4({hostname:"127.0.0.1",port:Y.port,path:c,method:N.method,headers:{...Object.fromEntries(k8(N.headers)),...Y.headers,connection:"close"},signal:M.signal,agent:!1,maxHeaderSize:16384},async(b)=>{try{let h=[];for(let M0=0;M0<b.rawHeaders.length;M0+=2)h.push([b.rawHeaders[M0],b.rawHeaders[M0+1]]);let d=b.statusCode??502,n=Z3(N.method,N.headers,d,h),z0=n==="br"?a4({flush:m8.BROTLI_OPERATION_FLUSH,params:{[m8.BROTLI_PARAM_QUALITY]:5}}):n==="gzip"?o4({level:6,flush:m8.Z_SYNC_FLUSH}):void 0;if(R({type:"head",id:N.id,status:d,headers:k8(n?Q3(h,n):h)}),clearTimeout(D),z0)i4(b,z0,()=>{});for await(let M0 of z0??b){let W0=Buffer.from(M0);for(let U0=0;U0<W0.length;U0+=v.chunk){if(m===0&&!M.signal.aborted)await new Promise((T0)=>{k=T0});if(k=void 0,M.signal.aborted)return;m--;let g0=W0.subarray(U0,U0+v.chunk);R(A?a$(N.id,g0):{type:"data",id:N.id,data:g0.toString("base64"),binary:!0})}}_(!0)}catch{_()}});r.on("error",()=>_()),r.end(u)}return await C,{close:I,closed:W}}import{execFile as Y3}from"child_process";import{readFile as G3,readdir as z3,readlink as K3}from"fs/promises";import{connect as F3}from"net";import{setTimeout as V3}from"timers/promises";var H3={directory:z3,text:($)=>G3($,"utf8"),link:K3};class y8 extends Error{code;constructor($="port_unproved"){super("preview_port_ownership_unproved");this.code=$}}var $0=($)=>new y8($),i9="preview_listener_unproved",XZ="00000000000000000000000001000000";async function W3($,Z,Q=H3){let X=new Map;for(let z of["tcp","tcp6"]){let F=await Q.text(`/proc/net/${z}`);if(F.length>4194304)throw $0();for(let G of F.split(`
8
- `).slice(1)){let V=G.trim().split(/\s+/);if(V.length<10||!["0A","01"].includes(V[3]))continue;let[B,H]=V[1].split(":"),[K,L]=V[2].split(":");if(Number.parseInt(H,16)!==Z)continue;let U=(O)=>O==="0100007F"||O==="0000000000000000FFFF00000100007F"||O===XZ,W=V[3]==="0A";if(!(U(B)||W&&/^0+$/.test(B??"")))continue;if(!W&&!U(K))continue;let j=V[9];if(!/^[1-9][0-9]*$/.test(j))continue;X.set(j,{kernelId:j,port:Z,peerPort:W?null:Number.parseInt(L,16),state:W?"listen":"established",host:B===XZ?"::1":"127.0.0.1"})}}let J=await Q.directory("/proc");if(J.length>8192)throw $0();let Y=[];for(let z of J){if(!/^[1-9][0-9]*$/.test(z))continue;try{let F=await Q.text(`/proc/${z}/stat`),G=F.slice(F.lastIndexOf(")")+2).trim().split(/\s+/);if(Number(G[2])!==$)continue;let V=await Q.directory(`/proc/${z}/fd`);if(V.length>1024)throw $0();let B=[];for(let L of V){if(!/^[0-9]+$/.test(L))continue;let U=await Q.link(`/proc/${z}/fd/${L}`).catch(()=>""),W=/^socket:\[([0-9]+)\]$/.exec(U)?.[1],j=W?X.get(W):void 0;if(j)B.push({...j,pid:Number(z),processGroupId:$,descriptor:L})}let H=await Q.text(`/proc/${z}/stat`),K=H.slice(H.lastIndexOf(")")+2).trim().split(/\s+/);if(G[19]===K[19]&&G[2]===K[2])Y.push(...B)}catch(F){if(F instanceof Error&&F.message==="preview_port_ownership_unproved")throw F}}return Y}function U3($,Z,Q){if($.length>2097152)throw $0();let X=0,J=0,Y="",z="",F="",G="",V=[],B=()=>{if(X<1||J!==Z||!/^\d+$/.test(Y)||!/^0x[0-9a-f]+$/i.test(z))return;let H=G==="LISTEN"&&["*","127.0.0.1","[::ffff:127.0.0.1]","[::1]"].some((L)=>F===`${L}:${Q}`),K=new RegExp(`^(?:127\\.0\\.0\\.1|\\[::ffff:127\\.0\\.0\\.1\\]|\\[::1\\]):${Q}->(?:127\\.0\\.0\\.1|\\[::ffff:127\\.0\\.0\\.1\\]|\\[::1\\]):([0-9]+)$`).exec(F);if(H||G==="ESTABLISHED"&&K)V.push({pid:X,processGroupId:J,descriptor:Y,kernelId:z,state:H?"listen":"established",port:Q,peerPort:H?null:Number(K[1]),host:F.startsWith("[::1]:")?"::1":"127.0.0.1"})};for(let H of $.split(/[\0\n]/)){let K=H.slice(1);if(H[0]==="p")B(),X=Number(K),J=0,Y=z=F=G="";else if(H[0]==="g")J=Number(K);else if(H[0]==="f")B(),Y=K,z=F=G="";else if(H[0]==="d")z=K;else if(H[0]==="n")F=K;else if(H.startsWith("TST="))G=H.slice(4)}return B(),V}async function B3($,Z){if(process.platform==="linux")return W3($,Z);if(process.platform==="win32")return s$($,Z);if(process.platform!=="darwin")throw $0();let Q=await new Promise((X,J)=>Y3("/usr/sbin/lsof",["-nP","-a","-g",String($),`-iTCP:${Z}`,"-F0pgfdnT"],{timeout:1000,maxBuffer:2097152,encoding:"utf8",env:{PATH:"/usr/bin:/bin",LC_ALL:"C"}},(Y,z)=>Y?J($0()):X(z)));return U3(Q,$,Z)}function JZ($,Z={}){let Q=R0($.binding),X=Z.inspectSockets??B3,J=Z.monotonicNow??(()=>performance.now());async function Y(){let K=()=>{if(Date.now()>=Q.expiresAtMs)throw $0("binding_expired");if($.deniedPorts.has(Q.port))throw $0("port_denied")};K();let L=await $.readCurrentJob(),U=L?.job,W=U?.process;if(K(),!L)throw $0("server_stopped");if(!d0(Q,L.binding)||U?.jobId!==Q.jobId)throw $0("binding_changed");if(U.state!=="running"||U.finishedAtMs!==null||U.leaseExpiresAtMs<Q.expiresAtMs)throw $0("job_not_running");if(!W||W.pid<1||W.pid!==W.processGroupId||W.executorLaunchId!==L.executorLaunchId)throw $0("process_unproved");return{pid:W.pid,launch:W.executorLaunchId,started:U.startedAtMs}}let z,F;async function G(){let K=await Y(),L=await X(K.pid,Q.port).catch(()=>{throw Error(i9)}),U=await Y();if(K.pid!==U.pid||K.launch!==U.launch||K.started!==U.started)throw $0("job_restarted");return L}async function V(K){for(;;){if(F&&F.startedAt>=K)return F.sockets;if(z&&z.startedAt>=K)return await z.sockets;if(z){await z.sockets.catch(()=>{});continue}let L={startedAt:J(),sockets:G()};z=L;try{let U=await L.sockets;if(!F||F.startedAt<=L.startedAt)F={startedAt:L.startedAt,sockets:U};return U}finally{if(z===L)z=void 0}}}async function B(K=()=>{},L=J()){K();let U=await V(L);if(K(),Date.now()>=Q.expiresAtMs)throw $0("binding_expired");if(!U.some((W)=>W.state==="listen"))throw Error(i9);return U}async function H(){try{return await B(()=>{},J()-1000),null}catch(K){if(K instanceof Error&&K.message===i9)return"listener_unproved";return K instanceof y8?K.code:"port_unproved"}}return{refusal:H,async check(){let K=await H();if(K==="listener_unproved")throw Error(i9);return K===null},async connect(K){if(K.aborted)throw $0();let L=J()+2000,U=new AbortController,W=new Promise((I)=>U.signal.addEventListener("abort",()=>I(null),{once:!0})),j,O=()=>{U.abort(),j?.destroy()},C=setTimeout(O,2000);K.addEventListener("abort",O,{once:!0});let A=()=>{if(U.signal.aborted||K.aborted||J()>=L||j?.destroyed)throw O(),$0()};async function R(I){A();let T=await Promise.race([I().then((S)=>({value:S})),W]);if(A(),!T)throw $0();return T.value}try{let I=await R(()=>B(A,J()-1000));A();let T=I.some((N)=>N.state==="listen"&&N.host==="127.0.0.1")?"127.0.0.1":"::1",S=F3({host:T,port:Q.port,signal:K});j=S,S.once("close",O),await R(()=>new Promise((N,M)=>{S.once("connect",N),S.once("error",M)}));let y=S.localPort;if(!y)throw $0();let E=J();while(!(await R(()=>B(A,E))).some((N)=>N.state==="established"&&N.peerPort===y))await R(()=>V3(Math.min(20,Math.max(1,L-J())),void 0,{signal:U.signal})),E=J();return A(),S}catch(I){throw O(),I}finally{clearTimeout(C),K.removeEventListener("abort",O),j?.off("close",O),U.abort()}}}}var L3=4,N3=[2375,2376,9222,9229];function YZ($){let Z=new Set(N3);for(let Q of $){let X=new URL(Q);Z.add(Number(X.port||(["https:","wss:"].includes(X.protocol)?443:80)))}return Z}function E0(){throw new q("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var M3=60000;function GZ($){let Z=new AbortController,Q=new Map,X=(G)=>JSON.stringify([G.jobId,G.port]);function J(G){let V=$.authority.owner;if(Z.signal.aborted||!$.isCurrent()||$.expiresAtMs<=Date.now()||G.organization_id!==V.organization_id||G.user_id!==V.user_id||G.device_id!==V.device_id)E0()}function Y(G){let V;try{V=$.environment.current()}catch{return null}return V.binding.target_generation===G.generation&&V.binding.target_fence_id===G.fenceId&&V.run_id===$.runId&&V.device_id===$.authority.owner.device_id&&V.root_id===$.authority.rootId?V:null}async function z(G,V,B){let H=await F(G,V,B);if(H!=="moved")return H;let K=await F(G,V,B);return K==="moved"?null:K}async function F(G,V,B){try{J($.authority.owner);let H=$.identity();if(!H||B.aborted||G.expiresAtMs<=Date.now()||G.expiresAtMs>$.expiresAtMs)return null;let K=V.opened,L=K!==void 0&&H.generation>K.generation,U=Y(H);if(L){if(U){if(U.revision<=K.revision||G.expiresAtMs>Date.parse(U.expires_at)||U.binding.target_revision!==K.attachmentRevision||U.binding.root_grant_revision!==K.grantRevision)return null;V.recoveringSinceMs=void 0}else if(Date.now()-(V.recoveringSinceMs??=Date.now())>M3)return null}else if(!U||G.expiresAtMs>Date.parse(U.expires_at)||K&&(H.generation!==K.generation||H.fenceId!==K.fenceId))return null;let W=await $.inspect(G.jobId,B),j=$.identity(),O=j&&Y(j);J($.authority.owner);let C=U&&{generation:H.generation,fenceId:H.fenceId,snapshotId:U.snapshot_id,revision:U.revision,attachmentRevision:U.binding.target_revision,grantRevision:U.binding.root_grant_revision},A=L?K:C;if(B.aborted||!j)return null;if(j.generation!==H.generation||j.fenceId!==H.fenceId||O?.snapshot_id!==U?.snapshot_id||O?.revision!==U?.revision)return"moved";let R=W.ok&&W.job.environmentSnapshotId!==void 0&&W.job.environmentRevision!==void 0?{snapshotId:W.job.environmentSnapshotId,revision:W.job.environmentRevision}:null;if(!W.ok||W.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(!K&&H.generation===G.generation&&H.fenceId===G.fenceId)V.opened={...A,...R};return{executorLaunchId:$.executorLaunchId,job:W.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:W.job.jobId,port:G.port,expiresAtMs:G.expiresAtMs}}}catch{return null}}return{async open(G,V,B){J(V);let{binding:H,deviceRelayUrl:K}=t$(G);if(B.aborted||H.expiresAtMs<=Date.now()||H.expiresAtMs>Date.now()+v.lifetimeMs||new URL(K).origin!==$.authority.relayOrigin)E0();let L=X(H),U=Q.get(L);if(U){if(!d0(U.binding,H)||U.relay!==K)E0();if(await U.opened,!await I9(()=>U.port.check())||B.aborted||U.abort.signal.aborted)E0();return{opened:!0,binding:H}}if(Q.size>=L3)E0();let W=new AbortController,j={},O=JZ({binding:H,deniedPorts:$.authority.deniedPorts,readCurrentJob:()=>z(H,j,W.signal)}),C=()=>W.abort();if(B.addEventListener("abort",C,{once:!0}),Z.signal.addEventListener("abort",C,{once:!0}),B.aborted||Z.signal.aborted)C();let A=QZ({binding:H,deviceRelayUrl:K,port:O,signal:W.signal}),R={binding:H,relay:K,abort:W,port:O,opened:A};Q.set(L,R);let I=()=>{if(B.removeEventListener("abort",C),Z.signal.removeEventListener("abort",C),Q.get(L)===R)Q.delete(L)};try{if((await A).closed.then(I),B.removeEventListener("abort",C),J(V),W.signal.aborted||!await I9(()=>O.check()))E0();return{opened:!0,binding:H}}catch{W.abort(),I(),E0()}},async close(G,V){J(V);let{binding:B}=e$(G),H=Q.get(X(B));if(!H||!d0(H.binding,B))E0();return H.abort.abort(),await H.opened.then((K)=>K.closed,()=>{return}),{closed:!0,binding:B}},dispose(){Z.abort();for(let G of Q.values())G.abort.abort();Q.clear()}}}import{WebSocket as g8}from"ws";var zZ=($)=>("data"in $)?$.data.length:$.bytes,KZ=2*VZ;function i($){throw new q($,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var Q9=($)=>!["starting","running"].includes($.state);function XX($,Z,Q=Date.now()){let X=["relay_url","session_id","expires_at","cols","rows","pty","workspace"];if(Object.keys($).length!==X.length||Object.keys($).some((V)=>!X.includes(V))||!h8(Z)||!h8($.session_id)||typeof $.expires_at!=="string"||typeof $.relay_url!=="string"||$.relay_url.length>4096||![$.cols,$.rows].every((V)=>Number.isSafeInteger(V)&&Number(V)>=1&&Number(V)<=v8))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||!r9(Y.jobId))i("invalid_pty_request");let z;try{z=new URL($.relay_url)}catch{return i("invalid_pty_request")}if(!["ws:","wss:"].includes(z.protocol)||z.username||z.password||z.hash||z.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(z.hostname))i("invalid_pty_request");let F=Date.parse($.expires_at);if(!Number.isSafeInteger(F)||F<=Q)i("invalid_pty_request");return{workspace:FZ($.workspace)??i("invalid_pty_request"),session:{jobId:Y.jobId,sessionId:$.session_id,operationId:Z,relayUrl:z.href,cols:Number($.cols),rows:Number($.rows),leaseExpiresAtMs:Math.min(F,Q+43200000)}}}async function UZ($){let{session:Z,binding:Q}=$;if(Q.assertCurrent(),$.signal.aborted||Date.now()>=Z.leaseExpiresAtMs)i("cancelled");let X=new g8(Z.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:a9}),J=new AbortController,Y=()=>{},z=()=>{J.abort(),Y()};$.signal.addEventListener("abort",z,{once:!0});let F=setTimeout(z,Math.max(1,Z.leaseExpiresAtMs-Date.now())),G=[],V=0,B=0,H=0,K=!1,L=!1,U=!1,W,j,O,C=(N)=>{O=new q(N,"Bound terminal input was refused."),z()};X.on("error",()=>C("pty_relay_unavailable")),X.on("close",z),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<=a9;if(D.length>a9||V+D.length>HZ){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 m=JSON.parse(D.toString("utf8"));if(m&&m.t==="close"&&Object.keys(m).length===1){U=!0,z();return}if(!m||m.t!=="resize"||Object.keys(m).length!==3||![m.cols,m.rows].every((_)=>Number.isSafeInteger(_)&&_>=1&&_<=v8))throw Error("invalid_control");G.push({cols:m.cols,rows:m.rows,bytes:D.length})}catch{C("invalid_pty_control");return}V+=D.length,Y()});function A(N){return WZ(JSON.stringify({...Q.scope,version:1,sessionId:Z.sessionId,operationId:Z.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!==Q.scope.generation||M.jobId!==Z.jobId||!M.pty||M.leaseExpiresAtMs>Z.leaseExpiresAtMs||M.process&&M.process.executorLaunchId!==Q.scope.executorLaunchId||M.process&&j&&(M.process.pid!==j.pid||M.process.processGroupId!==j.processGroupId)||M.state!=="starting"&&(M.environmentRevision!==Q.environment.revision||M.environmentSnapshotId!==Q.environment.snapshotId))i("pty_binding_changed");if(A(M),M.process)j??={...M.process};return M}async function I(N){Q.assertCurrent();let M=await Q.request(N,J.signal);if(Q.assertCurrent(),J.signal.aborted)i("cancelled");let D=R(M);if(D.inputSequence!==B)i("job_input_sequence");if(!Q9(D)&&D.leaseExpiresAtMs<=Date.now())i("pty_binding_changed");return D}function T(N){if(Q.assertCurrent(),J.signal.aborted||X.readyState!==g8.OPEN||X.bufferedAmount+Buffer.byteLength(N)>KZ)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>KZ)return!1;T(D),H=M.cursor}if(H!==N.nextCursor)i("pty_output_gap");return!0}async function y(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(o9),M=Q.request({jobId:Z.jobId,action:"cancel",input:{}},N),D,w=new Promise((k,m)=>{if(D=()=>m(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,m)=>{let _=setTimeout(()=>{z(),m(new q("pty_relay_unavailable","Terminal pairing timed out."))},5000),g=()=>{clearTimeout(_),m(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()}),Q.assertCurrent(),K=!0,W=await I({jobId:Z.jobId,action:"start",input:{mode:"pty",cols:Z.cols,rows:Z.rows,leaseExpiresAtMs:Z.leaseExpiresAtMs}});let N=Date.now()+5000;while(W.state==="starting"){if(Date.now()>=N)i("pty_not_ready");await new Promise((k)=>setTimeout(k,25)),W=await I({jobId:Z.jobId,action:"inspect",input:{after:H}})}if(W.state!=="running"||W.inputSequence!==0||W.leaseExpiresAtMs<=Date.now())i("pty_not_ready");await y("pty.ready",A(W)),L=!0,T(JSON.stringify({t:"open",cols:W.pty.cols,rows:W.pty.rows,receipt:A(W)}));let M=!1,D=0,w=!1;while(!J.signal.aborted){let k=W.firstCursor>H+1,m=S(W);if(Q9(W)){if(m)break}else if(k)M=!0;else if(M&&m&&Date.now()>=D){M=!1,D=Date.now()+1000;let{cols:g,rows:c}=W.pty;for(let u of[{cols:g,rows:c>1?c-1:2},{cols:g,rows:c}]){if(Q9(W))break;let r=++B;if(W=await I({jobId:Z.jobId,action:"resize",input:{sequence:r,...u}}),W.inputSequence!==r)i("job_input_sequence")}continue}let _=Q9(W)||w?void 0:G.shift();if(_){V-=zZ(_);let g=++B;try{W=await I("data"in _?{jobId:Z.jobId,action:"input",input:{sequence:g,dataBase64:_.data.toString("base64")}}:{jobId:Z.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(_),V+=zZ(_),w=!0;continue}if(W.inputSequence!==g)i("job_input_sequence")}else if(await new Promise((g)=>{let c=setTimeout(g,w||!m?10:50);if(Y=()=>{clearTimeout(c),g()},J.signal.aborted||!w&&G.length)Y()}),w=!1,Y=()=>{},!J.signal.aborted&&m)try{W=await I({jobId:Z.jobId,action:"inspect",input:{after:H}})}catch(g){if(!U||!(g instanceof q)||g.code!=="cancelled")throw g}}}catch(N){O??=N}finally{if(L=!1,G.length=0,clearTimeout(F),$.signal.removeEventListener("abort",z),z(),K&&(!W||!Q9(W)))try{W=await E()}catch{W=void 0}try{if(!W||!Q9(W)||W.pty?.cleanup!=="confirmed")i("pty_cleanup_unconfirmed");let N=A(W);if(X.readyState===g8.OPEN)await new Promise((M)=>{let D=setTimeout(M,500);X.send(JSON.stringify({t:"exit",code:W.exitCode,receipt:N}),()=>{clearTimeout(D),M()})});await y("pty.stopped",N)}catch(N){O??=N}X.terminate()}if(O)throw O;if($.signal.aborted)i("cancelled");if(!W)i("pty_cleanup_unconfirmed");return{receipt:A(W)}}import{createHash as j3,randomUUID as u8}from"crypto";import{spawnSync as AZ}from"child_process";import{closeSync as BZ,constants as c8,fstatSync as q3,fsyncSync as C3,lstatSync as E9,mkdirSync as T3,mkdtempSync as xZ,openSync as LZ,readFileSync as O3,readdirSync as IZ,realpathSync as R9,rmSync as d8,unlinkSync as D3}from"fs";import{createConnection as _3}from"net";import{dirname as A3,join as p0,sep as x3}from"path";import{tmpdir as I3}from"os";var Z0=new Map,S0=new Map;function D0($,Z){return j3("sha256").update(JSON.stringify([$,Z])).digest("hex")}function X9($){try{T3($,{mode:448})}catch(Q){if(!(Q instanceof Error&&("code"in Q)&&Q.code==="EEXIST"))throw Q}let Z=E9($);if(!Z.isDirectory()||Z.isSymbolicLink()||!Y9(Z)||R9($)!==$)throw new q("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function P3($){let Z;try{Z=E9($)}catch(Q){if(Q instanceof Error&&"code"in Q&&Q.code==="ENOENT")return!1;throw Q}return!Z.isDirectory()||Z.isSymbolicLink()||IZ($).length>0}function PZ($){let Z=D0($.root,$.runId),Q=$.previousRuntimeDirectories?.find((z)=>P3(p0(z,"jobs",Z.slice(0,16))))??$.runtimeDirectory;X9(Q);let X=p0(Q,"jobs");X9(X);let J=p0(X,Z.slice(0,16));if($.maxScopes!==void 0){let z=IZ(X);if(!Number.isSafeInteger($.maxScopes)||$.maxScopes<1||z.length>$.maxScopes||!z.includes(Z.slice(0,16))&&z.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.")}X9(J);let Y=xZ(p0(DZ(),"reason-j-"));try{return X9(Y),{journalDirectory:J,scopeId:Z,launchDirectory:Y,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${u8()}`:p0(Y,"control.sock"),disposeSocket:()=>d8(Y,{recursive:!0,force:!0})}}catch(z){throw d8(Y,{recursive:!0,force:!0}),z}}var R3=60000,E3=5000;function S3($){if(process.platform==="win32")return w3($);let Z=AZ("ps",["-o","lstart=","-p",String($)],{encoding:"utf8",timeout:2000,env:{...process.env,LC_ALL:"C",LANG:"C"}}),Q=Z.status===0?/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(Z.stdout.trim()):null,X=Q?"JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(Q[1]):-1;if(!Q||X<0||X%3!==0)return null;let J=new Date(Number(Q[6]),X/3,Number(Q[2]),Number(Q[3]),Number(Q[4]),Number(Q[5])).getTime();return Number.isFinite(J)?J:null}function w3($){let Z=AZ(_Z("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${$}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:p9()}),Q=Z.status===0?Date.parse(Z.stdout.trim()):Number.NaN;return Number.isFinite(Q)?Q:null}function RZ($,Z={}){let Q=p0($.journalDirectory,"owner.lock"),X;try{X=LZ(Q,c8.O_RDONLY|c8.O_NOFOLLOW)}catch{return null}try{let J=q3(X);if(!J.isFile()||J.nlink!==1||!Y9(J)||J.size>4096)return null;let Y=null;try{Y=JSON.parse(O3(X,"utf8"))}catch{}let z;if(Y===null){if((Z.now??Date.now)()-J.mtimeMs<R3)return null;z={reason:"never_written",executorLaunchId:null}}else{let{version:V,scopeId:B,pid:H,createdAtMs:K,executorLaunchId:L}=Y;if(V!==1||B!==$.scopeId||typeof L!=="string"||typeof H!=="number"||!Number.isSafeInteger(H)||H<1||H===process.pid||typeof K!=="number"||!Number.isSafeInteger(K))return null;if(!(Z.exists??((W)=>{try{return process.kill(W,0),!0}catch(j){return!(j instanceof Error&&("code"in j)&&j.code==="ESRCH")}}))(H))z={reason:"owner_exited",executorLaunchId:L};else{let W=(Z.startedAtMs??S3)(H);if(W===null||W<=K+E3)return null;z={reason:"pid_reused",executorLaunchId:L}}}let F=E9(Q);if(F.dev!==J.dev||F.ino!==J.ino)return null;D3(Q);let G=LZ($.journalDirectory,c8.O_RDONLY);try{C3(G)}finally{BZ(G)}return z}catch{return null}finally{BZ(X)}}function EZ($){let Z={...$,workspace:$.workspace&&Object.freeze({...$.workspace}),previewAuthority:$.previewAuthority&&Object.freeze({...$.previewAuthority,owner:Object.freeze({...$.previewAuthority.owner}),deniedPorts:new Set($.previewAuthority.deniedPorts)})},Q=D0(Z.root,Z.runId);if(Z0.has(Q)||Z.operationId!==void 0&&S0.has(Z.operationId))throw new q("hands_jobs_busy","The Session already has a live Hands job supervisor.");let X={binding:Z,key:Q,terminals:new Map};if(Z.previewAuthority&&Z.environment)X.previews=GZ({authority:Z.previewAuthority,runId:Z.runId,expiresAtMs:Z.expiresAtMs,executorLaunchId:Z.executorLaunchId,environment:Z.environment,isCurrent:()=>Z0.get(X.key)===X,identity:()=>{try{return J9(Z)}catch{return null}},inspect:(J,Y)=>{if(Z0.get(X.key)!==X)throw new q("preview_unavailable","The Hands supervisor is no longer current.");return SZ(Z,{jobId:J,action:"inspect",input:{after:0}},Y)}});if(Z0.set(Q,X),Z.operationId!==void 0)S0.set(Z.operationId,X);return()=>{if(Z0.get(X.key)===X)Z0.delete(X.key);if(Z.operationId!==void 0&&S0.get(Z.operationId)===X)S0.delete(Z.operationId);X.previews?.dispose();for(let J of X.terminals.values())J.abort()}}var b3=5000,k3=20;async function qX($){let Z=(J)=>{throw new q("hands_rebind_unavailable",J)};if(!O0($.operationId)||!O0($.runId)||!O0($.fenceId)||!w0($.targetGeneration))Z("Reason sent an invalid Hands rebind.");let Q=S0.get($.operationId);if(!Q||Q.binding.root!==$.root)return Z("No live Hands supervisor owns this operation.");for(let J=Date.now()+b3;;){if($.signal?.aborted)Z("The Hands rebind was cancelled.");if(S0.get($.operationId)!==Q)Z("The Hands supervisor is no longer current.");let Y=null;try{Y=J9(Q.binding)}catch{}if(Y&&Y.generation===$.targetGeneration&&Y.fenceId===$.fenceId)break;if(Y&&Y.generation>$.targetGeneration||Date.now()>=J)Z("The executor did not adopt this take.");await new Promise((z)=>setTimeout(z,k3))}if(S0.get($.operationId)!==Q||Z0.get(Q.key)!==Q)Z("The Hands supervisor is no longer current.");let X=D0($.root,$.runId);if(Q.key===X)return;if(Z0.has(X))Z("The taking run already has a live Hands job supervisor.");Z0.delete(Q.key);for(let J of Q.terminals.values())J.abort();Q.key=X,Z0.set(X,Q)}function CX($){let Z="operationId"in $?S0.get($.operationId):Z0.get(D0($.root,$.runId)),Q=Z&&Z.binding.root===$.root?Z.binding:void 0;if(!Q?.environment||Q.expiresAtMs<=Date.now())throw new q("environment_unavailable","No live Hands supervisor owns this environment.");return Q.environment.install($.payload)}async function TX($){let Z=Z0.get(D0($.root,$.runId));if(!Z?.previews||!$.owner)throw new q("preview_unavailable","No authenticated Hands supervisor owns this preview.");return Z.previews.open($.payload,$.owner,$.signal)}async function OX($){let Z=Z0.get(D0($.root,$.runId));if(!Z?.previews||!$.owner||$.signal.aborted)throw new q("preview_unavailable","No authenticated Hands supervisor owns this preview.");return Z.previews.close($.payload,$.owner)}async function DX($){let Z=D0($.root,$.runId),Q=Z0.get(Z),X=Q?.binding,J=X?.runId,Y=X?.previewAuthority,z=X?.environment,F=$.owner&&{...$.owner},G=$.authority&&{...$.authority},V=()=>{throw new q("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!Q||!X||!Y||!z||!F||!G||!X.workspace)return V();let B=Object.freeze({...X.workspace}),H=J9(X),K=z.current(),L=()=>{if(Z0.get(Z)!==Q||F.organization_id!==Y.owner.organization_id||F.user_id!==Y.owner.user_id||F.device_id!==Y.owner.device_id||$.deviceId!==Y.owner.device_id||$.rootId!==Y.rootId||u0($.workspace)!==u0(B))V();let W=J9(X),j=z.current();if(W.generation!==H.generation||W.fenceId!==H.fenceId||j.run_id!==J||j.device_id!==$.deviceId||j.root_id!==$.rootId||j.snapshot_id!==K.snapshot_id||j.revision!==K.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)V()};if(L(),new URL($.session.relayUrl).origin!==Y.relayOrigin||Q.terminals.has($.session.jobId)||Q.terminals.size>=4)return V();let U=new AbortController;Q.terminals.set($.session.jobId,U);try{return await UZ({session:{...$.session,leaseExpiresAtMs:Math.min($.session.leaseExpiresAtMs,H.expiresAtMs,Date.parse(K.expires_at))},signal:AbortSignal.any([$.signal,U.signal]),emit:$.emit,binding:{assertCurrent:L,environment:{revision:K.revision,snapshotId:K.snapshot_id},scope:{runId:$.runId,deviceId:$.deviceId,rootId:$.rootId,workspace:B,binding:K.binding.kind,targetRevision:K.binding.target_revision,rootGrantRevision:K.binding.root_grant_revision,generation:H.generation,fenceId:H.fenceId,executorLaunchId:H.executorLaunchId},request:(W,j)=>wZ(H,p8(JSON.stringify({...W,type:"job",version:2,generation:H.generation,id:u8()})),j)}})}finally{if(Q.terminals.get($.session.jobId)===U)Q.terminals.delete($.session.jobId)}}async function _X($){if(r9($.payload.jobId))throw new q("pty_binding_required","PTY jobs require the bound terminal capability.");let Z=Z0.get(D0($.root,$.runId))?.binding;if(!Z||Z.expiresAtMs<=Date.now())throw new q("hands_jobs_unavailable","No live Hands supervisor owns this Session and root.");return SZ(Z,$.payload,$.signal)}var f3=1e4,m3=20,y3=CZ/2,g3=qZ/2,h3=($)=>$.output.reduce((Z,Q)=>Z+Q.text.length,0);async function SZ($,Z,Q){if(Object.keys(Z).some((V)=>!["jobId","action","input","waitForExitMs"].includes(V)))throw new q("invalid_payload","Unexpected job control field.");let{waitForExitMs:X,...J}=Z;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>f3))throw new q("invalid_payload","Only a script start may wait for its job, within its bound.");let Y=(V)=>{let B=J9($);return wZ(B,p8(JSON.stringify({...V,type:"job",version:2,generation:B.generation,id:u8()})),Q)},z=await Y(J);if(X===void 0)return z;let F=Date.now()+X,G=z;while(G.ok&&["starting","running"].includes(G.job.state)&&G.job.output.length<y3&&h3(G.job)<g3&&!Q.aborted&&Date.now()<F){if(await new Promise((V)=>setTimeout(V,Math.min(m3,F-Date.now()))),Q.aborted)break;try{let V=await Y({jobId:J.jobId,action:"inspect",input:{after:0}});if(!V.ok)break;G=V}catch{break}}return G}function J9($){if($.expiresAtMs<=Date.now())throw new q("hands_jobs_unavailable","Hands authority expired.");let Z=$.readIdentity?$.readIdentity():$;if(!Z||!w0(Z.generation)||!O0(Z.fenceId)||Z.generation<$.generation||Z.generation===$.generation&&Z.fenceId!==$.fenceId)throw new q("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return $.generation=Z.generation,$.fenceId=Z.fenceId,{...$}}function wZ($,Z,Q){if(Q.aborted)return Promise.reject(new q("cancelled","Job control was cancelled."));return new Promise((X,J)=>{let Y=_3($.socketPath),z="",F=!1,G,V=(H,K)=>{if(F)return;if(F=!0,clearTimeout(G),Q.removeEventListener("abort",B),Y.destroy(),H)J(H);else X(K)},B=()=>V(new q("cancelled","Job control waiter cancelled; inspect before retrying mutations."));Q.addEventListener("abort",B,{once:!0}),Y.setEncoding("utf8"),G=setTimeout(()=>V(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",()=>V(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:Z})+`
9
- `)),Y.on("data",(H)=>{if(z+=H,Buffer.byteLength(z)>TZ)V(new q("hands_job_result_unknown","Hands job result exceeded its bound."))}),Y.once("end",()=>{if(Date.now()>=$.expiresAtMs){V(new q("hands_job_result_unknown","Hands authority expired before the result was acknowledged."));return}try{let H=OZ(z.trim());if(H.id!==Z.id||H.generation!==$.generation||H.ok&&H.job.jobId!==Z.jobId)throw Error("identity");V(void 0,H)}catch{V(new q("hands_job_result_unknown","Hands job response identity or shape was invalid."))}}),Y.once("close",()=>{if(!F)V(new q("hands_job_result_unknown","Hands job control closed before an acknowledged result."))})})}function NZ($){let Z=R9($.root),Q=$.authority,X=Date.parse($.leaseUntil),J=()=>{if($.signal.throwIfAborted(),!Number.isFinite(X)||X<=Date.now())throw Error("local_device_gh_lease_expired")};if(J(),Q.readOnly&&Q.generation===null)return{root:Z,readOnly:!0,signal:$.signal,deadlineMs:X,assertCurrent:J};let Y=D0(Z,$.runId),z=Z0.get(Y),F=z?.binding;if(!F?.environment||!F.workspace||F.localGithubConfinement!==!0)throw Error("local_device_gh_confinement_unavailable");let G=F.environment.current(),V=()=>{J();let H=F.environment.current(),K=J9(F);if(Z0.get(Y)!==z||H.github_auth!=="local_gh"||H.run_id!==F.runId||Q.runId!==$.runId||H.device_id!==Q.deviceId||H.root_id!==Q.rootId||String(H.binding.root_grant_revision)!==Q.rootRevision||H.binding.target_generation!==Q.generation||H.binding.target_fence_id!==Q.fenceId||K.generation!==Q.generation||K.fenceId!==Q.fenceId||H.snapshot_id!==G.snapshot_id||H.revision!==G.revision)throw Error("local_device_gh_authority_changed")};V();let B=t9(Z,F.workspace);return{root:B.boundary,signal:$.signal,deadlineMs:X,privateDirectory:A3(F.environment.path),repoPath:B.path,readOnly:Q.readOnly,forbiddenSecretValues:Object.values(G.variables),secretNames:(H)=>Object.entries(G.variables).filter(([,K])=>K.trim()===H.trim()).map(([K])=>`variable ${K}`),assertCurrent:V}}async function AX($,Z){let Q=MZ.parse($.request),X=jZ.parse($.authority);if(X.contributorRefresh&&Q.kind==="read"&&X.readOnly)return Z(NZ($));let J=Boolean(X.contributorRefresh);if(J&&(X.merge||Q.kind!=="pr_mutation"||Q.mutation.action!=="edit"||typeof Q.mutation.body!=="string"||Q.mutation.title!==void 0||Q.mutation.base!==void 0||X.readOnly||X.runId!==$.runId||X.repoFullName!==Q.repoFullName))throw Error("local_device_gh_contributor_refresh_authority_invalid");if(Q.kind!=="pr_merge"&&!J){if(X.merge)throw Error("local_device_gh_merge_authority_invalid");return Z(NZ($))}if(!J&&(!X.merge||X.readOnly||X.runId!==$.runId||X.repoFullName!==Q.repoFullName||X.merge.source==="agent"&&(X.generation===null||X.fenceId===null)))throw Error("local_device_gh_merge_authority_invalid");let Y=R9($.root),z=E9(Y),F=Date.parse($.leaseUntil);if(!Number.isFinite(F)||F<=Date.now())throw Error("local_device_gh_lease_expired");let G=R9(I3());if(G===Y||G.startsWith(Y+x3))throw Error("local_device_gh_private_scope_unavailable");let V=xZ(p0(G,"reason-gh-merge-"));try{X9(V);let B=()=>{if($.signal.throwIfAborted(),Date.now()>=F)throw Error("local_device_gh_lease_expired");let H=E9($.root);if(H.isSymbolicLink()||H.dev!==z.dev||H.ino!==z.ino||R9($.root)!==Y)throw Error("local_device_gh_authority_changed");X9(V)};return B(),await Z({root:Y,readOnly:!1,privateDirectory:V,forbiddenSecretValues:[],signal:$.signal,deadlineMs:F,assertCurrent:B})}finally{d8(V,{recursive:!0,force:!0})}}var fZ=43200000;function G9($){return Number.isSafeInteger($)&&Math.abs($)<=8640000000000000?$:null}function bZ($){return $!==null&&typeof $==="object"&&!Array.isArray($)}function kZ($,Z){return Object.keys($).length===Z.length&&Z.every((Q)=>Object.hasOwn($,Q))}function IX($){if(!bZ($)||!kZ($,["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"||G9(J)===null))return null}if($.remaining_ms!==null&&(typeof $.remaining_ms!=="number"||!Number.isSafeInteger($.remaining_ms)))return null;let Z=typeof $.expiry_ms==="number"&&typeof $.validation_now_ms==="number"?$.expiry_ms-$.validation_now_ms:null;if($.remaining_ms!==(Z!==null&&Number.isSafeInteger(Z)?Z:null))return null;if($.outcome==="parse"&&$.expiry_ms!==null)return null;if($.outcome!=="parse"&&$.expiry_ms===null)return null;if($.outcome==="expired"&&!(typeof Z==="number"&&Z<=0))return null;if($.outcome==="over_cap"&&!(typeof Z==="number"&&Z>43200000))return null;if($.outcome==="accepted"&&!(typeof Z==="number"&&Z>0&&Z<=43200000))return null;let Q=$.cli_artifact;if(!bZ(Q)||!kZ(Q,["kind","status","sha256","observed_at_ms"])||Q.observed_at_ms!==null&&(typeof Q.observed_at_ms!=="number"||G9(Q.observed_at_ms)===null))return null;if(Q.kind==="entrypoint_file"){if(Q.status!=="observed"||typeof Q.sha256!=="string"||!/^[a-f0-9]{64}$/.test(Q.sha256)||Q.observed_at_ms===null)return null}else if(Q.kind!=="unavailable"||Q.sha256!==null||typeof Q.status!=="string"||!["unsupported_entrypoint","read_failed","file_changed","size_limit","time_limit"].includes(Q.status))return null;return $}var l8=x.strictObject({kind:x.enum(["workspace_source","mcp_control"]),target_revision:x.number().int().nonnegative(),root_grant_revision:x.number().int().positive()}),yZ=new RegExp(e9.tokenPattern),v3=x.strictObject({token_url:x.url().max(2048),request_token:x.string().min(1).max(8192).regex(yZ),aws_credentials_url:x.url().max(2048).nullable()});function gZ($,Z){let Q=(X,J)=>{try{let Y=new URL(X);return Y.origin===new URL(Z).origin&&Y.pathname===J&&!Y.username&&!Y.password&&!Y.search&&!Y.hash}catch{return!1}};if(!yZ.test($.request_token)||!Q($.token_url,e9.tokenPath)||$.aws_credentials_url!==null&&!Q($.aws_credentials_url,e9.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 hZ($){return new TextEncoder().encode($).byteLength}function c3($){return hZ(JSON.stringify($)+`
10
- `)}var vZ=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:l8.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(mZ),x.string().refine(($)=>!$.includes("\x00")&&hZ($)<=_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:v3.optional()}).refine(($)=>$.github_auth!=="local_gh"||$.git===null,"conflicting git authority").refine(($)=>c3($)<=_0.snapshotBytes,"snapshot too large");import{spawn as d3}from"child_process";import{basename as p3,isAbsolute as fX}from"path";var u3=0,cZ=120000,dZ=15000,l3=65536;function s8($=process.execPath,Z=process.argv[1]){let Q=p3($),X=(Q.startsWith("bun")||Q.startsWith("node"))&&typeof Z==="string"&&Z.length>0;return{command:$,prefix:X?[Z]:[]}}function mX($={}){let{command:Z,prefix:Q}=s8($.executablePath,$.sourceEntrypoint),X=$.spawnProcess??d3,J=$.now??Date.now,Y=null,z=0,F=!1,G=(B)=>{try{B.kill("SIGKILL")}catch{}},V=()=>{if(F)return;if(Y&&J()-z<cZ-dZ)return;if(Y){let H=Y;Y=null,G(H)}let B;try{B=X(Z,[...Q,"__device","__hands-worker","--handoff-fd",String(u3)],{cwd:"/",env:{PATH:process.env.PATH??"/usr/local/bin:/usr/bin:/bin"},shell:!1,stdio:["pipe","ignore","pipe"]})}catch{return}Y=B,z=J(),B.on("error",()=>{if(Y===B)Y=null}),B.once("exit",(H,K)=>{if(Y!==B)return;Y=null,$.log?.("hands.worker_prespawn_exited",{exit_code:H,exit_signal:K})}),$.log?.("hands.worker_prespawned",{pid:B.pid??null})};return{arm:V,take(B){let H=Y;if(!H||F)return null;let K=B.args.at(-1),L=B.options.env,U=B.options.cwd,W=[...Q,"__device","__hands-worker","--config"];if(B.command!==Z||B.args.length!==W.length+1||W.some((A,R)=>B.args[R]!==A)||typeof K!=="string"||!L||typeof U!=="string"||B.options.shell||JSON.stringify(B.options.stdio)!==JSON.stringify(["ignore","ignore","pipe"]))return null;Y=null;let j=H.stdin,O={configPath:K,cwd:U,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()-z>=cZ-dZ||Buffer.byteLength(C,"utf8")>l3)return G(H),null;return j.on("error",()=>{return}),j.end(C),H.once("exit",()=>{V()}),$.log?.("hands.worker_prespawn_taken",{pid:H.pid??null}),H},adopt(B){B.once("exit",()=>{V()})},close(){if(F=!0,Y)G(Y);Y=null}}}import{accessSync as r3,constants as t3,statSync as e3}from"fs";import{homedir as $1,tmpdir as Z1,userInfo as Q1}from"os";import{delimiter as X1,win32 as J1}from"path";var s3=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 n3=["BUN_CONFIG_","BUN_INSPECT","DYLD_","NODE_DEBUG"],i3=new Set(["BUN_INSTALL"]);var a3=/^--(?:max-old-space-size|max-semi-space-size|stack-size)=\d{1,9}$/;function o3($){return($??"").split(/\s+/).filter(Boolean).every((Z)=>a3.test(Z.replaceAll("_","-")))}function pZ($){return Object.keys($).filter((Z)=>s3.has(Z)&&!(Z==="NODE_OPTIONS"&&o3($[Z]))||n3.some((Q)=>Z.startsWith(Q))||Z.startsWith("BUN_")&&!i3.has(Z)).sort()}var Y1=new Set(["HOME","PATH","PWD","OLDPWD","SHLVL","_","TMPDIR","TMP","TEMP","SHELL","BASH_ENV","ENV","ZDOTDIR","PROMPT_COMMAND","IFS","CDPATH","GLOBIGNORE","SHELLOPTS","BASHOPTS","NODE_PATH"]),G1=/^(?:ARA_|REASON_|PI_|GIT_|GH_|GITHUB_|LD_|DYLD_|BUN_|BASH_FUNC_|SSH_)/,z1=/TOKEN|SECRET|PASSW|PASSPHRASE|CREDENTIAL|API_?KEY|ACCESS_?KEY|PRIVATE_?KEY|AUTH/i,K1=/^[A-Za-z_][A-Za-z0-9_]*$/;function nZ($=process.env){let Z=(J)=>{if(!(process.platform==="win32"?J1.isAbsolute(J):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 Q=new Set(pZ($)),X=Object.fromEntries(Object.entries($).filter((J)=>{let[Y,z]=J;return typeof z==="string"&&z.length<=32768&&!z.includes("\x00")&&Y.length<=128&&K1.test(Y)&&!Q.has(Y)&&!Y1.has(Y)&&!G1.test(Y)&&!z1.test(Y)}).sort(([J],[Y])=>J.localeCompare(Y)).slice(0,512));return{home:Z($.HOME||(process.platform==="win32"?$.USERPROFILE:void 0)||$1()),path:((J)=>process.platform==="win32"?sZ(J):J)(lZ($.PATH??"").join(X1)||uZ),temporaryDirectory:Z($.TMPDIR||$.TMP||$.TEMP||Z1()),variables:X}}function iZ($=process.env,Z=()=>Q1().shell){if(process.platform==="win32")return $8();let Q=(J)=>{if(!J||!/^\/[A-Za-z0-9._/-]*\/(?:bash|zsh)$/.test(J))return!1;try{return r3(J,t3.X_OK),e3(J).isFile()}catch{return!1}};if(Q($.SHELL))return $.SHELL;let X;try{X=Z()}catch{X=void 0}return Q(X)?X:"/bin/zsh"}import{readFileSync as rZ,realpathSync as aZ,statSync as F1}from"fs";import{homedir as V1}from"os";import{dirname as H1,isAbsolute as W1,join as S9,sep as U1}from"path";var V5="--proxy",H5="--proxy-ca-file",B1=262144;class J0 extends Error{}function i8($){let Z;try{Z=new URL($)}catch{throw new J0("The proxy must be a URL like https://proxy.example.com:3128.")}if(Z.protocol!=="https:"&&Z.protocol!=="http:")throw new J0("The proxy URL must use the https or http scheme.");if(!Z.hostname)throw new J0("The proxy URL must name a host.");if(Z.port!==""&&Number(Z.port)<1)throw new J0("The proxy URL must use a port between 1 and 65535.");if(Z.pathname!==""&&Z.pathname!=="/"||Z.search||Z.hash)throw new J0("The proxy URL must not carry a path, query, or fragment.");return Z.toString()}function W5($){let Z=new URL($.url),Q=Z.port||(Z.protocol==="https:"?"443":"80");return`${Z.hostname}:${Q}`}function L1($={}){let Z=$.home??V1(),Q=$.statePath??oZ();return[H1(Q),S9(Z,".ssh"),S9(Z,".aws"),S9(Z,".gnupg"),S9(Z,".kube"),S9(Z,"Library","Keychains")]}function N1($,Z){return Z===$||Z.startsWith($+U1)}function M1($,Z={}){if(!W1($))throw new J0("The proxy CA file must be an absolute path.");let Q,X,J;try{Q=aZ($);let F=F1(Q);X=F.size,J=F.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>B1)throw new J0("The proxy CA file must be 256 KB or smaller.");let Y=L1(Z).flatMap((F)=>{try{let G=aZ(F);return G===F?[F]:[F,G]}catch{return[F]}});for(let F of[$,Q])if(Y.some((G)=>N1(G,F)))throw new J0("The proxy CA file must not live inside a credential directory.");let z;try{z=rZ(Q,"utf8")}catch{throw new J0("The proxy CA file is not readable.")}if(!z.includes("-----BEGIN CERTIFICATE-----"))throw new J0("The proxy CA file must be a PEM certificate bundle.");return Q}function U5($,Z={}){if(!$.proxyUrl)throw new J0("A proxy URL is required.");let Q=i8($.proxyUrl),X=$.caFile===void 0?void 0:M1($.caFile,Z);return{version:Z8,url:Q,...X===void 0?{}:{caFile:X}}}function B5($,Z=fetch){if(!$)return Z;let Q,X=!1;return(Y,z)=>{if(!X){if($.caFile)try{Q=rZ($.caFile,"utf8")}catch{throw new J0(`The configured proxy CA file is not readable: ${$.caFile}`)}X=!0}let F={...z,proxy:$.url,...Q===void 0?{}:{tls:{ca:Q}}};return Z(Y,F)}}import{createHash as j1}from"crypto";import{isAbsolute as eZ,join as $Q,relative as ZQ,resolve as X8,sep as QQ}from"path";var Q8=x.string().min(1).refine(eZ,"absolute path required"),a8=x.strictObject({version:x.literal(1),apiOrigin:x.url(),channel:x.enum(["staging","production"]),stateDirectory:Q8,workspaceRoot:Q8,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(Z8),url:x.string().refine(($)=>{try{return i8($)===$}catch{return!1}},"invalid proxy URL"),caFile:Q8.optional()}).optional(),userChrome:x.boolean().optional(),cloudSessions:x.literal(!0).optional(),localLogins:x.boolean().optional(),folders:x.array(Q8).min(1).max(31).optional()}),q1=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,D5=x.discriminatedUnion("channel",[a8,a8.extend({channel:x.literal("pr"),apiOrigin:x.string(),prEnvironment:x.string()}),a8.extend({channel:x.literal("local-qa"),apiOrigin:x.string()})]).superRefine(($,Z)=>{if($.channel==="local-qa"){if(!q1.test($.apiOrigin))Z.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((z)=>z.replace(/^-/,""));if(!X||/^pr-[1-9][0-9]*$/.exec(X)?.[0]!==X||J?.[0]!==$.apiOrigin||Y?.length!==1||Y[0]!==X)Z.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:"&&o8(X.origin))||!o8(X.origin)&&!tZ($.channel,X.origin))Z.addIssue({code:"custom",message:"API origin must match channel (or loopback)"})}if(!w9($.workspaceRoot,$.stateDirectory))Z.addIssue({code:"custom",message:"state and workspace must be disjoint"});let Q=$.folders??[];if(new Set([$.workspaceRoot,...Q]).size!==Q.length+1||Q.some((X)=>!w9(X,$.stateDirectory)))Z.addIssue({code:"custom",message:"folders must be distinct and disjoint from state"})});function C1($){return $Q($.stateDirectory,`headless-${$.channel==="pr"?$.prEnvironment:$.channel}`)}function _5($,Z={},Q={}){let X=$.executionMode==="host"?"unsandboxed":"sandboxed";return{worker:Object.freeze({executionMode:X,runtimeDirectory:C1($),handsSlots:$.slots,...Q.ownComputer?{ownComputer:!0}:{},readiness:Object.freeze({...Z}),...Q.persistentTerminals?{persistentTerminals:!0}:{},...Q.probing?.length?{probing:Object.freeze([...Q.probing])}:{},...Q.displayVideo?{displayVideo:!0}:{},...Q.handsBrowser&&Z["hands.connect"]===!0?{handsBrowser:!0}:{},...Q.githubSignedIn===void 0?{}:{githubSignedIn:Q.githubSignedIn},...$.userChrome!==!1&&Q.userChrome?{userChrome:Q.userChrome}:{},...$.cloudSessions&&Z["automation.call.v1"]===!0?{cloudSessions:!0}:{}}),proxy:$.proxy??null}}function w9($,Z){if(A0(Z,$))return!1;return!A0($,Z)||b0($Q(QQ,ZQ(X8($),X8(Z))))}function A0($,Z){let Q=ZQ(X8($),X8(Z));return Q===""||Q!==".."&&!Q.startsWith(`..${QQ}`)&&!eZ(Q)}function A5($){let{proxy:Z,userChrome:Q,cloudSessions:X,localLogins:J,folders:Y,...z}=$;return j1("sha256").update(JSON.stringify(z)).digest("hex")}import{readdir as T1}from"fs/promises";var O1=15000;function D1($){let Z=$ instanceof Error&&"code"in $?$.code:null;return Z==="EPERM"||Z==="EACCES"}function _1($){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 XQ($,{timeoutMs:Z=O1,open:Q=(X)=>T1(X)}={}){let X,J=new Promise((Y)=>{X=setTimeout(()=>Y("pending"),Z)});try{if(await Promise.race([Q($).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(D1(Y))throw _1($);if(Y instanceof q)throw Y}finally{clearTimeout(X)}}import{chmodSync as X7,closeSync as J7,constants as G$,fstatSync as Y7,lstatSync as IQ,openSync as G7,readSync as z7,realpathSync as z$,unlinkSync as K7}from"fs";import{lookup as F7}from"dns/promises";import{createRequire as V7}from"module";import{request as H7}from"http";import{request as W7}from"https";import n0 from"net";import{platform as bQ}from"os";import{basename as U7,extname as B7,isAbsolute as PQ,relative as K$,resolve as V9,sep as F$}from"path";var JQ=String.raw`
11
- async (roots) => {
12
- "use strict";
13
- const version = 2;
14
- if (globalThis.__araHandsRepl && globalThis.__araHandsRepl.version === version) return;
15
- const hostCall = globalThis.__araHandsRpc;
16
- if (typeof hostCall !== "function") throw new Error("Reason Hands browser bridge is not installed");
17
- try { delete globalThis.__araHandsRpc; } catch (error) {
18
- if (!(error instanceof TypeError)) throw error;
19
- }
20
-
21
- const handles = new WeakMap();
22
- const bytes = new WeakMap();
23
- const routes = new WeakMap();
24
- const derived = new Set([
25
- "browser", "context", "frame", "frameLocator", "getByAltText", "getByLabel",
26
- "getByPlaceholder", "getByRole", "getByTestId", "getByText", "getByTitle",
27
- "contentFrame", "locator", "nth", "mainFrame", "newContext", "newPage", "opener", "owner", "page", "parentFrame",
28
- ]);
29
- const locatorMethods = new Set([
30
- "all", "allInnerTexts", "allTextContents", "and", "ariaSnapshot", "blur",
31
- "boundingBox", "check", "clear", "click", "contentFrame", "count", "dblclick",
32
- "dragTo", "evaluate", "evaluateAll", "fill", "filter", "focus", "getAttribute",
33
- "hover", "innerHTML", "innerText", "inputValue", "isChecked", "isEditable",
34
- "isEnabled", "isHidden", "isVisible", "or", "page", "press", "pressSequentially",
35
- "screenshot", "scrollIntoViewIfNeeded", "selectOption", "setInputFiles", "tap",
36
- "textContent", "type", "uncheck", "waitFor",
37
- ]);
38
- const pageMethods = new Set([
39
- "addInitScript", "addScriptTag", "addStyleTag", "bringToFront", "close", "content",
40
- "emulateMedia", "evaluate", "frameLocator", "frames", "goBack", "goForward", "goto",
41
- "isClosed", "pdf", "reload", "route", "screenshot", "captureScreenshot", "selectOption", "setContent",
42
- "setDefaultNavigationTimeout", "setDefaultTimeout", "setExtraHTTPHeaders", "setInputFiles",
43
- "setViewportSize", "title", "unroute", "url", "viewportSize", "waitForFunction",
44
- "waitForLoadState", "waitForNavigation", "waitForTimeout", "waitForURL",
45
- ]);
46
- const contextMethods = new Set([
47
- "startRecording", "stopRecording",
48
- "addCookies", "addInitScript", "clearCookies", "clearPermissions", "close", "cookies",
49
- "grantPermissions", "pages", "route", "setDefaultNavigationTimeout", "setDefaultTimeout",
50
- "setExtraHTTPHeaders", "setGeolocation", "setHTTPCredentials", "setOffline",
51
- "setViewportSize", "storageState", "unroute", "viewportSize",
52
- ]);
53
- const browserMethods = new Set(["close", "contexts", "isConnected", "version"]);
54
- const frameMethods = new Set([
55
- "addScriptTag", "addStyleTag", "childFrames", "content", "evaluate", "frameLocator",
56
- "goto", "isDetached", "name", "parentFrame", "setContent", "title", "url",
57
- "waitForFunction", "waitForLoadState", "waitForNavigation", "waitForTimeout", "waitForURL",
58
- ]);
59
-
60
- function record(value) {
61
- if (!value || typeof value !== "object" || Array.isArray(value)) return false;
62
- const proto = Object.getPrototypeOf(value);
63
- return proto === Object.prototype || proto === null;
64
- }
65
- function handle(value) {
66
- return record(value) && value.$handsRepl === "handle"
67
- && typeof value.id === "string" && typeof value.kind === "string";
68
- }
69
- function clone(value, stack) {
70
- if (value === null || typeof value === "boolean" || typeof value === "string") return value;
71
- if (typeof value === "number") {
72
- if (!Number.isFinite(value)) throw new TypeError("Reason Hands bridge accepts only finite numbers");
73
- return value;
74
- }
75
- if (!value || typeof value !== "object") throw new TypeError("Reason Hands bridge accepts only JSON data");
76
- if (stack.has(value)) throw new TypeError("Reason Hands bridge does not accept cyclic data");
77
- stack.add(value);
78
- try {
79
- if (Array.isArray(value)) return value.map((item) => clone(item, stack));
80
- if (!record(value)) throw new TypeError("Reason Hands bridge accepts only plain objects");
81
- const output = Object.create(null);
82
- for (const key of Object.keys(value)) {
83
- if (key === "__proto__" || key === "constructor" || key === "prototype") {
84
- throw new TypeError("Reason Hands bridge rejects unsafe object keys");
85
- }
86
- output[key] = clone(value[key], stack);
87
- }
88
- return output;
89
- } finally { stack.delete(value); }
90
- }
91
- function data(value) { return clone(value, new WeakSet()); }
92
- function refOf(value) {
93
- const ref = value && typeof value === "object" ? handles.get(value) : undefined;
94
- if (!ref) throw new TypeError("Reason Hands operation needs a browser target");
95
- return ref;
96
- }
97
- async function wire(value) {
98
- const target = value && typeof value === "object" ? handles.get(value) : undefined;
99
- if (target) return (await target).handle;
100
- const binary = value && typeof value === "object" ? bytes.get(value) : undefined;
101
- if (binary) return binary;
102
- const route = value && typeof value === "object" ? routes.get(value) : undefined;
103
- if (route) return route;
104
- if (value === null || typeof value === "boolean" || typeof value === "string") return value;
105
- if (typeof value === "number") {
106
- if (!Number.isFinite(value)) throw new TypeError("Reason Hands bridge accepts only finite numbers");
107
- return value;
108
- }
109
- if (Array.isArray(value)) return await Promise.all(value.map(wire));
110
- if (!record(value)) throw new TypeError("Reason Hands bridge accepts only JSON data");
111
- const output = Object.create(null);
112
- for (const key of Object.keys(value)) output[key] = await wire(value[key]);
113
- return output;
114
- }
115
- function decode(value) {
116
- if (handle(value)) return makeTarget(value);
117
- if (record(value) && value.$handsRepl === "bytes" && typeof value.base64 === "string") {
118
- const output = Object.freeze({ $handsRepl: "bytes", base64: value.base64 });
119
- bytes.set(output, output);
120
- return output;
121
- }
122
- if (record(value) && value.$handsRepl === "undefined") return undefined;
123
- if (Array.isArray(value)) return value.map(decode);
124
- if (!record(value)) return value;
125
- const output = Object.create(null);
126
- for (const key of Object.keys(value)) output[key] = decode(value[key]);
127
- return output;
128
- }
129
- async function rpc(request) { return decode(await hostCall(request)); }
130
- async function invoke(ref, method, args) {
131
- return await rpc({ type: "call", target: ref.handle, method, args: await Promise.all(args.map(wire)) });
132
- }
133
- function targetFrom(value) {
134
- const ref = value && typeof value === "object" ? handles.get(value) : undefined;
135
- if (!ref) throw new Error("Reason Hands bridge received an invalid target");
136
- return ref;
137
- }
138
- function lazy(refPromise) {
139
- const object = Object.create(null);
140
- const ready = Promise.resolve(refPromise);
141
- const proxy = new Proxy(object, {
142
- get(_object, key) {
143
- if (key === "then") return (resolve, reject) => {
144
- // Derived targets carry the bridge's internal { handle, kind } ref,
145
- // not the wire handle accepted by makeTarget. Passing the wrapper
146
- // used to throw inside this detached fulfillment callback; because
147
- // that rejection was not forwarded to the thenable consumer, every
148
- // await context.newPage() / await page.context() hung until an
149
- // outer tool deadline destroyed the evaluator execution context.
150
- ready.then((ref) => {
151
- try { resolve(makeTarget(ref.handle)); } catch (error) { reject(error); }
152
- }, reject);
153
- };
154
- if (typeof key !== "string") return undefined;
155
- if (key === "first" || key === "last") return lazy(ready.then(async (ref) => targetFrom(await invoke(ref, key, []))));
156
- if (derived.has(key)) return (...args) => lazy(ready.then(async (ref) => targetFrom(await invoke(ref, key, args))));
157
- if (key === "evaluate" || key === "evaluateAll") return (source, argument) => ready.then((ref) => evaluateInTarget(ref, source, argument));
158
- return (...args) => ready.then((ref) => invoke(ref, key, args));
159
- },
160
- });
161
- handles.set(proxy, ready);
162
- return proxy;
163
- }
164
- function makeTarget(handleValue) {
165
- if (!handle(handleValue)) throw new Error("Reason Hands bridge received an invalid handle");
166
- const ref = { handle: Object.freeze({ $handsRepl: "handle", id: handleValue.id, kind: handleValue.kind }), kind: handleValue.kind };
167
- const object = Object.create(null);
168
- // Preserve the existing synchronous viewport facade. URL reads use the
169
- // dispatcher: a human can navigate the real page without an agent goto,
170
- // and a new evaluator must not invent about:blank for that live page.
171
- const meta = {
172
- viewport: ref.kind === "page" && ref.handle.id === roots.page.id
173
- ? { width: 1440, height: 900 }
174
- : undefined,
175
- };
176
- const invokeDerived = (method, args) => lazy(Promise.resolve(invoke(ref, method, args)).then(targetFrom));
177
- const get = (_object, key) => {
178
- if (key === "first" || key === "last") return invokeDerived(key, []);
179
- if (typeof key !== "string") return undefined;
180
- if (key === "evaluate" || key === "evaluateAll") return (source, argument) => evaluateInTarget(ref, source, argument);
181
- if (ref.kind === "page" && key === "viewportSize" && meta.viewport) {
182
- return () => ({ ...meta.viewport });
183
- }
184
- if (ref.kind === "page" && key === "setViewportSize") {
185
- return (next) => invoke(ref, key, [next]).then((value) => {
186
- if (record(next) && typeof next.width === "number" && typeof next.height === "number") {
187
- meta.viewport = { width: next.width, height: next.height };
188
- }
189
- return value;
190
- });
191
- }
192
- if ((ref.kind === "page" || ref.kind === "context") && key === "route") {
193
- return async (url, handler) => {
194
- if (typeof handler !== "function") return await invoke(ref, key, [url, handler]);
195
- let fulfillment;
196
- const route = Object.freeze({
197
- fulfill: async (options) => {
198
- if (fulfillment) throw new TypeError("route() can register one fulfillment action");
199
- fulfillment = routeFulfill(options);
200
- },
201
- });
202
- await handler(route);
203
- if (!fulfillment) {
204
- throw new TypeError("route() supports a data-only route.fulfill({ ... }) callback");
205
- }
206
- return await invoke(ref, key, [url, fulfillment]);
207
- };
208
- }
209
- if (derived.has(key)) return (...args) => invokeDerived(key, args);
210
- const methods = ref.kind === "browser" ? browserMethods
211
- : ref.kind === "context" ? contextMethods
212
- : ref.kind === "page" ? pageMethods
213
- : ref.kind === "frame" ? frameMethods
214
- : locatorMethods;
215
- if (!methods.has(key)) return undefined;
216
- return (...args) => invoke(ref, key, args);
217
- };
218
- const proxy = new Proxy(object, { get });
219
- handles.set(proxy, Promise.resolve(ref));
220
- return proxy;
221
- }
222
- async function evaluateInTarget(ref, source, argument) {
223
- const text = typeof source === "function" ? Function.prototype.toString.call(source) : source;
224
- if (typeof text !== "string" || !text.trim()) throw new TypeError("evaluate() needs a function or expression string");
225
- const value = argument === undefined ? undefined : JSON.stringify(await wire(argument));
226
- let renderer;
227
- if (ref.kind === "locator") {
228
- renderer = typeof source === "function"
229
- ? "(element) => (" + text + ")(element" + (value === undefined ? "" : ", " + value) + ")"
230
- : text;
231
- } else {
232
- renderer = typeof source === "function"
233
- ? "(" + text + ")(" + (value === undefined ? "" : value) + ")"
234
- : value === undefined ? text : "(" + text + ")(" + value + ")";
235
- }
236
- return await invoke(ref, "evaluate", [renderer]);
237
- }
238
- function routeFulfill(options) {
239
- const token = Object.freeze(Object.create(null));
240
- routes.set(token, { $handsRepl: "routeFulfill", options: data(options) });
241
- return token;
242
- }
243
- const replConsole = Object.freeze({
244
- log: (...values) => { logs.push(values.map(render).join(" ")); },
245
- info: (...values) => { logs.push(values.map(render).join(" ")); },
246
- warn: (...values) => { logs.push("[warn] " + values.map(render).join(" ")); },
247
- error: (...values) => { logs.push("[error] " + values.map(render).join(" ")); },
248
- });
249
- function render(value) {
250
- if (value === undefined) return "undefined";
251
- if (typeof value === "string") return value;
252
- try { const text = JSON.stringify(value); return text === undefined ? String(value) : text; } catch { return "[unrenderable]"; }
253
- }
254
- const logs = [];
255
- const browser = makeTarget(roots && roots.browser);
256
- const context = makeTarget(roots && roots.context);
257
- const page = makeTarget(roots && roots.page);
258
- const state = Object.create(null);
259
- async function a11y(target) {
260
- const ref = target === undefined ? await refOf(page) : await refOf(target);
261
- return await rpc({ type: "a11y", target: ref.handle });
262
- }
263
- async function view(source, options) {
264
- return await rpc({ type: "view", source: await wire(source), options: options === undefined ? Object.create(null) : await wire(options) });
265
- }
266
- async function evaluate(code) {
267
- if (typeof code !== "string") throw new TypeError("Reason Hands REPL code must be a string");
268
- logs.length = 0;
269
- let program;
270
- let statementList = false;
271
- try { program = new Function('"use strict"; return (async () => await (' + code + "\n))();"); }
272
- catch {
273
- statementList = true;
274
- const strictCode = '"use strict";\n' + code;
275
- program = new Function(
276
- '"use strict"; return (async () => (0, eval)(' + JSON.stringify(strictCode) + '))();',
277
- );
278
- }
279
- let value;
280
- try {
281
- value = await program();
282
- } catch (error) {
283
- // Indirect eval preserves a statement-list completion value but cannot
284
- // parse top-level await or return. Those programs retain the prior async
285
- // block behavior; a syntax failure occurs before any user code executes.
286
- if (!statementList || !(error instanceof SyntaxError)) throw error;
287
- program = new Function('"use strict"; return (async () => {' + code + "\n})();");
288
- value = await program();
289
- }
290
- const output = render(value);
291
- return logs.length === 0 ? output : value === undefined ? logs.join("\n") : logs.join("\n") + "\n" + output;
292
- }
293
- function install(name, value) { Object.defineProperty(globalThis, name, { value, configurable: false, enumerable: false, writable: false }); }
294
- install("browser", browser); install("context", context); install("page", page);
295
- install("state", state); install("browserState", state);
296
- install("a11y", a11y); install("view", view); install("routeFulfill", routeFulfill); install("console", replConsole);
297
- install("__araHandsRepl", Object.freeze({ version, evaluate }));
298
- }
299
- `.trim(),YQ=String.raw`
300
- async (input) => {
301
- const bridge = globalThis.__araHandsRepl;
302
- if (!bridge || typeof bridge.evaluate !== "function") throw new Error("Reason Hands browser bridge is not installed");
303
- return await bridge.evaluate(typeof input === "string" ? input : input && input.code);
304
- }
305
- `.trim();import{Buffer as z9}from"buffer";import{randomUUID as A1}from"crypto";class FQ extends Error{code;constructor($){super($==="hands_repl_private_profile_attribute_denied"?"Private browser attribute read denied.":$);this.code=$;this.name="HandsReplBrowserDispatcherError"}}var VQ=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),GQ=/^hands_[A-Za-z0-9_-]{8,128}$/,x1=2048,HQ=32,WQ=1e4,I1=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function P1($){let Z=$.split("+"),Q=(Z.pop()??"").replace(/^Key/,"").toLowerCase();if(Q==="f12")return!0;if(Z.some((X)=>["Control","ControlOrMeta","Meta"].includes(X))&&["l","n","t","j","i","p","s","w","u","o","r","tab","pageup","pagedown"].includes(Q))return!0;if(Z.some((X)=>["Control","ControlOrMeta","Meta"].includes(X))&&Z.includes("Shift")&&Q==="c")return!0;return Z.includes("Alt")&&["d","arrowleft","arrowright","home"].includes(Q)}var R1=($)=>{let Z=$.closest("a[href],area[href]");return{password:$.tagName==="INPUT"&&$.type==="password",executableLink:Boolean(Z&&!/^(https?:|about:blank)/i.test(Z.href))}},UQ={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 P($){throw new FQ($)}function K0($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Z=Object.getPrototypeOf($);return Z===Object.prototype||Z===null}function K9($,Z=0,Q={nodes:0}){if(Z>HQ||++Q.nodes>WQ)P("hands_repl_json_too_complex");if($===null||typeof $==="boolean"||typeof $==="string")return;if(typeof $==="number"){if(!Number.isFinite($))P("hands_repl_invalid_json");return}if(Array.isArray($)){for(let X of $)K9(X,Z+1,Q);return}if(!K0($))P("hands_repl_invalid_json");for(let[X,J]of Object.entries($)){if(VQ.has(X))P("hands_repl_invalid_json");K9(J,Z+1,Q)}}function r8($){return typeof $==="string"&&Object.hasOwn(UQ,$)}function E1($){if(!$.endsWith("[]"))return null;let Z=$.slice(0,-2);return r8(Z)?Z:null}function zQ($){return K0($)&&Object.keys($).length===2&&$.$handsRepl==="bytes"&&typeof $.base64==="string"}function S1($){return K0($)&&Object.keys($).length===1&&$.$handsRepl==="undefined"}function KQ($){return K0($)&&Object.keys($).length===2&&$.$handsRepl==="routeFulfill"&&"options"in $}function k0($){return!!$&&typeof $==="object"}function J8(){return Object.freeze({$handsRepl:"undefined"})}function w1($){if(!z9.isBuffer($)&&!($ instanceof Uint8Array))P("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:z9.from($).toString("base64")})}function BQ($){if(!k0($.browser)||!k0($.context)||!k0($.page))P("hands_repl_invalid_roots");if(typeof $.a11y!=="function"||typeof $.view!=="function")P("hands_repl_invalid_callbacks");let Z=$.maxHandles??x1;if(!Number.isInteger(Z)||Z<3||Z>1e5)P("hands_repl_invalid_handle_limit");let Q=new Map,X=new WeakMap,J=$.createOpaqueId??A1,Y=(K,L)=>{if(!k0(L))P("hands_repl_expected_target");let U=X.get(L)?.get(K);if(U)return U;if(Q.size>=Z)P("hands_repl_handle_limit");let W="";for(let C=0;C<16;C+=1){let A=`hands_${J()}`;if(GQ.test(A)&&!Q.has(A)){W=A;break}}if(!W)P("hands_repl_invalid_opaque_id");let j=Object.freeze({$handsRepl:"handle",id:W,kind:K});Q.set(W,{kind:K,target:L});let O=X.get(L);if(!O)O=new Map,X.set(L,O);return O.set(K,j),j},z=Object.freeze({browser:Y("browser",$.browser),context:Y("context",$.context),page:Y("page",$.page)}),F=(K)=>{if(!K0(K)||Object.keys(K).length!==3||K.$handsRepl!=="handle"||typeof K.id!=="string"||!GQ.test(K.id)||!r8(K.kind))P("hands_repl_invalid_handle");let L=Q.get(K.id);if(!L||L.kind!==K.kind)P("hands_repl_unknown_handle");return L},G=(K,L=0,U=new Set)=>{if(L>HQ)P("hands_repl_json_too_complex");if(K===void 0)return J8();if(K===null||typeof K==="boolean"||typeof K==="string")return K;if(typeof K==="number"){if(!Number.isFinite(K))P("hands_repl_non_json_result");return K}if(Array.isArray(K)){if(U.has(K))P("hands_repl_cyclic_result");U.add(K);try{return K.map((W)=>G(W,L+1,U))}finally{U.delete(K)}}if(!K0(K))P("hands_repl_non_json_result");if(U.has(K))P("hands_repl_cyclic_result");U.add(K);try{let W=Object.create(null);for(let j of Object.keys(K)){let O=Object.getOwnPropertyDescriptor(K,j);if(!O||!("value"in O))continue;W[j]=G(O.value,L+1,U)}return W}finally{U.delete(K)}},V=(K,L)=>{if(L==="void")return J8();if(L==="json")return G(K);if(L==="bytes")return w1(K);let U=E1(L);if(U){if(!Array.isArray(K))P("hands_repl_expected_target_list");if(U==="context"&&K.some((W)=>W!==$.context))P("hands_repl_foreign_context");return K.map((W)=>Y(U,W))}if(K===null||K===void 0)return J8();if(!r8(L))P("hands_repl_invalid_return_kind");if(L==="context"&&K!==$.context)P("hands_repl_foreign_context");return Y(L,K)},B=(K)=>{if(K0(K)&&K.$handsRepl==="handle")return F(K).target;if(zQ(K))return z9.from(K.base64,"base64");if(S1(K))return;if(KQ(K))P("hands_repl_route_fulfill_only");if(Array.isArray(K))return K.map(B);if(!K0(K))return K;let L=Object.create(null);for(let[U,W]of Object.entries(K))L[U]=B(W);return L};return Object.freeze({roots:z,dispatch:async(K)=>{if(!K0(K)||typeof K.type!=="string")P("hands_repl_invalid_request");if(K.type==="a11y"){let T=K.target===void 0?Q.get(z.page.id):F(K.target);if(!T||T.kind!=="page"&&T.kind!=="locator")P("hands_repl_invalid_a11y_target");return G(await $.a11y(T.target))}if(K.type==="view"){if(K9(K.source),K.options!==void 0)K9(K.options);let T=zQ(K.source)?z9.from(K.source.base64,"base64"):K.source;if($.privateProfile&&!z9.isBuffer(T))P("hands_repl_profile_requires_image_bytes");return G(await $.view(T,K.options))}if(K.type!=="call")P("hands_repl_invalid_request");if(typeof K.method!=="string"||K.method.length===0||K.method.length>128)P("hands_repl_invalid_method");if(VQ.has(K.method))P("hands_repl_forbidden_method");let L=F(K.target),U=K.args??[];if(!Array.isArray(U))P("hands_repl_invalid_arguments");if(K9(U),L.kind==="page"&&K.method==="captureScreenshot"){if(U.length!==0)P("hands_repl_invalid_arguments");if(!$.screenshotExport)P("hands_repl_screenshot_export_unavailable");return G(await $.screenshotExport(L.target))}if(L.kind==="context"&&["startRecording","stopRecording"].includes(K.method)){if(!$.recording||L.target!==$.context)P("hands_repl_recording_unavailable");if(U.length>(K.method==="startRecording"?1:0))P("hands_repl_invalid_arguments");return G(K.method==="startRecording"?await $.recording.start(U[0]):await $.recording.stop())}if($.privateProfile){let T=K.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")P("hands_repl_private_profile_method_denied");if(L.kind==="browser"&&T==="contexts")return V([$.context],"context[]");if((T==="screenshot"||T==="pdf")&&K0(U[0])&&(("path"in U[0])||("style"in U[0])))P("hands_repl_private_profile_path_denied");if(T==="goto"){if(typeof U[0]!=="string")P("hands_repl_private_profile_url_denied");try{let S=new URL(U[0]);if(!["http:","https:"].includes(S.protocol)&&U[0]!=="about:blank")P("hands_repl_private_profile_url_denied")}catch{P("hands_repl_private_profile_url_denied")}}if(T==="getAttribute"&&(typeof U[0]!=="string"||!I1.has(U[0].toLowerCase())))P("hands_repl_private_profile_attribute_denied");if(L.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(T)){let S=[L.target];if(T==="allInnerTexts"){let y=Reflect.get(L.target,"all");if(typeof y!=="function")P("hands_repl_private_profile_probe_unavailable");let E=await Reflect.apply(y,L.target,[]);if(!Array.isArray(E)||E.length>WQ||!E.every(k0))P("hands_repl_private_profile_probe_unavailable");S=E}for(let y of S){let E=Reflect.get(y,"isVisible");if(typeof E!=="function"||!await Reflect.apply(E,y,[]))P("hands_repl_private_profile_hidden_value_denied")}}if(T==="press"&&typeof U[0]==="string"&&P1(U[0]))P("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")P("hands_repl_private_profile_probe_unavailable");let y=await Reflect.apply(S,L.target,[R1]);if(!K0(y)||typeof y.password!=="boolean"||typeof y.executableLink!=="boolean")P("hands_repl_private_profile_probe_unavailable");if(T==="inputValue"&&y.password)P("hands_repl_private_profile_password_denied");if(T!=="inputValue"&&y.executableLink)P("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,[]))P("hands_repl_private_profile_hidden_value_denied")}}}let W=UQ[L.kind][K.method];if(!W)P("hands_repl_method_not_allowed");if(W.requiresStringSource&&typeof U[0]!=="string")P("hands_repl_string_source_required");if(L.kind==="browser"&&K.method==="contexts")return[z.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(K.method)&&U.some((T)=>K0(T)&&("path"in T)))P("hands_repl_file_path_not_allowed");if(K.method==="goto"&&typeof U[0]==="string"){let T;try{T=new URL(U[0]).protocol}catch{P("hands_repl_invalid_url")}if(!["http:","https:","data:","about:","blob:"].includes(T))P("hands_repl_file_path_not_allowed")}if(W.special==="contextViewportSize"){let T=Reflect.get(L.target,"pages");if(typeof T!=="function")P("hands_repl_method_unavailable");let S=await Reflect.apply(T,L.target,[]),y=Array.isArray(S)?S[0]:void 0,E=k0(y)?Reflect.get(y,"viewportSize"):void 0;if(typeof E!=="function")return J8();return V(await Reflect.apply(E,y,[]),W.returns)}if(W.special==="property"){let T=Reflect.get(L.target,K.method);return V(typeof T==="function"?Reflect.apply(T,L.target,[]):T,W.returns)}let j=Reflect.get(L.target,K.method);if(typeof j!=="function")P("hands_repl_method_unavailable");if(W.special==="route"){let T=U[1];if(!KQ(T))P("hands_repl_invalid_route_handler");K9(T.options);let S=B(T.options),y=async(M)=>{if(!k0(M))P("hands_repl_invalid_route");let D=Reflect.get(M,"fulfill");if(typeof D!=="function")P("hands_repl_invalid_route");await Reflect.apply(D,M,[S])},E=[B(U[0]??null),y],N=await Reflect.apply(j,L.target,E);return V(N,W.returns)}let O=U.map(B);if(K.method==="setInputFiles"){let T=L.kind==="locator"?0:1,S=async(E)=>{if(typeof E!=="string"){if(!K0(E)||typeof E.name!=="string"||typeof E.mimeType!=="string"||!z9.isBuffer(E.buffer))P("hands_repl_invalid_file_input");return E}if(!$.readWorkspaceFile)P("hands_repl_workspace_required");return $.readWorkspaceFile(E)},y=O[T];O[T]=Array.isArray(y)?await Promise.all(y.map(S)):await S(y)}if(K.method==="goto")await $.beforeNavigation?.();let C=$.actionRecorder?.(),A=await Reflect.apply(j,L.target,O),I={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"}[K.method];if(I){let T=Reflect.get(L.target,"page"),S=L.kind==="page"?L.target:typeof T==="function"?Reflect.apply(T,L.target,[]):void 0;C?.(I,k0(S)?S:void 0)}return V(A,W.returns)}})}import{isIP as qQ}from"net";import{Resolver as b1}from"dns/promises";import{isIP as G8}from"net";var k1=[["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 t8($){if(G8($)!==4)return null;let Z=$.split(".");if(Z.length!==4)return null;let Q=0;for(let X of Z){let J=Number(X);if(!Number.isInteger(J)||J<0||J>255)return null;Q=Q*256+J}return Q>>>0}function f1($,Z,Q){let X=t8(Z);if(X===null)return!1;let J=Q===0?0:4294967295<<32-Q>>>0;return($&J)>>>0===(X&J)>>>0}function LQ($){let Z=t8($);if(Z===null)return!0;return k1.some(([Q,X])=>f1(Z,Q,X))}function m1($){if(G8($)!==6)return null;let Z=$.toLowerCase(),Q=Z.indexOf("%");if(Q>=0)Z=Z.slice(0,Q);let X=[],J=Z.lastIndexOf(":"),Y=J>=0?Z.slice(J+1):"";if(Y.includes(".")){let K=t8(Y);if(K===null)return null;X=[K>>>16&65535,K&65535],Z=Z.slice(0,J+1)+"0:0"}let z=Z.split("::");if(z.length>2)return null;let F=(K)=>{if(K==="")return[];let L=[];for(let U of K.split(":")){if(U===""||U.length>4||!/^[0-9a-f]+$/.test(U))return null;L.push(Number.parseInt(U,16))}return L},G=F(z[0]??"");if(G===null)return null;if(z.length===1){let K=G;if(K.length!==8)return null;return X.length>0?K.slice(0,6).concat(X):K}let V=F(z[1]??"");if(V===null)return null;let B=8-G.length-V.length;if(B<0)return null;let H=G.concat(Array(B).fill(0),V);if(H.length!==8)return null;return X.length>0?H.slice(0,6).concat(X):H}function y1($,Z){return`${$>>8&255}.${$&255}.${Z>>8&255}.${Z&255}`}function g1($){let Z=m1($);if(Z===null)return!0;let[Q,X,J]=Z;if((Q&57344)!==8192)return!0;if(Q===8193&&(X&65024)===0)return!0;if(Q===8193&&X===3512)return!0;if(Q===16383&&(X&61440)===0)return!0;if(Q===8194)return LQ(y1(X,J));return!1}function NQ($){return $.replace(/^\[|\]$/g,"")}function Y8($){let Z=NQ($.trim()),Q=G8(Z);if(Q===4)return LQ(Z);if(Q===6)return g1(Z);return!0}function MQ($){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 jQ=5000;function h1($){return async(Z,Q)=>{if(Q?.aborted)throw Error("aborted");let X=new b1({timeout:jQ,tries:1});if($)X.setServers($);let J=()=>X.cancel();Q?.addEventListener("abort",J,{once:!0});try{let[Y,z]=await Promise.allSettled([X.resolve4(Z),X.resolve6(Z)]),F=[...Y.status==="fulfilled"?Y.value:[],...z.status==="fulfilled"?z.value:[]];if(F.length>0)return F;let G=[Y,z].flatMap((B)=>B.status==="rejected"?[B.reason]:[]);throw G.find((B)=>["dns_temporary","dns_timeout"].includes(MQ(B)))??G[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{Q?.removeEventListener("abort",J)}}}var v1=h1();async function c1($,Z,Q,X){if(X?.aborted)throw Error("aborted");let J=new AbortController,Y,z,F=Z($,J.signal);F.catch(()=>{});try{return await Promise.race([F,new Promise((G,V)=>{if(Y=setTimeout(()=>V(new DOMException("DNS lookup timed out","TimeoutError")),Q),X)z=()=>V(Error("aborted")),X.addEventListener("abort",z,{once:!0})})])}finally{if(Y!==void 0)clearTimeout(Y);if(X&&z)X.removeEventListener("abort",z);J.abort()}}async function m5($,Z=v1,Q){let X=NQ($);if(G8(X))return Y8(X)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[X]};let J;try{J=await c1(X,Z,jQ,Q)}catch(Y){return{ok:!1,reason:Q?.aborted?Q.reason instanceof Error&&Q.reason.name==="TimeoutError"?"dns_timeout":"aborted":MQ(Y)}}if(J.length===0)return{ok:!1,reason:"dns_empty"};if(J.some(Y8))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:J}}var d1=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function e8($){return $.length<=253&&d1.test($.toLowerCase())}function p1($,Z){let Q=$.trim().toLowerCase();if(!e8(Q))return!1;if(Q.startsWith("*.")){let X=Q.slice(2);return Z===X||Z.endsWith(`.${X}`)}return Q===Z}function u1($){let Z=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec($);if(!Z)return null;let Q=Z.slice(1).map(Number);return Q.some((X)=>X>255)?null:Q}function $$($,Z=[]){let Q=(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),z=parseInt(J[2],16);return`${Y>>8}.${Y&255}.${z>>8}.${z&255}`};return Z.some((X)=>Q(X)===Q($))}function l0($){$=$.toLowerCase().replace(/^\[|\]$/g,"");let Z=u1($);if(Z){let[Y,z,F]=Z;if(Y===127)return"loopback";return Y===0||Y===10||Y>=224||Y===100&&z>=64&&z<=127||Y===169&&z===254||Y===172&&z>=16&&z<=31||Y===192&&(z===168||z===0&&(F===0||F===2)||z===88&&F===99)||Y===198&&(z===18||z===19||z===51&&F===100)||Y===203&&z===0&&F===113?"private":"public"}if(!$.includes(":"))return"hostname";try{$=new URL(`http://[${$}]/`).hostname.slice(1,-1)}catch{return"private"}if($==="::1")return"loopback";let Q=/^::ffff:([\da-f]+):([\da-f]+)$/.exec($);if(Q){let Y=parseInt(Q[1],16),z=parseInt(Q[2],16);return l0(`${Y>>8}.${Y&255}.${z>>8}.${z&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 b9($,Z){let Q;try{Q=new URL($)}catch{return{allowed:!1,url:$,host:null,reason:"invalid_url"}}if(["about:","data:","blob:"].includes(Q.protocol))return{allowed:!0,url:$,host:null,reason:"local_document"};if(!["http:","https:","ws:","wss:"].includes(Q.protocol))return{allowed:!1,url:$,host:Q.hostname||null,reason:"unsupported_protocol"};let X=Q.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(Z.mode==="off")return{allowed:!0,url:$,host:X,reason:"policy_off"};let J=(F)=>({allowed:!1,url:$,host:X,reason:F});if(Q.username||Q.password)return J("invalid_url");if(Z.mode==="public_web"){let F=l0(X)!=="public"&&l0(X)!=="hostname"||X==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(X)||!X.includes(".")&&!qQ(X)||Boolean(qQ(X)&&Y8(X));return{allowed:!F,url:$,host:X,reason:F?"private_network":"public_web"}}let Y=Number(Q.port||(["https:","wss:"].includes(Q.protocol)?443:80));if(Z.deniedPorts?.includes(Y)||$$(X,Z.deniedHosts))return J("destination_not_allowed");let z=l0(X);if(z==="private"||["local","internal","arpa"].some((F)=>X===F||X.endsWith(`.${F}`)))return J("private_network");if(z==="loopback"||X==="localhost"||X.endsWith(".localhost"))return Z.allowedLoopbackPorts?.includes(Y)?{allowed:!0,url:$,host:X,reason:"loopback"}:J("destination_not_allowed");if(Z.allowedDomains.some((F)=>p1(F,X)))return{allowed:!0,url:$,host:X,reason:"allowed_domain"};return{allowed:!1,url:$,host:X,reason:"destination_not_allowed"}}import TQ from"child_process";import{accessSync as s1,constants as n1,readFileSync as i1,statSync as DQ}from"fs";import{createRequire as _Q}from"module";import{homedir as Z$}from"os";import{dirname as a1,isAbsolute as Q$,join as s0,resolve as o1,win32 as r1}from"path";var z8=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:OQ.dependencies["playwright-core"],browser:"chromium"}),AQ=["/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"],X$=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function t1($=process.env){let Z=[$.ProgramFiles??"C:\\Program Files",$["ProgramFiles(x86)"]??"C:\\Program Files (x86)"],Q=$.LOCALAPPDATA?[$.LOCALAPPDATA]:[],X=(J,...Y)=>J.map((z)=>r1.join(z,...Y));return[...X([...Z,...Q],"Google","Chrome","Application","chrome.exe"),...X(Z,"Microsoft","Edge","Application","msedge.exe"),...X([...Z,...Q],"BraveSoftware","Brave-Browser","Application","brave.exe")]}function k9($){try{return s1($,n1.X_OK),Q$($)&&DQ($).isFile()}catch{return!1}}function J$($,Z=process.platform){let Q=Z==="darwin"?AQ:Z==="linux"?X$:Z==="win32"?t1():null;return Q?($??Q).find(k9)??null:null}function e1(){if(!process.versions.bun)return;let $=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,$))return;let Z=[];TQ.spawn=new Proxy(TQ.spawn,{apply(Q,X,J){let Y=Reflect.apply(Q,X,J),z=J[1],F=J[2]?.stdio;if(Array.isArray(z)&&z.includes("--remote-debugging-pipe")&&Array.isArray(F)&&F[3]==="pipe"&&F[4]==="pipe")Z.push(Y);return Y}}),Object.defineProperty(globalThis,$,{value:Z})}async function K8($){if(e1(),$!==void 0){if(!Q$($))throw Error("hands_browser_driver_path_must_be_absolute");let X=s0($,"package.json"),J=JSON.parse(i1(X,"utf8"));if(J.name!==z8.driver)throw Error("hands_browser_wrong_driver");let Y=_Q(X)($),z=Y.default?.chromium??Y.chromium;if(!z)throw Error("hands_browser_missing_chromium");return{version:J.version,chromium:z}}let[Z,Q]=await Promise.all([import("./index-2kk983b8.js"),import("./package-qjr5q0bp.js").then((m)=>l1(m.default,1))]);return{version:Q.default.version,chromium:Z.chromium}}var $7=($,Z=z8.driverVersion)=>({status:"unavailable",reason:$,expectedDriverVersion:Z}),Z7=($)=>$.loadDriver?.()??K8($.driverModuleDirectory),Q7={"1.60.0":"1223"};function n5(){let $=process.platform,Z=Q7[z8.driverVersion];if(!Z||$!=="linux"&&$!=="darwin"&&$!=="win32")return!1;let Q=(X)=>process.env[X]??process.env[`npm_config_${X.toLowerCase()}`]??process.env[`npm_package_config_${X.toLowerCase()}`];try{let X=Q("PLAYWRIGHT_BROWSERS_PATH"),J=X==="0"?s0(a1(_Q(import.meta.url).resolve("playwright-core/package.json")),".local-browsers"):X?o1(Q("INIT_CWD")||process.cwd(),X):s0($==="darwin"?s0(Z$(),"Library","Caches"):$==="win32"?process.env.LOCALAPPDATA||s0(Z$(),"AppData","Local"):process.env.XDG_CACHE_HOME||s0(Z$(),".cache"),"ms-playwright");return DQ(s0(J,`chromium-${Z}`,"INSTALLATION_COMPLETE")).isFile()}catch{return!1}}async function F9($={}){return xQ($,z8.driverVersion)}async function Y$($,Z={}){if($.driverVersion!=="1.61.1"||!Q$($.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return xQ({...Z,driverModuleDirectory:$.driverModuleDirectory,allowSystemBrowser:!0},$.driverVersion)}async function xQ($,Z){let Q=(G)=>$7(G,Z),X=$.platform??process.platform;if(X!=="linux"&&X!=="darwin"&&X!=="win32")return Q("unsupported_platform");let J;try{J=await Z7($)}catch{return Q("driver_missing")}if(J.version!==Z)return Q("driver_version_mismatch");let Y=(G,V)=>({status:"resolved",executablePath:G,source:V,driverVersion:J.version});if($.executablePath!==void 0)return k9($.executablePath)?Y($.executablePath,"configured"):Q("executable_missing");let z=J.chromium.executablePath();if(k9(z))return Y(z,"managed");let F=$.allowSystemBrowser===!0?J$($.systemCandidates,X):null;return F?Y(F,"system"):Q("executable_missing")}var L7=["/usr/local/bin/chromium",...X$];function N7($,Z=bQ()){return J$($??(Z==="linux"?L7:void 0),Z)}async function M7(){try{return(await K8()).chromium}catch{return V7(import.meta.url)("playwright-core").chromium}}var j7=1048576,q7=105000,C7=20000,RQ=5000,T7=2000,O7=1000,D7=30000,EQ=81920,_7={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function A7($,Z){let Q=new URL($.url()),X={...await $.allHeaders(),host:Q.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 F=(Q.protocol==="https:"?W7:H7)(Q,{method:$.method(),headers:X,agent:!1,lookup:(V,B,H)=>{let K=n0.isIP(Z);if(B.all)H(null,[{address:Z,family:K}]);else H(null,Z,K)}},(V)=>{let B=[],H=0;V.on("data",(K)=>{if(H+=K.length,H>33554432)F.destroy(Error("hands_browser_response_too_large"));else B.push(K)}),V.on("error",Y),V.on("end",()=>{let K={};for(let[L,U]of Object.entries(V.headers))if(U!==void 0&&!["transfer-encoding","connection","content-length"].includes(L))K[L]=Array.isArray(U)?U.join(`
306
- `):U;J({status:V.statusCode??502,headers:K,body:Buffer.concat(B)})})}),G=setTimeout(()=>F.destroy(Error("hands_browser_fetch_timeout")),D7);F.once("close",()=>clearTimeout(G)),F.on("error",Y),F.end($.postDataBuffer()??void 0)})}async function x7($,Z,Q=()=>{},X={lookup:(J)=>F7(J,{all:!0}),fetch:A7}){let J=new WeakSet,Y=new WeakMap,z=(F)=>{let G=Y.get(F);if(G)return G;let V=(async()=>{if(!$.newCDPSession)return;let B=await $.newCDPSession(F),H=new Map;B.on("Network.loadingFinished",({requestId:K})=>H.delete(K)),B.on("Network.loadingFailed",({requestId:K})=>H.delete(K)),B.on("Fetch.requestPaused",async(K)=>{let L=K.networkId??K.requestId,U=K.redirectedRequestId?(H.get(L)??0)+1:0;H.set(L,U);let W=b9(K.request.url,Z),j=Z.mode==="enforce"&&Boolean(K.redirectedRequestId)&&W.host!==null&&!n0.isIP(W.host),O=!W.allowed?W:j?{...W,allowed:!1,reason:"destination_not_allowed"}:U>20?{...W,allowed:!1,reason:"redirect_not_supported"}:null;try{if(O)Q(O),await B.send("Fetch.failRequest",{requestId:K.requestId,errorReason:"BlockedByClient"});else await B.send("Fetch.continueRequest",{requestId:K.requestId})}catch{await B.send("Fetch.failRequest",{requestId:K.requestId,errorReason:"Failed"}).catch(()=>{})}}),await B.send("Network.enable"),await B.send("Fetch.enable",{patterns:[{urlPattern:"*",requestStage:"Request"}]}),J.add(F)})();return Y.set(F,V),V};return await $.route("**/*",async(F)=>{let G=F.request().url(),V=b9(G,Z);if(V.allowed&&Z.mode==="public_web"){await F.continue();return}let B=F.request();if(V.allowed&&V.host&&n0.isIP(V.host)&&B.isNavigationRequest?.()){let H=B.frame();if(J.has(H.page())&&H===H.page().mainFrame()){await F.continue();return}}if(V.allowed&&(Z.mode==="off"||V.reason==="local_document")){await F.continue();return}if(V.allowed&&V.host)try{let H=V.host,K=l0(H),L,U=await(async()=>{if(K!=="hostname")return[{address:H,family:n0.isIP(H)}];if(V.reason==="loopback")return[{address:"127.0.0.1",family:4}];try{return await Promise.race([X.lookup(H),new Promise((W,j)=>{L=setTimeout(()=>j(Error("hands_browser_dns_timeout")),5000)})])}finally{if(L)clearTimeout(L)}})();if(!U.length||U.some(({address:W})=>{let j=l0(W);return!n0.isIP(W)||Z.mode==="enforce"&&$$(W,Z.deniedHosts)||(V.reason==="loopback"?j!=="loopback":j!=="public")}))V={...V,allowed:!1,reason:"private_network"};else{let W=await X.fetch(F.request(),U[0].address);if(W.status>=300&&W.status<400){let j=W.headers.location??G;try{j=new URL(j,G).href}catch{}let O=b9(j,Z);V=O.allowed?{...O,allowed:!1,reason:"redirect_not_supported"}:O}else{await F.fulfill(W);return}}}catch{await F.abort("failed");return}Q(V),await F.abort("blockedbyclient")}),await $.routeWebSocket("**/*",async(F)=>{let G=b9(F.url(),Z);if(Z.mode==="enforce"&&G.allowed&&(!G.host||!n0.isIP(G.host)))G={...G,allowed:!1,reason:"destination_not_allowed"};if(G.allowed){F.connectToServer();return}Q(G),await F.close({code:1008,reason:"Reason egress policy denied"})}),Z.mode==="off"?void 0:{preparePage:z}}async function kQ($,Z=bQ(),Q){if(Q){let J=await Y$(Q,{platform:Z,systemCandidates:$});return J.status==="resolved"?J.executablePath:null}if($!==void 0){let J=N7($,Z);if(J)return J}let X=await F9({platform:Z,systemCandidates:$,allowSystemBrowser:!0});return X.status==="resolved"?X.executablePath:null}function SQ($,Z){if(!$)throw Error("hands_repl_workspace_required");let Q=z$($),X=V9($),J=K$(X,V9(X,Z)),z=J!==".."&&!J.startsWith(`..${F$}`)&&!PQ(J)?V9(Q,J):V9(Q,Z);if(b0(V9(X,Z))||b0(z))throw Error("hands_repl_protected_path");let F=(U)=>{let W=K$(Q,U);return W!==""&&W!==".."&&!W.startsWith(`..${F$}`)&&!PQ(W)},G=z$(z);if(b0(G))throw Error("hands_repl_protected_path");if(!F(z)||!F(G))throw Error("hands_repl_file_outside_workspace");let V=K$(Q,z).split(F$),B=[Q,...V.map((U,W)=>V9(Q,...V.slice(0,W+1)))],H=B.map((U)=>IQ(U));if(H.some((U)=>U.isSymbolicLink()))throw Error("hands_repl_file_symlink");let K=H[H.length-1];if(!K.isFile()||K.nlink!==1||K.size>16777216)throw Error("hands_repl_file_not_regular_or_too_large");let L=G7(z,G$.O_RDONLY|G$.O_NOFOLLOW|G$.O_NONBLOCK);try{let U=Y7(L);if(U.dev!==K.dev||U.ino!==K.ino||!U.isFile())throw Error("hands_repl_file_changed");for(let C=0;C<B.length;C++){let A=IQ(B[C]);if(A.dev!==H[C].dev||A.ino!==H[C].ino||A.isSymbolicLink())throw Error("hands_repl_file_changed")}if(!F(z$(z)))throw Error("hands_repl_file_outside_workspace");let W=Buffer.alloc(16777217),j=0;while(j<W.length){let C=z7(L,W,j,W.length-j,null);if(!C)break;j+=C}if(j===W.length)throw Error("hands_repl_file_too_large");let O=W.subarray(0,j);return{name:U7(z),mimeType:_7[B7(z).toLowerCase()]??"application/octet-stream",buffer:O}}finally{J7(L)}}function H9($,Z){$.end(`${JSON.stringify(Z)}
307
- `)}function F8($){try{K7($)}catch{}}async function fQ($){if($.managedBrowser&&$.driverModuleDirectory!==void 0)throw Error("hands_browser_ambiguous_driver_configuration");let Z=$.launch||$.targetContext?null:$.managedBrowser?await Y$($.managedBrowser,{executablePath:$.browserExecutablePath}):await F9({executablePath:$.browserExecutablePath,driverModuleDirectory:$.driverModuleDirectory});if(Z?.status==="unavailable")throw Error(`hands_browser_${Z.reason}`);let Q=Z?.status==="resolved"?Z.executablePath:$.browserExecutablePath;if(!Q||!k9(Q))throw Error("hands_browser_unavailable");let X=$.launch??(async(N)=>($.targetContext?await M7():(await K8($.managedBrowser?.driverModuleDirectory??$.driverModuleDirectory)).chromium).launch(N)),J=[],Y={},z=null,F=null,G=null,V=null,B=!1,H=null,K=new Map,L=new WeakMap,U=null,W=()=>{if(B)throw Error("hands_repl_stopped");if(V)throw V},j=(N)=>{let M=L.get(N);if(M)return M;let D=Promise.resolve().then(()=>N.close()).then(()=>{K.delete(N)});return L.set(N,D),D},O=async()=>{let N=[...K.entries()].reverse(),M=U??=performance.now()+O7,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(_))),m=[];for(let[_,g]of k.entries()){if(g.status!=="rejected")continue;let c=g.reason instanceof Error&&["Error","TimeoutError","ProtocolError"].includes(g.reason.name)?g.reason.name:"unknown";m.push(Error(`hands_repl_close_failed: ${N[_][1]}: ${c}`))}if(m.length)throw AggregateError(m,"hands_repl_stop_unconfirmed")},C=(N,M)=>{if(K.set(N,M),B||V)j(N).catch(()=>{return}),W();return N},A=async()=>{let N=await X({executablePath:Q,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 x7(M,$.networkPolicy??{mode:"off"},$.onEgressDenied);if(W(),D){let b=M.newPage.bind(M);M.newPage=async()=>{let h=await b();return await D.preparePage(h),h}}let k=M.pages()[0]??await M.newPage();await D?.preparePage(k),W();let m=async(b=k)=>{let h=b;if(typeof h.ariaSnapshot==="function")return h.ariaSnapshot({timeout:1e4});return k.locator("body").innerText({timeout:1e4})},_=async(b,h={})=>{let d=h&&typeof h==="object"&&!Array.isArray(h)?h:{},n,z0="image/png";if(Buffer.isBuffer(b)||b instanceof Uint8Array)n=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)))n=Buffer.from(b.replace(/^data:[^,]*,/,""),"base64");else if(typeof b==="string"){let T0=SQ($.workspaceRoot,b);n=T0.buffer,z0=T0.mimeType}else throw Error("view() needs a Buffer, a base64 string, or a path to an image file");if(n.length===0)throw Error("view(): the image is empty");let M0=String(d.label??"").replace(/[\r\n>]+/g," ").trim().slice(0,120),W0=Number(d.maxWidth)||1024,U0=Number(d.quality)||72,g0=$.targetContext?await N.newPage():await M.newPage();try{let T0=`data:${z0};base64,${n.toString("base64")}`;for(let t=0;t<5;t+=1){let j0=await g0.evaluate(async(B0)=>{let q0=new Image;q0.src=B0.url,await q0.decode();let h0=Math.min(1,B0.maxWidth/q0.naturalWidth),G0=document.createElement("canvas");G0.width=Math.max(1,Math.round(q0.naturalWidth*h0)),G0.height=Math.max(1,Math.round(q0.naturalHeight*h0));let X0=G0.getContext("2d");if(!X0)throw Error("view(): canvas unavailable");return X0.fillStyle="#ffffff",X0.fillRect(0,0,G0.width,G0.height),X0.drawImage(q0,0,0,G0.width,G0.height),{data:G0.toDataURL("image/jpeg",B0.q/100).split(",")[1]??"",width:G0.width,height:G0.height,sourceWidth:q0.naturalWidth,sourceHeight:q0.naturalHeight}},{url:T0,maxWidth:W0,q:U0}),$9=Buffer.from(j0.data,"base64");if($9.length<=EQ){let B0=M0||"image";return`<<<ARA_VIEW_IMAGE ${j0.data} image/jpeg ${B0}>>>
308
- Viewing ${B0} (${j0.sourceWidth}x${j0.sourceHeight} source, sent at ${j0.width}x${j0.height}, ${Math.round($9.length/1024)}KB).`}if(W0>640)W0=Math.round(W0*0.75);else U0=Math.max(30,U0-15)}throw Error(`view(): could not reduce the image under ${Math.round(EQ/1024)}KB`)}finally{await g0.close().catch(()=>{return})}},g=BQ({browser:$.targetContext?.browser()??N,context:M,page:k,a11y:m,view:_,readWorkspaceFile:(b)=>SQ($.workspaceRoot,b),privateProfile:$.privateProfile,beforeNavigation:$.beforeNavigation,recording:$.recording,screenshotExport:$.screenshotExport,actionRecorder:()=>{let b=J,h=Y;return(d,n)=>{if(b.length<wQ)b.push(d);if(n)h.page=n}}}),c=async(b)=>{W();let h=C(await N.newContext({serviceWorkers:"block",acceptDownloads:!1}),"context");try{await h.route("**/*",(n)=>n.abort()),W(),await h.routeWebSocket("**/*",(n)=>n.close({code:1008,reason:"Reason evaluator network denied"})),W(),await h.exposeBinding("__araHandsRpc",async(n,z0)=>$.onBrowserOperation?$.onBrowserOperation(b,()=>g.dispatch(z0)):g.dispatch(z0)),W();let d=await h.newPage();return W(),await d.goto("data:text/html,<title>Reason Hands evaluator</title>"),W(),await d.evaluate(`(${JQ})(${JSON.stringify(g.roots)})`),{context:h,page:d,runId:b}}catch(d){throw await j(h).catch(()=>{return}),d}},u=await c(),r={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(r.evaluator.context),r.evaluator=await c(b)}};return W(),r}catch(D){throw await O().catch(()=>{return}),D}},R=async()=>{if(W(),z)return z;if(!G){F=A();let N;G=Promise.race([F,new Promise((M,D)=>{N=setTimeout(()=>D(Error("hands_browser_unavailable: startup timed out")),C7)})]).then((M)=>{return W(),z=M,M}).catch(async()=>{V=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")),RQ)})])}catch{V=Error("hands_browser_unavailable: startup cleanup unconfirmed")}finally{if(M)clearTimeout(M)}throw V}).finally(()=>{if(N)clearTimeout(N)})}return G},I=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(`(${YQ})(${JSON.stringify({code:N})})`);if(typeof u!=="string")throw Error("hands_repl_invalid_evaluator_output");let r=k.page;if(D&&r&&!u.includes("<<<ARA_VIEW_IMAGE")){let b=()=>w.captureProgressFrame(r);try{let h=await($.onBrowserOperation?$.onBrowserOperation(M,b):b());return k.automaticProgressImage=!0,`${u}
309
- ${h}`}catch{return`${u}
310
- Screen capture unavailable.`}}return u})(),g,c=new Promise((u,r)=>{g=setTimeout(()=>r(Error("REPL evaluation timed out after 105 seconds")),q7)});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(g)clearTimeout(g)}},T=Promise.resolve(),S=new Set,y=new Set;F8($.socketPath);let E=n0.createServer((N)=>{S.add(N),N.once("close",()=>{S.delete(N),y.delete(N)}),N.setEncoding("utf8");let M="",D=!1;N.on("data",(w)=>{if(D)return;if(M+=w,M.length>j7){D=!0,H9(N,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let k=M.indexOf(`
311
- `);if(k===-1)return;D=!0;let m=M.slice(0,k);if($.onControl)try{let _=JSON.parse(m);if(typeof _.action==="string"&&_.action!=="evaluate")y.add(N)}catch{}T=T.then(async()=>{if(N.destroyed)return;J=[],Y={};try{let _=JSON.parse(m);if(_.action==="probe"){let b=await R();await I("undefined",b.evaluator.runId),H9(N,{ok:!0,output:"ARA_HANDS_REPL_READY"});return}if(typeof _.action==="string"&&_.action!=="evaluate"&&$.onControl){H9(N,{ok:!0,output:await $.onControl(_.action,_)});return}if(_.action!=="evaluate"||typeof _.code!=="string")throw Error("Invalid REPL request");let g=_.code,c=typeof _.runId==="string"?_.runId:void 0,u=()=>I(g,c,_.includeProgressCapture===!0),r=await($.onEvaluate?$.onEvaluate(_,u):u());H9(N,{ok:!0,output:r,browserActions:J,...Y.automaticProgressImage?{automaticProgressImage:!0}:{}})}catch(_){H9(N,{ok:!1,error:_ instanceof Error?_.message:String(_),stack:_ instanceof Error?_.stack:void 0,browserActions:J})}}).catch((_)=>{H9(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{if(process.platform!=="win32")X7($.socketPath,384);N()}catch(D){E.close(()=>M(D))}})})}catch(N){throw F8($.socketPath),N}return{socketPath:$.socketPath,browserExecutablePath:Q,stop(){if(H)return H;B=!0;let N=y.size?setTimeout(()=>{for(let k of y)k.destroy()},T7):void 0,M=new Promise((k)=>E.close(()=>{if(N)clearTimeout(N);k()}));for(let k of S)if(!y.has(k))k.destroy();T.catch(()=>{return});let D=async()=>{await M,F8($.socketPath);let k=[O()];if(F)k.push(F.then(()=>{return},()=>{return}));let m=await Promise.allSettled(k),_=await Promise.allSettled([O()]),g=[...m,..._].filter((c)=>c.status==="rejected");if(g.length)throw AggregateError(g.map((c)=>c.reason),"hands_repl_stop_unconfirmed")},w;return H=Promise.race([D(),new Promise((k,m)=>{w=setTimeout(()=>m(Error("hands_repl_stop_timeout")),RQ)})]).finally(()=>{if(w)clearTimeout(w);F8($.socketPath)}),H}}}var I7=["private_runtime","runtime_root","temporary_directory","granted_root","workspace_layout","jobs","browser_socket","relay_url","environment_owner","job_environment","config_write"],P7=["ENOENT","EACCES","EPERM","EINVAL","ENOTDIR","EISDIR","ELOOP","EROFS","ENOSPC","EMFILE","ENFILE","EEXIST"];function mQ($,Z){if(!$||!I7.includes($))return null;let Q=typeof Z==="object"&&Z!==null&&"code"in Z?Z.code:null;return{workspace_stage:$,workspace_errno:typeof Q==="string"&&P7.includes(Q)?Q:"unknown"}}import{lstatSync as R7,readFileSync as E7}from"fs";var S7="/run/sc/egress-guard",w7=10002,V$=10003;function yQ($=process.platform,Z=S7){if($!=="linux")return!1;try{let Q=R7(Z);if(!Q.isFile()||Q.uid!==0||(Q.mode&18)!==0)return!1;return E7(Z,"utf8")===`v1 ${w7} ${V$}
312
- `}catch{return!1}}var b7=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function gQ($){let Z=b7.exec($.replace(/\/+$/,""));return Z?`${Z[1]}/repo`:null}import{randomUUID as R6}from"crypto";import{spawn as E6,spawnSync as S6}from"child_process";import{accessSync as w6,chmodSync as g9,closeSync as b6,constants as M9,fchmodSync as k6,fstatSync as f6,openSync as m6,copyFileSync as y6,existsSync as _$,lstatSync as o,statSync as e0,mkdtempSync as g6,mkdirSync as C9,realpathSync as s,renameSync as C8,rmSync as h6,writeFileSync as T8}from"fs";import{homedir as v6,tmpdir as D4}from"os";import{basename as c6,dirname as Y0,join as a,resolve as _4,sep as d6}from"path";var k7={"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 hQ($){return $===null?"other":k7[$]??"other"}function H0($,Z){if($===void 0||Z===void 0)return null;let Q=Math.round(Z-$);return Number.isSafeInteger(Q)&&Q>=0&&Q<=600000?Q:null}var p="workspace_mode",f0="granted_root",L0="project_root",W9="terminal_root",U9="terminal_benchmark_tool_profile",f7=["bash","bash-node-repl","bash-node-repl-files"],vQ="hands_node_repl_persistent_execution_unsupported";function cQ($){return $==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function H$($){return f7.includes($)}function MJ($){return dQ($)&&$.workspace_mode==="terminal_root"&&H$($.terminal_benchmark_tool_profile)}var N0="tool_scoped_standby";function jJ($){return dQ($)&&$[N0]===!0}function dQ($){return typeof $==="object"&&$!==null&&!Array.isArray($)}var DJ=x.object({device_id:x.string().uuid(),root_id:x.string().uuid()}),U$=/^reason\/[0-9a-f]{8}$/,m7=x.strictObject({source_path:x.string().refine(i0).optional(),branch:x.string().regex(U$)}),_J=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(i0).optional(),worktree:m7.optional()})});import{execFile as y7}from"child_process";var g7=20000,h7=1e4,pQ=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,v7=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function uQ($,Z=c7){let Q=(j,O=h7)=>Z([...v7,"-C",$,...j],O),X=async(j)=>{let O=await Q(j);return O.status===0?O.stdout.trim():null},J=await X(["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(!J||!pQ.test(J))return null;let Y=J.slice(0,12),z=(j)=>({commit:J,from:"head",note:`reason: started from ${j}`}),F=await X(["symbolic-ref","--quiet","HEAD"]);if(!F?.startsWith("refs/heads/"))return z(`the checkout's detached HEAD ${Y}`);let G=F.slice(11),V=await Q(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(V.status!==0||V.stdout.trim())return z(`${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 z(`${G} at ${Y}: it has no upstream to catch up with`);let K=B==="."||(await Q(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",B,H],g7)).status===0,L=await X(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),U=L?await X(["rev-parse","--verify","--quiet","@{upstream}^{commit}"]):null;if(!L||!U||!pQ.test(U))return z(`${G} at ${Y}: ${K?"it has no upstream to catch up with":`fetching ${B} failed`}`);if(!K)return z(`${G} at ${Y}: fetching ${L} failed, so it may be behind`);if(U===J)return z(`${G} at ${Y}, the same commit as ${L} after fetching it`);if((await Q(["merge-base","--is-ancestor",J,U])).status!==0)return z(`${G} at ${Y}: it has commits that ${L} does not`);let W=await X(["rev-list","--count",`${J}..${U}`]);return{commit:U,from:"upstream",note:`reason: started from ${L} at ${U.slice(0,12)}, fetched just now: ${G} had no commits of its own and was ${W??"some"} commits behind it`}}function c7($,Z){return new Promise((Q)=>{y7("git",$,{encoding:"utf8",timeout:Z,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(X,J)=>{let Y=X?typeof X.code==="number"?X.code:null:0;Q({status:Y,stdout:String(J??"")})})})}import{execFile as d7}from"child_process";import{lstatSync as N$,readdirSync as B$,readFileSync as nQ,realpathSync as V8,rmdirSync as lQ,unlinkSync as p7,writeFileSync as u7}from"fs";import{readFile as l7}from"fs/promises";import{join as x0,resolve as sQ}from"path";var f9=".reason-device",s7=86400000,n7=500,i7=60000;function iQ($,Z,Q){let X=Z.split("/"),J=B9.split("/");if(X.length!==J.length+2||J.some((Y,z)=>X[z]!==Y)||!H8.test(X[J.length]))return;try{let Y=aQ($,X[J.length]);u7(x0(Y,f9),Q,{flag:"wx",mode:384})}catch{}}function aQ($,Z){let Q=()=>new q("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!H8.test(Z))throw Q();let X=x0(V8($),B9),J=x0(X,Z);if(!N$(J).isDirectory()||V8(J)!==J)throw Q();return J}async function a7($,Z,Q=r7){let X;try{X=aQ($,Z)}catch(J){if(L$(J))return!0;throw J}for(let J of B$(X,{withFileTypes:!0})){if(J.name===f9||!J.isDirectory())continue;let Y=x0(X,J.name),z=await o7(Y);if(z){let F=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false",`--git-dir=${z}`,"worktree"];if((await Q([...F,"remove","--force",Y])).status===0)await Q([...F,"prune"])}else try{lQ(Y)}catch{}}if(B$(X).some((J)=>J!==f9))return!1;try{p7(x0(X,f9))}catch(J){if(!L$(J))throw J}return lQ(X),!0}async function o7($){try{let Z=x0($,".git");if(!N$(Z).isFile())return null;let Q=/^gitdir: (.+)$/m.exec(nQ(Z,"utf8"));if(!Q)return null;let X=sQ($,Q[1].trim());return sQ(X,(await l7(x0(X,"commondir"),"utf8")).trim())}catch{return null}}async function kJ($){let Z;try{if(Z=x0(V8($.home),B9),!N$(Z).isDirectory())return{status:"skipped",reason:"workspace_untrusted"};if(V8(Z)!==Z)return{status:"skipped",reason:"workspace_untrusted"}}catch(Y){if(L$(Y))return{status:"skipped",reason:"no_workspace"};throw Y}let Q=B$(Z,{withFileTypes:!0}).filter((Y)=>Y.isDirectory()&&H8.test(Y.name)).map((Y)=>Y.name).filter((Y)=>{try{return nQ(x0(Z,Y,f9),"utf8")===$.deviceId}catch{return!1}}).sort().slice(0,n7);if(!Q.length)return{status:"done",removed:[],kept:[],failed:[]};let X=await $.liveIds(Q);if(X===null)return{status:"skipped",reason:"server_unsupported"};let J={status:"done",removed:[],kept:Q.filter((Y)=>X.includes(Y)),failed:[]};for(let Y of Q.filter((z)=>!X.includes(z)))(await a7($.home,Y,$.runGit).catch(()=>!1)?J.removed:J.failed).push(Y);return J}function fJ($,Z,Q=s7){if(Z.aborted)return;let X=!1,J=()=>{if(X||Z.aborted)return;X=!0,$().catch(()=>{return}).finally(()=>{X=!1})},Y=setInterval(J,Q);Y.unref?.(),Z.addEventListener("abort",()=>clearInterval(Y),{once:!0}),J()}function L$($){return typeof $==="object"&&$!==null&&$.code==="ENOENT"}function r7($){return new Promise((Z)=>{d7("git",$,{encoding:"utf8",timeout:i7,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(Q,X,J)=>{let Y=Q&&typeof Q.code==="number"?Q.code:null;Z({status:Q?Y??1:0,stderr:J??""})})})}import{createHash as t7}from"crypto";import{join as e7}from"path";function $6($){return W8($)}function I0(){throw new q("environment_unavailable","The private Session environment is unavailable or stale.")}function U8($){return t7("sha256").update(JSON.stringify({...$,variables:Object.fromEntries(Object.entries($.variables).sort(([Z],[Q])=>Z.localeCompare(Q)))})).digest("hex")}function rQ($,Z){L8($);let Q=e7($,"environment.json"),X,J=new Set,Y=(F,G)=>`${G}:${F}`,z=(F)=>{let G=vZ.safeParse(F);if(!G.success)return I0();let V=G.data,B=Z.identity(),H=Date.parse(V.expires_at);if(!B||V.run_id!==Z.runId||V.device_id!==Z.deviceId||V.root_id!==Z.rootId||V.binding.kind!==Z.binding.kind||V.binding.target_revision!==Z.binding.target_revision||V.binding.root_grant_revision!==Z.binding.root_grant_revision||V.binding.target_generation!==B.generation||V.binding.target_fence_id!==B.fenceId||H<=Date.now()||H>Z.expiresAtMs||Z.expiresAtMs<=Date.now()||Object.keys(V.variables).some((K)=>!$6(K)))return I0();if(V.git){let K=new URL(Z.apiOrigin),L=new URL(V.git.base_url),U=Date.parse(V.git.expires_at);if(L.origin!==K.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||U<=Date.now()||U>H)return I0()}if(V.cloud_access&&!gZ(V.cloud_access,Z.apiOrigin))throw new q("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return V};return{path:Q,install(F){let G=z(F),V=U8(G);if(X&&(G.revision<X.revision||G.revision===X.revision&&(V!==X.hash||G.snapshot_id!==X.snapshotId)))return I0();if(!X||G.revision>X.revision){if(oQ(Q,G,_0.snapshotBytes),U8(z(JSON.parse(B8(Q,_0.snapshotBytes))))!==V)return I0();let B=X;if(X={revision:G.revision,hash:V,snapshotId:G.snapshot_id,generation:G.binding.target_generation},B&&B.generation<X.generation)J.add(Y(B.snapshotId,B.revision))}else if(U8(z(JSON.parse(B8(Q,_0.snapshotBytes))))!==X.hash)return I0();return{installed:!0,snapshot_id:G.snapshot_id,installed_revision:G.revision}},current(){if(!X)return I0();try{let F=z(JSON.parse(B8(Q,_0.snapshotBytes)));if(U8(F)!==X.hash)return I0();return F}catch{return I0()}},carried:(F,G)=>J.has(Y(F,G))}}var L9=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})]),Z6="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",Q6=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",Z6]),tQ=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),rJ=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),tJ=new Set([F0,...L9.map(($)=>$.artifact_sha256),...Q6,...tQ]);var eJ=new Set([F0,...L9.filter(($)=>$.pi_tools_v1).map(($)=>$.artifact_sha256),...tQ]);var $Y=new Set([F0,...L9.filter(($)=>$.pi_tools_confinement_v1).map(($)=>$.artifact_sha256)]);var ZY=new Set([F0,...L9.filter(($)=>$.home_folder_v1).map(($)=>$.artifact_sha256)]);var QY=new Set([F0,...L9.filter(($)=>$.background_bash_v1).map(($)=>$.artifact_sha256)]);var XY=new Set([F0,...L9.filter(($)=>$.machine_sdk_v1).map(($)=>$.artifact_sha256)]);var X6=[a0,"reason-hands-worker.cjs"];function eQ($){return typeof $==="string"&&X6.includes($)}var J6;function $4(){return J6??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as Y6,constants as M$,fstatSync as Z4,lstatSync as G6,openSync as z6,readSync as K6,realpathSync as F6,watch as V6}from"fs";import{dirname as Q4}from"path";function N8($,Z){let Q;try{let X=Q4($),J=G6(X);if(!J.isDirectory()||J.isSymbolicLink()||!Y9(J,18)||F6(X)!==X)return null;Q=z6($,M$.O_RDONLY|M$.O_NOFOLLOW|M$.O_NONBLOCK);let Y=Z4(Q);if(!Y.isFile()||Y.nlink!==1||!Y9(Y)||Y.size<1||Y.size>8192)return null;let z=Buffer.alloc(8193),F=K6(Q,z,0,z.length,0),G=Z4(Q);if(F!==Y.size||G.size!==Y.size||G.nlink!==1||G.mtimeMs!==Y.mtimeMs||G.ctimeMs!==Y.ctimeMs)return null;let V=JSON.parse(z.subarray(0,F).toString("utf8"));if(!V||V.pid!==Z.pid||!Number.isSafeInteger(V.pid)||V.pid<1||V.launchId!==Z.launchId||V.workerVersion!==Z.workerVersion||V.protocolVersion!==Z.protocolVersion||V.workerArtifactSha256!==Z.workerArtifactSha256||V.workerEntrypoint!==Z.workerEntrypoint||V.workspaceAliasReady!==!0||!w0(V.targetGeneration)||!w0(V.generation)||!O0(V.fenceId))return null;return{...Z,generation:V.generation,targetGeneration:V.targetGeneration,fenceId:V.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(Q!==void 0)Y6(Q)}}var H6=($,Z,Q)=>{let X=V6($,{persistent:!1},Z);return X.on("error",Q),X};function X4($){let Z=new AbortController,Q=$.initial,X=Q.targetGeneration,J=!1,Y=!1,z,F,G=()=>{if(Y)return;Y=!0,z?.close(),z=void 0,clearInterval(F),$.signal.removeEventListener("abort",G),Z.abort()},V=()=>{if(Y)return;if(!$.isAlive()){G();return}let B=N8($.path,$.initial);if(!B||B.generation<Q.generation||B.targetGeneration<Q.targetGeneration||B.targetGeneration===Q.targetGeneration&&B.fenceId!==Q.fenceId)return;if(Q=B,J||B.targetGeneration<=X)return;X=B.targetGeneration,J=!0,Promise.resolve().then(()=>{return Z.signal.throwIfAborted(),$.publish(B,Z.signal)}).catch(()=>{if(!Y)G(),$.failed?.()}).finally(()=>{J=!1,V()})};if($.signal.aborted)return G(),{stop:G};$.signal.addEventListener("abort",G,{once:!0});try{z=($.watch??H6)(Q4($.path),V,()=>{z?.close(),z=void 0})}catch{}return F=setInterval(V,1000),F.unref?.(),V(),{stop:G}}import{spawn as W6}from"child_process";import{chmodSync as U6,mkdtempSync as B6,realpathSync as L6,rmSync as N6,unlinkSync as M6,writeFileSync as j6}from"fs";import q6 from"net";import{platform as C6,tmpdir as T6}from"os";import{join as J4}from"path";var Y4=1048576,C$=105000,O6=2000,D6=String.raw`
313
- const { writeSync } = require("node:fs");
314
- const { createRequire } = require("node:module");
315
- const { join } = require("node:path");
316
- const { createInterface } = require("node:readline");
317
- const { formatWithOptions, inspect } = require("node:util");
318
- const vm = require("node:vm");
319
-
320
- const timeoutMs = ${C$};
321
- const maxLogChars = 524288;
322
- let activeOutput = [];
323
- let activeOutputChars = 0;
324
- function appendOutput(value) {
325
- if (activeOutputChars >= maxLogChars) return;
326
- const kept = String(value).slice(0, maxLogChars - activeOutputChars);
327
- activeOutput.push(kept);
328
- activeOutputChars += kept.length;
329
- }
330
- const replConsole = Object.fromEntries(
331
- ["log", "info", "warn", "error", "debug"].map((method) => [
332
- method,
333
- (...args) => {
334
- const formatted = formatWithOptions({ colors: false }, ...args);
335
- appendOutput(formatted + "\n");
336
- },
337
- ]),
338
- );
339
- const originalProcessKill = process.kill.bind(process);
340
- function selfOnlyProcessKill(pid, signal) {
341
- if (pid !== process.pid) {
342
- const error = new Error("kill EPERM");
343
- error.code = "EPERM";
344
- error.errno = -1;
345
- error.syscall = "kill";
346
- throw error;
347
- }
348
- return originalProcessKill(pid, signal);
349
- }
350
- Object.defineProperty(process, "kill", {
351
- value: selfOnlyProcessKill,
352
- configurable: false,
353
- enumerable: true,
354
- writable: false,
355
- });
356
- Object.defineProperty(process, "_kill", {
357
- value: selfOnlyProcessKill,
358
- configurable: false,
359
- enumerable: false,
360
- writable: false,
361
- });
362
- const localRequire = createRequire(join(process.cwd(), "__ara_hands_node_repl__.js"));
363
- const context = vm.createContext({
364
- AbortController,
365
- AbortSignal,
366
- Buffer,
367
- URL,
368
- URLSearchParams,
369
- clearImmediate,
370
- clearInterval,
371
- clearTimeout,
372
- console: replConsole,
373
- fetch,
374
- process,
375
- queueMicrotask,
376
- require: localRequire,
377
- setImmediate,
378
- setInterval,
379
- setTimeout,
380
- structuredClone,
381
- });
382
-
383
- async function evaluate(code) {
384
- activeOutput = [];
385
- activeOutputChars = 0;
386
- const originalStdoutWrite = process.stdout.write;
387
- process.stdout.write = function(chunk, encoding, callback) {
388
- const normalizedEncoding = typeof encoding === "string" ? encoding : undefined;
389
- appendOutput(Buffer.isBuffer(chunk) ? chunk.toString(normalizedEncoding) : chunk);
390
- const completed = typeof encoding === "function" ? encoding : callback;
391
- if (typeof completed === "function") queueMicrotask(completed);
392
- return true;
393
- };
394
- const script = new vm.Script(code, { filename: "reason-hands-node-repl.js" });
395
- let timer;
396
- try {
397
- const value = script.runInContext(context, { timeout: timeoutMs });
398
- const resolved = await Promise.race([
399
- Promise.resolve(value),
400
- new Promise((_, reject) => {
401
- timer = setTimeout(
402
- () => reject(new Error("REPL evaluation timed out after 105 seconds")),
403
- timeoutMs,
404
- );
405
- }),
406
- ]);
407
- const inspected = inspect(resolved, {
408
- depth: 8,
409
- colors: false,
410
- maxArrayLength: 200,
411
- maxStringLength: 16_000,
412
- breakLength: 120,
413
- });
414
- const emitted = activeOutput.join("");
415
- return emitted.length === 0
416
- ? inspected
417
- : emitted + (emitted.endsWith("\n") ? "" : "\n") + inspected;
418
- } finally {
419
- if (timer) clearTimeout(timer);
420
- process.stdout.write = originalStdoutWrite;
421
- }
422
- }
423
-
424
- // Ordinary stdout is just an untrusted result stream, not a control authority.
425
- // The parent must terminate and reap this process before accepting any result.
426
- function respond(payload) { writeSync(1, JSON.stringify(payload) + "\n"); }
427
-
428
- let queue = Promise.resolve();
429
- const lines = createInterface({ input: process.stdin, crlfDelay: Infinity });
430
- lines.on("line", (line) => {
431
- queue = queue.then(async () => {
432
- try {
433
- const request = JSON.parse(line);
434
- if (request.action === "probe") {
435
- respond({ ok: true, output: "ARA_HANDS_REPL_READY" });
436
- return;
437
- }
438
- if (request.action !== "evaluate" || typeof request.code !== "string") {
439
- throw new Error("Invalid REPL request");
440
- }
441
- respond({ ok: true, output: await evaluate(request.code) });
442
- } catch (error) {
443
- respond({
444
- ok: false,
445
- error: error instanceof Error ? error.message : String(error),
446
- stack: error instanceof Error ? error.stack : undefined,
447
- });
448
- }
449
- }).catch((error) => respond({ ok: false, error: String(error) }));
450
- });
451
- `;function _6($=process.execPath,Z=process.versions.bun){return Z?"node":$}function j$($){try{M6($)}catch{}}function M8($,Z){$.end(`${JSON.stringify(Z)}
452
- `)}function q$($){return JSON.stringify($)}function A6($){let Z=B6(J4(T6(),"reason-node-repl-")),Q=J4(Z,"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((z)=>`(subpath ${q$(z)})`).join(" ")})`,`(allow file-read* file-write* (subpath ${q$($.workRoot)}) (subpath ${q$(Z)}))`].join(`
453
- `);j6(Q,J,{mode:384});let Y=!1;return{command:"/usr/bin/sandbox-exec",args:["-f",Q,$.nodeExecutable,...$.nodeArgs],cwd:$.workRoot,env:{...$.environment,TMPDIR:Z},async cleanup(){if(Y)return;Y=!0,N6(Z,{recursive:!0,force:!0})}}}async function x6($){let Z=L6($.workRoot),Q=$.nodeExecutable??_6(),X=["--max-old-space-size=512","--permission",`--allow-fs-read=${Z}`,`--allow-fs-write=${Z}`,"-e",D6],J=j8({home:Z,temporaryDirectory:Z}),Y=$.platformName??C6();if(Y==="linux")return{command:Q,args:X,cwd:Z,env:J,async cleanup(){}};if(Y==="darwin")return A6({nodeExecutable:Q,nodeArgs:X,workRoot:Z,environment:J});throw Error("hands_node_repl_platform_unsupported")}async function m9($){let Z;try{await Promise.race([$,new Promise((Q,X)=>{Z=setTimeout(()=>X(Error("hands_node_repl_child_cleanup_timeout")),O6)})])}finally{clearTimeout(Z)}}async function G4($){if($.executionMode!=="single-evaluation")throw Error(vQ);let Z=await x6($),Q;try{Q=W6(Z.command,Z.args,{cwd:Z.cwd,env:Z.env,stdio:["pipe","pipe","pipe"]})}catch(C){throw await Z.cleanup(),C}let X=new Promise((C)=>Q.once("close",()=>C())),J;Q.once("error",(C)=>{J=C});let Y=!1,z=!1,F="";Q.stderr.setEncoding("utf8"),Q.stderr.on("data",(C)=>{F=`${F}${C}`.slice(-16384)});let G=Q.stdout,V,B=(C,A,R)=>{if(R)C.failure??=R;if(C.finishing)return;C.finishing=!0,z=!0,Q.kill("SIGKILL"),m9(X).then(()=>{if(C.failure)C.reject(C.failure);else C.resolve(A??{})},(I)=>C.reject(I))},H=()=>{if(z=!0,V)B(V,void 0,Error("hands_node_repl_state_lost"));else Q.kill("SIGKILL")},K="";G?.setEncoding("utf8"),G?.on("data",(C)=>{if(V?.finishing||z)return;if(K+=C,K.length>Y4){H();return}while(!0){let A=K.indexOf(`
454
- `);if(A===-1)return;let R=K.slice(0,A);K=K.slice(A+1);let I=V;if(!I){H();return}try{let T=JSON.parse(R);if(I.action==="probe")I.resolve(T);else{B(I,T);return}}catch{B(I,void 0,Error("invalid_hands_node_repl_child_response"));return}}});let L=(C)=>{let A=F.trim(),R=C??Error(A?`hands_node_repl_child_exited:${A}`:"hands_node_repl_child_exited");if(z=!0,V&&!V.finishing)B(V,void 0,R)};Q.once("error",L),Q.once("close",()=>L()),Q.stdin.on("error",L);let U=(C)=>new Promise((A,R)=>{if(Y||z||Q.exitCode!==null||Q.signalCode!==null){R(Error(z?"hands_node_repl_state_lost":"hands_node_repl_stopped"));return}let I=setTimeout(H,C.action==="probe"?1e4:Math.max(1,Math.min($.evaluationTimeoutMs??C$-1000,C$-1000))),T={action:C.action,finishing:!1,resolve(S){if(V===T)V=void 0;clearTimeout(I),A(S)},reject(S){if(V===T)V=void 0;clearTimeout(I),R(S)}};V=T,Q.stdin.write(`${JSON.stringify(C)}
455
- `,(S)=>{if(!S)return;B(T,void 0,S)})});try{if(!G){if(Q.pid===void 0)await m9(X);throw J??Error("hands_node_repl_control_pipe_missing")}let C=await U({action:"probe"});if(C.ok!==!0||C.output!=="ARA_HANDS_REPL_READY")throw Error("hands_node_repl_probe_failed")}catch(C){Y=!0,Q.kill("SIGKILL");try{await m9(X)}finally{await Z.cleanup()}throw C}let W=Promise.resolve(),j=new Set;j$($.socketPath);let O=q6.createServer((C)=>{j.add(C),C.once("close",()=>j.delete(C)),C.setEncoding("utf8");let A="",R=!1,I=!1;C.once("close",()=>{if(I)H()}),C.on("error",()=>C.destroy()),C.on("data",(T)=>{if(R)return;if(A+=T,A.length>Y4){R=!0,M8(C,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let S=A.indexOf(`
456
- `);if(S===-1)return;R=!0;let y=A.slice(0,S);W=W.then(async()=>{if(C.destroyed)return;try{let E=JSON.parse(y);if(E.action!=="evaluate"||typeof E.code!=="string")throw Error("Invalid REPL request");I=!0;let N=await U({action:"evaluate",code:E.code});if(I=!1,N.ok!==!0||typeof N.output!=="string")throw Error(typeof N.error==="string"?N.error:"hands_node_repl_failed");M8(C,{ok:!0,output:N.output})}catch(E){I=!1,M8(C,{ok:!1,error:E instanceof Error?E.message:String(E),stack:E instanceof Error?E.stack:void 0})}}).catch((E)=>{M8(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{U6($.socketPath,384),C()}catch(R){O.close(()=>A(R))}})})}catch(C){Y=!0,Q.kill("SIGKILL");try{await m9(X)}finally{await Z.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,W.catch(()=>{return}),H();try{await m9(X)}finally{await Z.cleanup(),j$($.socketPath)}}}}var T$=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var z4="/workspace",K4="/var/lib/reason/sessions",I6="/var/lib/reason/session-controls";function F4($){let Z=`${K4}/`;if(!$.startsWith(Z))return null;let Q=$.slice(Z.length);if(!T$.test(Q)||Q!==Q.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${I6}/${Q}/job.env`}function P6($){if(!T$.test($))throw Error("personal_computer_invalid_identity");return $.toLowerCase()}function q8($){let Z=P6($);return{runtimeRoot:`${K4}/${Z}`,workspaceRoot:`${z4}/sessions/${Z}`,sharedRoot:z4}}var V4="/root/.ara/cloud-browser/repl.sock";function O$($){return $==="compute"}function H4($,Z,Q="linux"){if($)q8($);if(Q!=="linux")throw Error("cloud_browser_os_invalid");if(Z!==void 0&&(!$||!/^[1-9][0-9]{0,18}$/.test(Z)))throw Error("cloud_browser_generation_invalid");let X=$?`/var/lib/reason/browsers/${$.toLowerCase()}`:"/root/.ara/cloud-browser",J=$?`${X}/${Z?`g${Z}`:"current"}`:X,Y=$?`/root/.b/${$.toLowerCase().replaceAll("-","")}`:X;return{temporarySessionDirectory:Y,temporaryDirectory:$?`${Y}/${Z??"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()}${Z?`-${Z}`:""}`:"ara-cloud-browser"}}var D$="browser_egress",W4=fZ,p6=45000,u6=o9+1500,y0=/^[A-Za-z0-9._:-]{1,160}$/,l6="/run/ara-hands";function s6($,Z,Q=D4()){if($==="darwin")return{temporaryRoot:Q,prepareRoot:!1,sessionMode:448};return{temporaryRoot:Z??l6,prepareRoot:!0,sessionMode:457}}function U4($,Z=process.platform,Q=process.geteuid?.()){return $===!0&&Z==="linux"&&Q===0}function x$($=q4(),Z=process.platform,Q=process.geteuid?.()){return $&&Z==="linux"&&Q===0?{uid:$.uid,gid:$.gid,home:$.home,username:$.username}:null}function n6($=x$(),Z=yQ){return $&&Z()?V$:null}function qG($=x$(),Z=process.platform,Q=process.geteuid?.()){return Z!=="linux"||Q!==0||$!==null}function CG($=process.platform,Z=process.geteuid?.()){return $!=="linux"||Z!==0}function i6($,Z){if(!Z&&($??"linux")==="linux")return V4;return H4(Z,void 0,$??"linux").socket}function a6($){return $[N0]===!0?"sandbox_loopback":"ara_device_wss"}function N9($){return Boolean($)&&typeof $==="object"&&!Array.isArray($)}function A4($){let Z=$.toLowerCase().replace(/^\[|\]$/g,"");return Z==="localhost"||Z.endsWith(".localhost")||Z==="::1"||Z==="0:0:0:0:0:0:0:1"||Z==="0.0.0.0"||Z.startsWith("127.")}class x4 extends q{expiryDiagnostic;constructor($){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=$}}function o6($){return N9($)&&Object.keys($).every((Z)=>Z==="source_path"||Z==="branch")&&($.source_path===void 0||i0($.source_path))&&typeof $.branch==="string"&&U$.test($.branch)}function r6($,Z,Q){let X=Z===void 0?Date.now():Z,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",o0,r0,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",p,N0,D$,U9,C0,t0,m0]),z=N9($)?$:null,F=z?.[D$],G=z?.[U9],V=z?.[t0],B=F===void 0||(z?.[p]===f0||V===y9&&z?.[p]===void 0)&&N9(F)&&Object.keys(F).every((C)=>C==="mode"||C==="allowed_domains")&&F.mode==="enforce"&&Array.isArray(F.allowed_domains)&&F.allowed_domains.length<=256&&F.allowed_domains.every((C)=>typeof C==="string"&&e8(C));if(!N9($)||J.some((C)=>!(C in $))||Object.keys($).some((C)=>!Y.has(C))||!B||V!==void 0&&V!==y9||z?.[m0]!==void 0&&z[m0]!==O8||z?.personal_workspace!==void 0&&(z.personal_workspace!==!0||z[p]!==f0)||z?.cloud_browser!==void 0&&(z.cloud_browser!==!0||z[p]!==f0)||z?.sandbox_provider!==void 0&&!O$(z.sandbox_provider)||z?.sandbox_os!==void 0&&z.sandbox_os!=="linux"||G!==void 0&&(z?.[p]!==W9||!H$(G))||p in $&&$[p]!==f0&&$[p]!==W9&&$[p]!==L0||N0 in $&&$[N0]!==!0||$.workspace_path!==void 0&&(!i0($.workspace_path)||$[p]!==L0)||$.workspace_worktree!==void 0&&($.workspace_path===void 0||!o6($.workspace_worktree))||typeof $.relay_url!=="string"||typeof $.session_id!=="string"||!y0.test($.session_id)||$.workspace_id!==void 0&&(typeof $.workspace_id!=="string"||!y0.test($.workspace_id))||$.legacy_workspace_id!==void 0&&(typeof $.legacy_workspace_id!=="string"||!y0.test($.legacy_workspace_id))||$[o0]!==void 0&&($[o0]!==D8||(p in $))||$[r0]!==void 0&&($[r0]!==_8||(p in $))||$[C0]!==void 0&&(typeof $[C0]!=="string"||!y0.test($[C0]))||typeof $.environment_id!=="string"||!y0.test($.environment_id)||typeof $.expires_at!=="string"||$.policy_mode!=="full_access"||$.policy_version!==1||$.hands_protocol_version!==j9||$.hands_worker_version!==q9||$.hands_worker_artifact_sha256!==F0||!eQ($.hands_worker_entrypoint)||!w0($.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 K=$[N0]===!0,L=A4(H.hostname);if((K?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 U=Date.parse($.expires_at),W=Number.isNaN(U)?"parse":new Date(U).toISOString()!==$.expires_at?"noncanonical":U<=X?"expired":U-X>W4?"over_cap":"accepted",j={version:1,outcome:W,clock_source:Z===void 0?"date_now":"injected",validation_now_ms:G9(X),expiry_ms:G9(U),remaining_ms:Number.isSafeInteger(U-X)?U-X:null,maximum_lifetime_ms:W4,cli_artifact:$4()};if(W!=="accepted")throw new x4(j);try{Q?.(j)}catch{}let O=$.environment_binding===void 0?void 0:l8.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}:{},...O$($.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},...$[o0]===D8?{[o0]:D8}:{},...$[r0]===_8?{[r0]:_8}:{},...typeof $[C0]==="string"?{[C0]:$[C0]}:{},...$[t0]===y9?{[t0]:y9}:{},...$[m0]===O8?{[m0]:O8}:{},...typeof $.workspace_path==="string"?{workspace_path:$.workspace_path}:{},...N9($.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:j9,hands_worker_version:q9,hands_worker_artifact_sha256:F0,hands_worker_entrypoint:a0,target_generation:$.target_generation,target_fence_id:$.target_fence_id,...p in $?{[p]:$[p]}:{},...K?{[N0]:!0}:{},...G===void 0?{}:{[U9]:G},...F===void 0?{}:{[D$]:{mode:"enforce",allowed_domains:[...new Set(F.allowed_domains)].sort()}}}}function t6(){let $=new Map;return{acquire(Z,Q){if($.has(Z))return null;let X=[...$.values()],J=(z)=>Q.group!==void 0&&z.group===Q.group;if(Q.exclusive?!X.every(J):X.some((z)=>z.exclusive))return null;if(Q.limit!==void 0&&!X.some(J)&&new Set(X.map((z,F)=>z.group??F)).size>=Q.limit)return null;$.set(Z,Q);let Y=!1;return()=>{if(Y)return;Y=!0,$.delete(Z)}},activeOwners:()=>[...$.keys()]}}var e6=t6();function $2($,Z){C9($,{recursive:!0,mode:448});let Q=s($),X=()=>new q("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let z of Z.split("/")){let F=a(Q,z);try{let V=o(F);if(V.isSymbolicLink()||!V.isDirectory())throw X()}catch(V){if(!(V&&typeof V==="object"&&("code"in V)&&V.code==="ENOENT"))throw V;try{C9(F,{mode:448})}catch(B){if(!(B&&typeof B==="object"&&("code"in B)&&B.code==="EEXIST"))throw B}}let G=o(F);if(G.isSymbolicLink()||!G.isDirectory()||s(F)!==F)throw X();Q=F}if(process.platform==="win32"){let z=o(Q);if(z.isSymbolicLink()||!z.isDirectory()||s(Q)!==Q||!A0(s($),Q))throw X();return Q}let J=o(Q),Y=m6(Q,M9.O_RDONLY|M9.O_DIRECTORY|M9.O_NOFOLLOW);try{let z=f6(Y);if(!z.isDirectory()||z.dev!==J.dev||z.ino!==J.ino||s(Q)!==Q)throw X();k6(Y,448)}finally{b6(Y)}return Q}function Z2($,Z=j4(),Q,X,J){if(!y0.test($)||Q!==void 0&&!y0.test(Q))throw new q("invalid_hands_workspace","Reason Hands run identity is invalid.");let Y=Y0(u0({kind:"managed",workspaceId:$,...X?{base:X}:{},...J?{layout:J}:{}})),z=$2(Z,Y0(Y)),F=a(z,c6(Y)),G=!1;try{let K=o(F);if(G=!0,K.isSymbolicLink())throw new q("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!K.isDirectory())throw new q("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(K){if(K instanceof q||!(K&&typeof K==="object"&&("code"in K)&&K.code==="ENOENT"))throw K}if(J&&!G)try{let K=a(s(Z),Y0(u0({kind:"managed",workspaceId:$,...X?{base:X}:{}}))),L=o(K);if(!L.isSymbolicLink()&&L.isDirectory()&&s(K)===K)C8(K,F),G=!0}catch{}if(Q&&Q!==$){let K=a(z,Q);try{let L=o(K);if(L.isSymbolicLink()||!L.isDirectory())throw new q("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let U=s(K);if(Y0(U)!==z)throw new q("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let W=null;if(G){W=a(z,`.${$}.previous`);try{throw o(W),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}C8(F,W)}try{C8(U,F)}catch(j){if(W)C8(W,F);throw j}G=!0}catch(L){if(L instanceof q||!(L&&typeof L==="object"&&("code"in L)&&L.code==="ENOENT"))throw L}}C9(F,{recursive:!0,mode:448}),g9(F,448);let V=s(F);if(Y0(V)!==z)throw new q("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let B=a(V,"repo");try{let K=o(B);if(K.isSymbolicLink()||!K.isDirectory())throw new q("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(K){if(K instanceof q||!(K&&typeof K==="object"&&("code"in K)&&K.code==="ENOENT"))throw K}C9(B,{recursive:!0,mode:448}),g9(B,448);let H=s(B);if(Y0(H)!==V)throw new q("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:V,repoPath:H}}function I4($){let Z=null;try{Z=o($)}catch{}if(!Z||Z.isSymbolicLink()||!Z.isDirectory()||Z.uid!==0||Z.gid!==0||(Z.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 Q2($,Z,Q=process.geteuid?.(),X=process.platform){if(X==="win32")return"unknown";let J;try{if(J=e0($),!J.isDirectory())return"unready";w6($,M9.R_OK|M9.W_OK|M9.X_OK)}catch{return"unready"}try{if(o($).isSymbolicLink()||s($)!==$)return"unknown"}catch{return"unknown"}if(Q!==0)return"checked";if(Z===null||J.uid!==Z.uid||(J.mode&448)!==448)return"unknown";for(let Y=Y0($);;Y=Y0(Y)){let z;try{z=e0(Y)}catch{return"unknown"}if(!(z.uid===Z.uid?(z.mode&64)!==0:z.gid===Z.gid?(z.mode&8)!==0:(z.mode&1)!==0))return"unknown";if(Y===Y0(Y))return"checked"}}function X2($,Z){let Q="/";for(let X of["",...$.split("/"),...Z.split("/")].filter((J,Y)=>Y===0||J)){if(X)Q=a(Q,X);let J;try{J=o(Q)}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 J2($,Z,Q,X=process.geteuid?.(),J){if(!y0.test(Z))return null;let Y,z;try{Y=s($),z=Y0(u0({kind:"managed",workspaceId:Z,...Q?{base:Q}:{},...J?{layout:J}:{}}))}catch{return null}let F=a(Y,z),G=A$(F)!==null,V=(U)=>new q("cloud_workspace_root_invalid",U),B;if(X===0){let U=X2(Y,z);if(U===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=U}else{if(!G)return null;let U,W;try{U=o(Y0(F)),W=o(F)}catch{return null}if(U.isSymbolicLink()||!U.isDirectory()||U.uid===0||W.uid!==0)return null;B=U.uid}let H=Y;for(let U of z.split("/")){let W=a(H,U),j=!1;try{let O=o(W);j=!O.isSymbolicLink()&&O.isDirectory()&&s(W)===W}catch{}if(!j)throw V("This cloud Session's workspace root is missing or is not a real directory.");H=W}I4(F);let K;try{K=P4(F)}catch(U){if(U instanceof q)throw U;throw V("This cloud Session's workspace root changed while Reason Hands checked it.")}let L=null;try{L=e0(K.repoPath).uid}catch{}if(L!==B)throw new q("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return K}function P4($,Z=!1){let Q=s($),X=a(Q,"repo"),J;try{J=o(X)}catch{throw new q("invalid_hands_workspace","Reason Hands repository is missing from the granted root.")}if(Z){if(!/^\/var\/lib\/reason\/sessions\/[0-9a-f-]{36}$/.test(Q))throw new q("invalid_hands_workspace","Personal runtime identity is invalid.");if(q8(Q.slice(Q.lastIndexOf("/")+1)).runtimeRoot!==Q)throw new q("invalid_hands_workspace","Personal runtime identity is invalid.");let F=s("/workspace"),G=s(X);if(F!=="/workspace"||!e0(G).isDirectory()||!G.startsWith("/workspace/"))throw new q("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:Q,repoPath:G}}let Y=gQ(Q);if(Y&&J.isSymbolicLink()){let F=s(X);if(F!==s(Y)||!e0(F).isDirectory())throw new q("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:Q,repoPath:F}}if(J.isSymbolicLink()||!J.isDirectory())throw new q("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let z=s(X);if(Y0(z)!==Q)throw new q("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:Q,repoPath:z}}function I$($,Z,Q){if(Z!==void 0&&!i0(Z))throw new q("invalid_hands_workspace",`Reason Hands ${Q} is invalid.`);let X=_4($,Z??".");if(!A0($,X))throw new q("invalid_hands_workspace",`Reason Hands ${Q} escapes its granted root.`);return X}function R4($,Z,Q){if(W$(Z)){let X=s(Q);return{anchor:X,target:_4(X,Z),boundary:a(X,B9)}}return{anchor:$,target:I$($,Z,"folder"),boundary:$}}function Y2($,Z){if(!A0($,Z))throw new q("invalid_hands_workspace","Reason Hands folder escapes its granted root.");let Q=$;for(let X of Z.slice($.length).split(d6).filter(Boolean)){Q=a(Q,X);let J=null;try{J=o(Q)}catch(Y){if(Y.code!=="ENOENT")throw Y}if(!J)C9(Q,{mode:448});else if(J.isSymbolicLink()||!J.isDirectory())throw new q("invalid_hands_workspace","Reason Hands folder must be made of real directories.")}}function E4($,Z){let Q=s(I$($,Z.source_path,"repository"));if(!A0($,Q)||!e0(Q).isDirectory())throw new q("invalid_hands_workspace","Reason Hands repository must be a folder in its granted root.");return Q}async function G2($,Z,Q,X=A8()){try{let J=s($);if(_$(R4(J,Z,X).target))return;return await uQ(E4(J,Q))??void 0}catch{return}}function z2($,Z,Q,X,J=K2,Y=A8()){let z=s($),{target:F,boundary:G,anchor:V}=R4(z,Z,Y);if(Q&&!_$(F)){let K=E4(z,Q);Y2(V,Y0(F));let L=["-c","core.hooksPath=/dev/null","-C",K];if(X)J([...L,"update-ref","--create-reflog","-m",X.note,`refs/heads/${Q.branch}`,X.commit,""]);let U=X?J([...L,"worktree","add",F,Q.branch]):J([...L,"worktree","add","-b",Q.branch,F]);if(!X&&U.status!==0&&/already exists/.test(U.stderr)&&!_$(F))U=J([...L,"worktree","add",F,Q.branch]);if(U.status!==0)throw new q(/not a git repository/i.test(U.stderr)?"workspace_not_git_repository":"workspace_worktree_failed","Reason could not create this Session's git worktree.")}let B;try{B=o(F)}catch{throw new q("workspace_folder_missing","This Session's folder no longer exists.")}let H=s(F);if(B.isSymbolicLink()&&!A0(G,H))throw new q("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!e0(H).isDirectory()||!A0(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 K2($){let Z=N4();if(!Z)return{status:null,stderr:"git was not found. Install Git for Windows (https://git-scm.com/download/win)."};let Q=S6(Z,$,{encoding:"utf8",timeout:60000,env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:["ignore","ignore","pipe"]});return{status:Q.status,stderr:Q.stderr??""}}function S4($){return F4($)??A$($)?.jobEnv??a($,"job.env")}function F2($,Z){let Q=S4($),X=o(Q);if(X.isSymbolicLink()||!X.isFile())throw new q("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");y6(Q,Z),g9(Z,384)}function V2($){if($.workspaceMode===L0&&$.workspacePath!==void 0){let z=$.home??A8(),F=z2($.grantedRoot,$.workspacePath,$.workspaceWorktree,$.workspaceWorktreeStart,void 0,z);if($.workspaceWorktree&&$.deviceId)iQ(z,$.workspacePath,$.deviceId);return{workRoot:F,repoPath:F,workspace:{kind:"root",path:$.workspacePath},jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if($.workspaceMode===f0)return{...P4($.grantedRoot,$.personalWorkspace),workspace:{kind:"root"},jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if($.workspaceMode===W9||$.workspaceMode===L0){let z=o($.grantedRoot);if(z.isSymbolicLink()||!z.isDirectory())throw new q("invalid_hands_workspace","Reason Hands root must be a real directory.");let F=s($.grantedRoot);return{workRoot:F,repoPath:F,workspace:{kind:"root"},jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}let Z=$.workspaceId??$.runId,Q={kind:"managed",workspaceId:Z,...$.workspaceBase?{base:$.workspaceBase}:{},...$.workspaceLayout?{layout:$.workspaceLayout}:{}},X=t9($.grantedRoot,Q,$.home).anchor,J=J2(X,Z,$.workspaceBase,void 0,$.workspaceLayout);if(J)return{...J,workspace:Q,jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1,cloudSessionRoot:!0};let Y=Z2(Z,X,$.legacyWorkspaceId,$.workspaceBase,$.workspaceLayout);return{...Y,workspace:Q,jobEnvPath:a($.temporaryDirectory,"job.env"),workspacePoolPath:Y0(Y.workRoot),managedWorkspace:!0}}function H2($){let{command:Z,prefix:Q}=s8($.executablePath,$.sourceEntrypoint),X=j8({home:v6(),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:Z,args:[...Q,"__device","__hands-worker","--config",$.configPath],options:{cwd:$.root,env:X,shell:!1,stdio:[W2,"ignore","pipe"]}}}var W2=process.platform==="win32"?"pipe":"ignore";function B4($,Z){if(process.platform!=="win32")return $.kill(Z);if(Z==="SIGTERM")$.stdin?.end();else if($.pid)M4($.pid);return!0}function U2($,Z){let Q="",X=!1,J=Date.now(),Y=0,z=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled","permission_denied"].map((H)=>`hands.worker.${H}`)),F=new Set([null,"open_not_received","current_connection","obsolete_connection","request_aborted","request_timeout","client_closed","driver_stopped","driver_handoff","run_cancelled","run_finished","other","frame_too_large","invalid_json","invalid_claim","executor_mismatch","stale_generation","fence_conflict","SIGTERM","SIGINT","SIGHUP","expired","cleanup_complete","cleanup_failed","cancelled","settled","unsupported","unconfirmed",...["sandbox_policy","os_permission_unknown"].flatMap((H)=>["bash","read","write","edit"].map((K)=>`${H}:${K}`))]),G=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],V=["peerGeneration","socketState","closeCode"],B=new Set(["event","reason","launchId",...G,...V]);return(H)=>{for(let K of H.toString().split(/(?<=\n)/)){let L=K.endsWith(`
457
- `);if(!X&&Q.length+K.length<=2048)Q+=K;else X=!0;if(!L)continue;let U=Q;if(Q="",X){X=!1;continue}try{let W=JSON.parse(U);if(!W||typeof W!=="object"||Array.isArray(W)||Object.keys(W).some((j)=>!B.has(j))||!z.has(W.event)||!F.has(W.reason)||W.event==="hands.worker.permission_denied"!==(typeof W.reason==="string"&&W.reason.includes(":"))||W.launchId!==$||G.some((j)=>!Number.isSafeInteger(W[j])||W[j]<0)||V.some((j)=>W[j]!==null&&(!Number.isSafeInteger(W[j])||W[j]<0)))continue;if(Date.now()-J>=60000)J=Date.now(),Y=0;if(Y>=122)continue;Y+=1,Z(W)}catch{}}}}async function B2($){let Z=$.now()+$.timeoutMs;while($.now()<Z){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 Q=N8($.path,{pid:$.child.pid??-1,launchId:$.launchId,workerVersion:q9,protocolVersion:j9,workerArtifactSha256:F0,workerEntrypoint:a0});if(Q?.targetGeneration===$.targetGeneration&&Q.fenceId===$.fenceId)return Q;await new Promise((X)=>setTimeout(X,10))}throw new q("hands_ready_timeout","Reason Hands did not become ready.")}async function L2($,Z){let Q=()=>$.exitCode===0&&$.signalCode===null;if($.exitCode!==null||$.signalCode!==null)return Q()?"stopped":"already_exited";let X=new Promise((z)=>$.once("exit",()=>z()));try{if(!B4($,"SIGTERM"))return Q()?"stopped":"unobserved"}catch{return Q()?"stopped":"unobserved"}if(await L4(X,Z))return Q()?"stopped":"unobserved";try{B4($,"SIGKILL")}catch{}return await L4(X,Z)?"forced":"unobserved"}async function L4($,Z){let Q;try{return await Promise.race([$.then(()=>!0),new Promise((X)=>{Q=setTimeout(()=>X(!1),Z)})])}finally{clearTimeout(Q)}}function N2($){return new Promise((Z)=>{let Q=!1,X=(F)=>{if(Q)return;Q=!0,clearTimeout(z),$.signal.removeEventListener("abort",J),$.child.off("exit",Y),Z(F)},J=()=>X("cancelled"),Y=()=>X("exited"),z=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 w4=O4();function M2($,Z){if(!($ instanceof Error)||$ instanceof q)return!1;let Q=["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(!Q&&!X)return!1;try{return o(Z),!1}catch(J){return N9(J)&&J.code==="ENOENT"}}function j2($){return $.sandbox_provider==="compute"&&!$.cloud_browser&&!$[N0]&&$[p]===f0}function q2($,Z,Q){return $===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:H0($,Z),...Q===void 0?{}:{worker_prespawned:Q}}}}function TG(){w4().catch(()=>{return}),F9().catch(()=>{return})}async function OG($,Z={}){let Q=Z.logDiagnostic??((N)=>console.warn(N)),X=new Map,J=(N)=>{let M=Date.now();X.set(N,M);try{Q(JSON.stringify({event:"sandbox.hands_startup",stage:N,timestampMs:M}))}catch{}};J("entered");let Y=$.claimEnvironment;$.claimEnvironment=void 0;let z=Z.now??Date.now,F,G=r6($.payload,Z.now?.(),(N)=>{F=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","win32"].includes(process.platform)))throw new q("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let V=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(Z.eventDeliveryTimeoutMs??5000,5000)))})])}finally{clearTimeout(M)}},B=async(N,M)=>V($.emitEvent(N,M));if($.headless&&(G.cloud_browser===!0||$.managedBrowser!==void 0||G[N0]!==void 0||G[U9]!==void 0||G[p]!==void 0&&G[p]!==L0))throw new q("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let H=x$(),K=G[m0]===void 0?null:n6(H);if(G[m0]!==void 0&&(K===null||!$.headless||!U4($.hostExecution,Z.hostIdentity?.platform,Z.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[t0]!==void 0&&!($.headless&&U4($.hostExecution,Z.hostIdentity?.platform,Z.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}`,U=G[p]===W9,W=$.headless||process.platform==="darwin"&&$.managedBrowser===void 0&&!G.cloud_browser&&!G.browser_egress&&!G[N0]&&(G[p]===void 0||G[p]===L0)||j2(G),j=U?G[U9]??"bash":null,O=j?cQ(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&&$.ownComputer!==!0?$.handsSlots??1:void 0,R=(Z.slot??e6).acquire(L,{exclusive:A===1||C!==void 0&&C!==L0,...A!==void 0&&A>1?{limit:A}:{},...$.headless===!0&&G[C0]!==void 0?{group:G[C0]}:{}});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 I=$.headless===!0?C4($.runId):null,T=null,S=null,y,E;try{J("browser_resolution");let N=$.headless&&Z.browserExecutablePath===void 0?await F9():null,M=U||G.cloud_browser?null:Z.browserExecutablePath===void 0?$.headless?N?.status==="resolved"?N.executablePath:null:await kQ(void 0,process.platform,$.managedBrowser):Z.browserExecutablePath;if(!U&&!G.cloud_browser&&!W&&!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(Z.resolvePathEnvironment??w4)()}catch{D={path:T4(),source:"fallback"}}if(J("workspace_setup"),process.platform==="darwin"){let l=G[p]===L0&&G.workspace_path!==void 0?I$($.root,G.workspace_worktree?G.workspace_worktree.source_path:G.workspace_path,"folder"):null;for(let e of new Set([$.root,...l?[l]:[]]))await XQ(e)}let k=G[p]===f0||G[p]===W9?s6(process.platform,Z.sandboxRuntimeRoot):null,m=$.headless&&$.runtimeDirectory?$.runtimeDirectory:k?k.temporaryRoot:D4();if(T="private_runtime",$.headless&&$.runtimeDirectory){L8(m);let l=s($.root);if(!w9(l,m))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)C9(m,{recursive:!0,mode:457}),g9(m,457);T="temporary_directory";let _=s(g6(a(m,"reason-hands-session-")));S=_,g9(_,k?.sessionMode??448);let g=a(_,"hands-config.json"),c=a(_,"hands-ready.json"),u=R6(),r=G.target_fence_id;if($.workspaceGrant){T="workspace_grant",J("workspace_grant_wait");let l=$.workspaceGrant;await new Promise((e,c0)=>{let Z9=()=>c0(new q("cancelled","Reason Hands was cancelled."));if($.signal.aborted){Z9();return}$.signal.addEventListener("abort",Z9,{once:!0}),l.then(e,c0).finally(()=>$.signal.removeEventListener("abort",Z9))})}T="granted_root";let b=s($.root);T="workspace_layout";let h=G[p]===L0&&G.workspace_path!==void 0&&G.workspace_worktree?await G2(b,G.workspace_path,G.workspace_worktree):void 0,{workRoot:d,repoPath:n,jobEnvPath:z0,workspacePoolPath:M0,managedWorkspace:W0,workspace:U0,cloudSessionRoot:g0}=V2({grantedRoot:b,personalWorkspace:G.personal_workspace===!0,runId:$.runId,workspaceId:G.workspace_id,legacyWorkspaceId:G.legacy_workspace_id,workspaceBase:G[o0],workspaceLayout:G[r0],temporaryDirectory:_,workspaceMode:G[p],applicationSupportPath:Z.applicationSupportPath,...G.workspace_path===void 0?{}:{workspacePath:G.workspace_path},...G.workspace_worktree?{workspaceWorktree:G.workspace_worktree}:{},...h?{workspaceWorktreeStart:h}:{},...$.deviceIdentity?{deviceId:$.deviceIdentity.deviceId}:{}}),T0=a6(G);T="jobs";let t=$.headless&&$.runtimeDirectory?PZ({runtimeDirectory:$.runtimeDirectory,root:b,runId:$.runId}):void 0;y=t?.disposeSocket;let j0=t?RZ(t):null;if(j0)try{Q(JSON.stringify({event:"hands.journal_owner_retired",run_id:$.runId,reason:j0.reason,prior_executor_launch_id:j0.executorLaunchId}))}catch{}if(t&&[d,n].some((l)=>!w9(l,t.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 $9=G.personal_workspace?d.slice(d.lastIndexOf("/")+1):void 0;if($9&&$9!==G.workspace_id)throw new q("invalid_hands_workspace","Personal session identity does not match its Device grant.");T="browser_socket";let B0=G.cloud_browser?i6(G.sandbox_os,$9):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${u}`:a(t?t.launchDirectory:_,"repl.sock");T="relay_url";let q0=A4(new URL(G.relay_url).hostname),h0=T0==="ara_device_wss"&&!q0?(Z.loadProxy??n8)()?.url:void 0,G0;T="environment_owner";let X0=$.headless&&$.deviceIdentity&&G.environment_binding?rQ(_,{runId:$.runId,...$.deviceIdentity,binding:G.environment_binding,expiresAtMs:Date.parse(G.expires_at),identity:()=>G0?.()??null}):void 0;T="job_environment";let T9=!X0&&U0.kind==="managed"&&W0?a(d,"job.env"):null;if(T9)try{T8(T9,"",{mode:384,flag:"wx"})}catch(l){if(!(l instanceof Error&&("code"in l)&&l.code==="EEXIST"))throw l}let x8={url:G.relay_url,transport:T0,...h0===void 0?{}:{proxyUrl:h0},...$.localGithubConfinement?{localGithubConfinement:!0}:{},...G[t0]&&X0?{gitCredentialEnvironment:!0}:{},workerVersion:q9,protocolVersion:j9,workerArtifactSha256:F0,workerEntrypoint:a0,...process.platform==="win32"?{bashExecutable:$8()}:{},targetGeneration:G.target_generation,fenceId:r,workRoot:d,workspaceAliasPath:d,jobEnvPath:z0,...X0?{environmentSnapshotPath:X0.path,...$.hostExecution?{executionEnvironment:nZ()}:{},environmentExpectedBinding:{runId:$.runId,...$.deviceIdentity,binding:G.environment_binding}}:T9?{jobEnvSourcePath:T9,workspacePoolPath:Y0(d)}:W0?{}:{jobEnvSourcePath:S4(d)},repoPath:n,replSocketPath:B0,...G.cloud_browser?{browserRunId:$.runId}:{},readyPath:c,launchId:u,expiresAtMs:Date.parse(G.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...t?{managedJobs:{journalDirectory:t.journalDirectory,scopeId:t.scopeId},jobControlSocketPath:t.socketPath}:{},...t&&H?{jobsUser:{...H,...K!==null?{modelGid:K}:{}}}:{},...$.managedPty&&t&&X0?{managedPty:{version:1,...$.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:iZ()}:{}}}:{},...W&&!M?{allowedTools:["bash","read","write","edit"]}:U?{allowedTools:j==="bash"?["bash"]:["bash","repl"]}:{}};if(X0||W0&&!T9)T8(z0,"",{mode:384});else F2(d,z0);T="config_write",T8(g,JSON.stringify(x8),{mode:384}),T=null;let v0={session_id:G.session_id,environment_id:G.environment_id,hands_protocol_version:j9,hands_worker_version:q9,hands_worker_artifact_sha256:F0,hands_worker_entrypoint:a0,target_generation:G.target_generation,target_fence_id:G.target_fence_id,executor_launch_id:u},h9=null,P$=!1,R$=!1,E$,Q0=null,S$,w$,v9="failed",b$=null,I8=Promise.resolve(),k$=null,P8=async(l,e)=>{try{await B(l,e)}catch{}};try{J("event_started");let l,e=(async()=>{await $.emitEvent("hands.started",{...v0,policy_mode:"full_access",policy_version:1,path_source:D.source}),l=Date.now()})();e.catch(()=>{return}),J("worker_setup");let c0=G.browser_egress?{mode:"enforce",allowedDomains:G.browser_egress.allowed_domains}:{mode:"off"};if(j&&j!=="bash")h9=await(Z.startNodeRepl??G4)({socketPath:B0,workRoot:d});else if(!U&&!G.cloud_browser&&M)h9=await(Z.startRepl??fQ)({socketPath:B0,browserExecutablePath:M,workspaceRoot:n,...$.managedBrowser?{managedBrowser:$.managedBrowser}:{},...$.desktopRecording?{recording:$.desktopRecording}:{},networkPolicy:c0,onEgressDenied:(f)=>{let V0=hQ(f.host);Q(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:V0,reason:f.reason,run_id:$.runId})),I8=I8.then(()=>B("hands.browser_egress_denied",{destination_id:V0,reason:f.reason})).catch((d9)=>{k$??=d9})}}).catch((f)=>{if(!W||$.signal.aborted||z()>=Date.parse(G.expires_at)||!M2(f,B0))throw f;return Object.assign(x8,{allowedTools:["bash","read","write","edit"]}),T8(g,JSON.stringify(x8),{mode:384}),R$=!0,null});let Z9=H2({configPath:g,root:n,grantedRoot:b,workRoot:d,workspacePoolPath:M0,temporaryDirectory:_,path:D.path,executablePath:Z.executablePath,sourceEntrypoint:Z.sourceEntrypoint}),R8=Date.now(),E8,f$,S8=Z.takePrespawnedWorker?.(Z9)??null;if(E$=Z.takePrespawnedWorker?S8!==null:void 0,Q0=S8??(Z.spawnWorker??((f)=>E6(f.command,f.args,f.options)))(Z9),!S8)Z.adoptSpawnedWorker?.(Q0);Q0.stderr?.on("data",U2(u,(f)=>{if(f.event==="hands.worker.connecting")E8??=f.timestampMs;else if(f.event==="hands.worker.open")f$??=f.timestampMs;if(Q(JSON.stringify({...f,run_id:$.runId})),f.event==="hands.worker.permission_denied"&&typeof f.reason==="string"){let[V0,d9]=f.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(V0??"")&&["bash","read","write","edit"].includes(d9??""))B("permission.denied",{provenance:V0,operation:d9}).catch(()=>{return})}}));let m$=!1;Q0.on("error",()=>{m$=!0}),Q0.once("exit",(f,V0)=>{try{Q(JSON.stringify({event:"hands.worker.exited",run_id:$.runId,launchId:u,exit_code:f,exit_signal:V0}))}catch{}}),E=Q0,J("worker_ready_wait");let O9=await B2({path:c,launchId:u,fenceId:r,targetGeneration:G.target_generation,child:Q0,spawnFailed:()=>m$,signal:$.signal,timeoutMs:Z.readyTimeoutMs??p6,now:z}),b4=Date.now();if(G0=()=>{if(!Q0||Q0.exitCode!==null||Q0.signalCode!==null)return null;let f=N8(c,O9);return f?{generation:f.targetGeneration,fenceId:f.fenceId}:null},t){let f={root:b,runId:$.runId,operationId:$.operationId,scopeId:t.scopeId,socketPath:t.socketPath,generation:O9.targetGeneration,fenceId:O9.fenceId,executorLaunchId:u,expiresAtMs:Date.parse(G.expires_at),readIdentity:G0,workspace:U0,localGithubConfinement:$.localGithubConfinement===!0};if(X0)f.environment=X0;if($.claimOwner&&$.deviceIdentity&&$.claimOwner.device_id===$.deviceIdentity.deviceId){let V0=[$.deviceIdentity.apiOrigin,G.relay_url];if(h0)V0.push(h0);f.previewAuthority={owner:Object.freeze({...$.claimOwner}),rootId:$.deviceIdentity.rootId,relayOrigin:new URL(G.relay_url).origin,deniedPorts:YZ(V0)}}w$=EZ(f)}if(await new Promise((f)=>{setImmediate(f)}),g0)I4(d);let c9;if(Y&&X0){try{let f=X0.install(Y);c9={snapshot_id:f.snapshot_id,installed_revision:f.installed_revision}}catch{}try{Q(JSON.stringify({event:"hands.environment_at_claim",run_id:$.runId,installed:c9!==void 0}))}catch{}}Y=void 0;let y$=!1;if($.headless){let f=Q2(n,H);try{Q(JSON.stringify({event:"hands.workspace_check",run_id:$.runId,outcome:f}))}catch{}if(f==="unready")throw new q("hands_workspace_unready","This Session's checkout is not a readable, writable directory at its own path, so Reason Hands cannot use it.");y$=f==="checked"}J("event_ready");let g$=V(e);g$.catch(()=>{return});let h$=Date.now();P$=!0,await B("hands.ready",{...v0,expiry_diagnostic:F,startup_stages:{version:1,browser_resolution_ms:H0(X.get("browser_resolution"),X.get("path_resolution")),path_resolution_ms:H0(X.get("path_resolution"),X.get("workspace_setup")),workspace_setup_ms:H0(X.get("workspace_setup"),X.get("event_started")),repl_setup_ms:H0(X.get("worker_setup"),R8),worker_boot_ms:H0(R8,E8),worker_dial_ms:H0(E8,f$),worker_ready_ms:H0(R8,b4),started_event_ms:H0(X.get("event_started"),l),started_join_wait_ms:H0(X.get("event_ready"),h$),total_ms:H0(X.get("entered"),h$)},...q2($.claimedAtMs,X.get("entered"),E$),...$.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:O9.generation,...c9?{environment_installed:c9}:{},...y$?{workspace_checked:!0}:{},...W&&!h9?{browser_state:"unavailable",browser_reason_code:R$?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await g$,J("ready"),S$=X4({path:c,initial:O9,signal:$.signal,isAlive:()=>Q0!==null&&Q0.exitCode===null&&Q0.signalCode===null&&z()<Date.parse(G.expires_at),publish:(f,V0)=>$.emitEvent("hands.reconnected",{...v0,target_generation:f.targetGeneration,target_fence_id:f.fenceId,connection_generation:f.generation},V0),failed:()=>Q(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:$.runId,executor_launch_id:u}))});let v$=await N2({child:Q0,signal:$.signal,expiresAt:Date.parse(G.expires_at),now:z});if(v$==="cancelled"){let f=$.signal.reason instanceof q?$.signal.reason.code:"cancelled";throw v9=f,new q(f,"Reason Hands was cancelled.")}if(v$==="exited")throw new q("hands_worker_exited","Reason Hands exited unexpectedly.");return v9="expired",{...v0,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(l){b$=l;let e=l instanceof q?l.code:"hands_failed",c0=e==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(e);if(v9=c0?e:"failed",!c0)await P8("hands.failed",{...v0,reason_code:e});throw l}finally{S$?.stop(),w$?.();let l=Q0?await L2(Q0,Z.stopTimeoutMs??u6):null,e=!1;await $.desktopRecording?.close();try{await h9?.stop()}catch{e=!0}if(await I8,(l==="stopped"||l==="already_exited"&&!P$)&&!e)await P8("hands.stopped",{...v0,reason_code:v9});else if(l!==null||e){if(await P8("hands.failed",{...v0,reason_code:l==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),b$===null||e)throw new q("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(k$!==null)throw new q("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(N){let M=mQ(T,N);if(M)try{Q(JSON.stringify({event:"sandbox.hands_workspace_failed",...M}))}catch{}throw N}finally{try{if(!E||E.exitCode!==null||E.signalCode!==null)y?.();if(S!==null&&(!E||E.exitCode!==null||E.signalCode!==null))h6(S,{recursive:!0,force:!0})}finally{I?.(),R()}}}
458
- export{v as kb,r$ as lb,t$ as mb,X3 as nb,QZ as ob,l9 as pb,A2 as qb,x2 as rb,I2 as sb,JZ as tb,YZ as ub,XX as vb,PZ as wb,qX as xb,CX as yb,TX as zb,OX as Ab,DX as Bb,_X as Cb,wZ as Db,AX as Eb,IX as Fb,p as Gb,L0 as Hb,MJ as Ib,jJ as Jb,kJ as Kb,fJ as Lb,vZ as Mb,rQ as Nb,mX as Ob,pZ as Pb,nZ as Qb,iZ as Rb,V5 as Sb,H5 as Tb,J0 as Ub,W5 as Vb,U5 as Wb,B5 as Xb,D5 as Yb,C1 as Zb,_5 as _b,w9 as $b,A0 as ac,A5 as bc,n5 as cc,D1 as dc,_1 as ec,NQ as fc,m5 as gc,b9 as hc,N7 as ic,T$ as jc,F4 as kc,U4 as lc,x$ as mc,n6 as nc,qG as oc,CG as pc,x4 as qc,t6 as rc,I4 as sc,P4 as tc,H2 as uc,W2 as vc,B4 as wc,TG as xc,OG as yc};