@reason-machines/cli-linux-x64 0.2.421 → 0.2.424
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/reason +2 -2
- package/bin/vm-hands/api-credentials-skdwhmrz.js +2 -0
- package/bin/vm-hands/api-s23qevwq.js +2 -0
- package/bin/vm-hands/connect-cli-t0hbgm24.js +2 -0
- package/bin/vm-hands/custom-endpoint-device-46deqrq5.js +2 -0
- package/bin/vm-hands/desktop-account-nb7g2ek5.js +2 -0
- package/bin/vm-hands/device-workspace-6av4wa2e.js +2 -0
- package/bin/vm-hands/{fsevents-p3d8kd0p.js → fsevents-5c1c8fc6.js} +1 -1
- package/bin/vm-hands/hands-worker-source-wjsjw77t.js +2 -0
- package/bin/vm-hands/{index-wrw65904.js → index-0dp6x9h4.js} +18 -18
- package/bin/vm-hands/install-receipt-4sjr0jhg.js +2 -0
- package/bin/vm-hands/local-automation-6tqggav3.js +2 -0
- package/bin/vm-hands/local-capabilities-2y88qy9j.js +2 -0
- package/bin/vm-hands/local-desktop-users-2azpqr2m.js +2 -0
- package/bin/vm-hands/local-display-mac-1ddx6s3j.js +2 -0
- package/bin/vm-hands/local-display-session-av1hsfp5.js +2 -0
- package/bin/vm-hands/local-display-video-bthyfqap.js +2 -0
- package/bin/vm-hands/local-managed-process-h78vz9za.js +2 -0
- package/bin/vm-hands/local-pty-session-7hps89vj.js +2 -0
- package/bin/vm-hands/managed-runtime-brqgwtr6.js +2 -0
- package/bin/vm-hands/network-contract-8fkzm0t0.js +2 -0
- package/bin/vm-hands/package-k6jdrvn6.js +2 -0
- package/bin/vm-hands/permissions-9jtsmk94.js +2 -0
- package/bin/vm-hands/reason-hands-protocol-45dm5s53.js +2 -0
- package/bin/vm-hands/serve-service-ve6vc2wd.js +2 -0
- package/bin/vm-hands/status-b0d7e01z.js +10 -0
- package/bin/vm-hands/version-ghpq62s2.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-hbs3tpdg.js → vm-hands-entry-lite-07vak0wy.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-dsxpxqd3.js → vm-hands-entry-lite-0bh3f1ms.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-21qpxvt8.js → vm-hands-entry-lite-12rzrd95.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-pf5qtbj5.js → vm-hands-entry-lite-1f2cam25.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-gvh1qskx.js → vm-hands-entry-lite-2pvb1wqs.js} +12 -12
- package/bin/vm-hands/{vm-hands-entry-lite-np07qyeq.js → vm-hands-entry-lite-2yz6b0n3.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-nzmkyezg.js → vm-hands-entry-lite-3adw9jw3.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-3d4h1cgm.js +539 -0
- package/bin/vm-hands/{vm-hands-entry-lite-g4zd2d5n.js → vm-hands-entry-lite-3pnjdh8m.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-5dtfehjv.js → vm-hands-entry-lite-3rwtqr28.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-tdgtpx8e.js → vm-hands-entry-lite-3vmhs921.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-beyyy1gz.js → vm-hands-entry-lite-499mywh7.js} +29 -29
- package/bin/vm-hands/{vm-hands-entry-lite-ec9jemny.js → vm-hands-entry-lite-4fwf7wgb.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-m1yxqqaz.js → vm-hands-entry-lite-5e847nnc.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-6y7wsj5e.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-6c67a3jc.js → vm-hands-entry-lite-8j7p91hr.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-djg69hf4.js → vm-hands-entry-lite-8v7t1q38.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-hek6nw5m.js → vm-hands-entry-lite-99vdpqvp.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-8r31b0ps.js → vm-hands-entry-lite-9jgf223h.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-jev771b3.js → vm-hands-entry-lite-9sa1knn7.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-60pg3wxj.js → vm-hands-entry-lite-9z3v15d2.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-s5qkb1fk.js → vm-hands-entry-lite-a3w8m8nb.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-avc65bd7.js → vm-hands-entry-lite-ba3qq0bs.js} +4 -4
- package/bin/vm-hands/vm-hands-entry-lite-cm497v4t.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-2x8g6ktg.js → vm-hands-entry-lite-csn32c21.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-hk6trmwa.js → vm-hands-entry-lite-d9g1pzzx.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-s4bharcb.js → vm-hands-entry-lite-dh8f2h2d.js} +6 -6
- package/bin/vm-hands/{vm-hands-entry-lite-rfz60hb3.js → vm-hands-entry-lite-em7mk9tn.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-weqw6ykz.js → vm-hands-entry-lite-ftk544sk.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-fbhqfzbq.js → vm-hands-entry-lite-g9z467dk.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-8wf6y7xy.js → vm-hands-entry-lite-ge0w0944.js} +10 -10
- package/bin/vm-hands/{vm-hands-entry-lite-aj139v8j.js → vm-hands-entry-lite-hw26gewc.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-jzz73e3f.js → vm-hands-entry-lite-jcf61cb4.js} +5 -5
- package/bin/vm-hands/vm-hands-entry-lite-mcjca0ez.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-s1nwwtcs.js → vm-hands-entry-lite-mpxyq14w.js} +18 -18
- package/bin/vm-hands/{vm-hands-entry-lite-50zbqwkv.js → vm-hands-entry-lite-n4x7reax.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-vpz54vwj.js → vm-hands-entry-lite-njs8k65s.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-dk79tnax.js → vm-hands-entry-lite-qyp2a4c3.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-3krzmhkk.js → vm-hands-entry-lite-r7zs4ce2.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-bx5zy5bd.js → vm-hands-entry-lite-t3qf6qrj.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-wx4ax7wg.js → vm-hands-entry-lite-t5q30ne0.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-c8ga19q0.js → vm-hands-entry-lite-tj1g1vn3.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-4vks5phw.js → vm-hands-entry-lite-tqc2ezda.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-4wpqs406.js → vm-hands-entry-lite-vgedszdd.js} +9 -9
- package/bin/vm-hands/{vm-hands-entry-lite-ycnrtwdf.js → vm-hands-entry-lite-yx6t5b7k.js} +4 -4
- package/bin/vm-hands/vm-hands-entry-lite.js +2 -2
- package/bin/vm-hands/vm-hands-executor-65vx1gt3.js +11 -0
- package/bin/vm-hands/vm-hands-op-runner-ya32haj0.js +2 -0
- package/bin/vm-hands/{vm-hands-runtime-6stbsbbw.js → vm-hands-runtime-ec9x2kez.js} +3 -3
- package/bin/vm-hands/worker-preview-readiness-kmwcrttt.js +2 -0
- package/bin/vm-hands/worker-sandbox-epre0fnv.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-18d75dfn.js +0 -2
- package/bin/vm-hands/api-credentials-3vhge1ap.js +0 -2
- package/bin/vm-hands/connect-cli-5r07fda9.js +0 -2
- package/bin/vm-hands/custom-endpoint-device-17t4efc4.js +0 -2
- package/bin/vm-hands/desktop-account-6sjrxy69.js +0 -2
- package/bin/vm-hands/device-workspace-s50q53sz.js +0 -2
- package/bin/vm-hands/hands-worker-source-kddz4y15.js +0 -2
- package/bin/vm-hands/install-receipt-ysa70fvh.js +0 -2
- package/bin/vm-hands/local-automation-764g234v.js +0 -2
- package/bin/vm-hands/local-capabilities-mg6eae35.js +0 -2
- package/bin/vm-hands/local-desktop-users-cppjjr81.js +0 -2
- package/bin/vm-hands/local-display-mac-0qz3b627.js +0 -2
- package/bin/vm-hands/local-display-session-a59620te.js +0 -2
- package/bin/vm-hands/local-display-video-6zdpjv5n.js +0 -2
- package/bin/vm-hands/local-managed-process-s7j196kq.js +0 -2
- package/bin/vm-hands/local-pty-session-rpk05ap5.js +0 -2
- package/bin/vm-hands/managed-runtime-vg23x3np.js +0 -2
- package/bin/vm-hands/network-contract-trkxqc0w.js +0 -2
- package/bin/vm-hands/package-xqbhdf15.js +0 -2
- package/bin/vm-hands/permissions-zkrmth58.js +0 -2
- package/bin/vm-hands/reason-hands-protocol-xn3ddz70.js +0 -2
- package/bin/vm-hands/serve-service-y2sa6493.js +0 -2
- package/bin/vm-hands/status-6qmcgcem.js +0 -10
- package/bin/vm-hands/version-42drg7mg.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-33hwmnd3.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-7fsj5nrx.js +0 -539
- package/bin/vm-hands/vm-hands-entry-lite-z76nfb19.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-zp6naptr.js +0 -3
- package/bin/vm-hands/vm-hands-executor-957e80sb.js +0 -11
- package/bin/vm-hands/vm-hands-op-runner-65erpgzp.js +0 -2
- package/bin/vm-hands/worker-preview-readiness-w62n91kr.js +0 -2
- package/bin/vm-hands/worker-sandbox-2r5nseff.js +0 -2
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import"./vm-hands-entry-lite-4vks5phw.js";import"./vm-hands-entry-lite-3krzmhkk.js";import"./vm-hands-entry-lite-tdgtpx8e.js";import"./vm-hands-entry-lite-rfz60hb3.js";import{it,Zi,br,Ot}from"./vm-hands-entry-lite-s1nwwtcs.js";import"./vm-hands-entry-lite-hk6trmwa.js";import"./vm-hands-entry-lite-beyyy1gz.js";import"./vm-hands-entry-lite-fbhqfzbq.js";import"./vm-hands-entry-lite-fcvf8md1.js";import"./vm-hands-entry-lite-s5qkb1fk.js";import"./vm-hands-entry-lite-aj139v8j.js";import"./vm-hands-entry-lite-pf5qtbj5.js";import"./vm-hands-entry-lite-21qpxvt8.js";import{ar,cr,Ct,At}from"./vm-hands-entry-lite-c8ga19q0.js";import"./vm-hands-entry-lite-s4bharcb.js";import"./vm-hands-entry-lite-wx4ax7wg.js";import"./vm-hands-entry-lite-jev771b3.js";import"./vm-hands-entry-lite-6c67a3jc.js";import{spawn as Ae}from"child_process";import{chmodSync as De,chownSync as Me,existsSync as G,lstatSync as ne,mkdirSync as Z,mkdtempSync as Le,readdirSync as Q,readFileSync as k,realpathSync as Te,rmdirSync as te,rmSync as He,writeFileSync as j}from"fs";import{join as p}from"path";import{readFileSync as ce,readlinkSync as le}from"fs";import{relative as xe}from"path";var ue=16;function de(n){return n.replace(/\\([0-7]{3})/g,(r,i)=>String.fromCharCode(Number.parseInt(i,8)))}function Ie(n){let r=[];for(let i of n.split(`
|
|
3
|
-
`)){let e=i.split(" ");if(e.length<10||!/^\d+:\d+$/.test(e[2]))continue;r.push({device:e[2],root:de(e[3]),mountPoint:de(e[4])})}return r}function Ne(n,r,i){let e=n.replace(/\/+$/,"")||"/",c=(_)=>e==="/"||_===e||_.startsWith(`${e}/`),a=(_)=>new Map(Ie(_).filter((v)=>c(v.mountPoint)).map((v)=>[`${v.mountPoint}\x00${v.device}\x00${v.root}`,v.mountPoint])),l=a(r),m=a(i),h=(_)=>xe(e,_)||".",P=[...l].filter(([_])=>!m.has(_)).map(([,_])=>h(_)),C=[...m].filter(([_])=>!l.has(_)).map(([,_])=>h(_));return{missing:P,extra:C,referenceCount:l.size,ownCount:m.size}}function pe(n,r,i,e="/proc"){let c,a,l=null;try{c=ce(`${e}/1/mountinfo`,"utf8"),a=ce(`${e}/self/mountinfo`,"utf8")}catch(v){let N=v&&typeof v==="object"&&"code"in v&&typeof v.code==="string"?v.code:"unreadable";r("vm_hands.mount_check_unavailable",{code:N});return}try{l=le(`${e}/1/ns/mnt`)===le(`${e}/self/ns/mnt`)}catch{}let{missing:m,extra:h,referenceCount:P,ownCount:C}=Ne(n,c,a),_={reference_count:P,own_count:C,missing_count:m.length,extra_count:h.length,same_namespace:l};if(h.length)r("vm_hands.mount_extra",{..._,extra:h.slice(0,ue)});if(m.length)throw r("vm_hands.mount_mismatch",{..._,missing:m.slice(0,ue)}),i(`${m.length} mount(s) under the Session root are missing from vm-hands' namespace`)}var ve="/sys/fs/cgroup/reason-payload",D="vm-hands",ze="/run/ara-srt/fallbacks.jsonl",F="/reason-person",We="surface",re=5000,Be=1e4,fe="__VM_HANDS_PROOF_DIR__",Ue="__VM_HANDS_PROBE_NONCE__";class y extends Error{code;constructor(n,r){super(r);this.code=n}}function Fe(n,r){if(!/^[0-9a-f-]{36}$/i.test(r))throw new y("vm_hands_bind_invalid","bad bind id");return p(n,D,`b-${r.toLowerCase()}`)}var Ke=5000,be=(n)=>`'${n.replaceAll("'","'\\''")}'`;function on(n){let r=n.cgroup??ve,i=n.init.layout.payload_uid,e=n.log??(()=>{}),c=new Map,a=new Map,l=0,m=()=>{try{let t=k("/run/ara-srt/starts.jsonl","utf8"),o=t.slice(l>t.length?0:l).split(`
|
|
4
|
-
`).filter(Boolean);l=t.length;let u=o.map((f)=>{try{return Number(JSON.parse(f).elapsed_ms)||0}catch{return 0}});if(u.length)e("vm_hands.srt_server_starts",{count:u.length,elapsed_ms:u.slice(0,8)})}catch{}},h=null,P=!1,C=n.srtCgroup??"/sys/fs/cgroup/reason-srt",_=()=>{h??=ge()},v=0,N=()=>{try{let t=k(ze,"utf8"),o=t.slice(v>t.length?0:v);v=t.length;let u=o.split(`
|
|
5
|
-
`).filter(Boolean).slice(0,1000);if(!u.length)return null;let f={},g=0;for(let b of u)try{let w=JSON.parse(b),d=typeof w.code==="string"&&/^[a-z_]{1,40}$/.test(w.code)?w.code:"other";if(f[d]=(f[d]??0)+1,typeof w.elapsed_ms==="number")g=Math.max(g,w.elapsed_ms)}catch{f.unparsed=(f.unparsed??0)+1}return e("vm_hands.srt_fallbacks",{count:u.length,codes:f,max_elapsed_ms:g}),{count:u.length,codes:f,max_elapsed_ms:g}}catch{return null}},O=!1,I=(t,o,u)=>{if(O)throw Error("vm_hands_pool_held");return K(t,o,u)},z=(t)=>(o,u,f)=>Ae("/bin/sh",["-c",`echo $$ > ${be(p(t,"cgroup.procs"))} || exit 125; exec "$@"`,"vm-hands-join",o,...u],f),K=z(p(r,D)),W=p(r,D,"probe"),B=(t)=>Fe(r,t),Ce=(t)=>{let o=B(t);try{Z(o,{mode:493})}catch(u){if(!(u&&typeof u==="object"&&("code"in u)&&u.code==="EEXIST"))throw new y("vm_hands_bind_failed","bind cgroup")}return o},Oe=(t)=>{try{te(B(t))}catch{}},M=n.prespawn?Zi({spawnProcess:I,...n.relayDependencies?.sourceEntrypoint?{sourceEntrypoint:n.relayDependencies.sourceEntrypoint}:{},log:(t,o)=>e(t,o??{})}):null;M?.arm();let q=M?setInterval(()=>{M.arm()},Ke):null;q?.unref?.();async function E(t){let o=c.get(t);if(c.delete(t),!o)return;o.abort.abort(),await o.done}return{bindCgroup:B,async startExecutor(t){if(_(),a.set(t.bindId,ge()),P=!0,!t.claim)throw new y("vm_hands_bind_invalid","an executor needs the claim it serves");await E(t.bindId);let{claim:o,bindId:u}=t,f=Ce(u),g=o.owner;if(!g||typeof g.device_id!=="string"||typeof o.root_id!=="string")throw new y("vm_hands_bind_invalid","claim without its owner Device or root");let b=new AbortController,w,d,x=new Promise((s,S)=>{w=s,d=S}),L,R=new Promise((s)=>{L=s}),U=Ot({headless:!0,hostExecution:!0,runtimeDirectory:n.runtimeDirectory,deviceIdentity:{deviceId:g.device_id,rootId:o.root_id,apiOrigin:n.apiOrigin},claimOwner:o.owner,root:n.root,runId:o.run_id,operationId:o.operation_id,attemptId:o.attempt_id,payload:Object.fromEntries(Object.entries(o.payload).filter(([s])=>!s.startsWith("vm_hands_"))),signal:b.signal,...t.workspaceGrant?{workspaceGrant:t.workspaceGrant}:{},emitEvent:async(s,S)=>{if(s==="hands.ready"){w(S);return}if(s==="hands.started"||s==="hands.stopped"||s==="hands.failed")return;await n.forward(u,s,S)}},{...n.relayDependencies,spawnWorker:(s)=>z(f)(s.command,s.args,s.options),...M?{takePrespawnedWorker:(s)=>{let S=M.take(s);if(!S?.pid)return S;try{return j(p(f,"cgroup.procs"),String(S.pid)),S}catch{try{S.kill("SIGKILL")}catch{}return null}},adoptSpawnedWorker:M.adopt}:{}}).then(()=>{L("executor_stopped")},(s)=>{let S=s&&typeof s==="object"&&"code"in s?String(s.code):"executor_failed";d(new y(S,s instanceof Error?s.message:String(s))),L(S)}).finally(()=>d(new y("vm_hands_executor_exited","executor ended before it was ready")));c.set(u,{abort:b,done:U,exited:R,operationId:o.operation_id,runId:o.run_id,expiresAtMs:Date.parse(String(o.payload.expires_at??""))||0});let T=await x,V=T.executor_launch_id;if(typeof V!=="string")throw new y("vm_hands_bind_failed","executor ready without a launch id");return{launchId:V,readyData:T,applied:{hands_confinement:typeof o.payload.hands_confinement==="string"?o.payload.hands_confinement:null,browser_egress:o.payload.browser_egress??null}}},takeSrtFallbacks:N,executorExited(t){return c.get(t)?.exited??new Promise(()=>{})},freezeBind(t){let o=B(t);if(G(p(o,"cgroup.freeze")))j(p(o,"cgroup.freeze"),"1")},async killAndVerifyPayload(t){let o=new Set(t?.keep??[]);if(o.size||t?.own)return $e(t?.bindId??null,o,t?.own===!0);O=!0;let u=he();try{await we();let f=Promise.all([...c.keys()].map((d)=>E(d).catch(()=>{return})));m();let g=Date.now()+re;await J(r,g,"payload"),await f;let b=(P||n.srtWarmLate?.()===!0)&&G(p(C,"cgroup.events"));if(b)await J(C,g,"srt");let w=oe(i).filter((d)=>!A(d,F));if(h!==null){let d=se(h).filter((x)=>x!==process.pid&&!A(x,F));if(d.length)throw e("vm_hands.kill_strays",{strays:Y(d)}),new y("vm_hands_kill_unverified",`${d.length} process(es) the run started survived it`);h=null}if(P=!1,b)n.onSrtReset?.();if(w.length)throw e("vm_hands.kill_survivors",{pids:w.slice(0,16)}),new y("vm_hands_kill_unverified",`${w.length} payload-uid process(es) outside the payload cgroup`);a.clear();for(let d of ae())try{te(p(r,D,d))}catch{}}finally{O=!1,u()}if(M)setTimeout(()=>{if(!c.size)M.arm()},100).unref?.()},async killProbe(){let t=Date.now()+re;if(G(p(W,"cgroup.events"))){await J(W,t,"probe");try{te(W)}catch{}}let o=ie(process.pid);if(o===null)throw new y("vm_hands_kill_unverified","agent start time unreadable");await je(r,o,t);let u=(g)=>{let b=ie(g);return b!==null&&b<=o},f=oe(i).filter((g)=>u(g)&&!A(g,F));if(f.length)throw e("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(h!==null){let g=[r,p(r,D)].map((d)=>d.replace(/^\/sys\/fs\/cgroup/,"")),b=C.replace(/^\/sys\/fs\/cgroup/,""),w=se(h).filter((d)=>d!==process.pid&&!A(d,F)&&!A(d,"/reason-vm-hands")&&!A(d,b)&&!g.some((x)=>me(d,x)));if(w.length&&P)throw e("vm_hands.kill_strays",{strays:Y(w),at:"attest"}),new y("vm_hands_kill_unverified",`${w.length} process(es) the run started survived it`);if(w.length)e("vm_hands.attest_concurrent",{processes:Y(w),count:w.length});h=null}},async runProbe({nonce:t,script:o}){if(_(),!o.includes(fe))throw new y("vm_hands_probe_failed","probe names no proof directory");let u=n.proofParent??"/tmp/reason-vm-hands-proof";Z(u,{mode:457,recursive:!0});let f=ne(u);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=Le(p(u,"p-")),b=!1;try{if(!/^[A-Za-z0-9/._-]+$/.test(g)||!/^[A-Za-z0-9_-]{1,128}$/.test(t))throw new y("vm_hands_probe_failed","proof directory path or nonce");Me(g,i,i),De(g,448);let w=ne(g).ino;try{Z(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 d=z(W)("/bin/bash",["-c",o.replaceAll(fe,g).replaceAll(Ue,t)],{cwd:"/",env:{PATH:"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},stdio:["ignore","pipe","ignore"]}),x="";d.stdout?.on("data",(R)=>{if(x.length<16384)x+=R.toString("utf8").slice(0,16384-x.length)});let L=await new Promise((R)=>{let U=setTimeout(()=>{b=!0,d.kill("SIGKILL"),R(124)},Be);d.once("error",()=>{clearTimeout(U),R(127)}),d.once("close",(T)=>{clearTimeout(U),R(T??1)})});return e("vm_hands.probe",{nonce_len:t.length,exit_code:L}),{exitCode:L,markers:x,proofDirInode:w}}finally{if(!b)He(g,{recursive:!0,force:!0})}},restatLayout(){let{session_root:t,alias:o}=n.init.layout,u="invalid";try{br(t),u="0:0:755"}catch{}let f=!1,g=-1;try{let b=ne(o);g=b.uid,f=u==="0:0:755"&&o===p(t,"repo")&&!b.isSymbolicLink()&&b.isDirectory()&&Te(o)===o&&b.uid===i}catch{}return{root_mode:u,alias_ok:f,owner_uid:g}},verifyMounts(){pe(n.init.layout.session_root,e,(t)=>new y("vm_hands_mount_mismatch",t))},installEnvironment(t,o){let u=c.get(t);if(!u)throw new y("environment_unavailable","no executor owns an environment");return it({root:n.root,operationId:u.operationId,payload:o}).installed_revision},async stop(){if(q)clearInterval(q);M?.close(),await Promise.all([...c.keys()].map((t)=>E(t)))}};function ae(){try{return Q(p(r,D),{withFileTypes:!0}).filter((t)=>t.isDirectory()&&/^b-[0-9a-f-]{36}$/.test(t.name)).map((t)=>t.name)}catch{return[]}}async function $e(t,o,u=!1){let f=new Set([...o].map((b)=>b.toLowerCase())),g=he();try{await we();let b=Date.now()+re,w=new Set(ae().filter((s)=>!f.has(s.slice(2))).map((s)=>s.slice(2)));if(t)w.add(t.toLowerCase());let d=null;for(let s of w){let S=E(s).catch(()=>{return}),ee=a.get(s);if(ee!==void 0)d=d===null?ee:Math.min(d,ee);if(G(p(B(s),"cgroup.events")))await J(B(s),b,"bind");await S}let x=[...f].map((s)=>B(s).replace(/^\/sys\/fs\/cgroup/,"")),L=[r,p(r,D)].map((s)=>s.replace(/^\/sys\/fs\/cgroup/,"")),R=C.replace(/^\/sys\/fs\/cgroup/,""),U=(s)=>A(s,F)||x.some((S)=>A(s,S)),T=u?[]:oe(i).filter((s)=>!U(s));if(T.length)throw e("vm_hands.kill_survivors",{pids:T.slice(0,16),beside:f.size}),new y("vm_hands_kill_unverified",`${T.length} payload-uid process(es) outside a live bind`);let V=(s)=>!U(s)&&!A(s,"/reason-vm-hands")&&!A(s,R)&&!L.some((S)=>me(s,S));if(d!==null){let s=se(d).filter((S)=>S!==process.pid&&V(S));if(s.length)throw e("vm_hands.kill_strays",{strays:Y(s),beside:f.size}),new y("vm_hands_kill_unverified",`${s.length} process(es) the run started survived it`)}for(let s of w)a.delete(s),Oe(s)}finally{g()}}}function ie(n,r="/proc"){try{let i=k(p(r,String(n),"stat"),"utf8"),e=Number(i.slice(i.lastIndexOf(")")+2).split(" ")[19]);return Number.isFinite(e)?e:null}catch{return null}}function Se(n,r="/proc"){try{let i=k(p(r,String(n),"stat"),"utf8"),e=Number(i.slice(i.lastIndexOf(")")+2).split(" ")[1]);return Number.isFinite(e)?e:null}catch{return null}}async function je(n,r,i){try{j(p(n,"cgroup.freeze"),"1")}catch(e){throw new y("vm_hands_kill_unverified",`payload cgroup.freeze: ${e instanceof Error?e.message:String(e)}`)}try{for(;;){let e=Pe(n).filter((a)=>ke(a,n)),c=new Set(e.filter((a)=>{let l=ie(a);return l!==null&&l<=r}));for(let a=!0;a;){a=!1;for(let l of e){if(c.has(l))continue;let m=Se(l);if(m!==null&&c.has(m))c.add(l),a=!0}}if(c.size===0)return;if(Date.now()>i)throw new y("vm_hands_kill_unverified",`${c.size} previous-boot process(es) survived`);for(let a of c)try{process.kill(a,"SIGKILL")}catch{}await new Promise((a)=>setTimeout(a,10))}}finally{try{j(p(n,"cgroup.freeze"),"0")}catch{}}}function me(n,r,i="/proc"){try{return k(p(i,String(n),"cgroup"),"utf8").split(`
|
|
6
|
-
`).find((c)=>c.startsWith("0::"))?.slice(3)===r}catch{return!1}}function A(n,r,i="/proc"){try{let c=k(p(i,String(n),"cgroup"),"utf8").split(`
|
|
7
|
-
`).find((a)=>a.startsWith("0::"))?.slice(3)??"";return c===r||c.startsWith(`${r}/`)}catch{return!1}}var Ge=100;function ge(){try{return Math.floor(Number(k("/proc/uptime","utf8").split(" ")[0])*Ge)}catch{return 0}}async function J(n,r,i){try{j(p(n,"cgroup.freeze"),"1")}catch(e){throw new y("vm_hands_kill_unverified",`${i} cgroup.freeze: ${e instanceof Error?e.message:String(e)}`)}while(!/^populated 0$/m.test(k(p(n,"cgroup.events"),"utf8"))){if(Date.now()>r)throw new y("vm_hands_kill_unverified",`${i} cgroup still populated (left frozen)`);for(let e of Pe(n)){if(!ke(e,n))continue;try{process.kill(e,"SIGKILL")}catch{}}await new Promise((e)=>setTimeout(e,10))}try{j(p(n,"cgroup.freeze"),"0")}catch(e){throw new y("vm_hands_kill_unverified",`${i} cgroup thaw: ${e instanceof Error?e.message:String(e)}`)}}function ke(n,r){let i=r.replace(/^\/sys\/fs\/cgroup/,"")||"/",e="";try{e=k(`/proc/${n}/cgroup`,"utf8").split(`
|
|
8
|
-
`).find((a)=>a.startsWith("0::"))??""}catch{return!1}let c=e.slice(3);return c===i||c.startsWith(`${i}/`)}function Pe(n){let r=[],i=(e)=>{try{for(let a of k(p(e,"cgroup.procs"),"utf8").split(`
|
|
9
|
-
`))if(/^\d+$/.test(a))r.push(Number(a))}catch{}let c=[];try{c=Q(e,{withFileTypes:!0}).filter((a)=>a.isDirectory()).map((a)=>a.name)}catch{}for(let a of c)i(p(e,a))};return i(n),r}function Y(n,r="/proc"){return n.slice(0,16).map((i)=>{let e="?",c="?";try{e=k(p(r,String(i),"comm"),"utf8").trim().slice(0,32)}catch{}try{c=(k(p(r,String(i),"cgroup"),"utf8").split(`
|
|
10
|
-
`).find((a)=>a.startsWith("0::"))??"").slice(3,120)}catch{}return{pid:i,comm:e,ppid:Se(i,r),cgroup:c}})}function se(n,r="/proc"){let i=[];for(let e of Q(r)){if(!/^\d+$/.test(e))continue;let c;try{c=k(p(r,e,"stat"),"utf8")}catch{continue}let a=c.slice(c.lastIndexOf(")")+2).split(" "),l=Number(a[1]),m=Number(a[6]),h=Number(a[19]);if(!((m&2097152)!==0||l===2||e==="2")&&a[0]!=="Z"&&h>=n)i.push(Number(e))}return i}function oe(n,r="/proc"){let i=[];for(let e of Q(r)){if(!/^\d+$/.test(e))continue;let c;try{c=k(p(r,e,"status"),"utf8")}catch{continue}let a=/^Uid:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/m.exec(c);if(a&&a.slice(1).some((l)=>Number(l)===n))i.push(Number(e))}return i}function _e(n="/proc/sys/kernel/yama/ptrace_scope"){try{return Number(k(n,"utf8").trim())>=1}catch{return!1}}var H=0,Re=[],X=new Set;function he(){H++;let n=!1;return()=>{if(n)return;if(n=!0,--H===0)for(let r of Re.splice(0))r()}}function Ee(){return H===0?Promise.resolve():new Promise((n)=>{Re.push(n)})}async function ye(){while(H>0)await Ee()}async function we(){let n=Date.now()+1000;while(X.size&&Date.now()<n)await new Promise((r)=>setTimeout(r,2))}function Ve(n,r){let i=r.replace(/^\/sys\/fs\/cgroup/,"");X.add(n);let e=()=>{let c="";try{c=k(`/proc/${n}/cgroup`,"utf8").split(`
|
|
11
|
-
`).find((a)=>a.startsWith("0::"))??""}catch{X.delete(n);return}if(c.slice(3)===i){X.delete(n);return}setTimeout(e,1)};e()}function an(n){let r={person:n.personCgroup??p("/sys/fs/cgroup",F,D),model:n.payloadCgroup??p(ve,D),surface:n.surfaceCgroup??p("/sys/fs/cgroup",F,D,We)},i=n.entry??process.argv[1]??"",e={},c=(l)=>l.startsWith("model:")&&n.bindCgroup?n.bindCgroup(l.slice(6)):r[l.startsWith("model")?"model":l==="surface"?"surface":"person"],a=(l)=>{let m=l.startsWith("model")?"model":l==="surface"?"surface":"person",h=new Map,P=String(n.payloadUid),C=String(n.payloadGid);if(m==="surface")try{Z(c(l),{mode:493})}catch{}let _=m==="surface"?'exec "$@"':`exec /usr/bin/setpriv --no-new-privs --reuid=${P} --regid=${C} --clear-groups -- "$@"`,v=Bun.spawn(["/bin/sh","-c",`echo $$ > ${be(p(c(l),"cgroup.procs"))} || exit 125; ${_}`,"vm-hands-op-join",process.execPath,"--no-install",i,"--vm-hands-op-runner",...m==="person"?[ar]:[],...m==="surface"?[cr,`${Ct}${P}`,`${At}${n.surfaceDirectory??""}`]:[]],{cwd:"/",env:{PATH:process.env.PATH??"/usr/bin:/bin",BUN_BE_BUN:"1",HOME:m==="surface"?process.env.HOME||"/root":"/home/runner",...G("/bin/bash")?{SHELL:"/bin/bash"}:{}},stdio:["ignore","ignore","ignore"],ipc(O){let I=O;if(m==="surface"&&I.t==="readiness"){let K=O;n.log?.("vm_hands.surface_ready",{lanes:Object.keys(K.lanes??{}).filter((W)=>K.lanes[W]===!0),display_video:K.display_video===!0}),n.onSurfaceReadiness?.(K);return}let z=h.get(I.id);if(!z)return;if(I.t==="event"&&I.event)z.onEvent(I.event);if(I.t==="done")h.delete(I.id),z.done(I.completion??{status:"failed",error_code:"vm_hands_op_failed"})}});v.exited.then((O)=>{if(e[l]?.child===v)delete e[l];for(let[,I]of h)I.done({status:"failed",error_code:"vm_hands_op_runner_exited"});if(h.clear(),n.log?.("vm_hands.op_runner_exited",{kind:m,code:O}),m==="surface")n.onSurfaceReadiness?.(null)}),Ve(v.pid,c(l));let N={child:v,pending:h};return e[l]=N,N};return{run(l,m,h,P,C){if(!_e())return Promise.resolve({status:"failed",error_code:"vm_hands_ptrace_unprotected"});let _=l==="model"&&C&&n.bindCgroup?`model:${C.toLowerCase()}`:l,v=async()=>{while(!e[_]&&H>0)await ye()};return v().then(async()=>{if(!e[_]&&H>0)await v()}).then(()=>new Promise((N)=>{if(!e[_]&&H>0){N({status:"failed",error_code:"vm_hands_op_runner_unavailable"});return}let O=e[_]??a(_);O.pending.set(m.id,{onEvent:h,done:N}),P.addEventListener("abort",()=>{try{O.child.send({t:"cancel",id:m.id})}catch{}},{once:!0});try{O.child.send({t:"op",...m})}catch{O.pending.delete(m.id),N({status:"failed",error_code:"vm_hands_op_runner_unavailable"})}}))},warm(l){if(!e[l]&&_e())ye().then(()=>{if(!e[l]&&H===0)a(l)})},notify(l,m){let h=e[l];if(!h)return!1;try{return h.child.send(m),!0}catch{return!1}},stop(){for(let l of Object.keys(e))e[l]?.child.kill()}}}export{ve as VM_HANDS_PAYLOAD_CGROUP,D as VM_HANDS_PAYLOAD_JOIN,F as VM_HANDS_PERSON_CGROUP,Ue as VM_HANDS_PROBE_NONCE_TOKEN,fe as VM_HANDS_PROOF_DIR_TOKEN,We as VM_HANDS_SURFACE_JOIN,y as VmHandsExecutorError,on as createVmHandsExecutor,an as createVmHandsOpRunners,Y as describeProcesses,A as inCgroup,oe as payloadUidProcesses,se as processesStartedSince,_e as ptraceProtected,Pe as subtreePids,Fe as vmHandsBindCgroup};
|