@reason-machines/cli-linux-x64 0.2.525 → 0.2.527

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 (106) hide show
  1. package/bin/reason +2 -2
  2. package/bin/vm-hands/api-credentials-rwy5ys03.js +2 -0
  3. package/bin/vm-hands/api-rjgpedvk.js +2 -0
  4. package/bin/vm-hands/connect-cli-p72wek72.js +2 -0
  5. package/bin/vm-hands/credentials-6mbx2mke.js +2 -0
  6. package/bin/vm-hands/{custom-endpoint-device-hzgdnyx2.js → custom-endpoint-device-6d759gkr.js} +1 -1
  7. package/bin/vm-hands/desktop-account-fpf13hm4.js +2 -0
  8. package/bin/vm-hands/desktop-wallpaper-fd8f2wb2.jpg +0 -0
  9. package/bin/vm-hands/device-workspace-rxqaw78v.js +2 -0
  10. package/bin/vm-hands/dock-browser-y53t41cx.png +0 -0
  11. package/bin/vm-hands/dock-files-cp52htdw.png +0 -0
  12. package/bin/vm-hands/dock-terminal-1es514yq.png +0 -0
  13. package/bin/vm-hands/hands-worker-source-hytk3v4n.js +2 -0
  14. package/bin/vm-hands/install-receipt-g15a9v84.js +2 -0
  15. package/bin/vm-hands/local-automation-pdhkw5de.js +2 -0
  16. package/bin/vm-hands/local-capabilities-pmks6jpv.js +2 -0
  17. package/bin/vm-hands/local-desktop-users-wkvb4dpg.js +2 -0
  18. package/bin/vm-hands/{local-display-mac-4654wqzs.js → local-display-mac-d1t1qve5.js} +1 -1
  19. package/bin/vm-hands/local-display-session-m8469h63.js +2 -0
  20. package/bin/vm-hands/local-display-video-6xq6fjtm.js +2 -0
  21. package/bin/vm-hands/local-managed-process-2tx1h7cb.js +2 -0
  22. package/bin/vm-hands/local-pty-session-p60ha91y.js +2 -0
  23. package/bin/vm-hands/managed-runtime-533929j6.js +2 -0
  24. package/bin/vm-hands/{network-contract-5wc6wbn2.js → network-contract-84vs9gfz.js} +1 -1
  25. package/bin/vm-hands/permissions-4myxznfs.js +2 -0
  26. package/bin/vm-hands/{reason-hands-protocol-zffy7kc8.js → reason-hands-protocol-t51p2jgn.js} +1 -1
  27. package/bin/vm-hands/serve-service-mjnye8vs.js +2 -0
  28. package/bin/vm-hands/{status-nvm1fe9h.js → status-m8cfgr58.js} +1 -1
  29. package/bin/vm-hands/version-gszhe6py.js +2 -0
  30. package/bin/vm-hands/{vm-hands-entry-lite-tash5m18.js → vm-hands-entry-lite-06e9xm3v.js} +22 -22
  31. package/bin/vm-hands/{vm-hands-entry-lite-9knf91et.js → vm-hands-entry-lite-2egd9wr5.js} +2 -2
  32. package/bin/vm-hands/vm-hands-entry-lite-3gbf905c.js +3 -0
  33. package/bin/vm-hands/{vm-hands-entry-lite-9x81cr3a.js → vm-hands-entry-lite-3thdz953.js} +3 -3
  34. package/bin/vm-hands/{vm-hands-entry-lite-5wsygx6n.js → vm-hands-entry-lite-4pm82ns4.js} +2 -2
  35. package/bin/vm-hands/{vm-hands-entry-lite-88yjxxvf.js → vm-hands-entry-lite-5n4ay2gs.js} +4 -4
  36. package/bin/vm-hands/{vm-hands-entry-lite-sfmeafdm.js → vm-hands-entry-lite-5nhmye0y.js} +2 -2
  37. package/bin/vm-hands/{vm-hands-entry-lite-70hq7mrs.js → vm-hands-entry-lite-72nj66ab.js} +2 -2
  38. package/bin/vm-hands/{vm-hands-entry-lite-11dq75hb.js → vm-hands-entry-lite-7mntg1rq.js} +3 -3
  39. package/bin/vm-hands/{vm-hands-entry-lite-60t7x9vw.js → vm-hands-entry-lite-8b6qfv1c.js} +9 -9
  40. package/bin/vm-hands/{vm-hands-entry-lite-h0s6n13f.js → vm-hands-entry-lite-8n2hetqw.js} +1 -1
  41. package/bin/vm-hands/{vm-hands-entry-lite-39qv4sqt.js → vm-hands-entry-lite-a0g6c3wr.js} +2 -2
  42. package/bin/vm-hands/{vm-hands-entry-lite-f8ts9y2q.js → vm-hands-entry-lite-b48eyd09.js} +1 -1
  43. package/bin/vm-hands/{vm-hands-entry-lite-4cdn822w.js → vm-hands-entry-lite-bjtcy8n6.js} +3 -3
  44. package/bin/vm-hands/{vm-hands-entry-lite-a6w60nv9.js → vm-hands-entry-lite-c5pyaaax.js} +3 -3
  45. package/bin/vm-hands/{vm-hands-entry-lite-x5048q8d.js → vm-hands-entry-lite-c6m5n5gh.js} +5 -5
  46. package/bin/vm-hands/{vm-hands-entry-lite-n3274tws.js → vm-hands-entry-lite-dxaa88rs.js} +1 -1
  47. package/bin/vm-hands/{vm-hands-entry-lite-89ahrw19.js → vm-hands-entry-lite-ep1bq0xq.js} +2 -2
  48. package/bin/vm-hands/{vm-hands-entry-lite-haws181e.js → vm-hands-entry-lite-gmxfz6k2.js} +2 -2
  49. package/bin/vm-hands/vm-hands-entry-lite-j1hddtjs.js +2 -0
  50. package/bin/vm-hands/{vm-hands-entry-lite-x1vm200a.js → vm-hands-entry-lite-jvvk1gjx.js} +2 -2
  51. package/bin/vm-hands/{vm-hands-entry-lite-krnvgf71.js → vm-hands-entry-lite-jzmrhjkz.js} +3 -3
  52. package/bin/vm-hands/{vm-hands-entry-lite-c4959xva.js → vm-hands-entry-lite-k2kx2ex0.js} +1 -1
  53. package/bin/vm-hands/{vm-hands-entry-lite-0zby1r00.js → vm-hands-entry-lite-kpahnwm7.js} +16 -16
  54. package/bin/vm-hands/{vm-hands-entry-lite-t82dzcxb.js → vm-hands-entry-lite-mc5y3xr9.js} +2 -2
  55. package/bin/vm-hands/{vm-hands-entry-lite-vf02kfyy.js → vm-hands-entry-lite-mhw459y7.js} +5 -5
  56. package/bin/vm-hands/{vm-hands-entry-lite-c0t5xpzh.js → vm-hands-entry-lite-mpy0j95a.js} +1 -1
  57. package/bin/vm-hands/{vm-hands-entry-lite-wfc0agnt.js → vm-hands-entry-lite-msb3z9nq.js} +1 -1
  58. package/bin/vm-hands/{vm-hands-entry-lite-r31yba20.js → vm-hands-entry-lite-pd34mbnm.js} +2 -2
  59. package/bin/vm-hands/{vm-hands-entry-lite-1kt82jes.js → vm-hands-entry-lite-q13ekwev.js} +2 -2
  60. package/bin/vm-hands/{vm-hands-entry-lite-nj4kjex8.js → vm-hands-entry-lite-q9spnspj.js} +28 -28
  61. package/bin/vm-hands/{vm-hands-entry-lite-dhb4fwrv.js → vm-hands-entry-lite-r2100wsz.js} +3 -3
  62. package/bin/vm-hands/{vm-hands-entry-lite-5qanp33p.js → vm-hands-entry-lite-rxfxd2hs.js} +1 -1
  63. package/bin/vm-hands/{vm-hands-entry-lite-mfvtp7py.js → vm-hands-entry-lite-x342zztg.js} +1 -1
  64. package/bin/vm-hands/{vm-hands-entry-lite-td73npv3.js → vm-hands-entry-lite-y9jarm7q.js} +2 -2
  65. package/bin/vm-hands/{vm-hands-entry-lite-0tavq3p4.js → vm-hands-entry-lite-yfc1w62e.js} +1 -1
  66. package/bin/vm-hands/{vm-hands-entry-lite-bvqwsd3b.js → vm-hands-entry-lite-yfvz7s4m.js} +1 -1
  67. package/bin/vm-hands/{vm-hands-entry-lite-scvg31ds.js → vm-hands-entry-lite-ygymhgk8.js} +7 -7
  68. package/bin/vm-hands/{vm-hands-entry-lite-kwmjn9y3.js → vm-hands-entry-lite-yj9hbtm1.js} +5 -5
  69. package/bin/vm-hands/{vm-hands-entry-lite-ckezse0f.js → vm-hands-entry-lite-yptpy066.js} +2 -2
  70. package/bin/vm-hands/vm-hands-entry-lite-zea60aw2.js +150 -0
  71. package/bin/vm-hands/{vm-hands-entry-lite-hc11hecd.js → vm-hands-entry-lite-zwnevt4c.js} +4 -4
  72. package/bin/vm-hands/vm-hands-entry-lite.js +2 -2
  73. package/bin/vm-hands/{vm-hands-executor-ftg1qx7c.js → vm-hands-executor-mx3j751y.js} +1 -1
  74. package/bin/vm-hands/{vm-hands-op-runner-agy05x0c.js → vm-hands-op-runner-bpv5sz6e.js} +1 -1
  75. package/bin/vm-hands/{vm-hands-runtime-kbdb0rj5.js → vm-hands-runtime-z81qbpbr.js} +3 -3
  76. package/bin/vm-hands/worker-preview-readiness-afw3ezwg.js +2 -0
  77. package/bin/vm-hands/worker-sandbox-egdjwgcp.js +2 -0
  78. package/package.json +1 -1
  79. package/bin/vm-hands/api-468skzhq.js +0 -2
  80. package/bin/vm-hands/api-credentials-9f82kd61.js +0 -2
  81. package/bin/vm-hands/connect-cli-4t15y12x.js +0 -2
  82. package/bin/vm-hands/credentials-md79hkqh.js +0 -2
  83. package/bin/vm-hands/desktop-account-gm7m5bwr.js +0 -2
  84. package/bin/vm-hands/desktop-wallpaper-0pjhgyfk.jpg +0 -0
  85. package/bin/vm-hands/device-workspace-qjyzphga.js +0 -2
  86. package/bin/vm-hands/dock-browser-afp005mt.png +0 -0
  87. package/bin/vm-hands/dock-files-rywdm96b.png +0 -0
  88. package/bin/vm-hands/dock-terminal-s41cj1jp.png +0 -0
  89. package/bin/vm-hands/hands-worker-source-hzkacxxz.js +0 -2
  90. package/bin/vm-hands/install-receipt-qtwtzafq.js +0 -2
  91. package/bin/vm-hands/local-automation-wjsbhagn.js +0 -2
  92. package/bin/vm-hands/local-capabilities-45tqt3q6.js +0 -2
  93. package/bin/vm-hands/local-desktop-users-qdpbfh6s.js +0 -2
  94. package/bin/vm-hands/local-display-session-efjd2gvs.js +0 -2
  95. package/bin/vm-hands/local-display-video-bdmm490z.js +0 -2
  96. package/bin/vm-hands/local-managed-process-z5jpvttg.js +0 -2
  97. package/bin/vm-hands/local-pty-session-s60ca00y.js +0 -2
  98. package/bin/vm-hands/managed-runtime-ze7n8w7x.js +0 -2
  99. package/bin/vm-hands/permissions-k1tnx28f.js +0 -2
  100. package/bin/vm-hands/serve-service-3kj6xp04.js +0 -2
  101. package/bin/vm-hands/version-qxsa289q.js +0 -2
  102. package/bin/vm-hands/vm-hands-entry-lite-413em054.js +0 -150
  103. package/bin/vm-hands/vm-hands-entry-lite-9y3dvyfj.js +0 -2
  104. package/bin/vm-hands/vm-hands-entry-lite-mcjca0ez.js +0 -3
  105. package/bin/vm-hands/worker-preview-readiness-8ftb3nbw.js +0 -2
  106. package/bin/vm-hands/worker-sandbox-k0vx97tx.js +0 -2
@@ -1,7 +1,7 @@
1
1
  // @bun
2
- import{Jt,j}from"./vm-hands-entry-lite-hc11hecd.js";import{ue,Ce,Z,Ae,de,ir,et,X,O,H,rn}from"./vm-hands-entry-lite-39qv4sqt.js";import{Uo,ri}from"./vm-hands-entry-lite-t82dzcxb.js";import{To,P,Je,Se,Ze,ne,Xe,Vn,Ee,Qt,ae,U,N,ce,zr,qr,Kn}from"./vm-hands-entry-lite-c0t5xpzh.js";import{Pe,oe,pe,Y,Te,q,Q}from"./vm-hands-entry-lite-88yjxxvf.js";import{Lt,Pr,lt,V,D,T,b,Cn}from"./vm-hands-entry-lite-tash5m18.js";import{Cr,Ar,xn,lo,He,kn}from"./vm-hands-entry-lite-a6w60nv9.js";import{K}from"./vm-hands-entry-lite-bvqwsd3b.js";import{ji}from"./vm-hands-entry-lite-9x81cr3a.js";import{p,ze,Mt,ut,uo,_e,we}from"./vm-hands-entry-lite-kwmjn9y3.js";import{v,h,fo}from"./vm-hands-entry-lite-c4959xva.js";import{E}from"./vm-hands-entry-lite-70hq7mrs.js";import{tr}from"./vm-hands-entry-lite-h0s6n13f.js";import{a,Ho,zo,ie,Wo}from"./vm-hands-entry-lite-haws181e.js";import{L,Mi,$i,Zo,y,t,k,At,o,d,u,i,c,g,ee,s,n}from"./vm-hands-entry-lite-4cdn822w.js";import{Fi}from"./vm-hands-entry-lite-pzj5s203.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{Yo,se,Qo,C,De,Me,A}from"./vm-hands-entry-lite-1kt82jes.js";var Si=()=>{let e={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{unit:"entries",verb:"to have"}};function l(w){return e[w]??null}let f={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"},_={nan:"NaN"};return(w)=>{switch(w.code){case"invalid_type":{let S=_[w.expected]??w.expected,x=Zo(w.input),W=_[x]??x;return`Invalid input: expected ${S}, received ${W}`}case"invalid_value":if(w.values.length===1)return`Invalid input: expected ${$i(w.values[0])}`;return`Invalid option: expected one of ${Mi(w.values,"|")}`;case"too_big":{let S=w.inclusive?"<=":"<",x=l(w.origin);if(x)return`Too big: expected ${w.origin??"value"} to have ${S}${w.maximum.toString()} ${x.unit??"elements"}`;return`Too big: expected ${w.origin??"value"} to be ${S}${w.maximum.toString()}`}case"too_small":{let S=w.inclusive?">=":">",x=l(w.origin);if(x)return`Too small: expected ${w.origin} to have ${S}${w.minimum.toString()} ${x.unit}`;return`Too small: expected ${w.origin} to be ${S}${w.minimum.toString()}`}case"invalid_format":{let S=w;if(S.format==="starts_with")return`Invalid string: must start with "${S.prefix}"`;if(S.format==="ends_with")return`Invalid string: must end with "${S.suffix}"`;if(S.format==="includes")return`Invalid string: must include "${S.includes}"`;if(S.format==="regex")return`Invalid string: must match pattern ${S.pattern}`;return`Invalid ${f[S.format]??w.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${w.divisor}`;case"unrecognized_keys":return`Unrecognized key${w.keys.length>1?"s":""}: ${Mi(w.keys,", ")}`;case"invalid_key":return`Invalid key in ${w.origin}`;case"invalid_union":if(w.options&&Array.isArray(w.options)&&w.options.length>0)return`Invalid discriminator value. Expected ${w.options.map((x)=>`'${x}'`).join(" | ")}`;return"Invalid input";case"invalid_element":return`Invalid value in ${w.origin}`;default:return"Invalid input"}}};function gn(){return{localeError:Si()}}L(gn());class _t extends Error{}function Co(e){let l;try{l=new URL(e)}catch{throw new _t("The proxy must be a URL like https://proxy.example.com:3128.")}if(l.protocol!=="https:"&&l.protocol!=="http:")throw new _t("The proxy URL must use the https or http scheme.");if(!l.hostname)throw new _t("The proxy URL must name a host.");if(l.port!==""&&Number(l.port)<1)throw new _t("The proxy URL must use a port between 1 and 65535.");if(l.pathname!==""&&l.pathname!=="/"||l.search||l.hash)throw new _t("The proxy URL must not carry a path, query, or fragment.");return l.toString()}import{createHash as Ei}from"crypto";import{isAbsolute as Lo,join as Bo,relative as jo,resolve as qt,sep as Mo}from"path";var Vt=t().min(1).refine(Lo,"absolute path required"),No=c({version:n(1),apiOrigin:At(),channel:s(["staging","production"]),stateDirectory:Vt,workspaceRoot:Vt,lifetime:s(["persistent","ephemeral"]),executionMode:s(["confined","host"]).default("confined"),name:t().min(1).max(160).default("Reason headless worker"),slots:o().int().min(1).max(4).default(1),shutdownGraceMs:o().int().min(0).max(300000).default(30000),proxy:c({version:n(Jt),url:t().refine((e)=>{try{return Co(e)===e}catch{return!1}},"invalid proxy URL"),caFile:Vt.optional()}).optional(),userChrome:d().optional(),cloudSessions:n(!0).optional(),localLogins:d().optional(),folders:u(Vt).min(1).max(31).optional()}),Ri=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,B=g("channel",[No,No.extend({channel:n("local-qa"),apiOrigin:t()})]).superRefine((e,l)=>{if(e.channel==="local-qa"){if(!Ri.test(e.apiOrigin))l.addIssue({code:"custom",message:"local QA worker requires an exact HTTPS trycloudflare.com quick-tunnel origin"})}else{let _=new URL(e.apiOrigin);if(_.origin!==e.apiOrigin||_.username||_.password||_.protocol!=="https:"&&!(_.protocol==="http:"&&ri(_.origin))||!ri(_.origin)&&!Uo(e.channel,_.origin))l.addIssue({code:"custom",message:"API origin must match channel (or loopback)"})}if(!je(e.workspaceRoot,e.stateDirectory))l.addIssue({code:"custom",message:"state and workspace must be disjoint"});let f=e.folders??[];if(new Set([e.workspaceRoot,...f]).size!==f.length+1||f.some((_)=>!je(_,e.stateDirectory)))l.addIssue({code:"custom",message:"folders must be distinct and disjoint from state"})});function m(e){return Bo(e.stateDirectory,`headless-${e.channel}`)}function je(e,l){if(Fr(l,e))return!1;return!Fr(e,l)||E(Bo(Mo,jo(qt(e),qt(l))))}function Fr(e,l){let f=jo(qt(e),qt(l));return f===""||f!==".."&&!f.startsWith(`..${Mo}`)&&!Lo(f)}function te(e){let{proxy:l,userChrome:f,cloudSessions:_,localLogins:w,folders:S,...x}=e;return Ei("sha256").update(JSON.stringify(x)).digest("hex")}var Oi=4,xi=[2375,2376,9222,9229];function mr(e){let l=new Set(xi);for(let f of e){let _=new URL(f);l.add(Number(_.port||(["https:","wss:"].includes(_.protocol)?443:80)))}return l}function Gr(){throw new r("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var Pi=60000;function Fo(e){let l=new AbortController,f=new Map,_=(R)=>JSON.stringify([R.jobId,R.port]);function w(R){let M=e.authority.owner;if(l.signal.aborted||!e.isCurrent()||e.expiresAtMs<=Date.now()||R.organization_id!==M.organization_id||R.user_id!==M.user_id||R.device_id!==M.device_id)Gr()}function S(R){let M;try{M=e.environment.current()}catch{return null}return M.binding.target_generation===R.generation&&M.binding.target_fence_id===R.fenceId&&M.run_id===e.runId&&M.device_id===e.authority.owner.device_id&&M.root_id===e.authority.rootId?M:null}async function x(R,M,G){let F=await W(R,M,G);if(F!=="moved")return F;let I=await W(R,M,G);return I==="moved"?null:I}async function W(R,M,G){try{w(e.authority.owner);let F=e.identity();if(!F||G.aborted||R.expiresAtMs<=Date.now()||R.expiresAtMs>e.expiresAtMs)return null;let I=M.opened,re=I!==void 0&&F.generation>I.generation,J=S(F);if(re){if(J){if(J.revision<=I.revision||R.expiresAtMs>Date.parse(J.expires_at)||J.binding.target_revision!==I.attachmentRevision||J.binding.root_grant_revision!==I.grantRevision)return null;M.recoveringSinceMs=void 0}else if(Date.now()-(M.recoveringSinceMs??=Date.now())>Pi)return null}else if(!J||R.expiresAtMs>Date.parse(J.expires_at)||I&&(F.generation!==I.generation||F.fenceId!==I.fenceId))return null;let z=await e.inspect(R.jobId,G),fe=e.identity(),ve=fe&&S(fe);w(e.authority.owner);let be=J&&{generation:F.generation,fenceId:F.fenceId,snapshotId:J.snapshot_id,revision:J.revision,attachmentRevision:J.binding.target_revision,grantRevision:J.binding.root_grant_revision},Re=re?I:be;if(G.aborted||!fe)return null;if(fe.generation!==F.generation||fe.fenceId!==F.fenceId||ve?.snapshot_id!==J?.snapshot_id||ve?.revision!==J?.revision)return"moved";let $e=z.ok&&z.job.environmentSnapshotId!==void 0&&z.job.environmentRevision!==void 0?{snapshotId:z.job.environmentSnapshotId,revision:z.job.environmentRevision}:null;if(!z.ok||z.generation!==F.generation||!Re||!$e)return null;if(($e.snapshotId!==Re.snapshotId||$e.revision!==Re.revision)&&(re||!e.environment.carried($e.snapshotId,$e.revision)))return null;if(!I&&F.generation===R.generation&&F.fenceId===R.fenceId)M.opened={...Re,...$e};return{executorLaunchId:e.executorLaunchId,job:z.job,binding:{organizationId:e.authority.owner.organization_id,userId:e.authority.owner.user_id,deviceId:e.authority.owner.device_id,rootId:e.authority.rootId,runId:e.runId,attachmentRevision:Re.attachmentRevision,grantRevision:Re.grantRevision,generation:Re.generation,fenceId:Re.fenceId,jobId:z.job.jobId,port:R.port,expiresAtMs:R.expiresAtMs}}}catch{return null}}return{async open(R,M,G){w(M);let{binding:F,deviceRelayUrl:I}=ut(R);if(G.aborted||F.expiresAtMs<=Date.now()||F.expiresAtMs>Date.now()+p.lifetimeMs||new URL(I).origin!==e.authority.relayOrigin)Gr();let re=_(F),J=f.get(re);if(J){if(!ze(J.binding,F)||J.relay!==I)Gr();if(await J.opened,!await Mt(()=>J.port.check())||G.aborted||J.abort.signal.aborted)Gr();return{opened:!0,binding:F}}if(f.size>=Oi)Gr();let z=new AbortController,fe={},ve=we({binding:F,deniedPorts:e.authority.deniedPorts,readCurrentJob:()=>x(F,fe,z.signal)}),be=()=>z.abort();if(G.addEventListener("abort",be,{once:!0}),l.signal.addEventListener("abort",be,{once:!0}),G.aborted||l.signal.aborted)be();let Re=_e({binding:F,deviceRelayUrl:I,port:ve,signal:z.signal}),$e={binding:F,relay:I,abort:z,port:ve,opened:Re};f.set(re,$e);let qe=()=>{if(G.removeEventListener("abort",be),l.signal.removeEventListener("abort",be),f.get(re)===$e)f.delete(re)};try{if((await Re).closed.then(qe),G.removeEventListener("abort",be),w(M),z.signal.aborted||!await Mt(()=>ve.check()))Gr();return{opened:!0,binding:F}}catch{z.abort(),qe(),Gr()}},async close(R,M){w(M);let{binding:G}=uo(R),F=f.get(_(G));if(!F||!ze(F.binding,G))Gr();return F.abort.abort(),await F.opened.then((I)=>I.closed,()=>{return}),{closed:!0,binding:G}},dispose(){l.abort();for(let R of f.values())R.abort.abort();f.clear()}}}import{WebSocket as Rn}from"ws";var $o=(e)=>("data"in e)?e.data.length:e.bytes,Ko=2*Xe;function ar(e){throw new r(e,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var mt=(e)=>!["starting","running"].includes(e.state);function Qi(e,l,f=Date.now()){let _=["relay_url","session_id","expires_at","cols","rows","pty","workspace"];if(Object.keys(e).length!==_.length||Object.keys(e).some((M)=>!_.includes(M))||!ae(l)||!ae(e.session_id)||typeof e.expires_at!=="string"||typeof e.relay_url!=="string"||e.relay_url.length>4096||![e.cols,e.rows].every((M)=>Number.isSafeInteger(M)&&Number(M)>=1&&Number(M)<=Ee))ar("invalid_pty_request");let w=e.pty;if(!w||typeof w!=="object"||Array.isArray(w))ar("invalid_pty_request");let S=w;if(Object.keys(S).length!==2||S.version!==1||!ce(S.jobId))ar("invalid_pty_request");let x;try{x=new URL(e.relay_url)}catch{return ar("invalid_pty_request")}if(!["ws:","wss:"].includes(x.protocol)||x.username||x.password||x.hash||x.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(x.hostname))ar("invalid_pty_request");let W=Date.parse(e.expires_at);if(!Number.isSafeInteger(W)||W<=f)ar("invalid_pty_request");return{workspace:H(e.workspace)??ar("invalid_pty_request"),session:{jobId:S.jobId,sessionId:e.session_id,operationId:l,relayUrl:x.href,cols:Number(e.cols),rows:Number(e.rows),leaseExpiresAtMs:Math.min(W,f+43200000)}}}async function Go(e){let{session:l,binding:f}=e;if(f.assertCurrent(),e.signal.aborted||Date.now()>=l.leaseExpiresAtMs)ar("cancelled");let _=new Rn(l.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:ne}),w=new AbortController,S=()=>{},x=()=>{w.abort(),S()};e.signal.addEventListener("abort",x,{once:!0});let W=setTimeout(x,Math.max(1,l.leaseExpiresAtMs-Date.now())),R=[],M=0,G=0,F=0,I=!1,re=!1,J=!1,z,fe,ve,be=(le)=>{ve=new r(le,"Bound terminal input was refused."),x()};_.on("error",()=>be("pty_relay_unavailable")),_.on("close",x),_.on("message",(le,he)=>{if(w.signal.aborted)return;if(!re){be("pty_not_ready");return}let Oe=Array.isArray(le)?Buffer.concat(le):le instanceof ArrayBuffer?Buffer.from(le):le;if(Oe.length===0)return;let Ke=R.at(-1),Le=he&&Ke!==void 0&&"data"in Ke&&Ke.data.length+Oe.length<=ne;if(Oe.length>ne||M+Oe.length>Vn){be("pty_input_backpressure");return}if(Le)Ke.data=Buffer.concat([Ke.data,Oe]);else if(he)R.push({data:Buffer.from(Oe)});else try{let Be=JSON.parse(Oe.toString("utf8"));if(Be&&Be.t==="close"&&Object.keys(Be).length===1){J=!0,x();return}if(!Be||Be.t!=="resize"||Object.keys(Be).length!==3||![Be.cols,Be.rows].every((ke)=>Number.isSafeInteger(ke)&&ke>=1&&ke<=Ee))throw Error("invalid_control");R.push({cols:Be.cols,rows:Be.rows,bytes:Oe.length})}catch{be("invalid_pty_control");return}M+=Oe.length,S()});function Re(le){return Kn(JSON.stringify({...f.scope,version:1,sessionId:l.sessionId,operationId:l.operationId,job:{...le,output:[],pty:le.pty?{...le.pty,output:[]}:void 0}}))}function $e(le){if(!le.ok)ar(le.error);let he=le.job;if(le.generation!==f.scope.generation||he.jobId!==l.jobId||!he.pty||he.leaseExpiresAtMs>l.leaseExpiresAtMs||he.process&&he.process.executorLaunchId!==f.scope.executorLaunchId||he.process&&fe&&(he.process.pid!==fe.pid||he.process.processGroupId!==fe.processGroupId)||he.state!=="starting"&&(he.environmentRevision!==f.environment.revision||he.environmentSnapshotId!==f.environment.snapshotId))ar("pty_binding_changed");if(Re(he),he.process)fe??={...he.process};return he}async function qe(le){f.assertCurrent();let he=await f.request(le,w.signal);if(f.assertCurrent(),w.signal.aborted)ar("cancelled");let Oe=$e(he);if(Oe.inputSequence!==G)ar("job_input_sequence");if(!mt(Oe)&&Oe.leaseExpiresAtMs<=Date.now())ar("pty_binding_changed");return Oe}function ye(le){if(f.assertCurrent(),w.signal.aborted||_.readyState!==Rn.OPEN||_.bufferedAmount+Buffer.byteLength(le)>Ko)ar("pty_output_backpressure");_.send(le)}function Fe(le){if(le.firstCursor>F+1)F=le.firstCursor-1;for(let he of le.pty.output){if(he.cursor<=F)continue;if(he.cursor!==F+1)ar("pty_output_gap");let Oe=Buffer.from(he.dataBase64,"base64");if(_.bufferedAmount+Oe.length>Ko)return!1;ye(Oe),F=he.cursor}if(F!==le.nextCursor)ar("pty_output_gap");return!0}async function Ve(le,he){let Oe;try{await Promise.race([e.emit(le,he),new Promise((Ke,Le)=>{Oe=setTimeout(()=>Le(new r("pty_event_unavailable","Terminal metadata delivery timed out.")),2000)})])}finally{clearTimeout(Oe)}}async function Ie(){let le=AbortSignal.timeout(Qt),he=f.request({jobId:l.jobId,action:"cancel",input:{}},le),Oe,Ke=new Promise((Le,Be)=>{if(Oe=()=>Be(new r("pty_cleanup_unconfirmed","Terminal cleanup acknowledgement was not observed within authority.")),le.addEventListener("abort",Oe,{once:!0}),le.aborted)Oe()});try{let Le=await Promise.race([he,Ke]);if(le.aborted)ar("pty_cleanup_unconfirmed");return $e(Le)}finally{le.removeEventListener("abort",Oe)}}try{await new Promise((Le,Be)=>{let ke=setTimeout(()=>{x(),Be(new r("pty_relay_unavailable","Terminal pairing timed out."))},5000),We=()=>{clearTimeout(ke),Be(new r("cancelled","Terminal pairing was cancelled."))};if(w.signal.addEventListener("abort",We,{once:!0}),_.once("open",()=>{clearTimeout(ke),w.signal.removeEventListener("abort",We),Le()}),w.signal.aborted)We()}),f.assertCurrent(),I=!0,z=await qe({jobId:l.jobId,action:"start",input:{mode:"pty",cols:l.cols,rows:l.rows,leaseExpiresAtMs:l.leaseExpiresAtMs}});let le=Date.now()+5000;while(z.state==="starting"){if(Date.now()>=le)ar("pty_not_ready");await new Promise((Le)=>setTimeout(Le,25)),z=await qe({jobId:l.jobId,action:"inspect",input:{after:F}})}if(z.state!=="running"||z.inputSequence!==0||z.leaseExpiresAtMs<=Date.now())ar("pty_not_ready");await Ve("pty.ready",Re(z)),re=!0,ye(JSON.stringify({t:"open",cols:z.pty.cols,rows:z.pty.rows,receipt:Re(z)}));let he=!1,Oe=0,Ke=!1;while(!w.signal.aborted){let Le=z.firstCursor>F+1,Be=Fe(z);if(mt(z)){if(Be)break}else if(Le)he=!0;else if(he&&Be&&Date.now()>=Oe){he=!1,Oe=Date.now()+1000;let{cols:We,rows:rr}=z.pty;for(let nr of[{cols:We,rows:rr>1?rr-1:2},{cols:We,rows:rr}]){if(mt(z))break;let Rr=++G;if(z=await qe({jobId:l.jobId,action:"resize",input:{sequence:Rr,...nr}}),z.inputSequence!==Rr)ar("job_input_sequence")}continue}let ke=mt(z)||Ke?void 0:R.shift();if(ke){M-=$o(ke);let We=++G;try{z=await qe("data"in ke?{jobId:l.jobId,action:"input",input:{sequence:We,dataBase64:ke.data.toString("base64")}}:{jobId:l.jobId,action:"resize",input:{sequence:We,cols:ke.cols,rows:ke.rows}})}catch(rr){if(!(rr instanceof r)||rr.code!=="job_input_backpressure")throw rr;G-=1,R.unshift(ke),M+=$o(ke),Ke=!0;continue}if(z.inputSequence!==We)ar("job_input_sequence")}else if(await new Promise((We)=>{let rr=setTimeout(We,Ke||!Be?10:50);if(S=()=>{clearTimeout(rr),We()},w.signal.aborted||!Ke&&R.length)S()}),Ke=!1,S=()=>{},!w.signal.aborted&&Be)try{z=await qe({jobId:l.jobId,action:"inspect",input:{after:F}})}catch(We){if(!J||!(We instanceof r)||We.code!=="cancelled")throw We}}}catch(le){ve??=le}finally{if(re=!1,R.length=0,clearTimeout(W),e.signal.removeEventListener("abort",x),x(),I&&(!z||!mt(z)))try{z=await Ie()}catch{z=void 0}try{if(!z||!mt(z)||z.pty?.cleanup!=="confirmed")ar("pty_cleanup_unconfirmed");let le=Re(z);if(_.readyState===Rn.OPEN)await new Promise((he)=>{let Oe=setTimeout(he,500);_.send(JSON.stringify({t:"exit",code:z.exitCode,receipt:le}),()=>{clearTimeout(Oe),he()})});await Ve("pty.stopped",le)}catch(le){ve??=le}_.terminate()}if(ve)throw ve;if(e.signal.aborted)ar("cancelled");if(!z)ar("pty_cleanup_unconfirmed");return{receipt:Re(z)}}import{createHash as Ii,randomUUID as In}from"crypto";import{spawnSync as Xo}from"child_process";import{closeSync as Jo,constants as On,fstatSync as Ai,fsyncSync as Ti,lstatSync as Ht,mkdirSync as Di,mkdtempSync as es,openSync as Vo,readFileSync as Ci,readdirSync as rs,realpathSync as Ct,rmSync as Pn,unlinkSync as Hi}from"fs";import{createConnection as Ni}from"net";import{dirname as Li,join as nt,sep as Bi}from"path";import{tmpdir as Wi}from"os";var hr=new Map,Jr=new Map;function Ur(e,l){return Ii("sha256").update(JSON.stringify([e,l])).digest("hex")}function ht(e){try{Di(e,{mode:448})}catch(f){if(!(f instanceof Error&&("code"in f)&&f.code==="EEXIST"))throw f}let l=Ht(e);if(!l.isDirectory()||l.isSymbolicLink()||!A(l)||Ct(e)!==e)throw new r("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function Ui(e){let l;try{l=Ht(e)}catch(f){if(f instanceof Error&&"code"in f&&f.code==="ENOENT")return!1;throw f}return!l.isDirectory()||l.isSymbolicLink()||rs(e).length>0}function gr(e){let l=Ur(e.root,e.runId),f=e.previousRuntimeDirectories?.find((x)=>Ui(nt(x,"jobs",l.slice(0,16))))??e.runtimeDirectory;ht(f);let _=nt(f,"jobs");ht(_);let w=nt(_,l.slice(0,16));if(e.maxScopes!==void 0){let x=rs(_);if(!Number.isSafeInteger(e.maxScopes)||e.maxScopes<1||x.length>e.maxScopes||!x.includes(l.slice(0,16))&&x.length>=e.maxScopes)throw new r("process_journal_capacity","Managed process receipt capacity is full; preserve uncertain jobs and reconcile their existing receipts before starting more work.")}ht(w);let S=es(nt(Qo(),"reason-j-"));try{return ht(S),{journalDirectory:w,scopeId:l,launchDirectory:S,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${In()}`:nt(S,"control.sock"),disposeSocket:()=>Pn(S,{recursive:!0,force:!0})}}catch(x){throw Pn(S,{recursive:!0,force:!0}),x}}var zi=60000,Ki=5000;function Gi(e){if(process.platform==="win32")return Ji(e);let l=Xo("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:2000,env:{...process.env,LC_ALL:"C",LANG:"C"}}),f=l.status===0?/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(l.stdout.trim()):null,_=f?"JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(f[1]):-1;if(!f||_<0||_%3!==0)return null;let w=new Date(Number(f[6]),_/3,Number(f[2]),Number(f[3]),Number(f[4]),Number(f[5])).getTime();return Number.isFinite(w)?w:null}function Ji(e){let l=Xo(C("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:De()}),f=l.status===0?Date.parse(l.stdout.trim()):Number.NaN;return Number.isFinite(f)?f:null}function ts(e,l={}){let f=nt(e.journalDirectory,"owner.lock"),_;try{_=Vo(f,On.O_RDONLY|On.O_NOFOLLOW)}catch{return null}try{let w=Ai(_);if(!w.isFile()||w.nlink!==1||!A(w)||w.size>4096)return null;let S=null;try{S=JSON.parse(Ci(_,"utf8"))}catch{}let x;if(S===null){if((l.now??Date.now)()-w.mtimeMs<zi)return null;x={reason:"never_written",executorLaunchId:null}}else{let{version:M,scopeId:G,pid:F,createdAtMs:I,executorLaunchId:re}=S;if(M!==1||G!==e.scopeId||typeof re!=="string"||typeof F!=="number"||!Number.isSafeInteger(F)||F<1||F===process.pid||typeof I!=="number"||!Number.isSafeInteger(I))return null;if(!(l.exists??((z)=>{try{return process.kill(z,0),!0}catch(fe){return!(fe instanceof Error&&("code"in fe)&&fe.code==="ESRCH")}}))(F))x={reason:"owner_exited",executorLaunchId:re};else{let z=(l.startedAtMs??Gi)(F);if(z===null||z<=I+Ki)return null;x={reason:"pid_reused",executorLaunchId:re}}}let W=Ht(f);if(W.dev!==w.dev||W.ino!==w.ino)return null;Hi(f);let R=Vo(e.journalDirectory,On.O_RDONLY);try{Ti(R)}finally{Jo(R)}return x}catch{return null}finally{Jo(_)}}function ns(e){let l={...e,workspace:e.workspace&&Object.freeze({...e.workspace}),previewAuthority:e.previewAuthority&&Object.freeze({...e.previewAuthority,owner:Object.freeze({...e.previewAuthority.owner}),deniedPorts:new Set(e.previewAuthority.deniedPorts)})},f=Ur(l.root,l.runId);if(hr.has(f)||l.operationId!==void 0&&Jr.has(l.operationId))throw new r("hands_jobs_busy","The Session already has a live Hands job supervisor.");let _={binding:l,key:f,terminals:new Map};if(l.previewAuthority&&l.environment)_.previews=Fo({authority:l.previewAuthority,runId:l.runId,expiresAtMs:l.expiresAtMs,executorLaunchId:l.executorLaunchId,environment:l.environment,isCurrent:()=>hr.get(_.key)===_,identity:()=>{try{return gt(l)}catch{return null}},inspect:(w,S)=>{if(hr.get(_.key)!==_)throw new r("preview_unavailable","The Hands supervisor is no longer current.");return os(l,{jobId:w,action:"inspect",input:{after:0}},S)}});if(hr.set(f,_),l.operationId!==void 0)Jr.set(l.operationId,_);return()=>{if(hr.get(_.key)===_)hr.delete(_.key);if(l.operationId!==void 0&&Jr.get(l.operationId)===_)Jr.delete(l.operationId);_.previews?.dispose();for(let w of _.terminals.values())w.abort()}}var Vi=5000,qi=20;async function eo(e){let l=(w)=>{throw new r("hands_rebind_unavailable",w)};if(!N(e.operationId)||!N(e.runId)||!N(e.fenceId)||!U(e.targetGeneration))l("Reason sent an invalid Hands rebind.");let f=Jr.get(e.operationId);if(!f||f.binding.root!==e.root)return l("No live Hands supervisor owns this operation.");for(let w=Date.now()+Vi;;){if(e.signal?.aborted)l("The Hands rebind was cancelled.");if(Jr.get(e.operationId)!==f)l("The Hands supervisor is no longer current.");let S=null;try{S=gt(f.binding)}catch{}if(S&&S.generation===e.targetGeneration&&S.fenceId===e.fenceId)break;if(S&&S.generation>e.targetGeneration||Date.now()>=w)l("The executor did not adopt this take.");await new Promise((x)=>setTimeout(x,qi))}if(Jr.get(e.operationId)!==f||hr.get(f.key)!==f)l("The Hands supervisor is no longer current.");let _=Ur(e.root,e.runId);if(f.key===_)return;if(hr.has(_))l("The taking run already has a live Hands job supervisor.");hr.delete(f.key);for(let w of f.terminals.values())w.abort();f.key=_,hr.set(_,f)}function at(e){let l="operationId"in e?Jr.get(e.operationId):hr.get(Ur(e.root,e.runId)),f=l&&l.binding.root===e.root?l.binding:void 0;if(!f?.environment||f.expiresAtMs<=Date.now())throw new r("environment_unavailable","No live Hands supervisor owns this environment.");return f.environment.install(e.payload)}async function to(e){let l=hr.get(Ur(e.root,e.runId));if(!l?.previews||!e.owner)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return l.previews.open(e.payload,e.owner,e.signal)}async function ro(e){let l=hr.get(Ur(e.root,e.runId));if(!l?.previews||!e.owner||e.signal.aborted)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return l.previews.close(e.payload,e.owner)}async function no(e){let l=Ur(e.root,e.runId),f=hr.get(l),_=f?.binding,w=_?.runId,S=_?.previewAuthority,x=_?.environment,W=e.owner&&{...e.owner},R=e.authority&&{...e.authority},M=()=>{throw new r("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!f||!_||!S||!x||!W||!R||!_.workspace)return M();let G=Object.freeze({..._.workspace}),F=gt(_),I=x.current(),re=()=>{if(hr.get(l)!==f||W.organization_id!==S.owner.organization_id||W.user_id!==S.owner.user_id||W.device_id!==S.owner.device_id||e.deviceId!==S.owner.device_id||e.rootId!==S.rootId||O(e.workspace)!==O(G))M();let z=gt(_),fe=x.current();if(z.generation!==F.generation||z.fenceId!==F.fenceId||fe.run_id!==w||fe.device_id!==e.deviceId||fe.root_id!==e.rootId||fe.snapshot_id!==I.snapshot_id||fe.revision!==I.revision||fe.binding.target_generation!==F.generation||fe.binding.target_fence_id!==F.fenceId||R.device_id!==e.deviceId||R.binding!==fe.binding.kind||R.target_revision!==fe.binding.target_revision||R.root_grant_revision!==fe.binding.root_grant_revision||R.target_generation!==F.generation||R.target_fence_id!==F.fenceId)M()};if(re(),new URL(e.session.relayUrl).origin!==S.relayOrigin||f.terminals.has(e.session.jobId)||f.terminals.size>=4)return M();let J=new AbortController;f.terminals.set(e.session.jobId,J);try{return await Go({session:{...e.session,leaseExpiresAtMs:Math.min(e.session.leaseExpiresAtMs,F.expiresAtMs,Date.parse(I.expires_at))},signal:AbortSignal.any([e.signal,J.signal]),emit:e.emit,binding:{assertCurrent:re,environment:{revision:I.revision,snapshotId:I.snapshot_id},scope:{runId:e.runId,deviceId:e.deviceId,rootId:e.rootId,workspace:G,binding:I.binding.kind,targetRevision:I.binding.target_revision,rootGrantRevision:I.binding.root_grant_revision,generation:F.generation,fenceId:F.fenceId,executorLaunchId:F.executorLaunchId},request:(z,fe)=>_r(F,zr(JSON.stringify({...z,type:"job",version:2,generation:F.generation,id:In()})),fe)}})}finally{if(f.terminals.get(e.session.jobId)===J)f.terminals.delete(e.session.jobId)}}async function io(e){if(ce(e.payload.jobId))throw new r("pty_binding_required","PTY jobs require the bound terminal capability.");let l=hr.get(Ur(e.root,e.runId))?.binding;if(!l||l.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","No live Hands supervisor owns this Session and root.");return os(l,e.payload,e.signal)}var Yi=1e4,Xi=20,Zi=Se/2,ea=Je/2,ra=(e)=>e.output.reduce((l,f)=>l+f.text.length,0);async function os(e,l,f){if(Object.keys(l).some((M)=>!["jobId","action","input","waitForExitMs"].includes(M)))throw new r("invalid_payload","Unexpected job control field.");let{waitForExitMs:_,...w}=l;if(_!==void 0&&(w.action!=="start"||typeof w.input!=="object"||w.input===null||!("script"in w.input)||typeof _!=="number"||!Number.isSafeInteger(_)||_<1||_>Yi))throw new r("invalid_payload","Only a script start may wait for its job, within its bound.");let S=(M)=>{let G=gt(e);return _r(G,zr(JSON.stringify({...M,type:"job",version:2,generation:G.generation,id:In()})),f)},x=await S(w);if(_===void 0)return x;let W=Date.now()+_,R=x;while(R.ok&&["starting","running"].includes(R.job.state)&&R.job.output.length<Zi&&ra(R.job)<ea&&!f.aborted&&Date.now()<W){if(await new Promise((M)=>setTimeout(M,Math.min(Xi,W-Date.now()))),f.aborted)break;try{let M=await S({jobId:w.jobId,action:"inspect",input:{after:0}});if(!M.ok)break;R=M}catch{break}}return R}function gt(e){if(e.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","Hands authority expired.");let l=e.readIdentity?e.readIdentity():e;if(!l||!U(l.generation)||!N(l.fenceId)||l.generation<e.generation||l.generation===e.generation&&l.fenceId!==e.fenceId)throw new r("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return e.generation=l.generation,e.fenceId=l.fenceId,{...e}}function _r(e,l,f){if(f.aborted)return Promise.reject(new r("cancelled","Job control was cancelled."));return new Promise((_,w)=>{let S=Ni(e.socketPath),x="",W=!1,R,M=(F,I)=>{if(W)return;if(W=!0,clearTimeout(R),f.removeEventListener("abort",G),S.destroy(),F)w(F);else _(I)},G=()=>M(new r("cancelled","Job control waiter cancelled; inspect before retrying mutations."));f.addEventListener("abort",G,{once:!0}),S.setEncoding("utf8"),R=setTimeout(()=>M(new r("hands_job_result_unknown","Job control timed out; inspect before retrying mutations.")),Math.min(1e4,Math.max(1,e.expiresAtMs-Date.now()))),S.on("error",()=>M(new r("hands_job_result_unknown","Hands job control connection failed."))),S.once("connect",()=>S.write(JSON.stringify({version:1,scopeId:e.scopeId,fenceId:e.fenceId,executorLaunchId:e.executorLaunchId,request:l})+`
3
- `)),S.on("data",(F)=>{if(x+=F,Buffer.byteLength(x)>Ze)M(new r("hands_job_result_unknown","Hands job result exceeded its bound."))}),S.once("end",()=>{if(Date.now()>=e.expiresAtMs){M(new r("hands_job_result_unknown","Hands authority expired before the result was acknowledged."));return}try{let F=qr(x.trim());if(F.id!==l.id||F.generation!==e.generation||F.ok&&F.job.jobId!==l.jobId)throw Error("identity");M(void 0,F)}catch{M(new r("hands_job_result_unknown","Hands job response identity or shape was invalid."))}}),S.once("close",()=>{if(!W)M(new r("hands_job_result_unknown","Hands job control closed before an acknowledged result."))})})}function qo(e){let l=Ct(e.root),f=e.authority,_=Date.parse(e.leaseUntil),w=()=>{if(e.signal.throwIfAborted(),!Number.isFinite(_)||_<=Date.now())throw Error("local_device_gh_lease_expired")};if(w(),f.readOnly&&f.generation===null)return{root:l,readOnly:!0,signal:e.signal,deadlineMs:_,assertCurrent:w};let S=Ur(l,e.runId),x=hr.get(S),W=x?.binding;if(!W?.environment||!W.workspace||W.localGithubConfinement!==!0)throw Error("local_device_gh_confinement_unavailable");let R=W.environment.current(),M=()=>{w();let F=W.environment.current(),I=gt(W);if(hr.get(S)!==x||F.github_auth!=="local_gh"||F.run_id!==W.runId||f.runId!==e.runId||F.device_id!==f.deviceId||F.root_id!==f.rootId||String(F.binding.root_grant_revision)!==f.rootRevision||F.binding.target_generation!==f.generation||F.binding.target_fence_id!==f.fenceId||I.generation!==f.generation||I.fenceId!==f.fenceId||F.snapshot_id!==R.snapshot_id||F.revision!==R.revision)throw Error("local_device_gh_authority_changed")};M();let G=ie(l,W.workspace);return{root:G.boundary,signal:e.signal,deadlineMs:_,privateDirectory:Li(W.environment.path),repoPath:G.path,readOnly:f.readOnly,forbiddenSecretValues:Object.values(R.variables),secretNames:(F)=>Object.entries(R.variables).filter(([,I])=>I.trim()===F.trim()).map(([I])=>`variable ${I}`),assertCurrent:M}}async function oo(e,l){let f=Pe.parse(e.request),_=oe.parse(e.authority);if(_.contributorRefresh&&f.kind==="read"&&_.readOnly)return l(qo(e));let w=Boolean(_.contributorRefresh);if(w&&(_.merge||f.kind!=="pr_mutation"||f.mutation.action!=="edit"||typeof f.mutation.body!=="string"||f.mutation.title!==void 0||f.mutation.base!==void 0||_.readOnly||_.runId!==e.runId||_.repoFullName!==f.repoFullName))throw Error("local_device_gh_contributor_refresh_authority_invalid");if(f.kind!=="pr_merge"&&!w){if(_.merge)throw Error("local_device_gh_merge_authority_invalid");return l(qo(e))}if(!w&&(!_.merge||_.readOnly||_.runId!==e.runId||_.repoFullName!==f.repoFullName||_.merge.source==="agent"&&(_.generation===null||_.fenceId===null)))throw Error("local_device_gh_merge_authority_invalid");let S=Ct(e.root),x=Ht(S),W=Date.parse(e.leaseUntil);if(!Number.isFinite(W)||W<=Date.now())throw Error("local_device_gh_lease_expired");let R=Ct(Wi());if(R===S||R.startsWith(S+Bi))throw Error("local_device_gh_private_scope_unavailable");let M=es(nt(R,"reason-gh-merge-"));try{ht(M);let G=()=>{if(e.signal.throwIfAborted(),Date.now()>=W)throw Error("local_device_gh_lease_expired");let F=Ht(e.root);if(F.isSymbolicLink()||F.dev!==x.dev||F.ino!==x.ino||Ct(e.root)!==S)throw Error("local_device_gh_authority_changed");ht(M)};return G(),await l({root:S,readOnly:!1,privateDirectory:M,forbiddenSecretValues:[],signal:e.signal,deadlineMs:W,assertCurrent:G})}finally{Pn(M,{recursive:!0,force:!0})}}var as=43200000;function bt(e){return Number.isSafeInteger(e)&&Math.abs(e)<=8640000000000000?e:null}function ss(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function is(e,l){return Object.keys(e).length===l.length&&l.every((f)=>Object.hasOwn(e,f))}function so(e){if(!ss(e)||!is(e,["version","outcome","clock_source","validation_now_ms","expiry_ms","remaining_ms","maximum_lifetime_ms","cli_artifact"])||e.version!==1||e.maximum_lifetime_ms!==43200000||typeof e.outcome!=="string"||!["accepted","parse","noncanonical","expired","over_cap"].includes(e.outcome)||typeof e.clock_source!=="string"||!["date_now","injected"].includes(e.clock_source))return null;for(let _ of["validation_now_ms","expiry_ms"]){let w=e[_];if(w!==null&&(typeof w!=="number"||bt(w)===null))return null}if(e.remaining_ms!==null&&(typeof e.remaining_ms!=="number"||!Number.isSafeInteger(e.remaining_ms)))return null;let l=typeof e.expiry_ms==="number"&&typeof e.validation_now_ms==="number"?e.expiry_ms-e.validation_now_ms:null;if(e.remaining_ms!==(l!==null&&Number.isSafeInteger(l)?l:null))return null;if(e.outcome==="parse"&&e.expiry_ms!==null)return null;if(e.outcome!=="parse"&&e.expiry_ms===null)return null;if(e.outcome==="expired"&&!(typeof l==="number"&&l<=0))return null;if(e.outcome==="over_cap"&&!(typeof l==="number"&&l>43200000))return null;if(e.outcome==="accepted"&&!(typeof l==="number"&&l>0&&l<=43200000))return null;let f=e.cli_artifact;if(!ss(f)||!is(f,["kind","status","sha256","observed_at_ms"])||f.observed_at_ms!==null&&(typeof f.observed_at_ms!=="number"||bt(f.observed_at_ms)===null))return null;if(f.kind==="entrypoint_file"){if(f.status!=="observed"||typeof f.sha256!=="string"||!/^[a-f0-9]{64}$/.test(f.sha256)||f.observed_at_ms===null)return null}else if(f.kind!=="unavailable"||f.sha256!==null||typeof f.status!=="string"||!["unsupported_entrypoint","read_failed","file_changed","size_limit","time_limit"].includes(f.status))return null;return e}var An=c({kind:s(["workspace_source","mcp_control"]),target_revision:o().int().nonnegative(),root_grant_revision:o().int().positive()}),cs=new RegExp(lt.tokenPattern),ta=c({token_url:At().max(2048),request_token:t().min(1).max(8192).regex(cs),aws_credentials_url:At().max(2048).nullable()});function ds(e,l){let f=(_,w)=>{try{let S=new URL(_);return S.origin===new URL(l).origin&&S.pathname===w&&!S.username&&!S.password&&!S.search&&!S.hash}catch{return!1}};if(!cs.test(e.request_token)||!f(e.token_url,lt.tokenPath)||e.aws_credentials_url!==null&&!f(e.aws_credentials_url,lt.awsPath))return null;return{REASON_OIDC_TOKEN_URL:e.token_url,REASON_OIDC_REQUEST_TOKEN:e.request_token,...e.aws_credentials_url!==null?{AWS_CONTAINER_CREDENTIALS_FULL_URI:e.aws_credentials_url,AWS_CONTAINER_AUTHORIZATION_TOKEN:e.request_token}:{}}}function ls(e){return new TextEncoder().encode(e).byteLength}function na(e){return ls(JSON.stringify(e)+`
4
- `)}var yr=c({version:n(1),snapshot_id:k(),revision:o().int().positive(),run_id:t().min(1).max(160),device_id:k(),root_id:k(),binding:An.extend({target_generation:o().int().positive(),target_fence_id:k()}),expires_at:y.datetime({offset:!0}),variables:ee(t().max(128).regex(Lt),t().refine((e)=>!e.includes("\x00")&&ls(e)<=V.valueBytes)).refine((e)=>Object.keys(e).length<=V.variables),github_auth:n("local_gh").optional(),git:c({base_url:At().max(2048),token:t().min(1).max(4096).regex(/^[A-Za-z0-9._~-]+$/),expires_at:y.datetime({offset:!0})}).nullable(),cloud_access:ta.optional()}).refine((e)=>e.github_auth!=="local_gh"||e.git===null,"conflicting git authority").refine((e)=>na(e)<=V.snapshotBytes,"snapshot too large");import{spawn as oa}from"child_process";import{basename as sa,isAbsolute as Pu}from"path";var ia=0,us=120000,fs=15000,aa=65536;function Tn(e=process.execPath,l=process.argv[1]){let f=sa(e),_=(f.startsWith("bun")||f.startsWith("node"))&&typeof l==="string"&&l.length>0;return{command:e,prefix:_?[l]:[]}}function ao(e={}){let{command:l,prefix:f}=Tn(e.executablePath,e.sourceEntrypoint),_=e.spawnProcess??oa,w=e.now??Date.now,S=null,x=0,W=!1,R=(G)=>{try{G.kill("SIGKILL")}catch{}},M=()=>{if(W)return;if(S&&w()-x<us-fs)return;if(S){let F=S;S=null,R(F)}let G;try{G=_(l,[...f,"__device","__hands-worker","--handoff-fd",String(ia)],{cwd:"/",env:{PATH:process.env.PATH??"/usr/local/bin:/usr/bin:/bin"},shell:!1,stdio:["pipe","ignore","pipe"]})}catch{return}S=G,x=w(),G.on("error",()=>{if(S===G)S=null}),G.once("exit",(F,I)=>{if(S!==G)return;S=null,e.log?.("hands.worker_prespawn_exited",{exit_code:F,exit_signal:I})}),e.log?.("hands.worker_prespawned",{pid:G.pid??null})};return{arm:M,take(G){let F=S;if(!F||W)return null;let I=G.args.at(-1),re=G.options.env,J=G.options.cwd,z=[...f,"__device","__hands-worker","--config"];if(G.command!==l||G.args.length!==z.length+1||z.some((Re,$e)=>G.args[$e]!==Re)||typeof I!=="string"||!re||typeof J!=="string"||G.options.shell||JSON.stringify(G.options.stdio)!==JSON.stringify(["ignore","ignore","pipe"]))return null;S=null;let fe=F.stdin,ve={configPath:I,cwd:J,env:Object.fromEntries(Object.entries(re).filter((Re)=>typeof Re[1]==="string"))},be=JSON.stringify(ve);if(F.exitCode!==null||F.signalCode!==null||!fe||fe.destroyed||w()-x>=us-fs||Buffer.byteLength(be,"utf8")>aa)return R(F),null;return fe.on("error",()=>{return}),fe.end(be),F.once("exit",()=>{M()}),e.log?.("hands.worker_prespawn_taken",{pid:F.pid??null}),F},adopt(G){G.once("exit",()=>{M()})},close(){if(W=!0,S)R(S);S=null}}}import{accessSync as pa,constants as _a,statSync as ma}from"fs";import{homedir as ha,tmpdir as ga,userInfo as ba}from"os";import{delimiter as wa,win32 as ya}from"path";var ca=new Set(["ALL_PROXY","BUN_BE_BUN","BUN_OPTIONS","CURL_CA_BUNDLE","GIT_SSL_CAINFO","GRPC_DEFAULT_SSL_ROOTS_FILE_PATH","HTTPS_PROXY","HTTP_PROXY","NO_PROXY","NODE_EXTRA_CA_CERTS","NODE_OPTIONS","NODE_TLS_REJECT_UNAUTHORIZED","REQUESTS_CA_BUNDLE","SSLKEYLOGFILE","SSL_CERT_DIR","SSL_CERT_FILE","all_proxy","http_proxy","https_proxy","no_proxy"]);var da=["BUN_CONFIG_","BUN_INSPECT","DYLD_","NODE_DEBUG"],la=new Set(["BUN_INSTALL"]);var ua=/^--(?:max-old-space-size|max-semi-space-size|stack-size)=\d{1,9}$/;function fa(e){return(e??"").split(/\s+/).filter(Boolean).every((l)=>ua.test(l.replaceAll("_","-")))}function ps(e){return Object.keys(e).filter((l)=>ca.has(l)&&!(l==="NODE_OPTIONS"&&fa(e[l]))||da.some((f)=>l.startsWith(f))||l.startsWith("BUN_")&&!la.has(l)).sort()}var va=new Set(["HOME","PATH","PWD","OLDPWD","SHLVL","_","TMPDIR","TMP","TEMP","SHELL","BASH_ENV","ENV","ZDOTDIR","PROMPT_COMMAND","IFS","CDPATH","GLOBIGNORE","SHELLOPTS","BASHOPTS","NODE_PATH"]),ka=/^(?:ARA_|REASON_|PI_|GIT_|GH_|GITHUB_|LD_|DYLD_|BUN_|BASH_FUNC_|SSH_)/,Sa=/TOKEN|SECRET|PASSW|PASSPHRASE|CREDENTIAL|API_?KEY|ACCESS_?KEY|PRIVATE_?KEY|AUTH/i,Ea=/^[A-Za-z_][A-Za-z0-9_]*$/;function wr(e=process.env){let l=(w)=>{if(!(process.platform==="win32"?ya.isAbsolute(w):w.startsWith("/"))||/[\0\r\n]/.test(w)||w.length>32768)throw Error("invalid_host_execution_environment");return w};if(e.PATH!==void 0&&(/[\0\r\n]/.test(e.PATH)||e.PATH.length>32768))throw Error("invalid_host_execution_environment");let f=new Set(ps(e)),_=Object.fromEntries(Object.entries(e).filter((w)=>{let[S,x]=w;return typeof x==="string"&&x.length<=32768&&!x.includes("\x00")&&S.length<=128&&Ea.test(S)&&!f.has(S)&&!va.has(S)&&!ka.test(S)&&!Sa.test(S)}).sort(([w],[S])=>w.localeCompare(S)).slice(0,512));return{home:l(e.HOME||(process.platform==="win32"?e.USERPROFILE:void 0)||ha()),path:((w)=>process.platform==="win32"?kn(w):w)(Ar(e.PATH??"").join(wa)||Cr),temporaryDirectory:l(e.TMPDIR||e.TMP||e.TEMP||ga()),variables:_}}function br(e=process.env,l=()=>ba().shell){if(process.platform==="win32")return se();let f=(w)=>{if(!w||!/^\/[A-Za-z0-9._/-]*\/(?:bash|zsh)$/.test(w))return!1;try{return pa(w,_a.X_OK),ma(w).isFile()}catch{return!1}};if(f(e.SHELL))return e.SHELL;let _;try{_=l()}catch{_=void 0}return f(_)?_:"/bin/zsh"}import{readdir as Ra}from"fs/promises";var Oa=15000;function wn(e){let l=e instanceof Error&&"code"in e?e.code:null;return l==="EPERM"||l==="EACCES"}function bn(e){return new r("folder_access_denied",`macOS blocked Reason from opening ${e}. Allow Reason in System Settings \u203A Privacy & Security \u203A Files and Folders `+"(or Full Disk Access), then restart the Reason app or worker on this Mac and try again: until it restarts it keeps the earlier refusal.")}async function _s(e,{timeoutMs:l=Oa,open:f=(_)=>Ra(_)}={}){let _,w=new Promise((S)=>{_=setTimeout(()=>S("pending"),l)});try{if(await Promise.race([f(e).then(()=>"open"),w])==="pending")throw new r("folder_access_pending",`macOS is asking whether Reason may open ${e}. Answer the prompt on this Mac, then try again.`)}catch(S){if(wn(S))throw bn(e);if(S instanceof r)throw S}finally{clearTimeout(_)}}import{chmodSync as oc,closeSync as sc,constants as Un,fstatSync as ic,lstatSync as Cs,openSync as ac,readSync as cc,realpathSync as zn,unlinkSync as dc}from"fs";import{lookup as lc}from"dns/promises";import{createRequire as uc}from"module";import{request as fc}from"http";import{request as pc}from"https";import st from"net";import{platform as js}from"os";import{basename as _c,extname as mc,isAbsolute as Hs,relative as $n,resolve as vt,sep as Gn}from"path";var ms=String.raw`
2
+ import{Jt,j}from"./vm-hands-entry-lite-zwnevt4c.js";import{ue,Ce,X,Ae,de,ir,et,Y,I,U,rn}from"./vm-hands-entry-lite-a0g6c3wr.js";import{Ho,ri}from"./vm-hands-entry-lite-mc5y3xr9.js";import{To,P,Je,Se,Xe,ne,Ye,Vn,Ee,Qt,ae,H,N,ce,zr,qr,Kn}from"./vm-hands-entry-lite-mpy0j95a.js";import{Pe,oe,pe,Z,Te,q,Q}from"./vm-hands-entry-lite-5n4ay2gs.js";import{Lt,Pr,lt,V,O,T,b,Cn}from"./vm-hands-entry-lite-06e9xm3v.js";import{Cr,Ar,xn,lo,Ue,kn}from"./vm-hands-entry-lite-c5pyaaax.js";import{K}from"./vm-hands-entry-lite-yfvz7s4m.js";import{ji}from"./vm-hands-entry-lite-3thdz953.js";import{p,ze,$t,ut,uo,_e,we}from"./vm-hands-entry-lite-yj9hbtm1.js";import{v,h,fo}from"./vm-hands-entry-lite-k2kx2ex0.js";import{E}from"./vm-hands-entry-lite-72nj66ab.js";import{tr}from"./vm-hands-entry-lite-8n2hetqw.js";import{a,Uo,zo,ie,Wo}from"./vm-hands-entry-lite-gmxfz6k2.js";import{L,$i,Mi,Xo,y,t,k,At,o,d,u,i,c,g,ee,s,n}from"./vm-hands-entry-lite-bjtcy8n6.js";import{Fi}from"./vm-hands-entry-lite-pzj5s203.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{Zo,se,Qo,C,Oe,$e,A}from"./vm-hands-entry-lite-q13ekwev.js";var Si=()=>{let e={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"},map:{unit:"entries",verb:"to have"}};function l(w){return e[w]??null}let f={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",mac:"MAC address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"},_={nan:"NaN"};return(w)=>{switch(w.code){case"invalid_type":{let S=_[w.expected]??w.expected,x=Xo(w.input),W=_[x]??x;return`Invalid input: expected ${S}, received ${W}`}case"invalid_value":if(w.values.length===1)return`Invalid input: expected ${Mi(w.values[0])}`;return`Invalid option: expected one of ${$i(w.values,"|")}`;case"too_big":{let S=w.inclusive?"<=":"<",x=l(w.origin);if(x)return`Too big: expected ${w.origin??"value"} to have ${S}${w.maximum.toString()} ${x.unit??"elements"}`;return`Too big: expected ${w.origin??"value"} to be ${S}${w.maximum.toString()}`}case"too_small":{let S=w.inclusive?">=":">",x=l(w.origin);if(x)return`Too small: expected ${w.origin} to have ${S}${w.minimum.toString()} ${x.unit}`;return`Too small: expected ${w.origin} to be ${S}${w.minimum.toString()}`}case"invalid_format":{let S=w;if(S.format==="starts_with")return`Invalid string: must start with "${S.prefix}"`;if(S.format==="ends_with")return`Invalid string: must end with "${S.suffix}"`;if(S.format==="includes")return`Invalid string: must include "${S.includes}"`;if(S.format==="regex")return`Invalid string: must match pattern ${S.pattern}`;return`Invalid ${f[S.format]??w.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${w.divisor}`;case"unrecognized_keys":return`Unrecognized key${w.keys.length>1?"s":""}: ${$i(w.keys,", ")}`;case"invalid_key":return`Invalid key in ${w.origin}`;case"invalid_union":if(w.options&&Array.isArray(w.options)&&w.options.length>0)return`Invalid discriminator value. Expected ${w.options.map((x)=>`'${x}'`).join(" | ")}`;return"Invalid input";case"invalid_element":return`Invalid value in ${w.origin}`;default:return"Invalid input"}}};function gn(){return{localeError:Si()}}L(gn());class _t extends Error{}function Co(e){let l;try{l=new URL(e)}catch{throw new _t("The proxy must be a URL like https://proxy.example.com:3128.")}if(l.protocol!=="https:"&&l.protocol!=="http:")throw new _t("The proxy URL must use the https or http scheme.");if(!l.hostname)throw new _t("The proxy URL must name a host.");if(l.port!==""&&Number(l.port)<1)throw new _t("The proxy URL must use a port between 1 and 65535.");if(l.pathname!==""&&l.pathname!=="/"||l.search||l.hash)throw new _t("The proxy URL must not carry a path, query, or fragment.");return l.toString()}import{createHash as Ei}from"crypto";import{isAbsolute as Lo,join as Bo,relative as jo,resolve as qt,sep as Mo}from"path";var Vt=t().min(1).refine(Lo,"absolute path required"),No=c({version:n(1),apiOrigin:At(),channel:s(["staging","production"]),stateDirectory:Vt,workspaceRoot:Vt,lifetime:s(["persistent","ephemeral"]),executionMode:s(["confined","host"]).default("confined"),name:t().min(1).max(160).default("Reason headless worker"),slots:o().int().min(1).max(4).default(1),shutdownGraceMs:o().int().min(0).max(300000).default(30000),proxy:c({version:n(Jt),url:t().refine((e)=>{try{return Co(e)===e}catch{return!1}},"invalid proxy URL"),caFile:Vt.optional()}).optional(),userChrome:d().optional(),cloudSessions:n(!0).optional(),localLogins:d().optional(),folders:u(Vt).min(1).max(31).optional()}),Ri=/^https:\/\/[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.trycloudflare\.com$/,B=g("channel",[No,No.extend({channel:n("local-qa"),apiOrigin:t()})]).superRefine((e,l)=>{if(e.channel==="local-qa"){if(!Ri.test(e.apiOrigin))l.addIssue({code:"custom",message:"local QA worker requires an exact HTTPS trycloudflare.com quick-tunnel origin"})}else{let _=new URL(e.apiOrigin);if(_.origin!==e.apiOrigin||_.username||_.password||_.protocol!=="https:"&&!(_.protocol==="http:"&&ri(_.origin))||!ri(_.origin)&&!Ho(e.channel,_.origin))l.addIssue({code:"custom",message:"API origin must match channel (or loopback)"})}if(!je(e.workspaceRoot,e.stateDirectory))l.addIssue({code:"custom",message:"state and workspace must be disjoint"});let f=e.folders??[];if(new Set([e.workspaceRoot,...f]).size!==f.length+1||f.some((_)=>!je(_,e.stateDirectory)))l.addIssue({code:"custom",message:"folders must be distinct and disjoint from state"})});function m(e){return Bo(e.stateDirectory,`headless-${e.channel}`)}function je(e,l){if(Fr(l,e))return!1;return!Fr(e,l)||E(Bo(Mo,jo(qt(e),qt(l))))}function Fr(e,l){let f=jo(qt(e),qt(l));return f===""||f!==".."&&!f.startsWith(`..${Mo}`)&&!Lo(f)}function te(e){let{proxy:l,userChrome:f,cloudSessions:_,localLogins:w,folders:S,...x}=e;return Ei("sha256").update(JSON.stringify(x)).digest("hex")}var Oi=4,xi=[2375,2376,9222,9229];function mr(e){let l=new Set(xi);for(let f of e){let _=new URL(f);l.add(Number(_.port||(["https:","wss:"].includes(_.protocol)?443:80)))}return l}function Gr(){throw new r("preview_unavailable","The live Hands preview binding is unavailable or stale.")}var Pi=60000;function Fo(e){let l=new AbortController,f=new Map,_=(R)=>JSON.stringify([R.jobId,R.port]);function w(R){let M=e.authority.owner;if(l.signal.aborted||!e.isCurrent()||e.expiresAtMs<=Date.now()||R.organization_id!==M.organization_id||R.user_id!==M.user_id||R.device_id!==M.device_id)Gr()}function S(R){let M;try{M=e.environment.current()}catch{return null}return M.binding.target_generation===R.generation&&M.binding.target_fence_id===R.fenceId&&M.run_id===e.runId&&M.device_id===e.authority.owner.device_id&&M.root_id===e.authority.rootId?M:null}async function x(R,M,G){let F=await W(R,M,G);if(F!=="moved")return F;let D=await W(R,M,G);return D==="moved"?null:D}async function W(R,M,G){try{w(e.authority.owner);let F=e.identity();if(!F||G.aborted||R.expiresAtMs<=Date.now()||R.expiresAtMs>e.expiresAtMs)return null;let D=M.opened,re=D!==void 0&&F.generation>D.generation,J=S(F);if(re){if(J){if(J.revision<=D.revision||R.expiresAtMs>Date.parse(J.expires_at)||J.binding.target_revision!==D.attachmentRevision||J.binding.root_grant_revision!==D.grantRevision)return null;M.recoveringSinceMs=void 0}else if(Date.now()-(M.recoveringSinceMs??=Date.now())>Pi)return null}else if(!J||R.expiresAtMs>Date.parse(J.expires_at)||D&&(F.generation!==D.generation||F.fenceId!==D.fenceId))return null;let z=await e.inspect(R.jobId,G),fe=e.identity(),ve=fe&&S(fe);w(e.authority.owner);let be=J&&{generation:F.generation,fenceId:F.fenceId,snapshotId:J.snapshot_id,revision:J.revision,attachmentRevision:J.binding.target_revision,grantRevision:J.binding.root_grant_revision},Re=re?D:be;if(G.aborted||!fe)return null;if(fe.generation!==F.generation||fe.fenceId!==F.fenceId||ve?.snapshot_id!==J?.snapshot_id||ve?.revision!==J?.revision)return"moved";let Fe=z.ok&&z.job.environmentSnapshotId!==void 0&&z.job.environmentRevision!==void 0?{snapshotId:z.job.environmentSnapshotId,revision:z.job.environmentRevision}:null;if(!z.ok||z.generation!==F.generation||!Re||!Fe)return null;if((Fe.snapshotId!==Re.snapshotId||Fe.revision!==Re.revision)&&(re||!e.environment.carried(Fe.snapshotId,Fe.revision)))return null;if(!D&&F.generation===R.generation&&F.fenceId===R.fenceId)M.opened={...Re,...Fe};return{executorLaunchId:e.executorLaunchId,job:z.job,binding:{organizationId:e.authority.owner.organization_id,userId:e.authority.owner.user_id,deviceId:e.authority.owner.device_id,rootId:e.authority.rootId,runId:e.runId,attachmentRevision:Re.attachmentRevision,grantRevision:Re.grantRevision,generation:Re.generation,fenceId:Re.fenceId,jobId:z.job.jobId,port:R.port,expiresAtMs:R.expiresAtMs}}}catch{return null}}return{async open(R,M,G){w(M);let{binding:F,deviceRelayUrl:D}=ut(R);if(G.aborted||F.expiresAtMs<=Date.now()||F.expiresAtMs>Date.now()+p.lifetimeMs||new URL(D).origin!==e.authority.relayOrigin)Gr();let re=_(F),J=f.get(re);if(J){if(!ze(J.binding,F)||J.relay!==D)Gr();if(await J.opened,!await $t(()=>J.port.check())||G.aborted||J.abort.signal.aborted)Gr();return{opened:!0,binding:F}}if(f.size>=Oi)Gr();let z=new AbortController,fe={},ve=we({binding:F,deniedPorts:e.authority.deniedPorts,readCurrentJob:()=>x(F,fe,z.signal)}),be=()=>z.abort();if(G.addEventListener("abort",be,{once:!0}),l.signal.addEventListener("abort",be,{once:!0}),G.aborted||l.signal.aborted)be();let Re=_e({binding:F,deviceRelayUrl:D,port:ve,signal:z.signal}),Fe={binding:F,relay:D,abort:z,port:ve,opened:Re};f.set(re,Fe);let qe=()=>{if(G.removeEventListener("abort",be),l.signal.removeEventListener("abort",be),f.get(re)===Fe)f.delete(re)};try{if((await Re).closed.then(qe),G.removeEventListener("abort",be),w(M),z.signal.aborted||!await $t(()=>ve.check()))Gr();return{opened:!0,binding:F}}catch{z.abort(),qe(),Gr()}},async close(R,M){w(M);let{binding:G}=uo(R),F=f.get(_(G));if(!F||!ze(F.binding,G))Gr();return F.abort.abort(),await F.opened.then((D)=>D.closed,()=>{return}),{closed:!0,binding:G}},dispose(){l.abort();for(let R of f.values())R.abort.abort();f.clear()}}}import{WebSocket as Rn}from"ws";var $o=(e)=>("data"in e)?e.data.length:e.bytes,Ko=2*Ye;function ar(e){throw new r(e,"The bound Hands terminal is unavailable or its outcome is unconfirmed.")}var mt=(e)=>!["starting","running"].includes(e.state);function Qi(e,l,f=Date.now()){let _=["relay_url","session_id","expires_at","cols","rows","pty","workspace"];if(Object.keys(e).length!==_.length||Object.keys(e).some((M)=>!_.includes(M))||!ae(l)||!ae(e.session_id)||typeof e.expires_at!=="string"||typeof e.relay_url!=="string"||e.relay_url.length>4096||![e.cols,e.rows].every((M)=>Number.isSafeInteger(M)&&Number(M)>=1&&Number(M)<=Ee))ar("invalid_pty_request");let w=e.pty;if(!w||typeof w!=="object"||Array.isArray(w))ar("invalid_pty_request");let S=w;if(Object.keys(S).length!==2||S.version!==1||!ce(S.jobId))ar("invalid_pty_request");let x;try{x=new URL(e.relay_url)}catch{return ar("invalid_pty_request")}if(!["ws:","wss:"].includes(x.protocol)||x.username||x.password||x.hash||x.protocol==="ws:"&&!["127.0.0.1","[::1]","localhost"].includes(x.hostname))ar("invalid_pty_request");let W=Date.parse(e.expires_at);if(!Number.isSafeInteger(W)||W<=f)ar("invalid_pty_request");return{workspace:U(e.workspace)??ar("invalid_pty_request"),session:{jobId:S.jobId,sessionId:e.session_id,operationId:l,relayUrl:x.href,cols:Number(e.cols),rows:Number(e.rows),leaseExpiresAtMs:Math.min(W,f+43200000)}}}async function Go(e){let{session:l,binding:f}=e;if(f.assertCurrent(),e.signal.aborted||Date.now()>=l.leaseExpiresAtMs)ar("cancelled");let _=new Rn(l.relayUrl,{followRedirects:!1,perMessageDeflate:!1,maxPayload:ne}),w=new AbortController,S=()=>{},x=()=>{w.abort(),S()};e.signal.addEventListener("abort",x,{once:!0});let W=setTimeout(x,Math.max(1,l.leaseExpiresAtMs-Date.now())),R=[],M=0,G=0,F=0,D=!1,re=!1,J=!1,z,fe,ve,be=(le)=>{ve=new r(le,"Bound terminal input was refused."),x()};_.on("error",()=>be("pty_relay_unavailable")),_.on("close",x),_.on("message",(le,he)=>{if(w.signal.aborted)return;if(!re){be("pty_not_ready");return}let xe=Array.isArray(le)?Buffer.concat(le):le instanceof ArrayBuffer?Buffer.from(le):le;if(xe.length===0)return;let Ke=R.at(-1),Le=he&&Ke!==void 0&&"data"in Ke&&Ke.data.length+xe.length<=ne;if(xe.length>ne||M+xe.length>Vn){be("pty_input_backpressure");return}if(Le)Ke.data=Buffer.concat([Ke.data,xe]);else if(he)R.push({data:Buffer.from(xe)});else try{let Be=JSON.parse(xe.toString("utf8"));if(Be&&Be.t==="close"&&Object.keys(Be).length===1){J=!0,x();return}if(!Be||Be.t!=="resize"||Object.keys(Be).length!==3||![Be.cols,Be.rows].every((ke)=>Number.isSafeInteger(ke)&&ke>=1&&ke<=Ee))throw Error("invalid_control");R.push({cols:Be.cols,rows:Be.rows,bytes:xe.length})}catch{be("invalid_pty_control");return}M+=xe.length,S()});function Re(le){return Kn(JSON.stringify({...f.scope,version:1,sessionId:l.sessionId,operationId:l.operationId,job:{...le,output:[],pty:le.pty?{...le.pty,output:[]}:void 0}}))}function Fe(le){if(!le.ok)ar(le.error);let he=le.job;if(le.generation!==f.scope.generation||he.jobId!==l.jobId||!he.pty||he.leaseExpiresAtMs>l.leaseExpiresAtMs||he.process&&he.process.executorLaunchId!==f.scope.executorLaunchId||he.process&&fe&&(he.process.pid!==fe.pid||he.process.processGroupId!==fe.processGroupId)||he.state!=="starting"&&(he.environmentRevision!==f.environment.revision||he.environmentSnapshotId!==f.environment.snapshotId))ar("pty_binding_changed");if(Re(he),he.process)fe??={...he.process};return he}async function qe(le){f.assertCurrent();let he=await f.request(le,w.signal);if(f.assertCurrent(),w.signal.aborted)ar("cancelled");let xe=Fe(he);if(xe.inputSequence!==G)ar("job_input_sequence");if(!mt(xe)&&xe.leaseExpiresAtMs<=Date.now())ar("pty_binding_changed");return xe}function ye(le){if(f.assertCurrent(),w.signal.aborted||_.readyState!==Rn.OPEN||_.bufferedAmount+Buffer.byteLength(le)>Ko)ar("pty_output_backpressure");_.send(le)}function We(le){if(le.firstCursor>F+1)F=le.firstCursor-1;for(let he of le.pty.output){if(he.cursor<=F)continue;if(he.cursor!==F+1)ar("pty_output_gap");let xe=Buffer.from(he.dataBase64,"base64");if(_.bufferedAmount+xe.length>Ko)return!1;ye(xe),F=he.cursor}if(F!==le.nextCursor)ar("pty_output_gap");return!0}async function Ve(le,he){let xe;try{await Promise.race([e.emit(le,he),new Promise((Ke,Le)=>{xe=setTimeout(()=>Le(new r("pty_event_unavailable","Terminal metadata delivery timed out.")),2000)})])}finally{clearTimeout(xe)}}async function De(){let le=AbortSignal.timeout(Qt),he=f.request({jobId:l.jobId,action:"cancel",input:{}},le),xe,Ke=new Promise((Le,Be)=>{if(xe=()=>Be(new r("pty_cleanup_unconfirmed","Terminal cleanup acknowledgement was not observed within authority.")),le.addEventListener("abort",xe,{once:!0}),le.aborted)xe()});try{let Le=await Promise.race([he,Ke]);if(le.aborted)ar("pty_cleanup_unconfirmed");return Fe(Le)}finally{le.removeEventListener("abort",xe)}}try{await new Promise((Le,Be)=>{let ke=setTimeout(()=>{x(),Be(new r("pty_relay_unavailable","Terminal pairing timed out."))},5000),Me=()=>{clearTimeout(ke),Be(new r("cancelled","Terminal pairing was cancelled."))};if(w.signal.addEventListener("abort",Me,{once:!0}),_.once("open",()=>{clearTimeout(ke),w.signal.removeEventListener("abort",Me),Le()}),w.signal.aborted)Me()}),f.assertCurrent(),D=!0,z=await qe({jobId:l.jobId,action:"start",input:{mode:"pty",cols:l.cols,rows:l.rows,leaseExpiresAtMs:l.leaseExpiresAtMs}});let le=Date.now()+5000;while(z.state==="starting"){if(Date.now()>=le)ar("pty_not_ready");await new Promise((Le)=>setTimeout(Le,25)),z=await qe({jobId:l.jobId,action:"inspect",input:{after:F}})}if(z.state!=="running"||z.inputSequence!==0||z.leaseExpiresAtMs<=Date.now())ar("pty_not_ready");await Ve("pty.ready",Re(z)),re=!0,ye(JSON.stringify({t:"open",cols:z.pty.cols,rows:z.pty.rows,receipt:Re(z)}));let he=!1,xe=0,Ke=!1;while(!w.signal.aborted){let Le=z.firstCursor>F+1,Be=We(z);if(mt(z)){if(Be)break}else if(Le)he=!0;else if(he&&Be&&Date.now()>=xe){he=!1,xe=Date.now()+1000;let{cols:Me,rows:rr}=z.pty;for(let nr of[{cols:Me,rows:rr>1?rr-1:2},{cols:Me,rows:rr}]){if(mt(z))break;let Rr=++G;if(z=await qe({jobId:l.jobId,action:"resize",input:{sequence:Rr,...nr}}),z.inputSequence!==Rr)ar("job_input_sequence")}continue}let ke=mt(z)||Ke?void 0:R.shift();if(ke){M-=$o(ke);let Me=++G;try{z=await qe("data"in ke?{jobId:l.jobId,action:"input",input:{sequence:Me,dataBase64:ke.data.toString("base64")}}:{jobId:l.jobId,action:"resize",input:{sequence:Me,cols:ke.cols,rows:ke.rows}})}catch(rr){if(!(rr instanceof r)||rr.code!=="job_input_backpressure")throw rr;G-=1,R.unshift(ke),M+=$o(ke),Ke=!0;continue}if(z.inputSequence!==Me)ar("job_input_sequence")}else if(await new Promise((Me)=>{let rr=setTimeout(Me,Ke||!Be?10:50);if(S=()=>{clearTimeout(rr),Me()},w.signal.aborted||!Ke&&R.length)S()}),Ke=!1,S=()=>{},!w.signal.aborted&&Be)try{z=await qe({jobId:l.jobId,action:"inspect",input:{after:F}})}catch(Me){if(!J||!(Me instanceof r)||Me.code!=="cancelled")throw Me}}}catch(le){ve??=le}finally{if(re=!1,R.length=0,clearTimeout(W),e.signal.removeEventListener("abort",x),x(),D&&(!z||!mt(z)))try{z=await De()}catch{z=void 0}try{if(!z||!mt(z)||z.pty?.cleanup!=="confirmed")ar("pty_cleanup_unconfirmed");let le=Re(z);if(_.readyState===Rn.OPEN)await new Promise((he)=>{let xe=setTimeout(he,500);_.send(JSON.stringify({t:"exit",code:z.exitCode,receipt:le}),()=>{clearTimeout(xe),he()})});await Ve("pty.stopped",le)}catch(le){ve??=le}_.terminate()}if(ve)throw ve;if(e.signal.aborted)ar("cancelled");if(!z)ar("pty_cleanup_unconfirmed");return{receipt:Re(z)}}import{createHash as Ii,randomUUID as In}from"crypto";import{spawnSync as Yo}from"child_process";import{closeSync as Jo,constants as On,fstatSync as Ai,fsyncSync as Ti,lstatSync as Ht,mkdirSync as Di,mkdtempSync as es,openSync as Vo,readFileSync as Ci,readdirSync as rs,realpathSync as Ct,rmSync as Pn,unlinkSync as Hi}from"fs";import{createConnection as Ni}from"net";import{dirname as Li,join as nt,sep as Bi}from"path";import{tmpdir as Wi}from"os";var hr=new Map,Jr=new Map;function Ur(e,l){return Ii("sha256").update(JSON.stringify([e,l])).digest("hex")}function ht(e){try{Di(e,{mode:448})}catch(f){if(!(f instanceof Error&&("code"in f)&&f.code==="EEXIST"))throw f}let l=Ht(e);if(!l.isDirectory()||l.isSymbolicLink()||!A(l)||Ct(e)!==e)throw new r("hands_jobs_unavailable","Hands job state must be a private canonical directory.")}function Ui(e){let l;try{l=Ht(e)}catch(f){if(f instanceof Error&&"code"in f&&f.code==="ENOENT")return!1;throw f}return!l.isDirectory()||l.isSymbolicLink()||rs(e).length>0}function gr(e){let l=Ur(e.root,e.runId),f=e.previousRuntimeDirectories?.find((x)=>Ui(nt(x,"jobs",l.slice(0,16))))??e.runtimeDirectory;ht(f);let _=nt(f,"jobs");ht(_);let w=nt(_,l.slice(0,16));if(e.maxScopes!==void 0){let x=rs(_);if(!Number.isSafeInteger(e.maxScopes)||e.maxScopes<1||x.length>e.maxScopes||!x.includes(l.slice(0,16))&&x.length>=e.maxScopes)throw new r("process_journal_capacity","Managed process receipt capacity is full; preserve uncertain jobs and reconcile their existing receipts before starting more work.")}ht(w);let S=es(nt(Qo(),"reason-j-"));try{return ht(S),{journalDirectory:w,scopeId:l,launchDirectory:S,socketPath:process.platform==="win32"?`\\\\.\\pipe\\reason-jobs-${In()}`:nt(S,"control.sock"),disposeSocket:()=>Pn(S,{recursive:!0,force:!0})}}catch(x){throw Pn(S,{recursive:!0,force:!0}),x}}var zi=60000,Ki=5000;function Gi(e){if(process.platform==="win32")return Ji(e);let l=Yo("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:2000,env:{...process.env,LC_ALL:"C",LANG:"C"}}),f=l.status===0?/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(l.stdout.trim()):null,_=f?"JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(f[1]):-1;if(!f||_<0||_%3!==0)return null;let w=new Date(Number(f[6]),_/3,Number(f[2]),Number(f[3]),Number(f[4]),Number(f[5])).getTime();return Number.isFinite(w)?w:null}function Ji(e){let l=Yo(C("powershell"),["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e}).StartTime.ToUniversalTime().ToString('o')`],{encoding:"utf8",timeout:5000,windowsHide:!0,env:Oe()}),f=l.status===0?Date.parse(l.stdout.trim()):Number.NaN;return Number.isFinite(f)?f:null}function ts(e,l={}){let f=nt(e.journalDirectory,"owner.lock"),_;try{_=Vo(f,On.O_RDONLY|On.O_NOFOLLOW)}catch{return null}try{let w=Ai(_);if(!w.isFile()||w.nlink!==1||!A(w)||w.size>4096)return null;let S=null;try{S=JSON.parse(Ci(_,"utf8"))}catch{}let x;if(S===null){if((l.now??Date.now)()-w.mtimeMs<zi)return null;x={reason:"never_written",executorLaunchId:null}}else{let{version:M,scopeId:G,pid:F,createdAtMs:D,executorLaunchId:re}=S;if(M!==1||G!==e.scopeId||typeof re!=="string"||typeof F!=="number"||!Number.isSafeInteger(F)||F<1||F===process.pid||typeof D!=="number"||!Number.isSafeInteger(D))return null;if(!(l.exists??((z)=>{try{return process.kill(z,0),!0}catch(fe){return!(fe instanceof Error&&("code"in fe)&&fe.code==="ESRCH")}}))(F))x={reason:"owner_exited",executorLaunchId:re};else{let z=(l.startedAtMs??Gi)(F);if(z===null||z<=D+Ki)return null;x={reason:"pid_reused",executorLaunchId:re}}}let W=Ht(f);if(W.dev!==w.dev||W.ino!==w.ino)return null;Hi(f);let R=Vo(e.journalDirectory,On.O_RDONLY);try{Ti(R)}finally{Jo(R)}return x}catch{return null}finally{Jo(_)}}function ns(e){let l={...e,workspace:e.workspace&&Object.freeze({...e.workspace}),previewAuthority:e.previewAuthority&&Object.freeze({...e.previewAuthority,owner:Object.freeze({...e.previewAuthority.owner}),deniedPorts:new Set(e.previewAuthority.deniedPorts)})},f=Ur(l.root,l.runId);if(hr.has(f)||l.operationId!==void 0&&Jr.has(l.operationId))throw new r("hands_jobs_busy","The Session already has a live Hands job supervisor.");let _={binding:l,key:f,terminals:new Map};if(l.previewAuthority&&l.environment)_.previews=Fo({authority:l.previewAuthority,runId:l.runId,expiresAtMs:l.expiresAtMs,executorLaunchId:l.executorLaunchId,environment:l.environment,isCurrent:()=>hr.get(_.key)===_,identity:()=>{try{return gt(l)}catch{return null}},inspect:(w,S)=>{if(hr.get(_.key)!==_)throw new r("preview_unavailable","The Hands supervisor is no longer current.");return os(l,{jobId:w,action:"inspect",input:{after:0}},S)}});if(hr.set(f,_),l.operationId!==void 0)Jr.set(l.operationId,_);return()=>{if(hr.get(_.key)===_)hr.delete(_.key);if(l.operationId!==void 0&&Jr.get(l.operationId)===_)Jr.delete(l.operationId);_.previews?.dispose();for(let w of _.terminals.values())w.abort()}}var Vi=5000,qi=20;async function eo(e){let l=(w)=>{throw new r("hands_rebind_unavailable",w)};if(!N(e.operationId)||!N(e.runId)||!N(e.fenceId)||!H(e.targetGeneration))l("Reason sent an invalid Hands rebind.");let f=Jr.get(e.operationId);if(!f||f.binding.root!==e.root)return l("No live Hands supervisor owns this operation.");for(let w=Date.now()+Vi;;){if(e.signal?.aborted)l("The Hands rebind was cancelled.");if(Jr.get(e.operationId)!==f)l("The Hands supervisor is no longer current.");let S=null;try{S=gt(f.binding)}catch{}if(S&&S.generation===e.targetGeneration&&S.fenceId===e.fenceId)break;if(S&&S.generation>e.targetGeneration||Date.now()>=w)l("The executor did not adopt this take.");await new Promise((x)=>setTimeout(x,qi))}if(Jr.get(e.operationId)!==f||hr.get(f.key)!==f)l("The Hands supervisor is no longer current.");let _=Ur(e.root,e.runId);if(f.key===_)return;if(hr.has(_))l("The taking run already has a live Hands job supervisor.");hr.delete(f.key);for(let w of f.terminals.values())w.abort();f.key=_,hr.set(_,f)}function at(e){let l="operationId"in e?Jr.get(e.operationId):hr.get(Ur(e.root,e.runId)),f=l&&l.binding.root===e.root?l.binding:void 0;if(!f?.environment||f.expiresAtMs<=Date.now())throw new r("environment_unavailable","No live Hands supervisor owns this environment.");return f.environment.install(e.payload)}async function to(e){let l=hr.get(Ur(e.root,e.runId));if(!l?.previews||!e.owner)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return l.previews.open(e.payload,e.owner,e.signal)}async function ro(e){let l=hr.get(Ur(e.root,e.runId));if(!l?.previews||!e.owner||e.signal.aborted)throw new r("preview_unavailable","No authenticated Hands supervisor owns this preview.");return l.previews.close(e.payload,e.owner)}async function no(e){let l=Ur(e.root,e.runId),f=hr.get(l),_=f?.binding,w=_?.runId,S=_?.previewAuthority,x=_?.environment,W=e.owner&&{...e.owner},R=e.authority&&{...e.authority},M=()=>{throw new r("pty_binding_unavailable","No current authenticated Hands scope owns this terminal.")};if(!f||!_||!S||!x||!W||!R||!_.workspace)return M();let G=Object.freeze({..._.workspace}),F=gt(_),D=x.current(),re=()=>{if(hr.get(l)!==f||W.organization_id!==S.owner.organization_id||W.user_id!==S.owner.user_id||W.device_id!==S.owner.device_id||e.deviceId!==S.owner.device_id||e.rootId!==S.rootId||I(e.workspace)!==I(G))M();let z=gt(_),fe=x.current();if(z.generation!==F.generation||z.fenceId!==F.fenceId||fe.run_id!==w||fe.device_id!==e.deviceId||fe.root_id!==e.rootId||fe.snapshot_id!==D.snapshot_id||fe.revision!==D.revision||fe.binding.target_generation!==F.generation||fe.binding.target_fence_id!==F.fenceId||R.device_id!==e.deviceId||R.binding!==fe.binding.kind||R.target_revision!==fe.binding.target_revision||R.root_grant_revision!==fe.binding.root_grant_revision||R.target_generation!==F.generation||R.target_fence_id!==F.fenceId)M()};if(re(),new URL(e.session.relayUrl).origin!==S.relayOrigin||f.terminals.has(e.session.jobId)||f.terminals.size>=4)return M();let J=new AbortController;f.terminals.set(e.session.jobId,J);try{return await Go({session:{...e.session,leaseExpiresAtMs:Math.min(e.session.leaseExpiresAtMs,F.expiresAtMs,Date.parse(D.expires_at))},signal:AbortSignal.any([e.signal,J.signal]),emit:e.emit,binding:{assertCurrent:re,environment:{revision:D.revision,snapshotId:D.snapshot_id},scope:{runId:e.runId,deviceId:e.deviceId,rootId:e.rootId,workspace:G,binding:D.binding.kind,targetRevision:D.binding.target_revision,rootGrantRevision:D.binding.root_grant_revision,generation:F.generation,fenceId:F.fenceId,executorLaunchId:F.executorLaunchId},request:(z,fe)=>_r(F,zr(JSON.stringify({...z,type:"job",version:2,generation:F.generation,id:In()})),fe)}})}finally{if(f.terminals.get(e.session.jobId)===J)f.terminals.delete(e.session.jobId)}}async function io(e){if(ce(e.payload.jobId))throw new r("pty_binding_required","PTY jobs require the bound terminal capability.");let l=hr.get(Ur(e.root,e.runId))?.binding;if(!l||l.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","No live Hands supervisor owns this Session and root.");return os(l,e.payload,e.signal)}var Yi=1e4,Xi=20,Zi=Se/2,ea=Je/2,ra=(e)=>e.output.reduce((l,f)=>l+f.text.length,0);async function os(e,l,f){if(Object.keys(l).some((M)=>!["jobId","action","input","waitForExitMs"].includes(M)))throw new r("invalid_payload","Unexpected job control field.");let{waitForExitMs:_,...w}=l;if(_!==void 0&&(w.action!=="start"||typeof w.input!=="object"||w.input===null||!("script"in w.input)||typeof _!=="number"||!Number.isSafeInteger(_)||_<1||_>Yi))throw new r("invalid_payload","Only a script start may wait for its job, within its bound.");let S=(M)=>{let G=gt(e);return _r(G,zr(JSON.stringify({...M,type:"job",version:2,generation:G.generation,id:In()})),f)},x=await S(w);if(_===void 0)return x;let W=Date.now()+_,R=x;while(R.ok&&["starting","running"].includes(R.job.state)&&R.job.output.length<Zi&&ra(R.job)<ea&&!f.aborted&&Date.now()<W){if(await new Promise((M)=>setTimeout(M,Math.min(Xi,W-Date.now()))),f.aborted)break;try{let M=await S({jobId:w.jobId,action:"inspect",input:{after:0}});if(!M.ok)break;R=M}catch{break}}return R}function gt(e){if(e.expiresAtMs<=Date.now())throw new r("hands_jobs_unavailable","Hands authority expired.");let l=e.readIdentity?e.readIdentity():e;if(!l||!H(l.generation)||!N(l.fenceId)||l.generation<e.generation||l.generation===e.generation&&l.fenceId!==e.fenceId)throw new r("hands_jobs_unavailable","The live Hands fencing identity could not be verified.");return e.generation=l.generation,e.fenceId=l.fenceId,{...e}}function _r(e,l,f){if(f.aborted)return Promise.reject(new r("cancelled","Job control was cancelled."));return new Promise((_,w)=>{let S=Ni(e.socketPath),x="",W=!1,R,M=(F,D)=>{if(W)return;if(W=!0,clearTimeout(R),f.removeEventListener("abort",G),S.destroy(),F)w(F);else _(D)},G=()=>M(new r("cancelled","Job control waiter cancelled; inspect before retrying mutations."));f.addEventListener("abort",G,{once:!0}),S.setEncoding("utf8"),R=setTimeout(()=>M(new r("hands_job_result_unknown","Job control timed out; inspect before retrying mutations.")),Math.min(1e4,Math.max(1,e.expiresAtMs-Date.now()))),S.on("error",()=>M(new r("hands_job_result_unknown","Hands job control connection failed."))),S.once("connect",()=>S.write(JSON.stringify({version:1,scopeId:e.scopeId,fenceId:e.fenceId,executorLaunchId:e.executorLaunchId,request:l})+`
3
+ `)),S.on("data",(F)=>{if(x+=F,Buffer.byteLength(x)>Xe)M(new r("hands_job_result_unknown","Hands job result exceeded its bound."))}),S.once("end",()=>{if(Date.now()>=e.expiresAtMs){M(new r("hands_job_result_unknown","Hands authority expired before the result was acknowledged."));return}try{let F=qr(x.trim());if(F.id!==l.id||F.generation!==e.generation||F.ok&&F.job.jobId!==l.jobId)throw Error("identity");M(void 0,F)}catch{M(new r("hands_job_result_unknown","Hands job response identity or shape was invalid."))}}),S.once("close",()=>{if(!W)M(new r("hands_job_result_unknown","Hands job control closed before an acknowledged result."))})})}function qo(e){let l=Ct(e.root),f=e.authority,_=Date.parse(e.leaseUntil),w=()=>{if(e.signal.throwIfAborted(),!Number.isFinite(_)||_<=Date.now())throw Error("local_device_gh_lease_expired")};if(w(),f.readOnly&&f.generation===null)return{root:l,readOnly:!0,signal:e.signal,deadlineMs:_,assertCurrent:w};let S=Ur(l,e.runId),x=hr.get(S),W=x?.binding;if(!W?.environment||!W.workspace||W.localGithubConfinement!==!0)throw Error("local_device_gh_confinement_unavailable");let R=W.environment.current(),M=()=>{w();let F=W.environment.current(),D=gt(W);if(hr.get(S)!==x||F.github_auth!=="local_gh"||F.run_id!==W.runId||f.runId!==e.runId||F.device_id!==f.deviceId||F.root_id!==f.rootId||String(F.binding.root_grant_revision)!==f.rootRevision||F.binding.target_generation!==f.generation||F.binding.target_fence_id!==f.fenceId||D.generation!==f.generation||D.fenceId!==f.fenceId||F.snapshot_id!==R.snapshot_id||F.revision!==R.revision)throw Error("local_device_gh_authority_changed")};M();let G=ie(l,W.workspace);return{root:G.boundary,signal:e.signal,deadlineMs:_,privateDirectory:Li(W.environment.path),repoPath:G.path,readOnly:f.readOnly,forbiddenSecretValues:Object.values(R.variables),secretNames:(F)=>Object.entries(R.variables).filter(([,D])=>D.trim()===F.trim()).map(([D])=>`variable ${D}`),assertCurrent:M}}async function oo(e,l){let f=Pe.parse(e.request),_=oe.parse(e.authority);if(_.contributorRefresh&&f.kind==="read"&&_.readOnly)return l(qo(e));let w=Boolean(_.contributorRefresh);if(w&&(_.merge||f.kind!=="pr_mutation"||f.mutation.action!=="edit"||typeof f.mutation.body!=="string"||f.mutation.title!==void 0||f.mutation.base!==void 0||_.readOnly||_.runId!==e.runId||_.repoFullName!==f.repoFullName))throw Error("local_device_gh_contributor_refresh_authority_invalid");if(f.kind!=="pr_merge"&&!w){if(_.merge)throw Error("local_device_gh_merge_authority_invalid");return l(qo(e))}if(!w&&(!_.merge||_.readOnly||_.runId!==e.runId||_.repoFullName!==f.repoFullName||_.merge.source==="agent"&&(_.generation===null||_.fenceId===null)))throw Error("local_device_gh_merge_authority_invalid");let S=Ct(e.root),x=Ht(S),W=Date.parse(e.leaseUntil);if(!Number.isFinite(W)||W<=Date.now())throw Error("local_device_gh_lease_expired");let R=Ct(Wi());if(R===S||R.startsWith(S+Bi))throw Error("local_device_gh_private_scope_unavailable");let M=es(nt(R,"reason-gh-merge-"));try{ht(M);let G=()=>{if(e.signal.throwIfAborted(),Date.now()>=W)throw Error("local_device_gh_lease_expired");let F=Ht(e.root);if(F.isSymbolicLink()||F.dev!==x.dev||F.ino!==x.ino||Ct(e.root)!==S)throw Error("local_device_gh_authority_changed");ht(M)};return G(),await l({root:S,readOnly:!1,privateDirectory:M,forbiddenSecretValues:[],signal:e.signal,deadlineMs:W,assertCurrent:G})}finally{Pn(M,{recursive:!0,force:!0})}}var as=43200000;function bt(e){return Number.isSafeInteger(e)&&Math.abs(e)<=8640000000000000?e:null}function ss(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function is(e,l){return Object.keys(e).length===l.length&&l.every((f)=>Object.hasOwn(e,f))}function so(e){if(!ss(e)||!is(e,["version","outcome","clock_source","validation_now_ms","expiry_ms","remaining_ms","maximum_lifetime_ms","cli_artifact"])||e.version!==1||e.maximum_lifetime_ms!==43200000||typeof e.outcome!=="string"||!["accepted","parse","noncanonical","expired","over_cap"].includes(e.outcome)||typeof e.clock_source!=="string"||!["date_now","injected"].includes(e.clock_source))return null;for(let _ of["validation_now_ms","expiry_ms"]){let w=e[_];if(w!==null&&(typeof w!=="number"||bt(w)===null))return null}if(e.remaining_ms!==null&&(typeof e.remaining_ms!=="number"||!Number.isSafeInteger(e.remaining_ms)))return null;let l=typeof e.expiry_ms==="number"&&typeof e.validation_now_ms==="number"?e.expiry_ms-e.validation_now_ms:null;if(e.remaining_ms!==(l!==null&&Number.isSafeInteger(l)?l:null))return null;if(e.outcome==="parse"&&e.expiry_ms!==null)return null;if(e.outcome!=="parse"&&e.expiry_ms===null)return null;if(e.outcome==="expired"&&!(typeof l==="number"&&l<=0))return null;if(e.outcome==="over_cap"&&!(typeof l==="number"&&l>43200000))return null;if(e.outcome==="accepted"&&!(typeof l==="number"&&l>0&&l<=43200000))return null;let f=e.cli_artifact;if(!ss(f)||!is(f,["kind","status","sha256","observed_at_ms"])||f.observed_at_ms!==null&&(typeof f.observed_at_ms!=="number"||bt(f.observed_at_ms)===null))return null;if(f.kind==="entrypoint_file"){if(f.status!=="observed"||typeof f.sha256!=="string"||!/^[a-f0-9]{64}$/.test(f.sha256)||f.observed_at_ms===null)return null}else if(f.kind!=="unavailable"||f.sha256!==null||typeof f.status!=="string"||!["unsupported_entrypoint","read_failed","file_changed","size_limit","time_limit"].includes(f.status))return null;return e}var An=c({kind:s(["workspace_source","mcp_control"]),target_revision:o().int().nonnegative(),root_grant_revision:o().int().positive()}),cs=new RegExp(lt.tokenPattern),ta=c({token_url:At().max(2048),request_token:t().min(1).max(8192).regex(cs),aws_credentials_url:At().max(2048).nullable()});function ds(e,l){let f=(_,w)=>{try{let S=new URL(_);return S.origin===new URL(l).origin&&S.pathname===w&&!S.username&&!S.password&&!S.search&&!S.hash}catch{return!1}};if(!cs.test(e.request_token)||!f(e.token_url,lt.tokenPath)||e.aws_credentials_url!==null&&!f(e.aws_credentials_url,lt.awsPath))return null;return{REASON_OIDC_TOKEN_URL:e.token_url,REASON_OIDC_REQUEST_TOKEN:e.request_token,...e.aws_credentials_url!==null?{AWS_CONTAINER_CREDENTIALS_FULL_URI:e.aws_credentials_url,AWS_CONTAINER_AUTHORIZATION_TOKEN:e.request_token}:{}}}function ls(e){return new TextEncoder().encode(e).byteLength}function na(e){return ls(JSON.stringify(e)+`
4
+ `)}var yr=c({version:n(1),snapshot_id:k(),revision:o().int().positive(),run_id:t().min(1).max(160),device_id:k(),root_id:k(),binding:An.extend({target_generation:o().int().positive(),target_fence_id:k()}),expires_at:y.datetime({offset:!0}),variables:ee(t().max(128).regex(Lt),t().refine((e)=>!e.includes("\x00")&&ls(e)<=V.valueBytes)).refine((e)=>Object.keys(e).length<=V.variables),github_auth:n("local_gh").optional(),git:c({base_url:At().max(2048),token:t().min(1).max(4096).regex(/^[A-Za-z0-9._~-]+$/),expires_at:y.datetime({offset:!0})}).nullable(),cloud_access:ta.optional()}).refine((e)=>e.github_auth!=="local_gh"||e.git===null,"conflicting git authority").refine((e)=>na(e)<=V.snapshotBytes,"snapshot too large");import{spawn as oa}from"child_process";import{basename as sa,isAbsolute as Pu}from"path";var ia=0,us=120000,fs=15000,aa=65536;function Tn(e=process.execPath,l=process.argv[1]){let f=sa(e),_=(f.startsWith("bun")||f.startsWith("node"))&&typeof l==="string"&&l.length>0;return{command:e,prefix:_?[l]:[]}}function ao(e={}){let{command:l,prefix:f}=Tn(e.executablePath,e.sourceEntrypoint),_=e.spawnProcess??oa,w=e.now??Date.now,S=null,x=0,W=!1,R=(G)=>{try{G.kill("SIGKILL")}catch{}},M=()=>{if(W)return;if(S&&w()-x<us-fs)return;if(S){let F=S;S=null,R(F)}let G;try{G=_(l,[...f,"__device","__hands-worker","--handoff-fd",String(ia)],{cwd:"/",env:{PATH:process.env.PATH??"/usr/local/bin:/usr/bin:/bin"},shell:!1,stdio:["pipe","ignore","pipe"]})}catch{return}S=G,x=w(),G.on("error",()=>{if(S===G)S=null}),G.once("exit",(F,D)=>{if(S!==G)return;S=null,e.log?.("hands.worker_prespawn_exited",{exit_code:F,exit_signal:D})}),e.log?.("hands.worker_prespawned",{pid:G.pid??null})};return{arm:M,take(G){let F=S;if(!F||W)return null;let D=G.args.at(-1),re=G.options.env,J=G.options.cwd,z=[...f,"__device","__hands-worker","--config"];if(G.command!==l||G.args.length!==z.length+1||z.some((Re,Fe)=>G.args[Fe]!==Re)||typeof D!=="string"||!re||typeof J!=="string"||G.options.shell||JSON.stringify(G.options.stdio)!==JSON.stringify(["ignore","ignore","pipe"]))return null;S=null;let fe=F.stdin,ve={configPath:D,cwd:J,env:Object.fromEntries(Object.entries(re).filter((Re)=>typeof Re[1]==="string"))},be=JSON.stringify(ve);if(F.exitCode!==null||F.signalCode!==null||!fe||fe.destroyed||w()-x>=us-fs||Buffer.byteLength(be,"utf8")>aa)return R(F),null;return fe.on("error",()=>{return}),fe.end(be),F.once("exit",()=>{M()}),e.log?.("hands.worker_prespawn_taken",{pid:F.pid??null}),F},adopt(G){G.once("exit",()=>{M()})},close(){if(W=!0,S)R(S);S=null}}}import{accessSync as pa,constants as _a,statSync as ma}from"fs";import{homedir as ha,tmpdir as ga,userInfo as ba}from"os";import{delimiter as wa,win32 as ya}from"path";var ca=new Set(["ALL_PROXY","BUN_BE_BUN","BUN_OPTIONS","CURL_CA_BUNDLE","GIT_SSL_CAINFO","GRPC_DEFAULT_SSL_ROOTS_FILE_PATH","HTTPS_PROXY","HTTP_PROXY","NO_PROXY","NODE_EXTRA_CA_CERTS","NODE_OPTIONS","NODE_TLS_REJECT_UNAUTHORIZED","REQUESTS_CA_BUNDLE","SSLKEYLOGFILE","SSL_CERT_DIR","SSL_CERT_FILE","all_proxy","http_proxy","https_proxy","no_proxy"]);var da=["BUN_CONFIG_","BUN_INSPECT","DYLD_","NODE_DEBUG"],la=new Set(["BUN_INSTALL"]);var ua=/^--(?:max-old-space-size|max-semi-space-size|stack-size)=\d{1,9}$/;function fa(e){return(e??"").split(/\s+/).filter(Boolean).every((l)=>ua.test(l.replaceAll("_","-")))}function ps(e){return Object.keys(e).filter((l)=>ca.has(l)&&!(l==="NODE_OPTIONS"&&fa(e[l]))||da.some((f)=>l.startsWith(f))||l.startsWith("BUN_")&&!la.has(l)).sort()}var va=new Set(["HOME","PATH","PWD","OLDPWD","SHLVL","_","TMPDIR","TMP","TEMP","SHELL","BASH_ENV","ENV","ZDOTDIR","PROMPT_COMMAND","IFS","CDPATH","GLOBIGNORE","SHELLOPTS","BASHOPTS","NODE_PATH"]),ka=/^(?:ARA_|REASON_|PI_|GIT_|GH_|GITHUB_|LD_|DYLD_|BUN_|BASH_FUNC_|SSH_)/,Sa=/TOKEN|SECRET|PASSW|PASSPHRASE|CREDENTIAL|API_?KEY|ACCESS_?KEY|PRIVATE_?KEY|AUTH/i,Ea=/^[A-Za-z_][A-Za-z0-9_]*$/;function wr(e=process.env){let l=(w)=>{if(!(process.platform==="win32"?ya.isAbsolute(w):w.startsWith("/"))||/[\0\r\n]/.test(w)||w.length>32768)throw Error("invalid_host_execution_environment");return w};if(e.PATH!==void 0&&(/[\0\r\n]/.test(e.PATH)||e.PATH.length>32768))throw Error("invalid_host_execution_environment");let f=new Set(ps(e)),_=Object.fromEntries(Object.entries(e).filter((w)=>{let[S,x]=w;return typeof x==="string"&&x.length<=32768&&!x.includes("\x00")&&S.length<=128&&Ea.test(S)&&!f.has(S)&&!va.has(S)&&!ka.test(S)&&!Sa.test(S)}).sort(([w],[S])=>w.localeCompare(S)).slice(0,512));return{home:l(e.HOME||(process.platform==="win32"?e.USERPROFILE:void 0)||ha()),path:((w)=>process.platform==="win32"?kn(w):w)(Ar(e.PATH??"").join(wa)||Cr),temporaryDirectory:l(e.TMPDIR||e.TMP||e.TEMP||ga()),variables:_}}function br(e=process.env,l=()=>ba().shell){if(process.platform==="win32")return se();let f=(w)=>{if(!w||!/^\/[A-Za-z0-9._/-]*\/(?:bash|zsh)$/.test(w))return!1;try{return pa(w,_a.X_OK),ma(w).isFile()}catch{return!1}};if(f(e.SHELL))return e.SHELL;let _;try{_=l()}catch{_=void 0}return f(_)?_:"/bin/zsh"}import{readdir as Ra}from"fs/promises";var Oa=15000;function wn(e){let l=e instanceof Error&&"code"in e?e.code:null;return l==="EPERM"||l==="EACCES"}function bn(e){return new r("folder_access_denied",`macOS blocked Reason from opening ${e}. Allow Reason in System Settings \u203A Privacy & Security \u203A Files and Folders `+"(or Full Disk Access), then restart the Reason app or worker on this Mac and try again: until it restarts it keeps the earlier refusal.")}async function _s(e,{timeoutMs:l=Oa,open:f=(_)=>Ra(_)}={}){let _,w=new Promise((S)=>{_=setTimeout(()=>S("pending"),l)});try{if(await Promise.race([f(e).then(()=>"open"),w])==="pending")throw new r("folder_access_pending",`macOS is asking whether Reason may open ${e}. Answer the prompt on this Mac, then try again.`)}catch(S){if(wn(S))throw bn(e);if(S instanceof r)throw S}finally{clearTimeout(_)}}import{chmodSync as oc,closeSync as sc,constants as Un,fstatSync as ic,lstatSync as Cs,openSync as ac,readSync as cc,realpathSync as zn,unlinkSync as dc}from"fs";import{lookup as lc}from"dns/promises";import{createRequire as uc}from"module";import{request as fc}from"http";import{request as pc}from"https";import st from"net";import{platform as js}from"os";import{basename as _c,extname as mc,isAbsolute as Hs,relative as $n,resolve as vt,sep as Gn}from"path";var ms=String.raw`
5
5
  async (roots) => {
6
6
  "use strict";
7
7
  const version = 2;
@@ -296,14 +296,14 @@ async (input) => {
296
296
  if (!bridge || typeof bridge.evaluate !== "function") throw new Error("Reason Hands browser bridge is not installed");
297
297
  return await bridge.evaluate(typeof input === "string" ? input : input && input.code);
298
298
  }
299
- `.trim();import{Buffer as wt}from"buffer";import{randomUUID as xa}from"crypto";class ys extends Error{code;constructor(e){super(e==="hands_repl_private_profile_attribute_denied"?"Private browser attribute read denied.":e);this.code=e;this.name="HandsReplBrowserDispatcherError"}}var vs=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),gs=/^hands_[A-Za-z0-9_-]{8,128}$/,Pa=2048,ks=32,Ss=1e4,Ia=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function Aa(e){let l=e.split("+"),f=(l.pop()??"").replace(/^Key/,"").toLowerCase();if(f==="f12")return!0;if(l.some((_)=>["Control","ControlOrMeta","Meta"].includes(_))&&["l","n","t","j","i","p","s","w","u","o","r","tab","pageup","pagedown"].includes(f))return!0;if(l.some((_)=>["Control","ControlOrMeta","Meta"].includes(_))&&l.includes("Shift")&&f==="c")return!0;return l.includes("Alt")&&["d","arrowleft","arrowright","home"].includes(f)}var Ta=(e)=>{let l=e.closest("a[href],area[href]");return{password:e.tagName==="INPUT"&&e.type==="password",executableLink:Boolean(l&&!/^(https?:|about:blank)/i.test(l.href))}},Es={browser:{close:{returns:"void"},contexts:{returns:"context[]"},isConnected:{returns:"json"},version:{returns:"json"}},context:{addCookies:{returns:"void"},addInitScript:{returns:"void"},browser:{returns:"browser"},clearCookies:{returns:"void"},clearPermissions:{returns:"void"},close:{returns:"void"},cookies:{returns:"json"},grantPermissions:{returns:"void"},newPage:{returns:"page"},pages:{returns:"page[]"},setDefaultNavigationTimeout:{returns:"void"},setDefaultTimeout:{returns:"void"},setExtraHTTPHeaders:{returns:"void"},setGeolocation:{returns:"void"},setHTTPCredentials:{returns:"void"},setOffline:{returns:"void"},setViewportSize:{returns:"void"},storageState:{returns:"json"},viewportSize:{returns:"json",special:"contextViewportSize"}},page:{addInitScript:{returns:"void"},addScriptTag:{returns:"void"},addStyleTag:{returns:"void"},bringToFront:{returns:"void"},close:{returns:"void"},content:{returns:"json"},context:{returns:"context"},emulateMedia:{returns:"void"},evaluate:{returns:"json",requiresStringSource:!0},frame:{returns:"frame"},frameLocator:{returns:"frameLocator"},frames:{returns:"frame[]"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},goBack:{returns:"void"},goForward:{returns:"void"},goto:{returns:"void"},isClosed:{returns:"json"},locator:{returns:"locator"},mainFrame:{returns:"frame"},opener:{returns:"page"},pdf:{returns:"bytes"},reload:{returns:"void"},screenshot:{returns:"bytes"},selectOption:{returns:"json"},setContent:{returns:"void"},setDefaultNavigationTimeout:{returns:"void"},setDefaultTimeout:{returns:"void"},setExtraHTTPHeaders:{returns:"void"},setInputFiles:{returns:"void"},setViewportSize:{returns:"void"},title:{returns:"json"},url:{returns:"json"},viewportSize:{returns:"json"},waitForFunction:{returns:"void",requiresStringSource:!0},waitForLoadState:{returns:"void"},waitForNavigation:{returns:"void"},waitForTimeout:{returns:"void"},waitForURL:{returns:"void"}},locator:{all:{returns:"locator[]"},allInnerTexts:{returns:"json"},allTextContents:{returns:"json"},and:{returns:"locator"},ariaSnapshot:{returns:"json"},blur:{returns:"void"},boundingBox:{returns:"json"},check:{returns:"void"},clear:{returns:"void"},click:{returns:"void"},contentFrame:{returns:"frameLocator"},count:{returns:"json"},dblclick:{returns:"void"},dragTo:{returns:"void"},evaluate:{returns:"json",requiresStringSource:!0},evaluateAll:{returns:"json",requiresStringSource:!0},fill:{returns:"void"},filter:{returns:"locator"},first:{returns:"locator",special:"property"},focus:{returns:"void"},getAttribute:{returns:"json"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},hover:{returns:"void"},innerHTML:{returns:"json"},innerText:{returns:"json"},inputValue:{returns:"json"},isChecked:{returns:"json"},isEditable:{returns:"json"},isEnabled:{returns:"json"},isHidden:{returns:"json"},isVisible:{returns:"json"},last:{returns:"locator",special:"property"},locator:{returns:"locator"},nth:{returns:"locator"},or:{returns:"locator"},page:{returns:"page"},press:{returns:"void"},pressSequentially:{returns:"void"},scrollIntoViewIfNeeded:{returns:"void"},screenshot:{returns:"bytes"},selectOption:{returns:"json"},setInputFiles:{returns:"void"},tap:{returns:"void"},textContent:{returns:"json"},type:{returns:"void"},uncheck:{returns:"void"},waitFor:{returns:"void"}},frame:{addScriptTag:{returns:"void"},addStyleTag:{returns:"void"},childFrames:{returns:"frame[]"},content:{returns:"json"},evaluate:{returns:"json",requiresStringSource:!0},frameLocator:{returns:"frameLocator"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},goto:{returns:"void"},isDetached:{returns:"json"},locator:{returns:"locator"},name:{returns:"json"},page:{returns:"page"},parentFrame:{returns:"frame"},setContent:{returns:"void"},title:{returns:"json"},url:{returns:"json"},waitForFunction:{returns:"void",requiresStringSource:!0},waitForLoadState:{returns:"void"},waitForNavigation:{returns:"void"},waitForTimeout:{returns:"void"},waitForURL:{returns:"void"}},frameLocator:{getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},locator:{returns:"locator"},owner:{returns:"locator"}}};function xe(e){throw new ys(e)}function Dr(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let l=Object.getPrototypeOf(e);return l===Object.prototype||l===null}function yt(e,l=0,f={nodes:0}){if(l>ks||++f.nodes>Ss)xe("hands_repl_json_too_complex");if(e===null||typeof e==="boolean"||typeof e==="string")return;if(typeof e==="number"){if(!Number.isFinite(e))xe("hands_repl_invalid_json");return}if(Array.isArray(e)){for(let _ of e)yt(_,l+1,f);return}if(!Dr(e))xe("hands_repl_invalid_json");for(let[_,w]of Object.entries(e)){if(vs.has(_))xe("hands_repl_invalid_json");yt(w,l+1,f)}}function Dn(e){return typeof e==="string"&&Object.hasOwn(Es,e)}function Da(e){if(!e.endsWith("[]"))return null;let l=e.slice(0,-2);return Dn(l)?l:null}function bs(e){return Dr(e)&&Object.keys(e).length===2&&e.$handsRepl==="bytes"&&typeof e.base64==="string"}function Ca(e){return Dr(e)&&Object.keys(e).length===1&&e.$handsRepl==="undefined"}function ws(e){return Dr(e)&&Object.keys(e).length===2&&e.$handsRepl==="routeFulfill"&&"options"in e}function Vr(e){return!!e&&typeof e==="object"}function Yt(){return Object.freeze({$handsRepl:"undefined"})}function Ha(e){if(!wt.isBuffer(e)&&!(e instanceof Uint8Array))xe("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:wt.from(e).toString("base64")})}function Rs(e){if(!Vr(e.browser)||!Vr(e.context)||!Vr(e.page))xe("hands_repl_invalid_roots");if(typeof e.a11y!=="function"||typeof e.view!=="function")xe("hands_repl_invalid_callbacks");let l=e.maxHandles??Pa;if(!Number.isInteger(l)||l<3||l>1e5)xe("hands_repl_invalid_handle_limit");let f=new Map,_=new WeakMap,w=e.createOpaqueId??xa,S=(I,re)=>{if(!Vr(re))xe("hands_repl_expected_target");let J=_.get(re)?.get(I);if(J)return J;if(f.size>=l)xe("hands_repl_handle_limit");let z="";for(let be=0;be<16;be+=1){let Re=`hands_${w()}`;if(gs.test(Re)&&!f.has(Re)){z=Re;break}}if(!z)xe("hands_repl_invalid_opaque_id");let fe=Object.freeze({$handsRepl:"handle",id:z,kind:I});f.set(z,{kind:I,target:re});let ve=_.get(re);if(!ve)ve=new Map,_.set(re,ve);return ve.set(I,fe),fe},x=Object.freeze({browser:S("browser",e.browser),context:S("context",e.context),page:S("page",e.page)}),W=(I)=>{if(!Dr(I)||Object.keys(I).length!==3||I.$handsRepl!=="handle"||typeof I.id!=="string"||!gs.test(I.id)||!Dn(I.kind))xe("hands_repl_invalid_handle");let re=f.get(I.id);if(!re||re.kind!==I.kind)xe("hands_repl_unknown_handle");return re},R=(I,re=0,J=new Set)=>{if(re>ks)xe("hands_repl_json_too_complex");if(I===void 0)return Yt();if(I===null||typeof I==="boolean"||typeof I==="string")return I;if(typeof I==="number"){if(!Number.isFinite(I))xe("hands_repl_non_json_result");return I}if(Array.isArray(I)){if(J.has(I))xe("hands_repl_cyclic_result");J.add(I);try{return I.map((z)=>R(z,re+1,J))}finally{J.delete(I)}}if(!Dr(I))xe("hands_repl_non_json_result");if(J.has(I))xe("hands_repl_cyclic_result");J.add(I);try{let z=Object.create(null);for(let fe of Object.keys(I)){let ve=Object.getOwnPropertyDescriptor(I,fe);if(!ve||!("value"in ve))continue;z[fe]=R(ve.value,re+1,J)}return z}finally{J.delete(I)}},M=(I,re)=>{if(re==="void")return Yt();if(re==="json")return R(I);if(re==="bytes")return Ha(I);let J=Da(re);if(J){if(!Array.isArray(I))xe("hands_repl_expected_target_list");if(J==="context"&&I.some((z)=>z!==e.context))xe("hands_repl_foreign_context");return I.map((z)=>S(J,z))}if(I===null||I===void 0)return Yt();if(!Dn(re))xe("hands_repl_invalid_return_kind");if(re==="context"&&I!==e.context)xe("hands_repl_foreign_context");return S(re,I)},G=(I)=>{if(Dr(I)&&I.$handsRepl==="handle")return W(I).target;if(bs(I))return wt.from(I.base64,"base64");if(Ca(I))return;if(ws(I))xe("hands_repl_route_fulfill_only");if(Array.isArray(I))return I.map(G);if(!Dr(I))return I;let re=Object.create(null);for(let[J,z]of Object.entries(I))re[J]=G(z);return re};return Object.freeze({roots:x,dispatch:async(I)=>{if(!Dr(I)||typeof I.type!=="string")xe("hands_repl_invalid_request");if(I.type==="a11y"){let ye=I.target===void 0?f.get(x.page.id):W(I.target);if(!ye||ye.kind!=="page"&&ye.kind!=="locator")xe("hands_repl_invalid_a11y_target");return R(await e.a11y(ye.target))}if(I.type==="view"){if(yt(I.source),I.options!==void 0)yt(I.options);let ye=bs(I.source)?wt.from(I.source.base64,"base64"):I.source;if(e.privateProfile&&!wt.isBuffer(ye))xe("hands_repl_profile_requires_image_bytes");return R(await e.view(ye,I.options))}if(I.type!=="call")xe("hands_repl_invalid_request");if(typeof I.method!=="string"||I.method.length===0||I.method.length>128)xe("hands_repl_invalid_method");if(vs.has(I.method))xe("hands_repl_forbidden_method");let re=W(I.target),J=I.args??[];if(!Array.isArray(J))xe("hands_repl_invalid_arguments");if(yt(J),re.kind==="page"&&I.method==="captureScreenshot"){if(J.length!==0)xe("hands_repl_invalid_arguments");if(!e.screenshotExport)xe("hands_repl_screenshot_export_unavailable");return R(await e.screenshotExport(re.target))}if(re.kind==="context"&&["startRecording","stopRecording"].includes(I.method)){if(!e.recording||re.target!==e.context)xe("hands_repl_recording_unavailable");if(J.length>(I.method==="startRecording"?1:0))xe("hands_repl_invalid_arguments");return R(I.method==="startRecording"?await e.recording.start(J[0]):await e.recording.stop())}if(e.privateProfile){let ye=I.method;if(["evaluate","evaluateAll","waitForFunction","addInitScript","addScriptTag","addStyleTag","setContent","setInputFiles","route","content","cookies","storageState","addCookies","clearCookies","setExtraHTTPHeaders","setHTTPCredentials","grantPermissions","clearPermissions","innerHTML","textContent","allTextContents"].includes(ye)||re.kind==="browser"&&ye==="close"||re.kind==="context"&&ye==="close")xe("hands_repl_private_profile_method_denied");if(re.kind==="browser"&&ye==="contexts")return M([e.context],"context[]");if((ye==="screenshot"||ye==="pdf")&&Dr(J[0])&&(("path"in J[0])||("style"in J[0])))xe("hands_repl_private_profile_path_denied");if(ye==="goto"){if(typeof J[0]!=="string")xe("hands_repl_private_profile_url_denied");try{let Fe=new URL(J[0]);if(!["http:","https:"].includes(Fe.protocol)&&J[0]!=="about:blank")xe("hands_repl_private_profile_url_denied")}catch{xe("hands_repl_private_profile_url_denied")}}if(ye==="getAttribute"&&(typeof J[0]!=="string"||!Ia.has(J[0].toLowerCase())))xe("hands_repl_private_profile_attribute_denied");if(re.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(ye)){let Fe=[re.target];if(ye==="allInnerTexts"){let Ve=Reflect.get(re.target,"all");if(typeof Ve!=="function")xe("hands_repl_private_profile_probe_unavailable");let Ie=await Reflect.apply(Ve,re.target,[]);if(!Array.isArray(Ie)||Ie.length>Ss||!Ie.every(Vr))xe("hands_repl_private_profile_probe_unavailable");Fe=Ie}for(let Ve of Fe){let Ie=Reflect.get(Ve,"isVisible");if(typeof Ie!=="function"||!await Reflect.apply(Ie,Ve,[]))xe("hands_repl_private_profile_hidden_value_denied")}}if(ye==="press"&&typeof J[0]==="string"&&Aa(J[0]))xe("hands_repl_private_profile_browser_shortcut_denied");if(re.kind==="locator"&&["inputValue","click","dblclick","tap","press"].includes(ye)){let Fe=Reflect.get(re.target,"evaluate");if(typeof Fe!=="function")xe("hands_repl_private_profile_probe_unavailable");let Ve=await Reflect.apply(Fe,re.target,[Ta]);if(!Dr(Ve)||typeof Ve.password!=="boolean"||typeof Ve.executableLink!=="boolean")xe("hands_repl_private_profile_probe_unavailable");if(ye==="inputValue"&&Ve.password)xe("hands_repl_private_profile_password_denied");if(ye!=="inputValue"&&Ve.executableLink)xe("hands_repl_private_profile_url_denied");if(ye==="inputValue"){let Ie=Reflect.get(re.target,"isVisible");if(typeof Ie!=="function"||!await Reflect.apply(Ie,re.target,[]))xe("hands_repl_private_profile_hidden_value_denied")}}}let z=Es[re.kind][I.method];if(!z)xe("hands_repl_method_not_allowed");if(z.requiresStringSource&&typeof J[0]!=="string")xe("hands_repl_string_source_required");if(re.kind==="browser"&&I.method==="contexts")return[x.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(I.method)&&J.some((ye)=>Dr(ye)&&("path"in ye)))xe("hands_repl_file_path_not_allowed");if(I.method==="goto"&&typeof J[0]==="string"){let ye;try{ye=new URL(J[0]).protocol}catch{xe("hands_repl_invalid_url")}if(!["http:","https:","data:","about:","blob:"].includes(ye))xe("hands_repl_file_path_not_allowed")}if(z.special==="contextViewportSize"){let ye=Reflect.get(re.target,"pages");if(typeof ye!=="function")xe("hands_repl_method_unavailable");let Fe=await Reflect.apply(ye,re.target,[]),Ve=Array.isArray(Fe)?Fe[0]:void 0,Ie=Vr(Ve)?Reflect.get(Ve,"viewportSize"):void 0;if(typeof Ie!=="function")return Yt();return M(await Reflect.apply(Ie,Ve,[]),z.returns)}if(z.special==="property"){let ye=Reflect.get(re.target,I.method);return M(typeof ye==="function"?Reflect.apply(ye,re.target,[]):ye,z.returns)}let fe=Reflect.get(re.target,I.method);if(typeof fe!=="function")xe("hands_repl_method_unavailable");if(z.special==="route"){let ye=J[1];if(!ws(ye))xe("hands_repl_invalid_route_handler");yt(ye.options);let Fe=G(ye.options),Ve=async(he)=>{if(!Vr(he))xe("hands_repl_invalid_route");let Oe=Reflect.get(he,"fulfill");if(typeof Oe!=="function")xe("hands_repl_invalid_route");await Reflect.apply(Oe,he,[Fe])},Ie=[G(J[0]??null),Ve],le=await Reflect.apply(fe,re.target,Ie);return M(le,z.returns)}let ve=J.map(G);if(I.method==="setInputFiles"){let ye=re.kind==="locator"?0:1,Fe=async(Ie)=>{if(typeof Ie!=="string"){if(!Dr(Ie)||typeof Ie.name!=="string"||typeof Ie.mimeType!=="string"||!wt.isBuffer(Ie.buffer))xe("hands_repl_invalid_file_input");return Ie}if(!e.readWorkspaceFile)xe("hands_repl_workspace_required");return e.readWorkspaceFile(Ie)},Ve=ve[ye];ve[ye]=Array.isArray(Ve)?await Promise.all(Ve.map(Fe)):await Fe(Ve)}if(I.method==="goto")await e.beforeNavigation?.();let be=e.actionRecorder?.(),Re=await Reflect.apply(fe,re.target,ve),qe={click:"Click browser element",tap:"Click browser element",dblclick:"Double click browser element",fill:"Type text",type:"Type text",pressSequentially:"Type text",clear:"Clear browser field",press:"Press key",scrollIntoViewIfNeeded:"Scroll browser element into view",dragTo:"Drag on computer",selectOption:"Select browser option",check:"Check browser control",uncheck:"Uncheck browser control",hover:"Hover browser element",focus:"Focus browser element",goto:"Open browser page",reload:"Reload browser page",goBack:"Go back in browser",goForward:"Go forward in browser",screenshot:"Take browser screenshot"}[I.method];if(qe){let ye=Reflect.get(re.target,"page"),Fe=re.kind==="page"?re.target:typeof ye==="function"?Reflect.apply(ye,re.target,[]):void 0;be?.(qe,Vr(Fe)?Fe:void 0)}return M(Re,z.returns)}})}import{isIP as Is}from"net";import{Resolver as Na}from"dns/promises";import{isIP as Zt}from"net";var La=[["0.0.0.0",8],["10.0.0.0",8],["100.64.0.0",10],["127.0.0.0",8],["169.254.0.0",16],["172.16.0.0",12],["192.0.0.0",24],["192.0.2.0",24],["192.168.0.0",16],["198.18.0.0",15],["198.51.100.0",24],["203.0.113.0",24],["224.0.0.0",4],["240.0.0.0",4]];function Hn(e){if(Zt(e)!==4)return null;let l=e.split(".");if(l.length!==4)return null;let f=0;for(let _ of l){let w=Number(_);if(!Number.isInteger(w)||w<0||w>255)return null;f=f*256+w}return f>>>0}function Ba(e,l,f){let _=Hn(l);if(_===null)return!1;let w=f===0?0:4294967295<<32-f>>>0;return(e&w)>>>0===(_&w)>>>0}function Os(e){let l=Hn(e);if(l===null)return!0;return La.some(([f,_])=>Ba(l,f,_))}function ja(e){if(Zt(e)!==6)return null;let l=e.toLowerCase(),f=l.indexOf("%");if(f>=0)l=l.slice(0,f);let _=[],w=l.lastIndexOf(":"),S=w>=0?l.slice(w+1):"";if(S.includes(".")){let I=Hn(S);if(I===null)return null;_=[I>>>16&65535,I&65535],l=l.slice(0,w+1)+"0:0"}let x=l.split("::");if(x.length>2)return null;let W=(I)=>{if(I==="")return[];let re=[];for(let J of I.split(":")){if(J===""||J.length>4||!/^[0-9a-f]+$/.test(J))return null;re.push(Number.parseInt(J,16))}return re},R=W(x[0]??"");if(R===null)return null;if(x.length===1){let I=R;if(I.length!==8)return null;return _.length>0?I.slice(0,6).concat(_):I}let M=W(x[1]??"");if(M===null)return null;let G=8-R.length-M.length;if(G<0)return null;let F=R.concat(Array(G).fill(0),M);if(F.length!==8)return null;return _.length>0?F.slice(0,6).concat(_):F}function Ma(e,l){return`${e>>8&255}.${e&255}.${l>>8&255}.${l&255}`}function Wa(e){let l=ja(e);if(l===null)return!0;let[f,_,w]=l;if((f&57344)!==8192)return!0;if(f===8193&&(_&65024)===0)return!0;if(f===8193&&_===3512)return!0;if(f===16383&&(_&61440)===0)return!0;if(f===8194)return Os(Ma(_,w));return!1}function vr(e){return e.replace(/^\[|\]$/g,"")}function Xt(e){let l=vr(e.trim()),f=Zt(l);if(f===4)return Os(l);if(f===6)return Wa(l);return!0}function xs(e){if(e instanceof Error&&e.name==="TimeoutError")return"dns_timeout";switch(typeof e==="object"&&e!==null&&"code"in e?e.code:void 0){case"ENOTFOUND":return"dns_not_found";case"ENODATA":return"dns_empty";case"EAI_AGAIN":case"ESERVFAIL":case"ECONNREFUSED":return"dns_temporary";case"ETIMEOUT":case"ETIMEDOUT":return"dns_timeout";default:return"dns_failed"}}var Ps=5000;function Fa(e){return async(l,f)=>{if(f?.aborted)throw Error("aborted");let _=new Na({timeout:Ps,tries:1});if(e)_.setServers(e);let w=()=>_.cancel();f?.addEventListener("abort",w,{once:!0});try{let[S,x]=await Promise.allSettled([_.resolve4(l),_.resolve6(l)]),W=[...S.status==="fulfilled"?S.value:[],...x.status==="fulfilled"?x.value:[]];if(W.length>0)return W;let R=[S,x].flatMap((G)=>G.status==="rejected"?[G.reason]:[]);throw R.find((G)=>["dns_temporary","dns_timeout"].includes(xs(G)))??R[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{f?.removeEventListener("abort",w)}}}var Ua=Fa();async function za(e,l,f,_){if(_?.aborted)throw Error("aborted");let w=new AbortController,S,x,W=l(e,w.signal);W.catch(()=>{});try{return await Promise.race([W,new Promise((R,M)=>{if(S=setTimeout(()=>M(new DOMException("DNS lookup timed out","TimeoutError")),f),_)x=()=>M(Error("aborted")),_.addEventListener("abort",x,{once:!0})})])}finally{if(S!==void 0)clearTimeout(S);if(_&&x)_.removeEventListener("abort",x);w.abort()}}async function co(e,l=Ua,f){let _=vr(e);if(Zt(_))return Xt(_)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[_]};let w;try{w=await za(_,l,Ps,f)}catch(S){return{ok:!1,reason:f?.aborted?f.reason instanceof Error&&f.reason.name==="TimeoutError"?"dns_timeout":"aborted":xs(S)}}if(w.length===0)return{ok:!1,reason:"dns_empty"};if(w.some(Xt))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:w}}var $a=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function Nn(e){return e.length<=253&&$a.test(e.toLowerCase())}function Ka(e,l){let f=e.trim().toLowerCase();if(!Nn(f))return!1;if(f.startsWith("*.")){let _=f.slice(2);return l===_||l.endsWith(`.${_}`)}return f===l}function Ga(e){let l=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(e);if(!l)return null;let f=l.slice(1).map(Number);return f.some((_)=>_>255)?null:f}function Ln(e,l=[]){let f=(_)=>{if(_=_.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,""),!_.includes(":"))return _;try{_=new URL(`http://[${_}]/`).hostname.slice(1,-1)}catch{return _}let w=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(_);if(!w)return _;let S=parseInt(w[1],16),x=parseInt(w[2],16);return`${S>>8}.${S&255}.${x>>8}.${x&255}`};return l.some((_)=>f(_)===f(e))}function ot(e){e=e.toLowerCase().replace(/^\[|\]$/g,"");let l=Ga(e);if(l){let[S,x,W]=l;if(S===127)return"loopback";return S===0||S===10||S>=224||S===100&&x>=64&&x<=127||S===169&&x===254||S===172&&x>=16&&x<=31||S===192&&(x===168||x===0&&(W===0||W===2)||x===88&&W===99)||S===198&&(x===18||x===19||x===51&&W===100)||S===203&&x===0&&W===113?"private":"public"}if(!e.includes(":"))return"hostname";try{e=new URL(`http://[${e}]/`).hostname.slice(1,-1)}catch{return"private"}if(e==="::1")return"loopback";let f=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(e);if(f){let S=parseInt(f[1],16),x=parseInt(f[2],16);return ot(`${S>>8}.${S&255}.${x>>8}.${x&255}`)==="public"?"public":"private"}let[_,w=0]=e.split(":").map((S)=>parseInt(S||"0",16));return _<8192||_>16383||_===8194||_===8193&&(w<512||w===3512)||_===16383&&w<4096?"private":"public"}function Ue(e,l){let f;try{f=new URL(e)}catch{return{allowed:!1,url:e,host:null,reason:"invalid_url"}}if(["about:","data:","blob:"].includes(f.protocol))return{allowed:!0,url:e,host:null,reason:"local_document"};if(!["http:","https:","ws:","wss:"].includes(f.protocol))return{allowed:!1,url:e,host:f.hostname||null,reason:"unsupported_protocol"};let _=f.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(l.mode==="off")return{allowed:!0,url:e,host:_,reason:"policy_off"};let w=(W)=>({allowed:!1,url:e,host:_,reason:W});if(f.username||f.password)return w("invalid_url");if(l.mode==="public_web"){let W=ot(_)!=="public"&&ot(_)!=="hostname"||_==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(_)||!_.includes(".")&&!Is(_)||Boolean(Is(_)&&Xt(_));return{allowed:!W,url:e,host:_,reason:W?"private_network":"public_web"}}let S=Number(f.port||(["https:","wss:"].includes(f.protocol)?443:80));if(l.deniedPorts?.includes(S)||Ln(_,l.deniedHosts))return w("destination_not_allowed");let x=ot(_);if(x==="private"||["local","internal","arpa"].some((W)=>_===W||_.endsWith(`.${W}`)))return w("private_network");if(x==="loopback"||_==="localhost"||_.endsWith(".localhost"))return l.allowedLoopbackPorts?.includes(S)?{allowed:!0,url:e,host:_,reason:"loopback"}:w("destination_not_allowed");if(l.allowedDomains.some((W)=>Ka(W,_)))return{allowed:!0,url:e,host:_,reason:"allowed_domain"};return{allowed:!1,url:e,host:_,reason:"destination_not_allowed"}}import As from"child_process";import{accessSync as Ja,constants as Va,readFileSync as qa,statSync as Ya}from"fs";import{createRequire as Xa}from"module";import{dirname as hf,isAbsolute as Bn,join as Za,resolve as gf,win32 as Qa}from"path";var jn=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:tr.dependencies["playwright-core"],browser:"chromium"}),Ts=["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Brave Browser.app/Contents/MacOS/Brave Browser","/Applications/Chromium.app/Contents/MacOS/Chromium"],Mn=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function ec(e=process.env){let l=[e.ProgramFiles??"C:\\Program Files",e["ProgramFiles(x86)"]??"C:\\Program Files (x86)"],f=e.LOCALAPPDATA?[e.LOCALAPPDATA]:[],_=(w,...S)=>w.map((x)=>Qa.join(x,...S));return[..._([...l,...f],"Google","Chrome","Application","chrome.exe"),..._(l,"Microsoft","Edge","Application","msedge.exe"),..._([...l,...f],"BraveSoftware","Brave-Browser","Application","brave.exe")]}function Bt(e){try{return Ja(e,Va.X_OK),Bn(e)&&Ya(e).isFile()}catch{return!1}}function Wn(e,l=process.platform){let f=l==="darwin"?Ts:l==="linux"?Mn:l==="win32"?ec():null;return f?(e??f).find(Bt)??null:null}function rc(){if(!process.versions.bun)return;let e=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,e))return;let l=[];As.spawn=new Proxy(As.spawn,{apply(f,_,w){let S=Reflect.apply(f,_,w),x=w[1],W=w[2]?.stdio;if(Array.isArray(x)&&x.includes("--remote-debugging-pipe")&&Array.isArray(W)&&W[3]==="pipe"&&W[4]==="pipe")l.push(S);return S}}),Object.defineProperty(globalThis,e,{value:l})}async function en(e){if(rc(),e!==void 0){if(!Bn(e))throw Error("hands_browser_driver_path_must_be_absolute");let _=Za(e,"package.json"),w=JSON.parse(qa(_,"utf8"));if(w.name!==jn.driver)throw Error("hands_browser_wrong_driver");let S=Xa(_)(e),x=S.default?.chromium??S.chromium;if(!x)throw Error("hands_browser_missing_chromium");return{version:w.version,chromium:x}}let[l,f]=await Promise.all([import("./index-gmsadq51.js"),import("./package-way7qesn.js").then((m)=>Fi(m.default,1))]);return{version:f.default.version,chromium:l.chromium}}var tc=(e,l=jn.driverVersion)=>({status:"unavailable",reason:e,expectedDriverVersion:l}),nc=(e)=>e.loadDriver?.()??en(e.driverModuleDirectory);async function jt(e={}){return Ds(e,jn.driverVersion)}async function Fn(e,l={}){if(e.driverVersion!=="1.61.1"||!Bn(e.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return Ds({...l,driverModuleDirectory:e.driverModuleDirectory,allowSystemBrowser:!0},e.driverVersion)}async function Ds(e,l){let f=(R)=>tc(R,l),_=e.platform??process.platform;if(_!=="linux"&&_!=="darwin"&&_!=="win32")return f("unsupported_platform");let w;try{w=await nc(e)}catch{return f("driver_missing")}if(w.version!==l)return f("driver_version_mismatch");let S=(R,M)=>({status:"resolved",executablePath:R,source:M,driverVersion:w.version});if(e.executablePath!==void 0)return Bt(e.executablePath)?S(e.executablePath,"configured"):f("executable_missing");let x=w.chromium.executablePath();if(Bt(x))return S(x,"managed");let W=e.allowSystemBrowser===!0?Wn(e.systemCandidates,_):null;return W?S(W,"system"):f("executable_missing")}var hc=["/usr/local/bin/chromium",...Mn];function vn(e,l=js()){return Wn(e??(l==="linux"?hc:void 0),l)}async function gc(){try{return(await en()).chromium}catch{return uc(import.meta.url)("playwright-core").chromium}}var bc=1048576,wc=105000,yc=20000,Ns=5000,vc=2000,kc=1000,Sc=30000,Ls=81920,Ec={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function Rc(e,l){let f=new URL(e.url()),_={...await e.allHeaders(),host:f.host};for(let w of Object.keys(_))if(/^(?:proxy-|connection$|upgrade$|transfer-encoding$|content-length$)/i.test(w))delete _[w];return new Promise((w,S)=>{let W=(f.protocol==="https:"?pc:fc)(f,{method:e.method(),headers:_,agent:!1,lookup:(M,G,F)=>{let I=st.isIP(l);if(G.all)F(null,[{address:l,family:I}]);else F(null,l,I)}},(M)=>{let G=[],F=0;M.on("data",(I)=>{if(F+=I.length,F>33554432)W.destroy(Error("hands_browser_response_too_large"));else G.push(I)}),M.on("error",S),M.on("end",()=>{let I={};for(let[re,J]of Object.entries(M.headers))if(J!==void 0&&!["transfer-encoding","connection","content-length"].includes(re))I[re]=Array.isArray(J)?J.join(`
300
- `):J;w({status:M.statusCode??502,headers:I,body:Buffer.concat(G)})})}),R=setTimeout(()=>W.destroy(Error("hands_browser_fetch_timeout")),Sc);W.once("close",()=>clearTimeout(R)),W.on("error",S),W.end(e.postDataBuffer()??void 0)})}async function Oc(e,l,f=()=>{},_={lookup:(w)=>lc(w,{all:!0}),fetch:Rc}){let w=new WeakSet,S=new WeakMap,x=(W)=>{let R=S.get(W);if(R)return R;let M=(async()=>{if(!e.newCDPSession)return;let G=await e.newCDPSession(W),F=new Map;G.on("Network.loadingFinished",({requestId:I})=>F.delete(I)),G.on("Network.loadingFailed",({requestId:I})=>F.delete(I)),G.on("Fetch.requestPaused",async(I)=>{let re=I.networkId??I.requestId,J=I.redirectedRequestId?(F.get(re)??0)+1:0;F.set(re,J);let z=Ue(I.request.url,l),fe=l.mode==="enforce"&&Boolean(I.redirectedRequestId)&&z.host!==null&&!st.isIP(z.host),ve=!z.allowed?z:fe?{...z,allowed:!1,reason:"destination_not_allowed"}:J>20?{...z,allowed:!1,reason:"redirect_not_supported"}:null;try{if(ve)f(ve),await G.send("Fetch.failRequest",{requestId:I.requestId,errorReason:"BlockedByClient"});else await G.send("Fetch.continueRequest",{requestId:I.requestId})}catch{await G.send("Fetch.failRequest",{requestId:I.requestId,errorReason:"Failed"}).catch(()=>{})}}),await G.send("Network.enable"),await G.send("Fetch.enable",{patterns:[{urlPattern:"*",requestStage:"Request"}]}),w.add(W)})();return S.set(W,M),M};return await e.route("**/*",async(W)=>{let R=W.request().url(),M=Ue(R,l);if(M.allowed&&l.mode==="public_web"){await W.continue();return}let G=W.request();if(M.allowed&&M.host&&st.isIP(M.host)&&G.isNavigationRequest?.()){let F=G.frame();if(w.has(F.page())&&F===F.page().mainFrame()){await W.continue();return}}if(M.allowed&&(l.mode==="off"||M.reason==="local_document")){await W.continue();return}if(M.allowed&&M.host)try{let F=M.host,I=ot(F),re,J=await(async()=>{if(I!=="hostname")return[{address:F,family:st.isIP(F)}];if(M.reason==="loopback")return[{address:"127.0.0.1",family:4}];try{return await Promise.race([_.lookup(F),new Promise((z,fe)=>{re=setTimeout(()=>fe(Error("hands_browser_dns_timeout")),5000)})])}finally{if(re)clearTimeout(re)}})();if(!J.length||J.some(({address:z})=>{let fe=ot(z);return!st.isIP(z)||l.mode==="enforce"&&Ln(z,l.deniedHosts)||(M.reason==="loopback"?fe!=="loopback":fe!=="public")}))M={...M,allowed:!1,reason:"private_network"};else{let z=await _.fetch(W.request(),J[0].address);if(z.status>=300&&z.status<400){let fe=z.headers.location??R;try{fe=new URL(fe,R).href}catch{}let ve=Ue(fe,l);M=ve.allowed?{...ve,allowed:!1,reason:"redirect_not_supported"}:ve}else{await W.fulfill(z);return}}}catch{await W.abort("failed");return}f(M),await W.abort("blockedbyclient")}),await e.routeWebSocket("**/*",async(W)=>{let R=Ue(W.url(),l);if(l.mode==="enforce"&&R.allowed&&(!R.host||!st.isIP(R.host)))R={...R,allowed:!1,reason:"destination_not_allowed"};if(R.allowed){W.connectToServer();return}f(R),await W.close({code:1008,reason:"Reason egress policy denied"})}),l.mode==="off"?void 0:{preparePage:x}}async function Ms(e,l=js(),f){if(f){let w=await Fn(f,{platform:l,systemCandidates:e});return w.status==="resolved"?w.executablePath:null}if(e!==void 0){let w=vn(e,l);if(w)return w}let _=await jt({platform:l,systemCandidates:e,allowSystemBrowser:!0});return _.status==="resolved"?_.executablePath:null}function Bs(e,l){if(!e)throw Error("hands_repl_workspace_required");let f=zn(e),_=vt(e),w=$n(_,vt(_,l)),x=w!==".."&&!w.startsWith(`..${Gn}`)&&!Hs(w)?vt(f,w):vt(f,l);if(E(vt(_,l))||E(x))throw Error("hands_repl_protected_path");let W=(J)=>{let z=$n(f,J);return z!==""&&z!==".."&&!z.startsWith(`..${Gn}`)&&!Hs(z)},R=zn(x);if(E(R))throw Error("hands_repl_protected_path");if(!W(x)||!W(R))throw Error("hands_repl_file_outside_workspace");let M=$n(f,x).split(Gn),G=[f,...M.map((J,z)=>vt(f,...M.slice(0,z+1)))],F=G.map((J)=>Cs(J));if(F.some((J)=>J.isSymbolicLink()))throw Error("hands_repl_file_symlink");let I=F[F.length-1];if(!I.isFile()||I.nlink!==1||I.size>16777216)throw Error("hands_repl_file_not_regular_or_too_large");let re=ac(x,Un.O_RDONLY|Un.O_NOFOLLOW|Un.O_NONBLOCK);try{let J=ic(re);if(J.dev!==I.dev||J.ino!==I.ino||!J.isFile())throw Error("hands_repl_file_changed");for(let be=0;be<G.length;be++){let Re=Cs(G[be]);if(Re.dev!==F[be].dev||Re.ino!==F[be].ino||Re.isSymbolicLink())throw Error("hands_repl_file_changed")}if(!W(zn(x)))throw Error("hands_repl_file_outside_workspace");let z=Buffer.alloc(16777217),fe=0;while(fe<z.length){let be=cc(re,z,fe,z.length-fe,null);if(!be)break;fe+=be}if(fe===z.length)throw Error("hands_repl_file_too_large");let ve=z.subarray(0,fe);return{name:_c(x),mimeType:Ec[mc(x).toLowerCase()]??"application/octet-stream",buffer:ve}}finally{sc(re)}}function kt(e,l){e.end(`${JSON.stringify(l)}
301
- `)}function tn(e){try{dc(e)}catch{}}async function Ws(e){if(e.managedBrowser&&e.driverModuleDirectory!==void 0)throw Error("hands_browser_ambiguous_driver_configuration");let l=e.launch||e.targetContext?null:e.managedBrowser?await Fn(e.managedBrowser,{executablePath:e.browserExecutablePath}):await jt({executablePath:e.browserExecutablePath,driverModuleDirectory:e.driverModuleDirectory});if(l?.status==="unavailable")throw Error(`hands_browser_${l.reason}`);let f=l?.status==="resolved"?l.executablePath:e.browserExecutablePath;if(!f||!Bt(f))throw Error("hands_browser_unavailable");let _=e.launch??(async(le)=>(e.targetContext?await gc():(await en(e.managedBrowser?.driverModuleDirectory??e.driverModuleDirectory)).chromium).launch(le)),w=[],S={},x=null,W=null,R=null,M=null,G=!1,F=null,I=new Map,re=new WeakMap,J=null,z=()=>{if(G)throw Error("hands_repl_stopped");if(M)throw M},fe=(le)=>{let he=re.get(le);if(he)return he;let Oe=Promise.resolve().then(()=>le.close()).then(()=>{I.delete(le)});return re.set(le,Oe),Oe},ve=async()=>{let le=[...I.entries()].reverse(),he=J??=performance.now()+kc,Oe=Promise.allSettled(le.filter(([,ke])=>ke==="context").map(([ke])=>fe(ke))),Ke;try{await Promise.race([Oe,new Promise((ke)=>{Ke=setTimeout(ke,Math.max(0,he-performance.now()))})])}finally{if(Ke)clearTimeout(Ke)}let Le=await Promise.allSettled(le.map(([ke])=>fe(ke))),Be=[];for(let[ke,We]of Le.entries()){if(We.status!=="rejected")continue;let rr=We.reason instanceof Error&&["Error","TimeoutError","ProtocolError"].includes(We.reason.name)?We.reason.name:"unknown";Be.push(Error(`hands_repl_close_failed: ${le[ke][1]}: ${rr}`))}if(Be.length)throw AggregateError(Be,"hands_repl_stop_unconfirmed")},be=(le,he)=>{if(I.set(le,he),G||M)fe(le).catch(()=>{return}),z();return le},Re=async()=>{let le=await _({executablePath:f,headless:!0,chromiumSandbox:e.managedBrowser===void 0,args:["--disable-background-networking","--disable-quic","--disable-dev-shm-usage","--disable-gpu","--disable-software-rasterizer","--dns-prefetch-disable","--force-webrtc-ip-handling-policy=disable_non_proxied_udp","--no-pings"]}),he=null;try{be(le,"browser"),he=e.targetContext??be(await le.newContext({viewport:{width:1440,height:900},screen:{width:1440,height:900},serviceWorkers:"block",acceptDownloads:!1}),"context");let Oe=await Oc(he,e.networkPolicy??{mode:"off"},e.onEgressDenied);if(z(),Oe){let Ge=he.newPage.bind(he);he.newPage=async()=>{let sr=await Ge();return await Oe.preparePage(sr),sr}}let Le=he.pages()[0]??await he.newPage();await Oe?.preparePage(Le),z();let Be=async(Ge=Le)=>{let sr=Ge;if(typeof sr.ariaSnapshot==="function")return sr.ariaSnapshot({timeout:1e4});return Le.locator("body").innerText({timeout:1e4})},ke=async(Ge,sr={})=>{let or=sr&&typeof sr==="object"&&!Array.isArray(sr)?sr:{},lr,Wr="image/png";if(Buffer.isBuffer(Ge)||Ge instanceof Uint8Array)lr=Buffer.from(Ge);else if(typeof Ge==="string"&&(Ge.startsWith("data:")||/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(Ge)))lr=Buffer.from(Ge.replace(/^data:[^,]*,/,""),"base64");else if(typeof Ge==="string"){let Zr=Bs(e.workspaceRoot,Ge);lr=Zr.buffer,Wr=Zr.mimeType}else throw Error("view() needs a Buffer, a base64 string, or a path to an image file");if(lr.length===0)throw Error("view(): the image is empty");let ln=String(or.label??"").replace(/[\r\n>]+/g," ").trim().slice(0,120),Kr=Number(or.maxWidth)||1024,dt=Number(or.quality)||72,Ut=e.targetContext?await le.newPage():await he.newPage();try{let Zr=`data:${Wr};base64,${lr.toString("base64")}`;for(let ur=0;ur<5;ur+=1){let jr=await Ut.evaluate(async(Lr)=>{let Mr=new Image;Mr.src=Lr.url,await Mr.decode();let Qr=Math.min(1,Lr.maxWidth/Mr.naturalWidth),Tr=document.createElement("canvas");Tr.width=Math.max(1,Math.round(Mr.naturalWidth*Qr)),Tr.height=Math.max(1,Math.round(Mr.naturalHeight*Qr));let Or=Tr.getContext("2d");if(!Or)throw Error("view(): canvas unavailable");return Or.fillStyle="#ffffff",Or.fillRect(0,0,Tr.width,Tr.height),Or.drawImage(Mr,0,0,Tr.width,Tr.height),{data:Tr.toDataURL("image/jpeg",Lr.q/100).split(",")[1]??"",width:Tr.width,height:Tr.height,sourceWidth:Mr.naturalWidth,sourceHeight:Mr.naturalHeight}},{url:Zr,maxWidth:Kr,q:dt}),ft=Buffer.from(jr.data,"base64");if(ft.length<=Ls){let Lr=ln||"image";return`<<<ARA_VIEW_IMAGE ${jr.data} image/jpeg ${Lr}>>>
302
- Viewing ${Lr} (${jr.sourceWidth}x${jr.sourceHeight} source, sent at ${jr.width}x${jr.height}, ${Math.round(ft.length/1024)}KB).`}if(Kr>640)Kr=Math.round(Kr*0.75);else dt=Math.max(30,dt-15)}throw Error(`view(): could not reduce the image under ${Math.round(Ls/1024)}KB`)}finally{await Ut.close().catch(()=>{return})}},We=Rs({browser:e.targetContext?.browser()??le,context:he,page:Le,a11y:Be,view:ke,readWorkspaceFile:(Ge)=>Bs(e.workspaceRoot,Ge),privateProfile:e.privateProfile,beforeNavigation:e.beforeNavigation,recording:e.recording,screenshotExport:e.screenshotExport,actionRecorder:()=>{let Ge=w,sr=S;return(or,lr)=>{if(Ge.length<To)Ge.push(or);if(lr)sr.page=lr}}}),rr=async(Ge)=>{z();let sr=be(await le.newContext({serviceWorkers:"block",acceptDownloads:!1}),"context");try{await sr.route("**/*",(lr)=>lr.abort()),z(),await sr.routeWebSocket("**/*",(lr)=>lr.close({code:1008,reason:"Reason evaluator network denied"})),z(),await sr.exposeBinding("__araHandsRpc",async(lr,Wr)=>e.onBrowserOperation?e.onBrowserOperation(Ge,()=>We.dispatch(Wr)):We.dispatch(Wr)),z();let or=await sr.newPage();return z(),await or.goto("data:text/html,<title>Reason Hands evaluator</title>"),z(),await or.evaluate(`(${ms})(${JSON.stringify(We.roots)})`),{context:sr,page:or,runId:Ge}}catch(or){throw await fe(sr).catch(()=>{return}),or}},nr=await rr(),Rr={browser:le,context:he,page:Le,evaluator:nr,async captureProgressFrame(Ge){return ke(await Ge.screenshot({type:"jpeg",quality:65,timeout:2000}),{label:"Screen after browser action"})},async resetEvaluator(Ge){await fe(Rr.evaluator.context),Rr.evaluator=await rr(Ge)}};return z(),Rr}catch(Oe){throw await ve().catch(()=>{return}),Oe}},$e=async()=>{if(z(),x)return x;if(!R){W=Re();let le;R=Promise.race([W,new Promise((he,Oe)=>{le=setTimeout(()=>Oe(Error("hands_browser_unavailable: startup timed out")),yc)})]).then((he)=>(z(),x=he,he)).catch(async()=>{M=Error("hands_browser_unavailable: startup failed or timed out");let he;try{await Promise.race([ve(),new Promise((Oe,Ke)=>{he=setTimeout(()=>Ke(Error("hands_repl_stop_timeout")),Ns)})])}catch{M=Error("hands_browser_unavailable: startup cleanup unconfirmed")}finally{if(he)clearTimeout(he)}throw M}).finally(()=>{if(le)clearTimeout(le)})}return R},qe=async(le,he,Oe=!1)=>{let Ke=await $e(),Le=S;if(e.onBrowserOperation&&Ke.evaluator.runId!==he)await Ke.resetEvaluator(he);let ke=(async()=>{let nr=await Ke.evaluator.page.evaluate(`(${hs})(${JSON.stringify({code:le})})`);if(typeof nr!=="string")throw Error("hands_repl_invalid_evaluator_output");let Rr=Le.page;if(Oe&&Rr&&!nr.includes("<<<ARA_VIEW_IMAGE")){let Ge=()=>Ke.captureProgressFrame(Rr);try{let sr=await(e.onBrowserOperation?e.onBrowserOperation(he,Ge):Ge());return Le.automaticProgressImage=!0,`${nr}
299
+ `.trim();import{Buffer as wt}from"buffer";import{randomUUID as xa}from"crypto";class ys extends Error{code;constructor(e){super(e==="hands_repl_private_profile_attribute_denied"?"Private browser attribute read denied.":e);this.code=e;this.name="HandsReplBrowserDispatcherError"}}var vs=new Set(["__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__proto__","constructor","prototype"]),gs=/^hands_[A-Za-z0-9_-]{8,128}$/,Pa=2048,ks=32,Ss=1e4,Ia=new Set(["href","src","alt","title","role","aria-label","aria-expanded","aria-checked","aria-selected","aria-disabled","placeholder","type","name","data-testid"]);function Aa(e){let l=e.split("+"),f=(l.pop()??"").replace(/^Key/,"").toLowerCase();if(f==="f12")return!0;if(l.some((_)=>["Control","ControlOrMeta","Meta"].includes(_))&&["l","n","t","j","i","p","s","w","u","o","r","tab","pageup","pagedown"].includes(f))return!0;if(l.some((_)=>["Control","ControlOrMeta","Meta"].includes(_))&&l.includes("Shift")&&f==="c")return!0;return l.includes("Alt")&&["d","arrowleft","arrowright","home"].includes(f)}var Ta=(e)=>{let l=e.closest("a[href],area[href]");return{password:e.tagName==="INPUT"&&e.type==="password",executableLink:Boolean(l&&!/^(https?:|about:blank)/i.test(l.href))}},Es={browser:{close:{returns:"void"},contexts:{returns:"context[]"},isConnected:{returns:"json"},version:{returns:"json"}},context:{addCookies:{returns:"void"},addInitScript:{returns:"void"},browser:{returns:"browser"},clearCookies:{returns:"void"},clearPermissions:{returns:"void"},close:{returns:"void"},cookies:{returns:"json"},grantPermissions:{returns:"void"},newPage:{returns:"page"},pages:{returns:"page[]"},setDefaultNavigationTimeout:{returns:"void"},setDefaultTimeout:{returns:"void"},setExtraHTTPHeaders:{returns:"void"},setGeolocation:{returns:"void"},setHTTPCredentials:{returns:"void"},setOffline:{returns:"void"},setViewportSize:{returns:"void"},storageState:{returns:"json"},viewportSize:{returns:"json",special:"contextViewportSize"}},page:{addInitScript:{returns:"void"},addScriptTag:{returns:"void"},addStyleTag:{returns:"void"},bringToFront:{returns:"void"},close:{returns:"void"},content:{returns:"json"},context:{returns:"context"},emulateMedia:{returns:"void"},evaluate:{returns:"json",requiresStringSource:!0},frame:{returns:"frame"},frameLocator:{returns:"frameLocator"},frames:{returns:"frame[]"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},goBack:{returns:"void"},goForward:{returns:"void"},goto:{returns:"void"},isClosed:{returns:"json"},locator:{returns:"locator"},mainFrame:{returns:"frame"},opener:{returns:"page"},pdf:{returns:"bytes"},reload:{returns:"void"},screenshot:{returns:"bytes"},selectOption:{returns:"json"},setContent:{returns:"void"},setDefaultNavigationTimeout:{returns:"void"},setDefaultTimeout:{returns:"void"},setExtraHTTPHeaders:{returns:"void"},setInputFiles:{returns:"void"},setViewportSize:{returns:"void"},title:{returns:"json"},url:{returns:"json"},viewportSize:{returns:"json"},waitForFunction:{returns:"void",requiresStringSource:!0},waitForLoadState:{returns:"void"},waitForNavigation:{returns:"void"},waitForTimeout:{returns:"void"},waitForURL:{returns:"void"}},locator:{all:{returns:"locator[]"},allInnerTexts:{returns:"json"},allTextContents:{returns:"json"},and:{returns:"locator"},ariaSnapshot:{returns:"json"},blur:{returns:"void"},boundingBox:{returns:"json"},check:{returns:"void"},clear:{returns:"void"},click:{returns:"void"},contentFrame:{returns:"frameLocator"},count:{returns:"json"},dblclick:{returns:"void"},dragTo:{returns:"void"},evaluate:{returns:"json",requiresStringSource:!0},evaluateAll:{returns:"json",requiresStringSource:!0},fill:{returns:"void"},filter:{returns:"locator"},first:{returns:"locator",special:"property"},focus:{returns:"void"},getAttribute:{returns:"json"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},hover:{returns:"void"},innerHTML:{returns:"json"},innerText:{returns:"json"},inputValue:{returns:"json"},isChecked:{returns:"json"},isEditable:{returns:"json"},isEnabled:{returns:"json"},isHidden:{returns:"json"},isVisible:{returns:"json"},last:{returns:"locator",special:"property"},locator:{returns:"locator"},nth:{returns:"locator"},or:{returns:"locator"},page:{returns:"page"},press:{returns:"void"},pressSequentially:{returns:"void"},scrollIntoViewIfNeeded:{returns:"void"},screenshot:{returns:"bytes"},selectOption:{returns:"json"},setInputFiles:{returns:"void"},tap:{returns:"void"},textContent:{returns:"json"},type:{returns:"void"},uncheck:{returns:"void"},waitFor:{returns:"void"}},frame:{addScriptTag:{returns:"void"},addStyleTag:{returns:"void"},childFrames:{returns:"frame[]"},content:{returns:"json"},evaluate:{returns:"json",requiresStringSource:!0},frameLocator:{returns:"frameLocator"},getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},goto:{returns:"void"},isDetached:{returns:"json"},locator:{returns:"locator"},name:{returns:"json"},page:{returns:"page"},parentFrame:{returns:"frame"},setContent:{returns:"void"},title:{returns:"json"},url:{returns:"json"},waitForFunction:{returns:"void",requiresStringSource:!0},waitForLoadState:{returns:"void"},waitForNavigation:{returns:"void"},waitForTimeout:{returns:"void"},waitForURL:{returns:"void"}},frameLocator:{getByAltText:{returns:"locator"},getByLabel:{returns:"locator"},getByPlaceholder:{returns:"locator"},getByRole:{returns:"locator"},getByTestId:{returns:"locator"},getByText:{returns:"locator"},getByTitle:{returns:"locator"},locator:{returns:"locator"},owner:{returns:"locator"}}};function Ie(e){throw new ys(e)}function Dr(e){if(!e||typeof e!=="object"||Array.isArray(e))return!1;let l=Object.getPrototypeOf(e);return l===Object.prototype||l===null}function yt(e,l=0,f={nodes:0}){if(l>ks||++f.nodes>Ss)Ie("hands_repl_json_too_complex");if(e===null||typeof e==="boolean"||typeof e==="string")return;if(typeof e==="number"){if(!Number.isFinite(e))Ie("hands_repl_invalid_json");return}if(Array.isArray(e)){for(let _ of e)yt(_,l+1,f);return}if(!Dr(e))Ie("hands_repl_invalid_json");for(let[_,w]of Object.entries(e)){if(vs.has(_))Ie("hands_repl_invalid_json");yt(w,l+1,f)}}function Dn(e){return typeof e==="string"&&Object.hasOwn(Es,e)}function Da(e){if(!e.endsWith("[]"))return null;let l=e.slice(0,-2);return Dn(l)?l:null}function bs(e){return Dr(e)&&Object.keys(e).length===2&&e.$handsRepl==="bytes"&&typeof e.base64==="string"}function Ca(e){return Dr(e)&&Object.keys(e).length===1&&e.$handsRepl==="undefined"}function ws(e){return Dr(e)&&Object.keys(e).length===2&&e.$handsRepl==="routeFulfill"&&"options"in e}function Vr(e){return!!e&&typeof e==="object"}function Yt(){return Object.freeze({$handsRepl:"undefined"})}function Ha(e){if(!wt.isBuffer(e)&&!(e instanceof Uint8Array))Ie("hands_repl_expected_bytes");return Object.freeze({$handsRepl:"bytes",base64:wt.from(e).toString("base64")})}function Rs(e){if(!Vr(e.browser)||!Vr(e.context)||!Vr(e.page))Ie("hands_repl_invalid_roots");if(typeof e.a11y!=="function"||typeof e.view!=="function")Ie("hands_repl_invalid_callbacks");let l=e.maxHandles??Pa;if(!Number.isInteger(l)||l<3||l>1e5)Ie("hands_repl_invalid_handle_limit");let f=new Map,_=new WeakMap,w=e.createOpaqueId??xa,S=(D,re)=>{if(!Vr(re))Ie("hands_repl_expected_target");let J=_.get(re)?.get(D);if(J)return J;if(f.size>=l)Ie("hands_repl_handle_limit");let z="";for(let be=0;be<16;be+=1){let Re=`hands_${w()}`;if(gs.test(Re)&&!f.has(Re)){z=Re;break}}if(!z)Ie("hands_repl_invalid_opaque_id");let fe=Object.freeze({$handsRepl:"handle",id:z,kind:D});f.set(z,{kind:D,target:re});let ve=_.get(re);if(!ve)ve=new Map,_.set(re,ve);return ve.set(D,fe),fe},x=Object.freeze({browser:S("browser",e.browser),context:S("context",e.context),page:S("page",e.page)}),W=(D)=>{if(!Dr(D)||Object.keys(D).length!==3||D.$handsRepl!=="handle"||typeof D.id!=="string"||!gs.test(D.id)||!Dn(D.kind))Ie("hands_repl_invalid_handle");let re=f.get(D.id);if(!re||re.kind!==D.kind)Ie("hands_repl_unknown_handle");return re},R=(D,re=0,J=new Set)=>{if(re>ks)Ie("hands_repl_json_too_complex");if(D===void 0)return Yt();if(D===null||typeof D==="boolean"||typeof D==="string")return D;if(typeof D==="number"){if(!Number.isFinite(D))Ie("hands_repl_non_json_result");return D}if(Array.isArray(D)){if(J.has(D))Ie("hands_repl_cyclic_result");J.add(D);try{return D.map((z)=>R(z,re+1,J))}finally{J.delete(D)}}if(!Dr(D))Ie("hands_repl_non_json_result");if(J.has(D))Ie("hands_repl_cyclic_result");J.add(D);try{let z=Object.create(null);for(let fe of Object.keys(D)){let ve=Object.getOwnPropertyDescriptor(D,fe);if(!ve||!("value"in ve))continue;z[fe]=R(ve.value,re+1,J)}return z}finally{J.delete(D)}},M=(D,re)=>{if(re==="void")return Yt();if(re==="json")return R(D);if(re==="bytes")return Ha(D);let J=Da(re);if(J){if(!Array.isArray(D))Ie("hands_repl_expected_target_list");if(J==="context"&&D.some((z)=>z!==e.context))Ie("hands_repl_foreign_context");return D.map((z)=>S(J,z))}if(D===null||D===void 0)return Yt();if(!Dn(re))Ie("hands_repl_invalid_return_kind");if(re==="context"&&D!==e.context)Ie("hands_repl_foreign_context");return S(re,D)},G=(D)=>{if(Dr(D)&&D.$handsRepl==="handle")return W(D).target;if(bs(D))return wt.from(D.base64,"base64");if(Ca(D))return;if(ws(D))Ie("hands_repl_route_fulfill_only");if(Array.isArray(D))return D.map(G);if(!Dr(D))return D;let re=Object.create(null);for(let[J,z]of Object.entries(D))re[J]=G(z);return re};return Object.freeze({roots:x,dispatch:async(D)=>{if(!Dr(D)||typeof D.type!=="string")Ie("hands_repl_invalid_request");if(D.type==="a11y"){let ye=D.target===void 0?f.get(x.page.id):W(D.target);if(!ye||ye.kind!=="page"&&ye.kind!=="locator")Ie("hands_repl_invalid_a11y_target");return R(await e.a11y(ye.target))}if(D.type==="view"){if(yt(D.source),D.options!==void 0)yt(D.options);let ye=bs(D.source)?wt.from(D.source.base64,"base64"):D.source;if(e.privateProfile&&!wt.isBuffer(ye))Ie("hands_repl_profile_requires_image_bytes");return R(await e.view(ye,D.options))}if(D.type!=="call")Ie("hands_repl_invalid_request");if(typeof D.method!=="string"||D.method.length===0||D.method.length>128)Ie("hands_repl_invalid_method");if(vs.has(D.method))Ie("hands_repl_forbidden_method");let re=W(D.target),J=D.args??[];if(!Array.isArray(J))Ie("hands_repl_invalid_arguments");if(yt(J),re.kind==="page"&&D.method==="captureScreenshot"){if(J.length!==0)Ie("hands_repl_invalid_arguments");if(!e.screenshotExport)Ie("hands_repl_screenshot_export_unavailable");return R(await e.screenshotExport(re.target))}if(re.kind==="context"&&["startRecording","stopRecording"].includes(D.method)){if(!e.recording||re.target!==e.context)Ie("hands_repl_recording_unavailable");if(J.length>(D.method==="startRecording"?1:0))Ie("hands_repl_invalid_arguments");return R(D.method==="startRecording"?await e.recording.start(J[0]):await e.recording.stop())}if(e.privateProfile){let ye=D.method;if(["evaluate","evaluateAll","waitForFunction","addInitScript","addScriptTag","addStyleTag","setContent","setInputFiles","route","content","cookies","storageState","addCookies","clearCookies","setExtraHTTPHeaders","setHTTPCredentials","grantPermissions","clearPermissions","innerHTML","textContent","allTextContents"].includes(ye)||re.kind==="browser"&&ye==="close"||re.kind==="context"&&ye==="close")Ie("hands_repl_private_profile_method_denied");if(re.kind==="browser"&&ye==="contexts")return M([e.context],"context[]");if((ye==="screenshot"||ye==="pdf")&&Dr(J[0])&&(("path"in J[0])||("style"in J[0])))Ie("hands_repl_private_profile_path_denied");if(ye==="goto"){if(typeof J[0]!=="string")Ie("hands_repl_private_profile_url_denied");try{let We=new URL(J[0]);if(!["http:","https:"].includes(We.protocol)&&J[0]!=="about:blank")Ie("hands_repl_private_profile_url_denied")}catch{Ie("hands_repl_private_profile_url_denied")}}if(ye==="getAttribute"&&(typeof J[0]!=="string"||!Ia.has(J[0].toLowerCase())))Ie("hands_repl_private_profile_attribute_denied");if(re.kind==="locator"&&["innerText","allInnerTexts","getAttribute"].includes(ye)){let We=[re.target];if(ye==="allInnerTexts"){let Ve=Reflect.get(re.target,"all");if(typeof Ve!=="function")Ie("hands_repl_private_profile_probe_unavailable");let De=await Reflect.apply(Ve,re.target,[]);if(!Array.isArray(De)||De.length>Ss||!De.every(Vr))Ie("hands_repl_private_profile_probe_unavailable");We=De}for(let Ve of We){let De=Reflect.get(Ve,"isVisible");if(typeof De!=="function"||!await Reflect.apply(De,Ve,[]))Ie("hands_repl_private_profile_hidden_value_denied")}}if(ye==="press"&&typeof J[0]==="string"&&Aa(J[0]))Ie("hands_repl_private_profile_browser_shortcut_denied");if(re.kind==="locator"&&["inputValue","click","dblclick","tap","press"].includes(ye)){let We=Reflect.get(re.target,"evaluate");if(typeof We!=="function")Ie("hands_repl_private_profile_probe_unavailable");let Ve=await Reflect.apply(We,re.target,[Ta]);if(!Dr(Ve)||typeof Ve.password!=="boolean"||typeof Ve.executableLink!=="boolean")Ie("hands_repl_private_profile_probe_unavailable");if(ye==="inputValue"&&Ve.password)Ie("hands_repl_private_profile_password_denied");if(ye!=="inputValue"&&Ve.executableLink)Ie("hands_repl_private_profile_url_denied");if(ye==="inputValue"){let De=Reflect.get(re.target,"isVisible");if(typeof De!=="function"||!await Reflect.apply(De,re.target,[]))Ie("hands_repl_private_profile_hidden_value_denied")}}}let z=Es[re.kind][D.method];if(!z)Ie("hands_repl_method_not_allowed");if(z.requiresStringSource&&typeof J[0]!=="string")Ie("hands_repl_string_source_required");if(re.kind==="browser"&&D.method==="contexts")return[x.context];if(["addInitScript","addScriptTag","addStyleTag","screenshot","pdf","storageState"].includes(D.method)&&J.some((ye)=>Dr(ye)&&("path"in ye)))Ie("hands_repl_file_path_not_allowed");if(D.method==="goto"&&typeof J[0]==="string"){let ye;try{ye=new URL(J[0]).protocol}catch{Ie("hands_repl_invalid_url")}if(!["http:","https:","data:","about:","blob:"].includes(ye))Ie("hands_repl_file_path_not_allowed")}if(z.special==="contextViewportSize"){let ye=Reflect.get(re.target,"pages");if(typeof ye!=="function")Ie("hands_repl_method_unavailable");let We=await Reflect.apply(ye,re.target,[]),Ve=Array.isArray(We)?We[0]:void 0,De=Vr(Ve)?Reflect.get(Ve,"viewportSize"):void 0;if(typeof De!=="function")return Yt();return M(await Reflect.apply(De,Ve,[]),z.returns)}if(z.special==="property"){let ye=Reflect.get(re.target,D.method);return M(typeof ye==="function"?Reflect.apply(ye,re.target,[]):ye,z.returns)}let fe=Reflect.get(re.target,D.method);if(typeof fe!=="function")Ie("hands_repl_method_unavailable");if(z.special==="route"){let ye=J[1];if(!ws(ye))Ie("hands_repl_invalid_route_handler");yt(ye.options);let We=G(ye.options),Ve=async(he)=>{if(!Vr(he))Ie("hands_repl_invalid_route");let xe=Reflect.get(he,"fulfill");if(typeof xe!=="function")Ie("hands_repl_invalid_route");await Reflect.apply(xe,he,[We])},De=[G(J[0]??null),Ve],le=await Reflect.apply(fe,re.target,De);return M(le,z.returns)}let ve=J.map(G);if(D.method==="setInputFiles"){let ye=re.kind==="locator"?0:1,We=async(De)=>{if(typeof De!=="string"){if(!Dr(De)||typeof De.name!=="string"||typeof De.mimeType!=="string"||!wt.isBuffer(De.buffer))Ie("hands_repl_invalid_file_input");return De}if(!e.readWorkspaceFile)Ie("hands_repl_workspace_required");return e.readWorkspaceFile(De)},Ve=ve[ye];ve[ye]=Array.isArray(Ve)?await Promise.all(Ve.map(We)):await We(Ve)}if(D.method==="goto")await e.beforeNavigation?.();let be=e.actionRecorder?.(),Re=await Reflect.apply(fe,re.target,ve),qe={click:"Click browser element",tap:"Click browser element",dblclick:"Double click browser element",fill:"Type text",type:"Type text",pressSequentially:"Type text",clear:"Clear browser field",press:"Press key",scrollIntoViewIfNeeded:"Scroll browser element into view",dragTo:"Drag on computer",selectOption:"Select browser option",check:"Check browser control",uncheck:"Uncheck browser control",hover:"Hover browser element",focus:"Focus browser element",goto:"Open browser page",reload:"Reload browser page",goBack:"Go back in browser",goForward:"Go forward in browser",screenshot:"Take browser screenshot"}[D.method];if(qe){let ye=Reflect.get(re.target,"page"),We=re.kind==="page"?re.target:typeof ye==="function"?Reflect.apply(ye,re.target,[]):void 0;be?.(qe,Vr(We)?We:void 0)}return M(Re,z.returns)}})}import{isIP as Is}from"net";import{Resolver as Na}from"dns/promises";import{isIP as Zt}from"net";var La=[["0.0.0.0",8],["10.0.0.0",8],["100.64.0.0",10],["127.0.0.0",8],["169.254.0.0",16],["172.16.0.0",12],["192.0.0.0",24],["192.0.2.0",24],["192.168.0.0",16],["198.18.0.0",15],["198.51.100.0",24],["203.0.113.0",24],["224.0.0.0",4],["240.0.0.0",4]];function Hn(e){if(Zt(e)!==4)return null;let l=e.split(".");if(l.length!==4)return null;let f=0;for(let _ of l){let w=Number(_);if(!Number.isInteger(w)||w<0||w>255)return null;f=f*256+w}return f>>>0}function Ba(e,l,f){let _=Hn(l);if(_===null)return!1;let w=f===0?0:4294967295<<32-f>>>0;return(e&w)>>>0===(_&w)>>>0}function Os(e){let l=Hn(e);if(l===null)return!0;return La.some(([f,_])=>Ba(l,f,_))}function ja(e){if(Zt(e)!==6)return null;let l=e.toLowerCase(),f=l.indexOf("%");if(f>=0)l=l.slice(0,f);let _=[],w=l.lastIndexOf(":"),S=w>=0?l.slice(w+1):"";if(S.includes(".")){let D=Hn(S);if(D===null)return null;_=[D>>>16&65535,D&65535],l=l.slice(0,w+1)+"0:0"}let x=l.split("::");if(x.length>2)return null;let W=(D)=>{if(D==="")return[];let re=[];for(let J of D.split(":")){if(J===""||J.length>4||!/^[0-9a-f]+$/.test(J))return null;re.push(Number.parseInt(J,16))}return re},R=W(x[0]??"");if(R===null)return null;if(x.length===1){let D=R;if(D.length!==8)return null;return _.length>0?D.slice(0,6).concat(_):D}let M=W(x[1]??"");if(M===null)return null;let G=8-R.length-M.length;if(G<0)return null;let F=R.concat(Array(G).fill(0),M);if(F.length!==8)return null;return _.length>0?F.slice(0,6).concat(_):F}function Ma(e,l){return`${e>>8&255}.${e&255}.${l>>8&255}.${l&255}`}function Wa(e){let l=ja(e);if(l===null)return!0;let[f,_,w]=l;if((f&57344)!==8192)return!0;if(f===8193&&(_&65024)===0)return!0;if(f===8193&&_===3512)return!0;if(f===16383&&(_&61440)===0)return!0;if(f===8194)return Os(Ma(_,w));return!1}function vr(e){return e.replace(/^\[|\]$/g,"")}function Xt(e){let l=vr(e.trim()),f=Zt(l);if(f===4)return Os(l);if(f===6)return Wa(l);return!0}function xs(e){if(e instanceof Error&&e.name==="TimeoutError")return"dns_timeout";switch(typeof e==="object"&&e!==null&&"code"in e?e.code:void 0){case"ENOTFOUND":return"dns_not_found";case"ENODATA":return"dns_empty";case"EAI_AGAIN":case"ESERVFAIL":case"ECONNREFUSED":return"dns_temporary";case"ETIMEOUT":case"ETIMEDOUT":return"dns_timeout";default:return"dns_failed"}}var Ps=5000;function Fa(e){return async(l,f)=>{if(f?.aborted)throw Error("aborted");let _=new Na({timeout:Ps,tries:1});if(e)_.setServers(e);let w=()=>_.cancel();f?.addEventListener("abort",w,{once:!0});try{let[S,x]=await Promise.allSettled([_.resolve4(l),_.resolve6(l)]),W=[...S.status==="fulfilled"?S.value:[],...x.status==="fulfilled"?x.value:[]];if(W.length>0)return W;let R=[S,x].flatMap((G)=>G.status==="rejected"?[G.reason]:[]);throw R.find((G)=>["dns_temporary","dns_timeout"].includes(xs(G)))??R[0]??Object.assign(Error("DNS returned no addresses"),{code:"ENODATA"})}finally{f?.removeEventListener("abort",w)}}}var Ua=Fa();async function za(e,l,f,_){if(_?.aborted)throw Error("aborted");let w=new AbortController,S,x,W=l(e,w.signal);W.catch(()=>{});try{return await Promise.race([W,new Promise((R,M)=>{if(S=setTimeout(()=>M(new DOMException("DNS lookup timed out","TimeoutError")),f),_)x=()=>M(Error("aborted")),_.addEventListener("abort",x,{once:!0})})])}finally{if(S!==void 0)clearTimeout(S);if(_&&x)_.removeEventListener("abort",x);w.abort()}}async function co(e,l=Ua,f){let _=vr(e);if(Zt(_))return Xt(_)?{ok:!1,reason:"non_public_ip"}:{ok:!0,addresses:[_]};let w;try{w=await za(_,l,Ps,f)}catch(S){return{ok:!1,reason:f?.aborted?f.reason instanceof Error&&f.reason.name==="TimeoutError"?"dns_timeout":"aborted":xs(S)}}if(w.length===0)return{ok:!1,reason:"dns_empty"};if(w.some(Xt))return{ok:!1,reason:"non_public_ip"};return{ok:!0,addresses:w}}var $a=/^(?:\*\.)?[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$/;function Nn(e){return e.length<=253&&$a.test(e.toLowerCase())}function Ka(e,l){let f=e.trim().toLowerCase();if(!Nn(f))return!1;if(f.startsWith("*.")){let _=f.slice(2);return l===_||l.endsWith(`.${_}`)}return f===l}function Ga(e){let l=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(e);if(!l)return null;let f=l.slice(1).map(Number);return f.some((_)=>_>255)?null:f}function Ln(e,l=[]){let f=(_)=>{if(_=_.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,""),!_.includes(":"))return _;try{_=new URL(`http://[${_}]/`).hostname.slice(1,-1)}catch{return _}let w=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(_);if(!w)return _;let S=parseInt(w[1],16),x=parseInt(w[2],16);return`${S>>8}.${S&255}.${x>>8}.${x&255}`};return l.some((_)=>f(_)===f(e))}function ot(e){e=e.toLowerCase().replace(/^\[|\]$/g,"");let l=Ga(e);if(l){let[S,x,W]=l;if(S===127)return"loopback";return S===0||S===10||S>=224||S===100&&x>=64&&x<=127||S===169&&x===254||S===172&&x>=16&&x<=31||S===192&&(x===168||x===0&&(W===0||W===2)||x===88&&W===99)||S===198&&(x===18||x===19||x===51&&W===100)||S===203&&x===0&&W===113?"private":"public"}if(!e.includes(":"))return"hostname";try{e=new URL(`http://[${e}]/`).hostname.slice(1,-1)}catch{return"private"}if(e==="::1")return"loopback";let f=/^::ffff:([\da-f]+):([\da-f]+)$/.exec(e);if(f){let S=parseInt(f[1],16),x=parseInt(f[2],16);return ot(`${S>>8}.${S&255}.${x>>8}.${x&255}`)==="public"?"public":"private"}let[_,w=0]=e.split(":").map((S)=>parseInt(S||"0",16));return _<8192||_>16383||_===8194||_===8193&&(w<512||w===3512)||_===16383&&w<4096?"private":"public"}function He(e,l){let f;try{f=new URL(e)}catch{return{allowed:!1,url:e,host:null,reason:"invalid_url"}}if(["about:","data:","blob:"].includes(f.protocol))return{allowed:!0,url:e,host:null,reason:"local_document"};if(!["http:","https:","ws:","wss:"].includes(f.protocol))return{allowed:!1,url:e,host:f.hostname||null,reason:"unsupported_protocol"};let _=f.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");if(l.mode==="off")return{allowed:!0,url:e,host:_,reason:"policy_off"};let w=(W)=>({allowed:!1,url:e,host:_,reason:W});if(f.username||f.password)return w("invalid_url");if(l.mode==="public_web"){let W=ot(_)!=="public"&&ot(_)!=="hostname"||_==="localhost"||/\.(?:localhost|local|internal|arpa)$/.test(_)||!_.includes(".")&&!Is(_)||Boolean(Is(_)&&Xt(_));return{allowed:!W,url:e,host:_,reason:W?"private_network":"public_web"}}let S=Number(f.port||(["https:","wss:"].includes(f.protocol)?443:80));if(l.deniedPorts?.includes(S)||Ln(_,l.deniedHosts))return w("destination_not_allowed");let x=ot(_);if(x==="private"||["local","internal","arpa"].some((W)=>_===W||_.endsWith(`.${W}`)))return w("private_network");if(x==="loopback"||_==="localhost"||_.endsWith(".localhost"))return l.allowedLoopbackPorts?.includes(S)?{allowed:!0,url:e,host:_,reason:"loopback"}:w("destination_not_allowed");if(l.allowedDomains.some((W)=>Ka(W,_)))return{allowed:!0,url:e,host:_,reason:"allowed_domain"};return{allowed:!1,url:e,host:_,reason:"destination_not_allowed"}}import As from"child_process";import{accessSync as Ja,constants as Va,readFileSync as qa,statSync as Ya}from"fs";import{createRequire as Xa}from"module";import{dirname as hf,isAbsolute as Bn,join as Za,resolve as gf,win32 as Qa}from"path";var jn=Object.freeze({schemaVersion:1,driver:"playwright-core",driverVersion:tr.dependencies["playwright-core"],browser:"chromium"}),Ts=["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Brave Browser.app/Contents/MacOS/Brave Browser","/Applications/Chromium.app/Contents/MacOS/Chromium"],Mn=["/usr/bin/chromium","/usr/bin/chromium-browser","/usr/bin/google-chrome","/usr/bin/google-chrome-stable"];function ec(e=process.env){let l=[e.ProgramFiles??"C:\\Program Files",e["ProgramFiles(x86)"]??"C:\\Program Files (x86)"],f=e.LOCALAPPDATA?[e.LOCALAPPDATA]:[],_=(w,...S)=>w.map((x)=>Qa.join(x,...S));return[..._([...l,...f],"Google","Chrome","Application","chrome.exe"),..._(l,"Microsoft","Edge","Application","msedge.exe"),..._([...l,...f],"BraveSoftware","Brave-Browser","Application","brave.exe")]}function Bt(e){try{return Ja(e,Va.X_OK),Bn(e)&&Ya(e).isFile()}catch{return!1}}function Wn(e,l=process.platform){let f=l==="darwin"?Ts:l==="linux"?Mn:l==="win32"?ec():null;return f?(e??f).find(Bt)??null:null}function rc(){if(!process.versions.bun)return;let e=Symbol.for("ara.headless-browser.bun-pipe-owners");if(Object.hasOwn(globalThis,e))return;let l=[];As.spawn=new Proxy(As.spawn,{apply(f,_,w){let S=Reflect.apply(f,_,w),x=w[1],W=w[2]?.stdio;if(Array.isArray(x)&&x.includes("--remote-debugging-pipe")&&Array.isArray(W)&&W[3]==="pipe"&&W[4]==="pipe")l.push(S);return S}}),Object.defineProperty(globalThis,e,{value:l})}async function en(e){if(rc(),e!==void 0){if(!Bn(e))throw Error("hands_browser_driver_path_must_be_absolute");let _=Za(e,"package.json"),w=JSON.parse(qa(_,"utf8"));if(w.name!==jn.driver)throw Error("hands_browser_wrong_driver");let S=Xa(_)(e),x=S.default?.chromium??S.chromium;if(!x)throw Error("hands_browser_missing_chromium");return{version:w.version,chromium:x}}let[l,f]=await Promise.all([import("./index-gmsadq51.js"),import("./package-way7qesn.js").then((m)=>Fi(m.default,1))]);return{version:f.default.version,chromium:l.chromium}}var tc=(e,l=jn.driverVersion)=>({status:"unavailable",reason:e,expectedDriverVersion:l}),nc=(e)=>e.loadDriver?.()??en(e.driverModuleDirectory);async function jt(e={}){return Ds(e,jn.driverVersion)}async function Fn(e,l={}){if(e.driverVersion!=="1.61.1"||!Bn(e.driverModuleDirectory))throw Error("hands_browser_invalid_managed_compatibility");return Ds({...l,driverModuleDirectory:e.driverModuleDirectory,allowSystemBrowser:!0},e.driverVersion)}async function Ds(e,l){let f=(R)=>tc(R,l),_=e.platform??process.platform;if(_!=="linux"&&_!=="darwin"&&_!=="win32")return f("unsupported_platform");let w;try{w=await nc(e)}catch{return f("driver_missing")}if(w.version!==l)return f("driver_version_mismatch");let S=(R,M)=>({status:"resolved",executablePath:R,source:M,driverVersion:w.version});if(e.executablePath!==void 0)return Bt(e.executablePath)?S(e.executablePath,"configured"):f("executable_missing");let x=w.chromium.executablePath();if(Bt(x))return S(x,"managed");let W=e.allowSystemBrowser===!0?Wn(e.systemCandidates,_):null;return W?S(W,"system"):f("executable_missing")}var hc=["/usr/local/bin/chromium",...Mn];function vn(e,l=js()){return Wn(e??(l==="linux"?hc:void 0),l)}async function gc(){try{return(await en()).chromium}catch{return uc(import.meta.url)("playwright-core").chromium}}var bc=1048576,wc=105000,yc=20000,Ns=5000,vc=2000,kc=1000,Sc=30000,Ls=81920,Ec={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"};async function Rc(e,l){let f=new URL(e.url()),_={...await e.allHeaders(),host:f.host};for(let w of Object.keys(_))if(/^(?:proxy-|connection$|upgrade$|transfer-encoding$|content-length$)/i.test(w))delete _[w];return new Promise((w,S)=>{let W=(f.protocol==="https:"?pc:fc)(f,{method:e.method(),headers:_,agent:!1,lookup:(M,G,F)=>{let D=st.isIP(l);if(G.all)F(null,[{address:l,family:D}]);else F(null,l,D)}},(M)=>{let G=[],F=0;M.on("data",(D)=>{if(F+=D.length,F>33554432)W.destroy(Error("hands_browser_response_too_large"));else G.push(D)}),M.on("error",S),M.on("end",()=>{let D={};for(let[re,J]of Object.entries(M.headers))if(J!==void 0&&!["transfer-encoding","connection","content-length"].includes(re))D[re]=Array.isArray(J)?J.join(`
300
+ `):J;w({status:M.statusCode??502,headers:D,body:Buffer.concat(G)})})}),R=setTimeout(()=>W.destroy(Error("hands_browser_fetch_timeout")),Sc);W.once("close",()=>clearTimeout(R)),W.on("error",S),W.end(e.postDataBuffer()??void 0)})}async function Oc(e,l,f=()=>{},_={lookup:(w)=>lc(w,{all:!0}),fetch:Rc}){let w=new WeakSet,S=new WeakMap,x=(W)=>{let R=S.get(W);if(R)return R;let M=(async()=>{if(!e.newCDPSession)return;let G=await e.newCDPSession(W),F=new Map;G.on("Network.loadingFinished",({requestId:D})=>F.delete(D)),G.on("Network.loadingFailed",({requestId:D})=>F.delete(D)),G.on("Fetch.requestPaused",async(D)=>{let re=D.networkId??D.requestId,J=D.redirectedRequestId?(F.get(re)??0)+1:0;F.set(re,J);let z=He(D.request.url,l),fe=l.mode==="enforce"&&Boolean(D.redirectedRequestId)&&z.host!==null&&!st.isIP(z.host),ve=!z.allowed?z:fe?{...z,allowed:!1,reason:"destination_not_allowed"}:J>20?{...z,allowed:!1,reason:"redirect_not_supported"}:null;try{if(ve)f(ve),await G.send("Fetch.failRequest",{requestId:D.requestId,errorReason:"BlockedByClient"});else await G.send("Fetch.continueRequest",{requestId:D.requestId})}catch{await G.send("Fetch.failRequest",{requestId:D.requestId,errorReason:"Failed"}).catch(()=>{})}}),await G.send("Network.enable"),await G.send("Fetch.enable",{patterns:[{urlPattern:"*",requestStage:"Request"}]}),w.add(W)})();return S.set(W,M),M};return await e.route("**/*",async(W)=>{let R=W.request().url(),M=He(R,l);if(M.allowed&&l.mode==="public_web"){await W.continue();return}let G=W.request();if(M.allowed&&M.host&&st.isIP(M.host)&&G.isNavigationRequest?.()){let F=G.frame();if(w.has(F.page())&&F===F.page().mainFrame()){await W.continue();return}}if(M.allowed&&(l.mode==="off"||M.reason==="local_document")){await W.continue();return}if(M.allowed&&M.host)try{let F=M.host,D=ot(F),re,J=await(async()=>{if(D!=="hostname")return[{address:F,family:st.isIP(F)}];if(M.reason==="loopback")return[{address:"127.0.0.1",family:4}];try{return await Promise.race([_.lookup(F),new Promise((z,fe)=>{re=setTimeout(()=>fe(Error("hands_browser_dns_timeout")),5000)})])}finally{if(re)clearTimeout(re)}})();if(!J.length||J.some(({address:z})=>{let fe=ot(z);return!st.isIP(z)||l.mode==="enforce"&&Ln(z,l.deniedHosts)||(M.reason==="loopback"?fe!=="loopback":fe!=="public")}))M={...M,allowed:!1,reason:"private_network"};else{let z=await _.fetch(W.request(),J[0].address);if(z.status>=300&&z.status<400){let fe=z.headers.location??R;try{fe=new URL(fe,R).href}catch{}let ve=He(fe,l);M=ve.allowed?{...ve,allowed:!1,reason:"redirect_not_supported"}:ve}else{await W.fulfill(z);return}}}catch{await W.abort("failed");return}f(M),await W.abort("blockedbyclient")}),await e.routeWebSocket("**/*",async(W)=>{let R=He(W.url(),l);if(l.mode==="enforce"&&R.allowed&&(!R.host||!st.isIP(R.host)))R={...R,allowed:!1,reason:"destination_not_allowed"};if(R.allowed){W.connectToServer();return}f(R),await W.close({code:1008,reason:"Reason egress policy denied"})}),l.mode==="off"?void 0:{preparePage:x}}async function Ms(e,l=js(),f){if(f){let w=await Fn(f,{platform:l,systemCandidates:e});return w.status==="resolved"?w.executablePath:null}if(e!==void 0){let w=vn(e,l);if(w)return w}let _=await jt({platform:l,systemCandidates:e,allowSystemBrowser:!0});return _.status==="resolved"?_.executablePath:null}function Bs(e,l){if(!e)throw Error("hands_repl_workspace_required");let f=zn(e),_=vt(e),w=$n(_,vt(_,l)),x=w!==".."&&!w.startsWith(`..${Gn}`)&&!Hs(w)?vt(f,w):vt(f,l);if(E(vt(_,l))||E(x))throw Error("hands_repl_protected_path");let W=(J)=>{let z=$n(f,J);return z!==""&&z!==".."&&!z.startsWith(`..${Gn}`)&&!Hs(z)},R=zn(x);if(E(R))throw Error("hands_repl_protected_path");if(!W(x)||!W(R))throw Error("hands_repl_file_outside_workspace");let M=$n(f,x).split(Gn),G=[f,...M.map((J,z)=>vt(f,...M.slice(0,z+1)))],F=G.map((J)=>Cs(J));if(F.some((J)=>J.isSymbolicLink()))throw Error("hands_repl_file_symlink");let D=F[F.length-1];if(!D.isFile()||D.nlink!==1||D.size>16777216)throw Error("hands_repl_file_not_regular_or_too_large");let re=ac(x,Un.O_RDONLY|Un.O_NOFOLLOW|Un.O_NONBLOCK);try{let J=ic(re);if(J.dev!==D.dev||J.ino!==D.ino||!J.isFile())throw Error("hands_repl_file_changed");for(let be=0;be<G.length;be++){let Re=Cs(G[be]);if(Re.dev!==F[be].dev||Re.ino!==F[be].ino||Re.isSymbolicLink())throw Error("hands_repl_file_changed")}if(!W(zn(x)))throw Error("hands_repl_file_outside_workspace");let z=Buffer.alloc(16777217),fe=0;while(fe<z.length){let be=cc(re,z,fe,z.length-fe,null);if(!be)break;fe+=be}if(fe===z.length)throw Error("hands_repl_file_too_large");let ve=z.subarray(0,fe);return{name:_c(x),mimeType:Ec[mc(x).toLowerCase()]??"application/octet-stream",buffer:ve}}finally{sc(re)}}function kt(e,l){e.end(`${JSON.stringify(l)}
301
+ `)}function tn(e){try{dc(e)}catch{}}async function Ws(e){if(e.managedBrowser&&e.driverModuleDirectory!==void 0)throw Error("hands_browser_ambiguous_driver_configuration");let l=e.launch||e.targetContext?null:e.managedBrowser?await Fn(e.managedBrowser,{executablePath:e.browserExecutablePath}):await jt({executablePath:e.browserExecutablePath,driverModuleDirectory:e.driverModuleDirectory});if(l?.status==="unavailable")throw Error(`hands_browser_${l.reason}`);let f=l?.status==="resolved"?l.executablePath:e.browserExecutablePath;if(!f||!Bt(f))throw Error("hands_browser_unavailable");let _=e.launch??(async(le)=>(e.targetContext?await gc():(await en(e.managedBrowser?.driverModuleDirectory??e.driverModuleDirectory)).chromium).launch(le)),w=[],S={},x=null,W=null,R=null,M=null,G=!1,F=null,D=new Map,re=new WeakMap,J=null,z=()=>{if(G)throw Error("hands_repl_stopped");if(M)throw M},fe=(le)=>{let he=re.get(le);if(he)return he;let xe=Promise.resolve().then(()=>le.close()).then(()=>{D.delete(le)});return re.set(le,xe),xe},ve=async()=>{let le=[...D.entries()].reverse(),he=J??=performance.now()+kc,xe=Promise.allSettled(le.filter(([,ke])=>ke==="context").map(([ke])=>fe(ke))),Ke;try{await Promise.race([xe,new Promise((ke)=>{Ke=setTimeout(ke,Math.max(0,he-performance.now()))})])}finally{if(Ke)clearTimeout(Ke)}let Le=await Promise.allSettled(le.map(([ke])=>fe(ke))),Be=[];for(let[ke,Me]of Le.entries()){if(Me.status!=="rejected")continue;let rr=Me.reason instanceof Error&&["Error","TimeoutError","ProtocolError"].includes(Me.reason.name)?Me.reason.name:"unknown";Be.push(Error(`hands_repl_close_failed: ${le[ke][1]}: ${rr}`))}if(Be.length)throw AggregateError(Be,"hands_repl_stop_unconfirmed")},be=(le,he)=>{if(D.set(le,he),G||M)fe(le).catch(()=>{return}),z();return le},Re=async()=>{let le=await _({executablePath:f,headless:!0,chromiumSandbox:e.managedBrowser===void 0,args:["--disable-background-networking","--disable-quic","--disable-dev-shm-usage","--disable-gpu","--disable-software-rasterizer","--dns-prefetch-disable","--force-webrtc-ip-handling-policy=disable_non_proxied_udp","--no-pings"]}),he=null;try{be(le,"browser"),he=e.targetContext??be(await le.newContext({viewport:{width:1440,height:900},screen:{width:1440,height:900},serviceWorkers:"block",acceptDownloads:!1}),"context");let xe=await Oc(he,e.networkPolicy??{mode:"off"},e.onEgressDenied);if(z(),xe){let Ge=he.newPage.bind(he);he.newPage=async()=>{let sr=await Ge();return await xe.preparePage(sr),sr}}let Le=he.pages()[0]??await he.newPage();await xe?.preparePage(Le),z();let Be=async(Ge=Le)=>{let sr=Ge;if(typeof sr.ariaSnapshot==="function")return sr.ariaSnapshot({timeout:1e4});return Le.locator("body").innerText({timeout:1e4})},ke=async(Ge,sr={})=>{let or=sr&&typeof sr==="object"&&!Array.isArray(sr)?sr:{},lr,Wr="image/png";if(Buffer.isBuffer(Ge)||Ge instanceof Uint8Array)lr=Buffer.from(Ge);else if(typeof Ge==="string"&&(Ge.startsWith("data:")||/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(Ge)))lr=Buffer.from(Ge.replace(/^data:[^,]*,/,""),"base64");else if(typeof Ge==="string"){let Zr=Bs(e.workspaceRoot,Ge);lr=Zr.buffer,Wr=Zr.mimeType}else throw Error("view() needs a Buffer, a base64 string, or a path to an image file");if(lr.length===0)throw Error("view(): the image is empty");let ln=String(or.label??"").replace(/[\r\n>]+/g," ").trim().slice(0,120),Kr=Number(or.maxWidth)||1024,dt=Number(or.quality)||72,Ft=e.targetContext?await le.newPage():await he.newPage();try{let Zr=`data:${Wr};base64,${lr.toString("base64")}`;for(let ur=0;ur<5;ur+=1){let jr=await Ft.evaluate(async(Lr)=>{let Mr=new Image;Mr.src=Lr.url,await Mr.decode();let Qr=Math.min(1,Lr.maxWidth/Mr.naturalWidth),Tr=document.createElement("canvas");Tr.width=Math.max(1,Math.round(Mr.naturalWidth*Qr)),Tr.height=Math.max(1,Math.round(Mr.naturalHeight*Qr));let Or=Tr.getContext("2d");if(!Or)throw Error("view(): canvas unavailable");return Or.fillStyle="#ffffff",Or.fillRect(0,0,Tr.width,Tr.height),Or.drawImage(Mr,0,0,Tr.width,Tr.height),{data:Tr.toDataURL("image/jpeg",Lr.q/100).split(",")[1]??"",width:Tr.width,height:Tr.height,sourceWidth:Mr.naturalWidth,sourceHeight:Mr.naturalHeight}},{url:Zr,maxWidth:Kr,q:dt}),ft=Buffer.from(jr.data,"base64");if(ft.length<=Ls){let Lr=ln||"image";return`<<<ARA_VIEW_IMAGE ${jr.data} image/jpeg ${Lr}>>>
302
+ Viewing ${Lr} (${jr.sourceWidth}x${jr.sourceHeight} source, sent at ${jr.width}x${jr.height}, ${Math.round(ft.length/1024)}KB).`}if(Kr>640)Kr=Math.round(Kr*0.75);else dt=Math.max(30,dt-15)}throw Error(`view(): could not reduce the image under ${Math.round(Ls/1024)}KB`)}finally{await Ft.close().catch(()=>{return})}},Me=Rs({browser:e.targetContext?.browser()??le,context:he,page:Le,a11y:Be,view:ke,readWorkspaceFile:(Ge)=>Bs(e.workspaceRoot,Ge),privateProfile:e.privateProfile,beforeNavigation:e.beforeNavigation,recording:e.recording,screenshotExport:e.screenshotExport,actionRecorder:()=>{let Ge=w,sr=S;return(or,lr)=>{if(Ge.length<To)Ge.push(or);if(lr)sr.page=lr}}}),rr=async(Ge)=>{z();let sr=be(await le.newContext({serviceWorkers:"block",acceptDownloads:!1}),"context");try{await sr.route("**/*",(lr)=>lr.abort()),z(),await sr.routeWebSocket("**/*",(lr)=>lr.close({code:1008,reason:"Reason evaluator network denied"})),z(),await sr.exposeBinding("__araHandsRpc",async(lr,Wr)=>e.onBrowserOperation?e.onBrowserOperation(Ge,()=>Me.dispatch(Wr)):Me.dispatch(Wr)),z();let or=await sr.newPage();return z(),await or.goto("data:text/html,<title>Reason Hands evaluator</title>"),z(),await or.evaluate(`(${ms})(${JSON.stringify(Me.roots)})`),{context:sr,page:or,runId:Ge}}catch(or){throw await fe(sr).catch(()=>{return}),or}},nr=await rr(),Rr={browser:le,context:he,page:Le,evaluator:nr,async captureProgressFrame(Ge){return ke(await Ge.screenshot({type:"jpeg",quality:65,timeout:2000}),{label:"Screen after browser action"})},async resetEvaluator(Ge){await fe(Rr.evaluator.context),Rr.evaluator=await rr(Ge)}};return z(),Rr}catch(xe){throw await ve().catch(()=>{return}),xe}},Fe=async()=>{if(z(),x)return x;if(!R){W=Re();let le;R=Promise.race([W,new Promise((he,xe)=>{le=setTimeout(()=>xe(Error("hands_browser_unavailable: startup timed out")),yc)})]).then((he)=>(z(),x=he,he)).catch(async()=>{M=Error("hands_browser_unavailable: startup failed or timed out");let he;try{await Promise.race([ve(),new Promise((xe,Ke)=>{he=setTimeout(()=>Ke(Error("hands_repl_stop_timeout")),Ns)})])}catch{M=Error("hands_browser_unavailable: startup cleanup unconfirmed")}finally{if(he)clearTimeout(he)}throw M}).finally(()=>{if(le)clearTimeout(le)})}return R},qe=async(le,he,xe=!1)=>{let Ke=await Fe(),Le=S;if(e.onBrowserOperation&&Ke.evaluator.runId!==he)await Ke.resetEvaluator(he);let ke=(async()=>{let nr=await Ke.evaluator.page.evaluate(`(${hs})(${JSON.stringify({code:le})})`);if(typeof nr!=="string")throw Error("hands_repl_invalid_evaluator_output");let Rr=Le.page;if(xe&&Rr&&!nr.includes("<<<ARA_VIEW_IMAGE")){let Ge=()=>Ke.captureProgressFrame(Rr);try{let sr=await(e.onBrowserOperation?e.onBrowserOperation(he,Ge):Ge());return Le.automaticProgressImage=!0,`${nr}
303
303
  ${sr}`}catch{return`${nr}
304
- Screen capture unavailable.`}}return nr})(),We,rr=new Promise((nr,Rr)=>{We=setTimeout(()=>Rr(Error("REPL evaluation timed out after 105 seconds")),wc)});try{return await Promise.race([ke,rr])}catch(nr){if(nr instanceof Error&&nr.message.includes("timed out"))ke.catch(()=>{return}),await Ke.resetEvaluator(he).catch(()=>{return});throw nr}finally{if(We)clearTimeout(We)}},ye=Promise.resolve(),Fe=new Set,Ve=new Set;tn(e.socketPath);let Ie=st.createServer((le)=>{Fe.add(le),le.once("close",()=>{Fe.delete(le),Ve.delete(le)}),le.setEncoding("utf8");let he="",Oe=!1;le.on("data",(Ke)=>{if(Oe)return;if(he+=Ke,he.length>bc){Oe=!0,kt(le,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let Le=he.indexOf(`
305
- `);if(Le===-1)return;Oe=!0;let Be=he.slice(0,Le);if(e.onControl)try{let ke=JSON.parse(Be);if(typeof ke.action==="string"&&ke.action!=="evaluate")Ve.add(le)}catch{}ye=ye.then(async()=>{if(le.destroyed)return;w=[],S={};try{let ke=JSON.parse(Be);if(ke.action==="probe"){let Ge=await $e();await qe("undefined",Ge.evaluator.runId),kt(le,{ok:!0,output:"ARA_HANDS_REPL_READY"});return}if(typeof ke.action==="string"&&ke.action!=="evaluate"&&e.onControl){kt(le,{ok:!0,output:await e.onControl(ke.action,ke)});return}if(ke.action!=="evaluate"||typeof ke.code!=="string")throw Error("Invalid REPL request");let We=ke.code,rr=typeof ke.runId==="string"?ke.runId:void 0,nr=()=>qe(We,rr,ke.includeProgressCapture===!0),Rr=await(e.onEvaluate?e.onEvaluate(ke,nr):nr());kt(le,{ok:!0,output:Rr,browserActions:w,...S.automaticProgressImage?{automaticProgressImage:!0}:{}})}catch(ke){kt(le,{ok:!1,error:ke instanceof Error?ke.message:String(ke),stack:ke instanceof Error?ke.stack:void 0,browserActions:w})}}).catch((ke)=>{kt(le,{ok:!1,error:ke instanceof Error?ke.message:String(ke)})})})});try{await new Promise((le,he)=>{Ie.once("error",he),Ie.listen(e.socketPath,()=>{Ie.off("error",he);try{if(process.platform!=="win32")oc(e.socketPath,384);le()}catch(Oe){Ie.close(()=>he(Oe))}})})}catch(le){throw tn(e.socketPath),le}return{socketPath:e.socketPath,browserExecutablePath:f,stop(){if(F)return F;G=!0;let le=Ve.size?setTimeout(()=>{for(let Le of Ve)Le.destroy()},vc):void 0,he=new Promise((Le)=>Ie.close(()=>{if(le)clearTimeout(le);Le()}));for(let Le of Fe)if(!Ve.has(Le))Le.destroy();ye.catch(()=>{return});let Oe=async()=>{await he,tn(e.socketPath);let Le=[ve()];if(W)Le.push(W.then(()=>{return},()=>{return}));let Be=await Promise.allSettled(Le),ke=await Promise.allSettled([ve()]),We=[...Be,...ke].filter((rr)=>rr.status==="rejected");if(We.length)throw AggregateError(We.map((rr)=>rr.reason),"hands_repl_stop_unconfirmed")},Ke;return F=Promise.race([Oe(),new Promise((Le,Be)=>{Ke=setTimeout(()=>Be(Error("hands_repl_stop_timeout")),Ns)})]).finally(()=>{if(Ke)clearTimeout(Ke);tn(e.socketPath)}),F}}}var xc=["private_runtime","runtime_root","temporary_directory","granted_root","workspace_layout","jobs","browser_socket","relay_url","environment_owner","job_environment","config_write"],Pc=["ENOENT","EACCES","EPERM","EINVAL","ENOTDIR","EISDIR","ELOOP","EROFS","ENOSPC","EMFILE","ENFILE","EEXIST"];function Fs(e,l){if(!e||!xc.includes(e))return null;let f=typeof l==="object"&&l!==null&&"code"in l?l.code:null;return{workspace_stage:e,workspace_errno:typeof f==="string"&&Pc.includes(f)?f:"unknown"}}import{lstatSync as Ic,readFileSync as Ac}from"fs";var Tc="/run/sc/egress-guard",Dc=10002,Jn=10003;function Us(e=process.platform,l=Tc){if(e!=="linux")return!1;try{let f=Ic(l);if(!f.isFile()||f.uid!==0||(f.mode&18)!==0)return!1;return Ac(l,"utf8")===`v1 ${Dc} ${Jn}
306
- `}catch{return!1}}var Cc=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function zs(e){let l=Cc.exec(e.replace(/\/+$/,""));return l?`${l[1]}/repo`:null}import{randomUUID as Sd}from"crypto";import{spawn as Ed,spawnSync as Rd}from"child_process";import{accessSync as Od,chmodSync as Ft,closeSync as xd,constants as xt,fchmodSync as Pd,fstatSync as Id,openSync as Ad,copyFileSync as Td,existsSync as go,lstatSync as dr,statSync as it,mkdtempSync as Dd,mkdirSync as Pt,realpathSync as er,renameSync as cn,rmSync as Cd,writeFileSync as dn}from"fs";import{homedir as Hd,tmpdir as mi}from"os";import{basename as Nd,dirname as Ir,join as cr,resolve as hi,sep as Ld}from"path";var Hc={"navigation.ara-egress.invalid":"canary_navigation","fetch.ara-egress.invalid":"canary_fetch","subresource.ara-egress.invalid":"canary_subresource","codeload.github.com":"canary_redirect","websocket.ara-egress.invalid":"canary_websocket"};function $s(e){return e===null?"other":Hc[e]??"other"}function Nr(e,l){if(e===void 0||l===void 0)return null;let f=Math.round(l-e);return Number.isSafeInteger(f)&&f>=0&&f<=600000?f:null}var Ye="workspace_mode",Yr="granted_root",Br="project_root",St="terminal_root",Et="terminal_benchmark_tool_profile",Nc=["bash","bash-node-repl","bash-node-repl-files"],Ks="hands_node_repl_persistent_execution_unsupported";function Gs(e){return e==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function Js(e){return Nc.includes(e)}var Gf=i({device_id:t().uuid(),root_id:t().uuid()}),qn=/^reason\/[0-9a-f]{8}$/,Lc=c({source_path:t().refine(X).optional(),branch:t().regex(qn)}),Jf=i({checkout_mode:s(["worktree","direct"]).optional(),project_workspace_source:i({kind:n("local_device"),device_id:t().uuid(),root_id:t().uuid(),path:t().refine(X).optional(),worktree:Lc.optional()})});import{execFile as Bc}from"child_process";var jc=20000,Mc=1e4,Vs=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,Wc=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function qs(e,l=Fc){let f=(fe,ve=Mc)=>l([...Wc,"-C",e,...fe],ve),_=async(fe)=>{let ve=await f(fe);return ve.status===0?ve.stdout.trim():null},w=await _(["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(!w||!Vs.test(w))return null;let S=w.slice(0,12),x=(fe)=>({commit:w,from:"head",note:`reason: started from ${fe}`}),W=await _(["symbolic-ref","--quiet","HEAD"]);if(!W?.startsWith("refs/heads/"))return x(`the checkout's detached HEAD ${S}`);let R=W.slice(11),M=await f(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(M.status!==0||M.stdout.trim())return x(`${R} at ${S}: the checkout has uncommitted changes, which stay there`);let G=await _(["config","--get",`branch.${R}.remote`]),F=await _(["config","--get",`branch.${R}.merge`]);if(!G||!F?.startsWith("refs/")||G.startsWith("-"))return x(`${R} at ${S}: it has no upstream to catch up with`);let I=G==="."||(await f(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",G,F],jc)).status===0,re=await _(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),J=re?await _(["rev-parse","--verify","--quiet","@{upstream}^{commit}"]):null;if(!re||!J||!Vs.test(J))return x(`${R} at ${S}: ${I?"it has no upstream to catch up with":`fetching ${G} failed`}`);if(!I)return x(`${R} at ${S}: fetching ${re} failed, so it may be behind`);if(J===w)return x(`${R} at ${S}, the same commit as ${re} after fetching it`);if((await f(["merge-base","--is-ancestor",w,J])).status!==0)return x(`${R} at ${S}: it has commits that ${re} does not`);let z=await _(["rev-list","--count",`${w}..${J}`]);return{commit:J,from:"upstream",note:`reason: started from ${re} at ${J.slice(0,12)}, fetched just now: ${R} had no commits of its own and was ${z??"some"} commits behind it`}}function Fc(e,l){return new Promise((f)=>{Bc("git",e,{encoding:"utf8",timeout:l,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(_,w)=>{let S=_?typeof _.code==="number"?_.code:null:0;f({status:S,stdout:String(w??"")})})})}import{lstatSync as Uc,readdirSync as Zf,readFileSync as Qf,realpathSync as Ys,rmdirSync as ep,unlinkSync as rp,writeFileSync as zc}from"fs";import{join as Yn,resolve as np}from"path";var $c=".reason-device";function Xs(e,l,f){let _=l.split("/"),w=de.split("/");if(_.length!==w.length+2||w.some((S,x)=>_[x]!==S)||!ir.test(_[w.length]))return;try{let S=Kc(e,_[w.length]);zc(Yn(S,$c),f,{flag:"wx",mode:384})}catch{}}function Kc(e,l){let f=()=>new r("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!ir.test(l))throw f();let _=Yn(Ys(e),de),w=Yn(_,l);if(!Uc(w).isDirectory()||Ys(w)!==w)throw f();return w}import{createHash as Gc}from"crypto";import{join as Jc}from"path";function Vc(e){return Pr(e)}function $r(){throw new r("environment_unavailable","The private Session environment is unavailable or stale.")}function nn(e){return Gc("sha256").update(JSON.stringify({...e,variables:Object.fromEntries(Object.entries(e.variables).sort(([l],[f])=>l.localeCompare(f)))})).digest("hex")}function Zs(e,l){v(e);let f=Jc(e,"environment.json"),_,w=new Set,S=(W,R)=>`${R}:${W}`,x=(W)=>{let R=yr.safeParse(W);if(!R.success)return $r();let M=R.data,G=l.identity(),F=Date.parse(M.expires_at);if(!G||M.run_id!==l.runId||M.device_id!==l.deviceId||M.root_id!==l.rootId||M.binding.kind!==l.binding.kind||M.binding.target_revision!==l.binding.target_revision||M.binding.root_grant_revision!==l.binding.root_grant_revision||M.binding.target_generation!==G.generation||M.binding.target_fence_id!==G.fenceId||F<=Date.now()||F>l.expiresAtMs||l.expiresAtMs<=Date.now()||Object.keys(M.variables).some((I)=>!Vc(I)))return $r();if(M.git){let I=new URL(l.apiOrigin),re=new URL(M.git.base_url),J=Date.parse(M.git.expires_at);if(re.origin!==I.origin)throw new r("environment_git_origin_mismatch","The delivered Git broker is not on this worker's API origin.");if(!["/git","/git/"].includes(re.pathname)||re.username||re.password||re.search||re.hash||J<=Date.now()||J>F)return $r()}if(M.cloud_access&&!ds(M.cloud_access,l.apiOrigin))throw new r("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return M};return{path:f,install(W){let R=x(W),M=nn(R);if(_&&(R.revision<_.revision||R.revision===_.revision&&(M!==_.hash||R.snapshot_id!==_.snapshotId)))return $r();if(!_||R.revision>_.revision){if(fo(f,R,V.snapshotBytes),nn(x(JSON.parse(h(f,V.snapshotBytes))))!==M)return $r();let G=_;if(_={revision:R.revision,hash:M,snapshotId:R.snapshot_id,generation:R.binding.target_generation},G&&G.generation<_.generation)w.add(S(G.snapshotId,G.revision))}else if(nn(x(JSON.parse(h(f,V.snapshotBytes))))!==_.hash)return $r();return{installed:!0,snapshot_id:R.snapshot_id,installed_revision:R.revision}},current(){if(!_)return $r();try{let W=x(JSON.parse(h(f,V.snapshotBytes)));if(nn(W)!==_.hash)return $r();return W}catch{return $r()}},carried:(W,R)=>w.has(S(W,R))}}var Rt=Object.freeze([Object.freeze({version:"0.2.61",artifact_sha256:"02ffcd514bf7cc0a9e73d4ce31ecea32709429cd0adf79e7062c1b70ff9ab8b8",legacy_linux_x64_sha256:"cdc0828abde3157e39afc6a64e033deee52ff7cfb09b55a42e60394df24980b9"}),Object.freeze({version:"0.2.62",artifact_sha256:"20a77fff617e18315c60777d46a2de2c433e42eba4e1c5e0b5535d967847303d",legacy_linux_x64_sha256:"cce594365d518b680abfb2378d234c8ef4e3daf257df83adef650a4523fb2d92"}),Object.freeze({version:"0.2.63",artifact_sha256:"20a77fff617e18315c60777d46a2de2c433e42eba4e1c5e0b5535d967847303d"}),Object.freeze({version:"0.2.64",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.65",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.66",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.67",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.68",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.69",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.70",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.71",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.72",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.73",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.74",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.75",artifact_sha256:"a6e0648894f1f4876affd77c0ff42642c1f9cbe9bb752de19d7a97a5fb3b820e"}),Object.freeze({version:"0.2.76",artifact_sha256:"857446b7e0b25fe1cc21e58860c7d984ee9a1c28efb4a4c49bc573a2d70bb3c0"}),Object.freeze({version:"0.2.77",artifact_sha256:"857446b7e0b25fe1cc21e58860c7d984ee9a1c28efb4a4c49bc573a2d70bb3c0"}),Object.freeze({version:"0.2.78",artifact_sha256:"0a7a7ece14850a28b8f972d66e4eef570eb2bb75d58f8a82f4e9afe91424e27f",pi_tools_v1:!0}),Object.freeze({version:"0.2.79",artifact_sha256:"96f52656b454fc5b9ffe520f5c5d55720b5173eb084cd326d2710e434623897b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.80",artifact_sha256:"6ee0ed70889e2771bd9b239ee039b549361b56ce870e08956ec7cce7fa199cd7",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.81",artifact_sha256:"c8909b36f4ee9316c0c3e298cb9adb5fc821a6ec5ca365cab60043eb942c258a",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.82",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.83",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.84",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.85",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.86",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.87",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.88",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.89",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.90",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.91",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.92",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.93",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.94",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.95",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.96",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.97",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.98",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.99",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.100",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.101",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.102",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.103",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.104",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.105",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.106",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.107",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.108",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.109",artifact_sha256:"7a82b33611b9f47478fb181d0da6f49a04f7e4bc401a7752530fecffb2dc5864",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.110",artifact_sha256:"00b7dcc9078a7d7ea4814414fbf92dcf9ba3b0fd51186aac1b967e9ae306a377",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.111",artifact_sha256:"7688e992667a48defe6fefb3b8624012b918e8776498faf9e5b20b69c13d7520",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.112",artifact_sha256:"7688e992667a48defe6fefb3b8624012b918e8776498faf9e5b20b69c13d7520",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.113",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.114",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.115",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.116",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.117",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.118",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.119",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.120",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.121",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.122",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.123",artifact_sha256:"ae68959cc57c3d3e360ba16883479d0706a0c2e742fe61a66b78e12fbbf5463e",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.124",artifact_sha256:"ae68959cc57c3d3e360ba16883479d0706a0c2e742fe61a66b78e12fbbf5463e",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.125",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.126",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.127",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.128",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.129",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.130",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.131",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.132",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.133",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.134",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.135",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.136",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.137",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.138",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.139",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.140",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.141",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.142",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.143",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.144",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.145",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.146",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.147",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.148",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.149",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.150",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.151",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.152",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.153",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.154",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.155",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.156",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.157",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.158",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.159",artifact_sha256:"cc806ca6df14c39d45a944d1e1db9827dae35b3e66e0265ededb3eea3d883dcb",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.160",artifact_sha256:"0b8f6c4598a19acbeff93929efc237dbc4e356ccb26abf6957e297bfc1b551e8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.161",artifact_sha256:"d570f5035bfc5916c31f4954ce5bcc00013eec83edb020edbbfbd3260b9c17d0",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.162",artifact_sha256:"6e52c44af7a3ea3633a4dc28aa63696143cd80044bca7f67a57c4c156985566f",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.163",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.164",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.165",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.166",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.167",artifact_sha256:"62658de309f9b9c8fd70041c83898d8625d85fed303ac6e60c3a17afc85477e2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.168",artifact_sha256:"24d7efe74218b862a90f48cf71dc59dce1d0dba29b167168aca06649bbfab364",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.169",artifact_sha256:"83879d03741c3f37c1502535d128685421cd7a498bc22543516a23ef2b21e496",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.170",artifact_sha256:"386b975277972e253599e5168b654e35c50b5eed9cbe711d7359e2efedd78f31",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.171",artifact_sha256:"386b975277972e253599e5168b654e35c50b5eed9cbe711d7359e2efedd78f31",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.172",artifact_sha256:"7a01a820961bd03b31007e46ba4f09df0a621ea5bfc9ee84548d6acdfd750169",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.173",artifact_sha256:"82c9ece017e109cf8b4b54734ac7a81b1ecb2ff35a426998369b6c3e690fd1ae",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.174",artifact_sha256:"07fa1db4f84afe909ad4de4bcdbda9bc785cf2598b51769b1f5620bb86b3743b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.175",artifact_sha256:"07fa1db4f84afe909ad4de4bcdbda9bc785cf2598b51769b1f5620bb86b3743b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.176",artifact_sha256:"ba3e211489877d0622aeca87be98e235d245f39d2b57f275cd924168d05f98ce",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0})]),qc="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",Yc=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",qc]),Qs=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),vp=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),kp=new Set([b,...Rt.map((e)=>e.artifact_sha256),...Yc,...Qs]);var Sp=new Set([b,...Rt.filter((e)=>e.pi_tools_v1).map((e)=>e.artifact_sha256),...Qs]);var Ep=new Set([b,...Rt.filter((e)=>e.pi_tools_confinement_v1).map((e)=>e.artifact_sha256)]);var Rp=new Set([b,...Rt.filter((e)=>e.home_folder_v1).map((e)=>e.artifact_sha256)]);var Op=new Set([b,...Rt.filter((e)=>e.background_bash_v1).map((e)=>e.artifact_sha256)]);var xp=new Set([b,...Rt.filter((e)=>e.machine_sdk_v1).map((e)=>e.artifact_sha256)]);var Xc=[T,"reason-hands-worker.cjs"];function ei(e){return typeof e==="string"&&Xc.includes(e)}var Zc;function ti(){return Zc??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as Qc,constants as Xn,fstatSync as ni,lstatSync as ed,openSync as rd,readSync as td,realpathSync as nd,watch as od}from"fs";import{dirname as oi}from"path";function on(e,l){let f;try{let _=oi(e),w=ed(_);if(!w.isDirectory()||w.isSymbolicLink()||!A(w,18)||nd(_)!==_)return null;f=rd(e,Xn.O_RDONLY|Xn.O_NOFOLLOW|Xn.O_NONBLOCK);let S=ni(f);if(!S.isFile()||S.nlink!==1||!A(S)||S.size<1||S.size>8192)return null;let x=Buffer.alloc(8193),W=td(f,x,0,x.length,0),R=ni(f);if(W!==S.size||R.size!==S.size||R.nlink!==1||R.mtimeMs!==S.mtimeMs||R.ctimeMs!==S.ctimeMs)return null;let M=JSON.parse(x.subarray(0,W).toString("utf8"));if(!M||M.pid!==l.pid||!Number.isSafeInteger(M.pid)||M.pid<1||M.launchId!==l.launchId||M.workerVersion!==l.workerVersion||M.protocolVersion!==l.protocolVersion||M.workerArtifactSha256!==l.workerArtifactSha256||M.workerEntrypoint!==l.workerEntrypoint||M.workspaceAliasReady!==!0||!U(M.targetGeneration)||!U(M.generation)||!N(M.fenceId))return null;return{...l,generation:M.generation,targetGeneration:M.targetGeneration,fenceId:M.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(f!==void 0)Qc(f)}}var sd=(e,l,f)=>{let _=od(e,{persistent:!1},l);return _.on("error",f),_};function si(e){let l=new AbortController,f=e.initial,_=f.targetGeneration,w=!1,S=!1,x,W,R=()=>{if(S)return;S=!0,x?.close(),x=void 0,clearInterval(W),e.signal.removeEventListener("abort",R),l.abort()},M=()=>{if(S)return;if(!e.isAlive()){R();return}let G=on(e.path,e.initial);if(!G||G.generation<f.generation||G.targetGeneration<f.targetGeneration||G.targetGeneration===f.targetGeneration&&G.fenceId!==f.fenceId)return;if(f=G,w||G.targetGeneration<=_)return;_=G.targetGeneration,w=!0,Promise.resolve().then(()=>(l.signal.throwIfAborted(),e.publish(G,l.signal))).catch(()=>{if(!S)R(),e.failed?.()}).finally(()=>{w=!1,M()})};if(e.signal.aborted)return R(),{stop:R};e.signal.addEventListener("abort",R,{once:!0});try{x=(e.watch??sd)(oi(e.path),M,()=>{x?.close(),x=void 0})}catch{}return W=setInterval(M,1000),W.unref?.(),M(),{stop:R}}import{spawn as id}from"child_process";import{chmodSync as ad,mkdtempSync as cd,realpathSync as dd,rmSync as ld,unlinkSync as ud,writeFileSync as fd}from"fs";import pd from"net";import{platform as _d,tmpdir as md}from"os";import{join as ii}from"path";var ai=1048576,po=105000,hd=2000,gd=String.raw`
304
+ Screen capture unavailable.`}}return nr})(),Me,rr=new Promise((nr,Rr)=>{Me=setTimeout(()=>Rr(Error("REPL evaluation timed out after 105 seconds")),wc)});try{return await Promise.race([ke,rr])}catch(nr){if(nr instanceof Error&&nr.message.includes("timed out"))ke.catch(()=>{return}),await Ke.resetEvaluator(he).catch(()=>{return});throw nr}finally{if(Me)clearTimeout(Me)}},ye=Promise.resolve(),We=new Set,Ve=new Set;tn(e.socketPath);let De=st.createServer((le)=>{We.add(le),le.once("close",()=>{We.delete(le),Ve.delete(le)}),le.setEncoding("utf8");let he="",xe=!1;le.on("data",(Ke)=>{if(xe)return;if(he+=Ke,he.length>bc){xe=!0,kt(le,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let Le=he.indexOf(`
305
+ `);if(Le===-1)return;xe=!0;let Be=he.slice(0,Le);if(e.onControl)try{let ke=JSON.parse(Be);if(typeof ke.action==="string"&&ke.action!=="evaluate")Ve.add(le)}catch{}ye=ye.then(async()=>{if(le.destroyed)return;w=[],S={};try{let ke=JSON.parse(Be);if(ke.action==="probe"){let Ge=await Fe();await qe("undefined",Ge.evaluator.runId),kt(le,{ok:!0,output:"ARA_HANDS_REPL_READY"});return}if(typeof ke.action==="string"&&ke.action!=="evaluate"&&e.onControl){kt(le,{ok:!0,output:await e.onControl(ke.action,ke)});return}if(ke.action!=="evaluate"||typeof ke.code!=="string")throw Error("Invalid REPL request");let Me=ke.code,rr=typeof ke.runId==="string"?ke.runId:void 0,nr=()=>qe(Me,rr,ke.includeProgressCapture===!0),Rr=await(e.onEvaluate?e.onEvaluate(ke,nr):nr());kt(le,{ok:!0,output:Rr,browserActions:w,...S.automaticProgressImage?{automaticProgressImage:!0}:{}})}catch(ke){kt(le,{ok:!1,error:ke instanceof Error?ke.message:String(ke),stack:ke instanceof Error?ke.stack:void 0,browserActions:w})}}).catch((ke)=>{kt(le,{ok:!1,error:ke instanceof Error?ke.message:String(ke)})})})});try{await new Promise((le,he)=>{De.once("error",he),De.listen(e.socketPath,()=>{De.off("error",he);try{if(process.platform!=="win32")oc(e.socketPath,384);le()}catch(xe){De.close(()=>he(xe))}})})}catch(le){throw tn(e.socketPath),le}return{socketPath:e.socketPath,browserExecutablePath:f,stop(){if(F)return F;G=!0;let le=Ve.size?setTimeout(()=>{for(let Le of Ve)Le.destroy()},vc):void 0,he=new Promise((Le)=>De.close(()=>{if(le)clearTimeout(le);Le()}));for(let Le of We)if(!Ve.has(Le))Le.destroy();ye.catch(()=>{return});let xe=async()=>{await he,tn(e.socketPath);let Le=[ve()];if(W)Le.push(W.then(()=>{return},()=>{return}));let Be=await Promise.allSettled(Le),ke=await Promise.allSettled([ve()]),Me=[...Be,...ke].filter((rr)=>rr.status==="rejected");if(Me.length)throw AggregateError(Me.map((rr)=>rr.reason),"hands_repl_stop_unconfirmed")},Ke;return F=Promise.race([xe(),new Promise((Le,Be)=>{Ke=setTimeout(()=>Be(Error("hands_repl_stop_timeout")),Ns)})]).finally(()=>{if(Ke)clearTimeout(Ke);tn(e.socketPath)}),F}}}var xc=["private_runtime","runtime_root","temporary_directory","granted_root","workspace_layout","jobs","browser_socket","relay_url","environment_owner","job_environment","config_write"],Pc=["ENOENT","EACCES","EPERM","EINVAL","ENOTDIR","EISDIR","ELOOP","EROFS","ENOSPC","EMFILE","ENFILE","EEXIST"];function Fs(e,l){if(!e||!xc.includes(e))return null;let f=typeof l==="object"&&l!==null&&"code"in l?l.code:null;return{workspace_stage:e,workspace_errno:typeof f==="string"&&Pc.includes(f)?f:"unknown"}}import{lstatSync as Ic,readFileSync as Ac}from"fs";var Tc="/run/sc/egress-guard",Dc=10002,Jn=10003;function Us(e=process.platform,l=Tc){if(e!=="linux")return!1;try{let f=Ic(l);if(!f.isFile()||f.uid!==0||(f.mode&18)!==0)return!1;return Ac(l,"utf8")===`v1 ${Dc} ${Jn}
306
+ `}catch{return!1}}var Cc=/^(\/.+)-sidechat-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/;function zs(e){let l=Cc.exec(e.replace(/\/+$/,""));return l?`${l[1]}/repo`:null}import{randomUUID as Sd}from"crypto";import{spawn as Ed,spawnSync as Rd}from"child_process";import{accessSync as Od,chmodSync as Wt,closeSync as xd,constants as Pt,fchmodSync as Pd,fstatSync as Id,openSync as Ad,copyFileSync as Td,existsSync as go,lstatSync as dr,statSync as it,mkdtempSync as Dd,mkdirSync as It,realpathSync as er,renameSync as cn,rmSync as Cd,writeFileSync as dn}from"fs";import{homedir as Hd,tmpdir as mi}from"os";import{basename as Nd,dirname as Ir,join as cr,resolve as hi,sep as Ld}from"path";var Hc={"navigation.ara-egress.invalid":"canary_navigation","fetch.ara-egress.invalid":"canary_fetch","subresource.ara-egress.invalid":"canary_subresource","codeload.github.com":"canary_redirect","websocket.ara-egress.invalid":"canary_websocket"};function $s(e){return e===null?"other":Hc[e]??"other"}function Nr(e,l){if(e===void 0||l===void 0)return null;let f=Math.round(l-e);return Number.isSafeInteger(f)&&f>=0&&f<=600000?f:null}var Ze="workspace_mode",Yr="granted_root",Br="project_root",St="terminal_root",Et="terminal_benchmark_tool_profile",Nc=["bash","bash-node-repl","bash-node-repl-files"],Ks="hands_node_repl_persistent_execution_unsupported";function Gs(e){return e==="bash"?null:"hands_node_repl_persistent_execution_unsupported"}function Js(e){return Nc.includes(e)}var Gf=i({device_id:t().uuid(),root_id:t().uuid()}),qn=/^reason\/[0-9a-f]{8}$/,Lc=c({source_path:t().refine(Y).optional(),branch:t().regex(qn)}),Jf=i({checkout_mode:s(["worktree","direct"]).optional(),project_workspace_source:i({kind:n("local_device"),device_id:t().uuid(),root_id:t().uuid(),path:t().refine(Y).optional(),worktree:Lc.optional()})});import{execFile as Bc}from"child_process";var jc=20000,Mc=1e4,Vs=/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/,Wc=["-c","core.hooksPath=/dev/null","-c","core.fsmonitor=false","-c","gc.auto=0","-c","maintenance.auto=false"];async function qs(e,l=Fc){let f=(fe,ve=Mc)=>l([...Wc,"-C",e,...fe],ve),_=async(fe)=>{let ve=await f(fe);return ve.status===0?ve.stdout.trim():null},w=await _(["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(!w||!Vs.test(w))return null;let S=w.slice(0,12),x=(fe)=>({commit:w,from:"head",note:`reason: started from ${fe}`}),W=await _(["symbolic-ref","--quiet","HEAD"]);if(!W?.startsWith("refs/heads/"))return x(`the checkout's detached HEAD ${S}`);let R=W.slice(11),M=await f(["--no-optional-locks","status","--porcelain=v1","--untracked-files=no"]);if(M.status!==0||M.stdout.trim())return x(`${R} at ${S}: the checkout has uncommitted changes, which stay there`);let G=await _(["config","--get",`branch.${R}.remote`]),F=await _(["config","--get",`branch.${R}.merge`]);if(!G||!F?.startsWith("refs/")||G.startsWith("-"))return x(`${R} at ${S}: it has no upstream to catch up with`);let D=G==="."||(await f(["fetch","--quiet","--no-tags","--no-write-fetch-head","--no-recurse-submodules",G,F],jc)).status===0,re=await _(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"]),J=re?await _(["rev-parse","--verify","--quiet","@{upstream}^{commit}"]):null;if(!re||!J||!Vs.test(J))return x(`${R} at ${S}: ${D?"it has no upstream to catch up with":`fetching ${G} failed`}`);if(!D)return x(`${R} at ${S}: fetching ${re} failed, so it may be behind`);if(J===w)return x(`${R} at ${S}, the same commit as ${re} after fetching it`);if((await f(["merge-base","--is-ancestor",w,J])).status!==0)return x(`${R} at ${S}: it has commits that ${re} does not`);let z=await _(["rev-list","--count",`${w}..${J}`]);return{commit:J,from:"upstream",note:`reason: started from ${re} at ${J.slice(0,12)}, fetched just now: ${R} had no commits of its own and was ${z??"some"} commits behind it`}}function Fc(e,l){return new Promise((f)=>{Bc("git",e,{encoding:"utf8",timeout:l,maxBuffer:1048576,env:{...process.env,GIT_TERMINAL_PROMPT:"0"}},(_,w)=>{let S=_?typeof _.code==="number"?_.code:null:0;f({status:S,stdout:String(w??"")})})})}import{lstatSync as Uc,readdirSync as Zf,readFileSync as Qf,realpathSync as Ys,rmdirSync as ep,unlinkSync as rp,writeFileSync as zc}from"fs";import{join as Yn,resolve as np}from"path";var $c=".reason-device";function Xs(e,l,f){let _=l.split("/"),w=de.split("/");if(_.length!==w.length+2||w.some((S,x)=>_[x]!==S)||!ir.test(_[w.length]))return;try{let S=Kc(e,_[w.length]);zc(Yn(S,$c),f,{flag:"wx",mode:384})}catch{}}function Kc(e,l){let f=()=>new r("session_worktree_outside_workspace","Reason removes only Session folders in ~/.reason/workspace/sessions.");if(!ir.test(l))throw f();let _=Yn(Ys(e),de),w=Yn(_,l);if(!Uc(w).isDirectory()||Ys(w)!==w)throw f();return w}import{createHash as Gc}from"crypto";import{join as Jc}from"path";function Vc(e){return Pr(e)}function $r(){throw new r("environment_unavailable","The private Session environment is unavailable or stale.")}function nn(e){return Gc("sha256").update(JSON.stringify({...e,variables:Object.fromEntries(Object.entries(e.variables).sort(([l],[f])=>l.localeCompare(f)))})).digest("hex")}function Zs(e,l){v(e);let f=Jc(e,"environment.json"),_,w=new Set,S=(W,R)=>`${R}:${W}`,x=(W)=>{let R=yr.safeParse(W);if(!R.success)return $r();let M=R.data,G=l.identity(),F=Date.parse(M.expires_at);if(!G||M.run_id!==l.runId||M.device_id!==l.deviceId||M.root_id!==l.rootId||M.binding.kind!==l.binding.kind||M.binding.target_revision!==l.binding.target_revision||M.binding.root_grant_revision!==l.binding.root_grant_revision||M.binding.target_generation!==G.generation||M.binding.target_fence_id!==G.fenceId||F<=Date.now()||F>l.expiresAtMs||l.expiresAtMs<=Date.now()||Object.keys(M.variables).some((D)=>!Vc(D)))return $r();if(M.git){let D=new URL(l.apiOrigin),re=new URL(M.git.base_url),J=Date.parse(M.git.expires_at);if(re.origin!==D.origin)throw new r("environment_git_origin_mismatch","The delivered Git broker is not on this worker's API origin.");if(!["/git","/git/"].includes(re.pathname)||re.username||re.password||re.search||re.hash||J<=Date.now()||J>F)return $r()}if(M.cloud_access&&!ds(M.cloud_access,l.apiOrigin))throw new r("environment_cloud_access_origin_mismatch","The delivered cloud access is not on this worker's API origin.");return M};return{path:f,install(W){let R=x(W),M=nn(R);if(_&&(R.revision<_.revision||R.revision===_.revision&&(M!==_.hash||R.snapshot_id!==_.snapshotId)))return $r();if(!_||R.revision>_.revision){if(fo(f,R,V.snapshotBytes),nn(x(JSON.parse(h(f,V.snapshotBytes))))!==M)return $r();let G=_;if(_={revision:R.revision,hash:M,snapshotId:R.snapshot_id,generation:R.binding.target_generation},G&&G.generation<_.generation)w.add(S(G.snapshotId,G.revision))}else if(nn(x(JSON.parse(h(f,V.snapshotBytes))))!==_.hash)return $r();return{installed:!0,snapshot_id:R.snapshot_id,installed_revision:R.revision}},current(){if(!_)return $r();try{let W=x(JSON.parse(h(f,V.snapshotBytes)));if(nn(W)!==_.hash)return $r();return W}catch{return $r()}},carried:(W,R)=>w.has(S(W,R))}}var Rt=Object.freeze([Object.freeze({version:"0.2.61",artifact_sha256:"02ffcd514bf7cc0a9e73d4ce31ecea32709429cd0adf79e7062c1b70ff9ab8b8",legacy_linux_x64_sha256:"cdc0828abde3157e39afc6a64e033deee52ff7cfb09b55a42e60394df24980b9"}),Object.freeze({version:"0.2.62",artifact_sha256:"20a77fff617e18315c60777d46a2de2c433e42eba4e1c5e0b5535d967847303d",legacy_linux_x64_sha256:"cce594365d518b680abfb2378d234c8ef4e3daf257df83adef650a4523fb2d92"}),Object.freeze({version:"0.2.63",artifact_sha256:"20a77fff617e18315c60777d46a2de2c433e42eba4e1c5e0b5535d967847303d"}),Object.freeze({version:"0.2.64",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.65",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.66",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.67",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.68",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.69",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.70",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.71",artifact_sha256:"830afe8cffb1f4ebb2663b5f86e5d2a7c9965fa03706178b251eea5d415917d2"}),Object.freeze({version:"0.2.72",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.73",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.74",artifact_sha256:"6071ba92082b8378f5484e8dce446d3f0c3bde61d5b5ca48efa6f72389d3ab64"}),Object.freeze({version:"0.2.75",artifact_sha256:"a6e0648894f1f4876affd77c0ff42642c1f9cbe9bb752de19d7a97a5fb3b820e"}),Object.freeze({version:"0.2.76",artifact_sha256:"857446b7e0b25fe1cc21e58860c7d984ee9a1c28efb4a4c49bc573a2d70bb3c0"}),Object.freeze({version:"0.2.77",artifact_sha256:"857446b7e0b25fe1cc21e58860c7d984ee9a1c28efb4a4c49bc573a2d70bb3c0"}),Object.freeze({version:"0.2.78",artifact_sha256:"0a7a7ece14850a28b8f972d66e4eef570eb2bb75d58f8a82f4e9afe91424e27f",pi_tools_v1:!0}),Object.freeze({version:"0.2.79",artifact_sha256:"96f52656b454fc5b9ffe520f5c5d55720b5173eb084cd326d2710e434623897b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.80",artifact_sha256:"6ee0ed70889e2771bd9b239ee039b549361b56ce870e08956ec7cce7fa199cd7",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.81",artifact_sha256:"c8909b36f4ee9316c0c3e298cb9adb5fc821a6ec5ca365cab60043eb942c258a",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.82",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.83",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.84",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.85",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.86",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.87",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.88",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.89",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.90",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.91",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.92",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.93",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.94",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.95",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.96",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.97",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.98",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.99",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.100",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.101",artifact_sha256:"38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.102",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.103",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.104",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.105",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.106",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.107",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.108",artifact_sha256:"53da53b31916c077bd63814db6cef8646785352d628b06a9ded927a94b08ecdd",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.109",artifact_sha256:"7a82b33611b9f47478fb181d0da6f49a04f7e4bc401a7752530fecffb2dc5864",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.110",artifact_sha256:"00b7dcc9078a7d7ea4814414fbf92dcf9ba3b0fd51186aac1b967e9ae306a377",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.111",artifact_sha256:"7688e992667a48defe6fefb3b8624012b918e8776498faf9e5b20b69c13d7520",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.112",artifact_sha256:"7688e992667a48defe6fefb3b8624012b918e8776498faf9e5b20b69c13d7520",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.113",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.114",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.115",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.116",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.117",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.118",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.119",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.120",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.121",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.122",artifact_sha256:"cc134e4d22b3f4032099d9f3c18a95815177598e0e6658840702e0dafaf5c7ad",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.123",artifact_sha256:"ae68959cc57c3d3e360ba16883479d0706a0c2e742fe61a66b78e12fbbf5463e",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.124",artifact_sha256:"ae68959cc57c3d3e360ba16883479d0706a0c2e742fe61a66b78e12fbbf5463e",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.125",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.126",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.127",artifact_sha256:"503ec2935bd73740bca494782cea6e6740667ce416d1a526c8cdf152ab3d0090",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.128",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.129",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.130",artifact_sha256:"852f8b11cee963d2f077f010b5c836fab0ee84e0026c4762bc4c7ef28e4deb2b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.131",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.132",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.133",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.134",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.135",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.136",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.137",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.138",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.139",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.140",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.141",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.142",artifact_sha256:"39e5173130068852fd81ffbe0f75cf52d7afcfcd92d640fedda85e1993960527",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.143",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.144",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.145",artifact_sha256:"ddd5382224321a671a5e338ccc8f9aae09ad876b534e6a8bfec07dc04c5b57d3",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0}),Object.freeze({version:"0.2.146",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.147",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.148",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.149",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.150",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.151",artifact_sha256:"8b2959fed27dff6769a0124ecbbddceaa671dc2dd502f5f77d54dbe69c99e4b5",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.152",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.153",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.154",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.155",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.156",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.157",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.158",artifact_sha256:"065b5bfc86ec87cf2907d83864ffef9912a8cb18b2b36db435c74cfd3891b8f8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0}),Object.freeze({version:"0.2.159",artifact_sha256:"cc806ca6df14c39d45a944d1e1db9827dae35b3e66e0265ededb3eea3d883dcb",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.160",artifact_sha256:"0b8f6c4598a19acbeff93929efc237dbc4e356ccb26abf6957e297bfc1b551e8",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.161",artifact_sha256:"d570f5035bfc5916c31f4954ce5bcc00013eec83edb020edbbfbd3260b9c17d0",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.162",artifact_sha256:"6e52c44af7a3ea3633a4dc28aa63696143cd80044bca7f67a57c4c156985566f",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.163",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.164",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.165",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.166",artifact_sha256:"8c14891abb51ab566864387137ea4af511db7ef9c565afb63e4f2b49c91260b6",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.167",artifact_sha256:"62658de309f9b9c8fd70041c83898d8625d85fed303ac6e60c3a17afc85477e2",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.168",artifact_sha256:"24d7efe74218b862a90f48cf71dc59dce1d0dba29b167168aca06649bbfab364",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.169",artifact_sha256:"83879d03741c3f37c1502535d128685421cd7a498bc22543516a23ef2b21e496",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.170",artifact_sha256:"386b975277972e253599e5168b654e35c50b5eed9cbe711d7359e2efedd78f31",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.171",artifact_sha256:"386b975277972e253599e5168b654e35c50b5eed9cbe711d7359e2efedd78f31",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.172",artifact_sha256:"7a01a820961bd03b31007e46ba4f09df0a621ea5bfc9ee84548d6acdfd750169",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.173",artifact_sha256:"82c9ece017e109cf8b4b54734ac7a81b1ecb2ff35a426998369b6c3e690fd1ae",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.174",artifact_sha256:"07fa1db4f84afe909ad4de4bcdbda9bc785cf2598b51769b1f5620bb86b3743b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.175",artifact_sha256:"07fa1db4f84afe909ad4de4bcdbda9bc785cf2598b51769b1f5620bb86b3743b",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0}),Object.freeze({version:"0.2.176",artifact_sha256:"ba3e211489877d0622aeca87be98e235d245f39d2b57f275cd924168d05f98ce",pi_tools_v1:!0,background_bash_v1:!0,machine_sdk_v1:!0,pi_tools_confinement_v1:!0,home_folder_v1:!0})]),qc="16befed856b4414dee65733e82549e1db74fe0ff3841d2571cfd8605d3ee970b",Yc=Object.freeze(["ea63410f321f70848139a63ddcaa9f3f0a48daa3641898cc1db9f0e15ddfbb13","6cd101ddb09f87ed6996aa92a93911b1759b5ae33e9579c3dff8225ecfcbe1b6",qc]),Qs=Object.freeze(["0f57db3036c275f78064796a72827d0f47fe702475e5feebb31e1569bcb5a0cf","38e82c8fefcc4ef98468eb3b4f0df450e4e196a8bd1063bb4de14ffef951a0c2"]),vp=Object.freeze(["pi_tools_v1","background_bash_v1","machine_sdk_v1","pi_tools_confinement_v1","home_folder_v1","workspace_before_v1"]),kp=new Set([b,...Rt.map((e)=>e.artifact_sha256),...Yc,...Qs]);var Sp=new Set([b,...Rt.filter((e)=>e.pi_tools_v1).map((e)=>e.artifact_sha256),...Qs]);var Ep=new Set([b,...Rt.filter((e)=>e.pi_tools_confinement_v1).map((e)=>e.artifact_sha256)]);var Rp=new Set([b,...Rt.filter((e)=>e.home_folder_v1).map((e)=>e.artifact_sha256)]);var Op=new Set([b,...Rt.filter((e)=>e.background_bash_v1).map((e)=>e.artifact_sha256)]);var xp=new Set([b,...Rt.filter((e)=>e.machine_sdk_v1).map((e)=>e.artifact_sha256)]);var Xc=[T,"reason-hands-worker.cjs"];function ei(e){return typeof e==="string"&&Xc.includes(e)}var Zc;function ti(){return Zc??{kind:"unavailable",status:"unsupported_entrypoint",sha256:null,observed_at_ms:null}}import{closeSync as Qc,constants as Xn,fstatSync as ni,lstatSync as ed,openSync as rd,readSync as td,realpathSync as nd,watch as od}from"fs";import{dirname as oi}from"path";function on(e,l){let f;try{let _=oi(e),w=ed(_);if(!w.isDirectory()||w.isSymbolicLink()||!A(w,18)||nd(_)!==_)return null;f=rd(e,Xn.O_RDONLY|Xn.O_NOFOLLOW|Xn.O_NONBLOCK);let S=ni(f);if(!S.isFile()||S.nlink!==1||!A(S)||S.size<1||S.size>8192)return null;let x=Buffer.alloc(8193),W=td(f,x,0,x.length,0),R=ni(f);if(W!==S.size||R.size!==S.size||R.nlink!==1||R.mtimeMs!==S.mtimeMs||R.ctimeMs!==S.ctimeMs)return null;let M=JSON.parse(x.subarray(0,W).toString("utf8"));if(!M||M.pid!==l.pid||!Number.isSafeInteger(M.pid)||M.pid<1||M.launchId!==l.launchId||M.workerVersion!==l.workerVersion||M.protocolVersion!==l.protocolVersion||M.workerArtifactSha256!==l.workerArtifactSha256||M.workerEntrypoint!==l.workerEntrypoint||M.workspaceAliasReady!==!0||!H(M.targetGeneration)||!H(M.generation)||!N(M.fenceId))return null;return{...l,generation:M.generation,targetGeneration:M.targetGeneration,fenceId:M.fenceId,workspaceAliasReady:!0}}catch{return null}finally{if(f!==void 0)Qc(f)}}var sd=(e,l,f)=>{let _=od(e,{persistent:!1},l);return _.on("error",f),_};function si(e){let l=new AbortController,f=e.initial,_=f.targetGeneration,w=!1,S=!1,x,W,R=()=>{if(S)return;S=!0,x?.close(),x=void 0,clearInterval(W),e.signal.removeEventListener("abort",R),l.abort()},M=()=>{if(S)return;if(!e.isAlive()){R();return}let G=on(e.path,e.initial);if(!G||G.generation<f.generation||G.targetGeneration<f.targetGeneration||G.targetGeneration===f.targetGeneration&&G.fenceId!==f.fenceId)return;if(f=G,w||G.targetGeneration<=_)return;_=G.targetGeneration,w=!0,Promise.resolve().then(()=>(l.signal.throwIfAborted(),e.publish(G,l.signal))).catch(()=>{if(!S)R(),e.failed?.()}).finally(()=>{w=!1,M()})};if(e.signal.aborted)return R(),{stop:R};e.signal.addEventListener("abort",R,{once:!0});try{x=(e.watch??sd)(oi(e.path),M,()=>{x?.close(),x=void 0})}catch{}return W=setInterval(M,1000),W.unref?.(),M(),{stop:R}}import{spawn as id}from"child_process";import{chmodSync as ad,mkdtempSync as cd,realpathSync as dd,rmSync as ld,unlinkSync as ud,writeFileSync as fd}from"fs";import pd from"net";import{platform as _d,tmpdir as md}from"os";import{join as ii}from"path";var ai=1048576,po=105000,hd=2000,gd=String.raw`
307
307
  const { writeSync } = require("node:fs");
308
308
  const { createRequire } = require("node:module");
309
309
  const { join } = require("node:path");
@@ -444,9 +444,9 @@ lines.on("line", (line) => {
444
444
  });
445
445
  `;function bd(e=process.execPath,l=process.versions.bun){return l?"node":e}function Zn(e){try{ud(e)}catch{}}function sn(e,l){e.end(`${JSON.stringify(l)}
446
446
  `)}function Qn(e){return JSON.stringify(e)}function wd(e){let l=cd(ii(md(),"reason-node-repl-")),f=ii(l,"node-repl.sb"),w=["(version 1)","(deny default)",'(import "system.sb")',"(allow process*)","(deny network*)",`(allow file-read* ${["/System","/usr","/bin","/opt/homebrew","/usr/local"].map((x)=>`(subpath ${Qn(x)})`).join(" ")})`,`(allow file-read* file-write* (subpath ${Qn(e.workRoot)}) (subpath ${Qn(l)}))`].join(`
447
- `);fd(f,w,{mode:384});let S=!1;return{command:"/usr/bin/sandbox-exec",args:["-f",f,e.nodeExecutable,...e.nodeArgs],cwd:e.workRoot,env:{...e.environment,TMPDIR:l},async cleanup(){if(S)return;S=!0,ld(l,{recursive:!0,force:!0})}}}async function yd(e){let l=dd(e.workRoot),f=e.nodeExecutable??bd(),_=["--max-old-space-size=512","--permission",`--allow-fs-read=${l}`,`--allow-fs-write=${l}`,"-e",gd],w=He({home:l,temporaryDirectory:l}),S=e.platformName??_d();if(S==="linux")return{command:f,args:_,cwd:l,env:w,async cleanup(){}};if(S==="darwin")return wd({nodeExecutable:f,nodeArgs:_,workRoot:l,environment:w});throw Error("hands_node_repl_platform_unsupported")}async function Wt(e){let l;try{await Promise.race([e,new Promise((f,_)=>{l=setTimeout(()=>_(Error("hands_node_repl_child_cleanup_timeout")),hd)})])}finally{clearTimeout(l)}}async function ci(e){if(e.executionMode!=="single-evaluation")throw Error(Ks);let l=await yd(e),f;try{f=id(l.command,l.args,{cwd:l.cwd,env:l.env,stdio:["pipe","pipe","pipe"]})}catch(be){throw await l.cleanup(),be}let _=new Promise((be)=>f.once("close",()=>be())),w;f.once("error",(be)=>{w=be});let S=!1,x=!1,W="";f.stderr.setEncoding("utf8"),f.stderr.on("data",(be)=>{W=`${W}${be}`.slice(-16384)});let R=f.stdout,M,G=(be,Re,$e)=>{if($e)be.failure??=$e;if(be.finishing)return;be.finishing=!0,x=!0,f.kill("SIGKILL"),Wt(_).then(()=>{if(be.failure)be.reject(be.failure);else be.resolve(Re??{})},(qe)=>be.reject(qe))},F=()=>{if(x=!0,M)G(M,void 0,Error("hands_node_repl_state_lost"));else f.kill("SIGKILL")},I="";R?.setEncoding("utf8"),R?.on("data",(be)=>{if(M?.finishing||x)return;if(I+=be,I.length>ai){F();return}while(!0){let Re=I.indexOf(`
448
- `);if(Re===-1)return;let $e=I.slice(0,Re);I=I.slice(Re+1);let qe=M;if(!qe){F();return}try{let ye=JSON.parse($e);if(qe.action==="probe")qe.resolve(ye);else{G(qe,ye);return}}catch{G(qe,void 0,Error("invalid_hands_node_repl_child_response"));return}}});let re=(be)=>{let Re=W.trim(),$e=be??Error(Re?`hands_node_repl_child_exited:${Re}`:"hands_node_repl_child_exited");if(x=!0,M&&!M.finishing)G(M,void 0,$e)};f.once("error",re),f.once("close",()=>re()),f.stdin.on("error",re);let J=(be)=>new Promise((Re,$e)=>{if(S||x||f.exitCode!==null||f.signalCode!==null){$e(Error(x?"hands_node_repl_state_lost":"hands_node_repl_stopped"));return}let qe=setTimeout(F,be.action==="probe"?1e4:Math.max(1,Math.min(e.evaluationTimeoutMs??po-1000,po-1000))),ye={action:be.action,finishing:!1,resolve(Fe){if(M===ye)M=void 0;clearTimeout(qe),Re(Fe)},reject(Fe){if(M===ye)M=void 0;clearTimeout(qe),$e(Fe)}};M=ye,f.stdin.write(`${JSON.stringify(be)}
449
- `,(Fe)=>{if(!Fe)return;G(ye,void 0,Fe)})});try{if(!R){if(f.pid===void 0)await Wt(_);throw w??Error("hands_node_repl_control_pipe_missing")}let be=await J({action:"probe"});if(be.ok!==!0||be.output!=="ARA_HANDS_REPL_READY")throw Error("hands_node_repl_probe_failed")}catch(be){S=!0,f.kill("SIGKILL");try{await Wt(_)}finally{await l.cleanup()}throw be}let z=Promise.resolve(),fe=new Set;Zn(e.socketPath);let ve=pd.createServer((be)=>{fe.add(be),be.once("close",()=>fe.delete(be)),be.setEncoding("utf8");let Re="",$e=!1,qe=!1;be.once("close",()=>{if(qe)F()}),be.on("error",()=>be.destroy()),be.on("data",(ye)=>{if($e)return;if(Re+=ye,Re.length>ai){$e=!0,sn(be,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let Fe=Re.indexOf(`
450
- `);if(Fe===-1)return;$e=!0;let Ve=Re.slice(0,Fe);z=z.then(async()=>{if(be.destroyed)return;try{let Ie=JSON.parse(Ve);if(Ie.action!=="evaluate"||typeof Ie.code!=="string")throw Error("Invalid REPL request");qe=!0;let le=await J({action:"evaluate",code:Ie.code});if(qe=!1,le.ok!==!0||typeof le.output!=="string")throw Error(typeof le.error==="string"?le.error:"hands_node_repl_failed");sn(be,{ok:!0,output:le.output})}catch(Ie){qe=!1,sn(be,{ok:!1,error:Ie instanceof Error?Ie.message:String(Ie),stack:Ie instanceof Error?Ie.stack:void 0})}}).catch((Ie)=>{sn(be,{ok:!1,error:Ie instanceof Error?Ie.message:String(Ie)})})})});try{await new Promise((be,Re)=>{ve.once("error",Re),ve.listen(e.socketPath,()=>{ve.off("error",Re);try{ad(e.socketPath,384),be()}catch($e){ve.close(()=>Re($e))}})})}catch(be){S=!0,f.kill("SIGKILL");try{await Wt(_)}finally{await l.cleanup(),Zn(e.socketPath)}throw be}return{socketPath:e.socketPath,async stop(){if(S)return;S=!0;let be=new Promise((Re)=>ve.close(()=>Re()));for(let Re of fe)Re.destroy();await be,z.catch(()=>{return}),F();try{await Wt(_)}finally{await l.cleanup(),Zn(e.socketPath)}}}}var _o=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var di="/workspace",li="/var/lib/reason/sessions",vd="/var/lib/reason/session-controls";function Sr(e){let l=`${li}/`;if(!e.startsWith(l))return null;let f=e.slice(l.length);if(!_o.test(f)||f!==f.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${vd}/${f}/job.env`}function kd(e){if(!_o.test(e))throw Error("personal_computer_invalid_identity");return e.toLowerCase()}function an(e){let l=kd(e);return{runtimeRoot:`${li}/${l}`,workspaceRoot:`${di}/sessions/${l}`,sharedRoot:di}}var ui="/root/.ara/cloud-browser/repl.sock";function mo(e){return e==="compute"}function fi(e,l,f="linux"){if(e)an(e);if(f!=="linux")throw Error("cloud_browser_os_invalid");if(l!==void 0&&(!e||!/^[1-9][0-9]{0,18}$/.test(l)))throw Error("cloud_browser_generation_invalid");let _=e?`/var/lib/reason/browsers/${e.toLowerCase()}`:"/root/.ara/cloud-browser",w=e?`${_}/${l?`g${l}`:"current"}`:_,S=e?`/root/.b/${e.toLowerCase().replaceAll("-","")}`:_;return{temporarySessionDirectory:S,temporaryDirectory:e?`${S}/${l??"current"}`:`${w}/tmp`,directory:w,sessionDirectory:_,config:`${w}/config.json`,status:`${w}/status.json`,socket:`${w}/repl.sock`,bundle:`${w}/driver.mjs`,processName:e?`ara-browser-${e.toLowerCase()}${l?`-${l}`:""}`:"ara-cloud-browser"}}var ho="browser_egress",pi=as,Bd=45000,jd=Qt+1500,Xr=/^[A-Za-z0-9._:-]{1,160}$/,Md="/run/ara-hands";function Wd(e,l,f=mi()){if(e==="darwin")return{temporaryRoot:f,prepareRoot:!1,sessionMode:448};return{temporaryRoot:l??Md,prepareRoot:!0,sessionMode:457}}function me(e,l=process.platform,f=process.geteuid?.()){return e===!0&&l==="linux"&&f===0}function ge(e=K(),l=process.platform,f=process.geteuid?.()){return e&&l==="linux"&&f===0?{uid:e.uid,gid:e.gid,home:e.home,username:e.username}:null}function Dt(e=ge(),l=Us){return e&&l()?Jn:null}function Fd(e,l){if(!l&&(e??"linux")==="linux")return ui;return fi(l,void 0,e??"linux").socket}function Ot(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function gi(e){let l=e.toLowerCase().replace(/^\[|\]$/g,"");return l==="localhost"||l.endsWith(".localhost")||l==="::1"||l==="0:0:0:0:0:0:0:1"||l==="0.0.0.0"||l.startsWith("127.")}class Er extends r{expiryDiagnostic;constructor(e){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=e}}function Ud(e){return Ot(e)&&Object.keys(e).every((l)=>l==="source_path"||l==="branch")&&(e.source_path===void 0||X(e.source_path))&&typeof e.branch==="string"&&qn.test(e.branch)}function zd(e,l,f){let _=l===void 0?Date.now():l,w=["relay_url","session_id","environment_id","expires_at","policy_mode","policy_version","hands_protocol_version","hands_worker_version","hands_worker_artifact_sha256","hands_worker_entrypoint","target_generation","target_fence_id"],S=new Set([...w,"workspace_id","legacy_workspace_id",Ce,Ae,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",Ye,ho,Et,Q,Y,q]),x=Ot(e)?e:null,W=x?.[ho],R=x?.[Et],M=x?.[Y],G=W===void 0||(x?.[Ye]===Yr||M===pe&&x?.[Ye]===void 0)&&Ot(W)&&Object.keys(W).every((ve)=>ve==="mode"||ve==="allowed_domains")&&W.mode==="enforce"&&Array.isArray(W.allowed_domains)&&W.allowed_domains.length<=256&&W.allowed_domains.every((ve)=>typeof ve==="string"&&Nn(ve));if(!Ot(e)||w.some((ve)=>!(ve in e))||Object.keys(e).some((ve)=>!S.has(ve))||!G||M!==void 0&&M!==pe||x?.[q]!==void 0&&x[q]!==Te||x?.personal_workspace!==void 0&&(x.personal_workspace!==!0||x[Ye]!==Yr)||x?.cloud_browser!==void 0&&(x.cloud_browser!==!0||x[Ye]!==Yr)||x?.sandbox_provider!==void 0&&!mo(x.sandbox_provider)||x?.sandbox_os!==void 0&&x.sandbox_os!=="linux"||R!==void 0&&(x?.[Ye]!==St||!Js(R))||Ye in e&&e[Ye]!==Yr&&e[Ye]!==St&&e[Ye]!==Br||e.workspace_path!==void 0&&(!X(e.workspace_path)||e[Ye]!==Br)||e.workspace_worktree!==void 0&&(e.workspace_path===void 0||!Ud(e.workspace_worktree))||typeof e.relay_url!=="string"||typeof e.session_id!=="string"||!Xr.test(e.session_id)||e.workspace_id!==void 0&&(typeof e.workspace_id!=="string"||!Xr.test(e.workspace_id))||e.legacy_workspace_id!==void 0&&(typeof e.legacy_workspace_id!=="string"||!Xr.test(e.legacy_workspace_id))||e[Ce]!==void 0&&(e[Ce]!==ue||(Ye in e))||e[Ae]!==void 0&&(e[Ae]!==Z||(Ye in e))||e[Q]!==void 0&&(typeof e[Q]!=="string"||!Xr.test(e[Q]))||typeof e.environment_id!=="string"||!Xr.test(e.environment_id)||typeof e.expires_at!=="string"||e.policy_mode!=="full_access"||e.policy_version!==1||e.hands_protocol_version!==P||e.hands_worker_version!==D||e.hands_worker_artifact_sha256!==b||!ei(e.hands_worker_entrypoint)||!U(e.target_generation)||!N(e.target_fence_id))throw new r("invalid_hands_payload","Reason Hands connection payload is invalid.");let F;try{F=new URL(e.relay_url)}catch{throw new r("invalid_hands_relay","Reason Hands relay URL is invalid.")}if((gi(F.hostname)?F.protocol!=="ws:":F.protocol!=="wss:")||F.username||F.password||F.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(F.pathname))throw new r("invalid_hands_relay","Reason Hands relay URL is not allowed.");let re=Date.parse(e.expires_at),J=Number.isNaN(re)?"parse":new Date(re).toISOString()!==e.expires_at?"noncanonical":re<=_?"expired":re-_>pi?"over_cap":"accepted",z={version:1,outcome:J,clock_source:l===void 0?"date_now":"injected",validation_now_ms:bt(_),expiry_ms:bt(re),remaining_ms:Number.isSafeInteger(re-_)?re-_:null,maximum_lifetime_ms:pi,cli_artifact:ti()};if(J!=="accepted")throw new Er(z);try{f?.(z)}catch{}let fe=e.environment_binding===void 0?void 0:An.safeParse(e.environment_binding);if(fe&&!fe.success)throw new r("invalid_hands_request","Reason Hands environment binding is invalid.");return{...e.cloud_browser===!0?{cloud_browser:!0}:{},...mo(e.sandbox_provider)?{sandbox_provider:e.sandbox_provider}:{},...e.sandbox_os==="linux"?{sandbox_os:e.sandbox_os}:{},...e.personal_workspace===!0?{personal_workspace:!0}:{},relay_url:F.toString(),...fe?.success?{environment_binding:fe.data}:{},session_id:e.session_id,...e.workspace_id===void 0?{}:{workspace_id:e.workspace_id},...e.legacy_workspace_id===void 0?{}:{legacy_workspace_id:e.legacy_workspace_id},...e[Ce]===ue?{[Ce]:ue}:{},...e[Ae]===Z?{[Ae]:Z}:{},...typeof e[Q]==="string"?{[Q]:e[Q]}:{},...e[Y]===pe?{[Y]:pe}:{},...e[q]===Te?{[q]:Te}:{},...typeof e.workspace_path==="string"?{workspace_path:e.workspace_path}:{},...Ot(e.workspace_worktree)?{workspace_worktree:{...typeof e.workspace_worktree.source_path==="string"?{source_path:e.workspace_worktree.source_path}:{},branch:String(e.workspace_worktree.branch)}}:{},environment_id:e.environment_id,expires_at:e.expires_at,policy_mode:"full_access",policy_version:1,hands_protocol_version:P,hands_worker_version:D,hands_worker_artifact_sha256:b,hands_worker_entrypoint:T,target_generation:e.target_generation,target_fence_id:e.target_fence_id,...Ye in e?{[Ye]:e[Ye]}:{},...R===void 0?{}:{[Et]:R},...W===void 0?{}:{[ho]:{mode:"enforce",allowed_domains:[...new Set(W.allowed_domains)].sort()}}}}function $d(){let e=new Map;return{acquire(l,f){if(e.has(l))return null;let _=[...e.values()],w=(x)=>f.group!==void 0&&x.group===f.group;if(f.exclusive?!_.every(w):_.some((x)=>x.exclusive))return null;if(f.limit!==void 0&&!_.some(w)&&new Set(_.map((x,W)=>x.group??W)).size>=f.limit)return null;e.set(l,f);let S=!1;return()=>{if(S)return;S=!0,e.delete(l)}},activeOwners:()=>[...e.keys()]}}var Kd=$d();function Gd(e,l){Pt(e,{recursive:!0,mode:448});let f=er(e),_=()=>new r("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let x of l.split("/")){let W=cr(f,x);try{let M=dr(W);if(M.isSymbolicLink()||!M.isDirectory())throw _()}catch(M){if(!(M&&typeof M==="object"&&("code"in M)&&M.code==="ENOENT"))throw M;try{Pt(W,{mode:448})}catch(G){if(!(G&&typeof G==="object"&&("code"in G)&&G.code==="EEXIST"))throw G}}let R=dr(W);if(R.isSymbolicLink()||!R.isDirectory()||er(W)!==W)throw _();f=W}if(process.platform==="win32"){let x=dr(f);if(x.isSymbolicLink()||!x.isDirectory()||er(f)!==f||!Fr(er(e),f))throw _();return f}let w=dr(f),S=Ad(f,xt.O_RDONLY|xt.O_DIRECTORY|xt.O_NOFOLLOW);try{let x=Id(S);if(!x.isDirectory()||x.dev!==w.dev||x.ino!==w.ino||er(f)!==f)throw _();Pd(S,448)}finally{xd(S)}return f}function Jd(e,l=Wo(),f,_,w){if(!Xr.test(e)||f!==void 0&&!Xr.test(f))throw new r("invalid_hands_workspace","Reason Hands run identity is invalid.");let S=Ir(O({kind:"managed",workspaceId:e,..._?{base:_}:{},...w?{layout:w}:{}})),x=Gd(l,Ir(S)),W=cr(x,Nd(S)),R=!1;try{let I=dr(W);if(R=!0,I.isSymbolicLink())throw new r("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!I.isDirectory())throw new r("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(I){if(I instanceof r||!(I&&typeof I==="object"&&("code"in I)&&I.code==="ENOENT"))throw I}if(w&&!R)try{let I=cr(er(l),Ir(O({kind:"managed",workspaceId:e,..._?{base:_}:{}}))),re=dr(I);if(!re.isSymbolicLink()&&re.isDirectory()&&er(I)===I)cn(I,W),R=!0}catch{}if(f&&f!==e){let I=cr(x,f);try{let re=dr(I);if(re.isSymbolicLink()||!re.isDirectory())throw new r("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let J=er(I);if(Ir(J)!==x)throw new r("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let z=null;if(R){for(let fe=1;fe<=1000&&!z;fe++){let ve=cr(x,fe===1?`.${e}.previous`:`.${e}.previous.${fe}`);try{dr(ve)}catch(be){if(!(be&&typeof be==="object"&&("code"in be)&&be.code==="ENOENT"))throw be;z=ve}}if(!z)throw new r("invalid_hands_workspace","Reason Hands has too many previous workspace backups.");cn(W,z)}try{cn(J,W)}catch(fe){if(z)cn(z,W);throw fe}R=!0}catch(re){if(re instanceof r||!(re&&typeof re==="object"&&("code"in re)&&re.code==="ENOENT"))throw re}}Pt(W,{recursive:!0,mode:448}),Ft(W,448);let M=er(W);if(Ir(M)!==x)throw new r("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let G=cr(M,"repo");try{let I=dr(G);if(I.isSymbolicLink()||!I.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(I){if(I instanceof r||!(I&&typeof I==="object"&&("code"in I)&&I.code==="ENOENT"))throw I}Pt(G,{recursive:!0,mode:448}),Ft(G,448);let F=er(G);if(Ir(F)!==M)throw new r("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:M,repoPath:F}}function xr(e){let l=null;try{l=dr(e)}catch{}if(!l||l.isSymbolicLink()||!l.isDirectory()||l.uid!==0||l.gid!==0||(l.mode&4095)!==493)throw new r("cloud_workspace_root_invalid","This cloud Session's workspace root is not root's 0755 directory, so Reason Hands cannot use it.")}function Vd(e,l,f=process.geteuid?.(),_=process.platform){if(_==="win32")return"unknown";let w;try{if(w=it(e),!w.isDirectory())return"unready";Od(e,xt.R_OK|xt.W_OK|xt.X_OK)}catch{return"unready"}try{if(dr(e).isSymbolicLink()||er(e)!==e)return"unknown"}catch{return"unknown"}if(f!==0)return"checked";if(l===null||w.uid!==l.uid||(w.mode&448)!==448)return"unknown";for(let S=Ir(e);;S=Ir(S)){let x;try{x=it(S)}catch{return"unknown"}if(!(x.uid===l.uid?(x.mode&64)!==0:x.gid===l.gid?(x.mode&8)!==0:(x.mode&1)!==0))return"unknown";if(S===Ir(S))return"checked"}}function qd(e,l){let f="/";for(let _ of["",...e.split("/"),...l.split("/")].filter((w,S)=>S===0||w)){if(_)f=cr(f,_);let w;try{w=dr(f)}catch{return null}if(w.uid!==0)return w.uid;if((w.mode&2)!==0&&(w.mode&512)===0&&!w.isSymbolicLink())return-1;if(w.isSymbolicLink()||!w.isDirectory())return null}return null}function Yd(e,l,f,_=process.geteuid?.(),w){if(!Xr.test(l))return null;let S,x;try{S=er(e),x=Ir(O({kind:"managed",workspaceId:l,...f?{base:f}:{},...w?{layout:w}:{}}))}catch{return null}let W=cr(S,x),R=rn(W)!==null,M=(J)=>new r("cloud_workspace_root_invalid",J),G;if(_===0){let J=qd(S,x);if(J===null)return null;if(!R)throw new r("invalid_hands_workspace","As root, Reason Hands never prepares a workspace in folders another user owns.");G=J}else{if(!R)return null;let J,z;try{J=dr(Ir(W)),z=dr(W)}catch{return null}if(J.isSymbolicLink()||!J.isDirectory()||J.uid===0||z.uid!==0)return null;G=J.uid}let F=S;for(let J of x.split("/")){let z=cr(F,J),fe=!1;try{let ve=dr(z);fe=!ve.isSymbolicLink()&&ve.isDirectory()&&er(z)===z}catch{}if(!fe)throw M("This cloud Session's workspace root is missing or is not a real directory.");F=z}xr(W);let I;try{I=kr(W)}catch(J){if(J instanceof r)throw J;throw M("This cloud Session's workspace root changed while Reason Hands checked it.")}let re=null;try{re=it(I.repoPath).uid}catch{}if(re!==G)throw new r("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return I}function kr(e,l=!1){let f=er(e),_=cr(f,"repo"),w;try{w=dr(_)}catch{throw new r("invalid_hands_workspace","Reason Hands repository is missing from the granted root.")}if(l){if(!/^\/var\/lib\/reason\/sessions\/[0-9a-f-]{36}$/.test(f))throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");if(an(f.slice(f.lastIndexOf("/")+1)).runtimeRoot!==f)throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");let W=er("/workspace"),R=er(_);if(W!=="/workspace"||!it(R).isDirectory()||!R.startsWith("/workspace/"))throw new r("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:f,repoPath:R}}let S=zs(f);if(S&&w.isSymbolicLink()){let W=er(_);if(W!==er(S)||!it(W).isDirectory())throw new r("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:f,repoPath:W}}if(w.isSymbolicLink()||!w.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let x=er(_);if(Ir(x)!==f)throw new r("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:f,repoPath:x}}function bo(e,l,f){if(l!==void 0&&!X(l))throw new r("invalid_hands_workspace",`Reason Hands ${f} is invalid.`);let _=hi(e,l??".");if(!Fr(e,_))throw new r("invalid_hands_workspace",`Reason Hands ${f} escapes its granted root.`);return _}function bi(e,l,f){if(et(l)){let _=er(f);return{anchor:_,target:hi(_,l),boundary:cr(_,de)}}return{anchor:e,target:bo(e,l,"folder"),boundary:e}}function Xd(e,l){if(!Fr(e,l))throw new r("invalid_hands_workspace","Reason Hands folder escapes its granted root.");let f=e;for(let _ of l.slice(e.length).split(Ld).filter(Boolean)){f=cr(f,_);let w=null;try{w=dr(f)}catch(S){if(S.code!=="ENOENT")throw S}if(!w)Pt(f,{mode:448});else if(w.isSymbolicLink()||!w.isDirectory())throw new r("invalid_hands_workspace","Reason Hands folder must be made of real directories.")}}function wi(e,l){let f=er(bo(e,l.source_path,"repository"));if(!Fr(e,f)||!it(f).isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a folder in its granted root.");return f}async function Zd(e,l,f,_=a()){try{let w=er(e);if(go(bi(w,l,_).target))return;return await qs(wi(w,f))??void 0}catch{return}}function Qd(e,l,f,_,w=el,S=a()){let x=er(e),{target:W,boundary:R,anchor:M}=bi(x,l,S);if(f&&!go(W)){let I=wi(x,f);Xd(M,Ir(W));let re=["-c","core.hooksPath=/dev/null","-C",I];if(_)w([...re,"update-ref","--create-reflog","-m",_.note,`refs/heads/${f.branch}`,_.commit,""]);let J=_?w([...re,"worktree","add",W,f.branch]):w([...re,"worktree","add","-b",f.branch,W]);if(!_&&J.status!==0&&/already exists/.test(J.stderr)&&!go(W))J=w([...re,"worktree","add",W,f.branch]);if(J.status!==0)throw new r(/not a git repository/i.test(J.stderr)?"workspace_not_git_repository":"workspace_worktree_failed","Reason could not create this Session's git worktree.")}let G;try{G=dr(W)}catch{throw new r("workspace_folder_missing","This Session's folder no longer exists.")}let F=er(W);if(G.isSymbolicLink()&&!Fr(R,F))throw new r("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!it(F).isDirectory()||!Fr(R,F))throw new r("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(E(F))throw new r("protected_path","Credential and secret folders are unavailable to Sessions.");return F}function el(e){let l=Yo();if(!l)return{status:null,stderr:"git was not found. Install Git for Windows (https://git-scm.com/download/win)."};let f=Rd(l,e,{encoding:"utf8",timeout:60000,env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:["ignore","ignore","pipe"]});return{status:f.status,stderr:f.stderr??""}}function yi(e){return Sr(e)??rn(e)?.jobEnv??cr(e,"job.env")}function rl(e,l){let f=yi(e),_=dr(f);if(_.isSymbolicLink()||!_.isFile())throw new r("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");Td(f,l),Ft(l,384)}function tl(e){if(e.workspaceMode===Br&&e.workspacePath!==void 0){let x=e.home??a(),W=Qd(e.grantedRoot,e.workspacePath,e.workspaceWorktree,e.workspaceWorktreeStart,void 0,x);if(e.workspaceWorktree&&e.deviceId)Xs(x,e.workspacePath,e.deviceId);return{workRoot:W,repoPath:W,workspace:{kind:"root",path:e.workspacePath},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if(e.workspaceMode===Yr)return{...kr(e.grantedRoot,e.personalWorkspace),workspace:{kind:"root"},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if(e.workspaceMode===St||e.workspaceMode===Br){let x=dr(e.grantedRoot);if(x.isSymbolicLink()||!x.isDirectory())throw new r("invalid_hands_workspace","Reason Hands root must be a real directory.");let W=er(e.grantedRoot);return{workRoot:W,repoPath:W,workspace:{kind:"root"},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}let l=e.workspaceId??e.runId,f={kind:"managed",workspaceId:l,...e.workspaceBase?{base:e.workspaceBase}:{},...e.workspaceLayout?{layout:e.workspaceLayout}:{}},_=ie(e.grantedRoot,f,e.home).anchor,w=Yd(_,l,e.workspaceBase,void 0,e.workspaceLayout);if(w)return{...w,workspace:f,jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1,cloudSessionRoot:!0};let S=Jd(l,_,e.legacyWorkspaceId,e.workspaceBase,e.workspaceLayout);return{...S,workspace:f,jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:Ir(S.workRoot),managedWorkspace:!0}}function Sn(e){let{command:l,prefix:f}=Tn(e.executablePath,e.sourceEntrypoint),_=He({home:Hd(),temporaryDirectory:e.temporaryDirectory,path:e.path});if(_.REASON_DEVICE_ROOT=_.ARA_DEVICE_ROOT=e.grantedRoot,_.REASON_HANDS_WORKSPACE=_.ARA_HANDS_WORKSPACE=e.workRoot,_.REASON_HANDS_REPO=_.ARA_HANDS_REPO=e.root,e.workspacePoolPath)_.REASON_HANDS_WORKSPACE_POOL=_.ARA_HANDS_WORKSPACE_POOL=e.workspacePoolPath;return{command:l,args:[...f,"__device","__hands-worker","--config",e.configPath],options:{cwd:e.root,env:_,shell:!1,stdio:[En,"ignore","pipe"]}}}var En=process.platform==="win32"?"pipe":"ignore";function ct(e,l){if(process.platform!=="win32")return e.kill(l);if(l==="SIGTERM")e.stdin?.end();else if(e.pid)Me(e.pid);return!0}function nl(e,l){let f="",_=!1,w=Date.now(),S=0,x=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled","permission_denied"].map((F)=>`hands.worker.${F}`)),W=new Set([null,"open_not_received","current_connection","obsolete_connection","request_aborted","request_timeout","client_closed","driver_stopped","driver_handoff","run_cancelled","run_finished","other","frame_too_large","invalid_json","invalid_claim","executor_mismatch","stale_generation","fence_conflict","SIGTERM","SIGINT","SIGHUP","expired","cleanup_complete","cleanup_failed","cancelled","settled","unsupported","unconfirmed",...["sandbox_policy","os_permission_unknown"].flatMap((F)=>["bash","read","write","edit"].map((I)=>`${F}:${I}`))]),R=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],M=["peerGeneration","socketState","closeCode"],G=new Set(["event","reason","launchId",...R,...M]);return(F)=>{for(let I of F.toString().split(/(?<=\n)/)){let re=I.endsWith(`
451
- `);if(!_&&f.length+I.length<=2048)f+=I;else _=!0;if(!re)continue;let J=f;if(f="",_){_=!1;continue}try{let z=JSON.parse(J);if(!z||typeof z!=="object"||Array.isArray(z)||Object.keys(z).some((fe)=>!G.has(fe))||!x.has(z.event)||!W.has(z.reason)||z.event==="hands.worker.permission_denied"!==(typeof z.reason==="string"&&z.reason.includes(":"))||z.launchId!==e||R.some((fe)=>!Number.isSafeInteger(z[fe])||z[fe]<0)||M.some((fe)=>z[fe]!==null&&(!Number.isSafeInteger(z[fe])||z[fe]<0)))continue;if(Date.now()-w>=60000)w=Date.now(),S=0;if(S>=122)continue;S+=1,l(z)}catch{}}}}async function ol(e){let l=e.now()+e.timeoutMs;while(e.now()<l){if(e.signal.aborted)throw new r("cancelled","Reason Hands start was cancelled.");if(e.spawnFailed?.()||e.child.exitCode!==null||e.child.signalCode!==null)throw new r("hands_worker_exited","Reason Hands exited before ready.");let f=on(e.path,{pid:e.child.pid??-1,launchId:e.launchId,workerVersion:D,protocolVersion:P,workerArtifactSha256:b,workerEntrypoint:T});if(f?.targetGeneration===e.targetGeneration&&f.fenceId===e.fenceId)return f;await new Promise((_)=>setTimeout(_,10))}throw new r("hands_ready_timeout","Reason Hands did not become ready.")}function sl(e){let l=e.exitCode===null?void 0:Cn[e.exitCode];return{exit_code:e.exitCode,exit_signal:e.signalCode,...l?{exit_reason:l}:{}}}async function il(e,l){let f=()=>e.exitCode===0&&e.signalCode===null;if(e.exitCode!==null||e.signalCode!==null)return f()?"stopped":"already_exited";let _=new Promise((x)=>e.once("exit",()=>x()));try{if(!ct(e,"SIGTERM"))return f()?"stopped":"unobserved"}catch{return f()?"stopped":"unobserved"}if(await _i(_,l))return f()?"stopped":"unobserved";try{ct(e,"SIGKILL")}catch{}return await _i(_,l)?"forced":"unobserved"}async function _i(e,l){let f;try{return await Promise.race([e.then(()=>!0),new Promise((_)=>{f=setTimeout(()=>_(!1),l)})])}finally{clearTimeout(f)}}function al(e){return new Promise((l)=>{let f=!1,_=(W)=>{if(f)return;f=!0,clearTimeout(x),e.signal.removeEventListener("abort",w),e.child.off("exit",S),l(W)},w=()=>_("cancelled"),S=()=>_("exited"),x=setTimeout(()=>_("expired"),Math.max(0,e.expiresAt-e.now()));if(e.signal.addEventListener("abort",w,{once:!0}),e.child.once("exit",S),e.signal.aborted)w();else if(e.child.exitCode!==null||e.child.signalCode!==null)S()})}var cl=lo();function dl(e,l){if(!(e instanceof Error)||e instanceof r)return!1;let f=["hands_browser_driver_missing","hands_browser_driver_version_mismatch","hands_browser_executable_missing","hands_browser_unsupported_platform","hands_browser_unavailable"].includes(e.message),_=["ENOENT","EACCES","EPERM"].includes(e.code??"");if(!f&&!_)return!1;try{return dr(l),!1}catch(w){return Ot(w)&&w.code==="ENOENT"}}function ll(e){return e.sandbox_provider==="compute"&&!e.cloud_browser&&e[Ye]===Yr}function ul(e,l,f){return e===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:Nr(e,l),...f===void 0?{}:{worker_prespawned:f}}}}async function Nt(e,l={}){let f=l.logDiagnostic??((le)=>console.warn(le)),_=new Map,w=(le)=>{let he=Date.now();_.set(le,he);try{f(JSON.stringify({event:"sandbox.hands_startup",stage:le,timestampMs:he}))}catch{}};w("entered");let S=e.claimEnvironment;e.claimEnvironment=void 0;let x=l.now??Date.now,W,R=zd(e.payload,l.now?.(),(le)=>{W=le});if(e.managedPty&&(e.managedPty.version!==1||!e.headless||!e.runtimeDirectory||![void 0,!0].includes(e.managedPty.startupVerified)||!e.deviceIdentity||!e.claimOwner||e.claimOwner.device_id!==e.deviceIdentity.deviceId||!R.environment_binding||!["darwin","linux","win32"].includes(process.platform)))throw new r("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let M=async(le)=>{let he;try{await Promise.race([le,new Promise((Oe,Ke)=>{he=setTimeout(()=>Ke(new r("hands_event_delivery_unavailable","Hands event delivery did not settle within its deadline.")),Math.max(1,Math.min(l.eventDeliveryTimeoutMs??5000,5000)))})])}finally{clearTimeout(he)}},G=async(le,he)=>M(e.emitEvent(le,he));if(e.headless&&(R.cloud_browser===!0||e.managedBrowser!==void 0||R[Et]!==void 0||R[Ye]!==void 0&&R[Ye]!==Br))throw new r("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let F=ge(),I=R[q]===void 0?null:Dt(F);if(R[q]!==void 0&&(I===null||!e.headless||!me(e.hostExecution,l.hostIdentity?.platform,l.hostIdentity?.euid)))throw new r("hands_model_jobs_egress_unavailable","This worker cannot hold its jobs to the guest egress guard; the Hands did not start.");if(R[Y]!==void 0&&!(e.headless&&me(e.hostExecution,l.hostIdentity?.platform,l.hostIdentity?.euid)))throw new r("hands_confinement_unavailable","Confined Hands need a root Linux worker in host mode.");if(R.cloud_browser&&process.platform!=="linux")throw new r("cloud_browser_target_invalid","Cloud browser is available only on a cloud machine.");let re=`${e.operationId}:${e.attemptId}`,J=R[Ye]===St,z=e.headless||process.platform==="darwin"&&e.managedBrowser===void 0&&!R.cloud_browser&&!R.browser_egress&&(R[Ye]===void 0||R[Ye]===Br)||ll(R),fe=J?R[Et]??"bash":null,ve=fe?Gs(fe):null;if(ve)throw new r(ve,"Persistent Node REPL execution is unavailable; this benchmark profile cannot start.");let be=R[Ye],Re=e.headless===!0&&e.ownComputer!==!0?e.handsSlots??1:void 0,$e=(l.slot??Kd).acquire(re,{exclusive:Re===1||be!==void 0&&be!==Br,...Re!==void 0&&Re>1?{limit:Re}:{},...e.headless===!0&&R[Q]!==void 0?{group:R[Q]}:{}});if(!$e)throw new r("hands_slot_busy",Re!==void 0&&Re>1?`This Reason worker runs at most ${Re} sessions at a time.`:"This Reason Device runs one session at a time.");let qe=e.headless===!0?ji(e.runId):null,ye=null,Fe=null,Ve,Ie;try{w("browser_resolution");let le=e.headless&&l.browserExecutablePath===void 0?await jt():null,he=J||R.cloud_browser?null:l.browserExecutablePath===void 0?e.headless?le?.status==="resolved"?le.executablePath:null:await Ms(void 0,process.platform,e.managedBrowser):l.browserExecutablePath;if(!J&&!R.cloud_browser&&!z&&!he)throw new r("hands_browser_unavailable","Reason Hands requires Chrome, Edge, Brave, Chromium, or a Playwright Chromium install.");w("path_resolution");let Oe;try{Oe=await(l.resolvePathEnvironment??cl)()}catch{Oe={path:xn(),source:"fallback"}}if(w("workspace_setup"),process.platform==="darwin"){let Qe=R[Ye]===Br&&R.workspace_path!==void 0?bo(e.root,R.workspace_worktree?R.workspace_worktree.source_path:R.workspace_path,"folder"):null;for(let fr of new Set([e.root,...Qe?[Qe]:[]]))await _s(fr)}let Le=R[Ye]===Yr||R[Ye]===St?Wd(process.platform,l.sandboxRuntimeRoot):null,Be=e.headless&&e.runtimeDirectory?e.runtimeDirectory:Le?Le.temporaryRoot:mi();if(ye="private_runtime",e.headless&&e.runtimeDirectory){v(Be);let Qe=er(e.root);if(!je(Qe,Be))throw new r("invalid_hands_workspace","Private worker state must not overlap the granted workspace.")}if(e.headless&&e.runtimeDirectory&&(!e.deviceIdentity||!R.environment_binding))throw new r("environment_unavailable","Headless Hands requires a server-bound private environment.");if(ye="runtime_root",Le?.prepareRoot)Pt(Be,{recursive:!0,mode:457}),Ft(Be,457);ye="temporary_directory";let ke=er(Dd(cr(Be,"reason-hands-session-")));Fe=ke,Ft(ke,Le?.sessionMode??448);let We=cr(ke,"hands-config.json"),rr=cr(ke,"hands-ready.json"),nr=Sd(),Rr=R.target_fence_id;if(e.workspaceGrant){ye="workspace_grant",w("workspace_grant_wait");let Qe=e.workspaceGrant;await new Promise((fr,tt)=>{let pt=()=>tt(new r("cancelled","Reason Hands was cancelled."));if(e.signal.aborted){pt();return}e.signal.addEventListener("abort",pt,{once:!0}),Qe.then(fr,tt).finally(()=>e.signal.removeEventListener("abort",pt))})}ye="granted_root";let Ge=er(e.root);ye="workspace_layout";let sr=R[Ye]===Br&&R.workspace_path!==void 0&&R.workspace_worktree?await Zd(Ge,R.workspace_path,R.workspace_worktree):void 0,{workRoot:or,repoPath:lr,jobEnvPath:Wr,workspacePoolPath:ln,managedWorkspace:Kr,workspace:dt,cloudSessionRoot:Ut}=tl({grantedRoot:Ge,personalWorkspace:R.personal_workspace===!0,runId:e.runId,workspaceId:R.workspace_id,legacyWorkspaceId:R.legacy_workspace_id,workspaceBase:R[Ce],workspaceLayout:R[Ae],temporaryDirectory:ke,workspaceMode:R[Ye],applicationSupportPath:l.applicationSupportPath,...R.workspace_path===void 0?{}:{workspacePath:R.workspace_path},...R.workspace_worktree?{workspaceWorktree:R.workspace_worktree}:{},...sr?{workspaceWorktreeStart:sr}:{},...e.deviceIdentity?{deviceId:e.deviceIdentity.deviceId}:{}});if(Ho(or))throw new r("folder_is_filesystem_root",`${zo(or)}.`);let Zr="ara_device_wss";ye="jobs";let ur=e.headless&&e.runtimeDirectory?gr({runtimeDirectory:e.runtimeDirectory,root:Ge,runId:e.runId}):void 0;Ve=ur?.disposeSocket;let jr=ur?ts(ur):null;if(jr)try{f(JSON.stringify({event:"hands.journal_owner_retired",run_id:e.runId,reason:jr.reason,prior_executor_launch_id:jr.executorLaunchId}))}catch{}if(ur&&[or,lr].some((Qe)=>!je(Qe,ur.journalDirectory)))throw new r("invalid_hands_workspace","A Session can't work in the folder that holds this worker's settings; start it in a project or repository inside it.");let ft=R.personal_workspace?or.slice(or.lastIndexOf("/")+1):void 0;if(ft&&ft!==R.workspace_id)throw new r("invalid_hands_workspace","Personal session identity does not match its Device grant.");ye="browser_socket";let Lr=R.cloud_browser?Fd(R.sandbox_os,ft):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${nr}`:cr(ur?ur.launchDirectory:ke,"repl.sock");ye="relay_url";let Mr=gi(new URL(R.relay_url).hostname),Qr=Zr==="ara_device_wss"&&!Mr?(l.loadProxy??j)()?.url:void 0,Tr;ye="environment_owner";let Or=e.headless&&e.deviceIdentity&&R.environment_binding?Zs(ke,{runId:e.runId,...e.deviceIdentity,binding:R.environment_binding,expiresAtMs:Date.parse(R.expires_at),identity:()=>Tr?.()??null}):void 0;ye="job_environment";let It=!Or&&dt.kind==="managed"&&Kr?cr(or,"job.env"):null;if(It)try{dn(It,"",{mode:384,flag:"wx"})}catch(Qe){if(!(Qe instanceof Error&&("code"in Qe)&&Qe.code==="EEXIST"))throw Qe}let un={url:R.relay_url,transport:Zr,...Qr===void 0?{}:{proxyUrl:Qr},...e.localGithubConfinement?{localGithubConfinement:!0}:{},...R[Y]&&Or?{gitCredentialEnvironment:!0}:{},workerVersion:D,protocolVersion:P,workerArtifactSha256:b,workerEntrypoint:T,...process.platform==="win32"?{bashExecutable:se()}:{},targetGeneration:R.target_generation,fenceId:Rr,workRoot:or,workspaceAliasPath:or,jobEnvPath:Wr,...Or?{environmentSnapshotPath:Or.path,...e.hostExecution?{executionEnvironment:wr()}:{},environmentExpectedBinding:{runId:e.runId,...e.deviceIdentity,binding:R.environment_binding}}:It?{jobEnvSourcePath:It,workspacePoolPath:Ir(or)}:Kr?{}:{jobEnvSourcePath:yi(or)},repoPath:lr,replSocketPath:Lr,...R.cloud_browser?{browserRunId:e.runId}:{},readyPath:rr,launchId:nr,expiresAtMs:Date.parse(R.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...ur?{managedJobs:{journalDirectory:ur.journalDirectory,scopeId:ur.scopeId},jobControlSocketPath:ur.socketPath}:{},...ur&&F?{jobsUser:{...F,...I!==null?{modelGid:I}:{}}}:{},...e.managedPty&&ur&&Or?{managedPty:{version:1,...e.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:br()}:{}}}:{},...z&&!he?{allowedTools:["bash","read","write","edit"]}:J?{allowedTools:fe==="bash"?["bash"]:["bash","repl"]}:{}};if(Or||Kr&&!It)dn(Wr,"",{mode:384});else rl(or,Wr);ye="config_write",dn(We,JSON.stringify(un),{mode:384}),ye=null;let rt={session_id:R.session_id,environment_id:R.environment_id,hands_protocol_version:P,hands_worker_version:D,hands_worker_artifact_sha256:b,hands_worker_entrypoint:T,target_generation:R.target_generation,target_fence_id:R.target_fence_id,executor_launch_id:nr},zt=null,wo=!1,yo=!1,vo,pr=null,ko,So,$t="failed",Eo=null,fn=Promise.resolve(),Ro=null,pn=async(Qe,fr)=>{try{await G(Qe,fr)}catch{}};try{w("event_started");let Qe,fr=(async()=>{await e.emitEvent("hands.started",{...rt,policy_mode:"full_access",policy_version:1,path_source:Oe.source}),Qe=Date.now()})();fr.catch(()=>{return}),w("worker_setup");let tt=R.browser_egress?{mode:"enforce",allowedDomains:R.browser_egress.allowed_domains}:{mode:"off"};if(fe&&fe!=="bash")zt=await(l.startNodeRepl??ci)({socketPath:Lr,workRoot:or});else if(!J&&!R.cloud_browser&&he)zt=await(l.startRepl??Ws)({socketPath:Lr,browserExecutablePath:he,workspaceRoot:lr,...e.managedBrowser?{managedBrowser:e.managedBrowser}:{},...e.desktopRecording?{recording:e.desktopRecording}:{},networkPolicy:tt,onEgressDenied:(Ne)=>{let Hr=$s(Ne.host);f(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:Hr,reason:Ne.reason,run_id:e.runId})),fn=fn.then(()=>G("hands.browser_egress_denied",{destination_id:Hr,reason:Ne.reason})).catch((Gt)=>{Ro??=Gt})}}).catch((Ne)=>{if(!z||e.signal.aborted||x()>=Date.parse(R.expires_at)||!dl(Ne,Lr))throw Ne;return Object.assign(un,{allowedTools:["bash","read","write","edit"]}),dn(We,JSON.stringify(un),{mode:384}),yo=!0,null});let pt=Sn({configPath:We,root:lr,grantedRoot:Ge,workRoot:or,workspacePoolPath:ln,temporaryDirectory:ke,path:Oe.path,executablePath:l.executablePath,sourceEntrypoint:l.sourceEntrypoint}),_n=Date.now(),mn,Oo,hn=l.takePrespawnedWorker?.(pt)??null;if(vo=l.takePrespawnedWorker?hn!==null:void 0,pr=hn??(l.spawnWorker??((Ne)=>Ed(Ne.command,Ne.args,Ne.options)))(pt),!hn)l.adoptSpawnedWorker?.(pr);pr.stderr?.on("data",nl(nr,(Ne)=>{if(Ne.event==="hands.worker.connecting")mn??=Ne.timestampMs;else if(Ne.event==="hands.worker.open")Oo??=Ne.timestampMs;if(f(JSON.stringify({...Ne,run_id:e.runId})),Ne.event==="hands.worker.permission_denied"&&typeof Ne.reason==="string"){let[Hr,Gt]=Ne.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(Hr??"")&&["bash","read","write","edit"].includes(Gt??""))G("permission.denied",{provenance:Hr,operation:Gt}).catch(()=>{return})}}));let xo=!1;pr.on("error",()=>{xo=!0}),pr.once("exit",(Ne,Hr)=>{try{f(JSON.stringify({event:"hands.worker.exited",run_id:e.runId,launchId:nr,exit_code:Ne,exit_signal:Hr}))}catch{}}),Ie=pr,w("worker_ready_wait");let Tt=await ol({path:rr,launchId:nr,fenceId:Rr,targetGeneration:R.target_generation,child:pr,spawnFailed:()=>xo,signal:e.signal,timeoutMs:l.readyTimeoutMs??Bd,now:x}),vi=Date.now();if(Tr=()=>{if(!pr||pr.exitCode!==null||pr.signalCode!==null)return null;let Ne=on(rr,Tt);return Ne?{generation:Ne.targetGeneration,fenceId:Ne.fenceId}:null},ur){let Ne={root:Ge,runId:e.runId,operationId:e.operationId,scopeId:ur.scopeId,socketPath:ur.socketPath,generation:Tt.targetGeneration,fenceId:Tt.fenceId,executorLaunchId:nr,expiresAtMs:Date.parse(R.expires_at),readIdentity:Tr,workspace:dt,localGithubConfinement:e.localGithubConfinement===!0};if(Or)Ne.environment=Or;if(e.claimOwner&&e.deviceIdentity&&e.claimOwner.device_id===e.deviceIdentity.deviceId){let Hr=[e.deviceIdentity.apiOrigin,R.relay_url];if(Qr)Hr.push(Qr);Ne.previewAuthority={owner:Object.freeze({...e.claimOwner}),rootId:e.deviceIdentity.rootId,relayOrigin:new URL(R.relay_url).origin,deniedPorts:mr(Hr)}}So=ns(Ne)}if(await new Promise((Ne)=>{setImmediate(Ne)}),Ut)xr(or);let Kt;if(S&&Or){try{let Ne=Or.install(S);Kt={snapshot_id:Ne.snapshot_id,installed_revision:Ne.installed_revision}}catch{}try{f(JSON.stringify({event:"hands.environment_at_claim",run_id:e.runId,installed:Kt!==void 0}))}catch{}}S=void 0;let Po=!1;if(e.headless){let Ne=Vd(lr,F);try{f(JSON.stringify({event:"hands.workspace_check",run_id:e.runId,outcome:Ne}))}catch{}if(Ne==="unready")throw new r("hands_workspace_unready","This Session's checkout is not a readable, writable directory at its own path, so Reason Hands cannot use it.");Po=Ne==="checked"}w("event_ready");let Io=M(fr);Io.catch(()=>{return});let Ao=Date.now();wo=!0,await G("hands.ready",{...rt,expiry_diagnostic:W,startup_stages:{version:1,browser_resolution_ms:Nr(_.get("browser_resolution"),_.get("path_resolution")),path_resolution_ms:Nr(_.get("path_resolution"),_.get("workspace_setup")),workspace_setup_ms:Nr(_.get("workspace_setup"),_.get("event_started")),repl_setup_ms:Nr(_.get("worker_setup"),_n),worker_boot_ms:Nr(_n,mn),worker_dial_ms:Nr(mn,Oo),worker_ready_ms:Nr(_n,vi),started_event_ms:Nr(_.get("event_started"),Qe),started_join_wait_ms:Nr(_.get("event_ready"),Ao),total_ms:Nr(_.get("entered"),Ao)},...ul(e.claimedAtMs,_.get("entered"),vo),...e.managedPty?.startupVerified===!0?{managed_pty:{version:1,execution_mode:"host",descendant_cleanup_verified:!0}}:{},policy_mode:"full_access",policy_version:1,path_source:Oe.source,connection_generation:Tt.generation,...Kt?{environment_installed:Kt}:{},...Po?{workspace_checked:!0}:{},...z&&!zt?{browser_state:"unavailable",browser_reason_code:yo?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await Io,w("ready"),ko=si({path:rr,initial:Tt,signal:e.signal,isAlive:()=>pr!==null&&pr.exitCode===null&&pr.signalCode===null&&x()<Date.parse(R.expires_at),publish:(Ne,Hr)=>e.emitEvent("hands.reconnected",{...rt,target_generation:Ne.targetGeneration,target_fence_id:Ne.fenceId,connection_generation:Ne.generation},Hr),failed:()=>f(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:e.runId,executor_launch_id:nr}))});let Do=await al({child:pr,signal:e.signal,expiresAt:Date.parse(R.expires_at),now:x});if(Do==="cancelled"){let Ne=e.signal.reason instanceof r?e.signal.reason.code:"cancelled";throw $t=Ne,new r(Ne,"Reason Hands was cancelled.")}if(Do==="exited")throw new r("hands_worker_exited","Reason Hands exited unexpectedly.");return $t="expired",{...rt,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(Qe){Eo=Qe;let fr=Qe instanceof r?Qe.code:"hands_failed",tt=fr==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(fr);if($t=tt?fr:"failed",!tt)await pn("hands.failed",{...rt,reason_code:fr,...fr==="hands_worker_exited"&&pr?sl(pr):{}});throw Qe}finally{ko?.stop(),So?.();let Qe=pr?await il(pr,l.stopTimeoutMs??jd):null,fr=!1;await e.desktopRecording?.close();try{await zt?.stop()}catch{fr=!0}if(await fn,(Qe==="stopped"||Qe==="already_exited"&&!wo)&&!fr)await pn("hands.stopped",{...rt,reason_code:$t});else if(Qe!==null||fr){if(await pn("hands.failed",{...rt,reason_code:Qe==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),Eo===null||fr)throw new r("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(Ro!==null)throw new r("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(le){let he=Fs(ye,le);if(he)try{f(JSON.stringify({event:"sandbox.hands_workspace_failed",...he}))}catch{}throw le}finally{try{if(!Ie||Ie.exitCode!==null||Ie.signalCode!==null)Ve?.();if(Fe!==null&&(!Ie||Ie.exitCode!==null||Ie.signalCode!==null))Cd(Fe,{recursive:!0,force:!0})}finally{qe?.(),$e()}}}
452
- export{B,m,je,te,mr,Qi,gr,eo,at,to,ro,no,io,_r,oo,so,yr,ao,wr,br,wn,bn,vr,co,Ue,vn,Sr,me,ge,Dt,Er,xr,kr,Sn,En,ct,Nt};
447
+ `);fd(f,w,{mode:384});let S=!1;return{command:"/usr/bin/sandbox-exec",args:["-f",f,e.nodeExecutable,...e.nodeArgs],cwd:e.workRoot,env:{...e.environment,TMPDIR:l},async cleanup(){if(S)return;S=!0,ld(l,{recursive:!0,force:!0})}}}async function yd(e){let l=dd(e.workRoot),f=e.nodeExecutable??bd(),_=["--max-old-space-size=512","--permission",`--allow-fs-read=${l}`,`--allow-fs-write=${l}`,"-e",gd],w=Ue({home:l,temporaryDirectory:l}),S=e.platformName??_d();if(S==="linux")return{command:f,args:_,cwd:l,env:w,async cleanup(){}};if(S==="darwin")return wd({nodeExecutable:f,nodeArgs:_,workRoot:l,environment:w});throw Error("hands_node_repl_platform_unsupported")}async function Mt(e){let l;try{await Promise.race([e,new Promise((f,_)=>{l=setTimeout(()=>_(Error("hands_node_repl_child_cleanup_timeout")),hd)})])}finally{clearTimeout(l)}}async function ci(e){if(e.executionMode!=="single-evaluation")throw Error(Ks);let l=await yd(e),f;try{f=id(l.command,l.args,{cwd:l.cwd,env:l.env,stdio:["pipe","pipe","pipe"]})}catch(be){throw await l.cleanup(),be}let _=new Promise((be)=>f.once("close",()=>be())),w;f.once("error",(be)=>{w=be});let S=!1,x=!1,W="";f.stderr.setEncoding("utf8"),f.stderr.on("data",(be)=>{W=`${W}${be}`.slice(-16384)});let R=f.stdout,M,G=(be,Re,Fe)=>{if(Fe)be.failure??=Fe;if(be.finishing)return;be.finishing=!0,x=!0,f.kill("SIGKILL"),Mt(_).then(()=>{if(be.failure)be.reject(be.failure);else be.resolve(Re??{})},(qe)=>be.reject(qe))},F=()=>{if(x=!0,M)G(M,void 0,Error("hands_node_repl_state_lost"));else f.kill("SIGKILL")},D="";R?.setEncoding("utf8"),R?.on("data",(be)=>{if(M?.finishing||x)return;if(D+=be,D.length>ai){F();return}while(!0){let Re=D.indexOf(`
448
+ `);if(Re===-1)return;let Fe=D.slice(0,Re);D=D.slice(Re+1);let qe=M;if(!qe){F();return}try{let ye=JSON.parse(Fe);if(qe.action==="probe")qe.resolve(ye);else{G(qe,ye);return}}catch{G(qe,void 0,Error("invalid_hands_node_repl_child_response"));return}}});let re=(be)=>{let Re=W.trim(),Fe=be??Error(Re?`hands_node_repl_child_exited:${Re}`:"hands_node_repl_child_exited");if(x=!0,M&&!M.finishing)G(M,void 0,Fe)};f.once("error",re),f.once("close",()=>re()),f.stdin.on("error",re);let J=(be)=>new Promise((Re,Fe)=>{if(S||x||f.exitCode!==null||f.signalCode!==null){Fe(Error(x?"hands_node_repl_state_lost":"hands_node_repl_stopped"));return}let qe=setTimeout(F,be.action==="probe"?1e4:Math.max(1,Math.min(e.evaluationTimeoutMs??po-1000,po-1000))),ye={action:be.action,finishing:!1,resolve(We){if(M===ye)M=void 0;clearTimeout(qe),Re(We)},reject(We){if(M===ye)M=void 0;clearTimeout(qe),Fe(We)}};M=ye,f.stdin.write(`${JSON.stringify(be)}
449
+ `,(We)=>{if(!We)return;G(ye,void 0,We)})});try{if(!R){if(f.pid===void 0)await Mt(_);throw w??Error("hands_node_repl_control_pipe_missing")}let be=await J({action:"probe"});if(be.ok!==!0||be.output!=="ARA_HANDS_REPL_READY")throw Error("hands_node_repl_probe_failed")}catch(be){S=!0,f.kill("SIGKILL");try{await Mt(_)}finally{await l.cleanup()}throw be}let z=Promise.resolve(),fe=new Set;Zn(e.socketPath);let ve=pd.createServer((be)=>{fe.add(be),be.once("close",()=>fe.delete(be)),be.setEncoding("utf8");let Re="",Fe=!1,qe=!1;be.once("close",()=>{if(qe)F()}),be.on("error",()=>be.destroy()),be.on("data",(ye)=>{if(Fe)return;if(Re+=ye,Re.length>ai){Fe=!0,sn(be,{ok:!1,error:"REPL request exceeds 1 MiB"});return}let We=Re.indexOf(`
450
+ `);if(We===-1)return;Fe=!0;let Ve=Re.slice(0,We);z=z.then(async()=>{if(be.destroyed)return;try{let De=JSON.parse(Ve);if(De.action!=="evaluate"||typeof De.code!=="string")throw Error("Invalid REPL request");qe=!0;let le=await J({action:"evaluate",code:De.code});if(qe=!1,le.ok!==!0||typeof le.output!=="string")throw Error(typeof le.error==="string"?le.error:"hands_node_repl_failed");sn(be,{ok:!0,output:le.output})}catch(De){qe=!1,sn(be,{ok:!1,error:De instanceof Error?De.message:String(De),stack:De instanceof Error?De.stack:void 0})}}).catch((De)=>{sn(be,{ok:!1,error:De instanceof Error?De.message:String(De)})})})});try{await new Promise((be,Re)=>{ve.once("error",Re),ve.listen(e.socketPath,()=>{ve.off("error",Re);try{ad(e.socketPath,384),be()}catch(Fe){ve.close(()=>Re(Fe))}})})}catch(be){S=!0,f.kill("SIGKILL");try{await Mt(_)}finally{await l.cleanup(),Zn(e.socketPath)}throw be}return{socketPath:e.socketPath,async stop(){if(S)return;S=!0;let be=new Promise((Re)=>ve.close(()=>Re()));for(let Re of fe)Re.destroy();await be,z.catch(()=>{return}),F();try{await Mt(_)}finally{await l.cleanup(),Zn(e.socketPath)}}}}var _o=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var di="/workspace",li="/var/lib/reason/sessions",vd="/var/lib/reason/session-controls";function Sr(e){let l=`${li}/`;if(!e.startsWith(l))return null;let f=e.slice(l.length);if(!_o.test(f)||f!==f.toLowerCase())throw Error("personal_computer_invalid_runtime_root");return`${vd}/${f}/job.env`}function kd(e){if(!_o.test(e))throw Error("personal_computer_invalid_identity");return e.toLowerCase()}function an(e){let l=kd(e);return{runtimeRoot:`${li}/${l}`,workspaceRoot:`${di}/sessions/${l}`,sharedRoot:di}}var ui="/root/.ara/cloud-browser/repl.sock";function mo(e){return e==="compute"}function fi(e,l,f="linux"){if(e)an(e);if(f!=="linux")throw Error("cloud_browser_os_invalid");if(l!==void 0&&(!e||!/^[1-9][0-9]{0,18}$/.test(l)))throw Error("cloud_browser_generation_invalid");let _=e?`/var/lib/reason/browsers/${e.toLowerCase()}`:"/root/.ara/cloud-browser",w=e?`${_}/${l?`g${l}`:"current"}`:_,S=e?`/root/.b/${e.toLowerCase().replaceAll("-","")}`:_;return{temporarySessionDirectory:S,temporaryDirectory:e?`${S}/${l??"current"}`:`${w}/tmp`,directory:w,sessionDirectory:_,config:`${w}/config.json`,status:`${w}/status.json`,socket:`${w}/repl.sock`,bundle:`${w}/driver.mjs`,processName:e?`ara-browser-${e.toLowerCase()}${l?`-${l}`:""}`:"ara-cloud-browser"}}var ho="browser_egress",pi=as,Bd=45000,jd=Qt+1500,Xr=/^[A-Za-z0-9._:-]{1,160}$/,Md="/run/ara-hands";function Wd(e,l,f=mi()){if(e==="darwin")return{temporaryRoot:f,prepareRoot:!1,sessionMode:448};return{temporaryRoot:l??Md,prepareRoot:!0,sessionMode:457}}function me(e,l=process.platform,f=process.geteuid?.()){return e===!0&&l==="linux"&&f===0}function ge(e=K(),l=process.platform,f=process.geteuid?.()){return e&&l==="linux"&&f===0?{uid:e.uid,gid:e.gid,home:e.home,username:e.username}:null}function Ot(e=ge(),l=Us){return e&&l()?Jn:null}function Fd(e,l){if(!l&&(e??"linux")==="linux")return ui;return fi(l,void 0,e??"linux").socket}function xt(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function gi(e){let l=e.toLowerCase().replace(/^\[|\]$/g,"");return l==="localhost"||l.endsWith(".localhost")||l==="::1"||l==="0:0:0:0:0:0:0:1"||l==="0.0.0.0"||l.startsWith("127.")}class Er extends r{expiryDiagnostic;constructor(e){super("invalid_hands_expiry","Reason Hands connection expiry is invalid.");this.expiryDiagnostic=e}}function Ud(e){return xt(e)&&Object.keys(e).every((l)=>l==="source_path"||l==="branch")&&(e.source_path===void 0||Y(e.source_path))&&typeof e.branch==="string"&&qn.test(e.branch)}function zd(e,l,f){let _=l===void 0?Date.now():l,w=["relay_url","session_id","environment_id","expires_at","policy_mode","policy_version","hands_protocol_version","hands_worker_version","hands_worker_artifact_sha256","hands_worker_entrypoint","target_generation","target_fence_id"],S=new Set([...w,"workspace_id","legacy_workspace_id",Ce,Ae,"environment_binding","cloud_browser","sandbox_provider","sandbox_os","personal_workspace","workspace_path","workspace_worktree",Ze,ho,Et,Q,Z,q]),x=xt(e)?e:null,W=x?.[ho],R=x?.[Et],M=x?.[Z],G=W===void 0||(x?.[Ze]===Yr||M===pe&&x?.[Ze]===void 0)&&xt(W)&&Object.keys(W).every((ve)=>ve==="mode"||ve==="allowed_domains")&&W.mode==="enforce"&&Array.isArray(W.allowed_domains)&&W.allowed_domains.length<=256&&W.allowed_domains.every((ve)=>typeof ve==="string"&&Nn(ve));if(!xt(e)||w.some((ve)=>!(ve in e))||Object.keys(e).some((ve)=>!S.has(ve))||!G||M!==void 0&&M!==pe||x?.[q]!==void 0&&x[q]!==Te||x?.personal_workspace!==void 0&&(x.personal_workspace!==!0||x[Ze]!==Yr)||x?.cloud_browser!==void 0&&(x.cloud_browser!==!0||x[Ze]!==Yr)||x?.sandbox_provider!==void 0&&!mo(x.sandbox_provider)||x?.sandbox_os!==void 0&&x.sandbox_os!=="linux"||R!==void 0&&(x?.[Ze]!==St||!Js(R))||Ze in e&&e[Ze]!==Yr&&e[Ze]!==St&&e[Ze]!==Br||e.workspace_path!==void 0&&(!Y(e.workspace_path)||e[Ze]!==Br)||e.workspace_worktree!==void 0&&(e.workspace_path===void 0||!Ud(e.workspace_worktree))||typeof e.relay_url!=="string"||typeof e.session_id!=="string"||!Xr.test(e.session_id)||e.workspace_id!==void 0&&(typeof e.workspace_id!=="string"||!Xr.test(e.workspace_id))||e.legacy_workspace_id!==void 0&&(typeof e.legacy_workspace_id!=="string"||!Xr.test(e.legacy_workspace_id))||e[Ce]!==void 0&&(e[Ce]!==ue||(Ze in e))||e[Ae]!==void 0&&(e[Ae]!==X||(Ze in e))||e[Q]!==void 0&&(typeof e[Q]!=="string"||!Xr.test(e[Q]))||typeof e.environment_id!=="string"||!Xr.test(e.environment_id)||typeof e.expires_at!=="string"||e.policy_mode!=="full_access"||e.policy_version!==1||e.hands_protocol_version!==P||e.hands_worker_version!==O||e.hands_worker_artifact_sha256!==b||!ei(e.hands_worker_entrypoint)||!H(e.target_generation)||!N(e.target_fence_id))throw new r("invalid_hands_payload","Reason Hands connection payload is invalid.");let F;try{F=new URL(e.relay_url)}catch{throw new r("invalid_hands_relay","Reason Hands relay URL is invalid.")}if((gi(F.hostname)?F.protocol!=="ws:":F.protocol!=="wss:")||F.username||F.password||F.hash||!/^\/device\/[A-Za-z0-9-]+\/[A-Za-z0-9]+$/.test(F.pathname))throw new r("invalid_hands_relay","Reason Hands relay URL is not allowed.");let re=Date.parse(e.expires_at),J=Number.isNaN(re)?"parse":new Date(re).toISOString()!==e.expires_at?"noncanonical":re<=_?"expired":re-_>pi?"over_cap":"accepted",z={version:1,outcome:J,clock_source:l===void 0?"date_now":"injected",validation_now_ms:bt(_),expiry_ms:bt(re),remaining_ms:Number.isSafeInteger(re-_)?re-_:null,maximum_lifetime_ms:pi,cli_artifact:ti()};if(J!=="accepted")throw new Er(z);try{f?.(z)}catch{}let fe=e.environment_binding===void 0?void 0:An.safeParse(e.environment_binding);if(fe&&!fe.success)throw new r("invalid_hands_request","Reason Hands environment binding is invalid.");return{...e.cloud_browser===!0?{cloud_browser:!0}:{},...mo(e.sandbox_provider)?{sandbox_provider:e.sandbox_provider}:{},...e.sandbox_os==="linux"?{sandbox_os:e.sandbox_os}:{},...e.personal_workspace===!0?{personal_workspace:!0}:{},relay_url:F.toString(),...fe?.success?{environment_binding:fe.data}:{},session_id:e.session_id,...e.workspace_id===void 0?{}:{workspace_id:e.workspace_id},...e.legacy_workspace_id===void 0?{}:{legacy_workspace_id:e.legacy_workspace_id},...e[Ce]===ue?{[Ce]:ue}:{},...e[Ae]===X?{[Ae]:X}:{},...typeof e[Q]==="string"?{[Q]:e[Q]}:{},...e[Z]===pe?{[Z]:pe}:{},...e[q]===Te?{[q]:Te}:{},...typeof e.workspace_path==="string"?{workspace_path:e.workspace_path}:{},...xt(e.workspace_worktree)?{workspace_worktree:{...typeof e.workspace_worktree.source_path==="string"?{source_path:e.workspace_worktree.source_path}:{},branch:String(e.workspace_worktree.branch)}}:{},environment_id:e.environment_id,expires_at:e.expires_at,policy_mode:"full_access",policy_version:1,hands_protocol_version:P,hands_worker_version:O,hands_worker_artifact_sha256:b,hands_worker_entrypoint:T,target_generation:e.target_generation,target_fence_id:e.target_fence_id,...Ze in e?{[Ze]:e[Ze]}:{},...R===void 0?{}:{[Et]:R},...W===void 0?{}:{[ho]:{mode:"enforce",allowed_domains:[...new Set(W.allowed_domains)].sort()}}}}function $d(){let e=new Map;return{acquire(l,f){if(e.has(l))return null;let _=[...e.values()],w=(x)=>f.group!==void 0&&x.group===f.group;if(f.exclusive?!_.every(w):_.some((x)=>x.exclusive))return null;if(f.limit!==void 0&&!_.some(w)&&new Set(_.map((x,W)=>x.group??W)).size>=f.limit)return null;e.set(l,f);let S=!1;return()=>{if(S)return;S=!0,e.delete(l)}},activeOwners:()=>[...e.keys()]}}var Kd=$d();function Gd(e,l){It(e,{recursive:!0,mode:448});let f=er(e),_=()=>new r("invalid_hands_workspace","Reason Hands managed workspace ancestor must be a real directory, not a link.");for(let x of l.split("/")){let W=cr(f,x);try{let M=dr(W);if(M.isSymbolicLink()||!M.isDirectory())throw _()}catch(M){if(!(M&&typeof M==="object"&&("code"in M)&&M.code==="ENOENT"))throw M;try{It(W,{mode:448})}catch(G){if(!(G&&typeof G==="object"&&("code"in G)&&G.code==="EEXIST"))throw G}}let R=dr(W);if(R.isSymbolicLink()||!R.isDirectory()||er(W)!==W)throw _();f=W}if(process.platform==="win32"){let x=dr(f);if(x.isSymbolicLink()||!x.isDirectory()||er(f)!==f||!Fr(er(e),f))throw _();return f}let w=dr(f),S=Ad(f,Pt.O_RDONLY|Pt.O_DIRECTORY|Pt.O_NOFOLLOW);try{let x=Id(S);if(!x.isDirectory()||x.dev!==w.dev||x.ino!==w.ino||er(f)!==f)throw _();Pd(S,448)}finally{xd(S)}return f}function Jd(e,l=Wo(),f,_,w){if(!Xr.test(e)||f!==void 0&&!Xr.test(f))throw new r("invalid_hands_workspace","Reason Hands run identity is invalid.");let S=Ir(I({kind:"managed",workspaceId:e,..._?{base:_}:{},...w?{layout:w}:{}})),x=Gd(l,Ir(S)),W=cr(x,Nd(S)),R=!1;try{let D=dr(W);if(R=!0,D.isSymbolicLink())throw new r("invalid_hands_workspace","Reason Hands workspace cannot be a symbolic link.");if(!D.isDirectory())throw new r("invalid_hands_workspace","Reason Hands workspace must be a managed directory.")}catch(D){if(D instanceof r||!(D&&typeof D==="object"&&("code"in D)&&D.code==="ENOENT"))throw D}if(w&&!R)try{let D=cr(er(l),Ir(I({kind:"managed",workspaceId:e,..._?{base:_}:{}}))),re=dr(D);if(!re.isSymbolicLink()&&re.isDirectory()&&er(D)===D)cn(D,W),R=!0}catch{}if(f&&f!==e){let D=cr(x,f);try{let re=dr(D);if(re.isSymbolicLink()||!re.isDirectory())throw new r("invalid_hands_workspace","Reason Hands legacy workspace must be a managed directory.");let J=er(D);if(Ir(J)!==x)throw new r("invalid_hands_workspace","Reason Hands legacy workspace escaped its managed parent.");let z=null;if(R){for(let fe=1;fe<=1000&&!z;fe++){let ve=cr(x,fe===1?`.${e}.previous`:`.${e}.previous.${fe}`);try{dr(ve)}catch(be){if(!(be&&typeof be==="object"&&("code"in be)&&be.code==="ENOENT"))throw be;z=ve}}if(!z)throw new r("invalid_hands_workspace","Reason Hands has too many previous workspace backups.");cn(W,z)}try{cn(J,W)}catch(fe){if(z)cn(z,W);throw fe}R=!0}catch(re){if(re instanceof r||!(re&&typeof re==="object"&&("code"in re)&&re.code==="ENOENT"))throw re}}It(W,{recursive:!0,mode:448}),Wt(W,448);let M=er(W);if(Ir(M)!==x)throw new r("invalid_hands_workspace","Reason Hands workspace escaped its managed parent.");let G=cr(M,"repo");try{let D=dr(G);if(D.isSymbolicLink()||!D.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.")}catch(D){if(D instanceof r||!(D&&typeof D==="object"&&("code"in D)&&D.code==="ENOENT"))throw D}It(G,{recursive:!0,mode:448}),Wt(G,448);let F=er(G);if(Ir(F)!==M)throw new r("invalid_hands_workspace","Reason Hands repository escaped its managed run workspace.");return{workRoot:M,repoPath:F}}function xr(e){let l=null;try{l=dr(e)}catch{}if(!l||l.isSymbolicLink()||!l.isDirectory()||l.uid!==0||l.gid!==0||(l.mode&4095)!==493)throw new r("cloud_workspace_root_invalid","This cloud Session's workspace root is not root's 0755 directory, so Reason Hands cannot use it.")}function Vd(e,l,f=process.geteuid?.(),_=process.platform){if(_==="win32")return"unknown";let w;try{if(w=it(e),!w.isDirectory())return"unready";Od(e,Pt.R_OK|Pt.W_OK|Pt.X_OK)}catch{return"unready"}try{if(dr(e).isSymbolicLink()||er(e)!==e)return"unknown"}catch{return"unknown"}if(f!==0)return"checked";if(l===null||w.uid!==l.uid||(w.mode&448)!==448)return"unknown";for(let S=Ir(e);;S=Ir(S)){let x;try{x=it(S)}catch{return"unknown"}if(!(x.uid===l.uid?(x.mode&64)!==0:x.gid===l.gid?(x.mode&8)!==0:(x.mode&1)!==0))return"unknown";if(S===Ir(S))return"checked"}}function qd(e,l){let f="/";for(let _ of["",...e.split("/"),...l.split("/")].filter((w,S)=>S===0||w)){if(_)f=cr(f,_);let w;try{w=dr(f)}catch{return null}if(w.uid!==0)return w.uid;if((w.mode&2)!==0&&(w.mode&512)===0&&!w.isSymbolicLink())return-1;if(w.isSymbolicLink()||!w.isDirectory())return null}return null}function Yd(e,l,f,_=process.geteuid?.(),w){if(!Xr.test(l))return null;let S,x;try{S=er(e),x=Ir(I({kind:"managed",workspaceId:l,...f?{base:f}:{},...w?{layout:w}:{}}))}catch{return null}let W=cr(S,x),R=rn(W)!==null,M=(J)=>new r("cloud_workspace_root_invalid",J),G;if(_===0){let J=qd(S,x);if(J===null)return null;if(!R)throw new r("invalid_hands_workspace","As root, Reason Hands never prepares a workspace in folders another user owns.");G=J}else{if(!R)return null;let J,z;try{J=dr(Ir(W)),z=dr(W)}catch{return null}if(J.isSymbolicLink()||!J.isDirectory()||J.uid===0||z.uid!==0)return null;G=J.uid}let F=S;for(let J of x.split("/")){let z=cr(F,J),fe=!1;try{let ve=dr(z);fe=!ve.isSymbolicLink()&&ve.isDirectory()&&er(z)===z}catch{}if(!fe)throw M("This cloud Session's workspace root is missing or is not a real directory.");F=z}xr(W);let D;try{D=kr(W)}catch(J){if(J instanceof r)throw J;throw M("This cloud Session's workspace root changed while Reason Hands checked it.")}let re=null;try{re=it(D.repoPath).uid}catch{}if(re!==G)throw new r("invalid_hands_workspace","Reason Hands repository must belong to the cloud Session's user.");return D}function kr(e,l=!1){let f=er(e),_=cr(f,"repo"),w;try{w=dr(_)}catch{throw new r("invalid_hands_workspace","Reason Hands repository is missing from the granted root.")}if(l){if(!/^\/var\/lib\/reason\/sessions\/[0-9a-f-]{36}$/.test(f))throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");if(an(f.slice(f.lastIndexOf("/")+1)).runtimeRoot!==f)throw new r("invalid_hands_workspace","Personal runtime identity is invalid.");let W=er("/workspace"),R=er(_);if(W!=="/workspace"||!it(R).isDirectory()||!R.startsWith("/workspace/"))throw new r("invalid_hands_workspace","Personal files escaped the personal computer.");return{workRoot:f,repoPath:R}}let S=zs(f);if(S&&w.isSymbolicLink()){let W=er(_);if(W!==er(S)||!it(W).isDirectory())throw new r("invalid_hands_workspace","Side chat repository must be its parent's checkout.");return{workRoot:f,repoPath:W}}if(w.isSymbolicLink()||!w.isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a managed directory.");let x=er(_);if(Ir(x)!==f)throw new r("invalid_hands_workspace","Reason Hands repository escaped its granted root.");return{workRoot:f,repoPath:x}}function bo(e,l,f){if(l!==void 0&&!Y(l))throw new r("invalid_hands_workspace",`Reason Hands ${f} is invalid.`);let _=hi(e,l??".");if(!Fr(e,_))throw new r("invalid_hands_workspace",`Reason Hands ${f} escapes its granted root.`);return _}function bi(e,l,f){if(et(l)){let _=er(f);return{anchor:_,target:hi(_,l),boundary:cr(_,de)}}return{anchor:e,target:bo(e,l,"folder"),boundary:e}}function Xd(e,l){if(!Fr(e,l))throw new r("invalid_hands_workspace","Reason Hands folder escapes its granted root.");let f=e;for(let _ of l.slice(e.length).split(Ld).filter(Boolean)){f=cr(f,_);let w=null;try{w=dr(f)}catch(S){if(S.code!=="ENOENT")throw S}if(!w)It(f,{mode:448});else if(w.isSymbolicLink()||!w.isDirectory())throw new r("invalid_hands_workspace","Reason Hands folder must be made of real directories.")}}function wi(e,l){let f=er(bo(e,l.source_path,"repository"));if(!Fr(e,f)||!it(f).isDirectory())throw new r("invalid_hands_workspace","Reason Hands repository must be a folder in its granted root.");return f}async function Zd(e,l,f,_=a()){try{let w=er(e);if(go(bi(w,l,_).target))return;return await qs(wi(w,f))??void 0}catch{return}}function Qd(e,l,f,_,w=el,S=a()){let x=er(e),{target:W,boundary:R,anchor:M}=bi(x,l,S);if(f&&!go(W)){let D=wi(x,f);Xd(M,Ir(W));let re=["-c","core.hooksPath=/dev/null","-C",D];if(_)w([...re,"update-ref","--create-reflog","-m",_.note,`refs/heads/${f.branch}`,_.commit,""]);let J=_?w([...re,"worktree","add",W,f.branch]):w([...re,"worktree","add","-b",f.branch,W]);if(!_&&J.status!==0&&/already exists/.test(J.stderr)&&!go(W))J=w([...re,"worktree","add",W,f.branch]);if(J.status!==0)throw new r(/not a git repository/i.test(J.stderr)?"workspace_not_git_repository":"workspace_worktree_failed","Reason could not create this Session's git worktree.")}let G;try{G=dr(W)}catch{throw new r("workspace_folder_missing","This Session's folder no longer exists.")}let F=er(W);if(G.isSymbolicLink()&&!Fr(R,F))throw new r("invalid_hands_workspace","Reason Hands folder resolves outside its granted root.");if(!it(F).isDirectory()||!Fr(R,F))throw new r("invalid_hands_workspace","Reason Hands folder must be a directory in its granted root.");if(E(F))throw new r("protected_path","Credential and secret folders are unavailable to Sessions.");return F}function el(e){let l=Zo();if(!l)return{status:null,stderr:"git was not found. Install Git for Windows (https://git-scm.com/download/win)."};let f=Rd(l,e,{encoding:"utf8",timeout:60000,env:{...process.env,GIT_TERMINAL_PROMPT:"0"},stdio:["ignore","ignore","pipe"]});return{status:f.status,stderr:f.stderr??""}}function yi(e){return Sr(e)??rn(e)?.jobEnv??cr(e,"job.env")}function rl(e,l){let f=yi(e),_=dr(f);if(_.isSymbolicLink()||!_.isFile())throw new r("invalid_hands_workspace","Reason Hands job environment must be a managed regular file.");Td(f,l),Wt(l,384)}function tl(e){if(e.workspaceMode===Br&&e.workspacePath!==void 0){let x=e.home??a(),W=Qd(e.grantedRoot,e.workspacePath,e.workspaceWorktree,e.workspaceWorktreeStart,void 0,x);if(e.workspaceWorktree&&e.deviceId)Xs(x,e.workspacePath,e.deviceId);return{workRoot:W,repoPath:W,workspace:{kind:"root",path:e.workspacePath},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}if(e.workspaceMode===Yr)return{...kr(e.grantedRoot,e.personalWorkspace),workspace:{kind:"root"},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1};if(e.workspaceMode===St||e.workspaceMode===Br){let x=dr(e.grantedRoot);if(x.isSymbolicLink()||!x.isDirectory())throw new r("invalid_hands_workspace","Reason Hands root must be a real directory.");let W=er(e.grantedRoot);return{workRoot:W,repoPath:W,workspace:{kind:"root"},jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!0}}let l=e.workspaceId??e.runId,f={kind:"managed",workspaceId:l,...e.workspaceBase?{base:e.workspaceBase}:{},...e.workspaceLayout?{layout:e.workspaceLayout}:{}},_=ie(e.grantedRoot,f,e.home).anchor,w=Yd(_,l,e.workspaceBase,void 0,e.workspaceLayout);if(w)return{...w,workspace:f,jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:null,managedWorkspace:!1,cloudSessionRoot:!0};let S=Jd(l,_,e.legacyWorkspaceId,e.workspaceBase,e.workspaceLayout);return{...S,workspace:f,jobEnvPath:cr(e.temporaryDirectory,"job.env"),workspacePoolPath:Ir(S.workRoot),managedWorkspace:!0}}function Sn(e){let{command:l,prefix:f}=Tn(e.executablePath,e.sourceEntrypoint),_=Ue({home:Hd(),temporaryDirectory:e.temporaryDirectory,path:e.path});if(_.REASON_DEVICE_ROOT=_.ARA_DEVICE_ROOT=e.grantedRoot,_.REASON_HANDS_WORKSPACE=_.ARA_HANDS_WORKSPACE=e.workRoot,_.REASON_HANDS_REPO=_.ARA_HANDS_REPO=e.root,e.workspacePoolPath)_.REASON_HANDS_WORKSPACE_POOL=_.ARA_HANDS_WORKSPACE_POOL=e.workspacePoolPath;return{command:l,args:[...f,"__device","__hands-worker","--config",e.configPath],options:{cwd:e.root,env:_,shell:!1,stdio:[En,"ignore","pipe"]}}}var En=process.platform==="win32"?"pipe":"ignore";function ct(e,l){if(process.platform!=="win32")return e.kill(l);if(l==="SIGTERM")e.stdin?.end();else if(e.pid)$e(e.pid);return!0}function nl(e,l){let f="",_=!1,w=Date.now(),S=0,x=new Set(["connecting","open","dial_pending","socket_error","close","claim_accepted","claim_rejected","stopping","stopped","request_cancelled","permission_denied"].map((F)=>`hands.worker.${F}`)),W=new Set([null,"open_not_received","current_connection","obsolete_connection","request_aborted","request_timeout","client_closed","driver_stopped","driver_handoff","run_cancelled","run_finished","other","frame_too_large","invalid_json","invalid_claim","executor_mismatch","stale_generation","fence_conflict","SIGTERM","SIGINT","SIGHUP","expired","cleanup_complete","cleanup_failed","cancelled","settled","unsupported","unconfirmed",...["sandbox_policy","os_permission_unknown"].flatMap((F)=>["bash","read","write","edit"].map((D)=>`${F}:${D}`))]),R=["timestampMs","connectionAttempt","connectionGeneration","targetGeneration","activeRequestCount","remainingLifetimeMs","suppressedDiagnostics"],M=["peerGeneration","socketState","closeCode"],G=new Set(["event","reason","launchId",...R,...M]);return(F)=>{for(let D of F.toString().split(/(?<=\n)/)){let re=D.endsWith(`
451
+ `);if(!_&&f.length+D.length<=2048)f+=D;else _=!0;if(!re)continue;let J=f;if(f="",_){_=!1;continue}try{let z=JSON.parse(J);if(!z||typeof z!=="object"||Array.isArray(z)||Object.keys(z).some((fe)=>!G.has(fe))||!x.has(z.event)||!W.has(z.reason)||z.event==="hands.worker.permission_denied"!==(typeof z.reason==="string"&&z.reason.includes(":"))||z.launchId!==e||R.some((fe)=>!Number.isSafeInteger(z[fe])||z[fe]<0)||M.some((fe)=>z[fe]!==null&&(!Number.isSafeInteger(z[fe])||z[fe]<0)))continue;if(Date.now()-w>=60000)w=Date.now(),S=0;if(S>=122)continue;S+=1,l(z)}catch{}}}}async function ol(e){let l=e.now()+e.timeoutMs;while(e.now()<l){if(e.signal.aborted)throw new r("cancelled","Reason Hands start was cancelled.");if(e.spawnFailed?.()||e.child.exitCode!==null||e.child.signalCode!==null)throw new r("hands_worker_exited","Reason Hands exited before ready.");let f=on(e.path,{pid:e.child.pid??-1,launchId:e.launchId,workerVersion:O,protocolVersion:P,workerArtifactSha256:b,workerEntrypoint:T});if(f?.targetGeneration===e.targetGeneration&&f.fenceId===e.fenceId)return f;await new Promise((_)=>setTimeout(_,10))}throw new r("hands_ready_timeout","Reason Hands did not become ready.")}function sl(e){let l=e.exitCode===null?void 0:Cn[e.exitCode];return{exit_code:e.exitCode,exit_signal:e.signalCode,...l?{exit_reason:l}:{}}}async function il(e,l){let f=()=>e.exitCode===0&&e.signalCode===null;if(e.exitCode!==null||e.signalCode!==null)return f()?"stopped":"already_exited";let _=new Promise((x)=>e.once("exit",()=>x()));try{if(!ct(e,"SIGTERM"))return f()?"stopped":"unobserved"}catch{return f()?"stopped":"unobserved"}if(await _i(_,l))return f()?"stopped":"unobserved";try{ct(e,"SIGKILL")}catch{}return await _i(_,l)?"forced":"unobserved"}async function _i(e,l){let f;try{return await Promise.race([e.then(()=>!0),new Promise((_)=>{f=setTimeout(()=>_(!1),l)})])}finally{clearTimeout(f)}}function al(e){return new Promise((l)=>{let f=!1,_=(W)=>{if(f)return;f=!0,clearTimeout(x),e.signal.removeEventListener("abort",w),e.child.off("exit",S),l(W)},w=()=>_("cancelled"),S=()=>_("exited"),x=setTimeout(()=>_("expired"),Math.max(0,e.expiresAt-e.now()));if(e.signal.addEventListener("abort",w,{once:!0}),e.child.once("exit",S),e.signal.aborted)w();else if(e.child.exitCode!==null||e.child.signalCode!==null)S()})}var cl=lo();function dl(e,l){if(!(e instanceof Error)||e instanceof r)return!1;let f=["hands_browser_driver_missing","hands_browser_driver_version_mismatch","hands_browser_executable_missing","hands_browser_unsupported_platform","hands_browser_unavailable"].includes(e.message),_=["ENOENT","EACCES","EPERM"].includes(e.code??"");if(!f&&!_)return!1;try{return dr(l),!1}catch(w){return xt(w)&&w.code==="ENOENT"}}function ll(e){return e.sandbox_provider==="compute"&&!e.cloud_browser&&e[Ze]===Yr}function ul(e,l,f){return e===void 0?{}:{dispatch_stages:{version:1,claim_to_entered_ms:Nr(e,l),...f===void 0?{}:{worker_prespawned:f}}}}async function Nt(e,l={}){let f=l.logDiagnostic??((le)=>console.warn(le)),_=new Map,w=(le)=>{let he=Date.now();_.set(le,he);try{f(JSON.stringify({event:"sandbox.hands_startup",stage:le,timestampMs:he}))}catch{}};w("entered");let S=e.claimEnvironment;e.claimEnvironment=void 0;let x=l.now??Date.now,W,R=zd(e.payload,l.now?.(),(le)=>{W=le});if(e.managedPty&&(e.managedPty.version!==1||!e.headless||!e.runtimeDirectory||![void 0,!0].includes(e.managedPty.startupVerified)||!e.deviceIdentity||!e.claimOwner||e.claimOwner.device_id!==e.deviceIdentity.deviceId||!R.environment_binding||!["darwin","linux","win32"].includes(process.platform)))throw new r("pty_unsupported","Bound PTY requires qualified headless Hands with private jobs and environment.");let M=async(le)=>{let he;try{await Promise.race([le,new Promise((xe,Ke)=>{he=setTimeout(()=>Ke(new r("hands_event_delivery_unavailable","Hands event delivery did not settle within its deadline.")),Math.max(1,Math.min(l.eventDeliveryTimeoutMs??5000,5000)))})])}finally{clearTimeout(he)}},G=async(le,he)=>M(e.emitEvent(le,he));if(e.headless&&(R.cloud_browser===!0||e.managedBrowser!==void 0||R[Et]!==void 0||R[Ze]!==void 0&&R[Ze]!==Br))throw new r("invalid_hands_request","Managed sandbox extensions are unavailable to a headless worker.");let F=ge(),D=R[q]===void 0?null:Ot(F);if(R[q]!==void 0&&(D===null||!e.headless||!me(e.hostExecution,l.hostIdentity?.platform,l.hostIdentity?.euid)))throw new r("hands_model_jobs_egress_unavailable","This worker cannot hold its jobs to the guest egress guard; the Hands did not start.");if(R[Z]!==void 0&&!(e.headless&&me(e.hostExecution,l.hostIdentity?.platform,l.hostIdentity?.euid)))throw new r("hands_confinement_unavailable","Confined Hands need a root Linux worker in host mode.");if(R.cloud_browser&&process.platform!=="linux")throw new r("cloud_browser_target_invalid","Cloud browser is available only on a cloud machine.");let re=`${e.operationId}:${e.attemptId}`,J=R[Ze]===St,z=e.headless||process.platform==="darwin"&&e.managedBrowser===void 0&&!R.cloud_browser&&!R.browser_egress&&(R[Ze]===void 0||R[Ze]===Br)||ll(R),fe=J?R[Et]??"bash":null,ve=fe?Gs(fe):null;if(ve)throw new r(ve,"Persistent Node REPL execution is unavailable; this benchmark profile cannot start.");let be=R[Ze],Re=e.headless===!0&&e.ownComputer!==!0?e.handsSlots??1:void 0,Fe=(l.slot??Kd).acquire(re,{exclusive:Re===1||be!==void 0&&be!==Br,...Re!==void 0&&Re>1?{limit:Re}:{},...e.headless===!0&&R[Q]!==void 0?{group:R[Q]}:{}});if(!Fe)throw new r("hands_slot_busy",Re!==void 0&&Re>1?`This Reason worker runs at most ${Re} sessions at a time.`:"This Reason Device runs one session at a time.");let qe=e.headless===!0?ji(e.runId):null,ye=null,We=null,Ve,De;try{w("browser_resolution");let le=e.headless&&l.browserExecutablePath===void 0?await jt():null,he=J||R.cloud_browser?null:l.browserExecutablePath===void 0?e.headless?le?.status==="resolved"?le.executablePath:null:await Ms(void 0,process.platform,e.managedBrowser):l.browserExecutablePath;if(!J&&!R.cloud_browser&&!z&&!he)throw new r("hands_browser_unavailable","Reason Hands requires Chrome, Edge, Brave, Chromium, or a Playwright Chromium install.");w("path_resolution");let xe;try{xe=await(l.resolvePathEnvironment??cl)()}catch{xe={path:xn(),source:"fallback"}}if(w("workspace_setup"),process.platform==="darwin"){let Qe=R[Ze]===Br&&R.workspace_path!==void 0?bo(e.root,R.workspace_worktree?R.workspace_worktree.source_path:R.workspace_path,"folder"):null;for(let fr of new Set([e.root,...Qe?[Qe]:[]]))await _s(fr)}let Le=R[Ze]===Yr||R[Ze]===St?Wd(process.platform,l.sandboxRuntimeRoot):null,Be=e.headless&&e.runtimeDirectory?e.runtimeDirectory:Le?Le.temporaryRoot:mi();if(ye="private_runtime",e.headless&&e.runtimeDirectory){v(Be);let Qe=er(e.root);if(!je(Qe,Be))throw new r("invalid_hands_workspace","Private worker state must not overlap the granted workspace.")}if(e.headless&&e.runtimeDirectory&&(!e.deviceIdentity||!R.environment_binding))throw new r("environment_unavailable","Headless Hands requires a server-bound private environment.");if(ye="runtime_root",Le?.prepareRoot)It(Be,{recursive:!0,mode:457}),Wt(Be,457);ye="temporary_directory";let ke=er(Dd(cr(Be,"reason-hands-session-")));We=ke,Wt(ke,Le?.sessionMode??448);let Me=cr(ke,"hands-config.json"),rr=cr(ke,"hands-ready.json"),nr=Sd(),Rr=R.target_fence_id;if(e.workspaceGrant){ye="workspace_grant",w("workspace_grant_wait");let Qe=e.workspaceGrant;await new Promise((fr,tt)=>{let pt=()=>tt(new r("cancelled","Reason Hands was cancelled."));if(e.signal.aborted){pt();return}e.signal.addEventListener("abort",pt,{once:!0}),Qe.then(fr,tt).finally(()=>e.signal.removeEventListener("abort",pt))})}ye="granted_root";let Ge=er(e.root);ye="workspace_layout";let sr=R[Ze]===Br&&R.workspace_path!==void 0&&R.workspace_worktree?await Zd(Ge,R.workspace_path,R.workspace_worktree):void 0,{workRoot:or,repoPath:lr,jobEnvPath:Wr,workspacePoolPath:ln,managedWorkspace:Kr,workspace:dt,cloudSessionRoot:Ft}=tl({grantedRoot:Ge,personalWorkspace:R.personal_workspace===!0,runId:e.runId,workspaceId:R.workspace_id,legacyWorkspaceId:R.legacy_workspace_id,workspaceBase:R[Ce],workspaceLayout:R[Ae],temporaryDirectory:ke,workspaceMode:R[Ze],applicationSupportPath:l.applicationSupportPath,...R.workspace_path===void 0?{}:{workspacePath:R.workspace_path},...R.workspace_worktree?{workspaceWorktree:R.workspace_worktree}:{},...sr?{workspaceWorktreeStart:sr}:{},...e.deviceIdentity?{deviceId:e.deviceIdentity.deviceId}:{}});if(Uo(or))throw new r("folder_is_filesystem_root",`${zo(or)}.`);let Zr="ara_device_wss";ye="jobs";let ur=e.headless&&e.runtimeDirectory?gr({runtimeDirectory:e.runtimeDirectory,root:Ge,runId:e.runId}):void 0;Ve=ur?.disposeSocket;let jr=ur?ts(ur):null;if(jr)try{f(JSON.stringify({event:"hands.journal_owner_retired",run_id:e.runId,reason:jr.reason,prior_executor_launch_id:jr.executorLaunchId}))}catch{}if(ur&&[or,lr].some((Qe)=>!je(Qe,ur.journalDirectory)))throw new r("invalid_hands_workspace","A Session can't work in the folder that holds this worker's settings; start it in a project or repository inside it.");let ft=R.personal_workspace?or.slice(or.lastIndexOf("/")+1):void 0;if(ft&&ft!==R.workspace_id)throw new r("invalid_hands_workspace","Personal session identity does not match its Device grant.");ye="browser_socket";let Lr=R.cloud_browser?Fd(R.sandbox_os,ft):process.platform==="win32"?`\\\\.\\pipe\\reason-repl-${nr}`:cr(ur?ur.launchDirectory:ke,"repl.sock");ye="relay_url";let Mr=gi(new URL(R.relay_url).hostname),Qr=Zr==="ara_device_wss"&&!Mr?(l.loadProxy??j)()?.url:void 0,Tr;ye="environment_owner";let Or=e.headless&&e.deviceIdentity&&R.environment_binding?Zs(ke,{runId:e.runId,...e.deviceIdentity,binding:R.environment_binding,expiresAtMs:Date.parse(R.expires_at),identity:()=>Tr?.()??null}):void 0;ye="job_environment";let Tt=!Or&&dt.kind==="managed"&&Kr?cr(or,"job.env"):null;if(Tt)try{dn(Tt,"",{mode:384,flag:"wx"})}catch(Qe){if(!(Qe instanceof Error&&("code"in Qe)&&Qe.code==="EEXIST"))throw Qe}let un={url:R.relay_url,transport:Zr,...Qr===void 0?{}:{proxyUrl:Qr},...e.localGithubConfinement?{localGithubConfinement:!0}:{},...R[Z]&&Or?{gitCredentialEnvironment:!0}:{},workerVersion:O,protocolVersion:P,workerArtifactSha256:b,workerEntrypoint:T,...process.platform==="win32"?{bashExecutable:se()}:{},targetGeneration:R.target_generation,fenceId:Rr,workRoot:or,workspaceAliasPath:or,jobEnvPath:Wr,...Or?{environmentSnapshotPath:Or.path,...e.hostExecution?{executionEnvironment:wr()}:{},environmentExpectedBinding:{runId:e.runId,...e.deviceIdentity,binding:R.environment_binding}}:Tt?{jobEnvSourcePath:Tt,workspacePoolPath:Ir(or)}:Kr?{}:{jobEnvSourcePath:yi(or)},repoPath:lr,replSocketPath:Lr,...R.cloud_browser?{browserRunId:e.runId}:{},readyPath:rr,launchId:nr,expiresAtMs:Date.parse(R.expires_at),bashTimeoutMs:300000,replTimeoutMs:120000,...ur?{managedJobs:{journalDirectory:ur.journalDirectory,scopeId:ur.scopeId},jobControlSocketPath:ur.socketPath}:{},...ur&&F?{jobsUser:{...F,...D!==null?{modelGid:D}:{}}}:{},...e.managedPty&&ur&&Or?{managedPty:{version:1,...e.managedPty.startupVerified===!0?{persistent:!0}:{},...process.platform==="darwin"?{shell:br()}:{}}}:{},...z&&!he?{allowedTools:["bash","read","write","edit"]}:J?{allowedTools:fe==="bash"?["bash"]:["bash","repl"]}:{}};if(Or||Kr&&!Tt)dn(Wr,"",{mode:384});else rl(or,Wr);ye="config_write",dn(Me,JSON.stringify(un),{mode:384}),ye=null;let rt={session_id:R.session_id,environment_id:R.environment_id,hands_protocol_version:P,hands_worker_version:O,hands_worker_artifact_sha256:b,hands_worker_entrypoint:T,target_generation:R.target_generation,target_fence_id:R.target_fence_id,executor_launch_id:nr},Ut=null,wo=!1,yo=!1,vo,pr=null,ko,So,zt="failed",Eo=null,fn=Promise.resolve(),Ro=null,pn=async(Qe,fr)=>{try{await G(Qe,fr)}catch{}};try{w("event_started");let Qe,fr=(async()=>{await e.emitEvent("hands.started",{...rt,policy_mode:"full_access",policy_version:1,path_source:xe.source}),Qe=Date.now()})();fr.catch(()=>{return}),w("worker_setup");let tt=R.browser_egress?{mode:"enforce",allowedDomains:R.browser_egress.allowed_domains}:{mode:"off"};if(fe&&fe!=="bash")Ut=await(l.startNodeRepl??ci)({socketPath:Lr,workRoot:or});else if(!J&&!R.cloud_browser&&he)Ut=await(l.startRepl??Ws)({socketPath:Lr,browserExecutablePath:he,workspaceRoot:lr,...e.managedBrowser?{managedBrowser:e.managedBrowser}:{},...e.desktopRecording?{recording:e.desktopRecording}:{},networkPolicy:tt,onEgressDenied:(Ne)=>{let Hr=$s(Ne.host);f(JSON.stringify({event:"sandbox.repl_egress_denied",destination_id:Hr,reason:Ne.reason,run_id:e.runId})),fn=fn.then(()=>G("hands.browser_egress_denied",{destination_id:Hr,reason:Ne.reason})).catch((Gt)=>{Ro??=Gt})}}).catch((Ne)=>{if(!z||e.signal.aborted||x()>=Date.parse(R.expires_at)||!dl(Ne,Lr))throw Ne;return Object.assign(un,{allowedTools:["bash","read","write","edit"]}),dn(Me,JSON.stringify(un),{mode:384}),yo=!0,null});let pt=Sn({configPath:Me,root:lr,grantedRoot:Ge,workRoot:or,workspacePoolPath:ln,temporaryDirectory:ke,path:xe.path,executablePath:l.executablePath,sourceEntrypoint:l.sourceEntrypoint}),_n=Date.now(),mn,Oo,hn=l.takePrespawnedWorker?.(pt)??null;if(vo=l.takePrespawnedWorker?hn!==null:void 0,pr=hn??(l.spawnWorker??((Ne)=>Ed(Ne.command,Ne.args,Ne.options)))(pt),!hn)l.adoptSpawnedWorker?.(pr);pr.stderr?.on("data",nl(nr,(Ne)=>{if(Ne.event==="hands.worker.connecting")mn??=Ne.timestampMs;else if(Ne.event==="hands.worker.open")Oo??=Ne.timestampMs;if(f(JSON.stringify({...Ne,run_id:e.runId})),Ne.event==="hands.worker.permission_denied"&&typeof Ne.reason==="string"){let[Hr,Gt]=Ne.reason.split(":");if(["sandbox_policy","os_permission_unknown"].includes(Hr??"")&&["bash","read","write","edit"].includes(Gt??""))G("permission.denied",{provenance:Hr,operation:Gt}).catch(()=>{return})}}));let xo=!1;pr.on("error",()=>{xo=!0}),pr.once("exit",(Ne,Hr)=>{try{f(JSON.stringify({event:"hands.worker.exited",run_id:e.runId,launchId:nr,exit_code:Ne,exit_signal:Hr}))}catch{}}),De=pr,w("worker_ready_wait");let Dt=await ol({path:rr,launchId:nr,fenceId:Rr,targetGeneration:R.target_generation,child:pr,spawnFailed:()=>xo,signal:e.signal,timeoutMs:l.readyTimeoutMs??Bd,now:x}),vi=Date.now();if(Tr=()=>{if(!pr||pr.exitCode!==null||pr.signalCode!==null)return null;let Ne=on(rr,Dt);return Ne?{generation:Ne.targetGeneration,fenceId:Ne.fenceId}:null},ur){let Ne={root:Ge,runId:e.runId,operationId:e.operationId,scopeId:ur.scopeId,socketPath:ur.socketPath,generation:Dt.targetGeneration,fenceId:Dt.fenceId,executorLaunchId:nr,expiresAtMs:Date.parse(R.expires_at),readIdentity:Tr,workspace:dt,localGithubConfinement:e.localGithubConfinement===!0};if(Or)Ne.environment=Or;if(e.claimOwner&&e.deviceIdentity&&e.claimOwner.device_id===e.deviceIdentity.deviceId){let Hr=[e.deviceIdentity.apiOrigin,R.relay_url];if(Qr)Hr.push(Qr);Ne.previewAuthority={owner:Object.freeze({...e.claimOwner}),rootId:e.deviceIdentity.rootId,relayOrigin:new URL(R.relay_url).origin,deniedPorts:mr(Hr)}}So=ns(Ne)}if(await new Promise((Ne)=>{setImmediate(Ne)}),Ft)xr(or);let Kt;if(S&&Or){try{let Ne=Or.install(S);Kt={snapshot_id:Ne.snapshot_id,installed_revision:Ne.installed_revision}}catch{}try{f(JSON.stringify({event:"hands.environment_at_claim",run_id:e.runId,installed:Kt!==void 0}))}catch{}}S=void 0;let Po=!1;if(e.headless){let Ne=Vd(lr,F);try{f(JSON.stringify({event:"hands.workspace_check",run_id:e.runId,outcome:Ne}))}catch{}if(Ne==="unready")throw new r("hands_workspace_unready","This Session's checkout is not a readable, writable directory at its own path, so Reason Hands cannot use it.");Po=Ne==="checked"}w("event_ready");let Io=M(fr);Io.catch(()=>{return});let Ao=Date.now();wo=!0,await G("hands.ready",{...rt,expiry_diagnostic:W,startup_stages:{version:1,browser_resolution_ms:Nr(_.get("browser_resolution"),_.get("path_resolution")),path_resolution_ms:Nr(_.get("path_resolution"),_.get("workspace_setup")),workspace_setup_ms:Nr(_.get("workspace_setup"),_.get("event_started")),repl_setup_ms:Nr(_.get("worker_setup"),_n),worker_boot_ms:Nr(_n,mn),worker_dial_ms:Nr(mn,Oo),worker_ready_ms:Nr(_n,vi),started_event_ms:Nr(_.get("event_started"),Qe),started_join_wait_ms:Nr(_.get("event_ready"),Ao),total_ms:Nr(_.get("entered"),Ao)},...ul(e.claimedAtMs,_.get("entered"),vo),...e.managedPty?.startupVerified===!0?{managed_pty:{version:1,execution_mode:"host",descendant_cleanup_verified:!0}}:{},policy_mode:"full_access",policy_version:1,path_source:xe.source,connection_generation:Dt.generation,...Kt?{environment_installed:Kt}:{},...Po?{workspace_checked:!0}:{},...z&&!Ut?{browser_state:"unavailable",browser_reason_code:yo?"setup_failed":"not_resolved"}:{viewport_width:1440,viewport_height:900}}),await Io,w("ready"),ko=si({path:rr,initial:Dt,signal:e.signal,isAlive:()=>pr!==null&&pr.exitCode===null&&pr.signalCode===null&&x()<Date.parse(R.expires_at),publish:(Ne,Hr)=>e.emitEvent("hands.reconnected",{...rt,target_generation:Ne.targetGeneration,target_fence_id:Ne.fenceId,connection_generation:Ne.generation},Hr),failed:()=>f(JSON.stringify({event:"hands.worker.generation_proof_failed",run_id:e.runId,executor_launch_id:nr}))});let Do=await al({child:pr,signal:e.signal,expiresAt:Date.parse(R.expires_at),now:x});if(Do==="cancelled"){let Ne=e.signal.reason instanceof r?e.signal.reason.code:"cancelled";throw zt=Ne,new r(Ne,"Reason Hands was cancelled.")}if(Do==="exited")throw new r("hands_worker_exited","Reason Hands exited unexpectedly.");return zt="expired",{...rt,policy_mode:"full_access",policy_version:1,ended:"expired"}}catch(Qe){Eo=Qe;let fr=Qe instanceof r?Qe.code:"hands_failed",tt=fr==="cancelled"||["run_finished","run_cancelled","driver_handoff","driver_stopped"].includes(fr);if(zt=tt?fr:"failed",!tt)await pn("hands.failed",{...rt,reason_code:fr,...fr==="hands_worker_exited"&&pr?sl(pr):{}});throw Qe}finally{ko?.stop(),So?.();let Qe=pr?await il(pr,l.stopTimeoutMs??jd):null,fr=!1;await e.desktopRecording?.close();try{await Ut?.stop()}catch{fr=!0}if(await fn,(Qe==="stopped"||Qe==="already_exited"&&!wo)&&!fr)await pn("hands.stopped",{...rt,reason_code:zt});else if(Qe!==null||fr){if(await pn("hands.failed",{...rt,reason_code:Qe==="forced"?"hands_stop_forced":"hands_stop_unconfirmed"}),Eo===null||fr)throw new r("hands_stop_unconfirmed","Reason Hands resource cleanup could not be proven.")}if(Ro!==null)throw new r("hands_egress_audit_failed","Reason Hands could not persist a browser egress denial receipt.")}}catch(le){let he=Fs(ye,le);if(he)try{f(JSON.stringify({event:"sandbox.hands_workspace_failed",...he}))}catch{}throw le}finally{try{if(!De||De.exitCode!==null||De.signalCode!==null)Ve?.();if(We!==null&&(!De||De.exitCode!==null||De.signalCode!==null))Cd(We,{recursive:!0,force:!0})}finally{qe?.(),Fe()}}}
452
+ export{B,m,je,te,mr,Qi,gr,eo,at,to,ro,no,io,_r,oo,so,yr,ao,wr,br,wn,bn,vr,co,He,vn,Sr,me,ge,Ot,Er,xr,kr,Sn,En,ct,Nt};