@reason-machines/cli-linux-x64 0.2.561 → 0.2.565

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/bin/reason +2 -2
  2. package/bin/vm-hands/agent-network-mnv1fm1c.js +2 -0
  3. package/bin/vm-hands/api-credentials-082cnpn9.js +2 -0
  4. package/bin/vm-hands/api-sq672f51.js +2 -0
  5. package/bin/vm-hands/{ask-relay-xx0rzpch.js → ask-relay-v5btnjvb.js} +2 -2
  6. package/bin/vm-hands/connect-cli-rxb3qtra.js +2 -0
  7. package/bin/vm-hands/credentials-sk4sag42.js +2 -0
  8. package/bin/vm-hands/custom-endpoint-device-3jscber1.js +2 -0
  9. package/bin/vm-hands/desktop-account-xma0330a.js +2 -0
  10. package/bin/vm-hands/desktop-components-099xyxmz.js +2 -0
  11. package/bin/vm-hands/desktop-delegate-tch2qzx0.js +2 -0
  12. package/bin/vm-hands/device-workspace-4bj43nxq.js +2 -0
  13. package/bin/vm-hands/{fsevents-vxv56sp5.js → fsevents-ezcg3e40.js} +1 -1
  14. package/bin/vm-hands/hands-worker-source-8pe7yv0m.js +2 -0
  15. package/bin/vm-hands/{index-03p9c17x.js → index-w92ys6ra.js} +16 -16
  16. package/bin/vm-hands/install-receipt-68xxg7hn.js +2 -0
  17. package/bin/vm-hands/local-automation-7pjd5nc1.js +2 -0
  18. package/bin/vm-hands/local-capabilities-ha0ey4zh.js +2 -0
  19. package/bin/vm-hands/local-desktop-users-jpf0resr.js +2 -0
  20. package/bin/vm-hands/local-display-mac-h5yz0ydd.js +2 -0
  21. package/bin/vm-hands/local-display-session-0mkswxgk.js +2 -0
  22. package/bin/vm-hands/local-display-video-c3fk87c5.js +2 -0
  23. package/bin/vm-hands/local-managed-process-ahr2jync.js +2 -0
  24. package/bin/vm-hands/local-pty-session-tqn2xmph.js +2 -0
  25. package/bin/vm-hands/managed-runtime-shzb3tr3.js +2 -0
  26. package/bin/vm-hands/network-auto-update-3m94436w.js +3 -0
  27. package/bin/vm-hands/network-contract-nkwcf4r9.js +2 -0
  28. package/bin/vm-hands/{network-sign-in-61gmpmaa.js → network-sign-in-xm79s170.js} +2 -2
  29. package/bin/vm-hands/package-9w0mmxb5.js +2 -0
  30. package/bin/vm-hands/permissions-scffy1px.js +2 -0
  31. package/bin/vm-hands/reason-hands-protocol-pck5har9.js +2 -0
  32. package/bin/vm-hands/serve-service-grp91ybk.js +2 -0
  33. package/bin/vm-hands/{status-khqk4cjw.js → status-89999mdn.js} +7 -7
  34. package/bin/vm-hands/version-wyshazh7.js +2 -0
  35. package/bin/vm-hands/{vm-hands-entry-lite-zawytz09.js → vm-hands-entry-lite-12ck5swp.js} +2 -2
  36. package/bin/vm-hands/{vm-hands-entry-lite-j10cw3d9.js → vm-hands-entry-lite-13nx02p7.js} +7 -7
  37. package/bin/vm-hands/{vm-hands-entry-lite-vdv4nm5f.js → vm-hands-entry-lite-1b21avcs.js} +2 -2
  38. package/bin/vm-hands/vm-hands-entry-lite-1eyg750p.js +48 -0
  39. package/bin/vm-hands/{vm-hands-entry-lite-2dak7e1h.js → vm-hands-entry-lite-1xhpn3hw.js} +3 -5
  40. package/bin/vm-hands/{vm-hands-entry-lite-ms99mzp0.js → vm-hands-entry-lite-284z7ct8.js} +3 -3
  41. package/bin/vm-hands/{vm-hands-entry-lite-a7bf7xr7.js → vm-hands-entry-lite-2qfmabqn.js} +3 -3
  42. package/bin/vm-hands/{vm-hands-entry-lite-q9s1e2y1.js → vm-hands-entry-lite-33at6g06.js} +2 -2
  43. package/bin/vm-hands/{vm-hands-entry-lite-jgk5z8zc.js → vm-hands-entry-lite-34b4tws6.js} +6 -6
  44. package/bin/vm-hands/{vm-hands-entry-lite-e3fn8ys2.js → vm-hands-entry-lite-3gc2bn5a.js} +2 -2
  45. package/bin/vm-hands/{vm-hands-entry-lite-hxfxs7r9.js → vm-hands-entry-lite-3q2ng4e9.js} +2 -2
  46. package/bin/vm-hands/vm-hands-entry-lite-432khjd5.js +150 -0
  47. package/bin/vm-hands/vm-hands-entry-lite-6vnjgy77.js +81 -0
  48. package/bin/vm-hands/{vm-hands-entry-lite-ht6hzkgj.js → vm-hands-entry-lite-7r27208j.js} +2 -2
  49. package/bin/vm-hands/{vm-hands-entry-lite-hs6sdn60.js → vm-hands-entry-lite-88dxn9b5.js} +2 -2
  50. package/bin/vm-hands/vm-hands-entry-lite-997y1m1r.js +3 -0
  51. package/bin/vm-hands/{vm-hands-entry-lite-zh6ncdjn.js → vm-hands-entry-lite-a3gq377t.js} +2 -2
  52. package/bin/vm-hands/{vm-hands-entry-lite-m1we91g4.js → vm-hands-entry-lite-af45ma9p.js} +10 -10
  53. package/bin/vm-hands/{vm-hands-entry-lite-0wb1n769.js → vm-hands-entry-lite-b1vanmtv.js} +5 -5
  54. package/bin/vm-hands/{vm-hands-entry-lite-5y4phfv1.js → vm-hands-entry-lite-bsk184m7.js} +3 -3
  55. package/bin/vm-hands/{vm-hands-entry-lite-q9djb28r.js → vm-hands-entry-lite-cc8hwgxc.js} +3 -3
  56. package/bin/vm-hands/vm-hands-entry-lite-chq0qx9f.js +12 -0
  57. package/bin/vm-hands/{vm-hands-entry-lite-84mc1f7h.js → vm-hands-entry-lite-cmmb9k3g.js} +2 -2
  58. package/bin/vm-hands/{vm-hands-entry-lite-gxpw14jv.js → vm-hands-entry-lite-dy204qh4.js} +7 -7
  59. package/bin/vm-hands/{vm-hands-entry-lite-ptycjmkc.js → vm-hands-entry-lite-fccn6s4j.js} +2 -2
  60. package/bin/vm-hands/{vm-hands-entry-lite-qf990rxw.js → vm-hands-entry-lite-fn2805g8.js} +2 -2
  61. package/bin/vm-hands/{vm-hands-entry-lite-71ebge0c.js → vm-hands-entry-lite-fxptf351.js} +5 -5
  62. package/bin/vm-hands/{vm-hands-entry-lite-vkhacd00.js → vm-hands-entry-lite-gcqqnnze.js} +19 -19
  63. package/bin/vm-hands/{vm-hands-entry-lite-57ajjwmh.js → vm-hands-entry-lite-gxf2r5en.js} +1 -1
  64. package/bin/vm-hands/{vm-hands-entry-lite-hjjbjpd7.js → vm-hands-entry-lite-jj7873n8.js} +3 -3
  65. package/bin/vm-hands/{vm-hands-entry-lite-9g52kxyj.js → vm-hands-entry-lite-kbnxk71q.js} +2 -2
  66. package/bin/vm-hands/vm-hands-entry-lite-ncyrz48z.js +4 -0
  67. package/bin/vm-hands/{vm-hands-entry-lite-y3nz20wb.js → vm-hands-entry-lite-ngn4tafr.js} +105 -105
  68. package/bin/vm-hands/{vm-hands-entry-lite-52qz0n30.js → vm-hands-entry-lite-ngry8nkq.js} +4 -4
  69. package/bin/vm-hands/{vm-hands-entry-lite-8xv6c0rm.js → vm-hands-entry-lite-pg7nnyc6.js} +2 -2
  70. package/bin/vm-hands/{vm-hands-entry-lite-h7nk2848.js → vm-hands-entry-lite-pt19vacn.js} +42 -42
  71. package/bin/vm-hands/{vm-hands-entry-lite-tcmye5ny.js → vm-hands-entry-lite-q62g6sx0.js} +2 -2
  72. package/bin/vm-hands/{vm-hands-entry-lite-v4hr9x9h.js → vm-hands-entry-lite-qjrgvdbj.js} +34 -34
  73. package/bin/vm-hands/{vm-hands-entry-lite-bj3w2ven.js → vm-hands-entry-lite-rqfhfp09.js} +2 -2
  74. package/bin/vm-hands/{vm-hands-entry-lite-krpqqx12.js → vm-hands-entry-lite-rxydyqke.js} +2 -2
  75. package/bin/vm-hands/{vm-hands-entry-lite-weqam12f.js → vm-hands-entry-lite-s93f3pbv.js} +3 -3
  76. package/bin/vm-hands/{vm-hands-entry-lite-z0ht62s4.js → vm-hands-entry-lite-sh4mqy93.js} +3 -3
  77. package/bin/vm-hands/{vm-hands-entry-lite-xvccy3z4.js → vm-hands-entry-lite-sz7z1qby.js} +2 -2
  78. package/bin/vm-hands/{vm-hands-entry-lite-wcgm41jq.js → vm-hands-entry-lite-t43bz0ey.js} +7 -7
  79. package/bin/vm-hands/{vm-hands-entry-lite-6jxshhps.js → vm-hands-entry-lite-t86kt9jz.js} +6 -6
  80. package/bin/vm-hands/{vm-hands-entry-lite-7pfhwxn5.js → vm-hands-entry-lite-tnj3483k.js} +1 -1
  81. package/bin/vm-hands/vm-hands-entry-lite-wnqqjsew.js +3 -0
  82. package/bin/vm-hands/{vm-hands-entry-lite-pxtycfdv.js → vm-hands-entry-lite-xfak34av.js} +4 -4
  83. package/bin/vm-hands/{vm-hands-entry-lite-sy7dcccg.js → vm-hands-entry-lite-y0jtj8zz.js} +1 -1
  84. package/bin/vm-hands/{vm-hands-entry-lite-yvws5zpx.js → vm-hands-entry-lite-yg4dk99m.js} +1 -1
  85. package/bin/vm-hands/{vm-hands-entry-lite-2rgf8866.js → vm-hands-entry-lite-z65xva21.js} +2 -2
  86. package/bin/vm-hands/{vm-hands-entry-lite-jpvmkce5.js → vm-hands-entry-lite-zp7chzcc.js} +1 -1
  87. package/bin/vm-hands/{vm-hands-entry-lite-k5ytpgzz.js → vm-hands-entry-lite-zpvr7wc6.js} +19 -19
  88. package/bin/vm-hands/vm-hands-entry-lite.js +2 -2
  89. package/bin/vm-hands/vm-hands-executor-kyb5t371.js +12 -0
  90. package/bin/vm-hands/vm-hands-op-runner-gkt79hcp.js +2 -0
  91. package/bin/vm-hands/{vm-hands-runtime-1qxf96z7.js → vm-hands-runtime-tdr6j55n.js} +3 -3
  92. package/bin/vm-hands/worker-preview-readiness-h96yr4wf.js +2 -0
  93. package/bin/vm-hands/worker-sandbox-6kkhvryn.js +2 -0
  94. package/package.json +1 -1
  95. package/bin/vm-hands/agent-network-kk36zca7.js +0 -2
  96. package/bin/vm-hands/api-credentials-mtfdk175.js +0 -2
  97. package/bin/vm-hands/api-w6w7vfp3.js +0 -2
  98. package/bin/vm-hands/connect-cli-dmwph620.js +0 -2
  99. package/bin/vm-hands/credentials-s7ps7y6s.js +0 -2
  100. package/bin/vm-hands/custom-endpoint-device-3xnrp33e.js +0 -2
  101. package/bin/vm-hands/desktop-account-eg8thn79.js +0 -2
  102. package/bin/vm-hands/device-workspace-h5rsecq8.js +0 -2
  103. package/bin/vm-hands/hands-worker-source-vk664w8p.js +0 -2
  104. package/bin/vm-hands/install-receipt-j04hdw1k.js +0 -2
  105. package/bin/vm-hands/local-automation-vvt9d9xb.js +0 -2
  106. package/bin/vm-hands/local-capabilities-pwv76ns5.js +0 -2
  107. package/bin/vm-hands/local-desktop-users-sq4trh07.js +0 -2
  108. package/bin/vm-hands/local-display-mac-yxcxvg2z.js +0 -2
  109. package/bin/vm-hands/local-display-session-axh9mfdk.js +0 -2
  110. package/bin/vm-hands/local-display-video-pxhztqk7.js +0 -2
  111. package/bin/vm-hands/local-managed-process-4mgqn7tg.js +0 -2
  112. package/bin/vm-hands/local-pty-session-edd8ttf9.js +0 -2
  113. package/bin/vm-hands/managed-runtime-pcagtyfz.js +0 -2
  114. package/bin/vm-hands/network-auto-update-wkzb91qz.js +0 -3
  115. package/bin/vm-hands/network-contract-8mxtma3w.js +0 -2
  116. package/bin/vm-hands/package-vwvzjtn0.js +0 -2
  117. package/bin/vm-hands/permissions-348prrcx.js +0 -2
  118. package/bin/vm-hands/reason-hands-protocol-1nkpw1v3.js +0 -2
  119. package/bin/vm-hands/serve-service-3dkyznay.js +0 -2
  120. package/bin/vm-hands/version-c1hen0wn.js +0 -2
  121. package/bin/vm-hands/vm-hands-entry-lite-9yfmkd1f.js +0 -3
  122. package/bin/vm-hands/vm-hands-entry-lite-ab1pq3xg.js +0 -3
  123. package/bin/vm-hands/vm-hands-entry-lite-hn9pq7zj.js +0 -127
  124. package/bin/vm-hands/vm-hands-entry-lite-nn6zcvmp.js +0 -3
  125. package/bin/vm-hands/vm-hands-entry-lite-z213y4pj.js +0 -150
  126. package/bin/vm-hands/vm-hands-executor-csdtg7kj.js +0 -12
  127. package/bin/vm-hands/vm-hands-op-runner-z7tsd84c.js +0 -2
  128. package/bin/vm-hands/worker-preview-readiness-06tygyjs.js +0 -2
  129. package/bin/vm-hands/worker-sandbox-e1cpkzfz.js +0 -2
