@reason-machines/cli-linux-x64 0.2.505 → 0.2.507
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 +8 -7
- package/bin/reason +2 -2
- package/bin/runtime/srt/sandbox-runtime.mjs +52 -52
- package/bin/vm-hands/api-credentials-q302458a.js +2 -0
- package/bin/vm-hands/api-e589y9e0.js +2 -0
- package/bin/vm-hands/connect-cli-zeqyjj5t.js +2 -0
- package/bin/vm-hands/credentials-drj5ktpt.js +2 -0
- package/bin/vm-hands/custom-endpoint-device-j1x988g0.js +2 -0
- package/bin/vm-hands/desktop-account-4525j7h3.js +2 -0
- package/bin/vm-hands/device-workspace-pt07525s.js +2 -0
- package/bin/vm-hands/fsevents-8zxmv89w.js +2 -0
- package/bin/vm-hands/hands-worker-source-atg5dc7b.js +2 -0
- package/bin/vm-hands/index-ttmxy9nd.js +12818 -0
- package/bin/vm-hands/install-receipt-6v65enmf.js +2 -0
- package/bin/vm-hands/local-automation-43ry1qn6.js +2 -0
- package/bin/vm-hands/local-capabilities-e43ra579.js +2 -0
- package/bin/vm-hands/local-desktop-users-9dqayaej.js +2 -0
- package/bin/vm-hands/local-display-mac-fnp3317m.js +2 -0
- package/bin/vm-hands/local-display-session-9pm9ed2m.js +2 -0
- package/bin/vm-hands/local-display-video-xtjezayy.js +2 -0
- package/bin/vm-hands/local-managed-process-d179a1aq.js +2 -0
- package/bin/vm-hands/local-pty-session-5yh2a63r.js +2 -0
- package/bin/vm-hands/managed-runtime-mydc95fa.js +2 -0
- package/bin/vm-hands/network-contract-rzw769gw.js +2 -0
- package/bin/vm-hands/package-r7sgmw4t.js +2 -0
- package/bin/vm-hands/permissions-g919jepr.js +2 -0
- package/bin/vm-hands/reason-hands-protocol-8fgk2s53.js +2 -0
- package/bin/vm-hands/serve-service-5twngyyg.js +2 -0
- package/bin/vm-hands/status-4da3v86c.js +10 -0
- package/bin/vm-hands/version-r5qbf8y9.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-2cf33ark.js +5 -0
- package/bin/vm-hands/{vm-hands-entry-lite-s8ty42st.js → vm-hands-entry-lite-2mskbtsd.js} +5 -9
- package/bin/vm-hands/vm-hands-entry-lite-38g65s5x.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-3ahrysca.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-3sjkzhf6.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-5gevvgec.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-5tbntcyq.js +42 -0
- package/bin/vm-hands/vm-hands-entry-lite-6a96d80a.js +14 -0
- package/bin/vm-hands/vm-hands-entry-lite-6x1an7es.js +7 -0
- package/bin/vm-hands/vm-hands-entry-lite-7651j949.js +52 -0
- package/bin/vm-hands/vm-hands-entry-lite-7777m86y.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-b7wy89y0.js → vm-hands-entry-lite-77j164ps.js} +54 -54
- package/bin/vm-hands/vm-hands-entry-lite-7v1rd0sk.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-87vmbt38.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-8wcyveeh.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-b4q5e57n.js +105 -0
- package/bin/vm-hands/vm-hands-entry-lite-bnxh4ax9.js +452 -0
- package/bin/vm-hands/vm-hands-entry-lite-eabever7.js +112 -0
- package/bin/vm-hands/vm-hands-entry-lite-ewr54tpc.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-f62fvme8.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-f69t48dj.js +4 -0
- package/bin/vm-hands/{vm-hands-entry-lite-8p8hz0j1.js → vm-hands-entry-lite-fcvf8md1.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-gvjffc5t.js +65 -0
- package/bin/vm-hands/vm-hands-entry-lite-hmaazqdr.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-mcjca0ez.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-mk5ayds8.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-ncbzy69k.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-np07qyeq.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-nqdstx24.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-psywfz8m.js +9 -0
- package/bin/vm-hands/vm-hands-entry-lite-qpdpzg8g.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-qxq147a5.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-qy9xg6em.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-ra8c0ytm.js +128 -0
- package/bin/vm-hands/{vm-hands-entry-lite-xd2dn3n8.js → vm-hands-entry-lite-rfz60hb3.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-rn2rhavz.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-rzr2ncf5.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-swrymqj9.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-tebh7dcm.js +6 -0
- package/bin/vm-hands/vm-hands-entry-lite-txd50spx.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-v6yygjyx.js +126 -0
- package/bin/vm-hands/vm-hands-entry-lite-v9engyp5.js +539 -0
- package/bin/vm-hands/vm-hands-entry-lite-v9qq2cgv.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-vrenpefs.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-vtc8mjpc.js +9 -0
- package/bin/vm-hands/{vm-hands-entry-lite-c8bf82tx.js → vm-hands-entry-lite-wrvz9jxy.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-x39tmj7j.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-yretc2th.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-znd9c7x0.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite.js +3 -1
- package/bin/vm-hands/vm-hands-executor-68r7m0z1.js +12 -0
- package/bin/vm-hands/vm-hands-op-runner-gppbedw9.js +2 -0
- package/bin/vm-hands/vm-hands-runtime-w2fb9gsk.js +4 -0
- package/bin/vm-hands/worker-preview-readiness-7xtgxsar.js +2 -0
- package/bin/vm-hands/worker-sandbox-s9pyac8p.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-credentials-23k36ayh.js +0 -2
- package/bin/vm-hands/api-jd29p2kc.js +0 -2
- package/bin/vm-hands/ask-relay-zpp0rkhg.js +0 -4
- package/bin/vm-hands/connect-cli-xyxgcg6z.js +0 -2
- package/bin/vm-hands/credentials-byna24dv.js +0 -2
- package/bin/vm-hands/custom-endpoint-device-p2agcsk0.js +0 -2
- package/bin/vm-hands/desktop-account-z16mmkxg.js +0 -2
- package/bin/vm-hands/device-workspace-y0tk3ne8.js +0 -2
- package/bin/vm-hands/hands-worker-source-0qa16xzj.js +0 -2
- package/bin/vm-hands/index-h6xkz48h.js +0 -12818
- package/bin/vm-hands/install-receipt-nnragt7p.js +0 -2
- package/bin/vm-hands/local-automation-xbpca0f3.js +0 -2
- package/bin/vm-hands/local-capabilities-30m8pzpv.js +0 -2
- package/bin/vm-hands/local-desktop-users-gxfywsan.js +0 -2
- package/bin/vm-hands/local-display-mac-n236gkpe.js +0 -2
- package/bin/vm-hands/local-display-session-ddafdm8k.js +0 -2
- package/bin/vm-hands/local-display-video-gha54xwa.js +0 -2
- package/bin/vm-hands/local-managed-process-0zwxyqxd.js +0 -2
- package/bin/vm-hands/local-pty-session-w1yrmjm0.js +0 -2
- package/bin/vm-hands/managed-runtime-8y90twae.js +0 -2
- package/bin/vm-hands/network-contract-v0fkg94d.js +0 -2
- package/bin/vm-hands/network-sign-in-3dkdkh3a.js +0 -34
- package/bin/vm-hands/package-z2dk6xva.js +0 -2
- package/bin/vm-hands/permissions-ga1ax8wd.js +0 -2
- package/bin/vm-hands/reason-hands-protocol-vzgxd159.js +0 -2
- package/bin/vm-hands/serve-service-42nqanvr.js +0 -2
- package/bin/vm-hands/status-m0g7k47a.js +0 -96
- package/bin/vm-hands/version-ye6800p2.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-00y3kn86.js +0 -7
- package/bin/vm-hands/vm-hands-entry-lite-0572m6cr.js +0 -344
- package/bin/vm-hands/vm-hands-entry-lite-07q2xvk1.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-0a4cy8gw.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-1nj03gbj.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-26xb026c.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-33h8294z.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-3882raa5.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-3rg3znp8.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-4swa18qz.js +0 -10
- package/bin/vm-hands/vm-hands-entry-lite-56v9haps.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-6x5pj2y0.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-8twscwtw.js +0 -112
- package/bin/vm-hands/vm-hands-entry-lite-8xe0wzp9.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-ah2ep922.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-b0p8f295.js +0 -52
- package/bin/vm-hands/vm-hands-entry-lite-c5gt0086.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-dgmap6z4.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-dhqmbqsh.js +0 -9
- package/bin/vm-hands/vm-hands-entry-lite-e1xjfj57.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-e4hwb89r.js +0 -66
- package/bin/vm-hands/vm-hands-entry-lite-g6r5xrk0.js +0 -105
- package/bin/vm-hands/vm-hands-entry-lite-ghhpgt3v.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-h5smacqn.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-jd31as70.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-k9n1pk42.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-kqbats5n.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-p9fwt68c.js +0 -42
- package/bin/vm-hands/vm-hands-entry-lite-pkk555dx.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-pmw3ycgc.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-q9g11dbj.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-r374pchj.js +0 -9
- package/bin/vm-hands/vm-hands-entry-lite-r665z809.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-rck5h8fr.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-rj8yq6gp.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-s8zfzv0k.js +0 -6
- package/bin/vm-hands/vm-hands-entry-lite-tafgty5k.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-tbdcmq09.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-td309c1y.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-v0bp1v66.js +0 -128
- package/bin/vm-hands/vm-hands-entry-lite-v0k8b768.js +0 -452
- package/bin/vm-hands/vm-hands-entry-lite-v4r1fggm.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-vqr3zrqr.js +0 -539
- package/bin/vm-hands/vm-hands-entry-lite-wbfmc0xn.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-x3pbyg92.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-yqn8h1p0.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-zj3hb5jk.js +0 -127
- package/bin/vm-hands/vm-hands-entry-lite-zz8tr0bm.js +0 -12
- package/bin/vm-hands/vm-hands-executor-6tncheya.js +0 -12
- package/bin/vm-hands/vm-hands-op-runner-s1ghsym7.js +0 -2
- package/bin/vm-hands/vm-hands-runtime-k6egwk2t.js +0 -4
- package/bin/vm-hands/worker-preview-readiness-wh0yg1dz.js +0 -2
- package/bin/vm-hands/worker-sandbox-s054x4zw.js +0 -2
|
@@ -1,452 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{ad as jQ,bd as CQ,cd as hZ,dd as vZ,ed as e9,fd as TQ}from"./vm-hands-entry-lite-s8zfzv0k.js";import{gd as WQ,hd as n9,id as g9,jd as j0,kd as B9,ld as v0,sd as G0,td as cZ}from"./vm-hands-entry-lite-b7wy89y0.js";import{Bd as S$,Gd as R$,ud as P$,vd as j8,xd as C8,yd as x$,zd as E$}from"./vm-hands-entry-lite-dhqmbqsh.js";import{Md as o9,Nd as a9,Od as UZ}from"./vm-hands-entry-lite-tafgty5k.js";import{$f as X8,Zf as _9,_f as p0,ag as x0,eg as F0,kf as l$,pf as u$}from"./vm-hands-entry-lite-p9fwt68c.js";import{Ah as O0}from"./vm-hands-entry-lite-26xb026c.js";import{mi as T$,si as S9,ti as H8}from"./vm-hands-entry-lite-td309c1y.js";import{$i as I0,Ii as a$,Ji as o$,Li as r$,Ni as k9,Oi as g$,Pi as y$,Qi as O8,Ti as b9,_i as q8,aj as N0,bj as f9,ij as I8,jj as t$,kj as h$,wi as tQ,zi as W9}from"./vm-hands-entry-lite-1nj03gbj.js";import{vj as mZ}from"./vm-hands-entry-lite-k9n1pk42.js";import{mk as G8,nk as m9,qk as fZ}from"./vm-hands-entry-lite-56v9haps.js";import{Ak as m$,Lk as X$,rk as Y8,sk as c0,tk as J8,uk as d0,vk as G9,wk as s9,xk as l8,yk as h0,zk as f0}from"./vm-hands-entry-lite-jd31as70.js";import{Rk as dQ}from"./vm-hands-entry-lite-c5gt0086.js";import{$k as O$,al as M8}from"./vm-hands-entry-lite-e1xjfj57.js";import{dl as I}from"./vm-hands-entry-lite-e4hwb89r.js";import{jl as dZ}from"./vm-hands-entry-lite-r665z809.js";import{ll as M}from"./vm-hands-entry-lite-v4r1fggm.js";import{nl as gZ,pl as y9,ql as s$,sl as n$,tl as i$,wl as yZ,xl as r0}from"./vm-hands-entry-lite-kqbats5n.js";import{Bl as S3,Gl as vQ}from"./vm-hands-entry-lite-pkk555dx.js";import{readFileSync as q$,realpathSync as C$,statSync as $4}from"fs";import{homedir as Q4}from"os";import{dirname as Z4,isAbsolute as X4,join as U9,sep as Y4}from"path";var W6="--proxy",B6="--proxy-ca-file",J4=262144;class Z0 extends Error{}function U8($){let Q;try{Q=new URL($)}catch{throw new Z0("The proxy must be a URL like https://proxy.example.com:3128.")}if(Q.protocol!=="https:"&&Q.protocol!=="http:")throw new Z0("The proxy URL must use the https or http scheme.");if(!Q.hostname)throw new Z0("The proxy URL must name a host.");if(Q.port!==""&&Number(Q.port)<1)throw new Z0("The proxy URL must use a port between 1 and 65535.");if(Q.pathname!==""&&Q.pathname!=="/"||Q.search||Q.hash)throw new Z0("The proxy URL must not carry a path, query, or fragment.");return Q.toString()}function L6($){let Q=new URL($.url),Z=Q.port||(Q.protocol==="https:"?"443":"80");return`${Q.hostname}:${Z}`}function G4($={}){let Q=$.home??Q4(),Z=$.statePath??T$();return[Z4(Z),U9(Q,".ssh"),U9(Q,".aws"),U9(Q,".gnupg"),U9(Q,".kube"),U9(Q,"Library","Keychains")]}function z4($,Q){return Q===$||Q.startsWith($+Y4)}function V4($,Q={}){if(!X4($))throw new Z0("The proxy CA file must be an absolute path.");let Z,X,Y;try{Z=C$($);let K=$4(Z);X=K.size,Y=K.isFile()}catch{throw new Z0("The proxy CA file does not exist or is not readable.")}if(!Y)throw new Z0("The proxy CA file must be a regular file.");if(X>J4)throw new Z0("The proxy CA file must be 256 KB or smaller.");let J=G4(Q).flatMap((K)=>{try{let G=C$(K);return G===K?[K]:[K,G]}catch{return[K]}});for(let K of[$,Z])if(J.some((G)=>z4(G,K)))throw new Z0("The proxy CA file must not live inside a credential directory.");let z;try{z=q$(Z,"utf8")}catch{throw new Z0("The proxy CA file is not readable.")}if(!z.includes("-----BEGIN CERTIFICATE-----"))throw new Z0("The proxy CA file must be a PEM certificate bundle.");return Z}function F6($,Q={}){if(!$.proxyUrl)throw new Z0("A proxy URL is required.");let Z=U8($.proxyUrl),X=$.caFile===void 0?void 0:V4($.caFile,Q);return{version:S9,url:Z,...X===void 0?{}:{caFile:X}}}function H6($,Q=fetch){if(!$)return Q;let Z,X=!1;return(J,z)=>{if(!X){if($.caFile)try{Z=q$($.caFile,"utf8")}catch{throw new Z0(`The configured proxy CA file is not readable: ${$.caFile}`)}X=!0}let K={...z,proxy:$.url,...Z===void 0?{}:{tls:{ca:Z}}};return Q(J,K)}}import{createHash as K4}from"crypto";import{isAbsolute as _$,join as D$,relative as I$,resolve as w9,sep as A$}from"path";var R9=I.string().min(1).refine(_$,"absolute path required"),N8=I.strictObject({version:I.literal(1),apiOrigin:I.url(),channel:I.enum(["staging","production"]),stateDirectory:R9,workspaceRoot:R9,lifetime:I.enum(["persistent","ephemeral"]),executionMode:I.enum(["confined","host"]).default("confined"),name:I.string().min(1).max(160).default("Reason headless worker"),slots:I.number().int().min(1).max(4).default(1),shutdownGraceMs:I.number().int().min(0).max(300000).default(30000),proxy:I.strictObject({version:I.literal(S9),url:I.string().refine(($)=>{try{return U8($)===$}catch{return!1}},"invalid proxy URL"),caFile:R9.optional()}).optional(),userChrome:I.boolean().optional(),cloudSessions:I.literal(!0).optional(),localLogins:I.boolean().optional(),folders:I.array(R9).min(1).max(31).optional()}),W4=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,_6=I.discriminatedUnion("channel",[N8,N8.extend({channel:I.literal("pr"),apiOrigin:I.string(),prEnvironment:I.string()}),N8.extend({channel:I.literal("local-qa"),apiOrigin:I.string()})]).superRefine(($,Q)=>{if($.channel==="local-qa"){if(!W4.test($.apiOrigin))Q.addIssue({code:"custom",message:"local QA worker requires an exact HTTPS trycloudflare.com quick-tunnel origin"})}else if($.channel==="pr"){let X=$.prEnvironment,Y=/^https:\/\/([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)\.up\.railway\.app$/.exec($.apiOrigin),J=Y?.[1]?.match(/(?:^|-)pr-[0-9]+(?=-|$)/g)?.map((z)=>z.replace(/^-/,""));if(!X||/^pr-[1-9][0-9]*$/.exec(X)?.[0]!==X||Y?.[0]!==$.apiOrigin||J?.length!==1||J[0]!==X)Q.addIssue({code:"custom",message:"PR worker requires explicit prEnvironment and an exact same-PR HTTPS Railway origin"})}else{let X=new URL($.apiOrigin);if(X.origin!==$.apiOrigin||X.username||X.password||X.protocol!=="https:"&&!(X.protocol==="http:"&&M8(X.origin))||!M8(X.origin)&&!O$($.channel,X.origin))Q.addIssue({code:"custom",message:"API origin must match channel (or loopback)"})}if(!N9($.workspaceRoot,$.stateDirectory))Q.addIssue({code:"custom",message:"state and workspace must be disjoint"});let Z=$.folders??[];if(new Set([$.workspaceRoot,...Z]).size!==Z.length+1||Z.some((X)=>!N9(X,$.stateDirectory)))Q.addIssue({code:"custom",message:"folders must be distinct and disjoint from state"})});function B4($){return D$($.stateDirectory,`headless-${$.channel==="pr"?$.prEnvironment:$.channel}`)}function D6($,Q={},Z={}){let X=$.executionMode==="host"?"unsandboxed":"sandboxed";return{worker:Object.freeze({executionMode:X,runtimeDirectory:B4($),handsSlots:$.slots,...Z.ownComputer?{ownComputer:!0}:{},readiness:Object.freeze({...Q}),...Z.persistentTerminals?{persistentTerminals:!0}:{},...Z.probing?.length?{probing:Object.freeze([...Z.probing])}:{},...Z.displayVideo?{displayVideo:!0}:{},...Z.handsBrowser&&Q["hands.connect"]===!0?{handsBrowser:!0}:{},...Z.githubSignedIn===void 0?{}:{githubSignedIn:Z.githubSignedIn},...$.userChrome!==!1&&Z.userChrome?{userChrome:Z.userChrome}:{},...$.cloudSessions&&Q["automation.call.v1"]===!0?{cloudSessions:!0}:{}}),proxy:$.proxy??null}}function N9($,Q){if(U0(Q,$))return!1;return!U0($,Q)||O0(D$(A$,I$(w9($),w9(Q))))}function U0($,Q){let Z=I$(w9($),w9(Q));return Z===""||Z!==".."&&!Z.startsWith(`..${A$}`)&&!_$(Z)}function I6($){let{proxy:Q,userChrome:Z,cloudSessions:X,localLogins:Y,folders:J,...z}=$;return K4("sha256").update(JSON.stringify(z)).digest("hex")}var L4=4,F4=[2375,2376,9222,9229];function w$($){let Q=new Set(F4);for(let Z of $){let X=new URL(Z);Q.add(Number(X.port||(["https:","wss:"].includes(X.protocol)?443:80)))}return Q}function _0(){throw new M("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var H4=60000;function k$($){let Q=new AbortController,Z=new Map,X=(G)=>JSON.stringify([G.jobId,G.port]);function Y(G){let W=$.authority.owner;if(Q.signal.aborted||!$.isCurrent()||$.expiresAtMs<=Date.now()||G.organization_id!==W.organization_id||G.user_id!==W.user_id||G.device_id!==W.device_id)_0()}function J(G){let W;try{W=$.environment.current()}catch{return null}return W.binding.target_generation===G.generation&&W.binding.target_fence_id===G.fenceId&&W.run_id===$.runId&&W.device_id===$.authority.owner.device_id&&W.root_id===$.authority.rootId?W:null}async function z(G,W,F){let B=await K(G,W,F);if(B!=="moved")return B;let V=await K(G,W,F);return V==="moved"?null:V}async function K(G,W,F){try{Y($.authority.owner);let B=$.identity();if(!B||F.aborted||G.expiresAtMs<=Date.now()||G.expiresAtMs>$.expiresAtMs)return null;let V=W.opened,U=V!==void 0&&B.generation>V.generation,H=J(B);if(U){if(H){if(H.revision<=V.revision||G.expiresAtMs>Date.parse(H.expires_at)||H.binding.target_revision!==V.attachmentRevision||H.binding.root_grant_revision!==V.grantRevision)return null;W.recoveringSinceMs=void 0}else if(Date.now()-(W.recoveringSinceMs??=Date.now())>H4)return null}else if(!H||G.expiresAtMs>Date.parse(H.expires_at)||V&&(B.generation!==V.generation||B.fenceId!==V.fenceId))return null;let L=await $.inspect(G.jobId,F),j=$.identity(),O=j&&J(j);Y($.authority.owner);let T=H&&{generation:B.generation,fenceId:B.fenceId,snapshotId:H.snapshot_id,revision:H.revision,attachmentRevision:H.binding.target_revision,grantRevision:H.binding.root_grant_revision},D=U?V:T;if(F.aborted||!j)return null;if(j.generation!==B.generation||j.fenceId!==B.fenceId||O?.snapshot_id!==H?.snapshot_id||O?.revision!==H?.revision)return"moved";let b=L.ok&&L.job.environmentSnapshotId!==void 0&&L.job.environmentRevision!==void 0?{snapshotId:L.job.environmentSnapshotId,revision:L.job.environmentRevision}:null;if(!L.ok||L.generation!==B.generation||!D||!b)return null;if((b.snapshotId!==D.snapshotId||b.revision!==D.revision)&&(U||!$.environment.carried(b.snapshotId,b.revision)))return null;if(!V&&B.generation===G.generation&&B.fenceId===G.fenceId)W.opened={...D,...b};return{executorLaunchId:$.executorLaunchId,job:L.job,binding:{organizationId:$.authority.owner.organization_id,userId:$.authority.owner.user_id,deviceId:$.authority.owner.device_id,rootId:$.authority.rootId,runId:$.runId,attachmentRevision:D.attachmentRevision,grantRevision:D.grantRevision,generation:D.generation,fenceId:D.fenceId,jobId:L.job.jobId,port:G.port,expiresAtMs:G.expiresAtMs}}}catch{return null}}return{async open(G,W,F){Y(W);let{binding:B,deviceRelayUrl:V}=x$(G);if(F.aborted||B.expiresAtMs<=Date.now()||B.expiresAtMs>Date.now()+P$.lifetimeMs||new URL(V).origin!==$.authority.relayOrigin)_0();let U=X(B),H=Z.get(U);if(H){if(!j8(H.binding,B)||H.relay!==V)_0();if(await H.opened,!await C8(()=>H.port.check())||F.aborted||H.abort.signal.aborted)_0();return{opened:!0,binding:B}}if(Z.size>=L4)_0();let L=new AbortController,j={},O=R$({binding:B,deniedPorts:$.authority.deniedPorts,readCurrentJob:()=>z(B,j,L.signal)}),T=()=>L.abort();if(F.addEventListener("abort",T,{once:!0}),Q.signal.addEventListener("abort",T,{once:!0}),F.aborted||Q.signal.aborted)T();let D=S$({binding:B,deviceRelayUrl:V,port:O,signal:L.signal}),b={binding:B,relay:V,abort:L,port:O,opened:D};Z.set(U,b);let y=()=>{if(F.removeEventListener("abort",T),Q.signal.removeEventListener("abort",T),Z.get(U)===b)Z.delete(U)};try{if((await D).closed.then(y),F.removeEventListener("abort",T),Y(W),L.signal.aborted||!await C8(()=>O.check()))_0();return{opened:!0,binding:B}}catch{L.abort(),y(),_0()}},async close(G,W){Y(W);let{binding:F}=E$(G),B=Z.get(X(F));if(!B||!j8(B.binding,F))_0();return B.abort.abort(),await B.opened.then((V)=>V.closed,()=>{return}),{closed:!0,binding:F}},dispose(){Q.abort();for(let G of Z.values())G.abort.abort();Z.clear()}}}import{WebSocket as T8}from"ws";var b$=($)=>("data"in $)?$.data.length:$.bytes,f$=2*g$;function s($){throw new M($,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var i0=($)=>!["starting","running"].includes($.state);function m6($,Q,Z=Date.now()){let X=["relay_url","session_id","expires_at","cols","rows","pty","workspace"];if(Object.keys($).length!==X.length||Object.keys($).some((W)=>!X.includes(W))||!q8(Q)||!q8($.session_id)||typeof $.expires_at!=="string"||typeof $.relay_url!=="string"||$.relay_url.length>4096||![$.cols,$.rows].every((W)=>Number.isSafeInteger(W)&&Number(W)>=1&&Number(W)<=O8))s("invalid_pty_request");let Y=$.pty;if(!Y||typeof Y!=="object"||Array.isArray(Y))s("invalid_pty_request");let J=Y;if(Object.keys(J).length!==2||J.version!==1||!f9(J.jobId))s("invalid_pty_request");let z;try{z=new URL($.relay_url)}catch{return s("invalid_pty_request")}if(!["ws:","wss:"].includes(z.protocol)||z.username||z.password||z.hash||z.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(z.hostname))s("invalid_pty_request");let K=Date.parse($.expires_at);if(!Number.isSafeInteger(K)||K<=Z)s("invalid_pty_request");return{workspace:m$($.workspace)??s("invalid_pty_request"),session:{jobId:J.jobId,sessionId:$.session_id,operationId:Q,relayUrl:z.href,cols:Number($.cols),rows:Number($.rows),leaseExpiresAtMs:Math.min(K,Z+43200000)}}}async function v$($){let{session:Q,binding:Z}=$;if(Z.assertCurrent(),$.signal.aborted||Date.now()>=Q.leaseExpiresAtMs)s("cancelled");let X=new T8(Q.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:k9}),Y=new AbortController,J=()=>{},z=()=>{Y.abort(),J()};$.signal.addEventListener("abort",z,{once:!0});let K=setTimeout(z,Math.max(1,Q.leaseExpiresAtMs-Date.now())),G=[],W=0,F=0,B=0,V=!1,U=!1,H=!1,L,j,O,T=(N)=>{O=new M(N,"Bound terminal input was refused."),z()};X.on("error",()=>T("pty_relay_unavailable")),X.on("close",z),X.on("message",(N,C)=>{if(Y.signal.aborted)return;if(!U){T("pty_not_ready");return}let A=Array.isArray(N)?Buffer.concat(N):N instanceof ArrayBuffer?Buffer.from(N):N;if(A.length===0)return;let f=G.at(-1),S=C&&f!==void 0&&"data"in f&&f.data.length+A.length<=k9;if(A.length>k9||W+A.length>y$){T("pty_input_backpressure");return}if(S)f.data=Buffer.concat([f.data,A]);else if(C)G.push({data:Buffer.from(A)});else try{let R=JSON.parse(A.toString("utf8"));if(R&&R.t==="close"&&Object.keys(R).length===1){H=!0,z();return}if(!R||R.t!=="resize"||Object.keys(R).length!==3||![R.cols,R.rows].every((_)=>Number.isSafeInteger(_)&&_>=1&&_<=O8))throw Error("invalid_control");G.push({cols:R.cols,rows:R.rows,bytes:A.length})}catch{T("invalid_pty_control");return}W+=A.length,J()});function D(N){return h$(JSON.stringify({...Z.scope,version:1,sessionId:Q.sessionId,operationId:Q.operationId,job:{...N,output:[],pty:N.pty?{...N.pty,output:[]}:void 0}}))}function b(N){if(!N.ok)s(N.error);let C=N.job;if(N.generation!==Z.scope.generation||C.jobId!==Q.jobId||!C.pty||C.leaseExpiresAtMs>Q.leaseExpiresAtMs||C.process&&C.process.executorLaunchId!==Z.scope.executorLaunchId||C.process&&j&&(C.process.pid!==j.pid||C.process.processGroupId!==j.processGroupId)||C.state!=="starting"&&(C.environmentRevision!==Z.environment.revision||C.environmentSnapshotId!==Z.environment.snapshotId))s("pty_binding_changed");if(D(C),C.process)j??={...C.process};return C}async function y(N){Z.assertCurrent();let C=await Z.request(N,Y.signal);if(Z.assertCurrent(),Y.signal.aborted)s("cancelled");let A=b(C);if(A.inputSequence!==F)s("job_input_sequence");if(!i0(A)&&A.leaseExpiresAtMs<=Date.now())s("pty_binding_changed");return A}function q(N){if(Z.assertCurrent(),Y.signal.aborted||X.readyState!==T8.OPEN||X.bufferedAmount+Buffer.byteLength(N)>f$)s("pty_output_backpressure");X.send(N)}function k(N){if(N.firstCursor>B+1)B=N.firstCursor-1;for(let C of N.pty.output){if(C.cursor<=B)continue;if(C.cursor!==B+1)s("pty_output_gap");let A=Buffer.from(C.dataBase64,"base64");if(X.bufferedAmount+A.length>f$)return!1;q(A),B=C.cursor}if(B!==N.nextCursor)s("pty_output_gap");return!0}async function g(N,C){let A;try{await Promise.race([$.emit(N,C),new Promise((f,S)=>{A=setTimeout(()=>S(new M("pty_event_unavailable","Terminal metadata delivery timed out.")),2000)})])}finally{clearTimeout(A)}}async function x(){let N=AbortSignal.timeout(b9),C=Z.request({jobId:Q.jobId,action:"cancel",input:{}},N),A,f=new Promise((S,R)=>{if(A=()=>R(new M("pty_cleanup_unconfirmed","Terminal cleanup acknowledgement was not observed within authority.")),N.addEventListener("abort",A,{once:!0}),N.aborted)A()});try{let S=await Promise.race([C,f]);if(N.aborted)s("pty_cleanup_unconfirmed");return b(S)}finally{N.removeEventListener("abort",A)}}try{await new Promise((S,R)=>{let _=setTimeout(()=>{z(),R(new M("pty_relay_unavailable","Terminal pairing timed out."))},5000),w=()=>{clearTimeout(_),R(new M("cancelled","Terminal pairing was cancelled."))};if(Y.signal.addEventListener("abort",w,{once:!0}),X.once("open",()=>{clearTimeout(_),Y.signal.removeEventListener("abort",w),S()}),Y.signal.aborted)w()}),Z.assertCurrent(),V=!0,L=await y({jobId:Q.jobId,action:"start",input:{mode:"pty",cols:Q.cols,rows:Q.rows,leaseExpiresAtMs:Q.leaseExpiresAtMs}});let N=Date.now()+5000;while(L.state==="starting"){if(Date.now()>=N)s("pty_not_ready");await new Promise((S)=>setTimeout(S,25)),L=await y({jobId:Q.jobId,action:"inspect",input:{after:B}})}if(L.state!=="running"||L.inputSequence!==0||L.leaseExpiresAtMs<=Date.now())s("pty_not_ready");await g("pty.ready",D(L)),U=!0,q(JSON.stringify({t:"open",cols:L.pty.cols,rows:L.pty.rows,receipt:D(L)}));let C=!1,A=0,f=!1;while(!Y.signal.aborted){let S=L.firstCursor>B+1,R=k(L);if(i0(L)){if(R)break}else if(S)C=!0;else if(C&&R&&Date.now()>=A){C=!1,A=Date.now()+1000;let{cols:w,rows:d}=L.pty;for(let p of[{cols:w,rows:d>1?d-1:2},{cols:w,rows:d}]){if(i0(L))break;let $0=++F;if(L=await y({jobId:Q.jobId,action:"resize",input:{sequence:$0,...p}}),L.inputSequence!==$0)s("job_input_sequence")}continue}let _=i0(L)||f?void 0:G.shift();if(_){W-=b$(_);let w=++F;try{L=await y("data"in _?{jobId:Q.jobId,action:"input",input:{sequence:w,dataBase64:_.data.toString("base64")}}:{jobId:Q.jobId,action:"resize",input:{sequence:w,cols:_.cols,rows:_.rows}})}catch(d){if(!(d instanceof M)||d.code!=="job_input_backpressure")throw d;F-=1,G.unshift(_),W+=b$(_),f=!0;continue}if(L.inputSequence!==w)s("job_input_sequence")}else if(await new Promise((w)=>{let d=setTimeout(w,f||!R?10:50);if(J=()=>{clearTimeout(d),w()},Y.signal.aborted||!f&&G.length)J()}),f=!1,J=()=>{},!Y.signal.aborted&&R)try{L=await y({jobId:Q.jobId,action:"inspect",input:{after:B}})}catch(w){if(!H||!(w instanceof M)||w.code!=="cancelled")throw w}}}catch(N){O??=N}finally{if(U=!1,G.length=0,clearTimeout(K),$.signal.removeEventListener("abort",z),z(),V&&(!L||!i0(L)))try{L=await x()}catch{L=void 0}try{if(!L||!i0(L)||L.pty?.cleanup!=="confirmed")s("pty_cleanup_unconfirmed");let N=D(L);if(X.readyState===T8.OPEN)await new Promise((C)=>{let A=setTimeout(C,500);X.send(JSON.stringify({t:"exit",code:L.exitCode,receipt:N}),()=>{clearTimeout(A),C()})});await g("pty.stopped",N)}catch(N){O??=N}X.terminate()}if(O)throw O;if($.signal.aborted)s("cancelled");if(!L)s("pty_cleanup_unconfirmed");return{receipt:D(L)}}import{createHash as U4,randomUUID as A8}from"crypto";import{spawnSync as e$}from"child_process";import{closeSync as c$,constants as _8,fstatSync as N4,fsyncSync as M4,lstatSync as j9,mkdirSync as j4,mkdtempSync as $Q,openSync as d$,readFileSync as C4,readdirSync as QQ,realpathSync as M9,rmSync as D8,unlinkSync as T4}from"fs";import{createConnection as q4}from"net";import{dirname as O4,join as b0,sep as _4}from"path";import{tmpdir as D4}from"os";var e=new Map,D0=new Map;function M0($,Q){return U4("sha256").update(JSON.stringify([$,Q])).digest("hex")}function a0($){try{j4($,{mode:448})}catch(Z){if(!(Z instanceof Error&&("code"in Z)&&Z.code==="EEXIST"))throw Z}let Q=j9($);if(!Q.isDirectory()||Q.isSymbolicLink()||!r0(Q)||M9($)!==$)throw new M("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function I4($){let Q;try{Q=j9($)}catch(Z){if(Z instanceof Error&&"code"in Z&&Z.code==="ENOENT")return!1;throw Z}return!Q.isDirectory()||Q.isSymbolicLink()||QQ($).length>0}function ZQ($){let Q=M0($.root,$.runId),Z=$.previousRuntimeDirectories?.find((z)=>I4(b0(z,"jobs",Q.slice(0,16))))??$.runtimeDirectory;a0(Z);let X=b0(Z,"jobs");a0(X);let Y=b0(X,Q.slice(0,16));if($.maxScopes!==void 0){let z=QQ(X);if(!Number.isSafeInteger($.maxScopes)||$.maxScopes<1||z.length>$.maxScopes||!z.includes(Q.slice(0,16))&&z.length>=$.maxScopes)throw new M("process_journal_capacity","Managed process receipt capacity is full; preserve uncertain jobs and reconcile their existing receipts before starting more work.")}a0(Y);let J=$Q(b0(s$(),"reason-j-"));try{return a0(J),{journalDirectory:Y,scopeId:Q,launchDirectory:J,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${A8()}`:b0(J,"control.sock"),disposeSocket:()=>D8(J,{recursive:!0,force:!0})}}catch(z){throw D8(J,{recursive:!0,force:!0}),z}}var A4=60000,P4=5000;function x4($){if(process.platform==="win32")return E4($);let Q=e$("ps",["-o","lstart=","-p",String($)],{encoding:"utf8",timeout:2000,env:{...process.env,LC_ALL:"C",LANG:"C"}}),Z=Q.status===0?/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(Q.stdout.trim()):null,X=Z?"JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(Z[1]):-1;if(!Z||X<0||X%3!==0)return null;let Y=new Date(Number(Z[6]),X/3,Number(Z[2]),Number(Z[3]),Number(Z[4]),Number(Z[5])).getTime();return Number.isFinite(Y)?Y:null}function E4($){let Q=e$(n$("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${$}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:i$()}),Z=Q.status===0?Date.parse(Q.stdout.trim()):Number.NaN;return Number.isFinite(Z)?Z:null}function XQ($,Q={}){let Z=b0($.journalDirectory,"owner.lock"),X;try{X=d$(Z,_8.O_RDONLY|_8.O_NOFOLLOW)}catch{return null}try{let Y=N4(X);if(!Y.isFile()||Y.nlink!==1||!r0(Y)||Y.size>4096)return null;let J=null;try{J=JSON.parse(C4(X,"utf8"))}catch{}let z;if(J===null){if((Q.now??Date.now)()-Y.mtimeMs<A4)return null;z={reason:"never_written",executorLaunchId:null}}else{let{version:W,scopeId:F,pid:B,createdAtMs:V,executorLaunchId:U}=J;if(W!==1||F!==$.scopeId||typeof U!=="string"||typeof B!=="number"||!Number.isSafeInteger(B)||B<1||B===process.pid||typeof V!=="number"||!Number.isSafeInteger(V))return null;if(!(Q.exists??((L)=>{try{return process.kill(L,0),!0}catch(j){return!(j instanceof Error&&("code"in j)&&j.code==="ESRCH")}}))(B))z={reason:"owner_exited",executorLaunchId:U};else{let L=(Q.startedAtMs??x4)(B);if(L===null||L<=V+P4)return null;z={reason:"pid_reused",executorLaunchId:U}}}let K=j9(Z);if(K.dev!==Y.dev||K.ino!==Y.ino)return null;T4(Z);let G=d$($.journalDirectory,_8.O_RDONLY);try{M4(G)}finally{c$(G)}return z}catch{return null}finally{c$(X)}}function YQ($){let Q={...$,workspace:$.workspace&&Object.freeze({...$.workspace}),previewAuthority:$.previewAuthority&&Object.freeze({...$.previewAuthority,owner:Object.freeze({...$.previewAuthority.owner}),deniedPorts:new Set($.previewAuthority.deniedPorts)})},Z=M0(Q.root,Q.runId);if(e.has(Z)||Q.operationId!==void 0&&D0.has(Q.operationId))throw new M("hands_jobs_busy","The Session already has a live Hands job supervisor.");let X={binding:Q,key:Z,terminals:new Map};if(Q.previewAuthority&&Q.environment)X.previews=k$({authority:Q.previewAuthority,runId:Q.runId,expiresAtMs:Q.expiresAtMs,executorLaunchId:Q.executorLaunchId,environment:Q.environment,isCurrent:()=>e.get(X.key)===X,identity:()=>{try{return o0(Q)}catch{return null}},inspect:(Y,J)=>{if(e.get(X.key)!==X)throw new M("preview_unavailable","The Hands supervisor is no longer current.");return JQ(Q,{jobId:Y,action:"inspect",input:{after:0}},J)}});if(e.set(Z,X),Q.operationId!==void 0)D0.set(Q.operationId,X);return()=>{if(e.get(X.key)===X)e.delete(X.key);if(Q.operationId!==void 0&&D0.get(Q.operationId)===X)D0.delete(Q.operationId);X.previews?.dispose();for(let Y of X.terminals.values())Y.abort()}}var S4=5000,R4=20;async function t6($){let Q=(Y)=>{throw new M("hands_rebind_unavailable",Y)};if(!N0($.operationId)||!N0($.runId)||!N0($.fenceId)||!I0($.targetGeneration))Q("Reason sent an invalid Hands rebind.");let Z=D0.get($.operationId);if(!Z||Z.binding.root!==$.root)return Q("No live Hands supervisor owns this operation.");for(let Y=Date.now()+S4;;){if($.signal?.aborted)Q("The Hands rebind was cancelled.");if(D0.get($.operationId)!==Z)Q("The Hands supervisor is no longer current.");let J=null;try{J=o0(Z.binding)}catch{}if(J&&J.generation===$.targetGeneration&&J.fenceId===$.fenceId)break;if(J&&J.generation>$.targetGeneration||Date.now()>=Y)Q("The executor did not adopt this take.");await new Promise((z)=>setTimeout(z,R4))}if(D0.get($.operationId)!==Z||e.get(Z.key)!==Z)Q("The Hands supervisor is no longer current.");let X=M0($.root,$.runId);if(Z.key===X)return;if(e.has(X))Q("The taking run already has a live Hands job supervisor.");e.delete(Z.key);for(let Y of Z.terminals.values())Y.abort();Z.key=X,e.set(X,Z)}function e6($){let Q="operationId"in $?D0.get($.operationId):e.get(M0($.root,$.runId)),Z=Q&&Q.binding.root===$.root?Q.binding:void 0;if(!Z?.environment||Z.expiresAtMs<=Date.now())throw new M("environment_unavailable","No live Hands supervisor owns this environment.");return Z.environment.install($.payload)}async function $2($){let Q=e.get(M0($.root,$.runId));if(!Q?.previews||!$.owner)throw new M("preview_unavailable","No authenticated Hands supervisor owns this preview.");return Q.previews.open($.payload,$.owner,$.signal)}async function Q2($){let Q=e.get(M0($.root,$.runId));if(!Q?.previews||!$.owner||$.signal.aborted)throw new M("preview_unavailable","No authenticated Hands supervisor owns this preview.");return Q.previews.close($.payload,$.owner)}async function Z2($){let Q=M0($.root,$.runId),Z=e.get(Q),X=Z?.binding,Y=X?.runId,J=X?.previewAuthority,z=X?.environment,K=$.owner&&{...$.owner},G=$.authority&&{...$.authority},W=()=>{throw new M("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!Z||!X||!J||!z||!K||!G||!X.workspace)return W();let F=Object.freeze({...X.workspace}),B=o0(X),V=z.current(),U=()=>{if(e.get(Q)!==Z||K.organization_id!==J.owner.organization_id||K.user_id!==J.owner.user_id||K.device_id!==J.owner.device_id||$.deviceId!==J.owner.device_id||$.rootId!==J.rootId||f0($.workspace)!==f0(F))W();let L=o0(X),j=z.current();if(L.generation!==B.generation||L.fenceId!==B.fenceId||j.run_id!==Y||j.device_id!==$.deviceId||j.root_id!==$.rootId||j.snapshot_id!==V.snapshot_id||j.revision!==V.revision||j.binding.target_generation!==B.generation||j.binding.target_fence_id!==B.fenceId||G.device_id!==$.deviceId||G.binding!==j.binding.kind||G.target_revision!==j.binding.target_revision||G.root_grant_revision!==j.binding.root_grant_revision||G.target_generation!==B.generation||G.target_fence_id!==B.fenceId)W()};if(U(),new URL($.session.relayUrl).origin!==J.relayOrigin||Z.terminals.has($.session.jobId)||Z.terminals.size>=4)return W();let H=new AbortController;Z.terminals.set($.session.jobId,H);try{return await v$({session:{...$.session,leaseExpiresAtMs:Math.min($.session.leaseExpiresAtMs,B.expiresAtMs,Date.parse(V.expires_at))},signal:AbortSignal.any([$.signal,H.signal]),emit:$.emit,binding:{assertCurrent:U,environment:{revision:V.revision,snapshotId:V.snapshot_id},scope:{runId:$.runId,deviceId:$.deviceId,rootId:$.rootId,workspace:F,binding:V.binding.kind,targetRevision:V.binding.target_revision,rootGrantRevision:V.binding.root_grant_revision,generation:B.generation,fenceId:B.fenceId,executorLaunchId:B.executorLaunchId},request:(L,j)=>GQ(B,I8(JSON.stringify({...L,type:"job",version:2,generation:B.generation,id:A8()})),j)}})}finally{if(Z.terminals.get($.session.jobId)===H)Z.terminals.delete($.session.jobId)}}async function X2($){if(f9($.payload.jobId))throw new M("pty_binding_required","PTY jobs require the bound terminal capability.");let Q=e.get(M0($.root,$.runId))?.binding;if(!Q||Q.expiresAtMs<=Date.now())throw new M("hands_jobs_unavailable","No live Hands supervisor owns this Session and root.");return JQ(Q,$.payload,$.signal)}var w4=1e4,k4=20,b4=o$/2,f4=a$/2,m4=($)=>$.output.reduce((Q,Z)=>Q+Z.text.length,0);async function JQ($,Q,Z){if(Object.keys(Q).some((W)=>!["jobId","action","input","waitForExitMs"].includes(W)))throw new M("invalid_payload","Unexpected job control field.");let{waitForExitMs:X,...Y}=Q;if(X!==void 0&&(Y.action!=="start"||typeof Y.input!=="object"||Y.input===null||!("script"in Y.input)||typeof X!=="number"||!Number.isSafeInteger(X)||X<1||X>w4))throw new M("invalid_payload","Only a script start may wait for its job, within its bound.");let J=(W)=>{let F=o0($);return GQ(F,I8(JSON.stringify({...W,type:"job",version:2,generation:F.generation,id:A8()})),Z)},z=await J(Y);if(X===void 0)return z;let K=Date.now()+X,G=z;while(G.ok&&["starting","running"].includes(G.job.state)&&G.job.output.length<b4&&m4(G.job)<f4&&!Z.aborted&&Date.now()<K){if(await new Promise((W)=>setTimeout(W,Math.min(k4,K-Date.now()))),Z.aborted)break;try{let W=await J({jobId:Y.jobId,action:"inspect",input:{after:0}});if(!W.ok)break;G=W}catch{break}}return G}function o0($){if($.expiresAtMs<=Date.now())throw new M("hands_jobs_unavailable","Hands authority expired.");let Q=$.readIdentity?$.readIdentity():$;if(!Q||!I0(Q.generation)||!N0(Q.fenceId)||Q.generation<$.generation||Q.generation===$.generation&&Q.fenceId!==$.fenceId)throw new M("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return $.generation=Q.generation,$.fenceId=Q.fenceId,{...$}}function GQ($,Q,Z){if(Z.aborted)return Promise.reject(new M("cancelled","Job control was cancelled."));return new Promise((X,Y)=>{let J=q4($.socketPath),z="",K=!1,G,W=(B,V)=>{if(K)return;if(K=!0,clearTimeout(G),Z.removeEventListener("abort",F),J.destroy(),B)Y(B);else X(V)},F=()=>W(new M("cancelled","Job control waiter cancelled; inspect before retrying mutations."));Z.addEventListener("abort",F,{once:!0}),J.setEncoding("utf8"),G=setTimeout(()=>W(new M("hands_job_result_unknown","Job control timed out; inspect before retrying mutations.")),Math.min(1e4,Math.max(1,$.expiresAtMs-Date.now()))),J.on("error",()=>W(new M("hands_job_result_unknown","Hands job control connection failed."))),J.once("connect",()=>J.write(JSON.stringify({version:1,scopeId:$.scopeId,fenceId:$.fenceId,executorLaunchId:$.executorLaunchId,request:Q})+`
|
|
3
|
-
`)),J.on("data",(B)=>{if(z+=B,Buffer.byteLength(z)>r$)W(new M("hands_job_result_unknown","Hands job result exceeded its bound."))}),J.once("end",()=>{if(Date.now()>=$.expiresAtMs){W(new M("hands_job_result_unknown","Hands authority expired before the result was acknowledged."));return}try{let B=t$(z.trim());if(B.id!==Q.id||B.generation!==$.generation||B.ok&&B.job.jobId!==Q.jobId)throw Error("identity");W(void 0,B)}catch{W(new M("hands_job_result_unknown","Hands job response identity or shape was invalid."))}}),J.once("close",()=>{if(!K)W(new M("hands_job_result_unknown","Hands job control closed before an acknowledged result."))})})}function p$($){let Q=M9($.root),Z=$.authority,X=Date.parse($.leaseUntil),Y=()=>{if($.signal.throwIfAborted(),!Number.isFinite(X)||X<=Date.now())throw Error("local_device_gh_lease_expired")};if(Y(),Z.readOnly&&Z.generation===null)return{root:Q,readOnly:!0,signal:$.signal,deadlineMs:X,assertCurrent:Y};let J=M0(Q,$.runId),z=e.get(J),K=z?.binding;if(!K?.environment||!K.workspace||K.localGithubConfinement!==!0)throw Error("local_device_gh_confinement_unavailable");let G=K.environment.current(),W=()=>{Y();let B=K.environment.current(),V=o0(K);if(e.get(J)!==z||B.github_auth!=="local_gh"||B.run_id!==K.runId||Z.runId!==$.runId||B.device_id!==Z.deviceId||B.root_id!==Z.rootId||String(B.binding.root_grant_revision)!==Z.rootRevision||B.binding.target_generation!==Z.generation||B.binding.target_fence_id!==Z.fenceId||V.generation!==Z.generation||V.fenceId!==Z.fenceId||B.snapshot_id!==G.snapshot_id||B.revision!==G.revision)throw Error("local_device_gh_authority_changed")};W();let F=m9(Q,K.workspace);return{root:F.boundary,signal:$.signal,deadlineMs:X,privateDirectory:O4(K.environment.path),repoPath:F.path,readOnly:Z.readOnly,forbiddenSecretValues:Object.values(G.variables),secretNames:(B)=>Object.entries(G.variables).filter(([,V])=>V.trim()===B.trim()).map(([V])=>`variable ${V}`),assertCurrent:W}}async function Y2($,Q){let Z=l$.parse($.request),X=u$.parse($.authority);if(X.contributorRefresh&&Z.kind==="read"&&X.readOnly)return Q(p$($));let Y=Boolean(X.contributorRefresh);if(Y&&(X.merge||Z.kind!=="pr_mutation"||Z.mutation.action!=="edit"||typeof Z.mutation.body!=="string"||Z.mutation.title!==void 0||Z.mutation.base!==void 0||X.readOnly||X.runId!==$.runId||X.repoFullName!==Z.repoFullName))throw Error("local_device_gh_contributor_refresh_authority_invalid");if(Z.kind!=="pr_merge"&&!Y){if(X.merge)throw Error("local_device_gh_merge_authority_invalid");return Q(p$($))}if(!Y&&(!X.merge||X.readOnly||X.runId!==$.runId||X.repoFullName!==Z.repoFullName||X.merge.source==="agent"&&(X.generation===null||X.fenceId===null)))throw Error("local_device_gh_merge_authority_invalid");let J=M9($.root),z=j9(J),K=Date.parse($.leaseUntil);if(!Number.isFinite(K)||K<=Date.now())throw Error("local_device_gh_lease_expired");let G=M9(D4());if(G===J||G.startsWith(J+_4))throw Error("local_device_gh_private_scope_unavailable");let W=$Q(b0(G,"reason-gh-merge-"));try{a0(W);let F=()=>{if($.signal.throwIfAborted(),Date.now()>=K)throw Error("local_device_gh_lease_expired");let B=j9($.root);if(B.isSymbolicLink()||B.dev!==z.dev||B.ino!==z.ino||M9($.root)!==J)throw Error("local_device_gh_authority_changed");a0(W)};return F(),await Q({root:J,readOnly:!1,privateDirectory:W,forbiddenSecretValues:[],signal:$.signal,deadlineMs:K,assertCurrent:F})}finally{D8(W,{recursive:!0,force:!0})}}var KQ=43200000;function t0($){return Number.isSafeInteger($)&&Math.abs($)<=8640000000000000?$:null}function zQ($){return $!==null&&typeof $==="object"&&!Array.isArray($)}function VQ($,Q){return Object.keys($).length===Q.length&&Q.every((Z)=>Object.hasOwn($,Z))}function G2($){if(!zQ($)||!VQ($,["version","outcome","clock_source","validation_now_ms","expiry_ms","remaining_ms","maximum_lifetime_ms","cli_artifact"])||$.version!==1||$.maximum_lifetime_ms!==43200000||typeof $.outcome!=="string"||!["accepted","parse","noncanonical","expired","over_cap"].includes($.outcome)||typeof $.clock_source!=="string"||!["date_now","injected"].includes($.clock_source))return null;for(let X of["validation_now_ms","expiry_ms"]){let Y=$[X];if(Y!==null&&(typeof Y!=="number"||t0(Y)===null))return null}if($.remaining_ms!==null&&(typeof $.remaining_ms!=="number"||!Number.isSafeInteger($.remaining_ms)))return null;let Q=typeof $.expiry_ms==="number"&&typeof $.validation_now_ms==="number"?$.expiry_ms-$.validation_now_ms:null;if($.remaining_ms!==(Q!==null&&Number.isSafeInteger(Q)?Q:null))return null;if($.outcome==="parse"&&$.expiry_ms!==null)return null;if($.outcome!=="parse"&&$.expiry_ms===null)return null;if($.outcome==="expired"&&!(typeof Q==="number"&&Q<=0))return null;if($.outcome==="over_cap"&&!(typeof Q==="number"&&Q>43200000))return null;if($.outcome==="accepted"&&!(typeof Q==="number"&&Q>0&&Q<=43200000))return null;let Z=$.cli_artifact;if(!zQ(Z)||!VQ(Z,["kind","status","sha256","observed_at_ms"])||Z.observed_at_ms!==null&&(typeof Z.observed_at_ms!=="number"||t0(Z.observed_at_ms)===null))return null;if(Z.kind==="entrypoint_file"){if(Z.status!=="observed"||typeof Z.sha256!=="string"||!/^[a-f0-9]{64}$/.test(Z.sha256)||Z.observed_at_ms===null)return null}else if(Z.kind!=="unavailable"||Z.sha256!==null||typeof Z.status!=="string"||!["unsupported_entrypoint","read_failed","file_changed","size_limit","time_limit"].includes(Z.status))return null;return $}var P8=I.strictObject({kind:I.enum(["workspace_source","mcp_control"]),target_revision:I.number().int().nonnegative(),root_grant_revision:I.number().int().positive()}),BQ=new RegExp(g9.tokenPattern),g4=I.strictObject({token_url:I.url().max(2048),request_token:I.string().min(1).max(8192).regex(BQ),aws_credentials_url:I.url().max(2048).nullable()});function LQ($,Q){let Z=(X,Y)=>{try{let J=new URL(X);return J.origin===new URL(Q).origin&&J.pathname===Y&&!J.username&&!J.password&&!J.search&&!J.hash}catch{return!1}};if(!BQ.test($.request_token)||!Z($.token_url,g9.tokenPath)||$.aws_credentials_url!==null&&!Z($.aws_credentials_url,g9.awsPath))return null;return{REASON_OIDC_TOKEN_URL:$.token_url,REASON_OIDC_REQUEST_TOKEN:$.request_token,...$.aws_credentials_url!==null?{AWS_CONTAINER_CREDENTIALS_FULL_URI:$.aws_credentials_url,AWS_CONTAINER_AUTHORIZATION_TOKEN:$.request_token}:{}}}function FQ($){return new TextEncoder().encode($).byteLength}function y4($){return FQ(JSON.stringify($)+`
|
|
4
|
-
`)}var HQ=I.strictObject({version:I.literal(1),snapshot_id:I.uuid(),revision:I.number().int().positive(),run_id:I.string().min(1).max(160),device_id:I.uuid(),root_id:I.uuid(),binding:P8.extend({target_generation:I.number().int().positive(),target_fence_id:I.uuid()}),expires_at:I.iso.datetime({offset:!0}),variables:I.record(I.string().max(128).regex(WQ),I.string().refine(($)=>!$.includes("\x00")&&FQ($)<=j0.valueBytes)).refine(($)=>Object.keys($).length<=j0.variables),github_auth:I.literal("local_gh").optional(),git:I.strictObject({base_url:I.url().max(2048),token:I.string().min(1).max(4096).regex(/^[A-Za-z0-9._~-]+$/),expires_at:I.iso.datetime({offset:!0})}).nullable(),cloud_access:g4.optional()}).refine(($)=>$.github_auth!=="local_gh"||$.git===null,"conflicting git authority").refine(($)=>y4($)<=j0.snapshotBytes,"snapshot too large");import{spawn as h4}from"child_process";import{basename as v4,isAbsolute as H2}from"path";var c4=0,UQ=120000,NQ=15000,d4=65536;function x8($=process.execPath,Q=process.argv[1]){let Z=v4($),X=(Z.startsWith("bun")||Z.startsWith("node"))&&typeof Q==="string"&&Q.length>0;return{command:$,prefix:X?[Q]:[]}}function U2($={}){let{command:Q,prefix:Z}=x8($.executablePath,$.sourceEntrypoint),X=$.spawnProcess??h4,Y=$.now??Date.now,J=null,z=0,K=!1,G=(F)=>{try{F.kill("SIGKILL")}catch{}},W=()=>{if(K)return;if(J&&Y()-z<UQ-NQ)return;if(J){let B=J;J=null,G(B)}let F;try{F=X(Q,[...Z,"__device","__hands-worker","--handoff-fd",String(c4)],{cwd:"/",env:{PATH:process.env.PATH??"/usr/local/bin:/usr/bin:/bin"},shell:!1,stdio:["pipe","ignore","pipe"]})}catch{return}J=F,z=Y(),F.on("error",()=>{if(J===F)J=null}),F.once("exit",(B,V)=>{if(J!==F)return;J=null,$.log?.("hands.worker_prespawn_exited",{exit_code:B,exit_signal:V})}),$.log?.("hands.worker_prespawned",{pid:F.pid??null})};return{arm:W,take(F){let B=J;if(!B||K)return null;let V=F.args.at(-1),U=F.options.env,H=F.options.cwd,L=[...Z,"__device","__hands-worker","--config"];if(F.command!==Q||F.args.length!==L.length+1||L.some((D,b)=>F.args[b]!==D)||typeof V!=="string"||!U||typeof H!=="string"||F.options.shell||JSON.stringify(F.options.stdio)!==JSON.stringify(["ignore","ignore","pipe"]))return null;J=null;let j=B.stdin,O={configPath:V,cwd:H,env:Object.fromEntries(Object.entries(U).filter((D)=>typeof D[1]==="string"))},T=JSON.stringify(O);if(B.exitCode!==null||B.signalCode!==null||!j||j.destroyed||Y()-z>=UQ-NQ||Buffer.byteLength(T,"utf8")>d4)return G(B),null;return j.on("error",()=>{return}),j.end(T),B.once("exit",()=>{W()}),$.log?.("hands.worker_prespawn_taken",{pid:B.pid??null}),B},adopt(F){F.once("exit",()=>{W()})},close(){if(K=!0,J)G(J);J=null}}}import{accessSync as i4,constants as a4,statSync as o4}from"fs";import{homedir as r4,tmpdir as t4,userInfo as e4}from"os";import{delimiter as $3,win32 as Q3}from"path";var p4=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 l4=["BUN_CONFIG_","BUN_INSPECT","DYLD_","NODE_DEBUG"],u4=new Set(["BUN_INSTALL"]);var s4=/^--(?:max-old-space-size|max-semi-space-size|stack-size)=\d{1,9}$/;function n4($){return($??"").split(/\s+/).filter(Boolean).every((Q)=>s4.test(Q.replaceAll("_","-")))}function MQ($){return Object.keys($).filter((Q)=>p4.has(Q)&&!(Q==="NODE_OPTIONS"&&n4($[Q]))||l4.some((Z)=>Q.startsWith(Z))||Q.startsWith("BUN_")&&!u4.has(Q)).sort()}var Z3=new Set(["HOME","PATH","PWD","OLDPWD","SHLVL","_","TMPDIR","TMP","TEMP","SHELL","BASH_ENV","ENV","ZDOTDIR","PROMPT_COMMAND","IFS","CDPATH","GLOBIGNORE","SHELLOPTS","BASHOPTS","NODE_PATH"]),X3=/^(?:ARA_|REASON_|PI_|GIT_|GH_|GITHUB_|LD_|DYLD_|BUN_|BASH_FUNC_|SSH_)/,Y3=/TOKEN|SECRET|PASSW|PASSPHRASE|CREDENTIAL|API_?KEY|ACCESS_?KEY|PRIVATE_?KEY|AUTH/i,J3=/^[A-Za-z_][A-Za-z0-9_]*$/;function qQ($=process.env){let Q=(Y)=>{if(!(process.platform==="win32"?Q3.isAbsolute(Y):Y.startsWith("/"))||/[\0\r\n]/.test(Y)||Y.length>32768)throw Error("invalid_host_execution_environment");return Y};if($.PATH!==void 0&&(/[\0\r\n]/.test($.PATH)||$.PATH.length>32768))throw Error("invalid_host_execution_environment");let Z=new Set(MQ($)),X=Object.fromEntries(Object.entries($).filter((Y)=>{let[J,z]=Y;return typeof z==="string"&&z.length<=32768&&!z.includes("\x00")&&J.length<=128&&J3.test(J)&&!Z.has(J)&&!Z3.has(J)&&!X3.test(J)&&!Y3.test(J)}).sort(([Y],[J])=>Y.localeCompare(J)).slice(0,512));return{home:Q($.HOME||(process.platform==="win32"?$.USERPROFILE:void 0)||r4()),path:((Y)=>process.platform==="win32"?TQ(Y):Y)(CQ($.PATH??"").join($3)||jQ),temporaryDirectory:Q($.TMPDIR||$.TMP||$.TEMP||t4()),variables:X}}function OQ($=process.env,Q=()=>e4().shell){if(process.platform==="win32")return y9();let Z=(Y)=>{if(!Y||!/^\/[A-Za-z0-9._/-]*\/(?:bash|zsh)$/.test(Y))return!1;try{return i4(Y,a4.X_OK),o4(Y).isFile()}catch{return!1}};if(Z($.SHELL))return $.SHELL;let X;try{X=Q()}catch{X=void 0}return Z(X)?X:"/bin/zsh"}import{readdir as G3}from"fs/promises";var z3=15000;function V3($){let Q=$ instanceof Error&&"code"in $?$.code:null;return Q==="EPERM"||Q==="EACCES"}function K3($){return new M("folder_access_denied",`macOS blocked Reason from opening ${$}. Allow Reason in System Settings \u203A Privacy & Security \u203A Files and Folders `+"(or Full Disk Access), then try again.")}async function _Q($,{timeoutMs:Q=z3,open:Z=(X)=>G3(X)}={}){let X,Y=new Promise((J)=>{X=setTimeout(()=>J("pending"),Q)});try{if(await Promise.race([Z($).then(()=>"open"),Y])==="pending")throw new M("folder_access_pending",`macOS is asking whether Reason may open ${$}. Answer the prompt on this Mac, then try again.`)}catch(J){if(V3(J))throw K3($);if(J instanceof M)throw J}finally{clearTimeout(X)}}import{chmodSync as d3,closeSync as p3,constants as y8,fstatSync as l3,lstatSync as nQ,openSync as u3,readSync as s3,realpathSync as h8,unlinkSync as n3}from"fs";import{lookup as i3}from"dns/promises";import{createRequire as a3}from"module";import{request as o3}from"http";import{request as r3}from"https";import y0 from"net";import{platform as eQ}from"os";import{basename as t3,extname as e3,isAbsolute as iQ,relative as v8,resolve as Z9,sep as c8}from"path";var DQ=String.raw`
|
|
5
|
-
async (roots) => {
|
|
6
|
-
"use strict";
|
|
7
|
-
const version = 2;
|
|
8
|
-
if (globalThis.__araHandsRepl && globalThis.__araHandsRepl.version === version) return;
|
|
9
|
-
const hostCall = globalThis.__araHandsRpc;
|
|
10
|
-
if (typeof hostCall !== "function") throw new Error("Reason Hands browser bridge is not installed");
|
|
11
|
-
try { delete globalThis.__araHandsRpc; } catch (error) {
|
|
12
|
-
if (!(error instanceof TypeError)) throw error;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const handles = new WeakMap();
|
|
16
|
-
const bytes = new WeakMap();
|
|
17
|
-
const routes = new WeakMap();
|
|
18
|
-
const derived = new Set([
|
|
19
|
-
"browser", "context", "frame", "frameLocator", "getByAltText", "getByLabel",
|
|
20
|
-
"getByPlaceholder", "getByRole", "getByTestId", "getByText", "getByTitle",
|
|
21
|
-
"contentFrame", "locator", "nth", "mainFrame", "newContext", "newPage", "opener", "owner", "page", "parentFrame",
|
|
22
|
-
]);
|
|
23
|
-
const locatorMethods = new Set([
|
|
24
|
-
"all", "allInnerTexts", "allTextContents", "and", "ariaSnapshot", "blur",
|
|
25
|
-
"boundingBox", "check", "clear", "click", "contentFrame", "count", "dblclick",
|
|
26
|
-
"dragTo", "evaluate", "evaluateAll", "fill", "filter", "focus", "getAttribute",
|
|
27
|
-
"hover", "innerHTML", "innerText", "inputValue", "isChecked", "isEditable",
|
|
28
|
-
"isEnabled", "isHidden", "isVisible", "or", "page", "press", "pressSequentially",
|
|
29
|
-
"screenshot", "scrollIntoViewIfNeeded", "selectOption", "setInputFiles", "tap",
|
|
30
|
-
"textContent", "type", "uncheck", "waitFor",
|
|
31
|
-
]);
|
|
32
|
-
const pageMethods = new Set([
|
|
33
|
-
"addInitScript", "addScriptTag", "addStyleTag", "bringToFront", "close", "content",
|
|
34
|
-
"emulateMedia", "evaluate", "frameLocator", "frames", "goBack", "goForward", "goto",
|
|
35
|
-
"isClosed", "pdf", "reload", "route", "screenshot", "captureScreenshot", "selectOption", "setContent",
|
|
36
|
-
"setDefaultNavigationTimeout", "setDefaultTimeout", "setExtraHTTPHeaders", "setInputFiles",
|
|
37
|
-
"setViewportSize", "title", "unroute", "url", "viewportSize", "waitForFunction",
|
|
38
|
-
"waitForLoadState", "waitForNavigation", "waitForTimeout", "waitForURL",
|
|
39
|
-
]);
|
|
40
|
-
const contextMethods = new Set([
|
|
41
|
-
"startRecording", "stopRecording",
|
|
42
|
-
"addCookies", "addInitScript", "clearCookies", "clearPermissions", "close", "cookies",
|
|
43
|
-
"grantPermissions", "pages", "route", "setDefaultNavigationTimeout", "setDefaultTimeout",
|
|
44
|
-
"setExtraHTTPHeaders", "setGeolocation", "setHTTPCredentials", "setOffline",
|
|
45
|
-
"setViewportSize", "storageState", "unroute", "viewportSize",
|
|
46
|
-
]);
|
|
47
|
-
const browserMethods = new Set(["close", "contexts", "isConnected", "version"]);
|
|
48
|
-
const frameMethods = new Set([
|
|
49
|
-
"addScriptTag", "addStyleTag", "childFrames", "content", "evaluate", "frameLocator",
|
|
50
|
-
"goto", "isDetached", "name", "parentFrame", "setContent", "title", "url",
|
|
51
|
-
"waitForFunction", "waitForLoadState", "waitForNavigation", "waitForTimeout", "waitForURL",
|
|
52
|
-
]);
|
|
53
|
-
|
|
54
|
-
function record(value) {
|
|
55
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
56
|
-
const proto = Object.getPrototypeOf(value);
|
|
57
|
-
return proto === Object.prototype || proto === null;
|
|
58
|
-
}
|
|
59
|
-
function handle(value) {
|
|
60
|
-
return record(value) && value.$handsRepl === "handle"
|
|
61
|
-
&& typeof value.id === "string" && typeof value.kind === "string";
|
|
62
|
-
}
|
|
63
|
-
function clone(value, stack) {
|
|
64
|
-
if (value === null || typeof value === "boolean" || typeof value === "string") return value;
|
|
65
|
-
if (typeof value === "number") {
|
|
66
|
-
if (!Number.isFinite(value)) throw new TypeError("Reason Hands bridge accepts only finite numbers");
|
|
67
|
-
return value;
|
|
68
|
-
}
|
|
69
|
-
if (!value || typeof value !== "object") throw new TypeError("Reason Hands bridge accepts only JSON data");
|
|
70
|
-
if (stack.has(value)) throw new TypeError("Reason Hands bridge does not accept cyclic data");
|
|
71
|
-
stack.add(value);
|
|
72
|
-
try {
|
|
73
|
-
if (Array.isArray(value)) return value.map((item) => clone(item, stack));
|
|
74
|
-
if (!record(value)) throw new TypeError("Reason Hands bridge accepts only plain objects");
|
|
75
|
-
const output = Object.create(null);
|
|
76
|
-
for (const key of Object.keys(value)) {
|
|
77
|
-
if (key === "__proto__" || key === "constructor" || key === "prototype") {
|
|
78
|
-
throw new TypeError("Reason Hands bridge rejects unsafe object keys");
|
|
79
|
-
}
|
|
80
|
-
output[key] = clone(value[key], stack);
|
|
81
|
-
}
|
|
82
|
-
return output;
|
|
83
|
-
} finally { stack.delete(value); }
|
|
84
|
-
}
|
|
85
|
-
function data(value) { return clone(value, new WeakSet()); }
|
|
86
|
-
function refOf(value) {
|
|
87
|
-
const ref = value && typeof value === "object" ? handles.get(value) : undefined;
|
|
88
|
-
if (!ref) throw new TypeError("Reason Hands operation needs a browser target");
|
|
89
|
-
return ref;
|
|
90
|
-
}
|
|
91
|
-
async function wire(value) {
|
|
92
|
-
const target = value && typeof value === "object" ? handles.get(value) : undefined;
|
|
93
|
-
if (target) return (await target).handle;
|
|
94
|
-
const binary = value && typeof value === "object" ? bytes.get(value) : undefined;
|
|
95
|
-
if (binary) return binary;
|
|
96
|
-
const route = value && typeof value === "object" ? routes.get(value) : undefined;
|
|
97
|
-
if (route) return route;
|
|
98
|
-
if (value === null || typeof value === "boolean" || typeof value === "string") return value;
|
|
99
|
-
if (typeof value === "number") {
|
|
100
|
-
if (!Number.isFinite(value)) throw new TypeError("Reason Hands bridge accepts only finite numbers");
|
|
101
|
-
return value;
|
|
102
|
-
}
|
|
103
|
-
if (Array.isArray(value)) return await Promise.all(value.map(wire));
|
|
104
|
-
if (!record(value)) throw new TypeError("Reason Hands bridge accepts only JSON data");
|
|
105
|
-
const output = Object.create(null);
|
|
106
|
-
for (const key of Object.keys(value)) output[key] = await wire(value[key]);
|
|
107
|
-
return output;
|
|
108
|
-
}
|
|
109
|
-
function decode(value) {
|
|
110
|
-
if (handle(value)) return makeTarget(value);
|
|
111
|
-
if (record(value) && value.$handsRepl === "bytes" && typeof value.base64 === "string") {
|
|
112
|
-
const output = Object.freeze({ $handsRepl: "bytes", base64: value.base64 });
|
|
113
|
-
bytes.set(output, output);
|
|
114
|
-
return output;
|
|
115
|
-
}
|
|
116
|
-
if (record(value) && value.$handsRepl === "undefined") return undefined;
|
|
117
|
-
if (Array.isArray(value)) return value.map(decode);
|
|
118
|
-
if (!record(value)) return value;
|
|
119
|
-
const output = Object.create(null);
|
|
120
|
-
for (const key of Object.keys(value)) output[key] = decode(value[key]);
|
|
121
|
-
return output;
|
|
122
|
-
}
|
|
123
|
-
async function rpc(request) { return decode(await hostCall(request)); }
|
|
124
|
-
async function invoke(ref, method, args) {
|
|
125
|
-
return await rpc({ type: "call", target: ref.handle, method, args: await Promise.all(args.map(wire)) });
|
|
126
|
-
}
|
|
127
|
-
function targetFrom(value) {
|
|
128
|
-
const ref = value && typeof value === "object" ? handles.get(value) : undefined;
|
|
129
|
-
if (!ref) throw new Error("Reason Hands bridge received an invalid target");
|
|
130
|
-
return ref;
|
|
131
|
-
}
|
|
132
|
-
function lazy(refPromise) {
|
|
133
|
-
const object = Object.create(null);
|
|
134
|
-
const ready = Promise.resolve(refPromise);
|
|
135
|
-
const proxy = new Proxy(object, {
|
|
136
|
-
get(_object, key) {
|
|
137
|
-
if (key === "then") return (resolve, reject) => {
|
|
138
|
-
// Derived targets carry the bridge's internal { handle, kind } ref,
|
|
139
|
-
// not the wire handle accepted by makeTarget. Passing the wrapper
|
|
140
|
-
// used to throw inside this detached fulfillment callback; because
|
|
141
|
-
// that rejection was not forwarded to the thenable consumer, every
|
|
142
|
-
// await context.newPage() / await page.context() hung until an
|
|
143
|
-
// outer tool deadline destroyed the evaluator execution context.
|
|
144
|
-
ready.then((ref) => {
|
|
145
|
-
try { resolve(makeTarget(ref.handle)); } catch (error) { reject(error); }
|
|
146
|
-
}, reject);
|
|
147
|
-
};
|
|
148
|
-
if (typeof key !== "string") return undefined;
|
|
149
|
-
if (key === "first" || key === "last") return lazy(ready.then(async (ref) => targetFrom(await invoke(ref, key, []))));
|
|
150
|
-
if (derived.has(key)) return (...args) => lazy(ready.then(async (ref) => targetFrom(await invoke(ref, key, args))));
|
|
151
|
-
if (key === "evaluate" || key === "evaluateAll") return (source, argument) => ready.then((ref) => evaluateInTarget(ref, source, argument));
|
|
152
|
-
return (...args) => ready.then((ref) => invoke(ref, key, args));
|
|
153
|
-
},
|
|
154
|
-
});
|
|
155
|
-
handles.set(proxy, ready);
|
|
156
|
-
return proxy;
|
|
157
|
-
}
|
|
158
|
-
function makeTarget(handleValue) {
|
|
159
|
-
if (!handle(handleValue)) throw new Error("Reason Hands bridge received an invalid handle");
|
|
160
|
-
const ref = { handle: Object.freeze({ $handsRepl: "handle", id: handleValue.id, kind: handleValue.kind }), kind: handleValue.kind };
|
|
161
|
-
const object = Object.create(null);
|
|
162
|
-
// Preserve the existing synchronous viewport facade. URL reads use the
|
|
163
|
-
// dispatcher: a human can navigate the real page without an agent goto,
|
|
164
|
-
// and a new evaluator must not invent about:blank for that live page.
|
|
165
|
-
const meta = {
|
|
166
|
-
viewport: ref.kind === "page" && ref.handle.id === roots.page.id
|
|
167
|
-
? { width: 1440, height: 900 }
|
|
168
|
-
: undefined,
|
|
169
|
-
};
|
|
170
|
-
const invokeDerived = (method, args) => lazy(Promise.resolve(invoke(ref, method, args)).then(targetFrom));
|
|
171
|
-
const get = (_object, key) => {
|
|
172
|
-
if (key === "first" || key === "last") return invokeDerived(key, []);
|
|
173
|
-
if (typeof key !== "string") return undefined;
|
|
174
|
-
if (key === "evaluate" || key === "evaluateAll") return (source, argument) => evaluateInTarget(ref, source, argument);
|
|
175
|
-
if (ref.kind === "page" && key === "viewportSize" && meta.viewport) {
|
|
176
|
-
return () => ({ ...meta.viewport });
|
|
177
|
-
}
|
|
178
|
-
if (ref.kind === "page" && key === "setViewportSize") {
|
|
179
|
-
return (next) => invoke(ref, key, [next]).then((value) => {
|
|
180
|
-
if (record(next) && typeof next.width === "number" && typeof next.height === "number") {
|
|
181
|
-
meta.viewport = { width: next.width, height: next.height };
|
|
182
|
-
}
|
|
183
|
-
return value;
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
if ((ref.kind === "page" || ref.kind === "context") && key === "route") {
|
|
187
|
-
return async (url, handler) => {
|
|
188
|
-
if (typeof handler !== "function") return await invoke(ref, key, [url, handler]);
|
|
189
|
-
let fulfillment;
|
|
190
|
-
const route = Object.freeze({
|
|
191
|
-
fulfill: async (options) => {
|
|
192
|
-
if (fulfillment) throw new TypeError("route() can register one fulfillment action");
|
|
193
|
-
fulfillment = routeFulfill(options);
|
|
194
|
-
},
|
|
195
|
-
});
|
|
196
|
-
await handler(route);
|
|
197
|
-
if (!fulfillment) {
|
|
198
|
-
throw new TypeError("route() supports a data-only route.fulfill({ ... }) callback");
|
|
199
|
-
}
|
|
200
|
-
return await invoke(ref, key, [url, fulfillment]);
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
if (derived.has(key)) return (...args) => invokeDerived(key, args);
|
|
204
|
-
const methods = ref.kind === "browser" ? browserMethods
|
|
205
|
-
: ref.kind === "context" ? contextMethods
|
|
206
|
-
: ref.kind === "page" ? pageMethods
|
|
207
|
-
: ref.kind === "frame" ? frameMethods
|
|
208
|
-
: locatorMethods;
|
|
209
|
-
if (!methods.has(key)) return undefined;
|
|
210
|
-
return (...args) => invoke(ref, key, args);
|
|
211
|
-
};
|
|
212
|
-
const proxy = new Proxy(object, { get });
|
|
213
|
-
handles.set(proxy, Promise.resolve(ref));
|
|
214
|
-
return proxy;
|
|
215
|
-
}
|
|
216
|
-
async function evaluateInTarget(ref, source, argument) {
|
|
217
|
-
const text = typeof source === "function" ? Function.prototype.toString.call(source) : source;
|
|
218
|
-
if (typeof text !== "string" || !text.trim()) throw new TypeError("evaluate() needs a function or expression string");
|
|
219
|
-
const value = argument === undefined ? undefined : JSON.stringify(await wire(argument));
|
|
220
|
-
let renderer;
|
|
221
|
-
if (ref.kind === "locator") {
|
|
222
|
-
renderer = typeof source === "function"
|
|
223
|
-
? "(element) => (" + text + ")(element" + (value === undefined ? "" : ", " + value) + ")"
|
|
224
|
-
: text;
|
|
225
|
-
} else {
|
|
226
|
-
renderer = typeof source === "function"
|
|
227
|
-
? "(" + text + ")(" + (value === undefined ? "" : value) + ")"
|
|
228
|
-
: value === undefined ? text : "(" + text + ")(" + value + ")";
|
|
229
|
-
}
|
|
230
|
-
return await invoke(ref, "evaluate", [renderer]);
|
|
231
|
-
}
|
|
232
|
-
function routeFulfill(options) {
|
|
233
|
-
const token = Object.freeze(Object.create(null));
|
|
234
|
-
routes.set(token, { $handsRepl: "routeFulfill", options: data(options) });
|
|
235
|
-
return token;
|
|
236
|
-
}
|
|
237
|
-
const replConsole = Object.freeze({
|
|
238
|
-
log: (...values) => { logs.push(values.map(render).join(" ")); },
|
|
239
|
-
info: (...values) => { logs.push(values.map(render).join(" ")); },
|
|
240
|
-
warn: (...values) => { logs.push("[warn] " + values.map(render).join(" ")); },
|
|
241
|
-
error: (...values) => { logs.push("[error] " + values.map(render).join(" ")); },
|
|
242
|
-
});
|
|
243
|
-
function render(value) {
|
|
244
|
-
if (value === undefined) return "undefined";
|
|
245
|
-
if (typeof value === "string") return value;
|
|
246
|
-
try { const text = JSON.stringify(value); return text === undefined ? String(value) : text; } catch { return "[unrenderable]"; }
|
|
247
|
-
}
|
|
248
|
-
const logs = [];
|
|
249
|
-
const browser = makeTarget(roots && roots.browser);
|
|
250
|
-
const context = makeTarget(roots && roots.context);
|
|
251
|
-
const page = makeTarget(roots && roots.page);
|
|
252
|
-
const state = Object.create(null);
|
|
253
|
-
async function a11y(target) {
|
|
254
|
-
const ref = target === undefined ? await refOf(page) : await refOf(target);
|
|
255
|
-
return await rpc({ type: "a11y", target: ref.handle });
|
|
256
|
-
}
|
|
257
|
-
async function view(source, options) {
|
|
258
|
-
return await rpc({ type: "view", source: await wire(source), options: options === undefined ? Object.create(null) : await wire(options) });
|
|
259
|
-
}
|
|
260
|
-
async function evaluate(code) {
|
|
261
|
-
if (typeof code !== "string") throw new TypeError("Reason Hands REPL code must be a string");
|
|
262
|
-
logs.length = 0;
|
|
263
|
-
let program;
|
|
264
|
-
let statementList = false;
|
|
265
|
-
try { program = new Function('"use strict"; return (async () => await (' + code + "\n))();"); }
|
|
266
|
-
catch {
|
|
267
|
-
statementList = true;
|
|
268
|
-
const strictCode = '"use strict";\n' + code;
|
|
269
|
-
program = new Function(
|
|
270
|
-
'"use strict"; return (async () => (0, eval)(' + JSON.stringify(strictCode) + '))();',
|
|
271
|
-
);
|
|
272
|
-
}
|
|
273
|
-
let value;
|
|
274
|
-
try {
|
|
275
|
-
value = await program();
|
|
276
|
-
} catch (error) {
|
|
277
|
-
// Indirect eval preserves a statement-list completion value but cannot
|
|
278
|
-
// parse top-level await or return. Those programs retain the prior async
|
|
279
|
-
// block behavior; a syntax failure occurs before any user code executes.
|
|
280
|
-
if (!statementList || !(error instanceof SyntaxError)) throw error;
|
|
281
|
-
program = new Function('"use strict"; return (async () => {' + code + "\n})();");
|
|
282
|
-
value = await program();
|
|
283
|
-
}
|
|
284
|
-
const output = render(value);
|
|
285
|
-
return logs.length === 0 ? output : value === undefined ? logs.join("\n") : logs.join("\n") + "\n" + output;
|
|
286
|
-
}
|
|
287
|
-
function install(name, value) { Object.defineProperty(globalThis, name, { value, configurable: false, enumerable: false, writable: false }); }
|
|
288
|
-
install("browser", browser); install("context", context); install("page", page);
|
|
289
|
-
install("state", state); install("browserState", state);
|
|
290
|
-
install("a11y", a11y); install("view", view); install("routeFulfill", routeFulfill); install("console", replConsole);
|
|
291
|
-
install("__araHandsRepl", Object.freeze({ version, evaluate }));
|
|
292
|
-
}
|
|
293
|
-
`.trim(),IQ=String.raw`
|
|
294
|
-
async (input) => {
|
|
295
|
-
const bridge = globalThis.__araHandsRepl;
|
|
296
|
-
if (!bridge || typeof bridge.evaluate !== "function") throw new Error("Reason Hands browser bridge is not installed");
|
|
297
|
-
return await bridge.evaluate(typeof input === "string" ? input : input && input.code);
|
|
298
|
-
}
|
|
299
|
-
`.trim();import{Buffer as e0}from"buffer";import{randomUUID as W3}from"crypto";class EQ extends Error{code;constructor($){super($==="hands_repl_private_profile_attribute_denied"?"Private browser attribute read denied.":$);this.code=$;this.name="HandsReplBrowserDispatcherError"}}var SQ=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),AQ=/^hands_[A-Za-z0-9_-]{8,128}$/,B3=2048,RQ=32,wQ=1e4,L3=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function F3($){let Q=$.split("+"),Z=(Q.pop()??"").replace(/^Key/,"").toLowerCase();if(Z==="f12")return!0;if(Q.some((X)=>["Control","ControlOrMeta","Meta"].includes(X))&&["l","n","t","j","i","p","s","w","u","o","r","tab","pageup","pagedown"].includes(Z))return!0;if(Q.some((X)=>["Control","ControlOrMeta","Meta"].includes(X))&&Q.includes("Shift")&&Z==="c")return!0;return Q.includes("Alt")&&["d","arrowleft","arrowright","home"].includes(Z)}var H3=($)=>{let Q=$.closest("a[href],area[href]");return{password:$.tagName==="INPUT"&&$.type==="password",executableLink:Boolean(Q&&!/^(https?:|about:blank)/i.test(Q.href))}},kQ={browser:{close:{returns:"void"},contexts:{returns:"context[]"},isConnected:{returns:"json"},version:{returns:"json"}},context:{addCookies:{returns:"void"},addInitScript:{returns:"void"},browser:{returns:"browser"},clearCookies:{returns:"void"},clearPermissions:{returns:"void"},close:{returns:"void"},cookies:{returns:"json"},grantPermissions:{returns:"void"},newPage:{returns:"page"},pages:{returns:"page[]"},setDefaultNavigationTimeout:{returns:"void"},setDefaultTimeout:{returns:"void"},setExtraHTTPHeaders:{returns:"void"},setGeolocation:{returns:"void"},setHTTPCredentials:{returns:"void"},setOffline:{returns:"void"},setViewportSize:{returns:"void"},storageState:{returns:"json"},viewportSize:{returns:"json",special:"contextViewportSize"}},page:{addInitScript:{returns:"void"},addScriptTag:{returns:"void"},addStyleTag:{returns:"void"},bringToFront:{returns:"void"},close:{returns:"void"},content:{returns:"json"},context:{returns:"context"},emulateMedia:{returns:"void"},evaluate:{returns:"json",requiresStringSource:!0},frame:{returns:"frame"},frameLocator:{returns:"frameLocator"},frames:{returns:"frame[]"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},goBack:{returns:"void"},goForward:{returns:"void"},goto:{returns:"void"},isClosed:{returns:"json"},locator:{returns:"locator"},mainFrame:{returns:"frame"},opener:{returns:"page"},pdf:{returns:"bytes"},reload:{returns:"void"},screenshot:{returns:"bytes"},selectOption:{returns:"json"},setContent:{returns:"void"},setDefaultNavigationTimeout:{returns:"void"},setDefaultTimeout:{returns:"void"},setExtraHTTPHeaders:{returns:"void"},setInputFiles:{returns:"void"},setViewportSize:{returns:"void"},title:{returns:"json"},url:{returns:"json"},viewportSize:{returns:"json"},waitForFunction:{returns:"void",requiresStringSource:!0},waitForLoadState:{returns:"void"},waitForNavigation:{returns:"void"},waitForTimeout:{returns:"void"},waitForURL:{returns:"void"}},locator:{all:{returns:"locator[]"},allInnerTexts:{returns:"json"},allTextContents:{returns:"json"},and:{returns:"locator"},ariaSnapshot:{returns:"json"},blur:{returns:"void"},boundingBox:{returns:"json"},check:{returns:"void"},clear:{returns:"void"},click:{returns:"void"},contentFrame:{returns:"frameLocator"},count:{returns:"json"},dblclick:{returns:"void"},dragTo:{returns:"void"},evaluate:{returns:"json",requiresStringSource:!0},evaluateAll:{returns:"json",requiresStringSource:!0},fill:{returns:"void"},filter:{returns:"locator"},first:{returns:"locator",special:"property"},focus:{returns:"void"},getAttribute:{returns:"json"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},hover:{returns:"void"},innerHTML:{returns:"json"},innerText:{returns:"json"},inputValue:{returns:"json"},isChecked:{returns:"json"},isEditable:{returns:"json"},isEnabled:{returns:"json"},isHidden:{returns:"json"},isVisible:{returns:"json"},last:{returns:"locator",special:"property"},locator:{returns:"locator"},nth:{returns:"locator"},or:{returns:"locator"},page:{returns:"page"},press:{returns:"void"},pressSequentially:{returns:"void"},scrollIntoViewIfNeeded:{returns:"void"},screenshot:{returns:"bytes"},selectOption:{returns:"json"},setInputFiles:{returns:"void"},tap:{returns:"void"},textContent:{returns:"json"},type:{returns:"void"},uncheck:{returns:"void"},waitFor:{returns:"void"}},frame:{addScriptTag:{returns:"void"},addStyleTag:{returns:"void"},childFrames:{returns:"frame[]"},content:{returns:"json"},evaluate:{returns:"json",requiresStringSource:!0},frameLocator:{returns:"frameLocator"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},goto:{returns:"void"},isDetached:{returns:"json"},locator:{returns:"locator"},name:{returns:"json"},page:{returns:"page"},parentFrame:{returns:"frame"},setContent:{returns:"void"},title:{returns:"json"},url:{returns:"json"},waitForFunction:{returns:"void",requiresStringSource:!0},waitForLoadState:{returns:"void"},waitForNavigation:{returns:"void"},waitForTimeout:{returns:"void"},waitForURL:{returns:"void"}},frameLocator:{getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},locator:{returns:"locator"},owner:{returns:"locator"}}};function P($){throw new EQ($)}function J0($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Q=Object.getPrototypeOf($);return Q===Object.prototype||Q===null}function $9($,Q=0,Z={nodes:0}){if(Q>RQ||++Z.nodes>wQ)P("hands_repl_json_too_complex");if($===null||typeof $==="boolean"||typeof $==="string")return;if(typeof $==="number"){if(!Number.isFinite($))P("hands_repl_invalid_json");return}if(Array.isArray($)){for(let X of $)$9(X,Q+1,Z);return}if(!J0($))P("hands_repl_invalid_json");for(let[X,Y]of Object.entries($)){if(SQ.has(X))P("hands_repl_invalid_json");$9(Y,Q+1,Z)}}function E8($){return typeof $==="string"&&Object.hasOwn(kQ,$)}function U3($){if(!$.endsWith("[]"))return null;let Q=$.slice(0,-2);return E8(Q)?Q:null}function PQ($){return J0($)&&Object.keys($).length===2&&$.$handsRepl==="bytes"&&typeof $.base64==="string"}function N3($){return J0($)&&Object.keys($).length===1&&$.$handsRepl==="undefined"}function xQ($){return J0($)&&Object.keys($).length===2&&$.$handsRepl==="routeFulfill"&&"options"in $}function A0($){return!!$&&typeof $==="object"}function h9(){return Object.freeze({$handsRepl:"undefined"})}function M3($){if(!e0.isBuffer($)&&!($ instanceof Uint8Array))P("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:e0.from($).toString("base64")})}function bQ($){if(!A0($.browser)||!A0($.context)||!A0($.page))P("hands_repl_invalid_roots");if(typeof $.a11y!=="function"||typeof $.view!=="function")P("hands_repl_invalid_callbacks");let Q=$.maxHandles??B3;if(!Number.isInteger(Q)||Q<3||Q>1e5)P("hands_repl_invalid_handle_limit");let Z=new Map,X=new WeakMap,Y=$.createOpaqueId??W3,J=(V,U)=>{if(!A0(U))P("hands_repl_expected_target");let H=X.get(U)?.get(V);if(H)return H;if(Z.size>=Q)P("hands_repl_handle_limit");let L="";for(let T=0;T<16;T+=1){let D=`hands_${Y()}`;if(AQ.test(D)&&!Z.has(D)){L=D;break}}if(!L)P("hands_repl_invalid_opaque_id");let j=Object.freeze({$handsRepl:"handle",id:L,kind:V});Z.set(L,{kind:V,target:U});let O=X.get(U);if(!O)O=new Map,X.set(U,O);return O.set(V,j),j},z=Object.freeze({browser:J("browser",$.browser),context:J("context",$.context),page:J("page",$.page)}),K=(V)=>{if(!J0(V)||Object.keys(V).length!==3||V.$handsRepl!=="handle"||typeof V.id!=="string"||!AQ.test(V.id)||!E8(V.kind))P("hands_repl_invalid_handle");let U=Z.get(V.id);if(!U||U.kind!==V.kind)P("hands_repl_unknown_handle");return U},G=(V,U=0,H=new Set)=>{if(U>RQ)P("hands_repl_json_too_complex");if(V===void 0)return h9();if(V===null||typeof V==="boolean"||typeof V==="string")return V;if(typeof V==="number"){if(!Number.isFinite(V))P("hands_repl_non_json_result");return V}if(Array.isArray(V)){if(H.has(V))P("hands_repl_cyclic_result");H.add(V);try{return V.map((L)=>G(L,U+1,H))}finally{H.delete(V)}}if(!J0(V))P("hands_repl_non_json_result");if(H.has(V))P("hands_repl_cyclic_result");H.add(V);try{let L=Object.create(null);for(let j of Object.keys(V)){let O=Object.getOwnPropertyDescriptor(V,j);if(!O||!("value"in O))continue;L[j]=G(O.value,U+1,H)}return L}finally{H.delete(V)}},W=(V,U)=>{if(U==="void")return h9();if(U==="json")return G(V);if(U==="bytes")return M3(V);let H=U3(U);if(H){if(!Array.isArray(V))P("hands_repl_expected_target_list");if(H==="context"&&V.some((L)=>L!==$.context))P("hands_repl_foreign_context");return V.map((L)=>J(H,L))}if(V===null||V===void 0)return h9();if(!E8(U))P("hands_repl_invalid_return_kind");if(U==="context"&&V!==$.context)P("hands_repl_foreign_context");return J(U,V)},F=(V)=>{if(J0(V)&&V.$handsRepl==="handle")return K(V).target;if(PQ(V))return e0.from(V.base64,"base64");if(N3(V))return;if(xQ(V))P("hands_repl_route_fulfill_only");if(Array.isArray(V))return V.map(F);if(!J0(V))return V;let U=Object.create(null);for(let[H,L]of Object.entries(V))U[H]=F(L);return U};return Object.freeze({roots:z,dispatch:async(V)=>{if(!J0(V)||typeof V.type!=="string")P("hands_repl_invalid_request");if(V.type==="a11y"){let q=V.target===void 0?Z.get(z.page.id):K(V.target);if(!q||q.kind!=="page"&&q.kind!=="locator")P("hands_repl_invalid_a11y_target");return G(await $.a11y(q.target))}if(V.type==="view"){if($9(V.source),V.options!==void 0)$9(V.options);let q=PQ(V.source)?e0.from(V.source.base64,"base64"):V.source;if($.privateProfile&&!e0.isBuffer(q))P("hands_repl_profile_requires_image_bytes");return G(await $.view(q,V.options))}if(V.type!=="call")P("hands_repl_invalid_request");if(typeof V.method!=="string"||V.method.length===0||V.method.length>128)P("hands_repl_invalid_method");if(SQ.has(V.method))P("hands_repl_forbidden_method");let U=K(V.target),H=V.args??[];if(!Array.isArray(H))P("hands_repl_invalid_arguments");if($9(H),U.kind==="page"&&V.method==="captureScreenshot"){if(H.length!==0)P("hands_repl_invalid_arguments");if(!$.screenshotExport)P("hands_repl_screenshot_export_unavailable");return G(await $.screenshotExport(U.target))}if(U.kind==="context"&&["startRecording","stopRecording"].includes(V.method)){if(!$.recording||U.target!==$.context)P("hands_repl_recording_unavailable");if(H.length>(V.method==="startRecording"?1:0))P("hands_repl_invalid_arguments");return G(V.method==="startRecording"?await $.recording.start(H[0]):await $.recording.stop())}if($.privateProfile){let q=V.method;if(["evaluate","evaluateAll","waitForFunction","addInitScript","addScriptTag","addStyleTag","setContent","setInputFiles","route","content","cookies","storageState","addCookies","clearCookies","setExtraHTTPHeaders","setHTTPCredentials","grantPermissions","clearPermissions","innerHTML","textContent","allTextContents"].includes(q)||U.kind==="browser"&&q==="close"||U.kind==="context"&&q==="close")P("hands_repl_private_profile_method_denied");if(U.kind==="browser"&&q==="contexts")return W([$.context],"context[]");if((q==="screenshot"||q==="pdf")&&J0(H[0])&&(("path"in H[0])||("style"in H[0])))P("hands_repl_private_profile_path_denied");if(q==="goto"){if(typeof H[0]!=="string")P("hands_repl_private_profile_url_denied");try{let k=new URL(H[0]);if(!["http:","https:"].includes(k.protocol)&&H[0]!=="about:blank")P("hands_repl_private_profile_url_denied")}catch{P("hands_repl_private_profile_url_denied")}}if(q==="getAttribute"&&(typeof H[0]!=="string"||!L3.has(H[0].toLowerCase())))P("hands_repl_private_profile_attribute_denied");if(U.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(q)){let k=[U.target];if(q==="allInnerTexts"){let g=Reflect.get(U.target,"all");if(typeof g!=="function")P("hands_repl_private_profile_probe_unavailable");let x=await Reflect.apply(g,U.target,[]);if(!Array.isArray(x)||x.length>wQ||!x.every(A0))P("hands_repl_private_profile_probe_unavailable");k=x}for(let g of k){let x=Reflect.get(g,"isVisible");if(typeof x!=="function"||!await Reflect.apply(x,g,[]))P("hands_repl_private_profile_hidden_value_denied")}}if(q==="press"&&typeof H[0]==="string"&&F3(H[0]))P("hands_repl_private_profile_browser_shortcut_denied");if(U.kind==="locator"&&["inputValue","click","dblclick","tap","press"].includes(q)){let k=Reflect.get(U.target,"evaluate");if(typeof k!=="function")P("hands_repl_private_profile_probe_unavailable");let g=await Reflect.apply(k,U.target,[H3]);if(!J0(g)||typeof g.password!=="boolean"||typeof g.executableLink!=="boolean")P("hands_repl_private_profile_probe_unavailable");if(q==="inputValue"&&g.password)P("hands_repl_private_profile_password_denied");if(q!=="inputValue"&&g.executableLink)P("hands_repl_private_profile_url_denied");if(q==="inputValue"){let x=Reflect.get(U.target,"isVisible");if(typeof x!=="function"||!await Reflect.apply(x,U.target,[]))P("hands_repl_private_profile_hidden_value_denied")}}}let L=kQ[U.kind][V.method];if(!L)P("hands_repl_method_not_allowed");if(L.requiresStringSource&&typeof H[0]!=="string")P("hands_repl_string_source_required");if(U.kind==="browser"&&V.method==="contexts")return[z.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(V.method)&&H.some((q)=>J0(q)&&("path"in q)))P("hands_repl_file_path_not_allowed");if(V.method==="goto"&&typeof H[0]==="string"){let q;try{q=new URL(H[0]).protocol}catch{P("hands_repl_invalid_url")}if(!["http:","https:","data:","about:","blob:"].includes(q))P("hands_repl_file_path_not_allowed")}if(L.special==="contextViewportSize"){let q=Reflect.get(U.target,"pages");if(typeof q!=="function")P("hands_repl_method_unavailable");let k=await Reflect.apply(q,U.target,[]),g=Array.isArray(k)?k[0]:void 0,x=A0(g)?Reflect.get(g,"viewportSize"):void 0;if(typeof x!=="function")return h9();return W(await Reflect.apply(x,g,[]),L.returns)}if(L.special==="property"){let q=Reflect.get(U.target,V.method);return W(typeof q==="function"?Reflect.apply(q,U.target,[]):q,L.returns)}let j=Reflect.get(U.target,V.method);if(typeof j!=="function")P("hands_repl_method_unavailable");if(L.special==="route"){let q=H[1];if(!xQ(q))P("hands_repl_invalid_route_handler");$9(q.options);let k=F(q.options),g=async(C)=>{if(!A0(C))P("hands_repl_invalid_route");let A=Reflect.get(C,"fulfill");if(typeof A!=="function")P("hands_repl_invalid_route");await Reflect.apply(A,C,[k])},x=[F(H[0]??null),g],N=await Reflect.apply(j,U.target,x);return W(N,L.returns)}let O=H.map(F);if(V.method==="setInputFiles"){let q=U.kind==="locator"?0:1,k=async(x)=>{if(typeof x!=="string"){if(!J0(x)||typeof x.name!=="string"||typeof x.mimeType!=="string"||!e0.isBuffer(x.buffer))P("hands_repl_invalid_file_input");return x}if(!$.readWorkspaceFile)P("hands_repl_workspace_required");return $.readWorkspaceFile(x)},g=O[q];O[q]=Array.isArray(g)?await Promise.all(g.map(k)):await k(g)}if(V.method==="goto")await $.beforeNavigation?.();let T=$.actionRecorder?.(),D=await Reflect.apply(j,U.target,O),y={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"}[V.method];if(y){let q=Reflect.get(U.target,"page"),k=U.kind==="page"?U.target:typeof q==="function"?Reflect.apply(q,U.target,[]):void 0;T?.(y,A0(k)?k:void 0)}return W(D,L.returns)}})}import{isIP as hQ}from"net";import{Resolver as j3}from"dns/promises";import{isIP as c9}from"net";var C3=[["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 S8($){if(c9($)!==4)return null;let Q=$.split(".");if(Q.length!==4)return null;let Z=0;for(let X of Q){let Y=Number(X);if(!Number.isInteger(Y)||Y<0||Y>255)return null;Z=Z*256+Y}return Z>>>0}function T3($,Q,Z){let X=S8(Q);if(X===null)return!1;let Y=Z===0?0:4294967295<<32-Z>>>0;return($&Y)>>>0===(X&Y)>>>0}function fQ($){let Q=S8($);if(Q===null)return!0;return C3.some(([Z,X])=>T3(Q,Z,X))}function q3($){if(c9($)!==6)return null;let Q=$.toLowerCase(),Z=Q.indexOf("%");if(Z>=0)Q=Q.slice(0,Z);let X=[],Y=Q.lastIndexOf(":"),J=Y>=0?Q.slice(Y+1):"";if(J.includes(".")){let V=S8(J);if(V===null)return null;X=[V>>>16&65535,V&65535],Q=Q.slice(0,Y+1)+"0:0"}let z=Q.split("::");if(z.length>2)return null;let K=(V)=>{if(V==="")return[];let U=[];for(let H of V.split(":")){if(H===""||H.length>4||!/^[0-9a-f]+$/.test(H))return null;U.push(Number.parseInt(H,16))}return U},G=K(z[0]??"");if(G===null)return null;if(z.length===1){let V=G;if(V.length!==8)return null;return X.length>0?V.slice(0,6).concat(X):V}let W=K(z[1]??"");if(W===null)return null;let F=8-G.length-W.length;if(F<0)return null;let B=G.concat(Array(F).fill(0),W);if(B.length!==8)return null;return X.length>0?B.slice(0,6).concat(X):B}function O3($,Q){return`${$>>8&255}.${$&255}.${Q>>8&255}.${Q&255}`}function _3($){let Q=q3($);if(Q===null)return!0;let[Z,X,Y]=Q;if((Z&57344)!==8192)return!0;if(Z===8193&&(X&65024)===0)return!0;if(Z===8193&&X===3512)return!0;if(Z===16383&&(X&61440)===0)return!0;if(Z===8194)return fQ(O3(X,Y));return!1}function mQ($){return $.replace(/^\[|\]$/g,"")}function v9($){let Q=mQ($.trim()),Z=c9(Q);if(Z===4)return fQ(Q);if(Z===6)return _3(Q);return!0}function gQ($){if($ instanceof Error&&$.name==="TimeoutError")return"dns_timeout";switch(typeof $==="object"&&$!==null&&"code"in $?$.code:void 0){case"ENOTFOUND":return"dns_not_found";case"ENODATA":return"dns_empty";case"EAI_AGAIN":case"ESERVFAIL":case"ECONNREFUSED":return"dns_temporary";case"ETIMEOUT":case"ETIMEDOUT":return"dns_timeout";default:return"dns_failed"}}var yQ=5000;function D3($){return async(Q,Z)=>{if(Z?.aborted)throw Error("aborted");let X=new j3({timeout:yQ,tries:1});if($)X.setServers($);let Y=()=>X.cancel();Z?.addEventListener("abort",Y,{once:!0});try{let[J,z]=await Promise.allSettled([X.resolve4(Q),X.resolve6(Q)]),K=[...J.status==="fulfilled"?J.value:[],...z.status==="fulfilled"?z.value:[]];if(K.length>0)return K;let G=[J,z].flatMap((F)=>F.status==="rejected"?[F.reason]:[]);throw G.find((F)=>["dns_temporary","dns_timeout"].includes(gQ(F)))??G[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{Z?.removeEventListener("abort",Y)}}}var I3=D3();async function A3($,Q,Z,X){if(X?.aborted)throw Error("aborted");let Y=new AbortController,J,z,K=Q($,Y.signal);K.catch(()=>{});try{return await Promise.race([K,new Promise((G,W)=>{if(J=setTimeout(()=>W(new DOMException("DNS lookup timed out","TimeoutError")),Z),X)z=()=>W(Error("aborted")),X.addEventListener("abort",z,{once:!0})})])}finally{if(J!==void 0)clearTimeout(J);if(X&&z)X.removeEventListener("abort",z);Y.abort()}}async function i2($,Q=I3,Z){let X=mQ($);if(c9(X))return v9(X)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[X]};let Y;try{Y=await A3(X,Q,yQ,Z)}catch(J){return{ok:!1,reason:Z?.aborted?Z.reason instanceof Error&&Z.reason.name==="TimeoutError"?"dns_timeout":"aborted":gQ(J)}}if(Y.length===0)return{ok:!1,reason:"dns_empty"};if(Y.some(v9))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:Y}}var P3=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function R8($){return $.length<=253&&P3.test($.toLowerCase())}function x3($,Q){let Z=$.trim().toLowerCase();if(!R8(Z))return!1;if(Z.startsWith("*.")){let X=Z.slice(2);return Q===X||Q.endsWith(`.${X}`)}return Z===Q}function E3($){let Q=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec($);if(!Q)return null;let Z=Q.slice(1).map(Number);return Z.some((X)=>X>255)?null:Z}function w8($,Q=[]){let Z=(X)=>{if(X=X.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,""),!X.includes(":"))return X;try{X=new URL(`http://[${X}]/`).hostname.slice(1,-1)}catch{return X}let Y=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(X);if(!Y)return X;let J=parseInt(Y[1],16),z=parseInt(Y[2],16);return`${J>>8}.${J&255}.${z>>8}.${z&255}`};return Q.some((X)=>Z(X)===Z($))}function m0($){$=$.toLowerCase().replace(/^\[|\]$/g,"");let Q=E3($);if(Q){let[J,z,K]=Q;if(J===127)return"loopback";return J===0||J===10||J>=224||J===100&&z>=64&&z<=127||J===169&&z===254||J===172&&z>=16&&z<=31||J===192&&(z===168||z===0&&(K===0||K===2)||z===88&&K===99)||J===198&&(z===18||z===19||z===51&&K===100)||J===203&&z===0&&K===113?"private":"public"}if(!$.includes(":"))return"hostname";try{$=new URL(`http://[${$}]/`).hostname.slice(1,-1)}catch{return"private"}if($==="::1")return"loopback";let Z=/^::ffff:([\da-f]+):([\da-f]+)$/.exec($);if(Z){let J=parseInt(Z[1],16),z=parseInt(Z[2],16);return m0(`${J>>8}.${J&255}.${z>>8}.${z&255}`)==="public"?"public":"private"}let[X,Y=0]=$.split(":").map((J)=>parseInt(J||"0",16));return X<8192||X>16383||X===8194||X===8193&&(Y<512||Y===3512)||X===16383&&Y<4096?"private":"public"}function C9($,Q){let Z;try{Z=new URL($)}catch{return{allowed:!1,url:$,host:null,reason:"invalid_url"}}if(["about:","data:","blob:"].includes(Z.protocol))return{allowed:!0,url:$,host:null,reason:"local_document"};if(!["http:","https:","ws:","wss:"].includes(Z.protocol))return{allowed:!1,url:$,host:Z.hostname||null,reason:"unsupported_protocol"};let X=Z.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(Q.mode==="off")return{allowed:!0,url:$,host:X,reason:"policy_off"};let Y=(K)=>({allowed:!1,url:$,host:X,reason:K});if(Z.username||Z.password)return Y("invalid_url");if(Q.mode==="public_web"){let K=m0(X)!=="public"&&m0(X)!=="hostname"||X==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(X)||!X.includes(".")&&!hQ(X)||Boolean(hQ(X)&&v9(X));return{allowed:!K,url:$,host:X,reason:K?"private_network":"public_web"}}let J=Number(Z.port||(["https:","wss:"].includes(Z.protocol)?443:80));if(Q.deniedPorts?.includes(J)||w8(X,Q.deniedHosts))return Y("destination_not_allowed");let z=m0(X);if(z==="private"||["local","internal","arpa"].some((K)=>X===K||X.endsWith(`.${K}`)))return Y("private_network");if(z==="loopback"||X==="localhost"||X.endsWith(".localhost"))return Q.allowedLoopbackPorts?.includes(J)?{allowed:!0,url:$,host:X,reason:"loopback"}:Y("destination_not_allowed");if(Q.allowedDomains.some((K)=>x3(K,X)))return{allowed:!0,url:$,host:X,reason:"allowed_domain"};return{allowed:!1,url:$,host:X,reason:"destination_not_allowed"}}import cQ from"child_process";import{accessSync as R3,constants as w3,readFileSync as k3,statSync as pQ}from"fs";import{createRequire as lQ}from"module";import{homedir as k8}from"os";import{dirname as b3,isAbsolute as b8,join as g0,resolve as f3,win32 as m3}from"path";var d9=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:dQ.dependencies["playwright-core"],browser:"chromium"}),uQ=["/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"],f8=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function g3($=process.env){let Q=[$.ProgramFiles??"C:\\Program Files",$["ProgramFiles(x86)"]??"C:\\Program Files (x86)"],Z=$.LOCALAPPDATA?[$.LOCALAPPDATA]:[],X=(Y,...J)=>Y.map((z)=>m3.join(z,...J));return[...X([...Q,...Z],"Google","Chrome","Application","chrome.exe"),...X(Q,"Microsoft","Edge","Application","msedge.exe"),...X([...Q,...Z],"BraveSoftware","Brave-Browser","Application","brave.exe")]}function T9($){try{return R3($,w3.X_OK),b8($)&&pQ($).isFile()}catch{return!1}}function m8($,Q=process.platform){let Z=Q==="darwin"?uQ:Q==="linux"?f8:Q==="win32"?g3():null;return Z?($??Z).find(T9)??null:null}function y3(){if(!process.versions.bun)return;let $=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,$))return;let Q=[];cQ.spawn=new Proxy(cQ.spawn,{apply(Z,X,Y){let J=Reflect.apply(Z,X,Y),z=Y[1],K=Y[2]?.stdio;if(Array.isArray(z)&&z.includes("--remote-debugging-pipe")&&Array.isArray(K)&&K[3]==="pipe"&&K[4]==="pipe")Q.push(J);return J}}),Object.defineProperty(globalThis,$,{value:Q})}async function p9($){if(y3(),$!==void 0){if(!b8($))throw Error("hands_browser_driver_path_must_be_absolute");let X=g0($,"package.json"),Y=JSON.parse(k3(X,"utf8"));if(Y.name!==d9.driver)throw Error("hands_browser_wrong_driver");let J=lQ(X)($),z=J.default?.chromium??J.chromium;if(!z)throw Error("hands_browser_missing_chromium");return{version:Y.version,chromium:z}}let[Q,Z]=await Promise.all([import("./index-h6xkz48h.js"),import("./package-z2dk6xva.js").then((m)=>S3(m.default,1))]);return{version:Z.default.version,chromium:Q.chromium}}var h3=($,Q=d9.driverVersion)=>({status:"unavailable",reason:$,expectedDriverVersion:Q}),v3=($)=>$.loadDriver?.()??p9($.driverModuleDirectory),c3={"1.60.0":"1223"};function JX(){let $=process.platform,Q=c3[d9.driverVersion];if(!Q||$!=="linux"&&$!=="darwin"&&$!=="win32")return!1;let Z=(X)=>process.env[X]??process.env[`npm_config_${X.toLowerCase()}`]??process.env[`npm_package_config_${X.toLowerCase()}`];try{let X=Z("PLAYWRIGHT_BROWSERS_PATH"),Y=X==="0"?g0(b3(lQ(import.meta.url).resolve("playwright-core/package.json")),".local-browsers"):X?f3(Z("INIT_CWD")||process.cwd(),X):g0($==="darwin"?g0(k8(),"Library","Caches"):$==="win32"?process.env.LOCALAPPDATA||g0(k8(),"AppData","Local"):process.env.XDG_CACHE_HOME||g0(k8(),".cache"),"ms-playwright");return pQ(g0(Y,`chromium-${Q}`,"INSTALLATION_COMPLETE")).isFile()}catch{return!1}}async function Q9($={}){return sQ($,d9.driverVersion)}async function g8($,Q={}){if($.driverVersion!=="1.61.1"||!b8($.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return sQ({...Q,driverModuleDirectory:$.driverModuleDirectory,allowSystemBrowser:!0},$.driverVersion)}async function sQ($,Q){let Z=(G)=>h3(G,Q),X=$.platform??process.platform;if(X!=="linux"&&X!=="darwin"&&X!=="win32")return Z("unsupported_platform");let Y;try{Y=await v3($)}catch{return Z("driver_missing")}if(Y.version!==Q)return Z("driver_version_mismatch");let J=(G,W)=>({status:"resolved",executablePath:G,source:W,driverVersion:Y.version});if($.executablePath!==void 0)return T9($.executablePath)?J($.executablePath,"configured"):Z("executable_missing");let z=Y.chromium.executablePath();if(T9(z))return J(z,"managed");let K=$.allowSystemBrowser===!0?m8($.systemCandidates,X):null;return K?J(K,"system"):Z("executable_missing")}var $1=["/usr/local/bin/chromium",...f8];function Q1($,Q=eQ()){return m8($??(Q==="linux"?$1:void 0),Q)}async function Z1(){try{return(await p9()).chromium}catch{return a3(import.meta.url)("playwright-core").chromium}}var X1=1048576,Y1=105000,J1=20000,aQ=5000,G1=2000,z1=1000,V1=30000,oQ=81920,K1={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function W1($,Q){let Z=new URL($.url()),X={...await $.allHeaders(),host:Z.host};for(let Y of Object.keys(X))if(/^(?:proxy-|connection$|upgrade$|transfer-encoding$|content-length$)/i.test(Y))delete X[Y];return new Promise((Y,J)=>{let K=(Z.protocol==="https:"?r3:o3)(Z,{method:$.method(),headers:X,agent:!1,lookup:(W,F,B)=>{let V=y0.isIP(Q);if(F.all)B(null,[{address:Q,family:V}]);else B(null,Q,V)}},(W)=>{let F=[],B=0;W.on("data",(V)=>{if(B+=V.length,B>33554432)K.destroy(Error("hands_browser_response_too_large"));else F.push(V)}),W.on("error",J),W.on("end",()=>{let V={};for(let[U,H]of Object.entries(W.headers))if(H!==void 0&&!["transfer-encoding","connection","content-length"].includes(U))V[U]=Array.isArray(H)?H.join(`
|
|
300
|
-
`):H;Y({status:W.statusCode??502,headers:V,body:Buffer.concat(F)})})}),G=setTimeout(()=>K.destroy(Error("hands_browser_fetch_timeout")),V1);K.once("close",()=>clearTimeout(G)),K.on("error",J),K.end($.postDataBuffer()??void 0)})}async function B1($,Q,Z=()=>{},X={lookup:(Y)=>i3(Y,{all:!0}),fetch:W1}){let Y=new WeakSet,J=new WeakMap,z=(K)=>{let G=J.get(K);if(G)return G;let W=(async()=>{if(!$.newCDPSession)return;let F=await $.newCDPSession(K),B=new Map;F.on("Network.loadingFinished",({requestId:V})=>B.delete(V)),F.on("Network.loadingFailed",({requestId:V})=>B.delete(V)),F.on("Fetch.requestPaused",async(V)=>{let U=V.networkId??V.requestId,H=V.redirectedRequestId?(B.get(U)??0)+1:0;B.set(U,H);let L=C9(V.request.url,Q),j=Q.mode==="enforce"&&Boolean(V.redirectedRequestId)&&L.host!==null&&!y0.isIP(L.host),O=!L.allowed?L:j?{...L,allowed:!1,reason:"destination_not_allowed"}:H>20?{...L,allowed:!1,reason:"redirect_not_supported"}:null;try{if(O)Z(O),await F.send("Fetch.failRequest",{requestId:V.requestId,errorReason:"BlockedByClient"});else await F.send("Fetch.continueRequest",{requestId:V.requestId})}catch{await F.send("Fetch.failRequest",{requestId:V.requestId,errorReason:"Failed"}).catch(()=>{})}}),await F.send("Network.enable"),await F.send("Fetch.enable",{patterns:[{urlPattern:"*",requestStage:"Request"}]}),Y.add(K)})();return J.set(K,W),W};return await $.route("**/*",async(K)=>{let G=K.request().url(),W=C9(G,Q);if(W.allowed&&Q.mode==="public_web"){await K.continue();return}let F=K.request();if(W.allowed&&W.host&&y0.isIP(W.host)&&F.isNavigationRequest?.()){let B=F.frame();if(Y.has(B.page())&&B===B.page().mainFrame()){await K.continue();return}}if(W.allowed&&(Q.mode==="off"||W.reason==="local_document")){await K.continue();return}if(W.allowed&&W.host)try{let B=W.host,V=m0(B),U,H=await(async()=>{if(V!=="hostname")return[{address:B,family:y0.isIP(B)}];if(W.reason==="loopback")return[{address:"127.0.0.1",family:4}];try{return await Promise.race([X.lookup(B),new Promise((L,j)=>{U=setTimeout(()=>j(Error("hands_browser_dns_timeout")),5000)})])}finally{if(U)clearTimeout(U)}})();if(!H.length||H.some(({address:L})=>{let j=m0(L);return!y0.isIP(L)||Q.mode==="enforce"&&w8(L,Q.deniedHosts)||(W.reason==="loopback"?j!=="loopback":j!=="public")}))W={...W,allowed:!1,reason:"private_network"};else{let L=await X.fetch(K.request(),H[0].address);if(L.status>=300&&L.status<400){let j=L.headers.location??G;try{j=new URL(j,G).href}catch{}let O=C9(j,Q);W=O.allowed?{...O,allowed:!1,reason:"redirect_not_supported"}:O}else{await K.fulfill(L);return}}}catch{await K.abort("failed");return}Z(W),await K.abort("blockedbyclient")}),await $.routeWebSocket("**/*",async(K)=>{let G=C9(K.url(),Q);if(Q.mode==="enforce"&&G.allowed&&(!G.host||!y0.isIP(G.host)))G={...G,allowed:!1,reason:"destination_not_allowed"};if(G.allowed){K.connectToServer();return}Z(G),await K.close({code:1008,reason:"Reason egress policy denied"})}),Q.mode==="off"?void 0:{preparePage:z}}async function $Z($,Q=eQ(),Z){if(Z){let Y=await g8(Z,{platform:Q,systemCandidates:$});return Y.status==="resolved"?Y.executablePath:null}if($!==void 0){let Y=Q1($,Q);if(Y)return Y}let X=await Q9({platform:Q,systemCandidates:$,allowSystemBrowser:!0});return X.status==="resolved"?X.executablePath:null}function rQ($,Q){if(!$)throw Error("hands_repl_workspace_required");let Z=h8($),X=Z9($),Y=v8(X,Z9(X,Q)),z=Y!==".."&&!Y.startsWith(`..${c8}`)&&!iQ(Y)?Z9(Z,Y):Z9(Z,Q);if(O0(Z9(X,Q))||O0(z))throw Error("hands_repl_protected_path");let K=(H)=>{let L=v8(Z,H);return L!==""&&L!==".."&&!L.startsWith(`..${c8}`)&&!iQ(L)},G=h8(z);if(O0(G))throw Error("hands_repl_protected_path");if(!K(z)||!K(G))throw Error("hands_repl_file_outside_workspace");let W=v8(Z,z).split(c8),F=[Z,...W.map((H,L)=>Z9(Z,...W.slice(0,L+1)))],B=F.map((H)=>nQ(H));if(B.some((H)=>H.isSymbolicLink()))throw Error("hands_repl_file_symlink");let V=B[B.length-1];if(!V.isFile()||V.nlink!==1||V.size>16777216)throw Error("hands_repl_file_not_regular_or_too_large");let U=u3(z,y8.O_RDONLY|y8.O_NOFOLLOW|y8.O_NONBLOCK);try{let H=l3(U);if(H.dev!==V.dev||H.ino!==V.ino||!H.isFile())throw Error("hands_repl_file_changed");for(let T=0;T<F.length;T++){let D=nQ(F[T]);if(D.dev!==B[T].dev||D.ino!==B[T].ino||D.isSymbolicLink())throw Error("hands_repl_file_changed")}if(!K(h8(z)))throw Error("hands_repl_file_outside_workspace");let L=Buffer.alloc(16777217),j=0;while(j<L.length){let T=s3(U,L,j,L.length-j,null);if(!T)break;j+=T}if(j===L.length)throw Error("hands_repl_file_too_large");let O=L.subarray(0,j);return{name:t3(z),mimeType:K1[e3(z).toLowerCase()]??"application/octet-stream",buffer:O}}finally{p3(U)}}function X9($,Q){$.end(`${JSON.stringify(Q)}
|
|
301
|
-
`)}function l9($){try{n3($)}catch{}}async function QZ($){if($.managedBrowser&&$.driverModuleDirectory!==void 0)throw Error("hands_browser_ambiguous_driver_configuration");let Q=$.launch||$.targetContext?null:$.managedBrowser?await g8($.managedBrowser,{executablePath:$.browserExecutablePath}):await Q9({executablePath:$.browserExecutablePath,driverModuleDirectory:$.driverModuleDirectory});if(Q?.status==="unavailable")throw Error(`hands_browser_${Q.reason}`);let Z=Q?.status==="resolved"?Q.executablePath:$.browserExecutablePath;if(!Z||!T9(Z))throw Error("hands_browser_unavailable");let X=$.launch??(async(N)=>($.targetContext?await Z1():(await p9($.managedBrowser?.driverModuleDirectory??$.driverModuleDirectory)).chromium).launch(N)),Y=[],J={},z=null,K=null,G=null,W=null,F=!1,B=null,V=new Map,U=new WeakMap,H=null,L=()=>{if(F)throw Error("hands_repl_stopped");if(W)throw W},j=(N)=>{let C=U.get(N);if(C)return C;let A=Promise.resolve().then(()=>N.close()).then(()=>{V.delete(N)});return U.set(N,A),A},O=async()=>{let N=[...V.entries()].reverse(),C=H??=performance.now()+z1,A=Promise.allSettled(N.filter(([,_])=>_==="context").map(([_])=>j(_))),f;try{await Promise.race([A,new Promise((_)=>{f=setTimeout(_,Math.max(0,C-performance.now()))})])}finally{if(f)clearTimeout(f)}let S=await Promise.allSettled(N.map(([_])=>j(_))),R=[];for(let[_,w]of S.entries()){if(w.status!=="rejected")continue;let d=w.reason instanceof Error&&["Error","TimeoutError","ProtocolError"].includes(w.reason.name)?w.reason.name:"unknown";R.push(Error(`hands_repl_close_failed: ${N[_][1]}: ${d}`))}if(R.length)throw AggregateError(R,"hands_repl_stop_unconfirmed")},T=(N,C)=>{if(V.set(N,C),F||W)j(N).catch(()=>{return}),L();return N},D=async()=>{let N=await X({executablePath:Z,headless:!0,chromiumSandbox:$.managedBrowser===void 0,args:["--disable-background-networking","--disable-quic","--disable-dev-shm-usage","--disable-gpu","--disable-software-rasterizer","--dns-prefetch-disable","--force-webrtc-ip-handling-policy=disable_non_proxied_udp","--no-pings"]}),C=null;try{T(N,"browser"),C=$.targetContext??T(await N.newContext({viewport:{width:1440,height:900},screen:{width:1440,height:900},serviceWorkers:"block",acceptDownloads:!1}),"context");let A=await B1(C,$.networkPolicy??{mode:"off"},$.onEgressDenied);if(L(),A){let m=C.newPage.bind(C);C.newPage=async()=>{let l=await m();return await A.preparePage(l),l}}let S=C.pages()[0]??await C.newPage();await A?.preparePage(S),L();let R=async(m=S)=>{let l=m;if(typeof l.ariaSnapshot==="function")return l.ariaSnapshot({timeout:1e4});return S.locator("body").innerText({timeout:1e4})},_=async(m,l={})=>{let u=l&&typeof l==="object"&&!Array.isArray(l)?l:{},a,H0="image/png";if(Buffer.isBuffer(m)||m instanceof Uint8Array)a=Buffer.from(m);else if(typeof m==="string"&&(m.startsWith("data:")||/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(m)))a=Buffer.from(m.replace(/^data:[^,]*,/,""),"base64");else if(typeof m==="string"){let S0=rQ($.workspaceRoot,m);a=S0.buffer,H0=S0.mimeType}else throw Error("view() needs a Buffer, a base64 string, or a path to an image file");if(a.length===0)throw Error("view(): the image is empty");let z8=String(u.label??"").replace(/[\r\n>]+/g," ").trim().slice(0,120),q0=Number(u.maxWidth)||1024,u0=Number(u.quality)||72,I9=$.targetContext?await N.newPage():await C.newPage();try{let S0=`data:${H0};base64,${a.toString("base64")}`;for(let o=0;o<5;o+=1){let B0=await I9.evaluate(async(K0)=>{let L0=new Image;L0.src=K0.url,await L0.decode();let R0=Math.min(1,K0.maxWidth/L0.naturalWidth),Y0=document.createElement("canvas");Y0.width=Math.max(1,Math.round(L0.naturalWidth*R0)),Y0.height=Math.max(1,Math.round(L0.naturalHeight*R0));let Q0=Y0.getContext("2d");if(!Q0)throw Error("view(): canvas unavailable");return Q0.fillStyle="#ffffff",Q0.fillRect(0,0,Y0.width,Y0.height),Q0.drawImage(L0,0,0,Y0.width,Y0.height),{data:Y0.toDataURL("image/jpeg",K0.q/100).split(",")[1]??"",width:Y0.width,height:Y0.height,sourceWidth:L0.naturalWidth,sourceHeight:L0.naturalHeight}},{url:S0,maxWidth:q0,q:u0}),s0=Buffer.from(B0.data,"base64");if(s0.length<=oQ){let K0=z8||"image";return`<<<ARA_VIEW_IMAGE ${B0.data} image/jpeg ${K0}>>>
|
|
302
|
-
Viewing ${K0} (${B0.sourceWidth}x${B0.sourceHeight} source, sent at ${B0.width}x${B0.height}, ${Math.round(s0.length/1024)}KB).`}if(q0>640)q0=Math.round(q0*0.75);else u0=Math.max(30,u0-15)}throw Error(`view(): could not reduce the image under ${Math.round(oQ/1024)}KB`)}finally{await I9.close().catch(()=>{return})}},w=bQ({browser:$.targetContext?.browser()??N,context:C,page:S,a11y:R,view:_,readWorkspaceFile:(m)=>rQ($.workspaceRoot,m),privateProfile:$.privateProfile,beforeNavigation:$.beforeNavigation,recording:$.recording,screenshotExport:$.screenshotExport,actionRecorder:()=>{let m=Y,l=J;return(u,a)=>{if(m.length<tQ)m.push(u);if(a)l.page=a}}}),d=async(m)=>{L();let l=T(await N.newContext({serviceWorkers:"block",acceptDownloads:!1}),"context");try{await l.route("**/*",(a)=>a.abort()),L(),await l.routeWebSocket("**/*",(a)=>a.close({code:1008,reason:"Reason evaluator network denied"})),L(),await l.exposeBinding("__araHandsRpc",async(a,H0)=>$.onBrowserOperation?$.onBrowserOperation(m,()=>w.dispatch(H0)):w.dispatch(H0)),L();let u=await l.newPage();return L(),await u.goto("data:text/html,<title>Reason Hands evaluator</title>"),L(),await u.evaluate(`(${DQ})(${JSON.stringify(w.roots)})`),{context:l,page:u,runId:m}}catch(u){throw await j(l).catch(()=>{return}),u}},p=await d(),$0={browser:N,context:C,page:S,evaluator:p,async captureProgressFrame(m){return _(await m.screenshot({type:"jpeg",quality:65,timeout:2000}),{label:"Screen after browser action"})},async resetEvaluator(m){await j($0.evaluator.context),$0.evaluator=await d(m)}};return L(),$0}catch(A){throw await O().catch(()=>{return}),A}},b=async()=>{if(L(),z)return z;if(!G){K=D();let N;G=Promise.race([K,new Promise((C,A)=>{N=setTimeout(()=>A(Error("hands_browser_unavailable: startup timed out")),J1)})]).then((C)=>{return L(),z=C,C}).catch(async()=>{W=Error("hands_browser_unavailable: startup failed or timed out");let C;try{await Promise.race([O(),new Promise((A,f)=>{C=setTimeout(()=>f(Error("hands_repl_stop_timeout")),aQ)})])}catch{W=Error("hands_browser_unavailable: startup cleanup unconfirmed")}finally{if(C)clearTimeout(C)}throw W}).finally(()=>{if(N)clearTimeout(N)})}return G},y=async(N,C,A=!1)=>{let f=await b(),S=J;if($.onBrowserOperation&&f.evaluator.runId!==C)await f.resetEvaluator(C);let _=(async()=>{let p=await f.evaluator.page.evaluate(`(${IQ})(${JSON.stringify({code:N})})`);if(typeof p!=="string")throw Error("hands_repl_invalid_evaluator_output");let $0=S.page;if(A&&$0&&!p.includes("<<<ARA_VIEW_IMAGE")){let m=()=>f.captureProgressFrame($0);try{let l=await($.onBrowserOperation?$.onBrowserOperation(C,m):m());return S.automaticProgressImage=!0,`${p}
|
|
303
|
-
${l}`}catch{return`${p}
|
|
304
|
-
Screen capture unavailable.`}}return p})(),w,d=new Promise((p,$0)=>{w=setTimeout(()=>$0(Error("REPL evaluation timed out after 105 seconds")),Y1)});try{return await Promise.race([_,d])}catch(p){if(p instanceof Error&&p.message.includes("timed out"))_.catch(()=>{return}),await f.resetEvaluator(C).catch(()=>{return});throw p}finally{if(w)clearTimeout(w)}},q=Promise.resolve(),k=new Set,g=new Set;l9($.socketPath);let x=y0.createServer((N)=>{k.add(N),N.once("close",()=>{k.delete(N),g.delete(N)}),N.setEncoding("utf8");let C="",A=!1;N.on("data",(f)=>{if(A)return;if(C+=f,C.length>X1){A=!0,X9(N,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let S=C.indexOf(`
|
|
305
|
-
`);if(S===-1)return;A=!0;let R=C.slice(0,S);if($.onControl)try{let _=JSON.parse(R);if(typeof _.action==="string"&&_.action!=="evaluate")g.add(N)}catch{}q=q.then(async()=>{if(N.destroyed)return;Y=[],J={};try{let _=JSON.parse(R);if(_.action==="probe"){let m=await b();await y("undefined",m.evaluator.runId),X9(N,{ok:!0,output:"ARA_HANDS_REPL_READY"});return}if(typeof _.action==="string"&&_.action!=="evaluate"&&$.onControl){X9(N,{ok:!0,output:await $.onControl(_.action,_)});return}if(_.action!=="evaluate"||typeof _.code!=="string")throw Error("Invalid REPL request");let w=_.code,d=typeof _.runId==="string"?_.runId:void 0,p=()=>y(w,d,_.includeProgressCapture===!0),$0=await($.onEvaluate?$.onEvaluate(_,p):p());X9(N,{ok:!0,output:$0,browserActions:Y,...J.automaticProgressImage?{automaticProgressImage:!0}:{}})}catch(_){X9(N,{ok:!1,error:_ instanceof Error?_.message:String(_),stack:_ instanceof Error?_.stack:void 0,browserActions:Y})}}).catch((_)=>{X9(N,{ok:!1,error:_ instanceof Error?_.message:String(_)})})})});try{await new Promise((N,C)=>{x.once("error",C),x.listen($.socketPath,()=>{x.off("error",C);try{if(process.platform!=="win32")d3($.socketPath,384);N()}catch(A){x.close(()=>C(A))}})})}catch(N){throw l9($.socketPath),N}return{socketPath:$.socketPath,browserExecutablePath:Z,stop(){if(B)return B;F=!0;let N=g.size?setTimeout(()=>{for(let S of g)S.destroy()},G1):void 0,C=new Promise((S)=>x.close(()=>{if(N)clearTimeout(N);S()}));for(let S of k)if(!g.has(S))S.destroy();q.catch(()=>{return});let A=async()=>{await C,l9($.socketPath);let S=[O()];if(K)S.push(K.then(()=>{return},()=>{return}));let R=await Promise.allSettled(S),_=await Promise.allSettled([O()]),w=[...R,..._].filter((d)=>d.status==="rejected");if(w.length)throw AggregateError(w.map((d)=>d.reason),"hands_repl_stop_unconfirmed")},f;return B=Promise.race([A(),new Promise((S,R)=>{f=setTimeout(()=>R(Error("hands_repl_stop_timeout")),aQ)})]).finally(()=>{if(f)clearTimeout(f);l9($.socketPath)}),B}}}var L1=["private_runtime","runtime_root","temporary_directory","granted_root","workspace_layout","jobs","browser_socket","relay_url","environment_owner","job_environment","config_write"],F1=["ENOENT","EACCES","EPERM","EINVAL","ENOTDIR","EISDIR","ELOOP","EROFS","ENOSPC","EMFILE","ENFILE","EEXIST"];function ZZ($,Q){if(!$||!L1.includes($))return null;let Z=typeof Q==="object"&&Q!==null&&"code"in Q?Q.code:null;return{workspace_stage:$,workspace_errno:typeof Z==="string"&&F1.includes(Z)?Z:"unknown"}}import{lstatSync as H1,readFileSync as U1}from"fs";var N1="/run/sc/egress-guard",M1=10002,d8=10003;function XZ($=process.platform,Q=N1){if($!=="linux")return!1;try{let Z=H1(Q);if(!Z.isFile()||Z.uid!==0||(Z.mode&18)!==0)return!1;return U1(Q,"utf8")===`v1 ${M1} ${d8}
|
|
306
|
-
`}catch{return!1}}var j1=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function YZ($){let Q=j1.exec($.replace(/\/+$/,""));return Q?`${Q[1]}/repo`:null}import{randomUUID as U7}from"crypto";import{spawn as N7,spawnSync as M7}from"child_process";import{accessSync as j7,chmodSync as D9,closeSync as C7,constants as K9,fchmodSync as T7,fstatSync as q7,openSync as O7,copyFileSync as _7,existsSync as Z$,lstatSync as i,statSync as l0,mkdtempSync as D7,mkdirSync as L9,realpathSync as c,renameSync as Q8,rmSync as I7,writeFileSync as Z8}from"fs";import{homedir as A7,tmpdir as pZ}from"os";import{basename as P7,dirname as X0,join as n,resolve as lZ,sep as x7}from"path";var C1={"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 JZ($){return $===null?"other":C1[$]??"other"}function V0($,Q){if($===void 0||Q===void 0)return null;let Z=Math.round(Q-$);return Number.isSafeInteger(Z)&&Z>=0&&Z<=600000?Z:null}var h="workspace_mode",P0="granted_root",W0="project_root",Y9="terminal_root",J9="terminal_benchmark_tool_profile",T1=["bash","bash-node-repl","bash-node-repl-files"],GZ="hands_node_repl_persistent_execution_unsupported";function zZ($){return $==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function p8($){return T1.includes($)}function EX($){return q1($)&&$.workspace_mode==="terminal_root"&&p8($.terminal_benchmark_tool_profile)}function q1($){return typeof $==="object"&&$!==null&&!Array.isArray($)}var bX=I.object({device_id:I.string().uuid(),root_id:I.string().uuid()}),u8=/^reason\/[0-9a-f]{8}$/,O1=I.strictObject({source_path:I.string().refine(h0).optional(),branch:I.string().regex(u8)}),fX=I.object({checkout_mode:I.enum(["worktree","direct"]).optional(),project_workspace_source:I.object({kind:I.literal("local_device"),device_id:I.string().uuid(),root_id:I.string().uuid(),path:I.string().refine(h0).optional(),worktree:O1.optional()})});import{execFile as _1}from"child_process";var D1=20000,I1=1e4,VZ=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,A1=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function KZ($,Q=P1){let Z=(j,O=I1)=>Q([...A1,"-C",$,...j],O),X=async(j)=>{let O=await Z(j);return O.status===0?O.stdout.trim():null},Y=await X(["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(!Y||!VZ.test(Y))return null;let J=Y.slice(0,12),z=(j)=>({commit:Y,from:"head",note:`reason: started from ${j}`}),K=await X(["symbolic-ref","--quiet","HEAD"]);if(!K?.startsWith("refs/heads/"))return z(`the checkout's detached HEAD ${J}`);let G=K.slice(11),W=await Z(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(W.status!==0||W.stdout.trim())return z(`${G} at ${J}: the checkout has uncommitted changes, which stay there`);let F=await X(["config","--get",`branch.${G}.remote`]),B=await X(["config","--get",`branch.${G}.merge`]);if(!F||!B?.startsWith("refs/")||F.startsWith("-"))return z(`${G} at ${J}: it has no upstream to catch up with`);let V=F==="."||(await Z(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",F,B],D1)).status===0,U=await X(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),H=U?await X(["rev-parse","--verify","--quiet","@{upstream}^{commit}"]):null;if(!U||!H||!VZ.test(H))return z(`${G} at ${J}: ${V?"it has no upstream to catch up with":`fetching ${F} failed`}`);if(!V)return z(`${G} at ${J}: fetching ${U} failed, so it may be behind`);if(H===Y)return z(`${G} at ${J}, the same commit as ${U} after fetching it`);if((await Z(["merge-base","--is-ancestor",Y,H])).status!==0)return z(`${G} at ${J}: it has commits that ${U} does not`);let L=await X(["rev-list","--count",`${Y}..${H}`]);return{commit:H,from:"upstream",note:`reason: started from ${U} at ${H.slice(0,12)}, fetched just now: ${G} had no commits of its own and was ${L??"some"} commits behind it`}}function P1($,Q){return new Promise((Z)=>{_1("git",$,{encoding:"utf8",timeout:Q,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(X,Y)=>{let J=X?typeof X.code==="number"?X.code:null:0;Z({status:J,stdout:String(Y??"")})})})}import{execFile as x1}from"child_process";import{lstatSync as i8,readdirSync as s8,readFileSync as LZ,realpathSync as u9,rmdirSync as WZ,unlinkSync as E1,writeFileSync as S1}from"fs";import{readFile as R1}from"fs/promises";import{join as C0,resolve as BZ}from"path";var q9=".reason-device",w1=86400000,k1=500,b1=60000;function FZ($,Q,Z){let X=Q.split("/"),Y=G9.split("/");if(X.length!==Y.length+2||Y.some((J,z)=>X[z]!==J)||!s9.test(X[Y.length]))return;try{let J=HZ($,X[Y.length]);S1(C0(J,q9),Z,{flag:"wx",mode:384})}catch{}}function HZ($,Q){let Z=()=>new M("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!s9.test(Q))throw Z();let X=C0(u9($),G9),Y=C0(X,Q);if(!i8(Y).isDirectory()||u9(Y)!==Y)throw Z();return Y}async function f1($,Q,Z=g1){let X;try{X=HZ($,Q)}catch(Y){if(n8(Y))return!0;throw Y}for(let Y of s8(X,{withFileTypes:!0})){if(Y.name===q9||!Y.isDirectory())continue;let J=C0(X,Y.name),z=await m1(J);if(z){let K=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false",`--git-dir=${z}`,"worktree"];if((await Z([...K,"remove","--force",J])).status===0)await Z([...K,"prune"])}else try{WZ(J)}catch{}}if(s8(X).some((Y)=>Y!==q9))return!1;try{E1(C0(X,q9))}catch(Y){if(!n8(Y))throw Y}return WZ(X),!0}async function m1($){try{let Q=C0($,".git");if(!i8(Q).isFile())return null;let Z=/^gitdir: (.+)$/m.exec(LZ(Q,"utf8"));if(!Z)return null;let X=BZ($,Z[1].trim());return BZ(X,(await R1(C0(X,"commondir"),"utf8")).trim())}catch{return null}}async function uX($){let Q;try{if(Q=C0(u9($.home),G9),!i8(Q).isDirectory())return{status:"skipped",reason:"workspace_untrusted"};if(u9(Q)!==Q)return{status:"skipped",reason:"workspace_untrusted"}}catch(J){if(n8(J))return{status:"skipped",reason:"no_workspace"};throw J}let Z=s8(Q,{withFileTypes:!0}).filter((J)=>J.isDirectory()&&s9.test(J.name)).map((J)=>J.name).filter((J)=>{try{return LZ(C0(Q,J,q9),"utf8")===$.deviceId}catch{return!1}}).sort().slice(0,k1);if(!Z.length)return{status:"done",removed:[],kept:[],failed:[]};let X=await $.liveIds(Z);if(X===null)return{status:"skipped",reason:"server_unsupported"};let Y={status:"done",removed:[],kept:Z.filter((J)=>X.includes(J)),failed:[]};for(let J of Z.filter((z)=>!X.includes(z)))(await f1($.home,J,$.runGit).catch(()=>!1)?Y.removed:Y.failed).push(J);return Y}function sX($,Q,Z=w1){if(Q.aborted)return;let X=!1,Y=()=>{if(X||Q.aborted)return;X=!0,$().catch(()=>{return}).finally(()=>{X=!1})},J=setInterval(Y,Z);J.unref?.(),Q.addEventListener("abort",()=>clearInterval(J),{once:!0}),Y()}function n8($){return typeof $==="object"&&$!==null&&$.code==="ENOENT"}function g1($){return new Promise((Q)=>{x1("git",$,{encoding:"utf8",timeout:b1,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(Z,X,Y)=>{let J=Z&&typeof Z.code==="number"?Z.code:null;Q({status:Z?J??1:0,stderr:Y??""})})})}import{createHash as y1}from"crypto";import{join as h1}from"path";function v1($){return n9($)}function T0(){throw new M("environment_unavailable","The private Session environment is unavailable or stale.")}function i9($){return y1("sha256").update(JSON.stringify({...$,variables:Object.fromEntries(Object.entries($.variables).sort(([Q],[Z])=>Q.localeCompare(Z)))})).digest("hex")}function NZ($,Q){o9($);let Z=h1($,"environment.json"),X,Y=new Set,J=(K,G)=>`${G}:${K}`,z=(K)=>{let G=HQ.safeParse(K);if(!G.success)return T0();let W=G.data,F=Q.identity(),B=Date.parse(W.expires_at);if(!F||W.run_id!==Q.runId||W.device_id!==Q.deviceId||W.root_id!==Q.rootId||W.binding.kind!==Q.binding.kind||W.binding.target_revision!==Q.binding.target_revision||W.binding.root_grant_revision!==Q.binding.root_grant_revision||W.binding.target_generation!==F.generation||W.binding.target_fence_id!==F.fenceId||B<=Date.now()||B>Q.expiresAtMs||Q.expiresAtMs<=Date.now()||Object.keys(W.variables).some((V)=>!v1(V)))return T0();if(W.git){let V=new URL(Q.apiOrigin),U=new URL(W.git.base_url),H=Date.parse(W.git.expires_at);if(U.origin!==V.origin)throw new M("environment_git_origin_mismatch","The delivered Git broker is not on this worker's API origin.");if(!["/git","/git/"].includes(U.pathname)||U.username||U.password||U.search||U.hash||H<=Date.now()||H>B)return T0()}if(W.cloud_access&&!LQ(W.cloud_access,Q.apiOrigin))throw new M("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return W};return{path:Z,install(K){let G=z(K),W=i9(G);if(X&&(G.revision<X.revision||G.revision===X.revision&&(W!==X.hash||G.snapshot_id!==X.snapshotId)))return T0();if(!X||G.revision>X.revision){if(UZ(Z,G,j0.snapshotBytes),i9(z(JSON.parse(a9(Z,j0.snapshotBytes))))!==W)return T0();let F=X;if(X={revision:G.revision,hash:W,snapshotId:G.snapshot_id,generation:G.binding.target_generation},F&&F.generation<X.generation)Y.add(J(F.snapshotId,F.revision))}else if(i9(z(JSON.parse(a9(Z,j0.snapshotBytes))))!==X.hash)return T0();return{installed:!0,snapshot_id:G.snapshot_id,installed_revision:G.revision}},current(){if(!X)return T0();try{let K=z(JSON.parse(a9(Z,j0.snapshotBytes)));if(i9(K)!==X.hash)return T0();return K}catch{return T0()}},carried:(K,G)=>Y.has(J(K,G))}}var z9=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})]),c1="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",d1=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",c1]),MZ=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),VY=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),KY=new Set([G0,...z9.map(($)=>$.artifact_sha256),...d1,...MZ]);var WY=new Set([G0,...z9.filter(($)=>$.pi_tools_v1).map(($)=>$.artifact_sha256),...MZ]);var BY=new Set([G0,...z9.filter(($)=>$.pi_tools_confinement_v1).map(($)=>$.artifact_sha256)]);var LY=new Set([G0,...z9.filter(($)=>$.home_folder_v1).map(($)=>$.artifact_sha256)]);var FY=new Set([G0,...z9.filter(($)=>$.background_bash_v1).map(($)=>$.artifact_sha256)]);var HY=new Set([G0,...z9.filter(($)=>$.machine_sdk_v1).map(($)=>$.artifact_sha256)]);var p1=[v0,"reason-hands-worker.cjs"];function jZ($){return typeof $==="string"&&p1.includes($)}var l1;function CZ(){return l1??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as u1,constants as a8,fstatSync as TZ,lstatSync as s1,openSync as n1,readSync as i1,realpathSync as a1,watch as o1}from"fs";import{dirname as qZ}from"path";function r9($,Q){let Z;try{let X=qZ($),Y=s1(X);if(!Y.isDirectory()||Y.isSymbolicLink()||!r0(Y,18)||a1(X)!==X)return null;Z=n1($,a8.O_RDONLY|a8.O_NOFOLLOW|a8.O_NONBLOCK);let J=TZ(Z);if(!J.isFile()||J.nlink!==1||!r0(J)||J.size<1||J.size>8192)return null;let z=Buffer.alloc(8193),K=i1(Z,z,0,z.length,0),G=TZ(Z);if(K!==J.size||G.size!==J.size||G.nlink!==1||G.mtimeMs!==J.mtimeMs||G.ctimeMs!==J.ctimeMs)return null;let W=JSON.parse(z.subarray(0,K).toString("utf8"));if(!W||W.pid!==Q.pid||!Number.isSafeInteger(W.pid)||W.pid<1||W.launchId!==Q.launchId||W.workerVersion!==Q.workerVersion||W.protocolVersion!==Q.protocolVersion||W.workerArtifactSha256!==Q.workerArtifactSha256||W.workerEntrypoint!==Q.workerEntrypoint||W.workspaceAliasReady!==!0||!I0(W.targetGeneration)||!I0(W.generation)||!N0(W.fenceId))return null;return{...Q,generation:W.generation,targetGeneration:W.targetGeneration,fenceId:W.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(Z!==void 0)u1(Z)}}var r1=($,Q,Z)=>{let X=o1($,{persistent:!1},Q);return X.on("error",Z),X};function OZ($){let Q=new AbortController,Z=$.initial,X=Z.targetGeneration,Y=!1,J=!1,z,K,G=()=>{if(J)return;J=!0,z?.close(),z=void 0,clearInterval(K),$.signal.removeEventListener("abort",G),Q.abort()},W=()=>{if(J)return;if(!$.isAlive()){G();return}let F=r9($.path,$.initial);if(!F||F.generation<Z.generation||F.targetGeneration<Z.targetGeneration||F.targetGeneration===Z.targetGeneration&&F.fenceId!==Z.fenceId)return;if(Z=F,Y||F.targetGeneration<=X)return;X=F.targetGeneration,Y=!0,Promise.resolve().then(()=>{return Q.signal.throwIfAborted(),$.publish(F,Q.signal)}).catch(()=>{if(!J)G(),$.failed?.()}).finally(()=>{Y=!1,W()})};if($.signal.aborted)return G(),{stop:G};$.signal.addEventListener("abort",G,{once:!0});try{z=($.watch??r1)(qZ($.path),W,()=>{z?.close(),z=void 0})}catch{}return K=setInterval(W,1000),K.unref?.(),W(),{stop:G}}import{spawn as t1}from"child_process";import{chmodSync as e1,mkdtempSync as $7,realpathSync as Q7,rmSync as Z7,unlinkSync as X7,writeFileSync as Y7}from"fs";import J7 from"net";import{platform as G7,tmpdir as z7}from"os";import{join as _Z}from"path";var DZ=1048576,t8=105000,V7=2000,K7=String.raw`
|
|
307
|
-
const { writeSync } = require("node:fs");
|
|
308
|
-
const { createRequire } = require("node:module");
|
|
309
|
-
const { join } = require("node:path");
|
|
310
|
-
const { createInterface } = require("node:readline");
|
|
311
|
-
const { formatWithOptions, inspect } = require("node:util");
|
|
312
|
-
const vm = require("node:vm");
|
|
313
|
-
|
|
314
|
-
const timeoutMs = ${t8};
|
|
315
|
-
const maxLogChars = 524288;
|
|
316
|
-
let activeOutput = [];
|
|
317
|
-
let activeOutputChars = 0;
|
|
318
|
-
function appendOutput(value) {
|
|
319
|
-
if (activeOutputChars >= maxLogChars) return;
|
|
320
|
-
const kept = String(value).slice(0, maxLogChars - activeOutputChars);
|
|
321
|
-
activeOutput.push(kept);
|
|
322
|
-
activeOutputChars += kept.length;
|
|
323
|
-
}
|
|
324
|
-
const replConsole = Object.fromEntries(
|
|
325
|
-
["log", "info", "warn", "error", "debug"].map((method) => [
|
|
326
|
-
method,
|
|
327
|
-
(...args) => {
|
|
328
|
-
const formatted = formatWithOptions({ colors: false }, ...args);
|
|
329
|
-
appendOutput(formatted + "\n");
|
|
330
|
-
},
|
|
331
|
-
]),
|
|
332
|
-
);
|
|
333
|
-
const originalProcessKill = process.kill.bind(process);
|
|
334
|
-
function selfOnlyProcessKill(pid, signal) {
|
|
335
|
-
if (pid !== process.pid) {
|
|
336
|
-
const error = new Error("kill EPERM");
|
|
337
|
-
error.code = "EPERM";
|
|
338
|
-
error.errno = -1;
|
|
339
|
-
error.syscall = "kill";
|
|
340
|
-
throw error;
|
|
341
|
-
}
|
|
342
|
-
return originalProcessKill(pid, signal);
|
|
343
|
-
}
|
|
344
|
-
Object.defineProperty(process, "kill", {
|
|
345
|
-
value: selfOnlyProcessKill,
|
|
346
|
-
configurable: false,
|
|
347
|
-
enumerable: true,
|
|
348
|
-
writable: false,
|
|
349
|
-
});
|
|
350
|
-
Object.defineProperty(process, "_kill", {
|
|
351
|
-
value: selfOnlyProcessKill,
|
|
352
|
-
configurable: false,
|
|
353
|
-
enumerable: false,
|
|
354
|
-
writable: false,
|
|
355
|
-
});
|
|
356
|
-
const localRequire = createRequire(join(process.cwd(), "__ara_hands_node_repl__.js"));
|
|
357
|
-
const context = vm.createContext({
|
|
358
|
-
AbortController,
|
|
359
|
-
AbortSignal,
|
|
360
|
-
Buffer,
|
|
361
|
-
URL,
|
|
362
|
-
URLSearchParams,
|
|
363
|
-
clearImmediate,
|
|
364
|
-
clearInterval,
|
|
365
|
-
clearTimeout,
|
|
366
|
-
console: replConsole,
|
|
367
|
-
fetch,
|
|
368
|
-
process,
|
|
369
|
-
queueMicrotask,
|
|
370
|
-
require: localRequire,
|
|
371
|
-
setImmediate,
|
|
372
|
-
setInterval,
|
|
373
|
-
setTimeout,
|
|
374
|
-
structuredClone,
|
|
375
|
-
});
|
|
376
|
-
|
|
377
|
-
async function evaluate(code) {
|
|
378
|
-
activeOutput = [];
|
|
379
|
-
activeOutputChars = 0;
|
|
380
|
-
const originalStdoutWrite = process.stdout.write;
|
|
381
|
-
process.stdout.write = function(chunk, encoding, callback) {
|
|
382
|
-
const normalizedEncoding = typeof encoding === "string" ? encoding : undefined;
|
|
383
|
-
appendOutput(Buffer.isBuffer(chunk) ? chunk.toString(normalizedEncoding) : chunk);
|
|
384
|
-
const completed = typeof encoding === "function" ? encoding : callback;
|
|
385
|
-
if (typeof completed === "function") queueMicrotask(completed);
|
|
386
|
-
return true;
|
|
387
|
-
};
|
|
388
|
-
const script = new vm.Script(code, { filename: "reason-hands-node-repl.js" });
|
|
389
|
-
let timer;
|
|
390
|
-
try {
|
|
391
|
-
const value = script.runInContext(context, { timeout: timeoutMs });
|
|
392
|
-
const resolved = await Promise.race([
|
|
393
|
-
Promise.resolve(value),
|
|
394
|
-
new Promise((_, reject) => {
|
|
395
|
-
timer = setTimeout(
|
|
396
|
-
() => reject(new Error("REPL evaluation timed out after 105 seconds")),
|
|
397
|
-
timeoutMs,
|
|
398
|
-
);
|
|
399
|
-
}),
|
|
400
|
-
]);
|
|
401
|
-
const inspected = inspect(resolved, {
|
|
402
|
-
depth: 8,
|
|
403
|
-
colors: false,
|
|
404
|
-
maxArrayLength: 200,
|
|
405
|
-
maxStringLength: 16_000,
|
|
406
|
-
breakLength: 120,
|
|
407
|
-
});
|
|
408
|
-
const emitted = activeOutput.join("");
|
|
409
|
-
return emitted.length === 0
|
|
410
|
-
? inspected
|
|
411
|
-
: emitted + (emitted.endsWith("\n") ? "" : "\n") + inspected;
|
|
412
|
-
} finally {
|
|
413
|
-
if (timer) clearTimeout(timer);
|
|
414
|
-
process.stdout.write = originalStdoutWrite;
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
// Ordinary stdout is just an untrusted result stream, not a control authority.
|
|
419
|
-
// The parent must terminate and reap this process before accepting any result.
|
|
420
|
-
function respond(payload) { writeSync(1, JSON.stringify(payload) + "\n"); }
|
|
421
|
-
|
|
422
|
-
let queue = Promise.resolve();
|
|
423
|
-
const lines = createInterface({ input: process.stdin, crlfDelay: Infinity });
|
|
424
|
-
lines.on("line", (line) => {
|
|
425
|
-
queue = queue.then(async () => {
|
|
426
|
-
try {
|
|
427
|
-
const request = JSON.parse(line);
|
|
428
|
-
if (request.action === "probe") {
|
|
429
|
-
respond({ ok: true, output: "ARA_HANDS_REPL_READY" });
|
|
430
|
-
return;
|
|
431
|
-
}
|
|
432
|
-
if (request.action !== "evaluate" || typeof request.code !== "string") {
|
|
433
|
-
throw new Error("Invalid REPL request");
|
|
434
|
-
}
|
|
435
|
-
respond({ ok: true, output: await evaluate(request.code) });
|
|
436
|
-
} catch (error) {
|
|
437
|
-
respond({
|
|
438
|
-
ok: false,
|
|
439
|
-
error: error instanceof Error ? error.message : String(error),
|
|
440
|
-
stack: error instanceof Error ? error.stack : undefined,
|
|
441
|
-
});
|
|
442
|
-
}
|
|
443
|
-
}).catch((error) => respond({ ok: false, error: String(error) }));
|
|
444
|
-
});
|
|
445
|
-
`;function W7($=process.execPath,Q=process.versions.bun){return Q?"node":$}function o8($){try{X7($)}catch{}}function t9($,Q){$.end(`${JSON.stringify(Q)}
|
|
446
|
-
`)}function r8($){return JSON.stringify($)}function B7($){let Q=$7(_Z(z7(),"reason-node-repl-")),Z=_Z(Q,"node-repl.sb"),Y=["(version 1)","(deny default)",'(import "system.sb")',"(allow process*)","(deny network*)",`(allow file-read* ${["/System","/usr","/bin","/opt/homebrew","/usr/local"].map((z)=>`(subpath ${r8(z)})`).join(" ")})`,`(allow file-read* file-write* (subpath ${r8($.workRoot)}) (subpath ${r8(Q)}))`].join(`
|
|
447
|
-
`);Y7(Z,Y,{mode:384});let J=!1;return{command:"/usr/bin/sandbox-exec",args:["-f",Z,$.nodeExecutable,...$.nodeArgs],cwd:$.workRoot,env:{...$.environment,TMPDIR:Q},async cleanup(){if(J)return;J=!0,Z7(Q,{recursive:!0,force:!0})}}}async function L7($){let Q=Q7($.workRoot),Z=$.nodeExecutable??W7(),X=["--max-old-space-size=512","--permission",`--allow-fs-read=${Q}`,`--allow-fs-write=${Q}`,"-e",K7],Y=e9({home:Q,temporaryDirectory:Q}),J=$.platformName??G7();if(J==="linux")return{command:Z,args:X,cwd:Q,env:Y,async cleanup(){}};if(J==="darwin")return B7({nodeExecutable:Z,nodeArgs:X,workRoot:Q,environment:Y});throw Error("hands_node_repl_platform_unsupported")}async function O9($){let Q;try{await Promise.race([$,new Promise((Z,X)=>{Q=setTimeout(()=>X(Error("hands_node_repl_child_cleanup_timeout")),V7)})])}finally{clearTimeout(Q)}}async function IZ($){if($.executionMode!=="single-evaluation")throw Error(GZ);let Q=await L7($),Z;try{Z=t1(Q.command,Q.args,{cwd:Q.cwd,env:Q.env,stdio:["pipe","pipe","pipe"]})}catch(T){throw await Q.cleanup(),T}let X=new Promise((T)=>Z.once("close",()=>T())),Y;Z.once("error",(T)=>{Y=T});let J=!1,z=!1,K="";Z.stderr.setEncoding("utf8"),Z.stderr.on("data",(T)=>{K=`${K}${T}`.slice(-16384)});let G=Z.stdout,W,F=(T,D,b)=>{if(b)T.failure??=b;if(T.finishing)return;T.finishing=!0,z=!0,Z.kill("SIGKILL"),O9(X).then(()=>{if(T.failure)T.reject(T.failure);else T.resolve(D??{})},(y)=>T.reject(y))},B=()=>{if(z=!0,W)F(W,void 0,Error("hands_node_repl_state_lost"));else Z.kill("SIGKILL")},V="";G?.setEncoding("utf8"),G?.on("data",(T)=>{if(W?.finishing||z)return;if(V+=T,V.length>DZ){B();return}while(!0){let D=V.indexOf(`
|
|
448
|
-
`);if(D===-1)return;let b=V.slice(0,D);V=V.slice(D+1);let y=W;if(!y){B();return}try{let q=JSON.parse(b);if(y.action==="probe")y.resolve(q);else{F(y,q);return}}catch{F(y,void 0,Error("invalid_hands_node_repl_child_response"));return}}});let U=(T)=>{let D=K.trim(),b=T??Error(D?`hands_node_repl_child_exited:${D}`:"hands_node_repl_child_exited");if(z=!0,W&&!W.finishing)F(W,void 0,b)};Z.once("error",U),Z.once("close",()=>U()),Z.stdin.on("error",U);let H=(T)=>new Promise((D,b)=>{if(J||z||Z.exitCode!==null||Z.signalCode!==null){b(Error(z?"hands_node_repl_state_lost":"hands_node_repl_stopped"));return}let y=setTimeout(B,T.action==="probe"?1e4:Math.max(1,Math.min($.evaluationTimeoutMs??t8-1000,t8-1000))),q={action:T.action,finishing:!1,resolve(k){if(W===q)W=void 0;clearTimeout(y),D(k)},reject(k){if(W===q)W=void 0;clearTimeout(y),b(k)}};W=q,Z.stdin.write(`${JSON.stringify(T)}
|
|
449
|
-
`,(k)=>{if(!k)return;F(q,void 0,k)})});try{if(!G){if(Z.pid===void 0)await O9(X);throw Y??Error("hands_node_repl_control_pipe_missing")}let T=await H({action:"probe"});if(T.ok!==!0||T.output!=="ARA_HANDS_REPL_READY")throw Error("hands_node_repl_probe_failed")}catch(T){J=!0,Z.kill("SIGKILL");try{await O9(X)}finally{await Q.cleanup()}throw T}let L=Promise.resolve(),j=new Set;o8($.socketPath);let O=J7.createServer((T)=>{j.add(T),T.once("close",()=>j.delete(T)),T.setEncoding("utf8");let D="",b=!1,y=!1;T.once("close",()=>{if(y)B()}),T.on("error",()=>T.destroy()),T.on("data",(q)=>{if(b)return;if(D+=q,D.length>DZ){b=!0,t9(T,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let k=D.indexOf(`
|
|
450
|
-
`);if(k===-1)return;b=!0;let g=D.slice(0,k);L=L.then(async()=>{if(T.destroyed)return;try{let x=JSON.parse(g);if(x.action!=="evaluate"||typeof x.code!=="string")throw Error("Invalid REPL request");y=!0;let N=await H({action:"evaluate",code:x.code});if(y=!1,N.ok!==!0||typeof N.output!=="string")throw Error(typeof N.error==="string"?N.error:"hands_node_repl_failed");t9(T,{ok:!0,output:N.output})}catch(x){y=!1,t9(T,{ok:!1,error:x instanceof Error?x.message:String(x),stack:x instanceof Error?x.stack:void 0})}}).catch((x)=>{t9(T,{ok:!1,error:x instanceof Error?x.message:String(x)})})})});try{await new Promise((T,D)=>{O.once("error",D),O.listen($.socketPath,()=>{O.off("error",D);try{e1($.socketPath,384),T()}catch(b){O.close(()=>D(b))}})})}catch(T){J=!0,Z.kill("SIGKILL");try{await O9(X)}finally{await Q.cleanup(),o8($.socketPath)}throw T}return{socketPath:$.socketPath,async stop(){if(J)return;J=!0;let T=new Promise((D)=>O.close(()=>D()));for(let D of j)D.destroy();await T,L.catch(()=>{return}),B();try{await O9(X)}finally{await Q.cleanup(),o8($.socketPath)}}}}var e8=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var AZ="/workspace",PZ="/var/lib/reason/sessions",F7="/var/lib/reason/session-controls";function xZ($){let Q=`${PZ}/`;if(!$.startsWith(Q))return null;let Z=$.slice(Q.length);if(!e8.test(Z)||Z!==Z.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${F7}/${Z}/job.env`}function H7($){if(!e8.test($))throw Error("personal_computer_invalid_identity");return $.toLowerCase()}function $8($){let Q=H7($);return{runtimeRoot:`${PZ}/${Q}`,workspaceRoot:`${AZ}/sessions/${Q}`,sharedRoot:AZ}}var EZ="/root/.ara/cloud-browser/repl.sock";function $$($){return $==="compute"}function SZ($,Q,Z="linux"){if($)$8($);if(Z!=="linux")throw Error("cloud_browser_os_invalid");if(Q!==void 0&&(!$||!/^[1-9][0-9]{0,18}$/.test(Q)))throw Error("cloud_browser_generation_invalid");let X=$?`/var/lib/reason/browsers/${$.toLowerCase()}`:"/root/.ara/cloud-browser",Y=$?`${X}/${Q?`g${Q}`:"current"}`:X,J=$?`/root/.b/${$.toLowerCase().replaceAll("-","")}`:X;return{temporarySessionDirectory:J,temporaryDirectory:$?`${J}/${Q??"current"}`:`${Y}/tmp`,directory:Y,sessionDirectory:X,config:`${Y}/config.json`,status:`${Y}/status.json`,socket:`${Y}/repl.sock`,bundle:`${Y}/driver.mjs`,processName:$?`ara-browser-${$.toLowerCase()}${Q?`-${Q}`:""}`:"ara-cloud-browser"}}var Q$="browser_egress",RZ=KQ,E7=45000,S7=b9+1500,E0=/^[A-Za-z0-9._:-]{1,160}$/,R7="/run/ara-hands";function w7($,Q,Z=pZ()){if($==="darwin")return{temporaryRoot:Z,prepareRoot:!1,sessionMode:448};return{temporaryRoot:Q??R7,prepareRoot:!0,sessionMode:457}}function wZ($,Q=process.platform,Z=process.geteuid?.()){return $===!0&&Q==="linux"&&Z===0}function Y$($=mZ(),Q=process.platform,Z=process.geteuid?.()){return $&&Q==="linux"&&Z===0?{uid:$.uid,gid:$.gid,home:$.home,username:$.username}:null}function k7($=Y$(),Q=XZ){return $&&Q()?d8:null}function S5($=Y$(),Q=process.platform,Z=process.geteuid?.()){return Q!=="linux"||Z!==0||$!==null}function R5($=process.platform,Q=process.geteuid?.()){return $!=="linux"||Q!==0}function b7($,Q){if(!Q&&($??"linux")==="linux")return EZ;return SZ(Q,void 0,$??"linux").socket}function V9($){return Boolean($)&&typeof $==="object"&&!Array.isArray($)}function uZ($){let Q=$.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q.endsWith(".localhost")||Q==="::1"||Q==="0:0:0:0:0:0:0:1"||Q==="0.0.0.0"||Q.startsWith("127.")}class sZ extends M{expiryDiagnostic;constructor($){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=$}}function f7($){return V9($)&&Object.keys($).every((Q)=>Q==="source_path"||Q==="branch")&&($.source_path===void 0||h0($.source_path))&&typeof $.branch==="string"&&u8.test($.branch)}function m7($,Q,Z){let X=Q===void 0?Date.now():Q,Y=["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"],J=new Set([...Y,"workspace_id","legacy_workspace_id",c0,d0,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",h,Q$,J9,F0,p0,x0]),z=V9($)?$:null,K=z?.[Q$],G=z?.[J9],W=z?.[p0],F=K===void 0||(z?.[h]===P0||W===_9&&z?.[h]===void 0)&&V9(K)&&Object.keys(K).every((O)=>O==="mode"||O==="allowed_domains")&&K.mode==="enforce"&&Array.isArray(K.allowed_domains)&&K.allowed_domains.length<=256&&K.allowed_domains.every((O)=>typeof O==="string"&&R8(O));if(!V9($)||Y.some((O)=>!(O in $))||Object.keys($).some((O)=>!J.has(O))||!F||W!==void 0&&W!==_9||z?.[x0]!==void 0&&z[x0]!==X8||z?.personal_workspace!==void 0&&(z.personal_workspace!==!0||z[h]!==P0)||z?.cloud_browser!==void 0&&(z.cloud_browser!==!0||z[h]!==P0)||z?.sandbox_provider!==void 0&&!$$(z.sandbox_provider)||z?.sandbox_os!==void 0&&z.sandbox_os!=="linux"||G!==void 0&&(z?.[h]!==Y9||!p8(G))||h in $&&$[h]!==P0&&$[h]!==Y9&&$[h]!==W0||$.workspace_path!==void 0&&(!h0($.workspace_path)||$[h]!==W0)||$.workspace_worktree!==void 0&&($.workspace_path===void 0||!f7($.workspace_worktree))||typeof $.relay_url!=="string"||typeof $.session_id!=="string"||!E0.test($.session_id)||$.workspace_id!==void 0&&(typeof $.workspace_id!=="string"||!E0.test($.workspace_id))||$.legacy_workspace_id!==void 0&&(typeof $.legacy_workspace_id!=="string"||!E0.test($.legacy_workspace_id))||$[c0]!==void 0&&($[c0]!==Y8||(h in $))||$[d0]!==void 0&&($[d0]!==J8||(h in $))||$[F0]!==void 0&&(typeof $[F0]!=="string"||!E0.test($[F0]))||typeof $.environment_id!=="string"||!E0.test($.environment_id)||typeof $.expires_at!=="string"||$.policy_mode!=="full_access"||$.policy_version!==1||$.hands_protocol_version!==W9||$.hands_worker_version!==B9||$.hands_worker_artifact_sha256!==G0||!jZ($.hands_worker_entrypoint)||!I0($.target_generation)||!N0($.target_fence_id))throw new M("invalid_hands_payload","Reason Hands connection payload is invalid.");let B;try{B=new URL($.relay_url)}catch{throw new M("invalid_hands_relay","Reason Hands relay URL is invalid.")}if((uZ(B.hostname)?B.protocol!=="ws:":B.protocol!=="wss:")||B.username||B.password||B.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(B.pathname))throw new M("invalid_hands_relay","Reason Hands relay URL is not allowed.");let U=Date.parse($.expires_at),H=Number.isNaN(U)?"parse":new Date(U).toISOString()!==$.expires_at?"noncanonical":U<=X?"expired":U-X>RZ?"over_cap":"accepted",L={version:1,outcome:H,clock_source:Q===void 0?"date_now":"injected",validation_now_ms:t0(X),expiry_ms:t0(U),remaining_ms:Number.isSafeInteger(U-X)?U-X:null,maximum_lifetime_ms:RZ,cli_artifact:CZ()};if(H!=="accepted")throw new sZ(L);try{Z?.(L)}catch{}let j=$.environment_binding===void 0?void 0:P8.safeParse($.environment_binding);if(j&&!j.success)throw new M("invalid_hands_request","Reason Hands environment binding is invalid.");return{...$.cloud_browser===!0?{cloud_browser:!0}:{},...$$($.sandbox_provider)?{sandbox_provider:$.sandbox_provider}:{},...$.sandbox_os==="linux"?{sandbox_os:$.sandbox_os}:{},...$.personal_workspace===!0?{personal_workspace:!0}:{},relay_url:B.toString(),...j?.success?{environment_binding:j.data}:{},session_id:$.session_id,...$.workspace_id===void 0?{}:{workspace_id:$.workspace_id},...$.legacy_workspace_id===void 0?{}:{legacy_workspace_id:$.legacy_workspace_id},...$[c0]===Y8?{[c0]:Y8}:{},...$[d0]===J8?{[d0]:J8}:{},...typeof $[F0]==="string"?{[F0]:$[F0]}:{},...$[p0]===_9?{[p0]:_9}:{},...$[x0]===X8?{[x0]:X8}:{},...typeof $.workspace_path==="string"?{workspace_path:$.workspace_path}:{},...V9($.workspace_worktree)?{workspace_worktree:{...typeof $.workspace_worktree.source_path==="string"?{source_path:$.workspace_worktree.source_path}:{},branch:String($.workspace_worktree.branch)}}:{},environment_id:$.environment_id,expires_at:$.expires_at,policy_mode:"full_access",policy_version:1,hands_protocol_version:W9,hands_worker_version:B9,hands_worker_artifact_sha256:G0,hands_worker_entrypoint:v0,target_generation:$.target_generation,target_fence_id:$.target_fence_id,...h in $?{[h]:$[h]}:{},...G===void 0?{}:{[J9]:G},...K===void 0?{}:{[Q$]:{mode:"enforce",allowed_domains:[...new Set(K.allowed_domains)].sort()}}}}function g7(){let $=new Map;return{acquire(Q,Z){if($.has(Q))return null;let X=[...$.values()],Y=(z)=>Z.group!==void 0&&z.group===Z.group;if(Z.exclusive?!X.every(Y):X.some((z)=>z.exclusive))return null;if(Z.limit!==void 0&&!X.some(Y)&&new Set(X.map((z,K)=>z.group??K)).size>=Z.limit)return null;$.set(Q,Z);let J=!1;return()=>{if(J)return;J=!0,$.delete(Q)}},activeOwners:()=>[...$.keys()]}}var y7=g7();function h7($,Q){L9($,{recursive:!0,mode:448});let Z=c($),X=()=>new M("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let z of Q.split("/")){let K=n(Z,z);try{let W=i(K);if(W.isSymbolicLink()||!W.isDirectory())throw X()}catch(W){if(!(W&&typeof W==="object"&&("code"in W)&&W.code==="ENOENT"))throw W;try{L9(K,{mode:448})}catch(F){if(!(F&&typeof F==="object"&&("code"in F)&&F.code==="EEXIST"))throw F}}let G=i(K);if(G.isSymbolicLink()||!G.isDirectory()||c(K)!==K)throw X();Z=K}if(process.platform==="win32"){let z=i(Z);if(z.isSymbolicLink()||!z.isDirectory()||c(Z)!==Z||!U0(c($),Z))throw X();return Z}let Y=i(Z),J=O7(Z,K9.O_RDONLY|K9.O_DIRECTORY|K9.O_NOFOLLOW);try{let z=q7(J);if(!z.isDirectory()||z.dev!==Y.dev||z.ino!==Y.ino||c(Z)!==Z)throw X();T7(J,448)}finally{C7(J)}return Z}function v7($,Q=fZ(),Z,X,Y){if(!E0.test($)||Z!==void 0&&!E0.test(Z))throw new M("invalid_hands_workspace","Reason Hands run identity is invalid.");let J=X0(f0({kind:"managed",workspaceId:$,...X?{base:X}:{},...Y?{layout:Y}:{}})),z=h7(Q,X0(J)),K=n(z,P7(J)),G=!1;try{let V=i(K);if(G=!0,V.isSymbolicLink())throw new M("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!V.isDirectory())throw new M("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(V){if(V instanceof M||!(V&&typeof V==="object"&&("code"in V)&&V.code==="ENOENT"))throw V}if(Y&&!G)try{let V=n(c(Q),X0(f0({kind:"managed",workspaceId:$,...X?{base:X}:{}}))),U=i(V);if(!U.isSymbolicLink()&&U.isDirectory()&&c(V)===V)Q8(V,K),G=!0}catch{}if(Z&&Z!==$){let V=n(z,Z);try{let U=i(V);if(U.isSymbolicLink()||!U.isDirectory())throw new M("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let H=c(V);if(X0(H)!==z)throw new M("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let L=null;if(G){for(let j=1;j<=1000&&!L;j++){let O=n(z,j===1?`.${$}.previous`:`.${$}.previous.${j}`);try{i(O)}catch(T){if(!(T&&typeof T==="object"&&("code"in T)&&T.code==="ENOENT"))throw T;L=O}}if(!L)throw new M("invalid_hands_workspace","Reason Hands has too many previous workspace backups.");Q8(K,L)}try{Q8(H,K)}catch(j){if(L)Q8(L,K);throw j}G=!0}catch(U){if(U instanceof M||!(U&&typeof U==="object"&&("code"in U)&&U.code==="ENOENT"))throw U}}L9(K,{recursive:!0,mode:448}),D9(K,448);let W=c(K);if(X0(W)!==z)throw new M("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let F=n(W,"repo");try{let V=i(F);if(V.isSymbolicLink()||!V.isDirectory())throw new M("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(V){if(V instanceof M||!(V&&typeof V==="object"&&("code"in V)&&V.code==="ENOENT"))throw V}L9(F,{recursive:!0,mode:448}),D9(F,448);let B=c(F);if(X0(B)!==W)throw new M("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:W,repoPath:B}}function nZ($){let Q=null;try{Q=i($)}catch{}if(!Q||Q.isSymbolicLink()||!Q.isDirectory()||Q.uid!==0||Q.gid!==0||(Q.mode&4095)!==493)throw new M("cloud_workspace_root_invalid","This cloud Session's workspace root is not root's 0755 directory, so Reason Hands cannot use it.")}function c7($,Q,Z=process.geteuid?.(),X=process.platform){if(X==="win32")return"unknown";let Y;try{if(Y=l0($),!Y.isDirectory())return"unready";j7($,K9.R_OK|K9.W_OK|K9.X_OK)}catch{return"unready"}try{if(i($).isSymbolicLink()||c($)!==$)return"unknown"}catch{return"unknown"}if(Z!==0)return"checked";if(Q===null||Y.uid!==Q.uid||(Y.mode&448)!==448)return"unknown";for(let J=X0($);;J=X0(J)){let z;try{z=l0(J)}catch{return"unknown"}if(!(z.uid===Q.uid?(z.mode&64)!==0:z.gid===Q.gid?(z.mode&8)!==0:(z.mode&1)!==0))return"unknown";if(J===X0(J))return"checked"}}function d7($,Q){let Z="/";for(let X of["",...$.split("/"),...Q.split("/")].filter((Y,J)=>J===0||Y)){if(X)Z=n(Z,X);let Y;try{Y=i(Z)}catch{return null}if(Y.uid!==0)return Y.uid;if((Y.mode&2)!==0&&(Y.mode&512)===0&&!Y.isSymbolicLink())return-1;if(Y.isSymbolicLink()||!Y.isDirectory())return null}return null}function p7($,Q,Z,X=process.geteuid?.(),Y){if(!E0.test(Q))return null;let J,z;try{J=c($),z=X0(f0({kind:"managed",workspaceId:Q,...Z?{base:Z}:{},...Y?{layout:Y}:{}}))}catch{return null}let K=n(J,z),G=X$(K)!==null,W=(H)=>new M("cloud_workspace_root_invalid",H),F;if(X===0){let H=d7(J,z);if(H===null)return null;if(!G)throw new M("invalid_hands_workspace","As root, Reason Hands never prepares a workspace in folders another user owns.");F=H}else{if(!G)return null;let H,L;try{H=i(X0(K)),L=i(K)}catch{return null}if(H.isSymbolicLink()||!H.isDirectory()||H.uid===0||L.uid!==0)return null;F=H.uid}let B=J;for(let H of z.split("/")){let L=n(B,H),j=!1;try{let O=i(L);j=!O.isSymbolicLink()&&O.isDirectory()&&c(L)===L}catch{}if(!j)throw W("This cloud Session's workspace root is missing or is not a real directory.");B=L}nZ(K);let V;try{V=iZ(K)}catch(H){if(H instanceof M)throw H;throw W("This cloud Session's workspace root changed while Reason Hands checked it.")}let U=null;try{U=l0(V.repoPath).uid}catch{}if(U!==F)throw new M("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return V}function iZ($,Q=!1){let Z=c($),X=n(Z,"repo"),Y;try{Y=i(X)}catch{throw new M("invalid_hands_workspace","Reason Hands repository is missing from the granted root.")}if(Q){if(!/^\/var\/lib\/reason\/sessions\/[0-9a-f-]{36}$/.test(Z))throw new M("invalid_hands_workspace","Personal runtime identity is invalid.");if($8(Z.slice(Z.lastIndexOf("/")+1)).runtimeRoot!==Z)throw new M("invalid_hands_workspace","Personal runtime identity is invalid.");let K=c("/workspace"),G=c(X);if(K!=="/workspace"||!l0(G).isDirectory()||!G.startsWith("/workspace/"))throw new M("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:Z,repoPath:G}}let J=YZ(Z);if(J&&Y.isSymbolicLink()){let K=c(X);if(K!==c(J)||!l0(K).isDirectory())throw new M("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:Z,repoPath:K}}if(Y.isSymbolicLink()||!Y.isDirectory())throw new M("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let z=c(X);if(X0(z)!==Z)throw new M("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:Z,repoPath:z}}function J$($,Q,Z){if(Q!==void 0&&!h0(Q))throw new M("invalid_hands_workspace",`Reason Hands ${Z} is invalid.`);let X=lZ($,Q??".");if(!U0($,X))throw new M("invalid_hands_workspace",`Reason Hands ${Z} escapes its granted root.`);return X}function aZ($,Q,Z){if(l8(Q)){let X=c(Z);return{anchor:X,target:lZ(X,Q),boundary:n(X,G9)}}return{anchor:$,target:J$($,Q,"folder"),boundary:$}}function l7($,Q){if(!U0($,Q))throw new M("invalid_hands_workspace","Reason Hands folder escapes its granted root.");let Z=$;for(let X of Q.slice($.length).split(x7).filter(Boolean)){Z=n(Z,X);let Y=null;try{Y=i(Z)}catch(J){if(J.code!=="ENOENT")throw J}if(!Y)L9(Z,{mode:448});else if(Y.isSymbolicLink()||!Y.isDirectory())throw new M("invalid_hands_workspace","Reason Hands folder must be made of real directories.")}}function oZ($,Q){let Z=c(J$($,Q.source_path,"repository"));if(!U0($,Z)||!l0(Z).isDirectory())throw new M("invalid_hands_workspace","Reason Hands repository must be a folder in its granted root.");return Z}async function u7($,Q,Z,X=G8()){try{let Y=c($);if(Z$(aZ(Y,Q,X).target))return;return await KZ(oZ(Y,Z))??void 0}catch{return}}function s7($,Q,Z,X,Y=n7,J=G8()){let z=c($),{target:K,boundary:G,anchor:W}=aZ(z,Q,J);if(Z&&!Z$(K)){let V=oZ(z,Z);l7(W,X0(K));let U=["-c","core.hooksPath=/dev/null","-C",V];if(X)Y([...U,"update-ref","--create-reflog","-m",X.note,`refs/heads/${Z.branch}`,X.commit,""]);let H=X?Y([...U,"worktree","add",K,Z.branch]):Y([...U,"worktree","add","-b",Z.branch,K]);if(!X&&H.status!==0&&/already exists/.test(H.stderr)&&!Z$(K))H=Y([...U,"worktree","add",K,Z.branch]);if(H.status!==0)throw new M(/not a git repository/i.test(H.stderr)?"workspace_not_git_repository":"workspace_worktree_failed","Reason could not create this Session's git worktree.")}let F;try{F=i(K)}catch{throw new M("workspace_folder_missing","This Session's folder no longer exists.")}let B=c(K);if(F.isSymbolicLink()&&!U0(G,B))throw new M("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!l0(B).isDirectory()||!U0(G,B))throw new M("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(O0(B))throw new M("protected_path","Credential and secret folders are unavailable to Sessions.");return B}function n7($){let Q=gZ();if(!Q)return{status:null,stderr:"git was not found. Install Git for Windows (https://git-scm.com/download/win)."};let Z=M7(Q,$,{encoding:"utf8",timeout:60000,env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:["ignore","ignore","pipe"]});return{status:Z.status,stderr:Z.stderr??""}}function rZ($){return xZ($)??X$($)?.jobEnv??n($,"job.env")}function i7($,Q){let Z=rZ($),X=i(Z);if(X.isSymbolicLink()||!X.isFile())throw new M("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");_7(Z,Q),D9(Q,384)}function a7($){if($.workspaceMode===W0&&$.workspacePath!==void 0){let z=$.home??G8(),K=s7($.grantedRoot,$.workspacePath,$.workspaceWorktree,$.workspaceWorktreeStart,void 0,z);if($.workspaceWorktree&&$.deviceId)FZ(z,$.workspacePath,$.deviceId);return{workRoot:K,repoPath:K,workspace:{kind:"root",path:$.workspacePath},jobEnvPath:n($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if($.workspaceMode===P0)return{...iZ($.grantedRoot,$.personalWorkspace),workspace:{kind:"root"},jobEnvPath:n($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if($.workspaceMode===Y9||$.workspaceMode===W0){let z=i($.grantedRoot);if(z.isSymbolicLink()||!z.isDirectory())throw new M("invalid_hands_workspace","Reason Hands root must be a real directory.");let K=c($.grantedRoot);return{workRoot:K,repoPath:K,workspace:{kind:"root"},jobEnvPath:n($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}let Q=$.workspaceId??$.runId,Z={kind:"managed",workspaceId:Q,...$.workspaceBase?{base:$.workspaceBase}:{},...$.workspaceLayout?{layout:$.workspaceLayout}:{}},X=m9($.grantedRoot,Z,$.home).anchor,Y=p7(X,Q,$.workspaceBase,void 0,$.workspaceLayout);if(Y)return{...Y,workspace:Z,jobEnvPath:n($.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1,cloudSessionRoot:!0};let J=v7(Q,X,$.legacyWorkspaceId,$.workspaceBase,$.workspaceLayout);return{...J,workspace:Z,jobEnvPath:n($.temporaryDirectory,"job.env"),workspacePoolPath:X0(J.workRoot),managedWorkspace:!0}}function o7($){let{command:Q,prefix:Z}=x8($.executablePath,$.sourceEntrypoint),X=e9({home:A7(),temporaryDirectory:$.temporaryDirectory,path:$.path});if(X.REASON_DEVICE_ROOT=X.ARA_DEVICE_ROOT=$.grantedRoot,X.REASON_HANDS_WORKSPACE=X.ARA_HANDS_WORKSPACE=$.workRoot,X.REASON_HANDS_REPO=X.ARA_HANDS_REPO=$.root,$.workspacePoolPath)X.REASON_HANDS_WORKSPACE_POOL=X.ARA_HANDS_WORKSPACE_POOL=$.workspacePoolPath;return{command:Q,args:[...Z,"__device","__hands-worker","--config",$.configPath],options:{cwd:$.root,env:X,shell:!1,stdio:[r7,"ignore","pipe"]}}}var r7=process.platform==="win32"?"pipe":"ignore";function kZ($,Q){if(process.platform!=="win32")return $.kill(Q);if(Q==="SIGTERM")$.stdin?.end();else if($.pid)yZ($.pid);return!0}function t7($,Q){let Z="",X=!1,Y=Date.now(),J=0,z=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled","permission_denied"].map((B)=>`hands.worker.${B}`)),K=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((B)=>["bash","read","write","edit"].map((V)=>`${B}:${V}`))]),G=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],W=["peerGeneration","socketState","closeCode"],F=new Set(["event","reason","launchId",...G,...W]);return(B)=>{for(let V of B.toString().split(/(?<=\n)/)){let U=V.endsWith(`
|
|
451
|
-
`);if(!X&&Z.length+V.length<=2048)Z+=V;else X=!0;if(!U)continue;let H=Z;if(Z="",X){X=!1;continue}try{let L=JSON.parse(H);if(!L||typeof L!=="object"||Array.isArray(L)||Object.keys(L).some((j)=>!F.has(j))||!z.has(L.event)||!K.has(L.reason)||L.event==="hands.worker.permission_denied"!==(typeof L.reason==="string"&&L.reason.includes(":"))||L.launchId!==$||G.some((j)=>!Number.isSafeInteger(L[j])||L[j]<0)||W.some((j)=>L[j]!==null&&(!Number.isSafeInteger(L[j])||L[j]<0)))continue;if(Date.now()-Y>=60000)Y=Date.now(),J=0;if(J>=122)continue;J+=1,Q(L)}catch{}}}}async function e7($){let Q=$.now()+$.timeoutMs;while($.now()<Q){if($.signal.aborted)throw new M("cancelled","Reason Hands start was cancelled.");if($.spawnFailed?.()||$.child.exitCode!==null||$.child.signalCode!==null)throw new M("hands_worker_exited","Reason Hands exited before ready.");let Z=r9($.path,{pid:$.child.pid??-1,launchId:$.launchId,workerVersion:B9,protocolVersion:W9,workerArtifactSha256:G0,workerEntrypoint:v0});if(Z?.targetGeneration===$.targetGeneration&&Z.fenceId===$.fenceId)return Z;await new Promise((X)=>setTimeout(X,10))}throw new M("hands_ready_timeout","Reason Hands did not become ready.")}function $6($){let Q=$.exitCode===null?void 0:cZ[$.exitCode];return{exit_code:$.exitCode,exit_signal:$.signalCode,...Q?{exit_reason:Q}:{}}}async function Q6($,Q){let Z=()=>$.exitCode===0&&$.signalCode===null;if($.exitCode!==null||$.signalCode!==null)return Z()?"stopped":"already_exited";let X=new Promise((z)=>$.once("exit",()=>z()));try{if(!kZ($,"SIGTERM"))return Z()?"stopped":"unobserved"}catch{return Z()?"stopped":"unobserved"}if(await bZ(X,Q))return Z()?"stopped":"unobserved";try{kZ($,"SIGKILL")}catch{}return await bZ(X,Q)?"forced":"unobserved"}async function bZ($,Q){let Z;try{return await Promise.race([$.then(()=>!0),new Promise((X)=>{Z=setTimeout(()=>X(!1),Q)})])}finally{clearTimeout(Z)}}function Z6($){return new Promise((Q)=>{let Z=!1,X=(K)=>{if(Z)return;Z=!0,clearTimeout(z),$.signal.removeEventListener("abort",Y),$.child.off("exit",J),Q(K)},Y=()=>X("cancelled"),J=()=>X("exited"),z=setTimeout(()=>X("expired"),Math.max(0,$.expiresAt-$.now()));if($.signal.addEventListener("abort",Y,{once:!0}),$.child.once("exit",J),$.signal.aborted)Y();else if($.child.exitCode!==null||$.child.signalCode!==null)J()})}var tZ=vZ();function X6($,Q){if(!($ instanceof Error)||$ instanceof M)return!1;let Z=["hands_browser_driver_missing","hands_browser_driver_version_mismatch","hands_browser_executable_missing","hands_browser_unsupported_platform","hands_browser_unavailable"].includes($.message),X=["ENOENT","EACCES","EPERM"].includes($.code??"");if(!Z&&!X)return!1;try{return i(Q),!1}catch(Y){return V9(Y)&&Y.code==="ENOENT"}}function Y6($){return $.sandbox_provider==="compute"&&!$.cloud_browser&&$[h]===P0}function J6($,Q,Z){return $===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:V0($,Q),...Z===void 0?{}:{worker_prespawned:Z}}}}function w5(){tZ().catch(()=>{return}),Q9().catch(()=>{return})}async function k5($,Q={}){let Z=Q.logDiagnostic??((N)=>console.warn(N)),X=new Map,Y=(N)=>{let C=Date.now();X.set(N,C);try{Z(JSON.stringify({event:"sandbox.hands_startup",stage:N,timestampMs:C}))}catch{}};Y("entered");let J=$.claimEnvironment;$.claimEnvironment=void 0;let z=Q.now??Date.now,K,G=m7($.payload,Q.now?.(),(N)=>{K=N});if($.managedPty&&($.managedPty.version!==1||!$.headless||!$.runtimeDirectory||![void 0,!0].includes($.managedPty.startupVerified)||!$.deviceIdentity||!$.claimOwner||$.claimOwner.device_id!==$.deviceIdentity.deviceId||!G.environment_binding||!["darwin","linux","win32"].includes(process.platform)))throw new M("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let W=async(N)=>{let C;try{await Promise.race([N,new Promise((A,f)=>{C=setTimeout(()=>f(new M("hands_event_delivery_unavailable","Hands event delivery did not settle within its deadline.")),Math.max(1,Math.min(Q.eventDeliveryTimeoutMs??5000,5000)))})])}finally{clearTimeout(C)}},F=async(N,C)=>W($.emitEvent(N,C));if($.headless&&(G.cloud_browser===!0||$.managedBrowser!==void 0||G[J9]!==void 0||G[h]!==void 0&&G[h]!==W0))throw new M("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let B=Y$(),V=G[x0]===void 0?null:k7(B);if(G[x0]!==void 0&&(V===null||!$.headless||!wZ($.hostExecution,Q.hostIdentity?.platform,Q.hostIdentity?.euid)))throw new M("hands_model_jobs_egress_unavailable","This worker cannot hold its jobs to the guest egress guard; the Hands did not start.");if(G[p0]!==void 0&&!($.headless&&wZ($.hostExecution,Q.hostIdentity?.platform,Q.hostIdentity?.euid)))throw new M("hands_confinement_unavailable","Confined Hands need a root Linux worker in host mode.");if(G.cloud_browser&&process.platform!=="linux")throw new M("cloud_browser_target_invalid","Cloud browser is available only on a cloud machine.");let U=`${$.operationId}:${$.attemptId}`,H=G[h]===Y9,L=$.headless||process.platform==="darwin"&&$.managedBrowser===void 0&&!G.cloud_browser&&!G.browser_egress&&(G[h]===void 0||G[h]===W0)||Y6(G),j=H?G[J9]??"bash":null,O=j?zZ(j):null;if(O)throw new M(O,"Persistent Node REPL execution is unavailable; this benchmark profile cannot start.");let T=G[h],D=$.headless===!0&&$.ownComputer!==!0?$.handsSlots??1:void 0,b=(Q.slot??y7).acquire(U,{exclusive:D===1||T!==void 0&&T!==W0,...D!==void 0&&D>1?{limit:D}:{},...$.headless===!0&&G[F0]!==void 0?{group:G[F0]}:{}});if(!b)throw new M("hands_slot_busy",D!==void 0&&D>1?`This Reason worker runs at most ${D} sessions at a time.`:"This Reason Device runs one session at a time.");let y=$.headless===!0?dZ($.runId):null,q=null,k=null,g,x;try{Y("browser_resolution");let N=$.headless&&Q.browserExecutablePath===void 0?await Q9():null,C=H||G.cloud_browser?null:Q.browserExecutablePath===void 0?$.headless?N?.status==="resolved"?N.executablePath:null:await $Z(void 0,process.platform,$.managedBrowser):Q.browserExecutablePath;if(!H&&!G.cloud_browser&&!L&&!C)throw new M("hands_browser_unavailable","Reason Hands requires Chrome, Edge, Brave, Chromium, or a Playwright Chromium install.");Y("path_resolution");let A;try{A=await(Q.resolvePathEnvironment??tZ)()}catch{A={path:hZ(),source:"fallback"}}if(Y("workspace_setup"),process.platform==="darwin"){let v=G[h]===W0&&G.workspace_path!==void 0?J$($.root,G.workspace_worktree?G.workspace_worktree.source_path:G.workspace_path,"folder"):null;for(let r of new Set([$.root,...v?[v]:[]]))await _Q(r)}let S=G[h]===P0||G[h]===Y9?w7(process.platform,Q.sandboxRuntimeRoot):null,R=$.headless&&$.runtimeDirectory?$.runtimeDirectory:S?S.temporaryRoot:pZ();if(q="private_runtime",$.headless&&$.runtimeDirectory){o9(R);let v=c($.root);if(!N9(v,R))throw new M("invalid_hands_workspace","Private worker state must not overlap the granted workspace.")}if($.headless&&$.runtimeDirectory&&(!$.deviceIdentity||!G.environment_binding))throw new M("environment_unavailable","Headless Hands requires a server-bound private environment.");if(q="runtime_root",S?.prepareRoot)L9(R,{recursive:!0,mode:457}),D9(R,457);q="temporary_directory";let _=c(D7(n(R,"reason-hands-session-")));k=_,D9(_,S?.sessionMode??448);let w=n(_,"hands-config.json"),d=n(_,"hands-ready.json"),p=U7(),$0=G.target_fence_id;if($.workspaceGrant){q="workspace_grant",Y("workspace_grant_wait");let v=$.workspaceGrant;await new Promise((r,k0)=>{let n0=()=>k0(new M("cancelled","Reason Hands was cancelled."));if($.signal.aborted){n0();return}$.signal.addEventListener("abort",n0,{once:!0}),v.then(r,k0).finally(()=>$.signal.removeEventListener("abort",n0))})}q="granted_root";let m=c($.root);q="workspace_layout";let l=G[h]===W0&&G.workspace_path!==void 0&&G.workspace_worktree?await u7(m,G.workspace_path,G.workspace_worktree):void 0,{workRoot:u,repoPath:a,jobEnvPath:H0,workspacePoolPath:z8,managedWorkspace:q0,workspace:u0,cloudSessionRoot:I9}=a7({grantedRoot:m,personalWorkspace:G.personal_workspace===!0,runId:$.runId,workspaceId:G.workspace_id,legacyWorkspaceId:G.legacy_workspace_id,workspaceBase:G[c0],workspaceLayout:G[d0],temporaryDirectory:_,workspaceMode:G[h],applicationSupportPath:Q.applicationSupportPath,...G.workspace_path===void 0?{}:{workspacePath:G.workspace_path},...G.workspace_worktree?{workspaceWorktree:G.workspace_worktree}:{},...l?{workspaceWorktreeStart:l}:{},...$.deviceIdentity?{deviceId:$.deviceIdentity.deviceId}:{}}),S0="ara_device_wss";q="jobs";let o=$.headless&&$.runtimeDirectory?ZQ({runtimeDirectory:$.runtimeDirectory,root:m,runId:$.runId}):void 0;g=o?.disposeSocket;let B0=o?XQ(o):null;if(B0)try{Z(JSON.stringify({event:"hands.journal_owner_retired",run_id:$.runId,reason:B0.reason,prior_executor_launch_id:B0.executorLaunchId}))}catch{}if(o&&[u,a].some((v)=>!N9(v,o.journalDirectory)))throw new M("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 s0=G.personal_workspace?u.slice(u.lastIndexOf("/")+1):void 0;if(s0&&s0!==G.workspace_id)throw new M("invalid_hands_workspace","Personal session identity does not match its Device grant.");q="browser_socket";let K0=G.cloud_browser?b7(G.sandbox_os,s0):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${p}`:n(o?o.launchDirectory:_,"repl.sock");q="relay_url";let L0=uZ(new URL(G.relay_url).hostname),R0=S0==="ara_device_wss"&&!L0?(Q.loadProxy??H8)()?.url:void 0,Y0;q="environment_owner";let Q0=$.headless&&$.deviceIdentity&&G.environment_binding?NZ(_,{runId:$.runId,...$.deviceIdentity,binding:G.environment_binding,expiresAtMs:Date.parse(G.expires_at),identity:()=>Y0?.()??null}):void 0;q="job_environment";let F9=!Q0&&u0.kind==="managed"&&q0?n(u,"job.env"):null;if(F9)try{Z8(F9,"",{mode:384,flag:"wx"})}catch(v){if(!(v instanceof Error&&("code"in v)&&v.code==="EEXIST"))throw v}let V8={url:G.relay_url,transport:S0,...R0===void 0?{}:{proxyUrl:R0},...$.localGithubConfinement?{localGithubConfinement:!0}:{},...G[p0]&&Q0?{gitCredentialEnvironment:!0}:{},workerVersion:B9,protocolVersion:W9,workerArtifactSha256:G0,workerEntrypoint:v0,...process.platform==="win32"?{bashExecutable:y9()}:{},targetGeneration:G.target_generation,fenceId:$0,workRoot:u,workspaceAliasPath:u,jobEnvPath:H0,...Q0?{environmentSnapshotPath:Q0.path,...$.hostExecution?{executionEnvironment:qQ()}:{},environmentExpectedBinding:{runId:$.runId,...$.deviceIdentity,binding:G.environment_binding}}:F9?{jobEnvSourcePath:F9,workspacePoolPath:X0(u)}:q0?{}:{jobEnvSourcePath:rZ(u)},repoPath:a,replSocketPath:K0,...G.cloud_browser?{browserRunId:$.runId}:{},readyPath:d,launchId:p,expiresAtMs:Date.parse(G.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...o?{managedJobs:{journalDirectory:o.journalDirectory,scopeId:o.scopeId},jobControlSocketPath:o.socketPath}:{},...o&&B?{jobsUser:{...B,...V!==null?{modelGid:V}:{}}}:{},...$.managedPty&&o&&Q0?{managedPty:{version:1,...$.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:OQ()}:{}}}:{},...L&&!C?{allowedTools:["bash","read","write","edit"]}:H?{allowedTools:j==="bash"?["bash"]:["bash","repl"]}:{}};if(Q0||q0&&!F9)Z8(H0,"",{mode:384});else i7(u,H0);q="config_write",Z8(w,JSON.stringify(V8),{mode:384}),q=null;let w0={session_id:G.session_id,environment_id:G.environment_id,hands_protocol_version:W9,hands_worker_version:B9,hands_worker_artifact_sha256:G0,hands_worker_entrypoint:v0,target_generation:G.target_generation,target_fence_id:G.target_fence_id,executor_launch_id:p},A9=null,G$=!1,z$=!1,V$,t=null,K$,W$,P9="failed",B$=null,K8=Promise.resolve(),L$=null,W8=async(v,r)=>{try{await F(v,r)}catch{}};try{Y("event_started");let v,r=(async()=>{await $.emitEvent("hands.started",{...w0,policy_mode:"full_access",policy_version:1,path_source:A.source}),v=Date.now()})();r.catch(()=>{return}),Y("worker_setup");let k0=G.browser_egress?{mode:"enforce",allowedDomains:G.browser_egress.allowed_domains}:{mode:"off"};if(j&&j!=="bash")A9=await(Q.startNodeRepl??IZ)({socketPath:K0,workRoot:u});else if(!H&&!G.cloud_browser&&C)A9=await(Q.startRepl??QZ)({socketPath:K0,browserExecutablePath:C,workspaceRoot:a,...$.managedBrowser?{managedBrowser:$.managedBrowser}:{},...$.desktopRecording?{recording:$.desktopRecording}:{},networkPolicy:k0,onEgressDenied:(E)=>{let z0=JZ(E.host);Z(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:z0,reason:E.reason,run_id:$.runId})),K8=K8.then(()=>F("hands.browser_egress_denied",{destination_id:z0,reason:E.reason})).catch((E9)=>{L$??=E9})}}).catch((E)=>{if(!L||$.signal.aborted||z()>=Date.parse(G.expires_at)||!X6(E,K0))throw E;return Object.assign(V8,{allowedTools:["bash","read","write","edit"]}),Z8(w,JSON.stringify(V8),{mode:384}),z$=!0,null});let n0=o7({configPath:w,root:a,grantedRoot:m,workRoot:u,workspacePoolPath:z8,temporaryDirectory:_,path:A.path,executablePath:Q.executablePath,sourceEntrypoint:Q.sourceEntrypoint}),B8=Date.now(),L8,F$,F8=Q.takePrespawnedWorker?.(n0)??null;if(V$=Q.takePrespawnedWorker?F8!==null:void 0,t=F8??(Q.spawnWorker??((E)=>N7(E.command,E.args,E.options)))(n0),!F8)Q.adoptSpawnedWorker?.(t);t.stderr?.on("data",t7(p,(E)=>{if(E.event==="hands.worker.connecting")L8??=E.timestampMs;else if(E.event==="hands.worker.open")F$??=E.timestampMs;if(Z(JSON.stringify({...E,run_id:$.runId})),E.event==="hands.worker.permission_denied"&&typeof E.reason==="string"){let[z0,E9]=E.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(z0??"")&&["bash","read","write","edit"].includes(E9??""))F("permission.denied",{provenance:z0,operation:E9}).catch(()=>{return})}}));let H$=!1;t.on("error",()=>{H$=!0}),t.once("exit",(E,z0)=>{try{Z(JSON.stringify({event:"hands.worker.exited",run_id:$.runId,launchId:p,exit_code:E,exit_signal:z0}))}catch{}}),x=t,Y("worker_ready_wait");let H9=await e7({path:d,launchId:p,fenceId:$0,targetGeneration:G.target_generation,child:t,spawnFailed:()=>H$,signal:$.signal,timeoutMs:Q.readyTimeoutMs??E7,now:z}),eZ=Date.now();if(Y0=()=>{if(!t||t.exitCode!==null||t.signalCode!==null)return null;let E=r9(d,H9);return E?{generation:E.targetGeneration,fenceId:E.fenceId}:null},o){let E={root:m,runId:$.runId,operationId:$.operationId,scopeId:o.scopeId,socketPath:o.socketPath,generation:H9.targetGeneration,fenceId:H9.fenceId,executorLaunchId:p,expiresAtMs:Date.parse(G.expires_at),readIdentity:Y0,workspace:u0,localGithubConfinement:$.localGithubConfinement===!0};if(Q0)E.environment=Q0;if($.claimOwner&&$.deviceIdentity&&$.claimOwner.device_id===$.deviceIdentity.deviceId){let z0=[$.deviceIdentity.apiOrigin,G.relay_url];if(R0)z0.push(R0);E.previewAuthority={owner:Object.freeze({...$.claimOwner}),rootId:$.deviceIdentity.rootId,relayOrigin:new URL(G.relay_url).origin,deniedPorts:w$(z0)}}W$=YQ(E)}if(await new Promise((E)=>{setImmediate(E)}),I9)nZ(u);let x9;if(J&&Q0){try{let E=Q0.install(J);x9={snapshot_id:E.snapshot_id,installed_revision:E.installed_revision}}catch{}try{Z(JSON.stringify({event:"hands.environment_at_claim",run_id:$.runId,installed:x9!==void 0}))}catch{}}J=void 0;let U$=!1;if($.headless){let E=c7(a,B);try{Z(JSON.stringify({event:"hands.workspace_check",run_id:$.runId,outcome:E}))}catch{}if(E==="unready")throw new M("hands_workspace_unready","This Session's checkout is not a readable, writable directory at its own path, so Reason Hands cannot use it.");U$=E==="checked"}Y("event_ready");let N$=W(r);N$.catch(()=>{return});let M$=Date.now();G$=!0,await F("hands.ready",{...w0,expiry_diagnostic:K,startup_stages:{version:1,browser_resolution_ms:V0(X.get("browser_resolution"),X.get("path_resolution")),path_resolution_ms:V0(X.get("path_resolution"),X.get("workspace_setup")),workspace_setup_ms:V0(X.get("workspace_setup"),X.get("event_started")),repl_setup_ms:V0(X.get("worker_setup"),B8),worker_boot_ms:V0(B8,L8),worker_dial_ms:V0(L8,F$),worker_ready_ms:V0(B8,eZ),started_event_ms:V0(X.get("event_started"),v),started_join_wait_ms:V0(X.get("event_ready"),M$),total_ms:V0(X.get("entered"),M$)},...J6($.claimedAtMs,X.get("entered"),V$),...$.managedPty?.startupVerified===!0?{managed_pty:{version:1,execution_mode:"host",descendant_cleanup_verified:!0}}:{},policy_mode:"full_access",policy_version:1,path_source:A.source,connection_generation:H9.generation,...x9?{environment_installed:x9}:{},...U$?{workspace_checked:!0}:{},...L&&!A9?{browser_state:"unavailable",browser_reason_code:z$?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await N$,Y("ready"),K$=OZ({path:d,initial:H9,signal:$.signal,isAlive:()=>t!==null&&t.exitCode===null&&t.signalCode===null&&z()<Date.parse(G.expires_at),publish:(E,z0)=>$.emitEvent("hands.reconnected",{...w0,target_generation:E.targetGeneration,target_fence_id:E.fenceId,connection_generation:E.generation},z0),failed:()=>Z(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:$.runId,executor_launch_id:p}))});let j$=await Z6({child:t,signal:$.signal,expiresAt:Date.parse(G.expires_at),now:z});if(j$==="cancelled"){let E=$.signal.reason instanceof M?$.signal.reason.code:"cancelled";throw P9=E,new M(E,"Reason Hands was cancelled.")}if(j$==="exited")throw new M("hands_worker_exited","Reason Hands exited unexpectedly.");return P9="expired",{...w0,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(v){B$=v;let r=v instanceof M?v.code:"hands_failed",k0=r==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(r);if(P9=k0?r:"failed",!k0)await W8("hands.failed",{...w0,reason_code:r,...r==="hands_worker_exited"&&t?$6(t):{}});throw v}finally{K$?.stop(),W$?.();let v=t?await Q6(t,Q.stopTimeoutMs??S7):null,r=!1;await $.desktopRecording?.close();try{await A9?.stop()}catch{r=!0}if(await K8,(v==="stopped"||v==="already_exited"&&!G$)&&!r)await W8("hands.stopped",{...w0,reason_code:P9});else if(v!==null||r){if(await W8("hands.failed",{...w0,reason_code:v==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),B$===null||r)throw new M("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(L$!==null)throw new M("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(N){let C=ZZ(q,N);if(C)try{Z(JSON.stringify({event:"sandbox.hands_workspace_failed",...C}))}catch{}throw N}finally{try{if(!x||x.exitCode!==null||x.signalCode!==null)g?.();if(k!==null&&(!x||x.exitCode!==null||x.signalCode!==null))I7(k,{recursive:!0,force:!0})}finally{y?.(),b()}}}
|
|
452
|
-
export{W6 as Yb,B6 as Zb,Z0 as _b,L6 as $b,F6 as ac,H6 as bc,_6 as cc,B4 as dc,D6 as ec,N9 as fc,U0 as gc,I6 as hc,w$ as ic,m6 as jc,ZQ as kc,t6 as lc,e6 as mc,$2 as nc,Q2 as oc,Z2 as pc,X2 as qc,GQ as rc,Y2 as sc,G2 as tc,h as uc,W0 as vc,EX as wc,uX as xc,sX as yc,HQ as zc,NZ as Ac,U2 as Bc,MQ as Cc,qQ as Dc,OQ as Ec,JX as Fc,V3 as Gc,K3 as Hc,mQ as Ic,i2 as Jc,C9 as Kc,Q1 as Lc,e8 as Mc,xZ as Nc,wZ as Oc,Y$ as Pc,k7 as Qc,S5 as Rc,R5 as Sc,sZ as Tc,g7 as Uc,nZ as Vc,iZ as Wc,o7 as Xc,r7 as Yc,kZ as Zc,w5 as _c,k5 as $c};
|