@reason-machines/cli-linux-arm64-musl 0.2.381 → 0.2.382

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +3 -1
  2. package/bin/ara +2 -2
  3. package/bin/vm-hands/api-credentials-xppmbg0m.js +2 -0
  4. package/bin/vm-hands/api-xmpbsm6b.js +2 -0
  5. package/bin/vm-hands/{ask-relay-fc0jc3t5.js → ask-relay-zjqyxvxe.js} +3 -3
  6. package/bin/vm-hands/connect-cli-ehxeg8m5.js +2 -0
  7. package/bin/vm-hands/{custom-endpoint-device-zhpake9f.js → custom-endpoint-device-bm94e9r0.js} +1 -1
  8. package/bin/vm-hands/desktop-account-3tnm4z5w.js +2 -0
  9. package/bin/vm-hands/{device-workspace-vbcry9d6.js → device-workspace-0xsj5ykf.js} +1 -1
  10. package/bin/vm-hands/hands-worker-source-azdrrhsz.js +2 -0
  11. package/bin/vm-hands/{index-bbk6a9sk.js → index-7f2kwwen.js} +1 -1
  12. package/bin/vm-hands/{install-receipt-7x81ek76.js → install-receipt-3xyx3rdd.js} +1 -1
  13. package/bin/vm-hands/local-automation-ynx1qr9v.js +2 -0
  14. package/bin/vm-hands/local-capabilities-855ch0dq.js +2 -0
  15. package/bin/vm-hands/local-desktop-users-ajb81vjm.js +2 -0
  16. package/bin/vm-hands/local-display-mac-9h6btvvq.js +2 -0
  17. package/bin/vm-hands/local-display-session-f9ywkbba.js +2 -0
  18. package/bin/vm-hands/local-pty-session-cjas515w.js +2 -0
  19. package/bin/vm-hands/managed-runtime-dars4628.js +2 -0
  20. package/bin/vm-hands/{network-contract-zqvt1v0t.js → network-contract-dsw79qkc.js} +1 -1
  21. package/bin/vm-hands/package-smk3nqjs.js +2 -0
  22. package/bin/vm-hands/permissions-pdmhp2s3.js +2 -0
  23. package/bin/vm-hands/{reason-hands-protocol-8fxjynte.js → reason-hands-protocol-7d7xj1h3.js} +1 -1
  24. package/bin/vm-hands/serve-service-n6xd6323.js +2 -0
  25. package/bin/vm-hands/status-2m75kz1h.js +96 -0
  26. package/bin/vm-hands/version-74zqccyz.js +2 -0
  27. package/bin/vm-hands/vm-hands-entry-lite-06qnb2w1.js +458 -0
  28. package/bin/vm-hands/{vm-hands-entry-lite-7shpbsw8.js → vm-hands-entry-lite-1gxktkpe.js} +2 -2
  29. package/bin/vm-hands/{vm-hands-entry-lite-hgkf1svv.js → vm-hands-entry-lite-23bb8ce4.js} +2 -2
  30. package/bin/vm-hands/vm-hands-entry-lite-245929bs.js +346 -0
  31. package/bin/vm-hands/vm-hands-entry-lite-2e18tm6w.js +245 -0
  32. package/bin/vm-hands/{vm-hands-entry-lite-g036gtem.js → vm-hands-entry-lite-2t0vcvd8.js} +1 -1
  33. package/bin/vm-hands/{vm-hands-entry-lite-0asdf4pm.js → vm-hands-entry-lite-2tcjqgfp.js} +3 -3
  34. package/bin/vm-hands/vm-hands-entry-lite-3n3xh0xv.js +540 -0
  35. package/bin/vm-hands/vm-hands-entry-lite-50n6vbfx.js +251 -0
  36. package/bin/vm-hands/{vm-hands-entry-lite-j2q1k9vb.js → vm-hands-entry-lite-51hmj6am.js} +1 -1
  37. package/bin/vm-hands/{vm-hands-entry-lite-zfwg7ehq.js → vm-hands-entry-lite-5n4vsm6b.js} +2 -2
  38. package/bin/vm-hands/vm-hands-entry-lite-8fj07njx.js +3 -0
  39. package/bin/vm-hands/{vm-hands-entry-lite-4q8tsaqv.js → vm-hands-entry-lite-8zawqa9q.js} +2 -2
  40. package/bin/vm-hands/{vm-hands-entry-lite-3hbe4em3.js → vm-hands-entry-lite-9cmfthkq.js} +1 -1
  41. package/bin/vm-hands/{vm-hands-entry-lite-45j8qwsf.js → vm-hands-entry-lite-9w5vs9zv.js} +1 -1
  42. package/bin/vm-hands/{vm-hands-entry-lite-k7wwza46.js → vm-hands-entry-lite-aj1ccphg.js} +2 -2
  43. package/bin/vm-hands/{vm-hands-entry-lite-za55dtte.js → vm-hands-entry-lite-ammr3xbc.js} +2 -2
  44. package/bin/vm-hands/{vm-hands-entry-lite-yjn6sk08.js → vm-hands-entry-lite-ch7y4b1b.js} +1 -1
  45. package/bin/vm-hands/{vm-hands-entry-lite-34e71nbe.js → vm-hands-entry-lite-cwe16c51.js} +174 -16
  46. package/bin/vm-hands/vm-hands-entry-lite-dh5gwmyf.js +3 -0
  47. package/bin/vm-hands/vm-hands-entry-lite-dsdwzasy.js +105 -0
  48. package/bin/vm-hands/{vm-hands-entry-lite-5pm6bhb8.js → vm-hands-entry-lite-e0gdt6r5.js} +1 -1
  49. package/bin/vm-hands/{vm-hands-entry-lite-5kgvss4p.js → vm-hands-entry-lite-e2mjbqmr.js} +2 -2
  50. package/bin/vm-hands/vm-hands-entry-lite-ejm5er3h.js +7 -0
  51. package/bin/vm-hands/{vm-hands-entry-lite-mh0xecf3.js → vm-hands-entry-lite-f02906k8.js} +4 -4
  52. package/bin/vm-hands/vm-hands-entry-lite-f5230h6t.js +67 -0
  53. package/bin/vm-hands/{vm-hands-entry-lite-zh8p7ndn.js → vm-hands-entry-lite-fb5dzy9x.js} +2 -2
  54. package/bin/vm-hands/vm-hands-entry-lite-fyvgav60.js +3 -0
  55. package/bin/vm-hands/vm-hands-entry-lite-g7h6wjqy.js +3 -0
  56. package/bin/vm-hands/vm-hands-entry-lite-h8dbw0c7.js +4 -0
  57. package/bin/vm-hands/{vm-hands-entry-lite-nhtb458c.js → vm-hands-entry-lite-hnsm5t36.js} +1 -1
  58. package/bin/vm-hands/{vm-hands-entry-lite-r6pap1kh.js → vm-hands-entry-lite-ma001vzh.js} +1 -1
  59. package/bin/vm-hands/{vm-hands-entry-lite-anmv8hp7.js → vm-hands-entry-lite-mn64e4pt.js} +286 -104
  60. package/bin/vm-hands/{vm-hands-entry-lite-9cgm6g8t.js → vm-hands-entry-lite-pk3q774c.js} +1 -1
  61. package/bin/vm-hands/vm-hands-entry-lite-qef2ndkd.js +6 -0
  62. package/bin/vm-hands/vm-hands-entry-lite-qnnfvm5r.js +5 -0
  63. package/bin/vm-hands/vm-hands-entry-lite-qwf78yqr.js +11 -0
  64. package/bin/vm-hands/vm-hands-entry-lite-r8qg3wp1.js +3 -0
  65. package/bin/vm-hands/vm-hands-entry-lite-rd0ak4ye.js +4 -0
  66. package/bin/vm-hands/{vm-hands-entry-lite-00qsbphw.js → vm-hands-entry-lite-rpn0frzb.js} +2 -2
  67. package/bin/vm-hands/{vm-hands-entry-lite-g9rvf5qk.js → vm-hands-entry-lite-rtt2w6c6.js} +1 -1
  68. package/bin/vm-hands/vm-hands-entry-lite-sex82vb1.js +3 -0
  69. package/bin/vm-hands/{vm-hands-entry-lite-dgxxsdwb.js → vm-hands-entry-lite-xrthfx3q.js} +2 -2
  70. package/bin/vm-hands/{vm-hands-entry-lite-kxdw4myj.js → vm-hands-entry-lite-y2s2w174.js} +1 -1
  71. package/bin/vm-hands/{vm-hands-entry-lite-hc3p6r9p.js → vm-hands-entry-lite-zjfr0zh8.js} +2 -2
  72. package/bin/vm-hands/vm-hands-entry-lite.js +1 -1
  73. package/bin/vm-hands/{vm-hands-executor-qssgfea1.js → vm-hands-executor-yx6mxa2p.js} +1 -1
  74. package/bin/vm-hands/vm-hands-op-runner-yt3v3v6w.js +2 -0
  75. package/bin/vm-hands/{vm-hands-runtime-5me6cpmn.js → vm-hands-runtime-ygddqgbs.js} +3 -3
  76. package/bin/vm-hands/worker-sandbox-tgqbmy6b.js +2 -0
  77. package/package.json +1 -1
  78. package/bin/vm-hands/api-af9g18n7.js +0 -2
  79. package/bin/vm-hands/api-credentials-65mrr3tn.js +0 -2
  80. package/bin/vm-hands/connect-cli-j478km3s.js +0 -2
  81. package/bin/vm-hands/desktop-account-5zvgspyw.js +0 -2
  82. package/bin/vm-hands/hands-worker-source-h0b1j53p.js +0 -2
  83. package/bin/vm-hands/local-automation-c86tjeft.js +0 -2
  84. package/bin/vm-hands/local-capabilities-1h99gkt6.js +0 -2
  85. package/bin/vm-hands/local-desktop-users-0hadyvx1.js +0 -2
  86. package/bin/vm-hands/local-display-mac-v1pc7177.js +0 -2
  87. package/bin/vm-hands/local-display-session-tzq0hne8.js +0 -2
  88. package/bin/vm-hands/local-pty-session-hs7rq03x.js +0 -2
  89. package/bin/vm-hands/managed-runtime-5dqaaw1x.js +0 -2
  90. package/bin/vm-hands/package-3cd7cfyv.js +0 -2
  91. package/bin/vm-hands/permissions-vbyqjbyb.js +0 -2
  92. package/bin/vm-hands/serve-service-be739c9s.js +0 -2
  93. package/bin/vm-hands/status-s8ny6men.js +0 -96
  94. package/bin/vm-hands/version-8s4syrp2.js +0 -2
  95. package/bin/vm-hands/vm-hands-entry-lite-1085xsma.js +0 -5
  96. package/bin/vm-hands/vm-hands-entry-lite-4m40gwkf.js +0 -3
  97. package/bin/vm-hands/vm-hands-entry-lite-62wmnm7g.js +0 -540
  98. package/bin/vm-hands/vm-hands-entry-lite-98076n5g.js +0 -62
  99. package/bin/vm-hands/vm-hands-entry-lite-bvbfcp1k.js +0 -4
  100. package/bin/vm-hands/vm-hands-entry-lite-c01eyep6.js +0 -3
  101. package/bin/vm-hands/vm-hands-entry-lite-dcynw6t2.js +0 -3
  102. package/bin/vm-hands/vm-hands-entry-lite-hh24bq0d.js +0 -3
  103. package/bin/vm-hands/vm-hands-entry-lite-jb2sr2r7.js +0 -3
  104. package/bin/vm-hands/vm-hands-entry-lite-kt5aj2ax.js +0 -11
  105. package/bin/vm-hands/vm-hands-entry-lite-n9nnb482.js +0 -459
  106. package/bin/vm-hands/vm-hands-entry-lite-sb9a1jcn.js +0 -4
  107. package/bin/vm-hands/vm-hands-entry-lite-xg3d0a2y.js +0 -340
  108. package/bin/vm-hands/vm-hands-entry-lite-zamt8xp7.js +0 -181
  109. package/bin/vm-hands/vm-hands-entry-lite-ze9msfq1.js +0 -3
  110. package/bin/vm-hands/vm-hands-op-runner-b76rjaps.js +0 -2
  111. package/bin/vm-hands/worker-sandbox-wpzkvwer.js +0 -2
