@reason-machines/cli-linux-x64 0.2.559 → 0.2.561
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/reason +2 -2
- package/bin/vm-hands/agent-network-kk36zca7.js +2 -0
- package/bin/vm-hands/api-credentials-mtfdk175.js +2 -0
- package/bin/vm-hands/api-w6w7vfp3.js +2 -0
- package/bin/vm-hands/ask-relay-xx0rzpch.js +5 -0
- package/bin/vm-hands/connect-cli-dmwph620.js +2 -0
- package/bin/vm-hands/credentials-s7ps7y6s.js +2 -0
- package/bin/vm-hands/custom-endpoint-device-3xnrp33e.js +2 -0
- package/bin/vm-hands/desktop-account-eg8thn79.js +2 -0
- package/bin/vm-hands/device-workspace-h5rsecq8.js +2 -0
- package/bin/vm-hands/{fsevents-fev1pxw2.js → fsevents-vxv56sp5.js} +1 -1
- package/bin/vm-hands/hands-worker-source-vk664w8p.js +2 -0
- package/bin/vm-hands/{index-j6wffzfd.js → index-03p9c17x.js} +106 -106
- package/bin/vm-hands/install-receipt-j04hdw1k.js +2 -0
- package/bin/vm-hands/local-automation-vvt9d9xb.js +2 -0
- package/bin/vm-hands/local-capabilities-pwv76ns5.js +2 -0
- package/bin/vm-hands/local-desktop-users-sq4trh07.js +2 -0
- package/bin/vm-hands/local-display-mac-yxcxvg2z.js +2 -0
- package/bin/vm-hands/local-display-session-axh9mfdk.js +2 -0
- package/bin/vm-hands/local-display-video-pxhztqk7.js +2 -0
- package/bin/vm-hands/local-managed-process-4mgqn7tg.js +2 -0
- package/bin/vm-hands/local-pty-session-edd8ttf9.js +2 -0
- package/bin/vm-hands/managed-runtime-pcagtyfz.js +2 -0
- package/bin/vm-hands/network-auto-update-wkzb91qz.js +3 -0
- package/bin/vm-hands/network-contract-8mxtma3w.js +2 -0
- package/bin/vm-hands/network-sign-in-61gmpmaa.js +3 -0
- package/bin/vm-hands/package-vwvzjtn0.js +2 -0
- package/bin/vm-hands/permissions-348prrcx.js +2 -0
- package/bin/vm-hands/reason-hands-protocol-1nkpw1v3.js +2 -0
- package/bin/vm-hands/serve-service-3dkyznay.js +2 -0
- package/bin/vm-hands/status-khqk4cjw.js +96 -0
- package/bin/vm-hands/version-c1hen0wn.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-0wb1n769.js +9 -0
- package/bin/vm-hands/{vm-hands-entry-lite-506b6pcz.js → vm-hands-entry-lite-2dak7e1h.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-a3p6xz53.js → vm-hands-entry-lite-2rgf8866.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-52qz0n30.js +7 -0
- package/bin/vm-hands/vm-hands-entry-lite-57ajjwmh.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-5y4phfv1.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-6jxshhps.js +9 -0
- package/bin/vm-hands/vm-hands-entry-lite-71ebge0c.js +42 -0
- package/bin/vm-hands/vm-hands-entry-lite-7pfhwxn5.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-84mc1f7h.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-8xv6c0rm.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-9g52kxyj.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-8rmbdm6c.js → vm-hands-entry-lite-9yfmkd1f.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-a6ss0ges.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-a7bf7xr7.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-ab1pq3xg.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-bj3w2ven.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-q1yvw4xz.js → vm-hands-entry-lite-e3fn8ys2.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-gxpw14jv.js +11 -0
- package/bin/vm-hands/vm-hands-entry-lite-h7nk2848.js +539 -0
- package/bin/vm-hands/vm-hands-entry-lite-hjjbjpd7.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-hn9pq7zj.js +127 -0
- package/bin/vm-hands/vm-hands-entry-lite-hs6sdn60.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-ht6hzkgj.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-hxfxs7r9.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-2v4zh9ze.js → vm-hands-entry-lite-j10cw3d9.js} +9 -9
- package/bin/vm-hands/vm-hands-entry-lite-jgk5z8zc.js +10 -0
- package/bin/vm-hands/vm-hands-entry-lite-jpvmkce5.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-k5ytpgzz.js +65 -0
- package/bin/vm-hands/{vm-hands-entry-lite-s85p7tqp.js → vm-hands-entry-lite-krpqqx12.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-m1we91g4.js +105 -0
- package/bin/vm-hands/{vm-hands-entry-lite-q2h781jg.js → vm-hands-entry-lite-ms99mzp0.js} +3 -3
- package/bin/vm-hands/vm-hands-entry-lite-nn6zcvmp.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-46pwqvpf.js → vm-hands-entry-lite-ptycjmkc.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-pxtycfdv.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-q9djb28r.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-q9s1e2y1.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-pzj5s203.js → vm-hands-entry-lite-qf990rxw.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-sy7dcccg.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-tcmye5ny.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-1yv5qqew.js → vm-hands-entry-lite-v4hr9x9h.js} +45 -45
- package/bin/vm-hands/vm-hands-entry-lite-vdv4nm5f.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-vkhacd00.js +452 -0
- package/bin/vm-hands/vm-hands-entry-lite-wcgm41jq.js +52 -0
- package/bin/vm-hands/vm-hands-entry-lite-weqam12f.js +6 -0
- package/bin/vm-hands/{vm-hands-entry-lite-jrce7v4r.js → vm-hands-entry-lite-xvccy3z4.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-y3nz20wb.js +345 -0
- package/bin/vm-hands/vm-hands-entry-lite-yvws5zpx.js +4 -0
- package/bin/vm-hands/{vm-hands-entry-lite-qd46yhvz.js → vm-hands-entry-lite-z0ht62s4.js} +3 -3
- package/bin/vm-hands/vm-hands-entry-lite-z213y4pj.js +150 -0
- package/bin/vm-hands/vm-hands-entry-lite-zawytz09.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-h2rq71rj.js → vm-hands-entry-lite-zh6ncdjn.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite.js +2 -2
- package/bin/vm-hands/{vm-hands-executor-p2jvbq5w.js → vm-hands-executor-csdtg7kj.js} +8 -8
- package/bin/vm-hands/vm-hands-op-runner-z7tsd84c.js +2 -0
- package/bin/vm-hands/{vm-hands-runtime-889hfy4p.js → vm-hands-runtime-1qxf96z7.js} +3 -3
- package/bin/vm-hands/worker-preview-readiness-06tygyjs.js +2 -0
- package/bin/vm-hands/worker-sandbox-e1cpkzfz.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-credentials-x30e4ezb.js +0 -2
- package/bin/vm-hands/api-y6v8wdsq.js +0 -2
- package/bin/vm-hands/connect-cli-32wrv6sw.js +0 -2
- package/bin/vm-hands/credentials-sbza33ac.js +0 -2
- package/bin/vm-hands/custom-endpoint-device-mydksbg8.js +0 -2
- package/bin/vm-hands/desktop-account-t0afsge2.js +0 -2
- package/bin/vm-hands/device-workspace-b534qy2c.js +0 -2
- package/bin/vm-hands/hands-worker-source-qj7s9dk5.js +0 -2
- package/bin/vm-hands/install-receipt-zv1bjbgh.js +0 -2
- package/bin/vm-hands/local-automation-pwwqrnt7.js +0 -2
- package/bin/vm-hands/local-capabilities-scnpxe96.js +0 -2
- package/bin/vm-hands/local-desktop-users-5scb9930.js +0 -2
- package/bin/vm-hands/local-display-mac-pft73te9.js +0 -2
- package/bin/vm-hands/local-display-session-9362hqsn.js +0 -2
- package/bin/vm-hands/local-display-video-dndhr5v1.js +0 -2
- package/bin/vm-hands/local-managed-process-zm639p1g.js +0 -2
- package/bin/vm-hands/local-pty-session-njd0tprg.js +0 -2
- package/bin/vm-hands/managed-runtime-cqkw2mtn.js +0 -2
- package/bin/vm-hands/network-contract-kx0hz3wt.js +0 -2
- package/bin/vm-hands/package-way7qesn.js +0 -2
- package/bin/vm-hands/permissions-jxycbgay.js +0 -2
- package/bin/vm-hands/reason-hands-protocol-g54rtrhd.js +0 -2
- package/bin/vm-hands/serve-service-byvya1ym.js +0 -2
- package/bin/vm-hands/status-f1k1qmck.js +0 -10
- package/bin/vm-hands/version-czwf27v3.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-04x5xjt6.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-07apxfh8.js +0 -42
- package/bin/vm-hands/vm-hands-entry-lite-0wsr8edk.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-1tgxze8w.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-2twtpxmp.js +0 -9
- package/bin/vm-hands/vm-hands-entry-lite-3gbf905c.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-48rphbjm.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-4anjdcth.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-73f4cgkf.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-8dfw96ym.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-ak0hd94p.js +0 -7
- package/bin/vm-hands/vm-hands-entry-lite-bpamn7ny.js +0 -9
- package/bin/vm-hands/vm-hands-entry-lite-dgfx0rbn.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-ecz6fzds.js +0 -126
- package/bin/vm-hands/vm-hands-entry-lite-frd7e74y.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-fxzadxz4.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-gje7xvy9.js +0 -6
- package/bin/vm-hands/vm-hands-entry-lite-h1qjggz0.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-j3fw7x65.js +0 -14
- package/bin/vm-hands/vm-hands-entry-lite-jydpev8e.js +0 -452
- package/bin/vm-hands/vm-hands-entry-lite-k84zsash.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-kf2jgke1.js +0 -150
- package/bin/vm-hands/vm-hands-entry-lite-m0gsez4t.js +0 -539
- package/bin/vm-hands/vm-hands-entry-lite-n7bd44rm.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-p5ny1pw4.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-qcktp8d9.js +0 -52
- package/bin/vm-hands/vm-hands-entry-lite-ravxhygk.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-s0rx4fm8.js +0 -105
- package/bin/vm-hands/vm-hands-entry-lite-tyem93c1.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-vj7xzb3y.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-wghmyfba.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-wzv13c8k.js +0 -65
- package/bin/vm-hands/vm-hands-entry-lite-yptpy066.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-yretc2th.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-zf0h0qjy.js +0 -2
- package/bin/vm-hands/vm-hands-op-runner-2bfbyj4e.js +0 -2
- package/bin/vm-hands/worker-preview-readiness-gy36ejp9.js +0 -2
- package/bin/vm-hands/worker-sandbox-f1tfb3y0.js +0 -2
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{mt,gr,Se}from"./vm-hands-entry-lite-pxtycfdv.js";import{st,Et,Oe,kt,Ge,Cr,Zt,Ne,X,te,Ui}from"./vm-hands-entry-lite-9g52kxyj.js";import{kn,vr}from"./vm-hands-entry-lite-q9s1e2y1.js";import{ic,F,zt,gt,qt,He,Wt,jo,_t,fn,rt,Ee,ce,nt,xi,Ci,Uo}from"./vm-hands-entry-lite-jpvmkce5.js";import{xt,Ke,at,Le,At,xe,pe}from"./vm-hands-entry-lite-71ebge0c.js";import{tn,hi,pr,Re,U,H,R,Ro}from"./vm-hands-entry-lite-v4hr9x9h.js";import{Bt,pi,Ao,tc,je,Po}from"./vm-hands-entry-lite-weqam12f.js";import{ue}from"./vm-hands-entry-lite-q9djb28r.js";import{da}from"./vm-hands-entry-lite-z0ht62s4.js";import{v,Mt,en,dr,Ya,pt,ht}from"./vm-hands-entry-lite-0wb1n769.js";import{b,m,y}from"./vm-hands-entry-lite-yvws5zpx.js";import{L}from"./vm-hands-entry-lite-ptycjmkc.js";import{On}from"./vm-hands-entry-lite-xvccy3z4.js";import{s,Lc,$c,Ve,Bc}from"./vm-hands-entry-lite-zawytz09.js";import{he,sa,aa,zc,I,t,V,Mr,o,_,d,n,h,A,$e,c,i}from"./vm-hands-entry-lite-k5ytpgzz.js";import{la}from"./vm-hands-entry-lite-qf990rxw.js";import{Wc,Xe,fa,B,Tt,Be,G}from"./vm-hands-entry-lite-8xv6c0rm.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{readFileSync as Oo,realpathSync as go,statSync as Hi}from"fs";import{homedir as Ni}from"os";import{dirname as Li,isAbsolute as Bi,join as wt,sep as ji}from"path";var Di=()=>{let e={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{unit:"entries",verb:"to have"}};function a(f){return e[f]??null}let l={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"},u={nan:"NaN"};return(f)=>{switch(f.code){case"invalid_type":{let g=u[f.expected]??f.expected,k=zc(f.input),O=u[k]??k;return`Invalid input: expected ${g}, received ${O}`}case"invalid_value":if(f.values.length===1)return`Invalid input: expected ${aa(f.values[0])}`;return`Invalid option: expected one of ${sa(f.values,"|")}`;case"too_big":{let g=f.inclusive?"<=":"<",k=a(f.origin);if(k)return`Too big: expected ${f.origin??"value"} to have ${g}${f.maximum.toString()} ${k.unit??"elements"}`;return`Too big: expected ${f.origin??"value"} to be ${g}${f.maximum.toString()}`}case"too_small":{let g=f.inclusive?">=":">",k=a(f.origin);if(k)return`Too small: expected ${f.origin} to have ${g}${f.minimum.toString()} ${k.unit}`;return`Too small: expected ${f.origin} to be ${g}${f.minimum.toString()}`}case"invalid_format":{let g=f;if(g.format==="starts_with")return`Invalid string: must start with "${g.prefix}"`;if(g.format==="ends_with")return`Invalid string: must end with "${g.suffix}"`;if(g.format==="includes")return`Invalid string: must include "${g.includes}"`;if(g.format==="regex")return`Invalid string: must match pattern ${g.pattern}`;return`Invalid ${l[g.format]??f.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${f.divisor}`;case"unrecognized_keys":return`Unrecognized key${f.keys.length>1?"s":""}: ${sa(f.keys,", ")}`;case"invalid_key":return`Invalid key in ${f.origin}`;case"invalid_union":if(f.options&&Array.isArray(f.options)&&f.options.length>0)return`Invalid discriminator value. Expected ${f.options.map((k)=>`'${k}'`).join(" | ")}`;return"Invalid input";case"invalid_element":return`Invalid value in ${f.origin}`;default:return"Invalid input"}}};function mn(){return{localeError:Di()}}he(mn());var Zn="--proxy",Qn="--proxy-ca-file",Mi=262144;class K extends Error{}function gn(e){let a;try{a=new URL(e)}catch{throw new K("The proxy must be a URL like https://proxy.example.com:3128.")}if(a.protocol!=="https:"&&a.protocol!=="http:")throw new K("The proxy URL must use the https or http scheme.");if(!a.hostname)throw new K("The proxy URL must name a host.");if(a.port!==""&&Number(a.port)<1)throw new K("The proxy URL must use a port between 1 and 65535.");if(a.pathname!==""&&a.pathname!=="/"||a.search||a.hash)throw new K("The proxy URL must not carry a path, query, or fragment.");return a.toString()}function La(e){let a=new URL(e.url),l=a.port||(a.protocol==="https:"?"443":"80");return`${a.hostname}:${l}`}function Wi(e={}){let a=e.home??Ni(),l=e.statePath??mt();return[Li(l),wt(a,".ssh"),wt(a,".aws"),wt(a,".gnupg"),wt(a,".kube"),wt(a,"Library","Keychains")]}function Fi(e,a){return a===e||a.startsWith(e+ji)}function zi(e,a={}){if(!Bi(e))throw new K("The proxy CA file must be an absolute path.");let l,u,f;try{l=go(e);let O=Hi(l);u=O.size,f=O.isFile()}catch{throw new K("The proxy CA file does not exist or is not readable.")}if(!f)throw new K("The proxy CA file must be a regular file.");if(u>Mi)throw new K("The proxy CA file must be 256 KB or smaller.");let g=Wi(a).flatMap((O)=>{try{let w=go(O);return w===O?[O]:[O,w]}catch{return[O]}});for(let O of[e,l])if(g.some((w)=>Fi(w,O)))throw new K("The proxy CA file must not live inside a credential directory.");let k;try{k=Oo(l,"utf8")}catch{throw new K("The proxy CA file is not readable.")}if(!k.includes("-----BEGIN CERTIFICATE-----"))throw new K("The proxy CA file must be a PEM certificate bundle.");return l}function $a(e,a={}){if(!e.proxyUrl)throw new K("A proxy URL is required.");let l=gn(e.proxyUrl),u=e.caFile===void 0?void 0:zi(e.caFile,a);return{version:gr,url:l,...u===void 0?{}:{caFile:u}}}function oe(e,a=fetch){if(!e)return a;let l,u=!1;return(g,k)=>{if(!u){if(e.caFile)try{l=Oo(e.caFile,"utf8")}catch{throw new K(`The configured proxy CA file is not readable: ${e.caFile}`)}u=!0}let O={...k,proxy:e.url,...l===void 0?{}:{tls:{ca:l}}};return a(g,O)}}import{createHash as $i}from"crypto";import{isAbsolute as To,join as Do,relative as Co,resolve as jt,sep as Ho}from"path";var Nt=t().min(1).refine(To,"absolute path required"),Io=h({version:i(1),apiOrigin:Mr(),channel:c(["staging","production"]),stateDirectory:Nt,workspaceRoot:Nt,lifetime:c(["persistent","ephemeral"]),executionMode:c(["confined","host"]).default("confined"),name:t().min(1).max(160).default("Reason headless worker"),slots:o().int().min(1).max(4).default(1),shutdownGraceMs:o().int().min(0).max(300000).default(30000),proxy:h({version:i(gr),url:t().refine((e)=>{try{return gn(e)===e}catch{return!1}},"invalid proxy URL"),caFile:Nt.optional()}).optional(),userChrome:_().optional(),cloudSessions:i(!0).optional(),localLogins:_().optional(),folders:d(Nt).min(1).max(31).optional()}),Ki=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,x=A("channel",[Io,Io.extend({channel:i("local-qa"),apiOrigin:t()})]).superRefine((e,a)=>{if(e.channel==="local-qa"){if(!Ki.test(e.apiOrigin))a.addIssue({code:"custom",message:"local QA worker requires an exact HTTPS trycloudflare.com quick-tunnel origin"})}else{let u=new URL(e.apiOrigin);if(u.origin!==e.apiOrigin||u.username||u.password||u.protocol!=="https:"&&!(u.protocol==="http:"&&vr(u.origin))||!vr(u.origin)&&!kn(e.channel,u.origin))a.addIssue({code:"custom",message:"API origin must match channel (or loopback)"})}if(!ge(e.workspaceRoot,e.stateDirectory))a.addIssue({code:"custom",message:"state and workspace must be disjoint"});let l=e.folders??[];if(new Set([e.workspaceRoot,...l]).size!==l.length+1||l.some((u)=>!ge(u,e.stateDirectory)))a.addIssue({code:"custom",message:"folders must be distinct and disjoint from state"})});function p(e){return Do(e.stateDirectory,`headless-${e.channel}`)}function _o(e,a={},l={}){let u=e.executionMode==="host"?"unsandboxed":"sandboxed";return{worker:Object.freeze({executionMode:u,runtimeDirectory:p(e),handsSlots:e.slots,...l.ownComputer?{ownComputer:!0}:{},readiness:Object.freeze({...a}),...l.persistentTerminals?{persistentTerminals:!0}:{},...l.probing?.length?{probing:Object.freeze([...l.probing])}:{},...l.displayVideo?{displayVideo:!0}:{},...l.handsBrowser&&a["hands.connect"]===!0?{handsBrowser:!0}:{},...l.githubSignedIn===void 0?{}:{githubSignedIn:l.githubSignedIn},...e.userChrome!==!1&&l.userChrome?{userChrome:l.userChrome}:{},...e.cloudSessions&&a["automation.call.v1"]===!0?{cloudSessions:!0}:{}}),proxy:e.proxy??null}}function ge(e,a){if(se(a,e))return!1;return!se(e,a)||L(Do(Ho,Co(jt(e),jt(a))))}function se(e,a){let l=Co(jt(e),jt(a));return l===""||l!==".."&&!l.startsWith(`..${Ho}`)&&!To(l)}function D(e){let{proxy:a,userChrome:l,cloudSessions:u,localLogins:f,folders:g,...k}=e;return $i("sha256").update(JSON.stringify(k)).digest("hex")}var Gi=4,Ji=[2375,2376,9222,9229];function ei(e){let a=new Set(Ji);for(let l of e){let u=new URL(l);a.add(Number(u.port||(["https:","wss:"].includes(u.protocol)?443:80)))}return a}function kr(){throw new r("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var Vi=60000;function No(e){let a=new AbortController,l=new Map,u=(w)=>JSON.stringify([w.jobId,w.port]);function f(w){let P=e.authority.owner;if(a.signal.aborted||!e.isCurrent()||e.expiresAtMs<=Date.now()||w.organization_id!==P.organization_id||w.user_id!==P.user_id||w.device_id!==P.device_id)kr()}function g(w){let P;try{P=e.environment.current()}catch{return null}return P.binding.target_generation===w.generation&&P.binding.target_fence_id===w.fenceId&&P.run_id===e.runId&&P.device_id===e.authority.owner.device_id&&P.root_id===e.authority.rootId?P:null}async function k(w,P,N){let T=await O(w,P,N);if(T!=="moved")return T;let S=await O(w,P,N);return S==="moved"?null:S}async function O(w,P,N){try{f(e.authority.owner);let T=e.identity();if(!T||N.aborted||w.expiresAtMs<=Date.now()||w.expiresAtMs>e.expiresAtMs)return null;let S=P.opened,M=S!==void 0&&T.generation>S.generation,j=g(T);if(M){if(j){if(j.revision<=S.revision||w.expiresAtMs>Date.parse(j.expires_at)||j.binding.target_revision!==S.attachmentRevision||j.binding.root_grant_revision!==S.grantRevision)return null;P.recoveringSinceMs=void 0}else if(Date.now()-(P.recoveringSinceMs??=Date.now())>Vi)return null}else if(!j||w.expiresAtMs>Date.parse(j.expires_at)||S&&(T.generation!==S.generation||T.fenceId!==S.fenceId))return null;let C=await e.inspect(w.jobId,N),z=e.identity(),Q=z&&g(z);f(e.authority.owner);let Y=j&&{generation:T.generation,fenceId:T.fenceId,snapshotId:j.snapshot_id,revision:j.revision,attachmentRevision:j.binding.target_revision,grantRevision:j.binding.root_grant_revision},re=M?S:Y;if(N.aborted||!z)return null;if(z.generation!==T.generation||z.fenceId!==T.fenceId||Q?.snapshot_id!==j?.snapshot_id||Q?.revision!==j?.revision)return"moved";let we=C.ok&&C.job.environmentSnapshotId!==void 0&&C.job.environmentRevision!==void 0?{snapshotId:C.job.environmentSnapshotId,revision:C.job.environmentRevision}:null;if(!C.ok||C.generation!==T.generation||!re||!we)return null;if((we.snapshotId!==re.snapshotId||we.revision!==re.revision)&&(M||!e.environment.carried(we.snapshotId,we.revision)))return null;if(!S&&T.generation===w.generation&&T.fenceId===w.fenceId)P.opened={...re,...we};return{executorLaunchId:e.executorLaunchId,job:C.job,binding:{organizationId:e.authority.owner.organization_id,userId:e.authority.owner.user_id,deviceId:e.authority.owner.device_id,rootId:e.authority.rootId,runId:e.runId,attachmentRevision:re.attachmentRevision,grantRevision:re.grantRevision,generation:re.generation,fenceId:re.fenceId,jobId:C.job.jobId,port:w.port,expiresAtMs:w.expiresAtMs}}}catch{return null}}return{async open(w,P,N){f(P);let{binding:T,deviceRelayUrl:S}=dr(w);if(N.aborted||T.expiresAtMs<=Date.now()||T.expiresAtMs>Date.now()+v.lifetimeMs||new URL(S).origin!==e.authority.relayOrigin)kr();let M=u(T),j=l.get(M);if(j){if(!Mt(j.binding,T)||j.relay!==S)kr();if(await j.opened,!await en(()=>j.port.check())||N.aborted||j.abort.signal.aborted)kr();return{opened:!0,binding:T}}if(l.size>=Gi)kr();let C=new AbortController,z={},Q=ht({binding:T,deniedPorts:e.authority.deniedPorts,readCurrentJob:()=>k(T,z,C.signal)}),Y=()=>C.abort();if(N.addEventListener("abort",Y,{once:!0}),a.signal.addEventListener("abort",Y,{once:!0}),N.aborted||a.signal.aborted)Y();let re=pt({binding:T,deviceRelayUrl:S,port:Q,signal:C.signal}),we={binding:T,relay:S,abort:C,port:Q,opened:re};l.set(M,we);let Ie=()=>{if(N.removeEventListener("abort",Y),a.signal.removeEventListener("abort",Y),l.get(M)===we)l.delete(M)};try{if((await re).closed.then(Ie),N.removeEventListener("abort",Y),f(P),C.signal.aborted||!await en(()=>Q.check()))kr();return{opened:!0,binding:T}}catch{C.abort(),Ie(),kr()}},async close(w,P){f(P);let{binding:N}=Ya(w),T=l.get(u(N));if(!T||!Mt(T.binding,N))kr();return T.abort.abort(),await T.opened.then((S)=>S.closed,()=>{return}),{closed:!0,binding:N}},dispose(){a.abort();for(let w of l.values())w.abort.abort();l.clear()}}}import{WebSocket as bn}from"ws";var Lo=(e)=>("data"in e)?e.data.length:e.bytes,Bo=2*Wt;function Fe(e){throw new r(e,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var Ur=(e)=>!["starting","running"].includes(e.state);function Ma(e,a,l=Date.now()){let u=["relay_url","session_id","expires_at","cols","rows","pty","workspace"];if(Object.keys(e).length!==u.length||Object.keys(e).some((P)=>!u.includes(P))||!rt(a)||!rt(e.session_id)||typeof e.expires_at!=="string"||typeof e.relay_url!=="string"||e.relay_url.length>4096||![e.cols,e.rows].every((P)=>Number.isSafeInteger(P)&&Number(P)>=1&&Number(P)<=_t))Fe("invalid_pty_request");let f=e.pty;if(!f||typeof f!=="object"||Array.isArray(f))Fe("invalid_pty_request");let g=f;if(Object.keys(g).length!==2||g.version!==1||!nt(g.jobId))Fe("invalid_pty_request");let k;try{k=new URL(e.relay_url)}catch{return Fe("invalid_pty_request")}if(!["ws:","wss:"].includes(k.protocol)||k.username||k.password||k.hash||k.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(k.hostname))Fe("invalid_pty_request");let O=Date.parse(e.expires_at);if(!Number.isSafeInteger(O)||O<=l)Fe("invalid_pty_request");return{workspace:te(e.workspace)??Fe("invalid_pty_request"),session:{jobId:g.jobId,sessionId:e.session_id,operationId:a,relayUrl:k.href,cols:Number(e.cols),rows:Number(e.rows),leaseExpiresAtMs:Math.min(O,l+43200000)}}}async function Mo(e){let{session:a,binding:l}=e;if(l.assertCurrent(),e.signal.aborted||Date.now()>=a.leaseExpiresAtMs)Fe("cancelled");let u=new bn(a.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:He}),f=new AbortController,g=()=>{},k=()=>{f.abort(),g()};e.signal.addEventListener("abort",k,{once:!0});let O=setTimeout(k,Math.max(1,a.leaseExpiresAtMs-Date.now())),w=[],P=0,N=0,T=0,S=!1,M=!1,j=!1,C,z,Q,Y=(W)=>{Q=new r(W,"Bound terminal input was refused."),k()};u.on("error",()=>Y("pty_relay_unavailable")),u.on("close",k),u.on("message",(W,q)=>{if(f.signal.aborted)return;if(!M){Y("pty_not_ready");return}let ne=Array.isArray(W)?Buffer.concat(W):W instanceof ArrayBuffer?Buffer.from(W):W;if(ne.length===0)return;let ye=w.at(-1),le=q&&ye!==void 0&&"data"in ye&&ye.data.length+ne.length<=He;if(ne.length>He||P+ne.length>jo){Y("pty_input_backpressure");return}if(le)ye.data=Buffer.concat([ye.data,ne]);else if(q)w.push({data:Buffer.from(ne)});else try{let fe=JSON.parse(ne.toString("utf8"));if(fe&&fe.t==="close"&&Object.keys(fe).length===1){j=!0,k();return}if(!fe||fe.t!=="resize"||Object.keys(fe).length!==3||![fe.cols,fe.rows].every((ee)=>Number.isSafeInteger(ee)&&ee>=1&&ee<=_t))throw Error("invalid_control");w.push({cols:fe.cols,rows:fe.rows,bytes:ne.length})}catch{Y("invalid_pty_control");return}P+=ne.length,g()});function re(W){return Uo(JSON.stringify({...l.scope,version:1,sessionId:a.sessionId,operationId:a.operationId,job:{...W,output:[],pty:W.pty?{...W.pty,output:[]}:void 0}}))}function we(W){if(!W.ok)Fe(W.error);let q=W.job;if(W.generation!==l.scope.generation||q.jobId!==a.jobId||!q.pty||q.leaseExpiresAtMs>a.leaseExpiresAtMs||q.process&&q.process.executorLaunchId!==l.scope.executorLaunchId||q.process&&z&&(q.process.pid!==z.pid||q.process.processGroupId!==z.processGroupId)||q.state!=="starting"&&(q.environmentRevision!==l.environment.revision||q.environmentSnapshotId!==l.environment.snapshotId))Fe("pty_binding_changed");if(re(q),q.process)z??={...q.process};return q}async function Ie(W){l.assertCurrent();let q=await l.request(W,f.signal);if(l.assertCurrent(),f.signal.aborted)Fe("cancelled");let ne=we(q);if(ne.inputSequence!==N)Fe("job_input_sequence");if(!Ur(ne)&&ne.leaseExpiresAtMs<=Date.now())Fe("pty_binding_changed");return ne}function Z(W){if(l.assertCurrent(),f.signal.aborted||u.readyState!==bn.OPEN||u.bufferedAmount+Buffer.byteLength(W)>Bo)Fe("pty_output_backpressure");u.send(W)}function be(W){if(W.firstCursor>T+1)T=W.firstCursor-1;for(let q of W.pty.output){if(q.cursor<=T)continue;if(q.cursor!==T+1)Fe("pty_output_gap");let ne=Buffer.from(q.dataBase64,"base64");if(u.bufferedAmount+ne.length>Bo)return!1;Z(ne),T=q.cursor}if(T!==W.nextCursor)Fe("pty_output_gap");return!0}async function ke(W,q){let ne;try{await Promise.race([e.emit(W,q),new Promise((ye,le)=>{ne=setTimeout(()=>le(new r("pty_event_unavailable","Terminal metadata delivery timed out.")),2000)})])}finally{clearTimeout(ne)}}async function ae(){let W=AbortSignal.timeout(fn),q=l.request({jobId:a.jobId,action:"cancel",input:{}},W),ne,ye=new Promise((le,fe)=>{if(ne=()=>fe(new r("pty_cleanup_unconfirmed","Terminal cleanup acknowledgement was not observed within authority.")),W.addEventListener("abort",ne,{once:!0}),W.aborted)ne()});try{let le=await Promise.race([q,ye]);if(W.aborted)Fe("pty_cleanup_unconfirmed");return we(le)}finally{W.removeEventListener("abort",ne)}}try{await new Promise((le,fe)=>{let ee=setTimeout(()=>{k(),fe(new r("pty_relay_unavailable","Terminal pairing timed out."))},5000),me=()=>{clearTimeout(ee),fe(new r("cancelled","Terminal pairing was cancelled."))};if(f.signal.addEventListener("abort",me,{once:!0}),u.once("open",()=>{clearTimeout(ee),f.signal.removeEventListener("abort",me),le()}),f.signal.aborted)me()}),l.assertCurrent(),S=!0,C=await Ie({jobId:a.jobId,action:"start",input:{mode:"pty",cols:a.cols,rows:a.rows,leaseExpiresAtMs:a.leaseExpiresAtMs}});let W=Date.now()+5000;while(C.state==="starting"){if(Date.now()>=W)Fe("pty_not_ready");await new Promise((le)=>setTimeout(le,25)),C=await Ie({jobId:a.jobId,action:"inspect",input:{after:T}})}if(C.state!=="running"||C.inputSequence!==0||C.leaseExpiresAtMs<=Date.now())Fe("pty_not_ready");await ke("pty.ready",re(C)),M=!0,Z(JSON.stringify({t:"open",cols:C.pty.cols,rows:C.pty.rows,receipt:re(C)}));let q=!1,ne=0,ye=!1;while(!f.signal.aborted){let le=C.firstCursor>T+1,fe=be(C);if(Ur(C)){if(fe)break}else if(le)q=!0;else if(q&&fe&&Date.now()>=ne){q=!1,ne=Date.now()+1000;let{cols:me,rows:De}=C.pty;for(let Me of[{cols:me,rows:De>1?De-1:2},{cols:me,rows:De}]){if(Ur(C))break;let tr=++N;if(C=await Ie({jobId:a.jobId,action:"resize",input:{sequence:tr,...Me}}),C.inputSequence!==tr)Fe("job_input_sequence")}continue}let ee=Ur(C)||ye?void 0:w.shift();if(ee){P-=Lo(ee);let me=++N;try{C=await Ie("data"in ee?{jobId:a.jobId,action:"input",input:{sequence:me,dataBase64:ee.data.toString("base64")}}:{jobId:a.jobId,action:"resize",input:{sequence:me,cols:ee.cols,rows:ee.rows}})}catch(De){if(!(De instanceof r)||De.code!=="job_input_backpressure")throw De;N-=1,w.unshift(ee),P+=Lo(ee),ye=!0;continue}if(C.inputSequence!==me)Fe("job_input_sequence")}else if(await new Promise((me)=>{let De=setTimeout(me,ye||!fe?10:50);if(g=()=>{clearTimeout(De),me()},f.signal.aborted||!ye&&w.length)g()}),ye=!1,g=()=>{},!f.signal.aborted&&fe)try{C=await Ie({jobId:a.jobId,action:"inspect",input:{after:T}})}catch(me){if(!j||!(me instanceof r)||me.code!=="cancelled")throw me}}}catch(W){Q??=W}finally{if(M=!1,w.length=0,clearTimeout(O),e.signal.removeEventListener("abort",k),k(),S&&(!C||!Ur(C)))try{C=await ae()}catch{C=void 0}try{if(!C||!Ur(C)||C.pty?.cleanup!=="confirmed")Fe("pty_cleanup_unconfirmed");let W=re(C);if(u.readyState===bn.OPEN)await new Promise((q)=>{let ne=setTimeout(q,500);u.send(JSON.stringify({t:"exit",code:C.exitCode,receipt:W}),()=>{clearTimeout(ne),q()})});await ke("pty.stopped",W)}catch(W){Q??=W}u.terminate()}if(Q)throw Q;if(e.signal.aborted)Fe("cancelled");if(!C)Fe("pty_cleanup_unconfirmed");return{receipt:re(C)}}import{createHash as qi,randomUUID as Sn}from"crypto";import{spawnSync as $o}from"child_process";import{closeSync as Wo,constants as wn,fstatSync as Yi,fsyncSync as Xi,lstatSync as yt,mkdirSync as Zi,mkdtempSync as Ko,openSync as Fo,readFileSync as Qi,readdirSync as Go,realpathSync as Er,rmSync as yn,unlinkSync as ea}from"fs";import{createConnection as ra}from"net";import{dirname as ta,join as Dr,sep as vn}from"path";import{tmpdir as Jo}from"os";var rr=new Map,Sr=new Map;function hr(e,a){return qi("sha256").update(JSON.stringify([e,a])).digest("hex")}function zr(e){try{Zi(e,{mode:448})}catch(l){if(!(l instanceof Error&&("code"in l)&&l.code==="EEXIST"))throw l}let a=yt(e);if(!a.isDirectory()||a.isSymbolicLink()||!G(a)||Er(e)!==e)throw new r("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function na(e){let a;try{a=yt(e)}catch(l){if(l instanceof Error&&"code"in l&&l.code==="ENOENT")return!1;throw l}return!a.isDirectory()||a.isSymbolicLink()||Go(e).length>0}function oa(e){if(process.platform==="win32")return fa();let a=e.map((l)=>{try{return Er(l)}catch{return l}});for(let l of[()=>fa(),()=>Er("/dev/shm"),()=>Er(Jo())]){let u;try{u=l()}catch{continue}if(!a.some((f)=>u===f||u.startsWith(f.endsWith(vn)?f:f+vn)))return u}throw new r("invalid_hands_workspace","A Session can't work in this computer's temporary folder itself; start it in a project folder inside it.")}function Lt(e){let a=hr(e.root,e.runId),l=e.previousRuntimeDirectories?.find((k)=>na(Dr(k,"jobs",a.slice(0,16))))??e.runtimeDirectory;zr(l);let u=Dr(l,"jobs");zr(u);let f=Dr(u,a.slice(0,16));if(e.maxScopes!==void 0){let k=Go(u);if(!Number.isSafeInteger(e.maxScopes)||e.maxScopes<1||k.length>e.maxScopes||!k.includes(a.slice(0,16))&&k.length>=e.maxScopes)throw new r("process_journal_capacity","Managed process receipt capacity is full; preserve uncertain jobs and reconcile their existing receipts before starting more work.")}zr(f);let g=Ko(Dr(oa(e.folders??[]),"reason-j-"));try{return zr(g),{journalDirectory:f,scopeId:a,launchDirectory:g,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${Sn()}`:Dr(g,"control.sock"),disposeSocket:()=>yn(g,{recursive:!0,force:!0})}}catch(k){throw yn(g,{recursive:!0,force:!0}),k}}var ia=60000,ca=5000;function ua(e){if(process.platform==="win32")return pa(e);let a=$o("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:2000,env:{...process.env,LC_ALL:"C",LANG:"C"}}),l=a.status===0?/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(a.stdout.trim()):null,u=l?"JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(l[1]):-1;if(!l||u<0||u%3!==0)return null;let f=new Date(Number(l[6]),u/3,Number(l[2]),Number(l[3]),Number(l[4]),Number(l[5])).getTime();return Number.isFinite(f)?f:null}function pa(e){let a=$o(B("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:Tt()}),l=a.status===0?Date.parse(a.stdout.trim()):Number.NaN;return Number.isFinite(l)?l:null}function Vo(e,a={}){let l=Dr(e.journalDirectory,"owner.lock"),u;try{u=Fo(l,wn.O_RDONLY|wn.O_NOFOLLOW)}catch{return null}try{let f=Yi(u);if(!f.isFile()||f.nlink!==1||!G(f)||f.size>4096)return null;let g=null;try{g=JSON.parse(Qi(u,"utf8"))}catch{}let k;if(g===null){if((a.now??Date.now)()-f.mtimeMs<ia)return null;k={reason:"never_written",executorLaunchId:null}}else{let{version:P,scopeId:N,pid:T,createdAtMs:S,executorLaunchId:M}=g;if(P!==1||N!==e.scopeId||typeof M!=="string"||typeof T!=="number"||!Number.isSafeInteger(T)||T<1||T===process.pid||typeof S!=="number"||!Number.isSafeInteger(S))return null;if(!(a.exists??((C)=>{try{return process.kill(C,0),!0}catch(z){return!(z instanceof Error&&("code"in z)&&z.code==="ESRCH")}}))(T))k={reason:"owner_exited",executorLaunchId:M};else{let C=(a.startedAtMs??ua)(T);if(C===null||C<=S+ca)return null;k={reason:"pid_reused",executorLaunchId:M}}}let O=yt(l);if(O.dev!==f.dev||O.ino!==f.ino)return null;ea(l);let w=Fo(e.journalDirectory,wn.O_RDONLY);try{Xi(w)}finally{Wo(w)}return k}catch{return null}finally{Wo(u)}}function qo(e){let a={...e,workspace:e.workspace&&Object.freeze({...e.workspace}),previewAuthority:e.previewAuthority&&Object.freeze({...e.previewAuthority,owner:Object.freeze({...e.previewAuthority.owner}),deniedPorts:new Set(e.previewAuthority.deniedPorts)})},l=hr(a.root,a.runId);if(rr.has(l)||a.operationId!==void 0&&Sr.has(a.operationId))throw new r("hands_jobs_busy","The Session already has a live Hands job supervisor.");let u={binding:a,key:l,terminals:new Map};if(a.previewAuthority&&a.environment)u.previews=No({authority:a.previewAuthority,runId:a.runId,expiresAtMs:a.expiresAtMs,executorLaunchId:a.executorLaunchId,environment:a.environment,isCurrent:()=>rr.get(u.key)===u,identity:()=>{try{return $r(a)}catch{return null}},inspect:(f,g)=>{if(rr.get(u.key)!==u)throw new r("preview_unavailable","The Hands supervisor is no longer current.");return Yo(a,{jobId:f,action:"inspect",input:{after:0}},g)}});if(rr.set(l,u),a.operationId!==void 0)Sr.set(a.operationId,u);return()=>{if(rr.get(u.key)===u)rr.delete(u.key);if(a.operationId!==void 0&&Sr.get(a.operationId)===u)Sr.delete(a.operationId);u.previews?.dispose();for(let f of u.terminals.values())f.abort()}}var _a=5000,ma=20;async function Ba(e){let a=(f)=>{throw new r("hands_rebind_unavailable",f)};if(!ce(e.operationId)||!ce(e.runId)||!ce(e.fenceId)||!Ee(e.targetGeneration))a("Reason sent an invalid Hands rebind.");let l=Sr.get(e.operationId);if(!l||l.binding.root!==e.root)return a("No live Hands supervisor owns this operation.");for(let f=Date.now()+_a;;){if(e.signal?.aborted)a("The Hands rebind was cancelled.");if(Sr.get(e.operationId)!==l)a("The Hands supervisor is no longer current.");let g=null;try{g=$r(l.binding)}catch{}if(g&&g.generation===e.targetGeneration&&g.fenceId===e.fenceId)break;if(g&&g.generation>e.targetGeneration||Date.now()>=f)a("The executor did not adopt this take.");await new Promise((k)=>setTimeout(k,ma))}if(Sr.get(e.operationId)!==l||rr.get(l.key)!==l)a("The Hands supervisor is no longer current.");let u=hr(e.root,e.runId);if(l.key===u)return;if(rr.has(u))a("The taking run already has a live Hands job supervisor.");rr.delete(l.key);for(let f of l.terminals.values())f.abort();l.key=u,rr.set(u,l)}function Ze(e){let a="operationId"in e?Sr.get(e.operationId):rr.get(hr(e.root,e.runId)),l=a&&a.binding.root===e.root?a.binding:void 0;if(!l?.environment||l.expiresAtMs<=Date.now())throw new r("environment_unavailable","No live Hands supervisor owns this environment.");return l.environment.install(e.payload)}async function Fa(e){let a=rr.get(hr(e.root,e.runId));if(!a?.previews||!e.owner)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return a.previews.open(e.payload,e.owner,e.signal)}async function ja(e){let a=rr.get(hr(e.root,e.runId));if(!a?.previews||!e.owner||e.signal.aborted)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return a.previews.close(e.payload,e.owner)}async function Xr(e){let a=hr(e.root,e.runId),l=rr.get(a),u=l?.binding,f=u?.runId,g=u?.previewAuthority,k=u?.environment,O=e.owner&&{...e.owner},w=e.authority&&{...e.authority},P=()=>{throw new r("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!l||!u||!g||!k||!O||!w||!u.workspace)return P();let N=Object.freeze({...u.workspace}),T=$r(u),S=k.current(),M=()=>{if(rr.get(a)!==l||O.organization_id!==g.owner.organization_id||O.user_id!==g.owner.user_id||O.device_id!==g.owner.device_id||e.deviceId!==g.owner.device_id||e.rootId!==g.rootId||X(e.workspace)!==X(N))P();let C=$r(u),z=k.current();if(C.generation!==T.generation||C.fenceId!==T.fenceId||z.run_id!==f||z.device_id!==e.deviceId||z.root_id!==e.rootId||z.snapshot_id!==S.snapshot_id||z.revision!==S.revision||z.binding.target_generation!==T.generation||z.binding.target_fence_id!==T.fenceId||w.device_id!==e.deviceId||w.binding!==z.binding.kind||w.target_revision!==z.binding.target_revision||w.root_grant_revision!==z.binding.root_grant_revision||w.target_generation!==T.generation||w.target_fence_id!==T.fenceId)P()};if(M(),new URL(e.session.relayUrl).origin!==g.relayOrigin||l.terminals.has(e.session.jobId)||l.terminals.size>=4)return P();let j=new AbortController;l.terminals.set(e.session.jobId,j);try{return await Mo({session:{...e.session,leaseExpiresAtMs:Math.min(e.session.leaseExpiresAtMs,T.expiresAtMs,Date.parse(S.expires_at))},signal:AbortSignal.any([e.signal,j.signal]),emit:e.emit,binding:{assertCurrent:M,environment:{revision:S.revision,snapshotId:S.snapshot_id},scope:{runId:e.runId,deviceId:e.deviceId,rootId:e.rootId,workspace:N,binding:S.binding.kind,targetRevision:S.binding.target_revision,rootGrantRevision:S.binding.root_grant_revision,generation:T.generation,fenceId:T.fenceId,executorLaunchId:T.executorLaunchId},request:(C,z)=>ti(T,xi(JSON.stringify({...C,type:"job",version:2,generation:T.generation,id:Sn()})),z)}})}finally{if(l.terminals.get(e.session.jobId)===j)l.terminals.delete(e.session.jobId)}}async function Ha(e){if(nt(e.payload.jobId))throw new r("pty_binding_required","PTY jobs require the bound terminal capability.");let a=rr.get(hr(e.root,e.runId))?.binding;if(!a||a.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","No live Hands supervisor owns this Session and root.");return Yo(a,e.payload,e.signal)}var ha=1e4,ga=20,ba=gt/2,wa=zt/2,ya=(e)=>e.output.reduce((a,l)=>a+l.text.length,0);async function Yo(e,a,l){if(Object.keys(a).some((P)=>!["jobId","action","input","waitForExitMs"].includes(P)))throw new r("invalid_payload","Unexpected job control field.");let{waitForExitMs:u,...f}=a;if(u!==void 0&&(f.action!=="start"||typeof f.input!=="object"||f.input===null||!("script"in f.input)||typeof u!=="number"||!Number.isSafeInteger(u)||u<1||u>ha))throw new r("invalid_payload","Only a script start may wait for its job, within its bound.");let g=(P)=>{let N=$r(e);return ti(N,xi(JSON.stringify({...P,type:"job",version:2,generation:N.generation,id:Sn()})),l)},k=await g(f);if(u===void 0)return k;let O=Date.now()+u,w=k;while(w.ok&&["starting","running"].includes(w.job.state)&&w.job.output.length<ba&&ya(w.job)<wa&&!l.aborted&&Date.now()<O){if(await new Promise((P)=>setTimeout(P,Math.min(ga,O-Date.now()))),l.aborted)break;try{let P=await g({jobId:f.jobId,action:"inspect",input:{after:0}});if(!P.ok)break;w=P}catch{break}}return w}function $r(e){if(e.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","Hands authority expired.");let a=e.readIdentity?e.readIdentity():e;if(!a||!Ee(a.generation)||!ce(a.fenceId)||a.generation<e.generation||a.generation===e.generation&&a.fenceId!==e.fenceId)throw new r("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return e.generation=a.generation,e.fenceId=a.fenceId,{...e}}function ti(e,a,l){if(l.aborted)return Promise.reject(new r("cancelled","Job control was cancelled."));return new Promise((u,f)=>{let g=ra(e.socketPath),k="",O=!1,w,P=(T,S)=>{if(O)return;if(O=!0,clearTimeout(w),l.removeEventListener("abort",N),g.destroy(),T)f(T);else u(S)},N=()=>P(new r("cancelled","Job control waiter cancelled; inspect before retrying mutations."));l.addEventListener("abort",N,{once:!0}),g.setEncoding("utf8"),w=setTimeout(()=>P(new r("hands_job_result_unknown","Job control timed out; inspect before retrying mutations.")),Math.min(1e4,Math.max(1,e.expiresAtMs-Date.now()))),g.on("error",()=>P(new r("hands_job_result_unknown","Hands job control connection failed."))),g.once("connect",()=>g.write(JSON.stringify({version:1,scopeId:e.scopeId,fenceId:e.fenceId,executorLaunchId:e.executorLaunchId,request:a})+`
|
|
3
|
+
`)),g.on("data",(T)=>{if(k+=T,Buffer.byteLength(k)>qt)P(new r("hands_job_result_unknown","Hands job result exceeded its bound."))}),g.once("end",()=>{if(Date.now()>=e.expiresAtMs){P(new r("hands_job_result_unknown","Hands authority expired before the result was acknowledged."));return}try{let T=Ci(k.trim());if(T.id!==a.id||T.generation!==e.generation||T.ok&&T.job.jobId!==a.jobId)throw Error("identity");P(void 0,T)}catch{P(new r("hands_job_result_unknown","Hands job response identity or shape was invalid."))}}),g.once("close",()=>{if(!O)P(new r("hands_job_result_unknown","Hands job control closed before an acknowledged result."))})})}function zo(e){let a=Er(e.root),l=e.authority,u=Date.parse(e.leaseUntil),f=()=>{if(e.signal.throwIfAborted(),!Number.isFinite(u)||u<=Date.now())throw Error("local_device_gh_lease_expired")};if(f(),l.readOnly&&l.generation===null)return{root:a,readOnly:!0,signal:e.signal,deadlineMs:u,assertCurrent:f};let g=hr(a,e.runId),k=rr.get(g),O=k?.binding;if(!O?.environment||!O.workspace||O.localGithubConfinement!==!0)throw Error("local_device_gh_confinement_unavailable");let w=O.environment.current(),P=()=>{f();let T=O.environment.current(),S=$r(O);if(rr.get(g)!==k||T.github_auth!=="local_gh"||T.run_id!==O.runId||l.runId!==e.runId||T.device_id!==l.deviceId||T.root_id!==l.rootId||String(T.binding.root_grant_revision)!==l.rootRevision||T.binding.target_generation!==l.generation||T.binding.target_fence_id!==l.fenceId||S.generation!==l.generation||S.fenceId!==l.fenceId||T.snapshot_id!==w.snapshot_id||T.revision!==w.revision)throw Error("local_device_gh_authority_changed")};P();let N=Ve(a,O.workspace);return{root:N.boundary,signal:e.signal,deadlineMs:u,privateDirectory:ta(O.environment.path),repoPath:N.path,readOnly:l.readOnly,forbiddenSecretValues:Object.values(w.variables),secretNames:(T)=>Object.entries(w.variables).filter(([,S])=>S.trim()===T.trim()).map(([S])=>`variable ${S}`),assertCurrent:P}}async function Ua(e,a){let l=xt.parse(e.request),u=Ke.parse(e.authority);if(u.contributorRefresh&&l.kind==="read"&&u.readOnly)return a(zo(e));let f=Boolean(u.contributorRefresh);if(f&&(u.merge||l.kind!=="pr_mutation"||l.mutation.action!=="edit"||typeof l.mutation.body!=="string"||l.mutation.title!==void 0||l.mutation.base!==void 0||u.readOnly||u.runId!==e.runId||u.repoFullName!==l.repoFullName))throw Error("local_device_gh_contributor_refresh_authority_invalid");if(l.kind!=="pr_merge"&&!f){if(u.merge)throw Error("local_device_gh_merge_authority_invalid");return a(zo(e))}if(!f&&(!u.merge||u.readOnly||u.runId!==e.runId||u.repoFullName!==l.repoFullName||u.merge.source==="agent"&&(u.generation===null||u.fenceId===null)))throw Error("local_device_gh_merge_authority_invalid");let g=Er(e.root),k=yt(g),O=Date.parse(e.leaseUntil);if(!Number.isFinite(O)||O<=Date.now())throw Error("local_device_gh_lease_expired");let w=Er(Jo());if(w===g||w.startsWith(g+vn))throw Error("local_device_gh_private_scope_unavailable");let P=Ko(Dr(w,"reason-gh-merge-"));try{zr(P);let N=()=>{if(e.signal.throwIfAborted(),Date.now()>=O)throw Error("local_device_gh_lease_expired");let T=yt(e.root);if(T.isSymbolicLink()||T.dev!==k.dev||T.ino!==k.ino||Er(e.root)!==g)throw Error("local_device_gh_authority_changed");zr(P)};return N(),await a({root:g,readOnly:!1,privateDirectory:P,forbiddenSecretValues:[],signal:e.signal,deadlineMs:O,assertCurrent:N})}finally{yn(P,{recursive:!0,force:!0})}}var Qo=43200000;function Kr(e){return Number.isSafeInteger(e)&&Math.abs(e)<=8640000000000000?e:null}function Xo(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function Zo(e,a){return Object.keys(e).length===a.length&&a.every((l)=>Object.hasOwn(e,l))}function za(e){if(!Xo(e)||!Zo(e,["version","outcome","clock_source","validation_now_ms","expiry_ms","remaining_ms","maximum_lifetime_ms","cli_artifact"])||e.version!==1||e.maximum_lifetime_ms!==43200000||typeof e.outcome!=="string"||!["accepted","parse","noncanonical","expired","over_cap"].includes(e.outcome)||typeof e.clock_source!=="string"||!["date_now","injected"].includes(e.clock_source))return null;for(let u of["validation_now_ms","expiry_ms"]){let f=e[u];if(f!==null&&(typeof f!=="number"||Kr(f)===null))return null}if(e.remaining_ms!==null&&(typeof e.remaining_ms!=="number"||!Number.isSafeInteger(e.remaining_ms)))return null;let a=typeof e.expiry_ms==="number"&&typeof e.validation_now_ms==="number"?e.expiry_ms-e.validation_now_ms:null;if(e.remaining_ms!==(a!==null&&Number.isSafeInteger(a)?a:null))return null;if(e.outcome==="parse"&&e.expiry_ms!==null)return null;if(e.outcome!=="parse"&&e.expiry_ms===null)return null;if(e.outcome==="expired"&&!(typeof a==="number"&&a<=0))return null;if(e.outcome==="over_cap"&&!(typeof a==="number"&&a>43200000))return null;if(e.outcome==="accepted"&&!(typeof a==="number"&&a>0&&a<=43200000))return null;let l=e.cli_artifact;if(!Xo(l)||!Zo(l,["kind","status","sha256","observed_at_ms"])||l.observed_at_ms!==null&&(typeof l.observed_at_ms!=="number"||Kr(l.observed_at_ms)===null))return null;if(l.kind==="entrypoint_file"){if(l.status!=="observed"||typeof l.sha256!=="string"||!/^[a-f0-9]{64}$/.test(l.sha256)||l.observed_at_ms===null)return null}else if(l.kind!=="unavailable"||l.sha256!==null||typeof l.status!=="string"||!["unsupported_entrypoint","read_failed","file_changed","size_limit","time_limit"].includes(l.status))return null;return e}var En=h({kind:c(["workspace_source","mcp_control"]),target_revision:o().int().nonnegative(),root_grant_revision:o().int().positive()}),es=new RegExp(pr.tokenPattern),va=h({token_url:Mr().max(2048),request_token:t().min(1).max(8192).regex(es),aws_credentials_url:Mr().max(2048).nullable()});function rs(e,a){let l=(u,f)=>{try{let g=new URL(u);return g.origin===new URL(a).origin&&g.pathname===f&&!g.username&&!g.password&&!g.search&&!g.hash}catch{return!1}};if(!es.test(e.request_token)||!l(e.token_url,pr.tokenPath)||e.aws_credentials_url!==null&&!l(e.aws_credentials_url,pr.awsPath))return null;return{REASON_OIDC_TOKEN_URL:e.token_url,REASON_OIDC_REQUEST_TOKEN:e.request_token,...e.aws_credentials_url!==null?{AWS_CONTAINER_CREDENTIALS_FULL_URI:e.aws_credentials_url,AWS_CONTAINER_AUTHORIZATION_TOKEN:e.request_token}:{}}}function ts(e){return new TextEncoder().encode(e).byteLength}function ka(e){return ts(JSON.stringify(e)+`
|
|
4
|
+
`)}var ri=h({version:i(1),snapshot_id:V(),revision:o().int().positive(),run_id:t().min(1).max(160),device_id:V(),root_id:V(),binding:En.extend({target_generation:o().int().positive(),target_fence_id:V()}),expires_at:I.datetime({offset:!0}),variables:$e(t().max(128).regex(tn),t().refine((e)=>!e.includes("\x00")&&ts(e)<=Re.valueBytes)).refine((e)=>Object.keys(e).length<=Re.variables),github_auth:i("local_gh").optional(),git:h({base_url:Mr().max(2048),token:t().min(1).max(4096).regex(/^[A-Za-z0-9._~-]+$/),expires_at:I.datetime({offset:!0})}).nullable(),cloud_access:va.optional()}).refine((e)=>e.github_auth!=="local_gh"||e.git===null,"conflicting git authority").refine((e)=>ka(e)<=Re.snapshotBytes,"snapshot too large");import{spawn as Sa}from"child_process";import{basename as Ea,isAbsolute as Ef}from"path";var Ra=0,ns=120000,os=15000,Oa=65536;function Rn(e=process.execPath,a=process.argv[1]){let l=Ea(e),u=(l.startsWith("bun")||l.startsWith("node"))&&typeof a==="string"&&a.length>0;return{command:e,prefix:u?[a]:[]}}function Yr(e={}){let{command:a,prefix:l}=Rn(e.executablePath,e.sourceEntrypoint),u=e.spawnProcess??Sa,f=e.now??Date.now,g=null,k=0,O=!1,w=(N)=>{try{N.kill("SIGKILL")}catch{}},P=()=>{if(O)return;if(g&&f()-k<ns-os)return;if(g){let T=g;g=null,w(T)}let N;try{N=u(a,[...l,"__device","__hands-worker","--handoff-fd",String(Ra)],{cwd:"/",env:{PATH:process.env.PATH??"/usr/local/bin:/usr/bin:/bin"},shell:!1,stdio:["pipe","ignore","pipe"]})}catch{return}g=N,k=f(),N.on("error",()=>{if(g===N)g=null}),N.once("exit",(T,S)=>{if(g!==N)return;g=null,e.log?.("hands.worker_prespawn_exited",{exit_code:T,exit_signal:S})}),e.log?.("hands.worker_prespawned",{pid:N.pid??null})};return{arm:P,take(N){let T=g;if(!T||O)return null;let S=N.args.at(-1),M=N.options.env,j=N.options.cwd,C=[...l,"__device","__hands-worker","--config"];if(N.command!==a||N.args.length!==C.length+1||C.some((re,we)=>N.args[we]!==re)||typeof S!=="string"||!M||typeof j!=="string"||N.options.shell||JSON.stringify(N.options.stdio)!==JSON.stringify(["ignore","ignore","pipe"]))return null;g=null;let z=T.stdin,Q={configPath:S,cwd:j,env:Object.fromEntries(Object.entries(M).filter((re)=>typeof re[1]==="string"))},Y=JSON.stringify(Q);if(T.exitCode!==null||T.signalCode!==null||!z||z.destroyed||f()-k>=ns-os||Buffer.byteLength(Y,"utf8")>Oa)return w(T),null;return z.on("error",()=>{return}),z.end(Y),T.once("exit",()=>{P()}),e.log?.("hands.worker_prespawn_taken",{pid:T.pid??null}),T},adopt(N){N.once("exit",()=>{P()})},close(){if(O=!0,g)w(g);g=null}}}import{accessSync as Da,constants as Ca,statSync as Na}from"fs";import{homedir as Za,tmpdir as Qa,userInfo as ec}from"os";import{delimiter as rc,win32 as nc}from"path";var xa=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 Pa=["BUN_CONFIG_","BUN_INSPECT","DYLD_","NODE_DEBUG"],Ia=new Set(["BUN_INSTALL"]);var Aa=/^--(?:max-old-space-size|max-semi-space-size|stack-size)=\d{1,9}$/;function Ta(e){return(e??"").split(/\s+/).filter(Boolean).every((a)=>Aa.test(a.replaceAll("_","-")))}function dt(e){return Object.keys(e).filter((a)=>xa.has(a)&&!(a==="NODE_OPTIONS"&&Ta(e[a]))||Pa.some((l)=>a.startsWith(l))||a.startsWith("BUN_")&&!Ia.has(a)).sort()}var oc=new Set(["HOME","PATH","PWD","OLDPWD","SHLVL","_","TMPDIR","TMP","TEMP","SHELL","BASH_ENV","ENV","ZDOTDIR","PROMPT_COMMAND","IFS","CDPATH","GLOBIGNORE","SHELLOPTS","BASHOPTS","NODE_PATH"]),sc=/^(?:ARA_|REASON_|PI_|GIT_|GH_|GITHUB_|LD_|DYLD_|BUN_|BASH_FUNC_|SSH_)/,ac=/TOKEN|SECRET|PASSW|PASSPHRASE|CREDENTIAL|API_?KEY|ACCESS_?KEY|PRIVATE_?KEY|AUTH/i,cc=/^[A-Za-z_][A-Za-z0-9_]*$/;function ii(e=process.env){let a=(f)=>{if(!(process.platform==="win32"?nc.isAbsolute(f):f.startsWith("/"))||/[\0\r\n]/.test(f)||f.length>32768)throw Error("invalid_host_execution_environment");return f};if(e.PATH!==void 0&&(/[\0\r\n]/.test(e.PATH)||e.PATH.length>32768))throw Error("invalid_host_execution_environment");let l=new Set(dt(e)),u=Object.fromEntries(Object.entries(e).filter((f)=>{let[g,k]=f;return typeof k==="string"&&k.length<=32768&&!k.includes("\x00")&&g.length<=128&&cc.test(g)&&!l.has(g)&&!oc.has(g)&&!sc.test(g)&&!ac.test(g)}).sort(([f],[g])=>f.localeCompare(g)).slice(0,512));return{home:a(e.HOME||(process.platform==="win32"?e.USERPROFILE:void 0)||Za()),path:((f)=>process.platform==="win32"?Po(f):f)(pi(e.PATH??"").join(rc)||Bt),temporaryDirectory:a(e.TMPDIR||e.TMP||e.TEMP||Qa()),variables:u}}function oi(e=process.env,a=()=>ec().shell){if(process.platform==="win32")return Xe();let l=(f)=>{if(!f||!/^\/[A-Za-z0-9._/-]*\/(?:bash|zsh)$/.test(f))return!1;try{return Da(f,Ca.X_OK),Na(f).isFile()}catch{return!1}};if(l(e.SHELL))return e.SHELL;let u;try{u=a()}catch{u=void 0}return l(u)?u:"/bin/zsh"}import{readdir as dc}from"fs/promises";var lc=15000;function wo(e){let a=e instanceof Error&&"code"in e?e.code:null;return a==="EPERM"||a==="EACCES"}function bo(e){return new r("folder_access_denied",`macOS blocked Reason from opening ${e}. Allow Reason in System Settings \u203A Privacy & Security \u203A Files and Folders `+"(or Full Disk Access), then restart the Reason app or worker on this Mac and try again: until it restarts it keeps the earlier refusal.")}async function ss(e,{timeoutMs:a=lc,open:l=(u)=>dc(u)}={}){let u,f=new Promise((g)=>{u=setTimeout(()=>g("pending"),a)});try{if(await Promise.race([l(e).then(()=>"open"),f])==="pending")throw new r("folder_access_pending",`macOS is asking whether Reason may open ${e}. Answer the prompt on this Mac, then try again.`)}catch(g){if(wo(g))throw bo(e);if(g instanceof r)throw g}finally{clearTimeout(u)}}import{chmodSync as Jc,closeSync as Vc,constants as Ln,fstatSync as qc,lstatSync as Os,openSync as Yc,readSync as Xc,realpathSync as Bn,unlinkSync as Zc}from"fs";import{lookup as Qc}from"dns/promises";import{createRequire as ed}from"module";import{request as rd}from"http";import{request as td}from"https";import Lr from"net";import{platform as Ts}from"os";import{basename as nd,extname as od,isAbsolute as xs,relative as jn,resolve as qr,sep as Mn}from"path";var is=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(),as=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 Gr}from"buffer";import{randomUUID as uc}from"crypto";class us extends Error{code;constructor(e){super(e==="hands_repl_private_profile_attribute_denied"?"Private browser attribute read denied.":e);this.code=e;this.name="HandsReplBrowserDispatcherError"}}var fs=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),cs=/^hands_[A-Za-z0-9_-]{8,128}$/,fc=2048,ps=32,_s=1e4,pc=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function _c(e){let a=e.split("+"),l=(a.pop()??"").replace(/^Key/,"").toLowerCase();if(l==="f12")return!0;if(a.some((u)=>["Control","ControlOrMeta","Meta"].includes(u))&&["l","n","t","j","i","p","s","w","u","o","r","tab","pageup","pagedown"].includes(l))return!0;if(a.some((u)=>["Control","ControlOrMeta","Meta"].includes(u))&&a.includes("Shift")&&l==="c")return!0;return a.includes("Alt")&&["d","arrowleft","arrowright","home"].includes(l)}var mc=(e)=>{let a=e.closest("a[href],area[href]");return{password:e.tagName==="INPUT"&&e.type==="password",executableLink:Boolean(a&&!/^(https?:|about:blank)/i.test(a.href))}},ms={browser:{close:{returns:"void"},contexts:{returns:"context[]"},isConnected:{returns:"json"},version:{returns:"json"}},context:{addCookies:{returns:"void"},addInitScript:{returns:"void"},browser:{returns:"browser"},clearCookies:{returns:"void"},clearPermissions:{returns:"void"},close:{returns:"void"},cookies:{returns:"json"},grantPermissions:{returns:"void"},newPage:{returns:"page"},pages:{returns:"page[]"},setDefaultNavigationTimeout:{returns:"void"},setDefaultTimeout:{returns:"void"},setExtraHTTPHeaders:{returns:"void"},setGeolocation:{returns:"void"},setHTTPCredentials:{returns:"void"},setOffline:{returns:"void"},setViewportSize:{returns:"void"},storageState:{returns:"json"},viewportSize:{returns:"json",special:"contextViewportSize"}},page:{addInitScript:{returns:"void"},addScriptTag:{returns:"void"},addStyleTag:{returns:"void"},bringToFront:{returns:"void"},close:{returns:"void"},content:{returns:"json"},context:{returns:"context"},emulateMedia:{returns:"void"},evaluate:{returns:"json",requiresStringSource:!0},frame:{returns:"frame"},frameLocator:{returns:"frameLocator"},frames:{returns:"frame[]"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},goBack:{returns:"void"},goForward:{returns:"void"},goto:{returns:"void"},isClosed:{returns:"json"},locator:{returns:"locator"},mainFrame:{returns:"frame"},opener:{returns:"page"},pdf:{returns:"bytes"},reload:{returns:"void"},screenshot:{returns:"bytes"},selectOption:{returns:"json"},setContent:{returns:"void"},setDefaultNavigationTimeout:{returns:"void"},setDefaultTimeout:{returns:"void"},setExtraHTTPHeaders:{returns:"void"},setInputFiles:{returns:"void"},setViewportSize:{returns:"void"},title:{returns:"json"},url:{returns:"json"},viewportSize:{returns:"json"},waitForFunction:{returns:"void",requiresStringSource:!0},waitForLoadState:{returns:"void"},waitForNavigation:{returns:"void"},waitForTimeout:{returns:"void"},waitForURL:{returns:"void"}},locator:{all:{returns:"locator[]"},allInnerTexts:{returns:"json"},allTextContents:{returns:"json"},and:{returns:"locator"},ariaSnapshot:{returns:"json"},blur:{returns:"void"},boundingBox:{returns:"json"},check:{returns:"void"},clear:{returns:"void"},click:{returns:"void"},contentFrame:{returns:"frameLocator"},count:{returns:"json"},dblclick:{returns:"void"},dragTo:{returns:"void"},evaluate:{returns:"json",requiresStringSource:!0},evaluateAll:{returns:"json",requiresStringSource:!0},fill:{returns:"void"},filter:{returns:"locator"},first:{returns:"locator",special:"property"},focus:{returns:"void"},getAttribute:{returns:"json"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},hover:{returns:"void"},innerHTML:{returns:"json"},innerText:{returns:"json"},inputValue:{returns:"json"},isChecked:{returns:"json"},isEditable:{returns:"json"},isEnabled:{returns:"json"},isHidden:{returns:"json"},isVisible:{returns:"json"},last:{returns:"locator",special:"property"},locator:{returns:"locator"},nth:{returns:"locator"},or:{returns:"locator"},page:{returns:"page"},press:{returns:"void"},pressSequentially:{returns:"void"},scrollIntoViewIfNeeded:{returns:"void"},screenshot:{returns:"bytes"},selectOption:{returns:"json"},setInputFiles:{returns:"void"},tap:{returns:"void"},textContent:{returns:"json"},type:{returns:"void"},uncheck:{returns:"void"},waitFor:{returns:"void"}},frame:{addScriptTag:{returns:"void"},addStyleTag:{returns:"void"},childFrames:{returns:"frame[]"},content:{returns:"json"},evaluate:{returns:"json",requiresStringSource:!0},frameLocator:{returns:"frameLocator"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},goto:{returns:"void"},isDetached:{returns:"json"},locator:{returns:"locator"},name:{returns:"json"},page:{returns:"page"},parentFrame:{returns:"frame"},setContent:{returns:"void"},title:{returns:"json"},url:{returns:"json"},waitForFunction:{returns:"void",requiresStringSource:!0},waitForLoadState:{returns:"void"},waitForNavigation:{returns:"void"},waitForTimeout:{returns:"void"},waitForURL:{returns:"void"}},frameLocator:{getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},locator:{returns:"locator"},owner:{returns:"locator"}}};function ie(e){throw new us(e)}function ir(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let a=Object.getPrototypeOf(e);return a===Object.prototype||a===null}function Jr(e,a=0,l={nodes:0}){if(a>ps||++l.nodes>_s)ie("hands_repl_json_too_complex");if(e===null||typeof e==="boolean"||typeof e==="string")return;if(typeof e==="number"){if(!Number.isFinite(e))ie("hands_repl_invalid_json");return}if(Array.isArray(e)){for(let u of e)Jr(u,a+1,l);return}if(!ir(e))ie("hands_repl_invalid_json");for(let[u,f]of Object.entries(e)){if(fs.has(u))ie("hands_repl_invalid_json");Jr(f,a+1,l)}}function xn(e){return typeof e==="string"&&Object.hasOwn(ms,e)}function hc(e){if(!e.endsWith("[]"))return null;let a=e.slice(0,-2);return xn(a)?a:null}function ds(e){return ir(e)&&Object.keys(e).length===2&&e.$handsRepl==="bytes"&&typeof e.base64==="string"}function gc(e){return ir(e)&&Object.keys(e).length===1&&e.$handsRepl==="undefined"}function ls(e){return ir(e)&&Object.keys(e).length===2&&e.$handsRepl==="routeFulfill"&&"options"in e}function Rr(e){return!!e&&typeof e==="object"}function Ft(){return Object.freeze({$handsRepl:"undefined"})}function bc(e){if(!Gr.isBuffer(e)&&!(e instanceof Uint8Array))ie("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:Gr.from(e).toString("base64")})}function hs(e){if(!Rr(e.browser)||!Rr(e.context)||!Rr(e.page))ie("hands_repl_invalid_roots");if(typeof e.a11y!=="function"||typeof e.view!=="function")ie("hands_repl_invalid_callbacks");let a=e.maxHandles??fc;if(!Number.isInteger(a)||a<3||a>1e5)ie("hands_repl_invalid_handle_limit");let l=new Map,u=new WeakMap,f=e.createOpaqueId??uc,g=(S,M)=>{if(!Rr(M))ie("hands_repl_expected_target");let j=u.get(M)?.get(S);if(j)return j;if(l.size>=a)ie("hands_repl_handle_limit");let C="";for(let Y=0;Y<16;Y+=1){let re=`hands_${f()}`;if(cs.test(re)&&!l.has(re)){C=re;break}}if(!C)ie("hands_repl_invalid_opaque_id");let z=Object.freeze({$handsRepl:"handle",id:C,kind:S});l.set(C,{kind:S,target:M});let Q=u.get(M);if(!Q)Q=new Map,u.set(M,Q);return Q.set(S,z),z},k=Object.freeze({browser:g("browser",e.browser),context:g("context",e.context),page:g("page",e.page)}),O=(S)=>{if(!ir(S)||Object.keys(S).length!==3||S.$handsRepl!=="handle"||typeof S.id!=="string"||!cs.test(S.id)||!xn(S.kind))ie("hands_repl_invalid_handle");let M=l.get(S.id);if(!M||M.kind!==S.kind)ie("hands_repl_unknown_handle");return M},w=(S,M=0,j=new Set)=>{if(M>ps)ie("hands_repl_json_too_complex");if(S===void 0)return Ft();if(S===null||typeof S==="boolean"||typeof S==="string")return S;if(typeof S==="number"){if(!Number.isFinite(S))ie("hands_repl_non_json_result");return S}if(Array.isArray(S)){if(j.has(S))ie("hands_repl_cyclic_result");j.add(S);try{return S.map((C)=>w(C,M+1,j))}finally{j.delete(S)}}if(!ir(S))ie("hands_repl_non_json_result");if(j.has(S))ie("hands_repl_cyclic_result");j.add(S);try{let C=Object.create(null);for(let z of Object.keys(S)){let Q=Object.getOwnPropertyDescriptor(S,z);if(!Q||!("value"in Q))continue;C[z]=w(Q.value,M+1,j)}return C}finally{j.delete(S)}},P=(S,M)=>{if(M==="void")return Ft();if(M==="json")return w(S);if(M==="bytes")return bc(S);let j=hc(M);if(j){if(!Array.isArray(S))ie("hands_repl_expected_target_list");if(j==="context"&&S.some((C)=>C!==e.context))ie("hands_repl_foreign_context");return S.map((C)=>g(j,C))}if(S===null||S===void 0)return Ft();if(!xn(M))ie("hands_repl_invalid_return_kind");if(M==="context"&&S!==e.context)ie("hands_repl_foreign_context");return g(M,S)},N=(S)=>{if(ir(S)&&S.$handsRepl==="handle")return O(S).target;if(ds(S))return Gr.from(S.base64,"base64");if(gc(S))return;if(ls(S))ie("hands_repl_route_fulfill_only");if(Array.isArray(S))return S.map(N);if(!ir(S))return S;let M=Object.create(null);for(let[j,C]of Object.entries(S))M[j]=N(C);return M};return Object.freeze({roots:k,dispatch:async(S)=>{if(!ir(S)||typeof S.type!=="string")ie("hands_repl_invalid_request");if(S.type==="a11y"){let Z=S.target===void 0?l.get(k.page.id):O(S.target);if(!Z||Z.kind!=="page"&&Z.kind!=="locator")ie("hands_repl_invalid_a11y_target");return w(await e.a11y(Z.target))}if(S.type==="view"){if(Jr(S.source),S.options!==void 0)Jr(S.options);let Z=ds(S.source)?Gr.from(S.source.base64,"base64"):S.source;if(e.privateProfile&&!Gr.isBuffer(Z))ie("hands_repl_profile_requires_image_bytes");return w(await e.view(Z,S.options))}if(S.type!=="call")ie("hands_repl_invalid_request");if(typeof S.method!=="string"||S.method.length===0||S.method.length>128)ie("hands_repl_invalid_method");if(fs.has(S.method))ie("hands_repl_forbidden_method");let M=O(S.target),j=S.args??[];if(!Array.isArray(j))ie("hands_repl_invalid_arguments");if(Jr(j),M.kind==="page"&&S.method==="captureScreenshot"){if(j.length!==0)ie("hands_repl_invalid_arguments");if(!e.screenshotExport)ie("hands_repl_screenshot_export_unavailable");return w(await e.screenshotExport(M.target))}if(M.kind==="context"&&["startRecording","stopRecording"].includes(S.method)){if(!e.recording||M.target!==e.context)ie("hands_repl_recording_unavailable");if(j.length>(S.method==="startRecording"?1:0))ie("hands_repl_invalid_arguments");return w(S.method==="startRecording"?await e.recording.start(j[0]):await e.recording.stop())}if(e.privateProfile){let Z=S.method;if(["evaluate","evaluateAll","waitForFunction","addInitScript","addScriptTag","addStyleTag","setContent","setInputFiles","route","content","cookies","storageState","addCookies","clearCookies","setExtraHTTPHeaders","setHTTPCredentials","grantPermissions","clearPermissions","innerHTML","textContent","allTextContents"].includes(Z)||M.kind==="browser"&&Z==="close"||M.kind==="context"&&Z==="close")ie("hands_repl_private_profile_method_denied");if(M.kind==="browser"&&Z==="contexts")return P([e.context],"context[]");if((Z==="screenshot"||Z==="pdf")&&ir(j[0])&&(("path"in j[0])||("style"in j[0])))ie("hands_repl_private_profile_path_denied");if(Z==="goto"){if(typeof j[0]!=="string")ie("hands_repl_private_profile_url_denied");try{let be=new URL(j[0]);if(!["http:","https:"].includes(be.protocol)&&j[0]!=="about:blank")ie("hands_repl_private_profile_url_denied")}catch{ie("hands_repl_private_profile_url_denied")}}if(Z==="getAttribute"&&(typeof j[0]!=="string"||!pc.has(j[0].toLowerCase())))ie("hands_repl_private_profile_attribute_denied");if(M.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(Z)){let be=[M.target];if(Z==="allInnerTexts"){let ke=Reflect.get(M.target,"all");if(typeof ke!=="function")ie("hands_repl_private_profile_probe_unavailable");let ae=await Reflect.apply(ke,M.target,[]);if(!Array.isArray(ae)||ae.length>_s||!ae.every(Rr))ie("hands_repl_private_profile_probe_unavailable");be=ae}for(let ke of be){let ae=Reflect.get(ke,"isVisible");if(typeof ae!=="function"||!await Reflect.apply(ae,ke,[]))ie("hands_repl_private_profile_hidden_value_denied")}}if(Z==="press"&&typeof j[0]==="string"&&_c(j[0]))ie("hands_repl_private_profile_browser_shortcut_denied");if(M.kind==="locator"&&["inputValue","click","dblclick","tap","press"].includes(Z)){let be=Reflect.get(M.target,"evaluate");if(typeof be!=="function")ie("hands_repl_private_profile_probe_unavailable");let ke=await Reflect.apply(be,M.target,[mc]);if(!ir(ke)||typeof ke.password!=="boolean"||typeof ke.executableLink!=="boolean")ie("hands_repl_private_profile_probe_unavailable");if(Z==="inputValue"&&ke.password)ie("hands_repl_private_profile_password_denied");if(Z!=="inputValue"&&ke.executableLink)ie("hands_repl_private_profile_url_denied");if(Z==="inputValue"){let ae=Reflect.get(M.target,"isVisible");if(typeof ae!=="function"||!await Reflect.apply(ae,M.target,[]))ie("hands_repl_private_profile_hidden_value_denied")}}}let C=ms[M.kind][S.method];if(!C)ie("hands_repl_method_not_allowed");if(C.requiresStringSource&&typeof j[0]!=="string")ie("hands_repl_string_source_required");if(M.kind==="browser"&&S.method==="contexts")return[k.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(S.method)&&j.some((Z)=>ir(Z)&&("path"in Z)))ie("hands_repl_file_path_not_allowed");if(S.method==="goto"&&typeof j[0]==="string"){let Z;try{Z=new URL(j[0]).protocol}catch{ie("hands_repl_invalid_url")}if(!["http:","https:","data:","about:","blob:"].includes(Z))ie("hands_repl_file_path_not_allowed")}if(C.special==="contextViewportSize"){let Z=Reflect.get(M.target,"pages");if(typeof Z!=="function")ie("hands_repl_method_unavailable");let be=await Reflect.apply(Z,M.target,[]),ke=Array.isArray(be)?be[0]:void 0,ae=Rr(ke)?Reflect.get(ke,"viewportSize"):void 0;if(typeof ae!=="function")return Ft();return P(await Reflect.apply(ae,ke,[]),C.returns)}if(C.special==="property"){let Z=Reflect.get(M.target,S.method);return P(typeof Z==="function"?Reflect.apply(Z,M.target,[]):Z,C.returns)}let z=Reflect.get(M.target,S.method);if(typeof z!=="function")ie("hands_repl_method_unavailable");if(C.special==="route"){let Z=j[1];if(!ls(Z))ie("hands_repl_invalid_route_handler");Jr(Z.options);let be=N(Z.options),ke=async(q)=>{if(!Rr(q))ie("hands_repl_invalid_route");let ne=Reflect.get(q,"fulfill");if(typeof ne!=="function")ie("hands_repl_invalid_route");await Reflect.apply(ne,q,[be])},ae=[N(j[0]??null),ke],W=await Reflect.apply(z,M.target,ae);return P(W,C.returns)}let Q=j.map(N);if(S.method==="setInputFiles"){let Z=M.kind==="locator"?0:1,be=async(ae)=>{if(typeof ae!=="string"){if(!ir(ae)||typeof ae.name!=="string"||typeof ae.mimeType!=="string"||!Gr.isBuffer(ae.buffer))ie("hands_repl_invalid_file_input");return ae}if(!e.readWorkspaceFile)ie("hands_repl_workspace_required");return e.readWorkspaceFile(ae)},ke=Q[Z];Q[Z]=Array.isArray(ke)?await Promise.all(ke.map(be)):await be(ke)}if(S.method==="goto")await e.beforeNavigation?.();let Y=e.actionRecorder?.(),re=await Reflect.apply(z,M.target,Q),Ie={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"}[S.method];if(Ie){let Z=Reflect.get(M.target,"page"),be=M.kind==="page"?M.target:typeof Z==="function"?Reflect.apply(Z,M.target,[]):void 0;Y?.(Ie,Rr(be)?be:void 0)}return P(re,C.returns)}})}import{isIP as ys}from"net";import{Resolver as wc}from"dns/promises";import{isIP as Kt}from"net";var yc=[["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 Pn(e){if(Kt(e)!==4)return null;let a=e.split(".");if(a.length!==4)return null;let l=0;for(let u of a){let f=Number(u);if(!Number.isInteger(f)||f<0||f>255)return null;l=l*256+f}return l>>>0}function vc(e,a,l){let u=Pn(a);if(u===null)return!1;let f=l===0?0:4294967295<<32-l>>>0;return(e&f)>>>0===(u&f)>>>0}function gs(e){let a=Pn(e);if(a===null)return!0;return yc.some(([l,u])=>vc(a,l,u))}function kc(e){if(Kt(e)!==6)return null;let a=e.toLowerCase(),l=a.indexOf("%");if(l>=0)a=a.slice(0,l);let u=[],f=a.lastIndexOf(":"),g=f>=0?a.slice(f+1):"";if(g.includes(".")){let S=Pn(g);if(S===null)return null;u=[S>>>16&65535,S&65535],a=a.slice(0,f+1)+"0:0"}let k=a.split("::");if(k.length>2)return null;let O=(S)=>{if(S==="")return[];let M=[];for(let j of S.split(":")){if(j===""||j.length>4||!/^[0-9a-f]+$/.test(j))return null;M.push(Number.parseInt(j,16))}return M},w=O(k[0]??"");if(w===null)return null;if(k.length===1){let S=w;if(S.length!==8)return null;return u.length>0?S.slice(0,6).concat(u):S}let P=O(k[1]??"");if(P===null)return null;let N=8-w.length-P.length;if(N<0)return null;let T=w.concat(Array(N).fill(0),P);if(T.length!==8)return null;return u.length>0?T.slice(0,6).concat(u):T}function Sc(e,a){return`${e>>8&255}.${e&255}.${a>>8&255}.${a&255}`}function Ec(e){let a=kc(e);if(a===null)return!0;let[l,u,f]=a;if((l&57344)!==8192)return!0;if(l===8193&&(u&65024)===0)return!0;if(l===8193&&u===3512)return!0;if(l===16383&&(u&61440)===0)return!0;if(l===8194)return gs(Sc(u,f));return!1}function si(e){return e.replace(/^\[|\]$/g,"")}function Ut(e){let a=si(e.trim()),l=Kt(a);if(l===4)return gs(a);if(l===6)return Ec(a);return!0}function bs(e){if(e instanceof Error&&e.name==="TimeoutError")return"dns_timeout";switch(typeof e==="object"&&e!==null&&"code"in e?e.code:void 0){case"ENOTFOUND":return"dns_not_found";case"ENODATA":return"dns_empty";case"EAI_AGAIN":case"ESERVFAIL":case"ECONNREFUSED":return"dns_temporary";case"ETIMEOUT":case"ETIMEDOUT":return"dns_timeout";default:return"dns_failed"}}var ws=5000;function Rc(e){return async(a,l)=>{if(l?.aborted)throw Error("aborted");let u=new wc({timeout:ws,tries:1});if(e)u.setServers(e);let f=()=>u.cancel();l?.addEventListener("abort",f,{once:!0});try{let[g,k]=await Promise.allSettled([u.resolve4(a),u.resolve6(a)]),O=[...g.status==="fulfilled"?g.value:[],...k.status==="fulfilled"?k.value:[]];if(O.length>0)return O;let w=[g,k].flatMap((N)=>N.status==="rejected"?[N.reason]:[]);throw w.find((N)=>["dns_temporary","dns_timeout"].includes(bs(N)))??w[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{l?.removeEventListener("abort",f)}}}var Oc=Rc();async function xc(e,a,l,u){if(u?.aborted)throw Error("aborted");let f=new AbortController,g,k,O=a(e,f.signal);O.catch(()=>{});try{return await Promise.race([O,new Promise((w,P)=>{if(g=setTimeout(()=>P(new DOMException("DNS lookup timed out","TimeoutError")),l),u)k=()=>P(Error("aborted")),u.addEventListener("abort",k,{once:!0})})])}finally{if(g!==void 0)clearTimeout(g);if(u&&k)u.removeEventListener("abort",k);f.abort()}}async function Ka(e,a=Oc,l){let u=si(e);if(Kt(u))return Ut(u)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[u]};let f;try{f=await xc(u,a,ws,l)}catch(g){return{ok:!1,reason:l?.aborted?l.reason instanceof Error&&l.reason.name==="TimeoutError"?"dns_timeout":"aborted":bs(g)}}if(f.length===0)return{ok:!1,reason:"dns_empty"};if(f.some(Ut))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:f}}var Pc=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function In(e){return e.length<=253&&Pc.test(e.toLowerCase())}function Ic(e,a){let l=e.trim().toLowerCase();if(!In(l))return!1;if(l.startsWith("*.")){let u=l.slice(2);return a===u||a.endsWith(`.${u}`)}return l===a}function Ac(e){let a=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(e);if(!a)return null;let l=a.slice(1).map(Number);return l.some((u)=>u>255)?null:l}function An(e,a=[]){let l=(u)=>{if(u=u.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,""),!u.includes(":"))return u;try{u=new URL(`http://[${u}]/`).hostname.slice(1,-1)}catch{return u}let f=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(u);if(!f)return u;let g=parseInt(f[1],16),k=parseInt(f[2],16);return`${g>>8}.${g&255}.${k>>8}.${k&255}`};return a.some((u)=>l(u)===l(e))}function Hr(e){e=e.toLowerCase().replace(/^\[|\]$/g,"");let a=Ac(e);if(a){let[g,k,O]=a;if(g===127)return"loopback";return g===0||g===10||g>=224||g===100&&k>=64&&k<=127||g===169&&k===254||g===172&&k>=16&&k<=31||g===192&&(k===168||k===0&&(O===0||O===2)||k===88&&O===99)||g===198&&(k===18||k===19||k===51&&O===100)||g===203&&k===0&&O===113?"private":"public"}if(!e.includes(":"))return"hostname";try{e=new URL(`http://[${e}]/`).hostname.slice(1,-1)}catch{return"private"}if(e==="::1")return"loopback";let l=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(e);if(l){let g=parseInt(l[1],16),k=parseInt(l[2],16);return Hr(`${g>>8}.${g&255}.${k>>8}.${k&255}`)==="public"?"public":"private"}let[u,f=0]=e.split(":").map((g)=>parseInt(g||"0",16));return u<8192||u>16383||u===8194||u===8193&&(f<512||f===3512)||u===16383&&f<4096?"private":"public"}function $t(e,a){let l;try{l=new URL(e)}catch{return{allowed:!1,url:e,host:null,reason:"invalid_url"}}if(["about:","data:","blob:"].includes(l.protocol))return{allowed:!0,url:e,host:null,reason:"local_document"};if(!["http:","https:","ws:","wss:"].includes(l.protocol))return{allowed:!1,url:e,host:l.hostname||null,reason:"unsupported_protocol"};let u=l.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(a.mode==="off")return{allowed:!0,url:e,host:u,reason:"policy_off"};let f=(O)=>({allowed:!1,url:e,host:u,reason:O});if(l.username||l.password)return f("invalid_url");if(a.mode==="public_web"){let O=Hr(u)!=="public"&&Hr(u)!=="hostname"||u==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(u)||!u.includes(".")&&!ys(u)||Boolean(ys(u)&&Ut(u));return{allowed:!O,url:e,host:u,reason:O?"private_network":"public_web"}}let g=Number(l.port||(["https:","wss:"].includes(l.protocol)?443:80));if(a.deniedPorts?.includes(g)||An(u,a.deniedHosts))return f("destination_not_allowed");let k=Hr(u);if(k==="private"||["local","internal","arpa"].some((O)=>u===O||u.endsWith(`.${O}`)))return f("private_network");if(k==="loopback"||u==="localhost"||u.endsWith(".localhost"))return a.allowedLoopbackPorts?.includes(g)?{allowed:!0,url:e,host:u,reason:"loopback"}:f("destination_not_allowed");if(a.allowedDomains.some((O)=>Ic(O,u)))return{allowed:!0,url:e,host:u,reason:"allowed_domain"};return{allowed:!1,url:e,host:u,reason:"destination_not_allowed"}}import vs from"child_process";import{accessSync as Tc,constants as Dc,readFileSync as Cc,statSync as ks}from"fs";import{createRequire as Ss}from"module";import{homedir as Tn}from"os";import{dirname as Hc,isAbsolute as Dn,join as Nr,resolve as Nc,win32 as jc}from"path";var Gt=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:On.dependencies["playwright-core"],browser:"chromium"}),Es=["/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"],Cn=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function Mc(e=process.env){let a=[e.ProgramFiles??"C:\\Program Files",e["ProgramFiles(x86)"]??"C:\\Program Files (x86)"],l=e.LOCALAPPDATA?[e.LOCALAPPDATA]:[],u=(f,...g)=>f.map((k)=>jc.join(k,...g));return[...u([...a,...l],"Google","Chrome","Application","chrome.exe"),...u(a,"Microsoft","Edge","Application","msedge.exe"),...u([...a,...l],"BraveSoftware","Brave-Browser","Application","brave.exe")]}function vt(e){try{return Tc(e,Dc.X_OK),Dn(e)&&ks(e).isFile()}catch{return!1}}function Hn(e,a=process.platform){let l=a==="darwin"?Es:a==="linux"?Cn:a==="win32"?Mc():null;return l?(e??l).find(vt)??null:null}function Fc(){if(!process.versions.bun)return;let e=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,e))return;let a=[];vs.spawn=new Proxy(vs.spawn,{apply(l,u,f){let g=Reflect.apply(l,u,f),k=f[1],O=f[2]?.stdio;if(Array.isArray(k)&&k.includes("--remote-debugging-pipe")&&Array.isArray(O)&&O[3]==="pipe"&&O[4]==="pipe")a.push(g);return g}}),Object.defineProperty(globalThis,e,{value:a})}async function Jt(e){if(Fc(),e!==void 0){if(!Dn(e))throw Error("hands_browser_driver_path_must_be_absolute");let u=Nr(e,"package.json"),f=JSON.parse(Cc(u,"utf8"));if(f.name!==Gt.driver)throw Error("hands_browser_wrong_driver");let g=Ss(u)(e),k=g.default?.chromium??g.chromium;if(!k)throw Error("hands_browser_missing_chromium");return{version:f.version,chromium:k}}let[a,l]=await Promise.all([import("./index-03p9c17x.js"),import("./package-vwvzjtn0.js").then((m)=>la(m.default,1))]);return{version:l.default.version,chromium:a.chromium}}var Uc=(e,a=Gt.driverVersion)=>({status:"unavailable",reason:e,expectedDriverVersion:a}),Kc=(e)=>e.loadDriver?.()??Jt(e.driverModuleDirectory),Gc={"1.60.0":"1223"};function Ga(){let e=process.platform,a=Gc[Gt.driverVersion];if(!a||e!=="linux"&&e!=="darwin"&&e!=="win32")return!1;let l=(u)=>process.env[u]??process.env[`npm_config_${u.toLowerCase()}`]??process.env[`npm_package_config_${u.toLowerCase()}`];try{let u=l("PLAYWRIGHT_BROWSERS_PATH"),f=u==="0"?Nr(Hc(Ss(import.meta.url).resolve("playwright-core/package.json")),".local-browsers"):u?Nc(l("INIT_CWD")||process.cwd(),u):Nr(e==="darwin"?Nr(Tn(),"Library","Caches"):e==="win32"?process.env.LOCALAPPDATA||Nr(Tn(),"AppData","Local"):process.env.XDG_CACHE_HOME||Nr(Tn(),".cache"),"ms-playwright");return ks(Nr(f,`chromium-${a}`,"INSTALLATION_COMPLETE")).isFile()}catch{return!1}}async function Vr(e={}){return Rs(e,Gt.driverVersion)}async function Nn(e,a={}){if(e.driverVersion!=="1.61.1"||!Dn(e.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return Rs({...a,driverModuleDirectory:e.driverModuleDirectory,allowSystemBrowser:!0},e.driverVersion)}async function Rs(e,a){let l=(w)=>Uc(w,a),u=e.platform??process.platform;if(u!=="linux"&&u!=="darwin"&&u!=="win32")return l("unsupported_platform");let f;try{f=await Kc(e)}catch{return l("driver_missing")}if(f.version!==a)return l("driver_version_mismatch");let g=(w,P)=>({status:"resolved",executablePath:w,source:P,driverVersion:f.version});if(e.executablePath!==void 0)return vt(e.executablePath)?g(e.executablePath,"configured"):l("executable_missing");let k=f.chromium.executablePath();if(vt(k))return g(k,"managed");let O=e.allowSystemBrowser===!0?Hn(e.systemCandidates,u):null;return O?g(O,"system"):l("executable_missing")}var sd=["/usr/local/bin/chromium",...Cn];function vo(e,a=Ts()){return Hn(e??(a==="linux"?sd:void 0),a)}async function id(){try{return(await Jt()).chromium}catch{return ed(import.meta.url)("playwright-core").chromium}}var ad=1048576,cd=105000,dd=20000,Ps=5000,ld=2000,ud=1000,fd=30000,Is=81920,pd={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function _d(e,a){let l=new URL(e.url()),u={...await e.allHeaders(),host:l.host};for(let f of Object.keys(u))if(/^(?:proxy-|connection$|upgrade$|transfer-encoding$|content-length$)/i.test(f))delete u[f];return new Promise((f,g)=>{let O=(l.protocol==="https:"?td:rd)(l,{method:e.method(),headers:u,agent:!1,lookup:(P,N,T)=>{let S=Lr.isIP(a);if(N.all)T(null,[{address:a,family:S}]);else T(null,a,S)}},(P)=>{let N=[],T=0;P.on("data",(S)=>{if(T+=S.length,T>33554432)O.destroy(Error("hands_browser_response_too_large"));else N.push(S)}),P.on("error",g),P.on("end",()=>{let S={};for(let[M,j]of Object.entries(P.headers))if(j!==void 0&&!["transfer-encoding","connection","content-length"].includes(M))S[M]=Array.isArray(j)?j.join(`
|
|
300
|
+
`):j;f({status:P.statusCode??502,headers:S,body:Buffer.concat(N)})})}),w=setTimeout(()=>O.destroy(Error("hands_browser_fetch_timeout")),fd);O.once("close",()=>clearTimeout(w)),O.on("error",g),O.end(e.postDataBuffer()??void 0)})}async function md(e,a,l=()=>{},u={lookup:(f)=>Qc(f,{all:!0}),fetch:_d}){let f=new WeakSet,g=new WeakMap,k=(O)=>{let w=g.get(O);if(w)return w;let P=(async()=>{if(!e.newCDPSession)return;let N=await e.newCDPSession(O),T=new Map;N.on("Network.loadingFinished",({requestId:S})=>T.delete(S)),N.on("Network.loadingFailed",({requestId:S})=>T.delete(S)),N.on("Fetch.requestPaused",async(S)=>{let M=S.networkId??S.requestId,j=S.redirectedRequestId?(T.get(M)??0)+1:0;T.set(M,j);let C=$t(S.request.url,a),z=a.mode==="enforce"&&Boolean(S.redirectedRequestId)&&C.host!==null&&!Lr.isIP(C.host),Q=!C.allowed?C:z?{...C,allowed:!1,reason:"destination_not_allowed"}:j>20?{...C,allowed:!1,reason:"redirect_not_supported"}:null;try{if(Q)l(Q),await N.send("Fetch.failRequest",{requestId:S.requestId,errorReason:"BlockedByClient"});else await N.send("Fetch.continueRequest",{requestId:S.requestId})}catch{await N.send("Fetch.failRequest",{requestId:S.requestId,errorReason:"Failed"}).catch(()=>{})}}),await N.send("Network.enable"),await N.send("Fetch.enable",{patterns:[{urlPattern:"*",requestStage:"Request"}]}),f.add(O)})();return g.set(O,P),P};return await e.route("**/*",async(O)=>{let w=O.request().url(),P=$t(w,a);if(P.allowed&&a.mode==="public_web"){await O.continue();return}let N=O.request();if(P.allowed&&P.host&&Lr.isIP(P.host)&&N.isNavigationRequest?.()){let T=N.frame();if(f.has(T.page())&&T===T.page().mainFrame()){await O.continue();return}}if(P.allowed&&(a.mode==="off"||P.reason==="local_document")){await O.continue();return}if(P.allowed&&P.host)try{let T=P.host,S=Hr(T),M,j=await(async()=>{if(S!=="hostname")return[{address:T,family:Lr.isIP(T)}];if(P.reason==="loopback")return[{address:"127.0.0.1",family:4}];try{return await Promise.race([u.lookup(T),new Promise((C,z)=>{M=setTimeout(()=>z(Error("hands_browser_dns_timeout")),5000)})])}finally{if(M)clearTimeout(M)}})();if(!j.length||j.some(({address:C})=>{let z=Hr(C);return!Lr.isIP(C)||a.mode==="enforce"&&An(C,a.deniedHosts)||(P.reason==="loopback"?z!=="loopback":z!=="public")}))P={...P,allowed:!1,reason:"private_network"};else{let C=await u.fetch(O.request(),j[0].address);if(C.status>=300&&C.status<400){let z=C.headers.location??w;try{z=new URL(z,w).href}catch{}let Q=$t(z,a);P=Q.allowed?{...Q,allowed:!1,reason:"redirect_not_supported"}:Q}else{await O.fulfill(C);return}}}catch{await O.abort("failed");return}l(P),await O.abort("blockedbyclient")}),await e.routeWebSocket("**/*",async(O)=>{let w=$t(O.url(),a);if(a.mode==="enforce"&&w.allowed&&(!w.host||!Lr.isIP(w.host)))w={...w,allowed:!1,reason:"destination_not_allowed"};if(w.allowed){O.connectToServer();return}l(w),await O.close({code:1008,reason:"Reason egress policy denied"})}),a.mode==="off"?void 0:{preparePage:k}}async function Ds(e,a=Ts(),l){if(l){let f=await Nn(l,{platform:a,systemCandidates:e});return f.status==="resolved"?f.executablePath:null}if(e!==void 0){let f=vo(e,a);if(f)return f}let u=await Vr({platform:a,systemCandidates:e,allowSystemBrowser:!0});return u.status==="resolved"?u.executablePath:null}function As(e,a){if(!e)throw Error("hands_repl_workspace_required");let l=Bn(e),u=qr(e),f=jn(u,qr(u,a)),k=f!==".."&&!f.startsWith(`..${Mn}`)&&!xs(f)?qr(l,f):qr(l,a);if(L(qr(u,a))||L(k))throw Error("hands_repl_protected_path");let O=(j)=>{let C=jn(l,j);return C!==""&&C!==".."&&!C.startsWith(`..${Mn}`)&&!xs(C)},w=Bn(k);if(L(w))throw Error("hands_repl_protected_path");if(!O(k)||!O(w))throw Error("hands_repl_file_outside_workspace");let P=jn(l,k).split(Mn),N=[l,...P.map((j,C)=>qr(l,...P.slice(0,C+1)))],T=N.map((j)=>Os(j));if(T.some((j)=>j.isSymbolicLink()))throw Error("hands_repl_file_symlink");let S=T[T.length-1];if(!S.isFile()||S.nlink!==1||S.size>16777216)throw Error("hands_repl_file_not_regular_or_too_large");let M=Yc(k,Ln.O_RDONLY|Ln.O_NOFOLLOW|Ln.O_NONBLOCK);try{let j=qc(M);if(j.dev!==S.dev||j.ino!==S.ino||!j.isFile())throw Error("hands_repl_file_changed");for(let Y=0;Y<N.length;Y++){let re=Os(N[Y]);if(re.dev!==T[Y].dev||re.ino!==T[Y].ino||re.isSymbolicLink())throw Error("hands_repl_file_changed")}if(!O(Bn(k)))throw Error("hands_repl_file_outside_workspace");let C=Buffer.alloc(16777217),z=0;while(z<C.length){let Y=Xc(M,C,z,C.length-z,null);if(!Y)break;z+=Y}if(z===C.length)throw Error("hands_repl_file_too_large");let Q=C.subarray(0,z);return{name:nd(k),mimeType:pd[od(k).toLowerCase()]??"application/octet-stream",buffer:Q}}finally{Vc(M)}}function et(e,a){e.end(`${JSON.stringify(a)}
|
|
301
|
+
`)}function Vt(e){try{Zc(e)}catch{}}async function Cs(e){if(e.managedBrowser&&e.driverModuleDirectory!==void 0)throw Error("hands_browser_ambiguous_driver_configuration");let a=e.launch||e.targetContext?null:e.managedBrowser?await Nn(e.managedBrowser,{executablePath:e.browserExecutablePath}):await Vr({executablePath:e.browserExecutablePath,driverModuleDirectory:e.driverModuleDirectory});if(a?.status==="unavailable")throw Error(`hands_browser_${a.reason}`);let l=a?.status==="resolved"?a.executablePath:e.browserExecutablePath;if(!l||!vt(l))throw Error("hands_browser_unavailable");let u=e.launch??(async(W)=>(e.targetContext?await id():(await Jt(e.managedBrowser?.driverModuleDirectory??e.driverModuleDirectory)).chromium).launch(W)),f=[],g={},k=null,O=null,w=null,P=null,N=!1,T=null,S=new Map,M=new WeakMap,j=null,C=()=>{if(N)throw Error("hands_repl_stopped");if(P)throw P},z=(W)=>{let q=M.get(W);if(q)return q;let ne=Promise.resolve().then(()=>W.close()).then(()=>{S.delete(W)});return M.set(W,ne),ne},Q=async()=>{let W=[...S.entries()].reverse(),q=j??=performance.now()+ud,ne=Promise.allSettled(W.filter(([,ee])=>ee==="context").map(([ee])=>z(ee))),ye;try{await Promise.race([ne,new Promise((ee)=>{ye=setTimeout(ee,Math.max(0,q-performance.now()))})])}finally{if(ye)clearTimeout(ye)}let le=await Promise.allSettled(W.map(([ee])=>z(ee))),fe=[];for(let[ee,me]of le.entries()){if(me.status!=="rejected")continue;let De=me.reason instanceof Error&&["Error","TimeoutError","ProtocolError"].includes(me.reason.name)?me.reason.name:"unknown";fe.push(Error(`hands_repl_close_failed: ${W[ee][1]}: ${De}`))}if(fe.length)throw AggregateError(fe,"hands_repl_stop_unconfirmed")},Y=(W,q)=>{if(S.set(W,q),N||P)z(W).catch(()=>{return}),C();return W},re=async()=>{let W=await u({executablePath:l,headless:!0,chromiumSandbox:e.managedBrowser===void 0,args:["--disable-background-networking","--disable-quic","--disable-dev-shm-usage","--disable-gpu","--disable-software-rasterizer","--dns-prefetch-disable","--force-webrtc-ip-handling-policy=disable_non_proxied_udp","--no-pings"]}),q=null;try{Y(W,"browser"),q=e.targetContext??Y(await W.newContext({viewport:{width:1440,height:900},screen:{width:1440,height:900},serviceWorkers:"block",acceptDownloads:!1}),"context");let ne=await md(q,e.networkPolicy??{mode:"off"},e.onEgressDenied);if(C(),ne){let ve=q.newPage.bind(q);q.newPage=async()=>{let We=await ve();return await ne.preparePage(We),We}}let le=q.pages()[0]??await q.newPage();await ne?.preparePage(le),C();let fe=async(ve=le)=>{let We=ve;if(typeof We.ariaSnapshot==="function")return We.ariaSnapshot({timeout:1e4});return le.locator("body").innerText({timeout:1e4})},ee=async(ve,We={})=>{let Ce=We&&typeof We==="object"&&!Array.isArray(We)?We:{},Je,mr="image/png";if(Buffer.isBuffer(ve)||ve instanceof Uint8Array)Je=Buffer.from(ve);else if(typeof ve==="string"&&(ve.startsWith("data:")||/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(ve)))Je=Buffer.from(ve.replace(/^data:[^,]*,/,""),"base64");else if(typeof ve==="string"){let Pr=As(e.workspaceRoot,ve);Je=Pr.buffer,mr=Pr.mimeType}else throw Error("view() needs a Buffer, a base64 string, or a path to an image file");if(Je.length===0)throw Error("view(): the image is empty");let an=String(Ce.label??"").replace(/[\r\n>]+/g," ").trim().slice(0,120),yr=Number(Ce.maxWidth)||1024,jr=Number(Ce.quality)||72,Pt=e.targetContext?await W.newPage():await q.newPage();try{let Pr=`data:${mr};base64,${Je.toString("base64")}`;for(let qe=0;qe<5;qe+=1){let fr=await Pt.evaluate(async(lr)=>{let _r=new Image;_r.src=lr.url,await _r.decode();let Ir=Math.min(1,lr.maxWidth/_r.naturalWidth),sr=document.createElement("canvas");sr.width=Math.max(1,Math.round(_r.naturalWidth*Ir)),sr.height=Math.max(1,Math.round(_r.naturalHeight*Ir));let nr=sr.getContext("2d");if(!nr)throw Error("view(): canvas unavailable");return nr.fillStyle="#ffffff",nr.fillRect(0,0,sr.width,sr.height),nr.drawImage(_r,0,0,sr.width,sr.height),{data:sr.toDataURL("image/jpeg",lr.q/100).split(",")[1]??"",width:sr.width,height:sr.height,sourceWidth:_r.naturalWidth,sourceHeight:_r.naturalHeight}},{url:Pr,maxWidth:yr,q:jr}),Wr=Buffer.from(fr.data,"base64");if(Wr.length<=Is){let lr=an||"image";return`<<<ARA_VIEW_IMAGE ${fr.data} image/jpeg ${lr}>>>
|
|
302
|
+
Viewing ${lr} (${fr.sourceWidth}x${fr.sourceHeight} source, sent at ${fr.width}x${fr.height}, ${Math.round(Wr.length/1024)}KB).`}if(yr>640)yr=Math.round(yr*0.75);else jr=Math.max(30,jr-15)}throw Error(`view(): could not reduce the image under ${Math.round(Is/1024)}KB`)}finally{await Pt.close().catch(()=>{return})}},me=hs({browser:e.targetContext?.browser()??W,context:q,page:le,a11y:fe,view:ee,readWorkspaceFile:(ve)=>As(e.workspaceRoot,ve),privateProfile:e.privateProfile,beforeNavigation:e.beforeNavigation,recording:e.recording,screenshotExport:e.screenshotExport,actionRecorder:()=>{let ve=f,We=g;return(Ce,Je)=>{if(ve.length<ic)ve.push(Ce);if(Je)We.page=Je}}}),De=async(ve)=>{C();let We=Y(await W.newContext({serviceWorkers:"block",acceptDownloads:!1}),"context");try{await We.route("**/*",(Je)=>Je.abort()),C(),await We.routeWebSocket("**/*",(Je)=>Je.close({code:1008,reason:"Reason evaluator network denied"})),C(),await We.exposeBinding("__araHandsRpc",async(Je,mr)=>e.onBrowserOperation?e.onBrowserOperation(ve,()=>me.dispatch(mr)):me.dispatch(mr)),C();let Ce=await We.newPage();return C(),await Ce.goto("data:text/html,<title>Reason Hands evaluator</title>"),C(),await Ce.evaluate(`(${is})(${JSON.stringify(me.roots)})`),{context:We,page:Ce,runId:ve}}catch(Ce){throw await z(We).catch(()=>{return}),Ce}},Me=await De(),tr={browser:W,context:q,page:le,evaluator:Me,async captureProgressFrame(ve){return ee(await ve.screenshot({type:"jpeg",quality:65,timeout:2000}),{label:"Screen after browser action"})},async resetEvaluator(ve){await z(tr.evaluator.context),tr.evaluator=await De(ve)}};return C(),tr}catch(ne){throw await Q().catch(()=>{return}),ne}},we=async()=>{if(C(),k)return k;if(!w){O=re();let W;w=Promise.race([O,new Promise((q,ne)=>{W=setTimeout(()=>ne(Error("hands_browser_unavailable: startup timed out")),dd)})]).then((q)=>(C(),k=q,q)).catch(async()=>{P=Error("hands_browser_unavailable: startup failed or timed out");let q;try{await Promise.race([Q(),new Promise((ne,ye)=>{q=setTimeout(()=>ye(Error("hands_repl_stop_timeout")),Ps)})])}catch{P=Error("hands_browser_unavailable: startup cleanup unconfirmed")}finally{if(q)clearTimeout(q)}throw P}).finally(()=>{if(W)clearTimeout(W)})}return w},Ie=async(W,q,ne=!1)=>{let ye=await we(),le=g;if(e.onBrowserOperation&&ye.evaluator.runId!==q)await ye.resetEvaluator(q);let ee=(async()=>{let Me=await ye.evaluator.page.evaluate(`(${as})(${JSON.stringify({code:W})})`);if(typeof Me!=="string")throw Error("hands_repl_invalid_evaluator_output");let tr=le.page;if(ne&&tr&&!Me.includes("<<<ARA_VIEW_IMAGE")){let ve=()=>ye.captureProgressFrame(tr);try{let We=await(e.onBrowserOperation?e.onBrowserOperation(q,ve):ve());return le.automaticProgressImage=!0,`${Me}
|
|
303
|
+
${We}`}catch{return`${Me}
|
|
304
|
+
Screen capture unavailable.`}}return Me})(),me,De=new Promise((Me,tr)=>{me=setTimeout(()=>tr(Error("REPL evaluation timed out after 105 seconds")),cd)});try{return await Promise.race([ee,De])}catch(Me){if(Me instanceof Error&&Me.message.includes("timed out"))ee.catch(()=>{return}),await ye.resetEvaluator(q).catch(()=>{return});throw Me}finally{if(me)clearTimeout(me)}},Z=Promise.resolve(),be=new Set,ke=new Set;Vt(e.socketPath);let ae=Lr.createServer((W)=>{be.add(W),W.once("close",()=>{be.delete(W),ke.delete(W)}),W.setEncoding("utf8");let q="",ne=!1;W.on("data",(ye)=>{if(ne)return;if(q+=ye,q.length>ad){ne=!0,et(W,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let le=q.indexOf(`
|
|
305
|
+
`);if(le===-1)return;ne=!0;let fe=q.slice(0,le);if(e.onControl)try{let ee=JSON.parse(fe);if(typeof ee.action==="string"&&ee.action!=="evaluate")ke.add(W)}catch{}Z=Z.then(async()=>{if(W.destroyed)return;f=[],g={};try{let ee=JSON.parse(fe);if(ee.action==="probe"){let ve=await we();await Ie("undefined",ve.evaluator.runId),et(W,{ok:!0,output:"ARA_HANDS_REPL_READY"});return}if(typeof ee.action==="string"&&ee.action!=="evaluate"&&e.onControl){et(W,{ok:!0,output:await e.onControl(ee.action,ee)});return}if(ee.action!=="evaluate"||typeof ee.code!=="string")throw Error("Invalid REPL request");let me=ee.code,De=typeof ee.runId==="string"?ee.runId:void 0,Me=()=>Ie(me,De,ee.includeProgressCapture===!0),tr=await(e.onEvaluate?e.onEvaluate(ee,Me):Me());et(W,{ok:!0,output:tr,browserActions:f,...g.automaticProgressImage?{automaticProgressImage:!0}:{}})}catch(ee){et(W,{ok:!1,error:ee instanceof Error?ee.message:String(ee),stack:ee instanceof Error?ee.stack:void 0,browserActions:f})}}).catch((ee)=>{et(W,{ok:!1,error:ee instanceof Error?ee.message:String(ee)})})})});try{await new Promise((W,q)=>{ae.once("error",q),ae.listen(e.socketPath,()=>{ae.off("error",q);try{if(process.platform!=="win32")Jc(e.socketPath,384);W()}catch(ne){ae.close(()=>q(ne))}})})}catch(W){throw Vt(e.socketPath),W}return{socketPath:e.socketPath,browserExecutablePath:l,stop(){if(T)return T;N=!0;let W=ke.size?setTimeout(()=>{for(let le of ke)le.destroy()},ld):void 0,q=new Promise((le)=>ae.close(()=>{if(W)clearTimeout(W);le()}));for(let le of be)if(!ke.has(le))le.destroy();Z.catch(()=>{return});let ne=async()=>{await q,Vt(e.socketPath);let le=[Q()];if(O)le.push(O.then(()=>{return},()=>{return}));let fe=await Promise.allSettled(le),ee=await Promise.allSettled([Q()]),me=[...fe,...ee].filter((De)=>De.status==="rejected");if(me.length)throw AggregateError(me.map((De)=>De.reason),"hands_repl_stop_unconfirmed")},ye;return T=Promise.race([ne(),new Promise((le,fe)=>{ye=setTimeout(()=>fe(Error("hands_repl_stop_timeout")),Ps)})]).finally(()=>{if(ye)clearTimeout(ye);Vt(e.socketPath)}),T}}}var hd=["private_runtime","runtime_root","temporary_directory","granted_root","workspace_layout","jobs","browser_socket","relay_url","environment_owner","job_environment","config_write"],gd=["ENOENT","EACCES","EPERM","EINVAL","ENOTDIR","EISDIR","ELOOP","EROFS","ENOSPC","EMFILE","ENFILE","EEXIST"];function Hs(e,a){if(!e||!hd.includes(e))return null;let l=typeof a==="object"&&a!==null&&"code"in a?a.code:null;return{workspace_stage:e,workspace_errno:typeof l==="string"&&gd.includes(l)?l:"unknown"}}import{lstatSync as bd,readFileSync as wd}from"fs";var Ns="/run/sc/egress-guard",yd=10002,Wn=10003;function yo(e=process.platform,a=Ns){if(e!=="linux")return"not_root_host";try{let l=bd(a);if(l.uid!==0)return"marker_not_root_owned";if(!l.isFile()||(l.mode&18)!==0)return"marker_invalid";return wd(a,"utf8")===`v1 ${yd} ${Wn}
|
|
306
|
+
`?"active":"marker_invalid"}catch(l){return l instanceof Error&&"code"in l&&l.code==="ENOENT"?"marker_missing":"marker_invalid"}}function Ls(e=process.platform,a=Ns){return yo(e,a)==="active"}var vd=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function Bs(e){let a=vd.exec(e.replace(/\/+$/,""));return a?`${a[1]}/repo`:null}import{randomUUID as bl}from"crypto";import{spawn as wl,spawnSync as yl}from"child_process";import{accessSync as vl,chmodSync as Ot,closeSync as kl,constants as lt,fchmodSync as Sl,fstatSync as El,openSync as Rl,copyFileSync as Ol,existsSync as eo,lstatSync as ze,statSync as Br,mkdtempSync as xl,mkdirSync as ut,realpathSync as Te,renameSync as on,rmSync as Pl,writeFileSync as sn}from"fs";import{homedir as Il,tmpdir as ki}from"os";import{basename as Al,dirname as or,join as Ue,resolve as Si,sep as Tl}from"path";var kd={"navigation.ara-egress.invalid":"canary_navigation","fetch.ara-egress.invalid":"canary_fetch","subresource.ara-egress.invalid":"canary_subresource","codeload.github.com":"canary_redirect","websocket.ara-egress.invalid":"canary_websocket"};function js(e){return e===null?"other":kd[e]??"other"}function cr(e,a){if(e===void 0||a===void 0)return null;let l=Math.round(a-e);return Number.isSafeInteger(l)&&l>=0&&l<=600000?l:null}var E="workspace_mode",Or="granted_root",_e="project_root",tt="terminal_root",ot="terminal_benchmark_tool_profile",Sd=["bash","bash-node-repl","bash-node-repl-files"],Ms="hands_node_repl_persistent_execution_unsupported";function Ws(e){return e==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function Fn(e){return Sd.includes(e)}function qa(e){return Ed(e)&&e.workspace_mode==="terminal_root"&&Fn(e.terminal_benchmark_tool_profile)}function Ed(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}var Wp=n({device_id:t().uuid(),root_id:t().uuid()}),Un=/^reason\/[0-9a-f]{8}$/,Rd=h({source_path:t().refine(Ne).optional(),branch:t().regex(Un)}),Fp=n({checkout_mode:c(["worktree","direct"]).optional(),project_workspace_source:n({kind:i("local_device"),device_id:t().uuid(),root_id:t().uuid(),path:t().refine(Ne).optional(),worktree:Rd.optional()})});import{execFile as Od}from"child_process";var xd=20000,Pd=1e4,Fs=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,Id=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function Us(e,a=Ad){let l=(z,Q=Pd)=>a([...Id,"-C",e,...z],Q),u=async(z)=>{let Q=await l(z);return Q.status===0?Q.stdout.trim():null},f=await u(["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(!f||!Fs.test(f))return null;let g=f.slice(0,12),k=(z)=>({commit:f,from:"head",note:`reason: started from ${z}`}),O=await u(["symbolic-ref","--quiet","HEAD"]);if(!O?.startsWith("refs/heads/"))return k(`the checkout's detached HEAD ${g}`);let w=O.slice(11),P=await l(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(P.status!==0||P.stdout.trim())return k(`${w} at ${g}: the checkout has uncommitted changes, which stay there`);let N=await u(["config","--get",`branch.${w}.remote`]),T=await u(["config","--get",`branch.${w}.merge`]);if(!N||!T?.startsWith("refs/")||N.startsWith("-"))return k(`${w} at ${g}: it has no upstream to catch up with`);let S=N==="."||(await l(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",N,T],xd)).status===0,M=await u(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),j=M?await u(["rev-parse","--verify","--quiet","@{upstream}^{commit}"]):null;if(!M||!j||!Fs.test(j))return k(`${w} at ${g}: ${S?"it has no upstream to catch up with":`fetching ${N} failed`}`);if(!S)return k(`${w} at ${g}: fetching ${M} failed, so it may be behind`);if(j===f)return k(`${w} at ${g}, the same commit as ${M} after fetching it`);if((await l(["merge-base","--is-ancestor",f,j])).status!==0)return k(`${w} at ${g}: it has commits that ${M} does not`);let C=await u(["rev-list","--count",`${f}..${j}`]);return{commit:j,from:"upstream",note:`reason: started from ${M} at ${j.slice(0,12)}, fetched just now: ${w} had no commits of its own and was ${C??"some"} commits behind it`}}function Ad(e,a){return new Promise((l)=>{Od("git",e,{encoding:"utf8",timeout:a,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(u,f)=>{let g=u?typeof u.code==="number"?u.code:null:0;l({status:g,stdout:String(f??"")})})})}import{execFile as Td}from"child_process";import{lstatSync as Kn,readdirSync as zn,readFileSync as Ks,realpathSync as Yt,rmdirSync as zs,unlinkSync as Dd,writeFileSync as Cd}from"fs";import{readFile as Hd}from"fs/promises";import{join as br,resolve as $s}from"path";var St=".reason-device",Nd=86400000,Ld=500,Bd=60000;function Gs(e,a,l){let u=a.split("/"),f=Ge.split("/");if(u.length!==f.length+2||f.some((g,k)=>u[k]!==g)||!Cr.test(u[f.length]))return;try{let g=Js(e,u[f.length]);Cd(br(g,St),l,{flag:"wx",mode:384})}catch{}}function Js(e,a){let l=()=>new r("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!Cr.test(a))throw l();let u=br(Yt(e),Ge),f=br(u,a);if(!Kn(f).isDirectory()||Yt(f)!==f)throw l();return f}async function jd(e,a,l=Wd){let u;try{u=Js(e,a)}catch(f){if($n(f))return!0;throw f}for(let f of zn(u,{withFileTypes:!0})){if(f.name===St||!f.isDirectory())continue;let g=br(u,f.name),k=await Md(g);if(k){let O=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false",`--git-dir=${k}`,"worktree"];if((await l([...O,"remove","--force",g])).status===0)await l([...O,"prune"])}else try{zs(g)}catch{}}if(zn(u).some((f)=>f!==St))return!1;try{Dd(br(u,St))}catch(f){if(!$n(f))throw f}return zs(u),!0}async function Md(e){try{let a=br(e,".git");if(!Kn(a).isFile())return null;let l=/^gitdir: (.+)$/m.exec(Ks(a,"utf8"));if(!l)return null;let u=$s(e,l[1].trim());return $s(u,(await Hd(br(u,"commondir"),"utf8")).trim())}catch{return null}}async function Wa(e){let a;try{if(a=br(Yt(e.home),Ge),!Kn(a).isDirectory())return{status:"skipped",reason:"workspace_untrusted"};if(Yt(a)!==a)return{status:"skipped",reason:"workspace_untrusted"}}catch(g){if($n(g))return{status:"skipped",reason:"no_workspace"};throw g}let l=zn(a,{withFileTypes:!0}).filter((g)=>g.isDirectory()&&Cr.test(g.name)).map((g)=>g.name).filter((g)=>{try{return Ks(br(a,g,St),"utf8")===e.deviceId}catch{return!1}}).sort().slice(0,Ld);if(!l.length)return{status:"done",removed:[],kept:[],failed:[]};let u=await e.liveIds(l);if(u===null)return{status:"skipped",reason:"server_unsupported"};let f={status:"done",removed:[],kept:l.filter((g)=>u.includes(g)),failed:[]};for(let g of l.filter((k)=>!u.includes(k)))(await jd(e.home,g,e.runGit).catch(()=>!1)?f.removed:f.failed).push(g);return f}function Va(e,a,l=Nd){if(a.aborted)return;let u=!1,f=()=>{if(u||a.aborted)return;u=!0,e().catch(()=>{return}).finally(()=>{u=!1})},g=setInterval(f,l);g.unref?.(),a.addEventListener("abort",()=>clearInterval(g),{once:!0}),f()}function $n(e){return typeof e==="object"&&e!==null&&e.code==="ENOENT"}function Wd(e){return new Promise((a)=>{Td("git",e,{encoding:"utf8",timeout:Bd,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(l,u,f)=>{let g=l&&typeof l.code==="number"?l.code:null;a({status:l?g??1:0,stderr:f??""})})})}import{createHash as Fd}from"crypto";import{join as Ud}from"path";function zd(e){return hi(e)}function wr(){throw new r("environment_unavailable","The private Session environment is unavailable or stale.")}function Xt(e){return Fd("sha256").update(JSON.stringify({...e,variables:Object.fromEntries(Object.entries(e.variables).sort(([a],[l])=>a.localeCompare(l)))})).digest("hex")}function ni(e,a){b(e);let l=Ud(e,"environment.json"),u,f=new Set,g=(O,w)=>`${w}:${O}`,k=(O)=>{let w=ri.safeParse(O);if(!w.success)return wr();let P=w.data,N=a.identity(),T=Date.parse(P.expires_at);if(!N||P.run_id!==a.runId||P.device_id!==a.deviceId||P.root_id!==a.rootId||P.binding.kind!==a.binding.kind||P.binding.target_revision!==a.binding.target_revision||P.binding.root_grant_revision!==a.binding.root_grant_revision||P.binding.target_generation!==N.generation||P.binding.target_fence_id!==N.fenceId||T<=Date.now()||T>a.expiresAtMs||a.expiresAtMs<=Date.now()||Object.keys(P.variables).some((S)=>!zd(S)))return wr();if(P.git){let S=new URL(a.apiOrigin),M=new URL(P.git.base_url),j=Date.parse(P.git.expires_at);if(M.origin!==S.origin)throw new r("environment_git_origin_mismatch","The delivered Git broker is not on this worker's API origin.");if(!["/git","/git/"].includes(M.pathname)||M.username||M.password||M.search||M.hash||j<=Date.now()||j>T)return wr()}if(P.cloud_access&&!rs(P.cloud_access,a.apiOrigin))throw new r("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return P};return{path:l,install(O){let w=k(O),P=Xt(w);if(u&&(w.revision<u.revision||w.revision===u.revision&&(P!==u.hash||w.snapshot_id!==u.snapshotId)))return wr();if(!u||w.revision>u.revision){if(y(l,w,Re.snapshotBytes),Xt(k(JSON.parse(m(l,Re.snapshotBytes))))!==P)return wr();let N=u;if(u={revision:w.revision,hash:P,snapshotId:w.snapshot_id,generation:w.binding.target_generation},N&&N.generation<u.generation)f.add(g(N.snapshotId,N.revision))}else if(Xt(k(JSON.parse(m(l,Re.snapshotBytes))))!==u.hash)return wr();return{installed:!0,snapshot_id:w.snapshot_id,installed_revision:w.revision}},current(){if(!u)return wr();try{let O=k(JSON.parse(m(l,Re.snapshotBytes)));if(Xt(O)!==u.hash)return wr();return O}catch{return wr()}},carried:(O,w)=>f.has(g(O,w))}}var it=Object.freeze([Object.freeze({version:"0.2.61",artifact_sha256:"02ffcd514bf7cc0a9e73d4ce31ecea32709429cd0adf79e7062c1b70ff9ab8b8",legacy_linux_x64_sha256:"cdc0828abde3157e39afc6a64e033deee52ff7cfb09b55a42e60394df24980b9"}),Object.freeze({version:"0.2.62",artifact_sha256:"20a77fff617e18315c60777d46a2de2c433e42eba4e1c5e0b5535d967847303d",legacy_linux_x64_sha256:"cce594365d518b680abfb2378d234c8ef4e3daf257df83adef650a4523fb2d92"}),Object.freeze({version:"0.2.63",artifact_sha256:"20a77fff617e18315c60777d46a2de2c433e42eba4e1c5e0b5535d967847303d"}),Object.freeze({version:"0.2.64",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.65",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.66",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.67",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.68",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.69",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.70",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.71",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.72",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.73",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.74",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.75",artifact_sha256:"a6e0648894f1f4876affd77c0ff42642c1f9cbe9bb752de19d7a97a5fb3b820e"}),Object.freeze({version:"0.2.76",artifact_sha256:"857446b7e0b25fe1cc21e58860c7d984ee9a1c28efb4a4c49bc573a2d70bb3c0"}),Object.freeze({version:"0.2.77",artifact_sha256:"857446b7e0b25fe1cc21e58860c7d984ee9a1c28efb4a4c49bc573a2d70bb3c0"}),Object.freeze({version:"0.2.78",artifact_sha256:"0a7a7ece14850a28b8f972d66e4eef570eb2bb75d58f8a82f4e9afe91424e27f",pi_tools_v1:!0}),Object.freeze({version:"0.2.79",artifact_sha256:"96f52656b454fc5b9ffe520f5c5d55720b5173eb084cd326d2710e434623897b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.80",artifact_sha256:"6ee0ed70889e2771bd9b239ee039b549361b56ce870e08956ec7cce7fa199cd7",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.81",artifact_sha256:"c8909b36f4ee9316c0c3e298cb9adb5fc821a6ec5ca365cab60043eb942c258a",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.82",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.83",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.84",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.85",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.86",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.87",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.88",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.89",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.90",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.91",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.92",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.93",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.94",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.95",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.96",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.97",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.98",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.99",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.100",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.101",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.102",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.103",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.104",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.105",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.106",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.107",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.108",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.109",artifact_sha256:"7a82b33611b9f47478fb181d0da6f49a04f7e4bc401a7752530fecffb2dc5864",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.110",artifact_sha256:"00b7dcc9078a7d7ea4814414fbf92dcf9ba3b0fd51186aac1b967e9ae306a377",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.111",artifact_sha256:"7688e992667a48defe6fefb3b8624012b918e8776498faf9e5b20b69c13d7520",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.112",artifact_sha256:"7688e992667a48defe6fefb3b8624012b918e8776498faf9e5b20b69c13d7520",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.113",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.114",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.115",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.116",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.117",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.118",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.119",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.120",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.121",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.122",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.123",artifact_sha256:"ae68959cc57c3d3e360ba16883479d0706a0c2e742fe61a66b78e12fbbf5463e",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.124",artifact_sha256:"ae68959cc57c3d3e360ba16883479d0706a0c2e742fe61a66b78e12fbbf5463e",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.125",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.126",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.127",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.128",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.129",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.130",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.131",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.132",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.133",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.134",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.135",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.136",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.137",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.138",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.139",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.140",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.141",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.142",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.143",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.144",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.145",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.146",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.147",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.148",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.149",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.150",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.151",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.152",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.153",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.154",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.155",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.156",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.157",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.158",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.159",artifact_sha256:"cc806ca6df14c39d45a944d1e1db9827dae35b3e66e0265ededb3eea3d883dcb",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.160",artifact_sha256:"0b8f6c4598a19acbeff93929efc237dbc4e356ccb26abf6957e297bfc1b551e8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.161",artifact_sha256:"d570f5035bfc5916c31f4954ce5bcc00013eec83edb020edbbfbd3260b9c17d0",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.162",artifact_sha256:"6e52c44af7a3ea3633a4dc28aa63696143cd80044bca7f67a57c4c156985566f",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.163",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.164",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.165",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.166",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.167",artifact_sha256:"62658de309f9b9c8fd70041c83898d8625d85fed303ac6e60c3a17afc85477e2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.168",artifact_sha256:"24d7efe74218b862a90f48cf71dc59dce1d0dba29b167168aca06649bbfab364",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.169",artifact_sha256:"83879d03741c3f37c1502535d128685421cd7a498bc22543516a23ef2b21e496",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.170",artifact_sha256:"386b975277972e253599e5168b654e35c50b5eed9cbe711d7359e2efedd78f31",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.171",artifact_sha256:"386b975277972e253599e5168b654e35c50b5eed9cbe711d7359e2efedd78f31",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.172",artifact_sha256:"7a01a820961bd03b31007e46ba4f09df0a621ea5bfc9ee84548d6acdfd750169",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.173",artifact_sha256:"82c9ece017e109cf8b4b54734ac7a81b1ecb2ff35a426998369b6c3e690fd1ae",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.174",artifact_sha256:"07fa1db4f84afe909ad4de4bcdbda9bc785cf2598b51769b1f5620bb86b3743b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.175",artifact_sha256:"07fa1db4f84afe909ad4de4bcdbda9bc785cf2598b51769b1f5620bb86b3743b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.176",artifact_sha256:"ba3e211489877d0622aeca87be98e235d245f39d2b57f275cd924168d05f98ce",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0})]),$d="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",Kd=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",$d]),Vs=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),f_=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),p_=new Set([R,...it.map((e)=>e.artifact_sha256),...Kd,...Vs]);var __=new Set([R,...it.filter((e)=>e.pi_tools_v1).map((e)=>e.artifact_sha256),...Vs]);var m_=new Set([R,...it.filter((e)=>e.pi_tools_confinement_v1).map((e)=>e.artifact_sha256)]);var h_=new Set([R,...it.filter((e)=>e.home_folder_v1).map((e)=>e.artifact_sha256)]);var g_=new Set([R,...it.filter((e)=>e.background_bash_v1).map((e)=>e.artifact_sha256)]);var b_=new Set([R,...it.filter((e)=>e.machine_sdk_v1).map((e)=>e.artifact_sha256)]);var Gd=[H,"reason-hands-worker.cjs"];function qs(e){return typeof e==="string"&&Gd.includes(e)}var Jd;function Ys(){return Jd??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as Vd,constants as Gn,fstatSync as Xs,lstatSync as qd,openSync as Yd,readSync as Xd,realpathSync as Zd,watch as Qd}from"fs";import{dirname as Zs}from"path";function Qt(e,a){let l;try{let u=Zs(e),f=qd(u);if(!f.isDirectory()||f.isSymbolicLink()||!G(f,18)||Zd(u)!==u)return null;l=Yd(e,Gn.O_RDONLY|Gn.O_NOFOLLOW|Gn.O_NONBLOCK);let g=Xs(l);if(!g.isFile()||g.nlink!==1||!G(g)||g.size<1||g.size>8192)return null;let k=Buffer.alloc(8193),O=Xd(l,k,0,k.length,0),w=Xs(l);if(O!==g.size||w.size!==g.size||w.nlink!==1||w.mtimeMs!==g.mtimeMs||w.ctimeMs!==g.ctimeMs)return null;let P=JSON.parse(k.subarray(0,O).toString("utf8"));if(!P||P.pid!==a.pid||!Number.isSafeInteger(P.pid)||P.pid<1||P.launchId!==a.launchId||P.workerVersion!==a.workerVersion||P.protocolVersion!==a.protocolVersion||P.workerArtifactSha256!==a.workerArtifactSha256||P.workerEntrypoint!==a.workerEntrypoint||P.workspaceAliasReady!==!0||!Ee(P.targetGeneration)||!Ee(P.generation)||!ce(P.fenceId))return null;return{...a,generation:P.generation,targetGeneration:P.targetGeneration,fenceId:P.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(l!==void 0)Vd(l)}}var el=(e,a,l)=>{let u=Qd(e,{persistent:!1},a);return u.on("error",l),u};function Qs(e){let a=new AbortController,l=e.initial,u=l.targetGeneration,f=!1,g=!1,k,O,w=()=>{if(g)return;g=!0,k?.close(),k=void 0,clearInterval(O),e.signal.removeEventListener("abort",w),a.abort()},P=()=>{if(g)return;if(!e.isAlive()){w();return}let N=Qt(e.path,e.initial);if(!N||N.generation<l.generation||N.targetGeneration<l.targetGeneration||N.targetGeneration===l.targetGeneration&&N.fenceId!==l.fenceId)return;if(l=N,f||N.targetGeneration<=u)return;u=N.targetGeneration,f=!0,Promise.resolve().then(()=>(a.signal.throwIfAborted(),e.publish(N,a.signal))).catch(()=>{if(!g)w(),e.failed?.()}).finally(()=>{f=!1,P()})};if(e.signal.aborted)return w(),{stop:w};e.signal.addEventListener("abort",w,{once:!0});try{k=(e.watch??el)(Zs(e.path),P,()=>{k?.close(),k=void 0})}catch{}return O=setInterval(P,1000),O.unref?.(),P(),{stop:w}}import{spawn as rl}from"child_process";import{chmodSync as tl,mkdtempSync as nl,realpathSync as ol,rmSync as sl,unlinkSync as il,writeFileSync as al}from"fs";import cl from"net";import{platform as dl,tmpdir as ll}from"os";import{join as di}from"path";var fi=1048576,qn=105000,ul=2000,fl=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 = ${qn};
|
|
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 pl(e=process.execPath,a=process.versions.bun){return a?"node":e}function Jn(e){try{il(e)}catch{}}function rn(e,a){e.end(`${JSON.stringify(a)}
|
|
446
|
+
`)}function Vn(e){return JSON.stringify(e)}function _l(e){let a=nl(di(ll(),"reason-node-repl-")),l=di(a,"node-repl.sb"),f=["(version 1)","(deny default)",'(import "system.sb")',"(allow process*)","(deny network*)",`(allow file-read* ${["/System","/usr","/bin","/opt/homebrew","/usr/local"].map((k)=>`(subpath ${Vn(k)})`).join(" ")})`,`(allow file-read* file-write* (subpath ${Vn(e.workRoot)}) (subpath ${Vn(a)}))`].join(`
|
|
447
|
+
`);al(l,f,{mode:384});let g=!1;return{command:"/usr/bin/sandbox-exec",args:["-f",l,e.nodeExecutable,...e.nodeArgs],cwd:e.workRoot,env:{...e.environment,TMPDIR:a},async cleanup(){if(g)return;g=!0,sl(a,{recursive:!0,force:!0})}}}async function ml(e){let a=ol(e.workRoot),l=e.nodeExecutable??pl(),u=["--max-old-space-size=512","--permission",`--allow-fs-read=${a}`,`--allow-fs-write=${a}`,"-e",fl],f=je({home:a,temporaryDirectory:a}),g=e.platformName??dl();if(g==="linux")return{command:l,args:u,cwd:a,env:f,async cleanup(){}};if(g==="darwin")return _l({nodeExecutable:l,nodeArgs:u,workRoot:a,environment:f});throw Error("hands_node_repl_platform_unsupported")}async function Rt(e){let a;try{await Promise.race([e,new Promise((l,u)=>{a=setTimeout(()=>u(Error("hands_node_repl_child_cleanup_timeout")),ul)})])}finally{clearTimeout(a)}}async function _i(e){if(e.executionMode!=="single-evaluation")throw Error(Ms);let a=await ml(e),l;try{l=rl(a.command,a.args,{cwd:a.cwd,env:a.env,stdio:["pipe","pipe","pipe"]})}catch(Y){throw await a.cleanup(),Y}let u=new Promise((Y)=>l.once("close",()=>Y())),f;l.once("error",(Y)=>{f=Y});let g=!1,k=!1,O="";l.stderr.setEncoding("utf8"),l.stderr.on("data",(Y)=>{O=`${O}${Y}`.slice(-16384)});let w=l.stdout,P,N=(Y,re,we)=>{if(we)Y.failure??=we;if(Y.finishing)return;Y.finishing=!0,k=!0,l.kill("SIGKILL"),Rt(u).then(()=>{if(Y.failure)Y.reject(Y.failure);else Y.resolve(re??{})},(Ie)=>Y.reject(Ie))},T=()=>{if(k=!0,P)N(P,void 0,Error("hands_node_repl_state_lost"));else l.kill("SIGKILL")},S="";w?.setEncoding("utf8"),w?.on("data",(Y)=>{if(P?.finishing||k)return;if(S+=Y,S.length>fi){T();return}while(!0){let re=S.indexOf(`
|
|
448
|
+
`);if(re===-1)return;let we=S.slice(0,re);S=S.slice(re+1);let Ie=P;if(!Ie){T();return}try{let Z=JSON.parse(we);if(Ie.action==="probe")Ie.resolve(Z);else{N(Ie,Z);return}}catch{N(Ie,void 0,Error("invalid_hands_node_repl_child_response"));return}}});let M=(Y)=>{let re=O.trim(),we=Y??Error(re?`hands_node_repl_child_exited:${re}`:"hands_node_repl_child_exited");if(k=!0,P&&!P.finishing)N(P,void 0,we)};l.once("error",M),l.once("close",()=>M()),l.stdin.on("error",M);let j=(Y)=>new Promise((re,we)=>{if(g||k||l.exitCode!==null||l.signalCode!==null){we(Error(k?"hands_node_repl_state_lost":"hands_node_repl_stopped"));return}let Ie=setTimeout(T,Y.action==="probe"?1e4:Math.max(1,Math.min(e.evaluationTimeoutMs??qn-1000,qn-1000))),Z={action:Y.action,finishing:!1,resolve(be){if(P===Z)P=void 0;clearTimeout(Ie),re(be)},reject(be){if(P===Z)P=void 0;clearTimeout(Ie),we(be)}};P=Z,l.stdin.write(`${JSON.stringify(Y)}
|
|
449
|
+
`,(be)=>{if(!be)return;N(Z,void 0,be)})});try{if(!w){if(l.pid===void 0)await Rt(u);throw f??Error("hands_node_repl_control_pipe_missing")}let Y=await j({action:"probe"});if(Y.ok!==!0||Y.output!=="ARA_HANDS_REPL_READY")throw Error("hands_node_repl_probe_failed")}catch(Y){g=!0,l.kill("SIGKILL");try{await Rt(u)}finally{await a.cleanup()}throw Y}let C=Promise.resolve(),z=new Set;Jn(e.socketPath);let Q=cl.createServer((Y)=>{z.add(Y),Y.once("close",()=>z.delete(Y)),Y.setEncoding("utf8");let re="",we=!1,Ie=!1;Y.once("close",()=>{if(Ie)T()}),Y.on("error",()=>Y.destroy()),Y.on("data",(Z)=>{if(we)return;if(re+=Z,re.length>fi){we=!0,rn(Y,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let be=re.indexOf(`
|
|
450
|
+
`);if(be===-1)return;we=!0;let ke=re.slice(0,be);C=C.then(async()=>{if(Y.destroyed)return;try{let ae=JSON.parse(ke);if(ae.action!=="evaluate"||typeof ae.code!=="string")throw Error("Invalid REPL request");Ie=!0;let W=await j({action:"evaluate",code:ae.code});if(Ie=!1,W.ok!==!0||typeof W.output!=="string")throw Error(typeof W.error==="string"?W.error:"hands_node_repl_failed");rn(Y,{ok:!0,output:W.output})}catch(ae){Ie=!1,rn(Y,{ok:!1,error:ae instanceof Error?ae.message:String(ae),stack:ae instanceof Error?ae.stack:void 0})}}).catch((ae)=>{rn(Y,{ok:!1,error:ae instanceof Error?ae.message:String(ae)})})})});try{await new Promise((Y,re)=>{Q.once("error",re),Q.listen(e.socketPath,()=>{Q.off("error",re);try{tl(e.socketPath,384),Y()}catch(we){Q.close(()=>re(we))}})})}catch(Y){g=!0,l.kill("SIGKILL");try{await Rt(u)}finally{await a.cleanup(),Jn(e.socketPath)}throw Y}return{socketPath:e.socketPath,async stop(){if(g)return;g=!0;let Y=new Promise((re)=>Q.close(()=>re()));for(let re of z)re.destroy();await Y,C.catch(()=>{return}),T();try{await Rt(u)}finally{await a.cleanup(),Jn(e.socketPath)}}}}var Zr=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var mi="/workspace",gi="/var/lib/reason/sessions",hl="/var/lib/reason/session-controls";function ai(e){let a=`${gi}/`;if(!e.startsWith(a))return null;let l=e.slice(a.length);if(!Zr.test(l)||l!==l.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${hl}/${l}/job.env`}function gl(e){if(!Zr.test(e))throw Error("personal_computer_invalid_identity");return e.toLowerCase()}function nn(e){let a=gl(e);return{runtimeRoot:`${gi}/${a}`,workspaceRoot:`${mi}/sessions/${a}`,sharedRoot:mi}}var bi="/root/.ara/cloud-browser/repl.sock";function Yn(e){return e==="compute"}function wi(e,a,l="linux"){if(e)nn(e);if(l!=="linux")throw Error("cloud_browser_os_invalid");if(a!==void 0&&(!e||!/^[1-9][0-9]{0,18}$/.test(a)))throw Error("cloud_browser_generation_invalid");let u=e?`/var/lib/reason/browsers/${e.toLowerCase()}`:"/root/.ara/cloud-browser",f=e?`${u}/${a?`g${a}`:"current"}`:u,g=e?`/root/.b/${e.toLowerCase().replaceAll("-","")}`:u;return{temporarySessionDirectory:g,temporaryDirectory:e?`${g}/${a??"current"}`:`${f}/tmp`,directory:f,sessionDirectory:u,config:`${f}/config.json`,status:`${f}/status.json`,socket:`${f}/repl.sock`,bundle:`${f}/driver.mjs`,processName:e?`ara-browser-${e.toLowerCase()}${a?`-${a}`:""}`:"ara-cloud-browser"}}var Xn="browser_egress",yi=Qo,Dl=45000,Cl=fn+1500,xr=/^[A-Za-z0-9._:-]{1,160}$/,Hl="/run/ara-hands";function Nl(e,a,l=ki()){if(e==="darwin")return{temporaryRoot:l,prepareRoot:!1,sessionMode:448};return{temporaryRoot:a??Hl,prepareRoot:!0,sessionMode:457}}function Pe(e,a=process.platform,l=process.geteuid?.()){return e===!0&&a==="linux"&&l===0}function J(e=ue(),a=process.platform,l=process.geteuid?.()){return e&&a==="linux"&&l===0?{uid:e.uid,gid:e.gid,home:e.home,username:e.username}:null}function Qr(e=J(),a=Ls){return e&&a()?Wn:null}function Ja(e=J(),a=process.platform,l=process.geteuid?.()){return a!=="linux"||l!==0||e!==null}function So(e=process.platform,a=process.geteuid?.()){return e!=="linux"||a!==0}function Ll(e,a){if(!a&&(e??"linux")==="linux")return bi;return wi(a,void 0,e??"linux").socket}function ct(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function Ei(e){let a=e.toLowerCase().replace(/^\[|\]$/g,"");return a==="localhost"||a.endsWith(".localhost")||a==="::1"||a==="0:0:0:0:0:0:0:1"||a==="0.0.0.0"||a.startsWith("127.")}class ci extends r{expiryDiagnostic;constructor(e){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=e}}function Bl(e){return ct(e)&&Object.keys(e).every((a)=>a==="source_path"||a==="branch")&&(e.source_path===void 0||Ne(e.source_path))&&typeof e.branch==="string"&&Un.test(e.branch)}function jl(e,a,l){let u=a===void 0?Date.now():a,f=["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"],g=new Set([...f,"workspace_id","legacy_workspace_id",Et,kt,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",E,Xn,ot,pe,Le,xe]),k=ct(e)?e:null,O=k?.[Xn],w=k?.[ot],P=k?.[Le],N=O===void 0||(k?.[E]===Or||P===at&&k?.[E]===void 0)&&ct(O)&&Object.keys(O).every((Q)=>Q==="mode"||Q==="allowed_domains")&&O.mode==="enforce"&&Array.isArray(O.allowed_domains)&&O.allowed_domains.length<=256&&O.allowed_domains.every((Q)=>typeof Q==="string"&&In(Q));if(!ct(e)||f.some((Q)=>!(Q in e))||Object.keys(e).some((Q)=>!g.has(Q))||!N||P!==void 0&&P!==at||k?.[xe]!==void 0&&k[xe]!==At||k?.personal_workspace!==void 0&&(k.personal_workspace!==!0||k[E]!==Or)||k?.cloud_browser!==void 0&&(k.cloud_browser!==!0||k[E]!==Or)||k?.sandbox_provider!==void 0&&!Yn(k.sandbox_provider)||k?.sandbox_os!==void 0&&k.sandbox_os!=="linux"||w!==void 0&&(k?.[E]!==tt||!Fn(w))||E in e&&e[E]!==Or&&e[E]!==tt&&e[E]!==_e||e.workspace_path!==void 0&&(!Ne(e.workspace_path)||e[E]!==_e)||e.workspace_worktree!==void 0&&(e.workspace_path===void 0||!Bl(e.workspace_worktree))||typeof e.relay_url!=="string"||typeof e.session_id!=="string"||!xr.test(e.session_id)||e.workspace_id!==void 0&&(typeof e.workspace_id!=="string"||!xr.test(e.workspace_id))||e.legacy_workspace_id!==void 0&&(typeof e.legacy_workspace_id!=="string"||!xr.test(e.legacy_workspace_id))||e[Et]!==void 0&&(e[Et]!==st||(E in e))||e[kt]!==void 0&&(e[kt]!==Oe||(E in e))||e[pe]!==void 0&&(typeof e[pe]!=="string"||!xr.test(e[pe]))||typeof e.environment_id!=="string"||!xr.test(e.environment_id)||typeof e.expires_at!=="string"||e.policy_mode!=="full_access"||e.policy_version!==1||e.hands_protocol_version!==F||e.hands_worker_version!==U||e.hands_worker_artifact_sha256!==R||!qs(e.hands_worker_entrypoint)||!Ee(e.target_generation)||!ce(e.target_fence_id))throw new r("invalid_hands_payload","Reason Hands connection payload is invalid.");let T;try{T=new URL(e.relay_url)}catch{throw new r("invalid_hands_relay","Reason Hands relay URL is invalid.")}if((Ei(T.hostname)?T.protocol!=="ws:":T.protocol!=="wss:")||T.username||T.password||T.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(T.pathname))throw new r("invalid_hands_relay","Reason Hands relay URL is not allowed.");let M=Date.parse(e.expires_at),j=Number.isNaN(M)?"parse":new Date(M).toISOString()!==e.expires_at?"noncanonical":M<=u?"expired":M-u>yi?"over_cap":"accepted",C={version:1,outcome:j,clock_source:a===void 0?"date_now":"injected",validation_now_ms:Kr(u),expiry_ms:Kr(M),remaining_ms:Number.isSafeInteger(M-u)?M-u:null,maximum_lifetime_ms:yi,cli_artifact:Ys()};if(j!=="accepted")throw new ci(C);try{l?.(C)}catch{}let z=e.environment_binding===void 0?void 0:En.safeParse(e.environment_binding);if(z&&!z.success)throw new r("invalid_hands_request","Reason Hands environment binding is invalid.");return{...e.cloud_browser===!0?{cloud_browser:!0}:{},...Yn(e.sandbox_provider)?{sandbox_provider:e.sandbox_provider}:{},...e.sandbox_os==="linux"?{sandbox_os:e.sandbox_os}:{},...e.personal_workspace===!0?{personal_workspace:!0}:{},relay_url:T.toString(),...z?.success?{environment_binding:z.data}:{},session_id:e.session_id,...e.workspace_id===void 0?{}:{workspace_id:e.workspace_id},...e.legacy_workspace_id===void 0?{}:{legacy_workspace_id:e.legacy_workspace_id},...e[Et]===st?{[Et]:st}:{},...e[kt]===Oe?{[kt]:Oe}:{},...typeof e[pe]==="string"?{[pe]:e[pe]}:{},...e[Le]===at?{[Le]:at}:{},...e[xe]===At?{[xe]:At}:{},...typeof e.workspace_path==="string"?{workspace_path:e.workspace_path}:{},...ct(e.workspace_worktree)?{workspace_worktree:{...typeof e.workspace_worktree.source_path==="string"?{source_path:e.workspace_worktree.source_path}:{},branch:String(e.workspace_worktree.branch)}}:{},environment_id:e.environment_id,expires_at:e.expires_at,policy_mode:"full_access",policy_version:1,hands_protocol_version:F,hands_worker_version:U,hands_worker_artifact_sha256:R,hands_worker_entrypoint:H,target_generation:e.target_generation,target_fence_id:e.target_fence_id,...E in e?{[E]:e[E]}:{},...w===void 0?{}:{[ot]:w},...O===void 0?{}:{[Xn]:{mode:"enforce",allowed_domains:[...new Set(O.allowed_domains)].sort()}}}}function Eo(){let e=new Map;return{acquire(a,l){if(e.has(a))return null;let u=[...e.values()],f=(k)=>l.group!==void 0&&k.group===l.group;if(l.exclusive?!u.every(f):u.some((k)=>k.exclusive))return null;if(l.limit!==void 0&&!u.some(f)&&new Set(u.map((k,O)=>k.group??O)).size>=l.limit)return null;e.set(a,l);let g=!1;return()=>{if(g)return;g=!0,e.delete(a)}},activeOwners:()=>[...e.keys()]}}var Ml=Eo();function Wl(e,a){ut(e,{recursive:!0,mode:448});let l=Te(e),u=()=>new r("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let k of a.split("/")){let O=Ue(l,k);try{let P=ze(O);if(P.isSymbolicLink()||!P.isDirectory())throw u()}catch(P){if(!(P&&typeof P==="object"&&("code"in P)&&P.code==="ENOENT"))throw P;try{ut(O,{mode:448})}catch(N){if(!(N&&typeof N==="object"&&("code"in N)&&N.code==="EEXIST"))throw N}}let w=ze(O);if(w.isSymbolicLink()||!w.isDirectory()||Te(O)!==O)throw u();l=O}if(process.platform==="win32"){let k=ze(l);if(k.isSymbolicLink()||!k.isDirectory()||Te(l)!==l||!se(Te(e),l))throw u();return l}let f=ze(l),g=Rl(l,lt.O_RDONLY|lt.O_DIRECTORY|lt.O_NOFOLLOW);try{let k=El(g);if(!k.isDirectory()||k.dev!==f.dev||k.ino!==f.ino||Te(l)!==l)throw u();Sl(g,448)}finally{kl(g)}return l}function Fl(e,a=Bc(),l,u,f){if(!xr.test(e)||l!==void 0&&!xr.test(l))throw new r("invalid_hands_workspace","Reason Hands run identity is invalid.");let g=or(X({kind:"managed",workspaceId:e,...u?{base:u}:{},...f?{layout:f}:{}})),k=Wl(a,or(g)),O=Ue(k,Al(g)),w=!1;try{let S=ze(O);if(w=!0,S.isSymbolicLink())throw new r("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!S.isDirectory())throw new r("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(S){if(S instanceof r||!(S&&typeof S==="object"&&("code"in S)&&S.code==="ENOENT"))throw S}if(f&&!w)try{let S=Ue(Te(a),or(X({kind:"managed",workspaceId:e,...u?{base:u}:{}}))),M=ze(S);if(!M.isSymbolicLink()&&M.isDirectory()&&Te(S)===S)on(S,O),w=!0}catch{}if(l&&l!==e){let S=Ue(k,l);try{let M=ze(S);if(M.isSymbolicLink()||!M.isDirectory())throw new r("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let j=Te(S);if(or(j)!==k)throw new r("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let C=null;if(w){for(let z=1;z<=1000&&!C;z++){let Q=Ue(k,z===1?`.${e}.previous`:`.${e}.previous.${z}`);try{ze(Q)}catch(Y){if(!(Y&&typeof Y==="object"&&("code"in Y)&&Y.code==="ENOENT"))throw Y;C=Q}}if(!C)throw new r("invalid_hands_workspace","Reason Hands has too many previous workspace backups.");on(O,C)}try{on(j,O)}catch(z){if(C)on(C,O);throw z}w=!0}catch(M){if(M instanceof r||!(M&&typeof M==="object"&&("code"in M)&&M.code==="ENOENT"))throw M}}ut(O,{recursive:!0,mode:448}),Ot(O,448);let P=Te(O);if(or(P)!==k)throw new r("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let N=Ue(P,"repo");try{let S=ze(N);if(S.isSymbolicLink()||!S.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(S){if(S instanceof r||!(S&&typeof S==="object"&&("code"in S)&&S.code==="ENOENT"))throw S}ut(N,{recursive:!0,mode:448}),Ot(N,448);let T=Te(N);if(or(T)!==P)throw new r("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:P,repoPath:T}}function li(e){let a=null;try{a=ze(e)}catch{}if(!a||a.isSymbolicLink()||!a.isDirectory()||a.uid!==0||a.gid!==0||(a.mode&4095)!==493)throw new r("cloud_workspace_root_invalid","This cloud Session's workspace root is not root's 0755 directory, so Reason Hands cannot use it.")}function Ul(e,a,l=process.geteuid?.(),u=process.platform){if(u==="win32")return"unknown";let f;try{if(f=Br(e),!f.isDirectory())return"unready";vl(e,lt.R_OK|lt.W_OK|lt.X_OK)}catch{return"unready"}try{if(ze(e).isSymbolicLink()||Te(e)!==e)return"unknown"}catch{return"unknown"}if(l!==0)return"checked";if(a===null||f.uid!==a.uid||(f.mode&448)!==448)return"unknown";for(let g=or(e);;g=or(g)){let k;try{k=Br(g)}catch{return"unknown"}if(!(k.uid===a.uid?(k.mode&64)!==0:k.gid===a.gid?(k.mode&8)!==0:(k.mode&1)!==0))return"unknown";if(g===or(g))return"checked"}}function zl(e,a){let l="/";for(let u of["",...e.split("/"),...a.split("/")].filter((f,g)=>g===0||f)){if(u)l=Ue(l,u);let f;try{f=ze(l)}catch{return null}if(f.uid!==0)return f.uid;if((f.mode&2)!==0&&(f.mode&512)===0&&!f.isSymbolicLink())return-1;if(f.isSymbolicLink()||!f.isDirectory())return null}return null}function $l(e,a,l,u=process.geteuid?.(),f){if(!xr.test(a))return null;let g,k;try{g=Te(e),k=or(X({kind:"managed",workspaceId:a,...l?{base:l}:{},...f?{layout:f}:{}}))}catch{return null}let O=Ue(g,k),w=Ui(O)!==null,P=(j)=>new r("cloud_workspace_root_invalid",j),N;if(u===0){let j=zl(g,k);if(j===null)return null;if(!w)throw new r("invalid_hands_workspace","As root, Reason Hands never prepares a workspace in folders another user owns.");N=j}else{if(!w)return null;let j,C;try{j=ze(or(O)),C=ze(O)}catch{return null}if(j.isSymbolicLink()||!j.isDirectory()||j.uid===0||C.uid!==0)return null;N=j.uid}let T=g;for(let j of k.split("/")){let C=Ue(T,j),z=!1;try{let Q=ze(C);z=!Q.isSymbolicLink()&&Q.isDirectory()&&Te(C)===C}catch{}if(!z)throw P("This cloud Session's workspace root is missing or is not a real directory.");T=C}li(O);let S;try{S=ui(O)}catch(j){if(j instanceof r)throw j;throw P("This cloud Session's workspace root changed while Reason Hands checked it.")}let M=null;try{M=Br(S.repoPath).uid}catch{}if(M!==N)throw new r("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return S}function ui(e,a=!1){let l=Te(e),u=Ue(l,"repo"),f;try{f=ze(u)}catch{throw new r("invalid_hands_workspace","Reason Hands repository is missing from the granted root.")}if(a){if(!/^\/var\/lib\/reason\/sessions\/[0-9a-f-]{36}$/.test(l))throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");if(nn(l.slice(l.lastIndexOf("/")+1)).runtimeRoot!==l)throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");let O=Te("/workspace"),w=Te(u);if(O!=="/workspace"||!Br(w).isDirectory()||!w.startsWith("/workspace/"))throw new r("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:l,repoPath:w}}let g=Bs(l);if(g&&f.isSymbolicLink()){let O=Te(u);if(O!==Te(g)||!Br(O).isDirectory())throw new r("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:l,repoPath:O}}if(f.isSymbolicLink()||!f.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let k=Te(u);if(or(k)!==l)throw new r("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:l,repoPath:k}}function ro(e,a,l){if(a!==void 0&&!Ne(a))throw new r("invalid_hands_workspace",`Reason Hands ${l} is invalid.`);let u=Si(e,a??".");if(!se(e,u))throw new r("invalid_hands_workspace",`Reason Hands ${l} escapes its granted root.`);return u}function Ri(e,a,l){if(Zt(a)){let u=Te(l);return{anchor:u,target:Si(u,a),boundary:Ue(u,Ge)}}return{anchor:e,target:ro(e,a,"folder"),boundary:e}}function Kl(e,a){if(!se(e,a))throw new r("invalid_hands_workspace","Reason Hands folder escapes its granted root.");let l=e;for(let u of a.slice(e.length).split(Tl).filter(Boolean)){l=Ue(l,u);let f=null;try{f=ze(l)}catch(g){if(g.code!=="ENOENT")throw g}if(!f)ut(l,{mode:448});else if(f.isSymbolicLink()||!f.isDirectory())throw new r("invalid_hands_workspace","Reason Hands folder must be made of real directories.")}}function Oi(e,a){let l=Te(ro(e,a.source_path,"repository"));if(!se(e,l)||!Br(l).isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a folder in its granted root.");return l}async function Gl(e,a,l,u=s()){try{let f=Te(e);if(eo(Ri(f,a,u).target))return;return await Us(Oi(f,l))??void 0}catch{return}}function Jl(e,a,l,u,f=Vl,g=s()){let k=Te(e),{target:O,boundary:w,anchor:P}=Ri(k,a,g);if(l&&!eo(O)){let S=Oi(k,l);Kl(P,or(O));let M=["-c","core.hooksPath=/dev/null","-C",S];if(u)f([...M,"update-ref","--create-reflog","-m",u.note,`refs/heads/${l.branch}`,u.commit,""]);let j=u?f([...M,"worktree","add",O,l.branch]):f([...M,"worktree","add","-b",l.branch,O]);if(!u&&j.status!==0&&/already exists/.test(j.stderr)&&!eo(O))j=f([...M,"worktree","add",O,l.branch]);if(j.status!==0)throw new r(/not a git repository/i.test(j.stderr)?"workspace_not_git_repository":"workspace_worktree_failed","Reason could not create this Session's git worktree.")}let N;try{N=ze(O)}catch{throw new r("workspace_folder_missing","This Session's folder no longer exists.")}let T=Te(O);if(N.isSymbolicLink()&&!se(w,T))throw new r("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!Br(T).isDirectory()||!se(w,T))throw new r("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(L(T))throw new r("protected_path","Credential and secret folders are unavailable to Sessions.");return T}function Vl(e){let a=Wc();if(!a)return{status:null,stderr:"git was not found. Install Git for Windows (https://git-scm.com/download/win)."};let l=yl(a,e,{encoding:"utf8",timeout:60000,env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:["ignore","ignore","pipe"]});return{status:l.status,stderr:l.stderr??""}}function Pi(e){return ai(e)??Ui(e)?.jobEnv??Ue(e,"job.env")}function ql(e,a){let l=Pi(e),u=ze(l);if(u.isSymbolicLink()||!u.isFile())throw new r("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");Ol(l,a),Ot(a,384)}function Yl(e){if(e.workspaceMode===_e&&e.workspacePath!==void 0){let k=e.home??s(),O=Jl(e.grantedRoot,e.workspacePath,e.workspaceWorktree,e.workspaceWorktreeStart,void 0,k);if(e.workspaceWorktree&&e.deviceId)Gs(k,e.workspacePath,e.deviceId);return{workRoot:O,repoPath:O,workspace:{kind:"root",path:e.workspacePath},jobEnvPath:Ue(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if(e.workspaceMode===Or)return{...ui(e.grantedRoot,e.personalWorkspace),workspace:{kind:"root"},jobEnvPath:Ue(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if(e.workspaceMode===tt||e.workspaceMode===_e){let k=ze(e.grantedRoot);if(k.isSymbolicLink()||!k.isDirectory())throw new r("invalid_hands_workspace","Reason Hands root must be a real directory.");let O=Te(e.grantedRoot);return{workRoot:O,repoPath:O,workspace:{kind:"root"},jobEnvPath:Ue(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}let a=e.workspaceId??e.runId,l={kind:"managed",workspaceId:a,...e.workspaceBase?{base:e.workspaceBase}:{},...e.workspaceLayout?{layout:e.workspaceLayout}:{}},u=Ve(e.grantedRoot,l,e.home).anchor,f=$l(u,a,e.workspaceBase,void 0,e.workspaceLayout);if(f)return{...f,workspace:l,jobEnvPath:Ue(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1,cloudSessionRoot:!0};let g=Fl(a,u,e.legacyWorkspaceId,e.workspaceBase,e.workspaceLayout);return{...g,workspace:l,jobEnvPath:Ue(e.temporaryDirectory,"job.env"),workspacePoolPath:or(g.workRoot),managedWorkspace:!0}}function ko(e){let{command:a,prefix:l}=Rn(e.executablePath,e.sourceEntrypoint),u=je({home:Il(),temporaryDirectory:e.temporaryDirectory,path:e.path});if(u.REASON_DEVICE_ROOT=u.ARA_DEVICE_ROOT=e.grantedRoot,u.REASON_HANDS_WORKSPACE=u.ARA_HANDS_WORKSPACE=e.workRoot,u.REASON_HANDS_REPO=u.ARA_HANDS_REPO=e.root,e.workspacePoolPath)u.REASON_HANDS_WORKSPACE_POOL=u.ARA_HANDS_WORKSPACE_POOL=e.workspacePoolPath;return{command:a,args:[...l,"__device","__hands-worker","--config",e.configPath],options:{cwd:e.root,env:u,shell:!1,stdio:[xo,"ignore","pipe"]}}}var xo=process.platform==="win32"?"pipe":"ignore";function ur(e,a){if(process.platform!=="win32")return e.kill(a);if(a==="SIGTERM")e.stdin?.end();else if(e.pid)Be(e.pid);return!0}function Xl(e,a){let l="",u=!1,f=Date.now(),g=0,k=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled","permission_denied"].map((T)=>`hands.worker.${T}`)),O=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((T)=>["bash","read","write","edit"].map((S)=>`${T}:${S}`))]),w=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],P=["peerGeneration","socketState","closeCode"],N=new Set(["event","reason","launchId",...w,...P]);return(T)=>{for(let S of T.toString().split(/(?<=\n)/)){let M=S.endsWith(`
|
|
451
|
+
`);if(!u&&l.length+S.length<=2048)l+=S;else u=!0;if(!M)continue;let j=l;if(l="",u){u=!1;continue}try{let C=JSON.parse(j);if(!C||typeof C!=="object"||Array.isArray(C)||Object.keys(C).some((z)=>!N.has(z))||!k.has(C.event)||!O.has(C.reason)||C.event==="hands.worker.permission_denied"!==(typeof C.reason==="string"&&C.reason.includes(":"))||C.launchId!==e||w.some((z)=>!Number.isSafeInteger(C[z])||C[z]<0)||P.some((z)=>C[z]!==null&&(!Number.isSafeInteger(C[z])||C[z]<0)))continue;if(Date.now()-f>=60000)f=Date.now(),g=0;if(g>=122)continue;g+=1,a(C)}catch{}}}}async function Zl(e){let a=e.now()+e.timeoutMs;while(e.now()<a){if(e.signal.aborted)throw new r("cancelled","Reason Hands start was cancelled.");if(e.spawnFailed?.()||e.child.exitCode!==null||e.child.signalCode!==null)throw new r("hands_worker_exited","Reason Hands exited before ready.");let l=Qt(e.path,{pid:e.child.pid??-1,launchId:e.launchId,workerVersion:U,protocolVersion:F,workerArtifactSha256:R,workerEntrypoint:H});if(l?.targetGeneration===e.targetGeneration&&l.fenceId===e.fenceId)return l;await new Promise((u)=>setTimeout(u,10))}throw new r("hands_ready_timeout","Reason Hands did not become ready.")}function Ql(e){let a=e.exitCode===null?void 0:Ro[e.exitCode];return{exit_code:e.exitCode,exit_signal:e.signalCode,...a?{exit_reason:a}:{}}}async function eu(e,a){let l=()=>e.exitCode===0&&e.signalCode===null;if(e.exitCode!==null||e.signalCode!==null)return l()?"stopped":"already_exited";let u=new Promise((k)=>e.once("exit",()=>k()));try{if(!ur(e,"SIGTERM"))return l()?"stopped":"unobserved"}catch{return l()?"stopped":"unobserved"}if(await vi(u,a))return l()?"stopped":"unobserved";try{ur(e,"SIGKILL")}catch{}return await vi(u,a)?"forced":"unobserved"}async function vi(e,a){let l;try{return await Promise.race([e.then(()=>!0),new Promise((u)=>{l=setTimeout(()=>u(!1),a)})])}finally{clearTimeout(l)}}function ru(e){return new Promise((a)=>{let l=!1,u=(O)=>{if(l)return;l=!0,clearTimeout(k),e.signal.removeEventListener("abort",f),e.child.off("exit",g),a(O)},f=()=>u("cancelled"),g=()=>u("exited"),k=setTimeout(()=>u("expired"),Math.max(0,e.expiresAt-e.now()));if(e.signal.addEventListener("abort",f,{once:!0}),e.child.once("exit",g),e.signal.aborted)f();else if(e.child.exitCode!==null||e.child.signalCode!==null)g()})}var Ii=tc();function tu(e,a){if(!(e instanceof Error)||e instanceof r)return!1;let l=["hands_browser_driver_missing","hands_browser_driver_version_mismatch","hands_browser_executable_missing","hands_browser_unsupported_platform","hands_browser_unavailable"].includes(e.message),u=["ENOENT","EACCES","EPERM"].includes(e.code??"");if(!l&&!u)return!1;try{return ze(a),!1}catch(f){return ct(f)&&f.code==="ENOENT"}}function nu(e){return e.sandbox_provider==="compute"&&!e.cloud_browser&&e[E]===Or}function ou(e,a,l){return e===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:cr(e,a),...l===void 0?{}:{worker_prespawned:l}}}}function Xa(){Ii().catch(()=>{return}),Vr().catch(()=>{return})}async function Qe(e,a={}){let l=a.logDiagnostic??((W)=>console.warn(W)),u=new Map,f=(W)=>{let q=Date.now();u.set(W,q);try{l(JSON.stringify({event:"sandbox.hands_startup",stage:W,timestampMs:q}))}catch{}};f("entered");let g=e.claimEnvironment;e.claimEnvironment=void 0;let k=a.now??Date.now,O,w=jl(e.payload,a.now?.(),(W)=>{O=W});if(e.managedPty&&(e.managedPty.version!==1||!e.headless||!e.runtimeDirectory||![void 0,!0].includes(e.managedPty.startupVerified)||!e.deviceIdentity||!e.claimOwner||e.claimOwner.device_id!==e.deviceIdentity.deviceId||!w.environment_binding||!["darwin","linux","win32"].includes(process.platform)))throw new r("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let P=async(W)=>{let q;try{await Promise.race([W,new Promise((ne,ye)=>{q=setTimeout(()=>ye(new r("hands_event_delivery_unavailable","Hands event delivery did not settle within its deadline.")),Math.max(1,Math.min(a.eventDeliveryTimeoutMs??5000,5000)))})])}finally{clearTimeout(q)}},N=async(W,q)=>P(e.emitEvent(W,q));if(e.headless&&(w.cloud_browser===!0||e.managedBrowser!==void 0||w[ot]!==void 0||w[E]!==void 0&&w[E]!==_e))throw new r("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let T=J(),S=w[xe]===void 0?null:Qr(T);if(w[xe]!==void 0&&(S===null||!e.headless||!Pe(e.hostExecution,a.hostIdentity?.platform,a.hostIdentity?.euid)))throw new r("hands_model_jobs_egress_unavailable","This worker cannot hold its jobs to the guest egress guard; the Hands did not start.");if(w[Le]!==void 0&&!(e.headless&&Pe(e.hostExecution,a.hostIdentity?.platform,a.hostIdentity?.euid)))throw new r("hands_confinement_unavailable","Confined Hands need a root Linux worker in host mode.");if(w.cloud_browser&&process.platform!=="linux")throw new r("cloud_browser_target_invalid","Cloud browser is available only on a cloud machine.");let M=`${e.operationId}:${e.attemptId}`,j=w[E]===tt,C=e.headless||process.platform==="darwin"&&e.managedBrowser===void 0&&!w.cloud_browser&&!w.browser_egress&&(w[E]===void 0||w[E]===_e)||nu(w),z=j?w[ot]??"bash":null,Q=z?Ws(z):null;if(Q)throw new r(Q,"Persistent Node REPL execution is unavailable; this benchmark profile cannot start.");let Y=w[E],re=e.headless===!0&&e.ownComputer!==!0?e.handsSlots??1:void 0,we=(a.slot??Ml).acquire(M,{exclusive:re===1||Y!==void 0&&Y!==_e,...re!==void 0&&re>1?{limit:re}:{},...e.headless===!0&&w[pe]!==void 0?{group:w[pe]}:{}});if(!we)throw new r("hands_slot_busy",re!==void 0&&re>1?`This Reason worker runs at most ${re} sessions at a time.`:"This Reason Device runs one session at a time.");let Ie=e.headless===!0?da(e.runId):null,Z=null,be=null,ke,ae;try{f("browser_resolution");let W=e.headless&&a.browserExecutablePath===void 0?await Vr():null,q=j||w.cloud_browser?null:a.browserExecutablePath===void 0?e.headless?W?.status==="resolved"?W.executablePath:null:await Ds(void 0,process.platform,e.managedBrowser):a.browserExecutablePath;if(!j&&!w.cloud_browser&&!C&&!q)throw new r("hands_browser_unavailable","Reason Hands requires Chrome, Edge, Brave, Chromium, or a Playwright Chromium install.");f("path_resolution");let ne;try{ne=await(a.resolvePathEnvironment??Ii)()}catch{ne={path:Ao(),source:"fallback"}}if(f("workspace_setup"),process.platform==="darwin"){let Ae=w[E]===_e&&w.workspace_path!==void 0?ro(e.root,w.workspace_worktree?w.workspace_worktree.source_path:w.workspace_path,"folder"):null;for(let Ye of new Set([e.root,...Ae?[Ae]:[]]))await ss(Ye)}let le=w[E]===Or||w[E]===tt?Nl(process.platform,a.sandboxRuntimeRoot):null,fe=e.headless&&e.runtimeDirectory?e.runtimeDirectory:le?le.temporaryRoot:ki();if(Z="private_runtime",e.headless&&e.runtimeDirectory){b(fe);let Ae=Te(e.root);if(!ge(Ae,fe))throw new r("invalid_hands_workspace","Private worker state must not overlap the granted workspace.")}if(e.headless&&e.runtimeDirectory&&(!e.deviceIdentity||!w.environment_binding))throw new r("environment_unavailable","Headless Hands requires a server-bound private environment.");if(Z="runtime_root",le?.prepareRoot)ut(fe,{recursive:!0,mode:457}),Ot(fe,457);Z="temporary_directory";let ee=Te(xl(Ue(fe,"reason-hands-session-")));be=ee,Ot(ee,le?.sessionMode??448);let me=Ue(ee,"hands-config.json"),De=Ue(ee,"hands-ready.json"),Me=bl(),tr=w.target_fence_id;if(e.workspaceGrant){Z="workspace_grant",f("workspace_grant_wait");let Ae=e.workspaceGrant;await new Promise((Ye,Tr)=>{let Fr=()=>Tr(new r("cancelled","Reason Hands was cancelled."));if(e.signal.aborted){Fr();return}e.signal.addEventListener("abort",Fr,{once:!0}),Ae.then(Ye,Tr).finally(()=>e.signal.removeEventListener("abort",Fr))})}Z="granted_root";let ve=Te(e.root);Z="workspace_layout";let We=w[E]===_e&&w.workspace_path!==void 0&&w.workspace_worktree?await Gl(ve,w.workspace_path,w.workspace_worktree):void 0,{workRoot:Ce,repoPath:Je,jobEnvPath:mr,workspacePoolPath:an,managedWorkspace:yr,workspace:jr,cloudSessionRoot:Pt}=Yl({grantedRoot:ve,personalWorkspace:w.personal_workspace===!0,runId:e.runId,workspaceId:w.workspace_id,legacyWorkspaceId:w.legacy_workspace_id,workspaceBase:w[Et],workspaceLayout:w[kt],temporaryDirectory:ee,workspaceMode:w[E],applicationSupportPath:a.applicationSupportPath,...w.workspace_path===void 0?{}:{workspacePath:w.workspace_path},...w.workspace_worktree?{workspaceWorktree:w.workspace_worktree}:{},...We?{workspaceWorktreeStart:We}:{},...e.deviceIdentity?{deviceId:e.deviceIdentity.deviceId}:{}});if(Lc(Ce))throw new r("folder_is_filesystem_root",`${$c(Ce)}.`);let Pr="ara_device_wss";Z="jobs";let qe=e.headless&&e.runtimeDirectory?Lt({runtimeDirectory:e.runtimeDirectory,root:ve,runId:e.runId,folders:[Ce,Je]}):void 0;ke=qe?.disposeSocket;let fr=qe?Vo(qe):null;if(fr)try{l(JSON.stringify({event:"hands.journal_owner_retired",run_id:e.runId,reason:fr.reason,prior_executor_launch_id:fr.executorLaunchId}))}catch{}if(qe&&[Ce,Je].some((Ae)=>!ge(Ae,qe.journalDirectory)))throw new r("invalid_hands_workspace","A Session can't work in the folder that holds this worker's settings; start it in a project or repository inside it.");let Wr=w.personal_workspace?Ce.slice(Ce.lastIndexOf("/")+1):void 0;if(Wr&&Wr!==w.workspace_id)throw new r("invalid_hands_workspace","Personal session identity does not match its Device grant.");Z="browser_socket";let lr=w.cloud_browser?Ll(w.sandbox_os,Wr):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${Me}`:Ue(qe?qe.launchDirectory:ee,"repl.sock");Z="relay_url";let _r=Ei(new URL(w.relay_url).hostname),Ir=Pr==="ara_device_wss"&&!_r?(a.loadProxy??Se)()?.url:void 0,sr;Z="environment_owner";let nr=e.headless&&e.deviceIdentity&&w.environment_binding?ni(ee,{runId:e.runId,...e.deviceIdentity,binding:w.environment_binding,expiresAtMs:Date.parse(w.expires_at),identity:()=>sr?.()??null}):void 0;Z="job_environment";let ft=!nr&&jr.kind==="managed"&&yr?Ue(Ce,"job.env"):null;if(ft)try{sn(ft,"",{mode:384,flag:"wx"})}catch(Ae){if(!(Ae instanceof Error&&("code"in Ae)&&Ae.code==="EEXIST"))throw Ae}let cn={url:w.relay_url,transport:Pr,...Ir===void 0?{}:{proxyUrl:Ir},...e.localGithubConfinement?{localGithubConfinement:!0}:{},...w[Le]&&nr?{gitCredentialEnvironment:!0}:{},workerVersion:U,protocolVersion:F,workerArtifactSha256:R,workerEntrypoint:H,...process.platform==="win32"?{bashExecutable:Xe()}:{},targetGeneration:w.target_generation,fenceId:tr,workRoot:Ce,workspaceAliasPath:Ce,jobEnvPath:mr,...nr?{environmentSnapshotPath:nr.path,...e.hostExecution?{executionEnvironment:ii()}:{},environmentExpectedBinding:{runId:e.runId,...e.deviceIdentity,binding:w.environment_binding}}:ft?{jobEnvSourcePath:ft,workspacePoolPath:or(Ce)}:yr?{}:{jobEnvSourcePath:Pi(Ce)},repoPath:Je,replSocketPath:lr,...w.cloud_browser?{browserRunId:e.runId}:{},readyPath:De,launchId:Me,expiresAtMs:Date.parse(w.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...qe?{managedJobs:{journalDirectory:qe.journalDirectory,scopeId:qe.scopeId},jobControlSocketPath:qe.socketPath}:{},...qe&&T?{jobsUser:{...T,...S!==null?{modelGid:S}:{}}}:{},...e.managedPty&&qe&&nr?{managedPty:{version:1,...e.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:oi()}:{}}}:{},...C&&!q?{allowedTools:["bash","read","write","edit"]}:j?{allowedTools:z==="bash"?["bash"]:["bash","repl"]}:{}};if(nr||yr&&!ft)sn(mr,"",{mode:384});else ql(Ce,mr);Z="config_write",sn(me,JSON.stringify(cn),{mode:384}),Z=null;let Ar={session_id:w.session_id,environment_id:w.environment_id,hands_protocol_version:F,hands_worker_version:U,hands_worker_artifact_sha256:R,hands_worker_entrypoint:H,target_generation:w.target_generation,target_fence_id:w.target_fence_id,executor_launch_id:Me},It=null,to=!1,no=!1,oo,er=null,so,io,Dt="failed",ao=null,dn=Promise.resolve(),co=null,ln=async(Ae,Ye)=>{try{await N(Ae,Ye)}catch{}};try{f("event_started");let Ae,Ye=(async()=>{await e.emitEvent("hands.started",{...Ar,policy_mode:"full_access",policy_version:1,path_source:ne.source}),Ae=Date.now()})();Ye.catch(()=>{return}),f("worker_setup");let Tr=w.browser_egress?{mode:"enforce",allowedDomains:w.browser_egress.allowed_domains}:{mode:"off"};if(z&&z!=="bash")It=await(a.startNodeRepl??_i)({socketPath:lr,workRoot:Ce});else if(!j&&!w.cloud_browser&&q)It=await(a.startRepl??Cs)({socketPath:lr,browserExecutablePath:q,workspaceRoot:Je,...e.managedBrowser?{managedBrowser:e.managedBrowser}:{},...e.desktopRecording?{recording:e.desktopRecording}:{},networkPolicy:Tr,onEgressDenied:(de)=>{let ar=js(de.host);l(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:ar,reason:de.reason,run_id:e.runId})),dn=dn.then(()=>N("hands.browser_egress_denied",{destination_id:ar,reason:de.reason})).catch((Ht)=>{co??=Ht})}}).catch((de)=>{if(!C||e.signal.aborted||k()>=Date.parse(w.expires_at)||!tu(de,lr))throw de;return Object.assign(cn,{allowedTools:["bash","read","write","edit"]}),sn(me,JSON.stringify(cn),{mode:384}),no=!0,null});let Fr=ko({configPath:me,root:Je,grantedRoot:ve,workRoot:Ce,workspacePoolPath:an,temporaryDirectory:ee,path:ne.path,executablePath:a.executablePath,sourceEntrypoint:a.sourceEntrypoint}),un=Date.now(),pn,lo,_n=a.takePrespawnedWorker?.(Fr)??null;if(oo=a.takePrespawnedWorker?_n!==null:void 0,er=_n??(a.spawnWorker??((de)=>wl(de.command,de.args,de.options)))(Fr),!_n)a.adoptSpawnedWorker?.(er);er.stderr?.on("data",Xl(Me,(de)=>{if(de.event==="hands.worker.connecting")pn??=de.timestampMs;else if(de.event==="hands.worker.open")lo??=de.timestampMs;if(l(JSON.stringify({...de,run_id:e.runId})),de.event==="hands.worker.permission_denied"&&typeof de.reason==="string"){let[ar,Ht]=de.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(ar??"")&&["bash","read","write","edit"].includes(Ht??""))N("permission.denied",{provenance:ar,operation:Ht}).catch(()=>{return})}}));let uo=!1;er.on("error",()=>{uo=!0}),er.once("exit",(de,ar)=>{try{l(JSON.stringify({event:"hands.worker.exited",run_id:e.runId,launchId:Me,exit_code:de,exit_signal:ar}))}catch{}}),ae=er,f("worker_ready_wait");let bt=await Zl({path:De,launchId:Me,fenceId:tr,targetGeneration:w.target_generation,child:er,spawnFailed:()=>uo,signal:e.signal,timeoutMs:a.readyTimeoutMs??Dl,now:k}),Ai=Date.now();if(sr=()=>{if(!er||er.exitCode!==null||er.signalCode!==null)return null;let de=Qt(De,bt);return de?{generation:de.targetGeneration,fenceId:de.fenceId}:null},qe){let de={root:ve,runId:e.runId,operationId:e.operationId,scopeId:qe.scopeId,socketPath:qe.socketPath,generation:bt.targetGeneration,fenceId:bt.fenceId,executorLaunchId:Me,expiresAtMs:Date.parse(w.expires_at),readIdentity:sr,workspace:jr,localGithubConfinement:e.localGithubConfinement===!0};if(nr)de.environment=nr;if(e.claimOwner&&e.deviceIdentity&&e.claimOwner.device_id===e.deviceIdentity.deviceId){let ar=[e.deviceIdentity.apiOrigin,w.relay_url];if(Ir)ar.push(Ir);de.previewAuthority={owner:Object.freeze({...e.claimOwner}),rootId:e.deviceIdentity.rootId,relayOrigin:new URL(w.relay_url).origin,deniedPorts:ei(ar)}}io=qo(de)}if(await new Promise((de)=>{setImmediate(de)}),Pt)li(Ce);let Ct;if(g&&nr){try{let de=nr.install(g);Ct={snapshot_id:de.snapshot_id,installed_revision:de.installed_revision}}catch{}try{l(JSON.stringify({event:"hands.environment_at_claim",run_id:e.runId,installed:Ct!==void 0}))}catch{}}g=void 0;let fo=!1;if(e.headless){let de=Ul(Je,T);try{l(JSON.stringify({event:"hands.workspace_check",run_id:e.runId,outcome:de}))}catch{}if(de==="unready")throw new r("hands_workspace_unready","This Session's checkout is not a readable, writable directory at its own path, so Reason Hands cannot use it.");fo=de==="checked"}f("event_ready");let po=P(Ye);po.catch(()=>{return});let mo=Date.now();to=!0,await N("hands.ready",{...Ar,expiry_diagnostic:O,startup_stages:{version:1,browser_resolution_ms:cr(u.get("browser_resolution"),u.get("path_resolution")),path_resolution_ms:cr(u.get("path_resolution"),u.get("workspace_setup")),workspace_setup_ms:cr(u.get("workspace_setup"),u.get("event_started")),repl_setup_ms:cr(u.get("worker_setup"),un),worker_boot_ms:cr(un,pn),worker_dial_ms:cr(pn,lo),worker_ready_ms:cr(un,Ai),started_event_ms:cr(u.get("event_started"),Ae),started_join_wait_ms:cr(u.get("event_ready"),mo),total_ms:cr(u.get("entered"),mo)},...ou(e.claimedAtMs,u.get("entered"),oo),...e.managedPty?.startupVerified===!0?{managed_pty:{version:1,execution_mode:"host",descendant_cleanup_verified:!0}}:{},policy_mode:"full_access",policy_version:1,path_source:ne.source,connection_generation:bt.generation,...Ct?{environment_installed:Ct}:{},...fo?{workspace_checked:!0}:{},...C&&!It?{browser_state:"unavailable",browser_reason_code:no?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await po,f("ready"),so=Qs({path:De,initial:bt,signal:e.signal,isAlive:()=>er!==null&&er.exitCode===null&&er.signalCode===null&&k()<Date.parse(w.expires_at),publish:(de,ar)=>e.emitEvent("hands.reconnected",{...Ar,target_generation:de.targetGeneration,target_fence_id:de.fenceId,connection_generation:de.generation},ar),failed:()=>l(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:e.runId,executor_launch_id:Me}))});let ho=await ru({child:er,signal:e.signal,expiresAt:Date.parse(w.expires_at),now:k});if(ho==="cancelled"){let de=e.signal.reason instanceof r?e.signal.reason.code:"cancelled";throw Dt=de,new r(de,"Reason Hands was cancelled.")}if(ho==="exited")throw new r("hands_worker_exited","Reason Hands exited unexpectedly.");return Dt="expired",{...Ar,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(Ae){ao=Ae;let Ye=Ae instanceof r?Ae.code:"hands_failed",Tr=Ye==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(Ye);if(Dt=Tr?Ye:"failed",!Tr)await ln("hands.failed",{...Ar,reason_code:Ye,...Ye==="hands_worker_exited"&&er?Ql(er):{}});throw Ae}finally{so?.stop(),io?.();let Ae=er?await eu(er,a.stopTimeoutMs??Cl):null,Ye=!1;await e.desktopRecording?.close();try{await It?.stop()}catch{Ye=!0}if(await dn,(Ae==="stopped"||Ae==="already_exited"&&!to)&&!Ye)await ln("hands.stopped",{...Ar,reason_code:Dt});else if(Ae!==null||Ye){if(await ln("hands.failed",{...Ar,reason_code:Ae==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),ao===null||Ye)throw new r("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(co!==null)throw new r("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(W){let q=Hs(Z,W);if(q)try{l(JSON.stringify({event:"sandbox.hands_workspace_failed",...q}))}catch{}throw W}finally{try{if(!ae||ae.exitCode!==null||ae.signalCode!==null)ke?.();if(be!==null&&(!ae||ae.exitCode!==null||ae.signalCode!==null))Pl(be,{recursive:!0,force:!0})}finally{Ie?.(),we()}}}
|
|
452
|
+
export{Zn,Qn,K,La,$a,oe,x,p,_o,ge,se,D,ei,Ma,Lt,Ba,Ze,Fa,ja,Xr,Ha,ti,Ua,yo,za,E,_e,qa,Wa,Va,ri,ni,Yr,dt,ii,oi,Ga,wo,bo,si,Ka,$t,vo,Zr,ai,Pe,J,Qr,Ja,So,ci,Eo,li,ui,ko,xo,ur,Xa,Qe};
|