@@ -1,127 +0,0 @@
1
- // @bun
2
- import{O,Rn,ns,Xt,is,os}from"./vm-hands-entry-lite-j10cw3d9.js";import{ls}from"./vm-hands-entry-lite-6jxshhps.js";import{Ko}from"./vm-hands-entry-lite-q9djb28r.js";import{s}from"./vm-hands-entry-lite-zawytz09.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{execFile as _s,spawn as qe}from"child_process";import{existsSync as ks}from"fs";import{connect as vs}from"net";function gn(){let e=new Set,t=null,n=(i)=>({holder:t?.viewer??null,you:t===i,same_user:Boolean(t?.viewer&&i.viewer&&t.viewer.user_id===i.viewer.user_id)}),o=()=>{for(let i of e)i.notify(n(i))};return{join(i){return e.add(i),i.notify(n(i)),()=>{if(!e.delete(i))return;if(t!==i)return;t=null,o()}},claim(i){if(t===i||!e.has(i))return;t=i,o()}}}var ut=gn();import{createHash as vt}from"crypto";import{once as Pn}from"events";import{createWriteStream as Cn,existsSync as Mn,mkdirSync as Tn,mkdtempSync as hr,readFileSync as de,readdirSync as br,renameSync as On,realpathSync as An,rmSync as $n,statSync as Ue,writeFileSync as Ln}from"fs";import{delimiter as wr,dirname as Be,join as y}from"path";import{finished as Nn}from"stream/promises";var Gt="omljlfpmafedpplnpkkahegadhkimdje",lc="https://chromewebstore.google.com/detail/reason/omljlfpmafedpplnpkkahegadhkimdje";var A={ocu:{repository:"https://github.com/iFurySt/open-codex-computer-use.git",revision:"386a260d1ab8b690adbbb27f7471595cf0c2b752",version:"0.3.5"},obu:{repository:"https://github.com/iFurySt/open-browser-use.git",revision:"ac015846df75928fbcf0f3a0f3ba3a210ce1a507",version:"0.1.42"}},F={version:"155.0.8059.84",macArm64Sha256:"13b9e98ce56f5ce18e100a009f455c9285f399e7c9dc8a76fdf2f3a9755bb5f2",linux64Sha256:"cf0f049892dea22e6a6db26d47ed0d7776b7158edcbec4634086633df8bafcbc",win64Sha256:"507f2a031441d10c62b5e3d4e863f09ac1198a571c1419976cbd8387f639afde"};var J={ocu:{url:`https://registry.npmjs.org/open-computer-use/-/open-computer-use-${A.ocu.version}.tgz`,sha256:"7c16a87c8cd357787b02c0ebd040dd5f93880c1fb51c1901caa2e0c05d063130",size_bytes:5844280},obu:{url:`https://registry.npmjs.org/open-browser-use/-/open-browser-use-${A.obu.version}.tgz`,sha256:"9386d8ce0a147b3f55e1807b68edf736836378807541c457c9b5f6ca2cabaa4e",size_bytes:21372018},extension:{url:`https://github.com/iFurySt/open-browser-use/releases/download/v${A.obu.version}/open-browser-use-chrome-extension-${A.obu.version}.zip`,sha256:"c9c07bec1175e12ea6985b0e7784a5ef01fd03f014b958224a1e17dcd838a241",size_bytes:31070}},le="pnbmoicbkopffjjgfgfglopechaiemkp";import{spawn as Te}from"child_process";import{createRequire as hn}from"module";import{join as bn}from"path";var xn=30000,_n=1048576;function Oe(){return process.env.SystemRoot??"C:\\Windows"}function kn(){return bn(Oe(),"System32","WindowsPowerShell","v1.0","powershell.exe")}var vn=String.raw`
3
- $ErrorActionPreference = "Stop"
4
- Add-Type -TypeDefinition @"
5
- using System;
6
- using System.Runtime.InteropServices;
7
- public static class ReasonInput {
8
- [StructLayout(LayoutKind.Sequential)] public struct MOUSEINPUT { public int dx; public int dy; public int mouseData; public uint dwFlags; public uint time; public IntPtr dwExtraInfo; }
9
- [StructLayout(LayoutKind.Sequential)] public struct KEYBDINPUT { public ushort wVk; public ushort wScan; public uint dwFlags; public uint time; public IntPtr dwExtraInfo; }
10
- [StructLayout(LayoutKind.Explicit)] public struct UNION { [FieldOffset(0)] public MOUSEINPUT mi; [FieldOffset(0)] public KEYBDINPUT ki; }
11
- [StructLayout(LayoutKind.Sequential)] public struct INPUT { public uint type; public UNION u; }
12
- [DllImport("user32.dll")] static extern uint SendInput(uint count, INPUT[] inputs, int size);
13
- [DllImport("user32.dll")] public static extern bool SetProcessDPIAware();
14
- [DllImport("user32.dll")] public static extern int GetSystemMetrics(int index);
15
- [DllImport("user32.dll")] static extern uint MapVirtualKey(uint code, uint type);
16
- [DllImport("user32.dll")] public static extern uint GetClipboardSequenceNumber();
17
- static void Send(INPUT input) { SendInput(1, new INPUT[] { input }, Marshal.SizeOf(typeof(INPUT))); }
18
- public static void Mouse(uint flags, int x, int y, int data) {
19
- INPUT input = new INPUT(); input.type = 0;
20
- input.u.mi.dx = x; input.u.mi.dy = y; input.u.mi.mouseData = data; input.u.mi.dwFlags = flags; Send(input);
21
- }
22
- public static void Key(ushort vk, ushort unit, uint flags) {
23
- INPUT input = new INPUT(); input.type = 1;
24
- input.u.ki.wVk = vk; input.u.ki.wScan = vk != 0 ? (ushort)MapVirtualKey(vk, 0) : unit; input.u.ki.dwFlags = flags; Send(input);
25
- }
26
- }
27
- "@
28
- [void][ReasonInput]::SetProcessDPIAware()
29
- $width = [ReasonInput]::GetSystemMetrics(0)
30
- $height = [ReasonInput]::GetSystemMetrics(1)
31
- $session = [Diagnostics.Process]::GetCurrentProcess().SessionId
32
- [Console]::Out.WriteLine('{"session":' + $session + ',"width":' + $width + ',"height":' + $height + '}')
33
- [Console]::Out.Flush()
34
- $mode = "__MODE__"
35
- if ($mode -eq "probe") { exit 0 }
36
- if ($mode -eq "clipboard") {
37
- # Only changes made during this pairing: never export the initial clipboard.
38
- $parent = Get-Process -Id __PARENT__
39
- $last = [ReasonInput]::GetClipboardSequenceNumber()
40
- while (-not $parent.HasExited) {
41
- Start-Sleep -Milliseconds 100
42
- $count = [ReasonInput]::GetClipboardSequenceNumber()
43
- if ($count -eq $last) { continue }
44
- $last = $count
45
- try { $text = Get-Clipboard -Raw } catch { continue }
46
- if (-not $text) { continue }
47
- $bytes = [Text.Encoding]::UTF8.GetBytes($text)
48
- if ($bytes.Length -gt __MAX_TEXT_BYTES__) { continue }
49
- [Console]::Out.WriteLine("c " + [Convert]::ToBase64String($bytes))
50
- [Console]::Out.Flush()
51
- }
52
- exit 0
53
- }
54
- $scaleX = 65535.0 / [Math]::Max(1, $width - 1)
55
- $scaleY = 65535.0 / [Math]::Max(1, $height - 1)
56
- while ($null -ne ($line = [Console]::In.ReadLine())) {
57
- $n = $line.Split(" ")
58
- try {
59
- switch ($n[0]) {
60
- "p" { [ReasonInput]::Mouse(0x8001, [int]([int]$n[1] * $scaleX), [int]([int]$n[2] * $scaleY), 0) }
61
- "b" { [ReasonInput]::Mouse([uint32]$n[1], 0, 0, [int]$n[2]) }
62
- "k" { [ReasonInput]::Key([uint16]$n[1], [uint16]$n[2], [uint32]$n[3]) }
63
- "c" { Set-Clipboard -Value ([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($n[1]))) }
64
- }
65
- } catch { [Console]::Error.WriteLine("input: $_") }
66
- }
67
- `;function Ae(e){let t=vn.replace("__MODE__",e).replace("__PARENT__",String(process.pid)).replace("__MAX_TEXT_BYTES__",String(O));return[kn(),["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",Buffer.from(t,"utf16le").toString("base64")]]}var Sn=["USERPROFILE","LOCALAPPDATA","APPDATA","TEMP","TMP","PSModuleAnalysisCachePath"];function $e(){let e=Sn.flatMap((t)=>process.env[t]?[[t,process.env[t]]]:[]);return{...Object.fromEntries(e),SystemRoot:Oe(),windir:Oe()}}function ht(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!=="object")return null;let n=t,o=(i,a)=>typeof i==="number"&&Number.isSafeInteger(i)&&i>=a;return o(n.session,0)&&o(n.width,1)&&o(n.height,1)?{session:n.session,width:n.width,height:n.height}:null}function bt(){return new Promise((e)=>{let t=Te(...Ae("probe"),{env:$e(),stdio:["ignore","pipe","ignore"],windowsHide:!0}),n="",o=setTimeout(()=>{t.kill("SIGKILL"),e(null)},xn);t.stdout.setEncoding("utf8").on("data",(i)=>{n+=i}),t.once("error",()=>{clearTimeout(o),e(null)}),t.once("close",()=>{clearTimeout(o),e(ht(n.split(/\r?\n/)[0]??""))})})}var Z;function yt(){if(Z!==void 0)return Z;if(process.platform!=="win32")return Z=!1;try{let e=hn(import.meta.url)("bun:ffi"),{symbols:t}=e.dlopen("kernel32.dll",{GetCurrentProcessId:{args:[],returns:e.FFIType.u32},ProcessIdToSessionId:{args:[e.FFIType.u32,e.FFIType.ptr],returns:e.FFIType.i32}}),n=new Uint32Array(1);return Z=t.ProcessIdToSessionId(t.GetCurrentProcessId(),n)!==0&&n[0]>0}catch{return Z=!1}}var lt=[{bit:1,down:2,up:4},{bit:2,down:32,up:64},{bit:4,down:8,up:16}],dt=2048,pt=4096,En=[[8,dt,120],[16,dt,-120],[32,pt,-120],[64,pt,120]],ft=1,Me=2,Dn=4,In=new Set([65505,65506]),mt=new Set([65507,65508,65511,65512,65513,65514,65027,65515,65516]),gt=new Map([[65505,[160,!1]],[65506,[161,!1]],[65507,[162,!1]],[65508,[163,!0]],[65511,[164,!1]],[65512,[165,!0]],[65513,[164,!1]],[65514,[165,!0]],[65027,[165,!0]],[65515,[91,!0]],[65516,[92,!0]],[65288,[8,!1]],[65289,[9,!1]],[65056,[9,!1]],[65293,[13,!1]],[65307,[27,!1]],[65535,[46,!0]],[65379,[45,!0]],[65360,[36,!0]],[65367,[35,!0]],[65365,[33,!0]],[65366,[34,!0]],[65361,[37,!0]],[65362,[38,!0]],[65363,[39,!0]],[65364,[40,!0]],[65383,[93,!0]],[65509,[20,!1]],[65299,[19,!1]],[65300,[145,!1]],[65377,[44,!0]],[65407,[144,!0]],[32,[32,!1]],[65421,[13,!0]],[65408,[32,!1]],[65450,[106,!1]],[65451,[107,!1]],[65452,[108,!1]],[65453,[109,!1]],[65454,[110,!1]],[65455,[111,!0]],[65429,[36,!1]],[65430,[37,!1]],[65431,[38,!1]],[65432,[39,!1]],[65433,[40,!1]],[65434,[33,!1]],[65435,[34,!1]],[65436,[35,!1]],[65438,[45,!1]],[65439,[46,!1]],...Array.from({length:10},(e,t)=>[65456+t,[96+t,!1]]),...Array.from({length:24},(e,t)=>[65470+t,[112+t,!1]])]);class wt{x=-1;y=-1;mask=0;held=new Set;pressed=new Set;pointer(e,t,n){let o=[];if(e!==this.x||t!==this.y)this.x=e,this.y=t,o.push(`p ${e} ${t}`);for(let i of lt){let a=(this.mask&i.bit)!==0,c=(n&i.bit)!==0;if(a!==c)o.push(`b ${c?i.down:i.up} 0`)}for(let[i,a,c]of En)if(!(this.mask&i)&&n&i)o.push(`b ${a} ${c}`);return this.mask=n,o}key(e,t){let n=e?0:Me;if(In.has(t)||mt.has(t))if(e)this.held.add(t);else this.held.delete(t);let o=gt.get(t);if(o)return[`k ${o[0]} 0 ${n|(o[1]?ft:0)}`];let i=t<256?t:(t&4278190080)===16777216?t&16777215:0,a=String.fromCharCode(i),c=[...this.held].some((w)=>mt.has(w)),p=/^[A-Za-z0-9]$/.test(a)?a.toUpperCase().charCodeAt(0):0;if(p&&(e?c:this.pressed.has(p))){if(e)this.pressed.add(p);else this.pressed.delete(p);return[`k ${p} 0 ${n}`]}if(i<33||i>=127&&i<160||i>65535||i>=55296&&i<57344)return[];return[`k 0 ${i} ${n|Dn}`]}release(){let e=lt.filter((t)=>this.mask&t.bit).map((t)=>`b ${t.up} 0`);for(let t of this.pressed)e.push(`k ${t} 0 ${Me}`);for(let t of this.held){let[n,o]=gt.get(t);e.push(`k ${n} 0 ${Me|(o?ft:0)}`)}return this.mask=0,this.pressed.clear(),this.held.clear(),e}}function xt(e){let t=Te(...Ae("input"),{env:$e(),stdio:["pipe","pipe","ignore"],windowsHide:!0}),n=new wt,o="",i=!1,a=null,c=()=>{if(a?.kill("SIGKILL"),t.exitCode!==null||t.signalCode!==null)return;t.stdin.end(n.release().map((f)=>`${f}
68
- `).join("")),setTimeout(()=>t.kill("SIGKILL"),2000).unref()},p=(f)=>{if(i)return;i=!0,c(),e.end(f)},w=(f)=>p({error:new r("display_unavailable",f)}),b=(f)=>{if(i||f.length===0)return;if(t.stdin.write(f.map((x)=>`${x}
69
- `).join("")),t.stdin.writableLength>_n)p({reason:"input_backpressure"})},h=()=>{a=Te(...Ae("clipboard"),{env:$e(),stdio:["ignore","pipe","ignore"],windowsHide:!0});let f="";a.stdout?.on("data",(x)=>{if(i)return;f+=x.toString("ascii");for(let m=f.indexOf(`
70
- `);m>=0;m=f.indexOf(`
71
- `)){let R=f.slice(0,m).replace(/\r$/,"");if(f=f.slice(m+1),!R.startsWith("c "))continue;let S=R.slice(2);if(S.length>Math.ceil(O/3)*4||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(S)){p({reason:"display_protocol"});return}let u=Buffer.from(S,"base64");if(u.byteLength<=O)e.clipboard(u.toString("utf8"));if(i)return}if(f.length>Math.ceil(O/3)*4+4)p({reason:"display_protocol"})}),a.once("error",()=>w("Reason could not watch this computer's desktop clipboard.")),a.once("exit",()=>{if(!i)w("Reason could not watch this computer's desktop clipboard.")})};return t.stdout.on("data",(f)=>{if(i||o===null)return;o+=f.toString("utf8");let x=o.indexOf(`
72
- `);if(x<0){if(o.length>4096)p({reason:"display_protocol"});return}let m=ht(o.slice(0,x).trim());if(o=null,!m)p({reason:"display_protocol"});else if(m.session===0)w("This Windows worker runs as a service, which has no desktop: run it in the signed-in desktop session.");else h(),e.ready({width:m.width,height:m.height})}),t.stdin.on("error",()=>{return}),t.once("error",()=>w("Reason could not start this computer's desktop input.")),t.once("exit",()=>{if(o!==null)w("Reason could not start this computer's desktop input.");else p({reason:"display_closed"})}),{pointer:(f,x,m)=>b(n.pointer(f,x,m)),key:(f,x)=>b(n.key(f,x)),clipboard:(f)=>b([`c ${Buffer.from(f,"utf8").toString("base64")}`]),close(){i=!0,c()}}}var Un=["none","standard","all"],ue="22.23.4",Bn={"linux-x64":"b8492284c76a54baf58d61668dd0e41ee0fc98adabf9503d30f05d08f55b4406","linux-arm64":"f7a1e486dbc8b286847815b477d4fb5e9fb963ed4489c3e1588853d685f589f9","darwin-arm64":"c9e1dbc748b33ed2d14f42445191ecaf14c56259c7a9a26d0042c49ec2b66428","win32-x64":"cbc74b5e0982c9dbb41525fd8fb5dcd32fbee237863f7829072f4639a1ce5f20","win32-arm64":"a8b8cd79cbbb3062435f449591d98dd63730bbbf30ce2d7cc3a6376c236cb111"},Le={"linux-x64":{ocu:"dist/linux/amd64/open-computer-use",obu:"native/linux-amd64/open-browser-use"},"linux-arm64":{ocu:"dist/linux/arm64/open-computer-use",obu:"native/linux-arm64/open-browser-use"},"darwin-arm64":{ocu:"dist/Open Computer Use.app/Contents/MacOS/OpenComputerUse",obu:"native/darwin-arm64/open-browser-use"},"win32-x64":{ocu:"dist/windows/amd64/open-computer-use.exe",obu:"native/windows-amd64/open-browser-use.exe"},"win32-arm64":{ocu:"dist/windows/arm64/open-computer-use.exe",obu:"native/windows-arm64/open-browser-use.exe"}},St="chrome-mac-arm64/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",Et="chrome-win64/chrome.exe",W={version:"9.0.2",url:"https://ffmpeg.martin-riedl.de/download/macos/arm64/1789931890_9.0.2/ffmpeg.zip",sha256:"c8ed4c4e6978a03c485edbfe4e0a5dc2380f8a30bba5150531b31b094492d924"},Hn={version:W.version,url:"https://ffmpeg.martin-riedl.de/download/macos/arm64/1789931890_9.0.2/ffprobe.zip",sha256:"fcbe839537485eaee7a7a8bc5cbc0f90d53617e80943e8a5b2e31cb851197ea6"},Ne={version:W.version,url:`https://github.com/GyanD/codexffmpeg/releases/download/${W.version}/ffmpeg-${W.version}-essentials_build.zip`,sha256:"60f467265b1e312373dbcd92200c2618a74850f98d3d078e94296bb3fa2047ba"},_t=`ffmpeg-${Ne.version}-essentials_build/bin`,z="com.ifuryst.open_browser_use.extension",Dt="com.reasonmachines.browser_use.extension",yn="/tmp/reason-browser-use",He=["tint2","picom","xterm","pcmanfm"],It=["fonts-droid-fallback"],Pt=["pulseaudio"],Ct=["tigervnc-standalone-server"],Fn=["xvfb","openbox","x11vnc","x11-utils","x11-xserver-utils","xdotool","dbus-x11","at-spi2-core","python3","python3-gi","gir1.2-atspi-2.0","gir1.2-gtk-3.0","fonts-dejavu-core",...It,"galculator","chromium","ffmpeg","tmux",...Pt,...Ct,...He],zn=new Set([...He,...It,...Pt,...Ct]),kt=Fn.filter((e)=>e!=="chromium"&&!zn.has(e)),jn=["Xvfb","openbox","x11vnc","xdotool","dbus-launch","python3","ffmpeg","tmux"],ce="/usr/bin/chromium",Vn=["/usr/local/bin","/usr/bin","/bin","/opt/homebrew/bin"];function Rt(e=process.platform,t=process.arch){let n=`${e}-${t}`;return n==="linux-x64"||n==="linux-arm64"||n==="darwin-arm64"||n==="win32-x64"||n==="win32-arm64"?n:null}function K(e){return e==="win32-x64"||e==="win32-arm64"}function Fe(e){return K(e)?`node-v${ue}-${e.replace("win32","win")}`:`node-v${ue}-${e}`}function pe(e){return{node:{version:ue,url:`https://nodejs.org/dist/v${ue}/${Fe(e)}${K(e)?".zip":".tar.gz"}`,sha256:Bn[e]},open_computer_use:{version:A.ocu.version,url:J.ocu.url,sha256:J.ocu.sha256},open_browser_use:{version:A.obu.version,url:J.obu.url,sha256:J.obu.sha256},...e==="darwin-arm64"?{chrome_for_testing:{version:F.version,url:`https://storage.googleapis.com/chrome-for-testing-public/${F.version}/mac-arm64/chrome-mac-arm64.zip`,sha256:F.macArm64Sha256}}:K(e)?{chrome_for_testing:{version:F.version,url:`https://storage.googleapis.com/chrome-for-testing-public/${F.version}/win64/chrome-win64.zip`,sha256:F.win64Sha256}}:{}}}function Gn(e){let t={extension:le};for(let[n,o]of Object.entries(pe(e)))t[n]=`${o.version}@${o.sha256}`;return t}function Mt(e){return y(e,".local","share","reason","desktop")}function wn(e,t=Ko()){let n=Mt(t),o=(f)=>y(n,f,pe(e)[f]?.version??""),i=o("open_computer_use"),a=o("open_browser_use"),c=e==="darwin-arm64",p=K(e),w=y(t,"Library","Application Support"),b=y(process.platform==="win32"&&process.env.LOCALAPPDATA?process.env.LOCALAPPDATA:y(t,"AppData","Local"),"OpenBrowserUse"),h=c?y(w,"Google","Chrome","NativeMessagingHosts",`${z}.json`):p?y(b,"NativeMessagingHosts",`${z}.json`):y(t,".config","google-chrome","NativeMessagingHosts",`${z}.json`);return{root:n,automation:y(Be(n),"automation"),receipt:y(n,"receipt.json"),minimal:je(t),node:p?y(o("node"),Fe(e),"node.exe"):y(o("node"),"bin","node"),ocuDir:i,ocu:y(i,Le[e].ocu),ocuApp:c?y(i,"dist","Open Computer Use.app"):null,obuDir:a,obu:y(a,"cli","open-browser-use.js"),nativeHost:y(a,Le[e].obu),extensionDir:c?y(w,"OpenBrowserUse","chrome-extension","release"):p?y(b,"chrome-extension","release"):y(t,".local","share","open-browser-use","chrome-extension","release"),setupNativeHostManifest:h,nativeHostManifests:c?[h,y(w,"Google","ChromeForTesting","NativeMessagingHosts",`${z}.json`)]:p?[h]:[y(t,".config","chromium","NativeMessagingHosts",`${z}.json`),y(t,".config","google-chrome-for-testing","NativeMessagingHosts",`${z}.json`)],browser:c?y(o("chrome_for_testing"),St):p?y(o("chrome_for_testing"),Et):ce,userChromeHost:c?y(n,"user-chrome","reason-browser-use"):null,userChromeRegistration:c?y(w,"Google","Chrome","NativeMessagingHosts",`${Dt}.json`):null,ffmpegDir:y(n,"ffmpeg"),ffmpeg:c?y(n,"ffmpeg",W.version,"ffmpeg"):p?y(n,"ffmpeg",Ne.version,_t,"ffmpeg.exe"):null,ffprobe:c?y(n,"ffprobe",Hn.version,"ffprobe"):p?y(n,"ffmpeg",Ne.version,_t,"ffprobe.exe"):null}}function Tt(e){try{let t=JSON.parse(de(e,"utf8"));if(typeof t!=="object"||t===null)return null;let n=t,o=n.pins;if(n.schema_version!==1||typeof n.platform!=="string"||typeof o!=="object"||o===null||!Object.values(o).every((i)=>typeof i==="string")||!Un.includes(n.permissions)||!Array.isArray(n.missing_system_packages)||!n.missing_system_packages.every((i)=>typeof i==="string")||typeof n.updated_at!=="string")return null;return{schema_version:1,platform:n.platform,pins:o,permissions:n.permissions,missing_system_packages:n.missing_system_packages,updated_at:n.updated_at}}catch{return null}}function Wn(e,t,n=384){Tn(Be(e),{recursive:!0,mode:448});let o=`${e}.pending.${process.pid}`;Ln(o,t,{mode:n}),On(o,e)}function L(e){try{return Ue(e).isFile()}catch{return!1}}function Ot(e){try{let t=Ue(e);return t.isFile()&&(t.mode&73)!==0}catch{return!1}}function Kn(e){try{return de(e,"utf8")}catch{return null}}function B(e){for(let t of Vn){let n=y(t,e);try{let o=Ue(n);if(o.isFile()&&(o.mode&73)!==0)return n}catch{}}return null}function Xn(e){try{let t=JSON.parse(de(y(e,"package.json"),"utf8"));return typeof t==="object"&&t!==null&&typeof t.version==="string"?t.version:null}catch{return null}}function qn(e,t,n){let o=pe(n)[e];if(!o)return!1;let i=K(n);if(e==="node")return L(i?y(t,Fe(n),"node.exe"):y(t,"bin","node"));if(e==="chrome_for_testing")return L(y(t,i?Et:St));let a=Le[n][e==="open_computer_use"?"ocu":"obu"];return Xn(t)===o.version&&L(y(t,a))&&(e==="open_computer_use"||L(y(t,"cli","open-browser-use.js")))}function Yn(e){return vt("sha256").update(Buffer.from(e,"base64")).digest("hex").slice(0,32).replace(/./g,(t)=>String.fromCharCode(97+Number.parseInt(t,16)))}function ze(e){try{let t=JSON.parse(de(e,"utf8"));return typeof t==="object"&&t!==null&&!Array.isArray(t)?t:null}catch{return null}}function Jn(e){let t=ze(y(e.extensionDir,"manifest.json"));return t!==null&&t.version===A.obu.version&&typeof t.key==="string"&&Yn(t.key)===le}function Zn(e,t){let n=e?.allowed_origins;return e!==null&&e.name===z&&Array.isArray(n)&&n.length===1&&n[0]===`chrome-extension://${le}/`&&(t===void 0||e.path===t)}function Qn(e){return Jn(e)&&L(e.nativeHost)&&e.nativeHostManifests.every((t)=>Zn(ze(t),e.nativeHost))}function es(e){return`#!/bin/sh
73
- # Reason's Chrome extension host (reason desktop install): Open Browser Use on Reason's socket directory.
74
- obu=${`'${e.replaceAll("'","'\\''")}'`}
75
- case "$1" in
76
- chrome-extension://*) exec "$obu" host --socket-dir ${yn} ;;
77
- mcp) shift; exec "$obu" mcp --socket-dir ${yn} "$@" ;;
78
- esac
79
- exec "$obu" "$@"
80
- `}function ts(e){let t=ze(e),n=t?.allowed_origins;return t!==null&&t.name===Dt&&t.type==="stdio"&&Array.isArray(n)&&n.includes(`chrome-extension://${Gt}/`)&&typeof t.path==="string"&&Ot(t.path)}function ss(e,t){if(!e.userChromeHost||!e.userChromeRegistration)return null;if(!t||Kn(e.userChromeHost)!==es(e.nativeHost)||!Ot(e.userChromeHost))return{code:"user_chrome_browser_use_missing"};return ts(e.userChromeRegistration)?{host:e.userChromeHost}:{code:"user_chrome_native_host_unregistered"}}var rs={display:["display","desktop_session","desktop_video"],computer:["display","desktop_session","system_packages","node","open_computer_use"],browser:["display","desktop_session","system_packages","node","open_computer_use","open_browser_use","browser_extension","browser","chrome_for_testing"]};function T(e={}){let t=e.platform===void 0?Rt():e.platform;if(!t)return null;let n=wn(t,e.home),o=Tt(n.receipt),i=Gn(t),a=o!==null&&o.platform===t&&JSON.stringify(Object.entries(o.pins).sort())===JSON.stringify(Object.entries(i).sort()),c=[],p=pe(t);for(let u of["node","open_computer_use","open_browser_use","chrome_for_testing"]){let _=p[u];if(!_)continue;let v=qn(u,y(n.root,u,_.version),t),E=o?.pins[u],N=v&&E===i[u]?"ready":E!==void 0&&E!==i[u]?"outdated":"missing";c.push({name:u,state:N,detail:_.version})}let w=o?.pins.extension===le&&Qn(n);c.push({name:"browser_extension",state:w?"ready":"missing",detail:le});let b=B("Xvfb"),h=B("x11vnc"),f=B("openbox");if(K(t))c.push(yt()?{name:"desktop_session",state:"ready",detail:"signed-in desktop session"}:{name:"desktop_session",state:"missing",detail:"run the worker in the signed-in desktop session, not as a service"}),c.push(n.ffmpeg&&L(n.ffmpeg)?{name:"desktop_video",state:"ready",detail:n.ffmpeg}:{name:"desktop_video",state:"missing",detail:"run `reason desktop install` for desktop video"});else if(t!=="darwin-arm64"){c.push(L(ce)?{name:"browser",state:"ready",detail:ce}:{name:"browser",state:"missing",detail:`non-snap Chromium at ${ce}`});let u=b!==null&&h!==null&&f!==null;c.push({name:"display",state:u?"ready":"missing",detail:"Xvfb + openbox + x11vnc"});let _=jn.filter((I)=>B(I)===null),v=(o?.missing_system_packages??kt).filter((I)=>kt.includes(I)),E=_.length===0&&v.length===0;c.push(E?{name:"system_packages",state:"ready"}:{name:"system_packages",state:"missing",detail:[...new Set([...v,..._])].join(" ")});let N=He.filter((I)=>B(I)===null);c.push(N.length===0?{name:"desktop_look",state:"ready"}:{name:"desktop_look",state:"missing",detail:N.join(" ")})}let x=n.ffmpeg&&L(n.ffmpeg)?n.ffmpeg:B("ffmpeg"),m=!x?null:x===n.ffmpeg?n.ffprobe:y(Be(An(x)),"ffprobe"),R=a&&c.every((u)=>u.state==="ready"),S=(u)=>a&&c.every((_)=>!rs[u].includes(_.name)||_.state==="ready");return{platform:t,root:n.root,automation:n.automation,ready:R,features:{display:S("display"),computer:S("computer"),browser:S("browser")},node:n.node,ocu:n.ocu,obu:n.obu,nativeHost:n.nativeHost,extensionDir:n.extensionDir,browser:n.browser,ffmpeg:x,ffprobe:m&&L(m)?m:null,userChrome:ss(n,a&&["node","open_browser_use"].every((u)=>c.find((_)=>_.name===u)?.state==="ready")),pulseaudio:B("pulseaudio"),xvnc:B("Xvnc"),xvfb:b,x11vnc:h,openbox:f,components:c}}function At(e){return as(e)?ls():[]}function as(e){return e?.platform==="darwin-arm64"&&e.ffmpeg===y(e.root,"ffmpeg",W.version,"ffmpeg")}async function dc(e,t,n,o=fetch){try{let i=await o(e,{redirect:"follow"});if(!i.ok||!i.body)throw Error(`download failed (HTTP ${i.status}): ${e}`);let a=vt("sha256"),c=Cn(n,{mode:384});try{let w=i.body.getReader();for(let b=await w.read();!b.done;b=await w.read())if(a.update(b.value),!c.write(b.value))await Pn(c,"drain")}finally{c.end(),await Nn(c)}let p=a.digest("hex");if(p!==t)throw Error(`digest mismatch for ${e}: expected ${t}, got ${p}`)}catch(i){throw $n(n,{force:!0}),i}}function je(e){return y(Mt(e),"minimal.json")}function cs(e=s()){return Mn(je(e))}function pc(e={}){Wn(je(e.home??s()),`${JSON.stringify({version:1,minimal_at:(e.now?.()??new Date).toISOString()})}
81
- `)}function hc(e={}){let t=e.platform===void 0?Rt():e.platform;if(t===null)return null;let n=e.home??s();if(Tt(wn(t,n).receipt)!==null)return"refresh";return cs(n)?null:"install"}import{spawn as us}from"child_process";import{existsSync as ds}from"fs";import{connect as ps}from"net";import{join as fe}from"path";var Lt="reason_desktop",Q={sampleRate:48000,channels:2,codec:"opus"},fs=5000,ms=107,gs=262144,zo=(e)=>fe(e,"native"),Kt=(e)=>`unix:${e}`;function Ve(e,t=1000){if(!ds(e))return Promise.resolve(!1);return new Promise((n)=>{let o=ps({path:e}),i=(a)=>{o.destroy(),n(a)};o.setTimeout(t,()=>i(!1)),o.once("error",()=>i(!1)),o.once("close",()=>i(!1)),o.once("connect",()=>i(!0))})}async function uc(e,t){if(!t)return null;let n=zo(e);if(Buffer.byteLength(n)>ms||/["'\\\s]/.test(n))return null;try{if(await Ve(n))return n;let o=us(t,["--daemonize=no","--system=no","--use-pid-file=no","--exit-idle-time=-1","--disallow-exit=yes","--realtime=no","--high-priority=no","--disallow-module-loading=yes","--log-level=warning",`--log-target=file:${fe(e,"pulseaudio.log")}`,"-n",`--load=module-native-protocol-unix socket="${n}" auth-anonymous=1 auth-cookie-enabled=0`,`--load=module-null-sink sink_name=${Lt} rate=${Q.sampleRate} channels=${Q.channels} sink_properties=device.description=Reason_desktop`],{detached:!0,stdio:"ignore",env:{HOME:e,PATH:"/usr/bin:/bin",XDG_RUNTIME_DIR:e,PULSE_RUNTIME_PATH:fe(e,"runtime"),PULSE_STATE_PATH:fe(e,"state")}}),i=!1;o.once("error",()=>{i=!0}),o.once("exit",()=>{i=!0}),o.unref();let a=Date.now()+fs;while(Date.now()<a){if(await Ve(n))return n;if(i)return await Ve(n)?n:null;await new Promise((c)=>setTimeout(c,50))}if(!i)o.kill("SIGKILL");return null}catch{return null}}function Nt(){let{sampleRate:e,channels:t}=Q;return["-hide_banner","-loglevel","error","-nostdin","-fflags","nobuffer","-f","pulse","-sample_rate",String(e),"-channels",String(t),"-fragment_size",String(e*t*2/50),"-i",`${Lt}.monitor`,"-vn","-ac",String(t),"-ar",String(e),"-c:a","libopus","-b:a","64k","-application","lowdelay","-frame_duration","20","-flush_packets","1","-page_duration","20000","-f","ogg","pipe:1"]}var hs=[79,103,103,83],bs=Buffer.from("OpusHead"),ys=Buffer.from("OpusTags"),$t=(e,t)=>e.byteLength>=t.byteLength&&t.every((n,o)=>e[o]===n);class Ge extends Error{constructor(e){super(e);this.name="OggProtocolError"}}class We{buffer=new Uint8Array(0);partial=[];partialBytes=0;push(e){let t=new Uint8Array(this.buffer.byteLength+e.byteLength);t.set(this.buffer),t.set(e,this.buffer.byteLength);let n=[],o=0;while(t.byteLength-o>=27){if(hs.some((x,m)=>t[o+m]!==x)||t[o+4]!==0)throw new Ge("invalid_page");let i=(t[o+5]&1)!==0,a=t[o+26];if(t.byteLength-o<27+a)break;let c=t.subarray(o+27,o+27+a),p=c.reduce((x,m)=>x+m,0),w=27+a+p;if(t.byteLength-o<w)break;if(!i&&this.partialBytes>0)this.resetPartial();let b=i&&this.partialBytes===0,h=o+27+a,f=h;for(let x of c){if(h+=x,x===255)continue;if(this.appendPartial(t.subarray(f,h),b),f=h,!b){let m=this.takePartial();if(m.byteLength>0&&!$t(m,bs)&&!$t(m,ys))n.push(m)}b=!1,this.resetPartial()}if(f<h)this.appendPartial(t.subarray(f,h),b);o+=w}return this.buffer=t.slice(o),n}appendPartial(e,t){if(t||e.byteLength===0)return;if(this.partialBytes+=e.byteLength,this.partialBytes>gs)throw new Ge("packet_too_large");this.partial.push(e.slice())}takePartial(){if(this.partial.length===1)return this.partial[0];let e=new Uint8Array(this.partialBytes),t=0;for(let n of this.partial)e.set(n,t),t+=n.byteLength;return e}resetPartial(){this.partial=[],this.partialBytes=0}}import{spawn as ws}from"child_process";var Ut=1048576,xs=String.raw`
82
- import gi, json, os, sys
83
- gi.require_version("Gtk", "3.0")
84
- from gi.repository import Gtk, Gdk, GLib
85
- if not Gtk.init_check()[0]:
86
- sys.exit(1)
87
- clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
88
- pending = b""
89
- generation = 0
90
- def send(value):
91
- print(json.dumps(value, ensure_ascii=True), flush=True)
92
- def changed(clipboard, event):
93
- global generation
94
- generation += 1
95
- current = generation
96
- def received(clipboard, text, unused):
97
- if current == generation and text is not None and len(text.encode("utf-8")) <= ${O}:
98
- send({"text": text})
99
- clipboard.request_text(received, None)
100
- # No request_text on startup: never share the pre-existing clipboard.
101
- clipboard.connect("owner-change", changed)
102
- def input_ready(fd, condition):
103
- global pending
104
- chunk = os.read(fd, 65536)
105
- if not chunk:
106
- Gtk.main_quit()
107
- return False
108
- pending += chunk
109
- while b"\n" in pending:
110
- line, pending = pending.split(b"\n", 1)
111
- text = json.loads(line)
112
- if not isinstance(text, str) or len(text.encode("utf-8")) > ${O} or "\x00" in text:
113
- sys.exit(1)
114
- clipboard.set_text(text, -1)
115
- send("ack")
116
- if len(pending) > ${O*6+2}:
117
- sys.exit(1)
118
- return True
119
- GLib.io_add_watch(0, GLib.IO_IN | GLib.IO_HUP, input_ready)
120
- send("ready")
121
- Gtk.main()
122
- `;function Bt(e,t){let n=ws("/usr/bin/python3",["-I","-u","-c",xs],{env:{DISPLAY:e.display,XAUTHORITY:e.xauthority},stdio:["pipe","pipe","ignore"]}),o=!1,i=!0,a="",c=0,p=[],w=setTimeout(()=>h(),5000),b=()=>{o=!0,clearTimeout(w),p.length=0,n.kill("SIGKILL")},h=()=>{if(o)return;b(),t.end({error:new r("display_unavailable","Reason could not start this Linux desktop's UTF-8 clipboard.")})},f=(x,m=32)=>{if(o)return;if(!i){x();return}if(c+=m,c>Ut)b(),t.end({reason:"input_backpressure"});else p.push({apply:x,bytes:m})};return n.stdout.on("data",(x)=>{if(o)return;a+=x.toString("ascii");for(let m=a.indexOf(`
123
- `);m>=0;m=a.indexOf(`
124
- `)){let R=a.slice(0,m);a=a.slice(m+1);let S;try{S=JSON.parse(R)}catch{h();return}if(S==="ready"||S==="ack"){clearTimeout(w),i=!1;while(!i&&!o&&p.length){let u=p.shift();c-=u.bytes,u.apply()}}else if(S&&typeof S==="object"&&"text"in S&&typeof S.text==="string"&&Buffer.byteLength(S.text)<=O)t.clipboard(S.text);else{h();return}if(o)return}if(a.length>O*6+32)h()}),n.stdin.on("error",h),n.once("error",h),n.once("exit",h),{apply:f,write(x){if(Buffer.byteLength(x)>O||x.includes("\x00")){h();return}let m=`${JSON.stringify(x)}
125
- `;f(()=>{if(i=!0,w=setTimeout(()=>h(),5000),n.stdin.write(m),n.stdin.writableLength>Ut)b(),t.end({reason:"input_backpressure"})},Buffer.byteLength(m))},close:b}}var X={smooth:{fps:60,crf:23,kbps:8000,x264Preset:"ultrafast",threads:2,scale:1},sharp:{fps:30,crf:19,kbps:1e4,x264Preset:"superfast",scale:1},data_saver:{fps:20,crf:28,kbps:2000,x264Preset:"ultrafast",scale:0.75},balanced:{fps:30,crf:23,kbps:4000,x264Preset:"ultrafast",threads:2,scale:1}},Ss="avc1.4D002A",Ht={width:1920,height:1080},Es=262144,Ds=0.2,Is=250,Ps=1e4,Cs=1024,Ke=1e4,Rs=500,Ms=60,Ts=1e4,Os=1000,Ft=1048576,As=-223,$s=-308,qo={kind:"mac_screen",sound:null},Wo={kind:"windows_screen",sound:null},Ls,zt=()=>Ls??=T()?.ffmpeg??null,ge=(e,t,n)=>qe(e,t,{env:n,stdio:["ignore","pipe","ignore"],windowsHide:!0}),Ns,Ye=()=>Ns??=At(T()),jt=(e,t,n)=>{let[o,...i]=[...Ye(),e];return ge(o,[...i,...t],n)},Vt=()=>on?.videotoolbox?"h264_videotoolbox":"libx264",Us=()=>Math.round(performance.now()*1000),Xe=new Set,Wt=!1;function en(e){if(Xe.add(e),e.once("exit",()=>Xe.delete(e)),Wt)return;Wt=!0,process.once("exit",()=>{for(let t of Xe)try{t.kill("SIGKILL")}catch{}})}function tn(e){try{e.stdout?.destroy()}catch{}if(e.exitCode!==null||e.signalCode!==null)return;try{e.kill("SIGTERM")}catch{return}let t=setTimeout(()=>{if(e.exitCode===null&&e.signalCode===null)try{e.kill("SIGKILL")}catch{}},Rs);e.once("exit",()=>clearTimeout(t))}function Bs(e,t,n){return{args:["-f","x11grab","-draw_mouse","1","-framerate",String(e),"-video_size",`${t.width}x${t.height}`,"-i",n],size:t}}function Hs(e){return{args:["-f","avfoundation","-capture_cursor","1","-pixel_format","nv12","-framerate",String(e),"-i","Capture screen 0:none"],size:null}}function Fs(e,t){return{args:["-f","gdigrab","-draw_mouse","1","-framerate",String(e),"-offset_x","0","-offset_y","0","-video_size",`${t.width}x${t.height}`,"-i","desktop"],size:t}}function zs(e){return{args:["-probesize","32","-analyzeduration","0","-f","image2pipe","-c:v","mjpeg","-framerate",String(e),"-i","pipe:0"],size:null}}var nn=1700000;function sn(e){return Math.min(1,Math.round(Math.sqrt(nn/(e.width*e.height))*100)/100)}function js(e,t,n){let o=qe(n.axe,["stream-video","--udid",n.udid,"--format","ffmpeg","--fps","30","--quality","85","--scale",String(Math.min(0.99,sn(n.size)))],{stdio:["ignore","pipe","ignore"]}),i=qe(e,t,{env:{},stdio:["pipe","pipe","ignore"]});o.stdout.pipe(i.stdin),i.stdin.on("error",()=>{});let a=()=>{if(o.exitCode===null&&o.signalCode===null)o.kill("SIGTERM")};return i.once("exit",a),i.once("error",a),o.once("exit",()=>{if(i.exitCode===null&&i.signalCode===null)i.kill("SIGTERM")}),o.once("error",()=>{if(i.exitCode===null&&i.signalCode===null)i.kill("SIGTERM")}),i}function qt(e){let t=Math.min(1,Ht.width/e.width,Ht.height/e.height);return{width:Math.round(e.width*t),height:Math.round(e.height*t)}}function me(e,t,n,o="libx264"){let i=X[e],a=(f)=>Math.max(2,Math.floor(f/2)*2),c={width:a(n.width*i.scale),height:a(n.height*i.scale)},p=c.width!==t.size?.width||c.height!==t.size.height,w=Math.max(1,Math.round(i.kbps*2/i.fps)),b=["-g",String(i.fps*Ms)],h=o==="h264_videotoolbox"?["-c:v","h264_videotoolbox","-realtime","1","-prio_speed","1","-allow_sw","1","-profile:v","main","-level","4.2","-bf","0","-pix_fmt","nv12",...b,"-b:v",`${i.kbps}k`,"-maxrate",`${i.kbps}k`,"-bufsize",`${w}k`,"-bsf:v","h264_metadata=aud=insert"]:["-c:v","libx264","-preset",i.x264Preset,"-tune","zerolatency","-profile:v","main","-level","4.2","-bf","0","-pix_fmt","yuv420p",...i.threads?["-threads",String(i.threads)]:[],"-x264-params","aud=1:repeat-headers=1",...b,"-crf",String(i.crf),"-maxrate",`${i.kbps}k`,"-bufsize",`${w}k`];return["-hide_banner","-loglevel","error","-nostdin","-fflags","nobuffer",...t.args,"-an",...p?["-vf",`scale=${c.width}:${c.height}:flags=fast_bilinear`]:[],...h,"-flush_packets","1","-f","h264","pipe:1"]}class rn{buffer=new Uint8Array(0);scanned=0;key=!1;micros=0;push(e,t){if(this.buffer.byteLength===0)this.micros=t;let n=new Uint8Array(this.buffer.byteLength+e.byteLength);n.set(this.buffer),n.set(e,this.buffer.byteLength),this.buffer=n;let o=[],i=this.scanned;while(i+3<this.buffer.byteLength){if(this.buffer[i]!==0||this.buffer[i+1]!==0||this.buffer[i+2]!==1){i++;continue}let a=this.buffer[i+3]&31,c=i>0&&this.buffer[i-1]===0?i-1:i;if(a===9&&c>0)o.push({data:this.buffer.slice(0,c),key:this.key,micros:this.micros}),this.buffer=this.buffer.subarray(c),this.key=!1,this.micros=t,i-=c;if(a===5)this.key=!0;i+=3}return this.scanned=i,o}}function Vs(e,t){let n=vs({path:e}),o=Buffer.alloc(0),i="version",a=0,c=!1,p=[],w=0,b=!1,h=(u)=>{if(b)return;b=!0,n.destroy(),t.end(u)},f=()=>h({reason:"display_protocol"}),x=(u)=>{if(b)return;if(!c){if(w+=u.byteLength,w>Ft)h({reason:"input_backpressure"});else p.push(u);return}if(n.write(u),n.writableLength>Ft)h({reason:"input_backpressure"})},m=(u)=>{o=o.subarray(u)},R=()=>{switch(i){case"version":{if(o.byteLength<12)return!1;let u=/^RFB (\d{3})\.(\d{3})\n$/.exec(o.subarray(0,12).toString("latin1"));if(!u||Number(u[1])*1000+Number(u[2])<3007)return f(),!1;return m(12),n.write(`RFB 003.007
126
- `),i="security",!0}case"security":{if(o.byteLength<1)return!1;let u=o[0];if(u===0)return f(),!1;if(o.byteLength<1+u)return!1;if(!o.subarray(1,1+u).includes(1))return f(),!1;return m(1+u),n.write(Buffer.from([1,1])),i="init",!0}case"init":{if(o.byteLength<24)return!1;let u=o.readUInt32BE(20);if(u>65536)return f(),!1;if(o.byteLength<24+u)return!1;let _={width:o.readUInt16BE(0),height:o.readUInt16BE(2)};if(m(24+u),_.width===0||_.height===0)return f(),!1;i="messages";let v=Buffer.alloc(12);v.writeUInt8(2,0),v.writeUInt16BE(2,2),v.writeInt32BE($s,4),v.writeInt32BE(As,8),n.write(v),c=!0;for(let E of p)n.write(E);return p=[],w=0,t.ready(_),!b}case"skip":{let u=Math.min(a,o.byteLength);if(m(u),a-=u,a>0)return!1;return i="messages",!0}case"messages":{if(o.byteLength<1)return!1;switch(o[0]){case 1:{if(o.byteLength<6)return!1;let u=6+o.readUInt16BE(4)*6;if(o.byteLength<u)return!1;return m(u),!0}case 2:return m(1),!0;case 3:{if(o.byteLength<8)return!1;let u=o.readUInt32BE(4);if(u>O/2)return m(8),i="skip",a=u,!0;if(o.byteLength<8+u)return!1;let _=o.subarray(8,8+u).toString("latin1");return m(8+u),t.clipboard(_),!b}default:return f(),!1}}}},S=!1;return n.once("connect",()=>{S=!0}),n.on("data",(u)=>{if(b)return;o=o.byteLength?Buffer.concat([o,u]):u;while(!b&&R());}),n.once("error",()=>{if(!S)h({error:new r("display_unavailable","Reason could not reach this machine's desktop server.")})}),n.once("close",()=>h({reason:"display_closed"})),{pointer(u,_,v){let E=Buffer.alloc(6);E.writeUInt8(5,0),E.writeUInt8(v&255,1),E.writeUInt16BE(u,2),E.writeUInt16BE(_,4),x(E)},key(u,_){let v=Buffer.alloc(8);v.writeUInt8(4,0),v.writeUInt8(u?1:0,1),v.writeUInt32BE(_>>>0,4),x(v)},clipboard(u){if(Array.from(u).some((E)=>E.codePointAt(0)>255)){h({reason:"clipboard_unicode_unsupported"});return}let _=Buffer.from(u,"latin1"),v=Buffer.alloc(8);v.writeUInt8(6,0),v.writeUInt32BE(_.byteLength,4),x(Buffer.concat([v,_]))},close(){b=!0,n.destroy()}}}class Je{run=null;viewers=new Set;get running(){return this.run!==null}start(e,t,n,o){this.viewers.add(e),this.stop();let i;try{i=n()}catch{this.fail();return}en(i);let a={child:i,splitter:new rn};this.run=a;for(let p of[...this.viewers])p.started(t);i.stdout?.on("data",(p)=>{if(this.run!==a)return;for(let w of a.splitter.push(p,o()))for(let b of[...this.viewers])b.unit(w)});let c=()=>{if(this.run!==a)return;this.run=null,this.fail()};i.once("exit",c),i.once("error",c)}leave(e){if(!this.viewers.delete(e))return;if(this.viewers.size===0)this.stop()}stop(){if(!this.run)return;tn(this.run.child),this.run=null}fail(){for(let e of[...this.viewers])e.failed()}}var Yt=new WeakMap;function Gs(e){let t=Yt.get(e);if(!t)Yt.set(e,t=new Je);return t}var ee=new Map;function Vo(e,t,n={}){let o=n.micros??Us,i=new ns,a=t.request.preset,c=null,p=null,w=null,b=!1,h=null,f=!1,x=!1,m=null,R=0,S=0,u=!1,_=null,v=null,E=0,N=null,I=[],te=0,U=[],Ze=new Uint32Array(Ke+1),he=0,be=null,ye=0,q=0,we=0,Qe=0,et=0,ne=null,xe=0,j={frames:0,bytes:0,since:o()},V=[],Y=0,_e,ke=!1,cn=o(),C={},G=()=>Math.round((o()-cn)/1000),tt=n.control??ut,ve=null,Se=null,nt=0,Ee=!1,st={pause(){if(!h?.running)return;h.stop(),Ee=!0},adopt(l){let d=l!==null&&(l.width!==p?.width||l.height!==p?.height);if(d)p=l;if(!d&&!Ee)return;if(Ee=!1,h)ae();else Pe()}},un=(l)=>{if(!n.resizeDesktop||!c||"kind"in c||e.done)return;let d=c.display,g=()=>[...ee.get(d)??[]];nt++,n.resizeDesktop(c,l,()=>{for(let k of g())k.pause()}).then((k)=>{for(let D of g())D.adopt(k)})},M=(l)=>{let d=Rn(l);return e.send(d),Qe+=d.byteLength,d.byteLength},se=(l)=>{if(e.done)return;if(e.open)M({type:"error",code:l});e.end({reason:l})},re=()=>Math.max(Es,X[a].kbps*1000/8*Ds),oe=()=>o()/1000,ln=()=>{while(U.length>1&&U[0].atMs<oe()-Ps)U.shift();return U[0]?.rttMs??null},rt=(l)=>{let d=ln();if(d===null||I.length===0)return!1;let g=(d+Is)*l;return oe()-I[0].sentMs>g||te>g/1000*X[a].kbps*1000/8},dn=(l)=>{if(E===0)return;let d=Math.min(l,E-1);if(N!==null&&d<=N)return;N=d;let g=oe();while(I.length&&I[0].seq<=d){let k=I.shift();if(te-=k.bytes,k.seq!==d)continue;let D=Math.max(0,g-k.sentMs);while(U.length&&U.at(-1).rttMs>=D)U.pop();U.push({atMs:g,rttMs:D}),Ze[Math.min(Ke,Math.round(D))]++,he++,be=Math.min(be??D,D)}},pn=()=>{let l=0;for(let d=0;d<=Ke;d++)if(l+=Ze[d],l*2>=he)return d;return 0},fn=()=>e.bufferedAmount<=re()/2&&!rt(0.5),ot=()=>{ke=!0,V=[],Y=0,h?.leave(De),h=null},it=(l)=>{if(e.done)return;if(l.key)C.first_key_ms??=G();if(!b){if(!h||V.length===0&&!l.key)return;if(V.push(l),Y+=l.data.byteLength,Y>re())ot();return}if(u){q++;return}if(e.bufferedAmount>re()||rt(1)){u=!0,q++,_=setInterval(()=>{if(e.done||!fn())return;if(_)clearInterval(_);_=null,u=!1,ae()},n.drainPollMs??25);return}if(!f){if(!l.key){q++;return}if(M({type:"hello",width:p.width,height:p.height,fps:X[a].fps,preset:a,codec:Ss}),f=!0,C.first_frame_ms??=G(),!x&&c?.sound)M({type:"audioHello",...Q}),x=!0}let d=M({type:"frame",key:l.key,seq:E,captureMicros:l.micros,data:l.data});if(I.push({seq:E,sentMs:oe(),bytes:d}),te+=d,I.length>Cs)te-=I.shift().bytes;E++,ye++,ne??=l.micros,xe=l.micros,j.frames++,j.bytes+=d},De={started(l){a=l,f=!1,V=[],Y=0},unit:it,failed:()=>se("encoder_failed")},Ie=()=>{let l=(n.ffmpeg??zt)();if(!c||!p){se("encoder_failed");return}let[d,g]=[c,p],k="kind"in d&&d.kind==="simulator"?d.stream:null;if(!l&&!k){se("encoder_failed");return}if(h??="kind"in d&&d.kind==="mac_screen"?Gs(n.spawn??jt):new Je,C.encoder_ms===void 0)C.encoder_ms=G(),C.encoder_shared=h.running;h.start(De,a,()=>{let D=X[a].fps;if(k)return k(D,X[a].kbps,nn);if("kind"in d&&d.kind==="simulator"){let P=Math.min(0.99,sn(d.size)),H={width:d.size.width*P,height:d.size.height*P};return js(l,me(a,zs(Math.min(D,30)),H,(n.macEncoder??Vt)()),d)}if("kind"in d&&d.kind==="windows_screen")return(n.spawn??ge)(l,me(a,Fs(D,g),qt(g)),{SystemRoot:process.env.SystemRoot??"C:\\Windows"});return"kind"in d?(n.spawn??jt)(l,me(a,Hs(D),qt(g),(n.macEncoder??Vt)()),{}):(n.spawn??ge)(l,me(a,Bs(D,g,d.display),g),{DISPLAY:d.display,XAUTHORITY:d.xauthority})},o)},ie=()=>{if(!m)return;tn(m.child),m=null},mn=()=>{let l=(n.ffmpeg??zt)();if(m||e.done||!x||!c?.sound||!l)return;let d;try{d=(n.spawn??ge)(l,Nt(),{PULSE_SERVER:Kt(c.sound)})}catch{return}en(d);let g={child:d,reader:new We};m=g,d.stdout?.on("data",(D)=>{if(m!==g||e.done)return;let P;try{P=g.reader.push(D)}catch{ie();return}let H=o();for(let Re of P){if(e.bufferedAmount>re()){S++;continue}M({type:"audio",captureMicros:H,data:Re}),R++}});let k=()=>{if(m===g)ie()};d.once("exit",k),d.once("error",k)},ae=()=>{if(!h||e.done)return;we++,Ie()},Pe=()=>{if(e.done||!p)return;if(!b){if(h||ke)return;Ie(),_e=setTimeout(()=>{if(!b)ot()},Ts);return}if(clearTimeout(_e),C.encoder_early===void 0){if(C.encoder_early=h!==null,ke)C.hold_lapsed=!0}if(!h)Ie();let l=V;V=[],Y=0;for(let d of l)it(d);v??=setInterval(()=>{let d=o(),g=Math.max(0.001,(d-j.since)/1e6);M({type:"stats",stats:{fps:Math.round(j.frames/g*10)/10,kbps:Math.round(j.bytes*8/1000/g),dropped:q,restarts:we,queued_bytes:e.bufferedAmount}}),j={frames:0,bytes:0,since:d}},Os)};t.desktop.then((l)=>{if(e.done)return;c=l;let d={ready(g){p=g,C.desktop_ms??=G(),Pe()},clipboard(g){if(e.open&&Buffer.byteLength(g)<=O)M({type:"serverClipboard",text:g})},end(g){if("reason"in g&&e.open)M({type:"error",code:g.reason});e.end(g)}};if("kind"in l&&l.kind==="simulator")w=l.input,d.ready(l.points);else if("kind"in l&&l.kind==="windows_screen")w=(n.windowsInput??xt)(d);else if("kind"in l)w=(n.macInput??((g)=>os(g,Ye())))(d);else{let g=ee.get(l.display);if(!g)ee.set(l.display,g=new Set);g.add(st);let k=(n.linuxClipboard??Bt)(l,d),D=Vs(l.rfbSocket,{...d,clipboard:(P)=>{if(!k)d.clipboard(P)}});w=k?{pointer:(P,H,Re)=>k.apply(()=>D.pointer(P,H,Re)),key:(P,H)=>k.apply(()=>D.key(P,H)),clipboard:(P)=>k.write(P),close(){k.close(),D.close()}}:D}at()},(l)=>e.end({error:l}));function at(){if(Se||!t.viewerSameNetwork||!b||e.done||!c||!("kind"in c)||c.kind!=="mac_screen")return;Se=(n.macWindows??is)((l)=>{if(e.open)M({type:"windows",bounds:l})})}let ct={viewer:t.viewer??null,notify(l){if(e.open)M({type:"control",control:l})}},Ce=(l)=>{if(!w)return;if(!c||!("kind"in c)||c.kind!=="simulator")tt.claim(ct);l(w)};return{opened(){C.relay_ms??=G()},received(l){et+=l.byteLength;let d;try{d=i.push(l)}catch{se("viewer_protocol");return}for(let g of d){if(e.done)return;switch(g.type){case"ping":M({type:"pong",token:g.token});break;case"pointer":Ce((k)=>k.pointer(g.x,g.y,g.buttons));break;case"key":Ce((k)=>k.key(g.down,g.keysym));break;case"clientClipboard":Ce((k)=>k.clipboard(g.text));break;case"config":if(g.preset!==a)a=g.preset,ae();break;case"keyframeRequest":if(f&&!u)ae();break;case"ack":dn(g.seq);break;case"audioEnable":if(g.on)mn();else ie();break;case"resize":un({width:g.width,height:g.height});break;default:break}}if(!b&&!e.done){if(b=!0,C.viewer_ms=G(),t.viewer)ve=tt.join(ct);Pe(),at()}},close(){if(c&&!("kind"in c)){let l=ee.get(c.display);if(l?.delete(st),l?.size===0)ee.delete(c.display)}if(ve?.(),ve=null,Se?.close(),_)clearInterval(_);if(v)clearInterval(v);clearTimeout(_e),h?.leave(De),ie(),w?.close()},summary:()=>({output_bytes:Qe,input_bytes:et,video:{preset:a,frames:ye,dropped:q,restarts:we,avg_fps:ne!==null&&xe>ne?Math.round((ye-1)/((xe-ne)/1e6)*10)/10:0,min_rtt_ms:Math.round(be??0),p50_rtt_ms:he?pn():0,audio_packets:R,audio_dropped:S,resizes:nt,connect:C}})}}var Zt=null,on=null,Ws=null,Ks=null;function Xs(){let e=T();return e?.features.display?e.ffmpeg:null}function an(e){return Zt??=new Promise((t)=>{_s(e,["-hide_banner","-encoders"],{env:{},timeout:5000,killSignal:"SIGKILL",maxBuffer:1048576,encoding:"utf8"},(n,o)=>{let i=(a)=>!n&&new RegExp(`^\\s*V\\S*\\s+${a}\\s`,"m").test(o);t(on={x264:i("libx264"),videotoolbox:i("h264_videotoolbox")})})}),Zt}var Qt=null;function Go(){return Qt??=(async()=>{let e=[T()?.ffmpeg,"/opt/homebrew/bin/ffmpeg","/usr/local/bin/ffmpeg"].find((n)=>Boolean(n&&ks(n)));if(!e)return null;let t=await an(e);return t.videotoolbox||t.x264?e:null})(),Qt}function Jt(e=process.platform,t={}){if(e!=="linux"&&e!=="darwin"&&e!=="win32")return Promise.resolve(!1);let n=(t.ffmpeg??Xs)();if(!n)return Promise.resolve(!1);let o=(t.encoders??an)(n);if(e==="linux")return o.then((a)=>a.x264);if(e==="win32"){let a=t.windowsScreen?t.windowsScreen():Ks??=bt();return Promise.all([o,a]).then(([c,p])=>c.x264&&(p?.session??0)>0)}let i=t.macScreen?t.macScreen():Ws??=Xt(Ye());return Promise.all([o,i]).then(([a,c])=>(a.x264||a.videotoolbox)&&c?.screen===!0&&c.accessibility)}
127
- export{Gt,lc,le,zo,Kt,uc,qo,Wo,Vo,Go,Jt,yn,wn,T,dc,pc,hc};
@@ -1,3 +0,0 @@
1
- // @bun
2
- import{cr,Ca}from"./vm-hands-entry-lite-52qz0n30.js";function ne(o=process.platform){if(cr(),o==="linux"||o==="win32")Ca("strict")}
3
- export{ne};
@@ -1,150 +0,0 @@
1
- // @bun
2
- import{ts,rs,Tc,Rn}from"./vm-hands-entry-lite-j10cw3d9.js";import{zo,Kt,uc,qo,Wo,Vo,Jt,T}from"./vm-hands-entry-lite-hn9pq7zj.js";import{Br}from"./vm-hands-entry-lite-z0ht62s4.js";import{_i}from"./vm-hands-entry-lite-hxfxs7r9.js";import{Se}from"./vm-hands-entry-lite-pxtycfdv.js";import{s}from"./vm-hands-entry-lite-zawytz09.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{execFile as de,spawn as se}from"child_process";import{randomBytes as qe}from"crypto";import{chmodSync as Ce,existsSync as ce,lstatSync as Ge,mkdirSync as Oe,readFileSync as ne,rmSync as ae,writeFileSync as N}from"fs";import{connect as he}from"net";import{join as I}from"path";var B=32,P=76;var M="./desktop-wallpaper-fd8f2wb2.jpg";var m="./dock-browser-y53t41cx.png";var v="./dock-files-cp52htdw.png";var Z="./dock-terminal-1es514yq.png";var V="./grok-wallpaper-71zwn2pj.jpg";var z="./grok-dock-browser-pzw59wnd.png";var W="./grok-dock-files-eckq444x.png";var j="./grok-dock-terminal-hcpz3e43.png";var U=`# Sets the X root window background and _XROOTPMAP_ID, as feh --bg-fill does.
3
- # The native Blaxel image ships no feh, hsetroot or compositor, but it does ship
4
- # python3-gi and libX11. tint2 reads _XROOTPMAP_ID to draw its transparent panel.
5
- # Usage: DISPLAY=:99 python3 set-root-wallpaper.py IMAGE
6
- import ctypes, sys
7
- import gi
8
- gi.require_version("GdkPixbuf", "2.0")
9
- from gi.repository import GdkPixbuf
10
- x = ctypes.cdll.LoadLibrary("libX11.so.6")
11
- x.XOpenDisplay.restype = ctypes.c_void_p
12
- x.XOpenDisplay.argtypes = [ctypes.c_char_p]
13
- d = x.XOpenDisplay(None)
14
- if not d: sys.exit("no display")
15
- for name, res, args in [
16
- ("XDefaultScreen", ctypes.c_int, [ctypes.c_void_p]),
17
- ("XRootWindow", ctypes.c_ulong, [ctypes.c_void_p, ctypes.c_int]),
18
- ("XDisplayWidth", ctypes.c_int, [ctypes.c_void_p, ctypes.c_int]),
19
- ("XDisplayHeight", ctypes.c_int, [ctypes.c_void_p, ctypes.c_int]),
20
- ("XDefaultDepth", ctypes.c_int, [ctypes.c_void_p, ctypes.c_int]),
21
- ("XDefaultVisual", ctypes.c_void_p, [ctypes.c_void_p, ctypes.c_int]),
22
- ("XDefaultGC", ctypes.c_void_p, [ctypes.c_void_p, ctypes.c_int]),
23
- ("XCreatePixmap", ctypes.c_ulong, [ctypes.c_void_p, ctypes.c_ulong, ctypes.c_uint, ctypes.c_uint, ctypes.c_uint]),
24
- ("XCreateImage", ctypes.c_void_p, [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_uint, ctypes.c_int, ctypes.c_int, ctypes.c_char_p, ctypes.c_uint, ctypes.c_uint, ctypes.c_int, ctypes.c_int]),
25
- ("XPutImage", ctypes.c_int, [ctypes.c_void_p, ctypes.c_ulong, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_uint, ctypes.c_uint]),
26
- ("XInternAtom", ctypes.c_ulong, [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_int]),
27
- ("XChangeProperty", ctypes.c_int, [ctypes.c_void_p, ctypes.c_ulong, ctypes.c_ulong, ctypes.c_ulong, ctypes.c_int, ctypes.c_int, ctypes.c_void_p, ctypes.c_int]),
28
- ("XSetWindowBackgroundPixmap", ctypes.c_int, [ctypes.c_void_p, ctypes.c_ulong, ctypes.c_ulong]),
29
- ("XClearWindow", ctypes.c_int, [ctypes.c_void_p, ctypes.c_ulong]),
30
- ("XSetCloseDownMode", ctypes.c_int, [ctypes.c_void_p, ctypes.c_int]),
31
- ("XCloseDisplay", ctypes.c_int, [ctypes.c_void_p]),
32
- ]:
33
- f = getattr(x, name); f.restype = res; f.argtypes = args
34
- s = x.XDefaultScreen(d); root = x.XRootWindow(d, s)
35
- w, h = x.XDisplayWidth(d, s), x.XDisplayHeight(d, s)
36
- if x.XDefaultDepth(d, s) != 24: sys.exit("unsupported depth")
37
- # Scale to cover the screen, then crop the centre.
38
- src = GdkPixbuf.Pixbuf.new_from_file(sys.argv[1])
39
- k = max(w / src.get_width(), h / src.get_height())
40
- sw, sh = max(w, round(src.get_width() * k)), max(h, round(src.get_height() * k))
41
- pb = src.scale_simple(sw, sh, GdkPixbuf.InterpType.BILINEAR).new_subpixbuf((sw - w) // 2, (sh - h) // 2, w, h).copy()
42
- if pb.get_has_alpha(): pb = pb.composite_color_simple(w, h, GdkPixbuf.InterpType.NEAREST, 255, 1, 0, 0)
43
- rgb, stride = pb.get_pixels(), pb.get_rowstride()
44
- bgrx = bytearray(w * h * 4)
45
- for y in range(h):
46
- row = rgb[y * stride:y * stride + w * 3]; o = y * w * 4
47
- bgrx[o:o + w * 4:4] = row[2::3]; bgrx[o + 1:o + w * 4:4] = row[1::3]; bgrx[o + 2:o + w * 4:4] = row[0::3]
48
- buf = ctypes.create_string_buffer(bytes(bgrx), len(bgrx))
49
- pix = x.XCreatePixmap(d, root, w, h, 24)
50
- img = x.XCreateImage(d, x.XDefaultVisual(d, s), 24, 2, 0, buf, w, h, 32, 0) # ZPixmap
51
- x.XPutImage(d, pix, x.XDefaultGC(d, s), img, 0, 0, 0, 0, w, h)
52
- ref = ctypes.c_ulong(pix)
53
- for atom in (b"_XROOTPMAP_ID", b"ESETROOT_PMAP_ID"):
54
- x.XChangeProperty(d, root, x.XInternAtom(d, atom, 0), 20, 32, 0, ctypes.byref(ref), 1) # XA_PIXMAP, PropModeReplace
55
- x.XSetWindowBackgroundPixmap(d, root, pix)
56
- x.XClearWindow(d, root)
57
- x.XSetCloseDownMode(d, 1) # RetainPermanent: the pixmap outlives this process
58
- x.XCloseDisplay(d)
59
- `;function Ae(e){return`<?xml version="1.0" encoding="UTF-8"?>
60
- <openbox_config xmlns="http://openbox.org/3.4/rc">
61
- <theme><keepBorder>no</keepBorder></theme>
62
- <applications>
63
- <!-- Debian Chromium is "Chromium"; Chrome for Testing is "Chromium-browser". -->
64
- <application class="Chromium*">
65
- <decor>no</decor>
66
- <position force="yes"><x>${B}</x><y>${B}</y></position>
67
- <size><width>${e.width-B*2}</width><height>${e.height-B-P}</height></size>
68
- </application>
69
- </applications>
70
- </openbox_config>`}var Pe=`# Remote sandbox dock \u2014 launcher icons only, centred, no panel fill
71
- panel_items = L
72
- panel_size = 100% 46
73
- panel_margin = 0 10
74
- panel_padding = 0 0 10
75
- panel_position = bottom center horizontal
76
- panel_shrink = 1
77
- panel_background_id = 0
78
- panel_layer = top
79
- mouse_effects = 1
80
- mouse_hover_icon_asb = 100 0 12
81
- mouse_pressed_icon_asb = 100 0 -12
82
-
83
- launcher_icon_size = 46
84
- launcher_padding = 0 0 10
85
- launcher_background_id = 0
86
- launcher_tooltip = 1
87
-
88
- launcher_item_app = /tmp/ara-chromium.desktop
89
- launcher_item_app = /tmp/ara-files.desktop
90
- launcher_item_app = /tmp/ara-terminal.desktop
91
- `,ee=32,Ye=`# Remote sandbox dock (grok look) \u2014 small launcher icons only, centred, no panel fill
92
- panel_items = L
93
- panel_size = 100% ${ee+16}
94
- panel_margin = 0 0
95
- panel_padding = 0 0 8
96
- panel_position = bottom center horizontal
97
- panel_shrink = 1
98
- panel_background_id = 0
99
- panel_layer = top
100
- mouse_effects = 1
101
- mouse_hover_icon_asb = 100 0 10
102
- mouse_pressed_icon_asb = 100 0 -10
103
-
104
- launcher_icon_size = ${ee}
105
- launcher_padding = 0 0 8
106
- launcher_background_id = 0
107
- launcher_tooltip = 1
108
-
109
- launcher_item_app = /tmp/ara-chromium.desktop
110
- launcher_item_app = /tmp/ara-files.desktop
111
- launcher_item_app = /tmp/ara-terminal.desktop
112
- `,Ne=`corner-radius = 12;
113
- rounded-corners-exclude = [
114
- "class_g = 'tint2'",
115
- "window_type = 'dock'",
116
- "window_type = 'desktop'"
117
- ];
118
- backend = "xrender";
119
- shadow = false;
120
- fading = false;
121
- vsync = false;
122
- inactive-opacity = 1.0;
123
- active-opacity = 1.0;
124
- `,ue="/tmp/ara-dock-browser.png",Re=`[Desktop Entry]
125
- Name=Chrome
126
- Exec=chromium --no-sandbox %U
127
- Icon=${ue}
128
- Type=Application
129
- Categories=Network;WebBrowser;
130
- `,ge=`[Desktop Entry]
131
- Name=Terminal
132
- Exec=bash -c "DISPLAY=:99 xterm -fa DejaVuSansMono -fs 11 -bg black -fg white"
133
- Icon=/tmp/ara-dock-terminal.png
134
- Type=Application
135
- Categories=System;TerminalEmulator;
136
- `,re=`[Desktop Entry]
137
- Name=Files
138
- Exec=bash -c "DISPLAY=:99 pcmanfm --no-desktop"
139
- Icon=/tmp/ara-dock-files.png
140
- Type=Application
141
- Categories=System;FileManager;
142
- `;var De={"wallpaper.jpg":M,"dock-browser.png":m,"dock-terminal.png":Z,"dock-files.png":v,"grok-wallpaper.jpg":V,"grok-dock-browser.png":z,"grok-dock-terminal.png":j,"grok-dock-files.png":W},Ke=U,Fe='set_wallpaper() { if command -v feh >/dev/null 2>&1; then feh --bg-fill "$1"; else python3 "$2" "$1"; fi; }';function $e(e){let D=(p)=>p.replaceAll("DISPLAY=:99",`DISPLAY=${e.display}`).replaceAll("/tmp/ara-",`${e.root}/ara-`),c=e.look==="grok",d=new Set(e.absent??[]),t=d.has("files")&&e.filesViewerExec?e.filesViewerExec:null;if(t)d.delete("files");let n=(c?Ye:Pe).split(`
143
- `).filter((p)=>!(d.has("terminal")&&p.endsWith("/ara-terminal.desktop"))&&!(d.has("files")&&p.endsWith("/ara-files.desktop"))).join(`
144
- `),a=(p)=>c?p.replace("/tmp/ara-dock-","/tmp/ara-grok-dock-"):p,o=t?re.replace(/^Exec=.*$/m,`Exec=${t}`).replace("Categories=System;FileManager;","Categories=Utility;Viewer;"):re,f=c?"ara-grok-wallpaper.jpg":"ara-wallpaper.jpg",i={"openbox/rc.xml":Ae(e.screen),"tint2/tint2rc":D(n),"picom/picom.conf":Ne,...d.has("terminal")?{}:{"ara-terminal.desktop":D(a(ge))},...d.has("files")?{}:{"ara-files.desktop":D(a(o))},"ara-chromium.desktop":D(a(Re)).replace("chromium --no-sandbox %U",e.browserExec),"ara-set-root-wallpaper.py":Ke},X=[...Y.slice(0,3),Fe,`[ ! -f "$ROOT/${f}" ] || set_wallpaper "$ROOT/${f}" "$ROOT/ara-set-root-wallpaper.py" || true`,'if alive tint2 && ! cmp -s "$ROOT/tint2/tint2rc" "$ROOT/tint2/applied"; then read -r pid _ <"$ROOT/tint2.pid"; kill -USR1 "$pid" 2>/dev/null || true; fi','cp "$ROOT/tint2/tint2rc" "$ROOT/tint2/applied" 2>/dev/null || true',...Y.slice(3)];return{files:i,start:X}}var Y=['ticks() { line=$(cat "/proc/$1/stat" 2>/dev/null) || return 1; rest=${line##*) }; case $rest in Z*|X*) return 1;; esac; printf "%s" "$rest" | cut -d " " -f20; }','alive() { [ -f "$ROOT/$1.pid" ] || return 1; read -r pid start <"$ROOT/$1.pid"; current=$(ticks "$pid") || return 1; [ "$current" = "$start" ] && kill -0 "$pid" 2>/dev/null; }','launch() { name=$1; shift; "$@" 9>&- >"$ROOT/$name.log" 2>&1 & pid=$!; start=$(ticks "$pid"); printf "%s %s\\n" "$pid" "$start" >"$ROOT/$name.pid"; }','if [ -f "$ROOT/tint2/tint2rc" ] && ! alive tint2 && command -v tint2 >/dev/null 2>&1; then launch tint2 tint2 -c "$ROOT/tint2/tint2rc"; fi','if [ -f "$ROOT/picom/picom.conf" ] && ! alive picom && command -v picom >/dev/null 2>&1; then launch picom picom --config "$ROOT/picom/picom.conf"; fi'];var Je=43200000,L=":99",Qe=60000,A=15000,u={width:1280,height:800},ke=/^[A-Za-z0-9._:-]{1,160}$/;function _e(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}var we=["video","viewer","viewer_same_network","viewer_network","look"];function Me(e,D=Date.now()){let c=["relay_url","session_id","expires_at"];if(!_e(e)||c.some((f)=>!(f in e))||Object.keys(e).some((f)=>!c.includes(f)&&!we.includes(f)))throw new r("invalid_display_request","Reason desktop request is malformed.");let d="video"in e?Tc(e.video):void 0,t="viewer"in e?ts(e.viewer):null,n="look"in e?rs(e.look):null;if(d===null)throw new r("invalid_display_request","Reason desktop video request is invalid.");let a=null;try{a=typeof e.relay_url==="string"?new URL(e.relay_url):null}catch{}if(!a||a.protocol!=="wss:"&&a.protocol!=="ws:"||a.username||a.password)throw new r("invalid_display_request","Reason desktop relay URL is invalid.");if(typeof e.session_id!=="string"||!ke.test(e.session_id))throw new r("invalid_display_request","Reason desktop session identity is invalid.");let o=typeof e.expires_at==="string"?Date.parse(e.expires_at):Number.NaN;if(!Number.isFinite(o)||o<=D)throw new r("invalid_display_request","Reason desktop session has already expired.");return{relay_url:e.relay_url,session_id:e.session_id,expires_at:new Date(Math.min(o,D+Je)).toISOString(),...d?{video:d}:{},...t?{viewer:t}:{},...d&&e.viewer_same_network===!0?{viewer_same_network:!0}:{},...n?{look:n}:{}}}function on(e=process.platform){return(e==="linux"||e==="darwin"||e==="win32")&&T()?.features.display===!0}async function No(){if(process.platform==="win32")return on()&&await Jt();if(process.platform!=="darwin")return on();return await Jt()}function Te(e){Oe(e,{recursive:!0,mode:448});let D=Ge(e);if(!D.isDirectory()||D.isSymbolicLink()||process.getuid&&D.uid!==process.getuid())throw new r("display_unavailable","Reason desktop state directory is not private.");Ce(e,448)}function me(e,D){let c=(t)=>{let n=Buffer.alloc(2);return n.writeUInt16BE(t.length),Buffer.concat([n,t])},d=Buffer.from([255,255]);return Buffer.concat([d,c(Buffer.alloc(0)),c(Buffer.from(e)),c(Buffer.from("MIT-MAGIC-COOKIE-1")),c(D)])}function x(e,D,c=2000){return new Promise((d)=>{let t=he(e),n="",a=(o)=>{t.destroy(),d(o)};t.setTimeout(c,()=>a(!1)),t.once("error",()=>a(!1)),t.once("close",()=>a(!1)),t.once("connect",()=>{if(!D)a(!0)}),t.on("data",(o)=>{if(n+=o.toString("latin1"),n.length>=4)a(n.startsWith("RFB "))})})}async function h(e,D){let c=Date.now()+D;while(Date.now()<c){if(await e())return!0;await new Promise((d)=>setTimeout(d,100))}return!1}function R(e,D,c){return new Promise((d)=>{let t=se(e,D,{detached:!0,stdio:"ignore",env:c});t.once("error",()=>d(-1)),t.once("exit",(n)=>d(n)),t.unref(),setTimeout(()=>d(null),A).unref()})}var O=null;function Ft(e=s()){return O??=ve(e).finally(()=>{O=null}),O}async function ve(e){let D=T({home:e});if(!D?.xvfb||!D.x11vnc||!D.openbox)throw new r("display_unavailable","Run `reason desktop install` on this machine to enable its desktop.");Br({root:D.root,automation:D.automation,extensionDir:D.extensionDir});let c=I(D.root,"display");Te(c);let d=await Ve(e,c,D.x11vnc);if(d)return d;let t={display:L,xauthority:I(c,"Xauthority"),rfbSocket:I(c,"rfb.sock")},n=I(c,"pulse"),a=(async()=>{try{Te(n)}catch{return null}return await uc(n,D.pulseaudio)})();Te(I(c,"home"));let o=J(c,t,D.pulseaudio),f=async()=>({...t,sound:await a});if(await x({path:t.rfbSocket},!0))return Ie(I(c,"theme"),Y,o),await f();if(!ce(t.xauthority))N(t.xauthority,me(L.slice(1),qe(16)),{mode:384,flag:"wx"});let i=Q(I(c,"theme"),t.display,u,e),X={path:`/tmp/.X11-unix/X${L.slice(1)}`};if(!await x(X,!1)){let p=`${u.width}x${u.height}`;if(D.xvnc)ae(t.rfbSocket,{force:!0}),R(D.xvnc,[t.display,"-geometry",p,"-depth","24","-nolisten","tcp","-auth",t.xauthority,"-rfbport","-1","-rfbunixpath",t.rfbSocket,"-SecurityTypes","None","-UseBlacklist=0","-AlwaysShared","-desktop","Reason"],o);else R(D.xvfb,[t.display,"-screen","0",`${p}x24`,"-nolisten","tcp","-auth",t.xauthority],o);if(!await h(()=>x(X,!1),A)||D.xvnc&&!await h(()=>x({path:t.rfbSocket},!0),A))throw new r("display_unavailable","Reason could not start the virtual display.");R(D.openbox,["--config-file",i.openboxConfig],o)}if(await S(i,o),!await oe(D.x11vnc,t,c,"x11vnc.log",o))throw new r("display_unavailable","Reason could not start the desktop server.");return await f()}function J(e,D,c){let d={HOME:I(e,"home"),PATH:"/usr/local/bin:/usr/bin:/bin",DISPLAY:D.display,XAUTHORITY:D.xauthority};if(c)d.PULSE_SERVER=Kt(zo(I(e,"pulse")));return d}async function oe(e,D,c,d,t){if(await x({path:D.rfbSocket},!0))return!0;ae(D.rfbSocket,{force:!0});let n=await R(e,["-display",D.display,"-auth",D.xauthority,"-rfbport","0","-rfbportv6","-1","-unixsock",D.rfbSocket,"-nopw","-forever","-shared","-noxdamage","-sb","0","-rfbversion","3.7","-quiet","-bg","-o",I(c,d)],t);if(n!==null&&n!==0)return!1;return await h(()=>x({path:D.rfbSocket},!0),A)}async function Ze(){let e=["DISPLAY","XAUTHORITY","WAYLAND_DISPLAY","XDG_SESSION_TYPE"],D=(c)=>Object.fromEntries(e.flatMap((d)=>c[d]?[[d,c[d]]]:[]));if(process.env.DISPLAY)return D(process.env);try{let c=await new Promise((d,t)=>de("systemctl",["--user","show-environment"],{encoding:"utf8",timeout:2000},(n,a)=>n?t(n):d(a)));return D(Object.fromEntries(c.split(`
145
- `).flatMap((d)=>{let t=d.indexOf("=");return t>0?[[d.slice(0,t),d.slice(t+1)]]:[]})))}catch{return{}}}var te=new Set;async function Ve(e,D,c){let d=await Ze(),t=/^:(\d+)(?:\.\d+)?$/.exec(d.DISPLAY??"")?.[1];if(!t||`:${t}`===L||d.WAYLAND_DISPLAY||d.XDG_SESSION_TYPE==="wayland")return null;let n={display:`:${t}`,xauthority:d.XAUTHORITY??I(e,".Xauthority"),rfbSocket:I(D,`rfb-${t}.sock`)},a=`${n.display} ${n.xauthority}`;if(te.has(a)||!await x({path:`/tmp/.X11-unix/X${t}`},!1))return null;let o={HOME:e,PATH:"/usr/local/bin:/usr/bin:/bin",DISPLAY:n.display,XAUTHORITY:n.xauthority};if(await oe(c,n,D,`x11vnc-${t}.log`,o))return{...n,sound:null};return te.add(a),process.stderr.write(`Reason worker: your screen ${n.display} could not be served; using the virtual desktop
146
- `),null}var ie="look";function fe(e){try{return rs(ne(I(e,ie),"utf8").trim())??"reason"}catch{return"reason"}}function Q(e,D,c,d,t=fe(e)){let n=`chromium --no-first-run --no-default-browser-check${process.geteuid?.()===0?" --no-sandbox":""} %U`,a=[["terminal","xterm"],["files","pcmanfm"]].filter(([,i])=>!ce(`/usr/bin/${i}`)).map(([i])=>i),o=`${n.replace(/ %U$/,"")} --app=file://${I(d,".reason","workspace")}/`,f=$e({root:e,display:D,screen:c,browserExec:n,absent:a,look:t,filesViewerExec:o});for(let i of["","openbox","tint2","picom"])Te(I(e,i));N(I(e,ie),`${t}
147
- `,{mode:384});for(let[i,X]of Object.entries(f.files))N(I(e,i),X,{mode:384});for(let[i,X]of Object.entries(De))N(I(e,`ara-${i}`),ne(X),{mode:384});return{root:e,openboxConfig:I(e,"openbox","rc.xml"),start:f.start}}function S(e,D){return Ie(e.root,[...e.start,"openbox --reconfigure >/dev/null 2>&1 || true"],D)}function Ie(e,D,c){let d=[`ROOT=${JSON.stringify(e)}`,...D].join(`
148
- `);return new Promise((t)=>{let n=se("/bin/sh",["-c",d],{stdio:"ignore",env:{...c,PATH:"/usr/bin:/bin"}}),a=setTimeout(()=>{n.kill(),t()},A);n.once("error",()=>{clearTimeout(a),t()}),n.once("exit",()=>{clearTimeout(a),t()})})}var ze=2073600,We=320;function je(e,D){let c=Math.min(1,Math.sqrt(ze/(e.width*e.height))),d=(t,n)=>Math.min(Math.floor(n/8)*8,Math.max(We,Math.round(t*c/8)*8));return{width:d(e.width,D.width),height:d(e.height,D.height)}}function k(e,D,c){return new Promise((d)=>de(e,D,{env:c,encoding:"utf8",timeout:5000},(t,n)=>d(t?null:n)))}function pe(e){let D=/current (\d+) x (\d+), maximum (\d+) x (\d+)/.exec(e),c=e.split(`
149
- `),d=c.findIndex((n)=>/^\S+ connected/.test(n));if(!D||d<0)return null;let t=[];for(let n of c.slice(d+1)){let a=/^\s+(\d+x\d+)\s/.exec(n);if(!a)break;t.push(a[1])}return{current:{width:Number(D[1]),height:Number(D[2])},maximum:{width:Number(D[3]),height:Number(D[4])},output:c[d].split(" ")[0],modes:t}}async function Ue(e,D,c){if(e.display!==L)return null;let d={PATH:"/usr/bin:/bin",DISPLAY:e.display,XAUTHORITY:e.xauthority},t=(f)=>k("xrandr",f,d),n=pe(await t(["--query"])??"");if(!n||n.maximum.width<=n.current.width&&n.maximum.height<=n.current.height)return null;let a=je(D,n.maximum);if(a.width===n.current.width&&a.height===n.current.height)return{size:a,changed:!1};let o=`${a.width}x${a.height}`;if(!n.modes.includes(o)){if(await t(["--newmode",o,"60",...[a.width,a.width,a.width,a.width,a.height,a.height,a.height,a.height].map(String)]),await t(["--addmode",n.output,o])===null)return null}return c(),await t(["--output",n.output,"--mode",o])===null?null:{size:a,changed:!0}}async function er(e,D){let c=s(),d=T({home:c});if(!d)return;let t=I(d.root,"display"),n=J(t,e,d.pulseaudio);await S(Q(I(t,"theme"),e.display,D,c),n);let a=D.width-B*2,o=D.height-B-P;await k("xdotool",["search","--onlyvisible","--class","Chromium","windowsize","%@",String(a),String(o),"windowmove","%@",String(B),String(B)],{...n,PATH:"/usr/bin:/bin"})}var g=Promise.resolve();function rr(e,D,c=()=>{}){let d=g.then(()=>Ue(e,D,c));return g=d.then((t)=>t?.changed?er(e,t.size):void 0).catch(()=>{}),d.then((t)=>t?.size??null,()=>null)}function Dr(e,D){if(e.display!==L)return Promise.resolve();let c=g.then(async()=>{let d=s(),t=T({home:d});if(!t)return;let n=I(t.root,"display"),a=I(n,"theme");if(fe(a)===D)return;let o=J(n,e,t.pulseaudio),f=pe(await k("xrandr",["--query"],{PATH:"/usr/bin:/bin",DISPLAY:e.display,XAUTHORITY:e.xauthority})??"");await S(Q(a,e.display,f?.current??u,d,D),o)});return g=c.catch(()=>{}),c.catch(()=>{})}async function sn(e,D={}){let c=D.now??Date.now,d=Me(e.payload,c());if(e.signal.throwIfAborted(),!d.video)throw new r("display_video_required","Reason desktops stream as video now; this request came without it.");let t=D.platform??process.platform;if(t!=="linux"&&t!=="darwin"&&t!=="win32")throw new r("display_video_unsupported","This machine does not serve desktop video.");let{video:n,look:a}=d,o=(D.video?.desktop??(t==="darwin"?async()=>qo:t==="win32"?async()=>Wo:async()=>{let f=await Ft();if(a)await Dr(f,a);return f}))();return await $r(e.signal,d,D,c,(f)=>Vo(f,{request:n,desktop:o,...d.viewer?{viewer:d.viewer}:{},viewerSameNetwork:d.viewer_same_network===!0},{resizeDesktop:rr,...D.video}),(f)=>Rn({type:"error",code:f}))}function $r(e,D,c,d,t,n){let a=d();return new Promise((o,f)=>{let i=null,X=!1,p=!1,_,K,y,F=!1,l=null,E=(b)=>{if(p)return;if(l)b=l.outcome;p=!0,clearTimeout(_),clearTimeout(K),e.removeEventListener("abort",C),y?.close();try{i?.close(1000,"display_session_over")}catch{}if("error"in b){f(b.error);return}o({reason:b.reason,...y?.summary(),duration_ms:Math.max(0,d()-a)})},q=()=>E({error:new r("display_relay_unavailable","Reason could not reach the desktop relay.")}),C=()=>{let b=e.reason;E({error:b instanceof r?b:new r("cancelled","Reason closed the desktop session.")})},w=()=>{if(!l||!i)return;let{outcome:b}=l,H=!("error"in b)?b.reason:b.error instanceof r?b.error.code:"display_unavailable";if(!l.told)try{i.send(n(H))}catch{}E(b)};if(y=t({get done(){return p||l!==null},get open(){return X&&!p&&l===null},get bufferedAmount(){return i?.bufferedAmount??0},send(b){if(p||l||!X||!i)return;try{i.send(b)}catch{E({reason:"relay_closed"})}},end:(b)=>{if(p||l)return;if(!("error"in b)&&F&&X){E(b);return}if(l={outcome:b,told:!("error"in b)&&X},F&&X)w()}}),p){y.close();return}if(e.aborted){C();return}e.addEventListener("abort",C,{once:!0}),_=setTimeout(()=>E({reason:"session_expired"}),Math.max(1,Date.parse(D.expires_at)-d())),K=setTimeout(()=>E({reason:"viewer_absent"}),c.viewerWaitMs??Qe);try{i=(c.connect??_i)(D.relay_url,(c.loadProxy??Se)()?.url)}catch{q();return}i.binaryType="arraybuffer",i.onopen=()=>{if(p||!i)return;X=!0,y?.opened()},i.onmessage=(b)=>{if(p)return;let H=b.data,G=H instanceof ArrayBuffer?new Uint8Array(H):ArrayBuffer.isView(H)?new Uint8Array(H.buffer,H.byteOffset,H.byteLength):null;if(!G||G.byteLength===0)return;if(clearTimeout(K),F=!0,l){w();return}y?.received(G)},i.onclose=()=>{if(p)return;if(!X){q();return}E({reason:"relay_closed"})},i.onerror=()=>{if(p||X)return;q()}})}
150
- export{on,No,Te,Ft,sn};
@@ -1,12 +0,0 @@
1
- // @bun
2
- import"./vm-hands-entry-lite-71ebge0c.js";import"./vm-hands-entry-lite-9g52kxyj.js";import"./vm-hands-entry-lite-jpvmkce5.js";import"./vm-hands-entry-lite-krpqqx12.js";import{Ze,Yr,li,Qe}from"./vm-hands-entry-lite-vkhacd00.js";import"./vm-hands-entry-lite-q9djb28r.js";import"./vm-hands-entry-lite-v4hr9x9h.js";import"./vm-hands-entry-lite-57ajjwmh.js";import"./vm-hands-entry-lite-z0ht62s4.js";import"./vm-hands-entry-lite-2rgf8866.js";import"./vm-hands-entry-lite-weqam12f.js";import"./vm-hands-entry-lite-q9s1e2y1.js";import"./vm-hands-entry-lite-pxtycfdv.js";import"./vm-hands-entry-lite-zh6ncdjn.js";import{jn,Hn,Fr,jr}from"./vm-hands-entry-lite-9yfmkd1f.js";import"./vm-hands-entry-lite-0wb1n769.js";import"./vm-hands-entry-lite-yvws5zpx.js";import"./vm-hands-entry-lite-hs6sdn60.js";import"./vm-hands-entry-lite-zawytz09.js";import"./vm-hands-entry-lite-8xv6c0rm.js";import{spawn as Me}from"child_process";import{chmodSync as Le,chownSync as Te,existsSync as E,lstatSync as ee,mkdirSync as J,mkdtempSync as We,readdirSync as X,readFileSync as k,realpathSync as He,rmdirSync as pe,rmSync as ze,writeFileSync as B}from"fs";import{basename as Ue,dirname as Be,join as d}from"path";import{readFileSync as ae,readlinkSync as ce}from"fs";import{relative as Ne}from"path";var ue=16;function le(e){return e.replace(/\\([0-7]{3})/g,(r,t)=>String.fromCharCode(Number.parseInt(t,8)))}function De(e){let r=[];for(let t of e.split(`
3
- `)){let n=t.split(" ");if(n.length<10||!/^\d+:\d+$/.test(n[2]))continue;r.push({device:n[2],root:le(n[3]),mountPoint:le(n[4])})}return r}function Ae(e,r,t){let n=e.replace(/\/+$/,"")||"/",c=(m)=>n==="/"||m===n||m.startsWith(`${n}/`),o=(m)=>new Map(De(m).filter((_)=>c(_.mountPoint)).map((_)=>[`${_.mountPoint}\x00${_.device}\x00${_.root}`,_.mountPoint])),l=o(r),p=o(t),b=(m)=>Ne(n,m)||".",P=[...l].filter(([m])=>!p.has(m)).map(([,m])=>b(m)),x=[...p].filter(([m])=>!l.has(m)).map(([,m])=>b(m));return{missing:P,extra:x,referenceCount:l.size,ownCount:p.size}}function de(e,r,t,n="/proc"){let c,o,l=null;try{c=ae(`${n}/1/mountinfo`,"utf8"),o=ae(`${n}/self/mountinfo`,"utf8")}catch(_){let O=_&&typeof _==="object"&&"code"in _&&typeof _.code==="string"?_.code:"unreadable";r("vm_hands.mount_check_unavailable",{code:O});return}try{l=ce(`${n}/1/ns/mnt`)===ce(`${n}/self/ns/mnt`)}catch{}let{missing:p,extra:b,referenceCount:P,ownCount:x}=Ae(e,c,o),m={reference_count:P,own_count:x,missing_count:p.length,extra_count:b.length,same_namespace:l};if(b.length)r("vm_hands.mount_extra",{...m,extra:b.slice(0,ue)});if(p.length)throw r("vm_hands.mount_mismatch",{...m,missing:p.slice(0,ue)}),t(`${p.length} mount(s) under the Session root are missing from vm-hands' namespace`)}var ve="/sys/fs/cgroup/reason-payload",M="vm-hands",Fe="/run/ara-srt/fallbacks.jsonl",oe="/reason-person",Ke="/reason-workload",je="surface",ne=5000,Ge=1e4,fe="__VM_HANDS_PROOF_DIR__",Ee="__VM_HANDS_PROBE_NONCE__";class w extends Error{code;constructor(e,r){super(r);this.code=e}}function Ve(e,r){if(!/^[0-9a-f-]{36}$/i.test(r))throw new w("vm_hands_bind_invalid","bad bind id");return d(e,M,`b-${r.toLowerCase()}`)}var Je=5000,be=(e)=>`'${e.replaceAll("'","'\\''")}'`;function Xe(e,r){if(!r||!/^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i.test(r))return e;let t=d(Be(e),r.toLowerCase());return Ue(e).toLowerCase()===r.toLowerCase()?e:t}function yn(e){let r=e.cgroup??ve,t=e.init.layout.payload_uid,n=e.init.workload_ended!==!0,c=(s)=>z(s,oe)||n&&z(s,Ke),o=e.log??(()=>{}),l=(s)=>Xe(e.init.layout.session_root,s),p=new Map,b=new Map,P=0,x=()=>{try{let s=k("/run/ara-srt/starts.jsonl","utf8"),i=s.slice(P>s.length?0:P).split(`
4
- `).filter(Boolean);P=s.length;let u=i.map((f)=>{try{return Number(JSON.parse(f).elapsed_ms)||0}catch{return 0}});if(u.length)o("vm_hands.srt_server_starts",{count:u.length,elapsed_ms:u.slice(0,8)})}catch{}},m=null,_=!1,O=e.srtCgroup??"/sys/fs/cgroup/reason-srt",I=()=>{m??=me()},R=0,F=()=>{try{let s=k(Fe,"utf8"),i=s.slice(R>s.length?0:R);R=s.length;let u=i.split(`
5
- `).filter(Boolean).slice(0,1000);if(!u.length)return null;let f={},g=0;for(let S of u)try{let h=JSON.parse(S),y=typeof h.code==="string"&&/^[a-z_]{1,40}$/.test(h.code)?h.code:"other";if(f[y]=(f[y]??0)+1,typeof h.elapsed_ms==="number")g=Math.max(g,h.elapsed_ms)}catch{f.unparsed=(f.unparsed??0)+1}return o("vm_hands.srt_fallbacks",{count:u.length,codes:f,max_elapsed_ms:g}),{count:u.length,codes:f,max_elapsed_ms:g}}catch{return null}},U=(s,i,u)=>Ce(s,i,u),K=(s)=>(i,u,f)=>Me("/bin/sh",["-c",`echo $$ > ${be(d(s,"cgroup.procs"))} || exit 125; exec "$@"`,"vm-hands-join",i,...u],f),Ce=K(d(r,M)),j=d(r,M,"probe"),T=(s)=>Ve(r,s),Oe=(s)=>{let i=T(s);try{J(i,{mode:493})}catch(u){if(!(u&&typeof u==="object"&&("code"in u)&&u.code==="EEXIST"))throw new w("vm_hands_bind_failed","bind cgroup")}return i},xe=(s)=>{try{pe(T(s))}catch{}},W=e.prespawn?Yr({spawnProcess:U,...e.relayDependencies?.sourceEntrypoint?{sourceEntrypoint:e.relayDependencies.sourceEntrypoint}:{},log:(s,i)=>o(s,i??{})}):null;W?.arm();let Y=W?setInterval(()=>{W.arm()},Je):null;Y?.unref?.();let q=new Set;async function G(s){let i=p.get(s);if(p.delete(s),!i)return;i.abort.abort(),await i.done}return{bindCgroup:T,async startExecutor(s){if(I(),b.set(s.bindId,me()),_=!0,!s.claim)throw new w("vm_hands_bind_invalid","an executor needs the claim it serves");await G(s.bindId);let{claim:i,bindId:u}=s,f=Oe(u),g=i.owner;if(!g||typeof g.device_id!=="string"||typeof i.root_id!=="string")throw new w("vm_hands_bind_invalid","claim without its owner Device or root");let S=new AbortController,h,y,N=new Promise((a,v)=>{h=a,y=v}),D,C=new Promise((a)=>{D=a}),H=Qe({headless:!0,hostExecution:!0,runtimeDirectory:e.runtimeDirectory,managedPty:{version:1,startupVerified:!0},deviceIdentity:{deviceId:g.device_id,rootId:i.root_id,apiOrigin:e.apiOrigin},claimOwner:i.owner,root:e.root,runId:i.run_id,operationId:i.operation_id,attemptId:i.attempt_id,payload:Object.fromEntries(Object.entries(i.payload).filter(([a])=>!a.startsWith("vm_hands_"))),signal:S.signal,...s.workspaceGrant?{workspaceGrant:s.workspaceGrant}:{},emitEvent:async(a,v)=>{if(a==="hands.ready"){h(v);return}if(a==="hands.started"||a==="hands.stopped"||a==="hands.failed")return;await e.forward(u,a,v)}},{...e.relayDependencies,spawnWorker:(a)=>K(f)(a.command,a.args,a.options),...W?{takePrespawnedWorker:(a)=>{let v=W.take(a);if(!v?.pid)return v;try{return B(d(f,"cgroup.procs"),String(v.pid)),v}catch{try{v.kill("SIGKILL")}catch{}return null}},adoptSpawnedWorker:W.adopt}:{}}).then(()=>{D("executor_stopped")},(a)=>{let v=a&&typeof a==="object"&&"code"in a?String(a.code):"executor_failed";y(new w(v,a instanceof Error?a.message:String(a))),D(v)}).finally(()=>y(new w("vm_hands_executor_exited","executor ended before it was ready")));if(p.set(u,{abort:S,done:H,exited:C,operationId:i.operation_id,runId:i.run_id,expiresAtMs:Date.parse(String(i.payload.expires_at??""))||0}),q.delete(u))G(u).catch(()=>{return});let A=await N,V=A.executor_launch_id;if(typeof V!=="string")throw new w("vm_hands_bind_failed","executor ready without a launch id");return{launchId:V,readyData:A,applied:{hands_confinement:typeof i.payload.hands_confinement==="string"?i.payload.hands_confinement:null,browser_egress:i.payload.browser_egress??null}}},takeSrtFallbacks:F,executorExited(s){return p.get(s)?.exited??new Promise(()=>{})},abortExecutor(s){if(!p.has(s)){q.add(s);return}G(s).catch(()=>{return})},freezeBind(s){let i=T(s);if(E(d(i,"cgroup.freeze")))B(d(i,"cgroup.freeze"),"1")},async killAndVerifyPayload(s){if(s?.bindId)q.delete(s.bindId);let i=new Set(s?.keep??[]);if(await Ie(s?.bindId??null,i,s?.own===!0),i.size)return;if((_||e.srtWarmLate?.()===!0)&&E(d(O,"cgroup.events")))x(),await re(O,Date.now()+ne,"srt"),e.onSrtReset?.();_=!1},async killProbe(){let s=Date.now()+ne;if(E(d(j,"cgroup.events"))){await re(j,s,"probe");try{pe(j)}catch{}}let i=ie(process.pid);if(i===null)throw new w("vm_hands_kill_unverified","agent start time unreadable");await Ye(r,i,s);let u=(g)=>{let S=ie(g);return S!==null&&S<=i},f=_e(t).filter((g)=>u(g)&&!c(g));if(f.length)throw o("vm_hands.kill_survivors",{pids:f.slice(0,16),at:"attest",...ge(f)}),new w("vm_hands_kill_unverified",`${f.length} payload-uid process(es) from before this agent`);if(m!==null){let g=[r,d(r,M)].map((y)=>y.replace(/^\/sys\/fs\/cgroup/,"")),S=O.replace(/^\/sys\/fs\/cgroup/,""),h=he(m).filter((y)=>y!==process.pid&&!c(y)&&!z(y,"/reason-vm-hands")&&!z(y,S)&&!g.some((N)=>te(y,N)));if(h.length&&_)throw o("vm_hands.kill_strays",{strays:se(h),at:"attest"}),new w("vm_hands_kill_unverified",`${h.length} process(es) the run started survived it`);if(h.length)o("vm_hands.attest_concurrent",{processes:se(h),count:h.length});m=null}},async runProbe({nonce:s,script:i}){if(I(),!i.includes(fe))throw new w("vm_hands_probe_failed","probe names no proof directory");let u=e.proofParent??"/tmp/reason-vm-hands-proof";J(u,{mode:457,recursive:!0});let f=ee(u);if(f.isSymbolicLink()||!f.isDirectory()||f.uid!==(process.getuid?.()??-1)||(f.mode&4095)!==457)throw new w("vm_hands_probe_failed","proof parent is not root's 0711 directory");let g=We(d(u,"p-")),S=!1;try{if(!/^[A-Za-z0-9/._-]+$/.test(g)||!/^[A-Za-z0-9_-]{1,128}$/.test(s))throw new w("vm_hands_probe_failed","proof directory path or nonce");Te(g,t,t),Le(g,448);let h=ee(g).ino;try{J(j,{mode:493})}catch(C){if(!(C&&typeof C==="object"&&("code"in C)&&C.code==="EEXIST"))throw new w("vm_hands_probe_failed","probe cgroup")}let y=K(j)("/bin/bash",["-c",i.replaceAll(fe,g).replaceAll(Ee,s)],{cwd:"/",env:{PATH:"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},stdio:["ignore","pipe","ignore"]}),N="";y.stdout?.on("data",(C)=>{if(N.length<16384)N+=C.toString("utf8").slice(0,16384-N.length)});let D=await new Promise((C)=>{let H=setTimeout(()=>{S=!0,y.kill("SIGKILL"),C(124)},Ge);y.once("error",()=>{clearTimeout(H),C(127)}),y.once("close",(A)=>{clearTimeout(H),C(A??1)})});return o("vm_hands.probe",{nonce_len:s.length,exit_code:D}),{exitCode:D,markers:N,proofDirInode:h}}finally{if(!S)ze(g,{recursive:!0,force:!0})}},restatLayout(s){let i=l(s),u=i===e.init.layout.session_root?e.init.layout.alias:d(i,"repo"),f="invalid";try{li(i),f="0:0:755"}catch{}let g=!1,S=-1;try{let h=ee(u);S=h.uid,g=f==="0:0:755"&&u===d(i,"repo")&&!h.isSymbolicLink()&&h.isDirectory()&&He(u)===u&&h.uid===t}catch{}return{root_mode:f,alias_ok:g,owner_uid:S}},verifyMounts(s){let i=l(s);try{de(i,o,(u)=>new w("vm_hands_mount_mismatch",u))}catch(u){if(i!==e.init.layout.session_root&&u instanceof w&&u.code==="vm_hands_mount_mismatch"){o("vm_hands.member_mount_mismatch_served",{});return}throw u}},installEnvironment(s,i){let u=p.get(s);if(!u)throw new w("environment_unavailable","no executor owns an environment");return Ze({root:e.root,operationId:u.operationId,payload:i}).installed_revision},async stop(){if(Y)clearInterval(Y);W?.close(),await Promise.all([...p.keys()].map((s)=>G(s)))}};function $e(){try{return X(d(r,M),{withFileTypes:!0}).filter((s)=>s.isDirectory()&&/^b-[0-9a-f-]{36}$/.test(s.name)).map((s)=>s.name)}catch{return[]}}async function Ie(s,i,u=!1){let f=new Set([...i].map((S)=>S.toLowerCase())),g=tn();try{await sn();let S=Date.now()+ne,h=new Set($e().filter((a)=>!f.has(a.slice(2))).map((a)=>a.slice(2)));if(s)h.add(s.toLowerCase());let y=null;for(let a of h){let v=G(a).catch(()=>{return}),Q=b.get(a);if(Q!==void 0)y=y===null?Q:Math.min(y,Q);if(E(d(T(a),"cgroup.events")))await re(T(a),S,"bind");await v}let N=[...f].map((a)=>T(a).replace(/^\/sys\/fs\/cgroup/,"")),D=["/",...[r,d(r,M)].map((a)=>a.replace(/^\/sys\/fs\/cgroup/,""))],C=O.replace(/^\/sys\/fs\/cgroup/,""),H=(a)=>c(a)||N.some((v)=>z(a,v))||D.some((v)=>te(a,v)),A=u?[]:_e(t).filter((a)=>!H(a));if(A.length)throw o("vm_hands.kill_survivors",{pids:A.slice(0,16),beside:f.size,...ge(A)}),new w("vm_hands_kill_unverified",`${A.length} payload-uid process(es) outside a live bind`);let V=(a)=>!H(a)&&!z(a,"/reason-vm-hands")&&!z(a,C)&&!D.some((v)=>te(a,v));if(y!==null){let a=he(y).filter((v)=>v!==process.pid&&V(v));if(a.length)throw o("vm_hands.kill_strays",{strays:se(a),beside:f.size}),new w("vm_hands_kill_unverified",`${a.length} process(es) the run started survived it`)}for(let a of h)b.delete(a),xe(a)}finally{g()}}}function ie(e,r="/proc"){try{let t=k(d(r,String(e),"stat"),"utf8"),n=Number(t.slice(t.lastIndexOf(")")+2).split(" ")[19]);return Number.isFinite(n)?n:null}catch{return null}}function Se(e,r="/proc"){try{let t=k(d(r,String(e),"stat"),"utf8"),n=Number(t.slice(t.lastIndexOf(")")+2).split(" ")[1]);return Number.isFinite(n)?n:null}catch{return null}}async function Ye(e,r,t){try{B(d(e,"cgroup.freeze"),"1")}catch(n){throw new w("vm_hands_kill_unverified",`payload cgroup.freeze: ${n instanceof Error?n.message:String(n)}`)}try{for(;;){let n=Pe(e).filter((o)=>ke(o,e)),c=new Set(n.filter((o)=>{let l=ie(o);return l!==null&&l<=r}));for(let o=!0;o;){o=!1;for(let l of n){if(c.has(l))continue;let p=Se(l);if(p!==null&&c.has(p))c.add(l),o=!0}}if(c.size===0)return;if(Date.now()>t)throw new w("vm_hands_kill_unverified",`${c.size} previous-boot process(es) survived`);for(let o of c)try{process.kill(o,"SIGKILL")}catch{}await new Promise((o)=>setTimeout(o,10))}}finally{try{B(d(e,"cgroup.freeze"),"0")}catch{}}}function te(e,r,t="/proc"){try{return k(d(t,String(e),"cgroup"),"utf8").split(`
6
- `).find((c)=>c.startsWith("0::"))?.slice(3)===r}catch{return!1}}function z(e,r,t="/proc"){try{let c=k(d(t,String(e),"cgroup"),"utf8").split(`
7
- `).find((o)=>o.startsWith("0::"))?.slice(3)??"";return c===r||c.startsWith(`${r}/`)}catch{return!1}}var qe=100;function me(){try{return Math.floor(Number(k("/proc/uptime","utf8").split(" ")[0])*qe)}catch{return 0}}async function re(e,r,t){try{B(d(e,"cgroup.freeze"),"1")}catch(n){throw new w("vm_hands_kill_unverified",`${t} cgroup.freeze: ${n instanceof Error?n.message:String(n)}`)}while(!/^populated 0$/m.test(k(d(e,"cgroup.events"),"utf8"))){if(Date.now()>r)throw new w("vm_hands_kill_unverified",`${t} cgroup still populated (left frozen)`);for(let n of Pe(e)){if(!ke(n,e))continue;try{process.kill(n,"SIGKILL")}catch{}}await new Promise((n)=>setTimeout(n,10))}try{B(d(e,"cgroup.freeze"),"0")}catch(n){throw new w("vm_hands_kill_unverified",`${t} cgroup thaw: ${n instanceof Error?n.message:String(n)}`)}}function ke(e,r){let t=r.replace(/^\/sys\/fs\/cgroup/,"")||"/",n="";try{n=k(`/proc/${e}/cgroup`,"utf8").split(`
8
- `).find((o)=>o.startsWith("0::"))??""}catch{return!1}let c=n.slice(3);return c===t||c.startsWith(`${t}/`)}function Pe(e){let r=[],t=(n)=>{try{for(let o of k(d(n,"cgroup.procs"),"utf8").split(`
9
- `))if(/^\d+$/.test(o))r.push(Number(o))}catch{}let c=[];try{c=X(n,{withFileTypes:!0}).filter((o)=>o.isDirectory()).map((o)=>o.name)}catch{}for(let o of c)t(d(n,o))};return t(e),r}function ge(e,r="/proc"){let t=new Map;for(let c of e.slice(0,64)){let o=`${en(c,r)}:${nn(c,r)}`;t.set(o,(t.get(o)??0)+1)}let n=[...t.entries()].sort((c,o)=>o[1]-c[1])[0]?.[0]??"none";return{count:e.length,cause:n}}function en(e,r){let t;try{t=(k(d(r,String(e),"cgroup"),"utf8").split(`
10
- `).find((n)=>n.startsWith("0::"))??"").slice(3)}catch{return"gone"}if(t==="/")return"root";if(t==="/reason-payload")return"payload";if(t.startsWith("/reason-payload/vm-hands/b-"))return"payload_bind";if(t==="/reason-payload/vm-hands"||t.startsWith("/reason-payload/vm-hands/"))return"payload_vm_hands";if(t.startsWith("/reason-payload/"))return"payload_sub";if(t==="/reason-person"||t.startsWith("/reason-person/"))return"person";if(t==="/reason-srt"||t.startsWith("/reason-srt/"))return"srt";if(t==="/reason-vm-hands"||t.startsWith("/reason-vm-hands/"))return"vm_hands";if(t==="/reason-workload"||t.startsWith("/reason-workload/"))return"workload";return"other"}function nn(e,r){let t;try{t=k(d(r,String(e),"stat"),"utf8")}catch{return"gone"}let n=t.slice(t.lastIndexOf(")")+2,t.lastIndexOf(")")+3);return{R:"running",S:"sleeping",D:"disk",Z:"zombie",T:"stopped",t:"stopped",I:"idle"}[n]??"other"}function se(e,r="/proc"){return e.slice(0,16).map((t)=>{let n="?",c="?";try{n=k(d(r,String(t),"comm"),"utf8").trim().slice(0,32)}catch{}try{c=(k(d(r,String(t),"cgroup"),"utf8").split(`
11
- `).find((o)=>o.startsWith("0::"))??"").slice(3,120)}catch{}return{pid:t,comm:n,ppid:Se(t,r),cgroup:c}})}function he(e,r="/proc"){let t=[];for(let n of X(r)){if(!/^\d+$/.test(n))continue;let c;try{c=k(d(r,n,"stat"),"utf8")}catch{continue}let o=c.slice(c.lastIndexOf(")")+2).split(" "),l=Number(o[1]),p=Number(o[6]),b=Number(o[19]),P=(p&2097152)!==0||l===2||n==="2",x=(o[0]==="Z"||o[0]==="X")&&o[17]==="1";if(!P&&!x&&b>=e)t.push(Number(n))}return t}function _e(e,r="/proc"){let t=[];for(let n of X(r)){if(!/^\d+$/.test(n))continue;let c;try{c=k(d(r,n,"status"),"utf8")}catch{continue}if(/^State:\s+[ZX]/m.test(c)&&/^Threads:\s+1$/m.test(c))continue;let o=/^Uid:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/m.exec(c);if(o&&o.slice(1).some((l)=>Number(l)===e))t.push(Number(n))}return t}function ye(e="/proc/sys/kernel/yama/ptrace_scope"){try{return Number(k(e,"utf8").trim())>=1}catch{return!1}}var L=0,Re=[],Z=new Set;function tn(){L++;let e=!1;return()=>{if(e)return;if(e=!0,--L===0)for(let r of Re.splice(0))r()}}function rn(){return L===0?Promise.resolve():new Promise((e)=>{Re.push(e)})}async function we(){while(L>0)await rn()}async function sn(){let e=Date.now()+1000;while(Z.size&&Date.now()<e)await new Promise((r)=>setTimeout(r,2))}function on(e,r){let t=r.replace(/^\/sys\/fs\/cgroup/,"");Z.add(e);let n=()=>{let c="";try{c=k(`/proc/${e}/cgroup`,"utf8").split(`
12
- `).find((o)=>o.startsWith("0::"))??""}catch{Z.delete(e);return}if(c.slice(3)===t){Z.delete(e);return}setTimeout(n,1)};n()}function wn(e){let r={person:e.personCgroup??d("/sys/fs/cgroup",oe,M),model:e.payloadCgroup??d(ve,M),surface:e.surfaceCgroup??d("/sys/fs/cgroup",oe,M,je)},t=e.entry??process.argv[1]??"",n={},c=(l)=>l.startsWith("model:")&&e.bindCgroup?e.bindCgroup(l.slice(6)):r[l.startsWith("model")?"model":l==="surface"?"surface":"person"],o=(l)=>{let p=l.startsWith("model")?"model":l==="surface"?"surface":"person",b=new Map,P=String(e.payloadUid),x=String(e.payloadGid);if(p==="surface")try{J(c(l),{mode:493})}catch{}let m=p==="surface"?'exec "$@"':`exec /usr/bin/setpriv --no-new-privs --reuid=${P} --regid=${x} --clear-groups -- "$@"`,_=Bun.spawn(["/bin/sh","-c",`echo $$ > ${be(d(c(l),"cgroup.procs"))} || exit 125; ${m}`,"vm-hands-op-join",process.execPath,"--no-install",t,"--vm-hands-op-runner",...p==="person"?[jn]:[],...p==="surface"?[Hn,`${Fr}${P}`,`${jr}${e.surfaceDirectory??""}`]:[]],{cwd:"/",env:{PATH:process.env.PATH??"/usr/bin:/bin",BUN_BE_BUN:"1",HOME:p==="surface"?process.env.HOME||"/root":"/home/runner",...E("/bin/bash")?{SHELL:"/bin/bash"}:{}},stdio:["ignore","ignore","ignore"],ipc(I){let R=I;if(p==="surface"&&R.t==="readiness"){let U=I;e.log?.("vm_hands.surface_ready",{lanes:Object.keys(U.lanes??{}).filter((K)=>U.lanes[K]===!0),display_video:U.display_video===!0}),e.onSurfaceReadiness?.(U);return}let F=b.get(R.id);if(!F)return;if(R.t==="event"&&R.event)F.onEvent(R.event);if(R.t==="done")b.delete(R.id),F.done(R.completion??{status:"failed",error_code:"vm_hands_op_failed"})}});_.exited.then((I)=>{if(n[l]?.child===_)delete n[l];for(let[,R]of b)R.done({status:"failed",error_code:"vm_hands_op_runner_exited"});if(b.clear(),e.log?.("vm_hands.op_runner_exited",{kind:p,code:I}),p==="surface")e.onSurfaceReadiness?.(null)}),on(_.pid,c(l));let O={child:_,pending:b};return n[l]=O,O};return{run(l,p,b,P,x){if(!ye())return Promise.resolve({status:"failed",error_code:"vm_hands_ptrace_unprotected"});let m=l==="model"&&x&&e.bindCgroup?`model:${x.toLowerCase()}`:l,_=async()=>{while(!n[m]&&L>0)await we()};return _().then(async()=>{if(!n[m]&&L>0)await _()}).then(()=>new Promise((O)=>{if(!n[m]&&L>0){O({status:"failed",error_code:"vm_hands_op_runner_unavailable"});return}let I=n[m]??o(m);I.pending.set(p.id,{onEvent:b,done:O}),P.addEventListener("abort",()=>{try{I.child.send({t:"cancel",id:p.id})}catch{}},{once:!0});try{I.child.send({t:"op",...p})}catch{I.pending.delete(p.id),O({status:"failed",error_code:"vm_hands_op_runner_unavailable"})}}))},warm(l){if(!n[l]&&ye())we().then(()=>{if(!n[l]&&L===0)o(l)})},notify(l,p){let b=n[l];if(!b)return!1;try{return b.child.send(p),!0}catch{return!1}},stop(){for(let l of Object.keys(n))n[l]?.child.kill()}}}export{ve as VM_HANDS_PAYLOAD_CGROUP,M as VM_HANDS_PAYLOAD_JOIN,oe as VM_HANDS_PERSON_CGROUP,Ee as VM_HANDS_PROBE_NONCE_TOKEN,fe as VM_HANDS_PROOF_DIR_TOKEN,je as VM_HANDS_SURFACE_JOIN,Ke as VM_HANDS_WORKLOAD_CGROUP,w as VmHandsExecutorError,yn as createVmHandsExecutor,wn as createVmHandsOpRunners,se as describeProcesses,z as inCgroup,_e as payloadUidProcesses,he as processesStartedSince,ye as ptraceProtected,Pe as subtreePids,ge as survivorSummary,Ve as vmHandsBindCgroup,Xe as vmHandsSessionRoot};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{jn,Hn,Fr,jr,Hr,sl}from"./vm-hands-entry-lite-9yfmkd1f.js";export{jn as VM_HANDS_OP_RUNNER_PERSON_ARG,Hn as VM_HANDS_OP_RUNNER_SURFACE_ARG,jr as VM_HANDS_SURFACE_DIRECTORY_ARG,Hr as VM_HANDS_SURFACE_OPS,Fr as VM_HANDS_SURFACE_UID_ARG,sl as runVmHandsOpRunner};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Zi}from"./vm-hands-entry-lite-ms99mzp0.js";import"./vm-hands-entry-lite-0wb1n769.js";import"./vm-hands-entry-lite-8xv6c0rm.js";import"./vm-hands-entry-lite-krpqqx12.js";export{Zi as probeWorkerPreview};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{ne}from"./vm-hands-entry-lite-nn6zcvmp.js";import"./vm-hands-entry-lite-52qz0n30.js";import"./vm-hands-entry-lite-weqam12f.js";import"./vm-hands-entry-lite-8xv6c0rm.js";import"./vm-hands-entry-lite-krpqqx12.js";export{ne as configureWorkerSandbox};