@reason-machines/cli-linux-x64 0.2.553 → 0.2.554
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/reason +1 -1
- package/bin/vm-hands/api-1dsd0n4x.js +2 -0
- package/bin/vm-hands/api-credentials-gtrz9r3n.js +2 -0
- package/bin/vm-hands/connect-cli-jbwaswpq.js +2 -0
- package/bin/vm-hands/{desktop-account-d7x4xn27.js → desktop-account-t0afsge2.js} +1 -1
- package/bin/vm-hands/{hands-worker-source-wc8a2nhs.js → hands-worker-source-qj7s9dk5.js} +1 -1
- package/bin/vm-hands/local-automation-c75g446p.js +2 -0
- package/bin/vm-hands/local-capabilities-1kcxmz0s.js +2 -0
- package/bin/vm-hands/{local-desktop-users-tjcpyakd.js → local-desktop-users-5scb9930.js} +1 -1
- package/bin/vm-hands/local-display-mac-pft73te9.js +2 -0
- package/bin/vm-hands/local-display-session-hvbp46qx.js +2 -0
- package/bin/vm-hands/local-display-video-yh6hfavd.js +2 -0
- package/bin/vm-hands/local-managed-process-g6vsy02z.js +2 -0
- package/bin/vm-hands/local-pty-session-njd0tprg.js +2 -0
- package/bin/vm-hands/{managed-runtime-9p83xxgg.js → managed-runtime-htxs6v4q.js} +1 -1
- package/bin/vm-hands/permissions-mhd63yr2.js +2 -0
- package/bin/vm-hands/reason-hands-protocol-g54rtrhd.js +2 -0
- package/bin/vm-hands/{serve-service-83tm7ky3.js → serve-service-38k4j5rf.js} +1 -1
- package/bin/vm-hands/{status-mtmtkbbp.js → status-m1crm0qs.js} +2 -2
- package/bin/vm-hands/version-qp2wr1ds.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-645wzfhr.js → vm-hands-entry-lite-0wsr8edk.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-3dccjjq2.js → vm-hands-entry-lite-1pp7czc0.js} +24 -24
- package/bin/vm-hands/{vm-hands-entry-lite-kmtz5h74.js → vm-hands-entry-lite-1yv5qqew.js} +22 -22
- package/bin/vm-hands/{vm-hands-entry-lite-k9vk84wa.js → vm-hands-entry-lite-2v4zh9ze.js} +5 -5
- package/bin/vm-hands/vm-hands-entry-lite-3mn5c8wd.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-72nj66ab.js → vm-hands-entry-lite-46pwqvpf.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-55ja13pk.js → vm-hands-entry-lite-6qq4f3v5.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-ycddfgr4.js → vm-hands-entry-lite-8mttvhef.js} +8 -8
- package/bin/vm-hands/{vm-hands-entry-lite-0yvkh3bg.js → vm-hands-entry-lite-a6brf7zp.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-9azmqs47.js → vm-hands-entry-lite-ak0hd94p.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-2hfrcr50.js → vm-hands-entry-lite-bpamn7ny.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-w29d7ey0.js → vm-hands-entry-lite-dgfx0rbn.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-hq76nmrc.js → vm-hands-entry-lite-drggrrr8.js} +15 -15
- package/bin/vm-hands/{vm-hands-entry-lite-qdrmhn3f.js → vm-hands-entry-lite-g8md08wv.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-8s4namcq.js → vm-hands-entry-lite-ggyexab2.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-5tnma5qb.js → vm-hands-entry-lite-gje7xvy9.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-hfx1q0b0.js → vm-hands-entry-lite-h1qjggz0.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-y9jarm7q.js → vm-hands-entry-lite-h2rq71rj.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-6pqfr3w2.js → vm-hands-entry-lite-h78c4zxd.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-zrkw5syq.js → vm-hands-entry-lite-jha299pc.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-sb7b4z8t.js → vm-hands-entry-lite-n7bd44rm.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-gezw3967.js → vm-hands-entry-lite-pg2czhxb.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-13s0mfpr.js → vm-hands-entry-lite-q2h781jg.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-xe0benev.js → vm-hands-entry-lite-qd46yhvz.js} +1 -1
- package/bin/vm-hands/vm-hands-entry-lite-qdzbd077.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-x3ym5t8r.js → vm-hands-entry-lite-r1n9zhsm.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-y5hv1gjv.js → vm-hands-entry-lite-ravxhygk.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-whfrwyxm.js → vm-hands-entry-lite-rp2twenv.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-8hwmhvyx.js → vm-hands-entry-lite-sqzryt00.js} +16 -16
- package/bin/vm-hands/{vm-hands-entry-lite-xrqztkhv.js → vm-hands-entry-lite-wghmyfba.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-e16bhf16.js → vm-hands-entry-lite-x8wjxgwr.js} +1 -1
- package/bin/vm-hands/vm-hands-entry-lite.js +1 -1
- package/bin/vm-hands/{vm-hands-executor-n5vw984z.js → vm-hands-executor-0b1azv5m.js} +1 -1
- package/bin/vm-hands/{vm-hands-op-runner-91w40a0z.js → vm-hands-op-runner-f2pye28r.js} +1 -1
- package/bin/vm-hands/{vm-hands-runtime-08q76986.js → vm-hands-runtime-7cwr0sys.js} +3 -3
- package/bin/vm-hands/worker-preview-readiness-gy36ejp9.js +2 -0
- package/bin/vm-hands/worker-sandbox-f1tfb3y0.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-18f1batz.js +0 -2
- package/bin/vm-hands/api-credentials-6jgf7w9q.js +0 -2
- package/bin/vm-hands/connect-cli-xgbm9xfg.js +0 -2
- package/bin/vm-hands/local-automation-gc28rhzv.js +0 -2
- package/bin/vm-hands/local-capabilities-aa7m3ac6.js +0 -2
- package/bin/vm-hands/local-display-mac-gtp439kc.js +0 -2
- package/bin/vm-hands/local-display-session-wkhda8j7.js +0 -2
- package/bin/vm-hands/local-display-video-14fj7scm.js +0 -2
- package/bin/vm-hands/local-managed-process-hq1x6wqt.js +0 -2
- package/bin/vm-hands/local-pty-session-yr22ryvy.js +0 -2
- package/bin/vm-hands/permissions-5dhys0br.js +0 -2
- package/bin/vm-hands/reason-hands-protocol-k12sw3vm.js +0 -2
- package/bin/vm-hands/version-8z8e46x9.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-r7tb2z3z.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-vn7ag8c7.js +0 -2
- package/bin/vm-hands/worker-preview-readiness-84stxabw.js +0 -2
- package/bin/vm-hands/worker-sandbox-563c5g2f.js +0 -2
- /package/bin/vm-hands/{vm-hands-entry-lite-b6gsggvp.js → vm-hands-entry-lite-tyem93c1.js} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Jt,H}from"./vm-hands-entry-lite-w29d7ey0.js";import{ue,Ce,X,Ae,de,ir,et,Y,I,N,rn}from"./vm-hands-entry-lite-48rphbjm.js";import{Uo,ri}from"./vm-hands-entry-lite-4anjdcth.js";import{Io,P,Je,Se,Xe,ne,Ye,Vn,Ee,Qt,ae,U,L,ce,zr,qr,Kn}from"./vm-hands-entry-lite-sb7b4z8t.js";import{Pe,oe,pe,Z,Te,q,Q}from"./vm-hands-entry-lite-07apxfh8.js";import{Lt,Pr,lt,V,O,T,b,Cn}from"./vm-hands-entry-lite-kmtz5h74.js";import{Cr,Ar,xn,uo,Ue,kn}from"./vm-hands-entry-lite-5tnma5qb.js";import{K}from"./vm-hands-entry-lite-xrqztkhv.js";import{ji}from"./vm-hands-entry-lite-xe0benev.js";import{p,ze,$t,ut,po,_e,we}from"./vm-hands-entry-lite-2hfrcr50.js";import{v,h,mo}from"./vm-hands-entry-lite-hfx1q0b0.js";import{E}from"./vm-hands-entry-lite-72nj66ab.js";import{tr}from"./vm-hands-entry-lite-gezw3967.js";import{a,zo,qo,ie,Vo}from"./vm-hands-entry-lite-8dfw96ym.js";import{M,$i,Mi,Yo,y,t,k,At,o,d,u,n,c,g,ee,s,i}from"./vm-hands-entry-lite-wzv13c8k.js";import{Fi}from"./vm-hands-entry-lite-pzj5s203.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{Qo,se,Ui,C,Oe,$e,A}from"./vm-hands-entry-lite-b6gsggvp.js";var Oi=()=>{let e={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{unit:"entries",verb:"to have"}};function l(w){return e[w]??null}let f={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"},_={nan:"NaN"};return(w)=>{switch(w.code){case"invalid_type":{let S=_[w.expected]??w.expected,x=Yo(w.input),j=_[x]??x;return`Invalid input: expected ${S}, received ${j}`}case"invalid_value":if(w.values.length===1)return`Invalid input: expected ${Mi(w.values[0])}`;return`Invalid option: expected one of ${$i(w.values,"|")}`;case"too_big":{let S=w.inclusive?"<=":"<",x=l(w.origin);if(x)return`Too big: expected ${w.origin??"value"} to have ${S}${w.maximum.toString()} ${x.unit??"elements"}`;return`Too big: expected ${w.origin??"value"} to be ${S}${w.maximum.toString()}`}case"too_small":{let S=w.inclusive?">=":">",x=l(w.origin);if(x)return`Too small: expected ${w.origin} to have ${S}${w.minimum.toString()} ${x.unit}`;return`Too small: expected ${w.origin} to be ${S}${w.minimum.toString()}`}case"invalid_format":{let S=w;if(S.format==="starts_with")return`Invalid string: must start with "${S.prefix}"`;if(S.format==="ends_with")return`Invalid string: must end with "${S.suffix}"`;if(S.format==="includes")return`Invalid string: must include "${S.includes}"`;if(S.format==="regex")return`Invalid string: must match pattern ${S.pattern}`;return`Invalid ${f[S.format]??w.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${w.divisor}`;case"unrecognized_keys":return`Unrecognized key${w.keys.length>1?"s":""}: ${$i(w.keys,", ")}`;case"invalid_key":return`Invalid key in ${w.origin}`;case"invalid_union":if(w.options&&Array.isArray(w.options)&&w.options.length>0)return`Invalid discriminator value. Expected ${w.options.map((x)=>`'${x}'`).join(" | ")}`;return"Invalid input";case"invalid_element":return`Invalid value in ${w.origin}`;default:return"Invalid input"}}};function gn(){return{localeError:Oi()}}M(gn());class mt extends Error{}function No(e){let l;try{l=new URL(e)}catch{throw new mt("The proxy must be a URL like https://proxy.example.com:3128.")}if(l.protocol!=="https:"&&l.protocol!=="http:")throw new mt("The proxy URL must use the https or http scheme.");if(!l.hostname)throw new mt("The proxy URL must name a host.");if(l.port!==""&&Number(l.port)<1)throw new mt("The proxy URL must use a port between 1 and 65535.");if(l.pathname!==""&&l.pathname!=="/"||l.search||l.hash)throw new mt("The proxy URL must not carry a path, query, or fragment.");return l.toString()}import{createHash as xi}from"crypto";import{isAbsolute as Bo,join as jo,relative as Mo,resolve as qt,sep as Wo}from"path";var Vt=t().min(1).refine(Bo,"absolute path required"),Lo=c({version:i(1),apiOrigin:At(),channel:s(["staging","production"]),stateDirectory:Vt,workspaceRoot:Vt,lifetime:s(["persistent","ephemeral"]),executionMode:s(["confined","host"]).default("confined"),name:t().min(1).max(160).default("Reason headless worker"),slots:o().int().min(1).max(4).default(1),shutdownGraceMs:o().int().min(0).max(300000).default(30000),proxy:c({version:i(Jt),url:t().refine((e)=>{try{return No(e)===e}catch{return!1}},"invalid proxy URL"),caFile:Vt.optional()}).optional(),userChrome:d().optional(),cloudSessions:i(!0).optional(),localLogins:d().optional(),folders:u(Vt).min(1).max(31).optional()}),Pi=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,F=g("channel",[Lo,Lo.extend({channel:i("local-qa"),apiOrigin:t()})]).superRefine((e,l)=>{if(e.channel==="local-qa"){if(!Pi.test(e.apiOrigin))l.addIssue({code:"custom",message:"local QA worker requires an exact HTTPS trycloudflare.com quick-tunnel origin"})}else{let _=new URL(e.apiOrigin);if(_.origin!==e.apiOrigin||_.username||_.password||_.protocol!=="https:"&&!(_.protocol==="http:"&&ri(_.origin))||!ri(_.origin)&&!Uo(e.channel,_.origin))l.addIssue({code:"custom",message:"API origin must match channel (or loopback)"})}if(!je(e.workspaceRoot,e.stateDirectory))l.addIssue({code:"custom",message:"state and workspace must be disjoint"});let f=e.folders??[];if(new Set([e.workspaceRoot,...f]).size!==f.length+1||f.some((_)=>!je(_,e.stateDirectory)))l.addIssue({code:"custom",message:"folders must be distinct and disjoint from state"})});function m(e){return jo(e.stateDirectory,`headless-${e.channel}`)}function je(e,l){if(Fr(l,e))return!1;return!Fr(e,l)||E(jo(Wo,Mo(qt(e),qt(l))))}function Fr(e,l){let f=Mo(qt(e),qt(l));return f===""||f!==".."&&!f.startsWith(`..${Wo}`)&&!Bo(f)}function te(e){let{proxy:l,userChrome:f,cloudSessions:_,localLogins:w,folders:S,...x}=e;return xi("sha256").update(JSON.stringify(x)).digest("hex")}var Ii=4,Ai=[2375,2376,9222,9229];function mr(e){let l=new Set(Ai);for(let f of e){let _=new URL(f);l.add(Number(_.port||(["https:","wss:"].includes(_.protocol)?443:80)))}return l}function Gr(){throw new r("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var Ti=60000;function Fo(e){let l=new AbortController,f=new Map,_=(R)=>JSON.stringify([R.jobId,R.port]);function w(R){let B=e.authority.owner;if(l.signal.aborted||!e.isCurrent()||e.expiresAtMs<=Date.now()||R.organization_id!==B.organization_id||R.user_id!==B.user_id||R.device_id!==B.device_id)Gr()}function S(R){let B;try{B=e.environment.current()}catch{return null}return B.binding.target_generation===R.generation&&B.binding.target_fence_id===R.fenceId&&B.run_id===e.runId&&B.device_id===e.authority.owner.device_id&&B.root_id===e.authority.rootId?B:null}async function x(R,B,G){let W=await j(R,B,G);if(W!=="moved")return W;let D=await j(R,B,G);return D==="moved"?null:D}async function j(R,B,G){try{w(e.authority.owner);let W=e.identity();if(!W||G.aborted||R.expiresAtMs<=Date.now()||R.expiresAtMs>e.expiresAtMs)return null;let D=B.opened,re=D!==void 0&&W.generation>D.generation,J=S(W);if(re){if(J){if(J.revision<=D.revision||R.expiresAtMs>Date.parse(J.expires_at)||J.binding.target_revision!==D.attachmentRevision||J.binding.root_grant_revision!==D.grantRevision)return null;B.recoveringSinceMs=void 0}else if(Date.now()-(B.recoveringSinceMs??=Date.now())>Ti)return null}else if(!J||R.expiresAtMs>Date.parse(J.expires_at)||D&&(W.generation!==D.generation||W.fenceId!==D.fenceId))return null;let z=await e.inspect(R.jobId,G),fe=e.identity(),ve=fe&&S(fe);w(e.authority.owner);let be=J&&{generation:W.generation,fenceId:W.fenceId,snapshotId:J.snapshot_id,revision:J.revision,attachmentRevision:J.binding.target_revision,grantRevision:J.binding.root_grant_revision},Re=re?D:be;if(G.aborted||!fe)return null;if(fe.generation!==W.generation||fe.fenceId!==W.fenceId||ve?.snapshot_id!==J?.snapshot_id||ve?.revision!==J?.revision)return"moved";let Fe=z.ok&&z.job.environmentSnapshotId!==void 0&&z.job.environmentRevision!==void 0?{snapshotId:z.job.environmentSnapshotId,revision:z.job.environmentRevision}:null;if(!z.ok||z.generation!==W.generation||!Re||!Fe)return null;if((Fe.snapshotId!==Re.snapshotId||Fe.revision!==Re.revision)&&(re||!e.environment.carried(Fe.snapshotId,Fe.revision)))return null;if(!D&&W.generation===R.generation&&W.fenceId===R.fenceId)B.opened={...Re,...Fe};return{executorLaunchId:e.executorLaunchId,job:z.job,binding:{organizationId:e.authority.owner.organization_id,userId:e.authority.owner.user_id,deviceId:e.authority.owner.device_id,rootId:e.authority.rootId,runId:e.runId,attachmentRevision:Re.attachmentRevision,grantRevision:Re.grantRevision,generation:Re.generation,fenceId:Re.fenceId,jobId:z.job.jobId,port:R.port,expiresAtMs:R.expiresAtMs}}}catch{return null}}return{async open(R,B,G){w(B);let{binding:W,deviceRelayUrl:D}=ut(R);if(G.aborted||W.expiresAtMs<=Date.now()||W.expiresAtMs>Date.now()+p.lifetimeMs||new URL(D).origin!==e.authority.relayOrigin)Gr();let re=_(W),J=f.get(re);if(J){if(!ze(J.binding,W)||J.relay!==D)Gr();if(await J.opened,!await $t(()=>J.port.check())||G.aborted||J.abort.signal.aborted)Gr();return{opened:!0,binding:W}}if(f.size>=Ii)Gr();let z=new AbortController,fe={},ve=we({binding:W,deniedPorts:e.authority.deniedPorts,readCurrentJob:()=>x(W,fe,z.signal)}),be=()=>z.abort();if(G.addEventListener("abort",be,{once:!0}),l.signal.addEventListener("abort",be,{once:!0}),G.aborted||l.signal.aborted)be();let Re=_e({binding:W,deviceRelayUrl:D,port:ve,signal:z.signal}),Fe={binding:W,relay:D,abort:z,port:ve,opened:Re};f.set(re,Fe);let qe=()=>{if(G.removeEventListener("abort",be),l.signal.removeEventListener("abort",be),f.get(re)===Fe)f.delete(re)};try{if((await Re).closed.then(qe),G.removeEventListener("abort",be),w(B),z.signal.aborted||!await $t(()=>ve.check()))Gr();return{opened:!0,binding:W}}catch{z.abort(),qe(),Gr()}},async close(R,B){w(B);let{binding:G}=po(R),W=f.get(_(G));if(!W||!ze(W.binding,G))Gr();return W.abort.abort(),await W.opened.then((D)=>D.closed,()=>{return}),{closed:!0,binding:G}},dispose(){l.abort();for(let R of f.values())R.abort.abort();f.clear()}}}import{WebSocket as Rn}from"ws";var $o=(e)=>("data"in e)?e.data.length:e.bytes,Ko=2*Ye;function ar(e){throw new r(e,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var ht=(e)=>!["starting","running"].includes(e.state);function eo(e,l,f=Date.now()){let _=["relay_url","session_id","expires_at","cols","rows","pty","workspace"];if(Object.keys(e).length!==_.length||Object.keys(e).some((B)=>!_.includes(B))||!ae(l)||!ae(e.session_id)||typeof e.expires_at!=="string"||typeof e.relay_url!=="string"||e.relay_url.length>4096||![e.cols,e.rows].every((B)=>Number.isSafeInteger(B)&&Number(B)>=1&&Number(B)<=Ee))ar("invalid_pty_request");let w=e.pty;if(!w||typeof w!=="object"||Array.isArray(w))ar("invalid_pty_request");let S=w;if(Object.keys(S).length!==2||S.version!==1||!ce(S.jobId))ar("invalid_pty_request");let x;try{x=new URL(e.relay_url)}catch{return ar("invalid_pty_request")}if(!["ws:","wss:"].includes(x.protocol)||x.username||x.password||x.hash||x.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(x.hostname))ar("invalid_pty_request");let j=Date.parse(e.expires_at);if(!Number.isSafeInteger(j)||j<=f)ar("invalid_pty_request");return{workspace:N(e.workspace)??ar("invalid_pty_request"),session:{jobId:S.jobId,sessionId:e.session_id,operationId:l,relayUrl:x.href,cols:Number(e.cols),rows:Number(e.rows),leaseExpiresAtMs:Math.min(j,f+43200000)}}}async function Go(e){let{session:l,binding:f}=e;if(f.assertCurrent(),e.signal.aborted||Date.now()>=l.leaseExpiresAtMs)ar("cancelled");let _=new Rn(l.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:ne}),w=new AbortController,S=()=>{},x=()=>{w.abort(),S()};e.signal.addEventListener("abort",x,{once:!0});let j=setTimeout(x,Math.max(1,l.leaseExpiresAtMs-Date.now())),R=[],B=0,G=0,W=0,D=!1,re=!1,J=!1,z,fe,ve,be=(le)=>{ve=new r(le,"Bound terminal input was refused."),x()};_.on("error",()=>be("pty_relay_unavailable")),_.on("close",x),_.on("message",(le,he)=>{if(w.signal.aborted)return;if(!re){be("pty_not_ready");return}let xe=Array.isArray(le)?Buffer.concat(le):le instanceof ArrayBuffer?Buffer.from(le):le;if(xe.length===0)return;let Ke=R.at(-1),Le=he&&Ke!==void 0&&"data"in Ke&&Ke.data.length+xe.length<=ne;if(xe.length>ne||B+xe.length>Vn){be("pty_input_backpressure");return}if(Le)Ke.data=Buffer.concat([Ke.data,xe]);else if(he)R.push({data:Buffer.from(xe)});else try{let Be=JSON.parse(xe.toString("utf8"));if(Be&&Be.t==="close"&&Object.keys(Be).length===1){J=!0,x();return}if(!Be||Be.t!=="resize"||Object.keys(Be).length!==3||![Be.cols,Be.rows].every((ke)=>Number.isSafeInteger(ke)&&ke>=1&&ke<=Ee))throw Error("invalid_control");R.push({cols:Be.cols,rows:Be.rows,bytes:xe.length})}catch{be("invalid_pty_control");return}B+=xe.length,S()});function Re(le){return Kn(JSON.stringify({...f.scope,version:1,sessionId:l.sessionId,operationId:l.operationId,job:{...le,output:[],pty:le.pty?{...le.pty,output:[]}:void 0}}))}function Fe(le){if(!le.ok)ar(le.error);let he=le.job;if(le.generation!==f.scope.generation||he.jobId!==l.jobId||!he.pty||he.leaseExpiresAtMs>l.leaseExpiresAtMs||he.process&&he.process.executorLaunchId!==f.scope.executorLaunchId||he.process&&fe&&(he.process.pid!==fe.pid||he.process.processGroupId!==fe.processGroupId)||he.state!=="starting"&&(he.environmentRevision!==f.environment.revision||he.environmentSnapshotId!==f.environment.snapshotId))ar("pty_binding_changed");if(Re(he),he.process)fe??={...he.process};return he}async function qe(le){f.assertCurrent();let he=await f.request(le,w.signal);if(f.assertCurrent(),w.signal.aborted)ar("cancelled");let xe=Fe(he);if(xe.inputSequence!==G)ar("job_input_sequence");if(!ht(xe)&&xe.leaseExpiresAtMs<=Date.now())ar("pty_binding_changed");return xe}function ye(le){if(f.assertCurrent(),w.signal.aborted||_.readyState!==Rn.OPEN||_.bufferedAmount+Buffer.byteLength(le)>Ko)ar("pty_output_backpressure");_.send(le)}function We(le){if(le.firstCursor>W+1)W=le.firstCursor-1;for(let he of le.pty.output){if(he.cursor<=W)continue;if(he.cursor!==W+1)ar("pty_output_gap");let xe=Buffer.from(he.dataBase64,"base64");if(_.bufferedAmount+xe.length>Ko)return!1;ye(xe),W=he.cursor}if(W!==le.nextCursor)ar("pty_output_gap");return!0}async function Ve(le,he){let xe;try{await Promise.race([e.emit(le,he),new Promise((Ke,Le)=>{xe=setTimeout(()=>Le(new r("pty_event_unavailable","Terminal metadata delivery timed out.")),2000)})])}finally{clearTimeout(xe)}}async function De(){let le=AbortSignal.timeout(Qt),he=f.request({jobId:l.jobId,action:"cancel",input:{}},le),xe,Ke=new Promise((Le,Be)=>{if(xe=()=>Be(new r("pty_cleanup_unconfirmed","Terminal cleanup acknowledgement was not observed within authority.")),le.addEventListener("abort",xe,{once:!0}),le.aborted)xe()});try{let Le=await Promise.race([he,Ke]);if(le.aborted)ar("pty_cleanup_unconfirmed");return Fe(Le)}finally{le.removeEventListener("abort",xe)}}try{await new Promise((Le,Be)=>{let ke=setTimeout(()=>{x(),Be(new r("pty_relay_unavailable","Terminal pairing timed out."))},5000),Me=()=>{clearTimeout(ke),Be(new r("cancelled","Terminal pairing was cancelled."))};if(w.signal.addEventListener("abort",Me,{once:!0}),_.once("open",()=>{clearTimeout(ke),w.signal.removeEventListener("abort",Me),Le()}),w.signal.aborted)Me()}),f.assertCurrent(),D=!0,z=await qe({jobId:l.jobId,action:"start",input:{mode:"pty",cols:l.cols,rows:l.rows,leaseExpiresAtMs:l.leaseExpiresAtMs}});let le=Date.now()+5000;while(z.state==="starting"){if(Date.now()>=le)ar("pty_not_ready");await new Promise((Le)=>setTimeout(Le,25)),z=await qe({jobId:l.jobId,action:"inspect",input:{after:W}})}if(z.state!=="running"||z.inputSequence!==0||z.leaseExpiresAtMs<=Date.now())ar("pty_not_ready");await Ve("pty.ready",Re(z)),re=!0,ye(JSON.stringify({t:"open",cols:z.pty.cols,rows:z.pty.rows,receipt:Re(z)}));let he=!1,xe=0,Ke=!1;while(!w.signal.aborted){let Le=z.firstCursor>W+1,Be=We(z);if(ht(z)){if(Be)break}else if(Le)he=!0;else if(he&&Be&&Date.now()>=xe){he=!1,xe=Date.now()+1000;let{cols:Me,rows:rr}=z.pty;for(let or of[{cols:Me,rows:rr>1?rr-1:2},{cols:Me,rows:rr}]){if(ht(z))break;let Rr=++G;if(z=await qe({jobId:l.jobId,action:"resize",input:{sequence:Rr,...or}}),z.inputSequence!==Rr)ar("job_input_sequence")}continue}let ke=ht(z)||Ke?void 0:R.shift();if(ke){B-=$o(ke);let Me=++G;try{z=await qe("data"in ke?{jobId:l.jobId,action:"input",input:{sequence:Me,dataBase64:ke.data.toString("base64")}}:{jobId:l.jobId,action:"resize",input:{sequence:Me,cols:ke.cols,rows:ke.rows}})}catch(rr){if(!(rr instanceof r)||rr.code!=="job_input_backpressure")throw rr;G-=1,R.unshift(ke),B+=$o(ke),Ke=!0;continue}if(z.inputSequence!==Me)ar("job_input_sequence")}else if(await new Promise((Me)=>{let rr=setTimeout(Me,Ke||!Be?10:50);if(S=()=>{clearTimeout(rr),Me()},w.signal.aborted||!Ke&&R.length)S()}),Ke=!1,S=()=>{},!w.signal.aborted&&Be)try{z=await qe({jobId:l.jobId,action:"inspect",input:{after:W}})}catch(Me){if(!J||!(Me instanceof r)||Me.code!=="cancelled")throw Me}}}catch(le){ve??=le}finally{if(re=!1,R.length=0,clearTimeout(j),e.signal.removeEventListener("abort",x),x(),D&&(!z||!ht(z)))try{z=await De()}catch{z=void 0}try{if(!z||!ht(z)||z.pty?.cleanup!=="confirmed")ar("pty_cleanup_unconfirmed");let le=Re(z);if(_.readyState===Rn.OPEN)await new Promise((he)=>{let xe=setTimeout(he,500);_.send(JSON.stringify({t:"exit",code:z.exitCode,receipt:le}),()=>{clearTimeout(xe),he()})});await Ve("pty.stopped",le)}catch(le){ve??=le}_.terminate()}if(ve)throw ve;if(e.signal.aborted)ar("cancelled");if(!z)ar("pty_cleanup_unconfirmed");return{receipt:Re(z)}}import{createHash as Di,randomUUID as An}from"crypto";import{spawnSync as es}from"child_process";import{closeSync as Jo,constants as On,fstatSync as Ci,fsyncSync as Hi,lstatSync as Ht,mkdirSync as Ni,mkdtempSync as rs,openSync as Xo,readFileSync as Li,readdirSync as ts,realpathSync as Vr,rmSync as Pn,unlinkSync as Bi}from"fs";import{createConnection as Wi}from"net";import{dirname as zi,join as ot,sep as In}from"path";import{tmpdir as ns}from"os";var hr=new Map,Jr=new Map;function Ur(e,l){return Di("sha256").update(JSON.stringify([e,l])).digest("hex")}function gt(e){try{Ni(e,{mode:448})}catch(f){if(!(f instanceof Error&&("code"in f)&&f.code==="EEXIST"))throw f}let l=Ht(e);if(!l.isDirectory()||l.isSymbolicLink()||!A(l)||Vr(e)!==e)throw new r("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function Ki(e){let l;try{l=Ht(e)}catch(f){if(f instanceof Error&&"code"in f&&f.code==="ENOENT")return!1;throw f}return!l.isDirectory()||l.isSymbolicLink()||ts(e).length>0}function Gi(e){if(process.platform==="win32")return Ui();let l=e.map((f)=>{try{return Vr(f)}catch{return f}});for(let f of[()=>Ui(),()=>Vr("/dev/shm"),()=>Vr(ns())]){let _;try{_=f()}catch{continue}if(!l.some((w)=>_===w||_.startsWith(w.endsWith(In)?w:w+In)))return _}throw new r("invalid_hands_workspace","A Session can't work in this computer's temporary folder itself; start it in a project folder inside it.")}function gr(e){let l=Ur(e.root,e.runId),f=e.previousRuntimeDirectories?.find((x)=>Ki(ot(x,"jobs",l.slice(0,16))))??e.runtimeDirectory;gt(f);let _=ot(f,"jobs");gt(_);let w=ot(_,l.slice(0,16));if(e.maxScopes!==void 0){let x=ts(_);if(!Number.isSafeInteger(e.maxScopes)||e.maxScopes<1||x.length>e.maxScopes||!x.includes(l.slice(0,16))&&x.length>=e.maxScopes)throw new r("process_journal_capacity","Managed process receipt capacity is full; preserve uncertain jobs and reconcile their existing receipts before starting more work.")}gt(w);let S=rs(ot(Gi(e.folders??[]),"reason-j-"));try{return gt(S),{journalDirectory:w,scopeId:l,launchDirectory:S,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${An()}`:ot(S,"control.sock"),disposeSocket:()=>Pn(S,{recursive:!0,force:!0})}}catch(x){throw Pn(S,{recursive:!0,force:!0}),x}}var Ji=60000,Vi=5000;function qi(e){if(process.platform==="win32")return Yi(e);let l=es("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:2000,env:{...process.env,LC_ALL:"C",LANG:"C"}}),f=l.status===0?/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(l.stdout.trim()):null,_=f?"JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(f[1]):-1;if(!f||_<0||_%3!==0)return null;let w=new Date(Number(f[6]),_/3,Number(f[2]),Number(f[3]),Number(f[4]),Number(f[5])).getTime();return Number.isFinite(w)?w:null}function Yi(e){let l=es(C("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:Oe()}),f=l.status===0?Date.parse(l.stdout.trim()):Number.NaN;return Number.isFinite(f)?f:null}function os(e,l={}){let f=ot(e.journalDirectory,"owner.lock"),_;try{_=Xo(f,On.O_RDONLY|On.O_NOFOLLOW)}catch{return null}try{let w=Ci(_);if(!w.isFile()||w.nlink!==1||!A(w)||w.size>4096)return null;let S=null;try{S=JSON.parse(Li(_,"utf8"))}catch{}let x;if(S===null){if((l.now??Date.now)()-w.mtimeMs<Ji)return null;x={reason:"never_written",executorLaunchId:null}}else{let{version:B,scopeId:G,pid:W,createdAtMs:D,executorLaunchId:re}=S;if(B!==1||G!==e.scopeId||typeof re!=="string"||typeof W!=="number"||!Number.isSafeInteger(W)||W<1||W===process.pid||typeof D!=="number"||!Number.isSafeInteger(D))return null;if(!(l.exists??((z)=>{try{return process.kill(z,0),!0}catch(fe){return!(fe instanceof Error&&("code"in fe)&&fe.code==="ESRCH")}}))(W))x={reason:"owner_exited",executorLaunchId:re};else{let z=(l.startedAtMs??qi)(W);if(z===null||z<=D+Vi)return null;x={reason:"pid_reused",executorLaunchId:re}}}let j=Ht(f);if(j.dev!==w.dev||j.ino!==w.ino)return null;Bi(f);let R=Xo(e.journalDirectory,On.O_RDONLY);try{Hi(R)}finally{Jo(R)}return x}catch{return null}finally{Jo(_)}}function ss(e){let l={...e,workspace:e.workspace&&Object.freeze({...e.workspace}),previewAuthority:e.previewAuthority&&Object.freeze({...e.previewAuthority,owner:Object.freeze({...e.previewAuthority.owner}),deniedPorts:new Set(e.previewAuthority.deniedPorts)})},f=Ur(l.root,l.runId);if(hr.has(f)||l.operationId!==void 0&&Jr.has(l.operationId))throw new r("hands_jobs_busy","The Session already has a live Hands job supervisor.");let _={binding:l,key:f,terminals:new Map};if(l.previewAuthority&&l.environment)_.previews=Fo({authority:l.previewAuthority,runId:l.runId,expiresAtMs:l.expiresAtMs,executorLaunchId:l.executorLaunchId,environment:l.environment,isCurrent:()=>hr.get(_.key)===_,identity:()=>{try{return bt(l)}catch{return null}},inspect:(w,S)=>{if(hr.get(_.key)!==_)throw new r("preview_unavailable","The Hands supervisor is no longer current.");return is(l,{jobId:w,action:"inspect",input:{after:0}},S)}});if(hr.set(f,_),l.operationId!==void 0)Jr.set(l.operationId,_);return()=>{if(hr.get(_.key)===_)hr.delete(_.key);if(l.operationId!==void 0&&Jr.get(l.operationId)===_)Jr.delete(l.operationId);_.previews?.dispose();for(let w of _.terminals.values())w.abort()}}var Xi=5000,Zi=20;async function to(e){let l=(w)=>{throw new r("hands_rebind_unavailable",w)};if(!L(e.operationId)||!L(e.runId)||!L(e.fenceId)||!U(e.targetGeneration))l("Reason sent an invalid Hands rebind.");let f=Jr.get(e.operationId);if(!f||f.binding.root!==e.root)return l("No live Hands supervisor owns this operation.");for(let w=Date.now()+Xi;;){if(e.signal?.aborted)l("The Hands rebind was cancelled.");if(Jr.get(e.operationId)!==f)l("The Hands supervisor is no longer current.");let S=null;try{S=bt(f.binding)}catch{}if(S&&S.generation===e.targetGeneration&&S.fenceId===e.fenceId)break;if(S&&S.generation>e.targetGeneration||Date.now()>=w)l("The executor did not adopt this take.");await new Promise((x)=>setTimeout(x,Zi))}if(Jr.get(e.operationId)!==f||hr.get(f.key)!==f)l("The Hands supervisor is no longer current.");let _=Ur(e.root,e.runId);if(f.key===_)return;if(hr.has(_))l("The taking run already has a live Hands job supervisor.");hr.delete(f.key);for(let w of f.terminals.values())w.abort();f.key=_,hr.set(_,f)}function at(e){let l="operationId"in e?Jr.get(e.operationId):hr.get(Ur(e.root,e.runId)),f=l&&l.binding.root===e.root?l.binding:void 0;if(!f?.environment||f.expiresAtMs<=Date.now())throw new r("environment_unavailable","No live Hands supervisor owns this environment.");return f.environment.install(e.payload)}async function ro(e){let l=hr.get(Ur(e.root,e.runId));if(!l?.previews||!e.owner)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return l.previews.open(e.payload,e.owner,e.signal)}async function no(e){let l=hr.get(Ur(e.root,e.runId));if(!l?.previews||!e.owner||e.signal.aborted)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return l.previews.close(e.payload,e.owner)}async function io(e){let l=Ur(e.root,e.runId),f=hr.get(l),_=f?.binding,w=_?.runId,S=_?.previewAuthority,x=_?.environment,j=e.owner&&{...e.owner},R=e.authority&&{...e.authority},B=()=>{throw new r("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!f||!_||!S||!x||!j||!R||!_.workspace)return B();let G=Object.freeze({..._.workspace}),W=bt(_),D=x.current(),re=()=>{if(hr.get(l)!==f||j.organization_id!==S.owner.organization_id||j.user_id!==S.owner.user_id||j.device_id!==S.owner.device_id||e.deviceId!==S.owner.device_id||e.rootId!==S.rootId||I(e.workspace)!==I(G))B();let z=bt(_),fe=x.current();if(z.generation!==W.generation||z.fenceId!==W.fenceId||fe.run_id!==w||fe.device_id!==e.deviceId||fe.root_id!==e.rootId||fe.snapshot_id!==D.snapshot_id||fe.revision!==D.revision||fe.binding.target_generation!==W.generation||fe.binding.target_fence_id!==W.fenceId||R.device_id!==e.deviceId||R.binding!==fe.binding.kind||R.target_revision!==fe.binding.target_revision||R.root_grant_revision!==fe.binding.root_grant_revision||R.target_generation!==W.generation||R.target_fence_id!==W.fenceId)B()};if(re(),new URL(e.session.relayUrl).origin!==S.relayOrigin||f.terminals.has(e.session.jobId)||f.terminals.size>=4)return B();let J=new AbortController;f.terminals.set(e.session.jobId,J);try{return await Go({session:{...e.session,leaseExpiresAtMs:Math.min(e.session.leaseExpiresAtMs,W.expiresAtMs,Date.parse(D.expires_at))},signal:AbortSignal.any([e.signal,J.signal]),emit:e.emit,binding:{assertCurrent:re,environment:{revision:D.revision,snapshotId:D.snapshot_id},scope:{runId:e.runId,deviceId:e.deviceId,rootId:e.rootId,workspace:G,binding:D.binding.kind,targetRevision:D.binding.target_revision,rootGrantRevision:D.binding.root_grant_revision,generation:W.generation,fenceId:W.fenceId,executorLaunchId:W.executorLaunchId},request:(z,fe)=>_r(W,zr(JSON.stringify({...z,type:"job",version:2,generation:W.generation,id:An()})),fe)}})}finally{if(f.terminals.get(e.session.jobId)===J)f.terminals.delete(e.session.jobId)}}async function oo(e){if(ce(e.payload.jobId))throw new r("pty_binding_required","PTY jobs require the bound terminal capability.");let l=hr.get(Ur(e.root,e.runId))?.binding;if(!l||l.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","No live Hands supervisor owns this Session and root.");return is(l,e.payload,e.signal)}var Qi=1e4,ea=20,ra=Se/2,ta=Je/2,na=(e)=>e.output.reduce((l,f)=>l+f.text.length,0);async function is(e,l,f){if(Object.keys(l).some((B)=>!["jobId","action","input","waitForExitMs"].includes(B)))throw new r("invalid_payload","Unexpected job control field.");let{waitForExitMs:_,...w}=l;if(_!==void 0&&(w.action!=="start"||typeof w.input!=="object"||w.input===null||!("script"in w.input)||typeof _!=="number"||!Number.isSafeInteger(_)||_<1||_>Qi))throw new r("invalid_payload","Only a script start may wait for its job, within its bound.");let S=(B)=>{let G=bt(e);return _r(G,zr(JSON.stringify({...B,type:"job",version:2,generation:G.generation,id:An()})),f)},x=await S(w);if(_===void 0)return x;let j=Date.now()+_,R=x;while(R.ok&&["starting","running"].includes(R.job.state)&&R.job.output.length<ra&&na(R.job)<ta&&!f.aborted&&Date.now()<j){if(await new Promise((B)=>setTimeout(B,Math.min(ea,j-Date.now()))),f.aborted)break;try{let B=await S({jobId:w.jobId,action:"inspect",input:{after:0}});if(!B.ok)break;R=B}catch{break}}return R}function bt(e){if(e.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","Hands authority expired.");let l=e.readIdentity?e.readIdentity():e;if(!l||!U(l.generation)||!L(l.fenceId)||l.generation<e.generation||l.generation===e.generation&&l.fenceId!==e.fenceId)throw new r("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return e.generation=l.generation,e.fenceId=l.fenceId,{...e}}function _r(e,l,f){if(f.aborted)return Promise.reject(new r("cancelled","Job control was cancelled."));return new Promise((_,w)=>{let S=Wi(e.socketPath),x="",j=!1,R,B=(W,D)=>{if(j)return;if(j=!0,clearTimeout(R),f.removeEventListener("abort",G),S.destroy(),W)w(W);else _(D)},G=()=>B(new r("cancelled","Job control waiter cancelled; inspect before retrying mutations."));f.addEventListener("abort",G,{once:!0}),S.setEncoding("utf8"),R=setTimeout(()=>B(new r("hands_job_result_unknown","Job control timed out; inspect before retrying mutations.")),Math.min(1e4,Math.max(1,e.expiresAtMs-Date.now()))),S.on("error",()=>B(new r("hands_job_result_unknown","Hands job control connection failed."))),S.once("connect",()=>S.write(JSON.stringify({version:1,scopeId:e.scopeId,fenceId:e.fenceId,executorLaunchId:e.executorLaunchId,request:l})+`
|
|
3
|
-
`)),S.on("data",(
|
|
4
|
-
`)}var yr=c({version:i(1),snapshot_id:k(),revision:o().int().positive(),run_id:t().min(1).max(160),device_id:k(),root_id:k(),binding:Tn.extend({target_generation:o().int().positive(),target_fence_id:k()}),expires_at:y.datetime({offset:!0}),variables:ee(t().max(128).regex(Lt),t().refine((e)=>!e.includes("\x00")&&fs(e)<=V.valueBytes)).refine((e)=>Object.keys(e).length<=V.variables),github_auth:i("local_gh").optional(),git:c({base_url:At().max(2048),token:t().min(1).max(4096).regex(/^[A-Za-z0-9._~-]+$/),expires_at:y.datetime({offset:!0})}).nullable(),cloud_access:oa.optional()}).refine((e)=>e.github_auth!=="local_gh"||e.git===null,"conflicting git authority").refine((e)=>sa(e)<=V.snapshotBytes,"snapshot too large");import{spawn as ia}from"child_process";import{basename as aa,isAbsolute as Au}from"path";var ca=0,ps=120000,_s=15000,da=65536;function Dn(e=process.execPath,l=process.argv[1]){let f=aa(e),_=(f.startsWith("bun")||f.startsWith("node"))&&typeof l==="string"&&l.length>0;return{command:e,prefix:_?[l]:[]}}function co(e={}){let{command:l,prefix:f}=Dn(e.executablePath,e.sourceEntrypoint),_=e.spawnProcess??ia,w=e.now??Date.now,S=null,x=0,
|
|
2
|
+
import{qt,j}from"./vm-hands-entry-lite-dgfx0rbn.js";import{ue,Ce,X,Ae,de,ir,et,Y,I,N,rn}from"./vm-hands-entry-lite-48rphbjm.js";import{Uo,ri}from"./vm-hands-entry-lite-4anjdcth.js";import{go,P,Ve,ve,Ge,ne,Ke,Ln,Se,Kt,ae,H,L,ce,jr,Hr,Mn}from"./vm-hands-entry-lite-n7bd44rm.js";import{Pe,oe,pe,Z,Te,q,Q}from"./vm-hands-entry-lite-07apxfh8.js";import{Lt,Pr,lt,V,O,T,b,Cn}from"./vm-hands-entry-lite-1yv5qqew.js";import{Cr,Ar,xn,uo,Ue,kn}from"./vm-hands-entry-lite-gje7xvy9.js";import{K}from"./vm-hands-entry-lite-wghmyfba.js";import{ji}from"./vm-hands-entry-lite-qd46yhvz.js";import{p,ze,$t,ut,po,_e,we}from"./vm-hands-entry-lite-bpamn7ny.js";import{v,h,mo}from"./vm-hands-entry-lite-h1qjggz0.js";import{E}from"./vm-hands-entry-lite-46pwqvpf.js";import{tr}from"./vm-hands-entry-lite-pg2czhxb.js";import{a,zo,qo,ie,Vo}from"./vm-hands-entry-lite-8dfw96ym.js";import{M,$i,Mi,Yo,y,t,k,At,o,d,u,n,c,g,ee,s,i}from"./vm-hands-entry-lite-wzv13c8k.js";import{Fi}from"./vm-hands-entry-lite-pzj5s203.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{Qo,se,Ui,C,Oe,$e,A}from"./vm-hands-entry-lite-tyem93c1.js";var Oi=()=>{let e={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{unit:"entries",verb:"to have"}};function l(w){return e[w]??null}let f={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"},_={nan:"NaN"};return(w)=>{switch(w.code){case"invalid_type":{let S=_[w.expected]??w.expected,x=Yo(w.input),W=_[x]??x;return`Invalid input: expected ${S}, received ${W}`}case"invalid_value":if(w.values.length===1)return`Invalid input: expected ${Mi(w.values[0])}`;return`Invalid option: expected one of ${$i(w.values,"|")}`;case"too_big":{let S=w.inclusive?"<=":"<",x=l(w.origin);if(x)return`Too big: expected ${w.origin??"value"} to have ${S}${w.maximum.toString()} ${x.unit??"elements"}`;return`Too big: expected ${w.origin??"value"} to be ${S}${w.maximum.toString()}`}case"too_small":{let S=w.inclusive?">=":">",x=l(w.origin);if(x)return`Too small: expected ${w.origin} to have ${S}${w.minimum.toString()} ${x.unit}`;return`Too small: expected ${w.origin} to be ${S}${w.minimum.toString()}`}case"invalid_format":{let S=w;if(S.format==="starts_with")return`Invalid string: must start with "${S.prefix}"`;if(S.format==="ends_with")return`Invalid string: must end with "${S.suffix}"`;if(S.format==="includes")return`Invalid string: must include "${S.includes}"`;if(S.format==="regex")return`Invalid string: must match pattern ${S.pattern}`;return`Invalid ${f[S.format]??w.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${w.divisor}`;case"unrecognized_keys":return`Unrecognized key${w.keys.length>1?"s":""}: ${$i(w.keys,", ")}`;case"invalid_key":return`Invalid key in ${w.origin}`;case"invalid_union":if(w.options&&Array.isArray(w.options)&&w.options.length>0)return`Invalid discriminator value. Expected ${w.options.map((x)=>`'${x}'`).join(" | ")}`;return"Invalid input";case"invalid_element":return`Invalid value in ${w.origin}`;default:return"Invalid input"}}};function gn(){return{localeError:Oi()}}M(gn());class mt extends Error{}function No(e){let l;try{l=new URL(e)}catch{throw new mt("The proxy must be a URL like https://proxy.example.com:3128.")}if(l.protocol!=="https:"&&l.protocol!=="http:")throw new mt("The proxy URL must use the https or http scheme.");if(!l.hostname)throw new mt("The proxy URL must name a host.");if(l.port!==""&&Number(l.port)<1)throw new mt("The proxy URL must use a port between 1 and 65535.");if(l.pathname!==""&&l.pathname!=="/"||l.search||l.hash)throw new mt("The proxy URL must not carry a path, query, or fragment.");return l.toString()}import{createHash as xi}from"crypto";import{isAbsolute as Bo,join as jo,relative as Mo,resolve as Yt,sep as Wo}from"path";var Vt=t().min(1).refine(Bo,"absolute path required"),Lo=c({version:i(1),apiOrigin:At(),channel:s(["staging","production"]),stateDirectory:Vt,workspaceRoot:Vt,lifetime:s(["persistent","ephemeral"]),executionMode:s(["confined","host"]).default("confined"),name:t().min(1).max(160).default("Reason headless worker"),slots:o().int().min(1).max(4).default(1),shutdownGraceMs:o().int().min(0).max(300000).default(30000),proxy:c({version:i(qt),url:t().refine((e)=>{try{return No(e)===e}catch{return!1}},"invalid proxy URL"),caFile:Vt.optional()}).optional(),userChrome:d().optional(),cloudSessions:i(!0).optional(),localLogins:d().optional(),folders:u(Vt).min(1).max(31).optional()}),Pi=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,F=g("channel",[Lo,Lo.extend({channel:i("local-qa"),apiOrigin:t()})]).superRefine((e,l)=>{if(e.channel==="local-qa"){if(!Pi.test(e.apiOrigin))l.addIssue({code:"custom",message:"local QA worker requires an exact HTTPS trycloudflare.com quick-tunnel origin"})}else{let _=new URL(e.apiOrigin);if(_.origin!==e.apiOrigin||_.username||_.password||_.protocol!=="https:"&&!(_.protocol==="http:"&&ri(_.origin))||!ri(_.origin)&&!Uo(e.channel,_.origin))l.addIssue({code:"custom",message:"API origin must match channel (or loopback)"})}if(!je(e.workspaceRoot,e.stateDirectory))l.addIssue({code:"custom",message:"state and workspace must be disjoint"});let f=e.folders??[];if(new Set([e.workspaceRoot,...f]).size!==f.length+1||f.some((_)=>!je(_,e.stateDirectory)))l.addIssue({code:"custom",message:"folders must be distinct and disjoint from state"})});function m(e){return jo(e.stateDirectory,`headless-${e.channel}`)}function je(e,l){if(zr(l,e))return!1;return!zr(e,l)||E(jo(Wo,Mo(Yt(e),Yt(l))))}function zr(e,l){let f=Mo(Yt(e),Yt(l));return f===""||f!==".."&&!f.startsWith(`..${Wo}`)&&!Bo(f)}function te(e){let{proxy:l,userChrome:f,cloudSessions:_,localLogins:w,folders:S,...x}=e;return xi("sha256").update(JSON.stringify(x)).digest("hex")}var Ii=4,Ai=[2375,2376,9222,9229];function mr(e){let l=new Set(Ai);for(let f of e){let _=new URL(f);l.add(Number(_.port||(["https:","wss:"].includes(_.protocol)?443:80)))}return l}function Jr(){throw new r("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var Ti=60000;function Fo(e){let l=new AbortController,f=new Map,_=(R)=>JSON.stringify([R.jobId,R.port]);function w(R){let B=e.authority.owner;if(l.signal.aborted||!e.isCurrent()||e.expiresAtMs<=Date.now()||R.organization_id!==B.organization_id||R.user_id!==B.user_id||R.device_id!==B.device_id)Jr()}function S(R){let B;try{B=e.environment.current()}catch{return null}return B.binding.target_generation===R.generation&&B.binding.target_fence_id===R.fenceId&&B.run_id===e.runId&&B.device_id===e.authority.owner.device_id&&B.root_id===e.authority.rootId?B:null}async function x(R,B,G){let U=await W(R,B,G);if(U!=="moved")return U;let D=await W(R,B,G);return D==="moved"?null:D}async function W(R,B,G){try{w(e.authority.owner);let U=e.identity();if(!U||G.aborted||R.expiresAtMs<=Date.now()||R.expiresAtMs>e.expiresAtMs)return null;let D=B.opened,re=D!==void 0&&U.generation>D.generation,J=S(U);if(re){if(J){if(J.revision<=D.revision||R.expiresAtMs>Date.parse(J.expires_at)||J.binding.target_revision!==D.attachmentRevision||J.binding.root_grant_revision!==D.grantRevision)return null;B.recoveringSinceMs=void 0}else if(Date.now()-(B.recoveringSinceMs??=Date.now())>Ti)return null}else if(!J||R.expiresAtMs>Date.parse(J.expires_at)||D&&(U.generation!==D.generation||U.fenceId!==D.fenceId))return null;let z=await e.inspect(R.jobId,G),fe=e.identity(),ke=fe&&S(fe);w(e.authority.owner);let be=J&&{generation:U.generation,fenceId:U.fenceId,snapshotId:J.snapshot_id,revision:J.revision,attachmentRevision:J.binding.target_revision,grantRevision:J.binding.root_grant_revision},Re=re?D:be;if(G.aborted||!fe)return null;if(fe.generation!==U.generation||fe.fenceId!==U.fenceId||ke?.snapshot_id!==J?.snapshot_id||ke?.revision!==J?.revision)return"moved";let Fe=z.ok&&z.job.environmentSnapshotId!==void 0&&z.job.environmentRevision!==void 0?{snapshotId:z.job.environmentSnapshotId,revision:z.job.environmentRevision}:null;if(!z.ok||z.generation!==U.generation||!Re||!Fe)return null;if((Fe.snapshotId!==Re.snapshotId||Fe.revision!==Re.revision)&&(re||!e.environment.carried(Fe.snapshotId,Fe.revision)))return null;if(!D&&U.generation===R.generation&&U.fenceId===R.fenceId)B.opened={...Re,...Fe};return{executorLaunchId:e.executorLaunchId,job:z.job,binding:{organizationId:e.authority.owner.organization_id,userId:e.authority.owner.user_id,deviceId:e.authority.owner.device_id,rootId:e.authority.rootId,runId:e.runId,attachmentRevision:Re.attachmentRevision,grantRevision:Re.grantRevision,generation:Re.generation,fenceId:Re.fenceId,jobId:z.job.jobId,port:R.port,expiresAtMs:R.expiresAtMs}}}catch{return null}}return{async open(R,B,G){w(B);let{binding:U,deviceRelayUrl:D}=ut(R);if(G.aborted||U.expiresAtMs<=Date.now()||U.expiresAtMs>Date.now()+p.lifetimeMs||new URL(D).origin!==e.authority.relayOrigin)Jr();let re=_(U),J=f.get(re);if(J){if(!ze(J.binding,U)||J.relay!==D)Jr();if(await J.opened,!await $t(()=>J.port.check())||G.aborted||J.abort.signal.aborted)Jr();return{opened:!0,binding:U}}if(f.size>=Ii)Jr();let z=new AbortController,fe={},ke=we({binding:U,deniedPorts:e.authority.deniedPorts,readCurrentJob:()=>x(U,fe,z.signal)}),be=()=>z.abort();if(G.addEventListener("abort",be,{once:!0}),l.signal.addEventListener("abort",be,{once:!0}),G.aborted||l.signal.aborted)be();let Re=_e({binding:U,deviceRelayUrl:D,port:ke,signal:z.signal}),Fe={binding:U,relay:D,abort:z,port:ke,opened:Re};f.set(re,Fe);let Xe=()=>{if(G.removeEventListener("abort",be),l.signal.removeEventListener("abort",be),f.get(re)===Fe)f.delete(re)};try{if((await Re).closed.then(Xe),G.removeEventListener("abort",be),w(B),z.signal.aborted||!await $t(()=>ke.check()))Jr();return{opened:!0,binding:U}}catch{z.abort(),Xe(),Jr()}},async close(R,B){w(B);let{binding:G}=po(R),U=f.get(_(G));if(!U||!ze(U.binding,G))Jr();return U.abort.abort(),await U.opened.then((D)=>D.closed,()=>{return}),{closed:!0,binding:G}},dispose(){l.abort();for(let R of f.values())R.abort.abort();f.clear()}}}import{WebSocket as Rn}from"ws";var $o=(e)=>("data"in e)?e.data.length:e.bytes,Ko=2*Ke;function ar(e){throw new r(e,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var ht=(e)=>!["starting","running"].includes(e.state);function eo(e,l,f=Date.now()){let _=["relay_url","session_id","expires_at","cols","rows","pty","workspace"];if(Object.keys(e).length!==_.length||Object.keys(e).some((B)=>!_.includes(B))||!ae(l)||!ae(e.session_id)||typeof e.expires_at!=="string"||typeof e.relay_url!=="string"||e.relay_url.length>4096||![e.cols,e.rows].every((B)=>Number.isSafeInteger(B)&&Number(B)>=1&&Number(B)<=Se))ar("invalid_pty_request");let w=e.pty;if(!w||typeof w!=="object"||Array.isArray(w))ar("invalid_pty_request");let S=w;if(Object.keys(S).length!==2||S.version!==1||!ce(S.jobId))ar("invalid_pty_request");let x;try{x=new URL(e.relay_url)}catch{return ar("invalid_pty_request")}if(!["ws:","wss:"].includes(x.protocol)||x.username||x.password||x.hash||x.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(x.hostname))ar("invalid_pty_request");let W=Date.parse(e.expires_at);if(!Number.isSafeInteger(W)||W<=f)ar("invalid_pty_request");return{workspace:N(e.workspace)??ar("invalid_pty_request"),session:{jobId:S.jobId,sessionId:e.session_id,operationId:l,relayUrl:x.href,cols:Number(e.cols),rows:Number(e.rows),leaseExpiresAtMs:Math.min(W,f+43200000)}}}async function Go(e){let{session:l,binding:f}=e;if(f.assertCurrent(),e.signal.aborted||Date.now()>=l.leaseExpiresAtMs)ar("cancelled");let _=new Rn(l.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:ne}),w=new AbortController,S=()=>{},x=()=>{w.abort(),S()};e.signal.addEventListener("abort",x,{once:!0});let W=setTimeout(x,Math.max(1,l.leaseExpiresAtMs-Date.now())),R=[],B=0,G=0,U=0,D=!1,re=!1,J=!1,z,fe,ke,be=(le)=>{ke=new r(le,"Bound terminal input was refused."),x()};_.on("error",()=>be("pty_relay_unavailable")),_.on("close",x),_.on("message",(le,he)=>{if(w.signal.aborted)return;if(!re){be("pty_not_ready");return}let xe=Array.isArray(le)?Buffer.concat(le):le instanceof ArrayBuffer?Buffer.from(le):le;if(xe.length===0)return;let Je=R.at(-1),Le=he&&Je!==void 0&&"data"in Je&&Je.data.length+xe.length<=ne;if(xe.length>ne||B+xe.length>Ln){be("pty_input_backpressure");return}if(Le)Je.data=Buffer.concat([Je.data,xe]);else if(he)R.push({data:Buffer.from(xe)});else try{let Be=JSON.parse(xe.toString("utf8"));if(Be&&Be.t==="close"&&Object.keys(Be).length===1){J=!0,x();return}if(!Be||Be.t!=="resize"||Object.keys(Be).length!==3||![Be.cols,Be.rows].every((Ee)=>Number.isSafeInteger(Ee)&&Ee>=1&&Ee<=Se))throw Error("invalid_control");R.push({cols:Be.cols,rows:Be.rows,bytes:xe.length})}catch{be("invalid_pty_control");return}B+=xe.length,S()});function Re(le){return Mn(JSON.stringify({...f.scope,version:1,sessionId:l.sessionId,operationId:l.operationId,job:{...le,output:[],pty:le.pty?{...le.pty,output:[]}:void 0}}))}function Fe(le){if(!le.ok)ar(le.error);let he=le.job;if(le.generation!==f.scope.generation||he.jobId!==l.jobId||!he.pty||he.leaseExpiresAtMs>l.leaseExpiresAtMs||he.process&&he.process.executorLaunchId!==f.scope.executorLaunchId||he.process&&fe&&(he.process.pid!==fe.pid||he.process.processGroupId!==fe.processGroupId)||he.state!=="starting"&&(he.environmentRevision!==f.environment.revision||he.environmentSnapshotId!==f.environment.snapshotId))ar("pty_binding_changed");if(Re(he),he.process)fe??={...he.process};return he}async function Xe(le){f.assertCurrent();let he=await f.request(le,w.signal);if(f.assertCurrent(),w.signal.aborted)ar("cancelled");let xe=Fe(he);if(xe.inputSequence!==G)ar("job_input_sequence");if(!ht(xe)&&xe.leaseExpiresAtMs<=Date.now())ar("pty_binding_changed");return xe}function ye(le){if(f.assertCurrent(),w.signal.aborted||_.readyState!==Rn.OPEN||_.bufferedAmount+Buffer.byteLength(le)>Ko)ar("pty_output_backpressure");_.send(le)}function We(le){if(le.firstCursor>U+1)U=le.firstCursor-1;for(let he of le.pty.output){if(he.cursor<=U)continue;if(he.cursor!==U+1)ar("pty_output_gap");let xe=Buffer.from(he.dataBase64,"base64");if(_.bufferedAmount+xe.length>Ko)return!1;ye(xe),U=he.cursor}if(U!==le.nextCursor)ar("pty_output_gap");return!0}async function Ye(le,he){let xe;try{await Promise.race([e.emit(le,he),new Promise((Je,Le)=>{xe=setTimeout(()=>Le(new r("pty_event_unavailable","Terminal metadata delivery timed out.")),2000)})])}finally{clearTimeout(xe)}}async function De(){let le=AbortSignal.timeout(Kt),he=f.request({jobId:l.jobId,action:"cancel",input:{}},le),xe,Je=new Promise((Le,Be)=>{if(xe=()=>Be(new r("pty_cleanup_unconfirmed","Terminal cleanup acknowledgement was not observed within authority.")),le.addEventListener("abort",xe,{once:!0}),le.aborted)xe()});try{let Le=await Promise.race([he,Je]);if(le.aborted)ar("pty_cleanup_unconfirmed");return Fe(Le)}finally{le.removeEventListener("abort",xe)}}try{await new Promise((Le,Be)=>{let Ee=setTimeout(()=>{x(),Be(new r("pty_relay_unavailable","Terminal pairing timed out."))},5000),Me=()=>{clearTimeout(Ee),Be(new r("cancelled","Terminal pairing was cancelled."))};if(w.signal.addEventListener("abort",Me,{once:!0}),_.once("open",()=>{clearTimeout(Ee),w.signal.removeEventListener("abort",Me),Le()}),w.signal.aborted)Me()}),f.assertCurrent(),D=!0,z=await Xe({jobId:l.jobId,action:"start",input:{mode:"pty",cols:l.cols,rows:l.rows,leaseExpiresAtMs:l.leaseExpiresAtMs}});let le=Date.now()+5000;while(z.state==="starting"){if(Date.now()>=le)ar("pty_not_ready");await new Promise((Le)=>setTimeout(Le,25)),z=await Xe({jobId:l.jobId,action:"inspect",input:{after:U}})}if(z.state!=="running"||z.inputSequence!==0||z.leaseExpiresAtMs<=Date.now())ar("pty_not_ready");await Ye("pty.ready",Re(z)),re=!0,ye(JSON.stringify({t:"open",cols:z.pty.cols,rows:z.pty.rows,receipt:Re(z)}));let he=!1,xe=0,Je=!1;while(!w.signal.aborted){let Le=z.firstCursor>U+1,Be=We(z);if(ht(z)){if(Be)break}else if(Le)he=!0;else if(he&&Be&&Date.now()>=xe){he=!1,xe=Date.now()+1000;let{cols:Me,rows:rr}=z.pty;for(let or of[{cols:Me,rows:rr>1?rr-1:2},{cols:Me,rows:rr}]){if(ht(z))break;let Rr=++G;if(z=await Xe({jobId:l.jobId,action:"resize",input:{sequence:Rr,...or}}),z.inputSequence!==Rr)ar("job_input_sequence")}continue}let Ee=ht(z)||Je?void 0:R.shift();if(Ee){B-=$o(Ee);let Me=++G;try{z=await Xe("data"in Ee?{jobId:l.jobId,action:"input",input:{sequence:Me,dataBase64:Ee.data.toString("base64")}}:{jobId:l.jobId,action:"resize",input:{sequence:Me,cols:Ee.cols,rows:Ee.rows}})}catch(rr){if(!(rr instanceof r)||rr.code!=="job_input_backpressure")throw rr;G-=1,R.unshift(Ee),B+=$o(Ee),Je=!0;continue}if(z.inputSequence!==Me)ar("job_input_sequence")}else if(await new Promise((Me)=>{let rr=setTimeout(Me,Je||!Be?10:50);if(S=()=>{clearTimeout(rr),Me()},w.signal.aborted||!Je&&R.length)S()}),Je=!1,S=()=>{},!w.signal.aborted&&Be)try{z=await Xe({jobId:l.jobId,action:"inspect",input:{after:U}})}catch(Me){if(!J||!(Me instanceof r)||Me.code!=="cancelled")throw Me}}}catch(le){ke??=le}finally{if(re=!1,R.length=0,clearTimeout(W),e.signal.removeEventListener("abort",x),x(),D&&(!z||!ht(z)))try{z=await De()}catch{z=void 0}try{if(!z||!ht(z)||z.pty?.cleanup!=="confirmed")ar("pty_cleanup_unconfirmed");let le=Re(z);if(_.readyState===Rn.OPEN)await new Promise((he)=>{let xe=setTimeout(he,500);_.send(JSON.stringify({t:"exit",code:z.exitCode,receipt:le}),()=>{clearTimeout(xe),he()})});await Ye("pty.stopped",le)}catch(le){ke??=le}_.terminate()}if(ke)throw ke;if(e.signal.aborted)ar("cancelled");if(!z)ar("pty_cleanup_unconfirmed");return{receipt:Re(z)}}import{createHash as Di,randomUUID as An}from"crypto";import{spawnSync as es}from"child_process";import{closeSync as Jo,constants as On,fstatSync as Ci,fsyncSync as Hi,lstatSync as Ht,mkdirSync as Ni,mkdtempSync as rs,openSync as Xo,readFileSync as Li,readdirSync as ts,realpathSync as qr,rmSync as Pn,unlinkSync as Bi}from"fs";import{createConnection as Wi}from"net";import{dirname as zi,join as ot,sep as In}from"path";import{tmpdir as ns}from"os";var hr=new Map,Vr=new Map;function $r(e,l){return Di("sha256").update(JSON.stringify([e,l])).digest("hex")}function gt(e){try{Ni(e,{mode:448})}catch(f){if(!(f instanceof Error&&("code"in f)&&f.code==="EEXIST"))throw f}let l=Ht(e);if(!l.isDirectory()||l.isSymbolicLink()||!A(l)||qr(e)!==e)throw new r("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function Ki(e){let l;try{l=Ht(e)}catch(f){if(f instanceof Error&&"code"in f&&f.code==="ENOENT")return!1;throw f}return!l.isDirectory()||l.isSymbolicLink()||ts(e).length>0}function Gi(e){if(process.platform==="win32")return Ui();let l=e.map((f)=>{try{return qr(f)}catch{return f}});for(let f of[()=>Ui(),()=>qr("/dev/shm"),()=>qr(ns())]){let _;try{_=f()}catch{continue}if(!l.some((w)=>_===w||_.startsWith(w.endsWith(In)?w:w+In)))return _}throw new r("invalid_hands_workspace","A Session can't work in this computer's temporary folder itself; start it in a project folder inside it.")}function gr(e){let l=$r(e.root,e.runId),f=e.previousRuntimeDirectories?.find((x)=>Ki(ot(x,"jobs",l.slice(0,16))))??e.runtimeDirectory;gt(f);let _=ot(f,"jobs");gt(_);let w=ot(_,l.slice(0,16));if(e.maxScopes!==void 0){let x=ts(_);if(!Number.isSafeInteger(e.maxScopes)||e.maxScopes<1||x.length>e.maxScopes||!x.includes(l.slice(0,16))&&x.length>=e.maxScopes)throw new r("process_journal_capacity","Managed process receipt capacity is full; preserve uncertain jobs and reconcile their existing receipts before starting more work.")}gt(w);let S=rs(ot(Gi(e.folders??[]),"reason-j-"));try{return gt(S),{journalDirectory:w,scopeId:l,launchDirectory:S,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${An()}`:ot(S,"control.sock"),disposeSocket:()=>Pn(S,{recursive:!0,force:!0})}}catch(x){throw Pn(S,{recursive:!0,force:!0}),x}}var Ji=60000,Vi=5000;function qi(e){if(process.platform==="win32")return Yi(e);let l=es("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:2000,env:{...process.env,LC_ALL:"C",LANG:"C"}}),f=l.status===0?/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(l.stdout.trim()):null,_=f?"JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(f[1]):-1;if(!f||_<0||_%3!==0)return null;let w=new Date(Number(f[6]),_/3,Number(f[2]),Number(f[3]),Number(f[4]),Number(f[5])).getTime();return Number.isFinite(w)?w:null}function Yi(e){let l=es(C("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:Oe()}),f=l.status===0?Date.parse(l.stdout.trim()):Number.NaN;return Number.isFinite(f)?f:null}function os(e,l={}){let f=ot(e.journalDirectory,"owner.lock"),_;try{_=Xo(f,On.O_RDONLY|On.O_NOFOLLOW)}catch{return null}try{let w=Ci(_);if(!w.isFile()||w.nlink!==1||!A(w)||w.size>4096)return null;let S=null;try{S=JSON.parse(Li(_,"utf8"))}catch{}let x;if(S===null){if((l.now??Date.now)()-w.mtimeMs<Ji)return null;x={reason:"never_written",executorLaunchId:null}}else{let{version:B,scopeId:G,pid:U,createdAtMs:D,executorLaunchId:re}=S;if(B!==1||G!==e.scopeId||typeof re!=="string"||typeof U!=="number"||!Number.isSafeInteger(U)||U<1||U===process.pid||typeof D!=="number"||!Number.isSafeInteger(D))return null;if(!(l.exists??((z)=>{try{return process.kill(z,0),!0}catch(fe){return!(fe instanceof Error&&("code"in fe)&&fe.code==="ESRCH")}}))(U))x={reason:"owner_exited",executorLaunchId:re};else{let z=(l.startedAtMs??qi)(U);if(z===null||z<=D+Vi)return null;x={reason:"pid_reused",executorLaunchId:re}}}let W=Ht(f);if(W.dev!==w.dev||W.ino!==w.ino)return null;Bi(f);let R=Xo(e.journalDirectory,On.O_RDONLY);try{Hi(R)}finally{Jo(R)}return x}catch{return null}finally{Jo(_)}}function ss(e){let l={...e,workspace:e.workspace&&Object.freeze({...e.workspace}),previewAuthority:e.previewAuthority&&Object.freeze({...e.previewAuthority,owner:Object.freeze({...e.previewAuthority.owner}),deniedPorts:new Set(e.previewAuthority.deniedPorts)})},f=$r(l.root,l.runId);if(hr.has(f)||l.operationId!==void 0&&Vr.has(l.operationId))throw new r("hands_jobs_busy","The Session already has a live Hands job supervisor.");let _={binding:l,key:f,terminals:new Map};if(l.previewAuthority&&l.environment)_.previews=Fo({authority:l.previewAuthority,runId:l.runId,expiresAtMs:l.expiresAtMs,executorLaunchId:l.executorLaunchId,environment:l.environment,isCurrent:()=>hr.get(_.key)===_,identity:()=>{try{return bt(l)}catch{return null}},inspect:(w,S)=>{if(hr.get(_.key)!==_)throw new r("preview_unavailable","The Hands supervisor is no longer current.");return is(l,{jobId:w,action:"inspect",input:{after:0}},S)}});if(hr.set(f,_),l.operationId!==void 0)Vr.set(l.operationId,_);return()=>{if(hr.get(_.key)===_)hr.delete(_.key);if(l.operationId!==void 0&&Vr.get(l.operationId)===_)Vr.delete(l.operationId);_.previews?.dispose();for(let w of _.terminals.values())w.abort()}}var Xi=5000,Zi=20;async function to(e){let l=(w)=>{throw new r("hands_rebind_unavailable",w)};if(!L(e.operationId)||!L(e.runId)||!L(e.fenceId)||!H(e.targetGeneration))l("Reason sent an invalid Hands rebind.");let f=Vr.get(e.operationId);if(!f||f.binding.root!==e.root)return l("No live Hands supervisor owns this operation.");for(let w=Date.now()+Xi;;){if(e.signal?.aborted)l("The Hands rebind was cancelled.");if(Vr.get(e.operationId)!==f)l("The Hands supervisor is no longer current.");let S=null;try{S=bt(f.binding)}catch{}if(S&&S.generation===e.targetGeneration&&S.fenceId===e.fenceId)break;if(S&&S.generation>e.targetGeneration||Date.now()>=w)l("The executor did not adopt this take.");await new Promise((x)=>setTimeout(x,Zi))}if(Vr.get(e.operationId)!==f||hr.get(f.key)!==f)l("The Hands supervisor is no longer current.");let _=$r(e.root,e.runId);if(f.key===_)return;if(hr.has(_))l("The taking run already has a live Hands job supervisor.");hr.delete(f.key);for(let w of f.terminals.values())w.abort();f.key=_,hr.set(_,f)}function at(e){let l="operationId"in e?Vr.get(e.operationId):hr.get($r(e.root,e.runId)),f=l&&l.binding.root===e.root?l.binding:void 0;if(!f?.environment||f.expiresAtMs<=Date.now())throw new r("environment_unavailable","No live Hands supervisor owns this environment.");return f.environment.install(e.payload)}async function ro(e){let l=hr.get($r(e.root,e.runId));if(!l?.previews||!e.owner)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return l.previews.open(e.payload,e.owner,e.signal)}async function no(e){let l=hr.get($r(e.root,e.runId));if(!l?.previews||!e.owner||e.signal.aborted)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return l.previews.close(e.payload,e.owner)}async function io(e){let l=$r(e.root,e.runId),f=hr.get(l),_=f?.binding,w=_?.runId,S=_?.previewAuthority,x=_?.environment,W=e.owner&&{...e.owner},R=e.authority&&{...e.authority},B=()=>{throw new r("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!f||!_||!S||!x||!W||!R||!_.workspace)return B();let G=Object.freeze({..._.workspace}),U=bt(_),D=x.current(),re=()=>{if(hr.get(l)!==f||W.organization_id!==S.owner.organization_id||W.user_id!==S.owner.user_id||W.device_id!==S.owner.device_id||e.deviceId!==S.owner.device_id||e.rootId!==S.rootId||I(e.workspace)!==I(G))B();let z=bt(_),fe=x.current();if(z.generation!==U.generation||z.fenceId!==U.fenceId||fe.run_id!==w||fe.device_id!==e.deviceId||fe.root_id!==e.rootId||fe.snapshot_id!==D.snapshot_id||fe.revision!==D.revision||fe.binding.target_generation!==U.generation||fe.binding.target_fence_id!==U.fenceId||R.device_id!==e.deviceId||R.binding!==fe.binding.kind||R.target_revision!==fe.binding.target_revision||R.root_grant_revision!==fe.binding.root_grant_revision||R.target_generation!==U.generation||R.target_fence_id!==U.fenceId)B()};if(re(),new URL(e.session.relayUrl).origin!==S.relayOrigin||f.terminals.has(e.session.jobId)||f.terminals.size>=4)return B();let J=new AbortController;f.terminals.set(e.session.jobId,J);try{return await Go({session:{...e.session,leaseExpiresAtMs:Math.min(e.session.leaseExpiresAtMs,U.expiresAtMs,Date.parse(D.expires_at))},signal:AbortSignal.any([e.signal,J.signal]),emit:e.emit,binding:{assertCurrent:re,environment:{revision:D.revision,snapshotId:D.snapshot_id},scope:{runId:e.runId,deviceId:e.deviceId,rootId:e.rootId,workspace:G,binding:D.binding.kind,targetRevision:D.binding.target_revision,rootGrantRevision:D.binding.root_grant_revision,generation:U.generation,fenceId:U.fenceId,executorLaunchId:U.executorLaunchId},request:(z,fe)=>_r(U,jr(JSON.stringify({...z,type:"job",version:2,generation:U.generation,id:An()})),fe)}})}finally{if(f.terminals.get(e.session.jobId)===J)f.terminals.delete(e.session.jobId)}}async function oo(e){if(ce(e.payload.jobId))throw new r("pty_binding_required","PTY jobs require the bound terminal capability.");let l=hr.get($r(e.root,e.runId))?.binding;if(!l||l.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","No live Hands supervisor owns this Session and root.");return is(l,e.payload,e.signal)}var Qi=1e4,ea=20,ra=ve/2,ta=Ve/2,na=(e)=>e.output.reduce((l,f)=>l+f.text.length,0);async function is(e,l,f){if(Object.keys(l).some((B)=>!["jobId","action","input","waitForExitMs"].includes(B)))throw new r("invalid_payload","Unexpected job control field.");let{waitForExitMs:_,...w}=l;if(_!==void 0&&(w.action!=="start"||typeof w.input!=="object"||w.input===null||!("script"in w.input)||typeof _!=="number"||!Number.isSafeInteger(_)||_<1||_>Qi))throw new r("invalid_payload","Only a script start may wait for its job, within its bound.");let S=(B)=>{let G=bt(e);return _r(G,jr(JSON.stringify({...B,type:"job",version:2,generation:G.generation,id:An()})),f)},x=await S(w);if(_===void 0)return x;let W=Date.now()+_,R=x;while(R.ok&&["starting","running"].includes(R.job.state)&&R.job.output.length<ra&&na(R.job)<ta&&!f.aborted&&Date.now()<W){if(await new Promise((B)=>setTimeout(B,Math.min(ea,W-Date.now()))),f.aborted)break;try{let B=await S({jobId:w.jobId,action:"inspect",input:{after:0}});if(!B.ok)break;R=B}catch{break}}return R}function bt(e){if(e.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","Hands authority expired.");let l=e.readIdentity?e.readIdentity():e;if(!l||!H(l.generation)||!L(l.fenceId)||l.generation<e.generation||l.generation===e.generation&&l.fenceId!==e.fenceId)throw new r("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return e.generation=l.generation,e.fenceId=l.fenceId,{...e}}function _r(e,l,f){if(f.aborted)return Promise.reject(new r("cancelled","Job control was cancelled."));return new Promise((_,w)=>{let S=Wi(e.socketPath),x="",W=!1,R,B=(U,D)=>{if(W)return;if(W=!0,clearTimeout(R),f.removeEventListener("abort",G),S.destroy(),U)w(U);else _(D)},G=()=>B(new r("cancelled","Job control waiter cancelled; inspect before retrying mutations."));f.addEventListener("abort",G,{once:!0}),S.setEncoding("utf8"),R=setTimeout(()=>B(new r("hands_job_result_unknown","Job control timed out; inspect before retrying mutations.")),Math.min(1e4,Math.max(1,e.expiresAtMs-Date.now()))),S.on("error",()=>B(new r("hands_job_result_unknown","Hands job control connection failed."))),S.once("connect",()=>S.write(JSON.stringify({version:1,scopeId:e.scopeId,fenceId:e.fenceId,executorLaunchId:e.executorLaunchId,request:l})+`
|
|
3
|
+
`)),S.on("data",(U)=>{if(x+=U,Buffer.byteLength(x)>Ge)B(new r("hands_job_result_unknown","Hands job result exceeded its bound."))}),S.once("end",()=>{if(Date.now()>=e.expiresAtMs){B(new r("hands_job_result_unknown","Hands authority expired before the result was acknowledged."));return}try{let U=Hr(x.trim());if(U.id!==l.id||U.generation!==e.generation||U.ok&&U.job.jobId!==l.jobId)throw Error("identity");B(void 0,U)}catch{B(new r("hands_job_result_unknown","Hands job response identity or shape was invalid."))}}),S.once("close",()=>{if(!W)B(new r("hands_job_result_unknown","Hands job control closed before an acknowledged result."))})})}function Zo(e){let l=qr(e.root),f=e.authority,_=Date.parse(e.leaseUntil),w=()=>{if(e.signal.throwIfAborted(),!Number.isFinite(_)||_<=Date.now())throw Error("local_device_gh_lease_expired")};if(w(),f.readOnly&&f.generation===null)return{root:l,readOnly:!0,signal:e.signal,deadlineMs:_,assertCurrent:w};let S=$r(l,e.runId),x=hr.get(S),W=x?.binding;if(!W?.environment||!W.workspace||W.localGithubConfinement!==!0)throw Error("local_device_gh_confinement_unavailable");let R=W.environment.current(),B=()=>{w();let U=W.environment.current(),D=bt(W);if(hr.get(S)!==x||U.github_auth!=="local_gh"||U.run_id!==W.runId||f.runId!==e.runId||U.device_id!==f.deviceId||U.root_id!==f.rootId||String(U.binding.root_grant_revision)!==f.rootRevision||U.binding.target_generation!==f.generation||U.binding.target_fence_id!==f.fenceId||D.generation!==f.generation||D.fenceId!==f.fenceId||U.snapshot_id!==R.snapshot_id||U.revision!==R.revision)throw Error("local_device_gh_authority_changed")};B();let G=ie(l,W.workspace);return{root:G.boundary,signal:e.signal,deadlineMs:_,privateDirectory:zi(W.environment.path),repoPath:G.path,readOnly:f.readOnly,forbiddenSecretValues:Object.values(R.variables),secretNames:(U)=>Object.entries(R.variables).filter(([,D])=>D.trim()===U.trim()).map(([D])=>`variable ${D}`),assertCurrent:B}}async function so(e,l){let f=Pe.parse(e.request),_=oe.parse(e.authority);if(_.contributorRefresh&&f.kind==="read"&&_.readOnly)return l(Zo(e));let w=Boolean(_.contributorRefresh);if(w&&(_.merge||f.kind!=="pr_mutation"||f.mutation.action!=="edit"||typeof f.mutation.body!=="string"||f.mutation.title!==void 0||f.mutation.base!==void 0||_.readOnly||_.runId!==e.runId||_.repoFullName!==f.repoFullName))throw Error("local_device_gh_contributor_refresh_authority_invalid");if(f.kind!=="pr_merge"&&!w){if(_.merge)throw Error("local_device_gh_merge_authority_invalid");return l(Zo(e))}if(!w&&(!_.merge||_.readOnly||_.runId!==e.runId||_.repoFullName!==f.repoFullName||_.merge.source==="agent"&&(_.generation===null||_.fenceId===null)))throw Error("local_device_gh_merge_authority_invalid");let S=qr(e.root),x=Ht(S),W=Date.parse(e.leaseUntil);if(!Number.isFinite(W)||W<=Date.now())throw Error("local_device_gh_lease_expired");let R=qr(ns());if(R===S||R.startsWith(S+In))throw Error("local_device_gh_private_scope_unavailable");let B=rs(ot(R,"reason-gh-merge-"));try{gt(B);let G=()=>{if(e.signal.throwIfAborted(),Date.now()>=W)throw Error("local_device_gh_lease_expired");let U=Ht(e.root);if(U.isSymbolicLink()||U.dev!==x.dev||U.ino!==x.ino||qr(e.root)!==S)throw Error("local_device_gh_authority_changed");gt(B)};return G(),await l({root:S,readOnly:!1,privateDirectory:B,forbiddenSecretValues:[],signal:e.signal,deadlineMs:W,assertCurrent:G})}finally{Pn(B,{recursive:!0,force:!0})}}var ds=43200000;function wt(e){return Number.isSafeInteger(e)&&Math.abs(e)<=8640000000000000?e:null}function as(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function cs(e,l){return Object.keys(e).length===l.length&&l.every((f)=>Object.hasOwn(e,f))}function ao(e){if(!as(e)||!cs(e,["version","outcome","clock_source","validation_now_ms","expiry_ms","remaining_ms","maximum_lifetime_ms","cli_artifact"])||e.version!==1||e.maximum_lifetime_ms!==43200000||typeof e.outcome!=="string"||!["accepted","parse","noncanonical","expired","over_cap"].includes(e.outcome)||typeof e.clock_source!=="string"||!["date_now","injected"].includes(e.clock_source))return null;for(let _ of["validation_now_ms","expiry_ms"]){let w=e[_];if(w!==null&&(typeof w!=="number"||wt(w)===null))return null}if(e.remaining_ms!==null&&(typeof e.remaining_ms!=="number"||!Number.isSafeInteger(e.remaining_ms)))return null;let l=typeof e.expiry_ms==="number"&&typeof e.validation_now_ms==="number"?e.expiry_ms-e.validation_now_ms:null;if(e.remaining_ms!==(l!==null&&Number.isSafeInteger(l)?l:null))return null;if(e.outcome==="parse"&&e.expiry_ms!==null)return null;if(e.outcome!=="parse"&&e.expiry_ms===null)return null;if(e.outcome==="expired"&&!(typeof l==="number"&&l<=0))return null;if(e.outcome==="over_cap"&&!(typeof l==="number"&&l>43200000))return null;if(e.outcome==="accepted"&&!(typeof l==="number"&&l>0&&l<=43200000))return null;let f=e.cli_artifact;if(!as(f)||!cs(f,["kind","status","sha256","observed_at_ms"])||f.observed_at_ms!==null&&(typeof f.observed_at_ms!=="number"||wt(f.observed_at_ms)===null))return null;if(f.kind==="entrypoint_file"){if(f.status!=="observed"||typeof f.sha256!=="string"||!/^[a-f0-9]{64}$/.test(f.sha256)||f.observed_at_ms===null)return null}else if(f.kind!=="unavailable"||f.sha256!==null||typeof f.status!=="string"||!["unsupported_entrypoint","read_failed","file_changed","size_limit","time_limit"].includes(f.status))return null;return e}var Tn=c({kind:s(["workspace_source","mcp_control"]),target_revision:o().int().nonnegative(),root_grant_revision:o().int().positive()}),ls=new RegExp(lt.tokenPattern),oa=c({token_url:At().max(2048),request_token:t().min(1).max(8192).regex(ls),aws_credentials_url:At().max(2048).nullable()});function us(e,l){let f=(_,w)=>{try{let S=new URL(_);return S.origin===new URL(l).origin&&S.pathname===w&&!S.username&&!S.password&&!S.search&&!S.hash}catch{return!1}};if(!ls.test(e.request_token)||!f(e.token_url,lt.tokenPath)||e.aws_credentials_url!==null&&!f(e.aws_credentials_url,lt.awsPath))return null;return{REASON_OIDC_TOKEN_URL:e.token_url,REASON_OIDC_REQUEST_TOKEN:e.request_token,...e.aws_credentials_url!==null?{AWS_CONTAINER_CREDENTIALS_FULL_URI:e.aws_credentials_url,AWS_CONTAINER_AUTHORIZATION_TOKEN:e.request_token}:{}}}function fs(e){return new TextEncoder().encode(e).byteLength}function sa(e){return fs(JSON.stringify(e)+`
|
|
4
|
+
`)}var yr=c({version:i(1),snapshot_id:k(),revision:o().int().positive(),run_id:t().min(1).max(160),device_id:k(),root_id:k(),binding:Tn.extend({target_generation:o().int().positive(),target_fence_id:k()}),expires_at:y.datetime({offset:!0}),variables:ee(t().max(128).regex(Lt),t().refine((e)=>!e.includes("\x00")&&fs(e)<=V.valueBytes)).refine((e)=>Object.keys(e).length<=V.variables),github_auth:i("local_gh").optional(),git:c({base_url:At().max(2048),token:t().min(1).max(4096).regex(/^[A-Za-z0-9._~-]+$/),expires_at:y.datetime({offset:!0})}).nullable(),cloud_access:oa.optional()}).refine((e)=>e.github_auth!=="local_gh"||e.git===null,"conflicting git authority").refine((e)=>sa(e)<=V.snapshotBytes,"snapshot too large");import{spawn as ia}from"child_process";import{basename as aa,isAbsolute as Au}from"path";var ca=0,ps=120000,_s=15000,da=65536;function Dn(e=process.execPath,l=process.argv[1]){let f=aa(e),_=(f.startsWith("bun")||f.startsWith("node"))&&typeof l==="string"&&l.length>0;return{command:e,prefix:_?[l]:[]}}function co(e={}){let{command:l,prefix:f}=Dn(e.executablePath,e.sourceEntrypoint),_=e.spawnProcess??ia,w=e.now??Date.now,S=null,x=0,W=!1,R=(G)=>{try{G.kill("SIGKILL")}catch{}},B=()=>{if(W)return;if(S&&w()-x<ps-_s)return;if(S){let U=S;S=null,R(U)}let G;try{G=_(l,[...f,"__device","__hands-worker","--handoff-fd",String(ca)],{cwd:"/",env:{PATH:process.env.PATH??"/usr/local/bin:/usr/bin:/bin"},shell:!1,stdio:["pipe","ignore","pipe"]})}catch{return}S=G,x=w(),G.on("error",()=>{if(S===G)S=null}),G.once("exit",(U,D)=>{if(S!==G)return;S=null,e.log?.("hands.worker_prespawn_exited",{exit_code:U,exit_signal:D})}),e.log?.("hands.worker_prespawned",{pid:G.pid??null})};return{arm:B,take(G){let U=S;if(!U||W)return null;let D=G.args.at(-1),re=G.options.env,J=G.options.cwd,z=[...f,"__device","__hands-worker","--config"];if(G.command!==l||G.args.length!==z.length+1||z.some((Re,Fe)=>G.args[Fe]!==Re)||typeof D!=="string"||!re||typeof J!=="string"||G.options.shell||JSON.stringify(G.options.stdio)!==JSON.stringify(["ignore","ignore","pipe"]))return null;S=null;let fe=U.stdin,ke={configPath:D,cwd:J,env:Object.fromEntries(Object.entries(re).filter((Re)=>typeof Re[1]==="string"))},be=JSON.stringify(ke);if(U.exitCode!==null||U.signalCode!==null||!fe||fe.destroyed||w()-x>=ps-_s||Buffer.byteLength(be,"utf8")>da)return R(U),null;return fe.on("error",()=>{return}),fe.end(be),U.once("exit",()=>{B()}),e.log?.("hands.worker_prespawn_taken",{pid:U.pid??null}),U},adopt(G){G.once("exit",()=>{B()})},close(){if(W=!0,S)R(S);S=null}}}import{accessSync as ma,constants as ha,statSync as ga}from"fs";import{homedir as ba,tmpdir as wa,userInfo as ya}from"os";import{delimiter as va,win32 as ka}from"path";var la=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 ua=["BUN_CONFIG_","BUN_INSPECT","DYLD_","NODE_DEBUG"],fa=new Set(["BUN_INSTALL"]);var pa=/^--(?:max-old-space-size|max-semi-space-size|stack-size)=\d{1,9}$/;function _a(e){return(e??"").split(/\s+/).filter(Boolean).every((l)=>pa.test(l.replaceAll("_","-")))}function ms(e){return Object.keys(e).filter((l)=>la.has(l)&&!(l==="NODE_OPTIONS"&&_a(e[l]))||ua.some((f)=>l.startsWith(f))||l.startsWith("BUN_")&&!fa.has(l)).sort()}var Sa=new Set(["HOME","PATH","PWD","OLDPWD","SHLVL","_","TMPDIR","TMP","TEMP","SHELL","BASH_ENV","ENV","ZDOTDIR","PROMPT_COMMAND","IFS","CDPATH","GLOBIGNORE","SHELLOPTS","BASHOPTS","NODE_PATH"]),Ea=/^(?:ARA_|REASON_|PI_|GIT_|GH_|GITHUB_|LD_|DYLD_|BUN_|BASH_FUNC_|SSH_)/,Ra=/TOKEN|SECRET|PASSW|PASSPHRASE|CREDENTIAL|API_?KEY|ACCESS_?KEY|PRIVATE_?KEY|AUTH/i,Oa=/^[A-Za-z_][A-Za-z0-9_]*$/;function wr(e=process.env){let l=(w)=>{if(!(process.platform==="win32"?ka.isAbsolute(w):w.startsWith("/"))||/[\0\r\n]/.test(w)||w.length>32768)throw Error("invalid_host_execution_environment");return w};if(e.PATH!==void 0&&(/[\0\r\n]/.test(e.PATH)||e.PATH.length>32768))throw Error("invalid_host_execution_environment");let f=new Set(ms(e)),_=Object.fromEntries(Object.entries(e).filter((w)=>{let[S,x]=w;return typeof x==="string"&&x.length<=32768&&!x.includes("\x00")&&S.length<=128&&Oa.test(S)&&!f.has(S)&&!Sa.has(S)&&!Ea.test(S)&&!Ra.test(S)}).sort(([w],[S])=>w.localeCompare(S)).slice(0,512));return{home:l(e.HOME||(process.platform==="win32"?e.USERPROFILE:void 0)||ba()),path:((w)=>process.platform==="win32"?kn(w):w)(Ar(e.PATH??"").join(va)||Cr),temporaryDirectory:l(e.TMPDIR||e.TMP||e.TEMP||wa()),variables:_}}function br(e=process.env,l=()=>ya().shell){if(process.platform==="win32")return se();let f=(w)=>{if(!w||!/^\/[A-Za-z0-9._/-]*\/(?:bash|zsh)$/.test(w))return!1;try{return ma(w,ha.X_OK),ga(w).isFile()}catch{return!1}};if(f(e.SHELL))return e.SHELL;let _;try{_=l()}catch{_=void 0}return f(_)?_:"/bin/zsh"}import{readdir as xa}from"fs/promises";var Pa=15000;function wn(e){let l=e instanceof Error&&"code"in e?e.code:null;return l==="EPERM"||l==="EACCES"}function bn(e){return new r("folder_access_denied",`macOS blocked Reason from opening ${e}. Allow Reason in System Settings \u203A Privacy & Security \u203A Files and Folders `+"(or Full Disk Access), then restart the Reason app or worker on this Mac and try again: until it restarts it keeps the earlier refusal.")}async function hs(e,{timeoutMs:l=Pa,open:f=(_)=>xa(_)}={}){let _,w=new Promise((S)=>{_=setTimeout(()=>S("pending"),l)});try{if(await Promise.race([f(e).then(()=>"open"),w])==="pending")throw new r("folder_access_pending",`macOS is asking whether Reason may open ${e}. Answer the prompt on this Mac, then try again.`)}catch(S){if(wn(S))throw bn(e);if(S instanceof r)throw S}finally{clearTimeout(_)}}import{chmodSync as ic,closeSync as ac,constants as Kn,fstatSync as cc,lstatSync as Ns,openSync as dc,readSync as lc,realpathSync as Gn,unlinkSync as uc}from"fs";import{lookup as fc}from"dns/promises";import{createRequire as pc}from"module";import{request as _c}from"http";import{request as mc}from"https";import it from"net";import{platform as Ws}from"os";import{basename as hc,extname as gc,isAbsolute as Ls,relative as Jn,resolve as kt,sep as Vn}from"path";var gs=String.raw`
|
|
5
5
|
async (roots) => {
|
|
6
6
|
"use strict";
|
|
7
7
|
const version = 2;
|
|
@@ -296,14 +296,14 @@ async (input) => {
|
|
|
296
296
|
if (!bridge || typeof bridge.evaluate !== "function") throw new Error("Reason Hands browser bridge is not installed");
|
|
297
297
|
return await bridge.evaluate(typeof input === "string" ? input : input && input.code);
|
|
298
298
|
}
|
|
299
|
-
`.trim();import{Buffer as yt}from"buffer";import{randomUUID as Ia}from"crypto";class ks extends Error{code;constructor(e){super(e==="hands_repl_private_profile_attribute_denied"?"Private browser attribute read denied.":e);this.code=e;this.name="HandsReplBrowserDispatcherError"}}var Ss=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),ws=/^hands_[A-Za-z0-9_-]{8,128}$/,Aa=2048,Es=32,Rs=1e4,Ta=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function Da(e){let l=e.split("+"),f=(l.pop()??"").replace(/^Key/,"").toLowerCase();if(f==="f12")return!0;if(l.some((_)=>["Control","ControlOrMeta","Meta"].includes(_))&&["l","n","t","j","i","p","s","w","u","o","r","tab","pageup","pagedown"].includes(f))return!0;if(l.some((_)=>["Control","ControlOrMeta","Meta"].includes(_))&&l.includes("Shift")&&f==="c")return!0;return l.includes("Alt")&&["d","arrowleft","arrowright","home"].includes(f)}var Ca=(e)=>{let l=e.closest("a[href],area[href]");return{password:e.tagName==="INPUT"&&e.type==="password",executableLink:Boolean(l&&!/^(https?:|about:blank)/i.test(l.href))}},Os={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 Ie(e){throw new ks(e)}function Dr(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let l=Object.getPrototypeOf(e);return l===Object.prototype||l===null}function vt(e,l=0,f={nodes:0}){if(l>Es||++f.nodes>Rs)Ie("hands_repl_json_too_complex");if(e===null||typeof e==="boolean"||typeof e==="string")return;if(typeof e==="number"){if(!Number.isFinite(e))Ie("hands_repl_invalid_json");return}if(Array.isArray(e)){for(let _ of e)vt(_,l+1,f);return}if(!Dr(e))Ie("hands_repl_invalid_json");for(let[_,w]of Object.entries(e)){if(Ss.has(_))Ie("hands_repl_invalid_json");vt(w,l+1,f)}}function Hn(e){return typeof e==="string"&&Object.hasOwn(Os,e)}function Ha(e){if(!e.endsWith("[]"))return null;let l=e.slice(0,-2);return Hn(l)?l:null}function ys(e){return Dr(e)&&Object.keys(e).length===2&&e.$handsRepl==="bytes"&&typeof e.base64==="string"}function Na(e){return Dr(e)&&Object.keys(e).length===1&&e.$handsRepl==="undefined"}function vs(e){return Dr(e)&&Object.keys(e).length===2&&e.$handsRepl==="routeFulfill"&&"options"in e}function Yr(e){return!!e&&typeof e==="object"}function Yt(){return Object.freeze({$handsRepl:"undefined"})}function La(e){if(!yt.isBuffer(e)&&!(e instanceof Uint8Array))Ie("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:yt.from(e).toString("base64")})}function xs(e){if(!Yr(e.browser)||!Yr(e.context)||!Yr(e.page))Ie("hands_repl_invalid_roots");if(typeof e.a11y!=="function"||typeof e.view!=="function")Ie("hands_repl_invalid_callbacks");let l=e.maxHandles??Aa;if(!Number.isInteger(l)||l<3||l>1e5)Ie("hands_repl_invalid_handle_limit");let f=new Map,_=new WeakMap,w=e.createOpaqueId??Ia,S=(D,re)=>{if(!Yr(re))Ie("hands_repl_expected_target");let J=_.get(re)?.get(D);if(J)return J;if(f.size>=l)Ie("hands_repl_handle_limit");let z="";for(let be=0;be<16;be+=1){let Re=`hands_${w()}`;if(ws.test(Re)&&!f.has(Re)){z=Re;break}}if(!z)Ie("hands_repl_invalid_opaque_id");let fe=Object.freeze({$handsRepl:"handle",id:z,kind:D});f.set(z,{kind:D,target:re});let ve=_.get(re);if(!ve)ve=new Map,_.set(re,ve);return ve.set(D,fe),fe},x=Object.freeze({browser:S("browser",e.browser),context:S("context",e.context),page:S("page",e.page)}),j=(D)=>{if(!Dr(D)||Object.keys(D).length!==3||D.$handsRepl!=="handle"||typeof D.id!=="string"||!ws.test(D.id)||!Hn(D.kind))Ie("hands_repl_invalid_handle");let re=f.get(D.id);if(!re||re.kind!==D.kind)Ie("hands_repl_unknown_handle");return re},R=(D,re=0,J=new Set)=>{if(re>Es)Ie("hands_repl_json_too_complex");if(D===void 0)return Yt();if(D===null||typeof D==="boolean"||typeof D==="string")return D;if(typeof D==="number"){if(!Number.isFinite(D))Ie("hands_repl_non_json_result");return D}if(Array.isArray(D)){if(J.has(D))Ie("hands_repl_cyclic_result");J.add(D);try{return D.map((z)=>R(z,re+1,J))}finally{J.delete(D)}}if(!Dr(D))Ie("hands_repl_non_json_result");if(J.has(D))Ie("hands_repl_cyclic_result");J.add(D);try{let z=Object.create(null);for(let fe of Object.keys(D)){let ve=Object.getOwnPropertyDescriptor(D,fe);if(!ve||!("value"in ve))continue;z[fe]=R(ve.value,re+1,J)}return z}finally{J.delete(D)}},B=(D,re)=>{if(re==="void")return Yt();if(re==="json")return R(D);if(re==="bytes")return La(D);let J=Ha(re);if(J){if(!Array.isArray(D))Ie("hands_repl_expected_target_list");if(J==="context"&&D.some((z)=>z!==e.context))Ie("hands_repl_foreign_context");return D.map((z)=>S(J,z))}if(D===null||D===void 0)return Yt();if(!Hn(re))Ie("hands_repl_invalid_return_kind");if(re==="context"&&D!==e.context)Ie("hands_repl_foreign_context");return S(re,D)},G=(D)=>{if(Dr(D)&&D.$handsRepl==="handle")return j(D).target;if(ys(D))return yt.from(D.base64,"base64");if(Na(D))return;if(vs(D))Ie("hands_repl_route_fulfill_only");if(Array.isArray(D))return D.map(G);if(!Dr(D))return D;let re=Object.create(null);for(let[J,z]of Object.entries(D))re[J]=G(z);return re};return Object.freeze({roots:x,dispatch:async(D)=>{if(!Dr(D)||typeof D.type!=="string")Ie("hands_repl_invalid_request");if(D.type==="a11y"){let ye=D.target===void 0?f.get(x.page.id):j(D.target);if(!ye||ye.kind!=="page"&&ye.kind!=="locator")Ie("hands_repl_invalid_a11y_target");return R(await e.a11y(ye.target))}if(D.type==="view"){if(vt(D.source),D.options!==void 0)vt(D.options);let ye=ys(D.source)?yt.from(D.source.base64,"base64"):D.source;if(e.privateProfile&&!yt.isBuffer(ye))Ie("hands_repl_profile_requires_image_bytes");return R(await e.view(ye,D.options))}if(D.type!=="call")Ie("hands_repl_invalid_request");if(typeof D.method!=="string"||D.method.length===0||D.method.length>128)Ie("hands_repl_invalid_method");if(Ss.has(D.method))Ie("hands_repl_forbidden_method");let re=j(D.target),J=D.args??[];if(!Array.isArray(J))Ie("hands_repl_invalid_arguments");if(vt(J),re.kind==="page"&&D.method==="captureScreenshot"){if(J.length!==0)Ie("hands_repl_invalid_arguments");if(!e.screenshotExport)Ie("hands_repl_screenshot_export_unavailable");return R(await e.screenshotExport(re.target))}if(re.kind==="context"&&["startRecording","stopRecording"].includes(D.method)){if(!e.recording||re.target!==e.context)Ie("hands_repl_recording_unavailable");if(J.length>(D.method==="startRecording"?1:0))Ie("hands_repl_invalid_arguments");return R(D.method==="startRecording"?await e.recording.start(J[0]):await e.recording.stop())}if(e.privateProfile){let ye=D.method;if(["evaluate","evaluateAll","waitForFunction","addInitScript","addScriptTag","addStyleTag","setContent","setInputFiles","route","content","cookies","storageState","addCookies","clearCookies","setExtraHTTPHeaders","setHTTPCredentials","grantPermissions","clearPermissions","innerHTML","textContent","allTextContents"].includes(ye)||re.kind==="browser"&&ye==="close"||re.kind==="context"&&ye==="close")Ie("hands_repl_private_profile_method_denied");if(re.kind==="browser"&&ye==="contexts")return B([e.context],"context[]");if((ye==="screenshot"||ye==="pdf")&&Dr(J[0])&&(("path"in J[0])||("style"in J[0])))Ie("hands_repl_private_profile_path_denied");if(ye==="goto"){if(typeof J[0]!=="string")Ie("hands_repl_private_profile_url_denied");try{let We=new URL(J[0]);if(!["http:","https:"].includes(We.protocol)&&J[0]!=="about:blank")Ie("hands_repl_private_profile_url_denied")}catch{Ie("hands_repl_private_profile_url_denied")}}if(ye==="getAttribute"&&(typeof J[0]!=="string"||!Ta.has(J[0].toLowerCase())))Ie("hands_repl_private_profile_attribute_denied");if(re.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(ye)){let We=[re.target];if(ye==="allInnerTexts"){let Ve=Reflect.get(re.target,"all");if(typeof Ve!=="function")Ie("hands_repl_private_profile_probe_unavailable");let De=await Reflect.apply(Ve,re.target,[]);if(!Array.isArray(De)||De.length>Rs||!De.every(Yr))Ie("hands_repl_private_profile_probe_unavailable");We=De}for(let Ve of We){let De=Reflect.get(Ve,"isVisible");if(typeof De!=="function"||!await Reflect.apply(De,Ve,[]))Ie("hands_repl_private_profile_hidden_value_denied")}}if(ye==="press"&&typeof J[0]==="string"&&Da(J[0]))Ie("hands_repl_private_profile_browser_shortcut_denied");if(re.kind==="locator"&&["inputValue","click","dblclick","tap","press"].includes(ye)){let We=Reflect.get(re.target,"evaluate");if(typeof We!=="function")Ie("hands_repl_private_profile_probe_unavailable");let Ve=await Reflect.apply(We,re.target,[Ca]);if(!Dr(Ve)||typeof Ve.password!=="boolean"||typeof Ve.executableLink!=="boolean")Ie("hands_repl_private_profile_probe_unavailable");if(ye==="inputValue"&&Ve.password)Ie("hands_repl_private_profile_password_denied");if(ye!=="inputValue"&&Ve.executableLink)Ie("hands_repl_private_profile_url_denied");if(ye==="inputValue"){let De=Reflect.get(re.target,"isVisible");if(typeof De!=="function"||!await Reflect.apply(De,re.target,[]))Ie("hands_repl_private_profile_hidden_value_denied")}}}let z=Os[re.kind][D.method];if(!z)Ie("hands_repl_method_not_allowed");if(z.requiresStringSource&&typeof J[0]!=="string")Ie("hands_repl_string_source_required");if(re.kind==="browser"&&D.method==="contexts")return[x.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(D.method)&&J.some((ye)=>Dr(ye)&&("path"in ye)))Ie("hands_repl_file_path_not_allowed");if(D.method==="goto"&&typeof J[0]==="string"){let ye;try{ye=new URL(J[0]).protocol}catch{Ie("hands_repl_invalid_url")}if(!["http:","https:","data:","about:","blob:"].includes(ye))Ie("hands_repl_file_path_not_allowed")}if(z.special==="contextViewportSize"){let ye=Reflect.get(re.target,"pages");if(typeof ye!=="function")Ie("hands_repl_method_unavailable");let We=await Reflect.apply(ye,re.target,[]),Ve=Array.isArray(We)?We[0]:void 0,De=Yr(Ve)?Reflect.get(Ve,"viewportSize"):void 0;if(typeof De!=="function")return Yt();return B(await Reflect.apply(De,Ve,[]),z.returns)}if(z.special==="property"){let ye=Reflect.get(re.target,D.method);return B(typeof ye==="function"?Reflect.apply(ye,re.target,[]):ye,z.returns)}let fe=Reflect.get(re.target,D.method);if(typeof fe!=="function")Ie("hands_repl_method_unavailable");if(z.special==="route"){let ye=J[1];if(!vs(ye))Ie("hands_repl_invalid_route_handler");vt(ye.options);let We=G(ye.options),Ve=async(he)=>{if(!Yr(he))Ie("hands_repl_invalid_route");let xe=Reflect.get(he,"fulfill");if(typeof xe!=="function")Ie("hands_repl_invalid_route");await Reflect.apply(xe,he,[We])},De=[G(J[0]??null),Ve],le=await Reflect.apply(fe,re.target,De);return B(le,z.returns)}let ve=J.map(G);if(D.method==="setInputFiles"){let ye=re.kind==="locator"?0:1,We=async(De)=>{if(typeof De!=="string"){if(!Dr(De)||typeof De.name!=="string"||typeof De.mimeType!=="string"||!yt.isBuffer(De.buffer))Ie("hands_repl_invalid_file_input");return De}if(!e.readWorkspaceFile)Ie("hands_repl_workspace_required");return e.readWorkspaceFile(De)},Ve=ve[ye];ve[ye]=Array.isArray(Ve)?await Promise.all(Ve.map(We)):await We(Ve)}if(D.method==="goto")await e.beforeNavigation?.();let be=e.actionRecorder?.(),Re=await Reflect.apply(fe,re.target,ve),qe={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"}[D.method];if(qe){let ye=Reflect.get(re.target,"page"),We=re.kind==="page"?re.target:typeof ye==="function"?Reflect.apply(ye,re.target,[]):void 0;be?.(qe,Yr(We)?We:void 0)}return B(Re,z.returns)}})}import{isIP as Ts}from"net";import{Resolver as Ba}from"dns/promises";import{isIP as Zt}from"net";var ja=[["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 Nn(e){if(Zt(e)!==4)return null;let l=e.split(".");if(l.length!==4)return null;let f=0;for(let _ of l){let w=Number(_);if(!Number.isInteger(w)||w<0||w>255)return null;f=f*256+w}return f>>>0}function Ma(e,l,f){let _=Nn(l);if(_===null)return!1;let w=f===0?0:4294967295<<32-f>>>0;return(e&w)>>>0===(_&w)>>>0}function Ps(e){let l=Nn(e);if(l===null)return!0;return ja.some(([f,_])=>Ma(l,f,_))}function Wa(e){if(Zt(e)!==6)return null;let l=e.toLowerCase(),f=l.indexOf("%");if(f>=0)l=l.slice(0,f);let _=[],w=l.lastIndexOf(":"),S=w>=0?l.slice(w+1):"";if(S.includes(".")){let D=Nn(S);if(D===null)return null;_=[D>>>16&65535,D&65535],l=l.slice(0,w+1)+"0:0"}let x=l.split("::");if(x.length>2)return null;let j=(D)=>{if(D==="")return[];let re=[];for(let J of D.split(":")){if(J===""||J.length>4||!/^[0-9a-f]+$/.test(J))return null;re.push(Number.parseInt(J,16))}return re},R=j(x[0]??"");if(R===null)return null;if(x.length===1){let D=R;if(D.length!==8)return null;return _.length>0?D.slice(0,6).concat(_):D}let B=j(x[1]??"");if(B===null)return null;let G=8-R.length-B.length;if(G<0)return null;let W=R.concat(Array(G).fill(0),B);if(W.length!==8)return null;return _.length>0?W.slice(0,6).concat(_):W}function Fa(e,l){return`${e>>8&255}.${e&255}.${l>>8&255}.${l&255}`}function Ua(e){let l=Wa(e);if(l===null)return!0;let[f,_,w]=l;if((f&57344)!==8192)return!0;if(f===8193&&(_&65024)===0)return!0;if(f===8193&&_===3512)return!0;if(f===16383&&(_&61440)===0)return!0;if(f===8194)return Ps(Fa(_,w));return!1}function vr(e){return e.replace(/^\[|\]$/g,"")}function Xt(e){let l=vr(e.trim()),f=Zt(l);if(f===4)return Ps(l);if(f===6)return Ua(l);return!0}function Is(e){if(e instanceof Error&&e.name==="TimeoutError")return"dns_timeout";switch(typeof e==="object"&&e!==null&&"code"in e?e.code:void 0){case"ENOTFOUND":return"dns_not_found";case"ENODATA":return"dns_empty";case"EAI_AGAIN":case"ESERVFAIL":case"ECONNREFUSED":return"dns_temporary";case"ETIMEOUT":case"ETIMEDOUT":return"dns_timeout";default:return"dns_failed"}}var As=5000;function za(e){return async(l,f)=>{if(f?.aborted)throw Error("aborted");let _=new Ba({timeout:As,tries:1});if(e)_.setServers(e);let w=()=>_.cancel();f?.addEventListener("abort",w,{once:!0});try{let[S,x]=await Promise.allSettled([_.resolve4(l),_.resolve6(l)]),j=[...S.status==="fulfilled"?S.value:[],...x.status==="fulfilled"?x.value:[]];if(j.length>0)return j;let R=[S,x].flatMap((G)=>G.status==="rejected"?[G.reason]:[]);throw R.find((G)=>["dns_temporary","dns_timeout"].includes(Is(G)))??R[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{f?.removeEventListener("abort",w)}}}var $a=za();async function Ka(e,l,f,_){if(_?.aborted)throw Error("aborted");let w=new AbortController,S,x,j=l(e,w.signal);j.catch(()=>{});try{return await Promise.race([j,new Promise((R,B)=>{if(S=setTimeout(()=>B(new DOMException("DNS lookup timed out","TimeoutError")),f),_)x=()=>B(Error("aborted")),_.addEventListener("abort",x,{once:!0})})])}finally{if(S!==void 0)clearTimeout(S);if(_&&x)_.removeEventListener("abort",x);w.abort()}}async function lo(e,l=$a,f){let _=vr(e);if(Zt(_))return Xt(_)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[_]};let w;try{w=await Ka(_,l,As,f)}catch(S){return{ok:!1,reason:f?.aborted?f.reason instanceof Error&&f.reason.name==="TimeoutError"?"dns_timeout":"aborted":Is(S)}}if(w.length===0)return{ok:!1,reason:"dns_empty"};if(w.some(Xt))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:w}}var Ga=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function Ln(e){return e.length<=253&&Ga.test(e.toLowerCase())}function Ja(e,l){let f=e.trim().toLowerCase();if(!Ln(f))return!1;if(f.startsWith("*.")){let _=f.slice(2);return l===_||l.endsWith(`.${_}`)}return f===l}function Va(e){let l=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(e);if(!l)return null;let f=l.slice(1).map(Number);return f.some((_)=>_>255)?null:f}function Bn(e,l=[]){let f=(_)=>{if(_=_.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,""),!_.includes(":"))return _;try{_=new URL(`http://[${_}]/`).hostname.slice(1,-1)}catch{return _}let w=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(_);if(!w)return _;let S=parseInt(w[1],16),x=parseInt(w[2],16);return`${S>>8}.${S&255}.${x>>8}.${x&255}`};return l.some((_)=>f(_)===f(e))}function st(e){e=e.toLowerCase().replace(/^\[|\]$/g,"");let l=Va(e);if(l){let[S,x,j]=l;if(S===127)return"loopback";return S===0||S===10||S>=224||S===100&&x>=64&&x<=127||S===169&&x===254||S===172&&x>=16&&x<=31||S===192&&(x===168||x===0&&(j===0||j===2)||x===88&&j===99)||S===198&&(x===18||x===19||x===51&&j===100)||S===203&&x===0&&j===113?"private":"public"}if(!e.includes(":"))return"hostname";try{e=new URL(`http://[${e}]/`).hostname.slice(1,-1)}catch{return"private"}if(e==="::1")return"loopback";let f=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(e);if(f){let S=parseInt(f[1],16),x=parseInt(f[2],16);return st(`${S>>8}.${S&255}.${x>>8}.${x&255}`)==="public"?"public":"private"}let[_,w=0]=e.split(":").map((S)=>parseInt(S||"0",16));return _<8192||_>16383||_===8194||_===8193&&(w<512||w===3512)||_===16383&&w<4096?"private":"public"}function He(e,l){let f;try{f=new URL(e)}catch{return{allowed:!1,url:e,host:null,reason:"invalid_url"}}if(["about:","data:","blob:"].includes(f.protocol))return{allowed:!0,url:e,host:null,reason:"local_document"};if(!["http:","https:","ws:","wss:"].includes(f.protocol))return{allowed:!1,url:e,host:f.hostname||null,reason:"unsupported_protocol"};let _=f.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(l.mode==="off")return{allowed:!0,url:e,host:_,reason:"policy_off"};let w=(j)=>({allowed:!1,url:e,host:_,reason:j});if(f.username||f.password)return w("invalid_url");if(l.mode==="public_web"){let j=st(_)!=="public"&&st(_)!=="hostname"||_==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(_)||!_.includes(".")&&!Ts(_)||Boolean(Ts(_)&&Xt(_));return{allowed:!j,url:e,host:_,reason:j?"private_network":"public_web"}}let S=Number(f.port||(["https:","wss:"].includes(f.protocol)?443:80));if(l.deniedPorts?.includes(S)||Bn(_,l.deniedHosts))return w("destination_not_allowed");let x=st(_);if(x==="private"||["local","internal","arpa"].some((j)=>_===j||_.endsWith(`.${j}`)))return w("private_network");if(x==="loopback"||_==="localhost"||_.endsWith(".localhost"))return l.allowedLoopbackPorts?.includes(S)?{allowed:!0,url:e,host:_,reason:"loopback"}:w("destination_not_allowed");if(l.allowedDomains.some((j)=>Ja(j,_)))return{allowed:!0,url:e,host:_,reason:"allowed_domain"};return{allowed:!1,url:e,host:_,reason:"destination_not_allowed"}}import Ds from"child_process";import{accessSync as qa,constants as Ya,readFileSync as Xa,statSync as Za}from"fs";import{createRequire as Qa}from"module";import{dirname as bf,isAbsolute as jn,join as ec,resolve as wf,win32 as rc}from"path";var Mn=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:tr.dependencies["playwright-core"],browser:"chromium"}),Cs=["/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"],Wn=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function tc(e=process.env){let l=[e.ProgramFiles??"C:\\Program Files",e["ProgramFiles(x86)"]??"C:\\Program Files (x86)"],f=e.LOCALAPPDATA?[e.LOCALAPPDATA]:[],_=(w,...S)=>w.map((x)=>rc.join(x,...S));return[..._([...l,...f],"Google","Chrome","Application","chrome.exe"),..._(l,"Microsoft","Edge","Application","msedge.exe"),..._([...l,...f],"BraveSoftware","Brave-Browser","Application","brave.exe")]}function Bt(e){try{return qa(e,Ya.X_OK),jn(e)&&Za(e).isFile()}catch{return!1}}function Fn(e,l=process.platform){let f=l==="darwin"?Cs:l==="linux"?Wn:l==="win32"?tc():null;return f?(e??f).find(Bt)??null:null}function nc(){if(!process.versions.bun)return;let e=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,e))return;let l=[];Ds.spawn=new Proxy(Ds.spawn,{apply(f,_,w){let S=Reflect.apply(f,_,w),x=w[1],j=w[2]?.stdio;if(Array.isArray(x)&&x.includes("--remote-debugging-pipe")&&Array.isArray(j)&&j[3]==="pipe"&&j[4]==="pipe")l.push(S);return S}}),Object.defineProperty(globalThis,e,{value:l})}async function en(e){if(nc(),e!==void 0){if(!jn(e))throw Error("hands_browser_driver_path_must_be_absolute");let _=ec(e,"package.json"),w=JSON.parse(Xa(_,"utf8"));if(w.name!==Mn.driver)throw Error("hands_browser_wrong_driver");let S=Qa(_)(e),x=S.default?.chromium??S.chromium;if(!x)throw Error("hands_browser_missing_chromium");return{version:w.version,chromium:x}}let[l,f]=await Promise.all([import("./index-j6wffzfd.js"),import("./package-way7qesn.js").then((m)=>Fi(m.default,1))]);return{version:f.default.version,chromium:l.chromium}}var oc=(e,l=Mn.driverVersion)=>({status:"unavailable",reason:e,expectedDriverVersion:l}),sc=(e)=>e.loadDriver?.()??en(e.driverModuleDirectory);async function jt(e={}){return Hs(e,Mn.driverVersion)}async function Un(e,l={}){if(e.driverVersion!=="1.61.1"||!jn(e.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return Hs({...l,driverModuleDirectory:e.driverModuleDirectory,allowSystemBrowser:!0},e.driverVersion)}async function Hs(e,l){let f=(R)=>oc(R,l),_=e.platform??process.platform;if(_!=="linux"&&_!=="darwin"&&_!=="win32")return f("unsupported_platform");let w;try{w=await sc(e)}catch{return f("driver_missing")}if(w.version!==l)return f("driver_version_mismatch");let S=(R,B)=>({status:"resolved",executablePath:R,source:B,driverVersion:w.version});if(e.executablePath!==void 0)return Bt(e.executablePath)?S(e.executablePath,"configured"):f("executable_missing");let x=w.chromium.executablePath();if(Bt(x))return S(x,"managed");let j=e.allowSystemBrowser===!0?Fn(e.systemCandidates,_):null;return j?S(j,"system"):f("executable_missing")}var bc=["/usr/local/bin/chromium",...Wn];function vn(e,l=Ws()){return Fn(e??(l==="linux"?bc:void 0),l)}async function wc(){try{return(await en()).chromium}catch{return pc(import.meta.url)("playwright-core").chromium}}var yc=1048576,vc=105000,kc=20000,Bs=5000,Sc=2000,Ec=1000,Rc=30000,js=81920,Oc={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function xc(e,l){let f=new URL(e.url()),_={...await e.allHeaders(),host:f.host};for(let w of Object.keys(_))if(/^(?:proxy-|connection$|upgrade$|transfer-encoding$|content-length$)/i.test(w))delete _[w];return new Promise((w,S)=>{let j=(f.protocol==="https:"?mc:_c)(f,{method:e.method(),headers:_,agent:!1,lookup:(B,G,W)=>{let D=it.isIP(l);if(G.all)W(null,[{address:l,family:D}]);else W(null,l,D)}},(B)=>{let G=[],W=0;B.on("data",(D)=>{if(W+=D.length,W>33554432)j.destroy(Error("hands_browser_response_too_large"));else G.push(D)}),B.on("error",S),B.on("end",()=>{let D={};for(let[re,J]of Object.entries(B.headers))if(J!==void 0&&!["transfer-encoding","connection","content-length"].includes(re))D[re]=Array.isArray(J)?J.join(`
|
|
300
|
-
`):J;w({status:B.statusCode??502,headers:D,body:Buffer.concat(G)})})}),R=setTimeout(()=>
|
|
301
|
-
`)}function tn(e){try{uc(e)}catch{}}async function Us(e){if(e.managedBrowser&&e.driverModuleDirectory!==void 0)throw Error("hands_browser_ambiguous_driver_configuration");let l=e.launch||e.targetContext?null:e.managedBrowser?await
|
|
302
|
-
Viewing ${
|
|
299
|
+
`.trim();import{Buffer as yt}from"buffer";import{randomUUID as Ia}from"crypto";class ks extends Error{code;constructor(e){super(e==="hands_repl_private_profile_attribute_denied"?"Private browser attribute read denied.":e);this.code=e;this.name="HandsReplBrowserDispatcherError"}}var Ss=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),ws=/^hands_[A-Za-z0-9_-]{8,128}$/,Aa=2048,Es=32,Rs=1e4,Ta=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function Da(e){let l=e.split("+"),f=(l.pop()??"").replace(/^Key/,"").toLowerCase();if(f==="f12")return!0;if(l.some((_)=>["Control","ControlOrMeta","Meta"].includes(_))&&["l","n","t","j","i","p","s","w","u","o","r","tab","pageup","pagedown"].includes(f))return!0;if(l.some((_)=>["Control","ControlOrMeta","Meta"].includes(_))&&l.includes("Shift")&&f==="c")return!0;return l.includes("Alt")&&["d","arrowleft","arrowright","home"].includes(f)}var Ca=(e)=>{let l=e.closest("a[href],area[href]");return{password:e.tagName==="INPUT"&&e.type==="password",executableLink:Boolean(l&&!/^(https?:|about:blank)/i.test(l.href))}},Os={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 Ie(e){throw new ks(e)}function Dr(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let l=Object.getPrototypeOf(e);return l===Object.prototype||l===null}function vt(e,l=0,f={nodes:0}){if(l>Es||++f.nodes>Rs)Ie("hands_repl_json_too_complex");if(e===null||typeof e==="boolean"||typeof e==="string")return;if(typeof e==="number"){if(!Number.isFinite(e))Ie("hands_repl_invalid_json");return}if(Array.isArray(e)){for(let _ of e)vt(_,l+1,f);return}if(!Dr(e))Ie("hands_repl_invalid_json");for(let[_,w]of Object.entries(e)){if(Ss.has(_))Ie("hands_repl_invalid_json");vt(w,l+1,f)}}function Hn(e){return typeof e==="string"&&Object.hasOwn(Os,e)}function Ha(e){if(!e.endsWith("[]"))return null;let l=e.slice(0,-2);return Hn(l)?l:null}function ys(e){return Dr(e)&&Object.keys(e).length===2&&e.$handsRepl==="bytes"&&typeof e.base64==="string"}function Na(e){return Dr(e)&&Object.keys(e).length===1&&e.$handsRepl==="undefined"}function vs(e){return Dr(e)&&Object.keys(e).length===2&&e.$handsRepl==="routeFulfill"&&"options"in e}function Yr(e){return!!e&&typeof e==="object"}function Xt(){return Object.freeze({$handsRepl:"undefined"})}function La(e){if(!yt.isBuffer(e)&&!(e instanceof Uint8Array))Ie("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:yt.from(e).toString("base64")})}function xs(e){if(!Yr(e.browser)||!Yr(e.context)||!Yr(e.page))Ie("hands_repl_invalid_roots");if(typeof e.a11y!=="function"||typeof e.view!=="function")Ie("hands_repl_invalid_callbacks");let l=e.maxHandles??Aa;if(!Number.isInteger(l)||l<3||l>1e5)Ie("hands_repl_invalid_handle_limit");let f=new Map,_=new WeakMap,w=e.createOpaqueId??Ia,S=(D,re)=>{if(!Yr(re))Ie("hands_repl_expected_target");let J=_.get(re)?.get(D);if(J)return J;if(f.size>=l)Ie("hands_repl_handle_limit");let z="";for(let be=0;be<16;be+=1){let Re=`hands_${w()}`;if(ws.test(Re)&&!f.has(Re)){z=Re;break}}if(!z)Ie("hands_repl_invalid_opaque_id");let fe=Object.freeze({$handsRepl:"handle",id:z,kind:D});f.set(z,{kind:D,target:re});let ke=_.get(re);if(!ke)ke=new Map,_.set(re,ke);return ke.set(D,fe),fe},x=Object.freeze({browser:S("browser",e.browser),context:S("context",e.context),page:S("page",e.page)}),W=(D)=>{if(!Dr(D)||Object.keys(D).length!==3||D.$handsRepl!=="handle"||typeof D.id!=="string"||!ws.test(D.id)||!Hn(D.kind))Ie("hands_repl_invalid_handle");let re=f.get(D.id);if(!re||re.kind!==D.kind)Ie("hands_repl_unknown_handle");return re},R=(D,re=0,J=new Set)=>{if(re>Es)Ie("hands_repl_json_too_complex");if(D===void 0)return Xt();if(D===null||typeof D==="boolean"||typeof D==="string")return D;if(typeof D==="number"){if(!Number.isFinite(D))Ie("hands_repl_non_json_result");return D}if(Array.isArray(D)){if(J.has(D))Ie("hands_repl_cyclic_result");J.add(D);try{return D.map((z)=>R(z,re+1,J))}finally{J.delete(D)}}if(!Dr(D))Ie("hands_repl_non_json_result");if(J.has(D))Ie("hands_repl_cyclic_result");J.add(D);try{let z=Object.create(null);for(let fe of Object.keys(D)){let ke=Object.getOwnPropertyDescriptor(D,fe);if(!ke||!("value"in ke))continue;z[fe]=R(ke.value,re+1,J)}return z}finally{J.delete(D)}},B=(D,re)=>{if(re==="void")return Xt();if(re==="json")return R(D);if(re==="bytes")return La(D);let J=Ha(re);if(J){if(!Array.isArray(D))Ie("hands_repl_expected_target_list");if(J==="context"&&D.some((z)=>z!==e.context))Ie("hands_repl_foreign_context");return D.map((z)=>S(J,z))}if(D===null||D===void 0)return Xt();if(!Hn(re))Ie("hands_repl_invalid_return_kind");if(re==="context"&&D!==e.context)Ie("hands_repl_foreign_context");return S(re,D)},G=(D)=>{if(Dr(D)&&D.$handsRepl==="handle")return W(D).target;if(ys(D))return yt.from(D.base64,"base64");if(Na(D))return;if(vs(D))Ie("hands_repl_route_fulfill_only");if(Array.isArray(D))return D.map(G);if(!Dr(D))return D;let re=Object.create(null);for(let[J,z]of Object.entries(D))re[J]=G(z);return re};return Object.freeze({roots:x,dispatch:async(D)=>{if(!Dr(D)||typeof D.type!=="string")Ie("hands_repl_invalid_request");if(D.type==="a11y"){let ye=D.target===void 0?f.get(x.page.id):W(D.target);if(!ye||ye.kind!=="page"&&ye.kind!=="locator")Ie("hands_repl_invalid_a11y_target");return R(await e.a11y(ye.target))}if(D.type==="view"){if(vt(D.source),D.options!==void 0)vt(D.options);let ye=ys(D.source)?yt.from(D.source.base64,"base64"):D.source;if(e.privateProfile&&!yt.isBuffer(ye))Ie("hands_repl_profile_requires_image_bytes");return R(await e.view(ye,D.options))}if(D.type!=="call")Ie("hands_repl_invalid_request");if(typeof D.method!=="string"||D.method.length===0||D.method.length>128)Ie("hands_repl_invalid_method");if(Ss.has(D.method))Ie("hands_repl_forbidden_method");let re=W(D.target),J=D.args??[];if(!Array.isArray(J))Ie("hands_repl_invalid_arguments");if(vt(J),re.kind==="page"&&D.method==="captureScreenshot"){if(J.length!==0)Ie("hands_repl_invalid_arguments");if(!e.screenshotExport)Ie("hands_repl_screenshot_export_unavailable");return R(await e.screenshotExport(re.target))}if(re.kind==="context"&&["startRecording","stopRecording"].includes(D.method)){if(!e.recording||re.target!==e.context)Ie("hands_repl_recording_unavailable");if(J.length>(D.method==="startRecording"?1:0))Ie("hands_repl_invalid_arguments");return R(D.method==="startRecording"?await e.recording.start(J[0]):await e.recording.stop())}if(e.privateProfile){let ye=D.method;if(["evaluate","evaluateAll","waitForFunction","addInitScript","addScriptTag","addStyleTag","setContent","setInputFiles","route","content","cookies","storageState","addCookies","clearCookies","setExtraHTTPHeaders","setHTTPCredentials","grantPermissions","clearPermissions","innerHTML","textContent","allTextContents"].includes(ye)||re.kind==="browser"&&ye==="close"||re.kind==="context"&&ye==="close")Ie("hands_repl_private_profile_method_denied");if(re.kind==="browser"&&ye==="contexts")return B([e.context],"context[]");if((ye==="screenshot"||ye==="pdf")&&Dr(J[0])&&(("path"in J[0])||("style"in J[0])))Ie("hands_repl_private_profile_path_denied");if(ye==="goto"){if(typeof J[0]!=="string")Ie("hands_repl_private_profile_url_denied");try{let We=new URL(J[0]);if(!["http:","https:"].includes(We.protocol)&&J[0]!=="about:blank")Ie("hands_repl_private_profile_url_denied")}catch{Ie("hands_repl_private_profile_url_denied")}}if(ye==="getAttribute"&&(typeof J[0]!=="string"||!Ta.has(J[0].toLowerCase())))Ie("hands_repl_private_profile_attribute_denied");if(re.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(ye)){let We=[re.target];if(ye==="allInnerTexts"){let Ye=Reflect.get(re.target,"all");if(typeof Ye!=="function")Ie("hands_repl_private_profile_probe_unavailable");let De=await Reflect.apply(Ye,re.target,[]);if(!Array.isArray(De)||De.length>Rs||!De.every(Yr))Ie("hands_repl_private_profile_probe_unavailable");We=De}for(let Ye of We){let De=Reflect.get(Ye,"isVisible");if(typeof De!=="function"||!await Reflect.apply(De,Ye,[]))Ie("hands_repl_private_profile_hidden_value_denied")}}if(ye==="press"&&typeof J[0]==="string"&&Da(J[0]))Ie("hands_repl_private_profile_browser_shortcut_denied");if(re.kind==="locator"&&["inputValue","click","dblclick","tap","press"].includes(ye)){let We=Reflect.get(re.target,"evaluate");if(typeof We!=="function")Ie("hands_repl_private_profile_probe_unavailable");let Ye=await Reflect.apply(We,re.target,[Ca]);if(!Dr(Ye)||typeof Ye.password!=="boolean"||typeof Ye.executableLink!=="boolean")Ie("hands_repl_private_profile_probe_unavailable");if(ye==="inputValue"&&Ye.password)Ie("hands_repl_private_profile_password_denied");if(ye!=="inputValue"&&Ye.executableLink)Ie("hands_repl_private_profile_url_denied");if(ye==="inputValue"){let De=Reflect.get(re.target,"isVisible");if(typeof De!=="function"||!await Reflect.apply(De,re.target,[]))Ie("hands_repl_private_profile_hidden_value_denied")}}}let z=Os[re.kind][D.method];if(!z)Ie("hands_repl_method_not_allowed");if(z.requiresStringSource&&typeof J[0]!=="string")Ie("hands_repl_string_source_required");if(re.kind==="browser"&&D.method==="contexts")return[x.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(D.method)&&J.some((ye)=>Dr(ye)&&("path"in ye)))Ie("hands_repl_file_path_not_allowed");if(D.method==="goto"&&typeof J[0]==="string"){let ye;try{ye=new URL(J[0]).protocol}catch{Ie("hands_repl_invalid_url")}if(!["http:","https:","data:","about:","blob:"].includes(ye))Ie("hands_repl_file_path_not_allowed")}if(z.special==="contextViewportSize"){let ye=Reflect.get(re.target,"pages");if(typeof ye!=="function")Ie("hands_repl_method_unavailable");let We=await Reflect.apply(ye,re.target,[]),Ye=Array.isArray(We)?We[0]:void 0,De=Yr(Ye)?Reflect.get(Ye,"viewportSize"):void 0;if(typeof De!=="function")return Xt();return B(await Reflect.apply(De,Ye,[]),z.returns)}if(z.special==="property"){let ye=Reflect.get(re.target,D.method);return B(typeof ye==="function"?Reflect.apply(ye,re.target,[]):ye,z.returns)}let fe=Reflect.get(re.target,D.method);if(typeof fe!=="function")Ie("hands_repl_method_unavailable");if(z.special==="route"){let ye=J[1];if(!vs(ye))Ie("hands_repl_invalid_route_handler");vt(ye.options);let We=G(ye.options),Ye=async(he)=>{if(!Yr(he))Ie("hands_repl_invalid_route");let xe=Reflect.get(he,"fulfill");if(typeof xe!=="function")Ie("hands_repl_invalid_route");await Reflect.apply(xe,he,[We])},De=[G(J[0]??null),Ye],le=await Reflect.apply(fe,re.target,De);return B(le,z.returns)}let ke=J.map(G);if(D.method==="setInputFiles"){let ye=re.kind==="locator"?0:1,We=async(De)=>{if(typeof De!=="string"){if(!Dr(De)||typeof De.name!=="string"||typeof De.mimeType!=="string"||!yt.isBuffer(De.buffer))Ie("hands_repl_invalid_file_input");return De}if(!e.readWorkspaceFile)Ie("hands_repl_workspace_required");return e.readWorkspaceFile(De)},Ye=ke[ye];ke[ye]=Array.isArray(Ye)?await Promise.all(Ye.map(We)):await We(Ye)}if(D.method==="goto")await e.beforeNavigation?.();let be=e.actionRecorder?.(),Re=await Reflect.apply(fe,re.target,ke),Xe={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"}[D.method];if(Xe){let ye=Reflect.get(re.target,"page"),We=re.kind==="page"?re.target:typeof ye==="function"?Reflect.apply(ye,re.target,[]):void 0;be?.(Xe,Yr(We)?We:void 0)}return B(Re,z.returns)}})}import{isIP as Ts}from"net";import{Resolver as Ba}from"dns/promises";import{isIP as Qt}from"net";var ja=[["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 Nn(e){if(Qt(e)!==4)return null;let l=e.split(".");if(l.length!==4)return null;let f=0;for(let _ of l){let w=Number(_);if(!Number.isInteger(w)||w<0||w>255)return null;f=f*256+w}return f>>>0}function Ma(e,l,f){let _=Nn(l);if(_===null)return!1;let w=f===0?0:4294967295<<32-f>>>0;return(e&w)>>>0===(_&w)>>>0}function Ps(e){let l=Nn(e);if(l===null)return!0;return ja.some(([f,_])=>Ma(l,f,_))}function Wa(e){if(Qt(e)!==6)return null;let l=e.toLowerCase(),f=l.indexOf("%");if(f>=0)l=l.slice(0,f);let _=[],w=l.lastIndexOf(":"),S=w>=0?l.slice(w+1):"";if(S.includes(".")){let D=Nn(S);if(D===null)return null;_=[D>>>16&65535,D&65535],l=l.slice(0,w+1)+"0:0"}let x=l.split("::");if(x.length>2)return null;let W=(D)=>{if(D==="")return[];let re=[];for(let J of D.split(":")){if(J===""||J.length>4||!/^[0-9a-f]+$/.test(J))return null;re.push(Number.parseInt(J,16))}return re},R=W(x[0]??"");if(R===null)return null;if(x.length===1){let D=R;if(D.length!==8)return null;return _.length>0?D.slice(0,6).concat(_):D}let B=W(x[1]??"");if(B===null)return null;let G=8-R.length-B.length;if(G<0)return null;let U=R.concat(Array(G).fill(0),B);if(U.length!==8)return null;return _.length>0?U.slice(0,6).concat(_):U}function Fa(e,l){return`${e>>8&255}.${e&255}.${l>>8&255}.${l&255}`}function Ua(e){let l=Wa(e);if(l===null)return!0;let[f,_,w]=l;if((f&57344)!==8192)return!0;if(f===8193&&(_&65024)===0)return!0;if(f===8193&&_===3512)return!0;if(f===16383&&(_&61440)===0)return!0;if(f===8194)return Ps(Fa(_,w));return!1}function vr(e){return e.replace(/^\[|\]$/g,"")}function Zt(e){let l=vr(e.trim()),f=Qt(l);if(f===4)return Ps(l);if(f===6)return Ua(l);return!0}function Is(e){if(e instanceof Error&&e.name==="TimeoutError")return"dns_timeout";switch(typeof e==="object"&&e!==null&&"code"in e?e.code:void 0){case"ENOTFOUND":return"dns_not_found";case"ENODATA":return"dns_empty";case"EAI_AGAIN":case"ESERVFAIL":case"ECONNREFUSED":return"dns_temporary";case"ETIMEOUT":case"ETIMEDOUT":return"dns_timeout";default:return"dns_failed"}}var As=5000;function za(e){return async(l,f)=>{if(f?.aborted)throw Error("aborted");let _=new Ba({timeout:As,tries:1});if(e)_.setServers(e);let w=()=>_.cancel();f?.addEventListener("abort",w,{once:!0});try{let[S,x]=await Promise.allSettled([_.resolve4(l),_.resolve6(l)]),W=[...S.status==="fulfilled"?S.value:[],...x.status==="fulfilled"?x.value:[]];if(W.length>0)return W;let R=[S,x].flatMap((G)=>G.status==="rejected"?[G.reason]:[]);throw R.find((G)=>["dns_temporary","dns_timeout"].includes(Is(G)))??R[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{f?.removeEventListener("abort",w)}}}var $a=za();async function Ka(e,l,f,_){if(_?.aborted)throw Error("aborted");let w=new AbortController,S,x,W=l(e,w.signal);W.catch(()=>{});try{return await Promise.race([W,new Promise((R,B)=>{if(S=setTimeout(()=>B(new DOMException("DNS lookup timed out","TimeoutError")),f),_)x=()=>B(Error("aborted")),_.addEventListener("abort",x,{once:!0})})])}finally{if(S!==void 0)clearTimeout(S);if(_&&x)_.removeEventListener("abort",x);w.abort()}}async function lo(e,l=$a,f){let _=vr(e);if(Qt(_))return Zt(_)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[_]};let w;try{w=await Ka(_,l,As,f)}catch(S){return{ok:!1,reason:f?.aborted?f.reason instanceof Error&&f.reason.name==="TimeoutError"?"dns_timeout":"aborted":Is(S)}}if(w.length===0)return{ok:!1,reason:"dns_empty"};if(w.some(Zt))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:w}}var Ga=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function Bn(e){return e.length<=253&&Ga.test(e.toLowerCase())}function Ja(e,l){let f=e.trim().toLowerCase();if(!Bn(f))return!1;if(f.startsWith("*.")){let _=f.slice(2);return l===_||l.endsWith(`.${_}`)}return f===l}function Va(e){let l=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(e);if(!l)return null;let f=l.slice(1).map(Number);return f.some((_)=>_>255)?null:f}function jn(e,l=[]){let f=(_)=>{if(_=_.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,""),!_.includes(":"))return _;try{_=new URL(`http://[${_}]/`).hostname.slice(1,-1)}catch{return _}let w=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(_);if(!w)return _;let S=parseInt(w[1],16),x=parseInt(w[2],16);return`${S>>8}.${S&255}.${x>>8}.${x&255}`};return l.some((_)=>f(_)===f(e))}function st(e){e=e.toLowerCase().replace(/^\[|\]$/g,"");let l=Va(e);if(l){let[S,x,W]=l;if(S===127)return"loopback";return S===0||S===10||S>=224||S===100&&x>=64&&x<=127||S===169&&x===254||S===172&&x>=16&&x<=31||S===192&&(x===168||x===0&&(W===0||W===2)||x===88&&W===99)||S===198&&(x===18||x===19||x===51&&W===100)||S===203&&x===0&&W===113?"private":"public"}if(!e.includes(":"))return"hostname";try{e=new URL(`http://[${e}]/`).hostname.slice(1,-1)}catch{return"private"}if(e==="::1")return"loopback";let f=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(e);if(f){let S=parseInt(f[1],16),x=parseInt(f[2],16);return st(`${S>>8}.${S&255}.${x>>8}.${x&255}`)==="public"?"public":"private"}let[_,w=0]=e.split(":").map((S)=>parseInt(S||"0",16));return _<8192||_>16383||_===8194||_===8193&&(w<512||w===3512)||_===16383&&w<4096?"private":"public"}function He(e,l){let f;try{f=new URL(e)}catch{return{allowed:!1,url:e,host:null,reason:"invalid_url"}}if(["about:","data:","blob:"].includes(f.protocol))return{allowed:!0,url:e,host:null,reason:"local_document"};if(!["http:","https:","ws:","wss:"].includes(f.protocol))return{allowed:!1,url:e,host:f.hostname||null,reason:"unsupported_protocol"};let _=f.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(l.mode==="off")return{allowed:!0,url:e,host:_,reason:"policy_off"};let w=(W)=>({allowed:!1,url:e,host:_,reason:W});if(f.username||f.password)return w("invalid_url");if(l.mode==="public_web"){let W=st(_)!=="public"&&st(_)!=="hostname"||_==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(_)||!_.includes(".")&&!Ts(_)||Boolean(Ts(_)&&Zt(_));return{allowed:!W,url:e,host:_,reason:W?"private_network":"public_web"}}let S=Number(f.port||(["https:","wss:"].includes(f.protocol)?443:80));if(l.deniedPorts?.includes(S)||jn(_,l.deniedHosts))return w("destination_not_allowed");let x=st(_);if(x==="private"||["local","internal","arpa"].some((W)=>_===W||_.endsWith(`.${W}`)))return w("private_network");if(x==="loopback"||_==="localhost"||_.endsWith(".localhost"))return l.allowedLoopbackPorts?.includes(S)?{allowed:!0,url:e,host:_,reason:"loopback"}:w("destination_not_allowed");if(l.allowedDomains.some((W)=>Ja(W,_)))return{allowed:!0,url:e,host:_,reason:"allowed_domain"};return{allowed:!1,url:e,host:_,reason:"destination_not_allowed"}}import Ds from"child_process";import{accessSync as qa,constants as Ya,readFileSync as Xa,statSync as Za}from"fs";import{createRequire as Qa}from"module";import{dirname as bf,isAbsolute as Wn,join as ec,resolve as wf,win32 as rc}from"path";var Fn=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:tr.dependencies["playwright-core"],browser:"chromium"}),Cs=["/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"],Un=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function tc(e=process.env){let l=[e.ProgramFiles??"C:\\Program Files",e["ProgramFiles(x86)"]??"C:\\Program Files (x86)"],f=e.LOCALAPPDATA?[e.LOCALAPPDATA]:[],_=(w,...S)=>w.map((x)=>rc.join(x,...S));return[..._([...l,...f],"Google","Chrome","Application","chrome.exe"),..._(l,"Microsoft","Edge","Application","msedge.exe"),..._([...l,...f],"BraveSoftware","Brave-Browser","Application","brave.exe")]}function Bt(e){try{return qa(e,Ya.X_OK),Wn(e)&&Za(e).isFile()}catch{return!1}}function zn(e,l=process.platform){let f=l==="darwin"?Cs:l==="linux"?Un:l==="win32"?tc():null;return f?(e??f).find(Bt)??null:null}function nc(){if(!process.versions.bun)return;let e=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,e))return;let l=[];Ds.spawn=new Proxy(Ds.spawn,{apply(f,_,w){let S=Reflect.apply(f,_,w),x=w[1],W=w[2]?.stdio;if(Array.isArray(x)&&x.includes("--remote-debugging-pipe")&&Array.isArray(W)&&W[3]==="pipe"&&W[4]==="pipe")l.push(S);return S}}),Object.defineProperty(globalThis,e,{value:l})}async function en(e){if(nc(),e!==void 0){if(!Wn(e))throw Error("hands_browser_driver_path_must_be_absolute");let _=ec(e,"package.json"),w=JSON.parse(Xa(_,"utf8"));if(w.name!==Fn.driver)throw Error("hands_browser_wrong_driver");let S=Qa(_)(e),x=S.default?.chromium??S.chromium;if(!x)throw Error("hands_browser_missing_chromium");return{version:w.version,chromium:x}}let[l,f]=await Promise.all([import("./index-j6wffzfd.js"),import("./package-way7qesn.js").then((m)=>Fi(m.default,1))]);return{version:f.default.version,chromium:l.chromium}}var oc=(e,l=Fn.driverVersion)=>({status:"unavailable",reason:e,expectedDriverVersion:l}),sc=(e)=>e.loadDriver?.()??en(e.driverModuleDirectory);async function jt(e={}){return Hs(e,Fn.driverVersion)}async function $n(e,l={}){if(e.driverVersion!=="1.61.1"||!Wn(e.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return Hs({...l,driverModuleDirectory:e.driverModuleDirectory,allowSystemBrowser:!0},e.driverVersion)}async function Hs(e,l){let f=(R)=>oc(R,l),_=e.platform??process.platform;if(_!=="linux"&&_!=="darwin"&&_!=="win32")return f("unsupported_platform");let w;try{w=await sc(e)}catch{return f("driver_missing")}if(w.version!==l)return f("driver_version_mismatch");let S=(R,B)=>({status:"resolved",executablePath:R,source:B,driverVersion:w.version});if(e.executablePath!==void 0)return Bt(e.executablePath)?S(e.executablePath,"configured"):f("executable_missing");let x=w.chromium.executablePath();if(Bt(x))return S(x,"managed");let W=e.allowSystemBrowser===!0?zn(e.systemCandidates,_):null;return W?S(W,"system"):f("executable_missing")}var bc=["/usr/local/bin/chromium",...Un];function vn(e,l=Ws()){return zn(e??(l==="linux"?bc:void 0),l)}async function wc(){try{return(await en()).chromium}catch{return pc(import.meta.url)("playwright-core").chromium}}var yc=1048576,vc=105000,kc=20000,Bs=5000,Sc=2000,Ec=1000,Rc=30000,js=81920,Oc={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function xc(e,l){let f=new URL(e.url()),_={...await e.allHeaders(),host:f.host};for(let w of Object.keys(_))if(/^(?:proxy-|connection$|upgrade$|transfer-encoding$|content-length$)/i.test(w))delete _[w];return new Promise((w,S)=>{let W=(f.protocol==="https:"?mc:_c)(f,{method:e.method(),headers:_,agent:!1,lookup:(B,G,U)=>{let D=it.isIP(l);if(G.all)U(null,[{address:l,family:D}]);else U(null,l,D)}},(B)=>{let G=[],U=0;B.on("data",(D)=>{if(U+=D.length,U>33554432)W.destroy(Error("hands_browser_response_too_large"));else G.push(D)}),B.on("error",S),B.on("end",()=>{let D={};for(let[re,J]of Object.entries(B.headers))if(J!==void 0&&!["transfer-encoding","connection","content-length"].includes(re))D[re]=Array.isArray(J)?J.join(`
|
|
300
|
+
`):J;w({status:B.statusCode??502,headers:D,body:Buffer.concat(G)})})}),R=setTimeout(()=>W.destroy(Error("hands_browser_fetch_timeout")),Rc);W.once("close",()=>clearTimeout(R)),W.on("error",S),W.end(e.postDataBuffer()??void 0)})}async function Pc(e,l,f=()=>{},_={lookup:(w)=>fc(w,{all:!0}),fetch:xc}){let w=new WeakSet,S=new WeakMap,x=(W)=>{let R=S.get(W);if(R)return R;let B=(async()=>{if(!e.newCDPSession)return;let G=await e.newCDPSession(W),U=new Map;G.on("Network.loadingFinished",({requestId:D})=>U.delete(D)),G.on("Network.loadingFailed",({requestId:D})=>U.delete(D)),G.on("Fetch.requestPaused",async(D)=>{let re=D.networkId??D.requestId,J=D.redirectedRequestId?(U.get(re)??0)+1:0;U.set(re,J);let z=He(D.request.url,l),fe=l.mode==="enforce"&&Boolean(D.redirectedRequestId)&&z.host!==null&&!it.isIP(z.host),ke=!z.allowed?z:fe?{...z,allowed:!1,reason:"destination_not_allowed"}:J>20?{...z,allowed:!1,reason:"redirect_not_supported"}:null;try{if(ke)f(ke),await G.send("Fetch.failRequest",{requestId:D.requestId,errorReason:"BlockedByClient"});else await G.send("Fetch.continueRequest",{requestId:D.requestId})}catch{await G.send("Fetch.failRequest",{requestId:D.requestId,errorReason:"Failed"}).catch(()=>{})}}),await G.send("Network.enable"),await G.send("Fetch.enable",{patterns:[{urlPattern:"*",requestStage:"Request"}]}),w.add(W)})();return S.set(W,B),B};return await e.route("**/*",async(W)=>{let R=W.request().url(),B=He(R,l);if(B.allowed&&l.mode==="public_web"){await W.continue();return}let G=W.request();if(B.allowed&&B.host&&it.isIP(B.host)&&G.isNavigationRequest?.()){let U=G.frame();if(w.has(U.page())&&U===U.page().mainFrame()){await W.continue();return}}if(B.allowed&&(l.mode==="off"||B.reason==="local_document")){await W.continue();return}if(B.allowed&&B.host)try{let U=B.host,D=st(U),re,J=await(async()=>{if(D!=="hostname")return[{address:U,family:it.isIP(U)}];if(B.reason==="loopback")return[{address:"127.0.0.1",family:4}];try{return await Promise.race([_.lookup(U),new Promise((z,fe)=>{re=setTimeout(()=>fe(Error("hands_browser_dns_timeout")),5000)})])}finally{if(re)clearTimeout(re)}})();if(!J.length||J.some(({address:z})=>{let fe=st(z);return!it.isIP(z)||l.mode==="enforce"&&jn(z,l.deniedHosts)||(B.reason==="loopback"?fe!=="loopback":fe!=="public")}))B={...B,allowed:!1,reason:"private_network"};else{let z=await _.fetch(W.request(),J[0].address);if(z.status>=300&&z.status<400){let fe=z.headers.location??R;try{fe=new URL(fe,R).href}catch{}let ke=He(fe,l);B=ke.allowed?{...ke,allowed:!1,reason:"redirect_not_supported"}:ke}else{await W.fulfill(z);return}}}catch{await W.abort("failed");return}f(B),await W.abort("blockedbyclient")}),await e.routeWebSocket("**/*",async(W)=>{let R=He(W.url(),l);if(l.mode==="enforce"&&R.allowed&&(!R.host||!it.isIP(R.host)))R={...R,allowed:!1,reason:"destination_not_allowed"};if(R.allowed){W.connectToServer();return}f(R),await W.close({code:1008,reason:"Reason egress policy denied"})}),l.mode==="off"?void 0:{preparePage:x}}async function Fs(e,l=Ws(),f){if(f){let w=await $n(f,{platform:l,systemCandidates:e});return w.status==="resolved"?w.executablePath:null}if(e!==void 0){let w=vn(e,l);if(w)return w}let _=await jt({platform:l,systemCandidates:e,allowSystemBrowser:!0});return _.status==="resolved"?_.executablePath:null}function Ms(e,l){if(!e)throw Error("hands_repl_workspace_required");let f=Gn(e),_=kt(e),w=Jn(_,kt(_,l)),x=w!==".."&&!w.startsWith(`..${Vn}`)&&!Ls(w)?kt(f,w):kt(f,l);if(E(kt(_,l))||E(x))throw Error("hands_repl_protected_path");let W=(J)=>{let z=Jn(f,J);return z!==""&&z!==".."&&!z.startsWith(`..${Vn}`)&&!Ls(z)},R=Gn(x);if(E(R))throw Error("hands_repl_protected_path");if(!W(x)||!W(R))throw Error("hands_repl_file_outside_workspace");let B=Jn(f,x).split(Vn),G=[f,...B.map((J,z)=>kt(f,...B.slice(0,z+1)))],U=G.map((J)=>Ns(J));if(U.some((J)=>J.isSymbolicLink()))throw Error("hands_repl_file_symlink");let D=U[U.length-1];if(!D.isFile()||D.nlink!==1||D.size>16777216)throw Error("hands_repl_file_not_regular_or_too_large");let re=dc(x,Kn.O_RDONLY|Kn.O_NOFOLLOW|Kn.O_NONBLOCK);try{let J=cc(re);if(J.dev!==D.dev||J.ino!==D.ino||!J.isFile())throw Error("hands_repl_file_changed");for(let be=0;be<G.length;be++){let Re=Ns(G[be]);if(Re.dev!==U[be].dev||Re.ino!==U[be].ino||Re.isSymbolicLink())throw Error("hands_repl_file_changed")}if(!W(Gn(x)))throw Error("hands_repl_file_outside_workspace");let z=Buffer.alloc(16777217),fe=0;while(fe<z.length){let be=lc(re,z,fe,z.length-fe,null);if(!be)break;fe+=be}if(fe===z.length)throw Error("hands_repl_file_too_large");let ke=z.subarray(0,fe);return{name:hc(x),mimeType:Oc[gc(x).toLowerCase()]??"application/octet-stream",buffer:ke}}finally{ac(re)}}function St(e,l){e.end(`${JSON.stringify(l)}
|
|
301
|
+
`)}function tn(e){try{uc(e)}catch{}}async function Us(e){if(e.managedBrowser&&e.driverModuleDirectory!==void 0)throw Error("hands_browser_ambiguous_driver_configuration");let l=e.launch||e.targetContext?null:e.managedBrowser?await $n(e.managedBrowser,{executablePath:e.browserExecutablePath}):await jt({executablePath:e.browserExecutablePath,driverModuleDirectory:e.driverModuleDirectory});if(l?.status==="unavailable")throw Error(`hands_browser_${l.reason}`);let f=l?.status==="resolved"?l.executablePath:e.browserExecutablePath;if(!f||!Bt(f))throw Error("hands_browser_unavailable");let _=e.launch??(async(le)=>(e.targetContext?await wc():(await en(e.managedBrowser?.driverModuleDirectory??e.driverModuleDirectory)).chromium).launch(le)),w=[],S={},x=null,W=null,R=null,B=null,G=!1,U=null,D=new Map,re=new WeakMap,J=null,z=()=>{if(G)throw Error("hands_repl_stopped");if(B)throw B},fe=(le)=>{let he=re.get(le);if(he)return he;let xe=Promise.resolve().then(()=>le.close()).then(()=>{D.delete(le)});return re.set(le,xe),xe},ke=async()=>{let le=[...D.entries()].reverse(),he=J??=performance.now()+Ec,xe=Promise.allSettled(le.filter(([,Ee])=>Ee==="context").map(([Ee])=>fe(Ee))),Je;try{await Promise.race([xe,new Promise((Ee)=>{Je=setTimeout(Ee,Math.max(0,he-performance.now()))})])}finally{if(Je)clearTimeout(Je)}let Le=await Promise.allSettled(le.map(([Ee])=>fe(Ee))),Be=[];for(let[Ee,Me]of Le.entries()){if(Me.status!=="rejected")continue;let rr=Me.reason instanceof Error&&["Error","TimeoutError","ProtocolError"].includes(Me.reason.name)?Me.reason.name:"unknown";Be.push(Error(`hands_repl_close_failed: ${le[Ee][1]}: ${rr}`))}if(Be.length)throw AggregateError(Be,"hands_repl_stop_unconfirmed")},be=(le,he)=>{if(D.set(le,he),G||B)fe(le).catch(()=>{return}),z();return le},Re=async()=>{let le=await _({executablePath:f,headless:!0,chromiumSandbox:e.managedBrowser===void 0,args:["--disable-background-networking","--disable-quic","--disable-dev-shm-usage","--disable-gpu","--disable-software-rasterizer","--dns-prefetch-disable","--force-webrtc-ip-handling-policy=disable_non_proxied_udp","--no-pings"]}),he=null;try{be(le,"browser"),he=e.targetContext??be(await le.newContext({viewport:{width:1440,height:900},screen:{width:1440,height:900},serviceWorkers:"block",acceptDownloads:!1}),"context");let xe=await Pc(he,e.networkPolicy??{mode:"off"},e.onEgressDenied);if(z(),xe){let qe=he.newPage.bind(he);he.newPage=async()=>{let sr=await qe();return await xe.preparePage(sr),sr}}let Le=he.pages()[0]??await he.newPage();await xe?.preparePage(Le),z();let Be=async(qe=Le)=>{let sr=qe;if(typeof sr.ariaSnapshot==="function")return sr.ariaSnapshot({timeout:1e4});return Le.locator("body").innerText({timeout:1e4})},Ee=async(qe,sr={})=>{let nr=sr&&typeof sr==="object"&&!Array.isArray(sr)?sr:{},lr,Ur="image/png";if(Buffer.isBuffer(qe)||qe instanceof Uint8Array)lr=Buffer.from(qe);else if(typeof qe==="string"&&(qe.startsWith("data:")||/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(qe)))lr=Buffer.from(qe.replace(/^data:[^,]*,/,""),"base64");else if(typeof qe==="string"){let Qr=Ms(e.workspaceRoot,qe);lr=Qr.buffer,Ur=Qr.mimeType}else throw Error("view() needs a Buffer, a base64 string, or a path to an image file");if(lr.length===0)throw Error("view(): the image is empty");let ln=String(nr.label??"").replace(/[\r\n>]+/g," ").trim().slice(0,120),Gr=Number(nr.maxWidth)||1024,ft=Number(nr.quality)||72,Ft=e.targetContext?await le.newPage():await he.newPage();try{let Qr=`data:${Ur};base64,${lr.toString("base64")}`;for(let ur=0;ur<5;ur+=1){let Wr=await Ft.evaluate(async(Br)=>{let Fr=new Image;Fr.src=Br.url,await Fr.decode();let rt=Math.min(1,Br.maxWidth/Fr.naturalWidth),Tr=document.createElement("canvas");Tr.width=Math.max(1,Math.round(Fr.naturalWidth*rt)),Tr.height=Math.max(1,Math.round(Fr.naturalHeight*rt));let Or=Tr.getContext("2d");if(!Or)throw Error("view(): canvas unavailable");return Or.fillStyle="#ffffff",Or.fillRect(0,0,Tr.width,Tr.height),Or.drawImage(Fr,0,0,Tr.width,Tr.height),{data:Tr.toDataURL("image/jpeg",Br.q/100).split(",")[1]??"",width:Tr.width,height:Tr.height,sourceWidth:Fr.naturalWidth,sourceHeight:Fr.naturalHeight}},{url:Qr,maxWidth:Gr,q:ft}),pt=Buffer.from(Wr.data,"base64");if(pt.length<=js){let Br=ln||"image";return`<<<ARA_VIEW_IMAGE ${Wr.data} image/jpeg ${Br}>>>
|
|
302
|
+
Viewing ${Br} (${Wr.sourceWidth}x${Wr.sourceHeight} source, sent at ${Wr.width}x${Wr.height}, ${Math.round(pt.length/1024)}KB).`}if(Gr>640)Gr=Math.round(Gr*0.75);else ft=Math.max(30,ft-15)}throw Error(`view(): could not reduce the image under ${Math.round(js/1024)}KB`)}finally{await Ft.close().catch(()=>{return})}},Me=xs({browser:e.targetContext?.browser()??le,context:he,page:Le,a11y:Be,view:Ee,readWorkspaceFile:(qe)=>Ms(e.workspaceRoot,qe),privateProfile:e.privateProfile,beforeNavigation:e.beforeNavigation,recording:e.recording,screenshotExport:e.screenshotExport,actionRecorder:()=>{let qe=w,sr=S;return(nr,lr)=>{if(qe.length<go)qe.push(nr);if(lr)sr.page=lr}}}),rr=async(qe)=>{z();let sr=be(await le.newContext({serviceWorkers:"block",acceptDownloads:!1}),"context");try{await sr.route("**/*",(lr)=>lr.abort()),z(),await sr.routeWebSocket("**/*",(lr)=>lr.close({code:1008,reason:"Reason evaluator network denied"})),z(),await sr.exposeBinding("__araHandsRpc",async(lr,Ur)=>e.onBrowserOperation?e.onBrowserOperation(qe,()=>Me.dispatch(Ur)):Me.dispatch(Ur)),z();let nr=await sr.newPage();return z(),await nr.goto("data:text/html,<title>Reason Hands evaluator</title>"),z(),await nr.evaluate(`(${gs})(${JSON.stringify(Me.roots)})`),{context:sr,page:nr,runId:qe}}catch(nr){throw await fe(sr).catch(()=>{return}),nr}},or=await rr(),Rr={browser:le,context:he,page:Le,evaluator:or,async captureProgressFrame(qe){return Ee(await qe.screenshot({type:"jpeg",quality:65,timeout:2000}),{label:"Screen after browser action"})},async resetEvaluator(qe){await fe(Rr.evaluator.context),Rr.evaluator=await rr(qe)}};return z(),Rr}catch(xe){throw await ke().catch(()=>{return}),xe}},Fe=async()=>{if(z(),x)return x;if(!R){W=Re();let le;R=Promise.race([W,new Promise((he,xe)=>{le=setTimeout(()=>xe(Error("hands_browser_unavailable: startup timed out")),kc)})]).then((he)=>(z(),x=he,he)).catch(async()=>{B=Error("hands_browser_unavailable: startup failed or timed out");let he;try{await Promise.race([ke(),new Promise((xe,Je)=>{he=setTimeout(()=>Je(Error("hands_repl_stop_timeout")),Bs)})])}catch{B=Error("hands_browser_unavailable: startup cleanup unconfirmed")}finally{if(he)clearTimeout(he)}throw B}).finally(()=>{if(le)clearTimeout(le)})}return R},Xe=async(le,he,xe=!1)=>{let Je=await Fe(),Le=S;if(e.onBrowserOperation&&Je.evaluator.runId!==he)await Je.resetEvaluator(he);let Ee=(async()=>{let or=await Je.evaluator.page.evaluate(`(${bs})(${JSON.stringify({code:le})})`);if(typeof or!=="string")throw Error("hands_repl_invalid_evaluator_output");let Rr=Le.page;if(xe&&Rr&&!or.includes("<<<ARA_VIEW_IMAGE")){let qe=()=>Je.captureProgressFrame(Rr);try{let sr=await(e.onBrowserOperation?e.onBrowserOperation(he,qe):qe());return Le.automaticProgressImage=!0,`${or}
|
|
303
303
|
${sr}`}catch{return`${or}
|
|
304
|
-
Screen capture unavailable.`}}return or})(),Me,rr=new Promise((or,Rr)=>{Me=setTimeout(()=>Rr(Error("REPL evaluation timed out after 105 seconds")),vc)});try{return await Promise.race([
|
|
305
|
-
`);if(Le===-1)return;xe=!0;let Be=he.slice(0,Le);if(e.onControl)try{let
|
|
306
|
-
`?"active":"marker_invalid"}catch(f){return f instanceof Error&&"code"in f&&f.code==="ENOENT"?"marker_missing":"marker_invalid"}}function Ks(e=process.platform,l=$s){return Hc(e,l)==="active"}var Nc=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function Gs(e){let l=Nc.exec(e.replace(/\/+$/,""));return l?`${l[1]}/repo`:null}import{randomUUID as Rd}from"crypto";import{spawn as Od,spawnSync as xd}from"child_process";import{accessSync as Pd,chmodSync as Wt,closeSync as Id,constants as It,fchmodSync as Ad,fstatSync as Td,openSync as Dd,copyFileSync as Cd,existsSync as wo,lstatSync as dr,statSync as dt,mkdtempSync as Hd,mkdirSync as Tt,realpathSync as er,renameSync as cn,rmSync as Nd,writeFileSync as dn}from"fs";import{homedir as Ld,tmpdir as bi}from"os";import{basename as Bd,dirname as Ir,join as cr,resolve as wi,sep as jd}from"path";var Lc={"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 Js(e){return e===null?"other":Lc[e]??"other"}function Nr(e,l){if(e===void 0||l===void 0)return null;let f=Math.round(l-e);return Number.isSafeInteger(f)&&f>=0&&f<=600000?f:null}var Ze="workspace_mode",Xr="granted_root",Br="project_root",Et="terminal_root",Rt="terminal_benchmark_tool_profile",Bc=["bash","bash-node-repl","bash-node-repl-files"],Vs="hands_node_repl_persistent_execution_unsupported";function qs(e){return e==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function Ys(e){return Bc.includes(e)}var Vf=n({device_id:t().uuid(),root_id:t().uuid()}),Yn=/^reason\/[0-9a-f]{8}$/,jc=c({source_path:t().refine(Y).optional(),branch:t().regex(Yn)}),qf=n({checkout_mode:s(["worktree","direct"]).optional(),project_workspace_source:n({kind:i("local_device"),device_id:t().uuid(),root_id:t().uuid(),path:t().refine(Y).optional(),worktree:jc.optional()})});import{execFile as Mc}from"child_process";var Wc=20000,Fc=1e4,Xs=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,Uc=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function Zs(e,l=zc){let f=(fe,ve=Fc)=>l([...Uc,"-C",e,...fe],ve),_=async(fe)=>{let ve=await f(fe);return ve.status===0?ve.stdout.trim():null},w=await _(["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(!w||!Xs.test(w))return null;let S=w.slice(0,12),x=(fe)=>({commit:w,from:"head",note:`reason: started from ${fe}`}),j=await _(["symbolic-ref","--quiet","HEAD"]);if(!j?.startsWith("refs/heads/"))return x(`the checkout's detached HEAD ${S}`);let R=j.slice(11),B=await f(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(B.status!==0||B.stdout.trim())return x(`${R} at ${S}: the checkout has uncommitted changes, which stay there`);let G=await _(["config","--get",`branch.${R}.remote`]),W=await _(["config","--get",`branch.${R}.merge`]);if(!G||!W?.startsWith("refs/")||G.startsWith("-"))return x(`${R} at ${S}: it has no upstream to catch up with`);let D=G==="."||(await f(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",G,W],Wc)).status===0,re=await _(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),J=re?await _(["rev-parse","--verify","--quiet","@{upstream}^{commit}"]):null;if(!re||!J||!Xs.test(J))return x(`${R} at ${S}: ${D?"it has no upstream to catch up with":`fetching ${G} failed`}`);if(!D)return x(`${R} at ${S}: fetching ${re} failed, so it may be behind`);if(J===w)return x(`${R} at ${S}, the same commit as ${re} after fetching it`);if((await f(["merge-base","--is-ancestor",w,J])).status!==0)return x(`${R} at ${S}: it has commits that ${re} does not`);let z=await _(["rev-list","--count",`${w}..${J}`]);return{commit:J,from:"upstream",note:`reason: started from ${re} at ${J.slice(0,12)}, fetched just now: ${R} had no commits of its own and was ${z??"some"} commits behind it`}}function zc(e,l){return new Promise((f)=>{Mc("git",e,{encoding:"utf8",timeout:l,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(_,w)=>{let S=_?typeof _.code==="number"?_.code:null:0;f({status:S,stdout:String(w??"")})})})}import{lstatSync as $c,readdirSync as ep,readFileSync as rp,realpathSync as Qs,rmdirSync as tp,unlinkSync as np,writeFileSync as Kc}from"fs";import{join as Xn,resolve as sp}from"path";var Gc=".reason-device";function ei(e,l,f){let _=l.split("/"),w=de.split("/");if(_.length!==w.length+2||w.some((S,x)=>_[x]!==S)||!ir.test(_[w.length]))return;try{let S=Jc(e,_[w.length]);Kc(Xn(S,Gc),f,{flag:"wx",mode:384})}catch{}}function Jc(e,l){let f=()=>new r("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!ir.test(l))throw f();let _=Xn(Qs(e),de),w=Xn(_,l);if(!$c(w).isDirectory()||Qs(w)!==w)throw f();return w}import{createHash as Vc}from"crypto";import{join as qc}from"path";function Yc(e){return Pr(e)}function $r(){throw new r("environment_unavailable","The private Session environment is unavailable or stale.")}function nn(e){return Vc("sha256").update(JSON.stringify({...e,variables:Object.fromEntries(Object.entries(e.variables).sort(([l],[f])=>l.localeCompare(f)))})).digest("hex")}function ti(e,l){v(e);let f=qc(e,"environment.json"),_,w=new Set,S=(j,R)=>`${R}:${j}`,x=(j)=>{let R=yr.safeParse(j);if(!R.success)return $r();let B=R.data,G=l.identity(),W=Date.parse(B.expires_at);if(!G||B.run_id!==l.runId||B.device_id!==l.deviceId||B.root_id!==l.rootId||B.binding.kind!==l.binding.kind||B.binding.target_revision!==l.binding.target_revision||B.binding.root_grant_revision!==l.binding.root_grant_revision||B.binding.target_generation!==G.generation||B.binding.target_fence_id!==G.fenceId||W<=Date.now()||W>l.expiresAtMs||l.expiresAtMs<=Date.now()||Object.keys(B.variables).some((D)=>!Yc(D)))return $r();if(B.git){let D=new URL(l.apiOrigin),re=new URL(B.git.base_url),J=Date.parse(B.git.expires_at);if(re.origin!==D.origin)throw new r("environment_git_origin_mismatch","The delivered Git broker is not on this worker's API origin.");if(!["/git","/git/"].includes(re.pathname)||re.username||re.password||re.search||re.hash||J<=Date.now()||J>W)return $r()}if(B.cloud_access&&!us(B.cloud_access,l.apiOrigin))throw new r("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return B};return{path:f,install(j){let R=x(j),B=nn(R);if(_&&(R.revision<_.revision||R.revision===_.revision&&(B!==_.hash||R.snapshot_id!==_.snapshotId)))return $r();if(!_||R.revision>_.revision){if(mo(f,R,V.snapshotBytes),nn(x(JSON.parse(h(f,V.snapshotBytes))))!==B)return $r();let G=_;if(_={revision:R.revision,hash:B,snapshotId:R.snapshot_id,generation:R.binding.target_generation},G&&G.generation<_.generation)w.add(S(G.snapshotId,G.revision))}else if(nn(x(JSON.parse(h(f,V.snapshotBytes))))!==_.hash)return $r();return{installed:!0,snapshot_id:R.snapshot_id,installed_revision:R.revision}},current(){if(!_)return $r();try{let j=x(JSON.parse(h(f,V.snapshotBytes)));if(nn(j)!==_.hash)return $r();return j}catch{return $r()}},carried:(j,R)=>w.has(S(j,R))}}var xt=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})]),Xc="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",Zc=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",Xc]),ni=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),Sp=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),Ep=new Set([b,...xt.map((e)=>e.artifact_sha256),...Zc,...ni]);var Rp=new Set([b,...xt.filter((e)=>e.pi_tools_v1).map((e)=>e.artifact_sha256),...ni]);var Op=new Set([b,...xt.filter((e)=>e.pi_tools_confinement_v1).map((e)=>e.artifact_sha256)]);var xp=new Set([b,...xt.filter((e)=>e.home_folder_v1).map((e)=>e.artifact_sha256)]);var Pp=new Set([b,...xt.filter((e)=>e.background_bash_v1).map((e)=>e.artifact_sha256)]);var Ip=new Set([b,...xt.filter((e)=>e.machine_sdk_v1).map((e)=>e.artifact_sha256)]);var Qc=[T,"reason-hands-worker.cjs"];function oi(e){return typeof e==="string"&&Qc.includes(e)}var ed;function si(){return ed??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as rd,constants as Zn,fstatSync as ii,lstatSync as td,openSync as nd,readSync as od,realpathSync as sd,watch as id}from"fs";import{dirname as ai}from"path";function on(e,l){let f;try{let _=ai(e),w=td(_);if(!w.isDirectory()||w.isSymbolicLink()||!A(w,18)||sd(_)!==_)return null;f=nd(e,Zn.O_RDONLY|Zn.O_NOFOLLOW|Zn.O_NONBLOCK);let S=ii(f);if(!S.isFile()||S.nlink!==1||!A(S)||S.size<1||S.size>8192)return null;let x=Buffer.alloc(8193),j=od(f,x,0,x.length,0),R=ii(f);if(j!==S.size||R.size!==S.size||R.nlink!==1||R.mtimeMs!==S.mtimeMs||R.ctimeMs!==S.ctimeMs)return null;let B=JSON.parse(x.subarray(0,j).toString("utf8"));if(!B||B.pid!==l.pid||!Number.isSafeInteger(B.pid)||B.pid<1||B.launchId!==l.launchId||B.workerVersion!==l.workerVersion||B.protocolVersion!==l.protocolVersion||B.workerArtifactSha256!==l.workerArtifactSha256||B.workerEntrypoint!==l.workerEntrypoint||B.workspaceAliasReady!==!0||!U(B.targetGeneration)||!U(B.generation)||!L(B.fenceId))return null;return{...l,generation:B.generation,targetGeneration:B.targetGeneration,fenceId:B.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(f!==void 0)rd(f)}}var ad=(e,l,f)=>{let _=id(e,{persistent:!1},l);return _.on("error",f),_};function ci(e){let l=new AbortController,f=e.initial,_=f.targetGeneration,w=!1,S=!1,x,j,R=()=>{if(S)return;S=!0,x?.close(),x=void 0,clearInterval(j),e.signal.removeEventListener("abort",R),l.abort()},B=()=>{if(S)return;if(!e.isAlive()){R();return}let G=on(e.path,e.initial);if(!G||G.generation<f.generation||G.targetGeneration<f.targetGeneration||G.targetGeneration===f.targetGeneration&&G.fenceId!==f.fenceId)return;if(f=G,w||G.targetGeneration<=_)return;_=G.targetGeneration,w=!0,Promise.resolve().then(()=>(l.signal.throwIfAborted(),e.publish(G,l.signal))).catch(()=>{if(!S)R(),e.failed?.()}).finally(()=>{w=!1,B()})};if(e.signal.aborted)return R(),{stop:R};e.signal.addEventListener("abort",R,{once:!0});try{x=(e.watch??ad)(ai(e.path),B,()=>{x?.close(),x=void 0})}catch{}return j=setInterval(B,1000),j.unref?.(),B(),{stop:R}}import{spawn as cd}from"child_process";import{chmodSync as dd,mkdtempSync as ld,realpathSync as ud,rmSync as fd,unlinkSync as pd,writeFileSync as _d}from"fs";import md from"net";import{platform as hd,tmpdir as gd}from"os";import{join as di}from"path";var li=1048576,_o=105000,bd=2000,wd=String.raw`
|
|
304
|
+
Screen capture unavailable.`}}return or})(),Me,rr=new Promise((or,Rr)=>{Me=setTimeout(()=>Rr(Error("REPL evaluation timed out after 105 seconds")),vc)});try{return await Promise.race([Ee,rr])}catch(or){if(or instanceof Error&&or.message.includes("timed out"))Ee.catch(()=>{return}),await Je.resetEvaluator(he).catch(()=>{return});throw or}finally{if(Me)clearTimeout(Me)}},ye=Promise.resolve(),We=new Set,Ye=new Set;tn(e.socketPath);let De=it.createServer((le)=>{We.add(le),le.once("close",()=>{We.delete(le),Ye.delete(le)}),le.setEncoding("utf8");let he="",xe=!1;le.on("data",(Je)=>{if(xe)return;if(he+=Je,he.length>yc){xe=!0,St(le,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let Le=he.indexOf(`
|
|
305
|
+
`);if(Le===-1)return;xe=!0;let Be=he.slice(0,Le);if(e.onControl)try{let Ee=JSON.parse(Be);if(typeof Ee.action==="string"&&Ee.action!=="evaluate")Ye.add(le)}catch{}ye=ye.then(async()=>{if(le.destroyed)return;w=[],S={};try{let Ee=JSON.parse(Be);if(Ee.action==="probe"){let qe=await Fe();await Xe("undefined",qe.evaluator.runId),St(le,{ok:!0,output:"ARA_HANDS_REPL_READY"});return}if(typeof Ee.action==="string"&&Ee.action!=="evaluate"&&e.onControl){St(le,{ok:!0,output:await e.onControl(Ee.action,Ee)});return}if(Ee.action!=="evaluate"||typeof Ee.code!=="string")throw Error("Invalid REPL request");let Me=Ee.code,rr=typeof Ee.runId==="string"?Ee.runId:void 0,or=()=>Xe(Me,rr,Ee.includeProgressCapture===!0),Rr=await(e.onEvaluate?e.onEvaluate(Ee,or):or());St(le,{ok:!0,output:Rr,browserActions:w,...S.automaticProgressImage?{automaticProgressImage:!0}:{}})}catch(Ee){St(le,{ok:!1,error:Ee instanceof Error?Ee.message:String(Ee),stack:Ee instanceof Error?Ee.stack:void 0,browserActions:w})}}).catch((Ee)=>{St(le,{ok:!1,error:Ee instanceof Error?Ee.message:String(Ee)})})})});try{await new Promise((le,he)=>{De.once("error",he),De.listen(e.socketPath,()=>{De.off("error",he);try{if(process.platform!=="win32")ic(e.socketPath,384);le()}catch(xe){De.close(()=>he(xe))}})})}catch(le){throw tn(e.socketPath),le}return{socketPath:e.socketPath,browserExecutablePath:f,stop(){if(U)return U;G=!0;let le=Ye.size?setTimeout(()=>{for(let Le of Ye)Le.destroy()},Sc):void 0,he=new Promise((Le)=>De.close(()=>{if(le)clearTimeout(le);Le()}));for(let Le of We)if(!Ye.has(Le))Le.destroy();ye.catch(()=>{return});let xe=async()=>{await he,tn(e.socketPath);let Le=[ke()];if(W)Le.push(W.then(()=>{return},()=>{return}));let Be=await Promise.allSettled(Le),Ee=await Promise.allSettled([ke()]),Me=[...Be,...Ee].filter((rr)=>rr.status==="rejected");if(Me.length)throw AggregateError(Me.map((rr)=>rr.reason),"hands_repl_stop_unconfirmed")},Je;return U=Promise.race([xe(),new Promise((Le,Be)=>{Je=setTimeout(()=>Be(Error("hands_repl_stop_timeout")),Bs)})]).finally(()=>{if(Je)clearTimeout(Je);tn(e.socketPath)}),U}}}var Ic=["private_runtime","runtime_root","temporary_directory","granted_root","workspace_layout","jobs","browser_socket","relay_url","environment_owner","job_environment","config_write"],Ac=["ENOENT","EACCES","EPERM","EINVAL","ENOTDIR","EISDIR","ELOOP","EROFS","ENOSPC","EMFILE","ENFILE","EEXIST"];function zs(e,l){if(!e||!Ic.includes(e))return null;let f=typeof l==="object"&&l!==null&&"code"in l?l.code:null;return{workspace_stage:e,workspace_errno:typeof f==="string"&&Ac.includes(f)?f:"unknown"}}import{lstatSync as Tc,readFileSync as Dc}from"fs";var $s="/run/sc/egress-guard",Cc=10002,qn=10003;function Hc(e=process.platform,l=$s){if(e!=="linux")return"not_root_host";try{let f=Tc(l);if(f.uid!==0)return"marker_not_root_owned";if(!f.isFile()||(f.mode&18)!==0)return"marker_invalid";return Dc(l,"utf8")===`v1 ${Cc} ${qn}
|
|
306
|
+
`?"active":"marker_invalid"}catch(f){return f instanceof Error&&"code"in f&&f.code==="ENOENT"?"marker_missing":"marker_invalid"}}function Ks(e=process.platform,l=$s){return Hc(e,l)==="active"}var Nc=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function Gs(e){let l=Nc.exec(e.replace(/\/+$/,""));return l?`${l[1]}/repo`:null}import{randomUUID as Rd}from"crypto";import{spawn as Od,spawnSync as xd}from"child_process";import{accessSync as Pd,chmodSync as Wt,closeSync as Id,constants as It,fchmodSync as Ad,fstatSync as Td,openSync as Dd,copyFileSync as Cd,existsSync as yo,lstatSync as dr,statSync as dt,mkdtempSync as Hd,mkdirSync as Tt,realpathSync as er,renameSync as cn,rmSync as Nd,writeFileSync as dn}from"fs";import{homedir as Ld,tmpdir as bi}from"os";import{basename as Bd,dirname as Ir,join as cr,resolve as wi,sep as jd}from"path";var Lc={"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 Js(e){return e===null?"other":Lc[e]??"other"}function Lr(e,l){if(e===void 0||l===void 0)return null;let f=Math.round(l-e);return Number.isSafeInteger(f)&&f>=0&&f<=600000?f:null}var Ze="workspace_mode",Xr="granted_root",Mr="project_root",Et="terminal_root",Rt="terminal_benchmark_tool_profile",Bc=["bash","bash-node-repl","bash-node-repl-files"],Vs="hands_node_repl_persistent_execution_unsupported";function qs(e){return e==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function Ys(e){return Bc.includes(e)}var Vf=n({device_id:t().uuid(),root_id:t().uuid()}),Yn=/^reason\/[0-9a-f]{8}$/,jc=c({source_path:t().refine(Y).optional(),branch:t().regex(Yn)}),qf=n({checkout_mode:s(["worktree","direct"]).optional(),project_workspace_source:n({kind:i("local_device"),device_id:t().uuid(),root_id:t().uuid(),path:t().refine(Y).optional(),worktree:jc.optional()})});import{execFile as Mc}from"child_process";var Wc=20000,Fc=1e4,Xs=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,Uc=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function Zs(e,l=zc){let f=(fe,ke=Fc)=>l([...Uc,"-C",e,...fe],ke),_=async(fe)=>{let ke=await f(fe);return ke.status===0?ke.stdout.trim():null},w=await _(["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(!w||!Xs.test(w))return null;let S=w.slice(0,12),x=(fe)=>({commit:w,from:"head",note:`reason: started from ${fe}`}),W=await _(["symbolic-ref","--quiet","HEAD"]);if(!W?.startsWith("refs/heads/"))return x(`the checkout's detached HEAD ${S}`);let R=W.slice(11),B=await f(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(B.status!==0||B.stdout.trim())return x(`${R} at ${S}: the checkout has uncommitted changes, which stay there`);let G=await _(["config","--get",`branch.${R}.remote`]),U=await _(["config","--get",`branch.${R}.merge`]);if(!G||!U?.startsWith("refs/")||G.startsWith("-"))return x(`${R} at ${S}: it has no upstream to catch up with`);let D=G==="."||(await f(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",G,U],Wc)).status===0,re=await _(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),J=re?await _(["rev-parse","--verify","--quiet","@{upstream}^{commit}"]):null;if(!re||!J||!Xs.test(J))return x(`${R} at ${S}: ${D?"it has no upstream to catch up with":`fetching ${G} failed`}`);if(!D)return x(`${R} at ${S}: fetching ${re} failed, so it may be behind`);if(J===w)return x(`${R} at ${S}, the same commit as ${re} after fetching it`);if((await f(["merge-base","--is-ancestor",w,J])).status!==0)return x(`${R} at ${S}: it has commits that ${re} does not`);let z=await _(["rev-list","--count",`${w}..${J}`]);return{commit:J,from:"upstream",note:`reason: started from ${re} at ${J.slice(0,12)}, fetched just now: ${R} had no commits of its own and was ${z??"some"} commits behind it`}}function zc(e,l){return new Promise((f)=>{Mc("git",e,{encoding:"utf8",timeout:l,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(_,w)=>{let S=_?typeof _.code==="number"?_.code:null:0;f({status:S,stdout:String(w??"")})})})}import{lstatSync as $c,readdirSync as ep,readFileSync as rp,realpathSync as Qs,rmdirSync as tp,unlinkSync as np,writeFileSync as Kc}from"fs";import{join as Xn,resolve as sp}from"path";var Gc=".reason-device";function ei(e,l,f){let _=l.split("/"),w=de.split("/");if(_.length!==w.length+2||w.some((S,x)=>_[x]!==S)||!ir.test(_[w.length]))return;try{let S=Jc(e,_[w.length]);Kc(Xn(S,Gc),f,{flag:"wx",mode:384})}catch{}}function Jc(e,l){let f=()=>new r("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!ir.test(l))throw f();let _=Xn(Qs(e),de),w=Xn(_,l);if(!$c(w).isDirectory()||Qs(w)!==w)throw f();return w}import{createHash as Vc}from"crypto";import{join as qc}from"path";function Yc(e){return Pr(e)}function Kr(){throw new r("environment_unavailable","The private Session environment is unavailable or stale.")}function nn(e){return Vc("sha256").update(JSON.stringify({...e,variables:Object.fromEntries(Object.entries(e.variables).sort(([l],[f])=>l.localeCompare(f)))})).digest("hex")}function ti(e,l){v(e);let f=qc(e,"environment.json"),_,w=new Set,S=(W,R)=>`${R}:${W}`,x=(W)=>{let R=yr.safeParse(W);if(!R.success)return Kr();let B=R.data,G=l.identity(),U=Date.parse(B.expires_at);if(!G||B.run_id!==l.runId||B.device_id!==l.deviceId||B.root_id!==l.rootId||B.binding.kind!==l.binding.kind||B.binding.target_revision!==l.binding.target_revision||B.binding.root_grant_revision!==l.binding.root_grant_revision||B.binding.target_generation!==G.generation||B.binding.target_fence_id!==G.fenceId||U<=Date.now()||U>l.expiresAtMs||l.expiresAtMs<=Date.now()||Object.keys(B.variables).some((D)=>!Yc(D)))return Kr();if(B.git){let D=new URL(l.apiOrigin),re=new URL(B.git.base_url),J=Date.parse(B.git.expires_at);if(re.origin!==D.origin)throw new r("environment_git_origin_mismatch","The delivered Git broker is not on this worker's API origin.");if(!["/git","/git/"].includes(re.pathname)||re.username||re.password||re.search||re.hash||J<=Date.now()||J>U)return Kr()}if(B.cloud_access&&!us(B.cloud_access,l.apiOrigin))throw new r("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return B};return{path:f,install(W){let R=x(W),B=nn(R);if(_&&(R.revision<_.revision||R.revision===_.revision&&(B!==_.hash||R.snapshot_id!==_.snapshotId)))return Kr();if(!_||R.revision>_.revision){if(mo(f,R,V.snapshotBytes),nn(x(JSON.parse(h(f,V.snapshotBytes))))!==B)return Kr();let G=_;if(_={revision:R.revision,hash:B,snapshotId:R.snapshot_id,generation:R.binding.target_generation},G&&G.generation<_.generation)w.add(S(G.snapshotId,G.revision))}else if(nn(x(JSON.parse(h(f,V.snapshotBytes))))!==_.hash)return Kr();return{installed:!0,snapshot_id:R.snapshot_id,installed_revision:R.revision}},current(){if(!_)return Kr();try{let W=x(JSON.parse(h(f,V.snapshotBytes)));if(nn(W)!==_.hash)return Kr();return W}catch{return Kr()}},carried:(W,R)=>w.has(S(W,R))}}var xt=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})]),Xc="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",Zc=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",Xc]),ni=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),Sp=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),Ep=new Set([b,...xt.map((e)=>e.artifact_sha256),...Zc,...ni]);var Rp=new Set([b,...xt.filter((e)=>e.pi_tools_v1).map((e)=>e.artifact_sha256),...ni]);var Op=new Set([b,...xt.filter((e)=>e.pi_tools_confinement_v1).map((e)=>e.artifact_sha256)]);var xp=new Set([b,...xt.filter((e)=>e.home_folder_v1).map((e)=>e.artifact_sha256)]);var Pp=new Set([b,...xt.filter((e)=>e.background_bash_v1).map((e)=>e.artifact_sha256)]);var Ip=new Set([b,...xt.filter((e)=>e.machine_sdk_v1).map((e)=>e.artifact_sha256)]);var Qc=[T,"reason-hands-worker.cjs"];function oi(e){return typeof e==="string"&&Qc.includes(e)}var ed;function si(){return ed??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as rd,constants as Zn,fstatSync as ii,lstatSync as td,openSync as nd,readSync as od,realpathSync as sd,watch as id}from"fs";import{dirname as ai}from"path";function on(e,l){let f;try{let _=ai(e),w=td(_);if(!w.isDirectory()||w.isSymbolicLink()||!A(w,18)||sd(_)!==_)return null;f=nd(e,Zn.O_RDONLY|Zn.O_NOFOLLOW|Zn.O_NONBLOCK);let S=ii(f);if(!S.isFile()||S.nlink!==1||!A(S)||S.size<1||S.size>8192)return null;let x=Buffer.alloc(8193),W=od(f,x,0,x.length,0),R=ii(f);if(W!==S.size||R.size!==S.size||R.nlink!==1||R.mtimeMs!==S.mtimeMs||R.ctimeMs!==S.ctimeMs)return null;let B=JSON.parse(x.subarray(0,W).toString("utf8"));if(!B||B.pid!==l.pid||!Number.isSafeInteger(B.pid)||B.pid<1||B.launchId!==l.launchId||B.workerVersion!==l.workerVersion||B.protocolVersion!==l.protocolVersion||B.workerArtifactSha256!==l.workerArtifactSha256||B.workerEntrypoint!==l.workerEntrypoint||B.workspaceAliasReady!==!0||!H(B.targetGeneration)||!H(B.generation)||!L(B.fenceId))return null;return{...l,generation:B.generation,targetGeneration:B.targetGeneration,fenceId:B.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(f!==void 0)rd(f)}}var ad=(e,l,f)=>{let _=id(e,{persistent:!1},l);return _.on("error",f),_};function ci(e){let l=new AbortController,f=e.initial,_=f.targetGeneration,w=!1,S=!1,x,W,R=()=>{if(S)return;S=!0,x?.close(),x=void 0,clearInterval(W),e.signal.removeEventListener("abort",R),l.abort()},B=()=>{if(S)return;if(!e.isAlive()){R();return}let G=on(e.path,e.initial);if(!G||G.generation<f.generation||G.targetGeneration<f.targetGeneration||G.targetGeneration===f.targetGeneration&&G.fenceId!==f.fenceId)return;if(f=G,w||G.targetGeneration<=_)return;_=G.targetGeneration,w=!0,Promise.resolve().then(()=>(l.signal.throwIfAborted(),e.publish(G,l.signal))).catch(()=>{if(!S)R(),e.failed?.()}).finally(()=>{w=!1,B()})};if(e.signal.aborted)return R(),{stop:R};e.signal.addEventListener("abort",R,{once:!0});try{x=(e.watch??ad)(ai(e.path),B,()=>{x?.close(),x=void 0})}catch{}return W=setInterval(B,1000),W.unref?.(),B(),{stop:R}}import{spawn as cd}from"child_process";import{chmodSync as dd,mkdtempSync as ld,realpathSync as ud,rmSync as fd,unlinkSync as pd,writeFileSync as _d}from"fs";import md from"net";import{platform as hd,tmpdir as gd}from"os";import{join as di}from"path";var li=1048576,_o=105000,bd=2000,wd=String.raw`
|
|
307
307
|
const { writeSync } = require("node:fs");
|
|
308
308
|
const { createRequire } = require("node:module");
|
|
309
309
|
const { join } = require("node:path");
|
|
@@ -444,9 +444,9 @@ lines.on("line", (line) => {
|
|
|
444
444
|
});
|
|
445
445
|
`;function yd(e=process.execPath,l=process.versions.bun){return l?"node":e}function Qn(e){try{pd(e)}catch{}}function sn(e,l){e.end(`${JSON.stringify(l)}
|
|
446
446
|
`)}function fo(e){return JSON.stringify(e)}function vd(e){let l=ld(di(gd(),"reason-node-repl-")),f=di(l,"node-repl.sb"),w=["(version 1)","(deny default)",'(import "system.sb")',"(allow process*)","(deny network*)",`(allow file-read* ${["/System","/usr","/bin","/opt/homebrew","/usr/local"].map((x)=>`(subpath ${fo(x)})`).join(" ")})`,`(allow file-read* file-write* (subpath ${fo(e.workRoot)}) (subpath ${fo(l)}))`].join(`
|
|
447
|
-
`);_d(f,w,{mode:384});let S=!1;return{command:"/usr/bin/sandbox-exec",args:["-f",f,e.nodeExecutable,...e.nodeArgs],cwd:e.workRoot,env:{...e.environment,TMPDIR:l},async cleanup(){if(S)return;S=!0,fd(l,{recursive:!0,force:!0})}}}async function kd(e){let l=ud(e.workRoot),f=e.nodeExecutable??yd(),_=["--max-old-space-size=512","--permission",`--allow-fs-read=${l}`,`--allow-fs-write=${l}`,"-e",wd],w=Ue({home:l,temporaryDirectory:l}),S=e.platformName??hd();if(S==="linux")return{command:f,args:_,cwd:l,env:w,async cleanup(){}};if(S==="darwin")return vd({nodeExecutable:f,nodeArgs:_,workRoot:l,environment:w});throw Error("hands_node_repl_platform_unsupported")}async function Mt(e){let l;try{await Promise.race([e,new Promise((f,_)=>{l=setTimeout(()=>_(Error("hands_node_repl_child_cleanup_timeout")),bd)})])}finally{clearTimeout(l)}}async function ui(e){if(e.executionMode!=="single-evaluation")throw Error(Vs);let l=await kd(e),f;try{f=cd(l.command,l.args,{cwd:l.cwd,env:l.env,stdio:["pipe","pipe","pipe"]})}catch(be){throw await l.cleanup(),be}let _=new Promise((be)=>f.once("close",()=>be())),w;f.once("error",(be)=>{w=be});let S=!1,x=!1,
|
|
448
|
-
`);if(Re===-1)return;let Fe=D.slice(0,Re);D=D.slice(Re+1);let
|
|
449
|
-
`,(We)=>{if(!We)return;G(ye,void 0,We)})});try{if(!R){if(f.pid===void 0)await Mt(_);throw w??Error("hands_node_repl_control_pipe_missing")}let be=await J({action:"probe"});if(be.ok!==!0||be.output!=="ARA_HANDS_REPL_READY")throw Error("hands_node_repl_probe_failed")}catch(be){S=!0,f.kill("SIGKILL");try{await Mt(_)}finally{await l.cleanup()}throw be}let z=Promise.resolve(),fe=new Set;Qn(e.socketPath);let
|
|
450
|
-
`);if(We===-1)return;Fe=!0;let Ve=Re.slice(0,We);z=z.then(async()=>{if(be.destroyed)return;try{let De=JSON.parse(Ve);if(De.action!=="evaluate"||typeof De.code!=="string")throw Error("Invalid REPL request");qe=!0;let le=await J({action:"evaluate",code:De.code});if(qe=!1,le.ok!==!0||typeof le.output!=="string")throw Error(typeof le.error==="string"?le.error:"hands_node_repl_failed");sn(be,{ok:!0,output:le.output})}catch(De){qe=!1,sn(be,{ok:!1,error:De instanceof Error?De.message:String(De),stack:De instanceof Error?De.stack:void 0})}}).catch((De)=>{sn(be,{ok:!1,error:De instanceof Error?De.message:String(De)})})})});try{await new Promise((be,Re)=>{ve.once("error",Re),ve.listen(e.socketPath,()=>{ve.off("error",Re);try{dd(e.socketPath,384),be()}catch(Fe){ve.close(()=>Re(Fe))}})})}catch(be){S=!0,f.kill("SIGKILL");try{await Mt(_)}finally{await l.cleanup(),Qn(e.socketPath)}throw be}return{socketPath:e.socketPath,async stop(){if(S)return;S=!0;let be=new Promise((Re)=>ve.close(()=>Re()));for(let Re of fe)Re.destroy();await be,z.catch(()=>{return}),W();try{await Mt(_)}finally{await l.cleanup(),Qn(e.socketPath)}}}}var ho=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var fi="/workspace",pi="/var/lib/reason/sessions",Sd="/var/lib/reason/session-controls";function Sr(e){let l=`${pi}/`;if(!e.startsWith(l))return null;let f=e.slice(l.length);if(!ho.test(f)||f!==f.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${Sd}/${f}/job.env`}function Ed(e){if(!ho.test(e))throw Error("personal_computer_invalid_identity");return e.toLowerCase()}function an(e){let l=Ed(e);return{runtimeRoot:`${pi}/${l}`,workspaceRoot:`${fi}/sessions/${l}`,sharedRoot:fi}}var _i="/root/.ara/cloud-browser/repl.sock";function go(e){return e==="compute"}function mi(e,l,f="linux"){if(e)an(e);if(f!=="linux")throw Error("cloud_browser_os_invalid");if(l!==void 0&&(!e||!/^[1-9][0-9]{0,18}$/.test(l)))throw Error("cloud_browser_generation_invalid");let _=e?`/var/lib/reason/browsers/${e.toLowerCase()}`:"/root/.ara/cloud-browser",w=e?`${_}/${l?`g${l}`:"current"}`:_,S=e?`/root/.b/${e.toLowerCase().replaceAll("-","")}`:_;return{temporarySessionDirectory:S,temporaryDirectory:e?`${S}/${l??"current"}`:`${w}/tmp`,directory:w,sessionDirectory:_,config:`${w}/config.json`,status:`${w}/status.json`,socket:`${w}/repl.sock`,bundle:`${w}/driver.mjs`,processName:e?`ara-browser-${e.toLowerCase()}${l?`-${l}`:""}`:"ara-cloud-browser"}}var bo="browser_egress",hi=ds,Md=45000,Wd=Qt+1500,Zr=/^[A-Za-z0-9._:-]{1,160}$/,Fd="/run/ara-hands";function Ud(e,l,f=bi()){if(e==="darwin")return{temporaryRoot:f,prepareRoot:!1,sessionMode:448};return{temporaryRoot:l??Fd,prepareRoot:!0,sessionMode:457}}function me(e,l=process.platform,f=process.geteuid?.()){return e===!0&&l==="linux"&&f===0}function ge(e=K(),l=process.platform,f=process.geteuid?.()){return e&&l==="linux"&&f===0?{uid:e.uid,gid:e.gid,home:e.home,username:e.username}:null}function Ot(e=ge(),l=Ks){return e&&l()?qn:null}function zd(e,l){if(!l&&(e??"linux")==="linux")return _i;return mi(l,void 0,e??"linux").socket}function Pt(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function yi(e){let l=e.toLowerCase().replace(/^\[|\]$/g,"");return l==="localhost"||l.endsWith(".localhost")||l==="::1"||l==="0:0:0:0:0:0:0:1"||l==="0.0.0.0"||l.startsWith("127.")}class Er extends r{expiryDiagnostic;constructor(e){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=e}}function $d(e){return Pt(e)&&Object.keys(e).every((l)=>l==="source_path"||l==="branch")&&(e.source_path===void 0||Y(e.source_path))&&typeof e.branch==="string"&&Yn.test(e.branch)}function Kd(e,l,f){let _=l===void 0?Date.now():l,w=["relay_url","session_id","environment_id","expires_at","policy_mode","policy_version","hands_protocol_version","hands_worker_version","hands_worker_artifact_sha256","hands_worker_entrypoint","target_generation","target_fence_id"],S=new Set([...w,"workspace_id","legacy_workspace_id",Ce,Ae,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",Ze,bo,Rt,Q,Z,q]),x=Pt(e)?e:null,j=x?.[bo],R=x?.[Rt],B=x?.[Z],G=j===void 0||(x?.[Ze]===Xr||B===pe&&x?.[Ze]===void 0)&&Pt(j)&&Object.keys(j).every((ve)=>ve==="mode"||ve==="allowed_domains")&&j.mode==="enforce"&&Array.isArray(j.allowed_domains)&&j.allowed_domains.length<=256&&j.allowed_domains.every((ve)=>typeof ve==="string"&&Ln(ve));if(!Pt(e)||w.some((ve)=>!(ve in e))||Object.keys(e).some((ve)=>!S.has(ve))||!G||B!==void 0&&B!==pe||x?.[q]!==void 0&&x[q]!==Te||x?.personal_workspace!==void 0&&(x.personal_workspace!==!0||x[Ze]!==Xr)||x?.cloud_browser!==void 0&&(x.cloud_browser!==!0||x[Ze]!==Xr)||x?.sandbox_provider!==void 0&&!go(x.sandbox_provider)||x?.sandbox_os!==void 0&&x.sandbox_os!=="linux"||R!==void 0&&(x?.[Ze]!==Et||!Ys(R))||Ze in e&&e[Ze]!==Xr&&e[Ze]!==Et&&e[Ze]!==Br||e.workspace_path!==void 0&&(!Y(e.workspace_path)||e[Ze]!==Br)||e.workspace_worktree!==void 0&&(e.workspace_path===void 0||!$d(e.workspace_worktree))||typeof e.relay_url!=="string"||typeof e.session_id!=="string"||!Zr.test(e.session_id)||e.workspace_id!==void 0&&(typeof e.workspace_id!=="string"||!Zr.test(e.workspace_id))||e.legacy_workspace_id!==void 0&&(typeof e.legacy_workspace_id!=="string"||!Zr.test(e.legacy_workspace_id))||e[Ce]!==void 0&&(e[Ce]!==ue||(Ze in e))||e[Ae]!==void 0&&(e[Ae]!==X||(Ze in e))||e[Q]!==void 0&&(typeof e[Q]!=="string"||!Zr.test(e[Q]))||typeof e.environment_id!=="string"||!Zr.test(e.environment_id)||typeof e.expires_at!=="string"||e.policy_mode!=="full_access"||e.policy_version!==1||e.hands_protocol_version!==P||e.hands_worker_version!==O||e.hands_worker_artifact_sha256!==b||!oi(e.hands_worker_entrypoint)||!U(e.target_generation)||!L(e.target_fence_id))throw new r("invalid_hands_payload","Reason Hands connection payload is invalid.");let W;try{W=new URL(e.relay_url)}catch{throw new r("invalid_hands_relay","Reason Hands relay URL is invalid.")}if((yi(W.hostname)?W.protocol!=="ws:":W.protocol!=="wss:")||W.username||W.password||W.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(W.pathname))throw new r("invalid_hands_relay","Reason Hands relay URL is not allowed.");let re=Date.parse(e.expires_at),J=Number.isNaN(re)?"parse":new Date(re).toISOString()!==e.expires_at?"noncanonical":re<=_?"expired":re-_>hi?"over_cap":"accepted",z={version:1,outcome:J,clock_source:l===void 0?"date_now":"injected",validation_now_ms:wt(_),expiry_ms:wt(re),remaining_ms:Number.isSafeInteger(re-_)?re-_:null,maximum_lifetime_ms:hi,cli_artifact:si()};if(J!=="accepted")throw new Er(z);try{f?.(z)}catch{}let fe=e.environment_binding===void 0?void 0:Tn.safeParse(e.environment_binding);if(fe&&!fe.success)throw new r("invalid_hands_request","Reason Hands environment binding is invalid.");return{...e.cloud_browser===!0?{cloud_browser:!0}:{},...go(e.sandbox_provider)?{sandbox_provider:e.sandbox_provider}:{},...e.sandbox_os==="linux"?{sandbox_os:e.sandbox_os}:{},...e.personal_workspace===!0?{personal_workspace:!0}:{},relay_url:W.toString(),...fe?.success?{environment_binding:fe.data}:{},session_id:e.session_id,...e.workspace_id===void 0?{}:{workspace_id:e.workspace_id},...e.legacy_workspace_id===void 0?{}:{legacy_workspace_id:e.legacy_workspace_id},...e[Ce]===ue?{[Ce]:ue}:{},...e[Ae]===X?{[Ae]:X}:{},...typeof e[Q]==="string"?{[Q]:e[Q]}:{},...e[Z]===pe?{[Z]:pe}:{},...e[q]===Te?{[q]:Te}:{},...typeof e.workspace_path==="string"?{workspace_path:e.workspace_path}:{},...Pt(e.workspace_worktree)?{workspace_worktree:{...typeof e.workspace_worktree.source_path==="string"?{source_path:e.workspace_worktree.source_path}:{},branch:String(e.workspace_worktree.branch)}}:{},environment_id:e.environment_id,expires_at:e.expires_at,policy_mode:"full_access",policy_version:1,hands_protocol_version:P,hands_worker_version:O,hands_worker_artifact_sha256:b,hands_worker_entrypoint:T,target_generation:e.target_generation,target_fence_id:e.target_fence_id,...Ze in e?{[Ze]:e[Ze]}:{},...R===void 0?{}:{[Rt]:R},...j===void 0?{}:{[bo]:{mode:"enforce",allowed_domains:[...new Set(j.allowed_domains)].sort()}}}}function Gd(){let e=new Map;return{acquire(l,f){if(e.has(l))return null;let _=[...e.values()],w=(x)=>f.group!==void 0&&x.group===f.group;if(f.exclusive?!_.every(w):_.some((x)=>x.exclusive))return null;if(f.limit!==void 0&&!_.some(w)&&new Set(_.map((x,j)=>x.group??j)).size>=f.limit)return null;e.set(l,f);let S=!1;return()=>{if(S)return;S=!0,e.delete(l)}},activeOwners:()=>[...e.keys()]}}var Jd=Gd();function Vd(e,l){Tt(e,{recursive:!0,mode:448});let f=er(e),_=()=>new r("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let x of l.split("/")){let j=cr(f,x);try{let B=dr(j);if(B.isSymbolicLink()||!B.isDirectory())throw _()}catch(B){if(!(B&&typeof B==="object"&&("code"in B)&&B.code==="ENOENT"))throw B;try{Tt(j,{mode:448})}catch(G){if(!(G&&typeof G==="object"&&("code"in G)&&G.code==="EEXIST"))throw G}}let R=dr(j);if(R.isSymbolicLink()||!R.isDirectory()||er(j)!==j)throw _();f=j}if(process.platform==="win32"){let x=dr(f);if(x.isSymbolicLink()||!x.isDirectory()||er(f)!==f||!Fr(er(e),f))throw _();return f}let w=dr(f),S=Dd(f,It.O_RDONLY|It.O_DIRECTORY|It.O_NOFOLLOW);try{let x=Td(S);if(!x.isDirectory()||x.dev!==w.dev||x.ino!==w.ino||er(f)!==f)throw _();Ad(S,448)}finally{Id(S)}return f}function qd(e,l=Vo(),f,_,w){if(!Zr.test(e)||f!==void 0&&!Zr.test(f))throw new r("invalid_hands_workspace","Reason Hands run identity is invalid.");let S=Ir(I({kind:"managed",workspaceId:e,..._?{base:_}:{},...w?{layout:w}:{}})),x=Vd(l,Ir(S)),j=cr(x,Bd(S)),R=!1;try{let D=dr(j);if(R=!0,D.isSymbolicLink())throw new r("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!D.isDirectory())throw new r("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(D){if(D instanceof r||!(D&&typeof D==="object"&&("code"in D)&&D.code==="ENOENT"))throw D}if(w&&!R)try{let D=cr(er(l),Ir(I({kind:"managed",workspaceId:e,..._?{base:_}:{}}))),re=dr(D);if(!re.isSymbolicLink()&&re.isDirectory()&&er(D)===D)cn(D,j),R=!0}catch{}if(f&&f!==e){let D=cr(x,f);try{let re=dr(D);if(re.isSymbolicLink()||!re.isDirectory())throw new r("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let J=er(D);if(Ir(J)!==x)throw new r("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let z=null;if(R){for(let fe=1;fe<=1000&&!z;fe++){let ve=cr(x,fe===1?`.${e}.previous`:`.${e}.previous.${fe}`);try{dr(ve)}catch(be){if(!(be&&typeof be==="object"&&("code"in be)&&be.code==="ENOENT"))throw be;z=ve}}if(!z)throw new r("invalid_hands_workspace","Reason Hands has too many previous workspace backups.");cn(j,z)}try{cn(J,j)}catch(fe){if(z)cn(z,j);throw fe}R=!0}catch(re){if(re instanceof r||!(re&&typeof re==="object"&&("code"in re)&&re.code==="ENOENT"))throw re}}Tt(j,{recursive:!0,mode:448}),Wt(j,448);let B=er(j);if(Ir(B)!==x)throw new r("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let G=cr(B,"repo");try{let D=dr(G);if(D.isSymbolicLink()||!D.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(D){if(D instanceof r||!(D&&typeof D==="object"&&("code"in D)&&D.code==="ENOENT"))throw D}Tt(G,{recursive:!0,mode:448}),Wt(G,448);let W=er(G);if(Ir(W)!==B)throw new r("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:B,repoPath:W}}function xr(e){let l=null;try{l=dr(e)}catch{}if(!l||l.isSymbolicLink()||!l.isDirectory()||l.uid!==0||l.gid!==0||(l.mode&4095)!==493)throw new r("cloud_workspace_root_invalid","This cloud Session's workspace root is not root's 0755 directory, so Reason Hands cannot use it.")}function Yd(e,l,f=process.geteuid?.(),_=process.platform){if(_==="win32")return"unknown";let w;try{if(w=dt(e),!w.isDirectory())return"unready";Pd(e,It.R_OK|It.W_OK|It.X_OK)}catch{return"unready"}try{if(dr(e).isSymbolicLink()||er(e)!==e)return"unknown"}catch{return"unknown"}if(f!==0)return"checked";if(l===null||w.uid!==l.uid||(w.mode&448)!==448)return"unknown";for(let S=Ir(e);;S=Ir(S)){let x;try{x=dt(S)}catch{return"unknown"}if(!(x.uid===l.uid?(x.mode&64)!==0:x.gid===l.gid?(x.mode&8)!==0:(x.mode&1)!==0))return"unknown";if(S===Ir(S))return"checked"}}function Xd(e,l){let f="/";for(let _ of["",...e.split("/"),...l.split("/")].filter((w,S)=>S===0||w)){if(_)f=cr(f,_);let w;try{w=dr(f)}catch{return null}if(w.uid!==0)return w.uid;if((w.mode&2)!==0&&(w.mode&512)===0&&!w.isSymbolicLink())return-1;if(w.isSymbolicLink()||!w.isDirectory())return null}return null}function Zd(e,l,f,_=process.geteuid?.(),w){if(!Zr.test(l))return null;let S,x;try{S=er(e),x=Ir(I({kind:"managed",workspaceId:l,...f?{base:f}:{},...w?{layout:w}:{}}))}catch{return null}let j=cr(S,x),R=rn(j)!==null,B=(J)=>new r("cloud_workspace_root_invalid",J),G;if(_===0){let J=Xd(S,x);if(J===null)return null;if(!R)throw new r("invalid_hands_workspace","As root, Reason Hands never prepares a workspace in folders another user owns.");G=J}else{if(!R)return null;let J,z;try{J=dr(Ir(j)),z=dr(j)}catch{return null}if(J.isSymbolicLink()||!J.isDirectory()||J.uid===0||z.uid!==0)return null;G=J.uid}let W=S;for(let J of x.split("/")){let z=cr(W,J),fe=!1;try{let ve=dr(z);fe=!ve.isSymbolicLink()&&ve.isDirectory()&&er(z)===z}catch{}if(!fe)throw B("This cloud Session's workspace root is missing or is not a real directory.");W=z}xr(j);let D;try{D=kr(j)}catch(J){if(J instanceof r)throw J;throw B("This cloud Session's workspace root changed while Reason Hands checked it.")}let re=null;try{re=dt(D.repoPath).uid}catch{}if(re!==G)throw new r("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return D}function kr(e,l=!1){let f=er(e),_=cr(f,"repo"),w;try{w=dr(_)}catch{throw new r("invalid_hands_workspace","Reason Hands repository is missing from the granted root.")}if(l){if(!/^\/var\/lib\/reason\/sessions\/[0-9a-f-]{36}$/.test(f))throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");if(an(f.slice(f.lastIndexOf("/")+1)).runtimeRoot!==f)throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");let j=er("/workspace"),R=er(_);if(j!=="/workspace"||!dt(R).isDirectory()||!R.startsWith("/workspace/"))throw new r("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:f,repoPath:R}}let S=Gs(f);if(S&&w.isSymbolicLink()){let j=er(_);if(j!==er(S)||!dt(j).isDirectory())throw new r("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:f,repoPath:j}}if(w.isSymbolicLink()||!w.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let x=er(_);if(Ir(x)!==f)throw new r("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:f,repoPath:x}}function yo(e,l,f){if(l!==void 0&&!Y(l))throw new r("invalid_hands_workspace",`Reason Hands ${f} is invalid.`);let _=wi(e,l??".");if(!Fr(e,_))throw new r("invalid_hands_workspace",`Reason Hands ${f} escapes its granted root.`);return _}function vi(e,l,f){if(et(l)){let _=er(f);return{anchor:_,target:wi(_,l),boundary:cr(_,de)}}return{anchor:e,target:yo(e,l,"folder"),boundary:e}}function Qd(e,l){if(!Fr(e,l))throw new r("invalid_hands_workspace","Reason Hands folder escapes its granted root.");let f=e;for(let _ of l.slice(e.length).split(jd).filter(Boolean)){f=cr(f,_);let w=null;try{w=dr(f)}catch(S){if(S.code!=="ENOENT")throw S}if(!w)Tt(f,{mode:448});else if(w.isSymbolicLink()||!w.isDirectory())throw new r("invalid_hands_workspace","Reason Hands folder must be made of real directories.")}}function ki(e,l){let f=er(yo(e,l.source_path,"repository"));if(!Fr(e,f)||!dt(f).isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a folder in its granted root.");return f}async function el(e,l,f,_=a()){try{let w=er(e);if(wo(vi(w,l,_).target))return;return await Zs(ki(w,f))??void 0}catch{return}}function rl(e,l,f,_,w=tl,S=a()){let x=er(e),{target:j,boundary:R,anchor:B}=vi(x,l,S);if(f&&!wo(j)){let D=ki(x,f);Qd(B,Ir(j));let re=["-c","core.hooksPath=/dev/null","-C",D];if(_)w([...re,"update-ref","--create-reflog","-m",_.note,`refs/heads/${f.branch}`,_.commit,""]);let J=_?w([...re,"worktree","add",j,f.branch]):w([...re,"worktree","add","-b",f.branch,j]);if(!_&&J.status!==0&&/already exists/.test(J.stderr)&&!wo(j))J=w([...re,"worktree","add",j,f.branch]);if(J.status!==0)throw new r(/not a git repository/i.test(J.stderr)?"workspace_not_git_repository":"workspace_worktree_failed","Reason could not create this Session's git worktree.")}let G;try{G=dr(j)}catch{throw new r("workspace_folder_missing","This Session's folder no longer exists.")}let W=er(j);if(G.isSymbolicLink()&&!Fr(R,W))throw new r("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!dt(W).isDirectory()||!Fr(R,W))throw new r("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(E(W))throw new r("protected_path","Credential and secret folders are unavailable to Sessions.");return W}function tl(e){let l=Qo();if(!l)return{status:null,stderr:"git was not found. Install Git for Windows (https://git-scm.com/download/win)."};let f=xd(l,e,{encoding:"utf8",timeout:60000,env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:["ignore","ignore","pipe"]});return{status:f.status,stderr:f.stderr??""}}function Si(e){return Sr(e)??rn(e)?.jobEnv??cr(e,"job.env")}function nl(e,l){let f=Si(e),_=dr(f);if(_.isSymbolicLink()||!_.isFile())throw new r("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");Cd(f,l),Wt(l,384)}function ol(e){if(e.workspaceMode===Br&&e.workspacePath!==void 0){let x=e.home??a(),j=rl(e.grantedRoot,e.workspacePath,e.workspaceWorktree,e.workspaceWorktreeStart,void 0,x);if(e.workspaceWorktree&&e.deviceId)ei(x,e.workspacePath,e.deviceId);return{workRoot:j,repoPath:j,workspace:{kind:"root",path:e.workspacePath},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if(e.workspaceMode===Xr)return{...kr(e.grantedRoot,e.personalWorkspace),workspace:{kind:"root"},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if(e.workspaceMode===Et||e.workspaceMode===Br){let x=dr(e.grantedRoot);if(x.isSymbolicLink()||!x.isDirectory())throw new r("invalid_hands_workspace","Reason Hands root must be a real directory.");let j=er(e.grantedRoot);return{workRoot:j,repoPath:j,workspace:{kind:"root"},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}let l=e.workspaceId??e.runId,f={kind:"managed",workspaceId:l,...e.workspaceBase?{base:e.workspaceBase}:{},...e.workspaceLayout?{layout:e.workspaceLayout}:{}},_=ie(e.grantedRoot,f,e.home).anchor,w=Zd(_,l,e.workspaceBase,void 0,e.workspaceLayout);if(w)return{...w,workspace:f,jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1,cloudSessionRoot:!0};let S=qd(l,_,e.legacyWorkspaceId,e.workspaceBase,e.workspaceLayout);return{...S,workspace:f,jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:Ir(S.workRoot),managedWorkspace:!0}}function Sn(e){let{command:l,prefix:f}=Dn(e.executablePath,e.sourceEntrypoint),_=Ue({home:Ld(),temporaryDirectory:e.temporaryDirectory,path:e.path});if(_.REASON_DEVICE_ROOT=_.ARA_DEVICE_ROOT=e.grantedRoot,_.REASON_HANDS_WORKSPACE=_.ARA_HANDS_WORKSPACE=e.workRoot,_.REASON_HANDS_REPO=_.ARA_HANDS_REPO=e.root,e.workspacePoolPath)_.REASON_HANDS_WORKSPACE_POOL=_.ARA_HANDS_WORKSPACE_POOL=e.workspacePoolPath;return{command:l,args:[...f,"__device","__hands-worker","--config",e.configPath],options:{cwd:e.root,env:_,shell:!1,stdio:[En,"ignore","pipe"]}}}var En=process.platform==="win32"?"pipe":"ignore";function ct(e,l){if(process.platform!=="win32")return e.kill(l);if(l==="SIGTERM")e.stdin?.end();else if(e.pid)$e(e.pid);return!0}function sl(e,l){let f="",_=!1,w=Date.now(),S=0,x=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled","permission_denied"].map((W)=>`hands.worker.${W}`)),j=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((W)=>["bash","read","write","edit"].map((D)=>`${W}:${D}`))]),R=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],B=["peerGeneration","socketState","closeCode"],G=new Set(["event","reason","launchId",...R,...B]);return(W)=>{for(let D of W.toString().split(/(?<=\n)/)){let re=D.endsWith(`
|
|
451
|
-
`);if(!_&&f.length+D.length<=2048)f+=D;else _=!0;if(!re)continue;let J=f;if(f="",_){_=!1;continue}try{let z=JSON.parse(J);if(!z||typeof z!=="object"||Array.isArray(z)||Object.keys(z).some((fe)=>!G.has(fe))||!x.has(z.event)||!j.has(z.reason)||z.event==="hands.worker.permission_denied"!==(typeof z.reason==="string"&&z.reason.includes(":"))||z.launchId!==e||R.some((fe)=>!Number.isSafeInteger(z[fe])||z[fe]<0)||B.some((fe)=>z[fe]!==null&&(!Number.isSafeInteger(z[fe])||z[fe]<0)))continue;if(Date.now()-w>=60000)w=Date.now(),S=0;if(S>=122)continue;S+=1,l(z)}catch{}}}}async function il(e){let l=e.now()+e.timeoutMs;while(e.now()<l){if(e.signal.aborted)throw new r("cancelled","Reason Hands start was cancelled.");if(e.spawnFailed?.()||e.child.exitCode!==null||e.child.signalCode!==null)throw new r("hands_worker_exited","Reason Hands exited before ready.");let f=on(e.path,{pid:e.child.pid??-1,launchId:e.launchId,workerVersion:O,protocolVersion:P,workerArtifactSha256:b,workerEntrypoint:T});if(f?.targetGeneration===e.targetGeneration&&f.fenceId===e.fenceId)return f;await new Promise((_)=>setTimeout(_,10))}throw new r("hands_ready_timeout","Reason Hands did not become ready.")}function al(e){let l=e.exitCode===null?void 0:Cn[e.exitCode];return{exit_code:e.exitCode,exit_signal:e.signalCode,...l?{exit_reason:l}:{}}}async function cl(e,l){let f=()=>e.exitCode===0&&e.signalCode===null;if(e.exitCode!==null||e.signalCode!==null)return f()?"stopped":"already_exited";let _=new Promise((x)=>e.once("exit",()=>x()));try{if(!ct(e,"SIGTERM"))return f()?"stopped":"unobserved"}catch{return f()?"stopped":"unobserved"}if(await gi(_,l))return f()?"stopped":"unobserved";try{ct(e,"SIGKILL")}catch{}return await gi(_,l)?"forced":"unobserved"}async function gi(e,l){let f;try{return await Promise.race([e.then(()=>!0),new Promise((_)=>{f=setTimeout(()=>_(!1),l)})])}finally{clearTimeout(f)}}function dl(e){return new Promise((l)=>{let f=!1,_=(j)=>{if(f)return;f=!0,clearTimeout(x),e.signal.removeEventListener("abort",w),e.child.off("exit",S),l(j)},w=()=>_("cancelled"),S=()=>_("exited"),x=setTimeout(()=>_("expired"),Math.max(0,e.expiresAt-e.now()));if(e.signal.addEventListener("abort",w,{once:!0}),e.child.once("exit",S),e.signal.aborted)w();else if(e.child.exitCode!==null||e.child.signalCode!==null)S()})}var ll=uo();function ul(e,l){if(!(e instanceof Error)||e instanceof r)return!1;let f=["hands_browser_driver_missing","hands_browser_driver_version_mismatch","hands_browser_executable_missing","hands_browser_unsupported_platform","hands_browser_unavailable"].includes(e.message),_=["ENOENT","EACCES","EPERM"].includes(e.code??"");if(!f&&!_)return!1;try{return dr(l),!1}catch(w){return Pt(w)&&w.code==="ENOENT"}}function fl(e){return e.sandbox_provider==="compute"&&!e.cloud_browser&&e[Ze]===Xr}function pl(e,l,f){return e===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:Nr(e,l),...f===void 0?{}:{worker_prespawned:f}}}}async function Nt(e,l={}){let f=l.logDiagnostic??((le)=>console.warn(le)),_=new Map,w=(le)=>{let he=Date.now();_.set(le,he);try{f(JSON.stringify({event:"sandbox.hands_startup",stage:le,timestampMs:he}))}catch{}};w("entered");let S=e.claimEnvironment;e.claimEnvironment=void 0;let x=l.now??Date.now,j,R=Kd(e.payload,l.now?.(),(le)=>{j=le});if(e.managedPty&&(e.managedPty.version!==1||!e.headless||!e.runtimeDirectory||![void 0,!0].includes(e.managedPty.startupVerified)||!e.deviceIdentity||!e.claimOwner||e.claimOwner.device_id!==e.deviceIdentity.deviceId||!R.environment_binding||!["darwin","linux","win32"].includes(process.platform)))throw new r("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let B=async(le)=>{let he;try{await Promise.race([le,new Promise((xe,Ke)=>{he=setTimeout(()=>Ke(new r("hands_event_delivery_unavailable","Hands event delivery did not settle within its deadline.")),Math.max(1,Math.min(l.eventDeliveryTimeoutMs??5000,5000)))})])}finally{clearTimeout(he)}},G=async(le,he)=>B(e.emitEvent(le,he));if(e.headless&&(R.cloud_browser===!0||e.managedBrowser!==void 0||R[Rt]!==void 0||R[Ze]!==void 0&&R[Ze]!==Br))throw new r("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let W=ge(),D=R[q]===void 0?null:Ot(W);if(R[q]!==void 0&&(D===null||!e.headless||!me(e.hostExecution,l.hostIdentity?.platform,l.hostIdentity?.euid)))throw new r("hands_model_jobs_egress_unavailable","This worker cannot hold its jobs to the guest egress guard; the Hands did not start.");if(R[Z]!==void 0&&!(e.headless&&me(e.hostExecution,l.hostIdentity?.platform,l.hostIdentity?.euid)))throw new r("hands_confinement_unavailable","Confined Hands need a root Linux worker in host mode.");if(R.cloud_browser&&process.platform!=="linux")throw new r("cloud_browser_target_invalid","Cloud browser is available only on a cloud machine.");let re=`${e.operationId}:${e.attemptId}`,J=R[Ze]===Et,z=e.headless||process.platform==="darwin"&&e.managedBrowser===void 0&&!R.cloud_browser&&!R.browser_egress&&(R[Ze]===void 0||R[Ze]===Br)||fl(R),fe=J?R[Rt]??"bash":null,ve=fe?qs(fe):null;if(ve)throw new r(ve,"Persistent Node REPL execution is unavailable; this benchmark profile cannot start.");let be=R[Ze],Re=e.headless===!0&&e.ownComputer!==!0?e.handsSlots??1:void 0,Fe=(l.slot??Jd).acquire(re,{exclusive:Re===1||be!==void 0&&be!==Br,...Re!==void 0&&Re>1?{limit:Re}:{},...e.headless===!0&&R[Q]!==void 0?{group:R[Q]}:{}});if(!Fe)throw new r("hands_slot_busy",Re!==void 0&&Re>1?`This Reason worker runs at most ${Re} sessions at a time.`:"This Reason Device runs one session at a time.");let qe=e.headless===!0?ji(e.runId):null,ye=null,We=null,Ve,De;try{w("browser_resolution");let le=e.headless&&l.browserExecutablePath===void 0?await jt():null,he=J||R.cloud_browser?null:l.browserExecutablePath===void 0?e.headless?le?.status==="resolved"?le.executablePath:null:await Fs(void 0,process.platform,e.managedBrowser):l.browserExecutablePath;if(!J&&!R.cloud_browser&&!z&&!he)throw new r("hands_browser_unavailable","Reason Hands requires Chrome, Edge, Brave, Chromium, or a Playwright Chromium install.");w("path_resolution");let xe;try{xe=await(l.resolvePathEnvironment??ll)()}catch{xe={path:xn(),source:"fallback"}}if(w("workspace_setup"),process.platform==="darwin"){let Qe=R[Ze]===Br&&R.workspace_path!==void 0?yo(e.root,R.workspace_worktree?R.workspace_worktree.source_path:R.workspace_path,"folder"):null;for(let fr of new Set([e.root,...Qe?[Qe]:[]]))await hs(fr)}let Le=R[Ze]===Xr||R[Ze]===Et?Ud(process.platform,l.sandboxRuntimeRoot):null,Be=e.headless&&e.runtimeDirectory?e.runtimeDirectory:Le?Le.temporaryRoot:bi();if(ye="private_runtime",e.headless&&e.runtimeDirectory){v(Be);let Qe=er(e.root);if(!je(Qe,Be))throw new r("invalid_hands_workspace","Private worker state must not overlap the granted workspace.")}if(e.headless&&e.runtimeDirectory&&(!e.deviceIdentity||!R.environment_binding))throw new r("environment_unavailable","Headless Hands requires a server-bound private environment.");if(ye="runtime_root",Le?.prepareRoot)Tt(Be,{recursive:!0,mode:457}),Wt(Be,457);ye="temporary_directory";let ke=er(Hd(cr(Be,"reason-hands-session-")));We=ke,Wt(ke,Le?.sessionMode??448);let Me=cr(ke,"hands-config.json"),rr=cr(ke,"hands-ready.json"),or=Rd(),Rr=R.target_fence_id;if(e.workspaceGrant){ye="workspace_grant",w("workspace_grant_wait");let Qe=e.workspaceGrant;await new Promise((fr,nt)=>{let _t=()=>nt(new r("cancelled","Reason Hands was cancelled."));if(e.signal.aborted){_t();return}e.signal.addEventListener("abort",_t,{once:!0}),Qe.then(fr,nt).finally(()=>e.signal.removeEventListener("abort",_t))})}ye="granted_root";let Ge=er(e.root);ye="workspace_layout";let sr=R[Ze]===Br&&R.workspace_path!==void 0&&R.workspace_worktree?await el(Ge,R.workspace_path,R.workspace_worktree):void 0,{workRoot:nr,repoPath:lr,jobEnvPath:Wr,workspacePoolPath:ln,managedWorkspace:Kr,workspace:ft,cloudSessionRoot:Ft}=ol({grantedRoot:Ge,personalWorkspace:R.personal_workspace===!0,runId:e.runId,workspaceId:R.workspace_id,legacyWorkspaceId:R.legacy_workspace_id,workspaceBase:R[Ce],workspaceLayout:R[Ae],temporaryDirectory:ke,workspaceMode:R[Ze],applicationSupportPath:l.applicationSupportPath,...R.workspace_path===void 0?{}:{workspacePath:R.workspace_path},...R.workspace_worktree?{workspaceWorktree:R.workspace_worktree}:{},...sr?{workspaceWorktreeStart:sr}:{},...e.deviceIdentity?{deviceId:e.deviceIdentity.deviceId}:{}});if(zo(nr))throw new r("folder_is_filesystem_root",`${qo(nr)}.`);let Qr="ara_device_wss";ye="jobs";let ur=e.headless&&e.runtimeDirectory?gr({runtimeDirectory:e.runtimeDirectory,root:Ge,runId:e.runId,folders:[nr,lr]}):void 0;Ve=ur?.disposeSocket;let jr=ur?os(ur):null;if(jr)try{f(JSON.stringify({event:"hands.journal_owner_retired",run_id:e.runId,reason:jr.reason,prior_executor_launch_id:jr.executorLaunchId}))}catch{}if(ur&&[nr,lr].some((Qe)=>!je(Qe,ur.journalDirectory)))throw new r("invalid_hands_workspace","A Session can't work in the folder that holds this worker's settings; start it in a project or repository inside it.");let pt=R.personal_workspace?nr.slice(nr.lastIndexOf("/")+1):void 0;if(pt&&pt!==R.workspace_id)throw new r("invalid_hands_workspace","Personal session identity does not match its Device grant.");ye="browser_socket";let Lr=R.cloud_browser?zd(R.sandbox_os,pt):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${or}`:cr(ur?ur.launchDirectory:ke,"repl.sock");ye="relay_url";let Mr=yi(new URL(R.relay_url).hostname),rt=Qr==="ara_device_wss"&&!Mr?(l.loadProxy??H)()?.url:void 0,Tr;ye="environment_owner";let Or=e.headless&&e.deviceIdentity&&R.environment_binding?ti(ke,{runId:e.runId,...e.deviceIdentity,binding:R.environment_binding,expiresAtMs:Date.parse(R.expires_at),identity:()=>Tr?.()??null}):void 0;ye="job_environment";let Dt=!Or&&ft.kind==="managed"&&Kr?cr(nr,"job.env"):null;if(Dt)try{dn(Dt,"",{mode:384,flag:"wx"})}catch(Qe){if(!(Qe instanceof Error&&("code"in Qe)&&Qe.code==="EEXIST"))throw Qe}let un={url:R.relay_url,transport:Qr,...rt===void 0?{}:{proxyUrl:rt},...e.localGithubConfinement?{localGithubConfinement:!0}:{},...R[Z]&&Or?{gitCredentialEnvironment:!0}:{},workerVersion:O,protocolVersion:P,workerArtifactSha256:b,workerEntrypoint:T,...process.platform==="win32"?{bashExecutable:se()}:{},targetGeneration:R.target_generation,fenceId:Rr,workRoot:nr,workspaceAliasPath:nr,jobEnvPath:Wr,...Or?{environmentSnapshotPath:Or.path,...e.hostExecution?{executionEnvironment:wr()}:{},environmentExpectedBinding:{runId:e.runId,...e.deviceIdentity,binding:R.environment_binding}}:Dt?{jobEnvSourcePath:Dt,workspacePoolPath:Ir(nr)}:Kr?{}:{jobEnvSourcePath:Si(nr)},repoPath:lr,replSocketPath:Lr,...R.cloud_browser?{browserRunId:e.runId}:{},readyPath:rr,launchId:or,expiresAtMs:Date.parse(R.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...ur?{managedJobs:{journalDirectory:ur.journalDirectory,scopeId:ur.scopeId},jobControlSocketPath:ur.socketPath}:{},...ur&&W?{jobsUser:{...W,...D!==null?{modelGid:D}:{}}}:{},...e.managedPty&&ur&&Or?{managedPty:{version:1,...e.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:br()}:{}}}:{},...z&&!he?{allowedTools:["bash","read","write","edit"]}:J?{allowedTools:fe==="bash"?["bash"]:["bash","repl"]}:{}};if(Or||Kr&&!Dt)dn(Wr,"",{mode:384});else nl(nr,Wr);ye="config_write",dn(Me,JSON.stringify(un),{mode:384}),ye=null;let tt={session_id:R.session_id,environment_id:R.environment_id,hands_protocol_version:P,hands_worker_version:O,hands_worker_artifact_sha256:b,hands_worker_entrypoint:T,target_generation:R.target_generation,target_fence_id:R.target_fence_id,executor_launch_id:or},Ut=null,vo=!1,ko=!1,So,pr=null,Eo,Ro,zt="failed",Oo=null,fn=Promise.resolve(),xo=null,pn=async(Qe,fr)=>{try{await G(Qe,fr)}catch{}};try{w("event_started");let Qe,fr=(async()=>{await e.emitEvent("hands.started",{...tt,policy_mode:"full_access",policy_version:1,path_source:xe.source}),Qe=Date.now()})();fr.catch(()=>{return}),w("worker_setup");let nt=R.browser_egress?{mode:"enforce",allowedDomains:R.browser_egress.allowed_domains}:{mode:"off"};if(fe&&fe!=="bash")Ut=await(l.startNodeRepl??ui)({socketPath:Lr,workRoot:nr});else if(!J&&!R.cloud_browser&&he)Ut=await(l.startRepl??Us)({socketPath:Lr,browserExecutablePath:he,workspaceRoot:lr,...e.managedBrowser?{managedBrowser:e.managedBrowser}:{},...e.desktopRecording?{recording:e.desktopRecording}:{},networkPolicy:nt,onEgressDenied:(Ne)=>{let Hr=Js(Ne.host);f(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:Hr,reason:Ne.reason,run_id:e.runId})),fn=fn.then(()=>G("hands.browser_egress_denied",{destination_id:Hr,reason:Ne.reason})).catch((Gt)=>{xo??=Gt})}}).catch((Ne)=>{if(!z||e.signal.aborted||x()>=Date.parse(R.expires_at)||!ul(Ne,Lr))throw Ne;return Object.assign(un,{allowedTools:["bash","read","write","edit"]}),dn(Me,JSON.stringify(un),{mode:384}),ko=!0,null});let _t=Sn({configPath:Me,root:lr,grantedRoot:Ge,workRoot:nr,workspacePoolPath:ln,temporaryDirectory:ke,path:xe.path,executablePath:l.executablePath,sourceEntrypoint:l.sourceEntrypoint}),_n=Date.now(),mn,Po,hn=l.takePrespawnedWorker?.(_t)??null;if(So=l.takePrespawnedWorker?hn!==null:void 0,pr=hn??(l.spawnWorker??((Ne)=>Od(Ne.command,Ne.args,Ne.options)))(_t),!hn)l.adoptSpawnedWorker?.(pr);pr.stderr?.on("data",sl(or,(Ne)=>{if(Ne.event==="hands.worker.connecting")mn??=Ne.timestampMs;else if(Ne.event==="hands.worker.open")Po??=Ne.timestampMs;if(f(JSON.stringify({...Ne,run_id:e.runId})),Ne.event==="hands.worker.permission_denied"&&typeof Ne.reason==="string"){let[Hr,Gt]=Ne.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(Hr??"")&&["bash","read","write","edit"].includes(Gt??""))G("permission.denied",{provenance:Hr,operation:Gt}).catch(()=>{return})}}));let Ao=!1;pr.on("error",()=>{Ao=!0}),pr.once("exit",(Ne,Hr)=>{try{f(JSON.stringify({event:"hands.worker.exited",run_id:e.runId,launchId:or,exit_code:Ne,exit_signal:Hr}))}catch{}}),De=pr,w("worker_ready_wait");let Ct=await il({path:rr,launchId:or,fenceId:Rr,targetGeneration:R.target_generation,child:pr,spawnFailed:()=>Ao,signal:e.signal,timeoutMs:l.readyTimeoutMs??Md,now:x}),Ei=Date.now();if(Tr=()=>{if(!pr||pr.exitCode!==null||pr.signalCode!==null)return null;let Ne=on(rr,Ct);return Ne?{generation:Ne.targetGeneration,fenceId:Ne.fenceId}:null},ur){let Ne={root:Ge,runId:e.runId,operationId:e.operationId,scopeId:ur.scopeId,socketPath:ur.socketPath,generation:Ct.targetGeneration,fenceId:Ct.fenceId,executorLaunchId:or,expiresAtMs:Date.parse(R.expires_at),readIdentity:Tr,workspace:ft,localGithubConfinement:e.localGithubConfinement===!0};if(Or)Ne.environment=Or;if(e.claimOwner&&e.deviceIdentity&&e.claimOwner.device_id===e.deviceIdentity.deviceId){let Hr=[e.deviceIdentity.apiOrigin,R.relay_url];if(rt)Hr.push(rt);Ne.previewAuthority={owner:Object.freeze({...e.claimOwner}),rootId:e.deviceIdentity.rootId,relayOrigin:new URL(R.relay_url).origin,deniedPorts:mr(Hr)}}Ro=ss(Ne)}if(await new Promise((Ne)=>{setImmediate(Ne)}),Ft)xr(nr);let Kt;if(S&&Or){try{let Ne=Or.install(S);Kt={snapshot_id:Ne.snapshot_id,installed_revision:Ne.installed_revision}}catch{}try{f(JSON.stringify({event:"hands.environment_at_claim",run_id:e.runId,installed:Kt!==void 0}))}catch{}}S=void 0;let To=!1;if(e.headless){let Ne=Yd(lr,W);try{f(JSON.stringify({event:"hands.workspace_check",run_id:e.runId,outcome:Ne}))}catch{}if(Ne==="unready")throw new r("hands_workspace_unready","This Session's checkout is not a readable, writable directory at its own path, so Reason Hands cannot use it.");To=Ne==="checked"}w("event_ready");let Do=B(fr);Do.catch(()=>{return});let Co=Date.now();vo=!0,await G("hands.ready",{...tt,expiry_diagnostic:j,startup_stages:{version:1,browser_resolution_ms:Nr(_.get("browser_resolution"),_.get("path_resolution")),path_resolution_ms:Nr(_.get("path_resolution"),_.get("workspace_setup")),workspace_setup_ms:Nr(_.get("workspace_setup"),_.get("event_started")),repl_setup_ms:Nr(_.get("worker_setup"),_n),worker_boot_ms:Nr(_n,mn),worker_dial_ms:Nr(mn,Po),worker_ready_ms:Nr(_n,Ei),started_event_ms:Nr(_.get("event_started"),Qe),started_join_wait_ms:Nr(_.get("event_ready"),Co),total_ms:Nr(_.get("entered"),Co)},...pl(e.claimedAtMs,_.get("entered"),So),...e.managedPty?.startupVerified===!0?{managed_pty:{version:1,execution_mode:"host",descendant_cleanup_verified:!0}}:{},policy_mode:"full_access",policy_version:1,path_source:xe.source,connection_generation:Ct.generation,...Kt?{environment_installed:Kt}:{},...To?{workspace_checked:!0}:{},...z&&!Ut?{browser_state:"unavailable",browser_reason_code:ko?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await Do,w("ready"),Eo=ci({path:rr,initial:Ct,signal:e.signal,isAlive:()=>pr!==null&&pr.exitCode===null&&pr.signalCode===null&&x()<Date.parse(R.expires_at),publish:(Ne,Hr)=>e.emitEvent("hands.reconnected",{...tt,target_generation:Ne.targetGeneration,target_fence_id:Ne.fenceId,connection_generation:Ne.generation},Hr),failed:()=>f(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:e.runId,executor_launch_id:or}))});let Ho=await dl({child:pr,signal:e.signal,expiresAt:Date.parse(R.expires_at),now:x});if(Ho==="cancelled"){let Ne=e.signal.reason instanceof r?e.signal.reason.code:"cancelled";throw zt=Ne,new r(Ne,"Reason Hands was cancelled.")}if(Ho==="exited")throw new r("hands_worker_exited","Reason Hands exited unexpectedly.");return zt="expired",{...tt,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(Qe){Oo=Qe;let fr=Qe instanceof r?Qe.code:"hands_failed",nt=fr==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(fr);if(zt=nt?fr:"failed",!nt)await pn("hands.failed",{...tt,reason_code:fr,...fr==="hands_worker_exited"&&pr?al(pr):{}});throw Qe}finally{Eo?.stop(),Ro?.();let Qe=pr?await cl(pr,l.stopTimeoutMs??Wd):null,fr=!1;await e.desktopRecording?.close();try{await Ut?.stop()}catch{fr=!0}if(await fn,(Qe==="stopped"||Qe==="already_exited"&&!vo)&&!fr)await pn("hands.stopped",{...tt,reason_code:zt});else if(Qe!==null||fr){if(await pn("hands.failed",{...tt,reason_code:Qe==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),Oo===null||fr)throw new r("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(xo!==null)throw new r("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(le){let he=zs(ye,le);if(he)try{f(JSON.stringify({event:"sandbox.hands_workspace_failed",...he}))}catch{}throw le}finally{try{if(!De||De.exitCode!==null||De.signalCode!==null)Ve?.();if(We!==null&&(!De||De.exitCode!==null||De.signalCode!==null))Nd(We,{recursive:!0,force:!0})}finally{qe?.(),Fe()}}}
|
|
447
|
+
`);_d(f,w,{mode:384});let S=!1;return{command:"/usr/bin/sandbox-exec",args:["-f",f,e.nodeExecutable,...e.nodeArgs],cwd:e.workRoot,env:{...e.environment,TMPDIR:l},async cleanup(){if(S)return;S=!0,fd(l,{recursive:!0,force:!0})}}}async function kd(e){let l=ud(e.workRoot),f=e.nodeExecutable??yd(),_=["--max-old-space-size=512","--permission",`--allow-fs-read=${l}`,`--allow-fs-write=${l}`,"-e",wd],w=Ue({home:l,temporaryDirectory:l}),S=e.platformName??hd();if(S==="linux")return{command:f,args:_,cwd:l,env:w,async cleanup(){}};if(S==="darwin")return vd({nodeExecutable:f,nodeArgs:_,workRoot:l,environment:w});throw Error("hands_node_repl_platform_unsupported")}async function Mt(e){let l;try{await Promise.race([e,new Promise((f,_)=>{l=setTimeout(()=>_(Error("hands_node_repl_child_cleanup_timeout")),bd)})])}finally{clearTimeout(l)}}async function ui(e){if(e.executionMode!=="single-evaluation")throw Error(Vs);let l=await kd(e),f;try{f=cd(l.command,l.args,{cwd:l.cwd,env:l.env,stdio:["pipe","pipe","pipe"]})}catch(be){throw await l.cleanup(),be}let _=new Promise((be)=>f.once("close",()=>be())),w;f.once("error",(be)=>{w=be});let S=!1,x=!1,W="";f.stderr.setEncoding("utf8"),f.stderr.on("data",(be)=>{W=`${W}${be}`.slice(-16384)});let R=f.stdout,B,G=(be,Re,Fe)=>{if(Fe)be.failure??=Fe;if(be.finishing)return;be.finishing=!0,x=!0,f.kill("SIGKILL"),Mt(_).then(()=>{if(be.failure)be.reject(be.failure);else be.resolve(Re??{})},(Xe)=>be.reject(Xe))},U=()=>{if(x=!0,B)G(B,void 0,Error("hands_node_repl_state_lost"));else f.kill("SIGKILL")},D="";R?.setEncoding("utf8"),R?.on("data",(be)=>{if(B?.finishing||x)return;if(D+=be,D.length>li){U();return}while(!0){let Re=D.indexOf(`
|
|
448
|
+
`);if(Re===-1)return;let Fe=D.slice(0,Re);D=D.slice(Re+1);let Xe=B;if(!Xe){U();return}try{let ye=JSON.parse(Fe);if(Xe.action==="probe")Xe.resolve(ye);else{G(Xe,ye);return}}catch{G(Xe,void 0,Error("invalid_hands_node_repl_child_response"));return}}});let re=(be)=>{let Re=W.trim(),Fe=be??Error(Re?`hands_node_repl_child_exited:${Re}`:"hands_node_repl_child_exited");if(x=!0,B&&!B.finishing)G(B,void 0,Fe)};f.once("error",re),f.once("close",()=>re()),f.stdin.on("error",re);let J=(be)=>new Promise((Re,Fe)=>{if(S||x||f.exitCode!==null||f.signalCode!==null){Fe(Error(x?"hands_node_repl_state_lost":"hands_node_repl_stopped"));return}let Xe=setTimeout(U,be.action==="probe"?1e4:Math.max(1,Math.min(e.evaluationTimeoutMs??_o-1000,_o-1000))),ye={action:be.action,finishing:!1,resolve(We){if(B===ye)B=void 0;clearTimeout(Xe),Re(We)},reject(We){if(B===ye)B=void 0;clearTimeout(Xe),Fe(We)}};B=ye,f.stdin.write(`${JSON.stringify(be)}
|
|
449
|
+
`,(We)=>{if(!We)return;G(ye,void 0,We)})});try{if(!R){if(f.pid===void 0)await Mt(_);throw w??Error("hands_node_repl_control_pipe_missing")}let be=await J({action:"probe"});if(be.ok!==!0||be.output!=="ARA_HANDS_REPL_READY")throw Error("hands_node_repl_probe_failed")}catch(be){S=!0,f.kill("SIGKILL");try{await Mt(_)}finally{await l.cleanup()}throw be}let z=Promise.resolve(),fe=new Set;Qn(e.socketPath);let ke=md.createServer((be)=>{fe.add(be),be.once("close",()=>fe.delete(be)),be.setEncoding("utf8");let Re="",Fe=!1,Xe=!1;be.once("close",()=>{if(Xe)U()}),be.on("error",()=>be.destroy()),be.on("data",(ye)=>{if(Fe)return;if(Re+=ye,Re.length>li){Fe=!0,sn(be,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let We=Re.indexOf(`
|
|
450
|
+
`);if(We===-1)return;Fe=!0;let Ye=Re.slice(0,We);z=z.then(async()=>{if(be.destroyed)return;try{let De=JSON.parse(Ye);if(De.action!=="evaluate"||typeof De.code!=="string")throw Error("Invalid REPL request");Xe=!0;let le=await J({action:"evaluate",code:De.code});if(Xe=!1,le.ok!==!0||typeof le.output!=="string")throw Error(typeof le.error==="string"?le.error:"hands_node_repl_failed");sn(be,{ok:!0,output:le.output})}catch(De){Xe=!1,sn(be,{ok:!1,error:De instanceof Error?De.message:String(De),stack:De instanceof Error?De.stack:void 0})}}).catch((De)=>{sn(be,{ok:!1,error:De instanceof Error?De.message:String(De)})})})});try{await new Promise((be,Re)=>{ke.once("error",Re),ke.listen(e.socketPath,()=>{ke.off("error",Re);try{dd(e.socketPath,384),be()}catch(Fe){ke.close(()=>Re(Fe))}})})}catch(be){S=!0,f.kill("SIGKILL");try{await Mt(_)}finally{await l.cleanup(),Qn(e.socketPath)}throw be}return{socketPath:e.socketPath,async stop(){if(S)return;S=!0;let be=new Promise((Re)=>ke.close(()=>Re()));for(let Re of fe)Re.destroy();await be,z.catch(()=>{return}),U();try{await Mt(_)}finally{await l.cleanup(),Qn(e.socketPath)}}}}var ho=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var fi="/workspace",pi="/var/lib/reason/sessions",Sd="/var/lib/reason/session-controls";function Sr(e){let l=`${pi}/`;if(!e.startsWith(l))return null;let f=e.slice(l.length);if(!ho.test(f)||f!==f.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${Sd}/${f}/job.env`}function Ed(e){if(!ho.test(e))throw Error("personal_computer_invalid_identity");return e.toLowerCase()}function an(e){let l=Ed(e);return{runtimeRoot:`${pi}/${l}`,workspaceRoot:`${fi}/sessions/${l}`,sharedRoot:fi}}var _i="/root/.ara/cloud-browser/repl.sock";function bo(e){return e==="compute"}function mi(e,l,f="linux"){if(e)an(e);if(f!=="linux")throw Error("cloud_browser_os_invalid");if(l!==void 0&&(!e||!/^[1-9][0-9]{0,18}$/.test(l)))throw Error("cloud_browser_generation_invalid");let _=e?`/var/lib/reason/browsers/${e.toLowerCase()}`:"/root/.ara/cloud-browser",w=e?`${_}/${l?`g${l}`:"current"}`:_,S=e?`/root/.b/${e.toLowerCase().replaceAll("-","")}`:_;return{temporarySessionDirectory:S,temporaryDirectory:e?`${S}/${l??"current"}`:`${w}/tmp`,directory:w,sessionDirectory:_,config:`${w}/config.json`,status:`${w}/status.json`,socket:`${w}/repl.sock`,bundle:`${w}/driver.mjs`,processName:e?`ara-browser-${e.toLowerCase()}${l?`-${l}`:""}`:"ara-cloud-browser"}}var wo="browser_egress",hi=ds,Md=45000,Wd=Kt+1500,Zr=/^[A-Za-z0-9._:-]{1,160}$/,Fd="/run/ara-hands";function Ud(e,l,f=bi()){if(e==="darwin")return{temporaryRoot:f,prepareRoot:!1,sessionMode:448};return{temporaryRoot:l??Fd,prepareRoot:!0,sessionMode:457}}function me(e,l=process.platform,f=process.geteuid?.()){return e===!0&&l==="linux"&&f===0}function ge(e=K(),l=process.platform,f=process.geteuid?.()){return e&&l==="linux"&&f===0?{uid:e.uid,gid:e.gid,home:e.home,username:e.username}:null}function Ot(e=ge(),l=Ks){return e&&l()?qn:null}function zd(e,l){if(!l&&(e??"linux")==="linux")return _i;return mi(l,void 0,e??"linux").socket}function Pt(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function yi(e){let l=e.toLowerCase().replace(/^\[|\]$/g,"");return l==="localhost"||l.endsWith(".localhost")||l==="::1"||l==="0:0:0:0:0:0:0:1"||l==="0.0.0.0"||l.startsWith("127.")}class Er extends r{expiryDiagnostic;constructor(e){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=e}}function $d(e){return Pt(e)&&Object.keys(e).every((l)=>l==="source_path"||l==="branch")&&(e.source_path===void 0||Y(e.source_path))&&typeof e.branch==="string"&&Yn.test(e.branch)}function Kd(e,l,f){let _=l===void 0?Date.now():l,w=["relay_url","session_id","environment_id","expires_at","policy_mode","policy_version","hands_protocol_version","hands_worker_version","hands_worker_artifact_sha256","hands_worker_entrypoint","target_generation","target_fence_id"],S=new Set([...w,"workspace_id","legacy_workspace_id",Ce,Ae,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",Ze,wo,Rt,Q,Z,q]),x=Pt(e)?e:null,W=x?.[wo],R=x?.[Rt],B=x?.[Z],G=W===void 0||(x?.[Ze]===Xr||B===pe&&x?.[Ze]===void 0)&&Pt(W)&&Object.keys(W).every((ke)=>ke==="mode"||ke==="allowed_domains")&&W.mode==="enforce"&&Array.isArray(W.allowed_domains)&&W.allowed_domains.length<=256&&W.allowed_domains.every((ke)=>typeof ke==="string"&&Bn(ke));if(!Pt(e)||w.some((ke)=>!(ke in e))||Object.keys(e).some((ke)=>!S.has(ke))||!G||B!==void 0&&B!==pe||x?.[q]!==void 0&&x[q]!==Te||x?.personal_workspace!==void 0&&(x.personal_workspace!==!0||x[Ze]!==Xr)||x?.cloud_browser!==void 0&&(x.cloud_browser!==!0||x[Ze]!==Xr)||x?.sandbox_provider!==void 0&&!bo(x.sandbox_provider)||x?.sandbox_os!==void 0&&x.sandbox_os!=="linux"||R!==void 0&&(x?.[Ze]!==Et||!Ys(R))||Ze in e&&e[Ze]!==Xr&&e[Ze]!==Et&&e[Ze]!==Mr||e.workspace_path!==void 0&&(!Y(e.workspace_path)||e[Ze]!==Mr)||e.workspace_worktree!==void 0&&(e.workspace_path===void 0||!$d(e.workspace_worktree))||typeof e.relay_url!=="string"||typeof e.session_id!=="string"||!Zr.test(e.session_id)||e.workspace_id!==void 0&&(typeof e.workspace_id!=="string"||!Zr.test(e.workspace_id))||e.legacy_workspace_id!==void 0&&(typeof e.legacy_workspace_id!=="string"||!Zr.test(e.legacy_workspace_id))||e[Ce]!==void 0&&(e[Ce]!==ue||(Ze in e))||e[Ae]!==void 0&&(e[Ae]!==X||(Ze in e))||e[Q]!==void 0&&(typeof e[Q]!=="string"||!Zr.test(e[Q]))||typeof e.environment_id!=="string"||!Zr.test(e.environment_id)||typeof e.expires_at!=="string"||e.policy_mode!=="full_access"||e.policy_version!==1||e.hands_protocol_version!==P||e.hands_worker_version!==O||e.hands_worker_artifact_sha256!==b||!oi(e.hands_worker_entrypoint)||!H(e.target_generation)||!L(e.target_fence_id))throw new r("invalid_hands_payload","Reason Hands connection payload is invalid.");let U;try{U=new URL(e.relay_url)}catch{throw new r("invalid_hands_relay","Reason Hands relay URL is invalid.")}if((yi(U.hostname)?U.protocol!=="ws:":U.protocol!=="wss:")||U.username||U.password||U.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(U.pathname))throw new r("invalid_hands_relay","Reason Hands relay URL is not allowed.");let re=Date.parse(e.expires_at),J=Number.isNaN(re)?"parse":new Date(re).toISOString()!==e.expires_at?"noncanonical":re<=_?"expired":re-_>hi?"over_cap":"accepted",z={version:1,outcome:J,clock_source:l===void 0?"date_now":"injected",validation_now_ms:wt(_),expiry_ms:wt(re),remaining_ms:Number.isSafeInteger(re-_)?re-_:null,maximum_lifetime_ms:hi,cli_artifact:si()};if(J!=="accepted")throw new Er(z);try{f?.(z)}catch{}let fe=e.environment_binding===void 0?void 0:Tn.safeParse(e.environment_binding);if(fe&&!fe.success)throw new r("invalid_hands_request","Reason Hands environment binding is invalid.");return{...e.cloud_browser===!0?{cloud_browser:!0}:{},...bo(e.sandbox_provider)?{sandbox_provider:e.sandbox_provider}:{},...e.sandbox_os==="linux"?{sandbox_os:e.sandbox_os}:{},...e.personal_workspace===!0?{personal_workspace:!0}:{},relay_url:U.toString(),...fe?.success?{environment_binding:fe.data}:{},session_id:e.session_id,...e.workspace_id===void 0?{}:{workspace_id:e.workspace_id},...e.legacy_workspace_id===void 0?{}:{legacy_workspace_id:e.legacy_workspace_id},...e[Ce]===ue?{[Ce]:ue}:{},...e[Ae]===X?{[Ae]:X}:{},...typeof e[Q]==="string"?{[Q]:e[Q]}:{},...e[Z]===pe?{[Z]:pe}:{},...e[q]===Te?{[q]:Te}:{},...typeof e.workspace_path==="string"?{workspace_path:e.workspace_path}:{},...Pt(e.workspace_worktree)?{workspace_worktree:{...typeof e.workspace_worktree.source_path==="string"?{source_path:e.workspace_worktree.source_path}:{},branch:String(e.workspace_worktree.branch)}}:{},environment_id:e.environment_id,expires_at:e.expires_at,policy_mode:"full_access",policy_version:1,hands_protocol_version:P,hands_worker_version:O,hands_worker_artifact_sha256:b,hands_worker_entrypoint:T,target_generation:e.target_generation,target_fence_id:e.target_fence_id,...Ze in e?{[Ze]:e[Ze]}:{},...R===void 0?{}:{[Rt]:R},...W===void 0?{}:{[wo]:{mode:"enforce",allowed_domains:[...new Set(W.allowed_domains)].sort()}}}}function Gd(){let e=new Map;return{acquire(l,f){if(e.has(l))return null;let _=[...e.values()],w=(x)=>f.group!==void 0&&x.group===f.group;if(f.exclusive?!_.every(w):_.some((x)=>x.exclusive))return null;if(f.limit!==void 0&&!_.some(w)&&new Set(_.map((x,W)=>x.group??W)).size>=f.limit)return null;e.set(l,f);let S=!1;return()=>{if(S)return;S=!0,e.delete(l)}},activeOwners:()=>[...e.keys()]}}var Jd=Gd();function Vd(e,l){Tt(e,{recursive:!0,mode:448});let f=er(e),_=()=>new r("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let x of l.split("/")){let W=cr(f,x);try{let B=dr(W);if(B.isSymbolicLink()||!B.isDirectory())throw _()}catch(B){if(!(B&&typeof B==="object"&&("code"in B)&&B.code==="ENOENT"))throw B;try{Tt(W,{mode:448})}catch(G){if(!(G&&typeof G==="object"&&("code"in G)&&G.code==="EEXIST"))throw G}}let R=dr(W);if(R.isSymbolicLink()||!R.isDirectory()||er(W)!==W)throw _();f=W}if(process.platform==="win32"){let x=dr(f);if(x.isSymbolicLink()||!x.isDirectory()||er(f)!==f||!zr(er(e),f))throw _();return f}let w=dr(f),S=Dd(f,It.O_RDONLY|It.O_DIRECTORY|It.O_NOFOLLOW);try{let x=Td(S);if(!x.isDirectory()||x.dev!==w.dev||x.ino!==w.ino||er(f)!==f)throw _();Ad(S,448)}finally{Id(S)}return f}function qd(e,l=Vo(),f,_,w){if(!Zr.test(e)||f!==void 0&&!Zr.test(f))throw new r("invalid_hands_workspace","Reason Hands run identity is invalid.");let S=Ir(I({kind:"managed",workspaceId:e,..._?{base:_}:{},...w?{layout:w}:{}})),x=Vd(l,Ir(S)),W=cr(x,Bd(S)),R=!1;try{let D=dr(W);if(R=!0,D.isSymbolicLink())throw new r("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!D.isDirectory())throw new r("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(D){if(D instanceof r||!(D&&typeof D==="object"&&("code"in D)&&D.code==="ENOENT"))throw D}if(w&&!R)try{let D=cr(er(l),Ir(I({kind:"managed",workspaceId:e,..._?{base:_}:{}}))),re=dr(D);if(!re.isSymbolicLink()&&re.isDirectory()&&er(D)===D)cn(D,W),R=!0}catch{}if(f&&f!==e){let D=cr(x,f);try{let re=dr(D);if(re.isSymbolicLink()||!re.isDirectory())throw new r("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let J=er(D);if(Ir(J)!==x)throw new r("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let z=null;if(R){for(let fe=1;fe<=1000&&!z;fe++){let ke=cr(x,fe===1?`.${e}.previous`:`.${e}.previous.${fe}`);try{dr(ke)}catch(be){if(!(be&&typeof be==="object"&&("code"in be)&&be.code==="ENOENT"))throw be;z=ke}}if(!z)throw new r("invalid_hands_workspace","Reason Hands has too many previous workspace backups.");cn(W,z)}try{cn(J,W)}catch(fe){if(z)cn(z,W);throw fe}R=!0}catch(re){if(re instanceof r||!(re&&typeof re==="object"&&("code"in re)&&re.code==="ENOENT"))throw re}}Tt(W,{recursive:!0,mode:448}),Wt(W,448);let B=er(W);if(Ir(B)!==x)throw new r("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let G=cr(B,"repo");try{let D=dr(G);if(D.isSymbolicLink()||!D.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(D){if(D instanceof r||!(D&&typeof D==="object"&&("code"in D)&&D.code==="ENOENT"))throw D}Tt(G,{recursive:!0,mode:448}),Wt(G,448);let U=er(G);if(Ir(U)!==B)throw new r("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:B,repoPath:U}}function xr(e){let l=null;try{l=dr(e)}catch{}if(!l||l.isSymbolicLink()||!l.isDirectory()||l.uid!==0||l.gid!==0||(l.mode&4095)!==493)throw new r("cloud_workspace_root_invalid","This cloud Session's workspace root is not root's 0755 directory, so Reason Hands cannot use it.")}function Yd(e,l,f=process.geteuid?.(),_=process.platform){if(_==="win32")return"unknown";let w;try{if(w=dt(e),!w.isDirectory())return"unready";Pd(e,It.R_OK|It.W_OK|It.X_OK)}catch{return"unready"}try{if(dr(e).isSymbolicLink()||er(e)!==e)return"unknown"}catch{return"unknown"}if(f!==0)return"checked";if(l===null||w.uid!==l.uid||(w.mode&448)!==448)return"unknown";for(let S=Ir(e);;S=Ir(S)){let x;try{x=dt(S)}catch{return"unknown"}if(!(x.uid===l.uid?(x.mode&64)!==0:x.gid===l.gid?(x.mode&8)!==0:(x.mode&1)!==0))return"unknown";if(S===Ir(S))return"checked"}}function Xd(e,l){let f="/";for(let _ of["",...e.split("/"),...l.split("/")].filter((w,S)=>S===0||w)){if(_)f=cr(f,_);let w;try{w=dr(f)}catch{return null}if(w.uid!==0)return w.uid;if((w.mode&2)!==0&&(w.mode&512)===0&&!w.isSymbolicLink())return-1;if(w.isSymbolicLink()||!w.isDirectory())return null}return null}function Zd(e,l,f,_=process.geteuid?.(),w){if(!Zr.test(l))return null;let S,x;try{S=er(e),x=Ir(I({kind:"managed",workspaceId:l,...f?{base:f}:{},...w?{layout:w}:{}}))}catch{return null}let W=cr(S,x),R=rn(W)!==null,B=(J)=>new r("cloud_workspace_root_invalid",J),G;if(_===0){let J=Xd(S,x);if(J===null)return null;if(!R)throw new r("invalid_hands_workspace","As root, Reason Hands never prepares a workspace in folders another user owns.");G=J}else{if(!R)return null;let J,z;try{J=dr(Ir(W)),z=dr(W)}catch{return null}if(J.isSymbolicLink()||!J.isDirectory()||J.uid===0||z.uid!==0)return null;G=J.uid}let U=S;for(let J of x.split("/")){let z=cr(U,J),fe=!1;try{let ke=dr(z);fe=!ke.isSymbolicLink()&&ke.isDirectory()&&er(z)===z}catch{}if(!fe)throw B("This cloud Session's workspace root is missing or is not a real directory.");U=z}xr(W);let D;try{D=kr(W)}catch(J){if(J instanceof r)throw J;throw B("This cloud Session's workspace root changed while Reason Hands checked it.")}let re=null;try{re=dt(D.repoPath).uid}catch{}if(re!==G)throw new r("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return D}function kr(e,l=!1){let f=er(e),_=cr(f,"repo"),w;try{w=dr(_)}catch{throw new r("invalid_hands_workspace","Reason Hands repository is missing from the granted root.")}if(l){if(!/^\/var\/lib\/reason\/sessions\/[0-9a-f-]{36}$/.test(f))throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");if(an(f.slice(f.lastIndexOf("/")+1)).runtimeRoot!==f)throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");let W=er("/workspace"),R=er(_);if(W!=="/workspace"||!dt(R).isDirectory()||!R.startsWith("/workspace/"))throw new r("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:f,repoPath:R}}let S=Gs(f);if(S&&w.isSymbolicLink()){let W=er(_);if(W!==er(S)||!dt(W).isDirectory())throw new r("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:f,repoPath:W}}if(w.isSymbolicLink()||!w.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let x=er(_);if(Ir(x)!==f)throw new r("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:f,repoPath:x}}function vo(e,l,f){if(l!==void 0&&!Y(l))throw new r("invalid_hands_workspace",`Reason Hands ${f} is invalid.`);let _=wi(e,l??".");if(!zr(e,_))throw new r("invalid_hands_workspace",`Reason Hands ${f} escapes its granted root.`);return _}function vi(e,l,f){if(et(l)){let _=er(f);return{anchor:_,target:wi(_,l),boundary:cr(_,de)}}return{anchor:e,target:vo(e,l,"folder"),boundary:e}}function Qd(e,l){if(!zr(e,l))throw new r("invalid_hands_workspace","Reason Hands folder escapes its granted root.");let f=e;for(let _ of l.slice(e.length).split(jd).filter(Boolean)){f=cr(f,_);let w=null;try{w=dr(f)}catch(S){if(S.code!=="ENOENT")throw S}if(!w)Tt(f,{mode:448});else if(w.isSymbolicLink()||!w.isDirectory())throw new r("invalid_hands_workspace","Reason Hands folder must be made of real directories.")}}function ki(e,l){let f=er(vo(e,l.source_path,"repository"));if(!zr(e,f)||!dt(f).isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a folder in its granted root.");return f}async function el(e,l,f,_=a()){try{let w=er(e);if(yo(vi(w,l,_).target))return;return await Zs(ki(w,f))??void 0}catch{return}}function rl(e,l,f,_,w=tl,S=a()){let x=er(e),{target:W,boundary:R,anchor:B}=vi(x,l,S);if(f&&!yo(W)){let D=ki(x,f);Qd(B,Ir(W));let re=["-c","core.hooksPath=/dev/null","-C",D];if(_)w([...re,"update-ref","--create-reflog","-m",_.note,`refs/heads/${f.branch}`,_.commit,""]);let J=_?w([...re,"worktree","add",W,f.branch]):w([...re,"worktree","add","-b",f.branch,W]);if(!_&&J.status!==0&&/already exists/.test(J.stderr)&&!yo(W))J=w([...re,"worktree","add",W,f.branch]);if(J.status!==0)throw new r(/not a git repository/i.test(J.stderr)?"workspace_not_git_repository":"workspace_worktree_failed","Reason could not create this Session's git worktree.")}let G;try{G=dr(W)}catch{throw new r("workspace_folder_missing","This Session's folder no longer exists.")}let U=er(W);if(G.isSymbolicLink()&&!zr(R,U))throw new r("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!dt(U).isDirectory()||!zr(R,U))throw new r("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(E(U))throw new r("protected_path","Credential and secret folders are unavailable to Sessions.");return U}function tl(e){let l=Qo();if(!l)return{status:null,stderr:"git was not found. Install Git for Windows (https://git-scm.com/download/win)."};let f=xd(l,e,{encoding:"utf8",timeout:60000,env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:["ignore","ignore","pipe"]});return{status:f.status,stderr:f.stderr??""}}function Si(e){return Sr(e)??rn(e)?.jobEnv??cr(e,"job.env")}function nl(e,l){let f=Si(e),_=dr(f);if(_.isSymbolicLink()||!_.isFile())throw new r("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");Cd(f,l),Wt(l,384)}function ol(e){if(e.workspaceMode===Mr&&e.workspacePath!==void 0){let x=e.home??a(),W=rl(e.grantedRoot,e.workspacePath,e.workspaceWorktree,e.workspaceWorktreeStart,void 0,x);if(e.workspaceWorktree&&e.deviceId)ei(x,e.workspacePath,e.deviceId);return{workRoot:W,repoPath:W,workspace:{kind:"root",path:e.workspacePath},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if(e.workspaceMode===Xr)return{...kr(e.grantedRoot,e.personalWorkspace),workspace:{kind:"root"},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if(e.workspaceMode===Et||e.workspaceMode===Mr){let x=dr(e.grantedRoot);if(x.isSymbolicLink()||!x.isDirectory())throw new r("invalid_hands_workspace","Reason Hands root must be a real directory.");let W=er(e.grantedRoot);return{workRoot:W,repoPath:W,workspace:{kind:"root"},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}let l=e.workspaceId??e.runId,f={kind:"managed",workspaceId:l,...e.workspaceBase?{base:e.workspaceBase}:{},...e.workspaceLayout?{layout:e.workspaceLayout}:{}},_=ie(e.grantedRoot,f,e.home).anchor,w=Zd(_,l,e.workspaceBase,void 0,e.workspaceLayout);if(w)return{...w,workspace:f,jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1,cloudSessionRoot:!0};let S=qd(l,_,e.legacyWorkspaceId,e.workspaceBase,e.workspaceLayout);return{...S,workspace:f,jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:Ir(S.workRoot),managedWorkspace:!0}}function Sn(e){let{command:l,prefix:f}=Dn(e.executablePath,e.sourceEntrypoint),_=Ue({home:Ld(),temporaryDirectory:e.temporaryDirectory,path:e.path});if(_.REASON_DEVICE_ROOT=_.ARA_DEVICE_ROOT=e.grantedRoot,_.REASON_HANDS_WORKSPACE=_.ARA_HANDS_WORKSPACE=e.workRoot,_.REASON_HANDS_REPO=_.ARA_HANDS_REPO=e.root,e.workspacePoolPath)_.REASON_HANDS_WORKSPACE_POOL=_.ARA_HANDS_WORKSPACE_POOL=e.workspacePoolPath;return{command:l,args:[...f,"__device","__hands-worker","--config",e.configPath],options:{cwd:e.root,env:_,shell:!1,stdio:[En,"ignore","pipe"]}}}var En=process.platform==="win32"?"pipe":"ignore";function ct(e,l){if(process.platform!=="win32")return e.kill(l);if(l==="SIGTERM")e.stdin?.end();else if(e.pid)$e(e.pid);return!0}function sl(e,l){let f="",_=!1,w=Date.now(),S=0,x=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled","permission_denied"].map((U)=>`hands.worker.${U}`)),W=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((U)=>["bash","read","write","edit"].map((D)=>`${U}:${D}`))]),R=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],B=["peerGeneration","socketState","closeCode"],G=new Set(["event","reason","launchId",...R,...B]);return(U)=>{for(let D of U.toString().split(/(?<=\n)/)){let re=D.endsWith(`
|
|
451
|
+
`);if(!_&&f.length+D.length<=2048)f+=D;else _=!0;if(!re)continue;let J=f;if(f="",_){_=!1;continue}try{let z=JSON.parse(J);if(!z||typeof z!=="object"||Array.isArray(z)||Object.keys(z).some((fe)=>!G.has(fe))||!x.has(z.event)||!W.has(z.reason)||z.event==="hands.worker.permission_denied"!==(typeof z.reason==="string"&&z.reason.includes(":"))||z.launchId!==e||R.some((fe)=>!Number.isSafeInteger(z[fe])||z[fe]<0)||B.some((fe)=>z[fe]!==null&&(!Number.isSafeInteger(z[fe])||z[fe]<0)))continue;if(Date.now()-w>=60000)w=Date.now(),S=0;if(S>=122)continue;S+=1,l(z)}catch{}}}}async function il(e){let l=e.now()+e.timeoutMs;while(e.now()<l){if(e.signal.aborted)throw new r("cancelled","Reason Hands start was cancelled.");if(e.spawnFailed?.()||e.child.exitCode!==null||e.child.signalCode!==null)throw new r("hands_worker_exited","Reason Hands exited before ready.");let f=on(e.path,{pid:e.child.pid??-1,launchId:e.launchId,workerVersion:O,protocolVersion:P,workerArtifactSha256:b,workerEntrypoint:T});if(f?.targetGeneration===e.targetGeneration&&f.fenceId===e.fenceId)return f;await new Promise((_)=>setTimeout(_,10))}throw new r("hands_ready_timeout","Reason Hands did not become ready.")}function al(e){let l=e.exitCode===null?void 0:Cn[e.exitCode];return{exit_code:e.exitCode,exit_signal:e.signalCode,...l?{exit_reason:l}:{}}}async function cl(e,l){let f=()=>e.exitCode===0&&e.signalCode===null;if(e.exitCode!==null||e.signalCode!==null)return f()?"stopped":"already_exited";let _=new Promise((x)=>e.once("exit",()=>x()));try{if(!ct(e,"SIGTERM"))return f()?"stopped":"unobserved"}catch{return f()?"stopped":"unobserved"}if(await gi(_,l))return f()?"stopped":"unobserved";try{ct(e,"SIGKILL")}catch{}return await gi(_,l)?"forced":"unobserved"}async function gi(e,l){let f;try{return await Promise.race([e.then(()=>!0),new Promise((_)=>{f=setTimeout(()=>_(!1),l)})])}finally{clearTimeout(f)}}function dl(e){return new Promise((l)=>{let f=!1,_=(W)=>{if(f)return;f=!0,clearTimeout(x),e.signal.removeEventListener("abort",w),e.child.off("exit",S),l(W)},w=()=>_("cancelled"),S=()=>_("exited"),x=setTimeout(()=>_("expired"),Math.max(0,e.expiresAt-e.now()));if(e.signal.addEventListener("abort",w,{once:!0}),e.child.once("exit",S),e.signal.aborted)w();else if(e.child.exitCode!==null||e.child.signalCode!==null)S()})}var ll=uo();function ul(e,l){if(!(e instanceof Error)||e instanceof r)return!1;let f=["hands_browser_driver_missing","hands_browser_driver_version_mismatch","hands_browser_executable_missing","hands_browser_unsupported_platform","hands_browser_unavailable"].includes(e.message),_=["ENOENT","EACCES","EPERM"].includes(e.code??"");if(!f&&!_)return!1;try{return dr(l),!1}catch(w){return Pt(w)&&w.code==="ENOENT"}}function fl(e){return e.sandbox_provider==="compute"&&!e.cloud_browser&&e[Ze]===Xr}function pl(e,l,f){return e===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:Lr(e,l),...f===void 0?{}:{worker_prespawned:f}}}}async function Nt(e,l={}){let f=l.logDiagnostic??((le)=>console.warn(le)),_=new Map,w=(le)=>{let he=Date.now();_.set(le,he);try{f(JSON.stringify({event:"sandbox.hands_startup",stage:le,timestampMs:he}))}catch{}};w("entered");let S=e.claimEnvironment;e.claimEnvironment=void 0;let x=l.now??Date.now,W,R=Kd(e.payload,l.now?.(),(le)=>{W=le});if(e.managedPty&&(e.managedPty.version!==1||!e.headless||!e.runtimeDirectory||![void 0,!0].includes(e.managedPty.startupVerified)||!e.deviceIdentity||!e.claimOwner||e.claimOwner.device_id!==e.deviceIdentity.deviceId||!R.environment_binding||!["darwin","linux","win32"].includes(process.platform)))throw new r("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let B=async(le)=>{let he;try{await Promise.race([le,new Promise((xe,Je)=>{he=setTimeout(()=>Je(new r("hands_event_delivery_unavailable","Hands event delivery did not settle within its deadline.")),Math.max(1,Math.min(l.eventDeliveryTimeoutMs??5000,5000)))})])}finally{clearTimeout(he)}},G=async(le,he)=>B(e.emitEvent(le,he));if(e.headless&&(R.cloud_browser===!0||e.managedBrowser!==void 0||R[Rt]!==void 0||R[Ze]!==void 0&&R[Ze]!==Mr))throw new r("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let U=ge(),D=R[q]===void 0?null:Ot(U);if(R[q]!==void 0&&(D===null||!e.headless||!me(e.hostExecution,l.hostIdentity?.platform,l.hostIdentity?.euid)))throw new r("hands_model_jobs_egress_unavailable","This worker cannot hold its jobs to the guest egress guard; the Hands did not start.");if(R[Z]!==void 0&&!(e.headless&&me(e.hostExecution,l.hostIdentity?.platform,l.hostIdentity?.euid)))throw new r("hands_confinement_unavailable","Confined Hands need a root Linux worker in host mode.");if(R.cloud_browser&&process.platform!=="linux")throw new r("cloud_browser_target_invalid","Cloud browser is available only on a cloud machine.");let re=`${e.operationId}:${e.attemptId}`,J=R[Ze]===Et,z=e.headless||process.platform==="darwin"&&e.managedBrowser===void 0&&!R.cloud_browser&&!R.browser_egress&&(R[Ze]===void 0||R[Ze]===Mr)||fl(R),fe=J?R[Rt]??"bash":null,ke=fe?qs(fe):null;if(ke)throw new r(ke,"Persistent Node REPL execution is unavailable; this benchmark profile cannot start.");let be=R[Ze],Re=e.headless===!0&&e.ownComputer!==!0?e.handsSlots??1:void 0,Fe=(l.slot??Jd).acquire(re,{exclusive:Re===1||be!==void 0&&be!==Mr,...Re!==void 0&&Re>1?{limit:Re}:{},...e.headless===!0&&R[Q]!==void 0?{group:R[Q]}:{}});if(!Fe)throw new r("hands_slot_busy",Re!==void 0&&Re>1?`This Reason worker runs at most ${Re} sessions at a time.`:"This Reason Device runs one session at a time.");let Xe=e.headless===!0?ji(e.runId):null,ye=null,We=null,Ye,De;try{w("browser_resolution");let le=e.headless&&l.browserExecutablePath===void 0?await jt():null,he=J||R.cloud_browser?null:l.browserExecutablePath===void 0?e.headless?le?.status==="resolved"?le.executablePath:null:await Fs(void 0,process.platform,e.managedBrowser):l.browserExecutablePath;if(!J&&!R.cloud_browser&&!z&&!he)throw new r("hands_browser_unavailable","Reason Hands requires Chrome, Edge, Brave, Chromium, or a Playwright Chromium install.");w("path_resolution");let xe;try{xe=await(l.resolvePathEnvironment??ll)()}catch{xe={path:xn(),source:"fallback"}}if(w("workspace_setup"),process.platform==="darwin"){let Qe=R[Ze]===Mr&&R.workspace_path!==void 0?vo(e.root,R.workspace_worktree?R.workspace_worktree.source_path:R.workspace_path,"folder"):null;for(let fr of new Set([e.root,...Qe?[Qe]:[]]))await hs(fr)}let Le=R[Ze]===Xr||R[Ze]===Et?Ud(process.platform,l.sandboxRuntimeRoot):null,Be=e.headless&&e.runtimeDirectory?e.runtimeDirectory:Le?Le.temporaryRoot:bi();if(ye="private_runtime",e.headless&&e.runtimeDirectory){v(Be);let Qe=er(e.root);if(!je(Qe,Be))throw new r("invalid_hands_workspace","Private worker state must not overlap the granted workspace.")}if(e.headless&&e.runtimeDirectory&&(!e.deviceIdentity||!R.environment_binding))throw new r("environment_unavailable","Headless Hands requires a server-bound private environment.");if(ye="runtime_root",Le?.prepareRoot)Tt(Be,{recursive:!0,mode:457}),Wt(Be,457);ye="temporary_directory";let Ee=er(Hd(cr(Be,"reason-hands-session-")));We=Ee,Wt(Ee,Le?.sessionMode??448);let Me=cr(Ee,"hands-config.json"),rr=cr(Ee,"hands-ready.json"),or=Rd(),Rr=R.target_fence_id;if(e.workspaceGrant){ye="workspace_grant",w("workspace_grant_wait");let Qe=e.workspaceGrant;await new Promise((fr,nt)=>{let _t=()=>nt(new r("cancelled","Reason Hands was cancelled."));if(e.signal.aborted){_t();return}e.signal.addEventListener("abort",_t,{once:!0}),Qe.then(fr,nt).finally(()=>e.signal.removeEventListener("abort",_t))})}ye="granted_root";let qe=er(e.root);ye="workspace_layout";let sr=R[Ze]===Mr&&R.workspace_path!==void 0&&R.workspace_worktree?await el(qe,R.workspace_path,R.workspace_worktree):void 0,{workRoot:nr,repoPath:lr,jobEnvPath:Ur,workspacePoolPath:ln,managedWorkspace:Gr,workspace:ft,cloudSessionRoot:Ft}=ol({grantedRoot:qe,personalWorkspace:R.personal_workspace===!0,runId:e.runId,workspaceId:R.workspace_id,legacyWorkspaceId:R.legacy_workspace_id,workspaceBase:R[Ce],workspaceLayout:R[Ae],temporaryDirectory:Ee,workspaceMode:R[Ze],applicationSupportPath:l.applicationSupportPath,...R.workspace_path===void 0?{}:{workspacePath:R.workspace_path},...R.workspace_worktree?{workspaceWorktree:R.workspace_worktree}:{},...sr?{workspaceWorktreeStart:sr}:{},...e.deviceIdentity?{deviceId:e.deviceIdentity.deviceId}:{}});if(zo(nr))throw new r("folder_is_filesystem_root",`${qo(nr)}.`);let Qr="ara_device_wss";ye="jobs";let ur=e.headless&&e.runtimeDirectory?gr({runtimeDirectory:e.runtimeDirectory,root:qe,runId:e.runId,folders:[nr,lr]}):void 0;Ye=ur?.disposeSocket;let Wr=ur?os(ur):null;if(Wr)try{f(JSON.stringify({event:"hands.journal_owner_retired",run_id:e.runId,reason:Wr.reason,prior_executor_launch_id:Wr.executorLaunchId}))}catch{}if(ur&&[nr,lr].some((Qe)=>!je(Qe,ur.journalDirectory)))throw new r("invalid_hands_workspace","A Session can't work in the folder that holds this worker's settings; start it in a project or repository inside it.");let pt=R.personal_workspace?nr.slice(nr.lastIndexOf("/")+1):void 0;if(pt&&pt!==R.workspace_id)throw new r("invalid_hands_workspace","Personal session identity does not match its Device grant.");ye="browser_socket";let Br=R.cloud_browser?zd(R.sandbox_os,pt):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${or}`:cr(ur?ur.launchDirectory:Ee,"repl.sock");ye="relay_url";let Fr=yi(new URL(R.relay_url).hostname),rt=Qr==="ara_device_wss"&&!Fr?(l.loadProxy??j)()?.url:void 0,Tr;ye="environment_owner";let Or=e.headless&&e.deviceIdentity&&R.environment_binding?ti(Ee,{runId:e.runId,...e.deviceIdentity,binding:R.environment_binding,expiresAtMs:Date.parse(R.expires_at),identity:()=>Tr?.()??null}):void 0;ye="job_environment";let Dt=!Or&&ft.kind==="managed"&&Gr?cr(nr,"job.env"):null;if(Dt)try{dn(Dt,"",{mode:384,flag:"wx"})}catch(Qe){if(!(Qe instanceof Error&&("code"in Qe)&&Qe.code==="EEXIST"))throw Qe}let un={url:R.relay_url,transport:Qr,...rt===void 0?{}:{proxyUrl:rt},...e.localGithubConfinement?{localGithubConfinement:!0}:{},...R[Z]&&Or?{gitCredentialEnvironment:!0}:{},workerVersion:O,protocolVersion:P,workerArtifactSha256:b,workerEntrypoint:T,...process.platform==="win32"?{bashExecutable:se()}:{},targetGeneration:R.target_generation,fenceId:Rr,workRoot:nr,workspaceAliasPath:nr,jobEnvPath:Ur,...Or?{environmentSnapshotPath:Or.path,...e.hostExecution?{executionEnvironment:wr()}:{},environmentExpectedBinding:{runId:e.runId,...e.deviceIdentity,binding:R.environment_binding}}:Dt?{jobEnvSourcePath:Dt,workspacePoolPath:Ir(nr)}:Gr?{}:{jobEnvSourcePath:Si(nr)},repoPath:lr,replSocketPath:Br,...R.cloud_browser?{browserRunId:e.runId}:{},readyPath:rr,launchId:or,expiresAtMs:Date.parse(R.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...ur?{managedJobs:{journalDirectory:ur.journalDirectory,scopeId:ur.scopeId},jobControlSocketPath:ur.socketPath}:{},...ur&&U?{jobsUser:{...U,...D!==null?{modelGid:D}:{}}}:{},...e.managedPty&&ur&&Or?{managedPty:{version:1,...e.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:br()}:{}}}:{},...z&&!he?{allowedTools:["bash","read","write","edit"]}:J?{allowedTools:fe==="bash"?["bash"]:["bash","repl"]}:{}};if(Or||Gr&&!Dt)dn(Ur,"",{mode:384});else nl(nr,Ur);ye="config_write",dn(Me,JSON.stringify(un),{mode:384}),ye=null;let tt={session_id:R.session_id,environment_id:R.environment_id,hands_protocol_version:P,hands_worker_version:O,hands_worker_artifact_sha256:b,hands_worker_entrypoint:T,target_generation:R.target_generation,target_fence_id:R.target_fence_id,executor_launch_id:or},Ut=null,ko=!1,So=!1,Eo,pr=null,Ro,Oo,zt="failed",xo=null,fn=Promise.resolve(),Po=null,pn=async(Qe,fr)=>{try{await G(Qe,fr)}catch{}};try{w("event_started");let Qe,fr=(async()=>{await e.emitEvent("hands.started",{...tt,policy_mode:"full_access",policy_version:1,path_source:xe.source}),Qe=Date.now()})();fr.catch(()=>{return}),w("worker_setup");let nt=R.browser_egress?{mode:"enforce",allowedDomains:R.browser_egress.allowed_domains}:{mode:"off"};if(fe&&fe!=="bash")Ut=await(l.startNodeRepl??ui)({socketPath:Br,workRoot:nr});else if(!J&&!R.cloud_browser&&he)Ut=await(l.startRepl??Us)({socketPath:Br,browserExecutablePath:he,workspaceRoot:lr,...e.managedBrowser?{managedBrowser:e.managedBrowser}:{},...e.desktopRecording?{recording:e.desktopRecording}:{},networkPolicy:nt,onEgressDenied:(Ne)=>{let Nr=Js(Ne.host);f(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:Nr,reason:Ne.reason,run_id:e.runId})),fn=fn.then(()=>G("hands.browser_egress_denied",{destination_id:Nr,reason:Ne.reason})).catch((Jt)=>{Po??=Jt})}}).catch((Ne)=>{if(!z||e.signal.aborted||x()>=Date.parse(R.expires_at)||!ul(Ne,Br))throw Ne;return Object.assign(un,{allowedTools:["bash","read","write","edit"]}),dn(Me,JSON.stringify(un),{mode:384}),So=!0,null});let _t=Sn({configPath:Me,root:lr,grantedRoot:qe,workRoot:nr,workspacePoolPath:ln,temporaryDirectory:Ee,path:xe.path,executablePath:l.executablePath,sourceEntrypoint:l.sourceEntrypoint}),_n=Date.now(),mn,Io,hn=l.takePrespawnedWorker?.(_t)??null;if(Eo=l.takePrespawnedWorker?hn!==null:void 0,pr=hn??(l.spawnWorker??((Ne)=>Od(Ne.command,Ne.args,Ne.options)))(_t),!hn)l.adoptSpawnedWorker?.(pr);pr.stderr?.on("data",sl(or,(Ne)=>{if(Ne.event==="hands.worker.connecting")mn??=Ne.timestampMs;else if(Ne.event==="hands.worker.open")Io??=Ne.timestampMs;if(f(JSON.stringify({...Ne,run_id:e.runId})),Ne.event==="hands.worker.permission_denied"&&typeof Ne.reason==="string"){let[Nr,Jt]=Ne.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(Nr??"")&&["bash","read","write","edit"].includes(Jt??""))G("permission.denied",{provenance:Nr,operation:Jt}).catch(()=>{return})}}));let Ao=!1;pr.on("error",()=>{Ao=!0}),pr.once("exit",(Ne,Nr)=>{try{f(JSON.stringify({event:"hands.worker.exited",run_id:e.runId,launchId:or,exit_code:Ne,exit_signal:Nr}))}catch{}}),De=pr,w("worker_ready_wait");let Ct=await il({path:rr,launchId:or,fenceId:Rr,targetGeneration:R.target_generation,child:pr,spawnFailed:()=>Ao,signal:e.signal,timeoutMs:l.readyTimeoutMs??Md,now:x}),Ei=Date.now();if(Tr=()=>{if(!pr||pr.exitCode!==null||pr.signalCode!==null)return null;let Ne=on(rr,Ct);return Ne?{generation:Ne.targetGeneration,fenceId:Ne.fenceId}:null},ur){let Ne={root:qe,runId:e.runId,operationId:e.operationId,scopeId:ur.scopeId,socketPath:ur.socketPath,generation:Ct.targetGeneration,fenceId:Ct.fenceId,executorLaunchId:or,expiresAtMs:Date.parse(R.expires_at),readIdentity:Tr,workspace:ft,localGithubConfinement:e.localGithubConfinement===!0};if(Or)Ne.environment=Or;if(e.claimOwner&&e.deviceIdentity&&e.claimOwner.device_id===e.deviceIdentity.deviceId){let Nr=[e.deviceIdentity.apiOrigin,R.relay_url];if(rt)Nr.push(rt);Ne.previewAuthority={owner:Object.freeze({...e.claimOwner}),rootId:e.deviceIdentity.rootId,relayOrigin:new URL(R.relay_url).origin,deniedPorts:mr(Nr)}}Oo=ss(Ne)}if(await new Promise((Ne)=>{setImmediate(Ne)}),Ft)xr(nr);let Gt;if(S&&Or){try{let Ne=Or.install(S);Gt={snapshot_id:Ne.snapshot_id,installed_revision:Ne.installed_revision}}catch{}try{f(JSON.stringify({event:"hands.environment_at_claim",run_id:e.runId,installed:Gt!==void 0}))}catch{}}S=void 0;let To=!1;if(e.headless){let Ne=Yd(lr,U);try{f(JSON.stringify({event:"hands.workspace_check",run_id:e.runId,outcome:Ne}))}catch{}if(Ne==="unready")throw new r("hands_workspace_unready","This Session's checkout is not a readable, writable directory at its own path, so Reason Hands cannot use it.");To=Ne==="checked"}w("event_ready");let Do=B(fr);Do.catch(()=>{return});let Co=Date.now();ko=!0,await G("hands.ready",{...tt,expiry_diagnostic:W,startup_stages:{version:1,browser_resolution_ms:Lr(_.get("browser_resolution"),_.get("path_resolution")),path_resolution_ms:Lr(_.get("path_resolution"),_.get("workspace_setup")),workspace_setup_ms:Lr(_.get("workspace_setup"),_.get("event_started")),repl_setup_ms:Lr(_.get("worker_setup"),_n),worker_boot_ms:Lr(_n,mn),worker_dial_ms:Lr(mn,Io),worker_ready_ms:Lr(_n,Ei),started_event_ms:Lr(_.get("event_started"),Qe),started_join_wait_ms:Lr(_.get("event_ready"),Co),total_ms:Lr(_.get("entered"),Co)},...pl(e.claimedAtMs,_.get("entered"),Eo),...e.managedPty?.startupVerified===!0?{managed_pty:{version:1,execution_mode:"host",descendant_cleanup_verified:!0}}:{},policy_mode:"full_access",policy_version:1,path_source:xe.source,connection_generation:Ct.generation,...Gt?{environment_installed:Gt}:{},...To?{workspace_checked:!0}:{},...z&&!Ut?{browser_state:"unavailable",browser_reason_code:So?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await Do,w("ready"),Ro=ci({path:rr,initial:Ct,signal:e.signal,isAlive:()=>pr!==null&&pr.exitCode===null&&pr.signalCode===null&&x()<Date.parse(R.expires_at),publish:(Ne,Nr)=>e.emitEvent("hands.reconnected",{...tt,target_generation:Ne.targetGeneration,target_fence_id:Ne.fenceId,connection_generation:Ne.generation},Nr),failed:()=>f(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:e.runId,executor_launch_id:or}))});let Ho=await dl({child:pr,signal:e.signal,expiresAt:Date.parse(R.expires_at),now:x});if(Ho==="cancelled"){let Ne=e.signal.reason instanceof r?e.signal.reason.code:"cancelled";throw zt=Ne,new r(Ne,"Reason Hands was cancelled.")}if(Ho==="exited")throw new r("hands_worker_exited","Reason Hands exited unexpectedly.");return zt="expired",{...tt,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(Qe){xo=Qe;let fr=Qe instanceof r?Qe.code:"hands_failed",nt=fr==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(fr);if(zt=nt?fr:"failed",!nt)await pn("hands.failed",{...tt,reason_code:fr,...fr==="hands_worker_exited"&&pr?al(pr):{}});throw Qe}finally{Ro?.stop(),Oo?.();let Qe=pr?await cl(pr,l.stopTimeoutMs??Wd):null,fr=!1;await e.desktopRecording?.close();try{await Ut?.stop()}catch{fr=!0}if(await fn,(Qe==="stopped"||Qe==="already_exited"&&!ko)&&!fr)await pn("hands.stopped",{...tt,reason_code:zt});else if(Qe!==null||fr){if(await pn("hands.failed",{...tt,reason_code:Qe==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),xo===null||fr)throw new r("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(Po!==null)throw new r("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(le){let he=zs(ye,le);if(he)try{f(JSON.stringify({event:"sandbox.hands_workspace_failed",...he}))}catch{}throw le}finally{try{if(!De||De.exitCode!==null||De.signalCode!==null)Ye?.();if(We!==null&&(!De||De.exitCode!==null||De.signalCode!==null))Nd(We,{recursive:!0,force:!0})}finally{Xe?.(),Fe()}}}
|
|
452
452
|
export{F,m,je,te,mr,eo,gr,to,at,ro,no,io,oo,_r,so,ao,yr,co,wr,br,wn,bn,vr,lo,He,vn,Sr,me,ge,Ot,Er,xr,kr,Sn,En,ct,Nt};
|