@reason-machines/cli-linux-x64 0.2.430 → 0.2.432

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 (35) hide show
  1. package/bin/reason +1 -1
  2. package/bin/vm-hands/{connect-cli-671qehvd.js → connect-cli-erdzyzqy.js} +1 -1
  3. package/bin/vm-hands/{local-automation-bg0bwba0.js → local-automation-7pb1hayw.js} +1 -1
  4. package/bin/vm-hands/{local-capabilities-dspyxqnq.js → local-capabilities-27srscbj.js} +1 -1
  5. package/bin/vm-hands/{local-display-session-d4zd1760.js → local-display-session-k9vawrfm.js} +1 -1
  6. package/bin/vm-hands/local-display-video-gfxf8e1z.js +2 -0
  7. package/bin/vm-hands/{local-managed-process-maj54q14.js → local-managed-process-1kjvcfm9.js} +1 -1
  8. package/bin/vm-hands/{managed-runtime-znhfh56y.js → managed-runtime-fxxqd1dv.js} +1 -1
  9. package/bin/vm-hands/{permissions-mcqsh1xm.js → permissions-4xey0mr4.js} +1 -1
  10. package/bin/vm-hands/{serve-service-adqrzdkr.js → serve-service-mbs292rn.js} +1 -1
  11. package/bin/vm-hands/{status-5r3rs7s1.js → status-jntdck0a.js} +1 -1
  12. package/bin/vm-hands/version-nr2mxqqq.js +2 -0
  13. package/bin/vm-hands/{vm-hands-entry-lite-4gadqypp.js → vm-hands-entry-lite-35083t46.js} +1 -1
  14. package/bin/vm-hands/vm-hands-entry-lite-91j2d2je.js +2 -0
  15. package/bin/vm-hands/{vm-hands-entry-lite-gvmhjyhb.js → vm-hands-entry-lite-bmhdtp0h.js} +1 -1
  16. package/bin/vm-hands/{vm-hands-entry-lite-tvsjy4nb.js → vm-hands-entry-lite-c5qkqk8k.js} +1 -1
  17. package/bin/vm-hands/{vm-hands-entry-lite-7j96jxh6.js → vm-hands-entry-lite-cnhzqbbd.js} +1 -1
  18. package/bin/vm-hands/{vm-hands-entry-lite-cgnkxwvv.js → vm-hands-entry-lite-hgn89ved.js} +1 -1
  19. package/bin/vm-hands/{vm-hands-entry-lite-0fwawqma.js → vm-hands-entry-lite-jcdfpjnv.js} +1 -1
  20. package/bin/vm-hands/{vm-hands-entry-lite-fwj2vk0q.js → vm-hands-entry-lite-jhwrx3rb.js} +1 -1
  21. package/bin/vm-hands/{vm-hands-entry-lite-4nkd9xmp.js → vm-hands-entry-lite-petw5397.js} +1 -1
  22. package/bin/vm-hands/{vm-hands-entry-lite-18zxefca.js → vm-hands-entry-lite-t72ph4ex.js} +1 -1
  23. package/bin/vm-hands/{vm-hands-entry-lite-557rnks7.js → vm-hands-entry-lite-vgx3m8ce.js} +1 -1
  24. package/bin/vm-hands/{vm-hands-entry-lite-ezadej92.js → vm-hands-entry-lite-xh3c9w0d.js} +1 -1
  25. package/bin/vm-hands/{vm-hands-entry-lite-7xy7g88x.js → vm-hands-entry-lite-yk08kt91.js} +1 -1
  26. package/bin/vm-hands/{vm-hands-entry-lite-9xhynk62.js → vm-hands-entry-lite-ztq1cfea.js} +1 -1
  27. package/bin/vm-hands/vm-hands-entry-lite.js +1 -1
  28. package/bin/vm-hands/vm-hands-executor-cm095jh9.js +12 -0
  29. package/bin/vm-hands/{vm-hands-op-runner-b6rvv74d.js → vm-hands-op-runner-492qh36h.js} +1 -1
  30. package/bin/vm-hands/{vm-hands-runtime-k3e8mw0p.js → vm-hands-runtime-fjbqrd8g.js} +3 -3
  31. package/package.json +1 -1
  32. package/bin/vm-hands/local-display-video-eenan2fs.js +0 -2
  33. package/bin/vm-hands/version-svs369ss.js +0 -2
  34. package/bin/vm-hands/vm-hands-entry-lite-wz90f9ha.js +0 -2
  35. package/bin/vm-hands/vm-hands-executor-r5a5r5xx.js +0 -11
