@reason-machines/cli-linux-x64 0.2.415 → 0.2.418
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/reason +1 -1
- package/bin/runtime/srt/sandbox-runtime.mjs +38 -38
- package/bin/vm-hands/api-18d75dfn.js +2 -0
- package/bin/vm-hands/api-credentials-3vhge1ap.js +2 -0
- package/bin/vm-hands/connect-cli-pn1h0b08.js +2 -0
- package/bin/vm-hands/custom-endpoint-device-17t4efc4.js +2 -0
- package/bin/vm-hands/desktop-account-6sjrxy69.js +2 -0
- package/bin/vm-hands/device-workspace-s50q53sz.js +2 -0
- package/bin/vm-hands/{fsevents-ekt70rcc.js → fsevents-p3d8kd0p.js} +1 -1
- package/bin/vm-hands/hands-worker-source-kddz4y15.js +2 -0
- package/bin/vm-hands/{index-k8kcz8a3.js → index-wrw65904.js} +35 -35
- package/bin/vm-hands/install-receipt-ysa70fvh.js +2 -0
- package/bin/vm-hands/local-automation-7nc6cgjp.js +2 -0
- package/bin/vm-hands/local-capabilities-5f36fr9x.js +2 -0
- package/bin/vm-hands/local-desktop-users-cppjjr81.js +2 -0
- package/bin/vm-hands/local-display-mac-0qz3b627.js +2 -0
- package/bin/vm-hands/local-display-session-zg4dpnf1.js +2 -0
- package/bin/vm-hands/local-display-video-remg1c30.js +2 -0
- package/bin/vm-hands/local-managed-process-gjc8gvgb.js +2 -0
- package/bin/vm-hands/local-pty-session-rpk05ap5.js +2 -0
- package/bin/vm-hands/managed-runtime-f85h6h7f.js +2 -0
- package/bin/vm-hands/network-contract-trkxqc0w.js +2 -0
- package/bin/vm-hands/package-xqbhdf15.js +2 -0
- package/bin/vm-hands/permissions-bhbnb1bp.js +2 -0
- package/bin/vm-hands/reason-hands-protocol-xn3ddz70.js +2 -0
- package/bin/vm-hands/serve-service-58ea9cwx.js +2 -0
- package/bin/vm-hands/status-z9r8nq3y.js +10 -0
- package/bin/vm-hands/version-p0g28erd.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-bdhjpv7g.js → vm-hands-entry-lite-21qpxvt8.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-2nkj0dpx.js +539 -0
- package/bin/vm-hands/vm-hands-entry-lite-2wzsnnsp.js +3 -0
- package/bin/vm-hands/{vm-hands-entry-lite-8t9xssf9.js → vm-hands-entry-lite-3krzmhkk.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-k278g9kj.js → vm-hands-entry-lite-4vks5phw.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-1cwqa4jr.js → vm-hands-entry-lite-50zbqwkv.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-1rrb66r9.js → vm-hands-entry-lite-5dtfehjv.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-6aeea05q.js → vm-hands-entry-lite-60pg3wxj.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-9ay6f56v.js → vm-hands-entry-lite-6c67a3jc.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-txn44020.js → vm-hands-entry-lite-6wt5ja1k.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-zg36myyf.js → vm-hands-entry-lite-8r31b0ps.js} +4 -4
- package/bin/vm-hands/vm-hands-entry-lite-ah6fwqxp.js +128 -0
- package/bin/vm-hands/{vm-hands-entry-lite-ckv17tn8.js → vm-hands-entry-lite-aj139v8j.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-907pa7f9.js → vm-hands-entry-lite-avc65bd7.js} +6 -6
- package/bin/vm-hands/{vm-hands-entry-lite-9c95p6n9.js → vm-hands-entry-lite-beyyy1gz.js} +37 -37
- package/bin/vm-hands/{vm-hands-entry-lite-ab2m9erf.js → vm-hands-entry-lite-bx5zy5bd.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-pgb514h0.js → vm-hands-entry-lite-dk79tnax.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-ec9jemny.js +5 -0
- package/bin/vm-hands/{vm-hands-entry-lite-gvwdy3rf.js → vm-hands-entry-lite-fbhqfzbq.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-t7an5zg2.js → vm-hands-entry-lite-fcvf8md1.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-qysyf65v.js → vm-hands-entry-lite-g4zd2d5n.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-0xrsph3r.js → vm-hands-entry-lite-hbs3tpdg.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-f5e3dbgk.js → vm-hands-entry-lite-hk6trmwa.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-2hvbgp1n.js → vm-hands-entry-lite-hn76pcgk.js} +5 -5
- package/bin/vm-hands/vm-hands-entry-lite-j43nqe8y.js +452 -0
- package/bin/vm-hands/{vm-hands-entry-lite-89z488gz.js → vm-hands-entry-lite-jev771b3.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-eqgj4acy.js → vm-hands-entry-lite-jzz73e3f.js} +10 -10
- package/bin/vm-hands/vm-hands-entry-lite-m8nqnd9j.js +126 -0
- package/bin/vm-hands/vm-hands-entry-lite-mmdwr0mf.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-2wgdvb15.js → vm-hands-entry-lite-nefcet81.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-hj8n59y9.js → vm-hands-entry-lite-np07qyeq.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-1rtkf2xm.js → vm-hands-entry-lite-nzmkyezg.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-q0k6kx6d.js → vm-hands-entry-lite-pf5qtbj5.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-qxchbbew.js → vm-hands-entry-lite-ppmvge7n.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-m11j0f9q.js → vm-hands-entry-lite-rfz60hb3.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite-s3cg1dsk.js +52 -0
- package/bin/vm-hands/vm-hands-entry-lite-s4bharcb.js +9 -0
- package/bin/vm-hands/{vm-hands-entry-lite-88swf2qr.js → vm-hands-entry-lite-s5qkb1fk.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-cc2tgsqp.js → vm-hands-entry-lite-stmbekq0.js} +16 -16
- package/bin/vm-hands/{vm-hands-entry-lite-kq0qmsw8.js → vm-hands-entry-lite-svvysppj.js} +4 -4
- package/bin/vm-hands/{vm-hands-entry-lite-22kfyvnk.js → vm-hands-entry-lite-tdgtpx8e.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-b885gwfh.js → vm-hands-entry-lite-vpz54vwj.js} +6 -6
- package/bin/vm-hands/vm-hands-entry-lite-w8w451gj.js +4 -0
- package/bin/vm-hands/{vm-hands-entry-lite-09m2cdkw.js → vm-hands-entry-lite-wx4ax7wg.js} +3 -3
- package/bin/vm-hands/vm-hands-entry-lite-yretc2th.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-z76nfb19.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite-zp6naptr.js +3 -0
- package/bin/vm-hands/vm-hands-entry-lite.js +2 -2
- package/bin/vm-hands/vm-hands-executor-73b49jkg.js +11 -0
- package/bin/vm-hands/vm-hands-op-runner-ef9ts9c6.js +2 -0
- package/bin/vm-hands/vm-hands-runtime-8z6rx1fj.js +4 -0
- package/bin/vm-hands/worker-preview-readiness-w62n91kr.js +2 -0
- package/bin/vm-hands/worker-sandbox-2r5nseff.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-cjv8m2zy.js +0 -2
- package/bin/vm-hands/api-credentials-m5akr9fv.js +0 -2
- package/bin/vm-hands/connect-cli-d60gmgnx.js +0 -2
- package/bin/vm-hands/custom-endpoint-device-dkqb4rqy.js +0 -2
- package/bin/vm-hands/desktop-account-5v7x0ajx.js +0 -2
- package/bin/vm-hands/device-workspace-p9q9dckg.js +0 -2
- package/bin/vm-hands/hands-worker-source-cgrpm21b.js +0 -2
- package/bin/vm-hands/install-receipt-7vt2y2vh.js +0 -2
- package/bin/vm-hands/local-automation-4htjhv65.js +0 -2
- package/bin/vm-hands/local-capabilities-c04tbapa.js +0 -2
- package/bin/vm-hands/local-desktop-users-q886k0mm.js +0 -2
- package/bin/vm-hands/local-display-mac-w85956f1.js +0 -2
- package/bin/vm-hands/local-display-session-pkz7a5q9.js +0 -2
- package/bin/vm-hands/local-pty-session-5f50sqq0.js +0 -2
- package/bin/vm-hands/managed-runtime-ppypxbh9.js +0 -2
- package/bin/vm-hands/network-contract-9x9kc5vv.js +0 -2
- package/bin/vm-hands/package-78fkast4.js +0 -2
- package/bin/vm-hands/permissions-xt02c6dh.js +0 -2
- package/bin/vm-hands/reason-hands-protocol-2tnghj3b.js +0 -2
- package/bin/vm-hands/serve-service-wanptaqv.js +0 -2
- package/bin/vm-hands/status-gt7c4ke0.js +0 -10
- package/bin/vm-hands/version-bq5j7cqg.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-2wvsyggd.js +0 -540
- package/bin/vm-hands/vm-hands-entry-lite-463m6ejk.js +0 -458
- package/bin/vm-hands/vm-hands-entry-lite-8ns59paz.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-ewwx4fr3.js +0 -250
- package/bin/vm-hands/vm-hands-entry-lite-grtycq6y.js +0 -52
- package/bin/vm-hands/vm-hands-entry-lite-pmcz7j7t.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-qq9w7wq6.js +0 -3
- package/bin/vm-hands/vm-hands-entry-lite-rwxbhwky.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-vrqzr15t.js +0 -3
- package/bin/vm-hands/vm-hands-executor-7k9z9988.js +0 -11
- package/bin/vm-hands/vm-hands-op-runner-n8p81rwm.js +0 -2
- package/bin/vm-hands/vm-hands-runtime-bqsz7h0h.js +0 -4
- package/bin/vm-hands/worker-sandbox-smqj3mbe.js +0 -2
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{v,On,oo,Fr,In,ze,Dn,Nn}from"./vm-hands-entry-lite-eqgj4acy.js";import{Mn}from"./vm-hands-entry-lite-2hvbgp1n.js";import{kn}from"./vm-hands-entry-lite-f5e3dbgk.js";import{gt}from"./vm-hands-entry-lite-gvwdy3rf.js";import{vr}from"./vm-hands-entry-lite-1rtkf2xm.js";import{j}from"./vm-hands-entry-lite-q0k6kx6d.js";import{a}from"./vm-hands-entry-lite-89z488gz.js";import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{execFile as Cs,spawn as Ar}from"child_process";import{randomBytes as Ns}from"crypto";import{chmodSync as vs,existsSync as kr,lstatSync as Ls,mkdirSync as Ms,readFileSync as Qs,rmSync as Us,writeFileSync as at}from"fs";import{connect as Os}from"net";import{join as X}from"path";var St="./desktop-wallpaper-0pjhgyfk.jpg";var _t="./dock-browser-afp005mt.png";var wt="./dock-files-rywdm96b.png";var qt="./dock-terminal-s41cj1jp.png";var Et=`# Sets the X root window background and _XROOTPMAP_ID, as feh --bg-fill does.
|
|
3
|
-
# 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
|
-
`;var oe=32,Dt=76;function Vr(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>${oe}</x><y>${oe}</y></position>
|
|
67
|
-
<size><width>${e.width-oe*2}</width><height>${e.height-oe-Dt}</height></size>
|
|
68
|
-
</application>
|
|
69
|
-
</applications>
|
|
70
|
-
</openbox_config>`}var Kr=`# 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-terminal.desktop
|
|
90
|
-
launcher_item_app = /tmp/ara-files.desktop
|
|
91
|
-
`,Ir=`corner-radius = 12;
|
|
92
|
-
rounded-corners-exclude = [
|
|
93
|
-
"class_g = 'tint2'",
|
|
94
|
-
"window_type = 'dock'",
|
|
95
|
-
"window_type = 'desktop'"
|
|
96
|
-
];
|
|
97
|
-
backend = "xrender";
|
|
98
|
-
shadow = false;
|
|
99
|
-
fading = false;
|
|
100
|
-
vsync = false;
|
|
101
|
-
inactive-opacity = 1.0;
|
|
102
|
-
active-opacity = 1.0;
|
|
103
|
-
`,Zr="/tmp/ara-dock-browser.png",Yr=`[Desktop Entry]
|
|
104
|
-
Name=Chrome
|
|
105
|
-
Exec=chromium --no-sandbox %U
|
|
106
|
-
Icon=${Zr}
|
|
107
|
-
Type=Application
|
|
108
|
-
Categories=Network;WebBrowser;
|
|
109
|
-
`,zr=`[Desktop Entry]
|
|
110
|
-
Name=Terminal
|
|
111
|
-
Exec=bash -c "DISPLAY=:99 xterm -fa DejaVuSansMono -fs 11 -bg black -fg white"
|
|
112
|
-
Icon=/tmp/ara-dock-terminal.png
|
|
113
|
-
Type=Application
|
|
114
|
-
Categories=System;TerminalEmulator;
|
|
115
|
-
`,Hr=`[Desktop Entry]
|
|
116
|
-
Name=Files
|
|
117
|
-
Exec=bash -c "DISPLAY=:99 pcmanfm --no-desktop"
|
|
118
|
-
Icon=/tmp/ara-dock-files.png
|
|
119
|
-
Type=Application
|
|
120
|
-
Categories=System;FileManager;
|
|
121
|
-
`;var Tt={"wallpaper.jpg":St,"dock-browser.png":_t,"dock-terminal.png":qt,"dock-files.png":wt},en=Et,tn='set_wallpaper() { if command -v feh >/dev/null 2>&1; then feh --bg-fill "$1"; else python3 "$2" "$1"; fi; }';function Rt(e){let t=(p)=>p.replaceAll("DISPLAY=:99",`DISPLAY=${e.display}`).replaceAll("/tmp/ara-",`${e.root}/ara-`),n=new Set(e.absent??[]),o=Kr.split(`
|
|
122
|
-
`).filter((p)=>!(n.has("terminal")&&p.endsWith("/ara-terminal.desktop"))&&!(n.has("files")&&p.endsWith("/ara-files.desktop"))).join(`
|
|
123
|
-
`);return{files:{"openbox/rc.xml":Vr(e.screen),"tint2/tint2rc":t(o),"picom/picom.conf":Ir,...n.has("terminal")?{}:{"ara-terminal.desktop":t(zr)},...n.has("files")?{}:{"ara-files.desktop":t(Hr)},"ara-chromium.desktop":t(Yr).replace("chromium --no-sandbox %U",e.browserExec),"ara-set-root-wallpaper.py":en},start:['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"; }',tn,'[ ! -f "$ROOT/ara-wallpaper.jpg" ] || set_wallpaper "$ROOT/ara-wallpaper.jpg" "$ROOT/ara-set-root-wallpaper.py" || true','if ! alive tint2 && command -v tint2 >/dev/null 2>&1; then launch tint2 tint2 -c "$ROOT/tint2/tint2rc"; fi','if ! alive picom && command -v picom >/dev/null 2>&1; then launch picom picom --config "$ROOT/picom/picom.conf"; fi']}}import{createHash as Ft}from"crypto";import{once as dn}from"events";import{createWriteStream as bn,existsSync as vo,mkdirSync as Lo,mkdtempSync as Mo,readFileSync as ye,readdirSync as Qo,renameSync as Uo,realpathSync as xn,rmSync as yn,statSync as Fe,writeFileSync as Oo}from"fs";import{delimiter as Jo,dirname as $t,join as g}from"path";import{finished as mn}from"stream/promises";var $e="omljlfpmafedpplnpkkahegadhkimdje",Fi="https://chromewebstore.google.com/detail/reason/omljlfpmafedpplnpkkahegadhkimdje";var U={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"}},J={version:"155.0.8059.84",macArm64Sha256:"13b9e98ce56f5ce18e100a009f455c9285f399e7c9dc8a76fdf2f3a9755bb5f2",linux64Sha256:"cf0f049892dea22e6a6db26d47ed0d7776b7158edcbec4634086633df8bafcbc",win64Sha256:"507f2a031441d10c62b5e3d4e863f09ac1198a571c1419976cbd8387f639afde"};var ie={ocu:{url:`https://registry.npmjs.org/open-computer-use/-/open-computer-use-${U.ocu.version}.tgz`,sha256:"7c16a87c8cd357787b02c0ebd040dd5f93880c1fb51c1901caa2e0c05d063130",size_bytes:5844280},obu:{url:`https://registry.npmjs.org/open-browser-use/-/open-browser-use-${U.obu.version}.tgz`,sha256:"9386d8ce0a147b3f55e1807b68edf736836378807541c457c9b5f6ca2cabaa4e",size_bytes:21372018},extension:{url:`https://github.com/iFurySt/open-browser-use/releases/download/v${U.obu.version}/open-browser-use-chrome-extension-${U.obu.version}.zip`,sha256:"c9c07bec1175e12ea6985b0e7784a5ef01fd03f014b958224a1e17dcd838a241",size_bytes:31070}},F="pnbmoicbkopffjjgfgfglopechaiemkp";import{spawn as Me}from"child_process";import{createRequire as rn}from"module";import{join as nn}from"path";var sn=30000,on=1048576;function Ue(){return process.env.SystemRoot??"C:\\Windows"}function an(){return nn(Ue(),"System32","WindowsPowerShell","v1.0","powershell.exe")}var pn=String.raw`
|
|
124
|
-
$ErrorActionPreference = "Stop"
|
|
125
|
-
Add-Type -TypeDefinition @"
|
|
126
|
-
using System;
|
|
127
|
-
using System.Runtime.InteropServices;
|
|
128
|
-
public static class ReasonInput {
|
|
129
|
-
[StructLayout(LayoutKind.Sequential)] public struct MOUSEINPUT { public int dx; public int dy; public int mouseData; public uint dwFlags; public uint time; public IntPtr dwExtraInfo; }
|
|
130
|
-
[StructLayout(LayoutKind.Sequential)] public struct KEYBDINPUT { public ushort wVk; public ushort wScan; public uint dwFlags; public uint time; public IntPtr dwExtraInfo; }
|
|
131
|
-
[StructLayout(LayoutKind.Explicit)] public struct UNION { [FieldOffset(0)] public MOUSEINPUT mi; [FieldOffset(0)] public KEYBDINPUT ki; }
|
|
132
|
-
[StructLayout(LayoutKind.Sequential)] public struct INPUT { public uint type; public UNION u; }
|
|
133
|
-
[DllImport("user32.dll")] static extern uint SendInput(uint count, INPUT[] inputs, int size);
|
|
134
|
-
[DllImport("user32.dll")] public static extern bool SetProcessDPIAware();
|
|
135
|
-
[DllImport("user32.dll")] public static extern int GetSystemMetrics(int index);
|
|
136
|
-
[DllImport("user32.dll")] static extern uint MapVirtualKey(uint code, uint type);
|
|
137
|
-
[DllImport("user32.dll")] public static extern uint GetClipboardSequenceNumber();
|
|
138
|
-
static void Send(INPUT input) { SendInput(1, new INPUT[] { input }, Marshal.SizeOf(typeof(INPUT))); }
|
|
139
|
-
public static void Mouse(uint flags, int x, int y, int data) {
|
|
140
|
-
INPUT input = new INPUT(); input.type = 0;
|
|
141
|
-
input.u.mi.dx = x; input.u.mi.dy = y; input.u.mi.mouseData = data; input.u.mi.dwFlags = flags; Send(input);
|
|
142
|
-
}
|
|
143
|
-
public static void Key(ushort vk, ushort unit, uint flags) {
|
|
144
|
-
INPUT input = new INPUT(); input.type = 1;
|
|
145
|
-
input.u.ki.wVk = vk; input.u.ki.wScan = vk != 0 ? (ushort)MapVirtualKey(vk, 0) : unit; input.u.ki.dwFlags = flags; Send(input);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
"@
|
|
149
|
-
[void][ReasonInput]::SetProcessDPIAware()
|
|
150
|
-
$width = [ReasonInput]::GetSystemMetrics(0)
|
|
151
|
-
$height = [ReasonInput]::GetSystemMetrics(1)
|
|
152
|
-
$session = [Diagnostics.Process]::GetCurrentProcess().SessionId
|
|
153
|
-
[Console]::Out.WriteLine('{"session":' + $session + ',"width":' + $width + ',"height":' + $height + '}')
|
|
154
|
-
[Console]::Out.Flush()
|
|
155
|
-
$mode = "__MODE__"
|
|
156
|
-
if ($mode -eq "probe") { exit 0 }
|
|
157
|
-
if ($mode -eq "clipboard") {
|
|
158
|
-
# Only changes made during this pairing: never export the initial clipboard.
|
|
159
|
-
$parent = Get-Process -Id __PARENT__
|
|
160
|
-
$last = [ReasonInput]::GetClipboardSequenceNumber()
|
|
161
|
-
while (-not $parent.HasExited) {
|
|
162
|
-
Start-Sleep -Milliseconds 100
|
|
163
|
-
$count = [ReasonInput]::GetClipboardSequenceNumber()
|
|
164
|
-
if ($count -eq $last) { continue }
|
|
165
|
-
$last = $count
|
|
166
|
-
try { $text = Get-Clipboard -Raw } catch { continue }
|
|
167
|
-
if (-not $text) { continue }
|
|
168
|
-
$bytes = [Text.Encoding]::UTF8.GetBytes($text)
|
|
169
|
-
if ($bytes.Length -gt __MAX_TEXT_BYTES__) { continue }
|
|
170
|
-
[Console]::Out.WriteLine("c " + [Convert]::ToBase64String($bytes))
|
|
171
|
-
[Console]::Out.Flush()
|
|
172
|
-
}
|
|
173
|
-
exit 0
|
|
174
|
-
}
|
|
175
|
-
$scaleX = 65535.0 / [Math]::Max(1, $width - 1)
|
|
176
|
-
$scaleY = 65535.0 / [Math]::Max(1, $height - 1)
|
|
177
|
-
while ($null -ne ($line = [Console]::In.ReadLine())) {
|
|
178
|
-
$n = $line.Split(" ")
|
|
179
|
-
try {
|
|
180
|
-
switch ($n[0]) {
|
|
181
|
-
"p" { [ReasonInput]::Mouse(0x8001, [int]([int]$n[1] * $scaleX), [int]([int]$n[2] * $scaleY), 0) }
|
|
182
|
-
"b" { [ReasonInput]::Mouse([uint32]$n[1], 0, 0, [int]$n[2]) }
|
|
183
|
-
"k" { [ReasonInput]::Key([uint16]$n[1], [uint16]$n[2], [uint32]$n[3]) }
|
|
184
|
-
"c" { Set-Clipboard -Value ([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($n[1]))) }
|
|
185
|
-
}
|
|
186
|
-
} catch { [Console]::Error.WriteLine("input: $_") }
|
|
187
|
-
}
|
|
188
|
-
`;function Oe(e){let t=pn.replace("__MODE__",e).replace("__PARENT__",String(process.pid)).replace("__MAX_TEXT_BYTES__",String(v));return[an(),["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",Buffer.from(t,"utf16le").toString("base64")]]}var cn=["USERPROFILE","LOCALAPPDATA","APPDATA","TEMP","TMP","PSModuleAnalysisCachePath"];function Je(){let e=cn.flatMap((t)=>process.env[t]?[[t,process.env[t]]]:[]);return{...Object.fromEntries(e),SystemRoot:Ue(),windir:Ue()}}function Qt(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!=="object")return null;let n=t,o=(s,i)=>typeof s==="number"&&Number.isSafeInteger(s)&&s>=i;return o(n.session,0)&&o(n.width,1)&&o(n.height,1)?{session:n.session,width:n.width,height:n.height}:null}function Ut(){return new Promise((e)=>{let t=Me(...Oe("probe"),{env:Je(),stdio:["ignore","pipe","ignore"],windowsHide:!0}),n="",o=setTimeout(()=>{t.kill("SIGKILL"),e(null)},sn);t.stdout.setEncoding("utf8").on("data",(s)=>{n+=s}),t.once("error",()=>{clearTimeout(o),e(null)}),t.once("close",()=>{clearTimeout(o),e(Qt(n.split(/\r?\n/)[0]??""))})})}var ae;function Ot(){if(ae!==void 0)return ae;if(process.platform!=="win32")return ae=!1;try{let e=rn(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 ae=t.ProcessIdToSessionId(t.GetCurrentProcessId(),n)!==0&&n[0]>0}catch{return ae=!1}}var kt=[{bit:1,down:2,up:4},{bit:2,down:32,up:64},{bit:4,down:8,up:16}],Xt=2048,Nt=4096,ln=[[8,Xt,120],[16,Xt,-120],[32,Nt,-120],[64,Nt,120]],vt=1,Le=2,un=4,fn=new Set([65505,65506]),Lt=new Set([65507,65508,65511,65512,65513,65514,65027,65515,65516]),Mt=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 Bt{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 s of kt){let i=(this.mask&s.bit)!==0,p=(n&s.bit)!==0;if(i!==p)o.push(`b ${p?s.down:s.up} 0`)}for(let[s,i,p]of ln)if(!(this.mask&s)&&n&s)o.push(`b ${i} ${p}`);return this.mask=n,o}key(e,t){let n=e?0:Le;if(fn.has(t)||Lt.has(t))if(e)this.held.add(t);else this.held.delete(t);let o=Mt.get(t);if(o)return[`k ${o[0]} 0 ${n|(o[1]?vt:0)}`];let s=t<256?t:(t&4278190080)===16777216?t&16777215:0,i=String.fromCharCode(s),p=[...this.held].some((h)=>Lt.has(h)),l=/^[A-Za-z0-9]$/.test(i)?i.toUpperCase().charCodeAt(0):0;if(l&&(e?p:this.pressed.has(l))){if(e)this.pressed.add(l);else this.pressed.delete(l);return[`k ${l} 0 ${n}`]}if(s<33||s>=127&&s<160||s>65535||s>=55296&&s<57344)return[];return[`k 0 ${s} ${n|un}`]}release(){let e=kt.filter((t)=>this.mask&t.bit).map((t)=>`b ${t.up} 0`);for(let t of this.pressed)e.push(`k ${t} 0 ${Le}`);for(let t of this.held){let[n,o]=Mt.get(t);e.push(`k ${n} 0 ${Le|(o?vt:0)}`)}return this.mask=0,this.pressed.clear(),this.held.clear(),e}}function Jt(e){let t=Me(...Oe("input"),{env:Je(),stdio:["pipe","pipe","ignore"],windowsHide:!0}),n=new Bt,o="",s=!1,i=null,p=()=>{if(i?.kill("SIGKILL"),t.exitCode!==null||t.signalCode!==null)return;t.stdin.end(n.release().map((u)=>`${u}
|
|
189
|
-
`).join("")),setTimeout(()=>t.kill("SIGKILL"),2000).unref()},l=(u)=>{if(s)return;s=!0,p(),e.end(u)},h=(u)=>l({error:new r("display_unavailable",u)}),f=(u)=>{if(s||u.length===0)return;if(t.stdin.write(u.map((S)=>`${S}
|
|
190
|
-
`).join("")),t.stdin.writableLength>on)l({reason:"input_backpressure"})},x=()=>{i=Me(...Oe("clipboard"),{env:Je(),stdio:["ignore","pipe","ignore"],windowsHide:!0});let u="";i.stdout?.on("data",(S)=>{if(s)return;u+=S.toString("ascii");for(let y=u.indexOf(`
|
|
191
|
-
`);y>=0;y=u.indexOf(`
|
|
192
|
-
`)){let A=u.slice(0,y).replace(/\r$/,"");if(u=u.slice(y+1),!A.startsWith("c "))continue;let q=A.slice(2);if(q.length>Math.ceil(v/3)*4||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(q)){l({reason:"display_protocol"});return}let c=Buffer.from(q,"base64");if(c.byteLength<=v)e.clipboard(c.toString("utf8"));if(s)return}if(u.length>Math.ceil(v/3)*4+4)l({reason:"display_protocol"})}),i.once("error",()=>h("Reason could not watch this computer's desktop clipboard.")),i.once("exit",()=>{if(!s)h("Reason could not watch this computer's desktop clipboard.")})};return t.stdout.on("data",(u)=>{if(s||o===null)return;o+=u.toString("utf8");let S=o.indexOf(`
|
|
193
|
-
`);if(S<0){if(o.length>4096)l({reason:"display_protocol"});return}let y=Qt(o.slice(0,S).trim());if(o=null,!y)l({reason:"display_protocol"});else if(y.session===0)h("This Windows worker runs as a service, which has no desktop: run it in the signed-in desktop session.");else x(),e.ready({width:y.width,height:y.height})}),t.stdin.on("error",()=>{return}),t.once("error",()=>h("Reason could not start this computer's desktop input.")),t.once("exit",()=>{if(o!==null)h("Reason could not start this computer's desktop input.");else l({reason:"display_closed"})}),{pointer:(u,S,y)=>f(n.pointer(u,S,y)),key:(u,S)=>f(n.key(u,S)),clipboard:(u)=>f([`c ${Buffer.from(u,"utf8").toString("base64")}`]),close(){s=!0,p()}}}var hn=["none","standard","all"],xe="22.23.3",gn={"linux-x64":"1084aa36196bba4c3a5e69a1ee388a6e4ff729dad09445fbcd434b28fe3c24af","linux-arm64":"5ced2d48d1d7198739b7f86804de0171aefb6823b684b12341d3321afc3cb0b2","darwin-arm64":"23b25245dcfb9af7262f8ff142e9e2e0af025368117329e7a7458a51e5922f53","win32-x64":"2b0ff57b049cda1bbcea2240eec20467018713c1efe1f7360c2681859b90ed71","win32-arm64":"33dad22e4cef5ee8f9fbb1b0d037fdacd0e56d12a4580f0d63f68b894deab535"},je={"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"}},Gt="chrome-mac-arm64/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",Vt="chrome-win64/chrome.exe",Y={version:"9.0.2",url:"https://ffmpeg.martin-riedl.de/download/macos/arm64/1789931890_9.0.2/ffmpeg.zip",sha256:"c8ed4c4e6978a03c485edbfe4e0a5dc2380f8a30bba5150531b31b094492d924"},Sn={version:Y.version,url:"https://ffmpeg.martin-riedl.de/download/macos/arm64/1789931890_9.0.2/ffprobe.zip",sha256:"fcbe839537485eaee7a7a8bc5cbc0f90d53617e80943e8a5b2e31cb851197ea6"},We={version:Y.version,url:`https://github.com/GyanD/codexffmpeg/releases/download/${Y.version}/ffmpeg-${Y.version}-essentials_build.zip`,sha256:"60f467265b1e312373dbcd92200c2618a74850f98d3d078e94296bb3fa2047ba"},jt=`ffmpeg-${We.version}-essentials_build/bin`,G="com.ifuryst.open_browser_use.extension",Kt="com.reasonmachines.browser_use.extension",Ct="/tmp/reason-browser-use",Ge=["tint2","picom","xterm","pcmanfm"],It=["fonts-droid-fallback"],Zt=["pulseaudio"],_n=["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",...Zt,...Ge],wn=new Set([...Ge,...It,...Zt]),Wt=_n.filter((e)=>e!=="chromium"&&!wn.has(e)),Pn=["Xvfb","openbox","x11vnc","xdotool","dbus-launch","python3","ffmpeg","tmux"],be="/usr/bin/chromium",qn=["/usr/local/bin","/usr/bin","/bin","/opt/homebrew/bin"];function En(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 z(e){return e==="win32-x64"||e==="win32-arm64"}function Ve(e){return z(e)?`node-v${xe}-${e.replace("win32","win")}`:`node-v${xe}-${e}`}function me(e){return{node:{version:xe,url:`https://nodejs.org/dist/v${xe}/${Ve(e)}${z(e)?".zip":".tar.gz"}`,sha256:gn[e]},open_computer_use:{version:U.ocu.version,url:ie.ocu.url,sha256:ie.ocu.sha256},open_browser_use:{version:U.obu.version,url:ie.obu.url,sha256:ie.obu.sha256},...e==="darwin-arm64"?{chrome_for_testing:{version:J.version,url:`https://storage.googleapis.com/chrome-for-testing-public/${J.version}/mac-arm64/chrome-mac-arm64.zip`,sha256:J.macArm64Sha256}}:z(e)?{chrome_for_testing:{version:J.version,url:`https://storage.googleapis.com/chrome-for-testing-public/${J.version}/win64/chrome-win64.zip`,sha256:J.win64Sha256}}:{}}}function Tn(e){let t={extension:F};for(let[n,o]of Object.entries(me(e)))t[n]=`${o.version}@${o.sha256}`;return t}function Yt(e){return g(e,".local","share","reason","desktop")}function yr(e,t=kn()){let n=Yt(t),o=(u)=>g(n,u,me(e)[u]?.version??""),s=o("open_computer_use"),i=o("open_browser_use"),p=e==="darwin-arm64",l=z(e),h=g(t,"Library","Application Support"),f=g(process.platform==="win32"&&process.env.LOCALAPPDATA?process.env.LOCALAPPDATA:g(t,"AppData","Local"),"OpenBrowserUse"),x=p?g(h,"Google","Chrome","NativeMessagingHosts",`${G}.json`):l?g(f,"NativeMessagingHosts",`${G}.json`):g(t,".config","google-chrome","NativeMessagingHosts",`${G}.json`);return{root:n,automation:g($t(n),"automation"),receipt:g(n,"receipt.json"),minimal:$n(t),node:l?g(o("node"),Ve(e),"node.exe"):g(o("node"),"bin","node"),ocuDir:s,ocu:g(s,je[e].ocu),ocuApp:p?g(s,"dist","Open Computer Use.app"):null,obuDir:i,obu:g(i,"cli","open-browser-use.js"),nativeHost:g(i,je[e].obu),extensionDir:p?g(h,"OpenBrowserUse","chrome-extension","release"):l?g(f,"chrome-extension","release"):g(t,".local","share","open-browser-use","chrome-extension","release"),setupNativeHostManifest:x,nativeHostManifests:p?[x,g(h,"Google","ChromeForTesting","NativeMessagingHosts",`${G}.json`)]:l?[x]:[g(t,".config","chromium","NativeMessagingHosts",`${G}.json`),g(t,".config","google-chrome-for-testing","NativeMessagingHosts",`${G}.json`)],browser:p?g(o("chrome_for_testing"),Gt):l?g(o("chrome_for_testing"),Vt):be,userChromeHost:p?g(n,"user-chrome","reason-browser-use"):null,userChromeRegistration:p?g(h,"Google","Chrome","NativeMessagingHosts",`${Kt}.json`):null,ffmpegDir:g(n,"ffmpeg"),ffmpeg:p?g(n,"ffmpeg",Y.version,"ffmpeg"):l?g(n,"ffmpeg",We.version,jt,"ffmpeg.exe"):null,ffprobe:p?g(n,"ffprobe",Sn.version,"ffprobe"):l?g(n,"ffmpeg",We.version,jt,"ffprobe.exe"):null}}function Rn(e){try{let t=JSON.parse(ye(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((s)=>typeof s==="string")||!hn.includes(n.permissions)||!Array.isArray(n.missing_system_packages)||!n.missing_system_packages.every((s)=>typeof s==="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 O(e){try{return Fe(e).isFile()}catch{return!1}}function zt(e){try{let t=Fe(e);return t.isFile()&&(t.mode&73)!==0}catch{return!1}}function An(e){try{return ye(e,"utf8")}catch{return null}}function W(e){for(let t of qn){let n=g(t,e);try{let o=Fe(n);if(o.isFile()&&(o.mode&73)!==0)return n}catch{}}return null}function Xn(e){try{let t=JSON.parse(ye(g(e,"package.json"),"utf8"));return typeof t==="object"&&t!==null&&typeof t.version==="string"?t.version:null}catch{return null}}function Cn(e,t,n){let o=me(n)[e];if(!o)return!1;let s=z(n);if(e==="node")return O(s?g(t,Ve(n),"node.exe"):g(t,"bin","node"));if(e==="chrome_for_testing")return O(g(t,s?Vt:Gt));let i=je[n][e==="open_computer_use"?"ocu":"obu"];return Xn(t)===o.version&&O(g(t,i))&&(e==="open_computer_use"||O(g(t,"cli","open-browser-use.js")))}function vn(e){return Ft("sha256").update(Buffer.from(e,"base64")).digest("hex").slice(0,32).replace(/./g,(t)=>String.fromCharCode(97+Number.parseInt(t,16)))}function Ke(e){try{let t=JSON.parse(ye(e,"utf8"));return typeof t==="object"&&t!==null&&!Array.isArray(t)?t:null}catch{return null}}function Ln(e){let t=Ke(g(e.extensionDir,"manifest.json"));return t!==null&&t.version===U.obu.version&&typeof t.key==="string"&&vn(t.key)===F}function Qn(e,t){let n=e?.allowed_origins;return e!==null&&e.name===G&&Array.isArray(n)&&n.length===1&&n[0]===`chrome-extension://${F}/`&&(t===void 0||e.path===t)}function Un(e){return Ln(e)&&O(e.nativeHost)&&e.nativeHostManifests.every((t)=>Qn(Ke(t),e.nativeHost))}function Bn(e){return`#!/bin/sh
|
|
194
|
-
# Reason's Chrome extension host (reason desktop install): Open Browser Use on Reason's socket directory.
|
|
195
|
-
obu=${`'${e.replaceAll("'","'\\''")}'`}
|
|
196
|
-
case "$1" in
|
|
197
|
-
chrome-extension://*) exec "$obu" host --socket-dir ${Ct} ;;
|
|
198
|
-
mcp) shift; exec "$obu" mcp --socket-dir ${Ct} "$@" ;;
|
|
199
|
-
esac
|
|
200
|
-
exec "$obu" "$@"
|
|
201
|
-
`}function Jn(e){let t=Ke(e),n=t?.allowed_origins;return t!==null&&t.name===Kt&&t.type==="stdio"&&Array.isArray(n)&&n.includes(`chrome-extension://${$e}/`)&&typeof t.path==="string"&&zt(t.path)}function jn(e,t){if(!e.userChromeHost||!e.userChromeRegistration)return null;if(!t||An(e.userChromeHost)!==Bn(e.nativeHost)||!zt(e.userChromeHost))return{code:"user_chrome_browser_use_missing"};return Jn(e.userChromeRegistration)?{host:e.userChromeHost}:{code:"user_chrome_native_host_unregistered"}}var Wn={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 P(e={}){let t=e.platform===void 0?En():e.platform;if(!t)return null;let n=yr(t,e.home),o=Rn(n.receipt),s=Tn(t),i=o!==null&&o.platform===t&&JSON.stringify(Object.entries(o.pins).sort())===JSON.stringify(Object.entries(s).sort()),p=[],l=me(t);for(let c of["node","open_computer_use","open_browser_use","chrome_for_testing"]){let _=l[c];if(!_)continue;let E=Cn(c,g(n.root,c,_.version),t),D=o?.pins[c],N=E&&D===s[c]?"ready":D!==void 0&&D!==s[c]?"outdated":"missing";p.push({name:c,state:N,detail:_.version})}let h=o?.pins.extension===F&&Un(n);p.push({name:"browser_extension",state:h?"ready":"missing",detail:F});let f=W("Xvfb"),x=W("x11vnc"),u=W("openbox");if(z(t))p.push(Ot()?{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"}),p.push(n.ffmpeg&&O(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"){p.push(O(be)?{name:"browser",state:"ready",detail:be}:{name:"browser",state:"missing",detail:`non-snap Chromium at ${be}`});let c=f!==null&&x!==null&&u!==null;p.push({name:"display",state:c?"ready":"missing",detail:"Xvfb + openbox + x11vnc"});let _=Pn.filter((k)=>W(k)===null),E=(o?.missing_system_packages??Wt).filter((k)=>Wt.includes(k)),D=_.length===0&&E.length===0;p.push(D?{name:"system_packages",state:"ready"}:{name:"system_packages",state:"missing",detail:[...new Set([...E,..._])].join(" ")});let N=Ge.filter((k)=>W(k)===null);p.push(N.length===0?{name:"desktop_look",state:"ready"}:{name:"desktop_look",state:"missing",detail:N.join(" ")})}let S=n.ffmpeg&&O(n.ffmpeg)?n.ffmpeg:W("ffmpeg"),y=!S?null:S===n.ffmpeg?n.ffprobe:g($t(xn(S)),"ffprobe"),A=i&&p.every((c)=>c.state==="ready"),q=(c)=>i&&p.every((_)=>!Wn[c].includes(_.name)||_.state==="ready");return{platform:t,root:n.root,automation:n.automation,ready:A,features:{display:q("display"),computer:q("computer"),browser:q("browser")},node:n.node,ocu:n.ocu,obu:n.obu,nativeHost:n.nativeHost,extensionDir:n.extensionDir,browser:n.browser,ffmpeg:S,ffprobe:y&&O(y)?y:null,userChrome:jn(n,i&&["node","open_browser_use"].every((c)=>p.find((_)=>_.name===c)?.state==="ready")),pulseaudio:W("pulseaudio"),xvfb:f,x11vnc:x,openbox:u,components:p}}function Ht(e){return Fn(e)?Mn():[]}function Fn(e){return e?.platform==="darwin-arm64"&&e.ffmpeg===g(e.root,"ffmpeg",Y.version,"ffmpeg")}async function Ui(e,t,n,o=fetch){try{let s=await o(e,{redirect:"follow"});if(!s.ok||!s.body)throw Error(`download failed (HTTP ${s.status}): ${e}`);let i=Ft("sha256"),p=bn(n,{mode:384});try{let h=s.body.getReader();for(let f=await h.read();!f.done;f=await h.read())if(i.update(f.value),!p.write(f.value))await dn(p,"drain")}finally{p.end(),await mn(p)}let l=i.digest("hex");if(l!==t)throw Error(`digest mismatch for ${e}: expected ${t}, got ${l}`)}catch(s){throw yn(n,{force:!0}),s}}function $n(e){return g(Yt(e),"minimal.json")}import{execFile as os,spawn as rt}from"child_process";import{existsSync as is}from"fs";import{connect as as}from"net";function Gn(){let e=new Set,t=null,n=(s)=>({holder:t?.viewer??null,you:t===s,same_user:Boolean(t?.viewer&&s.viewer&&t.viewer.user_id===s.viewer.user_id)}),o=()=>{for(let s of e)s.notify(n(s))};return{join(s){return e.add(s),s.notify(n(s)),()=>{if(!e.delete(s))return;if(t!==s)return;t=null,o()}},claim(s){if(t===s||!e.has(s))return;t=s,o()}}}var er=Gn();import{spawn as Vn}from"child_process";import{existsSync as Kn}from"fs";import{connect as Zn}from"net";import{join as he}from"path";var rr="reason_desktop",pe={sampleRate:48000,channels:2,codec:"opus"},Yn=5000,zn=107,Hn=262144,Ye=(e)=>he(e,"native"),Qe=(e)=>`unix:${e}`;function Ie(e,t=1000){if(!Kn(e))return Promise.resolve(!1);return new Promise((n)=>{let o=Zn({path:e}),s=(i)=>{o.destroy(),n(i)};o.setTimeout(t,()=>s(!1)),o.once("error",()=>s(!1)),o.once("close",()=>s(!1)),o.once("connect",()=>s(!0))})}async function nr(e,t){if(!t)return null;let n=Ye(e);if(Buffer.byteLength(n)>zn||/["'\\\s]/.test(n))return null;try{if(await Ie(n))return n;let o=Vn(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:${he(e,"pulseaudio.log")}`,"-n",`--load=module-native-protocol-unix socket="${n}" auth-anonymous=1 auth-cookie-enabled=0`,`--load=module-null-sink sink_name=${rr} rate=${pe.sampleRate} channels=${pe.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:he(e,"runtime"),PULSE_STATE_PATH:he(e,"state")}}),s=!1;o.once("error",()=>{s=!0}),o.once("exit",()=>{s=!0}),o.unref();let i=Date.now()+Yn;while(Date.now()<i){if(await Ie(n))return n;if(s)return await Ie(n)?n:null;await new Promise((p)=>setTimeout(p,50))}if(!s)o.kill("SIGKILL");return null}catch{return null}}function sr(){let{sampleRate:e,channels:t}=pe;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",`${rr}.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 es=[79,103,103,83],ts=Buffer.from("OpusHead"),rs=Buffer.from("OpusTags"),tr=(e,t)=>e.byteLength>=t.byteLength&&t.every((n,o)=>e[o]===n);class Ze extends Error{constructor(e){super(e);this.name="OggProtocolError"}}class He{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(es.some((S,y)=>t[o+y]!==S)||t[o+4]!==0)throw new Ze("invalid_page");let s=(t[o+5]&1)!==0,i=t[o+26];if(t.byteLength-o<27+i)break;let p=t.subarray(o+27,o+27+i),l=p.reduce((S,y)=>S+y,0),h=27+i+l;if(t.byteLength-o<h)break;if(!s&&this.partialBytes>0)this.resetPartial();let f=s&&this.partialBytes===0,x=o+27+i,u=x;for(let S of p){if(x+=S,S===255)continue;if(this.appendPartial(t.subarray(u,x),f),u=x,!f){let y=this.takePartial();if(y.byteLength>0&&!tr(y,ts)&&!tr(y,rs))n.push(y)}f=!1,this.resetPartial()}if(u<x)this.appendPartial(t.subarray(u,x),f);o+=h}return this.buffer=t.slice(o),n}appendPartial(e,t){if(t||e.byteLength===0)return;if(this.partialBytes+=e.byteLength,this.partialBytes>Hn)throw new Ze("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 ns}from"child_process";var or=1048576,ss=String.raw`
|
|
202
|
-
import gi, json, os, sys
|
|
203
|
-
gi.require_version("Gtk", "3.0")
|
|
204
|
-
from gi.repository import Gtk, Gdk, GLib
|
|
205
|
-
if not Gtk.init_check()[0]:
|
|
206
|
-
sys.exit(1)
|
|
207
|
-
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
|
|
208
|
-
pending = b""
|
|
209
|
-
generation = 0
|
|
210
|
-
def send(value):
|
|
211
|
-
print(json.dumps(value, ensure_ascii=True), flush=True)
|
|
212
|
-
def changed(clipboard, event):
|
|
213
|
-
global generation
|
|
214
|
-
generation += 1
|
|
215
|
-
current = generation
|
|
216
|
-
def received(clipboard, text, unused):
|
|
217
|
-
if current == generation and text is not None and len(text.encode("utf-8")) <= ${v}:
|
|
218
|
-
send({"text": text})
|
|
219
|
-
clipboard.request_text(received, None)
|
|
220
|
-
# No request_text on startup: never share the pre-existing clipboard.
|
|
221
|
-
clipboard.connect("owner-change", changed)
|
|
222
|
-
def input_ready(fd, condition):
|
|
223
|
-
global pending
|
|
224
|
-
chunk = os.read(fd, 65536)
|
|
225
|
-
if not chunk:
|
|
226
|
-
Gtk.main_quit()
|
|
227
|
-
return False
|
|
228
|
-
pending += chunk
|
|
229
|
-
while b"\n" in pending:
|
|
230
|
-
line, pending = pending.split(b"\n", 1)
|
|
231
|
-
text = json.loads(line)
|
|
232
|
-
if not isinstance(text, str) or len(text.encode("utf-8")) > ${v} or "\x00" in text:
|
|
233
|
-
sys.exit(1)
|
|
234
|
-
clipboard.set_text(text, -1)
|
|
235
|
-
send("ack")
|
|
236
|
-
if len(pending) > ${v*6+2}:
|
|
237
|
-
sys.exit(1)
|
|
238
|
-
return True
|
|
239
|
-
GLib.io_add_watch(0, GLib.IO_IN | GLib.IO_HUP, input_ready)
|
|
240
|
-
send("ready")
|
|
241
|
-
Gtk.main()
|
|
242
|
-
`;function ir(e,t){let n=ns("/usr/bin/python3",["-I","-u","-c",ss],{env:{DISPLAY:e.display,XAUTHORITY:e.xauthority},stdio:["pipe","pipe","ignore"]}),o=!1,s=!0,i="",p=0,l=[],h=setTimeout(()=>x(),5000),f=()=>{o=!0,clearTimeout(h),l.length=0,n.kill("SIGKILL")},x=()=>{if(o)return;f(),t.end({error:new r("display_unavailable","Reason could not start this Linux desktop's UTF-8 clipboard.")})},u=(S,y=32)=>{if(o)return;if(!s){S();return}if(p+=y,p>or)f(),t.end({reason:"input_backpressure"});else l.push({apply:S,bytes:y})};return n.stdout.on("data",(S)=>{if(o)return;i+=S.toString("ascii");for(let y=i.indexOf(`
|
|
243
|
-
`);y>=0;y=i.indexOf(`
|
|
244
|
-
`)){let A=i.slice(0,y);i=i.slice(y+1);let q;try{q=JSON.parse(A)}catch{x();return}if(q==="ready"||q==="ack"){clearTimeout(h),s=!1;while(!s&&!o&&l.length){let c=l.shift();p-=c.bytes,c.apply()}}else if(q&&typeof q==="object"&&"text"in q&&typeof q.text==="string"&&Buffer.byteLength(q.text)<=v)t.clipboard(q.text);else{x();return}if(o)return}if(i.length>v*6+32)x()}),n.stdin.on("error",x),n.once("error",x),n.once("exit",x),{apply:u,write(S){if(Buffer.byteLength(S)>v||S.includes("\x00")){x();return}let y=`${JSON.stringify(S)}
|
|
245
|
-
`;u(()=>{if(s=!0,h=setTimeout(()=>x(),5000),n.stdin.write(y),n.stdin.writableLength>or)f(),t.end({reason:"input_backpressure"})},Buffer.byteLength(y))},close:f}}var H={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}},ps="avc1.4D002A",ar={width:1920,height:1080},cs=262144,ls=0.2,fs=250,ds=1e4,bs=1024,et=1e4,xs=500,ys=60,ms=1e4,hs=1000,pr=1048576,hr={kind:"mac_screen",sound:null},gr={kind:"windows_screen",sound:null},gs,cr=()=>gs??=P()?.ffmpeg??null,Se=(e,t,n)=>rt(e,t,{env:n,stdio:["ignore","pipe","ignore"],windowsHide:!0}),Ss,nt=()=>Ss??=Ht(P()),lr=(e,t,n)=>{let[o,...s]=[...nt(),e];return Se(o,[...s,...t],n)},ur=()=>Dr?.videotoolbox?"h264_videotoolbox":"libx264",_s=()=>Math.round(performance.now()*1000),tt=new Set,fr=!1;function Sr(e){if(tt.add(e),e.once("exit",()=>tt.delete(e)),fr)return;fr=!0,process.once("exit",()=>{for(let t of tt)try{t.kill("SIGKILL")}catch{}})}function _r(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{}},xs);e.once("exit",()=>clearTimeout(t))}function ws(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 Ps(e){return{args:["-f","avfoundation","-capture_cursor","1","-pixel_format","nv12","-framerate",String(e),"-i","Capture screen 0:none"],size:null}}function qs(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 Es(e){return{args:["-probesize","32","-analyzeduration","0","-f","image2pipe","-c:v","mjpeg","-framerate",String(e),"-i","pipe:0"],size:null}}var wr=1700000;function Pr(e){return Math.min(1,Math.round(Math.sqrt(wr/(e.width*e.height))*100)/100)}function Ds(e,t,n){let o=rt(n.axe,["stream-video","--udid",n.udid,"--format","ffmpeg","--fps","30","--quality","85","--scale",String(Math.min(0.99,Pr(n.size)))],{stdio:["ignore","pipe","ignore"]}),s=rt(e,t,{env:{},stdio:["pipe","pipe","ignore"]});o.stdout.pipe(s.stdin),s.stdin.on("error",()=>{});let i=()=>{if(o.exitCode===null&&o.signalCode===null)o.kill("SIGTERM")};return s.once("exit",i),s.once("error",i),o.once("exit",()=>{if(s.exitCode===null&&s.signalCode===null)s.kill("SIGTERM")}),o.once("error",()=>{if(s.exitCode===null&&s.signalCode===null)s.kill("SIGTERM")}),s}function dr(e){let t=Math.min(1,ar.width/e.width,ar.height/e.height);return{width:Math.round(e.width*t),height:Math.round(e.height*t)}}function ge(e,t,n,o="libx264"){let s=H[e],i=(u)=>Math.max(2,Math.floor(u/2)*2),p={width:i(n.width*s.scale),height:i(n.height*s.scale)},l=p.width!==t.size?.width||p.height!==t.size.height,h=Math.max(1,Math.round(s.kbps*2/s.fps)),f=["-g",String(s.fps*ys)],x=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",...f,"-b:v",`${s.kbps}k`,"-maxrate",`${s.kbps}k`,"-bufsize",`${h}k`,"-bsf:v","h264_metadata=aud=insert"]:["-c:v","libx264","-preset",s.x264Preset,"-tune","zerolatency","-profile:v","main","-level","4.2","-bf","0","-pix_fmt","yuv420p",...s.threads?["-threads",String(s.threads)]:[],"-x264-params","aud=1:repeat-headers=1",...f,"-crf",String(s.crf),"-maxrate",`${s.kbps}k`,"-bufsize",`${h}k`];return["-hide_banner","-loglevel","error","-nostdin","-fflags","nobuffer",...t.args,"-an",...l?["-vf",`scale=${p.width}:${p.height}:flags=fast_bilinear`]:[],...x,"-flush_packets","1","-f","h264","pipe:1"]}class qr{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=[],s=this.scanned;while(s+3<this.buffer.byteLength){if(this.buffer[s]!==0||this.buffer[s+1]!==0||this.buffer[s+2]!==1){s++;continue}let i=this.buffer[s+3]&31,p=s>0&&this.buffer[s-1]===0?s-1:s;if(i===9&&p>0)o.push({data:this.buffer.slice(0,p),key:this.key,micros:this.micros}),this.buffer=this.buffer.subarray(p),this.key=!1,this.micros=t,s-=p;if(i===5)this.key=!0;s+=3}return this.scanned=s,o}}function Ts(e,t){let n=as({path:e}),o=Buffer.alloc(0),s="version",i=0,p=!1,l=[],h=0,f=!1,x=(c)=>{if(f)return;f=!0,n.destroy(),t.end(c)},u=()=>x({reason:"display_protocol"}),S=(c)=>{if(f)return;if(!p){if(h+=c.byteLength,h>pr)x({reason:"input_backpressure"});else l.push(c);return}if(n.write(c),n.writableLength>pr)x({reason:"input_backpressure"})},y=(c)=>{o=o.subarray(c)},A=()=>{switch(s){case"version":{if(o.byteLength<12)return!1;let c=/^RFB (\d{3})\.(\d{3})\n$/.exec(o.subarray(0,12).toString("latin1"));if(!c||Number(c[1])*1000+Number(c[2])<3007)return u(),!1;return y(12),n.write(`RFB 003.007
|
|
246
|
-
`),s="security",!0}case"security":{if(o.byteLength<1)return!1;let c=o[0];if(c===0)return u(),!1;if(o.byteLength<1+c)return!1;if(!o.subarray(1,1+c).includes(1))return u(),!1;return y(1+c),n.write(Buffer.from([1,1])),s="init",!0}case"init":{if(o.byteLength<24)return!1;let c=o.readUInt32BE(20);if(c>65536)return u(),!1;if(o.byteLength<24+c)return!1;let _={width:o.readUInt16BE(0),height:o.readUInt16BE(2)};if(y(24+c),_.width===0||_.height===0)return u(),!1;s="messages",p=!0;for(let E of l)n.write(E);return l=[],h=0,t.ready(_),!f}case"skip":{let c=Math.min(i,o.byteLength);if(y(c),i-=c,i>0)return!1;return s="messages",!0}case"messages":{if(o.byteLength<1)return!1;switch(o[0]){case 1:{if(o.byteLength<6)return!1;let c=6+o.readUInt16BE(4)*6;if(o.byteLength<c)return!1;return y(c),!0}case 2:return y(1),!0;case 3:{if(o.byteLength<8)return!1;let c=o.readUInt32BE(4);if(c>v/2)return y(8),s="skip",i=c,!0;if(o.byteLength<8+c)return!1;let _=o.subarray(8,8+c).toString("latin1");return y(8+c),t.clipboard(_),!f}default:return u(),!1}}}},q=!1;return n.once("connect",()=>{q=!0}),n.on("data",(c)=>{if(f)return;o=o.byteLength?Buffer.concat([o,c]):c;while(!f&&A());}),n.once("error",()=>{if(!q)x({error:new r("display_unavailable","Reason could not reach this machine's desktop server.")})}),n.once("close",()=>x({reason:"display_closed"})),{pointer(c,_,E){let D=Buffer.alloc(6);D.writeUInt8(5,0),D.writeUInt8(E&255,1),D.writeUInt16BE(c,2),D.writeUInt16BE(_,4),S(D)},key(c,_){let E=Buffer.alloc(8);E.writeUInt8(4,0),E.writeUInt8(c?1:0,1),E.writeUInt32BE(_>>>0,4),S(E)},clipboard(c){if(Array.from(c).some((D)=>D.codePointAt(0)>255)){x({reason:"clipboard_unicode_unsupported"});return}let _=Buffer.from(c,"latin1"),E=Buffer.alloc(8);E.writeUInt8(6,0),E.writeUInt32BE(_.byteLength,4),S(Buffer.concat([E,_]))},close(){f=!0,n.destroy()}}}class st{run=null;viewers=new Set;get running(){return this.run!==null}start(e,t,n,o){this.viewers.add(e),this.stop();let s;try{s=n()}catch{this.fail();return}Sr(s);let i={child:s,splitter:new qr};this.run=i;for(let l of[...this.viewers])l.started(t);s.stdout?.on("data",(l)=>{if(this.run!==i)return;for(let h of i.splitter.push(l,o()))for(let f of[...this.viewers])f.unit(h)});let p=()=>{if(this.run!==i)return;this.run=null,this.fail()};s.once("exit",p),s.once("error",p)}leave(e){if(!this.viewers.delete(e))return;if(this.viewers.size===0)this.stop()}stop(){if(!this.run)return;_r(this.run.child),this.run=null}fail(){for(let e of[...this.viewers])e.failed()}}var br=new WeakMap;function Rs(e){let t=br.get(e);if(!t)br.set(e,t=new st);return t}function Er(e,t,n={}){let o=n.micros??_s,s=new In,i=t.request.preset,p=null,l=null,h=null,f=!1,x=null,u=!1,S=!1,y=null,A=0,q=0,c=!1,_=null,E=null,D=0,N=null,k=[],te=0,w=[],M=new Uint32Array(et+1),B=0,Pe=null,qe=0,re=0,Ee=0,lt=0,ut=0,ce=null,De=0,K={frames:0,bytes:0,since:o()},I=[],ne=0,Te,Re=!1,Nr=o(),C={},Z=()=>Math.round((o()-Nr)/1000),ft=n.control??er,Ae=null,ke=null,L=(b)=>{let d=Fr(b);return e.send(d),lt+=d.byteLength,d.byteLength},le=(b)=>{if(e.done)return;if(e.open)L({type:"error",code:b});e.end({reason:b})},ue=()=>Math.max(cs,H[i].kbps*1000/8*ls),fe=()=>o()/1000,Lr=()=>{while(w.length>1&&w[0].atMs<fe()-ds)w.shift();return w[0]?.rttMs??null},dt=(b)=>{let d=Lr();if(d===null||k.length===0)return!1;let m=(d+fs)*b;return fe()-k[0].sentMs>m||te>m/1000*H[i].kbps*1000/8},Mr=(b)=>{if(D===0)return;let d=Math.min(b,D-1);if(N!==null&&d<=N)return;N=d;let m=fe();while(k.length&&k[0].seq<=d){let T=k.shift();if(te-=T.bytes,T.seq!==d)continue;let R=Math.max(0,m-T.sentMs);while(w.length&&w.at(-1).rttMs>=R)w.pop();w.push({atMs:m,rttMs:R}),M[Math.min(et,Math.round(R))]++,B++,Pe=Math.min(Pe??R,R)}},Qr=()=>{let b=0;for(let d=0;d<=et;d++)if(b+=M[d],b*2>=B)return d;return 0},Ur=()=>e.bufferedAmount<=ue()/2&&!dt(0.5),bt=()=>{Re=!0,I=[],ne=0,x?.leave(Xe),x=null},xt=(b)=>{if(e.done)return;if(b.key)C.first_key_ms??=Z();if(!f){if(!x||I.length===0&&!b.key)return;if(I.push(b),ne+=b.data.byteLength,ne>ue())bt();return}if(c){re++;return}if(e.bufferedAmount>ue()||dt(1)){c=!0,re++,_=setInterval(()=>{if(e.done||!Ur())return;if(_)clearInterval(_);_=null,c=!1,Ne()},n.drainPollMs??25);return}if(!u){if(!b.key){re++;return}if(L({type:"hello",width:l.width,height:l.height,fps:H[i].fps,preset:i,codec:ps}),u=!0,C.first_frame_ms??=Z(),!S&&p?.sound)L({type:"audioHello",...pe}),S=!0}let d=L({type:"frame",key:b.key,seq:D,captureMicros:b.micros,data:b.data});if(k.push({seq:D,sentMs:fe(),bytes:d}),te+=d,k.length>bs)te-=k.shift().bytes;D++,qe++,ce??=b.micros,De=b.micros,K.frames++,K.bytes+=d},Xe={started(b){i=b,u=!1,I=[],ne=0},unit:xt,failed:()=>le("encoder_failed")},Ce=()=>{let b=(n.ffmpeg??cr)();if(!p||!l){le("encoder_failed");return}let[d,m]=[p,l],T="kind"in d&&d.kind==="simulator"?d.stream:null;if(!b&&!T){le("encoder_failed");return}if(x??="kind"in d&&d.kind==="mac_screen"?Rs(n.spawn??lr):new st,C.encoder_ms===void 0)C.encoder_ms=Z(),C.encoder_shared=x.running;x.start(Xe,i,()=>{let R=H[i].fps;if(T)return T(R,H[i].kbps,wr);if("kind"in d&&d.kind==="simulator"){let Q=Math.min(0.99,Pr(d.size)),se={width:d.size.width*Q,height:d.size.height*Q};return Ds(b,ge(i,Es(Math.min(R,30)),se,(n.macEncoder??ur)()),d)}if("kind"in d&&d.kind==="windows_screen")return(n.spawn??Se)(b,ge(i,qs(R,m),dr(m)),{SystemRoot:process.env.SystemRoot??"C:\\Windows"});return"kind"in d?(n.spawn??lr)(b,ge(i,Ps(R),dr(m),(n.macEncoder??ur)()),{}):(n.spawn??Se)(b,ge(i,ws(R,m,d.display),m),{DISPLAY:d.display,XAUTHORITY:d.xauthority})},o)},de=()=>{if(!y)return;_r(y.child),y=null},Or=()=>{let b=(n.ffmpeg??cr)();if(y||e.done||!S||!p?.sound||!b)return;let d;try{d=(n.spawn??Se)(b,sr(),{PULSE_SERVER:Qe(p.sound)})}catch{return}Sr(d);let m={child:d,reader:new He};y=m,d.stdout?.on("data",(R)=>{if(y!==m||e.done)return;let Q;try{Q=m.reader.push(R)}catch{de();return}let se=o();for(let Br of Q){if(e.bufferedAmount>ue()){q++;continue}L({type:"audio",captureMicros:se,data:Br}),A++}});let T=()=>{if(y===m)de()};d.once("exit",T),d.once("error",T)},Ne=()=>{if(!x||e.done)return;Ee++,Ce()},yt=()=>{if(e.done||!l)return;if(!f){if(x||Re)return;Ce(),Te=setTimeout(()=>{if(!f)bt()},ms);return}if(clearTimeout(Te),C.encoder_early===void 0){if(C.encoder_early=x!==null,Re)C.hold_lapsed=!0}if(!x)Ce();let b=I;I=[],ne=0;for(let d of b)xt(d);E??=setInterval(()=>{let d=o(),m=Math.max(0.001,(d-K.since)/1e6);L({type:"stats",stats:{fps:Math.round(K.frames/m*10)/10,kbps:Math.round(K.bytes*8/1000/m),dropped:re,restarts:Ee,queued_bytes:e.bufferedAmount}}),K={frames:0,bytes:0,since:d}},hs)};t.desktop.then((b)=>{if(e.done)return;p=b;let d={ready(m){l=m,C.desktop_ms??=Z(),yt()},clipboard(m){if(e.open&&Buffer.byteLength(m)<=v)L({type:"serverClipboard",text:m})},end(m){if("reason"in m&&e.open)L({type:"error",code:m.reason});e.end(m)}};if("kind"in b&&b.kind==="simulator")h=b.input,d.ready(b.points);else if("kind"in b&&b.kind==="windows_screen")h=(n.windowsInput??Jt)(d);else if("kind"in b)h=(n.macInput??((m)=>Nn(m,nt())))(d);else{let m=(n.linuxClipboard??ir)(b,d),T=Ts(b.rfbSocket,{...d,clipboard:(R)=>{if(!m)d.clipboard(R)}});h=m?{pointer:(R,Q,se)=>m.apply(()=>T.pointer(R,Q,se)),key:(R,Q)=>m.apply(()=>T.key(R,Q)),clipboard:(R)=>m.write(R),close(){m.close(),T.close()}}:T}mt()},(b)=>e.end({error:b}));function mt(){if(ke||!t.viewerSameNetwork||!f||e.done||!p||!("kind"in p)||p.kind!=="mac_screen")return;ke=(n.macWindows??Dn)((b)=>{if(e.open)L({type:"windows",bounds:b})})}let ht={viewer:t.viewer??null,notify(b){if(e.open)L({type:"control",control:b})}},ve=(b)=>{if(!h)return;if(!p||!("kind"in p)||p.kind!=="simulator")ft.claim(ht);b(h)};return{opened(){C.relay_ms??=Z()},received(b){ut+=b.byteLength;let d;try{d=s.push(b)}catch{le("viewer_protocol");return}for(let m of d){if(e.done)return;switch(m.type){case"ping":L({type:"pong",token:m.token});break;case"pointer":ve((T)=>T.pointer(m.x,m.y,m.buttons));break;case"key":ve((T)=>T.key(m.down,m.keysym));break;case"clientClipboard":ve((T)=>T.clipboard(m.text));break;case"config":if(m.preset!==i)i=m.preset,Ne();break;case"keyframeRequest":if(u&&!c)Ne();break;case"ack":Mr(m.seq);break;case"audioEnable":if(m.on)Or();else de();break;default:break}}if(!f&&!e.done){if(f=!0,C.viewer_ms=Z(),t.viewer)Ae=ft.join(ht);yt(),mt()}},close(){if(Ae?.(),Ae=null,ke?.close(),_)clearInterval(_);if(E)clearInterval(E);clearTimeout(Te),x?.leave(Xe),de(),h?.close()},summary:()=>({output_bytes:lt,input_bytes:ut,video:{preset:i,frames:qe,dropped:re,restarts:Ee,avg_fps:ce!==null&&De>ce?Math.round((qe-1)/((De-ce)/1e6)*10)/10:0,min_rtt_ms:Math.round(Pe??0),p50_rtt_ms:B?Qr():0,audio_packets:A,audio_dropped:q,connect:C}})}}var xr=null,Dr=null,As=null,ks=null;function Xs(){let e=P();return e?.features.display?e.ffmpeg:null}function Tr(e){return xr??=new Promise((t)=>{os(e,["-hide_banner","-encoders"],{env:{},timeout:5000,killSignal:"SIGKILL",maxBuffer:1048576,encoding:"utf8"},(n,o)=>{let s=(i)=>!n&&new RegExp(`^\\s*V\\S*\\s+${i}\\s`,"m").test(o);t(Dr={x264:s("libx264"),videotoolbox:s("h264_videotoolbox")})})}),xr}var mr=null;function ji(){return mr??=(async()=>{let e=[P()?.ffmpeg,"/opt/homebrew/bin/ffmpeg","/usr/local/bin/ffmpeg"].find((n)=>Boolean(n&&is(n)));if(!e)return null;let t=await Tr(e);return t.videotoolbox||t.x264?e:null})(),mr}function ot(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??Tr)(n);if(e==="linux")return o.then((i)=>i.x264);if(e==="win32"){let i=t.windowsScreen?t.windowsScreen():ks??=Ut();return Promise.all([o,i]).then(([p,l])=>p.x264&&(l?.session??0)>0)}let s=t.macScreen?t.macScreen():As??=ze(nt());return Promise.all([o,s]).then(([i,p])=>(i.x264||i.videotoolbox)&&p?.screen===!0&&p.accessibility)}var Bs=43200000,_e=":99",Js=60000,we=15000,pt={width:1280,height:800},js=/^[A-Za-z0-9._:-]{1,160}$/;function Ws(e){return Boolean(e)&&typeof e==="object"&&!Array.isArray(e)}var Fs=["video","viewer","viewer_same_network","viewer_network"];function $s(e,t=Date.now()){let n=["relay_url","session_id","expires_at"];if(!Ws(e)||n.some((l)=>!(l in e))||Object.keys(e).some((l)=>!n.includes(l)&&!Fs.includes(l)))throw new r("invalid_display_request","Reason desktop request is malformed.");let o="video"in e?oo(e.video):void 0,s="viewer"in e?On(e.viewer):null;if(o===null)throw new r("invalid_display_request","Reason desktop video request is invalid.");let i=null;try{i=typeof e.relay_url==="string"?new URL(e.relay_url):null}catch{}if(!i||i.protocol!=="wss:"&&i.protocol!=="ws:"||i.username||i.password)throw new r("invalid_display_request","Reason desktop relay URL is invalid.");if(typeof e.session_id!=="string"||!js.test(e.session_id))throw new r("invalid_display_request","Reason desktop session identity is invalid.");let p=typeof e.expires_at==="string"?Date.parse(e.expires_at):Number.NaN;if(!Number.isFinite(p)||p<=t)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(p,t+Bs)).toISOString(),...o?{video:o}:{},...s?{viewer:s}:{},...o&&e.viewer_same_network===!0?{viewer_same_network:!0}:{}}}function At(e=process.platform){return(e==="linux"||e==="darwin"||e==="win32")&&P()?.features.display===!0}async function us(){if(process.platform==="win32")return At()&&await ot();if(process.platform!=="darwin")return At();return await ot()}function V(e){Ms(e,{recursive:!0,mode:448});let t=Ls(e);if(!t.isDirectory()||t.isSymbolicLink()||process.getuid&&t.uid!==process.getuid())throw new r("display_unavailable","Reason desktop state directory is not private.");vs(e,448)}function Gs(e,t){let n=(s)=>{let i=Buffer.alloc(2);return i.writeUInt16BE(s.length),Buffer.concat([i,s])},o=Buffer.from([255,255]);return Buffer.concat([o,n(Buffer.alloc(0)),n(Buffer.from(e)),n(Buffer.from("MIT-MAGIC-COOKIE-1")),n(t)])}function ee(e,t,n=2000){return new Promise((o)=>{let s=Os(e),i="",p=(l)=>{s.destroy(),o(l)};s.setTimeout(n,()=>p(!1)),s.once("error",()=>p(!1)),s.once("close",()=>p(!1)),s.once("connect",()=>{if(!t)p(!0)}),s.on("data",(l)=>{if(i+=l.toString("latin1"),i.length>=4)p(i.startsWith("RFB "))})})}async function Xr(e,t){let n=Date.now()+t;while(Date.now()<n){if(await e())return!0;await new Promise((o)=>setTimeout(o,100))}return!1}function ct(e,t,n){return new Promise((o)=>{let s=Ar(e,t,{detached:!0,stdio:"ignore",env:n});s.once("error",()=>o(-1)),s.once("exit",(i)=>o(i)),s.unref(),setTimeout(()=>o(null),we).unref()})}var it=null;function Be(e=a()){return it??=Vs(e).finally(()=>{it=null}),it}async function Vs(e){let t=P({home:e});if(!t?.xvfb||!t.x11vnc||!t.openbox)throw new r("display_unavailable","Run `reason desktop install` on this machine to enable its desktop.");gt({root:t.root,automation:t.automation,extensionDir:t.extensionDir});let n=X(t.root,"display");V(n);let o=await Is(e,n,t.x11vnc);if(o)return o;let s={display:_e,xauthority:X(n,"Xauthority"),rfbSocket:X(n,"rfb.sock")},i=X(n,"pulse"),p=(async()=>{try{V(i)}catch{return null}return await nr(i,t.pulseaudio)})(),l=X(n,"home");V(l);let h={HOME:l,PATH:"/usr/local/bin:/usr/bin:/bin",DISPLAY:s.display,XAUTHORITY:s.xauthority};if(t.pulseaudio)h.PULSE_SERVER=Qe(Ye(i));let f=async()=>({...s,sound:await p});if(await ee({path:s.rfbSocket},!0))return await f();if(!kr(s.xauthority))at(s.xauthority,Gs(_e.slice(1),Ns(16)),{mode:384,flag:"wx"});let x=Zs(X(n,"theme"),s.display),u={path:`/tmp/.X11-unix/X${_e.slice(1)}`};if(!await ee(u,!1)){if(ct(t.xvfb,[s.display,"-screen","0",`${pt.width}x${pt.height}x24`,"-nolisten","tcp","-auth",s.xauthority],h),!await Xr(()=>ee(u,!1),we))throw new r("display_unavailable","Reason could not start the virtual display.");ct(t.openbox,["--config-file",x.openboxConfig],h)}if(await Ys(x,h),!await Cr(t.x11vnc,s,n,"x11vnc.log",h))throw new r("display_unavailable","Reason could not start the desktop server.");return await f()}async function Cr(e,t,n,o,s){if(await ee({path:t.rfbSocket},!0))return!0;Us(t.rfbSocket,{force:!0});let i=await ct(e,["-display",t.display,"-auth",t.xauthority,"-rfbport","0","-rfbportv6","-1","-unixsock",t.rfbSocket,"-nopw","-forever","-shared","-noxdamage","-sb","0","-rfbversion","3.7","-quiet","-bg","-o",X(n,o)],s);if(i!==null&&i!==0)return!1;return await Xr(()=>ee({path:t.rfbSocket},!0),we)}async function Ks(){let e=["DISPLAY","XAUTHORITY","WAYLAND_DISPLAY","XDG_SESSION_TYPE"],t=(n)=>Object.fromEntries(e.flatMap((o)=>n[o]?[[o,n[o]]]:[]));if(process.env.DISPLAY)return t(process.env);try{let n=await new Promise((o,s)=>Cs("systemctl",["--user","show-environment"],{encoding:"utf8",timeout:2000},(i,p)=>i?s(i):o(p)));return t(Object.fromEntries(n.split(`
|
|
247
|
-
`).flatMap((o)=>{let s=o.indexOf("=");return s>0?[[o.slice(0,s),o.slice(s+1)]]:[]})))}catch{return{}}}var Rr=new Set;async function Is(e,t,n){let o=await Ks(),s=/^:(\d+)(?:\.\d+)?$/.exec(o.DISPLAY??"")?.[1];if(!s||`:${s}`===_e||o.WAYLAND_DISPLAY||o.XDG_SESSION_TYPE==="wayland")return null;let i={display:`:${s}`,xauthority:o.XAUTHORITY??X(e,".Xauthority"),rfbSocket:X(t,`rfb-${s}.sock`)},p=`${i.display} ${i.xauthority}`;if(Rr.has(p)||!await ee({path:`/tmp/.X11-unix/X${s}`},!1))return null;let l={HOME:e,PATH:"/usr/local/bin:/usr/bin:/bin",DISPLAY:i.display,XAUTHORITY:i.xauthority};if(await Cr(n,i,t,`x11vnc-${s}.log`,l))return{...i,sound:null};return Rr.add(p),process.stderr.write(`Reason worker: your screen ${i.display} could not be served; using the virtual desktop
|
|
248
|
-
`),null}function Zs(e,t){let n=`chromium --no-first-run --no-default-browser-check${process.geteuid?.()===0?" --no-sandbox":""} %U`,o=[["terminal","xterm"],["files","pcmanfm"]].filter(([,i])=>!kr(`/usr/bin/${i}`)).map(([i])=>i),s=Rt({root:e,display:t,screen:pt,browserExec:n,absent:o});for(let i of["","openbox","tint2","picom"])V(X(e,i));for(let[i,p]of Object.entries(s.files))at(X(e,i),p,{mode:384});for(let[i,p]of Object.entries(Tt))at(X(e,`ara-${i}`),Qs(p),{mode:384});return{root:e,openboxConfig:X(e,"openbox","rc.xml"),start:s.start}}async function Ys(e,t){let n=[`ROOT=${JSON.stringify(e.root)}`,...e.start,"openbox --reconfigure >/dev/null 2>&1 || true"].join(`
|
|
249
|
-
`);await new Promise((o)=>{let s=Ar("/bin/sh",["-c",n],{stdio:"ignore",env:{...t,PATH:"/usr/bin:/bin"}}),i=setTimeout(()=>{s.kill(),o()},we);s.once("error",()=>{clearTimeout(i),o()}),s.once("exit",()=>{clearTimeout(i),o()})})}async function Pt(e,t={}){let n=t.now??Date.now,o=$s(e.payload,n());if(e.signal.throwIfAborted(),!o.video)throw new r("display_video_required","Reason desktops stream as video now; this request came without it.");let s=t.platform??process.platform;if(s!=="linux"&&s!=="darwin"&&s!=="win32")throw new r("display_video_unsupported","This machine does not serve desktop video.");let i=o.video,p=(t.video?.desktop??(s==="darwin"?async()=>hr:s==="win32"?async()=>gr:Be))();return await zs(e.signal,o,t,n,(l)=>Er(l,{request:i,desktop:p,...o.viewer?{viewer:o.viewer}:{},viewerSameNetwork:o.viewer_same_network===!0},t.video),(l)=>Fr({type:"error",code:l}))}function zs(e,t,n,o,s,i){let p=o();return new Promise((l,h)=>{let f=null,x=!1,u=!1,S,y,A,q=!1,c=null,_=(w)=>{if(u)return;if(c)w=c;u=!0,clearTimeout(S),clearTimeout(y),e.removeEventListener("abort",D),A?.close();try{f?.close(1000,"display_session_over")}catch{}if("error"in w){h(w.error);return}l({reason:w.reason,...A?.summary(),duration_ms:Math.max(0,o()-p)})},E=()=>_({error:new r("display_relay_unavailable","Reason could not reach the desktop relay.")}),D=()=>{let w=e.reason;_({error:w instanceof r?w:new r("cancelled","Reason closed the desktop session.")})},N=()=>{if(!c||!f)return;let w=c.error;try{f.send(i(w instanceof r?w.code:"display_unavailable"))}catch{}_(c)};if(A=s({get done(){return u||c!==null},get open(){return x&&!u&&c===null},get bufferedAmount(){return f?.bufferedAmount??0},send(w){if(u||c||!x||!f)return;try{f.send(w)}catch{_({reason:"relay_closed"})}},end:(w)=>{if(u||c)return;if(!("error"in w)){_(w);return}if(c=w,q&&x)N()}}),u){A.close();return}if(e.aborted){D();return}e.addEventListener("abort",D,{once:!0}),S=setTimeout(()=>_({reason:"session_expired"}),Math.max(1,Date.parse(t.expires_at)-o())),y=setTimeout(()=>_({reason:"viewer_absent"}),n.viewerWaitMs??Js);try{f=(n.connect??vr)(t.relay_url,(n.loadProxy??j)()?.url)}catch{E();return}f.binaryType="arraybuffer",f.onopen=()=>{if(u||!f)return;x=!0,A?.opened()},f.onmessage=(w)=>{if(u)return;let M=w.data,B=M instanceof ArrayBuffer?new Uint8Array(M):ArrayBuffer.isView(M)?new Uint8Array(M.buffer,M.byteOffset,M.byteLength):null;if(!B||B.byteLength===0)return;if(clearTimeout(y),q=!0,c){N();return}A?.received(B)},f.onclose=()=>{if(u)return;if(!x){E();return}_({reason:"relay_closed"})},f.onerror=()=>{if(u||x)return;E()}})}
|
|
250
|
-
export{$e,Fi,F,Qe,ji,Ct,yr,P,Ui,At,us,V,Be,Pt};
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{g,Ki,ve}from"./vm-hands-entry-lite-ckv17tn8.js";import{l,Rt,Fe,Sr,Ot,xr,et}from"./vm-hands-entry-lite-q0k6kx6d.js";import{ut,Gt}from"./vm-hands-entry-lite-k278g9kj.js";import{Qr}from"./vm-hands-entry-lite-2wvsyggd.js";import{B,m,ee,Le}from"./vm-hands-entry-lite-463m6ejk.js";import{F}from"./vm-hands-entry-lite-ewwx4fr3.js";import{co}from"./vm-hands-entry-lite-2hvbgp1n.js";import{be,qe,An,Dr}from"./vm-hands-entry-lite-cc2tgsqp.js";import{f,b,h}from"./vm-hands-entry-lite-09m2cdkw.js";import{a}from"./vm-hands-entry-lite-89z488gz.js";import{go,Gr,y,t,A,mt,o,d,Te,u,i,c,_,$o,s,n,Kr}from"./vm-hands-entry-lite-907pa7f9.js";import{closeSync as Kh,existsSync as Vh,mkdirSync as Jh,openSync as Gh,readdirSync as Yh,realpathSync as pe,rmSync as Xh}from"fs";import{dirname as Qh,join as J,resolve as ew}from"path";import{createHash as At}from"crypto";import{platform as It}from"os";import{join as xt}from"path";var Lt=_("store",[c({version:n(1),store:n("keychain")}),c({version:n(1),store:n("file"),api_key:t().min(1).max(4096)})]),He=(e)=>xt(e,"api-key.json");function $e(e){let r=At("sha256").update(`reason-connect-api-key
|
|
3
|
-
${e}`).digest("hex");return new Fe(Rt(),It(),r)}function ge(e,r=$e(e)){if(!f(He(e)))return null;let p=Lt.parse(JSON.parse(h(He(e))));if(p.store==="file")return p.api_key;try{let k=r.loadBinding();return k?new TextDecoder().decode(k):null}catch(k){if(!(k instanceof l))throw k;throw Error("worker_api_key_unreadable")}}import{readdirSync as Yt,renameSync as Kn,rmSync as Vn}from"fs";import{join as te}from"path";import{createHash as Dt}from"crypto";import{platform as Wt}from"os";import{join as N}from"path";function w(e){return{state:N(m(e),"device.json"),control:N(m(e),"control.json"),lock:N(m(e),"lifecycle.lock"),socket:N(m(e),"control.sock"),daemon:N(m(e),"daemon.json"),releaseCheck:N(m(e),"release-check.json"),updateDeferral:N(m(e),"update-deferral.json"),firstHeartbeat:N(m(e),"first-heartbeat.json")}}var ln=i({version:n(1),device_id:t().min(1).max(160),offer:Te().optional(),enrollment_ms:o().int().nonnegative().max(Gt).optional()});function z(e,r=!1){b(m(e),r);let p=["local-device.key","local-device.binding","device.json"].filter((k)=>{let S=N(m(e),k);if(!f(S))return!1;return h(S),!0});return e.lifetime==="persistent"&&p.join()==="device.json"?Nt(e):new Sr(m(e))}function Nt(e){return new Fe(Rt(),Wt(),Ht(e))}function Ht(e){let r=Ut(e);return Dt("sha256").update(`reason-worker
|
|
4
|
-
${r?.directory??m(e)}`).digest("hex")}var $t="keychain-scope.json";var Bt=c({version:n(1),directory:t().min(1),devicePublicKey:t().min(1)});function Ut(e){let r=N(m(e),$t);if(!f(r))return null;let p=Bt.safeParse(JSON.parse(h(r))),k=w(e).state;if(!p.success||!f(k))return null;return JSON.parse(h(k))?.devicePublicKey===p.data.devicePublicKey?p.data:null}function M(e){if(!f(m(e)))return null;let r=xr(w(e).state,{proofStore:z(e),repair:!1}),p=r!==null&&Ki(e.apiOrigin,r.apiOrigin),k=p?[ee(e),ee({...e,apiOrigin:r.apiOrigin})]:[ee(e)];if(r&&(!k.includes(r.worker?.configDigest??"")||r.worker.lifetime!==e.lifetime||r.apiOrigin!==e.apiOrigin&&!p||r.roots.length>32||r.roots[0]?.path!==e.workspaceRoot||r.handsSlots!==e.slots))throw Error("worker_config_binding_mismatch");return r}var Ft=c({version:n(1),drained:d(),revoked:d()});function H(e){let r=w(e).control;return f(r)?Ft.parse(JSON.parse(h(r))):{version:1,drained:!1,revoked:!1}}var qt=c({read:d(),write:d(),execute:d(),discover_environment:d(),expose_mcp:n(!1)}),zt=c({version:n(1),organization_id:t().min(1).max(160),enrollment_ticket:t().min(1).max(4096),code_verifier:t().regex(/^[A-Za-z0-9._~-]{43,128}$/),root_fingerprint_key:t().regex(/^[a-f0-9]{64}$/),root:c({path_fingerprint:t().regex(/^[a-f0-9]{64}$/),permissions:qt,execution_mode:s(["confined","host"]).default("confined")}),folders:u(c({path_fingerprint:t().regex(/^[a-f0-9]{64}$/)})).min(1).max(31).optional()}),vn=i({device_id:t().min(1).max(160),organization_id:t().min(1).max(160),auth_scheme:n("p256"),protocol_version:n(2),roots:u(i({id:t().min(1),label:t(),path_fingerprint:t()})).min(1).max(32),headless:i({lifecycle:s(["persistent","ephemeral"]),expires_at:y.datetime({offset:!0})}),first_heartbeat:Te().optional()});var Un=c({version:n(1),install_id:A(),fingerprint_key:t().regex(/^[a-f0-9]{64}$/)}),Fn=i({enrollment_ticket:t().min(1).max(4096),expires_at:y.datetime({offset:!0}),device_kind:n("headless"),lifecycle:s(["persistent","ephemeral"]),device_expires_at:y.datetime({offset:!0})});var jn=i({credentialKind:s(["oauth","api_key"]).optional(),apiOrigin:mt(),clientId:t(),accessToken:t().min(1).max(32768),refreshToken:t().max(32768),expiresAt:y.datetime({offset:!0}),scopes:u(t().max(128)).max(128),orgId:t().min(1).max(160)});var ze=8;var Zt=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,_e=(e)=>te(m(e),"workspaces"),Qt="account.json",er=(e)=>f(te(e,Qt));function Re(e){let r;try{r=Yt(_e(e))}catch{return[]}return r.filter((p)=>Zt.test(p)).sort().map((p)=>{let k=te(_e(e),p),S=te(k,"worker.json"),v=null;try{let P=B.safeParse(JSON.parse(h(S)));if(P.success&&P.data.stateDirectory===k)v=P.data}catch{}return{organizationId:p,directory:k,configPath:S,config:v,account:er(k)}})}var tr=(e)=>te(_e(e),"listed.json");function rr(e){try{let r=JSON.parse(h(tr(e))),p=r.names&&typeof r.names==="object"&&!Array.isArray(r.names)?Object.fromEntries(Object.entries(r.names).filter((k)=>typeof k[1]==="string")):{};return{listed:r.listed===!0,reason:r.reason==="sign_in"?"sign_in":null,blocked:Array.isArray(r.blocked)?r.blocked.filter((k)=>typeof k==="string"):[],names:p}}catch{return null}}function Ve(e,r){let p=Re(e),k=p.filter((E)=>E.account),S=p.filter((E)=>!E.account),v=rr(e),P=v&&!v.listed?v.reason:null,R=P||S.length===0&&v&&!v.listed?[]:S;if(k.length===0&&R.length===0&&(P||v&&!v.listed))return{workspaces:null,off:P};return{off:P,workspaces:[...k,...R].map(({organizationId:E,config:L,account:x})=>{let C=!1,T=null,D=!1,he=null;try{C=L?H(L).revoked:!1,T=L&&!C?M(L):null;let Ne=L?et(w(L).daemon):null;D=r&&!!T&&Ne?.state==="connected",he=D?Ot(Ne,T):null}catch{}return{...he?{permission_recovery:he}:{},organization_id:E,device_id:T?.deviceId??null,name:v?.names?.[E]??null,root:T?.roots[0]?{id:T.roots[0].id,permissions:T.roots[0].permissions}:null,state:C?"removed":D?"connected":"not_running",blocked:!x&&!C&&!D&&(v?.blocked.includes(E)??!1),...x?{account:!0}:{}}})}}import{readFileSync as nr}from"fs";function Xt(e){try{let r=JSON.parse(nr(`${e}.keep-awake.json`,"utf8"));return r!==null&&typeof r==="object"&&"version"in r&&r.version===1&&"enabled"in r&&r.enabled===!0?"battery_and_ac":void 0}catch(r){return r.code==="ENOENT"?"battery_and_ac":void 0}}import{chmodSync as Bi,lstatSync as Qe,mkdtempSync as Ui,realpathSync as ir,rmdirSync as Fi,rmSync as ji,unlinkSync as qi}from"fs";import{createConnection as ar,createServer as Vi}from"net";import{basename as Ye,dirname as Xe,join as oe}from"path";var sr=s(["status","drain","resume","stop","reload_roots"]),cr=c({version:n(1),instanceId:t(),deviceId:t(),phase:s(["starting","running","reconnecting","stopping"]),drained:d(),activeClaims:o().int().nonnegative(),activeSessions:o().int().nonnegative().optional(),executionEligible:d(),supportedOperations:u(s(ut)).max(ut.length).optional(),capabilityReadiness:$o(s(ut),d()).optional(),lastHeartbeat:t().nullable(),expiresAt:t()}),Qi=c({nonce:t(),action:sr}),lr=i({nonce:A()}),dr=c({version:n(1),nonce:A(),socketPath:t().max(100)});function ur(e){return oe(w(e).lock,"control.json")}function tt(e){return b(w(e).lock),lr.parse(JSON.parse(h(oe(w(e).lock,"owner.json"))))}function Ze(e){if(!f(e))return!1;let r=Qe(e);if(!r.isSocket()||r.uid!==process.getuid?.()||(r.mode&63)!==0)throw Error("worker_control_socket_not_private");return!0}function rt(e,r){let p=ur(e);if(!f(p)){let v=w(e).socket;if(!f(v)||!Qe(v).isSocket())return null;return Ze(v)?v:null}let k=dr.parse(JSON.parse(h(p)));if(k.nonce!==r)throw Error("worker_instance_changed");if(process.platform==="win32"){if(!fr.test(k.socketPath))throw Error("worker_control_endpoint_invalid");return k.socketPath}let S=Xe(k.socketPath);if(Xe(S)!==ir("/tmp")||!/^(?:reason|ara)-worker-[A-Za-z0-9]{6}$/.test(Ye(S))||Ye(k.socketPath)!=="control.sock"||Buffer.byteLength(k.socketPath)>100)throw Error("worker_control_endpoint_invalid");if(!f(S))return null;return b(S),Ze(k.socketPath)?k.socketPath:null}var fr=/^\\\\\.\\pipe\\reason-worker-[0-9a-f-]{36}$/;function mr(e,r){try{let p=JSON.parse(h(oe(w(e).lock,"owner.json"))),k=p&&typeof p==="object"?p[r]:void 0;return typeof k==="string"?k:null}catch{return null}}function ot(e){return mr(e,"runtime_version")}function nt(e,r){if(r)return r.message==="worker_control_timeout"?"socket_timeout":"bad_reply";try{if(!f(oe(w(e).lock,"owner.json")))return"no_lock";return rt(e,tt(e).nonce)?"socket_refused":"no_socket"}catch{return"bad_reply"}}var ea=c({instance:t().nullable(),since:o().int().nonnegative()});async function G(e,r){let p=w(e);if(!f(oe(p.lock,"owner.json")))return null;let k=tt(e),S=rt(e,k.nonce);if(!S)return null;return new Promise((v,P)=>{let R=ar(S),E="",L=!1,x=(C,T)=>{if(L)return;if(L=!0,R.destroy(),T)P(T);else v(C)};R.setTimeout(2000,()=>R.destroy(Error("worker_control_timeout"))),R.on("connect",()=>R.write(JSON.stringify({nonce:k.nonce,action:r})+`
|
|
5
|
-
`)),R.on("data",(C)=>{if(E+=C.toString(),Buffer.byteLength(E)>16384)R.destroy(Error("worker_control_oversize"))}),R.on("error",(C)=>{if("code"in C&&["ECONNREFUSED","ENOENT"].includes(String(C.code)))x(null);else x(null,C.message==="worker_control_timeout"?C:Error("worker_control_unavailable"))}),R.on("end",()=>{try{let C=cr.parse(JSON.parse(E));if(C.instanceId!==k.nonce)throw Error("worker_instance_changed");x(C)}catch{x(null,Error("worker_control_invalid_response"))}}),R.once("close",()=>x(null,Error("worker_control_unavailable")))})}import{realpathSync as gr}from"fs";import{constants as Pe}from"fs";import{open as pr}from"fs/promises";var sa={platform:process.platform,home:a,async openFile(e){let r=await pr(e,Pe.O_RDONLY|Pe.O_NOFOLLOW|Pe.O_NONBLOCK);return{isFile:async()=>(await r.stat()).isFile(),close:()=>r.close()}}};var Fa=co(gr(process.execPath));var Ps=Buffer.from([0,255,3,4]);import{execFile as to}from"child_process";import{promisify as ro}from"util";var vr=new RegExp("^/media/pr-screenshots/([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/([a-z0-9][a-z0-9._-]*)\\.(png|jpe?g|gif|webp|webm|mp4)$","i");var Rr=new Set(["png","jpg","jpeg","gif","webp"]),Pr=new Set(["webm","mp4"]);function Er(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function st(e,r){let p;try{p=new URL(e)}catch{return null}let k=Er(r),S=p.hostname==="ara.so"||p.hostname.endsWith(".ara.so")||p.hostname==="reasonmachines.ai"||p.hostname.endsWith(".reasonmachines.ai")||p.hostname==="reasonmachines.com"||p.hostname.endsWith(".reasonmachines.com");if(p.protocol!=="https:"||!S&&p.origin!==k||p.username||p.password||p.port||p.search||p.hash)return null;let v=vr.exec(p.pathname);if(!v)return null;let P=v[1]?.toLowerCase(),R=v[2]?.toLowerCase(),E=v[3]?.toLowerCase(),L=v[4]?.toLowerCase();if(!P||!R||!E||!L)return null;let x=Rr.has(L)?"image":Pr.has(L)?"video":null;if(!x)return null;let C=/^(before|after)[\s:_-]+/.exec(E),T=p.pathname.replace(/^\/media\//,"");return{url:p.toString(),storagePath:T,runId:P,artifactId:R,fileName:`${E}.${L}`,kind:x,phase:C?.[1]==="before"||C?.[1]==="after"?C[1]:null}}var Cr=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,ct=(e)=>Boolean(e&&typeof e==="object"&&!Array.isArray(e)),K=()=>{throw Error("cloud_browser_media_request_invalid")};function Ce(e){if(!ct(e)||Object.keys(e).some((v)=>!["runId","configuredMediaOrigin","media"].includes(v))||typeof e.runId!=="string"||!Cr.test(e.runId)||typeof e.configuredMediaOrigin!=="string"||e.configuredMediaOrigin.length>2048||!Array.isArray(e.media)||e.media.length<1||e.media.length>8)return K();let r;try{r=new URL(e.configuredMediaOrigin)}catch{return K()}if(r.protocol!=="https:"||r.username||r.password||r.port||!Le(r.origin,{mode:"public_web"}).allowed)return K();let p=e.runId.toLowerCase(),k=new Set,S=e.media.map((v)=>{if(!ct(v)||Object.keys(v).some((R)=>!["url","sourceUrl","kind"].includes(R))||typeof v.url!=="string"||v.url.length>2048||typeof v.sourceUrl!=="string"||v.sourceUrl.length>8192||!["image","video"].includes(String(v.kind)))return K();let P=st(v.url,r.origin);if(!P||new URL(P.url).origin!==r.origin||P.runId!==p||P.kind!==v.kind||P.url!==v.url||k.has(v.url))return K();if(k.add(v.url),v.sourceUrl!==v.url){let R;try{R=new URL(v.sourceUrl)}catch{return K()}let E=/^\/(?:[a-f0-9]{40}|[a-f0-9]{64})\/([a-f0-9]+)$/.exec(R.pathname)?.[1];if(v.kind!=="image"||R.origin!=="https://camo.githubusercontent.com"||R.username||R.password||R.search||R.hash||!E||E.length%2!==0||Buffer.from(E,"hex").toString("utf8")!==v.url)return K()}return{url:v.url,sourceUrl:v.sourceUrl,kind:v.kind}});return{runId:e.runId,configuredMediaOrigin:r.origin,media:S}}var I=t().uuid(),X=t().regex(/^[a-f0-9]{64}$/),V=y.datetime({precision:3}),Ae=t().regex(/^[a-zA-Z0-9_-]{1,160}$/),ft=t().max(2048).regex(/^https:\/\/github\.com\/[A-Za-z0-9_-]+\/[A-Za-z0-9_.-]+\/pull\/[1-9][0-9]*$/).refine((e)=>![".",".."].includes(e.split("/")[4])),U=i({kind:n("primary_mac"),version:n(1),organizationId:Ae,userId:Ae,sessionId:Ae,runId:I,deviceId:I,rootId:I,rootRevision:t().min(1).max(64),binding:s(["workspace_source","mcp_control"]),targetRevision:o().int().nonnegative(),generation:I,profile:t().regex(/^(Default|Profile [0-9]+)$/),extensionInstanceId:t().min(1).max(1024)}).strict().refine((e)=>e.binding!=="workspace_source"||e.targetRevision===0),Ar=Kr().transform((e,r)=>{try{return Qr(e)}catch{return r.addIssue({code:"custom",message:"proof_visual_contract_invalid"}),go}}),ue=i({version:n(1),owner:U,contextId:I,preparedAt:V,expiresAt:V,prUrl:ft,headSha:t().regex(/^[a-f0-9]{40}$/),skillDigest:X,evidenceKind:s(["image","video"]),visualPlan:Ar.optional(),uploadOrigin:t().url().refine((e)=>{let r=new URL(e);return r.protocol==="https:"&&r.origin===e&&!r.username&&!r.password}).optional()}).strict().refine((e)=>Date.parse(e.expiresAt)>Date.parse(e.preparedAt)&&Date.parse(e.expiresAt)-Date.parse(e.preparedAt)<=300000),Ir=i({version:n(1),producer:n("primary_mac"),context:ue,captureId:I,operationId:I,attemptId:I,tabId:o().int().positive(),startedAt:V,finishedAt:V,sha256:X,media:_("contentType",[i({contentType:n("image/png"),sizeBytes:o().int().min(24).max(8388608),width:o().int().min(1).max(4096),height:o().int().min(1).max(4096)}).strict(),i({contentType:n("video/webm"),sizeBytes:o().int().min(128).max(10485760),durationSeconds:o().min(0.05).max(15),frameCount:o().int().min(1).max(450),receivedFrameCount:o().int().min(1).max(2000)}).strict()])}).strict().superRefine((e,r)=>{let p=Date.parse(e.startedAt),k=Date.parse(e.finishedAt);if(p<Date.parse(e.context.preparedAt)||k<p||k>Date.parse(e.context.expiresAt)||k-p>30000||e.media.contentType==="video/webm"&&(e.media.receivedFrameCount<e.media.frameCount||Math.abs((k-p)/1000-e.media.durationSeconds)>0.1))r.addIssue({code:"custom",message:"mac_pr_proof_capture_chronology_invalid"})}),vc=_("action",[i({action:n("screenshot"),context_id:I,tab_id:o().int().positive()}).strict(),i({action:n("start_video"),context_id:I,tab_id:o().int().positive(),seconds:o().int().min(1).max(15)}).strict(),i({action:n("stop_video"),recording_operation_id:I}).strict()]),fe=i({login:t().regex(/^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,37}[a-zA-Z0-9])?$/),id:t().regex(/^[1-9][0-9]{0,19}$/).nullable()}).strict(),ce=t().regex(/^[1-9][0-9]{0,19}$/),le=i({version:n(1),owner:U,expectedActorId:ce.nullable(),repositoryId:ce,repositoryFullName:t().max(200).regex(/^[A-Za-z0-9_-]+\/[A-Za-z0-9_.-]+$/).refine((e)=>![".",".."].includes(e.split("/")[1]))}).strict(),Or=["browser_unavailable","github_page_unavailable","identity_check_failed","operation_incomplete","attachment_unavailable"],Lr=_("status",[le.extend({status:n("ready"),observedActor:fe,checkedAt:V}),le.extend({status:n("not_ready"),reason:s(["authentication_required","identity_mismatch","authority_lost","unavailable"]),cause:s(Or).optional()})]).refine((e)=>e.status!=="ready"||e.expectedActorId===null||e.observedActor.id===e.expectedActorId),Y=i({version:n(1),owner:U,expectedActorId:ce.nullable(),authenticatedActor:fe,attemptId:I,captureId:I,prUrl:ft,repositoryId:ce,headSha:t().regex(/^[a-f0-9]{40}$/),sha256:X,sizeBytes:o().int().min(128).max(10485760),contentType:n("video/webm")}).strict(),pt=t().regex(/^https:\/\/github\.com\/user-attachments\/assets\/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/),Mr=_("status",[Y.extend({status:n("not_attempted"),reason:s(["authentication_required","attachment_unavailable","identity_mismatch","capture_invalid","authority_lost"])}),Y.extend({status:n("uncertain"),reason:n("upload_outcome_unknown")}),Y.extend({status:n("uploaded"),observedActor:fe,nativeUrl:pt,uploadedAt:V})]).refine((e)=>(e.expectedActorId===null||e.authenticatedActor.id===e.expectedActorId)&&(e.status!=="uploaded"||e.observedActor.id===e.authenticatedActor.id&&e.observedActor.login===e.authenticatedActor.login)),de=Y.extend({nativeUrl:pt,observedActor:fe,bodySha256:X}),Tr=_("status",[de.extend({status:n("incomplete"),reason:s(["authentication_required","identity_mismatch","playback_unverified","authority_lost"])}),de.extend({status:n("verified"),sourceSha256:X,width:o().int().min(1).max(4096),height:o().int().min(1).max(4096),durationSeconds:o().positive().max(30),advancedSeconds:o().min(0.05).max(10),advancedFrames:o().int().positive(),playbackRestored:n(!0),verifiedAt:V})]).refine((e)=>(e.expectedActorId===null||e.authenticatedActor.id===e.expectedActorId)&&e.observedActor.id===e.authenticatedActor.id&&e.observedActor.login===e.authenticatedActor.login&&(e.status!=="verified"||e.sourceSha256===e.sha256)),Wr=Kr().transform((e,r)=>{try{let p=Ce(e);if(p.media.some((k)=>k.kind!=="image"))throw Error();return p}catch{return r.addIssue({code:"custom",message:"proof_media_request_invalid"}),go}}),Nr=_("action",[i({action:n("auth_check"),input:le}).strict(),i({action:n("prepare"),context:ue}).strict(),i({action:n("capture_png"),owner:U,contextId:I,tabId:o().int().positive()}).strict(),i({action:n("start_video"),owner:U,contextId:I,tabId:o().int().positive(),seconds:o().int().min(1).max(15)}).strict(),i({action:n("inspect_capture"),owner:U,captureId:I}).strict(),i({action:n("publish_video"),input:Y}).strict(),i({action:n("verify_png_media"),owner:U,media:Wr}).strict().refine((e)=>e.media.runId===e.owner.runId),i({action:n("verify_saved_media"),input:de}).strict(),i({action:n("publish_png"),owner:U,attemptId:I,captureId:I,sha256:X,sizeBytes:o().int().min(24).max(8388608),storagePath:t().max(512),uploadUrl:t().url().max(8192)}).strict()]);var Hr=i({requestId:I,command:Nr}).strict();var $r={type:"object",required:["action"],properties:{action:{type:"string",enum:["screenshot","start_video","stop_video"]},context_id:{type:"string",format:"uuid"},tab_id:{type:"integer",minimum:1},seconds:{type:"integer",minimum:1,maximum:15},recording_operation_id:{type:"string",format:"uuid"}},additionalProperties:!1},lt={type:"string",format:"uuid",description:"capture_context_id from tools.pr.prepareProof."},dt={type:"integer",minimum:1,description:"An already-owned tab's id."},Sc={...$r,oneOf:[{type:"object",required:["action","context_id","tab_id"],additionalProperties:!1,properties:{action:{type:"string",const:"screenshot"},context_id:lt,tab_id:dt}},{type:"object",required:["action","context_id","tab_id","seconds"],additionalProperties:!1,properties:{action:{type:"string",const:"start_video"},context_id:lt,tab_id:dt,seconds:{type:"integer",minimum:1,maximum:15}}},{type:"object",required:["action","recording_operation_id"],additionalProperties:!1,properties:{action:{type:"string",const:"stop_video"},recording_operation_id:{type:"string",format:"uuid",description:"The recording_operation_id start_video returned."}}}]};var Ac=i({operationId:t().uuid(),attemptId:t().uuid(),contextId:t().uuid(),tabId:o().int().positive()}).strict();var Br=String.raw`async (media) => {
|
|
6
|
-
const deadline = (promise) => {
|
|
7
|
-
let timer;
|
|
8
|
-
return Promise.race([promise, new Promise((_, reject) => {
|
|
9
|
-
timer = setTimeout(() => reject(new Error("media_decode_timeout")), 12000);
|
|
10
|
-
})]).finally(() => clearTimeout(timer));
|
|
11
|
-
};
|
|
12
|
-
const items = await Promise.all(media.map(async (item) => {
|
|
13
|
-
const element = document.createElement(item.kind === "image" ? "img" : "video");
|
|
14
|
-
document.body.append(element);
|
|
15
|
-
try {
|
|
16
|
-
if (item.kind === "image") {
|
|
17
|
-
element.src = item.sourceUrl;
|
|
18
|
-
await deadline(element.decode());
|
|
19
|
-
if (!element.complete || !element.naturalWidth || !element.naturalHeight) throw new Error("media_image_not_decoded");
|
|
20
|
-
return { ...item, width: element.naturalWidth, height: element.naturalHeight };
|
|
21
|
-
}
|
|
22
|
-
element.muted = true;
|
|
23
|
-
element.playsInline = true;
|
|
24
|
-
element.preload = "auto";
|
|
25
|
-
const loaded = new Promise((resolve, reject) => {
|
|
26
|
-
element.addEventListener("loadeddata", resolve, { once: true });
|
|
27
|
-
element.addEventListener("error", () => reject(new Error("media_video_not_decoded")), { once: true });
|
|
28
|
-
});
|
|
29
|
-
element.src = item.sourceUrl;
|
|
30
|
-
await deadline(loaded);
|
|
31
|
-
if (!element.videoWidth || !element.videoHeight || !Number.isFinite(element.duration) || element.duration <= 0) throw new Error("media_video_not_decoded");
|
|
32
|
-
const initial = element.currentTime;
|
|
33
|
-
await deadline(element.play());
|
|
34
|
-
await deadline(new Promise((resolve, reject) => {
|
|
35
|
-
let timer;
|
|
36
|
-
const check = () => {
|
|
37
|
-
if (element.error) { clearTimeout(timer); reject(new Error("media_video_not_decoded")); return; }
|
|
38
|
-
if (element.currentTime - initial >= 0.05) { clearTimeout(timer); resolve(); return; }
|
|
39
|
-
timer = setTimeout(check, 25);
|
|
40
|
-
};
|
|
41
|
-
element.addEventListener("pause", () => { clearTimeout(timer); reject(new Error("media_video_not_advancing")); }, { once: true });
|
|
42
|
-
check();
|
|
43
|
-
}));
|
|
44
|
-
return { ...item, width: element.videoWidth, height: element.videoHeight, advancedSeconds: element.currentTime - initial };
|
|
45
|
-
} finally {
|
|
46
|
-
if (item.kind === "video") element.pause();
|
|
47
|
-
element.removeAttribute("src");
|
|
48
|
-
element.remove();
|
|
49
|
-
}
|
|
50
|
-
}));
|
|
51
|
-
return { verified: true, items };
|
|
52
|
-
}`;import{execFile as Ur}from"child_process";import{promisify as Fr}from"util";var Tc=Fr(Ur);var Xc=_("ok",[i({ok:n(!0),actor:i({login:t(),id:t().nullable()}).strict()}).strict(),i({ok:n(!1),reason:s(["authentication_required","identity_mismatch","attachment_unavailable"])}).strict()]),Zc=i({version:n("0.1.42"),metadata:i({extensionId:t(),extensionInstanceId:t(),nativeHostName:t()})});var tl=i({version:n(1),recording_operation_id:t().uuid(),proof_ready:n(!1),acknowledged_at:y.datetime()}).strict(),me=i({action:n("start"),request_id:t().uuid(),profile:t().regex(/^(Default|Profile [0-9]+)$/),tab_id:o().int().positive(),seconds:o().int().min(1).max(15)}).strict(),ht=i({action:n("inspect"),recording_operation_id:t().uuid()}).strict(),rl=_("action",[me,ht]),wt=i({recording_operation_id:t().uuid()}).strict(),xe={device_id:t().uuid(),root_id:t().uuid()},qr=_("action",[me.extend(xe),ht.extend(xe),wt.extend({...xe,action:n("stop")})]),ol=Gr(qr),nl=i({version:n(1),recordingId:t().uuid(),proofReady:n(!1),capture:i({captureId:t().uuid(),contentType:n("video/webm"),sha256:t().regex(/^[a-f0-9]{64}$/),sizeBytes:o().int().min(128).max(10485760),startedAt:y.datetime(),finishedAt:y.datetime(),durationSeconds:o().min(0.05).max(15),frameCount:o().int().min(1).max(450),receivedFrameCount:o().int().min(1).max(2000),owner:i({runId:t().uuid(),deviceId:t().uuid(),rootId:t().uuid(),rootRevision:t().max(64),profile:t().regex(/^(Default|Profile [0-9]+)$/),extensionInstanceId:t().min(1).max(1024),generation:t().uuid(),browserScope:t().max(128),tabId:o().int().positive()}).strict()}).strict().refine((e)=>e.receivedFrameCount>=e.frameCount&&Math.abs((Date.parse(e.finishedAt)-Date.parse(e.startedAt))/1000-e.durationSeconds)<=0.1)}).strict();var pl=me.extend({action:s(["start","inspect"]),recording_boot_generation:t().uuid(),recording_operation_id:t().uuid().optional(),recording_attempt_id:t().uuid().optional()}).strict();import{execFile as zr}from"child_process";import{promisify as Vr}from"util";var yl=Vr(zr);var Jr=s(["recording_failed","authority_lost","browser_timeout","cleanup_failed","no_frames","encoding_invalid","frame_invalid","timestamp_invalid","capture_bound","ack_failed","cancelled","detached","browser_changed","tab_not_owned","encoding_frames_failed","encoding_encode_failed","encoding_output_failed","encoding_probe_failed","encoding_probe_streams_failed","encoding_probe_dimensions_failed","encoding_probe_duration_failed","encoding_probe_frames_failed","encoding_probe_format_failed","encoding_decode_failed","encoding_pin_failed"]);var j=t().min(1).max(1024),gt=i({path:j,sha256:t().regex(/^[a-f0-9]{64}$/)}).strict(),Yr=i({owner:i({runId:j,deviceId:j,rootId:j,rootRevision:j,profile:t().regex(/^(Default|Profile [0-9]+)$/),extensionInstanceId:j,generation:j,browserScope:j,tabId:o().int().positive()}).strict(),socketPath:j,extensionId:t().regex(/^[a-p]{32}$/),nativeHostName:j,seconds:o().int().min(1).max(15),encoder:i({ffmpeg:gt,ffprobe:gt}).strict()}).strict();var $l=i({version:n("0.1.42"),metadata:i({extensionId:t(),extensionInstanceId:t(),nativeHostName:t()})});var Xl=i({operationId:t().uuid()}).strict();var yd=ro(to);var _d=i({version:n("0.1.42"),metadata:i({extensionId:n(F),extensionInstanceId:t().min(1).max(1024)})});var Oe=1;var Uf=c({type:n("configure"),protocol:n(Oe),version:t(),config:B}),Ff=c({type:n("ticket"),organizationId:t().min(1).max(160),receipt:Te()}),jf=c({type:s(["ping","stop"])});var im=c({type:n("hello"),protocol:n(Oe),version:t(),platform:s(["linux","darwin"]),architecture:s(["arm64","x64"]),enrolled:d()}),am=c({type:n("ticket-request"),request:c({install_id:A(),code_challenge:t().regex(/^[A-Za-z0-9_-]{43}$/),lifecycle:s(["persistent","ephemeral"]),roots:u(c({path_fingerprint:t().regex(/^[a-f0-9]{64}$/),execution_mode:s(["confined","host"]),permissions:c({read:n(!0),write:n(!0),execute:n(!0),discover_environment:n(!0),expose_mcp:n(!1)})})).length(1)})}),sm=_("type",[c({type:n("running"),deviceId:t().min(1).max(160),expiresAt:y.datetime({offset:!0}),lifetime:s(["persistent","ephemeral"]),supervision:n("ssh-foreground")}),c({type:n("pong")}),c({type:n("stopped")})]);var ko=1;var Z=A(),vo=c({kind:n("install_only"),authorityId:Z,organizationId:Z,userId:Z,connectionId:Z,attemptId:Z,purpose:n("install"),generation:o().int().positive(),transport:n("reverse_ssh"),expiresAt:y.datetime({offset:!0}),maxDurationMs:n(300000),maxChannels:n(1),allowTcpForwarding:n(!1),allowPty:n(!1)}),So=t().max(2048).superRefine((e,r)=>{let p;try{p=new URL(e)}catch{r.addIssue({code:"custom",message:"invalid relay url"});return}if(p.protocol!=="ws:"&&p.protocol!=="wss:"){r.addIssue({code:"custom",message:"invalid relay protocol"});return}if(p.username||p.password||p.search||p.hash){r.addIssue({code:"custom",message:"relay credentials or modifiers are not allowed"});return}let k=p.pathname.split("/");if(k.length!==4||k[1]!=="device"||!Z.safeParse(k[2]).success||!/^[a-f0-9]{64}$/.test(k[3]??""))r.addIssue({code:"custom",message:"invalid device relay path"});if(p.protocol==="ws:"&&!["127.0.0.1","[::1]"].includes(p.hostname))r.addIssue({code:"custom",message:"plaintext relay must be loopback"})});var dm=c({protocol:n(ko),type:n("ssh_install_relay"),authorityToken:t().regex(/^(?:reason|ara)_ssh_install_[A-Za-z0-9_-]{43}$/),authority:vo,relayUrl:So,endpoint:c({host:n("127.0.0.1"),port:n(22)})});class Et extends Error{}function De(e){if(!f(e))return null;let r=new Et(`${e} is not a valid worker config. Remove it to start over.`),p;try{p=JSON.parse(h(e))}catch(S){if(S instanceof SyntaxError)throw r;throw S}let k=B.safeParse(p);if(!k.success)throw r;return k.data}var Lo=200;var nh=c({version:n(1),session_ids:u(t().min(1).max(200)).max(Lo)});function Ke(e,r,p=!1){let k=Mo(e,r,p);return k.length===1?k[0]:J(ve(J(e,".config")),...Ct(r,p))}var Ct=(e,r)=>[...e==="production"?[]:[e],r?"connect-once":"connect"];function Mo(e,r,p=!1){let k=e;try{k=pe(e)}catch{}return["ara","reason"].map((S)=>J(k,".config",S,...Ct(r,p))).filter(To)}function To(e){try{if(pe(e)!==e)return!1;return De(J(e,"worker.json"))?.stateDirectory===e}catch{return!1}}var Do="disconnected.json";function jo(e,r){return f(J(Ke(e,r),Do))}function Wo(e,r){return r==="darwin"&&e.userChrome!==!1}var Mw=i({root:i({id:t().min(1).max(160),label:t().max(160),path_fingerprint:t()})});var Tw=Symbol("serve here");async function Uo(e={}){let r=pe(e.home??a()),p=De(J(Ke(r,e.channel??g()),"worker.json"));if(!p)return null;let k,S=await(e.controlWorker??G)(p,"status").catch((D)=>(k=D instanceof Error?D:Error(String(D)),null)),v=S?ot(p):null,P=e.serviceHost??be(r),R=qe(p,P,"connect"),E=H(p).revoked,L=!E&&!S,x=(()=>{try{return M(p)}catch{return null}})(),{workspaces:C,off:T}=E||ge(p.stateDirectory)!==null?{workspaces:null,off:null}:Ve(p,S?.phase==="running");return{workspaces:C,workspaces_off:T,workspaces_max:ze+(C?.filter((D)=>D.account).length??0),name:p.name,device_id:x?.deviceId??null,organization_id:x?.orgId??null,folder:p.workspaceRoot,mode:p.executionMode,sessions_max:null,user_chrome:Wo(p,P.platform),cloud_sessions:p.cloudSessions===!0,root:x?.roots[0]?{id:x.roots[0].id,permissions:x.roots[0].permissions}:null,roots:x?.roots.map((D)=>({id:D.id,folder:D.path,permissions:D.permissions}))??[],state:E?"removed":S?S.phase==="running"?"connected":S.phase:"not_running",not_running_reason:L?nt(p,k):null,worker_alive:L&&R?An(R,P):null,sessions_running:S?.activeSessions??null,version:v,service:R?{label:R.label,logs:R.logs}:null}}function Ho(e={}){let r=pe(e.home??a()),p=De(J(Ke(r,e.channel??g()),"worker.json"));if(!p)return null;return Dr(p,e.serviceHost??be(r),"connect")?.label??null}export{w,M,Xt,De,Ke,jo,Uo,Ho};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{r}from"./vm-hands-entry-lite-qy9xg6em.js";import{readdirSync as g,readFileSync as S}from"fs";import{userInfo as b}from"os";var Yt="--vm-hands-op-runner-kind=person";function P(n){let a=new Set([n]),i=[];try{i=g("/proc")}catch{}for(let t of i){if(!/^\d+$/.test(t))continue;try{let c=S(`/proc/${t}/stat`,"utf8");if(Number(c.slice(c.lastIndexOf(")")+2).split(" ")[3])===n)a.add(Number(t))}catch{}}for(let t of a)try{process.kill(t,"SIGKILL")}catch{}}var k=(n)=>{let a=globalThis.Bun;if(!a)throw new r("pty_unavailable","Reason terminals require the Bun runtime.");let i=a.spawn({cmd:[n.shell,...n.args],cwd:n.cwd,env:{...n.environment,TERM:"xterm-256color"},terminal:{cols:n.cols,rows:n.rows,data:(s,l)=>n.onData(l)}}),t=i.terminal,c=()=>{P(i.pid);try{t?.close()}catch{}};if(!t)throw c(),new r("pty_unavailable","Reason could not allocate a pseudo-terminal.");return{write:(s)=>t.write(s),resize:(s,l)=>t.resize(s,l),kill:c,exited:i.exited.then((s)=>typeof s==="number"?s:null,()=>null)}};function _(){let n=(()=>{try{return b().username}catch{return}})();return{PATH:process.env.PATH,HOME:process.env.HOME,SHELL:process.env.SHELL,LANG:"C.UTF-8",...n?{USER:n,LOGNAME:n}:{}}}async function zo(){let[{executeLocalOperation:n,spawnCaptured:a},{runLocalPtySession:i},{configureDesktopAccount:t},{configureWorkerSandbox:c}]=await Promise.all([import("./local-capabilities-c04tbapa.js"),import("./local-pty-session-5f50sqq0.js"),import("./desktop-account-5v7x0ajx.js"),import("./worker-sandbox-smqj3mbe.js")]);c();let y=process.argv.includes(Yt),s=(p,e,m)=>a(p,e[0]==="-lic"?["-lc",...e.slice(1)]:e,m),l=(process.geteuid?.()??0)!==0,u=new Map,d=(p)=>{try{process.send?.(p)}catch{}};process.on("message",(p)=>{let e=p;if(e?.t==="cancel"){u.get(e.id)?.abort();return}if(e?.t!=="op")return;if(!l){d({t:"done",id:e.id,completion:{status:"failed",error_code:"vm_hands_payload_account_unavailable"}});return}let m=e.claim.capability;if(m==="pty.start"&&!y){d({t:"done",id:e.id,completion:{status:"failed",error_code:"capability_not_granted"}});return}let f=new AbortController;u.set(e.id,f);let w=m==="pty.start"?{runPtySession:(o)=>i(o,{spawnPty:k,environment:_(),loadProxy:()=>null})}:{worker:e.worker,...m==="exec.full"?{spawnFullControl:s}:{}};n(e.state,e.claim,{...w,signal:f.signal,emit:(o)=>{let{deliverySignal:h,...v}=o;d({t:"event",id:e.id,event:v})}}).then((o)=>d({t:"done",id:e.id,completion:o}),(o)=>d({t:"done",id:e.id,completion:{status:"failed",error_code:o&&typeof o==="object"&&"code"in o&&typeof o.code==="string"?o.code:"vm_hands_op_failed"}})).finally(()=>u.delete(e.id))}),process.on("disconnect",()=>process.exit(0)),await new Promise(()=>{})}
|
|
3
|
-
export{Yt,zo};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import"./vm-hands-entry-lite-k278g9kj.js";import"./vm-hands-entry-lite-8t9xssf9.js";import"./vm-hands-entry-lite-22kfyvnk.js";import"./vm-hands-entry-lite-m11j0f9q.js";import{Je,Ii,ur,vt}from"./vm-hands-entry-lite-463m6ejk.js";import"./vm-hands-entry-lite-f5e3dbgk.js";import"./vm-hands-entry-lite-9c95p6n9.js";import"./vm-hands-entry-lite-gvwdy3rf.js";import"./vm-hands-entry-lite-t7an5zg2.js";import"./vm-hands-entry-lite-88swf2qr.js";import"./vm-hands-entry-lite-ckv17tn8.js";import"./vm-hands-entry-lite-q0k6kx6d.js";import"./vm-hands-entry-lite-bdhjpv7g.js";import{Yt}from"./vm-hands-entry-lite-qq9w7wq6.js";import"./vm-hands-entry-lite-09m2cdkw.js";import"./vm-hands-entry-lite-89z488gz.js";import"./vm-hands-entry-lite-9ay6f56v.js";import{spawn as De}from"child_process";import{chmodSync as Me,chownSync as Le,existsSync as U,lstatSync as V,mkdirSync as ee,mkdtempSync as Ae,readdirSync as Z,readFileSync as P,realpathSync as Te,rmdirSync as ne,rmSync as ze,writeFileSync as K}from"fs";import{join as p}from"path";import{readFileSync as ae,readlinkSync as ce}from"fs";import{relative as $e}from"path";var le=16;function de(n){return n.replace(/\\([0-7]{3})/g,(r,i)=>String.fromCharCode(Number.parseInt(i,8)))}function Ie(n){let r=[];for(let i of n.split(`
|
|
3
|
-
`)){let e=i.split(" ");if(e.length<10||!/^\d+:\d+$/.test(e[2]))continue;r.push({device:e[2],root:de(e[3]),mountPoint:de(e[4])})}return r}function Ne(n,r,i){let e=n.replace(/\/+$/,"")||"/",c=(m)=>e==="/"||m===e||m.startsWith(`${e}/`),a=(m)=>new Map(Ie(m).filter((b)=>c(b.mountPoint)).map((b)=>[`${b.mountPoint}\x00${b.device}\x00${b.root}`,b.mountPoint])),l=a(r),v=a(i),y=(m)=>$e(e,m)||".",O=[...l].filter(([m])=>!v.has(m)).map(([,m])=>y(m)),R=[...v].filter(([m])=>!l.has(m)).map(([,m])=>y(m));return{missing:O,extra:R,referenceCount:l.size,ownCount:v.size}}function ue(n,r,i,e="/proc"){let c,a,l=null;try{c=ae(`${e}/1/mountinfo`,"utf8"),a=ae(`${e}/self/mountinfo`,"utf8")}catch(b){let I=b&&typeof b==="object"&&"code"in b&&typeof b.code==="string"?b.code:"unreadable";r("vm_hands.mount_check_unavailable",{code:I});return}try{l=ce(`${e}/1/ns/mnt`)===ce(`${e}/self/ns/mnt`)}catch{}let{missing:v,extra:y,referenceCount:O,ownCount:R}=Ne(n,c,a),m={reference_count:O,own_count:R,missing_count:v.length,extra_count:y.length,same_namespace:l};if(y.length)r("vm_hands.mount_extra",{...m,extra:y.slice(0,le)});if(v.length)throw r("vm_hands.mount_mismatch",{...m,missing:v.slice(0,le)}),i(`${v.length} mount(s) under the Session root are missing from vm-hands' namespace`)}var we="/sys/fs/cgroup/reason-payload",M="vm-hands",We="/run/ara-srt/fallbacks.jsonl",B="/reason-person",te=5000,Be=1e4,pe="__VM_HANDS_PROOF_DIR__",Ke="__VM_HANDS_PROBE_NONCE__";class h extends Error{code;constructor(n,r){super(r);this.code=n}}function je(n,r){if(!/^[0-9a-f-]{36}$/i.test(r))throw new h("vm_hands_bind_invalid","bad bind id");return p(n,M,`b-${r.toLowerCase()}`)}var He=5000,ve=(n)=>`'${n.replaceAll("'","'\\''")}'`;function on(n){let r=n.cgroup??we,i=n.init.layout.payload_uid,e=n.log??(()=>{}),c=new Map,a=new Map,l=0,v=()=>{try{let t=P("/run/ara-srt/starts.jsonl","utf8"),o=t.slice(l>t.length?0:l).split(`
|
|
4
|
-
`).filter(Boolean);l=t.length;let d=o.map((f)=>{try{return Number(JSON.parse(f).elapsed_ms)||0}catch{return 0}});if(d.length)e("vm_hands.srt_server_starts",{count:d.length,elapsed_ms:d.slice(0,8)})}catch{}},y=null,O=!1,R=n.srtCgroup??"/sys/fs/cgroup/reason-srt",m=()=>{y??=me()},b=0,I=()=>{try{let t=P(We,"utf8"),o=t.slice(b>t.length?0:b);b=t.length;let d=o.split(`
|
|
5
|
-
`).filter(Boolean).slice(0,1000);if(!d.length)return null;let f={},g=0;for(let w of d)try{let _=JSON.parse(w),u=typeof _.code==="string"&&/^[a-z_]{1,40}$/.test(_.code)?_.code:"other";if(f[u]=(f[u]??0)+1,typeof _.elapsed_ms==="number")g=Math.max(g,_.elapsed_ms)}catch{f.unparsed=(f.unparsed??0)+1}return e("vm_hands.srt_fallbacks",{count:d.length,codes:f,max_elapsed_ms:g}),{count:d.length,codes:f,max_elapsed_ms:g}}catch{return null}},S=!1,j=(t,o,d)=>{if(S)throw Error("vm_hands_pool_held");return Ce(t,o,d)},X=(t)=>(o,d,f)=>De("/bin/sh",["-c",`echo $$ > ${ve(p(t,"cgroup.procs"))} || exit 125; exec "$@"`,"vm-hands-join",o,...d],f),Ce=X(p(r,M)),H=p(r,M,"probe"),z=(t)=>je(r,t),Oe=(t)=>{let o=z(t);try{ee(o,{mode:493})}catch(d){if(!(d&&typeof d==="object"&&("code"in d)&&d.code==="EEXIST"))throw new h("vm_hands_bind_failed","bind cgroup")}return o},Re=(t)=>{try{ne(z(t))}catch{}},D=n.prespawn?Ii({spawnProcess:j,...n.relayDependencies?.sourceEntrypoint?{sourceEntrypoint:n.relayDependencies.sourceEntrypoint}:{},log:(t,o)=>e(t,o??{})}):null;D?.arm();let Q=D?setInterval(()=>{D.arm()},He):null;Q?.unref?.();async function F(t){let o=c.get(t);if(c.delete(t),!o)return;o.abort.abort(),await o.done}return{bindCgroup:z,async startExecutor(t){if(m(),a.set(t.bindId,me()),O=!0,!t.claim)throw new h("vm_hands_bind_invalid","an executor needs the claim it serves");await F(t.bindId);let{claim:o,bindId:d}=t,f=Oe(d),g=o.owner;if(!g||typeof g.device_id!=="string"||typeof o.root_id!=="string")throw new h("vm_hands_bind_invalid","claim without its owner Device or root");let w=new AbortController,_,u,x=new Promise((s,k)=>{_=s,u=k}),L,C=new Promise((s)=>{L=s}),W=vt({headless:!0,hostExecution:!0,runtimeDirectory:n.runtimeDirectory,deviceIdentity:{deviceId:g.device_id,rootId:o.root_id,apiOrigin:n.apiOrigin},claimOwner:o.owner,root:n.root,runId:o.run_id,operationId:o.operation_id,attemptId:o.attempt_id,payload:Object.fromEntries(Object.entries(o.payload).filter(([s])=>!s.startsWith("vm_hands_"))),signal:w.signal,...t.workspaceGrant?{workspaceGrant:t.workspaceGrant}:{},emitEvent:async(s,k)=>{if(s==="hands.ready"){_(k);return}if(s==="hands.started"||s==="hands.stopped"||s==="hands.failed")return;await n.forward(d,s,k)}},{...n.relayDependencies,spawnWorker:(s)=>X(f)(s.command,s.args,s.options),...D?{takePrespawnedWorker:(s)=>{let k=D.take(s);if(!k?.pid)return k;try{return K(p(f,"cgroup.procs"),String(k.pid)),k}catch{try{k.kill("SIGKILL")}catch{}return null}},adoptSpawnedWorker:D.adopt}:{}}).then(()=>{L("executor_stopped")},(s)=>{let k=s&&typeof s==="object"&&"code"in s?String(s.code):"executor_failed";u(new h(k,s instanceof Error?s.message:String(s))),L(k)}).finally(()=>u(new h("vm_hands_executor_exited","executor ended before it was ready")));c.set(d,{abort:w,done:W,exited:C,operationId:o.operation_id,runId:o.run_id,expiresAtMs:Date.parse(String(o.payload.expires_at??""))||0});let A=await x,G=A.executor_launch_id;if(typeof G!=="string")throw new h("vm_hands_bind_failed","executor ready without a launch id");return{launchId:G,readyData:A,applied:{hands_confinement:typeof o.payload.hands_confinement==="string"?o.payload.hands_confinement:null,browser_egress:o.payload.browser_egress??null}}},takeSrtFallbacks:I,executorExited(t){return c.get(t)?.exited??new Promise(()=>{})},freezeBind(t){let o=z(t);if(U(p(o,"cgroup.freeze")))K(p(o,"cgroup.freeze"),"1")},async killAndVerifyPayload(t){let o=new Set(t?.keep??[]);if(o.size||t?.own)return xe(t?.bindId??null,o,t?.own===!0);S=!0;let d=he();try{await ye();let f=Promise.all([...c.keys()].map((u)=>F(u).catch(()=>{return})));v();let g=Date.now()+te;await J(r,g,"payload"),await f;let w=(O||n.srtWarmLate?.()===!0)&&U(p(R,"cgroup.events"));if(w)await J(R,g,"srt");let _=se(i).filter((u)=>!N(u,B));if(y!==null){let u=re(y).filter((x)=>x!==process.pid&&!N(x,B));if(u.length)throw e("vm_hands.kill_strays",{strays:E(u)}),new h("vm_hands_kill_unverified",`${u.length} process(es) the run started survived it`);y=null}if(O=!1,w)n.onSrtReset?.();if(_.length)throw e("vm_hands.kill_survivors",{pids:_.slice(0,16)}),new h("vm_hands_kill_unverified",`${_.length} payload-uid process(es) outside the payload cgroup`);a.clear();for(let u of ie())try{ne(p(r,M,u))}catch{}}finally{S=!1,d()}if(D)setTimeout(()=>{if(!c.size)D.arm()},100).unref?.()},async killProbe(){let t=Date.now()+te;if(U(p(H,"cgroup.events"))){await J(H,t,"probe");try{ne(H)}catch{}}let o=oe(process.pid);if(o===null)throw new h("vm_hands_kill_unverified","agent start time unreadable");await Ue(r,o,t);let d=(g)=>{let w=oe(g);return w!==null&&w<=o},f=se(i).filter((g)=>d(g)&&!N(g,B));if(f.length)throw e("vm_hands.kill_survivors",{pids:f.slice(0,16),at:"attest"}),new h("vm_hands_kill_unverified",`${f.length} payload-uid process(es) from before this agent`);if(y!==null){let g=[r,p(r,M)].map((u)=>u.replace(/^\/sys\/fs\/cgroup/,"")),w=R.replace(/^\/sys\/fs\/cgroup/,""),_=re(y).filter((u)=>u!==process.pid&&!N(u,B)&&!N(u,"/reason-vm-hands")&&!N(u,w)&&!g.some((x)=>fe(u,x)));if(_.length&&O)throw e("vm_hands.kill_strays",{strays:E(_),at:"attest"}),new h("vm_hands_kill_unverified",`${_.length} process(es) the run started survived it`);if(_.length)e("vm_hands.attest_concurrent",{processes:E(_),count:_.length});y=null}},async runProbe({nonce:t,script:o}){if(m(),!o.includes(pe))throw new h("vm_hands_probe_failed","probe names no proof directory");let d=n.proofParent??"/tmp/reason-vm-hands-proof";ee(d,{mode:457,recursive:!0});let f=V(d);if(f.isSymbolicLink()||!f.isDirectory()||f.uid!==(process.getuid?.()??-1)||(f.mode&4095)!==457)throw new h("vm_hands_probe_failed","proof parent is not root's 0711 directory");let g=Ae(p(d,"p-")),w=!1;try{if(!/^[A-Za-z0-9/._-]+$/.test(g)||!/^[A-Za-z0-9_-]{1,128}$/.test(t))throw new h("vm_hands_probe_failed","proof directory path or nonce");Le(g,i,i),Me(g,448);let _=V(g).ino;try{ee(H,{mode:493})}catch(C){if(!(C&&typeof C==="object"&&("code"in C)&&C.code==="EEXIST"))throw new h("vm_hands_probe_failed","probe cgroup")}let u=X(H)("/bin/bash",["-c",o.replaceAll(pe,g).replaceAll(Ke,t)],{cwd:"/",env:{PATH:"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},stdio:["ignore","pipe","ignore"]}),x="";u.stdout?.on("data",(C)=>{if(x.length<16384)x+=C.toString("utf8").slice(0,16384-x.length)});let L=await new Promise((C)=>{let W=setTimeout(()=>{w=!0,u.kill("SIGKILL"),C(124)},Be);u.once("error",()=>{clearTimeout(W),C(127)}),u.once("close",(A)=>{clearTimeout(W),C(A??1)})});return e("vm_hands.probe",{nonce_len:t.length,exit_code:L}),{exitCode:L,markers:x,proofDirInode:_}}finally{if(!w)ze(g,{recursive:!0,force:!0})}},restatLayout(){let{session_root:t,alias:o}=n.init.layout,d="invalid";try{ur(t),d="0:0:755"}catch{}let f=!1,g=-1;try{let w=V(o);g=w.uid,f=d==="0:0:755"&&o===p(t,"repo")&&!w.isSymbolicLink()&&w.isDirectory()&&Te(o)===o&&w.uid===i}catch{}return{root_mode:d,alias_ok:f,owner_uid:g}},verifyMounts(){ue(n.init.layout.session_root,e,(t)=>new h("vm_hands_mount_mismatch",t))},installEnvironment(t,o){let d=c.get(t);if(!d)throw new h("environment_unavailable","no executor owns an environment");return Je({root:n.root,operationId:d.operationId,payload:o}).installed_revision},async stop(){if(Q)clearInterval(Q);D?.close(),await Promise.all([...c.keys()].map((t)=>F(t)))}};function ie(){try{return Z(p(r,M),{withFileTypes:!0}).filter((t)=>t.isDirectory()&&/^b-[0-9a-f-]{36}$/.test(t.name)).map((t)=>t.name)}catch{return[]}}async function xe(t,o,d=!1){let f=new Set([...o].map((w)=>w.toLowerCase())),g=he();try{await ye();let w=Date.now()+te,_=new Set(ie().filter((s)=>!f.has(s.slice(2))).map((s)=>s.slice(2)));if(t)_.add(t.toLowerCase());let u=null;for(let s of _){let k=F(s).catch(()=>{return}),q=a.get(s);if(q!==void 0)u=u===null?q:Math.min(u,q);if(U(p(z(s),"cgroup.events")))await J(z(s),w,"bind");await k}let x=[...f].map((s)=>z(s).replace(/^\/sys\/fs\/cgroup/,"")),L=[r,p(r,M)].map((s)=>s.replace(/^\/sys\/fs\/cgroup/,"")),C=R.replace(/^\/sys\/fs\/cgroup/,""),W=(s)=>N(s,B)||x.some((k)=>N(s,k)),A=d?[]:se(i).filter((s)=>!W(s));if(A.length)throw e("vm_hands.kill_survivors",{pids:A.slice(0,16),beside:f.size}),new h("vm_hands_kill_unverified",`${A.length} payload-uid process(es) outside a live bind`);let G=(s)=>!W(s)&&!N(s,"/reason-vm-hands")&&!N(s,C)&&!L.some((k)=>fe(s,k));if(u!==null){let s=re(u).filter((k)=>k!==process.pid&&G(k));if(s.length)throw e("vm_hands.kill_strays",{strays:E(s),beside:f.size}),new h("vm_hands_kill_unverified",`${s.length} process(es) the run started survived it`)}for(let s of _)a.delete(s),Re(s)}finally{g()}}}function oe(n,r="/proc"){try{let i=P(p(r,String(n),"stat"),"utf8"),e=Number(i.slice(i.lastIndexOf(")")+2).split(" ")[19]);return Number.isFinite(e)?e:null}catch{return null}}function be(n,r="/proc"){try{let i=P(p(r,String(n),"stat"),"utf8"),e=Number(i.slice(i.lastIndexOf(")")+2).split(" ")[1]);return Number.isFinite(e)?e:null}catch{return null}}async function Ue(n,r,i){try{K(p(n,"cgroup.freeze"),"1")}catch(e){throw new h("vm_hands_kill_unverified",`payload cgroup.freeze: ${e instanceof Error?e.message:String(e)}`)}try{for(;;){let e=Se(n).filter((a)=>ke(a,n)),c=new Set(e.filter((a)=>{let l=oe(a);return l!==null&&l<=r}));for(let a=!0;a;){a=!1;for(let l of e){if(c.has(l))continue;let v=be(l);if(v!==null&&c.has(v))c.add(l),a=!0}}if(c.size===0)return;if(Date.now()>i)throw new h("vm_hands_kill_unverified",`${c.size} previous-boot process(es) survived`);for(let a of c)try{process.kill(a,"SIGKILL")}catch{}await new Promise((a)=>setTimeout(a,10))}}finally{try{K(p(n,"cgroup.freeze"),"0")}catch{}}}function fe(n,r,i="/proc"){try{return P(p(i,String(n),"cgroup"),"utf8").split(`
|
|
6
|
-
`).find((c)=>c.startsWith("0::"))?.slice(3)===r}catch{return!1}}function N(n,r,i="/proc"){try{let c=P(p(i,String(n),"cgroup"),"utf8").split(`
|
|
7
|
-
`).find((a)=>a.startsWith("0::"))?.slice(3)??"";return c===r||c.startsWith(`${r}/`)}catch{return!1}}var Fe=100;function me(){try{return Math.floor(Number(P("/proc/uptime","utf8").split(" ")[0])*Fe)}catch{return 0}}async function J(n,r,i){try{K(p(n,"cgroup.freeze"),"1")}catch(e){throw new h("vm_hands_kill_unverified",`${i} cgroup.freeze: ${e instanceof Error?e.message:String(e)}`)}while(!/^populated 0$/m.test(P(p(n,"cgroup.events"),"utf8"))){if(Date.now()>r)throw new h("vm_hands_kill_unverified",`${i} cgroup still populated (left frozen)`);for(let e of Se(n)){if(!ke(e,n))continue;try{process.kill(e,"SIGKILL")}catch{}}await new Promise((e)=>setTimeout(e,10))}try{K(p(n,"cgroup.freeze"),"0")}catch(e){throw new h("vm_hands_kill_unverified",`${i} cgroup thaw: ${e instanceof Error?e.message:String(e)}`)}}function ke(n,r){let i=r.replace(/^\/sys\/fs\/cgroup/,"")||"/",e="";try{e=P(`/proc/${n}/cgroup`,"utf8").split(`
|
|
8
|
-
`).find((a)=>a.startsWith("0::"))??""}catch{return!1}let c=e.slice(3);return c===i||c.startsWith(`${i}/`)}function Se(n){let r=[],i=(e)=>{try{for(let a of P(p(e,"cgroup.procs"),"utf8").split(`
|
|
9
|
-
`))if(/^\d+$/.test(a))r.push(Number(a))}catch{}let c=[];try{c=Z(e,{withFileTypes:!0}).filter((a)=>a.isDirectory()).map((a)=>a.name)}catch{}for(let a of c)i(p(e,a))};return i(n),r}function E(n,r="/proc"){return n.slice(0,16).map((i)=>{let e="?",c="?";try{e=P(p(r,String(i),"comm"),"utf8").trim().slice(0,32)}catch{}try{c=(P(p(r,String(i),"cgroup"),"utf8").split(`
|
|
10
|
-
`).find((a)=>a.startsWith("0::"))??"").slice(3,120)}catch{}return{pid:i,comm:e,ppid:be(i,r),cgroup:c}})}function re(n,r="/proc"){let i=[];for(let e of Z(r)){if(!/^\d+$/.test(e))continue;let c;try{c=P(p(r,e,"stat"),"utf8")}catch{continue}let a=c.slice(c.lastIndexOf(")")+2).split(" "),l=Number(a[1]),v=Number(a[6]),y=Number(a[19]);if(!((v&2097152)!==0||l===2||e==="2")&&a[0]!=="Z"&&y>=n)i.push(Number(e))}return i}function se(n,r="/proc"){let i=[];for(let e of Z(r)){if(!/^\d+$/.test(e))continue;let c;try{c=P(p(r,e,"status"),"utf8")}catch{continue}let a=/^Uid:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/m.exec(c);if(a&&a.slice(1).some((l)=>Number(l)===n))i.push(Number(e))}return i}function ge(n="/proc/sys/kernel/yama/ptrace_scope"){try{return Number(P(n,"utf8").trim())>=1}catch{return!1}}var T=0,Pe=[],Y=new Set;function he(){T++;let n=!1;return()=>{if(n)return;if(n=!0,--T===0)for(let r of Pe.splice(0))r()}}function Ge(){return T===0?Promise.resolve():new Promise((n)=>{Pe.push(n)})}async function _e(){while(T>0)await Ge()}async function ye(){let n=Date.now()+1000;while(Y.size&&Date.now()<n)await new Promise((r)=>setTimeout(r,2))}function Ee(n,r){let i=r.replace(/^\/sys\/fs\/cgroup/,"");Y.add(n);let e=()=>{let c="";try{c=P(`/proc/${n}/cgroup`,"utf8").split(`
|
|
11
|
-
`).find((a)=>a.startsWith("0::"))??""}catch{Y.delete(n);return}if(c.slice(3)===i){Y.delete(n);return}setTimeout(e,1)};e()}function an(n){let r={person:n.personCgroup??p("/sys/fs/cgroup",B,M),model:n.payloadCgroup??p(we,M)},i=n.entry??process.argv[1]??"",e={},c=(l)=>l.startsWith("model:")&&n.bindCgroup?n.bindCgroup(l.slice(6)):r[l.startsWith("model")?"model":"person"],a=(l)=>{let v=l.startsWith("model")?"model":"person",y=new Map,O=String(n.payloadUid),R=String(n.payloadGid),m=Bun.spawn(["/bin/sh","-c",`echo $$ > ${ve(p(c(l),"cgroup.procs"))} || exit 125; exec /usr/bin/setpriv --no-new-privs --reuid=${O} --regid=${R} --clear-groups -- "$@"`,"vm-hands-op-join",process.execPath,"--no-install",i,"--vm-hands-op-runner",...v==="person"?[Yt]:[]],{cwd:"/",env:{PATH:process.env.PATH??"/usr/bin:/bin",BUN_BE_BUN:"1",HOME:"/home/runner",...U("/bin/bash")?{SHELL:"/bin/bash"}:{}},stdio:["ignore","ignore","ignore"],ipc(I){let S=I,j=y.get(S.id);if(!j)return;if(S.t==="event"&&S.event)j.onEvent(S.event);if(S.t==="done")y.delete(S.id),j.done(S.completion??{status:"failed",error_code:"vm_hands_op_failed"})}});m.exited.then((I)=>{if(e[l]?.child===m)delete e[l];for(let[,S]of y)S.done({status:"failed",error_code:"vm_hands_op_runner_exited"});y.clear(),n.log?.("vm_hands.op_runner_exited",{kind:v,code:I})}),Ee(m.pid,c(l));let b={child:m,pending:y};return e[l]=b,b};return{run(l,v,y,O,R){if(!ge())return Promise.resolve({status:"failed",error_code:"vm_hands_ptrace_unprotected"});let m=l==="model"&&R&&n.bindCgroup?`model:${R.toLowerCase()}`:l,b=async()=>{while(!e[m]&&T>0)await _e()};return b().then(async()=>{if(!e[m]&&T>0)await b()}).then(()=>new Promise((I)=>{if(!e[m]&&T>0){I({status:"failed",error_code:"vm_hands_op_runner_unavailable"});return}let S=e[m]??a(m);S.pending.set(v.id,{onEvent:y,done:I}),O.addEventListener("abort",()=>{try{S.child.send({t:"cancel",id:v.id})}catch{}},{once:!0});try{S.child.send({t:"op",...v})}catch{S.pending.delete(v.id),I({status:"failed",error_code:"vm_hands_op_runner_unavailable"})}}))},warm(l){if(!e[l]&&ge())_e().then(()=>{if(!e[l]&&T===0)a(l)})},stop(){for(let l of Object.keys(e))e[l]?.child.kill()}}}export{we as VM_HANDS_PAYLOAD_CGROUP,M as VM_HANDS_PAYLOAD_JOIN,B as VM_HANDS_PERSON_CGROUP,Ke as VM_HANDS_PROBE_NONCE_TOKEN,pe as VM_HANDS_PROOF_DIR_TOKEN,h as VmHandsExecutorError,on as createVmHandsExecutor,an as createVmHandsOpRunners,E as describeProcesses,N as inCgroup,se as payloadUidProcesses,re as processesStartedSince,ge as ptraceProtected,Se as subtreePids,je as vmHandsBindCgroup};
|