@reason-machines/cli-linux-x64 0.2.412 → 0.2.415
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/reason +1 -1
- package/bin/vm-hands/{connect-cli-3tp45n0y.js → connect-cli-d60gmgnx.js} +1 -1
- package/bin/vm-hands/{local-automation-q4cmveg4.js → local-automation-4htjhv65.js} +1 -1
- package/bin/vm-hands/{local-capabilities-3qexhw3v.js → local-capabilities-c04tbapa.js} +1 -1
- package/bin/vm-hands/{local-display-session-8k2g89ys.js → local-display-session-pkz7a5q9.js} +1 -1
- package/bin/vm-hands/{managed-runtime-bfw3gddr.js → managed-runtime-ppypxbh9.js} +1 -1
- package/bin/vm-hands/{permissions-th9fqxn4.js → permissions-xt02c6dh.js} +1 -1
- package/bin/vm-hands/{serve-service-awfke402.js → serve-service-wanptaqv.js} +1 -1
- package/bin/vm-hands/{status-v6qz6s2n.js → status-gt7c4ke0.js} +1 -1
- package/bin/vm-hands/version-bq5j7cqg.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-xrp0z6q8.js → vm-hands-entry-lite-2hvbgp1n.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-zyy13dn1.js → vm-hands-entry-lite-2wgdvb15.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-7zy4dghn.js → vm-hands-entry-lite-2wvsyggd.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-wet1wtj4.js → vm-hands-entry-lite-463m6ejk.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-tk74x5er.js → vm-hands-entry-lite-cc2tgsqp.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-cz4bmyav.js → vm-hands-entry-lite-ewwx4fr3.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-v9s4g2fs.js → vm-hands-entry-lite-grtycq6y.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-a1rkpawx.js → vm-hands-entry-lite-kq0qmsw8.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-bm5v6cch.js → vm-hands-entry-lite-qq9w7wq6.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-mjckrbg2.js → vm-hands-entry-lite-qxchbbew.js} +1 -1
- package/bin/vm-hands/vm-hands-entry-lite-rwxbhwky.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-p292emck.js → vm-hands-entry-lite-txn44020.js} +1 -1
- package/bin/vm-hands/vm-hands-entry-lite.js +1 -1
- package/bin/vm-hands/{vm-hands-executor-na9m8j45.js → vm-hands-executor-7k9z9988.js} +1 -1
- package/bin/vm-hands/{vm-hands-op-runner-rpbvbqyf.js → vm-hands-op-runner-n8p81rwm.js} +1 -1
- package/bin/vm-hands/{vm-hands-runtime-8xxqjypj.js → vm-hands-runtime-bqsz7h0h.js} +2 -2
- package/package.json +1 -1
- package/bin/vm-hands/version-280jjzt9.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-z66f51nh.js +0 -2
package/bin/reason
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Ke,jo,Uo,Ho}from"./vm-hands-entry-lite-
|
|
2
|
+
import{Ke,jo,Uo,Ho}from"./vm-hands-entry-lite-grtycq6y.js";import"./vm-hands-entry-lite-vrqzr15t.js";import"./vm-hands-entry-lite-1cwqa4jr.js";import"./vm-hands-entry-lite-zg36myyf.js";import"./vm-hands-entry-lite-kq0qmsw8.js";import"./vm-hands-entry-lite-2wvsyggd.js";import"./vm-hands-entry-lite-463m6ejk.js";import"./vm-hands-entry-lite-9c95p6n9.js";import"./vm-hands-entry-lite-b885gwfh.js";import"./vm-hands-entry-lite-88swf2qr.js";import"./vm-hands-entry-lite-09m2cdkw.js";import"./vm-hands-entry-lite-ab2m9erf.js";import"./vm-hands-entry-lite-qxchbbew.js";import"./vm-hands-entry-lite-ewwx4fr3.js";import"./vm-hands-entry-lite-1rtkf2xm.js";import"./vm-hands-entry-lite-q0k6kx6d.js";import"./vm-hands-entry-lite-bdhjpv7g.js";import"./vm-hands-entry-lite-22kfyvnk.js";import"./vm-hands-entry-lite-f5e3dbgk.js";import"./vm-hands-entry-lite-cc2tgsqp.js";import"./vm-hands-entry-lite-qysyf65v.js";import"./vm-hands-entry-lite-ckv17tn8.js";import"./vm-hands-entry-lite-t7an5zg2.js";import"./vm-hands-entry-lite-2wgdvb15.js";import"./vm-hands-entry-lite-eqgj4acy.js";import"./vm-hands-entry-lite-2hvbgp1n.js";import"./vm-hands-entry-lite-rwxbhwky.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-k278g9kj.js";import"./vm-hands-entry-lite-gvwdy3rf.js";import"./vm-hands-entry-lite-9ay6f56v.js";import"./vm-hands-entry-lite-m11j0f9q.js";export{jo as computerDisconnected,Ke as connectionDirectory,Uo as connectionReport,Ho as restartConnection};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{mn,ss,as,cs,ls,gn}from"./vm-hands-entry-lite-
|
|
2
|
+
import{mn,ss,as,cs,ls,gn}from"./vm-hands-entry-lite-qxchbbew.js";import"./vm-hands-entry-lite-ewwx4fr3.js";import"./vm-hands-entry-lite-1rtkf2xm.js";import"./vm-hands-entry-lite-q0k6kx6d.js";import"./vm-hands-entry-lite-bdhjpv7g.js";import"./vm-hands-entry-lite-22kfyvnk.js";import"./vm-hands-entry-lite-f5e3dbgk.js";import"./vm-hands-entry-lite-cc2tgsqp.js";import"./vm-hands-entry-lite-qysyf65v.js";import"./vm-hands-entry-lite-ckv17tn8.js";import"./vm-hands-entry-lite-t7an5zg2.js";import"./vm-hands-entry-lite-2wgdvb15.js";import"./vm-hands-entry-lite-eqgj4acy.js";import"./vm-hands-entry-lite-2hvbgp1n.js";import"./vm-hands-entry-lite-rwxbhwky.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-k278g9kj.js";import"./vm-hands-entry-lite-gvwdy3rf.js";import"./vm-hands-entry-lite-9ay6f56v.js";import"./vm-hands-entry-lite-m11j0f9q.js";export{as as ensureLocalBrowser,mn as localAutomationAvailable,cs as localBrowserProfile,ss as localUserChromeHost,ls as runAutomationCallLocally,gn as runLocalAutomation};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{xo,vi,en,ko,Co,es,ts,Ao,Po,rs,ns,is,os}from"./vm-hands-entry-lite-
|
|
2
|
+
import{xo,vi,en,ko,Co,es,ts,Ao,Po,rs,ns,is,os}from"./vm-hands-entry-lite-2wvsyggd.js";import"./vm-hands-entry-lite-463m6ejk.js";import"./vm-hands-entry-lite-9c95p6n9.js";import"./vm-hands-entry-lite-b885gwfh.js";import"./vm-hands-entry-lite-88swf2qr.js";import"./vm-hands-entry-lite-09m2cdkw.js";import"./vm-hands-entry-lite-ab2m9erf.js";import"./vm-hands-entry-lite-qxchbbew.js";import"./vm-hands-entry-lite-ewwx4fr3.js";import"./vm-hands-entry-lite-1rtkf2xm.js";import"./vm-hands-entry-lite-q0k6kx6d.js";import"./vm-hands-entry-lite-bdhjpv7g.js";import"./vm-hands-entry-lite-22kfyvnk.js";import"./vm-hands-entry-lite-f5e3dbgk.js";import"./vm-hands-entry-lite-cc2tgsqp.js";import"./vm-hands-entry-lite-qysyf65v.js";import"./vm-hands-entry-lite-ckv17tn8.js";import"./vm-hands-entry-lite-t7an5zg2.js";import"./vm-hands-entry-lite-2wgdvb15.js";import"./vm-hands-entry-lite-eqgj4acy.js";import"./vm-hands-entry-lite-2hvbgp1n.js";import"./vm-hands-entry-lite-rwxbhwky.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-k278g9kj.js";import"./vm-hands-entry-lite-gvwdy3rf.js";import"./vm-hands-entry-lite-9ay6f56v.js";import"./vm-hands-entry-lite-m11j0f9q.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";export{r as LocalCapabilityError,xo as SHORT_REQUEST_CAPABILITIES,rs as capabilityInventoryForRoots,vi as confinedExecutionShell,ko as defaultLocalCommandRunner,ns as deliverLocalHandsEnvironment,Po as enrolledRootPaths,os as executeLocalOperation,ts as grantLocalHandsWorkspaceControl,es as openHandsWorkspaceGrant,is as rebindLocalHandsControl,Co as runFileCapability,Ao as runTransferCapability,en as spawnCaptured};
|
package/bin/vm-hands/{local-display-session-8k2g89ys.js → local-display-session-pkz7a5q9.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{At,us,V,Be,Pt}from"./vm-hands-entry-lite-
|
|
2
|
+
import{At,us,V,Be,Pt}from"./vm-hands-entry-lite-ewwx4fr3.js";import"./vm-hands-entry-lite-1rtkf2xm.js";import"./vm-hands-entry-lite-q0k6kx6d.js";import"./vm-hands-entry-lite-bdhjpv7g.js";import"./vm-hands-entry-lite-22kfyvnk.js";import"./vm-hands-entry-lite-f5e3dbgk.js";import"./vm-hands-entry-lite-ckv17tn8.js";import"./vm-hands-entry-lite-t7an5zg2.js";import"./vm-hands-entry-lite-2wgdvb15.js";import"./vm-hands-entry-lite-eqgj4acy.js";import"./vm-hands-entry-lite-2hvbgp1n.js";import"./vm-hands-entry-lite-rwxbhwky.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-gvwdy3rf.js";import"./vm-hands-entry-lite-9ay6f56v.js";import"./vm-hands-entry-lite-m11j0f9q.js";export{Be as ensureLinuxDesktop,At as localDisplayAvailable,us as localDisplayReady,V as privateDirectory,Pt as runLocalDisplayStream};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Go,Ko,Jo,Zo,Xo,Yo,Qo}from"./vm-hands-entry-lite-
|
|
2
|
+
import{Go,Ko,Jo,Zo,Xo,Yo,Qo}from"./vm-hands-entry-lite-kq0qmsw8.js";import"./vm-hands-entry-lite-09m2cdkw.js";import"./vm-hands-entry-lite-t7an5zg2.js";import"./vm-hands-entry-lite-2hvbgp1n.js";import"./vm-hands-entry-lite-rwxbhwky.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-9ay6f56v.js";import"./vm-hands-entry-lite-m11j0f9q.js";export{Xo as acquireManagedRuntimeDirectoryLock,Jo as currentManagedRuntimeVersion,Qo as flushManagedRuntimeLifecycleEvents,Zo as isManagedRuntimeVersionExecutable,Ko as legacyManagedRuntimePaths,Go as managedRuntimePaths,Yo as recordManagedRuntimeLifecycle};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Io,Do,ys,bs}from"./vm-hands-entry-lite-
|
|
2
|
+
import{Io,Do,ys,bs}from"./vm-hands-entry-lite-2wgdvb15.js";import"./vm-hands-entry-lite-eqgj4acy.js";import"./vm-hands-entry-lite-2hvbgp1n.js";import"./vm-hands-entry-lite-rwxbhwky.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-8t9xssf9.js";export{bs as allowMacPermissions,ys as permissionsSummary,Do as readMacPermissions,Io as reasonIdentity};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Ir,be,K,Cn,ps,Wi,hs,qe,Oo,An,fs,ms,Dr,gs,_s}from"./vm-hands-entry-lite-
|
|
2
|
+
import{Ir,be,K,Cn,ps,Wi,hs,qe,Oo,An,fs,ms,Dr,gs,_s}from"./vm-hands-entry-lite-cc2tgsqp.js";import"./vm-hands-entry-lite-qysyf65v.js";import"./vm-hands-entry-lite-ckv17tn8.js";import"./vm-hands-entry-lite-t7an5zg2.js";import"./vm-hands-entry-lite-2hvbgp1n.js";import"./vm-hands-entry-lite-rwxbhwky.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-9ay6f56v.js";import"./vm-hands-entry-lite-m11j0f9q.js";export{Ir as WORKER_SERVICE_ENV,K as WorkerServiceError,Wi as connectServiceLabel,be as defaultWorkerServiceHost,ms as installWorkerService,qe as installedWorkerService,hs as isConnectServiceLabel,_s as removeWorkerService,Dr as restartWorkerService,gs as retargetWorkerServiceLogs,Oo as retireLegacyWorkerService,fs as workerServiceDefinitionCurrent,Cn as workerServiceLauncher,An as workerServiceProcessRunning,ps as workerServiceRetargetPending};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import"./vm-hands-entry-lite-zg36myyf.js";import"./vm-hands-entry-lite-t7an5zg2.js";import{g}from"./vm-hands-entry-lite-ckv17tn8.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-m11j0f9q.js";import"./vm-hands-entry-lite-1cwqa4jr.js";import{Ot,et}from"./vm-hands-entry-lite-q0k6kx6d.js";import{w,M,Xt,De,Ke}from"./vm-hands-entry-lite-
|
|
2
|
+
import"./vm-hands-entry-lite-zg36myyf.js";import"./vm-hands-entry-lite-t7an5zg2.js";import{g}from"./vm-hands-entry-lite-ckv17tn8.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-m11j0f9q.js";import"./vm-hands-entry-lite-1cwqa4jr.js";import{Ot,et}from"./vm-hands-entry-lite-q0k6kx6d.js";import{w,M,Xt,De,Ke}from"./vm-hands-entry-lite-grtycq6y.js";import"./vm-hands-entry-lite-k278g9kj.js";import"./vm-hands-entry-lite-2wvsyggd.js";import"./vm-hands-entry-lite-463m6ejk.js";import"./vm-hands-entry-lite-rwxbhwky.js";import"./vm-hands-entry-lite-88swf2qr.js";import"./vm-hands-entry-lite-b885gwfh.js";import"./vm-hands-entry-lite-vrqzr15t.js";import"./vm-hands-entry-lite-ewwx4fr3.js";import"./vm-hands-entry-lite-eqgj4acy.js";import"./vm-hands-entry-lite-2hvbgp1n.js";import"./vm-hands-entry-lite-2wgdvb15.js";import"./vm-hands-entry-lite-f5e3dbgk.js";import"./vm-hands-entry-lite-kq0qmsw8.js";import"./vm-hands-entry-lite-qysyf65v.js";import"./vm-hands-entry-lite-cc2tgsqp.js";import"./vm-hands-entry-lite-ab2m9erf.js";import"./vm-hands-entry-lite-22kfyvnk.js";import"./vm-hands-entry-lite-9c95p6n9.js";import"./vm-hands-entry-lite-bdhjpv7g.js";import"./vm-hands-entry-lite-gvwdy3rf.js";import"./vm-hands-entry-lite-1rtkf2xm.js";import"./vm-hands-entry-lite-qxchbbew.js";import"./vm-hands-entry-lite-09m2cdkw.js";import{a}from"./vm-hands-entry-lite-89z488gz.js";import{t,o,u,i,s,n}from"./vm-hands-entry-lite-907pa7f9.js";import"./vm-hands-entry-lite-9ay6f56v.js";import{readFileSync as me,realpathSync as k,renameSync as ge,unlinkSync as fe,writeFileSync as he}from"fs";import{dirname as ye,join as I}from"path";function h(e){return`claude mcp add --transport http reason ${e}`}function C(e){return`codex mcp add reason --url ${e}
|
|
3
3
|
codex mcp login reason`}var F=h("https://mcp.reasonmachines.com/mcp"),z=C("https://mcp.reasonmachines.com/mcp"),B=`https://claude.ai/settings/connectors?add=custom&url=${encodeURIComponent("https://mcp.reasonmachines.com/mcp")}`,H=`https://cursor.com/install-mcp?name=reason&config=${encodeURIComponent(btoa(JSON.stringify({url:"https://mcp.reasonmachines.com/mcp"})))}`;var b="https://github.com/reason-machines/reason-plugins",X=`Connect a coding agent to Reason over MCP
|
|
4
4
|
|
|
5
5
|
Usage:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{ct}from"./vm-hands-entry-lite-
|
|
2
|
+
import{ct}from"./vm-hands-entry-lite-rwxbhwky.js";import{a}from"./vm-hands-entry-lite-89z488gz.js";import{randomUUID as L}from"crypto";import{spawnSync as b}from"child_process";import{chmodSync as ee,cpSync as te,existsSync as x,lstatSync as A,mkdirSync as Y,readdirSync as ne,readFileSync as w,readlinkSync as re,realpathSync as T,renameSync as E,rmdirSync as ie,rmSync as g,symlinkSync as M,writeFileSync as oe}from"fs";import{dirname as I,join as u,relative as se,resolve as ce}from"path";var Ln="so.ara.cli",k=[Ln,"com.reasonmachines.cli"],F="5LJFSBRY2F";function jr(e){return`(${e.map((t)=>`identifier "${t}"`).join(" or ")}) and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and certificate leaf[field.1.2.840.113635.100.6.1.13] exists and certificate leaf[subject.OU] = "${F}"`}var G="ReasonBackgroundIdentity",so="Contents/Helpers/ReasonPermissionTile",ae="so.ara.cli.permission-tile",Ne=jr([ae,"com.reasonmachines.cli.permission-tile"]),v="AraBackgroundIdentity",ue="Reason",Ce=jr(k),de=`anchor apple generic and (${k.map((e)=>`identifier "${e}"`).join(" or ")}) and certificate leaf[subject.OU] = "${F}"`;class h extends Error{code;constructor(e,t){super(t);this.code=e;this.name="MacOSBackgroundIdentityError"}}var R="/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister";function le(e=a()){return u(e,"Library","Application Support","Reason","Background","Reason.app")}function O(e=a()){return u(e,"Library","Application Support","Ara","Background","Ara.app")}function fe(e){try{return A(e).isFile()}catch{return!1}}function D(e){return[G,v].map((t)=>u(e,"Contents","MacOS",t)).find(fe)??null}function d(e){try{if(!A(e).isDirectory())return!1;let t=w(u(e,"Contents","Info.plist"),"utf8");return k.some((n)=>t.includes(`<string>${n}</string>`))&&(t.includes(`<string>${ue}</string>`)||t.includes("<string>Ara</string>"))&&D(e)!==null}catch{return!1}}function Ur(e=a()){let t=le(e);if(!d(t))return null;try{let n=w(u(t,"Contents","Info.plist"),"utf8");return/<key>CFBundleVersion<\/key>\s*<string>(\d+\.\d+\.\d+)<\/string>/.exec(n)?.[1]??null}catch{return null}}function pe(e,t=a()){let n=Ur(t);return n===null||j(N(n.split(".")),N(e.split(/[.-]/).slice(0,3)))}var ge=1e4;function K(e,t){return b(e,[...t],{stdio:"ignore",timeout:ge}).status??1}var W=new Set;function H(e){if(process.env.REASON_TEST_REFUSE_REAL_IDENTITY!=="1")return;let t=(n)=>{try{return T(n)}catch{return ce(n)}};if(e!==void 0&&t(e)!==t(a()))return;throw Error("A test tried to change this computer's real Reason background identity; pass a temporary home. Refused by scripts/test-env.ts.")}var V=/\/(?:runtime|CLI)\/versions\/(\d+)\.(\d+)\.(\d+)[^/]*\/[^/]+$|\/\.(?:ara|reason)(?:-staging)?-worker-(\d+)\.(\d+)\.(\d+)[^/]*\/[^/]+$/,J=new Set(["ara","ara.exe","reason","reason.exe"]);function N(e){return e.map((t)=>Number(t))}function j(e,t){for(let n=0;n<3;n+=1)if(e[n]!==t[n])return e[n]<t[n];return!1}var ye=[0,2,161];function me(e){if(e===null)return!0;let t=ye,n=null;try{n=T(process.execPath)}catch{}return e.some((r)=>{let i=V.exec(r);if(i){let f=i[1]===void 0?i.slice(4,7):i.slice(1,4);return j(N(f),t)}let o=r.slice(r.lastIndexOf("/")+1);return J.has(o)&&r!==n&&r!==process.execPath})}function Ee(){let e=b("/bin/ps",["-xo","pid=,comm="],{encoding:"utf8",timeout:5000});if(e.status!==0)return null;let t=[];for(let n of e.stdout.split(`
|
|
3
3
|
`)){let r=/^\s*(\d+)\s+(\S.*)$/.exec(n);if(!r||Number(r[1])===process.pid)continue;let i=r[2].trimEnd(),o=i.slice(i.lastIndexOf("/")+1);if(!V.test(i)&&J.has(o)){let c=b("/usr/sbin/lsof",["-a","-p",r[1],"-d","txt","-Fn"],{encoding:"utf8",timeout:5000}).stdout?.split(`
|
|
4
4
|
`).find((l)=>l.startsWith("n/"));if(c)i=c.slice(1)}t.push(i)}return t}function _e(e){if(H(e.home),!d(e.sourceApp))throw new h("identity_invalid","The packaged Reason background identity is missing or invalid.");let t=e.command??K,n=le(e.home),r=I(n);Y(r,{recursive:!0,mode:448}),ee(r,448);let i=T(e.sourceApp),o=null;try{o=T(n)}catch{}if(i!==o){let f=`${process.pid}.${L()}`,c=u(r,`.Reason.app.${f}.tmp`),l=u(r,`.Reason.app.${f}.old`),y=!1;try{if(te(i,c,{recursive:!0,errorOnExist:!0,preserveTimestamps:!0}),!d(c))throw new h("identity_invalid","The copied Reason background identity is invalid.");let _=e.releaseSigned?["--test-requirement",`=${de}`]:[];if(t("/usr/bin/codesign",["--verify","--strict",..._,c])!==0)throw new h("identity_invalid_signature","The installed Reason background identity has an invalid signature.");let S=!1;for(let p=0;p<4;p+=1){let m=!1;try{E(n,l),m=!0,y=!0}catch(s){if(s.code!=="ENOENT")throw s}if(p===0)e.beforePublish?.();try{E(c,n),S=!0}catch(s){let Z=s.code;if(!["EEXIST","ENOTEMPTY"].includes(Z??""))throw s;if(m)g(l,{recursive:!0,force:!0}),y=!1;if(p===3)throw s;continue}if(m)g(l,{recursive:!0,force:!0}),y=!1;break}if(!S)throw Error("Could not publish Reason's background identity.")}catch(_){if(y&&!x(n)&&x(l))E(l,n);throw _}finally{g(c,{recursive:!0,force:!0}),g(l,{recursive:!0,force:!0})}}return z(n,e,{verified:i!==o}),n}function X(e){return u(I(e),".Reason.app.registered")}function q(e){try{let t=A(e);return t.isDirectory()?`${t.ino}:${t.birthtimeMs}`:null}catch{return null}}function C(e){let t=q(e);try{return t!==null&&w(X(e),"utf8")===t}catch{return!1}}function Q(e){if(d(e))return"bundle";try{if(A(u(e,"Contents","Info.plist"),{throwIfNoEntry:!1}))return null;return A(u(e,"Contents","MacOS",v)).isSymbolicLink()?"retired":null}catch{return null}}function z(e,t,n={}){let r=t.command??K;if(!n.verified&&r("/usr/bin/codesign",["--verify","--strict",e])!==0)throw new h("identity_invalid_signature","The installed Reason background identity has an invalid signature.");if(r(R,["-f",e])!==0)throw new h("identity_register_failed","Could not register Reason's macOS background identity.");let i=q(e);try{if(i)oe(X(e),i,{mode:384})}catch{}try{Se(e,t.home,r,t.runningExecutables??Ee)}catch(o){let f=o.code??"unknown";process.stderr.write(`Reason background identity: legacy_identity_retire_failed (${f})
|
|
5
5
|
`)}}function Se(e,t,n,r){let i=D(e);if(!i)return;let o=O(t),f=I(o),c=(s)=>u(s,"Contents","MacOS",v),l=se(I(c(o)),i),y=`${process.pid}.${L()}`,_=Q(o);if(_===null)return;let S=_==="bundle";if(S)n(R,["-u",o]);let p=u(f,`.Ara.app.${y}.old`);if(!W.has(o)&&!me(r())){if(!S)n(R,["-u",o]);try{E(o,p)}catch(s){if(s.code==="ENOENT")return;throw s}g(p,{recursive:!0,force:!0}),Ie(f);return}if(!S){if(re(c(o))===l)return;let s=`${c(o)}.${y}`;M(l,s);try{E(s,c(o))}finally{g(s,{force:!0})}return}let m=u(f,`.Ara.app.${y}.shim`);Y(I(c(m)),{recursive:!0}),M(l,c(m));try{try{E(o,p)}catch(s){if(s.code==="ENOENT")return;throw s}try{E(m,o)}catch(s){if(x(o))return;throw E(p,o),s}}finally{g(m,{recursive:!0,force:!0}),g(p,{recursive:!0,force:!0})}}function Ie(e){try{if(ne(e).some((n)=>n!==".DS_Store"))return;g(u(e,".DS_Store"),{force:!0}),ie(e)}catch{}}var B=new Map;function Mn(e=a()){let t=B.get(e);if(t)return t;if(process.platform!=="darwin")return[];let n=U(e);if(n===null&&x(I(le(e))))Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,100),n=U(e);if(n===null)return[];return B.set(e,n),n}function U(e){let t=le(e),n=O(e);if(!d(t)||!C(t))try{he({home:e,skipWhenSettled:!0})}catch{}let r=d(t)&&(C(t)||!d(n))?t:d(n)?n:null,i=r?D(r):null;if(!i)return null;if(r===n)W.add(n);let o=b(i,["--can-spawn"],{env:{},timeout:2000,encoding:"utf8"});return o.status===0&&o.stdout===`spawn
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{ze,st}from"./vm-hands-entry-lite-eqgj4acy.js";import{ct}from"./vm-hands-entry-lite-
|
|
2
|
+
import{ze,st}from"./vm-hands-entry-lite-eqgj4acy.js";import{ct}from"./vm-hands-entry-lite-rwxbhwky.js";import{so,le,Ur,at,ao}from"./vm-hands-entry-lite-2hvbgp1n.js";import{E}from"./vm-hands-entry-lite-pgb514h0.js";import{a,qt}from"./vm-hands-entry-lite-89z488gz.js";import{spawnSync as H}from"child_process";import{dirname as w}from"path";import{spawn as A}from"child_process";import{accessSync as _,constants as v}from"fs";import{basename as C,join as O}from"path";var l=null;function S(e){if(l===e)l=null;if(e.exitCode===null&&e.signalCode===null)e.kill("SIGTERM")}var Br=(e,t)=>{if(l)S(l);let s=O(e,so);try{_(s,v.X_OK)}catch{return()=>{}}let n;try{n=A(s,["--app",e,"--name",C(e,".app"),"--permission",t==="screen"?"screen_recording":"accessibility"],{detached:!0,stdio:"ignore"})}catch{return()=>{}}return n.on("error",()=>{if(l===n)l=null}),n.once("exit",()=>{if(l===n)l=null}),n.unref(),l=n,()=>S(n)};import{chmodSync as ne,existsSync as se,mkdirSync as re,readFileSync as D,realpathSync as ie,renameSync as oe,statSync as j,writeFileSync as ae}from"fs";import{dirname as de,isAbsolute as G,join as N,resolve as T,sep as b}from"path";function F(e=a()){return N(qt(e),"reason","protected-path-grants.json")}var f=null;function L(e){let t=JSON.parse(e);if(!Array.isArray(t?.grants))return[];return t.grants.flatMap((s)=>{let n=s;return n&&typeof n.path==="string"&&G(n.path)&&(n.kind==="file"||n.kind==="folder")&&typeof n.grantedAt==="number"?[{path:n.path,kind:n.kind,grantedAt:n.grantedAt}]:[]})}function y(e=F()){try{let{mtimeMs:t}=j(e);if(f&&f.file===e&&f.mtimeMs===t)return f.grants;let s=L(D(e,"utf8"));return f={file:e,mtimeMs:t,grants:s},s}catch{return[]}}function W(e,t){return e.kind==="file"?t===e.path:t===e.path||t.startsWith(`${e.path}${b}`)}function U(e,t){let s=T(e);return y(t).some((n)=>W(n,s))}function Zi(e,t){return E(e)&&!U(e,t)}function Xi(e,t,s){let n=t?"file-read* file-write*":"file-read*";return y(s).filter((r)=>r.path===e||r.path.startsWith(`${e}${b}`)).map((r)=>`(allow ${n} (${r.kind==="file"?"literal":"subpath"} ${JSON.stringify(r.path)}))`)}var P="x-apple.systempreferences:com.apple.preference.security",J="curl -fsSL https://reasonmachines.com/install.sh | bash",q=180000,B=2000;var k={screen:{label:"Screen & System Audio Recording",purpose:"desktop video, computer-use screenshots",level:"required",pane:`${P}?Privacy_ScreenCapture`},accessibility:{label:"Accessibility",purpose:"computer-use clicks and typing, desktop input",level:"required",pane:`${P}?Privacy_Accessibility`},disk:{label:"Full Disk Access",purpose:"Sessions in Desktop, Documents, Downloads, iCloud Drive and Mail",level:"recommended",pane:`${P}?Privacy_AllFiles`}};function R(e){return e.executable}function K(e,t){if(e==="computer_use_identity_missing")return`Reason's background identity is not installed (${e}); reinstall Reason: ${J}`;if(e==="computer_use_identity_outdated")return`Reason's background identity is outdated (${Ur(t)??"unknown"}; this CLI is ${ct}) (${e}); \`reason update\` installs this release's`;return`Reason's background identity cannot run computer use for this CLI (${e}); run the installed \`reason\``}function Io(e=a()){let t=at(e);if(t.length>0)return{state:"ready",path:w(w(w(t[0]))),prefix:t};let s=ao(t,e)??"computer_use_identity_unavailable";return{state:s,path:le(e),detail:K(s,e)}}function V(){return{identity:()=>Io(),grants:(e)=>ze(e),request:(e,t)=>st(e,t),worker:async()=>(await import("./status-gt7c4ke0.js")).connectionMacState(),open:(e)=>{H("/usr/bin/open",e,{stdio:"ignore",timeout:1e4})},tile:Br,restartConnection:async()=>(await import("./connect-cli-d60gmgnx.js")).restartConnection(),sleep:(e)=>new Promise((t)=>setTimeout(t,e)),now:()=>Date.now()}}function M(e,t,s){if(e.state!=="ready"||!t)return"unknown";return t[s]?"granted":"missing"}async function Do(e){let t=e.identity(),s=t.state==="ready"?await e.grants(t.prefix):null,n=await e.worker(),r=n?R(n):null,i=!r||n?.full_disk_access==="unknown"?"unknown":n?.full_disk_access==="granted"?"granted":"missing",c=(u,d,o)=>{let{label:p,purpose:h,level:m}=k[u];return{id:u,label:p,purpose:h,level:m,state:d,holder:o}};return{identity:{state:t.state,path:t.path,detail:t.state==="ready"?null:t.detail},worker_detail:r?null:"Full Disk Access is read from this computer's running worker; `reason connect` starts it.",permissions:[c("screen",M(t,s,"screen"),t.path),c("accessibility",M(t,s,"accessibility"),t.path),c("disk",i,r)]}}function ys(e){let t=e.identity.state==="ready"?null:e.identity.state,s=e.permissions.filter((i)=>i.state==="granted").length,n=[...t?[t]:[],...e.permissions.filter((i)=>i.state!=="granted"&&!(t&&i.id!=="disk")).map((i)=>`${i.label} ${i.state}`)],r=!t&&e.permissions.some((i)=>i.state==="missing");return`Permissions: ${s} of ${e.permissions.length}${n.length>0?` (${n.join(", ")})`:""}`+(r?" \u2014 reason permissions allow":n.length>0?" \u2014 reason permissions":"")}async function x(e,t){let s=t.now()+q;for(;;){if(await e())return!0;if(t.now()>=s)return!1;await t.sleep(B)}}async function bs(e,t){let s=t.host??V(),{io:n}=t,r=await Do(s),i=r.permissions.filter((o)=>e.includes(o.id)&&o.state!=="granted");if(i.length===0)return n.stdout.write(`Reason permissions: ${e.map((o)=>k[o].label).join(", ")} already allowed.
|
|
3
3
|
`),0;let c=!1,u=!1,d=s.identity();for(let o of i){let{label:p,pane:h}=k[o.id];if(o.id!=="disk"){if(d.state!=="ready"){if(!c)n.stderr.write(`Reason permissions: ${d.detail}
|
|
4
4
|
`);c=!0;continue}let g=o.id;await s.request(d.prefix,g),s.open([h]);let I=s.tile(d.path,g);if(n.stdout.write(`Allow Reason in System Settings > Privacy & Security > ${p}.
|
|
5
5
|
`),!t.wait)continue;if(n.stdout.write(`Waiting for it (Ctrl-C to stop)\u2026
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Ye,xt,gr,dn,_r,pn,hn,fn}from"./vm-hands-entry-lite-ab2m9erf.js";import{ke,Vt,$n,lt,ho,ie,fo,mo,Ve,Ce,Vr,Fn,dt,Ae,pt,Un,Hn,qn,zn,Wn,Vn,Gn,Kn,Jn,Zn,Xn,Yn,Qn,ei,ti,pe,X,Pe,q,ri,ni,ii,oi,si,ai,ci,li,ht,ui}from"./vm-hands-entry-lite-k278g9kj.js";import{ue,J,T,H}from"./vm-hands-entry-lite-8t9xssf9.js";import{k,Nt}from"./vm-hands-entry-lite-22kfyvnk.js";import{p,yt,tn,Qt,wt,Si,Ei,er,tr,xi,rr,ki,Je,Ci,Ai,Pi,Ti,nr,Ri,Oi,ir,or,sr,Ne,rn,nn,ar,Di,on,cr,me,ge,bt,lr,dr,sn,an,Ze,vt}from"./vm-hands-entry-lite-
|
|
2
|
+
import{Ye,xt,gr,dn,_r,pn,hn,fn}from"./vm-hands-entry-lite-ab2m9erf.js";import{ke,Vt,$n,lt,ho,ie,fo,mo,Ve,Ce,Vr,Fn,dt,Ae,pt,Un,Hn,qn,zn,Wn,Vn,Gn,Kn,Jn,Zn,Xn,Yn,Qn,ei,ti,pe,X,Pe,q,ri,ni,ii,oi,si,ai,ci,li,ht,ui}from"./vm-hands-entry-lite-k278g9kj.js";import{ue,J,T,H}from"./vm-hands-entry-lite-8t9xssf9.js";import{k,Nt}from"./vm-hands-entry-lite-22kfyvnk.js";import{p,yt,tn,Qt,wt,Si,Ei,er,tr,xi,rr,ki,Je,Ci,Ai,Pi,Ti,nr,Ri,Oi,ir,or,sr,Ne,rn,nn,ar,Di,on,cr,me,ge,bt,lr,dr,sn,an,Ze,vt}from"./vm-hands-entry-lite-463m6ejk.js";import{D,O,S}from"./vm-hands-entry-lite-9c95p6n9.js";import{G}from"./vm-hands-entry-lite-f5e3dbgk.js";import{Me}from"./vm-hands-entry-lite-88swf2qr.js";import{Er,j}from"./vm-hands-entry-lite-q0k6kx6d.js";import{hr,cn,Mi}from"./vm-hands-entry-lite-b885gwfh.js";import{Yi,Qi,ot,eo,to,ro,no,io}from"./vm-hands-entry-lite-eqgj4acy.js";import{wr,Tt,br,_n,yn}from"./vm-hands-entry-lite-1rtkf2xm.js";import{ji,P,Ui,At,Be,Pt}from"./vm-hands-entry-lite-ewwx4fr3.js";import{Zi,Xi}from"./vm-hands-entry-lite-2wgdvb15.js";import{kt,mn,gn}from"./vm-hands-entry-lite-qxchbbew.js";import{_e}from"./vm-hands-entry-lite-pmcz7j7t.js";import{b,h}from"./vm-hands-entry-lite-09m2cdkw.js";import{Et}from"./vm-hands-entry-lite-hj8n59y9.js";import{Se,Bt,Ft,jt,E}from"./vm-hands-entry-lite-pgb514h0.js";import{a,ne,qt,uo}from"./vm-hands-entry-lite-89z488gz.js";import{Gr,y,t,A,o,d,Lo,Te,fi,u,i,Q,_,oe,s,n,yo,Kr}from"./vm-hands-entry-lite-907pa7f9.js";import{fe,se,Kt,Jt,Oe,Zr}from"./vm-hands-entry-lite-9ay6f56v.js";import{Ie}from"./vm-hands-entry-lite-8ns59paz.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{request as Pl}from"http";import{request as Cl}from"https";import{lookup as Ol}from"dns/promises";import{isIP as Il}from"net";async function Al(e){let c=new URL(e.url);return await new Promise((l,m)=>{let f=(c.protocol==="https:"?Cl:Pl)(c,{method:"POST",headers:{...e.headers,"accept-encoding":"identity"},signal:e.signal,timeout:dn},(g)=>l({response:g,close:()=>{g.destroy(),f.destroy(),g.socket?.destroy()}}));f.once("error",m),f.once("timeout",()=>f.destroy(Object.assign(Error("custom_endpoint_timeout"),{code:"ETIMEDOUT"}))),f.end(e.body)})}var Bs=new Set(["ENOTFOUND","EAI_AGAIN","EAI_NONAME","EAI_NODATA","EAI_FAIL","DNSException"]),Ll=new Set(["ECONNREFUSED","ETIMEDOUT","ECONNRESET","EHOSTUNREACH","ENETUNREACH","EHOSTDOWN","ENETDOWN","EPIPE","ECONNABORTED","EADDRNOTAVAIL","ConnectionRefused","ConnectionClosed","ConnectionTimedOut","Timeout"]);function Fs(e,c=0){if(!e||typeof e!=="object"||c>3)return null;let l=e.code;if(typeof l==="string"){if(Bs.has(l))return"custom_endpoint_host_not_found";if(Ll.has(l))return"custom_endpoint_connection_failed";if(/^(?:ERR_TLS_|ERR_SSL_|CERT_|UNABLE_TO_(?:GET|VERIFY|DECRYPT)|DEPTH_ZERO_SELF_SIGNED|SELF_SIGNED_CERT|HOSTNAME_MISMATCH|EPROTO$)/.test(l))return"custom_endpoint_tls_failed"}for(let m of[...e instanceof AggregateError?e.errors:[],e.cause]){let f=Fs(m,c+1);if(f)return f}return null}async function kl(e,c){let l=Fs(e),m=new URL(c).hostname.replace(/^\[|\]$/g,"");if(l!==null&&l!=="custom_endpoint_connection_failed"||Il(m)!==0)return l;let f;return await Promise.race([Ol(m).then(()=>!0,(w)=>!Bs.has(String(w?.code))),new Promise((w)=>{f=setTimeout(()=>w(!0),5000)})]).finally(()=>clearTimeout(f))?l:"custom_endpoint_host_not_found"}function Tl(e){for(let c=42;;c++){if(c===127)c=256;let l=String.fromCodePoint(c);if(!e.includes(l))return l}}function Dl(e,c){let l=Buffer.from(e),m=Buffer.from(c),f=new Uint32Array(l.length);for(let w=1,x=0;w<l.length;w++){while(x&&l[w]!==l[x])x=f[x-1];if(l[w]===l[x])x++;f[w]=x}let g=0;return(w,x=!1)=>{let C=Buffer.allocUnsafe(w.length*m.length+g),R=0;for(let v of w){while(g&&l[g]!==v){let I=f[g-1];R+=l.copy(C,R,0,g-I),g=I}if(l[g]===v){if(g++,g===l.length)R+=m.copy(C,R),g=0}else C[R++]=v}if(x)R+=l.copy(C,R,0,g),g=0;return C.subarray(0,R)}}async function Us(e){e.signal.throwIfAborted();let c=pn.safeParse(e.payload);if(!c.success)throw new r("custom_endpoint_invalid_request","Invalid local model request.");let l=c.data,m=hn.parse(await e.credential(e.signal));if(!_r(l,{baseUrl:l.baseUrl,api:m.api,execution:"device"}))throw new r("custom_endpoint_invalid_request","The request does not match the configured API.");e.signal.throwIfAborted();let f,g,w=0,x=0,C=0,R=Tl(m.apiKey),v=Dl(m.apiKey,R),I=async(N,M)=>{e.signal.throwIfAborted(),await new Promise((U,F)=>{let B=()=>{e.signal.removeEventListener("abort",B),F(e.signal.reason)};if(e.signal.addEventListener("abort",B,{once:!0}),e.signal.aborted){B();return}Promise.resolve().then(()=>(e.signal.throwIfAborted(),e.emit(N,M))).then(()=>{e.signal.removeEventListener("abort",B),U()},(V)=>{e.signal.removeEventListener("abort",B),F(V)})})},L=async(N)=>{if(w+=N.length,w>xt)throw new r("custom_endpoint_response_too_large","Local model response exceeds the transport limit.");for(let M=0;M<N.length;M+=Ye){if(C>=gr)throw new r("custom_endpoint_response_too_large","Local model response exceeds the chunk limit.");await I(`custom_endpoint.chunk.${C++}`,{eof:!1,data:N.subarray(M,M+Ye).toString("base64")})}};try{let N=await Al({url:l.url,body:l.body,signal:e.signal,headers:{...l.headers,...m.api==="anthropic-messages"?{"x-api-key":m.apiKey}:{authorization:`Bearer ${m.apiKey}`}}});f=N.response,g=N.close;let M=f.statusCode??500;if(M>=300&&M<400)throw new r("custom_endpoint_redirect_refused","Local model redirects are not followed.");if(f.headers["content-encoding"]&&f.headers["content-encoding"]!=="identity")throw new r("custom_endpoint_encoding_unsupported","The local server must honor identity encoding.");let U={};for(let F of["content-type","retry-after","x-request-id","request-id"]){let B=f.headers[F];if(typeof B==="string")U[F]=B.replaceAll(m.apiKey,R).slice(0,4096)}await I("custom_endpoint.headers",{status:M,statusText:(f.statusMessage??"").replaceAll(m.apiKey,R).slice(0,256),headers:U});for await(let F of f){e.signal.throwIfAborted();let B=Buffer.isBuffer(F)?F:Buffer.from(F);if(x+=B.length,x>xt)throw new r("custom_endpoint_response_too_large","Local model response exceeds the transport limit.");await L(v(B))}return await L(v(Buffer.alloc(0),!0)),await I(`custom_endpoint.chunk.${C}`,{eof:!0}),{bytes:w,chunks:C}}catch(N){if(e.signal.throwIfAborted(),N instanceof r)throw N;throw new r((f?null:await kl(N,l.url))??"custom_endpoint_request_failed","The local model server could not complete the request.")}finally{g?.()}}import{join as Hs}from"path";function Nl(e,c){return e===Hs(c,".ara","workspace")||e===Hs(c,".reason","workspace")}function js(e,c){let l=e.filter((m)=>Nl(m.path,c));return l.length===1?l[0].path:null}var Ml=/^[a-f0-9]{64}$/;var bo=32,$l=/^\/[^\x00-\x1f\x7f\\]*$/;function bn(e){if(typeof e!=="string"||e.length>4096||!$l.test(e))return!1;if(e==="/")return!0;return e.split("/").slice(1).every((c)=>c!==""&&c!=="."&&c!=="..")}function wn(e,c){let l=c==="win32"?/^([A-Za-z]):[\\/]*(.*)$/.exec(e):null;if(!l)return e;let m=l[2].split(/[\\/]+/).filter(Boolean).join("/");return`/${l[1].toUpperCase()}:${m?`/${m}`:""}`}function wo(e){if(!e||typeof e!=="object"||Array.isArray(e))return;let c=e;if(!bn(c.home)||!Array.isArray(c.roots)||c.roots.length>bo)return;let l=[];for(let m of c.roots){if(!m||typeof m!=="object"||Array.isArray(m))return;let{path_fingerprint:f,path:g}=m;if(typeof f!=="string"||!Ml.test(f)||!bn(g))return;l.push({path_fingerprint:f,path:g})}return{home:c.home,roots:l}}function Bl(e){let c=/^Reason contributor (rc_[0-9a-f]{32})$/.exec(e.name)?.[1];return e.email.toLowerCase()==="343777287+reason-contributors@users.noreply.github.com"&&c?c:void 0}function Fl(e){return Bl(e)??e.email.toLowerCase()}function So(e){let c=/^Co-authored-by:\s*([^<>\r\n]+) <([^<>\s]+)>$/i.exec(e.trim());return c?Fl({name:c[1],email:c[2]}):e.trim().toLowerCase()}var Pr=(e)=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/[a-z]/gi,(c)=>`[${c.toLowerCase()}${c.toUpperCase()}]`),Ul=[...Se.map((e)=>`/(${e.map(Pr).join("/")})(/|$)`),...Bt.map((e)=>`/(${e.map(Pr).join("/")})(/|$)`),...[...Ft].map((e)=>`/(${Pr(e)})$`),`/${Pr(".env.")}[^/]*$`,...jt.map((e)=>`/[^/]*${Pr(e)}$`)],Ws=`function localGithubSandboxProfile(root, temporary) {
|
|
3
3
|
return ['(version 1)','(deny default)','(import "system.sb")','(allow process-exec process-fork)',
|
|
4
4
|
'(allow file-read* (subpath "/bin") (subpath "/sbin") (subpath "/usr/bin") (subpath "/usr/sbin") (subpath "/usr/libexec") (subpath "/usr/share") (subpath "/private/var/select") (literal "/private/var/db/xcode_select_link"))',
|
|
5
5
|
'(allow file-read-metadata (path-ancestors "/opt/homebrew/bin") (path-ancestors "/usr/local/bin") (path-ancestors "/Library/Developer/CommandLineTools"))',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{ue,Ee,J,xe,de,zt,We,Z,T,H,Wr}from"./vm-hands-entry-lite-8t9xssf9.js";import{Hi,k,je,ye,Ue,te,He,Sn,we,Mt,ae,U,N,ce,Rr,Or,xn}from"./vm-hands-entry-lite-22kfyvnk.js";import{ke,ie,pe,X,Pe,q,Y}from"./vm-hands-entry-lite-k278g9kj.js";import{St,pr,Xe,W,D,O,S}from"./vm-hands-entry-lite-9c95p6n9.js";import{fr,mr,ln,$i,Me,un}from"./vm-hands-entry-lite-88swf2qr.js";import{It,j}from"./vm-hands-entry-lite-q0k6kx6d.js";import{Ji,Rn}from"./vm-hands-entry-lite-ckv17tn8.js";import{G}from"./vm-hands-entry-lite-f5e3dbgk.js";import{gi}from"./vm-hands-entry-lite-gvwdy3rf.js";import{b,h,Bi}from"./vm-hands-entry-lite-09m2cdkw.js";import{E}from"./vm-hands-entry-lite-pgb514h0.js";import{Ht}from"./vm-hands-entry-lite-p292emck.js";import{a,ne,po}from"./vm-hands-entry-lite-89z488gz.js";import{L,pi,hi,_o,y,t,A,mt,o,d,u,i,c,_,oe,s,n}from"./vm-hands-entry-lite-907pa7f9.js";import{mi}from"./vm-hands-entry-lite-0xrsph3r.js";import{wo,se,bo,Re,x,Jr,Oe,I}from"./vm-hands-entry-lite-9ay6f56v.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{execFile as aa}from"child_process";import{createRequire as ca}from"module";import{win32 as hn}from"path";var da=250,la=50,ua=250,fa=4194304;function Go(e){let l=/^(?:\[([^\]]+)\]|([^:]+)):([0-9]{1,5})$/.exec(e??""),f=Number(l?.[3]);return l&&f<=65535?{address:l[1]??l[2],port:f}:null}function pa(e){let l=[];for(let f of e.split(/\r?\n/)){let g=f.trim().split(/\s+/);if(g[0]!=="TCP"||g.length<5)continue;let w=Go(g[1]),v=Go(g[2]),P=Number(g.at(-1));if(!w||!v||!Number.isSafeInteger(P)||P<0)continue;l.push({pid:P,localAddress:w.address,localPort:w.port,remoteAddress:v.address,remotePort:v.port,listening:v.port===0})}return l}function _a(e){if(e.localAddress==="0.0.0.0"||e.localAddress==="::")return`*:${e.localPort}`;return e.localAddress.includes(":")?`[${e.localAddress}]:${e.localPort}`:`${e.localAddress}:${e.localPort}`}var Vo=(e)=>new Promise((l,f)=>aa(hn.join(Re("win32").split(";")[0],"NETSTAT.EXE"),["-ano"],{timeout:e,maxBuffer:fa,encoding:"utf8",windowsHide:!0,env:Jr()},(g,w)=>g?f(g):l(w)));function zn(e){let l=hn.normalize(e.startsWith("\\\\?\\")?e.slice(4):e);return l.length>3&&l.endsWith("\\")?l.slice(0,-1):l}function ma(e,l){let f=e.toLowerCase(),g=l.toLowerCase();return g===f||g.startsWith(f.endsWith("\\")?f:`${f}\\`)}function qo(e,l,f){let g=e.cwd(f),w=g?zn(g):null;return w&&hn.isAbsolute(w)&&ma(l,w)?w:null}var Kt;function wt(){if(Kt!==void 0)return Kt;if(Kt=null,process.platform!=="win32"||!["x64","arm64"].includes(process.arch))return null;let e;try{e=ca(import.meta.url)("bun:ffi")}catch{return null}let{FFIType:l,ptr:f}=e,g,w;try{g=e.dlopen("kernel32.dll",{CreateToolhelp32Snapshot:{args:[l.u32,l.u32],returns:l.u64},Process32FirstW:{args:[l.u64,l.ptr],returns:l.i32},Process32NextW:{args:[l.u64,l.ptr],returns:l.i32},OpenProcess:{args:[l.u32,l.i32,l.u32],returns:l.u64},ReadProcessMemory:{args:[l.u64,l.u64,l.ptr,l.u64,l.ptr],returns:l.i32},CloseHandle:{args:[l.u64],returns:l.i32}}).symbols,w=e.dlopen("ntdll.dll",{NtQueryInformationProcess:{args:[l.u64,l.i32,l.ptr,l.u32,l.ptr],returns:l.i32}}).symbols}catch{return null}let v=0xFFFFFFFFFFFFFFFFn,P=2,F=1040,R=568,M=(Q,z,C)=>{let re=Buffer.alloc(C);return g.ReadProcessMemory(Q,z,f(re),C,null)?re:null};return Kt={processes(){let Q=BigInt(g.CreateToolhelp32Snapshot(P,0));if(Q===v)throw new r("process_inspection_failed","Reading this computer's processes did not complete.");try{let z=Buffer.alloc(R);z.writeUInt32LE(R,0);let C=f(z),re=[];for(let V=g.Process32FirstW(Q,C);V;V=g.Process32NextW(Q,C)){let K=z.toString("utf16le",44,R),_e=K.slice(0,K.includes("\x00")?K.indexOf("\x00"):void 0),ve=z.readUInt32LE(8);if(ve>0)re.push({pid:ve,parentPid:z.readUInt32LE(32),command:_e.replace(/\.exe$/i,"")||null})}return re}finally{g.CloseHandle(Q)}},cwd(Q){let z=BigInt(g.OpenProcess(F,0,Q));if(z===0n)return null;try{let C=Buffer.alloc(48);if(w.NtQueryInformationProcess(z,0,f(C),C.length,null)!==0)return null;let re=M(z,C.readBigUInt64LE(8)+0x20n,8)?.readBigUInt64LE(0),V=re?M(z,re+0x38n,16):null,K=V?.readUInt16LE(0)??0;if(!V||K===0||K%2!==0)return null;return M(z,V.readBigUInt64LE(8),K)?.toString("utf16le")??null}finally{g.CloseHandle(z)}}},Kt}function Un(e){if(!e)throw new r("process_inspection_failed","Reading this computer's processes is unavailable.");return e}async function Yo(e,l){let f;try{f=await e(l)}catch{throw new r("process_inspection_failed","Reading this computer's ports did not complete.")}return pa(f)}async function Si(e,l=wt()){let f=Un(l),g=zn(e),w=[];for(let v of f.processes()){if(w.length>=da)break;let P=qo(f,g,v.pid);if(P)w.push({pid:v.pid,command:v.command,cwd:hn.relative(g,P)||"."})}return{processes:w}}async function Ei(e,l=wt(),f=Vo){let g=Un(l),w=zn(e),v=(await Yo(f,5000)).filter((M)=>M.listening&&M.pid>0).map((M)=>({pid:M.pid,port:M.localPort,address:_a(M)})).sort((M,Q)=>M.pid-Q.pid||M.port-Q.port||(M.address<Q.address?-1:M.address>Q.address?1:0)),P=[...new Set(v.map((M)=>M.pid))].slice(0,la),F=new Set(P.filter((M)=>qo(g,w,M)!==null));if(F.size===0)return{ports:[]};let R=new Map(g.processes().map((M)=>[M.pid,M.command]));return{ports:v.filter((M)=>F.has(M.pid)).slice(0,ua).map((M)=>({pid:M.pid,command:R.get(M.pid)??null,address:M.address}))}}function Jo(e,l){let f=new Set([l]);for(let g=!0;g;){g=!1;for(let w of e)if(!f.has(w.pid)&&f.has(w.parentPid)&&w.pid!==w.parentPid)f.add(w.pid),g=!0}return f}function ha(e,l,f,g){let w=(v)=>v==="127.0.0.1"||v==="::ffff:127.0.0.1"||v==="::1";return e.flatMap((v)=>{if(!l.has(v.pid)||v.localPort!==g)return[];let P=v.listening&&(w(v.localAddress)||["0.0.0.0","::"].includes(v.localAddress)),F=!v.listening&&w(v.localAddress)&&w(v.remoteAddress);if(!P&&!F)return[];let R=`${v.localAddress}:${v.localPort}>${v.remoteAddress}:${v.remotePort}`;return[{pid:v.pid,processGroupId:f,descriptor:String(v.pid),kernelId:R,state:P?"listen":"established",port:g,peerPort:P?null:v.remotePort,host:v.localAddress==="::1"?"::1":"127.0.0.1"}]})}async function Xo(e,l,f=wt(),g=Vo){let w=Un(f),v=Jo(w.processes(),e),P=await Yo(g,1000),F=Jo(w.processes(),e);return ha(P,new Set([...v].filter((R)=>F.has(R))),e,l)}var p={chunk:32768,upload:1048576,total:536870912,streams:16,queued:512,buffered:262144,relayBuffered:8388608,requestMs:30000,lifetimeMs:600000,authorizationMs:2000,window:8};function gn(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function et(e,l,f=Number.MAX_SAFE_INTEGER){return typeof e==="number"&&Number.isSafeInteger(e)&&e>=l&&e<=f}function Qo(e){return typeof e==="string"&&/^[a-zA-Z0-9_-]{1,160}$/.test(e)}function es(e,l){let f=Buffer.from(e,"latin1");return Buffer.concat([Buffer.from([f.length]),f,l])}function rt(e){if(!gn(e)||Object.keys(e).length!==12||![e.organizationId,e.userId,e.runId,e.deviceId,e.rootId,e.jobId,e.fenceId].every(Qo)||!et(e.attachmentRevision,0)||!et(e.grantRevision,1)||!et(e.generation,1)||!et(e.port,1024,65535)||!et(e.expiresAtMs,1))throw Error("preview_binding_invalid");return Object.freeze({...e})}function ut(e,l){return Object.keys(e).every((f)=>e[f]===l[f])}function Jt(e){if(e.length>4096||!e.startsWith("/")||e.startsWith("//")||/[\\\x00-\x20\x7f#]/.test(e))throw Error("preview_path_invalid");let l=decodeURIComponent(e);if(l.startsWith("//")||/[\\\x00-\x1f\x7f]/.test(l))throw Error("preview_path_invalid");return e}function Zo(e){return Array.isArray(e)&&e.length<=64&&e.every((l)=>Array.isArray(l)&&l.length===2&&typeof l[0]==="string"&&/^[a-zA-Z0-9-]{1,80}$/.test(l[0])&&typeof l[1]==="string"&&l[1].length<=4096&&!/[\x00-\x1f\x7f]/.test(l[1]))}function Gt(e,l=p.chunk){if(e.length>Math.ceil(l/3)*4||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e))throw Error("preview_data_invalid");let f=Buffer.from(e,"base64");if(f.length>l)throw Error("preview_data_too_large");return f}function rs(e){if(Array.isArray(e))return Buffer.concat(e);if(typeof e==="string")return Buffer.from(e,"utf8");if(e instanceof ArrayBuffer)return Buffer.from(e);return e}function ts(e){if(Buffer.byteLength(e)>p.upload*1.4+300000)throw Error("preview_frame_too_large");let l=JSON.parse(e);if(!gn(l))throw Error("preview_frame_invalid");if(l.type==="hello")return{type:"hello",binding:rt(l.binding),...et(l.messages,p.chunk,p.upload)?{messages:l.messages}:{},...et(l.window,1,p.window)?{window:l.window}:{},...l.bytes===!0?{bytes:!0}:{}};if(l.type==="refused"&&typeof l.reason==="string"&&/^[a-z_]{1,32}$/.test(l.reason))return{type:"refused",binding:rt(l.binding),reason:l.reason};if(!Qo(l.id))throw Error("preview_frame_invalid");if(l.type==="end"||l.type==="cancel"||l.type==="credit")return{type:l.type,id:l.id};if(l.type==="ws"&&typeof l.protocol==="string"&&/^[a-zA-Z0-9._-]{0,100}$/.test(l.protocol))return{type:"ws",id:l.id,protocol:l.protocol};if(l.type==="data"&&typeof l.data==="string"&&typeof l.binary==="boolean")return Gt(l.data,p.upload),{type:"data",id:l.id,data:l.data,binary:l.binary};if(l.type==="head"&&et(l.status,200,599)&&Zo(l.headers))return{type:"head",id:l.id,status:l.status,headers:l.headers};if(l.type==="request"&&typeof l.method==="string"&&/^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS)$/.test(l.method)&&typeof l.path==="string"&&Zo(l.headers)&&typeof l.body==="string"&&typeof l.upgrade==="boolean")return Gt(l.body,p.upload),{type:"request",id:l.id,method:l.method,path:Jt(l.path),headers:l.headers,body:l.body,upgrade:l.upgrade};throw Error("preview_frame_invalid")}function $n(e){let l=[...e],f=new Set(l.filter(([w])=>w.toLowerCase()==="connection").flatMap(([,w])=>w.toLowerCase().split(",").map((v)=>v.trim()))),g=new Set(["authorization","proxy-authorization","cookie","set-cookie","host","origin","referer","connection","upgrade","keep-alive","transfer-encoding","te","trailer","content-length","forwarded","alt-svc","service-worker-allowed","clear-site-data","refresh"]);return l.filter(([w])=>!g.has(w.toLowerCase())&&!f.has(w.toLowerCase())&&!/^(x-forwarded-|x-ara-|sec-websocket-|access-control-)/i.test(w))}async function Kn(e){let l;try{return await Promise.race([Promise.resolve().then(e).then((f)=>f===!0||(f===!1?!1:void 0),()=>{return}),new Promise((f)=>{l=setTimeout(()=>f(void 0),p.authorizationMs)})])}finally{clearTimeout(l)}}async function Vt(e){return await Kn(e)===!0}function bn(e,l){let f=new URL(e);if(f.username||f.password||f.search||f.hash||!(f.protocol==="wss:"||f.protocol==="ws:"&&["127.0.0.1","[::1]"].includes(f.hostname))||!new RegExp(`^/${l}/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]{32,}$`).test(f.pathname))throw Error("preview_relay_invalid");return f.href}function yt(e){if(!gn(e)||Object.keys(e).length!==2||typeof e.deviceRelayUrl!=="string")throw Error("preview_open_invalid");return{binding:rt(e.binding),deviceRelayUrl:bn(e.deviceRelayUrl,"device")}}function ns(e){if(!gn(e)||Object.keys(e).length!==1||!("binding"in e))throw Error("preview_close_invalid");return{binding:rt(e.binding)}}import{request as ya}from"http";import{pipeline as va}from"stream";import{constants as Gn,createBrotliCompress as ka,createGzip as Sa}from"zlib";import{WebSocket as qt}from"ws";import{randomBytes as ga,timingSafeEqual as ba}from"crypto";import{createServer as wa}from"net";var os="x-preview-connection";async function ss(e,l){if(l.aborted)throw Error("preview_closed");let f=ga(32).toString("base64url"),g=new Set,w=!1,v=wa((R)=>{if(w||l.aborted||g.size>=p.streams*2)return R.destroy();g.add(R);let M=new AbortController;R.once("close",()=>{g.delete(R),M.abort()}),R.on("error",()=>R.destroy()),R.setTimeout(2000,()=>R.destroy());let Q=Buffer.alloc(0),z=(re)=>{Q=Buffer.concat([Q,re]);let V=Q.indexOf(`\r
|
|
2
|
+
import{ue,Ee,J,xe,de,zt,We,Z,T,H,Wr}from"./vm-hands-entry-lite-8t9xssf9.js";import{Hi,k,je,ye,Ue,te,He,Sn,we,Mt,ae,U,N,ce,Rr,Or,xn}from"./vm-hands-entry-lite-22kfyvnk.js";import{ke,ie,pe,X,Pe,q,Y}from"./vm-hands-entry-lite-k278g9kj.js";import{St,pr,Xe,W,D,O,S}from"./vm-hands-entry-lite-9c95p6n9.js";import{fr,mr,ln,$i,Me,un}from"./vm-hands-entry-lite-88swf2qr.js";import{It,j}from"./vm-hands-entry-lite-q0k6kx6d.js";import{Ji,Rn}from"./vm-hands-entry-lite-ckv17tn8.js";import{G}from"./vm-hands-entry-lite-f5e3dbgk.js";import{gi}from"./vm-hands-entry-lite-gvwdy3rf.js";import{b,h,Bi}from"./vm-hands-entry-lite-09m2cdkw.js";import{E}from"./vm-hands-entry-lite-pgb514h0.js";import{Ht}from"./vm-hands-entry-lite-txn44020.js";import{a,ne,po}from"./vm-hands-entry-lite-89z488gz.js";import{L,pi,hi,_o,y,t,A,mt,o,d,u,i,c,_,oe,s,n}from"./vm-hands-entry-lite-907pa7f9.js";import{mi}from"./vm-hands-entry-lite-0xrsph3r.js";import{wo,se,bo,Re,x,Jr,Oe,I}from"./vm-hands-entry-lite-9ay6f56v.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{execFile as aa}from"child_process";import{createRequire as ca}from"module";import{win32 as hn}from"path";var da=250,la=50,ua=250,fa=4194304;function Go(e){let l=/^(?:\[([^\]]+)\]|([^:]+)):([0-9]{1,5})$/.exec(e??""),f=Number(l?.[3]);return l&&f<=65535?{address:l[1]??l[2],port:f}:null}function pa(e){let l=[];for(let f of e.split(/\r?\n/)){let g=f.trim().split(/\s+/);if(g[0]!=="TCP"||g.length<5)continue;let w=Go(g[1]),v=Go(g[2]),P=Number(g.at(-1));if(!w||!v||!Number.isSafeInteger(P)||P<0)continue;l.push({pid:P,localAddress:w.address,localPort:w.port,remoteAddress:v.address,remotePort:v.port,listening:v.port===0})}return l}function _a(e){if(e.localAddress==="0.0.0.0"||e.localAddress==="::")return`*:${e.localPort}`;return e.localAddress.includes(":")?`[${e.localAddress}]:${e.localPort}`:`${e.localAddress}:${e.localPort}`}var Vo=(e)=>new Promise((l,f)=>aa(hn.join(Re("win32").split(";")[0],"NETSTAT.EXE"),["-ano"],{timeout:e,maxBuffer:fa,encoding:"utf8",windowsHide:!0,env:Jr()},(g,w)=>g?f(g):l(w)));function zn(e){let l=hn.normalize(e.startsWith("\\\\?\\")?e.slice(4):e);return l.length>3&&l.endsWith("\\")?l.slice(0,-1):l}function ma(e,l){let f=e.toLowerCase(),g=l.toLowerCase();return g===f||g.startsWith(f.endsWith("\\")?f:`${f}\\`)}function qo(e,l,f){let g=e.cwd(f),w=g?zn(g):null;return w&&hn.isAbsolute(w)&&ma(l,w)?w:null}var Kt;function wt(){if(Kt!==void 0)return Kt;if(Kt=null,process.platform!=="win32"||!["x64","arm64"].includes(process.arch))return null;let e;try{e=ca(import.meta.url)("bun:ffi")}catch{return null}let{FFIType:l,ptr:f}=e,g,w;try{g=e.dlopen("kernel32.dll",{CreateToolhelp32Snapshot:{args:[l.u32,l.u32],returns:l.u64},Process32FirstW:{args:[l.u64,l.ptr],returns:l.i32},Process32NextW:{args:[l.u64,l.ptr],returns:l.i32},OpenProcess:{args:[l.u32,l.i32,l.u32],returns:l.u64},ReadProcessMemory:{args:[l.u64,l.u64,l.ptr,l.u64,l.ptr],returns:l.i32},CloseHandle:{args:[l.u64],returns:l.i32}}).symbols,w=e.dlopen("ntdll.dll",{NtQueryInformationProcess:{args:[l.u64,l.i32,l.ptr,l.u32,l.ptr],returns:l.i32}}).symbols}catch{return null}let v=0xFFFFFFFFFFFFFFFFn,P=2,F=1040,R=568,M=(Q,z,C)=>{let re=Buffer.alloc(C);return g.ReadProcessMemory(Q,z,f(re),C,null)?re:null};return Kt={processes(){let Q=BigInt(g.CreateToolhelp32Snapshot(P,0));if(Q===v)throw new r("process_inspection_failed","Reading this computer's processes did not complete.");try{let z=Buffer.alloc(R);z.writeUInt32LE(R,0);let C=f(z),re=[];for(let V=g.Process32FirstW(Q,C);V;V=g.Process32NextW(Q,C)){let K=z.toString("utf16le",44,R),_e=K.slice(0,K.includes("\x00")?K.indexOf("\x00"):void 0),ve=z.readUInt32LE(8);if(ve>0)re.push({pid:ve,parentPid:z.readUInt32LE(32),command:_e.replace(/\.exe$/i,"")||null})}return re}finally{g.CloseHandle(Q)}},cwd(Q){let z=BigInt(g.OpenProcess(F,0,Q));if(z===0n)return null;try{let C=Buffer.alloc(48);if(w.NtQueryInformationProcess(z,0,f(C),C.length,null)!==0)return null;let re=M(z,C.readBigUInt64LE(8)+0x20n,8)?.readBigUInt64LE(0),V=re?M(z,re+0x38n,16):null,K=V?.readUInt16LE(0)??0;if(!V||K===0||K%2!==0)return null;return M(z,V.readBigUInt64LE(8),K)?.toString("utf16le")??null}finally{g.CloseHandle(z)}}},Kt}function Un(e){if(!e)throw new r("process_inspection_failed","Reading this computer's processes is unavailable.");return e}async function Yo(e,l){let f;try{f=await e(l)}catch{throw new r("process_inspection_failed","Reading this computer's ports did not complete.")}return pa(f)}async function Si(e,l=wt()){let f=Un(l),g=zn(e),w=[];for(let v of f.processes()){if(w.length>=da)break;let P=qo(f,g,v.pid);if(P)w.push({pid:v.pid,command:v.command,cwd:hn.relative(g,P)||"."})}return{processes:w}}async function Ei(e,l=wt(),f=Vo){let g=Un(l),w=zn(e),v=(await Yo(f,5000)).filter((M)=>M.listening&&M.pid>0).map((M)=>({pid:M.pid,port:M.localPort,address:_a(M)})).sort((M,Q)=>M.pid-Q.pid||M.port-Q.port||(M.address<Q.address?-1:M.address>Q.address?1:0)),P=[...new Set(v.map((M)=>M.pid))].slice(0,la),F=new Set(P.filter((M)=>qo(g,w,M)!==null));if(F.size===0)return{ports:[]};let R=new Map(g.processes().map((M)=>[M.pid,M.command]));return{ports:v.filter((M)=>F.has(M.pid)).slice(0,ua).map((M)=>({pid:M.pid,command:R.get(M.pid)??null,address:M.address}))}}function Jo(e,l){let f=new Set([l]);for(let g=!0;g;){g=!1;for(let w of e)if(!f.has(w.pid)&&f.has(w.parentPid)&&w.pid!==w.parentPid)f.add(w.pid),g=!0}return f}function ha(e,l,f,g){let w=(v)=>v==="127.0.0.1"||v==="::ffff:127.0.0.1"||v==="::1";return e.flatMap((v)=>{if(!l.has(v.pid)||v.localPort!==g)return[];let P=v.listening&&(w(v.localAddress)||["0.0.0.0","::"].includes(v.localAddress)),F=!v.listening&&w(v.localAddress)&&w(v.remoteAddress);if(!P&&!F)return[];let R=`${v.localAddress}:${v.localPort}>${v.remoteAddress}:${v.remotePort}`;return[{pid:v.pid,processGroupId:f,descriptor:String(v.pid),kernelId:R,state:P?"listen":"established",port:g,peerPort:P?null:v.remotePort,host:v.localAddress==="::1"?"::1":"127.0.0.1"}]})}async function Xo(e,l,f=wt(),g=Vo){let w=Un(f),v=Jo(w.processes(),e),P=await Yo(g,1000),F=Jo(w.processes(),e);return ha(P,new Set([...v].filter((R)=>F.has(R))),e,l)}var p={chunk:32768,upload:1048576,total:536870912,streams:16,queued:512,buffered:262144,relayBuffered:8388608,requestMs:30000,lifetimeMs:600000,authorizationMs:2000,window:8};function gn(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function et(e,l,f=Number.MAX_SAFE_INTEGER){return typeof e==="number"&&Number.isSafeInteger(e)&&e>=l&&e<=f}function Qo(e){return typeof e==="string"&&/^[a-zA-Z0-9_-]{1,160}$/.test(e)}function es(e,l){let f=Buffer.from(e,"latin1");return Buffer.concat([Buffer.from([f.length]),f,l])}function rt(e){if(!gn(e)||Object.keys(e).length!==12||![e.organizationId,e.userId,e.runId,e.deviceId,e.rootId,e.jobId,e.fenceId].every(Qo)||!et(e.attachmentRevision,0)||!et(e.grantRevision,1)||!et(e.generation,1)||!et(e.port,1024,65535)||!et(e.expiresAtMs,1))throw Error("preview_binding_invalid");return Object.freeze({...e})}function ut(e,l){return Object.keys(e).every((f)=>e[f]===l[f])}function Jt(e){if(e.length>4096||!e.startsWith("/")||e.startsWith("//")||/[\\\x00-\x20\x7f#]/.test(e))throw Error("preview_path_invalid");let l=decodeURIComponent(e);if(l.startsWith("//")||/[\\\x00-\x1f\x7f]/.test(l))throw Error("preview_path_invalid");return e}function Zo(e){return Array.isArray(e)&&e.length<=64&&e.every((l)=>Array.isArray(l)&&l.length===2&&typeof l[0]==="string"&&/^[a-zA-Z0-9-]{1,80}$/.test(l[0])&&typeof l[1]==="string"&&l[1].length<=4096&&!/[\x00-\x1f\x7f]/.test(l[1]))}function Gt(e,l=p.chunk){if(e.length>Math.ceil(l/3)*4||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e))throw Error("preview_data_invalid");let f=Buffer.from(e,"base64");if(f.length>l)throw Error("preview_data_too_large");return f}function rs(e){if(Array.isArray(e))return Buffer.concat(e);if(typeof e==="string")return Buffer.from(e,"utf8");if(e instanceof ArrayBuffer)return Buffer.from(e);return e}function ts(e){if(Buffer.byteLength(e)>p.upload*1.4+300000)throw Error("preview_frame_too_large");let l=JSON.parse(e);if(!gn(l))throw Error("preview_frame_invalid");if(l.type==="hello")return{type:"hello",binding:rt(l.binding),...et(l.messages,p.chunk,p.upload)?{messages:l.messages}:{},...et(l.window,1,p.window)?{window:l.window}:{},...l.bytes===!0?{bytes:!0}:{}};if(l.type==="refused"&&typeof l.reason==="string"&&/^[a-z_]{1,32}$/.test(l.reason))return{type:"refused",binding:rt(l.binding),reason:l.reason};if(!Qo(l.id))throw Error("preview_frame_invalid");if(l.type==="end"||l.type==="cancel"||l.type==="credit")return{type:l.type,id:l.id};if(l.type==="ws"&&typeof l.protocol==="string"&&/^[a-zA-Z0-9._-]{0,100}$/.test(l.protocol))return{type:"ws",id:l.id,protocol:l.protocol};if(l.type==="data"&&typeof l.data==="string"&&typeof l.binary==="boolean")return Gt(l.data,p.upload),{type:"data",id:l.id,data:l.data,binary:l.binary};if(l.type==="head"&&et(l.status,200,599)&&Zo(l.headers))return{type:"head",id:l.id,status:l.status,headers:l.headers};if(l.type==="request"&&typeof l.method==="string"&&/^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS)$/.test(l.method)&&typeof l.path==="string"&&Zo(l.headers)&&typeof l.body==="string"&&typeof l.upgrade==="boolean")return Gt(l.body,p.upload),{type:"request",id:l.id,method:l.method,path:Jt(l.path),headers:l.headers,body:l.body,upgrade:l.upgrade};throw Error("preview_frame_invalid")}function $n(e){let l=[...e],f=new Set(l.filter(([w])=>w.toLowerCase()==="connection").flatMap(([,w])=>w.toLowerCase().split(",").map((v)=>v.trim()))),g=new Set(["authorization","proxy-authorization","cookie","set-cookie","host","origin","referer","connection","upgrade","keep-alive","transfer-encoding","te","trailer","content-length","forwarded","alt-svc","service-worker-allowed","clear-site-data","refresh"]);return l.filter(([w])=>!g.has(w.toLowerCase())&&!f.has(w.toLowerCase())&&!/^(x-forwarded-|x-ara-|sec-websocket-|access-control-)/i.test(w))}async function Kn(e){let l;try{return await Promise.race([Promise.resolve().then(e).then((f)=>f===!0||(f===!1?!1:void 0),()=>{return}),new Promise((f)=>{l=setTimeout(()=>f(void 0),p.authorizationMs)})])}finally{clearTimeout(l)}}async function Vt(e){return await Kn(e)===!0}function bn(e,l){let f=new URL(e);if(f.username||f.password||f.search||f.hash||!(f.protocol==="wss:"||f.protocol==="ws:"&&["127.0.0.1","[::1]"].includes(f.hostname))||!new RegExp(`^/${l}/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]{32,}$`).test(f.pathname))throw Error("preview_relay_invalid");return f.href}function yt(e){if(!gn(e)||Object.keys(e).length!==2||typeof e.deviceRelayUrl!=="string")throw Error("preview_open_invalid");return{binding:rt(e.binding),deviceRelayUrl:bn(e.deviceRelayUrl,"device")}}function ns(e){if(!gn(e)||Object.keys(e).length!==1||!("binding"in e))throw Error("preview_close_invalid");return{binding:rt(e.binding)}}import{request as ya}from"http";import{pipeline as va}from"stream";import{constants as Gn,createBrotliCompress as ka,createGzip as Sa}from"zlib";import{WebSocket as qt}from"ws";import{randomBytes as ga,timingSafeEqual as ba}from"crypto";import{createServer as wa}from"net";var os="x-preview-connection";async function ss(e,l){if(l.aborted)throw Error("preview_closed");let f=ga(32).toString("base64url"),g=new Set,w=!1,v=wa((R)=>{if(w||l.aborted||g.size>=p.streams*2)return R.destroy();g.add(R);let M=new AbortController;R.once("close",()=>{g.delete(R),M.abort()}),R.on("error",()=>R.destroy()),R.setTimeout(2000,()=>R.destroy());let Q=Buffer.alloc(0),z=(re)=>{Q=Buffer.concat([Q,re]);let V=Q.indexOf(`\r
|
|
3
3
|
\r
|
|
4
4
|
`);if(V<0){if(Q.length>16384)R.destroy();return}if(R.pause(),R.off("data",z),V>16384||Q.length>p.upload+16384)return R.destroy();C(Q,V).catch(()=>R.destroy())};R.on("data",z);async function C(re,V){let K=re.subarray(0,V).toString("latin1").split(`\r
|
|
5
5
|
`),_e=/^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS) (\S+) HTTP\/1\.1$/.exec(K.shift()??"");if(!_e)throw Error("preview_request_invalid");Jt(_e[2]);let ve=!1,he=0,Ie=[];for(let be of K){let Fe=/^([a-zA-Z0-9-]+):[ \t]*([^\x00-\x08\x0a-\x1f\x7f]*)$/.exec(be);if(!Fe)throw Error("preview_header_invalid");if(Fe[1].toLowerCase()===os){he++;let qe=Buffer.from(Fe[2].trim());ve=qe.length===f.length&&ba(qe,Buffer.from(f))}else if(Fe[1].toLowerCase()!=="host")Ie.push(be)}if(!ve||he!==1||w||M.signal.aborted)throw Error("preview_connection_denied");let De=await e.connect(M.signal);if(w||M.signal.aborted)throw De.destroy(),Error("preview_closed");g.add(De),De.on("error",()=>R.destroy()),De.once("close",()=>{g.delete(De),R.destroy()}),R.once("close",()=>De.destroy()),R.setTimeout(0);let Te=[`${_e[1]} ${_e[2]} HTTP/1.1`,`Host: 127.0.0.1:${De.remotePort}`,...Ie,"",""].join(`\r
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{C}from"./vm-hands-entry-lite-t7an5zg2.js";import{g}from"./vm-hands-entry-lite-ckv17tn8.js";import{Nr,Pn,Lr,Tn}from"./vm-hands-entry-lite-qysyf65v.js";import{Ln,Ut,lo}from"./vm-hands-entry-lite-
|
|
2
|
+
import{C}from"./vm-hands-entry-lite-t7an5zg2.js";import{g}from"./vm-hands-entry-lite-ckv17tn8.js";import{Nr,Pn,Lr,Tn}from"./vm-hands-entry-lite-qysyf65v.js";import{Ln,Ut,lo}from"./vm-hands-entry-lite-2hvbgp1n.js";import{x}from"./vm-hands-entry-lite-9ay6f56v.js";import{spawnSync as v}from"child_process";import{createHash as ke,randomUUID as Se}from"crypto";import{chmodSync as we,existsSync as P,mkdirSync as $e,readdirSync as Ve,readFileSync as k,renameSync as ye,rmSync as u,statSync as ve,writeFileSync as We}from"fs";import{dirname as Ae,isAbsolute as Y,join as p}from"path";import{spawnSync as de}from"child_process";import{readFileSync as me}from"fs";import{userInfo as D}from"os";import{join as fe}from"path";var ge="REASON_SCHEDULED_TASK";function H(r){return fe(r,"AppData","Local","Reason","Tasks")}function w(r){if(/[\0-\x1f\x7f"%]/.test(r))throw Error(`A background task cannot use a value with a double quote, percent sign or control character: ${r}`);return`'${r.replace(/['\u2018\u2019\u201a\u201b]/g,"$&$&")}'`}function M(r){if(!/^[A-Za-z0-9._-]+$/.test(r))throw Error(`Invalid Windows Scheduled Task name: ${r}`);return`$env:${ge}=${w(r)};`}function U(r){let e=Object.entries(r.environment).map(([t,i])=>{if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(t))throw Error(`Invalid Windows Scheduled Task environment name: ${t}`);return`$env:${t}=${w(i)};`}),n=`$global:LASTEXITCODE=1; & ${[r.program,...r.args].map(w).join(" ")} 2>&1 | ForEach-Object { Add-Content -LiteralPath ${w(r.log)} -Value $_.ToString() -Encoding UTF8 }; $c=$LASTEXITCODE;`;return[M(r.name),...e,"$ErrorActionPreference='Continue';",r.keepAlive?`do { ${n} if ($c) { Start-Sleep -Seconds 10 } } while ($c)`:`${n} exit $c`].join(" ")}function I(r){return r.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function pe(){let r=process.env.USERDOMAIN?.trim();return r?`${r}\\${D().username}`:D().username}function B(r){let e=I(r.user??pe()),n=r.schedule==="logon",t=r.schedule==="logon"?`<LogonTrigger><Enabled>true</Enabled><UserId>${e}</UserId></LogonTrigger>`:`<TimeTrigger><Repetition><Interval>PT${r.schedule.everyMinutes}M</Interval><StopAtDurationEnd>false</StopAtDurationEnd></Repetition><StartBoundary>2026-01-01T00:00:00</StartBoundary><Enabled>true</Enabled></TimeTrigger>`,i=`-NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -Command "${r.script}"`;return`<?xml version="1.0" encoding="UTF-16"?>
|
|
3
3
|
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
|
|
4
4
|
<RegistrationInfo>
|
|
5
5
|
<Description>${I(r.description)}</Description>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{v,On,oo,Fr,In,ze,Dn,Nn}from"./vm-hands-entry-lite-eqgj4acy.js";import{Mn}from"./vm-hands-entry-lite-
|
|
2
|
+
import{v,On,oo,Fr,In,ze,Dn,Nn}from"./vm-hands-entry-lite-eqgj4acy.js";import{Mn}from"./vm-hands-entry-lite-2hvbgp1n.js";import{kn}from"./vm-hands-entry-lite-f5e3dbgk.js";import{gt}from"./vm-hands-entry-lite-gvwdy3rf.js";import{vr}from"./vm-hands-entry-lite-1rtkf2xm.js";import{j}from"./vm-hands-entry-lite-q0k6kx6d.js";import{a}from"./vm-hands-entry-lite-89z488gz.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{execFile as Cs,spawn as Ar}from"child_process";import{randomBytes as Ns}from"crypto";import{chmodSync as vs,existsSync as kr,lstatSync as Ls,mkdirSync as Ms,readFileSync as Qs,rmSync as Us,writeFileSync as at}from"fs";import{connect as Os}from"net";import{join as X}from"path";var St="./desktop-wallpaper-0pjhgyfk.jpg";var _t="./dock-browser-afp005mt.png";var wt="./dock-files-rywdm96b.png";var qt="./dock-terminal-s41cj1jp.png";var Et=`# Sets the X root window background and _XROOTPMAP_ID, as feh --bg-fill does.
|
|
3
3
|
# The native Blaxel image ships no feh, hsetroot or compositor, but it does ship
|
|
4
4
|
# python3-gi and libX11. tint2 reads _XROOTPMAP_ID to draw its transparent panel.
|
|
5
5
|
# Usage: DISPLAY=:99 python3 set-root-wallpaper.py IMAGE
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{g,Ki,ve}from"./vm-hands-entry-lite-ckv17tn8.js";import{l,Rt,Fe,Sr,Ot,xr,et}from"./vm-hands-entry-lite-q0k6kx6d.js";import{ut,Gt}from"./vm-hands-entry-lite-k278g9kj.js";import{Qr}from"./vm-hands-entry-lite-
|
|
2
|
+
import{g,Ki,ve}from"./vm-hands-entry-lite-ckv17tn8.js";import{l,Rt,Fe,Sr,Ot,xr,et}from"./vm-hands-entry-lite-q0k6kx6d.js";import{ut,Gt}from"./vm-hands-entry-lite-k278g9kj.js";import{Qr}from"./vm-hands-entry-lite-2wvsyggd.js";import{B,m,ee,Le}from"./vm-hands-entry-lite-463m6ejk.js";import{F}from"./vm-hands-entry-lite-ewwx4fr3.js";import{co}from"./vm-hands-entry-lite-2hvbgp1n.js";import{be,qe,An,Dr}from"./vm-hands-entry-lite-cc2tgsqp.js";import{f,b,h}from"./vm-hands-entry-lite-09m2cdkw.js";import{a}from"./vm-hands-entry-lite-89z488gz.js";import{go,Gr,y,t,A,mt,o,d,Te,u,i,c,_,$o,s,n,Kr}from"./vm-hands-entry-lite-907pa7f9.js";import{closeSync as Kh,existsSync as Vh,mkdirSync as Jh,openSync as Gh,readdirSync as Yh,realpathSync as pe,rmSync as Xh}from"fs";import{dirname as Qh,join as J,resolve as ew}from"path";import{createHash as At}from"crypto";import{platform as It}from"os";import{join as xt}from"path";var Lt=_("store",[c({version:n(1),store:n("keychain")}),c({version:n(1),store:n("file"),api_key:t().min(1).max(4096)})]),He=(e)=>xt(e,"api-key.json");function $e(e){let r=At("sha256").update(`reason-connect-api-key
|
|
3
3
|
${e}`).digest("hex");return new Fe(Rt(),It(),r)}function ge(e,r=$e(e)){if(!f(He(e)))return null;let p=Lt.parse(JSON.parse(h(He(e))));if(p.store==="file")return p.api_key;try{let k=r.loadBinding();return k?new TextDecoder().decode(k):null}catch(k){if(!(k instanceof l))throw k;throw Error("worker_api_key_unreadable")}}import{readdirSync as Yt,renameSync as Kn,rmSync as Vn}from"fs";import{join as te}from"path";import{createHash as Dt}from"crypto";import{platform as Wt}from"os";import{join as N}from"path";function w(e){return{state:N(m(e),"device.json"),control:N(m(e),"control.json"),lock:N(m(e),"lifecycle.lock"),socket:N(m(e),"control.sock"),daemon:N(m(e),"daemon.json"),releaseCheck:N(m(e),"release-check.json"),updateDeferral:N(m(e),"update-deferral.json"),firstHeartbeat:N(m(e),"first-heartbeat.json")}}var ln=i({version:n(1),device_id:t().min(1).max(160),offer:Te().optional(),enrollment_ms:o().int().nonnegative().max(Gt).optional()});function z(e,r=!1){b(m(e),r);let p=["local-device.key","local-device.binding","device.json"].filter((k)=>{let S=N(m(e),k);if(!f(S))return!1;return h(S),!0});return e.lifetime==="persistent"&&p.join()==="device.json"?Nt(e):new Sr(m(e))}function Nt(e){return new Fe(Rt(),Wt(),Ht(e))}function Ht(e){let r=Ut(e);return Dt("sha256").update(`reason-worker
|
|
4
4
|
${r?.directory??m(e)}`).digest("hex")}var $t="keychain-scope.json";var Bt=c({version:n(1),directory:t().min(1),devicePublicKey:t().min(1)});function Ut(e){let r=N(m(e),$t);if(!f(r))return null;let p=Bt.safeParse(JSON.parse(h(r))),k=w(e).state;if(!p.success||!f(k))return null;return JSON.parse(h(k))?.devicePublicKey===p.data.devicePublicKey?p.data:null}function M(e){if(!f(m(e)))return null;let r=xr(w(e).state,{proofStore:z(e),repair:!1}),p=r!==null&&Ki(e.apiOrigin,r.apiOrigin),k=p?[ee(e),ee({...e,apiOrigin:r.apiOrigin})]:[ee(e)];if(r&&(!k.includes(r.worker?.configDigest??"")||r.worker.lifetime!==e.lifetime||r.apiOrigin!==e.apiOrigin&&!p||r.roots.length>32||r.roots[0]?.path!==e.workspaceRoot||r.handsSlots!==e.slots))throw Error("worker_config_binding_mismatch");return r}var Ft=c({version:n(1),drained:d(),revoked:d()});function H(e){let r=w(e).control;return f(r)?Ft.parse(JSON.parse(h(r))):{version:1,drained:!1,revoked:!1}}var qt=c({read:d(),write:d(),execute:d(),discover_environment:d(),expose_mcp:n(!1)}),zt=c({version:n(1),organization_id:t().min(1).max(160),enrollment_ticket:t().min(1).max(4096),code_verifier:t().regex(/^[A-Za-z0-9._~-]{43,128}$/),root_fingerprint_key:t().regex(/^[a-f0-9]{64}$/),root:c({path_fingerprint:t().regex(/^[a-f0-9]{64}$/),permissions:qt,execution_mode:s(["confined","host"]).default("confined")}),folders:u(c({path_fingerprint:t().regex(/^[a-f0-9]{64}$/)})).min(1).max(31).optional()}),vn=i({device_id:t().min(1).max(160),organization_id:t().min(1).max(160),auth_scheme:n("p256"),protocol_version:n(2),roots:u(i({id:t().min(1),label:t(),path_fingerprint:t()})).min(1).max(32),headless:i({lifecycle:s(["persistent","ephemeral"]),expires_at:y.datetime({offset:!0})}),first_heartbeat:Te().optional()});var Un=c({version:n(1),install_id:A(),fingerprint_key:t().regex(/^[a-f0-9]{64}$/)}),Fn=i({enrollment_ticket:t().min(1).max(4096),expires_at:y.datetime({offset:!0}),device_kind:n("headless"),lifecycle:s(["persistent","ephemeral"]),device_expires_at:y.datetime({offset:!0})});var jn=i({credentialKind:s(["oauth","api_key"]).optional(),apiOrigin:mt(),clientId:t(),accessToken:t().min(1).max(32768),refreshToken:t().max(32768),expiresAt:y.datetime({offset:!0}),scopes:u(t().max(128)).max(128),orgId:t().min(1).max(160)});var ze=8;var Zt=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,_e=(e)=>te(m(e),"workspaces"),Qt="account.json",er=(e)=>f(te(e,Qt));function Re(e){let r;try{r=Yt(_e(e))}catch{return[]}return r.filter((p)=>Zt.test(p)).sort().map((p)=>{let k=te(_e(e),p),S=te(k,"worker.json"),v=null;try{let P=B.safeParse(JSON.parse(h(S)));if(P.success&&P.data.stateDirectory===k)v=P.data}catch{}return{organizationId:p,directory:k,configPath:S,config:v,account:er(k)}})}var tr=(e)=>te(_e(e),"listed.json");function rr(e){try{let r=JSON.parse(h(tr(e))),p=r.names&&typeof r.names==="object"&&!Array.isArray(r.names)?Object.fromEntries(Object.entries(r.names).filter((k)=>typeof k[1]==="string")):{};return{listed:r.listed===!0,reason:r.reason==="sign_in"?"sign_in":null,blocked:Array.isArray(r.blocked)?r.blocked.filter((k)=>typeof k==="string"):[],names:p}}catch{return null}}function Ve(e,r){let p=Re(e),k=p.filter((E)=>E.account),S=p.filter((E)=>!E.account),v=rr(e),P=v&&!v.listed?v.reason:null,R=P||S.length===0&&v&&!v.listed?[]:S;if(k.length===0&&R.length===0&&(P||v&&!v.listed))return{workspaces:null,off:P};return{off:P,workspaces:[...k,...R].map(({organizationId:E,config:L,account:x})=>{let C=!1,T=null,D=!1,he=null;try{C=L?H(L).revoked:!1,T=L&&!C?M(L):null;let Ne=L?et(w(L).daemon):null;D=r&&!!T&&Ne?.state==="connected",he=D?Ot(Ne,T):null}catch{}return{...he?{permission_recovery:he}:{},organization_id:E,device_id:T?.deviceId??null,name:v?.names?.[E]??null,root:T?.roots[0]?{id:T.roots[0].id,permissions:T.roots[0].permissions}:null,state:C?"removed":D?"connected":"not_running",blocked:!x&&!C&&!D&&(v?.blocked.includes(E)??!1),...x?{account:!0}:{}}})}}import{readFileSync as nr}from"fs";function Xt(e){try{let r=JSON.parse(nr(`${e}.keep-awake.json`,"utf8"));return r!==null&&typeof r==="object"&&"version"in r&&r.version===1&&"enabled"in r&&r.enabled===!0?"battery_and_ac":void 0}catch(r){return r.code==="ENOENT"?"battery_and_ac":void 0}}import{chmodSync as Bi,lstatSync as Qe,mkdtempSync as Ui,realpathSync as ir,rmdirSync as Fi,rmSync as ji,unlinkSync as qi}from"fs";import{createConnection as ar,createServer as Vi}from"net";import{basename as Ye,dirname as Xe,join as oe}from"path";var sr=s(["status","drain","resume","stop","reload_roots"]),cr=c({version:n(1),instanceId:t(),deviceId:t(),phase:s(["starting","running","reconnecting","stopping"]),drained:d(),activeClaims:o().int().nonnegative(),activeSessions:o().int().nonnegative().optional(),executionEligible:d(),supportedOperations:u(s(ut)).max(ut.length).optional(),capabilityReadiness:$o(s(ut),d()).optional(),lastHeartbeat:t().nullable(),expiresAt:t()}),Qi=c({nonce:t(),action:sr}),lr=i({nonce:A()}),dr=c({version:n(1),nonce:A(),socketPath:t().max(100)});function ur(e){return oe(w(e).lock,"control.json")}function tt(e){return b(w(e).lock),lr.parse(JSON.parse(h(oe(w(e).lock,"owner.json"))))}function Ze(e){if(!f(e))return!1;let r=Qe(e);if(!r.isSocket()||r.uid!==process.getuid?.()||(r.mode&63)!==0)throw Error("worker_control_socket_not_private");return!0}function rt(e,r){let p=ur(e);if(!f(p)){let v=w(e).socket;if(!f(v)||!Qe(v).isSocket())return null;return Ze(v)?v:null}let k=dr.parse(JSON.parse(h(p)));if(k.nonce!==r)throw Error("worker_instance_changed");if(process.platform==="win32"){if(!fr.test(k.socketPath))throw Error("worker_control_endpoint_invalid");return k.socketPath}let S=Xe(k.socketPath);if(Xe(S)!==ir("/tmp")||!/^(?:reason|ara)-worker-[A-Za-z0-9]{6}$/.test(Ye(S))||Ye(k.socketPath)!=="control.sock"||Buffer.byteLength(k.socketPath)>100)throw Error("worker_control_endpoint_invalid");if(!f(S))return null;return b(S),Ze(k.socketPath)?k.socketPath:null}var fr=/^\\\\\.\\pipe\\reason-worker-[0-9a-f-]{36}$/;function mr(e,r){try{let p=JSON.parse(h(oe(w(e).lock,"owner.json"))),k=p&&typeof p==="object"?p[r]:void 0;return typeof k==="string"?k:null}catch{return null}}function ot(e){return mr(e,"runtime_version")}function nt(e,r){if(r)return r.message==="worker_control_timeout"?"socket_timeout":"bad_reply";try{if(!f(oe(w(e).lock,"owner.json")))return"no_lock";return rt(e,tt(e).nonce)?"socket_refused":"no_socket"}catch{return"bad_reply"}}var ea=c({instance:t().nullable(),since:o().int().nonnegative()});async function G(e,r){let p=w(e);if(!f(oe(p.lock,"owner.json")))return null;let k=tt(e),S=rt(e,k.nonce);if(!S)return null;return new Promise((v,P)=>{let R=ar(S),E="",L=!1,x=(C,T)=>{if(L)return;if(L=!0,R.destroy(),T)P(T);else v(C)};R.setTimeout(2000,()=>R.destroy(Error("worker_control_timeout"))),R.on("connect",()=>R.write(JSON.stringify({nonce:k.nonce,action:r})+`
|
|
5
5
|
`)),R.on("data",(C)=>{if(E+=C.toString(),Buffer.byteLength(E)>16384)R.destroy(Error("worker_control_oversize"))}),R.on("error",(C)=>{if("code"in C&&["ECONNREFUSED","ENOENT"].includes(String(C.code)))x(null);else x(null,C.message==="worker_control_timeout"?C:Error("worker_control_unavailable"))}),R.on("end",()=>{try{let C=cr.parse(JSON.parse(E));if(C.instanceId!==k.nonce)throw Error("worker_instance_changed");x(C)}catch{x(null,Error("worker_control_invalid_response"))}}),R.once("close",()=>x(null,Error("worker_control_unavailable")))})}import{realpathSync as gr}from"fs";import{constants as Pe}from"fs";import{open as pr}from"fs/promises";var sa={platform:process.platform,home:a,async openFile(e){let r=await pr(e,Pe.O_RDONLY|Pe.O_NOFOLLOW|Pe.O_NONBLOCK);return{isFile:async()=>(await r.stat()).isFile(),close:()=>r.close()}}};var Fa=co(gr(process.execPath));var Ps=Buffer.from([0,255,3,4]);import{execFile as to}from"child_process";import{promisify as ro}from"util";var vr=new RegExp("^/media/pr-screenshots/([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/([a-z0-9][a-z0-9._-]*)\\.(png|jpe?g|gif|webp|webm|mp4)$","i");var Rr=new Set(["png","jpg","jpeg","gif","webp"]),Pr=new Set(["webm","mp4"]);function Er(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function st(e,r){let p;try{p=new URL(e)}catch{return null}let k=Er(r),S=p.hostname==="ara.so"||p.hostname.endsWith(".ara.so")||p.hostname==="reasonmachines.ai"||p.hostname.endsWith(".reasonmachines.ai")||p.hostname==="reasonmachines.com"||p.hostname.endsWith(".reasonmachines.com");if(p.protocol!=="https:"||!S&&p.origin!==k||p.username||p.password||p.port||p.search||p.hash)return null;let v=vr.exec(p.pathname);if(!v)return null;let P=v[1]?.toLowerCase(),R=v[2]?.toLowerCase(),E=v[3]?.toLowerCase(),L=v[4]?.toLowerCase();if(!P||!R||!E||!L)return null;let x=Rr.has(L)?"image":Pr.has(L)?"video":null;if(!x)return null;let C=/^(before|after)[\s:_-]+/.exec(E),T=p.pathname.replace(/^\/media\//,"");return{url:p.toString(),storagePath:T,runId:P,artifactId:R,fileName:`${E}.${L}`,kind:x,phase:C?.[1]==="before"||C?.[1]==="after"?C[1]:null}}var Cr=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,ct=(e)=>Boolean(e&&typeof e==="object"&&!Array.isArray(e)),K=()=>{throw Error("cloud_browser_media_request_invalid")};function Ce(e){if(!ct(e)||Object.keys(e).some((v)=>!["runId","configuredMediaOrigin","media"].includes(v))||typeof e.runId!=="string"||!Cr.test(e.runId)||typeof e.configuredMediaOrigin!=="string"||e.configuredMediaOrigin.length>2048||!Array.isArray(e.media)||e.media.length<1||e.media.length>8)return K();let r;try{r=new URL(e.configuredMediaOrigin)}catch{return K()}if(r.protocol!=="https:"||r.username||r.password||r.port||!Le(r.origin,{mode:"public_web"}).allowed)return K();let p=e.runId.toLowerCase(),k=new Set,S=e.media.map((v)=>{if(!ct(v)||Object.keys(v).some((R)=>!["url","sourceUrl","kind"].includes(R))||typeof v.url!=="string"||v.url.length>2048||typeof v.sourceUrl!=="string"||v.sourceUrl.length>8192||!["image","video"].includes(String(v.kind)))return K();let P=st(v.url,r.origin);if(!P||new URL(P.url).origin!==r.origin||P.runId!==p||P.kind!==v.kind||P.url!==v.url||k.has(v.url))return K();if(k.add(v.url),v.sourceUrl!==v.url){let R;try{R=new URL(v.sourceUrl)}catch{return K()}let E=/^\/(?:[a-f0-9]{40}|[a-f0-9]{64})\/([a-f0-9]+)$/.exec(R.pathname)?.[1];if(v.kind!=="image"||R.origin!=="https://camo.githubusercontent.com"||R.username||R.password||R.search||R.hash||!E||E.length%2!==0||Buffer.from(E,"hex").toString("utf8")!==v.url)return K()}return{url:v.url,sourceUrl:v.sourceUrl,kind:v.kind}});return{runId:e.runId,configuredMediaOrigin:r.origin,media:S}}var I=t().uuid(),X=t().regex(/^[a-f0-9]{64}$/),V=y.datetime({precision:3}),Ae=t().regex(/^[a-zA-Z0-9_-]{1,160}$/),ft=t().max(2048).regex(/^https:\/\/github\.com\/[A-Za-z0-9_-]+\/[A-Za-z0-9_.-]+\/pull\/[1-9][0-9]*$/).refine((e)=>![".",".."].includes(e.split("/")[4])),U=i({kind:n("primary_mac"),version:n(1),organizationId:Ae,userId:Ae,sessionId:Ae,runId:I,deviceId:I,rootId:I,rootRevision:t().min(1).max(64),binding:s(["workspace_source","mcp_control"]),targetRevision:o().int().nonnegative(),generation:I,profile:t().regex(/^(Default|Profile [0-9]+)$/),extensionInstanceId:t().min(1).max(1024)}).strict().refine((e)=>e.binding!=="workspace_source"||e.targetRevision===0),Ar=Kr().transform((e,r)=>{try{return Qr(e)}catch{return r.addIssue({code:"custom",message:"proof_visual_contract_invalid"}),go}}),ue=i({version:n(1),owner:U,contextId:I,preparedAt:V,expiresAt:V,prUrl:ft,headSha:t().regex(/^[a-f0-9]{40}$/),skillDigest:X,evidenceKind:s(["image","video"]),visualPlan:Ar.optional(),uploadOrigin:t().url().refine((e)=>{let r=new URL(e);return r.protocol==="https:"&&r.origin===e&&!r.username&&!r.password}).optional()}).strict().refine((e)=>Date.parse(e.expiresAt)>Date.parse(e.preparedAt)&&Date.parse(e.expiresAt)-Date.parse(e.preparedAt)<=300000),Ir=i({version:n(1),producer:n("primary_mac"),context:ue,captureId:I,operationId:I,attemptId:I,tabId:o().int().positive(),startedAt:V,finishedAt:V,sha256:X,media:_("contentType",[i({contentType:n("image/png"),sizeBytes:o().int().min(24).max(8388608),width:o().int().min(1).max(4096),height:o().int().min(1).max(4096)}).strict(),i({contentType:n("video/webm"),sizeBytes:o().int().min(128).max(10485760),durationSeconds:o().min(0.05).max(15),frameCount:o().int().min(1).max(450),receivedFrameCount:o().int().min(1).max(2000)}).strict()])}).strict().superRefine((e,r)=>{let p=Date.parse(e.startedAt),k=Date.parse(e.finishedAt);if(p<Date.parse(e.context.preparedAt)||k<p||k>Date.parse(e.context.expiresAt)||k-p>30000||e.media.contentType==="video/webm"&&(e.media.receivedFrameCount<e.media.frameCount||Math.abs((k-p)/1000-e.media.durationSeconds)>0.1))r.addIssue({code:"custom",message:"mac_pr_proof_capture_chronology_invalid"})}),vc=_("action",[i({action:n("screenshot"),context_id:I,tab_id:o().int().positive()}).strict(),i({action:n("start_video"),context_id:I,tab_id:o().int().positive(),seconds:o().int().min(1).max(15)}).strict(),i({action:n("stop_video"),recording_operation_id:I}).strict()]),fe=i({login:t().regex(/^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,37}[a-zA-Z0-9])?$/),id:t().regex(/^[1-9][0-9]{0,19}$/).nullable()}).strict(),ce=t().regex(/^[1-9][0-9]{0,19}$/),le=i({version:n(1),owner:U,expectedActorId:ce.nullable(),repositoryId:ce,repositoryFullName:t().max(200).regex(/^[A-Za-z0-9_-]+\/[A-Za-z0-9_.-]+$/).refine((e)=>![".",".."].includes(e.split("/")[1]))}).strict(),Or=["browser_unavailable","github_page_unavailable","identity_check_failed","operation_incomplete","attachment_unavailable"],Lr=_("status",[le.extend({status:n("ready"),observedActor:fe,checkedAt:V}),le.extend({status:n("not_ready"),reason:s(["authentication_required","identity_mismatch","authority_lost","unavailable"]),cause:s(Or).optional()})]).refine((e)=>e.status!=="ready"||e.expectedActorId===null||e.observedActor.id===e.expectedActorId),Y=i({version:n(1),owner:U,expectedActorId:ce.nullable(),authenticatedActor:fe,attemptId:I,captureId:I,prUrl:ft,repositoryId:ce,headSha:t().regex(/^[a-f0-9]{40}$/),sha256:X,sizeBytes:o().int().min(128).max(10485760),contentType:n("video/webm")}).strict(),pt=t().regex(/^https:\/\/github\.com\/user-attachments\/assets\/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/),Mr=_("status",[Y.extend({status:n("not_attempted"),reason:s(["authentication_required","attachment_unavailable","identity_mismatch","capture_invalid","authority_lost"])}),Y.extend({status:n("uncertain"),reason:n("upload_outcome_unknown")}),Y.extend({status:n("uploaded"),observedActor:fe,nativeUrl:pt,uploadedAt:V})]).refine((e)=>(e.expectedActorId===null||e.authenticatedActor.id===e.expectedActorId)&&(e.status!=="uploaded"||e.observedActor.id===e.authenticatedActor.id&&e.observedActor.login===e.authenticatedActor.login)),de=Y.extend({nativeUrl:pt,observedActor:fe,bodySha256:X}),Tr=_("status",[de.extend({status:n("incomplete"),reason:s(["authentication_required","identity_mismatch","playback_unverified","authority_lost"])}),de.extend({status:n("verified"),sourceSha256:X,width:o().int().min(1).max(4096),height:o().int().min(1).max(4096),durationSeconds:o().positive().max(30),advancedSeconds:o().min(0.05).max(10),advancedFrames:o().int().positive(),playbackRestored:n(!0),verifiedAt:V})]).refine((e)=>(e.expectedActorId===null||e.authenticatedActor.id===e.expectedActorId)&&e.observedActor.id===e.authenticatedActor.id&&e.observedActor.login===e.authenticatedActor.login&&(e.status!=="verified"||e.sourceSha256===e.sha256)),Wr=Kr().transform((e,r)=>{try{let p=Ce(e);if(p.media.some((k)=>k.kind!=="image"))throw Error();return p}catch{return r.addIssue({code:"custom",message:"proof_media_request_invalid"}),go}}),Nr=_("action",[i({action:n("auth_check"),input:le}).strict(),i({action:n("prepare"),context:ue}).strict(),i({action:n("capture_png"),owner:U,contextId:I,tabId:o().int().positive()}).strict(),i({action:n("start_video"),owner:U,contextId:I,tabId:o().int().positive(),seconds:o().int().min(1).max(15)}).strict(),i({action:n("inspect_capture"),owner:U,captureId:I}).strict(),i({action:n("publish_video"),input:Y}).strict(),i({action:n("verify_png_media"),owner:U,media:Wr}).strict().refine((e)=>e.media.runId===e.owner.runId),i({action:n("verify_saved_media"),input:de}).strict(),i({action:n("publish_png"),owner:U,attemptId:I,captureId:I,sha256:X,sizeBytes:o().int().min(24).max(8388608),storagePath:t().max(512),uploadUrl:t().url().max(8192)}).strict()]);var Hr=i({requestId:I,command:Nr}).strict();var $r={type:"object",required:["action"],properties:{action:{type:"string",enum:["screenshot","start_video","stop_video"]},context_id:{type:"string",format:"uuid"},tab_id:{type:"integer",minimum:1},seconds:{type:"integer",minimum:1,maximum:15},recording_operation_id:{type:"string",format:"uuid"}},additionalProperties:!1},lt={type:"string",format:"uuid",description:"capture_context_id from tools.pr.prepareProof."},dt={type:"integer",minimum:1,description:"An already-owned tab's id."},Sc={...$r,oneOf:[{type:"object",required:["action","context_id","tab_id"],additionalProperties:!1,properties:{action:{type:"string",const:"screenshot"},context_id:lt,tab_id:dt}},{type:"object",required:["action","context_id","tab_id","seconds"],additionalProperties:!1,properties:{action:{type:"string",const:"start_video"},context_id:lt,tab_id:dt,seconds:{type:"integer",minimum:1,maximum:15}}},{type:"object",required:["action","recording_operation_id"],additionalProperties:!1,properties:{action:{type:"string",const:"stop_video"},recording_operation_id:{type:"string",format:"uuid",description:"The recording_operation_id start_video returned."}}}]};var Ac=i({operationId:t().uuid(),attemptId:t().uuid(),contextId:t().uuid(),tabId:o().int().positive()}).strict();var Br=String.raw`async (media) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{C}from"./vm-hands-entry-lite-t7an5zg2.js";import{jr}from"./vm-hands-entry-lite-
|
|
2
|
+
import{C}from"./vm-hands-entry-lite-t7an5zg2.js";import{jr}from"./vm-hands-entry-lite-2hvbgp1n.js";import{rt}from"./vm-hands-entry-lite-1rrb66r9.js";import{a}from"./vm-hands-entry-lite-89z488gz.js";import{I}from"./vm-hands-entry-lite-9ay6f56v.js";import{randomUUID as f}from"crypto";import{chmodSync as U,closeSync as h,constants as g,existsSync as me,fstatSync as F,lstatSync as R,mkdirSync as B,openSync as G,readFileSync as Y,readdirSync as z,readlinkSync as J,realpathSync as x,renameSync as _,rmSync as p,statSync as K,symlinkSync as _t,unlinkSync as M,writeFileSync as L}from"fs";import{basename as vt,dirname as N,isAbsolute as fe,join as c,relative as ge,resolve as b,sep as _e}from"path";import{createRequire as H}from"module";var q=1,j=1,ye=128,ve=65536;var he=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;var P=/^[a-z0-9_.-]{1,80}$/,be=64,Ee="so.ara.device-broker",Me=[Ee,"com.reasonmachines.device-broker"],Pt=jr(Me);var we=["service.install_started","service.install_completed","service.install_failed","service.launcher_adopted","service.launcher_conflict","service.started","service.reconnecting","service.reconnected","service.idle_sleep_held","service.idle_sleep_released","service.idle_sleep_failed","service.start_failed","service.stopped","service.exit_failed","service.singleton_rejected","credential.migration_started","credential.migration_completed","credential.migration_failed","credential.store_started","credential.store_completed","credential.store_failed","credential.delete_started","credential.delete_completed","credential.delete_failed","update.check_started","update.not_available","update.download_started","update.downloaded","update.verified","update.activated","update.rollback","update.failed","executor.update.check_started","executor.update.not_available","executor.update.download_started","executor.update.downloaded","executor.update.verified","executor.update.activated","executor.update.rollback","executor.update.failed","identity.refresh_completed","identity.refresh_failed","update.device_moved","update.components_installed","update.deferred","update.deferral_expired","worker.previous_exit","worker.capabilities_withheld","identity.computer_use_unavailable"];function X(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}function W(e,t,n=[]){let r=new Set([...t,...n]);return t.every((i)=>(i in e))&&Object.keys(e).every((i)=>r.has(i))}function E(e){return typeof e==="string"&&he.test(e)}function Z(e){return typeof e==="string"&&!Number.isNaN(Date.parse(e))&&new Date(e).toISOString()===e}function S(e){B(e,{recursive:!0,mode:448}),U(e,448)}function Re(e,t){S(N(e));let n=`${e}.${process.pid}.${f()}.tmp`;try{L(n,t,{mode:384,flag:"wx"}),U(n,384),_(n,e)}finally{if(me(n))M(n)}}function Go(e={}){if((e.platform??process.platform)!=="darwin")throw new rt("unsupported_platform","The managed Reason runtime is currently available only on macOS.");let n=e.environment??process.env,r=C(n,"REASON_CLI_CHANNEL")==="staging",i=r?C(n,"REASON_MANAGED_RUNTIME_ROOT")?.trim():void 0,o=e.root!==void 0||Boolean(i&&fe(i))?null:c(e.home??a(),"Library","Application Support"),d=e.root??(o?c(o,r?"Reason Staging":"Reason","CLI"):i);return{executableName:"reason",root:d,...o?{legacyRoot:c(o,"Ara",...r?["staging","runtime"]:["runtime"])}:{},versions:c(d,"versions"),current:c(d,"current"),previous:c(d,"previous"),brokerLock:c(d,"broker.lock"),transitionLock:c(d,"transition.lock"),lifecycleEvents:c(d,"lifecycle-events")}}function Ko(e){let t=e.legacyRoot;if(!t)return null;return{root:t,versions:c(t,"versions"),current:c(t,"current"),previous:c(t,"previous"),brokerLock:c(t,"broker.lock"),transitionLock:c(t,"transition.lock"),lifecycleEvents:c(t,"lifecycle-events")}}function pe(e,t){let n;try{if(!R(e).isSymbolicLink())return null;n=J(e)}catch{return null}let r=n.match(/^versions\/(\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?)\/(ara|Reason|reason)$/);return r&&(r[2]==="ara"||r[2]===t)?r[1]:null}function Jo(e){return pe(e.current,e.executableName)}function D(e,t,n){let i=ge(t,e).split(_e);return i.length===2&&E(i[0])&&(i[1]==="ara"||n!==void 0&&i[1]===n)?i[0]:null}function Le(e,t){try{return R(t).isSymbolicLink()&&b(N(t),J(t))===b(e.current)}catch{return!1}}function Zo(e,t=process.execPath){try{return D(x(t),x(e.versions),e.executableName)!==null}catch{let n=b(t);return n===b(e.current)||Le(e,n)||D(n,b(e.versions),e.executableName)!==null}}function Ae(e){return X(e)&&W(e,["schema_version","pid","nonce","started_at","runtime_version"])&&e.schema_version===q&&typeof e.pid==="number"&&Number.isSafeInteger(e.pid)&&e.pid>0&&typeof e.nonce==="string"&&/^[0-9a-f-]{36}$/.test(e.nonce)&&Z(e.started_at)&&E(e.runtime_version)}function Q(e,t){try{let n=R(e);if(!n.isDirectory()||!I(n))return null;let r=G(c(e,t),g.O_RDONLY|g.O_NOFOLLOW|g.O_NONBLOCK);try{let i=F(r);if(!i.isFile()||i.nlink!==1||!I(i)||i.size>4096)return null;return Y(r,"utf8")}finally{h(r)}}catch{return null}}function A(e){try{let t=JSON.parse(Q(e,"owner.json")??"null");return Ae(t)?t:null}catch{return null}}function ee(e){try{return process.kill(e,0),!0}catch(t){return!(t instanceof Error&&("code"in t)&&t.code==="ESRCH")}}var O="lease",Ne=2,Se=4,y;function ke(){if(y!==void 0)return y;if(y=null,process.platform!=="linux"&&process.platform!=="darwin")return null;let e;try{e=H(import.meta.url)("bun:ffi")}catch{return null}let t=process.platform==="darwin"?"__error":"__errno_location",n=process.platform==="darwin"?["/usr/lib/libSystem.B.dylib"]:["libc.so.6",`libc.musl-${process.arch==="arm64"?"aarch64":"x86_64"}.so.1`];for(let r of n)try{let i=e.dlopen(r,{flock:{args:[e.FFIType.i32,e.FFIType.i32],returns:e.FFIType.i32},[t]:{args:[],returns:e.FFIType.ptr}}),s=i.symbols[t]();if(s===null)continue;return y={flock:(o,d)=>i.symbols.flock(o,d),errno:()=>e.read.i32(s),wouldBlock:process.platform==="darwin"?35:11},y}catch{}return null}var v,Ie=3221225472,Te=4,xe=128,Pe=32;function De(e){if(v===void 0){v=null;try{let s=H(import.meta.url)("bun:ffi"),{FFIType:o}=s;v={kernel:s.dlopen("kernel32.dll",{CreateFileW:{args:[o.ptr,o.u32,o.u32,o.ptr,o.u32,o.u32,o.ptr],returns:o.i64_fast},CloseHandle:{args:[o.i64_fast],returns:o.i32},GetLastError:{args:[],returns:o.u32}}).symbols,ptr:(l)=>s.ptr(l)}}catch{return null}}if(!v)return null;let{kernel:t,ptr:n}=v,r=Buffer.from(`${e}\x00`,"utf16le"),i=t.CreateFileW(n(r),Ie,0,null,Te,xe,null);if(Number(i)===-1)return t.GetLastError()===Pe?"busy":null;return{release:()=>{t.CloseHandle(i)}}}function Oe(e){if(process.platform==="win32")return De(`${e}.lease`);let t=ke();if(!t)return null;let n=G(`${e}.lease`,g.O_RDWR|g.O_CREAT|g.O_NOFOLLOW,384);try{let r=F(n);if(!r.isFile()||r.nlink!==1||!I(r))return h(n),"busy";if(t.flock(n,Ne|Se)===0)return{release:()=>h(n)};let i=t.errno();return h(n),i===t.wouldBlock?"busy":null}catch(r){throw h(n),r}}function Xo(e){S(N(e.path));let t=Oe(e.path);if(t==="busy")return{acquired:!1,owner:A(e.path),recoveredStaleOwner:!1};let n=t!==null;try{let r=Ce(e,t);if(r.acquired)n=!1;return r}finally{if(n)t.release()}}function Ce(e,t){let n=e.alive??ee,r=!1;for(let i=0;i<4;i+=1){let s={schema_version:q,pid:e.pid??process.pid,nonce:e.nonce?.()??f(),started_at:(e.now?.()??new Date).toISOString(),runtime_version:e.runtimeVersion},o=`${e.path}.init-${process.pid}-${f()}`,d=!1;try{if(B(o,{mode:448}),L(c(o,"owner.json"),`${JSON.stringify(s)}
|
|
3
3
|
`,{mode:384,flag:"wx"}),t!==null)L(c(o,O),`flock
|
|
4
4
|
`,{mode:384,flag:"wx"});e.beforePublish?.();try{throw R(e.path),Object.assign(Error("Managed runtime lock exists."),{code:"EEXIST"})}catch(m){if(m.code!=="ENOENT")throw m}_(o,e.path),d=!0;let l=!1;return{acquired:!0,owner:s,recoveredStaleOwner:r,release(){if(l)return;if(l=!0,A(e.path)?.nonce===s.nonce)p(e.path,{recursive:!0,force:!0});t?.release()}}}catch(l){let m=l.code;if(!["EEXIST","ENOTEMPTY"].includes(m??""))throw l;let u=A(e.path),re=(e.now?.()??new Date).getTime(),ie=u&&e.staleAfterMs!==void 0?re-Date.parse(u.started_at)<e.staleAfterMs:!1,ae=u!==null&&!(t!==null&&Q(e.path,O)!==null)&&n(u.pid);if(!u||ae||ie)return{acquired:!1,owner:u,recoveredStaleOwner:!1};let k=`${e.path}.stale-${process.pid}-${f()}`;try{_(e.path,k),p(k,{recursive:!0,force:!0}),r=!0}catch(T){let oe=T.code;if(!["ENOENT","EEXIST"].includes(oe??""))throw T}}finally{if(!d)p(o,{recursive:!0,force:!0})}}throw new rt("lock_unavailable","Could not acquire the managed Reason runtime lock.")}function te(e){return X(e)&&W(e,["schema_version","event_id","occurred_at","event","runtime_version"],["from_version","to_version","reason_code","duration_ms","attempt_count","retry_in_ms","capabilities"])&&e.schema_version===j&&typeof e.event_id==="string"&&/^[0-9a-f-]{36}$/.test(e.event_id)&&Z(e.occurred_at)&&typeof e.event==="string"&&we.includes(e.event)&&E(e.runtime_version)&&(e.from_version===void 0||E(e.from_version))&&(e.to_version===void 0||E(e.to_version))&&(e.reason_code===void 0||typeof e.reason_code==="string"&&P.test(e.reason_code))&&(e.duration_ms===void 0||typeof e.duration_ms==="number"&&Number.isSafeInteger(e.duration_ms)&&e.duration_ms>=0&&e.duration_ms<=86400000)&&(e.attempt_count===void 0||typeof e.attempt_count==="number"&&Number.isSafeInteger(e.attempt_count)&&e.attempt_count>=1&&e.attempt_count<=1e5)&&(e.retry_in_ms===void 0||typeof e.retry_in_ms==="number"&&Number.isSafeInteger(e.retry_in_ms)&&e.retry_in_ms>=0&&e.retry_in_ms<=30000)&&(e.capabilities===void 0||Array.isArray(e.capabilities)&&e.capabilities.length<=be&&e.capabilities.every((t)=>typeof t==="string"&&P.test(t)))}var Ve=/^(\d{22}-[0-9a-f-]{36}\.json)$/,Ue=/^(\d{22}-[0-9a-f-]{36}\.json)\.sending-(\d+)-[0-9a-f-]{36}$/,Fe=300000,w=0n;function Be(e){let t=BigInt(new Date(e.occurred_at).getTime())*1000000n;return w=t>w?t:w+1n,`${String(w).padStart(22,"0")}-${e.event_id}.json`}function ne(e){try{return z(e.lifecycleEvents).filter((t)=>Ve.test(t)).sort()}catch{return[]}}function V(e){try{let t=JSON.parse(Y(e,"utf8"));return te(t)?t:null}catch{return null}}function $e(e,t=ee,n=Date.now()){let r;try{r=z(e.lifecycleEvents)}catch{return}for(let i of r){let s=i.match(Ue);if(!s)continue;let o=c(e.lifecycleEvents,i),d=c(e.lifecycleEvents,s[1]),l=!t(Number(s[2]));if(!l)try{l=n-K(o).mtimeMs>=Fe}catch{continue}if(!l)continue;try{_(o,d)}catch(m){let u=m.code;if(u==="EEXIST")M(o);else if(u!=="ENOENT")throw m}}}function Ge(e){let n=ne(e).flatMap((i)=>{try{return[{name:i,size:K(c(e.lifecycleEvents,i)).size}]}catch{return[]}}),r=n.reduce((i,s)=>i+s.size,0);while(n.length>ye||r>ve){let i=n.shift();if(!i)break;try{M(c(e.lifecycleEvents,i.name)),r-=i.size}catch(s){if(s.code!=="ENOENT")throw s}}}function Yo(e,t,n={}){let r={schema_version:j,event_id:n.eventId?.()??f(),occurred_at:(n.now?.()??new Date).toISOString(),...t};if(!te(r))throw new rt("invalid_lifecycle_event","Managed runtime lifecycle event is invalid.");return S(e.lifecycleEvents),Re(c(e.lifecycleEvents,Be(r)),`${JSON.stringify(r)}
|
|
5
5
|
`),Ge(e),r}async function Qo(e,t,n){$e(e);let r=0;for(let i of ne(e)){let s=c(e.lifecycleEvents,i);if(n){let l=V(s);if(!l||!n(l))continue}let o=`${s}.sending-${process.pid}-${f()}`;try{_(s,o)}catch(l){if(l.code==="ENOENT")continue;throw l}let d=V(o);if(!d){M(o);continue}try{await t(d),M(o),r+=1}catch{try{_(o,s)}catch(l){if(l.code!=="ENOENT")throw l}break}}return r}export{Go,Ko,Jo,Zo,Xo,Yo,Qo};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{readdirSync as g,readFileSync as S}from"fs";import{userInfo as b}from"os";var Yt="--vm-hands-op-runner-kind=person";function P(n){let a=new Set([n]),i=[];try{i=g("/proc")}catch{}for(let t of i){if(!/^\d+$/.test(t))continue;try{let c=S(`/proc/${t}/stat`,"utf8");if(Number(c.slice(c.lastIndexOf(")")+2).split(" ")[3])===n)a.add(Number(t))}catch{}}for(let t of a)try{process.kill(t,"SIGKILL")}catch{}}var k=(n)=>{let a=globalThis.Bun;if(!a)throw new r("pty_unavailable","Reason terminals require the Bun runtime.");let i=a.spawn({cmd:[n.shell,...n.args],cwd:n.cwd,env:{...n.environment,TERM:"xterm-256color"},terminal:{cols:n.cols,rows:n.rows,data:(s,l)=>n.onData(l)}}),t=i.terminal,c=()=>{P(i.pid);try{t?.close()}catch{}};if(!t)throw c(),new r("pty_unavailable","Reason could not allocate a pseudo-terminal.");return{write:(s)=>t.write(s),resize:(s,l)=>t.resize(s,l),kill:c,exited:i.exited.then((s)=>typeof s==="number"?s:null,()=>null)}};function _(){let n=(()=>{try{return b().username}catch{return}})();return{PATH:process.env.PATH,HOME:process.env.HOME,SHELL:process.env.SHELL,LANG:"C.UTF-8",...n?{USER:n,LOGNAME:n}:{}}}async function zo(){let[{executeLocalOperation:n,spawnCaptured:a},{runLocalPtySession:i},{configureDesktopAccount:t},{configureWorkerSandbox:c}]=await Promise.all([import("./local-capabilities-
|
|
2
|
+
import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{readdirSync as g,readFileSync as S}from"fs";import{userInfo as b}from"os";var Yt="--vm-hands-op-runner-kind=person";function P(n){let a=new Set([n]),i=[];try{i=g("/proc")}catch{}for(let t of i){if(!/^\d+$/.test(t))continue;try{let c=S(`/proc/${t}/stat`,"utf8");if(Number(c.slice(c.lastIndexOf(")")+2).split(" ")[3])===n)a.add(Number(t))}catch{}}for(let t of a)try{process.kill(t,"SIGKILL")}catch{}}var k=(n)=>{let a=globalThis.Bun;if(!a)throw new r("pty_unavailable","Reason terminals require the Bun runtime.");let i=a.spawn({cmd:[n.shell,...n.args],cwd:n.cwd,env:{...n.environment,TERM:"xterm-256color"},terminal:{cols:n.cols,rows:n.rows,data:(s,l)=>n.onData(l)}}),t=i.terminal,c=()=>{P(i.pid);try{t?.close()}catch{}};if(!t)throw c(),new r("pty_unavailable","Reason could not allocate a pseudo-terminal.");return{write:(s)=>t.write(s),resize:(s,l)=>t.resize(s,l),kill:c,exited:i.exited.then((s)=>typeof s==="number"?s:null,()=>null)}};function _(){let n=(()=>{try{return b().username}catch{return}})();return{PATH:process.env.PATH,HOME:process.env.HOME,SHELL:process.env.SHELL,LANG:"C.UTF-8",...n?{USER:n,LOGNAME:n}:{}}}async function zo(){let[{executeLocalOperation:n,spawnCaptured:a},{runLocalPtySession:i},{configureDesktopAccount:t},{configureWorkerSandbox:c}]=await Promise.all([import("./local-capabilities-c04tbapa.js"),import("./local-pty-session-5f50sqq0.js"),import("./desktop-account-5v7x0ajx.js"),import("./worker-sandbox-smqj3mbe.js")]);c();let y=process.argv.includes(Yt),s=(p,e,m)=>a(p,e[0]==="-lic"?["-lc",...e.slice(1)]:e,m),l=(process.geteuid?.()??0)!==0,u=new Map,d=(p)=>{try{process.send?.(p)}catch{}};process.on("message",(p)=>{let e=p;if(e?.t==="cancel"){u.get(e.id)?.abort();return}if(e?.t!=="op")return;if(!l){d({t:"done",id:e.id,completion:{status:"failed",error_code:"vm_hands_payload_account_unavailable"}});return}let m=e.claim.capability;if(m==="pty.start"&&!y){d({t:"done",id:e.id,completion:{status:"failed",error_code:"capability_not_granted"}});return}let f=new AbortController;u.set(e.id,f);let w=m==="pty.start"?{runPtySession:(o)=>i(o,{spawnPty:k,environment:_(),loadProxy:()=>null})}:{worker:e.worker,...m==="exec.full"?{spawnFullControl:s}:{}};n(e.state,e.claim,{...w,signal:f.signal,emit:(o)=>{let{deliverySignal:h,...v}=o;d({t:"event",id:e.id,event:v})}}).then((o)=>d({t:"done",id:e.id,completion:o}),(o)=>d({t:"done",id:e.id,completion:{status:"failed",error_code:o&&typeof o==="object"&&"code"in o&&typeof o.code==="string"?o.code:"vm_hands_op_failed"}})).finally(()=>u.delete(e.id))}),process.on("disconnect",()=>process.exit(0)),await new Promise(()=>{})}
|
|
3
3
|
export{Yt,zo};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{$e,Fi,F,Qe,Ct,yr,P,V,Be}from"./vm-hands-entry-lite-
|
|
2
|
+
import{$e,Fi,F,Qe,Ct,yr,P,V,Be}from"./vm-hands-entry-lite-ewwx4fr3.js";import{G}from"./vm-hands-entry-lite-f5e3dbgk.js";import{st}from"./vm-hands-entry-lite-eqgj4acy.js";import{at}from"./vm-hands-entry-lite-2hvbgp1n.js";import{Br}from"./vm-hands-entry-lite-2wgdvb15.js";import{gt,_i}from"./vm-hands-entry-lite-gvwdy3rf.js";import{be,Cn}from"./vm-hands-entry-lite-cc2tgsqp.js";import{ht}from"./vm-hands-entry-lite-k278g9kj.js";import{a}from"./vm-hands-entry-lite-89z488gz.js";import{x}from"./vm-hands-entry-lite-9ay6f56v.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{spawn as R,spawnSync as tt}from"child_process";import{createHash as ot,randomUUID as me}from"crypto";import{closeSync as rt,copyFileSync as se,existsSync as M,fstatSync as nt,mkdirSync as ie,openSync as it,readdirSync as U,readFileSync as K,readlinkSync as ct,renameSync as fe,rmSync as lt,statSync as ut,writeFileSync as dt}from"fs";import{connect as pt}from"net";import{tmpdir as L,userInfo as ge}from"os";import{basename as ae,delimiter as mt,dirname as B,join as f}from"path";var Y=`import { spawn, execFileSync } from "node:child_process";
|
|
3
3
|
import { createHash, randomUUID } from "node:crypto";
|
|
4
4
|
import { readFileSync, readlinkSync, lstatSync, realpathSync, statSync, mkdtempSync, mkdirSync, chmodSync, writeFileSync, readdirSync, rmSync, openSync, readSync, closeSync, renameSync } from "node:fs";
|
|
5
5
|
import { tmpdir } from "node:os";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var Ht={name:"github-native-engineer-device-worker-production",version:"0.2.
|
|
2
|
+
var Ht={name:"github-native-engineer-device-worker-production",version:"0.2.415",private:!0,type:"module",engines:{node:">=22",bun:">=1.3.0"},workspaces:["../../packages/runtime-distribution"],dependencies:{"@anthropic-ai/sandbox-runtime":"^0.0.73","@earendil-works/pi-tui":"1.0.0","@modelcontextprotocol/sdk":"^1.29.0","@reason/runtime-distribution":"workspace:*","playwright-core":"1.60.0",zod:"^4.4.3"},overrides:{"@hono/node-server":"^1.19.15","@earendil-works/pi-agent-core":"1.0.0","@earendil-works/pi-ai":"1.0.0","@earendil-works/pi-coding-agent":"1.0.0","@earendil-works/chord":"1.0.0","@earendil-works/pi-codemode":"1.0.0","@earendil-works/pi-mcp":"1.0.0","@earendil-works/pi-telemetry":"1.0.0","@earendil-works/pi-tui":"1.0.0","brace-expansion":"2.1.7",axios:"^1.20.0","basic-ftp":"^6.2.1","@grpc/grpc-js":"^1.14.5",browserslist:"^4.28.8","engine.io":"^6.6.7","fast-uri":"^3.1.8",hono:"^4.13.7","ip-address":"^10.7.1",nanoid:"^3.3.18",dompurify:"^3.4.17",postcss:"^8.5.23",qs:"^6.16.0","shell-quote":"^1.11.0","socket.io-parser":"^4.2.7",tmp:"^0.2.7",toml:"^4.2.0",undici:"^8.10.2",ws:"^8.21.0","js-yaml":"^4.3.2","@modelcontextprotocol/sdk":"^1.31.0","proxy-addr":"^2.0.8","source-map-js":"^1.2.2"}};
|
|
3
3
|
export{Ht};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
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
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-rpbvbqyf.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-8xxqjypj.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};
|
|
4
|
+
`,u=ee(i,`.job.env.${le(8).toString("hex")}`),y=Se(u,q.O_WRONLY|q.O_CREAT|q.O_EXCL|q.O_NOFOLLOW,384);try{Ee(y,_),ke(y)}finally{be(y)}return Le(u,ee(i,"job.env")),i}}function _e(e){try{let n=ee(e,"job.env"),i=Ie(n).size,r=Se(n,q.O_WRONLY|q.O_NOFOLLOW);try{Ee(r,Buffer.alloc(i)),ke(r)}finally{be(r)}}catch{}Je(e,{recursive:!0,force:!0})}function Ze(e){if(e.length!==64)throw new l("vm_hands_signature_invalid","unexpected ECDSA signature length");let n=(g)=>{let _=0;while(_<g.length-1&&g[_]===0)_++;let u=g.subarray(_),y=u[0]&128?Uint8Array.of(0,...u):u;return Uint8Array.of(2,y.length,...y)},i=n(e.subarray(0,32)),r=n(e.subarray(32));return Uint8Array.of(48,i.length+r.length,...i,...r)}import{randomUUID as en}from"crypto";var nn="/app/local-runtime/session?register=vm_hands_v1",tn="/app/local-runtime",Te=25000,Re=20000,rn=1e4,Ce=5000,xe=new Set(["pty.start","jobs.control","preview.serve.v1","display.stream.v1"]),me=75000,sn=2000,on=1e4,an=new Set(["vm_hands_no_register","vm_hands_register_failed"]),dn=3,cn=20000,ln=250,_n=2000;function Ne(e){let n=Math.min(ln*2**(e-1),_n);return Math.round(n/2+Math.random()*n/2)}var un=5000;function mn(e){return e>=500||e===408||e===429}var te=20000;function De(e,n){return typeof e==="string"&&/^[A-Za-z0-9._:-]{1,160}$/.test(e)?e:n}class O extends Error{}var hn=64,Oe=[1000,2000,4000,8000,15000,30000,60000,120000];function Be(e){let n=e&&typeof e==="object"&&"code"in e?e.code:null;return typeof n==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(n)?n:"vm_hands_unbind_failed"}function gn(e,n,i,r,g){let _=i.turn.claim.attempt_id,u=e.healing??=new Set;if(u.has(_))return;u.add(_);let y=i.turn.claim.operation_id;(async()=>{for(let[S,I]of Oe.entries()){if(r.aborted)return;if(await new Promise((v)=>{let A=setTimeout(v,I);A.unref?.(),r.addEventListener("abort",()=>{clearTimeout(A),v()},{once:!0})}),r.aborted)return;try{let v=await n.retryUnbind(_);g("vm_hands.unbind_healed",{operation_id:y,attempt:S+1}),e.receipts.push({...i,unbound:v}),e.flushReceipts?.();return}catch(v){let A=Be(v);if(g("vm_hands.unbind_unverified",{operation_id:y,code:A,attempt:S+1}),A==="vm_hands_unbind_unknown")return}}g("vm_hands.unbind_heal_exhausted",{operation_id:y,attempts:Oe.length})})().finally(()=>u.delete(_))}async function qe(e,n){let i=[...e.modelOps.get(n)??[]];for(let r of i)r.abort.abort();await Promise.race([Promise.all(i.map((r)=>r.settled)),new Promise((r)=>setTimeout(r,Ce))])}async function fn(e){let n=[...e.personTerminals];for(let i of n)i.abort.abort();if(n.length)await Promise.race([Promise.all(n.map((i)=>i.settled)),new Promise((i)=>setTimeout(i,Ce))]);return n.length}async function z(e,n,i){return await qe(e,i),n.unbind(i)}function ie(e){for(let n of e.outbox?.splice(0)??[])n.reject(Error("vm_hands_attempt_ended"))}var Me=15000,pn=1e4,vn=1000;async function bi(e){let n=Date.now(),i={deviceId:null,connection:null,turns:new Map,lostAt:0,receipts:[],attest:"pending",attestWaiters:[],modelOps:new Map,personTerminals:new Set,bindsStarting:0},r=e.log??(()=>{}),g=async(y)=>{for(let[S,I]of[...i.turns]){i.turns.delete(S),e.onTurn?.(S,null),ie(I);let v=await z(i,e.agent,S).catch(()=>null);if(v)i.receipts.push({turn:I,failure:"vm_hands_bind_lost",unbound:v});r("vm_hands.bound_dropped",{reason:y})}},_=0,u=0;try{for(let y=0;!e.signal.aborted;y++){let S=await wn(e,i).catch((v)=>{if(v instanceof l&&i.deviceId===null&&v.code==="vm_hands_no_session"&&Date.now()-n<on)return{closeCode:0,closeReason:"vm_hands_no_session"};if(v instanceof l&&i.deviceId===null&&an.has(v.code)&&_<dn&&Date.now()-n<cn)return _++,u=Ne(_),r("vm_hands.register_retry",{attempt:_,code:v.code,delay_ms:u}),{closeCode:0,closeReason:"vm_hands_register_retry"};if(v instanceof l&&i.deviceId===null)throw v;return{closeCode:0,closeReason:v instanceof Error?v.message:String(v)}});if(r("vm_hands.session_closed",{close_code:S.closeCode,reason:S.closeReason.slice(0,120),registered:i.deviceId!==null}),S.closeCode===4401||i.attest==="refused")return;if(e.signal.aborted)return;if(i.turns.size&&Date.now()-i.lostAt>=me)await g("reconnect_deadline");if(i.served)i.served=!1,y=0;let I=S.closeReason==="drain_reconnect"?0:S.closeReason==="vm_hands_register_retry"?u:S.closeReason==="vm_hands_no_session"?Math.min(250*2**Math.min(y,5),2000):i.turns.size?Math.min(250*2**Math.min(y,5),5000,Math.max(0,i.lostAt+me-Date.now())):Math.min(500*2**y,30000);if(await new Promise((v)=>setTimeout(v,I)),i.turns.size&&Date.now()-i.lostAt>=me)await g("reconnect_deadline")}}finally{await g("session_ended")}}async function wn(e,n){let i=n.deviceId,r=e.log??(()=>{}),g=i?`/app/local-runtime/session?device_id=${encodeURIComponent(i)}`:nn,_=`${e.apiOrigin.replace(/^http/,"ws")}${g}`,u=new WebSocket(_),y=0,S="",I=new Map,v=[],A=null,M=new Promise((t)=>{u.onclose=(o)=>{y=o.code,S=o.reason;for(let s of I.values())s.reject(new O(`session closed ${o.code}`));for(let s of n.attestWaiters.splice(0))s(!1);I.clear(),t()}});u.onmessage=(t)=>{let o;try{o=JSON.parse(String(t.data))}catch{u.close(4400);return}if(o.t==="res"){let s=o;I.get(s.id)?.resolve({status:s.status,body:s.body}),I.delete(s.id);return}if(o.t==="reconnect"){let s=Math.max(0,Math.min(Number(o.after_ms)||0,vn));r("vm_hands.drain_reconnect",{after_ms:s}),setTimeout(()=>{try{u.close(4001,"drain_reconnect")}catch{}},s).unref?.();return}if(!A?.(o))v.push(o)};let G=(t,o)=>new Promise((s,c)=>{let h=v.findIndex((p)=>t.includes(p.t));if(h>=0){s(v.splice(h,1)[0]);return}let f=setTimeout(()=>{A=null,c(new l("vm_hands_no_register",`no ${t.join("/")} in ${o} ms`))},o);A=(p)=>{if(!t.includes(p.t))return!1;return clearTimeout(f),A=null,s(p),!0}}),K=(t)=>u.send(JSON.stringify(t)),x=(t,o)=>new Promise((s,c)=>{if(u.readyState!==WebSocket.OPEN){c(new O("session closed"));return}let h=en(),f=typeof o.wait_ms==="number"?o.wait_ms:0,p=setTimeout(()=>{if(!I.delete(h))return;c(new O(`no answer to ${t.split("/").pop()} in ${f+Me} ms`)),u.close(4000,"request_timeout")},f+Me);I.set(h,{reject:(a)=>{clearTimeout(p),c(a)},resolve:({status:a,body:d})=>{clearTimeout(p);let m=null;try{m=d?JSON.parse(d):null}catch{}s({status:a,json:m})}}),K({t:"req",id:h,path:`${tn}${t}`,body:JSON.stringify(o)})}),he=()=>u.close(1001,"stopping");e.signal.addEventListener("abort",he,{once:!0});let re,H=new Map,L=new Map,se=!1,oe=new Set,ae=new Set,de=Promise.resolve(),ge=()=>{X().catch(()=>{return})},J=!1;try{await new Promise((a,d)=>{let m=setTimeout(()=>d(Error("session open timeout")),pn);u.onopen=()=>{clearTimeout(m),r("vm_hands.ws_open",{}),a()},u.onerror=()=>{clearTimeout(m),d(Error("session socket error"))}});let t=await G(["challenge"],5000);r("vm_hands.challenge",{});let o=[],s=null,c;if(i){K(await e.agent.helloFrame(t.challenge,n.connection));let a=await G(["ready"],1e4);if(typeof a.vm_hands_connection==="string")n.connection=a.vm_hands_connection;if(c={device_id:i,...a.cadence?{cadence:a.cadence}:{}},typeof a.vm_hands_probe_script==="string"){if(s=a.vm_hands_probe_script,J=!0,e.agent.phase==="registered"&&!n.turns.size)n.attest="pending"}n.served=!0,r("vm_hands.reconnected",{device_id:i});let d=Array.isArray(a.vm_hands_binds)?a.vm_hands_binds:a.vm_hands_bind?[a.vm_hands_bind]:[];for(let[m,k]of[...n.turns]){if(d.some((P)=>P&&P.operation_id===k.claim.operation_id&&P.attempt_id===k.claim.attempt_id)){o.push(k),r("vm_hands.bound_resumed",{operation_id:k.claim.operation_id});continue}n.turns.delete(m),e.onTurn?.(m,null),ie(k);let E=await z(n,e.agent,m).catch((P)=>Y(P,k,"vm_hands_bind_lost"));if(E)n.receipts.push({turn:k,failure:"vm_hands_bind_lost",unbound:E});r("vm_hands.bound_dropped",{reason:"not_named_on_reconnect"})}}else{K(await e.agent.registerFrame(t.challenge)),r("vm_hands.register_sent",{});let a=await Promise.race([G(["registered","register_refused"],1e4),M.then(()=>{throw new l(S==="register_failed"?"vm_hands_register_failed":"vm_hands_register_closed","session closed before the register was answered")})]);if(a.t==="register_refused")throw new l(a.code,"register refused");e.agent.registered();let d=a;if(c=d,n.deviceId=d.device_id,typeof d.vm_hands_connection==="string")n.connection=d.vm_hands_connection;if(typeof d.vm_hands_probe_script==="string"){if(s=d.vm_hands_probe_script,J=!0,e.agent.phase==="registered"&&!n.turns.size)n.attest="pending"}n.served=!0,r("vm_hands.registered",{device_id:c.device_id})}let h=async()=>{let a=await x("/heartbeat",await e.heartbeat());if(a.status>=300)throw Error(`heartbeat ${a.status}`)};await h();let f=c.cadence?.presence_interval_ms??30000;if(re=setInterval(()=>{h().catch(()=>u.close())},f),s&&n.attest!=="accepted"&&e.agent.phase==="registered"&&!n.turns.size)je(s,t.challenge);let p=(a,d)=>{L.set(a,d().catch(async(m)=>{if(await fe(m,a),m instanceof O)u.close();else await X().catch(()=>{return})}).finally(()=>{L.delete(a)}))};n.flushReceipts=ge;try{await X();for(let a of o)a.flush=()=>pe(a),a.flush(),p(a.claim.attempt_id,()=>ve(a));while(!e.signal.aborted&&u.readyState===WebSocket.OPEN){let a=await x("/operations/claim",{wait_ms:Math.min(c.cadence?.claim_wait_ms??Te,Te)});if(a.status===204||!a.json)continue;if(a.status>=300)throw Error(`claim ${a.status}`);let d=a.json;if(d.capability==="hands.connect"){if(L.has(d.attempt_id)){R({claim:d,eventSeq:0}).complete("failed",{error_code:"vm_hands_busy"}).catch(()=>{return});continue}p(d.attempt_id,()=>Ue(d))}else Fe(d).catch(()=>{return})}}catch(a){await fe(a,null)}}finally{if(re)clearInterval(re);e.signal.removeEventListener("abort",he);for(let t of n.turns.values())t.flush=null;if(n.flushReceipts===ge)n.flushReceipts=null;u.close(),await M,await Promise.all([...L.values()]);for(let t of e.agent.liveBindIds){if(n.turns.has(t))continue;let o=H.get(t),s=o?{...o,eventSeq:o.eventSeq+1}:null,c=await z(n,e.agent,t).catch((h)=>s?Y(h,s,"vm_hands_bind_lost"):null);if(c&&s)n.receipts.push({turn:s,failure:"vm_hands_bind_lost",unbound:c});r("vm_hands.bound_dropped",{reason:"bound_after_loss"})}for(let t of oe)t.abort()}return{closeCode:y,closeReason:S};async function fe(t,o){if(t instanceof O){if(!se&&n.turns.size)n.lostAt=Date.now();se=!0}else{let s=o!==null?[o]:[...new Set([...n.turns.keys(),...e.agent.liveBindIds])];if(o===null)se=!0;for(let c of s){let h=n.turns.get(c);if(n.turns.delete(c),h)ie(h),e.onTurn?.(c,null);if(e.agent.liveBindIds.includes(c)){let f=H.get(c)??h,p=f?{...f,eventSeq:f.eventSeq+1}:null,a=await z(n,e.agent,c).catch((d)=>p?Y(d,p,"vm_hands_bind_lost"):null);if(a&&p)n.receipts.push({turn:p,failure:"vm_hands_bind_lost",unbound:a})}}}r("vm_hands.session_lost",{error:t instanceof Error?t.message:String(t),bound_kept:n.turns.size})}function R(t){let o=t.claim,s={attempt_id:o.attempt_id,attempt_token:o.attempt_token},c=encodeURIComponent(o.operation_id);return{fence:s,op:c,complete:(f,p={})=>x(`/operations/${c}/complete`,{...s,status:f,...p}),emit:(f,p)=>{let a=(t.chain??Promise.resolve()).catch(()=>{return}).then(()=>h(f,p));return t.chain=a,a}};async function h(f,p){let a=t.eventSeq,d=(P)=>x(`/operations/${c}/events`,{...s,event_seq_start:P,events:[{kind:f,payload:{sequence:P,capability:String(o.capability??"hands.connect"),data:p}}]}),m=a,k=await d(m),E=k.status===409?k.json?.expected_event_seq:void 0;if(typeof E==="number"&&E===a+1)k={status:200,json:{duplicate:!0}};else if(typeof E==="number"&&E>=0&&E!==a)m=E,k=await d(m);if(k.status<300)t.eventSeq=m+1;return k}}function $e(t){return(o,s)=>new Promise((c,h)=>{if(n.turns.get(t.claim.attempt_id)!==t){h(Error("vm_hands_attempt_ended"));return}if(t.outbox??=[],t.outbox.length>=hn){h(Error("vm_hands_outbox_full"));return}t.outbox.push({kind:o,data:s,resolve:c,reject:h}),t.flush?.()})}function pe(t){if(ae.has(t))return;ae.add(t),(async()=>{try{while(t.outbox?.length&&n.turns.get(t.claim.attempt_id)===t&&u.readyState===WebSocket.OPEN){let o=t.outbox[0],s;try{s=await R(t).emit(o.kind,o.data)}catch(c){if(c instanceof O)return;s={status:500}}if(t.outbox.shift(),s.status<300)o.resolve();else o.reject(Error(`${o.kind} refused ${s.status}`))}}finally{ae.delete(t)}})()}async function je(t,o){try{let s=await e.agent.attestFrame(t,o);if(u.readyState!==WebSocket.OPEN)return;K(s);let c=await G(["attested","attest_refused"],15000);n.attest=c.t==="attested"?"accepted":"refused";for(let h of n.attestWaiters.splice(0))h(n.attest==="accepted");if(r("vm_hands.attest",{result:n.attest,exit_code:s.exit_code,...c.t==="attest_refused"?{code:String(c.code??"")}:{}}),n.attest==="refused")u.close(4401,"attest_refused")}catch(s){r("vm_hands.attest_failed",{code:s instanceof l?s.code:"probe_error"});for(let c of n.attestWaiters.splice(0))c(!1);if(n.attest!=="accepted")u.close(4000,"attest_unanswered")}}async function Ue(t){let o=J&&n.attest==="pending",s=t.vm_hands_attest,c=s;if(n.attest==="refused"){r("vm_hands.claim_attest_refused",{said:typeof s==="string"?s.slice(0,16):typeof s,local:n.attest}),await R({claim:t,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}if(c==="accepted"){if(!o&&n.attest!=="accepted"){n.attest="accepted";for(let w of n.attestWaiters.splice(0))w(!0)}}else if(c!=="pending"||!o&&n.attest!=="accepted"){r("vm_hands.claim_attest_refused",{said:typeof s==="string"?s.slice(0,16):typeof s,local:n.attest}),await R({claim:t,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}if(n.attest!=="accepted"){let w=Date.parse(t.lease_until)-Date.now()-5000,D=Math.max(0,Math.min(te,Number.isFinite(w)?w:te));if(!await new Promise((Z)=>{let Ge=setTimeout(()=>Z(!1),D);n.attestWaiters.push((Ke)=>{clearTimeout(Ge),Z(Ke)})})){await R({claim:t,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}}let h={claim:t,eventSeq:0},{complete:f,emit:p}=R(h),a;try{if(t.capability!=="hands.connect")throw new l("vm_hands_bind_invalid","not hands.connect");a=!ue(t)}catch(w){r("vm_hands.bind_refused",{code:w instanceof l?w.code:"unexpected"}),await f("failed",{error_code:w instanceof l?w.code:"vm_hands_bind_invalid"});return}let d,m=null,k=!1;n.bindsStarting++;try{let w=await fn(n);if(w)r("vm_hands.person_terminals_closed",{count:w});let D=Pe(t),Q=e.agent.bind(D);if(D.workspace_deferred)k=!0,m=We(h,()=>k);d=await Q}catch(w){r("vm_hands.bind_refused",{code:w instanceof l?w.code:"unexpected"}),await f("failed",{error_code:w instanceof l?w.code:"vm_hands_bind_failed"});return}finally{k=!1,n.bindsStarting--}let E=m?await m:-1,P={...d.ready_data??e.readyData({launchId:d.launch_id,claim:t})};if(a)delete P.environment_installed;let ce=!a&&d.snapshot_revision!==null&&d.snapshot_id!==null?{environment_installed:{snapshot_id:d.snapshot_id,installed_revision:d.snapshot_revision}}:{};H.set(t.attempt_id,{claim:t,launchId:d.launch_id,readyData:P,eventSeq:h.eventSeq,ackSeq:-1});let C={...P,...ce,vm_hands:{layout:d.layout,policy_digest:d.policy_digest,launch_id:d.launch_id}},U=Date.now()+un,N=1,b=await p("hands.ready",C);while(mn(b.status)&&!e.signal.aborted){let w=Ne(N);if(Date.now()+w>=U)break;await new Promise((D)=>setTimeout(D,w)),N++,b=await p("hands.ready",C)}if(N>1)r("vm_hands.ready_retried",{attempts:N,status_class:`${Math.floor(b.status/100)}xx`});if(H.delete(t.attempt_id),b.status>=300){await qe(n,t.attempt_id),await e.agent.boundRefused(t.attempt_id),await f("failed",{error_code:De(b.json?.error,"vm_hands_probe_failed")});return}let T={claim:t,launchId:d.launch_id,readyData:P,eventSeq:h.eventSeq,ackSeq:E};n.turns.set(t.attempt_id,T),T.flush=()=>pe(T),e.onTurn?.(t.attempt_id,$e(T)),await ve(T)}async function We(t,o){let{fence:s,op:c}=R(t),h=t.claim.attempt_id,f=-1;try{for(;;){let p=await x(`/operations/${c}/heartbeat`,{...s,control_ack_seq:f,wait_ms:Re});if(!o())return f;if(p.status>=300)return e.agent.abandonWorkspaceGrant(h),f;let a=(p.json?.controls??[]).slice().sort((d,m)=>d.seq-m.seq);for(let d of a){if(d.seq<=f)continue;if(f=d.seq,d.kind===pt)return r("vm_hands.workspace_granted",{}),e.agent.grantWorkspace(h),f;return r("vm_hands.workspace_grant_abandoned",{control:/^[a-z][a-z0-9._-]{0,63}$/.test(d.kind)?d.kind:"other"}),e.agent.abandonWorkspaceGrant(h),f}}}catch{return e.agent.abandonWorkspaceGrant(h),f}}async function ve(t){let{fence:o,op:s}=R(t),c=null,h=null,f=e.agent.executorExited(t.claim.attempt_id).then((p)=>(h=p,null));e:for(;;){let p=await Promise.race([f,x(`/operations/${s}/heartbeat`,{...o,control_ack_seq:t.ackSeq,wait_ms:Re})]);if(!p){c="vm_hands_executor_exited",r("vm_hands.executor_exited",{reason:h});break}if(p.status>=300)break;let a=(p.json?.controls??[]).slice().sort((d,m)=>d.seq-m.seq);for(let d of a){if(d.seq<=t.ackSeq)continue;if(d.kind==="operation.cancel"||d.kind==="cancel"){t.ackSeq=d.seq;break e}if(d.kind===dt)try{await ze(t,d.payload??{})}catch(m){if(m instanceof O)throw m;c=m instanceof l?m.code:"environment_unavailable";let k=m&&typeof m==="object"&&"code"in m&&typeof m.code==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(m.code)?m.code:null;r("vm_hands.environment_refused",{code:c,cause:k});break e}t.ackSeq=d.seq}}await Ve(t,c)}async function Fe(t){let o=t,s={claim:o,eventSeq:0},{complete:c,emit:h,fence:f,op:p}={...R(s)},a=t.vm_hands_origin==="person"?"person":"model",d=String(t.capability??"");if(!e.executeOp){await c("failed",{error_code:"vm_hands_op_unsupported"});return}if(t.vm_hands_attest==="accepted"&&n.attest==="pending"&&!(J&&n.attest==="pending")){n.attest="accepted";for(let b of n.attestWaiters.splice(0))b(!0)}if(n.attest!=="accepted"){let b=Date.parse(String(t.lease_until??""))-Date.now()-5000,T=n.attest==="refused"?0:Math.max(0,Math.min(te,Number.isFinite(b)?b:te));if(!(T>0&&await new Promise((D)=>{let Q=setTimeout(()=>D(!1),T);n.attestWaiters.push((Z)=>{clearTimeout(Q),D(Z)})}))){await c("failed",{error_code:"vm_hands_unattested"});return}}let m=e.agent.bindIdForRun(o.run_id);if(a==="model"&&m===null){await c("failed",{error_code:"vm_hands_not_bound"});return}let k=d==="pty.start"&&a==="person"&&!t.authority;if(k&&(e.agent.liveBindIds.length>0||n.bindsStarting>0)){await c("failed",{error_code:"vm_hands_bound"});return}if(xe.has(d)&&!k&&e.agent.liveBindIds.length===0){await c("failed",{error_code:"vm_hands_not_bound"});return}if(a==="model"&&m||xe.has(d)&&!k)e.agent.opServed();let E=new AbortController;oe.add(E);let P,ce=new Promise((b)=>{P=b}),C={abort:E,settled:ce};if(k)n.personTerminals.add(C);if(a==="model"&&m){let b=n.modelOps.get(m)??new Set;b.add(C),n.modelOps.set(m,b),await e.agent.environmentInstalled(m,sn,E.signal)}let U=-1,N=setInterval(()=>{x(`/operations/${p}/heartbeat`,{...f,control_ack_seq:U,wait_ms:0}).then((b)=>{if(b.status>=300){E.abort();return}let T=b.json?.controls??[];for(let w of T)if(U=Math.max(U,w.seq),w.kind==="operation.cancel"||w.kind==="cancel")E.abort()},()=>E.abort())},rn);try{let b=await e.executeOp({kind:a,claim:t,...a==="model"&&m?{bindId:m}:{},signal:E.signal,emit:async(w)=>{await h(w.kind,w.data??{})}}),T=await c(b.status,{...b.result?{result:b.result}:{},...b.error_code?{error_code:De(b.error_code,"vm_hands_op_failed")}:{}});r("vm_hands.op",{capability:d,kind:a,status:b.status,code:b.error_code??null,...T.status>=300?{complete_status:T.status,complete_error:String(T.json?.error??"").slice(0,64)}:{}})}finally{if(clearInterval(N),oe.delete(E),m)n.modelOps.get(m)?.delete(C);n.personTerminals.delete(C),P()}}async function Ve(t,o){let s=t.claim.attempt_id;if(n.turns.get(s)===t)n.turns.delete(s);e.onTurn?.(s,null),ie(t);let c=await z(n,e.agent,s).catch((h)=>Y(h,t,o));if(!c)return;n.receipts.push({turn:t,failure:o,unbound:c}),await X()}function Y(t,o,s){let c=Be(t);return r("vm_hands.unbind_unverified",{operation_id:o.claim.operation_id,code:c,attempt:0}),R(o).emit(jn,{code:c}).catch(()=>{return}),gn(n,e.agent,{turn:o,failure:s},e.signal,r),null}function X(){return de=de.then(we,we),de}async function we(){while(n.receipts.length){let{turn:t,failure:o,unbound:s}=n.receipts[0],{complete:c,emit:h}=R(t);try{if(await h("hands.stopped",{...t.readyData,reason_code:o?"failed":"cancelled",killed_verified:s.killed_verified,shredded:s.shredded,...s.srt_fallbacks?{vm_hands_srt_fallbacks:s.srt_fallbacks}:{}}),o)await c("failed",{error_code:o});else await c("cancelled",{error_code:"driver_stopped"})}catch(f){if(f instanceof O)return}n.receipts.shift()}}async function ze(t,o){let{fence:s,op:c}=R(t),h=o.snapshot_id;if(o.version!==1||typeof h!=="string"||Object.keys(o).length!==2)throw new l("vm_hands_env_invalid","invalid environment delivery");let f=await x(`/operations/${c}/environment`,{...s,snapshot_id:h}),p=f.json?.environment_sealed;if(f.status!==200||!p||f.json?.payload!==void 0)throw new l("vm_hands_env_invalid","environment not delivered sealed");let a=await e.agent.deliverEnvironment({attemptId:t.claim.attempt_id,snapshotId:h,deviceId:n.deviceId??"",sealed:p});if((await x(`/operations/${c}/environment-ack`,{...s,...a})).status>=300)throw new l("vm_hands_env_ack_refused","environment ack refused")}}import{readFileSync as bn}from"fs";var yn=performance.now();delete process.env.BUN_BE_BUN;var j=(e,n={})=>console.log(JSON.stringify({stage:e,ms:Math.round(performance.now()),...n}));async function kn(){if(process.argv.includes("--vm-hands-op-runner")){let{runVmHandsOpRunner:_}=await import("./vm-hands-op-runner-n8p81rwm.js");await _();return}j("parsed",{t0:Math.round(yn)});let e="";try{e=bn(3,"utf8")}catch{}j("fd3_read",{bytes:e.length});let n=null;if(e.trim())try{n=JSON.parse(e)}catch{n=null}if(!n||typeof n!=="object"||Array.isArray(n))j(e.trim()?"identity_invalid":"identity_free"),await new Promise(()=>{setInterval(()=>{return},1073741824)});let{parseVmHandsInit:i,runVmHands:r}=await import("./vm-hands-runtime-bqsz7h0h.js"),g=i(n);if(!g)j("identity_invalid"),await new Promise(()=>{setInterval(()=>{return},1073741824)});try{await r(g,j)}catch(_){let u=_&&typeof _==="object"&&"code"in _&&typeof _.code==="string"?_.code:"error";throw j("failed",{code:u}),_}process.exit(0)}kn();export{wi,Xr,bi};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import"./vm-hands-entry-lite-k278g9kj.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-22kfyvnk.js";import"./vm-hands-entry-lite-m11j0f9q.js";import{Je,Ii,ur,vt}from"./vm-hands-entry-lite-
|
|
2
|
+
import"./vm-hands-entry-lite-k278g9kj.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-22kfyvnk.js";import"./vm-hands-entry-lite-m11j0f9q.js";import{Je,Ii,ur,vt}from"./vm-hands-entry-lite-463m6ejk.js";import"./vm-hands-entry-lite-f5e3dbgk.js";import"./vm-hands-entry-lite-9c95p6n9.js";import"./vm-hands-entry-lite-gvwdy3rf.js";import"./vm-hands-entry-lite-t7an5zg2.js";import"./vm-hands-entry-lite-88swf2qr.js";import"./vm-hands-entry-lite-ckv17tn8.js";import"./vm-hands-entry-lite-q0k6kx6d.js";import"./vm-hands-entry-lite-bdhjpv7g.js";import{Yt}from"./vm-hands-entry-lite-qq9w7wq6.js";import"./vm-hands-entry-lite-09m2cdkw.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-9ay6f56v.js";import{spawn as De}from"child_process";import{chmodSync as Me,chownSync as Le,existsSync as U,lstatSync as V,mkdirSync as ee,mkdtempSync as Ae,readdirSync as Z,readFileSync as P,realpathSync as Te,rmdirSync as ne,rmSync as ze,writeFileSync as K}from"fs";import{join as p}from"path";import{readFileSync as ae,readlinkSync as ce}from"fs";import{relative as $e}from"path";var le=16;function de(n){return n.replace(/\\([0-7]{3})/g,(r,i)=>String.fromCharCode(Number.parseInt(i,8)))}function Ie(n){let r=[];for(let i of n.split(`
|
|
3
3
|
`)){let e=i.split(" ");if(e.length<10||!/^\d+:\d+$/.test(e[2]))continue;r.push({device:e[2],root:de(e[3]),mountPoint:de(e[4])})}return r}function Ne(n,r,i){let e=n.replace(/\/+$/,"")||"/",c=(m)=>e==="/"||m===e||m.startsWith(`${e}/`),a=(m)=>new Map(Ie(m).filter((b)=>c(b.mountPoint)).map((b)=>[`${b.mountPoint}\x00${b.device}\x00${b.root}`,b.mountPoint])),l=a(r),v=a(i),y=(m)=>$e(e,m)||".",O=[...l].filter(([m])=>!v.has(m)).map(([,m])=>y(m)),R=[...v].filter(([m])=>!l.has(m)).map(([,m])=>y(m));return{missing:O,extra:R,referenceCount:l.size,ownCount:v.size}}function ue(n,r,i,e="/proc"){let c,a,l=null;try{c=ae(`${e}/1/mountinfo`,"utf8"),a=ae(`${e}/self/mountinfo`,"utf8")}catch(b){let I=b&&typeof b==="object"&&"code"in b&&typeof b.code==="string"?b.code:"unreadable";r("vm_hands.mount_check_unavailable",{code:I});return}try{l=ce(`${e}/1/ns/mnt`)===ce(`${e}/self/ns/mnt`)}catch{}let{missing:v,extra:y,referenceCount:O,ownCount:R}=Ne(n,c,a),m={reference_count:O,own_count:R,missing_count:v.length,extra_count:y.length,same_namespace:l};if(y.length)r("vm_hands.mount_extra",{...m,extra:y.slice(0,le)});if(v.length)throw r("vm_hands.mount_mismatch",{...m,missing:v.slice(0,le)}),i(`${v.length} mount(s) under the Session root are missing from vm-hands' namespace`)}var we="/sys/fs/cgroup/reason-payload",M="vm-hands",We="/run/ara-srt/fallbacks.jsonl",B="/reason-person",te=5000,Be=1e4,pe="__VM_HANDS_PROOF_DIR__",Ke="__VM_HANDS_PROBE_NONCE__";class h extends Error{code;constructor(n,r){super(r);this.code=n}}function je(n,r){if(!/^[0-9a-f-]{36}$/i.test(r))throw new h("vm_hands_bind_invalid","bad bind id");return p(n,M,`b-${r.toLowerCase()}`)}var He=5000,ve=(n)=>`'${n.replaceAll("'","'\\''")}'`;function on(n){let r=n.cgroup??we,i=n.init.layout.payload_uid,e=n.log??(()=>{}),c=new Map,a=new Map,l=0,v=()=>{try{let t=P("/run/ara-srt/starts.jsonl","utf8"),o=t.slice(l>t.length?0:l).split(`
|
|
4
4
|
`).filter(Boolean);l=t.length;let d=o.map((f)=>{try{return Number(JSON.parse(f).elapsed_ms)||0}catch{return 0}});if(d.length)e("vm_hands.srt_server_starts",{count:d.length,elapsed_ms:d.slice(0,8)})}catch{}},y=null,O=!1,R=n.srtCgroup??"/sys/fs/cgroup/reason-srt",m=()=>{y??=me()},b=0,I=()=>{try{let t=P(We,"utf8"),o=t.slice(b>t.length?0:b);b=t.length;let d=o.split(`
|
|
5
5
|
`).filter(Boolean).slice(0,1000);if(!d.length)return null;let f={},g=0;for(let w of d)try{let _=JSON.parse(w),u=typeof _.code==="string"&&/^[a-z_]{1,40}$/.test(_.code)?_.code:"other";if(f[u]=(f[u]??0)+1,typeof _.elapsed_ms==="number")g=Math.max(g,_.elapsed_ms)}catch{f.unparsed=(f.unparsed??0)+1}return e("vm_hands.srt_fallbacks",{count:d.length,codes:f,max_elapsed_ms:g}),{count:d.length,codes:f,max_elapsed_ms:g}}catch{return null}},S=!1,j=(t,o,d)=>{if(S)throw Error("vm_hands_pool_held");return Ce(t,o,d)},X=(t)=>(o,d,f)=>De("/bin/sh",["-c",`echo $$ > ${ve(p(t,"cgroup.procs"))} || exit 125; exec "$@"`,"vm-hands-join",o,...d],f),Ce=X(p(r,M)),H=p(r,M,"probe"),z=(t)=>je(r,t),Oe=(t)=>{let o=z(t);try{ee(o,{mode:493})}catch(d){if(!(d&&typeof d==="object"&&("code"in d)&&d.code==="EEXIST"))throw new h("vm_hands_bind_failed","bind cgroup")}return o},Re=(t)=>{try{ne(z(t))}catch{}},D=n.prespawn?Ii({spawnProcess:j,...n.relayDependencies?.sourceEntrypoint?{sourceEntrypoint:n.relayDependencies.sourceEntrypoint}:{},log:(t,o)=>e(t,o??{})}):null;D?.arm();let Q=D?setInterval(()=>{D.arm()},He):null;Q?.unref?.();async function F(t){let o=c.get(t);if(c.delete(t),!o)return;o.abort.abort(),await o.done}return{bindCgroup:z,async startExecutor(t){if(m(),a.set(t.bindId,me()),O=!0,!t.claim)throw new h("vm_hands_bind_invalid","an executor needs the claim it serves");await F(t.bindId);let{claim:o,bindId:d}=t,f=Oe(d),g=o.owner;if(!g||typeof g.device_id!=="string"||typeof o.root_id!=="string")throw new h("vm_hands_bind_invalid","claim without its owner Device or root");let w=new AbortController,_,u,x=new Promise((s,k)=>{_=s,u=k}),L,C=new Promise((s)=>{L=s}),W=vt({headless:!0,hostExecution:!0,runtimeDirectory:n.runtimeDirectory,deviceIdentity:{deviceId:g.device_id,rootId:o.root_id,apiOrigin:n.apiOrigin},claimOwner:o.owner,root:n.root,runId:o.run_id,operationId:o.operation_id,attemptId:o.attempt_id,payload:Object.fromEntries(Object.entries(o.payload).filter(([s])=>!s.startsWith("vm_hands_"))),signal:w.signal,...t.workspaceGrant?{workspaceGrant:t.workspaceGrant}:{},emitEvent:async(s,k)=>{if(s==="hands.ready"){_(k);return}if(s==="hands.started"||s==="hands.stopped"||s==="hands.failed")return;await n.forward(d,s,k)}},{...n.relayDependencies,spawnWorker:(s)=>X(f)(s.command,s.args,s.options),...D?{takePrespawnedWorker:(s)=>{let k=D.take(s);if(!k?.pid)return k;try{return K(p(f,"cgroup.procs"),String(k.pid)),k}catch{try{k.kill("SIGKILL")}catch{}return null}},adoptSpawnedWorker:D.adopt}:{}}).then(()=>{L("executor_stopped")},(s)=>{let k=s&&typeof s==="object"&&"code"in s?String(s.code):"executor_failed";u(new h(k,s instanceof Error?s.message:String(s))),L(k)}).finally(()=>u(new h("vm_hands_executor_exited","executor ended before it was ready")));c.set(d,{abort:w,done:W,exited:C,operationId:o.operation_id,runId:o.run_id,expiresAtMs:Date.parse(String(o.payload.expires_at??""))||0});let A=await x,G=A.executor_launch_id;if(typeof G!=="string")throw new h("vm_hands_bind_failed","executor ready without a launch id");return{launchId:G,readyData:A,applied:{hands_confinement:typeof o.payload.hands_confinement==="string"?o.payload.hands_confinement:null,browser_egress:o.payload.browser_egress??null}}},takeSrtFallbacks:I,executorExited(t){return c.get(t)?.exited??new Promise(()=>{})},freezeBind(t){let o=z(t);if(U(p(o,"cgroup.freeze")))K(p(o,"cgroup.freeze"),"1")},async killAndVerifyPayload(t){let o=new Set(t?.keep??[]);if(o.size||t?.own)return xe(t?.bindId??null,o,t?.own===!0);S=!0;let d=he();try{await ye();let f=Promise.all([...c.keys()].map((u)=>F(u).catch(()=>{return})));v();let g=Date.now()+te;await J(r,g,"payload"),await f;let w=(O||n.srtWarmLate?.()===!0)&&U(p(R,"cgroup.events"));if(w)await J(R,g,"srt");let _=se(i).filter((u)=>!N(u,B));if(y!==null){let u=re(y).filter((x)=>x!==process.pid&&!N(x,B));if(u.length)throw e("vm_hands.kill_strays",{strays:E(u)}),new h("vm_hands_kill_unverified",`${u.length} process(es) the run started survived it`);y=null}if(O=!1,w)n.onSrtReset?.();if(_.length)throw e("vm_hands.kill_survivors",{pids:_.slice(0,16)}),new h("vm_hands_kill_unverified",`${_.length} payload-uid process(es) outside the payload cgroup`);a.clear();for(let u of ie())try{ne(p(r,M,u))}catch{}}finally{S=!1,d()}if(D)setTimeout(()=>{if(!c.size)D.arm()},100).unref?.()},async killProbe(){let t=Date.now()+te;if(U(p(H,"cgroup.events"))){await J(H,t,"probe");try{ne(H)}catch{}}let o=oe(process.pid);if(o===null)throw new h("vm_hands_kill_unverified","agent start time unreadable");await Ue(r,o,t);let d=(g)=>{let w=oe(g);return w!==null&&w<=o},f=se(i).filter((g)=>d(g)&&!N(g,B));if(f.length)throw e("vm_hands.kill_survivors",{pids:f.slice(0,16),at:"attest"}),new h("vm_hands_kill_unverified",`${f.length} payload-uid process(es) from before this agent`);if(y!==null){let g=[r,p(r,M)].map((u)=>u.replace(/^\/sys\/fs\/cgroup/,"")),w=R.replace(/^\/sys\/fs\/cgroup/,""),_=re(y).filter((u)=>u!==process.pid&&!N(u,B)&&!N(u,"/reason-vm-hands")&&!N(u,w)&&!g.some((x)=>fe(u,x)));if(_.length&&O)throw e("vm_hands.kill_strays",{strays:E(_),at:"attest"}),new h("vm_hands_kill_unverified",`${_.length} process(es) the run started survived it`);if(_.length)e("vm_hands.attest_concurrent",{processes:E(_),count:_.length});y=null}},async runProbe({nonce:t,script:o}){if(m(),!o.includes(pe))throw new h("vm_hands_probe_failed","probe names no proof directory");let d=n.proofParent??"/tmp/reason-vm-hands-proof";ee(d,{mode:457,recursive:!0});let f=V(d);if(f.isSymbolicLink()||!f.isDirectory()||f.uid!==(process.getuid?.()??-1)||(f.mode&4095)!==457)throw new h("vm_hands_probe_failed","proof parent is not root's 0711 directory");let g=Ae(p(d,"p-")),w=!1;try{if(!/^[A-Za-z0-9/._-]+$/.test(g)||!/^[A-Za-z0-9_-]{1,128}$/.test(t))throw new h("vm_hands_probe_failed","proof directory path or nonce");Le(g,i,i),Me(g,448);let _=V(g).ino;try{ee(H,{mode:493})}catch(C){if(!(C&&typeof C==="object"&&("code"in C)&&C.code==="EEXIST"))throw new h("vm_hands_probe_failed","probe cgroup")}let u=X(H)("/bin/bash",["-c",o.replaceAll(pe,g).replaceAll(Ke,t)],{cwd:"/",env:{PATH:"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},stdio:["ignore","pipe","ignore"]}),x="";u.stdout?.on("data",(C)=>{if(x.length<16384)x+=C.toString("utf8").slice(0,16384-x.length)});let L=await new Promise((C)=>{let W=setTimeout(()=>{w=!0,u.kill("SIGKILL"),C(124)},Be);u.once("error",()=>{clearTimeout(W),C(127)}),u.once("close",(A)=>{clearTimeout(W),C(A??1)})});return e("vm_hands.probe",{nonce_len:t.length,exit_code:L}),{exitCode:L,markers:x,proofDirInode:_}}finally{if(!w)ze(g,{recursive:!0,force:!0})}},restatLayout(){let{session_root:t,alias:o}=n.init.layout,d="invalid";try{ur(t),d="0:0:755"}catch{}let f=!1,g=-1;try{let w=V(o);g=w.uid,f=d==="0:0:755"&&o===p(t,"repo")&&!w.isSymbolicLink()&&w.isDirectory()&&Te(o)===o&&w.uid===i}catch{}return{root_mode:d,alias_ok:f,owner_uid:g}},verifyMounts(){ue(n.init.layout.session_root,e,(t)=>new h("vm_hands_mount_mismatch",t))},installEnvironment(t,o){let d=c.get(t);if(!d)throw new h("environment_unavailable","no executor owns an environment");return Je({root:n.root,operationId:d.operationId,payload:o}).installed_revision},async stop(){if(Q)clearInterval(Q);D?.close(),await Promise.all([...c.keys()].map((t)=>F(t)))}};function ie(){try{return Z(p(r,M),{withFileTypes:!0}).filter((t)=>t.isDirectory()&&/^b-[0-9a-f-]{36}$/.test(t.name)).map((t)=>t.name)}catch{return[]}}async function xe(t,o,d=!1){let f=new Set([...o].map((w)=>w.toLowerCase())),g=he();try{await ye();let w=Date.now()+te,_=new Set(ie().filter((s)=>!f.has(s.slice(2))).map((s)=>s.slice(2)));if(t)_.add(t.toLowerCase());let u=null;for(let s of _){let k=F(s).catch(()=>{return}),q=a.get(s);if(q!==void 0)u=u===null?q:Math.min(u,q);if(U(p(z(s),"cgroup.events")))await J(z(s),w,"bind");await k}let x=[...f].map((s)=>z(s).replace(/^\/sys\/fs\/cgroup/,"")),L=[r,p(r,M)].map((s)=>s.replace(/^\/sys\/fs\/cgroup/,"")),C=R.replace(/^\/sys\/fs\/cgroup/,""),W=(s)=>N(s,B)||x.some((k)=>N(s,k)),A=d?[]:se(i).filter((s)=>!W(s));if(A.length)throw e("vm_hands.kill_survivors",{pids:A.slice(0,16),beside:f.size}),new h("vm_hands_kill_unverified",`${A.length} payload-uid process(es) outside a live bind`);let G=(s)=>!W(s)&&!N(s,"/reason-vm-hands")&&!N(s,C)&&!L.some((k)=>fe(s,k));if(u!==null){let s=re(u).filter((k)=>k!==process.pid&&G(k));if(s.length)throw e("vm_hands.kill_strays",{strays:E(s),beside:f.size}),new h("vm_hands_kill_unverified",`${s.length} process(es) the run started survived it`)}for(let s of _)a.delete(s),Re(s)}finally{g()}}}function oe(n,r="/proc"){try{let i=P(p(r,String(n),"stat"),"utf8"),e=Number(i.slice(i.lastIndexOf(")")+2).split(" ")[19]);return Number.isFinite(e)?e:null}catch{return null}}function be(n,r="/proc"){try{let i=P(p(r,String(n),"stat"),"utf8"),e=Number(i.slice(i.lastIndexOf(")")+2).split(" ")[1]);return Number.isFinite(e)?e:null}catch{return null}}async function Ue(n,r,i){try{K(p(n,"cgroup.freeze"),"1")}catch(e){throw new h("vm_hands_kill_unverified",`payload cgroup.freeze: ${e instanceof Error?e.message:String(e)}`)}try{for(;;){let e=Se(n).filter((a)=>ke(a,n)),c=new Set(e.filter((a)=>{let l=oe(a);return l!==null&&l<=r}));for(let a=!0;a;){a=!1;for(let l of e){if(c.has(l))continue;let v=be(l);if(v!==null&&c.has(v))c.add(l),a=!0}}if(c.size===0)return;if(Date.now()>i)throw new h("vm_hands_kill_unverified",`${c.size} previous-boot process(es) survived`);for(let a of c)try{process.kill(a,"SIGKILL")}catch{}await new Promise((a)=>setTimeout(a,10))}}finally{try{K(p(n,"cgroup.freeze"),"0")}catch{}}}function fe(n,r,i="/proc"){try{return P(p(i,String(n),"cgroup"),"utf8").split(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Yt,zo}from"./vm-hands-entry-lite-
|
|
2
|
+
import{Yt,zo}from"./vm-hands-entry-lite-qq9w7wq6.js";export{Yt as VM_HANDS_OP_RUNNER_PERSON_ARG,zo as runVmHandsOpRunner};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import{Ge}from"./vm-hands-entry-lite-k278g9kj.js";import{wi,Xr,bi}from"./vm-hands-entry-lite.js";import{spawn as G}from"child_process";import{createHash as z}from"crypto";import{lstatSync as E,mkdirSync as K,readFileSync as W,statSync as X,writeFileSync as F}from"fs";var v="/run/reason-vm-hands",D="/run/reason-vm-hands/env",A="/home/runner/.reason/workspace",J=/^https:\/\/[a-z0-9.-]+(?::\d{1,5})?$/,V="/sys/fs/cgroup/reason-srt",q=["/usr/local/bin/reason-srt-exec","/usr/local/bin/ara-srt-exec"],Q=65536,Z=21600000;function ee(r,e="/run/ara-srt"){try{if((process.getuid?.()??-1)!==0)return;K(e,{recursive:!0,mode:448});let n=E(e);if(!n.isDirectory()||n.uid!==0||(n.mode&63)!==0){r("srt_base_keyed_skipped",{reason:"socket_dir_unsafe"});return}F(`${e}/base-keyed`,`1
|
|
3
|
-
`,{mode:420}),r("srt_base_keyed",{})}catch{r("srt_base_keyed_skipped",{reason:"error"})}}function C(r,e){let n=(c)=>(e("srt_warm_skipped",{reason:c}),Promise.resolve());if(typeof r.srt_base_settings!=="string")return n("no_settings");let o=Buffer.from(r.srt_base_settings,"base64");if(o.length===0||o.length>Q||o.toString("base64")!==r.srt_base_settings)return n("settings_invalid");let a;try{let c=E(V);if(!c.isDirectory()||c.uid!==0||(c.mode&18)!==0)return n("cgroup_unsafe");let p=q.find((f)=>E(f,{throwIfNoEntry:!1})!==void 0);if(!p)return n("cgroup_or_exec_missing");a=p;for(let[f,w]of[[a,!1],["/usr/local/bin",!0]]){let u=E(f);if((w?!u.isDirectory():!u.isFile())||u.uid!==0||(u.mode&18)!==0)return n("srt_exec_unsafe")}}catch{return n("cgroup_or_exec_missing")}if((process.getuid?.()??-1)!==0)return n("not_root");let i=performance.now(),R=z("sha256").update(o).digest("hex"),S=`${v}/srt-base-settings.json`;try{F(S,o,{mode:384,flag:"w"})}catch{return n("settings_write")}let g=G("/bin/sh",["-c",`echo $$ > ${V}/cgroup.procs || exit 125; exec "$@"`,"vm-hands-srt",a,"--settings",S,"--idle-ms",String(Z),"--","/bin/true"],{cwd:"/",env:{PATH:"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},stdio:"ignore"});return new Promise((c)=>{g.once("error",()=>{e("srt_warm_failed",{reason:"spawn"}),c()}),g.once("close",(p)=>{e(p===0?"srt_warm_done":"srt_warm_failed",{exit_code:p,warm_ms:Math.round(performance.now()-i),settings_sha256:R}),c()})})}var M=3000;function pe(r){if(!r||typeof r!=="object"||Array.isArray(r))return null;let e=r,{layout:n,device_key:o,credential:a}=e;return typeof e.workspace_id==="string"&&Number.isSafeInteger(e.instance_generation)&&typeof e.api_origin==="string"&&J.test(e.api_origin)&&typeof e.manifest_digest==="string"&&!!a&&typeof a.key_id==="string"&&Number.isSafeInteger(a.expires_at_ms)&&typeof a.signature==="string"&&!!n&&typeof n.session_root==="string"&&typeof n.alias==="string"&&Number.isSafeInteger(n.payload_uid)&&typeof n.kind==="string"&&!!o&&typeof o.pkcs8==="string"&&typeof o.spki==="string"?e:null}function L(r){K(r,{recursive:!0,mode:448});let e=X(r);if(!e.isDirectory()||(e.mode&63)!==0||e.uid!==(process.getuid?.()??-1))throw Error(`vm_hands_runtime_directory_unsafe: ${r}`)}async function ne(r){let[{CLI_VERSION:e},n,o,a]=await Promise.all([import("./version-
|
|
4
|
-
`)){let n=e.split(":");if(n.length>=4&&Number(n[2])===r&&/^\d+$/.test(n[3]??"")&&Number(n[3])>0)return Number(n[3])}throw Error("vm_hands_payload_account_unavailable")}function se(r,e){let n=e.owner;if(!n||typeof n.organization_id!=="string"||typeof n.device_id!=="string"||typeof e.root_id!=="string")return null;return{version:4,apiOrigin:r.api_origin,orgId:n.organization_id,deviceId:n.device_id,devicePublicKey:"",displayName:"vm-hands",registeredAt:new Date(0).toISOString(),handsSlots:1,roots:[{id:e.root_id,label:"workspace",path:A,pathFingerprint:"0".repeat(64),permissions:{read:!0,write:!0,execute:!0,discover_environment:!0,expose_mcp:!1}}]}}function ae(r=process.platform,e="/proc/self/oom_score_adj"){if(r!=="linux")return null;let n;try{n=W(e,"utf8").trim()}catch{return{value:"unreadable"}}if(!/^-?\d+$/.test(n))return{value:"unreadable"};let o=Number(n);return o<0?{value:o}:null}async function fe(r,e){let n=ae();if(n)e("vm_hands.oom_protected",{code:"vm_hands_oom_protected",value:n.value}),await new Promise(()=>{setInterval(()=>{return},1073741824)});L(v),L(D),ee(e);let o=C(r,e),a=!1,i=async()=>{if(!await Promise.race([o.then(()=>!0),new Promise((s)=>setTimeout(()=>s(!1),M).unref?.())]))a=!0,e("srt_warm_late",{wait_ms:M})},[{configureDesktopAccount:R},{configureWorkerSandbox:S}]=await Promise.all([import("./desktop-account-5v7x0ajx.js"),import("./worker-sandbox-smqj3mbe.js")]);S();try{R({value:String(r.layout.payload_uid)})}catch{e("payload_account_unavailable"),await new Promise(()=>{setInterval(()=>{return},1073741824)})}let g=new AbortController;for(let t of["SIGTERM","SIGINT"])process.on(t,()=>g.abort());let c=new Map,p,f=new Promise((t)=>{p=t}),w=f.then(()=>import("./vm-hands-executor-
|
|
3
|
+
`,{mode:420}),r("srt_base_keyed",{})}catch{r("srt_base_keyed_skipped",{reason:"error"})}}function C(r,e){let n=(c)=>(e("srt_warm_skipped",{reason:c}),Promise.resolve());if(typeof r.srt_base_settings!=="string")return n("no_settings");let o=Buffer.from(r.srt_base_settings,"base64");if(o.length===0||o.length>Q||o.toString("base64")!==r.srt_base_settings)return n("settings_invalid");let a;try{let c=E(V);if(!c.isDirectory()||c.uid!==0||(c.mode&18)!==0)return n("cgroup_unsafe");let p=q.find((f)=>E(f,{throwIfNoEntry:!1})!==void 0);if(!p)return n("cgroup_or_exec_missing");a=p;for(let[f,w]of[[a,!1],["/usr/local/bin",!0]]){let u=E(f);if((w?!u.isDirectory():!u.isFile())||u.uid!==0||(u.mode&18)!==0)return n("srt_exec_unsafe")}}catch{return n("cgroup_or_exec_missing")}if((process.getuid?.()??-1)!==0)return n("not_root");let i=performance.now(),R=z("sha256").update(o).digest("hex"),S=`${v}/srt-base-settings.json`;try{F(S,o,{mode:384,flag:"w"})}catch{return n("settings_write")}let g=G("/bin/sh",["-c",`echo $$ > ${V}/cgroup.procs || exit 125; exec "$@"`,"vm-hands-srt",a,"--settings",S,"--idle-ms",String(Z),"--","/bin/true"],{cwd:"/",env:{PATH:"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},stdio:"ignore"});return new Promise((c)=>{g.once("error",()=>{e("srt_warm_failed",{reason:"spawn"}),c()}),g.once("close",(p)=>{e(p===0?"srt_warm_done":"srt_warm_failed",{exit_code:p,warm_ms:Math.round(performance.now()-i),settings_sha256:R}),c()})})}var M=3000;function pe(r){if(!r||typeof r!=="object"||Array.isArray(r))return null;let e=r,{layout:n,device_key:o,credential:a}=e;return typeof e.workspace_id==="string"&&Number.isSafeInteger(e.instance_generation)&&typeof e.api_origin==="string"&&J.test(e.api_origin)&&typeof e.manifest_digest==="string"&&!!a&&typeof a.key_id==="string"&&Number.isSafeInteger(a.expires_at_ms)&&typeof a.signature==="string"&&!!n&&typeof n.session_root==="string"&&typeof n.alias==="string"&&Number.isSafeInteger(n.payload_uid)&&typeof n.kind==="string"&&!!o&&typeof o.pkcs8==="string"&&typeof o.spki==="string"?e:null}function L(r){K(r,{recursive:!0,mode:448});let e=X(r);if(!e.isDirectory()||(e.mode&63)!==0||e.uid!==(process.getuid?.()??-1))throw Error(`vm_hands_runtime_directory_unsafe: ${r}`)}async function ne(r){let[{CLI_VERSION:e},n,o,a]=await Promise.all([import("./version-bq5j7cqg.js"),import("./hands-worker-source-cgrpm21b.js"),import("./network-contract-9x9kc5vv.js"),import("./device-workspace-p9q9dckg.js")]),{REASON_HANDS_PROTOCOL_VERSION:i}=await import("./reason-hands-protocol-2tnghj3b.js");return{reason_runtime_version:e,bridge_version:e,protocol_version:Ge,execution_eligible:!0,instance_generation:r.instance_generation,capabilities:{supported_operations:["hands.connect"],hands_worker_artifact_sha256:n.REASON_HANDS_WORKER_ARTIFACT_SHA256,hands_worker_entrypoint:n.REASON_HANDS_WORKER_ENTRYPOINT,hands_slots:1,max_payload_bytes:o.LOCAL_OPERATION_MAX_BYTES,max_result_bytes:o.LOCAL_OPERATION_MAX_BYTES,operation_constraints:{"hands.connect":{ready:!0,execution_mode:"host",transport:"wss_relay",worker:"ara_hands",slots:1,session_group:o.HANDS_SESSION_GROUP,worker_version:n.REASON_HANDS_WORKER_VERSION,protocol_version:i,worker_artifact_sha256:n.REASON_HANDS_WORKER_ARTIFACT_SHA256,worker_entrypoint:n.REASON_HANDS_WORKER_ENTRYPOINT,policy_mode:"full_access",policy_version:1,workspace_base:a.REASON_WORKSPACE_BASE,workspace_layout:a.SESSION_WORKSPACE_LAYOUT,browser_state:"optional_headless",desktop:!1,max_session_ms:43200000,environment_delivery:o.HANDS_ENVIRONMENT_DELIVERY,[o.HANDS_ENVIRONMENT_AT_CLAIM_KEY]:o.HANDS_ENVIRONMENT_AT_CLAIM,[o.HANDS_CLOUD_ACCESS_KEY]:o.HANDS_CLOUD_ACCESS,[o.HANDS_LARGE_ENVIRONMENT_KEY]:o.HANDS_LARGE_ENVIRONMENT,[o.HANDS_CONFINEMENT_KEY]:o.HANDS_CONFINEMENT,[o.HANDS_JOBS_USER_KEY]:o.HANDS_JOBS_USER,vm_hands:"v1"}}}}}var k=["fs.read","fs.write","fs.export","fs.import","exec.run","exec.full","process.list","ports.list","pty.start","jobs.control"],te=new Set(["pty.start","jobs.control"]);function re(r,e){let n=e([{id:"vm-hands",label:"workspace",path:A,pathFingerprint:"0".repeat(64),permissions:{read:!0,write:!0,execute:!0,discover_environment:!0,expose_mcp:!1}}],{worker:{executionMode:"unsandboxed",readiness:Object.fromEntries(k.map((i)=>[i,!0]))}}),o=r.capabilities,a={...o.operation_constraints};for(let i of k)a[i]={...n.operation_constraints?.[i]??{},ready:!0,execution_mode:n.operation_constraints?.[i]?.execution_mode??"host"};return{...r,capabilities:{...o,supported_operations:["hands.connect",...k],operation_constraints:a}}}function oe(r){for(let e of W("/etc/passwd","utf8").split(`
|
|
4
|
+
`)){let n=e.split(":");if(n.length>=4&&Number(n[2])===r&&/^\d+$/.test(n[3]??"")&&Number(n[3])>0)return Number(n[3])}throw Error("vm_hands_payload_account_unavailable")}function se(r,e){let n=e.owner;if(!n||typeof n.organization_id!=="string"||typeof n.device_id!=="string"||typeof e.root_id!=="string")return null;return{version:4,apiOrigin:r.api_origin,orgId:n.organization_id,deviceId:n.device_id,devicePublicKey:"",displayName:"vm-hands",registeredAt:new Date(0).toISOString(),handsSlots:1,roots:[{id:e.root_id,label:"workspace",path:A,pathFingerprint:"0".repeat(64),permissions:{read:!0,write:!0,execute:!0,discover_environment:!0,expose_mcp:!1}}]}}function ae(r=process.platform,e="/proc/self/oom_score_adj"){if(r!=="linux")return null;let n;try{n=W(e,"utf8").trim()}catch{return{value:"unreadable"}}if(!/^-?\d+$/.test(n))return{value:"unreadable"};let o=Number(n);return o<0?{value:o}:null}async function fe(r,e){let n=ae();if(n)e("vm_hands.oom_protected",{code:"vm_hands_oom_protected",value:n.value}),await new Promise(()=>{setInterval(()=>{return},1073741824)});L(v),L(D),ee(e);let o=C(r,e),a=!1,i=async()=>{if(!await Promise.race([o.then(()=>!0),new Promise((s)=>setTimeout(()=>s(!1),M).unref?.())]))a=!0,e("srt_warm_late",{wait_ms:M})},[{configureDesktopAccount:R},{configureWorkerSandbox:S}]=await Promise.all([import("./desktop-account-5v7x0ajx.js"),import("./worker-sandbox-smqj3mbe.js")]);S();try{R({value:String(r.layout.payload_uid)})}catch{e("payload_account_unavailable"),await new Promise(()=>{setInterval(()=>{return},1073741824)})}let g=new AbortController;for(let t of["SIGTERM","SIGINT"])process.on(t,()=>g.abort());let c=new Map,p,f=new Promise((t)=>{p=t}),w=f.then(()=>import("./vm-hands-executor-7k9z9988.js")).then(({createVmHandsExecutor:t})=>{let s=t({init:r,root:A,runtimeDirectory:v,apiOrigin:r.api_origin,prespawn:!0,onSrtReset:()=>{a=!1,o=C(r,e)},srtWarmLate:()=>a,forward:(_,d,y)=>c.get(_)?.(d,y)??Promise.reject(Error("vm_hands_not_bound")),log:(_,d)=>e(_,d)});return e("executor_loaded"),s}),u=(t)=>async(...s)=>(await w)[t](...s),h=null;w.then((t)=>{h=(s)=>t.executorExited(s)});let m={startExecutor:async(...t)=>(await i(),u("startExecutor")(...t)),killAndVerifyPayload:u("killAndVerifyPayload"),killProbe:u("killProbe"),runProbe:async(...t)=>(await i(),u("runProbe")(...t)),restatLayout:()=>{throw Error("replaced below")},verifyMounts:()=>{throw Error("replaced below")},installEnvironment:()=>{throw Error("replaced below")},executorExited:(t)=>h?h(t):new Promise(()=>{}),takeSrtFallbacks:()=>null};w.then((t)=>{m.restatLayout=()=>t.restatLayout(),m.verifyMounts=()=>t.verifyMounts(),m.installEnvironment=(s,_)=>t.installEnvironment(s,_),m.freezeBind=(s)=>t.freezeBind(s),m.takeSrtFallbacks=()=>t.takeSrtFallbacks?.()??null});let B=await wi(r),Y=new Xr(r,B,m,{envRoot:D}),x=ne(r),I=null,U=Promise.all([x,import("./local-capabilities-c04tbapa.js")]).then(([t,s])=>{I=re(t,s.capabilityInventoryForRoots),e("device_ops_loaded")}).catch((t)=>e("device_ops_unavailable",{error:t instanceof Error?t.name:"error"})),N=f.then(()=>import("./vm-hands-executor-7k9z9988.js")).then(({createVmHandsOpRunners:t,vmHandsBindCgroup:s,VM_HANDS_PAYLOAD_CGROUP:_})=>t({payloadUid:r.layout.payload_uid,payloadGid:oe(r.layout.payload_uid),bindCgroup:(d)=>s(_,d),log:(d,y)=>e(d,y)})).catch(()=>null);N.then((t)=>t?.warm("person")),e("agent_ready"),await bi({apiOrigin:r.api_origin,agent:Y,signal:g.signal,heartbeat:async()=>I??await x,executeOp:async({kind:t,claim:s,bindId:_,signal:d,emit:y})=>{let O=se(r,s);if(!O)return{status:"failed",error_code:"vm_hands_bind_invalid"};let H={executionMode:"unsandboxed",runtimeDirectory:v,readiness:Object.fromEntries(k.map((l)=>[l,!0]))},P=(l)=>{let b=typeof l.kind==="string"?l.kind:"";if(b)y({kind:b,...l.data&&typeof l.data==="object"?{data:l.data}:{}})};if(s.capability==="exec.full"&&t!=="person")return{status:"failed",error_code:"capability_not_granted"};if(s.capability==="automation.call.v1"&&t!=="model")return{status:"failed",error_code:"capability_not_granted"};let j=s.capability==="pty.start"&&t==="person"&&!s.authority;if(te.has(String(s.capability))&&!j){let{executeLocalOperation:l}=await import("./local-capabilities-c04tbapa.js");return l(O,s,{worker:H,signal:d,emit:(b)=>P(b)})}let T=await N;if(!T)return{status:"failed",error_code:"vm_hands_payload_account_unavailable"};return T.run(t,{id:String(s.attempt_id),claim:s,state:O,worker:H},P,d,_)},readyData:({launchId:t})=>({executor_launch_id:t}),log:(t,s)=>{if(t==="vm_hands.registered"||t==="vm_hands.reconnected")p();e(t,s)},onTurn:(t,s)=>{if(s)c.set(t,s);else c.delete(t)}}),await(await w).stop(),(await N)?.stop()}export{pe as parseVmHandsInit,fe as runVmHands};
|
package/package.json
CHANGED