@@ -1,181 +0,0 @@
1
- // @bun
2
- import{hg as j0}from"./vm-hands-entry-lite-ze9msfq1.js";import{yg as U0}from"./vm-hands-entry-lite-dgxxsdwb.js";import{Eg as Zq}from"./vm-hands-entry-lite-zh8p7ndn.js";import{Ri as Aq}from"./vm-hands-entry-lite-4q8tsaqv.js";import{Yi as d}from"./vm-hands-entry-lite-c01eyep6.js";import{Fj as H,Ij as L0,Lj as y0,Mj as T8,Nj as sq,Pj as $8,Sj as iq,Uj as nq}from"./vm-hands-entry-lite-7shpbsw8.js";import{Wj as W0}from"./vm-hands-entry-lite-bvbfcp1k.js";import{bk as M}from"./vm-hands-entry-lite-j2q1k9vb.js";import{execFile as tx,spawn as T0}from"child_process";import{randomBytes as ex}from"crypto";import{chmodSync as q1,existsSync as B0,lstatSync as x1,mkdirSync as X1,readFileSync as Q1,rmSync as P1,writeFileSync as o8}from"fs";import{connect as b1}from"net";import{join as _}from"path";var Uq="./desktop-wallpaper-0pjhgyfk.jpg";var Lq="./dock-browser-afp005mt.png";var yq="./dock-files-rywdm96b.png";var jq="./dock-terminal-s41cj1jp.png";var Tq=`# 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 e=32,Bq=76;function _0(q){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>${e}</x><y>${e}</y></position>
67
- <size><width>${q.width-e*2}</width><height>${q.height-e-Bq}</height></size>
68
- </application>
69
- </applications>
70
- </openbox_config>`}var E0=`# 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
- `,O0=`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
- `,$0="/tmp/ara-dock-browser.png",H0=`[Desktop Entry]
104
- Name=Chrome
105
- Exec=chromium --no-sandbox %U
106
- Icon=${$0}
107
- Type=Application
108
- Categories=Network;WebBrowser;
109
- `,f0=`[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
- `,h0=`[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 Dq={"wallpaper.jpg":Uq,"dock-browser.png":Lq,"dock-terminal.png":jq,"dock-files.png":yq},g0=Tq,p0='set_wallpaper() { if command -v feh >/dev/null 2>&1; then feh --bg-fill "$1"; else python3 "$2" "$1"; fi; }';function Rq(q){let x=(J)=>J.replaceAll("DISPLAY=:99",`DISPLAY=${q.display}`).replaceAll("/tmp/ara-",`${q.root}/ara-`),X=new Set(q.absent??[]),Q=E0.split(`
122
- `).filter((J)=>!(X.has("terminal")&&J.endsWith("/ara-terminal.desktop"))&&!(X.has("files")&&J.endsWith("/ara-files.desktop"))).join(`
123
- `);return{files:{"openbox/rc.xml":_0(q.screen),"tint2/tint2rc":x(Q),"picom/picom.conf":O0,...X.has("terminal")?{}:{"ara-terminal.desktop":x(f0)},...X.has("files")?{}:{"ara-files.desktop":x(h0)},"ara-chromium.desktop":x(H0).replace("chromium --no-sandbox %U",q.browserExec),"ara-set-root-wallpaper.py":g0},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"; }',p0,'[ ! -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 Gq}from"crypto";import{once as k0}from"events";import{createWriteStream as I0,existsSync as v0,mkdirSync as u0,mkdtempSync as n1,readFileSync as U8,readdirSync as o1,renameSync as c0,realpathSync as l0,rmSync as r0,statSync as H8,writeFileSync as m0}from"fs";import{dirname as f8,join as S}from"path";import{finished as d0}from"stream/promises";var _8="omljlfpmafedpplnpkkahegadhkimdje",f1="https://chromewebstore.google.com/detail/reason/omljlfpmafedpplnpkkahegadhkimdje";function p1(q){if(!q||typeof q!=="object"||Array.isArray(q)||!("version"in q)||q.version!==1||!("status"in q))return null;if(q.status==="unavailable")return Object.keys(q).length===2?{version:1,status:"unavailable"}:null;if(q.status!=="connected"||Object.keys(q).length!==5||!("deviceId"in q)||typeof q.deviceId!=="string"||!/^[A-Za-z0-9._:-]{1,160}$/.test(q.deviceId)||!("apiOrigin"in q)||typeof q.apiOrigin!=="string"||q.apiOrigin.length>2048||!("managedRootIds"in q)||!Array.isArray(q.managedRootIds)||q.managedRootIds.length>32)return null;let x=[];for(let X of q.managedRootIds){if(typeof X!=="string"||!/^[A-Za-z0-9._:-]{1,160}$/.test(X))return null;x.push(X)}try{let X=new URL(q.apiOrigin);if(X.origin!==q.apiOrigin||X.username||X.password||!(X.protocol==="https:"||X.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(X.hostname)))return null}catch{return null}return{version:1,status:"connected",deviceId:q.deviceId,apiOrigin:q.apiOrigin,managedRootIds:x}}var g={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"}},N8={version:"155.0.8059.84",macArm64Sha256:"13b9e98ce56f5ce18e100a009f455c9285f399e7c9dc8a76fdf2f3a9755bb5f2",linux64Sha256:"cf0f049892dea22e6a6db26d47ed0d7776b7158edcbec4634086633df8bafcbc"};var q8={ocu:{url:`https://registry.npmjs.org/open-computer-use/-/open-computer-use-${g.ocu.version}.tgz`,sha256:"7c16a87c8cd357787b02c0ebd040dd5f93880c1fb51c1901caa2e0c05d063130",size_bytes:5844280},obu:{url:`https://registry.npmjs.org/open-browser-use/-/open-browser-use-${g.obu.version}.tgz`,sha256:"9386d8ce0a147b3f55e1807b68edf736836378807541c457c9b5f6ca2cabaa4e",size_bytes:21372018},extension:{url:`https://github.com/iFurySt/open-browser-use/releases/download/v${g.obu.version}/open-browser-use-chrome-extension-${g.obu.version}.zip`,sha256:"c9c07bec1175e12ea6985b0e7784a5ef01fd03f014b958224a1e17dcd838a241",size_bytes:31070}},r="pnbmoicbkopffjjgfgfglopechaiemkp";var a0=["none","standard","all"],E8="22.23.3",s0={"linux-x64":"1084aa36196bba4c3a5e69a1ee388a6e4ff729dad09445fbcd434b28fe3c24af","linux-arm64":"5ced2d48d1d7198739b7f86804de0171aefb6823b684b12341d3321afc3cb0b2","darwin-arm64":"23b25245dcfb9af7262f8ff142e9e2e0af025368117329e7a7458a51e5922f53"},O8={"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"}},Fq="chrome-mac-arm64/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",h8={version:"9.0.2",url:"https://ffmpeg.martin-riedl.de/download/macos/arm64/1789931890_9.0.2/ffmpeg.zip",sha256:"c8ed4c4e6978a03c485edbfe4e0a5dc2380f8a30bba5150531b31b094492d924"},i0={version:h8.version,url:"https://ffmpeg.martin-riedl.de/download/macos/arm64/1789931890_9.0.2/ffprobe.zip",sha256:"fcbe839537485eaee7a7a8bc5cbc0f90d53617e80943e8a5b2e31cb851197ea6"},m="com.ifuryst.open_browser_use.extension",wq="com.reasonmachines.browser_use.extension",Cq="/tmp/reason-browser-use",g8=["tint2","picom","xterm","pcmanfm"],Vq=["fonts-droid-fallback"],Kq=["pulseaudio"],n0=["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",...Vq,"galculator","chromium","ffmpeg","tmux",...Kq,...g8],o0=new Set([...g8,...Vq,...Kq]),Sq=n0.filter((q)=>q!=="chromium"&&!o0.has(q)),t0=["Xvfb","openbox","x11vnc","xdotool","dbus-launch","python3","ffmpeg","tmux"],W8="/usr/bin/chromium",e0=["/usr/local/bin","/usr/bin","/bin","/opt/homebrew/bin"];function Mq(q=process.platform,x=process.arch){let X=`${q}-${x}`;return X==="linux-x64"||X==="linux-arm64"||X==="darwin-arm64"?X:null}function L8(q){return{node:{version:E8,url:`https://nodejs.org/dist/v${E8}/node-v${E8}-${q}.tar.gz`,sha256:s0[q]},open_computer_use:{version:g.ocu.version,url:q8.ocu.url,sha256:q8.ocu.sha256},open_browser_use:{version:g.obu.version,url:q8.obu.url,sha256:q8.obu.sha256},...q==="darwin-arm64"?{chrome_for_testing:{version:N8.version,url:`https://storage.googleapis.com/chrome-for-testing-public/${N8.version}/mac-arm64/chrome-mac-arm64.zip`,sha256:N8.macArm64Sha256}}:{}}}function qx(q){let x={extension:r};for(let[X,Q]of Object.entries(L8(q)))x[X]=`${Q.version}@${Q.sha256}`;return x}function Yq(q){return S(q,".local","share","reason","desktop")}function zq(q,x=Zq()){let X=Yq(x),Q=(W)=>S(X,W,L8(q)[W]?.version??""),P=Q("open_computer_use"),b=Q("open_browser_use"),J=q==="darwin-arm64",y=S(x,"Library","Application Support"),C=J?S(y,"Google","Chrome","NativeMessagingHosts",`${m}.json`):S(x,".config","google-chrome","NativeMessagingHosts",`${m}.json`);return{root:X,automation:S(f8(X),"automation"),receipt:S(X,"receipt.json"),minimal:k8(x),node:S(Q("node"),"bin","node"),ocuDir:P,ocu:S(P,O8[q].ocu),ocuApp:J?S(P,"dist","Open Computer Use.app"):null,obuDir:b,obu:S(b,"cli","open-browser-use.js"),nativeHost:S(b,O8[q].obu),extensionDir:J?S(y,"OpenBrowserUse","chrome-extension","release"):S(x,".local","share","open-browser-use","chrome-extension","release"),setupNativeHostManifest:C,nativeHostManifests:J?[C,S(y,"Google","ChromeForTesting","NativeMessagingHosts",`${m}.json`)]:[S(x,".config","chromium","NativeMessagingHosts",`${m}.json`),S(x,".config","google-chrome-for-testing","NativeMessagingHosts",`${m}.json`)],browser:J?S(Q("chrome_for_testing"),Fq):W8,userChromeHost:J?S(X,"user-chrome","reason-browser-use"):null,userChromeRegistration:J?S(y,"Google","Chrome","NativeMessagingHosts",`${wq}.json`):null,ffmpegDir:S(X,"ffmpeg"),ffmpeg:J?S(X,"ffmpeg",h8.version,"ffmpeg"):null,ffprobe:J?S(X,"ffprobe",i0.version,"ffprobe"):null}}function _q(q){try{let x=JSON.parse(U8(q,"utf8"));if(typeof x!=="object"||x===null)return null;let X=x,Q=X.pins;if(X.schema_version!==1||typeof X.platform!=="string"||typeof Q!=="object"||Q===null||!Object.values(Q).every((P)=>typeof P==="string")||!a0.includes(X.permissions)||!Array.isArray(X.missing_system_packages)||!X.missing_system_packages.every((P)=>typeof P==="string")||typeof X.updated_at!=="string")return null;return{schema_version:1,platform:X.platform,pins:Q,permissions:X.permissions,missing_system_packages:X.missing_system_packages,updated_at:X.updated_at}}catch{return null}}function xx(q,x,X=384){u0(f8(q),{recursive:!0,mode:448});let Q=`${q}.pending.${process.pid}`;m0(Q,x,{mode:X}),c0(Q,q)}function p(q){try{return H8(q).isFile()}catch{return!1}}function Eq(q){try{let x=H8(q);return x.isFile()&&(x.mode&73)!==0}catch{return!1}}function Xx(q){try{return U8(q,"utf8")}catch{return null}}function v(q){for(let x of e0){let X=S(x,q);try{let Q=H8(X);if(Q.isFile()&&(Q.mode&73)!==0)return X}catch{}}return null}function Qx(q){try{let x=JSON.parse(U8(S(q,"package.json"),"utf8"));return typeof x==="object"&&x!==null&&typeof x.version==="string"?x.version:null}catch{return null}}function Px(q,x,X){let Q=L8(X)[q];if(!Q)return!1;if(q==="node")return p(S(x,"bin","node"));if(q==="chrome_for_testing")return p(S(x,Fq));let P=O8[X][q==="open_computer_use"?"ocu":"obu"];return Qx(x)===Q.version&&p(S(x,P))&&(q==="open_computer_use"||p(S(x,"cli","open-browser-use.js")))}function bx(q){return Gq("sha256").update(Buffer.from(q,"base64")).digest("hex").slice(0,32).replace(/./g,(x)=>String.fromCharCode(97+Number.parseInt(x,16)))}function p8(q){try{let x=JSON.parse(U8(q,"utf8"));return typeof x==="object"&&x!==null&&!Array.isArray(x)?x:null}catch{return null}}function Jx(q){let x=p8(S(q.extensionDir,"manifest.json"));return x!==null&&x.version===g.obu.version&&typeof x.key==="string"&&bx(x.key)===r}function Nx(q,x){let X=q?.allowed_origins;return q!==null&&q.name===m&&Array.isArray(X)&&X.length===1&&X[0]===`chrome-extension://${r}/`&&(x===void 0||q.path===x)}function Wx(q){return Jx(q)&&p(q.nativeHost)&&q.nativeHostManifests.every((x)=>Nx(p8(x),q.nativeHost))}function Ux(q){return`#!/bin/sh
124
- # Reason's Chrome extension host (reason desktop install): Open Browser Use on Reason's socket directory.
125
- obu=${`'${q.replaceAll("'","'\\''")}'`}
126
- case "$1" in
127
- chrome-extension://*) exec "$obu" host --socket-dir ${Cq} ;;
128
- mcp) shift; exec "$obu" mcp --socket-dir ${Cq} "$@" ;;
129
- esac
130
- exec "$obu" "$@"
131
- `}function Lx(q){let x=p8(q),X=x?.allowed_origins;return x!==null&&x.name===wq&&x.type==="stdio"&&Array.isArray(X)&&X.includes(`chrome-extension://${_8}/`)&&typeof x.path==="string"&&Eq(x.path)}function yx(q,x){if(!q.userChromeHost||!q.userChromeRegistration)return null;if(!x||Xx(q.userChromeHost)!==Ux(q.nativeHost)||!Eq(q.userChromeHost))return{code:"user_chrome_browser_use_missing"};return Lx(q.userChromeRegistration)?{host:q.userChromeHost}:{code:"user_chrome_native_host_unregistered"}}var jx={display:["display"],computer:["display","system_packages","node","open_computer_use"],browser:["display","system_packages","node","open_computer_use","open_browser_use","browser_extension","browser","chrome_for_testing"]};function k(q={}){let x=q.platform===void 0?Mq():q.platform;if(!x)return null;let X=zq(x,q.home),Q=_q(X.receipt),P=qx(x),b=Q!==null&&Q.platform===x&&JSON.stringify(Object.entries(Q.pins).sort())===JSON.stringify(Object.entries(P).sort()),J=[],y=L8(x);for(let N of["node","open_computer_use","open_browser_use","chrome_for_testing"]){let D=y[N];if(!D)continue;let G=Px(N,S(X.root,N,D.version),x),F=Q?.pins[N],O=G&&F===P[N]?"ready":F!==void 0&&F!==P[N]?"outdated":"missing";J.push({name:N,state:O,detail:D.version})}let C=Q?.pins.extension===r&&Wx(X);J.push({name:"browser_extension",state:C?"ready":"missing",detail:r});let W=v("Xvfb"),j=v("x11vnc"),R=v("openbox");if(x!=="darwin-arm64"){J.push(p(W8)?{name:"browser",state:"ready",detail:W8}:{name:"browser",state:"missing",detail:`non-snap Chromium at ${W8}`});let N=W!==null&&j!==null&&R!==null;J.push({name:"display",state:N?"ready":"missing",detail:"Xvfb + openbox + x11vnc"});let D=t0.filter((z)=>v(z)===null),G=(Q?.missing_system_packages??Sq).filter((z)=>Sq.includes(z)),F=D.length===0&&G.length===0;J.push(F?{name:"system_packages",state:"ready"}:{name:"system_packages",state:"missing",detail:[...new Set([...G,...D])].join(" ")});let O=g8.filter((z)=>v(z)===null);J.push(O.length===0?{name:"desktop_look",state:"ready"}:{name:"desktop_look",state:"missing",detail:O.join(" ")})}let Z=X.ffmpeg&&p(X.ffmpeg)?X.ffmpeg:v("ffmpeg"),B=!Z?null:Z===X.ffmpeg?X.ffprobe:S(f8(l0(Z)),"ffprobe"),Y=b&&J.every((N)=>N.state==="ready"),w=(N)=>b&&J.every((D)=>!jx[N].includes(D.name)||D.state==="ready");return{platform:x,root:X.root,automation:X.automation,ready:Y,features:{display:w("display"),computer:w("computer"),browser:w("browser")},node:X.node,ocu:X.ocu,obu:X.obu,nativeHost:X.nativeHost,extensionDir:X.extensionDir,browser:X.browser,ffmpeg:Z,ffprobe:B&&p(B)?B:null,userChrome:yx(X,b&&["node","open_browser_use"].every((N)=>J.find((D)=>D.name===N)?.state==="ready")),pulseaudio:v("pulseaudio"),xvfb:W,x11vnc:j,openbox:R,components:J}}function Oq(q){return Tx(q)?Aq():[]}function Tx(q){return q?.platform==="darwin-arm64"&&q.ffmpeg===S(q.root,"ffmpeg",h8.version,"ffmpeg")}async function UX(q,x,X,Q=fetch){try{let P=await Q(q,{redirect:"follow"});if(!P.ok||!P.body)throw Error(`download failed (HTTP ${P.status}): ${q}`);let b=Gq("sha256"),J=I0(X,{mode:384});try{let C=P.body.getReader();for(let W=await C.read();!W.done;W=await C.read())if(b.update(W.value),!J.write(W.value))await k0(J,"drain")}finally{J.end(),await d0(J)}let y=b.digest("hex");if(y!==x)throw Error(`digest mismatch for ${q}: expected ${x}, got ${y}`)}catch(P){throw r0(X,{force:!0}),P}}function k8(q){return S(Yq(q),"minimal.json")}function Bx(q=d()){return v0(k8(q))}function LX(q={}){xx(k8(q.home??d()),`${JSON.stringify({version:1,minimal_at:(q.now?.()??new Date).toISOString()})}
132
- `)}function yX(q={}){let x=q.platform===void 0?Mq():q.platform;if(x===null)return null;let X=q.home??d();if(_q(zq(x,X).receipt)!==null)return"refresh";return Bx(X)?null:"install"}import{execFile as Yx,spawn as d8}from"child_process";import{existsSync as zx}from"fs";import{connect as _x}from"net";function Dx(){let q=new Set,x=null,X=(P)=>({holder:x?.viewer??null,you:x===P,same_user:Boolean(x?.viewer&&P.viewer&&x.viewer.user_id===P.viewer.user_id)}),Q=()=>{for(let P of q)P.notify(X(P))};return{join(P){return q.add(P),P.notify(X(P)),()=>{if(!q.delete(P))return;if(x!==P)return;x=null,Q()}},claim(P){if(x===P||!q.has(P))return;x=P,Q()}}}var $q=Dx();import{spawn as Rx}from"child_process";import{existsSync as Cx}from"fs";import{connect as Sx}from"net";import{join as y8}from"path";var fq="reason_desktop",x8={sampleRate:48000,channels:2,codec:"opus"},Zx=5000,Ax=107,Gx=262144,u8=(q)=>y8(q,"native"),j8=(q)=>`unix:${q}`;function I8(q,x=1000){if(!Cx(q))return Promise.resolve(!1);return new Promise((X)=>{let Q=Sx({path:q}),P=(b)=>{Q.destroy(),X(b)};Q.setTimeout(x,()=>P(!1)),Q.once("error",()=>P(!1)),Q.once("close",()=>P(!1)),Q.once("connect",()=>P(!0))})}async function hq(q,x){if(!x)return null;let X=u8(q);if(Buffer.byteLength(X)>Ax||/["'\\\s]/.test(X))return null;try{if(await I8(X))return X;let Q=Rx(x,["--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:${y8(q,"pulseaudio.log")}`,"-n",`--load=module-native-protocol-unix socket="${X}" auth-anonymous=1 auth-cookie-enabled=0`,`--load=module-null-sink sink_name=${fq} rate=${x8.sampleRate} channels=${x8.channels} sink_properties=device.description=Reason_desktop`],{detached:!0,stdio:"ignore",env:{HOME:q,PATH:"/usr/bin:/bin",XDG_RUNTIME_DIR:q,PULSE_RUNTIME_PATH:y8(q,"runtime"),PULSE_STATE_PATH:y8(q,"state")}}),P=!1;Q.once("error",()=>{P=!0}),Q.once("exit",()=>{P=!0}),Q.unref();let b=Date.now()+Zx;while(Date.now()<b){if(await I8(X))return X;if(P)return await I8(X)?X:null;await new Promise((J)=>setTimeout(J,50))}if(!P)Q.kill("SIGKILL");return null}catch{return null}}function gq(){let{sampleRate:q,channels:x}=x8;return["-hide_banner","-loglevel","error","-nostdin","-fflags","nobuffer","-f","pulse","-sample_rate",String(q),"-channels",String(x),"-fragment_size",String(q*x*2/50),"-i",`${fq}.monitor`,"-vn","-ac",String(x),"-ar",String(q),"-c:a","libopus","-b:a","64k","-application","lowdelay","-frame_duration","20","-flush_packets","1","-page_duration","20000","-f","ogg","pipe:1"]}var Fx=[79,103,103,83],wx=Buffer.from("OpusHead"),Vx=Buffer.from("OpusTags"),Hq=(q,x)=>q.byteLength>=x.byteLength&&x.every((X,Q)=>q[Q]===X);class v8 extends Error{constructor(q){super(q);this.name="OggProtocolError"}}class c8{buffer=new Uint8Array(0);partial=[];partialBytes=0;push(q){let x=new Uint8Array(this.buffer.byteLength+q.byteLength);x.set(this.buffer),x.set(q,this.buffer.byteLength);let X=[],Q=0;while(x.byteLength-Q>=27){if(Fx.some((Z,B)=>x[Q+B]!==Z)||x[Q+4]!==0)throw new v8("invalid_page");let P=(x[Q+5]&1)!==0,b=x[Q+26];if(x.byteLength-Q<27+b)break;let J=x.subarray(Q+27,Q+27+b),y=J.reduce((Z,B)=>Z+B,0),C=27+b+y;if(x.byteLength-Q<C)break;if(!P&&this.partialBytes>0)this.resetPartial();let W=P&&this.partialBytes===0,j=Q+27+b,R=j;for(let Z of J){if(j+=Z,Z===255)continue;if(this.appendPartial(x.subarray(R,j),W),R=j,!W){let B=this.takePartial();if(B.byteLength>0&&!Hq(B,wx)&&!Hq(B,Vx))X.push(B)}W=!1,this.resetPartial()}if(R<j)this.appendPartial(x.subarray(R,j),W);Q+=C}return this.buffer=x.slice(Q),X}appendPartial(q,x){if(x||q.byteLength===0)return;if(this.partialBytes+=q.byteLength,this.partialBytes>Gx)throw new v8("packet_too_large");this.partial.push(q.slice())}takePartial(){if(this.partial.length===1)return this.partial[0];let q=new Uint8Array(this.partialBytes),x=0;for(let X of this.partial)q.set(X,x),x+=X.byteLength;return q}resetPartial(){this.partial=[],this.partialBytes=0}}import{spawn as Kx}from"child_process";var pq=1048576,Mx=String.raw`
133
- import gi, json, os, sys
134
- gi.require_version("Gtk", "3.0")
135
- from gi.repository import Gtk, Gdk, GLib
136
- if not Gtk.init_check()[0]:
137
- sys.exit(1)
138
- clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
139
- pending = b""
140
- generation = 0
141
- def send(value):
142
- print(json.dumps(value, ensure_ascii=True), flush=True)
143
- def changed(clipboard, event):
144
- global generation
145
- generation += 1
146
- current = generation
147
- def received(clipboard, text, unused):
148
- if current == generation and text is not None and len(text.encode("utf-8")) <= ${H}:
149
- send({"text": text})
150
- clipboard.request_text(received, None)
151
- # No request_text on startup: never share the pre-existing clipboard.
152
- clipboard.connect("owner-change", changed)
153
- def input_ready(fd, condition):
154
- global pending
155
- chunk = os.read(fd, 65536)
156
- if not chunk:
157
- Gtk.main_quit()
158
- return False
159
- pending += chunk
160
- while b"\n" in pending:
161
- line, pending = pending.split(b"\n", 1)
162
- text = json.loads(line)
163
- if not isinstance(text, str) or len(text.encode("utf-8")) > ${H} or "\x00" in text:
164
- sys.exit(1)
165
- clipboard.set_text(text, -1)
166
- send("ack")
167
- if len(pending) > ${H*6+2}:
168
- sys.exit(1)
169
- return True
170
- GLib.io_add_watch(0, GLib.IO_IN | GLib.IO_HUP, input_ready)
171
- send("ready")
172
- Gtk.main()
173
- `;function kq(q,x){let X=Kx("/usr/bin/python3",["-I","-u","-c",Mx],{env:{DISPLAY:q.display,XAUTHORITY:q.xauthority},stdio:["pipe","pipe","ignore"]}),Q=!1,P=!0,b="",J=0,y=[],C=setTimeout(()=>j(),5000),W=()=>{Q=!0,clearTimeout(C),y.length=0,X.kill("SIGKILL")},j=()=>{if(Q)return;W(),x.end({error:new M("display_unavailable","Reason could not start this Linux desktop's UTF-8 clipboard.")})},R=(Z,B=32)=>{if(Q)return;if(!P){Z();return}if(J+=B,J>pq)W(),x.end({reason:"input_backpressure"});else y.push({apply:Z,bytes:B})};return X.stdout.on("data",(Z)=>{if(Q)return;b+=Z.toString("ascii");for(let B=b.indexOf(`
174
- `);B>=0;B=b.indexOf(`
175
- `)){let Y=b.slice(0,B);b=b.slice(B+1);let w;try{w=JSON.parse(Y)}catch{j();return}if(w==="ready"||w==="ack"){clearTimeout(C),P=!1;while(!P&&!Q&&y.length){let N=y.shift();J-=N.bytes,N.apply()}}else if(w&&typeof w==="object"&&"text"in w&&typeof w.text==="string"&&Buffer.byteLength(w.text)<=H)x.clipboard(w.text);else{j();return}if(Q)return}if(b.length>H*6+32)j()}),X.stdin.on("error",j),X.once("error",j),X.once("exit",j),{apply:R,write(Z){if(Buffer.byteLength(Z)>H||Z.includes("\x00")){j();return}let B=`${JSON.stringify(Z)}
176
- `;R(()=>{if(P=!0,C=setTimeout(()=>j(),5000),X.stdin.write(B),X.stdin.writableLength>pq)W(),x.end({reason:"input_backpressure"})},Buffer.byteLength(B))},close:W}}var a={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}},Ex="avc1.4D002A",Iq={width:1920,height:1080},Ox=262144,$x=0.2,Hx=250,fx=1e4,hx=1024,l8=1e4,gx=500,px=60,kx=1e4,Ix=1000,vq=1048576,oq={kind:"mac_screen",sound:null},vx,uq=()=>vx??=k()?.ffmpeg??null,a8=(q,x,X)=>d8(q,x,{env:X,stdio:["ignore","pipe","ignore"]}),ux,s8=()=>ux??=Oq(k()),cq=(q,x,X)=>{let[Q,...P]=[...s8(),q];return a8(Q,[...P,...x],X)},lq=()=>P0?.videotoolbox?"h264_videotoolbox":"libx264",cx=()=>Math.round(performance.now()*1000),r8=new Set,rq=!1;function tq(q){if(r8.add(q),q.once("exit",()=>r8.delete(q)),rq)return;rq=!0,process.once("exit",()=>{for(let x of r8)try{x.kill("SIGKILL")}catch{}})}function eq(q){try{q.stdout?.destroy()}catch{}if(q.exitCode!==null||q.signalCode!==null)return;try{q.kill("SIGTERM")}catch{return}let x=setTimeout(()=>{if(q.exitCode===null&&q.signalCode===null)try{q.kill("SIGKILL")}catch{}},gx);q.once("exit",()=>clearTimeout(x))}function lx(q,x,X){return{args:["-f","x11grab","-draw_mouse","1","-framerate",String(q),"-video_size",`${x.width}x${x.height}`,"-i",X],size:x}}function rx(q){return{args:["-f","avfoundation","-capture_cursor","1","-pixel_format","nv12","-framerate",String(q),"-i","Capture screen 0:none"],size:null}}function mx(q){return{args:["-probesize","32","-analyzeduration","0","-f","image2pipe","-c:v","mjpeg","-framerate",String(q),"-i","pipe:0"],size:null}}var q0=1700000;function x0(q){return Math.min(1,Math.round(Math.sqrt(q0/(q.width*q.height))*100)/100)}function dx(q,x,X){let Q=d8(X.axe,["stream-video","--udid",X.udid,"--format","ffmpeg","--fps","30","--quality","85","--scale",String(Math.min(0.99,x0(X.size)))],{stdio:["ignore","pipe","ignore"]}),P=d8(q,x,{env:{},stdio:["pipe","pipe","ignore"]});Q.stdout.pipe(P.stdin),P.stdin.on("error",()=>{});let b=()=>{if(Q.exitCode===null&&Q.signalCode===null)Q.kill("SIGTERM")};return P.once("exit",b),P.once("error",b),Q.once("exit",()=>{if(P.exitCode===null&&P.signalCode===null)P.kill("SIGTERM")}),Q.once("error",()=>{if(P.exitCode===null&&P.signalCode===null)P.kill("SIGTERM")}),P}function ax(q){let x=Math.min(1,Iq.width/q.width,Iq.height/q.height);return{width:Math.round(q.width*x),height:Math.round(q.height*x)}}function m8(q,x,X,Q="libx264"){let P=a[q],b=(R)=>Math.max(2,Math.floor(R/2)*2),J={width:b(X.width*P.scale),height:b(X.height*P.scale)},y=J.width!==x.size?.width||J.height!==x.size.height,C=Math.max(1,Math.round(P.kbps*2/P.fps)),W=["-g",String(P.fps*px)],j=Q==="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",...W,"-b:v",`${P.kbps}k`,"-maxrate",`${P.kbps}k`,"-bufsize",`${C}k`,"-bsf:v","h264_metadata=aud=insert"]:["-c:v","libx264","-preset",P.x264Preset,"-tune","zerolatency","-profile:v","main","-level","4.2","-bf","0","-pix_fmt","yuv420p",...P.threads?["-threads",String(P.threads)]:[],"-x264-params","aud=1:repeat-headers=1",...W,"-crf",String(P.crf),"-maxrate",`${P.kbps}k`,"-bufsize",`${C}k`];return["-hide_banner","-loglevel","error","-nostdin","-fflags","nobuffer",...x.args,"-an",...y?["-vf",`scale=${J.width}:${J.height}:flags=fast_bilinear`]:[],...j,"-flush_packets","1","-f","h264","pipe:1"]}class X0{buffer=new Uint8Array(0);scanned=0;key=!1;micros=0;push(q,x){if(this.buffer.byteLength===0)this.micros=x;let X=new Uint8Array(this.buffer.byteLength+q.byteLength);X.set(this.buffer),X.set(q,this.buffer.byteLength),this.buffer=X;let Q=[],P=this.scanned;while(P+3<this.buffer.byteLength){if(this.buffer[P]!==0||this.buffer[P+1]!==0||this.buffer[P+2]!==1){P++;continue}let b=this.buffer[P+3]&31,J=P>0&&this.buffer[P-1]===0?P-1:P;if(b===9&&J>0)Q.push({data:this.buffer.slice(0,J),key:this.key,micros:this.micros}),this.buffer=this.buffer.subarray(J),this.key=!1,this.micros=x,P-=J;if(b===5)this.key=!0;P+=3}return this.scanned=P,Q}}function sx(q,x){let X=_x({path:q}),Q=Buffer.alloc(0),P="version",b=0,J=!1,y=[],C=0,W=!1,j=(N)=>{if(W)return;W=!0,X.destroy(),x.end(N)},R=()=>j({reason:"display_protocol"}),Z=(N)=>{if(W)return;if(!J){if(C+=N.byteLength,C>vq)j({reason:"input_backpressure"});else y.push(N);return}if(X.write(N),X.writableLength>vq)j({reason:"input_backpressure"})},B=(N)=>{Q=Q.subarray(N)},Y=()=>{switch(P){case"version":{if(Q.byteLength<12)return!1;let N=/^RFB (\d{3})\.(\d{3})\n$/.exec(Q.subarray(0,12).toString("latin1"));if(!N||Number(N[1])*1000+Number(N[2])<3007)return R(),!1;return B(12),X.write(`RFB 003.007
177
- `),P="security",!0}case"security":{if(Q.byteLength<1)return!1;let N=Q[0];if(N===0)return R(),!1;if(Q.byteLength<1+N)return!1;if(!Q.subarray(1,1+N).includes(1))return R(),!1;return B(1+N),X.write(Buffer.from([1,1])),P="init",!0}case"init":{if(Q.byteLength<24)return!1;let N=Q.readUInt32BE(20);if(N>65536)return R(),!1;if(Q.byteLength<24+N)return!1;let D={width:Q.readUInt16BE(0),height:Q.readUInt16BE(2)};if(B(24+N),D.width===0||D.height===0)return R(),!1;P="messages",J=!0;for(let G of y)X.write(G);return y=[],C=0,x.ready(D),!W}case"skip":{let N=Math.min(b,Q.byteLength);if(B(N),b-=N,b>0)return!1;return P="messages",!0}case"messages":{if(Q.byteLength<1)return!1;switch(Q[0]){case 1:{if(Q.byteLength<6)return!1;let N=6+Q.readUInt16BE(4)*6;if(Q.byteLength<N)return!1;return B(N),!0}case 2:return B(1),!0;case 3:{if(Q.byteLength<8)return!1;let N=Q.readUInt32BE(4);if(N>H/2)return B(8),P="skip",b=N,!0;if(Q.byteLength<8+N)return!1;let D=Q.subarray(8,8+N).toString("latin1");return B(8+N),x.clipboard(D),!W}default:return R(),!1}}}},w=!1;return X.once("connect",()=>{w=!0}),X.on("data",(N)=>{if(W)return;Q=Q.byteLength?Buffer.concat([Q,N]):N;while(!W&&Y());}),X.once("error",()=>{if(!w)j({error:new M("display_unavailable","Reason could not reach this machine's desktop server.")})}),X.once("close",()=>j({reason:"display_closed"})),{pointer(N,D,G){let F=Buffer.alloc(6);F.writeUInt8(5,0),F.writeUInt8(G&255,1),F.writeUInt16BE(N,2),F.writeUInt16BE(D,4),Z(F)},key(N,D){let G=Buffer.alloc(8);G.writeUInt8(4,0),G.writeUInt8(N?1:0,1),G.writeUInt32BE(D>>>0,4),Z(G)},clipboard(N){if(Array.from(N).some((F)=>F.codePointAt(0)>255)){j({reason:"clipboard_unicode_unsupported"});return}let D=Buffer.from(N,"latin1"),G=Buffer.alloc(8);G.writeUInt8(6,0),G.writeUInt32BE(D.byteLength,4),Z(Buffer.concat([G,D]))},close(){W=!0,X.destroy()}}}class i8{run=null;viewers=new Set;get running(){return this.run!==null}start(q,x,X,Q){this.viewers.add(q),this.stop();let P;try{P=X()}catch{this.fail();return}tq(P);let b={child:P,splitter:new X0};this.run=b;for(let y of[...this.viewers])y.started(x);P.stdout?.on("data",(y)=>{if(this.run!==b)return;for(let C of b.splitter.push(y,Q()))for(let W of[...this.viewers])W.unit(C)});let J=()=>{if(this.run!==b)return;this.run=null,this.fail()};P.once("exit",J),P.once("error",J)}leave(q){if(!this.viewers.delete(q))return;if(this.viewers.size===0)this.stop()}stop(){if(!this.run)return;eq(this.run.child),this.run=null}fail(){for(let q of[...this.viewers])q.failed()}}var mq=new WeakMap;function ix(q){let x=mq.get(q);if(!x)mq.set(q,x=new i8);return x}function Q0(q,x,X={}){let Q=X.micros??cx,P=new sq,b=x.request.preset,J=null,y=null,C=null,W=!1,j=null,R=!1,Z=!1,B=null,Y=0,w=0,N=!1,D=null,G=null,F=0,O=null,z=[],i=0,A=[],f=new Uint32Array(l8+1),I=0,C8=null,S8=0,n=0,Z8=0,qq=0,xq=0,X8=null,A8=0,u={frames:0,bytes:0,since:Q()},c=[],o=0,G8,F8=!1,C0=Q(),E={},l=()=>Math.round((Q()-C0)/1000),Xq=X.control??$q,w8=null,V8=null,$=(L)=>{let U=T8(L);return q.send(U),qq+=U.byteLength,U.byteLength},Q8=(L)=>{if(q.done)return;if(q.open)$({type:"error",code:L});q.end({reason:L})},P8=()=>Math.max(Ox,a[b].kbps*1000/8*$x),b8=()=>Q()/1000,S0=()=>{while(A.length>1&&A[0].atMs<b8()-fx)A.shift();return A[0]?.rttMs??null},Qq=(L)=>{let U=S0();if(U===null||z.length===0)return!1;let T=(U+Hx)*L;return b8()-z[0].sentMs>T||i>T/1000*a[b].kbps*1000/8},Z0=(L)=>{if(F===0)return;let U=Math.min(L,F-1);if(O!==null&&U<=O)return;O=U;let T=b8();while(z.length&&z[0].seq<=U){let V=z.shift();if(i-=V.bytes,V.seq!==U)continue;let K=Math.max(0,T-V.sentMs);while(A.length&&A.at(-1).rttMs>=K)A.pop();A.push({atMs:T,rttMs:K}),f[Math.min(l8,Math.round(K))]++,I++,C8=Math.min(C8??K,K)}},A0=()=>{let L=0;for(let U=0;U<=l8;U++)if(L+=f[U],L*2>=I)return U;return 0},G0=()=>q.bufferedAmount<=P8()/2&&!Qq(0.5),Pq=()=>{F8=!0,c=[],o=0,j?.leave(K8),j=null},bq=(L)=>{if(q.done)return;if(L.key)E.first_key_ms??=l();if(!W){if(!j||c.length===0&&!L.key)return;if(c.push(L),o+=L.data.byteLength,o>P8())Pq();return}if(N){n++;return}if(q.bufferedAmount>P8()||Qq(1)){N=!0,n++,D=setInterval(()=>{if(q.done||!G0())return;if(D)clearInterval(D);D=null,N=!1,Y8()},X.drainPollMs??25);return}if(!R){if(!L.key){n++;return}if($({type:"hello",width:y.width,height:y.height,fps:a[b].fps,preset:b,codec:Ex}),R=!0,E.first_frame_ms??=l(),!Z&&J?.sound)$({type:"audioHello",...x8}),Z=!0}let U=$({type:"frame",key:L.key,seq:F,captureMicros:L.micros,data:L.data});if(z.push({seq:F,sentMs:b8(),bytes:U}),i+=U,z.length>hx)i-=z.shift().bytes;F++,S8++,X8??=L.micros,A8=L.micros,u.frames++,u.bytes+=U},K8={started(L){b=L,R=!1,c=[],o=0},unit:bq,failed:()=>Q8("encoder_failed")},M8=()=>{let L=(X.ffmpeg??uq)();if(!J||!y){Q8("encoder_failed");return}let[U,T]=[J,y],V="kind"in U&&U.kind==="simulator"?U.stream:null;if(!L&&!V){Q8("encoder_failed");return}if(j??="kind"in U&&U.kind==="mac_screen"?ix(X.spawn??cq):new i8,E.encoder_ms===void 0)E.encoder_ms=l(),E.encoder_shared=j.running;j.start(K8,b,()=>{let K=a[b].fps;if(V)return V(K,a[b].kbps,q0);if("kind"in U&&U.kind==="simulator"){let h=Math.min(0.99,x0(U.size)),t={width:U.size.width*h,height:U.size.height*h};return dx(L,m8(b,mx(Math.min(K,30)),t,(X.macEncoder??lq)()),U)}return"kind"in U?(X.spawn??cq)(L,m8(b,rx(K),ax(T),(X.macEncoder??lq)()),{}):(X.spawn??a8)(L,m8(b,lx(K,T,U.display),T),{DISPLAY:U.display,XAUTHORITY:U.xauthority})},Q)},J8=()=>{if(!B)return;eq(B.child),B=null},F0=()=>{let L=(X.ffmpeg??uq)();if(B||q.done||!Z||!J?.sound||!L)return;let U;try{U=(X.spawn??a8)(L,gq(),{PULSE_SERVER:j8(J.sound)})}catch{return}tq(U);let T={child:U,reader:new c8};B=T,U.stdout?.on("data",(K)=>{if(B!==T||q.done)return;let h;try{h=T.reader.push(K)}catch{J8();return}let t=Q();for(let w0 of h){if(q.bufferedAmount>P8()){w++;continue}$({type:"audio",captureMicros:t,data:w0}),Y++}});let V=()=>{if(B===T)J8()};U.once("exit",V),U.once("error",V)},Y8=()=>{if(!j||q.done)return;Z8++,M8()},Jq=()=>{if(q.done||!y)return;if(!W){if(j||F8)return;M8(),G8=setTimeout(()=>{if(!W)Pq()},kx);return}if(clearTimeout(G8),E.encoder_early===void 0){if(E.encoder_early=j!==null,F8)E.hold_lapsed=!0}if(!j)M8();let L=c;c=[],o=0;for(let U of L)bq(U);G??=setInterval(()=>{let U=Q(),T=Math.max(0.001,(U-u.since)/1e6);$({type:"stats",stats:{fps:Math.round(u.frames/T*10)/10,kbps:Math.round(u.bytes*8/1000/T),dropped:n,restarts:Z8,queued_bytes:q.bufferedAmount}}),u={frames:0,bytes:0,since:U}},Ix)};x.desktop.then((L)=>{if(q.done)return;J=L;let U={ready(T){y=T,E.desktop_ms??=l(),Jq()},clipboard(T){if(q.open&&Buffer.byteLength(T)<=H)$({type:"serverClipboard",text:T})},end(T){if("reason"in T&&q.open)$({type:"error",code:T.reason});q.end(T)}};if("kind"in L&&L.kind==="simulator")C=L.input,U.ready(L.points);else if("kind"in L)C=(X.macInput??((T)=>nq(T,s8())))(U);else{let T=(X.linuxClipboard??kq)(L,U),V=sx(L.rfbSocket,{...U,clipboard:(K)=>{if(!T)U.clipboard(K)}});C=T?{pointer:(K,h,t)=>T.apply(()=>V.pointer(K,h,t)),key:(K,h)=>T.apply(()=>V.key(K,h)),clipboard:(K)=>T.write(K),close(){T.close(),V.close()}}:V}Nq()},(L)=>q.end({error:L}));function Nq(){if(V8||!x.viewerSameNetwork||!W||q.done||!J||!("kind"in J)||J.kind!=="mac_screen")return;V8=(X.macWindows??iq)((L)=>{if(q.open)$({type:"windows",bounds:L})})}let Wq={viewer:x.viewer??null,notify(L){if(q.open)$({type:"control",control:L})}},z8=(L)=>{if(!C)return;if(!J||!("kind"in J)||J.kind!=="simulator")Xq.claim(Wq);L(C)};return{opened(){E.relay_ms??=l()},received(L){xq+=L.byteLength;let U;try{U=P.push(L)}catch{Q8("viewer_protocol");return}for(let T of U){if(q.done)return;switch(T.type){case"ping":$({type:"pong",token:T.token});break;case"pointer":z8((V)=>V.pointer(T.x,T.y,T.buttons));break;case"key":z8((V)=>V.key(T.down,T.keysym));break;case"clientClipboard":z8((V)=>V.clipboard(T.text));break;case"config":if(T.preset!==b)b=T.preset,Y8();break;case"keyframeRequest":if(R&&!N)Y8();break;case"ack":Z0(T.seq);break;case"audioEnable":if(T.on)F0();else J8();break;default:break}}if(!W&&!q.done){if(W=!0,E.viewer_ms=l(),x.viewer)w8=Xq.join(Wq);Jq(),Nq()}},close(){if(w8?.(),w8=null,V8?.close(),D)clearInterval(D);if(G)clearInterval(G);clearTimeout(G8),j?.leave(K8),J8(),C?.close()},summary:()=>({output_bytes:qq,input_bytes:xq,video:{preset:b,frames:S8,dropped:n,restarts:Z8,avg_fps:X8!==null&&A8>X8?Math.round((S8-1)/((A8-X8)/1e6)*10)/10:0,min_rtt_ms:Math.round(C8??0),p50_rtt_ms:I?A0():0,audio_packets:Y,audio_dropped:w,connect:E}})}}var dq=null,P0=null,nx=null;function ox(){let q=k();return q?.features.display?q.ffmpeg:null}function b0(q){return dq??=new Promise((x)=>{Yx(q,["-hide_banner","-encoders"],{env:{},timeout:5000,killSignal:"SIGKILL",maxBuffer:1048576,encoding:"utf8"},(X,Q)=>{let P=(b)=>!X&&new RegExp(`^\\s*V\\S*\\s+${b}\\s`,"m").test(Q);x(P0={x264:P("libx264"),videotoolbox:P("h264_videotoolbox")})})}),dq}var aq=null;function HX(){return aq??=(async()=>{let q=[k()?.ffmpeg,"/opt/homebrew/bin/ffmpeg","/usr/local/bin/ffmpeg"].find((X)=>Boolean(X&&zx(X)));if(!q)return null;let x=await b0(q);return x.videotoolbox||x.x264?q:null})(),aq}function J0(q=process.platform,x={}){if(q!=="linux"&&q!=="darwin")return Promise.resolve(!1);let X=(x.ffmpeg??ox)();if(!X)return Promise.resolve(!1);let Q=(x.encoders??b0)(X);if(q==="linux")return Q.then((b)=>b.x264);let P=x.macScreen?x.macScreen():nx??=$8(s8());return Promise.all([Q,P]).then(([b,J])=>(b.x264||b.videotoolbox)&&J?.screen===!0&&J.accessibility)}var J1=43200000,B8=":99",N1=60000,R8=15000,t8={width:1280,height:800},W1=/^[A-Za-z0-9._:-]{1,160}$/;function U1(q){return Boolean(q)&&typeof q==="object"&&!Array.isArray(q)}var L1=["video","viewer","viewer_same_network","viewer_network"];function y1(q,x=Date.now()){let X=["relay_url","session_id","expires_at"];if(!U1(q)||X.some((y)=>!(y in q))||Object.keys(q).some((y)=>!X.includes(y)&&!L1.includes(y)))throw new M("invalid_display_request","Reason desktop request is malformed.");let Q="video"in q?y0(q.video):void 0,P="viewer"in q?L0(q.viewer):null;if(Q===null)throw new M("invalid_display_request","Reason desktop video request is invalid.");let b=null;try{b=typeof q.relay_url==="string"?new URL(q.relay_url):null}catch{}if(!b||b.protocol!=="wss:"&&b.protocol!=="ws:"||b.username||b.password)throw new M("invalid_display_request","Reason desktop relay URL is invalid.");if(typeof q.session_id!=="string"||!W1.test(q.session_id))throw new M("invalid_display_request","Reason desktop session identity is invalid.");let J=typeof q.expires_at==="string"?Date.parse(q.expires_at):Number.NaN;if(!Number.isFinite(J)||J<=x)throw new M("invalid_display_request","Reason desktop session has already expired.");return{relay_url:q.relay_url,session_id:q.session_id,expires_at:new Date(Math.min(J,x+J1)).toISOString(),...Q?{video:Q}:{},...P?{viewer:P}:{},...Q&&q.viewer_same_network===!0?{viewer_same_network:!0}:{}}}function j1(q=process.platform){return(q==="linux"||q==="darwin")&&k()?.features.display===!0}async function nX(){if(process.platform!=="darwin")return j1();return await J0()}function D8(q){X1(q,{recursive:!0,mode:448});let x=x1(q);if(!x.isDirectory()||x.isSymbolicLink()||process.getuid&&x.uid!==process.getuid())throw new M("display_unavailable","Reason desktop state directory is not private.");q1(q,448)}function T1(q,x){let X=(P)=>{let b=Buffer.alloc(2);return b.writeUInt16BE(P.length),Buffer.concat([b,P])},Q=Buffer.from([255,255]);return Buffer.concat([Q,X(Buffer.alloc(0)),X(Buffer.from(q)),X(Buffer.from("MIT-MAGIC-COOKIE-1")),X(x)])}function s(q,x,X=2000){return new Promise((Q)=>{let P=b1(q),b="",J=(y)=>{P.destroy(),Q(y)};P.setTimeout(X,()=>J(!1)),P.once("error",()=>J(!1)),P.once("close",()=>J(!1)),P.once("connect",()=>{if(!x)J(!0)}),P.on("data",(y)=>{if(b+=y.toString("latin1"),b.length>=4)J(b.startsWith("RFB "))})})}async function D0(q,x){let X=Date.now()+x;while(Date.now()<X){if(await q())return!0;await new Promise((Q)=>setTimeout(Q,100))}return!1}function e8(q,x,X){return new Promise((Q)=>{let P=T0(q,x,{detached:!0,stdio:"ignore",env:X});P.once("error",()=>Q(-1)),P.once("exit",(b)=>Q(b)),P.unref(),setTimeout(()=>Q(null),R8).unref()})}var n8=null;function B1(q=d()){return n8??=D1(q).finally(()=>{n8=null}),n8}async function D1(q){let x=k({home:q});if(!x?.xvfb||!x.x11vnc||!x.openbox)throw new M("display_unavailable","Run `reason desktop install` on this machine to enable its desktop.");W0({root:x.root,automation:x.automation,extensionDir:x.extensionDir});let X=_(x.root,"display");D8(X);let Q=await C1(q,X,x.x11vnc);if(Q)return Q;let P={display:B8,xauthority:_(X,"Xauthority"),rfbSocket:_(X,"rfb.sock")},b=_(X,"pulse"),J=(async()=>{try{D8(b)}catch{return null}return await hq(b,x.pulseaudio)})(),y=_(X,"home");D8(y);let C={HOME:y,PATH:"/usr/local/bin:/usr/bin:/bin",DISPLAY:P.display,XAUTHORITY:P.xauthority};if(x.pulseaudio)C.PULSE_SERVER=j8(u8(b));let W=async()=>({...P,sound:await J});if(await s({path:P.rfbSocket},!0))return await W();if(!B0(P.xauthority))o8(P.xauthority,T1(B8.slice(1),ex(16)),{mode:384,flag:"wx"});let j=S1(_(X,"theme"),P.display),R={path:`/tmp/.X11-unix/X${B8.slice(1)}`};if(!await s(R,!1)){if(e8(x.xvfb,[P.display,"-screen","0",`${t8.width}x${t8.height}x24`,"-nolisten","tcp","-auth",P.xauthority],C),!await D0(()=>s(R,!1),R8))throw new M("display_unavailable","Reason could not start the virtual display.");e8(x.openbox,["--config-file",j.openboxConfig],C)}if(await Z1(j,C),!await R0(x.x11vnc,P,X,"x11vnc.log",C))throw new M("display_unavailable","Reason could not start the desktop server.");return await W()}async function R0(q,x,X,Q,P){if(await s({path:x.rfbSocket},!0))return!0;P1(x.rfbSocket,{force:!0});let b=await e8(q,["-display",x.display,"-auth",x.xauthority,"-rfbport","0","-rfbportv6","-1","-unixsock",x.rfbSocket,"-nopw","-forever","-shared","-noxdamage","-sb","0","-rfbversion","3.7","-quiet","-bg","-o",_(X,Q)],P);if(b!==null&&b!==0)return!1;return await D0(()=>s({path:x.rfbSocket},!0),R8)}async function R1(){let q=["DISPLAY","XAUTHORITY","WAYLAND_DISPLAY","XDG_SESSION_TYPE"],x=(X)=>Object.fromEntries(q.flatMap((Q)=>X[Q]?[[Q,X[Q]]]:[]));if(process.env.DISPLAY)return x(process.env);try{let X=await new Promise((Q,P)=>tx("systemctl",["--user","show-environment"],{encoding:"utf8",timeout:2000},(b,J)=>b?P(b):Q(J)));return x(Object.fromEntries(X.split(`
178
- `).flatMap((Q)=>{let P=Q.indexOf("=");return P>0?[[Q.slice(0,P),Q.slice(P+1)]]:[]})))}catch{return{}}}var N0=new Set;async function C1(q,x,X){let Q=await R1(),P=/^:(\d+)(?:\.\d+)?$/.exec(Q.DISPLAY??"")?.[1];if(!P||`:${P}`===B8||Q.WAYLAND_DISPLAY||Q.XDG_SESSION_TYPE==="wayland")return null;let b={display:`:${P}`,xauthority:Q.XAUTHORITY??_(q,".Xauthority"),rfbSocket:_(x,`rfb-${P}.sock`)},J=`${b.display} ${b.xauthority}`;if(N0.has(J)||!await s({path:`/tmp/.X11-unix/X${P}`},!1))return null;let y={HOME:q,PATH:"/usr/local/bin:/usr/bin:/bin",DISPLAY:b.display,XAUTHORITY:b.xauthority};if(await R0(X,b,x,`x11vnc-${P}.log`,y))return{...b,sound:null};return N0.add(J),process.stderr.write(`Reason worker: your screen ${b.display} could not be served; using the virtual desktop
179
- `),null}function S1(q,x){let X=`chromium --no-first-run --no-default-browser-check${process.geteuid?.()===0?" --no-sandbox":""} %U`,Q=[["terminal","xterm"],["files","pcmanfm"]].filter(([,b])=>!B0(`/usr/bin/${b}`)).map(([b])=>b),P=Rq({root:q,display:x,screen:t8,browserExec:X,absent:Q});for(let b of["","openbox","tint2","picom"])D8(_(q,b));for(let[b,J]of Object.entries(P.files))o8(_(q,b),J,{mode:384});for(let[b,J]of Object.entries(Dq))o8(_(q,`ara-${b}`),Q1(J),{mode:384});return{root:q,openboxConfig:_(q,"openbox","rc.xml"),start:P.start}}async function Z1(q,x){let X=[`ROOT=${JSON.stringify(q.root)}`,...q.start,"openbox --reconfigure >/dev/null 2>&1 || true"].join(`
180
- `);await new Promise((Q)=>{let P=T0("/bin/sh",["-c",X],{stdio:"ignore",env:{...x,PATH:"/usr/bin:/bin"}}),b=setTimeout(()=>{P.kill(),Q()},R8);P.once("error",()=>{clearTimeout(b),Q()}),P.once("exit",()=>{clearTimeout(b),Q()})})}async function oX(q,x={}){let X=x.now??Date.now,Q=y1(q.payload,X());if(q.signal.throwIfAborted(),!Q.video)throw new M("display_video_required","Reason desktops stream as video now; this request came without it.");let P=x.platform??process.platform;if(P!=="linux"&&P!=="darwin")throw new M("display_video_unsupported","This machine does not serve desktop video.");let b=Q.video,J=(x.video?.desktop??(P==="darwin"?async()=>oq:B1))();return await A1(q.signal,Q,x,X,(y)=>Q0(y,{request:b,desktop:J,...Q.viewer?{viewer:Q.viewer}:{},viewerSameNetwork:Q.viewer_same_network===!0},x.video),(y)=>T8({type:"error",code:y}))}function A1(q,x,X,Q,P,b){let J=Q();return new Promise((y,C)=>{let W=null,j=!1,R=!1,Z,B,Y,w=!1,N=null,D=(A)=>{if(R)return;if(N)A=N;R=!0,clearTimeout(Z),clearTimeout(B),q.removeEventListener("abort",F),Y?.close();try{W?.close(1000,"display_session_over")}catch{}if("error"in A){C(A.error);return}y({reason:A.reason,...Y?.summary(),duration_ms:Math.max(0,Q()-J)})},G=()=>D({error:new M("display_relay_unavailable","Reason could not reach the desktop relay.")}),F=()=>{let A=q.reason;D({error:A instanceof M?A:new M("cancelled","Reason closed the desktop session.")})},O=()=>{if(!N||!W)return;let A=N.error;try{W.send(b(A instanceof M?A.code:"display_unavailable"))}catch{}D(N)};if(Y=P({get done(){return R||N!==null},get open(){return j&&!R&&N===null},get bufferedAmount(){return W?.bufferedAmount??0},send(A){if(R||N||!j||!W)return;try{W.send(A)}catch{D({reason:"relay_closed"})}},end:(A)=>{if(R||N)return;if(!("error"in A)){D(A);return}if(N=A,w&&j)O()}}),R){Y.close();return}if(q.aborted){F();return}q.addEventListener("abort",F,{once:!0}),Z=setTimeout(()=>D({reason:"session_expired"}),Math.max(1,Date.parse(x.expires_at)-Q())),B=setTimeout(()=>D({reason:"viewer_absent"}),X.viewerWaitMs??N1);try{W=(X.connect??j0)(x.relay_url,(X.loadProxy??U0)()?.url)}catch{G();return}W.binaryType="arraybuffer",W.onopen=()=>{if(R||!W)return;j=!0,Y?.opened()},W.onmessage=(A)=>{if(R)return;let f=A.data,I=f instanceof ArrayBuffer?new Uint8Array(f):ArrayBuffer.isView(f)?new Uint8Array(f.buffer,f.byteOffset,f.byteLength):null;if(!I||I.byteLength===0)return;if(clearTimeout(B),w=!0,N){O();return}Y?.received(I)},W.onclose=()=>{if(R)return;if(!j){G();return}D({reason:"relay_closed"})},W.onerror=()=>{if(R||j)return;G()}})}
181
- export{_8 as Gf,f1 as Hf,p1 as If,r as Jf,j8 as Kf,HX as Lf,J0 as Mf,Cq as Nf,zq as Of,k as Pf,UX as Qf,LX as Rf,yX as Sf,J1 as Tf,B8 as Uf,y1 as Vf,j1 as Wf,nX as Xf,D8 as Yf,B1 as Zf,oX as _f};
@@ -1,3 +0,0 @@
1
- // @bun
2
- import{yg as m}from"./vm-hands-entry-lite-dgxxsdwb.js";import{Mg as w}from"./vm-hands-entry-lite-za55dtte.js";import{Zi as h}from"./vm-hands-entry-lite-c01eyep6.js";import{kj as x}from"./vm-hands-entry-lite-9cgm6g8t.js";import{bk as Q}from"./vm-hands-entry-lite-j2q1k9vb.js";import{existsSync as B,realpathSync as k,statSync as s}from"fs";import{platform as p}from"os";import{isAbsolute as y,sep as d}from"path";var r=43200000,A=w,l=4,u=/^[A-Za-z0-9._:-]{1,160}$/,a=1000;function v(z){return Boolean(z)&&typeof z==="object"&&!Array.isArray(z)}function q(z,H){if(typeof z!=="number"||!Number.isFinite(z)||z<=0)return H;return Math.min(a,Math.max(1,Math.floor(z)))}function n(z,H=Date.now()){let V=["relay_url","session_id","expires_at"],J=new Set([...V,"cols","rows","cwd","workspace"]);if(!v(z)||V.some((L)=>!(L in z))||Object.keys(z).some((L)=>!J.has(L)))throw new Q("invalid_pty_request","Reason terminal request is malformed.");let{relay_url:j,session_id:Y,expires_at:C}=z;if(typeof j!=="string")throw new Q("invalid_pty_request","Reason terminal relay URL is missing.");let D;try{D=new URL(j)}catch{throw new Q("invalid_pty_request","Reason terminal relay URL is invalid.")}if(D.protocol!=="wss:"&&D.protocol!=="ws:"||D.username||D.password)throw new Q("invalid_pty_request","Reason terminal relay URL is invalid.");if(typeof Y!=="string"||!u.test(Y))throw new Q("invalid_pty_request","Reason terminal session identity is invalid.");let R=typeof C==="string"?Date.parse(C):Number.NaN;if(!Number.isFinite(R)||R<=H)throw new Q("invalid_pty_request","Reason terminal session has already expired.");if(z.cwd!==void 0&&typeof z.cwd!=="string")throw new Q("invalid_pty_request","Reason terminal working directory is invalid.");let Z=z.workspace===void 0?void 0:x(z.workspace);if(Z===null||Z&&z.cwd!==void 0)throw new Q("invalid_pty_request","Reason terminal workspace is invalid.");return{relay_url:j,session_id:Y,expires_at:new Date(Math.min(R,H+r)).toISOString(),cols:q(z.cols,80),rows:q(z.rows,24),...z.cwd===void 0?{}:{cwd:z.cwd},...Z?{workspace:Z}:{}}}function o(z,H){return H===z||H.startsWith(z+d)}function U(z,H){if(H===void 0)return z;if(!y(H))throw new Q("pty_cwd_invalid","Reason terminal working directory must be absolute.");let V;try{V=k(H)}catch{throw new Q("pty_cwd_invalid","Reason terminal working directory does not exist.")}if(!o(z,V))throw new Q("pty_cwd_outside_root","Reason terminal working directory escapes the granted root.");if(!s(V).isDirectory())throw new Q("pty_cwd_invalid","Reason terminal working directory is not a directory.");return V}function t(z=process.env){let H=z.SHELL;if(H&&y(H)&&B(H))return H;for(let V of p()==="darwin"?["/bin/zsh","/bin/bash","/bin/sh"]:["/bin/bash","/bin/sh"])if(B(V))return V;return"/bin/sh"}function e(){let z=globalThis.Bun;if(!z)throw new Q("pty_unavailable","Reason terminals require the Bun runtime.");return z.spawn}function Dz(){return typeof globalThis.Bun<"u"}var zz=(z)=>{let H=e()({cmd:[z.shell,"-i","-l"],cwd:z.cwd,env:{...z.environment,TERM:"xterm-256color"},terminal:{cols:z.cols,rows:z.rows,data:(J,j)=>{z.onData(j)}}}),V=H.terminal;if(!V){try{H.kill()}catch{}throw new Q("pty_unavailable","Reason could not allocate a pseudo-terminal.")}return{write:(J)=>V.write(J),resize:(J,j)=>V.resize(J,j),kill:()=>{try{H.kill()}catch{}},exited:H.exited.then((J)=>typeof J==="number"?J:null,()=>null)}},Hz=(z,H)=>{return H===void 0?new WebSocket(z):new WebSocket(z,{proxy:H})},S=new Set;function Jz(z){if(S.size>=l||S.has(z))return null;S.add(z);let H=!1;return()=>{if(H)return;H=!0,S.delete(z)}}async function Kz(z,H={}){let V=H.now??Date.now,J=n(z.payload,V()),j=Jz(z.operationId);if(!j)throw new Q("pty_slot_busy","This Reason Device already runs the maximum number of terminals.");let Y=V(),C,D,R;try{let Z=J.workspace?h(z.root,J.workspace):void 0;C=Z?U(B(Z.boundary)?k(Z.boundary):Z.boundary,Z.path):U(z.root,J.cwd),D=H.environment??process.env,R=H.shellPath??t(D)}catch(Z){throw j(),Z}return await new Promise((Z,L)=>{let X=null,W=null,M=!1,f=!1,K=!1,T=null,_=0,b=0,O=[],P=0,g=null,$=(N)=>{if(K)return;if(K=!0,g)clearTimeout(g);z.signal.removeEventListener("abort",I);try{X?.kill()}catch{}try{W?.close(1000,"pty_session_over")}catch{}if(j(),N.kind==="rejected"){L(N.error);return}let G={reason:N.reason,exit_code:T,output_bytes:_,input_bytes:b,duration_ms:Math.max(0,V()-Y)};z.emitEvent("pty.stopped",{...G}).catch(()=>{return}),Z({...G})},I=()=>{let N=z.signal.reason;$({kind:"rejected",error:N instanceof Q?N:new Q("cancelled","Reason closed the terminal session.")})};if(z.signal.aborted){I();return}z.signal.addEventListener("abort",I,{once:!0}),g=setTimeout(()=>$({kind:"resolved",reason:"session_expired"}),Math.max(1,Date.parse(J.expires_at)-V()));let i=(N)=>{if(_+=N.byteLength,!M||!W){if(O.push(N),P+=N.byteLength,P>A)$({kind:"resolved",reason:"output_backpressure"});return}try{W.send(N)}catch{$({kind:"resolved",reason:"relay_closed"});return}if(W.bufferedAmount>A)$({kind:"resolved",reason:"output_backpressure"})};try{X=(H.spawnPty??zz)({shell:R,args:["-i","-l"],cwd:C,cols:J.cols,rows:J.rows,environment:D,onData:(N)=>{if(!K)i(N)}})}catch(N){$({kind:"rejected",error:N instanceof Q?N:new Q("pty_spawn_failed","Reason could not start the terminal shell.")});return}X.exited.then((N)=>{if(K)return;if(T=N,M&&W)try{W.send(JSON.stringify({t:"exit",code:N}))}catch{}$({kind:"resolved",reason:"shell_exited"})});let c=(H.loadProxy??m)()?.url;try{W=(H.connect??Hz)(J.relay_url,c)}catch{$({kind:"rejected",error:new Q("pty_relay_unavailable","Reason could not reach the terminal relay.")});return}W.binaryType="arraybuffer",W.onopen=()=>{if(K||!W)return;M=!0;try{W.send(JSON.stringify({t:"open",cols:J.cols,rows:J.rows}));for(let N of O.splice(0))W.send(N);P=0}catch{$({kind:"resolved",reason:"relay_closed"});return}f=!0,z.emitEvent("pty.ready",{session_id:J.session_id,cols:J.cols,rows:J.rows}).catch(()=>{return})},W.onmessage=(N)=>{if(K||!X)return;let G=N.data;if(typeof G==="string"){let F;try{F=JSON.parse(G)}catch{return}if(!v(F))return;if(F.t==="resize"){try{X.resize(q(F.cols,J.cols),q(F.rows,J.rows))}catch{}return}if(F.t==="close")$({kind:"resolved",reason:"client_closed"});return}let E=G instanceof ArrayBuffer?new Uint8Array(G):ArrayBuffer.isView(G)?new Uint8Array(G.buffer,G.byteOffset,G.byteLength):null;if(!E||E.byteLength===0)return;b+=E.byteLength;try{X.write(E)}catch{}},W.onclose=()=>{if(K)return;if(!f){$({kind:"rejected",error:new Q("pty_relay_unavailable","Reason could not reach the terminal relay.")});return}$({kind:"resolved",reason:"relay_closed"})},W.onerror=()=>{if(K||f)return;$({kind:"rejected",error:new Q("pty_relay_unavailable","Reason could not reach the terminal relay.")})}})}
3
- export{r as $f,A as ag,l as bg,n as cg,U as dg,t as eg,Dz as fg,zz as gg,Hz as hg,Kz as ig};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{s as a,t as b,u as c}from"./vm-hands-entry-lite-yjn6sk08.js";import"./vm-hands-entry-lite-j2q1k9vb.js";import"./vm-hands-entry-lite-g036gtem.js";export{b as spawnSessionPty,c as runVmHandsOpRunner,a as VM_HANDS_OP_RUNNER_PERSON_ARG};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{r as a}from"./vm-hands-entry-lite-jb2sr2r7.js";import"./vm-hands-entry-lite-dcynw6t2.js";import"./vm-hands-entry-lite-sb9a1jcn.js";import"./vm-hands-entry-lite-hh24bq0d.js";import"./vm-hands-entry-lite-4m40gwkf.js";import"./vm-hands-entry-lite-j2q1k9vb.js";import"./vm-hands-entry-lite-g036gtem.js";export{a as configureWorkerSandbox};