@reason-machines/cli-linux-x64 0.2.505 → 0.2.506
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/THIRD_PARTY_NOTICES.txt +8 -7
- package/bin/reason +2 -2
- package/bin/runtime/srt/sandbox-runtime.mjs +52 -52
- package/bin/vm-hands/api-credentials-09xx3z37.js +2 -0
- package/bin/vm-hands/api-s4znv8fp.js +2 -0
- package/bin/vm-hands/connect-cli-f76njmkm.js +2 -0
- package/bin/vm-hands/credentials-drj5ktpt.js +2 -0
- package/bin/vm-hands/custom-endpoint-device-j1x988g0.js +2 -0
- package/bin/vm-hands/desktop-account-4525j7h3.js +2 -0
- package/bin/vm-hands/device-workspace-pt07525s.js +2 -0
- package/bin/vm-hands/fsevents-8zxmv89w.js +2 -0
- package/bin/vm-hands/hands-worker-source-atg5dc7b.js +2 -0
- package/bin/vm-hands/index-ttmxy9nd.js +12818 -0
- package/bin/vm-hands/install-receipt-6v65enmf.js +2 -0
- package/bin/vm-hands/local-automation-qbgbpftn.js +2 -0
- package/bin/vm-hands/local-capabilities-3j6ftyf5.js +2 -0
- package/bin/vm-hands/local-desktop-users-9dqayaej.js +2 -0
- package/bin/vm-hands/local-display-mac-fnp3317m.js +2 -0
- package/bin/vm-hands/local-display-session-8dc6mct3.js +2 -0
- package/bin/vm-hands/local-display-video-zj8mz5vs.js +2 -0
- package/bin/vm-hands/local-managed-process-qgj5jfnb.js +2 -0
- package/bin/vm-hands/local-pty-session-5yh2a63r.js +2 -0
- package/bin/vm-hands/managed-runtime-jwxh8gfp.js +2 -0
- package/bin/vm-hands/network-contract-rzw769gw.js +2 -0
- package/bin/vm-hands/package-r7sgmw4t.js +2 -0
- package/bin/vm-hands/permissions-j5ggzkk4.js +2 -0
- package/bin/vm-hands/reason-hands-protocol-8fgk2s53.js +2 -0
- package/bin/vm-hands/serve-service-2m11vpyd.js +2 -0
- package/bin/vm-hands/status-qg16wxre.js +10 -0
- package/bin/vm-hands/version-96pq5c8m.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-23m94yra.js +539 -0
- package/bin/vm-hands/vm-hands-entry-lite-38g65s5x.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-3h9rka2b.js +14 -0
- package/bin/vm-hands/vm-hands-entry-lite-3sjkzhf6.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-5gevvgec.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-5tbntcyq.js +42 -0
- package/bin/vm-hands/vm-hands-entry-lite-622t4qbv.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-s8ty42st.js → vm-hands-entry-lite-69ng6mye.js} +5 -9
- package/bin/vm-hands/vm-hands-entry-lite-6x1an7es.js +7 -0
- package/bin/vm-hands/vm-hands-entry-lite-7777m86y.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-b7wy89y0.js → vm-hands-entry-lite-77j164ps.js} +54 -54
- package/bin/vm-hands/vm-hands-entry-lite-87vmbt38.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-8wcyveeh.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-b4ebg75b.js +52 -0
- package/bin/vm-hands/vm-hands-entry-lite-cqramfsh.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-eabever7.js +112 -0
- package/bin/vm-hands/vm-hands-entry-lite-ewr54tpc.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-ezbs3nn1.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-f62fvme8.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-f69t48dj.js +4 -0
- package/bin/vm-hands/{vm-hands-entry-lite-8p8hz0j1.js → vm-hands-entry-lite-fcvf8md1.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-gs7j14bz.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-gvjffc5t.js +65 -0
- package/bin/vm-hands/vm-hands-entry-lite-hmaazqdr.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-mcjca0ez.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-mk5ayds8.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-ncbzy69k.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-nkp4ccvt.js +9 -0
- package/bin/vm-hands/vm-hands-entry-lite-np07qyeq.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-nqdstx24.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-nwrqwqhh.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-ppzj5jgc.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-psywfz8m.js +9 -0
- package/bin/vm-hands/vm-hands-entry-lite-qpdpzg8g.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-qy9xg6em.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-r3vd5k1q.js +452 -0
- package/bin/vm-hands/{vm-hands-entry-lite-xd2dn3n8.js → vm-hands-entry-lite-rfz60hb3.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-rzr2ncf5.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-swrymqj9.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-t0wbspg5.js +126 -0
- package/bin/vm-hands/vm-hands-entry-lite-t3a1fsnk.js +128 -0
- package/bin/vm-hands/vm-hands-entry-lite-tebh7dcm.js +6 -0
- package/bin/vm-hands/vm-hands-entry-lite-txd50spx.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-v9qq2cgv.js +4 -0
- package/bin/vm-hands/{vm-hands-entry-lite-c8bf82tx.js → vm-hands-entry-lite-wrvz9jxy.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-x39tmj7j.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-xh59ch7y.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-xwqrndky.js +105 -0
- package/bin/vm-hands/vm-hands-entry-lite-yretc2th.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite.js +3 -1
- package/bin/vm-hands/vm-hands-executor-bcw4gm80.js +12 -0
- package/bin/vm-hands/vm-hands-op-runner-r4m9whbb.js +2 -0
- package/bin/vm-hands/vm-hands-runtime-x79a9j7q.js +4 -0
- package/bin/vm-hands/worker-preview-readiness-7xtgxsar.js +2 -0
- package/bin/vm-hands/worker-sandbox-s9pyac8p.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-credentials-23k36ayh.js +0 -2
- package/bin/vm-hands/api-jd29p2kc.js +0 -2
- package/bin/vm-hands/ask-relay-zpp0rkhg.js +0 -4
- package/bin/vm-hands/connect-cli-xyxgcg6z.js +0 -2
- package/bin/vm-hands/credentials-byna24dv.js +0 -2
- package/bin/vm-hands/custom-endpoint-device-p2agcsk0.js +0 -2
- package/bin/vm-hands/desktop-account-z16mmkxg.js +0 -2
- package/bin/vm-hands/device-workspace-y0tk3ne8.js +0 -2
- package/bin/vm-hands/hands-worker-source-0qa16xzj.js +0 -2
- package/bin/vm-hands/index-h6xkz48h.js +0 -12818
- package/bin/vm-hands/install-receipt-nnragt7p.js +0 -2
- package/bin/vm-hands/local-automation-xbpca0f3.js +0 -2
- package/bin/vm-hands/local-capabilities-30m8pzpv.js +0 -2
- package/bin/vm-hands/local-desktop-users-gxfywsan.js +0 -2
- package/bin/vm-hands/local-display-mac-n236gkpe.js +0 -2
- package/bin/vm-hands/local-display-session-ddafdm8k.js +0 -2
- package/bin/vm-hands/local-display-video-gha54xwa.js +0 -2
- package/bin/vm-hands/local-managed-process-0zwxyqxd.js +0 -2
- package/bin/vm-hands/local-pty-session-w1yrmjm0.js +0 -2
- package/bin/vm-hands/managed-runtime-8y90twae.js +0 -2
- package/bin/vm-hands/network-contract-v0fkg94d.js +0 -2
- package/bin/vm-hands/network-sign-in-3dkdkh3a.js +0 -34
- package/bin/vm-hands/package-z2dk6xva.js +0 -2
- package/bin/vm-hands/permissions-ga1ax8wd.js +0 -2
- package/bin/vm-hands/reason-hands-protocol-vzgxd159.js +0 -2
- package/bin/vm-hands/serve-service-42nqanvr.js +0 -2
- package/bin/vm-hands/status-m0g7k47a.js +0 -96
- package/bin/vm-hands/version-ye6800p2.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-00y3kn86.js +0 -7
- package/bin/vm-hands/vm-hands-entry-lite-0572m6cr.js +0 -344
- package/bin/vm-hands/vm-hands-entry-lite-07q2xvk1.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-0a4cy8gw.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-1nj03gbj.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-26xb026c.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-33h8294z.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-3882raa5.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-3rg3znp8.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-4swa18qz.js +0 -10
- package/bin/vm-hands/vm-hands-entry-lite-56v9haps.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-6x5pj2y0.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-8twscwtw.js +0 -112
- package/bin/vm-hands/vm-hands-entry-lite-8xe0wzp9.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-ah2ep922.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-b0p8f295.js +0 -52
- package/bin/vm-hands/vm-hands-entry-lite-c5gt0086.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-dgmap6z4.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-dhqmbqsh.js +0 -9
- package/bin/vm-hands/vm-hands-entry-lite-e1xjfj57.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-e4hwb89r.js +0 -66
- package/bin/vm-hands/vm-hands-entry-lite-g6r5xrk0.js +0 -105
- package/bin/vm-hands/vm-hands-entry-lite-ghhpgt3v.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-h5smacqn.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-jd31as70.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-k9n1pk42.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-kqbats5n.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-p9fwt68c.js +0 -42
- package/bin/vm-hands/vm-hands-entry-lite-pkk555dx.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-pmw3ycgc.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-q9g11dbj.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-r374pchj.js +0 -9
- package/bin/vm-hands/vm-hands-entry-lite-r665z809.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-rck5h8fr.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-rj8yq6gp.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-s8zfzv0k.js +0 -6
- package/bin/vm-hands/vm-hands-entry-lite-tafgty5k.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-tbdcmq09.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-td309c1y.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-v0bp1v66.js +0 -128
- package/bin/vm-hands/vm-hands-entry-lite-v0k8b768.js +0 -452
- package/bin/vm-hands/vm-hands-entry-lite-v4r1fggm.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-vqr3zrqr.js +0 -539
- package/bin/vm-hands/vm-hands-entry-lite-wbfmc0xn.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-x3pbyg92.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-yqn8h1p0.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-zj3hb5jk.js +0 -127
- package/bin/vm-hands/vm-hands-entry-lite-zz8tr0bm.js +0 -12
- package/bin/vm-hands/vm-hands-executor-6tncheya.js +0 -12
- package/bin/vm-hands/vm-hands-op-runner-s1ghsym7.js +0 -2
- package/bin/vm-hands/vm-hands-runtime-k6egwk2t.js +0 -4
- package/bin/vm-hands/worker-preview-readiness-wh0yg1dz.js +0 -2
- package/bin/vm-hands/worker-sandbox-s054x4zw.js +0 -2
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{createHash as f,createPublicKey as V,verify as G}from"crypto";var Y="libara_device_keychain.dylib",H="libreason_device_keychain.dylib",k=1,x=2,h=536870912,R=262144;var U=["darwin-arm64","darwin-x64"];class J extends Error{code;constructor(z,F){super(F);this.code=z;this.name="ManagedRuntimeError"}}var C=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/,N=/^[a-f0-9]{64}$/;function X(z){return Boolean(z)&&typeof z==="object"&&!Array.isArray(z)}function $(z,F,Q=[]){let Z=new Set([...F,...Q]);return F.every((W)=>(W in z))&&Object.keys(z).every((W)=>Z.has(W))}function B(z){return typeof z==="string"&&C.test(z)}function O(z){return typeof z==="string"&&!Number.isNaN(Date.parse(z))&&new Date(z).toISOString()===z}function I(z){return U.includes(z)}function c(z,F){if(!B(z)||!I(F))throw new J("invalid_release_asset","Invalid managed runtime release asset.")}function K(z,F){return c(z,F),`reason-runtime-v${z}-${F}`}function g(z,F){return`${K(z,F)}-${H}`}var o="managed-runtime-identity.json",D="reason-macos-background-identity-v1";function q(z){if(z===null)return"null";if(typeof z==="string"||typeof z==="boolean")return JSON.stringify(z);if(typeof z==="number"){if(!Number.isFinite(z))throw new J("invalid_manifest","Manifest numbers must be finite.");return JSON.stringify(z)}if(Array.isArray(z))return`[${z.map((F)=>q(F)).join(",")}]`;if(X(z))return`{${Object.keys(z).sort().map((F)=>`${JSON.stringify(F)}:${q(z[F])}`).join(",")}}`;throw new J("invalid_manifest","Manifest contains an unsupported value.")}function j(z){if(!X(z)||!$(z,["url","sha256","size_bytes"])||typeof z.url!=="string"||typeof z.sha256!=="string"||!N.test(z.sha256)||typeof z.size_bytes!=="number"||!Number.isSafeInteger(z.size_bytes)||z.size_bytes<=0||z.size_bytes>h)throw new J("invalid_manifest","Manifest contains an invalid runtime artifact.");let F;try{F=new URL(z.url)}catch{throw new J("invalid_manifest","Runtime artifact URL is invalid.")}if(F.protocol!=="https:"||F.username||F.password||F.hash)throw new J("invalid_manifest","Runtime artifact URL must be an HTTPS URL without credentials or a fragment.");return{url:F.toString(),sha256:z.sha256,size_bytes:z.size_bytes}}function b(z){if(!X(z)||!$(z,["broker","credential_library"]))throw new J("invalid_manifest","Manifest must bind the broker and credential library as one runtime.");return{broker:j(z.broker),credential_library:j(z.credential_library)}}function _(z){if(!X(z)||!$(z,["schema_version","version","published_at","artifacts"])||z.schema_version!==x||!B(z.version)||!O(z.published_at)||!X(z.artifacts)||!$(z.artifacts,[...U]))throw new J("invalid_manifest","Managed Reason runtime manifest is invalid.");return{schema_version:x,version:z.version,published_at:z.published_at,artifacts:{"darwin-arm64":b(z.artifacts["darwin-arm64"]),"darwin-x64":b(z.artifacts["darwin-x64"])}}}function M(z){if(!X(z)||!$(z,["schema_version","version","published_at","artifacts"])||z.schema_version!==k||!B(z.version)||!O(z.published_at)||!X(z.artifacts)||!$(z.artifacts,[...U]))throw new J("invalid_manifest","Legacy managed runtime manifest is invalid.");return{schema_version:k,version:z.version,published_at:z.published_at,artifacts:{"darwin-arm64":j(z.artifacts["darwin-arm64"]),"darwin-x64":j(z.artifacts["darwin-x64"])}}}function A(z){if(!X(z)||!$(z,["schema","version","published_at","artifacts"])||z.schema!==D||!B(z.version)||!O(z.published_at)||!X(z.artifacts)||!$(z.artifacts,[...U]))throw new J("invalid_manifest","Reason background identity manifest is invalid.");return{schema:D,version:z.version,published_at:z.published_at,artifacts:{"darwin-arm64":j(z.artifacts["darwin-arm64"]),"darwin-x64":j(z.artifacts["darwin-x64"])}}}function S(z){if(typeof z!=="string"||!/^[A-Za-z0-9+/]+={0,2}$/.test(z))throw new J("invalid_signature","Runtime manifest signature is invalid.");let F=Buffer.from(z,"base64");if(F.length!==64||F.toString("base64")!==z)throw new J("invalid_signature","Runtime manifest signature is invalid.");return F}function L(z){let F=z;if(typeof z==="string")try{F=JSON.parse(z)}catch{throw new J("invalid_manifest","Managed Reason runtime manifest is not valid JSON.")}if(!X(F)||!$(F,["key_id","manifest","signature"])||typeof F.key_id!=="string"||!/^[A-Za-z0-9._-]{1,80}$/.test(F.key_id)||typeof F.signature!=="string")throw new J("invalid_manifest","Signed managed Reason runtime manifest is invalid.");return F}function E(z,F){let Q=L(z),Z=F[Q.key_id];if(!Z)throw new J("untrusted_key","Runtime manifest was signed by an unknown key.");let W=_(Q.manifest),w=S(Q.signature),P=!1;try{P=G(null,Buffer.from(q(W)),V(Z),w)}catch{throw new J("invalid_signature","Runtime manifest signature could not be verified.")}if(!P)throw new J("invalid_signature","Runtime manifest signature did not match.");return{key_id:Q.key_id,manifest:W,signature:Q.signature}}function d(z,F){let Q=L(z),Z=F[Q.key_id];if(!Z)throw new J("untrusted_key","Background identity manifest was signed by an unknown key.");let W=A(Q.manifest),w=S(Q.signature),P=!1;try{P=G(null,Buffer.from(q(W)),V(Z),w)}catch{throw new J("invalid_signature","Background identity manifest signature could not be verified.")}if(!P)throw new J("invalid_signature","Background identity manifest signature did not match.");return{key_id:Q.key_id,manifest:W,signature:Q.signature}}function i(z,F){let Q=z;if(typeof z==="string")try{Q=JSON.parse(z)}catch{throw new J("invalid_manifest","Legacy managed runtime manifest is not valid JSON.")}if(!X(Q)||!$(Q,["key_id","manifest","signature"])||typeof Q.key_id!=="string"||!/^[A-Za-z0-9._-]{1,80}$/.test(Q.key_id)||typeof Q.signature!=="string")throw new J("invalid_manifest","Signed legacy managed runtime manifest is invalid.");let Z=F[Q.key_id];if(!Z)throw new J("untrusted_key","Legacy runtime manifest was signed by an unknown key.");let W=M(Q.manifest),w=S(Q.signature),P=!1;try{P=G(null,Buffer.from(q(W)),V(Z),w)}catch{throw new J("invalid_signature","Legacy runtime manifest signature could not be verified.")}if(!P)throw new J("invalid_signature","Legacy runtime manifest signature did not match.");return{key_id:Q.key_id,manifest:W,signature:Q.signature}}function y(z){return f("sha256").update(z).digest("hex")}function n(z,F){if(z.byteLength!==F.size_bytes)throw new J("artifact_size_mismatch","Runtime artifact size did not match its manifest.");if(y(z)!==F.sha256)throw new J("artifact_checksum_mismatch","Runtime artifact checksum did not match its manifest.")}import{existsSync as p}from"fs";import{join as T}from"path";function r(z){let F=T(z,H);return p(F)?F:T(z,Y)}
|
|
3
|
-
export{Y as xj,H as yj,k as zj,x as Aj,h as Bj,R as Cj,U as Dj,J as Ej,K as Fj,g as Gj,o as Hj,q as Ij,E as Jj,d as Kj,i as Lj,y as Mj,n as Nj,r as Oj};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{ll as F}from"./vm-hands-entry-lite-v4r1fggm.js";import{Gl as X}from"./vm-hands-entry-lite-pkk555dx.js";import{readdirSync as M,readFileSync as P}from"fs";import{userInfo as N}from"os";var w="--vm-hands-op-runner-kind=person",E="--vm-hands-op-runner-kind=surface",V="--vm-hands-surface-uid=",k="--vm-hands-surface-dir=",f=new Set(["automation.call.v1","display.stream.v1","preview.serve.v1"]);function b(q){let $=new Set([q]),Z=[];try{Z=M("/proc")}catch{}for(let B of Z){if(!/^\d+$/.test(B))continue;try{let W=P(`/proc/${B}/stat`,"utf8");if(Number(W.slice(W.lastIndexOf(")")+2).split(" ")[3])===q)$.add(Number(B))}catch{}}for(let B of $)try{process.kill(B,"SIGKILL")}catch{}}var v=(q)=>{let $=globalThis.Bun;if(!$)throw new F("pty_unavailable","Reason terminals require the Bun runtime.");let Z=$.spawn({cmd:[q.shell,...q.args],cwd:q.cwd,env:{...q.environment,TERM:"xterm-256color"},terminal:{cols:q.cols,rows:q.rows,data:(K,J)=>q.onData(J)}}),B=Z.terminal,W=()=>{b(Z.pid);try{B?.close()}catch{}};if(!B)throw W(),new F("pty_unavailable","Reason could not allocate a pseudo-terminal.");return{write:(K)=>B.write(K),resize:(K,J)=>B.resize(K,J),kill:W,exited:Z.exited.then((K)=>typeof K==="number"?K:null,()=>null)}};function R(){let q=(()=>{try{return N().username}catch{return}})();return{PATH:process.env.PATH,HOME:process.env.HOME,SHELL:process.env.SHELL,LANG:"C.UTF-8",...q?{USER:q,LOGNAME:q}:{}}}async function S(q){let[{localAutomationAvailable:$},{localDisplayReady:Z},{localDisplayVideoAvailable:B},{probeWorkerPreview:W},I]=await Promise.all([import("./local-automation-xbpca0f3.js"),import("./local-display-session-ddafdm8k.js"),import("./local-display-video-gha54xwa.js"),import("./worker-preview-readiness-wh0yg1dz.js"),import("fs")]),K=AbortSignal.timeout(15000),J=null;try{I.mkdirSync(q,{recursive:!0,mode:448}),J=I.mkdtempSync(`${q}/probe-`);let[G,Y,T]=await Promise.all([Promise.resolve().then(()=>$()).catch(()=>!1),Z().catch(()=>!1),W(J,K).catch(()=>!1)]);return{t:"readiness",display_video:Y&&await B().catch(()=>!1),lanes:{"automation.call.v1":G,"display.stream.v1":Y,"preview.serve.v1":T,"tunnel.open":T,"tunnel.close":T}}}finally{if(J)I.rmSync(J,{recursive:!0,force:!0})}}async function y(){let[{executeLocalOperation:q,spawnCaptured:$},{runLocalPtySession:Z},{configureDesktopAccount:B,desktopAccount:W},{configureWorkerSandbox:I}]=await Promise.all([import("./local-capabilities-30m8pzpv.js"),import("./local-pty-session-w1yrmjm0.js"),import("./desktop-account-z16mmkxg.js"),import("./worker-sandbox-s054x4zw.js")]);I();let K=process.argv.includes(w),J=process.argv.includes(E),G=(Q,j,x)=>$(Q,j[0]==="-lic"?["-lc",...j.slice(1)]:j,x),Y=(process.geteuid?.()??0)!==0;if(J){Y=!1;let Q=process.argv.find((j)=>j.startsWith(V))?.slice(V.length);if((process.geteuid?.()??-1)===0&&Q)try{Y=B({value:Q})!==null&&W()!==null}catch{Y=!1}}let T=new Map,h=new Map,L=(Q)=>{try{process.send?.(Q)}catch{}};if(process.on("message",(Q)=>{let j=Q;if(j?.t==="cancel"){T.get(j.id)?.abort();return}if(j?.t==="control"){let z=h.get(j.id);if(J&&z&&j.control&&typeof j.control.kind==="string")import("./local-managed-process-0zwxyqxd.js").then(({controlManagedDeviceProcess:O})=>O(z,{kind:j.control.kind,payload:j.control.payload??{}})).catch(()=>!1);return}if(j?.t==="retire"){if(J&&typeof j.operation_id==="string"&&typeof j.status==="string")import("./local-managed-process-0zwxyqxd.js").then(({retireManagedDeviceProcess:z})=>z(j.operation_id,j.status)).catch(()=>!1);return}if(j?.t!=="op")return;if(!Y){L({t:"done",id:j.id,completion:{status:"failed",error_code:"vm_hands_payload_account_unavailable"}});return}let x=j.claim.capability;if(x==="pty.start"&&!K){L({t:"done",id:j.id,completion:{status:"failed",error_code:"capability_not_granted"}});return}if(f.has(x)!==J){L({t:"done",id:j.id,completion:{status:"failed",error_code:"capability_not_granted"}});return}let H=new AbortController;T.set(j.id,H),h.set(j.id,j.claim);let U=x==="pty.start"?{runPtySession:(z)=>Z(z,{spawnPty:v,environment:R(),loadProxy:()=>null})}:{worker:j.worker,...x==="exec.full"?{spawnFullControl:G}:{}};q(j.state,j.claim,{...U,signal:H.signal,emit:(z)=>{let{deliverySignal:O,...C}=z;L({t:"event",id:j.id,event:C})}}).then((z)=>L({t:"done",id:j.id,completion:z}),(z)=>L({t:"done",id:j.id,completion:{status:"failed",error_code:z&&typeof z==="object"&&"code"in z&&typeof z.code==="string"?z.code:"vm_hands_op_failed"}})).finally(()=>{T.delete(j.id),h.delete(j.id)})}),process.on("disconnect",()=>process.exit(0)),J){let Q=process.argv.find((x)=>x.startsWith(k))?.slice(k.length),j={t:"readiness",display_video:!1,lanes:{}};L(Y&&Q?await S(Q).catch(()=>j):j)}await new Promise(()=>{})}
|
|
3
|
-
export{w as a,E as b,V as c,k as d,f as e,v as f,y as g};
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Fh as M,Mh as QQ,Nh as ZQ,Ph as f$,Sh as qQ,Uh as zQ}from"./vm-hands-entry-lite-8twscwtw.js";import{wj as MJ}from"./vm-hands-entry-lite-k9n1pk42.js";import{_j as OJ}from"./vm-hands-entry-lite-r374pchj.js";import{mk as G$}from"./vm-hands-entry-lite-56v9haps.js";import{ll as c}from"./vm-hands-entry-lite-v4r1fggm.js";import{execFile as N0,spawn as s$}from"child_process";import{existsSync as R0}from"fs";import{connect as I0}from"net";function NQ(){let $=new Set,J=null,Q=(q)=>({holder:J?.viewer??null,you:J===q,same_user:Boolean(J?.viewer&&q.viewer&&J.viewer.user_id===q.viewer.user_id)}),Z=()=>{for(let q of $)q.notify(Q(q))};return{join(q){return $.add(q),q.notify(Q(q)),()=>{if(!$.delete(q))return;if(J!==q)return;J=null,Z()}},claim(q){if(J===q||!$.has(q))return;J=q,Z()}}}var HJ=NQ();import{createHash as AJ}from"crypto";import{once as vQ}from"events";import{createWriteStream as bQ,existsSync as _Q,mkdirSync as gQ,mkdtempSync as C4,readFileSync as H$,readdirSync as F4,renameSync as SQ,realpathSync as yQ,rmSync as EQ,statSync as h$,writeFileSync as fQ}from"fs";import{delimiter as N4,dirname as u$,join as U}from"path";import{finished as hQ}from"stream/promises";var k$="omljlfpmafedpplnpkkahegadhkimdje",o0="https://chromewebstore.google.com/detail/reason/omljlfpmafedpplnpkkahegadhkimdje";function t0($){if(!$||typeof $!=="object"||Array.isArray($)||!("version"in $)||$.version!==1||!("status"in $))return null;if($.status==="unavailable")return Object.keys($).length===2?{version:1,status:"unavailable"}:null;if($.status!=="connected"||Object.keys($).length!==5||!("deviceId"in $)||typeof $.deviceId!=="string"||!/^[A-Za-z0-9._:-]{1,160}$/.test($.deviceId)||!("apiOrigin"in $)||typeof $.apiOrigin!=="string"||$.apiOrigin.length>2048||!("managedRootIds"in $)||!Array.isArray($.managedRootIds)||$.managedRootIds.length>32)return null;let J=[];for(let Q of $.managedRootIds){if(typeof Q!=="string"||!/^[A-Za-z0-9._:-]{1,160}$/.test(Q))return null;J.push(Q)}try{let Q=new URL($.apiOrigin);if(Q.origin!==$.apiOrigin||Q.username||Q.password||!(Q.protocol==="https:"||Q.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(Q.hostname)))return null}catch{return null}return{version:1,status:"connected",deviceId:$.deviceId,apiOrigin:$.apiOrigin,managedRootIds:J}}var v={ocu:{repository:"https://github.com/iFurySt/open-codex-computer-use.git",revision:"386a260d1ab8b690adbbb27f7471595cf0c2b752",version:"0.3.5"},obu:{repository:"https://github.com/iFurySt/open-browser-use.git",revision:"ac015846df75928fbcf0f3a0f3ba3a210ce1a507",version:"0.1.42"}},E={version:"155.0.8059.84",macArm64Sha256:"13b9e98ce56f5ce18e100a009f455c9285f399e7c9dc8a76fdf2f3a9755bb5f2",linux64Sha256:"cf0f049892dea22e6a6db26d47ed0d7776b7158edcbec4634086633df8bafcbc",win64Sha256:"507f2a031441d10c62b5e3d4e863f09ac1198a571c1419976cbd8387f639afde"};var o={ocu:{url:`https://registry.npmjs.org/open-computer-use/-/open-computer-use-${v.ocu.version}.tgz`,sha256:"7c16a87c8cd357787b02c0ebd040dd5f93880c1fb51c1901caa2e0c05d063130",size_bytes:5844280},obu:{url:`https://registry.npmjs.org/open-browser-use/-/open-browser-use-${v.obu.version}.tgz`,sha256:"9386d8ce0a147b3f55e1807b68edf736836378807541c457c9b5f6ca2cabaa4e",size_bytes:21372018},extension:{url:`https://github.com/iFurySt/open-browser-use/releases/download/v${v.obu.version}/open-browser-use-chrome-extension-${v.obu.version}.zip`,sha256:"c9c07bec1175e12ea6985b0e7784a5ef01fd03f014b958224a1e17dcd838a241",size_bytes:31070}},l="pnbmoicbkopffjjgfgfglopechaiemkp";import{spawn as b$}from"child_process";import{createRequire as RQ}from"module";import{join as IQ}from"path";var PQ=30000,xQ=1048576;function _$(){return process.env.SystemRoot??"C:\\Windows"}function MQ(){return IQ(_$(),"System32","WindowsPowerShell","v1.0","powershell.exe")}var OQ=String.raw`
|
|
3
|
-
$ErrorActionPreference = "Stop"
|
|
4
|
-
Add-Type -TypeDefinition @"
|
|
5
|
-
using System;
|
|
6
|
-
using System.Runtime.InteropServices;
|
|
7
|
-
public static class ReasonInput {
|
|
8
|
-
[StructLayout(LayoutKind.Sequential)] public struct MOUSEINPUT { public int dx; public int dy; public int mouseData; public uint dwFlags; public uint time; public IntPtr dwExtraInfo; }
|
|
9
|
-
[StructLayout(LayoutKind.Sequential)] public struct KEYBDINPUT { public ushort wVk; public ushort wScan; public uint dwFlags; public uint time; public IntPtr dwExtraInfo; }
|
|
10
|
-
[StructLayout(LayoutKind.Explicit)] public struct UNION { [FieldOffset(0)] public MOUSEINPUT mi; [FieldOffset(0)] public KEYBDINPUT ki; }
|
|
11
|
-
[StructLayout(LayoutKind.Sequential)] public struct INPUT { public uint type; public UNION u; }
|
|
12
|
-
[DllImport("user32.dll")] static extern uint SendInput(uint count, INPUT[] inputs, int size);
|
|
13
|
-
[DllImport("user32.dll")] public static extern bool SetProcessDPIAware();
|
|
14
|
-
[DllImport("user32.dll")] public static extern int GetSystemMetrics(int index);
|
|
15
|
-
[DllImport("user32.dll")] static extern uint MapVirtualKey(uint code, uint type);
|
|
16
|
-
[DllImport("user32.dll")] public static extern uint GetClipboardSequenceNumber();
|
|
17
|
-
static void Send(INPUT input) { SendInput(1, new INPUT[] { input }, Marshal.SizeOf(typeof(INPUT))); }
|
|
18
|
-
public static void Mouse(uint flags, int x, int y, int data) {
|
|
19
|
-
INPUT input = new INPUT(); input.type = 0;
|
|
20
|
-
input.u.mi.dx = x; input.u.mi.dy = y; input.u.mi.mouseData = data; input.u.mi.dwFlags = flags; Send(input);
|
|
21
|
-
}
|
|
22
|
-
public static void Key(ushort vk, ushort unit, uint flags) {
|
|
23
|
-
INPUT input = new INPUT(); input.type = 1;
|
|
24
|
-
input.u.ki.wVk = vk; input.u.ki.wScan = vk != 0 ? (ushort)MapVirtualKey(vk, 0) : unit; input.u.ki.dwFlags = flags; Send(input);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
"@
|
|
28
|
-
[void][ReasonInput]::SetProcessDPIAware()
|
|
29
|
-
$width = [ReasonInput]::GetSystemMetrics(0)
|
|
30
|
-
$height = [ReasonInput]::GetSystemMetrics(1)
|
|
31
|
-
$session = [Diagnostics.Process]::GetCurrentProcess().SessionId
|
|
32
|
-
[Console]::Out.WriteLine('{"session":' + $session + ',"width":' + $width + ',"height":' + $height + '}')
|
|
33
|
-
[Console]::Out.Flush()
|
|
34
|
-
$mode = "__MODE__"
|
|
35
|
-
if ($mode -eq "probe") { exit 0 }
|
|
36
|
-
if ($mode -eq "clipboard") {
|
|
37
|
-
# Only changes made during this pairing: never export the initial clipboard.
|
|
38
|
-
$parent = Get-Process -Id __PARENT__
|
|
39
|
-
$last = [ReasonInput]::GetClipboardSequenceNumber()
|
|
40
|
-
while (-not $parent.HasExited) {
|
|
41
|
-
Start-Sleep -Milliseconds 100
|
|
42
|
-
$count = [ReasonInput]::GetClipboardSequenceNumber()
|
|
43
|
-
if ($count -eq $last) { continue }
|
|
44
|
-
$last = $count
|
|
45
|
-
try { $text = Get-Clipboard -Raw } catch { continue }
|
|
46
|
-
if (-not $text) { continue }
|
|
47
|
-
$bytes = [Text.Encoding]::UTF8.GetBytes($text)
|
|
48
|
-
if ($bytes.Length -gt __MAX_TEXT_BYTES__) { continue }
|
|
49
|
-
[Console]::Out.WriteLine("c " + [Convert]::ToBase64String($bytes))
|
|
50
|
-
[Console]::Out.Flush()
|
|
51
|
-
}
|
|
52
|
-
exit 0
|
|
53
|
-
}
|
|
54
|
-
$scaleX = 65535.0 / [Math]::Max(1, $width - 1)
|
|
55
|
-
$scaleY = 65535.0 / [Math]::Max(1, $height - 1)
|
|
56
|
-
while ($null -ne ($line = [Console]::In.ReadLine())) {
|
|
57
|
-
$n = $line.Split(" ")
|
|
58
|
-
try {
|
|
59
|
-
switch ($n[0]) {
|
|
60
|
-
"p" { [ReasonInput]::Mouse(0x8001, [int]([int]$n[1] * $scaleX), [int]([int]$n[2] * $scaleY), 0) }
|
|
61
|
-
"b" { [ReasonInput]::Mouse([uint32]$n[1], 0, 0, [int]$n[2]) }
|
|
62
|
-
"k" { [ReasonInput]::Key([uint16]$n[1], [uint16]$n[2], [uint32]$n[3]) }
|
|
63
|
-
"c" { Set-Clipboard -Value ([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($n[1]))) }
|
|
64
|
-
}
|
|
65
|
-
} catch { [Console]::Error.WriteLine("input: $_") }
|
|
66
|
-
}
|
|
67
|
-
`;function g$($){let J=OQ.replace("__MODE__",$).replace("__PARENT__",String(process.pid)).replace("__MAX_TEXT_BYTES__",String(M));return[MQ(),["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",Buffer.from(J,"utf16le").toString("base64")]]}var AQ=["USERPROFILE","LOCALAPPDATA","APPDATA","TEMP","TMP","PSModuleAnalysisCachePath"];function S$(){let $=AQ.flatMap((J)=>process.env[J]?[[J,process.env[J]]]:[]);return{...Object.fromEntries($),SystemRoot:_$(),windir:_$()}}function CJ($){let J;try{J=JSON.parse($)}catch{return null}if(!J||typeof J!=="object")return null;let Q=J,Z=(q,z)=>typeof q==="number"&&Number.isSafeInteger(q)&&q>=z;return Z(Q.session,0)&&Z(Q.width,1)&&Z(Q.height,1)?{session:Q.session,width:Q.width,height:Q.height}:null}function FJ(){return new Promise(($)=>{let J=b$(...g$("probe"),{env:S$(),stdio:["ignore","pipe","ignore"],windowsHide:!0}),Q="",Z=setTimeout(()=>{J.kill("SIGKILL"),$(null)},PQ);J.stdout.setEncoding("utf8").on("data",(q)=>{Q+=q}),J.once("error",()=>{clearTimeout(Z),$(null)}),J.once("close",()=>{clearTimeout(Z),$(CJ(Q.split(/\r?\n/)[0]??""))})})}var s;function DJ(){if(s!==void 0)return s;if(process.platform!=="win32")return s=!1;try{let $=RQ(import.meta.url)("bun:ffi"),{symbols:J}=$.dlopen("kernel32.dll",{GetCurrentProcessId:{args:[],returns:$.FFIType.u32},ProcessIdToSessionId:{args:[$.FFIType.u32,$.FFIType.ptr],returns:$.FFIType.i32}}),Q=new Uint32Array(1);return s=J.ProcessIdToSessionId(J.GetCurrentProcessId(),Q)!==0&&Q[0]>0}catch{return s=!1}}var XJ=[{bit:1,down:2,up:4},{bit:2,down:32,up:64},{bit:4,down:8,up:16}],jJ=2048,KJ=4096,wQ=[[8,jJ,120],[16,jJ,-120],[32,KJ,-120],[64,KJ,120]],BJ=1,v$=2,TQ=4,kQ=new Set([65505,65506]),LJ=new Set([65507,65508,65511,65512,65513,65514,65027,65515,65516]),UJ=new Map([[65505,[160,!1]],[65506,[161,!1]],[65507,[162,!1]],[65508,[163,!0]],[65511,[164,!1]],[65512,[165,!0]],[65513,[164,!1]],[65514,[165,!0]],[65027,[165,!0]],[65515,[91,!0]],[65516,[92,!0]],[65288,[8,!1]],[65289,[9,!1]],[65056,[9,!1]],[65293,[13,!1]],[65307,[27,!1]],[65535,[46,!0]],[65379,[45,!0]],[65360,[36,!0]],[65367,[35,!0]],[65365,[33,!0]],[65366,[34,!0]],[65361,[37,!0]],[65362,[38,!0]],[65363,[39,!0]],[65364,[40,!0]],[65383,[93,!0]],[65509,[20,!1]],[65299,[19,!1]],[65300,[145,!1]],[65377,[44,!0]],[65407,[144,!0]],[32,[32,!1]],[65421,[13,!0]],[65408,[32,!1]],[65450,[106,!1]],[65451,[107,!1]],[65452,[108,!1]],[65453,[109,!1]],[65454,[110,!1]],[65455,[111,!0]],[65429,[36,!1]],[65430,[37,!1]],[65431,[38,!1]],[65432,[39,!1]],[65433,[40,!1]],[65434,[33,!1]],[65435,[34,!1]],[65436,[35,!1]],[65438,[45,!1]],[65439,[46,!1]],...Array.from({length:10},($,J)=>[65456+J,[96+J,!1]]),...Array.from({length:24},($,J)=>[65470+J,[112+J,!1]])]);class NJ{x=-1;y=-1;mask=0;held=new Set;pressed=new Set;pointer($,J,Q){let Z=[];if($!==this.x||J!==this.y)this.x=$,this.y=J,Z.push(`p ${$} ${J}`);for(let q of XJ){let z=(this.mask&q.bit)!==0,W=(Q&q.bit)!==0;if(z!==W)Z.push(`b ${W?q.down:q.up} 0`)}for(let[q,z,W]of wQ)if(!(this.mask&q)&&Q&q)Z.push(`b ${z} ${W}`);return this.mask=Q,Z}key($,J){let Q=$?0:v$;if(kQ.has(J)||LJ.has(J))if($)this.held.add(J);else this.held.delete(J);let Z=UJ.get(J);if(Z)return[`k ${Z[0]} 0 ${Q|(Z[1]?BJ:0)}`];let q=J<256?J:(J&4278190080)===16777216?J&16777215:0,z=String.fromCharCode(q),W=[...this.held].some((C)=>LJ.has(C)),H=/^[A-Za-z0-9]$/.test(z)?z.toUpperCase().charCodeAt(0):0;if(H&&($?W:this.pressed.has(H))){if($)this.pressed.add(H);else this.pressed.delete(H);return[`k ${H} 0 ${Q}`]}if(q<33||q>=127&&q<160||q>65535||q>=55296&&q<57344)return[];return[`k 0 ${q} ${Q|TQ}`]}release(){let $=XJ.filter((J)=>this.mask&J.bit).map((J)=>`b ${J.up} 0`);for(let J of this.pressed)$.push(`k ${J} 0 ${v$}`);for(let J of this.held){let[Q,Z]=UJ.get(J);$.push(`k ${Q} 0 ${v$|(Z?BJ:0)}`)}return this.mask=0,this.pressed.clear(),this.held.clear(),$}}function RJ($){let J=b$(...g$("input"),{env:S$(),stdio:["pipe","pipe","ignore"],windowsHide:!0}),Q=new NJ,Z="",q=!1,z=null,W=()=>{if(z?.kill("SIGKILL"),J.exitCode!==null||J.signalCode!==null)return;J.stdin.end(Q.release().map((X)=>`${X}
|
|
68
|
-
`).join("")),setTimeout(()=>J.kill("SIGKILL"),2000).unref()},H=(X)=>{if(q)return;q=!0,W(),$.end(X)},C=(X)=>H({error:new c("display_unavailable",X)}),L=(X)=>{if(q||X.length===0)return;if(J.stdin.write(X.map((F)=>`${F}
|
|
69
|
-
`).join("")),J.stdin.writableLength>xQ)H({reason:"input_backpressure"})},B=()=>{z=b$(...g$("clipboard"),{env:S$(),stdio:["ignore","pipe","ignore"],windowsHide:!0});let X="";z.stdout?.on("data",(F)=>{if(q)return;X+=F.toString("ascii");for(let j=X.indexOf(`
|
|
70
|
-
`);j>=0;j=X.indexOf(`
|
|
71
|
-
`)){let T=X.slice(0,j).replace(/\r$/,"");if(X=X.slice(j+1),!T.startsWith("c "))continue;let I=T.slice(2);if(I.length>Math.ceil(M/3)*4||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(I)){H({reason:"display_protocol"});return}let V=Buffer.from(I,"base64");if(V.byteLength<=M)$.clipboard(V.toString("utf8"));if(q)return}if(X.length>Math.ceil(M/3)*4+4)H({reason:"display_protocol"})}),z.once("error",()=>C("Reason could not watch this computer's desktop clipboard.")),z.once("exit",()=>{if(!q)C("Reason could not watch this computer's desktop clipboard.")})};return J.stdout.on("data",(X)=>{if(q||Z===null)return;Z+=X.toString("utf8");let F=Z.indexOf(`
|
|
72
|
-
`);if(F<0){if(Z.length>4096)H({reason:"display_protocol"});return}let j=CJ(Z.slice(0,F).trim());if(Z=null,!j)H({reason:"display_protocol"});else if(j.session===0)C("This Windows worker runs as a service, which has no desktop: run it in the signed-in desktop session.");else B(),$.ready({width:j.width,height:j.height})}),J.stdin.on("error",()=>{return}),J.once("error",()=>C("Reason could not start this computer's desktop input.")),J.once("exit",()=>{if(Z!==null)C("Reason could not start this computer's desktop input.");else H({reason:"display_closed"})}),{pointer:(X,F,j)=>L(Q.pointer(X,F,j)),key:(X,F)=>L(Q.key(X,F)),clipboard:(X)=>L([`c ${Buffer.from(X,"utf8").toString("base64")}`]),close(){q=!0,W()}}}var uQ=["none","standard","all"],Y$="22.23.3",mQ={"linux-x64":"1084aa36196bba4c3a5e69a1ee388a6e4ff729dad09445fbcd434b28fe3c24af","linux-arm64":"5ced2d48d1d7198739b7f86804de0171aefb6823b684b12341d3321afc3cb0b2","darwin-arm64":"23b25245dcfb9af7262f8ff142e9e2e0af025368117329e7a7458a51e5922f53","win32-x64":"2b0ff57b049cda1bbcea2240eec20467018713c1efe1f7360c2681859b90ed71","win32-arm64":"33dad22e4cef5ee8f9fbb1b0d037fdacd0e56d12a4580f0d63f68b894deab535"},y$={"linux-x64":{ocu:"dist/linux/amd64/open-computer-use",obu:"native/linux-amd64/open-browser-use"},"linux-arm64":{ocu:"dist/linux/arm64/open-computer-use",obu:"native/linux-arm64/open-browser-use"},"darwin-arm64":{ocu:"dist/Open Computer Use.app/Contents/MacOS/OpenComputerUse",obu:"native/darwin-arm64/open-browser-use"},"win32-x64":{ocu:"dist/windows/amd64/open-computer-use.exe",obu:"native/windows-amd64/open-browser-use.exe"},"win32-arm64":{ocu:"dist/windows/arm64/open-computer-use.exe",obu:"native/windows-arm64/open-browser-use.exe"}},wJ="chrome-mac-arm64/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",TJ="chrome-win64/chrome.exe",d={version:"9.0.2",url:"https://ffmpeg.martin-riedl.de/download/macos/arm64/1789931890_9.0.2/ffmpeg.zip",sha256:"c8ed4c4e6978a03c485edbfe4e0a5dc2380f8a30bba5150531b31b094492d924"},lQ={version:d.version,url:"https://ffmpeg.martin-riedl.de/download/macos/arm64/1789931890_9.0.2/ffprobe.zip",sha256:"fcbe839537485eaee7a7a8bc5cbc0f90d53617e80943e8a5b2e31cb851197ea6"},E$={version:d.version,url:`https://github.com/GyanD/codexffmpeg/releases/download/${d.version}/ffmpeg-${d.version}-essentials_build.zip`,sha256:"60f467265b1e312373dbcd92200c2618a74850f98d3d078e94296bb3fa2047ba"},IJ=`ffmpeg-${E$.version}-essentials_build/bin`,f="com.ifuryst.open_browser_use.extension",kJ="com.reasonmachines.browser_use.extension",PJ="/tmp/reason-browser-use",m$=["tint2","picom","xterm","pcmanfm"],vJ=["fonts-droid-fallback"],bJ=["pulseaudio"],_J=["tigervnc-standalone-server"],cQ=["xvfb","openbox","x11vnc","x11-utils","x11-xserver-utils","xdotool","dbus-x11","at-spi2-core","python3","python3-gi","gir1.2-atspi-2.0","gir1.2-gtk-3.0","fonts-dejavu-core",...vJ,"galculator","chromium","ffmpeg","tmux",...bJ,..._J,...m$],dQ=new Set([...m$,...vJ,...bJ,..._J]),xJ=cQ.filter(($)=>$!=="chromium"&&!dQ.has($)),pQ=["Xvfb","openbox","x11vnc","xdotool","dbus-launch","python3","ffmpeg","tmux"],V$="/usr/bin/chromium",iQ=["/usr/local/bin","/usr/bin","/bin","/opt/homebrew/bin"];function gJ($=process.platform,J=process.arch){let Q=`${$}-${J}`;return Q==="linux-x64"||Q==="linux-arm64"||Q==="darwin-arm64"||Q==="win32-x64"||Q==="win32-arm64"?Q:null}function p($){return $==="win32-x64"||$==="win32-arm64"}function l$($){return p($)?`node-v${Y$}-${$.replace("win32","win")}`:`node-v${Y$}-${$}`}function X$($){return{node:{version:Y$,url:`https://nodejs.org/dist/v${Y$}/${l$($)}${p($)?".zip":".tar.gz"}`,sha256:mQ[$]},open_computer_use:{version:v.ocu.version,url:o.ocu.url,sha256:o.ocu.sha256},open_browser_use:{version:v.obu.version,url:o.obu.url,sha256:o.obu.sha256},...$==="darwin-arm64"?{chrome_for_testing:{version:E.version,url:`https://storage.googleapis.com/chrome-for-testing-public/${E.version}/mac-arm64/chrome-mac-arm64.zip`,sha256:E.macArm64Sha256}}:p($)?{chrome_for_testing:{version:E.version,url:`https://storage.googleapis.com/chrome-for-testing-public/${E.version}/win64/chrome-win64.zip`,sha256:E.win64Sha256}}:{}}}function rQ($){let J={extension:l};for(let[Q,Z]of Object.entries(X$($)))J[Q]=`${Z.version}@${Z.sha256}`;return J}function SJ($){return U($,".local","share","reason","desktop")}function yJ($,J=MJ()){let Q=SJ(J),Z=(X)=>U(Q,X,X$($)[X]?.version??""),q=Z("open_computer_use"),z=Z("open_browser_use"),W=$==="darwin-arm64",H=p($),C=U(J,"Library","Application Support"),L=U(process.platform==="win32"&&process.env.LOCALAPPDATA?process.env.LOCALAPPDATA:U(J,"AppData","Local"),"OpenBrowserUse"),B=W?U(C,"Google","Chrome","NativeMessagingHosts",`${f}.json`):H?U(L,"NativeMessagingHosts",`${f}.json`):U(J,".config","google-chrome","NativeMessagingHosts",`${f}.json`);return{root:Q,automation:U(u$(Q),"automation"),receipt:U(Q,"receipt.json"),minimal:d$(J),node:H?U(Z("node"),l$($),"node.exe"):U(Z("node"),"bin","node"),ocuDir:q,ocu:U(q,y$[$].ocu),ocuApp:W?U(q,"dist","Open Computer Use.app"):null,obuDir:z,obu:U(z,"cli","open-browser-use.js"),nativeHost:U(z,y$[$].obu),extensionDir:W?U(C,"OpenBrowserUse","chrome-extension","release"):H?U(L,"chrome-extension","release"):U(J,".local","share","open-browser-use","chrome-extension","release"),setupNativeHostManifest:B,nativeHostManifests:W?[B,U(C,"Google","ChromeForTesting","NativeMessagingHosts",`${f}.json`)]:H?[B]:[U(J,".config","chromium","NativeMessagingHosts",`${f}.json`),U(J,".config","google-chrome-for-testing","NativeMessagingHosts",`${f}.json`)],browser:W?U(Z("chrome_for_testing"),wJ):H?U(Z("chrome_for_testing"),TJ):V$,userChromeHost:W?U(Q,"user-chrome","reason-browser-use"):null,userChromeRegistration:W?U(C,"Google","Chrome","NativeMessagingHosts",`${kJ}.json`):null,ffmpegDir:U(Q,"ffmpeg"),ffmpeg:W?U(Q,"ffmpeg",d.version,"ffmpeg"):H?U(Q,"ffmpeg",E$.version,IJ,"ffmpeg.exe"):null,ffprobe:W?U(Q,"ffprobe",lQ.version,"ffprobe"):H?U(Q,"ffmpeg",E$.version,IJ,"ffprobe.exe"):null}}function EJ($){try{let J=JSON.parse(H$($,"utf8"));if(typeof J!=="object"||J===null)return null;let Q=J,Z=Q.pins;if(Q.schema_version!==1||typeof Q.platform!=="string"||typeof Z!=="object"||Z===null||!Object.values(Z).every((q)=>typeof q==="string")||!uQ.includes(Q.permissions)||!Array.isArray(Q.missing_system_packages)||!Q.missing_system_packages.every((q)=>typeof q==="string")||typeof Q.updated_at!=="string")return null;return{schema_version:1,platform:Q.platform,pins:Z,permissions:Q.permissions,missing_system_packages:Q.missing_system_packages,updated_at:Q.updated_at}}catch{return null}}function aQ($,J,Q=384){gQ(u$($),{recursive:!0,mode:448});let Z=`${$}.pending.${process.pid}`;fQ(Z,J,{mode:Q}),SQ(Z,$)}function b($){try{return h$($).isFile()}catch{return!1}}function fJ($){try{let J=h$($);return J.isFile()&&(J.mode&73)!==0}catch{return!1}}function oQ($){try{return H$($,"utf8")}catch{return null}}function S($){for(let J of iQ){let Q=U(J,$);try{let Z=h$(Q);if(Z.isFile()&&(Z.mode&73)!==0)return Q}catch{}}return null}function sQ($){try{let J=JSON.parse(H$(U($,"package.json"),"utf8"));return typeof J==="object"&&J!==null&&typeof J.version==="string"?J.version:null}catch{return null}}function nQ($,J,Q){let Z=X$(Q)[$];if(!Z)return!1;let q=p(Q);if($==="node")return b(q?U(J,l$(Q),"node.exe"):U(J,"bin","node"));if($==="chrome_for_testing")return b(U(J,q?TJ:wJ));let z=y$[Q][$==="open_computer_use"?"ocu":"obu"];return sQ(J)===Z.version&&b(U(J,z))&&($==="open_computer_use"||b(U(J,"cli","open-browser-use.js")))}function tQ($){return AJ("sha256").update(Buffer.from($,"base64")).digest("hex").slice(0,32).replace(/./g,(J)=>String.fromCharCode(97+Number.parseInt(J,16)))}function c$($){try{let J=JSON.parse(H$($,"utf8"));return typeof J==="object"&&J!==null&&!Array.isArray(J)?J:null}catch{return null}}function eQ($){let J=c$(U($.extensionDir,"manifest.json"));return J!==null&&J.version===v.obu.version&&typeof J.key==="string"&&tQ(J.key)===l}function $0($,J){let Q=$?.allowed_origins;return $!==null&&$.name===f&&Array.isArray(Q)&&Q.length===1&&Q[0]===`chrome-extension://${l}/`&&(J===void 0||$.path===J)}function J0($){return eQ($)&&b($.nativeHost)&&$.nativeHostManifests.every((J)=>$0(c$(J),$.nativeHost))}function Q0($){return`#!/bin/sh
|
|
73
|
-
# Reason's Chrome extension host (reason desktop install): Open Browser Use on Reason's socket directory.
|
|
74
|
-
obu=${`'${$.replaceAll("'","'\\''")}'`}
|
|
75
|
-
case "$1" in
|
|
76
|
-
chrome-extension://*) exec "$obu" host --socket-dir ${PJ} ;;
|
|
77
|
-
mcp) shift; exec "$obu" mcp --socket-dir ${PJ} "$@" ;;
|
|
78
|
-
esac
|
|
79
|
-
exec "$obu" "$@"
|
|
80
|
-
`}function Z0($){let J=c$($),Q=J?.allowed_origins;return J!==null&&J.name===kJ&&J.type==="stdio"&&Array.isArray(Q)&&Q.includes(`chrome-extension://${k$}/`)&&typeof J.path==="string"&&fJ(J.path)}function q0($,J){if(!$.userChromeHost||!$.userChromeRegistration)return null;if(!J||oQ($.userChromeHost)!==Q0($.nativeHost)||!fJ($.userChromeHost))return{code:"user_chrome_browser_use_missing"};return Z0($.userChromeRegistration)?{host:$.userChromeHost}:{code:"user_chrome_native_host_unregistered"}}var z0={display:["display","desktop_session","desktop_video"],computer:["display","desktop_session","system_packages","node","open_computer_use"],browser:["display","desktop_session","system_packages","node","open_computer_use","open_browser_use","browser_extension","browser","chrome_for_testing"]};function n($={}){let J=$.platform===void 0?gJ():$.platform;if(!J)return null;let Q=yJ(J,$.home),Z=EJ(Q.receipt),q=rQ(J),z=Z!==null&&Z.platform===J&&JSON.stringify(Object.entries(Z.pins).sort())===JSON.stringify(Object.entries(q).sort()),W=[],H=X$(J);for(let V of["node","open_computer_use","open_browser_use","chrome_for_testing"]){let D=H[V];if(!D)continue;let R=nQ(V,U(Q.root,V,D.version),J),P=Z?.pins[V],_=R&&P===q[V]?"ready":P!==void 0&&P!==q[V]?"outdated":"missing";W.push({name:V,state:_,detail:D.version})}let C=Z?.pins.extension===l&&J0(Q);W.push({name:"browser_extension",state:C?"ready":"missing",detail:l});let L=S("Xvfb"),B=S("x11vnc"),X=S("openbox");if(p(J))W.push(DJ()?{name:"desktop_session",state:"ready",detail:"signed-in desktop session"}:{name:"desktop_session",state:"missing",detail:"run the worker in the signed-in desktop session, not as a service"}),W.push(Q.ffmpeg&&b(Q.ffmpeg)?{name:"desktop_video",state:"ready",detail:Q.ffmpeg}:{name:"desktop_video",state:"missing",detail:"run `reason desktop install` for desktop video"});else if(J!=="darwin-arm64"){W.push(b(V$)?{name:"browser",state:"ready",detail:V$}:{name:"browser",state:"missing",detail:`non-snap Chromium at ${V$}`});let V=L!==null&&B!==null&&X!==null;W.push({name:"display",state:V?"ready":"missing",detail:"Xvfb + openbox + x11vnc"});let D=pQ.filter((O)=>S(O)===null),R=(Z?.missing_system_packages??xJ).filter((O)=>xJ.includes(O)),P=D.length===0&&R.length===0;W.push(P?{name:"system_packages",state:"ready"}:{name:"system_packages",state:"missing",detail:[...new Set([...R,...D])].join(" ")});let _=m$.filter((O)=>S(O)===null);W.push(_.length===0?{name:"desktop_look",state:"ready"}:{name:"desktop_look",state:"missing",detail:_.join(" ")})}let F=Q.ffmpeg&&b(Q.ffmpeg)?Q.ffmpeg:S("ffmpeg"),j=!F?null:F===Q.ffmpeg?Q.ffprobe:U(u$(yQ(F)),"ffprobe"),T=z&&W.every((V)=>V.state==="ready"),I=(V)=>z&&W.every((D)=>!z0[V].includes(D.name)||D.state==="ready");return{platform:J,root:Q.root,automation:Q.automation,ready:T,features:{display:I("display"),computer:I("computer"),browser:I("browser")},node:Q.node,ocu:Q.ocu,obu:Q.obu,nativeHost:Q.nativeHost,extensionDir:Q.extensionDir,browser:Q.browser,ffmpeg:F,ffprobe:j&&b(j)?j:null,userChrome:q0(Q,z&&["node","open_browser_use"].every((V)=>W.find((D)=>D.name===V)?.state==="ready")),pulseaudio:S("pulseaudio"),xvnc:S("Xvnc"),xvfb:L,x11vnc:B,openbox:X,components:W}}function hJ($){return W0($)?OJ():[]}function W0($){return $?.platform==="darwin-arm64"&&$.ffmpeg===U($.root,"ffmpeg",d.version,"ffmpeg")}async function b4($,J,Q,Z=fetch){try{let q=await Z($,{redirect:"follow"});if(!q.ok||!q.body)throw Error(`download failed (HTTP ${q.status}): ${$}`);let z=AJ("sha256"),W=bQ(Q,{mode:384});try{let C=q.body.getReader();for(let L=await C.read();!L.done;L=await C.read())if(z.update(L.value),!W.write(L.value))await vQ(W,"drain")}finally{W.end(),await hQ(W)}let H=z.digest("hex");if(H!==J)throw Error(`digest mismatch for ${$}: expected ${J}, got ${H}`)}catch(q){throw EQ(Q,{force:!0}),q}}function d$($){return U(SJ($),"minimal.json")}function V0($=G$()){return _Q(d$($))}function _4($={}){aQ(d$($.home??G$()),`${JSON.stringify({version:1,minimal_at:($.now?.()??new Date).toISOString()})}
|
|
81
|
-
`)}function g4($={}){let J=$.platform===void 0?gJ():$.platform;if(J===null)return null;let Q=$.home??G$();if(EJ(yJ(J,Q).receipt)!==null)return"refresh";return V0(Q)?null:"install"}import{spawn as Y0}from"child_process";import{existsSync as G0}from"fs";import{connect as H0}from"net";import{join as j$}from"path";var mJ="reason_desktop",t={sampleRate:48000,channels:2,codec:"opus"},X0=5000,j0=107,K0=262144,B0=($)=>j$($,"native"),lJ=($)=>`unix:${$}`;function p$($,J=1000){if(!G0($))return Promise.resolve(!1);return new Promise((Q)=>{let Z=H0({path:$}),q=(z)=>{Z.destroy(),Q(z)};Z.setTimeout(J,()=>q(!1)),Z.once("error",()=>q(!1)),Z.once("close",()=>q(!1)),Z.once("connect",()=>q(!0))})}async function u4($,J){if(!J)return null;let Q=B0($);if(Buffer.byteLength(Q)>j0||/["'\\\s]/.test(Q))return null;try{if(await p$(Q))return Q;let Z=Y0(J,["--daemonize=no","--system=no","--use-pid-file=no","--exit-idle-time=-1","--disallow-exit=yes","--realtime=no","--high-priority=no","--disallow-module-loading=yes","--log-level=warning",`--log-target=file:${j$($,"pulseaudio.log")}`,"-n",`--load=module-native-protocol-unix socket="${Q}" auth-anonymous=1 auth-cookie-enabled=0`,`--load=module-null-sink sink_name=${mJ} rate=${t.sampleRate} channels=${t.channels} sink_properties=device.description=Reason_desktop`],{detached:!0,stdio:"ignore",env:{HOME:$,PATH:"/usr/bin:/bin",XDG_RUNTIME_DIR:$,PULSE_RUNTIME_PATH:j$($,"runtime"),PULSE_STATE_PATH:j$($,"state")}}),q=!1;Z.once("error",()=>{q=!0}),Z.once("exit",()=>{q=!0}),Z.unref();let z=Date.now()+X0;while(Date.now()<z){if(await p$(Q))return Q;if(q)return await p$(Q)?Q:null;await new Promise((W)=>setTimeout(W,50))}if(!q)Z.kill("SIGKILL");return null}catch{return null}}function cJ(){let{sampleRate:$,channels:J}=t;return["-hide_banner","-loglevel","error","-nostdin","-fflags","nobuffer","-f","pulse","-sample_rate",String($),"-channels",String(J),"-fragment_size",String($*J*2/50),"-i",`${mJ}.monitor`,"-vn","-ac",String(J),"-ar",String($),"-c:a","libopus","-b:a","64k","-application","lowdelay","-frame_duration","20","-flush_packets","1","-page_duration","20000","-f","ogg","pipe:1"]}var L0=[79,103,103,83],U0=Buffer.from("OpusHead"),C0=Buffer.from("OpusTags"),uJ=($,J)=>$.byteLength>=J.byteLength&&J.every((Q,Z)=>$[Z]===Q);class i$ extends Error{constructor($){super($);this.name="OggProtocolError"}}class r${buffer=new Uint8Array(0);partial=[];partialBytes=0;push($){let J=new Uint8Array(this.buffer.byteLength+$.byteLength);J.set(this.buffer),J.set($,this.buffer.byteLength);let Q=[],Z=0;while(J.byteLength-Z>=27){if(L0.some((F,j)=>J[Z+j]!==F)||J[Z+4]!==0)throw new i$("invalid_page");let q=(J[Z+5]&1)!==0,z=J[Z+26];if(J.byteLength-Z<27+z)break;let W=J.subarray(Z+27,Z+27+z),H=W.reduce((F,j)=>F+j,0),C=27+z+H;if(J.byteLength-Z<C)break;if(!q&&this.partialBytes>0)this.resetPartial();let L=q&&this.partialBytes===0,B=Z+27+z,X=B;for(let F of W){if(B+=F,F===255)continue;if(this.appendPartial(J.subarray(X,B),L),X=B,!L){let j=this.takePartial();if(j.byteLength>0&&!uJ(j,U0)&&!uJ(j,C0))Q.push(j)}L=!1,this.resetPartial()}if(X<B)this.appendPartial(J.subarray(X,B),L);Z+=C}return this.buffer=J.slice(Z),Q}appendPartial($,J){if(J||$.byteLength===0)return;if(this.partialBytes+=$.byteLength,this.partialBytes>K0)throw new i$("packet_too_large");this.partial.push($.slice())}takePartial(){if(this.partial.length===1)return this.partial[0];let $=new Uint8Array(this.partialBytes),J=0;for(let Q of this.partial)$.set(Q,J),J+=Q.byteLength;return $}resetPartial(){this.partial=[],this.partialBytes=0}}import{spawn as F0}from"child_process";var dJ=1048576,D0=String.raw`
|
|
82
|
-
import gi, json, os, sys
|
|
83
|
-
gi.require_version("Gtk", "3.0")
|
|
84
|
-
from gi.repository import Gtk, Gdk, GLib
|
|
85
|
-
if not Gtk.init_check()[0]:
|
|
86
|
-
sys.exit(1)
|
|
87
|
-
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
|
|
88
|
-
pending = b""
|
|
89
|
-
generation = 0
|
|
90
|
-
def send(value):
|
|
91
|
-
print(json.dumps(value, ensure_ascii=True), flush=True)
|
|
92
|
-
def changed(clipboard, event):
|
|
93
|
-
global generation
|
|
94
|
-
generation += 1
|
|
95
|
-
current = generation
|
|
96
|
-
def received(clipboard, text, unused):
|
|
97
|
-
if current == generation and text is not None and len(text.encode("utf-8")) <= ${M}:
|
|
98
|
-
send({"text": text})
|
|
99
|
-
clipboard.request_text(received, None)
|
|
100
|
-
# No request_text on startup: never share the pre-existing clipboard.
|
|
101
|
-
clipboard.connect("owner-change", changed)
|
|
102
|
-
def input_ready(fd, condition):
|
|
103
|
-
global pending
|
|
104
|
-
chunk = os.read(fd, 65536)
|
|
105
|
-
if not chunk:
|
|
106
|
-
Gtk.main_quit()
|
|
107
|
-
return False
|
|
108
|
-
pending += chunk
|
|
109
|
-
while b"\n" in pending:
|
|
110
|
-
line, pending = pending.split(b"\n", 1)
|
|
111
|
-
text = json.loads(line)
|
|
112
|
-
if not isinstance(text, str) or len(text.encode("utf-8")) > ${M} or "\x00" in text:
|
|
113
|
-
sys.exit(1)
|
|
114
|
-
clipboard.set_text(text, -1)
|
|
115
|
-
send("ack")
|
|
116
|
-
if len(pending) > ${M*6+2}:
|
|
117
|
-
sys.exit(1)
|
|
118
|
-
return True
|
|
119
|
-
GLib.io_add_watch(0, GLib.IO_IN | GLib.IO_HUP, input_ready)
|
|
120
|
-
send("ready")
|
|
121
|
-
Gtk.main()
|
|
122
|
-
`;function pJ($,J){let Q=F0("/usr/bin/python3",["-I","-u","-c",D0],{env:{DISPLAY:$.display,XAUTHORITY:$.xauthority},stdio:["pipe","pipe","ignore"]}),Z=!1,q=!0,z="",W=0,H=[],C=setTimeout(()=>B(),5000),L=()=>{Z=!0,clearTimeout(C),H.length=0,Q.kill("SIGKILL")},B=()=>{if(Z)return;L(),J.end({error:new c("display_unavailable","Reason could not start this Linux desktop's UTF-8 clipboard.")})},X=(F,j=32)=>{if(Z)return;if(!q){F();return}if(W+=j,W>dJ)L(),J.end({reason:"input_backpressure"});else H.push({apply:F,bytes:j})};return Q.stdout.on("data",(F)=>{if(Z)return;z+=F.toString("ascii");for(let j=z.indexOf(`
|
|
123
|
-
`);j>=0;j=z.indexOf(`
|
|
124
|
-
`)){let T=z.slice(0,j);z=z.slice(j+1);let I;try{I=JSON.parse(T)}catch{B();return}if(I==="ready"||I==="ack"){clearTimeout(C),q=!1;while(!q&&!Z&&H.length){let V=H.shift();W-=V.bytes,V.apply()}}else if(I&&typeof I==="object"&&"text"in I&&typeof I.text==="string"&&Buffer.byteLength(I.text)<=M)J.clipboard(I.text);else{B();return}if(Z)return}if(z.length>M*6+32)B()}),Q.stdin.on("error",B),Q.once("error",B),Q.once("exit",B),{apply:X,write(F){if(Buffer.byteLength(F)>M||F.includes("\x00")){B();return}let j=`${JSON.stringify(F)}
|
|
125
|
-
`;X(()=>{if(q=!0,C=setTimeout(()=>B(),5000),Q.stdin.write(j),Q.stdin.writableLength>dJ)L(),J.end({reason:"input_backpressure"})},Buffer.byteLength(j))},close:L}}var i={smooth:{fps:60,crf:23,kbps:8000,x264Preset:"ultrafast",threads:2,scale:1},sharp:{fps:30,crf:19,kbps:1e4,x264Preset:"superfast",scale:1},data_saver:{fps:20,crf:28,kbps:2000,x264Preset:"ultrafast",scale:0.75},balanced:{fps:30,crf:23,kbps:4000,x264Preset:"ultrafast",threads:2,scale:1}},P0="avc1.4D002A",iJ={width:1920,height:1080},x0=262144,M0=0.2,O0=250,A0=1e4,w0=1024,a$=1e4,T0=500,k0=60,v0=1e4,b0=1000,rJ=1048576,_0=-223,g0=-308,Z8={kind:"mac_screen",sound:null},q8={kind:"windows_screen",sound:null},S0,aJ=()=>S0??=n()?.ffmpeg??null,B$=($,J,Q)=>s$($,J,{env:Q,stdio:["ignore","pipe","ignore"],windowsHide:!0}),y0,n$=()=>y0??=hJ(n()),oJ=($,J,Q)=>{let[Z,...q]=[...n$(),$];return B$(Z,[...q,...J],Q)},sJ=()=>XQ?.videotoolbox?"h264_videotoolbox":"libx264",E0=()=>Math.round(performance.now()*1000),o$=new Set,nJ=!1;function WQ($){if(o$.add($),$.once("exit",()=>o$.delete($)),nJ)return;nJ=!0,process.once("exit",()=>{for(let J of o$)try{J.kill("SIGKILL")}catch{}})}function VQ($){try{$.stdout?.destroy()}catch{}if($.exitCode!==null||$.signalCode!==null)return;try{$.kill("SIGTERM")}catch{return}let J=setTimeout(()=>{if($.exitCode===null&&$.signalCode===null)try{$.kill("SIGKILL")}catch{}},T0);$.once("exit",()=>clearTimeout(J))}function f0($,J,Q){return{args:["-f","x11grab","-draw_mouse","1","-framerate",String($),"-video_size",`${J.width}x${J.height}`,"-i",Q],size:J}}function h0($){return{args:["-f","avfoundation","-capture_cursor","1","-pixel_format","nv12","-framerate",String($),"-i","Capture screen 0:none"],size:null}}function u0($,J){return{args:["-f","gdigrab","-draw_mouse","1","-framerate",String($),"-offset_x","0","-offset_y","0","-video_size",`${J.width}x${J.height}`,"-i","desktop"],size:J}}function m0($){return{args:["-probesize","32","-analyzeduration","0","-f","image2pipe","-c:v","mjpeg","-framerate",String($),"-i","pipe:0"],size:null}}var YQ=1700000;function GQ($){return Math.min(1,Math.round(Math.sqrt(YQ/($.width*$.height))*100)/100)}function l0($,J,Q){let Z=s$(Q.axe,["stream-video","--udid",Q.udid,"--format","ffmpeg","--fps","30","--quality","85","--scale",String(Math.min(0.99,GQ(Q.size)))],{stdio:["ignore","pipe","ignore"]}),q=s$($,J,{env:{},stdio:["pipe","pipe","ignore"]});Z.stdout.pipe(q.stdin),q.stdin.on("error",()=>{});let z=()=>{if(Z.exitCode===null&&Z.signalCode===null)Z.kill("SIGTERM")};return q.once("exit",z),q.once("error",z),Z.once("exit",()=>{if(q.exitCode===null&&q.signalCode===null)q.kill("SIGTERM")}),Z.once("error",()=>{if(q.exitCode===null&&q.signalCode===null)q.kill("SIGTERM")}),q}function tJ($){let J=Math.min(1,iJ.width/$.width,iJ.height/$.height);return{width:Math.round($.width*J),height:Math.round($.height*J)}}function K$($,J,Q,Z="libx264"){let q=i[$],z=(X)=>Math.max(2,Math.floor(X/2)*2),W={width:z(Q.width*q.scale),height:z(Q.height*q.scale)},H=W.width!==J.size?.width||W.height!==J.size.height,C=Math.max(1,Math.round(q.kbps*2/q.fps)),L=["-g",String(q.fps*k0)],B=Z==="h264_videotoolbox"?["-c:v","h264_videotoolbox","-realtime","1","-prio_speed","1","-allow_sw","1","-profile:v","main","-level","4.2","-bf","0","-pix_fmt","nv12",...L,"-b:v",`${q.kbps}k`,"-maxrate",`${q.kbps}k`,"-bufsize",`${C}k`,"-bsf:v","h264_metadata=aud=insert"]:["-c:v","libx264","-preset",q.x264Preset,"-tune","zerolatency","-profile:v","main","-level","4.2","-bf","0","-pix_fmt","yuv420p",...q.threads?["-threads",String(q.threads)]:[],"-x264-params","aud=1:repeat-headers=1",...L,"-crf",String(q.crf),"-maxrate",`${q.kbps}k`,"-bufsize",`${C}k`];return["-hide_banner","-loglevel","error","-nostdin","-fflags","nobuffer",...J.args,"-an",...H?["-vf",`scale=${W.width}:${W.height}:flags=fast_bilinear`]:[],...B,"-flush_packets","1","-f","h264","pipe:1"]}class HQ{buffer=new Uint8Array(0);scanned=0;key=!1;micros=0;push($,J){if(this.buffer.byteLength===0)this.micros=J;let Q=new Uint8Array(this.buffer.byteLength+$.byteLength);Q.set(this.buffer),Q.set($,this.buffer.byteLength),this.buffer=Q;let Z=[],q=this.scanned;while(q+3<this.buffer.byteLength){if(this.buffer[q]!==0||this.buffer[q+1]!==0||this.buffer[q+2]!==1){q++;continue}let z=this.buffer[q+3]&31,W=q>0&&this.buffer[q-1]===0?q-1:q;if(z===9&&W>0)Z.push({data:this.buffer.slice(0,W),key:this.key,micros:this.micros}),this.buffer=this.buffer.subarray(W),this.key=!1,this.micros=J,q-=W;if(z===5)this.key=!0;q+=3}return this.scanned=q,Z}}function c0($,J){let Q=I0({path:$}),Z=Buffer.alloc(0),q="version",z=0,W=!1,H=[],C=0,L=!1,B=(V)=>{if(L)return;L=!0,Q.destroy(),J.end(V)},X=()=>B({reason:"display_protocol"}),F=(V)=>{if(L)return;if(!W){if(C+=V.byteLength,C>rJ)B({reason:"input_backpressure"});else H.push(V);return}if(Q.write(V),Q.writableLength>rJ)B({reason:"input_backpressure"})},j=(V)=>{Z=Z.subarray(V)},T=()=>{switch(q){case"version":{if(Z.byteLength<12)return!1;let V=/^RFB (\d{3})\.(\d{3})\n$/.exec(Z.subarray(0,12).toString("latin1"));if(!V||Number(V[1])*1000+Number(V[2])<3007)return X(),!1;return j(12),Q.write(`RFB 003.007
|
|
126
|
-
`),q="security",!0}case"security":{if(Z.byteLength<1)return!1;let V=Z[0];if(V===0)return X(),!1;if(Z.byteLength<1+V)return!1;if(!Z.subarray(1,1+V).includes(1))return X(),!1;return j(1+V),Q.write(Buffer.from([1,1])),q="init",!0}case"init":{if(Z.byteLength<24)return!1;let V=Z.readUInt32BE(20);if(V>65536)return X(),!1;if(Z.byteLength<24+V)return!1;let D={width:Z.readUInt16BE(0),height:Z.readUInt16BE(2)};if(j(24+V),D.width===0||D.height===0)return X(),!1;q="messages";let R=Buffer.alloc(12);R.writeUInt8(2,0),R.writeUInt16BE(2,2),R.writeInt32BE(g0,4),R.writeInt32BE(_0,8),Q.write(R),W=!0;for(let P of H)Q.write(P);return H=[],C=0,J.ready(D),!L}case"skip":{let V=Math.min(z,Z.byteLength);if(j(V),z-=V,z>0)return!1;return q="messages",!0}case"messages":{if(Z.byteLength<1)return!1;switch(Z[0]){case 1:{if(Z.byteLength<6)return!1;let V=6+Z.readUInt16BE(4)*6;if(Z.byteLength<V)return!1;return j(V),!0}case 2:return j(1),!0;case 3:{if(Z.byteLength<8)return!1;let V=Z.readUInt32BE(4);if(V>M/2)return j(8),q="skip",z=V,!0;if(Z.byteLength<8+V)return!1;let D=Z.subarray(8,8+V).toString("latin1");return j(8+V),J.clipboard(D),!L}default:return X(),!1}}}},I=!1;return Q.once("connect",()=>{I=!0}),Q.on("data",(V)=>{if(L)return;Z=Z.byteLength?Buffer.concat([Z,V]):V;while(!L&&T());}),Q.once("error",()=>{if(!I)B({error:new c("display_unavailable","Reason could not reach this machine's desktop server.")})}),Q.once("close",()=>B({reason:"display_closed"})),{pointer(V,D,R){let P=Buffer.alloc(6);P.writeUInt8(5,0),P.writeUInt8(R&255,1),P.writeUInt16BE(V,2),P.writeUInt16BE(D,4),F(P)},key(V,D){let R=Buffer.alloc(8);R.writeUInt8(4,0),R.writeUInt8(V?1:0,1),R.writeUInt32BE(D>>>0,4),F(R)},clipboard(V){if(Array.from(V).some((P)=>P.codePointAt(0)>255)){B({reason:"clipboard_unicode_unsupported"});return}let D=Buffer.from(V,"latin1"),R=Buffer.alloc(8);R.writeUInt8(6,0),R.writeUInt32BE(D.byteLength,4),F(Buffer.concat([R,D]))},close(){L=!0,Q.destroy()}}}class t${run=null;viewers=new Set;get running(){return this.run!==null}start($,J,Q,Z){this.viewers.add($),this.stop();let q;try{q=Q()}catch{this.fail();return}WQ(q);let z={child:q,splitter:new HQ};this.run=z;for(let H of[...this.viewers])H.started(J);q.stdout?.on("data",(H)=>{if(this.run!==z)return;for(let C of z.splitter.push(H,Z()))for(let L of[...this.viewers])L.unit(C)});let W=()=>{if(this.run!==z)return;this.run=null,this.fail()};q.once("exit",W),q.once("error",W)}leave($){if(!this.viewers.delete($))return;if(this.viewers.size===0)this.stop()}stop(){if(!this.run)return;VQ(this.run.child),this.run=null}fail(){for(let $ of[...this.viewers])$.failed()}}var eJ=new WeakMap;function d0($){let J=eJ.get($);if(!J)eJ.set($,J=new t$);return J}var e=new Map;function z8($,J,Q={}){let Z=Q.micros??E0,q=new ZQ,z=J.request.preset,W=null,H=null,C=null,L=!1,B=null,X=!1,F=!1,j=null,T=0,I=0,V=!1,D=null,R=null,P=0,_=null,O=[],$$=0,g=[],e$=new Uint32Array(a$+1),L$=0,U$=null,C$=0,r=0,F$=0,$J=0,JJ=0,J$=null,D$=0,h={frames:0,bytes:0,since:Z()},u=[],a=0,N$,R$=!1,KQ=Z(),w={},m=()=>Math.round((Z()-KQ)/1000),QJ=Q.control??HJ,I$=null,P$=null,ZJ=0,x$=!1,qJ={pause(){if(!B?.running)return;B.stop(),x$=!0},adopt(Y){let G=Y!==null&&(Y.width!==H?.width||Y.height!==H?.height);if(G)H=Y;if(!G&&!x$)return;if(x$=!1,B)W$();else A$()}},BQ=(Y)=>{if(!Q.resizeDesktop||!W||"kind"in W||$.done)return;let G=W.display,K=()=>[...e.get(G)??[]];ZJ++,Q.resizeDesktop(W,Y,()=>{for(let N of K())N.pause()}).then((N)=>{for(let x of K())x.adopt(N)})},k=(Y)=>{let G=QQ(Y);return $.send(G),$J+=G.byteLength,G.byteLength},Q$=(Y)=>{if($.done)return;if($.open)k({type:"error",code:Y});$.end({reason:Y})},Z$=()=>Math.max(x0,i[z].kbps*1000/8*M0),q$=()=>Z()/1000,LQ=()=>{while(g.length>1&&g[0].atMs<q$()-A0)g.shift();return g[0]?.rttMs??null},zJ=(Y)=>{let G=LQ();if(G===null||O.length===0)return!1;let K=(G+O0)*Y;return q$()-O[0].sentMs>K||$$>K/1000*i[z].kbps*1000/8},UQ=(Y)=>{if(P===0)return;let G=Math.min(Y,P-1);if(_!==null&&G<=_)return;_=G;let K=q$();while(O.length&&O[0].seq<=G){let N=O.shift();if($$-=N.bytes,N.seq!==G)continue;let x=Math.max(0,K-N.sentMs);while(g.length&&g.at(-1).rttMs>=x)g.pop();g.push({atMs:K,rttMs:x}),e$[Math.min(a$,Math.round(x))]++,L$++,U$=Math.min(U$??x,x)}},CQ=()=>{let Y=0;for(let G=0;G<=a$;G++)if(Y+=e$[G],Y*2>=L$)return G;return 0},FQ=()=>$.bufferedAmount<=Z$()/2&&!zJ(0.5),WJ=()=>{R$=!0,u=[],a=0,B?.leave(M$),B=null},VJ=(Y)=>{if($.done)return;if(Y.key)w.first_key_ms??=m();if(!L){if(!B||u.length===0&&!Y.key)return;if(u.push(Y),a+=Y.data.byteLength,a>Z$())WJ();return}if(V){r++;return}if($.bufferedAmount>Z$()||zJ(1)){V=!0,r++,D=setInterval(()=>{if($.done||!FQ())return;if(D)clearInterval(D);D=null,V=!1,W$()},Q.drainPollMs??25);return}if(!X){if(!Y.key){r++;return}if(k({type:"hello",width:H.width,height:H.height,fps:i[z].fps,preset:z,codec:P0}),X=!0,w.first_frame_ms??=m(),!F&&W?.sound)k({type:"audioHello",...t}),F=!0}let G=k({type:"frame",key:Y.key,seq:P,captureMicros:Y.micros,data:Y.data});if(O.push({seq:P,sentMs:q$(),bytes:G}),$$+=G,O.length>w0)$$-=O.shift().bytes;P++,C$++,J$??=Y.micros,D$=Y.micros,h.frames++,h.bytes+=G},M$={started(Y){z=Y,X=!1,u=[],a=0},unit:VJ,failed:()=>Q$("encoder_failed")},O$=()=>{let Y=(Q.ffmpeg??aJ)();if(!W||!H){Q$("encoder_failed");return}let[G,K]=[W,H],N="kind"in G&&G.kind==="simulator"?G.stream:null;if(!Y&&!N){Q$("encoder_failed");return}if(B??="kind"in G&&G.kind==="mac_screen"?d0(Q.spawn??oJ):new t$,w.encoder_ms===void 0)w.encoder_ms=m(),w.encoder_shared=B.running;B.start(M$,z,()=>{let x=i[z].fps;if(N)return N(x,i[z].kbps,YQ);if("kind"in G&&G.kind==="simulator"){let A=Math.min(0.99,GQ(G.size)),y={width:G.size.width*A,height:G.size.height*A};return l0(Y,K$(z,m0(Math.min(x,30)),y,(Q.macEncoder??sJ)()),G)}if("kind"in G&&G.kind==="windows_screen")return(Q.spawn??B$)(Y,K$(z,u0(x,K),tJ(K)),{SystemRoot:process.env.SystemRoot??"C:\\Windows"});return"kind"in G?(Q.spawn??oJ)(Y,K$(z,h0(x),tJ(K),(Q.macEncoder??sJ)()),{}):(Q.spawn??B$)(Y,K$(z,f0(x,K,G.display),K),{DISPLAY:G.display,XAUTHORITY:G.xauthority})},Z)},z$=()=>{if(!j)return;VQ(j.child),j=null},DQ=()=>{let Y=(Q.ffmpeg??aJ)();if(j||$.done||!F||!W?.sound||!Y)return;let G;try{G=(Q.spawn??B$)(Y,cJ(),{PULSE_SERVER:lJ(W.sound)})}catch{return}WQ(G);let K={child:G,reader:new r$};j=K,G.stdout?.on("data",(x)=>{if(j!==K||$.done)return;let A;try{A=K.reader.push(x)}catch{z$();return}let y=Z();for(let T$ of A){if($.bufferedAmount>Z$()){I++;continue}k({type:"audio",captureMicros:y,data:T$}),T++}});let N=()=>{if(j===K)z$()};G.once("exit",N),G.once("error",N)},W$=()=>{if(!B||$.done)return;F$++,O$()},A$=()=>{if($.done||!H)return;if(!L){if(B||R$)return;O$(),N$=setTimeout(()=>{if(!L)WJ()},v0);return}if(clearTimeout(N$),w.encoder_early===void 0){if(w.encoder_early=B!==null,R$)w.hold_lapsed=!0}if(!B)O$();let Y=u;u=[],a=0;for(let G of Y)VJ(G);R??=setInterval(()=>{let G=Z(),K=Math.max(0.001,(G-h.since)/1e6);k({type:"stats",stats:{fps:Math.round(h.frames/K*10)/10,kbps:Math.round(h.bytes*8/1000/K),dropped:r,restarts:F$,queued_bytes:$.bufferedAmount}}),h={frames:0,bytes:0,since:G}},b0)};J.desktop.then((Y)=>{if($.done)return;W=Y;let G={ready(K){H=K,w.desktop_ms??=m(),A$()},clipboard(K){if($.open&&Buffer.byteLength(K)<=M)k({type:"serverClipboard",text:K})},end(K){if("reason"in K&&$.open)k({type:"error",code:K.reason});$.end(K)}};if("kind"in Y&&Y.kind==="simulator")C=Y.input,G.ready(Y.points);else if("kind"in Y&&Y.kind==="windows_screen")C=(Q.windowsInput??RJ)(G);else if("kind"in Y)C=(Q.macInput??((K)=>zQ(K,n$())))(G);else{let K=e.get(Y.display);if(!K)e.set(Y.display,K=new Set);K.add(qJ);let N=(Q.linuxClipboard??pJ)(Y,G),x=c0(Y.rfbSocket,{...G,clipboard:(A)=>{if(!N)G.clipboard(A)}});C=N?{pointer:(A,y,T$)=>N.apply(()=>x.pointer(A,y,T$)),key:(A,y)=>N.apply(()=>x.key(A,y)),clipboard:(A)=>N.write(A),close(){N.close(),x.close()}}:x}YJ()},(Y)=>$.end({error:Y}));function YJ(){if(P$||!J.viewerSameNetwork||!L||$.done||!W||!("kind"in W)||W.kind!=="mac_screen")return;P$=(Q.macWindows??qQ)((Y)=>{if($.open)k({type:"windows",bounds:Y})})}let GJ={viewer:J.viewer??null,notify(Y){if($.open)k({type:"control",control:Y})}},w$=(Y)=>{if(!C)return;if(!W||!("kind"in W)||W.kind!=="simulator")QJ.claim(GJ);Y(C)};return{opened(){w.relay_ms??=m()},received(Y){JJ+=Y.byteLength;let G;try{G=q.push(Y)}catch{Q$("viewer_protocol");return}for(let K of G){if($.done)return;switch(K.type){case"ping":k({type:"pong",token:K.token});break;case"pointer":w$((N)=>N.pointer(K.x,K.y,K.buttons));break;case"key":w$((N)=>N.key(K.down,K.keysym));break;case"clientClipboard":w$((N)=>N.clipboard(K.text));break;case"config":if(K.preset!==z)z=K.preset,W$();break;case"keyframeRequest":if(X&&!V)W$();break;case"ack":UQ(K.seq);break;case"audioEnable":if(K.on)DQ();else z$();break;case"resize":BQ({width:K.width,height:K.height});break;default:break}}if(!L&&!$.done){if(L=!0,w.viewer_ms=m(),J.viewer)I$=QJ.join(GJ);A$(),YJ()}},close(){if(W&&!("kind"in W)){let Y=e.get(W.display);if(Y?.delete(qJ),Y?.size===0)e.delete(W.display)}if(I$?.(),I$=null,P$?.close(),D)clearInterval(D);if(R)clearInterval(R);clearTimeout(N$),B?.leave(M$),z$(),C?.close()},summary:()=>({output_bytes:$J,input_bytes:JJ,video:{preset:z,frames:C$,dropped:r,restarts:F$,avg_fps:J$!==null&&D$>J$?Math.round((C$-1)/((D$-J$)/1e6)*10)/10:0,min_rtt_ms:Math.round(U$??0),p50_rtt_ms:L$?CQ():0,audio_packets:T,audio_dropped:I,resizes:ZJ,connect:w}})}}var $Q=null,XQ=null,p0=null,i0=null;function r0(){let $=n();return $?.features.display?$.ffmpeg:null}function jQ($){return $Q??=new Promise((J)=>{N0($,["-hide_banner","-encoders"],{env:{},timeout:5000,killSignal:"SIGKILL",maxBuffer:1048576,encoding:"utf8"},(Q,Z)=>{let q=(z)=>!Q&&new RegExp(`^\\s*V\\S*\\s+${z}\\s`,"m").test(Z);J(XQ={x264:q("libx264"),videotoolbox:q("h264_videotoolbox")})})}),$Q}var JQ=null;function W8(){return JQ??=(async()=>{let $=[n()?.ffmpeg,"/opt/homebrew/bin/ffmpeg","/usr/local/bin/ffmpeg"].find((Q)=>Boolean(Q&&R0(Q)));if(!$)return null;let J=await jQ($);return J.videotoolbox||J.x264?$:null})(),JQ}function V8($=process.platform,J={}){if($!=="linux"&&$!=="darwin"&&$!=="win32")return Promise.resolve(!1);let Q=(J.ffmpeg??r0)();if(!Q)return Promise.resolve(!1);let Z=(J.encoders??jQ)(Q);if($==="linux")return Z.then((z)=>z.x264);if($==="win32"){let z=J.windowsScreen?J.windowsScreen():i0??=FJ();return Promise.all([Z,z]).then(([W,H])=>W.x264&&(H?.session??0)>0)}let q=J.macScreen?J.macScreen():p0??=f$(n$());return Promise.all([Z,q]).then(([z,W])=>(z.x264||z.videotoolbox)&&W?.screen===!0&&W.accessibility)}
|
|
127
|
-
export{k$ as Tg,o0 as Ug,l as Vg,t0 as Wg,B0 as Xg,lJ as Yg,u4 as Zg,Z8 as _g,q8 as $g,z8 as ah,W8 as bh,V8 as ch,PJ as dh,yJ as eh,n as fh,b4 as gh,_4 as hh,g4 as ih};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Jd as iq,Kd as aq}from"./vm-hands-entry-lite-tbdcmq09.js";import{Cj as Xq,Dj as Zq,Ej as _,Hj as nq,Jj as Eq,Kj as rq,Mj as c,Nj as b,Oj as Iq,xj as Oq,yj as pq}from"./vm-hands-entry-lite-wbfmc0xn.js";import{Qj as cq,Rj as hq,Tj as lq,Wj as oq,Xj as sq,Yj as uq,Zj as Dq}from"./vm-hands-entry-lite-r374pchj.js";import{mk as g}from"./vm-hands-entry-lite-56v9haps.js";import{bl as Hq}from"./vm-hands-entry-lite-8p8hz0j1.js";import{xl as Gq}from"./vm-hands-entry-lite-kqbats5n.js";import{randomUUID as S}from"crypto";import{chmodSync as Jq,closeSync as u,constants as d,existsSync as E,fstatSync as eq,lstatSync as A,mkdirSync as r,openSync as tq,readFileSync as y,readdirSync as _q,readlinkSync as I,realpathSync as T,renameSync as k,rmSync as P,statSync as x,symlinkSync as Qq,unlinkSync as C,writeFileSync as h}from"fs";import{basename as n,dirname as B,isAbsolute as EG,join as $,relative as IG,resolve as O,sep as Cq}from"path";import{spawnSync as Rq}from"child_process";import{createRequire as qG}from"module";var $q=1,GG=1,JG=128,CG=65536,TG="https://reasonmachines.com/api/runtime-manifest-v2",SG=30000,FG=600000,gq=1e4,LG=60000,wG=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;var bq=/^[a-z0-9_.-]{1,80}$/,kG=64,xG="so.ara.device-broker",QG=[xG,"com.reasonmachines.device-broker"],dJ=hq(QG),yq=["com.apple.security.cs.allow-jit","com.apple.security.cs.allow-unsigned-executable-memory"],VG=["service.install_started","service.install_completed","service.install_failed","service.launcher_adopted","service.launcher_conflict","service.started","service.reconnecting","service.reconnected","service.idle_sleep_held","service.idle_sleep_released","service.idle_sleep_failed","service.start_failed","service.stopped","service.exit_failed","service.singleton_rejected","credential.migration_started","credential.migration_completed","credential.migration_failed","credential.store_started","credential.store_completed","credential.store_failed","credential.delete_started","credential.delete_completed","credential.delete_failed","update.check_started","update.not_available","update.download_started","update.downloaded","update.verified","update.activated","update.rollback","update.failed","executor.update.check_started","executor.update.not_available","executor.update.download_started","executor.update.downloaded","executor.update.verified","executor.update.activated","executor.update.rollback","executor.update.failed","identity.refresh_completed","identity.refresh_failed","update.device_moved","update.components_installed","update.deferred","update.deferral_expired","worker.previous_exit","worker.capabilities_withheld","identity.computer_use_unavailable"];function t(q){if(q?.aborted)throw new _("update_cancelled","Managed runtime update request was cancelled.")}function Tq(q){return Boolean(q)&&typeof q==="object"&&!Array.isArray(q)}function Sq(q,G,J=[]){let Q=new Set([...G,...J]);return G.every((R)=>(R in q))&&Object.keys(q).every((R)=>Q.has(R))}function D(q){return typeof q==="string"&&wG.test(q)}function RG(q){return typeof q==="string"&&!Number.isNaN(Date.parse(q))&&new Date(q).toISOString()===q}function PG(q){return Zq.includes(q)}function f(q){r(q,{recursive:!0,mode:448}),Jq(q,448)}function UG(q,G){f(B(q));let J=`${q}.${process.pid}.${S()}.tmp`;try{h(J,G,{mode:384,flag:"wx"}),Jq(J,384),k(J,q)}finally{if(E(J))C(J)}}function Fq(q={}){if((q.platform??process.platform)!=="darwin")throw new _("unsupported_platform","The managed Reason runtime is currently available only on macOS.");let J=q.environment??process.env,Q=Hq(J,"REASON_CLI_CHANNEL")==="staging",R=Q?Hq(J,"REASON_MANAGED_RUNTIME_ROOT")?.trim():void 0,W=q.root!==void 0||Boolean(R&&EG(R))?null:$(q.home??g(),"Library","Application Support"),X=q.root??(W?$(W,Q?"Reason Staging":"Reason","CLI"):R);return{executableName:"reason",root:X,...W?{legacyRoot:$(W,"Ara",...Q?["staging","runtime"]:["runtime"])}:{},versions:$(X,"versions"),current:$(X,"current"),previous:$(X,"previous"),brokerLock:$(X,"broker.lock"),transitionLock:$(X,"transition.lock"),lifecycleEvents:$(X,"lifecycle-events")}}function cJ(q){let G=q.legacyRoot;if(!G)return null;return{root:G,versions:$(G,"versions"),current:$(G,"current"),previous:$(G,"previous"),brokerLock:$(G,"broker.lock"),transitionLock:$(G,"transition.lock"),lifecycleEvents:$(G,"lifecycle-events")}}function F(q,G){if(!D(G))throw new _("invalid_version","Invalid managed Reason runtime version.");let J=$(q.versions,G,"ara");if(!q.executableName)return J;let Q=$(q.versions,G,q.executableName),R=(X)=>{try{return A(X),!0}catch(Z){if(Z.code==="ENOENT")return!1;throw Z}},U=R(J),W=R(Q);if(U&&W)throw new _("installed_artifact_mismatch","Ambiguous managed runtime executable layout.");return U?J:Q}function i(q,G){if(!D(G))throw new _("invalid_version","Invalid managed Reason runtime version.");return Lq(F(q,G))}function Lq(q){return $(B(q),n(q)==="reason"?pq:Oq)}function WG(q,G){if(!D(q)||!D(G))throw new _("invalid_version","Invalid managed Reason runtime version.");let[J,Q]=q.split("-",2),[R,U]=G.split("-",2),W=J.split(".").map(Number),X=R.split(".").map(Number);for(let H=0;H<3;H+=1){let j=W[H]-X[H];if(j!==0)return j<0?-1:1}if(Q===void 0||U===void 0){if(Q===U)return 0;return Q===void 0?1:-1}let Z=Q.split("."),K=U.split("."),Y=Math.max(Z.length,K.length);for(let H=0;H<Y;H+=1){let j=Z[H],z=K[H];if(j===void 0||z===void 0){if(j===z)return 0;return j===void 0?-1:1}if(j===z)continue;let M=/^\d+$/.test(j),w=/^\d+$/.test(z);if(M&&w)return Number(j)<Number(z)?-1:1;if(M!==w)return M?-1:1;return j<z?-1:1}return 0}function gG(q=process.arch){let G=`darwin-${q}`;if(!PG(G))throw new _("unsupported_architecture","The managed Reason runtime supports only Apple Silicon and Intel Macs.");return G}function fq(q){return[...q.matchAll(/<key>\s*([^<]+?)\s*<\/key>/g)].map((G)=>G[1].trim())}function mq(q){let G=q.match(/^CodeDirectory .*$/gm)??[];return G.length>0&&G.every((J)=>{return(/ flags=0x[0-9a-f]+\(([^)]*)\)(?: |$)/.exec(J)?.[1]?.split(/[ ,]+/).filter(Boolean)??[]).includes("runtime")})}function bG(q){let G=`TeamIdentifier=${cq}`,J=QG.map((U)=>`Identifier=${U}`),Q=fq(q.brokerEntitlements),R=fq(q.credentialLibraryEntitlements);if(!q.brokerDetail.split(`
|
|
3
|
-
`).includes(G)||!q.brokerDetail.split(`
|
|
4
|
-
`).some((U)=>J.includes(U))||!mq(q.brokerDetail)||Q.length!==yq.length||yq.some((U)=>!new RegExp(`<key>\\s*${U.replaceAll(".","\\.")}\\s*</key>\\s*<true\\s*/>`).test(q.brokerEntitlements)))throw new _("invalid_code_signature","Managed runtime broker has an invalid Reason signature, identifier, or entitlement set.");if(!q.credentialLibraryDetail.split(`
|
|
5
|
-
`).includes(G)||!mq(q.credentialLibraryDetail)||R.length!==0)throw new _("invalid_code_signature","Managed runtime credential library has an invalid signature or entitlement.")}function m(q,G){let J=Rq("/usr/bin/codesign",q,{stdio:["ignore","pipe","pipe"]});if(J.status!==0)throw new _("invalid_code_signature",G);return[new TextDecoder().decode(J.stdout??new Uint8Array),new TextDecoder().decode(J.stderr??new Uint8Array)].join("")}var wq=(q,G)=>{m(["--verify","--strict","--verbose=2",q],"Managed runtime broker code signature is invalid."),m(["--verify","--strict","--verbose=2",G],"Managed runtime credential library code signature is invalid."),bG({brokerDetail:m(["-d","--verbose=4",q],"Managed runtime broker signer could not be inspected."),brokerEntitlements:m(["-d","--entitlements",":-",q],"Managed runtime broker entitlements could not be inspected."),credentialLibraryDetail:m(["-d","--verbose=4",G],"Managed runtime credential library signer could not be inspected."),credentialLibraryEntitlements:m(["-d","--entitlements",":-",G],"Managed runtime credential library entitlements could not be inspected.")})};async function yG(q,G,J){let Q=q.headers.get("content-length");if(Q!==null){let Y=Number(Q);if(!Number.isSafeInteger(Y)||Y<0||Y>G)throw new _("response_too_large","Managed runtime response exceeded its size limit.")}if(!q.body){let Y=new Uint8Array(await q.arrayBuffer());if(Y.byteLength>G)throw new _("response_too_large","Managed runtime response exceeded its size limit.");return Y}let R=q.body.getReader(),U=[],W=0,X=()=>{if(!J)return R.read();return new Promise((Y,H)=>{let j=()=>{J.removeEventListener("abort",j),R.cancel(J.reason).catch(()=>{}),H(J.reason??new DOMException("Aborted","AbortError"))};if(J.aborted){j();return}J.addEventListener("abort",j,{once:!0}),R.read().then((z)=>{J.removeEventListener("abort",j),Y(z)},(z)=>{J.removeEventListener("abort",j),H(z)})})};try{while(!0){let Y=await X();if(Y.done)break;if(W+=Y.value.byteLength,W>G)throw await R.cancel(),new _("response_too_large","Managed runtime response exceeded its size limit.");U.push(Y.value)}}finally{try{R.releaseLock()}catch{}}let Z=new Uint8Array(W),K=0;for(let Y of U)Z.set(Y,K),K+=Y.byteLength;return Z}async function p(q){let G;try{G=new URL(q.url)}catch{throw new _("invalid_update_url","Managed runtime update URL is invalid.")}if(G.protocol!=="https:"||G.username||G.password||G.hash)throw new _("invalid_update_url","Managed runtime update URL must use HTTPS.");let J=new AbortController,Q,R=()=>{Q??="caller",J.abort(q.signal?.reason)};if(q.signal?.aborted)R();else q.signal?.addEventListener("abort",R,{once:!0});let U=setTimeout(()=>{Q??="timeout",J.abort(Error("managed runtime fetch timed out"))},q.timeoutMs),W=(X,Z)=>{if(X instanceof _)return X;if(Q==="caller")return new _("update_cancelled","Managed runtime update request was cancelled.");if(Q==="timeout")return new _("update_fetch_timeout","Managed runtime update request timed out.");return new _("update_fetch_failed",Z)};try{let X;try{if(X=await q.fetchImpl(G,{headers:{accept:q.accept},signal:J.signal}),J.signal.aborted)throw W(J.signal.reason,"Managed runtime update request was cancelled.")}catch(Z){throw W(Z,"Managed runtime update request failed.")}if(!X.ok)throw new _("update_http_error","Managed runtime update request was rejected.");if(X.url&&new URL(X.url).protocol!=="https:")throw new _("insecure_redirect","Managed runtime update redirected to an insecure URL.");try{let Z=await yG(X,q.maximumBytes,J.signal);if(J.signal.aborted)throw W(J.signal.reason,"Managed runtime update response was cancelled.");return Z}catch(Z){throw W(Z,"Managed runtime update response failed.")}}finally{clearTimeout(U),q.signal?.removeEventListener("abort",R)}}async function XG(q,G,J=gq,Q){let R=typeof J==="number"?J:gq,U=typeof J==="number"?Q:J;if(U?.aborted)return!1;let W=await iq([q,"--version"],{timeoutMs:R,...U?{signal:U}:{}});return W.exitCode===0&&W.stdout.trim().replace(/^v/,"")===G}async function fG(q){let G=!1,J=null,Q=null,R=(U)=>{try{N(q.paths,U,{now:q.now})}catch{}};try{let U=q.home??g();if(!uq(q.manifest.version,U))return{status:"current"};Q=sq(U);let W=await p({url:new URL(nq,q.manifest.artifacts[q.target].broker.url).toString(),maximumBytes:Xq,fetchImpl:async(j,z)=>{let M=await q.fetchImpl(j,z);return G=M.status===404,M},timeoutMs:q.timeoutMs,accept:"application/json",signal:q.signal}),{manifest:X}=rq(new TextDecoder().decode(W),q.trustedKeys);if(X.version!==q.manifest.version||X.published_at!==q.manifest.published_at)throw new _("identity_manifest_mismatch","Background identity manifest names another release.");let Z=X.artifacts[q.target],K=await p({url:Z.url,maximumBytes:Z.size_bytes,fetchImpl:q.fetchImpl,timeoutMs:q.timeoutMs,accept:"application/octet-stream",signal:q.signal});b(K,Z),f(q.workDirectory),J=$(q.workDirectory,`.identity-${process.pid}-${S()}`),r(J,{mode:448});let Y=$(J,"identity.tgz");if(h(Y,K,{mode:384,flag:"wx"}),Rq("/usr/bin/tar",["-xzf",Y,"-C",J],{stdio:"ignore",timeout:60000}).status!==0)throw new _("identity_extract_failed","Background identity archive could not be extracted.");return Dq({sourceApp:$(J,"Reason.app"),home:U,releaseSigned:!0,...q.command?{command:q.command}:{}}),R({event:"identity.refresh_completed",runtime_version:q.manifest.version,...Q?{from_version:Q}:{},to_version:q.manifest.version}),{status:"installed"}}catch(U){if(G)return{status:"unpublished"};let W=U instanceof _||U instanceof lq?U.code:"identity_install_failed";return process.stderr.write(`Reason background identity: identity_update_failed (${W})
|
|
6
|
-
`),R({event:"identity.refresh_failed",runtime_version:q.manifest.version,...Q?{from_version:Q}:{},to_version:q.manifest.version,reason_code:W}),{status:"failed",code:W}}finally{if(J)P(J,{recursive:!0,force:!0})}}async function hJ(q){if(!D(q.currentVersion))throw new _("invalid_version","Invalid current managed runtime version.");let G=q.paths??Fq(),J=q.target??gG(),Q=q.fetchImpl??fetch,R=q.timeoutMs??SG,U=q.timeoutMs??FG,W=q.healthCheck??((H,j,z)=>XG(H,j,LG,z)),X=q.verifyCodeSignatures??wq,Z=q.now?.()??new Date,K,Y=!1;N(G,{event:"update.check_started",runtime_version:q.currentVersion,from_version:q.currentVersion},{now:()=>Z});try{await pG({paths:G,verifyCodeSignatures:X,healthCheck:W});let H=await p({url:q.manifestUrl??TG,maximumBytes:Xq,fetchImpl:Q,timeoutMs:R,accept:"application/json",signal:q.signal}),j=Eq(new TextDecoder().decode(H),q.trustedKeys);K=j.manifest.version;let z=()=>fG({paths:G,...q.now?{now:q.now}:{},manifest:j.manifest,target:J,trustedKeys:q.trustedKeys,fetchImpl:Q,timeoutMs:U,workDirectory:G.versions,...q.home?{home:q.home}:{},...q.identityCommand?{command:q.identityCommand}:{},...q.signal?{signal:q.signal}:{}});if(WG(K,q.currentVersion)<=0)return N(G,{event:"update.not_available",runtime_version:q.currentVersion,from_version:q.currentVersion,to_version:K,duration_ms:Math.max(0,(q.now?.()??new Date).getTime()-Z.getTime())},{now:q.now}),zq(G,q.home),{status:"not_available",currentVersion:q.currentVersion,offeredVersion:K,...K===q.currentVersion?{identity:await z()}:{}};let M=j.manifest.artifacts[J];N(G,{event:"update.download_started",runtime_version:q.currentVersion,from_version:q.currentVersion,to_version:K},{now:q.now});let w=await p({url:M.broker.url,maximumBytes:M.broker.size_bytes,fetchImpl:Q,timeoutMs:U,accept:"application/octet-stream",signal:q.signal});b(w,M.broker),t(q.signal);let e=await p({url:M.credential_library.url,maximumBytes:M.credential_library.size_bytes,fetchImpl:Q,timeoutMs:U,accept:"application/octet-stream",signal:q.signal});b(e,M.credential_library),N(G,{event:"update.downloaded",runtime_version:q.currentVersion,from_version:q.currentVersion,to_version:K},{now:q.now}),N(G,{event:"update.verified",runtime_version:q.currentVersion,from_version:q.currentVersion,to_version:K},{now:q.now}),t(q.signal);let Vq=ZG({paths:G,version:K,artifact:M.broker,bytes:w,credentialLibraryArtifact:M.credential_library,credentialLibraryBytes:e,verifyCodeSignatures:X}),Pq;try{Pq=await W(Vq.executablePath,K,q.signal)}catch(l){throw t(q.signal),l}if(t(q.signal),!Pq)throw new _("pre_activation_health_failed","Managed runtime preflight failed.");let V=lG(G,K);if(!V.changed&&V.toVersion!==K)return N(G,{event:"update.not_available",runtime_version:V.toVersion,from_version:V.toVersion,to_version:K,duration_ms:Math.max(0,(q.now?.()??new Date).getTime()-Z.getTime())},{now:q.now}),{status:"not_available",currentVersion:V.toVersion,offeredVersion:K};if(Y=V.changed,!await W(G.current,K)){if(V.fromVersion){let l=zG(G,K);N(G,{event:"update.rollback",runtime_version:l.toVersion,from_version:l.fromVersion,to_version:l.toVersion,reason_code:"post_activation_health_failed"},{now:q.now})}else NG(G,K);throw v(G),Y=!1,new _("post_activation_health_failed","Managed runtime activation failed.")}return v(G),zq(G,q.home),N(G,{event:"update.activated",runtime_version:K,from_version:q.currentVersion,to_version:K,duration_ms:Math.max(0,(q.now?.()??new Date).getTime()-Z.getTime())},{now:q.now}),{status:"activated",fromVersion:q.currentVersion,toVersion:K,installed:Vq.installed,identity:await z()}}catch(H){throw N(G,{event:"update.failed",runtime_version:Y?K??q.currentVersion:q.currentVersion,from_version:q.currentVersion,...K?{to_version:K}:{},reason_code:H instanceof _?H.code:"update_failed",duration_ms:Math.max(0,(q.now?.()??new Date).getTime()-Z.getTime())},{now:q.now}),H}}function vq(q,G,J){try{let Q=A(B(q));if(!Q.isDirectory()||Q.isSymbolicLink())return!1;let R=A(q);if(!R.isFile()||R.isSymbolicLink()||R.size!==G.size_bytes)return!1;let U=Lq(q),W=A(U);return W.isFile()&&!W.isSymbolicLink()&&W.size===J.size_bytes&&c(y(q))===G.sha256&&c(y(U))===J.sha256}catch{return!1}}function ZG(q){let G=F(q.paths,q.version);b(q.bytes,q.artifact),b(q.credentialLibraryBytes,q.credentialLibraryArtifact);let J=q.verifyCodeSignatures??wq;if(f(q.paths.root),f(q.paths.versions),E(B(G))){if(!vq(G,q.artifact,q.credentialLibraryArtifact))throw new _("installed_artifact_mismatch","The installed runtime version does not match the verified artifact.");return J(G,i(q.paths,q.version)),{installed:!1,executablePath:G}}let Q=$(q.paths.versions,`.install-${q.version}-${process.pid}-${S()}`),R=$(Q,n(G)),U=Lq(R);r(Q,{mode:448});try{h(R,q.bytes,{mode:448,flag:"wx"}),Jq(R,448),h(U,q.credentialLibraryBytes,{mode:448,flag:"wx"}),Jq(U,448),J(R,U);try{k(Q,B(G))}catch(W){if(!vq(G,q.artifact,q.credentialLibraryArtifact))throw W;return{installed:!1,executablePath:G}}return{installed:!0,executablePath:G}}finally{P(Q,{recursive:!0,force:!0})}}function mG(q,G){if(!D(G))throw new _("invalid_version","Invalid managed Reason runtime version.");return`versions/${G}/${n(F(q,G))}`}function Uq(q,G){f(B(q));let J=`${q}.${process.pid}.${S()}.tmp`;try{Qq(G,J),k(J,q)}finally{if(E(J))C(J)}}var _G=/^\.(?:ara|reason)-worker-(\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?)-(darwin-(?:arm64|x64))\.([0-9A-Za-z]{6})$/,vG=new Set(["reason","ara"]);function $G(q,G){let J=B(q),Q=O(J,G),R=B(Q),U=_G.exec(n(R));if(!vG.has(n(Q))||B(R)!==J||!U||!D(U[1])||!Zq.includes(U[2]))return!1;try{return A(R).isDirectory()&&B(T(R))===T(J)&&A(Q).isFile()&&A(Iq(R)).isFile()}catch(W){if(W.code==="ENOENT")return!1;throw W}}function KG(q,G,J){try{if(I(q)!==G)return!1;C(q)}catch(Q){if(Q.code==="ENOENT")return!1;throw Q}try{return Qq(J,q),!0}catch(Q){if(Q.code==="EEXIST")return!1;try{Qq(G,q)}catch(R){if(R.code!=="EEXIST")throw R}throw Q}}function YG(q,G){if(!q.legacyRoot)return!1;let J;try{if(!A(G).isSymbolicLink())return!1;J=I(G)}catch(R){if(R.code==="ENOENT")return!1;throw R}if(O(B(G),J)!==$(q.legacyRoot,"current"))return!1;if(!KG(G,J,q.current))return!1;let Q=L(q);if(Q)N(q,{event:"service.launcher_adopted",runtime_version:Q,to_version:Q,reason_code:"legacy_runtime_root"});return!0}function dG(q,G){let J=$(q,".local","bin"),Q=$(J,"ara"),R=$(J,"reason"),U=A(Q,{throwIfNoEntry:!1});if(U?.isSymbolicLink()&&I(Q)==="reason")return R;if(U||!A(R,{throwIfNoEntry:!1})?.isSymbolicLink())return Q;let W=I(R);return W===G.current||$G(R,W)?R:Q}function cG(q){let G=q.launcherPath??dG(q.home??g(),q.paths);try{if(A(G).isSymbolicLink()){let Q=I(G);if(Q===q.paths.current)return"managed";if($G(G,Q)&&KG(G,Q,q.paths.current)){let R=Kq(q.paths.current,q.paths.executableName)??"unknown";return N(q.paths,{event:"service.launcher_adopted",runtime_version:R,to_version:R,reason_code:"legacy_curl_entrypoint"}),"adopted"}if(YG(q.paths,G))return"adopted"}return"conflict"}catch(J){if(J.code!=="ENOENT")throw J}r(B(G),{recursive:!0,mode:448});for(let J=0;J<4;J+=1)try{return Qq(q.paths.current,G),"created"}catch(Q){if(Q.code!=="EEXIST")throw Q;try{return A(G).isSymbolicLink()&&I(G)===q.paths.current?"managed":"conflict"}catch(R){if(R.code!=="ENOENT")throw R}}return"conflict"}function Kq(q,G){let J;try{if(!A(q).isSymbolicLink())return null;J=I(q)}catch{return null}let Q=J.match(/^versions\/(\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?)\/(ara|Reason|reason)$/);return Q&&(Q[2]==="ara"||Q[2]===G)?Q[1]:null}function L(q){return Kq(q.current,q.executableName)}function lJ(q,G=process.execPath){try{return T(q.current)===T(G)}catch{return!1}}function Wq(q,G,J){let R=IG(G,q).split(Cq);return R.length===2&&D(R[0])&&(R[1]==="ara"||J!==void 0&&R[1]===J)?R[0]:null}function jG(q,G){try{return A(G).isSymbolicLink()&&O(B(G),I(G))===O(q.current)}catch{return!1}}function oJ(q,G=process.execPath){try{return Wq(T(G),T(q.versions),q.executableName)!==null}catch{let J=O(G);return J===O(q.current)||jG(q,J)||Wq(J,O(q.versions),q.executableName)!==null}}function sJ(q,G=process.execPath){try{return Wq(T(G),T(q.versions),q.executableName)}catch{let J=O(G);if(J===O(q.current)||jG(q,J))return L(q);return Wq(J,O(q.versions),q.executableName)}}function hG(q,G,J={}){let Q=F(q,G),R=i(q,G);if(!E(Q)||!x(Q).isFile()||!E(R)||!x(R).isFile())throw new _("runtime_not_installed","Managed Reason runtime version is not installed.");let U=kq(q,G,J.allowDowngrade);if(U)return U;return a(q,G,()=>{return HG(q,G,void 0,J.allowDowngrade)})}function kq(q,G,J=!1){let Q=L(q);if(!Q)return null;if(Q===G)return{changed:!1,fromVersion:Q,toVersion:Q};if(!J&&WG(G,Q)<=0&&!(/^\d+\.\d+\.\d+-desktop\.v1\.\d+\.\d+\.\d+$/.test(G)&&/^\d+\.\d+\.\d+-desktopdev\./.test(Q)))return{changed:!1,fromVersion:Q,toVersion:Q};return null}function HG(q,G,J,Q=!1){let R=kq(q,G,Q);if(R)return R;let U=L(q);if(J?.(U),U)Uq(q.previous,I(q.current));else if(E(q.previous))C(q.previous);return Uq(q.current,mG(q,G)),{changed:!0,fromVersion:U,toVersion:G}}function lG(q,G){let J=F(q,G),Q=i(q,G);if(!E(J)||!x(J).isFile()||!E(Q)||!x(Q).isFile())throw new _("runtime_not_installed","Managed Reason runtime version is not installed.");return a(q,G,()=>HG(q,G,(R)=>{uG(q,{schema_version:$q,from_version:R,to_version:G})}))}function zG(q,G){return a(q,G,()=>{if(L(q)!==G)throw new _("rollback_fence_failed","Managed runtime changed before rollback could be applied.");let J=Kq(q.previous,q.executableName);if(!J||J===G)throw new _("rollback_unavailable","No previous managed runtime is available.");let Q=F(q,J),R=i(q,J);if(!E(Q)||!x(Q).isFile()||!E(R)||!x(R).isFile())throw new _("rollback_unavailable","Previous managed runtime is not installed.");let U=I(q.previous),W=I(q.current);if(O(B(q.previous),U)!==O(Q))throw new _("rollback_fence_failed","Previous runtime pointer does not match its installed layout.");return Uq(q.current,U),Uq(q.previous,W),{fromVersion:G,toVersion:J}})}function MG(){let q=Rq("/bin/ps",["-axww","-o","args="],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:5000,maxBuffer:16777216});if(q.status!==0||typeof q.stdout!=="string")return null;let G=Rq("/usr/sbin/lsof",["-nP","-w","-d","txt","-Fn"],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:20000,maxBuffer:67108864});if(G.error||G.status!==0&&G.status!==1||!G.stdout)return null;return`${q.stdout}
|
|
7
|
-
${G.stdout}`}function zq(q,G){let J=[];oG(q,G??g());try{let Q=L(q);if(!Q||Mq(q))return J;let R=_q(q.versions).filter((W)=>D(W));if(R.length<=2)return J;let U=MG();if(U===null)return J;a(q,Q,()=>{let W=new Set([L(q),Kq(q.previous,q.executableName)]);if(Mq(q))return;for(let X of R){if(W.has(X))continue;let Z=$(q.versions,X);if(U.includes(`${Z}${Cq}`))continue;try{P(Z,{recursive:!0,force:!0}),J.push(X)}catch{}}})}catch{}return J}function oG(q,G){try{let J=jq($(G,".local","bin"));if(!J)return;let Q=["reason","ara"].flatMap((X)=>{try{return[O(J,I($(J,X)))]}catch{return[]}}),R=jq(q.current);if(!R||!Q.some((X)=>jq(X)===R))return;let U=_q(J).filter((X)=>_G.test(X)).map((X)=>$(J,X)).filter((X)=>!Q.some((Z)=>B(Z)===X)).filter((X)=>Date.now()-A(X).mtimeMs>3600000);if(U.length===0)return;let W=MG();if(W===null)return;for(let X of U){if(W.includes(`${X}${Cq}`))continue;try{P(X,{recursive:!0,force:!0})}catch{}}}catch{}}function jq(q){try{return T(q)}catch{return null}}function NG(q,G){a(q,G,()=>{if(L(q)!==G)throw new _("rollback_fence_failed","Managed runtime changed before rollback could be applied.");C(q.current)})}function xq(q){return q.activationState??$(q.root,"activation.json")}function sG(q){return Tq(q)&&Sq(q,["schema_version","from_version","to_version"])&&q.schema_version===$q&&(q.from_version===null||D(q.from_version))&&D(q.to_version)}function Mq(q){try{let G=xq(q),J=A(G);if(!J.isFile()||J.isSymbolicLink()||J.nlink!==1||(J.mode&63)!==0||J.size>4096)throw new _("invalid_activation_state","Managed runtime activation state is invalid.");let Q=JSON.parse(y(G,"utf8"));if(!sG(Q))throw new _("invalid_activation_state","Managed runtime activation state is invalid.");return Q}catch(G){if(G instanceof _)throw G;if(G.code==="ENOENT")return null;throw new _("invalid_activation_state","Managed runtime activation state is invalid.")}}function uG(q,G){UG(xq(q),JSON.stringify(G)+`
|
|
8
|
-
`)}function v(q){try{C(xq(q))}catch(G){if(G.code!=="ENOENT")throw G}}async function pG(q){let G=Mq(q.paths);if(!G)return"none";let J=L(q.paths);if(J===G.from_version)return v(q.paths),"cleared";if(J!==G.to_version)throw new _("rollback_fence_failed","Managed runtime changed before activation recovery could be applied.");let Q=q.verifyCodeSignatures??wq,R=q.healthCheck??XG,U=!1;try{let W=F(q.paths,G.to_version);Q(W,i(q.paths,G.to_version)),U=await R(W,G.to_version)}catch{U=!1}if(U)return v(q.paths),N(q.paths,{event:"update.activated",runtime_version:G.to_version,...G.from_version?{from_version:G.from_version}:{},to_version:G.to_version,reason_code:"restart_recovery"}),"committed";if(G.from_version){let W=zG(q.paths,G.to_version);return v(q.paths),N(q.paths,{event:"update.rollback",runtime_version:W.toVersion,from_version:W.fromVersion,to_version:W.toVersion,reason_code:"restart_recovery"}),"rolled_back"}return NG(q.paths,G.to_version),v(q.paths),N(q.paths,{event:"update.rollback",runtime_version:G.to_version,from_version:G.to_version,reason_code:"restart_recovery"}),"rolled_back"}function nG(q){return Tq(q)&&Sq(q,["schema_version","pid","nonce","started_at","runtime_version"])&&q.schema_version===$q&&typeof q.pid==="number"&&Number.isSafeInteger(q.pid)&&q.pid>0&&typeof q.nonce==="string"&&/^[0-9a-f-]{36}$/.test(q.nonce)&&RG(q.started_at)&&D(q.runtime_version)}function AG(q,G){try{let J=A(q);if(!J.isDirectory()||!Gq(J))return null;let Q=tq($(q,G),d.O_RDONLY|d.O_NOFOLLOW|d.O_NONBLOCK);try{let R=eq(Q);if(!R.isFile()||R.nlink!==1||!Gq(R)||R.size>4096)return null;return y(Q,"utf8")}finally{u(Q)}}catch{return null}}function Nq(q){try{let G=JSON.parse(AG(q,"owner.json")??"null");return nG(G)?G:null}catch{return null}}function BG(q){try{return process.kill(q,0),!0}catch(G){return!(G instanceof Error&&("code"in G)&&G.code==="ESRCH")}}var dq="lease",rG=2,iG=4,o;function aG(){if(o!==void 0)return o;if(o=null,process.platform!=="linux"&&process.platform!=="darwin")return null;let q;try{q=qG(import.meta.url)("bun:ffi")}catch{return null}let G=process.platform==="darwin"?"__error":"__errno_location",J=process.platform==="darwin"?["/usr/lib/libSystem.B.dylib"]:["libc.so.6",`libc.musl-${process.arch==="arm64"?"aarch64":"x86_64"}.so.1`];for(let Q of J)try{let R=q.dlopen(Q,{flock:{args:[q.FFIType.i32,q.FFIType.i32],returns:q.FFIType.i32},[G]:{args:[],returns:q.FFIType.ptr}}),U=R.symbols[G]();if(U===null)continue;return o={flock:(W,X)=>R.symbols.flock(W,X),errno:()=>q.read.i32(U),wouldBlock:process.platform==="darwin"?35:11},o}catch{}return null}var s,eG=3221225472,tG=4,qJ=128,GJ=32;function JJ(q){if(s===void 0){s=null;try{let U=qG(import.meta.url)("bun:ffi"),{FFIType:W}=U;s={kernel:U.dlopen("kernel32.dll",{CreateFileW:{args:[W.ptr,W.u32,W.u32,W.ptr,W.u32,W.u32,W.ptr],returns:W.i64_fast},CloseHandle:{args:[W.i64_fast],returns:W.i32},GetLastError:{args:[],returns:W.u32}}).symbols,ptr:(Z)=>U.ptr(Z)}}catch{return null}}if(!s)return null;let{kernel:G,ptr:J}=s,Q=Buffer.from(`${q}\x00`,"utf16le"),R=G.CreateFileW(J(Q),eG,0,null,tG,qJ,null);if(Number(R)===-1)return G.GetLastError()===GJ?"busy":null;return{release:()=>{G.CloseHandle(R)}}}function QJ(q){if(process.platform==="win32")return JJ(`${q}.lease`);let G=aG();if(!G)return null;let J=tq(`${q}.lease`,d.O_RDWR|d.O_CREAT|d.O_NOFOLLOW,384);try{let Q=eq(J);if(!Q.isFile()||Q.nlink!==1||!Gq(Q))return u(J),"busy";if(G.flock(J,rG|iG)===0)return{release:()=>u(J)};let R=G.errno();return u(J),R===G.wouldBlock?"busy":null}catch(Q){throw u(J),Q}}function Aq(q){f(B(q.path));let G=QJ(q.path);if(G==="busy")return{acquired:!1,owner:Nq(q.path),recoveredStaleOwner:!1};let J=G!==null;try{let Q=RJ(q,G);if(Q.acquired)J=!1;return Q}finally{if(J)G.release()}}function RJ(q,G){let J=q.alive??BG,Q=!1;for(let R=0;R<4;R+=1){let U={schema_version:$q,pid:q.pid??process.pid,nonce:q.nonce?.()??S(),started_at:(q.now?.()??new Date).toISOString(),runtime_version:q.runtimeVersion},W=`${q.path}.init-${process.pid}-${S()}`,X=!1;try{if(r(W,{mode:448}),h($(W,"owner.json"),`${JSON.stringify(U)}
|
|
9
|
-
`,{mode:384,flag:"wx"}),G!==null)h($(W,dq),`flock
|
|
10
|
-
`,{mode:384,flag:"wx"});q.beforePublish?.();try{throw A(q.path),Object.assign(Error("Managed runtime lock exists."),{code:"EEXIST"})}catch(K){if(K.code!=="ENOENT")throw K}k(W,q.path),X=!0;let Z=!1;return{acquired:!0,owner:U,recoveredStaleOwner:Q,release(){if(Z)return;if(Z=!0,Nq(q.path)?.nonce===U.nonce)P(q.path,{recursive:!0,force:!0});G?.release()}}}catch(Z){let K=Z.code;if(!["EEXIST","ENOTEMPTY"].includes(K??""))throw Z;let Y=Nq(q.path),H=(q.now?.()??new Date).getTime(),j=Y&&q.staleAfterMs!==void 0?H-Date.parse(Y.started_at)<q.staleAfterMs:!1,z=Y!==null&&!(G!==null&&AG(q.path,dq)!==null)&&J(Y.pid);if(!Y||z||j)return{acquired:!1,owner:Y,recoveredStaleOwner:!1};let M=`${q.path}.stale-${process.pid}-${S()}`;try{k(q.path,M),P(M,{recursive:!0,force:!0}),Q=!0}catch(w){let e=w.code;if(!["ENOENT","EEXIST"].includes(e??""))throw w}}finally{if(!X)P(W,{recursive:!0,force:!0})}}throw new _("lock_unavailable","Could not acquire the managed Reason runtime lock.")}var UJ=20000;function a(q,G,J){if(!D(G))throw new _("invalid_version","Invalid managed Reason runtime version.");let Q=Date.now()+UJ,R=Aq({path:q.transitionLock,runtimeVersion:G,staleAfterMs:60000});while(!R.acquired&&Date.now()<Q)aq(100),R=Aq({path:q.transitionLock,runtimeVersion:G,staleAfterMs:60000});if(!R.acquired)throw new _("transition_busy","Another managed Reason runtime transition is in progress.");try{return J()}finally{R.release()}}function uJ(q){if(!D(q.runtimeVersion))throw new _("invalid_version","Invalid managed Reason runtime version.");let G=q.paths??Fq();return Aq({path:G.brokerLock,runtimeVersion:q.runtimeVersion,...q.pid===void 0?{}:{pid:q.pid},...q.now===void 0?{}:{now:q.now},...q.nonce===void 0?{}:{nonce:q.nonce},...q.alive===void 0?{}:{alive:q.alive},...q.beforePublish===void 0?{}:{beforePublish:q.beforePublish}})}function DG(q){return Tq(q)&&Sq(q,["schema_version","event_id","occurred_at","event","runtime_version"],["from_version","to_version","reason_code","duration_ms","attempt_count","retry_in_ms","capabilities"])&&q.schema_version===GG&&typeof q.event_id==="string"&&/^[0-9a-f-]{36}$/.test(q.event_id)&&RG(q.occurred_at)&&typeof q.event==="string"&&VG.includes(q.event)&&D(q.runtime_version)&&(q.from_version===void 0||D(q.from_version))&&(q.to_version===void 0||D(q.to_version))&&(q.reason_code===void 0||typeof q.reason_code==="string"&&bq.test(q.reason_code))&&(q.duration_ms===void 0||typeof q.duration_ms==="number"&&Number.isSafeInteger(q.duration_ms)&&q.duration_ms>=0&&q.duration_ms<=86400000)&&(q.attempt_count===void 0||typeof q.attempt_count==="number"&&Number.isSafeInteger(q.attempt_count)&&q.attempt_count>=1&&q.attempt_count<=1e5)&&(q.retry_in_ms===void 0||typeof q.retry_in_ms==="number"&&Number.isSafeInteger(q.retry_in_ms)&&q.retry_in_ms>=0&&q.retry_in_ms<=30000)&&(q.capabilities===void 0||Array.isArray(q.capabilities)&&q.capabilities.length<=kG&&q.capabilities.every((G)=>typeof G==="string"&&bq.test(G)))}var WJ=/^(\d{22}-[0-9a-f-]{36}\.json)$/,XJ=/^(\d{22}-[0-9a-f-]{36}\.json)\.sending-(\d+)-[0-9a-f-]{36}$/,ZJ=300000,qq=0n;function _J(q){let G=BigInt(new Date(q.occurred_at).getTime())*1000000n;return qq=G>qq?G:qq+1n,`${String(qq).padStart(22,"0")}-${q.event_id}.json`}function Yq(q){try{return _q(q.lifecycleEvents).filter((G)=>WJ.test(G)).sort()}catch{return[]}}function Bq(q){try{let G=JSON.parse(y(q,"utf8"));return DG(G)?G:null}catch{return null}}function OG(q,G=BG,J=Date.now()){let Q;try{Q=_q(q.lifecycleEvents)}catch{return}for(let R of Q){let U=R.match(XJ);if(!U)continue;let W=$(q.lifecycleEvents,R),X=$(q.lifecycleEvents,U[1]),Z=!G(Number(U[2]));if(!Z)try{Z=J-x(W).mtimeMs>=ZJ}catch{continue}if(!Z)continue;try{k(W,X)}catch(K){let Y=K.code;if(Y==="EEXIST")C(W);else if(Y!=="ENOENT")throw K}}}function $J(q){let J=Yq(q).flatMap((R)=>{try{return[{name:R,size:x($(q.lifecycleEvents,R)).size}]}catch{return[]}}),Q=J.reduce((R,U)=>R+U.size,0);while(J.length>JG||Q>CG){let R=J.shift();if(!R)break;try{C($(q.lifecycleEvents,R.name)),Q-=R.size}catch(U){if(U.code!=="ENOENT")throw U}}}function pJ(q){return OG(q),Yq(q).map((G)=>Bq($(q.lifecycleEvents,G))).filter((G)=>G!==null).slice(-JG)}function N(q,G,J={}){let Q={schema_version:GG,event_id:J.eventId?.()??S(),occurred_at:(J.now?.()??new Date).toISOString(),...G};if(!DG(Q))throw new _("invalid_lifecycle_event","Managed runtime lifecycle event is invalid.");return f(q.lifecycleEvents),UG($(q.lifecycleEvents,_J(Q)),`${JSON.stringify(Q)}
|
|
11
|
-
`),$J(q),Q}function nJ(q,G){if(G.length===0)return 0;let J=new Set(G),Q=0;for(let R of Yq(q)){let U=R.slice(23,-5);if(!J.has(U))continue;try{C($(q.lifecycleEvents,R)),Q+=1}catch(W){if(W.code!=="ENOENT")throw W}}return Q}async function rJ(q,G,J){OG(q);let Q=0;for(let R of Yq(q)){let U=$(q.lifecycleEvents,R);if(J){let Z=Bq(U);if(!Z||!J(Z))continue}let W=`${U}.sending-${process.pid}-${S()}`;try{k(U,W)}catch(Z){if(Z.code==="ENOENT")continue;throw Z}let X=Bq(W);if(!X){C(W);continue}try{await G(X),C(W),Q+=1}catch{try{k(W,U)}catch(Z){if(Z.code!=="ENOENT")throw Z}break}}return Q}function iJ(q){let G=q.paths??Fq(),J=q.sourceExecutable??process.execPath,Q=q.sourceCredentialLibrary??Iq(B(T(J))),R=q.now?.()??new Date,U=E(F(G,q.version))&&kq(G,q.version,q.allowDowngrade)!==null;if(!U)N(G,{event:"service.install_started",runtime_version:q.version,to_version:q.version},{now:()=>R});try{let W=y(J),X;try{X=y(Q)}catch{throw new _("credential_boundary_unavailable","Managed runtime credential boundary is unavailable.")}let Z={url:"https://bootstrap.invalid/ara",sha256:c(W),size_bytes:W.byteLength},K={url:`https://bootstrap.invalid/${Oq}`,sha256:c(X),size_bytes:X.byteLength},Y=ZG({paths:G,version:q.version,artifact:Z,bytes:W,credentialLibraryArtifact:K,credentialLibraryBytes:X,...q.verifyCodeSignatures?{verifyCodeSignatures:q.verifyCodeSignatures}:{}}),H=oq(J);if(E(H))Dq({sourceApp:H,home:q.home??g()});let j=hG(G,q.version,{allowDowngrade:q.allowDowngrade});if(!U)zq(G,q.home);let z=q.home??g(),M=q.installLauncher===!1?"skipped":cG({paths:G,...q.launcherPath?{launcherPath:q.launcherPath}:{home:z}});if(q.installLauncher!==!1&&!q.launcherPath)YG(G,$(z,".local","bin","reason"));if(M==="conflict")N(G,{event:"service.launcher_conflict",runtime_version:q.version,to_version:q.version,reason_code:"existing_entrypoint"},{now:q.now});if(!U)N(G,{event:"service.install_completed",runtime_version:q.version,to_version:q.version,duration_ms:Math.max(0,(q.now?.()??new Date).getTime()-R.getTime())},{now:q.now});return{installed:Y.installed,activated:j.changed,activeVersion:j.toVersion,executablePath:F(G,j.toVersion),launcher:M}}catch(W){throw N(G,{event:"service.install_failed",runtime_version:q.version,to_version:q.version,reason_code:W instanceof _?W.code:"install_failed",duration_ms:Math.max(0,(q.now?.()??new Date).getTime()-R.getTime())},{now:q.now}),W}}
|
|
12
|
-
export{$q as W,GG as X,JG as Y,CG as Z,TG as _,SG as $,FG as aa,gq as ba,LG as ca,xG as da,dJ as ea,VG as fa,Fq as ga,cJ as ha,F as ia,i as ja,WG as ka,gG as la,bG as ma,wq as na,p as oa,XG as pa,hJ as qa,ZG as ra,cG as sa,Kq as ta,L as ua,lJ as va,oJ as wa,sJ as xa,hG as ya,zG as za,pG as Aa,Aq as Ba,uJ as Ca,pJ as Da,N as Ea,nJ as Fa,rJ as Ga,iJ as Ha};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{a as Aq,b as Cq,c as fq,d as Rq}from"./vm-hands-entry-lite-yqn8h1p0.js";import{$c as wq,Bc as Pq,Vc as jq,mc as Nq}from"./vm-hands-entry-lite-v0k8b768.js";import"./vm-hands-entry-lite-s8zfzv0k.js";import"./vm-hands-entry-lite-b7wy89y0.js";import"./vm-hands-entry-lite-dhqmbqsh.js";import"./vm-hands-entry-lite-tafgty5k.js";import"./vm-hands-entry-lite-p9fwt68c.js";import"./vm-hands-entry-lite-26xb026c.js";import"./vm-hands-entry-lite-td309c1y.js";import"./vm-hands-entry-lite-c8bf82tx.js";import"./vm-hands-entry-lite-1nj03gbj.js";import"./vm-hands-entry-lite-k9n1pk42.js";import"./vm-hands-entry-lite-wbfmc0xn.js";import"./vm-hands-entry-lite-3rg3znp8.js";import"./vm-hands-entry-lite-56v9haps.js";import"./vm-hands-entry-lite-jd31as70.js";import"./vm-hands-entry-lite-c5gt0086.js";import"./vm-hands-entry-lite-e1xjfj57.js";import"./vm-hands-entry-lite-8p8hz0j1.js";import"./vm-hands-entry-lite-e4hwb89r.js";import"./vm-hands-entry-lite-r665z809.js";import"./vm-hands-entry-lite-v4r1fggm.js";import"./vm-hands-entry-lite-kqbats5n.js";import"./vm-hands-entry-lite-xd2dn3n8.js";import"./vm-hands-entry-lite-ghhpgt3v.js";import"./vm-hands-entry-lite-pkk555dx.js";import{spawn as mq}from"child_process";import{chmodSync as uq,chownSync as lq,existsSync as p,lstatSync as e,mkdirSync as t,mkdtempSync as cq,readdirSync as s,readFileSync as C,realpathSync as pq,rmdirSync as Yq,rmSync as aq,writeFileSync as m}from"fs";import{basename as tq,dirname as dq,join as B}from"path";import{readFileSync as zq,readlinkSync as Wq}from"fs";import{relative as Eq}from"path";var Gq=16;function Jq(q){return q.replace(/\\([0-7]{3})/g,($,Z)=>String.fromCharCode(Number.parseInt(Z,8)))}function kq(q){let $=[];for(let Z of q.split(`
|
|
3
|
-
`)){let X=Z.split(" ");if(X.length<10||!/^\d+:\d+$/.test(X[2]))continue;$.push({device:X[2],root:Jq(X[3]),mountPoint:Jq(X[4])})}return $}function yq(q,$,Z){let X=q.replace(/\/+$/,"")||"/",J=(T)=>X==="/"||T===X||T.startsWith(`${X}/`),z=(T)=>new Map(kq(T).filter((D)=>J(D.mountPoint)).map((D)=>[`${D.mountPoint}\x00${D.device}\x00${D.root}`,D.mountPoint])),K=z($),L=z(Z),w=(T)=>Eq(X,T)||".",f=[...K].filter(([T])=>!L.has(T)).map(([,T])=>w(T)),b=[...L].filter(([T])=>!K.has(T)).map(([,T])=>w(T));return{missing:f,extra:b,referenceCount:K.size,ownCount:L.size}}function Kq(q,$,Z,X="/proc"){let J,z,K=null;try{J=zq(`${X}/1/mountinfo`,"utf8"),z=zq(`${X}/self/mountinfo`,"utf8")}catch(D){let V=D&&typeof D==="object"&&"code"in D&&typeof D.code==="string"?D.code:"unreadable";$("vm_hands.mount_check_unavailable",{code:V});return}try{K=Wq(`${X}/1/ns/mnt`)===Wq(`${X}/self/ns/mnt`)}catch{}let{missing:L,extra:w,referenceCount:f,ownCount:b}=yq(q,J,z),T={reference_count:f,own_count:b,missing_count:L.length,extra_count:w.length,same_namespace:K};if(w.length)$("vm_hands.mount_extra",{...T,extra:w.slice(0,Gq)});if(L.length)throw $("vm_hands.mount_mismatch",{...T,missing:L.slice(0,Gq)}),Z(`${L.length} mount(s) under the Session root are missing from vm-hands' namespace`)}var Oq="/sys/fs/cgroup/reason-payload",_="vm-hands",sq="/run/ara-srt/fallbacks.jsonl",$q="/reason-person",iq="/reason-workload",nq="surface",r=5000,oq=1e4,Bq="__VM_HANDS_PROOF_DIR__",eq="__VM_HANDS_PROBE_NONCE__";class P extends Error{code;constructor(q,$){super($);this.code=q}}function rq(q,$){if(!/^[0-9a-f-]{36}$/i.test($))throw new P("vm_hands_bind_invalid","bad bind id");return B(q,_,`b-${$.toLowerCase()}`)}var qX=5000,Vq=(q)=>`'${q.replaceAll("'","'\\''")}'`;function XX(q,$){if(!$||!/^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i.test($))return q;let Z=B(dq(q),$.toLowerCase());return tq(q).toLowerCase()===$.toLowerCase()?q:Z}function wX(q){let $=q.cgroup??Oq,Z=q.init.layout.payload_uid,X=q.init.workload_ended!==!0,J=(Q)=>k(Q,$q)||X&&k(Q,iq),z=q.log??(()=>{}),K=(Q)=>XX(q.init.layout.session_root,Q),L=new Map,w=new Map,f=0,b=()=>{try{let Q=C("/run/ara-srt/starts.jsonl","utf8"),W=Q.slice(f>Q.length?0:f).split(`
|
|
4
|
-
`).filter(Boolean);f=Q.length;let Y=W.map((U)=>{try{return Number(JSON.parse(U).elapsed_ms)||0}catch{return 0}});if(Y.length)z("vm_hands.srt_server_starts",{count:Y.length,elapsed_ms:Y.slice(0,8)})}catch{}},T=null,D=!1,V=q.srtCgroup??"/sys/fs/cgroup/reason-srt",x=()=>{T??=Lq()},R=0,u=()=>{try{let Q=C(sq,"utf8"),W=Q.slice(R>Q.length?0:R);R=Q.length;let Y=W.split(`
|
|
5
|
-
`).filter(Boolean).slice(0,1000);if(!Y.length)return null;let U={},F=0;for(let A of Y)try{let M=JSON.parse(A),N=typeof M.code==="string"&&/^[a-z_]{1,40}$/.test(M.code)?M.code:"other";if(U[N]=(U[N]??0)+1,typeof M.elapsed_ms==="number")F=Math.max(F,M.elapsed_ms)}catch{U.unparsed=(U.unparsed??0)+1}return z("vm_hands.srt_fallbacks",{count:Y.length,codes:U,max_elapsed_ms:F}),{count:Y.length,codes:U,max_elapsed_ms:F}}catch{return null}},y=(Q,W,Y)=>Hq(Q,W,Y),l=(Q)=>(W,Y,U)=>mq("/bin/sh",["-c",`echo $$ > ${Vq(B(Q,"cgroup.procs"))} || exit 125; exec "$@"`,"vm-hands-join",W,...Y],U),Hq=l(B($,_)),c=B($,_,"probe"),S=(Q)=>rq($,Q),_q=(Q)=>{let W=S(Q);try{t(W,{mode:493})}catch(Y){if(!(Y&&typeof Y==="object"&&("code"in Y)&&Y.code==="EEXIST"))throw new P("vm_hands_bind_failed","bind cgroup")}return W},hq=(Q)=>{try{Yq(S(Q))}catch{}},g=q.prespawn?Pq({spawnProcess:y,...q.relayDependencies?.sourceEntrypoint?{sourceEntrypoint:q.relayDependencies.sourceEntrypoint}:{},log:(Q,W)=>z(Q,W??{})}):null;g?.arm();let i=g?setInterval(()=>{g.arm()},qX):null;i?.unref?.();async function n(Q){let W=L.get(Q);if(L.delete(Q),!W)return;W.abort.abort(),await W.done}return{bindCgroup:S,async startExecutor(Q){if(x(),w.set(Q.bindId,Lq()),D=!0,!Q.claim)throw new P("vm_hands_bind_invalid","an executor needs the claim it serves");await n(Q.bindId);let{claim:W,bindId:Y}=Q,U=_q(Y),F=W.owner;if(!F||typeof F.device_id!=="string"||typeof W.root_id!=="string")throw new P("vm_hands_bind_invalid","claim without its owner Device or root");let A=new AbortController,M,N,I=new Promise((G,j)=>{M=G,N=j}),v,O=new Promise((G)=>{v=G}),E=wq({headless:!0,hostExecution:!0,runtimeDirectory:q.runtimeDirectory,managedPty:{version:1,startupVerified:!0},deviceIdentity:{deviceId:F.device_id,rootId:W.root_id,apiOrigin:q.apiOrigin},claimOwner:W.owner,root:q.root,runId:W.run_id,operationId:W.operation_id,attemptId:W.attempt_id,payload:Object.fromEntries(Object.entries(W.payload).filter(([G])=>!G.startsWith("vm_hands_"))),signal:A.signal,...Q.workspaceGrant?{workspaceGrant:Q.workspaceGrant}:{},emitEvent:async(G,j)=>{if(G==="hands.ready"){M(j);return}if(G==="hands.started"||G==="hands.stopped"||G==="hands.failed")return;await q.forward(Y,G,j)}},{...q.relayDependencies,spawnWorker:(G)=>l(U)(G.command,G.args,G.options),...g?{takePrespawnedWorker:(G)=>{let j=g.take(G);if(!j?.pid)return j;try{return m(B(U,"cgroup.procs"),String(j.pid)),j}catch{try{j.kill("SIGKILL")}catch{}return null}},adoptSpawnedWorker:g.adopt}:{}}).then(()=>{v("executor_stopped")},(G)=>{let j=G&&typeof G==="object"&&"code"in G?String(G.code):"executor_failed";N(new P(j,G instanceof Error?G.message:String(G))),v(j)}).finally(()=>N(new P("vm_hands_executor_exited","executor ended before it was ready")));L.set(Y,{abort:A,done:E,exited:O,operationId:W.operation_id,runId:W.run_id,expiresAtMs:Date.parse(String(W.payload.expires_at??""))||0});let H=await I,a=H.executor_launch_id;if(typeof a!=="string")throw new P("vm_hands_bind_failed","executor ready without a launch id");return{launchId:a,readyData:H,applied:{hands_confinement:typeof W.payload.hands_confinement==="string"?W.payload.hands_confinement:null,browser_egress:W.payload.browser_egress??null}}},takeSrtFallbacks:u,executorExited(Q){return L.get(Q)?.exited??new Promise(()=>{})},freezeBind(Q){let W=S(Q);if(p(B(W,"cgroup.freeze")))m(B(W,"cgroup.freeze"),"1")},async killAndVerifyPayload(Q){let W=new Set(Q?.keep??[]);if(await gq(Q?.bindId??null,W,Q?.own===!0),W.size)return;if((D||q.srtWarmLate?.()===!0)&&p(B(V,"cgroup.events")))b(),await Xq(V,Date.now()+r,"srt"),q.onSrtReset?.();D=!1},async killProbe(){let Q=Date.now()+r;if(p(B(c,"cgroup.events"))){await Xq(c,Q,"probe");try{Yq(c)}catch{}}let W=Qq(process.pid);if(W===null)throw new P("vm_hands_kill_unverified","agent start time unreadable");await ZX($,W,Q);let Y=(F)=>{let A=Qq(F);return A!==null&&A<=W},U=Fq(Z).filter((F)=>Y(F)&&!J(F));if(U.length)throw z("vm_hands.kill_survivors",{pids:U.slice(0,16),at:"attest",...Uq(U)}),new P("vm_hands_kill_unverified",`${U.length} payload-uid process(es) from before this agent`);if(T!==null){let F=[$,B($,_)].map((N)=>N.replace(/^\/sys\/fs\/cgroup/,"")),A=V.replace(/^\/sys\/fs\/cgroup/,""),M=Tq(T).filter((N)=>N!==process.pid&&!J(N)&&!k(N,"/reason-vm-hands")&&!k(N,A)&&!F.some((I)=>qq(N,I)));if(M.length&&D)throw z("vm_hands.kill_strays",{strays:Zq(M),at:"attest"}),new P("vm_hands_kill_unverified",`${M.length} process(es) the run started survived it`);if(M.length)z("vm_hands.attest_concurrent",{processes:Zq(M),count:M.length});T=null}},async runProbe({nonce:Q,script:W}){if(x(),!W.includes(Bq))throw new P("vm_hands_probe_failed","probe names no proof directory");let Y=q.proofParent??"/tmp/reason-vm-hands-proof";t(Y,{mode:457,recursive:!0});let U=e(Y);if(U.isSymbolicLink()||!U.isDirectory()||U.uid!==(process.getuid?.()??-1)||(U.mode&4095)!==457)throw new P("vm_hands_probe_failed","proof parent is not root's 0711 directory");let F=cq(B(Y,"p-")),A=!1;try{if(!/^[A-Za-z0-9/._-]+$/.test(F)||!/^[A-Za-z0-9_-]{1,128}$/.test(Q))throw new P("vm_hands_probe_failed","proof directory path or nonce");lq(F,Z,Z),uq(F,448);let M=e(F).ino;try{t(c,{mode:493})}catch(O){if(!(O&&typeof O==="object"&&("code"in O)&&O.code==="EEXIST"))throw new P("vm_hands_probe_failed","probe cgroup")}let N=l(c)("/bin/bash",["-c",W.replaceAll(Bq,F).replaceAll(eq,Q)],{cwd:"/",env:{PATH:"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},stdio:["ignore","pipe","ignore"]}),I="";N.stdout?.on("data",(O)=>{if(I.length<16384)I+=O.toString("utf8").slice(0,16384-I.length)});let v=await new Promise((O)=>{let E=setTimeout(()=>{A=!0,N.kill("SIGKILL"),O(124)},oq);N.once("error",()=>{clearTimeout(E),O(127)}),N.once("close",(H)=>{clearTimeout(E),O(H??1)})});return z("vm_hands.probe",{nonce_len:Q.length,exit_code:v}),{exitCode:v,markers:I,proofDirInode:M}}finally{if(!A)aq(F,{recursive:!0,force:!0})}},restatLayout(Q){let W=K(Q),Y=W===q.init.layout.session_root?q.init.layout.alias:B(W,"repo"),U="invalid";try{jq(W),U="0:0:755"}catch{}let F=!1,A=-1;try{let M=e(Y);A=M.uid,F=U==="0:0:755"&&Y===B(W,"repo")&&!M.isSymbolicLink()&&M.isDirectory()&&pq(Y)===Y&&M.uid===Z}catch{}return{root_mode:U,alias_ok:F,owner_uid:A}},verifyMounts(Q){let W=K(Q);try{Kq(W,z,(Y)=>new P("vm_hands_mount_mismatch",Y))}catch(Y){if(W!==q.init.layout.session_root&&Y instanceof P&&Y.code==="vm_hands_mount_mismatch"){z("vm_hands.member_mount_mismatch_served",{});return}throw Y}},installEnvironment(Q,W){let Y=L.get(Q);if(!Y)throw new P("environment_unavailable","no executor owns an environment");return Nq({root:q.root,operationId:Y.operationId,payload:W}).installed_revision},async stop(){if(i)clearInterval(i);g?.close(),await Promise.all([...L.keys()].map((Q)=>n(Q)))}};function Sq(){try{return s(B($,_),{withFileTypes:!0}).filter((Q)=>Q.isDirectory()&&/^b-[0-9a-f-]{36}$/.test(Q.name)).map((Q)=>Q.name)}catch{return[]}}async function gq(Q,W,Y=!1){let U=new Set([...W].map((A)=>A.toLowerCase())),F=WX();try{await JX();let A=Date.now()+r,M=new Set(Sq().filter((G)=>!U.has(G.slice(2))).map((G)=>G.slice(2)));if(Q)M.add(Q.toLowerCase());let N=null;for(let G of M){let j=n(G).catch(()=>{return}),o=w.get(G);if(o!==void 0)N=N===null?o:Math.min(N,o);if(p(B(S(G),"cgroup.events")))await Xq(S(G),A,"bind");await j}let I=[...U].map((G)=>S(G).replace(/^\/sys\/fs\/cgroup/,"")),v=["/",...[$,B($,_)].map((G)=>G.replace(/^\/sys\/fs\/cgroup/,""))],O=V.replace(/^\/sys\/fs\/cgroup/,""),E=(G)=>J(G)||I.some((j)=>k(G,j))||v.some((j)=>qq(G,j)),H=Y?[]:Fq(Z).filter((G)=>!E(G));if(H.length)throw z("vm_hands.kill_survivors",{pids:H.slice(0,16),beside:U.size,...Uq(H)}),new P("vm_hands_kill_unverified",`${H.length} payload-uid process(es) outside a live bind`);let a=(G)=>!E(G)&&!k(G,"/reason-vm-hands")&&!k(G,O)&&!v.some((j)=>qq(G,j));if(N!==null){let G=Tq(N).filter((j)=>j!==process.pid&&a(j));if(G.length)throw z("vm_hands.kill_strays",{strays:Zq(G),beside:U.size}),new P("vm_hands_kill_unverified",`${G.length} process(es) the run started survived it`)}for(let G of M)w.delete(G),hq(G)}finally{F()}}}function Qq(q,$="/proc"){try{let Z=C(B($,String(q),"stat"),"utf8"),X=Number(Z.slice(Z.lastIndexOf(")")+2).split(" ")[19]);return Number.isFinite(X)?X:null}catch{return null}}function bq(q,$="/proc"){try{let Z=C(B($,String(q),"stat"),"utf8"),X=Number(Z.slice(Z.lastIndexOf(")")+2).split(" ")[1]);return Number.isFinite(X)?X:null}catch{return null}}async function ZX(q,$,Z){try{m(B(q,"cgroup.freeze"),"1")}catch(X){throw new P("vm_hands_kill_unverified",`payload cgroup.freeze: ${X instanceof Error?X.message:String(X)}`)}try{for(;;){let X=Iq(q).filter((z)=>xq(z,q)),J=new Set(X.filter((z)=>{let K=Qq(z);return K!==null&&K<=$}));for(let z=!0;z;){z=!1;for(let K of X){if(J.has(K))continue;let L=bq(K);if(L!==null&&J.has(L))J.add(K),z=!0}}if(J.size===0)return;if(Date.now()>Z)throw new P("vm_hands_kill_unverified",`${J.size} previous-boot process(es) survived`);for(let z of J)try{process.kill(z,"SIGKILL")}catch{}await new Promise((z)=>setTimeout(z,10))}}finally{try{m(B(q,"cgroup.freeze"),"0")}catch{}}}function qq(q,$,Z="/proc"){try{return C(B(Z,String(q),"cgroup"),"utf8").split(`
|
|
6
|
-
`).find((J)=>J.startsWith("0::"))?.slice(3)===$}catch{return!1}}function k(q,$,Z="/proc"){try{let J=C(B(Z,String(q),"cgroup"),"utf8").split(`
|
|
7
|
-
`).find((z)=>z.startsWith("0::"))?.slice(3)??"";return J===$||J.startsWith(`${$}/`)}catch{return!1}}var $X=100;function Lq(){try{return Math.floor(Number(C("/proc/uptime","utf8").split(" ")[0])*$X)}catch{return 0}}async function Xq(q,$,Z){try{m(B(q,"cgroup.freeze"),"1")}catch(X){throw new P("vm_hands_kill_unverified",`${Z} cgroup.freeze: ${X instanceof Error?X.message:String(X)}`)}while(!/^populated 0$/m.test(C(B(q,"cgroup.events"),"utf8"))){if(Date.now()>$)throw new P("vm_hands_kill_unverified",`${Z} cgroup still populated (left frozen)`);for(let X of Iq(q)){if(!xq(X,q))continue;try{process.kill(X,"SIGKILL")}catch{}}await new Promise((X)=>setTimeout(X,10))}try{m(B(q,"cgroup.freeze"),"0")}catch(X){throw new P("vm_hands_kill_unverified",`${Z} cgroup thaw: ${X instanceof Error?X.message:String(X)}`)}}function xq(q,$){let Z=$.replace(/^\/sys\/fs\/cgroup/,"")||"/",X="";try{X=C(`/proc/${q}/cgroup`,"utf8").split(`
|
|
8
|
-
`).find((z)=>z.startsWith("0::"))??""}catch{return!1}let J=X.slice(3);return J===Z||J.startsWith(`${Z}/`)}function Iq(q){let $=[],Z=(X)=>{try{for(let z of C(B(X,"cgroup.procs"),"utf8").split(`
|
|
9
|
-
`))if(/^\d+$/.test(z))$.push(Number(z))}catch{}let J=[];try{J=s(X,{withFileTypes:!0}).filter((z)=>z.isDirectory()).map((z)=>z.name)}catch{}for(let z of J)Z(B(X,z))};return Z(q),$}function Uq(q,$="/proc"){let Z=new Map;for(let J of q.slice(0,64)){let z=`${QX(J,$)}:${zX(J,$)}`;Z.set(z,(Z.get(z)??0)+1)}let X=[...Z.entries()].sort((J,z)=>z[1]-J[1])[0]?.[0]??"none";return{count:q.length,cause:X}}function QX(q,$){let Z;try{Z=(C(B($,String(q),"cgroup"),"utf8").split(`
|
|
10
|
-
`).find((X)=>X.startsWith("0::"))??"").slice(3)}catch{return"gone"}if(Z==="/")return"root";if(Z==="/reason-payload")return"payload";if(Z.startsWith("/reason-payload/vm-hands/b-"))return"payload_bind";if(Z==="/reason-payload/vm-hands"||Z.startsWith("/reason-payload/vm-hands/"))return"payload_vm_hands";if(Z.startsWith("/reason-payload/"))return"payload_sub";if(Z==="/reason-person"||Z.startsWith("/reason-person/"))return"person";if(Z==="/reason-srt"||Z.startsWith("/reason-srt/"))return"srt";if(Z==="/reason-vm-hands"||Z.startsWith("/reason-vm-hands/"))return"vm_hands";if(Z==="/reason-workload"||Z.startsWith("/reason-workload/"))return"workload";return"other"}function zX(q,$){let Z;try{Z=C(B($,String(q),"stat"),"utf8")}catch{return"gone"}let X=Z.slice(Z.lastIndexOf(")")+2,Z.lastIndexOf(")")+3);return{R:"running",S:"sleeping",D:"disk",Z:"zombie",T:"stopped",t:"stopped",I:"idle"}[X]??"other"}function Zq(q,$="/proc"){return q.slice(0,16).map((Z)=>{let X="?",J="?";try{X=C(B($,String(Z),"comm"),"utf8").trim().slice(0,32)}catch{}try{J=(C(B($,String(Z),"cgroup"),"utf8").split(`
|
|
11
|
-
`).find((z)=>z.startsWith("0::"))??"").slice(3,120)}catch{}return{pid:Z,comm:X,ppid:bq(Z,$),cgroup:J}})}function Tq(q,$="/proc"){let Z=[];for(let X of s($)){if(!/^\d+$/.test(X))continue;let J;try{J=C(B($,X,"stat"),"utf8")}catch{continue}let z=J.slice(J.lastIndexOf(")")+2).split(" "),K=Number(z[1]),L=Number(z[6]),w=Number(z[19]),f=(L&2097152)!==0||K===2||X==="2",b=(z[0]==="Z"||z[0]==="X")&&z[17]==="1";if(!f&&!b&&w>=q)Z.push(Number(X))}return Z}function Fq(q,$="/proc"){let Z=[];for(let X of s($)){if(!/^\d+$/.test(X))continue;let J;try{J=C(B($,X,"status"),"utf8")}catch{continue}if(/^State:\s+[ZX]/m.test(J)&&/^Threads:\s+1$/m.test(J))continue;let z=/^Uid:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/m.exec(J);if(z&&z.slice(1).some((K)=>Number(K)===q))Z.push(Number(X))}return Z}function Mq(q="/proc/sys/kernel/yama/ptrace_scope"){try{return Number(C(q,"utf8").trim())>=1}catch{return!1}}var h=0,vq=[],d=new Set;function WX(){h++;let q=!1;return()=>{if(q)return;if(q=!0,--h===0)for(let $ of vq.splice(0))$()}}function GX(){return h===0?Promise.resolve():new Promise((q)=>{vq.push(q)})}async function Dq(){while(h>0)await GX()}async function JX(){let q=Date.now()+1000;while(d.size&&Date.now()<q)await new Promise(($)=>setTimeout($,2))}function KX(q,$){let Z=$.replace(/^\/sys\/fs\/cgroup/,"");d.add(q);let X=()=>{let J="";try{J=C(`/proc/${q}/cgroup`,"utf8").split(`
|
|
12
|
-
`).find((z)=>z.startsWith("0::"))??""}catch{d.delete(q);return}if(J.slice(3)===Z){d.delete(q);return}setTimeout(X,1)};X()}function AX(q){let $={person:q.personCgroup??B("/sys/fs/cgroup",$q,_),model:q.payloadCgroup??B(Oq,_),surface:q.surfaceCgroup??B("/sys/fs/cgroup",$q,_,nq)},Z=q.entry??process.argv[1]??"",X={},J=(K)=>K.startsWith("model:")&&q.bindCgroup?q.bindCgroup(K.slice(6)):$[K.startsWith("model")?"model":K==="surface"?"surface":"person"],z=(K)=>{let L=K.startsWith("model")?"model":K==="surface"?"surface":"person",w=new Map,f=String(q.payloadUid),b=String(q.payloadGid);if(L==="surface")try{t(J(K),{mode:493})}catch{}let T=L==="surface"?'exec "$@"':`exec /usr/bin/setpriv --no-new-privs --reuid=${f} --regid=${b} --clear-groups -- "$@"`,D=Bun.spawn(["/bin/sh","-c",`echo $$ > ${Vq(B(J(K),"cgroup.procs"))} || exit 125; ${T}`,"vm-hands-op-join",process.execPath,"--no-install",Z,"--vm-hands-op-runner",...L==="person"?[Aq]:[],...L==="surface"?[Cq,`${fq}${f}`,`${Rq}${q.surfaceDirectory??""}`]:[]],{cwd:"/",env:{PATH:process.env.PATH??"/usr/bin:/bin",BUN_BE_BUN:"1",HOME:L==="surface"?process.env.HOME||"/root":"/home/runner",...p("/bin/bash")?{SHELL:"/bin/bash"}:{}},stdio:["ignore","ignore","ignore"],ipc(x){let R=x;if(L==="surface"&&R.t==="readiness"){let y=x;q.log?.("vm_hands.surface_ready",{lanes:Object.keys(y.lanes??{}).filter((l)=>y.lanes[l]===!0),display_video:y.display_video===!0}),q.onSurfaceReadiness?.(y);return}let u=w.get(R.id);if(!u)return;if(R.t==="event"&&R.event)u.onEvent(R.event);if(R.t==="done")w.delete(R.id),u.done(R.completion??{status:"failed",error_code:"vm_hands_op_failed"})}});D.exited.then((x)=>{if(X[K]?.child===D)delete X[K];for(let[,R]of w)R.done({status:"failed",error_code:"vm_hands_op_runner_exited"});if(w.clear(),q.log?.("vm_hands.op_runner_exited",{kind:L,code:x}),L==="surface")q.onSurfaceReadiness?.(null)}),KX(D.pid,J(K));let V={child:D,pending:w};return X[K]=V,V};return{run(K,L,w,f,b){if(!Mq())return Promise.resolve({status:"failed",error_code:"vm_hands_ptrace_unprotected"});let T=K==="model"&&b&&q.bindCgroup?`model:${b.toLowerCase()}`:K,D=async()=>{while(!X[T]&&h>0)await Dq()};return D().then(async()=>{if(!X[T]&&h>0)await D()}).then(()=>new Promise((V)=>{if(!X[T]&&h>0){V({status:"failed",error_code:"vm_hands_op_runner_unavailable"});return}let x=X[T]??z(T);x.pending.set(L.id,{onEvent:w,done:V}),f.addEventListener("abort",()=>{try{x.child.send({t:"cancel",id:L.id})}catch{}},{once:!0});try{x.child.send({t:"op",...L})}catch{x.pending.delete(L.id),V({status:"failed",error_code:"vm_hands_op_runner_unavailable"})}}))},warm(K){if(!X[K]&&Mq())Dq().then(()=>{if(!X[K]&&h===0)z(K)})},notify(K,L){let w=X[K];if(!w)return!1;try{return w.child.send(L),!0}catch{return!1}},stop(){for(let K of Object.keys(X))X[K]?.child.kill()}}}export{XX as vmHandsSessionRoot,rq as vmHandsBindCgroup,Uq as survivorSummary,Iq as subtreePids,Mq as ptraceProtected,Tq as processesStartedSince,Fq as payloadUidProcesses,k as inCgroup,Zq as describeProcesses,AX as createVmHandsOpRunners,wX as createVmHandsExecutor,P as VmHandsExecutorError,iq as VM_HANDS_WORKLOAD_CGROUP,nq as VM_HANDS_SURFACE_JOIN,Bq as VM_HANDS_PROOF_DIR_TOKEN,eq as VM_HANDS_PROBE_NONCE_TOKEN,$q as VM_HANDS_PERSON_CGROUP,_ as VM_HANDS_PAYLOAD_JOIN,Oq as VM_HANDS_PAYLOAD_CGROUP};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{a,b,c,d,e,f,g}from"./vm-hands-entry-lite-yqn8h1p0.js";import"./vm-hands-entry-lite-v4r1fggm.js";import"./vm-hands-entry-lite-pkk555dx.js";export{f as spawnSessionPty,g as runVmHandsOpRunner,c as VM_HANDS_SURFACE_UID_ARG,e as VM_HANDS_SURFACE_OPS,d as VM_HANDS_SURFACE_DIRECTORY_ARG,b as VM_HANDS_OP_RUNNER_SURFACE_ARG,a as VM_HANDS_OP_RUNNER_PERSON_ARG};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{e as y}from"./vm-hands-entry-lite-yqn8h1p0.js";import{Ta as n,Ua as i,Va as t}from"./vm-hands-entry-lite-07q2xvk1.js";import{uf as o}from"./vm-hands-entry-lite-p9fwt68c.js";import"./vm-hands-entry-lite-e4hwb89r.js";import"./vm-hands-entry-lite-v4r1fggm.js";import{Gl as F}from"./vm-hands-entry-lite-pkk555dx.js";import{spawn as $j}from"child_process";import{createHash as Xj}from"crypto";import{lstatSync as x,mkdirSync as r,readFileSync as a,statSync as zj,writeFileSync as e}from"fs";var h="/run/reason-vm-hands",l="/run/reason-vm-hands/env",b="/run/reason-vm-hands/surface",p="/home/runner/.reason/workspace",Gj=/^https:\/\/[a-z0-9.-]+(?::\d{1,5})?$/,d="/sys/fs/cgroup/reason-srt",Kj=["/usr/local/bin/reason-srt-exec","/usr/local/bin/ara-srt-exec"],Bj=65536,Yj=21600000;function Fj(Q,q="/run/ara-srt"){try{if((process.getuid?.()??-1)!==0)return;r(q,{recursive:!0,mode:448});let J=x(q);if(!J.isDirectory()||J.uid!==0||(J.mode&63)!==0){Q("srt_base_keyed_skipped",{reason:"socket_dir_unsafe"});return}e(`${q}/base-keyed`,`1
|
|
3
|
-
`,{mode:420}),Q("srt_base_keyed",{})}catch{Q("srt_base_keyed_skipped",{reason:"error"})}}function s(Q,q){let J=(B)=>{return q("srt_warm_skipped",{reason:B}),Promise.resolve()};if(typeof Q.srt_base_settings!=="string")return J("no_settings");let $=Buffer.from(Q.srt_base_settings,"base64");if($.length===0||$.length>Bj||$.toString("base64")!==Q.srt_base_settings)return J("settings_invalid");let X;try{let B=x(d);if(!B.isDirectory()||B.uid!==0||(B.mode&18)!==0)return J("cgroup_unsafe");let L=Kj.find((N)=>x(N,{throwIfNoEntry:!1})!==void 0);if(!L)return J("cgroup_or_exec_missing");X=L;for(let[N,V]of[[X,!1],["/usr/local/bin",!0]]){let H=x(N);if((V?!H.isDirectory():!H.isFile())||H.uid!==0||(H.mode&18)!==0)return J("srt_exec_unsafe")}}catch{return J("cgroup_or_exec_missing")}if((process.getuid?.()??-1)!==0)return J("not_root");let Y=performance.now(),W=Xj("sha256").update($).digest("hex"),G=`${h}/srt-base-settings.json`;try{e(G,$,{mode:384,flag:"w"})}catch{return J("settings_write")}let D=$j("/bin/sh",["-c",`echo $$ > ${d}/cgroup.procs || exit 125; exec "$@"`,"vm-hands-srt",X,"--settings",G,"--idle-ms",String(Yj),"--","/bin/true"],{cwd:"/",env:{PATH:"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},stdio:"ignore"});return new Promise((B)=>{D.once("error",()=>{q("srt_warm_failed",{reason:"spawn"}),B()}),D.once("close",(L)=>{q(L===0?"srt_warm_done":"srt_warm_failed",{exit_code:L,warm_ms:Math.round(performance.now()-Y),settings_sha256:W}),B()})})}var c=3000;function hj(Q){if(!Q||typeof Q!=="object"||Array.isArray(Q))return null;let q=Q,J=q.layout,$=q.device_key,X=q.credential;return typeof q.workspace_id==="string"&&Number.isSafeInteger(q.instance_generation)&&typeof q.api_origin==="string"&&Gj.test(q.api_origin)&&typeof q.manifest_digest==="string"&&!!X&&typeof X.key_id==="string"&&Number.isSafeInteger(X.expires_at_ms)&&typeof X.signature==="string"&&!!J&&typeof J.session_root==="string"&&typeof J.alias==="string"&&Number.isSafeInteger(J.payload_uid)&&typeof J.kind==="string"&&!!$&&typeof $.pkcs8==="string"&&typeof $.spki==="string"?q:null}function v(Q){r(Q,{recursive:!0,mode:448});let q=zj(Q);if(!q.isDirectory()||(q.mode&63)!==0||q.uid!==(process.getuid?.()??-1))throw Error(`vm_hands_runtime_directory_unsafe: ${Q}`)}async function Hj(Q){let[{CLI_VERSION:q},J,$,X]=await Promise.all([import("./version-ye6800p2.js"),import("./hands-worker-source-0qa16xzj.js"),import("./network-contract-v0fkg94d.js"),import("./device-workspace-y0tk3ne8.js")]),{REASON_HANDS_PROTOCOL_VERSION:Y}=await import("./reason-hands-protocol-vzgxd159.js");return{reason_runtime_version:q,bridge_version:q,protocol_version:o,execution_eligible:!0,instance_generation:Q.instance_generation,capabilities:{supported_operations:["hands.connect"],hands_worker_artifact_sha256:J.REASON_HANDS_WORKER_ARTIFACT_SHA256,hands_worker_entrypoint:J.REASON_HANDS_WORKER_ENTRYPOINT,hands_slots:1,max_payload_bytes:$.LOCAL_OPERATION_MAX_BYTES,max_result_bytes:$.LOCAL_OPERATION_MAX_BYTES,operation_constraints:{"hands.connect":{ready:!0,execution_mode:"host",transport:"wss_relay",worker:"ara_hands",slots:1,session_group:$.HANDS_SESSION_GROUP,worker_version:J.REASON_HANDS_WORKER_VERSION,protocol_version:Y,worker_artifact_sha256:J.REASON_HANDS_WORKER_ARTIFACT_SHA256,worker_entrypoint:J.REASON_HANDS_WORKER_ENTRYPOINT,policy_mode:"full_access",policy_version:1,workspace_base:X.REASON_WORKSPACE_BASE,workspace_layout:X.SESSION_WORKSPACE_LAYOUT,browser_state:"optional_headless",desktop:!1,max_session_ms:43200000,environment_delivery:$.HANDS_ENVIRONMENT_DELIVERY,[$.HANDS_ENVIRONMENT_AT_CLAIM_KEY]:$.HANDS_ENVIRONMENT_AT_CLAIM,[$.HANDS_CLOUD_ACCESS_KEY]:$.HANDS_CLOUD_ACCESS,[$.HANDS_LARGE_ENVIRONMENT_KEY]:$.HANDS_LARGE_ENVIRONMENT,[$.HANDS_CONFINEMENT_KEY]:$.HANDS_CONFINEMENT,[$.HANDS_JOBS_USER_KEY]:$.HANDS_JOBS_USER,vm_hands:"v1"}}}}}var I=["fs.read","fs.write","fs.export","fs.import","exec.run","exec.full","process.list","ports.list","pty.start","jobs.control"],jj=["automation.call.v1","display.stream.v1","preview.serve.v1","tunnel.open","tunnel.close"],Mj=new Set(["pty.start","jobs.control","tunnel.open","tunnel.close"]),Lj=60000,Uj=30000;function qj(Q,q){return{executionMode:"unsandboxed",runtimeDirectory:q,readiness:{...Object.fromEntries(I.map((J)=>[J,!0])),...Q.lanes},...Q.probing?{probing:jj.filter((J)=>Q.lanes[J]!==!0)}:{},...Q.displayVideo?{displayVideo:!0}:{}}}function Wj(Q,q,J){let $=q([{id:"vm-hands",label:"workspace",path:p,pathFingerprint:"0".repeat(64),permissions:{read:!0,write:!0,execute:!0,discover_environment:!0,expose_mcp:!1}}],{worker:qj(J,b)}),X=Q.capabilities,Y={...X.operation_constraints};for(let G of I)Y[G]={...$.operation_constraints?.[G]??{},ready:!0,execution_mode:$.operation_constraints?.[G]?.execution_mode??"host"};let W=jj.filter((G)=>$.operation_constraints?.[G]!==void 0);for(let G of W)Y[G]=$.operation_constraints[G];return{...Q,capabilities:{...X,supported_operations:["hands.connect",...I,...W],operation_constraints:Y}}}function Nj(Q){for(let q of a("/etc/passwd","utf8").split(`
|
|
4
|
-
`)){let J=q.split(":");if(J.length>=4&&Number(J[2])===Q&&/^\d+$/.test(J[3]??"")&&Number(J[3])>0)return Number(J[3])}throw Error("vm_hands_payload_account_unavailable")}function Vj(Q,q){let J=q.owner;if(!J||typeof J.organization_id!=="string"||typeof J.device_id!=="string"||typeof q.root_id!=="string")return null;return{version:4,apiOrigin:Q.api_origin,orgId:J.organization_id,deviceId:J.device_id,devicePublicKey:"",displayName:"vm-hands",registeredAt:new Date(0).toISOString(),handsSlots:1,roots:[{id:q.root_id,label:"workspace",path:p,pathFingerprint:"0".repeat(64),permissions:{read:!0,write:!0,execute:!0,discover_environment:!0,expose_mcp:!1}}]}}function gj(Q=process.platform,q="/proc/self/oom_score_adj"){if(Q!=="linux")return null;let J;try{J=a(q,"utf8").trim()}catch{return{value:"unreadable"}}if(!/^-?\d+$/.test(J))return{value:"unreadable"};let $=Number(J);return $<0?{value:$}:null}async function bj(Q,q){let J=gj();if(J)q("vm_hands.oom_protected",{code:"vm_hands_oom_protected",value:J.value}),await new Promise(()=>{setInterval(()=>{return},1073741824)});v(h),v(l),v(b),Fj(q);let $=s(Q,q),X=!1,Y=async()=>{if(!await Promise.race([$.then(()=>!0),new Promise((Z)=>setTimeout(()=>Z(!1),c).unref?.())]))X=!0,q("srt_warm_late",{wait_ms:c})},[{configureDesktopAccount:W},{configureWorkerSandbox:G}]=await Promise.all([import("./desktop-account-z16mmkxg.js"),import("./worker-sandbox-s054x4zw.js")]);G();try{W({value:String(Q.layout.payload_uid)})}catch{q("payload_account_unavailable"),await new Promise(()=>{setInterval(()=>{return},1073741824)})}let D=new AbortController;for(let j of["SIGTERM","SIGINT"])process.on(j,()=>D.abort());let B=new Map,L,N=new Promise((j)=>{L=j}),V=N.then(()=>import("./vm-hands-executor-6tncheya.js")).then(({createVmHandsExecutor:j})=>{let Z=j({init:Q,root:p,runtimeDirectory:h,apiOrigin:Q.api_origin,prespawn:!0,onSrtReset:()=>{X=!1,$=s(Q,q)},srtWarmLate:()=>X,forward:(K,z,w)=>B.get(K)?.(z,w)??Promise.reject(Error("vm_hands_not_bound")),log:(K,z)=>q(K,z)});return q("executor_loaded"),Z}),H=(j)=>async(...Z)=>(await V)[j](...Z),O=null;V.then((j)=>{O=(Z)=>j.executorExited(Z)});let g={startExecutor:async(...j)=>{return await Y(),H("startExecutor")(...j)},killAndVerifyPayload:H("killAndVerifyPayload"),killProbe:H("killProbe"),runProbe:async(...j)=>{return await Y(),H("runProbe")(...j)},restatLayout:(j)=>{throw Error("replaced below")},verifyMounts:(j)=>{throw Error("replaced below")},installEnvironment:()=>{throw Error("replaced below")},executorExited:(j)=>O?O(j):new Promise(()=>{}),takeSrtFallbacks:()=>null};V.then((j)=>{g.restatLayout=(Z)=>j.restatLayout(Z),g.verifyMounts=(Z)=>j.verifyMounts(Z),g.installEnvironment=(Z,K)=>j.installEnvironment(Z,K),g.freezeBind=(Z)=>j.freezeBind(Z),g.takeSrtFallbacks=()=>j.takeSrtFallbacks?.()??null});let Jj=await n(Q),R=new i(Q,Jj,g,{envRoot:l}),S=Hj(Q),U={probing:!0,lanes:{},displayVideo:!1},k=null,u=null,Qj=Promise.all([S,import("./local-capabilities-30m8pzpv.js")]).then(([j,Z])=>{u=()=>Wj(j,Z.capabilityInventoryForRoots,U),q("device_ops_loaded")}).catch((j)=>q("device_ops_unavailable",{error:j instanceof Error?j.name:"error"})),f,T=(j)=>{clearTimeout(f),U=j,k?.()},P=N.then(()=>import("./vm-hands-executor-6tncheya.js")).then(({createVmHandsOpRunners:j,vmHandsBindCgroup:Z,VM_HANDS_PAYLOAD_CGROUP:K})=>j({payloadUid:Q.layout.payload_uid,payloadGid:Nj(Q.layout.payload_uid),bindCgroup:(z)=>Z(K,z),surfaceDirectory:b,onSurfaceReadiness:(z)=>{if(z)T({probing:!1,lanes:z.lanes??{},displayVideo:z.display_video===!0});else if(U.probing)T({probing:!1,lanes:{},displayVideo:!1})},log:(z,w)=>q(z,w)})).catch(()=>null);P.then((j)=>j?.warm("person")),P.then(async(j)=>{if(!j){T({probing:!1,lanes:{},displayVideo:!1});return}let Z=Date.now()+Uj;while(R.settingUp&&Date.now()<Z)await new Promise((K)=>setTimeout(K,250));f=setTimeout(()=>{if(U.probing)T({probing:!1,lanes:{},displayVideo:!1})},Lj),f.unref?.(),j.warm("surface")}),q("agent_ready"),await t({apiOrigin:Q.api_origin,agent:R,signal:D.signal,heartbeat:async()=>u?.()??await S,onHeartbeatNow:(j)=>{k=j},executeOp:async({kind:j,claim:Z,bindId:K,signal:z,emit:w})=>{let A=Vj(Q,Z);if(!A)return{status:"failed",error_code:"vm_hands_bind_invalid"};let m={executionMode:"unsandboxed",runtimeDirectory:h,readiness:{...Object.fromEntries(I.map((M)=>[M,!0])),"tunnel.open":U.lanes["tunnel.open"]===!0,"tunnel.close":U.lanes["tunnel.close"]===!0}},E=(M)=>{let C=typeof M.kind==="string"?M.kind:"";if(C)w({kind:C,...M.data&&typeof M.data==="object"?{data:M.data}:{}})};if(Z.capability==="exec.full"&&j!=="person")return{status:"failed",error_code:"capability_not_granted"};if(Z.capability==="automation.call.v1"&&j!=="model")return{status:"failed",error_code:"capability_not_granted"};let Zj=Z.capability==="pty.start"&&j==="person"&&!Z.authority;if(Mj.has(String(Z.capability))&&!Zj){let{executeLocalOperation:M}=await import("./local-capabilities-30m8pzpv.js");return M(A,Z,{worker:m,signal:z,emit:(C)=>E(C)})}let _=await P;if(!_)return{status:"failed",error_code:"vm_hands_payload_account_unavailable"};if(y.has(String(Z.capability))){if(U.lanes[String(Z.capability)]!==!0)return{status:"failed",error_code:"capability_unavailable"};return _.run("surface",{id:String(Z.attempt_id),claim:Z,state:A,worker:qj(U,b)},E,z)}return _.run(j,{id:String(Z.attempt_id),claim:Z,state:A,worker:m},E,z,K)},controlOp:async({claim:j,control:Z})=>y.has(String(j.capability))&&((await P)?.notify("surface",{t:"control",id:String(j.attempt_id),control:{kind:Z.kind,payload:Z.payload??{}}})??!1),opCompleted:({claim:j,status:Z,acknowledged:K})=>{if(K&&j.capability==="preview.serve.v1")P.then((z)=>z?.notify("surface",{t:"retire",operation_id:String(j.operation_id),status:Z}))},readyData:({launchId:j})=>({executor_launch_id:j}),log:(j,Z)=>{if(j==="vm_hands.registered"||j==="vm_hands.reconnected")L();q(j,Z)},onTurn:(j,Z)=>{if(Z)B.set(j,Z);else B.delete(j)}}),await(await V).stop(),(await P)?.stop()}export{gj as vmHandsOomProtection,s as startBaseSrtServer,bj as runVmHands,hj as parseVmHandsInit,Hj as heartbeatBody,Fj as enableBaseKeyedSrt};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{z as a}from"./vm-hands-entry-lite-pmw3ycgc.js";import"./vm-hands-entry-lite-dhqmbqsh.js";import"./vm-hands-entry-lite-v4r1fggm.js";import"./vm-hands-entry-lite-kqbats5n.js";import"./vm-hands-entry-lite-xd2dn3n8.js";import"./vm-hands-entry-lite-ghhpgt3v.js";import"./vm-hands-entry-lite-pkk555dx.js";export{a as probeWorkerPreview};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{y as a}from"./vm-hands-entry-lite-x3pbyg92.js";import"./vm-hands-entry-lite-00y3kn86.js";import"./vm-hands-entry-lite-s8zfzv0k.js";import"./vm-hands-entry-lite-tbdcmq09.js";import"./vm-hands-entry-lite-26xb026c.js";import"./vm-hands-entry-lite-v4r1fggm.js";import"./vm-hands-entry-lite-kqbats5n.js";import"./vm-hands-entry-lite-xd2dn3n8.js";import"./vm-hands-entry-lite-ghhpgt3v.js";import"./vm-hands-entry-lite-pkk555dx.js";export{a as configureWorkerSandbox};
|