@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.
Files changed (117) hide show
  1. package/bin/reason +1 -1
  2. package/bin/runtime/srt/sandbox-runtime.mjs +38 -38
  3. package/bin/vm-hands/api-18d75dfn.js +2 -0
  4. package/bin/vm-hands/api-credentials-3vhge1ap.js +2 -0
  5. package/bin/vm-hands/connect-cli-pn1h0b08.js +2 -0
  6. package/bin/vm-hands/custom-endpoint-device-17t4efc4.js +2 -0
  7. package/bin/vm-hands/desktop-account-6sjrxy69.js +2 -0
  8. package/bin/vm-hands/device-workspace-s50q53sz.js +2 -0
  9. package/bin/vm-hands/{fsevents-ekt70rcc.js → fsevents-p3d8kd0p.js} +1 -1
  10. package/bin/vm-hands/hands-worker-source-kddz4y15.js +2 -0
  11. package/bin/vm-hands/{index-k8kcz8a3.js → index-wrw65904.js} +35 -35
  12. package/bin/vm-hands/install-receipt-ysa70fvh.js +2 -0
  13. package/bin/vm-hands/local-automation-7nc6cgjp.js +2 -0
  14. package/bin/vm-hands/local-capabilities-5f36fr9x.js +2 -0
  15. package/bin/vm-hands/local-desktop-users-cppjjr81.js +2 -0
  16. package/bin/vm-hands/local-display-mac-0qz3b627.js +2 -0
  17. package/bin/vm-hands/local-display-session-zg4dpnf1.js +2 -0
  18. package/bin/vm-hands/local-display-video-remg1c30.js +2 -0
  19. package/bin/vm-hands/local-managed-process-gjc8gvgb.js +2 -0
  20. package/bin/vm-hands/local-pty-session-rpk05ap5.js +2 -0
  21. package/bin/vm-hands/managed-runtime-f85h6h7f.js +2 -0
  22. package/bin/vm-hands/network-contract-trkxqc0w.js +2 -0
  23. package/bin/vm-hands/package-xqbhdf15.js +2 -0
  24. package/bin/vm-hands/permissions-bhbnb1bp.js +2 -0
  25. package/bin/vm-hands/reason-hands-protocol-xn3ddz70.js +2 -0
  26. package/bin/vm-hands/serve-service-58ea9cwx.js +2 -0
  27. package/bin/vm-hands/status-z9r8nq3y.js +10 -0
  28. package/bin/vm-hands/version-p0g28erd.js +2 -0
  29. package/bin/vm-hands/{vm-hands-entry-lite-bdhjpv7g.js → vm-hands-entry-lite-21qpxvt8.js} +2 -2
  30. package/bin/vm-hands/vm-hands-entry-lite-2nkj0dpx.js +539 -0
  31. package/bin/vm-hands/vm-hands-entry-lite-2wzsnnsp.js +3 -0
  32. package/bin/vm-hands/{vm-hands-entry-lite-8t9xssf9.js → vm-hands-entry-lite-3krzmhkk.js} +2 -2
  33. package/bin/vm-hands/{vm-hands-entry-lite-k278g9kj.js → vm-hands-entry-lite-4vks5phw.js} +5 -5
  34. package/bin/vm-hands/{vm-hands-entry-lite-1cwqa4jr.js → vm-hands-entry-lite-50zbqwkv.js} +2 -2
  35. package/bin/vm-hands/{vm-hands-entry-lite-1rrb66r9.js → vm-hands-entry-lite-5dtfehjv.js} +2 -2
  36. package/bin/vm-hands/{vm-hands-entry-lite-6aeea05q.js → vm-hands-entry-lite-60pg3wxj.js} +2 -2
  37. package/bin/vm-hands/{vm-hands-entry-lite-9ay6f56v.js → vm-hands-entry-lite-6c67a3jc.js} +2 -2
  38. package/bin/vm-hands/{vm-hands-entry-lite-txn44020.js → vm-hands-entry-lite-6wt5ja1k.js} +2 -2
  39. package/bin/vm-hands/{vm-hands-entry-lite-zg36myyf.js → vm-hands-entry-lite-8r31b0ps.js} +4 -4
  40. package/bin/vm-hands/vm-hands-entry-lite-ah6fwqxp.js +128 -0
  41. package/bin/vm-hands/{vm-hands-entry-lite-ckv17tn8.js → vm-hands-entry-lite-aj139v8j.js} +2 -2
  42. package/bin/vm-hands/{vm-hands-entry-lite-907pa7f9.js → vm-hands-entry-lite-avc65bd7.js} +6 -6
  43. package/bin/vm-hands/{vm-hands-entry-lite-9c95p6n9.js → vm-hands-entry-lite-beyyy1gz.js} +37 -37
  44. package/bin/vm-hands/{vm-hands-entry-lite-ab2m9erf.js → vm-hands-entry-lite-bx5zy5bd.js} +1 -1
  45. package/bin/vm-hands/{vm-hands-entry-lite-pgb514h0.js → vm-hands-entry-lite-dk79tnax.js} +2 -2
  46. package/bin/vm-hands/vm-hands-entry-lite-ec9jemny.js +5 -0
  47. package/bin/vm-hands/{vm-hands-entry-lite-gvwdy3rf.js → vm-hands-entry-lite-fbhqfzbq.js} +3 -3
  48. package/bin/vm-hands/{vm-hands-entry-lite-t7an5zg2.js → vm-hands-entry-lite-fcvf8md1.js} +2 -2
  49. package/bin/vm-hands/{vm-hands-entry-lite-qysyf65v.js → vm-hands-entry-lite-g4zd2d5n.js} +1 -1
  50. package/bin/vm-hands/{vm-hands-entry-lite-0xrsph3r.js → vm-hands-entry-lite-hbs3tpdg.js} +2 -2
  51. package/bin/vm-hands/{vm-hands-entry-lite-f5e3dbgk.js → vm-hands-entry-lite-hk6trmwa.js} +3 -3
  52. package/bin/vm-hands/{vm-hands-entry-lite-2hvbgp1n.js → vm-hands-entry-lite-hn76pcgk.js} +5 -5
  53. package/bin/vm-hands/vm-hands-entry-lite-j43nqe8y.js +452 -0
  54. package/bin/vm-hands/{vm-hands-entry-lite-89z488gz.js → vm-hands-entry-lite-jev771b3.js} +2 -2
  55. package/bin/vm-hands/{vm-hands-entry-lite-eqgj4acy.js → vm-hands-entry-lite-jzz73e3f.js} +10 -10
  56. package/bin/vm-hands/vm-hands-entry-lite-m8nqnd9j.js +126 -0
  57. package/bin/vm-hands/vm-hands-entry-lite-mmdwr0mf.js +2 -0
  58. package/bin/vm-hands/{vm-hands-entry-lite-2wgdvb15.js → vm-hands-entry-lite-nefcet81.js} +2 -2
  59. package/bin/vm-hands/{vm-hands-entry-lite-hj8n59y9.js → vm-hands-entry-lite-np07qyeq.js} +2 -2
  60. package/bin/vm-hands/{vm-hands-entry-lite-1rtkf2xm.js → vm-hands-entry-lite-nzmkyezg.js} +2 -2
  61. package/bin/vm-hands/{vm-hands-entry-lite-q0k6kx6d.js → vm-hands-entry-lite-pf5qtbj5.js} +4 -4
  62. package/bin/vm-hands/{vm-hands-entry-lite-qxchbbew.js → vm-hands-entry-lite-ppmvge7n.js} +5 -5
  63. package/bin/vm-hands/{vm-hands-entry-lite-m11j0f9q.js → vm-hands-entry-lite-rfz60hb3.js} +2 -2
  64. package/bin/vm-hands/vm-hands-entry-lite-s3cg1dsk.js +52 -0
  65. package/bin/vm-hands/vm-hands-entry-lite-s4bharcb.js +9 -0
  66. package/bin/vm-hands/{vm-hands-entry-lite-88swf2qr.js → vm-hands-entry-lite-s5qkb1fk.js} +3 -3
  67. package/bin/vm-hands/{vm-hands-entry-lite-cc2tgsqp.js → vm-hands-entry-lite-stmbekq0.js} +16 -16
  68. package/bin/vm-hands/{vm-hands-entry-lite-kq0qmsw8.js → vm-hands-entry-lite-svvysppj.js} +4 -4
  69. package/bin/vm-hands/{vm-hands-entry-lite-22kfyvnk.js → vm-hands-entry-lite-tdgtpx8e.js} +1 -1
  70. package/bin/vm-hands/{vm-hands-entry-lite-b885gwfh.js → vm-hands-entry-lite-vpz54vwj.js} +6 -6
  71. package/bin/vm-hands/vm-hands-entry-lite-w8w451gj.js +4 -0
  72. package/bin/vm-hands/{vm-hands-entry-lite-09m2cdkw.js → vm-hands-entry-lite-wx4ax7wg.js} +3 -3
  73. package/bin/vm-hands/vm-hands-entry-lite-yretc2th.js +3 -0
  74. package/bin/vm-hands/vm-hands-entry-lite-z76nfb19.js +3 -0
  75. package/bin/vm-hands/vm-hands-entry-lite-zp6naptr.js +3 -0
  76. package/bin/vm-hands/vm-hands-entry-lite.js +2 -2
  77. package/bin/vm-hands/vm-hands-executor-73b49jkg.js +11 -0
  78. package/bin/vm-hands/vm-hands-op-runner-ef9ts9c6.js +2 -0
  79. package/bin/vm-hands/vm-hands-runtime-8z6rx1fj.js +4 -0
  80. package/bin/vm-hands/worker-preview-readiness-w62n91kr.js +2 -0
  81. package/bin/vm-hands/worker-sandbox-2r5nseff.js +2 -0
  82. package/package.json +1 -1
  83. package/bin/vm-hands/api-cjv8m2zy.js +0 -2
  84. package/bin/vm-hands/api-credentials-m5akr9fv.js +0 -2
  85. package/bin/vm-hands/connect-cli-d60gmgnx.js +0 -2
  86. package/bin/vm-hands/custom-endpoint-device-dkqb4rqy.js +0 -2
  87. package/bin/vm-hands/desktop-account-5v7x0ajx.js +0 -2
  88. package/bin/vm-hands/device-workspace-p9q9dckg.js +0 -2
  89. package/bin/vm-hands/hands-worker-source-cgrpm21b.js +0 -2
  90. package/bin/vm-hands/install-receipt-7vt2y2vh.js +0 -2
  91. package/bin/vm-hands/local-automation-4htjhv65.js +0 -2
  92. package/bin/vm-hands/local-capabilities-c04tbapa.js +0 -2
  93. package/bin/vm-hands/local-desktop-users-q886k0mm.js +0 -2
  94. package/bin/vm-hands/local-display-mac-w85956f1.js +0 -2
  95. package/bin/vm-hands/local-display-session-pkz7a5q9.js +0 -2
  96. package/bin/vm-hands/local-pty-session-5f50sqq0.js +0 -2
  97. package/bin/vm-hands/managed-runtime-ppypxbh9.js +0 -2
  98. package/bin/vm-hands/network-contract-9x9kc5vv.js +0 -2
  99. package/bin/vm-hands/package-78fkast4.js +0 -2
  100. package/bin/vm-hands/permissions-xt02c6dh.js +0 -2
  101. package/bin/vm-hands/reason-hands-protocol-2tnghj3b.js +0 -2
  102. package/bin/vm-hands/serve-service-wanptaqv.js +0 -2
  103. package/bin/vm-hands/status-gt7c4ke0.js +0 -10
  104. package/bin/vm-hands/version-bq5j7cqg.js +0 -2
  105. package/bin/vm-hands/vm-hands-entry-lite-2wvsyggd.js +0 -540
  106. package/bin/vm-hands/vm-hands-entry-lite-463m6ejk.js +0 -458
  107. package/bin/vm-hands/vm-hands-entry-lite-8ns59paz.js +0 -3
  108. package/bin/vm-hands/vm-hands-entry-lite-ewwx4fr3.js +0 -250
  109. package/bin/vm-hands/vm-hands-entry-lite-grtycq6y.js +0 -52
  110. package/bin/vm-hands/vm-hands-entry-lite-pmcz7j7t.js +0 -3
  111. package/bin/vm-hands/vm-hands-entry-lite-qq9w7wq6.js +0 -3
  112. package/bin/vm-hands/vm-hands-entry-lite-rwxbhwky.js +0 -2
  113. package/bin/vm-hands/vm-hands-entry-lite-vrqzr15t.js +0 -3
  114. package/bin/vm-hands/vm-hands-executor-7k9z9988.js +0 -11
  115. package/bin/vm-hands/vm-hands-op-runner-n8p81rwm.js +0 -2
  116. package/bin/vm-hands/vm-hands-runtime-bqsz7h0h.js +0 -4
  117. package/bin/vm-hands/worker-sandbox-smqj3mbe.js +0 -2
@@ -1,3 +0,0 @@
1
- // @bun
2
- function Ie(n){return Function("return ("+n+")")()}
3
- export{Ie};
@@ -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
- function _e(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)}
3
- export{_e};
@@ -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,2 +0,0 @@
1
- // @bun
2
- import{Ht}from"./vm-hands-entry-lite-txn44020.js";var ct=Ht.version;export{ct};
@@ -1,3 +0,0 @@
1
- // @bun
2
- import{Ni,Li}from"./vm-hands-entry-lite-b885gwfh.js";function qo(o=process.platform){if(Ni(),o==="linux"||o==="win32")Li("strict")}
3
- export{qo};
@@ -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};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Yt,zo}from"./vm-hands-entry-lite-qq9w7wq6.js";export{Yt as VM_HANDS_OP_RUNNER_PERSON_ARG,zo as runVmHandsOpRunner};