@reason-machines/cli-linux-x64 0.2.419 → 0.2.420
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_NOTICES.txt +8 -7
- package/bin/reason +2 -2
- package/bin/runtime/srt/sandbox-runtime.mjs +52 -52
- package/bin/vm-hands/api-18d75dfn.js +2 -0
- package/bin/vm-hands/api-credentials-3vhge1ap.js +2 -0
- package/bin/vm-hands/connect-cli-s5smpb2n.js +2 -0
- package/bin/vm-hands/custom-endpoint-device-17t4efc4.js +2 -0
- package/bin/vm-hands/desktop-account-6sjrxy69.js +2 -0
- package/bin/vm-hands/device-workspace-s50q53sz.js +2 -0
- package/bin/vm-hands/fsevents-p3d8kd0p.js +2 -0
- package/bin/vm-hands/hands-worker-source-kddz4y15.js +2 -0
- package/bin/vm-hands/index-wrw65904.js +12818 -0
- package/bin/vm-hands/install-receipt-ysa70fvh.js +2 -0
- package/bin/vm-hands/local-automation-3amth2kd.js +2 -0
- package/bin/vm-hands/local-capabilities-hgmepv53.js +2 -0
- package/bin/vm-hands/local-desktop-users-cppjjr81.js +2 -0
- package/bin/vm-hands/local-display-mac-0qz3b627.js +2 -0
- package/bin/vm-hands/local-display-session-e4n5hx0v.js +2 -0
- package/bin/vm-hands/local-display-video-28gmymr4.js +2 -0
- package/bin/vm-hands/local-managed-process-2313kw42.js +2 -0
- package/bin/vm-hands/local-pty-session-rpk05ap5.js +2 -0
- package/bin/vm-hands/managed-runtime-3z71qd28.js +2 -0
- package/bin/vm-hands/network-contract-trkxqc0w.js +2 -0
- package/bin/vm-hands/package-xqbhdf15.js +2 -0
- package/bin/vm-hands/permissions-9yn6rcvc.js +2 -0
- package/bin/vm-hands/reason-hands-protocol-xn3ddz70.js +2 -0
- package/bin/vm-hands/serve-service-s57v1tq2.js +2 -0
- package/bin/vm-hands/status-grxd9vg7.js +10 -0
- package/bin/vm-hands/version-bqwnackx.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-004yshd1.js +452 -0
- package/bin/vm-hands/vm-hands-entry-lite-1xwxazmz.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-agsp101y.js → vm-hands-entry-lite-21qpxvt8.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-2n4n9cs8.js +126 -0
- package/bin/vm-hands/vm-hands-entry-lite-2rd6t7ry.js +9 -0
- package/bin/vm-hands/vm-hands-entry-lite-37kgczw8.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-3krzmhkk.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-4vgwtn85.js +52 -0
- package/bin/vm-hands/vm-hands-entry-lite-4vks5phw.js +42 -0
- package/bin/vm-hands/vm-hands-entry-lite-50zbqwkv.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-5dtfehjv.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-60pg3wxj.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-6b0dxpkm.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-6c67a3jc.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-8r31b0ps.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-aj139v8j.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-avc65bd7.js +65 -0
- package/bin/vm-hands/{vm-hands-entry-lite-vsa7t6m9.js → vm-hands-entry-lite-beyyy1gz.js} +54 -54
- package/bin/vm-hands/vm-hands-entry-lite-bx5zy5bd.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-fzkfajew.js → vm-hands-entry-lite-cbrtaz8j.js} +5 -9
- package/bin/vm-hands/vm-hands-entry-lite-dk79tnax.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-ec9jemny.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-ev1k9x73.js +539 -0
- package/bin/vm-hands/vm-hands-entry-lite-f2qkz14f.js +128 -0
- package/bin/vm-hands/vm-hands-entry-lite-fbhqfzbq.js +4 -0
- package/bin/vm-hands/{vm-hands-entry-lite-4k4h9rcq.js → vm-hands-entry-lite-fcvf8md1.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-g4zd2d5n.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-hbs3tpdg.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-hk6trmwa.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-hqmyd73s.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-jev771b3.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-jzz73e3f.js +112 -0
- package/bin/vm-hands/vm-hands-entry-lite-m2bswqxe.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-np07qyeq.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-nzmkyezg.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-pf5qtbj5.js +5 -0
- package/bin/vm-hands/vm-hands-entry-lite-qy9xg6em.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-6y6pz2yw.js → vm-hands-entry-lite-rfz60hb3.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-s4bharcb.js +9 -0
- package/bin/vm-hands/vm-hands-entry-lite-s5qkb1fk.js +6 -0
- package/bin/vm-hands/vm-hands-entry-lite-sbtjmy0e.js +14 -0
- package/bin/vm-hands/vm-hands-entry-lite-tdgtpx8e.js +2 -0
- package/bin/vm-hands/vm-hands-entry-lite-vpz54vwj.js +7 -0
- package/bin/vm-hands/vm-hands-entry-lite-wx4ax7wg.js +4 -0
- package/bin/vm-hands/vm-hands-entry-lite-yretc2th.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-z76nfb19.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-zjxzm61j.js +105 -0
- package/bin/vm-hands/vm-hands-entry-lite-zp6naptr.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite.js +3 -1
- package/bin/vm-hands/vm-hands-executor-p92kw8nz.js +11 -0
- package/bin/vm-hands/vm-hands-op-runner-ekgtqc07.js +2 -0
- package/bin/vm-hands/vm-hands-runtime-tj93a1pm.js +4 -0
- package/bin/vm-hands/worker-preview-readiness-w62n91kr.js +2 -0
- package/bin/vm-hands/worker-sandbox-2r5nseff.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-credentials-s4897qxy.js +0 -2
- package/bin/vm-hands/api-m73x3da5.js +0 -2
- package/bin/vm-hands/ask-relay-4kwcx2b7.js +0 -8
- package/bin/vm-hands/connect-cli-34b18gjs.js +0 -2
- package/bin/vm-hands/custom-endpoint-device-j012b4bd.js +0 -2
- package/bin/vm-hands/desktop-account-0q0arpzk.js +0 -2
- package/bin/vm-hands/device-workspace-3jxhs54b.js +0 -2
- package/bin/vm-hands/hands-worker-source-y64axsw3.js +0 -2
- package/bin/vm-hands/index-194s4vz0.js +0 -12818
- package/bin/vm-hands/install-receipt-1g68b446.js +0 -2
- package/bin/vm-hands/local-automation-k2w46hn2.js +0 -2
- package/bin/vm-hands/local-capabilities-tdzbqmrb.js +0 -2
- package/bin/vm-hands/local-desktop-users-6thzvydd.js +0 -2
- package/bin/vm-hands/local-display-mac-59ma7sxa.js +0 -2
- package/bin/vm-hands/local-display-session-4833qq7h.js +0 -2
- package/bin/vm-hands/local-display-video-c1143mz6.js +0 -2
- package/bin/vm-hands/local-managed-process-mr0zpk7c.js +0 -2
- package/bin/vm-hands/local-pty-session-bwarwpsd.js +0 -2
- package/bin/vm-hands/managed-runtime-vz1wqwwg.js +0 -2
- package/bin/vm-hands/network-contract-gprc37sw.js +0 -2
- package/bin/vm-hands/package-ej9snd47.js +0 -2
- package/bin/vm-hands/permissions-7sfghef4.js +0 -2
- package/bin/vm-hands/reason-hands-protocol-jsrkawe2.js +0 -2
- package/bin/vm-hands/serve-service-kngyzh74.js +0 -2
- package/bin/vm-hands/status-jz29fb95.js +0 -96
- package/bin/vm-hands/version-g29vt13t.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-0h4qmgm2.js +0 -9
- package/bin/vm-hands/vm-hands-entry-lite-0k13wmzm.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-1exfjv79.js +0 -52
- package/bin/vm-hands/vm-hands-entry-lite-26q3hbdc.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-28s7v15d.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-2m5dwrdf.js +0 -6
- package/bin/vm-hands/vm-hands-entry-lite-37hvds7z.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-3rqdzqhk.js +0 -112
- package/bin/vm-hands/vm-hands-entry-lite-4gh5kfr4.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-6nwbqg37.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-714wspqb.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-7zk0r3p9.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-9qep7pka.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-am6kj1n1.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-as1tkffn.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-bxt4n1nj.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-c2g3wmkp.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-d2w8tghq.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-d98m00b8.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-daxcxjze.js +0 -344
- package/bin/vm-hands/vm-hands-entry-lite-dcnyve97.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-e1b89x66.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-ej5ffjck.js +0 -105
- package/bin/vm-hands/vm-hands-entry-lite-ejkba2nk.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-f3wh0dza.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-f5xb489y.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-feybcq63.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-fpp2bs9y.js +0 -452
- package/bin/vm-hands/vm-hands-entry-lite-gt497d5x.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-gxper06w.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-j2ng164q.js +0 -9
- package/bin/vm-hands/vm-hands-entry-lite-jp9q2vsx.js +0 -127
- package/bin/vm-hands/vm-hands-entry-lite-magmzx9c.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-ntx8fdyq.js +0 -5
- package/bin/vm-hands/vm-hands-entry-lite-pfzczmaa.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-pkc4ry5x.js +0 -539
- package/bin/vm-hands/vm-hands-entry-lite-pp7jfqzr.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-q8wkrzer.js +0 -66
- package/bin/vm-hands/vm-hands-entry-lite-s823n1q9.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-s9xf5z69.js +0 -7
- package/bin/vm-hands/vm-hands-entry-lite-tchc7z17.js +0 -128
- package/bin/vm-hands/vm-hands-entry-lite-tytfs183.js +0 -42
- package/bin/vm-hands/vm-hands-entry-lite-v4jtxgaj.js +0 -4
- package/bin/vm-hands/vm-hands-entry-lite-vgpt2n1v.js +0 -11
- package/bin/vm-hands/vm-hands-entry-lite-xp3qzxk5.js +0 -3
- package/bin/vm-hands/vm-hands-executor-epyhpjv3.js +0 -11
- package/bin/vm-hands/vm-hands-op-runner-fn1qph82.js +0 -2
- package/bin/vm-hands/vm-hands-runtime-8vt9etvv.js +0 -4
- package/bin/vm-hands/worker-preview-readiness-yfjgban2.js +0 -2
- package/bin/vm-hands/worker-sandbox-z0t69av8.js +0 -2
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Be as a,Ce as b,De as c,Ee as d,Fe as e,Ge as f,He as g,Ie as h,Je as i,Ke as j,Le as k,Me as l,Ne as m,Oe as n,Pe as o,Qe as p,Re as q,Se as r,Te as s,Ue as t,Ve as u,We as v}from"./vm-hands-entry-lite-as1tkffn.js";import"./vm-hands-entry-lite-26q3hbdc.js";import"./vm-hands-entry-lite-4k4h9rcq.js";import"./vm-hands-entry-lite-6nwbqg37.js";import"./vm-hands-entry-lite-feybcq63.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{v as runInstallReceiptCli,u as recordInstallationReceipt,o as pathEntryAddedByInstaller,p as parseInstallationReceipt,q as loadInstallationReceipt,l as installerReceiptLauncher,n as installerReasonAlias,i as installerLauncherNames,h as installationReceiptPath,g as installationConfigHome,m as installationAliasMatchesTarget,r as hasInstallationDeviceConsent,s as authorizeInstallationForFutureDevice,t as authorizeDesktopInstallationForFutureDevice,k as INSTALLER_WORKER_EXECUTABLES,j as INSTALLER_WORKER_DIRECTORY,a as INSTALLATION_RECEIPT_SCHEMA_VERSION,b as INSTALLATION_DEVICE_CONSENT_VERSION,f as INSTALLATION_BACKGROUND_MODES,e as FUTURE_DEVICE_CONSENT_SCOPE,c as DESKTOP_ACCOUNT_ACCESS_VERSION,d as DESKTOP_ACCOUNT_ACCESS_SCOPE};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{$d as d,Yd as a,Zd as b,_d as c,ae as e,be as f,ce as g,de as h,ee as i,fe as j,ge as k,he as l}from"./vm-hands-entry-lite-fzkfajew.js";import"./vm-hands-entry-lite-ej5ffjck.js";import"./vm-hands-entry-lite-as1tkffn.js";import"./vm-hands-entry-lite-tytfs183.js";import"./vm-hands-entry-lite-tchc7z17.js";import"./vm-hands-entry-lite-jp9q2vsx.js";import"./vm-hands-entry-lite-s823n1q9.js";import"./vm-hands-entry-lite-ntx8fdyq.js";import"./vm-hands-entry-lite-agsp101y.js";import"./vm-hands-entry-lite-9qep7pka.js";import"./vm-hands-entry-lite-28s7v15d.js";import"./vm-hands-entry-lite-xp3qzxk5.js";import"./vm-hands-entry-lite-26q3hbdc.js";import"./vm-hands-entry-lite-4k4h9rcq.js";import"./vm-hands-entry-lite-1exfjv79.js";import"./vm-hands-entry-lite-714wspqb.js";import"./vm-hands-entry-lite-0h4qmgm2.js";import"./vm-hands-entry-lite-6nwbqg37.js";import"./vm-hands-entry-lite-feybcq63.js";import"./vm-hands-entry-lite-am6kj1n1.js";import"./vm-hands-entry-lite-d98m00b8.js";import"./vm-hands-entry-lite-3rqdzqhk.js";import"./vm-hands-entry-lite-q8wkrzer.js";import"./vm-hands-entry-lite-v4jtxgaj.js";import"./vm-hands-entry-lite-gxper06w.js";import"./vm-hands-entry-lite-6y6pz2yw.js";import"./vm-hands-entry-lite-0k13wmzm.js";import"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{d as runRelayed,e as runMacComputerUse,l as runLocalAutomation,k as runAutomationCallLocally,b as parseAutomationPayload,g as localUserChromeProfiles,h as localUserChromeInstance,f as localUserChromeHost,j as localBrowserProfile,c as localAutomationAvailable,i as ensureLocalBrowser,a as AUTOMATION_CHUNK_BYTES};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{$a as k,Ta as c,Ua as d,Va as e,Wa as f,Xa as g,Ya as h,Za as i,_a as j,ab as l,bb as m,cb as n,db as o,eb as p,fb as q,gb as r,hb as s,ib as t,jb as u,kb as v,lb as w}from"./vm-hands-entry-lite-pkc4ry5x.js";import"./vm-hands-entry-lite-s9xf5z69.js";import"./vm-hands-entry-lite-pfzczmaa.js";import"./vm-hands-entry-lite-fpp2bs9y.js";import"./vm-hands-entry-lite-vsa7t6m9.js";import"./vm-hands-entry-lite-j2ng164q.js";import"./vm-hands-entry-lite-2m5dwrdf.js";import"./vm-hands-entry-lite-gt497d5x.js";import"./vm-hands-entry-lite-d2w8tghq.js";import"./vm-hands-entry-lite-f5xb489y.js";import"./vm-hands-entry-lite-c2g3wmkp.js";import"./vm-hands-entry-lite-fzkfajew.js";import"./vm-hands-entry-lite-ej5ffjck.js";import"./vm-hands-entry-lite-as1tkffn.js";import"./vm-hands-entry-lite-tytfs183.js";import"./vm-hands-entry-lite-tchc7z17.js";import"./vm-hands-entry-lite-jp9q2vsx.js";import"./vm-hands-entry-lite-s823n1q9.js";import"./vm-hands-entry-lite-ntx8fdyq.js";import"./vm-hands-entry-lite-agsp101y.js";import"./vm-hands-entry-lite-9qep7pka.js";import"./vm-hands-entry-lite-28s7v15d.js";import"./vm-hands-entry-lite-xp3qzxk5.js";import"./vm-hands-entry-lite-26q3hbdc.js";import"./vm-hands-entry-lite-4k4h9rcq.js";import"./vm-hands-entry-lite-1exfjv79.js";import{Fj as b}from"./vm-hands-entry-lite-714wspqb.js";import"./vm-hands-entry-lite-0h4qmgm2.js";import"./vm-hands-entry-lite-6nwbqg37.js";import"./vm-hands-entry-lite-feybcq63.js";import"./vm-hands-entry-lite-am6kj1n1.js";import"./vm-hands-entry-lite-d98m00b8.js";import"./vm-hands-entry-lite-3rqdzqhk.js";import"./vm-hands-entry-lite-q8wkrzer.js";import"./vm-hands-entry-lite-v4jtxgaj.js";import"./vm-hands-entry-lite-gxper06w.js";import"./vm-hands-entry-lite-6y6pz2yw.js";import"./vm-hands-entry-lite-0k13wmzm.js";import{ql as a}from"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{j as writeOpenFlags,g as spawnCaptured,f as sandboxProfile,e as safeEnvironment,m as runTransferCapability,i as runFileCapability,v as rebindLocalHandsControl,k as openHandsWorkspaceGrant,b as isProtectedLocalPath,l as grantLocalHandsWorkspaceControl,w as executeLocalOperation,o as enrolledWorkspaceRootFingerprint,s as enrolledRootPaths,r as enrolledHomeContainedRootFingerprints,p as enrolledAccountRootPath,q as enrolledAccountRootFingerprint,u as deliverLocalHandsEnvironment,h as defaultLocalCommandRunner,d as confinedExecutionShell,t as capabilityInventoryForRoots,c as SHORT_REQUEST_CAPABILITIES,a as LocalCapabilityError,n as LOCAL_CAPABILITY_REGISTRY};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{$k as f,Wk as a,Xk as b,Yk as c,Zk as d,_k as e,al as g}from"./vm-hands-entry-lite-v4jtxgaj.js";import"./vm-hands-entry-lite-gxper06w.js";import"./vm-hands-entry-lite-6y6pz2yw.js";import"./vm-hands-entry-lite-0k13wmzm.js";import"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{f as trackDesktopRun,c as releaseLocalDesktop,a as noteLocalDesktopUse,g as holdLocalDesktop,b as forgetLocalDesktopUse,e as DESKTOP_WAIT_MS,d as DESKTOP_IDLE_MS};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Ok as a,Pk as b,Qk as c,Rk as d,Sk as e,Tk as f,Uk as g}from"./vm-hands-entry-lite-3rqdzqhk.js";import"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{c as requestMacScreenAccess,d as parseMacWindowBounds,a as parseMacScreenStatus,e as openMacWindowBounds,g as openMacInput,b as macScreenStatus,f as MacInputTranslator};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Ag as d,Bg as e,Cg as f,Dg as g,Eg as h,Fg as i,xg as a,yg as b,zg as c}from"./vm-hands-entry-lite-tchc7z17.js";import"./vm-hands-entry-lite-jp9q2vsx.js";import"./vm-hands-entry-lite-s823n1q9.js";import"./vm-hands-entry-lite-ntx8fdyq.js";import"./vm-hands-entry-lite-agsp101y.js";import"./vm-hands-entry-lite-9qep7pka.js";import"./vm-hands-entry-lite-28s7v15d.js";import"./vm-hands-entry-lite-xp3qzxk5.js";import"./vm-hands-entry-lite-26q3hbdc.js";import"./vm-hands-entry-lite-4k4h9rcq.js";import"./vm-hands-entry-lite-1exfjv79.js";import"./vm-hands-entry-lite-714wspqb.js";import"./vm-hands-entry-lite-0h4qmgm2.js";import"./vm-hands-entry-lite-6nwbqg37.js";import"./vm-hands-entry-lite-feybcq63.js";import"./vm-hands-entry-lite-am6kj1n1.js";import"./vm-hands-entry-lite-d98m00b8.js";import"./vm-hands-entry-lite-3rqdzqhk.js";import"./vm-hands-entry-lite-q8wkrzer.js";import"./vm-hands-entry-lite-v4jtxgaj.js";import"./vm-hands-entry-lite-gxper06w.js";import"./vm-hands-entry-lite-6y6pz2yw.js";import"./vm-hands-entry-lite-0k13wmzm.js";import"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{i as runLocalDisplayStream,h as resizeLinuxDesktop,f as privateDirectory,c as parseDisplayStreamPayload,e as localDisplayReady,d as localDisplayAvailable,g as ensureLinuxDesktop,a as LOCAL_DISPLAY_MAX_SESSION_MS,b as LINUX_WORKER_DISPLAY};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Ng as a,Og as b,Pg as c,Qg as d,Rg as e}from"./vm-hands-entry-lite-jp9q2vsx.js";import"./vm-hands-entry-lite-28s7v15d.js";import"./vm-hands-entry-lite-1exfjv79.js";import"./vm-hands-entry-lite-714wspqb.js";import"./vm-hands-entry-lite-0h4qmgm2.js";import"./vm-hands-entry-lite-6nwbqg37.js";import"./vm-hands-entry-lite-feybcq63.js";import"./vm-hands-entry-lite-am6kj1n1.js";import"./vm-hands-entry-lite-d98m00b8.js";import"./vm-hands-entry-lite-3rqdzqhk.js";import"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{d as simulatorVideoFfmpeg,e as localDisplayVideoAvailable,c as createDisplayVideoLane,b as WINDOWS_SCREEN,a as MAC_SCREEN};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Fb as a,Gb as b,Hb as c,Ib as d,Jb as e,Kb as f}from"./vm-hands-entry-lite-pfzczmaa.js";import"./vm-hands-entry-lite-fpp2bs9y.js";import"./vm-hands-entry-lite-vsa7t6m9.js";import"./vm-hands-entry-lite-j2ng164q.js";import"./vm-hands-entry-lite-2m5dwrdf.js";import"./vm-hands-entry-lite-f5xb489y.js";import"./vm-hands-entry-lite-tytfs183.js";import"./vm-hands-entry-lite-ntx8fdyq.js";import"./vm-hands-entry-lite-agsp101y.js";import"./vm-hands-entry-lite-9qep7pka.js";import"./vm-hands-entry-lite-28s7v15d.js";import"./vm-hands-entry-lite-xp3qzxk5.js";import"./vm-hands-entry-lite-26q3hbdc.js";import"./vm-hands-entry-lite-4k4h9rcq.js";import"./vm-hands-entry-lite-714wspqb.js";import"./vm-hands-entry-lite-6nwbqg37.js";import"./vm-hands-entry-lite-feybcq63.js";import"./vm-hands-entry-lite-d98m00b8.js";import"./vm-hands-entry-lite-q8wkrzer.js";import"./vm-hands-entry-lite-v4jtxgaj.js";import"./vm-hands-entry-lite-gxper06w.js";import"./vm-hands-entry-lite-6y6pz2yw.js";import"./vm-hands-entry-lite-0k13wmzm.js";import"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{d as runManagedDeviceProcess,f as retireManagedDeviceProcess,c as managedProcessJournalLocations,e as controlManagedDeviceProcess,a as ManagedProcessStoppedError,b as DIRECT_PROCESS_MAX_JOURNALS};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{$g as c,Zg as a,_g as b,ah as d,bh as e,ch as f,dh as g,eh as h,fh as i,gh as j}from"./vm-hands-entry-lite-s823n1q9.js";import"./vm-hands-entry-lite-ntx8fdyq.js";import"./vm-hands-entry-lite-agsp101y.js";import"./vm-hands-entry-lite-9qep7pka.js";import"./vm-hands-entry-lite-xp3qzxk5.js";import"./vm-hands-entry-lite-26q3hbdc.js";import"./vm-hands-entry-lite-4k4h9rcq.js";import"./vm-hands-entry-lite-6nwbqg37.js";import"./vm-hands-entry-lite-feybcq63.js";import"./vm-hands-entry-lite-q8wkrzer.js";import"./vm-hands-entry-lite-0k13wmzm.js";import"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{j as runLocalPtySession,e as resolvePtyWorkingDirectory,g as ptyRuntimeSupported,d as parsePtyStartPayload,h as defaultSpawnPty,f as defaultLoginShell,i as defaultConnect,a as LOCAL_PTY_MAX_SESSION_MS,c as LOCAL_PTY_MAX_SESSIONS,b as LOCAL_PTY_MAX_BUFFERED_OUTPUT_BYTES};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{$ as y,Aa as Z,Ba as _,Q as n,R as o,S as p,T as q,U as r,V as s,W as t,X as u,Y as v,Z as w,_ as x,aa as z,ba as A,ca as B,da as C,ea as D,fa as E,ga as F,ha as G,ia as H,ja as I,ka as J,la as K,ma as L,na as M,oa as N,pa as O,qa as P,ra as Q,sa as R,ta as S,ua as T,va as U,wa as V,xa as W,ya as X,za as Y}from"./vm-hands-entry-lite-vgpt2n1v.js";import"./vm-hands-entry-lite-d2w8tghq.js";import"./vm-hands-entry-lite-f5xb489y.js";import{Hi as a,Ii as b,Ji as c,Ki as d,Li as e,Mi as f,Ni as g,Oi as h,Qi as i,Ri as j,Ti as k,Ui as l,Vi as m}from"./vm-hands-entry-lite-xp3qzxk5.js";import"./vm-hands-entry-lite-4k4h9rcq.js";import"./vm-hands-entry-lite-0h4qmgm2.js";import"./vm-hands-entry-lite-6nwbqg37.js";import"./vm-hands-entry-lite-feybcq63.js";import"./vm-hands-entry-lite-am6kj1n1.js";import"./vm-hands-entry-lite-d98m00b8.js";import"./vm-hands-entry-lite-gxper06w.js";import"./vm-hands-entry-lite-6y6pz2yw.js";import"./vm-hands-entry-lite-0k13wmzm.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{G as verifyManagedRuntimeCodeSignatures,m as verifyManagedRuntimeArtifact,J as updateManagedRuntime,l as sha256Hex,S as rollbackManagedRuntime,T as recoverManagedRuntimeActivation,X as recordManagedRuntimeLifecycle,W as readManagedRuntimeLifecycleEvents,j as parseAndVerifyManagedRuntimeManifest,k as parseAndVerifyLegacyManagedRuntimeManifest,B as managedRuntimeVersionPath,E as managedRuntimeTarget,M as managedRuntimePointerVersion,z as managedRuntimePaths,Q as managedRuntimeExecutableVersion,C as managedRuntimeCredentialLibraryPath,h as managedRuntimeCredentialLibraryAssetName,g as managedRuntimeAssetName,A as legacyManagedRuntimePaths,P as isManagedRuntimeVersionExecutable,O as isManagedRuntimeExecutable,L as installManagedRuntimeLauncher,K as installManagedRuntimeArtifact,Z as flushManagedRuntimeLifecycleEvents,H as fetchManagedRuntimeBytes,I as defaultManagedRuntimeHealthCheck,N as currentManagedRuntimeVersion,D as compareManagedRuntimeVersions,i as canonicalJson,_ as bootstrapManagedRuntime,F as assertManagedRuntimeSignatureEvidence,R as activateManagedRuntime,V as acquireManagedRuntimeLock,U as acquireManagedRuntimeDirectoryLock,Y as acknowledgeManagedRuntimeLifecycleEvents,f as ManagedRuntimeError,v as MANAGED_RUNTIME_UPDATE_HEALTH_TIMEOUT_MS,e as MANAGED_RUNTIME_TARGETS,d as MANAGED_RUNTIME_MAX_MANIFEST_BYTES,p as MANAGED_RUNTIME_MAX_LIFECYCLE_EVENTS,q as MANAGED_RUNTIME_MAX_LIFECYCLE_BYTES,c as MANAGED_RUNTIME_MAX_ARTIFACT_BYTES,b as MANAGED_RUNTIME_MANIFEST_VERSION,r as MANAGED_RUNTIME_MANIFEST_URL,o as MANAGED_RUNTIME_LIFECYCLE_VERSION,y as MANAGED_RUNTIME_LIFECYCLE_EVENTS,n as MANAGED_RUNTIME_LAYOUT_VERSION,u as MANAGED_RUNTIME_HEALTH_TIMEOUT_MS,s as MANAGED_RUNTIME_FETCH_TIMEOUT_MS,t as MANAGED_RUNTIME_ARTIFACT_FETCH_TIMEOUT_MS,a as LEGACY_MANAGED_RUNTIME_MANIFEST_VERSION,w as DEVICE_BROKER_SIGNING_IDENTIFIER,x as DEVICE_BROKER_DESIGNATED_REQUIREMENT};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{$f as W,Af as v,Bf as w,Cf as x,Df as y,Ef as z,Ff as A,Gf as B,Hf as C,If as D,Jf as E,Kf as F,Lf as G,Mf as H,Nf as I,Of as J,Pf as K,Qf as L,Rf as M,Sf as N,Tf as O,Uf as P,Vf as Q,Wf as R,Xf as S,Yf as T,Zf as U,_f as V,ag as X,bg as Y,cg as Z,dg as _,eg as $,ff as a,fg as aa,gf as b,gg as ba,hf as c,hg as ca,if as d,ig as da,jf as e,jg as ea,kf as f,kg as fa,lf as g,lg as ga,mf as h,mg as ha,nf as i,ng as ia,of as j,og as ja,pf as k,pg as ka,qf as l,qg as la,rf as m,rg as ma,sf as n,sg as na,tf as o,tg as oa,uf as p,ug as pa,vf as q,vg as qa,wf as r,wg as ra,xf as s,yf as t,zf as u}from"./vm-hands-entry-lite-tytfs183.js";import"./vm-hands-entry-lite-q8wkrzer.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{ia as parseLocalRuntimeRootsSyncResponse,ea as parseLocalRuntimeRegistrationResponse,da as parseLocalRuntimeProofChallenge,oa as parseLocalRuntimeOperationHeartbeatResponse,pa as parseLocalRuntimeOperationEventsResponse,qa as parseLocalRuntimeOperationEnvironmentResponse,ra as parseLocalRuntimeOperationCompletionResponse,na as parseLocalRuntimeOperationClaim,la as parseLocalRuntimeLocalSubscriptionResponse,ma as parseLocalRuntimeLifecycleResponse,ja as parseLocalRuntimeIdentityResponse,ga as parseLocalRuntimeHeartbeatResponse,ha as parseLocalRuntimeFirstHeartbeat,ca as parseLocalRuntimeErrorEnvelope,fa as parseLocalRuntimeEnrollmentResponse,ka as parseLocalRuntimeDisconnectResponse,j as localRuntimeSessionRoutable,ba as buildLocalRuntimeDeviceProofBytes,Y as WORKER_STARTUP_TIMING_STAGES,T as WORKER_PREVIEW_CARRIED_JOBS,q as VM_HANDS_WORKSPACE_GRANT_CONTROL,p as VM_HANDS_WORKSPACE_DEFERRED_KEY,r as VM_HANDS_UNBIND_UNVERIFIED_EVENT,e as RELAY_HOST_ALIAS_VERSION,d as RELAY_HOST_ALIAS_HEADER,Z as LOCAL_RUNTIME_WORKER_STARTUP_MAX_MS,k as LOCAL_RUNTIME_SESSION_VM_HANDS_REGISTER,h as LOCAL_RUNTIME_SESSION_PRE_AUTH_MAX_BYTES,g as LOCAL_RUNTIME_SESSION_PATH,m as LOCAL_RUNTIME_SESSION_CLOSE,l as LOCAL_RUNTIME_SESSION_CLAIM_WAIT_MAX_MS,i as LOCAL_RUNTIME_SESSION_AUTH_DEADLINE_MS,b as LOCAL_RUNTIME_ROUTE_PREFIX,f as LOCAL_RUNTIME_ROUTES,a as LOCAL_RUNTIME_PROTOCOL_VERSION,_ as LOCAL_RUNTIME_LIFECYCLE_EVENTS,aa as LOCAL_RUNTIME_LEGACY_DEVICE_PROOF_TAG,$ as LOCAL_RUNTIME_DEVICE_PROOF_TAG,c as LOCAL_OPERATION_MAX_BYTES,V as JOBS_START_WAIT_KEY,U as JOBS_START_WAIT,y as HANDS_WORKSPACE_GRANT_KEY,x as HANDS_WORKSPACE_GRANT,v as HANDS_WORKSPACE_CHECK_KEY,u as HANDS_WORKSPACE_CHECK,O as HANDS_SESSION_GROUP_KEY,N as HANDS_SESSION_GROUP,S as HANDS_SESSION_CAP_NONE,R as HANDS_SESSION_CAP_KEY,Q as HANDS_SESSION_ACCOUNT_KEY,P as HANDS_SESSION_ACCOUNT,z as HANDS_REBIND_KEY,A as HANDS_REBIND_CONTROL,w as HANDS_REBIND,K as HANDS_MODEL_JOBS_EGRESS_KEY,J as HANDS_MODEL_JOBS_EGRESS,G as HANDS_LARGE_ENVIRONMENT_KEY,F as HANDS_LARGE_ENVIRONMENT,M as HANDS_JOBS_USER_KEY,L as HANDS_JOBS_USER,E as HANDS_HEADLESS_BROWSER_KEY,D as HANDS_HEADLESS_BROWSER,o as HANDS_ENVIRONMENT_DELIVER_CONTROL,n as HANDS_ENVIRONMENT_DELIVERY,t as HANDS_ENVIRONMENT_AT_CLAIM_KEY,s as HANDS_ENVIRONMENT_AT_CLAIM,I as HANDS_CONFINEMENT_KEY,H as HANDS_CONFINEMENT,C as HANDS_CLOUD_ACCESS_KEY,B as HANDS_CLOUD_ACCESS,W as AUTOMATION_USER_CHROME,X as AUTOMATION_CLOUD_SESSIONS};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Aj as j,rj as a,sj as b,tj as c,uj as d,vj as e,wj as f,xj as g,yj as h,zj as i}from"./vm-hands-entry-lite-1exfjv79.js";import"./vm-hands-entry-lite-714wspqb.js";import"./vm-hands-entry-lite-0h4qmgm2.js";import"./vm-hands-entry-lite-6nwbqg37.js";import"./vm-hands-entry-lite-feybcq63.js";import"./vm-hands-entry-lite-am6kj1n1.js";import"./vm-hands-entry-lite-d98m00b8.js";import"./vm-hands-entry-lite-3rqdzqhk.js";import"./vm-hands-entry-lite-magmzx9c.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{j as runPermissionsCli,d as reasonIdentity,e as readMacPermissions,f as permissionsSummary,i as parsePermissionsArgs,c as fullDiskAccessTarget,g as formatMacPermissions,h as allowMacPermissions,a as PERMISSIONS_HELP,b as MAC_PERMISSION_IDS};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{$h as z,Ch as a,Dh as b,Eh as c,Fh as d,Gh as e,Hh as f,Ih as g,Jh as h,Kh as i,Lh as j,Mh as k,Nh as l,Oh as m,Ph as n,Qh as o,Rh as p,Sh as q,Th as r,Uh as s,Vh as t,Wh as u,Xh as v,Yh as w,Zh as x,_h as y,ai as A,bi as B,ci as C,di as D,ei as E,fi as F,gi as G,hi as H,ii as I,ji as J,ki as K,li as L,mi as M,ni as N,oi as O,pi as P,qi as Q,ri as R,si as S,ti as T,ui as U,vi as V,wi as W,xi as X,yi as Y,zi as Z}from"./vm-hands-entry-lite-9qep7pka.js";import"./vm-hands-entry-lite-feybcq63.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{w as reasonHandsCloseReason,Y as parseReasonHandsSdkResponse,X as parseReasonHandsSdkRequest,J as parseReasonHandsResult,I as parseReasonHandsRequest,P as parseReasonHandsPtyReceipt,K as parseReasonHandsProgress,O as parseReasonHandsJobResult,N as parseReasonHandsJobRequest,M as parseReasonHandsClaimAck,L as parseReasonHandsClaim,Q as parseReasonHandsCancelRequest,R as parseReasonHandsCancelAck,F as isReasonHandsUuid,D as isReasonHandsRequestId,G as isReasonHandsPtyJobId,E as isReasonHandsGeneration,H as isReasonHandsArtifactSha256,Z as encodeReasonHandsSdkResponse,T as encodeReasonHandsResult,S as encodeReasonHandsRequest,U as encodeReasonHandsProgress,W as encodeReasonHandsClaimAck,V as encodeReasonHandsClaim,y as REASON_HANDS_WORKSPACE_BEFORE_MAX_OUTPUT_CHARS,A as REASON_HANDS_SDK_MAX_QUERY_CHARS,z as REASON_HANDS_SDK_MAX_NAME_CHARS,n as REASON_HANDS_PTY_PROTOCOL_VERSION,q as REASON_HANDS_PTY_MAX_PENDING_INPUT_BYTES,p as REASON_HANDS_PTY_MAX_OUTPUT_BYTES,o as REASON_HANDS_PTY_MAX_INPUT_BYTES,r as REASON_HANDS_PTY_MAX_DIMENSION,s as REASON_HANDS_PTY_CLEANUP_SWEEP_MS,u as REASON_HANDS_PTY_CLEANUP_RECEIPT_MS,t as REASON_HANDS_PTY_ANCHOR_EXIT_MS,a as REASON_HANDS_PROTOCOL_VERSION,f as REASON_HANDS_OUTPUT_TRUNCATED_MARKER,d as REASON_HANDS_MAX_STRUCTURED_INPUT_CHARS,e as REASON_HANDS_MAX_OUTPUT_CHARS,c as REASON_HANDS_MAX_INPUT_CHARS,b as REASON_HANDS_MAX_FRAME_BYTES,g as REASON_HANDS_MAX_ERROR_CHARS,h as REASON_HANDS_JOB_PROTOCOL_VERSION,l as REASON_HANDS_JOB_MAX_RECORDS,k as REASON_HANDS_JOB_MAX_OUTPUT_CHUNKS,j as REASON_HANDS_JOB_MAX_OUTPUT_CHARS,i as REASON_HANDS_JOB_MAX_INPUT_CHARS,B as REASON_HANDS_JOB_ERRORS,m as REASON_HANDS_JOB_CONTROL_MAX_FRAME_BYTES,x as REASON_HANDS_ERROR_CODES,v as REASON_HANDS_CLOSE_CODES,C as HandsProtocolError};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Ae as r,je as a,ke as b,le as c,me as d,ne as e,oe as f,pe as g,qe as h,re as i,se as j,te as k,ue as l,ve as m,we as n,xe as o,ye as p,ze as q}from"./vm-hands-entry-lite-ej5ffjck.js";import"./vm-hands-entry-lite-as1tkffn.js";import"./vm-hands-entry-lite-26q3hbdc.js";import"./vm-hands-entry-lite-4k4h9rcq.js";import"./vm-hands-entry-lite-0h4qmgm2.js";import"./vm-hands-entry-lite-6nwbqg37.js";import"./vm-hands-entry-lite-feybcq63.js";import"./vm-hands-entry-lite-am6kj1n1.js";import"./vm-hands-entry-lite-d98m00b8.js";import"./vm-hands-entry-lite-gxper06w.js";import"./vm-hands-entry-lite-6y6pz2yw.js";import"./vm-hands-entry-lite-0k13wmzm.js";import"./vm-hands-entry-lite-ejkba2nk.js";export{g as workerServiceRetargetPending,f as workerServiceProgram,m as workerServiceProcessRunning,e as workerServiceLauncher,j as workerServiceDefinitions,n as workerServiceDefinitionCurrent,l as retireLegacyWorkerService,q as retargetWorkerServiceLogs,p as restartWorkerService,r as removeWorkerService,i as isConnectServiceLabel,k as installedWorkerService,o as installWorkerService,c as defaultWorkerServiceHost,h as connectServiceLabel,d as WorkerServiceError,a as WORKER_SERVICE_ENV,b as WORKER_IDENTITY_UNAVAILABLE_CODE};
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{h as jq,i as Dq,j as Vq,k as kq,n as Hq,o as zq,t as Aq}from"./vm-hands-entry-lite-daxcxjze.js";import"./vm-hands-entry-lite-f3wh0dza.js";import"./vm-hands-entry-lite-pp7jfqzr.js";import{D as Wq}from"./vm-hands-entry-lite-e1b89x66.js";import{F as xq,P as Bq}from"./vm-hands-entry-lite-7zk0r3p9.js";import"./vm-hands-entry-lite-vgpt2n1v.js";import"./vm-hands-entry-lite-bxt4n1nj.js";import"./vm-hands-entry-lite-pkc4ry5x.js";import"./vm-hands-entry-lite-s9xf5z69.js";import"./vm-hands-entry-lite-pfzczmaa.js";import"./vm-hands-entry-lite-fpp2bs9y.js";import"./vm-hands-entry-lite-vsa7t6m9.js";import"./vm-hands-entry-lite-j2ng164q.js";import"./vm-hands-entry-lite-2m5dwrdf.js";import"./vm-hands-entry-lite-gt497d5x.js";import"./vm-hands-entry-lite-d2w8tghq.js";import"./vm-hands-entry-lite-f5xb489y.js";import"./vm-hands-entry-lite-c2g3wmkp.js";import"./vm-hands-entry-lite-fzkfajew.js";import"./vm-hands-entry-lite-ej5ffjck.js";import{Re as Kq}from"./vm-hands-entry-lite-as1tkffn.js";import"./vm-hands-entry-lite-tytfs183.js";import"./vm-hands-entry-lite-tchc7z17.js";import"./vm-hands-entry-lite-jp9q2vsx.js";import"./vm-hands-entry-lite-s823n1q9.js";import{oh as bq,th as Fq}from"./vm-hands-entry-lite-ntx8fdyq.js";import"./vm-hands-entry-lite-agsp101y.js";import"./vm-hands-entry-lite-9qep7pka.js";import"./vm-hands-entry-lite-28s7v15d.js";import"./vm-hands-entry-lite-xp3qzxk5.js";import{$i as s,Yi as z,_i as u}from"./vm-hands-entry-lite-26q3hbdc.js";import"./vm-hands-entry-lite-4k4h9rcq.js";import"./vm-hands-entry-lite-1exfjv79.js";import"./vm-hands-entry-lite-714wspqb.js";import"./vm-hands-entry-lite-0h4qmgm2.js";import{Yj as l}from"./vm-hands-entry-lite-6nwbqg37.js";import"./vm-hands-entry-lite-feybcq63.js";import{wk as N}from"./vm-hands-entry-lite-am6kj1n1.js";import"./vm-hands-entry-lite-d98m00b8.js";import"./vm-hands-entry-lite-3rqdzqhk.js";import{Vk as Q}from"./vm-hands-entry-lite-q8wkrzer.js";import"./vm-hands-entry-lite-v4jtxgaj.js";import"./vm-hands-entry-lite-gxper06w.js";import"./vm-hands-entry-lite-6y6pz2yw.js";import"./vm-hands-entry-lite-0k13wmzm.js";import"./vm-hands-entry-lite-magmzx9c.js";import{wl as Gq}from"./vm-hands-entry-lite-ejkba2nk.js";import{createHash as aq,randomBytes as nq}from"crypto";import{readFileSync as eq,realpathSync as Pq,renameSync as q3,unlinkSync as J3,writeFileSync as X3}from"fs";import{dirname as Y3,join as yq}from"path";import{spawnSync as wq}from"child_process";import{accessSync as Lq,constants as fq,existsSync as L,mkdirSync as Sq,readFileSync as hq,renameSync as Cq,writeFileSync as gq}from"fs";import{homedir as mq}from"os";import{delimiter as pq,dirname as dq,join as T}from"path";import{existsSync as Eq,readFileSync as Mq}from"fs";import{join as _q}from"path";var vq=`---
|
|
3
|
-
name: reason
|
|
4
|
-
description: Integrate software with Reason's public REST API using a scoped API key. Use for API clients, CI, service integrations, or cloud coding-session automation.
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Reason API
|
|
8
|
-
|
|
9
|
-
Reason integrations use the public REST API. Public customer MCP is retired.
|
|
10
|
-
|
|
11
|
-
Base URL: \`https://api.reasonmachines.com/v3\`
|
|
12
|
-
|
|
13
|
-
- API quickstart: \`https://docs.reasonmachines.com/api-quickstart\`
|
|
14
|
-
- Endpoint reference: \`https://docs.reasonmachines.com/api-reference\`
|
|
15
|
-
|
|
16
|
-
## Authentication and scope
|
|
17
|
-
|
|
18
|
-
1. Create a least-privilege \`ara_\` key in Reason Settings \u2192 Developers (the Code
|
|
19
|
-
/ API keys picker) and keep it only in the calling service or CI secret
|
|
20
|
-
manager. Never
|
|
21
|
-
put it in source, prompts, logs, generated files, or a repository
|
|
22
|
-
environment file. A new key from that picker includes the ordinary public
|
|
23
|
-
scopes for session, skill, repo, and org reads.
|
|
24
|
-
2. Send it as \`Authorization: Bearer <api-key>\`. Call \`GET /v3/self\` first
|
|
25
|
-
to resolve the key's organization before reading or mutating resources.
|
|
26
|
-
3. Request only the scopes needed by the integration. Treat secret values as
|
|
27
|
-
write-only and never expose them in API responses or diagnostics.
|
|
28
|
-
4. Use the endpoint reference as the source of truth for request/response
|
|
29
|
-
shapes, pagination, and error handling. Do not recreate an old MCP client,
|
|
30
|
-
route, OAuth flow, or plugin configuration. Do not connect to the retired
|
|
31
|
-
public MCP transport.
|
|
32
|
-
|
|
33
|
-
## Session automation
|
|
34
|
-
|
|
35
|
-
- Create and monitor sessions through the documented \`/v3/organizations/:orgId/
|
|
36
|
-
sessions\` endpoints. Return the session URL or identifier to the caller, then
|
|
37
|
-
poll or stream only as the API reference specifies.
|
|
38
|
-
- Omit \`hands_mode\` for adaptive lazy Hands, or set it to \`brain_only\` when
|
|
39
|
-
physical execution must remain permanently disabled for that Conversation.
|
|
40
|
-
- Keep API work idempotent where the endpoint supports it, and surface failed
|
|
41
|
-
mutations rather than retrying destructive operations blindly.
|
|
42
|
-
- Scope every request to the intended organization and repository. Do not infer
|
|
43
|
-
authority from a repository name or an untrusted task payload.
|
|
44
|
-
`;function m(q){return _q(q,".agents","skills","ara","SKILL.md")}function i(q){let X=m(q);return Eq(X)&&Mq(X,"utf8")===vq}var p=["codex","claude","cursor"],r={codex:"Codex",claude:"Claude Code",cursor:"Cursor"};function uq(q,X=process.env){let J=X.PATH??"",Z=process.platform==="win32"?(X.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";"):[""];for(let Y of J.split(pq)){if(!Y)continue;for(let G of Z)try{return Lq(T(Y,`${q}${G}`),fq.X_OK),!0}catch{}}return!1}function lq(){return{exists:uq,run(q,X,J={}){let Z=J.interactive===!0,Y=wq(q,X,{encoding:"utf8",env:process.env,stdio:Z?"inherit":"pipe"});return{status:Y.status??1,stdout:Z?"":Y.stdout??"",stderr:Z?Y.error?.message??"":`${Y.stderr??""}${Y.error?`${Y.error.message}
|
|
45
|
-
`:""}`}}}}function O(q){return`${q.stdout}
|
|
46
|
-
${q.stderr}`}function k(q){return q.status===0}function R(q,X,J,Z={}){let Y=q.run(X,J,Z);if(k(Y))return Y;let G=O(Y).trim();throw Error(`${X} ${J.join(" ")} failed${G?`: ${G}`:` with exit code ${Y.status}`}`)}function cq(q=process.env){return s(z({env:q}))}function d(q,X){return q.split(/\s+/).some((J)=>a(J,X))}function w(q){return T(q,".cursor","mcp.json")}function t(q){if(!L(q))return{};try{let X=JSON.parse(hq(q,"utf8"));if(!X||typeof X!=="object"||Array.isArray(X))throw Error("top-level value must be an object");return X}catch(X){let J=X instanceof Error?X.message:String(X);throw Error(`Cursor MCP config at ${q} is invalid; refusing to overwrite it (${J})`)}}function oq(q,X){Sq(dq(q),{recursive:!0,mode:448});let J=`${q}.ara-${process.pid}.tmp`;gq(J,`${JSON.stringify(X,null,2)}
|
|
47
|
-
`,{mode:384}),Cq(J,q)}function a(q,X){if(typeof q!=="string")return!1;if(q===X)return!0;try{let J=new URL(q);return["https://api.ara.so","https://api-staging.ara.so","https://api.reasonmachines.ai","https://staging-api.reasonmachines.ai","https://api.reasonmachines.com","https://staging-api.reasonmachines.com"].includes(J.origin)&&!J.username&&!J.password&&J.pathname==="/mcp/ara"&&!J.search&&!J.hash}catch{return!1}}function iq(q,X){let J=q.mcpServers?.ara;return Boolean(J&&typeof J==="object"&&!Array.isArray(J)&&a(J.url,X))}class f{runner;home;mcpUrl;constructor(q=lq(),X=mq(),J=cq()){this.runner=q;this.home=X;this.mcpUrl=J}isAvailable(q){if(q==="codex")return this.runner.exists("codex");if(q==="claude")return this.runner.exists("claude");return this.runner.exists("cursor")||L("/Applications/Cursor.app")||L(T(this.home,"Applications","Cursor.app"))||L(w(this.home))}availableClients(){return p.filter((q)=>this.isAvailable(q))}installationPath(q){if(q==="cursor")return w(this.home);if(q==="codex")return T(this.home,".codex","plugins","cache","ara");return T(this.home,".claude","plugins","cache","ara")}sharedSkillStatus(){return{installed:i(this.home),path:m(this.home)}}status(q){let X=r[q];if(!this.isAvailable(q))return{id:q,label:X,available:!1,installed:!1,connection:null,detail:"Client not detected",legacyInstallations:[]};if(q==="cursor"){let B=w(this.home),V=iq(t(B),this.mcpUrl);return{id:q,label:X,available:!0,installed:V,connection:V?"configured":null,detail:V?`Retired Reason MCP configuration in ${B}`:`No retired Reason MCP configuration in ${B}`,legacyInstallations:[]}}if(q==="codex"){let B=this.runner.run("codex",["plugin","list"]);if(!(k(B)&&O(B).includes("ara@ara")))return{id:q,label:X,available:!0,installed:!1,connection:null,detail:"No retired Reason plugin installed",legacyInstallations:[]};let P=this.runner.run("codex",["mcp","list"]),x=O(P).split(/\r?\n/).find((M)=>M.trimStart().startsWith("ara ")&&d(M,this.mcpUrl)),h=k(P)&&Boolean(x),E=!k(P)?"error":x?.includes("Not logged in")?"not_logged_in":x?.includes("OAuth")?"oauth":x?"configured":"unknown";return{id:q,label:X,available:!0,installed:h,connection:E,detail:x?.trim()||"The retired Reason plugin is installed but has no verified retired MCP registration",legacyInstallations:[]}}let J=this.runner.run("claude",["plugin","list"]),Z=O(J),Y=k(J)&&Z.includes("ara@ara"),G=k(J)&&Z.includes("ara-handoff@ara");if(!Y&&!G)return{id:q,label:X,available:!0,installed:!1,connection:null,detail:"No retired Reason plugin installed",legacyInstallations:[]};let b=this.runner.run("claude",["mcp","list"]),j=O(b),F=j.split(/\r?\n/).find((B)=>B.includes("plugin:ara:ara")&&d(B,this.mcpUrl)),K=j.split(/\r?\n/).find((B)=>B.includes("plugin:ara-handoff:ara")&&d(B,this.mcpUrl)),U=k(b)&&Boolean(F),D=k(b)&&K?["ara-handoff@ara"]:[],S=!k(b)?"error":F?.includes("Connected")?"connected":F?.includes("Failed")?"error":F?"configured":"unknown";return{id:q,label:X,available:!0,installed:U,connection:S,detail:F?.trim()||"The retired Reason plugin is installed but has no verified retired MCP registration",legacyInstallations:D}}statuses(){return p.map((q)=>this.status(q))}logout(q){let X=this.status(q);if(!X.available||!X.installed)return`${X.label}: not connected`;if(q==="cursor")return this.uninstall("cursor").replace("removed retired Reason","signed out and removed retired Reason");if(q==="codex")return R(this.runner,"codex",["mcp","logout","ara"]),"Codex: signed out of Reason";return R(this.runner,"claude",["mcp","logout","plugin:ara:ara"]),"Claude Code: signed out of Reason"}uninstall(q){let X=this.status(q);if(!X.available||!X.installed)return`${X.label}: Reason is not installed`;if(q==="cursor"){let J=w(this.home),Z=t(J),Y={...Z.mcpServers??{}};return delete Y.ara,Z.mcpServers=Y,oq(J,Z),`Cursor: removed retired Reason MCP from ${J}`}if(q==="codex")return R(this.runner,"codex",["plugin","remove","ara@ara"]),"Codex: removed retired ara@ara";return R(this.runner,"claude",["plugin","uninstall","ara@ara","--scope","user"]),"Claude Code: removed retired ara@ara"}removeLegacyClaudePlugin(){if(!this.runner.exists("claude"))return"Claude Code: not installed";if(!this.status("claude").legacyInstallations.includes("ara-handoff@ara"))return"Claude Code: no legacy Reason plugin found";return R(this.runner,"claude",["plugin","uninstall","ara-handoff@ara","--scope","user"]),"Claude Code: removed obsolete ara-handoff@ara"}removeRetiredInstallations(){let q=[],X=[];for(let J of p){let Z;try{Z=this.status(J)}catch(Y){X.push(`${r[J]}: ${Y instanceof Error?Y.message:String(Y)}`);continue}if(Z.installed){if(J!=="cursor")try{q.push(this.logout(J))}catch(Y){X.push(`${Z.label}: ${Y instanceof Error?Y.message:String(Y)}`)}try{q.push(this.uninstall(J))}catch(Y){X.push(`${Z.label}: ${Y instanceof Error?Y.message:String(Y)}`)}}if(J==="claude"&&Z.legacyInstallations.includes("ara-handoff@ara"))try{q.push(this.removeLegacyClaudePlugin())}catch(Y){X.push(`${Z.label}: ${Y instanceof Error?Y.message:String(Y)}`)}}if(q.length===0&&X.length===0)q.push("No retired Reason MCP configuration found.");return{messages:q,failures:X}}}function n(q){return`claude mcp add --transport http reason ${q}`}function e(q){return`codex mcp add reason --url ${q}
|
|
48
|
-
codex mcp login reason`}var N3=n("https://mcp.reasonmachines.com/mcp"),I3=e("https://mcp.reasonmachines.com/mcp"),R3=`https://claude.ai/settings/connectors?add=custom&url=${encodeURIComponent("https://mcp.reasonmachines.com/mcp")}`,O3=`https://cursor.com/install-mcp?name=reason&config=${encodeURIComponent(btoa(JSON.stringify({url:"https://mcp.reasonmachines.com/mcp"})))}`;var rq="https://github.com/reason-machines/reason-plugins",v3=`Connect a coding agent to Reason over MCP
|
|
49
|
-
|
|
50
|
-
Usage:
|
|
51
|
-
reason mcp Show how to connect Claude Code, Codex, or another MCP client
|
|
52
|
-
reason mcp uninstall Remove only this machine's registrations of the earlier, retired server
|
|
53
|
-
|
|
54
|
-
Plugins for Claude Code and Codex: ${rq}
|
|
55
|
-
`;function qq(q){if(!q.available)return"not detected";if(q.installed||q.legacyInstallations.length>0)return"retired configuration";return"not installed"}function tq(q,X){let J=X.toLowerCase();if(q==="codex")return J.includes("codex");if(q==="claude")return J.includes("claude");return J.includes("cursor")}function Jq(q,X){return(X.mcp_connections??[]).filter((Z)=>tq(q.id,Z.client_name)).flatMap((Z)=>Z.last_used_at?[Z.last_used_at]:[]).sort().at(-1)??null}function Xq(q,X=new Date){if(!q)return"never";let J=Date.parse(q);if(!Number.isFinite(J))return"never";let Z=Math.max(0,Math.floor((X.getTime()-J)/1000));if(Z<45)return"just now";let Y=Math.floor(Z/60);if(Y<60)return`${Y} ${Y===1?"minute":"minutes"} ago`;let G=Math.floor(Y/60);if(G<24)return`${G} ${G===1?"hour":"hours"} ago`;let b=Math.floor(G/24);return`${b} ${b===1?"day":"days"} ago`}function Yq(q){let X=q.name?.trim(),J=q.email?.trim();if(X&&J)return`${X} (${J})`;return X||J||q.id||"Reason user"}function Zq(q){let X=q.name?.trim(),J=q.slug?.trim();if(X&&J)return`${X} (${J})`;return X||J||q.id}var sq=Q.enum(["granted","not_granted","unknown"]),$q=Q.object({status:sq,checkedAt:Q.number().finite(),executablePath:Q.string().min(1)});var Z3=`Reason status
|
|
56
|
-
|
|
57
|
-
Usage:
|
|
58
|
-
reason status [--json]
|
|
59
|
-
|
|
60
|
-
Show the installed version, signed-in account and organization, this
|
|
61
|
-
computer's connection (\`reason connect\`) and the workspaces it serves, any
|
|
62
|
-
retired MCP configuration that can be cleaned up, and automatic updates.
|
|
63
|
-
`,$3=5000,G3=300000,Q3=Q.object({version:Q.literal(1),key:Q.string(),at:Q.number(),self:Q.object({principal_type:Q.string(),user_id:Q.string().optional(),user_name:Q.string().nullish(),email:Q.string().nullish(),org_id:Q.string(),organization_name:Q.string().nullish(),organization_slug:Q.string().nullish(),mcp_connections:Q.array(Q.object({client_id:Q.string(),client_name:Q.string(),last_used_at:Q.string().nullable()})).optional()})}),Nq=(q)=>`${q.apiOrigin}
|
|
64
|
-
${aq("sha256").update(q.accessToken).digest("hex")}`;function x3(q,X,J){try{let Z=Q3.safeParse(JSON.parse(eq(q,"utf8")));if(!Z.success||Z.data.key!==Nq(X))return null;let Y=J-Z.data.at;return Y>=0&&Y<G3?Z.data.self:null}catch{return null}}function B3(q,X,J,Z){let Y=`${q}.${process.pid}.${nq(6).toString("hex")}.tmp`;try{let G={version:1,key:Nq(X),at:Z,self:J};X3(Y,`${JSON.stringify(G)}
|
|
65
|
-
`,{mode:384,flag:"wx"}),q3(Y,q)}catch{try{J3(Y)}catch{}}}var W3=30000;function b3(q,X=Date.now(),J=null){let Z=Fq(q),Y=(()=>{if(Z?.state!=="connected"&&Z?.state!=="starting")return!1;try{return process.kill(Z.pid,0),!0}catch{return!1}})(),G=Y&&Z?.state==="connected",b=(K)=>G&&X-K>=0&&X-K<W3,j=$q.safeParse(Z?.fullDiskAccess),F=bq(Z,J,X);return{...F?{permission_recovery:F}:{},full_disk_access:j.success&&b(j.data.checkedAt)?j.data.status:"unknown",keep_awake:{enabled:Vq(q)==="battery_and_ac",holding:Z?.idleSleepHold===!0&&b(Date.parse(Z.lastHeartbeatAt??""))},executable:Y&&j.success?j.data.executablePath:null}}function F3(q=z()){if(process.platform!=="darwin")return null;let X=kq(yq(Hq(Pq(l()),q),"worker.json"));return X?b3(jq(X).daemon,Date.now(),Dq(X)):null}var Qq={connected:"connected",starting:"starting",reconnecting:"reconnecting",stopping:"stopping",not_running:"not running",removed:"removed from Reason (run `reason connect` to connect it again)"};async function Y1(q,X={}){let J=X.io??{stdout:process.stdout,stderr:process.stderr};if(q.includes("--help")||q.includes("-h"))return J.stdout.write(Z3),0;if(q.some((G)=>G!=="--json"))return J.stderr.write(`Usage: reason status [--json]
|
|
66
|
-
`),1;let Z=new AbortController,Y=setTimeout(()=>Z.abort(Error("timed out reading the account")),$3);try{let G=X.now?.()??new Date,b=performance.now(),j=b,F=()=>{let $=performance.now(),H=Math.round($-j);return j=$,H},K=null,U=($)=>{return K=$ instanceof Error?$.message:String($),null},D=await Wq(X,Z.signal).catch(U),S=F(),B=D?.credentialKind==="api_key",V=D&&!B?yq(Y3(xq(X.env??process.env)),"status-account.json"):null,P=D&&V&&q.includes("--json")?x3(V,D,G.getTime()):null,x=P??(D?await(X.getSelf??(($,H)=>new Bq($).self(H)))(D,Z.signal).catch(U):null);if(D&&x&&!P&&V)B3(V,D,x,G.getTime());let h=F(),E=X.manager??new f,M=q.includes("--json")?[]:E.statuses(),_=(X.loadReceipt??Kq)(),v=await(X.readConnection??(()=>Aq({channel:X.channel})))().catch(()=>null),A=null;try{if(v)A=(X.readConnectionMacState??(()=>F3(X.channel??z())))()}catch{}let W=v&&A?{...v,...A}:v,C=(()=>{try{return(X.readDisconnected??(()=>zq(Pq(l()),X.channel??z())))()}catch{return!1}})(),Iq=F(),c=x?{id:x.org_id,name:x.organization_name??null,slug:x.organization_slug??null}:null,I=x?{id:x.user_id??null,name:(B?x.service_user_name:x.user_name)??null,email:x.email??null,credential:B?"api_key":"login"}:null,g=X.channel??z(),y={version:N,channel:g,api_origin:D?.apiOrigin??u(g),account:I,account_error:K,organization:c,mcp:M.map(($)=>({client:$.id,label:$.label,status:qq($),installed_at:$.installed?E.installationPath($.id):null,last_used_at:x?Jq($,x):null})),connection:W,disconnected:C,installation:_?{background_mode:_.background_mode,automatic_updates:_.background_mode!=="cli_only",future_device_consent:_.device_consent?.decision??"disabled"}:null,timings_ms:{process:Math.round(b),credentials:S,account:h,local:Iq,total:Math.round(performance.now()-b)}};if(q.includes("--json"))return J.stdout.write(`${JSON.stringify(y,null,2)}
|
|
67
|
-
`),0;if(g==="staging")J.stdout.write(`Reason ${N} \xB7 channel: STAGING
|
|
68
|
-
`),J.stdout.write(`API: ${y.api_origin}
|
|
69
|
-
`);else J.stdout.write(`Reason ${N}
|
|
70
|
-
`);if(I)J.stdout.write(B?`Account: API key (REASON_API_KEY)${I.name?`: ${I.name}`:""}
|
|
71
|
-
`:`Account: ${Yq(I)}
|
|
72
|
-
`),J.stdout.write(`Organization: ${Zq(c)}
|
|
73
|
-
`);else if(K)J.stdout.write(`Account: unavailable (${K})
|
|
74
|
-
`);else J.stdout.write(`Account: signed out
|
|
75
|
-
`),J.stdout.write(`Organization: none
|
|
76
|
-
`);if(J.stdout.write(`
|
|
77
|
-
This computer
|
|
78
|
-
`),!W)J.stdout.write(C?"Disconnected. Run `reason connect` to connect it again.\n":"Not connected. Run `reason connect` to run your Sessions here.\n");else{if(J.stdout.write(`Connection: ${Qq[W.state]} (${W.name})${C?", disconnected (run `reason connect` to connect it again)":""}
|
|
79
|
-
`),W.version)J.stdout.write(`Version: ${W.version}${W.version===N?"":` (${N} is installed; \`reason connect\` restarts it on that)`}
|
|
80
|
-
`);if(J.stdout.write(`Folder: ${W.folder}
|
|
81
|
-
`),J.stdout.write(`Sessions: ${W.sessions_running===null?"":`${W.sessions_running} running, `}${W.sessions_max===null?"every Session you start":W.sessions_max===1?"one at a time":`up to ${W.sessions_max} at once`}
|
|
82
|
-
`),A){let $=A,H=await(X.readPermissionsSummary??(async()=>{let{permissionsSummary:Rq,readMacPermissions:Oq,reasonIdentity:Tq}=await import("./permissions-7sfghef4.js"),{macScreenStatus:Uq}=await import("./local-display-mac-59ma7sxa.js");return Rq(await Oq({identity:()=>Tq(),grants:Uq,worker:async()=>$}))}))().catch(()=>null);if(H)J.stdout.write(`${H}
|
|
83
|
-
`);J.stdout.write(`Keep awake: ${A.keep_awake.enabled?"on":"off"}${A.keep_awake.holding?" (holding)":""}
|
|
84
|
-
`)}if(W.service)J.stdout.write(`Logs: ${W.service.logs}
|
|
85
|
-
`);for(let $ of W.workspaces??[]){let H=$.state==="removed"?"removed from that workspace":$.blocked?"offline (this computer is outside that workspace's allowed networks)":$.device_id?Qq[$.state]:"connecting";J.stdout.write(`Also in workspace ${$.name??$.organization_id}${$.account?" (another Reason account's)":""}: ${H}
|
|
86
|
-
`)}if(W.workspaces_off==="sign_in")J.stdout.write("Other workspaces: off. This computer's sign-in is not one the Reason app or the setup command\n Reason shows you made for it (or that sign-in ended, or it is in use on another computer), so it is\n connected in one workspace only. Run the setup command from Reason here (it ends in --pair CODE);\n if this computer was connected before that, run `reason disconnect` and `reason connect` once.\n")}let o=y.mcp.filter(($)=>$.installed_at||$.status!=="not installed");if(o.length>0)J.stdout.write(`
|
|
87
|
-
Retired MCP configuration
|
|
88
|
-
`);for(let $ of o)if(J.stdout.write(`${$.label}: ${$.status}
|
|
89
|
-
`),$.installed_at)J.stdout.write(` Installed: ${$.installed_at}
|
|
90
|
-
`),J.stdout.write(` Last used: ${Xq($.last_used_at,G)}
|
|
91
|
-
`);if(y.mcp.some(($)=>$.status==="retired configuration"))J.stdout.write("Run `reason mcp uninstall` to remove only the retired Reason MCP registrations.\n");if(J.stdout.write(`
|
|
92
|
-
Background access
|
|
93
|
-
`),!y.installation)J.stdout.write(`Not managed by the Reason installer
|
|
94
|
-
`);else J.stdout.write(`Automatic updates: ${y.installation.automatic_updates?"enabled":"disabled"}
|
|
95
|
-
`);return 0}catch(G){return J.stderr.write(`Reason status: ${G instanceof Error?G.message:String(G)}
|
|
96
|
-
`),1}finally{clearTimeout(Y)}}export{b3 as workerMacState,Y1 as runStatusCli,F3 as connectionMacState,Z3 as STATUS_HELP};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Yj as w}from"./vm-hands-entry-lite-6nwbqg37.js";import{wk as h}from"./vm-hands-entry-lite-am6kj1n1.js";import{randomUUID as d}from"crypto";import{spawnSync as F}from"child_process";import{chmodSync as Kj,cpSync as Nj,existsSync as I,lstatSync as H,mkdirSync as s,readdirSync as Qj,readFileSync as S,readlinkSync as Uj,realpathSync as B,renameSync as A,rmdirSync as Vj,rmSync as D,symlinkSync as y,writeFileSync as Wj}from"fs";import{dirname as G,join as V,relative as Xj,resolve as Yj}from"path";var Zj="so.ara.cli",E=[Zj,"com.reasonmachines.cli"],m="5LJFSBRY2F";function u(j){return`(${j.map((z)=>`identifier "${z}"`).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] = "${m}"`}var $j="Background/Reason.app",l="ReasonBackgroundIdentity",yj="Contents/Helpers/ReasonPermissionTile",wj="so.ara.cli.permission-tile",xj=u([wj,"com.reasonmachines.cli.permission-tile"]),k="AraBackgroundIdentity",Dj="Reason",gj=u(E),Pj=`anchor apple generic and (${E.map((j)=>`identifier "${j}"`).join(" or ")}) and certificate leaf[subject.OU] = "${m}"`;class C extends Error{code;constructor(j,z){super(z);this.code=j;this.name="MacOSBackgroundIdentityError"}}var M="/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister";function L(j=w()){return V(j,"Library","Application Support","Reason","Background","Reason.app")}function O(j=w()){return V(j,"Library","Application Support","Ara","Background","Ara.app")}function bj(j=process.execPath){return V(G(B(j)),$j)}function qj(j){try{return H(j).isFile()}catch{return!1}}function f(j){return[l,k].map((z)=>V(j,"Contents","MacOS",z)).find(qj)??null}function Y(j){try{if(!H(j).isDirectory())return!1;let z=S(V(j,"Contents","Info.plist"),"utf8");return E.some((J)=>z.includes(`<string>${J}</string>`))&&(z.includes(`<string>${Dj}</string>`)||z.includes("<string>Ara</string>"))&&f(j)!==null}catch{return!1}}function c(j=w()){let z=L(j);if(!Y(z))return null;try{let J=S(V(z,"Contents","Info.plist"),"utf8");return/<key>CFBundleVersion<\/key>\s*<string>(\d+\.\d+\.\d+)<\/string>/.exec(J)?.[1]??null}catch{return null}}function Aj(j,z=w()){let J=c(z);return J===null||t(v(J.split(".")),v(j.split(/[.-]/).slice(0,3)))}var Gj=1e4;function i(j,z){return F(j,[...z],{stdio:"ignore",timeout:Gj}).status??1}var o=new Set;function r(j){if(process.env.REASON_TEST_REFUSE_REAL_IDENTITY!=="1")return;let z=(J)=>{try{return B(J)}catch{return Yj(J)}};if(j!==void 0&&z(j)!==z(w()))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 n=/\/(?:runtime|CLI)\/versions\/(\d+)\.(\d+)\.(\d+)[^/]*\/[^/]+$|\/\.(?:ara|reason)(?:-staging)?-worker-(\d+)\.(\d+)\.(\d+)[^/]*\/[^/]+$/,p=new Set(["ara","ara.exe","reason","reason.exe"]);function v(j){return j.map((z)=>Number(z))}function t(j,z){for(let J=0;J<3;J+=1)if(j[J]!==z[J])return j[J]<z[J];return!1}var Lj=[0,2,161];function Tj(j){if(j===null)return!0;let z=Lj,J=null;try{J=B(process.execPath)}catch{}return j.some((K)=>{let N=n.exec(K);if(N){let Z=N[1]===void 0?N.slice(4,7):N.slice(1,4);return t(v(Z),z)}let Q=K.slice(K.lastIndexOf("/")+1);return p.has(Q)&&K!==J&&K!==process.execPath})}function _j(){let j=F("/bin/ps",["-xo","pid=,comm="],{encoding:"utf8",timeout:5000});if(j.status!==0)return null;let z=[];for(let J of j.stdout.split(`
|
|
3
|
-
`)){let K=/^\s*(\d+)\s+(\S.*)$/.exec(J);if(!K||Number(K[1])===process.pid)continue;let N=K[2].trimEnd(),Q=N.slice(N.lastIndexOf("/")+1);if(!n.test(N)&&p.has(Q)){let W=F("/usr/sbin/lsof",["-a","-p",K[1],"-d","txt","-Fn"],{encoding:"utf8",timeout:5000}).stdout?.split(`
|
|
4
|
-
`).find((X)=>X.startsWith("n/"));if(W)N=W.slice(1)}z.push(N)}return z}function Cj(j){if(r(j.home),!Y(j.sourceApp))throw new C("identity_invalid","The packaged Reason background identity is missing or invalid.");let z=j.command??i,J=L(j.home),K=G(J);s(K,{recursive:!0,mode:448}),Kj(K,448);let N=B(j.sourceApp),Q=null;try{Q=B(J)}catch{}if(N!==Q){let Z=`${process.pid}.${d()}`,W=V(K,`.Reason.app.${Z}.tmp`),X=V(K,`.Reason.app.${Z}.old`),P=!1;try{if(Nj(N,W,{recursive:!0,errorOnExist:!0,preserveTimestamps:!0}),!Y(W))throw new C("identity_invalid","The copied Reason background identity is invalid.");let T=j.releaseSigned?["--test-requirement",`=${Pj}`]:[];if(z("/usr/bin/codesign",["--verify","--strict",...T,W])!==0)throw new C("identity_invalid_signature","The installed Reason background identity has an invalid signature.");let _=!1;for(let $=0;$<4;$+=1){let q=!1;try{A(J,X),q=!0,P=!0}catch(U){if(U.code!=="ENOENT")throw U}if($===0)j.beforePublish?.();try{A(W,J),_=!0}catch(U){let Jj=U.code;if(!["EEXIST","ENOTEMPTY"].includes(Jj??""))throw U;if(q)D(X,{recursive:!0,force:!0}),P=!1;if($===3)throw U;continue}if(q)D(X,{recursive:!0,force:!0}),P=!1;break}if(!_)throw Error("Could not publish Reason's background identity.")}catch(T){if(P&&!I(J)&&I(X))A(X,J);throw T}finally{D(W,{recursive:!0,force:!0}),D(X,{recursive:!0,force:!0})}}return zj(J,j,{verified:N!==Q}),J}function a(j){return V(G(j),".Reason.app.registered")}function e(j){try{let z=H(j);return z.isDirectory()?`${z.ino}:${z.birthtimeMs}`:null}catch{return null}}function R(j){let z=e(j);try{return z!==null&&S(a(j),"utf8")===z}catch{return!1}}function jj(j){if(Y(j))return"bundle";try{if(H(V(j,"Contents","Info.plist"),{throwIfNoEntry:!1}))return null;return H(V(j,"Contents","MacOS",k)).isSymbolicLink()?"retired":null}catch{return null}}function zj(j,z,J={}){let K=z.command??i;if(!J.verified&&K("/usr/bin/codesign",["--verify","--strict",j])!==0)throw new C("identity_invalid_signature","The installed Reason background identity has an invalid signature.");if(K(M,["-f",j])!==0)throw new C("identity_register_failed","Could not register Reason's macOS background identity.");let N=e(j);try{if(N)Wj(a(j),N,{mode:384})}catch{}try{Fj(j,z.home,K,z.runningExecutables??_j)}catch(Q){let Z=Q.code??"unknown";process.stderr.write(`Reason background identity: legacy_identity_retire_failed (${Z})
|
|
5
|
-
`)}}function Fj(j,z,J,K){let N=f(j);if(!N)return;let Q=O(z),Z=G(Q),W=(U)=>V(U,"Contents","MacOS",k),X=Xj(G(W(Q)),N),P=`${process.pid}.${d()}`,T=jj(Q);if(T===null)return;let _=T==="bundle";if(_)J(M,["-u",Q]);let $=V(Z,`.Ara.app.${P}.old`);if(!o.has(Q)&&!Tj(K())){if(!_)J(M,["-u",Q]);try{A(Q,$)}catch(U){if(U.code==="ENOENT")return;throw U}D($,{recursive:!0,force:!0}),Hj(Z);return}if(!_){if(Uj(W(Q))===X)return;let U=`${W(Q)}.${P}`;y(X,U);try{A(U,W(Q))}finally{D(U,{force:!0})}return}let q=V(Z,`.Ara.app.${P}.shim`);s(G(W(q)),{recursive:!0}),y(X,W(q));try{try{A(Q,$)}catch(U){if(U.code==="ENOENT")return;throw U}try{A(q,Q)}catch(U){if(I(Q))return;throw A($,Q),U}}finally{D(q,{recursive:!0,force:!0}),D($,{recursive:!0,force:!0})}}function Hj(j){try{if(Qj(j).some((J)=>J!==".DS_Store"))return;D(V(j,".DS_Store"),{force:!0}),Vj(j)}catch{}}var x=new Map;function Bj(j=w()){let z=x.get(j);if(z)return z;if(process.platform!=="darwin")return[];let J=g(j);if(J===null&&I(G(L(j))))Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,100),J=g(j);if(J===null)return[];return x.set(j,J),J}function g(j){let z=L(j),J=O(j);if(!Y(z)||!R(z))try{Oj({home:j,skipWhenSettled:!0})}catch{}let K=Y(z)&&(R(z)||!Y(J))?z:Y(J)?J:null,N=K?f(K):null;if(!N)return null;if(K===J)o.add(J);let Q=F(N,["--can-spawn"],{env:{},timeout:2000,encoding:"utf8"});return Q.status===0&&Q.stdout===`spawn
|
|
6
|
-
`?[N,"--spawn"]:[]}var b=new Map;function Ij(j=w()){let z=Bj(j),J=z[0];if(!J)return[];let K=b.get(J);if(K===void 0){let N=F(J,["--can-spawn-computer-use"],{env:{},timeout:2000,encoding:"utf8"});K=N.status===0&&N.stdout===`spawn
|
|
7
|
-
`,b.set(J,K)}return K?z:[]}function hj(j=Ij(),z=w()){if(j.length>0)return null;if(c(z)===null)return"computer_use_identity_missing";return Aj(h,z)?"computer_use_identity_outdated":"computer_use_identity_unavailable"}function Oj(j={}){r(j.home);let z=L(j.home);if(j.skipWhenSettled&&Y(z)&&R(z)&&jj(O(j.home))===null)return!0;if(!Y(z)){let J=O(j.home);if(!Y(J))return!1;try{return Cj({...j,sourceApp:J}),!0}catch(K){if(!Y(z))throw K}}return zj(z,j),!0}var Mj="REASON_WORKER_IDENTITY_APP";function dj(j,z=process.env,J=w()){let K=z[Mj];return K&&K===L(J)?K:j}function sj(j,z){if(process.platform!=="darwin")return null;let J=L(j),K=V(J,"Contents","MacOS",l),N=F(K,["--can-run-worker",z],{env:{},timeout:2000,encoding:"utf8"});return N.status===0&&N.stdout===`run-worker
|
|
8
|
-
`?{app:J,executable:K}:null}
|
|
9
|
-
export{Zj as Gj,m as Hj,u as Ij,yj as Jj,C as Kj,M as Lj,L as Mj,bj as Nj,c as Oj,Aj as Pj,Cj as Qj,Bj as Rj,Ij as Sj,hj as Tj,Oj as Uj,Mj as Vj,dj as Wj,sj as Xj};
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Fj as v}from"./vm-hands-entry-lite-714wspqb.js";import{Jj as T,Mj as d,Oj as p,Sj as n,Tj as a}from"./vm-hands-entry-lite-0h4qmgm2.js";import{Yj as j,_j as F}from"./vm-hands-entry-lite-6nwbqg37.js";import{wk as l}from"./vm-hands-entry-lite-am6kj1n1.js";import{Pk as m,Qk as h}from"./vm-hands-entry-lite-3rqdzqhk.js";import{wl as y}from"./vm-hands-entry-lite-ejkba2nk.js";import{spawnSync as Eq}from"child_process";import{dirname as I}from"path";import{spawn as r}from"child_process";import{accessSync as e,constants as qq}from"fs";import{basename as zq,join as Jq}from"path";var V=null;function O(q){if(V===q)V=null;if(q.exitCode===null&&q.signalCode===null)q.kill("SIGTERM")}var _=(q,z)=>{if(V)O(V);let Q=Jq(q,T);try{e(Q,qq.X_OK)}catch{return()=>{}}let J;try{J=r(Q,["--app",q,"--name",zq(q,".app"),"--permission",z==="screen"?"screen_recording":"accessibility"],{detached:!0,stdio:"ignore"})}catch{return()=>{}}return J.on("error",()=>{if(V===J)V=null}),J.once("exit",()=>{if(V===J)V=null}),J.unref(),V=J,()=>O(J)};import{chmodSync as Qq,existsSync as x,mkdirSync as Xq,readFileSync as Zq,realpathSync as k,renameSync as $q,statSync as G,writeFileSync as Kq}from"fs";import{dirname as P,isAbsolute as Rq,join as Vq,resolve as S,sep as W}from"path";function U(q=j()){return Vq(F(q),"reason","protected-path-grants.json")}var B=null;function Yq(q){let z=JSON.parse(q);if(!Array.isArray(z?.grants))return[];return z.grants.flatMap((Q)=>{let J=Q;return J&&typeof J.path==="string"&&Rq(J.path)&&(J.kind==="file"||J.kind==="folder")&&typeof J.grantedAt==="number"?[{path:J.path,kind:J.kind,grantedAt:J.grantedAt}]:[]})}function D(q=U()){try{let{mtimeMs:z}=G(q);if(B&&B.file===q&&B.mtimeMs===z)return B.grants;let Q=Yq(Zq(q,"utf8"));return B={file:q,mtimeMs:z,grants:Q},Q}catch{return[]}}function Bq(q,z){return q.kind==="file"?z===q.path:z===q.path||z.startsWith(`${q.path}${W}`)}function Dq(q,z){let Q=S(q);return D(z).some((J)=>Bq(J,Q))}function Sq(q,z){return v(q)&&!Dq(q,z)}function w(q,z){Xq(P(z),{recursive:!0,mode:448});let Q=`${z}.${process.pid}.tmp`;Kq(Q,`${JSON.stringify({version:1,grants:q},null,2)}
|
|
3
|
-
`,{mode:384}),Qq(Q,384),$q(Q,z),B=null}function b(q,z=U(),Q=Date.now()){if(!x(q))throw Error(`No file or folder at ${q}.`);let J=k(q),X=P(z);if(X===J||X.startsWith(`${J}${W}`)||J.startsWith(`${X}${W}`))throw Error("Reason's own configuration folder cannot be allowed.");let Z={path:J,kind:G(J).isDirectory()?"folder":"file",grantedAt:Q},$=D(z).filter((R)=>R.path!==J);return w([...$,Z],z),Z}function u(q,z=U()){let Q=x(q)?k(q):S(q),J=D(z),X=J.filter((Z)=>Z.path!==Q);if(X.length===J.length)return!1;return w(X,z),!0}function wq(q,z,Q){let J=z?"file-read* file-write*":"file-read*";return D(Q).filter((X)=>X.path===q||X.path.startsWith(`${q}${W}`)).map((X)=>`(allow ${J} (${X.kind==="file"?"literal":"subpath"} ${JSON.stringify(X.path)}))`)}var f=`Reason permissions
|
|
4
|
-
|
|
5
|
-
Usage:
|
|
6
|
-
reason permissions [--json]
|
|
7
|
-
reason permissions allow [screen|accessibility|disk]
|
|
8
|
-
reason permissions protected [list|allow <path>|revoke <path>] [--json]
|
|
9
|
-
|
|
10
|
-
The macOS privacy permissions of this computer's Reason worker:
|
|
11
|
-
screen Screen & System Audio Recording: desktop video, computer-use screenshots
|
|
12
|
-
accessibility Accessibility: computer-use clicks and typing, desktop input
|
|
13
|
-
disk Full Disk Access (recommended): Sessions in Desktop, Documents,
|
|
14
|
-
Downloads, iCloud Drive and Mail
|
|
15
|
-
|
|
16
|
-
protected lists, allows or revokes files and folders on Reason's credential
|
|
17
|
-
denylist (shell startup files, ~/.ssh, .env and similar) that every Session on
|
|
18
|
-
this Mac may open. Only you can change this list; Sessions cannot.
|
|
19
|
-
|
|
20
|
-
allow asks for each missing one, or the one named. macOS cannot ask for Full
|
|
21
|
-
Disk Access: allow disk opens its pane, shows the file to add in Finder and
|
|
22
|
-
waits until the worker has it.
|
|
23
|
-
`,M="x-apple.systempreferences:com.apple.preference.security",Nq="curl -fsSL https://reasonmachines.com/install.sh | bash",Hq=180000,Wq=2000,A=["screen","accessibility","disk"],L={screen:{label:"Screen & System Audio Recording",purpose:"desktop video, computer-use screenshots",level:"required",pane:`${M}?Privacy_ScreenCapture`},accessibility:{label:"Accessibility",purpose:"computer-use clicks and typing, desktop input",level:"required",pane:`${M}?Privacy_Accessibility`},disk:{label:"Full Disk Access",purpose:"Sessions in Desktop, Documents, Downloads, iCloud Drive and Mail",level:"recommended",pane:`${M}?Privacy_AllFiles`}};function s(q){return q.executable}function jq(q,z){if(q==="computer_use_identity_missing")return`Reason's background identity is not installed (${q}); reinstall Reason: ${Nq}`;if(q==="computer_use_identity_outdated")return`Reason's background identity is outdated (${p(z)??"unknown"}; this CLI is ${l}) (${q}); \`reason update\` installs this release's`;return`Reason's background identity cannot run computer use for this CLI (${q}); run the installed \`reason\``}function Cq(q=j()){let z=n(q);if(z.length>0)return{state:"ready",path:I(I(I(z[0]))),prefix:z};let Q=a(z,q)??"computer_use_identity_unavailable";return{state:Q,path:d(q),detail:jq(Q,q)}}function o(){return{identity:()=>Cq(),grants:(q)=>m(q),request:(q,z)=>h(q,z),worker:async()=>(await import("./status-jz29fb95.js")).connectionMacState(),open:(q)=>{Eq("/usr/bin/open",q,{stdio:"ignore",timeout:1e4})},tile:_,restartConnection:async()=>(await import("./connect-cli-34b18gjs.js")).restartConnection(),sleep:(q)=>new Promise((z)=>setTimeout(z,q)),now:()=>Date.now()}}function c(q,z,Q){if(q.state!=="ready"||!z)return"unknown";return z[Q]?"granted":"missing"}async function i(q){let z=q.identity(),Q=z.state==="ready"?await q.grants(z.prefix):null,J=await q.worker(),X=J?s(J):null,Z=!X||J?.full_disk_access==="unknown"?"unknown":J?.full_disk_access==="granted"?"granted":"missing",$=(R,Y,K)=>{let{label:E,purpose:H,level:N}=L[R];return{id:R,label:E,purpose:H,level:N,state:Y,holder:K}};return{identity:{state:z.state,path:z.path,detail:z.state==="ready"?null:z.detail},worker_detail:X?null:"Full Disk Access is read from this computer's running worker; `reason connect` starts it.",permissions:[$("screen",c(z,Q,"screen"),z.path),$("accessibility",c(z,Q,"accessibility"),z.path),$("disk",Z,X)]}}function dq(q){let z=q.identity.state==="ready"?null:q.identity.state,Q=q.permissions.filter((Z)=>Z.state==="granted").length,J=[...z?[z]:[],...q.permissions.filter((Z)=>Z.state!=="granted"&&!(z&&Z.id!=="disk")).map((Z)=>`${Z.label} ${Z.state}`)],X=!z&&q.permissions.some((Z)=>Z.state==="missing");return`Permissions: ${Q} of ${q.permissions.length}${J.length>0?` (${J.join(", ")})`:""}`+(X?" \u2014 reason permissions allow":J.length>0?" \u2014 reason permissions":"")}function Uq(q){let z=[];if(q.identity.detail)z.push(q.identity.detail);z.push(`Reason: ${q.identity.path}`);let Q=q.permissions.find((J)=>J.id==="disk");z.push(Q?.holder?`Worker: ${Q.holder}`:`Worker: ${q.worker_detail}`),z.push("");for(let J of q.permissions){let X=`${J.label}${J.level==="recommended"?" (recommended)":""}`;z.push(` ${J.id.padEnd(13)} ${J.state.padEnd(7)} ${X}: ${J.purpose}`)}if(q.permissions.some((J)=>J.state==="missing"))z.push("","Allow the missing ones: reason permissions allow");return`${z.join(`
|
|
24
|
-
`)}
|
|
25
|
-
`}async function g(q,z){let Q=z.now()+Hq;for(;;){if(await q())return!0;if(z.now()>=Q)return!1;await z.sleep(Wq)}}async function Iq(q,z){let Q=z.host??o(),{io:J}=z,X=await i(Q),Z=X.permissions.filter((K)=>q.includes(K.id)&&K.state!=="granted");if(Z.length===0)return J.stdout.write(`Reason permissions: ${q.map((K)=>L[K].label).join(", ")} already allowed.
|
|
26
|
-
`),0;let $=!1,R=!1,Y=Q.identity();for(let K of Z){let{label:E,pane:H}=L[K.id];if(K.id!=="disk"){if(Y.state!=="ready"){if(!$)J.stderr.write(`Reason permissions: ${Y.detail}
|
|
27
|
-
`);$=!0;continue}let C=K.id;await Q.request(Y.prefix,C),Q.open([H]);let t=Q.tile(Y.path,C);if(J.stdout.write(`Allow Reason in System Settings > Privacy & Security > ${E}.
|
|
28
|
-
`),!z.wait)continue;if(J.stdout.write(`Waiting for it (Ctrl-C to stop)\u2026
|
|
29
|
-
`),await g(async()=>(await Q.grants(Y.prefix))?.[C]===!0,Q).finally(t))J.stdout.write(`${E}: granted.
|
|
30
|
-
`),R=!0;else J.stderr.write(`${E} is not allowed yet; turn on Reason there, then run \`reason permissions\`.
|
|
31
|
-
`),$=!0;continue}let N=s(await Q.worker()??{executable:null});if(!N){J.stderr.write(`Reason permissions: ${X.worker_detail} Then run \`reason permissions allow disk\`.
|
|
32
|
-
`),$=!0;continue}if(Q.open([H]),Q.open(["-R",N]),J.stdout.write(`Full Disk Access: click + and choose ${N} (shown in Finder), or drag it into the list.
|
|
33
|
-
`),!z.wait)continue;if(J.stdout.write(`Waiting for the worker to report it (Ctrl-C to stop)\u2026
|
|
34
|
-
`),await g(async()=>(await Q.worker())?.full_disk_access==="granted",Q))J.stdout.write(`Full Disk Access: granted.
|
|
35
|
-
`);else J.stderr.write("Full Disk Access is not reported yet. If you allowed it, `reason connect` restarts the worker with it.\n"),$=!0}if(R)try{if(await Q.restartConnection())J.stdout.write(`This computer's Reason connection restarted to use them.
|
|
36
|
-
`)}catch(K){J.stderr.write(`This computer's Reason connection uses them after it restarts (\`reason connect\`): ${K instanceof Error?K.message:String(K)}
|
|
37
|
-
`)}return $?1:0}function Mq(q){if(q.some((J)=>["--help","-h","help"].includes(J)))return{command:"help"};let[z,...Q]=q;if(z==="protected"){let J=Q.includes("--json"),[X="list",Z,$]=Q.filter((R)=>R!=="--json");if(X==="list"&&Z===void 0)return{command:"protected",action:X,json:J};if((X==="allow"||X==="revoke")&&Z&&$===void 0)return{command:"protected",action:X,path:Z,json:J};return{error:"protected expects list, allow <path> or revoke <path>."}}if(z===void 0||z==="--json")return q.length<=1?{command:"list",json:z==="--json"}:{error:`Unknown option: ${q[1]}`};if(z!=="allow")return{error:`Unknown permissions command: ${z}`};if(Q.length>1)return{error:`Unknown option: ${Q[1]}`};if(Q.length===0)return{command:"allow",ids:[...A]};if(!A.includes(Q[0]))return{error:`allow expects ${A.join(", ")}.`};return{command:"allow",ids:[Q[0]]}}async function pq(q,z={}){let Q=z.io??{stdout:process.stdout,stderr:process.stderr},J=Mq(q);if("error"in J)return Q.stderr.write(`${J.error}
|
|
38
|
-
|
|
39
|
-
${f}`),1;if(J.command==="help")return Q.stdout.write(f),0;if(J.command==="protected")return Aq(J,Q);let X=z.platform??process.platform;if(X!=="darwin")return Q.stdout.write(J.command==="list"&&J.json?`${JSON.stringify({platform:X,applicable:!1})}
|
|
40
|
-
`:`Reason permissions: macOS privacy permissions do not apply on this computer.
|
|
41
|
-
`),0;let Z=z.host??o();if(J.command==="allow")return Iq(J.ids,{io:Q,wait:!0,host:Z});let $=await i(Z);return Q.stdout.write(J.json?`${JSON.stringify({platform:X,applicable:!0,...$},null,2)}
|
|
42
|
-
`:Uq($)),0}function Aq(q,z){try{if(q.action==="allow"){let J=b(q.path);return z.stdout.write(q.json?`${JSON.stringify({grant:J})}
|
|
43
|
-
`:`Sessions on this computer may now open ${J.path}.
|
|
44
|
-
`),0}if(q.action==="revoke"){let J=u(q.path);return z.stdout.write(q.json?`${JSON.stringify({revoked:J})}
|
|
45
|
-
`:J?`Revoked ${q.path}.
|
|
46
|
-
`:`No grant for ${q.path}.
|
|
47
|
-
`),0}let Q=D();return z.stdout.write(q.json?`${JSON.stringify({grants:Q})}
|
|
48
|
-
`:Q.length?Q.map((J)=>`${J.kind} ${J.path}
|
|
49
|
-
`).join(""):`No protected paths are allowed on this computer.
|
|
50
|
-
`),0}catch(Q){return z.stderr.write(`${Q instanceof Error?Q.message:String(Q)}
|
|
51
|
-
`),1}}
|
|
52
|
-
export{_ as oj,Sq as pj,wq as qj,f as rj,A as sj,s as tj,Cq as uj,i as vj,dq as wj,Uq as xj,Iq as yj,Mq as zj,pq as Aj};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{mj as m,nj as y}from"./vm-hands-entry-lite-4k4h9rcq.js";import{basename as UJ}from"path";var f=["production","staging"],DJ="https://api.reasonmachines.com",EJ="https://staging-api.reasonmachines.com";var u={production:{api:"https://api.reasonmachines.ai",app:"https://reasonmachines.ai"},staging:{api:"https://staging-api.reasonmachines.ai",app:"https://staging.reasonmachines.ai"}},GJ=new Set(["ara-staging","ara-staging.exe","reason-staging","reason-staging.exe"]);function mJ(J={}){let Q=m(J.env??process.env,"REASON_CLI_CHANNEL")?.trim().toLowerCase();if(Q){if(f.includes(Q))return Q;throw Error(`Unknown Reason CLI channel: ${Q}`)}let V=UJ(J.executablePath??process.execPath).toLowerCase();return GJ.has(V)?"staging":"production"}function yJ(J,Q){return{...J,...y("REASON_CLI_CHANNEL",Q)}}function j(J){return J==="staging"?EJ:DJ}function sJ(J){return`${j(J)}/mcp/ara`}var s={production:["https://api.ara.so",u.production.api],staging:["https://api-staging.ara.so",u.staging.api]};function p(J){let Q;try{Q=new URL(J).origin}catch{return J}let V=f.find((Z)=>s[Z].includes(Q));return V?j(V):Q}function cJ(J,Q){return J===Q||p(J)===p(Q)}function lJ(J,Q){return f.some((V)=>s[V].includes(J)&&Q===j(V))}function iJ(J,Q){try{let V=new URL(Q);return!V.username&&!V.password&&(V.origin===j(J)||V.origin===u[J].api)}catch{return!1}}function rJ(J){try{let Q=new URL(J).hostname.replace(/^\[|\]$/g,"").toLowerCase();return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}import{randomBytes as VJ}from"crypto";import{chmodSync as ZJ,closeSync as a,constants as _J,linkSync as $J,lstatSync as k,mkdirSync as XJ,openSync as kJ,readdirSync as P,readFileSync as t,readlinkSync as R,renameSync as _,rmdirSync as KJ,symlinkSync as A,unlinkSync as U}from"fs";import{createRequire as CJ}from"module";import{constants as FJ}from"os";import{basename as O,join as K,sep as OJ}from"path";import{existsSync as I,lstatSync as l,readdirSync as PJ,readFileSync as HJ,readlinkSync as RJ,realpathSync as TJ}from"fs";import{join as L,sep as AJ}from"path";function i(J,...Q){let V=L(J,"ara"),Z=L(J,"reason");if(!r(V))return L(Z,...Q);if(!I(Z))return L(V,...Q);return I(L(V,...Q))&&!I(L(Z,...Q))?L(V,...Q):L(Z,...Q)}function r(J){try{let Q=l(J);if(!Q.isSymbolicLink())return Q.isDirectory();return RJ(J)!=="reason"&&I(J)}catch{return!1}}function o(J,Q=[]){if(!r(J))return!1;let V;try{V=[J,...PJ(J,{withFileTypes:!0}).filter((Z)=>Z.isDirectory()).map((Z)=>L(J,Z.name))]}catch{return!1}return V.some((Z)=>["connect","connect-once"].filter(($)=>!Q.includes(L(Z,$))).some(($)=>{let M=L(Z,$,"worker.json");try{l(M)}catch{return!1}try{let z=JSON.parse(HJ(M,"utf8"))?.stateDirectory;if(typeof z!=="string")return!0;let q=(X,B)=>X===B||X.startsWith(B+AJ);return q(z,J)||q(c(z),c(J))}catch{return!0}}))}function c(J){try{return TJ(J)}catch{return J}}var S=new Set(["credentials.json","local-device.json","local-device.revoked.json","local-device.auth-migration.json","local-device.json.registration-pending.json","local-daemon.json","local-daemon.json.workspaces.json","local-root-fingerprint-key.json","instances","workspaces"]),x=new Set(["local-device.proxy.json"]),bJ=new Set(["local-device.key","local-device.binding"]),n=new Map;function jJ(J,Q,V){let Z=K(J,"ara");if(process.platform==="win32"||/[/\\]\.reason-ssh[/\\][^/\\]+[/\\]installer-home[/\\]\.config$/.test(J))return{state:Y(Z)?.isDirectory()?"kept":"absent"};return zJ(Z,K(J,"reason"),{linkAlways:!0,kept:($)=>o($,V??[]),native:Q===void 0?LJ:()=>Q},V!==void 0)}function qQ(J,...Q){return jJ(J),i(J,...Q)}function BQ(J,Q=process.platform){if(Q==="win32")return K(J,"AppData","Local","Reason","Logs");let V=K(J,"Library","Logs");if(Q==="darwin")for(let Z of[""," Staging"," Development"])zJ(K(V,`Ara${Z}`),K(V,`Reason${Z}`),{linkAlways:!1,kept:()=>!1,native:LJ});return K(V,"Reason")}var MJ="config_rename_unavailable:busy";function zJ(J,Q,V,Z=!1){let $=Z?void 0:n.get(J);if($)return $;let M;try{M=IJ(J,Q,V)}catch(z){let q=`config_rename_unavailable:${G(z)??"failed"}`;try{return{state:Y(J)?.isDirectory()?"kept":"absent",problem:q}}catch{return{state:"kept",problem:q}}}if(!(M.state==="absent"&&V.linkAlways)&&M.problem!==MJ&&!(M.state==="kept"&&!M.problem))n.set(J,M);return M}function IJ(J,Q,V){vJ(Q,V.native);let Z=!1;for(let $=0;$<8;$+=1){let M=Y(J);if(M?.isSymbolicLink())return R(J)===O(Q)?{state:Z?"renamed":"linked"}:{state:"kept"};if(!M){if(v(Q))W(()=>U(Q),"ENOENT");if(!(Z||V.linkAlways)||!T(Q))return{state:"absent"};let X=F(Q,"link");A(O(Q),X);try{W(()=>_(X,J),"EISDIR","ENOTEMPTY","EEXIST","ENOTDIR")}finally{W(()=>U(X),"ENOENT")}continue}if(!M.isDirectory())return{state:"absent"};if(V.kept(J))return e(Q),{state:"kept"};let z=V.native();if(!z)return e(Q),{state:"kept",problem:"config_rename_unavailable:no_native"};let q=SJ(z,J);if(!q)return{state:"kept",problem:MJ};try{if(k(J).isSymbolicLink())continue;let X=NJ(z,J,Q);if(X)return{state:"kept",problem:X};Z=!0}finally{q()}}throw Object.assign(Error("legacy directory rename did not settle"),{code:"unsettled"})}function NJ(J,Q,V){let Z=Y(V);if(!Z||v(V)){if(!Z)A(O(V),V);try{J.exchange(Q,V)}catch(X){if(v(V))W(()=>U(V),"ENOENT");return`config_rename_unavailable:${G(X)??"exchange_failed"}`}return null}if(!Z.isDirectory())return"config_rename_unavailable:ENOTDIR";if(Z.dev!==k(Q).dev)return"config_rename_unavailable:EXDEV";let $=[F(V,"probe"),F(V,"probe")];try{A("a",$[0]),A("b",$[1]),J.exchange($[0],$[1])}catch(X){return`config_rename_unavailable:${G(X)??"exchange_failed"}`}finally{for(let X of $)W(()=>U(X),"ENOENT")}let M=wJ(V);for(let X of bJ){let B=Y(K(V,X)),w=Y(K(Q,X));if(B&&w&&B.ino!==w.ino)XJ(`${M}-replaced`,{mode:448,recursive:!0}),_(K(V,X),K(`${M}-replaced`,X))}let z={linked:new Map,unitsKept:new Set};qJ(Q,V,"",z);let q=F(V,"rename");A(O(V),q);try{J.exchange(Q,q)}catch(X){return W(()=>U(q),"ENOENT"),`config_rename_unavailable:${G(X)??"exchange_failed"}`}return BJ(q,V,z,M),null}function g(J){return J===""||!J.includes(OJ)}function qJ(J,Q,V,Z){let $=g(V)&&N(K(Q,V),K(J,V));if($)Z.unitsKept.add(V);for(let M of P(K(J,V))){if($&&(S.has(M)||x.has(M)))continue;let z=K(V,M),q=K(J,z),X=K(Q,z),B=Y(q);if(!B)continue;let w=Y(X);if(B.isDirectory()){if(!w)W(()=>XJ(X,{mode:B.mode&4095}),"EEXIST"),ZJ(X,B.mode&4095);if(T(X))qJ(J,Q,z,Z)}else if(!w){if(B.isSymbolicLink())W(()=>A(R(q),X),"EEXIST");else if(W(()=>$J(q,X),"EEXIST","ENOENT"))Z.linked.set(z,B.ino)}}}function vJ(J,Q){let V;try{if(!T(J))return;V=P(J)}catch{return}for(let Z of V){let $=/^\.(rename|link|probe|claim)-(\d+)-[0-9a-f]+$/.exec(Z);if(!$)continue;let M=K(J,Z),z=Y(M);if(!z)continue;if(!z.isDirectory()){if(!JJ(Number($[2])))W(()=>U(M),"ENOENT");continue}let q=Q(),X=null;if(q){try{X=q.lock(M)}catch{continue}if(!X)continue}else if(JJ(Number($[2])))continue;try{let B=F(J,"claim");if(W(()=>_(M,B),"ENOENT"))BJ(B,J,null,wJ(J))}finally{X?.()}}}function BJ(J,Q,V,Z){for(let[$,M]of V?.linked??[])if(!Y(K(J,$))&&Y(K(Q,$))?.ino===M)W(()=>U(K(Q,$)),"ENOENT");if(YJ(J,Q,"",V),W(()=>KJ(J),"ENOTEMPTY","EEXIST"))return;_(J,Z),ZJ(Z,448)}function YJ(J,Q,V,Z){let $=g(V)&&(Z?Z.unitsKept.has(V):N(K(Q,V),K(J,V)));for(let M of P(K(J,V))){let z=K(V,M),q=K(J,z),X=K(Q,z),B=k(q),w=Y(X);if(w&&B.ino===w.ino&&B.dev===w.dev){U(q);continue}if(B.isFile()&&w?.isFile()&&Z?.linked.get(z)===w.ino){_(q,X);continue}if($&&(S.has(M)||x.has(M)))continue;if(!w){if(B.isFile()){if(W(()=>$J(q,X),"EEXIST"))U(q)}else W(()=>_(q,X),"EEXIST","ENOTEMPTY");continue}if(B.isDirectory()&&w.isDirectory())YJ(J,Q,z,Z),W(()=>KJ(q),"ENOTEMPTY","EEXIST")}}function YQ(J){let Q=K(J,"ara"),V=K(J,"reason");if(!T(Q)||!T(V))return null;let Z=["",...P(Q,{withFileTypes:!0}).filter(($)=>$.isDirectory()&&!$.name.startsWith(".")).map(($)=>$.name)];for(let $ of Z){let M=K(Q,$),z=K(V,$);if(!N(M,z)||!N(z,M))continue;if([...S,...x].some((X)=>h(K(M,X),K(z,X))===!1))return $}return null}function WQ(J){let Q=K(J,"ara"),V=K(J,"reason");if(!T(Q)||!T(V))return null;let Z=($)=>{for(let M of P(K(Q,$))){let z=K($,M);if(g($)&&(M==="connect"||M==="connect-once"))continue;let q=k(K(Q,z)),X=Y(K(V,z));if(!X||q.ino===X.ino&&q.dev===X.dev)continue;if(q.isDirectory()&&X.isDirectory()&&!X.isSymbolicLink()){let B=Z(z);if(B!==null)return B}else if(q.isSymbolicLink()||X.isSymbolicLink()){if(!(q.isSymbolicLink()&&X.isSymbolicLink()&&R(K(Q,z))===R(K(V,z))))return z}else if(h(K(Q,z),K(V,z))!==!0)return z}return null};return Z("")}function h(J,Q){let V=Y(J),Z=Y(Q);if(!V&&!Z)return null;if(!V||!Z||V.isDirectory()!==Z.isDirectory())return!1;if(V.ino===Z.ino&&V.dev===Z.dev)return!0;if(V.isDirectory())return[...new Set([...P(J),...P(Q)])].every((M)=>h(K(J,M),K(Q,M))===!0);try{return t(J).equals(t(Q))}catch{return!1}}function N(J,Q){for(let V of S)if(WJ(K(J,V),K(Q,V)))return!0;return!1}function WJ(J,Q){let V=Y(J);if(!V)return!1;let Z=Y(Q);if(!Z)return!0;if(V.isDirectory()){if(!Z.isDirectory())return!0;return P(J).some(($)=>WJ(K(J,$),K(Q,$)))}if(V.isSymbolicLink())return!Z.isSymbolicLink()||R(J)!==R(Q);return V.ino!==Z.ino||V.dev!==Z.dev}function e(J){if(v(J))W(()=>U(J),"ENOENT")}function wJ(J){return K(J,`.pre-rename-${new Date().toISOString().replace(/[:.]/g,"-")}-${VJ(3).toString("hex")}`)}function v(J){try{return k(J).isSymbolicLink()&&R(J)===O(J)}catch{return!1}}function T(J){let Q=Y(J);return Q!==null&&Q.isDirectory()}function SJ(J,Q){for(let V=0;V<40;V+=1){let Z=J.lock(Q);if(Z)return Z;Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,50)}return null}function F(J,Q){return K(J,`.${Q}-${process.pid}-${VJ(6).toString("hex")}`)}function JJ(J){if(J===process.pid)return!1;try{return process.kill(J,0),!0}catch(Q){return G(Q)==="EPERM"}}function Y(J){try{return k(J)}catch(Q){if(G(Q)==="ENOENT"||G(Q)==="ENOTDIR")return null;throw Q}}function W(J,...Q){try{return J(),!0}catch(V){if(Q.includes(G(V)??""))return!1;throw V}}function G(J){return J instanceof Error&&"code"in J&&typeof J.code==="string"?J.code:void 0}var C,uJ=2,fJ=4,xJ=2,gJ=2,QJ=-100;function LJ(){if(C!==void 0)return C;if(C=null,process.platform!=="linux"&&process.platform!=="darwin")return null;let J;try{J=CJ(import.meta.url)("bun:ffi")}catch{return null}let Q=process.platform==="darwin",V=Q?"__error":"__errno_location",Z=Q?["/usr/lib/libSystem.B.dylib"]:["libc.so.6",`libc.musl-${process.arch==="arm64"?"aarch64":"x86_64"}.so.1`],{FFIType:$}=J;for(let M of Z)try{let z=Q?"renamex_np":"renameat2",X=J.dlopen(M,{flock:{args:[$.i32,$.i32],returns:$.i32},[V]:{args:[],returns:$.ptr},[z]:Q?{args:[$.ptr,$.ptr,$.u32],returns:$.i32}:{args:[$.i32,$.ptr,$.i32,$.ptr,$.u32],returns:$.i32}}).symbols,B=X[V]();if(B===null)continue;let w=(H)=>{let E=J.read.i32(B),D=Object.entries(FJ.errno).find(([,b])=>b===E)?.[0]??`errno_${E}`;return Object.assign(Error(`${H} failed: ${D}`),{code:D})},d=(H)=>Buffer.from(`${H}\x00`,"utf8");return C={exchange(H,E){let D=d(H),b=d(E);if((Q?X[z](J.ptr(D),J.ptr(b),xJ):X[z](QJ,J.ptr(D),QJ,J.ptr(b),gJ))!==0)throw w("exchange")},lock(H){let E=kJ(H,_J.O_RDONLY);if(X.flock(E,uJ|fJ)===0)return()=>a(E);let D=w("lock");if(a(E),D.code==="EWOULDBLOCK"||D.code==="EAGAIN")return null;throw D}},C}catch{}return null}
|
|
3
|
-
export{f as Xi,mJ as Yi,yJ as Zi,j as _i,sJ as $i,p as aj,cJ as bj,lJ as cj,iJ as dj,rJ as ej,r as fj,jJ as gj,qQ as hj,BQ as ij,YQ as jj,WQ as kj,LJ as lj};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Yj as J}from"./vm-hands-entry-lite-6nwbqg37.js";import{readFileSync as L}from"fs";import{isAbsolute as M,normalize as Q}from"path";var W="REASON_WORKER_DESKTOP_USER",G=null;function X(q,B){for(let I of B.split(`
|
|
3
|
-
`)){let j=I.split(":");if(j.length<7||Number(j[2])!==q||!/^\d+$/.test(j[2])||!/^\d+$/.test(j[3]))continue;let x=j[5];if(!/^[a-z_][a-z0-9_-]*$/i.test(j[0])||!M(x)||Q(x)!==x||x==="/")return null;return{username:j[0],uid:q,gid:Number(j[3]),home:x}}return null}function b(q={}){let B="value"in q?q.value:process.env[W];if(G=null,B===void 0||B==="")return null;let I=q.platform??process.platform,j="euid"in q?q.euid:process.geteuid?.(),x=/^[1-9]\d{0,9}$/.test(B)?Number(B):NaN,C=I==="linux"&&j===0&&Number.isSafeInteger(x)?X(x,(q.passwd??(()=>L("/etc/passwd","utf8")))()):null;if(!C||C.gid===0)throw Error("worker_desktop_user_invalid");return G=C,C}function k(){return G}function y(){return G?.home??J()}
|
|
4
|
-
export{W as Ai,X as Bi,b as Ci,k as Di,y as Ei};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Fj as I}from"./vm-hands-entry-lite-714wspqb.js";import{dl as R,gl as U,jl as C,kl as O,ll as g}from"./vm-hands-entry-lite-gxper06w.js";import{spawn as S}from"child_process";import{existsSync as x,mkdirSync as T,readFileSync as w,writeFileSync as E}from"fs";import{homedir as H}from"os";import{basename as L,delimiter as D,join as G,win32 as $}from"path";var N=process.platform==="win32"?U("win32"):"/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin",b=N.split(D),_=5000,j=65536,k=new Set(["zsh","bash"]),f=[[".local","bin"],[".bun","bin"],[".cargo","bin"],["go","bin"]],P=(z,J)=>new Promise((B,Q)=>{let K;try{K=S(z,[...J],{...C(),stdio:["ignore","pipe","ignore"]}),O(K)}catch(X){Q(X);return}let W=[],V=0,Z=null,q=(X)=>{Z??=Error(X);try{if(K.pid!==void 0)g(K.pid,"SIGKILL")}catch{}},F=setTimeout(()=>q("login_shell_timeout"),_);K.stdout?.on("data",(X)=>{if(V+=X.length,V>j)q("login_shell_output_too_large");else W.push(X)}),K.once("error",(X)=>{clearTimeout(F),Q(X)}),K.once("close",(X)=>{if(clearTimeout(F),Z)Q(Z);else if(X!==0)Q(Error("login_shell_exit_nonzero"));else B(Buffer.concat(W).toString("utf8"))})});function v(z){return typeof z==="string"&&z.startsWith("/")&&!z.includes("\x00")&&k.has(L(z))}function M(z){let J=new Set,B=[];for(let Q of z){if(J.has(Q))continue;J.add(Q),B.push(Q)}return B}function A(z,J=process.platform){let B=J==="win32",Q=z.split(`
|
|
3
|
-
`).at(-1)??"",K=[];for(let W of Q.split(B?";":":")){let V=W.trim();if(B?!$.isAbsolute(V):!V.startsWith("/"))continue;if(V.includes("\x00"))continue;if(I(V))continue;K.push(V)}return M(K)}function y(z){let J=z?.home??H(),B=z?.directoryExists??x,Q=f.map((K)=>G(J,...K)).filter((K)=>{try{return B(K)}catch{return!1}});return M([...Q,...process.platform==="win32"?A(process.env.PATH??process.env.Path??""):[],...b]).join(D)}async function d(z){let J=z?.shell??process.env.SHELL,B=()=>({path:y({home:z?.home,directoryExists:z?.directoryExists}),source:"fallback"});if(process.platform==="win32"||!v(J))return B();let Q;try{Q=await(z?.runLoginShell??P)(J,["-lic",'printf %s "$PATH"'])}catch{return B()}if(Buffer.byteLength(Q,"utf8")>j)return B();let K=A(Q);if(K.length===0)return B();return{path:M([...K,...b]).join(":"),source:"login_shell"}}function n(z){let J=null;return()=>{return J??=d(z),J}}function Y(z){if(z===void 0||z.includes("\x00")||Buffer.byteLength(z,"utf8")>32768)return;return z}function r(z){let J=z.source??process.env,B={HOME:z.home,PATH:z.path??N,TMPDIR:z.temporaryDirectory,SHELL:Y(J.SHELL)??"/bin/zsh",LANG:Y(J.LANG)??"C.UTF-8",LC_ALL:Y(J.LC_ALL)??Y(J.LANG)??"C.UTF-8"},Q=Y(J.LC_CTYPE),K=Y(J.TERM),W=Y(J.COLORTERM);if(Q)B.LC_CTYPE=Q;if(K)B.TERM=K;if(W)B.COLORTERM=W;if(process.platform==="win32"){for(let V of h){let Z=Y(J[V]);if(Z)B[V]=Z}B.TEMP=B.TMP=z.temporaryDirectory,B.SHELL=R()??B.SHELL,B.PATH=m(B.PATH)}return B}function m(z,J=G(H(),".reason","python3")){let B=(W)=>z.split($.delimiter).filter((V)=>V&&!/[\\/]WindowsApps[\\/]?$/i.test(V)).map((V)=>$.join(V,W)).find((V)=>x(V)),Q=B("python.exe");if(B("python3.exe")||!Q)return z;let K=`#!/bin/sh
|
|
4
|
-
exec "${Q.replaceAll("\\","/")}" "$@"
|
|
5
|
-
`;try{let W=G(J,"python3");if(!x(W)||w(W,"utf8")!==K)T(J,{recursive:!0}),E(W,K)}catch{return z}return[J,z].join($.delimiter)}var h=["SystemRoot","SystemDrive","windir","ComSpec","PATHEXT","USERPROFILE","USERNAME","USERDOMAIN","APPDATA","LOCALAPPDATA","ProgramData","ProgramFiles","ProgramFiles(x86)","ProgramW6432","CommonProgramFiles","NUMBER_OF_PROCESSORS","PROCESSOR_ARCHITECTURE","OS"];
|
|
6
|
-
export{N as nd,A as od,y as pd,n as qd,r as rd,m as sd};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{gg as xJ,lf as TJ,tf as yJ,uf as DJ,vf as fJ,wf as mJ}from"./vm-hands-entry-lite-tytfs183.js";import{createHash as p,randomBytes as FJ}from"crypto";import{closeSync as qJ,fsyncSync as SJ,mkdirSync as nJ,openSync as wJ,renameSync as tJ,rmSync as eJ,statSync as hJ,writeSync as HJ,constants as c}from"fs";import{join as e}from"path";var JQ=1;var JJ=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function CJ(J){if(J.environment!==void 0||J.payload.environment!==void 0)throw new F("vm_hands_bind_invalid","bind carries a plaintext environment");if(J.payload.vm_hands_env_deferred===!0&&J.environment_sealed!==void 0)throw new F("vm_hands_bind_invalid","split bind carries an environment");return J.environment_sealed!==void 0}function MJ(J,Q){let{payload:$,authority:z}=J;if(!$||typeof $!=="object"||Array.isArray($)||!z||typeof z!=="object"||Array.isArray(z)||!Q.deviceId||!Q.rootId||$.run_id!==Q.runId||$.device_id!==Q.deviceId||z.device_id!==Q.deviceId||$.root_id!==Q.rootId||Q.snapshotId!==void 0&&$.snapshot_id!==Q.snapshotId)throw new F("vm_hands_env_invalid","environment does not match this Hands");return $}function VJ(J){if(J.capability!=="hands.connect")throw new F("vm_hands_bind_invalid","not a hands.connect claim");let Q=J.payload;return{kind:"vm_hands.bind",v:1,bind_id:J.attempt_id,attempt_id:J.attempt_id,attempt_token:J.attempt_token,run_id:J.run_id,session_id:typeof Q.workspace_id==="string"&&JJ.test(Q.workspace_id)?Q.workspace_id:J.run_id,brain_generation:Q.target_generation,fence_id:Q.target_fence_id,lease_until:J.lease_until,policy:{agent_profile:"",confinement_key:String(Q.hands_confinement??""),browser_egress:Q.browser_egress??null,policy_digest:Q.vm_hands_policy_digest},cwd:typeof Q.cwd==="string"?Q.cwd:"",claim:J,env:CJ(J)?J.environment_sealed:null,workspace_deferred:QQ(J)}}function QQ(J){let Q=J.payload[DJ];if(Q===void 0)return!1;if(Q!==!0||J.payload.vm_hands_env_deferred!==!0||J.environment_sealed!==void 0)throw new F("vm_hands_bind_invalid","a pre-bind must be environment-less");return!0}class F extends Error{code;constructor(J,Q){super(Q);this.code=J}}var b=(J)=>Buffer.from(J instanceof Uint8Array?J:new Uint8Array(J)).toString("base64url"),l=(J)=>new Uint8Array(Buffer.from(J,"base64url"));function u(J){if(J===null||typeof J!=="object")return JSON.stringify(J);if(Array.isArray(J))return`[${J.map(u).join(",")}]`;return`{${Object.keys(J).sort().map((Q)=>`${JSON.stringify(Q)}:${u(J[Q])}`).join(",")}}`}async function HQ(J){let Q=await crypto.subtle.importKey("pkcs8",l(J.device_key.pkcs8),{name:"ECDSA",namedCurve:"P-256"},!1,["sign"]),$=l(J.device_key.spki),z=await crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},!1,["deriveKey"]),L=new Uint8Array(await crypto.subtle.exportKey("spki",z.publicKey)),U=p("sha256").update($).digest("base64url");return{signing:{privateKey:Q},agreement:z,signingSpki:$,agreementSpki:L,fingerprint:U}}var ZQ=4;class $Q{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(J){let Q=this.structural.then(J,J);return this.structural=Q.catch(()=>{return}),Q}constructor(J,Q,$,z){this.init=J;this.keys=Q;this.hooks=$;this.options=z;if(!JJ.test(J.workspace_id)&&!/^ws-[a-z0-9]{8,64}$/.test(J.workspace_id))throw new F("vm_hands_layout_invalid","bad workspace id");if(!Number.isSafeInteger(J.instance_generation)||J.instance_generation<1)throw new F("vm_hands_layout_invalid","bad generation")}get phase(){if(this.identity==="identity_free")return"identity_free";if(this.unbinding.size)return"unbinding";return this.bound.size||this.binding.size?"bound":"registered"}isBoundRun(J){for(let Q of this.bound.values())if(Q.runId===J)return!0;return!1}bindIdForRun(J){for(let Q of this.bound.values())if(Q.runId===J)return Q.bindId;return null}get liveBindIds(){return[...new Set([...this.bound.keys(),...this.binding.keys(),...this.unbinding])]}get settingUp(){return this.binding.size>0}async environmentInstalled(J,Q,$){for(let z=Date.now()+Q;;){let L=this.bound.get(J);if(!L)return!1;if(L.envInstalled)return!0;if(Date.now()>=z||$?.aborted)return!1;await new Promise((U)=>setTimeout(U,25))}}opServed(){this.commandsSinceVerified=!0}canSpawn(J){for(let Q of this.bound.values())if(Q.runId===J)return Q.envInstalled;return!1}async registerFrame(J){if(this.identity!=="identity_free")throw new F("vm_hands_register_twice","already registered");if(typeof J!=="string"||J.length<16||J.length>256)throw new F("vm_hands_challenge_invalid","bad register challenge");let Q={challenge:J,t:"register",v:JQ,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(FJ(32)),timestamp_ms:(this.options.now??Date.now)(),vm_hands_attest_hold:!0},$=await crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},this.keys.signing.privateKey,new TextEncoder().encode(u(Q)));return{...Q,device_signature:b($)}}async helloFrame(J,Q){if(this.identity==="identity_free")throw new F("vm_hands_not_registered","hello before register");let $=String((this.options.now??Date.now)()),z=b(FJ(32)),L=xJ({method:"GET",pathAndQuery:TJ,timestamp:$,nonce:z,challenge:J,bodySha256:p("sha256").update("").digest("hex")}),U=new Uint8Array(await crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},this.keys.signing.privateKey,new Uint8Array(L)));return{t:"hello",timestamp:$,nonce:z,signature:b(zQ(U)),...Q?{vm_hands_previous_connection:Q}:{}}}registered(){if(this.identity!=="identity_free")throw new F("vm_hands_register_unexpected","registered twice");this.identity="registered"}async bind(J){if(this.identity!=="registered")throw new F("vm_hands_not_registered","bind before register");if(J.kind!=="vm_hands.bind"||J.v!==1)throw new F("vm_hands_bind_invalid","bad bind");for(let $ of[J.bind_id,J.attempt_id,J.run_id,J.session_id,J.fence_id])if(!JJ.test($))throw new F("vm_hands_bind_invalid","bad id");if(!Number.isSafeInteger(J.brain_generation)||J.brain_generation<=(this.lastBrainGeneration.get(J.run_id)??0))throw new F("vm_hands_generation_stale","brain generation not strictly higher");if(J.env&&(J.env.aad!==J.bind_id||J.env.alg!=="ECDH-P256+A256GCM"))throw new F("vm_hands_bind_invalid","bad env envelope");if(!/^[0-9a-f]{64}$/.test(J.policy.policy_digest))throw new F("vm_hands_bind_invalid","bad policy or nonce");if(p("sha256").update(u({hands_confinement:J.policy.confinement_key||null,browser_egress:J.policy.browser_egress??null})).digest("hex")!==J.policy.policy_digest)throw new F("vm_hands_policy_mismatch","policy digest does not match the claim");if(this.liveBindIds.includes(J.bind_id)||[...this.bound.values()].some(($)=>$.runId===J.run_id)||[...this.binding.values()].includes(J.run_id))throw new F("vm_hands_busy","this run already holds a bind here");if(this.liveBindIds.length>=ZQ)throw new F("vm_hands_busy","every bind slot is held");if(this.grants.size)throw new F("vm_hands_busy","a bind waits for its workspace beside the setup");if(J.workspace_deferred&&(this.liveBindIds.length||this.commandsSinceVerified))throw new F("vm_hands_prebind_unsafe","a pre-bind needs a VM that served nothing since its last full kill");if(this.lastBrainGeneration.set(J.run_id,J.brain_generation),this.binding.set(J.bind_id,J.run_id),J.workspace_deferred){let $,z,L=new Promise((U,C)=>{$=U,z=C});L.catch(()=>{return}),this.grants.set(J.bind_id,{promise:L,resolve:$,reject:z})}return this.exclusive(()=>this.setUp(J))}async setUp(J){let Q=[...this.bound.keys()],$=null,z=!1,L=this.grants.get(J.bind_id);try{if(L&&(Q.length||this.commandsSinceVerified))throw new F("vm_hands_prebind_unsafe","a pre-bind needs a VM that served nothing since its last full kill");if(Q.length===0){if(this.bootKillPending&&!this.servedRun){try{await this.hooks.killProbe()}catch{throw new F("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:Q}),this.unverified.clear();this.servedRun=!0,z=!0;let{launchId:U,applied:C,readyData:M}=await this.hooks.startExecutor({bindId:J.bind_id,sessionId:J.session_id,policyDigest:J.policy.policy_digest,confinementKey:J.policy.confinement_key,browserEgress:J.policy.browser_egress,cwd:J.cwd,claim:J.claim,...L?{workspaceGrant:L.promise}:{}}),T=this.hooks.restatLayout();this.hooks.verifyMounts?.();let D=null,O=null;if(J.env){let w=J.claim?.owner??{},g=MJ(await this.openSealed(J.env,J.bind_id),{runId:J.run_id,deviceId:typeof w.device_id==="string"?w.device_id:"",rootId:J.claim?.root_id??""});this.commandsSinceVerified=!0,D=this.hooks.installEnvironment(J.bind_id,g),O=typeof g.snapshot_id==="string"&&g.snapshot_id?g.snapshot_id:null,$=this.writeJobEnvRootOnly(J.bind_id,g)}if(this.unbinding.has(J.bind_id))throw new F("vm_hands_bind_lost","unbound while binding");return this.bound.set(J.bind_id,{bindId:J.bind_id,runId:J.run_id,sessionId:J.session_id,brainGeneration:J.brain_generation,policyDigest:J.policy.policy_digest,launchId:U,envInstalled:D!==null,rootId:J.claim?.root_id??"",envDirectory:$}),this.binding.delete(J.bind_id),this.grants.delete(J.bind_id),{bind_id:J.bind_id,attempt_id:J.attempt_id,attempt_token:J.attempt_token,launch_id:U,snapshot_revision:D,snapshot_id:O,layout:T,...M?{ready_data:M}:{},policy_digest:p("sha256").update(u({hands_confinement:C.hands_confinement??null,browser_egress:C.browser_egress??null})).digest("hex")}}catch(U){if($)PJ($);if(z){let M=[...this.bound.keys()];await this.hooks.killAndVerifyPayload({bindId:J.bind_id,keep:M,own:!0}).catch(()=>{this.unverified.add(J.bind_id)})}this.binding.delete(J.bind_id),this.grants.delete(J.bind_id);let C=U&&typeof U==="object"&&"code"in U&&typeof U.code==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(U.code)?U.code:"vm_hands_bind_failed";throw U instanceof F?U:new F(C,"executor refused the bind")}}grantWorkspace(J){let Q=this.grants.get(J);if(!Q)throw new F("vm_hands_not_binding","no pre-bind waits for a workspace grant");Q.resolve()}abandonWorkspaceGrant(J){this.grants.get(J)?.reject(new F("vm_hands_bind_lost","the pre-bind ended before its workspace grant"))}async deliverEnvironment(J){let Q=this.bound.get(J.attemptId);if(!Q||this.unbinding.has(J.attemptId))throw new F("vm_hands_not_bound","environment delivered while not bound");if(!JJ.test(J.attemptId)||typeof J.snapshotId!=="string"||!J.snapshotId||J.snapshotId.length>128||J.snapshotId.includes("/"))throw new F("vm_hands_env_invalid","bad snapshot id");let $=`${J.attemptId}/${J.snapshotId}`;if(J.sealed?.alg!=="ECDH-P256+A256GCM"||J.sealed.aad!==$)throw new F("vm_hands_env_invalid","bad env envelope");let z=MJ(await this.openSealed(J.sealed,$),{runId:Q.runId,deviceId:J.deviceId,rootId:Q.rootId,snapshotId:J.snapshotId});this.commandsSinceVerified=!0;let L=this.hooks.installEnvironment(Q.bindId,z);if(Q.envInstalled=!0,Q.envDirectory)PJ(Q.envDirectory);return Q.envDirectory=null,Q.envDirectory=this.writeJobEnvRootOnly(`${Q.bindId}-r${L}`,z),{snapshot_id:J.snapshotId,installed_revision:L,installed:!0}}async attestFrame(J,Q){if(this.identity==="identity_free")throw new F("vm_hands_not_registered","attest before register");if(!J||J.length>65536)throw new F("vm_hands_attest_invalid","no probe script");return this.exclusive(async()=>{if(this.liveBindIds.length)throw new F("vm_hands_attest_invalid","attest beside a bind");let $=await this.hooks.runProbe({nonce:Q,script:J});try{await this.hooks.killProbe()}catch{this.bootKillPending=!0}return{t:"attest",nonce:Q,exit_code:$.exitCode,markers:$.markers,proof_dir_inode:$.proofDirInode,script_sha256:p("sha256").update(J).digest("hex")}})}executorExited(J){return this.hooks.executorExited?.(J)??new Promise(()=>{})}async boundRefused(J){await this.unbind(J)}async unbind(J){let Q=this.bound.get(J)??null;if(this.unbinding.add(J),this.bound.delete(J),this.abandonWorkspaceGrant(J),Q)try{this.hooks.freezeBind?.(J)}catch{}return this.exclusive(()=>this.tearDown(J,Q))}async retryUnbind(J){if(!this.unverifiedTeardowns.has(J))throw new F("vm_hands_unbind_unknown","no unverified unbind of this bind");return this.exclusive(async()=>{if(!this.unverifiedTeardowns.has(J))throw new F("vm_hands_unbind_unknown","no unverified unbind of this bind");return this.tearDown(J,this.unverifiedTeardowns.get(J)??null,!0)})}async tearDown(J,Q,$=!1){try{this.bound.delete(J);let z=[...this.bound.keys()].filter((U)=>U!==J),L=!z.length&&($||!this.commandsSinceVerified);try{await this.hooks.killAndVerifyPayload(z.length?{bindId:J,keep:z}:L?{bindId:J,own:!0}:void 0)}catch(U){if(this.unverified.add(J),!this.unverifiedTeardowns.has(J))this.unverifiedTeardowns.set(J,Q);throw U}if(this.unverified.delete(J),!z.length&&!$)this.unverified.clear(),this.commandsSinceVerified=!1;if(Q?.envDirectory)PJ(Q.envDirectory);return this.unverifiedTeardowns.delete(J),{bind_id:Q?J:null,killed_verified:!0,shredded:!0,srt_fallbacks:z.length||$?null:this.hooks.takeSrtFallbacks?.()??null}}finally{this.unbinding.delete(J)}}async openSealed(J,Q){let $=()=>{throw new F("vm_hands_env_invalid","env did not decrypt")},z=await crypto.subtle.importKey("spki",l(J.epk),{name:"ECDH",namedCurve:"P-256"},!1,[]).catch($),L=await crypto.subtle.deriveKey({name:"ECDH",public:z},this.keys.agreement.privateKey,{name:"AES-GCM",length:256},!1,["decrypt"]),U=await crypto.subtle.decrypt({name:"AES-GCM",iv:l(J.iv),additionalData:new TextEncoder().encode(Q)},L,l(J.ct)).catch($),C=JSON.parse(new TextDecoder().decode(U));if(!C||typeof C!=="object"||Array.isArray(C))throw new F("vm_hands_env_invalid","env not an object");return C}writeJobEnvRootOnly(J,Q){let $=e(this.options.envRoot,`bind-${J}`);nJ($,{mode:448});let z=hJ($);if(!z.isDirectory()||(z.mode&63)!==0||z.uid!==(process.getuid?.()??-1))throw new F("vm_hands_env_dir_unsafe","env directory is not root's 0700");let L=Q.variables&&typeof Q.variables==="object"?Q.variables:{},U=Object.entries(L).filter(([T,D])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(T)&&typeof D==="string").map(([T,D])=>`export ${T}='${String(D).replaceAll("'","'\\''")}'`).join(`
|
|
3
|
-
`)+`
|
|
4
|
-
`,C=e($,`.job.env.${FJ(8).toString("hex")}`),M=wJ(C,c.O_WRONLY|c.O_CREAT|c.O_EXCL|c.O_NOFOLLOW,384);try{HJ(M,U),SJ(M)}finally{qJ(M)}return tJ(C,e($,"job.env")),$}}function PJ(J){try{let Q=e(J,"job.env"),$=hJ(Q).size,z=wJ(Q,c.O_WRONLY|c.O_NOFOLLOW);try{HJ(z,Buffer.alloc($)),SJ(z)}finally{qJ(z)}}catch{}eJ(J,{recursive:!0,force:!0})}function zQ(J){if(J.length!==64)throw new F("vm_hands_signature_invalid","unexpected ECDSA signature length");let Q=(L)=>{let U=0;while(U<L.length-1&&L[U]===0)U++;let C=L.subarray(U),M=C[0]&128?Uint8Array.of(0,...C):C;return Uint8Array.of(2,M.length,...M)},$=Q(J.subarray(0,32)),z=Q(J.subarray(32));return Uint8Array.of(48,$.length+z.length,...$,...z)}import{randomUUID as XQ}from"crypto";var YQ="/app/local-runtime/session?register=vm_hands_v1",GQ="/app/local-runtime",kJ=25000,NJ=20000,WQ=1e4,bJ=5000,vJ=new Set(["pty.start","jobs.control","tunnel.open","tunnel.close"]),KQ="preview.serve.v1",FQ=60000,EJ=75000,PQ=2000,CQ=1e4,NQ=new Set(["vm_hands_no_register","vm_hands_register_failed"]),EQ=3,UQ=20000,BQ=250,LQ=2000;function cJ(J){let Q=Math.min(BQ*2**(J-1),LQ);return Math.round(Q/2+Math.random()*Q/2)}var _Q=5000;function AQ(J){return J>=500||J===408||J===429}var QJ=20000;function gJ(J,Q){return typeof J==="string"&&/^[A-Za-z0-9._:-]{1,160}$/.test(J)?J:Q}class v extends Error{}var OQ=64,RJ=[1000,2000,4000,8000,15000,30000,60000,120000];function pJ(J){let Q=J&&typeof J==="object"&&"code"in J?J.code:null;return typeof Q==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(Q)?Q:"vm_hands_unbind_failed"}function jQ(J,Q,$,z,L){let U=$.turn.claim.attempt_id,C=J.healing??=new Set;if(C.has(U))return;C.add(U);let M=$.turn.claim.operation_id;(async()=>{for(let[T,D]of RJ.entries()){if(z.aborted)return;if(await new Promise((O)=>{let w=setTimeout(O,D);w.unref?.(),z.addEventListener("abort",()=>{clearTimeout(w),O()},{once:!0})}),z.aborted)return;try{let O=await Q.retryUnbind(U);L("vm_hands.unbind_healed",{operation_id:M,attempt:T+1}),J.receipts.push({...$,unbound:O}),J.flushReceipts?.();return}catch(O){let w=pJ(O);if(L("vm_hands.unbind_unverified",{operation_id:M,code:w,attempt:T+1}),w==="vm_hands_unbind_unknown")return}}L("vm_hands.unbind_heal_exhausted",{operation_id:M,attempts:RJ.length})})().finally(()=>C.delete(U))}async function lJ(J,Q){let $=[...J.modelOps.get(Q)??[]];for(let z of $)z.abort.abort();await Promise.race([Promise.all($.map((z)=>z.settled)),new Promise((z)=>setTimeout(z,bJ))])}async function MQ(J){let Q=[...J.personTerminals];for(let $ of Q)$.abort.abort();if(Q.length)await Promise.race([Promise.all(Q.map(($)=>$.settled)),new Promise(($)=>setTimeout($,bJ))]);return Q.length}async function o(J,Q,$){return await lJ(J,$),Q.unbind($)}function ZJ(J){for(let Q of J.outbox?.splice(0)??[])Q.reject(Error("vm_hands_attempt_ended"))}var IJ=15000,TQ=1e4,DQ=1000;async function IQ(J){let Q=Date.now(),$={deviceId:null,connection:null,turns:new Map,lostAt:0,receipts:[],attest:"pending",attestWaiters:[],modelOps:new Map,personTerminals:new Set,bindsStarting:0},z=J.log??(()=>{}),L=async(M)=>{for(let[T,D]of[...$.turns]){$.turns.delete(T),J.onTurn?.(T,null),ZJ(D);let O=await o($,J.agent,T).catch(()=>null);if(O)$.receipts.push({turn:D,failure:"vm_hands_bind_lost",unbound:O});z("vm_hands.bound_dropped",{reason:M})}},U=0,C=0;try{for(let M=0;!J.signal.aborted;M++){let T=await xQ(J,$).catch((O)=>{if(O instanceof F&&$.deviceId===null&&O.code==="vm_hands_no_session"&&Date.now()-Q<CQ)return{closeCode:0,closeReason:"vm_hands_no_session"};if(O instanceof F&&$.deviceId===null&&NQ.has(O.code)&&U<EQ&&Date.now()-Q<UQ)return U++,C=cJ(U),z("vm_hands.register_retry",{attempt:U,code:O.code,delay_ms:C}),{closeCode:0,closeReason:"vm_hands_register_retry"};if(O instanceof F&&$.deviceId===null)throw O;return{closeCode:0,closeReason:O instanceof Error?O.message:String(O)}});if(z("vm_hands.session_closed",{close_code:T.closeCode,reason:T.closeReason.slice(0,120),registered:$.deviceId!==null}),T.closeCode===4401||$.attest==="refused")return;if(J.signal.aborted)return;if($.turns.size&&Date.now()-$.lostAt>=EJ)await L("reconnect_deadline");if($.served)$.served=!1,M=0;let D=T.closeReason==="drain_reconnect"?0:T.closeReason==="vm_hands_register_retry"?C:T.closeReason==="vm_hands_no_session"?Math.min(250*2**Math.min(M,5),2000):$.turns.size?Math.min(250*2**Math.min(M,5),5000,Math.max(0,$.lostAt+EJ-Date.now())):Math.min(500*2**M,30000);if(await new Promise((O)=>setTimeout(O,D)),$.turns.size&&Date.now()-$.lostAt>=EJ)await L("reconnect_deadline")}}finally{await L("session_ended")}}async function xQ(J,Q){let $=Q.deviceId,z=J.log??(()=>{}),L=$?`/app/local-runtime/session?device_id=${encodeURIComponent($)}`:YQ,U=`${J.apiOrigin.replace(/^http/,"ws")}${L}`,C=new WebSocket(U),M=0,T="",D=new Map,O=[],w=null,g=new Promise((Z)=>{C.onclose=(Y)=>{M=Y.code,T=Y.reason;for(let X of D.values())X.reject(new v(`session closed ${Y.code}`));for(let X of Q.attestWaiters.splice(0))X(!1);D.clear(),Z()}});C.onmessage=(Z)=>{let Y;try{Y=JSON.parse(String(Z.data))}catch{C.close(4400);return}if(Y.t==="res"){let X=Y;D.get(X.id)?.resolve({status:X.status,body:X.body}),D.delete(X.id);return}if(Y.t==="reconnect"){let X=Math.max(0,Math.min(Number(Y.after_ms)||0,DQ));z("vm_hands.drain_reconnect",{after_ms:X}),setTimeout(()=>{try{C.close(4001,"drain_reconnect")}catch{}},X).unref?.();return}if(!w?.(Y))O.push(Y)};let d=(Z,Y)=>new Promise((X,G)=>{let P=O.findIndex((_)=>Z.includes(_.t));if(P>=0){X(O.splice(P,1)[0]);return}let B=setTimeout(()=>{w=null,G(new F("vm_hands_no_register",`no ${Z.join("/")} in ${Y} ms`))},Y);w=(_)=>{if(!Z.includes(_.t))return!1;return clearTimeout(B),w=null,X(_),!0}}),i=(Z)=>C.send(JSON.stringify(Z)),H=(Z,Y)=>new Promise((X,G)=>{if(C.readyState!==WebSocket.OPEN){G(new v("session closed"));return}let P=XQ(),B=typeof Y.wait_ms==="number"?Y.wait_ms:0,_=setTimeout(()=>{if(!D.delete(P))return;G(new v(`no answer to ${Z.split("/").pop()} in ${B+IJ} ms`)),C.close(4000,"request_timeout")},B+IJ);D.set(P,{reject:(K)=>{clearTimeout(_),G(K)},resolve:({status:K,body:W})=>{clearTimeout(_);let N=null;try{N=W?JSON.parse(W):null}catch{}X({status:K,json:N})}}),i({t:"req",id:P,path:`${GQ}${Z}`,body:JSON.stringify(Y)})}),UJ=()=>C.close(1001,"stopping");J.signal.addEventListener("abort",UJ,{once:!0});let $J,s=new Map,r=new Map,zJ=!1,XJ=new Set,YJ=new Set,GJ=Promise.resolve(),BJ=()=>{t().catch(()=>{return})},a=!1;try{await new Promise((K,W)=>{let N=setTimeout(()=>W(Error("session open timeout")),TQ);C.onopen=()=>{clearTimeout(N),z("vm_hands.ws_open",{}),K()},C.onerror=()=>{clearTimeout(N),W(Error("session socket error"))}});let Z=await d(["challenge"],5000);z("vm_hands.challenge",{});let Y=[],X=null,G;if($){i(await J.agent.helloFrame(Z.challenge,Q.connection));let K=await d(["ready"],1e4);if(typeof K.vm_hands_connection==="string")Q.connection=K.vm_hands_connection;if(G={device_id:$,...K.cadence?{cadence:K.cadence}:{}},typeof K.vm_hands_probe_script==="string"){if(X=K.vm_hands_probe_script,a=!0,J.agent.phase==="registered"&&!Q.turns.size)Q.attest="pending"}Q.served=!0,z("vm_hands.reconnected",{device_id:$});let W=Array.isArray(K.vm_hands_binds)?K.vm_hands_binds:K.vm_hands_bind?[K.vm_hands_bind]:[];for(let[N,j]of[...Q.turns]){if(W.some((A)=>A&&A.operation_id===j.claim.operation_id&&A.attempt_id===j.claim.attempt_id)){Y.push(j),z("vm_hands.bound_resumed",{operation_id:j.claim.operation_id});continue}Q.turns.delete(N),J.onTurn?.(N,null),ZJ(j);let S=await o(Q,J.agent,N).catch((A)=>n(A,j,"vm_hands_bind_lost"));if(S)Q.receipts.push({turn:j,failure:"vm_hands_bind_lost",unbound:S});z("vm_hands.bound_dropped",{reason:"not_named_on_reconnect"})}}else{i(await J.agent.registerFrame(Z.challenge)),z("vm_hands.register_sent",{});let K=await Promise.race([d(["registered","register_refused"],1e4),g.then(()=>{throw new F(T==="register_failed"?"vm_hands_register_failed":"vm_hands_register_closed","session closed before the register was answered")})]);if(K.t==="register_refused")throw new F(K.code,"register refused");J.agent.registered();let W=K;if(G=W,Q.deviceId=W.device_id,typeof W.vm_hands_connection==="string")Q.connection=W.vm_hands_connection;if(typeof W.vm_hands_probe_script==="string"){if(X=W.vm_hands_probe_script,a=!0,J.agent.phase==="registered"&&!Q.turns.size)Q.attest="pending"}Q.served=!0,z("vm_hands.registered",{device_id:G.device_id})}let P=async()=>{let K=await H("/heartbeat",await J.heartbeat());if(K.status>=300)throw Error(`heartbeat ${K.status}`)};await P();let B=G.cadence?.presence_interval_ms??30000;if($J=setInterval(()=>{P().catch(()=>C.close())},B),J.onHeartbeatNow?.(()=>{P().catch(()=>C.close())}),Q.request=H,g.then(()=>{if(Q.request===H)Q.request=null}),X&&Q.attest!=="accepted"&&J.agent.phase==="registered"&&!Q.turns.size)oJ(X,Z.challenge);let _=(K,W)=>{r.set(K,W().catch(async(N)=>{if(await LJ(N,K),N instanceof v)C.close();else await t().catch(()=>{return})}).finally(()=>{r.delete(K)}))};Q.flushReceipts=BJ;try{await t();for(let K of Y)K.flush=()=>_J(K),K.flush(),_(K.claim.attempt_id,()=>AJ(K));while(!J.signal.aborted&&C.readyState===WebSocket.OPEN){let K=await H("/operations/claim",{wait_ms:Math.min(G.cadence?.claim_wait_ms??kJ,kJ)});if(K.status===204||!K.json)continue;if(K.status>=300)throw Error(`claim ${K.status}`);let W=K.json;if(W.capability==="hands.connect"){if(r.has(W.attempt_id)){h({claim:W,eventSeq:0}).complete("failed",{error_code:"vm_hands_busy"}).catch(()=>{return});continue}_(W.attempt_id,()=>dJ(W))}else sJ(W).catch(()=>{return})}}catch(K){await LJ(K,null)}}finally{if($J)clearInterval($J);J.signal.removeEventListener("abort",UJ);for(let Z of Q.turns.values())Z.flush=null;if(Q.flushReceipts===BJ)Q.flushReceipts=null;C.close(),await g,await Promise.all([...r.values()]);for(let Z of J.agent.liveBindIds){if(Q.turns.has(Z))continue;let Y=s.get(Z),X=Y?{...Y,eventSeq:Y.eventSeq+1}:null,G=await o(Q,J.agent,Z).catch((P)=>X?n(P,X,"vm_hands_bind_lost"):null);if(G&&X)Q.receipts.push({turn:X,failure:"vm_hands_bind_lost",unbound:G});z("vm_hands.bound_dropped",{reason:"bound_after_loss"})}for(let Z of XJ)Z.abort()}return{closeCode:M,closeReason:T};async function LJ(Z,Y){if(Z instanceof v){if(!zJ&&Q.turns.size)Q.lostAt=Date.now();zJ=!0}else{let X=Y!==null?[Y]:[...new Set([...Q.turns.keys(),...J.agent.liveBindIds])];if(Y===null)zJ=!0;for(let G of X){let P=Q.turns.get(G);if(Q.turns.delete(G),P)ZJ(P),J.onTurn?.(G,null);if(J.agent.liveBindIds.includes(G)){let B=s.get(G)??P,_=B?{...B,eventSeq:B.eventSeq+1}:null,K=await o(Q,J.agent,G).catch((W)=>_?n(W,_,"vm_hands_bind_lost"):null);if(K&&_)Q.receipts.push({turn:_,failure:"vm_hands_bind_lost",unbound:K})}}}z("vm_hands.session_lost",{error:Z instanceof Error?Z.message:String(Z),bound_kept:Q.turns.size})}function h(Z,Y=H){let X=Y,G=Z.claim,P={attempt_id:G.attempt_id,attempt_token:G.attempt_token},B=encodeURIComponent(G.operation_id);return{fence:P,op:B,complete:(K,W={})=>X(`/operations/${B}/complete`,{...P,status:K,...W}),emit:(K,W)=>{let N=(Z.chain??Promise.resolve()).catch(()=>{return}).then(()=>_(K,W));return Z.chain=N,N}};async function _(K,W){let N=Z.eventSeq,j=(I)=>X(`/operations/${B}/events`,{...P,event_seq_start:I,events:[{kind:K,payload:{sequence:I,capability:String(G.capability??"hands.connect"),data:W}}]}),S=N,A=await j(S),V=A.status===409?A.json?.expected_event_seq:void 0;if(typeof V==="number"&&V===N+1)A={status:200,json:{duplicate:!0}};else if(typeof V==="number"&&V>=0&&V!==N)S=V,A=await j(S);if(A.status<300)Z.eventSeq=S+1;return A}}function uJ(Z){return(Y,X)=>new Promise((G,P)=>{if(Q.turns.get(Z.claim.attempt_id)!==Z){P(Error("vm_hands_attempt_ended"));return}if(Z.outbox??=[],Z.outbox.length>=OQ){P(Error("vm_hands_outbox_full"));return}Z.outbox.push({kind:Y,data:X,resolve:G,reject:P}),Z.flush?.()})}function _J(Z){if(YJ.has(Z))return;YJ.add(Z),(async()=>{try{while(Z.outbox?.length&&Q.turns.get(Z.claim.attempt_id)===Z&&C.readyState===WebSocket.OPEN){let Y=Z.outbox[0],X;try{X=await h(Z).emit(Y.kind,Y.data)}catch(G){if(G instanceof v)return;X={status:500}}if(Z.outbox.shift(),X.status<300)Y.resolve();else Y.reject(Error(`${Y.kind} refused ${X.status}`))}}finally{YJ.delete(Z)}})()}async function oJ(Z,Y){try{let X=await J.agent.attestFrame(Z,Y);if(C.readyState!==WebSocket.OPEN)return;i(X);let G=await d(["attested","attest_refused"],15000);Q.attest=G.t==="attested"?"accepted":"refused";for(let P of Q.attestWaiters.splice(0))P(Q.attest==="accepted");if(z("vm_hands.attest",{result:Q.attest,exit_code:X.exit_code,...G.t==="attest_refused"?{code:String(G.code??"")}:{}}),Q.attest==="refused")C.close(4401,"attest_refused")}catch(X){z("vm_hands.attest_failed",{code:X instanceof F?X.code:"probe_error"});for(let G of Q.attestWaiters.splice(0))G(!1);if(Q.attest!=="accepted")C.close(4000,"attest_unanswered")}}async function dJ(Z){let Y=a&&Q.attest==="pending",X=Z.vm_hands_attest,G=X;if(Q.attest==="refused"){z("vm_hands.claim_attest_refused",{said:typeof X==="string"?X.slice(0,16):typeof X,local:Q.attest}),await h({claim:Z,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}if(G==="accepted"){if(!Y&&Q.attest!=="accepted"){Q.attest="accepted";for(let E of Q.attestWaiters.splice(0))E(!0)}}else if(G!=="pending"||!Y&&Q.attest!=="accepted"){z("vm_hands.claim_attest_refused",{said:typeof X==="string"?X.slice(0,16):typeof X,local:Q.attest}),await h({claim:Z,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}if(Q.attest!=="accepted"){let E=Date.parse(Z.lease_until)-Date.now()-5000,x=Math.max(0,Math.min(QJ,Number.isFinite(E)?E:QJ));if(!await new Promise((f)=>{let WJ=setTimeout(()=>f(!1),x);Q.attestWaiters.push((KJ)=>{clearTimeout(WJ),f(KJ)})})){await h({claim:Z,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}}let P={claim:Z,eventSeq:0},{complete:B,emit:_}=h(P),K;try{if(Z.capability!=="hands.connect")throw new F("vm_hands_bind_invalid","not hands.connect");K=!CJ(Z)}catch(E){z("vm_hands.bind_refused",{code:E instanceof F?E.code:"unexpected"}),await B("failed",{error_code:E instanceof F?E.code:"vm_hands_bind_invalid"});return}let W,N=null,j=!1;Q.bindsStarting++;try{let E=await MQ(Q);if(E)z("vm_hands.person_terminals_closed",{count:E});let x=VJ(Z),q=J.agent.bind(x);if(x.workspace_deferred)j=!0,N=iJ(P,()=>j);W=await q}catch(E){z("vm_hands.bind_refused",{code:E instanceof F?E.code:"unexpected"}),await B("failed",{error_code:E instanceof F?E.code:"vm_hands_bind_failed"});return}finally{j=!1,Q.bindsStarting--}let S=N?await N:-1,A={...W.ready_data??J.readyData({launchId:W.launch_id,claim:Z})};if(K)delete A.environment_installed;let V=!K&&W.snapshot_revision!==null&&W.snapshot_id!==null?{environment_installed:{snapshot_id:W.snapshot_id,installed_revision:W.snapshot_revision}}:{};s.set(Z.attempt_id,{claim:Z,launchId:W.launch_id,readyData:A,eventSeq:P.eventSeq,ackSeq:-1});let I={...A,...V,vm_hands:{layout:W.layout,policy_digest:W.policy_digest,launch_id:W.launch_id}},m=Date.now()+_Q,k=1,R=await _("hands.ready",I);while(AQ(R.status)&&!J.signal.aborted){let E=cJ(k);if(Date.now()+E>=m)break;await new Promise((x)=>setTimeout(x,E)),k++,R=await _("hands.ready",I)}if(k>1)z("vm_hands.ready_retried",{attempts:k,status_class:`${Math.floor(R.status/100)}xx`});if(s.delete(Z.attempt_id),R.status>=300){await lJ(Q,Z.attempt_id),await J.agent.boundRefused(Z.attempt_id),await B("failed",{error_code:gJ(R.json?.error,"vm_hands_probe_failed")});return}let y={claim:Z,launchId:W.launch_id,readyData:A,eventSeq:P.eventSeq,ackSeq:S};Q.turns.set(Z.attempt_id,y),y.flush=()=>_J(y),J.onTurn?.(Z.attempt_id,uJ(y)),await AJ(y)}async function iJ(Z,Y){let{fence:X,op:G}=h(Z),P=Z.claim.attempt_id,B=-1;try{for(;;){let _=await H(`/operations/${G}/heartbeat`,{...X,control_ack_seq:B,wait_ms:NJ});if(!Y())return B;if(_.status>=300)return J.agent.abandonWorkspaceGrant(P),B;let K=(_.json?.controls??[]).slice().sort((W,N)=>W.seq-N.seq);for(let W of K){if(W.seq<=B)continue;if(B=W.seq,W.kind===fJ)return z("vm_hands.workspace_granted",{}),J.agent.grantWorkspace(P),B;return z("vm_hands.workspace_grant_abandoned",{control:/^[a-z][a-z0-9._-]{0,63}$/.test(W.kind)?W.kind:"other"}),J.agent.abandonWorkspaceGrant(P),B}}}catch{return J.agent.abandonWorkspaceGrant(P),B}}async function AJ(Z){let{fence:Y,op:X}=h(Z),G=null,P=null,B=J.agent.executorExited(Z.claim.attempt_id).then((_)=>{return P=_,null});J:for(;;){let _=await Promise.race([B,H(`/operations/${X}/heartbeat`,{...Y,control_ack_seq:Z.ackSeq,wait_ms:NJ})]);if(!_){G="vm_hands_executor_exited",z("vm_hands.executor_exited",{reason:P});break}if(_.status>=300)break;let K=(_.json?.controls??[]).slice().sort((W,N)=>W.seq-N.seq);for(let W of K){if(W.seq<=Z.ackSeq)continue;if(W.kind==="operation.cancel"||W.kind==="cancel"){Z.ackSeq=W.seq;break J}if(W.kind===yJ)try{await aJ(Z,W.payload??{})}catch(N){if(N instanceof v)throw N;G=N instanceof F?N.code:"environment_unavailable";let j=N&&typeof N==="object"&&"code"in N&&typeof N.code==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(N.code)?N.code:null;z("vm_hands.environment_refused",{code:G,cause:j});break J}Z.ackSeq=W.seq}}await rJ(Z,G)}async function OJ(Z,Y){let X=Date.now()+FQ;for(;;){let G=Q.request;if(G)try{return await G(Z,Y)}catch(P){if(!(P instanceof v))throw P}if(Date.now()>=X||J.signal.aborted)throw new v("kept operation has no live session");await new Promise((P)=>setTimeout(P,500))}}async function sJ(Z){let Y=Z,X={claim:Y,eventSeq:0},G=String(Z.capability??""),P=G===KQ,{complete:B,emit:_,fence:K,op:W}={...h(X,P?OJ:H)},N=Z.vm_hands_origin==="person"?"person":"model";if(!J.executeOp){await B("failed",{error_code:"vm_hands_op_unsupported"});return}if(Z.vm_hands_attest==="accepted"&&Q.attest==="pending"&&!(a&&Q.attest==="pending")){Q.attest="accepted";for(let E of Q.attestWaiters.splice(0))E(!0)}if(Q.attest!=="accepted"){let E=Date.parse(String(Z.lease_until??""))-Date.now()-5000,x=Q.attest==="refused"?0:Math.max(0,Math.min(QJ,Number.isFinite(E)?E:QJ));if(!(x>0&&await new Promise((f)=>{let WJ=setTimeout(()=>f(!1),x);Q.attestWaiters.push((KJ)=>{clearTimeout(WJ),f(KJ)})}))){await B("failed",{error_code:"vm_hands_unattested"});return}}let j=J.agent.bindIdForRun(Y.run_id);if(N==="model"&&j===null){await B("failed",{error_code:"vm_hands_not_bound"});return}let S=G==="pty.start"&&N==="person"&&!Z.authority;if(S&&(J.agent.liveBindIds.length>0||Q.bindsStarting>0)){await B("failed",{error_code:"vm_hands_bound"});return}if(vJ.has(G)&&!S&&J.agent.liveBindIds.length===0){await B("failed",{error_code:"vm_hands_not_bound"});return}if(N==="model"&&j||vJ.has(G)&&!S)J.agent.opServed();let A=new AbortController;if(!P)XJ.add(A);let V,I=new Promise((E)=>{V=E}),m={abort:A,settled:I};if(S)Q.personTerminals.add(m);if(N==="model"&&j&&G!=="preview.serve.v1"){let E=Q.modelOps.get(j)??new Set;E.add(m),Q.modelOps.set(j,E),await J.agent.environmentInstalled(j,PQ,A.signal)}let k=-1,R=!1,y=P?void 0:setInterval(()=>{H(`/operations/${W}/heartbeat`,{...K,control_ack_seq:k,wait_ms:0}).then((E)=>{if(E.status>=300){A.abort();return}let x=E.json?.controls??[];for(let q of x)if(k=Math.max(k,q.seq),q.kind==="operation.cancel"||q.kind==="cancel")A.abort()},()=>A.abort())},WQ);if(P)(async()=>{while(!R&&!A.signal.aborted){let E;try{E=await OJ(`/operations/${W}/heartbeat`,{...K,control_ack_seq:k,wait_ms:NJ})}catch{A.abort();return}if(R)return;if(E.status>=300){A.abort();return}let x=(E.json?.controls??[]).slice().sort((q,f)=>q.seq-f.seq);for(let q of x){if(q.seq<=k)continue;if(q.kind==="operation.cancel"||q.kind==="cancel")A.abort();else await J.controlOp?.({claim:Z,control:q}).catch(()=>!1);k=q.seq}}})();try{let E=await J.executeOp({kind:N,claim:Z,...N==="model"&&j?{bindId:j}:{},signal:A.signal,emit:async(q)=>{await _(q.kind,q.data??{})}}),x=await B(E.status,{...E.result?{result:E.result}:{},...E.error_code?{error_code:gJ(E.error_code,"vm_hands_op_failed")}:{}});J.opCompleted?.({claim:Z,status:E.status,acknowledged:x.status<300}),z("vm_hands.op",{capability:G,kind:N,status:E.status,code:E.error_code??null,...x.status>=300?{complete_status:x.status,complete_error:String(x.json?.error??"").slice(0,64)}:{}})}finally{if(R=!0,clearInterval(y),XJ.delete(A),j)Q.modelOps.get(j)?.delete(m);Q.personTerminals.delete(m),V()}}async function rJ(Z,Y){let X=Z.claim.attempt_id;if(Q.turns.get(X)===Z)Q.turns.delete(X);J.onTurn?.(X,null),ZJ(Z);let G=await o(Q,J.agent,X).catch((P)=>n(P,Z,Y));if(!G)return;Q.receipts.push({turn:Z,failure:Y,unbound:G}),await t()}function n(Z,Y,X){let G=pJ(Z);return z("vm_hands.unbind_unverified",{operation_id:Y.claim.operation_id,code:G,attempt:0}),h(Y).emit(mJ,{code:G}).catch(()=>{return}),jQ(Q,J.agent,{turn:Y,failure:X},J.signal,z),null}function t(){return GJ=GJ.then(jJ,jJ),GJ}async function jJ(){while(Q.receipts.length){let{turn:Z,failure:Y,unbound:X}=Q.receipts[0],{complete:G,emit:P}=h(Z);try{if(await P("hands.stopped",{...Z.readyData,reason_code:Y?"failed":"cancelled",killed_verified:X.killed_verified,shredded:X.shredded,...X.srt_fallbacks?{vm_hands_srt_fallbacks:X.srt_fallbacks}:{}}),Y)await G("failed",{error_code:Y});else await G("cancelled",{error_code:"driver_stopped"})}catch(B){if(B instanceof v)return}Q.receipts.shift()}}async function aJ(Z,Y){let{fence:X,op:G}=h(Z),P=Y.snapshot_id;if(Y.version!==1||typeof P!=="string"||Object.keys(Y).length!==2)throw new F("vm_hands_env_invalid","invalid environment delivery");let B=await H(`/operations/${G}/environment`,{...X,snapshot_id:P}),_=B.json?.environment_sealed;if(B.status!==200||!_||B.json?.payload!==void 0)throw new F("vm_hands_env_invalid","environment not delivered sealed");let K=await J.agent.deliverEnvironment({attemptId:Z.claim.attempt_id,snapshotId:P,deviceId:Q.deviceId??"",sealed:_});if((await H(`/operations/${G}/environment-ack`,{...X,...K})).status>=300)throw new F("vm_hands_env_ack_refused","environment ack refused")}}
|
|
5
|
-
export{HQ as Ea,$Q as Fa,IQ as Ga};
|