@reason-machines/cli-linux-x64 0.2.459 → 0.2.463
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/THIRD_PARTY_NOTICES.txt +2 -2
- package/bin/reason +1 -1
- package/bin/runtime/srt/sandbox-runtime.mjs +40 -40
- package/bin/runtime/srt/vendor/seccomp/x64/apply-seccomp +0 -0
- package/bin/vm-hands/api-7xy672j8.js +2 -0
- package/bin/vm-hands/api-credentials-bbmmmkwx.js +2 -0
- package/bin/vm-hands/connect-cli-2rvwbw01.js +2 -0
- package/bin/vm-hands/credentials-gr9jn270.js +2 -0
- package/bin/vm-hands/custom-endpoint-device-r2nn1xj9.js +2 -0
- package/bin/vm-hands/desktop-account-3cc0bhw8.js +2 -0
- package/bin/vm-hands/device-workspace-s50q53sz.js +2 -0
- package/bin/vm-hands/{fsevents-5c1c8fc6.js → fsevents-sxsgn7s9.js} +1 -1
- package/bin/vm-hands/hands-worker-source-k8v5kmmw.js +2 -0
- package/bin/vm-hands/{index-0dp6x9h4.js → index-d5n50g8b.js} +19 -19
- package/bin/vm-hands/install-receipt-gvdzhm17.js +2 -0
- package/bin/vm-hands/local-automation-34vdgq8d.js +2 -0
- package/bin/vm-hands/local-capabilities-41n0pspr.js +2 -0
- package/bin/vm-hands/local-desktop-users-qskbh51j.js +2 -0
- package/bin/vm-hands/local-display-mac-m77mftqy.js +2 -0
- package/bin/vm-hands/local-display-session-g81fwns5.js +2 -0
- package/bin/vm-hands/local-display-video-1xd1fqch.js +2 -0
- package/bin/vm-hands/local-managed-process-30k1x92d.js +2 -0
- package/bin/vm-hands/local-pty-session-k6kab3tc.js +2 -0
- package/bin/vm-hands/managed-runtime-hk53v8j5.js +2 -0
- package/bin/vm-hands/network-contract-y2eybfhn.js +2 -0
- package/bin/vm-hands/package-8v6gpwas.js +2 -0
- package/bin/vm-hands/permissions-t3e7bp9x.js +2 -0
- package/bin/vm-hands/reason-hands-protocol-r3wtcjed.js +2 -0
- package/bin/vm-hands/serve-service-hr1x43p8.js +2 -0
- package/bin/vm-hands/status-h3bk00m3.js +10 -0
- package/bin/vm-hands/version-qja79041.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-03d1fhxv.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-eycfxb2c.js → vm-hands-entry-lite-0yj63trb.js} +12 -12
- package/bin/vm-hands/{vm-hands-entry-lite-njs8k65s.js → vm-hands-entry-lite-1f0v3jb4.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-4g9k69a7.js → vm-hands-entry-lite-1k16ct2y.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-hc5ccj2h.js → vm-hands-entry-lite-1y629eqh.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-r7zs4ce2.js → vm-hands-entry-lite-3krzmhkk.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-3pxmmb7z.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-gcjjhsm2.js → vm-hands-entry-lite-44qha2rt.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-2ctydt7v.js → vm-hands-entry-lite-4x8j1xp9.js} +9 -9
- package/bin/vm-hands/{vm-hands-entry-lite-t5q30ne0.js → vm-hands-entry-lite-52x189kf.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-ba3qq0bs.js → vm-hands-entry-lite-5agyspqp.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-j4kapgvr.js → vm-hands-entry-lite-5zdybh8s.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-g9z467dk.js → vm-hands-entry-lite-7ja63pfz.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-1f2cam25.js → vm-hands-entry-lite-8qvsnkvv.js} +4 -4
- package/bin/vm-hands/vm-hands-entry-lite-9fzydv1p.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-etbsze1k.js → vm-hands-entry-lite-9vv5knh4.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-3pnjdh8m.js → vm-hands-entry-lite-abfb6nms.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-3rwtqr28.js → vm-hands-entry-lite-arrmd8qx.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-b139fhbg.js +5 -0
- package/bin/vm-hands/{vm-hands-entry-lite-tqc2ezda.js → vm-hands-entry-lite-b8yapqfn.js} +5 -5
- package/bin/vm-hands/vm-hands-entry-lite-bvb4nvxr.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-mv9nkj11.js → vm-hands-entry-lite-c7ka2d1c.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-9sa1knn7.js → vm-hands-entry-lite-cf1x5cbr.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-07vak0wy.js → vm-hands-entry-lite-d2fveq6h.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-2j7he8gn.js → vm-hands-entry-lite-eay4tbg0.js} +33 -33
- package/bin/vm-hands/{vm-hands-entry-lite-4fwf7wgb.js → vm-hands-entry-lite-egax7vw4.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-dh8f2h2d.js → vm-hands-entry-lite-h6rhk6h1.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-a3w8m8nb.js → vm-hands-entry-lite-hzh8fdxx.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-jcf61cb4.js → vm-hands-entry-lite-jyvmw8b7.js} +5 -5
- package/bin/vm-hands/vm-hands-entry-lite-k83rkcys.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-b8k78r34.js → vm-hands-entry-lite-kz48x6p0.js} +32 -32
- package/bin/vm-hands/{vm-hands-entry-lite-n68srzhw.js → vm-hands-entry-lite-m753n72c.js} +16 -16
- package/bin/vm-hands/{vm-hands-entry-lite-5rx9b5rg.js → vm-hands-entry-lite-me5w88km.js} +14 -9
- package/bin/vm-hands/{vm-hands-entry-lite-9z3v15d2.js → vm-hands-entry-lite-mmrdd8gk.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-n4x7reax.js → vm-hands-entry-lite-n1k1njzh.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-2yz6b0n3.js → vm-hands-entry-lite-np07qyeq.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-d9g1pzzx.js → vm-hands-entry-lite-r3yp6cr9.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-em7mk9tn.js → vm-hands-entry-lite-rfz60hb3.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-9z0skx2w.js → vm-hands-entry-lite-rzhqftyg.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-2sx9smm8.js → vm-hands-entry-lite-t0exw1jk.js} +20 -20
- package/bin/vm-hands/{vm-hands-entry-lite-dcxvxpne.js → vm-hands-entry-lite-tn8v3yfj.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-qyp2a4c3.js → vm-hands-entry-lite-txd50spx.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-8j7p91hr.js → vm-hands-entry-lite-vdhgwmmp.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-12rzrd95.js → vm-hands-entry-lite-wrvz9jxy.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-vrp0t24n.js → vm-hands-entry-lite-x9wy77vd.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite.js +2 -2
- package/bin/vm-hands/{vm-hands-executor-81e32jtv.js → vm-hands-executor-ksf4ragj.js} +3 -3
- package/bin/vm-hands/vm-hands-op-runner-q5x9gpmt.js +2 -0
- package/bin/vm-hands/{vm-hands-runtime-w8j74jv4.js → vm-hands-runtime-dg696564.js} +3 -3
- package/bin/vm-hands/worker-preview-readiness-6hzzjnk7.js +2 -0
- package/bin/vm-hands/worker-sandbox-1g7jheqm.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-credentials-skdwhmrz.js +0 -2
- package/bin/vm-hands/api-s23qevwq.js +0 -2
- package/bin/vm-hands/connect-cli-3t4w2fht.js +0 -2
- package/bin/vm-hands/custom-endpoint-device-2s9qxe6t.js +0 -2
- package/bin/vm-hands/desktop-account-nb7g2ek5.js +0 -2
- package/bin/vm-hands/device-workspace-6av4wa2e.js +0 -2
- package/bin/vm-hands/hands-worker-source-v7ds6vp1.js +0 -2
- package/bin/vm-hands/install-receipt-4sjr0jhg.js +0 -2
- package/bin/vm-hands/local-automation-16beqqtc.js +0 -2
- package/bin/vm-hands/local-capabilities-5prfxmwj.js +0 -2
- package/bin/vm-hands/local-desktop-users-2azpqr2m.js +0 -2
- package/bin/vm-hands/local-display-mac-1ddx6s3j.js +0 -2
- package/bin/vm-hands/local-display-session-9mkfnt2c.js +0 -2
- package/bin/vm-hands/local-display-video-pg5tzfwz.js +0 -2
- package/bin/vm-hands/local-managed-process-0ay1z599.js +0 -2
- package/bin/vm-hands/local-pty-session-gvnfgrxt.js +0 -2
- package/bin/vm-hands/managed-runtime-wr322d0v.js +0 -2
- package/bin/vm-hands/network-contract-8fkzm0t0.js +0 -2
- package/bin/vm-hands/package-k6jdrvn6.js +0 -2
- package/bin/vm-hands/permissions-q60sq4a3.js +0 -2
- package/bin/vm-hands/reason-hands-protocol-nkj7481a.js +0 -2
- package/bin/vm-hands/serve-service-vk54esde.js +0 -2
- package/bin/vm-hands/status-dyaae8hz.js +0 -10
- package/bin/vm-hands/version-x56y54v3.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-04b2bmem.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-9jgf223h.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-cm497v4t.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-hw26gewc.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-t7pnq2e5.js +0 -3
- package/bin/vm-hands/vm-hands-op-runner-xdmre6dn.js +0 -2
- package/bin/vm-hands/worker-preview-readiness-kmwcrttt.js +0 -2
- package/bin/vm-hands/worker-sandbox-epre0fnv.js +0 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Ut,j}from"./vm-hands-entry-lite-1f2cam25.js";import{ue,Ce,Z,Ae,de,er,Ye,X,O,H,Qr}from"./vm-hands-entry-lite-r7zs4ce2.js";import{mo,qn}from"./vm-hands-entry-lite-hw26gewc.js";import{ao,P,Ge,ve,Ke,ne,Je,Mn,Se,Wt,ae,U,N,ce,Fr,jr,Bn}from"./vm-hands-entry-lite-j4kapgvr.js";import{Pe,oe,pe,Y,Re,q,Q}from"./vm-hands-entry-lite-tqc2ezda.js";import{Rt,br,ot,V,D,R,b}from"./vm-hands-entry-lite-b8k78r34.js";import{Sr,Er,yn,ro,He,wn}from"./vm-hands-entry-lite-a3w8m8nb.js";import{K}from"./vm-hands-entry-lite-d9g1pzzx.js";import{Ri}from"./vm-hands-entry-lite-g9z467dk.js";import{p,Ue,Ot,st,Zi,_e,we}from"./vm-hands-entry-lite-dh8f2h2d.js";import{v,h,no}from"./vm-hands-entry-lite-t5q30ne0.js";import{E}from"./vm-hands-entry-lite-qyp2a4c3.js";import{Yt}from"./vm-hands-entry-lite-t7pnq2e5.js";import{a,ie,Oo}from"./vm-hands-entry-lite-9sa1knn7.js";import{L,Ci,Ai,Mo,y,t,k,St,o,d,u,i,c,_,ee,s,n}from"./vm-hands-entry-lite-ba3qq0bs.js";import{Ti}from"./vm-hands-entry-lite-07vak0wy.js";import{Bo,se,Fo,C,De,Me,A}from"./vm-hands-entry-lite-8j7p91hr.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";var li=()=>{let e={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{unit:"entries",verb:"to have"}};function l(w){return e[w]??null}let f={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"},g={nan:"NaN"};return(w)=>{switch(w.code){case"invalid_type":{let S=g[w.expected]??w.expected,I=Mo(w.input),W=g[I]??I;return`Invalid input: expected ${S}, received ${W}`}case"invalid_value":if(w.values.length===1)return`Invalid input: expected ${Ai(w.values[0])}`;return`Invalid option: expected one of ${Ci(w.values,"|")}`;case"too_big":{let S=w.inclusive?"<=":"<",I=l(w.origin);if(I)return`Too big: expected ${w.origin??"value"} to have ${S}${w.maximum.toString()} ${I.unit??"elements"}`;return`Too big: expected ${w.origin??"value"} to be ${S}${w.maximum.toString()}`}case"too_small":{let S=w.inclusive?">=":">",I=l(w.origin);if(I)return`Too small: expected ${w.origin} to have ${S}${w.minimum.toString()} ${I.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":""}: ${Ci(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((I)=>`'${I}'`).join(" | ")}`;return"Invalid input";case"invalid_element":return`Invalid value in ${w.origin}`;default:return"Invalid input"}}};function En(){return{localeError:li()}}L(En());class _t extends Error{}function Ro(e){let l;try{l=new URL(e)}catch{throw new _t("The proxy must be a URL like https://proxy.example.com:3128.")}if(l.protocol!=="https:"&&l.protocol!=="http:")throw new _t("The proxy URL must use the https or http scheme.");if(!l.hostname)throw new _t("The proxy URL must name a host.");if(l.port!==""&&Number(l.port)<1)throw new _t("The proxy URL must use a port between 1 and 65535.");if(l.pathname!==""&&l.pathname!=="/"||l.search||l.hash)throw new _t("The proxy URL must not carry a path, query, or fragment.");return l.toString()}import{createHash as ui}from"crypto";import{isAbsolute as xo,join as Po,relative as Io,resolve as Xt,sep as Ao}from"path";var qt=t().min(1).refine(xo,"absolute path required"),On=c({version:n(1),apiOrigin:St(),channel:s(["staging","production"]),stateDirectory:qt,workspaceRoot:qt,lifetime:s(["persistent","ephemeral"]),executionMode:s(["confined","host"]).default("confined"),name:t().min(1).max(160).default("Reason headless worker"),slots:o().int().min(1).max(4).default(1),shutdownGraceMs:o().int().min(0).max(300000).default(30000),proxy:c({version:n(Ut),url:t().refine((e)=>{try{return Ro(e)===e}catch{return!1}},"invalid proxy URL"),caFile:qt.optional()}).optional(),userChrome:d().optional(),cloudSessions:n(!0).optional(),localLogins:d().optional(),folders:u(qt).min(1).max(31).optional()}),fi=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,B=_("channel",[On,On.extend({channel:n("pr"),apiOrigin:t(),prEnvironment:t()}),On.extend({channel:n("local-qa"),apiOrigin:t()})]).superRefine((e,l)=>{if(e.channel==="local-qa"){if(!fi.test(e.apiOrigin))l.addIssue({code:"custom",message:"local QA worker requires an exact HTTPS trycloudflare.com quick-tunnel origin"})}else if(e.channel==="pr"){let g=e.prEnvironment,w=/^https:\/\/([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)\.up\.railway\.app$/.exec(e.apiOrigin),S=w?.[1]?.match(/(?:^|-)pr-[0-9]+(?=-|$)/g)?.map((I)=>I.replace(/^-/,""));if(!g||/^pr-[1-9][0-9]*$/.exec(g)?.[0]!==g||w?.[0]!==e.apiOrigin||S?.length!==1||S[0]!==g)l.addIssue({code:"custom",message:"PR worker requires explicit prEnvironment and an exact same-PR HTTPS Railway origin"})}else{let g=new URL(e.apiOrigin);if(g.origin!==e.apiOrigin||g.username||g.password||g.protocol!=="https:"&&!(g.protocol==="http:"&&qn(g.origin))||!qn(g.origin)&&!mo(e.channel,g.origin))l.addIssue({code:"custom",message:"API origin must match channel (or loopback)"})}if(!Fe(e.workspaceRoot,e.stateDirectory))l.addIssue({code:"custom",message:"state and workspace must be disjoint"});let f=e.folders??[];if(new Set([e.workspaceRoot,...f]).size!==f.length+1||f.some((g)=>!Fe(g,e.stateDirectory)))l.addIssue({code:"custom",message:"folders must be distinct and disjoint from state"})});function m(e){return Po(e.stateDirectory,`headless-${e.channel==="pr"?e.prEnvironment:e.channel}`)}function Fe(e,l){if(zr(l,e))return!1;return!zr(e,l)||E(Po(Ao,Io(Xt(e),Xt(l))))}function zr(e,l){let f=Io(Xt(e),Xt(l));return f===""||f!==".."&&!f.startsWith(`..${Ao}`)&&!xo(f)}function te(e){let{proxy:l,userChrome:f,cloudSessions:g,localLogins:w,folders:S,...I}=e;return ui("sha256").update(JSON.stringify(I)).digest("hex")}var pi=4,_i=[2375,2376,9222,9229];function lr(e){let l=new Set(_i);for(let f of e){let g=new URL(f);l.add(Number(g.port||(["https:","wss:"].includes(g.protocol)?443:80)))}return l}function Jr(){throw new r("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var mi=60000;function To(e){let l=new AbortController,f=new Map,g=(x)=>JSON.stringify([x.jobId,x.port]);function w(x){let M=e.authority.owner;if(l.signal.aborted||!e.isCurrent()||e.expiresAtMs<=Date.now()||x.organization_id!==M.organization_id||x.user_id!==M.user_id||x.device_id!==M.device_id)Jr()}function S(x){let M;try{M=e.environment.current()}catch{return null}return M.binding.target_generation===x.generation&&M.binding.target_fence_id===x.fenceId&&M.run_id===e.runId&&M.device_id===e.authority.owner.device_id&&M.root_id===e.authority.rootId?M:null}async function I(x,M,G){let F=await W(x,M,G);if(F!=="moved")return F;let T=await W(x,M,G);return T==="moved"?null:T}async function W(x,M,G){try{w(e.authority.owner);let F=e.identity();if(!F||G.aborted||x.expiresAtMs<=Date.now()||x.expiresAtMs>e.expiresAtMs)return null;let T=M.opened,re=T!==void 0&&F.generation>T.generation,J=S(F);if(re){if(J){if(J.revision<=T.revision||x.expiresAtMs>Date.parse(J.expires_at)||J.binding.target_revision!==T.attachmentRevision||J.binding.root_grant_revision!==T.grantRevision)return null;M.recoveringSinceMs=void 0}else if(Date.now()-(M.recoveringSinceMs??=Date.now())>mi)return null}else if(!J||x.expiresAtMs>Date.parse(J.expires_at)||T&&(F.generation!==T.generation||F.fenceId!==T.fenceId))return null;let z=await e.inspect(x.jobId,G),fe=e.identity(),ke=fe&&S(fe);w(e.authority.owner);let be=J&&{generation:F.generation,fenceId:F.fenceId,snapshotId:J.snapshot_id,revision:J.revision,attachmentRevision:J.binding.target_revision,grantRevision:J.binding.root_grant_revision},Oe=re?T:be;if(G.aborted||!fe)return null;if(fe.generation!==F.generation||fe.fenceId!==F.fenceId||ke?.snapshot_id!==J?.snapshot_id||ke?.revision!==J?.revision)return"moved";let $e=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!==F.generation||!Oe||!$e)return null;if(($e.snapshotId!==Oe.snapshotId||$e.revision!==Oe.revision)&&(re||!e.environment.carried($e.snapshotId,$e.revision)))return null;if(!T&&F.generation===x.generation&&F.fenceId===x.fenceId)M.opened={...Oe,...$e};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:Oe.attachmentRevision,grantRevision:Oe.grantRevision,generation:Oe.generation,fenceId:Oe.fenceId,jobId:z.job.jobId,port:x.port,expiresAtMs:x.expiresAtMs}}}catch{return null}}return{async open(x,M,G){w(M);let{binding:F,deviceRelayUrl:T}=st(x);if(G.aborted||F.expiresAtMs<=Date.now()||F.expiresAtMs>Date.now()+p.lifetimeMs||new URL(T).origin!==e.authority.relayOrigin)Jr();let re=g(F),J=f.get(re);if(J){if(!Ue(J.binding,F)||J.relay!==T)Jr();if(await J.opened,!await Ot(()=>J.port.check())||G.aborted||J.abort.signal.aborted)Jr();return{opened:!0,binding:F}}if(f.size>=pi)Jr();let z=new AbortController,fe={},ke=we({binding:F,deniedPorts:e.authority.deniedPorts,readCurrentJob:()=>I(F,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 Oe=_e({binding:F,deviceRelayUrl:T,port:ke,signal:z.signal}),$e={binding:F,relay:T,abort:z,port:ke,opened:Oe};f.set(re,$e);let Ze=()=>{if(G.removeEventListener("abort",be),l.signal.removeEventListener("abort",be),f.get(re)===$e)f.delete(re)};try{if((await Oe).closed.then(Ze),G.removeEventListener("abort",be),w(M),z.signal.aborted||!await Ot(()=>ke.check()))Jr();return{opened:!0,binding:F}}catch{z.abort(),Ze(),Jr()}},async close(x,M){w(M);let{binding:G}=Zi(x),F=f.get(g(G));if(!F||!Ue(F.binding,G))Jr();return F.abort.abort(),await F.opened.then((T)=>T.closed,()=>{return}),{closed:!0,binding:G}},dispose(){l.abort();for(let x of f.values())x.abort.abort();f.clear()}}}import{WebSocket as xn}from"ws";var Do=(e)=>("data"in e)?e.data.length:e.bytes,Co=2*Je;function ar(e){throw new r(e,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var mt=(e)=>!["starting","running"].includes(e.state);function ji(e,l,f=Date.now()){let g=["relay_url","session_id","expires_at","cols","rows","pty","workspace"];if(Object.keys(e).length!==g.length||Object.keys(e).some((M)=>!g.includes(M))||!ae(l)||!ae(e.session_id)||typeof e.expires_at!=="string"||typeof e.relay_url!=="string"||e.relay_url.length>4096||![e.cols,e.rows].every((M)=>Number.isSafeInteger(M)&&Number(M)>=1&&Number(M)<=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 I;try{I=new URL(e.relay_url)}catch{return ar("invalid_pty_request")}if(!["ws:","wss:"].includes(I.protocol)||I.username||I.password||I.hash||I.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(I.hostname))ar("invalid_pty_request");let W=Date.parse(e.expires_at);if(!Number.isSafeInteger(W)||W<=f)ar("invalid_pty_request");return{workspace:H(e.workspace)??ar("invalid_pty_request"),session:{jobId:S.jobId,sessionId:e.session_id,operationId:l,relayUrl:I.href,cols:Number(e.cols),rows:Number(e.rows),leaseExpiresAtMs:Math.min(W,f+43200000)}}}async function Ho(e){let{session:l,binding:f}=e;if(f.assertCurrent(),e.signal.aborted||Date.now()>=l.leaseExpiresAtMs)ar("cancelled");let g=new xn(l.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:ne}),w=new AbortController,S=()=>{},I=()=>{w.abort(),S()};e.signal.addEventListener("abort",I,{once:!0});let W=setTimeout(I,Math.max(1,l.leaseExpiresAtMs-Date.now())),x=[],M=0,G=0,F=0,T=!1,re=!1,J=!1,z,fe,ke,be=(le)=>{ke=new r(le,"Bound terminal input was refused."),I()};g.on("error",()=>be("pty_relay_unavailable")),g.on("close",I),g.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 Ve=x.at(-1),Le=he&&Ve!==void 0&&"data"in Ve&&Ve.data.length+xe.length<=ne;if(xe.length>ne||M+xe.length>Mn){be("pty_input_backpressure");return}if(Le)Ve.data=Buffer.concat([Ve.data,xe]);else if(he)x.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,I();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");x.push({cols:Be.cols,rows:Be.rows,bytes:xe.length})}catch{be("invalid_pty_control");return}M+=xe.length,S()});function Oe(le){return Bn(JSON.stringify({...f.scope,version:1,sessionId:l.sessionId,operationId:l.operationId,job:{...le,output:[],pty:le.pty?{...le.pty,output:[]}:void 0}}))}function $e(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(Oe(he),he.process)fe??={...he.process};return he}async function Ze(le){f.assertCurrent();let he=await f.request(le,w.signal);if(f.assertCurrent(),w.signal.aborted)ar("cancelled");let xe=$e(he);if(xe.inputSequence!==G)ar("job_input_sequence");if(!mt(xe)&&xe.leaseExpiresAtMs<=Date.now())ar("pty_binding_changed");return xe}function ye(le){if(f.assertCurrent(),w.signal.aborted||g.readyState!==xn.OPEN||g.bufferedAmount+Buffer.byteLength(le)>Co)ar("pty_output_backpressure");g.send(le)}function ze(le){if(le.firstCursor>F+1)F=le.firstCursor-1;for(let he of le.pty.output){if(he.cursor<=F)continue;if(he.cursor!==F+1)ar("pty_output_gap");let xe=Buffer.from(he.dataBase64,"base64");if(g.bufferedAmount+xe.length>Co)return!1;ye(xe),F=he.cursor}if(F!==le.nextCursor)ar("pty_output_gap");return!0}async function Xe(le,he){let xe;try{await Promise.race([e.emit(le,he),new Promise((Ve,Le)=>{xe=setTimeout(()=>Le(new r("pty_event_unavailable","Terminal metadata delivery timed out.")),2000)})])}finally{clearTimeout(xe)}}async function Te(){let le=AbortSignal.timeout(Wt),he=f.request({jobId:l.jobId,action:"cancel",input:{}},le),xe,Ve=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,Ve]);if(le.aborted)ar("pty_cleanup_unconfirmed");return $e(Le)}finally{le.removeEventListener("abort",xe)}}try{await new Promise((Le,Be)=>{let Ee=setTimeout(()=>{I(),Be(new r("pty_relay_unavailable","Terminal pairing timed out."))},5000),We=()=>{clearTimeout(Ee),Be(new r("cancelled","Terminal pairing was cancelled."))};if(w.signal.addEventListener("abort",We,{once:!0}),g.once("open",()=>{clearTimeout(Ee),w.signal.removeEventListener("abort",We),Le()}),w.signal.aborted)We()}),f.assertCurrent(),T=!0,z=await Ze({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 Ze({jobId:l.jobId,action:"inspect",input:{after:F}})}if(z.state!=="running"||z.inputSequence!==0||z.leaseExpiresAtMs<=Date.now())ar("pty_not_ready");await Xe("pty.ready",Oe(z)),re=!0,ye(JSON.stringify({t:"open",cols:z.pty.cols,rows:z.pty.rows,receipt:Oe(z)}));let he=!1,xe=0,Ve=!1;while(!w.signal.aborted){let Le=z.firstCursor>F+1,Be=ze(z);if(mt(z)){if(Be)break}else if(Le)he=!0;else if(he&&Be&&Date.now()>=xe){he=!1,xe=Date.now()+1000;let{cols:We,rows:nr}=z.pty;for(let or of[{cols:We,rows:nr>1?nr-1:2},{cols:We,rows:nr}]){if(mt(z))break;let Pr=++G;if(z=await Ze({jobId:l.jobId,action:"resize",input:{sequence:Pr,...or}}),z.inputSequence!==Pr)ar("job_input_sequence")}continue}let Ee=mt(z)||Ve?void 0:x.shift();if(Ee){M-=Do(Ee);let We=++G;try{z=await Ze("data"in Ee?{jobId:l.jobId,action:"input",input:{sequence:We,dataBase64:Ee.data.toString("base64")}}:{jobId:l.jobId,action:"resize",input:{sequence:We,cols:Ee.cols,rows:Ee.rows}})}catch(nr){if(!(nr instanceof r)||nr.code!=="job_input_backpressure")throw nr;G-=1,x.unshift(Ee),M+=Do(Ee),Ve=!0;continue}if(z.inputSequence!==We)ar("job_input_sequence")}else if(await new Promise((We)=>{let nr=setTimeout(We,Ve||!Be?10:50);if(S=()=>{clearTimeout(nr),We()},w.signal.aborted||!Ve&&x.length)S()}),Ve=!1,S=()=>{},!w.signal.aborted&&Be)try{z=await Ze({jobId:l.jobId,action:"inspect",input:{after:F}})}catch(We){if(!J||!(We instanceof r)||We.code!=="cancelled")throw We}}}catch(le){ke??=le}finally{if(re=!1,x.length=0,clearTimeout(W),e.signal.removeEventListener("abort",I),I(),T&&(!z||!mt(z)))try{z=await Te()}catch{z=void 0}try{if(!z||!mt(z)||z.pty?.cleanup!=="confirmed")ar("pty_cleanup_unconfirmed");let le=Oe(z);if(g.readyState===xn.OPEN)await new Promise((he)=>{let xe=setTimeout(he,500);g.send(JSON.stringify({t:"exit",code:z.exitCode,receipt:le}),()=>{clearTimeout(xe),he()})});await Xe("pty.stopped",le)}catch(le){ke??=le}g.terminate()}if(ke)throw ke;if(e.signal.aborted)ar("cancelled");if(!z)ar("pty_cleanup_unconfirmed");return{receipt:Oe(z)}}import{createHash as hi,randomUUID as An}from"crypto";import{spawnSync as Wo}from"child_process";import{closeSync as No,constants as Pn,fstatSync as gi,fsyncSync as bi,lstatSync as Bt,mkdirSync as wi,mkdtempSync as Uo,openSync as Lo,readFileSync as yi,readdirSync as zo,realpathSync as Lt,rmSync as In,unlinkSync as vi}from"fs";import{createConnection as ki}from"net";import{dirname as Si,join as at,sep as Ei}from"path";import{tmpdir as Oi}from"os";var xr=new Map,Vr=new Map;function $r(e,l){return hi("sha256").update(JSON.stringify([e,l])).digest("hex")}function ht(e){try{wi(e,{mode:448})}catch(f){if(!(f instanceof Error&&("code"in f)&&f.code==="EEXIST"))throw f}let l=Bt(e);if(!l.isDirectory()||l.isSymbolicLink()||!A(l)||Lt(e)!==e)throw new r("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function xi(e){let l;try{l=Bt(e)}catch(f){if(f instanceof Error&&"code"in f&&f.code==="ENOENT")return!1;throw f}return!l.isDirectory()||l.isSymbolicLink()||zo(e).length>0}function ur(e){let l=$r(e.root,e.runId),f=e.previousRuntimeDirectories?.find((I)=>xi(at(I,"jobs",l.slice(0,16))))??e.runtimeDirectory;ht(f);let g=at(f,"jobs");ht(g);let w=at(g,l.slice(0,16));if(e.maxScopes!==void 0){let I=zo(g);if(!Number.isSafeInteger(e.maxScopes)||e.maxScopes<1||I.length>e.maxScopes||!I.includes(l.slice(0,16))&&I.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.")}ht(w);let S=Uo(at(Fo(),"reason-j-"));try{return ht(S),{journalDirectory:w,scopeId:l,launchDirectory:S,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${An()}`:at(S,"control.sock"),disposeSocket:()=>In(S,{recursive:!0,force:!0})}}catch(I){throw In(S,{recursive:!0,force:!0}),I}}var Pi=60000,Ii=5000;function Di(e){if(process.platform==="win32")return Ni(e);let l=Wo("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:2000,env:{...process.env,LC_ALL:"C",LANG:"C"}}),f=l.status===0?/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(l.stdout.trim()):null,g=f?"JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(f[1]):-1;if(!f||g<0||g%3!==0)return null;let w=new Date(Number(f[6]),g/3,Number(f[2]),Number(f[3]),Number(f[4]),Number(f[5])).getTime();return Number.isFinite(w)?w:null}function Ni(e){let l=Wo(C("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:De()}),f=l.status===0?Date.parse(l.stdout.trim()):Number.NaN;return Number.isFinite(f)?f:null}function $o(e,l={}){let f=at(e.journalDirectory,"owner.lock"),g;try{g=Lo(f,Pn.O_RDONLY|Pn.O_NOFOLLOW)}catch{return null}try{let w=gi(g);if(!w.isFile()||w.nlink!==1||!A(w)||w.size>4096)return null;let S=null;try{S=JSON.parse(yi(g,"utf8"))}catch{}let I;if(S===null){if((l.now??Date.now)()-w.mtimeMs<Pi)return null;I={reason:"never_written",executorLaunchId:null}}else{let{version:M,scopeId:G,pid:F,createdAtMs:T,executorLaunchId:re}=S;if(M!==1||G!==e.scopeId||typeof re!=="string"||typeof F!=="number"||!Number.isSafeInteger(F)||F<1||F===process.pid||typeof T!=="number"||!Number.isSafeInteger(T))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")}}))(F))I={reason:"owner_exited",executorLaunchId:re};else{let z=(l.startedAtMs??Di)(F);if(z===null||z<=T+Ii)return null;I={reason:"pid_reused",executorLaunchId:re}}}let W=Bt(f);if(W.dev!==w.dev||W.ino!==w.ino)return null;vi(f);let x=Lo(e.journalDirectory,Pn.O_RDONLY);try{bi(x)}finally{No(x)}return I}catch{return null}finally{No(g)}}function Ko(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(xr.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 g={binding:l,key:f,terminals:new Map};if(l.previewAuthority&&l.environment)g.previews=To({authority:l.previewAuthority,runId:l.runId,expiresAtMs:l.expiresAtMs,executorLaunchId:l.executorLaunchId,environment:l.environment,isCurrent:()=>xr.get(g.key)===g,identity:()=>{try{return gt(l)}catch{return null}},inspect:(w,S)=>{if(xr.get(g.key)!==g)throw new r("preview_unavailable","The Hands supervisor is no longer current.");return Go(l,{jobId:w,action:"inspect",input:{after:0}},S)}});if(xr.set(f,g),l.operationId!==void 0)Vr.set(l.operationId,g);return()=>{if(xr.get(g.key)===g)xr.delete(g.key);if(l.operationId!==void 0&&Vr.get(l.operationId)===g)Vr.delete(l.operationId);g.previews?.dispose();for(let w of g.terminals.values())w.abort()}}var Li=5000,Bi=20;async function Ui(e){let l=(w)=>{throw new r("hands_rebind_unavailable",w)};if(!N(e.operationId)||!N(e.runId)||!N(e.fenceId)||!U(e.targetGeneration))l("Reason sent an invalid Hands rebind.");let f=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()+Li;;){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=gt(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((I)=>setTimeout(I,Bi))}if(Vr.get(e.operationId)!==f||xr.get(f.key)!==f)l("The Hands supervisor is no longer current.");let g=$r(e.root,e.runId);if(f.key===g)return;if(xr.has(g))l("The taking run already has a live Hands job supervisor.");xr.delete(f.key);for(let w of f.terminals.values())w.abort();f.key=g,xr.set(g,f)}function nt(e){let l="operationId"in e?Vr.get(e.operationId):xr.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 Hi(e){let l=xr.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 zi(e){let l=xr.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 qi(e){let l=$r(e.root,e.runId),f=xr.get(l),g=f?.binding,w=g?.runId,S=g?.previewAuthority,I=g?.environment,W=e.owner&&{...e.owner},x=e.authority&&{...e.authority},M=()=>{throw new r("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!f||!g||!S||!I||!W||!x||!g.workspace)return M();let G=Object.freeze({...g.workspace}),F=gt(g),T=I.current(),re=()=>{if(xr.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||O(e.workspace)!==O(G))M();let z=gt(g),fe=I.current();if(z.generation!==F.generation||z.fenceId!==F.fenceId||fe.run_id!==w||fe.device_id!==e.deviceId||fe.root_id!==e.rootId||fe.snapshot_id!==T.snapshot_id||fe.revision!==T.revision||fe.binding.target_generation!==F.generation||fe.binding.target_fence_id!==F.fenceId||x.device_id!==e.deviceId||x.binding!==fe.binding.kind||x.target_revision!==fe.binding.target_revision||x.root_grant_revision!==fe.binding.root_grant_revision||x.target_generation!==F.generation||x.target_fence_id!==F.fenceId)M()};if(re(),new URL(e.session.relayUrl).origin!==S.relayOrigin||f.terminals.has(e.session.jobId)||f.terminals.size>=4)return M();let J=new AbortController;f.terminals.set(e.session.jobId,J);try{return await Ho({session:{...e.session,leaseExpiresAtMs:Math.min(e.session.leaseExpiresAtMs,F.expiresAtMs,Date.parse(T.expires_at))},signal:AbortSignal.any([e.signal,J.signal]),emit:e.emit,binding:{assertCurrent:re,environment:{revision:T.revision,snapshotId:T.snapshot_id},scope:{runId:e.runId,deviceId:e.deviceId,rootId:e.rootId,workspace:G,binding:T.binding.kind,targetRevision:T.binding.target_revision,rootGrantRevision:T.binding.root_grant_revision,generation:F.generation,fenceId:F.fenceId,executorLaunchId:F.executorLaunchId},request:(z,fe)=>dr(F,Fr(JSON.stringify({...z,type:"job",version:2,generation:F.generation,id:An()})),fe)}})}finally{if(f.terminals.get(e.session.jobId)===J)f.terminals.delete(e.session.jobId)}}async function Wi(e){if(ce(e.payload.jobId))throw new r("pty_binding_required","PTY jobs require the bound terminal capability.");let l=xr.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 Go(l,e.payload,e.signal)}var Mi=1e4,Fi=20,$i=ve/2,Yi=Ge/2,Xi=(e)=>e.output.reduce((l,f)=>l+f.text.length,0);async function Go(e,l,f){if(Object.keys(l).some((M)=>!["jobId","action","input","waitForExitMs"].includes(M)))throw new r("invalid_payload","Unexpected job control field.");let{waitForExitMs:g,...w}=l;if(g!==void 0&&(w.action!=="start"||typeof w.input!=="object"||w.input===null||!("script"in w.input)||typeof g!=="number"||!Number.isSafeInteger(g)||g<1||g>Mi))throw new r("invalid_payload","Only a script start may wait for its job, within its bound.");let S=(M)=>{let G=gt(e);return dr(G,Fr(JSON.stringify({...M,type:"job",version:2,generation:G.generation,id:An()})),f)},I=await S(w);if(g===void 0)return I;let W=Date.now()+g,x=I;while(x.ok&&["starting","running"].includes(x.job.state)&&x.job.output.length<$i&&Xi(x.job)<Yi&&!f.aborted&&Date.now()<W){if(await new Promise((M)=>setTimeout(M,Math.min(Fi,W-Date.now()))),f.aborted)break;try{let M=await S({jobId:w.jobId,action:"inspect",input:{after:0}});if(!M.ok)break;x=M}catch{break}}return x}function gt(e){if(e.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","Hands authority expired.");let l=e.readIdentity?e.readIdentity():e;if(!l||!U(l.generation)||!N(l.fenceId)||l.generation<e.generation||l.generation===e.generation&&l.fenceId!==e.fenceId)throw new r("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return e.generation=l.generation,e.fenceId=l.fenceId,{...e}}function dr(e,l,f){if(f.aborted)return Promise.reject(new r("cancelled","Job control was cancelled."));return new Promise((g,w)=>{let S=ki(e.socketPath),I="",W=!1,x,M=(F,T)=>{if(W)return;if(W=!0,clearTimeout(x),f.removeEventListener("abort",G),S.destroy(),F)w(F);else g(T)},G=()=>M(new r("cancelled","Job control waiter cancelled; inspect before retrying mutations."));f.addEventListener("abort",G,{once:!0}),S.setEncoding("utf8"),x=setTimeout(()=>M(new r("hands_job_result_unknown","Job control timed out; inspect before retrying mutations.")),Math.min(1e4,Math.max(1,e.expiresAtMs-Date.now()))),S.on("error",()=>M(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",(F)=>{if(I+=F,Buffer.byteLength(I)>
|
|
4
|
-
`)}var
|
|
2
|
+
import{Gt,j}from"./vm-hands-entry-lite-8qvsnkvv.js";import{ue,Ce,Z,Ae,de,rr,Qe,X,O,H,tn}from"./vm-hands-entry-lite-3krzmhkk.js";import{Do,ei}from"./vm-hands-entry-lite-k83rkcys.js";import{So,P,Je,Se,Ze,ne,Xe,qn,Ee,Xt,ae,U,N,ce,Hr,zr,Vn}from"./vm-hands-entry-lite-5zdybh8s.js";import{Pe,oe,pe,Y,Re,q,Q}from"./vm-hands-entry-lite-b8yapqfn.js";import{It,kr,st,V,D,R,b}from"./vm-hands-entry-lite-kz48x6p0.js";import{Er,xr,vn,no,He,Sn}from"./vm-hands-entry-lite-hzh8fdxx.js";import{K}from"./vm-hands-entry-lite-r3yp6cr9.js";import{Ni}from"./vm-hands-entry-lite-7ja63pfz.js";import{p,ze,Dt,at,io,_e,we}from"./vm-hands-entry-lite-h6rhk6h1.js";import{v,h,ao}from"./vm-hands-entry-lite-52x189kf.js";import{E}from"./vm-hands-entry-lite-txd50spx.js";import{Qt}from"./vm-hands-entry-lite-bvb4nvxr.js";import{a,ie,Lo}from"./vm-hands-entry-lite-cf1x5cbr.js";import{L,Ri,Oi,jo,y,t,k,Et,o,d,u,i,c,g,ee,s,n}from"./vm-hands-entry-lite-5agyspqp.js";import{Di}from"./vm-hands-entry-lite-d2fveq6h.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{Ho,se,zo,C,De,Me,A}from"./vm-hands-entry-lite-vdhgwmmp.js";var _i=()=>{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,I=jo(w.input),W=_[I]??I;return`Invalid input: expected ${S}, received ${W}`}case"invalid_value":if(w.values.length===1)return`Invalid input: expected ${Oi(w.values[0])}`;return`Invalid option: expected one of ${Ri(w.values,"|")}`;case"too_big":{let S=w.inclusive?"<=":"<",I=l(w.origin);if(I)return`Too big: expected ${w.origin??"value"} to have ${S}${w.maximum.toString()} ${I.unit??"elements"}`;return`Too big: expected ${w.origin??"value"} to be ${S}${w.maximum.toString()}`}case"too_small":{let S=w.inclusive?">=":">",I=l(w.origin);if(I)return`Too small: expected ${w.origin} to have ${S}${w.minimum.toString()} ${I.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":""}: ${Ri(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((I)=>`'${I}'`).join(" | ")}`;return"Invalid input";case"invalid_element":return`Invalid value in ${w.origin}`;default:return"Invalid input"}}};function En(){return{localeError:_i()}}L(En());class pt extends Error{}function xo(e){let l;try{l=new URL(e)}catch{throw new pt("The proxy must be a URL like https://proxy.example.com:3128.")}if(l.protocol!=="https:"&&l.protocol!=="http:")throw new pt("The proxy URL must use the https or http scheme.");if(!l.hostname)throw new pt("The proxy URL must name a host.");if(l.port!==""&&Number(l.port)<1)throw new pt("The proxy URL must use a port between 1 and 65535.");if(l.pathname!==""&&l.pathname!=="/"||l.search||l.hash)throw new pt("The proxy URL must not carry a path, query, or fragment.");return l.toString()}import{createHash as mi}from"crypto";import{isAbsolute as Po,join as Io,relative as Ao,resolve as Vt,sep as To}from"path";var Jt=t().min(1).refine(Po,"absolute path required"),On=c({version:n(1),apiOrigin:Et(),channel:s(["staging","production"]),stateDirectory:Jt,workspaceRoot:Jt,lifetime:s(["persistent","ephemeral"]),executionMode:s(["confined","host"]).default("confined"),name:t().min(1).max(160).default("Reason headless worker"),slots:o().int().min(1).max(4).default(1),shutdownGraceMs:o().int().min(0).max(300000).default(30000),proxy:c({version:n(Gt),url:t().refine((e)=>{try{return xo(e)===e}catch{return!1}},"invalid proxy URL"),caFile:Jt.optional()}).optional(),userChrome:d().optional(),cloudSessions:n(!0).optional(),localLogins:d().optional(),folders:u(Jt).min(1).max(31).optional()}),hi=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,B=g("channel",[On,On.extend({channel:n("pr"),apiOrigin:t(),prEnvironment:t()}),On.extend({channel:n("local-qa"),apiOrigin:t()})]).superRefine((e,l)=>{if(e.channel==="local-qa"){if(!hi.test(e.apiOrigin))l.addIssue({code:"custom",message:"local QA worker requires an exact HTTPS trycloudflare.com quick-tunnel origin"})}else if(e.channel==="pr"){let _=e.prEnvironment,w=/^https:\/\/([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)\.up\.railway\.app$/.exec(e.apiOrigin),S=w?.[1]?.match(/(?:^|-)pr-[0-9]+(?=-|$)/g)?.map((I)=>I.replace(/^-/,""));if(!_||/^pr-[1-9][0-9]*$/.exec(_)?.[0]!==_||w?.[0]!==e.apiOrigin||S?.length!==1||S[0]!==_)l.addIssue({code:"custom",message:"PR worker requires explicit prEnvironment and an exact same-PR HTTPS Railway origin"})}else{let _=new URL(e.apiOrigin);if(_.origin!==e.apiOrigin||_.username||_.password||_.protocol!=="https:"&&!(_.protocol==="http:"&&ei(_.origin))||!ei(_.origin)&&!Do(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 Io(e.stateDirectory,`headless-${e.channel==="pr"?e.prEnvironment:e.channel}`)}function je(e,l){if(Ur(l,e))return!1;return!Ur(e,l)||E(Io(To,Ao(Vt(e),Vt(l))))}function Ur(e,l){let f=Ao(Vt(e),Vt(l));return f===""||f!==".."&&!f.startsWith(`..${To}`)&&!Po(f)}function te(e){let{proxy:l,userChrome:f,cloudSessions:_,localLogins:w,folders:S,...I}=e;return mi("sha256").update(JSON.stringify(I)).digest("hex")}var gi=4,bi=[2375,2376,9222,9229];function pr(e){let l=new Set(bi);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 wi=60000;function Co(e){let l=new AbortController,f=new Map,_=(x)=>JSON.stringify([x.jobId,x.port]);function w(x){let M=e.authority.owner;if(l.signal.aborted||!e.isCurrent()||e.expiresAtMs<=Date.now()||x.organization_id!==M.organization_id||x.user_id!==M.user_id||x.device_id!==M.device_id)Jr()}function S(x){let M;try{M=e.environment.current()}catch{return null}return M.binding.target_generation===x.generation&&M.binding.target_fence_id===x.fenceId&&M.run_id===e.runId&&M.device_id===e.authority.owner.device_id&&M.root_id===e.authority.rootId?M:null}async function I(x,M,G){let F=await W(x,M,G);if(F!=="moved")return F;let T=await W(x,M,G);return T==="moved"?null:T}async function W(x,M,G){try{w(e.authority.owner);let F=e.identity();if(!F||G.aborted||x.expiresAtMs<=Date.now()||x.expiresAtMs>e.expiresAtMs)return null;let T=M.opened,re=T!==void 0&&F.generation>T.generation,J=S(F);if(re){if(J){if(J.revision<=T.revision||x.expiresAtMs>Date.parse(J.expires_at)||J.binding.target_revision!==T.attachmentRevision||J.binding.root_grant_revision!==T.grantRevision)return null;M.recoveringSinceMs=void 0}else if(Date.now()-(M.recoveringSinceMs??=Date.now())>wi)return null}else if(!J||x.expiresAtMs>Date.parse(J.expires_at)||T&&(F.generation!==T.generation||F.fenceId!==T.fenceId))return null;let z=await e.inspect(x.jobId,G),fe=e.identity(),ve=fe&&S(fe);w(e.authority.owner);let be=J&&{generation:F.generation,fenceId:F.fenceId,snapshotId:J.snapshot_id,revision:J.revision,attachmentRevision:J.binding.target_revision,grantRevision:J.binding.root_grant_revision},Oe=re?T:be;if(G.aborted||!fe)return null;if(fe.generation!==F.generation||fe.fenceId!==F.fenceId||ve?.snapshot_id!==J?.snapshot_id||ve?.revision!==J?.revision)return"moved";let $e=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!==F.generation||!Oe||!$e)return null;if(($e.snapshotId!==Oe.snapshotId||$e.revision!==Oe.revision)&&(re||!e.environment.carried($e.snapshotId,$e.revision)))return null;if(!T&&F.generation===x.generation&&F.fenceId===x.fenceId)M.opened={...Oe,...$e};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:Oe.attachmentRevision,grantRevision:Oe.grantRevision,generation:Oe.generation,fenceId:Oe.fenceId,jobId:z.job.jobId,port:x.port,expiresAtMs:x.expiresAtMs}}}catch{return null}}return{async open(x,M,G){w(M);let{binding:F,deviceRelayUrl:T}=at(x);if(G.aborted||F.expiresAtMs<=Date.now()||F.expiresAtMs>Date.now()+p.lifetimeMs||new URL(T).origin!==e.authority.relayOrigin)Jr();let re=_(F),J=f.get(re);if(J){if(!ze(J.binding,F)||J.relay!==T)Jr();if(await J.opened,!await Dt(()=>J.port.check())||G.aborted||J.abort.signal.aborted)Jr();return{opened:!0,binding:F}}if(f.size>=gi)Jr();let z=new AbortController,fe={},ve=we({binding:F,deniedPorts:e.authority.deniedPorts,readCurrentJob:()=>I(F,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 Oe=_e({binding:F,deviceRelayUrl:T,port:ve,signal:z.signal}),$e={binding:F,relay:T,abort:z,port:ve,opened:Oe};f.set(re,$e);let qe=()=>{if(G.removeEventListener("abort",be),l.signal.removeEventListener("abort",be),f.get(re)===$e)f.delete(re)};try{if((await Oe).closed.then(qe),G.removeEventListener("abort",be),w(M),z.signal.aborted||!await Dt(()=>ve.check()))Jr();return{opened:!0,binding:F}}catch{z.abort(),qe(),Jr()}},async close(x,M){w(M);let{binding:G}=io(x),F=f.get(_(G));if(!F||!ze(F.binding,G))Jr();return F.abort.abort(),await F.opened.then((T)=>T.closed,()=>{return}),{closed:!0,binding:G}},dispose(){l.abort();for(let x of f.values())x.abort.abort();f.clear()}}}import{WebSocket as xn}from"ws";var No=(e)=>("data"in e)?e.data.length:e.bytes,Bo=2*Xe;function ar(e){throw new r(e,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var _t=(e)=>!["starting","running"].includes(e.state);function Gi(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((M)=>!_.includes(M))||!ae(l)||!ae(e.session_id)||typeof e.expires_at!=="string"||typeof e.relay_url!=="string"||e.relay_url.length>4096||![e.cols,e.rows].every((M)=>Number.isSafeInteger(M)&&Number(M)>=1&&Number(M)<=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 I;try{I=new URL(e.relay_url)}catch{return ar("invalid_pty_request")}if(!["ws:","wss:"].includes(I.protocol)||I.username||I.password||I.hash||I.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(I.hostname))ar("invalid_pty_request");let W=Date.parse(e.expires_at);if(!Number.isSafeInteger(W)||W<=f)ar("invalid_pty_request");return{workspace:H(e.workspace)??ar("invalid_pty_request"),session:{jobId:S.jobId,sessionId:e.session_id,operationId:l,relayUrl:I.href,cols:Number(e.cols),rows:Number(e.rows),leaseExpiresAtMs:Math.min(W,f+43200000)}}}async function Mo(e){let{session:l,binding:f}=e;if(f.assertCurrent(),e.signal.aborted||Date.now()>=l.leaseExpiresAtMs)ar("cancelled");let _=new xn(l.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:ne}),w=new AbortController,S=()=>{},I=()=>{w.abort(),S()};e.signal.addEventListener("abort",I,{once:!0});let W=setTimeout(I,Math.max(1,l.leaseExpiresAtMs-Date.now())),x=[],M=0,G=0,F=0,T=!1,re=!1,J=!1,z,fe,ve,be=(le)=>{ve=new r(le,"Bound terminal input was refused."),I()};_.on("error",()=>be("pty_relay_unavailable")),_.on("close",I),_.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=x.at(-1),Le=he&&Ke!==void 0&&"data"in Ke&&Ke.data.length+xe.length<=ne;if(xe.length>ne||M+xe.length>qn){be("pty_input_backpressure");return}if(Le)Ke.data=Buffer.concat([Ke.data,xe]);else if(he)x.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,I();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");x.push({cols:Be.cols,rows:Be.rows,bytes:xe.length})}catch{be("invalid_pty_control");return}M+=xe.length,S()});function Oe(le){return Vn(JSON.stringify({...f.scope,version:1,sessionId:l.sessionId,operationId:l.operationId,job:{...le,output:[],pty:le.pty?{...le.pty,output:[]}:void 0}}))}function $e(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(Oe(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=$e(he);if(xe.inputSequence!==G)ar("job_input_sequence");if(!_t(xe)&&xe.leaseExpiresAtMs<=Date.now())ar("pty_binding_changed");return xe}function ye(le){if(f.assertCurrent(),w.signal.aborted||_.readyState!==xn.OPEN||_.bufferedAmount+Buffer.byteLength(le)>Bo)ar("pty_output_backpressure");_.send(le)}function Fe(le){if(le.firstCursor>F+1)F=le.firstCursor-1;for(let he of le.pty.output){if(he.cursor<=F)continue;if(he.cursor!==F+1)ar("pty_output_gap");let xe=Buffer.from(he.dataBase64,"base64");if(_.bufferedAmount+xe.length>Bo)return!1;ye(xe),F=he.cursor}if(F!==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 Te(){let le=AbortSignal.timeout(Xt),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 $e(Le)}finally{le.removeEventListener("abort",xe)}}try{await new Promise((Le,Be)=>{let ke=setTimeout(()=>{I(),Be(new r("pty_relay_unavailable","Terminal pairing timed out."))},5000),We=()=>{clearTimeout(ke),Be(new r("cancelled","Terminal pairing was cancelled."))};if(w.signal.addEventListener("abort",We,{once:!0}),_.once("open",()=>{clearTimeout(ke),w.signal.removeEventListener("abort",We),Le()}),w.signal.aborted)We()}),f.assertCurrent(),T=!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:F}})}if(z.state!=="running"||z.inputSequence!==0||z.leaseExpiresAtMs<=Date.now())ar("pty_not_ready");await Ve("pty.ready",Oe(z)),re=!0,ye(JSON.stringify({t:"open",cols:z.pty.cols,rows:z.pty.rows,receipt:Oe(z)}));let he=!1,xe=0,Ke=!1;while(!w.signal.aborted){let Le=z.firstCursor>F+1,Be=Fe(z);if(_t(z)){if(Be)break}else if(Le)he=!0;else if(he&&Be&&Date.now()>=xe){he=!1,xe=Date.now()+1000;let{cols:We,rows:nr}=z.pty;for(let or of[{cols:We,rows:nr>1?nr-1:2},{cols:We,rows:nr}]){if(_t(z))break;let Pr=++G;if(z=await qe({jobId:l.jobId,action:"resize",input:{sequence:Pr,...or}}),z.inputSequence!==Pr)ar("job_input_sequence")}continue}let ke=_t(z)||Ke?void 0:x.shift();if(ke){M-=No(ke);let We=++G;try{z=await qe("data"in ke?{jobId:l.jobId,action:"input",input:{sequence:We,dataBase64:ke.data.toString("base64")}}:{jobId:l.jobId,action:"resize",input:{sequence:We,cols:ke.cols,rows:ke.rows}})}catch(nr){if(!(nr instanceof r)||nr.code!=="job_input_backpressure")throw nr;G-=1,x.unshift(ke),M+=No(ke),Ke=!0;continue}if(z.inputSequence!==We)ar("job_input_sequence")}else if(await new Promise((We)=>{let nr=setTimeout(We,Ke||!Be?10:50);if(S=()=>{clearTimeout(nr),We()},w.signal.aborted||!Ke&&x.length)S()}),Ke=!1,S=()=>{},!w.signal.aborted&&Be)try{z=await qe({jobId:l.jobId,action:"inspect",input:{after:F}})}catch(We){if(!J||!(We instanceof r)||We.code!=="cancelled")throw We}}}catch(le){ve??=le}finally{if(re=!1,x.length=0,clearTimeout(W),e.signal.removeEventListener("abort",I),I(),T&&(!z||!_t(z)))try{z=await Te()}catch{z=void 0}try{if(!z||!_t(z)||z.pty?.cleanup!=="confirmed")ar("pty_cleanup_unconfirmed");let le=Oe(z);if(_.readyState===xn.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:Oe(z)}}import{createHash as yi,randomUUID as An}from"crypto";import{spawnSync as $o}from"child_process";import{closeSync as Wo,constants as Pn,fstatSync as vi,fsyncSync as ki,lstatSync as Lt,mkdirSync as Si,mkdtempSync as Ko,openSync as Fo,readFileSync as Ei,readdirSync as Go,realpathSync as Nt,rmSync as In,unlinkSync as xi}from"fs";import{createConnection as Pi}from"net";import{dirname as Ii,join as tt,sep as Ai}from"path";import{tmpdir as Ti}from"os";var Or=new Map,Vr=new Map;function $r(e,l){return yi("sha256").update(JSON.stringify([e,l])).digest("hex")}function mt(e){try{Si(e,{mode:448})}catch(f){if(!(f instanceof Error&&("code"in f)&&f.code==="EEXIST"))throw f}let l=Lt(e);if(!l.isDirectory()||l.isSymbolicLink()||!A(l)||Nt(e)!==e)throw new r("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function Ci(e){let l;try{l=Lt(e)}catch(f){if(f instanceof Error&&"code"in f&&f.code==="ENOENT")return!1;throw f}return!l.isDirectory()||l.isSymbolicLink()||Go(e).length>0}function hr(e){let l=$r(e.root,e.runId),f=e.previousRuntimeDirectories?.find((I)=>Ci(tt(I,"jobs",l.slice(0,16))))??e.runtimeDirectory;mt(f);let _=tt(f,"jobs");mt(_);let w=tt(_,l.slice(0,16));if(e.maxScopes!==void 0){let I=Go(_);if(!Number.isSafeInteger(e.maxScopes)||e.maxScopes<1||I.length>e.maxScopes||!I.includes(l.slice(0,16))&&I.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.")}mt(w);let S=Ko(tt(zo(),"reason-j-"));try{return mt(S),{journalDirectory:w,scopeId:l,launchDirectory:S,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${An()}`:tt(S,"control.sock"),disposeSocket:()=>In(S,{recursive:!0,force:!0})}}catch(I){throw In(S,{recursive:!0,force:!0}),I}}var Hi=60000,Li=5000;function Bi(e){if(process.platform==="win32")return ji(e);let l=$o("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 ji(e){let l=$o(C("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:De()}),f=l.status===0?Date.parse(l.stdout.trim()):Number.NaN;return Number.isFinite(f)?f:null}function Jo(e,l={}){let f=tt(e.journalDirectory,"owner.lock"),_;try{_=Fo(f,Pn.O_RDONLY|Pn.O_NOFOLLOW)}catch{return null}try{let w=vi(_);if(!w.isFile()||w.nlink!==1||!A(w)||w.size>4096)return null;let S=null;try{S=JSON.parse(Ei(_,"utf8"))}catch{}let I;if(S===null){if((l.now??Date.now)()-w.mtimeMs<Hi)return null;I={reason:"never_written",executorLaunchId:null}}else{let{version:M,scopeId:G,pid:F,createdAtMs:T,executorLaunchId:re}=S;if(M!==1||G!==e.scopeId||typeof re!=="string"||typeof F!=="number"||!Number.isSafeInteger(F)||F<1||F===process.pid||typeof T!=="number"||!Number.isSafeInteger(T))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")}}))(F))I={reason:"owner_exited",executorLaunchId:re};else{let z=(l.startedAtMs??Bi)(F);if(z===null||z<=T+Li)return null;I={reason:"pid_reused",executorLaunchId:re}}}let W=Lt(f);if(W.dev!==w.dev||W.ino!==w.ino)return null;xi(f);let x=Fo(e.journalDirectory,Pn.O_RDONLY);try{ki(x)}finally{Wo(x)}return I}catch{return null}finally{Wo(_)}}function Vo(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(Or.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=Co({authority:l.previewAuthority,runId:l.runId,expiresAtMs:l.expiresAtMs,executorLaunchId:l.executorLaunchId,environment:l.environment,isCurrent:()=>Or.get(_.key)===_,identity:()=>{try{return ht(l)}catch{return null}},inspect:(w,S)=>{if(Or.get(_.key)!==_)throw new r("preview_unavailable","The Hands supervisor is no longer current.");return qo(l,{jobId:w,action:"inspect",input:{after:0}},S)}});if(Or.set(f,_),l.operationId!==void 0)Vr.set(l.operationId,_);return()=>{if(Or.get(_.key)===_)Or.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 Mi=5000,Wi=20;async function Ki(e){let l=(w)=>{throw new r("hands_rebind_unavailable",w)};if(!N(e.operationId)||!N(e.runId)||!N(e.fenceId)||!U(e.targetGeneration))l("Reason sent an invalid Hands rebind.");let f=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()+Mi;;){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=ht(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((I)=>setTimeout(I,Wi))}if(Vr.get(e.operationId)!==f||Or.get(f.key)!==f)l("The Hands supervisor is no longer current.");let _=$r(e.root,e.runId);if(f.key===_)return;if(Or.has(_))l("The taking run already has a live Hands job supervisor.");Or.delete(f.key);for(let w of f.terminals.values())w.abort();f.key=_,Or.set(_,f)}function it(e){let l="operationId"in e?Vr.get(e.operationId):Or.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 Ji(e){let l=Or.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 Zi(e){let l=Or.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 Xi(e){let l=$r(e.root,e.runId),f=Or.get(l),_=f?.binding,w=_?.runId,S=_?.previewAuthority,I=_?.environment,W=e.owner&&{...e.owner},x=e.authority&&{...e.authority},M=()=>{throw new r("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!f||!_||!S||!I||!W||!x||!_.workspace)return M();let G=Object.freeze({..._.workspace}),F=ht(_),T=I.current(),re=()=>{if(Or.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||O(e.workspace)!==O(G))M();let z=ht(_),fe=I.current();if(z.generation!==F.generation||z.fenceId!==F.fenceId||fe.run_id!==w||fe.device_id!==e.deviceId||fe.root_id!==e.rootId||fe.snapshot_id!==T.snapshot_id||fe.revision!==T.revision||fe.binding.target_generation!==F.generation||fe.binding.target_fence_id!==F.fenceId||x.device_id!==e.deviceId||x.binding!==fe.binding.kind||x.target_revision!==fe.binding.target_revision||x.root_grant_revision!==fe.binding.root_grant_revision||x.target_generation!==F.generation||x.target_fence_id!==F.fenceId)M()};if(re(),new URL(e.session.relayUrl).origin!==S.relayOrigin||f.terminals.has(e.session.jobId)||f.terminals.size>=4)return M();let J=new AbortController;f.terminals.set(e.session.jobId,J);try{return await Mo({session:{...e.session,leaseExpiresAtMs:Math.min(e.session.leaseExpiresAtMs,F.expiresAtMs,Date.parse(T.expires_at))},signal:AbortSignal.any([e.signal,J.signal]),emit:e.emit,binding:{assertCurrent:re,environment:{revision:T.revision,snapshotId:T.snapshot_id},scope:{runId:e.runId,deviceId:e.deviceId,rootId:e.rootId,workspace:G,binding:T.binding.kind,targetRevision:T.binding.target_revision,rootGrantRevision:T.binding.root_grant_revision,generation:F.generation,fenceId:F.fenceId,executorLaunchId:F.executorLaunchId},request:(z,fe)=>fr(F,Hr(JSON.stringify({...z,type:"job",version:2,generation:F.generation,id:An()})),fe)}})}finally{if(f.terminals.get(e.session.jobId)===J)f.terminals.delete(e.session.jobId)}}async function Yi(e){if(ce(e.payload.jobId))throw new r("pty_binding_required","PTY jobs require the bound terminal capability.");let l=Or.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 qo(l,e.payload,e.signal)}var Fi=1e4,Ui=20,zi=Se/2,$i=Je/2,Vi=(e)=>e.output.reduce((l,f)=>l+f.text.length,0);async function qo(e,l,f){if(Object.keys(l).some((M)=>!["jobId","action","input","waitForExitMs"].includes(M)))throw new r("invalid_payload","Unexpected job control field.");let{waitForExitMs:_,...w}=l;if(_!==void 0&&(w.action!=="start"||typeof w.input!=="object"||w.input===null||!("script"in w.input)||typeof _!=="number"||!Number.isSafeInteger(_)||_<1||_>Fi))throw new r("invalid_payload","Only a script start may wait for its job, within its bound.");let S=(M)=>{let G=ht(e);return fr(G,Hr(JSON.stringify({...M,type:"job",version:2,generation:G.generation,id:An()})),f)},I=await S(w);if(_===void 0)return I;let W=Date.now()+_,x=I;while(x.ok&&["starting","running"].includes(x.job.state)&&x.job.output.length<zi&&Vi(x.job)<$i&&!f.aborted&&Date.now()<W){if(await new Promise((M)=>setTimeout(M,Math.min(Ui,W-Date.now()))),f.aborted)break;try{let M=await S({jobId:w.jobId,action:"inspect",input:{after:0}});if(!M.ok)break;x=M}catch{break}}return x}function ht(e){if(e.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","Hands authority expired.");let l=e.readIdentity?e.readIdentity():e;if(!l||!U(l.generation)||!N(l.fenceId)||l.generation<e.generation||l.generation===e.generation&&l.fenceId!==e.fenceId)throw new r("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return e.generation=l.generation,e.fenceId=l.fenceId,{...e}}function fr(e,l,f){if(f.aborted)return Promise.reject(new r("cancelled","Job control was cancelled."));return new Promise((_,w)=>{let S=Pi(e.socketPath),I="",W=!1,x,M=(F,T)=>{if(W)return;if(W=!0,clearTimeout(x),f.removeEventListener("abort",G),S.destroy(),F)w(F);else _(T)},G=()=>M(new r("cancelled","Job control waiter cancelled; inspect before retrying mutations."));f.addEventListener("abort",G,{once:!0}),S.setEncoding("utf8"),x=setTimeout(()=>M(new r("hands_job_result_unknown","Job control timed out; inspect before retrying mutations.")),Math.min(1e4,Math.max(1,e.expiresAtMs-Date.now()))),S.on("error",()=>M(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",(F)=>{if(I+=F,Buffer.byteLength(I)>Ze)M(new r("hands_job_result_unknown","Hands job result exceeded its bound."))}),S.once("end",()=>{if(Date.now()>=e.expiresAtMs){M(new r("hands_job_result_unknown","Hands authority expired before the result was acknowledged."));return}try{let F=zr(I.trim());if(F.id!==l.id||F.generation!==e.generation||F.ok&&F.job.jobId!==l.jobId)throw Error("identity");M(void 0,F)}catch{M(new r("hands_job_result_unknown","Hands job response identity or shape was invalid."))}}),S.once("close",()=>{if(!W)M(new r("hands_job_result_unknown","Hands job control closed before an acknowledged result."))})})}function Uo(e){let l=Nt(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),I=Or.get(S),W=I?.binding;if(!W?.environment||!W.workspace||W.localGithubConfinement!==!0)throw Error("local_device_gh_confinement_unavailable");let x=W.environment.current(),M=()=>{w();let F=W.environment.current(),T=ht(W);if(Or.get(S)!==I||F.github_auth!=="local_gh"||F.run_id!==W.runId||f.runId!==e.runId||F.device_id!==f.deviceId||F.root_id!==f.rootId||String(F.binding.root_grant_revision)!==f.rootRevision||F.binding.target_generation!==f.generation||F.binding.target_fence_id!==f.fenceId||T.generation!==f.generation||T.fenceId!==f.fenceId||F.snapshot_id!==x.snapshot_id||F.revision!==x.revision)throw Error("local_device_gh_authority_changed")};M();let G=ie(l,W.workspace);return{root:G.boundary,signal:e.signal,deadlineMs:_,privateDirectory:Ii(W.environment.path),repoPath:G.path,readOnly:f.readOnly,forbiddenSecretValues:Object.values(x.variables),secretNames:(F)=>Object.entries(x.variables).filter(([,T])=>T.trim()===F.trim()).map(([T])=>`variable ${T}`),assertCurrent:M}}async function Qi(e,l){let f=Pe.parse(e.request),_=oe.parse(e.authority);if(_.contributorRefresh&&f.kind==="read"&&_.readOnly)return l(Uo(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(Uo(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=Nt(e.root),I=Lt(S),W=Date.parse(e.leaseUntil);if(!Number.isFinite(W)||W<=Date.now())throw Error("local_device_gh_lease_expired");let x=Nt(Ti());if(x===S||x.startsWith(S+Ai))throw Error("local_device_gh_private_scope_unavailable");let M=Ko(tt(x,"reason-gh-merge-"));try{mt(M);let G=()=>{if(e.signal.throwIfAborted(),Date.now()>=W)throw Error("local_device_gh_lease_expired");let F=Lt(e.root);if(F.isSymbolicLink()||F.dev!==I.dev||F.ino!==I.ino||Nt(e.root)!==S)throw Error("local_device_gh_authority_changed");mt(M)};return G(),await l({root:S,readOnly:!1,privateDirectory:M,forbiddenSecretValues:[],signal:e.signal,deadlineMs:W,assertCurrent:G})}finally{In(M,{recursive:!0,force:!0})}}var Zo=43200000;function gt(e){return Number.isSafeInteger(e)&&Math.abs(e)<=8640000000000000?e:null}function Yo(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function Xo(e,l){return Object.keys(e).length===l.length&&l.every((f)=>Object.hasOwn(e,f))}function eo(e){if(!Yo(e)||!Xo(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"||gt(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(!Yo(f)||!Xo(f,["kind","status","sha256","observed_at_ms"])||f.observed_at_ms!==null&&(typeof f.observed_at_ms!=="number"||gt(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()}),Qo=new RegExp(st.tokenPattern),qi=c({token_url:Et().max(2048),request_token:t().min(1).max(8192).regex(Qo),aws_credentials_url:Et().max(2048).nullable()});function es(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(!Qo.test(e.request_token)||!f(e.token_url,st.tokenPath)||e.aws_credentials_url!==null&&!f(e.aws_credentials_url,st.awsPath))return null;return{REASON_OIDC_TOKEN_URL:e.token_url,REASON_OIDC_REQUEST_TOKEN:e.request_token,...e.aws_credentials_url!==null?{AWS_CONTAINER_CREDENTIALS_FULL_URI:e.aws_credentials_url,AWS_CONTAINER_AUTHORIZATION_TOKEN:e.request_token}:{}}}function rs(e){return new TextEncoder().encode(e).byteLength}function ea(e){return rs(JSON.stringify(e)+`
|
|
4
|
+
`)}var mr=c({version:n(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(It),t().refine((e)=>!e.includes("\x00")&&rs(e)<=V.valueBytes)).refine((e)=>Object.keys(e).length<=V.variables),github_auth:n("local_gh").optional(),git:c({base_url:Et().max(2048),token:t().min(1).max(4096).regex(/^[A-Za-z0-9._~-]+$/),expires_at:y.datetime({offset:!0})}).nullable(),cloud_access:qi.optional()}).refine((e)=>e.github_auth!=="local_gh"||e.git===null,"conflicting git authority").refine((e)=>ea(e)<=V.snapshotBytes,"snapshot too large");import{spawn as ra}from"child_process";import{basename as ta,isAbsolute as Eu}from"path";var na=0,ts=120000,ns=15000,oa=65536;function Dn(e=process.execPath,l=process.argv[1]){let f=ta(e),_=(f.startsWith("bun")||f.startsWith("node"))&&typeof l==="string"&&l.length>0;return{command:e,prefix:_?[l]:[]}}function to(e={}){let{command:l,prefix:f}=Dn(e.executablePath,e.sourceEntrypoint),_=e.spawnProcess??ra,w=e.now??Date.now,S=null,I=0,W=!1,x=(G)=>{try{G.kill("SIGKILL")}catch{}},M=()=>{if(W)return;if(S&&w()-I<ts-ns)return;if(S){let F=S;S=null,x(F)}let G;try{G=_(l,[...f,"__device","__hands-worker","--handoff-fd",String(na)],{cwd:"/",env:{PATH:process.env.PATH??"/usr/local/bin:/usr/bin:/bin"},shell:!1,stdio:["pipe","ignore","pipe"]})}catch{return}S=G,I=w(),G.on("error",()=>{if(S===G)S=null}),G.once("exit",(F,T)=>{if(S!==G)return;S=null,e.log?.("hands.worker_prespawn_exited",{exit_code:F,exit_signal:T})}),e.log?.("hands.worker_prespawned",{pid:G.pid??null})};return{arm:M,take(G){let F=S;if(!F||W)return null;let T=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((Oe,$e)=>G.args[$e]!==Oe)||typeof T!=="string"||!re||typeof J!=="string"||G.options.shell||JSON.stringify(G.options.stdio)!==JSON.stringify(["ignore","ignore","pipe"]))return null;S=null;let fe=F.stdin,ve={configPath:T,cwd:J,env:Object.fromEntries(Object.entries(re).filter((Oe)=>typeof Oe[1]==="string"))},be=JSON.stringify(ve);if(F.exitCode!==null||F.signalCode!==null||!fe||fe.destroyed||w()-I>=ts-ns||Buffer.byteLength(be,"utf8")>oa)return x(F),null;return fe.on("error",()=>{return}),fe.end(be),F.once("exit",()=>{M()}),e.log?.("hands.worker_prespawn_taken",{pid:F.pid??null}),F},adopt(G){G.once("exit",()=>{M()})},close(){if(W=!0,S)x(S);S=null}}}import{accessSync as la,constants as ua,statSync as fa}from"fs";import{homedir as pa,tmpdir as _a,userInfo as ma}from"os";import{delimiter as ha,win32 as ga}from"path";var sa=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 ia=["BUN_CONFIG_","BUN_INSPECT","DYLD_","NODE_DEBUG"],aa=new Set(["BUN_INSTALL"]);var ca=/^--(?:max-old-space-size|max-semi-space-size|stack-size)=\d{1,9}$/;function da(e){return(e??"").split(/\s+/).filter(Boolean).every((l)=>ca.test(l.replaceAll("_","-")))}function os(e){return Object.keys(e).filter((l)=>sa.has(l)&&!(l==="NODE_OPTIONS"&&da(e[l]))||ia.some((f)=>l.startsWith(f))||l.startsWith("BUN_")&&!aa.has(l)).sort()}var ba=new Set(["HOME","PATH","PWD","OLDPWD","SHLVL","_","TMPDIR","TMP","TEMP","SHELL","BASH_ENV","ENV","ZDOTDIR","PROMPT_COMMAND","IFS","CDPATH","GLOBIGNORE","SHELLOPTS","BASHOPTS","NODE_PATH"]),wa=/^(?:ARA_|REASON_|PI_|GIT_|GH_|GITHUB_|LD_|DYLD_|BUN_|BASH_FUNC_|SSH_)/,ya=/TOKEN|SECRET|PASSW|PASSPHRASE|CREDENTIAL|API_?KEY|ACCESS_?KEY|PRIVATE_?KEY|AUTH/i,va=/^[A-Za-z_][A-Za-z0-9_]*$/;function gr(e=process.env){let l=(w)=>{if(!(process.platform==="win32"?ga.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(os(e)),_=Object.fromEntries(Object.entries(e).filter((w)=>{let[S,I]=w;return typeof I==="string"&&I.length<=32768&&!I.includes("\x00")&&S.length<=128&&va.test(S)&&!f.has(S)&&!ba.has(S)&&!wa.test(S)&&!ya.test(S)}).sort(([w],[S])=>w.localeCompare(S)).slice(0,512));return{home:l(e.HOME||(process.platform==="win32"?e.USERPROFILE:void 0)||pa()),path:((w)=>process.platform==="win32"?Sn(w):w)(xr(e.PATH??"").join(ha)||Er),temporaryDirectory:l(e.TMPDIR||e.TMP||e.TEMP||_a()),variables:_}}function _r(e=process.env,l=()=>ma().shell){if(process.platform==="win32")return se();let f=(w)=>{if(!w||!/^\/[A-Za-z0-9._/-]*\/(?:bash|zsh)$/.test(w))return!1;try{return la(w,ua.X_OK),fa(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 ka}from"fs/promises";var Sa=15000;function gn(e){let l=e instanceof Error&&"code"in e?e.code:null;return l==="EPERM"||l==="EACCES"}function _n(e){return new r("folder_access_denied",`macOS blocked Reason from opening ${e}. Allow Reason in System Settings \u203A Privacy & Security \u203A Files and Folders `+"(or Full Disk Access), then try again.")}async function ss(e,{timeoutMs:l=Sa,open:f=(_)=>ka(_)}={}){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(gn(S))throw _n(e);if(S instanceof r)throw S}finally{clearTimeout(_)}}import{chmodSync as rc,closeSync as tc,constants as Un,fstatSync as nc,lstatSync as Es,openSync as oc,readSync as sc,realpathSync as zn,unlinkSync as ic}from"fs";import{lookup as ac}from"dns/promises";import{createRequire as cc}from"module";import{request as dc}from"http";import{request as lc}from"https";import ct from"net";import{platform as Is}from"os";import{basename as uc,extname as fc,isAbsolute as Rs,relative as $n,resolve as yt,sep as Kn}from"path";var is=String.raw`
|
|
5
5
|
async (roots) => {
|
|
6
6
|
"use strict";
|
|
7
7
|
const version = 2;
|
|
@@ -290,20 +290,20 @@ async (roots) => {
|
|
|
290
290
|
install("a11y", a11y); install("view", view); install("routeFulfill", routeFulfill); install("console", replConsole);
|
|
291
291
|
install("__araHandsRepl", Object.freeze({ version, evaluate }));
|
|
292
292
|
}
|
|
293
|
-
`.trim(),
|
|
293
|
+
`.trim(),as=String.raw`
|
|
294
294
|
async (input) => {
|
|
295
295
|
const bridge = globalThis.__araHandsRepl;
|
|
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 wt}from"buffer";import{randomUUID as Ea}from"crypto";class cs 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 ds=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),ss=/^hands_[A-Za-z0-9_-]{8,128}$/,Ra=2048,ls=32,us=1e4,Oa=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function xa(e){let l=e.split("+"),f=(l.pop()??"").replace(/^Key/,"").toLowerCase();if(f==="f12")return!0;if(l.some((g)=>["Control","ControlOrMeta","Meta"].includes(g))&&["l","n","t","j","i","p","s","w","u","o","r","tab","pageup","pagedown"].includes(f))return!0;if(l.some((g)=>["Control","ControlOrMeta","Meta"].includes(g))&&l.includes("Shift")&&f==="c")return!0;return l.includes("Alt")&&["d","arrowleft","arrowright","home"].includes(f)}var Pa=(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))}},fs={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 cs(e)}function Cr(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let l=Object.getPrototypeOf(e);return l===Object.prototype||l===null}function yt(e,l=0,f={nodes:0}){if(l>ls||++f.nodes>us)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 g of e)yt(g,l+1,f);return}if(!Cr(e))Ie("hands_repl_invalid_json");for(let[g,w]of Object.entries(e)){if(ds.has(g))Ie("hands_repl_invalid_json");yt(w,l+1,f)}}function Cn(e){return typeof e==="string"&&Object.hasOwn(fs,e)}function Ia(e){if(!e.endsWith("[]"))return null;let l=e.slice(0,-2);return Cn(l)?l:null}function is(e){return Cr(e)&&Object.keys(e).length===2&&e.$handsRepl==="bytes"&&typeof e.base64==="string"}function Aa(e){return Cr(e)&&Object.keys(e).length===1&&e.$handsRepl==="undefined"}function as(e){return Cr(e)&&Object.keys(e).length===2&&e.$handsRepl==="routeFulfill"&&"options"in e}function qr(e){return!!e&&typeof e==="object"}function Zt(){return Object.freeze({$handsRepl:"undefined"})}function Ta(e){if(!wt.isBuffer(e)&&!(e instanceof Uint8Array))Ie("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:wt.from(e).toString("base64")})}function ps(e){if(!qr(e.browser)||!qr(e.context)||!qr(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??Ra;if(!Number.isInteger(l)||l<3||l>1e5)Ie("hands_repl_invalid_handle_limit");let f=new Map,g=new WeakMap,w=e.createOpaqueId??Ea,S=(T,re)=>{if(!qr(re))Ie("hands_repl_expected_target");let J=g.get(re)?.get(T);if(J)return J;if(f.size>=l)Ie("hands_repl_handle_limit");let z="";for(let be=0;be<16;be+=1){let Oe=`hands_${w()}`;if(ss.test(Oe)&&!f.has(Oe)){z=Oe;break}}if(!z)Ie("hands_repl_invalid_opaque_id");let fe=Object.freeze({$handsRepl:"handle",id:z,kind:T});f.set(z,{kind:T,target:re});let ke=g.get(re);if(!ke)ke=new Map,g.set(re,ke);return ke.set(T,fe),fe},I=Object.freeze({browser:S("browser",e.browser),context:S("context",e.context),page:S("page",e.page)}),W=(T)=>{if(!Cr(T)||Object.keys(T).length!==3||T.$handsRepl!=="handle"||typeof T.id!=="string"||!ss.test(T.id)||!Cn(T.kind))Ie("hands_repl_invalid_handle");let re=f.get(T.id);if(!re||re.kind!==T.kind)Ie("hands_repl_unknown_handle");return re},x=(T,re=0,J=new Set)=>{if(re>ls)Ie("hands_repl_json_too_complex");if(T===void 0)return Zt();if(T===null||typeof T==="boolean"||typeof T==="string")return T;if(typeof T==="number"){if(!Number.isFinite(T))Ie("hands_repl_non_json_result");return T}if(Array.isArray(T)){if(J.has(T))Ie("hands_repl_cyclic_result");J.add(T);try{return T.map((z)=>x(z,re+1,J))}finally{J.delete(T)}}if(!Cr(T))Ie("hands_repl_non_json_result");if(J.has(T))Ie("hands_repl_cyclic_result");J.add(T);try{let z=Object.create(null);for(let fe of Object.keys(T)){let ke=Object.getOwnPropertyDescriptor(T,fe);if(!ke||!("value"in ke))continue;z[fe]=x(ke.value,re+1,J)}return z}finally{J.delete(T)}},M=(T,re)=>{if(re==="void")return Zt();if(re==="json")return x(T);if(re==="bytes")return Ta(T);let J=Ia(re);if(J){if(!Array.isArray(T))Ie("hands_repl_expected_target_list");if(J==="context"&&T.some((z)=>z!==e.context))Ie("hands_repl_foreign_context");return T.map((z)=>S(J,z))}if(T===null||T===void 0)return Zt();if(!Cn(re))Ie("hands_repl_invalid_return_kind");if(re==="context"&&T!==e.context)Ie("hands_repl_foreign_context");return S(re,T)},G=(T)=>{if(Cr(T)&&T.$handsRepl==="handle")return W(T).target;if(is(T))return wt.from(T.base64,"base64");if(Aa(T))return;if(as(T))Ie("hands_repl_route_fulfill_only");if(Array.isArray(T))return T.map(G);if(!Cr(T))return T;let re=Object.create(null);for(let[J,z]of Object.entries(T))re[J]=G(z);return re};return Object.freeze({roots:I,dispatch:async(T)=>{if(!Cr(T)||typeof T.type!=="string")Ie("hands_repl_invalid_request");if(T.type==="a11y"){let ye=T.target===void 0?f.get(I.page.id):W(T.target);if(!ye||ye.kind!=="page"&&ye.kind!=="locator")Ie("hands_repl_invalid_a11y_target");return x(await e.a11y(ye.target))}if(T.type==="view"){if(yt(T.source),T.options!==void 0)yt(T.options);let ye=is(T.source)?wt.from(T.source.base64,"base64"):T.source;if(e.privateProfile&&!wt.isBuffer(ye))Ie("hands_repl_profile_requires_image_bytes");return x(await e.view(ye,T.options))}if(T.type!=="call")Ie("hands_repl_invalid_request");if(typeof T.method!=="string"||T.method.length===0||T.method.length>128)Ie("hands_repl_invalid_method");if(ds.has(T.method))Ie("hands_repl_forbidden_method");let re=W(T.target),J=T.args??[];if(!Array.isArray(J))Ie("hands_repl_invalid_arguments");if(yt(J),re.kind==="page"&&T.method==="captureScreenshot"){if(J.length!==0)Ie("hands_repl_invalid_arguments");if(!e.screenshotExport)Ie("hands_repl_screenshot_export_unavailable");return x(await e.screenshotExport(re.target))}if(re.kind==="context"&&["startRecording","stopRecording"].includes(T.method)){if(!e.recording||re.target!==e.context)Ie("hands_repl_recording_unavailable");if(J.length>(T.method==="startRecording"?1:0))Ie("hands_repl_invalid_arguments");return x(T.method==="startRecording"?await e.recording.start(J[0]):await e.recording.stop())}if(e.privateProfile){let ye=T.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 M([e.context],"context[]");if((ye==="screenshot"||ye==="pdf")&&Cr(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 ze=new URL(J[0]);if(!["http:","https:"].includes(ze.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"||!Oa.has(J[0].toLowerCase())))Ie("hands_repl_private_profile_attribute_denied");if(re.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(ye)){let ze=[re.target];if(ye==="allInnerTexts"){let Xe=Reflect.get(re.target,"all");if(typeof Xe!=="function")Ie("hands_repl_private_profile_probe_unavailable");let Te=await Reflect.apply(Xe,re.target,[]);if(!Array.isArray(Te)||Te.length>us||!Te.every(qr))Ie("hands_repl_private_profile_probe_unavailable");ze=Te}for(let Xe of ze){let Te=Reflect.get(Xe,"isVisible");if(typeof Te!=="function"||!await Reflect.apply(Te,Xe,[]))Ie("hands_repl_private_profile_hidden_value_denied")}}if(ye==="press"&&typeof J[0]==="string"&&xa(J[0]))Ie("hands_repl_private_profile_browser_shortcut_denied");if(re.kind==="locator"&&["inputValue","click","dblclick","tap","press"].includes(ye)){let ze=Reflect.get(re.target,"evaluate");if(typeof ze!=="function")Ie("hands_repl_private_profile_probe_unavailable");let Xe=await Reflect.apply(ze,re.target,[Pa]);if(!Cr(Xe)||typeof Xe.password!=="boolean"||typeof Xe.executableLink!=="boolean")Ie("hands_repl_private_profile_probe_unavailable");if(ye==="inputValue"&&Xe.password)Ie("hands_repl_private_profile_password_denied");if(ye!=="inputValue"&&Xe.executableLink)Ie("hands_repl_private_profile_url_denied");if(ye==="inputValue"){let Te=Reflect.get(re.target,"isVisible");if(typeof Te!=="function"||!await Reflect.apply(Te,re.target,[]))Ie("hands_repl_private_profile_hidden_value_denied")}}}let z=fs[re.kind][T.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"&&T.method==="contexts")return[I.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(T.method)&&J.some((ye)=>Cr(ye)&&("path"in ye)))Ie("hands_repl_file_path_not_allowed");if(T.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 ze=await Reflect.apply(ye,re.target,[]),Xe=Array.isArray(ze)?ze[0]:void 0,Te=qr(Xe)?Reflect.get(Xe,"viewportSize"):void 0;if(typeof Te!=="function")return Zt();return M(await Reflect.apply(Te,Xe,[]),z.returns)}if(z.special==="property"){let ye=Reflect.get(re.target,T.method);return M(typeof ye==="function"?Reflect.apply(ye,re.target,[]):ye,z.returns)}let fe=Reflect.get(re.target,T.method);if(typeof fe!=="function")Ie("hands_repl_method_unavailable");if(z.special==="route"){let ye=J[1];if(!as(ye))Ie("hands_repl_invalid_route_handler");yt(ye.options);let ze=G(ye.options),Xe=async(he)=>{if(!qr(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,[ze])},Te=[G(J[0]??null),Xe],le=await Reflect.apply(fe,re.target,Te);return M(le,z.returns)}let ke=J.map(G);if(T.method==="setInputFiles"){let ye=re.kind==="locator"?0:1,ze=async(Te)=>{if(typeof Te!=="string"){if(!Cr(Te)||typeof Te.name!=="string"||typeof Te.mimeType!=="string"||!wt.isBuffer(Te.buffer))Ie("hands_repl_invalid_file_input");return Te}if(!e.readWorkspaceFile)Ie("hands_repl_workspace_required");return e.readWorkspaceFile(Te)},Xe=ke[ye];ke[ye]=Array.isArray(Xe)?await Promise.all(Xe.map(ze)):await ze(Xe)}if(T.method==="goto")await e.beforeNavigation?.();let be=e.actionRecorder?.(),Oe=await Reflect.apply(fe,re.target,ke),Ze={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"}[T.method];if(Ze){let ye=Reflect.get(re.target,"page"),ze=re.kind==="page"?re.target:typeof ye==="function"?Reflect.apply(ye,re.target,[]):void 0;be?.(Ze,qr(ze)?ze:void 0)}return M(Oe,z.returns)}})}import{isIP as gs}from"net";import{Resolver as Da}from"dns/promises";import{isIP as en}from"net";var Ca=[["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 Hn(e){if(en(e)!==4)return null;let l=e.split(".");if(l.length!==4)return null;let f=0;for(let g of l){let w=Number(g);if(!Number.isInteger(w)||w<0||w>255)return null;f=f*256+w}return f>>>0}function Ha(e,l,f){let g=Hn(l);if(g===null)return!1;let w=f===0?0:4294967295<<32-f>>>0;return(e&w)>>>0===(g&w)>>>0}function _s(e){let l=Hn(e);if(l===null)return!0;return Ca.some(([f,g])=>Ha(l,f,g))}function Na(e){if(en(e)!==6)return null;let l=e.toLowerCase(),f=l.indexOf("%");if(f>=0)l=l.slice(0,f);let g=[],w=l.lastIndexOf(":"),S=w>=0?l.slice(w+1):"";if(S.includes(".")){let T=Hn(S);if(T===null)return null;g=[T>>>16&65535,T&65535],l=l.slice(0,w+1)+"0:0"}let I=l.split("::");if(I.length>2)return null;let W=(T)=>{if(T==="")return[];let re=[];for(let J of T.split(":")){if(J===""||J.length>4||!/^[0-9a-f]+$/.test(J))return null;re.push(Number.parseInt(J,16))}return re},x=W(I[0]??"");if(x===null)return null;if(I.length===1){let T=x;if(T.length!==8)return null;return g.length>0?T.slice(0,6).concat(g):T}let M=W(I[1]??"");if(M===null)return null;let G=8-x.length-M.length;if(G<0)return null;let F=x.concat(Array(G).fill(0),M);if(F.length!==8)return null;return g.length>0?F.slice(0,6).concat(g):F}function La(e,l){return`${e>>8&255}.${e&255}.${l>>8&255}.${l&255}`}function Ba(e){let l=Na(e);if(l===null)return!0;let[f,g,w]=l;if((f&57344)!==8192)return!0;if(f===8193&&(g&65024)===0)return!0;if(f===8193&&g===3512)return!0;if(f===16383&&(g&61440)===0)return!0;if(f===8194)return _s(La(g,w));return!1}function mr(e){return e.replace(/^\[|\]$/g,"")}function Qt(e){let l=mr(e.trim()),f=en(l);if(f===4)return _s(l);if(f===6)return Ba(l);return!0}function ms(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 hs=5000;function ja(e){return async(l,f)=>{if(f?.aborted)throw Error("aborted");let g=new Da({timeout:hs,tries:1});if(e)g.setServers(e);let w=()=>g.cancel();f?.addEventListener("abort",w,{once:!0});try{let[S,I]=await Promise.allSettled([g.resolve4(l),g.resolve6(l)]),W=[...S.status==="fulfilled"?S.value:[],...I.status==="fulfilled"?I.value:[]];if(W.length>0)return W;let x=[S,I].flatMap((G)=>G.status==="rejected"?[G.reason]:[]);throw x.find((G)=>["dns_temporary","dns_timeout"].includes(ms(G)))??x[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{f?.removeEventListener("abort",w)}}}var Ma=ja();async function Wa(e,l,f,g){if(g?.aborted)throw Error("aborted");let w=new AbortController,S,I,W=l(e,w.signal);W.catch(()=>{});try{return await Promise.race([W,new Promise((x,M)=>{if(S=setTimeout(()=>M(new DOMException("DNS lookup timed out","TimeoutError")),f),g)I=()=>M(Error("aborted")),g.addEventListener("abort",I,{once:!0})})])}finally{if(S!==void 0)clearTimeout(S);if(g&&I)g.removeEventListener("abort",I);w.abort()}}async function Ji(e,l=Ma,f){let g=mr(e);if(en(g))return Qt(g)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[g]};let w;try{w=await Wa(g,l,hs,f)}catch(S){return{ok:!1,reason:f?.aborted?f.reason instanceof Error&&f.reason.name==="TimeoutError"?"dns_timeout":"aborted":ms(S)}}if(w.length===0)return{ok:!1,reason:"dns_empty"};if(w.some(Qt))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:w}}var Fa=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function Nn(e){return e.length<=253&&Fa.test(e.toLowerCase())}function Ua(e,l){let f=e.trim().toLowerCase();if(!Nn(f))return!1;if(f.startsWith("*.")){let g=f.slice(2);return l===g||l.endsWith(`.${g}`)}return f===l}function za(e){let l=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(e);if(!l)return null;let f=l.slice(1).map(Number);return f.some((g)=>g>255)?null:f}function Ln(e,l=[]){let f=(g)=>{if(g=g.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,""),!g.includes(":"))return g;try{g=new URL(`http://[${g}]/`).hostname.slice(1,-1)}catch{return g}let w=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(g);if(!w)return g;let S=parseInt(w[1],16),I=parseInt(w[2],16);return`${S>>8}.${S&255}.${I>>8}.${I&255}`};return l.some((g)=>f(g)===f(e))}function ct(e){e=e.toLowerCase().replace(/^\[|\]$/g,"");let l=za(e);if(l){let[S,I,W]=l;if(S===127)return"loopback";return S===0||S===10||S>=224||S===100&&I>=64&&I<=127||S===169&&I===254||S===172&&I>=16&&I<=31||S===192&&(I===168||I===0&&(W===0||W===2)||I===88&&W===99)||S===198&&(I===18||I===19||I===51&&W===100)||S===203&&I===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),I=parseInt(f[2],16);return ct(`${S>>8}.${S&255}.${I>>8}.${I&255}`)==="public"?"public":"private"}let[g,w=0]=e.split(":").map((S)=>parseInt(S||"0",16));return g<8192||g>16383||g===8194||g===8193&&(w<512||w===3512)||g===16383&&w<4096?"private":"public"}function je(e,l){let f;try{f=new URL(e)}catch{return{allowed:!1,url:e,host:null,reason:"invalid_url"}}if(["about:","data:","blob:"].includes(f.protocol))return{allowed:!0,url:e,host:null,reason:"local_document"};if(!["http:","https:","ws:","wss:"].includes(f.protocol))return{allowed:!1,url:e,host:f.hostname||null,reason:"unsupported_protocol"};let g=f.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(l.mode==="off")return{allowed:!0,url:e,host:g,reason:"policy_off"};let w=(W)=>({allowed:!1,url:e,host:g,reason:W});if(f.username||f.password)return w("invalid_url");if(l.mode==="public_web"){let W=ct(g)!=="public"&&ct(g)!=="hostname"||g==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(g)||!g.includes(".")&&!gs(g)||Boolean(gs(g)&&Qt(g));return{allowed:!W,url:e,host:g,reason:W?"private_network":"public_web"}}let S=Number(f.port||(["https:","wss:"].includes(f.protocol)?443:80));if(l.deniedPorts?.includes(S)||Ln(g,l.deniedHosts))return w("destination_not_allowed");let I=ct(g);if(I==="private"||["local","internal","arpa"].some((W)=>g===W||g.endsWith(`.${W}`)))return w("private_network");if(I==="loopback"||g==="localhost"||g.endsWith(".localhost"))return l.allowedLoopbackPorts?.includes(S)?{allowed:!0,url:e,host:g,reason:"loopback"}:w("destination_not_allowed");if(l.allowedDomains.some((W)=>Ua(W,g)))return{allowed:!0,url:e,host:g,reason:"allowed_domain"};return{allowed:!1,url:e,host:g,reason:"destination_not_allowed"}}import bs from"child_process";import{accessSync as $a,constants as Ka,readFileSync as Ga,statSync as Ja}from"fs";import{createRequire as Va}from"module";import{dirname as ff,isAbsolute as jn,join as qa,resolve as pf,win32 as Ya}from"path";var Wn=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:Yt.dependencies["playwright-core"],browser:"chromium"}),ws=["/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"],Fn=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function Xa(e=process.env){let l=[e.ProgramFiles??"C:\\Program Files",e["ProgramFiles(x86)"]??"C:\\Program Files (x86)"],f=e.LOCALAPPDATA?[e.LOCALAPPDATA]:[],g=(w,...S)=>w.map((I)=>Ya.join(I,...S));return[...g([...l,...f],"Google","Chrome","Application","chrome.exe"),...g(l,"Microsoft","Edge","Application","msedge.exe"),...g([...l,...f],"BraveSoftware","Brave-Browser","Application","brave.exe")]}function jt(e){try{return $a(e,Ka.X_OK),jn(e)&&Ja(e).isFile()}catch{return!1}}function Un(e,l=process.platform){let f=l==="darwin"?ws:l==="linux"?Fn:l==="win32"?Xa():null;return f?(e??f).find(jt)??null:null}function Za(){if(!process.versions.bun)return;let e=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,e))return;let l=[];bs.spawn=new Proxy(bs.spawn,{apply(f,g,w){let S=Reflect.apply(f,g,w),I=w[1],W=w[2]?.stdio;if(Array.isArray(I)&&I.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 rn(e){if(Za(),e!==void 0){if(!jn(e))throw Error("hands_browser_driver_path_must_be_absolute");let g=qa(e,"package.json"),w=JSON.parse(Ga(g,"utf8"));if(w.name!==Wn.driver)throw Error("hands_browser_wrong_driver");let S=Va(g)(e),I=S.default?.chromium??S.chromium;if(!I)throw Error("hands_browser_missing_chromium");return{version:w.version,chromium:I}}let[l,f]=await Promise.all([import("./index-0dp6x9h4.js"),import("./package-k6jdrvn6.js").then((m)=>Ti(m.default,1))]);return{version:f.default.version,chromium:l.chromium}}var Qa=(e,l=Wn.driverVersion)=>({status:"unavailable",reason:e,expectedDriverVersion:l}),ec=(e)=>e.loadDriver?.()??rn(e.driverModuleDirectory);async function Mt(e={}){return ys(e,Wn.driverVersion)}async function zn(e,l={}){if(e.driverVersion!=="1.61.1"||!jn(e.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return ys({...l,driverModuleDirectory:e.driverModuleDirectory,allowSystemBrowser:!0},e.driverVersion)}async function ys(e,l){let f=(x)=>Qa(x,l),g=e.platform??process.platform;if(g!=="linux"&&g!=="darwin"&&g!=="win32")return f("unsupported_platform");let w;try{w=await ec(e)}catch{return f("driver_missing")}if(w.version!==l)return f("driver_version_mismatch");let S=(x,M)=>({status:"resolved",executablePath:x,source:M,driverVersion:w.version});if(e.executablePath!==void 0)return jt(e.executablePath)?S(e.executablePath,"configured"):f("executable_missing");let I=w.chromium.executablePath();if(jt(I))return S(I,"managed");let W=e.allowSystemBrowser===!0?Un(e.systemCandidates,g):null;return W?S(W,"system"):f("executable_missing")}var pc=["/usr/local/bin/chromium",...Fn];function hn(e,l=Os()){return Un(e??(l==="linux"?pc:void 0),l)}async function _c(){try{return(await rn()).chromium}catch{return cc(import.meta.url)("playwright-core").chromium}}var mc=1048576,hc=105000,gc=20000,Ss=5000,bc=2000,wc=1000,yc=30000,Es=81920,vc={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function kc(e,l){let f=new URL(e.url()),g={...await e.allHeaders(),host:f.host};for(let w of Object.keys(g))if(/^(?:proxy-|connection$|upgrade$|transfer-encoding$|content-length$)/i.test(w))delete g[w];return new Promise((w,S)=>{let W=(f.protocol==="https:"?lc:dc)(f,{method:e.method(),headers:g,agent:!1,lookup:(M,G,F)=>{let T=dt.isIP(l);if(G.all)F(null,[{address:l,family:T}]);else F(null,l,T)}},(M)=>{let G=[],F=0;M.on("data",(T)=>{if(F+=T.length,F>33554432)W.destroy(Error("hands_browser_response_too_large"));else G.push(T)}),M.on("error",S),M.on("end",()=>{let T={};for(let[re,J]of Object.entries(M.headers))if(J!==void 0&&!["transfer-encoding","connection","content-length"].includes(re))T[re]=Array.isArray(J)?J.join(`
|
|
300
|
-
`):J;w({status:M.statusCode??502,headers:T,body:Buffer.concat(G)})})}),x=setTimeout(()=>W.destroy(Error("hands_browser_fetch_timeout")),yc);W.once("close",()=>clearTimeout(x)),W.on("error",S),W.end(e.postDataBuffer()??void 0)})}async function Sc(e,l,f=()=>{},
|
|
301
|
-
`)}function
|
|
302
|
-
Viewing ${
|
|
299
|
+
`.trim();import{Buffer as bt}from"buffer";import{randomUUID as Ea}from"crypto";class us extends Error{code;constructor(e){super(e==="hands_repl_private_profile_attribute_denied"?"Private browser attribute read denied.":e);this.code=e;this.name="HandsReplBrowserDispatcherError"}}var fs=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),cs=/^hands_[A-Za-z0-9_-]{8,128}$/,Ra=2048,ps=32,_s=1e4,Oa=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function xa(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 Pa=(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))}},ms={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 us(e)}function Cr(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let l=Object.getPrototypeOf(e);return l===Object.prototype||l===null}function wt(e,l=0,f={nodes:0}){if(l>ps||++f.nodes>_s)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)wt(_,l+1,f);return}if(!Cr(e))Ie("hands_repl_invalid_json");for(let[_,w]of Object.entries(e)){if(fs.has(_))Ie("hands_repl_invalid_json");wt(w,l+1,f)}}function Cn(e){return typeof e==="string"&&Object.hasOwn(ms,e)}function Ia(e){if(!e.endsWith("[]"))return null;let l=e.slice(0,-2);return Cn(l)?l:null}function ds(e){return Cr(e)&&Object.keys(e).length===2&&e.$handsRepl==="bytes"&&typeof e.base64==="string"}function Aa(e){return Cr(e)&&Object.keys(e).length===1&&e.$handsRepl==="undefined"}function ls(e){return Cr(e)&&Object.keys(e).length===2&&e.$handsRepl==="routeFulfill"&&"options"in e}function qr(e){return!!e&&typeof e==="object"}function qt(){return Object.freeze({$handsRepl:"undefined"})}function Ta(e){if(!bt.isBuffer(e)&&!(e instanceof Uint8Array))Ie("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:bt.from(e).toString("base64")})}function hs(e){if(!qr(e.browser)||!qr(e.context)||!qr(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??Ra;if(!Number.isInteger(l)||l<3||l>1e5)Ie("hands_repl_invalid_handle_limit");let f=new Map,_=new WeakMap,w=e.createOpaqueId??Ea,S=(T,re)=>{if(!qr(re))Ie("hands_repl_expected_target");let J=_.get(re)?.get(T);if(J)return J;if(f.size>=l)Ie("hands_repl_handle_limit");let z="";for(let be=0;be<16;be+=1){let Oe=`hands_${w()}`;if(cs.test(Oe)&&!f.has(Oe)){z=Oe;break}}if(!z)Ie("hands_repl_invalid_opaque_id");let fe=Object.freeze({$handsRepl:"handle",id:z,kind:T});f.set(z,{kind:T,target:re});let ve=_.get(re);if(!ve)ve=new Map,_.set(re,ve);return ve.set(T,fe),fe},I=Object.freeze({browser:S("browser",e.browser),context:S("context",e.context),page:S("page",e.page)}),W=(T)=>{if(!Cr(T)||Object.keys(T).length!==3||T.$handsRepl!=="handle"||typeof T.id!=="string"||!cs.test(T.id)||!Cn(T.kind))Ie("hands_repl_invalid_handle");let re=f.get(T.id);if(!re||re.kind!==T.kind)Ie("hands_repl_unknown_handle");return re},x=(T,re=0,J=new Set)=>{if(re>ps)Ie("hands_repl_json_too_complex");if(T===void 0)return qt();if(T===null||typeof T==="boolean"||typeof T==="string")return T;if(typeof T==="number"){if(!Number.isFinite(T))Ie("hands_repl_non_json_result");return T}if(Array.isArray(T)){if(J.has(T))Ie("hands_repl_cyclic_result");J.add(T);try{return T.map((z)=>x(z,re+1,J))}finally{J.delete(T)}}if(!Cr(T))Ie("hands_repl_non_json_result");if(J.has(T))Ie("hands_repl_cyclic_result");J.add(T);try{let z=Object.create(null);for(let fe of Object.keys(T)){let ve=Object.getOwnPropertyDescriptor(T,fe);if(!ve||!("value"in ve))continue;z[fe]=x(ve.value,re+1,J)}return z}finally{J.delete(T)}},M=(T,re)=>{if(re==="void")return qt();if(re==="json")return x(T);if(re==="bytes")return Ta(T);let J=Ia(re);if(J){if(!Array.isArray(T))Ie("hands_repl_expected_target_list");if(J==="context"&&T.some((z)=>z!==e.context))Ie("hands_repl_foreign_context");return T.map((z)=>S(J,z))}if(T===null||T===void 0)return qt();if(!Cn(re))Ie("hands_repl_invalid_return_kind");if(re==="context"&&T!==e.context)Ie("hands_repl_foreign_context");return S(re,T)},G=(T)=>{if(Cr(T)&&T.$handsRepl==="handle")return W(T).target;if(ds(T))return bt.from(T.base64,"base64");if(Aa(T))return;if(ls(T))Ie("hands_repl_route_fulfill_only");if(Array.isArray(T))return T.map(G);if(!Cr(T))return T;let re=Object.create(null);for(let[J,z]of Object.entries(T))re[J]=G(z);return re};return Object.freeze({roots:I,dispatch:async(T)=>{if(!Cr(T)||typeof T.type!=="string")Ie("hands_repl_invalid_request");if(T.type==="a11y"){let ye=T.target===void 0?f.get(I.page.id):W(T.target);if(!ye||ye.kind!=="page"&&ye.kind!=="locator")Ie("hands_repl_invalid_a11y_target");return x(await e.a11y(ye.target))}if(T.type==="view"){if(wt(T.source),T.options!==void 0)wt(T.options);let ye=ds(T.source)?bt.from(T.source.base64,"base64"):T.source;if(e.privateProfile&&!bt.isBuffer(ye))Ie("hands_repl_profile_requires_image_bytes");return x(await e.view(ye,T.options))}if(T.type!=="call")Ie("hands_repl_invalid_request");if(typeof T.method!=="string"||T.method.length===0||T.method.length>128)Ie("hands_repl_invalid_method");if(fs.has(T.method))Ie("hands_repl_forbidden_method");let re=W(T.target),J=T.args??[];if(!Array.isArray(J))Ie("hands_repl_invalid_arguments");if(wt(J),re.kind==="page"&&T.method==="captureScreenshot"){if(J.length!==0)Ie("hands_repl_invalid_arguments");if(!e.screenshotExport)Ie("hands_repl_screenshot_export_unavailable");return x(await e.screenshotExport(re.target))}if(re.kind==="context"&&["startRecording","stopRecording"].includes(T.method)){if(!e.recording||re.target!==e.context)Ie("hands_repl_recording_unavailable");if(J.length>(T.method==="startRecording"?1:0))Ie("hands_repl_invalid_arguments");return x(T.method==="startRecording"?await e.recording.start(J[0]):await e.recording.stop())}if(e.privateProfile){let ye=T.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 M([e.context],"context[]");if((ye==="screenshot"||ye==="pdf")&&Cr(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 Fe=new URL(J[0]);if(!["http:","https:"].includes(Fe.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"||!Oa.has(J[0].toLowerCase())))Ie("hands_repl_private_profile_attribute_denied");if(re.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(ye)){let Fe=[re.target];if(ye==="allInnerTexts"){let Ve=Reflect.get(re.target,"all");if(typeof Ve!=="function")Ie("hands_repl_private_profile_probe_unavailable");let Te=await Reflect.apply(Ve,re.target,[]);if(!Array.isArray(Te)||Te.length>_s||!Te.every(qr))Ie("hands_repl_private_profile_probe_unavailable");Fe=Te}for(let Ve of Fe){let Te=Reflect.get(Ve,"isVisible");if(typeof Te!=="function"||!await Reflect.apply(Te,Ve,[]))Ie("hands_repl_private_profile_hidden_value_denied")}}if(ye==="press"&&typeof J[0]==="string"&&xa(J[0]))Ie("hands_repl_private_profile_browser_shortcut_denied");if(re.kind==="locator"&&["inputValue","click","dblclick","tap","press"].includes(ye)){let Fe=Reflect.get(re.target,"evaluate");if(typeof Fe!=="function")Ie("hands_repl_private_profile_probe_unavailable");let Ve=await Reflect.apply(Fe,re.target,[Pa]);if(!Cr(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 Te=Reflect.get(re.target,"isVisible");if(typeof Te!=="function"||!await Reflect.apply(Te,re.target,[]))Ie("hands_repl_private_profile_hidden_value_denied")}}}let z=ms[re.kind][T.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"&&T.method==="contexts")return[I.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(T.method)&&J.some((ye)=>Cr(ye)&&("path"in ye)))Ie("hands_repl_file_path_not_allowed");if(T.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 Fe=await Reflect.apply(ye,re.target,[]),Ve=Array.isArray(Fe)?Fe[0]:void 0,Te=qr(Ve)?Reflect.get(Ve,"viewportSize"):void 0;if(typeof Te!=="function")return qt();return M(await Reflect.apply(Te,Ve,[]),z.returns)}if(z.special==="property"){let ye=Reflect.get(re.target,T.method);return M(typeof ye==="function"?Reflect.apply(ye,re.target,[]):ye,z.returns)}let fe=Reflect.get(re.target,T.method);if(typeof fe!=="function")Ie("hands_repl_method_unavailable");if(z.special==="route"){let ye=J[1];if(!ls(ye))Ie("hands_repl_invalid_route_handler");wt(ye.options);let Fe=G(ye.options),Ve=async(he)=>{if(!qr(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,[Fe])},Te=[G(J[0]??null),Ve],le=await Reflect.apply(fe,re.target,Te);return M(le,z.returns)}let ve=J.map(G);if(T.method==="setInputFiles"){let ye=re.kind==="locator"?0:1,Fe=async(Te)=>{if(typeof Te!=="string"){if(!Cr(Te)||typeof Te.name!=="string"||typeof Te.mimeType!=="string"||!bt.isBuffer(Te.buffer))Ie("hands_repl_invalid_file_input");return Te}if(!e.readWorkspaceFile)Ie("hands_repl_workspace_required");return e.readWorkspaceFile(Te)},Ve=ve[ye];ve[ye]=Array.isArray(Ve)?await Promise.all(Ve.map(Fe)):await Fe(Ve)}if(T.method==="goto")await e.beforeNavigation?.();let be=e.actionRecorder?.(),Oe=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"}[T.method];if(qe){let ye=Reflect.get(re.target,"page"),Fe=re.kind==="page"?re.target:typeof ye==="function"?Reflect.apply(ye,re.target,[]):void 0;be?.(qe,qr(Fe)?Fe:void 0)}return M(Oe,z.returns)}})}import{isIP as ys}from"net";import{Resolver as Da}from"dns/promises";import{isIP as Zt}from"net";var Ca=[["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 Hn(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 Ha(e,l,f){let _=Hn(l);if(_===null)return!1;let w=f===0?0:4294967295<<32-f>>>0;return(e&w)>>>0===(_&w)>>>0}function gs(e){let l=Hn(e);if(l===null)return!0;return Ca.some(([f,_])=>Ha(l,f,_))}function Na(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 T=Hn(S);if(T===null)return null;_=[T>>>16&65535,T&65535],l=l.slice(0,w+1)+"0:0"}let I=l.split("::");if(I.length>2)return null;let W=(T)=>{if(T==="")return[];let re=[];for(let J of T.split(":")){if(J===""||J.length>4||!/^[0-9a-f]+$/.test(J))return null;re.push(Number.parseInt(J,16))}return re},x=W(I[0]??"");if(x===null)return null;if(I.length===1){let T=x;if(T.length!==8)return null;return _.length>0?T.slice(0,6).concat(_):T}let M=W(I[1]??"");if(M===null)return null;let G=8-x.length-M.length;if(G<0)return null;let F=x.concat(Array(G).fill(0),M);if(F.length!==8)return null;return _.length>0?F.slice(0,6).concat(_):F}function La(e,l){return`${e>>8&255}.${e&255}.${l>>8&255}.${l&255}`}function Ba(e){let l=Na(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 gs(La(_,w));return!1}function yr(e){return e.replace(/^\[|\]$/g,"")}function Yt(e){let l=yr(e.trim()),f=Zt(l);if(f===4)return gs(l);if(f===6)return Ba(l);return!0}function bs(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 ws=5000;function ja(e){return async(l,f)=>{if(f?.aborted)throw Error("aborted");let _=new Da({timeout:ws,tries:1});if(e)_.setServers(e);let w=()=>_.cancel();f?.addEventListener("abort",w,{once:!0});try{let[S,I]=await Promise.allSettled([_.resolve4(l),_.resolve6(l)]),W=[...S.status==="fulfilled"?S.value:[],...I.status==="fulfilled"?I.value:[]];if(W.length>0)return W;let x=[S,I].flatMap((G)=>G.status==="rejected"?[G.reason]:[]);throw x.find((G)=>["dns_temporary","dns_timeout"].includes(bs(G)))??x[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{f?.removeEventListener("abort",w)}}}var Ma=ja();async function Wa(e,l,f,_){if(_?.aborted)throw Error("aborted");let w=new AbortController,S,I,W=l(e,w.signal);W.catch(()=>{});try{return await Promise.race([W,new Promise((x,M)=>{if(S=setTimeout(()=>M(new DOMException("DNS lookup timed out","TimeoutError")),f),_)I=()=>M(Error("aborted")),_.addEventListener("abort",I,{once:!0})})])}finally{if(S!==void 0)clearTimeout(S);if(_&&I)_.removeEventListener("abort",I);w.abort()}}async function ro(e,l=Ma,f){let _=yr(e);if(Zt(_))return Yt(_)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[_]};let w;try{w=await Wa(_,l,ws,f)}catch(S){return{ok:!1,reason:f?.aborted?f.reason instanceof Error&&f.reason.name==="TimeoutError"?"dns_timeout":"aborted":bs(S)}}if(w.length===0)return{ok:!1,reason:"dns_empty"};if(w.some(Yt))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:w}}var Fa=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function Nn(e){return e.length<=253&&Fa.test(e.toLowerCase())}function Ua(e,l){let f=e.trim().toLowerCase();if(!Nn(f))return!1;if(f.startsWith("*.")){let _=f.slice(2);return l===_||l.endsWith(`.${_}`)}return f===l}function za(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 Ln(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),I=parseInt(w[2],16);return`${S>>8}.${S&255}.${I>>8}.${I&255}`};return l.some((_)=>f(_)===f(e))}function nt(e){e=e.toLowerCase().replace(/^\[|\]$/g,"");let l=za(e);if(l){let[S,I,W]=l;if(S===127)return"loopback";return S===0||S===10||S>=224||S===100&&I>=64&&I<=127||S===169&&I===254||S===172&&I>=16&&I<=31||S===192&&(I===168||I===0&&(W===0||W===2)||I===88&&W===99)||S===198&&(I===18||I===19||I===51&&W===100)||S===203&&I===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),I=parseInt(f[2],16);return nt(`${S>>8}.${S&255}.${I>>8}.${I&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 Ue(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=nt(_)!=="public"&&nt(_)!=="hostname"||_==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(_)||!_.includes(".")&&!ys(_)||Boolean(ys(_)&&Yt(_));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)||Ln(_,l.deniedHosts))return w("destination_not_allowed");let I=nt(_);if(I==="private"||["local","internal","arpa"].some((W)=>_===W||_.endsWith(`.${W}`)))return w("private_network");if(I==="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)=>Ua(W,_)))return{allowed:!0,url:e,host:_,reason:"allowed_domain"};return{allowed:!1,url:e,host:_,reason:"destination_not_allowed"}}import vs from"child_process";import{accessSync as $a,constants as Ka,readFileSync as Ga,statSync as Ja}from"fs";import{createRequire as Va}from"module";import{dirname as ff,isAbsolute as Bn,join as qa,resolve as pf,win32 as Ya}from"path";var jn=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:Qt.dependencies["playwright-core"],browser:"chromium"}),ks=["/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"],Mn=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function Xa(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((I)=>Ya.join(I,...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 $a(e,Ka.X_OK),Bn(e)&&Ja(e).isFile()}catch{return!1}}function Wn(e,l=process.platform){let f=l==="darwin"?ks:l==="linux"?Mn:l==="win32"?Xa():null;return f?(e??f).find(Bt)??null:null}function Za(){if(!process.versions.bun)return;let e=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,e))return;let l=[];vs.spawn=new Proxy(vs.spawn,{apply(f,_,w){let S=Reflect.apply(f,_,w),I=w[1],W=w[2]?.stdio;if(Array.isArray(I)&&I.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(Za(),e!==void 0){if(!Bn(e))throw Error("hands_browser_driver_path_must_be_absolute");let _=qa(e,"package.json"),w=JSON.parse(Ga(_,"utf8"));if(w.name!==jn.driver)throw Error("hands_browser_wrong_driver");let S=Va(_)(e),I=S.default?.chromium??S.chromium;if(!I)throw Error("hands_browser_missing_chromium");return{version:w.version,chromium:I}}let[l,f]=await Promise.all([import("./index-d5n50g8b.js"),import("./package-8v6gpwas.js").then((m)=>Di(m.default,1))]);return{version:f.default.version,chromium:l.chromium}}var Qa=(e,l=jn.driverVersion)=>({status:"unavailable",reason:e,expectedDriverVersion:l}),ec=(e)=>e.loadDriver?.()??en(e.driverModuleDirectory);async function jt(e={}){return Ss(e,jn.driverVersion)}async function Fn(e,l={}){if(e.driverVersion!=="1.61.1"||!Bn(e.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return Ss({...l,driverModuleDirectory:e.driverModuleDirectory,allowSystemBrowser:!0},e.driverVersion)}async function Ss(e,l){let f=(x)=>Qa(x,l),_=e.platform??process.platform;if(_!=="linux"&&_!=="darwin"&&_!=="win32")return f("unsupported_platform");let w;try{w=await ec(e)}catch{return f("driver_missing")}if(w.version!==l)return f("driver_version_mismatch");let S=(x,M)=>({status:"resolved",executablePath:x,source:M,driverVersion:w.version});if(e.executablePath!==void 0)return Bt(e.executablePath)?S(e.executablePath,"configured"):f("executable_missing");let I=w.chromium.executablePath();if(Bt(I))return S(I,"managed");let W=e.allowSystemBrowser===!0?Wn(e.systemCandidates,_):null;return W?S(W,"system"):f("executable_missing")}var pc=["/usr/local/bin/chromium",...Mn];function yn(e,l=Is()){return Wn(e??(l==="linux"?pc:void 0),l)}async function _c(){try{return(await en()).chromium}catch{return cc(import.meta.url)("playwright-core").chromium}}var mc=1048576,hc=105000,gc=20000,Os=5000,bc=2000,wc=1000,yc=30000,xs=81920,vc={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function kc(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:"?lc:dc)(f,{method:e.method(),headers:_,agent:!1,lookup:(M,G,F)=>{let T=ct.isIP(l);if(G.all)F(null,[{address:l,family:T}]);else F(null,l,T)}},(M)=>{let G=[],F=0;M.on("data",(T)=>{if(F+=T.length,F>33554432)W.destroy(Error("hands_browser_response_too_large"));else G.push(T)}),M.on("error",S),M.on("end",()=>{let T={};for(let[re,J]of Object.entries(M.headers))if(J!==void 0&&!["transfer-encoding","connection","content-length"].includes(re))T[re]=Array.isArray(J)?J.join(`
|
|
300
|
+
`):J;w({status:M.statusCode??502,headers:T,body:Buffer.concat(G)})})}),x=setTimeout(()=>W.destroy(Error("hands_browser_fetch_timeout")),yc);W.once("close",()=>clearTimeout(x)),W.on("error",S),W.end(e.postDataBuffer()??void 0)})}async function Sc(e,l,f=()=>{},_={lookup:(w)=>ac(w,{all:!0}),fetch:kc}){let w=new WeakSet,S=new WeakMap,I=(W)=>{let x=S.get(W);if(x)return x;let M=(async()=>{if(!e.newCDPSession)return;let G=await e.newCDPSession(W),F=new Map;G.on("Network.loadingFinished",({requestId:T})=>F.delete(T)),G.on("Network.loadingFailed",({requestId:T})=>F.delete(T)),G.on("Fetch.requestPaused",async(T)=>{let re=T.networkId??T.requestId,J=T.redirectedRequestId?(F.get(re)??0)+1:0;F.set(re,J);let z=Ue(T.request.url,l),fe=l.mode==="enforce"&&Boolean(T.redirectedRequestId)&&z.host!==null&&!ct.isIP(z.host),ve=!z.allowed?z:fe?{...z,allowed:!1,reason:"destination_not_allowed"}:J>20?{...z,allowed:!1,reason:"redirect_not_supported"}:null;try{if(ve)f(ve),await G.send("Fetch.failRequest",{requestId:T.requestId,errorReason:"BlockedByClient"});else await G.send("Fetch.continueRequest",{requestId:T.requestId})}catch{await G.send("Fetch.failRequest",{requestId:T.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,M),M};return await e.route("**/*",async(W)=>{let x=W.request().url(),M=Ue(x,l);if(M.allowed&&l.mode==="public_web"){await W.continue();return}let G=W.request();if(M.allowed&&M.host&&ct.isIP(M.host)&&G.isNavigationRequest?.()){let F=G.frame();if(w.has(F.page())&&F===F.page().mainFrame()){await W.continue();return}}if(M.allowed&&(l.mode==="off"||M.reason==="local_document")){await W.continue();return}if(M.allowed&&M.host)try{let F=M.host,T=nt(F),re,J=await(async()=>{if(T!=="hostname")return[{address:F,family:ct.isIP(F)}];if(M.reason==="loopback")return[{address:"127.0.0.1",family:4}];try{return await Promise.race([_.lookup(F),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=nt(z);return!ct.isIP(z)||l.mode==="enforce"&&Ln(z,l.deniedHosts)||(M.reason==="loopback"?fe!=="loopback":fe!=="public")}))M={...M,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??x;try{fe=new URL(fe,x).href}catch{}let ve=Ue(fe,l);M=ve.allowed?{...ve,allowed:!1,reason:"redirect_not_supported"}:ve}else{await W.fulfill(z);return}}}catch{await W.abort("failed");return}f(M),await W.abort("blockedbyclient")}),await e.routeWebSocket("**/*",async(W)=>{let x=Ue(W.url(),l);if(l.mode==="enforce"&&x.allowed&&(!x.host||!ct.isIP(x.host)))x={...x,allowed:!1,reason:"destination_not_allowed"};if(x.allowed){W.connectToServer();return}f(x),await W.close({code:1008,reason:"Reason egress policy denied"})}),l.mode==="off"?void 0:{preparePage:I}}async function As(e,l=Is(),f){if(f){let w=await Fn(f,{platform:l,systemCandidates:e});return w.status==="resolved"?w.executablePath:null}if(e!==void 0){let w=yn(e,l);if(w)return w}let _=await jt({platform:l,systemCandidates:e,allowSystemBrowser:!0});return _.status==="resolved"?_.executablePath:null}function Ps(e,l){if(!e)throw Error("hands_repl_workspace_required");let f=zn(e),_=yt(e),w=$n(_,yt(_,l)),I=w!==".."&&!w.startsWith(`..${Kn}`)&&!Rs(w)?yt(f,w):yt(f,l);if(E(yt(_,l))||E(I))throw Error("hands_repl_protected_path");let W=(J)=>{let z=$n(f,J);return z!==""&&z!==".."&&!z.startsWith(`..${Kn}`)&&!Rs(z)},x=zn(I);if(E(x))throw Error("hands_repl_protected_path");if(!W(I)||!W(x))throw Error("hands_repl_file_outside_workspace");let M=$n(f,I).split(Kn),G=[f,...M.map((J,z)=>yt(f,...M.slice(0,z+1)))],F=G.map((J)=>Es(J));if(F.some((J)=>J.isSymbolicLink()))throw Error("hands_repl_file_symlink");let T=F[F.length-1];if(!T.isFile()||T.nlink!==1||T.size>16777216)throw Error("hands_repl_file_not_regular_or_too_large");let re=oc(I,Un.O_RDONLY|Un.O_NOFOLLOW|Un.O_NONBLOCK);try{let J=nc(re);if(J.dev!==T.dev||J.ino!==T.ino||!J.isFile())throw Error("hands_repl_file_changed");for(let be=0;be<G.length;be++){let Oe=Es(G[be]);if(Oe.dev!==F[be].dev||Oe.ino!==F[be].ino||Oe.isSymbolicLink())throw Error("hands_repl_file_changed")}if(!W(zn(I)))throw Error("hands_repl_file_outside_workspace");let z=Buffer.alloc(16777217),fe=0;while(fe<z.length){let be=sc(re,z,fe,z.length-fe,null);if(!be)break;fe+=be}if(fe===z.length)throw Error("hands_repl_file_too_large");let ve=z.subarray(0,fe);return{name:uc(I),mimeType:vc[fc(I).toLowerCase()]??"application/octet-stream",buffer:ve}}finally{tc(re)}}function vt(e,l){e.end(`${JSON.stringify(l)}
|
|
301
|
+
`)}function rn(e){try{ic(e)}catch{}}async function Ts(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 Fn(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 _c():(await en(e.managedBrowser?.driverModuleDirectory??e.driverModuleDirectory)).chromium).launch(le)),w=[],S={},I=null,W=null,x=null,M=null,G=!1,F=null,T=new Map,re=new WeakMap,J=null,z=()=>{if(G)throw Error("hands_repl_stopped");if(M)throw M},fe=(le)=>{let he=re.get(le);if(he)return he;let xe=Promise.resolve().then(()=>le.close()).then(()=>{T.delete(le)});return re.set(le,xe),xe},ve=async()=>{let le=[...T.entries()].reverse(),he=J??=performance.now()+wc,xe=Promise.allSettled(le.filter(([,ke])=>ke==="context").map(([ke])=>fe(ke))),Ke;try{await Promise.race([xe,new Promise((ke)=>{Ke=setTimeout(ke,Math.max(0,he-performance.now()))})])}finally{if(Ke)clearTimeout(Ke)}let Le=await Promise.allSettled(le.map(([ke])=>fe(ke))),Be=[];for(let[ke,We]of Le.entries()){if(We.status!=="rejected")continue;let nr=We.reason instanceof Error&&["Error","TimeoutError","ProtocolError"].includes(We.reason.name)?We.reason.name:"unknown";Be.push(Error(`hands_repl_close_failed: ${le[ke][1]}: ${nr}`))}if(Be.length)throw AggregateError(Be,"hands_repl_stop_unconfirmed")},be=(le,he)=>{if(T.set(le,he),G||M)fe(le).catch(()=>{return}),z();return le},Oe=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 Sc(he,e.networkPolicy??{mode:"off"},e.onEgressDenied);if(z(),xe){let Ge=he.newPage.bind(he);he.newPage=async()=>{let sr=await Ge();return await xe.preparePage(sr),sr}}let Le=he.pages()[0]??await he.newPage();await xe?.preparePage(Le),z();let Be=async(Ge=Le)=>{let sr=Ge;if(typeof sr.ariaSnapshot==="function")return sr.ariaSnapshot({timeout:1e4});return Le.locator("body").innerText({timeout:1e4})},ke=async(Ge,sr={})=>{let ir=sr&&typeof sr==="object"&&!Array.isArray(sr)?sr:{},lr,Fr="image/png";if(Buffer.isBuffer(Ge)||Ge instanceof Uint8Array)lr=Buffer.from(Ge);else if(typeof Ge==="string"&&(Ge.startsWith("data:")||/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(Ge)))lr=Buffer.from(Ge.replace(/^data:[^,]*,/,""),"base64");else if(typeof Ge==="string"){let Zr=Ps(e.workspaceRoot,Ge);lr=Zr.buffer,Fr=Zr.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(ir.label??"").replace(/[\r\n>]+/g," ").trim().slice(0,120),Gr=Number(ir.maxWidth)||1024,lt=Number(ir.quality)||72,Ft=e.targetContext?await le.newPage():await he.newPage();try{let Zr=`data:${Fr};base64,${lr.toString("base64")}`;for(let ur=0;ur<5;ur+=1){let Mr=await Ft.evaluate(async(Br)=>{let Wr=new Image;Wr.src=Br.url,await Wr.decode();let Qr=Math.min(1,Br.maxWidth/Wr.naturalWidth),Dr=document.createElement("canvas");Dr.width=Math.max(1,Math.round(Wr.naturalWidth*Qr)),Dr.height=Math.max(1,Math.round(Wr.naturalHeight*Qr));let Ar=Dr.getContext("2d");if(!Ar)throw Error("view(): canvas unavailable");return Ar.fillStyle="#ffffff",Ar.fillRect(0,0,Dr.width,Dr.height),Ar.drawImage(Wr,0,0,Dr.width,Dr.height),{data:Dr.toDataURL("image/jpeg",Br.q/100).split(",")[1]??"",width:Dr.width,height:Dr.height,sourceWidth:Wr.naturalWidth,sourceHeight:Wr.naturalHeight}},{url:Zr,maxWidth:Gr,q:lt}),ut=Buffer.from(Mr.data,"base64");if(ut.length<=xs){let Br=ln||"image";return`<<<ARA_VIEW_IMAGE ${Mr.data} image/jpeg ${Br}>>>
|
|
302
|
+
Viewing ${Br} (${Mr.sourceWidth}x${Mr.sourceHeight} source, sent at ${Mr.width}x${Mr.height}, ${Math.round(ut.length/1024)}KB).`}if(Gr>640)Gr=Math.round(Gr*0.75);else lt=Math.max(30,lt-15)}throw Error(`view(): could not reduce the image under ${Math.round(xs/1024)}KB`)}finally{await Ft.close().catch(()=>{return})}},We=hs({browser:e.targetContext?.browser()??le,context:he,page:Le,a11y:Be,view:ke,readWorkspaceFile:(Ge)=>Ps(e.workspaceRoot,Ge),privateProfile:e.privateProfile,beforeNavigation:e.beforeNavigation,recording:e.recording,screenshotExport:e.screenshotExport,actionRecorder:()=>{let Ge=w,sr=S;return(ir,lr)=>{if(Ge.length<So)Ge.push(ir);if(lr)sr.page=lr}}}),nr=async(Ge)=>{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,Fr)=>e.onBrowserOperation?e.onBrowserOperation(Ge,()=>We.dispatch(Fr)):We.dispatch(Fr)),z();let ir=await sr.newPage();return z(),await ir.goto("data:text/html,<title>Reason Hands evaluator</title>"),z(),await ir.evaluate(`(${is})(${JSON.stringify(We.roots)})`),{context:sr,page:ir,runId:Ge}}catch(ir){throw await fe(sr).catch(()=>{return}),ir}},or=await nr(),Pr={browser:le,context:he,page:Le,evaluator:or,async captureProgressFrame(Ge){return ke(await Ge.screenshot({type:"jpeg",quality:65,timeout:2000}),{label:"Screen after browser action"})},async resetEvaluator(Ge){await fe(Pr.evaluator.context),Pr.evaluator=await nr(Ge)}};return z(),Pr}catch(xe){throw await ve().catch(()=>{return}),xe}},$e=async()=>{if(z(),I)return I;if(!x){W=Oe();let le;x=Promise.race([W,new Promise((he,xe)=>{le=setTimeout(()=>xe(Error("hands_browser_unavailable: startup timed out")),gc)})]).then((he)=>(z(),I=he,he)).catch(async()=>{M=Error("hands_browser_unavailable: startup failed or timed out");let he;try{await Promise.race([ve(),new Promise((xe,Ke)=>{he=setTimeout(()=>Ke(Error("hands_repl_stop_timeout")),Os)})])}catch{M=Error("hands_browser_unavailable: startup cleanup unconfirmed")}finally{if(he)clearTimeout(he)}throw M}).finally(()=>{if(le)clearTimeout(le)})}return x},qe=async(le,he,xe=!1)=>{let Ke=await $e(),Le=S;if(e.onBrowserOperation&&Ke.evaluator.runId!==he)await Ke.resetEvaluator(he);let ke=(async()=>{let or=await Ke.evaluator.page.evaluate(`(${as})(${JSON.stringify({code:le})})`);if(typeof or!=="string")throw Error("hands_repl_invalid_evaluator_output");let Pr=Le.page;if(xe&&Pr&&!or.includes("<<<ARA_VIEW_IMAGE")){let Ge=()=>Ke.captureProgressFrame(Pr);try{let sr=await(e.onBrowserOperation?e.onBrowserOperation(he,Ge):Ge());return Le.automaticProgressImage=!0,`${or}
|
|
303
303
|
${sr}`}catch{return`${or}
|
|
304
|
-
Screen capture unavailable.`}}return or})(),We,nr=new Promise((or,Pr)=>{We=setTimeout(()=>Pr(Error("REPL evaluation timed out after 105 seconds")),hc)});try{return await Promise.race([
|
|
305
|
-
`);if(Le===-1)return;xe=!0;let Be=he.slice(0,Le);if(e.onControl)try{let
|
|
306
|
-
`}catch{return!1}}var Ac=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function Ts(e){let l=Ac.exec(e.replace(/\/+$/,""));return l?`${l[1]}/repo`:null}import{randomUUID as yd}from"crypto";import{spawn as vd,spawnSync as kd}from"child_process";import{accessSync as Sd,chmodSync as zt,closeSync as Ed,constants as Dt,fchmodSync as Rd,fstatSync as Od,openSync as xd,copyFileSync as Pd,existsSync as co,lstatSync as vr,statSync as lt,mkdtempSync as Id,mkdirSync as Ct,realpathSync as tr,renameSync as cn,rmSync as Ad,writeFileSync as ln}from"fs";import{homedir as Td,tmpdir as ti}from"os";import{basename as Dd,dirname as Tr,join as cr,resolve as ni,sep as Cd}from"path";var Tc={"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 Ds(e){return e===null?"other":Tc[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 Qe="workspace_mode",Yr="granted_root",Br="project_root",Et="terminal_root",xt="terminal_benchmark_tool_profile",Dc=["bash","bash-node-repl","bash-node-repl-files"],Cs="hands_node_repl_persistent_execution_unsupported";function Hs(e){return e==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function Ns(e){return Dc.includes(e)}var Uf=i({device_id:t().uuid(),root_id:t().uuid()}),Yn=/^reason\/[0-9a-f]{8}$/,Cc=c({source_path:t().refine(X).optional(),branch:t().regex(Yn)}),zf=i({checkout_mode:s(["worktree","direct"]).optional(),project_workspace_source:i({kind:n("local_device"),device_id:t().uuid(),root_id:t().uuid(),path:t().refine(X).optional(),worktree:Cc.optional()})});import{execFile as Hc}from"child_process";var Nc=20000,Lc=1e4,Ls=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,Bc=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function Bs(e,l=jc){let f=(fe,ke=Lc)=>l([...Bc,"-C",e,...fe],ke),g=async(fe)=>{let ke=await f(fe);return ke.status===0?ke.stdout.trim():null},w=await g(["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(!w||!Ls.test(w))return null;let S=w.slice(0,12),I=(fe)=>({commit:w,from:"head",note:`reason: started from ${fe}`}),W=await g(["symbolic-ref","--quiet","HEAD"]);if(!W?.startsWith("refs/heads/"))return I(`the checkout's detached HEAD ${S}`);let x=W.slice(11),M=await f(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(M.status!==0||M.stdout.trim())return I(`${x} at ${S}: the checkout has uncommitted changes, which stay there`);let G=await g(["config","--get",`branch.${x}.remote`]),F=await g(["config","--get",`branch.${x}.merge`]);if(!G||!F?.startsWith("refs/")||G.startsWith("-"))return I(`${x} at ${S}: it has no upstream to catch up with`);let T=G==="."||(await f(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",G,F],Nc)).status===0,re=await g(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),J=re?await g(["rev-parse","--verify","--quiet","@{upstream}^{commit}"]):null;if(!re||!J||!Ls.test(J))return I(`${x} at ${S}: ${T?"it has no upstream to catch up with":`fetching ${G} failed`}`);if(!T)return I(`${x} at ${S}: fetching ${re} failed, so it may be behind`);if(J===w)return I(`${x} at ${S}, the same commit as ${re} after fetching it`);if((await f(["merge-base","--is-ancestor",w,J])).status!==0)return I(`${x} at ${S}: it has commits that ${re} does not`);let z=await g(["rev-list","--count",`${w}..${J}`]);return{commit:J,from:"upstream",note:`reason: started from ${re} at ${J.slice(0,12)}, fetched just now: ${x} had no commits of its own and was ${z??"some"} commits behind it`}}function jc(e,l){return new Promise((f)=>{Hc("git",e,{encoding:"utf8",timeout:l,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(g,w)=>{let S=g?typeof g.code==="number"?g.code:null:0;f({status:S,stdout:String(w??"")})})})}import{lstatSync as Mc,readdirSync as Vf,readFileSync as qf,realpathSync as js,rmdirSync as Yf,unlinkSync as Xf,writeFileSync as Wc}from"fs";import{join as Xn,resolve as Qf}from"path";var Fc=".reason-device";function Ms(e,l,f){let g=l.split("/"),w=de.split("/");if(g.length!==w.length+2||w.some((S,I)=>g[I]!==S)||!er.test(g[w.length]))return;try{let S=Uc(e,g[w.length]);Wc(Xn(S,Fc),f,{flag:"wx",mode:384})}catch{}}function Uc(e,l){let f=()=>new r("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!er.test(l))throw f();let g=Xn(js(e),de),w=Xn(g,l);if(!Mc(w).isDirectory()||js(w)!==w)throw f();return w}import{createHash as zc}from"crypto";import{join as $c}from"path";function Kc(e){return br(e)}function Kr(){throw new r("environment_unavailable","The private Session environment is unavailable or stale.")}function nn(e){return zc("sha256").update(JSON.stringify({...e,variables:Object.fromEntries(Object.entries(e.variables).sort(([l],[f])=>l.localeCompare(f)))})).digest("hex")}function Ws(e,l){v(e);let f=$c(e,"environment.json"),g,w=new Set,S=(W,x)=>`${x}:${W}`,I=(W)=>{let x=pr.safeParse(W);if(!x.success)return Kr();let M=x.data,G=l.identity(),F=Date.parse(M.expires_at);if(!G||M.run_id!==l.runId||M.device_id!==l.deviceId||M.root_id!==l.rootId||M.binding.kind!==l.binding.kind||M.binding.target_revision!==l.binding.target_revision||M.binding.root_grant_revision!==l.binding.root_grant_revision||M.binding.target_generation!==G.generation||M.binding.target_fence_id!==G.fenceId||F<=Date.now()||F>l.expiresAtMs||l.expiresAtMs<=Date.now()||Object.keys(M.variables).some((T)=>!Kc(T)))return Kr();if(M.git){let T=new URL(l.apiOrigin),re=new URL(M.git.base_url),J=Date.parse(M.git.expires_at);if(re.origin!==T.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>F)return Kr()}if(M.cloud_access&&!Xo(M.cloud_access,l.apiOrigin))throw new r("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return M};return{path:f,install(W){let x=I(W),M=nn(x);if(g&&(x.revision<g.revision||x.revision===g.revision&&(M!==g.hash||x.snapshot_id!==g.snapshotId)))return Kr();if(!g||x.revision>g.revision){if(no(f,x,V.snapshotBytes),nn(I(JSON.parse(h(f,V.snapshotBytes))))!==M)return Kr();let G=g;if(g={revision:x.revision,hash:M,snapshotId:x.snapshot_id,generation:x.binding.target_generation},G&&G.generation<g.generation)w.add(S(G.snapshotId,G.revision))}else if(nn(I(JSON.parse(h(f,V.snapshotBytes))))!==g.hash)return Kr();return{installed:!0,snapshot_id:x.snapshot_id,installed_revision:x.revision}},current(){if(!g)return Kr();try{let W=I(JSON.parse(h(f,V.snapshotBytes)));if(nn(W)!==g.hash)return Kr();return W}catch{return Kr()}},carried:(W,x)=>w.has(S(W,x))}}var It=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})]),Gc="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",Jc=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",Gc]),Fs=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),gp=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),bp=new Set([b,...It.map((e)=>e.artifact_sha256),...Jc,...Fs]);var wp=new Set([b,...It.filter((e)=>e.pi_tools_v1).map((e)=>e.artifact_sha256),...Fs]);var yp=new Set([b,...It.filter((e)=>e.pi_tools_confinement_v1).map((e)=>e.artifact_sha256)]);var vp=new Set([b,...It.filter((e)=>e.home_folder_v1).map((e)=>e.artifact_sha256)]);var kp=new Set([b,...It.filter((e)=>e.background_bash_v1).map((e)=>e.artifact_sha256)]);var Sp=new Set([b,...It.filter((e)=>e.machine_sdk_v1).map((e)=>e.artifact_sha256)]);var Vc=[R,"reason-hands-worker.cjs"];function Us(e){return typeof e==="string"&&Vc.includes(e)}var qc;function zs(){return qc??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as Yc,constants as Zn,fstatSync as $s,lstatSync as Xc,openSync as Zc,readSync as Qc,realpathSync as ed,watch as rd}from"fs";import{dirname as Ks}from"path";function on(e,l){let f;try{let g=Ks(e),w=Xc(g);if(!w.isDirectory()||w.isSymbolicLink()||!A(w,18)||ed(g)!==g)return null;f=Zc(e,Zn.O_RDONLY|Zn.O_NOFOLLOW|Zn.O_NONBLOCK);let S=$s(f);if(!S.isFile()||S.nlink!==1||!A(S)||S.size<1||S.size>8192)return null;let I=Buffer.alloc(8193),W=Qc(f,I,0,I.length,0),x=$s(f);if(W!==S.size||x.size!==S.size||x.nlink!==1||x.mtimeMs!==S.mtimeMs||x.ctimeMs!==S.ctimeMs)return null;let M=JSON.parse(I.subarray(0,W).toString("utf8"));if(!M||M.pid!==l.pid||!Number.isSafeInteger(M.pid)||M.pid<1||M.launchId!==l.launchId||M.workerVersion!==l.workerVersion||M.protocolVersion!==l.protocolVersion||M.workerArtifactSha256!==l.workerArtifactSha256||M.workerEntrypoint!==l.workerEntrypoint||M.workspaceAliasReady!==!0||!U(M.targetGeneration)||!U(M.generation)||!N(M.fenceId))return null;return{...l,generation:M.generation,targetGeneration:M.targetGeneration,fenceId:M.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(f!==void 0)Yc(f)}}var td=(e,l,f)=>{let g=rd(e,{persistent:!1},l);return g.on("error",f),g};function Gs(e){let l=new AbortController,f=e.initial,g=f.targetGeneration,w=!1,S=!1,I,W,x=()=>{if(S)return;S=!0,I?.close(),I=void 0,clearInterval(W),e.signal.removeEventListener("abort",x),l.abort()},M=()=>{if(S)return;if(!e.isAlive()){x();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<=g)return;g=G.targetGeneration,w=!0,Promise.resolve().then(()=>(l.signal.throwIfAborted(),e.publish(G,l.signal))).catch(()=>{if(!S)x(),e.failed?.()}).finally(()=>{w=!1,M()})};if(e.signal.aborted)return x(),{stop:x};e.signal.addEventListener("abort",x,{once:!0});try{I=(e.watch??td)(Ks(e.path),M,()=>{I?.close(),I=void 0})}catch{}return W=setInterval(M,1000),W.unref?.(),M(),{stop:x}}import{spawn as nd}from"child_process";import{chmodSync as od,mkdtempSync as sd,realpathSync as id,rmSync as ad,unlinkSync as cd,writeFileSync as dd}from"fs";import ld from"net";import{platform as ud,tmpdir as fd}from"os";import{join as Js}from"path";var Vs=1048576,to=105000,pd=2000,_d=String.raw`
|
|
304
|
+
Screen capture unavailable.`}}return or})(),We,nr=new Promise((or,Pr)=>{We=setTimeout(()=>Pr(Error("REPL evaluation timed out after 105 seconds")),hc)});try{return await Promise.race([ke,nr])}catch(or){if(or instanceof Error&&or.message.includes("timed out"))ke.catch(()=>{return}),await Ke.resetEvaluator(he).catch(()=>{return});throw or}finally{if(We)clearTimeout(We)}},ye=Promise.resolve(),Fe=new Set,Ve=new Set;rn(e.socketPath);let Te=ct.createServer((le)=>{Fe.add(le),le.once("close",()=>{Fe.delete(le),Ve.delete(le)}),le.setEncoding("utf8");let he="",xe=!1;le.on("data",(Ke)=>{if(xe)return;if(he+=Ke,he.length>mc){xe=!0,vt(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 ke=JSON.parse(Be);if(typeof ke.action==="string"&&ke.action!=="evaluate")Ve.add(le)}catch{}ye=ye.then(async()=>{if(le.destroyed)return;w=[],S={};try{let ke=JSON.parse(Be);if(ke.action==="probe"){let Ge=await $e();await qe("undefined",Ge.evaluator.runId),vt(le,{ok:!0,output:"ARA_HANDS_REPL_READY"});return}if(typeof ke.action==="string"&&ke.action!=="evaluate"&&e.onControl){vt(le,{ok:!0,output:await e.onControl(ke.action,ke)});return}if(ke.action!=="evaluate"||typeof ke.code!=="string")throw Error("Invalid REPL request");let We=ke.code,nr=typeof ke.runId==="string"?ke.runId:void 0,or=()=>qe(We,nr,ke.includeProgressCapture===!0),Pr=await(e.onEvaluate?e.onEvaluate(ke,or):or());vt(le,{ok:!0,output:Pr,browserActions:w,...S.automaticProgressImage?{automaticProgressImage:!0}:{}})}catch(ke){vt(le,{ok:!1,error:ke instanceof Error?ke.message:String(ke),stack:ke instanceof Error?ke.stack:void 0,browserActions:w})}}).catch((ke)=>{vt(le,{ok:!1,error:ke instanceof Error?ke.message:String(ke)})})})});try{await new Promise((le,he)=>{Te.once("error",he),Te.listen(e.socketPath,()=>{Te.off("error",he);try{if(process.platform!=="win32")rc(e.socketPath,384);le()}catch(xe){Te.close(()=>he(xe))}})})}catch(le){throw rn(e.socketPath),le}return{socketPath:e.socketPath,browserExecutablePath:f,stop(){if(F)return F;G=!0;let le=Ve.size?setTimeout(()=>{for(let Le of Ve)Le.destroy()},bc):void 0,he=new Promise((Le)=>Te.close(()=>{if(le)clearTimeout(le);Le()}));for(let Le of Fe)if(!Ve.has(Le))Le.destroy();ye.catch(()=>{return});let xe=async()=>{await he,rn(e.socketPath);let Le=[ve()];if(W)Le.push(W.then(()=>{return},()=>{return}));let Be=await Promise.allSettled(Le),ke=await Promise.allSettled([ve()]),We=[...Be,...ke].filter((nr)=>nr.status==="rejected");if(We.length)throw AggregateError(We.map((nr)=>nr.reason),"hands_repl_stop_unconfirmed")},Ke;return F=Promise.race([xe(),new Promise((Le,Be)=>{Ke=setTimeout(()=>Be(Error("hands_repl_stop_timeout")),Os)})]).finally(()=>{if(Ke)clearTimeout(Ke);rn(e.socketPath)}),F}}}var Ec=["private_runtime","runtime_root","temporary_directory","granted_root","workspace_layout","jobs","browser_socket","relay_url","environment_owner","job_environment","config_write"],Rc=["ENOENT","EACCES","EPERM","EINVAL","ENOTDIR","EISDIR","ELOOP","EROFS","ENOSPC","EMFILE","ENFILE","EEXIST"];function Ds(e,l){if(!e||!Ec.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"&&Rc.includes(f)?f:"unknown"}}import{lstatSync as Oc,readFileSync as xc}from"fs";var Pc="/run/sc/egress-guard",Ic=10002,Gn=10003;function Cs(e=process.platform,l=Pc){if(e!=="linux")return!1;try{let f=Oc(l);if(!f.isFile()||f.uid!==0||(f.mode&18)!==0)return!1;return xc(l,"utf8")===`v1 ${Ic} ${Gn}
|
|
306
|
+
`}catch{return!1}}var Ac=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function Hs(e){let l=Ac.exec(e.replace(/\/+$/,""));return l?`${l[1]}/repo`:null}import{randomUUID as yd}from"crypto";import{spawn as vd,spawnSync as kd}from"child_process";import{accessSync as Sd,chmodSync as Wt,closeSync as Ed,constants as At,fchmodSync as Rd,fstatSync as Od,openSync as xd,copyFileSync as Pd,existsSync as uo,lstatSync as dr,statSync as dt,mkdtempSync as Id,mkdirSync as Tt,realpathSync as tr,renameSync as cn,rmSync as Ad,writeFileSync as dn}from"fs";import{homedir as Td,tmpdir as ii}from"os";import{basename as Dd,dirname as Tr,join as cr,resolve as ai,sep as Cd}from"path";var Tc={"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 Ns(e){return e===null?"other":Tc[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 Ye="workspace_mode",Yr="granted_root",jr="project_root",kt="terminal_root",St="terminal_benchmark_tool_profile",Dc=["bash","bash-node-repl","bash-node-repl-files"],Ls="hands_node_repl_persistent_execution_unsupported";function Bs(e){return e==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function js(e){return Dc.includes(e)}var Uf=i({device_id:t().uuid(),root_id:t().uuid()}),Jn=/^reason\/[0-9a-f]{8}$/,Cc=c({source_path:t().refine(X).optional(),branch:t().regex(Jn)}),zf=i({checkout_mode:s(["worktree","direct"]).optional(),project_workspace_source:i({kind:n("local_device"),device_id:t().uuid(),root_id:t().uuid(),path:t().refine(X).optional(),worktree:Cc.optional()})});import{execFile as Hc}from"child_process";var Nc=20000,Lc=1e4,Ms=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,Bc=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function Ws(e,l=jc){let f=(fe,ve=Lc)=>l([...Bc,"-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||!Ms.test(w))return null;let S=w.slice(0,12),I=(fe)=>({commit:w,from:"head",note:`reason: started from ${fe}`}),W=await _(["symbolic-ref","--quiet","HEAD"]);if(!W?.startsWith("refs/heads/"))return I(`the checkout's detached HEAD ${S}`);let x=W.slice(11),M=await f(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(M.status!==0||M.stdout.trim())return I(`${x} at ${S}: the checkout has uncommitted changes, which stay there`);let G=await _(["config","--get",`branch.${x}.remote`]),F=await _(["config","--get",`branch.${x}.merge`]);if(!G||!F?.startsWith("refs/")||G.startsWith("-"))return I(`${x} at ${S}: it has no upstream to catch up with`);let T=G==="."||(await f(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",G,F],Nc)).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||!Ms.test(J))return I(`${x} at ${S}: ${T?"it has no upstream to catch up with":`fetching ${G} failed`}`);if(!T)return I(`${x} at ${S}: fetching ${re} failed, so it may be behind`);if(J===w)return I(`${x} at ${S}, the same commit as ${re} after fetching it`);if((await f(["merge-base","--is-ancestor",w,J])).status!==0)return I(`${x} 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: ${x} had no commits of its own and was ${z??"some"} commits behind it`}}function jc(e,l){return new Promise((f)=>{Hc("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 Mc,readdirSync as Vf,readFileSync as qf,realpathSync as Fs,rmdirSync as Yf,unlinkSync as Xf,writeFileSync as Wc}from"fs";import{join as Yn,resolve as Qf}from"path";var Fc=".reason-device";function Us(e,l,f){let _=l.split("/"),w=de.split("/");if(_.length!==w.length+2||w.some((S,I)=>_[I]!==S)||!rr.test(_[w.length]))return;try{let S=Uc(e,_[w.length]);Wc(Yn(S,Fc),f,{flag:"wx",mode:384})}catch{}}function Uc(e,l){let f=()=>new r("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!rr.test(l))throw f();let _=Yn(Fs(e),de),w=Yn(_,l);if(!Mc(w).isDirectory()||Fs(w)!==w)throw f();return w}import{createHash as zc}from"crypto";import{join as $c}from"path";function Kc(e){return kr(e)}function Kr(){throw new r("environment_unavailable","The private Session environment is unavailable or stale.")}function nn(e){return zc("sha256").update(JSON.stringify({...e,variables:Object.fromEntries(Object.entries(e.variables).sort(([l],[f])=>l.localeCompare(f)))})).digest("hex")}function zs(e,l){v(e);let f=$c(e,"environment.json"),_,w=new Set,S=(W,x)=>`${x}:${W}`,I=(W)=>{let x=mr.safeParse(W);if(!x.success)return Kr();let M=x.data,G=l.identity(),F=Date.parse(M.expires_at);if(!G||M.run_id!==l.runId||M.device_id!==l.deviceId||M.root_id!==l.rootId||M.binding.kind!==l.binding.kind||M.binding.target_revision!==l.binding.target_revision||M.binding.root_grant_revision!==l.binding.root_grant_revision||M.binding.target_generation!==G.generation||M.binding.target_fence_id!==G.fenceId||F<=Date.now()||F>l.expiresAtMs||l.expiresAtMs<=Date.now()||Object.keys(M.variables).some((T)=>!Kc(T)))return Kr();if(M.git){let T=new URL(l.apiOrigin),re=new URL(M.git.base_url),J=Date.parse(M.git.expires_at);if(re.origin!==T.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>F)return Kr()}if(M.cloud_access&&!es(M.cloud_access,l.apiOrigin))throw new r("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return M};return{path:f,install(W){let x=I(W),M=nn(x);if(_&&(x.revision<_.revision||x.revision===_.revision&&(M!==_.hash||x.snapshot_id!==_.snapshotId)))return Kr();if(!_||x.revision>_.revision){if(ao(f,x,V.snapshotBytes),nn(I(JSON.parse(h(f,V.snapshotBytes))))!==M)return Kr();let G=_;if(_={revision:x.revision,hash:M,snapshotId:x.snapshot_id,generation:x.binding.target_generation},G&&G.generation<_.generation)w.add(S(G.snapshotId,G.revision))}else if(nn(I(JSON.parse(h(f,V.snapshotBytes))))!==_.hash)return Kr();return{installed:!0,snapshot_id:x.snapshot_id,installed_revision:x.revision}},current(){if(!_)return Kr();try{let W=I(JSON.parse(h(f,V.snapshotBytes)));if(nn(W)!==_.hash)return Kr();return W}catch{return Kr()}},carried:(W,x)=>w.has(S(W,x))}}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})]),Gc="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",Jc=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",Gc]),$s=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),gp=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),bp=new Set([b,...xt.map((e)=>e.artifact_sha256),...Jc,...$s]);var wp=new Set([b,...xt.filter((e)=>e.pi_tools_v1).map((e)=>e.artifact_sha256),...$s]);var yp=new Set([b,...xt.filter((e)=>e.pi_tools_confinement_v1).map((e)=>e.artifact_sha256)]);var vp=new Set([b,...xt.filter((e)=>e.home_folder_v1).map((e)=>e.artifact_sha256)]);var kp=new Set([b,...xt.filter((e)=>e.background_bash_v1).map((e)=>e.artifact_sha256)]);var Sp=new Set([b,...xt.filter((e)=>e.machine_sdk_v1).map((e)=>e.artifact_sha256)]);var Vc=[R,"reason-hands-worker.cjs"];function Ks(e){return typeof e==="string"&&Vc.includes(e)}var qc;function Gs(){return qc??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as Yc,constants as Xn,fstatSync as Js,lstatSync as Xc,openSync as Zc,readSync as Qc,realpathSync as ed,watch as rd}from"fs";import{dirname as Vs}from"path";function on(e,l){let f;try{let _=Vs(e),w=Xc(_);if(!w.isDirectory()||w.isSymbolicLink()||!A(w,18)||ed(_)!==_)return null;f=Zc(e,Xn.O_RDONLY|Xn.O_NOFOLLOW|Xn.O_NONBLOCK);let S=Js(f);if(!S.isFile()||S.nlink!==1||!A(S)||S.size<1||S.size>8192)return null;let I=Buffer.alloc(8193),W=Qc(f,I,0,I.length,0),x=Js(f);if(W!==S.size||x.size!==S.size||x.nlink!==1||x.mtimeMs!==S.mtimeMs||x.ctimeMs!==S.ctimeMs)return null;let M=JSON.parse(I.subarray(0,W).toString("utf8"));if(!M||M.pid!==l.pid||!Number.isSafeInteger(M.pid)||M.pid<1||M.launchId!==l.launchId||M.workerVersion!==l.workerVersion||M.protocolVersion!==l.protocolVersion||M.workerArtifactSha256!==l.workerArtifactSha256||M.workerEntrypoint!==l.workerEntrypoint||M.workspaceAliasReady!==!0||!U(M.targetGeneration)||!U(M.generation)||!N(M.fenceId))return null;return{...l,generation:M.generation,targetGeneration:M.targetGeneration,fenceId:M.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(f!==void 0)Yc(f)}}var td=(e,l,f)=>{let _=rd(e,{persistent:!1},l);return _.on("error",f),_};function qs(e){let l=new AbortController,f=e.initial,_=f.targetGeneration,w=!1,S=!1,I,W,x=()=>{if(S)return;S=!0,I?.close(),I=void 0,clearInterval(W),e.signal.removeEventListener("abort",x),l.abort()},M=()=>{if(S)return;if(!e.isAlive()){x();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)x(),e.failed?.()}).finally(()=>{w=!1,M()})};if(e.signal.aborted)return x(),{stop:x};e.signal.addEventListener("abort",x,{once:!0});try{I=(e.watch??td)(Vs(e.path),M,()=>{I?.close(),I=void 0})}catch{}return W=setInterval(M,1000),W.unref?.(),M(),{stop:x}}import{spawn as nd}from"child_process";import{chmodSync as od,mkdtempSync as sd,realpathSync as id,rmSync as ad,unlinkSync as cd,writeFileSync as dd}from"fs";import ld from"net";import{platform as ud,tmpdir as fd}from"os";import{join as Ys}from"path";var Xs=1048576,oo=105000,pd=2000,_d=String.raw`
|
|
307
307
|
const { writeSync } = require("node:fs");
|
|
308
308
|
const { createRequire } = require("node:module");
|
|
309
309
|
const { join } = require("node:path");
|
|
@@ -311,7 +311,7 @@ const { createInterface } = require("node:readline");
|
|
|
311
311
|
const { formatWithOptions, inspect } = require("node:util");
|
|
312
312
|
const vm = require("node:vm");
|
|
313
313
|
|
|
314
|
-
const timeoutMs = ${
|
|
314
|
+
const timeoutMs = ${oo};
|
|
315
315
|
const maxLogChars = 524288;
|
|
316
316
|
let activeOutput = [];
|
|
317
317
|
let activeOutputChars = 0;
|
|
@@ -442,11 +442,11 @@ lines.on("line", (line) => {
|
|
|
442
442
|
}
|
|
443
443
|
}).catch((error) => respond({ ok: false, error: String(error) }));
|
|
444
444
|
});
|
|
445
|
-
`;function md(e=process.execPath,l=process.versions.bun){return l?"node":e}function
|
|
446
|
-
`)}function
|
|
447
|
-
`);dd(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,ad(l,{recursive:!0,force:!0})}}}async function gd(e){let l=id(e.workRoot),f=e.nodeExecutable??md(),
|
|
448
|
-
`);if(Oe===-1)return;let $e=T.slice(0,Oe);T=T.slice(Oe+1);let
|
|
449
|
-
`,(
|
|
450
|
-
`);if(ze===-1)return;$e=!0;let Xe=Oe.slice(0,ze);z=z.then(async()=>{if(be.destroyed)return;try{let Te=JSON.parse(Xe);if(Te.action!=="evaluate"||typeof Te.code!=="string")throw Error("Invalid REPL request");Ze=!0;let le=await J({action:"evaluate",code:Te.code});if(Ze=!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(Te){Ze=!1,sn(be,{ok:!1,error:Te instanceof Error?Te.message:String(Te),stack:Te instanceof Error?Te.stack:void 0})}}).catch((Te)=>{sn(be,{ok:!1,error:Te instanceof Error?Te.message:String(Te)})})})});try{await new Promise((be,Oe)=>{ke.once("error",Oe),ke.listen(e.socketPath,()=>{ke.off("error",Oe);try{od(e.socketPath,384),be()}catch($e){ke.close(()=>Oe($e))}})})}catch(be){S=!0,f.kill("SIGKILL");try{await Ft(g)}finally{await l.cleanup(),Qn(e.socketPath)}throw be}return{socketPath:e.socketPath,async stop(){if(S)return;S=!0;let be=new Promise((Oe)=>ke.close(()=>Oe()));for(let Oe of fe)Oe.destroy();await be,z.catch(()=>{return}),F();try{await Ft(g)}finally{await l.cleanup(),Qn(e.socketPath)}}}}var oo=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var Ys="/workspace",Xs="/var/lib/reason/sessions",bd="/var/lib/reason/session-controls";function gr(e){let l=`${Xs}/`;if(!e.startsWith(l))return null;let f=e.slice(l.length);if(!oo.test(f)||f!==f.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${bd}/${f}/job.env`}function wd(e){if(!oo.test(e))throw Error("personal_computer_invalid_identity");return e.toLowerCase()}function an(e){let l=wd(e);return{runtimeRoot:`${Xs}/${l}`,workspaceRoot:`${Ys}/sessions/${l}`,sharedRoot:Ys}}var Zs="/root/.ara/cloud-browser/repl.sock";function so(e){return e==="compute"}function Qs(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 g=e?`/var/lib/reason/browsers/${e.toLowerCase()}`:"/root/.ara/cloud-browser",w=e?`${g}/${l?`g${l}`:"current"}`:g,S=e?`/root/.b/${e.toLowerCase().replaceAll("-","")}`:g;return{temporarySessionDirectory:S,temporaryDirectory:e?`${S}/${l??"current"}`:`${w}/tmp`,directory:w,sessionDirectory:g,config:`${w}/config.json`,status:`${w}/status.json`,socket:`${w}/repl.sock`,bundle:`${w}/driver.mjs`,processName:e?`ara-browser-${e.toLowerCase()}${l?`-${l}`:""}`:"ara-cloud-browser"}}var io="browser_egress",ei=qo,Hd=45000,Nd=Wt+1500,Xr=/^[A-Za-z0-9._:-]{1,160}$/,Ld="/run/ara-hands";function Bd(e,l,f=ti()){if(e==="darwin")return{temporaryRoot:f,prepareRoot:!1,sessionMode:448};return{temporaryRoot:l??Ld,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 Pt(e=ge(),l=As){return e&&l()?Vn:null}function jd(e,l){if(!l&&(e??"linux")==="linux")return Zs;return Qs(l,void 0,e??"linux").socket}function At(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function oi(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 _r extends r{expiryDiagnostic;constructor(e){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=e}}function Md(e){return At(e)&&Object.keys(e).every((l)=>l==="source_path"||l==="branch")&&(e.source_path===void 0||X(e.source_path))&&typeof e.branch==="string"&&Yn.test(e.branch)}function Wd(e,l,f){let g=l===void 0?Date.now():l,w=["relay_url","session_id","environment_id","expires_at","policy_mode","policy_version","hands_protocol_version","hands_worker_version","hands_worker_artifact_sha256","hands_worker_entrypoint","target_generation","target_fence_id"],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",Qe,io,xt,Q,Y,q]),I=At(e)?e:null,W=I?.[io],x=I?.[xt],M=I?.[Y],G=W===void 0||(I?.[Qe]===Yr||M===pe&&I?.[Qe]===void 0)&&At(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"&&Nn(ke));if(!At(e)||w.some((ke)=>!(ke in e))||Object.keys(e).some((ke)=>!S.has(ke))||!G||M!==void 0&&M!==pe||I?.[q]!==void 0&&I[q]!==Re||I?.personal_workspace!==void 0&&(I.personal_workspace!==!0||I[Qe]!==Yr)||I?.cloud_browser!==void 0&&(I.cloud_browser!==!0||I[Qe]!==Yr)||I?.sandbox_provider!==void 0&&!so(I.sandbox_provider)||I?.sandbox_os!==void 0&&I.sandbox_os!=="linux"||x!==void 0&&(I?.[Qe]!==Et||!Ns(x))||Qe in e&&e[Qe]!==Yr&&e[Qe]!==Et&&e[Qe]!==Br||e.workspace_path!==void 0&&(!X(e.workspace_path)||e[Qe]!==Br)||e.workspace_worktree!==void 0&&(e.workspace_path===void 0||!Md(e.workspace_worktree))||typeof e.relay_url!=="string"||typeof e.session_id!=="string"||!Xr.test(e.session_id)||e.workspace_id!==void 0&&(typeof e.workspace_id!=="string"||!Xr.test(e.workspace_id))||e.legacy_workspace_id!==void 0&&(typeof e.legacy_workspace_id!=="string"||!Xr.test(e.legacy_workspace_id))||e[Ce]!==void 0&&(e[Ce]!==ue||(Qe in e))||e[Ae]!==void 0&&(e[Ae]!==Z||(Qe in e))||e[Q]!==void 0&&(typeof e[Q]!=="string"||!Xr.test(e[Q]))||typeof e.environment_id!=="string"||!Xr.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!==D||e.hands_worker_artifact_sha256!==b||!Us(e.hands_worker_entrypoint)||!U(e.target_generation)||!N(e.target_fence_id))throw new r("invalid_hands_payload","Reason Hands connection payload is invalid.");let F;try{F=new URL(e.relay_url)}catch{throw new r("invalid_hands_relay","Reason Hands relay URL is invalid.")}if((oi(F.hostname)?F.protocol!=="ws:":F.protocol!=="wss:")||F.username||F.password||F.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(F.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<=g?"expired":re-g>ei?"over_cap":"accepted",z={version:1,outcome:J,clock_source:l===void 0?"date_now":"injected",validation_now_ms:bt(g),expiry_ms:bt(re),remaining_ms:Number.isSafeInteger(re-g)?re-g:null,maximum_lifetime_ms:ei,cli_artifact:zs()};if(J!=="accepted")throw new _r(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}:{},...so(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:F.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]===Z?{[Ae]:Z}:{},...typeof e[Q]==="string"?{[Q]:e[Q]}:{},...e[Y]===pe?{[Y]:pe}:{},...e[q]===Re?{[q]:Re}:{},...typeof e.workspace_path==="string"?{workspace_path:e.workspace_path}:{},...At(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:D,hands_worker_artifact_sha256:b,hands_worker_entrypoint:R,target_generation:e.target_generation,target_fence_id:e.target_fence_id,...Qe in e?{[Qe]:e[Qe]}:{},...x===void 0?{}:{[xt]:x},...W===void 0?{}:{[io]:{mode:"enforce",allowed_domains:[...new Set(W.allowed_domains)].sort()}}}}function Fd(){let e=new Map;return{acquire(l,f){if(e.has(l))return null;let g=[...e.values()],w=(I)=>f.group!==void 0&&I.group===f.group;if(f.exclusive?!g.every(w):g.some((I)=>I.exclusive))return null;if(f.limit!==void 0&&!g.some(w)&&new Set(g.map((I,W)=>I.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 Ud=Fd();function zd(e,l){Ct(e,{recursive:!0,mode:448});let f=tr(e),g=()=>new r("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let I of l.split("/")){let W=cr(f,I);try{let M=vr(W);if(M.isSymbolicLink()||!M.isDirectory())throw g()}catch(M){if(!(M&&typeof M==="object"&&("code"in M)&&M.code==="ENOENT"))throw M;try{Ct(W,{mode:448})}catch(G){if(!(G&&typeof G==="object"&&("code"in G)&&G.code==="EEXIST"))throw G}}let x=vr(W);if(x.isSymbolicLink()||!x.isDirectory()||tr(W)!==W)throw g();f=W}if(process.platform==="win32"){let I=vr(f);if(I.isSymbolicLink()||!I.isDirectory()||tr(f)!==f||!zr(tr(e),f))throw g();return f}let w=vr(f),S=xd(f,Dt.O_RDONLY|Dt.O_DIRECTORY|Dt.O_NOFOLLOW);try{let I=Od(S);if(!I.isDirectory()||I.dev!==w.dev||I.ino!==w.ino||tr(f)!==f)throw g();Rd(S,448)}finally{Ed(S)}return f}function $d(e,l=Oo(),f,g,w){if(!Xr.test(e)||f!==void 0&&!Xr.test(f))throw new r("invalid_hands_workspace","Reason Hands run identity is invalid.");let S=Tr(O({kind:"managed",workspaceId:e,...g?{base:g}:{},...w?{layout:w}:{}})),I=zd(l,Tr(S)),W=cr(I,Dd(S)),x=!1;try{let T=vr(W);if(x=!0,T.isSymbolicLink())throw new r("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!T.isDirectory())throw new r("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(T){if(T instanceof r||!(T&&typeof T==="object"&&("code"in T)&&T.code==="ENOENT"))throw T}if(w&&!x)try{let T=cr(tr(l),Tr(O({kind:"managed",workspaceId:e,...g?{base:g}:{}}))),re=vr(T);if(!re.isSymbolicLink()&&re.isDirectory()&&tr(T)===T)cn(T,W),x=!0}catch{}if(f&&f!==e){let T=cr(I,f);try{let re=vr(T);if(re.isSymbolicLink()||!re.isDirectory())throw new r("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let J=tr(T);if(Tr(J)!==I)throw new r("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let z=null;if(x){z=cr(I,`.${e}.previous`);try{throw vr(z),new r("invalid_hands_workspace","Reason Hands previous workspace backup already exists.")}catch(fe){if(fe instanceof r||!(fe&&typeof fe==="object"&&("code"in fe)&&fe.code==="ENOENT"))throw fe}cn(W,z)}try{cn(J,W)}catch(fe){if(z)cn(z,W);throw fe}x=!0}catch(re){if(re instanceof r||!(re&&typeof re==="object"&&("code"in re)&&re.code==="ENOENT"))throw re}}Ct(W,{recursive:!0,mode:448}),zt(W,448);let M=tr(W);if(Tr(M)!==I)throw new r("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let G=cr(M,"repo");try{let T=vr(G);if(T.isSymbolicLink()||!T.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(T){if(T instanceof r||!(T&&typeof T==="object"&&("code"in T)&&T.code==="ENOENT"))throw T}Ct(G,{recursive:!0,mode:448}),zt(G,448);let F=tr(G);if(Tr(F)!==M)throw new r("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:M,repoPath:F}}function yr(e){let l=null;try{l=vr(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 Kd(e,l,f=process.geteuid?.(),g=process.platform){if(g==="win32")return"unknown";let w;try{if(w=lt(e),!w.isDirectory())return"unready";Sd(e,Dt.R_OK|Dt.W_OK|Dt.X_OK)}catch{return"unready"}try{if(vr(e).isSymbolicLink()||tr(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=Tr(e);;S=Tr(S)){let I;try{I=lt(S)}catch{return"unknown"}if(!(I.uid===l.uid?(I.mode&64)!==0:I.gid===l.gid?(I.mode&8)!==0:(I.mode&1)!==0))return"unknown";if(S===Tr(S))return"checked"}}function Gd(e,l){let f="/";for(let g of["",...e.split("/"),...l.split("/")].filter((w,S)=>S===0||w)){if(g)f=cr(f,g);let w;try{w=vr(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 Jd(e,l,f,g=process.geteuid?.(),w){if(!Xr.test(l))return null;let S,I;try{S=tr(e),I=Tr(O({kind:"managed",workspaceId:l,...f?{base:f}:{},...w?{layout:w}:{}}))}catch{return null}let W=cr(S,I),x=Qr(W)!==null,M=(J)=>new r("cloud_workspace_root_invalid",J),G;if(g===0){let J=Gd(S,I);if(J===null)return null;if(!x)throw new r("invalid_hands_workspace","As root, Reason Hands never prepares a workspace in folders another user owns.");G=J}else{if(!x)return null;let J,z;try{J=vr(Tr(W)),z=vr(W)}catch{return null}if(J.isSymbolicLink()||!J.isDirectory()||J.uid===0||z.uid!==0)return null;G=J.uid}let F=S;for(let J of I.split("/")){let z=cr(F,J),fe=!1;try{let ke=vr(z);fe=!ke.isSymbolicLink()&&ke.isDirectory()&&tr(z)===z}catch{}if(!fe)throw M("This cloud Session's workspace root is missing or is not a real directory.");F=z}yr(W);let T;try{T=wr(W)}catch(J){if(J instanceof r)throw J;throw M("This cloud Session's workspace root changed while Reason Hands checked it.")}let re=null;try{re=lt(T.repoPath).uid}catch{}if(re!==G)throw new r("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return T}function wr(e,l=!1){let f=tr(e),g=cr(f,"repo"),w;try{w=vr(g)}catch{throw new r("invalid_hands_workspace","Reason Hands repository is missing from the granted root.")}if(l){if(!/^\/var\/lib\/reason\/sessions\/[0-9a-f-]{36}$/.test(f))throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");if(an(f.slice(f.lastIndexOf("/")+1)).runtimeRoot!==f)throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");let W=tr("/workspace"),x=tr(g);if(W!=="/workspace"||!lt(x).isDirectory()||!x.startsWith("/workspace/"))throw new r("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:f,repoPath:x}}let S=Ts(f);if(S&&w.isSymbolicLink()){let W=tr(g);if(W!==tr(S)||!lt(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 I=tr(g);if(Tr(I)!==f)throw new r("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:f,repoPath:I}}function lo(e,l,f){if(l!==void 0&&!X(l))throw new r("invalid_hands_workspace",`Reason Hands ${f} is invalid.`);let g=ni(e,l??".");if(!zr(e,g))throw new r("invalid_hands_workspace",`Reason Hands ${f} escapes its granted root.`);return g}function si(e,l,f){if(Ye(l)){let g=tr(f);return{anchor:g,target:ni(g,l),boundary:cr(g,de)}}return{anchor:e,target:lo(e,l,"folder"),boundary:e}}function Vd(e,l){if(!zr(e,l))throw new r("invalid_hands_workspace","Reason Hands folder escapes its granted root.");let f=e;for(let g of l.slice(e.length).split(Cd).filter(Boolean)){f=cr(f,g);let w=null;try{w=vr(f)}catch(S){if(S.code!=="ENOENT")throw S}if(!w)Ct(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 ii(e,l){let f=tr(lo(e,l.source_path,"repository"));if(!zr(e,f)||!lt(f).isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a folder in its granted root.");return f}async function qd(e,l,f,g=a()){try{let w=tr(e);if(co(si(w,l,g).target))return;return await Bs(ii(w,f))??void 0}catch{return}}function Yd(e,l,f,g,w=Xd,S=a()){let I=tr(e),{target:W,boundary:x,anchor:M}=si(I,l,S);if(f&&!co(W)){let T=ii(I,f);Vd(M,Tr(W));let re=["-c","core.hooksPath=/dev/null","-C",T];if(g)w([...re,"update-ref","--create-reflog","-m",g.note,`refs/heads/${f.branch}`,g.commit,""]);let J=g?w([...re,"worktree","add",W,f.branch]):w([...re,"worktree","add","-b",f.branch,W]);if(!g&&J.status!==0&&/already exists/.test(J.stderr)&&!co(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=vr(W)}catch{throw new r("workspace_folder_missing","This Session's folder no longer exists.")}let F=tr(W);if(G.isSymbolicLink()&&!zr(x,F))throw new r("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!lt(F).isDirectory()||!zr(x,F))throw new r("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(E(F))throw new r("protected_path","Credential and secret folders are unavailable to Sessions.");return F}function Xd(e){let l=Bo();if(!l)return{status:null,stderr:"git was not found. Install Git for Windows (https://git-scm.com/download/win)."};let f=kd(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 ai(e){return gr(e)??Qr(e)?.jobEnv??cr(e,"job.env")}function Zd(e,l){let f=ai(e),g=vr(f);if(g.isSymbolicLink()||!g.isFile())throw new r("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");Pd(f,l),zt(l,384)}function Qd(e){if(e.workspaceMode===Br&&e.workspacePath!==void 0){let I=e.home??a(),W=Yd(e.grantedRoot,e.workspacePath,e.workspaceWorktree,e.workspaceWorktreeStart,void 0,I);if(e.workspaceWorktree&&e.deviceId)Ms(I,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===Yr)return{...wr(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 I=vr(e.grantedRoot);if(I.isSymbolicLink()||!I.isDirectory())throw new r("invalid_hands_workspace","Reason Hands root must be a real directory.");let W=tr(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}:{}},g=ie(e.grantedRoot,f,e.home).anchor,w=Jd(g,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=$d(l,g,e.legacyWorkspaceId,e.workspaceBase,e.workspaceLayout);return{...S,workspace:f,jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:Tr(S.workRoot),managedWorkspace:!0}}function fn(e){let{command:l,prefix:f}=Dn(e.executablePath,e.sourceEntrypoint),g=He({home:Td(),temporaryDirectory:e.temporaryDirectory,path:e.path});if(g.REASON_DEVICE_ROOT=g.ARA_DEVICE_ROOT=e.grantedRoot,g.REASON_HANDS_WORKSPACE=g.ARA_HANDS_WORKSPACE=e.workRoot,g.REASON_HANDS_REPO=g.ARA_HANDS_REPO=e.root,e.workspacePoolPath)g.REASON_HANDS_WORKSPACE_POOL=g.ARA_HANDS_WORKSPACE_POOL=e.workspacePoolPath;return{command:l,args:[...f,"__device","__hands-worker","--config",e.configPath],options:{cwd:e.root,env:g,shell:!1,stdio:[mn,"ignore","pipe"]}}}var mn=process.platform==="win32"?"pipe":"ignore";function it(e,l){if(process.platform!=="win32")return e.kill(l);if(l==="SIGTERM")e.stdin?.end();else if(e.pid)Me(e.pid);return!0}function el(e,l){let f="",g=!1,w=Date.now(),S=0,I=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled","permission_denied"].map((F)=>`hands.worker.${F}`)),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((F)=>["bash","read","write","edit"].map((T)=>`${F}:${T}`))]),x=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],M=["peerGeneration","socketState","closeCode"],G=new Set(["event","reason","launchId",...x,...M]);return(F)=>{for(let T of F.toString().split(/(?<=\n)/)){let re=T.endsWith(`
|
|
451
|
-
`);if(!g&&f.length+T.length<=2048)f+=T;else g=!0;if(!re)continue;let J=f;if(f="",g){g=!1;continue}try{let z=JSON.parse(J);if(!z||typeof z!=="object"||Array.isArray(z)||Object.keys(z).some((fe)=>!G.has(fe))||!I.has(z.event)||!W.has(z.reason)||z.event==="hands.worker.permission_denied"!==(typeof z.reason==="string"&&z.reason.includes(":"))||z.launchId!==e||x.some((fe)=>!Number.isSafeInteger(z[fe])||z[fe]<0)||M.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 rl(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:D,protocolVersion:P,workerArtifactSha256:b,workerEntrypoint:R});if(f?.targetGeneration===e.targetGeneration&&f.fenceId===e.fenceId)return f;await new Promise((g)=>setTimeout(g,10))}throw new r("hands_ready_timeout","Reason Hands did not become ready.")}async function tl(e,l){let f=()=>e.exitCode===0&&e.signalCode===null;if(e.exitCode!==null||e.signalCode!==null)return f()?"stopped":"already_exited";let g=new Promise((I)=>e.once("exit",()=>I()));try{if(!it(e,"SIGTERM"))return f()?"stopped":"unobserved"}catch{return f()?"stopped":"unobserved"}if(await ri(g,l))return f()?"stopped":"unobserved";try{it(e,"SIGKILL")}catch{}return await ri(g,l)?"forced":"unobserved"}async function ri(e,l){let f;try{return await Promise.race([e.then(()=>!0),new Promise((g)=>{f=setTimeout(()=>g(!1),l)})])}finally{clearTimeout(f)}}function nl(e){return new Promise((l)=>{let f=!1,g=(W)=>{if(f)return;f=!0,clearTimeout(I),e.signal.removeEventListener("abort",w),e.child.off("exit",S),l(W)},w=()=>g("cancelled"),S=()=>g("exited"),I=setTimeout(()=>g("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 ol=ro();function sl(e,l){if(!(e instanceof Error)||e instanceof r)return!1;let f=["hands_browser_driver_missing","hands_browser_driver_version_mismatch","hands_browser_executable_missing","hands_browser_unsupported_platform","hands_browser_unavailable"].includes(e.message),g=["ENOENT","EACCES","EPERM"].includes(e.code??"");if(!f&&!g)return!1;try{return vr(l),!1}catch(w){return At(w)&&w.code==="ENOENT"}}function il(e){return e.sandbox_provider==="compute"&&!e.cloud_browser&&e[Qe]===Yr}function al(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 Tt(e,l={}){let f=l.logDiagnostic??((le)=>console.warn(le)),g=new Map,w=(le)=>{let he=Date.now();g.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 I=l.now??Date.now,W,x=Wd(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||!x.environment_binding||!["darwin","linux","win32"].includes(process.platform)))throw new r("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let M=async(le)=>{let he;try{await Promise.race([le,new Promise((xe,Ve)=>{he=setTimeout(()=>Ve(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)=>M(e.emitEvent(le,he));if(e.headless&&(x.cloud_browser===!0||e.managedBrowser!==void 0||x[xt]!==void 0||x[Qe]!==void 0&&x[Qe]!==Br))throw new r("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let F=ge(),T=x[q]===void 0?null:Pt(F);if(x[q]!==void 0&&(T===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(x[Y]!==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(x.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=x[Qe]===Et,z=e.headless||process.platform==="darwin"&&e.managedBrowser===void 0&&!x.cloud_browser&&!x.browser_egress&&(x[Qe]===void 0||x[Qe]===Br)||il(x),fe=J?x[xt]??"bash":null,ke=fe?Hs(fe):null;if(ke)throw new r(ke,"Persistent Node REPL execution is unavailable; this benchmark profile cannot start.");let be=x[Qe],Oe=e.headless===!0&&e.ownComputer!==!0?e.handsSlots??1:void 0,$e=(l.slot??Ud).acquire(re,{exclusive:Oe===1||be!==void 0&&be!==Br,...Oe!==void 0&&Oe>1?{limit:Oe}:{},...e.headless===!0&&x[Q]!==void 0?{group:x[Q]}:{}});if(!$e)throw new r("hands_slot_busy",Oe!==void 0&&Oe>1?`This Reason worker runs at most ${Oe} sessions at a time.`:"This Reason Device runs one session at a time.");let Ze=e.headless===!0?Ri(e.runId):null,ye=null,ze=null,Xe,Te;try{w("browser_resolution");let le=e.headless&&l.browserExecutablePath===void 0?await Mt():null,he=J||x.cloud_browser?null:l.browserExecutablePath===void 0?e.headless?le?.status==="resolved"?le.executablePath:null:await xs(void 0,process.platform,e.managedBrowser):l.browserExecutablePath;if(!J&&!x.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??ol)()}catch{xe={path:yn(),source:"fallback"}}if(w("workspace_setup"),process.platform==="darwin"){let rr=x[Qe]===Br&&x.workspace_path!==void 0?lo(e.root,x.workspace_worktree?x.workspace_worktree.source_path:x.workspace_path,"folder"):null;for(let Or of new Set([e.root,...rr?[rr]:[]]))await ts(Or)}let Le=x[Qe]===Yr||x[Qe]===Et?Bd(process.platform,l.sandboxRuntimeRoot):null,Be=e.headless&&e.runtimeDirectory?e.runtimeDirectory:Le?Le.temporaryRoot:ti();if(ye="private_runtime",e.headless&&e.runtimeDirectory){v(Be);let rr=tr(e.root);if(!Fe(rr,Be))throw new r("invalid_hands_workspace","Private worker state must not overlap the granted workspace.")}if(e.headless&&e.runtimeDirectory&&(!e.deviceIdentity||!x.environment_binding))throw new r("environment_unavailable","Headless Hands requires a server-bound private environment.");if(ye="runtime_root",Le?.prepareRoot)Ct(Be,{recursive:!0,mode:457}),zt(Be,457);ye="temporary_directory";let Ee=tr(Id(cr(Be,"reason-hands-session-")));ze=Ee,zt(Ee,Le?.sessionMode??448);let We=cr(Ee,"hands-config.json"),nr=cr(Ee,"hands-ready.json"),or=yd(),Pr=x.target_fence_id;if(e.workspaceGrant){ye="workspace_grant",w("workspace_grant_wait");let rr=e.workspaceGrant;await new Promise((Or,tt)=>{let pt=()=>tt(new r("cancelled","Reason Hands was cancelled."));if(e.signal.aborted){pt();return}e.signal.addEventListener("abort",pt,{once:!0}),rr.then(Or,tt).finally(()=>e.signal.removeEventListener("abort",pt))})}ye="granted_root";let qe=tr(e.root);ye="workspace_layout";let sr=x[Qe]===Br&&x.workspace_path!==void 0&&x.workspace_worktree?await qd(qe,x.workspace_path,x.workspace_worktree):void 0,{workRoot:ir,repoPath:kr,jobEnvPath:Ur,workspacePoolPath:un,managedWorkspace:Gr,workspace:ut,cloudSessionRoot:$t}=Qd({grantedRoot:qe,personalWorkspace:x.personal_workspace===!0,runId:e.runId,workspaceId:x.workspace_id,legacyWorkspaceId:x.legacy_workspace_id,workspaceBase:x[Ce],workspaceLayout:x[Ae],temporaryDirectory:Ee,workspaceMode:x[Qe],applicationSupportPath:l.applicationSupportPath,...x.workspace_path===void 0?{}:{workspacePath:x.workspace_path},...x.workspace_worktree?{workspaceWorktree:x.workspace_worktree}:{},...sr?{workspaceWorktreeStart:sr}:{},...e.deviceIdentity?{deviceId:e.deviceIdentity.deviceId}:{}}),Zr="ara_device_wss";ye="jobs";let Rr=e.headless&&e.runtimeDirectory?ur({runtimeDirectory:e.runtimeDirectory,root:qe,runId:e.runId}):void 0;Xe=Rr?.disposeSocket;let Mr=Rr?$o(Rr):null;if(Mr)try{f(JSON.stringify({event:"hands.journal_owner_retired",run_id:e.runId,reason:Mr.reason,prior_executor_launch_id:Mr.executorLaunchId}))}catch{}if(Rr&&[ir,kr].some((rr)=>!Fe(rr,Rr.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 ft=x.personal_workspace?ir.slice(ir.lastIndexOf("/")+1):void 0;if(ft&&ft!==x.workspace_id)throw new r("invalid_hands_workspace","Personal session identity does not match its Device grant.");ye="browser_socket";let Lr=x.cloud_browser?jd(x.sandbox_os,ft):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${or}`:cr(Rr?Rr.launchDirectory:Ee,"repl.sock");ye="relay_url";let Wr=oi(new URL(x.relay_url).hostname),et=Zr==="ara_device_wss"&&!Wr?(l.loadProxy??j)()?.url:void 0,Dr;ye="environment_owner";let Ar=e.headless&&e.deviceIdentity&&x.environment_binding?Ws(Ee,{runId:e.runId,...e.deviceIdentity,binding:x.environment_binding,expiresAtMs:Date.parse(x.expires_at),identity:()=>Dr?.()??null}):void 0;ye="job_environment";let Ht=!Ar&&ut.kind==="managed"&&Gr?cr(ir,"job.env"):null;if(Ht)try{ln(Ht,"",{mode:384,flag:"wx"})}catch(rr){if(!(rr instanceof Error&&("code"in rr)&&rr.code==="EEXIST"))throw rr}let _n={url:x.relay_url,transport:Zr,...et===void 0?{}:{proxyUrl:et},...e.localGithubConfinement?{localGithubConfinement:!0}:{},...x[Y]&&Ar?{gitCredentialEnvironment:!0}:{},workerVersion:D,protocolVersion:P,workerArtifactSha256:b,workerEntrypoint:R,...process.platform==="win32"?{bashExecutable:se()}:{},targetGeneration:x.target_generation,fenceId:Pr,workRoot:ir,workspaceAliasPath:ir,jobEnvPath:Ur,...Ar?{environmentSnapshotPath:Ar.path,...e.hostExecution?{executionEnvironment:hr()}:{},environmentExpectedBinding:{runId:e.runId,...e.deviceIdentity,binding:x.environment_binding}}:Ht?{jobEnvSourcePath:Ht,workspacePoolPath:Tr(ir)}:Gr?{}:{jobEnvSourcePath:ai(ir)},repoPath:kr,replSocketPath:Lr,...x.cloud_browser?{browserRunId:e.runId}:{},readyPath:nr,launchId:or,expiresAtMs:Date.parse(x.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...Rr?{managedJobs:{journalDirectory:Rr.journalDirectory,scopeId:Rr.scopeId},jobControlSocketPath:Rr.socketPath}:{},...Rr&&F?{jobsUser:{...F,...T!==null?{modelGid:T}:{}}}:{},...e.managedPty&&Rr&&Ar?{managedPty:{version:1,...e.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:fr()}:{}}}:{},...z&&!he?{allowedTools:["bash","read","write","edit"]}:J?{allowedTools:fe==="bash"?["bash"]:["bash","repl"]}:{}};if(Ar||Gr&&!Ht)ln(Ur,"",{mode:384});else Zd(ir,Ur);ye="config_write",ln(We,JSON.stringify(_n),{mode:384}),ye=null;let rt={session_id:x.session_id,environment_id:x.environment_id,hands_protocol_version:P,hands_worker_version:D,hands_worker_artifact_sha256:b,hands_worker_entrypoint:R,target_generation:x.target_generation,target_fence_id:x.target_fence_id,executor_launch_id:or},Kt=null,uo=!1,fo=!1,po,Ir=null,_o,ho,Gt="failed",go=null,gn=Promise.resolve(),bo=null,bn=async(rr,Or)=>{try{await G(rr,Or)}catch{}};try{w("event_started");let rr,Or=(async()=>{await e.emitEvent("hands.started",{...rt,policy_mode:"full_access",policy_version:1,path_source:xe.source}),rr=Date.now()})();Or.catch(()=>{return}),w("worker_setup");let tt=x.browser_egress?{mode:"enforce",allowedDomains:x.browser_egress.allowed_domains}:{mode:"off"};if(fe&&fe!=="bash")Kt=await(l.startNodeRepl??qs)({socketPath:Lr,workRoot:ir});else if(!J&&!x.cloud_browser&&he)Kt=await(l.startRepl??Ps)({socketPath:Lr,browserExecutablePath:he,workspaceRoot:kr,...e.managedBrowser?{managedBrowser:e.managedBrowser}:{},...e.desktopRecording?{recording:e.desktopRecording}:{},networkPolicy:tt,onEgressDenied:(Ne)=>{let Hr=Ds(Ne.host);f(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:Hr,reason:Ne.reason,run_id:e.runId})),gn=gn.then(()=>G("hands.browser_egress_denied",{destination_id:Hr,reason:Ne.reason})).catch((Vt)=>{bo??=Vt})}}).catch((Ne)=>{if(!z||e.signal.aborted||I()>=Date.parse(x.expires_at)||!sl(Ne,Lr))throw Ne;return Object.assign(_n,{allowedTools:["bash","read","write","edit"]}),ln(We,JSON.stringify(_n),{mode:384}),fo=!0,null});let pt=fn({configPath:We,root:kr,grantedRoot:qe,workRoot:ir,workspacePoolPath:un,temporaryDirectory:Ee,path:xe.path,executablePath:l.executablePath,sourceEntrypoint:l.sourceEntrypoint}),vn=Date.now(),kn,wo,Sn=l.takePrespawnedWorker?.(pt)??null;if(po=l.takePrespawnedWorker?Sn!==null:void 0,Ir=Sn??(l.spawnWorker??((Ne)=>vd(Ne.command,Ne.args,Ne.options)))(pt),!Sn)l.adoptSpawnedWorker?.(Ir);Ir.stderr?.on("data",el(or,(Ne)=>{if(Ne.event==="hands.worker.connecting")kn??=Ne.timestampMs;else if(Ne.event==="hands.worker.open")wo??=Ne.timestampMs;if(f(JSON.stringify({...Ne,run_id:e.runId})),Ne.event==="hands.worker.permission_denied"&&typeof Ne.reason==="string"){let[Hr,Vt]=Ne.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(Hr??"")&&["bash","read","write","edit"].includes(Vt??""))G("permission.denied",{provenance:Hr,operation:Vt}).catch(()=>{return})}}));let yo=!1;Ir.on("error",()=>{yo=!0}),Ir.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{}}),Te=Ir,w("worker_ready_wait");let Nt=await rl({path:nr,launchId:or,fenceId:Pr,targetGeneration:x.target_generation,child:Ir,spawnFailed:()=>yo,signal:e.signal,timeoutMs:l.readyTimeoutMs??Hd,now:I}),ci=Date.now();if(Dr=()=>{if(!Ir||Ir.exitCode!==null||Ir.signalCode!==null)return null;let Ne=on(nr,Nt);return Ne?{generation:Ne.targetGeneration,fenceId:Ne.fenceId}:null},Rr){let Ne={root:qe,runId:e.runId,operationId:e.operationId,scopeId:Rr.scopeId,socketPath:Rr.socketPath,generation:Nt.targetGeneration,fenceId:Nt.fenceId,executorLaunchId:or,expiresAtMs:Date.parse(x.expires_at),readIdentity:Dr,workspace:ut,localGithubConfinement:e.localGithubConfinement===!0};if(Ar)Ne.environment=Ar;if(e.claimOwner&&e.deviceIdentity&&e.claimOwner.device_id===e.deviceIdentity.deviceId){let Hr=[e.deviceIdentity.apiOrigin,x.relay_url];if(et)Hr.push(et);Ne.previewAuthority={owner:Object.freeze({...e.claimOwner}),rootId:e.deviceIdentity.rootId,relayOrigin:new URL(x.relay_url).origin,deniedPorts:lr(Hr)}}ho=Ko(Ne)}if(await new Promise((Ne)=>{setImmediate(Ne)}),$t)yr(ir);let Jt;if(S&&Ar){try{let Ne=Ar.install(S);Jt={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:Jt!==void 0}))}catch{}}S=void 0;let vo=!1;if(e.headless){let Ne=Kd(kr,F);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.");vo=Ne==="checked"}w("event_ready");let ko=M(Or);ko.catch(()=>{return});let So=Date.now();uo=!0,await G("hands.ready",{...rt,expiry_diagnostic:W,startup_stages:{version:1,browser_resolution_ms:Nr(g.get("browser_resolution"),g.get("path_resolution")),path_resolution_ms:Nr(g.get("path_resolution"),g.get("workspace_setup")),workspace_setup_ms:Nr(g.get("workspace_setup"),g.get("event_started")),repl_setup_ms:Nr(g.get("worker_setup"),vn),worker_boot_ms:Nr(vn,kn),worker_dial_ms:Nr(kn,wo),worker_ready_ms:Nr(vn,ci),started_event_ms:Nr(g.get("event_started"),rr),started_join_wait_ms:Nr(g.get("event_ready"),So),total_ms:Nr(g.get("entered"),So)},...al(e.claimedAtMs,g.get("entered"),po),...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:Nt.generation,...Jt?{environment_installed:Jt}:{},...vo?{workspace_checked:!0}:{},...z&&!Kt?{browser_state:"unavailable",browser_reason_code:fo?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await ko,w("ready"),_o=Gs({path:nr,initial:Nt,signal:e.signal,isAlive:()=>Ir!==null&&Ir.exitCode===null&&Ir.signalCode===null&&I()<Date.parse(x.expires_at),publish:(Ne,Hr)=>e.emitEvent("hands.reconnected",{...rt,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 Eo=await nl({child:Ir,signal:e.signal,expiresAt:Date.parse(x.expires_at),now:I});if(Eo==="cancelled"){let Ne=e.signal.reason instanceof r?e.signal.reason.code:"cancelled";throw Gt=Ne,new r(Ne,"Reason Hands was cancelled.")}if(Eo==="exited")throw new r("hands_worker_exited","Reason Hands exited unexpectedly.");return Gt="expired",{...rt,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(rr){go=rr;let Or=rr instanceof r?rr.code:"hands_failed",tt=Or==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(Or);if(Gt=tt?Or:"failed",!tt)await bn("hands.failed",{...rt,reason_code:Or});throw rr}finally{_o?.stop(),ho?.();let rr=Ir?await tl(Ir,l.stopTimeoutMs??Nd):null,Or=!1;await e.desktopRecording?.close();try{await Kt?.stop()}catch{Or=!0}if(await gn,(rr==="stopped"||rr==="already_exited"&&!uo)&&!Or)await bn("hands.stopped",{...rt,reason_code:Gt});else if(rr!==null||Or){if(await bn("hands.failed",{...rt,reason_code:rr==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),go===null||Or)throw new r("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(bo!==null)throw new r("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(le){let he=Is(ye,le);if(he)try{f(JSON.stringify({event:"sandbox.hands_workspace_failed",...he}))}catch{}throw le}finally{try{if(!Te||Te.exitCode!==null||Te.signalCode!==null)Xe?.();if(ze!==null&&(!Te||Te.exitCode!==null||Te.signalCode!==null))Ad(ze,{recursive:!0,force:!0})}finally{Ze?.(),$e()}}}
|
|
452
|
-
export{B,m,
|
|
445
|
+
`;function md(e=process.execPath,l=process.versions.bun){return l?"node":e}function Zn(e){try{cd(e)}catch{}}function sn(e,l){e.end(`${JSON.stringify(l)}
|
|
446
|
+
`)}function Qn(e){return JSON.stringify(e)}function hd(e){let l=sd(Ys(fd(),"reason-node-repl-")),f=Ys(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((I)=>`(subpath ${Qn(I)})`).join(" ")})`,`(allow file-read* file-write* (subpath ${Qn(e.workRoot)}) (subpath ${Qn(l)}))`].join(`
|
|
447
|
+
`);dd(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,ad(l,{recursive:!0,force:!0})}}}async function gd(e){let l=id(e.workRoot),f=e.nodeExecutable??md(),_=["--max-old-space-size=512","--permission",`--allow-fs-read=${l}`,`--allow-fs-write=${l}`,"-e",_d],w=He({home:l,temporaryDirectory:l}),S=e.platformName??ud();if(S==="linux")return{command:f,args:_,cwd:l,env:w,async cleanup(){}};if(S==="darwin")return hd({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")),pd)})])}finally{clearTimeout(l)}}async function Zs(e){if(e.executionMode!=="single-evaluation")throw Error(Ls);let l=await gd(e),f;try{f=nd(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,I=!1,W="";f.stderr.setEncoding("utf8"),f.stderr.on("data",(be)=>{W=`${W}${be}`.slice(-16384)});let x=f.stdout,M,G=(be,Oe,$e)=>{if($e)be.failure??=$e;if(be.finishing)return;be.finishing=!0,I=!0,f.kill("SIGKILL"),Mt(_).then(()=>{if(be.failure)be.reject(be.failure);else be.resolve(Oe??{})},(qe)=>be.reject(qe))},F=()=>{if(I=!0,M)G(M,void 0,Error("hands_node_repl_state_lost"));else f.kill("SIGKILL")},T="";x?.setEncoding("utf8"),x?.on("data",(be)=>{if(M?.finishing||I)return;if(T+=be,T.length>Xs){F();return}while(!0){let Oe=T.indexOf(`
|
|
448
|
+
`);if(Oe===-1)return;let $e=T.slice(0,Oe);T=T.slice(Oe+1);let qe=M;if(!qe){F();return}try{let ye=JSON.parse($e);if(qe.action==="probe")qe.resolve(ye);else{G(qe,ye);return}}catch{G(qe,void 0,Error("invalid_hands_node_repl_child_response"));return}}});let re=(be)=>{let Oe=W.trim(),$e=be??Error(Oe?`hands_node_repl_child_exited:${Oe}`:"hands_node_repl_child_exited");if(I=!0,M&&!M.finishing)G(M,void 0,$e)};f.once("error",re),f.once("close",()=>re()),f.stdin.on("error",re);let J=(be)=>new Promise((Oe,$e)=>{if(S||I||f.exitCode!==null||f.signalCode!==null){$e(Error(I?"hands_node_repl_state_lost":"hands_node_repl_stopped"));return}let qe=setTimeout(F,be.action==="probe"?1e4:Math.max(1,Math.min(e.evaluationTimeoutMs??oo-1000,oo-1000))),ye={action:be.action,finishing:!1,resolve(Fe){if(M===ye)M=void 0;clearTimeout(qe),Oe(Fe)},reject(Fe){if(M===ye)M=void 0;clearTimeout(qe),$e(Fe)}};M=ye,f.stdin.write(`${JSON.stringify(be)}
|
|
449
|
+
`,(Fe)=>{if(!Fe)return;G(ye,void 0,Fe)})});try{if(!x){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;Zn(e.socketPath);let ve=ld.createServer((be)=>{fe.add(be),be.once("close",()=>fe.delete(be)),be.setEncoding("utf8");let Oe="",$e=!1,qe=!1;be.once("close",()=>{if(qe)F()}),be.on("error",()=>be.destroy()),be.on("data",(ye)=>{if($e)return;if(Oe+=ye,Oe.length>Xs){$e=!0,sn(be,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let Fe=Oe.indexOf(`
|
|
450
|
+
`);if(Fe===-1)return;$e=!0;let Ve=Oe.slice(0,Fe);z=z.then(async()=>{if(be.destroyed)return;try{let Te=JSON.parse(Ve);if(Te.action!=="evaluate"||typeof Te.code!=="string")throw Error("Invalid REPL request");qe=!0;let le=await J({action:"evaluate",code:Te.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(Te){qe=!1,sn(be,{ok:!1,error:Te instanceof Error?Te.message:String(Te),stack:Te instanceof Error?Te.stack:void 0})}}).catch((Te)=>{sn(be,{ok:!1,error:Te instanceof Error?Te.message:String(Te)})})})});try{await new Promise((be,Oe)=>{ve.once("error",Oe),ve.listen(e.socketPath,()=>{ve.off("error",Oe);try{od(e.socketPath,384),be()}catch($e){ve.close(()=>Oe($e))}})})}catch(be){S=!0,f.kill("SIGKILL");try{await Mt(_)}finally{await l.cleanup(),Zn(e.socketPath)}throw be}return{socketPath:e.socketPath,async stop(){if(S)return;S=!0;let be=new Promise((Oe)=>ve.close(()=>Oe()));for(let Oe of fe)Oe.destroy();await be,z.catch(()=>{return}),F();try{await Mt(_)}finally{await l.cleanup(),Zn(e.socketPath)}}}}var so=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var Qs="/workspace",ri="/var/lib/reason/sessions",bd="/var/lib/reason/session-controls";function wr(e){let l=`${ri}/`;if(!e.startsWith(l))return null;let f=e.slice(l.length);if(!so.test(f)||f!==f.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${bd}/${f}/job.env`}function wd(e){if(!so.test(e))throw Error("personal_computer_invalid_identity");return e.toLowerCase()}function an(e){let l=wd(e);return{runtimeRoot:`${ri}/${l}`,workspaceRoot:`${Qs}/sessions/${l}`,sharedRoot:Qs}}var ti="/root/.ara/cloud-browser/repl.sock";function co(e){return e==="compute"}function ni(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 lo="browser_egress",oi=Zo,Hd=45000,Nd=Xt+1500,Xr=/^[A-Za-z0-9._:-]{1,160}$/,Ld="/run/ara-hands";function Bd(e,l,f=ii()){if(e==="darwin")return{temporaryRoot:f,prepareRoot:!1,sessionMode:448};return{temporaryRoot:l??Ld,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 Rt(e=ge(),l=Cs){return e&&l()?Gn:null}function jd(e,l){if(!l&&(e??"linux")==="linux")return ti;return ni(l,void 0,e??"linux").socket}function Pt(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function ci(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 br extends r{expiryDiagnostic;constructor(e){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=e}}function Md(e){return Pt(e)&&Object.keys(e).every((l)=>l==="source_path"||l==="branch")&&(e.source_path===void 0||X(e.source_path))&&typeof e.branch==="string"&&Jn.test(e.branch)}function Wd(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",Ye,lo,St,Q,Y,q]),I=Pt(e)?e:null,W=I?.[lo],x=I?.[St],M=I?.[Y],G=W===void 0||(I?.[Ye]===Yr||M===pe&&I?.[Ye]===void 0)&&Pt(W)&&Object.keys(W).every((ve)=>ve==="mode"||ve==="allowed_domains")&&W.mode==="enforce"&&Array.isArray(W.allowed_domains)&&W.allowed_domains.length<=256&&W.allowed_domains.every((ve)=>typeof ve==="string"&&Nn(ve));if(!Pt(e)||w.some((ve)=>!(ve in e))||Object.keys(e).some((ve)=>!S.has(ve))||!G||M!==void 0&&M!==pe||I?.[q]!==void 0&&I[q]!==Re||I?.personal_workspace!==void 0&&(I.personal_workspace!==!0||I[Ye]!==Yr)||I?.cloud_browser!==void 0&&(I.cloud_browser!==!0||I[Ye]!==Yr)||I?.sandbox_provider!==void 0&&!co(I.sandbox_provider)||I?.sandbox_os!==void 0&&I.sandbox_os!=="linux"||x!==void 0&&(I?.[Ye]!==kt||!js(x))||Ye in e&&e[Ye]!==Yr&&e[Ye]!==kt&&e[Ye]!==jr||e.workspace_path!==void 0&&(!X(e.workspace_path)||e[Ye]!==jr)||e.workspace_worktree!==void 0&&(e.workspace_path===void 0||!Md(e.workspace_worktree))||typeof e.relay_url!=="string"||typeof e.session_id!=="string"||!Xr.test(e.session_id)||e.workspace_id!==void 0&&(typeof e.workspace_id!=="string"||!Xr.test(e.workspace_id))||e.legacy_workspace_id!==void 0&&(typeof e.legacy_workspace_id!=="string"||!Xr.test(e.legacy_workspace_id))||e[Ce]!==void 0&&(e[Ce]!==ue||(Ye in e))||e[Ae]!==void 0&&(e[Ae]!==Z||(Ye in e))||e[Q]!==void 0&&(typeof e[Q]!=="string"||!Xr.test(e[Q]))||typeof e.environment_id!=="string"||!Xr.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!==D||e.hands_worker_artifact_sha256!==b||!Ks(e.hands_worker_entrypoint)||!U(e.target_generation)||!N(e.target_fence_id))throw new r("invalid_hands_payload","Reason Hands connection payload is invalid.");let F;try{F=new URL(e.relay_url)}catch{throw new r("invalid_hands_relay","Reason Hands relay URL is invalid.")}if((ci(F.hostname)?F.protocol!=="ws:":F.protocol!=="wss:")||F.username||F.password||F.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(F.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-_>oi?"over_cap":"accepted",z={version:1,outcome:J,clock_source:l===void 0?"date_now":"injected",validation_now_ms:gt(_),expiry_ms:gt(re),remaining_ms:Number.isSafeInteger(re-_)?re-_:null,maximum_lifetime_ms:oi,cli_artifact:Gs()};if(J!=="accepted")throw new br(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}:{},...co(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:F.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]===Z?{[Ae]:Z}:{},...typeof e[Q]==="string"?{[Q]:e[Q]}:{},...e[Y]===pe?{[Y]:pe}:{},...e[q]===Re?{[q]:Re}:{},...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:D,hands_worker_artifact_sha256:b,hands_worker_entrypoint:R,target_generation:e.target_generation,target_fence_id:e.target_fence_id,...Ye in e?{[Ye]:e[Ye]}:{},...x===void 0?{}:{[St]:x},...W===void 0?{}:{[lo]:{mode:"enforce",allowed_domains:[...new Set(W.allowed_domains)].sort()}}}}function Fd(){let e=new Map;return{acquire(l,f){if(e.has(l))return null;let _=[...e.values()],w=(I)=>f.group!==void 0&&I.group===f.group;if(f.exclusive?!_.every(w):_.some((I)=>I.exclusive))return null;if(f.limit!==void 0&&!_.some(w)&&new Set(_.map((I,W)=>I.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 Ud=Fd();function zd(e,l){Tt(e,{recursive:!0,mode:448});let f=tr(e),_=()=>new r("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let I of l.split("/")){let W=cr(f,I);try{let M=dr(W);if(M.isSymbolicLink()||!M.isDirectory())throw _()}catch(M){if(!(M&&typeof M==="object"&&("code"in M)&&M.code==="ENOENT"))throw M;try{Tt(W,{mode:448})}catch(G){if(!(G&&typeof G==="object"&&("code"in G)&&G.code==="EEXIST"))throw G}}let x=dr(W);if(x.isSymbolicLink()||!x.isDirectory()||tr(W)!==W)throw _();f=W}if(process.platform==="win32"){let I=dr(f);if(I.isSymbolicLink()||!I.isDirectory()||tr(f)!==f||!Ur(tr(e),f))throw _();return f}let w=dr(f),S=xd(f,At.O_RDONLY|At.O_DIRECTORY|At.O_NOFOLLOW);try{let I=Od(S);if(!I.isDirectory()||I.dev!==w.dev||I.ino!==w.ino||tr(f)!==f)throw _();Rd(S,448)}finally{Ed(S)}return f}function $d(e,l=Lo(),f,_,w){if(!Xr.test(e)||f!==void 0&&!Xr.test(f))throw new r("invalid_hands_workspace","Reason Hands run identity is invalid.");let S=Tr(O({kind:"managed",workspaceId:e,..._?{base:_}:{},...w?{layout:w}:{}})),I=zd(l,Tr(S)),W=cr(I,Dd(S)),x=!1;try{let T=dr(W);if(x=!0,T.isSymbolicLink())throw new r("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!T.isDirectory())throw new r("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(T){if(T instanceof r||!(T&&typeof T==="object"&&("code"in T)&&T.code==="ENOENT"))throw T}if(w&&!x)try{let T=cr(tr(l),Tr(O({kind:"managed",workspaceId:e,..._?{base:_}:{}}))),re=dr(T);if(!re.isSymbolicLink()&&re.isDirectory()&&tr(T)===T)cn(T,W),x=!0}catch{}if(f&&f!==e){let T=cr(I,f);try{let re=dr(T);if(re.isSymbolicLink()||!re.isDirectory())throw new r("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let J=tr(T);if(Tr(J)!==I)throw new r("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let z=null;if(x){z=cr(I,`.${e}.previous`);try{throw dr(z),new r("invalid_hands_workspace","Reason Hands previous workspace backup already exists.")}catch(fe){if(fe instanceof r||!(fe&&typeof fe==="object"&&("code"in fe)&&fe.code==="ENOENT"))throw fe}cn(W,z)}try{cn(J,W)}catch(fe){if(z)cn(z,W);throw fe}x=!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 M=tr(W);if(Tr(M)!==I)throw new r("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let G=cr(M,"repo");try{let T=dr(G);if(T.isSymbolicLink()||!T.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(T){if(T instanceof r||!(T&&typeof T==="object"&&("code"in T)&&T.code==="ENOENT"))throw T}Tt(G,{recursive:!0,mode:448}),Wt(G,448);let F=tr(G);if(Tr(F)!==M)throw new r("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:M,repoPath:F}}function vr(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 Kd(e,l,f=process.geteuid?.(),_=process.platform){if(_==="win32")return"unknown";let w;try{if(w=dt(e),!w.isDirectory())return"unready";Sd(e,At.R_OK|At.W_OK|At.X_OK)}catch{return"unready"}try{if(dr(e).isSymbolicLink()||tr(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=Tr(e);;S=Tr(S)){let I;try{I=dt(S)}catch{return"unknown"}if(!(I.uid===l.uid?(I.mode&64)!==0:I.gid===l.gid?(I.mode&8)!==0:(I.mode&1)!==0))return"unknown";if(S===Tr(S))return"checked"}}function Gd(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 Jd(e,l,f,_=process.geteuid?.(),w){if(!Xr.test(l))return null;let S,I;try{S=tr(e),I=Tr(O({kind:"managed",workspaceId:l,...f?{base:f}:{},...w?{layout:w}:{}}))}catch{return null}let W=cr(S,I),x=tn(W)!==null,M=(J)=>new r("cloud_workspace_root_invalid",J),G;if(_===0){let J=Gd(S,I);if(J===null)return null;if(!x)throw new r("invalid_hands_workspace","As root, Reason Hands never prepares a workspace in folders another user owns.");G=J}else{if(!x)return null;let J,z;try{J=dr(Tr(W)),z=dr(W)}catch{return null}if(J.isSymbolicLink()||!J.isDirectory()||J.uid===0||z.uid!==0)return null;G=J.uid}let F=S;for(let J of I.split("/")){let z=cr(F,J),fe=!1;try{let ve=dr(z);fe=!ve.isSymbolicLink()&&ve.isDirectory()&&tr(z)===z}catch{}if(!fe)throw M("This cloud Session's workspace root is missing or is not a real directory.");F=z}vr(W);let T;try{T=Sr(W)}catch(J){if(J instanceof r)throw J;throw M("This cloud Session's workspace root changed while Reason Hands checked it.")}let re=null;try{re=dt(T.repoPath).uid}catch{}if(re!==G)throw new r("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return T}function Sr(e,l=!1){let f=tr(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=tr("/workspace"),x=tr(_);if(W!=="/workspace"||!dt(x).isDirectory()||!x.startsWith("/workspace/"))throw new r("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:f,repoPath:x}}let S=Hs(f);if(S&&w.isSymbolicLink()){let W=tr(_);if(W!==tr(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 I=tr(_);if(Tr(I)!==f)throw new r("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:f,repoPath:I}}function fo(e,l,f){if(l!==void 0&&!X(l))throw new r("invalid_hands_workspace",`Reason Hands ${f} is invalid.`);let _=ai(e,l??".");if(!Ur(e,_))throw new r("invalid_hands_workspace",`Reason Hands ${f} escapes its granted root.`);return _}function di(e,l,f){if(Qe(l)){let _=tr(f);return{anchor:_,target:ai(_,l),boundary:cr(_,de)}}return{anchor:e,target:fo(e,l,"folder"),boundary:e}}function Vd(e,l){if(!Ur(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(Cd).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 li(e,l){let f=tr(fo(e,l.source_path,"repository"));if(!Ur(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 qd(e,l,f,_=a()){try{let w=tr(e);if(uo(di(w,l,_).target))return;return await Ws(li(w,f))??void 0}catch{return}}function Yd(e,l,f,_,w=Xd,S=a()){let I=tr(e),{target:W,boundary:x,anchor:M}=di(I,l,S);if(f&&!uo(W)){let T=li(I,f);Vd(M,Tr(W));let re=["-c","core.hooksPath=/dev/null","-C",T];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)&&!uo(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 F=tr(W);if(G.isSymbolicLink()&&!Ur(x,F))throw new r("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!dt(F).isDirectory()||!Ur(x,F))throw new r("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(E(F))throw new r("protected_path","Credential and secret folders are unavailable to Sessions.");return F}function Xd(e){let l=Ho();if(!l)return{status:null,stderr:"git was not found. Install Git for Windows (https://git-scm.com/download/win)."};let f=kd(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 ui(e){return wr(e)??tn(e)?.jobEnv??cr(e,"job.env")}function Zd(e,l){let f=ui(e),_=dr(f);if(_.isSymbolicLink()||!_.isFile())throw new r("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");Pd(f,l),Wt(l,384)}function Qd(e){if(e.workspaceMode===jr&&e.workspacePath!==void 0){let I=e.home??a(),W=Yd(e.grantedRoot,e.workspacePath,e.workspaceWorktree,e.workspaceWorktreeStart,void 0,I);if(e.workspaceWorktree&&e.deviceId)Us(I,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===Yr)return{...Sr(e.grantedRoot,e.personalWorkspace),workspace:{kind:"root"},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if(e.workspaceMode===kt||e.workspaceMode===jr){let I=dr(e.grantedRoot);if(I.isSymbolicLink()||!I.isDirectory())throw new r("invalid_hands_workspace","Reason Hands root must be a real directory.");let W=tr(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=Jd(_,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=$d(l,_,e.legacyWorkspaceId,e.workspaceBase,e.workspaceLayout);return{...S,workspace:f,jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:Tr(S.workRoot),managedWorkspace:!0}}function wn(e){let{command:l,prefix:f}=Dn(e.executablePath,e.sourceEntrypoint),_=He({home:Td(),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:[bn,"ignore","pipe"]}}}var bn=process.platform==="win32"?"pipe":"ignore";function ot(e,l){if(process.platform!=="win32")return e.kill(l);if(l==="SIGTERM")e.stdin?.end();else if(e.pid)Me(e.pid);return!0}function el(e,l){let f="",_=!1,w=Date.now(),S=0,I=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled","permission_denied"].map((F)=>`hands.worker.${F}`)),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((F)=>["bash","read","write","edit"].map((T)=>`${F}:${T}`))]),x=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],M=["peerGeneration","socketState","closeCode"],G=new Set(["event","reason","launchId",...x,...M]);return(F)=>{for(let T of F.toString().split(/(?<=\n)/)){let re=T.endsWith(`
|
|
451
|
+
`);if(!_&&f.length+T.length<=2048)f+=T;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))||!I.has(z.event)||!W.has(z.reason)||z.event==="hands.worker.permission_denied"!==(typeof z.reason==="string"&&z.reason.includes(":"))||z.launchId!==e||x.some((fe)=>!Number.isSafeInteger(z[fe])||z[fe]<0)||M.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 rl(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:D,protocolVersion:P,workerArtifactSha256:b,workerEntrypoint:R});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.")}async function tl(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((I)=>e.once("exit",()=>I()));try{if(!ot(e,"SIGTERM"))return f()?"stopped":"unobserved"}catch{return f()?"stopped":"unobserved"}if(await si(_,l))return f()?"stopped":"unobserved";try{ot(e,"SIGKILL")}catch{}return await si(_,l)?"forced":"unobserved"}async function si(e,l){let f;try{return await Promise.race([e.then(()=>!0),new Promise((_)=>{f=setTimeout(()=>_(!1),l)})])}finally{clearTimeout(f)}}function nl(e){return new Promise((l)=>{let f=!1,_=(W)=>{if(f)return;f=!0,clearTimeout(I),e.signal.removeEventListener("abort",w),e.child.off("exit",S),l(W)},w=()=>_("cancelled"),S=()=>_("exited"),I=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 ol=no();function sl(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 il(e){return e.sandbox_provider==="compute"&&!e.cloud_browser&&e[Ye]===Yr}function al(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 Ot(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 I=l.now??Date.now,W,x=Wd(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||!x.environment_binding||!["darwin","linux","win32"].includes(process.platform)))throw new r("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let M=async(le)=>{let 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)=>M(e.emitEvent(le,he));if(e.headless&&(x.cloud_browser===!0||e.managedBrowser!==void 0||x[St]!==void 0||x[Ye]!==void 0&&x[Ye]!==jr))throw new r("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let F=ge(),T=x[q]===void 0?null:Rt(F);if(x[q]!==void 0&&(T===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(x[Y]!==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(x.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=x[Ye]===kt,z=e.headless||process.platform==="darwin"&&e.managedBrowser===void 0&&!x.cloud_browser&&!x.browser_egress&&(x[Ye]===void 0||x[Ye]===jr)||il(x),fe=J?x[St]??"bash":null,ve=fe?Bs(fe):null;if(ve)throw new r(ve,"Persistent Node REPL execution is unavailable; this benchmark profile cannot start.");let be=x[Ye],Oe=e.headless===!0&&e.ownComputer!==!0?e.handsSlots??1:void 0,$e=(l.slot??Ud).acquire(re,{exclusive:Oe===1||be!==void 0&&be!==jr,...Oe!==void 0&&Oe>1?{limit:Oe}:{},...e.headless===!0&&x[Q]!==void 0?{group:x[Q]}:{}});if(!$e)throw new r("hands_slot_busy",Oe!==void 0&&Oe>1?`This Reason worker runs at most ${Oe} sessions at a time.`:"This Reason Device runs one session at a time.");let qe=e.headless===!0?Ni(e.runId):null,ye=null,Fe=null,Ve,Te;try{w("browser_resolution");let le=e.headless&&l.browserExecutablePath===void 0?await jt():null,he=J||x.cloud_browser?null:l.browserExecutablePath===void 0?e.headless?le?.status==="resolved"?le.executablePath:null:await As(void 0,process.platform,e.managedBrowser):l.browserExecutablePath;if(!J&&!x.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??ol)()}catch{xe={path:vn(),source:"fallback"}}if(w("workspace_setup"),process.platform==="darwin"){let er=x[Ye]===jr&&x.workspace_path!==void 0?fo(e.root,x.workspace_worktree?x.workspace_worktree.source_path:x.workspace_path,"folder"):null;for(let Rr of new Set([e.root,...er?[er]:[]]))await ss(Rr)}let Le=x[Ye]===Yr||x[Ye]===kt?Bd(process.platform,l.sandboxRuntimeRoot):null,Be=e.headless&&e.runtimeDirectory?e.runtimeDirectory:Le?Le.temporaryRoot:ii();if(ye="private_runtime",e.headless&&e.runtimeDirectory){v(Be);let er=tr(e.root);if(!je(er,Be))throw new r("invalid_hands_workspace","Private worker state must not overlap the granted workspace.")}if(e.headless&&e.runtimeDirectory&&(!e.deviceIdentity||!x.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=tr(Id(cr(Be,"reason-hands-session-")));Fe=ke,Wt(ke,Le?.sessionMode??448);let We=cr(ke,"hands-config.json"),nr=cr(ke,"hands-ready.json"),or=yd(),Pr=x.target_fence_id;if(e.workspaceGrant){ye="workspace_grant",w("workspace_grant_wait");let er=e.workspaceGrant;await new Promise((Rr,rt)=>{let ft=()=>rt(new r("cancelled","Reason Hands was cancelled."));if(e.signal.aborted){ft();return}e.signal.addEventListener("abort",ft,{once:!0}),er.then(Rr,rt).finally(()=>e.signal.removeEventListener("abort",ft))})}ye="granted_root";let Ge=tr(e.root);ye="workspace_layout";let sr=x[Ye]===jr&&x.workspace_path!==void 0&&x.workspace_worktree?await qd(Ge,x.workspace_path,x.workspace_worktree):void 0,{workRoot:ir,repoPath:lr,jobEnvPath:Fr,workspacePoolPath:ln,managedWorkspace:Gr,workspace:lt,cloudSessionRoot:Ft}=Qd({grantedRoot:Ge,personalWorkspace:x.personal_workspace===!0,runId:e.runId,workspaceId:x.workspace_id,legacyWorkspaceId:x.legacy_workspace_id,workspaceBase:x[Ce],workspaceLayout:x[Ae],temporaryDirectory:ke,workspaceMode:x[Ye],applicationSupportPath:l.applicationSupportPath,...x.workspace_path===void 0?{}:{workspacePath:x.workspace_path},...x.workspace_worktree?{workspaceWorktree:x.workspace_worktree}:{},...sr?{workspaceWorktreeStart:sr}:{},...e.deviceIdentity?{deviceId:e.deviceIdentity.deviceId}:{}}),Zr="ara_device_wss";ye="jobs";let ur=e.headless&&e.runtimeDirectory?hr({runtimeDirectory:e.runtimeDirectory,root:Ge,runId:e.runId}):void 0;Ve=ur?.disposeSocket;let Mr=ur?Jo(ur):null;if(Mr)try{f(JSON.stringify({event:"hands.journal_owner_retired",run_id:e.runId,reason:Mr.reason,prior_executor_launch_id:Mr.executorLaunchId}))}catch{}if(ur&&[ir,lr].some((er)=>!je(er,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 ut=x.personal_workspace?ir.slice(ir.lastIndexOf("/")+1):void 0;if(ut&&ut!==x.workspace_id)throw new r("invalid_hands_workspace","Personal session identity does not match its Device grant.");ye="browser_socket";let Br=x.cloud_browser?jd(x.sandbox_os,ut):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${or}`:cr(ur?ur.launchDirectory:ke,"repl.sock");ye="relay_url";let Wr=ci(new URL(x.relay_url).hostname),Qr=Zr==="ara_device_wss"&&!Wr?(l.loadProxy??j)()?.url:void 0,Dr;ye="environment_owner";let Ar=e.headless&&e.deviceIdentity&&x.environment_binding?zs(ke,{runId:e.runId,...e.deviceIdentity,binding:x.environment_binding,expiresAtMs:Date.parse(x.expires_at),identity:()=>Dr?.()??null}):void 0;ye="job_environment";let Ct=!Ar&<.kind==="managed"&&Gr?cr(ir,"job.env"):null;if(Ct)try{dn(Ct,"",{mode:384,flag:"wx"})}catch(er){if(!(er instanceof Error&&("code"in er)&&er.code==="EEXIST"))throw er}let un={url:x.relay_url,transport:Zr,...Qr===void 0?{}:{proxyUrl:Qr},...e.localGithubConfinement?{localGithubConfinement:!0}:{},...x[Y]&&Ar?{gitCredentialEnvironment:!0}:{},workerVersion:D,protocolVersion:P,workerArtifactSha256:b,workerEntrypoint:R,...process.platform==="win32"?{bashExecutable:se()}:{},targetGeneration:x.target_generation,fenceId:Pr,workRoot:ir,workspaceAliasPath:ir,jobEnvPath:Fr,...Ar?{environmentSnapshotPath:Ar.path,...e.hostExecution?{executionEnvironment:gr()}:{},environmentExpectedBinding:{runId:e.runId,...e.deviceIdentity,binding:x.environment_binding}}:Ct?{jobEnvSourcePath:Ct,workspacePoolPath:Tr(ir)}:Gr?{}:{jobEnvSourcePath:ui(ir)},repoPath:lr,replSocketPath:Br,...x.cloud_browser?{browserRunId:e.runId}:{},readyPath:nr,launchId:or,expiresAtMs:Date.parse(x.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...ur?{managedJobs:{journalDirectory:ur.journalDirectory,scopeId:ur.scopeId},jobControlSocketPath:ur.socketPath}:{},...ur&&F?{jobsUser:{...F,...T!==null?{modelGid:T}:{}}}:{},...e.managedPty&&ur&&Ar?{managedPty:{version:1,...e.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:_r()}:{}}}:{},...z&&!he?{allowedTools:["bash","read","write","edit"]}:J?{allowedTools:fe==="bash"?["bash"]:["bash","repl"]}:{}};if(Ar||Gr&&!Ct)dn(Fr,"",{mode:384});else Zd(ir,Fr);ye="config_write",dn(We,JSON.stringify(un),{mode:384}),ye=null;let et={session_id:x.session_id,environment_id:x.environment_id,hands_protocol_version:P,hands_worker_version:D,hands_worker_artifact_sha256:b,hands_worker_entrypoint:R,target_generation:x.target_generation,target_fence_id:x.target_fence_id,executor_launch_id:or},Ut=null,po=!1,_o=!1,mo,Ir=null,ho,go,zt="failed",bo=null,fn=Promise.resolve(),wo=null,pn=async(er,Rr)=>{try{await G(er,Rr)}catch{}};try{w("event_started");let er,Rr=(async()=>{await e.emitEvent("hands.started",{...et,policy_mode:"full_access",policy_version:1,path_source:xe.source}),er=Date.now()})();Rr.catch(()=>{return}),w("worker_setup");let rt=x.browser_egress?{mode:"enforce",allowedDomains:x.browser_egress.allowed_domains}:{mode:"off"};if(fe&&fe!=="bash")Ut=await(l.startNodeRepl??Zs)({socketPath:Br,workRoot:ir});else if(!J&&!x.cloud_browser&&he)Ut=await(l.startRepl??Ts)({socketPath:Br,browserExecutablePath:he,workspaceRoot:lr,...e.managedBrowser?{managedBrowser:e.managedBrowser}:{},...e.desktopRecording?{recording:e.desktopRecording}:{},networkPolicy:rt,onEgressDenied:(Ne)=>{let Nr=Ns(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((Kt)=>{wo??=Kt})}}).catch((Ne)=>{if(!z||e.signal.aborted||I()>=Date.parse(x.expires_at)||!sl(Ne,Br))throw Ne;return Object.assign(un,{allowedTools:["bash","read","write","edit"]}),dn(We,JSON.stringify(un),{mode:384}),_o=!0,null});let ft=wn({configPath:We,root:lr,grantedRoot:Ge,workRoot:ir,workspacePoolPath:ln,temporaryDirectory:ke,path:xe.path,executablePath:l.executablePath,sourceEntrypoint:l.sourceEntrypoint}),mn=Date.now(),hn,yo,kn=l.takePrespawnedWorker?.(ft)??null;if(mo=l.takePrespawnedWorker?kn!==null:void 0,Ir=kn??(l.spawnWorker??((Ne)=>vd(Ne.command,Ne.args,Ne.options)))(ft),!kn)l.adoptSpawnedWorker?.(Ir);Ir.stderr?.on("data",el(or,(Ne)=>{if(Ne.event==="hands.worker.connecting")hn??=Ne.timestampMs;else if(Ne.event==="hands.worker.open")yo??=Ne.timestampMs;if(f(JSON.stringify({...Ne,run_id:e.runId})),Ne.event==="hands.worker.permission_denied"&&typeof Ne.reason==="string"){let[Nr,Kt]=Ne.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(Nr??"")&&["bash","read","write","edit"].includes(Kt??""))G("permission.denied",{provenance:Nr,operation:Kt}).catch(()=>{return})}}));let vo=!1;Ir.on("error",()=>{vo=!0}),Ir.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{}}),Te=Ir,w("worker_ready_wait");let Ht=await rl({path:nr,launchId:or,fenceId:Pr,targetGeneration:x.target_generation,child:Ir,spawnFailed:()=>vo,signal:e.signal,timeoutMs:l.readyTimeoutMs??Hd,now:I}),fi=Date.now();if(Dr=()=>{if(!Ir||Ir.exitCode!==null||Ir.signalCode!==null)return null;let Ne=on(nr,Ht);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:Ht.targetGeneration,fenceId:Ht.fenceId,executorLaunchId:or,expiresAtMs:Date.parse(x.expires_at),readIdentity:Dr,workspace:lt,localGithubConfinement:e.localGithubConfinement===!0};if(Ar)Ne.environment=Ar;if(e.claimOwner&&e.deviceIdentity&&e.claimOwner.device_id===e.deviceIdentity.deviceId){let Nr=[e.deviceIdentity.apiOrigin,x.relay_url];if(Qr)Nr.push(Qr);Ne.previewAuthority={owner:Object.freeze({...e.claimOwner}),rootId:e.deviceIdentity.rootId,relayOrigin:new URL(x.relay_url).origin,deniedPorts:pr(Nr)}}go=Vo(Ne)}if(await new Promise((Ne)=>{setImmediate(Ne)}),Ft)vr(ir);let $t;if(S&&Ar){try{let Ne=Ar.install(S);$t={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:$t!==void 0}))}catch{}}S=void 0;let ko=!1;if(e.headless){let Ne=Kd(lr,F);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.");ko=Ne==="checked"}w("event_ready");let Eo=M(Rr);Eo.catch(()=>{return});let Ro=Date.now();po=!0,await G("hands.ready",{...et,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"),mn),worker_boot_ms:Lr(mn,hn),worker_dial_ms:Lr(hn,yo),worker_ready_ms:Lr(mn,fi),started_event_ms:Lr(_.get("event_started"),er),started_join_wait_ms:Lr(_.get("event_ready"),Ro),total_ms:Lr(_.get("entered"),Ro)},...al(e.claimedAtMs,_.get("entered"),mo),...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:Ht.generation,...$t?{environment_installed:$t}:{},...ko?{workspace_checked:!0}:{},...z&&!Ut?{browser_state:"unavailable",browser_reason_code:_o?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await Eo,w("ready"),ho=qs({path:nr,initial:Ht,signal:e.signal,isAlive:()=>Ir!==null&&Ir.exitCode===null&&Ir.signalCode===null&&I()<Date.parse(x.expires_at),publish:(Ne,Nr)=>e.emitEvent("hands.reconnected",{...et,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 Oo=await nl({child:Ir,signal:e.signal,expiresAt:Date.parse(x.expires_at),now:I});if(Oo==="cancelled"){let Ne=e.signal.reason instanceof r?e.signal.reason.code:"cancelled";throw zt=Ne,new r(Ne,"Reason Hands was cancelled.")}if(Oo==="exited")throw new r("hands_worker_exited","Reason Hands exited unexpectedly.");return zt="expired",{...et,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(er){bo=er;let Rr=er instanceof r?er.code:"hands_failed",rt=Rr==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(Rr);if(zt=rt?Rr:"failed",!rt)await pn("hands.failed",{...et,reason_code:Rr});throw er}finally{ho?.stop(),go?.();let er=Ir?await tl(Ir,l.stopTimeoutMs??Nd):null,Rr=!1;await e.desktopRecording?.close();try{await Ut?.stop()}catch{Rr=!0}if(await fn,(er==="stopped"||er==="already_exited"&&!po)&&!Rr)await pn("hands.stopped",{...et,reason_code:zt});else if(er!==null||Rr){if(await pn("hands.failed",{...et,reason_code:er==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),bo===null||Rr)throw new r("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(wo!==null)throw new r("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(le){let he=Ds(ye,le);if(he)try{f(JSON.stringify({event:"sandbox.hands_workspace_failed",...he}))}catch{}throw le}finally{try{if(!Te||Te.exitCode!==null||Te.signalCode!==null)Ve?.();if(Fe!==null&&(!Te||Te.exitCode!==null||Te.signalCode!==null))Ad(Fe,{recursive:!0,force:!0})}finally{qe?.(),$e()}}}
|
|
452
|
+
export{B,m,je,te,pr,Gi,hr,Ki,it,Ji,Zi,Xi,Yi,fr,Qi,eo,mr,to,gr,_r,gn,_n,yr,ro,Ue,yn,wr,me,ge,Rt,br,vr,Sr,wn,bn,ot,Ot};
|