@@ -1,11 +0,0 @@
1
- // @bun
2
- import"./vm-hands-entry-lite-tqc2ezda.js";import"./vm-hands-entry-lite-r7zs4ce2.js";import"./vm-hands-entry-lite-3vmhs921.js";import"./vm-hands-entry-lite-em7mk9tn.js";import{nt,Ki,yr,Tt}from"./vm-hands-entry-lite-0fwawqma.js";import"./vm-hands-entry-lite-d9g1pzzx.js";import"./vm-hands-entry-lite-499mywh7.js";import"./vm-hands-entry-lite-g9z467dk.js";import"./vm-hands-entry-lite-fcvf8md1.js";import"./vm-hands-entry-lite-a3w8m8nb.js";import"./vm-hands-entry-lite-hw26gewc.js";import"./vm-hands-entry-lite-1f2cam25.js";import"./vm-hands-entry-lite-12rzrd95.js";import{or,sr,xt,kt}from"./vm-hands-entry-lite-tvsjy4nb.js";import"./vm-hands-entry-lite-dh8f2h2d.js";import"./vm-hands-entry-lite-t5q30ne0.js";import"./vm-hands-entry-lite-9sa1knn7.js";import"./vm-hands-entry-lite-8j7p91hr.js";import{spawn as Ne}from"child_process";import{chmodSync as Ie,chownSync as Ae,existsSync as j,lstatSync as q,mkdirSync as V,mkdtempSync as De,readdirSync as Y,readFileSync as k,realpathSync as Me,rmdirSync as ue,rmSync as Le,writeFileSync as K}from"fs";import{basename as Te,dirname as He,join as d}from"path";import{readFileSync as oe,readlinkSync as ie}from"fs";import{relative as Oe}from"path";var ae=16;function ce(e){return e.replace(/\\([0-7]{3})/g,(t,i)=>String.fromCharCode(Number.parseInt(i,8)))}function $e(e){let t=[];for(let i of e.split(`
3
- `)){let n=i.split(" ");if(n.length<10||!/^\d+:\d+$/.test(n[2]))continue;t.push({device:n[2],root:ce(n[3]),mountPoint:ce(n[4])})}return t}function xe(e,t,i){let n=e.replace(/\/+$/,"")||"/",u=(m)=>n==="/"||m===n||m.startsWith(`${n}/`),a=(m)=>new Map($e(m).filter((v)=>u(v.mountPoint)).map((v)=>[`${v.mountPoint}\x00${v.device}\x00${v.root}`,v.mountPoint])),c=a(t),p=a(i),b=(m)=>Oe(n,m)||".",P=[...c].filter(([m])=>!p.has(m)).map(([,m])=>b(m)),C=[...p].filter(([m])=>!c.has(m)).map(([,m])=>b(m));return{missing:P,extra:C,referenceCount:c.size,ownCount:p.size}}function le(e,t,i,n="/proc"){let u,a,c=null;try{u=oe(`${n}/1/mountinfo`,"utf8"),a=oe(`${n}/self/mountinfo`,"utf8")}catch(v){let O=v&&typeof v==="object"&&"code"in v&&typeof v.code==="string"?v.code:"unreadable";t("vm_hands.mount_check_unavailable",{code:O});return}try{c=ie(`${n}/1/ns/mnt`)===ie(`${n}/self/ns/mnt`)}catch{}let{missing:p,extra:b,referenceCount:P,ownCount:C}=xe(e,u,a),m={reference_count:P,own_count:C,missing_count:p.length,extra_count:b.length,same_namespace:c};if(b.length)t("vm_hands.mount_extra",{...m,extra:b.slice(0,ae)});if(p.length)throw t("vm_hands.mount_mismatch",{...m,missing:p.slice(0,ae)}),i(`${p.length} mount(s) under the Session root are missing from vm-hands' namespace`)}var he="/sys/fs/cgroup/reason-payload",D="vm-hands",We="/run/ara-srt/fallbacks.jsonl",G="/reason-person",ze="surface",ee=5000,Be=1e4,de="__VM_HANDS_PROOF_DIR__",Ue="__VM_HANDS_PROBE_NONCE__";class y extends Error{code;constructor(e,t){super(t);this.code=e}}function Fe(e,t){if(!/^[0-9a-f-]{36}$/i.test(t))throw new y("vm_hands_bind_invalid","bad bind id");return d(e,D,`b-${t.toLowerCase()}`)}var Ke=5000,ye=(e)=>`'${e.replaceAll("'","'\\''")}'`;function je(e,t){if(!t||!/^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i.test(t))return e;let i=d(He(e),t.toLowerCase());return Te(e).toLowerCase()===t.toLowerCase()?e:i}function ln(e){let t=e.cgroup??he,i=e.init.layout.payload_uid,n=e.log??(()=>{}),u=(r)=>je(e.init.layout.session_root,r),a=new Map,c=new Map,p=0,b=()=>{try{let r=k("/run/ara-srt/starts.jsonl","utf8"),s=r.slice(p>r.length?0:p).split(`
4
- `).filter(Boolean);p=r.length;let l=s.map((f)=>{try{return Number(JSON.parse(f).elapsed_ms)||0}catch{return 0}});if(l.length)n("vm_hands.srt_server_starts",{count:l.length,elapsed_ms:l.slice(0,8)})}catch{}},P=null,C=!1,m=e.srtCgroup??"/sys/fs/cgroup/reason-srt",v=()=>{P??=pe()},O=0,N=()=>{try{let r=k(We,"utf8"),s=r.slice(O>r.length?0:O);O=r.length;let l=s.split(`
5
- `).filter(Boolean).slice(0,1000);if(!l.length)return null;let f={},g=0;for(let S of l)try{let _=JSON.parse(S),h=typeof _.code==="string"&&/^[a-z_]{1,40}$/.test(_.code)?_.code:"other";if(f[h]=(f[h]??0)+1,typeof _.elapsed_ms==="number")g=Math.max(g,_.elapsed_ms)}catch{f.unparsed=(f.unparsed??0)+1}return n("vm_hands.srt_fallbacks",{count:l.length,codes:f,max_elapsed_ms:g}),{count:l.length,codes:f,max_elapsed_ms:g}}catch{return null}},x=(r,s,l)=>F(r,s,l),H=(r)=>(s,l,f)=>Ne("/bin/sh",["-c",`echo $$ > ${ye(d(r,"cgroup.procs"))} || exit 125; exec "$@"`,"vm-hands-join",s,...l],f),F=H(d(t,D)),W=d(t,D,"probe"),z=(r)=>Fe(t,r),ke=(r)=>{let s=z(r);try{V(s,{mode:493})}catch(l){if(!(l&&typeof l==="object"&&("code"in l)&&l.code==="EEXIST"))throw new y("vm_hands_bind_failed","bind cgroup")}return s},Pe=(r)=>{try{ue(z(r))}catch{}},B=e.prespawn?Ki({spawnProcess:x,...e.relayDependencies?.sourceEntrypoint?{sourceEntrypoint:e.relayDependencies.sourceEntrypoint}:{},log:(r,s)=>n(r,s??{})}):null;B?.arm();let Z=B?setInterval(()=>{B.arm()},Ke):null;Z?.unref?.();async function X(r){let s=a.get(r);if(a.delete(r),!s)return;s.abort.abort(),await s.done}return{bindCgroup:z,async startExecutor(r){if(v(),c.set(r.bindId,pe()),C=!0,!r.claim)throw new y("vm_hands_bind_invalid","an executor needs the claim it serves");await X(r.bindId);let{claim:s,bindId:l}=r,f=ke(l),g=s.owner;if(!g||typeof g.device_id!=="string"||typeof s.root_id!=="string")throw new y("vm_hands_bind_invalid","claim without its owner Device or root");let S=new AbortController,_,h,I=new Promise((o,w)=>{_=o,h=w}),A,R=new Promise((o)=>{A=o}),U=Tt({headless:!0,hostExecution:!0,runtimeDirectory:e.runtimeDirectory,deviceIdentity:{deviceId:g.device_id,rootId:s.root_id,apiOrigin:e.apiOrigin},claimOwner:s.owner,root:e.root,runId:s.run_id,operationId:s.operation_id,attemptId:s.attempt_id,payload:Object.fromEntries(Object.entries(s.payload).filter(([o])=>!o.startsWith("vm_hands_"))),signal:S.signal,...r.workspaceGrant?{workspaceGrant:r.workspaceGrant}:{},emitEvent:async(o,w)=>{if(o==="hands.ready"){_(w);return}if(o==="hands.started"||o==="hands.stopped"||o==="hands.failed")return;await e.forward(l,o,w)}},{...e.relayDependencies,spawnWorker:(o)=>H(f)(o.command,o.args,o.options),...B?{takePrespawnedWorker:(o)=>{let w=B.take(o);if(!w?.pid)return w;try{return K(d(f,"cgroup.procs"),String(w.pid)),w}catch{try{w.kill("SIGKILL")}catch{}return null}},adoptSpawnedWorker:B.adopt}:{}}).then(()=>{A("executor_stopped")},(o)=>{let w=o&&typeof o==="object"&&"code"in o?String(o.code):"executor_failed";h(new y(w,o instanceof Error?o.message:String(o))),A(w)}).finally(()=>h(new y("vm_hands_executor_exited","executor ended before it was ready")));a.set(l,{abort:S,done:U,exited:R,operationId:s.operation_id,runId:s.run_id,expiresAtMs:Date.parse(String(s.payload.expires_at??""))||0});let M=await I,E=M.executor_launch_id;if(typeof E!=="string")throw new y("vm_hands_bind_failed","executor ready without a launch id");return{launchId:E,readyData:M,applied:{hands_confinement:typeof s.payload.hands_confinement==="string"?s.payload.hands_confinement:null,browser_egress:s.payload.browser_egress??null}}},takeSrtFallbacks:N,executorExited(r){return a.get(r)?.exited??new Promise(()=>{})},freezeBind(r){let s=z(r);if(j(d(s,"cgroup.freeze")))K(d(s,"cgroup.freeze"),"1")},async killAndVerifyPayload(r){let s=new Set(r?.keep??[]);if(await Ce(r?.bindId??null,s,r?.own===!0),s.size)return;if((C||e.srtWarmLate?.()===!0)&&j(d(m,"cgroup.events")))b(),await te(m,Date.now()+ee,"srt"),e.onSrtReset?.();C=!1},async killProbe(){let r=Date.now()+ee;if(j(d(W,"cgroup.events"))){await te(W,r,"probe");try{ue(W)}catch{}}let s=se(process.pid);if(s===null)throw new y("vm_hands_kill_unverified","agent start time unreadable");await Ge(t,s,r);let l=(g)=>{let S=se(g);return S!==null&&S<=s},f=me(i).filter((g)=>l(g)&&!L(g,G));if(f.length)throw n("vm_hands.kill_survivors",{pids:f.slice(0,16),at:"attest"}),new y("vm_hands_kill_unverified",`${f.length} payload-uid process(es) from before this agent`);if(P!==null){let g=[t,d(t,D)].map((h)=>h.replace(/^\/sys\/fs\/cgroup/,"")),S=m.replace(/^\/sys\/fs\/cgroup/,""),_=fe(P).filter((h)=>h!==process.pid&&!L(h,G)&&!L(h,"/reason-vm-hands")&&!L(h,S)&&!g.some((I)=>ne(h,I)));if(_.length&&C)throw n("vm_hands.kill_strays",{strays:re(_),at:"attest"}),new y("vm_hands_kill_unverified",`${_.length} process(es) the run started survived it`);if(_.length)n("vm_hands.attest_concurrent",{processes:re(_),count:_.length});P=null}},async runProbe({nonce:r,script:s}){if(v(),!s.includes(de))throw new y("vm_hands_probe_failed","probe names no proof directory");let l=e.proofParent??"/tmp/reason-vm-hands-proof";V(l,{mode:457,recursive:!0});let f=q(l);if(f.isSymbolicLink()||!f.isDirectory()||f.uid!==(process.getuid?.()??-1)||(f.mode&4095)!==457)throw new y("vm_hands_probe_failed","proof parent is not root's 0711 directory");let g=De(d(l,"p-")),S=!1;try{if(!/^[A-Za-z0-9/._-]+$/.test(g)||!/^[A-Za-z0-9_-]{1,128}$/.test(r))throw new y("vm_hands_probe_failed","proof directory path or nonce");Ae(g,i,i),Ie(g,448);let _=q(g).ino;try{V(W,{mode:493})}catch(R){if(!(R&&typeof R==="object"&&("code"in R)&&R.code==="EEXIST"))throw new y("vm_hands_probe_failed","probe cgroup")}let h=H(W)("/bin/bash",["-c",s.replaceAll(de,g).replaceAll(Ue,r)],{cwd:"/",env:{PATH:"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},stdio:["ignore","pipe","ignore"]}),I="";h.stdout?.on("data",(R)=>{if(I.length<16384)I+=R.toString("utf8").slice(0,16384-I.length)});let A=await new Promise((R)=>{let U=setTimeout(()=>{S=!0,h.kill("SIGKILL"),R(124)},Be);h.once("error",()=>{clearTimeout(U),R(127)}),h.once("close",(M)=>{clearTimeout(U),R(M??1)})});return n("vm_hands.probe",{nonce_len:r.length,exit_code:A}),{exitCode:A,markers:I,proofDirInode:_}}finally{if(!S)Le(g,{recursive:!0,force:!0})}},restatLayout(r){let s=u(r),l=s===e.init.layout.session_root?e.init.layout.alias:d(s,"repo"),f="invalid";try{yr(s),f="0:0:755"}catch{}let g=!1,S=-1;try{let _=q(l);S=_.uid,g=f==="0:0:755"&&l===d(s,"repo")&&!_.isSymbolicLink()&&_.isDirectory()&&Me(l)===l&&_.uid===i}catch{}return{root_mode:f,alias_ok:g,owner_uid:S}},verifyMounts(r){let s=u(r);try{le(s,n,(l)=>new y("vm_hands_mount_mismatch",l))}catch(l){if(s!==e.init.layout.session_root&&l instanceof y&&l.code==="vm_hands_mount_mismatch"){n("vm_hands.member_mount_mismatch_served",{});return}throw l}},installEnvironment(r,s){let l=a.get(r);if(!l)throw new y("environment_unavailable","no executor owns an environment");return nt({root:e.root,operationId:l.operationId,payload:s}).installed_revision},async stop(){if(Z)clearInterval(Z);B?.close(),await Promise.all([...a.keys()].map((r)=>X(r)))}};function Re(){try{return Y(d(t,D),{withFileTypes:!0}).filter((r)=>r.isDirectory()&&/^b-[0-9a-f-]{36}$/.test(r.name)).map((r)=>r.name)}catch{return[]}}async function Ce(r,s,l=!1){let f=new Set([...s].map((S)=>S.toLowerCase())),g=Ve();try{await Ye();let S=Date.now()+ee,_=new Set(Re().filter((o)=>!f.has(o.slice(2))).map((o)=>o.slice(2)));if(r)_.add(r.toLowerCase());let h=null;for(let o of _){let w=X(o).catch(()=>{return}),Q=c.get(o);if(Q!==void 0)h=h===null?Q:Math.min(h,Q);if(j(d(z(o),"cgroup.events")))await te(z(o),S,"bind");await w}let I=[...f].map((o)=>z(o).replace(/^\/sys\/fs\/cgroup/,"")),A=["/",...[t,d(t,D)].map((o)=>o.replace(/^\/sys\/fs\/cgroup/,""))],R=m.replace(/^\/sys\/fs\/cgroup/,""),U=(o)=>L(o,G)||I.some((w)=>L(o,w))||A.some((w)=>ne(o,w)),M=l?[]:me(i).filter((o)=>!U(o));if(M.length)throw n("vm_hands.kill_survivors",{pids:M.slice(0,16),beside:f.size}),new y("vm_hands_kill_unverified",`${M.length} payload-uid process(es) outside a live bind`);let E=(o)=>!U(o)&&!L(o,"/reason-vm-hands")&&!L(o,R)&&!A.some((w)=>ne(o,w));if(h!==null){let o=fe(h).filter((w)=>w!==process.pid&&E(w));if(o.length)throw n("vm_hands.kill_strays",{strays:re(o),beside:f.size}),new y("vm_hands_kill_unverified",`${o.length} process(es) the run started survived it`)}for(let o of _)c.delete(o),Pe(o)}finally{g()}}}function se(e,t="/proc"){try{let i=k(d(t,String(e),"stat"),"utf8"),n=Number(i.slice(i.lastIndexOf(")")+2).split(" ")[19]);return Number.isFinite(n)?n:null}catch{return null}}function we(e,t="/proc"){try{let i=k(d(t,String(e),"stat"),"utf8"),n=Number(i.slice(i.lastIndexOf(")")+2).split(" ")[1]);return Number.isFinite(n)?n:null}catch{return null}}async function Ge(e,t,i){try{K(d(e,"cgroup.freeze"),"1")}catch(n){throw new y("vm_hands_kill_unverified",`payload cgroup.freeze: ${n instanceof Error?n.message:String(n)}`)}try{for(;;){let n=be(e).filter((a)=>ve(a,e)),u=new Set(n.filter((a)=>{let c=se(a);return c!==null&&c<=t}));for(let a=!0;a;){a=!1;for(let c of n){if(u.has(c))continue;let p=we(c);if(p!==null&&u.has(p))u.add(c),a=!0}}if(u.size===0)return;if(Date.now()>i)throw new y("vm_hands_kill_unverified",`${u.size} previous-boot process(es) survived`);for(let a of u)try{process.kill(a,"SIGKILL")}catch{}await new Promise((a)=>setTimeout(a,10))}}finally{try{K(d(e,"cgroup.freeze"),"0")}catch{}}}function ne(e,t,i="/proc"){try{return k(d(i,String(e),"cgroup"),"utf8").split(`
6
- `).find((u)=>u.startsWith("0::"))?.slice(3)===t}catch{return!1}}function L(e,t,i="/proc"){try{let u=k(d(i,String(e),"cgroup"),"utf8").split(`
7
- `).find((a)=>a.startsWith("0::"))?.slice(3)??"";return u===t||u.startsWith(`${t}/`)}catch{return!1}}var Ee=100;function pe(){try{return Math.floor(Number(k("/proc/uptime","utf8").split(" ")[0])*Ee)}catch{return 0}}async function te(e,t,i){try{K(d(e,"cgroup.freeze"),"1")}catch(n){throw new y("vm_hands_kill_unverified",`${i} cgroup.freeze: ${n instanceof Error?n.message:String(n)}`)}while(!/^populated 0$/m.test(k(d(e,"cgroup.events"),"utf8"))){if(Date.now()>t)throw new y("vm_hands_kill_unverified",`${i} cgroup still populated (left frozen)`);for(let n of be(e)){if(!ve(n,e))continue;try{process.kill(n,"SIGKILL")}catch{}}await new Promise((n)=>setTimeout(n,10))}try{K(d(e,"cgroup.freeze"),"0")}catch(n){throw new y("vm_hands_kill_unverified",`${i} cgroup thaw: ${n instanceof Error?n.message:String(n)}`)}}function ve(e,t){let i=t.replace(/^\/sys\/fs\/cgroup/,"")||"/",n="";try{n=k(`/proc/${e}/cgroup`,"utf8").split(`
8
- `).find((a)=>a.startsWith("0::"))??""}catch{return!1}let u=n.slice(3);return u===i||u.startsWith(`${i}/`)}function be(e){let t=[],i=(n)=>{try{for(let a of k(d(n,"cgroup.procs"),"utf8").split(`
9
- `))if(/^\d+$/.test(a))t.push(Number(a))}catch{}let u=[];try{u=Y(n,{withFileTypes:!0}).filter((a)=>a.isDirectory()).map((a)=>a.name)}catch{}for(let a of u)i(d(n,a))};return i(e),t}function re(e,t="/proc"){return e.slice(0,16).map((i)=>{let n="?",u="?";try{n=k(d(t,String(i),"comm"),"utf8").trim().slice(0,32)}catch{}try{u=(k(d(t,String(i),"cgroup"),"utf8").split(`
10
- `).find((a)=>a.startsWith("0::"))??"").slice(3,120)}catch{}return{pid:i,comm:n,ppid:we(i,t),cgroup:u}})}function fe(e,t="/proc"){let i=[];for(let n of Y(t)){if(!/^\d+$/.test(n))continue;let u;try{u=k(d(t,n,"stat"),"utf8")}catch{continue}let a=u.slice(u.lastIndexOf(")")+2).split(" "),c=Number(a[1]),p=Number(a[6]),b=Number(a[19]);if(!((p&2097152)!==0||c===2||n==="2")&&a[0]!=="Z"&&b>=e)i.push(Number(n))}return i}function me(e,t="/proc"){let i=[];for(let n of Y(t)){if(!/^\d+$/.test(n))continue;let u;try{u=k(d(t,n,"status"),"utf8")}catch{continue}let a=/^Uid:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/m.exec(u);if(a&&a.slice(1).some((c)=>Number(c)===e))i.push(Number(n))}return i}function ge(e="/proc/sys/kernel/yama/ptrace_scope"){try{return Number(k(e,"utf8").trim())>=1}catch{return!1}}var T=0,Se=[],J=new Set;function Ve(){T++;let e=!1;return()=>{if(e)return;if(e=!0,--T===0)for(let t of Se.splice(0))t()}}function Je(){return T===0?Promise.resolve():new Promise((e)=>{Se.push(e)})}async function _e(){while(T>0)await Je()}async function Ye(){let e=Date.now()+1000;while(J.size&&Date.now()<e)await new Promise((t)=>setTimeout(t,2))}function Ze(e,t){let i=t.replace(/^\/sys\/fs\/cgroup/,"");J.add(e);let n=()=>{let u="";try{u=k(`/proc/${e}/cgroup`,"utf8").split(`
11
- `).find((a)=>a.startsWith("0::"))??""}catch{J.delete(e);return}if(u.slice(3)===i){J.delete(e);return}setTimeout(n,1)};n()}function un(e){let t={person:e.personCgroup??d("/sys/fs/cgroup",G,D),model:e.payloadCgroup??d(he,D),surface:e.surfaceCgroup??d("/sys/fs/cgroup",G,D,ze)},i=e.entry??process.argv[1]??"",n={},u=(c)=>c.startsWith("model:")&&e.bindCgroup?e.bindCgroup(c.slice(6)):t[c.startsWith("model")?"model":c==="surface"?"surface":"person"],a=(c)=>{let p=c.startsWith("model")?"model":c==="surface"?"surface":"person",b=new Map,P=String(e.payloadUid),C=String(e.payloadGid);if(p==="surface")try{V(u(c),{mode:493})}catch{}let m=p==="surface"?'exec "$@"':`exec /usr/bin/setpriv --no-new-privs --reuid=${P} --regid=${C} --clear-groups -- "$@"`,v=Bun.spawn(["/bin/sh","-c",`echo $$ > ${ye(d(u(c),"cgroup.procs"))} || exit 125; ${m}`,"vm-hands-op-join",process.execPath,"--no-install",i,"--vm-hands-op-runner",...p==="person"?[or]:[],...p==="surface"?[sr,`${xt}${P}`,`${kt}${e.surfaceDirectory??""}`]:[]],{cwd:"/",env:{PATH:process.env.PATH??"/usr/bin:/bin",BUN_BE_BUN:"1",HOME:p==="surface"?process.env.HOME||"/root":"/home/runner",...j("/bin/bash")?{SHELL:"/bin/bash"}:{}},stdio:["ignore","ignore","ignore"],ipc(N){let x=N;if(p==="surface"&&x.t==="readiness"){let F=N;e.log?.("vm_hands.surface_ready",{lanes:Object.keys(F.lanes??{}).filter((W)=>F.lanes[W]===!0),display_video:F.display_video===!0}),e.onSurfaceReadiness?.(F);return}let H=b.get(x.id);if(!H)return;if(x.t==="event"&&x.event)H.onEvent(x.event);if(x.t==="done")b.delete(x.id),H.done(x.completion??{status:"failed",error_code:"vm_hands_op_failed"})}});v.exited.then((N)=>{if(n[c]?.child===v)delete n[c];for(let[,x]of b)x.done({status:"failed",error_code:"vm_hands_op_runner_exited"});if(b.clear(),e.log?.("vm_hands.op_runner_exited",{kind:p,code:N}),p==="surface")e.onSurfaceReadiness?.(null)}),Ze(v.pid,u(c));let O={child:v,pending:b};return n[c]=O,O};return{run(c,p,b,P,C){if(!ge())return Promise.resolve({status:"failed",error_code:"vm_hands_ptrace_unprotected"});let m=c==="model"&&C&&e.bindCgroup?`model:${C.toLowerCase()}`:c,v=async()=>{while(!n[m]&&T>0)await _e()};return v().then(async()=>{if(!n[m]&&T>0)await v()}).then(()=>new Promise((O)=>{if(!n[m]&&T>0){O({status:"failed",error_code:"vm_hands_op_runner_unavailable"});return}let N=n[m]??a(m);N.pending.set(p.id,{onEvent:b,done:O}),P.addEventListener("abort",()=>{try{N.child.send({t:"cancel",id:p.id})}catch{}},{once:!0});try{N.child.send({t:"op",...p})}catch{N.pending.delete(p.id),O({status:"failed",error_code:"vm_hands_op_runner_unavailable"})}}))},warm(c){if(!n[c]&&ge())_e().then(()=>{if(!n[c]&&T===0)a(c)})},notify(c,p){let b=n[c];if(!b)return!1;try{return b.child.send(p),!0}catch{return!1}},stop(){for(let c of Object.keys(n))n[c]?.child.kill()}}}export{he as VM_HANDS_PAYLOAD_CGROUP,D as VM_HANDS_PAYLOAD_JOIN,G as VM_HANDS_PERSON_CGROUP,Ue as VM_HANDS_PROBE_NONCE_TOKEN,de as VM_HANDS_PROOF_DIR_TOKEN,ze as VM_HANDS_SURFACE_JOIN,y as VmHandsExecutorError,ln as createVmHandsExecutor,un as createVmHandsOpRunners,re as describeProcesses,L as inCgroup,me as payloadUidProcesses,fe as processesStartedSince,ge as ptraceProtected,be as subtreePids,Fe as vmHandsBindCgroup,je as vmHandsSessionRoot};