@reason-machines/cli-linux-x64 0.2.566 → 0.2.567
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/reason +1 -1
- package/bin/vm-hands/agent-network-0sng03r6.js +2 -0
- package/bin/vm-hands/api-credentials-h4neeejt.js +2 -0
- package/bin/vm-hands/api-mr6xds10.js +2 -0
- package/bin/vm-hands/{ask-relay-gk4ks8mg.js → ask-relay-c0v30hh6.js} +2 -2
- package/bin/vm-hands/connect-cli-jc4m755k.js +2 -0
- package/bin/vm-hands/credentials-nfx99zxr.js +2 -0
- package/bin/vm-hands/custom-endpoint-device-5047vdn3.js +2 -0
- package/bin/vm-hands/desktop-account-d1g1m6yb.js +2 -0
- package/bin/vm-hands/desktop-components-7ngf8byq.js +2 -0
- package/bin/vm-hands/desktop-delegate-4hb0163k.js +2 -0
- package/bin/vm-hands/device-workspace-8941tdsy.js +2 -0
- package/bin/vm-hands/{fsevents-ezcg3e40.js → fsevents-e57jgcfe.js} +1 -1
- package/bin/vm-hands/hands-worker-source-8a4kh44t.js +2 -0
- package/bin/vm-hands/{index-w92ys6ra.js → index-y21r07rf.js} +8 -8
- package/bin/vm-hands/install-receipt-rckwjqmt.js +2 -0
- package/bin/vm-hands/local-automation-3mdhfw08.js +2 -0
- package/bin/vm-hands/local-capabilities-6e0gkrqq.js +2 -0
- package/bin/vm-hands/local-desktop-users-hkdfxqtj.js +2 -0
- package/bin/vm-hands/local-display-mac-gsh74khc.js +2 -0
- package/bin/vm-hands/local-display-session-r6s0wghh.js +2 -0
- package/bin/vm-hands/local-display-video-61peg1pj.js +2 -0
- package/bin/vm-hands/local-managed-process-p8xd7m5f.js +2 -0
- package/bin/vm-hands/local-pty-session-w0yhjdvz.js +2 -0
- package/bin/vm-hands/managed-runtime-4s8q8r7f.js +2 -0
- package/bin/vm-hands/{network-auto-update-qwds22kt.js → network-auto-update-wep7067g.js} +2 -2
- package/bin/vm-hands/network-contract-ht0psj5j.js +2 -0
- package/bin/vm-hands/{network-sign-in-kqdg70kc.js → network-sign-in-rdnerhpz.js} +2 -2
- package/bin/vm-hands/package-3rv6jngd.js +2 -0
- package/bin/vm-hands/permissions-mmg1gbdx.js +2 -0
- package/bin/vm-hands/reason-hands-protocol-9r62swp0.js +2 -0
- package/bin/vm-hands/serve-service-k3mpxpj6.js +2 -0
- package/bin/vm-hands/{status-q55nprve.js → status-2s3zjapg.js} +5 -5
- package/bin/vm-hands/version-41q9twfs.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-pg7nnyc6.js → vm-hands-entry-lite-04nx5y4f.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-ezhfkjqr.js → vm-hands-entry-lite-07wr95rz.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-33at6g06.js → vm-hands-entry-lite-0xfme8gg.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-xfak34av.js → vm-hands-entry-lite-1as6h9ed.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-gxf2r5en.js → vm-hands-entry-lite-1cdtev4n.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-fn2805g8.js → vm-hands-entry-lite-1sy80ca9.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-yg4dk99m.js → vm-hands-entry-lite-2927z566.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-6adz91f3.js → vm-hands-entry-lite-298kzt93.js} +70 -70
- package/bin/vm-hands/{vm-hands-entry-lite-3q2ng4e9.js → vm-hands-entry-lite-3594pdj0.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-rz1ep81m.js → vm-hands-entry-lite-3r063pb4.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-2qfmabqn.js → vm-hands-entry-lite-4kb5rq3d.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-5qrft0nw.js → vm-hands-entry-lite-6g9we34r.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-s93f3pbv.js → vm-hands-entry-lite-732hnx41.js} +3 -3
- package/bin/vm-hands/vm-hands-entry-lite-7aeqbfc8.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-y0jtj8zz.js → vm-hands-entry-lite-8twdd0ff.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-x6ybft9v.js → vm-hands-entry-lite-9gn7k5rp.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-b2w5071h.js → vm-hands-entry-lite-ax2w9ywb.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-2gxv7v1h.js → vm-hands-entry-lite-b3mfma12.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-qjrgvdbj.js → vm-hands-entry-lite-bbjsnjct.js} +21 -21
- package/bin/vm-hands/{vm-hands-entry-lite-zp7chzcc.js → vm-hands-entry-lite-bc9zq8gx.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-ngry8nkq.js → vm-hands-entry-lite-bqs4pkyb.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-zpvr7wc6.js → vm-hands-entry-lite-bt6skt4h.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-q62g6sx0.js → vm-hands-entry-lite-chve4vmh.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-72h3t64b.js → vm-hands-entry-lite-crjaacc2.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-fs6jbfp3.js → vm-hands-entry-lite-cy8yc9gb.js} +19 -19
- package/bin/vm-hands/{vm-hands-entry-lite-30z7wsqr.js → vm-hands-entry-lite-dfphra23.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-a3gq377t.js → vm-hands-entry-lite-dh87ysh2.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-994kah8n.js → vm-hands-entry-lite-dtw6cj95.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-a8z57vry.js → vm-hands-entry-lite-dzdjwa06.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-chq0qx9f.js → vm-hands-entry-lite-g0bpdyfz.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-rxydyqke.js → vm-hands-entry-lite-h7f5a5mb.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-13nx02p7.js → vm-hands-entry-lite-hh0kba1y.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-fccn6s4j.js → vm-hands-entry-lite-hpe54h0b.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-kbnxk71q.js → vm-hands-entry-lite-hpw27zfb.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-284z7ct8.js → vm-hands-entry-lite-kankyeep.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-9wp7ahwa.js → vm-hands-entry-lite-n5jyzccm.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-88dxn9b5.js → vm-hands-entry-lite-peyr9y6z.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-cmmb9k3g.js → vm-hands-entry-lite-r131db1f.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-72084j3g.js → vm-hands-entry-lite-rmcdfbkk.js} +24 -24
- package/bin/vm-hands/{vm-hands-entry-lite-1b21avcs.js → vm-hands-entry-lite-sb1xtqxr.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-b1vanmtv.js → vm-hands-entry-lite-sxnvhzy5.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-cc8hwgxc.js → vm-hands-entry-lite-t2rhwchw.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-sh4mqy93.js → vm-hands-entry-lite-t3k90kdn.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-bkhc5mt4.js → vm-hands-entry-lite-tv5mcw97.js} +6 -6
- package/bin/vm-hands/{vm-hands-entry-lite-12ck5swp.js → vm-hands-entry-lite-tzv8s0e7.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-50kqbrb7.js → vm-hands-entry-lite-vedb5r12.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-jj7873n8.js → vm-hands-entry-lite-vha0pf8k.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-fxptf351.js → vm-hands-entry-lite-vvhfaxpd.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-3gc2bn5a.js → vm-hands-entry-lite-wtjqjvea.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-p02vay5n.js → vm-hands-entry-lite-xd393rm3.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-z65xva21.js → vm-hands-entry-lite-ys4jhf7n.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-ttfqxjms.js → vm-hands-entry-lite-zaj1vnnd.js} +9 -9
- package/bin/vm-hands/vm-hands-entry-lite.js +2 -2
- package/bin/vm-hands/{vm-hands-executor-r6v6tzqj.js → vm-hands-executor-31ea40aw.js} +4 -4
- package/bin/vm-hands/{vm-hands-op-runner-wcbc42nw.js → vm-hands-op-runner-6r390v3d.js} +1 -1
- package/bin/vm-hands/{vm-hands-runtime-2t08ywa4.js → vm-hands-runtime-z9m50n9p.js} +3 -3
- package/bin/vm-hands/worker-preview-readiness-w4zy5g2p.js +2 -0
- package/bin/vm-hands/worker-sandbox-2trfs79b.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/agent-network-pak3wvrv.js +0 -2
- package/bin/vm-hands/api-credentials-a433ykxs.js +0 -2
- package/bin/vm-hands/api-kex52g1d.js +0 -2
- package/bin/vm-hands/connect-cli-afdc1h11.js +0 -2
- package/bin/vm-hands/credentials-sk4sag42.js +0 -2
- package/bin/vm-hands/custom-endpoint-device-3jscber1.js +0 -2
- package/bin/vm-hands/desktop-account-xma0330a.js +0 -2
- package/bin/vm-hands/desktop-components-y89gpa6e.js +0 -2
- package/bin/vm-hands/desktop-delegate-tch2qzx0.js +0 -2
- package/bin/vm-hands/device-workspace-4bj43nxq.js +0 -2
- package/bin/vm-hands/hands-worker-source-8pe7yv0m.js +0 -2
- package/bin/vm-hands/install-receipt-68xxg7hn.js +0 -2
- package/bin/vm-hands/local-automation-1s7035zm.js +0 -2
- package/bin/vm-hands/local-capabilities-h1hxzrhn.js +0 -2
- package/bin/vm-hands/local-desktop-users-jpf0resr.js +0 -2
- package/bin/vm-hands/local-display-mac-h5yz0ydd.js +0 -2
- package/bin/vm-hands/local-display-session-0vw1x2k6.js +0 -2
- package/bin/vm-hands/local-display-video-k4bgptc7.js +0 -2
- package/bin/vm-hands/local-managed-process-b79p5wwv.js +0 -2
- package/bin/vm-hands/local-pty-session-tqn2xmph.js +0 -2
- package/bin/vm-hands/managed-runtime-9jfx2885.js +0 -2
- package/bin/vm-hands/network-contract-nkwcf4r9.js +0 -2
- package/bin/vm-hands/package-9w0mmxb5.js +0 -2
- package/bin/vm-hands/permissions-q9nfdxrh.js +0 -2
- package/bin/vm-hands/reason-hands-protocol-pck5har9.js +0 -2
- package/bin/vm-hands/serve-service-hcc0zvg8.js +0 -2
- package/bin/vm-hands/version-7q2ft41r.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-997y1m1r.js +0 -3
- package/bin/vm-hands/worker-preview-readiness-h96yr4wf.js +0 -2
- package/bin/vm-hands/worker-sandbox-6kkhvryn.js +0 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{gt,gr,Se}from"./vm-hands-entry-lite-xfak34av.js";import{at,kt,Oe,xt,Ke,Dr,Zt,Ne,X,te,Wi}from"./vm-hands-entry-lite-kbnxk71q.js";import{An,Cr}from"./vm-hands-entry-lite-33at6g06.js";import{pc,F,qt,_t,Wt,He,Vt,zo,yt,wn,nt,Ee,ce,it,Pi,Ri,Wo}from"./vm-hands-entry-lite-zp7chzcc.js";import{Ct,Je,ct,Le,Pt,xe,pe}from"./vm-hands-entry-lite-fxptf351.js";import{an,fi,dr,Re,U,H,T,Ro}from"./vm-hands-entry-lite-qjrgvdbj.js";import{Ft,gi,Io,lc,je,Do}from"./vm-hands-entry-lite-s93f3pbv.js";import{ue}from"./vm-hands-entry-lite-cc8hwgxc.js";import{wa}from"./vm-hands-entry-lite-sh4mqy93.js";import{v,Bt,cn,pr,oc,ht,ft}from"./vm-hands-entry-lite-b1vanmtv.js";import{b,m,y}from"./vm-hands-entry-lite-yg4dk99m.js";import{L}from"./vm-hands-entry-lite-fccn6s4j.js";import{$n}from"./vm-hands-entry-lite-994kah8n.js";import{s,Uc,zc,Ge,Wc}from"./vm-hands-entry-lite-12ck5swp.js";import{he,fa,ma,Xc,I,t,V,zr,o,_,d,n,h,P,$e,c,i}from"./vm-hands-entry-lite-zpvr7wc6.js";import{_a}from"./vm-hands-entry-lite-fn2805g8.js";import{Zc,Ye,Sa,B,It,Be,G}from"./vm-hands-entry-lite-pg7nnyc6.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{readFileSync as mo,realpathSync as _o,statSync as Hi}from"fs";import{homedir as Ni}from"os";import{dirname as Li,isAbsolute as Bi,join as dt,sep as ji}from"path";var Ci=()=>{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=Xc(f.input),R=u[k]??k;return`Invalid input: expected ${g}, received ${R}`}case"invalid_value":if(f.values.length===1)return`Invalid input: expected ${ma(f.values[0])}`;return`Invalid option: expected one of ${fa(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":""}: ${fa(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 _n(){return{localeError:Ci()}}he(_n());var ti="--proxy",ri="--proxy-ca-file",Mi=262144;class K extends Error{}function hn(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 za(e){let a=new URL(e.url),l=a.port||(a.protocol==="https:"?"443":"80");return`${a.hostname}:${l}`}function Fi(e={}){let a=e.home??Ni(),l=e.statePath??gt();return[Li(l),dt(a,".ssh"),dt(a,".aws"),dt(a,".gnupg"),dt(a,".kube"),dt(a,"Library","Keychains")]}function Ui(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=_o(e);let R=Hi(l);u=R.size,f=R.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=Fi(a).flatMap((R)=>{try{let w=_o(R);return w===R?[R]:[R,w]}catch{return[R]}});for(let R of[e,l])if(g.some((w)=>Ui(w,R)))throw new K("The proxy CA file must not live inside a credential directory.");let k;try{k=mo(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 qa(e,a={}){if(!e.proxyUrl)throw new K("A proxy URL is required.");let l=hn(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=mo(e.caFile,"utf8")}catch{throw new K(`The configured proxy CA file is not readable: ${e.caFile}`)}u=!0}let R={...k,proxy:e.url,...l===void 0?{}:{tls:{ca:l}}};return a(g,R)}}import{createHash as $i}from"crypto";import{isAbsolute as go,join as wo,relative as yo,resolve as Tt,sep as Oo}from"path";var At=t().min(1).refine(go,"absolute path required"),ho=h({version:i(1),apiOrigin:zr(),channel:c(["staging","production"]),stateDirectory:At,workspaceRoot:At,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 hn(e)===e}catch{return!1}},"invalid proxy URL"),caFile:At.optional()}).optional(),userChrome:_().optional(),cloudSessions:i(!0).optional(),localLogins:_().optional(),folders:d(At).min(1).max(31).optional()}),Ki=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,x=P("channel",[ho,ho.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:"&&Cr(u.origin))||!Cr(u.origin)&&!An(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 wo(e.stateDirectory,`headless-${e.channel}`)}function bo(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(wo(Oo,yo(Tt(e),Tt(a))))}function se(e,a){let l=yo(Tt(e),Tt(a));return l===""||l!==".."&&!l.startsWith(`..${Oo}`)&&!go(l)}function O(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 ni(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 yr(){throw new r("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var Vi=60000;function To(e){let a=new AbortController,l=new Map,u=(w)=>JSON.stringify([w.jobId,w.port]);function f(w){let A=e.authority.owner;if(a.signal.aborted||!e.isCurrent()||e.expiresAtMs<=Date.now()||w.organization_id!==A.organization_id||w.user_id!==A.user_id||w.device_id!==A.device_id)yr()}function g(w){let A;try{A=e.environment.current()}catch{return null}return A.binding.target_generation===w.generation&&A.binding.target_fence_id===w.fenceId&&A.run_id===e.runId&&A.device_id===e.authority.owner.device_id&&A.root_id===e.authority.rootId?A:null}async function k(w,A,N){let D=await R(w,A,N);if(D!=="moved")return D;let S=await R(w,A,N);return S==="moved"?null:S}async function R(w,A,N){try{f(e.authority.owner);let D=e.identity();if(!D||N.aborted||w.expiresAtMs<=Date.now()||w.expiresAtMs>e.expiresAtMs)return null;let S=A.opened,M=S!==void 0&&D.generation>S.generation,j=g(D);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;A.recoveringSinceMs=void 0}else if(Date.now()-(A.recoveringSinceMs??=Date.now())>Vi)return null}else if(!j||w.expiresAtMs>Date.parse(j.expires_at)||S&&(D.generation!==S.generation||D.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:D.generation,fenceId:D.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!==D.generation||z.fenceId!==D.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!==D.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&&D.generation===w.generation&&D.fenceId===w.fenceId)A.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,A,N){f(A);let{binding:D,deviceRelayUrl:S}=pr(w);if(N.aborted||D.expiresAtMs<=Date.now()||D.expiresAtMs>Date.now()+v.lifetimeMs||new URL(S).origin!==e.authority.relayOrigin)yr();let M=u(D),j=l.get(M);if(j){if(!Bt(j.binding,D)||j.relay!==S)yr();if(await j.opened,!await cn(()=>j.port.check())||N.aborted||j.abort.signal.aborted)yr();return{opened:!0,binding:D}}if(l.size>=Gi)yr();let C=new AbortController,z={},Q=ft({binding:D,deniedPorts:e.authority.deniedPorts,readCurrentJob:()=>k(D,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=ht({binding:D,deviceRelayUrl:S,port:Q,signal:C.signal}),we={binding:D,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(A),C.signal.aborted||!await cn(()=>Q.check()))yr();return{opened:!0,binding:D}}catch{C.abort(),Ie(),yr()}},async close(w,A){f(A);let{binding:N}=oc(w),D=l.get(u(N));if(!D||!Bt(D.binding,N))yr();return D.abort.abort(),await D.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 gn}from"ws";var Ho=(e)=>("data"in e)?e.data.length:e.bytes,No=2*Vt;function Fe(e){throw new r(e,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var Wr=(e)=>!["starting","running"].includes(e.state);function Wa(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((A)=>!u.includes(A))||!nt(a)||!nt(e.session_id)||typeof e.expires_at!=="string"||typeof e.relay_url!=="string"||e.relay_url.length>4096||![e.cols,e.rows].every((A)=>Number.isSafeInteger(A)&&Number(A)>=1&&Number(A)<=yt))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||!it(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 R=Date.parse(e.expires_at);if(!Number.isSafeInteger(R)||R<=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(R,l+43200000)}}}async function Lo(e){let{session:a,binding:l}=e;if(l.assertCurrent(),e.signal.aborted||Date.now()>=a.leaseExpiresAtMs)Fe("cancelled");let u=new gn(a.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:He}),f=new AbortController,g=()=>{},k=()=>{f.abort(),g()};e.signal.addEventListener("abort",k,{once:!0});let R=setTimeout(k,Math.max(1,a.leaseExpiresAtMs-Date.now())),w=[],A=0,N=0,D=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||A+ne.length>zo){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<=yt))throw Error("invalid_control");w.push({cols:fe.cols,rows:fe.rows,bytes:ne.length})}catch{Y("invalid_pty_control");return}A+=ne.length,g()});function re(W){return Wo(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(!Wr(ne)&&ne.leaseExpiresAtMs<=Date.now())Fe("pty_binding_changed");return ne}function Z(W){if(l.assertCurrent(),f.signal.aborted||u.readyState!==gn.OPEN||u.bufferedAmount+Buffer.byteLength(W)>No)Fe("pty_output_backpressure");u.send(W)}function be(W){if(W.firstCursor>D+1)D=W.firstCursor-1;for(let q of W.pty.output){if(q.cursor<=D)continue;if(q.cursor!==D+1)Fe("pty_output_gap");let ne=Buffer.from(q.dataBase64,"base64");if(u.bufferedAmount+ne.length>No)return!1;Z(ne),D=q.cursor}if(D!==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(wn),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:D}})}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>D+1,fe=be(C);if(Wr(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(Wr(C))break;let rr=++N;if(C=await Ie({jobId:a.jobId,action:"resize",input:{sequence:rr,...Me}}),C.inputSequence!==rr)Fe("job_input_sequence")}continue}let ee=Wr(C)||ye?void 0:w.shift();if(ee){A-=Ho(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),A+=Ho(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:D}})}catch(me){if(!j||!(me instanceof r)||me.code!=="cancelled")throw me}}}catch(W){Q??=W}finally{if(M=!1,w.length=0,clearTimeout(R),e.signal.removeEventListener("abort",k),k(),S&&(!C||!Wr(C)))try{C=await ae()}catch{C=void 0}try{if(!C||!Wr(C)||C.pty?.cleanup!=="confirmed")Fe("pty_cleanup_unconfirmed");let W=re(C);if(u.readyState===gn.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 kn}from"crypto";import{spawnSync as Fo}from"child_process";import{closeSync as Bo,constants as bn,fstatSync as Yi,fsyncSync as Xi,lstatSync as lt,mkdirSync as Zi,mkdtempSync as Uo,openSync as jo,readFileSync as Qi,readdirSync as $o,realpathSync as kr,rmSync as yn,unlinkSync as ea}from"fs";import{createConnection as ra}from"net";import{dirname as ta,join as Ar,sep as vn}from"path";import{tmpdir as Ko}from"os";var er=new Map,vr=new Map;function mr(e,a){return qi("sha256").update(JSON.stringify([e,a])).digest("hex")}function Fr(e){try{Zi(e,{mode:448})}catch(l){if(!(l instanceof Error&&("code"in l)&&l.code==="EEXIST"))throw l}let a=lt(e);if(!a.isDirectory()||a.isSymbolicLink()||!G(a)||kr(e)!==e)throw new r("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function na(e){let a;try{a=lt(e)}catch(l){if(l instanceof Error&&"code"in l&&l.code==="ENOENT")return!1;throw l}return!a.isDirectory()||a.isSymbolicLink()||$o(e).length>0}function oa(e){if(process.platform==="win32")return Sa();let a=e.map((l)=>{try{return kr(l)}catch{return l}});for(let l of[()=>Sa(),()=>kr("/dev/shm"),()=>kr(Ko())]){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 $t(e){let a=mr(e.root,e.runId),l=e.previousRuntimeDirectories?.find((k)=>na(Ar(k,"jobs",a.slice(0,16))))??e.runtimeDirectory;Fr(l);let u=Ar(l,"jobs");Fr(u);let f=Ar(u,a.slice(0,16));if(e.maxScopes!==void 0){let k=$o(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.")}Fr(f);let g=Uo(Ar(oa(e.folders??[]),"reason-j-"));try{return Fr(g),{journalDirectory:f,scopeId:a,launchDirectory:g,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${kn()}`:Ar(g,"control.sock"),disposeSocket:()=>yn(g,{recursive:!0,force:!0})}}catch(k){throw yn(g,{recursive:!0,force:!0}),k}}var sa=60000,ia=5000;function aa(e){if(process.platform==="win32")return ca(e);let a=Fo("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 ca(e){let a=Fo(B("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:It()}),l=a.status===0?Date.parse(a.stdout.trim()):Number.NaN;return Number.isFinite(l)?l:null}function Go(e,a={}){let l=Ar(e.journalDirectory,"owner.lock"),u;try{u=jo(l,bn.O_RDONLY|bn.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<sa)return null;k={reason:"never_written",executorLaunchId:null}}else{let{version:A,scopeId:N,pid:D,createdAtMs:S,executorLaunchId:M}=g;if(A!==1||N!==e.scopeId||typeof M!=="string"||typeof D!=="number"||!Number.isSafeInteger(D)||D<1||D===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")}}))(D))k={reason:"owner_exited",executorLaunchId:M};else{let C=(a.startedAtMs??aa)(D);if(C===null||C<=S+ia)return null;k={reason:"pid_reused",executorLaunchId:M}}}let R=lt(l);if(R.dev!==f.dev||R.ino!==f.ino)return null;ea(l);let w=jo(e.journalDirectory,bn.O_RDONLY);try{Xi(w)}finally{Bo(w)}return k}catch{return null}finally{Bo(u)}}function Jo(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=mr(a.root,a.runId);if(er.has(l)||a.operationId!==void 0&&vr.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=To({authority:a.previewAuthority,runId:a.runId,expiresAtMs:a.expiresAtMs,executorLaunchId:a.executorLaunchId,environment:a.environment,isCurrent:()=>er.get(u.key)===u,identity:()=>{try{return Ur(a)}catch{return null}},inspect:(f,g)=>{if(er.get(u.key)!==u)throw new r("preview_unavailable","The Hands supervisor is no longer current.");return Vo(a,{jobId:f,action:"inspect",input:{after:0}},g)}});if(er.set(l,u),a.operationId!==void 0)vr.set(a.operationId,u);return()=>{if(er.get(u.key)===u)er.delete(u.key);if(a.operationId!==void 0&&vr.get(a.operationId)===u)vr.delete(a.operationId);u.previews?.dispose();for(let f of u.terminals.values())f.abort()}}var da=5000,la=20;async function Va(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=vr.get(e.operationId);if(!l||l.binding.root!==e.root)return a("No live Hands supervisor owns this operation.");for(let f=Date.now()+da;;){if(e.signal?.aborted)a("The Hands rebind was cancelled.");if(vr.get(e.operationId)!==l)a("The Hands supervisor is no longer current.");let g=null;try{g=Ur(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,la))}if(vr.get(e.operationId)!==l||er.get(l.key)!==l)a("The Hands supervisor is no longer current.");let u=mr(e.root,e.runId);if(l.key===u)return;if(er.has(u))a("The taking run already has a live Hands job supervisor.");er.delete(l.key);for(let f of l.terminals.values())f.abort();l.key=u,er.set(u,l)}function Qe(e){let a="operationId"in e?vr.get(e.operationId):er.get(mr(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 Ga(e){let a=er.get(mr(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 Ka(e){let a=er.get(mr(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 rn(e){let a=mr(e.root,e.runId),l=er.get(a),u=l?.binding,f=u?.runId,g=u?.previewAuthority,k=u?.environment,R=e.owner&&{...e.owner},w=e.authority&&{...e.authority},A=()=>{throw new r("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!l||!u||!g||!k||!R||!w||!u.workspace)return A();let N=Object.freeze({...u.workspace}),D=Ur(u),S=k.current(),M=()=>{if(er.get(a)!==l||R.organization_id!==g.owner.organization_id||R.user_id!==g.owner.user_id||R.device_id!==g.owner.device_id||e.deviceId!==g.owner.device_id||e.rootId!==g.rootId||X(e.workspace)!==X(N))A();let C=Ur(u),z=k.current();if(C.generation!==D.generation||C.fenceId!==D.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!==D.generation||z.binding.target_fence_id!==D.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!==D.generation||w.target_fence_id!==D.fenceId)A()};if(M(),new URL(e.session.relayUrl).origin!==g.relayOrigin||l.terminals.has(e.session.jobId)||l.terminals.size>=4)return A();let j=new AbortController;l.terminals.set(e.session.jobId,j);try{return await Lo({session:{...e.session,leaseExpiresAtMs:Math.min(e.session.leaseExpiresAtMs,D.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:D.generation,fenceId:D.fenceId,executorLaunchId:D.executorLaunchId},request:(C,z)=>ii(D,Pi(JSON.stringify({...C,type:"job",version:2,generation:D.generation,id:kn()})),z)}})}finally{if(l.terminals.get(e.session.jobId)===j)l.terminals.delete(e.session.jobId)}}async function Ja(e){if(it(e.payload.jobId))throw new r("pty_binding_required","PTY jobs require the bound terminal capability.");let a=er.get(mr(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 Vo(a,e.payload,e.signal)}var ua=1e4,pa=20,ha=_t/2,ga=qt/2,ba=(e)=>e.output.reduce((a,l)=>a+l.text.length,0);async function Vo(e,a,l){if(Object.keys(a).some((A)=>!["jobId","action","input","waitForExitMs"].includes(A)))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>ua))throw new r("invalid_payload","Only a script start may wait for its job, within its bound.");let g=(A)=>{let N=Ur(e);return ii(N,Pi(JSON.stringify({...A,type:"job",version:2,generation:N.generation,id:kn()})),l)},k=await g(f);if(u===void 0)return k;let R=Date.now()+u,w=k;while(w.ok&&["starting","running"].includes(w.job.state)&&w.job.output.length<ha&&ba(w.job)<ga&&!l.aborted&&Date.now()<R){if(await new Promise((A)=>setTimeout(A,Math.min(pa,R-Date.now()))),l.aborted)break;try{let A=await g({jobId:f.jobId,action:"inspect",input:{after:0}});if(!A.ok)break;w=A}catch{break}}return w}function Ur(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 ii(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="",R=!1,w,A=(D,S)=>{if(R)return;if(R=!0,clearTimeout(w),l.removeEventListener("abort",N),g.destroy(),D)f(D);else u(S)},N=()=>A(new r("cancelled","Job control waiter cancelled; inspect before retrying mutations."));l.addEventListener("abort",N,{once:!0}),g.setEncoding("utf8"),w=setTimeout(()=>A(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",()=>A(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",(D)=>{if(k+=D,Buffer.byteLength(k)>Wt)A(new r("hands_job_result_unknown","Hands job result exceeded its bound."))}),g.once("end",()=>{if(Date.now()>=e.expiresAtMs){A(new r("hands_job_result_unknown","Hands authority expired before the result was acknowledged."));return}try{let D=
|
|
4
|
-
`)}var
|
|
2
|
+
import{gt,gr,Se}from"./vm-hands-entry-lite-1as6h9ed.js";import{at,kt,Oe,xt,Ke,Dr,Zt,Ne,X,te,Vi}from"./vm-hands-entry-lite-hpw27zfb.js";import{Pn,Cr}from"./vm-hands-entry-lite-0xfme8gg.js";import{pc,F,qt,_t,Wt,He,Vt,qo,yt,bn,nt,Ee,ce,it,Ri,Ti,Vo}from"./vm-hands-entry-lite-bc9zq8gx.js";import{Ct,Je,ct,Le,Pt,xe,pe}from"./vm-hands-entry-lite-vvhfaxpd.js";import{cn,mi,dr,Re,U,H,T,To}from"./vm-hands-entry-lite-bbjsnjct.js";import{Ft,_i,Do,lc,je,Oo}from"./vm-hands-entry-lite-732hnx41.js";import{ue}from"./vm-hands-entry-lite-t2rhwchw.js";import{ba}from"./vm-hands-entry-lite-t3k90kdn.js";import{v,Bt,ln,pr,oc,ht,ft}from"./vm-hands-entry-lite-sxnvhzy5.js";import{b,m,y}from"./vm-hands-entry-lite-2927z566.js";import{L}from"./vm-hands-entry-lite-hpe54h0b.js";import{Mn}from"./vm-hands-entry-lite-dtw6cj95.js";import{s,Uc,zc,Ge,Wc}from"./vm-hands-entry-lite-tzv8s0e7.js";import{he,ma,ga,Xc,I,t,V,zr,o,_,d,n,h,P,$e,c,i}from"./vm-hands-entry-lite-bt6skt4h.js";import{ya}from"./vm-hands-entry-lite-1sy80ca9.js";import{Zc,Ye,Ea,B,It,Be,G}from"./vm-hands-entry-lite-04nx5y4f.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{readFileSync as ho,realpathSync as mo,statSync as Ni}from"fs";import{homedir as Li}from"os";import{dirname as Bi,isAbsolute as ji,join as dt,sep as Mi}from"path";var Hi=()=>{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=Xc(f.input),R=u[k]??k;return`Invalid input: expected ${g}, received ${R}`}case"invalid_value":if(f.values.length===1)return`Invalid input: expected ${ga(f.values[0])}`;return`Invalid option: expected one of ${ma(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":""}: ${ma(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:Hi()}}he(mn());var ri="--proxy",ni="--proxy-ca-file",Wi=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 qa(e){let a=new URL(e.url),l=a.port||(a.protocol==="https:"?"443":"80");return`${a.hostname}:${l}`}function Fi(e={}){let a=e.home??Li(),l=e.statePath??gt();return[Bi(l),dt(a,".ssh"),dt(a,".aws"),dt(a,".gnupg"),dt(a,".kube"),dt(a,"Library","Keychains")]}function Ui(e,a){return a===e||a.startsWith(e+Mi)}function zi(e,a={}){if(!ji(e))throw new K("The proxy CA file must be an absolute path.");let l,u,f;try{l=mo(e);let R=Ni(l);u=R.size,f=R.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>Wi)throw new K("The proxy CA file must be 256 KB or smaller.");let g=Fi(a).flatMap((R)=>{try{let w=mo(R);return w===R?[R]:[R,w]}catch{return[R]}});for(let R of[e,l])if(g.some((w)=>Ui(w,R)))throw new K("The proxy CA file must not live inside a credential directory.");let k;try{k=ho(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 Wa(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=ho(e.caFile,"utf8")}catch{throw new K(`The configured proxy CA file is not readable: ${e.caFile}`)}u=!0}let R={...k,proxy:e.url,...l===void 0?{}:{tls:{ca:l}}};return a(g,R)}}import{createHash as $i}from"crypto";import{isAbsolute as bo,join as wo,relative as yo,resolve as Tt,sep as Io}from"path";var At=t().min(1).refine(bo,"absolute path required"),go=h({version:i(1),apiOrigin:zr(),channel:c(["staging","production"]),stateDirectory:At,workspaceRoot:At,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:At.optional()}).optional(),userChrome:_().optional(),cloudSessions:i(!0).optional(),localLogins:_().optional(),folders:d(At).min(1).max(31).optional()}),Ki=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,x=P("channel",[go,go.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:"&&Cr(u.origin))||!Cr(u.origin)&&!Pn(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 wo(e.stateDirectory,`headless-${e.channel}`)}function vo(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(wo(Io,yo(Tt(e),Tt(a))))}function se(e,a){let l=yo(Tt(e),Tt(a));return l===""||l!==".."&&!l.startsWith(`..${Io}`)&&!bo(l)}function O(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 ii(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 yr(){throw new r("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var qi=60000;function Ho(e){let a=new AbortController,l=new Map,u=(w)=>JSON.stringify([w.jobId,w.port]);function f(w){let A=e.authority.owner;if(a.signal.aborted||!e.isCurrent()||e.expiresAtMs<=Date.now()||w.organization_id!==A.organization_id||w.user_id!==A.user_id||w.device_id!==A.device_id)yr()}function g(w){let A;try{A=e.environment.current()}catch{return null}return A.binding.target_generation===w.generation&&A.binding.target_fence_id===w.fenceId&&A.run_id===e.runId&&A.device_id===e.authority.owner.device_id&&A.root_id===e.authority.rootId?A:null}async function k(w,A,N){let D=await R(w,A,N);if(D!=="moved")return D;let S=await R(w,A,N);return S==="moved"?null:S}async function R(w,A,N){try{f(e.authority.owner);let D=e.identity();if(!D||N.aborted||w.expiresAtMs<=Date.now()||w.expiresAtMs>e.expiresAtMs)return null;let S=A.opened,M=S!==void 0&&D.generation>S.generation,j=g(D);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;A.recoveringSinceMs=void 0}else if(Date.now()-(A.recoveringSinceMs??=Date.now())>qi)return null}else if(!j||w.expiresAtMs>Date.parse(j.expires_at)||S&&(D.generation!==S.generation||D.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:D.generation,fenceId:D.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!==D.generation||z.fenceId!==D.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!==D.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&&D.generation===w.generation&&D.fenceId===w.fenceId)A.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,A,N){f(A);let{binding:D,deviceRelayUrl:S}=pr(w);if(N.aborted||D.expiresAtMs<=Date.now()||D.expiresAtMs>Date.now()+v.lifetimeMs||new URL(S).origin!==e.authority.relayOrigin)yr();let M=u(D),j=l.get(M);if(j){if(!Bt(j.binding,D)||j.relay!==S)yr();if(await j.opened,!await ln(()=>j.port.check())||N.aborted||j.abort.signal.aborted)yr();return{opened:!0,binding:D}}if(l.size>=Gi)yr();let C=new AbortController,z={},Q=ft({binding:D,deniedPorts:e.authority.deniedPorts,readCurrentJob:()=>k(D,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=ht({binding:D,deviceRelayUrl:S,port:Q,signal:C.signal}),we={binding:D,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(A),C.signal.aborted||!await ln(()=>Q.check()))yr();return{opened:!0,binding:D}}catch{C.abort(),Ie(),yr()}},async close(w,A){f(A);let{binding:N}=oc(w),D=l.get(u(N));if(!D||!Bt(D.binding,N))yr();return D.abort.abort(),await D.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 wn}from"ws";var No=(e)=>("data"in e)?e.data.length:e.bytes,Lo=2*Vt;function Fe(e){throw new r(e,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var Wr=(e)=>!["starting","running"].includes(e.state);function Va(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((A)=>!u.includes(A))||!nt(a)||!nt(e.session_id)||typeof e.expires_at!=="string"||typeof e.relay_url!=="string"||e.relay_url.length>4096||![e.cols,e.rows].every((A)=>Number.isSafeInteger(A)&&Number(A)>=1&&Number(A)<=yt))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||!it(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 R=Date.parse(e.expires_at);if(!Number.isSafeInteger(R)||R<=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(R,l+43200000)}}}async function Bo(e){let{session:a,binding:l}=e;if(l.assertCurrent(),e.signal.aborted||Date.now()>=a.leaseExpiresAtMs)Fe("cancelled");let u=new wn(a.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:He}),f=new AbortController,g=()=>{},k=()=>{f.abort(),g()};e.signal.addEventListener("abort",k,{once:!0});let R=setTimeout(k,Math.max(1,a.leaseExpiresAtMs-Date.now())),w=[],A=0,N=0,D=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||A+ne.length>qo){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<=yt))throw Error("invalid_control");w.push({cols:fe.cols,rows:fe.rows,bytes:ne.length})}catch{Y("invalid_pty_control");return}A+=ne.length,g()});function re(W){return Vo(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(!Wr(ne)&&ne.leaseExpiresAtMs<=Date.now())Fe("pty_binding_changed");return ne}function Z(W){if(l.assertCurrent(),f.signal.aborted||u.readyState!==wn.OPEN||u.bufferedAmount+Buffer.byteLength(W)>Lo)Fe("pty_output_backpressure");u.send(W)}function be(W){if(W.firstCursor>D+1)D=W.firstCursor-1;for(let q of W.pty.output){if(q.cursor<=D)continue;if(q.cursor!==D+1)Fe("pty_output_gap");let ne=Buffer.from(q.dataBase64,"base64");if(u.bufferedAmount+ne.length>Lo)return!1;Z(ne),D=q.cursor}if(D!==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(bn),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:D}})}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>D+1,fe=be(C);if(Wr(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(Wr(C))break;let rr=++N;if(C=await Ie({jobId:a.jobId,action:"resize",input:{sequence:rr,...Me}}),C.inputSequence!==rr)Fe("job_input_sequence")}continue}let ee=Wr(C)||ye?void 0:w.shift();if(ee){A-=No(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),A+=No(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:D}})}catch(me){if(!j||!(me instanceof r)||me.code!=="cancelled")throw me}}}catch(W){Q??=W}finally{if(M=!1,w.length=0,clearTimeout(R),e.signal.removeEventListener("abort",k),k(),S&&(!C||!Wr(C)))try{C=await ae()}catch{C=void 0}try{if(!C||!Wr(C)||C.pty?.cleanup!=="confirmed")Fe("pty_cleanup_unconfirmed");let W=re(C);if(u.readyState===wn.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 Yi,randomUUID as Sn}from"crypto";import{spawnSync as Fo}from"child_process";import{closeSync as jo,constants as yn,fstatSync as Xi,fsyncSync as Zi,lstatSync as lt,mkdirSync as Qi,mkdtempSync as Uo,openSync as Mo,readFileSync as ea,readdirSync as zo,realpathSync as kr,rmSync as vn,unlinkSync as ra}from"fs";import{createConnection as ta}from"net";import{dirname as na,join as Ar,sep as kn}from"path";import{tmpdir as $o}from"os";var er=new Map,vr=new Map;function mr(e,a){return Yi("sha256").update(JSON.stringify([e,a])).digest("hex")}function Fr(e){try{Qi(e,{mode:448})}catch(l){if(!(l instanceof Error&&("code"in l)&&l.code==="EEXIST"))throw l}let a=lt(e);if(!a.isDirectory()||a.isSymbolicLink()||!G(a)||kr(e)!==e)throw new r("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function oa(e){let a;try{a=lt(e)}catch(l){if(l instanceof Error&&"code"in l&&l.code==="ENOENT")return!1;throw l}return!a.isDirectory()||a.isSymbolicLink()||zo(e).length>0}function sa(e){if(process.platform==="win32")return Ea();let a=e.map((l)=>{try{return kr(l)}catch{return l}});for(let l of[()=>Ea(),()=>kr("/dev/shm"),()=>kr($o())]){let u;try{u=l()}catch{continue}if(!a.some((f)=>u===f||u.startsWith(f.endsWith(kn)?f:f+kn)))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 $t(e){let a=mr(e.root,e.runId),l=e.previousRuntimeDirectories?.find((k)=>oa(Ar(k,"jobs",a.slice(0,16))))??e.runtimeDirectory;Fr(l);let u=Ar(l,"jobs");Fr(u);let f=Ar(u,a.slice(0,16));if(e.maxScopes!==void 0){let k=zo(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.")}Fr(f);let g=Uo(Ar(sa(e.folders??[]),"reason-j-"));try{return Fr(g),{journalDirectory:f,scopeId:a,launchDirectory:g,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${Sn()}`:Ar(g,"control.sock"),disposeSocket:()=>vn(g,{recursive:!0,force:!0})}}catch(k){throw vn(g,{recursive:!0,force:!0}),k}}var ia=60000,aa=5000;function ca(e){if(process.platform==="win32")return da(e);let a=Fo("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 da(e){let a=Fo(B("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:It()}),l=a.status===0?Date.parse(a.stdout.trim()):Number.NaN;return Number.isFinite(l)?l:null}function Ko(e,a={}){let l=Ar(e.journalDirectory,"owner.lock"),u;try{u=Mo(l,yn.O_RDONLY|yn.O_NOFOLLOW)}catch{return null}try{let f=Xi(u);if(!f.isFile()||f.nlink!==1||!G(f)||f.size>4096)return null;let g=null;try{g=JSON.parse(ea(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:A,scopeId:N,pid:D,createdAtMs:S,executorLaunchId:M}=g;if(A!==1||N!==e.scopeId||typeof M!=="string"||typeof D!=="number"||!Number.isSafeInteger(D)||D<1||D===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")}}))(D))k={reason:"owner_exited",executorLaunchId:M};else{let C=(a.startedAtMs??ca)(D);if(C===null||C<=S+aa)return null;k={reason:"pid_reused",executorLaunchId:M}}}let R=lt(l);if(R.dev!==f.dev||R.ino!==f.ino)return null;ra(l);let w=Mo(e.journalDirectory,yn.O_RDONLY);try{Zi(w)}finally{jo(w)}return k}catch{return null}finally{jo(u)}}function Go(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=mr(a.root,a.runId);if(er.has(l)||a.operationId!==void 0&&vr.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=Ho({authority:a.previewAuthority,runId:a.runId,expiresAtMs:a.expiresAtMs,executorLaunchId:a.executorLaunchId,environment:a.environment,isCurrent:()=>er.get(u.key)===u,identity:()=>{try{return Ur(a)}catch{return null}},inspect:(f,g)=>{if(er.get(u.key)!==u)throw new r("preview_unavailable","The Hands supervisor is no longer current.");return Jo(a,{jobId:f,action:"inspect",input:{after:0}},g)}});if(er.set(l,u),a.operationId!==void 0)vr.set(a.operationId,u);return()=>{if(er.get(u.key)===u)er.delete(u.key);if(a.operationId!==void 0&&vr.get(a.operationId)===u)vr.delete(a.operationId);u.previews?.dispose();for(let f of u.terminals.values())f.abort()}}var la=5000,ua=20;async function Ga(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=vr.get(e.operationId);if(!l||l.binding.root!==e.root)return a("No live Hands supervisor owns this operation.");for(let f=Date.now()+la;;){if(e.signal?.aborted)a("The Hands rebind was cancelled.");if(vr.get(e.operationId)!==l)a("The Hands supervisor is no longer current.");let g=null;try{g=Ur(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,ua))}if(vr.get(e.operationId)!==l||er.get(l.key)!==l)a("The Hands supervisor is no longer current.");let u=mr(e.root,e.runId);if(l.key===u)return;if(er.has(u))a("The taking run already has a live Hands job supervisor.");er.delete(l.key);for(let f of l.terminals.values())f.abort();l.key=u,er.set(u,l)}function Qe(e){let a="operationId"in e?vr.get(e.operationId):er.get(mr(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 Ka(e){let a=er.get(mr(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=er.get(mr(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 rn(e){let a=mr(e.root,e.runId),l=er.get(a),u=l?.binding,f=u?.runId,g=u?.previewAuthority,k=u?.environment,R=e.owner&&{...e.owner},w=e.authority&&{...e.authority},A=()=>{throw new r("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!l||!u||!g||!k||!R||!w||!u.workspace)return A();let N=Object.freeze({...u.workspace}),D=Ur(u),S=k.current(),M=()=>{if(er.get(a)!==l||R.organization_id!==g.owner.organization_id||R.user_id!==g.owner.user_id||R.device_id!==g.owner.device_id||e.deviceId!==g.owner.device_id||e.rootId!==g.rootId||X(e.workspace)!==X(N))A();let C=Ur(u),z=k.current();if(C.generation!==D.generation||C.fenceId!==D.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!==D.generation||z.binding.target_fence_id!==D.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!==D.generation||w.target_fence_id!==D.fenceId)A()};if(M(),new URL(e.session.relayUrl).origin!==g.relayOrigin||l.terminals.has(e.session.jobId)||l.terminals.size>=4)return A();let j=new AbortController;l.terminals.set(e.session.jobId,j);try{return await Bo({session:{...e.session,leaseExpiresAtMs:Math.min(e.session.leaseExpiresAtMs,D.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:D.generation,fenceId:D.fenceId,executorLaunchId:D.executorLaunchId},request:(C,z)=>oi(D,Ri(JSON.stringify({...C,type:"job",version:2,generation:D.generation,id:Sn()})),z)}})}finally{if(l.terminals.get(e.session.jobId)===j)l.terminals.delete(e.session.jobId)}}async function Xa(e){if(it(e.payload.jobId))throw new r("pty_binding_required","PTY jobs require the bound terminal capability.");let a=er.get(mr(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 Jo(a,e.payload,e.signal)}var fa=1e4,pa=20,_a=_t/2,ha=qt/2,wa=(e)=>e.output.reduce((a,l)=>a+l.text.length,0);async function Jo(e,a,l){if(Object.keys(a).some((A)=>!["jobId","action","input","waitForExitMs"].includes(A)))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>fa))throw new r("invalid_payload","Only a script start may wait for its job, within its bound.");let g=(A)=>{let N=Ur(e);return oi(N,Ri(JSON.stringify({...A,type:"job",version:2,generation:N.generation,id:Sn()})),l)},k=await g(f);if(u===void 0)return k;let R=Date.now()+u,w=k;while(w.ok&&["starting","running"].includes(w.job.state)&&w.job.output.length<_a&&wa(w.job)<ha&&!l.aborted&&Date.now()<R){if(await new Promise((A)=>setTimeout(A,Math.min(pa,R-Date.now()))),l.aborted)break;try{let A=await g({jobId:f.jobId,action:"inspect",input:{after:0}});if(!A.ok)break;w=A}catch{break}}return w}function Ur(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 oi(e,a,l){if(l.aborted)return Promise.reject(new r("cancelled","Job control was cancelled."));return new Promise((u,f)=>{let g=ta(e.socketPath),k="",R=!1,w,A=(D,S)=>{if(R)return;if(R=!0,clearTimeout(w),l.removeEventListener("abort",N),g.destroy(),D)f(D);else u(S)},N=()=>A(new r("cancelled","Job control waiter cancelled; inspect before retrying mutations."));l.addEventListener("abort",N,{once:!0}),g.setEncoding("utf8"),w=setTimeout(()=>A(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",()=>A(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",(D)=>{if(k+=D,Buffer.byteLength(k)>Wt)A(new r("hands_job_result_unknown","Hands job result exceeded its bound."))}),g.once("end",()=>{if(Date.now()>=e.expiresAtMs){A(new r("hands_job_result_unknown","Hands authority expired before the result was acknowledged."));return}try{let D=Ti(k.trim());if(D.id!==a.id||D.generation!==e.generation||D.ok&&D.job.jobId!==a.jobId)throw Error("identity");A(void 0,D)}catch{A(new r("hands_job_result_unknown","Hands job response identity or shape was invalid."))}}),g.once("close",()=>{if(!R)A(new r("hands_job_result_unknown","Hands job control closed before an acknowledged result."))})})}function Wo(e){let a=kr(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=mr(a,e.runId),k=er.get(g),R=k?.binding;if(!R?.environment||!R.workspace||R.localGithubConfinement!==!0)throw Error("local_device_gh_confinement_unavailable");let w=R.environment.current(),A=()=>{f();let D=R.environment.current(),S=Ur(R);if(er.get(g)!==k||D.github_auth!=="local_gh"||D.run_id!==R.runId||l.runId!==e.runId||D.device_id!==l.deviceId||D.root_id!==l.rootId||String(D.binding.root_grant_revision)!==l.rootRevision||D.binding.target_generation!==l.generation||D.binding.target_fence_id!==l.fenceId||S.generation!==l.generation||S.fenceId!==l.fenceId||D.snapshot_id!==w.snapshot_id||D.revision!==w.revision)throw Error("local_device_gh_authority_changed")};A();let N=Ge(a,R.workspace);return{root:N.boundary,signal:e.signal,deadlineMs:u,privateDirectory:na(R.environment.path),repoPath:N.path,readOnly:l.readOnly,forbiddenSecretValues:Object.values(w.variables),secretNames:(D)=>Object.entries(w.variables).filter(([,S])=>S.trim()===D.trim()).map(([S])=>`variable ${S}`),assertCurrent:A}}async function Ya(e,a){let l=Ct.parse(e.request),u=Je.parse(e.authority);if(u.contributorRefresh&&l.kind==="read"&&u.readOnly)return a(Wo(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(Wo(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=kr(e.root),k=lt(g),R=Date.parse(e.leaseUntil);if(!Number.isFinite(R)||R<=Date.now())throw Error("local_device_gh_lease_expired");let w=kr($o());if(w===g||w.startsWith(g+kn))throw Error("local_device_gh_private_scope_unavailable");let A=Uo(Ar(w,"reason-gh-merge-"));try{Fr(A);let N=()=>{if(e.signal.throwIfAborted(),Date.now()>=R)throw Error("local_device_gh_lease_expired");let D=lt(e.root);if(D.isSymbolicLink()||D.dev!==k.dev||D.ino!==k.ino||kr(e.root)!==g)throw Error("local_device_gh_authority_changed");Fr(A)};return N(),await a({root:g,readOnly:!1,privateDirectory:A,forbiddenSecretValues:[],signal:e.signal,deadlineMs:R,assertCurrent:N})}finally{vn(A,{recursive:!0,force:!0})}}var Zo=43200000;function $r(e){return Number.isSafeInteger(e)&&Math.abs(e)<=8640000000000000?e:null}function Yo(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function Xo(e,a){return Object.keys(e).length===a.length&&a.every((l)=>Object.hasOwn(e,l))}function Za(e){if(!Yo(e)||!Xo(e,["version","outcome","clock_source","validation_now_ms","expiry_ms","remaining_ms","maximum_lifetime_ms","cli_artifact"])||e.version!==1||e.maximum_lifetime_ms!==43200000||typeof e.outcome!=="string"||!["accepted","parse","noncanonical","expired","over_cap"].includes(e.outcome)||typeof e.clock_source!=="string"||!["date_now","injected"].includes(e.clock_source))return null;for(let u of["validation_now_ms","expiry_ms"]){let f=e[u];if(f!==null&&(typeof f!=="number"||$r(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(!Yo(l)||!Xo(l,["kind","status","sha256","observed_at_ms"])||l.observed_at_ms!==null&&(typeof l.observed_at_ms!=="number"||$r(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()}),Qo=new RegExp(dr.tokenPattern),va=h({token_url:zr().max(2048),request_token:t().min(1).max(8192).regex(Qo),aws_credentials_url:zr().max(2048).nullable()});function es(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(!Qo.test(e.request_token)||!l(e.token_url,dr.tokenPath)||e.aws_credentials_url!==null&&!l(e.aws_credentials_url,dr.awsPath))return null;return{REASON_OIDC_TOKEN_URL:e.token_url,REASON_OIDC_REQUEST_TOKEN:e.request_token,...e.aws_credentials_url!==null?{AWS_CONTAINER_CREDENTIALS_FULL_URI:e.aws_credentials_url,AWS_CONTAINER_AUTHORIZATION_TOKEN:e.request_token}:{}}}function rs(e){return new TextEncoder().encode(e).byteLength}function ka(e){return rs(JSON.stringify(e)+`
|
|
4
|
+
`)}var si=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(cn),t().refine((e)=>!e.includes("\x00")&&rs(e)<=Re.valueBytes)).refine((e)=>Object.keys(e).length<=Re.variables),github_auth:i("local_gh").optional(),git:h({base_url:zr().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 Ra,isAbsolute as Ef}from"path";var Oa=0,ts=120000,ns=15000,xa=65536;function Rn(e=process.execPath,a=process.argv[1]){let l=Ra(e),u=(l.startsWith("bun")||l.startsWith("node"))&&typeof a==="string"&&a.length>0;return{command:e,prefix:u?[a]:[]}}function nn(e={}){let{command:a,prefix:l}=Rn(e.executablePath,e.sourceEntrypoint),u=e.spawnProcess??Sa,f=e.now??Date.now,g=null,k=0,R=!1,w=(N)=>{try{N.kill("SIGKILL")}catch{}},A=()=>{if(R)return;if(g&&f()-k<ts-ns)return;if(g){let D=g;g=null,w(D)}let N;try{N=u(a,[...l,"__device","__hands-worker","--handoff-fd",String(Oa)],{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",(D,S)=>{if(g!==N)return;g=null,e.log?.("hands.worker_prespawn_exited",{exit_code:D,exit_signal:S})}),e.log?.("hands.worker_prespawned",{pid:N.pid??null})};return{arm:A,take(N){let D=g;if(!D||R)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=D.stdin,Q={configPath:S,cwd:j,env:Object.fromEntries(Object.entries(M).filter((re)=>typeof re[1]==="string"))},Y=JSON.stringify(Q);if(D.exitCode!==null||D.signalCode!==null||!z||z.destroyed||f()-k>=ts-ns||Buffer.byteLength(Y,"utf8")>xa)return w(D),null;return z.on("error",()=>{return}),z.end(Y),D.once("exit",()=>{A()}),e.log?.("hands.worker_prespawn_taken",{pid:D.pid??null}),D},adopt(N){N.once("exit",()=>{A()})},close(){if(R=!0,g)w(g);g=null}}}import{accessSync as Ca,constants as Ha,statSync as Na}from"fs";import{homedir as La,tmpdir as Ba,userInfo as ja}from"os";import{delimiter as Ma,win32 as Fa}from"path";var Pa=new Set(["ALL_PROXY","BUN_BE_BUN","BUN_OPTIONS","CURL_CA_BUNDLE","GIT_SSL_CAINFO","GRPC_DEFAULT_SSL_ROOTS_FILE_PATH","HTTPS_PROXY","HTTP_PROXY","NO_PROXY","NODE_EXTRA_CA_CERTS","NODE_OPTIONS","NODE_TLS_REJECT_UNAUTHORIZED","REQUESTS_CA_BUNDLE","SSLKEYLOGFILE","SSL_CERT_DIR","SSL_CERT_FILE","all_proxy","http_proxy","https_proxy","no_proxy"]);var Ia=["BUN_CONFIG_","BUN_INSPECT","DYLD_","NODE_DEBUG"],Aa=new Set(["BUN_INSTALL"]);var Ta=/^--(?:max-old-space-size|max-semi-space-size|stack-size)=\d{1,9}$/;function Da(e){return(e??"").split(/\s+/).filter(Boolean).every((a)=>Ta.test(a.replaceAll("_","-")))}function pt(e){return Object.keys(e).filter((a)=>Pa.has(a)&&!(a==="NODE_OPTIONS"&&Da(e[a]))||Ia.some((l)=>a.startsWith(l))||a.startsWith("BUN_")&&!Aa.has(a)).sort()}var Ua=new Set(["HOME","PATH","PWD","OLDPWD","SHLVL","_","TMPDIR","TMP","TEMP","SHELL","BASH_ENV","ENV","ZDOTDIR","PROMPT_COMMAND","IFS","CDPATH","GLOBIGNORE","SHELLOPTS","BASHOPTS","NODE_PATH"]),za=/^(?:ARA_|REASON_|PI_|GIT_|GH_|GITHUB_|LD_|DYLD_|BUN_|BASH_FUNC_|SSH_)/,$a=/TOKEN|SECRET|PASSW|PASSPHRASE|CREDENTIAL|API_?KEY|ACCESS_?KEY|PRIVATE_?KEY|AUTH/i,sc=/^[A-Za-z_][A-Za-z0-9_]*$/;function ci(e=process.env){let a=(f)=>{if(!(process.platform==="win32"?Fa.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(pt(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&&sc.test(g)&&!l.has(g)&&!Ua.has(g)&&!za.test(g)&&!$a.test(g)}).sort(([f],[g])=>f.localeCompare(g)).slice(0,512));return{home:a(e.HOME||(process.platform==="win32"?e.USERPROFILE:void 0)||La()),path:((f)=>process.platform==="win32"?Oo(f):f)(_i(e.PATH??"").join(Ma)||Ft),temporaryDirectory:a(e.TMPDIR||e.TMP||e.TEMP||Ba()),variables:u}}function li(e=process.env,a=()=>ja().shell){if(process.platform==="win32")return Ye();let l=(f)=>{if(!f||!/^\/[A-Za-z0-9._/-]*\/(?:bash|zsh)$/.test(f))return!1;try{return Ca(f,Ha.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 ac}from"fs/promises";var cc=15000;function Eo(e){let a=e instanceof Error&&"code"in e?e.code:null;return a==="EPERM"||a==="EACCES"}function ko(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 os(e,{timeoutMs:a=cc,open:l=(u)=>ac(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(Eo(g))throw ko(e);if(g instanceof r)throw g}finally{clearTimeout(u)}}import{chmodSync as Kc,closeSync as Gc,constants as Ln,fstatSync as Jc,lstatSync as Rs,openSync as Vc,readSync as qc,realpathSync as Bn,unlinkSync as Yc}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 Nr from"net";import{platform as As}from"os";import{basename as nd,extname as od,isAbsolute as Os,relative as jn,resolve as Vr,sep as Wn}from"path";var ss=String.raw`
|
|
5
5
|
async (roots) => {
|
|
6
6
|
"use strict";
|
|
7
7
|
const version = 2;
|
|
@@ -290,20 +290,20 @@ async (roots) => {
|
|
|
290
290
|
install("a11y", a11y); install("view", view); install("routeFulfill", routeFulfill); install("console", replConsole);
|
|
291
291
|
install("__araHandsRepl", Object.freeze({ version, evaluate }));
|
|
292
292
|
}
|
|
293
|
-
`.trim(),
|
|
293
|
+
`.trim(),is=String.raw`
|
|
294
294
|
async (input) => {
|
|
295
295
|
const bridge = globalThis.__araHandsRepl;
|
|
296
296
|
if (!bridge || typeof bridge.evaluate !== "function") throw new Error("Reason Hands browser bridge is not installed");
|
|
297
297
|
return await bridge.evaluate(typeof input === "string" ? input : input && input.code);
|
|
298
298
|
}
|
|
299
|
-
`.trim();import{Buffer as Kr}from"buffer";import{randomUUID as dc}from"crypto";class ds 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 ls=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),is=/^hands_[A-Za-z0-9_-]{8,128}$/,uc=2048,us=32,fs=1e4,fc=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))}},ps={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 ds(e)}function sr(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let a=Object.getPrototypeOf(e);return a===Object.prototype||a===null}function Gr(e,a=0,l={nodes:0}){if(a>us||++l.nodes>fs)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)Gr(u,a+1,l);return}if(!sr(e))ie("hands_repl_invalid_json");for(let[u,f]of Object.entries(e)){if(ls.has(u))ie("hands_repl_invalid_json");Gr(f,a+1,l)}}function Rn(e){return typeof e==="string"&&Object.hasOwn(ps,e)}function hc(e){if(!e.endsWith("[]"))return null;let a=e.slice(0,-2);return Rn(a)?a:null}function as(e){return sr(e)&&Object.keys(e).length===2&&e.$handsRepl==="bytes"&&typeof e.base64==="string"}function gc(e){return sr(e)&&Object.keys(e).length===1&&e.$handsRepl==="undefined"}function cs(e){return sr(e)&&Object.keys(e).length===2&&e.$handsRepl==="routeFulfill"&&"options"in e}function Sr(e){return!!e&&typeof e==="object"}function Dt(){return Object.freeze({$handsRepl:"undefined"})}function bc(e){if(!Kr.isBuffer(e)&&!(e instanceof Uint8Array))ie("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:Kr.from(e).toString("base64")})}function _s(e){if(!Sr(e.browser)||!Sr(e.context)||!Sr(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??uc;if(!Number.isInteger(a)||a<3||a>1e5)ie("hands_repl_invalid_handle_limit");let l=new Map,u=new WeakMap,f=e.createOpaqueId??dc,g=(S,M)=>{if(!Sr(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(is.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)}),R=(S)=>{if(!sr(S)||Object.keys(S).length!==3||S.$handsRepl!=="handle"||typeof S.id!=="string"||!is.test(S.id)||!Rn(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>us)ie("hands_repl_json_too_complex");if(S===void 0)return Dt();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(!sr(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)}},A=(S,M)=>{if(M==="void")return Dt();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 Dt();if(!Rn(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(sr(S)&&S.$handsRepl==="handle")return R(S).target;if(as(S))return Kr.from(S.base64,"base64");if(gc(S))return;if(cs(S))ie("hands_repl_route_fulfill_only");if(Array.isArray(S))return S.map(N);if(!sr(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(!sr(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):R(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(Gr(S.source),S.options!==void 0)Gr(S.options);let Z=as(S.source)?Kr.from(S.source.base64,"base64"):S.source;if(e.privateProfile&&!Kr.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(ls.has(S.method))ie("hands_repl_forbidden_method");let M=R(S.target),j=S.args??[];if(!Array.isArray(j))ie("hands_repl_invalid_arguments");if(Gr(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 A([e.context],"context[]");if((Z==="screenshot"||Z==="pdf")&&sr(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"||!fc.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>fs||!ae.every(Sr))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(!sr(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=ps[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)=>sr(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=Sr(ke)?Reflect.get(ke,"viewportSize"):void 0;if(typeof ae!=="function")return Dt();return A(await Reflect.apply(ae,ke,[]),C.returns)}if(C.special==="property"){let Z=Reflect.get(M.target,S.method);return A(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(!cs(Z))ie("hands_repl_invalid_route_handler");Gr(Z.options);let be=N(Z.options),ke=async(q)=>{if(!Sr(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 A(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(!sr(ae)||typeof ae.name!=="string"||typeof ae.mimeType!=="string"||!Kr.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,Sr(be)?be:void 0)}return A(re,C.returns)}})}import{isIP as bs}from"net";import{Resolver as wc}from"dns/promises";import{isIP as Nt}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 On(e){if(Nt(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=On(a);if(u===null)return!1;let f=l===0?0:4294967295<<32-l>>>0;return(e&f)>>>0===(u&f)>>>0}function ms(e){let a=On(e);if(a===null)return!0;return yc.some(([l,u])=>vc(a,l,u))}function kc(e){if(Nt(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=On(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 R=(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=R(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 A=R(k[1]??"");if(A===null)return null;let N=8-w.length-A.length;if(N<0)return null;let D=w.concat(Array(N).fill(0),A);if(D.length!==8)return null;return u.length>0?D.slice(0,6).concat(u):D}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 ms(Sc(u,f));return!1}function li(e){return e.replace(/^\[|\]$/g,"")}function Ht(e){let a=li(e.trim()),l=Nt(a);if(l===4)return ms(a);if(l===6)return Ec(a);return!0}function hs(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 gs=5000;function Rc(e){return async(a,l)=>{if(l?.aborted)throw Error("aborted");let u=new wc({timeout:gs,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)]),R=[...g.status==="fulfilled"?g.value:[],...k.status==="fulfilled"?k.value:[]];if(R.length>0)return R;let w=[g,k].flatMap((N)=>N.status==="rejected"?[N.reason]:[]);throw w.find((N)=>["dns_temporary","dns_timeout"].includes(hs(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,R=a(e,f.signal);R.catch(()=>{});try{return await Promise.race([R,new Promise((w,A)=>{if(g=setTimeout(()=>A(new DOMException("DNS lookup timed out","TimeoutError")),l),u)k=()=>A(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 rc(e,a=Oc,l){let u=li(e);if(Nt(u))return Ht(u)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[u]};let f;try{f=await xc(u,a,gs,l)}catch(g){return{ok:!1,reason:l?.aborted?l.reason instanceof Error&&l.reason.name==="TimeoutError"?"dns_timeout":"aborted":hs(g)}}if(f.length===0)return{ok:!1,reason:"dns_empty"};if(f.some(Ht))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 xn(e){return e.length<=253&&Pc.test(e.toLowerCase())}function Ic(e,a){let l=e.trim().toLowerCase();if(!xn(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 Pn(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 Tr(e){e=e.toLowerCase().replace(/^\[|\]$/g,"");let a=Ac(e);if(a){let[g,k,R]=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&&(R===0||R===2)||k===88&&R===99)||g===198&&(k===18||k===19||k===51&&R===100)||g===203&&k===0&&R===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 Tr(`${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 Mt(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=(R)=>({allowed:!1,url:e,host:u,reason:R});if(l.username||l.password)return f("invalid_url");if(a.mode==="public_web"){let R=Tr(u)!=="public"&&Tr(u)!=="hostname"||u==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(u)||!u.includes(".")&&!bs(u)||Boolean(bs(u)&&Ht(u));return{allowed:!R,url:e,host:u,reason:R?"private_network":"public_web"}}let g=Number(l.port||(["https:","wss:"].includes(l.protocol)?443:80));if(a.deniedPorts?.includes(g)||Pn(u,a.deniedHosts))return f("destination_not_allowed");let k=Tr(u);if(k==="private"||["local","internal","arpa"].some((R)=>u===R||u.endsWith(`.${R}`)))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((R)=>Ic(R,u)))return{allowed:!0,url:e,host:u,reason:"allowed_domain"};return{allowed:!1,url:e,host:u,reason:"destination_not_allowed"}}import ws from"child_process";import{accessSync as Tc,constants as Dc,readFileSync as Cc,statSync as ys}from"fs";import{createRequire as vs}from"module";import{homedir as In}from"os";import{dirname as Hc,isAbsolute as Tn,join as Hr,resolve as Nc,win32 as Lc}from"path";var Lt=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:$n.dependencies["playwright-core"],browser:"chromium"}),ks=["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Brave Browser.app/Contents/MacOS/Brave Browser","/Applications/Chromium.app/Contents/MacOS/Chromium"],Dn=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function Bc(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)=>Lc.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 ut(e){try{return Tc(e,Dc.X_OK),Tn(e)&&ys(e).isFile()}catch{return!1}}function Cn(e,a=process.platform){let l=a==="darwin"?ks:a==="linux"?Dn:a==="win32"?Bc():null;return l?(e??l).find(ut)??null:null}function jc(){if(!process.versions.bun)return;let e=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,e))return;let a=[];ws.spawn=new Proxy(ws.spawn,{apply(l,u,f){let g=Reflect.apply(l,u,f),k=f[1],R=f[2]?.stdio;if(Array.isArray(k)&&k.includes("--remote-debugging-pipe")&&Array.isArray(R)&&R[3]==="pipe"&&R[4]==="pipe")a.push(g);return g}}),Object.defineProperty(globalThis,e,{value:a})}async function jt(e){if(jc(),e!==void 0){if(!Tn(e))throw Error("hands_browser_driver_path_must_be_absolute");let u=Hr(e,"package.json"),f=JSON.parse(Cc(u,"utf8"));if(f.name!==Lt.driver)throw Error("hands_browser_wrong_driver");let g=vs(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-w92ys6ra.js"),import("./package-9w0mmxb5.js").then((m)=>_a(m.default,1))]);return{version:l.default.version,chromium:a.chromium}}var Mc=(e,a=Lt.driverVersion)=>({status:"unavailable",reason:e,expectedDriverVersion:a}),Fc=(e)=>e.loadDriver?.()??jt(e.driverModuleDirectory),$c={"1.60.0":"1223"};function tc(){let e=process.platform,a=$c[Lt.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"?Hr(Hc(vs(import.meta.url).resolve("playwright-core/package.json")),".local-browsers"):u?Nc(l("INIT_CWD")||process.cwd(),u):Hr(e==="darwin"?Hr(In(),"Library","Caches"):e==="win32"?process.env.LOCALAPPDATA||Hr(In(),"AppData","Local"):process.env.XDG_CACHE_HOME||Hr(In(),".cache"),"ms-playwright");return ys(Hr(f,`chromium-${a}`,"INSTALLATION_COMPLETE")).isFile()}catch{return!1}}async function Jr(e={}){return Ss(e,Lt.driverVersion)}async function Hn(e,a={}){if(e.driverVersion!=="1.61.1"||!Tn(e.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return Ss({...a,driverModuleDirectory:e.driverModuleDirectory,allowSystemBrowser:!0},e.driverVersion)}async function Ss(e,a){let l=(w)=>Mc(w,a),u=e.platform??process.platform;if(u!=="linux"&&u!=="darwin"&&u!=="win32")return l("unsupported_platform");let f;try{f=await Fc(e)}catch{return l("driver_missing")}if(f.version!==a)return l("driver_version_mismatch");let g=(w,A)=>({status:"resolved",executablePath:w,source:A,driverVersion:f.version});if(e.executablePath!==void 0)return ut(e.executablePath)?g(e.executablePath,"configured"):l("executable_missing");let k=f.chromium.executablePath();if(ut(k))return g(k,"managed");let R=e.allowSystemBrowser===!0?Cn(e.systemCandidates,u):null;return R?g(R,"system"):l("executable_missing")}var sd=["/usr/local/bin/chromium",...Dn];function ko(e,a=Is()){return Cn(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,Os=5000,ld=2000,ud=1000,fd=30000,xs=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 R=(l.protocol==="https:"?td:rd)(l,{method:e.method(),headers:u,agent:!1,lookup:(A,N,D)=>{let S=Nr.isIP(a);if(N.all)D(null,[{address:a,family:S}]);else D(null,a,S)}},(A)=>{let N=[],D=0;A.on("data",(S)=>{if(D+=S.length,D>33554432)R.destroy(Error("hands_browser_response_too_large"));else N.push(S)}),A.on("error",g),A.on("end",()=>{let S={};for(let[M,j]of Object.entries(A.headers))if(j!==void 0&&!["transfer-encoding","connection","content-length"].includes(M))S[M]=Array.isArray(j)?j.join(`
|
|
300
|
-
`):j;f({status:A.statusCode??502,headers:S,body:Buffer.concat(N)})})}),w=setTimeout(()=>R.destroy(Error("hands_browser_fetch_timeout")),fd);R.once("close",()=>clearTimeout(w)),R.on("error",g),R.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=(R)=>{let w=g.get(R);if(w)return w;let A=(async()=>{if(!e.newCDPSession)return;let N=await e.newCDPSession(R),D=new Map;N.on("Network.loadingFinished",({requestId:S})=>D.delete(S)),N.on("Network.loadingFailed",({requestId:S})=>D.delete(S)),N.on("Fetch.requestPaused",async(S)=>{let M=S.networkId??S.requestId,j=S.redirectedRequestId?(D.get(M)??0)+1:0;D.set(M,j);let C=Mt(S.request.url,a),z=a.mode==="enforce"&&Boolean(S.redirectedRequestId)&&C.host!==null&&!Nr.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(R)})();return g.set(R,A),A};return await e.route("**/*",async(R)=>{let w=R.request().url(),A=Mt(w,a);if(A.allowed&&a.mode==="public_web"){await R.continue();return}let N=R.request();if(A.allowed&&A.host&&Nr.isIP(A.host)&&N.isNavigationRequest?.()){let D=N.frame();if(f.has(D.page())&&D===D.page().mainFrame()){await R.continue();return}}if(A.allowed&&(a.mode==="off"||A.reason==="local_document")){await R.continue();return}if(A.allowed&&A.host)try{let D=A.host,S=Tr(D),M,j=await(async()=>{if(S!=="hostname")return[{address:D,family:Nr.isIP(D)}];if(A.reason==="loopback")return[{address:"127.0.0.1",family:4}];try{return await Promise.race([u.lookup(D),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=Tr(C);return!Nr.isIP(C)||a.mode==="enforce"&&
|
|
301
|
-
`)}function Ut(e){try{Yc(e)}catch{}}async function
|
|
302
|
-
Viewing ${cr} (${lr.sourceWidth}x${lr.sourceHeight} source, sent at ${lr.width}x${lr.height}, ${Math.round(jr.length/1024)}KB).`}if(wr>640)wr=Math.round(wr*0.75);else Br=Math.max(30,Br-15)}throw Error(`view(): could not reduce the image under ${Math.round(
|
|
299
|
+
`.trim();import{Buffer as Kr}from"buffer";import{randomUUID as dc}from"crypto";class ls 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 us=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),as=/^hands_[A-Za-z0-9_-]{8,128}$/,uc=2048,fs=32,ps=1e4,fc=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))}},_s={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 ls(e)}function sr(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let a=Object.getPrototypeOf(e);return a===Object.prototype||a===null}function Gr(e,a=0,l={nodes:0}){if(a>fs||++l.nodes>ps)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)Gr(u,a+1,l);return}if(!sr(e))ie("hands_repl_invalid_json");for(let[u,f]of Object.entries(e)){if(us.has(u))ie("hands_repl_invalid_json");Gr(f,a+1,l)}}function On(e){return typeof e==="string"&&Object.hasOwn(_s,e)}function hc(e){if(!e.endsWith("[]"))return null;let a=e.slice(0,-2);return On(a)?a:null}function cs(e){return sr(e)&&Object.keys(e).length===2&&e.$handsRepl==="bytes"&&typeof e.base64==="string"}function gc(e){return sr(e)&&Object.keys(e).length===1&&e.$handsRepl==="undefined"}function ds(e){return sr(e)&&Object.keys(e).length===2&&e.$handsRepl==="routeFulfill"&&"options"in e}function Sr(e){return!!e&&typeof e==="object"}function Dt(){return Object.freeze({$handsRepl:"undefined"})}function bc(e){if(!Kr.isBuffer(e)&&!(e instanceof Uint8Array))ie("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:Kr.from(e).toString("base64")})}function ms(e){if(!Sr(e.browser)||!Sr(e.context)||!Sr(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??uc;if(!Number.isInteger(a)||a<3||a>1e5)ie("hands_repl_invalid_handle_limit");let l=new Map,u=new WeakMap,f=e.createOpaqueId??dc,g=(S,M)=>{if(!Sr(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(as.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)}),R=(S)=>{if(!sr(S)||Object.keys(S).length!==3||S.$handsRepl!=="handle"||typeof S.id!=="string"||!as.test(S.id)||!On(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>fs)ie("hands_repl_json_too_complex");if(S===void 0)return Dt();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(!sr(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)}},A=(S,M)=>{if(M==="void")return Dt();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 Dt();if(!On(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(sr(S)&&S.$handsRepl==="handle")return R(S).target;if(cs(S))return Kr.from(S.base64,"base64");if(gc(S))return;if(ds(S))ie("hands_repl_route_fulfill_only");if(Array.isArray(S))return S.map(N);if(!sr(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(!sr(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):R(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(Gr(S.source),S.options!==void 0)Gr(S.options);let Z=cs(S.source)?Kr.from(S.source.base64,"base64"):S.source;if(e.privateProfile&&!Kr.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(us.has(S.method))ie("hands_repl_forbidden_method");let M=R(S.target),j=S.args??[];if(!Array.isArray(j))ie("hands_repl_invalid_arguments");if(Gr(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 A([e.context],"context[]");if((Z==="screenshot"||Z==="pdf")&&sr(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"||!fc.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>ps||!ae.every(Sr))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(!sr(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=_s[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)=>sr(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=Sr(ke)?Reflect.get(ke,"viewportSize"):void 0;if(typeof ae!=="function")return Dt();return A(await Reflect.apply(ae,ke,[]),C.returns)}if(C.special==="property"){let Z=Reflect.get(M.target,S.method);return A(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(!ds(Z))ie("hands_repl_invalid_route_handler");Gr(Z.options);let be=N(Z.options),ke=async(q)=>{if(!Sr(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 A(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(!sr(ae)||typeof ae.name!=="string"||typeof ae.mimeType!=="string"||!Kr.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,Sr(be)?be:void 0)}return A(re,C.returns)}})}import{isIP as ws}from"net";import{Resolver as wc}from"dns/promises";import{isIP as Nt}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 xn(e){if(Nt(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=xn(a);if(u===null)return!1;let f=l===0?0:4294967295<<32-l>>>0;return(e&f)>>>0===(u&f)>>>0}function hs(e){let a=xn(e);if(a===null)return!0;return yc.some(([l,u])=>vc(a,l,u))}function kc(e){if(Nt(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=xn(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 R=(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=R(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 A=R(k[1]??"");if(A===null)return null;let N=8-w.length-A.length;if(N<0)return null;let D=w.concat(Array(N).fill(0),A);if(D.length!==8)return null;return u.length>0?D.slice(0,6).concat(u):D}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 hs(Sc(u,f));return!1}function ui(e){return e.replace(/^\[|\]$/g,"")}function Ht(e){let a=ui(e.trim()),l=Nt(a);if(l===4)return hs(a);if(l===6)return Ec(a);return!0}function gs(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 bs=5000;function Rc(e){return async(a,l)=>{if(l?.aborted)throw Error("aborted");let u=new wc({timeout:bs,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)]),R=[...g.status==="fulfilled"?g.value:[],...k.status==="fulfilled"?k.value:[]];if(R.length>0)return R;let w=[g,k].flatMap((N)=>N.status==="rejected"?[N.reason]:[]);throw w.find((N)=>["dns_temporary","dns_timeout"].includes(gs(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,R=a(e,f.signal);R.catch(()=>{});try{return await Promise.race([R,new Promise((w,A)=>{if(g=setTimeout(()=>A(new DOMException("DNS lookup timed out","TimeoutError")),l),u)k=()=>A(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 nc(e,a=Oc,l){let u=ui(e);if(Nt(u))return Ht(u)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[u]};let f;try{f=await xc(u,a,bs,l)}catch(g){return{ok:!1,reason:l?.aborted?l.reason instanceof Error&&l.reason.name==="TimeoutError"?"dns_timeout":"aborted":gs(g)}}if(f.length===0)return{ok:!1,reason:"dns_empty"};if(f.some(Ht))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 Tr(e){e=e.toLowerCase().replace(/^\[|\]$/g,"");let a=Ac(e);if(a){let[g,k,R]=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&&(R===0||R===2)||k===88&&R===99)||g===198&&(k===18||k===19||k===51&&R===100)||g===203&&k===0&&R===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 Tr(`${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 Mt(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=(R)=>({allowed:!1,url:e,host:u,reason:R});if(l.username||l.password)return f("invalid_url");if(a.mode==="public_web"){let R=Tr(u)!=="public"&&Tr(u)!=="hostname"||u==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(u)||!u.includes(".")&&!ws(u)||Boolean(ws(u)&&Ht(u));return{allowed:!R,url:e,host:u,reason:R?"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=Tr(u);if(k==="private"||["local","internal","arpa"].some((R)=>u===R||u.endsWith(`.${R}`)))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((R)=>Ic(R,u)))return{allowed:!0,url:e,host:u,reason:"allowed_domain"};return{allowed:!1,url:e,host:u,reason:"destination_not_allowed"}}import ys from"child_process";import{accessSync as Tc,constants as Dc,readFileSync as Cc,statSync as vs}from"fs";import{createRequire as ks}from"module";import{homedir as Tn}from"os";import{dirname as Hc,isAbsolute as Dn,join as Hr,resolve as Nc,win32 as Lc}from"path";var Lt=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:Mn.dependencies["playwright-core"],browser:"chromium"}),Ss=["/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 Bc(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)=>Lc.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 ut(e){try{return Tc(e,Dc.X_OK),Dn(e)&&vs(e).isFile()}catch{return!1}}function Hn(e,a=process.platform){let l=a==="darwin"?Ss:a==="linux"?Cn:a==="win32"?Bc():null;return l?(e??l).find(ut)??null:null}function jc(){if(!process.versions.bun)return;let e=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,e))return;let a=[];ys.spawn=new Proxy(ys.spawn,{apply(l,u,f){let g=Reflect.apply(l,u,f),k=f[1],R=f[2]?.stdio;if(Array.isArray(k)&&k.includes("--remote-debugging-pipe")&&Array.isArray(R)&&R[3]==="pipe"&&R[4]==="pipe")a.push(g);return g}}),Object.defineProperty(globalThis,e,{value:a})}async function jt(e){if(jc(),e!==void 0){if(!Dn(e))throw Error("hands_browser_driver_path_must_be_absolute");let u=Hr(e,"package.json"),f=JSON.parse(Cc(u,"utf8"));if(f.name!==Lt.driver)throw Error("hands_browser_wrong_driver");let g=ks(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-y21r07rf.js"),import("./package-3rv6jngd.js").then((m)=>ya(m.default,1))]);return{version:l.default.version,chromium:a.chromium}}var Mc=(e,a=Lt.driverVersion)=>({status:"unavailable",reason:e,expectedDriverVersion:a}),Fc=(e)=>e.loadDriver?.()??jt(e.driverModuleDirectory),$c={"1.60.0":"1223"};function rc(){let e=process.platform,a=$c[Lt.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"?Hr(Hc(ks(import.meta.url).resolve("playwright-core/package.json")),".local-browsers"):u?Nc(l("INIT_CWD")||process.cwd(),u):Hr(e==="darwin"?Hr(Tn(),"Library","Caches"):e==="win32"?process.env.LOCALAPPDATA||Hr(Tn(),"AppData","Local"):process.env.XDG_CACHE_HOME||Hr(Tn(),".cache"),"ms-playwright");return vs(Hr(f,`chromium-${a}`,"INSTALLATION_COMPLETE")).isFile()}catch{return!1}}async function Jr(e={}){return Es(e,Lt.driverVersion)}async function Nn(e,a={}){if(e.driverVersion!=="1.61.1"||!Dn(e.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return Es({...a,driverModuleDirectory:e.driverModuleDirectory,allowSystemBrowser:!0},e.driverVersion)}async function Es(e,a){let l=(w)=>Mc(w,a),u=e.platform??process.platform;if(u!=="linux"&&u!=="darwin"&&u!=="win32")return l("unsupported_platform");let f;try{f=await Fc(e)}catch{return l("driver_missing")}if(f.version!==a)return l("driver_version_mismatch");let g=(w,A)=>({status:"resolved",executablePath:w,source:A,driverVersion:f.version});if(e.executablePath!==void 0)return ut(e.executablePath)?g(e.executablePath,"configured"):l("executable_missing");let k=f.chromium.executablePath();if(ut(k))return g(k,"managed");let R=e.allowSystemBrowser===!0?Hn(e.systemCandidates,u):null;return R?g(R,"system"):l("executable_missing")}var sd=["/usr/local/bin/chromium",...Cn];function xo(e,a=As()){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,xs=5000,ld=2000,ud=1000,fd=30000,Ps=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 R=(l.protocol==="https:"?td:rd)(l,{method:e.method(),headers:u,agent:!1,lookup:(A,N,D)=>{let S=Nr.isIP(a);if(N.all)D(null,[{address:a,family:S}]);else D(null,a,S)}},(A)=>{let N=[],D=0;A.on("data",(S)=>{if(D+=S.length,D>33554432)R.destroy(Error("hands_browser_response_too_large"));else N.push(S)}),A.on("error",g),A.on("end",()=>{let S={};for(let[M,j]of Object.entries(A.headers))if(j!==void 0&&!["transfer-encoding","connection","content-length"].includes(M))S[M]=Array.isArray(j)?j.join(`
|
|
300
|
+
`):j;f({status:A.statusCode??502,headers:S,body:Buffer.concat(N)})})}),w=setTimeout(()=>R.destroy(Error("hands_browser_fetch_timeout")),fd);R.once("close",()=>clearTimeout(w)),R.on("error",g),R.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=(R)=>{let w=g.get(R);if(w)return w;let A=(async()=>{if(!e.newCDPSession)return;let N=await e.newCDPSession(R),D=new Map;N.on("Network.loadingFinished",({requestId:S})=>D.delete(S)),N.on("Network.loadingFailed",({requestId:S})=>D.delete(S)),N.on("Fetch.requestPaused",async(S)=>{let M=S.networkId??S.requestId,j=S.redirectedRequestId?(D.get(M)??0)+1:0;D.set(M,j);let C=Mt(S.request.url,a),z=a.mode==="enforce"&&Boolean(S.redirectedRequestId)&&C.host!==null&&!Nr.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(R)})();return g.set(R,A),A};return await e.route("**/*",async(R)=>{let w=R.request().url(),A=Mt(w,a);if(A.allowed&&a.mode==="public_web"){await R.continue();return}let N=R.request();if(A.allowed&&A.host&&Nr.isIP(A.host)&&N.isNavigationRequest?.()){let D=N.frame();if(f.has(D.page())&&D===D.page().mainFrame()){await R.continue();return}}if(A.allowed&&(a.mode==="off"||A.reason==="local_document")){await R.continue();return}if(A.allowed&&A.host)try{let D=A.host,S=Tr(D),M,j=await(async()=>{if(S!=="hostname")return[{address:D,family:Nr.isIP(D)}];if(A.reason==="loopback")return[{address:"127.0.0.1",family:4}];try{return await Promise.race([u.lookup(D),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=Tr(C);return!Nr.isIP(C)||a.mode==="enforce"&&An(C,a.deniedHosts)||(A.reason==="loopback"?z!=="loopback":z!=="public")}))A={...A,allowed:!1,reason:"private_network"};else{let C=await u.fetch(R.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=Mt(z,a);A=Q.allowed?{...Q,allowed:!1,reason:"redirect_not_supported"}:Q}else{await R.fulfill(C);return}}}catch{await R.abort("failed");return}l(A),await R.abort("blockedbyclient")}),await e.routeWebSocket("**/*",async(R)=>{let w=Mt(R.url(),a);if(a.mode==="enforce"&&w.allowed&&(!w.host||!Nr.isIP(w.host)))w={...w,allowed:!1,reason:"destination_not_allowed"};if(w.allowed){R.connectToServer();return}l(w),await R.close({code:1008,reason:"Reason egress policy denied"})}),a.mode==="off"?void 0:{preparePage:k}}async function Ts(e,a=As(),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=xo(e,a);if(f)return f}let u=await Jr({platform:a,systemCandidates:e,allowSystemBrowser:!0});return u.status==="resolved"?u.executablePath:null}function Is(e,a){if(!e)throw Error("hands_repl_workspace_required");let l=Bn(e),u=Vr(e),f=jn(u,Vr(u,a)),k=f!==".."&&!f.startsWith(`..${Wn}`)&&!Os(f)?Vr(l,f):Vr(l,a);if(L(Vr(u,a))||L(k))throw Error("hands_repl_protected_path");let R=(j)=>{let C=jn(l,j);return C!==""&&C!==".."&&!C.startsWith(`..${Wn}`)&&!Os(C)},w=Bn(k);if(L(w))throw Error("hands_repl_protected_path");if(!R(k)||!R(w))throw Error("hands_repl_file_outside_workspace");let A=jn(l,k).split(Wn),N=[l,...A.map((j,C)=>Vr(l,...A.slice(0,C+1)))],D=N.map((j)=>Rs(j));if(D.some((j)=>j.isSymbolicLink()))throw Error("hands_repl_file_symlink");let S=D[D.length-1];if(!S.isFile()||S.nlink!==1||S.size>16777216)throw Error("hands_repl_file_not_regular_or_too_large");let M=Vc(k,Ln.O_RDONLY|Ln.O_NOFOLLOW|Ln.O_NONBLOCK);try{let j=Jc(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=Rs(N[Y]);if(re.dev!==D[Y].dev||re.ino!==D[Y].ino||re.isSymbolicLink())throw Error("hands_repl_file_changed")}if(!R(Bn(k)))throw Error("hands_repl_file_outside_workspace");let C=Buffer.alloc(16777217),z=0;while(z<C.length){let Y=qc(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{Gc(M)}}function qr(e,a){e.end(`${JSON.stringify(a)}
|
|
301
|
+
`)}function Ut(e){try{Yc(e)}catch{}}async function Ds(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 Jr({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||!ut(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,R=null,w=null,A=null,N=!1,D=null,S=new Map,M=new WeakMap,j=null,C=()=>{if(N)throw Error("hands_repl_stopped");if(A)throw A},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||A)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:{},Ve,_r="image/png";if(Buffer.isBuffer(ve)||ve instanceof Uint8Array)Ve=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)))Ve=Buffer.from(ve.replace(/^data:[^,]*,/,""),"base64");else if(typeof ve==="string"){let Or=Is(e.workspaceRoot,ve);Ve=Or.buffer,_r=Or.mimeType}else throw Error("view() needs a Buffer, a base64 string, or a path to an image file");if(Ve.length===0)throw Error("view(): the image is empty");let en=String(Ce.label??"").replace(/[\r\n>]+/g," ").trim().slice(0,120),wr=Number(Ce.maxWidth)||1024,Br=Number(Ce.quality)||72,vt=e.targetContext?await W.newPage():await q.newPage();try{let Or=`data:${_r};base64,${Ve.toString("base64")}`;for(let qe=0;qe<5;qe+=1){let lr=await vt.evaluate(async(cr)=>{let fr=new Image;fr.src=cr.url,await fr.decode();let xr=Math.min(1,cr.maxWidth/fr.naturalWidth),or=document.createElement("canvas");or.width=Math.max(1,Math.round(fr.naturalWidth*xr)),or.height=Math.max(1,Math.round(fr.naturalHeight*xr));let tr=or.getContext("2d");if(!tr)throw Error("view(): canvas unavailable");return tr.fillStyle="#ffffff",tr.fillRect(0,0,or.width,or.height),tr.drawImage(fr,0,0,or.width,or.height),{data:or.toDataURL("image/jpeg",cr.q/100).split(",")[1]??"",width:or.width,height:or.height,sourceWidth:fr.naturalWidth,sourceHeight:fr.naturalHeight}},{url:Or,maxWidth:wr,q:Br}),jr=Buffer.from(lr.data,"base64");if(jr.length<=Ps){let cr=en||"image";return`<<<ARA_VIEW_IMAGE ${lr.data} image/jpeg ${cr}>>>
|
|
302
|
+
Viewing ${cr} (${lr.sourceWidth}x${lr.sourceHeight} source, sent at ${lr.width}x${lr.height}, ${Math.round(jr.length/1024)}KB).`}if(wr>640)wr=Math.round(wr*0.75);else Br=Math.max(30,Br-15)}throw Error(`view(): could not reduce the image under ${Math.round(Ps/1024)}KB`)}finally{await vt.close().catch(()=>{return})}},me=ms({browser:e.targetContext?.browser()??W,context:q,page:le,a11y:fe,view:ee,readWorkspaceFile:(ve)=>Is(e.workspaceRoot,ve),privateProfile:e.privateProfile,beforeNavigation:e.beforeNavigation,recording:e.recording,screenshotExport:e.screenshotExport,actionRecorder:()=>{let ve=f,We=g;return(Ce,Ve)=>{if(ve.length<pc)ve.push(Ce);if(Ve)We.page=Ve}}}),De=async(ve)=>{C();let We=Y(await W.newContext({serviceWorkers:"block",acceptDownloads:!1}),"context");try{await We.route("**/*",(Ve)=>Ve.abort()),C(),await We.routeWebSocket("**/*",(Ve)=>Ve.close({code:1008,reason:"Reason evaluator network denied"})),C(),await We.exposeBinding("__araHandsRpc",async(Ve,_r)=>e.onBrowserOperation?e.onBrowserOperation(ve,()=>me.dispatch(_r)):me.dispatch(_r)),C();let Ce=await We.newPage();return C(),await Ce.goto("data:text/html,<title>Reason Hands evaluator</title>"),C(),await Ce.evaluate(`(${ss})(${JSON.stringify(me.roots)})`),{context:We,page:Ce,runId:ve}}catch(Ce){throw await z(We).catch(()=>{return}),Ce}},Me=await De(),rr={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(rr.evaluator.context),rr.evaluator=await De(ve)}};return C(),rr}catch(ne){throw await Q().catch(()=>{return}),ne}},we=async()=>{if(C(),k)return k;if(!w){R=re();let W;w=Promise.race([R,new Promise((q,ne)=>{W=setTimeout(()=>ne(Error("hands_browser_unavailable: startup timed out")),dd)})]).then((q)=>(C(),k=q,q)).catch(async()=>{A=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")),xs)})])}catch{A=Error("hands_browser_unavailable: startup cleanup unconfirmed")}finally{if(q)clearTimeout(q)}throw A}).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(`(${is})(${JSON.stringify({code:W})})`);if(typeof Me!=="string")throw Error("hands_repl_invalid_evaluator_output");let rr=le.page;if(ne&&rr&&!Me.includes("<<<ARA_VIEW_IMAGE")){let ve=()=>ye.captureProgressFrame(rr);try{let We=await(e.onBrowserOperation?e.onBrowserOperation(q,ve):ve());return le.automaticProgressImage=!0,`${Me}
|
|
303
303
|
${We}`}catch{return`${Me}
|
|
304
304
|
Screen capture unavailable.`}}return Me})(),me,De=new Promise((Me,rr)=>{me=setTimeout(()=>rr(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;Ut(e.socketPath);let ae=Nr.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,qr(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),qr(W,{ok:!0,output:"ARA_HANDS_REPL_READY"});return}if(typeof ee.action==="string"&&ee.action!=="evaluate"&&e.onControl){qr(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),rr=await(e.onEvaluate?e.onEvaluate(ee,Me):Me());qr(W,{ok:!0,output:rr,browserActions:f,...g.automaticProgressImage?{automaticProgressImage:!0}:{}})}catch(ee){qr(W,{ok:!1,error:ee instanceof Error?ee.message:String(ee),stack:ee instanceof Error?ee.stack:void 0,browserActions:f})}}).catch((ee)=>{qr(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")Kc(e.socketPath,384);W()}catch(ne){ae.close(()=>q(ne))}})})}catch(W){throw Ut(e.socketPath),W}return{socketPath:e.socketPath,browserExecutablePath:l,stop(){if(D)return D;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,Ut(e.socketPath);let le=[Q()];if(R)le.push(R.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 D=Promise.race([ne(),new Promise((le,fe)=>{ye=setTimeout(()=>fe(Error("hands_repl_stop_timeout")),
|
|
306
|
-
`?"active":"marker_invalid"}catch(l){return l instanceof Error&&"code"in l&&l.code==="ENOENT"?"marker_missing":"marker_invalid"}}function Hs(e=process.platform,a=Cs){return vo(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 Ns(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 wt,closeSync as kl,constants as rt,fchmodSync as Sl,fstatSync as El,openSync as Rl,copyFileSync as Ol,existsSync as Zn,lstatSync as ze,statSync as Lr,mkdtempSync as xl,mkdirSync as tt,realpathSync as Te,renameSync as Xt,rmSync as Pl,writeFileSync as Qt}from"fs";import{homedir as Il,tmpdir as ki}from"os";import{basename as Al,dirname as nr,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 Ls(e){return e===null?"other":kd[e]??"other"}function ar(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",Er="granted_root",_e="project_root",Yr="terminal_root",Xr="terminal_benchmark_tool_profile",Sd=["bash","bash-node-repl","bash-node-repl-files"],Bs="hands_node_repl_persistent_execution_unsupported";function js(e){return e==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function Wn(e){return Sd.includes(e)}function Za(e){return Ed(e)&&e.workspace_mode==="terminal_root"&&Wn(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()}),Fn=/^reason\/[0-9a-f]{8}$/,Rd=h({source_path:t().refine(Ne).optional(),branch:t().regex(Fn)}),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,Ms=/^[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 Ws(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||!Ms.test(f))return null;let g=f.slice(0,12),k=(z)=>({commit:f,from:"head",note:`reason: started from ${z}`}),R=await u(["symbolic-ref","--quiet","HEAD"]);if(!R?.startsWith("refs/heads/"))return k(`the checkout's detached HEAD ${g}`);let w=R.slice(11),A=await l(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(A.status!==0||A.stdout.trim())return k(`${w} at ${g}: the checkout has uncommitted changes, which stay there`);let N=await u(["config","--get",`branch.${w}.remote`]),D=await u(["config","--get",`branch.${w}.merge`]);if(!N||!D?.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,D],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||!Ms.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 Un,readFileSync as zs,realpathSync as zt,rmdirSync as Fs,unlinkSync as Dd,writeFileSync as Cd}from"fs";import{readFile as Hd}from"fs/promises";import{join as hr,resolve as Us}from"path";var mt=".reason-device",Nd=86400000,Ld=500,Bd=60000;function $s(e,a,l){let u=a.split("/"),f=Ke.split("/");if(u.length!==f.length+2||f.some((g,k)=>u[k]!==g)||!Dr.test(u[f.length]))return;try{let g=Ks(e,u[f.length]);Cd(hr(g,mt),l,{flag:"wx",mode:384})}catch{}}function Ks(e,a){let l=()=>new r("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!Dr.test(a))throw l();let u=hr(zt(e),Ke),f=hr(u,a);if(!Kn(f).isDirectory()||zt(f)!==f)throw l();return f}async function jd(e,a,l=Wd){let u;try{u=Ks(e,a)}catch(f){if(zn(f))return!0;throw f}for(let f of Un(u,{withFileTypes:!0})){if(f.name===mt||!f.isDirectory())continue;let g=hr(u,f.name),k=await Md(g);if(k){let R=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false",`--git-dir=${k}`,"worktree"];if((await l([...R,"remove","--force",g])).status===0)await l([...R,"prune"])}else try{Fs(g)}catch{}}if(Un(u).some((f)=>f!==mt))return!1;try{Dd(hr(u,mt))}catch(f){if(!zn(f))throw f}return Fs(u),!0}async function Md(e){try{let a=hr(e,".git");if(!Kn(a).isFile())return null;let l=/^gitdir: (.+)$/m.exec(zs(a,"utf8"));if(!l)return null;let u=Us(e,l[1].trim());return Us(u,(await Hd(hr(u,"commondir"),"utf8")).trim())}catch{return null}}async function Qa(e){let a;try{if(a=hr(zt(e.home),Ke),!Kn(a).isDirectory())return{status:"skipped",reason:"workspace_untrusted"};if(zt(a)!==a)return{status:"skipped",reason:"workspace_untrusted"}}catch(g){if(zn(g))return{status:"skipped",reason:"no_workspace"};throw g}let l=Un(a,{withFileTypes:!0}).filter((g)=>g.isDirectory()&&Dr.test(g.name)).map((g)=>g.name).filter((g)=>{try{return zs(hr(a,g,mt),"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 ec(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 zn(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 fi(e)}function br(){throw new r("environment_unavailable","The private Session environment is unavailable or stale.")}function Kt(e){return Fd("sha256").update(JSON.stringify({...e,variables:Object.fromEntries(Object.entries(e.variables).sort(([a],[l])=>a.localeCompare(l)))})).digest("hex")}function si(e,a){b(e);let l=Ud(e,"environment.json"),u,f=new Set,g=(R,w)=>`${w}:${R}`,k=(R)=>{let w=oi.safeParse(R);if(!w.success)return br();let A=w.data,N=a.identity(),D=Date.parse(A.expires_at);if(!N||A.run_id!==a.runId||A.device_id!==a.deviceId||A.root_id!==a.rootId||A.binding.kind!==a.binding.kind||A.binding.target_revision!==a.binding.target_revision||A.binding.root_grant_revision!==a.binding.root_grant_revision||A.binding.target_generation!==N.generation||A.binding.target_fence_id!==N.fenceId||D<=Date.now()||D>a.expiresAtMs||a.expiresAtMs<=Date.now()||Object.keys(A.variables).some((S)=>!zd(S)))return br();if(A.git){let S=new URL(a.apiOrigin),M=new URL(A.git.base_url),j=Date.parse(A.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>D)return br()}if(A.cloud_access&&!Qo(A.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 A};return{path:l,install(R){let w=k(R),A=Kt(w);if(u&&(w.revision<u.revision||w.revision===u.revision&&(A!==u.hash||w.snapshot_id!==u.snapshotId)))return br();if(!u||w.revision>u.revision){if(y(l,w,Re.snapshotBytes),Kt(k(JSON.parse(m(l,Re.snapshotBytes))))!==A)return br();let N=u;if(u={revision:w.revision,hash:A,snapshotId:w.snapshot_id,generation:w.binding.target_generation},N&&N.generation<u.generation)f.add(g(N.snapshotId,N.revision))}else if(Kt(k(JSON.parse(m(l,Re.snapshotBytes))))!==u.hash)return br();return{installed:!0,snapshot_id:w.snapshot_id,installed_revision:w.revision}},current(){if(!u)return br();try{let R=k(JSON.parse(m(l,Re.snapshotBytes)));if(Kt(R)!==u.hash)return br();return R}catch{return br()}},carried:(R,w)=>f.has(g(R,w))}}var Zr=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]),Gs=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([T,...Zr.map((e)=>e.artifact_sha256),...Kd,...Gs]);var __=new Set([T,...Zr.filter((e)=>e.pi_tools_v1).map((e)=>e.artifact_sha256),...Gs]);var m_=new Set([T,...Zr.filter((e)=>e.pi_tools_confinement_v1).map((e)=>e.artifact_sha256)]);var h_=new Set([T,...Zr.filter((e)=>e.home_folder_v1).map((e)=>e.artifact_sha256)]);var g_=new Set([T,...Zr.filter((e)=>e.background_bash_v1).map((e)=>e.artifact_sha256)]);var b_=new Set([T,...Zr.filter((e)=>e.machine_sdk_v1).map((e)=>e.artifact_sha256)]);var Gd=[H,"reason-hands-worker.cjs"];function Js(e){return typeof e==="string"&&Gd.includes(e)}var Jd;function Vs(){return Jd??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as Vd,constants as Gn,fstatSync as qs,lstatSync as qd,openSync as Yd,readSync as Xd,realpathSync as Zd,watch as Qd}from"fs";import{dirname as Ys}from"path";function Gt(e,a){let l;try{let u=Ys(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=qs(l);if(!g.isFile()||g.nlink!==1||!G(g)||g.size<1||g.size>8192)return null;let k=Buffer.alloc(8193),R=Xd(l,k,0,k.length,0),w=qs(l);if(R!==g.size||w.size!==g.size||w.nlink!==1||w.mtimeMs!==g.mtimeMs||w.ctimeMs!==g.ctimeMs)return null;let A=JSON.parse(k.subarray(0,R).toString("utf8"));if(!A||A.pid!==a.pid||!Number.isSafeInteger(A.pid)||A.pid<1||A.launchId!==a.launchId||A.workerVersion!==a.workerVersion||A.protocolVersion!==a.protocolVersion||A.workerArtifactSha256!==a.workerArtifactSha256||A.workerEntrypoint!==a.workerEntrypoint||A.workspaceAliasReady!==!0||!Ee(A.targetGeneration)||!Ee(A.generation)||!ce(A.fenceId))return null;return{...a,generation:A.generation,targetGeneration:A.targetGeneration,fenceId:A.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 Xs(e){let a=new AbortController,l=e.initial,u=l.targetGeneration,f=!1,g=!1,k,R,w=()=>{if(g)return;g=!0,k?.close(),k=void 0,clearInterval(R),e.signal.removeEventListener("abort",w),a.abort()},A=()=>{if(g)return;if(!e.isAlive()){w();return}let N=Gt(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,A()})};if(e.signal.aborted)return w(),{stop:w};e.signal.addEventListener("abort",w,{once:!0});try{k=(e.watch??el)(Ys(e.path),A,()=>{k?.close(),k=void 0})}catch{}return R=setInterval(A,1000),R.unref?.(),A(),{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 Zs}from"path";var Qs=1048576,qn=105000,ul=2000,fl=String.raw`
|
|
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),qr(W,{ok:!0,output:"ARA_HANDS_REPL_READY"});return}if(typeof ee.action==="string"&&ee.action!=="evaluate"&&e.onControl){qr(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),rr=await(e.onEvaluate?e.onEvaluate(ee,Me):Me());qr(W,{ok:!0,output:rr,browserActions:f,...g.automaticProgressImage?{automaticProgressImage:!0}:{}})}catch(ee){qr(W,{ok:!1,error:ee instanceof Error?ee.message:String(ee),stack:ee instanceof Error?ee.stack:void 0,browserActions:f})}}).catch((ee)=>{qr(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")Kc(e.socketPath,384);W()}catch(ne){ae.close(()=>q(ne))}})})}catch(W){throw Ut(e.socketPath),W}return{socketPath:e.socketPath,browserExecutablePath:l,stop(){if(D)return D;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,Ut(e.socketPath);let le=[Q()];if(R)le.push(R.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 D=Promise.race([ne(),new Promise((le,fe)=>{ye=setTimeout(()=>fe(Error("hands_repl_stop_timeout")),xs)})]).finally(()=>{if(ye)clearTimeout(ye);Ut(e.socketPath)}),D}}}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 Cs(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 Hs="/run/sc/egress-guard",yd=10002,Fn=10003;function So(e=process.platform,a=Hs){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} ${Fn}
|
|
306
|
+
`?"active":"marker_invalid"}catch(l){return l instanceof Error&&"code"in l&&l.code==="ENOENT"?"marker_missing":"marker_invalid"}}function Ns(e=process.platform,a=Hs){return So(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 Ls(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 wt,closeSync as kl,constants as rt,fchmodSync as Sl,fstatSync as El,openSync as Rl,copyFileSync as Ol,existsSync as Qn,lstatSync as ze,statSync as Lr,mkdtempSync as xl,mkdirSync as tt,realpathSync as Te,renameSync as Xt,rmSync as Pl,writeFileSync as Qt}from"fs";import{homedir as Il,tmpdir as Si}from"os";import{basename as Al,dirname as nr,join as Ue,resolve as Ei,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 Bs(e){return e===null?"other":kd[e]??"other"}function ar(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",Er="granted_root",_e="project_root",Yr="terminal_root",Xr="terminal_benchmark_tool_profile",Sd=["bash","bash-node-repl","bash-node-repl-files"],js="hands_node_repl_persistent_execution_unsupported";function Ms(e){return e==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function Un(e){return Sd.includes(e)}function Qa(e){return Ed(e)&&e.workspace_mode==="terminal_root"&&Un(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()}),zn=/^reason\/[0-9a-f]{8}$/,Rd=h({source_path:t().refine(Ne).optional(),branch:t().regex(zn)}),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,Ws=/^[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 Fs(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||!Ws.test(f))return null;let g=f.slice(0,12),k=(z)=>({commit:f,from:"head",note:`reason: started from ${z}`}),R=await u(["symbolic-ref","--quiet","HEAD"]);if(!R?.startsWith("refs/heads/"))return k(`the checkout's detached HEAD ${g}`);let w=R.slice(11),A=await l(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(A.status!==0||A.stdout.trim())return k(`${w} at ${g}: the checkout has uncommitted changes, which stay there`);let N=await u(["config","--get",`branch.${w}.remote`]),D=await u(["config","--get",`branch.${w}.merge`]);if(!N||!D?.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,D],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||!Ws.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 Gn,readdirSync as $n,readFileSync as $s,realpathSync as zt,rmdirSync as Us,unlinkSync as Dd,writeFileSync as Cd}from"fs";import{readFile as Hd}from"fs/promises";import{join as hr,resolve as zs}from"path";var mt=".reason-device",Nd=86400000,Ld=500,Bd=60000;function Ks(e,a,l){let u=a.split("/"),f=Ke.split("/");if(u.length!==f.length+2||f.some((g,k)=>u[k]!==g)||!Dr.test(u[f.length]))return;try{let g=Gs(e,u[f.length]);Cd(hr(g,mt),l,{flag:"wx",mode:384})}catch{}}function Gs(e,a){let l=()=>new r("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!Dr.test(a))throw l();let u=hr(zt(e),Ke),f=hr(u,a);if(!Gn(f).isDirectory()||zt(f)!==f)throw l();return f}async function jd(e,a,l=Wd){let u;try{u=Gs(e,a)}catch(f){if(Kn(f))return!0;throw f}for(let f of $n(u,{withFileTypes:!0})){if(f.name===mt||!f.isDirectory())continue;let g=hr(u,f.name),k=await Md(g);if(k){let R=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false",`--git-dir=${k}`,"worktree"];if((await l([...R,"remove","--force",g])).status===0)await l([...R,"prune"])}else try{Us(g)}catch{}}if($n(u).some((f)=>f!==mt))return!1;try{Dd(hr(u,mt))}catch(f){if(!Kn(f))throw f}return Us(u),!0}async function Md(e){try{let a=hr(e,".git");if(!Gn(a).isFile())return null;let l=/^gitdir: (.+)$/m.exec($s(a,"utf8"));if(!l)return null;let u=zs(e,l[1].trim());return zs(u,(await Hd(hr(u,"commondir"),"utf8")).trim())}catch{return null}}async function ec(e){let a;try{if(a=hr(zt(e.home),Ke),!Gn(a).isDirectory())return{status:"skipped",reason:"workspace_untrusted"};if(zt(a)!==a)return{status:"skipped",reason:"workspace_untrusted"}}catch(g){if(Kn(g))return{status:"skipped",reason:"no_workspace"};throw g}let l=$n(a,{withFileTypes:!0}).filter((g)=>g.isDirectory()&&Dr.test(g.name)).map((g)=>g.name).filter((g)=>{try{return $s(hr(a,g,mt),"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 tc(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 Kn(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 mi(e)}function br(){throw new r("environment_unavailable","The private Session environment is unavailable or stale.")}function Kt(e){return Fd("sha256").update(JSON.stringify({...e,variables:Object.fromEntries(Object.entries(e.variables).sort(([a],[l])=>a.localeCompare(l)))})).digest("hex")}function ai(e,a){b(e);let l=Ud(e,"environment.json"),u,f=new Set,g=(R,w)=>`${w}:${R}`,k=(R)=>{let w=si.safeParse(R);if(!w.success)return br();let A=w.data,N=a.identity(),D=Date.parse(A.expires_at);if(!N||A.run_id!==a.runId||A.device_id!==a.deviceId||A.root_id!==a.rootId||A.binding.kind!==a.binding.kind||A.binding.target_revision!==a.binding.target_revision||A.binding.root_grant_revision!==a.binding.root_grant_revision||A.binding.target_generation!==N.generation||A.binding.target_fence_id!==N.fenceId||D<=Date.now()||D>a.expiresAtMs||a.expiresAtMs<=Date.now()||Object.keys(A.variables).some((S)=>!zd(S)))return br();if(A.git){let S=new URL(a.apiOrigin),M=new URL(A.git.base_url),j=Date.parse(A.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>D)return br()}if(A.cloud_access&&!es(A.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 A};return{path:l,install(R){let w=k(R),A=Kt(w);if(u&&(w.revision<u.revision||w.revision===u.revision&&(A!==u.hash||w.snapshot_id!==u.snapshotId)))return br();if(!u||w.revision>u.revision){if(y(l,w,Re.snapshotBytes),Kt(k(JSON.parse(m(l,Re.snapshotBytes))))!==A)return br();let N=u;if(u={revision:w.revision,hash:A,snapshotId:w.snapshot_id,generation:w.binding.target_generation},N&&N.generation<u.generation)f.add(g(N.snapshotId,N.revision))}else if(Kt(k(JSON.parse(m(l,Re.snapshotBytes))))!==u.hash)return br();return{installed:!0,snapshot_id:w.snapshot_id,installed_revision:w.revision}},current(){if(!u)return br();try{let R=k(JSON.parse(m(l,Re.snapshotBytes)));if(Kt(R)!==u.hash)return br();return R}catch{return br()}},carried:(R,w)=>f.has(g(R,w))}}var Zr=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]),Js=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([T,...Zr.map((e)=>e.artifact_sha256),...Kd,...Js]);var __=new Set([T,...Zr.filter((e)=>e.pi_tools_v1).map((e)=>e.artifact_sha256),...Js]);var m_=new Set([T,...Zr.filter((e)=>e.pi_tools_confinement_v1).map((e)=>e.artifact_sha256)]);var h_=new Set([T,...Zr.filter((e)=>e.home_folder_v1).map((e)=>e.artifact_sha256)]);var g_=new Set([T,...Zr.filter((e)=>e.background_bash_v1).map((e)=>e.artifact_sha256)]);var b_=new Set([T,...Zr.filter((e)=>e.machine_sdk_v1).map((e)=>e.artifact_sha256)]);var Gd=[H,"reason-hands-worker.cjs"];function Vs(e){return typeof e==="string"&&Gd.includes(e)}var Jd;function qs(){return Jd??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as Vd,constants as Jn,fstatSync as Ys,lstatSync as qd,openSync as Yd,readSync as Xd,realpathSync as Zd,watch as Qd}from"fs";import{dirname as Xs}from"path";function Gt(e,a){let l;try{let u=Xs(e),f=qd(u);if(!f.isDirectory()||f.isSymbolicLink()||!G(f,18)||Zd(u)!==u)return null;l=Yd(e,Jn.O_RDONLY|Jn.O_NOFOLLOW|Jn.O_NONBLOCK);let g=Ys(l);if(!g.isFile()||g.nlink!==1||!G(g)||g.size<1||g.size>8192)return null;let k=Buffer.alloc(8193),R=Xd(l,k,0,k.length,0),w=Ys(l);if(R!==g.size||w.size!==g.size||w.nlink!==1||w.mtimeMs!==g.mtimeMs||w.ctimeMs!==g.ctimeMs)return null;let A=JSON.parse(k.subarray(0,R).toString("utf8"));if(!A||A.pid!==a.pid||!Number.isSafeInteger(A.pid)||A.pid<1||A.launchId!==a.launchId||A.workerVersion!==a.workerVersion||A.protocolVersion!==a.protocolVersion||A.workerArtifactSha256!==a.workerArtifactSha256||A.workerEntrypoint!==a.workerEntrypoint||A.workspaceAliasReady!==!0||!Ee(A.targetGeneration)||!Ee(A.generation)||!ce(A.fenceId))return null;return{...a,generation:A.generation,targetGeneration:A.targetGeneration,fenceId:A.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 Zs(e){let a=new AbortController,l=e.initial,u=l.targetGeneration,f=!1,g=!1,k,R,w=()=>{if(g)return;g=!0,k?.close(),k=void 0,clearInterval(R),e.signal.removeEventListener("abort",w),a.abort()},A=()=>{if(g)return;if(!e.isAlive()){w();return}let N=Gt(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,A()})};if(e.signal.aborted)return w(),{stop:w};e.signal.addEventListener("abort",w,{once:!0});try{k=(e.watch??el)(Xs(e.path),A,()=>{k?.close(),k=void 0})}catch{}return R=setInterval(A,1000),R.unref?.(),A(),{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 Qs}from"path";var ei=1048576,Yn=105000,ul=2000,fl=String.raw`
|
|
307
307
|
const { writeSync } = require("node:fs");
|
|
308
308
|
const { createRequire } = require("node:module");
|
|
309
309
|
const { join } = require("node:path");
|
|
@@ -311,7 +311,7 @@ const { createInterface } = require("node:readline");
|
|
|
311
311
|
const { formatWithOptions, inspect } = require("node:util");
|
|
312
312
|
const vm = require("node:vm");
|
|
313
313
|
|
|
314
|
-
const timeoutMs = ${
|
|
314
|
+
const timeoutMs = ${Yn};
|
|
315
315
|
const maxLogChars = 524288;
|
|
316
316
|
let activeOutput = [];
|
|
317
317
|
let activeOutputChars = 0;
|
|
@@ -442,11 +442,11 @@ lines.on("line", (line) => {
|
|
|
442
442
|
}
|
|
443
443
|
}).catch((error) => respond({ ok: false, error: String(error) }));
|
|
444
444
|
});
|
|
445
|
-
`;function pl(e=process.execPath,a=process.versions.bun){return a?"node":e}function
|
|
446
|
-
`)}function
|
|
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 bt(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
|
|
448
|
-
`);if(re===-1)return;let we=S.slice(0,re);S=S.slice(re+1);let Ie=A;if(!Ie){D();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=R.trim(),we=Y??Error(re?`hands_node_repl_child_exited:${re}`:"hands_node_repl_child_exited");if(k=!0,A&&!A.finishing)N(A,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(D,Y.action==="probe"?1e4:Math.max(1,Math.min(e.evaluationTimeoutMs??
|
|
449
|
-
`,(be)=>{if(!be)return;N(Z,void 0,be)})});try{if(!w){if(l.pid===void 0)await bt(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 bt(u)}finally{await a.cleanup()}throw Y}let C=Promise.resolve(),z=new Set;
|
|
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");Jt(Y,{ok:!0,output:W.output})}catch(ae){Ie=!1,Jt(Y,{ok:!1,error:ae instanceof Error?ae.message:String(ae),stack:ae instanceof Error?ae.stack:void 0})}}).catch((ae)=>{Jt(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 bt(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}),D();try{await bt(u)}finally{await a.cleanup(),Jn(e.socketPath)}}}}var on=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var _i="/workspace",mi="/var/lib/reason/sessions",hl="/var/lib/reason/session-controls";function ui(e){let a=`${mi}/`;if(!e.startsWith(a))return null;let l=e.slice(a.length);if(!on.test(l)||l!==l.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${hl}/${l}/job.env`}function gl(e){if(!on.test(e))throw Error("personal_computer_invalid_identity");return e.toLowerCase()}function Yt(e){let a=gl(e);return{runtimeRoot:`${mi}/${a}`,workspaceRoot:`${_i}/sessions/${a}`,sharedRoot:_i}}var bi="/root/.ara/cloud-browser/repl.sock";function Yn(e){return e==="compute"}function wi(e,a,l="linux"){if(e)Yt(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=Xo,Dl=45000,Cl=wn+1500,Rr=/^[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 sn(e=J(),a=Hs){return e&&a()?Mn:null}function nc(e=J(),a=process.platform,l=process.geteuid?.()){return a!=="linux"||l!==0||e!==null}function xo(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 Qr(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 di extends r{expiryDiagnostic;constructor(e){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=e}}function Bl(e){return Qr(e)&&Object.keys(e).every((a)=>a==="source_path"||a==="branch")&&(e.source_path===void 0||Ne(e.source_path))&&typeof e.branch==="string"&&Fn.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",kt,xt,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",E,Xn,Xr,pe,Le,xe]),k=Qr(e)?e:null,R=k?.[Xn],w=k?.[Xr],A=k?.[Le],N=R===void 0||(k?.[E]===Er||A===ct&&k?.[E]===void 0)&&Qr(R)&&Object.keys(R).every((Q)=>Q==="mode"||Q==="allowed_domains")&&R.mode==="enforce"&&Array.isArray(R.allowed_domains)&&R.allowed_domains.length<=256&&R.allowed_domains.every((Q)=>typeof Q==="string"&&xn(Q));if(!Qr(e)||f.some((Q)=>!(Q in e))||Object.keys(e).some((Q)=>!g.has(Q))||!N||A!==void 0&&A!==ct||k?.[xe]!==void 0&&k[xe]!==Pt||k?.personal_workspace!==void 0&&(k.personal_workspace!==!0||k[E]!==Er)||k?.cloud_browser!==void 0&&(k.cloud_browser!==!0||k[E]!==Er)||k?.sandbox_provider!==void 0&&!Yn(k.sandbox_provider)||k?.sandbox_os!==void 0&&k.sandbox_os!=="linux"||w!==void 0&&(k?.[E]!==Yr||!Wn(w))||E in e&&e[E]!==Er&&e[E]!==Yr&&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"||!Rr.test(e.session_id)||e.workspace_id!==void 0&&(typeof e.workspace_id!=="string"||!Rr.test(e.workspace_id))||e.legacy_workspace_id!==void 0&&(typeof e.legacy_workspace_id!=="string"||!Rr.test(e.legacy_workspace_id))||e[kt]!==void 0&&(e[kt]!==at||(E in e))||e[xt]!==void 0&&(e[xt]!==Oe||(E in e))||e[pe]!==void 0&&(typeof e[pe]!=="string"||!Rr.test(e[pe]))||typeof e.environment_id!=="string"||!Rr.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!==T||!Js(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 D;try{D=new URL(e.relay_url)}catch{throw new r("invalid_hands_relay","Reason Hands relay URL is invalid.")}if((Ei(D.hostname)?D.protocol!=="ws:":D.protocol!=="wss:")||D.username||D.password||D.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(D.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:$r(u),expiry_ms:$r(M),remaining_ms:Number.isSafeInteger(M-u)?M-u:null,maximum_lifetime_ms:yi,cli_artifact:Vs()};if(j!=="accepted")throw new di(C);try{l?.(C)}catch{}let z=e.environment_binding===void 0?void 0:Sn.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:D.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[kt]===at?{[kt]:at}:{},...e[xt]===Oe?{[xt]:Oe}:{},...typeof e[pe]==="string"?{[pe]:e[pe]}:{},...e[Le]===ct?{[Le]:ct}:{},...e[xe]===Pt?{[xe]:Pt}:{},...typeof e.workspace_path==="string"?{workspace_path:e.workspace_path}:{},...Qr(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:T,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?{}:{[Xr]:w},...R===void 0?{}:{[Xn]:{mode:"enforce",allowed_domains:[...new Set(R.allowed_domains)].sort()}}}}function Co(){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,R)=>k.group??R)).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=Co();function Wl(e,a){tt(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 R=Ue(l,k);try{let A=ze(R);if(A.isSymbolicLink()||!A.isDirectory())throw u()}catch(A){if(!(A&&typeof A==="object"&&("code"in A)&&A.code==="ENOENT"))throw A;try{tt(R,{mode:448})}catch(N){if(!(N&&typeof N==="object"&&("code"in N)&&N.code==="EEXIST"))throw N}}let w=ze(R);if(w.isSymbolicLink()||!w.isDirectory()||Te(R)!==R)throw u();l=R}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,rt.O_RDONLY|rt.O_DIRECTORY|rt.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=Wc(),l,u,f){if(!Rr.test(e)||l!==void 0&&!Rr.test(l))throw new r("invalid_hands_workspace","Reason Hands run identity is invalid.");let g=nr(X({kind:"managed",workspaceId:e,...u?{base:u}:{},...f?{layout:f}:{}})),k=Wl(a,nr(g)),R=Ue(k,Al(g)),w=!1;try{let S=ze(R);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),nr(X({kind:"managed",workspaceId:e,...u?{base:u}:{}}))),M=ze(S);if(!M.isSymbolicLink()&&M.isDirectory()&&Te(S)===S)Xt(S,R),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(nr(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.");Xt(R,C)}try{Xt(j,R)}catch(z){if(C)Xt(C,R);throw z}w=!0}catch(M){if(M instanceof r||!(M&&typeof M==="object"&&("code"in M)&&M.code==="ENOENT"))throw M}}tt(R,{recursive:!0,mode:448}),wt(R,448);let A=Te(R);if(nr(A)!==k)throw new r("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let N=Ue(A,"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}tt(N,{recursive:!0,mode:448}),wt(N,448);let D=Te(N);if(nr(D)!==A)throw new r("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:A,repoPath:D}}function pi(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=Lr(e),!f.isDirectory())return"unready";vl(e,rt.R_OK|rt.W_OK|rt.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=nr(e);;g=nr(g)){let k;try{k=Lr(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===nr(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(!Rr.test(a))return null;let g,k;try{g=Te(e),k=nr(X({kind:"managed",workspaceId:a,...l?{base:l}:{},...f?{layout:f}:{}}))}catch{return null}let R=Ue(g,k),w=Wi(R)!==null,A=(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(nr(R)),C=ze(R)}catch{return null}if(j.isSymbolicLink()||!j.isDirectory()||j.uid===0||C.uid!==0)return null;N=j.uid}let D=g;for(let j of k.split("/")){let C=Ue(D,j),z=!1;try{let Q=ze(C);z=!Q.isSymbolicLink()&&Q.isDirectory()&&Te(C)===C}catch{}if(!z)throw A("This cloud Session's workspace root is missing or is not a real directory.");D=C}pi(R);let S;try{S=hi(R)}catch(j){if(j instanceof r)throw j;throw A("This cloud Session's workspace root changed while Reason Hands checked it.")}let M=null;try{M=Lr(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 hi(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(Yt(l.slice(l.lastIndexOf("/")+1)).runtimeRoot!==l)throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");let R=Te("/workspace"),w=Te(u);if(R!=="/workspace"||!Lr(w).isDirectory()||!w.startsWith("/workspace/"))throw new r("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:l,repoPath:w}}let g=Ns(l);if(g&&f.isSymbolicLink()){let R=Te(u);if(R!==Te(g)||!Lr(R).isDirectory())throw new r("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:l,repoPath:R}}if(f.isSymbolicLink()||!f.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let k=Te(u);if(nr(k)!==l)throw new r("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:l,repoPath:k}}function Qn(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 Oi(e,a,l){if(Zt(a)){let u=Te(l);return{anchor:u,target:Si(u,a),boundary:Ue(u,Ke)}}return{anchor:e,target:Qn(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)tt(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 xi(e,a){let l=Te(Qn(e,a.source_path,"repository"));if(!se(e,l)||!Lr(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(Zn(Oi(f,a,u).target))return;return await Ws(xi(f,l))??void 0}catch{return}}function Jl(e,a,l,u,f=Vl,g=s()){let k=Te(e),{target:R,boundary:w,anchor:A}=Oi(k,a,g);if(l&&!Zn(R)){let S=xi(k,l);Kl(A,nr(R));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",R,l.branch]):f([...M,"worktree","add","-b",l.branch,R]);if(!u&&j.status!==0&&/already exists/.test(j.stderr)&&!Zn(R))j=f([...M,"worktree","add",R,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(R)}catch{throw new r("workspace_folder_missing","This Session's folder no longer exists.")}let D=Te(R);if(N.isSymbolicLink()&&!se(w,D))throw new r("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!Lr(D).isDirectory()||!se(w,D))throw new r("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(L(D))throw new r("protected_path","Credential and secret folders are unavailable to Sessions.");return D}function Vl(e){let a=Zc();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 Ii(e){return ui(e)??Wi(e)?.jobEnv??Ue(e,"job.env")}function ql(e,a){let l=Ii(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),wt(a,384)}function Yl(e){if(e.workspaceMode===_e&&e.workspacePath!==void 0){let k=e.home??s(),R=Jl(e.grantedRoot,e.workspacePath,e.workspaceWorktree,e.workspaceWorktreeStart,void 0,k);if(e.workspaceWorktree&&e.deviceId)$s(k,e.workspacePath,e.deviceId);return{workRoot:R,repoPath:R,workspace:{kind:"root",path:e.workspacePath},jobEnvPath:Ue(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if(e.workspaceMode===Er)return{...hi(e.grantedRoot,e.personalWorkspace),workspace:{kind:"root"},jobEnvPath:Ue(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if(e.workspaceMode===Yr||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 R=Te(e.grantedRoot);return{workRoot:R,repoPath:R,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=Ge(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:nr(g.workRoot),managedWorkspace:!0}}function Ao(e){let{command:a,prefix:l}=En(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:[Po,"ignore","pipe"]}}}var Po=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((D)=>`hands.worker.${D}`)),R=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((D)=>["bash","read","write","edit"].map((S)=>`${D}:${S}`))]),w=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],A=["peerGeneration","socketState","closeCode"],N=new Set(["event","reason","launchId",...w,...A]);return(D)=>{for(let S of D.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)||!R.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)||A.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=Gt(e.path,{pid:e.child.pid??-1,launchId:e.launchId,workerVersion:U,protocolVersion:F,workerArtifactSha256:T,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=(R)=>{if(l)return;l=!0,clearTimeout(k),e.signal.removeEventListener("abort",f),e.child.off("exit",g),a(R)},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 Ai=lc();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 Qr(f)&&f.code==="ENOENT"}}function nu(e){return e.sandbox_provider==="compute"&&!e.cloud_browser&&e[E]===Er}function ou(e,a,l){return e===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:ar(e,a),...l===void 0?{}:{worker_prespawned:l}}}}function ic(){Ai().catch(()=>{return}),Jr().catch(()=>{return})}async function et(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,R,w=jl(e.payload,a.now?.(),(W)=>{R=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 A=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)=>A(e.emitEvent(W,q));if(e.headless&&(w.cloud_browser===!0||e.managedBrowser!==void 0||w[Xr]!==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 D=J(),S=w[xe]===void 0?null:sn(D);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]===Yr,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[Xr]??"bash":null,Q=z?js(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?wa(e.runId):null,Z=null,be=null,ke,ae;try{f("browser_resolution");let W=e.headless&&a.browserExecutablePath===void 0?await Jr():null,q=j||w.cloud_browser?null:a.browserExecutablePath===void 0?e.headless?W?.status==="resolved"?W.executablePath:null:await As(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??Ai)()}catch{ne={path:Io(),source:"fallback"}}if(f("workspace_setup"),process.platform==="darwin"){let Ae=w[E]===_e&&w.workspace_path!==void 0?Qn(e.root,w.workspace_worktree?w.workspace_worktree.source_path:w.workspace_path,"folder"):null;for(let Xe of new Set([e.root,...Ae?[Ae]:[]]))await ns(Xe)}let le=w[E]===Er||w[E]===Yr?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)tt(fe,{recursive:!0,mode:457}),wt(fe,457);Z="temporary_directory";let ee=Te(xl(Ue(fe,"reason-hands-session-")));be=ee,wt(ee,le?.sessionMode??448);let me=Ue(ee,"hands-config.json"),De=Ue(ee,"hands-ready.json"),Me=bl(),rr=w.target_fence_id;if(e.workspaceGrant){Z="workspace_grant",f("workspace_grant_wait");let Ae=e.workspaceGrant;await new Promise((Xe,Ir)=>{let Mr=()=>Ir(new r("cancelled","Reason Hands was cancelled."));if(e.signal.aborted){Mr();return}e.signal.addEventListener("abort",Mr,{once:!0}),Ae.then(Xe,Ir).finally(()=>e.signal.removeEventListener("abort",Mr))})}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:Ve,jobEnvPath:_r,workspacePoolPath:en,managedWorkspace:wr,workspace:Br,cloudSessionRoot:vt}=Yl({grantedRoot:ve,personalWorkspace:w.personal_workspace===!0,runId:e.runId,workspaceId:w.workspace_id,legacyWorkspaceId:w.legacy_workspace_id,workspaceBase:w[kt],workspaceLayout:w[xt],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(Uc(Ce))throw new r("folder_is_filesystem_root",`${zc(Ce)}.`);let Or="ara_device_wss";Z="jobs";let qe=e.headless&&e.runtimeDirectory?$t({runtimeDirectory:e.runtimeDirectory,root:ve,runId:e.runId,folders:[Ce,Ve]}):void 0;ke=qe?.disposeSocket;let lr=qe?Go(qe):null;if(lr)try{l(JSON.stringify({event:"hands.journal_owner_retired",run_id:e.runId,reason:lr.reason,prior_executor_launch_id:lr.executorLaunchId}))}catch{}if(qe&&[Ce,Ve].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 jr=w.personal_workspace?Ce.slice(Ce.lastIndexOf("/")+1):void 0;if(jr&&jr!==w.workspace_id)throw new r("invalid_hands_workspace","Personal session identity does not match its Device grant.");Z="browser_socket";let cr=w.cloud_browser?Ll(w.sandbox_os,jr):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${Me}`:Ue(qe?qe.launchDirectory:ee,"repl.sock");Z="relay_url";let fr=Ei(new URL(w.relay_url).hostname),xr=Or==="ara_device_wss"&&!fr?(a.loadProxy??Se)()?.url:void 0,or;Z="environment_owner";let tr=e.headless&&e.deviceIdentity&&w.environment_binding?si(ee,{runId:e.runId,...e.deviceIdentity,binding:w.environment_binding,expiresAtMs:Date.parse(w.expires_at),identity:()=>or?.()??null}):void 0;Z="job_environment";let ot=!tr&&Br.kind==="managed"&&wr?Ue(Ce,"job.env"):null;if(ot)try{Qt(ot,"",{mode:384,flag:"wx"})}catch(Ae){if(!(Ae instanceof Error&&("code"in Ae)&&Ae.code==="EEXIST"))throw Ae}let tn={url:w.relay_url,transport:Or,...xr===void 0?{}:{proxyUrl:xr},...e.localGithubConfinement?{localGithubConfinement:!0}:{},...w[Le]&&tr?{gitCredentialEnvironment:!0}:{},workerVersion:U,protocolVersion:F,workerArtifactSha256:T,workerEntrypoint:H,...process.platform==="win32"?{bashExecutable:Ye()}:{},targetGeneration:w.target_generation,fenceId:rr,workRoot:Ce,workspaceAliasPath:Ce,jobEnvPath:_r,...tr?{environmentSnapshotPath:tr.path,...e.hostExecution?{executionEnvironment:ai()}:{},environmentExpectedBinding:{runId:e.runId,...e.deviceIdentity,binding:w.environment_binding}}:ot?{jobEnvSourcePath:ot,workspacePoolPath:nr(Ce)}:wr?{}:{jobEnvSourcePath:Ii(Ce)},repoPath:Ve,replSocketPath:cr,...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&&D?{jobsUser:{...D,...S!==null?{modelGid:S}:{}}}:{},...e.managedPty&&qe&&tr?{managedPty:{version:1,...e.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:ci()}:{}}}:{},...C&&!q?{allowedTools:["bash","read","write","edit"]}:j?{allowedTools:z==="bash"?["bash"]:["bash","repl"]}:{}};if(tr||wr&&!ot)Qt(_r,"",{mode:384});else ql(Ce,_r);Z="config_write",Qt(me,JSON.stringify(tn),{mode:384}),Z=null;let Pr={session_id:w.session_id,environment_id:w.environment_id,hands_protocol_version:F,hands_worker_version:U,hands_worker_artifact_sha256:T,hands_worker_entrypoint:H,target_generation:w.target_generation,target_fence_id:w.target_fence_id,executor_launch_id:Me},St=null,eo=!1,ro=!1,to,Ze=null,no,oo,Et="failed",so=null,dn=Promise.resolve(),io=null,ln=async(Ae,Xe)=>{try{await N(Ae,Xe)}catch{}};try{f("event_started");let Ae,Xe=(async()=>{await e.emitEvent("hands.started",{...Pr,policy_mode:"full_access",policy_version:1,path_source:ne.source}),Ae=Date.now()})();Xe.catch(()=>{return}),f("worker_setup");let Ir=w.browser_egress?{mode:"enforce",allowedDomains:w.browser_egress.allowed_domains}:{mode:"off"};if(z&&z!=="bash")St=await(a.startNodeRepl??ei)({socketPath:cr,workRoot:Ce});else if(!j&&!w.cloud_browser&&q)St=await(a.startRepl??Ts)({socketPath:cr,browserExecutablePath:q,workspaceRoot:Ve,...e.managedBrowser?{managedBrowser:e.managedBrowser}:{},...e.desktopRecording?{recording:e.desktopRecording}:{},networkPolicy:Ir,onEgressDenied:(de)=>{let ir=Ls(de.host);l(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:ir,reason:de.reason,run_id:e.runId})),dn=dn.then(()=>N("hands.browser_egress_denied",{destination_id:ir,reason:de.reason})).catch((Ot)=>{io??=Ot})}}).catch((de)=>{if(!C||e.signal.aborted||k()>=Date.parse(w.expires_at)||!tu(de,cr))throw de;return Object.assign(tn,{allowedTools:["bash","read","write","edit"]}),Qt(me,JSON.stringify(tn),{mode:384}),ro=!0,null});let Mr=Ao({configPath:me,root:Ve,grantedRoot:ve,workRoot:Ce,workspacePoolPath:en,temporaryDirectory:ee,path:ne.path,executablePath:a.executablePath,sourceEntrypoint:a.sourceEntrypoint}),un=Date.now(),fn,ao,pn=a.takePrespawnedWorker?.(Mr)??null;if(to=a.takePrespawnedWorker?pn!==null:void 0,Ze=pn??(a.spawnWorker??((de)=>wl(de.command,de.args,de.options)))(Mr),!pn)a.adoptSpawnedWorker?.(Ze);Ze.stderr?.on("data",Xl(Me,(de)=>{if(de.event==="hands.worker.connecting")fn??=de.timestampMs;else if(de.event==="hands.worker.open")ao??=de.timestampMs;if(l(JSON.stringify({...de,run_id:e.runId})),de.event==="hands.worker.permission_denied"&&typeof de.reason==="string"){let[ir,Ot]=de.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(ir??"")&&["bash","read","write","edit"].includes(Ot??""))N("permission.denied",{provenance:ir,operation:Ot}).catch(()=>{return})}}));let co=!1;Ze.on("error",()=>{co=!0}),Ze.once("exit",(de,ir)=>{try{l(JSON.stringify({event:"hands.worker.exited",run_id:e.runId,launchId:Me,exit_code:de,exit_signal:ir}))}catch{}}),ae=Ze,f("worker_ready_wait");let st=await Zl({path:De,launchId:Me,fenceId:rr,targetGeneration:w.target_generation,child:Ze,spawnFailed:()=>co,signal:e.signal,timeoutMs:a.readyTimeoutMs??Dl,now:k}),Ti=Date.now();if(or=()=>{if(!Ze||Ze.exitCode!==null||Ze.signalCode!==null)return null;let de=Gt(De,st);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:st.targetGeneration,fenceId:st.fenceId,executorLaunchId:Me,expiresAtMs:Date.parse(w.expires_at),readIdentity:or,workspace:Br,localGithubConfinement:e.localGithubConfinement===!0};if(tr)de.environment=tr;if(e.claimOwner&&e.deviceIdentity&&e.claimOwner.device_id===e.deviceIdentity.deviceId){let ir=[e.deviceIdentity.apiOrigin,w.relay_url];if(xr)ir.push(xr);de.previewAuthority={owner:Object.freeze({...e.claimOwner}),rootId:e.deviceIdentity.rootId,relayOrigin:new URL(w.relay_url).origin,deniedPorts:ni(ir)}}oo=Jo(de)}if(await new Promise((de)=>{setImmediate(de)}),vt)pi(Ce);let Rt;if(g&&tr){try{let de=tr.install(g);Rt={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:Rt!==void 0}))}catch{}}g=void 0;let lo=!1;if(e.headless){let de=Ul(Ve,D);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.");lo=de==="checked"}f("event_ready");let uo=A(Xe);uo.catch(()=>{return});let fo=Date.now();eo=!0,await N("hands.ready",{...Pr,expiry_diagnostic:R,startup_stages:{version:1,browser_resolution_ms:ar(u.get("browser_resolution"),u.get("path_resolution")),path_resolution_ms:ar(u.get("path_resolution"),u.get("workspace_setup")),workspace_setup_ms:ar(u.get("workspace_setup"),u.get("event_started")),repl_setup_ms:ar(u.get("worker_setup"),un),worker_boot_ms:ar(un,fn),worker_dial_ms:ar(fn,ao),worker_ready_ms:ar(un,Ti),started_event_ms:ar(u.get("event_started"),Ae),started_join_wait_ms:ar(u.get("event_ready"),fo),total_ms:ar(u.get("entered"),fo)},...ou(e.claimedAtMs,u.get("entered"),to),...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:st.generation,...Rt?{environment_installed:Rt}:{},...lo?{workspace_checked:!0}:{},...C&&!St?{browser_state:"unavailable",browser_reason_code:ro?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await uo,f("ready"),no=Xs({path:De,initial:st,signal:e.signal,isAlive:()=>Ze!==null&&Ze.exitCode===null&&Ze.signalCode===null&&k()<Date.parse(w.expires_at),publish:(de,ir)=>e.emitEvent("hands.reconnected",{...Pr,target_generation:de.targetGeneration,target_fence_id:de.fenceId,connection_generation:de.generation},ir),failed:()=>l(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:e.runId,executor_launch_id:Me}))});let po=await ru({child:Ze,signal:e.signal,expiresAt:Date.parse(w.expires_at),now:k});if(po==="cancelled"){let de=e.signal.reason instanceof r?e.signal.reason.code:"cancelled";throw Et=de,new r(de,"Reason Hands was cancelled.")}if(po==="exited")throw new r("hands_worker_exited","Reason Hands exited unexpectedly.");return Et="expired",{...Pr,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(Ae){so=Ae;let Xe=Ae instanceof r?Ae.code:"hands_failed",Ir=Xe==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(Xe);if(Et=Ir?Xe:"failed",!Ir)await ln("hands.failed",{...Pr,reason_code:Xe,...Xe==="hands_worker_exited"&&Ze?Ql(Ze):{}});throw Ae}finally{no?.stop(),oo?.();let Ae=Ze?await eu(Ze,a.stopTimeoutMs??Cl):null,Xe=!1;await e.desktopRecording?.close();try{await St?.stop()}catch{Xe=!0}if(await dn,(Ae==="stopped"||Ae==="already_exited"&&!eo)&&!Xe)await ln("hands.stopped",{...Pr,reason_code:Et});else if(Ae!==null||Xe){if(await ln("hands.failed",{...Pr,reason_code:Ae==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),so===null||Xe)throw new r("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(io!==null)throw new r("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(W){let q=Ds(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{
|
|
445
|
+
`;function pl(e=process.execPath,a=process.versions.bun){return a?"node":e}function Vn(e){try{il(e)}catch{}}function Jt(e,a){e.end(`${JSON.stringify(a)}
|
|
446
|
+
`)}function qn(e){return JSON.stringify(e)}function _l(e){let a=nl(Qs(ll(),"reason-node-repl-")),l=Qs(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 ${qn(k)})`).join(" ")})`,`(allow file-read* file-write* (subpath ${qn(e.workRoot)}) (subpath ${qn(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 bt(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 ti(e){if(e.executionMode!=="single-evaluation")throw Error(js);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,R="";l.stderr.setEncoding("utf8"),l.stderr.on("data",(Y)=>{R=`${R}${Y}`.slice(-16384)});let w=l.stdout,A,N=(Y,re,we)=>{if(we)Y.failure??=we;if(Y.finishing)return;Y.finishing=!0,k=!0,l.kill("SIGKILL"),bt(u).then(()=>{if(Y.failure)Y.reject(Y.failure);else Y.resolve(re??{})},(Ie)=>Y.reject(Ie))},D=()=>{if(k=!0,A)N(A,void 0,Error("hands_node_repl_state_lost"));else l.kill("SIGKILL")},S="";w?.setEncoding("utf8"),w?.on("data",(Y)=>{if(A?.finishing||k)return;if(S+=Y,S.length>ei){D();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=A;if(!Ie){D();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=R.trim(),we=Y??Error(re?`hands_node_repl_child_exited:${re}`:"hands_node_repl_child_exited");if(k=!0,A&&!A.finishing)N(A,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(D,Y.action==="probe"?1e4:Math.max(1,Math.min(e.evaluationTimeoutMs??Yn-1000,Yn-1000))),Z={action:Y.action,finishing:!1,resolve(be){if(A===Z)A=void 0;clearTimeout(Ie),re(be)},reject(be){if(A===Z)A=void 0;clearTimeout(Ie),we(be)}};A=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 bt(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 bt(u)}finally{await a.cleanup()}throw Y}let C=Promise.resolve(),z=new Set;Vn(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)D()}),Y.on("error",()=>Y.destroy()),Y.on("data",(Z)=>{if(we)return;if(re+=Z,re.length>ei){we=!0,Jt(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");Jt(Y,{ok:!0,output:W.output})}catch(ae){Ie=!1,Jt(Y,{ok:!1,error:ae instanceof Error?ae.message:String(ae),stack:ae instanceof Error?ae.stack:void 0})}}).catch((ae)=>{Jt(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 bt(u)}finally{await a.cleanup(),Vn(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}),D();try{await bt(u)}finally{await a.cleanup(),Vn(e.socketPath)}}}}var on=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var gi="/workspace",bi="/var/lib/reason/sessions",hl="/var/lib/reason/session-controls";function di(e){let a=`${bi}/`;if(!e.startsWith(a))return null;let l=e.slice(a.length);if(!on.test(l)||l!==l.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${hl}/${l}/job.env`}function gl(e){if(!on.test(e))throw Error("personal_computer_invalid_identity");return e.toLowerCase()}function Yt(e){let a=gl(e);return{runtimeRoot:`${bi}/${a}`,workspaceRoot:`${gi}/sessions/${a}`,sharedRoot:gi}}var wi="/root/.ara/cloud-browser/repl.sock";function Xn(e){return e==="compute"}function yi(e,a,l="linux"){if(e)Yt(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 Zn="browser_egress",vi=Zo,Dl=45000,Cl=bn+1500,Rr=/^[A-Za-z0-9._:-]{1,160}$/,Hl="/run/ara-hands";function Nl(e,a,l=Si()){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 sn(e=J(),a=Ns){return e&&a()?Fn:null}function ic(e=J(),a=process.platform,l=process.geteuid?.()){return a!=="linux"||l!==0||e!==null}function Co(e=process.platform,a=process.geteuid?.()){return e!=="linux"||a!==0}function Ll(e,a){if(!a&&(e??"linux")==="linux")return wi;return yi(a,void 0,e??"linux").socket}function Qr(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function Oi(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 pi extends r{expiryDiagnostic;constructor(e){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=e}}function Bl(e){return Qr(e)&&Object.keys(e).every((a)=>a==="source_path"||a==="branch")&&(e.source_path===void 0||Ne(e.source_path))&&typeof e.branch==="string"&&zn.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",kt,xt,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",E,Zn,Xr,pe,Le,xe]),k=Qr(e)?e:null,R=k?.[Zn],w=k?.[Xr],A=k?.[Le],N=R===void 0||(k?.[E]===Er||A===ct&&k?.[E]===void 0)&&Qr(R)&&Object.keys(R).every((Q)=>Q==="mode"||Q==="allowed_domains")&&R.mode==="enforce"&&Array.isArray(R.allowed_domains)&&R.allowed_domains.length<=256&&R.allowed_domains.every((Q)=>typeof Q==="string"&&In(Q));if(!Qr(e)||f.some((Q)=>!(Q in e))||Object.keys(e).some((Q)=>!g.has(Q))||!N||A!==void 0&&A!==ct||k?.[xe]!==void 0&&k[xe]!==Pt||k?.personal_workspace!==void 0&&(k.personal_workspace!==!0||k[E]!==Er)||k?.cloud_browser!==void 0&&(k.cloud_browser!==!0||k[E]!==Er)||k?.sandbox_provider!==void 0&&!Xn(k.sandbox_provider)||k?.sandbox_os!==void 0&&k.sandbox_os!=="linux"||w!==void 0&&(k?.[E]!==Yr||!Un(w))||E in e&&e[E]!==Er&&e[E]!==Yr&&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"||!Rr.test(e.session_id)||e.workspace_id!==void 0&&(typeof e.workspace_id!=="string"||!Rr.test(e.workspace_id))||e.legacy_workspace_id!==void 0&&(typeof e.legacy_workspace_id!=="string"||!Rr.test(e.legacy_workspace_id))||e[kt]!==void 0&&(e[kt]!==at||(E in e))||e[xt]!==void 0&&(e[xt]!==Oe||(E in e))||e[pe]!==void 0&&(typeof e[pe]!=="string"||!Rr.test(e[pe]))||typeof e.environment_id!=="string"||!Rr.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!==T||!Vs(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 D;try{D=new URL(e.relay_url)}catch{throw new r("invalid_hands_relay","Reason Hands relay URL is invalid.")}if((Oi(D.hostname)?D.protocol!=="ws:":D.protocol!=="wss:")||D.username||D.password||D.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(D.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>vi?"over_cap":"accepted",C={version:1,outcome:j,clock_source:a===void 0?"date_now":"injected",validation_now_ms:$r(u),expiry_ms:$r(M),remaining_ms:Number.isSafeInteger(M-u)?M-u:null,maximum_lifetime_ms:vi,cli_artifact:qs()};if(j!=="accepted")throw new pi(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}:{},...Xn(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:D.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[kt]===at?{[kt]:at}:{},...e[xt]===Oe?{[xt]:Oe}:{},...typeof e[pe]==="string"?{[pe]:e[pe]}:{},...e[Le]===ct?{[Le]:ct}:{},...e[xe]===Pt?{[xe]:Pt}:{},...typeof e.workspace_path==="string"?{workspace_path:e.workspace_path}:{},...Qr(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:T,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?{}:{[Xr]:w},...R===void 0?{}:{[Zn]:{mode:"enforce",allowed_domains:[...new Set(R.allowed_domains)].sort()}}}}function Ao(){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,R)=>k.group??R)).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=Ao();function Wl(e,a){tt(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 R=Ue(l,k);try{let A=ze(R);if(A.isSymbolicLink()||!A.isDirectory())throw u()}catch(A){if(!(A&&typeof A==="object"&&("code"in A)&&A.code==="ENOENT"))throw A;try{tt(R,{mode:448})}catch(N){if(!(N&&typeof N==="object"&&("code"in N)&&N.code==="EEXIST"))throw N}}let w=ze(R);if(w.isSymbolicLink()||!w.isDirectory()||Te(R)!==R)throw u();l=R}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,rt.O_RDONLY|rt.O_DIRECTORY|rt.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=Wc(),l,u,f){if(!Rr.test(e)||l!==void 0&&!Rr.test(l))throw new r("invalid_hands_workspace","Reason Hands run identity is invalid.");let g=nr(X({kind:"managed",workspaceId:e,...u?{base:u}:{},...f?{layout:f}:{}})),k=Wl(a,nr(g)),R=Ue(k,Al(g)),w=!1;try{let S=ze(R);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),nr(X({kind:"managed",workspaceId:e,...u?{base:u}:{}}))),M=ze(S);if(!M.isSymbolicLink()&&M.isDirectory()&&Te(S)===S)Xt(S,R),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(nr(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.");Xt(R,C)}try{Xt(j,R)}catch(z){if(C)Xt(C,R);throw z}w=!0}catch(M){if(M instanceof r||!(M&&typeof M==="object"&&("code"in M)&&M.code==="ENOENT"))throw M}}tt(R,{recursive:!0,mode:448}),wt(R,448);let A=Te(R);if(nr(A)!==k)throw new r("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let N=Ue(A,"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}tt(N,{recursive:!0,mode:448}),wt(N,448);let D=Te(N);if(nr(D)!==A)throw new r("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:A,repoPath:D}}function hi(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=Lr(e),!f.isDirectory())return"unready";vl(e,rt.R_OK|rt.W_OK|rt.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=nr(e);;g=nr(g)){let k;try{k=Lr(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===nr(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(!Rr.test(a))return null;let g,k;try{g=Te(e),k=nr(X({kind:"managed",workspaceId:a,...l?{base:l}:{},...f?{layout:f}:{}}))}catch{return null}let R=Ue(g,k),w=Vi(R)!==null,A=(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(nr(R)),C=ze(R)}catch{return null}if(j.isSymbolicLink()||!j.isDirectory()||j.uid===0||C.uid!==0)return null;N=j.uid}let D=g;for(let j of k.split("/")){let C=Ue(D,j),z=!1;try{let Q=ze(C);z=!Q.isSymbolicLink()&&Q.isDirectory()&&Te(C)===C}catch{}if(!z)throw A("This cloud Session's workspace root is missing or is not a real directory.");D=C}hi(R);let S;try{S=fi(R)}catch(j){if(j instanceof r)throw j;throw A("This cloud Session's workspace root changed while Reason Hands checked it.")}let M=null;try{M=Lr(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 fi(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(Yt(l.slice(l.lastIndexOf("/")+1)).runtimeRoot!==l)throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");let R=Te("/workspace"),w=Te(u);if(R!=="/workspace"||!Lr(w).isDirectory()||!w.startsWith("/workspace/"))throw new r("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:l,repoPath:w}}let g=Ls(l);if(g&&f.isSymbolicLink()){let R=Te(u);if(R!==Te(g)||!Lr(R).isDirectory())throw new r("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:l,repoPath:R}}if(f.isSymbolicLink()||!f.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let k=Te(u);if(nr(k)!==l)throw new r("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:l,repoPath:k}}function eo(e,a,l){if(a!==void 0&&!Ne(a))throw new r("invalid_hands_workspace",`Reason Hands ${l} is invalid.`);let u=Ei(e,a??".");if(!se(e,u))throw new r("invalid_hands_workspace",`Reason Hands ${l} escapes its granted root.`);return u}function xi(e,a,l){if(Zt(a)){let u=Te(l);return{anchor:u,target:Ei(u,a),boundary:Ue(u,Ke)}}return{anchor:e,target:eo(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)tt(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 Pi(e,a){let l=Te(eo(e,a.source_path,"repository"));if(!se(e,l)||!Lr(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(Qn(xi(f,a,u).target))return;return await Fs(Pi(f,l))??void 0}catch{return}}function Jl(e,a,l,u,f=Vl,g=s()){let k=Te(e),{target:R,boundary:w,anchor:A}=xi(k,a,g);if(l&&!Qn(R)){let S=Pi(k,l);Kl(A,nr(R));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",R,l.branch]):f([...M,"worktree","add","-b",l.branch,R]);if(!u&&j.status!==0&&/already exists/.test(j.stderr)&&!Qn(R))j=f([...M,"worktree","add",R,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(R)}catch{throw new r("workspace_folder_missing","This Session's folder no longer exists.")}let D=Te(R);if(N.isSymbolicLink()&&!se(w,D))throw new r("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!Lr(D).isDirectory()||!se(w,D))throw new r("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(L(D))throw new r("protected_path","Credential and secret folders are unavailable to Sessions.");return D}function Vl(e){let a=Zc();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 Ii(e){return di(e)??Vi(e)?.jobEnv??Ue(e,"job.env")}function ql(e,a){let l=Ii(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),wt(a,384)}function Yl(e){if(e.workspaceMode===_e&&e.workspacePath!==void 0){let k=e.home??s(),R=Jl(e.grantedRoot,e.workspacePath,e.workspaceWorktree,e.workspaceWorktreeStart,void 0,k);if(e.workspaceWorktree&&e.deviceId)Ks(k,e.workspacePath,e.deviceId);return{workRoot:R,repoPath:R,workspace:{kind:"root",path:e.workspacePath},jobEnvPath:Ue(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if(e.workspaceMode===Er)return{...fi(e.grantedRoot,e.personalWorkspace),workspace:{kind:"root"},jobEnvPath:Ue(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if(e.workspaceMode===Yr||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 R=Te(e.grantedRoot);return{workRoot:R,repoPath:R,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=Ge(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:nr(g.workRoot),managedWorkspace:!0}}function Po(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:[Ro,"ignore","pipe"]}}}var Ro=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((D)=>`hands.worker.${D}`)),R=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((D)=>["bash","read","write","edit"].map((S)=>`${D}:${S}`))]),w=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],A=["peerGeneration","socketState","closeCode"],N=new Set(["event","reason","launchId",...w,...A]);return(D)=>{for(let S of D.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)||!R.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)||A.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=Gt(e.path,{pid:e.child.pid??-1,launchId:e.launchId,workerVersion:U,protocolVersion:F,workerArtifactSha256:T,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:To[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 ki(u,a))return l()?"stopped":"unobserved";try{ur(e,"SIGKILL")}catch{}return await ki(u,a)?"forced":"unobserved"}async function ki(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=(R)=>{if(l)return;l=!0,clearTimeout(k),e.signal.removeEventListener("abort",f),e.child.off("exit",g),a(R)},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 Ai=lc();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 Qr(f)&&f.code==="ENOENT"}}function nu(e){return e.sandbox_provider==="compute"&&!e.cloud_browser&&e[E]===Er}function ou(e,a,l){return e===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:ar(e,a),...l===void 0?{}:{worker_prespawned:l}}}}function an(){Ai().catch(()=>{return}),Jr().catch(()=>{return})}async function et(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,R,w=jl(e.payload,a.now?.(),(W)=>{R=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 A=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)=>A(e.emitEvent(W,q));if(e.headless&&(w.cloud_browser===!0||e.managedBrowser!==void 0||w[Xr]!==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 D=J(),S=w[xe]===void 0?null:sn(D);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]===Yr,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[Xr]??"bash":null,Q=z?Ms(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?ba(e.runId):null,Z=null,be=null,ke,ae;try{f("browser_resolution");let W=e.headless&&a.browserExecutablePath===void 0?await Jr():null,q=j||w.cloud_browser?null:a.browserExecutablePath===void 0?e.headless?W?.status==="resolved"?W.executablePath:null:await Ts(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??Ai)()}catch{ne={path:Do(),source:"fallback"}}if(f("workspace_setup"),process.platform==="darwin"){let Ae=w[E]===_e&&w.workspace_path!==void 0?eo(e.root,w.workspace_worktree?w.workspace_worktree.source_path:w.workspace_path,"folder"):null;for(let Xe of new Set([e.root,...Ae?[Ae]:[]]))await os(Xe)}let le=w[E]===Er||w[E]===Yr?Nl(process.platform,a.sandboxRuntimeRoot):null,fe=e.headless&&e.runtimeDirectory?e.runtimeDirectory:le?le.temporaryRoot:Si();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)tt(fe,{recursive:!0,mode:457}),wt(fe,457);Z="temporary_directory";let ee=Te(xl(Ue(fe,"reason-hands-session-")));be=ee,wt(ee,le?.sessionMode??448);let me=Ue(ee,"hands-config.json"),De=Ue(ee,"hands-ready.json"),Me=bl(),rr=w.target_fence_id;if(e.workspaceGrant){Z="workspace_grant",f("workspace_grant_wait");let Ae=e.workspaceGrant;await new Promise((Xe,Ir)=>{let Mr=()=>Ir(new r("cancelled","Reason Hands was cancelled."));if(e.signal.aborted){Mr();return}e.signal.addEventListener("abort",Mr,{once:!0}),Ae.then(Xe,Ir).finally(()=>e.signal.removeEventListener("abort",Mr))})}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:Ve,jobEnvPath:_r,workspacePoolPath:en,managedWorkspace:wr,workspace:Br,cloudSessionRoot:vt}=Yl({grantedRoot:ve,personalWorkspace:w.personal_workspace===!0,runId:e.runId,workspaceId:w.workspace_id,legacyWorkspaceId:w.legacy_workspace_id,workspaceBase:w[kt],workspaceLayout:w[xt],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(Uc(Ce))throw new r("folder_is_filesystem_root",`${zc(Ce)}.`);let Or="ara_device_wss";Z="jobs";let qe=e.headless&&e.runtimeDirectory?$t({runtimeDirectory:e.runtimeDirectory,root:ve,runId:e.runId,folders:[Ce,Ve]}):void 0;ke=qe?.disposeSocket;let lr=qe?Ko(qe):null;if(lr)try{l(JSON.stringify({event:"hands.journal_owner_retired",run_id:e.runId,reason:lr.reason,prior_executor_launch_id:lr.executorLaunchId}))}catch{}if(qe&&[Ce,Ve].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 jr=w.personal_workspace?Ce.slice(Ce.lastIndexOf("/")+1):void 0;if(jr&&jr!==w.workspace_id)throw new r("invalid_hands_workspace","Personal session identity does not match its Device grant.");Z="browser_socket";let cr=w.cloud_browser?Ll(w.sandbox_os,jr):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${Me}`:Ue(qe?qe.launchDirectory:ee,"repl.sock");Z="relay_url";let fr=Oi(new URL(w.relay_url).hostname),xr=Or==="ara_device_wss"&&!fr?(a.loadProxy??Se)()?.url:void 0,or;Z="environment_owner";let tr=e.headless&&e.deviceIdentity&&w.environment_binding?ai(ee,{runId:e.runId,...e.deviceIdentity,binding:w.environment_binding,expiresAtMs:Date.parse(w.expires_at),identity:()=>or?.()??null}):void 0;Z="job_environment";let ot=!tr&&Br.kind==="managed"&&wr?Ue(Ce,"job.env"):null;if(ot)try{Qt(ot,"",{mode:384,flag:"wx"})}catch(Ae){if(!(Ae instanceof Error&&("code"in Ae)&&Ae.code==="EEXIST"))throw Ae}let tn={url:w.relay_url,transport:Or,...xr===void 0?{}:{proxyUrl:xr},...e.localGithubConfinement?{localGithubConfinement:!0}:{},...w[Le]&&tr?{gitCredentialEnvironment:!0}:{},workerVersion:U,protocolVersion:F,workerArtifactSha256:T,workerEntrypoint:H,...process.platform==="win32"?{bashExecutable:Ye()}:{},targetGeneration:w.target_generation,fenceId:rr,workRoot:Ce,workspaceAliasPath:Ce,jobEnvPath:_r,...tr?{environmentSnapshotPath:tr.path,...e.hostExecution?{executionEnvironment:ci()}:{},environmentExpectedBinding:{runId:e.runId,...e.deviceIdentity,binding:w.environment_binding}}:ot?{jobEnvSourcePath:ot,workspacePoolPath:nr(Ce)}:wr?{}:{jobEnvSourcePath:Ii(Ce)},repoPath:Ve,replSocketPath:cr,...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&&D?{jobsUser:{...D,...S!==null?{modelGid:S}:{}}}:{},...e.managedPty&&qe&&tr?{managedPty:{version:1,...e.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:li()}:{}}}:{},...C&&!q?{allowedTools:["bash","read","write","edit"]}:j?{allowedTools:z==="bash"?["bash"]:["bash","repl"]}:{}};if(tr||wr&&!ot)Qt(_r,"",{mode:384});else ql(Ce,_r);Z="config_write",Qt(me,JSON.stringify(tn),{mode:384}),Z=null;let Pr={session_id:w.session_id,environment_id:w.environment_id,hands_protocol_version:F,hands_worker_version:U,hands_worker_artifact_sha256:T,hands_worker_entrypoint:H,target_generation:w.target_generation,target_fence_id:w.target_fence_id,executor_launch_id:Me},St=null,ro=!1,to=!1,no,Ze=null,oo,so,Et="failed",io=null,dn=Promise.resolve(),ao=null,un=async(Ae,Xe)=>{try{await N(Ae,Xe)}catch{}};try{f("event_started");let Ae,Xe=(async()=>{await e.emitEvent("hands.started",{...Pr,policy_mode:"full_access",policy_version:1,path_source:ne.source}),Ae=Date.now()})();Xe.catch(()=>{return}),f("worker_setup");let Ir=w.browser_egress?{mode:"enforce",allowedDomains:w.browser_egress.allowed_domains}:{mode:"off"};if(z&&z!=="bash")St=await(a.startNodeRepl??ti)({socketPath:cr,workRoot:Ce});else if(!j&&!w.cloud_browser&&q)St=await(a.startRepl??Ds)({socketPath:cr,browserExecutablePath:q,workspaceRoot:Ve,...e.managedBrowser?{managedBrowser:e.managedBrowser}:{},...e.desktopRecording?{recording:e.desktopRecording}:{},networkPolicy:Ir,onEgressDenied:(de)=>{let ir=Bs(de.host);l(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:ir,reason:de.reason,run_id:e.runId})),dn=dn.then(()=>N("hands.browser_egress_denied",{destination_id:ir,reason:de.reason})).catch((Ot)=>{ao??=Ot})}}).catch((de)=>{if(!C||e.signal.aborted||k()>=Date.parse(w.expires_at)||!tu(de,cr))throw de;return Object.assign(tn,{allowedTools:["bash","read","write","edit"]}),Qt(me,JSON.stringify(tn),{mode:384}),to=!0,null});let Mr=Po({configPath:me,root:Ve,grantedRoot:ve,workRoot:Ce,workspacePoolPath:en,temporaryDirectory:ee,path:ne.path,executablePath:a.executablePath,sourceEntrypoint:a.sourceEntrypoint}),fn=Date.now(),pn,co,_n=a.takePrespawnedWorker?.(Mr)??null;if(no=a.takePrespawnedWorker?_n!==null:void 0,Ze=_n??(a.spawnWorker??((de)=>wl(de.command,de.args,de.options)))(Mr),!_n)a.adoptSpawnedWorker?.(Ze);Ze.stderr?.on("data",Xl(Me,(de)=>{if(de.event==="hands.worker.connecting")pn??=de.timestampMs;else if(de.event==="hands.worker.open")co??=de.timestampMs;if(l(JSON.stringify({...de,run_id:e.runId})),de.event==="hands.worker.permission_denied"&&typeof de.reason==="string"){let[ir,Ot]=de.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(ir??"")&&["bash","read","write","edit"].includes(Ot??""))N("permission.denied",{provenance:ir,operation:Ot}).catch(()=>{return})}}));let lo=!1;Ze.on("error",()=>{lo=!0}),Ze.once("exit",(de,ir)=>{try{l(JSON.stringify({event:"hands.worker.exited",run_id:e.runId,launchId:Me,exit_code:de,exit_signal:ir}))}catch{}}),ae=Ze,f("worker_ready_wait");let st=await Zl({path:De,launchId:Me,fenceId:rr,targetGeneration:w.target_generation,child:Ze,spawnFailed:()=>lo,signal:e.signal,timeoutMs:a.readyTimeoutMs??Dl,now:k}),Di=Date.now();if(or=()=>{if(!Ze||Ze.exitCode!==null||Ze.signalCode!==null)return null;let de=Gt(De,st);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:st.targetGeneration,fenceId:st.fenceId,executorLaunchId:Me,expiresAtMs:Date.parse(w.expires_at),readIdentity:or,workspace:Br,localGithubConfinement:e.localGithubConfinement===!0};if(tr)de.environment=tr;if(e.claimOwner&&e.deviceIdentity&&e.claimOwner.device_id===e.deviceIdentity.deviceId){let ir=[e.deviceIdentity.apiOrigin,w.relay_url];if(xr)ir.push(xr);de.previewAuthority={owner:Object.freeze({...e.claimOwner}),rootId:e.deviceIdentity.rootId,relayOrigin:new URL(w.relay_url).origin,deniedPorts:ii(ir)}}so=Go(de)}if(await new Promise((de)=>{setImmediate(de)}),vt)hi(Ce);let Rt;if(g&&tr){try{let de=tr.install(g);Rt={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:Rt!==void 0}))}catch{}}g=void 0;let uo=!1;if(e.headless){let de=Ul(Ve,D);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.");uo=de==="checked"}f("event_ready");let fo=A(Xe);fo.catch(()=>{return});let po=Date.now();ro=!0,await N("hands.ready",{...Pr,expiry_diagnostic:R,startup_stages:{version:1,browser_resolution_ms:ar(u.get("browser_resolution"),u.get("path_resolution")),path_resolution_ms:ar(u.get("path_resolution"),u.get("workspace_setup")),workspace_setup_ms:ar(u.get("workspace_setup"),u.get("event_started")),repl_setup_ms:ar(u.get("worker_setup"),fn),worker_boot_ms:ar(fn,pn),worker_dial_ms:ar(pn,co),worker_ready_ms:ar(fn,Di),started_event_ms:ar(u.get("event_started"),Ae),started_join_wait_ms:ar(u.get("event_ready"),po),total_ms:ar(u.get("entered"),po)},...ou(e.claimedAtMs,u.get("entered"),no),...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:st.generation,...Rt?{environment_installed:Rt}:{},...uo?{workspace_checked:!0}:{},...C&&!St?{browser_state:"unavailable",browser_reason_code:to?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await fo,f("ready"),oo=Zs({path:De,initial:st,signal:e.signal,isAlive:()=>Ze!==null&&Ze.exitCode===null&&Ze.signalCode===null&&k()<Date.parse(w.expires_at),publish:(de,ir)=>e.emitEvent("hands.reconnected",{...Pr,target_generation:de.targetGeneration,target_fence_id:de.fenceId,connection_generation:de.generation},ir),failed:()=>l(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:e.runId,executor_launch_id:Me}))});let _o=await ru({child:Ze,signal:e.signal,expiresAt:Date.parse(w.expires_at),now:k});if(_o==="cancelled"){let de=e.signal.reason instanceof r?e.signal.reason.code:"cancelled";throw Et=de,new r(de,"Reason Hands was cancelled.")}if(_o==="exited")throw new r("hands_worker_exited","Reason Hands exited unexpectedly.");return Et="expired",{...Pr,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(Ae){io=Ae;let Xe=Ae instanceof r?Ae.code:"hands_failed",Ir=Xe==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(Xe);if(Et=Ir?Xe:"failed",!Ir)await un("hands.failed",{...Pr,reason_code:Xe,...Xe==="hands_worker_exited"&&Ze?Ql(Ze):{}});throw Ae}finally{oo?.stop(),so?.();let Ae=Ze?await eu(Ze,a.stopTimeoutMs??Cl):null,Xe=!1;await e.desktopRecording?.close();try{await St?.stop()}catch{Xe=!0}if(await dn,(Ae==="stopped"||Ae==="already_exited"&&!ro)&&!Xe)await un("hands.stopped",{...Pr,reason_code:Et});else if(Ae!==null||Xe){if(await un("hands.failed",{...Pr,reason_code:Ae==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),io===null||Xe)throw new r("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(ao!==null)throw new r("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(W){let q=Cs(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{ri,ni,K,qa,Wa,oe,x,p,vo,ge,se,O,ii,Va,$t,Ga,Qe,Ka,Ja,rn,Xa,oi,Ya,So,Za,E,_e,Qa,ec,tc,si,ai,nn,pt,ci,li,rc,Eo,ko,ui,nc,Mt,xo,on,di,Pe,J,sn,ic,Co,pi,Ao,hi,fi,Po,Ro,ur,an,et};
|