@reason-machines/cli-linux-arm64-musl 0.2.277 → 0.2.279

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 (55) hide show
  1. package/bin/ara +1 -1
  2. package/bin/vm-hands/connect-cli-m9tjjyvr.js +2 -0
  3. package/bin/vm-hands/custom-endpoint-device-92914wyp.js +2 -0
  4. package/bin/vm-hands/desktop-account-vsrtgkk9.js +2 -0
  5. package/bin/vm-hands/desktop-wallpaper-0pjhgyfk.jpg +0 -0
  6. package/bin/vm-hands/device-workspace-zk5xwd10.js +2 -0
  7. package/bin/vm-hands/dock-browser-afp005mt.png +0 -0
  8. package/bin/vm-hands/dock-files-rywdm96b.png +0 -0
  9. package/bin/vm-hands/dock-terminal-s41cj1jp.png +0 -0
  10. package/bin/vm-hands/hands-worker-source-da93x0qx.js +2 -0
  11. package/bin/vm-hands/index-w9nq2f0p.js +12818 -0
  12. package/bin/vm-hands/local-automation-v1egrx6g.js +2 -0
  13. package/bin/vm-hands/local-capabilities-jpyj1dh1.js +2 -0
  14. package/bin/vm-hands/local-desktop-users-3j79jbyp.js +2 -0
  15. package/bin/vm-hands/local-display-mac-j1v3mcgx.js +2 -0
  16. package/bin/vm-hands/local-display-session-hmqaj491.js +2 -0
  17. package/bin/vm-hands/network-contract-41qanjhp.js +2 -0
  18. package/bin/vm-hands/package-rx9y4bwe.js +2 -0
  19. package/bin/vm-hands/permissions-wbdkvw1s.js +2 -0
  20. package/bin/vm-hands/reason-hands-protocol-51gs8j7v.js +2 -0
  21. package/bin/vm-hands/status-pxc0vwbt.js +96 -0
  22. package/bin/vm-hands/version-n43gjzwa.js +2 -0
  23. package/bin/vm-hands/vm-hands-entry-lite-01dd716a.js +3 -0
  24. package/bin/vm-hands/vm-hands-entry-lite-1hwdab4e.js +3 -0
  25. package/bin/vm-hands/vm-hands-entry-lite-22f3c914.js +43 -0
  26. package/bin/vm-hands/vm-hands-entry-lite-2s3w4m10.js +529 -0
  27. package/bin/vm-hands/vm-hands-entry-lite-65pbrs1x.js +3 -0
  28. package/bin/vm-hands/vm-hands-entry-lite-6tpswr2c.js +459 -0
  29. package/bin/vm-hands/vm-hands-entry-lite-7gh1rbn7.js +3 -0
  30. package/bin/vm-hands/vm-hands-entry-lite-84aq8d12.js +3 -0
  31. package/bin/vm-hands/vm-hands-entry-lite-9jfh56xt.js +343 -0
  32. package/bin/vm-hands/vm-hands-entry-lite-9pmag2qk.js +3 -0
  33. package/bin/vm-hands/vm-hands-entry-lite-anaydk9m.js +4 -0
  34. package/bin/vm-hands/vm-hands-entry-lite-bfwf82rw.js +5 -0
  35. package/bin/vm-hands/vm-hands-entry-lite-bwt3y6wz.js +3 -0
  36. package/bin/vm-hands/vm-hands-entry-lite-c2nrar90.js +4046 -0
  37. package/bin/vm-hands/vm-hands-entry-lite-cq7qt28m.js +179 -0
  38. package/bin/vm-hands/vm-hands-entry-lite-ffg7rf02.js +3 -0
  39. package/bin/vm-hands/vm-hands-entry-lite-fraghb8k.js +5 -0
  40. package/bin/vm-hands/vm-hands-entry-lite-g7faacwr.js +3 -0
  41. package/bin/vm-hands/vm-hands-entry-lite-gqncr2j0.js +42 -0
  42. package/bin/vm-hands/vm-hands-entry-lite-k4c504n7.js +3 -0
  43. package/bin/vm-hands/vm-hands-entry-lite-n07kxrd1.js +3 -0
  44. package/bin/vm-hands/vm-hands-entry-lite-ptmqg51y.js +4 -0
  45. package/bin/vm-hands/vm-hands-entry-lite-qdz95cmv.js +759 -0
  46. package/bin/vm-hands/vm-hands-entry-lite-qvrnx0vk.js +4 -0
  47. package/bin/vm-hands/vm-hands-entry-lite-s2xydt0n.js +112 -0
  48. package/bin/vm-hands/vm-hands-entry-lite-s5qn1k80.js +4 -0
  49. package/bin/vm-hands/vm-hands-entry-lite-sv6xwe0h.js +66 -0
  50. package/bin/vm-hands/vm-hands-entry-lite.js +2 -0
  51. package/bin/vm-hands/vm-hands-executor-xg99mezq.js +9 -0
  52. package/bin/vm-hands/vm-hands-op-runner-b0xkges8.js +2 -0
  53. package/bin/vm-hands/vm-hands-runtime-gnbcsqcy.js +4 -0
  54. package/bin/vm-hands/worker-sandbox-nnce49w0.js +2 -0
  55. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ import"./vm-hands-entry-lite-fraghb8k.js";import"./vm-hands-entry-lite-gqncr2j0.js";import"./vm-hands-entry-lite-sv6xwe0h.js";import{Kh as A}from"./vm-hands-entry-lite-7gh1rbn7.js";import{readFileSync as J}from"fs";var G=performance.now();delete process.env.BUN_BE_BUN;var q=(j,b={})=>console.log(JSON.stringify({stage:j,ms:Math.round(performance.now()),...b}));async function K(){if(process.argv.includes("--vm-hands-op-runner")){let{runVmHandsOpRunner:D}=await import("./vm-hands-op-runner-b0xkges8.js");await D();return}q("parsed",{t0:Math.round(G)});let j="";try{j=J(3,"utf8")}catch{}q("fd3_read",{bytes:j.length});let b=null;if(j.trim())try{b=JSON.parse(j)}catch{b=null}if(!b||typeof b!=="object"||Array.isArray(b))q(j.trim()?"identity_invalid":"identity_free"),await new Promise(()=>{setInterval(()=>{return},1073741824)});let{parseVmHandsInit:B,runVmHands:C}=await import("./vm-hands-runtime-gnbcsqcy.js"),z=B(b);if(!z)q("identity_invalid"),await new Promise(()=>{setInterval(()=>{return},1073741824)});await C(z,q),process.exit(0)}K();
