@reason-machines/cli-linux-x64 0.2.415 → 0.2.419
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 +7 -8
- package/bin/reason +2 -2
- package/bin/runtime/srt/sandbox-runtime.mjs +52 -52
- package/bin/vm-hands/api-credentials-s4897qxy.js +2 -0
- package/bin/vm-hands/api-m73x3da5.js +2 -0
- package/bin/vm-hands/ask-relay-4kwcx2b7.js +8 -0
- package/bin/vm-hands/connect-cli-34b18gjs.js +2 -0
- package/bin/vm-hands/custom-endpoint-device-j012b4bd.js +2 -0
- package/bin/vm-hands/desktop-account-0q0arpzk.js +2 -0
- package/bin/vm-hands/device-workspace-3jxhs54b.js +2 -0
- package/bin/vm-hands/hands-worker-source-y64axsw3.js +2 -0
- package/bin/vm-hands/index-194s4vz0.js +12818 -0
- package/bin/vm-hands/install-receipt-1g68b446.js +2 -0
- package/bin/vm-hands/local-automation-k2w46hn2.js +2 -0
- package/bin/vm-hands/local-capabilities-tdzbqmrb.js +2 -0
- package/bin/vm-hands/local-desktop-users-6thzvydd.js +2 -0
- package/bin/vm-hands/local-display-mac-59ma7sxa.js +2 -0
- package/bin/vm-hands/local-display-session-4833qq7h.js +2 -0
- package/bin/vm-hands/local-display-video-c1143mz6.js +2 -0
- package/bin/vm-hands/local-managed-process-mr0zpk7c.js +2 -0
- package/bin/vm-hands/local-pty-session-bwarwpsd.js +2 -0
- package/bin/vm-hands/managed-runtime-vz1wqwwg.js +2 -0
- package/bin/vm-hands/network-contract-gprc37sw.js +2 -0
- package/bin/vm-hands/package-ej9snd47.js +2 -0
- package/bin/vm-hands/permissions-7sfghef4.js +2 -0
- package/bin/vm-hands/reason-hands-protocol-jsrkawe2.js +2 -0
- package/bin/vm-hands/serve-service-kngyzh74.js +2 -0
- package/bin/vm-hands/status-jz29fb95.js +96 -0
- package/bin/vm-hands/version-g29vt13t.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-0h4qmgm2.js +9 -0
- package/bin/vm-hands/vm-hands-entry-lite-0k13wmzm.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-1exfjv79.js +52 -0
- package/bin/vm-hands/vm-hands-entry-lite-26q3hbdc.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-28s7v15d.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-2m5dwrdf.js +6 -0
- package/bin/vm-hands/vm-hands-entry-lite-37hvds7z.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-3rqdzqhk.js +112 -0
- package/bin/vm-hands/vm-hands-entry-lite-4gh5kfr4.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-t7an5zg2.js → vm-hands-entry-lite-4k4h9rcq.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-6nwbqg37.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-m11j0f9q.js → vm-hands-entry-lite-6y6pz2yw.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-714wspqb.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-7zk0r3p9.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-9qep7pka.js +4 -0
- package/bin/vm-hands/{vm-hands-entry-lite-bdhjpv7g.js → vm-hands-entry-lite-agsp101y.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-am6kj1n1.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-as1tkffn.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-bxt4n1nj.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-c2g3wmkp.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-d2w8tghq.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-d98m00b8.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-daxcxjze.js +344 -0
- package/bin/vm-hands/vm-hands-entry-lite-dcnyve97.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-e1b89x66.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-ej5ffjck.js +105 -0
- package/bin/vm-hands/vm-hands-entry-lite-ejkba2nk.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-f3wh0dza.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-f5xb489y.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-feybcq63.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-fpp2bs9y.js +452 -0
- package/bin/vm-hands/{vm-hands-entry-lite-qxchbbew.js → vm-hands-entry-lite-fzkfajew.js} +9 -5
- package/bin/vm-hands/vm-hands-entry-lite-gt497d5x.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-gxper06w.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-j2ng164q.js +9 -0
- package/bin/vm-hands/vm-hands-entry-lite-jp9q2vsx.js +127 -0
- package/bin/vm-hands/vm-hands-entry-lite-magmzx9c.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-ntx8fdyq.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-pfzczmaa.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-pkc4ry5x.js +539 -0
- package/bin/vm-hands/vm-hands-entry-lite-pp7jfqzr.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-q8wkrzer.js +66 -0
- package/bin/vm-hands/vm-hands-entry-lite-s823n1q9.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-s9xf5z69.js +7 -0
- package/bin/vm-hands/vm-hands-entry-lite-tchc7z17.js +128 -0
- package/bin/vm-hands/vm-hands-entry-lite-tytfs183.js +42 -0
- package/bin/vm-hands/vm-hands-entry-lite-v4jtxgaj.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-vgpt2n1v.js +11 -0
- package/bin/vm-hands/{vm-hands-entry-lite-9c95p6n9.js → vm-hands-entry-lite-vsa7t6m9.js} +54 -54
- package/bin/vm-hands/vm-hands-entry-lite-xp3qzxk5.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite.js +1 -3
- package/bin/vm-hands/vm-hands-executor-epyhpjv3.js +11 -0
- package/bin/vm-hands/vm-hands-op-runner-fn1qph82.js +2 -0
- package/bin/vm-hands/vm-hands-runtime-8vt9etvv.js +4 -0
- package/bin/vm-hands/worker-preview-readiness-yfjgban2.js +2 -0
- package/bin/vm-hands/worker-sandbox-z0t69av8.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-cjv8m2zy.js +0 -2
- package/bin/vm-hands/api-credentials-m5akr9fv.js +0 -2
- package/bin/vm-hands/connect-cli-d60gmgnx.js +0 -2
- package/bin/vm-hands/custom-endpoint-device-dkqb4rqy.js +0 -2
- package/bin/vm-hands/desktop-account-5v7x0ajx.js +0 -2
- package/bin/vm-hands/device-workspace-p9q9dckg.js +0 -2
- package/bin/vm-hands/fsevents-ekt70rcc.js +0 -2
- package/bin/vm-hands/hands-worker-source-cgrpm21b.js +0 -2
- package/bin/vm-hands/index-k8kcz8a3.js +0 -12818
- package/bin/vm-hands/install-receipt-7vt2y2vh.js +0 -2
- package/bin/vm-hands/local-automation-4htjhv65.js +0 -2
- package/bin/vm-hands/local-capabilities-c04tbapa.js +0 -2
- package/bin/vm-hands/local-desktop-users-q886k0mm.js +0 -2
- package/bin/vm-hands/local-display-mac-w85956f1.js +0 -2
- package/bin/vm-hands/local-display-session-pkz7a5q9.js +0 -2
- package/bin/vm-hands/local-pty-session-5f50sqq0.js +0 -2
- package/bin/vm-hands/managed-runtime-ppypxbh9.js +0 -2
- package/bin/vm-hands/network-contract-9x9kc5vv.js +0 -2
- package/bin/vm-hands/package-78fkast4.js +0 -2
- package/bin/vm-hands/permissions-xt02c6dh.js +0 -2
- package/bin/vm-hands/reason-hands-protocol-2tnghj3b.js +0 -2
- package/bin/vm-hands/serve-service-wanptaqv.js +0 -2
- package/bin/vm-hands/status-gt7c4ke0.js +0 -10
- package/bin/vm-hands/version-bq5j7cqg.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-09m2cdkw.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-0xrsph3r.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-1cwqa4jr.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-1rrb66r9.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-1rtkf2xm.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-22kfyvnk.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-2hvbgp1n.js +0 -9
- package/bin/vm-hands/vm-hands-entry-lite-2wgdvb15.js +0 -14
- package/bin/vm-hands/vm-hands-entry-lite-2wvsyggd.js +0 -540
- package/bin/vm-hands/vm-hands-entry-lite-463m6ejk.js +0 -458
- package/bin/vm-hands/vm-hands-entry-lite-6aeea05q.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-88swf2qr.js +0 -6
- package/bin/vm-hands/vm-hands-entry-lite-89z488gz.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-8ns59paz.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-8t9xssf9.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-907pa7f9.js +0 -65
- package/bin/vm-hands/vm-hands-entry-lite-9ay6f56v.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-ab2m9erf.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-b885gwfh.js +0 -7
- package/bin/vm-hands/vm-hands-entry-lite-cc2tgsqp.js +0 -105
- package/bin/vm-hands/vm-hands-entry-lite-ckv17tn8.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-eqgj4acy.js +0 -112
- package/bin/vm-hands/vm-hands-entry-lite-ewwx4fr3.js +0 -250
- package/bin/vm-hands/vm-hands-entry-lite-f5e3dbgk.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-grtycq6y.js +0 -52
- package/bin/vm-hands/vm-hands-entry-lite-gvwdy3rf.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-hj8n59y9.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-k278g9kj.js +0 -42
- package/bin/vm-hands/vm-hands-entry-lite-kq0qmsw8.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-pgb514h0.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-pmcz7j7t.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-q0k6kx6d.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-qq9w7wq6.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-qy9xg6em.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-qysyf65v.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-rwxbhwky.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-txn44020.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-vrqzr15t.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-zg36myyf.js +0 -5
- package/bin/vm-hands/vm-hands-executor-7k9z9988.js +0 -11
- package/bin/vm-hands/vm-hands-op-runner-n8p81rwm.js +0 -2
- package/bin/vm-hands/vm-hands-runtime-bqsz7h0h.js +0 -4
- package/bin/vm-hands/worker-sandbox-smqj3mbe.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{yh as H}from"./vm-hands-entry-lite-agsp101y.js";import{Ah as m,Bh as L,Ch as B,Dh as W,Eh as F,Fh as Q,Gh as j,Ih as k,Kh as z,Lh as Z,Mh as J,Nh as K,Oh as $,Qh as G,Rh as M,Th as X,Uh as s,Vh as _,Xh as S,_h as Y}from"./vm-hands-entry-lite-9qep7pka.js";import{Bj as w}from"./vm-hands-entry-lite-714wspqb.js";import{nk as y,ok as p,pk as x,qk as b}from"./vm-hands-entry-lite-feybcq63.js";import{ol as q}from"./vm-hands-entry-lite-6y6pz2yw.js";var o=["cgroup_membership_read_failed","cgroup_v2_membership_absent","cgroup_scope_invalid","cgroup_root_unavailable","cgroup_directory_unavailable","cgroup_limit_read_failed","cgroup_events_read_failed","cgroup_current_read_failed","cgroup_stat_read_failed","boot_id_read_failed","boot_id_invalid","guest_meminfo_read_failed","guest_vmstat_read_failed","memory_counter_invalid","memory_field_missing","memory_capacity_invalid"];var c=String.raw`(function(fs, path) {
|
|
3
3
|
const fail = (message, reasonCode) => { throw Object.assign(Error(message), {reasonCode}); };
|
|
4
4
|
const read = (p, reasonCode, trim=true) => { try { const text=fs.readFileSync(p, "utf8"); return trim?text.trim():text; }
|
|
5
5
|
catch { fail("memory_read", reasonCode); } };
|
|
@@ -64,7 +64,7 @@ import{Hr,qr,zr,Wt}from"./vm-hands-entry-lite-8t9xssf9.js";import{qi,zi,k,kr,Cr,
|
|
|
64
64
|
if(!Number.isSafeInteger(limitBytes)||limitBytes<=0||!Number.isSafeInteger(available)||available>limitBytes) fail("memory_capacity", "memory_capacity_invalid");
|
|
65
65
|
return {bootId,oomKills:field(read("/proc/vmstat", "guest_vmstat_read_failed"),"oom_kill"),currentBytes:limitBytes-available,
|
|
66
66
|
limitBytes,inactiveFileBytes:0,capacitySource:"guest",memoryScope:"/proc"};
|
|
67
|
-
})`;var
|
|
67
|
+
})`;var u=String.raw`import os,sys,json,stat,fcntl,time,ctypes
|
|
68
68
|
v=json.load(sys.stdin)
|
|
69
69
|
root=v['root']; paths=list(dict.fromkeys([v['source'],v['snapshot']]))
|
|
70
70
|
marker=('# reason-job-env-owner:'+v['runId']+'\n').encode()
|
|
@@ -309,7 +309,7 @@ function fileOperation(request) {
|
|
|
309
309
|
});
|
|
310
310
|
return { promise, cancel() {} };
|
|
311
311
|
}
|
|
312
|
-
`;var
|
|
312
|
+
`;var a="a3e39eb55160acfc116fa9871ccc594c68be7a642d2331b24baa707c8f601ec0";import{createHash as rt}from"crypto";var bt=Object.freeze({"api.ara.so":"api.reasonmachines.com","api.reasonmachines.ai":"api.reasonmachines.com","api-staging.ara.so":"staging-api.reasonmachines.com","staging-api.reasonmachines.ai":"staging-api.reasonmachines.com"});var d=Object.freeze({trailingSlashPattern:/\/+$/.source,keyPrefix:"http.",keySuffix:"/.extraheader",valuePrefix:"Authorization: Bearer "});var f=Object.freeze({tokenEnv:"ARA_GIT_BROKER_TOKEN",reasonTokenEnv:"REASON_GIT_BROKER_TOKEN",urlEnv:"ARA_GIT_BROKER_URL",keyPrefix:"credential.",keySuffix:"/.helper",value:'!f(){ printf "username=%s\\npassword=%s\\n" "ara-run" "${REASON_GIT_BROKER_TOKEN:-$ARA_GIT_BROKER_TOKEN}"; };f'});var r=/^[A-Za-z_][A-Za-z0-9_]*$/;var T=new Set(["ARA_INFERENCE_TOKEN","AI_GATEWAY_API_KEY","CLOUD_AGENT_AI_GATEWAY_API_KEY","INFERENCE_V2_GATEWAY_API_KEY","VERCEL_AI_GATEWAY_API_KEY","INFERENCE_V2_CONCENTRATE_API_KEY","INFERENCE_V2_OPENAI_API_KEY","INFERENCE_V2_ANTHROPIC_API_KEY","INFERENCE_V2_FINGERPRINT_SECRET","OPENAI_API_KEY","OPENROUTER_API_KEY","ANTHROPIC_API_KEY","CODEX_ACCESS_TOKEN","GITHUB_COPILOT_API_KEY","AZURE_OPENAI_API_KEY","AZURE_OPENAI_CLIENT_SECRET"]),A=new Set(["ARA_OPERATOR_KEY","BL_API_KEY","BLAXEL_API_KEY","NSC_TOKEN","NSC_TOKEN_FILE","NAMESPACE_API_KEY","NAMESPACE_ACCESS_TOKEN","NAMESPACE_TOKEN","NAMESPACE_TOKEN_JSON","NAMESPACE_SANDBOX_TOKEN_JSON","ARA_LOCAL_QA_NAMESPACE_WORKLOAD_TOKEN_FILE","NAMESPACE_SANDBOX_USE_LOCAL_USER_TOKEN","COMPUTE_SERVICE_TOKEN"]),D=["INFISICAL_","NSC_"],v=new Set(["ARA_JOB_ENV","ARA_DELIVERY_BASE_SHA","WORK_ROOT","REPO_DIR","ARA_CONTROL_DIR","ARA_PRESERVE_WORKSPACE","ARA_PINNED_CHECKOUT_REUSE","FOLLOWUP_BRANCH","REPO_URL","TOKENLESS_URL","REPOSITORY_IDENTITY_URL","DEFAULT_BRANCH","BRANCH","BRANCH_GENERATED","BASE_REF","REPO_EMPTY","REPO_WRITABLE","ARA_DELIVERY_BASE_BRANCH","ARA_SERVER_GIT_PUBLICATION","ARA_EMPTY_REPOSITORY_COMMIT","REASON_MODEL","REASON_DELIVERY_BASE_BRANCH","REASON_DELIVERY_BASE_SHA","REASON_EMPTY_REPOSITORY_COMMIT","REASON_SCRATCH_SESSION_ID","REASON_SERVER_GIT_PUBLICATION","REASON_ALLOW_INSTALL_SCRIPTS","SCM_TOKEN","SCM_TOKEN_USER","REASON_OIDC_TOKEN_URL","REASON_OIDC_REQUEST_TOKEN","AWS_CONTAINER_CREDENTIALS_FULL_URI","AWS_CONTAINER_AUTHORIZATION_TOKEN","AWS_CONTAINER_CREDENTIALS_RELATIVE_URI","AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE","BASH_ENV","ENV","BASHOPTS","SHELLOPTS","PS4","IFS","CDPATH","GLOBIGNORE","PROMPT_COMMAND","PATH","HOME","TMPDIR","TMP","TEMP","XDG_CONFIG_HOME","GIT_DIR","GIT_WORK_TREE","GIT_INDEX_FILE","GIT_OBJECT_DIRECTORY","GIT_COMMON_DIR","GIT_NAMESPACE","GIT_CEILING_DIRECTORIES","GIT_DISCOVERY_ACROSS_FILESYSTEM","GIT_SHALLOW_FILE","GIT_ALLOW_PROTOCOL","GIT_PROTOCOL_FROM_USER","GIT_REPLACE_REF_BASE","NODE_OPTIONS","NODE_PATH","NODE_REPL_EXTERNAL_MODULES","CLASSPATH","PYTHONPATH","PYTHONSTARTUP","PYTHONHOME","RUBYOPT","RUBYLIB","PERL5LIB","PERL5OPT","JAVA_TOOL_OPTIONS","_JAVA_OPTIONS","JDK_JAVA_OPTIONS","GEM_PATH","GEM_HOME","GIT_SSH","GIT_SSH_COMMAND","GIT_EXEC_PATH","GIT_TEMPLATE_DIR","GIT_ALTERNATE_OBJECT_DIRECTORIES","GIT_PROXY_COMMAND","GIT_EXTERNAL_DIFF","GIT_PAGER","GIT_EDITOR","GIT_ASKPASS","SSH_ASKPASS","PAGER","EDITOR","TAR_OPTIONS","CURL_HOME","WGETRC","APT_CONFIG","PERLLIB","GIT_GRAFT_FILE","POSIXLY_CORRECT"]),N=["GIT_TRACE","CONTEXT_REPO_","ARA_CHECKPOINT_BOOTSTRAP_","_","ARA_HANDS_","ARA_DEVICE_","ARA_GIT_BROKER_","REASON_HANDS_","REASON_DEVICE_","REASON_GIT_BROKER_","LD_","DYLD_","GIT_CONFIG","BASH_FUNC_"];var n="^(?!(?:"+[...T,...A,...v].join("|")+")$)(?!(?:"+[...D,...N].join("|")+"))"+r.source.slice(1),Lt=new RegExp(n);var U=["HOME","PWD","OLDPWD","TMPDIR","TMP","TEMP","SHELL","USER","LOGNAME","SCM_TOKEN","SCM_TOKEN_USER","GH_TOKEN","GITHUB_TOKEN","GH_ENTERPRISE_TOKEN","GITHUB_ENTERPRISE_TOKEN","GITLAB_TOKEN"],R=["ARA_HANDS_","ARA_DEVICE_","ARA_GIT_BROKER_","REASON_HANDS_","REASON_DEVICE_","REASON_GIT_BROKER_","BUN_"],E="^(?!(?:"+U.join("|")+")$)(?!(?:"+R.join("|")+"))"+n.slice(1),tt="ARA_DELIVERY_BASE_SHA|WORK_ROOT|FOLLOWUP_BRANCH|ARA_PRESERVE_WORKSPACE|ARA_PINNED_CHECKOUT_REUSE|CONTEXT_REPO_[A-Z0-9_]+|REPO_URL|TOKENLESS_URL|REPOSITORY_IDENTITY_URL|DEFAULT_BRANCH|BRANCH|BRANCH_GENERATED|BASE_REF|REPO_EMPTY|REPO_WRITABLE|ARA_DELIVERY_BASE_BRANCH|ARA_SERVER_GIT_PUBLICATION|ARA_EMPTY_REPOSITORY_COMMIT|REASON_MODEL|REASON_DELIVERY_BASE_BRANCH|REASON_DELIVERY_BASE_SHA|REASON_EMPTY_REPOSITORY_COMMIT|REASON_SCRATCH_SESSION_ID|REASON_SERVER_GIT_PUBLICATION|REASON_ALLOW_INSTALL_SCRIPTS",i="^(?:"+tt+"|"+E.slice(1,-1)+")$",et=new RegExp(i);function jt(t){return et.test(t)}var l=Object.freeze({tokenPath:"/identity/token",awsPath:"/identity/aws",tokenPattern:/^[A-Za-z0-9_.~-]+$/.source}),g=Object.freeze({variables:256,valueBytes:130816,snapshotBytes:1048576}),kt=Object.freeze({valueChars:16384,snapshotBytes:65536});var h=["set -g history-limit 50000","set -g status off","set -g window-size smallest","set -gq fill-character ' '","set -g escape-time 10","set -g prefix None","set -g prefix2 None","set -g terminal-overrides ',*:smcup@:rmcup@'"];var nt=2,it="ara-hands-worker.cjs",P=["/usr/local/go/bin","/opt/node/bin","/usr/local/bin","/usr/sbin","/usr/bin","/sbin","/bin","/usr/local/cargo/bin"],st=P.join(":"),ot=["/opt/homebrew/bin",...P].join(":"),ct='(platform, linuxPath, macosPath) => platform === "darwin" ? macosPath : linuxPath';function Ot(t,V,C){return t==="darwin"?C:V}var ut=String.raw`(function(anchor, pid, native) {
|
|
313
313
|
const token = native.identity(pid);
|
|
314
314
|
const session = native.session(pid);
|
|
315
315
|
if (!native.same(anchor)) throw new Error("pty_session_identity_lost");
|
|
@@ -317,7 +317,7 @@ function fileOperation(request) {
|
|
|
317
317
|
if (session.id !== anchor[5]) throw new Error("pty_member_session_changed");
|
|
318
318
|
if (!token) return { retry: true, token: null };
|
|
319
319
|
return { retry: false, token };
|
|
320
|
-
})`,
|
|
320
|
+
})`,at=String.raw`(function(native) {
|
|
321
321
|
let probe;
|
|
322
322
|
try {
|
|
323
323
|
try {
|
|
@@ -327,7 +327,7 @@ function fileOperation(request) {
|
|
|
327
327
|
native.signal(probe);
|
|
328
328
|
} finally { if (probe) native.release(probe); }
|
|
329
329
|
} catch (error) { native.close(); throw error; }
|
|
330
|
-
})`,
|
|
330
|
+
})`,dt=String.raw`(function(bootstrap) {
|
|
331
331
|
const { dlopen, ptr } = require("bun:ffi");
|
|
332
332
|
const api = dlopen("libc.so.6", {
|
|
333
333
|
prctl: { args: ["i32", "u64", "u64", "u64", "u64"], returns: "i32" },
|
|
@@ -348,7 +348,7 @@ function fileOperation(request) {
|
|
|
348
348
|
require("node:fs").writeSync(3, "subreaper\n");
|
|
349
349
|
api.execve(ptr(args[0]), ptr(argv), ptr(envp));
|
|
350
350
|
throw new Error("pty_exec_failed");
|
|
351
|
-
})`,
|
|
351
|
+
})`,ft=String.raw`
|
|
352
352
|
"use strict";
|
|
353
353
|
const crypto = require("node:crypto");
|
|
354
354
|
const fs = require("node:fs");
|
|
@@ -356,46 +356,46 @@ const net = require("node:net");
|
|
|
356
356
|
const path = require("node:path");
|
|
357
357
|
const { spawn, spawnSync } = require("node:child_process");
|
|
358
358
|
const { StringDecoder } = require("node:string_decoder");
|
|
359
|
-
const GIT_BROKER_HTTP_HEADER_POLICY = ${JSON.stringify(
|
|
360
|
-
const GIT_BROKER_CREDENTIAL_HELPER_POLICY = ${JSON.stringify(
|
|
361
|
-
const DEVICE_ENVIRONMENT_NAME_RE = new RegExp(${JSON.stringify(
|
|
362
|
-
const DEVICE_CLOUD_ACCESS_POLICY = ${JSON.stringify(
|
|
363
|
-
const DEVICE_ENVIRONMENT_LIMITS = ${JSON.stringify(
|
|
359
|
+
const GIT_BROKER_HTTP_HEADER_POLICY = ${JSON.stringify(d)};
|
|
360
|
+
const GIT_BROKER_CREDENTIAL_HELPER_POLICY = ${JSON.stringify(f)};
|
|
361
|
+
const DEVICE_ENVIRONMENT_NAME_RE = new RegExp(${JSON.stringify(i)});
|
|
362
|
+
const DEVICE_CLOUD_ACCESS_POLICY = ${JSON.stringify(l)};
|
|
363
|
+
const DEVICE_ENVIRONMENT_LIMITS = ${JSON.stringify(g)};
|
|
364
364
|
|
|
365
|
-
const VERSION = ${
|
|
366
|
-
const WORKER_VERSION = ${
|
|
367
|
-
const WORKER_ENTRYPOINT = ${JSON.stringify(
|
|
368
|
-
const GUEST_MEMORY_UNAVAILABLE_REASONS = ${JSON.stringify(
|
|
369
|
-
const sampleGuestMemory = ${
|
|
370
|
-
const inspectMacPtyMember = ${
|
|
371
|
-
const probeLinuxPtyLibrary = ${
|
|
372
|
-
const windowsPtyApi = ${
|
|
373
|
-
const LINUX_PTY_EXEC_SOURCE = ${JSON.stringify(
|
|
374
|
-
const CLOSE_CODES = ${JSON.stringify(
|
|
365
|
+
const VERSION = ${B};
|
|
366
|
+
const WORKER_VERSION = ${nt};
|
|
367
|
+
const WORKER_ENTRYPOINT = ${JSON.stringify(it)};
|
|
368
|
+
const GUEST_MEMORY_UNAVAILABLE_REASONS = ${JSON.stringify(o)};
|
|
369
|
+
const sampleGuestMemory = ${c};
|
|
370
|
+
const inspectMacPtyMember = ${ut};
|
|
371
|
+
const probeLinuxPtyLibrary = ${at};
|
|
372
|
+
const windowsPtyApi = ${H};
|
|
373
|
+
const LINUX_PTY_EXEC_SOURCE = ${JSON.stringify(dt)};
|
|
374
|
+
const CLOSE_CODES = ${JSON.stringify(S)};
|
|
375
375
|
const SHA256_RE = /^[0-9a-f]{64}$/;
|
|
376
|
-
const MAX_FRAME_BYTES = ${
|
|
377
|
-
const MAX_INPUT_CHARS = ${
|
|
378
|
-
const MAX_STRUCTURED_INPUT_CHARS = ${
|
|
379
|
-
const MAX_OUTPUT_CHARS = ${
|
|
380
|
-
const WORKSPACE_BEFORE_MAX_OUTPUT_CHARS = ${
|
|
381
|
-
const MAX_ERROR_CHARS = ${
|
|
376
|
+
const MAX_FRAME_BYTES = ${W};
|
|
377
|
+
const MAX_INPUT_CHARS = ${F};
|
|
378
|
+
const MAX_STRUCTURED_INPUT_CHARS = ${Q};
|
|
379
|
+
const MAX_OUTPUT_CHARS = ${j};
|
|
380
|
+
const WORKSPACE_BEFORE_MAX_OUTPUT_CHARS = ${Y};
|
|
381
|
+
const MAX_ERROR_CHARS = ${k};
|
|
382
382
|
const MAX_LEDGER_IDS = 16384;
|
|
383
383
|
const MAX_CACHED_RESULTS = 256;
|
|
384
|
-
const MAX_JOB_INPUT_CHARS = ${
|
|
385
|
-
const MAX_JOB_OUTPUT_CHARS = ${
|
|
386
|
-
const MAX_JOB_OUTPUT_CHUNKS = ${
|
|
387
|
-
const MAX_JOBS = ${
|
|
384
|
+
const MAX_JOB_INPUT_CHARS = ${z};
|
|
385
|
+
const MAX_JOB_OUTPUT_CHARS = ${Z};
|
|
386
|
+
const MAX_JOB_OUTPUT_CHUNKS = ${J};
|
|
387
|
+
const MAX_JOBS = ${K};
|
|
388
388
|
const MAX_JOB_RECORD_BYTES = 262144;
|
|
389
389
|
const MAX_JOB_JOURNAL_BYTES = MAX_JOBS * MAX_JOB_RECORD_BYTES;
|
|
390
|
-
const MAX_JOB_CONTROL_FRAME_BYTES = ${
|
|
391
|
-
const MAX_PTY_INPUT_BYTES = ${
|
|
392
|
-
const MAX_PTY_OUTPUT_BYTES = ${
|
|
393
|
-
const MAX_PTY_DIMENSION = ${
|
|
390
|
+
const MAX_JOB_CONTROL_FRAME_BYTES = ${$};
|
|
391
|
+
const MAX_PTY_INPUT_BYTES = ${G};
|
|
392
|
+
const MAX_PTY_OUTPUT_BYTES = ${M};
|
|
393
|
+
const MAX_PTY_DIMENSION = ${X};
|
|
394
394
|
const ID_RE = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$/;
|
|
395
395
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
396
396
|
const WINDOWS = process.platform === "win32";
|
|
397
397
|
// Each Bash leader's tree on Windows, children that outlive it included (shared/windows-job-object.ts).
|
|
398
|
-
const windowsJobs = WINDOWS ? ${
|
|
398
|
+
const windowsJobs = WINDOWS ? ${q}(require) : null;
|
|
399
399
|
/** Windows has no POSIX owner or mode bits: the user's own profile folders are
|
|
400
400
|
* private by their ACLs, and the worker runs as that ordinary user. */
|
|
401
401
|
function ownedPrivately(stat, mask = 0o077) {
|
|
@@ -492,9 +492,9 @@ function jobsUserPrefix(model) {
|
|
|
492
492
|
return user ? ["/usr/bin/setpriv", "--reuid=" + user.uid, "--regid=" + gid, "--clear-groups", "--no-new-privs", "--",
|
|
493
493
|
"/usr/bin/env", "HOME=" + user.home, "USER=" + user.username, "LOGNAME=" + user.username] : [];
|
|
494
494
|
}
|
|
495
|
-
const FIXED_CLOUD_CHILD_PATH = ${JSON.stringify(
|
|
496
|
-
const FIXED_MACOS_CLOUD_CHILD_PATH = ${JSON.stringify(
|
|
497
|
-
const selectCloudChildPath = ${
|
|
495
|
+
const FIXED_CLOUD_CHILD_PATH = ${JSON.stringify(st)};
|
|
496
|
+
const FIXED_MACOS_CLOUD_CHILD_PATH = ${JSON.stringify(ot)};
|
|
497
|
+
const selectCloudChildPath = ${ct};
|
|
498
498
|
const config = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
|
|
499
499
|
const FIXED_BASH = WINDOWS ? config.bashExecutable : "/bin/bash";
|
|
500
500
|
const allowedTools = config.allowedTools === undefined
|
|
@@ -577,12 +577,12 @@ function validJobEnvSourcePath() {
|
|
|
577
577
|
if (config.jobEnvSourcePath === undefined || config.jobEnvSourcePath === path.join(config.workRoot, "job.env")) return true;
|
|
578
578
|
// A cloud workspace's job.env is in its Session's root-only control
|
|
579
579
|
// directory (shared/device-workspace.ts), derived from the root alone.
|
|
580
|
-
const cloud = new RegExp(${JSON.stringify(
|
|
580
|
+
const cloud = new RegExp(${JSON.stringify(b.source)}).exec(config.workRoot);
|
|
581
581
|
if (process.platform === "linux" && cloud) {
|
|
582
582
|
const workspaceId = cloud[3];
|
|
583
|
-
const owner = (new RegExp(${JSON.stringify(
|
|
584
|
-
?? (new RegExp(${JSON.stringify(
|
|
585
|
-
return config.jobEnvSourcePath === ${JSON.stringify(
|
|
583
|
+
const owner = (new RegExp(${JSON.stringify(p.source)}).exec(workspaceId) || [])[1]
|
|
584
|
+
?? (new RegExp(${JSON.stringify(x.source)}).exec(workspaceId) || [])[1] ?? workspaceId;
|
|
585
|
+
return config.jobEnvSourcePath === ${JSON.stringify(y)} + "/" + owner + "/job.env";
|
|
586
586
|
}
|
|
587
587
|
// Personal Cloud controls are root-owned and outside the writable grant.
|
|
588
588
|
// Admit only the same canonical session, never a caller-selected private path.
|
|
@@ -1027,7 +1027,7 @@ function initializeJobs() {
|
|
|
1027
1027
|
// (shared/local-protected-paths.ts) that the file tools and every confinement
|
|
1028
1028
|
// refuse. A home-folder worker keeps it in ~/.config/reason, so its Session may
|
|
1029
1029
|
// work in the home folder itself, as a Mac's home grant does.
|
|
1030
|
-
const PROTECTED_STATE_DIRECTORIES = ${JSON.stringify(
|
|
1030
|
+
const PROTECTED_STATE_DIRECTORIES = ${JSON.stringify(w)};
|
|
1031
1031
|
function stateOverlapsWorkspace(state, root) {
|
|
1032
1032
|
if (pathWithin(root, state)) return true;
|
|
1033
1033
|
if (!pathWithin(state, root)) return false;
|
|
@@ -1372,7 +1372,7 @@ async function handleTerminalCleanup(target, claim, raw) {
|
|
|
1372
1372
|
let child, timer, killTimer;
|
|
1373
1373
|
const finish = ok => { clearTimeout(timer); clearTimeout(killTimer); if (!ok) cleanupUnconfirmed = true; resolve(ok); };
|
|
1374
1374
|
try {
|
|
1375
|
-
child = spawn("/usr/bin/python3", ["-I", "-c", ${JSON.stringify(
|
|
1375
|
+
child = spawn("/usr/bin/python3", ["-I", "-c", ${JSON.stringify(u)}],
|
|
1376
1376
|
{ stdio: ["pipe", "ignore", "ignore"], env: { PATH: "/usr/bin:/bin" }, detached: true });
|
|
1377
1377
|
let timedOut = false;
|
|
1378
1378
|
timer = setTimeout(() => { timedOut = true; try { process.kill(-child.pid, "SIGTERM"); } catch { cleanupUnconfirmed = true; }
|
|
@@ -2347,7 +2347,7 @@ function windowsPtyOperation(request, managed) {
|
|
|
2347
2347
|
try {
|
|
2348
2348
|
if (pty.activeProcesses() > 0) pty.terminate();
|
|
2349
2349
|
for (const startedAt = Date.now(); pty.activeProcesses() > 0;) {
|
|
2350
|
-
if (Date.now() - startedAt > ${
|
|
2350
|
+
if (Date.now() - startedAt > ${s}) throw new Error("pty_cleanup_timeout");
|
|
2351
2351
|
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
2352
2352
|
}
|
|
2353
2353
|
pty.close();
|
|
@@ -2651,7 +2651,7 @@ function linuxPtyOwner() {
|
|
|
2651
2651
|
// user detaches from the shell (nohup, setsid, disown, or jobs left at exit)
|
|
2652
2652
|
// are not swept. At most TERMINAL_HOST_LIMIT shells per scope.
|
|
2653
2653
|
const TERMINAL_SHELL = "/bin/bash --noprofile --norc -i";
|
|
2654
|
-
const TERMINAL_TMUX_CONFIG = ${JSON.stringify([...
|
|
2654
|
+
const TERMINAL_TMUX_CONFIG = ${JSON.stringify([...h,"new-session -d -s main /bin/bash --noprofile --norc -i","set -g exit-empty on","run-shell -b -d 43200 -C kill-server",""].join(`
|
|
2655
2655
|
`))};
|
|
2656
2656
|
const TERMINAL_HOST_LIMIT = 4;
|
|
2657
2657
|
const terminalViewers = new Map();
|
|
@@ -2795,7 +2795,7 @@ function ptyOperation(request, managed, program = TERMINAL_SHELL) {
|
|
|
2795
2795
|
const { members, empty } = native.session(anchor, device);
|
|
2796
2796
|
try {
|
|
2797
2797
|
if (empty && exitCode !== null && subreaper) break;
|
|
2798
|
-
if (Date.now() - startedAt > ${
|
|
2798
|
+
if (Date.now() - startedAt > ${s}) throw new Error("pty_cleanup_timeout");
|
|
2799
2799
|
for (const token of members) {
|
|
2800
2800
|
if (!native.same(anchor)) throw new Error("pty_session_identity_lost");
|
|
2801
2801
|
const id = native.identityKey(token);
|
|
@@ -2811,7 +2811,7 @@ function ptyOperation(request, managed, program = TERMINAL_SHELL) {
|
|
|
2811
2811
|
controlReleased = true;
|
|
2812
2812
|
let exitTimer;
|
|
2813
2813
|
try { await Promise.race([child.exited, new Promise((_, reject) => {
|
|
2814
|
-
exitTimer = setTimeout(() => reject(new Error("pty_anchor_exit_unconfirmed")), ${
|
|
2814
|
+
exitTimer = setTimeout(() => reject(new Error("pty_anchor_exit_unconfirmed")), ${_});
|
|
2815
2815
|
})]); } finally { clearTimeout(exitTimer); }
|
|
2816
2816
|
if (timedOut) finish("timeout", 124);
|
|
2817
2817
|
else if (cancelled) finish("cancelled", 130);
|
|
@@ -3329,7 +3329,7 @@ function replOperation(request) {
|
|
|
3329
3329
|
// timeout and the lease, and background processes retained until the worker
|
|
3330
3330
|
// stops. One departure from stock: a command idle on a watcher's banner is
|
|
3331
3331
|
// stopped (PI_WATCH_BANNER). PI_* variables are not set here.
|
|
3332
|
-
const PI_TOOLS_SHA256 = "${
|
|
3332
|
+
const PI_TOOLS_SHA256 = "${a}";
|
|
3333
3333
|
const piToolsSource = typeof araHandsPiToolsSource === "function" ? araHandsPiToolsSource : null;
|
|
3334
3334
|
let piTools = null;
|
|
3335
3335
|
function loadPiTools() {
|
|
@@ -3362,10 +3362,10 @@ const PI_EXIT_STDIO_GRACE_MS = 100;
|
|
|
3362
3362
|
// the token once under quoteDepth layers of single quoting, so the confined
|
|
3363
3363
|
// script is byte-identical to what the Brain's confineBashPayload gives the
|
|
3364
3364
|
// bash tool: srt/bwrap, the payload uid, the network allowlist and allowWrite.
|
|
3365
|
-
const PI_TOOL_CONFINEMENT_TOKEN = "${
|
|
3365
|
+
const PI_TOOL_CONFINEMENT_TOKEN = "${m}";
|
|
3366
3366
|
function validPiToolConfinement(value) {
|
|
3367
3367
|
return hasOnlyKeys(value, ["template", "quoteDepth"]) && typeof value.template === "string"
|
|
3368
|
-
&& value.template.length <= ${
|
|
3368
|
+
&& value.template.length <= ${L} && !value.template.includes("\0")
|
|
3369
3369
|
&& value.template.split(PI_TOOL_CONFINEMENT_TOKEN).length === 2 && [1, 2, 3].includes(value.quoteDepth);
|
|
3370
3370
|
}
|
|
3371
3371
|
// The script T when this command is exactly this policy's confineBashPayload(T)
|
|
@@ -4176,5 +4176,5 @@ void startJobControl().then(() => {
|
|
|
4176
4176
|
try { loadJobs(); prepareRequestJournal(); } catch { process.exit(44); }
|
|
4177
4177
|
if (validPrivateJob) markReady(); else connect();
|
|
4178
4178
|
}, () => process.exit(45));
|
|
4179
|
-
`.trimStart()
|
|
4180
|
-
export{
|
|
4179
|
+
`.trimStart(),Tt=rt("sha256").update(ft,"utf8").digest("hex");
|
|
4180
|
+
export{r as Pc,jt as Qc,l as Rc,g as Sc,nt as Tc,it as Uc,st as Vc,ot as Wc,Ot as Xc,ut as Yc,at as Zc,ft as _c,Tt as $c};
|
|
@@ -0,0 +1,3 @@
|
|
|
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 Fi,H as Gi,k as Hi,x as Ii,h as Ji,R as Ki,U as Li,J as Mi,K as Ni,g as Oi,o as Pi,q as Qi,E as Ri,d as Si,i as Ti,y as Ui,n as Vi,r as Wi};
|
|
@@ -1,4 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Bn,dt,Ae,pt,jn,di}from"./vm-hands-entry-lite-k278g9kj.js";import{createHash as W,randomBytes as le}from"crypto";import{closeSync as be,fsyncSync as ke,mkdirSync as He,openSync as Se,renameSync as Le,rmSync as Je,statSync as Ie,writeSync as Ee,constants as q}from"fs";import{join as ee}from"path";var Ye=1;var ne=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function ue(e){if(e.environment!==void 0||e.payload.environment!==void 0)throw new l("vm_hands_bind_invalid","bind carries a plaintext environment");if(e.payload.vm_hands_env_deferred===!0&&e.environment_sealed!==void 0)throw new l("vm_hands_bind_invalid","split bind carries an environment");return e.environment_sealed!==void 0}function ye(e,n){let{payload:i,authority:r}=e;if(!i||typeof i!=="object"||Array.isArray(i)||!r||typeof r!=="object"||Array.isArray(r)||!n.deviceId||!n.rootId||i.run_id!==n.runId||i.device_id!==n.deviceId||r.device_id!==n.deviceId||i.root_id!==n.rootId||n.snapshotId!==void 0&&i.snapshot_id!==n.snapshotId)throw new l("vm_hands_env_invalid","environment does not match this Hands");return i}function Pe(e){if(e.capability!=="hands.connect")throw new l("vm_hands_bind_invalid","not a hands.connect claim");let n=e.payload;return{kind:"vm_hands.bind",v:1,bind_id:e.attempt_id,attempt_id:e.attempt_id,attempt_token:e.attempt_token,run_id:e.run_id,session_id:typeof n.workspace_id==="string"&&ne.test(n.workspace_id)?n.workspace_id:e.run_id,brain_generation:n.target_generation,fence_id:n.target_fence_id,lease_until:e.lease_until,policy:{agent_profile:"",confinement_key:String(n.hands_confinement??""),browser_egress:n.browser_egress??null,policy_digest:n.vm_hands_policy_digest},cwd:typeof n.cwd==="string"?n.cwd:"",claim:e,env:ue(e)?e.environment_sealed:null,workspace_deferred:Xe(e)}}function Xe(e){let n=e.payload[Ae];if(n===void 0)return!1;if(n!==!0||e.payload.vm_hands_env_deferred!==!0||e.environment_sealed!==void 0)throw new l("vm_hands_bind_invalid","a pre-bind must be environment-less");return!0}class l extends Error{code;constructor(e,n){super(n);this.code=e}}var B=(e)=>Buffer.from(e instanceof Uint8Array?e:new Uint8Array(e)).toString("base64url"),F=(e)=>new Uint8Array(Buffer.from(e,"base64url"));function V(e){if(e===null||typeof e!=="object")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(V).join(",")}]`;return`{${Object.keys(e).sort().map((n)=>`${JSON.stringify(n)}:${V(e[n])}`).join(",")}}`}async function wi(e){let n=await crypto.subtle.importKey("pkcs8",F(e.device_key.pkcs8),{name:"ECDSA",namedCurve:"P-256"},!1,["sign"]),i=F(e.device_key.spki),r=await crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},!1,["deriveKey"]),g=new Uint8Array(await crypto.subtle.exportKey("spki",r.publicKey)),_=W("sha256").update(i).digest("base64url");return{signing:{privateKey:n},agreement:r,signingSpki:i,agreementSpki:g,fingerprint:_}}var Qe=4;class Xr{init;keys;hooks;options;identity="identity_free";lastBrainGeneration=new Map;bound=new Map;binding=new Map;unbinding=new Set;servedRun=!1;commandsSinceVerified=!1;bootKillPending=!1;unverified=new Set;unverifiedTeardowns=new Map;grants=new Map;structural=Promise.resolve();exclusive(e){let n=this.structural.then(e,e);return this.structural=n.catch(()=>{return}),n}constructor(e,n,i,r){this.init=e;this.keys=n;this.hooks=i;this.options=r;if(!ne.test(e.workspace_id)&&!/^ws-[a-z0-9]{8,64}$/.test(e.workspace_id))throw new l("vm_hands_layout_invalid","bad workspace id");if(!Number.isSafeInteger(e.instance_generation)||e.instance_generation<1)throw new l("vm_hands_layout_invalid","bad generation")}get phase(){if(this.identity==="identity_free")return"identity_free";if(this.unbinding.size)return"unbinding";return this.bound.size||this.binding.size?"bound":"registered"}isBoundRun(e){for(let n of this.bound.values())if(n.runId===e)return!0;return!1}bindIdForRun(e){for(let n of this.bound.values())if(n.runId===e)return n.bindId;return null}get liveBindIds(){return[...new Set([...this.bound.keys(),...this.binding.keys(),...this.unbinding])]}async environmentInstalled(e,n,i){for(let r=Date.now()+n;;){let g=this.bound.get(e);if(!g)return!1;if(g.envInstalled)return!0;if(Date.now()>=r||i?.aborted)return!1;await new Promise((_)=>setTimeout(_,25))}}opServed(){this.commandsSinceVerified=!0}canSpawn(e){for(let n of this.bound.values())if(n.runId===e)return n.envInstalled;return!1}async registerFrame(e){if(this.identity!=="identity_free")throw new l("vm_hands_register_twice","already registered");if(typeof e!=="string"||e.length<16||e.length>256)throw new l("vm_hands_challenge_invalid","bad register challenge");let n={challenge:e,t:"register",v:Ye,workspace_id:this.init.workspace_id,instance_generation:this.init.instance_generation,credential:this.init.credential,device_public_key:B(this.keys.signingSpki),env_public_key:B(this.keys.agreementSpki),key_fingerprint:this.keys.fingerprint,manifest_digest:this.init.manifest_digest,nonce:B(le(32)),timestamp_ms:(this.options.now??Date.now)(),vm_hands_attest_hold:!0},i=await crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},this.keys.signing.privateKey,new TextEncoder().encode(V(n)));return{...n,device_signature:B(i)}}async helloFrame(e,n){if(this.identity==="identity_free")throw new l("vm_hands_not_registered","hello before register");let i=String((this.options.now??Date.now)()),r=B(le(32)),g=di({method:"GET",pathAndQuery:Bn,timestamp:i,nonce:r,challenge:e,bodySha256:W("sha256").update("").digest("hex")}),_=new Uint8Array(await crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},this.keys.signing.privateKey,new Uint8Array(g)));return{t:"hello",timestamp:i,nonce:r,signature:B(Ze(_)),...n?{vm_hands_previous_connection:n}:{}}}registered(){if(this.identity!=="identity_free")throw new l("vm_hands_register_unexpected","registered twice");this.identity="registered"}async bind(e){if(this.identity!=="registered")throw new l("vm_hands_not_registered","bind before register");if(e.kind!=="vm_hands.bind"||e.v!==1)throw new l("vm_hands_bind_invalid","bad bind");for(let i of[e.bind_id,e.attempt_id,e.run_id,e.session_id,e.fence_id])if(!ne.test(i))throw new l("vm_hands_bind_invalid","bad id");if(!Number.isSafeInteger(e.brain_generation)||e.brain_generation<=(this.lastBrainGeneration.get(e.run_id)??0))throw new l("vm_hands_generation_stale","brain generation not strictly higher");if(e.env&&(e.env.aad!==e.bind_id||e.env.alg!=="ECDH-P256+A256GCM"))throw new l("vm_hands_bind_invalid","bad env envelope");if(!/^[0-9a-f]{64}$/.test(e.policy.policy_digest))throw new l("vm_hands_bind_invalid","bad policy or nonce");if(W("sha256").update(V({hands_confinement:e.policy.confinement_key||null,browser_egress:e.policy.browser_egress??null})).digest("hex")!==e.policy.policy_digest)throw new l("vm_hands_policy_mismatch","policy digest does not match the claim");if(this.liveBindIds.includes(e.bind_id)||[...this.bound.values()].some((i)=>i.runId===e.run_id)||[...this.binding.values()].includes(e.run_id))throw new l("vm_hands_busy","this run already holds a bind here");if(this.liveBindIds.length>=Qe)throw new l("vm_hands_busy","every bind slot is held");if(this.grants.size)throw new l("vm_hands_busy","a bind waits for its workspace beside the setup");if(e.workspace_deferred&&(this.liveBindIds.length||this.commandsSinceVerified))throw new l("vm_hands_prebind_unsafe","a pre-bind needs a VM that served nothing since its last full kill");if(this.lastBrainGeneration.set(e.run_id,e.brain_generation),this.binding.set(e.bind_id,e.run_id),e.workspace_deferred){let i,r,g=new Promise((_,u)=>{i=_,r=u});g.catch(()=>{return}),this.grants.set(e.bind_id,{promise:g,resolve:i,reject:r})}return this.exclusive(()=>this.setUp(e))}async setUp(e){let n=[...this.bound.keys()],i=null,r=!1,g=this.grants.get(e.bind_id);try{if(g&&(n.length||this.commandsSinceVerified))throw new l("vm_hands_prebind_unsafe","a pre-bind needs a VM that served nothing since its last full kill");if(n.length===0){if(this.bootKillPending&&!this.servedRun){try{await this.hooks.killProbe()}catch{throw new l("vm_hands_kill_unverified","the boot's scoped kill did not verify")}this.bootKillPending=!1}if(this.commandsSinceVerified)await this.hooks.killAndVerifyPayload(),this.unverified.clear(),this.commandsSinceVerified=!1;else if(this.unverified.size>0)await this.hooks.killAndVerifyPayload({own:!0}),this.unverified.clear()}else if(this.unverified.size>0)await this.hooks.killAndVerifyPayload({keep:n}),this.unverified.clear();this.servedRun=!0,r=!0;let{launchId:_,applied:u,readyData:y}=await this.hooks.startExecutor({bindId:e.bind_id,sessionId:e.session_id,policyDigest:e.policy.policy_digest,confinementKey:e.policy.confinement_key,browserEgress:e.policy.browser_egress,cwd:e.cwd,claim:e.claim,...g?{workspaceGrant:g.promise}:{}}),S=this.hooks.restatLayout();this.hooks.verifyMounts?.();let I=null,v=null;if(e.env){let A=e.claim?.owner??{},M=ye(await this.openSealed(e.env,e.bind_id),{runId:e.run_id,deviceId:typeof A.device_id==="string"?A.device_id:"",rootId:e.claim?.root_id??""});this.commandsSinceVerified=!0,I=this.hooks.installEnvironment(e.bind_id,M),v=typeof M.snapshot_id==="string"&&M.snapshot_id?M.snapshot_id:null,i=this.writeJobEnvRootOnly(e.bind_id,M)}if(this.unbinding.has(e.bind_id))throw new l("vm_hands_bind_lost","unbound while binding");return this.bound.set(e.bind_id,{bindId:e.bind_id,runId:e.run_id,sessionId:e.session_id,brainGeneration:e.brain_generation,policyDigest:e.policy.policy_digest,launchId:_,envInstalled:I!==null,rootId:e.claim?.root_id??"",envDirectory:i}),this.binding.delete(e.bind_id),this.grants.delete(e.bind_id),{bind_id:e.bind_id,attempt_id:e.attempt_id,attempt_token:e.attempt_token,launch_id:_,snapshot_revision:I,snapshot_id:v,layout:S,...y?{ready_data:y}:{},policy_digest:W("sha256").update(V({hands_confinement:u.hands_confinement??null,browser_egress:u.browser_egress??null})).digest("hex")}}catch(_){if(i)_e(i);if(r){let y=[...this.bound.keys()];await this.hooks.killAndVerifyPayload({bindId:e.bind_id,keep:y,own:!0}).catch(()=>{this.unverified.add(e.bind_id)})}this.binding.delete(e.bind_id),this.grants.delete(e.bind_id);let u=_&&typeof _==="object"&&"code"in _&&typeof _.code==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(_.code)?_.code:"vm_hands_bind_failed";throw _ instanceof l?_:new l(u,"executor refused the bind")}}grantWorkspace(e){let n=this.grants.get(e);if(!n)throw new l("vm_hands_not_binding","no pre-bind waits for a workspace grant");n.resolve()}abandonWorkspaceGrant(e){this.grants.get(e)?.reject(new l("vm_hands_bind_lost","the pre-bind ended before its workspace grant"))}async deliverEnvironment(e){let n=this.bound.get(e.attemptId);if(!n||this.unbinding.has(e.attemptId))throw new l("vm_hands_not_bound","environment delivered while not bound");if(!ne.test(e.attemptId)||typeof e.snapshotId!=="string"||!e.snapshotId||e.snapshotId.length>128||e.snapshotId.includes("/"))throw new l("vm_hands_env_invalid","bad snapshot id");let i=`${e.attemptId}/${e.snapshotId}`;if(e.sealed?.alg!=="ECDH-P256+A256GCM"||e.sealed.aad!==i)throw new l("vm_hands_env_invalid","bad env envelope");let r=ye(await this.openSealed(e.sealed,i),{runId:n.runId,deviceId:e.deviceId,rootId:n.rootId,snapshotId:e.snapshotId});this.commandsSinceVerified=!0;let g=this.hooks.installEnvironment(n.bindId,r);if(n.envInstalled=!0,n.envDirectory)_e(n.envDirectory);return n.envDirectory=null,n.envDirectory=this.writeJobEnvRootOnly(`${n.bindId}-r${g}`,r),{snapshot_id:e.snapshotId,installed_revision:g,installed:!0}}async attestFrame(e,n){if(this.identity==="identity_free")throw new l("vm_hands_not_registered","attest before register");if(!e||e.length>65536)throw new l("vm_hands_attest_invalid","no probe script");return this.exclusive(async()=>{if(this.liveBindIds.length)throw new l("vm_hands_attest_invalid","attest beside a bind");let i=await this.hooks.runProbe({nonce:n,script:e});try{await this.hooks.killProbe()}catch{this.bootKillPending=!0}return{t:"attest",nonce:n,exit_code:i.exitCode,markers:i.markers,proof_dir_inode:i.proofDirInode,script_sha256:W("sha256").update(e).digest("hex")}})}executorExited(e){return this.hooks.executorExited?.(e)??new Promise(()=>{})}async boundRefused(e){await this.unbind(e)}async unbind(e){let n=this.bound.get(e)??null;if(this.unbinding.add(e),this.bound.delete(e),this.abandonWorkspaceGrant(e),n)try{this.hooks.freezeBind?.(e)}catch{}return this.exclusive(()=>this.tearDown(e,n))}async retryUnbind(e){if(!this.unverifiedTeardowns.has(e))throw new l("vm_hands_unbind_unknown","no unverified unbind of this bind");return this.exclusive(async()=>{if(!this.unverifiedTeardowns.has(e))throw new l("vm_hands_unbind_unknown","no unverified unbind of this bind");return this.tearDown(e,this.unverifiedTeardowns.get(e)??null,!0)})}async tearDown(e,n,i=!1){try{this.bound.delete(e);let r=[...this.bound.keys()].filter((_)=>_!==e),g=!r.length&&(i||!this.commandsSinceVerified);try{await this.hooks.killAndVerifyPayload(r.length?{bindId:e,keep:r}:g?{bindId:e,own:!0}:void 0)}catch(_){if(this.unverified.add(e),!this.unverifiedTeardowns.has(e))this.unverifiedTeardowns.set(e,n);throw _}if(this.unverified.delete(e),!r.length&&!i)this.unverified.clear(),this.commandsSinceVerified=!1;if(n?.envDirectory)_e(n.envDirectory);return this.unverifiedTeardowns.delete(e),{bind_id:n?e:null,killed_verified:!0,shredded:!0,srt_fallbacks:r.length||i?null:this.hooks.takeSrtFallbacks?.()??null}}finally{this.unbinding.delete(e)}}async openSealed(e,n){let i=()=>{throw new l("vm_hands_env_invalid","env did not decrypt")},r=await crypto.subtle.importKey("spki",F(e.epk),{name:"ECDH",namedCurve:"P-256"},!1,[]).catch(i),g=await crypto.subtle.deriveKey({name:"ECDH",public:r},this.keys.agreement.privateKey,{name:"AES-GCM",length:256},!1,["decrypt"]),_=await crypto.subtle.decrypt({name:"AES-GCM",iv:F(e.iv),additionalData:new TextEncoder().encode(n)},g,F(e.ct)).catch(i),u=JSON.parse(new TextDecoder().decode(_));if(!u||typeof u!=="object"||Array.isArray(u))throw new l("vm_hands_env_invalid","env not an object");return u}writeJobEnvRootOnly(e,n){let i=ee(this.options.envRoot,`bind-${e}`);He(i,{mode:448});let r=Ie(i);if(!r.isDirectory()||(r.mode&63)!==0||r.uid!==(process.getuid?.()??-1))throw new l("vm_hands_env_dir_unsafe","env directory is not root's 0700");let g=n.variables&&typeof n.variables==="object"?n.variables:{},_=Object.entries(g).filter(([S,I])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(S)&&typeof I==="string").map(([S,I])=>`export ${S}='${String(I).replaceAll("'","'\\''")}'`).join(`
|
|
3
|
-
`)+`
|
|
4
|
-
`,u=ee(i,`.job.env.${le(8).toString("hex")}`),y=Se(u,q.O_WRONLY|q.O_CREAT|q.O_EXCL|q.O_NOFOLLOW,384);try{Ee(y,_),ke(y)}finally{be(y)}return Le(u,ee(i,"job.env")),i}}function _e(e){try{let n=ee(e,"job.env"),i=Ie(n).size,r=Se(n,q.O_WRONLY|q.O_NOFOLLOW);try{Ee(r,Buffer.alloc(i)),ke(r)}finally{be(r)}}catch{}Je(e,{recursive:!0,force:!0})}function Ze(e){if(e.length!==64)throw new l("vm_hands_signature_invalid","unexpected ECDSA signature length");let n=(g)=>{let _=0;while(_<g.length-1&&g[_]===0)_++;let u=g.subarray(_),y=u[0]&128?Uint8Array.of(0,...u):u;return Uint8Array.of(2,y.length,...y)},i=n(e.subarray(0,32)),r=n(e.subarray(32));return Uint8Array.of(48,i.length+r.length,...i,...r)}import{randomUUID as en}from"crypto";var nn="/app/local-runtime/session?register=vm_hands_v1",tn="/app/local-runtime",Te=25000,Re=20000,rn=1e4,Ce=5000,xe=new Set(["pty.start","jobs.control","preview.serve.v1","display.stream.v1"]),me=75000,sn=2000,on=1e4,an=new Set(["vm_hands_no_register","vm_hands_register_failed"]),dn=3,cn=20000,ln=250,_n=2000;function Ne(e){let n=Math.min(ln*2**(e-1),_n);return Math.round(n/2+Math.random()*n/2)}var un=5000;function mn(e){return e>=500||e===408||e===429}var te=20000;function De(e,n){return typeof e==="string"&&/^[A-Za-z0-9._:-]{1,160}$/.test(e)?e:n}class O extends Error{}var hn=64,Oe=[1000,2000,4000,8000,15000,30000,60000,120000];function Be(e){let n=e&&typeof e==="object"&&"code"in e?e.code:null;return typeof n==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(n)?n:"vm_hands_unbind_failed"}function gn(e,n,i,r,g){let _=i.turn.claim.attempt_id,u=e.healing??=new Set;if(u.has(_))return;u.add(_);let y=i.turn.claim.operation_id;(async()=>{for(let[S,I]of Oe.entries()){if(r.aborted)return;if(await new Promise((v)=>{let A=setTimeout(v,I);A.unref?.(),r.addEventListener("abort",()=>{clearTimeout(A),v()},{once:!0})}),r.aborted)return;try{let v=await n.retryUnbind(_);g("vm_hands.unbind_healed",{operation_id:y,attempt:S+1}),e.receipts.push({...i,unbound:v}),e.flushReceipts?.();return}catch(v){let A=Be(v);if(g("vm_hands.unbind_unverified",{operation_id:y,code:A,attempt:S+1}),A==="vm_hands_unbind_unknown")return}}g("vm_hands.unbind_heal_exhausted",{operation_id:y,attempts:Oe.length})})().finally(()=>u.delete(_))}async function qe(e,n){let i=[...e.modelOps.get(n)??[]];for(let r of i)r.abort.abort();await Promise.race([Promise.all(i.map((r)=>r.settled)),new Promise((r)=>setTimeout(r,Ce))])}async function fn(e){let n=[...e.personTerminals];for(let i of n)i.abort.abort();if(n.length)await Promise.race([Promise.all(n.map((i)=>i.settled)),new Promise((i)=>setTimeout(i,Ce))]);return n.length}async function z(e,n,i){return await qe(e,i),n.unbind(i)}function ie(e){for(let n of e.outbox?.splice(0)??[])n.reject(Error("vm_hands_attempt_ended"))}var Me=15000,pn=1e4,vn=1000;async function bi(e){let n=Date.now(),i={deviceId:null,connection:null,turns:new Map,lostAt:0,receipts:[],attest:"pending",attestWaiters:[],modelOps:new Map,personTerminals:new Set,bindsStarting:0},r=e.log??(()=>{}),g=async(y)=>{for(let[S,I]of[...i.turns]){i.turns.delete(S),e.onTurn?.(S,null),ie(I);let v=await z(i,e.agent,S).catch(()=>null);if(v)i.receipts.push({turn:I,failure:"vm_hands_bind_lost",unbound:v});r("vm_hands.bound_dropped",{reason:y})}},_=0,u=0;try{for(let y=0;!e.signal.aborted;y++){let S=await wn(e,i).catch((v)=>{if(v instanceof l&&i.deviceId===null&&v.code==="vm_hands_no_session"&&Date.now()-n<on)return{closeCode:0,closeReason:"vm_hands_no_session"};if(v instanceof l&&i.deviceId===null&&an.has(v.code)&&_<dn&&Date.now()-n<cn)return _++,u=Ne(_),r("vm_hands.register_retry",{attempt:_,code:v.code,delay_ms:u}),{closeCode:0,closeReason:"vm_hands_register_retry"};if(v instanceof l&&i.deviceId===null)throw v;return{closeCode:0,closeReason:v instanceof Error?v.message:String(v)}});if(r("vm_hands.session_closed",{close_code:S.closeCode,reason:S.closeReason.slice(0,120),registered:i.deviceId!==null}),S.closeCode===4401||i.attest==="refused")return;if(e.signal.aborted)return;if(i.turns.size&&Date.now()-i.lostAt>=me)await g("reconnect_deadline");if(i.served)i.served=!1,y=0;let I=S.closeReason==="drain_reconnect"?0:S.closeReason==="vm_hands_register_retry"?u:S.closeReason==="vm_hands_no_session"?Math.min(250*2**Math.min(y,5),2000):i.turns.size?Math.min(250*2**Math.min(y,5),5000,Math.max(0,i.lostAt+me-Date.now())):Math.min(500*2**y,30000);if(await new Promise((v)=>setTimeout(v,I)),i.turns.size&&Date.now()-i.lostAt>=me)await g("reconnect_deadline")}}finally{await g("session_ended")}}async function wn(e,n){let i=n.deviceId,r=e.log??(()=>{}),g=i?`/app/local-runtime/session?device_id=${encodeURIComponent(i)}`:nn,_=`${e.apiOrigin.replace(/^http/,"ws")}${g}`,u=new WebSocket(_),y=0,S="",I=new Map,v=[],A=null,M=new Promise((t)=>{u.onclose=(o)=>{y=o.code,S=o.reason;for(let s of I.values())s.reject(new O(`session closed ${o.code}`));for(let s of n.attestWaiters.splice(0))s(!1);I.clear(),t()}});u.onmessage=(t)=>{let o;try{o=JSON.parse(String(t.data))}catch{u.close(4400);return}if(o.t==="res"){let s=o;I.get(s.id)?.resolve({status:s.status,body:s.body}),I.delete(s.id);return}if(o.t==="reconnect"){let s=Math.max(0,Math.min(Number(o.after_ms)||0,vn));r("vm_hands.drain_reconnect",{after_ms:s}),setTimeout(()=>{try{u.close(4001,"drain_reconnect")}catch{}},s).unref?.();return}if(!A?.(o))v.push(o)};let G=(t,o)=>new Promise((s,c)=>{let h=v.findIndex((p)=>t.includes(p.t));if(h>=0){s(v.splice(h,1)[0]);return}let f=setTimeout(()=>{A=null,c(new l("vm_hands_no_register",`no ${t.join("/")} in ${o} ms`))},o);A=(p)=>{if(!t.includes(p.t))return!1;return clearTimeout(f),A=null,s(p),!0}}),K=(t)=>u.send(JSON.stringify(t)),x=(t,o)=>new Promise((s,c)=>{if(u.readyState!==WebSocket.OPEN){c(new O("session closed"));return}let h=en(),f=typeof o.wait_ms==="number"?o.wait_ms:0,p=setTimeout(()=>{if(!I.delete(h))return;c(new O(`no answer to ${t.split("/").pop()} in ${f+Me} ms`)),u.close(4000,"request_timeout")},f+Me);I.set(h,{reject:(a)=>{clearTimeout(p),c(a)},resolve:({status:a,body:d})=>{clearTimeout(p);let m=null;try{m=d?JSON.parse(d):null}catch{}s({status:a,json:m})}}),K({t:"req",id:h,path:`${tn}${t}`,body:JSON.stringify(o)})}),he=()=>u.close(1001,"stopping");e.signal.addEventListener("abort",he,{once:!0});let re,H=new Map,L=new Map,se=!1,oe=new Set,ae=new Set,de=Promise.resolve(),ge=()=>{X().catch(()=>{return})},J=!1;try{await new Promise((a,d)=>{let m=setTimeout(()=>d(Error("session open timeout")),pn);u.onopen=()=>{clearTimeout(m),r("vm_hands.ws_open",{}),a()},u.onerror=()=>{clearTimeout(m),d(Error("session socket error"))}});let t=await G(["challenge"],5000);r("vm_hands.challenge",{});let o=[],s=null,c;if(i){K(await e.agent.helloFrame(t.challenge,n.connection));let a=await G(["ready"],1e4);if(typeof a.vm_hands_connection==="string")n.connection=a.vm_hands_connection;if(c={device_id:i,...a.cadence?{cadence:a.cadence}:{}},typeof a.vm_hands_probe_script==="string"){if(s=a.vm_hands_probe_script,J=!0,e.agent.phase==="registered"&&!n.turns.size)n.attest="pending"}n.served=!0,r("vm_hands.reconnected",{device_id:i});let d=Array.isArray(a.vm_hands_binds)?a.vm_hands_binds:a.vm_hands_bind?[a.vm_hands_bind]:[];for(let[m,k]of[...n.turns]){if(d.some((P)=>P&&P.operation_id===k.claim.operation_id&&P.attempt_id===k.claim.attempt_id)){o.push(k),r("vm_hands.bound_resumed",{operation_id:k.claim.operation_id});continue}n.turns.delete(m),e.onTurn?.(m,null),ie(k);let E=await z(n,e.agent,m).catch((P)=>Y(P,k,"vm_hands_bind_lost"));if(E)n.receipts.push({turn:k,failure:"vm_hands_bind_lost",unbound:E});r("vm_hands.bound_dropped",{reason:"not_named_on_reconnect"})}}else{K(await e.agent.registerFrame(t.challenge)),r("vm_hands.register_sent",{});let a=await Promise.race([G(["registered","register_refused"],1e4),M.then(()=>{throw new l(S==="register_failed"?"vm_hands_register_failed":"vm_hands_register_closed","session closed before the register was answered")})]);if(a.t==="register_refused")throw new l(a.code,"register refused");e.agent.registered();let d=a;if(c=d,n.deviceId=d.device_id,typeof d.vm_hands_connection==="string")n.connection=d.vm_hands_connection;if(typeof d.vm_hands_probe_script==="string"){if(s=d.vm_hands_probe_script,J=!0,e.agent.phase==="registered"&&!n.turns.size)n.attest="pending"}n.served=!0,r("vm_hands.registered",{device_id:c.device_id})}let h=async()=>{let a=await x("/heartbeat",await e.heartbeat());if(a.status>=300)throw Error(`heartbeat ${a.status}`)};await h();let f=c.cadence?.presence_interval_ms??30000;if(re=setInterval(()=>{h().catch(()=>u.close())},f),s&&n.attest!=="accepted"&&e.agent.phase==="registered"&&!n.turns.size)je(s,t.challenge);let p=(a,d)=>{L.set(a,d().catch(async(m)=>{if(await fe(m,a),m instanceof O)u.close();else await X().catch(()=>{return})}).finally(()=>{L.delete(a)}))};n.flushReceipts=ge;try{await X();for(let a of o)a.flush=()=>pe(a),a.flush(),p(a.claim.attempt_id,()=>ve(a));while(!e.signal.aborted&&u.readyState===WebSocket.OPEN){let a=await x("/operations/claim",{wait_ms:Math.min(c.cadence?.claim_wait_ms??Te,Te)});if(a.status===204||!a.json)continue;if(a.status>=300)throw Error(`claim ${a.status}`);let d=a.json;if(d.capability==="hands.connect"){if(L.has(d.attempt_id)){R({claim:d,eventSeq:0}).complete("failed",{error_code:"vm_hands_busy"}).catch(()=>{return});continue}p(d.attempt_id,()=>Ue(d))}else Fe(d).catch(()=>{return})}}catch(a){await fe(a,null)}}finally{if(re)clearInterval(re);e.signal.removeEventListener("abort",he);for(let t of n.turns.values())t.flush=null;if(n.flushReceipts===ge)n.flushReceipts=null;u.close(),await M,await Promise.all([...L.values()]);for(let t of e.agent.liveBindIds){if(n.turns.has(t))continue;let o=H.get(t),s=o?{...o,eventSeq:o.eventSeq+1}:null,c=await z(n,e.agent,t).catch((h)=>s?Y(h,s,"vm_hands_bind_lost"):null);if(c&&s)n.receipts.push({turn:s,failure:"vm_hands_bind_lost",unbound:c});r("vm_hands.bound_dropped",{reason:"bound_after_loss"})}for(let t of oe)t.abort()}return{closeCode:y,closeReason:S};async function fe(t,o){if(t instanceof O){if(!se&&n.turns.size)n.lostAt=Date.now();se=!0}else{let s=o!==null?[o]:[...new Set([...n.turns.keys(),...e.agent.liveBindIds])];if(o===null)se=!0;for(let c of s){let h=n.turns.get(c);if(n.turns.delete(c),h)ie(h),e.onTurn?.(c,null);if(e.agent.liveBindIds.includes(c)){let f=H.get(c)??h,p=f?{...f,eventSeq:f.eventSeq+1}:null,a=await z(n,e.agent,c).catch((d)=>p?Y(d,p,"vm_hands_bind_lost"):null);if(a&&p)n.receipts.push({turn:p,failure:"vm_hands_bind_lost",unbound:a})}}}r("vm_hands.session_lost",{error:t instanceof Error?t.message:String(t),bound_kept:n.turns.size})}function R(t){let o=t.claim,s={attempt_id:o.attempt_id,attempt_token:o.attempt_token},c=encodeURIComponent(o.operation_id);return{fence:s,op:c,complete:(f,p={})=>x(`/operations/${c}/complete`,{...s,status:f,...p}),emit:(f,p)=>{let a=(t.chain??Promise.resolve()).catch(()=>{return}).then(()=>h(f,p));return t.chain=a,a}};async function h(f,p){let a=t.eventSeq,d=(P)=>x(`/operations/${c}/events`,{...s,event_seq_start:P,events:[{kind:f,payload:{sequence:P,capability:String(o.capability??"hands.connect"),data:p}}]}),m=a,k=await d(m),E=k.status===409?k.json?.expected_event_seq:void 0;if(typeof E==="number"&&E===a+1)k={status:200,json:{duplicate:!0}};else if(typeof E==="number"&&E>=0&&E!==a)m=E,k=await d(m);if(k.status<300)t.eventSeq=m+1;return k}}function $e(t){return(o,s)=>new Promise((c,h)=>{if(n.turns.get(t.claim.attempt_id)!==t){h(Error("vm_hands_attempt_ended"));return}if(t.outbox??=[],t.outbox.length>=hn){h(Error("vm_hands_outbox_full"));return}t.outbox.push({kind:o,data:s,resolve:c,reject:h}),t.flush?.()})}function pe(t){if(ae.has(t))return;ae.add(t),(async()=>{try{while(t.outbox?.length&&n.turns.get(t.claim.attempt_id)===t&&u.readyState===WebSocket.OPEN){let o=t.outbox[0],s;try{s=await R(t).emit(o.kind,o.data)}catch(c){if(c instanceof O)return;s={status:500}}if(t.outbox.shift(),s.status<300)o.resolve();else o.reject(Error(`${o.kind} refused ${s.status}`))}}finally{ae.delete(t)}})()}async function je(t,o){try{let s=await e.agent.attestFrame(t,o);if(u.readyState!==WebSocket.OPEN)return;K(s);let c=await G(["attested","attest_refused"],15000);n.attest=c.t==="attested"?"accepted":"refused";for(let h of n.attestWaiters.splice(0))h(n.attest==="accepted");if(r("vm_hands.attest",{result:n.attest,exit_code:s.exit_code,...c.t==="attest_refused"?{code:String(c.code??"")}:{}}),n.attest==="refused")u.close(4401,"attest_refused")}catch(s){r("vm_hands.attest_failed",{code:s instanceof l?s.code:"probe_error"});for(let c of n.attestWaiters.splice(0))c(!1);if(n.attest!=="accepted")u.close(4000,"attest_unanswered")}}async function Ue(t){let o=J&&n.attest==="pending",s=t.vm_hands_attest,c=s;if(n.attest==="refused"){r("vm_hands.claim_attest_refused",{said:typeof s==="string"?s.slice(0,16):typeof s,local:n.attest}),await R({claim:t,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}if(c==="accepted"){if(!o&&n.attest!=="accepted"){n.attest="accepted";for(let w of n.attestWaiters.splice(0))w(!0)}}else if(c!=="pending"||!o&&n.attest!=="accepted"){r("vm_hands.claim_attest_refused",{said:typeof s==="string"?s.slice(0,16):typeof s,local:n.attest}),await R({claim:t,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}if(n.attest!=="accepted"){let w=Date.parse(t.lease_until)-Date.now()-5000,D=Math.max(0,Math.min(te,Number.isFinite(w)?w:te));if(!await new Promise((Z)=>{let Ge=setTimeout(()=>Z(!1),D);n.attestWaiters.push((Ke)=>{clearTimeout(Ge),Z(Ke)})})){await R({claim:t,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}}let h={claim:t,eventSeq:0},{complete:f,emit:p}=R(h),a;try{if(t.capability!=="hands.connect")throw new l("vm_hands_bind_invalid","not hands.connect");a=!ue(t)}catch(w){r("vm_hands.bind_refused",{code:w instanceof l?w.code:"unexpected"}),await f("failed",{error_code:w instanceof l?w.code:"vm_hands_bind_invalid"});return}let d,m=null,k=!1;n.bindsStarting++;try{let w=await fn(n);if(w)r("vm_hands.person_terminals_closed",{count:w});let D=Pe(t),Q=e.agent.bind(D);if(D.workspace_deferred)k=!0,m=We(h,()=>k);d=await Q}catch(w){r("vm_hands.bind_refused",{code:w instanceof l?w.code:"unexpected"}),await f("failed",{error_code:w instanceof l?w.code:"vm_hands_bind_failed"});return}finally{k=!1,n.bindsStarting--}let E=m?await m:-1,P={...d.ready_data??e.readyData({launchId:d.launch_id,claim:t})};if(a)delete P.environment_installed;let ce=!a&&d.snapshot_revision!==null&&d.snapshot_id!==null?{environment_installed:{snapshot_id:d.snapshot_id,installed_revision:d.snapshot_revision}}:{};H.set(t.attempt_id,{claim:t,launchId:d.launch_id,readyData:P,eventSeq:h.eventSeq,ackSeq:-1});let C={...P,...ce,vm_hands:{layout:d.layout,policy_digest:d.policy_digest,launch_id:d.launch_id}},U=Date.now()+un,N=1,b=await p("hands.ready",C);while(mn(b.status)&&!e.signal.aborted){let w=Ne(N);if(Date.now()+w>=U)break;await new Promise((D)=>setTimeout(D,w)),N++,b=await p("hands.ready",C)}if(N>1)r("vm_hands.ready_retried",{attempts:N,status_class:`${Math.floor(b.status/100)}xx`});if(H.delete(t.attempt_id),b.status>=300){await qe(n,t.attempt_id),await e.agent.boundRefused(t.attempt_id),await f("failed",{error_code:De(b.json?.error,"vm_hands_probe_failed")});return}let T={claim:t,launchId:d.launch_id,readyData:P,eventSeq:h.eventSeq,ackSeq:E};n.turns.set(t.attempt_id,T),T.flush=()=>pe(T),e.onTurn?.(t.attempt_id,$e(T)),await ve(T)}async function We(t,o){let{fence:s,op:c}=R(t),h=t.claim.attempt_id,f=-1;try{for(;;){let p=await x(`/operations/${c}/heartbeat`,{...s,control_ack_seq:f,wait_ms:Re});if(!o())return f;if(p.status>=300)return e.agent.abandonWorkspaceGrant(h),f;let a=(p.json?.controls??[]).slice().sort((d,m)=>d.seq-m.seq);for(let d of a){if(d.seq<=f)continue;if(f=d.seq,d.kind===pt)return r("vm_hands.workspace_granted",{}),e.agent.grantWorkspace(h),f;return r("vm_hands.workspace_grant_abandoned",{control:/^[a-z][a-z0-9._-]{0,63}$/.test(d.kind)?d.kind:"other"}),e.agent.abandonWorkspaceGrant(h),f}}}catch{return e.agent.abandonWorkspaceGrant(h),f}}async function ve(t){let{fence:o,op:s}=R(t),c=null,h=null,f=e.agent.executorExited(t.claim.attempt_id).then((p)=>(h=p,null));e:for(;;){let p=await Promise.race([f,x(`/operations/${s}/heartbeat`,{...o,control_ack_seq:t.ackSeq,wait_ms:Re})]);if(!p){c="vm_hands_executor_exited",r("vm_hands.executor_exited",{reason:h});break}if(p.status>=300)break;let a=(p.json?.controls??[]).slice().sort((d,m)=>d.seq-m.seq);for(let d of a){if(d.seq<=t.ackSeq)continue;if(d.kind==="operation.cancel"||d.kind==="cancel"){t.ackSeq=d.seq;break e}if(d.kind===dt)try{await ze(t,d.payload??{})}catch(m){if(m instanceof O)throw m;c=m instanceof l?m.code:"environment_unavailable";let k=m&&typeof m==="object"&&"code"in m&&typeof m.code==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(m.code)?m.code:null;r("vm_hands.environment_refused",{code:c,cause:k});break e}t.ackSeq=d.seq}}await Ve(t,c)}async function Fe(t){let o=t,s={claim:o,eventSeq:0},{complete:c,emit:h,fence:f,op:p}={...R(s)},a=t.vm_hands_origin==="person"?"person":"model",d=String(t.capability??"");if(!e.executeOp){await c("failed",{error_code:"vm_hands_op_unsupported"});return}if(t.vm_hands_attest==="accepted"&&n.attest==="pending"&&!(J&&n.attest==="pending")){n.attest="accepted";for(let b of n.attestWaiters.splice(0))b(!0)}if(n.attest!=="accepted"){let b=Date.parse(String(t.lease_until??""))-Date.now()-5000,T=n.attest==="refused"?0:Math.max(0,Math.min(te,Number.isFinite(b)?b:te));if(!(T>0&&await new Promise((D)=>{let Q=setTimeout(()=>D(!1),T);n.attestWaiters.push((Z)=>{clearTimeout(Q),D(Z)})}))){await c("failed",{error_code:"vm_hands_unattested"});return}}let m=e.agent.bindIdForRun(o.run_id);if(a==="model"&&m===null){await c("failed",{error_code:"vm_hands_not_bound"});return}let k=d==="pty.start"&&a==="person"&&!t.authority;if(k&&(e.agent.liveBindIds.length>0||n.bindsStarting>0)){await c("failed",{error_code:"vm_hands_bound"});return}if(xe.has(d)&&!k&&e.agent.liveBindIds.length===0){await c("failed",{error_code:"vm_hands_not_bound"});return}if(a==="model"&&m||xe.has(d)&&!k)e.agent.opServed();let E=new AbortController;oe.add(E);let P,ce=new Promise((b)=>{P=b}),C={abort:E,settled:ce};if(k)n.personTerminals.add(C);if(a==="model"&&m){let b=n.modelOps.get(m)??new Set;b.add(C),n.modelOps.set(m,b),await e.agent.environmentInstalled(m,sn,E.signal)}let U=-1,N=setInterval(()=>{x(`/operations/${p}/heartbeat`,{...f,control_ack_seq:U,wait_ms:0}).then((b)=>{if(b.status>=300){E.abort();return}let T=b.json?.controls??[];for(let w of T)if(U=Math.max(U,w.seq),w.kind==="operation.cancel"||w.kind==="cancel")E.abort()},()=>E.abort())},rn);try{let b=await e.executeOp({kind:a,claim:t,...a==="model"&&m?{bindId:m}:{},signal:E.signal,emit:async(w)=>{await h(w.kind,w.data??{})}}),T=await c(b.status,{...b.result?{result:b.result}:{},...b.error_code?{error_code:De(b.error_code,"vm_hands_op_failed")}:{}});r("vm_hands.op",{capability:d,kind:a,status:b.status,code:b.error_code??null,...T.status>=300?{complete_status:T.status,complete_error:String(T.json?.error??"").slice(0,64)}:{}})}finally{if(clearInterval(N),oe.delete(E),m)n.modelOps.get(m)?.delete(C);n.personTerminals.delete(C),P()}}async function Ve(t,o){let s=t.claim.attempt_id;if(n.turns.get(s)===t)n.turns.delete(s);e.onTurn?.(s,null),ie(t);let c=await z(n,e.agent,s).catch((h)=>Y(h,t,o));if(!c)return;n.receipts.push({turn:t,failure:o,unbound:c}),await X()}function Y(t,o,s){let c=Be(t);return r("vm_hands.unbind_unverified",{operation_id:o.claim.operation_id,code:c,attempt:0}),R(o).emit(jn,{code:c}).catch(()=>{return}),gn(n,e.agent,{turn:o,failure:s},e.signal,r),null}function X(){return de=de.then(we,we),de}async function we(){while(n.receipts.length){let{turn:t,failure:o,unbound:s}=n.receipts[0],{complete:c,emit:h}=R(t);try{if(await h("hands.stopped",{...t.readyData,reason_code:o?"failed":"cancelled",killed_verified:s.killed_verified,shredded:s.shredded,...s.srt_fallbacks?{vm_hands_srt_fallbacks:s.srt_fallbacks}:{}}),o)await c("failed",{error_code:o});else await c("cancelled",{error_code:"driver_stopped"})}catch(f){if(f instanceof O)return}n.receipts.shift()}}async function ze(t,o){let{fence:s,op:c}=R(t),h=o.snapshot_id;if(o.version!==1||typeof h!=="string"||Object.keys(o).length!==2)throw new l("vm_hands_env_invalid","invalid environment delivery");let f=await x(`/operations/${c}/environment`,{...s,snapshot_id:h}),p=f.json?.environment_sealed;if(f.status!==200||!p||f.json?.payload!==void 0)throw new l("vm_hands_env_invalid","environment not delivered sealed");let a=await e.agent.deliverEnvironment({attemptId:t.claim.attempt_id,snapshotId:h,deviceId:n.deviceId??"",sealed:p});if((await x(`/operations/${c}/environment-ack`,{...s,...a})).status>=300)throw new l("vm_hands_env_ack_refused","environment ack refused")}}import{readFileSync as bn}from"fs";var yn=performance.now();delete process.env.BUN_BE_BUN;var j=(e,n={})=>console.log(JSON.stringify({stage:e,ms:Math.round(performance.now()),...n}));async function kn(){if(process.argv.includes("--vm-hands-op-runner")){let{runVmHandsOpRunner:_}=await import("./vm-hands-op-runner-n8p81rwm.js");await _();return}j("parsed",{t0:Math.round(yn)});let e="";try{e=bn(3,"utf8")}catch{}j("fd3_read",{bytes:e.length});let n=null;if(e.trim())try{n=JSON.parse(e)}catch{n=null}if(!n||typeof n!=="object"||Array.isArray(n))j(e.trim()?"identity_invalid":"identity_free"),await new Promise(()=>{setInterval(()=>{return},1073741824)});let{parseVmHandsInit:i,runVmHands:r}=await import("./vm-hands-runtime-bqsz7h0h.js"),g=i(n);if(!g)j("identity_invalid"),await new Promise(()=>{setInterval(()=>{return},1073741824)});try{await r(g,j)}catch(_){let u=_&&typeof _==="object"&&"code"in _&&typeof _.code==="string"?_.code:"error";throw j("failed",{code:u}),_}process.exit(0)}kn();export{wi,Xr,bi};
|
|
2
|
+
import"./vm-hands-entry-lite-37hvds7z.js";import"./vm-hands-entry-lite-tytfs183.js";import"./vm-hands-entry-lite-q8wkrzer.js";import{wl as B}from"./vm-hands-entry-lite-ejkba2nk.js";import{readFileSync as J}from"fs";var G=performance.now();delete process.env.BUN_BE_BUN;var z=(q,b={})=>console.log(JSON.stringify({stage:q,ms:Math.round(performance.now()),...b}));async function K(){if(process.argv.includes("--vm-hands-op-runner")){let{runVmHandsOpRunner:j}=await import("./vm-hands-op-runner-fn1qph82.js");await j();return}z("parsed",{t0:Math.round(G)});let q="";try{q=J(3,"utf8")}catch{}z("fd3_read",{bytes:q.length});let b=null;if(q.trim())try{b=JSON.parse(q)}catch{b=null}if(!b||typeof b!=="object"||Array.isArray(b))z(q.trim()?"identity_invalid":"identity_free"),await new Promise(()=>{setInterval(()=>{return},1073741824)});let{parseVmHandsInit:C,runVmHands:D}=await import("./vm-hands-runtime-8vt9etvv.js"),A=C(b);if(!A)z("identity_invalid"),await new Promise(()=>{setInterval(()=>{return},1073741824)});try{await D(A,z)}catch(j){let E=j&&typeof j==="object"&&"code"in j&&typeof j.code==="string"?j.code:"error";throw z("failed",{code:E}),j}process.exit(0)}K();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{a as fq,b as Iq,c as Aq,d as Cq}from"./vm-hands-entry-lite-4gh5kfr4.js";import{$b as wq,Ic as Pq,Oc as Rq,oc as Nq}from"./vm-hands-entry-lite-fpp2bs9y.js";import"./vm-hands-entry-lite-vsa7t6m9.js";import"./vm-hands-entry-lite-j2ng164q.js";import"./vm-hands-entry-lite-2m5dwrdf.js";import"./vm-hands-entry-lite-f5xb489y.js";import"./vm-hands-entry-lite-tytfs183.js";import"./vm-hands-entry-lite-ntx8fdyq.js";import"./vm-hands-entry-lite-agsp101y.js";import"./vm-hands-entry-lite-9qep7pka.js";import"./vm-hands-entry-lite-28s7v15d.js";import"./vm-hands-entry-lite-xp3qzxk5.js";import"./vm-hands-entry-lite-26q3hbdc.js";import"./vm-hands-entry-lite-4k4h9rcq.js";import"./vm-hands-entry-lite-714wspqb.js";import"./vm-hands-entry-lite-6nwbqg37.js";import"./vm-hands-entry-lite-feybcq63.js";import"./vm-hands-entry-lite-d98m00b8.js";import"./vm-hands-entry-lite-q8wkrzer.js";import"./vm-hands-entry-lite-v4jtxgaj.js";import"./vm-hands-entry-lite-gxper06w.js";import"./vm-hands-entry-lite-6y6pz2yw.js";import"./vm-hands-entry-lite-0k13wmzm.js";import"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.js";import{spawn as yq}from"child_process";import{chmodSync as mq,chownSync as uq,existsSync as p,lstatSync as qq,mkdirSync as i,mkdtempSync as lq,readdirSync as o,readFileSync as f,realpathSync as cq,rmdirSync as Xq,rmSync as pq,writeFileSync as c}from"fs";import{join as L}from"path";import{readFileSync as Gq,readlinkSync as Jq}from"fs";import{relative as gq}from"path";var Kq=16;function Yq(X){return X.replace(/\\([0-7]{3})/g,($,W)=>String.fromCharCode(Number.parseInt(W,8)))}function Eq(X){let $=[];for(let W of X.split(`
|
|
3
|
+
`)){let q=W.split(" ");if(q.length<10||!/^\d+:\d+$/.test(q[2]))continue;$.push({device:q[2],root:Yq(q[3]),mountPoint:Yq(q[4])})}return $}function Sq(X,$,W){let q=X.replace(/\/+$/,"")||"/",J=(j)=>q==="/"||j===q||j.startsWith(`${q}/`),G=(j)=>new Map(Eq(j).filter((N)=>J(N.mountPoint)).map((N)=>[`${N.mountPoint}\x00${N.device}\x00${N.root}`,N.mountPoint])),K=G($),U=G(W),M=(j)=>gq(q,j)||".",I=[...K].filter(([j])=>!U.has(j)).map(([,j])=>M(j)),C=[...U].filter(([j])=>!K.has(j)).map(([,j])=>M(j));return{missing:I,extra:C,referenceCount:K.size,ownCount:U.size}}function Bq(X,$,W,q="/proc"){let J,G,K=null;try{J=Gq(`${q}/1/mountinfo`,"utf8"),G=Gq(`${q}/self/mountinfo`,"utf8")}catch(N){let V=N&&typeof N==="object"&&"code"in N&&typeof N.code==="string"?N.code:"unreadable";$("vm_hands.mount_check_unavailable",{code:V});return}try{K=Jq(`${q}/1/ns/mnt`)===Jq(`${q}/self/ns/mnt`)}catch{}let{missing:U,extra:M,referenceCount:I,ownCount:C}=Sq(X,J,G),j={reference_count:I,own_count:C,missing_count:U.length,extra_count:M.length,same_namespace:K};if(M.length)$("vm_hands.mount_extra",{...j,extra:M.slice(0,Kq)});if(U.length)throw $("vm_hands.mount_mismatch",{...j,missing:U.slice(0,Kq)}),W(`${U.length} mount(s) under the Session root are missing from vm-hands' namespace`)}var bq="/sys/fs/cgroup/reason-payload",H="vm-hands",aq="/run/ara-srt/fallbacks.jsonl",u="/reason-person",tq="surface",Zq=5000,dq=1e4,Lq="__VM_HANDS_PROOF_DIR__",sq="__VM_HANDS_PROBE_NONCE__";class D extends Error{code;constructor(X,$){super($);this.code=X}}function iq(X,$){if(!/^[0-9a-f-]{36}$/i.test($))throw new D("vm_hands_bind_invalid","bad bind id");return L(X,H,`b-${$.toLowerCase()}`)}var nq=5000,Oq=(X)=>`'${X.replaceAll("'","'\\''")}'`;function LX(X){let $=X.cgroup??bq,W=X.init.layout.payload_uid,q=X.log??(()=>{}),J=new Map,G=new Map,K=0,U=()=>{try{let Z=f("/run/ara-srt/starts.jsonl","utf8"),z=Z.slice(K>Z.length?0:K).split(`
|
|
4
|
+
`).filter(Boolean);K=Z.length;let Y=z.map((T)=>{try{return Number(JSON.parse(T).elapsed_ms)||0}catch{return 0}});if(Y.length)q("vm_hands.srt_server_starts",{count:Y.length,elapsed_ms:Y.slice(0,8)})}catch{}},M=null,I=!1,C=X.srtCgroup??"/sys/fs/cgroup/reason-srt",j=()=>{M??=Uq()},N=0,V=()=>{try{let Z=f(aq,"utf8"),z=Z.slice(N>Z.length?0:N);N=Z.length;let Y=z.split(`
|
|
5
|
+
`).filter(Boolean).slice(0,1000);if(!Y.length)return null;let T={},F=0;for(let P of Y)try{let w=JSON.parse(P),B=typeof w.code==="string"&&/^[a-z_]{1,40}$/.test(w.code)?w.code:"other";if(T[B]=(T[B]??0)+1,typeof w.elapsed_ms==="number")F=Math.max(F,w.elapsed_ms)}catch{T.unparsed=(T.unparsed??0)+1}return q("vm_hands.srt_fallbacks",{count:Y.length,codes:T,max_elapsed_ms:F}),{count:Y.length,codes:T,max_elapsed_ms:F}}catch{return null}},b=!1,v=(Z,z,Y)=>{if(b)throw Error("vm_hands_pool_held");return l(Z,z,Y)},E=(Z)=>(z,Y,T)=>yq("/bin/sh",["-c",`echo $$ > ${Oq(L(Z,"cgroup.procs"))} || exit 125; exec "$@"`,"vm-hands-join",z,...Y],T),l=E(L($,H)),S=L($,H,"probe"),y=(Z)=>iq($,Z),hq=(Z)=>{let z=y(Z);try{i(z,{mode:493})}catch(Y){if(!(Y&&typeof Y==="object"&&("code"in Y)&&Y.code==="EEXIST"))throw new D("vm_hands_bind_failed","bind cgroup")}return z},_q=(Z)=>{try{Xq(y(Z))}catch{}},h=X.prespawn?Nq({spawnProcess:v,...X.relayDependencies?.sourceEntrypoint?{sourceEntrypoint:X.relayDependencies.sourceEntrypoint}:{},log:(Z,z)=>q(Z,z??{})}):null;h?.arm();let e=h?setInterval(()=>{h.arm()},nq):null;e?.unref?.();async function a(Z){let z=J.get(Z);if(J.delete(Z),!z)return;z.abort.abort(),await z.done}return{bindCgroup:y,async startExecutor(Z){if(j(),G.set(Z.bindId,Uq()),I=!0,!Z.claim)throw new D("vm_hands_bind_invalid","an executor needs the claim it serves");await a(Z.bindId);let{claim:z,bindId:Y}=Z,T=hq(Y),F=z.owner;if(!F||typeof F.device_id!=="string"||typeof z.root_id!=="string")throw new D("vm_hands_bind_invalid","claim without its owner Device or root");let P=new AbortController,w,B,O=new Promise((Q,R)=>{w=Q,B=R}),_,A=new Promise((Q)=>{_=Q}),m=Rq({headless:!0,hostExecution:!0,runtimeDirectory:X.runtimeDirectory,deviceIdentity:{deviceId:F.device_id,rootId:z.root_id,apiOrigin:X.apiOrigin},claimOwner:z.owner,root:X.root,runId:z.run_id,operationId:z.operation_id,attemptId:z.attempt_id,payload:Object.fromEntries(Object.entries(z.payload).filter(([Q])=>!Q.startsWith("vm_hands_"))),signal:P.signal,...Z.workspaceGrant?{workspaceGrant:Z.workspaceGrant}:{},emitEvent:async(Q,R)=>{if(Q==="hands.ready"){w(R);return}if(Q==="hands.started"||Q==="hands.stopped"||Q==="hands.failed")return;await X.forward(Y,Q,R)}},{...X.relayDependencies,spawnWorker:(Q)=>E(T)(Q.command,Q.args,Q.options),...h?{takePrespawnedWorker:(Q)=>{let R=h.take(Q);if(!R?.pid)return R;try{return c(L(T,"cgroup.procs"),String(R.pid)),R}catch{try{R.kill("SIGKILL")}catch{}return null}},adoptSpawnedWorker:h.adopt}:{}}).then(()=>{_("executor_stopped")},(Q)=>{let R=Q&&typeof Q==="object"&&"code"in Q?String(Q.code):"executor_failed";B(new D(R,Q instanceof Error?Q.message:String(Q))),_(R)}).finally(()=>B(new D("vm_hands_executor_exited","executor ended before it was ready")));J.set(Y,{abort:P,done:m,exited:A,operationId:z.operation_id,runId:z.run_id,expiresAtMs:Date.parse(String(z.payload.expires_at??""))||0});let k=await O,t=k.executor_launch_id;if(typeof t!=="string")throw new D("vm_hands_bind_failed","executor ready without a launch id");return{launchId:t,readyData:k,applied:{hands_confinement:typeof z.payload.hands_confinement==="string"?z.payload.hands_confinement:null,browser_egress:z.payload.browser_egress??null}}},takeSrtFallbacks:V,executorExited(Z){return J.get(Z)?.exited??new Promise(()=>{})},freezeBind(Z){let z=y(Z);if(p(L(z,"cgroup.freeze")))c(L(z,"cgroup.freeze"),"1")},async killAndVerifyPayload(Z){let z=new Set(Z?.keep??[]);if(z.size||Z?.own)return kq(Z?.bindId??null,z,Z?.own===!0);b=!0;let Y=jq();try{await Dq();let T=Promise.all([...J.keys()].map((B)=>a(B).catch(()=>{return})));U();let F=Date.now()+Zq;await d($,F,"payload"),await T;let P=(I||X.srtWarmLate?.()===!0)&&p(L(C,"cgroup.events"));if(P)await d(C,F,"srt");let w=Qq(W).filter((B)=>!x(B,u));if(M!==null){let B=$q(M).filter((O)=>O!==process.pid&&!x(O,u));if(B.length)throw q("vm_hands.kill_strays",{strays:s(B)}),new D("vm_hands_kill_unverified",`${B.length} process(es) the run started survived it`);M=null}if(I=!1,P)X.onSrtReset?.();if(w.length)throw q("vm_hands.kill_survivors",{pids:w.slice(0,16)}),new D("vm_hands_kill_unverified",`${w.length} payload-uid process(es) outside the payload cgroup`);G.clear();for(let B of Wq())try{Xq(L($,H,B))}catch{}}finally{b=!1,Y()}if(h)setTimeout(()=>{if(!J.size)h.arm()},100).unref?.()},async killProbe(){let Z=Date.now()+Zq;if(p(L(S,"cgroup.events"))){await d(S,Z,"probe");try{Xq(S)}catch{}}let z=zq(process.pid);if(z===null)throw new D("vm_hands_kill_unverified","agent start time unreadable");await oq($,z,Z);let Y=(F)=>{let P=zq(F);return P!==null&&P<=z},T=Qq(W).filter((F)=>Y(F)&&!x(F,u));if(T.length)throw q("vm_hands.kill_survivors",{pids:T.slice(0,16),at:"attest"}),new D("vm_hands_kill_unverified",`${T.length} payload-uid process(es) from before this agent`);if(M!==null){let F=[$,L($,H)].map((B)=>B.replace(/^\/sys\/fs\/cgroup/,"")),P=C.replace(/^\/sys\/fs\/cgroup/,""),w=$q(M).filter((B)=>B!==process.pid&&!x(B,u)&&!x(B,"/reason-vm-hands")&&!x(B,P)&&!F.some((O)=>Tq(B,O)));if(w.length&&I)throw q("vm_hands.kill_strays",{strays:s(w),at:"attest"}),new D("vm_hands_kill_unverified",`${w.length} process(es) the run started survived it`);if(w.length)q("vm_hands.attest_concurrent",{processes:s(w),count:w.length});M=null}},async runProbe({nonce:Z,script:z}){if(j(),!z.includes(Lq))throw new D("vm_hands_probe_failed","probe names no proof directory");let Y=X.proofParent??"/tmp/reason-vm-hands-proof";i(Y,{mode:457,recursive:!0});let T=qq(Y);if(T.isSymbolicLink()||!T.isDirectory()||T.uid!==(process.getuid?.()??-1)||(T.mode&4095)!==457)throw new D("vm_hands_probe_failed","proof parent is not root's 0711 directory");let F=lq(L(Y,"p-")),P=!1;try{if(!/^[A-Za-z0-9/._-]+$/.test(F)||!/^[A-Za-z0-9_-]{1,128}$/.test(Z))throw new D("vm_hands_probe_failed","proof directory path or nonce");uq(F,W,W),mq(F,448);let w=qq(F).ino;try{i(S,{mode:493})}catch(A){if(!(A&&typeof A==="object"&&("code"in A)&&A.code==="EEXIST"))throw new D("vm_hands_probe_failed","probe cgroup")}let B=E(S)("/bin/bash",["-c",z.replaceAll(Lq,F).replaceAll(sq,Z)],{cwd:"/",env:{PATH:"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},stdio:["ignore","pipe","ignore"]}),O="";B.stdout?.on("data",(A)=>{if(O.length<16384)O+=A.toString("utf8").slice(0,16384-O.length)});let _=await new Promise((A)=>{let m=setTimeout(()=>{P=!0,B.kill("SIGKILL"),A(124)},dq);B.once("error",()=>{clearTimeout(m),A(127)}),B.once("close",(k)=>{clearTimeout(m),A(k??1)})});return q("vm_hands.probe",{nonce_len:Z.length,exit_code:_}),{exitCode:_,markers:O,proofDirInode:w}}finally{if(!P)pq(F,{recursive:!0,force:!0})}},restatLayout(){let{session_root:Z,alias:z}=X.init.layout,Y="invalid";try{Pq(Z),Y="0:0:755"}catch{}let T=!1,F=-1;try{let P=qq(z);F=P.uid,T=Y==="0:0:755"&&z===L(Z,"repo")&&!P.isSymbolicLink()&&P.isDirectory()&&cq(z)===z&&P.uid===W}catch{}return{root_mode:Y,alias_ok:T,owner_uid:F}},verifyMounts(){Bq(X.init.layout.session_root,q,(Z)=>new D("vm_hands_mount_mismatch",Z))},installEnvironment(Z,z){let Y=J.get(Z);if(!Y)throw new D("environment_unavailable","no executor owns an environment");return wq({root:X.root,operationId:Y.operationId,payload:z}).installed_revision},async stop(){if(e)clearInterval(e);h?.close(),await Promise.all([...J.keys()].map((Z)=>a(Z)))}};function Wq(){try{return o(L($,H),{withFileTypes:!0}).filter((Z)=>Z.isDirectory()&&/^b-[0-9a-f-]{36}$/.test(Z.name)).map((Z)=>Z.name)}catch{return[]}}async function kq(Z,z,Y=!1){let T=new Set([...z].map((P)=>P.toLowerCase())),F=jq();try{await Dq();let P=Date.now()+Zq,w=new Set(Wq().filter((Q)=>!T.has(Q.slice(2))).map((Q)=>Q.slice(2)));if(Z)w.add(Z.toLowerCase());let B=null;for(let Q of w){let R=a(Q).catch(()=>{return}),r=G.get(Q);if(r!==void 0)B=B===null?r:Math.min(B,r);if(p(L(y(Q),"cgroup.events")))await d(y(Q),P,"bind");await R}let O=[...T].map((Q)=>y(Q).replace(/^\/sys\/fs\/cgroup/,"")),_=[$,L($,H)].map((Q)=>Q.replace(/^\/sys\/fs\/cgroup/,"")),A=C.replace(/^\/sys\/fs\/cgroup/,""),m=(Q)=>x(Q,u)||O.some((R)=>x(Q,R)),k=Y?[]:Qq(W).filter((Q)=>!m(Q));if(k.length)throw q("vm_hands.kill_survivors",{pids:k.slice(0,16),beside:T.size}),new D("vm_hands_kill_unverified",`${k.length} payload-uid process(es) outside a live bind`);let t=(Q)=>!m(Q)&&!x(Q,"/reason-vm-hands")&&!x(Q,A)&&!_.some((R)=>Tq(Q,R));if(B!==null){let Q=$q(B).filter((R)=>R!==process.pid&&t(R));if(Q.length)throw q("vm_hands.kill_strays",{strays:s(Q),beside:T.size}),new D("vm_hands_kill_unverified",`${Q.length} process(es) the run started survived it`)}for(let Q of w)G.delete(Q),_q(Q)}finally{F()}}}function zq(X,$="/proc"){try{let W=f(L($,String(X),"stat"),"utf8"),q=Number(W.slice(W.lastIndexOf(")")+2).split(" ")[19]);return Number.isFinite(q)?q:null}catch{return null}}function vq(X,$="/proc"){try{let W=f(L($,String(X),"stat"),"utf8"),q=Number(W.slice(W.lastIndexOf(")")+2).split(" ")[1]);return Number.isFinite(q)?q:null}catch{return null}}async function oq(X,$,W){try{c(L(X,"cgroup.freeze"),"1")}catch(q){throw new D("vm_hands_kill_unverified",`payload cgroup.freeze: ${q instanceof Error?q.message:String(q)}`)}try{for(;;){let q=xq(X).filter((G)=>Vq(G,X)),J=new Set(q.filter((G)=>{let K=zq(G);return K!==null&&K<=$}));for(let G=!0;G;){G=!1;for(let K of q){if(J.has(K))continue;let U=vq(K);if(U!==null&&J.has(U))J.add(K),G=!0}}if(J.size===0)return;if(Date.now()>W)throw new D("vm_hands_kill_unverified",`${J.size} previous-boot process(es) survived`);for(let G of J)try{process.kill(G,"SIGKILL")}catch{}await new Promise((G)=>setTimeout(G,10))}}finally{try{c(L(X,"cgroup.freeze"),"0")}catch{}}}function Tq(X,$,W="/proc"){try{return f(L(W,String(X),"cgroup"),"utf8").split(`
|
|
6
|
+
`).find((J)=>J.startsWith("0::"))?.slice(3)===$}catch{return!1}}function x(X,$,W="/proc"){try{let J=f(L(W,String(X),"cgroup"),"utf8").split(`
|
|
7
|
+
`).find((G)=>G.startsWith("0::"))?.slice(3)??"";return J===$||J.startsWith(`${$}/`)}catch{return!1}}var eq=100;function Uq(){try{return Math.floor(Number(f("/proc/uptime","utf8").split(" ")[0])*eq)}catch{return 0}}async function d(X,$,W){try{c(L(X,"cgroup.freeze"),"1")}catch(q){throw new D("vm_hands_kill_unverified",`${W} cgroup.freeze: ${q instanceof Error?q.message:String(q)}`)}while(!/^populated 0$/m.test(f(L(X,"cgroup.events"),"utf8"))){if(Date.now()>$)throw new D("vm_hands_kill_unverified",`${W} cgroup still populated (left frozen)`);for(let q of xq(X)){if(!Vq(q,X))continue;try{process.kill(q,"SIGKILL")}catch{}}await new Promise((q)=>setTimeout(q,10))}try{c(L(X,"cgroup.freeze"),"0")}catch(q){throw new D("vm_hands_kill_unverified",`${W} cgroup thaw: ${q instanceof Error?q.message:String(q)}`)}}function Vq(X,$){let W=$.replace(/^\/sys\/fs\/cgroup/,"")||"/",q="";try{q=f(`/proc/${X}/cgroup`,"utf8").split(`
|
|
8
|
+
`).find((G)=>G.startsWith("0::"))??""}catch{return!1}let J=q.slice(3);return J===W||J.startsWith(`${W}/`)}function xq(X){let $=[],W=(q)=>{try{for(let G of f(L(q,"cgroup.procs"),"utf8").split(`
|
|
9
|
+
`))if(/^\d+$/.test(G))$.push(Number(G))}catch{}let J=[];try{J=o(q,{withFileTypes:!0}).filter((G)=>G.isDirectory()).map((G)=>G.name)}catch{}for(let G of J)W(L(q,G))};return W(X),$}function s(X,$="/proc"){return X.slice(0,16).map((W)=>{let q="?",J="?";try{q=f(L($,String(W),"comm"),"utf8").trim().slice(0,32)}catch{}try{J=(f(L($,String(W),"cgroup"),"utf8").split(`
|
|
10
|
+
`).find((G)=>G.startsWith("0::"))??"").slice(3,120)}catch{}return{pid:W,comm:q,ppid:vq(W,$),cgroup:J}})}function $q(X,$="/proc"){let W=[];for(let q of o($)){if(!/^\d+$/.test(q))continue;let J;try{J=f(L($,q,"stat"),"utf8")}catch{continue}let G=J.slice(J.lastIndexOf(")")+2).split(" "),K=Number(G[1]),U=Number(G[6]),M=Number(G[19]);if(!((U&2097152)!==0||K===2||q==="2")&&G[0]!=="Z"&&M>=X)W.push(Number(q))}return W}function Qq(X,$="/proc"){let W=[];for(let q of o($)){if(!/^\d+$/.test(q))continue;let J;try{J=f(L($,q,"status"),"utf8")}catch{continue}let G=/^Uid:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/m.exec(J);if(G&&G.slice(1).some((K)=>Number(K)===X))W.push(Number(q))}return W}function Fq(X="/proc/sys/kernel/yama/ptrace_scope"){try{return Number(f(X,"utf8").trim())>=1}catch{return!1}}var g=0,Hq=[],n=new Set;function jq(){g++;let X=!1;return()=>{if(X)return;if(X=!0,--g===0)for(let $ of Hq.splice(0))$()}}function rq(){return g===0?Promise.resolve():new Promise((X)=>{Hq.push(X)})}async function Mq(){while(g>0)await rq()}async function Dq(){let X=Date.now()+1000;while(n.size&&Date.now()<X)await new Promise(($)=>setTimeout($,2))}function qX(X,$){let W=$.replace(/^\/sys\/fs\/cgroup/,"");n.add(X);let q=()=>{let J="";try{J=f(`/proc/${X}/cgroup`,"utf8").split(`
|
|
11
|
+
`).find((G)=>G.startsWith("0::"))??""}catch{n.delete(X);return}if(J.slice(3)===W){n.delete(X);return}setTimeout(q,1)};q()}function TX(X){let $={person:X.personCgroup??L("/sys/fs/cgroup",u,H),model:X.payloadCgroup??L(bq,H),surface:X.surfaceCgroup??L("/sys/fs/cgroup",u,H,tq)},W=X.entry??process.argv[1]??"",q={},J=(K)=>K.startsWith("model:")&&X.bindCgroup?X.bindCgroup(K.slice(6)):$[K.startsWith("model")?"model":K==="surface"?"surface":"person"],G=(K)=>{let U=K.startsWith("model")?"model":K==="surface"?"surface":"person",M=new Map,I=String(X.payloadUid),C=String(X.payloadGid);if(U==="surface")try{i(J(K),{mode:493})}catch{}let j=U==="surface"?'exec "$@"':`exec /usr/bin/setpriv --no-new-privs --reuid=${I} --regid=${C} --clear-groups -- "$@"`,N=Bun.spawn(["/bin/sh","-c",`echo $$ > ${Oq(L(J(K),"cgroup.procs"))} || exit 125; ${j}`,"vm-hands-op-join",process.execPath,"--no-install",W,"--vm-hands-op-runner",...U==="person"?[fq]:[],...U==="surface"?[Iq,`${Aq}${I}`,`${Cq}${X.surfaceDirectory??""}`]:[]],{cwd:"/",env:{PATH:process.env.PATH??"/usr/bin:/bin",BUN_BE_BUN:"1",HOME:U==="surface"?process.env.HOME||"/root":"/home/runner",...p("/bin/bash")?{SHELL:"/bin/bash"}:{}},stdio:["ignore","ignore","ignore"],ipc(b){let v=b;if(U==="surface"&&v.t==="readiness"){let l=b;X.log?.("vm_hands.surface_ready",{lanes:Object.keys(l.lanes??{}).filter((S)=>l.lanes[S]===!0),display_video:l.display_video===!0}),X.onSurfaceReadiness?.(l);return}let E=M.get(v.id);if(!E)return;if(v.t==="event"&&v.event)E.onEvent(v.event);if(v.t==="done")M.delete(v.id),E.done(v.completion??{status:"failed",error_code:"vm_hands_op_failed"})}});N.exited.then((b)=>{if(q[K]?.child===N)delete q[K];for(let[,v]of M)v.done({status:"failed",error_code:"vm_hands_op_runner_exited"});if(M.clear(),X.log?.("vm_hands.op_runner_exited",{kind:U,code:b}),U==="surface")X.onSurfaceReadiness?.(null)}),qX(N.pid,J(K));let V={child:N,pending:M};return q[K]=V,V};return{run(K,U,M,I,C){if(!Fq())return Promise.resolve({status:"failed",error_code:"vm_hands_ptrace_unprotected"});let j=K==="model"&&C&&X.bindCgroup?`model:${C.toLowerCase()}`:K,N=async()=>{while(!q[j]&&g>0)await Mq()};return N().then(async()=>{if(!q[j]&&g>0)await N()}).then(()=>new Promise((V)=>{if(!q[j]&&g>0){V({status:"failed",error_code:"vm_hands_op_runner_unavailable"});return}let b=q[j]??G(j);b.pending.set(U.id,{onEvent:M,done:V}),I.addEventListener("abort",()=>{try{b.child.send({t:"cancel",id:U.id})}catch{}},{once:!0});try{b.child.send({t:"op",...U})}catch{b.pending.delete(U.id),V({status:"failed",error_code:"vm_hands_op_runner_unavailable"})}}))},warm(K){if(!q[K]&&Fq())Mq().then(()=>{if(!q[K]&&g===0)G(K)})},notify(K,U){let M=q[K];if(!M)return!1;try{return M.child.send(U),!0}catch{return!1}},stop(){for(let K of Object.keys(q))q[K]?.child.kill()}}}export{iq as vmHandsBindCgroup,xq as subtreePids,Fq as ptraceProtected,$q as processesStartedSince,Qq as payloadUidProcesses,x as inCgroup,s as describeProcesses,TX as createVmHandsOpRunners,LX as createVmHandsExecutor,D as VmHandsExecutorError,tq as VM_HANDS_SURFACE_JOIN,Lq as VM_HANDS_PROOF_DIR_TOKEN,sq as VM_HANDS_PROBE_NONCE_TOKEN,u as VM_HANDS_PERSON_CGROUP,H as VM_HANDS_PAYLOAD_JOIN,bq as VM_HANDS_PAYLOAD_CGROUP};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{a,b,c,d,e,f,g}from"./vm-hands-entry-lite-4gh5kfr4.js";import"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.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};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{e as y}from"./vm-hands-entry-lite-4gh5kfr4.js";import{Ea as n,Fa as i,Ga as t}from"./vm-hands-entry-lite-37hvds7z.js";import{ff as o}from"./vm-hands-entry-lite-tytfs183.js";import"./vm-hands-entry-lite-q8wkrzer.js";import"./vm-hands-entry-lite-magmzx9c.js";import{wl as F}from"./vm-hands-entry-lite-ejkba2nk.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-g29vt13t.js"),import("./hands-worker-source-y64axsw3.js"),import("./network-contract-gprc37sw.js"),import("./device-workspace-3jxhs54b.js")]),{REASON_HANDS_PROTOCOL_VERSION:Y}=await import("./reason-hands-protocol-jsrkawe2.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-0q0arpzk.js"),import("./worker-sandbox-z0t69av8.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-epyhpjv3.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:()=>{throw Error("replaced below")},verifyMounts:()=>{throw Error("replaced below")},installEnvironment:()=>{throw Error("replaced below")},executorExited:(j)=>O?O(j):new Promise(()=>{}),takeSrtFallbacks:()=>null};V.then((j)=>{g.restatLayout=()=>j.restatLayout(),g.verifyMounts=()=>j.verifyMounts(),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-tdzbqmrb.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-epyhpjv3.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-tdzbqmrb.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};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{y as a}from"./vm-hands-entry-lite-f3wh0dza.js";import"./vm-hands-entry-lite-j2ng164q.js";import"./vm-hands-entry-lite-gxper06w.js";import"./vm-hands-entry-lite-6y6pz2yw.js";import"./vm-hands-entry-lite-0k13wmzm.js";import"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{a as probeWorkerPreview};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{z as a}from"./vm-hands-entry-lite-pp7jfqzr.js";import"./vm-hands-entry-lite-s9xf5z69.js";import"./vm-hands-entry-lite-2m5dwrdf.js";import"./vm-hands-entry-lite-d2w8tghq.js";import"./vm-hands-entry-lite-714wspqb.js";import"./vm-hands-entry-lite-gxper06w.js";import"./vm-hands-entry-lite-6y6pz2yw.js";import"./vm-hands-entry-lite-0k13wmzm.js";import"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{a as configureWorkerSandbox};
|
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{R,Vo,Eo}from"./vm-hands-entry-lite-zg36myyf.js";import"./vm-hands-entry-lite-ckv17tn8.js";import"./vm-hands-entry-lite-t7an5zg2.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-9ay6f56v.js";import"./vm-hands-entry-lite-m11j0f9q.js";export{R as ApiError,Eo as ReasonApi,Vo as createMachineEnrollmentTicketWithToken};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{yi,vo,So,Wo}from"./vm-hands-entry-lite-1cwqa4jr.js";import"./vm-hands-entry-lite-zg36myyf.js";import"./vm-hands-entry-lite-ckv17tn8.js";import"./vm-hands-entry-lite-t7an5zg2.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-9ay6f56v.js";import"./vm-hands-entry-lite-m11j0f9q.js";export{yi as apiOriginFromEnvironment,vo as environmentApiKey,Wo as requireApiCredentials,So as resolveApiCredentials};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Ke,jo,Uo,Ho}from"./vm-hands-entry-lite-grtycq6y.js";import"./vm-hands-entry-lite-vrqzr15t.js";import"./vm-hands-entry-lite-1cwqa4jr.js";import"./vm-hands-entry-lite-zg36myyf.js";import"./vm-hands-entry-lite-kq0qmsw8.js";import"./vm-hands-entry-lite-2wvsyggd.js";import"./vm-hands-entry-lite-463m6ejk.js";import"./vm-hands-entry-lite-9c95p6n9.js";import"./vm-hands-entry-lite-b885gwfh.js";import"./vm-hands-entry-lite-88swf2qr.js";import"./vm-hands-entry-lite-09m2cdkw.js";import"./vm-hands-entry-lite-ab2m9erf.js";import"./vm-hands-entry-lite-qxchbbew.js";import"./vm-hands-entry-lite-ewwx4fr3.js";import"./vm-hands-entry-lite-1rtkf2xm.js";import"./vm-hands-entry-lite-q0k6kx6d.js";import"./vm-hands-entry-lite-bdhjpv7g.js";import"./vm-hands-entry-lite-22kfyvnk.js";import"./vm-hands-entry-lite-f5e3dbgk.js";import"./vm-hands-entry-lite-cc2tgsqp.js";import"./vm-hands-entry-lite-qysyf65v.js";import"./vm-hands-entry-lite-ckv17tn8.js";import"./vm-hands-entry-lite-t7an5zg2.js";import"./vm-hands-entry-lite-2wgdvb15.js";import"./vm-hands-entry-lite-eqgj4acy.js";import"./vm-hands-entry-lite-2hvbgp1n.js";import"./vm-hands-entry-lite-rwxbhwky.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-k278g9kj.js";import"./vm-hands-entry-lite-gvwdy3rf.js";import"./vm-hands-entry-lite-9ay6f56v.js";import"./vm-hands-entry-lite-m11j0f9q.js";export{jo as computerDisconnected,Ke as connectionDirectory,Uo as connectionReport,Ho as restartConnection};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Ye,xt,gr,dn,_r,pn,hn,fn}from"./vm-hands-entry-lite-ab2m9erf.js";export{Ye as CUSTOM_ENDPOINT_DEVICE_CHUNK_BYTES,gr as CUSTOM_ENDPOINT_DEVICE_MAX_CHUNKS,xt as CUSTOM_ENDPOINT_DEVICE_MAX_RESPONSE_BYTES,dn as CUSTOM_ENDPOINT_DEVICE_TIMEOUT_MS,hn as CustomEndpointDeviceCredentialSchema,pn as CustomEndpointDeviceRequestSchema,_r as customEndpointRequestMatchesConfig,fn as isCustomEndpointDeviceFailureCode};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{ue,Ee,J,xe,de,zt,We,Z,T,H,Hr,qr,zr,Wt,Wr}from"./vm-hands-entry-lite-8t9xssf9.js";export{zr as CLOUD_REPOSITORY_WORKSPACE_ID,Hr as CLOUD_SESSION_CONTROL_BASE,Wt as CLOUD_SESSION_ROOT,Ee as HANDS_WORKSPACE_BASE_KEY,xe as HANDS_WORKSPACE_LAYOUT_KEY,ue as REASON_WORKSPACE_BASE,J as SESSION_WORKSPACE_LAYOUT,de as SESSION_WORKTREES,zt as SESSION_WORKTREE_ID,qr as SIDECHAT_WORKSPACE_ID,Wr as cloudSessionLayoutOfRoot,T as deviceWorkspaceRootRelative,Z as isDeviceWorkspacePath,We as isSessionWorktreePath,H as parseDeviceWorkspace};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{D,O,To,S}from"./vm-hands-entry-lite-9c95p6n9.js";import"./vm-hands-entry-lite-bdhjpv7g.js";import"./vm-hands-entry-lite-22kfyvnk.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-m11j0f9q.js";export{S as REASON_HANDS_WORKER_ARTIFACT_SHA256,O as REASON_HANDS_WORKER_ENTRYPOINT,To as REASON_HANDS_WORKER_SOURCE,D as REASON_HANDS_WORKER_VERSION};
|