@reason-machines/cli-linux-x64 0.2.416 → 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.
Files changed (153) hide show
  1. package/THIRD_PARTY_NOTICES.txt +7 -8
  2. package/bin/reason +2 -2
  3. package/bin/runtime/srt/sandbox-runtime.mjs +52 -52
  4. package/bin/vm-hands/api-credentials-s4897qxy.js +2 -0
  5. package/bin/vm-hands/api-m73x3da5.js +2 -0
  6. package/bin/vm-hands/ask-relay-4kwcx2b7.js +8 -0
  7. package/bin/vm-hands/connect-cli-34b18gjs.js +2 -0
  8. package/bin/vm-hands/custom-endpoint-device-j012b4bd.js +2 -0
  9. package/bin/vm-hands/desktop-account-0q0arpzk.js +2 -0
  10. package/bin/vm-hands/device-workspace-3jxhs54b.js +2 -0
  11. package/bin/vm-hands/hands-worker-source-y64axsw3.js +2 -0
  12. package/bin/vm-hands/index-194s4vz0.js +12818 -0
  13. package/bin/vm-hands/install-receipt-1g68b446.js +2 -0
  14. package/bin/vm-hands/local-automation-k2w46hn2.js +2 -0
  15. package/bin/vm-hands/local-capabilities-tdzbqmrb.js +2 -0
  16. package/bin/vm-hands/local-desktop-users-6thzvydd.js +2 -0
  17. package/bin/vm-hands/local-display-mac-59ma7sxa.js +2 -0
  18. package/bin/vm-hands/local-display-session-4833qq7h.js +2 -0
  19. package/bin/vm-hands/local-display-video-c1143mz6.js +2 -0
  20. package/bin/vm-hands/local-managed-process-mr0zpk7c.js +2 -0
  21. package/bin/vm-hands/local-pty-session-bwarwpsd.js +2 -0
  22. package/bin/vm-hands/managed-runtime-vz1wqwwg.js +2 -0
  23. package/bin/vm-hands/network-contract-gprc37sw.js +2 -0
  24. package/bin/vm-hands/package-ej9snd47.js +2 -0
  25. package/bin/vm-hands/permissions-7sfghef4.js +2 -0
  26. package/bin/vm-hands/reason-hands-protocol-jsrkawe2.js +2 -0
  27. package/bin/vm-hands/serve-service-kngyzh74.js +2 -0
  28. package/bin/vm-hands/status-jz29fb95.js +96 -0
  29. package/bin/vm-hands/version-g29vt13t.js +2 -0
  30. package/bin/vm-hands/vm-hands-entry-lite-0h4qmgm2.js +9 -0
  31. package/bin/vm-hands/vm-hands-entry-lite-0k13wmzm.js +3 -0
  32. package/bin/vm-hands/vm-hands-entry-lite-1exfjv79.js +52 -0
  33. package/bin/vm-hands/vm-hands-entry-lite-26q3hbdc.js +3 -0
  34. package/bin/vm-hands/vm-hands-entry-lite-28s7v15d.js +4 -0
  35. package/bin/vm-hands/vm-hands-entry-lite-2m5dwrdf.js +6 -0
  36. package/bin/vm-hands/vm-hands-entry-lite-37hvds7z.js +5 -0
  37. package/bin/vm-hands/vm-hands-entry-lite-3rqdzqhk.js +112 -0
  38. package/bin/vm-hands/vm-hands-entry-lite-4gh5kfr4.js +3 -0
  39. package/bin/vm-hands/{vm-hands-entry-lite-t7an5zg2.js → vm-hands-entry-lite-4k4h9rcq.js} +2 -2
  40. package/bin/vm-hands/vm-hands-entry-lite-6nwbqg37.js +3 -0
  41. package/bin/vm-hands/{vm-hands-entry-lite-m11j0f9q.js → vm-hands-entry-lite-6y6pz2yw.js} +2 -2
  42. package/bin/vm-hands/vm-hands-entry-lite-714wspqb.js +3 -0
  43. package/bin/vm-hands/vm-hands-entry-lite-7zk0r3p9.js +5 -0
  44. package/bin/vm-hands/vm-hands-entry-lite-9qep7pka.js +4 -0
  45. package/bin/vm-hands/{vm-hands-entry-lite-bdhjpv7g.js → vm-hands-entry-lite-agsp101y.js} +2 -2
  46. package/bin/vm-hands/vm-hands-entry-lite-am6kj1n1.js +3 -0
  47. package/bin/vm-hands/vm-hands-entry-lite-as1tkffn.js +5 -0
  48. package/bin/vm-hands/vm-hands-entry-lite-bxt4n1nj.js +3 -0
  49. package/bin/vm-hands/vm-hands-entry-lite-c2g3wmkp.js +3 -0
  50. package/bin/vm-hands/vm-hands-entry-lite-d2w8tghq.js +3 -0
  51. package/bin/vm-hands/vm-hands-entry-lite-d98m00b8.js +3 -0
  52. package/bin/vm-hands/vm-hands-entry-lite-daxcxjze.js +344 -0
  53. package/bin/vm-hands/vm-hands-entry-lite-dcnyve97.js +3 -0
  54. package/bin/vm-hands/vm-hands-entry-lite-e1b89x66.js +3 -0
  55. package/bin/vm-hands/vm-hands-entry-lite-ej5ffjck.js +105 -0
  56. package/bin/vm-hands/vm-hands-entry-lite-ejkba2nk.js +3 -0
  57. package/bin/vm-hands/vm-hands-entry-lite-f3wh0dza.js +5 -0
  58. package/bin/vm-hands/vm-hands-entry-lite-f5xb489y.js +4 -0
  59. package/bin/vm-hands/vm-hands-entry-lite-feybcq63.js +3 -0
  60. package/bin/vm-hands/vm-hands-entry-lite-fpp2bs9y.js +452 -0
  61. package/bin/vm-hands/{vm-hands-entry-lite-cs5t8eyd.js → vm-hands-entry-lite-fzkfajew.js} +9 -5
  62. package/bin/vm-hands/vm-hands-entry-lite-gt497d5x.js +3 -0
  63. package/bin/vm-hands/vm-hands-entry-lite-gxper06w.js +3 -0
  64. package/bin/vm-hands/vm-hands-entry-lite-j2ng164q.js +9 -0
  65. package/bin/vm-hands/vm-hands-entry-lite-jp9q2vsx.js +127 -0
  66. package/bin/vm-hands/vm-hands-entry-lite-magmzx9c.js +3 -0
  67. package/bin/vm-hands/vm-hands-entry-lite-ntx8fdyq.js +5 -0
  68. package/bin/vm-hands/vm-hands-entry-lite-pfzczmaa.js +4 -0
  69. package/bin/vm-hands/vm-hands-entry-lite-pkc4ry5x.js +539 -0
  70. package/bin/vm-hands/vm-hands-entry-lite-pp7jfqzr.js +3 -0
  71. package/bin/vm-hands/vm-hands-entry-lite-q8wkrzer.js +66 -0
  72. package/bin/vm-hands/vm-hands-entry-lite-s823n1q9.js +3 -0
  73. package/bin/vm-hands/vm-hands-entry-lite-s9xf5z69.js +7 -0
  74. package/bin/vm-hands/vm-hands-entry-lite-tchc7z17.js +128 -0
  75. package/bin/vm-hands/vm-hands-entry-lite-tytfs183.js +42 -0
  76. package/bin/vm-hands/vm-hands-entry-lite-v4jtxgaj.js +4 -0
  77. package/bin/vm-hands/vm-hands-entry-lite-vgpt2n1v.js +11 -0
  78. package/bin/vm-hands/{vm-hands-entry-lite-9c95p6n9.js → vm-hands-entry-lite-vsa7t6m9.js} +54 -54
  79. package/bin/vm-hands/vm-hands-entry-lite-xp3qzxk5.js +3 -0
  80. package/bin/vm-hands/vm-hands-entry-lite.js +1 -3
  81. package/bin/vm-hands/vm-hands-executor-epyhpjv3.js +11 -0
  82. package/bin/vm-hands/vm-hands-op-runner-fn1qph82.js +2 -0
  83. package/bin/vm-hands/vm-hands-runtime-8vt9etvv.js +4 -0
  84. package/bin/vm-hands/worker-preview-readiness-yfjgban2.js +2 -0
  85. package/bin/vm-hands/worker-sandbox-z0t69av8.js +2 -0
  86. package/package.json +1 -1
  87. package/bin/vm-hands/api-cjv8m2zy.js +0 -2
  88. package/bin/vm-hands/api-credentials-m5akr9fv.js +0 -2
  89. package/bin/vm-hands/connect-cli-pcfvh00f.js +0 -2
  90. package/bin/vm-hands/custom-endpoint-device-dkqb4rqy.js +0 -2
  91. package/bin/vm-hands/desktop-account-5v7x0ajx.js +0 -2
  92. package/bin/vm-hands/device-workspace-p9q9dckg.js +0 -2
  93. package/bin/vm-hands/fsevents-ekt70rcc.js +0 -2
  94. package/bin/vm-hands/hands-worker-source-cgrpm21b.js +0 -2
  95. package/bin/vm-hands/index-k8kcz8a3.js +0 -12818
  96. package/bin/vm-hands/install-receipt-7vt2y2vh.js +0 -2
  97. package/bin/vm-hands/local-automation-zj5h05b9.js +0 -2
  98. package/bin/vm-hands/local-capabilities-gkdh1z5z.js +0 -2
  99. package/bin/vm-hands/local-desktop-users-q886k0mm.js +0 -2
  100. package/bin/vm-hands/local-display-mac-w85956f1.js +0 -2
  101. package/bin/vm-hands/local-display-session-m6an1hqp.js +0 -2
  102. package/bin/vm-hands/local-pty-session-5f50sqq0.js +0 -2
  103. package/bin/vm-hands/managed-runtime-esfmzn6z.js +0 -2
  104. package/bin/vm-hands/network-contract-9x9kc5vv.js +0 -2
  105. package/bin/vm-hands/package-78fkast4.js +0 -2
  106. package/bin/vm-hands/permissions-bvfecyb8.js +0 -2
  107. package/bin/vm-hands/reason-hands-protocol-2tnghj3b.js +0 -2
  108. package/bin/vm-hands/serve-service-mr4mkymv.js +0 -2
  109. package/bin/vm-hands/status-7m9d0yek.js +0 -10
  110. package/bin/vm-hands/version-4bsjs55h.js +0 -2
  111. package/bin/vm-hands/vm-hands-entry-lite-09m2cdkw.js +0 -4
  112. package/bin/vm-hands/vm-hands-entry-lite-0xrsph3r.js +0 -3
  113. package/bin/vm-hands/vm-hands-entry-lite-1cwqa4jr.js +0 -3
  114. package/bin/vm-hands/vm-hands-entry-lite-1rrb66r9.js +0 -3
  115. package/bin/vm-hands/vm-hands-entry-lite-1rtkf2xm.js +0 -3
  116. package/bin/vm-hands/vm-hands-entry-lite-22kfyvnk.js +0 -2
  117. package/bin/vm-hands/vm-hands-entry-lite-6aeea05q.js +0 -3
  118. package/bin/vm-hands/vm-hands-entry-lite-6sgfhegd.js +0 -5
  119. package/bin/vm-hands/vm-hands-entry-lite-7n60veqy.js +0 -458
  120. package/bin/vm-hands/vm-hands-entry-lite-88swf2qr.js +0 -6
  121. package/bin/vm-hands/vm-hands-entry-lite-89z488gz.js +0 -3
  122. package/bin/vm-hands/vm-hands-entry-lite-8ns59paz.js +0 -3
  123. package/bin/vm-hands/vm-hands-entry-lite-8t9xssf9.js +0 -3
  124. package/bin/vm-hands/vm-hands-entry-lite-8vfd0kez.js +0 -250
  125. package/bin/vm-hands/vm-hands-entry-lite-907pa7f9.js +0 -65
  126. package/bin/vm-hands/vm-hands-entry-lite-9ay6f56v.js +0 -3
  127. package/bin/vm-hands/vm-hands-entry-lite-ab2m9erf.js +0 -2
  128. package/bin/vm-hands/vm-hands-entry-lite-b885gwfh.js +0 -7
  129. package/bin/vm-hands/vm-hands-entry-lite-ckv17tn8.js +0 -3
  130. package/bin/vm-hands/vm-hands-entry-lite-dqd4p5kw.js +0 -105
  131. package/bin/vm-hands/vm-hands-entry-lite-enah5gv4.js +0 -14
  132. package/bin/vm-hands/vm-hands-entry-lite-eqgj4acy.js +0 -112
  133. package/bin/vm-hands/vm-hands-entry-lite-f5e3dbgk.js +0 -4
  134. package/bin/vm-hands/vm-hands-entry-lite-gvwdy3rf.js +0 -4
  135. package/bin/vm-hands/vm-hands-entry-lite-hj8n59y9.js +0 -3
  136. package/bin/vm-hands/vm-hands-entry-lite-k278g9kj.js +0 -42
  137. package/bin/vm-hands/vm-hands-entry-lite-pgb514h0.js +0 -3
  138. package/bin/vm-hands/vm-hands-entry-lite-pmcz7j7t.js +0 -3
  139. package/bin/vm-hands/vm-hands-entry-lite-q0k6kx6d.js +0 -5
  140. package/bin/vm-hands/vm-hands-entry-lite-qk4kexta.js +0 -9
  141. package/bin/vm-hands/vm-hands-entry-lite-qy9xg6em.js +0 -3
  142. package/bin/vm-hands/vm-hands-entry-lite-qysyf65v.js +0 -2
  143. package/bin/vm-hands/vm-hands-entry-lite-sm5nkxpw.js +0 -540
  144. package/bin/vm-hands/vm-hands-entry-lite-t7n6t3j9.js +0 -2
  145. package/bin/vm-hands/vm-hands-entry-lite-vq14wv7h.js +0 -52
  146. package/bin/vm-hands/vm-hands-entry-lite-vrqzr15t.js +0 -3
  147. package/bin/vm-hands/vm-hands-entry-lite-zg36myyf.js +0 -5
  148. package/bin/vm-hands/vm-hands-entry-lite-zjn2nsth.js +0 -3
  149. package/bin/vm-hands/vm-hands-entry-lite-zybbbegw.js +0 -3
  150. package/bin/vm-hands/vm-hands-executor-a7aqej5n.js +0 -11
  151. package/bin/vm-hands/vm-hands-op-runner-k4n3zrqb.js +0 -2
  152. package/bin/vm-hands/vm-hands-runtime-z6ydmvqc.js +0 -4
  153. package/bin/vm-hands/worker-sandbox-smqj3mbe.js +0 -2
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Hr,qr,zr,Wt}from"./vm-hands-entry-lite-8t9xssf9.js";import{qi,zi,k,kr,Cr,wn,tt,bn,Ar,je,ye,vn,Ue,te,He,we,Lt,Pr,Tr,En}from"./vm-hands-entry-lite-22kfyvnk.js";import{Zt}from"./vm-hands-entry-lite-m11j0f9q.js";import{Dt}from"./vm-hands-entry-lite-bdhjpv7g.js";import{Se}from"./vm-hands-entry-lite-pgb514h0.js";var r=["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 o=String.raw`(function(fs, path) {
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 i=String.raw`import os,sys,json,stat,fcntl,time,ctypes
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 s="a3e39eb55160acfc116fa9871ccc594c68be7a642d2331b24baa707c8f601ec0";import{createHash as I}from"crypto";var H=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 a=Object.freeze({trailingSlashPattern:/\/+$/.source,keyPrefix:"http.",keySuffix:"/.extraheader",valuePrefix:"Authorization: Bearer "});var c=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 St=/^[A-Za-z_][A-Za-z0-9_]*$/;var h=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"]),m=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"]),g=["INFISICAL_","NSC_"],_=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"]),y=["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 t="^(?!(?:"+[...h,...m,..._].join("|")+")$)(?!(?:"+[...g,...y].join("|")+"))"+St.source.slice(1),V=new RegExp(t);var v=["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"],b=["ARA_HANDS_","ARA_DEVICE_","ARA_GIT_BROKER_","REASON_HANDS_","REASON_DEVICE_","REASON_GIT_BROKER_","BUN_"],E="^(?!(?:"+v.join("|")+")$)(?!(?:"+b.join("|")+"))"+t.slice(1),w="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",n="^(?:"+w+"|"+E.slice(1,-1)+")$",R=new RegExp(n);function pr(u){return R.test(u)}var Xe=Object.freeze({tokenPath:"/identity/token",awsPath:"/identity/aws",tokenPattern:/^[A-Za-z0-9_.~-]+$/.source}),W=Object.freeze({variables:256,valueBytes:130816,snapshotBytes:1048576}),Z=Object.freeze({valueChars:16384,snapshotBytes:65536});var l=["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 D=2,O="ara-hands-worker.cjs",d=["/usr/local/go/bin","/opt/node/bin","/usr/local/bin","/usr/sbin","/usr/bin","/sbin","/bin","/usr/local/cargo/bin"],A=d.join(":"),T=["/opt/homebrew/bin",...d].join(":"),P='(platform, linuxPath, macosPath) => platform === "darwin" ? macosPath : linuxPath';var N=String.raw`(function(anchor, pid, native) {
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
- })`,C=String.raw`(function(native) {
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
- })`,x=String.raw`(function(bootstrap) {
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
- })`,To=String.raw`
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(a)};
360
- const GIT_BROKER_CREDENTIAL_HELPER_POLICY = ${JSON.stringify(c)};
361
- const DEVICE_ENVIRONMENT_NAME_RE = new RegExp(${JSON.stringify(n)});
362
- const DEVICE_CLOUD_ACCESS_POLICY = ${JSON.stringify(Xe)};
363
- const DEVICE_ENVIRONMENT_LIMITS = ${JSON.stringify(W)};
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 = ${k};
366
- const WORKER_VERSION = ${D};
367
- const WORKER_ENTRYPOINT = ${JSON.stringify(O)};
368
- const GUEST_MEMORY_UNAVAILABLE_REASONS = ${JSON.stringify(r)};
369
- const sampleGuestMemory = ${o};
370
- const inspectMacPtyMember = ${N};
371
- const probeLinuxPtyLibrary = ${C};
372
- const windowsPtyApi = ${Dt};
373
- const LINUX_PTY_EXEC_SOURCE = ${JSON.stringify(x)};
374
- const CLOSE_CODES = ${JSON.stringify(Tr)};
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 = ${kr};
377
- const MAX_INPUT_CHARS = ${Cr};
378
- const MAX_STRUCTURED_INPUT_CHARS = ${wn};
379
- const MAX_OUTPUT_CHARS = ${tt};
380
- const WORKSPACE_BEFORE_MAX_OUTPUT_CHARS = ${En};
381
- const MAX_ERROR_CHARS = ${bn};
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 = ${Ar};
385
- const MAX_JOB_OUTPUT_CHARS = ${je};
386
- const MAX_JOB_OUTPUT_CHUNKS = ${ye};
387
- const MAX_JOBS = ${vn};
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 = ${Ue};
391
- const MAX_PTY_INPUT_BYTES = ${te};
392
- const MAX_PTY_OUTPUT_BYTES = ${He};
393
- const MAX_PTY_DIMENSION = ${we};
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 ? ${Zt}(require) : null;
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(A)};
496
- const FIXED_MACOS_CLOUD_CHILD_PATH = ${JSON.stringify(T)};
497
- const selectCloudChildPath = ${P};
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(Wt.source)}).exec(config.workRoot);
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(qr.source)}).exec(workspaceId) || [])[1]
584
- ?? (new RegExp(${JSON.stringify(zr.source)}).exec(workspaceId) || [])[1] ?? workspaceId;
585
- return config.jobEnvSourcePath === ${JSON.stringify(Hr)} + "/" + owner + "/job.env";
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(Se)};
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(i)}],
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 > ${Lt}) throw new Error("pty_cleanup_timeout");
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([...l,"new-session -d -s main /bin/bash --noprofile --norc -i","set -g exit-empty on","run-shell -b -d 43200 -C kill-server",""].join(`
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 > ${Lt}) throw new Error("pty_cleanup_timeout");
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")), ${Pr});
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 = "${s}";
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 = "${qi}";
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 <= ${zi} && !value.template.includes("\0")
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();var S=I("sha256").update(To,"utf8").digest("hex");
4180
- export{St,pr,Xe,W,D,O,To,S};
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-k4n3zrqb.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-z6ydmvqc.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,6 +1,6 @@
1
1
  {
2
2
  "name": "@reason-machines/cli-linux-x64",
3
- "version": "0.2.416",
3
+ "version": "0.2.419",
4
4
  "description": "Reason CLI native binary for linux-x64",
5
5
  "os": [
6
6
  "linux"
@@ -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-vq14wv7h.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-6sgfhegd.js";import"./vm-hands-entry-lite-sm5nkxpw.js";import"./vm-hands-entry-lite-7n60veqy.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-cs5t8eyd.js";import"./vm-hands-entry-lite-8vfd0kez.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-dqd4p5kw.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-enah5gv4.js";import"./vm-hands-entry-lite-eqgj4acy.js";import"./vm-hands-entry-lite-qk4kexta.js";import"./vm-hands-entry-lite-t7n6t3j9.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{ds,G,kn}from"./vm-hands-entry-lite-f5e3dbgk.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-8t9xssf9.js";export{ds as configureDesktopAccount,G as desktopAccount,kn as desktopHome};
@@ -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{Fo}from"./vm-hands-entry-lite-0xrsph3r.js";var o;var r=Fo(()=>{o=Error("Cannot find module 'fsevents'");o.code="MODULE_NOT_FOUND";throw o});r();
@@ -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};