@reason-machines/cli-linux-x64 0.2.565 → 0.2.566

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.
Files changed (44) hide show
  1. package/bin/reason +1 -1
  2. package/bin/vm-hands/{agent-network-mnv1fm1c.js → agent-network-pak3wvrv.js} +1 -1
  3. package/bin/vm-hands/{api-credentials-082cnpn9.js → api-credentials-a433ykxs.js} +1 -1
  4. package/bin/vm-hands/{api-sq672f51.js → api-kex52g1d.js} +1 -1
  5. package/bin/vm-hands/{ask-relay-v5btnjvb.js → ask-relay-gk4ks8mg.js} +2 -2
  6. package/bin/vm-hands/connect-cli-afdc1h11.js +2 -0
  7. package/bin/vm-hands/{desktop-components-099xyxmz.js → desktop-components-y89gpa6e.js} +1 -1
  8. package/bin/vm-hands/{local-automation-7pjd5nc1.js → local-automation-1s7035zm.js} +1 -1
  9. package/bin/vm-hands/{local-capabilities-ha0ey4zh.js → local-capabilities-h1hxzrhn.js} +1 -1
  10. package/bin/vm-hands/{local-display-session-0mkswxgk.js → local-display-session-0vw1x2k6.js} +1 -1
  11. package/bin/vm-hands/local-display-video-k4bgptc7.js +2 -0
  12. package/bin/vm-hands/{local-managed-process-ahr2jync.js → local-managed-process-b79p5wwv.js} +1 -1
  13. package/bin/vm-hands/{managed-runtime-shzb3tr3.js → managed-runtime-9jfx2885.js} +1 -1
  14. package/bin/vm-hands/{network-auto-update-3m94436w.js → network-auto-update-qwds22kt.js} +2 -2
  15. package/bin/vm-hands/{network-sign-in-xm79s170.js → network-sign-in-kqdg70kc.js} +1 -1
  16. package/bin/vm-hands/{permissions-scffy1px.js → permissions-q9nfdxrh.js} +1 -1
  17. package/bin/vm-hands/{serve-service-grp91ybk.js → serve-service-hcc0zvg8.js} +1 -1
  18. package/bin/vm-hands/{status-89999mdn.js → status-q55nprve.js} +3 -3
  19. package/bin/vm-hands/{version-wyshazh7.js → version-7q2ft41r.js} +1 -1
  20. package/bin/vm-hands/{vm-hands-entry-lite-1eyg750p.js → vm-hands-entry-lite-2gxv7v1h.js} +1 -1
  21. package/bin/vm-hands/{vm-hands-entry-lite-ncyrz48z.js → vm-hands-entry-lite-30z7wsqr.js} +2 -2
  22. package/bin/vm-hands/{vm-hands-entry-lite-6vnjgy77.js → vm-hands-entry-lite-50kqbrb7.js} +1 -1
  23. package/bin/vm-hands/{vm-hands-entry-lite-bsk184m7.js → vm-hands-entry-lite-5qrft0nw.js} +1 -1
  24. package/bin/vm-hands/{vm-hands-entry-lite-ngn4tafr.js → vm-hands-entry-lite-6adz91f3.js} +2 -2
  25. package/bin/vm-hands/{vm-hands-entry-lite-pt19vacn.js → vm-hands-entry-lite-72084j3g.js} +1 -1
  26. package/bin/vm-hands/{vm-hands-entry-lite-rqfhfp09.js → vm-hands-entry-lite-72h3t64b.js} +1 -1
  27. package/bin/vm-hands/{vm-hands-entry-lite-sz7z1qby.js → vm-hands-entry-lite-994kah8n.js} +1 -1
  28. package/bin/vm-hands/{vm-hands-entry-lite-dy204qh4.js → vm-hands-entry-lite-9wp7ahwa.js} +1 -1
  29. package/bin/vm-hands/{vm-hands-entry-lite-tnj3483k.js → vm-hands-entry-lite-a8z57vry.js} +1 -1
  30. package/bin/vm-hands/{vm-hands-entry-lite-t43bz0ey.js → vm-hands-entry-lite-b2w5071h.js} +2 -2
  31. package/bin/vm-hands/{vm-hands-entry-lite-t86kt9jz.js → vm-hands-entry-lite-bkhc5mt4.js} +1 -1
  32. package/bin/vm-hands/{vm-hands-entry-lite-1xhpn3hw.js → vm-hands-entry-lite-ezhfkjqr.js} +1 -1
  33. package/bin/vm-hands/{vm-hands-entry-lite-gcqqnnze.js → vm-hands-entry-lite-fs6jbfp3.js} +1 -1
  34. package/bin/vm-hands/{vm-hands-entry-lite-34b4tws6.js → vm-hands-entry-lite-p02vay5n.js} +4 -4
  35. package/bin/vm-hands/{vm-hands-entry-lite-7r27208j.js → vm-hands-entry-lite-rz1ep81m.js} +1 -1
  36. package/bin/vm-hands/{vm-hands-entry-lite-af45ma9p.js → vm-hands-entry-lite-ttfqxjms.js} +1 -1
  37. package/bin/vm-hands/{vm-hands-entry-lite-432khjd5.js → vm-hands-entry-lite-x6ybft9v.js} +1 -1
  38. package/bin/vm-hands/vm-hands-entry-lite.js +1 -1
  39. package/bin/vm-hands/{vm-hands-executor-kyb5t371.js → vm-hands-executor-r6v6tzqj.js} +1 -1
  40. package/bin/vm-hands/{vm-hands-op-runner-gkt79hcp.js → vm-hands-op-runner-wcbc42nw.js} +1 -1
  41. package/bin/vm-hands/{vm-hands-runtime-tdr6j55n.js → vm-hands-runtime-2t08ywa4.js} +3 -3
  42. package/package.json +1 -1
  43. package/bin/vm-hands/connect-cli-rxb3qtra.js +0 -2
  44. package/bin/vm-hands/local-display-video-c3fk87c5.js +0 -2
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{rr,Br,Hn,Gi,Fr,jr,da,Ki,pa,ha,Hr}from"./vm-hands-entry-lite-gxf2r5en.js";import{Ct,Bn,bs,Or,Vc,Je,Gc,Kc,Qt,Xe,M,At,Es,Fn,ks,Lr,Ps,Rs,Ts,Is,Ds,Os,Ns,Ls,$s,Ms,Bs,Fs,js,ct,Le,Pt,xe,Hs,Us,zs,qs,Ws,Vs,Gs,Ks,$r,Js,Mr,Ys,Vi,Zs,Qs,ea,ta,ra,na,ia,oa,sa,aa,ca,la,ua}from"./vm-hands-entry-lite-fxptf351.js";import{at,Oe,X,te}from"./vm-hands-entry-lite-kbnxk71q.js";import{F,_n}from"./vm-hands-entry-lite-zp7chzcc.js";import{ni,Wa,Va,Qe,Ga,Ka,rn,Ja,Xa,Ya,oi,ai,ci,So,Eo,li,rc,ko,ui,Pe,J,sn,di,hi,et}from"./vm-hands-entry-lite-gcqqnnze.js";import{U,H,T}from"./vm-hands-entry-lite-qjrgvdbj.js";import{Ba,Fa,_o,Ha,yo,Ua,lr,Qn}from"./vm-hands-entry-lite-bsk184m7.js";import{ue}from"./vm-hands-entry-lite-cc8hwgxc.js";import{je}from"./vm-hands-entry-lite-s93f3pbv.js";import{Se}from"./vm-hands-entry-lite-xfak34av.js";import{Xn,Yn,$a}from"./vm-hands-entry-lite-ngry8nkq.js";import{Pc,Rc,Ar,Tc,Ic,Dc,Oc,Nc,Lc,$c}from"./vm-hands-entry-lite-13nx02p7.js";import{yi,pn,wi,Bo,Fo}from"./vm-hands-entry-lite-3q2ng4e9.js";import{un,jt,dn}from"./vm-hands-entry-lite-432khjd5.js";import{A,Qo}from"./vm-hands-entry-lite-6vnjgy77.js";import{xc,Cc}from"./vm-hands-entry-lite-t43bz0ey.js";import{vr}from"./vm-hands-entry-lite-chq0qx9f.js";import{Xo}from"./vm-hands-entry-lite-1eyg750p.js";import{hr,$o}from"./vm-hands-entry-lite-1xhpn3hw.js";import{tt,sc,ac}from"./vm-hands-entry-lite-b1vanmtv.js";import{ln}from"./vm-hands-entry-lite-q62g6sx0.js";import{q}from"./vm-hands-entry-lite-a6ss0ges.js";import{vt,Rn,Tn,In,L}from"./vm-hands-entry-lite-fccn6s4j.js";import{s,Ge}from"./vm-hands-entry-lite-12ck5swp.js";import{t,V,o,_,d,n,we,P,$e,c,i,Yc}from"./vm-hands-entry-lite-zpvr7wc6.js";import{Y,Me,Dt,Be,Yi}from"./vm-hands-entry-lite-pg7nnyc6.js";import{Ot}from"./vm-hands-entry-lite-wnqqjsew.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{request as lc}from"http";import{request as cc}from"https";import{lookup as uc}from"dns/promises";import{isIP as dc}from"net";async function pc(e){let a=new URL(e.url);return await new Promise((l,u)=>{let p=(a.protocol==="https:"?cc:lc)(a,{method:"POST",headers:{...e.headers,"accept-encoding":"identity"},signal:e.signal,timeout:da},(m)=>l({response:m,close:()=>{m.destroy(),p.destroy(),m.socket?.destroy()}}));p.once("error",u),p.once("timeout",()=>p.destroy(Object.assign(Error("custom_endpoint_timeout"),{code:"ETIMEDOUT"}))),p.end(e.body)})}var fi=new Set(["ENOTFOUND","EAI_AGAIN","EAI_NONAME","EAI_NODATA","EAI_FAIL","DNSException"]),mc=new Set(["ECONNREFUSED","ETIMEDOUT","ECONNRESET","EHOSTUNREACH","ENETUNREACH","EHOSTDOWN","ENETDOWN","EPIPE","ECONNABORTED","EADDRNOTAVAIL","ConnectionRefused","ConnectionClosed","ConnectionTimedOut","Timeout"]);function gi(e,a=0){if(!e||typeof e!=="object"||a>3)return null;let l=e.code;if(typeof l==="string"){if(fi.has(l))return"custom_endpoint_host_not_found";if(mc.has(l))return"custom_endpoint_connection_failed";if(/^(?:ERR_TLS_|ERR_SSL_|CERT_|UNABLE_TO_(?:GET|VERIFY|DECRYPT)|DEPTH_ZERO_SELF_SIGNED|SELF_SIGNED_CERT|HOSTNAME_MISMATCH|EPROTO$)/.test(l))return"custom_endpoint_tls_failed"}for(let u of[...e instanceof AggregateError?e.errors:[],e.cause]){let p=gi(u,a+1);if(p)return p}return null}async function fc(e,a){let l=gi(e),u=new URL(a).hostname.replace(/^\[|\]$/g,"");if(l!==null&&l!=="custom_endpoint_connection_failed"||dc(u)!==0)return l;let p;return await Promise.race([uc(u).then(()=>!0,(f)=>!fi.has(String(f?.code))),new Promise((f)=>{p=setTimeout(()=>f(!0),5000)})]).finally(()=>clearTimeout(p))?l:"custom_endpoint_host_not_found"}function hc(e){for(let a=42;;a++){if(a===127)a=256;let l=String.fromCodePoint(a);if(!e.includes(l))return l}}function gc(e,a){let l=Buffer.from(e),u=Buffer.from(a),p=new Uint32Array(l.length);for(let f=1,g=0;f<l.length;f++){while(g&&l[f]!==l[g])g=p[g-1];if(l[f]===l[g])g++;p[f]=g}let m=0;return(f,g=!1)=>{let b=Buffer.allocUnsafe(f.length*u.length+m),y=0;for(let h of f){while(m&&l[m]!==h){let w=p[m-1];y+=l.copy(b,y,0,m-w),m=w}if(l[m]===h){if(m++,m===l.length)y+=u.copy(b,y),m=0}else b[y++]=h}if(g)y+=l.copy(b,y,0,m),m=0;return b.subarray(0,y)}}async function _i(e){e.signal.throwIfAborted();let a=pa.safeParse(e.payload);if(!a.success)throw new r("custom_endpoint_invalid_request","Invalid local model request.");let l=a.data,u=ha.parse(await e.credential(e.signal));if(!Ki(l,{baseUrl:l.baseUrl,api:u.api,execution:"device"}))throw new r("custom_endpoint_invalid_request","The request does not match the configured API.");e.signal.throwIfAborted();let p,m,f=0,g=0,b=0,y=hc(u.apiKey),h=gc(u.apiKey,y),w=async(v,R)=>{e.signal.throwIfAborted(),await new Promise((I,x)=>{let E=()=>{e.signal.removeEventListener("abort",E),x(e.signal.reason)};if(e.signal.addEventListener("abort",E,{once:!0}),e.signal.aborted){E();return}Promise.resolve().then(()=>(e.signal.throwIfAborted(),e.emit(v,R))).then(()=>{e.signal.removeEventListener("abort",E),I()},(O)=>{e.signal.removeEventListener("abort",E),x(O)})})},S=async(v)=>{if(f+=v.length,f>Hn)throw new r("custom_endpoint_response_too_large","Local model response exceeds the transport limit.");for(let R=0;R<v.length;R+=Br){if(b>=Gi)throw new r("custom_endpoint_response_too_large","Local model response exceeds the chunk limit.");await w(`custom_endpoint.chunk.${b++}`,{eof:!1,data:v.subarray(R,R+Br).toString("base64")})}};try{let v=await pc({url:l.url,body:l.body,signal:e.signal,headers:{...l.headers,...u.api==="anthropic-messages"?{"x-api-key":u.apiKey}:{authorization:`Bearer ${u.apiKey}`}}});p=v.response,m=v.close;let R=p.statusCode??500;if(R>=300&&R<400)throw new r("custom_endpoint_redirect_refused","Local model redirects are not followed.");if(p.headers["content-encoding"]&&p.headers["content-encoding"]!=="identity")throw new r("custom_endpoint_encoding_unsupported","The local server must honor identity encoding.");let I={};for(let x of["content-type","retry-after","x-request-id","request-id"]){let E=p.headers[x];if(typeof E==="string")I[x]=E.replaceAll(u.apiKey,y).slice(0,4096)}await w("custom_endpoint.headers",{status:R,statusText:(p.statusMessage??"").replaceAll(u.apiKey,y).slice(0,256),headers:I});for await(let x of p){e.signal.throwIfAborted();let E=Buffer.isBuffer(x)?x:Buffer.from(x);if(g+=E.length,g>Hn)throw new r("custom_endpoint_response_too_large","Local model response exceeds the transport limit.");await S(h(E))}return await S(h(Buffer.alloc(0),!0)),await w(`custom_endpoint.chunk.${b}`,{eof:!0}),{bytes:f,chunks:b}}catch(v){if(e.signal.throwIfAborted(),v instanceof r)throw v;throw new r((p?null:await fc(v,l.url))??"custom_endpoint_request_failed","The local model server could not complete the request.")}finally{m?.()}}import{join as bi}from"path";function _c(e,a){return e===bi(a,".ara","workspace")||e===bi(a,".reason","workspace")}function Si(e,a){let l=e.filter((u)=>_c(u.path,a));return l.length===1?l[0].path:null}var yc=/^[a-f0-9]{64}$/;var Yr=32,bc=/^\/[^\x00-\x1f\x7f\\]*$/;function tr(e){if(typeof e!=="string"||e.length>4096||!bc.test(e))return!1;if(e==="/")return!0;return e.split("/").slice(1).every((a)=>a!==""&&a!=="."&&a!=="..")}function nr(e,a){let l=a==="win32"?/^([A-Za-z]):[\\/]*(.*)$/.exec(e):null;if(!l)return e;let u=l[2].split(/[\\/]+/).filter(Boolean).join("/");return`/${l[1].toUpperCase()}:${u?`/${u}`:""}`}function ir(e){if(!e||typeof e!=="object"||Array.isArray(e))return;let a=e;if(!tr(a.home)||!Array.isArray(a.roots)||a.roots.length>Yr)return;let l=[];for(let u of a.roots){if(!u||typeof u!=="object"||Array.isArray(u))return;let{path_fingerprint:p,path:m}=u;if(typeof p!=="string"||!yc.test(p)||!tr(m))return;l.push({path_fingerprint:p,path:m})}return{home:a.home,roots:l}}function wc(e){let a=/^Reason contributor (rc_[0-9a-f]{32})$/.exec(e.name)?.[1];return e.email.toLowerCase()==="343777287+reason-contributors@users.noreply.github.com"&&a?a:void 0}function Sc(e){return wc(e)??e.email.toLowerCase()}function Kr(e){let a=/^Co-authored-by:\s*([^<>\r\n]+) <([^<>\s]+)>$/i.exec(e.trim());return a?Sc({name:a[1],email:a[2]}):e.trim().toLowerCase()}var Lt=(e)=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/[a-z]/gi,(a)=>`[${a.toLowerCase()}${a.toUpperCase()}]`),vc=[...vt.map((e)=>`/(${e.map(Lt).join("/")})(/|$)`),...Rn.map((e)=>`/(${e.map(Lt).join("/")})(/|$)`),...[...Tn].map((e)=>`/(${Lt(e)})$`),`/${Lt(".env.")}[^/]*$`,...In.map((e)=>`/[^/]*${Lt(e)}$`)],vi=`function localGithubSandboxProfile(root, temporary) {
2
+ import{rr,Br,Hn,Gi,Fr,jr,da,Ki,pa,ha,Hr}from"./vm-hands-entry-lite-gxf2r5en.js";import{Ct,Bn,bs,Or,Vc,Je,Gc,Kc,Qt,Xe,M,At,Es,Fn,ks,Lr,Ps,Rs,Ts,Is,Ds,Os,Ns,Ls,$s,Ms,Bs,Fs,js,ct,Le,Pt,xe,Hs,Us,zs,qs,Ws,Vs,Gs,Ks,$r,Js,Mr,Ys,Vi,Zs,Qs,ea,ta,ra,na,ia,oa,sa,aa,ca,la,ua}from"./vm-hands-entry-lite-fxptf351.js";import{at,Oe,X,te}from"./vm-hands-entry-lite-kbnxk71q.js";import{F,_n}from"./vm-hands-entry-lite-zp7chzcc.js";import{ni,Wa,Va,Qe,Ga,Ka,rn,Ja,Xa,Ya,oi,ai,ci,So,Eo,li,rc,ko,ui,Pe,J,sn,di,hi,et}from"./vm-hands-entry-lite-fs6jbfp3.js";import{U,H,T}from"./vm-hands-entry-lite-qjrgvdbj.js";import{Ba,Fa,_o,Ha,yo,Ua,lr,Qn}from"./vm-hands-entry-lite-5qrft0nw.js";import{ue}from"./vm-hands-entry-lite-cc8hwgxc.js";import{je}from"./vm-hands-entry-lite-s93f3pbv.js";import{Se}from"./vm-hands-entry-lite-xfak34av.js";import{Xn,Yn,$a}from"./vm-hands-entry-lite-ngry8nkq.js";import{Pc,Rc,Ar,Tc,Ic,Dc,Oc,Nc,Lc,$c}from"./vm-hands-entry-lite-13nx02p7.js";import{yi,pn,wi,Bo,Fo}from"./vm-hands-entry-lite-3q2ng4e9.js";import{un,jt,dn}from"./vm-hands-entry-lite-x6ybft9v.js";import{A,Qo}from"./vm-hands-entry-lite-50kqbrb7.js";import{xc,Cc}from"./vm-hands-entry-lite-b2w5071h.js";import{vr}from"./vm-hands-entry-lite-chq0qx9f.js";import{Xo}from"./vm-hands-entry-lite-2gxv7v1h.js";import{hr,$o}from"./vm-hands-entry-lite-ezhfkjqr.js";import{tt,sc,ac}from"./vm-hands-entry-lite-b1vanmtv.js";import{ln}from"./vm-hands-entry-lite-q62g6sx0.js";import{q}from"./vm-hands-entry-lite-a6ss0ges.js";import{vt,Rn,Tn,In,L}from"./vm-hands-entry-lite-fccn6s4j.js";import{s,Ge}from"./vm-hands-entry-lite-12ck5swp.js";import{t,V,o,_,d,n,we,P,$e,c,i,Yc}from"./vm-hands-entry-lite-zpvr7wc6.js";import{Y,Me,Dt,Be,Yi}from"./vm-hands-entry-lite-pg7nnyc6.js";import{Ot}from"./vm-hands-entry-lite-wnqqjsew.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{request as lc}from"http";import{request as cc}from"https";import{lookup as uc}from"dns/promises";import{isIP as dc}from"net";async function pc(e){let a=new URL(e.url);return await new Promise((l,u)=>{let p=(a.protocol==="https:"?cc:lc)(a,{method:"POST",headers:{...e.headers,"accept-encoding":"identity"},signal:e.signal,timeout:da},(m)=>l({response:m,close:()=>{m.destroy(),p.destroy(),m.socket?.destroy()}}));p.once("error",u),p.once("timeout",()=>p.destroy(Object.assign(Error("custom_endpoint_timeout"),{code:"ETIMEDOUT"}))),p.end(e.body)})}var fi=new Set(["ENOTFOUND","EAI_AGAIN","EAI_NONAME","EAI_NODATA","EAI_FAIL","DNSException"]),mc=new Set(["ECONNREFUSED","ETIMEDOUT","ECONNRESET","EHOSTUNREACH","ENETUNREACH","EHOSTDOWN","ENETDOWN","EPIPE","ECONNABORTED","EADDRNOTAVAIL","ConnectionRefused","ConnectionClosed","ConnectionTimedOut","Timeout"]);function gi(e,a=0){if(!e||typeof e!=="object"||a>3)return null;let l=e.code;if(typeof l==="string"){if(fi.has(l))return"custom_endpoint_host_not_found";if(mc.has(l))return"custom_endpoint_connection_failed";if(/^(?:ERR_TLS_|ERR_SSL_|CERT_|UNABLE_TO_(?:GET|VERIFY|DECRYPT)|DEPTH_ZERO_SELF_SIGNED|SELF_SIGNED_CERT|HOSTNAME_MISMATCH|EPROTO$)/.test(l))return"custom_endpoint_tls_failed"}for(let u of[...e instanceof AggregateError?e.errors:[],e.cause]){let p=gi(u,a+1);if(p)return p}return null}async function fc(e,a){let l=gi(e),u=new URL(a).hostname.replace(/^\[|\]$/g,"");if(l!==null&&l!=="custom_endpoint_connection_failed"||dc(u)!==0)return l;let p;return await Promise.race([uc(u).then(()=>!0,(f)=>!fi.has(String(f?.code))),new Promise((f)=>{p=setTimeout(()=>f(!0),5000)})]).finally(()=>clearTimeout(p))?l:"custom_endpoint_host_not_found"}function hc(e){for(let a=42;;a++){if(a===127)a=256;let l=String.fromCodePoint(a);if(!e.includes(l))return l}}function gc(e,a){let l=Buffer.from(e),u=Buffer.from(a),p=new Uint32Array(l.length);for(let f=1,g=0;f<l.length;f++){while(g&&l[f]!==l[g])g=p[g-1];if(l[f]===l[g])g++;p[f]=g}let m=0;return(f,g=!1)=>{let b=Buffer.allocUnsafe(f.length*u.length+m),y=0;for(let h of f){while(m&&l[m]!==h){let w=p[m-1];y+=l.copy(b,y,0,m-w),m=w}if(l[m]===h){if(m++,m===l.length)y+=u.copy(b,y),m=0}else b[y++]=h}if(g)y+=l.copy(b,y,0,m),m=0;return b.subarray(0,y)}}async function _i(e){e.signal.throwIfAborted();let a=pa.safeParse(e.payload);if(!a.success)throw new r("custom_endpoint_invalid_request","Invalid local model request.");let l=a.data,u=ha.parse(await e.credential(e.signal));if(!Ki(l,{baseUrl:l.baseUrl,api:u.api,execution:"device"}))throw new r("custom_endpoint_invalid_request","The request does not match the configured API.");e.signal.throwIfAborted();let p,m,f=0,g=0,b=0,y=hc(u.apiKey),h=gc(u.apiKey,y),w=async(v,R)=>{e.signal.throwIfAborted(),await new Promise((I,x)=>{let E=()=>{e.signal.removeEventListener("abort",E),x(e.signal.reason)};if(e.signal.addEventListener("abort",E,{once:!0}),e.signal.aborted){E();return}Promise.resolve().then(()=>(e.signal.throwIfAborted(),e.emit(v,R))).then(()=>{e.signal.removeEventListener("abort",E),I()},(O)=>{e.signal.removeEventListener("abort",E),x(O)})})},S=async(v)=>{if(f+=v.length,f>Hn)throw new r("custom_endpoint_response_too_large","Local model response exceeds the transport limit.");for(let R=0;R<v.length;R+=Br){if(b>=Gi)throw new r("custom_endpoint_response_too_large","Local model response exceeds the chunk limit.");await w(`custom_endpoint.chunk.${b++}`,{eof:!1,data:v.subarray(R,R+Br).toString("base64")})}};try{let v=await pc({url:l.url,body:l.body,signal:e.signal,headers:{...l.headers,...u.api==="anthropic-messages"?{"x-api-key":u.apiKey}:{authorization:`Bearer ${u.apiKey}`}}});p=v.response,m=v.close;let R=p.statusCode??500;if(R>=300&&R<400)throw new r("custom_endpoint_redirect_refused","Local model redirects are not followed.");if(p.headers["content-encoding"]&&p.headers["content-encoding"]!=="identity")throw new r("custom_endpoint_encoding_unsupported","The local server must honor identity encoding.");let I={};for(let x of["content-type","retry-after","x-request-id","request-id"]){let E=p.headers[x];if(typeof E==="string")I[x]=E.replaceAll(u.apiKey,y).slice(0,4096)}await w("custom_endpoint.headers",{status:R,statusText:(p.statusMessage??"").replaceAll(u.apiKey,y).slice(0,256),headers:I});for await(let x of p){e.signal.throwIfAborted();let E=Buffer.isBuffer(x)?x:Buffer.from(x);if(g+=E.length,g>Hn)throw new r("custom_endpoint_response_too_large","Local model response exceeds the transport limit.");await S(h(E))}return await S(h(Buffer.alloc(0),!0)),await w(`custom_endpoint.chunk.${b}`,{eof:!0}),{bytes:f,chunks:b}}catch(v){if(e.signal.throwIfAborted(),v instanceof r)throw v;throw new r((p?null:await fc(v,l.url))??"custom_endpoint_request_failed","The local model server could not complete the request.")}finally{m?.()}}import{join as bi}from"path";function _c(e,a){return e===bi(a,".ara","workspace")||e===bi(a,".reason","workspace")}function Si(e,a){let l=e.filter((u)=>_c(u.path,a));return l.length===1?l[0].path:null}var yc=/^[a-f0-9]{64}$/;var Yr=32,bc=/^\/[^\x00-\x1f\x7f\\]*$/;function tr(e){if(typeof e!=="string"||e.length>4096||!bc.test(e))return!1;if(e==="/")return!0;return e.split("/").slice(1).every((a)=>a!==""&&a!=="."&&a!=="..")}function nr(e,a){let l=a==="win32"?/^([A-Za-z]):[\\/]*(.*)$/.exec(e):null;if(!l)return e;let u=l[2].split(/[\\/]+/).filter(Boolean).join("/");return`/${l[1].toUpperCase()}:${u?`/${u}`:""}`}function ir(e){if(!e||typeof e!=="object"||Array.isArray(e))return;let a=e;if(!tr(a.home)||!Array.isArray(a.roots)||a.roots.length>Yr)return;let l=[];for(let u of a.roots){if(!u||typeof u!=="object"||Array.isArray(u))return;let{path_fingerprint:p,path:m}=u;if(typeof p!=="string"||!yc.test(p)||!tr(m))return;l.push({path_fingerprint:p,path:m})}return{home:a.home,roots:l}}function wc(e){let a=/^Reason contributor (rc_[0-9a-f]{32})$/.exec(e.name)?.[1];return e.email.toLowerCase()==="343777287+reason-contributors@users.noreply.github.com"&&a?a:void 0}function Sc(e){return wc(e)??e.email.toLowerCase()}function Kr(e){let a=/^Co-authored-by:\s*([^<>\r\n]+) <([^<>\s]+)>$/i.exec(e.trim());return a?Sc({name:a[1],email:a[2]}):e.trim().toLowerCase()}var Lt=(e)=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/[a-z]/gi,(a)=>`[${a.toLowerCase()}${a.toUpperCase()}]`),vc=[...vt.map((e)=>`/(${e.map(Lt).join("/")})(/|$)`),...Rn.map((e)=>`/(${e.map(Lt).join("/")})(/|$)`),...[...Tn].map((e)=>`/(${Lt(e)})$`),`/${Lt(".env.")}[^/]*$`,...In.map((e)=>`/[^/]*${Lt(e)}$`)],vi=`function localGithubSandboxProfile(root, temporary) {
3
3
  return ['(version 1)','(deny default)','(import "system.sb")','(allow process-exec process-fork)',
4
4
  '(allow file-read* (subpath "/bin") (subpath "/sbin") (subpath "/usr/bin") (subpath "/usr/sbin") (subpath "/usr/libexec") (subpath "/usr/share") (subpath "/private/var/select") (literal "/private/var/db/xcode_select_link"))',
5
5
  '(allow file-read-metadata (path-ancestors "/opt/homebrew/bin") (path-ancestors "/usr/local/bin") (path-ancestors "/Library/Developer/CommandLineTools"))',
@@ -1,3 +1,3 @@
1
1
  // @bun
2
- import{$n}from"./vm-hands-entry-lite-sz7z1qby.js";var g=$n.version,Ir=`reason-cli/${g}`,Hc=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function Il(r,c){if(!Hc.test(r)||!Hc.test(c))throw Error("cannot compare invalid CLI versions");let f=(t)=>{let e=t.indexOf("-");return e===-1?[t,void 0]:[t.slice(0,e),t.slice(e+1)]},[h,i]=f(r),[x,s]=f(c),u=h.split(".").map(BigInt),d=x.split(".").map(BigInt);for(let t=0;t<3;t+=1){if(u[t]===d[t])continue;return u[t]<d[t]?-1:1}if(i===void 0||s===void 0){if(i===s)return 0;return i===void 0?1:-1}let l=i.split("."),a=s.split("."),C=Math.max(l.length,a.length);for(let t=0;t<C;t+=1){let e=l[t],n=a[t];if(e===void 0||n===void 0){if(e===n)return 0;return e===void 0?-1:1}if(e===n)continue;let o=/^\d+$/.test(e),p=/^\d+$/.test(n);if(o&&p){let I=BigInt(e),m=BigInt(n);if(I===m)continue;return I<m?-1:1}if(o!==p)return o?-1:1;return e<n?-1:1}return 0}function ys(r=Bun.main){return r.startsWith("/$bunfs/")||/^B:[\\/]~BUN[\\/]/i.test(r)}
2
+ import{$n}from"./vm-hands-entry-lite-994kah8n.js";var g=$n.version,Ir=`reason-cli/${g}`,Hc=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function Il(r,c){if(!Hc.test(r)||!Hc.test(c))throw Error("cannot compare invalid CLI versions");let f=(t)=>{let e=t.indexOf("-");return e===-1?[t,void 0]:[t.slice(0,e),t.slice(e+1)]},[h,i]=f(r),[x,s]=f(c),u=h.split(".").map(BigInt),d=x.split(".").map(BigInt);for(let t=0;t<3;t+=1){if(u[t]===d[t])continue;return u[t]<d[t]?-1:1}if(i===void 0||s===void 0){if(i===s)return 0;return i===void 0?1:-1}let l=i.split("."),a=s.split("."),C=Math.max(l.length,a.length);for(let t=0;t<C;t+=1){let e=l[t],n=a[t];if(e===void 0||n===void 0){if(e===n)return 0;return e===void 0?-1:1}if(e===n)continue;let o=/^\d+$/.test(e),p=/^\d+$/.test(n);if(o&&p){let I=BigInt(e),m=BigInt(n);if(I===m)continue;return I<m?-1:1}if(o!==p)return o?-1:1;return e<n?-1:1}return 0}function ys(r=Bun.main){return r.startsWith("/$bunfs/")||/^B:[\\/]~BUN[\\/]/i.test(r)}
3
3
  export{g,Ir,Hc,Il,ys};
@@ -1,3 +1,3 @@
1
1
  // @bun
2
- var $n={name:"github-native-engineer-device-worker-production",version:"0.2.565",private:!0,type:"module",engines:{node:">=22",bun:">=1.3.0"},workspaces:["../../packages/runtime-distribution"],dependencies:{"@agentclientprotocol/sdk":"1.9.0","@anthropic-ai/sandbox-runtime":"^0.0.80","@earendil-works/pi-tui":"1.0.0","@reason/runtime-distribution":"workspace:*",diff:"8.0.4","open-browser-use-sdk":"0.1.42","playwright-core":"1.60.0",toml:"5.0.1",zod:"^4.4.3"},overrides:{"@hono/node-server":"^1.19.15","@earendil-works/pi-agent-core":"1.0.0","@earendil-works/pi-ai":"1.0.0","@earendil-works/pi-coding-agent":"1.0.0","@earendil-works/chord":"1.0.0","@earendil-works/pi-codemode":"1.0.0","@earendil-works/pi-mcp":"1.0.0","@earendil-works/pi-telemetry":"1.0.0","@earendil-works/pi-tui":"1.0.0","brace-expansion":"2.1.7",axios:"^1.20.0","basic-ftp":"^6.2.1","@grpc/grpc-js":"^1.14.5",browserslist:"^4.28.8","engine.io":"^6.6.7","fast-uri":"^3.1.8",hono:"^4.13.7","ip-address":"^10.7.4",nanoid:"^3.3.18",dompurify:"^3.4.17",postcss:"^8.5.23",qs:"^6.16.0","shell-quote":"^1.11.0","socket.io-parser":"^4.2.7",tmp:"^0.2.7",toml:"^5.0.1",undici:"^8.10.2",ws:"^8.21.0","js-yaml":"^4.3.2","@modelcontextprotocol/sdk":"^1.31.0","proxy-addr":"^2.0.8","source-map-js":"^1.2.2"}};
2
+ var $n={name:"github-native-engineer-device-worker-production",version:"0.2.566",private:!0,type:"module",engines:{node:">=22",bun:">=1.3.0"},workspaces:["../../packages/runtime-distribution"],dependencies:{"@agentclientprotocol/sdk":"1.9.0","@anthropic-ai/sandbox-runtime":"^0.0.80","@earendil-works/pi-tui":"1.0.0","@reason/runtime-distribution":"workspace:*",diff:"8.0.4","open-browser-use-sdk":"0.1.42","playwright-core":"1.60.0",toml:"5.0.1",zod:"^4.4.3"},overrides:{"@hono/node-server":"^1.19.15","@earendil-works/pi-agent-core":"1.0.0","@earendil-works/pi-ai":"1.0.0","@earendil-works/pi-coding-agent":"1.0.0","@earendil-works/chord":"1.0.0","@earendil-works/pi-codemode":"1.0.0","@earendil-works/pi-mcp":"1.0.0","@earendil-works/pi-telemetry":"1.0.0","@earendil-works/pi-tui":"1.0.0","brace-expansion":"2.1.7",axios:"^1.20.0","basic-ftp":"^6.2.1","@grpc/grpc-js":"^1.14.5",browserslist:"^4.28.8","engine.io":"^6.6.7","fast-uri":"^3.1.8",hono:"^4.13.7","ip-address":"^10.7.4",nanoid:"^3.3.18",dompurify:"^3.4.17",postcss:"^8.5.23",qs:"^6.16.0","shell-quote":"^1.11.0","socket.io-parser":"^4.2.7",tmp:"^0.2.7",toml:"^5.0.1",undici:"^8.10.2",ws:"^8.21.0","js-yaml":"^4.3.2","@modelcontextprotocol/sdk":"^1.31.0","proxy-addr":"^2.0.8","source-map-js":"^1.2.2"}};
3
3
  export{$n};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{R}from"./vm-hands-entry-lite-z65xva21.js";import{Fi,ji,St,Yt,ms,gs}from"./vm-hands-entry-lite-t86kt9jz.js";import{uc,dc}from"./vm-hands-entry-lite-q62g6sx0.js";import{Ti,Ii,bn,yr,l,mc,Di,gc,vn,Gt,Sn}from"./vm-hands-entry-lite-1b21avcs.js";import{s}from"./vm-hands-entry-lite-12ck5swp.js";import{G}from"./vm-hands-entry-lite-pg7nnyc6.js";import{randomUUID as L}from"crypto";import{chmodSync as Z,closeSync as J,constants as C,existsSync as S,fstatSync as ke,lstatSync as h,mkdirSync as q,openSync as Ie,readFileSync as K,readdirSync as re,readlinkSync as w,realpathSync as x,renameSync as k,rmSync as T,statSync as V,symlinkSync as Q,unlinkSync as p,writeFileSync as U}from"fs";import{basename as H,dirname as E,isAbsolute as je,join as m,relative as We,resolve as M,sep as me}from"path";import{spawnSync as ee}from"child_process";import{createRequire as Te}from"module";var ae=1,xe=1,Xe=128,Qe=65536,Qc="https://reasonmachines.com/api/runtime-manifest-v2",et=30000,tt=600000,Ee=1e4,nt=60000,rt=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;var Me=/^[a-z0-9_.-]{1,80}$/,it=64,at="so.ara.device-broker",Pe=[at,"com.reasonmachines.device-broker"],Ln=ji(Pe),we=["com.apple.security.cs.allow-jit","com.apple.security.cs.allow-unsigned-executable-memory"],ot=["service.install_started","service.install_completed","service.install_failed","service.launcher_adopted","service.launcher_conflict","service.started","service.reconnecting","service.reconnected","service.idle_sleep_held","service.idle_sleep_released","service.idle_sleep_failed","service.start_failed","service.stopped","service.exit_failed","service.singleton_rejected","credential.migration_started","credential.migration_completed","credential.migration_failed","credential.store_started","credential.store_completed","credential.store_failed","credential.delete_started","credential.delete_completed","credential.delete_failed","update.check_started","update.not_available","update.download_started","update.downloaded","update.verified","update.activated","update.rollback","update.failed","executor.update.check_started","executor.update.not_available","executor.update.download_started","executor.update.downloaded","executor.update.verified","executor.update.activated","executor.update.rollback","executor.update.failed","identity.refresh_completed","identity.refresh_failed","update.device_moved","update.components_installed","update.deferred","update.deferral_expired","worker.previous_exit","worker.capabilities_withheld","identity.computer_use_unavailable"];function W(e){if(e?.aborted)throw new l("update_cancelled","Managed runtime update request was cancelled.")}function fe(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function ge(e,t,n=[]){let r=new Set([...t,...n]);return t.every((i)=>(i in e))&&Object.keys(e).every((i)=>r.has(i))}function b(e){return typeof e==="string"&&rt.test(e)}function De(e){return typeof e==="string"&&!Number.isNaN(Date.parse(e))&&new Date(e).toISOString()===e}function st(e){return yr.includes(e)}function P(e){q(e,{recursive:!0,mode:448}),Z(e,448)}function Oe(e,t){P(E(e));let n=`${e}.${process.pid}.${L()}.tmp`;try{U(n,t,{mode:384,flag:"wx"}),Z(n,384),k(n,e)}finally{if(S(n))p(n)}}function Lt(e={}){if((e.platform??process.platform)!=="darwin")throw new l("unsupported_platform","The managed Reason runtime is currently available only on macOS.");let n=e.environment??process.env,r=R(n,"REASON_CLI_CHANNEL")==="staging",i=r?R(n,"REASON_MANAGED_RUNTIME_ROOT")?.trim():void 0,o=e.root!==void 0||Boolean(i&&je(i))?null:m(e.home??s(),"Library","Application Support"),c=e.root??(o?m(o,r?"Reason Staging":"Reason","CLI"):i);return{executableName:"reason",root:c,...o?{legacyRoot:m(o,"Ara",...r?["staging","runtime"]:["runtime"])}:{},versions:m(c,"versions"),current:m(c,"current"),previous:m(c,"previous"),brokerLock:m(c,"broker.lock"),transitionLock:m(c,"transition.lock"),lifecycleEvents:m(c,"lifecycle-events")}}function bl(e){let t=e.legacyRoot;if(!t)return null;return{root:t,versions:m(t,"versions"),current:m(t,"current"),previous:m(t,"previous"),brokerLock:m(t,"broker.lock"),transitionLock:m(t,"transition.lock"),lifecycleEvents:m(t,"lifecycle-events")}}function F(e,t){if(!b(t))throw new l("invalid_version","Invalid managed Reason runtime version.");let n=m(e.versions,t,"ara");if(!e.executableName)return n;let r=m(e.versions,t,e.executableName),i=(c)=>{try{return h(c),!0}catch(d){if(d.code==="ENOENT")return!1;throw d}},a=i(n),o=i(r);if(a&&o)throw new l("installed_artifact_mismatch","Ambiguous managed runtime executable layout.");return a?n:r}function oe(e,t){if(!b(t))throw new l("invalid_version","Invalid managed Reason runtime version.");return _e(F(e,t))}function _e(e){return m(E(e),H(e)==="reason"?Ii:Ti)}function Ce(e,t){if(!b(e)||!b(t))throw new l("invalid_version","Invalid managed Reason runtime version.");let[n,r]=e.split("-",2),[i,a]=t.split("-",2),o=n.split(".").map(Number),c=i.split(".").map(Number);for(let _=0;_<3;_+=1){let g=o[_]-c[_];if(g!==0)return g<0?-1:1}if(r===void 0||a===void 0){if(r===a)return 0;return r===void 0?1:-1}let d=r.split("."),u=a.split("."),f=Math.max(d.length,u.length);for(let _=0;_<f;_+=1){let g=d[_],y=u[_];if(g===void 0||y===void 0){if(g===y)return 0;return g===void 0?-1:1}if(g===y)continue;let v=/^\d+$/.test(g),A=/^\d+$/.test(y);if(v&&A)return Number(g)<Number(y)?-1:1;if(v!==A)return v?-1:1;return g<y?-1:1}return 0}function ct(e=process.arch){let t=`darwin-${e}`;if(!st(t))throw new l("unsupported_architecture","The managed Reason runtime supports only Apple Silicon and Intel Macs.");return t}function Re(e){return[...e.matchAll(/<key>\s*([^<]+?)\s*<\/key>/g)].map((t)=>t[1].trim())}function pe(e){let t=e.match(/^CodeDirectory .*$/gm)??[];return t.length>0&&t.every((n)=>(/ flags=0x[0-9a-f]+\(([^)]*)\)(?: |$)/.exec(n)?.[1]?.split(/[ ,]+/).filter(Boolean)??[]).includes("runtime"))}function lt(e){let t=`TeamIdentifier=${Fi}`,n=Pe.map((a)=>`Identifier=${a}`),r=Re(e.brokerEntitlements),i=Re(e.credentialLibraryEntitlements);if(!e.brokerDetail.split(`
2
+ import{R}from"./vm-hands-entry-lite-z65xva21.js";import{Fi,ji,St,Yt,ms,gs}from"./vm-hands-entry-lite-bkhc5mt4.js";import{uc,dc}from"./vm-hands-entry-lite-q62g6sx0.js";import{Ti,Ii,bn,yr,l,mc,Di,gc,vn,Gt,Sn}from"./vm-hands-entry-lite-1b21avcs.js";import{s}from"./vm-hands-entry-lite-12ck5swp.js";import{G}from"./vm-hands-entry-lite-pg7nnyc6.js";import{randomUUID as L}from"crypto";import{chmodSync as Z,closeSync as J,constants as C,existsSync as S,fstatSync as ke,lstatSync as h,mkdirSync as q,openSync as Ie,readFileSync as K,readdirSync as re,readlinkSync as w,realpathSync as x,renameSync as k,rmSync as T,statSync as V,symlinkSync as Q,unlinkSync as p,writeFileSync as U}from"fs";import{basename as H,dirname as E,isAbsolute as je,join as m,relative as We,resolve as M,sep as me}from"path";import{spawnSync as ee}from"child_process";import{createRequire as Te}from"module";var ae=1,xe=1,Xe=128,Qe=65536,Qc="https://reasonmachines.com/api/runtime-manifest-v2",et=30000,tt=600000,Ee=1e4,nt=60000,rt=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;var Me=/^[a-z0-9_.-]{1,80}$/,it=64,at="so.ara.device-broker",Pe=[at,"com.reasonmachines.device-broker"],Ln=ji(Pe),we=["com.apple.security.cs.allow-jit","com.apple.security.cs.allow-unsigned-executable-memory"],ot=["service.install_started","service.install_completed","service.install_failed","service.launcher_adopted","service.launcher_conflict","service.started","service.reconnecting","service.reconnected","service.idle_sleep_held","service.idle_sleep_released","service.idle_sleep_failed","service.start_failed","service.stopped","service.exit_failed","service.singleton_rejected","credential.migration_started","credential.migration_completed","credential.migration_failed","credential.store_started","credential.store_completed","credential.store_failed","credential.delete_started","credential.delete_completed","credential.delete_failed","update.check_started","update.not_available","update.download_started","update.downloaded","update.verified","update.activated","update.rollback","update.failed","executor.update.check_started","executor.update.not_available","executor.update.download_started","executor.update.downloaded","executor.update.verified","executor.update.activated","executor.update.rollback","executor.update.failed","identity.refresh_completed","identity.refresh_failed","update.device_moved","update.components_installed","update.deferred","update.deferral_expired","worker.previous_exit","worker.capabilities_withheld","identity.computer_use_unavailable"];function W(e){if(e?.aborted)throw new l("update_cancelled","Managed runtime update request was cancelled.")}function fe(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function ge(e,t,n=[]){let r=new Set([...t,...n]);return t.every((i)=>(i in e))&&Object.keys(e).every((i)=>r.has(i))}function b(e){return typeof e==="string"&&rt.test(e)}function De(e){return typeof e==="string"&&!Number.isNaN(Date.parse(e))&&new Date(e).toISOString()===e}function st(e){return yr.includes(e)}function P(e){q(e,{recursive:!0,mode:448}),Z(e,448)}function Oe(e,t){P(E(e));let n=`${e}.${process.pid}.${L()}.tmp`;try{U(n,t,{mode:384,flag:"wx"}),Z(n,384),k(n,e)}finally{if(S(n))p(n)}}function Lt(e={}){if((e.platform??process.platform)!=="darwin")throw new l("unsupported_platform","The managed Reason runtime is currently available only on macOS.");let n=e.environment??process.env,r=R(n,"REASON_CLI_CHANNEL")==="staging",i=r?R(n,"REASON_MANAGED_RUNTIME_ROOT")?.trim():void 0,o=e.root!==void 0||Boolean(i&&je(i))?null:m(e.home??s(),"Library","Application Support"),c=e.root??(o?m(o,r?"Reason Staging":"Reason","CLI"):i);return{executableName:"reason",root:c,...o?{legacyRoot:m(o,"Ara",...r?["staging","runtime"]:["runtime"])}:{},versions:m(c,"versions"),current:m(c,"current"),previous:m(c,"previous"),brokerLock:m(c,"broker.lock"),transitionLock:m(c,"transition.lock"),lifecycleEvents:m(c,"lifecycle-events")}}function bl(e){let t=e.legacyRoot;if(!t)return null;return{root:t,versions:m(t,"versions"),current:m(t,"current"),previous:m(t,"previous"),brokerLock:m(t,"broker.lock"),transitionLock:m(t,"transition.lock"),lifecycleEvents:m(t,"lifecycle-events")}}function F(e,t){if(!b(t))throw new l("invalid_version","Invalid managed Reason runtime version.");let n=m(e.versions,t,"ara");if(!e.executableName)return n;let r=m(e.versions,t,e.executableName),i=(c)=>{try{return h(c),!0}catch(d){if(d.code==="ENOENT")return!1;throw d}},a=i(n),o=i(r);if(a&&o)throw new l("installed_artifact_mismatch","Ambiguous managed runtime executable layout.");return a?n:r}function oe(e,t){if(!b(t))throw new l("invalid_version","Invalid managed Reason runtime version.");return _e(F(e,t))}function _e(e){return m(E(e),H(e)==="reason"?Ii:Ti)}function Ce(e,t){if(!b(e)||!b(t))throw new l("invalid_version","Invalid managed Reason runtime version.");let[n,r]=e.split("-",2),[i,a]=t.split("-",2),o=n.split(".").map(Number),c=i.split(".").map(Number);for(let _=0;_<3;_+=1){let g=o[_]-c[_];if(g!==0)return g<0?-1:1}if(r===void 0||a===void 0){if(r===a)return 0;return r===void 0?1:-1}let d=r.split("."),u=a.split("."),f=Math.max(d.length,u.length);for(let _=0;_<f;_+=1){let g=d[_],y=u[_];if(g===void 0||y===void 0){if(g===y)return 0;return g===void 0?-1:1}if(g===y)continue;let v=/^\d+$/.test(g),A=/^\d+$/.test(y);if(v&&A)return Number(g)<Number(y)?-1:1;if(v!==A)return v?-1:1;return g<y?-1:1}return 0}function ct(e=process.arch){let t=`darwin-${e}`;if(!st(t))throw new l("unsupported_architecture","The managed Reason runtime supports only Apple Silicon and Intel Macs.");return t}function Re(e){return[...e.matchAll(/<key>\s*([^<]+?)\s*<\/key>/g)].map((t)=>t[1].trim())}function pe(e){let t=e.match(/^CodeDirectory .*$/gm)??[];return t.length>0&&t.every((n)=>(/ flags=0x[0-9a-f]+\(([^)]*)\)(?: |$)/.exec(n)?.[1]?.split(/[ ,]+/).filter(Boolean)??[]).includes("runtime"))}function lt(e){let t=`TeamIdentifier=${Fi}`,n=Pe.map((a)=>`Identifier=${a}`),r=Re(e.brokerEntitlements),i=Re(e.credentialLibraryEntitlements);if(!e.brokerDetail.split(`
3
3
  `).includes(t)||!e.brokerDetail.split(`
4
4
  `).some((a)=>n.includes(a))||!pe(e.brokerDetail)||r.length!==we.length||we.some((a)=>!new RegExp(`<key>\\s*${a.replaceAll(".","\\.")}\\s*</key>\\s*<true\\s*/>`).test(e.brokerEntitlements)))throw new l("invalid_code_signature","Managed runtime broker has an invalid Reason signature, identifier, or entitlement set.");if(!e.credentialLibraryDetail.split(`
5
5
  `).includes(t)||!pe(e.credentialLibraryDetail)||i.length!==0)throw new l("invalid_code_signature","Managed runtime credential library has an invalid signature or entitlement.")}function D(e,t){let n=ee("/usr/bin/codesign",e,{stdio:["ignore","pipe","pipe"]});if(n.status!==0)throw new l("invalid_code_signature",t);return[new TextDecoder().decode(n.stdout??new Uint8Array),new TextDecoder().decode(n.stderr??new Uint8Array)].join("")}var ye=(e,t)=>{D(["--verify","--strict","--verbose=2",e],"Managed runtime broker code signature is invalid."),D(["--verify","--strict","--verbose=2",t],"Managed runtime credential library code signature is invalid."),lt({brokerDetail:D(["-d","--verbose=4",e],"Managed runtime broker signer could not be inspected."),brokerEntitlements:D(["-d","--entitlements",":-",e],"Managed runtime broker entitlements could not be inspected."),credentialLibraryDetail:D(["-d","--verbose=4",t],"Managed runtime credential library signer could not be inspected."),credentialLibraryEntitlements:D(["-d","--entitlements",":-",t],"Managed runtime credential library entitlements could not be inspected.")})};async function dt(e,t,n){let r=e.headers.get("content-length");if(r!==null){let f=Number(r);if(!Number.isSafeInteger(f)||f<0||f>t)throw new l("response_too_large","Managed runtime response exceeded its size limit.")}if(!e.body){let f=new Uint8Array(await e.arrayBuffer());if(f.byteLength>t)throw new l("response_too_large","Managed runtime response exceeded its size limit.");return f}let i=e.body.getReader(),a=[],o=0,c=()=>{if(!n)return i.read();return new Promise((f,_)=>{let g=()=>{n.removeEventListener("abort",g),i.cancel(n.reason).catch(()=>{}),_(n.reason??new DOMException("Aborted","AbortError"))};if(n.aborted){g();return}n.addEventListener("abort",g,{once:!0}),i.read().then((y)=>{n.removeEventListener("abort",g),f(y)},(y)=>{n.removeEventListener("abort",g),_(y)})})};try{while(!0){let f=await c();if(f.done)break;if(o+=f.value.byteLength,o>t)throw await i.cancel(),new l("response_too_large","Managed runtime response exceeded its size limit.");a.push(f.value)}}finally{try{i.releaseLock()}catch{}}let d=new Uint8Array(o),u=0;for(let f of a)d.set(f,u),u+=f.byteLength;return d}async function Yr(e){let t;try{t=new URL(e.url)}catch{throw new l("invalid_update_url","Managed runtime update URL is invalid.")}if(t.protocol!=="https:"||t.username||t.password||t.hash)throw new l("invalid_update_url","Managed runtime update URL must use HTTPS.");let n=new AbortController,r,i=()=>{r??="caller",n.abort(e.signal?.reason)};if(e.signal?.aborted)i();else e.signal?.addEventListener("abort",i,{once:!0});let a=setTimeout(()=>{r??="timeout",n.abort(Error("managed runtime fetch timed out"))},e.timeoutMs),o=(c,d)=>{if(c instanceof l)return c;if(r==="caller")return new l("update_cancelled","Managed runtime update request was cancelled.");if(r==="timeout")return new l("update_fetch_timeout","Managed runtime update request timed out.");return new l("update_fetch_failed",d)};try{let c;try{if(c=await e.fetchImpl(t,{headers:{accept:e.accept},signal:n.signal}),n.signal.aborted)throw o(n.signal.reason,"Managed runtime update request was cancelled.")}catch(d){throw o(d,"Managed runtime update request failed.")}if(!c.ok)throw new l("update_http_error","Managed runtime update request was rejected.");if(c.url&&new URL(c.url).protocol!=="https:")throw new l("insecure_redirect","Managed runtime update redirected to an insecure URL.");try{let d=await dt(c,e.maximumBytes,n.signal);if(n.signal.aborted)throw o(n.signal.reason,"Managed runtime update response was cancelled.");return d}catch(d){throw o(d,"Managed runtime update response failed.")}}finally{clearTimeout(a),e.signal?.removeEventListener("abort",i)}}async function Ve(e,t,n=Ee,r){let i=typeof n==="number"?n:Ee,a=typeof n==="number"?r:n;if(a?.aborted)return!1;let o=await uc([e,"--version"],{timeoutMs:i,...a?{signal:a}:{}});return o.exitCode===0&&o.stdout.trim().replace(/^v/,"")===t}async function ut(e){let t=!1,n=null,r=null,i=(a)=>{try{N(e.paths,a,{now:e.now})}catch{}};try{let a=e.home??s();if(!ms(e.manifest.version,a))return{status:"current"};r=Yt(a);let o=await Yr({url:new URL(mc,e.manifest.artifacts[e.target].broker.url).toString(),maximumBytes:bn,fetchImpl:async(g,y)=>{let v=await e.fetchImpl(g,y);return t=v.status===404,v},timeoutMs:e.timeoutMs,accept:"application/json",signal:e.signal}),{manifest:c}=gc(new TextDecoder().decode(o),e.trustedKeys);if(c.version!==e.manifest.version||c.published_at!==e.manifest.published_at)throw new l("identity_manifest_mismatch","Background identity manifest names another release.");let d=c.artifacts[e.target],u=await Yr({url:d.url,maximumBytes:d.size_bytes,fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs,accept:"application/octet-stream",signal:e.signal});Gt(u,d),P(e.workDirectory),n=m(e.workDirectory,`.identity-${process.pid}-${L()}`),q(n,{mode:448});let f=m(n,"identity.tgz");if(U(f,u,{mode:384,flag:"wx"}),ee("/usr/bin/tar",["-xzf",f,"-C",n],{stdio:"ignore",timeout:60000}).status!==0)throw new l("identity_extract_failed","Background identity archive could not be extracted.");return gs({sourceApp:m(n,"Reason.app"),home:a,releaseSigned:!0,...e.command?{command:e.command}:{}}),i({event:"identity.refresh_completed",runtime_version:e.manifest.version,...r?{from_version:r}:{},to_version:e.manifest.version}),{status:"installed"}}catch(a){if(t)return{status:"unpublished"};let o=a instanceof l||a instanceof St?a.code:"identity_install_failed";return process.stderr.write(`Reason background identity: identity_update_failed (${o})
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{R}from"./vm-hands-entry-lite-z65xva21.js";import{w,Ve}from"./vm-hands-entry-lite-33at6g06.js";import{be,C}from"./vm-hands-entry-lite-7r27208j.js";import{q}from"./vm-hands-entry-lite-a6ss0ges.js";function ut(e,i){let t=R(e,"REASON_API_URL")?.trim();if(!t)return Ve(i);let n=new URL(t);if(n.protocol!=="https:"&&!(n.protocol==="http:"&&["127.0.0.1","localhost","::1"].includes(n.hostname)))throw Error("REASON_API_URL must use HTTPS (HTTP is allowed only for loopback development).");return n.origin}function el(e){return R(e,"REASON_API_URL")?.trim()?ut(e,"production"):void 0}function Wn(e){return R(e,"REASON_API_KEY")?.trim()||void 0}async function ir(e,i){let t=e.env??process.env,n=Wn(t);if(!n)return(e.getCredentials??be)({apiOrigin:el(t),signal:i});let a=ut(t,e.channel??w({env:t})),o=await(e.fetchImpl??fetch)(a+"/v3/self",{redirect:"error",headers:{authorization:"Bearer "+n,accept:"application/json"},signal:i}),p=await o.json().catch(()=>({})),r=q(p)?p:{};if(!o.ok){let s=typeof r.detail==="string"?r.detail:typeof r.message==="string"?r.message:"API key authentication failed ("+o.status+")";throw new C(o.status,typeof r.error==="string"?r.error:"api_key_auth_failed",s)}if(typeof r.org_id!=="string"||!r.org_id)throw Error("The API key in the environment did not resolve to a Workspace.");let l=Array.isArray(r.scopes)?r.scopes.filter((s)=>typeof s==="string"):[];return{credentialKind:"api_key",apiOrigin:a,accessToken:n,orgId:r.org_id,clientId:"api-key",refreshToken:"",expiresAt:"",scopes:l}}export{ut,el,Wn,ir};
2
+ import{R}from"./vm-hands-entry-lite-z65xva21.js";import{w,Ve}from"./vm-hands-entry-lite-33at6g06.js";import{be,C}from"./vm-hands-entry-lite-rz1ep81m.js";import{q}from"./vm-hands-entry-lite-a6ss0ges.js";function ut(e,i){let t=R(e,"REASON_API_URL")?.trim();if(!t)return Ve(i);let n=new URL(t);if(n.protocol!=="https:"&&!(n.protocol==="http:"&&["127.0.0.1","localhost","::1"].includes(n.hostname)))throw Error("REASON_API_URL must use HTTPS (HTTP is allowed only for loopback development).");return n.origin}function el(e){return R(e,"REASON_API_URL")?.trim()?ut(e,"production"):void 0}function Wn(e){return R(e,"REASON_API_KEY")?.trim()||void 0}async function ir(e,i){let t=e.env??process.env,n=Wn(t);if(!n)return(e.getCredentials??be)({apiOrigin:el(t),signal:i});let a=ut(t,e.channel??w({env:t})),o=await(e.fetchImpl??fetch)(a+"/v3/self",{redirect:"error",headers:{authorization:"Bearer "+n,accept:"application/json"},signal:i}),p=await o.json().catch(()=>({})),r=q(p)?p:{};if(!o.ok){let s=typeof r.detail==="string"?r.detail:typeof r.message==="string"?r.message:"API key authentication failed ("+o.status+")";throw new C(o.status,typeof r.error==="string"?r.error:"api_key_auth_failed",s)}if(typeof r.org_id!=="string"||!r.org_id)throw Error("The API key in the environment did not resolve to a Workspace.");let l=Array.isArray(r.scopes)?r.scopes.filter((s)=>typeof s==="string"):[];return{credentialKind:"api_key",apiOrigin:a,accessToken:n,orgId:r.org_id,clientId:"api-key",refreshToken:"",expiresAt:"",scopes:l}}export{ut,el,Wn,ir};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Pr,Rr}from"./vm-hands-entry-lite-13nx02p7.js";import{g}from"./vm-hands-entry-lite-rqfhfp09.js";import{Bc,st,Yt,Tr,Nn}from"./vm-hands-entry-lite-t86kt9jz.js";import{L}from"./vm-hands-entry-lite-fccn6s4j.js";import{s,Et}from"./vm-hands-entry-lite-12ck5swp.js";import{spawnSync as se}from"child_process";import{dirname as S}from"path";import{spawn as U}from"child_process";import{accessSync as H,constants as J}from"fs";import{basename as q,join as B}from"path";var d=null;function R(e){if(d===e)d=null;if(e.exitCode===null&&e.signalCode===null)e.kill("SIGTERM")}var Bi=(e,t)=>{if(d)R(d);let r=B(e,Bc);try{H(r,J.X_OK)}catch{return()=>{}}let n;try{n=U(r,["--app",e,"--name",q(e,".app"),"--permission",t==="screen"?"screen_recording":"accessibility"],{detached:!0,stdio:"ignore"})}catch{return()=>{}}return n.on("error",()=>{if(d===n)d=null}),n.once("exit",()=>{if(d===n)d=null}),n.unref(),d=n,()=>R(n)};import{chmodSync as K,existsSync as I,mkdirSync as V,readFileSync as Y,realpathSync as A,renameSync as X,statSync as _,writeFileSync as z}from"fs";import{dirname as v,isAbsolute as Q,join as Z,resolve as C,sep as w}from"path";function k(e=s()){return Z(Et(e),"reason","protected-path-grants.json")}var p=null;function ee(e){let t=JSON.parse(e);if(!Array.isArray(t?.grants))return[];return t.grants.flatMap((r)=>{let n=r;return n&&typeof n.path==="string"&&Q(n.path)&&(n.kind==="file"||n.kind==="folder")&&typeof n.grantedAt==="number"?[{path:n.path,kind:n.kind,grantedAt:n.grantedAt}]:[]})}function m(e=k()){try{let{mtimeMs:t}=_(e);if(p&&p.file===e&&p.mtimeMs===t)return p.grants;let r=ee(Y(e,"utf8"));return p={file:e,mtimeMs:t,grants:r},r}catch{return[]}}function te(e,t){return e.kind==="file"?t===e.path:t===e.path||t.startsWith(`${e.path}${w}`)}function ne(e,t){let r=C(e);return m(t).some((n)=>te(n,r))}function xc(e,t){return L(e)&&!ne(e,t)}function O(e,t){V(v(t),{recursive:!0,mode:448});let r=`${t}.${process.pid}.tmp`;z(r,`${JSON.stringify({version:1,grants:e},null,2)}
2
+ import{Pr,Rr}from"./vm-hands-entry-lite-13nx02p7.js";import{g}from"./vm-hands-entry-lite-72h3t64b.js";import{Bc,st,Yt,Tr,Nn}from"./vm-hands-entry-lite-bkhc5mt4.js";import{L}from"./vm-hands-entry-lite-fccn6s4j.js";import{s,Et}from"./vm-hands-entry-lite-12ck5swp.js";import{spawnSync as se}from"child_process";import{dirname as S}from"path";import{spawn as U}from"child_process";import{accessSync as H,constants as J}from"fs";import{basename as q,join as B}from"path";var d=null;function R(e){if(d===e)d=null;if(e.exitCode===null&&e.signalCode===null)e.kill("SIGTERM")}var Bi=(e,t)=>{if(d)R(d);let r=B(e,Bc);try{H(r,J.X_OK)}catch{return()=>{}}let n;try{n=U(r,["--app",e,"--name",q(e,".app"),"--permission",t==="screen"?"screen_recording":"accessibility"],{detached:!0,stdio:"ignore"})}catch{return()=>{}}return n.on("error",()=>{if(d===n)d=null}),n.once("exit",()=>{if(d===n)d=null}),n.unref(),d=n,()=>R(n)};import{chmodSync as K,existsSync as I,mkdirSync as V,readFileSync as Y,realpathSync as A,renameSync as X,statSync as _,writeFileSync as z}from"fs";import{dirname as v,isAbsolute as Q,join as Z,resolve as C,sep as w}from"path";function k(e=s()){return Z(Et(e),"reason","protected-path-grants.json")}var p=null;function ee(e){let t=JSON.parse(e);if(!Array.isArray(t?.grants))return[];return t.grants.flatMap((r)=>{let n=r;return n&&typeof n.path==="string"&&Q(n.path)&&(n.kind==="file"||n.kind==="folder")&&typeof n.grantedAt==="number"?[{path:n.path,kind:n.kind,grantedAt:n.grantedAt}]:[]})}function m(e=k()){try{let{mtimeMs:t}=_(e);if(p&&p.file===e&&p.mtimeMs===t)return p.grants;let r=ee(Y(e,"utf8"));return p={file:e,mtimeMs:t,grants:r},r}catch{return[]}}function te(e,t){return e.kind==="file"?t===e.path:t===e.path||t.startsWith(`${e.path}${w}`)}function ne(e,t){let r=C(e);return m(t).some((n)=>te(n,r))}function xc(e,t){return L(e)&&!ne(e,t)}function O(e,t){V(v(t),{recursive:!0,mode:448});let r=`${t}.${process.pid}.tmp`;z(r,`${JSON.stringify({version:1,grants:e},null,2)}
3
3
  `,{mode:384}),K(r,384),X(r,t),p=null}function D(e,t=k(),r=Date.now()){if(!I(e))throw Error(`No file or folder at ${e}.`);let n=A(e),i=v(t);if(i===n||i.startsWith(`${n}${w}`)||n.startsWith(`${i}${w}`))throw Error("Reason's own configuration folder cannot be allowed.");let o={path:n,kind:_(n).isDirectory()?"folder":"file",grantedAt:r},a=m(t).filter((l)=>l.path!==n);return O([...a,o],t),o}function j(e,t=k()){let r=I(e)?A(e):C(e),n=m(t),i=n.filter((o)=>o.path!==r);if(i.length===n.length)return!1;return O(i,t),!0}function Cc(e,t,r){let n=t?"file-read* file-write*":"file-read*";return m(r).filter((i)=>i.path===e||i.path.startsWith(`${e}${w}`)).map((i)=>`(allow ${n} (${i.kind==="file"?"literal":"subpath"} ${JSON.stringify(i.path)}))`)}var G=`Reason permissions
4
4
 
5
5
  Usage:
@@ -20,7 +20,7 @@ this Mac may open. Only you can change this list; Sessions cannot.
20
20
  allow asks for each missing one, or the one named. macOS cannot ask for Full
21
21
  Disk Access: allow disk opens its pane, shows the file to add in Finder and
22
22
  waits until the worker has it.
23
- `,b="x-apple.systempreferences:com.apple.preference.security",re="curl -fsSL https://reasonmachines.com/install.sh | bash",ie=180000,oe=2000,M=["screen","accessibility","disk"],x={screen:{label:"Screen & System Audio Recording",purpose:"desktop video, computer-use screenshots",level:"required",pane:`${b}?Privacy_ScreenCapture`},accessibility:{label:"Accessibility",purpose:"computer-use clicks and typing, desktop input",level:"required",pane:`${b}?Privacy_Accessibility`},disk:{label:"Full Disk Access",purpose:"Sessions in Desktop, Documents, Downloads, iCloud Drive and Mail",level:"recommended",pane:`${b}?Privacy_AllFiles`}};function F(e){return e.executable}function ae(e,t){if(e==="computer_use_identity_missing")return`Reason's background identity is not installed (${e}); reinstall Reason: ${re}`;if(e==="computer_use_identity_outdated")return`Reason's background identity is outdated (${Yt(t)??"unknown"}; this CLI is ${g}) (${e}); \`reason update\` installs this release's`;return`Reason's background identity cannot run computer use for this CLI (${e}); run the installed \`reason\``}function sl(e=s()){let t=Tr(e);if(t.length>0)return{state:"ready",path:S(S(S(t[0]))),prefix:t};let r=Nn(t,e)??"computer_use_identity_unavailable";return{state:r,path:st(e),detail:ae(r,e)}}function E(){return{identity:()=>sl(),grants:(e)=>Pr(e),request:(e,t)=>Rr(e,t),worker:async()=>(await import("./status-89999mdn.js")).connectionMacState(),open:(e)=>{se("/usr/bin/open",e,{stdio:"ignore",timeout:1e4})},tile:Bi,restartConnection:async()=>(await import("./connect-cli-rxb3qtra.js")).restartConnection(),sleep:(e)=>new Promise((t)=>setTimeout(t,e)),now:()=>Date.now()}}function N(e,t,r){if(e.state!=="ready"||!t)return"unknown";return t[r]?"granted":"missing"}async function Ac(e){let t=e.identity(),r=t.state==="ready"?await e.grants(t.prefix):null,n=await e.worker(),i=n?F(n):null,o=!i||n?.full_disk_access==="unknown"?"unknown":n?.full_disk_access==="granted"?"granted":"missing",a=(l,u,c)=>{let{label:f,purpose:y,level:h}=x[l];return{id:l,label:f,purpose:y,level:h,state:u,holder:c}};return{identity:{state:t.state,path:t.path,detail:t.state==="ready"?null:t.detail},worker_detail:i?null:"Full Disk Access is read from this computer's running worker; `reason connect` starts it.",permissions:[a("screen",N(t,r,"screen"),t.path),a("accessibility",N(t,r,"accessibility"),t.path),a("disk",o,i)]}}function Rl(e){let t=e.identity.state==="ready"?null:e.identity.state,r=e.permissions.filter((o)=>o.state==="granted").length,n=[...t?[t]:[],...e.permissions.filter((o)=>o.state!=="granted"&&!(t&&o.id!=="disk")).map((o)=>`${o.label} ${o.state}`)],i=!t&&e.permissions.some((o)=>o.state==="missing");return`Permissions: ${r} of ${e.permissions.length}${n.length>0?` (${n.join(", ")})`:""}`+(i?" \u2014 reason permissions allow":n.length>0?" \u2014 reason permissions":"")}function ce(e){let t=[];if(e.identity.detail)t.push(e.identity.detail);t.push(`Reason: ${e.identity.path}`);let r=e.permissions.find((n)=>n.id==="disk");t.push(r?.holder?`Worker: ${r.holder}`:`Worker: ${e.worker_detail}`),t.push("");for(let n of e.permissions){let i=`${n.label}${n.level==="recommended"?" (recommended)":""}`;t.push(` ${n.id.padEnd(13)} ${n.state.padEnd(7)} ${i}: ${n.purpose}`)}if(e.permissions.some((n)=>n.state==="missing"))t.push("","Allow the missing ones: reason permissions allow");return`${t.join(`
23
+ `,b="x-apple.systempreferences:com.apple.preference.security",re="curl -fsSL https://reasonmachines.com/install.sh | bash",ie=180000,oe=2000,M=["screen","accessibility","disk"],x={screen:{label:"Screen & System Audio Recording",purpose:"desktop video, computer-use screenshots",level:"required",pane:`${b}?Privacy_ScreenCapture`},accessibility:{label:"Accessibility",purpose:"computer-use clicks and typing, desktop input",level:"required",pane:`${b}?Privacy_Accessibility`},disk:{label:"Full Disk Access",purpose:"Sessions in Desktop, Documents, Downloads, iCloud Drive and Mail",level:"recommended",pane:`${b}?Privacy_AllFiles`}};function F(e){return e.executable}function ae(e,t){if(e==="computer_use_identity_missing")return`Reason's background identity is not installed (${e}); reinstall Reason: ${re}`;if(e==="computer_use_identity_outdated")return`Reason's background identity is outdated (${Yt(t)??"unknown"}; this CLI is ${g}) (${e}); \`reason update\` installs this release's`;return`Reason's background identity cannot run computer use for this CLI (${e}); run the installed \`reason\``}function sl(e=s()){let t=Tr(e);if(t.length>0)return{state:"ready",path:S(S(S(t[0]))),prefix:t};let r=Nn(t,e)??"computer_use_identity_unavailable";return{state:r,path:st(e),detail:ae(r,e)}}function E(){return{identity:()=>sl(),grants:(e)=>Pr(e),request:(e,t)=>Rr(e,t),worker:async()=>(await import("./status-q55nprve.js")).connectionMacState(),open:(e)=>{se("/usr/bin/open",e,{stdio:"ignore",timeout:1e4})},tile:Bi,restartConnection:async()=>(await import("./connect-cli-afdc1h11.js")).restartConnection(),sleep:(e)=>new Promise((t)=>setTimeout(t,e)),now:()=>Date.now()}}function N(e,t,r){if(e.state!=="ready"||!t)return"unknown";return t[r]?"granted":"missing"}async function Ac(e){let t=e.identity(),r=t.state==="ready"?await e.grants(t.prefix):null,n=await e.worker(),i=n?F(n):null,o=!i||n?.full_disk_access==="unknown"?"unknown":n?.full_disk_access==="granted"?"granted":"missing",a=(l,u,c)=>{let{label:f,purpose:y,level:h}=x[l];return{id:l,label:f,purpose:y,level:h,state:u,holder:c}};return{identity:{state:t.state,path:t.path,detail:t.state==="ready"?null:t.detail},worker_detail:i?null:"Full Disk Access is read from this computer's running worker; `reason connect` starts it.",permissions:[a("screen",N(t,r,"screen"),t.path),a("accessibility",N(t,r,"accessibility"),t.path),a("disk",o,i)]}}function Rl(e){let t=e.identity.state==="ready"?null:e.identity.state,r=e.permissions.filter((o)=>o.state==="granted").length,n=[...t?[t]:[],...e.permissions.filter((o)=>o.state!=="granted"&&!(t&&o.id!=="disk")).map((o)=>`${o.label} ${o.state}`)],i=!t&&e.permissions.some((o)=>o.state==="missing");return`Permissions: ${r} of ${e.permissions.length}${n.length>0?` (${n.join(", ")})`:""}`+(i?" \u2014 reason permissions allow":n.length>0?" \u2014 reason permissions":"")}function ce(e){let t=[];if(e.identity.detail)t.push(e.identity.detail);t.push(`Reason: ${e.identity.path}`);let r=e.permissions.find((n)=>n.id==="disk");t.push(r?.holder?`Worker: ${r.holder}`:`Worker: ${e.worker_detail}`),t.push("");for(let n of e.permissions){let i=`${n.label}${n.level==="recommended"?" (recommended)":""}`;t.push(` ${n.id.padEnd(13)} ${n.state.padEnd(7)} ${i}: ${n.purpose}`)}if(e.permissions.some((n)=>n.state==="missing"))t.push("","Allow the missing ones: reason permissions allow");return`${t.join(`
24
24
  `)}
25
25
  `}async function T(e,t){let r=t.now()+ie;for(;;){if(await e())return!0;if(t.now()>=r)return!1;await t.sleep(oe)}}async function al(e,t){let r=t.host??E(),{io:n}=t,i=await Ac(r),o=i.permissions.filter((c)=>e.includes(c.id)&&c.state!=="granted");if(o.length===0)return n.stdout.write(`Reason permissions: ${e.map((c)=>x[c].label).join(", ")} already allowed.
26
26
  `),0;let a=!1,l=!1,u=r.identity();for(let c of o){let{label:f,pane:y}=x[c.id];if(c.id!=="disk"){if(u.state!=="ready"){if(!a)n.stderr.write(`Reason permissions: ${u.detail}
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{g}from"./vm-hands-entry-lite-rqfhfp09.js";import{s}from"./vm-hands-entry-lite-12ck5swp.js";import{randomUUID as P}from"crypto";import{spawnSync as b}from"child_process";import{chmodSync as z,cpSync as Z,existsSync as x,lstatSync as A,mkdirSync as L,readdirSync as ee,readFileSync as C,readlinkSync as te,realpathSync as T,renameSync as _,rmdirSync as ne,rmSync as y,symlinkSync as D,writeFileSync as re}from"fs";import{dirname as h,join as u,relative as ie,resolve as oe}from"path";var fs="so.ara.cli",w=[fs,"com.reasonmachines.cli"],Fi="5LJFSBRY2F";function ji(e){return`(${e.map((t)=>`identifier "${t}"`).join(" or ")}) and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and certificate leaf[field.1.2.840.113635.100.6.1.13] exists and certificate leaf[subject.OU] = "${Fi}"`}var Y="ReasonBackgroundIdentity",Bc="Contents/Helpers/ReasonPermissionTile",se="so.ara.cli.permission-tile",be=ji([se,"com.reasonmachines.cli.permission-tile"]),k="AraBackgroundIdentity",ce="Reason",Ae=ji(w),ae=`anchor apple generic and (${w.map((e)=>`identifier "${e}"`).join(" or ")}) and certificate leaf[subject.OU] = "${Fi}"`;class St extends Error{code;constructor(e,t){super(t);this.code=e;this.name="MacOSBackgroundIdentityError"}}var On="/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister";function st(e=s()){return u(e,"Library","Application Support","Reason","Background","Reason.app")}function O(e=s()){return u(e,"Library","Application Support","Ara","Background","Ara.app")}function ue(e){try{return A(e).isFile()}catch{return!1}}function v(e){return[Y,k].map((t)=>u(e,"Contents","MacOS",t)).find(ue)??null}function d(e){try{if(!A(e).isDirectory())return!1;let t=C(u(e,"Contents","Info.plist"),"utf8");return w.some((n)=>t.includes(`<string>${n}</string>`))&&(t.includes(`<string>${ce}</string>`)||t.includes("<string>Ara</string>"))&&v(e)!==null}catch{return!1}}function Yt(e=s()){let t=st(e);if(!d(t))return null;try{let n=C(u(t,"Contents","Info.plist"),"utf8");return/<key>CFBundleVersion<\/key>\s*<string>(\d+\.\d+\.\d+)<\/string>/.exec(n)?.[1]??null}catch{return null}}function ms(e,t=s()){let n=Yt(t);return n===null||V(R(n.split(".")),R(e.split(/[.-]/).slice(0,3)))}var le=1e4;function F(e,t){return b(e,[...t],{stdio:"ignore",timeout:le}).status??1}var G=new Set;function K(e){if(process.env.REASON_TEST_REFUSE_REAL_IDENTITY!=="1")return;let t=(n)=>{try{return T(n)}catch{return oe(n)}};if(e!==void 0&&t(e)!==t(s()))return;throw Error("A test tried to change this computer's real Reason background identity; pass a temporary home. Refused by scripts/test-env.ts.")}var W=/\/(?:runtime|CLI)\/versions\/(\d+)\.(\d+)\.(\d+)[^/]*\/[^/]+$|\/\.(?:ara|reason)(?:-staging)?-worker-(\d+)\.(\d+)\.(\d+)[^/]*\/[^/]+$/,H=new Set(["ara","ara.exe","reason","reason.exe"]);function R(e){return e.map((t)=>Number(t))}function V(e,t){for(let n=0;n<3;n+=1)if(e[n]!==t[n])return e[n]<t[n];return!1}var de=[0,2,161];function fe(e){if(e===null)return!0;let t=de,n=null;try{n=T(process.execPath)}catch{}return e.some((r)=>{let i=W.exec(r);if(i){let f=i[1]===void 0?i.slice(4,7):i.slice(1,4);return V(R(f),t)}let o=r.slice(r.lastIndexOf("/")+1);return H.has(o)&&r!==n&&r!==process.execPath})}function pe(){let e=b("/bin/ps",["-xo","pid=,comm="],{encoding:"utf8",timeout:5000});if(e.status!==0)return null;let t=[];for(let n of e.stdout.split(`
2
+ import{g}from"./vm-hands-entry-lite-72h3t64b.js";import{s}from"./vm-hands-entry-lite-12ck5swp.js";import{randomUUID as P}from"crypto";import{spawnSync as b}from"child_process";import{chmodSync as z,cpSync as Z,existsSync as x,lstatSync as A,mkdirSync as L,readdirSync as ee,readFileSync as C,readlinkSync as te,realpathSync as T,renameSync as _,rmdirSync as ne,rmSync as y,symlinkSync as D,writeFileSync as re}from"fs";import{dirname as h,join as u,relative as ie,resolve as oe}from"path";var fs="so.ara.cli",w=[fs,"com.reasonmachines.cli"],Fi="5LJFSBRY2F";function ji(e){return`(${e.map((t)=>`identifier "${t}"`).join(" or ")}) and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and certificate leaf[field.1.2.840.113635.100.6.1.13] exists and certificate leaf[subject.OU] = "${Fi}"`}var Y="ReasonBackgroundIdentity",Bc="Contents/Helpers/ReasonPermissionTile",se="so.ara.cli.permission-tile",be=ji([se,"com.reasonmachines.cli.permission-tile"]),k="AraBackgroundIdentity",ce="Reason",Ae=ji(w),ae=`anchor apple generic and (${w.map((e)=>`identifier "${e}"`).join(" or ")}) and certificate leaf[subject.OU] = "${Fi}"`;class St extends Error{code;constructor(e,t){super(t);this.code=e;this.name="MacOSBackgroundIdentityError"}}var On="/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister";function st(e=s()){return u(e,"Library","Application Support","Reason","Background","Reason.app")}function O(e=s()){return u(e,"Library","Application Support","Ara","Background","Ara.app")}function ue(e){try{return A(e).isFile()}catch{return!1}}function v(e){return[Y,k].map((t)=>u(e,"Contents","MacOS",t)).find(ue)??null}function d(e){try{if(!A(e).isDirectory())return!1;let t=C(u(e,"Contents","Info.plist"),"utf8");return w.some((n)=>t.includes(`<string>${n}</string>`))&&(t.includes(`<string>${ce}</string>`)||t.includes("<string>Ara</string>"))&&v(e)!==null}catch{return!1}}function Yt(e=s()){let t=st(e);if(!d(t))return null;try{let n=C(u(t,"Contents","Info.plist"),"utf8");return/<key>CFBundleVersion<\/key>\s*<string>(\d+\.\d+\.\d+)<\/string>/.exec(n)?.[1]??null}catch{return null}}function ms(e,t=s()){let n=Yt(t);return n===null||V(R(n.split(".")),R(e.split(/[.-]/).slice(0,3)))}var le=1e4;function F(e,t){return b(e,[...t],{stdio:"ignore",timeout:le}).status??1}var G=new Set;function K(e){if(process.env.REASON_TEST_REFUSE_REAL_IDENTITY!=="1")return;let t=(n)=>{try{return T(n)}catch{return oe(n)}};if(e!==void 0&&t(e)!==t(s()))return;throw Error("A test tried to change this computer's real Reason background identity; pass a temporary home. Refused by scripts/test-env.ts.")}var W=/\/(?:runtime|CLI)\/versions\/(\d+)\.(\d+)\.(\d+)[^/]*\/[^/]+$|\/\.(?:ara|reason)(?:-staging)?-worker-(\d+)\.(\d+)\.(\d+)[^/]*\/[^/]+$/,H=new Set(["ara","ara.exe","reason","reason.exe"]);function R(e){return e.map((t)=>Number(t))}function V(e,t){for(let n=0;n<3;n+=1)if(e[n]!==t[n])return e[n]<t[n];return!1}var de=[0,2,161];function fe(e){if(e===null)return!0;let t=de,n=null;try{n=T(process.execPath)}catch{}return e.some((r)=>{let i=W.exec(r);if(i){let f=i[1]===void 0?i.slice(4,7):i.slice(1,4);return V(R(f),t)}let o=r.slice(r.lastIndexOf("/")+1);return H.has(o)&&r!==n&&r!==process.execPath})}function pe(){let e=b("/bin/ps",["-xo","pid=,comm="],{encoding:"utf8",timeout:5000});if(e.status!==0)return null;let t=[];for(let n of e.stdout.split(`
3
3
  `)){let r=/^\s*(\d+)\s+(\S.*)$/.exec(n);if(!r||Number(r[1])===process.pid)continue;let i=r[2].trimEnd(),o=i.slice(i.lastIndexOf("/")+1);if(!W.test(i)&&H.has(o)){let a=b("/usr/sbin/lsof",["-a","-p",r[1],"-d","txt","-Fn"],{encoding:"utf8",timeout:5000}).stdout?.split(`
4
4
  `).find((l)=>l.startsWith("n/"));if(a)i=a.slice(1)}t.push(i)}return t}function gs(e){if(K(e.home),!d(e.sourceApp))throw new St("identity_invalid","The packaged Reason background identity is missing or invalid.");let t=e.command??F,n=st(e.home),r=h(n);L(r,{recursive:!0,mode:448}),z(r,448);let i=T(e.sourceApp),o=null;try{o=T(n)}catch{}if(i!==o){let f=`${process.pid}.${P()}`,a=u(r,`.Reason.app.${f}.tmp`),l=u(r,`.Reason.app.${f}.old`),m=!1;try{if(Z(i,a,{recursive:!0,errorOnExist:!0,preserveTimestamps:!0}),!d(a))throw new St("identity_invalid","The copied Reason background identity is invalid.");let S=e.releaseSigned?["--test-requirement",`=${ae}`]:[];if(t("/usr/bin/codesign",["--verify","--strict",...S,a])!==0)throw new St("identity_invalid_signature","The installed Reason background identity has an invalid signature.");let I=!1;for(let p=0;p<4;p+=1){let E=!1;try{_(n,l),E=!0,m=!0}catch(c){if(c.code!=="ENOENT")throw c}if(p===0)e.beforePublish?.();try{_(a,n),I=!0}catch(c){let Q=c.code;if(!["EEXIST","ENOTEMPTY"].includes(Q??""))throw c;if(E)y(l,{recursive:!0,force:!0}),m=!1;if(p===3)throw c;continue}if(E)y(l,{recursive:!0,force:!0}),m=!1;break}if(!I)throw Error("Could not publish Reason's background identity.")}catch(S){if(m&&!x(n)&&x(l))_(l,n);throw S}finally{y(a,{recursive:!0,force:!0}),y(l,{recursive:!0,force:!0})}}return q(n,e,{verified:i!==o}),n}function J(e){return u(h(e),".Reason.app.registered")}function j(e){try{let t=A(e);return t.isDirectory()?`${t.ino}:${t.birthtimeMs}`:null}catch{return null}}function N(e){let t=j(e);try{return t!==null&&C(J(e),"utf8")===t}catch{return!1}}function X(e){if(d(e))return"bundle";try{if(A(u(e,"Contents","Info.plist"),{throwIfNoEntry:!1}))return null;return A(u(e,"Contents","MacOS",k)).isSymbolicLink()?"retired":null}catch{return null}}function q(e,t,n={}){let r=t.command??F;if(!n.verified&&r("/usr/bin/codesign",["--verify","--strict",e])!==0)throw new St("identity_invalid_signature","The installed Reason background identity has an invalid signature.");if(r(On,["-f",e])!==0)throw new St("identity_register_failed","Could not register Reason's macOS background identity.");let i=j(e);try{if(i)re(J(e),i,{mode:384})}catch{}try{ge(e,t.home,r,t.runningExecutables??pe)}catch(o){let f=o.code??"unknown";process.stderr.write(`Reason background identity: legacy_identity_retire_failed (${f})
5
5
  `)}}function ge(e,t,n,r){let i=v(e);if(!i)return;let o=O(t),f=h(o),a=(c)=>u(c,"Contents","MacOS",k),l=ie(h(a(o)),i),m=`${process.pid}.${P()}`,S=X(o);if(S===null)return;let I=S==="bundle";if(I)n(On,["-u",o]);let p=u(f,`.Ara.app.${m}.old`);if(!G.has(o)&&!fe(r())){if(!I)n(On,["-u",o]);try{_(o,p)}catch(c){if(c.code==="ENOENT")return;throw c}y(p,{recursive:!0,force:!0}),ye(f);return}if(!I){if(te(a(o))===l)return;let c=`${a(o)}.${m}`;D(l,c);try{_(c,a(o))}finally{y(c,{force:!0})}return}let E=u(f,`.Ara.app.${m}.shim`);L(h(a(E)),{recursive:!0}),D(l,a(E));try{try{_(o,p)}catch(c){if(c.code==="ENOENT")return;throw c}try{_(E,o)}catch(c){if(x(o))return;throw _(p,o),c}}finally{y(E,{recursive:!0,force:!0}),y(p,{recursive:!0,force:!0})}}function ye(e){try{if(ee(e).some((n)=>n!==".DS_Store"))return;y(u(e,".DS_Store"),{force:!0}),ne(e)}catch{}}var M=new Map;function _s(e=s()){let t=M.get(e);if(t)return t;if(process.platform!=="darwin")return[];let n=B(e);if(n===null&&x(h(st(e))))Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,100),n=B(e);if(n===null)return[];return M.set(e,n),n}function B(e){let t=st(e),n=O(e);if(!d(t)||!N(t))try{Hi({home:e,skipWhenSettled:!0})}catch{}let r=d(t)&&(N(t)||!d(n))?t:d(n)?n:null,i=r?v(r):null;if(!i)return null;if(r===n)G.add(n);let o=b(i,["--can-spawn"],{env:{},timeout:2000,encoding:"utf8"});return o.status===0&&o.stdout===`spawn
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Xt,yc,le,Sr,Er,A}from"./vm-hands-entry-lite-6vnjgy77.js";import{ue}from"./vm-hands-entry-lite-cc8hwgxc.js";import{Rr}from"./vm-hands-entry-lite-13nx02p7.js";import{Tr}from"./vm-hands-entry-lite-t86kt9jz.js";import{Bi}from"./vm-hands-entry-lite-t43bz0ey.js";import{Ue,wr,br,Yo}from"./vm-hands-entry-lite-chq0qx9f.js";import{Kt}from"./vm-hands-entry-lite-1eyg750p.js";import{qr,ba}from"./vm-hands-entry-lite-sh4mqy93.js";import{Te,jt}from"./vm-hands-entry-lite-432khjd5.js";import{de,ze}from"./vm-hands-entry-lite-af45ma9p.js";import{$r}from"./vm-hands-entry-lite-fxptf351.js";import{s}from"./vm-hands-entry-lite-12ck5swp.js";import{B}from"./vm-hands-entry-lite-pg7nnyc6.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{spawn as S,spawnSync as De}from"child_process";import{createHash as Le,randomUUID as re}from"crypto";import{closeSync as $e,copyFileSync as J,existsSync as C,fstatSync as Be,mkdirSync as z,openSync as We,readdirSync as N,readFileSync as W,readlinkSync as qe,renameSync as ne,rmSync as Fe,statSync as He,writeFileSync as Ge}from"fs";import{connect as je}from"net";import{tmpdir as P,userInfo as ie}from"os";import{basename as V,delimiter as Xe,dirname as M,join as m}from"path";var q=`import { spawn, execFileSync } from "node:child_process";
2
+ import{Xt,yc,le,Sr,Er,A}from"./vm-hands-entry-lite-50kqbrb7.js";import{ue}from"./vm-hands-entry-lite-cc8hwgxc.js";import{Rr}from"./vm-hands-entry-lite-13nx02p7.js";import{Tr}from"./vm-hands-entry-lite-bkhc5mt4.js";import{Bi}from"./vm-hands-entry-lite-b2w5071h.js";import{Ue,wr,br,Yo}from"./vm-hands-entry-lite-chq0qx9f.js";import{Kt}from"./vm-hands-entry-lite-2gxv7v1h.js";import{qr,ba}from"./vm-hands-entry-lite-sh4mqy93.js";import{Te,jt}from"./vm-hands-entry-lite-x6ybft9v.js";import{de,ze}from"./vm-hands-entry-lite-ttfqxjms.js";import{$r}from"./vm-hands-entry-lite-fxptf351.js";import{s}from"./vm-hands-entry-lite-12ck5swp.js";import{B}from"./vm-hands-entry-lite-pg7nnyc6.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{spawn as S,spawnSync as De}from"child_process";import{createHash as Le,randomUUID as re}from"crypto";import{closeSync as $e,copyFileSync as J,existsSync as C,fstatSync as Be,mkdirSync as z,openSync as We,readdirSync as N,readFileSync as W,readlinkSync as qe,renameSync as ne,rmSync as Fe,statSync as He,writeFileSync as Ge}from"fs";import{connect as je}from"net";import{tmpdir as P,userInfo as ie}from"os";import{basename as V,delimiter as Xe,dirname as M,join as m}from"path";var q=`import { spawn, execFileSync } from "node:child_process";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import { readFileSync, readlinkSync, lstatSync, realpathSync, statSync, mkdtempSync, mkdirSync, chmodSync, writeFileSync, readdirSync, rmSync, openSync, readSync, closeSync, renameSync } from "node:fs";
5
5
  import { tmpdir } from "node:os";
@@ -1,5 +1,5 @@
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-sz7z1qby.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})+`
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
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=Ri(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 Mo(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:ta(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 Xa(e,a){let l=Ct.parse(e.request),u=Je.parse(e.authority);if(u.contributorRefresh&&l.kind==="read"&&u.readOnly)return a(Mo(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(Mo(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(Ko());if(w===g||w.startsWith(g+vn))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{yn(A,{recursive:!0,force:!0})}}var Xo=43200000;function $r(e){return Number.isSafeInteger(e)&&Math.abs(e)<=8640000000000000?e:null}function qo(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function Yo(e,a){return Object.keys(e).length===a.length&&a.every((l)=>Object.hasOwn(e,l))}function Ya(e){if(!qo(e)||!Yo(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(!qo(l)||!Yo(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 Sn=h({kind:c(["workspace_source","mcp_control"]),target_revision:o().int().nonnegative(),root_grant_revision:o().int().positive()}),Zo=new RegExp(dr.tokenPattern),ya=h({token_url:zr().max(2048),request_token:t().min(1).max(8192).regex(Zo),aws_credentials_url:zr().max(2048).nullable()});function Qo(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(!Zo.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 es(e){return new TextEncoder().encode(e).byteLength}function va(e){return es(JSON.stringify(e)+`
4
4
  `)}var oi=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:Sn.extend({target_generation:o().int().positive(),target_fence_id:V()}),expires_at:I.datetime({offset:!0}),variables:$e(t().max(128).regex(an),t().refine((e)=>!e.includes("\x00")&&es(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:ya.optional()}).refine((e)=>e.github_auth!=="local_gh"||e.git===null,"conflicting git authority").refine((e)=>va(e)<=Re.snapshotBytes,"snapshot too large");import{spawn as ka}from"child_process";import{basename as Ea,isAbsolute as Ef}from"path";var Ra=0,rs=120000,ts=15000,Oa=65536;function En(e=process.execPath,a=process.argv[1]){let l=Ea(e),u=(l.startsWith("bun")||l.startsWith("node"))&&typeof a==="string"&&a.length>0;return{command:e,prefix:u?[a]:[]}}function nn(e={}){let{command:a,prefix:l}=En(e.executablePath,e.sourceEntrypoint),u=e.spawnProcess??ka,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<rs-ts)return;if(g){let D=g;g=null,w(D)}let N;try{N=u(a,[...l,"__device","__hands-worker","--handoff-fd",String(Ra)],{cwd:"/",env:{PATH:process.env.PATH??"/usr/local/bin:/usr/bin:/bin"},shell:!1,stdio:["pipe","ignore","pipe"]})}catch{return}g=N,k=f(),N.on("error",()=>{if(g===N)g=null}),N.once("exit",(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>=rs-ts||Buffer.byteLength(Y,"utf8")>Oa)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 Da,constants as Ca,statSync as Ha}from"fs";import{homedir as Na,tmpdir as La,userInfo as Ba}from"os";import{delimiter as ja,win32 as Ma}from"path";var xa=new Set(["ALL_PROXY","BUN_BE_BUN","BUN_OPTIONS","CURL_CA_BUNDLE","GIT_SSL_CAINFO","GRPC_DEFAULT_SSL_ROOTS_FILE_PATH","HTTPS_PROXY","HTTP_PROXY","NO_PROXY","NODE_EXTRA_CA_CERTS","NODE_OPTIONS","NODE_TLS_REJECT_UNAUTHORIZED","REQUESTS_CA_BUNDLE","SSLKEYLOGFILE","SSL_CERT_DIR","SSL_CERT_FILE","all_proxy","http_proxy","https_proxy","no_proxy"]);var Pa=["BUN_CONFIG_","BUN_INSPECT","DYLD_","NODE_DEBUG"],Ia=new Set(["BUN_INSTALL"]);var Aa=/^--(?:max-old-space-size|max-semi-space-size|stack-size)=\d{1,9}$/;function Ta(e){return(e??"").split(/\s+/).filter(Boolean).every((a)=>Aa.test(a.replaceAll("_","-")))}function pt(e){return Object.keys(e).filter((a)=>xa.has(a)&&!(a==="NODE_OPTIONS"&&Ta(e[a]))||Pa.some((l)=>a.startsWith(l))||a.startsWith("BUN_")&&!Ia.has(a)).sort()}var Fa=new Set(["HOME","PATH","PWD","OLDPWD","SHLVL","_","TMPDIR","TMP","TEMP","SHELL","BASH_ENV","ENV","ZDOTDIR","PROMPT_COMMAND","IFS","CDPATH","GLOBIGNORE","SHELLOPTS","BASHOPTS","NODE_PATH"]),Ua=/^(?: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 ai(e=process.env){let a=(f)=>{if(!(process.platform==="win32"?Ma.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)&&!Fa.has(g)&&!Ua.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)||Na()),path:((f)=>process.platform==="win32"?Do(f):f)(gi(e.PATH??"").join(ja)||Ft),temporaryDirectory:a(e.TMPDIR||e.TMP||e.TEMP||La()),variables:u}}function ci(e=process.env,a=()=>Ba().shell){if(process.platform==="win32")return Ye();let l=(f)=>{if(!f||!/^\/[A-Za-z0-9._/-]*\/(?:bash|zsh)$/.test(f))return!1;try{return Da(f,Ca.X_OK),Ha(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 So(e){let a=e instanceof Error&&"code"in e?e.code:null;return a==="EPERM"||a==="EACCES"}function Eo(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 ns(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(So(g))throw Eo(e);if(g instanceof r)throw g}finally{clearTimeout(u)}}import{chmodSync as Kc,closeSync as Gc,constants as Nn,fstatSync as Jc,lstatSync as Es,openSync as Vc,readSync as qc,realpathSync as Ln,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 Is}from"os";import{basename as nd,extname as od,isAbsolute as Rs,relative as Bn,resolve as Vr,sep as jn}from"path";var os=String.raw`
5
5
  async (roots) => {
@@ -1,8 +1,8 @@
1
1
  // @bun
2
- import{io}from"./vm-hands-entry-lite-cmmb9k3g.js";import{spawnSync as p}from"child_process";import{createHash as de}from"crypto";import{chmodSync as ge,closeSync as pe,existsSync as w,linkSync as fe,lstatSync as me,mkdirSync as Q,mkdtempSync as he,openSync as we,readdirSync as ye,readFileSync as Ee,readSync as ke,realpathSync as Ne,renameSync as E,rmSync as k,statSync as Y,symlinkSync as W,writeFileSync as I}from"fs";import{connect as Se}from"net";import{homedir as m}from"os";import{basename as Z,dirname as R,join as u}from"path";import{inflateRawSync as be}from"zlib";var oe=new Set(["<","\u02C2","\u1438","\u2039","\u3008","\u276C","\u276E","\u2770","\u16B2","\u2D66","\uD800\uDF2D","\uD81A\uDEEC","\uD834\uDE36","\u27E8","\u27EA","\u29FC","\u3008","\u300A","\uFE64","\uFF1C"]),D=(e)=>e===" "||e==="\t"||e===`
3
- `||e==="\f"||e==="\r",ie=(e)=>e.length===1&&e>="!"&&e<="~",G=(e)=>e.length===1&&/[A-Za-z]/.test(e);function J(e){let n=Array.from(e),t=(r)=>{let s=r+Math.min(n.length-r,64),o=r;while(o<s&&(D(n[o])||n[o]==="/"))o+=1;let i=o-r,a=[];while(o<s&&!D(n[o])&&n[o]!==">"&&n[o]!=="\uFF1E")a.push(n[o++]);return i+a.length===s-r&&n.length-r>64||!a.every(ie)||ae(a)};return n.map((r,s)=>oe.has(r)&&t(s+1)?"[":r).join("")}function ae(e){let n=1;for(let t of e){let r=t==="0"?"o":t==="3"?"e":t==="4"||t==="@"?"a":t==="5"||t==="$"?"s":G(t)?t.toLowerCase():t,s="reason".indexOf(r),o=s<0?0:1<<s;if(n=1|(G(t)?0:n)|(n&o)<<1,n&64)return!0}return!1}var ce=/[\u0000-\u0008\u000B-\u001F\u007F-\u009F]/g;function U(e){return J(e.replace(ce," ").replace(/[\u2028\u2029]/g," "))}var le=["CLAUDECODE","CLAUDE_CODE_SESSION_ID","CODEX_THREAD_ID","CODEX_SESSION_ID","GROK_SESSION_ID","GROK_WORKSPACE_ROOT","GEMINI_CLI","CURSOR_AGENT","OPENCODE","COPILOT_CLI","COPILOT_AGENT_SESSION_ID","AI_AGENT"];function ue(e=process.env,n=Boolean(process.stderr.isTTY)){let t=le.some((r)=>e[r]!==void 0)||Object.keys(e).some((r)=>r.startsWith("CODEX_SANDBOX"))||Boolean(e.REASON_NETWORK_AGENT)||Boolean(e.TINCAN_AGENT);return n&&!t}function Fe(e,n=ue()){return n?e:U(e)}class Ce extends Error{}var f="reason-network",g="0.12.10",_e={"aarch64-apple-darwin":"fd3e6eccf76aa3f3cdcbe516bb2e0885bc9416e89378d858c5d96e58a37a2996","x86_64-apple-darwin":"68a224c4e51ec91c4754fdda2724de0e72ba3f27b687b2466a7c7d5e492ad72c","aarch64-unknown-linux-musl":"ca6177ba2ac3fc2d1ca0a06953cb33ee09ab6d83f5b957bee54339b41b6672b4","x86_64-unknown-linux-musl":"d872f3e96066ed717cc775f9c580a2ab68feace60e06427ff216cec985f2115a","aarch64-pc-windows-msvc":"67b4f3f9c3f7e69e285eef863009fa014195b1c91a4e8b1abca81f1a085e55ed","x86_64-pc-windows-msvc":"9fad0c86fdc56e7b837b7c98960f685dd63721f4e6be5a172f8198eee82e5869"},Re="https://reasonmachines.com/cli/engine",N="REASON_AGENT_NETWORK_BIN";function ve(e=process.platform,n=process.arch){let t=n==="arm64"?"aarch64":n==="x64"?"x86_64":null,r=e==="darwin"?"apple-darwin":e==="linux"?"unknown-linux-musl":e==="win32"?"pc-windows-msvc":null;return t&&r?`${t}-${r}`:null}function ee(e){return`${f}-${e}${e.endsWith("-windows-msvc")?".zip":".tar.gz"}`}function xe(e){let n=_e[e];return n?{url:`${Re}/${g}/${ee(e)}`,sha256:n}:null}function A(e){let n=p(e,["--version"],{encoding:"utf8",timeout:5000}),[t,r]=n.status===0?n.stdout.trim().split(/\s+/):[];return t===f?r??null:null}function _(e,n){let t=e.split(".").map(Number),r=n.split(".").map(Number);for(let s=0;s<3;s+=1)if((t[s]??0)!==(r[s]??0))return(t[s]??0)>(r[s]??0);return!0}function S(e=m(),n=process.platform){return u(e,".reason","bin",`${f}${n==="win32"?".exe":""}`)}var v=process.platform==="win32"?`~\\.local\\bin\\${f}.exe`:`~/.local/bin/${f}`;async function Te(e=process.env,n=()=>{}){if(e[N])return e[N];let t=S(),r=T(),s=r?.path===t&&y(t)===r.fingerprint?r:null,o=s?.kept,i=M(e)?null:$e(o);if(s?.version===g&&!i)return t;let a=w(t)?A(t):null;if(i){let c=A(i.path),d=a&&_(a,g)?a:g;if(!c||!_(d,c)){if(c)n(`Reason Network: ${v} (${c}) is newer than the version \`reason network\` keeps up to date (${d}), so it was left as it is.`);o=i.fingerprint,i=null}}if(s?.version===g&&!i)return F(t,o);if(!a||!_(a,g))await ne(t);let l=p(t,["setup",...M(e)?["--no-service"]:[]],{env:await C(e),encoding:"utf8",timeout:60000});if(l.status!==0){let c=b((l.stderr||l.stdout||"").trim().split(`
4
- `).pop()??"");if(s)return B(m(),{...s,fingerprint:y(t)??s.fingerprint,...o?{kept:o}:{}}),n(i?`Reason Network: couldn't move your agents off ${v}${c?` (${c})`:""}; they keep using it. Run reason network to try again.`:`Reason Network: couldn't finish setting up on this computer${c?` (${c})`:""}. Run reason network to try again.`),t;throw new Ce(`Couldn't connect this computer's agents to the network${c?` (${c})`:""}. Run reason network to try again.`)}if(i)o=Pe(i,t,n);return F(t,o),p(t,["stop"],{env:e,stdio:"ignore",timeout:15000}),t}function $e(e){let n=u(m(),".local","bin",Z(S())),t;try{t=me(n)}catch{return null}let r=`${t.size}:${t.mtimeMs}:${t.ino}`;if(!t.isFile()||r===e)return null;try{let s=Y(S());if(s.ino===t.ino&&s.dev===t.dev)return null}catch{}try{let s=Buffer.alloc(2),o=we(n,"r");try{ke(o,s,0,2,0)}finally{pe(o)}if(s.toString("latin1")==="#!")return null}catch{return null}return{path:n,fingerprint:r}}function Pe(e,n,t){let r=`${e.path}.reason-${process.pid}`;try{if(k(r,{force:!0}),process.platform==="win32"){try{W(n,r,"file")}catch{fe(n,r)}te(r,e.path,"win32")}else W(n,r),E(r,e.path);t(`Reason Network: your agents on this computer now use the version \`reason network\` keeps up to date (${v} points to it). Restart a running agent to pick it up.`);return}catch(s){return k(r,{force:!0}),t(`Reason Network: your agents on this computer now use the version \`reason network\` keeps up to date, but ${v} couldn't be pointed to it (${s instanceof Error?s.message:String(s)}). Remove that copy so it can't take them back.`),e.fingerprint}}async function fl(e={}){let n=e.env??process.env,t=e.home??m(),r=S(t),s=T(t);if(n[N]||s?.path!==r||y(r)!==s.fingerprint)return!1;if(s.version===g)return!1;let o=A(r);if(o&&_(o,g))return!1;return await ne(r),B(t,{...s,fingerprint:y(r)??""}),e.beforeRestart?.(),p(r,["stop"],{env:n,stdio:"ignore",timeout:15000}),!0}async function C(e){if(e[j])return e;try{let{defaultWorkerServiceHost:n,workerServiceLauncher:t}=await import("./serve-service-grp91ybk.js");return{...e,[j]:t(n(m()),e)}}catch{return e}}var j="REASON_NETWORK_REASON_BIN";function M(e=process.env){return Boolean(e.REASON_NETWORK_NO_SERVICE||e.TINCAN_NO_SERVICE)}var L=(e)=>u(e,".reason","ask-engine.json");function y(e){try{let n=Y(e);return`${n.size}:${n.mtimeMs}:${n.ino}`}catch{return null}}function ml(e=m()){return T(e)?.version??null}function T(e=m()){try{let n=JSON.parse(Ee(L(e),"utf8"));if(typeof n.path!=="string"||typeof n.fingerprint!=="string"||typeof n.version!=="string")return null;return{path:n.path,fingerprint:n.fingerprint,version:n.version,...typeof n.kept==="string"?{kept:n.kept}:{}}}catch{return null}}function B(e,n){Q(R(L(e)),{recursive:!0}),I(L(e),JSON.stringify(n))}function F(e,n){let t=y(e);if(t)B(m(),{path:e,fingerprint:t,version:g,...n?{kept:n}:{}});return e}async function ne(e){let n=ve(),t=n?xe(n):null;if(!n||!t)throw new Ce(`Reason Network runs on macOS, Linux and Windows (arm64 or x64); this is ${process.platform} ${process.arch}.`);let{url:r,sha256:s}=t,o;try{let a=await fetch(r,{signal:AbortSignal.timeout(120000)});if(!a.ok)throw Error(`HTTP ${a.status}`);o=Buffer.from(await a.arrayBuffer())}catch(a){let l=a instanceof Error&&a.name==="TimeoutError"?"no download within 2 minutes":a instanceof Error?a.message.replace(/\.$/,""):String(a);throw new Ce(`Couldn't download Reason Network from ${new URL(r).host} (${l}). Check the connection and run reason network again.`)}if(de("sha256").update(o).digest("hex")!==s)throw new Ce("The Reason Network download didn't match its checksum, so it wasn't installed.");Oe(o,n,e)}var H="Couldn't unpack the Reason Network download.";function Oe(e,n,t,r=process.platform){Q(R(t),{recursive:!0});let s=he(u(R(t),".reason-engine-"));try{let o=u(s,f);if(ee(n).endsWith(".zip"))o=u(s,`${f}.exe`),I(o,Ie(e,`${f}.exe`));else{I(u(s,"engine.tar.gz"),e);let i=p("tar",["--no-same-owner","-xzf",u(s,"engine.tar.gz"),"-C",s],{encoding:"utf8"});if(i.status!==0||!w(o)){let a=(i.stderr??"").trim().split(`
5
- `).slice(-3).join("; "),l=i.error?`tar failed: ${i.error.message}`:i.signal?`tar was stopped by ${i.signal}`:i.status!==0?`tar exited ${i.status}${a?`: ${a}`:""}`:`no ${f} in it`;throw new Ce(`Couldn't unpack the Reason Network download (${l}).`)}}ge(o,493),te(o,t,r)}finally{k(s,{recursive:!0,force:!0})}}function Ie(e,n){let t=e.lastIndexOf(Buffer.from("PK\x05\x06","latin1"));if(t<0||t+22>e.length)throw new Ce(H);let r=e.readUInt32LE(t+16);for(let s=e.readUInt16LE(t+10);s>0;s-=1){if(r+46>e.length||e.readUInt32LE(r)!==33639248)break;let o=e.readUInt16LE(r+28);if(e.toString("utf8",r+46,r+46+o)===n){let i=e.readUInt16LE(r+10),a=e.readUInt32LE(r+20),l=e.readUInt32LE(r+24),c=e.readUInt32LE(r+42);if(c+30>e.length||e.readUInt32LE(c)!==67324752)break;let d=c+30+e.readUInt16LE(c+26)+e.readUInt16LE(c+28);if(d+a>e.length)break;let h=e.subarray(d,d+a),P;try{P=i===0?Buffer.from(h):i===8?be(h):Buffer.alloc(0)}catch{break}if(i!==0&&i!==8||P.length!==l)break;return P}r+=46+o+e.readUInt16LE(r+30)+e.readUInt16LE(r+32)}throw new Ce(H)}function te(e,n,t){if(t!=="win32"||!w(n)){E(e,n);return}let r=R(n),s=(i)=>i.startsWith(`${Z(n)}.`)&&i.endsWith(".old");for(let i of ye(r).filter(s))try{k(u(r,i),{force:!0})}catch{}let o=`${n}.${process.pid}-${Date.now()}.old`;E(n,o);try{E(e,n)}catch(i){throw E(o,n),i}try{k(o,{force:!0})}catch{}}function Ae(e=process.env,n=m()){let t=e.REASON_NETWORK_HOME?.trim()||e.TINCAN_HOME?.trim();if(t)return t;let r=u(n,".reason","network"),s=u(n,".tincan");return!K(r)&&K(s)?s:r}var K=(e)=>w(u(e,"network.db"))||w(u(e,"tincan.db"));function Me(e,n=process.platform,t=Ne.native){let r=w(u(e,"network.db"))||!w(u(e,"tincan.db"));if(n==="win32"){let o=e;try{o=t(e),o=o.startsWith("\\\\?\\")?o.slice(4):o.startsWith("\\\\")?`UNC\\${o.slice(2)}`:o}catch{}return`\\\\.\\pipe\\${r?"reason-network":"tincan"}-${z(o)}`}let s=u(e,r?"network.sock":"tincan.sock");if(Buffer.byteLength(s)<100)return s;return u("/tmp",`${r?"reason-network":"tincan"}-${process.getuid?.()??0}`,`${z(s)}.sock`)}function z(e){let n=0xcbf29ce484222325n;for(let t of Buffer.from(e))n=BigInt.asUintN(64,(n^BigInt(t))*0x100000001b3n);return n.toString(16).padStart(16,"0")}class Xr extends Error{code;constructor(e,n){super(e);this.code=n}}function Zi(e){return e instanceof Xr&&/isn't registered/.test(e.message)}var re="not_in_team",se=15000,Le=new Set(["who","team","inbox","unread","held"]),Be=90000,De="Reason Network on this computer closed the connection";class x{socket;nextId=1;buffer="";pending=new Map;closed=null;hungUp=!1;constructor(e){this.socket=e;e.setEncoding("utf8"),e.on("data",(t)=>this.read(t));let n=(t)=>{this.closed=t;for(let r of this.pending.values())r.reject(t);this.pending.clear()};e.on("error",(t)=>n(t)),e.on("close",()=>n(Error(this.hungUp?"the connection to Reason Network on this computer was closed here":De)))}static open(e){return new Promise((n,t)=>{let r=Se(e);r.once("connect",()=>n(new x(r))),r.once("error",t)})}read(e){this.buffer+=e;let n=this.buffer.indexOf(`
2
+ import{io}from"./vm-hands-entry-lite-cmmb9k3g.js";import{spawnSync as p}from"child_process";import{createHash as de}from"crypto";import{chmodSync as ge,closeSync as pe,existsSync as w,linkSync as me,lstatSync as fe,mkdirSync as Q,mkdtempSync as he,openSync as we,readdirSync as ye,readFileSync as Ee,readSync as ke,realpathSync as Ne,renameSync as E,rmSync as k,statSync as Y,symlinkSync as W,writeFileSync as I}from"fs";import{connect as Se}from"net";import{homedir as f}from"os";import{basename as Z,dirname as R,join as u}from"path";import{inflateRawSync as be}from"zlib";var oe=new Set(["<","\u02C2","\u1438","\u2039","\u3008","\u276C","\u276E","\u2770","\u16B2","\u2D66","\uD800\uDF2D","\uD81A\uDEEC","\uD834\uDE36","\u27E8","\u27EA","\u29FC","\u3008","\u300A","\uFE64","\uFF1C"]),D=(e)=>e===" "||e==="\t"||e===`
3
+ `||e==="\f"||e==="\r",ie=(e)=>e.length===1&&e>="!"&&e<="~",G=(e)=>e.length===1&&/[A-Za-z]/.test(e);function J(e){let n=Array.from(e),t=(r)=>{let s=r+Math.min(n.length-r,64),o=r;while(o<s&&(D(n[o])||n[o]==="/"))o+=1;let i=o-r,a=[];while(o<s&&!D(n[o])&&n[o]!==">"&&n[o]!=="\uFF1E")a.push(n[o++]);return i+a.length===s-r&&n.length-r>64||!a.every(ie)||ae(a)};return n.map((r,s)=>oe.has(r)&&t(s+1)?"[":r).join("")}function ae(e){let n=1;for(let t of e){let r=t==="0"?"o":t==="3"?"e":t==="4"||t==="@"?"a":t==="5"||t==="$"?"s":G(t)?t.toLowerCase():t,s="reason".indexOf(r),o=s<0?0:1<<s;if(n=1|(G(t)?0:n)|(n&o)<<1,n&64)return!0}return!1}var ce=/[\u0000-\u0008\u000B-\u001F\u007F-\u009F]/g;function U(e){return J(e.replace(ce," ").replace(/[\u2028\u2029]/g," "))}var le=["CLAUDECODE","CLAUDE_CODE_SESSION_ID","CODEX_THREAD_ID","CODEX_SESSION_ID","GROK_SESSION_ID","GROK_WORKSPACE_ROOT","GEMINI_CLI","CURSOR_AGENT","OPENCODE","COPILOT_CLI","COPILOT_AGENT_SESSION_ID","AI_AGENT"];function ue(e=process.env,n=Boolean(process.stderr.isTTY)){let t=le.some((r)=>e[r]!==void 0)||Object.keys(e).some((r)=>r.startsWith("CODEX_SANDBOX"))||Boolean(e.REASON_NETWORK_AGENT)||Boolean(e.TINCAN_AGENT);return n&&!t}function Fe(e,n=ue()){return n?e:U(e)}class Ce extends Error{}var m="reason-network",g="0.12.11",_e={"aarch64-apple-darwin":"4626279ee457d15566bcee47ba11ce270d545bd1137c48208e0df3878606197b","x86_64-apple-darwin":"17ea926bce47913882c7b3ba0ae42d03694a7720518ee726e4ae3028bb293f62","aarch64-unknown-linux-musl":"3bc31d0db0263ac27020ac4598415e3e16cfb672d6a9a9ca093775d300ef4fc2","x86_64-unknown-linux-musl":"0ab91ac33af6704f4836bbedc5b55bed4b0a9fdfdc8da1a1d16db8a07d2fc1c4","aarch64-pc-windows-msvc":"91c4c06ebbae929af5494efe9b506b6abc8bdd2989c5d246515bc5133932e5bd","x86_64-pc-windows-msvc":"ff01324b27ebcac0f698df59d2fdc8ef6e3094ead09210c6fa39238cd4cdbee7"},Re="https://reasonmachines.com/cli/engine",N="REASON_AGENT_NETWORK_BIN";function ve(e=process.platform,n=process.arch){let t=n==="arm64"?"aarch64":n==="x64"?"x86_64":null,r=e==="darwin"?"apple-darwin":e==="linux"?"unknown-linux-musl":e==="win32"?"pc-windows-msvc":null;return t&&r?`${t}-${r}`:null}function ee(e){return`${m}-${e}${e.endsWith("-windows-msvc")?".zip":".tar.gz"}`}function xe(e){let n=_e[e];return n?{url:`${Re}/${g}/${ee(e)}`,sha256:n}:null}function A(e){let n=p(e,["--version"],{encoding:"utf8",timeout:5000}),[t,r]=n.status===0?n.stdout.trim().split(/\s+/):[];return t===m?r??null:null}function _(e,n){let t=e.split(".").map(Number),r=n.split(".").map(Number);for(let s=0;s<3;s+=1)if((t[s]??0)!==(r[s]??0))return(t[s]??0)>(r[s]??0);return!0}function S(e=f(),n=process.platform){return u(e,".reason","bin",`${m}${n==="win32"?".exe":""}`)}var v=process.platform==="win32"?`~\\.local\\bin\\${m}.exe`:`~/.local/bin/${m}`;async function Te(e=process.env,n=()=>{}){if(e[N])return e[N];let t=S(),r=T(),s=r?.path===t&&y(t)===r.fingerprint?r:null,o=s?.kept,i=M(e)?null:$e(o);if(s?.version===g&&!i)return t;let a=w(t)?A(t):null;if(i){let c=A(i.path),d=a&&_(a,g)?a:g;if(!c||!_(d,c)){if(c)n(`Reason Network: ${v} (${c}) is newer than the version \`reason network\` keeps up to date (${d}), so it was left as it is.`);o=i.fingerprint,i=null}}if(s?.version===g&&!i)return F(t,o);if(!a||!_(a,g))await ne(t);let l=p(t,["setup",...M(e)?["--no-service"]:[]],{env:await C(e),encoding:"utf8",timeout:60000});if(l.status!==0){let c=b((l.stderr||l.stdout||"").trim().split(`
4
+ `).pop()??"");if(s)return B(f(),{...s,fingerprint:y(t)??s.fingerprint,...o?{kept:o}:{}}),n(i?`Reason Network: couldn't move your agents off ${v}${c?` (${c})`:""}; they keep using it. Run reason network to try again.`:`Reason Network: couldn't finish setting up on this computer${c?` (${c})`:""}. Run reason network to try again.`),t;throw new Ce(`Couldn't connect this computer's agents to the network${c?` (${c})`:""}. Run reason network to try again.`)}if(i)o=Pe(i,t,n);return F(t,o),p(t,["stop"],{env:e,stdio:"ignore",timeout:15000}),t}function $e(e){let n=u(f(),".local","bin",Z(S())),t;try{t=fe(n)}catch{return null}let r=`${t.size}:${t.mtimeMs}:${t.ino}`;if(!t.isFile()||r===e)return null;try{let s=Y(S());if(s.ino===t.ino&&s.dev===t.dev)return null}catch{}try{let s=Buffer.alloc(2),o=we(n,"r");try{ke(o,s,0,2,0)}finally{pe(o)}if(s.toString("latin1")==="#!")return null}catch{return null}return{path:n,fingerprint:r}}function Pe(e,n,t){let r=`${e.path}.reason-${process.pid}`;try{if(k(r,{force:!0}),process.platform==="win32"){try{W(n,r,"file")}catch{me(n,r)}te(r,e.path,"win32")}else W(n,r),E(r,e.path);t(`Reason Network: your agents on this computer now use the version \`reason network\` keeps up to date (${v} points to it). Restart a running agent to pick it up.`);return}catch(s){return k(r,{force:!0}),t(`Reason Network: your agents on this computer now use the version \`reason network\` keeps up to date, but ${v} couldn't be pointed to it (${s instanceof Error?s.message:String(s)}). Remove that copy so it can't take them back.`),e.fingerprint}}async function fl(e={}){let n=e.env??process.env,t=e.home??f(),r=S(t),s=T(t);if(n[N]||s?.path!==r||y(r)!==s.fingerprint)return!1;if(s.version===g)return!1;let o=A(r);if(o&&_(o,g))return!1;return await ne(r),B(t,{...s,fingerprint:y(r)??""}),e.beforeRestart?.(),p(r,["stop"],{env:n,stdio:"ignore",timeout:15000}),!0}async function C(e){if(e[j])return e;try{let{defaultWorkerServiceHost:n,workerServiceLauncher:t}=await import("./serve-service-hcc0zvg8.js");return{...e,[j]:t(n(f()),e)}}catch{return e}}var j="REASON_NETWORK_REASON_BIN";function M(e=process.env){return Boolean(e.REASON_NETWORK_NO_SERVICE||e.TINCAN_NO_SERVICE)}var L=(e)=>u(e,".reason","ask-engine.json");function y(e){try{let n=Y(e);return`${n.size}:${n.mtimeMs}:${n.ino}`}catch{return null}}function ml(e=f()){return T(e)?.version??null}function T(e=f()){try{let n=JSON.parse(Ee(L(e),"utf8"));if(typeof n.path!=="string"||typeof n.fingerprint!=="string"||typeof n.version!=="string")return null;return{path:n.path,fingerprint:n.fingerprint,version:n.version,...typeof n.kept==="string"?{kept:n.kept}:{}}}catch{return null}}function B(e,n){Q(R(L(e)),{recursive:!0}),I(L(e),JSON.stringify(n))}function F(e,n){let t=y(e);if(t)B(f(),{path:e,fingerprint:t,version:g,...n?{kept:n}:{}});return e}async function ne(e){let n=ve(),t=n?xe(n):null;if(!n||!t)throw new Ce(`Reason Network runs on macOS, Linux and Windows (arm64 or x64); this is ${process.platform} ${process.arch}.`);let{url:r,sha256:s}=t,o;try{let a=await fetch(r,{signal:AbortSignal.timeout(120000)});if(!a.ok)throw Error(`HTTP ${a.status}`);o=Buffer.from(await a.arrayBuffer())}catch(a){let l=a instanceof Error&&a.name==="TimeoutError"?"no download within 2 minutes":a instanceof Error?a.message.replace(/\.$/,""):String(a);throw new Ce(`Couldn't download Reason Network from ${new URL(r).host} (${l}). Check the connection and run reason network again.`)}if(de("sha256").update(o).digest("hex")!==s)throw new Ce("The Reason Network download didn't match its checksum, so it wasn't installed.");Oe(o,n,e)}var H="Couldn't unpack the Reason Network download.";function Oe(e,n,t,r=process.platform){Q(R(t),{recursive:!0});let s=he(u(R(t),".reason-engine-"));try{let o=u(s,m);if(ee(n).endsWith(".zip"))o=u(s,`${m}.exe`),I(o,Ie(e,`${m}.exe`));else{I(u(s,"engine.tar.gz"),e);let i=p("tar",["--no-same-owner","-xzf",u(s,"engine.tar.gz"),"-C",s],{encoding:"utf8"});if(i.status!==0||!w(o)){let a=(i.stderr??"").trim().split(`
5
+ `).slice(-3).join("; "),l=i.error?`tar failed: ${i.error.message}`:i.signal?`tar was stopped by ${i.signal}`:i.status!==0?`tar exited ${i.status}${a?`: ${a}`:""}`:`no ${m} in it`;throw new Ce(`Couldn't unpack the Reason Network download (${l}).`)}}ge(o,493),te(o,t,r)}finally{k(s,{recursive:!0,force:!0})}}function Ie(e,n){let t=e.lastIndexOf(Buffer.from("PK\x05\x06","latin1"));if(t<0||t+22>e.length)throw new Ce(H);let r=e.readUInt32LE(t+16);for(let s=e.readUInt16LE(t+10);s>0;s-=1){if(r+46>e.length||e.readUInt32LE(r)!==33639248)break;let o=e.readUInt16LE(r+28);if(e.toString("utf8",r+46,r+46+o)===n){let i=e.readUInt16LE(r+10),a=e.readUInt32LE(r+20),l=e.readUInt32LE(r+24),c=e.readUInt32LE(r+42);if(c+30>e.length||e.readUInt32LE(c)!==67324752)break;let d=c+30+e.readUInt16LE(c+26)+e.readUInt16LE(c+28);if(d+a>e.length)break;let h=e.subarray(d,d+a),P;try{P=i===0?Buffer.from(h):i===8?be(h):Buffer.alloc(0)}catch{break}if(i!==0&&i!==8||P.length!==l)break;return P}r+=46+o+e.readUInt16LE(r+30)+e.readUInt16LE(r+32)}throw new Ce(H)}function te(e,n,t){if(t!=="win32"||!w(n)){E(e,n);return}let r=R(n),s=(i)=>i.startsWith(`${Z(n)}.`)&&i.endsWith(".old");for(let i of ye(r).filter(s))try{k(u(r,i),{force:!0})}catch{}let o=`${n}.${process.pid}-${Date.now()}.old`;E(n,o);try{E(e,n)}catch(i){throw E(o,n),i}try{k(o,{force:!0})}catch{}}function Ae(e=process.env,n=f()){let t=e.REASON_NETWORK_HOME?.trim()||e.TINCAN_HOME?.trim();if(t)return t;let r=u(n,".reason","network"),s=u(n,".tincan");return!K(r)&&K(s)?s:r}var K=(e)=>w(u(e,"network.db"))||w(u(e,"tincan.db"));function Me(e,n=process.platform,t=Ne.native){let r=w(u(e,"network.db"))||!w(u(e,"tincan.db"));if(n==="win32"){let o=e;try{o=t(e),o=o.startsWith("\\\\?\\")?o.slice(4):o.startsWith("\\\\")?`UNC\\${o.slice(2)}`:o}catch{}return`\\\\.\\pipe\\${r?"reason-network":"tincan"}-${z(o)}`}let s=u(e,r?"network.sock":"tincan.sock");if(Buffer.byteLength(s)<100)return s;return u("/tmp",`${r?"reason-network":"tincan"}-${process.getuid?.()??0}`,`${z(s)}.sock`)}function z(e){let n=0xcbf29ce484222325n;for(let t of Buffer.from(e))n=BigInt.asUintN(64,(n^BigInt(t))*0x100000001b3n);return n.toString(16).padStart(16,"0")}class Xr extends Error{code;constructor(e,n){super(e);this.code=n}}function Zi(e){return e instanceof Xr&&/isn't registered/.test(e.message)}var re="not_in_team",se=15000,Le=new Set(["who","team","inbox","unread","held"]),Be=90000,De="Reason Network on this computer closed the connection";class x{socket;nextId=1;buffer="";pending=new Map;closed=null;hungUp=!1;constructor(e){this.socket=e;e.setEncoding("utf8"),e.on("data",(t)=>this.read(t));let n=(t)=>{this.closed=t;for(let r of this.pending.values())r.reject(t);this.pending.clear()};e.on("error",(t)=>n(t)),e.on("close",()=>n(Error(this.hungUp?"the connection to Reason Network on this computer was closed here":De)))}static open(e){return new Promise((n,t)=>{let r=Se(e);r.once("connect",()=>n(new x(r))),r.once("error",t)})}read(e){this.buffer+=e;let n=this.buffer.indexOf(`
6
6
  `);while(n>=0){let t=this.buffer.slice(0,n);if(this.buffer=this.buffer.slice(n+1),n=this.buffer.indexOf(`
7
7
  `),!t.trim())continue;let r;try{r=JSON.parse(t)}catch{continue}if(typeof r.id!=="number")continue;let s=this.pending.get(r.id);if(!s)continue;if(this.pending.delete(r.id),r.ok){s.resolve(r.result);continue}let o=r.error??"Reason Network on this computer refused the request",i=typeof r.code==="string"?r.code:/not (in|connected to) a team/i.test(o)?re:null;s.reject(new Xr(b(o),i))}}call(e,n={},t=se){if(this.closed)return Promise.reject(this.closed);let r=this.nextId++;return this.socket.write(`${JSON.stringify({id:r,op:e,...n})}
8
8
  `),new Promise((s,o)=>{let i=setTimeout(()=>{this.pending.delete(r),o(Error(`Reason Network on this computer didn't answer ${e} within ${Math.round(t/1000)}s`))},t);this.pending.set(r,{resolve:(a)=>{clearTimeout(i),s(a)},reject:(a)=>{clearTimeout(i),o(a)}})})}get isClosed(){return this.closed!==null}close(){this.hungUp=!0,this.socket.end()}}var O=/^(Claude Code|Grok|Codex) \u00B7 (.*)$/,Ge={"Claude Code":"claude-code",Grok:"grok",Codex:"codex"},Je=/^ask-[0-9a-f]{6}$/;function V(e){return{id:e.id,from:e.from,fromAgent:e.from_agent,to:e.to,replyTo:e.reply_to,body:e.body,sentAt:e.sent_at}}function q(e){return{person:e.person,machine:e.machine,isMe:e.is_me,online:e.online,link:e.link,rttMs:e.rtt_ms}}class Nt{engine;env;connection=null;waits=new Set;constructor(e,n){this.engine=e;this.env=n}static async open(e=process.env,n){return new Nt(await Te(e,n),e)}static openInstalled(e=process.env){if(e[N])return new Nt(e[N],e);let n=S(),t=T();return t?.path===n&&y(n)===t.fingerprint?new Nt(n,e):null}socketPath(){return Me(Ae(this.env))}async open(){try{return await x.open(this.socketPath())}catch{return p(this.engine,["who","--json"],{env:this.env,stdio:"ignore",timeout:15000}),await x.open(this.socketPath())}}async call(e,n={},t){if(!this.connection||this.connection.isClosed)this.connection=await this.open();try{return await this.connection.call(e,n,t)}catch(r){if(!/closed|ECONNRESET|EPIPE/.test(String(r)))throw r;if(this.connection=await this.open(),!Le.has(e))throw r;return await this.connection.call(e,n)}}async waitOn(e,n){let t=await this.open();this.waits.add(t);try{return await t.call(e,n,n.wait_secs*1000+se)}finally{this.waits.delete(t),t.close()}}close(){this.connection?.close(),this.connection=null;for(let e of this.waits)e.close();this.waits.clear()}async team(){try{let{team_id:e,messages:n,...t}=await this.call("team"),r=t.machines.find((o)=>o.is_me)?.endpoint,s=Array.isArray(n)?n.flatMap((o)=>{let i=io.safeParse(o);return i.success?[i.data]:[]}):null;return{...t,...typeof e==="string"&&e?{teamId:e}:{},machines:t.machines.map(q),...typeof r==="string"&&r?{endpoint:r}:{},...s?{messageCounts:s}:{}}}catch(e){if(e instanceof Xr&&e.code===re)return null;throw e}}async snapshot(e={}){let n=await this.call("who",{all:Boolean(e.all),...e.filter?{filter:e.filter}:{}}),t=new Set(n.sessions.filter((s)=>O.test(s.doing??"")).map((s)=>`${s.person}/${s.machine}:${s.cwd}`)),r=n.sessions.filter((s)=>e.all||!Je.test(s.name)).filter((s)=>O.test(s.doing??"")||!t.has(`${s.person}/${s.machine}:${s.cwd}`)).map((s)=>{let o=O.exec(s.doing??"");return{address:s.address,name:s.name,person:s.person,machine:s.machine,agent:o?Ge[o[1]]:s.agent,cwd:s.cwd,repo:s.repo,branch:s.branch,status:o?o[2]==="ready for work"?"idle":o[2]==="stopped"?"offline":"busy":s.status,since:s.since,doing:o?o[2]:s.doing,isMe:s.is_me,worker:Boolean(o),tier:s.tier??null}});return{team:n.team,person:n.person,machine:n.machine,machines:n.machines.map(q),sessions:r}}async send(e,n,t={}){if(!t.from)await this.call("hook",{agent:"cli",event:"stop",session_id:"terminal",name:"terminal",cwd:process.cwd(),mail:!1});let r=await this.call("send",{from:t.from??"cli:terminal",to:e,body:n,...t.replyTo?{reply_to:t.replyTo}:{},wake:t.wake??!0,...t.notify?{notify:!0}:{}});return{ids:r.ids,recipients:r.recipients.map((s)=>s.address),deliveries:r.recipients.map((s)=>({address:s.address,state:s.state,note:s.note??""}))}}async session(e,n={}){let t=n.agent??"cli",r=(a,l={})=>this.call("hook",{agent:t,event:a,session_id:e,name:e,cwd:process.cwd(),mail:!1,...l}),s=await r("stop"),o=`${t}:${e}`,i=s.address??e;return{name:e,get address(){return i},next:async(a)=>(await this.waitOn("inbox",{key:o,wait_secs:a,peek:!0})).messages.map(V),ack:async(a)=>{if(a.length)await this.call("delivered",{key:o,ids:a})},busy:async(a)=>{if(await r("prompt"),a)await r("doing",{doing:a})},idle:async(a)=>{if(await r("stop"),a)await r("doing",{doing:a})},doing:async(a)=>{await r("doing",{doing:a})},end:async()=>{await r("end")},rename:async(a)=>{i=(await this.call("set_status",{key:o,name:a})).address},send:(a,l,c,d)=>this.send(a,l,{from:o,...c?{replyTo:c}:{},...d?.notify?{notify:!0}:{}})}}async inbox(e={}){let t=(await this.waitOn("inbox",{key:"cli:terminal",wait_secs:e.waitSeconds??0,peek:!0}).catch((r)=>{if(/isn't registered/.test(String(r)))return{messages:[]};throw r})).messages.map(V);if(t.length&&!e.peek)await this.call("delivered",{key:"cli:terminal",ids:t.map((r)=>r.id)});return t}async link(e={}){return await this.call("link",{new:Boolean(e.new)})}async changeTeam(e,n){try{return await this.call(e,n,Be)}finally{this.close()}}async changeOntoTeam(e,n){try{await this.changeTeam(e,n)}catch(t){if(!/closed|ECONNRESET|EPIPE/.test(String(t)))throw t;if(await this.team())return;await this.changeTeam(e,n)}}async createTeam(e,n){await this.changeOntoTeam("create_team",{name:e,person:n})}async join(e,n){await this.changeOntoTeam("join",{ticket:e,person:n})}async leave(){return await this.changeTeam("leave",{force:!0})}async remove(e){return await this.call("remove",{who:e})}endpoint(){let e=p(this.engine,["endpoint"],{encoding:"utf8",env:this.env,timeout:30000}),n=e.status===0?e.stdout.trim():"";if(!n)throw new Ce(`Reason Network on this computer couldn't say its endpoint${X(e)}.`);return n}async enterTeam(e,n,t){let r=t?{proof:t}:{},[s,o]="create"in e?["create_team",{name:e.create,person:n,...r}]:["join",{ticket:e.join,person:n,...r}],i=null;for(let a=0;a<2&&!i?.person;a+=1)try{i=await this.changeTeam(s,o)}catch(l){let c=String(l),d=l instanceof Xr&&l.code?l.code:/\(same_account_needs_owner\)/.test(c)?"same_account_needs_owner":/already in this team/.test(c)?"name_taken":null;if(d==="same_account_needs_owner")return{state:"needs_owner"};if(d==="name_taken")return{state:"name_taken"};if(!/closed|ECONNRESET|EPIPE/.test(c))throw l;let h=await this.team();if(h)i={name:h.name,person:h.person,machine:h.machine}}if(!i?.person)throw new Ce("Reason Network on this computer didn't join the team. Run reason network again.");return{state:"entered",teamId:i.team_id??"",teamName:i.team_name||i.name||"",person:i.person??n,machine:i.machine??""}}async setupAgents(){this.close();let e=p(this.engine,["setup",...M(this.env)?["--no-service"]:[]],{encoding:"utf8",env:await C(this.env),timeout:60000});if(e.status!==0)throw new Ce(`Couldn't connect this computer's agents to the network${X(e)}.`);return[...e.stdout.matchAll(/^ {2}([^:\n]+): (?!skipped)/gm)].map((n)=>n[1]).filter((n)=>n!=="service")}async setup(e,n={}){return this.passthrough(["setup",...e],n,await C(this.env))}passthrough(e,n={},t=this.env){this.close();let r=p(this.engine,e,{stdio:["inherit","pipe",n.person?"inherit":"pipe"],encoding:"utf8",env:t});if(!n.quiet||r.status!==0)process.stdout.write(Fe(b(r.stdout??""))),process.stderr.write(Fe(b(r.stderr??"")));return r.status??1}}function X(e){let n=b(((e.stderr||e.stdout)??"").trim().split(`