@@ -0,0 +1,9 @@
1
+ // @bun
2
+ import{Ka as s,ob as i,qa as t,sb as n}from"./vm-hands-entry-lite-6tpswr2c.js";import"./vm-hands-entry-lite-c2nrar90.js";import"./vm-hands-entry-lite-qvrnx0vk.js";import"./vm-hands-entry-lite-n07kxrd1.js";import"./vm-hands-entry-lite-gqncr2j0.js";import"./vm-hands-entry-lite-sv6xwe0h.js";import"./vm-hands-entry-lite-bfwf82rw.js";import"./vm-hands-entry-lite-ptmqg51y.js";import"./vm-hands-entry-lite-s5qn1k80.js";import"./vm-hands-entry-lite-9pmag2qk.js";import"./vm-hands-entry-lite-84aq8d12.js";import"./vm-hands-entry-lite-g7faacwr.js";import"./vm-hands-entry-lite-anaydk9m.js";import"./vm-hands-entry-lite-ffg7rf02.js";import"./vm-hands-entry-lite-7gh1rbn7.js";import{spawn as Zq}from"child_process";import{chmodSync as $q,chownSync as zq,existsSync as Qq,lstatSync as S,mkdirSync as Wq,mkdtempSync as Gq,readdirSync as m,readFileSync as F,realpathSync as Jq,rmSync as Yq,writeFileSync as u}from"fs";import{join as U}from"path";var o="/sys/fs/cgroup/reason-payload",k="vm-hands",Kq="/run/ara-srt/fallbacks.jsonl",E="/reason-person",Bq=5000,bq=1e4,c="__VM_HANDS_PROOF_DIR__",Tq="__VM_HANDS_PROBE_NONCE__";class L extends Error{code;constructor(q,W){super(W);this.code=q}}var Lq=30000,e=(q)=>`'${q.replaceAll("'","'\\''")}'`;function xq(q){let W=q.cgroup??o,J=q.init.layout.payload_uid,X=q.log??(()=>{}),Q=null,Z=0,T=()=>{try{let z=F("/run/ara-srt/starts.jsonl","utf8"),$=z.slice(Z>z.length?0:Z).split(`
3
+ `).filter(Boolean);Z=z.length;let G=$.map((Y)=>{try{return Number(JSON.parse(Y).elapsed_ms)||0}catch{return 0}});if(G.length)X("vm_hands.srt_server_starts",{count:G.length,elapsed_ms:G.slice(0,8)})}catch{}},j=null,D=!1,C=q.srtCgroup??"/sys/fs/cgroup/reason-srt",R=()=>{j??=Iq()},N=0,A=()=>{try{let z=F(Kq,"utf8"),$=z.slice(N>z.length?0:N);N=z.length;let G=$.split(`
4
+ `).filter(Boolean).slice(0,1000);if(!G.length)return null;let Y={},K=0;for(let b of G)try{let M=JSON.parse(b),I=typeof M.code==="string"&&/^[a-z_]{1,40}$/.test(M.code)?M.code:"other";if(Y[I]=(Y[I]??0)+1,typeof M.elapsed_ms==="number")K=Math.max(K,M.elapsed_ms)}catch{Y.unparsed=(Y.unparsed??0)+1}return X("vm_hands.srt_fallbacks",{count:G.length,codes:Y,max_elapsed_ms:K}),{count:G.length,codes:Y,max_elapsed_ms:K}}catch{return null}},v=!1,qq=(z,$,G)=>{if(v)throw Error("vm_hands_pool_held");return H(z,$,G)},H=(z,$,G)=>Zq("/bin/sh",["-c",`echo $$ > ${e(U(W,k,"cgroup.procs"))} || exit 125; exec "$@"`,"vm-hands-join",z,...$],G),Xq=(z)=>H(z.command,z.args,z.options),P=q.prespawn?s({spawnProcess:qq,...q.relayDependencies?.sourceEntrypoint?{sourceEntrypoint:q.relayDependencies.sourceEntrypoint}:{},log:(z,$)=>X(z,$??{})}):null;P?.arm();let h=P?setInterval(()=>{if(!Q)P.arm()},Lq):null;h?.unref?.();async function y(){let z=Q;if(Q=null,!z)return;z.abort.abort(),await z.done}return{async startExecutor(z){if(R(),D=!0,!z.claim)throw new L("vm_hands_bind_invalid","an executor needs the claim it serves");await y();let $=z.claim,G=$.owner;if(!G||typeof G.device_id!=="string"||typeof $.root_id!=="string")throw new L("vm_hands_bind_invalid","claim without its owner Device or root");let Y=new AbortController,K,b,M=new Promise((B,O)=>{K=B,b=O}),I,w=new Promise((B)=>{I=B}),g=n({headless:!0,hostExecution:!0,runtimeDirectory:q.runtimeDirectory,deviceIdentity:{deviceId:G.device_id,rootId:$.root_id,apiOrigin:q.apiOrigin},claimOwner:$.owner,root:q.root,runId:$.run_id,operationId:$.operation_id,attemptId:$.attempt_id,payload:Object.fromEntries(Object.entries($.payload).filter(([B])=>!B.startsWith("vm_hands_"))),signal:Y.signal,emitEvent:async(B,O)=>{if(B==="hands.ready"){K(O);return}if(B==="hands.started"||B==="hands.stopped"||B==="hands.failed")return;await q.forward(B,O)}},{...q.relayDependencies,spawnWorker:Xq,...P?{takePrespawnedWorker:P.take,adoptSpawnedWorker:P.adopt}:{}}).then(()=>{I("executor_stopped")},(B)=>{let O=B&&typeof B==="object"&&"code"in B?String(B.code):"executor_failed";b(new L(O,B instanceof Error?B.message:String(B))),I(O)}).finally(()=>b(new L("vm_hands_executor_exited","executor ended before it was ready")));Q={abort:Y,done:g,exited:w,operationId:$.operation_id,runId:$.run_id,expiresAtMs:Date.parse(String($.payload.expires_at??""))||0};let V=await M,x=V.executor_launch_id;if(typeof x!=="string")throw new L("vm_hands_bind_failed","executor ready without a launch id");return{launchId:x,readyData:V,applied:{hands_confinement:typeof $.payload.hands_confinement==="string"?$.payload.hands_confinement:null,browser_egress:$.payload.browser_egress??null}}},takeSrtFallbacks:A,executorExited(){return Q?Q.exited:new Promise(()=>{})},async killAndVerifyPayload(){v=!0;let z=Aq();try{await Dq(),await y().catch(()=>{return}),T();let $=Date.now()+Bq;await p(W,$,"payload");let G=(D||q.srtWarmLate?.()===!0)&&Qq(U(C,"cgroup.events"));if(G)await p(C,$,"srt");let Y=Cq(J).filter((K)=>!l(K,E));if(j!==null){let K=Mq(j).filter((b)=>b!==process.pid&&!l(b,E));if(K.length)throw X("vm_hands.kill_strays",{strays:K.slice(0,16).map((b)=>{let M="?",I="?";try{M=F(`/proc/${b}/comm`,"utf8").trim().slice(0,32)}catch{}try{I=(F(`/proc/${b}/cgroup`,"utf8").split(`
5
+ `).find((w)=>w.startsWith("0::"))??"").slice(3,80)}catch{}return{pid:b,comm:M,cgroup:I}})}),new L("vm_hands_kill_unverified",`${K.length} process(es) the run started survived it`);j=null}if(D=!1,G)q.onSrtReset?.();if(Y.length)throw X("vm_hands.kill_survivors",{pids:Y.slice(0,16)}),new L("vm_hands_kill_unverified",`${Y.length} payload-uid process(es) outside the payload cgroup`)}finally{v=!1,z()}if(P)setTimeout(()=>{if(!Q)P.arm()},100).unref?.()},async runProbe({nonce:z,script:$}){if(R(),!$.includes(c))throw new L("vm_hands_probe_failed","probe names no proof directory");let G=q.proofParent??"/tmp/reason-vm-hands-proof";Wq(G,{mode:457,recursive:!0});let Y=S(G);if(Y.isSymbolicLink()||!Y.isDirectory()||Y.uid!==(process.getuid?.()??-1)||(Y.mode&4095)!==457)throw new L("vm_hands_probe_failed","proof parent is not root's 0711 directory");let K=Gq(U(G,"p-")),b=!1;try{if(!/^[A-Za-z0-9/._-]+$/.test(K)||!/^[A-Za-z0-9_-]{1,128}$/.test(z))throw new L("vm_hands_probe_failed","proof directory path or nonce");zq(K,J,J),$q(K,448);let M=S(K).ino,I=H("/bin/bash",["-c",$.replaceAll(c,K).replaceAll(Tq,z)],{cwd:"/",env:{PATH:"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},stdio:["ignore","pipe","ignore"]}),w="";I.stdout?.on("data",(V)=>{if(w.length<16384)w+=V.toString("utf8").slice(0,16384-w.length)});let g=await new Promise((V)=>{let x=setTimeout(()=>{b=!0,I.kill("SIGKILL"),V(124)},bq);I.once("error",()=>{clearTimeout(x),V(127)}),I.once("close",(B)=>{clearTimeout(x),V(B??1)})});return X("vm_hands.probe",{nonce_len:z.length,exit_code:g}),{exitCode:g,markers:w,proofDirInode:M}}finally{if(!b)Yq(K,{recursive:!0,force:!0})}},restatLayout(){let{session_root:z,alias:$}=q.init.layout,G="invalid";try{i(z),G="0:0:755"}catch{}let Y=!1,K=-1;try{let b=S($);K=b.uid,Y=G==="0:0:755"&&$===U(z,"repo")&&!b.isSymbolicLink()&&b.isDirectory()&&Jq($)===$&&b.uid===J}catch{}return{root_mode:G,alias_ok:Y,owner_uid:K}},installEnvironment(z){let $=Q;if(!$)throw new L("environment_unavailable","no executor owns an environment");return t({root:q.root,operationId:$.operationId,payload:z}).installed_revision},async stop(){if(h)clearInterval(h);P?.close(),await y()}}}function l(q,W,J="/proc"){try{let Q=F(U(J,String(q),"cgroup"),"utf8").split(`
6
+ `).find((Z)=>Z.startsWith("0::"))?.slice(3)??"";return Q===W||Q.startsWith(`${W}/`)}catch{return!1}}var Uq=100;function Iq(){try{return Math.floor(Number(F("/proc/uptime","utf8").split(" ")[0])*Uq)}catch{return 0}}async function p(q,W,J){try{u(U(q,"cgroup.freeze"),"1")}catch(X){throw new L("vm_hands_kill_unverified",`${J} cgroup.freeze: ${X instanceof Error?X.message:String(X)}`)}while(!/^populated 0$/m.test(F(U(q,"cgroup.events"),"utf8"))){if(Date.now()>W)throw new L("vm_hands_kill_unverified",`${J} cgroup still populated (left frozen)`);for(let X of Nq(q)){if(!Fq(X,q))continue;try{process.kill(X,"SIGKILL")}catch{}}await new Promise((X)=>setTimeout(X,10))}try{u(U(q,"cgroup.freeze"),"0")}catch(X){throw new L("vm_hands_kill_unverified",`${J} cgroup thaw: ${X instanceof Error?X.message:String(X)}`)}}function Fq(q,W){let J=W.replace(/^\/sys\/fs\/cgroup/,"")||"/",X="";try{X=F(`/proc/${q}/cgroup`,"utf8").split(`
7
+ `).find((Z)=>Z.startsWith("0::"))??""}catch{return!1}let Q=X.slice(3);return Q===J||Q.startsWith(`${J}/`)}function Nq(q){let W=[],J=(X)=>{try{for(let Z of F(U(X,"cgroup.procs"),"utf8").split(`
8
+ `))if(/^\d+$/.test(Z))W.push(Number(Z))}catch{}let Q=[];try{Q=m(X,{withFileTypes:!0}).filter((Z)=>Z.isDirectory()).map((Z)=>Z.name)}catch{}for(let Z of Q)J(U(X,Z))};return J(q),W}function Mq(q,W="/proc"){let J=[];for(let X of m(W)){if(!/^\d+$/.test(X))continue;let Q;try{Q=F(U(W,X,"stat"),"utf8")}catch{continue}let Z=Q.slice(Q.lastIndexOf(")")+2).split(" "),T=Number(Z[1]),j=Number(Z[6]),D=Number(Z[19]);if(!((j&2097152)!==0||T===2||X==="2")&&Z[0]!=="Z"&&D>=q)J.push(Number(X))}return J}function Cq(q,W="/proc"){let J=[];for(let X of m(W)){if(!/^\d+$/.test(X))continue;let Q;try{Q=F(U(W,X,"status"),"utf8")}catch{continue}let Z=/^Uid:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/m.exec(Q);if(Z&&Z.slice(1).some((T)=>Number(T)===q))J.push(Number(X))}return J}function d(q="/proc/sys/kernel/yama/ptrace_scope"){try{return Number(F(q,"utf8").trim())>=1}catch{return!1}}var f=0,r=[],_=new Set;function Aq(){f++;let q=!1;return()=>{if(q)return;if(q=!0,--f===0)for(let W of r.splice(0))W()}}function jq(){return f===0?Promise.resolve():new Promise((q)=>{r.push(q)})}async function a(){while(f>0)await jq()}async function Dq(){let q=Date.now()+1000;while(_.size&&Date.now()<q)await new Promise((W)=>setTimeout(W,2))}function Rq(q,W){let J=W.replace(/^\/sys\/fs\/cgroup/,"");_.add(q);let X=()=>{let Q="";try{Q=F(`/proc/${q}/cgroup`,"utf8").split(`
9
+ `).find((Z)=>Z.startsWith("0::"))??""}catch{_.delete(q);return}if(Q.slice(3)===J){_.delete(q);return}setTimeout(X,1)};X()}function gq(q){let W={person:q.personCgroup??U("/sys/fs/cgroup",E,k),model:q.payloadCgroup??U(o,k)},J=q.entry??process.argv[1]??"",X={},Q=(Z)=>{let T=new Map,j=String(q.payloadUid),D=String(q.payloadGid),C=Bun.spawn(["/bin/sh","-c",`echo $$ > ${e(U(W[Z],"cgroup.procs"))} || exit 125; exec /usr/bin/setpriv --no-new-privs --reuid=${j} --regid=${D} --clear-groups -- "$@"`,"vm-hands-op-join",process.execPath,J,"--vm-hands-op-runner"],{cwd:"/",env:{PATH:process.env.PATH??"/usr/bin:/bin",BUN_BE_BUN:"1",HOME:"/home/runner"},stdio:["ignore","ignore","ignore"],ipc(N){let A=N,v=T.get(A.id);if(!v)return;if(A.t==="event"&&A.event)v.onEvent(A.event);if(A.t==="done")T.delete(A.id),v.done(A.completion??{status:"failed",error_code:"vm_hands_op_failed"})}});C.exited.then((N)=>{if(X[Z]?.child===C)delete X[Z];for(let[,A]of T)A.done({status:"failed",error_code:"vm_hands_op_runner_exited"});T.clear(),q.log?.("vm_hands.op_runner_exited",{kind:Z,code:N})}),Rq(C.pid,W[Z]);let R={child:C,pending:T};return X[Z]=R,R};return{run(Z,T,j,D){if(!d())return Promise.resolve({status:"failed",error_code:"vm_hands_ptrace_unprotected"});let C=async()=>{while(!X[Z]&&f>0)await a()};return C().then(async()=>{if(!X[Z]&&f>0)await C()}).then(()=>new Promise((R)=>{if(!X[Z]&&f>0){R({status:"failed",error_code:"vm_hands_op_runner_unavailable"});return}let N=X[Z]??Q(Z);N.pending.set(T.id,{onEvent:j,done:R}),D.addEventListener("abort",()=>{try{N.child.send({t:"cancel",id:T.id})}catch{}},{once:!0});try{N.child.send({t:"op",...T})}catch{N.pending.delete(T.id),R({status:"failed",error_code:"vm_hands_op_runner_unavailable"})}}))},warm(Z){if(!X[Z]&&d())a().then(()=>{if(!X[Z]&&f===0)Q(Z)})},stop(){for(let Z of Object.keys(X))X[Z]?.child.kill()}}}export{Nq as subtreePids,d as ptraceProtected,Mq as processesStartedSince,Cq as payloadUidProcesses,l as inCgroup,gq as createVmHandsOpRunners,xq as createVmHandsExecutor,L as VmHandsExecutorError,c as VM_HANDS_PROOF_DIR_TOKEN,Tq as VM_HANDS_PROBE_NONCE_TOKEN,E as VM_HANDS_PERSON_CGROUP,k as VM_HANDS_PAYLOAD_JOIN,o as VM_HANDS_PAYLOAD_CGROUP};
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ import{Kh as E}from"./vm-hands-entry-lite-7gh1rbn7.js";async function Q(){let[{executeLocalOperation:G},{configureDesktopAccount:H},{configureWorkerSandbox:J}]=await Promise.all([import("./local-capabilities-jpyj1dh1.js"),import("./desktop-account-vsrtgkk9.js"),import("./worker-sandbox-nnce49w0.js")]);J();let K=(process.geteuid?.()??0)!==0,z=new Map,y=(B)=>{try{process.send?.(B)}catch{}};process.on("message",(B)=>{let j=B;if(j?.t==="cancel"){z.get(j.id)?.abort();return}if(j?.t!=="op")return;if(!K){y({t:"done",id:j.id,completion:{status:"failed",error_code:"vm_hands_payload_account_unavailable"}});return}let F=new AbortController;z.set(j.id,F),G(j.state,j.claim,{worker:j.worker,signal:F.signal,emit:(q)=>{let{deliverySignal:N,...M}=q;y({t:"event",id:j.id,event:M})}}).then((q)=>y({t:"done",id:j.id,completion:q}),(q)=>y({t:"done",id:j.id,completion:{status:"failed",error_code:q&&typeof q==="object"&&"code"in q&&typeof q.code==="string"?q.code:"vm_hands_op_failed"}})).finally(()=>z.delete(j.id))}),process.on("disconnect",()=>process.exit(0)),await new Promise(()=>{})}export{Q as runVmHandsOpRunner};
@@ -0,0 +1,4 @@
1
+ // @bun
2
+ import{u as y,v as k,w as m}from"./vm-hands-entry-lite-fraghb8k.js";import{Uc as v}from"./vm-hands-entry-lite-gqncr2j0.js";import"./vm-hands-entry-lite-sv6xwe0h.js";import{Kh as K}from"./vm-hands-entry-lite-7gh1rbn7.js";import{spawn as n}from"child_process";import{createHash as i}from"crypto";import{lstatSync as T,mkdirSync as d,readFileSync as a,statSync as r,writeFileSync as l}from"fs";var A="/run/reason-vm-hands",E="/run/reason-vm-hands/env",f="/home/runner",t=/^https:\/\/[a-z0-9.-]+(?::\d{1,5})?$/,O="/sys/fs/cgroup/reason-srt",R="/usr/local/bin/ara-srt-exec",e=65536,jj=21600000;function qj(Q,j="/run/ara-srt"){try{if((process.getuid?.()??-1)!==0)return;d(j,{recursive:!0,mode:448});let q=T(j);if(!q.isDirectory()||q.uid!==0||(q.mode&63)!==0){Q("srt_base_keyed_skipped",{reason:"socket_dir_unsafe"});return}l(`${j}/base-keyed`,`1
3
+ `,{mode:420}),Q("srt_base_keyed",{})}catch{Q("srt_base_keyed_skipped",{reason:"error"})}}function S(Q,j){let q=(G)=>{return j("srt_warm_skipped",{reason:G}),Promise.resolve()};if(typeof Q.srt_base_settings!=="string")return q("no_settings");let Z=Buffer.from(Q.srt_base_settings,"base64");if(Z.length===0||Z.length>e||Z.toString("base64")!==Q.srt_base_settings)return q("settings_invalid");try{let G=T(O);if(!G.isDirectory()||G.uid!==0||(G.mode&18)!==0)return q("cgroup_unsafe");for(let[Y,N]of[[R,!1],["/usr/local/bin",!0]]){let B=T(Y);if((N?!B.isDirectory():!B.isFile())||B.uid!==0||(B.mode&18)!==0)return q("srt_exec_unsafe")}}catch{return q("cgroup_or_exec_missing")}if((process.getuid?.()??-1)!==0)return q("not_root");let z=performance.now(),X=i("sha256").update(Z).digest("hex"),M=`${A}/srt-base-settings.json`;try{l(M,Z,{mode:384,flag:"w"})}catch{return q("settings_write")}let H=n("/bin/sh",["-c",`echo $$ > ${O}/cgroup.procs || exit 125; exec "$@"`,"vm-hands-srt",R,"--settings",M,"--idle-ms",String(jj),"--","/bin/true"],{cwd:"/",env:{PATH:"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},stdio:"ignore"});return new Promise((G)=>{H.once("error",()=>{j("srt_warm_failed",{reason:"spawn"}),G()}),H.once("close",(Y)=>{j(Y===0?"srt_warm_done":"srt_warm_failed",{exit_code:Y,warm_ms:Math.round(performance.now()-z),settings_sha256:X}),G()})})}var p=3000;function Yj(Q){if(!Q||typeof Q!=="object"||Array.isArray(Q))return null;let j=Q,q=j.layout,Z=j.device_key,z=j.credential;return typeof j.workspace_id==="string"&&Number.isSafeInteger(j.instance_generation)&&typeof j.api_origin==="string"&&t.test(j.api_origin)&&typeof j.manifest_digest==="string"&&!!z&&typeof z.key_id==="string"&&Number.isSafeInteger(z.expires_at_ms)&&typeof z.signature==="string"&&!!q&&typeof q.session_root==="string"&&typeof q.alias==="string"&&Number.isSafeInteger(q.payload_uid)&&typeof q.kind==="string"&&!!Z&&typeof Z.pkcs8==="string"&&typeof Z.spki==="string"?j:null}function u(Q){d(Q,{recursive:!0,mode:448});let j=r(Q);if(!j.isDirectory()||(j.mode&63)!==0||j.uid!==(process.getuid?.()??-1))throw Error(`vm_hands_runtime_directory_unsafe: ${Q}`)}async function Jj(Q){let[{CLI_VERSION:j},q,Z,z]=await Promise.all([import("./version-n43gjzwa.js"),import("./hands-worker-source-da93x0qx.js"),import("./network-contract-41qanjhp.js"),import("./device-workspace-zk5xwd10.js")]),{REASON_HANDS_PROTOCOL_VERSION:X}=await import("./reason-hands-protocol-51gs8j7v.js");return{reason_runtime_version:j,bridge_version:j,protocol_version:v,execution_eligible:!0,instance_generation:Q.instance_generation,capabilities:{supported_operations:["hands.connect"],hands_worker_artifact_sha256:q.REASON_HANDS_WORKER_ARTIFACT_SHA256,hands_worker_entrypoint:q.REASON_HANDS_WORKER_ENTRYPOINT,hands_slots:1,max_payload_bytes:Z.LOCAL_OPERATION_MAX_BYTES,max_result_bytes:Z.LOCAL_OPERATION_MAX_BYTES,operation_constraints:{"hands.connect":{ready:!0,execution_mode:"host",transport:"wss_relay",worker:"ara_hands",slots:1,session_group:Z.HANDS_SESSION_GROUP,worker_version:q.REASON_HANDS_WORKER_VERSION,protocol_version:X,worker_artifact_sha256:q.REASON_HANDS_WORKER_ARTIFACT_SHA256,worker_entrypoint:q.REASON_HANDS_WORKER_ENTRYPOINT,policy_mode:"full_access",policy_version:1,workspace_base:z.REASON_WORKSPACE_BASE,workspace_layout:z.SESSION_WORKSPACE_LAYOUT,browser_state:"optional_headless",desktop:!1,max_session_ms:43200000,environment_delivery:Z.HANDS_ENVIRONMENT_DELIVERY,[Z.HANDS_ENVIRONMENT_AT_CLAIM_KEY]:Z.HANDS_ENVIRONMENT_AT_CLAIM,[Z.HANDS_CLOUD_ACCESS_KEY]:Z.HANDS_CLOUD_ACCESS,[Z.HANDS_LARGE_ENVIRONMENT_KEY]:Z.HANDS_LARGE_ENVIRONMENT,[Z.HANDS_CONFINEMENT_KEY]:Z.HANDS_CONFINEMENT,[Z.HANDS_JOBS_USER_KEY]:Z.HANDS_JOBS_USER,vm_hands:"v1"}}}}}var g=["fs.read","fs.write","fs.export","fs.import","exec.run","exec.full","process.list","ports.list","pty.start","jobs.control","automation.call.v1"],Qj=new Set(["pty.start","jobs.control"]);function Zj(Q,j){let q=j([{id:"vm-hands",label:"workspace",path:f,pathFingerprint:"0".repeat(64),permissions:{read:!0,write:!0,execute:!0,discover_environment:!0,expose_mcp:!1}}],{worker:{executionMode:"unsandboxed",readiness:Object.fromEntries(g.map((X)=>[X,!0]))}}),Z=Q.capabilities,z={...Z.operation_constraints};for(let X of g)z[X]={...q.operation_constraints?.[X]??{},ready:!0,execution_mode:q.operation_constraints?.[X]?.execution_mode??"host"};return{...Q,capabilities:{...Z,supported_operations:["hands.connect",...g],operation_constraints:z}}}function $j(Q){for(let j of a("/etc/passwd","utf8").split(`
4
+ `)){let q=j.split(":");if(q.length>=4&&Number(q[2])===Q&&/^\d+$/.test(q[3]??"")&&Number(q[3])>0)return Number(q[3])}throw Error("vm_hands_payload_account_unavailable")}function zj(Q,j){let q=j.owner;if(!q||typeof q.organization_id!=="string"||typeof q.device_id!=="string"||typeof j.root_id!=="string")return null;return{version:4,apiOrigin:Q.api_origin,orgId:q.organization_id,deviceId:q.device_id,devicePublicKey:"",displayName:"vm-hands",registeredAt:new Date(0).toISOString(),handsSlots:1,roots:[{id:j.root_id,label:"workspace",path:f,pathFingerprint:"0".repeat(64),permissions:{read:!0,write:!0,execute:!0,discover_environment:!0,expose_mcp:!1}}]}}async function Hj(Q,j){u(A),u(E),qj(j);let q=S(Q,j),Z=!1,z=async()=>{if(!await Promise.race([q.then(()=>!0),new Promise(($)=>setTimeout(()=>$(!1),p).unref?.())]))Z=!0,j("srt_warm_late",{wait_ms:p})},[{configureDesktopAccount:X},{configureWorkerSandbox:M}]=await Promise.all([import("./desktop-account-vsrtgkk9.js"),import("./worker-sandbox-nnce49w0.js")]);M();try{X({value:String(Q.layout.payload_uid)})}catch{j("payload_account_unavailable"),await new Promise(()=>{setInterval(()=>{return},1073741824)})}let H=new AbortController;for(let J of["SIGTERM","SIGINT"])process.on(J,()=>H.abort());let G=null,Y,N=new Promise((J)=>{Y=J}),B=N.then(()=>import("./vm-hands-executor-xg99mezq.js")).then(({createVmHandsExecutor:J})=>{let $=J({init:Q,root:f,runtimeDirectory:A,apiOrigin:Q.api_origin,prespawn:!0,onSrtReset:()=>{Z=!1,q=S(Q,j)},srtWarmLate:()=>Z,forward:(U,L)=>G?G(U,L):Promise.reject(Error("vm_hands_not_bound")),log:(U,L)=>j(U,L)});return j("executor_loaded"),$}),C=(J)=>async(...$)=>(await B)[J](...$),V=null;B.then((J)=>{V=()=>J.executorExited()});let W={startExecutor:async(...J)=>{return await z(),C("startExecutor")(...J)},killAndVerifyPayload:C("killAndVerifyPayload"),runProbe:async(...J)=>{return await z(),C("runProbe")(...J)},restatLayout:()=>{throw Error("replaced below")},installEnvironment:()=>{throw Error("replaced below")},executorExited:()=>V?V():new Promise(()=>{}),takeSrtFallbacks:()=>null};B.then((J)=>{W.restatLayout=()=>J.restatLayout(),W.installEnvironment=($)=>J.installEnvironment($),W.takeSrtFallbacks=()=>J.takeSrtFallbacks?.()??null});let s=await y(Q),c=new k(Q,s,W,{envRoot:E}),x=Jj(Q),I=null,o=Promise.all([x,import("./local-capabilities-jpyj1dh1.js")]).then(([J,$])=>{I=Zj(J,$.capabilityInventoryForRoots),j("device_ops_loaded")}).catch((J)=>j("device_ops_unavailable",{error:J instanceof Error?J.name:"error"})),D=N.then(()=>import("./vm-hands-executor-xg99mezq.js")).then(({createVmHandsOpRunners:J})=>J({payloadUid:Q.layout.payload_uid,payloadGid:$j(Q.layout.payload_uid),log:($,U)=>j($,U)})).catch(()=>null);D.then((J)=>J?.warm("person")),j("agent_ready"),await m({apiOrigin:Q.api_origin,agent:c,signal:H.signal,heartbeat:async()=>I??await x,executeOp:async({kind:J,claim:$,signal:U,emit:L})=>{let b=zj(Q,$);if(!b)return{status:"failed",error_code:"vm_hands_bind_invalid"};let w={executionMode:"unsandboxed",runtimeDirectory:A,readiness:Object.fromEntries(g.map((F)=>[F,!0]))},h=(F)=>{let P=typeof F.kind==="string"?F.kind:"";if(P)L({kind:P,...F.data&&typeof F.data==="object"?{data:F.data}:{}})};if($.capability==="exec.full"&&J!=="person")return{status:"failed",error_code:"capability_not_granted"};if($.capability==="automation.call.v1"&&J!=="model")return{status:"failed",error_code:"capability_not_granted"};if(Qj.has(String($.capability))){let{executeLocalOperation:F}=await import("./local-capabilities-jpyj1dh1.js");return F(b,$,{worker:w,signal:U,emit:(P)=>h(P)})}let _=await D;if(!_)return{status:"failed",error_code:"vm_hands_payload_account_unavailable"};return _.run(J,{id:String($.attempt_id),claim:$,state:b,worker:w},h,U)},readyData:({launchId:J})=>({executor_launch_id:J}),log:(J,$)=>{if(J==="vm_hands.registered"||J==="vm_hands.reconnected")Y();j(J,$)},onTurn:(J)=>{G=J}}),await(await B).stop(),(await D)?.stop()}export{S as startBaseSrtServer,Hj as runVmHands,Yj as parseVmHandsInit,Jj as heartbeatBody,qj as enableBaseKeyedSrt};
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ import{t as a}from"./vm-hands-entry-lite-k4c504n7.js";import"./vm-hands-entry-lite-65pbrs1x.js";import"./vm-hands-entry-lite-qvrnx0vk.js";import"./vm-hands-entry-lite-n07kxrd1.js";import"./vm-hands-entry-lite-ffg7rf02.js";import"./vm-hands-entry-lite-7gh1rbn7.js";export{a as configureWorkerSandbox};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reason-machines/cli-linux-arm64-musl",
3
- "version": "0.2.277",
3
+ "version": "0.2.279",
4
4
  "description": "Reason CLI native binary for linux-arm64-musl",
5
5
  "os": [
6
6
  "linux"