@reason-machines/cli-linux-arm64-musl 0.2.371 → 0.2.373
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/ara +1 -1
- package/bin/vm-hands/api-af9g18n7.js +2 -0
- package/bin/vm-hands/api-credentials-65mrr3tn.js +2 -0
- package/bin/vm-hands/{ask-relay-dq0v3bmt.js → ask-relay-8z5hmrxz.js} +3 -3
- package/bin/vm-hands/connect-cli-nnhwmhv1.js +2 -0
- package/bin/vm-hands/{custom-endpoint-device-wmcf39x6.js → custom-endpoint-device-zhpake9f.js} +1 -1
- package/bin/vm-hands/desktop-account-5zvgspyw.js +2 -0
- package/bin/vm-hands/{device-workspace-05nkwrpp.js → device-workspace-vbcry9d6.js} +1 -1
- package/bin/vm-hands/{hands-worker-source-5wv1djgv.js → hands-worker-source-h0b1j53p.js} +1 -1
- package/bin/vm-hands/{index-kf4q2kw5.js → index-bbk6a9sk.js} +1 -1
- package/bin/vm-hands/{install-receipt-vaytv1sf.js → install-receipt-7x81ek76.js} +1 -1
- package/bin/vm-hands/local-automation-wvtn0q4x.js +2 -0
- package/bin/vm-hands/local-capabilities-bnhpw82g.js +2 -0
- package/bin/vm-hands/local-desktop-users-0hadyvx1.js +2 -0
- package/bin/vm-hands/local-display-mac-v1pc7177.js +2 -0
- package/bin/vm-hands/local-display-session-n7ep9gbv.js +2 -0
- package/bin/vm-hands/local-pty-session-hs7rq03x.js +2 -0
- package/bin/vm-hands/{managed-runtime-dz0rtyvr.js → managed-runtime-qwrw5tyb.js} +1 -1
- package/bin/vm-hands/network-contract-zqvt1v0t.js +2 -0
- package/bin/vm-hands/package-3cd7cfyv.js +2 -0
- package/bin/vm-hands/permissions-xv54fbmk.js +2 -0
- package/bin/vm-hands/{reason-hands-protocol-dase3v7x.js → reason-hands-protocol-8fxjynte.js} +1 -1
- package/bin/vm-hands/{serve-service-47q4bmhj.js → serve-service-hw16p091.js} +1 -1
- package/bin/vm-hands/{status-czgrayjt.js → status-n6bv9tmq.js} +2 -2
- package/bin/vm-hands/version-jc5w4cnv.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-2c88t2at.js → vm-hands-entry-lite-00qsbphw.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-w4swepp1.js → vm-hands-entry-lite-1085xsma.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-gbzvzfe6.js → vm-hands-entry-lite-2c1pz48d.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-gteq5e1n.js → vm-hands-entry-lite-3fdaf4hf.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-sfsgeynk.js → vm-hands-entry-lite-3hbe4em3.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-nhfd61cx.js → vm-hands-entry-lite-45j8qwsf.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-rjwk6sfj.js → vm-hands-entry-lite-4m40gwkf.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-gzyps3ev.js → vm-hands-entry-lite-5kgvss4p.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-e8skq97c.js → vm-hands-entry-lite-7shpbsw8.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-db4z7ekz.js → vm-hands-entry-lite-9cgm6g8t.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-dq1fdx0j.js → vm-hands-entry-lite-anmv8hp7.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-ngytzkx1.js → vm-hands-entry-lite-bvbfcp1k.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-9fr904x2.js → vm-hands-entry-lite-c01eyep6.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-b775ysr4.js → vm-hands-entry-lite-dcynw6t2.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-vygp7vq8.js → vm-hands-entry-lite-dgxxsdwb.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-5mz0m0k0.js → vm-hands-entry-lite-fysena9h.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-7fx4xtf6.js → vm-hands-entry-lite-g036gtem.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-e9gq8n0f.js → vm-hands-entry-lite-g9sz0618.js} +1 -1
- package/bin/vm-hands/vm-hands-entry-lite-ha8fgq32.js +540 -0
- package/bin/vm-hands/{vm-hands-entry-lite-zmf1terc.js → vm-hands-entry-lite-hc3p6r9p.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-y3wncwjd.js → vm-hands-entry-lite-j2q1k9vb.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-d7y6aah1.js → vm-hands-entry-lite-jb2sr2r7.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-k7twc1ch.js → vm-hands-entry-lite-jpq28ncg.js} +1 -1
- package/bin/vm-hands/vm-hands-entry-lite-khjrcwrj.js +5 -0
- package/bin/vm-hands/{vm-hands-entry-lite-g576hpce.js → vm-hands-entry-lite-kxdw4myj.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-kc07ptqt.js → vm-hands-entry-lite-m8jcht6h.js} +77 -77
- package/bin/vm-hands/{vm-hands-entry-lite-ymwv38dd.js → vm-hands-entry-lite-m9awmyqz.js} +23 -23
- package/bin/vm-hands/{vm-hands-entry-lite-8sddhaka.js → vm-hands-entry-lite-mh0xecf3.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-bt6esncn.js → vm-hands-entry-lite-nhtb458c.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-8emxhcny.js → vm-hands-entry-lite-pt4r24ky.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-5zmn6a7p.js → vm-hands-entry-lite-r6pap1kh.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-zyc3qkej.js → vm-hands-entry-lite-s6twc8n9.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-mcv6pse6.js → vm-hands-entry-lite-sb9a1jcn.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-5n6agg8d.js → vm-hands-entry-lite-t535zmjz.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-cxgbb2yr.js → vm-hands-entry-lite-z4hpfwbj.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-dm52srp5.js → vm-hands-entry-lite-za55dtte.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-x9pmwqjd.js → vm-hands-entry-lite-ze9msfq1.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-2fyemnas.js → vm-hands-entry-lite-zfwg7ehq.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-y9wkxydj.js → vm-hands-entry-lite-zh8p7ndn.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite.js +1 -1
- package/bin/vm-hands/{vm-hands-executor-676cpsf2.js → vm-hands-executor-z89arnng.js} +2 -2
- package/bin/vm-hands/vm-hands-op-runner-2c9g8djj.js +2 -0
- package/bin/vm-hands/{vm-hands-runtime-d2jafcp6.js → vm-hands-runtime-qc1205w5.js} +3 -3
- package/bin/vm-hands/worker-sandbox-wpzkvwer.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-credentials-ke2v1y5k.js +0 -2
- package/bin/vm-hands/api-ewpnfn05.js +0 -2
- package/bin/vm-hands/connect-cli-atmwwkqh.js +0 -2
- package/bin/vm-hands/desktop-account-cppm1dhr.js +0 -2
- package/bin/vm-hands/local-automation-yrra6zkg.js +0 -2
- package/bin/vm-hands/local-capabilities-ykbksvha.js +0 -2
- package/bin/vm-hands/local-desktop-users-ejwwkfer.js +0 -2
- package/bin/vm-hands/local-display-mac-x0eq4rzq.js +0 -2
- package/bin/vm-hands/local-display-session-xkbc5knp.js +0 -2
- package/bin/vm-hands/local-pty-session-pzg7bk32.js +0 -2
- package/bin/vm-hands/network-contract-zez17y8t.js +0 -2
- package/bin/vm-hands/package-gxv23nam.js +0 -2
- package/bin/vm-hands/permissions-jmcvwvgd.js +0 -2
- package/bin/vm-hands/version-42fp9wnk.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-8cmyg5e4.js +0 -540
- package/bin/vm-hands/vm-hands-entry-lite-pt633d84.js +0 -5
- package/bin/vm-hands/vm-hands-op-runner-4j51v1n0.js +0 -2
- package/bin/vm-hands/worker-sandbox-e4kvy715.js +0 -2
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Be as LJ,Je as _J,nf as CJ}from"./vm-hands-entry-lite-2fyemnas.js";import{createHash as I,randomBytes as zJ}from"crypto";import{closeSync as qJ,fsyncSync as NJ,mkdirSync as fJ,openSync as DJ,renameSync as mJ,rmSync as bJ,statSync as AJ,writeSync as xJ,constants as y}from"fs";import{join as i}from"path";var cJ=1;var r=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function QJ(J){if(J.environment!==void 0||J.payload.environment!==void 0)throw new W("vm_hands_bind_invalid","bind carries a plaintext environment");if(J.payload.vm_hands_env_deferred===!0&&J.environment_sealed!==void 0)throw new W("vm_hands_bind_invalid","split bind carries an environment");return J.environment_sealed!==void 0}function UJ(J,Z){let{payload:z,authority:Q}=J;if(!z||typeof z!=="object"||Array.isArray(z)||!Q||typeof Q!=="object"||Array.isArray(Q)||!Z.deviceId||!Z.rootId||z.run_id!==Z.runId||z.device_id!==Z.deviceId||Q.device_id!==Z.deviceId||z.root_id!==Z.rootId||Z.snapshotId!==void 0&&z.snapshot_id!==Z.snapshotId)throw new W("vm_hands_env_invalid","environment does not match this Hands");return z}function MJ(J){if(J.capability!=="hands.connect")throw new W("vm_hands_bind_invalid","not a hands.connect claim");let Z=J.payload;return{kind:"vm_hands.bind",v:1,bind_id:J.attempt_id,attempt_id:J.attempt_id,attempt_token:J.attempt_token,run_id:J.run_id,session_id:typeof Z.workspace_id==="string"&&r.test(Z.workspace_id)?Z.workspace_id:J.run_id,brain_generation:Z.target_generation,fence_id:Z.target_fence_id,lease_until:J.lease_until,policy:{agent_profile:"",confinement_key:String(Z.hands_confinement??""),browser_egress:Z.browser_egress??null,policy_digest:Z.vm_hands_policy_digest},cwd:typeof Z.cwd==="string"?Z.cwd:"",claim:J,env:QJ(J)?J.environment_sealed:null}}class W extends Error{code;constructor(J,Z){super(Z);this.code=J}}var v=(J)=>Buffer.from(J instanceof Uint8Array?J:new Uint8Array(J)).toString("base64url"),R=(J)=>new Uint8Array(Buffer.from(J,"base64url"));function f(J){if(J===null||typeof J!=="object")return JSON.stringify(J);if(Array.isArray(J))return`[${J.map(f).join(",")}]`;return`{${Object.keys(J).sort().map((Z)=>`${JSON.stringify(Z)}:${f(J[Z])}`).join(",")}}`}async function jZ(J){let Z=await crypto.subtle.importKey("pkcs8",R(J.device_key.pkcs8),{name:"ECDSA",namedCurve:"P-256"},!1,["sign"]),z=R(J.device_key.spki),Q=await crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},!1,["deriveKey"]),j=new Uint8Array(await crypto.subtle.exportKey("spki",Q.publicKey)),q=I("sha256").update(z).digest("base64url");return{signing:{privateKey:Z},agreement:Q,signingSpki:z,agreementSpki:j,fingerprint:q}}var pJ=4;class lJ{init;keys;hooks;options;identity="identity_free";lastBrainGeneration=new Map;bound=new Map;binding=new Map;unbinding=new Set;servedRun=!1;commandsSinceVerified=!1;bootKillPending=!1;unverified=new Set;structural=Promise.resolve();exclusive(J){let Z=this.structural.then(J,J);return this.structural=Z.catch(()=>{return}),Z}constructor(J,Z,z,Q){this.init=J;this.keys=Z;this.hooks=z;this.options=Q;if(!r.test(J.workspace_id)&&!/^ws-[a-z0-9]{8,64}$/.test(J.workspace_id))throw new W("vm_hands_layout_invalid","bad workspace id");if(!Number.isSafeInteger(J.instance_generation)||J.instance_generation<1)throw new W("vm_hands_layout_invalid","bad generation")}get phase(){if(this.identity==="identity_free")return"identity_free";if(this.unbinding.size)return"unbinding";return this.bound.size||this.binding.size?"bound":"registered"}isBoundRun(J){for(let Z of this.bound.values())if(Z.runId===J)return!0;return!1}bindIdForRun(J){for(let Z of this.bound.values())if(Z.runId===J)return Z.bindId;return null}get liveBindIds(){return[...new Set([...this.bound.keys(),...this.binding.keys(),...this.unbinding])]}async environmentInstalled(J,Z,z){for(let Q=Date.now()+Z;;){let j=this.bound.get(J);if(!j)return!1;if(j.envInstalled)return!0;if(Date.now()>=Q||z?.aborted)return!1;await new Promise((q)=>setTimeout(q,25))}}opServed(){this.commandsSinceVerified=!0}canSpawn(J){for(let Z of this.bound.values())if(Z.runId===J)return Z.envInstalled;return!1}async registerFrame(J){if(this.identity!=="identity_free")throw new W("vm_hands_register_twice","already registered");if(typeof J!=="string"||J.length<16||J.length>256)throw new W("vm_hands_challenge_invalid","bad register challenge");let Z={challenge:J,t:"register",v:cJ,workspace_id:this.init.workspace_id,instance_generation:this.init.instance_generation,credential:this.init.credential,device_public_key:v(this.keys.signingSpki),env_public_key:v(this.keys.agreementSpki),key_fingerprint:this.keys.fingerprint,manifest_digest:this.init.manifest_digest,nonce:v(zJ(32)),timestamp_ms:(this.options.now??Date.now)(),vm_hands_attest_hold:!0},z=await crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},this.keys.signing.privateKey,new TextEncoder().encode(f(Z)));return{...Z,device_signature:v(z)}}async helloFrame(J,Z){if(this.identity==="identity_free")throw new W("vm_hands_not_registered","hello before register");let z=String((this.options.now??Date.now)()),Q=v(zJ(32)),j=CJ({method:"GET",pathAndQuery:LJ,timestamp:z,nonce:Q,challenge:J,bodySha256:I("sha256").update("").digest("hex")}),q=new Uint8Array(await crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},this.keys.signing.privateKey,new Uint8Array(j)));return{t:"hello",timestamp:z,nonce:Q,signature:v(uJ(q)),...Z?{vm_hands_previous_connection:Z}:{}}}registered(){if(this.identity!=="identity_free")throw new W("vm_hands_register_unexpected","registered twice");this.identity="registered"}async bind(J){if(this.identity!=="registered")throw new W("vm_hands_not_registered","bind before register");if(J.kind!=="vm_hands.bind"||J.v!==1)throw new W("vm_hands_bind_invalid","bad bind");for(let z of[J.bind_id,J.attempt_id,J.run_id,J.session_id,J.fence_id])if(!r.test(z))throw new W("vm_hands_bind_invalid","bad id");if(!Number.isSafeInteger(J.brain_generation)||J.brain_generation<=(this.lastBrainGeneration.get(J.run_id)??0))throw new W("vm_hands_generation_stale","brain generation not strictly higher");if(J.env&&(J.env.aad!==J.bind_id||J.env.alg!=="ECDH-P256+A256GCM"))throw new W("vm_hands_bind_invalid","bad env envelope");if(!/^[0-9a-f]{64}$/.test(J.policy.policy_digest))throw new W("vm_hands_bind_invalid","bad policy or nonce");if(I("sha256").update(f({hands_confinement:J.policy.confinement_key||null,browser_egress:J.policy.browser_egress??null})).digest("hex")!==J.policy.policy_digest)throw new W("vm_hands_policy_mismatch","policy digest does not match the claim");if(this.liveBindIds.includes(J.bind_id)||[...this.bound.values()].some((z)=>z.runId===J.run_id)||[...this.binding.values()].includes(J.run_id))throw new W("vm_hands_busy","this run already holds a bind here");if(this.liveBindIds.length>=pJ)throw new W("vm_hands_busy","every bind slot is held");return this.lastBrainGeneration.set(J.run_id,J.brain_generation),this.binding.set(J.bind_id,J.run_id),this.exclusive(()=>this.setUp(J))}async setUp(J){let Z=[...this.bound.keys()],z=null,Q=!1;try{if(Z.length===0){if(this.bootKillPending&&!this.servedRun){try{await this.hooks.killProbe()}catch{throw new W("vm_hands_kill_unverified","the boot's scoped kill did not verify")}this.bootKillPending=!1}if(this.commandsSinceVerified)await this.hooks.killAndVerifyPayload(),this.unverified.clear(),this.commandsSinceVerified=!1;else if(this.unverified.size>0)await this.hooks.killAndVerifyPayload({own:!0}),this.unverified.clear()}else if(this.unverified.size>0)await this.hooks.killAndVerifyPayload({keep:Z}),this.unverified.clear();this.servedRun=!0,Q=!0;let{launchId:j,applied:q,readyData:B}=await this.hooks.startExecutor({bindId:J.bind_id,sessionId:J.session_id,policyDigest:J.policy.policy_digest,confinementKey:J.policy.confinement_key,browserEgress:J.policy.browser_egress,cwd:J.cwd,claim:J.claim}),O=this.hooks.restatLayout(),N=null,h=null;if(J.env){let D=J.claim?.owner??{},_=UJ(await this.openSealed(J.env,J.bind_id),{runId:J.run_id,deviceId:typeof D.device_id==="string"?D.device_id:"",rootId:J.claim?.root_id??""});this.commandsSinceVerified=!0,N=this.hooks.installEnvironment(J.bind_id,_),h=typeof _.snapshot_id==="string"&&_.snapshot_id?_.snapshot_id:null,z=this.writeJobEnvRootOnly(J.bind_id,_)}if(this.unbinding.has(J.bind_id))throw new W("vm_hands_bind_lost","unbound while binding");return this.bound.set(J.bind_id,{bindId:J.bind_id,runId:J.run_id,sessionId:J.session_id,brainGeneration:J.brain_generation,policyDigest:J.policy.policy_digest,launchId:j,envInstalled:N!==null,rootId:J.claim?.root_id??"",envDirectory:z}),this.binding.delete(J.bind_id),{bind_id:J.bind_id,attempt_id:J.attempt_id,attempt_token:J.attempt_token,launch_id:j,snapshot_revision:N,snapshot_id:h,layout:O,...B?{ready_data:B}:{},policy_digest:I("sha256").update(f({hands_confinement:q.hands_confinement??null,browser_egress:q.browser_egress??null})).digest("hex")}}catch(j){if(z)KJ(z);if(Q){let B=[...this.bound.keys()];await this.hooks.killAndVerifyPayload({bindId:J.bind_id,keep:B,own:!0}).catch(()=>{this.unverified.add(J.bind_id)})}this.binding.delete(J.bind_id);let q=j&&typeof j==="object"&&"code"in j&&typeof j.code==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(j.code)?j.code:"vm_hands_bind_failed";throw j instanceof W?j:new W(q,"executor refused the bind")}}async deliverEnvironment(J){let Z=this.bound.get(J.attemptId);if(!Z||this.unbinding.has(J.attemptId))throw new W("vm_hands_not_bound","environment delivered while not bound");if(!r.test(J.attemptId)||typeof J.snapshotId!=="string"||!J.snapshotId||J.snapshotId.length>128||J.snapshotId.includes("/"))throw new W("vm_hands_env_invalid","bad snapshot id");let z=`${J.attemptId}/${J.snapshotId}`;if(J.sealed?.alg!=="ECDH-P256+A256GCM"||J.sealed.aad!==z)throw new W("vm_hands_env_invalid","bad env envelope");let Q=UJ(await this.openSealed(J.sealed,z),{runId:Z.runId,deviceId:J.deviceId,rootId:Z.rootId,snapshotId:J.snapshotId});this.commandsSinceVerified=!0;let j=this.hooks.installEnvironment(Z.bindId,Q);if(Z.envInstalled=!0,Z.envDirectory)KJ(Z.envDirectory);return Z.envDirectory=null,Z.envDirectory=this.writeJobEnvRootOnly(`${Z.bindId}-r${j}`,Q),{snapshot_id:J.snapshotId,installed_revision:j,installed:!0}}async attestFrame(J,Z){if(this.identity==="identity_free")throw new W("vm_hands_not_registered","attest before register");if(!J||J.length>65536)throw new W("vm_hands_attest_invalid","no probe script");return this.exclusive(async()=>{if(this.liveBindIds.length)throw new W("vm_hands_attest_invalid","attest beside a bind");let z=await this.hooks.runProbe({nonce:Z,script:J});try{await this.hooks.killProbe()}catch{this.bootKillPending=!0}return{t:"attest",nonce:Z,exit_code:z.exitCode,markers:z.markers,proof_dir_inode:z.proofDirInode,script_sha256:I("sha256").update(J).digest("hex")}})}executorExited(J){return this.hooks.executorExited?.(J)??new Promise(()=>{})}async boundRefused(J){await this.unbind(J)}async unbind(J){let Z=this.bound.get(J)??null;if(this.unbinding.add(J),this.bound.delete(J),Z)try{this.hooks.freezeBind?.(J)}catch{}return this.exclusive(()=>this.tearDown(J,Z))}async tearDown(J,Z){try{this.bound.delete(J);let z=[...this.bound.keys()].filter((j)=>j!==J),Q=!z.length&&!this.commandsSinceVerified;try{await this.hooks.killAndVerifyPayload(z.length?{bindId:J,keep:z}:Q?{bindId:J,own:!0}:void 0)}catch(j){throw this.unverified.add(J),j}if(!z.length)this.unverified.clear(),this.commandsSinceVerified=!1;if(Z?.envDirectory)KJ(Z.envDirectory);return{bind_id:Z?J:null,killed_verified:!0,shredded:!0,srt_fallbacks:z.length?null:this.hooks.takeSrtFallbacks?.()??null}}finally{this.unbinding.delete(J)}}async openSealed(J,Z){let z=()=>{throw new W("vm_hands_env_invalid","env did not decrypt")},Q=await crypto.subtle.importKey("spki",R(J.epk),{name:"ECDH",namedCurve:"P-256"},!1,[]).catch(z),j=await crypto.subtle.deriveKey({name:"ECDH",public:Q},this.keys.agreement.privateKey,{name:"AES-GCM",length:256},!1,["decrypt"]),q=await crypto.subtle.decrypt({name:"AES-GCM",iv:R(J.iv),additionalData:new TextEncoder().encode(Z)},j,R(J.ct)).catch(z),B=JSON.parse(new TextDecoder().decode(q));if(!B||typeof B!=="object"||Array.isArray(B))throw new W("vm_hands_env_invalid","env not an object");return B}writeJobEnvRootOnly(J,Z){let z=i(this.options.envRoot,`bind-${J}`);fJ(z,{mode:448});let Q=AJ(z);if(!Q.isDirectory()||(Q.mode&63)!==0||Q.uid!==(process.getuid?.()??-1))throw new W("vm_hands_env_dir_unsafe","env directory is not root's 0700");let j=Z.variables&&typeof Z.variables==="object"?Z.variables:{},q=Object.entries(j).filter(([N,h])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(N)&&typeof h==="string").map(([N,h])=>`export ${N}='${String(h).replaceAll("'","'\\''")}'`).join(`
|
|
3
|
-
`)+`
|
|
4
|
-
`,B=i(z,`.job.env.${zJ(8).toString("hex")}`),O=DJ(B,y.O_WRONLY|y.O_CREAT|y.O_EXCL|y.O_NOFOLLOW,384);try{xJ(O,q),NJ(O)}finally{qJ(O)}return mJ(B,i(z,"job.env")),z}}function KJ(J){try{let Z=i(J,"job.env"),z=AJ(Z).size,Q=DJ(Z,y.O_WRONLY|y.O_NOFOLLOW);try{xJ(Q,Buffer.alloc(z)),NJ(Q)}finally{qJ(Q)}}catch{}bJ(J,{recursive:!0,force:!0})}function uJ(J){if(J.length!==64)throw new W("vm_hands_signature_invalid","unexpected ECDSA signature length");let Z=(j)=>{let q=0;while(q<j.length-1&&j[q]===0)q++;let B=j.subarray(q),O=B[0]&128?Uint8Array.of(0,...B):B;return Uint8Array.of(2,O.length,...O)},z=Z(J.subarray(0,32)),Q=Z(J.subarray(32));return Uint8Array.of(48,z.length+Q.length,...z,...Q)}import{randomUUID as oJ}from"crypto";var dJ="/app/local-runtime/session?register=vm_hands_v1",iJ="/app/local-runtime",OJ=25000,rJ=20000,sJ=1e4,TJ=5000,wJ=new Set(["pty.start","jobs.control","preview.serve.v1","display.stream.v1"]),FJ=75000,aJ=2000,nJ=1e4,tJ=new Set(["vm_hands_no_register","vm_hands_register_failed"]),eJ=3,JZ=20000,ZZ=250,$Z=2000,s=20000;function hJ(J,Z){return typeof J==="string"&&/^[A-Za-z0-9._:-]{1,160}$/.test(J)?J:Z}class g extends Error{}var zZ=64;async function kJ(J,Z){let z=[...J.modelOps.get(Z)??[]];for(let Q of z)Q.abort.abort();await Promise.race([Promise.all(z.map((Q)=>Q.settled)),new Promise((Q)=>setTimeout(Q,TJ))])}async function KZ(J){let Z=[...J.personTerminals];for(let z of Z)z.abort.abort();if(Z.length)await Promise.race([Promise.all(Z.map((z)=>z.settled)),new Promise((z)=>setTimeout(z,TJ))]);return Z.length}async function m(J,Z,z){return await kJ(J,z),Z.unbind(z)}function a(J){for(let Z of J.outbox?.splice(0)??[])Z.reject(Error("vm_hands_attempt_ended"))}var EJ=15000,QZ=1e4,FZ=1000;async function NZ(J){let Z=Date.now(),z={deviceId:null,connection:null,turns:new Map,lostAt:0,receipts:[],attest:"pending",attestWaiters:[],modelOps:new Map,personTerminals:new Set,bindsStarting:0},Q=J.log??(()=>{}),j=async(O)=>{for(let[N,h]of[...z.turns]){z.turns.delete(N),J.onTurn?.(N,null),a(h);let D=await m(z,J.agent,N).catch(()=>null);if(D)z.receipts.push({turn:h,failure:"vm_hands_bind_lost",unbound:D});Q("vm_hands.bound_dropped",{reason:O})}},q=0,B=0;try{for(let O=0;!J.signal.aborted;O++){let N=await XZ(J,z).catch((D)=>{if(D instanceof W&&z.deviceId===null&&D.code==="vm_hands_no_session"&&Date.now()-Z<nJ)return{closeCode:0,closeReason:"vm_hands_no_session"};if(D instanceof W&&z.deviceId===null&&tJ.has(D.code)&&q<eJ&&Date.now()-Z<JZ){q++;let _=Math.min(ZZ*2**(q-1),$Z);return B=Math.round(_/2+Math.random()*_/2),Q("vm_hands.register_retry",{attempt:q,code:D.code,delay_ms:B}),{closeCode:0,closeReason:"vm_hands_register_retry"}}if(D instanceof W&&z.deviceId===null)throw D;return{closeCode:0,closeReason:D instanceof Error?D.message:String(D)}});if(Q("vm_hands.session_closed",{close_code:N.closeCode,reason:N.closeReason.slice(0,120),registered:z.deviceId!==null}),N.closeCode===4401||z.attest==="refused")return;if(J.signal.aborted)return;if(z.turns.size&&Date.now()-z.lostAt>=FJ)await j("reconnect_deadline");if(z.served)z.served=!1,O=0;let h=N.closeReason==="drain_reconnect"?0:N.closeReason==="vm_hands_register_retry"?B:N.closeReason==="vm_hands_no_session"?Math.min(250*2**Math.min(O,5),2000):z.turns.size?Math.min(250*2**Math.min(O,5),5000,Math.max(0,z.lostAt+FJ-Date.now())):Math.min(500*2**O,30000);if(await new Promise((D)=>setTimeout(D,h)),z.turns.size&&Date.now()-z.lostAt>=FJ)await j("reconnect_deadline")}}finally{await j("session_ended")}}async function XZ(J,Z){let z=Z.deviceId,Q=J.log??(()=>{}),j=z?`/app/local-runtime/session?device_id=${encodeURIComponent(z)}`:dJ,q=`${J.apiOrigin.replace(/^http/,"ws")}${j}`,B=new WebSocket(q),O=0,N="",h=new Map,D=[],_=null,XJ=new Promise(($)=>{B.onclose=(X)=>{O=X.code,N=X.reason;for(let K of h.values())K.reject(new g(`session closed ${X.code}`));for(let K of Z.attestWaiters.splice(0))K(!1);h.clear(),$()}});B.onmessage=($)=>{let X;try{X=JSON.parse(String($.data))}catch{B.close(4400);return}if(X.t==="res"){let K=X;h.get(K.id)?.resolve({status:K.status,body:K.body}),h.delete(K.id);return}if(X.t==="reconnect"){let K=Math.max(0,Math.min(Number(X.after_ms)||0,FZ));Q("vm_hands.drain_reconnect",{after_ms:K}),setTimeout(()=>{try{B.close(4001,"drain_reconnect")}catch{}},K).unref?.();return}if(!_?.(X))D.push(X)};let b=($,X)=>new Promise((K,G)=>{let U=D.findIndex((L)=>$.includes(L.t));if(U>=0){K(D.splice(U,1)[0]);return}let C=setTimeout(()=>{_=null,G(new W("vm_hands_no_register",`no ${$.join("/")} in ${X} ms`))},X);_=(L)=>{if(!$.includes(L.t))return!1;return clearTimeout(C),_=null,K(L),!0}}),c=($)=>B.send(JSON.stringify($)),H=($,X)=>new Promise((K,G)=>{if(B.readyState!==WebSocket.OPEN){G(new g("session closed"));return}let U=oJ(),C=typeof X.wait_ms==="number"?X.wait_ms:0,L=setTimeout(()=>{if(!h.delete(U))return;G(new g(`no answer to ${$.split("/").pop()} in ${C+EJ} ms`)),B.close(4000,"request_timeout")},C+EJ);h.set(U,{reject:(F)=>{clearTimeout(L),G(F)},resolve:({status:F,body:Y})=>{clearTimeout(L);let P=null;try{P=Y?JSON.parse(Y):null}catch{}K({status:F,json:P})}}),c({t:"req",id:U,path:`${iJ}${$}`,body:JSON.stringify(X)})}),GJ=()=>B.close(1001,"stopping");J.signal.addEventListener("abort",GJ,{once:!0});let n,p=new Map,l=new Map,t=!1,e=new Set,JJ=new Set,ZJ=Promise.resolve(),u=!1;try{await new Promise((F,Y)=>{let P=setTimeout(()=>Y(Error("session open timeout")),QZ);B.onopen=()=>{clearTimeout(P),Q("vm_hands.ws_open",{}),F()},B.onerror=()=>{clearTimeout(P),Y(Error("session socket error"))}});let $=await b(["challenge"],5000);Q("vm_hands.challenge",{});let X=[],K=null,G;if(z){c(await J.agent.helloFrame($.challenge,Z.connection));let F=await b(["ready"],1e4);if(typeof F.vm_hands_connection==="string")Z.connection=F.vm_hands_connection;if(G={device_id:z,...F.cadence?{cadence:F.cadence}:{}},typeof F.vm_hands_probe_script==="string"){if(K=F.vm_hands_probe_script,u=!0,J.agent.phase==="registered"&&!Z.turns.size)Z.attest="pending"}Z.served=!0,Q("vm_hands.reconnected",{device_id:z});let Y=Array.isArray(F.vm_hands_binds)?F.vm_hands_binds:F.vm_hands_bind?[F.vm_hands_bind]:[];for(let[P,A]of[...Z.turns]){if(Y.some((E)=>E&&E.operation_id===A.claim.operation_id&&E.attempt_id===A.claim.attempt_id)){X.push(A),Q("vm_hands.bound_resumed",{operation_id:A.claim.operation_id});continue}Z.turns.delete(P),J.onTurn?.(P,null),a(A);let M=await m(Z,J.agent,P).catch(()=>null);if(M)Z.receipts.push({turn:A,failure:"vm_hands_bind_lost",unbound:M});Q("vm_hands.bound_dropped",{reason:"not_named_on_reconnect"})}}else{c(await J.agent.registerFrame($.challenge)),Q("vm_hands.register_sent",{});let F=await Promise.race([b(["registered","register_refused"],1e4),XJ.then(()=>{throw new W(N==="register_failed"?"vm_hands_register_failed":"vm_hands_register_closed","session closed before the register was answered")})]);if(F.t==="register_refused")throw new W(F.code,"register refused");J.agent.registered();let Y=F;if(G=Y,Z.deviceId=Y.device_id,typeof Y.vm_hands_connection==="string")Z.connection=Y.vm_hands_connection;if(typeof Y.vm_hands_probe_script==="string"){if(K=Y.vm_hands_probe_script,u=!0,J.agent.phase==="registered"&&!Z.turns.size)Z.attest="pending"}Z.served=!0,Q("vm_hands.registered",{device_id:G.device_id})}let U=async()=>{let F=await H("/heartbeat",await J.heartbeat());if(F.status>=300)throw Error(`heartbeat ${F.status}`)};await U();let C=G.cadence?.presence_interval_ms??30000;if(n=setInterval(()=>{U().catch(()=>B.close())},C),K&&Z.attest!=="accepted"&&J.agent.phase==="registered"&&!Z.turns.size)HJ(K,$.challenge);let L=(F,Y)=>{l.set(F,Y().catch(async(P)=>{if(await YJ(P,F),P instanceof g)B.close();else await $J().catch(()=>{return})}).finally(()=>{l.delete(F)}))};try{await $J();for(let F of X)F.flush=()=>WJ(F),F.flush(),L(F.claim.attempt_id,()=>PJ(F));while(!J.signal.aborted&&B.readyState===WebSocket.OPEN){let F=await H("/operations/claim",{wait_ms:Math.min(G.cadence?.claim_wait_ms??OJ,OJ)});if(F.status===204||!F.json)continue;if(F.status>=300)throw Error(`claim ${F.status}`);let Y=F.json;if(Y.capability==="hands.connect"){if(l.has(Y.attempt_id)){T({claim:Y,eventSeq:0}).complete("failed",{error_code:"vm_hands_busy"}).catch(()=>{return});continue}L(Y.attempt_id,()=>VJ(Y))}else SJ(Y).catch(()=>{return})}}catch(F){await YJ(F,null)}}finally{if(n)clearInterval(n);J.signal.removeEventListener("abort",GJ);for(let $ of Z.turns.values())$.flush=null;B.close(),await XJ,await Promise.all([...l.values()]);for(let $ of J.agent.liveBindIds){if(Z.turns.has($))continue;let X=await m(Z,J.agent,$).catch(()=>null),K=p.get($);if(X&&K)Z.receipts.push({turn:{...K,eventSeq:K.eventSeq+1},failure:"vm_hands_bind_lost",unbound:X});Q("vm_hands.bound_dropped",{reason:"bound_after_loss"})}for(let $ of e)$.abort()}return{closeCode:O,closeReason:N};async function YJ($,X){if($ instanceof g){if(!t&&Z.turns.size)Z.lostAt=Date.now();t=!0}else{let K=X!==null?[X]:[...new Set([...Z.turns.keys(),...J.agent.liveBindIds])];if(X===null)t=!0;for(let G of K){let U=Z.turns.get(G);if(Z.turns.delete(G),U)a(U),J.onTurn?.(G,null);if(J.agent.liveBindIds.includes(G)){let C=await m(Z,J.agent,G).catch(()=>null),L=p.get(G)??U;if(C&&L)Z.receipts.push({turn:{...L,eventSeq:L.eventSeq+1},failure:"vm_hands_bind_lost",unbound:C})}}}Q("vm_hands.session_lost",{error:$ instanceof Error?$.message:String($),bound_kept:Z.turns.size})}function T($){let X=$.claim,K={attempt_id:X.attempt_id,attempt_token:X.attempt_token},G=encodeURIComponent(X.operation_id);return{fence:K,op:G,complete:(C,L={})=>H(`/operations/${G}/complete`,{...K,status:C,...L}),emit:(C,L)=>{let F=($.chain??Promise.resolve()).catch(()=>{return}).then(()=>U(C,L));return $.chain=F,F}};async function U(C,L){let F=$.eventSeq,Y=(E)=>H(`/operations/${G}/events`,{...K,event_seq_start:E,events:[{kind:C,payload:{sequence:E,capability:String(X.capability??"hands.connect"),data:L}}]}),P=F,A=await Y(P),M=A.status===409?A.json?.expected_event_seq:void 0;if(typeof M==="number"&&M===F+1)A={status:200,json:{duplicate:!0}};else if(typeof M==="number"&&M>=0&&M!==F)P=M,A=await Y(P);if(A.status<300)$.eventSeq=P+1;return A}}function gJ($){return(X,K)=>new Promise((G,U)=>{if(Z.turns.get($.claim.attempt_id)!==$){U(Error("vm_hands_attempt_ended"));return}if($.outbox??=[],$.outbox.length>=zZ){U(Error("vm_hands_outbox_full"));return}$.outbox.push({kind:X,data:K,resolve:G,reject:U}),$.flush?.()})}function WJ($){if(JJ.has($))return;JJ.add($),(async()=>{try{while($.outbox?.length&&Z.turns.get($.claim.attempt_id)===$&&B.readyState===WebSocket.OPEN){let X=$.outbox[0],K;try{K=await T($).emit(X.kind,X.data)}catch(G){if(G instanceof g)return;K={status:500}}if($.outbox.shift(),K.status<300)X.resolve();else X.reject(Error(`${X.kind} refused ${K.status}`))}}finally{JJ.delete($)}})()}async function HJ($,X){try{let K=await J.agent.attestFrame($,X);if(B.readyState!==WebSocket.OPEN)return;c(K);let G=await b(["attested","attest_refused"],15000);Z.attest=G.t==="attested"?"accepted":"refused";for(let U of Z.attestWaiters.splice(0))U(Z.attest==="accepted");if(Q("vm_hands.attest",{result:Z.attest,exit_code:K.exit_code,...G.t==="attest_refused"?{code:String(G.code??"")}:{}}),Z.attest==="refused")B.close(4401,"attest_refused")}catch(K){Q("vm_hands.attest_failed",{code:K instanceof W?K.code:"probe_error"});for(let G of Z.attestWaiters.splice(0))G(!1);if(Z.attest!=="accepted")B.close(4000,"attest_unanswered")}}async function VJ($){let X=u&&Z.attest==="pending",K=$.vm_hands_attest,G=K;if(Z.attest==="refused"){Q("vm_hands.claim_attest_refused",{said:typeof K==="string"?K.slice(0,16):typeof K,local:Z.attest}),await T({claim:$,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}if(G==="accepted"){if(!X&&Z.attest!=="accepted"){Z.attest="accepted";for(let w of Z.attestWaiters.splice(0))w(!0)}}else if(G!=="pending"||!X&&Z.attest!=="accepted"){Q("vm_hands.claim_attest_refused",{said:typeof K==="string"?K.slice(0,16):typeof K,local:Z.attest}),await T({claim:$,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}if(Z.attest!=="accepted"){let w=Date.parse($.lease_until)-Date.now()-5000,S=Math.max(0,Math.min(s,Number.isFinite(w)?w:s));if(!await new Promise((d)=>{let x=setTimeout(()=>d(!1),S);Z.attestWaiters.push((k)=>{clearTimeout(x),d(k)})})){await T({claim:$,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}}let U={claim:$,eventSeq:0},{complete:C,emit:L}=T(U),F;try{if($.capability!=="hands.connect")throw new W("vm_hands_bind_invalid","not hands.connect");F=!QJ($)}catch(w){Q("vm_hands.bind_refused",{code:w instanceof W?w.code:"unexpected"}),await C("failed",{error_code:w instanceof W?w.code:"vm_hands_bind_invalid"});return}let Y;Z.bindsStarting++;try{let w=await KZ(Z);if(w)Q("vm_hands.person_terminals_closed",{count:w});Y=await J.agent.bind(MJ($))}catch(w){Q("vm_hands.bind_refused",{code:w instanceof W?w.code:"unexpected"}),await C("failed",{error_code:w instanceof W?w.code:"vm_hands_bind_failed"});return}finally{Z.bindsStarting--}let P={...Y.ready_data??J.readyData({launchId:Y.launch_id,claim:$})};if(F)delete P.environment_installed;let A=!F&&Y.snapshot_revision!==null&&Y.snapshot_id!==null?{environment_installed:{snapshot_id:Y.snapshot_id,installed_revision:Y.snapshot_revision}}:{};p.set($.attempt_id,{claim:$,launchId:Y.launch_id,readyData:P,eventSeq:U.eventSeq,ackSeq:-1});let M=await L("hands.ready",{...P,...A,vm_hands:{layout:Y.layout,policy_digest:Y.policy_digest,launch_id:Y.launch_id}});if(p.delete($.attempt_id),M.status>=300){await kJ(Z,$.attempt_id),await J.agent.boundRefused($.attempt_id),await C("failed",{error_code:hJ(M.json?.error,"vm_hands_probe_failed")});return}let E={claim:$,launchId:Y.launch_id,readyData:P,eventSeq:U.eventSeq,ackSeq:-1};Z.turns.set($.attempt_id,E),E.flush=()=>WJ(E),J.onTurn?.($.attempt_id,gJ(E)),await PJ(E)}async function PJ($){let{fence:X,op:K}=T($),G=null,U=null,C=J.agent.executorExited($.claim.attempt_id).then((L)=>{return U=L,null});J:for(;;){let L=await Promise.race([C,H(`/operations/${K}/heartbeat`,{...X,control_ack_seq:$.ackSeq,wait_ms:rJ})]);if(!L){G="vm_hands_executor_exited",Q("vm_hands.executor_exited",{reason:U});break}if(L.status>=300)break;let F=(L.json?.controls??[]).slice().sort((Y,P)=>Y.seq-P.seq);for(let Y of F){if(Y.seq<=$.ackSeq)continue;if(Y.kind==="operation.cancel"||Y.kind==="cancel"){$.ackSeq=Y.seq;break J}if(Y.kind===_J)try{await yJ($,Y.payload??{})}catch(P){if(P instanceof g)throw P;G=P instanceof W?P.code:"environment_unavailable";let A=P&&typeof P==="object"&&"code"in P&&typeof P.code==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(P.code)?P.code:null;Q("vm_hands.environment_refused",{code:G,cause:A});break J}$.ackSeq=Y.seq}}await vJ($,G)}async function SJ($){let X=$,K={claim:X,eventSeq:0},{complete:G,emit:U,fence:C,op:L}={...T(K)},F=$.vm_hands_origin==="person"?"person":"model",Y=String($.capability??"");if(!J.executeOp){await G("failed",{error_code:"vm_hands_op_unsupported"});return}if($.vm_hands_attest==="accepted"&&Z.attest==="pending"&&!(u&&Z.attest==="pending")){Z.attest="accepted";for(let x of Z.attestWaiters.splice(0))x(!0)}if(Z.attest!=="accepted"){let x=Date.parse(String($.lease_until??""))-Date.now()-5000,k=Z.attest==="refused"?0:Math.max(0,Math.min(s,Number.isFinite(x)?x:s));if(!(k>0&&await new Promise((BJ)=>{let IJ=setTimeout(()=>BJ(!1),k);Z.attestWaiters.push((RJ)=>{clearTimeout(IJ),BJ(RJ)})}))){await G("failed",{error_code:"vm_hands_unattested"});return}}let P=J.agent.bindIdForRun(X.run_id);if(F==="model"&&P===null){await G("failed",{error_code:"vm_hands_not_bound"});return}let A=Y==="pty.start"&&F==="person"&&!$.authority;if(A&&(J.agent.liveBindIds.length>0||Z.bindsStarting>0)){await G("failed",{error_code:"vm_hands_bound"});return}if(wJ.has(Y)&&!A&&J.agent.liveBindIds.length===0){await G("failed",{error_code:"vm_hands_not_bound"});return}if(F==="model"&&P||wJ.has(Y)&&!A)J.agent.opServed();let M=new AbortController;e.add(M);let E,w=new Promise((x)=>{E=x}),S={abort:M,settled:w};if(A)Z.personTerminals.add(S);if(F==="model"&&P){let x=Z.modelOps.get(P)??new Set;x.add(S),Z.modelOps.set(P,x),await J.agent.environmentInstalled(P,aJ,M.signal)}let o=-1,d=setInterval(()=>{H(`/operations/${L}/heartbeat`,{...C,control_ack_seq:o,wait_ms:0}).then((x)=>{if(x.status>=300){M.abort();return}let k=x.json?.controls??[];for(let V of k)if(o=Math.max(o,V.seq),V.kind==="operation.cancel"||V.kind==="cancel")M.abort()},()=>M.abort())},sJ);try{let x=await J.executeOp({kind:F,claim:$,...F==="model"&&P?{bindId:P}:{},signal:M.signal,emit:async(V)=>{await U(V.kind,V.data??{})}}),k=await G(x.status,{...x.result?{result:x.result}:{},...x.error_code?{error_code:hJ(x.error_code,"vm_hands_op_failed")}:{}});Q("vm_hands.op",{capability:Y,kind:F,status:x.status,code:x.error_code??null,...k.status>=300?{complete_status:k.status,complete_error:String(k.json?.error??"").slice(0,64)}:{}})}finally{if(clearInterval(d),e.delete(M),P)Z.modelOps.get(P)?.delete(S);Z.personTerminals.delete(S),E()}}async function vJ($,X){let K=$.claim.attempt_id;if(Z.turns.get(K)===$)Z.turns.delete(K);J.onTurn?.(K,null),a($);let G=await m(Z,J.agent,K);Z.receipts.push({turn:$,failure:X,unbound:G}),await $J()}function $J(){return ZJ=ZJ.then(jJ,jJ),ZJ}async function jJ(){while(Z.receipts.length){let{turn:$,failure:X,unbound:K}=Z.receipts[0],{complete:G,emit:U}=T($);try{if(await U("hands.stopped",{...$.readyData,reason_code:X?"failed":"cancelled",killed_verified:K.killed_verified,shredded:K.shredded,...K.srt_fallbacks?{vm_hands_srt_fallbacks:K.srt_fallbacks}:{}}),X)await G("failed",{error_code:X});else await G("cancelled",{error_code:"driver_stopped"})}catch(C){if(C instanceof g)return}Z.receipts.shift()}}async function yJ($,X){let{fence:K,op:G}=T($),U=X.snapshot_id;if(X.version!==1||typeof U!=="string"||Object.keys(X).length!==2)throw new W("vm_hands_env_invalid","invalid environment delivery");let C=await H(`/operations/${G}/environment`,{...K,snapshot_id:U}),L=C.json?.environment_sealed;if(C.status!==200||!L||C.json?.payload!==void 0)throw new W("vm_hands_env_invalid","environment not delivered sealed");let F=await J.agent.deliverEnvironment({attemptId:$.claim.attempt_id,snapshotId:U,deviceId:Z.deviceId??"",sealed:L});if((await H(`/operations/${G}/environment-ack`,{...K,...F})).status>=300)throw new W("vm_hands_env_ack_refused","environment ack refused")}}
|
|
5
|
-
export{jZ as xa,lJ as ya,NZ as za};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{r as a}from"./vm-hands-entry-lite-d7y6aah1.js";import"./vm-hands-entry-lite-b775ysr4.js";import"./vm-hands-entry-lite-mcv6pse6.js";import"./vm-hands-entry-lite-hh24bq0d.js";import"./vm-hands-entry-lite-rjwk6sfj.js";import"./vm-hands-entry-lite-y3wncwjd.js";import"./vm-hands-entry-lite-7fx4xtf6.js";export{a as configureWorkerSandbox};
|