@reason-machines/cli-linux-x64 0.2.459 → 0.2.463

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/THIRD_PARTY_NOTICES.txt +2 -2
  2. package/bin/reason +1 -1
  3. package/bin/runtime/srt/sandbox-runtime.mjs +40 -40
  4. package/bin/runtime/srt/vendor/seccomp/x64/apply-seccomp +0 -0
  5. package/bin/vm-hands/api-7xy672j8.js +2 -0
  6. package/bin/vm-hands/api-credentials-bbmmmkwx.js +2 -0
  7. package/bin/vm-hands/connect-cli-2rvwbw01.js +2 -0
  8. package/bin/vm-hands/credentials-gr9jn270.js +2 -0
  9. package/bin/vm-hands/custom-endpoint-device-r2nn1xj9.js +2 -0
  10. package/bin/vm-hands/desktop-account-3cc0bhw8.js +2 -0
  11. package/bin/vm-hands/device-workspace-s50q53sz.js +2 -0
  12. package/bin/vm-hands/{fsevents-5c1c8fc6.js → fsevents-sxsgn7s9.js} +1 -1
  13. package/bin/vm-hands/hands-worker-source-k8v5kmmw.js +2 -0
  14. package/bin/vm-hands/{index-0dp6x9h4.js → index-d5n50g8b.js} +19 -19
  15. package/bin/vm-hands/install-receipt-gvdzhm17.js +2 -0
  16. package/bin/vm-hands/local-automation-34vdgq8d.js +2 -0
  17. package/bin/vm-hands/local-capabilities-41n0pspr.js +2 -0
  18. package/bin/vm-hands/local-desktop-users-qskbh51j.js +2 -0
  19. package/bin/vm-hands/local-display-mac-m77mftqy.js +2 -0
  20. package/bin/vm-hands/local-display-session-g81fwns5.js +2 -0
  21. package/bin/vm-hands/local-display-video-1xd1fqch.js +2 -0
  22. package/bin/vm-hands/local-managed-process-30k1x92d.js +2 -0
  23. package/bin/vm-hands/local-pty-session-k6kab3tc.js +2 -0
  24. package/bin/vm-hands/managed-runtime-hk53v8j5.js +2 -0
  25. package/bin/vm-hands/network-contract-y2eybfhn.js +2 -0
  26. package/bin/vm-hands/package-8v6gpwas.js +2 -0
  27. package/bin/vm-hands/permissions-t3e7bp9x.js +2 -0
  28. package/bin/vm-hands/reason-hands-protocol-r3wtcjed.js +2 -0
  29. package/bin/vm-hands/serve-service-hr1x43p8.js +2 -0
  30. package/bin/vm-hands/status-h3bk00m3.js +10 -0
  31. package/bin/vm-hands/version-qja79041.js +2 -0
  32. package/bin/vm-hands/vm-hands-entry-lite-03d1fhxv.js +3 -0
  33. package/bin/vm-hands/{vm-hands-entry-lite-eycfxb2c.js → vm-hands-entry-lite-0yj63trb.js} +12 -12
  34. package/bin/vm-hands/{vm-hands-entry-lite-njs8k65s.js → vm-hands-entry-lite-1f0v3jb4.js} +4 -4
  35. package/bin/vm-hands/{vm-hands-entry-lite-4g9k69a7.js → vm-hands-entry-lite-1k16ct2y.js} +5 -5
  36. package/bin/vm-hands/{vm-hands-entry-lite-hc5ccj2h.js → vm-hands-entry-lite-1y629eqh.js} +5 -5
  37. package/bin/vm-hands/{vm-hands-entry-lite-r7zs4ce2.js → vm-hands-entry-lite-3krzmhkk.js} +2 -2
  38. package/bin/vm-hands/vm-hands-entry-lite-3pxmmb7z.js +3 -0
  39. package/bin/vm-hands/{vm-hands-entry-lite-gcjjhsm2.js → vm-hands-entry-lite-44qha2rt.js} +2 -2
  40. package/bin/vm-hands/{vm-hands-entry-lite-2ctydt7v.js → vm-hands-entry-lite-4x8j1xp9.js} +9 -9
  41. package/bin/vm-hands/{vm-hands-entry-lite-t5q30ne0.js → vm-hands-entry-lite-52x189kf.js} +2 -2
  42. package/bin/vm-hands/{vm-hands-entry-lite-ba3qq0bs.js → vm-hands-entry-lite-5agyspqp.js} +4 -4
  43. package/bin/vm-hands/{vm-hands-entry-lite-j4kapgvr.js → vm-hands-entry-lite-5zdybh8s.js} +1 -1
  44. package/bin/vm-hands/{vm-hands-entry-lite-g9z467dk.js → vm-hands-entry-lite-7ja63pfz.js} +3 -3
  45. package/bin/vm-hands/{vm-hands-entry-lite-1f2cam25.js → vm-hands-entry-lite-8qvsnkvv.js} +4 -4
  46. package/bin/vm-hands/vm-hands-entry-lite-9fzydv1p.js +2 -0
  47. package/bin/vm-hands/{vm-hands-entry-lite-etbsze1k.js → vm-hands-entry-lite-9vv5knh4.js} +3 -3
  48. package/bin/vm-hands/{vm-hands-entry-lite-3pnjdh8m.js → vm-hands-entry-lite-abfb6nms.js} +1 -1
  49. package/bin/vm-hands/{vm-hands-entry-lite-3rwtqr28.js → vm-hands-entry-lite-arrmd8qx.js} +2 -2
  50. package/bin/vm-hands/vm-hands-entry-lite-b139fhbg.js +5 -0
  51. package/bin/vm-hands/{vm-hands-entry-lite-tqc2ezda.js → vm-hands-entry-lite-b8yapqfn.js} +5 -5
  52. package/bin/vm-hands/vm-hands-entry-lite-bvb4nvxr.js +3 -0
  53. package/bin/vm-hands/{vm-hands-entry-lite-mv9nkj11.js → vm-hands-entry-lite-c7ka2d1c.js} +3 -3
  54. package/bin/vm-hands/{vm-hands-entry-lite-9sa1knn7.js → vm-hands-entry-lite-cf1x5cbr.js} +2 -2
  55. package/bin/vm-hands/{vm-hands-entry-lite-07vak0wy.js → vm-hands-entry-lite-d2fveq6h.js} +2 -2
  56. package/bin/vm-hands/{vm-hands-entry-lite-2j7he8gn.js → vm-hands-entry-lite-eay4tbg0.js} +33 -33
  57. package/bin/vm-hands/{vm-hands-entry-lite-4fwf7wgb.js → vm-hands-entry-lite-egax7vw4.js} +2 -2
  58. package/bin/vm-hands/{vm-hands-entry-lite-dh8f2h2d.js → vm-hands-entry-lite-h6rhk6h1.js} +5 -5
  59. package/bin/vm-hands/{vm-hands-entry-lite-a3w8m8nb.js → vm-hands-entry-lite-hzh8fdxx.js} +3 -3
  60. package/bin/vm-hands/{vm-hands-entry-lite-jcf61cb4.js → vm-hands-entry-lite-jyvmw8b7.js} +5 -5
  61. package/bin/vm-hands/vm-hands-entry-lite-k83rkcys.js +3 -0
  62. package/bin/vm-hands/{vm-hands-entry-lite-b8k78r34.js → vm-hands-entry-lite-kz48x6p0.js} +32 -32
  63. package/bin/vm-hands/{vm-hands-entry-lite-n68srzhw.js → vm-hands-entry-lite-m753n72c.js} +16 -16
  64. package/bin/vm-hands/{vm-hands-entry-lite-5rx9b5rg.js → vm-hands-entry-lite-me5w88km.js} +14 -9
  65. package/bin/vm-hands/{vm-hands-entry-lite-9z3v15d2.js → vm-hands-entry-lite-mmrdd8gk.js} +2 -2
  66. package/bin/vm-hands/{vm-hands-entry-lite-n4x7reax.js → vm-hands-entry-lite-n1k1njzh.js} +2 -2
  67. package/bin/vm-hands/{vm-hands-entry-lite-2yz6b0n3.js → vm-hands-entry-lite-np07qyeq.js} +2 -2
  68. package/bin/vm-hands/{vm-hands-entry-lite-d9g1pzzx.js → vm-hands-entry-lite-r3yp6cr9.js} +3 -3
  69. package/bin/vm-hands/{vm-hands-entry-lite-em7mk9tn.js → vm-hands-entry-lite-rfz60hb3.js} +2 -2
  70. package/bin/vm-hands/{vm-hands-entry-lite-9z0skx2w.js → vm-hands-entry-lite-rzhqftyg.js} +2 -2
  71. package/bin/vm-hands/{vm-hands-entry-lite-2sx9smm8.js → vm-hands-entry-lite-t0exw1jk.js} +20 -20
  72. package/bin/vm-hands/{vm-hands-entry-lite-dcxvxpne.js → vm-hands-entry-lite-tn8v3yfj.js} +1 -1
  73. package/bin/vm-hands/{vm-hands-entry-lite-qyp2a4c3.js → vm-hands-entry-lite-txd50spx.js} +2 -2
  74. package/bin/vm-hands/{vm-hands-entry-lite-8j7p91hr.js → vm-hands-entry-lite-vdhgwmmp.js} +2 -2
  75. package/bin/vm-hands/{vm-hands-entry-lite-12rzrd95.js → vm-hands-entry-lite-wrvz9jxy.js} +2 -2
  76. package/bin/vm-hands/{vm-hands-entry-lite-vrp0t24n.js → vm-hands-entry-lite-x9wy77vd.js} +2 -2
  77. package/bin/vm-hands/vm-hands-entry-lite.js +2 -2
  78. package/bin/vm-hands/{vm-hands-executor-81e32jtv.js → vm-hands-executor-ksf4ragj.js} +3 -3
  79. package/bin/vm-hands/vm-hands-op-runner-q5x9gpmt.js +2 -0
  80. package/bin/vm-hands/{vm-hands-runtime-w8j74jv4.js → vm-hands-runtime-dg696564.js} +3 -3
  81. package/bin/vm-hands/worker-preview-readiness-6hzzjnk7.js +2 -0
  82. package/bin/vm-hands/worker-sandbox-1g7jheqm.js +2 -0
  83. package/package.json +1 -1
  84. package/bin/vm-hands/api-credentials-skdwhmrz.js +0 -2
  85. package/bin/vm-hands/api-s23qevwq.js +0 -2
  86. package/bin/vm-hands/connect-cli-3t4w2fht.js +0 -2
  87. package/bin/vm-hands/custom-endpoint-device-2s9qxe6t.js +0 -2
  88. package/bin/vm-hands/desktop-account-nb7g2ek5.js +0 -2
  89. package/bin/vm-hands/device-workspace-6av4wa2e.js +0 -2
  90. package/bin/vm-hands/hands-worker-source-v7ds6vp1.js +0 -2
  91. package/bin/vm-hands/install-receipt-4sjr0jhg.js +0 -2
  92. package/bin/vm-hands/local-automation-16beqqtc.js +0 -2
  93. package/bin/vm-hands/local-capabilities-5prfxmwj.js +0 -2
  94. package/bin/vm-hands/local-desktop-users-2azpqr2m.js +0 -2
  95. package/bin/vm-hands/local-display-mac-1ddx6s3j.js +0 -2
  96. package/bin/vm-hands/local-display-session-9mkfnt2c.js +0 -2
  97. package/bin/vm-hands/local-display-video-pg5tzfwz.js +0 -2
  98. package/bin/vm-hands/local-managed-process-0ay1z599.js +0 -2
  99. package/bin/vm-hands/local-pty-session-gvnfgrxt.js +0 -2
  100. package/bin/vm-hands/managed-runtime-wr322d0v.js +0 -2
  101. package/bin/vm-hands/network-contract-8fkzm0t0.js +0 -2
  102. package/bin/vm-hands/package-k6jdrvn6.js +0 -2
  103. package/bin/vm-hands/permissions-q60sq4a3.js +0 -2
  104. package/bin/vm-hands/reason-hands-protocol-nkj7481a.js +0 -2
  105. package/bin/vm-hands/serve-service-vk54esde.js +0 -2
  106. package/bin/vm-hands/status-dyaae8hz.js +0 -10
  107. package/bin/vm-hands/version-x56y54v3.js +0 -2
  108. package/bin/vm-hands/vm-hands-entry-lite-04b2bmem.js +0 -2
  109. package/bin/vm-hands/vm-hands-entry-lite-9jgf223h.js +0 -5
  110. package/bin/vm-hands/vm-hands-entry-lite-cm497v4t.js +0 -3
  111. package/bin/vm-hands/vm-hands-entry-lite-hw26gewc.js +0 -3
  112. package/bin/vm-hands/vm-hands-entry-lite-t7pnq2e5.js +0 -3
  113. package/bin/vm-hands/vm-hands-op-runner-xdmre6dn.js +0 -2
  114. package/bin/vm-hands/worker-preview-readiness-kmwcrttt.js +0 -2
  115. package/bin/vm-hands/worker-sandbox-epre0fnv.js +0 -2
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{at,Dt,xr,bn,kr,vn,Sn,En}from"./vm-hands-entry-lite-dcxvxpne.js";import{Pe,rr,Xn,_t,Io,oe,Do,No,Qe,Te,en,Qn,wt,ni,ii,oi,si,ai,ci,li,ui,di,pi,hi,fi,mi,pe,Y,Re,q,gi,_i,yi,wi,bi,vi,Si,Ei,bt,xi}from"./vm-hands-entry-lite-tqc2ezda.js";import{ue,Z,O}from"./vm-hands-entry-lite-r7zs4ce2.js";import{P,zt}from"./vm-hands-entry-lite-j4kapgvr.js";import{lr,ji,Ui,nt,Hi,zi,qi,Wi,Vi,Gi,pr,hr,fr,dn,pn,mr,Ji,hn,gr,me,ge,Pt,_r,wr,Tt}from"./vm-hands-entry-lite-2sx9smm8.js";import{D,R,b}from"./vm-hands-entry-lite-b8k78r34.js";import{Mi,$i,ln,Bi,un,Fi,rt,cr}from"./vm-hands-entry-lite-mv9nkj11.js";import{K}from"./vm-hands-entry-lite-d9g1pzzx.js";import{He}from"./vm-hands-entry-lite-a3w8m8nb.js";import{j}from"./vm-hands-entry-lite-1f2cam25.js";import{vr,_n,to}from"./vm-hands-entry-lite-njs8k65s.js";import{yo,wo,ht,bo,vo,So,Eo,xo}from"./vm-hands-entry-lite-jcf61cb4.js";import{Pr,Bt,Tr,On,In}from"./vm-hands-entry-lite-gcjjhsm2.js";import{Lt,ze,Mt}from"./vm-hands-entry-lite-eycfxb2c.js";import{Rn,x,so}from"./vm-hands-entry-lite-2ctydt7v.js";import{go,_o}from"./vm-hands-entry-lite-vrp0t24n.js";import{Nt,xn,kn}from"./vm-hands-entry-lite-5rx9b5rg.js";import{ye,Xi,Yi}from"./vm-hands-entry-lite-dh8f2h2d.js";import{be}from"./vm-hands-entry-lite-yretc2th.js";import{It}from"./vm-hands-entry-lite-2yz6b0n3.js";import{ke,Kt,Jt,Zt,E}from"./vm-hands-entry-lite-qyp2a4c3.js";import{a,ie}from"./vm-hands-entry-lite-9sa1knn7.js";import{t,k,o,d,u,i,W,_,ee,s,n,$o}from"./vm-hands-entry-lite-ba3qq0bs.js";import{fe,Ne,Le,Me,nn}from"./vm-hands-entry-lite-8j7p91hr.js";import{$e}from"./vm-hands-entry-lite-mcjca0ez.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{request as kl}from"http";import{request as Tl}from"https";import{lookup as Dl}from"dns/promises";import{isIP as Nl}from"net";async function Ml(e){let l=new URL(e.url);return await new Promise((c,p)=>{let m=(l.protocol==="https:"?Tl:kl)(l,{method:"POST",headers:{...e.headers,"accept-encoding":"identity"},signal:e.signal,timeout:bn},(f)=>c({response:f,close:()=>{f.destroy(),m.destroy(),f.socket?.destroy()}}));m.once("error",p),m.once("timeout",()=>m.destroy(Object.assign(Error("custom_endpoint_timeout"),{code:"ETIMEDOUT"}))),m.end(e.body)})}var Qi=new Set(["ENOTFOUND","EAI_AGAIN","EAI_NONAME","EAI_NODATA","EAI_FAIL","DNSException"]),$l=new Set(["ECONNREFUSED","ETIMEDOUT","ECONNRESET","EHOSTUNREACH","ENETUNREACH","EHOSTDOWN","ENETDOWN","EPIPE","ECONNABORTED","EADDRNOTAVAIL","ConnectionRefused","ConnectionClosed","ConnectionTimedOut","Timeout"]);function es(e,l=0){if(!e||typeof e!=="object"||l>3)return null;let c=e.code;if(typeof c==="string"){if(Qi.has(c))return"custom_endpoint_host_not_found";if($l.has(c))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(c))return"custom_endpoint_tls_failed"}for(let p of[...e instanceof AggregateError?e.errors:[],e.cause]){let m=es(p,l+1);if(m)return m}return null}async function Bl(e,l){let c=es(e),p=new URL(l).hostname.replace(/^\[|\]$/g,"");if(c!==null&&c!=="custom_endpoint_connection_failed"||Nl(p)!==0)return c;let m;return await Promise.race([Dl(p).then(()=>!0,(h)=>!Qi.has(String(h?.code))),new Promise((h)=>{m=setTimeout(()=>h(!0),5000)})]).finally(()=>clearTimeout(m))?c:"custom_endpoint_host_not_found"}function Fl(e){for(let l=42;;l++){if(l===127)l=256;let c=String.fromCodePoint(l);if(!e.includes(c))return c}}function Ul(e,l){let c=Buffer.from(e),p=Buffer.from(l),m=new Uint32Array(c.length);for(let h=1,y=0;h<c.length;h++){while(y&&c[h]!==c[y])y=m[y-1];if(c[h]===c[y])y++;m[h]=y}let f=0;return(h,y=!1)=>{let S=Buffer.allocUnsafe(h.length*p.length+f),w=0;for(let g of h){while(f&&c[f]!==g){let v=m[f-1];w+=c.copy(S,w,0,f-v),f=v}if(c[f]===g){if(f++,f===c.length)w+=p.copy(S,w),f=0}else S[w++]=g}if(y)w+=c.copy(S,w,0,f),f=0;return S.subarray(0,w)}}async function ts(e){e.signal.throwIfAborted();let l=vn.safeParse(e.payload);if(!l.success)throw new r("custom_endpoint_invalid_request","Invalid local model request.");let c=l.data,p=Sn.parse(await e.credential(e.signal));if(!kr(c,{baseUrl:c.baseUrl,api:p.api,execution:"device"}))throw new r("custom_endpoint_invalid_request","The request does not match the configured API.");e.signal.throwIfAborted();let m,f,h=0,y=0,S=0,w=Fl(p.apiKey),g=Ul(p.apiKey,w),v=async(I,A)=>{e.signal.throwIfAborted(),await new Promise((M,N)=>{let L=()=>{e.signal.removeEventListener("abort",L),N(e.signal.reason)};if(e.signal.addEventListener("abort",L,{once:!0}),e.signal.aborted){L();return}Promise.resolve().then(()=>(e.signal.throwIfAborted(),e.emit(I,A))).then(()=>{e.signal.removeEventListener("abort",L),M()},(B)=>{e.signal.removeEventListener("abort",L),N(B)})})},C=async(I)=>{if(h+=I.length,h>Dt)throw new r("custom_endpoint_response_too_large","Local model response exceeds the transport limit.");for(let A=0;A<I.length;A+=at){if(S>=xr)throw new r("custom_endpoint_response_too_large","Local model response exceeds the chunk limit.");await v(`custom_endpoint.chunk.${S++}`,{eof:!1,data:I.subarray(A,A+at).toString("base64")})}};try{let I=await Ml({url:c.url,body:c.body,signal:e.signal,headers:{...c.headers,...p.api==="anthropic-messages"?{"x-api-key":p.apiKey}:{authorization:`Bearer ${p.apiKey}`}}});m=I.response,f=I.close;let A=m.statusCode??500;if(A>=300&&A<400)throw new r("custom_endpoint_redirect_refused","Local model redirects are not followed.");if(m.headers["content-encoding"]&&m.headers["content-encoding"]!=="identity")throw new r("custom_endpoint_encoding_unsupported","The local server must honor identity encoding.");let M={};for(let N of["content-type","retry-after","x-request-id","request-id"]){let L=m.headers[N];if(typeof L==="string")M[N]=L.replaceAll(p.apiKey,w).slice(0,4096)}await v("custom_endpoint.headers",{status:A,statusText:(m.statusMessage??"").replaceAll(p.apiKey,w).slice(0,256),headers:M});for await(let N of m){e.signal.throwIfAborted();let L=Buffer.isBuffer(N)?N:Buffer.from(N);if(y+=L.length,y>Dt)throw new r("custom_endpoint_response_too_large","Local model response exceeds the transport limit.");await C(g(L))}return await C(g(Buffer.alloc(0),!0)),await v(`custom_endpoint.chunk.${S}`,{eof:!0}),{bytes:h,chunks:S}}catch(I){if(e.signal.throwIfAborted(),I instanceof r)throw I;throw new r((m?null:await Bl(I,c.url))??"custom_endpoint_request_failed","The local model server could not complete the request.")}finally{f?.()}}import{join as rs}from"path";function Hl(e,l){return e===rs(l,".ara","workspace")||e===rs(l,".reason","workspace")}function ns(e,l){let c=e.filter((p)=>Hl(p.path,l));return c.length===1?c[0].path:null}var jl=/^[a-f0-9]{64}$/;var on=32,ql=/^\/[^\x00-\x1f\x7f\\]*$/;function Er(e){if(typeof e!=="string"||e.length>4096||!ql.test(e))return!1;if(e==="/")return!0;return e.split("/").slice(1).every((l)=>l!==""&&l!=="."&&l!=="..")}function Cr(e,l){let c=l==="win32"?/^([A-Za-z]):[\\/]*(.*)$/.exec(e):null;if(!c)return e;let p=c[2].split(/[\\/]+/).filter(Boolean).join("/");return`/${c[1].toUpperCase()}:${p?`/${p}`:""}`}function sn(e){if(!e||typeof e!=="object"||Array.isArray(e))return;let l=e;if(!Er(l.home)||!Array.isArray(l.roots)||l.roots.length>on)return;let c=[];for(let p of l.roots){if(!p||typeof p!=="object"||Array.isArray(p))return;let{path_fingerprint:m,path:f}=p;if(typeof m!=="string"||!jl.test(m)||!Er(f))return;c.push({path_fingerprint:m,path:f})}return{home:l.home,roots:c}}function Wl(e){let l=/^Reason contributor (rc_[0-9a-f]{32})$/.exec(e.name)?.[1];return e.email.toLowerCase()==="343777287+reason-contributors@users.noreply.github.com"&&l?l:void 0}function zl(e){return Wl(e)??e.email.toLowerCase()}function mn(e){let l=/^Co-authored-by:\s*([^<>\r\n]+) <([^<>\s]+)>$/i.exec(e.trim());return l?zl({name:l[1],email:l[2]}):e.trim().toLowerCase()}var jt=(e)=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/[a-z]/gi,(l)=>`[${l.toLowerCase()}${l.toUpperCase()}]`),Gl=[...ke.map((e)=>`/(${e.map(jt).join("/")})(/|$)`),...Kt.map((e)=>`/(${e.map(jt).join("/")})(/|$)`),...[...Jt].map((e)=>`/(${jt(e)})$`),`/${jt(".env.")}[^/]*$`,...Zt.map((e)=>`/[^/]*${jt(e)}$`)],os=`function localGithubSandboxProfile(root, temporary) {
2
+ import{ct,Lt,Cr,xn,Ar,kn,Cn,An}from"./vm-hands-entry-lite-tn8v3yfj.js";import{Pe,ir,ti,yt,Mo,oe,$o,Bo,et,Te,rn,ni,bt,ai,ci,li,ui,di,pi,hi,fi,mi,gi,_i,yi,wi,pe,Y,Re,q,bi,vi,Si,Ei,xi,ki,Ci,Ai,vt,Pi}from"./vm-hands-entry-lite-b8yapqfn.js";import{ue,Z,O}from"./vm-hands-entry-lite-3krzmhkk.js";import{P,Jt}from"./vm-hands-entry-lite-5zdybh8s.js";import{pr,Gi,Ki,it,Ji,Zi,Xi,Yi,Qi,eo,mr,gr,_r,gn,_n,yr,ro,yn,wr,me,ge,Rt,br,Sr,Ot}from"./vm-hands-entry-lite-t0exw1jk.js";import{D,R,b}from"./vm-hands-entry-lite-kz48x6p0.js";import{zi,qi,fn,Wi,mn,Vi,nt,dr}from"./vm-hands-entry-lite-c7ka2d1c.js";import{K}from"./vm-hands-entry-lite-r3yp6cr9.js";import{He}from"./vm-hands-entry-lite-hzh8fdxx.js";import{j}from"./vm-hands-entry-lite-8qvsnkvv.js";import{ur,hn,Hi}from"./vm-hands-entry-lite-1f0v3jb4.js";import{fo,mo,lt,go,_o,yo,wo,bo}from"./vm-hands-entry-lite-jyvmw8b7.js";import{Or,qt,Ir,Fn,jn}from"./vm-hands-entry-lite-44qha2rt.js";import{$t,qe,Bt}from"./vm-hands-entry-lite-0yj63trb.js";import{Nn,x,uo}from"./vm-hands-entry-lite-4x8j1xp9.js";import{po,ho}from"./vm-hands-entry-lite-x9wy77vd.js";import{Mt,Pn,Tn}from"./vm-hands-entry-lite-me5w88km.js";import{ye,oo,so}from"./vm-hands-entry-lite-h6rhk6h1.js";import{be}from"./vm-hands-entry-lite-yretc2th.js";import{Nt}from"./vm-hands-entry-lite-np07qyeq.js";import{ve,jt,Ut,Ht,E}from"./vm-hands-entry-lite-txd50spx.js";import{a,ie}from"./vm-hands-entry-lite-cf1x5cbr.js";import{t,k,o,d,u,i,W,g,ee,s,n,Uo}from"./vm-hands-entry-lite-5agyspqp.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{fe,Ne,Le,Me,sn}from"./vm-hands-entry-lite-vdhgwmmp.js";import{$e}from"./vm-hands-entry-lite-mcjca0ez.js";import{request as kl}from"http";import{request as Tl}from"https";import{lookup as Dl}from"dns/promises";import{isIP as Nl}from"net";async function Ml(e){let l=new URL(e.url);return await new Promise((c,p)=>{let m=(l.protocol==="https:"?Tl:kl)(l,{method:"POST",headers:{...e.headers,"accept-encoding":"identity"},signal:e.signal,timeout:xn},(f)=>c({response:f,close:()=>{f.destroy(),m.destroy(),f.socket?.destroy()}}));m.once("error",p),m.once("timeout",()=>m.destroy(Object.assign(Error("custom_endpoint_timeout"),{code:"ETIMEDOUT"}))),m.end(e.body)})}var ji=new Set(["ENOTFOUND","EAI_AGAIN","EAI_NONAME","EAI_NODATA","EAI_FAIL","DNSException"]),$l=new Set(["ECONNREFUSED","ETIMEDOUT","ECONNRESET","EHOSTUNREACH","ENETUNREACH","EHOSTDOWN","ENETDOWN","EPIPE","ECONNABORTED","EADDRNOTAVAIL","ConnectionRefused","ConnectionClosed","ConnectionTimedOut","Timeout"]);function es(e,l=0){if(!e||typeof e!=="object"||l>3)return null;let c=e.code;if(typeof c==="string"){if(ji.has(c))return"custom_endpoint_host_not_found";if($l.has(c))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(c))return"custom_endpoint_tls_failed"}for(let p of[...e instanceof AggregateError?e.errors:[],e.cause]){let m=es(p,l+1);if(m)return m}return null}async function Bl(e,l){let c=es(e),p=new URL(l).hostname.replace(/^\[|\]$/g,"");if(c!==null&&c!=="custom_endpoint_connection_failed"||Nl(p)!==0)return c;let m;return await Promise.race([Dl(p).then(()=>!0,(h)=>!ji.has(String(h?.code))),new Promise((h)=>{m=setTimeout(()=>h(!0),5000)})]).finally(()=>clearTimeout(m))?c:"custom_endpoint_host_not_found"}function Fl(e){for(let l=42;;l++){if(l===127)l=256;let c=String.fromCodePoint(l);if(!e.includes(c))return c}}function Ul(e,l){let c=Buffer.from(e),p=Buffer.from(l),m=new Uint32Array(c.length);for(let h=1,y=0;h<c.length;h++){while(y&&c[h]!==c[y])y=m[y-1];if(c[h]===c[y])y++;m[h]=y}let f=0;return(h,y=!1)=>{let S=Buffer.allocUnsafe(h.length*p.length+f),w=0;for(let _ of h){while(f&&c[f]!==_){let v=m[f-1];w+=c.copy(S,w,0,f-v),f=v}if(c[f]===_){if(f++,f===c.length)w+=p.copy(S,w),f=0}else S[w++]=_}if(y)w+=c.copy(S,w,0,f),f=0;return S.subarray(0,w)}}async function ts(e){e.signal.throwIfAborted();let l=kn.safeParse(e.payload);if(!l.success)throw new r("custom_endpoint_invalid_request","Invalid local model request.");let c=l.data,p=Cn.parse(await e.credential(e.signal));if(!Ar(c,{baseUrl:c.baseUrl,api:p.api,execution:"device"}))throw new r("custom_endpoint_invalid_request","The request does not match the configured API.");e.signal.throwIfAborted();let m,f,h=0,y=0,S=0,w=Fl(p.apiKey),_=Ul(p.apiKey,w),v=async(I,A)=>{e.signal.throwIfAborted(),await new Promise((M,N)=>{let L=()=>{e.signal.removeEventListener("abort",L),N(e.signal.reason)};if(e.signal.addEventListener("abort",L,{once:!0}),e.signal.aborted){L();return}Promise.resolve().then(()=>(e.signal.throwIfAborted(),e.emit(I,A))).then(()=>{e.signal.removeEventListener("abort",L),M()},(B)=>{e.signal.removeEventListener("abort",L),N(B)})})},C=async(I)=>{if(h+=I.length,h>Lt)throw new r("custom_endpoint_response_too_large","Local model response exceeds the transport limit.");for(let A=0;A<I.length;A+=ct){if(S>=Cr)throw new r("custom_endpoint_response_too_large","Local model response exceeds the chunk limit.");await v(`custom_endpoint.chunk.${S++}`,{eof:!1,data:I.subarray(A,A+ct).toString("base64")})}};try{let I=await Ml({url:c.url,body:c.body,signal:e.signal,headers:{...c.headers,...p.api==="anthropic-messages"?{"x-api-key":p.apiKey}:{authorization:`Bearer ${p.apiKey}`}}});m=I.response,f=I.close;let A=m.statusCode??500;if(A>=300&&A<400)throw new r("custom_endpoint_redirect_refused","Local model redirects are not followed.");if(m.headers["content-encoding"]&&m.headers["content-encoding"]!=="identity")throw new r("custom_endpoint_encoding_unsupported","The local server must honor identity encoding.");let M={};for(let N of["content-type","retry-after","x-request-id","request-id"]){let L=m.headers[N];if(typeof L==="string")M[N]=L.replaceAll(p.apiKey,w).slice(0,4096)}await v("custom_endpoint.headers",{status:A,statusText:(m.statusMessage??"").replaceAll(p.apiKey,w).slice(0,256),headers:M});for await(let N of m){e.signal.throwIfAborted();let L=Buffer.isBuffer(N)?N:Buffer.from(N);if(y+=L.length,y>Lt)throw new r("custom_endpoint_response_too_large","Local model response exceeds the transport limit.");await C(_(L))}return await C(_(Buffer.alloc(0),!0)),await v(`custom_endpoint.chunk.${S}`,{eof:!0}),{bytes:h,chunks:S}}catch(I){if(e.signal.throwIfAborted(),I instanceof r)throw I;throw new r((m?null:await Bl(I,c.url))??"custom_endpoint_request_failed","The local model server could not complete the request.")}finally{f?.()}}import{join as rs}from"path";function Hl(e,l){return e===rs(l,".ara","workspace")||e===rs(l,".reason","workspace")}function ns(e,l){let c=e.filter((p)=>Hl(p.path,l));return c.length===1?c[0].path:null}var jl=/^[a-f0-9]{64}$/;var nn=32,ql=/^\/[^\x00-\x1f\x7f\\]*$/;function xr(e){if(typeof e!=="string"||e.length>4096||!ql.test(e))return!1;if(e==="/")return!0;return e.split("/").slice(1).every((l)=>l!==""&&l!=="."&&l!=="..")}function Er(e,l){let c=l==="win32"?/^([A-Za-z]):[\\/]*(.*)$/.exec(e):null;if(!c)return e;let p=c[2].split(/[\\/]+/).filter(Boolean).join("/");return`/${c[1].toUpperCase()}:${p?`/${p}`:""}`}function on(e){if(!e||typeof e!=="object"||Array.isArray(e))return;let l=e;if(!xr(l.home)||!Array.isArray(l.roots)||l.roots.length>nn)return;let c=[];for(let p of l.roots){if(!p||typeof p!=="object"||Array.isArray(p))return;let{path_fingerprint:m,path:f}=p;if(typeof m!=="string"||!jl.test(m)||!xr(f))return;c.push({path_fingerprint:m,path:f})}return{home:l.home,roots:c}}function Wl(e){let l=/^Reason contributor (rc_[0-9a-f]{32})$/.exec(e.name)?.[1];return e.email.toLowerCase()==="343777287+reason-contributors@users.noreply.github.com"&&l?l:void 0}function zl(e){return Wl(e)??e.email.toLowerCase()}function an(e){let l=/^Co-authored-by:\s*([^<>\r\n]+) <([^<>\s]+)>$/i.exec(e.trim());return l?zl({name:l[1],email:l[2]}):e.trim().toLowerCase()}var zt=(e)=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/[a-z]/gi,(l)=>`[${l.toLowerCase()}${l.toUpperCase()}]`),Gl=[...ve.map((e)=>`/(${e.map(zt).join("/")})(/|$)`),...jt.map((e)=>`/(${e.map(zt).join("/")})(/|$)`),...[...Ut].map((e)=>`/(${zt(e)})$`),`/${zt(".env.")}[^/]*$`,...Ht.map((e)=>`/[^/]*${zt(e)}$`)],os=`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"))',
@@ -10,32 +10,32 @@ import{at,Dt,xr,bn,kr,vn,Sn,En}from"./vm-hands-entry-lite-dcxvxpne.js";import{Pe
10
10
  '(deny file-write* (subpath "/opt/homebrew") (subpath "/usr/local") (subpath "/Library/Developer") (subpath "/cores"))',
11
11
  ...${JSON.stringify(Gl)}.map(pattern => '(deny file-read* file-write* (regex #"'+pattern+'"))'),
12
12
  '(deny network*)','(deny mach-lookup)','(deny process-info*)','(allow process-info* (target same-sandbox))','(allow process-info-listpids)','(allow file-read-metadata (subpath "/dev"))','(deny signal)','(allow signal (target same-sandbox))'].join('\\n');
13
- }`;import{spawn as Kl,spawnSync as Yl}from"child_process";import*as V from"fs";import*as se from"path";import{homedir as Xl}from"os";function is(e,l,c,p="gh"){if(!["gh","git"].includes(p))throw Error("local_device_gh_unavailable");let m=e.realpathSync(c);if(process.platform==="win32"){let h=(y)=>y.toLowerCase()===m.toLowerCase()||y.toLowerCase().startsWith(m.toLowerCase()+l.sep);for(let y of new Set([process.env.ProgramW6432,process.env.ProgramFiles])){if(!y)continue;try{let S=e.realpathSync(p==="gh"?`${y}\\GitHub CLI\\gh.exe`:`${y}\\Git\\cmd\\git.exe`);if(!h(S)&&S.toLowerCase().startsWith(y.toLowerCase()+"\\")&&e.statSync(S).isFile())return S}catch{}}throw Error("local_device_gh_unavailable")}let f=p==="git"&&process.platform==="darwin"?"/Library/Developer/CommandLineTools/usr/bin/git":"/usr/bin/"+p;for(let h of["/opt/homebrew/bin/"+p,"/usr/local/bin/"+p,f])try{let y=e.realpathSync(h);if(y===m||y.startsWith(m+l.sep)||!["/opt/homebrew/","/usr/local/","/usr/bin/",...p==="git"?["/Library/Developer/CommandLineTools/"]:[]].some((w)=>y.startsWith(w)))continue;let S=e.statSync(y);if(!S.isFile()||(S.mode&18)!==0||![0,process.getuid()].includes(S.uid))continue;return e.accessSync(y,e.constants.X_OK),y}catch{continue}throw Error("local_device_gh_unavailable")}function ss(e,l){let c=1;for(let p=0;p<l;p+=1)if(e.charCodeAt(p)===10)c+=1;return c}var as=[{name:"private_key",regex:/-----BEGIN\s+(?:[A-Z0-9_-]+\s+)?PRIVATE\s+KEY-----/i},{name:"github_pat",regex:/\bgh[pousr]_[A-Za-z0-9_]{36,}\b/},{name:"github_fine_grained_pat",regex:/\bgithub_pat_[A-Za-z0-9_]{36,}\b/},{name:"gitlab_pat",regex:/\bglpat-[0-9a-zA-Z_-]{20,}\b/},{name:"slack_token",regex:/\bxox[baprs]-[0-9]{10,}-[0-9]{10,}-[0-9a-zA-Z]{24}\b/},{name:"stripe_live_key",regex:/\b[sr]k_live_[0-9a-zA-Z]{24,}\b/},{name:"bearer_jwt",regex:/\bBearer\s+ey[A-Za-z0-9_-]{20,}\.ey[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}\b/}];function fn(e){let l=e.trim().replaceAll("\\","/");if(!l)return{valid:!1,reason:"empty_path"};if(l.startsWith("/"))return{valid:!1,reason:"absolute_path_forbidden"};if(l.split("/").includes("..")||l.includes("../")||l.endsWith("/.."))return{valid:!1,reason:"path_traversal_forbidden"};if(l===".git"||l.startsWith(".git/")||l.includes("/.git/"))return{valid:!1,reason:"git_directory_entry_forbidden"};return{valid:!0}}function ls(e){return[...new Set(e.map((l)=>l.trim()).filter((l)=>l.length>=8))]}function cs(e,l){return[...l.matchAll(new RegExp(e.regex.source,`${e.regex.flags}g`))]}function Or(e,l=[],c={}){let p=[],m=c.published??new Set,f=ls(l).filter((h)=>!m.has(h));for(let h of e){let y=fn(h.path);if(!y.valid){p.push({path:h.path,reason:y.reason??"invalid_path"});continue}let S=h.content??"",w=f.map((g)=>({secret:g,offset:S.indexOf(g)})).filter((g)=>g.offset>=0).sort((g,v)=>g.offset-v.offset);if(w.length>0){let g=[...new Set(w.flatMap((v)=>c.secretNames?.(v.secret)??[]))];p.push({path:h.path,reason:"literal_secret_detected",ruleId:"forbidden_secret_value",line:ss(S,w[0].offset),...g.length>0?{secretNames:g}:{}})}for(let g of as){let v=cs(g,S).find((C)=>!m.has(C[0]));if(v){p.push({path:h.path,reason:`credential_pattern_detected: ${g.name}`,pattern:g.name,ruleId:g.name,line:ss(S,v.index)});break}}}return{clean:p.length===0,violations:p,scannedObjectCount:e.length}}function us(e,l=[]){let c=ls(l),p=new Set;for(let{content:m}of e){for(let f of c)if(m.includes(f))p.add(f);for(let f of as)for(let h of cs(f,m))p.add(h[0])}return[...p]}function Vl(e,l){let c=0;for(let p=e.indexOf(l);p>=0;p=e.indexOf(l,p+l.length))c+=1;return c}function ds(e,l,c){let p=(m,f)=>m.reduce((h,y)=>h+Vl(y,f),0);return new Set(e.filter((m)=>p(l,m)<=p(c,m)))}var ft=4194304,Ke=process.platform==="win32",Wt=process.env.SystemRoot??"C:\\Windows",Jl=(e)=>Ke?Yl(se.win32.join(Wt,"System32","taskkill.exe"),["/PID",String(e),"/T","/F"],{stdio:"ignore",windowsHide:!0}):process.kill(-e,"SIGKILL"),qt=Ke?[se.win32.join(Wt,"System32"),Wt].join(";"):"/usr/bin:/bin:/usr/sbin:/sbin",Ir=Ke?{SystemRoot:Wt,WINDIR:Wt}:{},Zl=(e)=>Ke?se.win32.resolve(e,"..","..","bin","sh.exe"):"/bin/sh",ps=536870912,gn=/^[a-f0-9]{40}$/,Ql=(e,l,c)=>new Promise((p)=>{if(c.signal?.aborted){p({status:null,error:Error("cancelled"),stdout:Buffer.alloc(0),stderr:Buffer.alloc(0)});return}let m;try{m=Kl(e,l,{cwd:c.cwd,env:c.env,...Ke?{windowsHide:!0}:{detached:!0},stdio:["pipe","pipe","pipe"]})}catch{p({status:null,error:Error("spawn_failed"),stdout:Buffer.alloc(0),stderr:Buffer.alloc(0)});return}let f=Buffer.alloc(0),h=Buffer.alloc(0),y,S=!1,w=(I)=>{if(y??=Error(I),m.pid)try{Jl(m.pid)}catch{}},g=()=>w("cancelled"),v=setTimeout(()=>w("timeout"),c.timeout);c.signal?.addEventListener("abort",g,{once:!0});let C=(I)=>{if(S)return;S=!0,clearTimeout(v),c.signal?.removeEventListener("abort",g),p({status:I,stdout:f,stderr:h,...y?{error:y}:{}})};if(m.stdout.on("data",(I)=>{if(f.length+h.length+I.length>c.maxBuffer)w("output_limit");else f=Buffer.concat([f,I])}),m.stderr.on("data",(I)=>{if(f.length+h.length+I.length>c.maxBuffer)w("output_limit");else h=Buffer.concat([h,I])}),m.on("error",()=>{if(w("spawn_failed"),!m.pid)C(null)}),m.on("close",(I)=>C(I)),m.stdin.on("error",()=>w("input_failed")),m.stdin.end(c.input),c.signal?.aborted)g()}),ec={command:Ql,gh:(e,l)=>is(V,se,e,l),home:Xl};function U(e){throw Error(e)}function yn(e,l){let[c,p]=Ke?[e.toLowerCase(),l.toLowerCase()]:[e,l];return p===c||p.startsWith(c+se.sep)}function tc(e,l){let c=new Set(e.split(/\r?\n/).map(mn));return l.filter((p)=>{let m=mn(p);if(c.has(m))return!1;return c.add(m),!0})}var rc=new Set(["repoFullName","branch","head","base","defaultBranch","expectedBaseRef","baseSha","remoteHeadSha","expectedHeadSha"]),nc=(e)=>JSON.stringify(e,(l,c)=>rc.has(l)?void 0:c);function ms(e,l,c){let p=[...new Set(e.map((f)=>`${l(f.path)}${f.line?`:${f.line}`:""} (${f.reason==="literal_secret_detected"?`value of ${f.secretNames?.length?f.secretNames.slice(0,3).join(", "):"a session variable"}`:`${f.ruleId??"credential"} credential`})`))].slice(0,10),m=e.some((f)=>f.reason==="literal_secret_detected");U(`local_device_gh_secret_scan_failed: the change adds text matching a secret that the base does not already contain: ${p.join("; ")}. Nothing was sent. ${c}${m?" If the line is ordinary code, that variable's value is too generic to tell apart from code: tell the person which variable matched so they can change its value.":""}`)}async function fs(e,l,c=ec){let p=Pe.parse(e),m="local_device_gh_prepare_setup";try{if(!["darwin","linux","win32"].includes(process.platform))U("local_device_gh_platform_unavailable");l.assertCurrent();let f=V.realpathSync(l.root);if(f===se.parse(f).root)U("local_device_gh_root_unavailable");if(!Qe(p)&&!l.forbiddenSecretValues)U("local_device_gh_secret_scope_unavailable");if(!Qe(p)&&l.readOnly)U("local_device_gh_read_only");if(!Qe(p)){let T=Or([{path:"github-operation",content:nc(p)}],l.forbiddenSecretValues,l.secretNames?{secretNames:l.secretNames}:{});if(!T.clean)ms(T.violations,()=>`the ${p.kind} request text`,"Remove it from the pull request text and try again.")}let h=c.gh(f),y=c.home(),S=c.gh(f,"git"),w=l.privateDirectory?V.realpathSync(l.privateDirectory):V.realpathSync(y);if(!Qe(p)&&(!l.privateDirectory||yn(f,w)))U("local_device_gh_private_scope_unavailable");let g={...Ir,PATH:Ke?[se.dirname(S),qt].join(";"):qt,HOME:y,GH_CONFIG_DIR:Ke&&process.env.APPDATA?se.join(process.env.APPDATA,"GitHub CLI"):se.join(y,".config","gh"),GH_PROMPT_DISABLED:"1",GH_PAGER:Ke?"":"/bin/cat",GH_HOST:"github.com",GIT_CONFIG_NOSYSTEM:"1",GIT_CONFIG_SYSTEM:"/dev/null",GIT_CONFIG_GLOBAL:"/dev/null",GIT_TERMINAL_PROMPT:"0",GIT_NO_REPLACE_OBJECTS:"1",GIT_LFS_SKIP_SMUDGE:"1",...process.platform==="linux"?Object.fromEntries(["DBUS_SESSION_BUS_ADDRESS","XDG_RUNTIME_DIR"].flatMap((T)=>process.env[T]?[[T,process.env[T]]]:[])):{}},v=async(T,z,G=w,Q,ae=ft)=>{l.assertCurrent();let le=await c.command(T,z,{cwd:G,env:g,input:Q,maxBuffer:ae,timeout:Math.max(1,Math.min(60000,(l.deadlineMs??Date.now()+60000)-Date.now())),signal:l.signal});if(l.assertCurrent(),le.error||le.status!==0)U("local_device_gh_command_failed");return le.stdout},C=async(T)=>(await v(h,T)).toString("utf8").trim(),I=async(T,z="application/vnd.github+json")=>{Do(p.repoFullName,T,{headers:{accept:z}}),l.assertCurrent();let G=await c.command(h,["api","--hostname","github.com","--method","GET","--include","-H",`Accept: ${z}`,T],{cwd:w,env:g,maxBuffer:ft,timeout:Math.max(1,Math.min(25000,(l.deadlineMs??Date.now()+25000)-Date.now())),signal:l.signal});if(l.assertCurrent(),G.error&&G.status===null)U("local_device_gh_response_unavailable");let Q=G.stdout.toString("utf8").match(/^HTTP\/[^ ]+ ([0-9]{3})[^\r\n]*\r?\n([\s\S]*?)\r?\n\r?\n([\s\S]*)$/);if(!Q)U("local_device_gh_response_invalid");let ae=Number(Q[1]);if(ae>=200&&ae<300&&G.status!==0)U("local_device_gh_response_unavailable");if(Buffer.byteLength(Q[3])>_t)U("local_device_gh_response_too_large");let le={};for(let Oe of Q[2].split(/\r?\n/)){let De=Oe.indexOf(":"),st=Oe.slice(0,De).toLowerCase();if(["link","content-type"].includes(st))le[st]=Oe.slice(De+1).trim().slice(0,8192)}return{kind:"read",status:ae,headers:le,body:ae>=200&&ae<300?Q[3]:JSON.stringify({message:"local_device_gh_request_failed"})}};if(p.kind==="read")return I(p.path,p.accept);if(p.kind==="pr_review_context"){let[T,z]=p.repoFullName.split("/"),G=await C(["api","graphql","--hostname","github.com","-f",`query=${No}`,"-f",`owner=${T}`,"-f",`repo=${z}`,"-F",`number=${p.number}`,...p.after?["-f",`after=${p.after}`]:[]]);if(Buffer.byteLength(G)>_t)U("local_device_gh_response_too_large");let Q=JSON.parse(G);if(Q.errors||Q.data?.repository?.nameWithOwner?.toLowerCase()!==p.repoFullName.toLowerCase()||Q.data.repository.pullRequest?.number!==p.number)U("local_device_gh_response_invalid");return{kind:"pr_review_context",body:G}}if(p.kind==="pr_merge"){let T=await I(`/repos/${p.repoFullName}/pulls/${p.number}`),z=JSON.parse(T.body),G=(le)=>le.number===p.number&&le.html_url===`https://github.com/${p.repoFullName}/pull/${p.number}`&&le.base?.repo?.full_name?.toLowerCase()===p.repoFullName.toLowerCase()&&le.base?.ref===p.expectedBaseRef&&le.head?.sha===p.expectedHeadSha;if(T.status!==200||!G(z)||z.state!=="open"||z.draft!==!1||z.head?.sha!==p.expectedHeadSha||z.base?.repo?.full_name?.toLowerCase()!==p.repoFullName.toLowerCase())U("local_device_gh_merge_target_changed");await C(["pr","merge",String(p.number),`--repo=${p.repoFullName}`,`--${p.method}`,"--match-head-commit",p.expectedHeadSha,...p.commitBody!==void 0&&p.method!=="rebase"?[`--body=${p.commitBody}`]:[]]);let Q=await I(`/repos/${p.repoFullName}/pulls/${p.number}`),ae=JSON.parse(Q.body);if(Q.status!==200||!G(ae)||ae.merged!==!0)U("local_device_gh_merge_unconfirmed");return{kind:"pr_merge",number:p.number,merged:!0}}if(p.kind==="pr_create"){if(p.head===p.base)U("local_device_gh_default_branch");let T=await C(["pr","create","--repo",p.repoFullName,"--head",p.head,"--base",p.base,`--title=${p.title}`,`--body=${p.body}`,...p.draft?["--draft"]:[]]);if(!new RegExp("^https://github\\.com/"+p.repoFullName.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"/pull/[1-9][0-9]*$").test(T))U("local_device_gh_mutation_unconfirmed");return{kind:"pr_create",url:T}}if(p.kind==="pr_mutation"){let T=p.mutation,z=T.action==="edit"?["edit",...T.title!==void 0?[`--title=${T.title}`]:[],...T.body!==void 0?[`--body=${T.body}`]:[],...T.base?[`--base=${T.base}`]:[]]:T.action==="metadata"?["edit",`--${T.change}-${T.field}=${T.value}`]:T.action==="ready"?["ready"]:T.action==="draft"?["ready","--undo"]:["close"];return await C(["pr",...z,String(p.number),"--repo",p.repoFullName]),{kind:"pr_mutation",number:p.number,applied:!0}}if(!l.repoPath)U("local_device_gh_workspace_unavailable");let A=V.realpathSync(l.repoPath);if(!yn(f,A))U("local_device_gh_workspace_unavailable");let M=`https://github.com/${p.repoFullName}.git`,N="!'"+(Ke?h.replace(/\\/g,"/"):h).replace(/'/g,"'\\''")+"' auth git-credential",L=$e(os),B=(T,z,G)=>process.platform==="darwin"?["/usr/bin/sandbox-exec",["-p",T,z,...G]]:[z,G],F=async(T,z,G,Q=ft)=>{let ae=yn(w,T),le=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","credential.helper=","-c","http.extraheader=",...ae?["-c",`credential.https://github.com.helper=${N}`]:[],"-c","protocol.ext.allow=never","-c","protocol.file.allow=never","-c","protocol.ssh.allow=never",...z];if(ae)return v(S,le,T,G,Q);let Oe=se.join(A,".ara-local-gh-tmp");if(V.mkdirSync(Oe,{recursive:!0,mode:448}),V.lstatSync(Oe).isSymbolicLink()||V.realpathSync(Oe)!==Oe)U("local_device_gh_workspace_unavailable");l.assertCurrent();let De=await c.command(...B(L(A,Oe),S,le),{cwd:T,input:G,maxBuffer:Q,timeout:Math.max(1,Math.min(25000,(l.deadlineMs??Date.now()+25000)-Date.now())),signal:l.signal,env:{...Ir,PATH:qt,HOME:A,TMPDIR:Oe,GIT_CONFIG_NOSYSTEM:"1",GIT_CONFIG_SYSTEM:"/dev/null",GIT_CONFIG_GLOBAL:"/dev/null",GIT_TERMINAL_PROMPT:"0",GIT_NO_REPLACE_OBJECTS:"1",GIT_LFS_SKIP_SMUDGE:"1"}});if(l.assertCurrent(),De.error||De.status!==0)U("local_device_gh_collection_failed");return De.stdout},H=async(T,z)=>(await F(T,z)).toString("utf8").trim(),ne=async(T,z)=>{let G=se.join(T,".ara-local-gh-tmp");if(V.mkdirSync(G,{recursive:!0,mode:448}),V.lstatSync(G).isSymbolicLink()||V.realpathSync(G)!==G)U("local_device_gh_workspace_unavailable");l.assertCurrent();let Q=await c.command(...B(L(T,G),Zl(S),["-c",'printf "%s\\n" "$1" > .git/shallow',"sh",z]),{cwd:T,maxBuffer:65536,timeout:Math.max(1,Math.min(25000,(l.deadlineMs??Date.now()+25000)-Date.now())),signal:l.signal,env:{...Ir,PATH:qt,HOME:T,TMPDIR:G}});if(l.assertCurrent(),Q.error||Q.status!==0)U("local_device_gh_materialization_failed")},_e=async(T)=>{let z=new Map;if(T.length===0)return z;let G=await F(he,["cat-file","--batch"],[...new Set(T)].join(`
13
+ }`;import{spawn as Kl,spawnSync as Yl}from"child_process";import*as V from"fs";import*as se from"path";import{homedir as Xl}from"os";function is(e,l,c,p="gh"){if(!["gh","git"].includes(p))throw Error("local_device_gh_unavailable");let m=e.realpathSync(c);if(process.platform==="win32"){let h=(y)=>y.toLowerCase()===m.toLowerCase()||y.toLowerCase().startsWith(m.toLowerCase()+l.sep);for(let y of new Set([process.env.ProgramW6432,process.env.ProgramFiles])){if(!y)continue;try{let S=e.realpathSync(p==="gh"?`${y}\\GitHub CLI\\gh.exe`:`${y}\\Git\\cmd\\git.exe`);if(!h(S)&&S.toLowerCase().startsWith(y.toLowerCase()+"\\")&&e.statSync(S).isFile())return S}catch{}}throw Error("local_device_gh_unavailable")}let f=p==="git"&&process.platform==="darwin"?"/Library/Developer/CommandLineTools/usr/bin/git":"/usr/bin/"+p;for(let h of["/opt/homebrew/bin/"+p,"/usr/local/bin/"+p,f])try{let y=e.realpathSync(h);if(y===m||y.startsWith(m+l.sep)||!["/opt/homebrew/","/usr/local/","/usr/bin/",...p==="git"?["/Library/Developer/CommandLineTools/"]:[]].some((w)=>y.startsWith(w)))continue;let S=e.statSync(y);if(!S.isFile()||(S.mode&18)!==0||![0,process.getuid()].includes(S.uid))continue;return e.accessSync(y,e.constants.X_OK),y}catch{continue}throw Error("local_device_gh_unavailable")}function ss(e,l){let c=1;for(let p=0;p<l;p+=1)if(e.charCodeAt(p)===10)c+=1;return c}var as=[{name:"private_key",regex:/-----BEGIN\s+(?:[A-Z0-9_-]+\s+)?PRIVATE\s+KEY-----/i},{name:"github_pat",regex:/\bgh[pousr]_[A-Za-z0-9_]{36,}\b/},{name:"github_fine_grained_pat",regex:/\bgithub_pat_[A-Za-z0-9_]{36,}\b/},{name:"gitlab_pat",regex:/\bglpat-[0-9a-zA-Z_-]{20,}\b/},{name:"slack_token",regex:/\bxox[baprs]-[0-9]{10,}-[0-9]{10,}-[0-9a-zA-Z]{24}\b/},{name:"stripe_live_key",regex:/\b[sr]k_live_[0-9a-zA-Z]{24,}\b/},{name:"bearer_jwt",regex:/\bBearer\s+ey[A-Za-z0-9_-]{20,}\.ey[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}\b/}];function ln(e){let l=e.trim().replaceAll("\\","/");if(!l)return{valid:!1,reason:"empty_path"};if(l.startsWith("/"))return{valid:!1,reason:"absolute_path_forbidden"};if(l.split("/").includes("..")||l.includes("../")||l.endsWith("/.."))return{valid:!1,reason:"path_traversal_forbidden"};if(l===".git"||l.startsWith(".git/")||l.includes("/.git/"))return{valid:!1,reason:"git_directory_entry_forbidden"};return{valid:!0}}function ls(e){return[...new Set(e.map((l)=>l.trim()).filter((l)=>l.length>=8))]}function cs(e,l){return[...l.matchAll(new RegExp(e.regex.source,`${e.regex.flags}g`))]}function Pr(e,l=[],c={}){let p=[],m=c.published??new Set,f=ls(l).filter((h)=>!m.has(h));for(let h of e){let y=ln(h.path);if(!y.valid){p.push({path:h.path,reason:y.reason??"invalid_path"});continue}let S=h.content??"",w=f.map((_)=>({secret:_,offset:S.indexOf(_)})).filter((_)=>_.offset>=0).sort((_,v)=>_.offset-v.offset);if(w.length>0){let _=[...new Set(w.flatMap((v)=>c.secretNames?.(v.secret)??[]))];p.push({path:h.path,reason:"literal_secret_detected",ruleId:"forbidden_secret_value",line:ss(S,w[0].offset),..._.length>0?{secretNames:_}:{}})}for(let _ of as){let v=cs(_,S).find((C)=>!m.has(C[0]));if(v){p.push({path:h.path,reason:`credential_pattern_detected: ${_.name}`,pattern:_.name,ruleId:_.name,line:ss(S,v.index)});break}}}return{clean:p.length===0,violations:p,scannedObjectCount:e.length}}function us(e,l=[]){let c=ls(l),p=new Set;for(let{content:m}of e){for(let f of c)if(m.includes(f))p.add(f);for(let f of as)for(let h of cs(f,m))p.add(h[0])}return[...p]}function Vl(e,l){let c=0;for(let p=e.indexOf(l);p>=0;p=e.indexOf(l,p+l.length))c+=1;return c}function ds(e,l,c){let p=(m,f)=>m.reduce((h,y)=>h+Vl(y,f),0);return new Set(e.filter((m)=>p(l,m)<=p(c,m)))}var ht=4194304,Ke=process.platform==="win32",Vt=process.env.SystemRoot??"C:\\Windows",Jl=(e)=>Ke?Yl(se.win32.join(Vt,"System32","taskkill.exe"),["/PID",String(e),"/T","/F"],{stdio:"ignore",windowsHide:!0}):process.kill(-e,"SIGKILL"),Gt=Ke?[se.win32.join(Vt,"System32"),Vt].join(";"):"/usr/bin:/bin:/usr/sbin:/sbin",Lr=Ke?{SystemRoot:Vt,WINDIR:Vt}:{},Zl=(e)=>Ke?se.win32.resolve(e,"..","..","bin","sh.exe"):"/bin/sh",ps=536870912,cn=/^[a-f0-9]{40}$/,Ql=(e,l,c)=>new Promise((p)=>{if(c.signal?.aborted){p({status:null,error:Error("cancelled"),stdout:Buffer.alloc(0),stderr:Buffer.alloc(0)});return}let m;try{m=Kl(e,l,{cwd:c.cwd,env:c.env,...Ke?{windowsHide:!0}:{detached:!0},stdio:["pipe","pipe","pipe"]})}catch{p({status:null,error:Error("spawn_failed"),stdout:Buffer.alloc(0),stderr:Buffer.alloc(0)});return}let f=Buffer.alloc(0),h=Buffer.alloc(0),y,S=!1,w=(I)=>{if(y??=Error(I),m.pid)try{Jl(m.pid)}catch{}},_=()=>w("cancelled"),v=setTimeout(()=>w("timeout"),c.timeout);c.signal?.addEventListener("abort",_,{once:!0});let C=(I)=>{if(S)return;S=!0,clearTimeout(v),c.signal?.removeEventListener("abort",_),p({status:I,stdout:f,stderr:h,...y?{error:y}:{}})};if(m.stdout.on("data",(I)=>{if(f.length+h.length+I.length>c.maxBuffer)w("output_limit");else f=Buffer.concat([f,I])}),m.stderr.on("data",(I)=>{if(f.length+h.length+I.length>c.maxBuffer)w("output_limit");else h=Buffer.concat([h,I])}),m.on("error",()=>{if(w("spawn_failed"),!m.pid)C(null)}),m.on("close",(I)=>C(I)),m.stdin.on("error",()=>w("input_failed")),m.stdin.end(c.input),c.signal?.aborted)_()}),ec={command:Ql,gh:(e,l)=>is(V,se,e,l),home:Xl};function U(e){throw Error(e)}function un(e,l){let[c,p]=Ke?[e.toLowerCase(),l.toLowerCase()]:[e,l];return p===c||p.startsWith(c+se.sep)}function tc(e,l){let c=new Set(e.split(/\r?\n/).map(an));return l.filter((p)=>{let m=an(p);if(c.has(m))return!1;return c.add(m),!0})}var rc=new Set(["repoFullName","branch","head","base","defaultBranch","expectedBaseRef","baseSha","remoteHeadSha","expectedHeadSha"]),nc=(e)=>JSON.stringify(e,(l,c)=>rc.has(l)?void 0:c);function ms(e,l,c){let p=[...new Set(e.map((f)=>`${l(f.path)}${f.line?`:${f.line}`:""} (${f.reason==="literal_secret_detected"?`value of ${f.secretNames?.length?f.secretNames.slice(0,3).join(", "):"a session variable"}`:`${f.ruleId??"credential"} credential`})`))].slice(0,10),m=e.some((f)=>f.reason==="literal_secret_detected");U(`local_device_gh_secret_scan_failed: the change adds text matching a secret that the base does not already contain: ${p.join("; ")}. Nothing was sent. ${c}${m?" If the line is ordinary code, that variable's value is too generic to tell apart from code: tell the person which variable matched so they can change its value.":""}`)}async function fs(e,l,c=ec){let p=Pe.parse(e),m="local_device_gh_prepare_setup";try{if(!["darwin","linux","win32"].includes(process.platform))U("local_device_gh_platform_unavailable");l.assertCurrent();let f=V.realpathSync(l.root);if(f===se.parse(f).root)U("local_device_gh_root_unavailable");if(!et(p)&&!l.forbiddenSecretValues)U("local_device_gh_secret_scope_unavailable");if(!et(p)&&l.readOnly)U("local_device_gh_read_only");if(!et(p)){let T=Pr([{path:"github-operation",content:nc(p)}],l.forbiddenSecretValues,l.secretNames?{secretNames:l.secretNames}:{});if(!T.clean)ms(T.violations,()=>`the ${p.kind} request text`,"Remove it from the pull request text and try again.")}let h=c.gh(f),y=c.home(),S=c.gh(f,"git"),w=l.privateDirectory?V.realpathSync(l.privateDirectory):V.realpathSync(y);if(!et(p)&&(!l.privateDirectory||un(f,w)))U("local_device_gh_private_scope_unavailable");let _={...Lr,PATH:Ke?[se.dirname(S),Gt].join(";"):Gt,HOME:y,GH_CONFIG_DIR:Ke&&process.env.APPDATA?se.join(process.env.APPDATA,"GitHub CLI"):se.join(y,".config","gh"),GH_PROMPT_DISABLED:"1",GH_PAGER:Ke?"":"/bin/cat",GH_HOST:"github.com",GIT_CONFIG_NOSYSTEM:"1",GIT_CONFIG_SYSTEM:"/dev/null",GIT_CONFIG_GLOBAL:"/dev/null",GIT_TERMINAL_PROMPT:"0",GIT_NO_REPLACE_OBJECTS:"1",GIT_LFS_SKIP_SMUDGE:"1",...process.platform==="linux"?Object.fromEntries(["DBUS_SESSION_BUS_ADDRESS","XDG_RUNTIME_DIR"].flatMap((T)=>process.env[T]?[[T,process.env[T]]]:[])):{}},v=async(T,z,G=w,Q,ae=ht)=>{l.assertCurrent();let le=await c.command(T,z,{cwd:G,env:_,input:Q,maxBuffer:ae,timeout:Math.max(1,Math.min(60000,(l.deadlineMs??Date.now()+60000)-Date.now())),signal:l.signal});if(l.assertCurrent(),le.error||le.status!==0)U("local_device_gh_command_failed");return le.stdout},C=async(T)=>(await v(h,T)).toString("utf8").trim(),I=async(T,z="application/vnd.github+json")=>{$o(p.repoFullName,T,{headers:{accept:z}}),l.assertCurrent();let G=await c.command(h,["api","--hostname","github.com","--method","GET","--include","-H",`Accept: ${z}`,T],{cwd:w,env:_,maxBuffer:ht,timeout:Math.max(1,Math.min(25000,(l.deadlineMs??Date.now()+25000)-Date.now())),signal:l.signal});if(l.assertCurrent(),G.error&&G.status===null)U("local_device_gh_response_unavailable");let Q=G.stdout.toString("utf8").match(/^HTTP\/[^ ]+ ([0-9]{3})[^\r\n]*\r?\n([\s\S]*?)\r?\n\r?\n([\s\S]*)$/);if(!Q)U("local_device_gh_response_invalid");let ae=Number(Q[1]);if(ae>=200&&ae<300&&G.status!==0)U("local_device_gh_response_unavailable");if(Buffer.byteLength(Q[3])>yt)U("local_device_gh_response_too_large");let le={};for(let Ie of Q[2].split(/\r?\n/)){let De=Ie.indexOf(":"),st=Ie.slice(0,De).toLowerCase();if(["link","content-type"].includes(st))le[st]=Ie.slice(De+1).trim().slice(0,8192)}return{kind:"read",status:ae,headers:le,body:ae>=200&&ae<300?Q[3]:JSON.stringify({message:"local_device_gh_request_failed"})}};if(p.kind==="read")return I(p.path,p.accept);if(p.kind==="pr_review_context"){let[T,z]=p.repoFullName.split("/"),G=await C(["api","graphql","--hostname","github.com","-f",`query=${Bo}`,"-f",`owner=${T}`,"-f",`repo=${z}`,"-F",`number=${p.number}`,...p.after?["-f",`after=${p.after}`]:[]]);if(Buffer.byteLength(G)>yt)U("local_device_gh_response_too_large");let Q=JSON.parse(G);if(Q.errors||Q.data?.repository?.nameWithOwner?.toLowerCase()!==p.repoFullName.toLowerCase()||Q.data.repository.pullRequest?.number!==p.number)U("local_device_gh_response_invalid");return{kind:"pr_review_context",body:G}}if(p.kind==="pr_merge"){let T=await I(`/repos/${p.repoFullName}/pulls/${p.number}`),z=JSON.parse(T.body),G=(le)=>le.number===p.number&&le.html_url===`https://github.com/${p.repoFullName}/pull/${p.number}`&&le.base?.repo?.full_name?.toLowerCase()===p.repoFullName.toLowerCase()&&le.base?.ref===p.expectedBaseRef&&le.head?.sha===p.expectedHeadSha;if(T.status!==200||!G(z)||z.state!=="open"||z.draft!==!1||z.head?.sha!==p.expectedHeadSha||z.base?.repo?.full_name?.toLowerCase()!==p.repoFullName.toLowerCase())U("local_device_gh_merge_target_changed");await C(["pr","merge",String(p.number),`--repo=${p.repoFullName}`,`--${p.method}`,"--match-head-commit",p.expectedHeadSha,...p.commitBody!==void 0&&p.method!=="rebase"?[`--body=${p.commitBody}`]:[]]);let Q=await I(`/repos/${p.repoFullName}/pulls/${p.number}`),ae=JSON.parse(Q.body);if(Q.status!==200||!G(ae)||ae.merged!==!0)U("local_device_gh_merge_unconfirmed");return{kind:"pr_merge",number:p.number,merged:!0}}if(p.kind==="pr_create"){if(p.head===p.base)U("local_device_gh_default_branch");let T=await C(["pr","create","--repo",p.repoFullName,"--head",p.head,"--base",p.base,`--title=${p.title}`,`--body=${p.body}`,...p.draft?["--draft"]:[]]);if(!new RegExp("^https://github\\.com/"+p.repoFullName.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"/pull/[1-9][0-9]*$").test(T))U("local_device_gh_mutation_unconfirmed");return{kind:"pr_create",url:T}}if(p.kind==="pr_mutation"){let T=p.mutation,z=T.action==="edit"?["edit",...T.title!==void 0?[`--title=${T.title}`]:[],...T.body!==void 0?[`--body=${T.body}`]:[],...T.base?[`--base=${T.base}`]:[]]:T.action==="metadata"?["edit",`--${T.change}-${T.field}=${T.value}`]:T.action==="ready"?["ready"]:T.action==="draft"?["ready","--undo"]:["close"];return await C(["pr",...z,String(p.number),"--repo",p.repoFullName]),{kind:"pr_mutation",number:p.number,applied:!0}}if(!l.repoPath)U("local_device_gh_workspace_unavailable");let A=V.realpathSync(l.repoPath);if(!un(f,A))U("local_device_gh_workspace_unavailable");let M=`https://github.com/${p.repoFullName}.git`,N="!'"+(Ke?h.replace(/\\/g,"/"):h).replace(/'/g,"'\\''")+"' auth git-credential",L=$e(os),B=(T,z,G)=>process.platform==="darwin"?["/usr/bin/sandbox-exec",["-p",T,z,...G]]:[z,G],F=async(T,z,G,Q=ht)=>{let ae=un(w,T),le=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","credential.helper=","-c","http.extraheader=",...ae?["-c",`credential.https://github.com.helper=${N}`]:[],"-c","protocol.ext.allow=never","-c","protocol.file.allow=never","-c","protocol.ssh.allow=never",...z];if(ae)return v(S,le,T,G,Q);let Ie=se.join(A,".ara-local-gh-tmp");if(V.mkdirSync(Ie,{recursive:!0,mode:448}),V.lstatSync(Ie).isSymbolicLink()||V.realpathSync(Ie)!==Ie)U("local_device_gh_workspace_unavailable");l.assertCurrent();let De=await c.command(...B(L(A,Ie),S,le),{cwd:T,input:G,maxBuffer:Q,timeout:Math.max(1,Math.min(25000,(l.deadlineMs??Date.now()+25000)-Date.now())),signal:l.signal,env:{...Lr,PATH:Gt,HOME:A,TMPDIR:Ie,GIT_CONFIG_NOSYSTEM:"1",GIT_CONFIG_SYSTEM:"/dev/null",GIT_CONFIG_GLOBAL:"/dev/null",GIT_TERMINAL_PROMPT:"0",GIT_NO_REPLACE_OBJECTS:"1",GIT_LFS_SKIP_SMUDGE:"1"}});if(l.assertCurrent(),De.error||De.status!==0)U("local_device_gh_collection_failed");return De.stdout},H=async(T,z)=>(await F(T,z)).toString("utf8").trim(),ne=async(T,z)=>{let G=se.join(T,".ara-local-gh-tmp");if(V.mkdirSync(G,{recursive:!0,mode:448}),V.lstatSync(G).isSymbolicLink()||V.realpathSync(G)!==G)U("local_device_gh_workspace_unavailable");l.assertCurrent();let Q=await c.command(...B(L(T,G),Zl(S),["-c",'printf "%s\\n" "$1" > .git/shallow',"sh",z]),{cwd:T,maxBuffer:65536,timeout:Math.max(1,Math.min(25000,(l.deadlineMs??Date.now()+25000)-Date.now())),signal:l.signal,env:{...Lr,PATH:Gt,HOME:T,TMPDIR:G}});if(l.assertCurrent(),Q.error||Q.status!==0)U("local_device_gh_materialization_failed")},_e=async(T)=>{let z=new Map;if(T.length===0)return z;let G=await F(he,["cat-file","--batch"],[...new Set(T)].join(`
14
14
  `)+`
15
- `,ft*8);for(let Q=0;Q<G.length;){let ae=G.indexOf(10,Q),[le,Oe,De]=G.subarray(Q,ae).toString("utf8").split(" ");if(ae<0||!le||Oe!=="blob"||!/^[0-9]+$/.test(De??""))U("local_device_gh_object_invalid");z.set(le,G.subarray(ae+1,ae+1+Number(De)).toString("utf8")),Q=ae+1+Number(De)+1}return z},xe=async(T,z,G)=>{let Q=se.join(A,".ara-local-gh-tmp"),ae=L(A,Q)+`
15
+ `,ht*8);for(let Q=0;Q<G.length;){let ae=G.indexOf(10,Q),[le,Ie,De]=G.subarray(Q,ae).toString("utf8").split(" ");if(ae<0||!le||Ie!=="blob"||!/^[0-9]+$/.test(De??""))U("local_device_gh_object_invalid");z.set(le,G.subarray(ae+1,ae+1+Number(De)).toString("utf8")),Q=ae+1+Number(De)+1}return z},Ee=async(T,z,G)=>{let Q=se.join(A,".ara-local-gh-tmp"),ae=L(A,Q)+`
16
16
  (allow file-read* file-write* (subpath ${JSON.stringify(A)}))
17
17
  (allow file-read* (subpath ${JSON.stringify(T)}))
18
- (allow file-read-metadata (path-ancestors ${JSON.stringify(T)}))`,le=async(De,st)=>{l.assertCurrent();let Ft=await c.command(...B(ae,De,st),{cwd:A,maxBuffer:ft,timeout:Math.max(1,Math.min(25000,(l.deadlineMs??Date.now()+25000)-Date.now())),signal:l.signal,env:{...Ir,PATH:qt,HOME:A,TMPDIR:Q,GIT_INDEX_FILE:se.join(A,".git","index"),OPENSSL_CONF:"/dev/null",GIT_CONFIG_NOSYSTEM:"1",GIT_CONFIG_SYSTEM:"/dev/null",GIT_CONFIG_GLOBAL:"/dev/null",GIT_TERMINAL_PROMPT:"0",GIT_NO_REPLACE_OBJECTS:"1",GIT_LFS_SKIP_SMUDGE:"1"}});if(l.assertCurrent(),Ft.error||Ft.status!==0)U("local_device_gh_materialization_failed")},Oe=["--git-dir="+T,"--work-tree="+A,"-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","credential.helper=","-c","http.extraheader=","-c","protocol.allow=never"];await le(S,[...Oe,"read-tree",z]),await le(S,[...Oe,"checkout-index","--all","--index"]),await F(A,["update-ref","refs/heads/"+G,z]),await F(A,["symbolic-ref","HEAD","refs/heads/"+G])};m="local_device_gh_prepare_metadata";let Ze=await I(`/repos/${p.repoFullName}`);if(Ze.status!==200)U("local_device_gh_repository_unavailable");let it=JSON.parse(Ze.body);if(it.full_name?.toLowerCase()!==p.repoFullName.toLowerCase()||it.default_branch!==p.defaultBranch||p.kind==="publish"&&it.permissions?.push!==!0)U("local_device_gh_repository_authority_changed");if(p.branch===p.defaultBranch)U("local_device_gh_default_branch");m="local_device_gh_prepare_private_init";let he=V.mkdtempSync(se.join(w,"github-publication-"));V.chmodSync(he,448);let Sr=!1;try{if(await F(he,["init","--bare","--template="]),p.kind==="prepare"){if(m="local_device_gh_prepare_fetch",await F(he,["fetch","--depth=1","--no-tags","--no-recurse-submodules",M,p.baseSha]),await H(he,["rev-parse","FETCH_HEAD"])!==p.baseSha)m="local_device_gh_prepare_base_mismatch",U("local_device_gh_base_changed");m="local_device_gh_prepare_checkout_validation";let we=se.join(A,".git"),We=!1;if(V.existsSync(we)){if(!V.lstatSync(we).isDirectory()||V.lstatSync(we).isSymbolicLink()||["objects/info/alternates","info/grafts"].some((Ee)=>V.existsSync(se.join(we,Ee))))U("local_device_gh_repository_layout_invalid");let Ae=await F(A,["rev-parse","--verify","-q","HEAD"]).then((Ee)=>Ee.toString("utf8").trim(),()=>null),Ge=await F(A,["config","--local","--get","remote.origin.url"]).then((Ee)=>Ee.toString("utf8").trim(),()=>"");if(Ae!==null||Ge){if(Ae!==p.baseSha||await H(A,["branch","--show-current"])!==p.branch)U("local_device_gh_checkout_exists");return{kind:"prepare",headSha:p.baseSha}}We=!0}let Be=V.readdirSync(A).filter((Ae)=>!(We&&Ae===".git")),Xe=[".ara-local-gh-tmp",".reason-local-gh-tmp"];if(Be.some((Ae)=>!Xe.includes(Ae))||Be.some((Ae)=>{let Ge=se.join(A,Ae);return!V.lstatSync(Ge).isDirectory()||V.lstatSync(Ge).isSymbolicLink()||V.readdirSync(Ge).length>0}))U("local_device_gh_checkout_not_empty");if(m="local_device_gh_prepare_checkout_init",!We)await F(A,["init","--template="]);m="local_device_gh_prepare_materialization";let et=await F(he,["pack-objects","--stdout","--revs"],p.baseSha+`
19
- `,ps);return await ne(A,p.baseSha),await F(A,["index-pack","--strict","--stdin"],et,65536),await F(A,["remote","add","origin",M]),await xe(he,p.baseSha,p.branch),{kind:"prepare",headSha:p.baseSha}}let T=se.join(A,".git");if(!V.lstatSync(T).isDirectory()||V.lstatSync(T).isSymbolicLink()||["objects/info/alternates","info/grafts"].some((we)=>V.existsSync(se.join(T,we))))U("local_device_gh_repository_layout_invalid");if(await H(A,["branch","--show-current"])!==p.branch)U("local_device_gh_branch_changed");let z=await H(A,["rev-parse","--verify","HEAD"]);if(!gn.test(z))U("local_device_gh_head_invalid");let G=await I(`/repos/${p.repoFullName}/commits/${p.baseSha}`);if(G.status!==200||JSON.parse(G.body).sha!==p.baseSha)U("local_device_gh_base_unverified");let Q=await I(`/repos/${p.repoFullName}/git/ref/heads/${encodeURIComponent(p.branch)}`);if(p.remoteHeadSha===null?Q.status!==404:Q.status!==200||JSON.parse(Q.body).object?.sha!==p.remoteHeadSha)U("local_device_gh_remote_changed");let ae=[...(await H(A,["rev-list","--objects","--no-object-names",z,"--not",p.baseSha])).split(`
18
+ (allow file-read-metadata (path-ancestors ${JSON.stringify(T)}))`,le=async(De,st)=>{l.assertCurrent();let Dt=await c.command(...B(ae,De,st),{cwd:A,maxBuffer:ht,timeout:Math.max(1,Math.min(25000,(l.deadlineMs??Date.now()+25000)-Date.now())),signal:l.signal,env:{...Lr,PATH:Gt,HOME:A,TMPDIR:Q,GIT_INDEX_FILE:se.join(A,".git","index"),OPENSSL_CONF:"/dev/null",GIT_CONFIG_NOSYSTEM:"1",GIT_CONFIG_SYSTEM:"/dev/null",GIT_CONFIG_GLOBAL:"/dev/null",GIT_TERMINAL_PROMPT:"0",GIT_NO_REPLACE_OBJECTS:"1",GIT_LFS_SKIP_SMUDGE:"1"}});if(l.assertCurrent(),Dt.error||Dt.status!==0)U("local_device_gh_materialization_failed")},Ie=["--git-dir="+T,"--work-tree="+A,"-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","credential.helper=","-c","http.extraheader=","-c","protocol.allow=never"];await le(S,[...Ie,"read-tree",z]),await le(S,[...Ie,"checkout-index","--all","--index"]),await F(A,["update-ref","refs/heads/"+G,z]),await F(A,["symbolic-ref","HEAD","refs/heads/"+G])};m="local_device_gh_prepare_metadata";let Ze=await I(`/repos/${p.repoFullName}`);if(Ze.status!==200)U("local_device_gh_repository_unavailable");let ot=JSON.parse(Ze.body);if(ot.full_name?.toLowerCase()!==p.repoFullName.toLowerCase()||ot.default_branch!==p.defaultBranch||p.kind==="publish"&&ot.permissions?.push!==!0)U("local_device_gh_repository_authority_changed");if(p.branch===p.defaultBranch)U("local_device_gh_default_branch");m="local_device_gh_prepare_private_init";let he=V.mkdtempSync(se.join(w,"github-publication-"));V.chmodSync(he,448);let vr=!1;try{if(await F(he,["init","--bare","--template="]),p.kind==="prepare"){if(m="local_device_gh_prepare_fetch",await F(he,["fetch","--depth=1","--no-tags","--no-recurse-submodules",M,p.baseSha]),await H(he,["rev-parse","FETCH_HEAD"])!==p.baseSha)m="local_device_gh_prepare_base_mismatch",U("local_device_gh_base_changed");m="local_device_gh_prepare_checkout_validation";let we=se.join(A,".git"),ze=!1;if(V.existsSync(we)){if(!V.lstatSync(we).isDirectory()||V.lstatSync(we).isSymbolicLink()||["objects/info/alternates","info/grafts"].some((Ce)=>V.existsSync(se.join(we,Ce))))U("local_device_gh_repository_layout_invalid");let ke=await F(A,["rev-parse","--verify","-q","HEAD"]).then((Ce)=>Ce.toString("utf8").trim(),()=>null),Ge=await F(A,["config","--local","--get","remote.origin.url"]).then((Ce)=>Ce.toString("utf8").trim(),()=>"");if(ke!==null||Ge){if(ke!==p.baseSha||await H(A,["branch","--show-current"])!==p.branch)U("local_device_gh_checkout_exists");return{kind:"prepare",headSha:p.baseSha}}ze=!0}let Be=V.readdirSync(A).filter((ke)=>!(ze&&ke===".git")),Xe=[".ara-local-gh-tmp",".reason-local-gh-tmp"];if(Be.some((ke)=>!Xe.includes(ke))||Be.some((ke)=>{let Ge=se.join(A,ke);return!V.lstatSync(Ge).isDirectory()||V.lstatSync(Ge).isSymbolicLink()||V.readdirSync(Ge).length>0}))U("local_device_gh_checkout_not_empty");if(m="local_device_gh_prepare_checkout_init",!ze)await F(A,["init","--template="]);m="local_device_gh_prepare_materialization";let Qe=await F(he,["pack-objects","--stdout","--revs"],p.baseSha+`
19
+ `,ps);return await ne(A,p.baseSha),await F(A,["index-pack","--strict","--stdin"],Qe,65536),await F(A,["remote","add","origin",M]),await Ee(he,p.baseSha,p.branch),{kind:"prepare",headSha:p.baseSha}}let T=se.join(A,".git");if(!V.lstatSync(T).isDirectory()||V.lstatSync(T).isSymbolicLink()||["objects/info/alternates","info/grafts"].some((we)=>V.existsSync(se.join(T,we))))U("local_device_gh_repository_layout_invalid");if(await H(A,["branch","--show-current"])!==p.branch)U("local_device_gh_branch_changed");let z=await H(A,["rev-parse","--verify","HEAD"]);if(!cn.test(z))U("local_device_gh_head_invalid");let G=await I(`/repos/${p.repoFullName}/commits/${p.baseSha}`);if(G.status!==200||JSON.parse(G.body).sha!==p.baseSha)U("local_device_gh_base_unverified");let Q=await I(`/repos/${p.repoFullName}/git/ref/heads/${encodeURIComponent(p.branch)}`);if(p.remoteHeadSha===null?Q.status!==404:Q.status!==200||JSON.parse(Q.body).object?.sha!==p.remoteHeadSha)U("local_device_gh_remote_changed");let ae=[...(await H(A,["rev-list","--objects","--no-object-names",z,"--not",p.baseSha])).split(`
20
20
  `),...(await H(A,["rev-list","--objects","--no-object-names","--no-walk",p.baseSha])).split(`
21
- `)].filter(Boolean);if(ae.some((we)=>!gn.test(we)))U("local_device_gh_object_invalid");let le=await F(A,["pack-objects","--stdout"],[...new Set(ae)].join(`
21
+ `)].filter(Boolean);if(ae.some((we)=>!cn.test(we)))U("local_device_gh_object_invalid");let le=await F(A,["pack-objects","--stdout"],[...new Set(ae)].join(`
22
22
  `)+`
23
23
  `,ps);if(V.writeFileSync(se.join(he,"shallow"),p.baseSha+`
24
- `,{flag:"wx",mode:384}),await F(he,["index-pack","--strict","--stdin"],le,65536),await F(he,["merge-base","--is-ancestor",p.baseSha,z]),p.remoteHeadSha)await F(he,["merge-base","--is-ancestor",p.remoteHeadSha,z]);let Oe=await F(he,["show","-s","--format=%B",z]),De=(await F(he,["interpret-trailers","--parse"],Oe)).toString("utf8"),st=p.contributorTrailers?{expectedTrailers:p.contributorTrailers,missingFromHead:tc(De,p.contributorTrailers)}:void 0,Ft=(await H(he,["rev-list","--objects","--no-object-names",z,"--not",p.baseSha,...p.remoteHeadSha?[p.remoteHeadSha]:[]])).split(`
25
- `).filter(Boolean);if(Ft.length>5000)U("local_device_gh_collection_too_large");let Ut=[],Di=0;for(let we of Ft){if(!gn.test(we))U("local_device_gh_object_invalid");let We=await H(he,["cat-file","-t",we]);if(!["blob","commit","tree"].includes(We))U("local_device_gh_object_invalid");let Be=await F(he,["cat-file",We,we]);if(Di+=Be.length,Di>ft)U("local_device_gh_collection_too_large");if(We==="tree"){let Xe=0;while(Xe<Be.length){let et=Be.indexOf(32,Xe),Ae=Be.indexOf(0,et+1);if(et<Xe||Ae<=et||Ae+21>Be.length)U("local_device_gh_object_invalid");let Ge=Be.subarray(et+1,Ae).toString("utf8");if(Ge.includes("/")||!fn(Ge).valid)U("local_device_gh_object_invalid");Xe=Ae+21}}Ut.push({path:`object-${we}`,content:Be.toString("utf8")})}let Ni=l.secretNames?{secretNames:l.secretNames}:{},Ht=Or(Ut,l.forbiddenSecretValues,Ni),Ki=new Map;if(!Ht.clean)try{let we=(await F(he,["diff","--no-renames","--no-abbrev","--raw","-z",p.baseSha,z])).toString("utf8").split("\x00"),We=[],Be=[];for(let Ee=0;Ee+1<we.length;Ee+=2){let[,Al,Ll,rn,Rr]=we[Ee].slice(1).match(/^([0-7]{6}) ([0-7]{6}) ([0-9a-f]{40}) ([0-9a-f]{40}) /)??[];if(!rn||!Rr)continue;if(Al!=="160000"&&!/^0+$/.test(rn))We.push(rn);if(Ll!=="160000"&&!/^0+$/.test(Rr))Be.push(Rr),Ki.set(`object-${Rr}`,we[Ee+1])}let Xe=await _e([...We,...Be]),et=new Set(Ht.violations.map((Ee)=>Ee.path)),Ae=us(Ut.filter((Ee)=>et.has(Ee.path)),l.forbiddenSecretValues),Ge=ds(Ae,Be.map((Ee)=>Xe.get(Ee)??""),We.map((Ee)=>Xe.get(Ee)??""));if(Ge.size>0)Ht=Or(Ut,l.forbiddenSecretValues,{...Ni,published:Ge})}catch{}if(!Ht.clean)ms(Ht.violations,(we)=>Ki.get(we)??`an object in the pushed history (${we})`,"Remove it from the files and commit again; a commit or message in the pushed history that holds it must be amended before this branch can be pushed.");await F(he,["push","--no-recurse-submodules",M,`${z}:refs/heads/${p.branch}`]);let Zi=await I(`/repos/${p.repoFullName}/git/ref/heads/${encodeURIComponent(p.branch)}`);if(Zi.status!==200||JSON.parse(Zi.body).object?.sha!==z)U("local_device_gh_push_unconfirmed");return{kind:"publish",headSha:z,scannedObjectCount:Ut.length,...st?{attribution:st}:{}}}catch(T){throw Sr=!0,T}finally{try{V.rmSync(he,{recursive:!0,force:!0})}catch(T){if(!Sr||p.kind!=="prepare")throw m=null,T}}}catch(f){if(p.kind==="prepare"&&p.diagnosticsVersion===1&&m&&!l.signal?.aborted)throw new rr(m);throw f}}var gt=i({profile:t().regex(/^(Default|Profile [0-9]+)$/),extension_instance_id:t().min(1).max(1024)}).strict(),Cn={ready:n(!0),boot_generation:t().uuid(),proof_ready:n(!1),result:n("metadata_only")},oc=i({...Cn,version:n(2),development_only:n(!1),image:n(!0),video:n(!1),source_bound:n(!1),profiles:u(gt.shape.profile).min(1).max(16),extension_instance_ids:u(gt.shape.extension_instance_id.max(512)).min(1).max(16)}).strict().refine((e)=>new Set(e.profiles).size===e.profiles.length&&e.profiles.length===e.extension_instance_ids.length),ic=i({...Cn,version:n(3),development_only:n(!1),image:n(!0),video:n(!0),source_bound:n(!1),max_seconds:n(15),profiles:u(gt.shape.profile).min(1).max(16),extension_instance_ids:u(gt.shape.extension_instance_id.max(512)).min(1).max(16)}).strict().refine((e)=>new Set(e.profiles).size===e.profiles.length&&e.profiles.length===e.extension_instance_ids.length),Pn=W([oc,ic]),Sm=W([i({...Cn,version:n(1),development_only:n(!0),profile:gt.shape.profile,extension_instance_id:gt.shape.extension_instance_id,max_seconds:n(15)}).strict(),Pn]);import{createServer as sc,request as ac}from"http";import{connect as lc,isIP as cc}from"net";var ys=120000,uc=15000;function dc(e,l,c){let p=mr(l).toLowerCase().replace(/\.$/,"");if(!p||cc(p))return!1;return e.some((m)=>{if(!un.test(m))return!1;let f=m.lastIndexOf(":"),h=f>0?m.slice(0,f):m;if(f>0&&Number(m.slice(f+1))!==c)return!1;return h.startsWith("*.")?p.endsWith(h.slice(1)):p===h})}function pc(e,l){let c=/^\[?([^\]]+?)\]?:([0-9]{1,5})$/.exec(e),p=c?c[1]:e,m=c?Number(c[2]):l;return p&&m>=1&&m<=65535?{host:p,port:m}:null}async function An(e,l,c){if(!dc(c,e,l))return null;let p=await Ji(e);return p.ok?p.addresses[0]:null}function Gt(e,l){e.end(`HTTP/1.1 ${l} ${l===403?"Forbidden":"Bad Gateway"}\r
24
+ `,{flag:"wx",mode:384}),await F(he,["index-pack","--strict","--stdin"],le,65536),await F(he,["merge-base","--is-ancestor",p.baseSha,z]),p.remoteHeadSha)await F(he,["merge-base","--is-ancestor",p.remoteHeadSha,z]);let Ie=await F(he,["show","-s","--format=%B",z]),De=(await F(he,["interpret-trailers","--parse"],Ie)).toString("utf8"),st=p.contributorTrailers?{expectedTrailers:p.contributorTrailers,missingFromHead:tc(De,p.contributorTrailers)}:void 0,Dt=(await H(he,["rev-list","--objects","--no-object-names",z,"--not",p.baseSha,...p.remoteHeadSha?[p.remoteHeadSha]:[]])).split(`
25
+ `).filter(Boolean);if(Dt.length>5000)U("local_device_gh_collection_too_large");let Ft=[],Mi=0;for(let we of Dt){if(!cn.test(we))U("local_device_gh_object_invalid");let ze=await H(he,["cat-file","-t",we]);if(!["blob","commit","tree"].includes(ze))U("local_device_gh_object_invalid");let Be=await F(he,["cat-file",ze,we]);if(Mi+=Be.length,Mi>ht)U("local_device_gh_collection_too_large");if(ze==="tree"){let Xe=0;while(Xe<Be.length){let Qe=Be.indexOf(32,Xe),ke=Be.indexOf(0,Qe+1);if(Qe<Xe||ke<=Qe||ke+21>Be.length)U("local_device_gh_object_invalid");let Ge=Be.subarray(Qe+1,ke).toString("utf8");if(Ge.includes("/")||!ln(Ge).valid)U("local_device_gh_object_invalid");Xe=ke+21}}Ft.push({path:`object-${we}`,content:Be.toString("utf8")})}let $i=l.secretNames?{secretNames:l.secretNames}:{},Wt=Pr(Ft,l.forbiddenSecretValues,$i),Bi=new Map;if(!Wt.clean)try{let we=(await F(he,["diff","--no-renames","--no-abbrev","--raw","-z",p.baseSha,z])).toString("utf8").split("\x00"),ze=[],Be=[];for(let Ce=0;Ce+1<we.length;Ce+=2){let[,Al,Ll,tn,Rr]=we[Ce].slice(1).match(/^([0-7]{6}) ([0-7]{6}) ([0-9a-f]{40}) ([0-9a-f]{40}) /)??[];if(!tn||!Rr)continue;if(Al!=="160000"&&!/^0+$/.test(tn))ze.push(tn);if(Ll!=="160000"&&!/^0+$/.test(Rr))Be.push(Rr),Bi.set(`object-${Rr}`,we[Ce+1])}let Xe=await _e([...ze,...Be]),Qe=new Set(Wt.violations.map((Ce)=>Ce.path)),ke=us(Ft.filter((Ce)=>Qe.has(Ce.path)),l.forbiddenSecretValues),Ge=ds(ke,Be.map((Ce)=>Xe.get(Ce)??""),ze.map((Ce)=>Xe.get(Ce)??""));if(Ge.size>0)Wt=Pr(Ft,l.forbiddenSecretValues,{...$i,published:Ge})}catch{}if(!Wt.clean)ms(Wt.violations,(we)=>Bi.get(we)??`an object in the pushed history (${we})`,"Remove it from the files and commit again; a commit or message in the pushed history that holds it must be amended before this branch can be pushed.");await F(he,["push","--no-recurse-submodules",M,`${z}:refs/heads/${p.branch}`]);let Ui=await I(`/repos/${p.repoFullName}/git/ref/heads/${encodeURIComponent(p.branch)}`);if(Ui.status!==200||JSON.parse(Ui.body).object?.sha!==z)U("local_device_gh_push_unconfirmed");return{kind:"publish",headSha:z,scannedObjectCount:Ft.length,...st?{attribution:st}:{}}}catch(T){throw vr=!0,T}finally{try{V.rmSync(he,{recursive:!0,force:!0})}catch(T){if(!vr||p.kind!=="prepare")throw m=null,T}}}catch(f){if(p.kind==="prepare"&&p.diagnosticsVersion===1&&m&&!l.signal?.aborted)throw new ir(m);throw f}}var gt=i({profile:t().regex(/^(Default|Profile [0-9]+)$/),extension_instance_id:t().min(1).max(1024)}).strict(),wn={ready:n(!0),boot_generation:t().uuid(),proof_ready:n(!1),result:n("metadata_only")},oc=i({...wn,version:n(2),development_only:n(!1),image:n(!0),video:n(!1),source_bound:n(!1),profiles:u(gt.shape.profile).min(1).max(16),extension_instance_ids:u(gt.shape.extension_instance_id.max(512)).min(1).max(16)}).strict().refine((e)=>new Set(e.profiles).size===e.profiles.length&&e.profiles.length===e.extension_instance_ids.length),ic=i({...wn,version:n(3),development_only:n(!1),image:n(!0),video:n(!0),source_bound:n(!1),max_seconds:n(15),profiles:u(gt.shape.profile).min(1).max(16),extension_instance_ids:u(gt.shape.extension_instance_id.max(512)).min(1).max(16)}).strict().refine((e)=>new Set(e.profiles).size===e.profiles.length&&e.profiles.length===e.extension_instance_ids.length),Sn=W([oc,ic]),Sm=W([i({...wn,version:n(1),development_only:n(!0),profile:gt.shape.profile,extension_instance_id:gt.shape.extension_instance_id,max_seconds:n(15)}).strict(),Sn]);import{createServer as sc,request as ac}from"http";import{connect as lc,isIP as cc}from"net";var ys=120000,uc=15000;function dc(e,l,c){let p=yr(l).toLowerCase().replace(/\.$/,"");if(!p||cc(p))return!1;return e.some((m)=>{if(!mn.test(m))return!1;let f=m.lastIndexOf(":"),h=f>0?m.slice(0,f):m;if(f>0&&Number(m.slice(f+1))!==c)return!1;return h.startsWith("*.")?p.endsWith(h.slice(1)):p===h})}function pc(e,l){let c=/^\[?([^\]]+?)\]?:([0-9]{1,5})$/.exec(e),p=c?c[1]:e,m=c?Number(c[2]):l;return p&&m>=1&&m<=65535?{host:p,port:m}:null}async function vn(e,l,c){if(!dc(c,e,l))return null;let p=await ro(e);return p.ok?p.addresses[0]:null}function Kt(e,l){e.end(`HTTP/1.1 ${l} ${l===403?"Forbidden":"Bad Gateway"}\r
26
26
  Connection: close\r
27
27
  Content-Length: 0\r
28
28
  \r
29
- `)}function hs(e,l){return new Promise((c,p)=>{let m=lc({host:e,port:l}),f=setTimeout(()=>m.destroy(Error("connect_timeout")),uc);m.once("connect",()=>{clearTimeout(f),c(m)}),m.once("error",(h)=>{clearTimeout(f),p(h)})})}function gs(e,l,c){for(let p of[e,l])p.on("error",()=>{e.destroy(),l.destroy()}),p.on("close",()=>{e.destroy(),l.destroy()});if(l.setTimeout(ys,()=>l.destroy()),c.length)l.write(c);e.pipe(l).pipe(e)}function _s(e,l){let c={...e,host:l};return delete c["proxy-authorization"],delete c["proxy-connection"],c}async function bs(e,l=()=>{}){let c=[...e],p=new Set,m=(y)=>{p.add(y),y.once("close",()=>p.delete(y))},f=sc((y,S)=>{(async()=>{let w;try{w=new URL(y.url??"")}catch{w=new URL("invalid:")}let g=Number(w.port||80),v=w.protocol==="http:"?await An(w.hostname,g,c):null;if(!v){l(),S.writeHead(403,{connection:"close"}).end();return}let C=ac({host:v,port:g,method:y.method,path:`${w.pathname}${w.search}`,headers:_s(y.headers,w.host),agent:!1,timeout:ys},(I)=>{S.writeHead(I.statusCode??502,I.headers),I.pipe(S)});C.on("timeout",()=>C.destroy()),C.on("error",()=>{if(!S.headersSent)S.writeHead(502);S.end()}),S.on("close",()=>C.destroy()),y.pipe(C)})().catch(()=>{if(!S.headersSent)S.writeHead(502);S.end()})});f.on("connection",m),f.on("connect",(y,S,w)=>{m(S),S.on("error",()=>S.destroy()),(async()=>{let g=pc(y.url??"",443),v=g?await An(g.host,g.port,c):null;if(!g||!v){l(),Gt(S,403);return}let C=await hs(v,g.port).catch(()=>null);if(!C){Gt(S,502);return}if(S.destroyed){C.destroy();return}m(C),S.write(`HTTP/1.1 200 Connection Established\r
29
+ `)}function hs(e,l){return new Promise((c,p)=>{let m=lc({host:e,port:l}),f=setTimeout(()=>m.destroy(Error("connect_timeout")),uc);m.once("connect",()=>{clearTimeout(f),c(m)}),m.once("error",(h)=>{clearTimeout(f),p(h)})})}function gs(e,l,c){for(let p of[e,l])p.on("error",()=>{e.destroy(),l.destroy()}),p.on("close",()=>{e.destroy(),l.destroy()});if(l.setTimeout(ys,()=>l.destroy()),c.length)l.write(c);e.pipe(l).pipe(e)}function _s(e,l){let c={...e,host:l};return delete c["proxy-authorization"],delete c["proxy-connection"],c}async function bs(e,l=()=>{}){let c=[...e],p=new Set,m=(y)=>{p.add(y),y.once("close",()=>p.delete(y))},f=sc((y,S)=>{(async()=>{let w;try{w=new URL(y.url??"")}catch{w=new URL("invalid:")}let _=Number(w.port||80),v=w.protocol==="http:"?await vn(w.hostname,_,c):null;if(!v){l(),S.writeHead(403,{connection:"close"}).end();return}let C=ac({host:v,port:_,method:y.method,path:`${w.pathname}${w.search}`,headers:_s(y.headers,w.host),agent:!1,timeout:ys},(I)=>{S.writeHead(I.statusCode??502,I.headers),I.pipe(S)});C.on("timeout",()=>C.destroy()),C.on("error",()=>{if(!S.headersSent)S.writeHead(502);S.end()}),S.on("close",()=>C.destroy()),y.pipe(C)})().catch(()=>{if(!S.headersSent)S.writeHead(502);S.end()})});f.on("connection",m),f.on("connect",(y,S,w)=>{m(S),S.on("error",()=>S.destroy()),(async()=>{let _=pc(y.url??"",443),v=_?await vn(_.host,_.port,c):null;if(!_||!v){l(),Kt(S,403);return}let C=await hs(v,_.port).catch(()=>null);if(!C){Kt(S,502);return}if(S.destroyed){C.destroy();return}m(C),S.write(`HTTP/1.1 200 Connection Established\r
30
30
  \r
31
- `),gs(S,C,w)})().catch(()=>S.destroy())}),f.on("upgrade",(y,S,w)=>{m(S),S.on("error",()=>S.destroy()),(async()=>{let g;try{g=new URL(y.url??"")}catch{Gt(S,403);return}let v=Number(g.port||80),C=["http:","ws:"].includes(g.protocol)?await An(g.hostname,v,c):null;if(!C){l(),Gt(S,403);return}let I=await hs(C,v).catch(()=>null);if(!I){Gt(S,502);return}m(I);let A=_s(y.headers,g.host),M=[`${y.method} ${g.pathname}${g.search} HTTP/1.1`];for(let[N,L]of Object.entries(A))for(let B of Array.isArray(L)?L:L===void 0?[]:[L])M.push(`${N}: ${B}`);I.write(`${M.join(`\r
31
+ `),gs(S,C,w)})().catch(()=>S.destroy())}),f.on("upgrade",(y,S,w)=>{m(S),S.on("error",()=>S.destroy()),(async()=>{let _;try{_=new URL(y.url??"")}catch{Kt(S,403);return}let v=Number(_.port||80),C=["http:","ws:"].includes(_.protocol)?await vn(_.hostname,v,c):null;if(!C){l(),Kt(S,403);return}let I=await hs(C,v).catch(()=>null);if(!I){Kt(S,502);return}m(I);let A=_s(y.headers,_.host),M=[`${y.method} ${_.pathname}${_.search} HTTP/1.1`];for(let[N,L]of Object.entries(A))for(let B of Array.isArray(L)?L:L===void 0?[]:[L])M.push(`${N}: ${B}`);I.write(`${M.join(`\r
32
32
  `)}\r
33
33
  \r
34
- `),gs(S,I,w)})().catch(()=>S.destroy())}),await new Promise((y,S)=>{f.once("error",S),f.listen(0,"127.0.0.1",()=>y())});let{port:h}=f.address();return{url:`http://127.0.0.1:${h}`,close(){f.close();for(let y of p)y.destroy()}}}import{createHash as Hn,randomUUID as gc}from"crypto";import{closeSync as Br,constants as Fe,fchownSync as _c,fstatSync as lt,fsyncSync as yc,linkSync as Ns,lstatSync as $n,mkdirSync as Ms,openSync as Mr,readSync as Fs,realpathSync as Bn,unlinkSync as $s,writeSync as bc}from"fs";import{isAbsolute as wc,join as Sc,relative as vc,sep as Rc}from"path";import{platform as Fn}from"os";import{getSystemErrorName as xc}from"util";var ws={type:"string",format:"uuid"},Os=String.raw`^(?![\\/])(?![A-Za-z]:[\\/])(?!.*(?:^|[\\/])\.\.(?:[\\/]|$))(?!.*\u0000)(?=.*\S)[\s\S]+$`,Ar={type:"string",minLength:1,maxLength:4096,pattern:Os},Ln=t().min(1).max(4096).regex(new RegExp(Os)),Lr={device_id:t().uuid(),root_id:t().uuid(),timeout_ms:o().int().min(1000).max(60000).optional()},Dr={device_id:ws,root_id:ws,timeout_ms:{type:"integer",minimum:1000,maximum:60000}},Im={read:{schema:i({...Lr,path:Ln,offset:o().int().min(0).optional(),max_bytes:o().int().min(1).max(131072).optional()}).strict(),inputSchema:{type:"object",required:["device_id","root_id","path"],properties:{...Dr,path:Ar,offset:{type:"integer",minimum:0},max_bytes:{type:"integer",minimum:1,maximum:131072}},additionalProperties:!1}},write:{schema:i({...Lr,path:Ln,content:t().max(131072),mode:s(["overwrite","append"]).optional(),create_parents:d().optional()}).strict(),inputSchema:{type:"object",required:["device_id","root_id","path","content"],properties:{...Dr,path:Ar,content:{type:"string",maxLength:131072},mode:{type:"string",enum:["overwrite","append"]},create_parents:{type:"boolean"}},additionalProperties:!1}},exec:{schema:i({...Lr,command:t().min(1).max(16000),cwd:Ln.optional(),mode:s(["confined","host"]).optional()}).strict(),inputSchema:{type:"object",required:["device_id","root_id","command"],properties:{...Dr,command:{type:"string",minLength:1,maxLength:16000},cwd:Ar,mode:{type:"string",enum:["confined","host"],description:"Defaults to host: the existing permitted login shell with OS/account access, requiring execute and environment-discovery permission. Request confined explicitly for a scrubbed shell without network."}},additionalProperties:!1}}},Je=1073741824,Vt=600000,Rs=String.raw`(?!\.{1,2}(?:/|(?![\s\S])))[^/\\\u0000]+`,Is=String.raw`^(?![A-Za-z]:/)(?=[\s\S]*\S)${Rs}(?:/${Rs})*(?![\s\S])`,As=new RegExp(Is);function Ls(e){return typeof e==="string"&&e.length>0&&e.length<=4096&&As.test(e)}var Tn=t().min(1).max(4096).regex(As),Dn={...Ar,pattern:Is},ks=t().regex(/^[a-f0-9]{64}$/),Ts=i({kind:n("workspace"),path:Tn}).strict(),mc=_("kind",[Ts,i({kind:n("attachment"),attachment_id:t().min(1).max(120),sha256:ks}).strict()]),Nr=1,Yt="cloud_workspace_id",Nn="cloud_workspace",Mn=1,fc=_("kind",[Ts,i({kind:n("attachment"),download_url:t().min(1).max(16384),size_bytes:o().int().min(0).max(Je),sha256:ks}).strict()]),Ds=i({source_version:n(Nr),source:fc,url:t().min(1).max(16384),transfer_cloud_scope:i({sandboxId:t().min(1).max(256),revision:o().int().nonnegative(),brainFence:t().uuid()}).strict().optional(),[Yt]:t().min(1).max(160).optional()}).strict(),Am=i({ready:n(!0),cloud_source_version:n(Nr),source_kinds:u(s(["workspace","attachment"]))});var Cs=i({...Lr,timeout_ms:o().int().min(1000).max(Vt).optional(),source_path:Tn,destination_path:Tn,idempotency_key:t().min(1).max(160).regex(/^[A-Za-z0-9._:-]+$/).optional()}).strict(),Ps={type:"object",required:["device_id","root_id","source_path","destination_path"],properties:{...Dr,timeout_ms:{type:"integer",minimum:1000,maximum:Vt},source_path:Dn,destination_path:Dn,idempotency_key:{type:"string",minLength:1,maxLength:160,pattern:"^[A-Za-z0-9._:-]+$"}},additionalProperties:!1},hc={oneOf:[{type:"object",required:["kind","path"],properties:{kind:{type:"string",const:"workspace"},path:Dn},additionalProperties:!1},{type:"object",required:["kind","attachment_id","sha256"],properties:{kind:{type:"string",const:"attachment"},attachment_id:{type:"string",minLength:1,maxLength:120},sha256:{type:"string",pattern:"^[a-f0-9]{64}$"}},additionalProperties:!1}]},Lm=W([Cs,Cs.omit({source_path:!0}).extend({source:mc}).strict()]),km={...Ps,required:["device_id","root_id","destination_path"],properties:{...Ps.properties,source:hc},oneOf:[{required:["source_path"],not:{required:["source"]}},{required:["source"],not:{required:["source_path"]}}]};var jn=65536;function Se(e){throw new r(e,e)}function Fr(e){return typeof e==="object"&&e!==null&&"code"in e&&typeof e.code==="string"?e.code:void 0}function $r(e,l,c){if(l.throwIfAborted(),e instanceof r||e instanceof Error&&e.name==="AbortError")throw e;return Se(c)}function Ec(e,l,c){let p;switch(Fr(e)){case"ENOENT":p=c==="export"?"transfer_source_missing":"transfer_path_unavailable";break;case"EACCES":case"EPERM":case"EROFS":p="transfer_permission_denied";break;case"ELOOP":case"ENOTDIR":p="transfer_path_unsafe";break;case"EEXIST":p="transfer_destination_exists";break;default:p="transfer_path_unavailable"}return $r(e,l,p)}function Cc(e){if(typeof e!=="string"||e.length>16384)return Se("transfer_url_invalid");let l;try{l=new URL(e)}catch{return Se("transfer_url_invalid")}if(l.protocol!=="https:"||l.username||l.password||l.hash)return Se("transfer_url_invalid");return l.href}var Un=Fe.O_RDONLY|Fe.O_DIRECTORY|Fe.O_NOFOLLOW;async function Pc(){if(Fn()==="win32"){let w=new Map,g,v=-1,C=()=>Object.assign(Error("transfer_path_unsafe"),{code:"ELOOP"}),I=(L)=>{let B=vc(g,L);return B===""||B!==".."&&!B.startsWith(`..${Rc}`)&&!wc(B)},A=(L)=>{let B=$n(L);if(B.isSymbolicLink())throw C();if(!B.isDirectory())throw Object.assign(Error("transfer_path_unsafe"),{code:"ENOTDIR"});let F=Bn(L);if(g??=F,!I(F))throw C();return w.set(v,{path:L,real:F}),v--},M=(L)=>{let B=w.get(L);if(Bn(B.path)!==B.real)throw C();return B.path},N=(L,B)=>{if(nn(B))throw Object.assign(Error("transfer_path_invalid"),{code:"ENOTDIR"});return Sc(w.get(L).path,B)};return{root:A,openDirectory:(L,B)=>A(N(L,B)),open:(L,B,F,H=384)=>{let ne=N(L,B);if($n(ne,{throwIfNoEntry:!1})?.isSymbolicLink())throw C();M(L);let _e=Mr(ne,F,H);try{let xe=lt(_e),Ze=$n(ne);if(Ze.isSymbolicLink()||xe.ino!==Ze.ino||xe.dev!==Ze.dev||!I(Bn(ne)))throw C()}catch(xe){throw Br(_e),xe}return _e},mkdir:(L,B)=>{let F=N(L,B);M(L),Ms(F)},link:(L,B,F)=>{let H=N(L,B),ne=N(L,F);M(L),Ns(H,ne)},unlink:(L,B)=>$s(N(L,B)),closeDirectory:(L)=>{w.delete(L)},inherit:()=>{},close:()=>{}}}let e={root:(w)=>Mr(w,Un),closeDirectory:Br,inherit:Oc};if(Fn()==="linux")return{...e,openDirectory:(w,g)=>Mr(`/proc/self/fd/${w}/${g}`,Un),open:(w,g,v,C=384)=>Mr(`/proc/self/fd/${w}/${g}`,v,C),mkdir:(w,g)=>Ms(`/proc/self/fd/${w}/${g}`,{mode:448}),link:(w,g,v)=>Ns(`/proc/self/fd/${w}/${g}`,`/proc/self/fd/${w}/${v}`),unlink:(w,g)=>$s(`/proc/self/fd/${w}/${g}`),close:()=>{}};if(Fn()!=="darwin")return Se("transfer_platform_unsupported");let{dlopen:l,FFIType:c,ptr:p,read:m}=await import("bun:ffi"),f=l("/usr/lib/libSystem.B.dylib",{__error:{args:[],returns:c.ptr},openat:{args:[c.i32,c.ptr,c.i32,c.i32,c.i32,c.i32,c.i32,c.i32,c.i32],returns:c.i32},mkdirat:{args:[c.i32,c.ptr,c.i32],returns:c.i32},linkat:{args:[c.i32,c.ptr,c.i32,c.ptr,c.i32],returns:c.i32},unlinkat:{args:[c.i32,c.ptr,c.i32],returns:c.i32}}),h=f.symbols.__error();if(h===null)return f.close(),Se("transfer_path_unavailable");let y=(w)=>{if(w<0){let g=xc(-m.i32(h));throw Object.assign(Error("transfer_path_unavailable"),{code:g})}return w},S=(w,g,v,C=384)=>y(f.symbols.openat(w,p(Buffer.from(`${g}\x00`)),v,C,0,0,0,0,C));return{...e,openDirectory:(w,g)=>S(w,g,Un),open:S,mkdir:(w,g)=>{y(f.symbols.mkdirat(w,p(Buffer.from(`${g}\x00`)),448))},link:(w,g,v)=>{y(f.symbols.linkat(w,p(Buffer.from(`${g}\x00`)),w,p(Buffer.from(`${v}\x00`)),0))},unlink:(w,g)=>{y(f.symbols.unlinkat(w,p(Buffer.from(`${g}\x00`)),0))},close:()=>f.close()}}function Oc(e,l){let c=lt(e),p=lt(l);if(p.uid!==c.uid||p.gid!==c.gid)_c(l,c.uid,c.gid)}function Ic(e,l,c,p){if(!Ls(c))return Se("transfer_path_invalid");let m=c.split("/"),f=e.root(l);try{for(let h of m.slice(0,-1)){let y;try{y=e.openDirectory(f,h)}catch(S){if(!p||Fr(S)!=="ENOENT")throw S;try{e.mkdir(f,h)}catch(w){if(Fr(w)!=="EEXIST")throw w}y=e.openDirectory(f,h),e.inherit(f,y)}e.closeDirectory(f),f=y}return{fd:f,leaf:m.at(-1)}}catch(h){throw e.closeDirectory(f),h}}function Bs(e,l){let c=lt(e,{bigint:!0});if(!c.isFile()||c.size>Je)return Se("transfer_file_invalid");let p=Hn("sha256"),m=Buffer.alloc(jn),f=0;while(!0){l.throwIfAborted();let y=Fs(e,m,0,m.length,f);if(!y)break;if(f+=y,f>Je)return Se("transfer_size_exceeded");p.update(m.subarray(0,y))}let h=lt(e,{bigint:!0});if(BigInt(f)!==c.size||h.size!==c.size||h.mtimeNs!==c.mtimeNs||h.ctimeNs!==c.ctimeNs)return Se("transfer_source_changed");return{size_bytes:f,sha256:p.digest("hex")}}async function yt(e){e.signal.throwIfAborted();try{let l=Cc(e.payload.url),c=await Pc(),p,m,f;try{if(p=Ic(c,e.root,e.path,e.direction==="import"),e.direction==="export"){m=c.open(p.fd,p.leaf,Fe.O_RDONLY|Fe.O_NOFOLLOW|Fe.O_NONBLOCK);let C=lt(m,{bigint:!0});if(!C.isFile()||C.size>Je)return Se("transfer_file_invalid");let I=Hn("sha256"),A=0,M=m,N,L=new ReadableStream({pull(ne){try{e.signal.throwIfAborted();let _e=Buffer.alloc(jn),xe=Fs(M,_e,0,_e.length,A);if(!xe){ne.close();return}if(A+=xe,A>C.size)return Se("transfer_source_changed");I.update(_e.subarray(0,xe)),ne.enqueue(_e.subarray(0,xe))}catch(_e){throw N=_e,_e}}});try{let ne=await(e.fetchImpl??fetch)(l,Object.assign({method:"PUT",body:L,redirect:"error",signal:e.signal,headers:{"content-type":"application/octet-stream","content-length":String(C.size)}},{duplex:"half"}));if(N!==void 0)throw N;if(!ne.ok)return Se("transfer_upload_failed");await ne.body?.cancel()}catch(ne){if(N!==void 0)throw N;return $r(ne,e.signal,"transfer_upload_failed")}let B=lt(m,{bigint:!0});if(BigInt(A)!==C.size||B.size!==C.size||B.mtimeNs!==C.mtimeNs||B.ctimeNs!==C.ctimeNs)return Se("transfer_source_changed");let F=I.digest("hex"),H=Bs(m,e.signal);if(H.size_bytes!==A||H.sha256!==F)return Se("transfer_source_changed");return{size_bytes:A,sha256:F,outcome:"copied"}}let h=e.payload.size_bytes,y=e.payload.sha256;if(typeof h!=="number"||!Number.isSafeInteger(h)||h<0||h>Je||typeof y!=="string"||!/^[a-f0-9]{64}$/.test(y))return Se("transfer_receipt_invalid");let S;try{S=c.open(p.fd,p.leaf,Fe.O_RDONLY|Fe.O_NOFOLLOW|Fe.O_NONBLOCK)}catch(C){if(Fr(C)!=="ENOENT")throw C}if(S!==void 0){try{let C=Bs(S,e.signal);if(C.size_bytes===h&&C.sha256===y)return{...C,outcome:"already_present"}}finally{Br(S)}return Se("transfer_destination_exists")}f=`.reason-copy-${gc()}`,m=c.open(p.fd,f,Fe.O_CREAT|Fe.O_EXCL|Fe.O_WRONLY|Fe.O_NOFOLLOW,384),c.inherit(p.fd,m);let w;try{let C=await(e.fetchImpl??fetch)(l,{redirect:"error",signal:e.signal});if(!C.ok||!C.body)return Se("transfer_download_failed");w=C.body.getReader()}catch(C){return $r(C,e.signal,"transfer_download_failed")}let g=Hn("sha256"),v=0;try{while(!0){e.signal.throwIfAborted();let C=await w.read().catch((I)=>$r(I,e.signal,"transfer_download_failed"));if(C.done)break;if(v+=C.value.length,v>h)return Se("transfer_size_mismatch");g.update(C.value);for(let I=0;I<C.value.length;)e.signal.throwIfAborted(),I+=bc(m,C.value,I,Math.min(jn,C.value.length-I))}}finally{await w.cancel().catch(()=>{})}if(v!==h||g.digest("hex")!==y)return Se("transfer_hash_mismatch");return yc(m),await e.beforeCommit?.(),e.signal.throwIfAborted(),c.link(p.fd,f,p.leaf),{size_bytes:h,sha256:y,outcome:"copied"}}finally{try{if(m!==void 0)Br(m)}finally{try{if(p){if(f)try{c.unlink(p.fd,f)}catch{}c.closeDirectory(p.fd)}}finally{c.close()}}}}catch(l){return Ec(l,e.signal,e.direction)}}import{spawn as Lc}from"child_process";import{mkdtempSync as kc,rmSync as Tc,writeFileSync as Dc}from"fs";import{constants as Nc,platform as Mc,tmpdir as $c}from"os";import{join as qs}from"path";import{gunzipSync as Ac,gzipSync as Wm}from"zlib";var Hs=900000,Gm=Hs+60000,Xt=49152,Us=(e)=>t().min(1).max(e).regex(/^[A-Za-z0-9+/]+=*$/),js=i({version:n(1),script_gzip:Us(163840),stdin_gzip:Us(65536),cwd:t().min(1).max(4096).startsWith("/"),env:ee(t().regex(/^[A-Z_][A-Z0-9_]{0,63}$/),t().max(4096)).refine((e)=>Object.keys(e).length<=16,"too many variables"),timeout_ms:o().int().min(1000).max(Hs)}).strict(),qn=t().max(Xt+256),Vm=i({exit_code:o().int().min(0).max(255),stdout:qn,stderr:qn,combined:qn.optional()}).strict();function Wn(e){return Ac(Buffer.from(e,"base64")).toString("utf8")}var Bc="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",Fc=["RUSTUP_HOME","TZ","LC_ALL"],Uc=2000,Hc=100;function Gn(){return Mc()==="linux"&&process.geteuid?.()===0}function zn(e){let l=Math.floor(e/2),c=[],p=0,m=Buffer.alloc(0),f=0;return{push(h){f+=h.length;let y=h;if(p<l){let S=y.subarray(0,l-p);c.push(S),p+=S.length,y=y.subarray(S.length)}if(y.length)m=Buffer.concat([m,y]).subarray(-l)},text(){let h=f-p-m.length;return Buffer.concat(c).toString("utf8")+(h>0?`
34
+ `),gs(S,I,w)})().catch(()=>S.destroy())}),await new Promise((y,S)=>{f.once("error",S),f.listen(0,"127.0.0.1",()=>y())});let{port:h}=f.address();return{url:`http://127.0.0.1:${h}`,close(){f.close();for(let y of p)y.destroy()}}}import{createHash as Un,randomUUID as gc}from"crypto";import{closeSync as Br,constants as Fe,fchownSync as _c,fstatSync as at,fsyncSync as yc,linkSync as Ns,lstatSync as Dn,mkdirSync as Ms,openSync as Mr,readSync as Fs,realpathSync as Mn,unlinkSync as $s,writeSync as bc}from"fs";import{isAbsolute as wc,join as Sc,relative as vc,sep as Rc}from"path";import{platform as $n}from"os";import{getSystemErrorName as xc}from"util";var ws={type:"string",format:"uuid"},xs=String.raw`^(?![\\/])(?![A-Za-z]:[\\/])(?!.*(?:^|[\\/])\.\.(?:[\\/]|$))(?!.*\u0000)(?=.*\S)[\s\S]+$`,kr={type:"string",minLength:1,maxLength:4096,pattern:xs},Rn=t().min(1).max(4096).regex(new RegExp(xs)),Tr={device_id:t().uuid(),root_id:t().uuid(),timeout_ms:o().int().min(1000).max(60000).optional()},Dr={device_id:ws,root_id:ws,timeout_ms:{type:"integer",minimum:1000,maximum:60000}},Im={read:{schema:i({...Tr,path:Rn,offset:o().int().min(0).optional(),max_bytes:o().int().min(1).max(131072).optional()}).strict(),inputSchema:{type:"object",required:["device_id","root_id","path"],properties:{...Dr,path:kr,offset:{type:"integer",minimum:0},max_bytes:{type:"integer",minimum:1,maximum:131072}},additionalProperties:!1}},write:{schema:i({...Tr,path:Rn,content:t().max(131072),mode:s(["overwrite","append"]).optional(),create_parents:d().optional()}).strict(),inputSchema:{type:"object",required:["device_id","root_id","path","content"],properties:{...Dr,path:kr,content:{type:"string",maxLength:131072},mode:{type:"string",enum:["overwrite","append"]},create_parents:{type:"boolean"}},additionalProperties:!1}},exec:{schema:i({...Tr,command:t().min(1).max(16000),cwd:Rn.optional(),mode:s(["confined","host"]).optional()}).strict(),inputSchema:{type:"object",required:["device_id","root_id","command"],properties:{...Dr,command:{type:"string",minLength:1,maxLength:16000},cwd:kr,mode:{type:"string",enum:["confined","host"],description:"Defaults to host: the existing permitted login shell with OS/account access, requiring execute and environment-discovery permission. Request confined explicitly for a scrubbed shell without network."}},additionalProperties:!1}}},Je=1073741824,Yt=600000,Ss=String.raw`(?!\.{1,2}(?:/|(?![\s\S])))[^/\\\u0000]+`,Es=String.raw`^(?![A-Za-z]:/)(?=[\s\S]*\S)${Ss}(?:/${Ss})*(?![\s\S])`,Os=new RegExp(Es);function Is(e){return typeof e==="string"&&e.length>0&&e.length<=4096&&Os.test(e)}var En=t().min(1).max(4096).regex(Os),On={...kr,pattern:Es},Ls=t().regex(/^[a-f0-9]{64}$/),Ts=i({kind:n("workspace"),path:En}).strict(),mc=g("kind",[Ts,i({kind:n("attachment"),attachment_id:t().min(1).max(120),sha256:Ls}).strict()]),Nr=1,Xt="cloud_workspace_id",In="cloud_workspace",Ln=1,fc=g("kind",[Ts,i({kind:n("attachment"),download_url:t().min(1).max(16384),size_bytes:o().int().min(0).max(Je),sha256:Ls}).strict()]),Ds=i({source_version:n(Nr),source:fc,url:t().min(1).max(16384),transfer_cloud_scope:i({sandboxId:t().min(1).max(256),revision:o().int().nonnegative(),brainFence:t().uuid()}).strict().optional(),[Xt]:t().min(1).max(160).optional()}).strict(),Am=i({ready:n(!0),cloud_source_version:n(Nr),source_kinds:u(s(["workspace","attachment"]))});var vs=i({...Tr,timeout_ms:o().int().min(1000).max(Yt).optional(),source_path:En,destination_path:En,idempotency_key:t().min(1).max(160).regex(/^[A-Za-z0-9._:-]+$/).optional()}).strict(),Rs={type:"object",required:["device_id","root_id","source_path","destination_path"],properties:{...Dr,timeout_ms:{type:"integer",minimum:1000,maximum:Yt},source_path:On,destination_path:On,idempotency_key:{type:"string",minLength:1,maxLength:160,pattern:"^[A-Za-z0-9._:-]+$"}},additionalProperties:!1},hc={oneOf:[{type:"object",required:["kind","path"],properties:{kind:{type:"string",const:"workspace"},path:On},additionalProperties:!1},{type:"object",required:["kind","attachment_id","sha256"],properties:{kind:{type:"string",const:"attachment"},attachment_id:{type:"string",minLength:1,maxLength:120},sha256:{type:"string",pattern:"^[a-f0-9]{64}$"}},additionalProperties:!1}]},Lm=W([vs,vs.omit({source_path:!0}).extend({source:mc}).strict()]),km={...Rs,required:["device_id","root_id","destination_path"],properties:{...Rs.properties,source:hc},oneOf:[{required:["source_path"],not:{required:["source"]}},{required:["source"],not:{required:["source_path"]}}]};var Hn=65536;function Se(e){throw new r(e,e)}function Fr(e){return typeof e==="object"&&e!==null&&"code"in e&&typeof e.code==="string"?e.code:void 0}function $r(e,l,c){if(l.throwIfAborted(),e instanceof r||e instanceof Error&&e.name==="AbortError")throw e;return Se(c)}function Ec(e,l,c){let p;switch(Fr(e)){case"ENOENT":p=c==="export"?"transfer_source_missing":"transfer_path_unavailable";break;case"EACCES":case"EPERM":case"EROFS":p="transfer_permission_denied";break;case"ELOOP":case"ENOTDIR":p="transfer_path_unsafe";break;case"EEXIST":p="transfer_destination_exists";break;default:p="transfer_path_unavailable"}return $r(e,l,p)}function Cc(e){if(typeof e!=="string"||e.length>16384)return Se("transfer_url_invalid");let l;try{l=new URL(e)}catch{return Se("transfer_url_invalid")}if(l.protocol!=="https:"||l.username||l.password||l.hash)return Se("transfer_url_invalid");return l.href}var Bn=Fe.O_RDONLY|Fe.O_DIRECTORY|Fe.O_NOFOLLOW;async function Pc(){if($n()==="win32"){let w=new Map,_,v=-1,C=()=>Object.assign(Error("transfer_path_unsafe"),{code:"ELOOP"}),I=(L)=>{let B=vc(_,L);return B===""||B!==".."&&!B.startsWith(`..${Rc}`)&&!wc(B)},A=(L)=>{let B=Dn(L);if(B.isSymbolicLink())throw C();if(!B.isDirectory())throw Object.assign(Error("transfer_path_unsafe"),{code:"ENOTDIR"});let F=Mn(L);if(_??=F,!I(F))throw C();return w.set(v,{path:L,real:F}),v--},M=(L)=>{let B=w.get(L);if(Mn(B.path)!==B.real)throw C();return B.path},N=(L,B)=>{if(sn(B))throw Object.assign(Error("transfer_path_invalid"),{code:"ENOTDIR"});return Sc(w.get(L).path,B)};return{root:A,openDirectory:(L,B)=>A(N(L,B)),open:(L,B,F,H=384)=>{let ne=N(L,B);if(Dn(ne,{throwIfNoEntry:!1})?.isSymbolicLink())throw C();M(L);let _e=Mr(ne,F,H);try{let Ee=at(_e),Ze=Dn(ne);if(Ze.isSymbolicLink()||Ee.ino!==Ze.ino||Ee.dev!==Ze.dev||!I(Mn(ne)))throw C()}catch(Ee){throw Br(_e),Ee}return _e},mkdir:(L,B)=>{let F=N(L,B);M(L),Ms(F)},link:(L,B,F)=>{let H=N(L,B),ne=N(L,F);M(L),Ns(H,ne)},unlink:(L,B)=>$s(N(L,B)),closeDirectory:(L)=>{w.delete(L)},inherit:()=>{},close:()=>{}}}let e={root:(w)=>Mr(w,Bn),closeDirectory:Br,inherit:Oc};if($n()==="linux")return{...e,openDirectory:(w,_)=>Mr(`/proc/self/fd/${w}/${_}`,Bn),open:(w,_,v,C=384)=>Mr(`/proc/self/fd/${w}/${_}`,v,C),mkdir:(w,_)=>Ms(`/proc/self/fd/${w}/${_}`,{mode:448}),link:(w,_,v)=>Ns(`/proc/self/fd/${w}/${_}`,`/proc/self/fd/${w}/${v}`),unlink:(w,_)=>$s(`/proc/self/fd/${w}/${_}`),close:()=>{}};if($n()!=="darwin")return Se("transfer_platform_unsupported");let{dlopen:l,FFIType:c,ptr:p,read:m}=await import("bun:ffi"),f=l("/usr/lib/libSystem.B.dylib",{__error:{args:[],returns:c.ptr},openat:{args:[c.i32,c.ptr,c.i32,c.i32,c.i32,c.i32,c.i32,c.i32,c.i32],returns:c.i32},mkdirat:{args:[c.i32,c.ptr,c.i32],returns:c.i32},linkat:{args:[c.i32,c.ptr,c.i32,c.ptr,c.i32],returns:c.i32},unlinkat:{args:[c.i32,c.ptr,c.i32],returns:c.i32}}),h=f.symbols.__error();if(h===null)return f.close(),Se("transfer_path_unavailable");let y=(w)=>{if(w<0){let _=xc(-m.i32(h));throw Object.assign(Error("transfer_path_unavailable"),{code:_})}return w},S=(w,_,v,C=384)=>y(f.symbols.openat(w,p(Buffer.from(`${_}\x00`)),v,C,0,0,0,0,C));return{...e,openDirectory:(w,_)=>S(w,_,Bn),open:S,mkdir:(w,_)=>{y(f.symbols.mkdirat(w,p(Buffer.from(`${_}\x00`)),448))},link:(w,_,v)=>{y(f.symbols.linkat(w,p(Buffer.from(`${_}\x00`)),w,p(Buffer.from(`${v}\x00`)),0))},unlink:(w,_)=>{y(f.symbols.unlinkat(w,p(Buffer.from(`${_}\x00`)),0))},close:()=>f.close()}}function Oc(e,l){let c=at(e),p=at(l);if(p.uid!==c.uid||p.gid!==c.gid)_c(l,c.uid,c.gid)}function Ic(e,l,c,p){if(!Is(c))return Se("transfer_path_invalid");let m=c.split("/"),f=e.root(l);try{for(let h of m.slice(0,-1)){let y;try{y=e.openDirectory(f,h)}catch(S){if(!p||Fr(S)!=="ENOENT")throw S;try{e.mkdir(f,h)}catch(w){if(Fr(w)!=="EEXIST")throw w}y=e.openDirectory(f,h),e.inherit(f,y)}e.closeDirectory(f),f=y}return{fd:f,leaf:m.at(-1)}}catch(h){throw e.closeDirectory(f),h}}function Bs(e,l){let c=at(e,{bigint:!0});if(!c.isFile()||c.size>Je)return Se("transfer_file_invalid");let p=Un("sha256"),m=Buffer.alloc(Hn),f=0;while(!0){l.throwIfAborted();let y=Fs(e,m,0,m.length,f);if(!y)break;if(f+=y,f>Je)return Se("transfer_size_exceeded");p.update(m.subarray(0,y))}let h=at(e,{bigint:!0});if(BigInt(f)!==c.size||h.size!==c.size||h.mtimeNs!==c.mtimeNs||h.ctimeNs!==c.ctimeNs)return Se("transfer_source_changed");return{size_bytes:f,sha256:p.digest("hex")}}async function _t(e){e.signal.throwIfAborted();try{let l=Cc(e.payload.url),c=await Pc(),p,m,f;try{if(p=Ic(c,e.root,e.path,e.direction==="import"),e.direction==="export"){m=c.open(p.fd,p.leaf,Fe.O_RDONLY|Fe.O_NOFOLLOW|Fe.O_NONBLOCK);let C=at(m,{bigint:!0});if(!C.isFile()||C.size>Je)return Se("transfer_file_invalid");let I=Un("sha256"),A=0,M=m,N,L=new ReadableStream({pull(ne){try{e.signal.throwIfAborted();let _e=Buffer.alloc(Hn),Ee=Fs(M,_e,0,_e.length,A);if(!Ee){ne.close();return}if(A+=Ee,A>C.size)return Se("transfer_source_changed");I.update(_e.subarray(0,Ee)),ne.enqueue(_e.subarray(0,Ee))}catch(_e){throw N=_e,_e}}});try{let ne=await(e.fetchImpl??fetch)(l,Object.assign({method:"PUT",body:L,redirect:"error",signal:e.signal,headers:{"content-type":"application/octet-stream","content-length":String(C.size)}},{duplex:"half"}));if(N!==void 0)throw N;if(!ne.ok)return Se("transfer_upload_failed");await ne.body?.cancel()}catch(ne){if(N!==void 0)throw N;return $r(ne,e.signal,"transfer_upload_failed")}let B=at(m,{bigint:!0});if(BigInt(A)!==C.size||B.size!==C.size||B.mtimeNs!==C.mtimeNs||B.ctimeNs!==C.ctimeNs)return Se("transfer_source_changed");let F=I.digest("hex"),H=Bs(m,e.signal);if(H.size_bytes!==A||H.sha256!==F)return Se("transfer_source_changed");return{size_bytes:A,sha256:F,outcome:"copied"}}let h=e.payload.size_bytes,y=e.payload.sha256;if(typeof h!=="number"||!Number.isSafeInteger(h)||h<0||h>Je||typeof y!=="string"||!/^[a-f0-9]{64}$/.test(y))return Se("transfer_receipt_invalid");let S;try{S=c.open(p.fd,p.leaf,Fe.O_RDONLY|Fe.O_NOFOLLOW|Fe.O_NONBLOCK)}catch(C){if(Fr(C)!=="ENOENT")throw C}if(S!==void 0){try{let C=Bs(S,e.signal);if(C.size_bytes===h&&C.sha256===y)return{...C,outcome:"already_present"}}finally{Br(S)}return Se("transfer_destination_exists")}f=`.reason-copy-${gc()}`,m=c.open(p.fd,f,Fe.O_CREAT|Fe.O_EXCL|Fe.O_WRONLY|Fe.O_NOFOLLOW,384),c.inherit(p.fd,m);let w;try{let C=await(e.fetchImpl??fetch)(l,{redirect:"error",signal:e.signal});if(!C.ok||!C.body)return Se("transfer_download_failed");w=C.body.getReader()}catch(C){return $r(C,e.signal,"transfer_download_failed")}let _=Un("sha256"),v=0;try{while(!0){e.signal.throwIfAborted();let C=await w.read().catch((I)=>$r(I,e.signal,"transfer_download_failed"));if(C.done)break;if(v+=C.value.length,v>h)return Se("transfer_size_mismatch");_.update(C.value);for(let I=0;I<C.value.length;)e.signal.throwIfAborted(),I+=bc(m,C.value,I,Math.min(Hn,C.value.length-I))}}finally{await w.cancel().catch(()=>{})}if(v!==h||_.digest("hex")!==y)return Se("transfer_hash_mismatch");return yc(m),await e.beforeCommit?.(),e.signal.throwIfAborted(),c.link(p.fd,f,p.leaf),{size_bytes:h,sha256:y,outcome:"copied"}}finally{try{if(m!==void 0)Br(m)}finally{try{if(p){if(f)try{c.unlink(p.fd,f)}catch{}c.closeDirectory(p.fd)}}finally{c.close()}}}}catch(l){return Ec(l,e.signal,e.direction)}}import{spawn as Lc}from"child_process";import{mkdtempSync as kc,rmSync as Tc,writeFileSync as Dc}from"fs";import{constants as Nc,platform as Mc,tmpdir as $c}from"os";import{join as qs}from"path";import{gunzipSync as Ac,gzipSync as Wm}from"zlib";var Hs=900000,Gm=Hs+60000,Zt=49152,Us=(e)=>t().min(1).max(e).regex(/^[A-Za-z0-9+/]+=*$/),js=i({version:n(1),script_gzip:Us(163840),stdin_gzip:Us(65536),cwd:t().min(1).max(4096).startsWith("/"),env:ee(t().regex(/^[A-Z_][A-Z0-9_]{0,63}$/),t().max(4096)).refine((e)=>Object.keys(e).length<=16,"too many variables"),timeout_ms:o().int().min(1000).max(Hs)}).strict(),qn=t().max(Zt+256),Vm=i({exit_code:o().int().min(0).max(255),stdout:qn,stderr:qn,combined:qn.optional()}).strict();function Wn(e){return Ac(Buffer.from(e,"base64")).toString("utf8")}var Bc="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",Fc=["RUSTUP_HOME","TZ","LC_ALL"],Uc=2000,Hc=100;function Gn(){return Mc()==="linux"&&process.geteuid?.()===0}function zn(e){let l=Math.floor(e/2),c=[],p=0,m=Buffer.alloc(0),f=0;return{push(h){f+=h.length;let y=h;if(p<l){let S=y.subarray(0,l-p);c.push(S),p+=S.length,y=y.subarray(S.length)}if(y.length)m=Buffer.concat([m,y]).subarray(-l)},text(){let h=f-p-m.length;return Buffer.concat(c).toString("utf8")+(h>0?`
35
35
  [reason: ${h} bytes of output omitted]
36
- `:"")+m.toString("utf8")}}}async function Ws(e,l){if(!Gn())throw new r("workspace_setup_requires_root","Workspace setup runs only on a root Linux worker.");let c=js.safeParse(e);if(!c.success)throw new r("invalid_request","Reason sent an invalid workspace setup.");let p=c.data,m,f;try{m=Wn(p.script_gzip),f=Wn(p.stdin_gzip)}catch{throw new r("invalid_request","Reason sent an unreadable workspace setup.")}l.throwIfAborted();let h=kc(qs($c(),"reason-workspace-setup-"));try{let y=qs(h,"setup.sh");Dc(y,m,{mode:384});let S={PATH:Bc,LANG:"C.UTF-8",HOME:"/root",USER:"root",LOGNAME:"root",SHELL:"/bin/bash",TMPDIR:"/tmp"};for(let H of Fc)if(process.env[H])S[H]=process.env[H];Object.assign(S,p.env);let w=Lc("/bin/bash",[y],{cwd:p.cwd,env:S,detached:!0,stdio:["pipe","pipe","pipe"]}),g=zn(Xt),v=zn(Xt),C=zn(Xt);w.stdout.on("data",(H)=>{g.push(H),C.push(H)}),w.stderr.on("data",(H)=>{v.push(H),C.push(H)}),w.stdin.on("error",()=>{}),w.stdin.end(f);let I=(H)=>{try{if(w.pid)process.kill(-w.pid,H)}catch{}},A=!1,M,N=()=>{I("SIGTERM"),M??=setTimeout(()=>I("SIGKILL"),Uc)},L=setTimeout(()=>{A=!0,N()},p.timeout_ms);l.addEventListener("abort",N,{once:!0});let B=await new Promise((H,ne)=>{w.once("error",()=>ne(new r("workspace_setup_start_failed","The workspace setup did not start."))),w.once("exit",(_e,xe)=>H({code:_e,signal:xe}))}).finally(()=>{clearTimeout(L),clearTimeout(M),l.removeEventListener("abort",N)});await new Promise((H)=>{let ne=setTimeout(H,Hc);w.once("close",()=>{clearTimeout(ne),H()})}),w.stdout.destroy(),w.stderr.destroy(),l.throwIfAborted();let F=A?124:B.signal?128+(Nc.signals[B.signal]??0):B.code??1;return{exit_code:Math.min(255,F),stdout:g.text(),stderr:v.text(),...F!==0?{combined:C.text()}:{}}}finally{Tc(h,{recursive:!0,force:!0})}}import{chmodSync as jc,mkdtempSync as qc,realpathSync as zs,rmSync as Wc}from"fs";import{tmpdir as zc}from"os";import{dirname as Gc,join as Vn,sep as Vc}from"path";function Kn(e){return wr(e,gr(e)!==null).repoPath}function Gs(e,l){let c;try{if(typeof l!=="string")throw Error("invalid");c=[Z,void 0].map((m)=>Gc(O({kind:"managed",workspaceId:l,...m?{layout:m}:{}})))}catch{throw new r("cloud_copy_workspace_invalid","The Cloud copy workspace is invalid.")}let p;for(let m of c)try{p=zs(Vn(e,m));break}catch{}if(p===void 0)throw new r("cloud_copy_workspace_unavailable","The Session workspace is not on this computer.");if(!p.startsWith(`${e}${Vc}`))throw new r("cloud_copy_workspace_invalid","The Cloud copy workspace is outside this worker's root.");return p}async function Vs(e){e.signal.throwIfAborted();let l=e.source;if(l.kind==="workspace"){let p=Kn(e.runtimeRoot);if(E(p)||E(Vn(p,l.path)))throw new r("protected_path","Credential and secret paths are unavailable to local tasks.");return yt({direction:"export",root:p,path:l.path,payload:{url:e.url},signal:e.signal,fetchImpl:e.fetchImpl})}let c=qc(Vn(zc(),`reason-cloud-copy-${process.pid}-`));try{jc(c,448);let p=zs(c);await yt({direction:"import",root:p,path:"source",payload:{url:l.download_url,size_bytes:l.size_bytes,sha256:l.sha256},signal:e.signal,fetchImpl:e.fetchImpl});let m=await yt({direction:"export",root:p,path:"source",payload:{url:e.url},signal:e.signal,fetchImpl:e.fetchImpl});if(m.size_bytes!==l.size_bytes||m.sha256!==l.sha256)throw new r("transfer_source_changed","The verified attachment changed before export.");return m}finally{Wc(c,{recursive:!0,force:!0})}}import{constants as qe}from"fs";import{closeSync as hl,existsSync as Ye,fstatSync as gl,ftruncateSync as dp,lstatSync as ri,mkdirSync as pp,mkdtempSync as mp,openSync as _l,readSync as fp,realpathSync as Ve,rmSync as hp,statSync as br,writeSync as gp}from"fs";import{homedir as ur,platform as X,tmpdir as _p}from"os";import{dirname as dr,isAbsolute as yp,join as yl,relative as Ri,resolve as bp,sep as wp}from"path";import{spawn as Sp}from"child_process";var ff=en+15000;var Ks=["fs.read","fs.write","fs.export","fs.import","exec.run","exec.full","process.run.v1","process.full.v1","preview.serve.v1","pty.start","git.run","process.list","ports.list","computer.use","browser.use","browser.recording.v1","browser.pr-proof.v1","hands.connect","jobs.control","environment.install","github.local.v1","inference.custom.v1","display.stream.v1","automation.call.v1","simulator.call.v1","simulator.stream.v1","tunnel.open","tunnel.close","workspace.setup.v1"];var Yc=new Set(["process.run.v1","process.full.v1","computer.use","browser.use"]),Qt=new Set(["jobs.control","environment.install","tunnel.open","tunnel.close","display.stream.v1","automation.call.v1","workspace.setup.v1","simulator.call.v1","simulator.stream.v1"]);function Ur(e,l){if(Yc.has(e))return!1;if(Qt.has(e)&&!l.runtimeDirectory)return!1;if((e==="inference.custom.v1"||e==="preview.serve.v1"||e==="simulator.call.v1"||e==="simulator.stream.v1")&&(l.executionMode!=="unsandboxed"||!l.runtimeDirectory))return!1;if(l.executionMode!=="unsandboxed"&&(["exec.full","hands.connect","pty.start","browser.pr-proof.v1"].includes(e)||Qt.has(e)))return!1;return!0}import{accessSync as Xc,constants as Jc,existsSync as Zc,statSync as Qc}from"fs";import{basename as eu,isAbsolute as tu}from"path";var er=["-lic"],Ys="/bin/zsh",ru=new Set(["zsh","bash"]),Xs=20000,Yn=60000,nu=65536,ou=64,iu=8192,su=new Set(["NODE_OPTIONS","PATH","ZDOTDIR","BASH_ENV","ENV"]),au=["DYLD_","LD_"];function lu(e){let l=e.toUpperCase();return su.has(l)||au.some((c)=>l.startsWith(c))}function Js(e=process.env){return!0}function cu(e){if(!tu(e)||e.includes("\x00"))return!1;if(!ru.has(eu(e)))return!1;try{if(!Qc(e).isFile())return!1;return Xc(e,Jc.X_OK),!0}catch{return!1}}function St(e=process.env){if(process.platform==="win32")return fe()??Ys;let l=e.SHELL?.trim();if(l&&cu(l))return l;return Ys}function Jn(e=process.env){return Js(e)&&Zc(St(e))}function Zn(e=process.env){if(!Js(e))throw new r("full_control_disabled","Full-control execution is unavailable on this Reason Device.")}function eo(e){if(typeof e!=="string"||e.length===0||e.includes("\x00")||Buffer.byteLength(e,"utf8")>nu)throw new r("invalid_payload","command is missing or too large.");return e}function ro(e){if(e===void 0||e===null)return{forwarded:{},ignored:[]};if(typeof e!=="object"||Array.isArray(e))throw new r("invalid_payload","env must be an object of strings.");let l=Object.entries(e);if(l.length>ou)throw new r("invalid_payload","env has too many entries.");let c={},p=[];for(let[m,f]of l){if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(m)||typeof f!=="string"||f.includes("\x00")||Buffer.byteLength(f,"utf8")>iu)throw new r("invalid_payload","env entry is invalid or too large.");if(lu(m)){p.push(m);continue}c[m]=f}return{forwarded:c,ignored:p}}async function Zs(e){let l=e.processEnv??process.env;if(Zn(l),e.signal.aborted)throw new r("cancelled","Operation was cancelled.");let c=eo(e.command),p=St(l),{forwarded:m,ignored:f}=ro(e.requestEnv),h=await e.spawn(p,[...er,c],{cwd:e.cwd,timeoutMs:e.timeoutMs,signal:e.signal,env:{...l,...m}});return{exit_code:h.exitCode,signal:h.signal,stdout:h.stdout,stderr:h.stderr,timed_out:h.timedOut,truncated:h.truncated,shell:p,shell_flags:[...er],login:!0,interactive:!0,sandbox:"none",ignored_env:f}}function Qs(e=process.env){return{transport:"shell",shell:`${St(e)} ${er.join(" ")}`,login_shell:!0,interactive_shell:!0,rc_files_loaded:!0,sandbox:"none",network:!0,environment:"inherited",privilege:"user",sudo:"argv_exact_nopasswd_only",activation:"explicit_device_grant",max_timeout_ms:Yn}}import{readFile as uu,readdir as du,readlink as pu,realpath as mu}from"fs/promises";import{basename as fu,relative as hu,sep as gu}from"path";var ct="/proc",_u=250,ea=500,yu=50,bu=250,wu=1024,ta=4096,Su=1,vu=3,ra=9,Ru="0A",xu=/^socket:\[(\d+)\]$/,no={readDirectory:(e)=>du(e),readLink:(e)=>pu(e),readTextFile:(e)=>uu(e,"utf8"),realPath:(e)=>mu(e)};function oa(e,l){return l===e||l.startsWith(`${e}${gu}`)}function Eu(e,l){return hu(e,l)||"."}async function ia(e){let l;try{l=await e.readDirectory(ct)}catch{return[]}return l.filter((c)=>/^[0-9]+$/.test(c)).map((c)=>Number(c)).filter((c)=>Number.isSafeInteger(c)&&c>0).sort((c,p)=>c-p)}async function sa(e,l){try{let p=(await l.readTextFile(`${ct}/${e}/comm`)).slice(0,ta).split(`
37
- `,1)[0]?.trim();if(p)return p}catch{}try{let p=(await l.readTextFile(`${ct}/${e}/cmdline`)).slice(0,ta).split("\x00",1)[0]?.trim();return p?fu(p):null}catch{return null}}async function aa(e,l=no){let c;try{c=await l.readLink(`${ct}/${e}/cwd`)}catch{return null}if(!c)return null;try{return await l.realPath(c)}catch{return null}}async function la(e,l=no){let c=[];for(let p of await ia(l)){if(c.length>=_u)break;let m=await aa(p,l);if(!m||!oa(e,m))continue;c.push({pid:p,command:await sa(p,l),cwd:Eu(e,m)})}return{processes:c}}function na(e){let l=[];for(let c=0;c<8;c+=2)l.unshift(Number.parseInt(e.slice(c,c+2),16));return l}function Cu(e){let l=[];for(let S=0;S<16;S+=2)l.push(e[S]<<8|e[S+1]);if(l.slice(0,5).every((S)=>S===0)&&l[5]===65535)return`::ffff:${e.slice(12).join(".")}`;let c=-1,p=0,m=-1;for(let S=0;S<=l.length;S+=1){if(S<l.length&&l[S]===0){if(m<0)m=S;continue}if(m>=0){let w=S-m;if(w>p)c=m,p=w;m=-1}}let f=l.map((S)=>S.toString(16));if(p<2)return f.join(":");let h=f.slice(0,c).join(":"),y=f.slice(c+p).join(":");return`${h}::${y}`}function Pu(e,l){if(/^[0-9A-Fa-f]{8}$/.test(e)){let c=na(e);if(c.every((p)=>p===0))return`*:${l}`;return`${c.join(".")}:${l}`}if(/^[0-9A-Fa-f]{32}$/.test(e)){let c=[];for(let p=0;p<4;p+=1)c.push(...na(e.slice(p*8,p*8+8)));if(c.every((p)=>p===0))return`*:${l}`;return`[${Cu(c)}]:${l}`}return null}function Ou(e,l){let c=[];for(let p of e.split(`
38
- `).slice(1)){if(c.length>=l)break;let m=p.trim().split(/\s+/);if(m.length<=ra)continue;if(m[vu]?.toUpperCase()!==Ru)continue;let f=m[Su]??"",h=f.lastIndexOf(":");if(h<0)continue;let y=Number.parseInt(f.slice(h+1),16);if(!Number.isInteger(y)||y<=0||y>65535)continue;let S=Pu(f.slice(0,h),y),w=m[ra];if(!S||!w||!/^[0-9]+$/.test(w))continue;c.push({inode:w,port:y,address:S})}return c}async function Iu(e){let l=[];for(let c of["tcp","tcp6"]){if(l.length>=ea)break;let p;try{p=await e.readTextFile(`${ct}/net/${c}`)}catch{continue}l.push(...Ou(p,ea-l.length))}return l}async function Au(e,l){let c=new Map;if(e.size===0)return c;for(let p of await ia(l)){if(c.size>=e.size)break;let m;try{m=await l.readDirectory(`${ct}/${p}/fd`)}catch{continue}for(let f of m.slice(0,wu)){let h;try{h=await l.readLink(`${ct}/${p}/fd/${f}`)}catch{continue}let y=h.match(xu)?.[1];if(!y||!e.has(y)||c.has(y))continue;c.set(y,p)}}return c}async function ca(e,l=no){let c=await Iu(l),p=await Au(new Set(c.map((g)=>g.inode)),l),m=[];for(let g of c){let v=p.get(g.inode);if(v===void 0)continue;m.push({pid:v,port:g.port,address:g.address})}m.sort((g,v)=>g.pid-v.pid||g.port-v.port||(g.address<v.address?-1:g.address>v.address?1:0));let f=[...new Set(m.map((g)=>g.pid))].slice(0,yu),h=await Promise.all(f.map(async(g)=>[g,await aa(g,l)])),y=new Map(h),S=m.filter((g)=>{let v=y.get(g.pid);return Boolean(v&&oa(e,v))}),w=new Map(await Promise.all([...new Set(S.map((g)=>g.pid))].map(async(g)=>[g,await sa(g,l)])));return{ports:S.slice(0,bu).map((g)=>({pid:g.pid,command:w.get(g.pid)??null,address:g.address}))}}import{posix as io}from"path";var Hr=200,Lu=250,ku=250;async function jr(e,l){let c=await e(l);if(c.timedOut||c.truncated||c.exitCode!==0&&c.exitCode!==1)throw new r("process_inspection_failed","Reading this Mac's processes did not complete.");let p=[],m=null;for(let f of c.stdout.split(/\r?\n/))if(f.startsWith("p")){let h=Number(f.slice(1));if(m=Number.isInteger(h)&&h>0?{pid:h,command:null,names:[]}:null,m)p.push(m)}else if(m&&f.startsWith("c"))m.command=f.slice(1)||null;else if(m&&f.startsWith("n"))m.names.push(f.slice(1));return p}function oo(e,l){return l===e||l.startsWith(e==="/"?e:`${e}/`)}var ua="/System/Volumes/Data",Tu=["/tmp","/var","/etc"];function ao(e){let l=io.normalize(e);if(l.startsWith(`${ua}/`))l=l.slice(ua.length);return Tu.find((p)=>l===p||l.startsWith(`${p}/`))?`/private${l}`:l}function da(e){return e&&io.isAbsolute(e)?ao(e):null}async function pa(e,l){let c=new Map;for(let p=0;p<l.length;p+=Hr){let m=l.slice(p,p+Hr).join(",");for(let f of await jr(e,["-a","-p",m,"-d","cwd","-Fpcn"]))c.set(f.pid,{command:f.command,cwd:da(f.names[0])})}return c}async function ma(e,l){let c=ao(e),p=(await jr(l,["-d","cwd","-Fpn"])).filter((f)=>{let h=da(f.names[0]);return h!==null&&oo(c,h)}).map((f)=>f.pid).slice(0,Lu),m=await pa(l,p);return{processes:p.flatMap((f)=>{let h=m.get(f);return h?.cwd&&oo(c,h.cwd)?[{pid:f,command:h.command,cwd:io.relative(c,h.cwd)||"."}]:[]})}}async function fa(e,l){let c=ao(e),p=["-nP","-iTCP","-sTCP:LISTEN","-Fpcn"],m=await jr(l,p),f=await pa(l,m.map((w)=>w.pid)),h=m.map((w)=>w.pid).filter((w)=>{let g=f.get(w)?.cwd;return Boolean(g&&oo(c,g))});if(h.length===0)return{ports:[]};let y=new Set(m.flatMap((w)=>w.names.map((g)=>`${w.pid} ${g}`))),S=[];for(let w=0;w<h.length;w+=Hr){let g=h.slice(w,w+Hr).join(",");for(let v of await jr(l,["-a","-p",g,...p]))for(let C of v.names)if(y.has(`${v.pid} ${C}`))S.push({pid:v.pid,command:v.command,address:C})}return{ports:S.slice(0,ku)}}import{join as zu}from"path";import{spawn as Fu}from"child_process";import{randomUUID as Uu}from"crypto";import{chmodSync as _a,lstatSync as ya,mkdirSync as Hu,readdirSync as ju,statSync as qu,unlinkSync as Wu}from"fs";import{join as co}from"path";var lo={targets:24,assets:128,sourceFiles:2000,sourceBytes:20000000,outputBytes:20000000};var qr=(e,l=0,c=1e6)=>typeof e==="number"&&Number.isFinite(e)&&e>=l&&e<=c;var ut=()=>{throw Error("proof_visual_contract_invalid")};class ha extends Error{constructor(){super("proof_visual_contract_invalid")}}function an(e){if(!be(e)||e.version!==1)return ut();if(typeof e.route!=="string"||!e.route.startsWith("/")||e.route.length>512||/[\x00-\x20\x7f\\?#%]/.test(e.route)||e.route.startsWith("//"))throw new ha;if(!be(e.viewport)||!qr(e.viewport.width,1,4096)||!qr(e.viewport.height,1,4096)||!Array.isArray(e.targets)||e.targets.length<1||e.targets.length>lo.targets||Object.keys(e).some((p)=>!["version","route","viewport","targets","additionalViewports"].includes(p)))return ut();let l=e.targets.map((p)=>{if(!be(p)||typeof p.id!=="string"||!/^[a-zA-Z0-9_-]{1,64}$/.test(p.id)||typeof p.selector!=="string"||!p.selector.trim()||p.selector.length>256||/[\x00-\x1f\x7f]/.test(p.selector)||Object.keys(p).some((m)=>!["id","selector"].includes(m)))return ut();return{id:p.id,selector:p.selector}});if(new Set(l.map((p)=>p.id)).size!==l.length)return ut();let c;if(e.additionalViewports!==void 0){if(!Array.isArray(e.additionalViewports)||e.additionalViewports.length<1||e.additionalViewports.length>3)return ut();c=e.additionalViewports.map((m)=>{if(!be(m)||!qr(m.width,1,4096)||!Number.isInteger(m.width)||!qr(m.height,1,4096)||!Number.isInteger(m.height)||Object.keys(m).some((f)=>!["width","height"].includes(f)))return ut();return{width:m.width,height:m.height}});let p=[e.viewport,...c].map((m)=>`${m.width}x${m.height}`);if(new Set(p).size!==p.length)return ut()}return{version:1,route:e.route,viewport:{width:e.viewport.width,height:e.viewport.height},targets:l,...c?{additionalViewports:c}:{}}}var Mu=["organizationId","userId","sessionId","runId"],$u=[...Mu,"prUrl","headSha","skillDigest","evidenceKind"],oh=[...$u,"contextId","preparedAt","captureId","startedAt","finishedAt","sha256","kind","visualPlan","visualObservation"];var Bu={"image/png":{kind:"image",directory:"/tmp/ara-public-screenshots",extension:"png",maxBytes:8388608},"video/webm":{kind:"video",directory:"/tmp/ara-public-recordings",extension:"webm",maxBytes:10551296}};function ga(e){return Bu[e].directory}var ba=10485760;function wa(e={}){let l=e.directory??ga("video/webm"),c=null;return{async start(p){if(c)throw Error("cloud_browser_recording_active");let m=p?.seconds;if(!Number.isInteger(m)||Number(m)<1||Number(m)>15||!p||Object.keys(p).some((N)=>N!=="seconds"))throw Error("cloud_browser_recording_seconds_1_to_15_required");Hu(l,{recursive:!0,mode:457});let f=ya(l);if(!f.isDirectory()||f.isSymbolicLink()||f.uid!==process.getuid?.())throw Error("cloud_browser_recording_directory_invalid");_a(l,457);let h=ju(l).filter((N)=>/^[a-f0-9-]{36}\.webm$/.test(N)).map((N)=>({name:N,time:qu(co(l,N)).mtimeMs})).sort((N,L)=>L.time-N.time);for(let N of h.slice(9))Wu(co(l,N.name));let y=co(l,`${Uu()}.webm`),S=["-f","x11grab","-framerate","12","-i",e.display??":99"],w=(e.spawn??Fu)(e.ffmpeg??"ffmpeg",["-nostdin","-hide_banner","-loglevel","error","-y",...S,"-t",String(m),"-vf","scale=1280:-2","-c:v","libvpx","-deadline","realtime","-b:v","700k","-an","-fs",String(ba),"-progress","pipe:1",y],{stdio:["ignore","pipe","ignore"],...e.env?{env:e.env}:{}}),g,v,C=!1,I=new Promise((N,L)=>{g=N,v=L});w.stdout.on("data",(N)=>{if(/frame=\s*[1-9]/.test(String(N)))C=!0,g()});let A=new Promise((N,L)=>{w.once("error",()=>{v(Error("cloud_browser_recording_unavailable")),L(Error("cloud_browser_recording_unavailable"))}),w.once("exit",(B)=>{try{if(B!==0&&B!==255)throw Error();let F=ya(y);if(!C||!F.isFile()||F.isSymbolicLink()||F.uid!==process.getuid?.()||F.size<128||F.size>ba+65536)throw Error();_a(y,420),g(),N({path:y,mimeType:"video/webm"})}catch{v(Error("cloud_browser_recording_failed")),L(Error("cloud_browser_recording_failed"))}})});A.catch(()=>{});let M=setTimeout(()=>w.kill("SIGKILL"),(Number(m)+5)*1000);A.finally(()=>clearTimeout(M)).catch(()=>{}),c={done:A,stop:()=>(w.kill("SIGINT"),A)};try{await I}catch(N){throw c=null,N}return{recording:!0,seconds:Number(m)}},async stop(){if(!c)throw Error("cloud_browser_recording_not_started");let p=c;return c=null,p.stop()},async close(){if(c)await this.stop().catch(()=>{})}}}function Sa(e,l={}){if(e.executionMode!=="unsandboxed"||!e.runtimeDirectory||(l.platform??process.platform)!=="linux")return null;let c=(l.components??x)(),p=c?.features.display?c.ffmpeg:null;if(!p)return null;let m=zu(e.runtimeDirectory,"recordings"),f=null;return{async start(h){let y=await(l.desktop??ze)();return f??=wa({directory:m,display:y.display,ffmpeg:p,env:{HOME:a(),PATH:"/usr/local/bin:/usr/bin:/bin",XAUTHORITY:y.xauthority},...l.spawn?{spawn:l.spawn}:{}}),f.start(h)},async stop(){if(!f)throw Error("cloud_browser_recording_not_started");return f.stop()},async close(){await f?.close()}}}import{spawn as jo}from"child_process";import{createHash as dd,randomUUID as pd}from"crypto";import{existsSync as je,mkdirSync as Mo,mkdtempSync as Ko,readdirSync as Zr,readFileSync as Yo,renameSync as md,rmSync as or,statSync as Kr,writeFileSync as fd}from"fs";import{homedir as Xo,tmpdir as ja}from"os";import{basename as qa,dirname as Bo,join as J,relative as Wa,resolve as Fo,sep as za}from"path";var Ce=t().min(1).max(200),Ue=o().finite().min(0).max(1e4),Wr=t().min(1).max(4096).refine((e)=>!e.includes("\x00")),va=t().regex(/^[A-Za-z0-9][A-Za-z0-9.-]{0,254}$/),po=i({id:t().min(1).max(500).optional(),label:t().min(1).max(500).optional()}).strict(),mo=["home","lock","side_button","siri","apple_pay"],Gu=s(["tree","screenshot","both","none"]),Vu=i({...po.shape,gone:d().optional()}).strict().refine((e)=>Boolean(e.id||e.label),"wait_for needs an id or label"),tt={observe:Gu.optional(),wait_for:Vu.optional(),timeout:o().min(0).max(20).optional()},uo=_("action",[i({action:n("tap"),x:Ue.optional(),y:Ue.optional(),...po.shape,duration:o().min(0).max(10).optional()}).strict().refine((e)=>e.x!==void 0&&e.y!==void 0||Boolean(e.id||e.label),"pass x and y, or an id or label"),i({action:n("swipe"),x:Ue,y:Ue,x2:Ue,y2:Ue,duration:o().min(0.05).max(5).optional()}).strict(),i({action:n("type"),text:t().min(1).max(4000)}).strict(),i({action:n("button"),name:s(mo)}).strict(),i({action:n("sleep"),seconds:o().min(0).max(10)}).strict()]),fo=_("action",[i({action:n("devices")}).strict(),i({action:n("boot"),device:Ce}).strict(),i({action:n("shutdown"),device:Ce}).strict(),i({action:n("build"),path:Wr.optional(),scheme:t().min(1).max(200).optional(),configuration:t().min(1).max(100).optional(),device:Ce.optional(),wait:d().optional()}).strict(),i({action:n("run"),path:Wr.optional(),scheme:t().min(1).max(200).optional(),configuration:t().min(1).max(100).optional(),device:Ce.optional(),steps:u($o(()=>uo)).max(30).optional(),...tt}).strict(),i({action:n("build_status"),build_id:t().regex(/^build-[0-9a-z-]{4,64}$/),device:Ce.optional(),wait:d().optional()}).strict(),i({action:n("launch"),device:Ce.optional(),app_path:Wr.optional(),bundle_id:va.optional(),steps:u($o(()=>uo)).max(30).optional(),...tt}).strict().refine((e)=>Boolean(e.app_path)!==Boolean(e.bundle_id),"pass exactly one of app_path or bundle_id"),i({action:n("terminate"),device:Ce.optional(),bundle_id:va}).strict(),i({action:n("logs"),device:Ce.optional(),after:o().int().min(0).optional()}).strict(),i({action:n("screenshot"),device:Ce.optional(),scale:W([n(1),n(2)]).optional(),save_path:Wr.optional()}).strict(),i({action:n("chrome"),device:Ce.optional()}).strict(),i({action:n("inspect"),device:Ce.optional()}).strict(),i({action:n("tap"),device:Ce.optional(),x:Ue.optional(),y:Ue.optional(),...po.shape,duration:o().min(0).max(10).optional(),...tt}).strict().refine((e)=>e.x!==void 0&&e.y!==void 0||Boolean(e.id||e.label),"pass x and y, or an id or label"),i({action:n("swipe"),device:Ce.optional(),x:Ue,y:Ue,x2:Ue,y2:Ue,duration:o().min(0.05).max(5).optional(),...tt}).strict(),i({action:n("type"),device:Ce.optional(),text:t().min(1).max(4000),...tt}).strict(),i({action:n("button"),device:Ce.optional(),name:s(mo),...tt}).strict(),i({action:n("open_url"),device:Ce.optional(),url:t().min(1).max(4000),...tt}).strict(),i({action:n("steps"),device:Ce.optional(),steps:u(uo).min(1).max(30),...tt}).strict(),i({action:n("appearance"),device:Ce.optional(),mode:s(["light","dark"])}).strict()]),Ra=i({udid:t(),name:t(),runtime:t(),state:s(["booted","shutdown","booting","shutting_down"]),kind:s(["iphone","ipad","other"])}).strict(),Rh=i({text:t(),error:t().optional(),device:Ra.optional(),devices:u(Ra).optional(),image:i({mime:n("image/jpeg"),data:t(),width:o(),height:o()}).strict().optional(),build:i({id:t(),status:s(["running","succeeded","failed"]),app_path:t().optional(),bundle_id:t().optional(),errors:u(t()),log_tail:t(),elapsed_ms:o()}).strict().optional(),logs:i({lines:u(t()),next:o()}).strict().optional(),screen:t().optional(),chrome:i({identifier:t(),screen:i({width:o(),height:o()}).strict(),inset:i({top:o(),left:o(),bottom:o(),right:o()}).strict(),padding:i({top:o(),left:o(),bottom:o(),right:o()}).strict(),screen_mask:t().optional(),pieces:ee(s(["topLeft","top","topRight","right","bottomRight","bottom","bottomLeft","left"]),i({image:t(),width:o(),height:o()}).strict()),buttons:u(i({name:t(),image:t(),x:o(),y:o(),width:o(),height:o()}).strict())}).strict().optional()}).strict();var xh=i({device_id:k().optional(),root_id:k().optional()}),zr={device_id:{type:"string",format:"uuid",description:"Reason machine id from devices.list; omit for the machine this Session runs on."},root_id:{type:"string",format:"uuid"},device:{type:"string",description:"Simulator UDID or exact name. Required for boot and shutdown; for other actions omit it for the booted one."},path:{type:"string",description:"build or run: a .xcodeproj, .xcworkspace, or a folder holding one (project.yml is generated with XcodeGen), absolute or relative to the Session's folder. Omit it when the folder holds one app project."},scheme:{type:"string"},configuration:{type:"string"},build_id:{type:"string",description:"build_status (required): the build_id a build or run returned."},app_path:{type:"string",description:"launch: the built .app from build_status (or pass bundle_id instead)."},bundle_id:{type:"string",description:"terminate (required); launch: an installed app's bundle id instead of app_path."},after:{type:"integer",minimum:0,description:"logs: only lines after this sequence number."},x:{type:"number",description:"tap (with y, unless id or label is given) or swipe (required): start point in device points."},y:{type:"number"},x2:{type:"number",description:"swipe (required, with y2): end point in device points."},y2:{type:"number"},id:{type:"string",description:"tap: accessibility identifier from inspect (instead of x and y)."},label:{type:"string",description:"tap: accessibility label from inspect (instead of x and y)."},duration:{type:"number",description:"tap: seconds held (above 0.5 is a long press); swipe: seconds."},text:{type:"string",description:"type (required): the text to type."},name:{type:"string",enum:[...mo],description:"button (required)."},url:{type:"string",description:"open_url (required): the URL or deep link."},mode:{type:"string",enum:["light","dark"],description:"appearance (required)."},steps:{type:"array",maxItems:30,description:"steps (required, at least one) or launch and run: run in order in one call (after launch, once the app is up). Each item is {action:'tap', id|label|x,y} | {action:'swipe', x,y,x2,y2} | {action:'type', text} | {action:'button', name} | {action:'sleep', seconds}. Taps by id or label wait for their element to appear.",items:{type:"object"}},observe:{type:"string",enum:["tree","screenshot","both","none"],description:"After tap, swipe, type, button, open_url, launch or steps: what to return about the settled screen. Default tree (the accessibility tree, so no separate inspect is needed); screenshot or both to see it."},wait_for:{type:"object",description:"After the action, wait until this element is on screen: {id} or {label}; add gone:true to wait for it to disappear.",properties:{id:{type:"string"},label:{type:"string"},gone:{type:"boolean"}},additionalProperties:!1},timeout:{type:"number",description:"Seconds to wait for wait_for (default 5, max 20)."},wait:{type:"boolean",description:"build or build_status: wait for the build to finish (up to ~45 s) instead of returning at once."},save_path:{type:"string",description:"screenshot: also save the full-resolution PNG at this path (absolute or relative to the Session's folder), for example to show the user."}},Ea=fo.options.map((e)=>e.shape).filter((e)=>e.action.value!=="chrome"),Ku={tap:[{required:["x","y"]},{required:["id"]},{required:["label"]}],launch:[{required:["app_path"],without:["bundle_id"]},{required:["bundle_id"],without:["app_path"]}]},xa=new Set;function Yu(e,l){let{description:c,...p}=e==="steps"&&l==="steps"?{...zr.steps,minItems:1}:zr[e];if(c===void 0||xa.has(e))return p;return xa.add(e),{...p,description:c}}var Xu=Ea.flatMap((e)=>{let l=e.action.value,c=Object.keys(e).filter((m)=>Object.hasOwn(zr,m)),p=c.filter((m)=>!e[m].safeParse(void 0).success);return(Ku[l]??[{required:[]}]).map((m)=>({type:"object",properties:Object.fromEntries([["action",{type:"string",const:l}],...["device_id","root_id",...c].filter((f)=>!m.without?.includes(f)).map((f)=>[f,Yu(f,l)])]),required:["action",...p,...m.required],additionalProperties:!1}))}),Ju={type:"object",properties:{action:{type:"string",enum:Ea.map((e)=>e.action.value)},...zr},required:["action"],additionalProperties:!1},Eh={...Ju,anyOf:Xu};import{spawn as Po}from"child_process";import{createHash as Qu}from"crypto";import{existsSync as Ro,mkdirSync as Gr,mkdtempSync as ed,readdirSync as Ca,readFileSync as Pa,renameSync as td,rmSync as Oa,symlinkSync as Co,writeFileSync as tr}from"fs";import{homedir as rd}from"os";import{dirname as ka,join as re}from"path";import{createInterface as nd}from"readline";var ho=`// Reason's simulator host: one warm process per booted iOS Simulator.
36
+ `:"")+m.toString("utf8")}}}async function Ws(e,l){if(!Gn())throw new r("workspace_setup_requires_root","Workspace setup runs only on a root Linux worker.");let c=js.safeParse(e);if(!c.success)throw new r("invalid_request","Reason sent an invalid workspace setup.");let p=c.data,m,f;try{m=Wn(p.script_gzip),f=Wn(p.stdin_gzip)}catch{throw new r("invalid_request","Reason sent an unreadable workspace setup.")}l.throwIfAborted();let h=kc(qs($c(),"reason-workspace-setup-"));try{let y=qs(h,"setup.sh");Dc(y,m,{mode:384});let S={PATH:Bc,LANG:"C.UTF-8",HOME:"/root",USER:"root",LOGNAME:"root",SHELL:"/bin/bash",TMPDIR:"/tmp"};for(let H of Fc)if(process.env[H])S[H]=process.env[H];Object.assign(S,p.env);let w=Lc("/bin/bash",[y],{cwd:p.cwd,env:S,detached:!0,stdio:["pipe","pipe","pipe"]}),_=zn(Zt),v=zn(Zt),C=zn(Zt);w.stdout.on("data",(H)=>{_.push(H),C.push(H)}),w.stderr.on("data",(H)=>{v.push(H),C.push(H)}),w.stdin.on("error",()=>{}),w.stdin.end(f);let I=(H)=>{try{if(w.pid)process.kill(-w.pid,H)}catch{}},A=!1,M,N=()=>{I("SIGTERM"),M??=setTimeout(()=>I("SIGKILL"),Uc)},L=setTimeout(()=>{A=!0,N()},p.timeout_ms);l.addEventListener("abort",N,{once:!0});let B=await new Promise((H,ne)=>{w.once("error",()=>ne(new r("workspace_setup_start_failed","The workspace setup did not start."))),w.once("exit",(_e,Ee)=>H({code:_e,signal:Ee}))}).finally(()=>{clearTimeout(L),clearTimeout(M),l.removeEventListener("abort",N)});await new Promise((H)=>{let ne=setTimeout(H,Hc);w.once("close",()=>{clearTimeout(ne),H()})}),w.stdout.destroy(),w.stderr.destroy(),l.throwIfAborted();let F=A?124:B.signal?128+(Nc.signals[B.signal]??0):B.code??1;return{exit_code:Math.min(255,F),stdout:_.text(),stderr:v.text(),...F!==0?{combined:C.text()}:{}}}finally{Tc(h,{recursive:!0,force:!0})}}import{chmodSync as jc,mkdtempSync as qc,realpathSync as zs,rmSync as Wc}from"fs";import{tmpdir as zc}from"os";import{dirname as Gc,join as Vn,sep as Vc}from"path";function Kn(e){return Sr(e,wr(e)!==null).repoPath}function Gs(e,l){let c;try{if(typeof l!=="string")throw Error("invalid");c=[Z,void 0].map((m)=>Gc(O({kind:"managed",workspaceId:l,...m?{layout:m}:{}})))}catch{throw new r("cloud_copy_workspace_invalid","The Cloud copy workspace is invalid.")}let p;for(let m of c)try{p=zs(Vn(e,m));break}catch{}if(p===void 0)throw new r("cloud_copy_workspace_unavailable","The Session workspace is not on this computer.");if(!p.startsWith(`${e}${Vc}`))throw new r("cloud_copy_workspace_invalid","The Cloud copy workspace is outside this worker's root.");return p}async function Vs(e){e.signal.throwIfAborted();let l=e.source;if(l.kind==="workspace"){let p=Kn(e.runtimeRoot);if(E(p)||E(Vn(p,l.path)))throw new r("protected_path","Credential and secret paths are unavailable to local tasks.");return _t({direction:"export",root:p,path:l.path,payload:{url:e.url},signal:e.signal,fetchImpl:e.fetchImpl})}let c=qc(Vn(zc(),`reason-cloud-copy-${process.pid}-`));try{jc(c,448);let p=zs(c);await _t({direction:"import",root:p,path:"source",payload:{url:l.download_url,size_bytes:l.size_bytes,sha256:l.sha256},signal:e.signal,fetchImpl:e.fetchImpl});let m=await _t({direction:"export",root:p,path:"source",payload:{url:e.url},signal:e.signal,fetchImpl:e.fetchImpl});if(m.size_bytes!==l.size_bytes||m.sha256!==l.sha256)throw new r("transfer_source_changed","The verified attachment changed before export.");return m}finally{Wc(c,{recursive:!0,force:!0})}}import{constants as We}from"fs";import{closeSync as hl,existsSync as Ye,fstatSync as gl,ftruncateSync as dp,lstatSync as ii,mkdirSync as pp,mkdtempSync as mp,openSync as _l,readSync as fp,realpathSync as Ve,rmSync as hp,statSync as hr,writeSync as gp}from"fs";import{homedir as lr,platform as X,tmpdir as _p}from"os";import{dirname as cr,isAbsolute as yp,join as yl,relative as si,resolve as bp,sep as wp}from"path";import{spawn as Sp}from"child_process";var ff=rn+15000;var Ks=["fs.read","fs.write","fs.export","fs.import","exec.run","exec.full","process.run.v1","process.full.v1","preview.serve.v1","pty.start","git.run","process.list","ports.list","computer.use","browser.use","browser.recording.v1","browser.pr-proof.v1","hands.connect","jobs.control","environment.install","github.local.v1","inference.custom.v1","display.stream.v1","automation.call.v1","simulator.call.v1","simulator.stream.v1","tunnel.open","tunnel.close","workspace.setup.v1"];var Yc=new Set(["process.run.v1","process.full.v1","computer.use","browser.use"]),Qt=new Set(["jobs.control","environment.install","tunnel.open","tunnel.close","display.stream.v1","automation.call.v1","workspace.setup.v1","simulator.call.v1","simulator.stream.v1"]);function Ur(e,l){if(Yc.has(e))return!1;if(Qt.has(e)&&!l.runtimeDirectory)return!1;if((e==="inference.custom.v1"||e==="preview.serve.v1"||e==="simulator.call.v1"||e==="simulator.stream.v1")&&(l.executionMode!=="unsandboxed"||!l.runtimeDirectory))return!1;if(l.executionMode!=="unsandboxed"&&(["exec.full","hands.connect","pty.start","browser.pr-proof.v1"].includes(e)||Qt.has(e)))return!1;return!0}import{accessSync as Xc,constants as Jc,existsSync as Zc,statSync as Qc}from"fs";import{basename as eu,isAbsolute as tu}from"path";var er=["-lic"],Ys="/bin/zsh",ru=new Set(["zsh","bash"]),Xs=20000,Yn=60000,nu=65536,ou=64,iu=8192,su=new Set(["NODE_OPTIONS","PATH","ZDOTDIR","BASH_ENV","ENV"]),au=["DYLD_","LD_"];function lu(e){let l=e.toUpperCase();return su.has(l)||au.some((c)=>l.startsWith(c))}function Js(e=process.env){return!0}function cu(e){if(!tu(e)||e.includes("\x00"))return!1;if(!ru.has(eu(e)))return!1;try{if(!Qc(e).isFile())return!1;return Xc(e,Jc.X_OK),!0}catch{return!1}}function wt(e=process.env){if(process.platform==="win32")return fe()??Ys;let l=e.SHELL?.trim();if(l&&cu(l))return l;return Ys}function Xn(e=process.env){return Js(e)&&Zc(wt(e))}function Jn(e=process.env){if(!Js(e))throw new r("full_control_disabled","Full-control execution is unavailable on this Reason Device.")}function Zn(e){if(typeof e!=="string"||e.length===0||e.includes("\x00")||Buffer.byteLength(e,"utf8")>nu)throw new r("invalid_payload","command is missing or too large.");return e}function Qn(e){if(e===void 0||e===null)return{forwarded:{},ignored:[]};if(typeof e!=="object"||Array.isArray(e))throw new r("invalid_payload","env must be an object of strings.");let l=Object.entries(e);if(l.length>ou)throw new r("invalid_payload","env has too many entries.");let c={},p=[];for(let[m,f]of l){if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(m)||typeof f!=="string"||f.includes("\x00")||Buffer.byteLength(f,"utf8")>iu)throw new r("invalid_payload","env entry is invalid or too large.");if(lu(m)){p.push(m);continue}c[m]=f}return{forwarded:c,ignored:p}}async function Zs(e){let l=e.processEnv??process.env;if(Jn(l),e.signal.aborted)throw new r("cancelled","Operation was cancelled.");let c=Zn(e.command),p=wt(l),{forwarded:m,ignored:f}=Qn(e.requestEnv),h=await e.spawn(p,[...er,c],{cwd:e.cwd,timeoutMs:e.timeoutMs,signal:e.signal,env:{...l,...m}});return{exit_code:h.exitCode,signal:h.signal,stdout:h.stdout,stderr:h.stderr,timed_out:h.timedOut,truncated:h.truncated,shell:p,shell_flags:[...er],login:!0,interactive:!0,sandbox:"none",ignored_env:f}}function Qs(e=process.env){return{transport:"shell",shell:`${wt(e)} ${er.join(" ")}`,login_shell:!0,interactive_shell:!0,rc_files_loaded:!0,sandbox:"none",network:!0,environment:"inherited",privilege:"user",sudo:"argv_exact_nopasswd_only",activation:"explicit_device_grant",max_timeout_ms:Yn}}import{readFile as uu,readdir as du,readlink as pu,realpath as mu}from"fs/promises";import{basename as fu,relative as hu,sep as gu}from"path";var ut="/proc",_u=250,ea=500,yu=50,bu=250,wu=1024,ta=4096,Su=1,vu=3,ra=9,Ru="0A",xu=/^socket:\[(\d+)\]$/,to={readDirectory:(e)=>du(e),readLink:(e)=>pu(e),readTextFile:(e)=>uu(e,"utf8"),realPath:(e)=>mu(e)};function oa(e,l){return l===e||l.startsWith(`${e}${gu}`)}function Eu(e,l){return hu(e,l)||"."}async function ia(e){let l;try{l=await e.readDirectory(ut)}catch{return[]}return l.filter((c)=>/^[0-9]+$/.test(c)).map((c)=>Number(c)).filter((c)=>Number.isSafeInteger(c)&&c>0).sort((c,p)=>c-p)}async function sa(e,l){try{let p=(await l.readTextFile(`${ut}/${e}/comm`)).slice(0,ta).split(`
37
+ `,1)[0]?.trim();if(p)return p}catch{}try{let p=(await l.readTextFile(`${ut}/${e}/cmdline`)).slice(0,ta).split("\x00",1)[0]?.trim();return p?fu(p):null}catch{return null}}async function aa(e,l=to){let c;try{c=await l.readLink(`${ut}/${e}/cwd`)}catch{return null}if(!c)return null;try{return await l.realPath(c)}catch{return null}}async function la(e,l=to){let c=[];for(let p of await ia(l)){if(c.length>=_u)break;let m=await aa(p,l);if(!m||!oa(e,m))continue;c.push({pid:p,command:await sa(p,l),cwd:Eu(e,m)})}return{processes:c}}function na(e){let l=[];for(let c=0;c<8;c+=2)l.unshift(Number.parseInt(e.slice(c,c+2),16));return l}function Cu(e){let l=[];for(let S=0;S<16;S+=2)l.push(e[S]<<8|e[S+1]);if(l.slice(0,5).every((S)=>S===0)&&l[5]===65535)return`::ffff:${e.slice(12).join(".")}`;let c=-1,p=0,m=-1;for(let S=0;S<=l.length;S+=1){if(S<l.length&&l[S]===0){if(m<0)m=S;continue}if(m>=0){let w=S-m;if(w>p)c=m,p=w;m=-1}}let f=l.map((S)=>S.toString(16));if(p<2)return f.join(":");let h=f.slice(0,c).join(":"),y=f.slice(c+p).join(":");return`${h}::${y}`}function Pu(e,l){if(/^[0-9A-Fa-f]{8}$/.test(e)){let c=na(e);if(c.every((p)=>p===0))return`*:${l}`;return`${c.join(".")}:${l}`}if(/^[0-9A-Fa-f]{32}$/.test(e)){let c=[];for(let p=0;p<4;p+=1)c.push(...na(e.slice(p*8,p*8+8)));if(c.every((p)=>p===0))return`*:${l}`;return`[${Cu(c)}]:${l}`}return null}function Ou(e,l){let c=[];for(let p of e.split(`
38
+ `).slice(1)){if(c.length>=l)break;let m=p.trim().split(/\s+/);if(m.length<=ra)continue;if(m[vu]?.toUpperCase()!==Ru)continue;let f=m[Su]??"",h=f.lastIndexOf(":");if(h<0)continue;let y=Number.parseInt(f.slice(h+1),16);if(!Number.isInteger(y)||y<=0||y>65535)continue;let S=Pu(f.slice(0,h),y),w=m[ra];if(!S||!w||!/^[0-9]+$/.test(w))continue;c.push({inode:w,port:y,address:S})}return c}async function Iu(e){let l=[];for(let c of["tcp","tcp6"]){if(l.length>=ea)break;let p;try{p=await e.readTextFile(`${ut}/net/${c}`)}catch{continue}l.push(...Ou(p,ea-l.length))}return l}async function Au(e,l){let c=new Map;if(e.size===0)return c;for(let p of await ia(l)){if(c.size>=e.size)break;let m;try{m=await l.readDirectory(`${ut}/${p}/fd`)}catch{continue}for(let f of m.slice(0,wu)){let h;try{h=await l.readLink(`${ut}/${p}/fd/${f}`)}catch{continue}let y=h.match(xu)?.[1];if(!y||!e.has(y)||c.has(y))continue;c.set(y,p)}}return c}async function ca(e,l=to){let c=await Iu(l),p=await Au(new Set(c.map((_)=>_.inode)),l),m=[];for(let _ of c){let v=p.get(_.inode);if(v===void 0)continue;m.push({pid:v,port:_.port,address:_.address})}m.sort((_,v)=>_.pid-v.pid||_.port-v.port||(_.address<v.address?-1:_.address>v.address?1:0));let f=[...new Set(m.map((_)=>_.pid))].slice(0,yu),h=await Promise.all(f.map(async(_)=>[_,await aa(_,l)])),y=new Map(h),S=m.filter((_)=>{let v=y.get(_.pid);return Boolean(v&&oa(e,v))}),w=new Map(await Promise.all([...new Set(S.map((_)=>_.pid))].map(async(_)=>[_,await sa(_,l)])));return{ports:S.slice(0,bu).map((_)=>({pid:_.pid,command:w.get(_.pid)??null,address:_.address}))}}import{posix as io}from"path";var Hr=200,Lu=250,ku=250;async function jr(e,l){let c=await e(l);if(c.timedOut||c.truncated||c.exitCode!==0&&c.exitCode!==1)throw new r("process_inspection_failed","Reading this Mac's processes did not complete.");let p=[],m=null;for(let f of c.stdout.split(/\r?\n/))if(f.startsWith("p")){let h=Number(f.slice(1));if(m=Number.isInteger(h)&&h>0?{pid:h,command:null,names:[]}:null,m)p.push(m)}else if(m&&f.startsWith("c"))m.command=f.slice(1)||null;else if(m&&f.startsWith("n"))m.names.push(f.slice(1));return p}function no(e,l){return l===e||l.startsWith(e==="/"?e:`${e}/`)}var ua="/System/Volumes/Data",Tu=["/tmp","/var","/etc"];function ao(e){let l=io.normalize(e);if(l.startsWith(`${ua}/`))l=l.slice(ua.length);return Tu.find((p)=>l===p||l.startsWith(`${p}/`))?`/private${l}`:l}function da(e){return e&&io.isAbsolute(e)?ao(e):null}async function pa(e,l){let c=new Map;for(let p=0;p<l.length;p+=Hr){let m=l.slice(p,p+Hr).join(",");for(let f of await jr(e,["-a","-p",m,"-d","cwd","-Fpcn"]))c.set(f.pid,{command:f.command,cwd:da(f.names[0])})}return c}async function ma(e,l){let c=ao(e),p=(await jr(l,["-d","cwd","-Fpn"])).filter((f)=>{let h=da(f.names[0]);return h!==null&&no(c,h)}).map((f)=>f.pid).slice(0,Lu),m=await pa(l,p);return{processes:p.flatMap((f)=>{let h=m.get(f);return h?.cwd&&no(c,h.cwd)?[{pid:f,command:h.command,cwd:io.relative(c,h.cwd)||"."}]:[]})}}async function fa(e,l){let c=ao(e),p=["-nP","-iTCP","-sTCP:LISTEN","-Fpcn"],m=await jr(l,p),f=await pa(l,m.map((w)=>w.pid)),h=m.map((w)=>w.pid).filter((w)=>{let _=f.get(w)?.cwd;return Boolean(_&&no(c,_))});if(h.length===0)return{ports:[]};let y=new Set(m.flatMap((w)=>w.names.map((_)=>`${w.pid} ${_}`))),S=[];for(let w=0;w<h.length;w+=Hr){let _=h.slice(w,w+Hr).join(",");for(let v of await jr(l,["-a","-p",_,...p]))for(let C of v.names)if(y.has(`${v.pid} ${C}`))S.push({pid:v.pid,command:v.command,address:C})}return{ports:S.slice(0,ku)}}import{join as zu}from"path";import{spawn as Fu}from"child_process";import{randomUUID as Uu}from"crypto";import{chmodSync as _a,lstatSync as ya,mkdirSync as Hu,readdirSync as ju,statSync as qu,unlinkSync as Wu}from"fs";import{join as co}from"path";var lo={targets:24,assets:128,sourceFiles:2000,sourceBytes:20000000,outputBytes:20000000};var qr=(e,l=0,c=1e6)=>typeof e==="number"&&Number.isFinite(e)&&e>=l&&e<=c;var dt=()=>{throw Error("proof_visual_contract_invalid")};class ha extends Error{constructor(){super("proof_visual_contract_invalid")}}function dn(e){if(!be(e)||e.version!==1)return dt();if(typeof e.route!=="string"||!e.route.startsWith("/")||e.route.length>512||/[\x00-\x20\x7f\\?#%]/.test(e.route)||e.route.startsWith("//"))throw new ha;if(!be(e.viewport)||!qr(e.viewport.width,1,4096)||!qr(e.viewport.height,1,4096)||!Array.isArray(e.targets)||e.targets.length<1||e.targets.length>lo.targets||Object.keys(e).some((p)=>!["version","route","viewport","targets","additionalViewports"].includes(p)))return dt();let l=e.targets.map((p)=>{if(!be(p)||typeof p.id!=="string"||!/^[a-zA-Z0-9_-]{1,64}$/.test(p.id)||typeof p.selector!=="string"||!p.selector.trim()||p.selector.length>256||/[\x00-\x1f\x7f]/.test(p.selector)||Object.keys(p).some((m)=>!["id","selector"].includes(m)))return dt();return{id:p.id,selector:p.selector}});if(new Set(l.map((p)=>p.id)).size!==l.length)return dt();let c;if(e.additionalViewports!==void 0){if(!Array.isArray(e.additionalViewports)||e.additionalViewports.length<1||e.additionalViewports.length>3)return dt();c=e.additionalViewports.map((m)=>{if(!be(m)||!qr(m.width,1,4096)||!Number.isInteger(m.width)||!qr(m.height,1,4096)||!Number.isInteger(m.height)||Object.keys(m).some((f)=>!["width","height"].includes(f)))return dt();return{width:m.width,height:m.height}});let p=[e.viewport,...c].map((m)=>`${m.width}x${m.height}`);if(new Set(p).size!==p.length)return dt()}return{version:1,route:e.route,viewport:{width:e.viewport.width,height:e.viewport.height},targets:l,...c?{additionalViewports:c}:{}}}var Mu=["organizationId","userId","sessionId","runId"],$u=[...Mu,"prUrl","headSha","skillDigest","evidenceKind"],oh=[...$u,"contextId","preparedAt","captureId","startedAt","finishedAt","sha256","kind","visualPlan","visualObservation"];var Bu={"image/png":{kind:"image",directory:"/tmp/ara-public-screenshots",extension:"png",maxBytes:8388608},"video/webm":{kind:"video",directory:"/tmp/ara-public-recordings",extension:"webm",maxBytes:10551296}};function ga(e){return Bu[e].directory}var ba=10485760;function wa(e={}){let l=e.directory??ga("video/webm"),c=null;return{async start(p){if(c)throw Error("cloud_browser_recording_active");let m=p?.seconds;if(!Number.isInteger(m)||Number(m)<1||Number(m)>15||!p||Object.keys(p).some((N)=>N!=="seconds"))throw Error("cloud_browser_recording_seconds_1_to_15_required");Hu(l,{recursive:!0,mode:457});let f=ya(l);if(!f.isDirectory()||f.isSymbolicLink()||f.uid!==process.getuid?.())throw Error("cloud_browser_recording_directory_invalid");_a(l,457);let h=ju(l).filter((N)=>/^[a-f0-9-]{36}\.webm$/.test(N)).map((N)=>({name:N,time:qu(co(l,N)).mtimeMs})).sort((N,L)=>L.time-N.time);for(let N of h.slice(9))Wu(co(l,N.name));let y=co(l,`${Uu()}.webm`),S=["-f","x11grab","-framerate","12","-i",e.display??":99"],w=(e.spawn??Fu)(e.ffmpeg??"ffmpeg",["-nostdin","-hide_banner","-loglevel","error","-y",...S,"-t",String(m),"-vf","scale=1280:-2","-c:v","libvpx","-deadline","realtime","-b:v","700k","-an","-fs",String(ba),"-progress","pipe:1",y],{stdio:["ignore","pipe","ignore"],...e.env?{env:e.env}:{}}),_,v,C=!1,I=new Promise((N,L)=>{_=N,v=L});w.stdout.on("data",(N)=>{if(/frame=\s*[1-9]/.test(String(N)))C=!0,_()});let A=new Promise((N,L)=>{w.once("error",()=>{v(Error("cloud_browser_recording_unavailable")),L(Error("cloud_browser_recording_unavailable"))}),w.once("exit",(B)=>{try{if(B!==0&&B!==255)throw Error();let F=ya(y);if(!C||!F.isFile()||F.isSymbolicLink()||F.uid!==process.getuid?.()||F.size<128||F.size>ba+65536)throw Error();_a(y,420),_(),N({path:y,mimeType:"video/webm"})}catch{v(Error("cloud_browser_recording_failed")),L(Error("cloud_browser_recording_failed"))}})});A.catch(()=>{});let M=setTimeout(()=>w.kill("SIGKILL"),(Number(m)+5)*1000);A.finally(()=>clearTimeout(M)).catch(()=>{}),c={done:A,stop:()=>(w.kill("SIGINT"),A)};try{await I}catch(N){throw c=null,N}return{recording:!0,seconds:Number(m)}},async stop(){if(!c)throw Error("cloud_browser_recording_not_started");let p=c;return c=null,p.stop()},async close(){if(c)await this.stop().catch(()=>{})}}}function Sa(e,l={}){if(e.executionMode!=="unsandboxed"||!e.runtimeDirectory||(l.platform??process.platform)!=="linux")return null;let c=(l.components??x)(),p=c?.features.display?c.ffmpeg:null;if(!p)return null;let m=zu(e.runtimeDirectory,"recordings"),f=null;return{async start(h){let y=await(l.desktop??qe)();return f??=wa({directory:m,display:y.display,ffmpeg:p,env:{HOME:a(),PATH:"/usr/local/bin:/usr/bin:/bin",XAUTHORITY:y.xauthority},...l.spawn?{spawn:l.spawn}:{}}),f.start(h)},async stop(){if(!f)throw Error("cloud_browser_recording_not_started");return f.stop()},async close(){await f?.close()}}}import{spawn as qo}from"child_process";import{createHash as dd,randomUUID as pd}from"crypto";import{existsSync as je,mkdirSync as Do,mkdtempSync as Wo,readdirSync as Zr,readFileSync as zo,renameSync as md,rmSync as nr,statSync as Kr,writeFileSync as fd}from"fs";import{homedir as Vo,tmpdir as ja}from"os";import{basename as qa,dirname as No,join as J,relative as Wa,resolve as Fo,sep as za}from"path";var Oe=t().min(1).max(200),Ue=o().finite().min(0).max(1e4),Wr=t().min(1).max(4096).refine((e)=>!e.includes("\x00")),va=t().regex(/^[A-Za-z0-9][A-Za-z0-9.-]{0,254}$/),vo=i({id:t().min(1).max(500).optional(),label:t().min(1).max(500).optional()}).strict(),Ro=["home","lock","side_button","siri","apple_pay"],Gu=s(["tree","screenshot","both","none"]),Vu=i({...vo.shape,gone:d().optional()}).strict().refine((e)=>Boolean(e.id||e.label),"wait_for needs an id or label"),tt={observe:Gu.optional(),wait_for:Vu.optional(),timeout:o().min(0).max(20).optional()},So=g("action",[i({action:n("tap"),x:Ue.optional(),y:Ue.optional(),...vo.shape,duration:o().min(0).max(10).optional()}).strict().refine((e)=>e.x!==void 0&&e.y!==void 0||Boolean(e.id||e.label),"pass x and y, or an id or label"),i({action:n("swipe"),x:Ue,y:Ue,x2:Ue,y2:Ue,duration:o().min(0.05).max(5).optional()}).strict(),i({action:n("type"),text:t().min(1).max(4000)}).strict(),i({action:n("button"),name:s(Ro)}).strict(),i({action:n("sleep"),seconds:o().min(0).max(10)}).strict()]),xo=g("action",[i({action:n("devices")}).strict(),i({action:n("boot"),device:Oe}).strict(),i({action:n("shutdown"),device:Oe}).strict(),i({action:n("build"),path:Wr.optional(),scheme:t().min(1).max(200).optional(),configuration:t().min(1).max(100).optional(),device:Oe.optional(),wait:d().optional()}).strict(),i({action:n("run"),path:Wr.optional(),scheme:t().min(1).max(200).optional(),configuration:t().min(1).max(100).optional(),device:Oe.optional(),steps:u(Uo(()=>So)).max(30).optional(),...tt}).strict(),i({action:n("build_status"),build_id:t().regex(/^build-[0-9a-z-]{4,64}$/),device:Oe.optional(),wait:d().optional()}).strict(),i({action:n("launch"),device:Oe.optional(),app_path:Wr.optional(),bundle_id:va.optional(),steps:u(Uo(()=>So)).max(30).optional(),...tt}).strict().refine((e)=>Boolean(e.app_path)!==Boolean(e.bundle_id),"pass exactly one of app_path or bundle_id"),i({action:n("terminate"),device:Oe.optional(),bundle_id:va}).strict(),i({action:n("logs"),device:Oe.optional(),after:o().int().min(0).optional()}).strict(),i({action:n("screenshot"),device:Oe.optional(),scale:W([n(1),n(2)]).optional(),save_path:Wr.optional()}).strict(),i({action:n("chrome"),device:Oe.optional()}).strict(),i({action:n("inspect"),device:Oe.optional()}).strict(),i({action:n("tap"),device:Oe.optional(),x:Ue.optional(),y:Ue.optional(),...vo.shape,duration:o().min(0).max(10).optional(),...tt}).strict().refine((e)=>e.x!==void 0&&e.y!==void 0||Boolean(e.id||e.label),"pass x and y, or an id or label"),i({action:n("swipe"),device:Oe.optional(),x:Ue,y:Ue,x2:Ue,y2:Ue,duration:o().min(0.05).max(5).optional(),...tt}).strict(),i({action:n("type"),device:Oe.optional(),text:t().min(1).max(4000),...tt}).strict(),i({action:n("button"),device:Oe.optional(),name:s(Ro),...tt}).strict(),i({action:n("open_url"),device:Oe.optional(),url:t().min(1).max(4000),...tt}).strict(),i({action:n("steps"),device:Oe.optional(),steps:u(So).min(1).max(30),...tt}).strict(),i({action:n("appearance"),device:Oe.optional(),mode:s(["light","dark"])}).strict()]),Ra=i({udid:t(),name:t(),runtime:t(),state:s(["booted","shutdown","booting","shutting_down"]),kind:s(["iphone","ipad","other"])}).strict(),Rh=i({text:t(),error:t().optional(),device:Ra.optional(),devices:u(Ra).optional(),image:i({mime:n("image/jpeg"),data:t(),width:o(),height:o()}).strict().optional(),build:i({id:t(),status:s(["running","succeeded","failed"]),app_path:t().optional(),bundle_id:t().optional(),errors:u(t()),log_tail:t(),elapsed_ms:o()}).strict().optional(),logs:i({lines:u(t()),next:o()}).strict().optional(),screen:t().optional(),chrome:i({identifier:t(),screen:i({width:o(),height:o()}).strict(),inset:i({top:o(),left:o(),bottom:o(),right:o()}).strict(),padding:i({top:o(),left:o(),bottom:o(),right:o()}).strict(),screen_mask:t().optional(),pieces:ee(s(["topLeft","top","topRight","right","bottomRight","bottom","bottomLeft","left"]),i({image:t(),width:o(),height:o()}).strict()),buttons:u(i({name:t(),image:t(),x:o(),y:o(),width:o(),height:o()}).strict())}).strict().optional()}).strict();var xh=i({device_id:k().optional(),root_id:k().optional()}),zr={device_id:{type:"string",format:"uuid",description:"Reason machine id from devices.list; omit for the machine this Session runs on."},root_id:{type:"string",format:"uuid"},device:{type:"string",description:"Simulator UDID or exact name. Required for boot and shutdown; for other actions omit it for the booted one."},path:{type:"string",description:"build or run: a .xcodeproj, .xcworkspace, or a folder holding one (project.yml is generated with XcodeGen), absolute or relative to the Session's folder. Omit it when the folder holds one app project."},scheme:{type:"string"},configuration:{type:"string"},build_id:{type:"string",description:"build_status (required): the build_id a build or run returned."},app_path:{type:"string",description:"launch: the built .app from build_status (or pass bundle_id instead)."},bundle_id:{type:"string",description:"terminate (required); launch: an installed app's bundle id instead of app_path."},after:{type:"integer",minimum:0,description:"logs: only lines after this sequence number."},x:{type:"number",description:"tap (with y, unless id or label is given) or swipe (required): start point in device points."},y:{type:"number"},x2:{type:"number",description:"swipe (required, with y2): end point in device points."},y2:{type:"number"},id:{type:"string",description:"tap: accessibility identifier from inspect (instead of x and y)."},label:{type:"string",description:"tap: accessibility label from inspect (instead of x and y)."},duration:{type:"number",description:"tap: seconds held (above 0.5 is a long press); swipe: seconds."},text:{type:"string",description:"type (required): the text to type."},name:{type:"string",enum:[...Ro],description:"button (required)."},url:{type:"string",description:"open_url (required): the URL or deep link."},mode:{type:"string",enum:["light","dark"],description:"appearance (required)."},steps:{type:"array",maxItems:30,description:"steps (required, at least one) or launch and run: run in order in one call (after launch, once the app is up). Each item is {action:'tap', id|label|x,y} | {action:'swipe', x,y,x2,y2} | {action:'type', text} | {action:'button', name} | {action:'sleep', seconds}. Taps by id or label wait for their element to appear.",items:{type:"object"}},observe:{type:"string",enum:["tree","screenshot","both","none"],description:"After tap, swipe, type, button, open_url, launch or steps: what to return about the settled screen. Default tree (the accessibility tree, so no separate inspect is needed); screenshot or both to see it."},wait_for:{type:"object",description:"After the action, wait until this element is on screen: {id} or {label}; add gone:true to wait for it to disappear.",properties:{id:{type:"string"},label:{type:"string"},gone:{type:"boolean"}},additionalProperties:!1},timeout:{type:"number",description:"Seconds to wait for wait_for (default 5, max 20)."},wait:{type:"boolean",description:"build or build_status: wait for the build to finish (up to ~45 s) instead of returning at once."},save_path:{type:"string",description:"screenshot: also save the full-resolution PNG at this path (absolute or relative to the Session's folder), for example to show the user."}},Ea=xo.options.map((e)=>e.shape).filter((e)=>e.action.value!=="chrome"),Ku={tap:[{required:["x","y"]},{required:["id"]},{required:["label"]}],launch:[{required:["app_path"],without:["bundle_id"]},{required:["bundle_id"],without:["app_path"]}]},xa=new Set;function Yu(e,l){let{description:c,...p}=e==="steps"&&l==="steps"?{...zr.steps,minItems:1}:zr[e];if(c===void 0||xa.has(e))return p;return xa.add(e),{...p,description:c}}var Xu=Ea.flatMap((e)=>{let l=e.action.value,c=Object.keys(e).filter((m)=>Object.hasOwn(zr,m)),p=c.filter((m)=>!e[m].safeParse(void 0).success);return(Ku[l]??[{required:[]}]).map((m)=>({type:"object",properties:Object.fromEntries([["action",{type:"string",const:l}],...["device_id","root_id",...c].filter((f)=>!m.without?.includes(f)).map((f)=>[f,Yu(f,l)])]),required:["action",...p,...m.required],additionalProperties:!1}))}),Ju={type:"object",properties:{action:{type:"string",enum:Ea.map((e)=>e.action.value)},...zr},required:["action"],additionalProperties:!1},Eh={...Ju,anyOf:Xu};import{spawn as Oo}from"child_process";import{createHash as Qu}from"crypto";import{existsSync as Co,mkdirSync as Gr,mkdtempSync as ed,readdirSync as Ca,readFileSync as Pa,renameSync as td,rmSync as Oa,symlinkSync as Po,writeFileSync as tr}from"fs";import{homedir as rd}from"os";import{dirname as ka,join as re}from"path";import{createInterface as nd}from"readline";var Eo=`// Reason's simulator host: one warm process per booted iOS Simulator.
39
39
  //
40
40
  // Built on the Mac on first use (cli/simulator-host.ts) against the MIT
41
41
  // FBSimulatorControl frameworks that the pinned AXe ships, so loading
@@ -496,31 +496,31 @@ default:
496
496
  }
497
497
  `;var Ia=process.arch==="arm64"?"arm64-apple-macos":"x86_64-apple-macos",od=180000,id=15000,sd=30000,ad=600000,ld=["SimDevice","SimDeviceSet","SimDeviceType","SimRuntime"].map((e)=>`@interface ${e} : NSObject
498
498
  @end
499
- `).join("");function Aa(e,l,c){return new Promise((p)=>{let m=Po(e,l,{stdio:["ignore","pipe","pipe"],timeout:c}),f="";m.stdout.on("data",(h)=>{f+=h}),m.stderr.on("data",(h)=>{f+=h}),m.once("error",(h)=>p({code:-1,output:String(h)})),m.once("close",(h)=>p({code:h??-1,output:f}))})}var La=new Map;function Oo(e){let l=re(ka(e),"Frameworks"),c=La.get(l);if(!c)La.set(l,c=cd(l));return c}async function cd(e){if(process.platform!=="darwin"||!Ro(re(e,"FBSimulatorControl.framework")))return null;let l=await Aa("xcrun",["swiftc","--version"],30000);if(l.code!==0)return null;let c=Qu("sha256").update(ho).update(l.output).update(e).digest("hex").slice(0,16),p=re(rd(),".local","share","reason","simulator","host"),m=re(p,c,"simulator-host");if(Ro(m))return m;Gr(p,{recursive:!0,mode:448});let f=ed(re(p,".staging-"));try{let h=re(f,"Frameworks"),y=re(h,"FBSimulatorControl.framework"),S=re(y,"Modules","FBSimulatorControl.swiftmodule");Gr(S,{recursive:!0});for(let M of Ca(e))if(M!=="FBSimulatorControl.framework")Co(re(e,M),re(h,M));let w=re(e,"FBSimulatorControl.framework");Co(re(w,"FBSimulatorControl"),re(y,"FBSimulatorControl")),Co(re(w,"Headers"),re(y,"Headers")),tr(re(y,"Modules","module.modulemap"),Pa(re(w,"Modules","module.modulemap")));let g=Pa(re(w,"Modules","FBSimulatorControl.swiftmodule",`${Ia}.swiftinterface`),"utf8");tr(re(S,`${Ia}.swiftinterface`),g.replace(/FBSimulatorControl\.(?=[A-Za-z_])/g,"").replace(/IOSurface\.IOSurface/g,"IOSurface"));let v=re(f,"include","CoreSimulator");Gr(v,{recursive:!0}),tr(re(v,"module.modulemap"),`module CoreSimulator {
499
+ `).join("");function Aa(e,l,c){return new Promise((p)=>{let m=Oo(e,l,{stdio:["ignore","pipe","pipe"],timeout:c}),f="";m.stdout.on("data",(h)=>{f+=h}),m.stderr.on("data",(h)=>{f+=h}),m.once("error",(h)=>p({code:-1,output:String(h)})),m.once("close",(h)=>p({code:h??-1,output:f}))})}var La=new Map;function Io(e){let l=re(ka(e),"Frameworks"),c=La.get(l);if(!c)La.set(l,c=cd(l));return c}async function cd(e){if(process.platform!=="darwin"||!Co(re(e,"FBSimulatorControl.framework")))return null;let l=await Aa("xcrun",["swiftc","--version"],30000);if(l.code!==0)return null;let c=Qu("sha256").update(Eo).update(l.output).update(e).digest("hex").slice(0,16),p=re(rd(),".local","share","reason","simulator","host"),m=re(p,c,"simulator-host");if(Co(m))return m;Gr(p,{recursive:!0,mode:448});let f=ed(re(p,".staging-"));try{let h=re(f,"Frameworks"),y=re(h,"FBSimulatorControl.framework"),S=re(y,"Modules","FBSimulatorControl.swiftmodule");Gr(S,{recursive:!0});for(let M of Ca(e))if(M!=="FBSimulatorControl.framework")Po(re(e,M),re(h,M));let w=re(e,"FBSimulatorControl.framework");Po(re(w,"FBSimulatorControl"),re(y,"FBSimulatorControl")),Po(re(w,"Headers"),re(y,"Headers")),tr(re(y,"Modules","module.modulemap"),Pa(re(w,"Modules","module.modulemap")));let _=Pa(re(w,"Modules","FBSimulatorControl.swiftmodule",`${Ia}.swiftinterface`),"utf8");tr(re(S,`${Ia}.swiftinterface`),_.replace(/FBSimulatorControl\.(?=[A-Za-z_])/g,"").replace(/IOSurface\.IOSurface/g,"IOSurface"));let v=re(f,"include","CoreSimulator");Gr(v,{recursive:!0}),tr(re(v,"module.modulemap"),`module CoreSimulator {
500
500
  header "CoreSimulator.h"
501
501
  export *
502
502
  }
503
503
  `),tr(re(v,"CoreSimulator.h"),`#import <Foundation/Foundation.h>
504
- ${ld}`);let C=re(f,"main.swift");tr(C,ho);let I=re(f,"simulator-host"),A=await Aa("xcrun",["swiftc","-O","-F",h,"-I",re(f,"include"),"-module-cache-path",re(f,"cache"),"-Xlinker","-rpath","-Xlinker",e,C,"-o",I],od);if(A.code!==0||!Ro(I))return process.stderr.write(`Reason: the simulator host did not build; simulator actions use AXe.
504
+ ${ld}`);let C=re(f,"main.swift");tr(C,Eo);let I=re(f,"simulator-host"),A=await Aa("xcrun",["swiftc","-O","-F",h,"-I",re(f,"include"),"-module-cache-path",re(f,"cache"),"-Xlinker","-rpath","-Xlinker",e,C,"-o",I],od);if(A.code!==0||!Co(I))return process.stderr.write(`Reason: the simulator host did not build; simulator actions use AXe.
505
505
  ${A.output.slice(-2000)}
506
- `),null;Gr(ka(m),{recursive:!0}),td(I,m);for(let M of Ca(p))if(M!==c&&!M.startsWith(".staging-"))Oa(re(p,M),{recursive:!0,force:!0});return m}catch{return null}finally{Oa(f,{recursive:!0,force:!0})}}class nr extends Error{}class Rt extends Error{}class Ta{child;onGone;nextId=1;pending=new Map;idle;gone=!1;constructor(e,l){this.child=e;this.onGone=l;nd({input:e.stdout}).on("line",(p)=>{let m;try{m=JSON.parse(p)}catch{return}let f=this.pending.get(Number(m.id));if(!f)return;if(this.pending.delete(Number(m.id)),clearTimeout(f.timer),m.ok===!0)f.resolve(m);else f.reject(new nr(String(m.error??"The simulator refused the action.")))}),e.once("exit",()=>this.end()),e.once("error",()=>this.end()),this.touch()}call(e){if(this.gone)return Promise.reject(new Rt("The simulator host has exited."));this.touch();let l=this.nextId++;return new Promise((c,p)=>{let m=setTimeout(()=>{this.pending.delete(l),p(new Rt("The simulator host did not answer.")),this.close()},sd);this.pending.set(l,{resolve:c,reject:p,timer:m}),this.child.stdin.write(`${JSON.stringify({id:l,...e})}
507
- `)})}close(){if(this.child.exitCode===null&&this.child.signalCode===null)this.child.kill("SIGTERM");this.end()}touch(){clearTimeout(this.idle),this.idle=setTimeout(()=>this.close(),ad),this.idle.unref?.()}end(){if(this.gone)return;this.gone=!0,clearTimeout(this.idle);for(let e of this.pending.values())clearTimeout(e.timer),e.reject(new Rt("The simulator host has exited."));this.pending.clear(),this.onGone()}}var vt=new Map;async function Vr(e,l,c=!1){let p=vt.get(l);if(!p){let m={started:ud(e,l)};vt.set(l,p=m),m.started.then((f)=>{if(m.host=f,!f&&vt.get(l)===m)vt.delete(l)})}if(p.host!==void 0)return p.host;return c?p.started:null}async function ud(e,l){let c=await Oo(e);if(!c)return null;let p=Po(c,["serve",l],{stdio:["pipe","pipe","ignore"]});if(!await new Promise((h)=>{let y=setTimeout(()=>h(!1),id);p.stdout.once("data",(S)=>{clearTimeout(y),h(String(S).includes('"ready":true'))}),p.once("exit",()=>{clearTimeout(y),h(!1)}),p.once("error",()=>{clearTimeout(y),h(!1)})})){if(p.exitCode===null)p.kill("SIGTERM");return null}let f=new Ta(p,()=>{let h=vt.get(l);if(h&&(h.host===f||h.host===void 0))vt.delete(l)});return f}function Da(e,l,c,p,m){return Po(e,["stream",l,String(c),String(Math.round(p)),String(m)],{stdio:["pipe","pipe","ignore"]})}var xt={version:"1.8.0",url:"https://github.com/cameroncooke/AXe/releases/download/v1.8.0/AXe-macOS-v1.8.0-universal.tar.gz",sha256:"7b76340b72e90d0f211bc7c4636f15009076eff07acef2f2b632b175debd8834"},hd=50000,gd=112640,_d=174080,Ao=2,yd=60000,bd=2000,wd=300,Sd=40,vd=new Set(["file:","javascript:","data:","vbscript:","blob:"]);function Ot(e,l,c={}){return new Promise((p,m)=>{let f=jo(e,l,{cwd:c.cwd,stdio:["ignore","pipe","pipe"],signal:c.signal}),h=[],y=[];f.stdout.on("data",(w)=>h.push(w)),f.stderr.on("data",(w)=>y.push(w));let S=setTimeout(()=>f.kill("SIGKILL"),c.timeoutMs??hd);f.on("error",(w)=>{clearTimeout(S),m(w)}),f.on("close",(w)=>{clearTimeout(S),p({code:w??-1,stdout:Buffer.concat(h).toString("utf8"),stderr:Buffer.concat(y).toString("utf8")})})})}function te(e,l){throw new r(e,l)}async function ve(e,l,c,p={}){let m=await Ot(e,l,p);if(m.code!==0)te("simulator_command_failed",`${c} failed: ${(m.stderr||m.stdout).trim().slice(-1500)}`);return m.stdout}function ir(){return process.platform==="darwin"&&je("/Library/Developer/PrivateFrameworks/CoreSimulator.framework")&&je("/usr/bin/xcrun")}var Lo=null;function dt(){return J(Xo(),".local","share","reason","simulator","axe")}function Jo(){let e=J(dt(),xt.version,"axe");if(je(e))return Promise.resolve(e);return Lo??=(async()=>{Mo(dt(),{recursive:!0,mode:448});let l=Ko(J(dt(),".staging-"));try{let c=J(l,"axe.tgz");await so(xt.url,xt.sha256,c);let p=J(l,"tree");if(Mo(p),await ve("tar",["-xzf",c,"-C",p],"Extracting AXe"),!je(J(p,"axe"))||!je(J(p,"Frameworks")))te("simulator_axe_missing","The AXe archive has an unexpected layout.");or(J(dt(),xt.version),{recursive:!0,force:!0}),md(p,J(dt(),xt.version));for(let m of Zr(dt()))if(m!==xt.version&&!m.startsWith(".staging-"))or(J(dt(),m),{recursive:!0,force:!0});return e}finally{or(l,{recursive:!0,force:!0}),Lo=null}})(),Lo}var Ga=Jo;async function Va(e){let l=await Jo().catch(()=>null);return l?Vr(l,e.udid).catch(()=>null):null}async function Yr(e,l,c){let p=await Jo().catch(()=>te("simulator_axe_missing","AXe could not be installed on this Mac.")),m=await Ot(p,[...e,"--udid",l]);if(m.code===0)return m.stdout;let f=(m.stderr||m.stdout).trim();if(/no (matching |accessibility )?element|element not found|could not find|no elements? match/i.test(f))te("simulator_element_not_found",f.slice(-500));return te("simulator_command_failed",`${c} failed: ${f.slice(-1500)}`)}function Rd(e){let l=e.match(/SimRuntime\.([A-Za-z]+)-(\d+)-(\d+)(?:-(\d+))?$/);return l?`${l[1]} ${l[2]}.${l[3]}${l[4]?`.${l[4]}`:""}`:e}function xd(e){switch(e){case"Booted":return"booted";case"Booting":return"booting";case"Shutting Down":return"shutting_down";default:return"shutdown"}}async function Zo(){let l=JSON.parse(await ve("xcrun",["simctl","list","devices","available","-j"],"Listing simulators")).devices??{},c=[];for(let[p,m]of Object.entries(l)){if(!p.includes("SimRuntime.iOS"))continue;for(let f of m){if(f.isAvailable===!1)continue;let h=f.name.toLowerCase();if(f.deviceTypeIdentifier)Uo.set(f.udid,f.deviceTypeIdentifier);c.push({udid:f.udid,name:f.name,runtime:Rd(p),state:xd(f.state),kind:h.includes("iphone")?"iphone":h.includes("ipad")?"ipad":"other"})}}return c.sort((p,m)=>Number(m.state==="booted")-Number(p.state==="booted")||m.runtime.localeCompare(p.runtime,void 0,{numeric:!0})||p.name.localeCompare(m.name))}var Uo=new Map,Ho=null;async function Ie(e,l){let c=await Zo(),p;if(e){let m=c.filter((f)=>f.udid===e||f.name===e);if(p=m.find((f)=>f.state==="booted")??m[0],!p)te("simulator_device_not_found",`No simulator named "${e}". Call devices to list them.`)}else{let m=c.filter((f)=>f.state==="booted");if(p=m.find((f)=>f.udid===Ho)??m.find((f)=>f.kind==="iphone")??m[0],!p)te("simulator_not_booted","No simulator is booted. Call devices, then boot one.")}if(l.booted&&p.state!=="booted")te("simulator_not_booted",`${p.name} is not booted. Boot it first.`);return Ho=p.udid,p}function ce(e){return`${e.name} (${e.runtime})`}async function Ed(e){if(e.state!=="booted"){let l=await Ot("xcrun",["simctl","boot",e.udid]);if(l.code!==0&&!/current state: Booted/i.test(l.stderr))te("simulator_command_failed",`Booting ${e.name} failed: ${l.stderr.trim().slice(-1000)}`);await ve("xcrun",["simctl","bootstatus",e.udid,"-b"],`Waiting for ${e.name} to boot`,{timeoutMs:45000})}return Ho=e.udid,{...e,state:"booted"}}function Qo(e,l){let c=Fo(e,l),p=Wa(e,c);if(p.startsWith("..")||p.startsWith(za)||Fo(e,p)!==c)te("simulator_path_outside_root",`${l} is outside this machine's granted folder (${e}). Pass a path inside it, or one relative to it.`);return c}var Na=4,Cd=new Set(["node_modules","Pods","DerivedData","build","Carthage","vendor"]);function Pd(e){let l=[],c=(p,m)=>{let f;try{f=Zr(p)}catch{return}if(f.includes("project.yml")||f.some((h)=>h.endsWith(".xcworkspace")||h.endsWith(".xcodeproj"))){l.push(p);return}if(m>=Na)return;for(let h of f.sort()){if(h.startsWith(".")||Cd.has(h))continue;let y=J(p,h);try{if(Kr(y).isDirectory())c(y,m+1)}catch{}}};if(c(e,0),l.length===1)return l[0];if(!l.length)te("simulator_project_not_found",`No Xcode project or project.yml within ${Na} folders of ${e}; pass path.`);return te("simulator_project_not_found",`${e} holds several Xcode projects; pass path as one of: ${l.map((p)=>Wa(e,p)||".").join(", ")}.`)}var Ct=new Map;async function Od(e){if(e.endsWith(".xcworkspace"))return{flag:"-workspace",path:e,dir:Bo(e)};if(e.endsWith(".xcodeproj"))return{flag:"-project",path:e,dir:Bo(e)};if(!Kr(e).isDirectory())te("simulator_project_not_found",`${e} is not a project, workspace or folder.`);let l=(m)=>Zr(e).filter((f)=>f.endsWith(m)).sort();if(je(J(e,"project.yml")))await ve("xcodegen",["generate","--quiet"],"xcodegen generate",{cwd:e,timeoutMs:45000}).catch((m)=>je("/opt/homebrew/bin/xcodegen")?ve("/opt/homebrew/bin/xcodegen",["generate","--quiet"],"xcodegen generate",{cwd:e,timeoutMs:45000}):Promise.reject(m));let c=l(".xcworkspace")[0];if(c)return{flag:"-workspace",path:J(e,c),dir:e};let p=l(".xcodeproj")[0];if(p)return{flag:"-project",path:J(e,p),dir:e};return te("simulator_project_not_found",`No .xcodeproj or .xcworkspace in ${e}.`)}async function Ka(e){let l=JSON.parse(await ve("xcodebuild",["-list","-json",e.flag,e.path],"Listing schemes"));return l.workspace?.schemes??l.project?.schemes??[]}async function Id(e){let l=(await Ka(e))[0];if(!l)te("simulator_build_no_scheme",`${e.path} has no schemes; pass scheme.`);return l}function Ad(e){let l=[],c=new Set;return e.forEach((p,m)=>{if(l.length>=20||!/(^|\s)error: /.test(p)||p.startsWith("note:")||c.has(p))return;c.add(p);let f=e.slice(m+1,m+3).filter((h)=>h.trim()!==""&&!/(^|\s)(error|warning|note): /.test(h));l.push([p,...f].join(`
508
- `).slice(0,800))}),l}async function Ld(e,l,c){if(e.ended=Date.now(),l!==0){if(e.log.some((f)=>f.includes("does not contain a scheme named"))){let f=await Ka(c).catch(()=>[]);if(f.length)e.log.push(`error: this project's schemes are: ${f.join(", ")}`)}e.status="failed";return}let p=J(e.productsDir,`${e.configuration}-iphonesimulator`),m=je(p)?Zr(p).filter((f)=>f.endsWith(".app")).map((f)=>J(p,f)).sort((f,h)=>Kr(h).mtimeMs-Kr(f).mtimeMs):[];if(e.appPath=m[0],e.appPath)e.bundleId=await Ja(e.appPath).catch(()=>{return});if(e.status=e.appPath?"succeeded":"failed",!e.appPath)e.log.push("error: the build succeeded but produced no .app for the iOS Simulator")}async function Ma(e,l){let c=e.path?Qo(l,e.path):Pd(l),p=await Od(c),m=e.scheme??await Id(p),f=e.configuration??"Debug",h=await Ie(e.device,{booted:!1}).catch(()=>null),y=h?`platform=iOS Simulator,id=${h.udid}`:"generic/platform=iOS Simulator",S=dd("sha256").update(p.path).digest("hex").slice(0,16),w=J(Xo(),"Library","Caches","reason","simulator-builds",S),g={id:`build-${pd().slice(0,8)}`,status:"running",started:Date.now(),log:[],productsDir:J(w,"Build","Products"),configuration:f};Ct.set(g.id,g);for(let[A,M]of Ct)if(Ct.size>20&&M.status!=="running")Ct.delete(A);let v=jo("xcodebuild",[p.flag,p.path,"-scheme",m,"-configuration",f,"-destination",y,"-derivedDataPath",w,"-skipMacroValidation","build"],{cwd:p.dir,stdio:["ignore","pipe","pipe"]}),C="",I=(A)=>{let M=(C+A.toString("utf8")).split(`
509
- `);if(C=M.pop()??"",g.log.push(...M),g.log.length>5000)g.log.splice(0,g.log.length-5000)};return v.stdout.on("data",I),v.stderr.on("data",I),v.on("error",(A)=>{g.log.push(`error: ${A.message}`),g.status="failed",g.ended=Date.now()}),v.on("close",(A)=>{if(C)g.log.push(C);Ld(g,A??-1,p)}),{text:`Build ${g.id} started: ${m} (${f}) for ${h?ce(h):"the iOS Simulator"}. Poll build_status with this build_id; a first build can take minutes, later ones are incremental.`,build:Ya(g)}}function Ya(e){return{id:e.id,status:e.status,errors:Ad(e.log),log_tail:e.log.slice(-Sd).join(`
510
- `).slice(-4000),elapsed_ms:(e.ended??Date.now())-e.started,...e.appPath?{app_path:e.appPath}:{},...e.bundleId?{bundle_id:e.bundleId}:{}}}var kd=45000,Td=30000;async function ko(e,l=kd){let c=Date.now()+l;while(Ct.get(e)?.status==="running"&&Date.now()<c)await Bun.sleep(500);let p=Xa(e);return p.build?.status==="running"?{...p,text:`${p.text} Still running: call build_status with wait again.`}:p}function Xa(e){let l=Ct.get(e);if(!l)te("simulator_build_not_found",`No build ${e} on this Mac (a worker restart forgets builds); start a new one.`);let c=Ya(l);return{text:l.status==="running"?`Build ${e} is running (${Math.round(c.elapsed_ms/1000)} s).`:l.status==="succeeded"?`Build ${e} succeeded: ${l.appPath}. Launch it with app_path.`:`Build ${e} failed with ${c.errors.length} error(s).`,build:c}}async function Ja(e){return(await ve("plutil",["-extract","CFBundleIdentifier","raw","-o","-",J(e,"Info.plist")],"Reading the bundle id")).trim()}var ot=new Map;function Dd(e,l){ot.get(e.udid)?.stop();let c=jo("script",["-q","/dev/null","xcrun","simctl","launch","--console-pty","--terminate-running-process",e.udid,l],{stdio:["ignore","pipe","pipe"]}),p={udid:e.udid,bundleId:l,lines:[],first:0,stop:()=>c.kill("SIGTERM")};ot.set(e.udid,p);let m="",f=(h)=>{let y=(m+h.toString("utf8").replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\r]/g,"")).split(`
506
+ `),null;Gr(ka(m),{recursive:!0}),td(I,m);for(let M of Ca(p))if(M!==c&&!M.startsWith(".staging-"))Oa(re(p,M),{recursive:!0,force:!0});return m}catch{return null}finally{Oa(f,{recursive:!0,force:!0})}}class rr extends Error{}class xt extends Error{}class Ta{child;onGone;nextId=1;pending=new Map;idle;gone=!1;constructor(e,l){this.child=e;this.onGone=l;nd({input:e.stdout}).on("line",(p)=>{let m;try{m=JSON.parse(p)}catch{return}let f=this.pending.get(Number(m.id));if(!f)return;if(this.pending.delete(Number(m.id)),clearTimeout(f.timer),m.ok===!0)f.resolve(m);else f.reject(new rr(String(m.error??"The simulator refused the action.")))}),e.once("exit",()=>this.end()),e.once("error",()=>this.end()),this.touch()}call(e){if(this.gone)return Promise.reject(new xt("The simulator host has exited."));this.touch();let l=this.nextId++;return new Promise((c,p)=>{let m=setTimeout(()=>{this.pending.delete(l),p(new xt("The simulator host did not answer.")),this.close()},sd);this.pending.set(l,{resolve:c,reject:p,timer:m}),this.child.stdin.write(`${JSON.stringify({id:l,...e})}
507
+ `)})}close(){if(this.child.exitCode===null&&this.child.signalCode===null)this.child.kill("SIGTERM");this.end()}touch(){clearTimeout(this.idle),this.idle=setTimeout(()=>this.close(),ad),this.idle.unref?.()}end(){if(this.gone)return;this.gone=!0,clearTimeout(this.idle);for(let e of this.pending.values())clearTimeout(e.timer),e.reject(new xt("The simulator host has exited."));this.pending.clear(),this.onGone()}}var St=new Map;async function Vr(e,l,c=!1){let p=St.get(l);if(!p){let m={started:ud(e,l)};St.set(l,p=m),m.started.then((f)=>{if(m.host=f,!f&&St.get(l)===m)St.delete(l)})}if(p.host!==void 0)return p.host;return c?p.started:null}async function ud(e,l){let c=await Io(e);if(!c)return null;let p=Oo(c,["serve",l],{stdio:["pipe","pipe","ignore"]});if(!await new Promise((h)=>{let y=setTimeout(()=>h(!1),id);p.stdout.once("data",(S)=>{clearTimeout(y),h(String(S).includes('"ready":true'))}),p.once("exit",()=>{clearTimeout(y),h(!1)}),p.once("error",()=>{clearTimeout(y),h(!1)})})){if(p.exitCode===null)p.kill("SIGTERM");return null}let f=new Ta(p,()=>{let h=St.get(l);if(h&&(h.host===f||h.host===void 0))St.delete(l)});return f}function Da(e,l,c,p,m){return Oo(e,["stream",l,String(c),String(Math.round(p)),String(m)],{stdio:["pipe","pipe","ignore"]})}var Et={version:"1.8.0",url:"https://github.com/cameroncooke/AXe/releases/download/v1.8.0/AXe-macOS-v1.8.0-universal.tar.gz",sha256:"7b76340b72e90d0f211bc7c4636f15009076eff07acef2f2b632b175debd8834"},hd=50000,gd=112640,_d=174080,Ao=2,yd=60000,bd=2000,wd=300,Sd=40,vd=new Set(["file:","javascript:","data:","vbscript:","blob:"]);function It(e,l,c={}){return new Promise((p,m)=>{let f=qo(e,l,{cwd:c.cwd,stdio:["ignore","pipe","pipe"],signal:c.signal}),h=[],y=[];f.stdout.on("data",(w)=>h.push(w)),f.stderr.on("data",(w)=>y.push(w));let S=setTimeout(()=>f.kill("SIGKILL"),c.timeoutMs??hd);f.on("error",(w)=>{clearTimeout(S),m(w)}),f.on("close",(w)=>{clearTimeout(S),p({code:w??-1,stdout:Buffer.concat(h).toString("utf8"),stderr:Buffer.concat(y).toString("utf8")})})})}function te(e,l){throw new r(e,l)}async function xe(e,l,c,p={}){let m=await It(e,l,p);if(m.code!==0)te("simulator_command_failed",`${c} failed: ${(m.stderr||m.stdout).trim().slice(-1500)}`);return m.stdout}function or(){return process.platform==="darwin"&&je("/Library/Developer/PrivateFrameworks/CoreSimulator.framework")&&je("/usr/bin/xcrun")}var Lo=null;function pt(){return J(Vo(),".local","share","reason","simulator","axe")}function Yo(){let e=J(pt(),Et.version,"axe");if(je(e))return Promise.resolve(e);return Lo??=(async()=>{Do(pt(),{recursive:!0,mode:448});let l=Wo(J(pt(),".staging-"));try{let c=J(l,"axe.tgz");await uo(Et.url,Et.sha256,c);let p=J(l,"tree");if(Do(p),await xe("tar",["-xzf",c,"-C",p],"Extracting AXe"),!je(J(p,"axe"))||!je(J(p,"Frameworks")))te("simulator_axe_missing","The AXe archive has an unexpected layout.");nr(J(pt(),Et.version),{recursive:!0,force:!0}),md(p,J(pt(),Et.version));for(let m of Zr(pt()))if(m!==Et.version&&!m.startsWith(".staging-"))nr(J(pt(),m),{recursive:!0,force:!0});return e}finally{nr(l,{recursive:!0,force:!0}),Lo=null}})(),Lo}var Ga=Yo;async function Va(e){let l=await Yo().catch(()=>null);return l?Vr(l,e.udid).catch(()=>null):null}async function Yr(e,l,c){let p=await Yo().catch(()=>te("simulator_axe_missing","AXe could not be installed on this Mac.")),m=await It(p,[...e,"--udid",l]);if(m.code===0)return m.stdout;let f=(m.stderr||m.stdout).trim();if(/no (matching |accessibility )?element|element not found|could not find|no elements? match/i.test(f))te("simulator_element_not_found",f.slice(-500));return te("simulator_command_failed",`${c} failed: ${f.slice(-1500)}`)}function Rd(e){let l=e.match(/SimRuntime\.([A-Za-z]+)-(\d+)-(\d+)(?:-(\d+))?$/);return l?`${l[1]} ${l[2]}.${l[3]}${l[4]?`.${l[4]}`:""}`:e}function xd(e){switch(e){case"Booted":return"booted";case"Booting":return"booting";case"Shutting Down":return"shutting_down";default:return"shutdown"}}async function Qo(){let l=JSON.parse(await xe("xcrun",["simctl","list","devices","available","-j"],"Listing simulators")).devices??{},c=[];for(let[p,m]of Object.entries(l)){if(!p.includes("SimRuntime.iOS"))continue;for(let f of m){if(f.isAvailable===!1)continue;let h=f.name.toLowerCase();if(f.deviceTypeIdentifier)Ho.set(f.udid,f.deviceTypeIdentifier);c.push({udid:f.udid,name:f.name,runtime:Rd(p),state:xd(f.state),kind:h.includes("iphone")?"iphone":h.includes("ipad")?"ipad":"other"})}}return c.sort((p,m)=>Number(m.state==="booted")-Number(p.state==="booted")||m.runtime.localeCompare(p.runtime,void 0,{numeric:!0})||p.name.localeCompare(m.name))}var Ho=new Map,jo=null;async function Ae(e,l){let c=await Qo(),p;if(e){let m=c.filter((f)=>f.udid===e||f.name===e);if(p=m.find((f)=>f.state==="booted")??m[0],!p)te("simulator_device_not_found",`No simulator named "${e}". Call devices to list them.`)}else{let m=c.filter((f)=>f.state==="booted");if(p=m.find((f)=>f.udid===jo)??m.find((f)=>f.kind==="iphone")??m[0],!p)te("simulator_not_booted","No simulator is booted. Call devices, then boot one.")}if(l.booted&&p.state!=="booted")te("simulator_not_booted",`${p.name} is not booted. Boot it first.`);return jo=p.udid,p}function ce(e){return`${e.name} (${e.runtime})`}async function Ed(e){if(e.state!=="booted"){let l=await It("xcrun",["simctl","boot",e.udid]);if(l.code!==0&&!/current state: Booted/i.test(l.stderr))te("simulator_command_failed",`Booting ${e.name} failed: ${l.stderr.trim().slice(-1000)}`);await xe("xcrun",["simctl","bootstatus",e.udid,"-b"],`Waiting for ${e.name} to boot`,{timeoutMs:45000})}return jo=e.udid,{...e,state:"booted"}}function ei(e,l){let c=Fo(e,l),p=Wa(e,c);if(p.startsWith("..")||p.startsWith(za)||Fo(e,p)!==c)te("simulator_path_outside_root",`${l} is outside this machine's granted folder (${e}). Pass a path inside it, or one relative to it.`);return c}var Na=4,Cd=new Set(["node_modules","Pods","DerivedData","build","Carthage","vendor"]);function Pd(e){let l=[],c=(p,m)=>{let f;try{f=Zr(p)}catch{return}if(f.includes("project.yml")||f.some((h)=>h.endsWith(".xcworkspace")||h.endsWith(".xcodeproj"))){l.push(p);return}if(m>=Na)return;for(let h of f.sort()){if(h.startsWith(".")||Cd.has(h))continue;let y=J(p,h);try{if(Kr(y).isDirectory())c(y,m+1)}catch{}}};if(c(e,0),l.length===1)return l[0];if(!l.length)te("simulator_project_not_found",`No Xcode project or project.yml within ${Na} folders of ${e}; pass path.`);return te("simulator_project_not_found",`${e} holds several Xcode projects; pass path as one of: ${l.map((p)=>Wa(e,p)||".").join(", ")}.`)}var Pt=new Map;async function Od(e){if(e.endsWith(".xcworkspace"))return{flag:"-workspace",path:e,dir:No(e)};if(e.endsWith(".xcodeproj"))return{flag:"-project",path:e,dir:No(e)};if(!Kr(e).isDirectory())te("simulator_project_not_found",`${e} is not a project, workspace or folder.`);let l=(m)=>Zr(e).filter((f)=>f.endsWith(m)).sort();if(je(J(e,"project.yml")))await xe("xcodegen",["generate","--quiet"],"xcodegen generate",{cwd:e,timeoutMs:45000}).catch((m)=>je("/opt/homebrew/bin/xcodegen")?xe("/opt/homebrew/bin/xcodegen",["generate","--quiet"],"xcodegen generate",{cwd:e,timeoutMs:45000}):Promise.reject(m));let c=l(".xcworkspace")[0];if(c)return{flag:"-workspace",path:J(e,c),dir:e};let p=l(".xcodeproj")[0];if(p)return{flag:"-project",path:J(e,p),dir:e};return te("simulator_project_not_found",`No .xcodeproj or .xcworkspace in ${e}.`)}async function Ka(e){let l=JSON.parse(await xe("xcodebuild",["-list","-json",e.flag,e.path],"Listing schemes"));return l.workspace?.schemes??l.project?.schemes??[]}async function Id(e){let l=(await Ka(e))[0];if(!l)te("simulator_build_no_scheme",`${e.path} has no schemes; pass scheme.`);return l}function Ad(e){let l=[],c=new Set;return e.forEach((p,m)=>{if(l.length>=20||!/(^|\s)error: /.test(p)||p.startsWith("note:")||c.has(p))return;c.add(p);let f=e.slice(m+1,m+3).filter((h)=>h.trim()!==""&&!/(^|\s)(error|warning|note): /.test(h));l.push([p,...f].join(`
508
+ `).slice(0,800))}),l}async function Ld(e,l,c){if(e.ended=Date.now(),l!==0){if(e.log.some((f)=>f.includes("does not contain a scheme named"))){let f=await Ka(c).catch(()=>[]);if(f.length)e.log.push(`error: this project's schemes are: ${f.join(", ")}`)}e.status="failed";return}let p=J(e.productsDir,`${e.configuration}-iphonesimulator`),m=je(p)?Zr(p).filter((f)=>f.endsWith(".app")).map((f)=>J(p,f)).sort((f,h)=>Kr(h).mtimeMs-Kr(f).mtimeMs):[];if(e.appPath=m[0],e.appPath)e.bundleId=await Ja(e.appPath).catch(()=>{return});if(e.status=e.appPath?"succeeded":"failed",!e.appPath)e.log.push("error: the build succeeded but produced no .app for the iOS Simulator")}async function Ma(e,l){let c=e.path?ei(l,e.path):Pd(l),p=await Od(c),m=e.scheme??await Id(p),f=e.configuration??"Debug",h=await Ae(e.device,{booted:!1}).catch(()=>null),y=h?`platform=iOS Simulator,id=${h.udid}`:"generic/platform=iOS Simulator",S=dd("sha256").update(p.path).digest("hex").slice(0,16),w=J(Vo(),"Library","Caches","reason","simulator-builds",S),_={id:`build-${pd().slice(0,8)}`,status:"running",started:Date.now(),log:[],productsDir:J(w,"Build","Products"),configuration:f};Pt.set(_.id,_);for(let[A,M]of Pt)if(Pt.size>20&&M.status!=="running")Pt.delete(A);let v=qo("xcodebuild",[p.flag,p.path,"-scheme",m,"-configuration",f,"-destination",y,"-derivedDataPath",w,"-skipMacroValidation","build"],{cwd:p.dir,stdio:["ignore","pipe","pipe"]}),C="",I=(A)=>{let M=(C+A.toString("utf8")).split(`
509
+ `);if(C=M.pop()??"",_.log.push(...M),_.log.length>5000)_.log.splice(0,_.log.length-5000)};return v.stdout.on("data",I),v.stderr.on("data",I),v.on("error",(A)=>{_.log.push(`error: ${A.message}`),_.status="failed",_.ended=Date.now()}),v.on("close",(A)=>{if(C)_.log.push(C);Ld(_,A??-1,p)}),{text:`Build ${_.id} started: ${m} (${f}) for ${h?ce(h):"the iOS Simulator"}. Poll build_status with this build_id; a first build can take minutes, later ones are incremental.`,build:Ya(_)}}function Ya(e){return{id:e.id,status:e.status,errors:Ad(e.log),log_tail:e.log.slice(-Sd).join(`
510
+ `).slice(-4000),elapsed_ms:(e.ended??Date.now())-e.started,...e.appPath?{app_path:e.appPath}:{},...e.bundleId?{bundle_id:e.bundleId}:{}}}var kd=45000,Td=30000;async function ko(e,l=kd){let c=Date.now()+l;while(Pt.get(e)?.status==="running"&&Date.now()<c)await Bun.sleep(500);let p=Xa(e);return p.build?.status==="running"?{...p,text:`${p.text} Still running: call build_status with wait again.`}:p}function Xa(e){let l=Pt.get(e);if(!l)te("simulator_build_not_found",`No build ${e} on this Mac (a worker restart forgets builds); start a new one.`);let c=Ya(l);return{text:l.status==="running"?`Build ${e} is running (${Math.round(c.elapsed_ms/1000)} s).`:l.status==="succeeded"?`Build ${e} succeeded: ${l.appPath}. Launch it with app_path.`:`Build ${e} failed with ${c.errors.length} error(s).`,build:c}}async function Ja(e){return(await xe("plutil",["-extract","CFBundleIdentifier","raw","-o","-",J(e,"Info.plist")],"Reading the bundle id")).trim()}var rt=new Map;function Dd(e,l){rt.get(e.udid)?.stop();let c=qo("script",["-q","/dev/null","xcrun","simctl","launch","--console-pty","--terminate-running-process",e.udid,l],{stdio:["ignore","pipe","pipe"]}),p={udid:e.udid,bundleId:l,lines:[],first:0,stop:()=>c.kill("SIGTERM")};rt.set(e.udid,p);let m="",f=(h)=>{let y=(m+h.toString("utf8").replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\r]/g,"")).split(`
511
511
  `);m=y.pop()??"",p.lines.push(...y);let S=p.lines.length-bd;if(S>0)p.lines.splice(0,S),p.first+=S};return c.stdout.on("data",f),c.stderr.on("data",f),new Promise((h)=>{let y=setTimeout(()=>h(null),15000),S=()=>{let w=p.lines.concat(m).join(`
512
- `).match(new RegExp(`${l.replace(/\./g,"\\.")}: (\\d+)`))?.[1];if(w)clearTimeout(y),h(Number(w))};c.stdout.on("data",S),c.on("close",()=>{clearTimeout(y),h(null)})})}async function Nd(e,l){let c=await Ie(e.device,{booted:!0}),p=e.bundle_id;if(e.app_path){let f=Md(l,e.app_path);await ve("xcrun",["simctl","install",c.udid,f],`Installing ${qa(f)}`),p=await Ja(f)}if(e.bundle_id){if((await Ot("xcrun",["simctl","get_app_container",c.udid,e.bundle_id])).code!==0)te("simulator_app_not_installed",`${e.bundle_id} is not installed on ${ce(c)}.`)}let m=await Dd(c,p);if(m===null){let f=ot.get(c.udid)?.lines.slice(-20).join(`
512
+ `).match(new RegExp(`${l.replace(/\./g,"\\.")}: (\\d+)`))?.[1];if(w)clearTimeout(y),h(Number(w))};c.stdout.on("data",S),c.on("close",()=>{clearTimeout(y),h(null)})})}async function Nd(e,l){let c=await Ae(e.device,{booted:!0}),p=e.bundle_id;if(e.app_path){let f=Md(l,e.app_path);await xe("xcrun",["simctl","install",c.udid,f],`Installing ${qa(f)}`),p=await Ja(f)}if(e.bundle_id){if((await It("xcrun",["simctl","get_app_container",c.udid,e.bundle_id])).code!==0)te("simulator_app_not_installed",`${e.bundle_id} is not installed on ${ce(c)}.`)}let m=await Dd(c,p);if(m===null){let f=rt.get(c.udid)?.lines.slice(-20).join(`
513
513
  `)??"";te("simulator_launch_failed",`${p} did not start on ${ce(c)}.${f?`
514
- ${f}`:""}`)}return{text:`Launched ${p} on ${ce(c)} (pid ${m}). Its console is captured; read it with logs.`,device:c}}function Md(e,l){let c=Fo(l),p=J(Xo(),"Library","Caches","reason","simulator-builds")+za;return c.startsWith(p)&&c.endsWith(".app")?c:Qo(e,c)}function $d(e,l){let c=ot.get(e.udid);if(!c)return{text:`No app launched by Reason is running on ${ce(e)}; launch one to capture its capture.`,logs:{lines:[],next:0}};let p=Math.max(l??0,c.first,c.first+c.lines.length-wd),m=c.lines.slice(p-c.first).map((f)=>f.slice(0,2000));return{text:`${m.length} console line(s) from ${c.bundleId} on ${ce(e)}.`,logs:{lines:m,next:c.first+c.lines.length}}}var Xr=new Map;function $a(e,...l){let c=Xr.get(e.udid);if(!c)return;for(let[p,m]of l)if(p>c.width||m>c.height)te("simulator_point_off_screen",`(${p}, ${m}) is off ${e.name}'s ${c.width}x${c.height}-point screen.`)}function Ba(e,l){if(e.kind==="ipad")return 2;return l===750||l===828||l===640?2:3}async function ei(e,l=1,c){let p=Ko(J(ja(),"reason-sim-"));try{let m=J(p,"screen.png");if(await ve("xcrun",["simctl","io",e.udid,"screenshot","--type=png",m],"Taking a screenshot"),c){Mo(Bo(c),{recursive:!0});let I=await ve("sips",["-g","pixelWidth","-g","pixelHeight",m],"Reading the screenshot size"),A=Number(I.match(/pixelWidth: (\d+)/)?.[1]),M=Number(I.match(/pixelHeight: (\d+)/)?.[1]),N=2/Ba(e,A);await ve("sips",["-z",String(Math.round(M*N)),String(Math.round(A*N)),m,"--out",c],"Saving the screenshot")}let f=await ve("sips",["-g","pixelWidth","-g","pixelHeight",m],"Reading the screenshot size"),h=Number(f.match(/pixelWidth: (\d+)/)?.[1]),y=Number(f.match(/pixelHeight: (\d+)/)?.[1]),S=Ba(e,h),w=Math.round(h/S),g=Math.round(y/S);Xr.set(e.udid,{width:w,height:g});let v=Buffer.alloc(0),C=l===2?_d:gd;for(let I of[70,50,35]){let A=J(p,`screen-${I}.jpg`);if(await ve("sips",["-z",String(g*l),String(w*l),"-s","format","jpeg","-s","formatOptions",String(I),m,"--out",A],"Encoding the screenshot"),v=Yo(A),v.byteLength<=C)break}return{text:`Screenshot of ${ce(e)} at ${w}x${g} points: image pixels are tap coordinates.`+(c?` Saved at ${c}.`:""),device:e,image:{mime:"image/jpeg",data:v.toString("base64"),width:w,height:g}}}finally{or(p,{recursive:!0,force:!0})}}async function Bd(e){let l=await Va(e);if(l)try{return String((await l.call({op:"tree"})).tree)}catch{}return Yr(["describe-ui"],e.udid,"Reading the accessibility tree")}async function Jr(e){let l=JSON.parse(await Bd(e)),c={lines:[],compact:[],ids:new Set,labels:new Set,targets:[]},p=(m,f,h="")=>{let y=(m.role??m.type??"?").replace(/^AX/,""),S=m.AXLabel||m.title||"",w=m.AXValue?` value="${String(m.AXValue).slice(0,120)}"`:"",g=m.AXUniqueId?` id=${m.AXUniqueId}`:"";if(m.AXUniqueId)c.ids.add(m.AXUniqueId);if(S)c.labels.add(S);let v=m.frame;if(y==="Application"&&v&&!c.bounds)c.bounds={width:v.width,height:v.height};if(v&&v.width>0&&v.height>0&&(m.AXUniqueId||m.AXLabel))c.targets.push({...m.AXUniqueId?{id:m.AXUniqueId.trim()}:{},...m.AXLabel?{label:m.AXLabel.trim()}:{},role:y,frame:v});let C=Boolean(S||g||w||!["Group","Other"].includes(y));if(C){let I=`${" ".repeat(Math.min(f,12))}${y} "${S.slice(0,160)}"${g}${w}`+(v?` (${Math.round(v.x)},${Math.round(v.y)} ${Math.round(v.width)}x${Math.round(v.height)})`:"")+(m.enabled===!1?" disabled":"");c.lines.push(I);let A=y==="Image"&&!g,M=(y==="StaticText"||y==="Image")&&!g&&S!==""&&h.includes(S);if(!A&&!M)c.compact.push(I)}for(let I of m.children??[])p(I,C?f+1:f,S||h)};for(let m of l)p(m,0);return c}function Za(e,l,c=!1){let p=(c?e.compact:e.lines).join(`
514
+ ${f}`:""}`)}return{text:`Launched ${p} on ${ce(c)} (pid ${m}). Its console is captured; read it with logs.`,device:c}}function Md(e,l){let c=Fo(l),p=J(Vo(),"Library","Caches","reason","simulator-builds")+za;return c.startsWith(p)&&c.endsWith(".app")?c:ei(e,c)}function $d(e,l){let c=rt.get(e.udid);if(!c)return{text:`No app launched by Reason is running on ${ce(e)}; launch one to capture its capture.`,logs:{lines:[],next:0}};let p=Math.max(l??0,c.first,c.first+c.lines.length-wd),m=c.lines.slice(p-c.first).map((f)=>f.slice(0,2000));return{text:`${m.length} console line(s) from ${c.bundleId} on ${ce(e)}.`,logs:{lines:m,next:c.first+c.lines.length}}}var Xr=new Map;function $a(e,...l){let c=Xr.get(e.udid);if(!c)return;for(let[p,m]of l)if(p>c.width||m>c.height)te("simulator_point_off_screen",`(${p}, ${m}) is off ${e.name}'s ${c.width}x${c.height}-point screen.`)}function Ba(e,l){if(e.kind==="ipad")return 2;return l===750||l===828||l===640?2:3}async function ri(e,l=1,c){let p=Wo(J(ja(),"reason-sim-"));try{let m=J(p,"screen.png");if(await xe("xcrun",["simctl","io",e.udid,"screenshot","--type=png",m],"Taking a screenshot"),c){Do(No(c),{recursive:!0});let I=await xe("sips",["-g","pixelWidth","-g","pixelHeight",m],"Reading the screenshot size"),A=Number(I.match(/pixelWidth: (\d+)/)?.[1]),M=Number(I.match(/pixelHeight: (\d+)/)?.[1]),N=2/Ba(e,A);await xe("sips",["-z",String(Math.round(M*N)),String(Math.round(A*N)),m,"--out",c],"Saving the screenshot")}let f=await xe("sips",["-g","pixelWidth","-g","pixelHeight",m],"Reading the screenshot size"),h=Number(f.match(/pixelWidth: (\d+)/)?.[1]),y=Number(f.match(/pixelHeight: (\d+)/)?.[1]),S=Ba(e,h),w=Math.round(h/S),_=Math.round(y/S);Xr.set(e.udid,{width:w,height:_});let v=Buffer.alloc(0),C=l===2?_d:gd;for(let I of[70,50,35]){let A=J(p,`screen-${I}.jpg`);if(await xe("sips",["-z",String(_*l),String(w*l),"-s","format","jpeg","-s","formatOptions",String(I),m,"--out",A],"Encoding the screenshot"),v=zo(A),v.byteLength<=C)break}return{text:`Screenshot of ${ce(e)} at ${w}x${_} points: image pixels are tap coordinates.`+(c?` Saved at ${c}.`:""),device:e,image:{mime:"image/jpeg",data:v.toString("base64"),width:w,height:_}}}finally{nr(p,{recursive:!0,force:!0})}}async function Bd(e){let l=await Va(e);if(l)try{return String((await l.call({op:"tree"})).tree)}catch{}return Yr(["describe-ui"],e.udid,"Reading the accessibility tree")}async function Jr(e){let l=JSON.parse(await Bd(e)),c={lines:[],compact:[],ids:new Set,labels:new Set,targets:[]},p=(m,f,h="")=>{let y=(m.role??m.type??"?").replace(/^AX/,""),S=m.AXLabel||m.title||"",w=m.AXValue?` value="${String(m.AXValue).slice(0,120)}"`:"",_=m.AXUniqueId?` id=${m.AXUniqueId}`:"";if(m.AXUniqueId)c.ids.add(m.AXUniqueId);if(S)c.labels.add(S);let v=m.frame;if(y==="Application"&&v&&!c.bounds)c.bounds={width:v.width,height:v.height};if(v&&v.width>0&&v.height>0&&(m.AXUniqueId||m.AXLabel))c.targets.push({...m.AXUniqueId?{id:m.AXUniqueId.trim()}:{},...m.AXLabel?{label:m.AXLabel.trim()}:{},role:y,frame:v});let C=Boolean(S||_||w||!["Group","Other"].includes(y));if(C){let I=`${" ".repeat(Math.min(f,12))}${y} "${S.slice(0,160)}"${_}${w}`+(v?` (${Math.round(v.x)},${Math.round(v.y)} ${Math.round(v.width)}x${Math.round(v.height)})`:"")+(m.enabled===!1?" disabled":"");c.lines.push(I);let A=y==="Image"&&!_,M=(y==="StaticText"||y==="Image")&&!_&&S!==""&&h.includes(S);if(!A&&!M)c.compact.push(I)}for(let I of m.children??[])p(I,C?f+1:f,S||h)};for(let m of l)p(m,0);return c}function Za(e,l,c=!1){let p=(c?e.compact:e.lines).join(`
515
515
  `);return p.length>l?`${p.slice(0,l)}
516
516
  \u2026 (truncated)`:p}async function Fd(e){let l=await Jr(e);return{text:`Accessibility tree of ${ce(e)} (frames in points; tap by id or label):
517
- ${Za(l,yd)}`,device:e}}var Ud=450,Hd=1e4;function jd(e,l){let c=l.id?e.ids.has(l.id):[...e.labels].some((p)=>p===l.label||p.includes(l.label));return l.gone?!c:c}async function pt(e,l,c){let p=l.observe??"tree";if(p==="none"&&!l.wait_for)return c;let m=null,f="";if(l.wait_for){let y=Date.now()+(l.timeout??5)*1000,S=l.wait_for,w=S.id?`id ${S.id}`:`"${S.label}"`;for(;;){if(m=await Jr(e),jd(m,S)){f=` ${w} is ${S.gone?"gone":"on screen"}.`;break}if(Date.now()>=y){f=S.gone?` Waited ${l.timeout??5} s: ${w} is still on screen.`:` Waited ${l.timeout??5} s: ${w} is not in the visible accessibility tree. Lists only build their visible rows, so check the screen below: it may be open with that element further down (scroll to it), or wait for something at its top.`;break}await Bun.sleep(250)}}else await Bun.sleep(Ud);let h={...c,text:`${c.text}${f}`};if(p==="tree"||p==="both")m??=await Jr(e),h.screen=Za(m,Hd,!0),h.text+=`
517
+ ${Za(l,yd)}`,device:e}}var Ud=450,Hd=1e4;function jd(e,l){let c=l.id?e.ids.has(l.id):[...e.labels].some((p)=>p===l.label||p.includes(l.label));return l.gone?!c:c}async function mt(e,l,c){let p=l.observe??"tree";if(p==="none"&&!l.wait_for)return c;let m=null,f="";if(l.wait_for){let y=Date.now()+(l.timeout??5)*1000,S=l.wait_for,w=S.id?`id ${S.id}`:`"${S.label}"`;for(;;){if(m=await Jr(e),jd(m,S)){f=` ${w} is ${S.gone?"gone":"on screen"}.`;break}if(Date.now()>=y){f=S.gone?` Waited ${l.timeout??5} s: ${w} is still on screen.`:` Waited ${l.timeout??5} s: ${w} is not in the visible accessibility tree. Lists only build their visible rows, so check the screen below: it may be open with that element further down (scroll to it), or wait for something at its top.`;break}await Bun.sleep(250)}}else await Bun.sleep(Ud);let h={...c,text:`${c.text}${f}`};if(p==="tree"||p==="both")m??=await Jr(e),h.screen=Za(m,Hd,!0),h.text+=`
518
518
  Screen now:
519
- ${h.screen}`;if(p==="screenshot"||p==="both"){let y=await ei(e);h.image=y.image}return h}function Fa(e){return`'${e.replace(/'/g,"'\\''")}'`}function qd(e){switch(e.action){case"tap":if(e.x!==void 0&&e.y!==void 0)return e.duration?`touch -x ${e.x} -y ${e.y} --down --up --delay ${e.duration}`:`tap -x ${e.x} -y ${e.y}`;return e.id?`tap --id ${Fa(e.id)}`:`tap --label ${Fa(e.label)}`;case"swipe":return`swipe --start-x ${e.x} --start-y ${e.y} --end-x ${e.x2} --end-y ${e.y2} --duration ${e.duration??0.3}`;case"button":return`button ${e.name.replace("_","-")}`;case"sleep":return`sleep ${e.seconds}`}}var Qa=0.35,Wd=new Set(["Button","Link","Cell","MenuItem","Switch","Toggle","CheckBox","PopUpButton","TextField","SecureTextField","SearchField","TextArea","Slider","Tab","RadioButton"]);function zd(e,l){let c=e.targets.filter((w)=>l.id!==void 0?w.id===l.id.trim():w.label===l.label?.trim()),p=(w)=>({x:w.frame.x+w.frame.width/2,y:w.frame.y+w.frame.height/2}),m=e.bounds,f=m?c.filter((w)=>{let{x:g,y:v}=p(w);return g>=0&&v>=0&&g<=m.width&&v<=m.height}):c,h=f.length?f:c,y=h.filter((w)=>Wd.has(w.role)),S=(y.length?y:h)[0];return S?p(S):null}async function Gd(e,l,c,p,m){let f=Date.now()+c*1000;for(;;){let h=zd(await Jr(e),l);if(h)return h;if(Date.now()>=f){let y=l.id!==void 0?`--id '${l.id}'`:`--label '${l.label}'`;return te("simulator_element_not_found",`Error: Step ${p} failed: [tap]
519
+ ${h.screen}`;if(p==="screenshot"||p==="both"){let y=await ri(e);h.image=y.image}return h}function Fa(e){return`'${e.replace(/'/g,"'\\''")}'`}function qd(e){switch(e.action){case"tap":if(e.x!==void 0&&e.y!==void 0)return e.duration?`touch -x ${e.x} -y ${e.y} --down --up --delay ${e.duration}`:`tap -x ${e.x} -y ${e.y}`;return e.id?`tap --id ${Fa(e.id)}`:`tap --label ${Fa(e.label)}`;case"swipe":return`swipe --start-x ${e.x} --start-y ${e.y} --end-x ${e.x2} --end-y ${e.y2} --duration ${e.duration??0.3}`;case"button":return`button ${e.name.replace("_","-")}`;case"sleep":return`sleep ${e.seconds}`}}var Qa=0.35,Wd=new Set(["Button","Link","Cell","MenuItem","Switch","Toggle","CheckBox","PopUpButton","TextField","SecureTextField","SearchField","TextArea","Slider","Tab","RadioButton"]);function zd(e,l){let c=e.targets.filter((w)=>l.id!==void 0?w.id===l.id.trim():w.label===l.label?.trim()),p=(w)=>({x:w.frame.x+w.frame.width/2,y:w.frame.y+w.frame.height/2}),m=e.bounds,f=m?c.filter((w)=>{let{x:_,y:v}=p(w);return _>=0&&v>=0&&_<=m.width&&v<=m.height}):c,h=f.length?f:c,y=h.filter((w)=>Wd.has(w.role)),S=(y.length?y:h)[0];return S?p(S):null}async function Gd(e,l,c,p,m){let f=Date.now()+c*1000;for(;;){let h=zd(await Jr(e),l);if(h)return h;if(Date.now()>=f){let y=l.id!==void 0?`--id '${l.id}'`:`--label '${l.label}'`;return te("simulator_element_not_found",`Error: Step ${p} failed: [tap]
520
520
  No accessibility element matched ${y}. Make sure the app is on the expected screen, then inspect it and prefer an id when there is one.
521
- (${p-1} of ${m} steps had completed.)`)}await Bun.sleep(250)}}async function Et(e,l,c){let p=await Va(e);if(!p)return Ua(e,l,c);for(let[m,f]of l.entries()){try{switch(f.action){case"tap":{let y=f.x!==void 0&&f.y!==void 0?{x:f.x,y:f.y}:await Gd(e,f,c,m+1,l.length);await p.call(f.duration?{op:"tap",...y,duration:f.duration}:{op:"tap",...y});break}case"swipe":await p.call({op:"swipe",x:f.x,y:f.y,x2:f.x2,y2:f.y2,duration:f.duration??0.3});break;case"button":await p.call({op:"button",name:f.name});break;case"type":await p.call({op:"text",text:f.text}).catch((y)=>y instanceof nr?Yr(["type",f.text],e.udid,`Step ${m+1} (typing)`):Promise.reject(y));break;case"sleep":await Bun.sleep(f.seconds*1000);break}}catch(y){if(y instanceof Rt)return await Ua(e,l.slice(m),c),`Ran ${l.length} step(s) on ${ce(e)}.`;if(y instanceof nr)te("simulator_command_failed",`Step ${m+1} failed: ${y.message}
522
- (${m} of ${l.length} steps had completed.)`);throw y}let h=l[m+1];if(f.action!=="sleep"&&h&&h.action!=="sleep")await Bun.sleep(Qa*1000)}return`Ran ${l.length} step(s) on ${ce(e)}.`}async function Ua(e,l,c){let p=[],m=[],f=0,h=0,y=async()=>{if(p.length===0)return;let S=["batch","--ax-cache","perStep","--wait-timeout",String(c)];for(let w of p)S.push("--step",w);try{await Yr(S,e.udid,`Steps ${h+1}-${h+f}`)}catch(w){if(w instanceof r){let g=w.message.replace(/Step (\d+) failed/,(v,C)=>{let I=m[Number(C)-1];return I?`Step ${I} failed`:v});te(w.code,`${g}
523
- (${h} of ${l.length} steps had completed before this batch.)`)}throw w}h+=f,p=[],m=[],f=0};for(let[S,w]of l.entries()){if(w.action==="type"){await y(),await Yr(["type",w.text],e.udid,`Step ${h+1} (typing)`),h+=1;continue}p.push(qd(w)),f+=1,m.push(S+1);let g=l[S+1];if(w.action!=="sleep"&&g&&g.action!=="sleep")p.push(`sleep ${Qa}`),m.push(S+1)}return await y(),`Ran ${l.length} step(s) on ${ce(e)}.`}var Vd=["topLeft","top","topRight","right","bottomRight","bottom","bottomLeft","left"],Ha=new Map,Kd=`ObjC.import("AppKit");
521
+ (${p-1} of ${m} steps had completed.)`)}await Bun.sleep(250)}}async function Ct(e,l,c){let p=await Va(e);if(!p)return Ua(e,l,c);for(let[m,f]of l.entries()){try{switch(f.action){case"tap":{let y=f.x!==void 0&&f.y!==void 0?{x:f.x,y:f.y}:await Gd(e,f,c,m+1,l.length);await p.call(f.duration?{op:"tap",...y,duration:f.duration}:{op:"tap",...y});break}case"swipe":await p.call({op:"swipe",x:f.x,y:f.y,x2:f.x2,y2:f.y2,duration:f.duration??0.3});break;case"button":await p.call({op:"button",name:f.name});break;case"type":await p.call({op:"text",text:f.text}).catch((y)=>y instanceof rr?Yr(["type",f.text],e.udid,`Step ${m+1} (typing)`):Promise.reject(y));break;case"sleep":await Bun.sleep(f.seconds*1000);break}}catch(y){if(y instanceof xt)return await Ua(e,l.slice(m),c),`Ran ${l.length} step(s) on ${ce(e)}.`;if(y instanceof rr)te("simulator_command_failed",`Step ${m+1} failed: ${y.message}
522
+ (${m} of ${l.length} steps had completed.)`);throw y}let h=l[m+1];if(f.action!=="sleep"&&h&&h.action!=="sleep")await Bun.sleep(Qa*1000)}return`Ran ${l.length} step(s) on ${ce(e)}.`}async function Ua(e,l,c){let p=[],m=[],f=0,h=0,y=async()=>{if(p.length===0)return;let S=["batch","--ax-cache","perStep","--wait-timeout",String(c)];for(let w of p)S.push("--step",w);try{await Yr(S,e.udid,`Steps ${h+1}-${h+f}`)}catch(w){if(w instanceof r){let _=w.message.replace(/Step (\d+) failed/,(v,C)=>{let I=m[Number(C)-1];return I?`Step ${I} failed`:v});te(w.code,`${_}
523
+ (${h} of ${l.length} steps had completed before this batch.)`)}throw w}h+=f,p=[],m=[],f=0};for(let[S,w]of l.entries()){if(w.action==="type"){await y(),await Yr(["type",w.text],e.udid,`Step ${h+1} (typing)`),h+=1;continue}p.push(qd(w)),f+=1,m.push(S+1);let _=l[S+1];if(w.action!=="sleep"&&_&&_.action!=="sleep")p.push(`sleep ${Qa}`),m.push(S+1)}return await y(),`Ran ${l.length} step(s) on ${ce(e)}.`}var Vd=["topLeft","top","topRight","right","bottomRight","bottom","bottomLeft","left"],Ha=new Map,Kd=`ObjC.import("AppKit");
524
524
  function run(argv) {
525
525
  const [input, output, width, height] = argv;
526
526
  const w = Number(width), h = Number(height);
@@ -532,8 +532,8 @@ function run(argv) {
532
532
  image.drawInRectFromRectOperationFraction($.NSMakeRect(0, 0, w, h), $.NSZeroRect, $.NSCompositingOperationCopy, 1);
533
533
  $.NSGraphicsContext.restoreGraphicsState;
534
534
  rep.representationUsingTypeProperties($.NSBitmapImageFileTypePNG, $()).writeToFileAtomically(output, true);
535
- }`;async function To(e,l,c){let p=await ve("sips",["-g","pixelWidth","-g","pixelHeight",e],"Reading the frame size"),m=Number(p.match(/pixelWidth: ([\d.]+)/)?.[1]),f=Number(p.match(/pixelHeight: ([\d.]+)/)?.[1]);if(c!==void 0)m=m*c/f,f=c;let h=Ko(J(ja(),"reason-chrome-"));try{let y=J(h,"render.js"),S=J(h,"out.png");if(fd(y,Kd),await ve("osascript",["-l","JavaScript",y,e,S,String(Math.max(1,Math.round(m*l))),String(Math.max(1,Math.round(f*l)))],"Rendering the frame"),!je(S))te("simulator_command_failed",`Rendering ${qa(e)} produced no image.`);return{image:Yo(S).toString("base64"),width:m,height:f}}finally{or(h,{recursive:!0,force:!0})}}async function Yd(e){if(!Uo.has(e.udid))await Zo();let l=Uo.get(e.udid),p=JSON.parse(await ve("xcrun",["simctl","list","devicetypes","-j"],"Listing device types")).devicetypes?.find((m)=>m.identifier===l)?.bundlePath;if(!p)te("simulator_command_failed",`No device type bundle for ${e.name}.`);return p}async function Xd(e){let l=await Yd(e),c=Xr.get(e.udid)??(e.state==="booted"?(await ei(e),Xr.get(e.udid)):void 0);if(!c)te("simulator_not_booted",`${e.name} is not booted.`);let p=Ha.get(l);if(p)return{text:`Frame of ${ce(e)}.`,device:e,chrome:p};let m=J(l,"Contents","Resources"),f=JSON.parse(await ve("plutil",["-convert","json","-o","-",J(m,"profile.plist")],"Reading the device profile")),h=f.framebufferMask?J(m,`${f.framebufferMask}.pdf`):null,y=h&&je(h)?await To(h,Ao,c.height):null,S=f.chromeIdentifier?.split(".").pop(),w=S?J("/Library/Developer/DeviceKit/Chrome",`${S}.devicechrome`,"Contents","Resources"):"";if(!S||!je(J(w,"chrome.json")))te("simulator_command_failed",`${e.name} has no device frame in this Xcode.`);let g=JSON.parse(Yo(J(w,"chrome.json"),"utf8")),v={};for(let B of Vd){let F=g.images[B];if(!F)te("simulator_command_failed",`${e.name}'s frame has no ${B} piece.`);v[B]=await To(J(w,`${F}.pdf`),Ao)}let{sizing:C}=g.images,I={top:C.topHeight,left:C.leftWidth,bottom:C.bottomHeight,right:C.rightWidth},A=c.width+I.left+I.right,M=c.height+I.top+I.bottom,N=[];for(let B of g.inputs??[]){let F=J(w,`${B.image}.pdf`);if(!je(F))continue;let H=await To(F,Ao),{x:ne,y:_e}=B.offsets.normal,xe=(it,he,Sr)=>it<0?he+it-Sr:it,Ze=B.anchor==="left"?{x:ne-H.width,y:xe(_e,M,H.height)}:B.anchor==="right"?{x:A+ne,y:xe(_e,M,H.height)}:B.anchor==="top"?{x:xe(ne,A,H.width),y:_e-H.height}:{x:xe(ne,A,H.width),y:M+_e};N.push({name:B.name,image:H.image,...Ze,width:H.width,height:H.height})}let L={identifier:g.identifier,screen:{width:c.width,height:c.height},inset:I,padding:g.images.devicePadding??{top:0,left:0,bottom:0,right:0},pieces:v,buttons:N,...y?{screen_mask:y.image}:{}};return Ha.set(l,L),{text:`Frame of ${ce(e)}.`,device:e,chrome:L}}var Jd=new Set(["simulator_command_failed","simulator_launch_failed","simulator_point_off_screen","simulator_build_no_scheme","simulator_element_not_found","simulator_path_outside_root","simulator_project_not_found"]);async function sr(e){try{return await el(e)}catch(l){if(l instanceof r&&Jd.has(l.code))return{text:l.message,error:l.code};throw l}}async function el(e){if(!ir())te("simulator_xcode_missing","Xcode's iOS Simulator is not available on this Mac.");let l=fo.safeParse(e.payload);if(!l.success)te("simulator_invalid_request",l.error.issues.map((p)=>p.message).join("; "));let c=l.data;switch(c.action){case"devices":{let p=await Zo(),m=p.filter((f)=>f.state==="booted");return{text:`${m.length} booted (${m.map(ce).join(", ")||"none"}), ${p.length} available.`,devices:p}}case"boot":{let p=await Ed(await Ie(c.device,{booted:!1}));return{text:`${ce(p)} is booted.`,device:p}}case"shutdown":{let p=await Ie(c.device,{booted:!1});ot.get(p.udid)?.stop(),ot.delete(p.udid);let m=await Ot("xcrun",["simctl","shutdown",p.udid]);if(m.code!==0&&!/current state: Shutdown/i.test(m.stderr))te("simulator_command_failed",m.stderr.trim().slice(-1000));return{text:`${ce(p)} is shut down.`,device:{...p,state:"shutdown"}}}case"build":{let p=await Ma(c,e.root);return c.wait&&p.build?ko(p.build.id):p}case"build_status":return c.wait?ko(c.build_id):Xa(c.build_id);case"run":{let p=await Ma({...c,action:"build"},e.root),m=await ko(p.build.id,Td);if(m.build?.status!=="succeeded"||!m.build.app_path)return m;let f=await el({root:e.root,payload:{action:"launch",app_path:m.build.app_path,...c.device?{device:c.device}:{},...c.steps?{steps:c.steps}:{},...c.observe?{observe:c.observe}:{},...c.wait_for?{wait_for:c.wait_for}:{},...c.timeout!==void 0?{timeout:c.timeout}:{}}});return{...f,text:`Built in ${Math.round(m.build.elapsed_ms/1000)} s. ${f.text}`,build:m.build}}case"launch":{let p=await Nd(c,e.root);if(!p.device)return p;if(c.steps?.length)p.text+=` ${await Et(p.device,c.steps,c.timeout??8)}`;else if(!c.wait_for)await Bun.sleep(1000);return pt(p.device,c,p)}case"steps":{let p=await Ie(c.device,{booted:!0});return pt(p,c,{text:await Et(p,c.steps,c.timeout??5),device:p})}case"terminate":{let p=await Ie(c.device,{booted:!0});if(ot.get(p.udid)?.bundleId===c.bundle_id)ot.get(p.udid)?.stop();return await Ot("xcrun",["simctl","terminate",p.udid,c.bundle_id]),{text:`Terminated ${c.bundle_id} on ${ce(p)}.`,device:p}}case"logs":return $d(await Ie(c.device,{booted:!1}),c.after);case"screenshot":return ei(await Ie(c.device,{booted:!0}),c.scale,c.save_path?Qo(e.root,c.save_path):void 0);case"chrome":return Xd(await Ie(c.device,{booted:!1}));case"inspect":return Fd(await Ie(c.device,{booted:!0}));case"tap":{let p=await Ie(c.device,{booted:!0}),m=c.x!==void 0&&c.y!==void 0;if(m)$a(p,[c.x,c.y]);await Et(p,[m?{action:"tap",x:c.x,y:c.y,...c.duration&&c.duration>0?{duration:c.duration}:{}}:c.id?{action:"tap",id:c.id}:{action:"tap",label:c.label}],3);let f=m?`(${c.x}, ${c.y})`:c.id?`id ${c.id}`:`"${c.label}"`;return pt(p,c,{text:`Tapped ${f} on ${ce(p)}.`,device:p})}case"swipe":{let p=await Ie(c.device,{booted:!0});return $a(p,[c.x,c.y],[c.x2,c.y2]),await Et(p,[{action:"swipe",x:c.x,y:c.y,x2:c.x2,y2:c.y2,...c.duration!==void 0?{duration:c.duration}:{}}],3),pt(p,c,{text:`Swiped (${c.x}, ${c.y}) \u2192 (${c.x2}, ${c.y2}) on ${ce(p)}.`,device:p})}case"type":{let p=await Ie(c.device,{booted:!0});return await Et(p,[{action:"type",text:c.text}],3),pt(p,c,{text:`Typed ${c.text.length} character(s) on ${ce(p)}.`,device:p})}case"button":{let p=await Ie(c.device,{booted:!0});return await Et(p,[{action:"button",name:c.name}],3),pt(p,c,{text:`Pressed ${c.name} on ${ce(p)}.`,device:p})}case"open_url":{let p=await Ie(c.device,{booted:!0}),m;try{m=new URL(c.url)}catch{te("simulator_invalid_request","open_url needs an absolute URL.")}if(vd.has(m.protocol))te("simulator_invalid_request",`${m.protocol} URLs are not allowed.`);return await ve("xcrun",["simctl","openurl",p.udid,m.href],"Opening the URL"),pt(p,c,{text:`Opened ${m.href} on ${ce(p)}.`,device:p})}case"appearance":{let p=await Ie(c.device,{booted:!0});return await ve("xcrun",["simctl","ui",p.udid,"appearance",c.mode],"Setting the appearance"),{text:`${ce(p)} is in ${c.mode} mode.`,device:p}}}}import{mkdtempSync as Zd,readFileSync as Qd,rmSync as ep}from"fs";import{tmpdir as tp}from"os";import{join as tl}from"path";import{spawn as ol}from"child_process";var rp=/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i,ar=1,np=[{bit:8,dx:0,dy:1},{bit:16,dx:0,dy:-1},{bit:32,dx:1,dy:0},{bit:64,dx:-1,dy:0}],rl=60,op=8,il=ir;var nl={65293:40,65421:40,65307:41,65288:42,65289:43,65535:76,65360:74,65367:77,65365:75,65366:78,65361:80,65362:82,65363:79,65364:81,65505:225,65506:229,65507:224,65508:228,65513:226,65514:230,65515:227,65516:231,65511:227,65512:231,65509:57},ip=(()=>{let e={" ":44};"abcdefghijklmnopqrstuvwxyz".split("").forEach((c,p)=>{e[c]=4+p,e[c.toUpperCase()]=4+p}),"1234567890".split("").forEach((c,p)=>{e[c]=30+p}),"!@#$%^&*()".split("").forEach((c,p)=>{e[c]=30+p});let l=[["-","_",45],["=","+",46],["[","{",47],["]","}",48],["\\","|",49],[";",":",51],["'",'"',52],["`","~",53],[",","<",54],[".",">",55],["/","?",56]];for(let[c,p,m]of l)e[c]=m,e[p]=m;return e})();function sp(e){if(nl[e]!==void 0)return nl[e];return e>=32&&e<=126?ip[String.fromCharCode(e)]??null:null}function sl(e,l){let c=ol("xcrun",["simctl","pbcopy",e],{stdio:["pipe","ignore","ignore"]});c.once("error",()=>{}),c.stdin.end(l)}function ap(e,l){let c=0,p={x:0,y:0},m=(f)=>{l.call(f).catch(()=>{})};return{pointer(f,h,y){let S=(y&ar)!==0;if(S&&!(c&ar))m({op:"touch",phase:"down",x:f,y:h});else if(S&&(f!==p.x||h!==p.y))m({op:"touch",phase:"move",x:f,y:h});else if(!S&&c&ar)m({op:"touch",phase:"up",x:f,y:h});for(let w of np)if(y&w.bit&&!(c&w.bit))m({op:"swipe",x:f,y:h,x2:f+w.dx*rl,y2:h+w.dy*rl,duration:0.08});c=y,p={x:f,y:h}},key(f,h){let y=sp(h);if(y!==null)m({op:"key",usage:y,down:f})},clipboard(f){sl(e,f)},close(){if(c&ar)m({op:"touch",phase:"up",...p});c=0}}}function lp(e,l){let c=null,p="",m,f=(h)=>{sr({payload:{...h,device:e,observe:"none"},root:l}).catch(()=>{})};return{pointer(h,y,S){let w=(S&ar)!==0;if(w&&!c)c={x:h,y,at:Date.now()};if(!w&&c){let g=(Date.now()-c.at)/1000;if(Math.hypot(h-c.x,y-c.y)>op)f({action:"swipe",x:c.x,y:c.y,x2:h,y2:y,duration:Math.min(Math.max(g,0.05),1)});else f({action:"tap",x:c.x,y:c.y,...g>0.5?{duration:Math.min(g,10)}:{}});c=null}},key(h,y){if(!h)return;let S=y===65293?`
536
- `:y>=32&&y<=126?String.fromCharCode(y):null;if(S===null)return;p+=S,clearTimeout(m),m=setTimeout(()=>{let w=p;p="",f({action:"type",text:w})},250)},clipboard(h){sl(e,h)},close(){clearTimeout(m),c=null}}}function cp(e,l,c){return new Promise((p,m)=>{let f=ol(e,l,{stdio:"ignore",signal:c});f.once("error",m),f.once("exit",(h)=>p(h??-1))})}async function up(e,l){let c=Zd(tl(tp(),"reason-simulator-stream-"));try{let p=tl(c,"screen.png");if(await cp("xcrun",["simctl","io",e,"screenshot","--type=png",p],l)!==0)throw new r("simulator_not_booted","That simulator is not booted.");let m=Qd(p).subarray(16,24);return{width:m.readUInt32BE(0),height:m.readUInt32BE(4)}}finally{ep(c,{recursive:!0,force:!0})}}async function al(e,l={}){let{udid:c,...p}=e.payload;if(typeof c!=="string"||!rp.test(c)||!p.video)throw new r("invalid_display_request","Reason simulator stream request is malformed.");let m=await Ga().catch(()=>{throw new r("simulator_axe_missing","AXe could not be installed on this Mac.")}),f=await sr({payload:{action:"screenshot",device:c},root:e.root});if(f.error||!f.image)throw new r("simulator_not_booted","That simulator is not booted.");let h={width:f.image.width,height:f.image.height},y=await Oo(m),S=y?await Vr(m,c,!0):null,w=y?null:await Rn();if(!y&&!w)throw new r("display_video_unsupported","This Mac can build neither the simulator host nor find an H.264 ffmpeg.");let g={kind:"simulator",udid:c,axe:m,points:h,sound:null,size:y?h:await up(c,e.signal),stream:y?(v,C,I)=>Da(y,c,Math.min(v,60),I,C):null,input:S?ap(c,S):lp(c,e.root)};return await Mt({payload:p,signal:e.signal},{...l,video:{desktop:async()=>g,...w?{ffmpeg:()=>w}:{}}})}var bl=131072,vp=131072,Rp=128,wl=8192,Ii=30000,Ai=15000,xp=/^[a-z][a-z0-9_]{0,63}$/,zo=new Set(["jobs.control","fs.read","fs.write"]),ll=new Set(["cancelled","run_finished","run_cancelled","driver_handoff","driver_stopped"]);function Qr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/[a-z]/gi,(l)=>`[${l.toLowerCase()}${l.toUpperCase()}]`)}function cl(e){return e.map(Qr).join("/")}function ti(e,l){let c=[];for(let p=0;p<e.length;p+=l)c.push(e.slice(p,p+l));return c}var Ep=[...ti(ke,4).map((e)=>`/(${e.map(cl).join("|")})(/|$)`),...ti(Kt,4).map((e)=>`/(${e.map(cl).join("|")})$`),...ti([...Jt],6).map((e)=>`/(${e.map(Qr).join("|")})$`),`/${Qr(".env")}\\.[^/]+$`,`/[^/]+(${Zt.map(Qr).join("|")})$`],Ci=new Set(["add","am","apply","branch","checkout","cherry-pick","clean","commit","merge","mv","rebase","remote","reset","restore","revert","rm","stash","switch","tag"]),Sl=new Set(["blame","diff","for-each-ref","grep","log","ls-files","rev-list","rev-parse","shortlog","show","status"]);function vl(e){return[e.requiredPermission,...e.additionalPermissions??[]]}function Cp(e){return It(e)}function Pi(){if(X()==="darwin")return Ye("/usr/bin/sandbox-exec");if(X()==="linux"||X()==="win32")return vr();return!1}function ul(){if(X()==="linux")return Ye("/proc");if(X()==="win32")return ye()!==null;if(!Pi())return!1;if(X()==="darwin")return Ye("/usr/sbin/lsof");return!1}function Li(){return X()==="darwin"?"/bin/zsh":_n()}function Oi(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function Pp(e){if(!Oi(e))throw new r("invalid_payload","Operation payload must be an object.");if(Buffer.byteLength(JSON.stringify(e),"utf8")>Te)throw new r("payload_too_large","Operation payload exceeds 256 KB.");return e}function $t(e,l){let c=e[l];if(c===void 0||c===null)return;if(typeof c!=="string")throw new r("invalid_payload",`${l} must be a string.`);return c}function tn(e,l,c=wl){let p=$t(e,l);if(!p||Buffer.byteLength(p,"utf8")>c||p.includes("\x00"))throw new r("invalid_payload",`${l} is missing or too large.`);return p}function Op(e,l,c){let p=e[l];if(typeof p!=="string"||p.includes("\x00")||Buffer.byteLength(p,"utf8")>c)throw new r("invalid_payload",`${l} is missing or too large.`);return p}function yr(e,l,c,p){if(e===void 0||e===null)return l;if(typeof e!=="number"||!Number.isInteger(e))throw new r("invalid_payload","Expected a bounded integer.");return Math.min(Math.max(e,c),p)}function mt(e,l){if(X()==="win32")[e,l]=[e.toLowerCase(),l.toLowerCase()];return l===e||l.startsWith(`${e}${wp}`)}function At(e){if(go(e))throw new r("protected_path","This path is on Reason's credential denylist. The Mac's owner can allow it with `reason permissions protected allow <path>` or Request permission in Files.")}function de(e){let l;try{l=Ve(e.path)}catch(c){if(process.platform==="darwin"&&dn(c))throw pn(e.path);throw new r("root_unavailable","The granted root is unavailable.")}if(l!==e.path||!br(l).isDirectory())throw new r("root_changed","The granted root changed after registration.");return At(l),l}function ki(e,l="."){if(!l||l.includes("\x00")||yp(l))throw new r("path_outside_root","Paths must be relative to the granted root.");if(X()==="win32"&&l.split(/[\\/]/).some(nn))throw new r("invalid_path","Windows reserves this file name.");let c=bp(e,l);if(!mt(e,c))throw new r("path_outside_root","Path escapes the granted root.");return c}function kt(e,l=".",c=!1){let p=ki(e,l),m;try{m=Ve(p)}catch(f){if(Cl(f))throw Pl();throw new r("path_not_found","Path does not exist.")}if(!mt(e,m))throw new r("symlink_escape","Path resolves outside the granted root.");if(!c)At(m);return m}function Ip(e,l){let c=ki(e,l);if(At(c),Ye(c)){let f=Ve(c);if(!mt(e,f))throw new r("symlink_escape","Write target resolves outside the granted root.");if(ri(c).isSymbolicLink())throw new r("symlink_escape","Writing through a symlink is not allowed.");return At(f),f}let p=dr(c);while(!Ye(p)){let f=dr(p);if(f===p)throw new r("path_outside_root","No safe write parent.");p=f}let m=Ve(p);if(!mt(e,m))throw new r("symlink_escape","Write parent resolves outside the granted root.");return At(m),c}function Rl(e,l){return Ri(e,l)||"."}function Ap(e,l=bl){let c=Buffer.from(e,"utf8");if(c.byteLength<=l)return{value:e,truncated:!1};return{value:c.subarray(0,l).toString("utf8"),truncated:!0}}function xl(e,l){return{...He({home:e,temporaryDirectory:l}),ZDOTDIR:l,BASH_ENV:"/dev/null",ENV:"/dev/null",GIT_CONFIG_NOSYSTEM:"1",GIT_CONFIG_GLOBAL:"/dev/null",GIT_TERMINAL_PROMPT:"0",GIT_OPTIONAL_LOCKS:"0"}}function Lp(e,l,c,p=!1){return["(version 1)","(deny default)",'(import "system.sb")',"(allow process*)",'(allow file-read* (subpath "/opt/homebrew") (subpath "/usr/local"))',...p?['(allow file-read* (subpath "/dev"))']:[],`(allow file-read* (subpath ${JSON.stringify(e)}))`,`(allow file-read* file-write* (subpath ${JSON.stringify(l)}))`,...c?[`(allow file-write* (subpath ${JSON.stringify(e)}))`]:[],...Ep.map((m)=>`(deny file-read* file-write* (regex #"${m}"))`),..._o(e,c),"(deny network*)"].join(`
537
- `)}async function cn(e,l,c){return new Promise((p,m)=>{let f="",h="",y=!1,S=!1,w=!1,g;try{g=Sp(e,l,{cwd:c.cwd,env:c.env,shell:!1,stdio:["ignore","pipe","pipe"],...Ne()}),Le(g)}catch(M){m(M);return}let v=(M,N)=>{if(w)return;w=!0,clearTimeout(A),c.signal.removeEventListener("abort",I),p({exitCode:M,signal:N,stdout:f,stderr:h,timedOut:S,truncated:y})},C=(M,N)=>{let L=`${M}${String(N)}`,B=Ap(L);return y||=B.truncated,B.value};g.stdout.on("data",(M)=>{f=C(f,M)}),g.stderr.on("data",(M)=>{h=C(h,M)}),g.once("error",m),g.once("exit",v);let I=()=>{try{if(X()==="win32"&&g.pid)Me(g.pid);else g.kill("SIGTERM")}catch{}};c.signal.addEventListener("abort",I,{once:!0});let A=setTimeout(()=>{S=!0,I()},c.timeoutMs)})}var dl=null;function kp(){return dl??=to({scrubEnvironment:xl,spawnCaptured:cn,isProtectedPath:E}),dl}var qo=async(e,l,c)=>{if(X()==="linux"||X()==="win32")return kp()(e,l,c);if(X()!=="darwin"||!Ye("/usr/bin/sandbox-exec"))throw new r("sandbox_unavailable","Confined command execution is unavailable on this operating system.");let p=mp(yl(_p(),"reason-device-"));try{return await cn("/usr/bin/sandbox-exec",["-p",Lp(c.root,p,c.allowWrite,c.allowProcessInspection===!0),e,...l],{cwd:c.cwd,timeoutMs:c.timeoutMs,signal:c.signal,env:xl(c.root,p)})}finally{hp(p,{recursive:!0,force:!0})}};function Tp(e){let l=e.args;if(l===void 0)return[];if(!Array.isArray(l)||l.length>Rp)throw new r("invalid_payload","args must be a bounded string array.");return l.map((c)=>{if(typeof c!=="string"||c.includes("\x00")||Buffer.byteLength(c,"utf8")>wl)throw new r("invalid_payload","Command argument is invalid or too large.");return c})}async function El(e,l,c,p={}){if(e.signal.aborted)throw new r("cancelled","Operation was cancelled.");let m=de(e.root),f=p.cwd??m,h=await e.runCommand(l,c,{cwd:f,root:m,allowWrite:p.allowWrite===!0,timeoutMs:p.timeoutMs??Ai,signal:e.signal});if(h.exitCode!==0&&/permission denied|operation not permitted|EACCES|EPERM/i.test(h.stderr))await e.emit("permission.denied",{operation:"bash",provenance:e.worker?.executionMode==="unsandboxed"?"os_permission_unknown":"sandbox_policy"});return{exit_code:h.exitCode,signal:h.signal,stdout:h.stdout,stderr:h.stderr,timed_out:h.timedOut,truncated:h.truncated}}function Cl(e){let l=e instanceof Error&&"code"in e?e.code:null;return l==="EACCES"||l==="EPERM"}var Pl=()=>new r("path_unreadable","The path is not readable.");function Dp(e){try{return _l(e,qe.O_RDONLY)}catch(l){throw Cl(l)?Pl():l}}function pl(e,l){let c=ge()?K():null;return c?Nt(c,{op:"fs",capability:e,root:l.root,payload:l.payload},l.signal).then((p)=>p.value):Wo(e,l)}function Wo(e,l){return e==="fs.read"?Np(l):$p(l)}async function Np(e){let l=de(e.root),c=kt(l,tn(e.payload,"path"));if(!br(c).isFile())throw new r("not_a_file","Read target is not a file.");let p=yr(e.payload.offset,0,0,Number.MAX_SAFE_INTEGER),m=yr(e.payload.max_bytes,65536,1,bl),f=$t(e.payload,"encoding");if(f!==void 0&&f!=="base64")throw new r("invalid_payload","encoding must be base64.");let h=Dp(c),y,S;try{y=gl(h).size;let g=Buffer.alloc(Math.max(0,Math.min(m,y-p)));S=g.subarray(0,g.byteLength?fp(h,g,0,g.byteLength,p):0)}finally{hl(h)}let w=f==="base64"||S.includes(0);return{path:Rl(l,c),content:w?S.toString("base64"):S.toString("utf8"),encoding:w?"base64":"utf8",offset:p,bytes:S.byteLength,size:y,truncated:p+S.byteLength<y}}function Mp(e,l,c=X()){let p=e==="append"?qe.O_APPEND:qe.O_TRUNC;if(c==="win32")return l?qe.O_WRONLY|(e==="append"?qe.O_APPEND:0):qe.O_WRONLY|qe.O_CREAT|qe.O_EXCL;return qe.O_WRONLY|qe.O_NOFOLLOW|p|(l?0:qe.O_CREAT|qe.O_EXCL)}async function $p(e){let l=de(e.root),c=tn(e.payload,"path"),p=Op(e.payload,"content",vp),m=$t(e.payload,"mode")??"overwrite";if(!["create","overwrite","append"].includes(m))throw new r("invalid_payload","mode must be create, overwrite, or append.");let f=Ip(l,c);if(e.payload.create_parents===!0||e.payload.create_directories===!0){pp(dr(f),{recursive:!0,mode:448});let w=Ve(dr(f));if(!mt(l,w))throw new r("symlink_escape","Write parent escaped root.")}if(!Ye(dr(f)))throw new r("path_not_found","Write parent does not exist.");if(m==="create"&&Ye(f))throw new r("path_exists","Create mode will not overwrite an existing file.");let h=Ye(f),y=h?ri(f):null,S=_l(f,Mp(m,h),384);try{let w=gl(S),g=y??(X()==="win32"?ri(f):null);if(g&&(w.ino!==g.ino||w.dev!==g.dev||X()==="win32"&&!mt(l,Ve(f))))throw new r("symlink_escape","The write target changed between validation and opening.");if(X()==="win32"&&y&&m!=="append")dp(S,0);gp(S,p,null,"utf8")}finally{hl(S)}return{path:Rl(l,f),bytes_written:Buffer.byteLength(p,"utf8"),mode:m}}async function Bp(e){let l=de(e.root),c=tn(e.payload,"command",65536),p=kt(l,$t(e.payload,"cwd")??".");if(!br(p).isDirectory())throw new r("invalid_cwd","cwd is not a directory.");let m=yr(e.payload.timeout_ms,Ai,100,Ii);return El(e,Li(),["-lc",c],{cwd:p,allowWrite:e.root.permissions.write,timeoutMs:m})}async function Fp(e){let l=Fi.safeParse(e.payload),c=e.worker;if(!l.success||!e.claimOwner||(c?!c.runtimeDirectory:X()!=="darwin"))throw new r("preview_unavailable","Preview servers are unavailable on this computer.");let p=de(e.root),m=ie(p,l.data.workspace),f=m.boundary===p?p:kt(m.anchor,Ri(m.anchor,m.boundary)||"."),h=kt(f,Ri(f,m.path)||".");if(!br(h).isDirectory())throw new r("invalid_cwd","The Session checkout is not a directory.");let y=Math.min(Date.parse(l.data.expires_at),Date.now()+$i);if(!(y>Date.now()))throw new r("process_authority_lost","The preview server lease is unavailable.");let S=(L)=>e.emit("progress",{process:L});if(!c?.runtimeDirectory){if(e.claim.local_github_authority)throw new r("local_device_gh_confinement_unavailable","Only a worker runs a local GitHub Session's dev server.");return{...await cr({claim:e.claim,root:f,cwd:h,command:l.data.command,mode:"host",shell:St(),environment:process.env,expiresAtMs:y,signal:e.signal,emit:S})}}let w={directory:yl(c.runtimeDirectory,"processes")},g={deniedPorts:lr([e.apiOrigin])},v=hr(),C=fr(),I=ge(),A=l.data.egress?Pt(I):null;if(l.data.egress&&(A===null||!me(c.executionMode==="unsandboxed")))throw new r("preview_egress_unavailable","This computer cannot hold a dev server to the run's network allowlist; no command was dispatched.");let M=l.data.egress?await bs(l.data.egress.allowed_domains):null,N=M?[`export ${["HTTP_PROXY","HTTPS_PROXY","http_proxy","https_proxy"].map((L)=>`${L}=${M.url}`).join(" ")}`,"export NO_PROXY=localhost,127.0.0.1,::1 no_proxy=localhost,127.0.0.1,::1 NODE_USE_ENV_PROXY=1",l.data.command].join(`
538
- `):l.data.command;try{return{...await cr({claim:e.claim,root:h,cwd:h,command:N,mode:"host",shell:C,expiresAtMs:y,signal:e.signal,emit:S,...I?{jobsUser:{...I,...A!==null?{modelGid:A}:{}}}:{},environment:{...v.variables,HOME:v.home,PATH:v.path,TMPDIR:v.temporaryDirectory,SHELL:C},journals:w,preview:g})}}finally{M?.close()}}async function Up(e){Zn();let l=de(e.root),c=eo(e.payload.command),p=kt(l,$t(e.payload,"cwd")??".");if(!br(p).isDirectory())throw new r("invalid_cwd","cwd is not a directory.");let m=yr(e.payload.timeout_ms,Xs,100,Yn),{ignored:f}=ro(e.payload.env);return await e.emit("progress",{shell:St(),shell_flags:[...er],sandbox:"none",ignored_env:f}),Zs({command:c,cwd:p,timeoutMs:m,signal:e.signal,spawn:e.spawnFullControl,requestEnv:e.payload.env})}async function Hp(e){let l=de(e.root),c=Tp(e.payload),p=c[0];if(!p||!Sl.has(p)&&!Ci.has(p))throw new r("git_command_not_allowed","Git subcommand is not in the Device allowlist.");if(c.some((h)=>h==="-C"||h==="-c"||h.startsWith("--git-dir")||h.startsWith("--work-tree")||h.startsWith("--config-env")||h.startsWith("--exec-path")))throw new r("git_argument_not_allowed","Git path/config overrides are not allowed.");let m=Ci.has(p);if(m&&!e.root.permissions.write)throw new r("permission_denied","Mutating Git commands require the write grant.");let f=kt(l,$t(e.payload,"cwd")??".");return El(e,"git",["-c","core.hooksPath=/dev/null","-c","credential.helper=",...c],{cwd:f,allowWrite:m||process.platform==="win32"&&e.root.permissions.write,timeoutMs:yr(e.payload.timeout_ms,Ai,100,Ii)})}function Ol(e,l){return async(c)=>{let p=await e.runCommand("/usr/sbin/lsof",c,{cwd:l,root:l,allowWrite:!1,allowProcessInspection:!0,timeoutMs:1e4,signal:e.signal});if(e.signal.aborted)throw new r("cancelled","Operation was cancelled.");return p}}async function jp(e){let l=de(e.root);if(X()==="linux")return la(l);if(X()==="win32")return Xi(l);return ma(l,Ol(e,l))}async function qp(e){let l=de(e.root);if(X()==="linux")return ca(l);if(X()==="win32")return Yi(l);return fa(l,Ol(e,l))}async function Wp(e){let l=e.worker?Sa(e.worker):null,c=e.claim.environment;delete e.claim.environment;let p=e.worker&&c&&Ti({deviceId:e.deviceId},e.root.id,e.runId,c.payload,c.authority)?c.payload:void 0;return e.runHandsRelay({...e.claimedAtMs===void 0?{}:{claimedAtMs:e.claimedAtMs},claimOwner:e.claimOwner,...p?{claimEnvironment:p}:{},localGithubConfinement:Boolean(e.claim.local_github_authority),...e.worker?{headless:!0,runtimeDirectory:e.worker.runtimeDirectory,...e.worker.handsSlots?{handsSlots:e.worker.handsSlots}:{},...e.worker.ownComputer?{ownComputer:!0}:{},hostExecution:e.worker.executionMode==="unsandboxed",...e.worker.executionMode==="unsandboxed"&&e.worker.readiness?.["pty.start"]===!0?{managedPty:{version:1,startupVerified:!0}}:{},deviceIdentity:{deviceId:e.deviceId,rootId:e.root.id,apiOrigin:e.apiOrigin},...l?{desktopRecording:l}:{}}:{},root:de(e.root),runId:e.runId,operationId:e.operationId,attemptId:e.attemptId,payload:e.payload,signal:e.signal,emitEvent:(m,f,h)=>e.emit(m,f,h)})}async function zp(e){if(e.worker){if(!e.root.permissions.read||!e.root.permissions.write)throw new r("permission_denied","Bound Hands terminals require the workspace read/write grants.");let{workspace:l,session:c}=ji(e.payload,e.operationId);return qi({root:de(e.root),runId:e.runId,deviceId:e.deviceId,rootId:e.root.id,workspace:l,session:c,owner:e.claimOwner,authority:e.claimAuthority,signal:e.signal,emit:(p,m)=>e.emit(p,m)})}return e.runPtySession({root:de(e.root),runId:e.runId,operationId:e.operationId,payload:e.payload,signal:e.signal,emitEvent:(l,c)=>e.emit(l,c)})}function ml(e,l){let c=ge()?K():null;return c?Nt(c,{op:"transfer",direction:l,root:e.root,payload:e.payload,worker:Boolean(e.worker)},e.signal).then((p)=>p.value):Vo(l,{root:e.root,payload:e.payload,signal:e.signal,worker:Boolean(e.worker),fetchImpl:e.fetchImpl,beforeCommit:()=>e.emit("progress",{phase:"file_transfer_verified"})})}async function Vo(e,l){let c=de(l.root),p=Yt in l.payload;if(p&&!l.worker)throw new r("cloud_copy_workspace_invalid","Only a worker resolves a Cloud copy workspace.");let m=p?Gs(c,l.payload[Yt]):c;if("source"in l.payload||"source_version"in l.payload){if(e!=="export"||!p)throw new r("cloud_copy_source_unsupported","Explicit sources require the private Cloud exporter.");let y=Ds.safeParse(l.payload);if(!y.success)throw new r("invalid_payload","Invalid Cloud export request.");return Vs({runtimeRoot:m,source:y.data.source,url:y.data.url,signal:l.signal,fetchImpl:l.fetchImpl})}let f=tn(l.payload,"path",4096),h=e==="import"&&p?Kn(m):m;return At(ki(h,f)),yt({direction:e,root:h,path:f,payload:l.payload,signal:l.signal,fetchImpl:l.fetchImpl,beforeCommit:l.beforeCommit})}var Il={"inference.custom.v1":{requiredPermission:"read",additionalPermissions:["execute","discover_environment"],execute:(e)=>{if(!e.customEndpointCredential||!e.claimOwner)throw new r("custom_endpoint_credential_unavailable","Local model credentials require a signed Device claim.");return ts({payload:e.payload,signal:e.signal,credential:e.customEndpointCredential,emit:(l,c)=>e.emit(l,c,e.signal)})}},"fs.read":{requiredPermission:"read",execute:(e)=>pl("fs.read",e)},"fs.write":{requiredPermission:"write",execute:(e)=>pl("fs.write",e)},"fs.export":{requiredPermission:"read",execute:(e)=>ml(e,"export")},"fs.import":{requiredPermission:"write",execute:(e)=>ml(e,"import")},"preview.serve.v1":{requiredPermission:"execute",additionalPermissions:["discover_environment"],available:()=>X()==="darwin"&&Jn(),execute:Fp},"exec.run":{requiredPermission:"execute",available:Pi,execute:Bp},"exec.full":{requiredPermission:"execute",additionalPermissions:["discover_environment"],available:()=>Jn(),execute:Up},"git.run":{requiredPermission:"execute",available:()=>Pi()&&Cp("git"),execute:Hp},"process.list":{requiredPermission:"read",additionalPermissions:["discover_environment"],available:ul,execute:jp},"ports.list":{requiredPermission:"read",additionalPermissions:["discover_environment"],available:ul,execute:qp},"hands.connect":{requiredPermission:"execute",additionalPermissions:["read","write","discover_environment"],available:()=>X()==="darwin"||Boolean(hn()),execute:Wp},"pty.start":{requiredPermission:"execute",additionalPermissions:["discover_environment"],available:On,execute:zp},"display.stream.v1":{requiredPermission:"execute",additionalPermissions:["discover_environment"],available:Lt,execute:(e)=>{let l=K();return l?Nt(l,{op:"display",payload:e.payload,proxy:(e.relay.loadProxy??j)()},e.signal):Mt({payload:e.payload,signal:e.signal},e.relay)}},"automation.call.v1":{requiredPermission:"execute",additionalPermissions:["read","discover_environment"],available:()=>xn(),execute:(e)=>kn({runId:e.runId,payload:e.payload,signal:e.signal,...e.worker?.userChrome?{userChrome:e.worker.userChrome}:{}})},"simulator.call.v1":{requiredPermission:"execute",additionalPermissions:["read","discover_environment"],available:ir,execute:(e)=>sr({payload:e.payload,root:de(e.root)})},"simulator.stream.v1":{requiredPermission:"execute",additionalPermissions:["read","discover_environment"],available:il,execute:(e)=>al({payload:e.payload,root:de(e.root),signal:e.signal},e.relay)},"jobs.control":{requiredPermission:"execute",additionalPermissions:["read","write","discover_environment"],available:()=>!0,execute:(e)=>Wi({root:de(e.root),runId:e.runId,payload:e.payload,signal:e.signal})},"github.local.v1":{requiredPermission:"read",additionalPermissions:["execute","discover_environment"],available:()=>X()==="darwin"?Ye("/usr/bin/sandbox-exec"):X()==="linux"||X()==="win32",execute:async(e)=>{let l=Pe.parse(e.payload),c=oe.parse(e.claim.local_github_authority);if(c.userId!==e.claimOwner?.user_id||c.deviceId!==e.deviceId||c.rootId!==e.root.id||c.runId!==e.runId||c.repoFullName!==l.repoFullName||!c.readOnly&&!e.root.permissions.write||!Qe(l)&&(c.readOnly||c.generation===null&&!(l.kind==="pr_merge"&&c.merge?.source==="human")&&!(l.kind==="pr_mutation"&&c.contributorRefresh)))throw Error("local_device_gh_authority_changed");return Vi({root:de(e.root),runId:e.runId,request:l,authority:c,signal:e.signal,leaseUntil:e.claim.lease_until},(p)=>fs(l,p))}},"environment.install":{requiredPermission:"execute",additionalPermissions:["read","write","discover_environment"],execute:async(e)=>nt({root:de(e.root),runId:e.runId,payload:e.payload})},"browser.pr-proof.v1":{requiredPermission:"read",additionalPermissions:["execute"],available:()=>!1,execute:async(e)=>{if(!e.proveMac)throw new r("capability_unsupported","PR proof host is not installed.");return e.proveMac()}},"tunnel.open":{requiredPermission:"execute",additionalPermissions:["read","write","discover_environment"],execute:(e)=>Hi({root:de(e.root),runId:e.runId,owner:e.claimOwner,payload:e.payload,signal:e.signal})},"tunnel.close":{requiredPermission:"execute",additionalPermissions:["read","write","discover_environment"],execute:(e)=>zi({root:de(e.root),runId:e.runId,owner:e.claimOwner,payload:e.payload,signal:e.signal})},"workspace.setup.v1":{requiredPermission:"execute",additionalPermissions:["read","write"],available:Gn,execute:(e)=>Ws(e.payload,e.signal)}};function Gp(e,l){try{let c=ns(e,Ve(l)),p=c?e.find((m)=>m.path===c):void 0;return p&&/^[a-f0-9]{64}$/.test(p.pathFingerprint)?p.pathFingerprint:void 0}catch{return}}function Vp(e,l){try{let c=Ve(l);return e.some((p)=>p.path===c)?Cr(c,X()):void 0}catch{return}}function Kp(e,l){try{let c=Ve(l),p=e.find((m)=>m.path===c);return p&&/^[a-f0-9]{64}$/.test(p.pathFingerprint)?p.pathFingerprint:void 0}catch{return}}function Yp(e,l){try{let c=Ve(l);if(!e.some((p)=>p.path===c))return;return e.filter((p)=>p.path!==c&&mt(c,p.path)&&/^[a-f0-9]{64}$/.test(p.pathFingerprint)).map((p)=>p.pathFingerprint)}catch{return}}function Go(e,l,c=X()){try{return sn({home:Cr(Ve(l),c),roots:e.map((p)=>({path_fingerprint:p.pathFingerprint,path:Cr(p.path,c)})).filter((p)=>/^[a-f0-9]{64}$/.test(p.path_fingerprint)&&Er(p.path)).slice(0,on)})}catch{return}}function vs(e,l={}){let c=l.worker?l.worker.handsSlots??1:l.handsSlots===1?1:void 0,p=Boolean(l.worker)||X()==="darwin",m=p?Kp(e,ur()):void 0,f=!l.worker&&X()==="darwin"?Gp(e,ur()):void 0,h=p?Vp(e,ur()):void 0,y=!l.worker&&X()==="darwin"?Yp(e,ur()):void 0,S=p?Go(e,ur()):void 0,w=Ks.filter((g)=>{if(Qt.has(g)&&!l.worker)return!1;if(l.worker&&!Ur(g,l.worker))return!1;let v=Il[g];if(!v)return!1;return(g==="hands.connect"&&(l.terminalOnlyHands===!0||Boolean(l.worker))||(g==="pty.start"||g==="preview.serve.v1")&&Boolean(l.worker)||g==="browser.pr-proof.v1"&&Boolean(l.productionProof)?!0:v.available?.()??!0)&&e.some((I)=>(!l.worker||g!=="pty.start"||I.permissions.read&&I.permissions.write)&&vl(v).every((A)=>I.permissions[A]))});return{supported_operations:w,...m?{account_root_fingerprint:m}:{},...f?{workspace_root_fingerprint:f}:{},...h?{account_root_path:h}:{},...y?{home_contained_root_fingerprints:y}:{},...S?{root_paths:S}:{},...w.includes("hands.connect")?{hands_worker_artifact_sha256:b,hands_worker_entrypoint:R,...c?{hands_slots:c}:{}}:{},max_payload_bytes:Te,max_result_bytes:Te,operation_constraints:{...w.includes("browser.pr-proof.v1")&&l.productionProof?{"browser.pr-proof.v1":Pn.parse(l.productionProof)}:{},...w.includes("exec.run")?{"exec.run":{transport:"shell",shell:Li(),sandbox:X()==="linux"?"linux_sandbox_runtime":X()==="win32"?"windows_srt":"macos_seatbelt",network:!1,max_timeout_ms:Ii}}:{},...w.includes("exec.full")?{"exec.full":Qs()}:{},"git.run":{read_only_subcommands:[...Sl].sort(),mutating_subcommands:[...Ci].sort(),push:!1,credential_helpers:!1},"fs.export":{transport:"https_signed_url",max_bytes:Je,max_timeout_ms:Vt,result:"sha256_and_size"},"fs.import":{transport:"https_signed_url",max_bytes:Je,max_timeout_ms:Vt,atomic:!0,overwrite:!1},"hands.connect":{transport:"wss_relay",worker:"ara_hands",worker_version:D,protocol_version:P,worker_artifact_sha256:b,worker_entrypoint:R,policy_mode:"full_access",policy_version:1,workspace_base:ue,workspace_layout:Z,...c?{slots:c}:{},browser_state:l.worker?"optional_headless":l.terminalOnlyHands===!0?"disabled_terminal_only":X()==="darwin"?"optional_isolated_per_session":"isolated_per_session",max_session_ms:43200000},...w.includes("pty.start")?{"pty.start":{transport:"wss_relay",shell:"login_shell",resize:!0,slots:Tr,max_session_ms:Pr,max_buffered_output_bytes:Bt}}:{},...l.worker?Object.fromEntries(w.filter((g)=>g!=="browser.pr-proof.v1").map((g)=>[g,{ready:l.worker?.readiness?.[g]===!0,...l.worker?.readiness?.[g]!==!0&&l.worker?.probing?.includes(g)?{probing:!0}:{},execution_mode:Ur(g,{...l.worker,executionMode:"sandboxed"})?"confined":"host",...g==="pty.start"?{transport:"wss_relay",worker:"ara_hands",shell:"bound_job",protocol_version:zt,environment:"private_snapshot",receipt:"metadata_only",...l.worker?.persistentTerminals&&!ge()?{persistent_terminals:!0}:{}}:{},...g==="github.local.v1"?{contributor_attribution:2,prepare_diagnostics:1,...l.worker?.githubSignedIn!==void 0?{gh_authenticated:l.worker.githubSignedIn}:{}}:{},...g==="hands.connect"?{transport:"wss_relay",worker:"ara_hands",slots:c,session_group:yi,...l.worker?.ownComputer?{[wi]:bi}:{},workspace_base:ue,workspace_layout:Z,browser_state:"optional_headless",desktop:!1,worker_version:D,protocol_version:P,...l.worker?.readiness?.["environment.install"]===!0&&w.includes("environment.install")?{environment_delivery:Qn,[ii]:ni}:{},...l.worker?{[ci]:ai}:{},...l.worker?{[si]:oi}:{},...l.worker?.handsBrowser?{[hi]:pi}:{},[di]:ui,[mi]:fi,...me(l.worker?.executionMode==="unsandboxed")?{[Y]:pe}:{},...me(l.worker?.executionMode==="unsandboxed")&&Pt()!==null?{[q]:Re}:{},...me(l.worker?.executionMode==="unsandboxed")&&ge()?{[_i]:gi}:{}}:{},...g==="fs.export"?{cloud_source_version:Nr,source_kinds:["workspace","attachment"],[Nn]:Mn}:{},...g==="fs.import"?{[Nn]:Mn}:{},...g===Mi&&Pt()!==null&&me(l.worker?.executionMode==="unsandboxed")?{[Bi]:ln}:{},...g==="tunnel.open"?{carried_jobs:vi}:{},...g==="jobs.control"?{[Ei]:Si}:{},...g==="display.stream.v1"&&l.worker?.displayVideo?{[wo]:yo,[bo]:ht.join(","),[vo]:So,[Eo]:xo}:{},...g==="automation.call.v1"&&l.worker?.userChrome?{[bt]:!0}:{},...g==="automation.call.v1"&&l.worker?.cloudSessions?{[xi]:!0}:{}}])):{}}}}function Ti(e,l,c,p,m){let f=pr.safeParse(p);return f.success&&m!==void 0&&m.device_id===e.deviceId&&f.data.device_id===e.deviceId&&f.data.root_id===l&&f.data.run_id===c&&f.data.binding.kind===m.binding&&f.data.binding.target_revision===m.target_revision&&f.data.binding.root_grant_revision===m.root_grant_revision&&f.data.binding.target_generation===m.target_generation&&f.data.binding.target_fence_id===m.target_fence_id}async function Ss(e,l,c,p,m){if(l.capability!=="hands.connect"||c.kind!==wt||!p.operationEnvironment||!p.acknowledgeOperationEnvironment)return!1;let f=c.payload.snapshot_id;if(c.payload.version!==1||typeof f!=="string"||Object.keys(c.payload).length!==2)throw new r("environment_unavailable","Reason sent an invalid environment delivery.");let h=e.roots.find((w)=>w.id===l.root_id);if(!h)throw new r("root_not_granted","The Hands root is no longer granted.");let y=await p.operationEnvironment(e,l,f,m);if(!Ti(e,h.id,l.run_id,y.payload,y.authority)||y.payload.snapshot_id!==f)throw new r("environment_unavailable","The delivered environment does not match this Hands.");let S=nt({root:de(h),operationId:l.operation_id,payload:y.payload});return await p.acknowledgeOperationEnvironment(e,l,{snapshot_id:S.snapshot_id,installed_revision:S.installed_revision,installed:!0},m),!0}async function Es(e,l,c,p){if(l.capability!=="hands.connect"||c.kind!==li)return!1;let{version:m,run_id:f,target_generation:h,target_fence_id:y}=c.payload;if(m!==1||Object.keys(c.payload).length!==4||typeof f!=="string"||typeof h!=="number"||typeof y!=="string")throw new r("hands_rebind_unavailable","Reason sent an invalid Hands rebind.");let S=e.roots.find((w)=>w.id===l.root_id);if(!S)throw new r("root_not_granted","The Hands root is no longer granted.");return await Ui({operationId:l.operation_id,root:de(S),runId:f,targetGeneration:h,fenceId:y,...p?{signal:p}:{}}),!0}async function xs(e,l,c){if(l.capability!=="github.local.v1")return fl(e,l,c);try{let p=await fl(e,l,c);if(p.status==="succeeded"||Xn(l.payload,p.status,p.error_code))return p;return{status:p.status,error_code:p.status==="cancelled"?"operation_cancelled":"local_github_unavailable"}}catch{return{status:c.signal.aborted?"cancelled":"failed",error_code:c.signal.aborted?"operation_cancelled":"local_github_unavailable"}}}async function fl(e,l,c){if(Qt.has(l.capability)&&!c.worker)return{status:"failed",error_code:"capability_not_granted"};if(c.worker&&!Ur(l.capability,c.worker))return{status:"failed",error_code:"capability_not_granted"};if(c.worker&&c.worker.readiness?.[l.capability]!==!0)return{status:"failed",error_code:"capability_unavailable"};if(l.local_github_authority){let g=oe.safeParse(l.local_github_authority);if(!g.success||g.data.deviceId!==e.deviceId||g.data.rootId!==l.root_id||g.data.runId!==l.run_id||g.data.userId!==l.owner?.user_id||!["github.local.v1","hands.connect","environment.install","jobs.control","preview.serve.v1"].includes(l.capability))return{status:"failed",error_code:"local_device_gh_capability_denied"}}let p=Il[l.capability];if(!p)return{status:"failed",error_code:"capability_unsupported"};if(p.available&&!p.available()&&!(["hands.connect","pty.start","preview.serve.v1"].includes(l.capability)&&c.worker)&&!c.runCommand&&!c.runHandsRelay&&!c.spawnFullControl&&!c.runPtySession&&!(l.capability==="browser.pr-proof.v1"&&c.proveMac))return{status:"failed",error_code:"capability_unavailable"};if(l.protocol_version!==2)return{status:"failed",error_code:"protocol_unsupported"};let m=e.roots.find((g)=>g.id===l.root_id);if(!m)return{status:"failed",error_code:"root_not_granted"};if((l.capability==="fs.export"||l.capability==="fs.import")&&Oi(l.payload)&&(("source"in l.payload)||("source_version"in l.payload))){let g=Boolean(c.worker||e.worker)&&Yt in l.payload;if(l.capability!=="fs.export"||!g)return{status:"failed",error_code:"cloud_copy_source_unsupported"}}if(l.owner&&(l.owner.device_id!==e.deviceId||l.owner.organization_id!==e.orgId))return{status:"failed",error_code:"capability_not_granted"};if((l.capability==="tunnel.open"||l.capability==="tunnel.close")&&!l.owner)return{status:"failed",error_code:"preview_unavailable"};if(l.capability==="environment.install"&&!Ti(e,m.id,l.run_id,l.payload,l.authority))return{status:"failed",error_code:"environment_unavailable"};if(vl(p).some((g)=>!m.permissions[g]))return{status:"failed",error_code:"permission_denied"};let f=0,h=async(g,v,C)=>{if(["environment.install","github.local.v1"].includes(l.capability)||l.capability==="inference.custom.v1"&&(g==="started"||g==="completed"))return;await c.emit?.({sequence:f++,kind:g,capability:l.capability,data:v,...(g==="hands.reconnected"||l.capability==="inference.custom.v1")&&C?{deliverySignal:C}:{}})},y=l.capability==="hands.connect"||l.capability==="display.stream.v1"||l.capability==="simulator.stream.v1"||zo.has(l.capability)||l.capability==="pty.start",S,w=async(g,v,C)=>{let I=S;S=void 0,await Promise.all([I,h(g,v,C)])};try{if(y)S=h("started"),S.catch(()=>{return});else await h("started");let g={...c.proxy===void 0?{}:{loadProxy:()=>c.proxy??null},...c.handsLaunch?.takePrespawnedWorker?{takePrespawnedWorker:c.handsLaunch.takePrespawnedWorker}:{},...c.handsLaunch?.adoptSpawnedWorker?{adoptSpawnedWorker:c.handsLaunch.adoptSpawnedWorker}:{}},v=await p.execute({...c.proveMac?{proveMac:()=>c.proveMac(l,c.signal,(C)=>h("pr-proof.started.v1",C))}:{},claim:l,worker:c.worker,claimOwner:l.owner,claimAuthority:l.authority,organizationId:e.orgId,deviceId:e.deviceId,apiOrigin:e.apiOrigin,root:m,payload:Pp(l.payload),runId:l.run_id,operationId:l.operation_id,attemptId:l.attempt_id,...c.handsLaunch?{claimedAtMs:c.handsLaunch.claimedAtMs}:{},signal:c.signal,...c.customEndpointCredential?{customEndpointCredential:c.customEndpointCredential}:{},fetchImpl:c.fetchImpl??fetch,relay:g,runCommand:c.runCommand??qo,spawnFullControl:c.spawnFullControl??cn,emit:y?w:h,runHandsRelay:c.runHandsRelay??((C)=>Tt(C,g)),runPtySession:c.runPtySession??In});if(l.capability==="github.local.v1")Io.parse(v);if(!Oi(v))throw new r("invalid_result","Operation result must be a JSON object.");if(Buffer.byteLength(JSON.stringify(v)??"null","utf8")>Te)throw new r("result_too_large","Operation result exceeds 256 KB.");return await(y?w:h)("completed",{ok:!0}),{status:"succeeded",result:v,error_code:null}}catch(g){let v=c.signal.reason instanceof r&&ll.has(c.signal.reason.code)?c.signal.reason.code:g instanceof r&&ll.has(g.code)?g.code:null;if(c.signal.aborted||v)return{status:"cancelled",...g instanceof rt?{result:{process_terminal_observation:g.observation}}:{},error_code:["environment.install","github.local.v1","inference.custom.v1"].includes(l.capability)?"operation_cancelled":v??"cancelled"};if(["fs.read","fs.write"].includes(l.capability)&&g instanceof Error&&"code"in g&&["EACCES","EPERM"].includes(String(g.code)))await h("permission.denied",{operation:l.capability==="fs.read"?"read":"write",provenance:"os_permission_unknown"});let C=l.capability==="inference.custom.v1"?g instanceof r&&En(g.code)?g.code:"custom_endpoint_unavailable":l.capability==="github.local.v1"?g instanceof rr&&Xn(l.payload,"failed",g.code)?g.code:"local_github_unavailable":l.capability==="environment.install"?"environment_install_failed":g instanceof r&&xp.test(g.code)?g.code:"capability_failed",I=l.capability==="hands.connect"&&g instanceof _r?Gi(g.expiryDiagnostic):null;return await h("completed",{ok:!1,error_code:C,...I?{expiry_diagnostic:I}:{}}),{status:"failed",error_code:C}}}
539
- export{an,zo,Li,cn,qo,Wo,Vo,Go,vs,Ss,Es,xs};
535
+ }`;async function To(e,l,c){let p=await xe("sips",["-g","pixelWidth","-g","pixelHeight",e],"Reading the frame size"),m=Number(p.match(/pixelWidth: ([\d.]+)/)?.[1]),f=Number(p.match(/pixelHeight: ([\d.]+)/)?.[1]);if(c!==void 0)m=m*c/f,f=c;let h=Wo(J(ja(),"reason-chrome-"));try{let y=J(h,"render.js"),S=J(h,"out.png");if(fd(y,Kd),await xe("osascript",["-l","JavaScript",y,e,S,String(Math.max(1,Math.round(m*l))),String(Math.max(1,Math.round(f*l)))],"Rendering the frame"),!je(S))te("simulator_command_failed",`Rendering ${qa(e)} produced no image.`);return{image:zo(S).toString("base64"),width:m,height:f}}finally{nr(h,{recursive:!0,force:!0})}}async function Yd(e){if(!Ho.has(e.udid))await Qo();let l=Ho.get(e.udid),p=JSON.parse(await xe("xcrun",["simctl","list","devicetypes","-j"],"Listing device types")).devicetypes?.find((m)=>m.identifier===l)?.bundlePath;if(!p)te("simulator_command_failed",`No device type bundle for ${e.name}.`);return p}async function Xd(e){let l=await Yd(e),c=Xr.get(e.udid)??(e.state==="booted"?(await ri(e),Xr.get(e.udid)):void 0);if(!c)te("simulator_not_booted",`${e.name} is not booted.`);let p=Ha.get(l);if(p)return{text:`Frame of ${ce(e)}.`,device:e,chrome:p};let m=J(l,"Contents","Resources"),f=JSON.parse(await xe("plutil",["-convert","json","-o","-",J(m,"profile.plist")],"Reading the device profile")),h=f.framebufferMask?J(m,`${f.framebufferMask}.pdf`):null,y=h&&je(h)?await To(h,Ao,c.height):null,S=f.chromeIdentifier?.split(".").pop(),w=S?J("/Library/Developer/DeviceKit/Chrome",`${S}.devicechrome`,"Contents","Resources"):"";if(!S||!je(J(w,"chrome.json")))te("simulator_command_failed",`${e.name} has no device frame in this Xcode.`);let _=JSON.parse(zo(J(w,"chrome.json"),"utf8")),v={};for(let B of Vd){let F=_.images[B];if(!F)te("simulator_command_failed",`${e.name}'s frame has no ${B} piece.`);v[B]=await To(J(w,`${F}.pdf`),Ao)}let{sizing:C}=_.images,I={top:C.topHeight,left:C.leftWidth,bottom:C.bottomHeight,right:C.rightWidth},A=c.width+I.left+I.right,M=c.height+I.top+I.bottom,N=[];for(let B of _.inputs??[]){let F=J(w,`${B.image}.pdf`);if(!je(F))continue;let H=await To(F,Ao),{x:ne,y:_e}=B.offsets.normal,Ee=(ot,he,vr)=>ot<0?he+ot-vr:ot,Ze=B.anchor==="left"?{x:ne-H.width,y:Ee(_e,M,H.height)}:B.anchor==="right"?{x:A+ne,y:Ee(_e,M,H.height)}:B.anchor==="top"?{x:Ee(ne,A,H.width),y:_e-H.height}:{x:Ee(ne,A,H.width),y:M+_e};N.push({name:B.name,image:H.image,...Ze,width:H.width,height:H.height})}let L={identifier:_.identifier,screen:{width:c.width,height:c.height},inset:I,padding:_.images.devicePadding??{top:0,left:0,bottom:0,right:0},pieces:v,buttons:N,...y?{screen_mask:y.image}:{}};return Ha.set(l,L),{text:`Frame of ${ce(e)}.`,device:e,chrome:L}}var Jd=new Set(["simulator_command_failed","simulator_launch_failed","simulator_point_off_screen","simulator_build_no_scheme","simulator_element_not_found","simulator_path_outside_root","simulator_project_not_found"]);async function sr(e){try{return await el(e)}catch(l){if(l instanceof r&&Jd.has(l.code))return{text:l.message,error:l.code};throw l}}async function el(e){if(!or())te("simulator_xcode_missing","Xcode's iOS Simulator is not available on this Mac.");let l=xo.safeParse(e.payload);if(!l.success)te("simulator_invalid_request",l.error.issues.map((p)=>p.message).join("; "));let c=l.data;switch(c.action){case"devices":{let p=await Qo(),m=p.filter((f)=>f.state==="booted");return{text:`${m.length} booted (${m.map(ce).join(", ")||"none"}), ${p.length} available.`,devices:p}}case"boot":{let p=await Ed(await Ae(c.device,{booted:!1}));return{text:`${ce(p)} is booted.`,device:p}}case"shutdown":{let p=await Ae(c.device,{booted:!1});rt.get(p.udid)?.stop(),rt.delete(p.udid);let m=await It("xcrun",["simctl","shutdown",p.udid]);if(m.code!==0&&!/current state: Shutdown/i.test(m.stderr))te("simulator_command_failed",m.stderr.trim().slice(-1000));return{text:`${ce(p)} is shut down.`,device:{...p,state:"shutdown"}}}case"build":{let p=await Ma(c,e.root);return c.wait&&p.build?ko(p.build.id):p}case"build_status":return c.wait?ko(c.build_id):Xa(c.build_id);case"run":{let p=await Ma({...c,action:"build"},e.root),m=await ko(p.build.id,Td);if(m.build?.status!=="succeeded"||!m.build.app_path)return m;let f=await el({root:e.root,payload:{action:"launch",app_path:m.build.app_path,...c.device?{device:c.device}:{},...c.steps?{steps:c.steps}:{},...c.observe?{observe:c.observe}:{},...c.wait_for?{wait_for:c.wait_for}:{},...c.timeout!==void 0?{timeout:c.timeout}:{}}});return{...f,text:`Built in ${Math.round(m.build.elapsed_ms/1000)} s. ${f.text}`,build:m.build}}case"launch":{let p=await Nd(c,e.root);if(!p.device)return p;if(c.steps?.length)p.text+=` ${await Ct(p.device,c.steps,c.timeout??8)}`;else if(!c.wait_for)await Bun.sleep(1000);return mt(p.device,c,p)}case"steps":{let p=await Ae(c.device,{booted:!0});return mt(p,c,{text:await Ct(p,c.steps,c.timeout??5),device:p})}case"terminate":{let p=await Ae(c.device,{booted:!0});if(rt.get(p.udid)?.bundleId===c.bundle_id)rt.get(p.udid)?.stop();return await It("xcrun",["simctl","terminate",p.udid,c.bundle_id]),{text:`Terminated ${c.bundle_id} on ${ce(p)}.`,device:p}}case"logs":return $d(await Ae(c.device,{booted:!1}),c.after);case"screenshot":return ri(await Ae(c.device,{booted:!0}),c.scale,c.save_path?ei(e.root,c.save_path):void 0);case"chrome":return Xd(await Ae(c.device,{booted:!1}));case"inspect":return Fd(await Ae(c.device,{booted:!0}));case"tap":{let p=await Ae(c.device,{booted:!0}),m=c.x!==void 0&&c.y!==void 0;if(m)$a(p,[c.x,c.y]);await Ct(p,[m?{action:"tap",x:c.x,y:c.y,...c.duration&&c.duration>0?{duration:c.duration}:{}}:c.id?{action:"tap",id:c.id}:{action:"tap",label:c.label}],3);let f=m?`(${c.x}, ${c.y})`:c.id?`id ${c.id}`:`"${c.label}"`;return mt(p,c,{text:`Tapped ${f} on ${ce(p)}.`,device:p})}case"swipe":{let p=await Ae(c.device,{booted:!0});return $a(p,[c.x,c.y],[c.x2,c.y2]),await Ct(p,[{action:"swipe",x:c.x,y:c.y,x2:c.x2,y2:c.y2,...c.duration!==void 0?{duration:c.duration}:{}}],3),mt(p,c,{text:`Swiped (${c.x}, ${c.y}) \u2192 (${c.x2}, ${c.y2}) on ${ce(p)}.`,device:p})}case"type":{let p=await Ae(c.device,{booted:!0});return await Ct(p,[{action:"type",text:c.text}],3),mt(p,c,{text:`Typed ${c.text.length} character(s) on ${ce(p)}.`,device:p})}case"button":{let p=await Ae(c.device,{booted:!0});return await Ct(p,[{action:"button",name:c.name}],3),mt(p,c,{text:`Pressed ${c.name} on ${ce(p)}.`,device:p})}case"open_url":{let p=await Ae(c.device,{booted:!0}),m;try{m=new URL(c.url)}catch{te("simulator_invalid_request","open_url needs an absolute URL.")}if(vd.has(m.protocol))te("simulator_invalid_request",`${m.protocol} URLs are not allowed.`);return await xe("xcrun",["simctl","openurl",p.udid,m.href],"Opening the URL"),mt(p,c,{text:`Opened ${m.href} on ${ce(p)}.`,device:p})}case"appearance":{let p=await Ae(c.device,{booted:!0});return await xe("xcrun",["simctl","ui",p.udid,"appearance",c.mode],"Setting the appearance"),{text:`${ce(p)} is in ${c.mode} mode.`,device:p}}}}import{mkdtempSync as Zd,readFileSync as Qd,rmSync as ep}from"fs";import{tmpdir as tp}from"os";import{join as tl}from"path";import{spawn as ol}from"child_process";var rp=/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i,ar=1,np=[{bit:8,dx:0,dy:1},{bit:16,dx:0,dy:-1},{bit:32,dx:1,dy:0},{bit:64,dx:-1,dy:0}],rl=60,op=8,il=or;var nl={65293:40,65421:40,65307:41,65288:42,65289:43,65535:76,65360:74,65367:77,65365:75,65366:78,65361:80,65362:82,65363:79,65364:81,65505:225,65506:229,65507:224,65508:228,65513:226,65514:230,65515:227,65516:231,65511:227,65512:231,65509:57},ip=(()=>{let e={" ":44};"abcdefghijklmnopqrstuvwxyz".split("").forEach((c,p)=>{e[c]=4+p,e[c.toUpperCase()]=4+p}),"1234567890".split("").forEach((c,p)=>{e[c]=30+p}),"!@#$%^&*()".split("").forEach((c,p)=>{e[c]=30+p});let l=[["-","_",45],["=","+",46],["[","{",47],["]","}",48],["\\","|",49],[";",":",51],["'",'"',52],["`","~",53],[",","<",54],[".",">",55],["/","?",56]];for(let[c,p,m]of l)e[c]=m,e[p]=m;return e})();function sp(e){if(nl[e]!==void 0)return nl[e];return e>=32&&e<=126?ip[String.fromCharCode(e)]??null:null}function sl(e,l){let c=ol("xcrun",["simctl","pbcopy",e],{stdio:["pipe","ignore","ignore"]});c.once("error",()=>{}),c.stdin.end(l)}function ap(e,l){let c=0,p={x:0,y:0},m=(f)=>{l.call(f).catch(()=>{})};return{pointer(f,h,y){let S=(y&ar)!==0;if(S&&!(c&ar))m({op:"touch",phase:"down",x:f,y:h});else if(S&&(f!==p.x||h!==p.y))m({op:"touch",phase:"move",x:f,y:h});else if(!S&&c&ar)m({op:"touch",phase:"up",x:f,y:h});for(let w of np)if(y&w.bit&&!(c&w.bit))m({op:"swipe",x:f,y:h,x2:f+w.dx*rl,y2:h+w.dy*rl,duration:0.08});c=y,p={x:f,y:h}},key(f,h){let y=sp(h);if(y!==null)m({op:"key",usage:y,down:f})},clipboard(f){sl(e,f)},close(){if(c&ar)m({op:"touch",phase:"up",...p});c=0}}}function lp(e,l){let c=null,p="",m,f=(h)=>{sr({payload:{...h,device:e,observe:"none"},root:l}).catch(()=>{})};return{pointer(h,y,S){let w=(S&ar)!==0;if(w&&!c)c={x:h,y,at:Date.now()};if(!w&&c){let _=(Date.now()-c.at)/1000;if(Math.hypot(h-c.x,y-c.y)>op)f({action:"swipe",x:c.x,y:c.y,x2:h,y2:y,duration:Math.min(Math.max(_,0.05),1)});else f({action:"tap",x:c.x,y:c.y,..._>0.5?{duration:Math.min(_,10)}:{}});c=null}},key(h,y){if(!h)return;let S=y===65293?`
536
+ `:y>=32&&y<=126?String.fromCharCode(y):null;if(S===null)return;p+=S,clearTimeout(m),m=setTimeout(()=>{let w=p;p="",f({action:"type",text:w})},250)},clipboard(h){sl(e,h)},close(){clearTimeout(m),c=null}}}function cp(e,l,c){return new Promise((p,m)=>{let f=ol(e,l,{stdio:"ignore",signal:c});f.once("error",m),f.once("exit",(h)=>p(h??-1))})}async function up(e,l){let c=Zd(tl(tp(),"reason-simulator-stream-"));try{let p=tl(c,"screen.png");if(await cp("xcrun",["simctl","io",e,"screenshot","--type=png",p],l)!==0)throw new r("simulator_not_booted","That simulator is not booted.");let m=Qd(p).subarray(16,24);return{width:m.readUInt32BE(0),height:m.readUInt32BE(4)}}finally{ep(c,{recursive:!0,force:!0})}}async function al(e,l={}){let{udid:c,...p}=e.payload;if(typeof c!=="string"||!rp.test(c)||!p.video)throw new r("invalid_display_request","Reason simulator stream request is malformed.");let m=await Ga().catch(()=>{throw new r("simulator_axe_missing","AXe could not be installed on this Mac.")}),f=await sr({payload:{action:"screenshot",device:c},root:e.root});if(f.error||!f.image)throw new r("simulator_not_booted","That simulator is not booted.");let h={width:f.image.width,height:f.image.height},y=await Io(m),S=y?await Vr(m,c,!0):null,w=y?null:await Nn();if(!y&&!w)throw new r("display_video_unsupported","This Mac can build neither the simulator host nor find an H.264 ffmpeg.");let _={kind:"simulator",udid:c,axe:m,points:h,sound:null,size:y?h:await up(c,e.signal),stream:y?(v,C,I)=>Da(y,c,Math.min(v,60),I,C):null,input:S?ap(c,S):lp(c,e.root)};return await Bt({payload:p,signal:e.signal},{...l,video:{desktop:async()=>_,...w?{ffmpeg:()=>w}:{}}})}var bl=131072,vp=131072,Rp=128,wl=8192,Li=30000,Ti=15000,xp=/^[a-z][a-z0-9_]{0,63}$/,Go=new Set(["jobs.control","fs.read","fs.write"]),ll=new Set(["cancelled","run_finished","run_cancelled","driver_handoff","driver_stopped"]);function Qr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/[a-z]/gi,(l)=>`[${l.toLowerCase()}${l.toUpperCase()}]`)}function cl(e){return e.map(Qr).join("/")}function oi(e,l){let c=[];for(let p=0;p<e.length;p+=l)c.push(e.slice(p,p+l));return c}var Ep=[...oi(ve,4).map((e)=>`/(${e.map(cl).join("|")})(/|$)`),...oi(jt,4).map((e)=>`/(${e.map(cl).join("|")})$`),...oi([...Ut],6).map((e)=>`/(${e.map(Qr).join("|")})$`),`/${Qr(".env")}\\.[^/]+$`,`/[^/]+(${Ht.map(Qr).join("|")})$`],Ri=new Set(["add","am","apply","branch","checkout","cherry-pick","clean","commit","merge","mv","rebase","remote","reset","restore","revert","rm","stash","switch","tag"]),Sl=new Set(["blame","diff","for-each-ref","grep","log","ls-files","rev-list","rev-parse","shortlog","show","status"]);function vl(e){return[e.requiredPermission,...e.additionalPermissions??[]]}function Cp(e){return Nt(e)}function Oi(){if(X()==="darwin")return Ye("/usr/bin/sandbox-exec");if(X()==="linux"||X()==="win32")return ur();return!1}function ul(){if(X()==="linux")return Ye("/proc");if(X()==="win32")return ye()!==null;if(!Oi())return!1;if(X()==="darwin")return Ye("/usr/sbin/lsof");return!1}function Fi(){return X()==="darwin"?"/bin/zsh":hn()}function Ii(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function Pp(e){if(!Ii(e))throw new r("invalid_payload","Operation payload must be an object.");if(Buffer.byteLength(JSON.stringify(e),"utf8")>Te)throw new r("payload_too_large","Operation payload exceeds 256 KB.");return e}function Tt(e,l){let c=e[l];if(c===void 0||c===null)return;if(typeof c!=="string")throw new r("invalid_payload",`${l} must be a string.`);return c}function en(e,l,c=wl){let p=Tt(e,l);if(!p||Buffer.byteLength(p,"utf8")>c||p.includes("\x00"))throw new r("invalid_payload",`${l} is missing or too large.`);return p}function Op(e,l,c){let p=e[l];if(typeof p!=="string"||p.includes("\x00")||Buffer.byteLength(p,"utf8")>c)throw new r("invalid_payload",`${l} is missing or too large.`);return p}function fr(e,l,c,p){if(e===void 0||e===null)return l;if(typeof e!=="number"||!Number.isInteger(e))throw new r("invalid_payload","Expected a bounded integer.");return Math.min(Math.max(e,c),p)}function ft(e,l){if(X()==="win32")[e,l]=[e.toLowerCase(),l.toLowerCase()];return l===e||l.startsWith(`${e}${wp}`)}function At(e){if(po(e))throw new r("protected_path","This path is on Reason's credential denylist. The Mac's owner can allow it with `reason permissions protected allow <path>` or Request permission in Files.")}function de(e){let l;try{l=Ve(e.path)}catch(c){if(process.platform==="darwin"&&gn(c))throw _n(e.path);throw new r("root_unavailable","The granted root is unavailable.")}if(l!==e.path||!hr(l).isDirectory())throw new r("root_changed","The granted root changed after registration.");return At(l),l}function Di(e,l="."){if(!l||l.includes("\x00")||yp(l))throw new r("path_outside_root","Paths must be relative to the granted root.");if(X()==="win32"&&l.split(/[\\/]/).some(sn))throw new r("invalid_path","Windows reserves this file name.");let c=bp(e,l);if(!ft(e,c))throw new r("path_outside_root","Path escapes the granted root.");return c}function kt(e,l=".",c=!1){let p=Di(e,l),m;try{m=Ve(p)}catch(f){if(Cl(f))throw Pl();throw new r("path_not_found","Path does not exist.")}if(!ft(e,m))throw new r("symlink_escape","Path resolves outside the granted root.");if(!c)At(m);return m}function Ip(e,l){let c=Di(e,l);if(At(c),Ye(c)){let f=Ve(c);if(!ft(e,f))throw new r("symlink_escape","Write target resolves outside the granted root.");if(ii(c).isSymbolicLink())throw new r("symlink_escape","Writing through a symlink is not allowed.");return At(f),f}let p=cr(c);while(!Ye(p)){let f=cr(p);if(f===p)throw new r("path_outside_root","No safe write parent.");p=f}let m=Ve(p);if(!ft(e,m))throw new r("symlink_escape","Write parent resolves outside the granted root.");return At(m),c}function Rl(e,l){return si(e,l)||"."}function Ap(e,l=bl){let c=Buffer.from(e,"utf8");if(c.byteLength<=l)return{value:e,truncated:!1};return{value:c.subarray(0,l).toString("utf8"),truncated:!0}}function xl(e,l){return{...He({home:e,temporaryDirectory:l}),ZDOTDIR:l,BASH_ENV:"/dev/null",ENV:"/dev/null",GIT_CONFIG_NOSYSTEM:"1",GIT_CONFIG_GLOBAL:"/dev/null",GIT_TERMINAL_PROMPT:"0",GIT_OPTIONAL_LOCKS:"0"}}function Lp(e,l,c,p=!1){return["(version 1)","(deny default)",'(import "system.sb")',"(allow process*)",'(allow file-read* (subpath "/opt/homebrew") (subpath "/usr/local"))',...p?['(allow file-read* (subpath "/dev"))']:[],`(allow file-read* (subpath ${JSON.stringify(e)}))`,`(allow file-read* file-write* (subpath ${JSON.stringify(l)}))`,...c?[`(allow file-write* (subpath ${JSON.stringify(e)}))`]:[],...Ep.map((m)=>`(deny file-read* file-write* (regex #"${m}"))`),...ho(e,c),"(deny network*)"].join(`
537
+ `)}async function pn(e,l,c){return new Promise((p,m)=>{let f="",h="",y=!1,S=!1,w=!1,_;try{_=Sp(e,l,{cwd:c.cwd,env:c.env,shell:!1,stdio:["ignore","pipe","pipe"],...Ne()}),Le(_)}catch(M){m(M);return}let v=(M,N)=>{if(w)return;w=!0,clearTimeout(A),c.signal.removeEventListener("abort",I),p({exitCode:M,signal:N,stdout:f,stderr:h,timedOut:S,truncated:y})},C=(M,N)=>{let L=`${M}${String(N)}`,B=Ap(L);return y||=B.truncated,B.value};_.stdout.on("data",(M)=>{f=C(f,M)}),_.stderr.on("data",(M)=>{h=C(h,M)}),_.once("error",m),_.once("exit",v);let I=()=>{try{if(X()==="win32"&&_.pid)Me(_.pid);else _.kill("SIGTERM")}catch{}};c.signal.addEventListener("abort",I,{once:!0});let A=setTimeout(()=>{S=!0,I()},c.timeoutMs)})}var dl=null;function kp(){return dl??=Hi({scrubEnvironment:xl,spawnCaptured:pn,isProtectedPath:E}),dl}var Ko=async(e,l,c)=>{if(X()==="linux"||X()==="win32")return kp()(e,l,c);if(X()!=="darwin"||!Ye("/usr/bin/sandbox-exec"))throw new r("sandbox_unavailable","Confined command execution is unavailable on this operating system.");let p=mp(yl(_p(),"reason-device-"));try{return await pn("/usr/bin/sandbox-exec",["-p",Lp(c.root,p,c.allowWrite,c.allowProcessInspection===!0),e,...l],{cwd:c.cwd,timeoutMs:c.timeoutMs,signal:c.signal,env:xl(c.root,p)})}finally{hp(p,{recursive:!0,force:!0})}};function Tp(e){let l=e.args;if(l===void 0)return[];if(!Array.isArray(l)||l.length>Rp)throw new r("invalid_payload","args must be a bounded string array.");return l.map((c)=>{if(typeof c!=="string"||c.includes("\x00")||Buffer.byteLength(c,"utf8")>wl)throw new r("invalid_payload","Command argument is invalid or too large.");return c})}async function El(e,l,c,p={}){if(e.signal.aborted)throw new r("cancelled","Operation was cancelled.");let m=de(e.root),f=p.cwd??m,h=await e.runCommand(l,c,{cwd:f,root:m,allowWrite:p.allowWrite===!0,timeoutMs:p.timeoutMs??Ti,signal:e.signal});if(h.exitCode!==0&&/permission denied|operation not permitted|EACCES|EPERM/i.test(h.stderr))await e.emit("permission.denied",{operation:"bash",provenance:e.worker?.executionMode==="unsandboxed"?"os_permission_unknown":"sandbox_policy"});return{exit_code:h.exitCode,signal:h.signal,stdout:h.stdout,stderr:h.stderr,timed_out:h.timedOut,truncated:h.truncated}}function Cl(e){let l=e instanceof Error&&"code"in e?e.code:null;return l==="EACCES"||l==="EPERM"}var Pl=()=>new r("path_unreadable","The path is not readable.");function Dp(e){try{return _l(e,We.O_RDONLY)}catch(l){throw Cl(l)?Pl():l}}function pl(e,l){let c=ge()?K():null;return c?Mt(c,{op:"fs",capability:e,root:l.root,payload:l.payload},l.signal).then((p)=>p.value):Jo(e,l)}function Jo(e,l){return e==="fs.read"?Np(l):$p(l)}async function Np(e){let l=de(e.root),c=kt(l,en(e.payload,"path"));if(!hr(c).isFile())throw new r("not_a_file","Read target is not a file.");let p=fr(e.payload.offset,0,0,Number.MAX_SAFE_INTEGER),m=fr(e.payload.max_bytes,65536,1,bl),f=Tt(e.payload,"encoding");if(f!==void 0&&f!=="base64")throw new r("invalid_payload","encoding must be base64.");let h=Dp(c),y,S;try{y=gl(h).size;let _=Buffer.alloc(Math.max(0,Math.min(m,y-p)));S=_.subarray(0,_.byteLength?fp(h,_,0,_.byteLength,p):0)}finally{hl(h)}let w=f==="base64"||S.includes(0);return{path:Rl(l,c),content:w?S.toString("base64"):S.toString("utf8"),encoding:w?"base64":"utf8",offset:p,bytes:S.byteLength,size:y,truncated:p+S.byteLength<y}}function Mp(e,l,c=X()){let p=e==="append"?We.O_APPEND:We.O_TRUNC;if(c==="win32")return l?We.O_WRONLY|(e==="append"?We.O_APPEND:0):We.O_WRONLY|We.O_CREAT|We.O_EXCL;return We.O_WRONLY|We.O_NOFOLLOW|p|(l?0:We.O_CREAT|We.O_EXCL)}async function $p(e){let l=de(e.root),c=en(e.payload,"path"),p=Op(e.payload,"content",vp),m=Tt(e.payload,"mode")??"overwrite";if(!["create","overwrite","append"].includes(m))throw new r("invalid_payload","mode must be create, overwrite, or append.");let f=Ip(l,c);if(e.payload.create_parents===!0||e.payload.create_directories===!0){pp(cr(f),{recursive:!0,mode:448});let w=Ve(cr(f));if(!ft(l,w))throw new r("symlink_escape","Write parent escaped root.")}if(!Ye(cr(f)))throw new r("path_not_found","Write parent does not exist.");if(m==="create"&&Ye(f))throw new r("path_exists","Create mode will not overwrite an existing file.");let h=Ye(f),y=h?ii(f):null,S=_l(f,Mp(m,h),384);try{let w=gl(S),_=y??(X()==="win32"?ii(f):null);if(_&&(w.ino!==_.ino||w.dev!==_.dev||X()==="win32"&&!ft(l,Ve(f))))throw new r("symlink_escape","The write target changed between validation and opening.");if(X()==="win32"&&y&&m!=="append")dp(S,0);gp(S,p,null,"utf8")}finally{hl(S)}return{path:Rl(l,f),bytes_written:Buffer.byteLength(p,"utf8"),mode:m}}async function Bp(e){let l=de(e.root),c=en(e.payload,"command",65536),p=kt(l,Tt(e.payload,"cwd")??".");if(!hr(p).isDirectory())throw new r("invalid_cwd","cwd is not a directory.");let m=fr(e.payload.timeout_ms,Ti,100,Li);return El(e,Fi(),["-lc",c],{cwd:p,allowWrite:e.root.permissions.write,timeoutMs:m})}async function Fp(e){let l=Vi.safeParse(e.payload),c=e.worker;if(!l.success||!e.claimOwner||(c?!c.runtimeDirectory:X()!=="darwin"))throw new r("preview_unavailable","Preview servers are unavailable on this computer.");let p=de(e.root),m=ie(p,l.data.workspace),f=m.boundary===p?p:kt(m.anchor,si(m.anchor,m.boundary)||"."),h=kt(f,si(f,m.path)||".");if(!hr(h).isDirectory())throw new r("invalid_cwd","The Session checkout is not a directory.");let y=Math.min(Date.parse(l.data.expires_at),Date.now()+qi);if(!(y>Date.now()))throw new r("process_authority_lost","The preview server lease is unavailable.");let S=(L)=>e.emit("progress",{process:L});if(!c?.runtimeDirectory){if(e.claim.local_github_authority)throw new r("local_device_gh_confinement_unavailable","Only a worker runs a local GitHub Session's dev server.");return{...await dr({claim:e.claim,root:f,cwd:h,command:l.data.command,mode:"host",shell:wt(),environment:process.env,expiresAtMs:y,signal:e.signal,emit:S})}}let w={directory:yl(c.runtimeDirectory,"processes")},_={deniedPorts:pr([e.apiOrigin])},v=gr(),C=_r(),I=ge(),A=l.data.egress?Rt(I):null;if(l.data.egress&&(A===null||!me(c.executionMode==="unsandboxed")))throw new r("preview_egress_unavailable","This computer cannot hold a dev server to the run's network allowlist; no command was dispatched.");let M=l.data.egress?await bs(l.data.egress.allowed_domains):null,N=M?[`export ${["HTTP_PROXY","HTTPS_PROXY","http_proxy","https_proxy"].map((L)=>`${L}=${M.url}`).join(" ")}`,"export NO_PROXY=localhost,127.0.0.1,::1 no_proxy=localhost,127.0.0.1,::1 NODE_USE_ENV_PROXY=1",l.data.command].join(`
538
+ `):l.data.command;try{return{...await dr({claim:e.claim,root:h,cwd:h,command:N,mode:"host",shell:C,expiresAtMs:y,signal:e.signal,emit:S,...I?{jobsUser:{...I,...A!==null?{modelGid:A}:{}}}:{},environment:{...v.variables,HOME:v.home,PATH:v.path,TMPDIR:v.temporaryDirectory,SHELL:C},journals:w,preview:_})}}finally{M?.close()}}async function Up(e){Jn();let l=de(e.root),c=Zn(e.payload.command),p=kt(l,Tt(e.payload,"cwd")??".");if(!hr(p).isDirectory())throw new r("invalid_cwd","cwd is not a directory.");let m=fr(e.payload.timeout_ms,Xs,100,Yn),{ignored:f}=Qn(e.payload.env);return await e.emit("progress",{shell:wt(),shell_flags:[...er],sandbox:"none",ignored_env:f}),Zs({command:c,cwd:p,timeoutMs:m,signal:e.signal,spawn:e.spawnFullControl,requestEnv:e.payload.env})}async function Hp(e){let l=de(e.root),c=Tp(e.payload),p=c[0];if(!p||!Sl.has(p)&&!Ri.has(p))throw new r("git_command_not_allowed","Git subcommand is not in the Device allowlist.");if(c.some((h)=>h==="-C"||h==="-c"||h.startsWith("--git-dir")||h.startsWith("--work-tree")||h.startsWith("--config-env")||h.startsWith("--exec-path")))throw new r("git_argument_not_allowed","Git path/config overrides are not allowed.");let m=Ri.has(p);if(m&&!e.root.permissions.write)throw new r("permission_denied","Mutating Git commands require the write grant.");let f=kt(l,Tt(e.payload,"cwd")??".");return El(e,"git",["-c","core.hooksPath=/dev/null","-c","credential.helper=",...c],{cwd:f,allowWrite:m||process.platform==="win32"&&e.root.permissions.write,timeoutMs:fr(e.payload.timeout_ms,Ti,100,Li)})}function Ol(e,l){return async(c)=>{let p=await e.runCommand("/usr/sbin/lsof",c,{cwd:l,root:l,allowWrite:!1,allowProcessInspection:!0,timeoutMs:1e4,signal:e.signal});if(e.signal.aborted)throw new r("cancelled","Operation was cancelled.");return p}}async function jp(e){let l=de(e.root);if(X()==="linux")return la(l);if(X()==="win32")return oo(l);return ma(l,Ol(e,l))}async function qp(e){let l=de(e.root);if(X()==="linux")return ca(l);if(X()==="win32")return so(l);return fa(l,Ol(e,l))}async function Wp(e){let l=e.worker?Sa(e.worker):null,c=e.claim.environment;delete e.claim.environment;let p=e.worker&&c&&Ni({deviceId:e.deviceId},e.root.id,e.runId,c.payload,c.authority)?c.payload:void 0;return e.runHandsRelay({...e.claimedAtMs===void 0?{}:{claimedAtMs:e.claimedAtMs},claimOwner:e.claimOwner,...p?{claimEnvironment:p}:{},localGithubConfinement:Boolean(e.claim.local_github_authority),...e.worker?{headless:!0,runtimeDirectory:e.worker.runtimeDirectory,...e.worker.handsSlots?{handsSlots:e.worker.handsSlots}:{},...e.worker.ownComputer?{ownComputer:!0}:{},hostExecution:e.worker.executionMode==="unsandboxed",...e.worker.executionMode==="unsandboxed"&&e.worker.readiness?.["pty.start"]===!0?{managedPty:{version:1,startupVerified:!0}}:{},deviceIdentity:{deviceId:e.deviceId,rootId:e.root.id,apiOrigin:e.apiOrigin},...l?{desktopRecording:l}:{}}:{},root:de(e.root),runId:e.runId,operationId:e.operationId,attemptId:e.attemptId,payload:e.payload,signal:e.signal,emitEvent:(m,f,h)=>e.emit(m,f,h)})}async function zp(e){if(e.worker){if(!e.root.permissions.read||!e.root.permissions.write)throw new r("permission_denied","Bound Hands terminals require the workspace read/write grants.");let{workspace:l,session:c}=Gi(e.payload,e.operationId);return Xi({root:de(e.root),runId:e.runId,deviceId:e.deviceId,rootId:e.root.id,workspace:l,session:c,owner:e.claimOwner,authority:e.claimAuthority,signal:e.signal,emit:(p,m)=>e.emit(p,m)})}return e.runPtySession({root:de(e.root),runId:e.runId,operationId:e.operationId,payload:e.payload,signal:e.signal,emitEvent:(l,c)=>e.emit(l,c)})}function ml(e,l){let c=ge()?K():null;return c?Mt(c,{op:"transfer",direction:l,root:e.root,payload:e.payload,worker:Boolean(e.worker)},e.signal).then((p)=>p.value):Zo(l,{root:e.root,payload:e.payload,signal:e.signal,worker:Boolean(e.worker),fetchImpl:e.fetchImpl,beforeCommit:()=>e.emit("progress",{phase:"file_transfer_verified"})})}async function Zo(e,l){let c=de(l.root),p=Xt in l.payload;if(p&&!l.worker)throw new r("cloud_copy_workspace_invalid","Only a worker resolves a Cloud copy workspace.");let m=p?Gs(c,l.payload[Xt]):c;if("source"in l.payload||"source_version"in l.payload){if(e!=="export"||!p)throw new r("cloud_copy_source_unsupported","Explicit sources require the private Cloud exporter.");let y=Ds.safeParse(l.payload);if(!y.success)throw new r("invalid_payload","Invalid Cloud export request.");return Vs({runtimeRoot:m,source:y.data.source,url:y.data.url,signal:l.signal,fetchImpl:l.fetchImpl})}let f=en(l.payload,"path",4096),h=e==="import"&&p?Kn(m):m;return At(Di(h,f)),_t({direction:e,root:h,path:f,payload:l.payload,signal:l.signal,fetchImpl:l.fetchImpl,beforeCommit:l.beforeCommit})}var Il={"inference.custom.v1":{requiredPermission:"read",additionalPermissions:["execute","discover_environment"],execute:(e)=>{if(!e.customEndpointCredential||!e.claimOwner)throw new r("custom_endpoint_credential_unavailable","Local model credentials require a signed Device claim.");return ts({payload:e.payload,signal:e.signal,credential:e.customEndpointCredential,emit:(l,c)=>e.emit(l,c,e.signal)})}},"fs.read":{requiredPermission:"read",execute:(e)=>pl("fs.read",e)},"fs.write":{requiredPermission:"write",execute:(e)=>pl("fs.write",e)},"fs.export":{requiredPermission:"read",execute:(e)=>ml(e,"export")},"fs.import":{requiredPermission:"write",execute:(e)=>ml(e,"import")},"preview.serve.v1":{requiredPermission:"execute",additionalPermissions:["discover_environment"],available:()=>X()==="darwin"&&Xn(),execute:Fp},"exec.run":{requiredPermission:"execute",available:Oi,execute:Bp},"exec.full":{requiredPermission:"execute",additionalPermissions:["discover_environment"],available:()=>Xn(),execute:Up},"git.run":{requiredPermission:"execute",available:()=>Oi()&&Cp("git"),execute:Hp},"process.list":{requiredPermission:"read",additionalPermissions:["discover_environment"],available:ul,execute:jp},"ports.list":{requiredPermission:"read",additionalPermissions:["discover_environment"],available:ul,execute:qp},"hands.connect":{requiredPermission:"execute",additionalPermissions:["read","write","discover_environment"],available:()=>X()==="darwin"||Boolean(yn()),execute:Wp},"pty.start":{requiredPermission:"execute",additionalPermissions:["discover_environment"],available:Fn,execute:zp},"display.stream.v1":{requiredPermission:"execute",additionalPermissions:["discover_environment"],available:$t,execute:(e)=>{let l=K();return l?Mt(l,{op:"display",payload:e.payload,proxy:(e.relay.loadProxy??j)()},e.signal):Bt({payload:e.payload,signal:e.signal},e.relay)}},"automation.call.v1":{requiredPermission:"execute",additionalPermissions:["read","discover_environment"],available:()=>Pn(),execute:(e)=>Tn({runId:e.runId,payload:e.payload,signal:e.signal,...e.worker?.userChrome?{userChrome:e.worker.userChrome}:{}})},"simulator.call.v1":{requiredPermission:"execute",additionalPermissions:["read","discover_environment"],available:or,execute:(e)=>sr({payload:e.payload,root:de(e.root)})},"simulator.stream.v1":{requiredPermission:"execute",additionalPermissions:["read","discover_environment"],available:il,execute:(e)=>al({payload:e.payload,root:de(e.root),signal:e.signal},e.relay)},"jobs.control":{requiredPermission:"execute",additionalPermissions:["read","write","discover_environment"],available:()=>!0,execute:(e)=>Yi({root:de(e.root),runId:e.runId,payload:e.payload,signal:e.signal})},"github.local.v1":{requiredPermission:"read",additionalPermissions:["execute","discover_environment"],available:()=>X()==="darwin"?Ye("/usr/bin/sandbox-exec"):X()==="linux"||X()==="win32",execute:async(e)=>{let l=Pe.parse(e.payload),c=oe.parse(e.claim.local_github_authority);if(c.userId!==e.claimOwner?.user_id||c.deviceId!==e.deviceId||c.rootId!==e.root.id||c.runId!==e.runId||c.repoFullName!==l.repoFullName||!c.readOnly&&!e.root.permissions.write||!et(l)&&(c.readOnly||c.generation===null&&!(l.kind==="pr_merge"&&c.merge?.source==="human")&&!(l.kind==="pr_mutation"&&c.contributorRefresh)))throw Error("local_device_gh_authority_changed");return Qi({root:de(e.root),runId:e.runId,request:l,authority:c,signal:e.signal,leaseUntil:e.claim.lease_until},(p)=>fs(l,p))}},"environment.install":{requiredPermission:"execute",additionalPermissions:["read","write","discover_environment"],execute:async(e)=>it({root:de(e.root),runId:e.runId,payload:e.payload})},"browser.pr-proof.v1":{requiredPermission:"read",additionalPermissions:["execute"],available:()=>!1,execute:async(e)=>{if(!e.proveMac)throw new r("capability_unsupported","PR proof host is not installed.");return e.proveMac()}},"tunnel.open":{requiredPermission:"execute",additionalPermissions:["read","write","discover_environment"],execute:(e)=>Ji({root:de(e.root),runId:e.runId,owner:e.claimOwner,payload:e.payload,signal:e.signal})},"tunnel.close":{requiredPermission:"execute",additionalPermissions:["read","write","discover_environment"],execute:(e)=>Zi({root:de(e.root),runId:e.runId,owner:e.claimOwner,payload:e.payload,signal:e.signal})},"workspace.setup.v1":{requiredPermission:"execute",additionalPermissions:["read","write"],available:Gn,execute:(e)=>Ws(e.payload,e.signal)}};function Gp(e,l){try{let c=ns(e,Ve(l)),p=c?e.find((m)=>m.path===c):void 0;return p&&/^[a-f0-9]{64}$/.test(p.pathFingerprint)?p.pathFingerprint:void 0}catch{return}}function Vp(e,l){try{let c=Ve(l);return e.some((p)=>p.path===c)?Er(c,X()):void 0}catch{return}}function Kp(e,l){try{let c=Ve(l),p=e.find((m)=>m.path===c);return p&&/^[a-f0-9]{64}$/.test(p.pathFingerprint)?p.pathFingerprint:void 0}catch{return}}function Yp(e,l){try{let c=Ve(l);if(!e.some((p)=>p.path===c))return;return e.filter((p)=>p.path!==c&&ft(c,p.path)&&/^[a-f0-9]{64}$/.test(p.pathFingerprint)).map((p)=>p.pathFingerprint)}catch{return}}function Xo(e,l,c=X()){try{return on({home:Er(Ve(l),c),roots:e.map((p)=>({path_fingerprint:p.pathFingerprint,path:Er(p.path,c)})).filter((p)=>/^[a-f0-9]{64}$/.test(p.path_fingerprint)&&xr(p.path)).slice(0,nn)})}catch{return}}function ks(e,l={}){let c=l.worker?l.worker.handsSlots??1:l.handsSlots===1?1:void 0,p=Boolean(l.worker)||X()==="darwin",m=p?Kp(e,lr()):void 0,f=!l.worker&&X()==="darwin"?Gp(e,lr()):void 0,h=p?Vp(e,lr()):void 0,y=!l.worker&&X()==="darwin"?Yp(e,lr()):void 0,S=p?Xo(e,lr()):void 0,w=Ks.filter((_)=>{if(Qt.has(_)&&!l.worker)return!1;if(l.worker&&!Ur(_,l.worker))return!1;let v=Il[_];if(!v)return!1;return(_==="hands.connect"&&(l.terminalOnlyHands===!0||Boolean(l.worker))||(_==="pty.start"||_==="preview.serve.v1")&&Boolean(l.worker)||_==="browser.pr-proof.v1"&&Boolean(l.productionProof)?!0:v.available?.()??!0)&&e.some((I)=>(!l.worker||_!=="pty.start"||I.permissions.read&&I.permissions.write)&&vl(v).every((A)=>I.permissions[A]))});return{supported_operations:w,...m?{account_root_fingerprint:m}:{},...f?{workspace_root_fingerprint:f}:{},...h?{account_root_path:h}:{},...y?{home_contained_root_fingerprints:y}:{},...S?{root_paths:S}:{},...w.includes("hands.connect")?{hands_worker_artifact_sha256:b,hands_worker_entrypoint:R,...c?{hands_slots:c}:{}}:{},max_payload_bytes:Te,max_result_bytes:Te,operation_constraints:{...w.includes("browser.pr-proof.v1")&&l.productionProof?{"browser.pr-proof.v1":Sn.parse(l.productionProof)}:{},...w.includes("exec.run")?{"exec.run":{transport:"shell",shell:Fi(),sandbox:X()==="linux"?"linux_sandbox_runtime":X()==="win32"?"windows_srt":"macos_seatbelt",network:!1,max_timeout_ms:Li}}:{},...w.includes("exec.full")?{"exec.full":Qs()}:{},"git.run":{read_only_subcommands:[...Sl].sort(),mutating_subcommands:[...Ri].sort(),push:!1,credential_helpers:!1},"fs.export":{transport:"https_signed_url",max_bytes:Je,max_timeout_ms:Yt,result:"sha256_and_size"},"fs.import":{transport:"https_signed_url",max_bytes:Je,max_timeout_ms:Yt,atomic:!0,overwrite:!1},"hands.connect":{transport:"wss_relay",worker:"ara_hands",worker_version:D,protocol_version:P,worker_artifact_sha256:b,worker_entrypoint:R,policy_mode:"full_access",policy_version:1,workspace_base:ue,workspace_layout:Z,...c?{slots:c}:{},browser_state:l.worker?"optional_headless":l.terminalOnlyHands===!0?"disabled_terminal_only":X()==="darwin"?"optional_isolated_per_session":"isolated_per_session",max_session_ms:43200000},...w.includes("pty.start")?{"pty.start":{transport:"wss_relay",shell:"login_shell",resize:!0,slots:Ir,max_session_ms:Or,max_buffered_output_bytes:qt}}:{},...l.worker?Object.fromEntries(w.filter((_)=>_!=="browser.pr-proof.v1").map((_)=>[_,{ready:l.worker?.readiness?.[_]===!0,...l.worker?.readiness?.[_]!==!0&&l.worker?.probing?.includes(_)?{probing:!0}:{},execution_mode:Ur(_,{...l.worker,executionMode:"sandboxed"})?"confined":"host",..._==="pty.start"?{transport:"wss_relay",worker:"ara_hands",shell:"bound_job",protocol_version:Jt,environment:"private_snapshot",receipt:"metadata_only",...l.worker?.persistentTerminals&&!ge()?{persistent_terminals:!0}:{}}:{},..._==="github.local.v1"?{contributor_attribution:2,prepare_diagnostics:1,...l.worker?.githubSignedIn!==void 0?{gh_authenticated:l.worker.githubSignedIn}:{}}:{},..._==="hands.connect"?{transport:"wss_relay",worker:"ara_hands",slots:c,session_group:Si,...l.worker?.ownComputer?{[Ei]:xi}:{},workspace_base:ue,workspace_layout:Z,browser_state:"optional_headless",desktop:!1,worker_version:D,protocol_version:P,...l.worker?.readiness?.["environment.install"]===!0&&w.includes("environment.install")?{environment_delivery:ni,[ci]:ai}:{},...l.worker?{[pi]:di}:{},...l.worker?{[ui]:li}:{},...l.worker?.handsBrowser?{[_i]:gi}:{},[mi]:fi,[wi]:yi,...me(l.worker?.executionMode==="unsandboxed")?{[Y]:pe}:{},...me(l.worker?.executionMode==="unsandboxed")&&Rt()!==null?{[q]:Re}:{},...me(l.worker?.executionMode==="unsandboxed")&&ge()?{[vi]:bi}:{}}:{},..._==="fs.export"?{cloud_source_version:Nr,source_kinds:["workspace","attachment"],[In]:Ln}:{},..._==="fs.import"?{[In]:Ln}:{},..._===zi&&Rt()!==null&&me(l.worker?.executionMode==="unsandboxed")?{[Wi]:fn}:{},..._==="tunnel.open"?{carried_jobs:ki}:{},..._==="jobs.control"?{[Ai]:Ci}:{},..._==="display.stream.v1"&&l.worker?.displayVideo?{[mo]:fo,[go]:lt.join(","),[_o]:yo,[wo]:bo}:{},..._==="automation.call.v1"&&l.worker?.userChrome?{[vt]:!0}:{},..._==="automation.call.v1"&&l.worker?.cloudSessions?{[Pi]:!0}:{}}])):{}}}}function Ni(e,l,c,p,m){let f=mr.safeParse(p);return f.success&&m!==void 0&&m.device_id===e.deviceId&&f.data.device_id===e.deviceId&&f.data.root_id===l&&f.data.run_id===c&&f.data.binding.kind===m.binding&&f.data.binding.target_revision===m.target_revision&&f.data.binding.root_grant_revision===m.root_grant_revision&&f.data.binding.target_generation===m.target_generation&&f.data.binding.target_fence_id===m.target_fence_id}async function Cs(e,l,c,p,m){if(l.capability!=="hands.connect"||c.kind!==bt||!p.operationEnvironment||!p.acknowledgeOperationEnvironment)return!1;let f=c.payload.snapshot_id;if(c.payload.version!==1||typeof f!=="string"||Object.keys(c.payload).length!==2)throw new r("environment_unavailable","Reason sent an invalid environment delivery.");let h=e.roots.find((w)=>w.id===l.root_id);if(!h)throw new r("root_not_granted","The Hands root is no longer granted.");let y=await p.operationEnvironment(e,l,f,m);if(!Ni(e,h.id,l.run_id,y.payload,y.authority)||y.payload.snapshot_id!==f)throw new r("environment_unavailable","The delivered environment does not match this Hands.");let S=it({root:de(h),operationId:l.operation_id,payload:y.payload});return await p.acknowledgeOperationEnvironment(e,l,{snapshot_id:S.snapshot_id,installed_revision:S.installed_revision,installed:!0},m),!0}async function As(e,l,c,p){if(l.capability!=="hands.connect"||c.kind!==hi)return!1;let{version:m,run_id:f,target_generation:h,target_fence_id:y}=c.payload;if(m!==1||Object.keys(c.payload).length!==4||typeof f!=="string"||typeof h!=="number"||typeof y!=="string")throw new r("hands_rebind_unavailable","Reason sent an invalid Hands rebind.");let S=e.roots.find((w)=>w.id===l.root_id);if(!S)throw new r("root_not_granted","The Hands root is no longer granted.");return await Ki({operationId:l.operation_id,root:de(S),runId:f,targetGeneration:h,fenceId:y,...p?{signal:p}:{}}),!0}async function Ps(e,l,c){if(l.capability!=="github.local.v1")return fl(e,l,c);try{let p=await fl(e,l,c);if(p.status==="succeeded"||ti(l.payload,p.status,p.error_code))return p;return{status:p.status,error_code:p.status==="cancelled"?"operation_cancelled":"local_github_unavailable"}}catch{return{status:c.signal.aborted?"cancelled":"failed",error_code:c.signal.aborted?"operation_cancelled":"local_github_unavailable"}}}async function fl(e,l,c){if(Qt.has(l.capability)&&!c.worker)return{status:"failed",error_code:"capability_not_granted"};if(c.worker&&!Ur(l.capability,c.worker))return{status:"failed",error_code:"capability_not_granted"};if(c.worker&&c.worker.readiness?.[l.capability]!==!0)return{status:"failed",error_code:"capability_unavailable"};if(l.local_github_authority){let _=oe.safeParse(l.local_github_authority);if(!_.success||_.data.deviceId!==e.deviceId||_.data.rootId!==l.root_id||_.data.runId!==l.run_id||_.data.userId!==l.owner?.user_id||!["github.local.v1","hands.connect","environment.install","jobs.control","preview.serve.v1"].includes(l.capability))return{status:"failed",error_code:"local_device_gh_capability_denied"}}let p=Il[l.capability];if(!p)return{status:"failed",error_code:"capability_unsupported"};if(p.available&&!p.available()&&!(["hands.connect","pty.start","preview.serve.v1"].includes(l.capability)&&c.worker)&&!c.runCommand&&!c.runHandsRelay&&!c.spawnFullControl&&!c.runPtySession&&!(l.capability==="browser.pr-proof.v1"&&c.proveMac))return{status:"failed",error_code:"capability_unavailable"};if(l.protocol_version!==2)return{status:"failed",error_code:"protocol_unsupported"};let m=e.roots.find((_)=>_.id===l.root_id);if(!m)return{status:"failed",error_code:"root_not_granted"};if((l.capability==="fs.export"||l.capability==="fs.import")&&Ii(l.payload)&&(("source"in l.payload)||("source_version"in l.payload))){let _=Boolean(c.worker||e.worker)&&Xt in l.payload;if(l.capability!=="fs.export"||!_)return{status:"failed",error_code:"cloud_copy_source_unsupported"}}if(l.owner&&(l.owner.device_id!==e.deviceId||l.owner.organization_id!==e.orgId))return{status:"failed",error_code:"capability_not_granted"};if((l.capability==="tunnel.open"||l.capability==="tunnel.close")&&!l.owner)return{status:"failed",error_code:"preview_unavailable"};if(l.capability==="environment.install"&&!Ni(e,m.id,l.run_id,l.payload,l.authority))return{status:"failed",error_code:"environment_unavailable"};if(vl(p).some((_)=>!m.permissions[_]))return{status:"failed",error_code:"permission_denied"};let f=0,h=async(_,v,C)=>{if(["environment.install","github.local.v1"].includes(l.capability)||l.capability==="inference.custom.v1"&&(_==="started"||_==="completed"))return;await c.emit?.({sequence:f++,kind:_,capability:l.capability,data:v,...(_==="hands.reconnected"||l.capability==="inference.custom.v1")&&C?{deliverySignal:C}:{}})},y=l.capability==="hands.connect"||l.capability==="display.stream.v1"||l.capability==="simulator.stream.v1"||Go.has(l.capability)||l.capability==="pty.start",S,w=async(_,v,C)=>{let I=S;S=void 0,await Promise.all([I,h(_,v,C)])};try{if(y)S=h("started"),S.catch(()=>{return});else await h("started");let _={...c.proxy===void 0?{}:{loadProxy:()=>c.proxy??null},...c.handsLaunch?.takePrespawnedWorker?{takePrespawnedWorker:c.handsLaunch.takePrespawnedWorker}:{},...c.handsLaunch?.adoptSpawnedWorker?{adoptSpawnedWorker:c.handsLaunch.adoptSpawnedWorker}:{}},v=await p.execute({...c.proveMac?{proveMac:()=>c.proveMac(l,c.signal,(C)=>h("pr-proof.started.v1",C))}:{},claim:l,worker:c.worker,claimOwner:l.owner,claimAuthority:l.authority,organizationId:e.orgId,deviceId:e.deviceId,apiOrigin:e.apiOrigin,root:m,payload:Pp(l.payload),runId:l.run_id,operationId:l.operation_id,attemptId:l.attempt_id,...c.handsLaunch?{claimedAtMs:c.handsLaunch.claimedAtMs}:{},signal:c.signal,...c.customEndpointCredential?{customEndpointCredential:c.customEndpointCredential}:{},fetchImpl:c.fetchImpl??fetch,relay:_,runCommand:c.runCommand??Ko,spawnFullControl:c.spawnFullControl??pn,emit:y?w:h,runHandsRelay:c.runHandsRelay??((C)=>Ot(C,_)),runPtySession:c.runPtySession??jn});if(l.capability==="github.local.v1")Mo.parse(v);if(!Ii(v))throw new r("invalid_result","Operation result must be a JSON object.");if(Buffer.byteLength(JSON.stringify(v)??"null","utf8")>Te)throw new r("result_too_large","Operation result exceeds 256 KB.");return await(y?w:h)("completed",{ok:!0}),{status:"succeeded",result:v,error_code:null}}catch(_){let v=c.signal.reason instanceof r&&ll.has(c.signal.reason.code)?c.signal.reason.code:_ instanceof r&&ll.has(_.code)?_.code:null;if(c.signal.aborted||v)return{status:"cancelled",..._ instanceof nt?{result:{process_terminal_observation:_.observation}}:{},error_code:["environment.install","github.local.v1","inference.custom.v1"].includes(l.capability)?"operation_cancelled":v??"cancelled"};if(["fs.read","fs.write"].includes(l.capability)&&_ instanceof Error&&"code"in _&&["EACCES","EPERM"].includes(String(_.code)))await h("permission.denied",{operation:l.capability==="fs.read"?"read":"write",provenance:"os_permission_unknown"});let C=l.capability==="inference.custom.v1"?_ instanceof r&&An(_.code)?_.code:"custom_endpoint_unavailable":l.capability==="github.local.v1"?_ instanceof ir&&ti(l.payload,"failed",_.code)?_.code:"local_github_unavailable":l.capability==="environment.install"?"environment_install_failed":_ instanceof r&&xp.test(_.code)?_.code:"capability_failed",I=l.capability==="hands.connect"&&_ instanceof br?eo(_.expiryDiagnostic):null;return await h("completed",{ok:!1,error_code:C,...I?{expiry_diagnostic:I}:{}}),{status:"failed",error_code:C}}}
539
+ export{dn,Go,Fi,pn,Ko,Jo,Zo,Xo,ks,Cs,As,Ps};