arise-browser 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/README.md +247 -0
- package/deploy/neko/CONTEXT.md +37 -0
- package/deploy/neko/arise-browser.service +13 -0
- package/deploy/neko/neko.yaml +12 -0
- package/deploy/neko/openbox.xml +763 -0
- package/deploy/neko/policies.json +28 -0
- package/deploy/neko/pulseaudio.pa +16 -0
- package/deploy/neko/setup.sh +308 -0
- package/deploy/neko/xorg.conf +118 -0
- package/dist/bin/arise-browser.d.ts +26 -0
- package/dist/bin/arise-browser.d.ts.map +1 -0
- package/dist/bin/arise-browser.js +224 -0
- package/dist/bin/arise-browser.js.map +1 -0
- package/dist/src/browser/action-executor.d.ts +98 -0
- package/dist/src/browser/action-executor.d.ts.map +1 -0
- package/dist/src/browser/action-executor.js +2726 -0
- package/dist/src/browser/action-executor.js.map +1 -0
- package/dist/src/browser/behavior-recorder.d.ts +61 -0
- package/dist/src/browser/behavior-recorder.d.ts.map +1 -0
- package/dist/src/browser/behavior-recorder.js +442 -0
- package/dist/src/browser/behavior-recorder.js.map +1 -0
- package/dist/src/browser/browser-session.d.ts +202 -0
- package/dist/src/browser/browser-session.d.ts.map +1 -0
- package/dist/src/browser/browser-session.js +1647 -0
- package/dist/src/browser/browser-session.js.map +1 -0
- package/dist/src/browser/config.d.ts +43 -0
- package/dist/src/browser/config.d.ts.map +1 -0
- package/dist/src/browser/config.js +59 -0
- package/dist/src/browser/config.js.map +1 -0
- package/dist/src/browser/page-snapshot.d.ts +38 -0
- package/dist/src/browser/page-snapshot.d.ts.map +1 -0
- package/dist/src/browser/page-snapshot.js +241 -0
- package/dist/src/browser/page-snapshot.js.map +1 -0
- package/dist/src/browser/scripts/behavior_tracker.js +424 -0
- package/dist/src/browser/scripts/unified_analyzer.js +1576 -0
- package/dist/src/index.d.ts +15 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +15 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lock.d.ts +11 -0
- package/dist/src/lock.d.ts.map +1 -0
- package/dist/src/lock.js +47 -0
- package/dist/src/lock.js.map +1 -0
- package/dist/src/logger.d.ts +17 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +29 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/server/middleware/auth.d.ts +6 -0
- package/dist/src/server/middleware/auth.d.ts.map +1 -0
- package/dist/src/server/middleware/auth.js +24 -0
- package/dist/src/server/middleware/auth.js.map +1 -0
- package/dist/src/server/route-utils.d.ts +15 -0
- package/dist/src/server/route-utils.d.ts.map +1 -0
- package/dist/src/server/route-utils.js +33 -0
- package/dist/src/server/route-utils.js.map +1 -0
- package/dist/src/server/routes/action.d.ts +5 -0
- package/dist/src/server/routes/action.d.ts.map +1 -0
- package/dist/src/server/routes/action.js +69 -0
- package/dist/src/server/routes/action.js.map +1 -0
- package/dist/src/server/routes/actions.d.ts +3 -0
- package/dist/src/server/routes/actions.d.ts.map +1 -0
- package/dist/src/server/routes/actions.js +53 -0
- package/dist/src/server/routes/actions.js.map +1 -0
- package/dist/src/server/routes/cookies.d.ts +3 -0
- package/dist/src/server/routes/cookies.d.ts.map +1 -0
- package/dist/src/server/routes/cookies.js +27 -0
- package/dist/src/server/routes/cookies.js.map +1 -0
- package/dist/src/server/routes/download.d.ts +3 -0
- package/dist/src/server/routes/download.d.ts.map +1 -0
- package/dist/src/server/routes/download.js +35 -0
- package/dist/src/server/routes/download.js.map +1 -0
- package/dist/src/server/routes/evaluate.d.ts +3 -0
- package/dist/src/server/routes/evaluate.d.ts.map +1 -0
- package/dist/src/server/routes/evaluate.js +27 -0
- package/dist/src/server/routes/evaluate.js.map +1 -0
- package/dist/src/server/routes/health.d.ts +3 -0
- package/dist/src/server/routes/health.d.ts.map +1 -0
- package/dist/src/server/routes/health.js +11 -0
- package/dist/src/server/routes/health.js.map +1 -0
- package/dist/src/server/routes/navigate.d.ts +3 -0
- package/dist/src/server/routes/navigate.d.ts.map +1 -0
- package/dist/src/server/routes/navigate.js +36 -0
- package/dist/src/server/routes/navigate.js.map +1 -0
- package/dist/src/server/routes/page-model.d.ts +3 -0
- package/dist/src/server/routes/page-model.d.ts.map +1 -0
- package/dist/src/server/routes/page-model.js +22 -0
- package/dist/src/server/routes/page-model.js.map +1 -0
- package/dist/src/server/routes/pdf.d.ts +3 -0
- package/dist/src/server/routes/pdf.d.ts.map +1 -0
- package/dist/src/server/routes/pdf.js +20 -0
- package/dist/src/server/routes/pdf.js.map +1 -0
- package/dist/src/server/routes/recording.d.ts +5 -0
- package/dist/src/server/routes/recording.d.ts.map +1 -0
- package/dist/src/server/routes/recording.js +217 -0
- package/dist/src/server/routes/recording.js.map +1 -0
- package/dist/src/server/routes/screenshot.d.ts +3 -0
- package/dist/src/server/routes/screenshot.d.ts.map +1 -0
- package/dist/src/server/routes/screenshot.js +32 -0
- package/dist/src/server/routes/screenshot.js.map +1 -0
- package/dist/src/server/routes/snapshot.d.ts +3 -0
- package/dist/src/server/routes/snapshot.d.ts.map +1 -0
- package/dist/src/server/routes/snapshot.js +454 -0
- package/dist/src/server/routes/snapshot.js.map +1 -0
- package/dist/src/server/routes/tab-lock.d.ts +3 -0
- package/dist/src/server/routes/tab-lock.d.ts.map +1 -0
- package/dist/src/server/routes/tab-lock.js +30 -0
- package/dist/src/server/routes/tab-lock.js.map +1 -0
- package/dist/src/server/routes/tab.d.ts +3 -0
- package/dist/src/server/routes/tab.d.ts.map +1 -0
- package/dist/src/server/routes/tab.js +47 -0
- package/dist/src/server/routes/tab.js.map +1 -0
- package/dist/src/server/routes/tabs.d.ts +3 -0
- package/dist/src/server/routes/tabs.d.ts.map +1 -0
- package/dist/src/server/routes/tabs.js +13 -0
- package/dist/src/server/routes/tabs.js.map +1 -0
- package/dist/src/server/routes/text.d.ts +3 -0
- package/dist/src/server/routes/text.d.ts.map +1 -0
- package/dist/src/server/routes/text.js +20 -0
- package/dist/src/server/routes/text.js.map +1 -0
- package/dist/src/server/routes/upload.d.ts +3 -0
- package/dist/src/server/routes/upload.d.ts.map +1 -0
- package/dist/src/server/routes/upload.js +38 -0
- package/dist/src/server/routes/upload.js.map +1 -0
- package/dist/src/server/server.d.ts +7 -0
- package/dist/src/server/server.d.ts.map +1 -0
- package/dist/src/server/server.js +69 -0
- package/dist/src/server/server.js.map +1 -0
- package/dist/src/types/index.d.ts +125 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +5 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/virtual-display/manager.d.ts +37 -0
- package/dist/src/virtual-display/manager.d.ts.map +1 -0
- package/dist/src/virtual-display/manager.js +229 -0
- package/dist/src/virtual-display/manager.js.map +1 -0
- package/dist/src/virtual-display/process-runner.d.ts +43 -0
- package/dist/src/virtual-display/process-runner.d.ts.map +1 -0
- package/dist/src/virtual-display/process-runner.js +174 -0
- package/dist/src/virtual-display/process-runner.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +57 -0
- package/plugin/openclaw.plugin.json +148 -0
- package/skill/arise-browser/SKILL.md +275 -0
- package/skill/arise-browser/TRUST.md +42 -0
- package/skill/arise-browser/references/api.md +198 -0
- package/src/browser/scripts/behavior_tracker.js +424 -0
- package/src/browser/scripts/unified_analyzer.js +1576 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"AutofillAddressEnabled": false,
|
|
3
|
+
"AutofillCreditCardEnabled": false,
|
|
4
|
+
"BrowserSignin": 0,
|
|
5
|
+
"DefaultNotificationsSetting": 2,
|
|
6
|
+
"DeveloperToolsAvailability": 0,
|
|
7
|
+
"EditBookmarksEnabled": false,
|
|
8
|
+
"FullscreenAllowed": true,
|
|
9
|
+
"IncognitoModeAvailability": 1,
|
|
10
|
+
"SyncDisabled": true,
|
|
11
|
+
"AutoplayAllowed": true,
|
|
12
|
+
"BrowserAddPersonEnabled": false,
|
|
13
|
+
"BrowserGuestModeEnabled": false,
|
|
14
|
+
"DefaultPopupsSetting": 1,
|
|
15
|
+
"DownloadRestrictions": 3,
|
|
16
|
+
"VideoCaptureAllowed": true,
|
|
17
|
+
"AllowFileSelectionDialogs": false,
|
|
18
|
+
"PromptForDownloadLocation": false,
|
|
19
|
+
"BookmarkBarEnabled": false,
|
|
20
|
+
"PasswordManagerEnabled": false,
|
|
21
|
+
"URLAllowlist": [
|
|
22
|
+
"file:///home/neko/Downloads"
|
|
23
|
+
],
|
|
24
|
+
"URLBlocklist": [
|
|
25
|
+
"file://*",
|
|
26
|
+
"chrome://policy"
|
|
27
|
+
]
|
|
28
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/pulseaudio -nF
|
|
2
|
+
|
|
3
|
+
### Create virtual output device sink
|
|
4
|
+
load-module module-null-sink sink_name=audio_output sink_properties=device.description="Virtual_Audio_Output"
|
|
5
|
+
|
|
6
|
+
### Create virtual input device sink
|
|
7
|
+
load-module module-null-sink sink_name=audio_input sink_properties=device.description="Virtual_Audio_Input"
|
|
8
|
+
|
|
9
|
+
### Create a virtual audio source linked up to the virtual input device
|
|
10
|
+
load-module module-virtual-source source_name=microphone master=audio_input.monitor source_properties=device.description="Virtual_Microphone"
|
|
11
|
+
|
|
12
|
+
### Allow pulse audio to be accessed via TCP (from localhost only), to allow other users to access the virtual devices
|
|
13
|
+
load-module module-native-protocol-unix socket=/tmp/pulseaudio.socket auth-anonymous=1
|
|
14
|
+
|
|
15
|
+
### Make sure we always have a sink around, even if it is a null sink.
|
|
16
|
+
load-module module-always-sink
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# AriseBrowser + Neko dependency installer
|
|
4
|
+
# Supports: Debian/Ubuntu (apt) and CentOS/RHEL/Fedora (dnf/yum)
|
|
5
|
+
#
|
|
6
|
+
# Usage: sudo bash setup.sh
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
set -euo pipefail
|
|
10
|
+
|
|
11
|
+
NEKO_VERSION="${NEKO_VERSION:-v3.3.0}"
|
|
12
|
+
NODE_MAJOR="${NODE_MAJOR:-20}"
|
|
13
|
+
|
|
14
|
+
# Colors
|
|
15
|
+
RED='\033[0;31m'
|
|
16
|
+
GREEN='\033[0;32m'
|
|
17
|
+
YELLOW='\033[1;33m'
|
|
18
|
+
NC='\033[0m'
|
|
19
|
+
|
|
20
|
+
log() { echo -e "${GREEN}[+]${NC} $*"; }
|
|
21
|
+
warn() { echo -e "${YELLOW}[!]${NC} $*"; }
|
|
22
|
+
err() { echo -e "${RED}[x]${NC} $*" >&2; }
|
|
23
|
+
|
|
24
|
+
if [[ $EUID -ne 0 ]]; then
|
|
25
|
+
err "This script must be run as root (use sudo)"
|
|
26
|
+
exit 1
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
# Detect package manager
|
|
30
|
+
if command -v apt-get &>/dev/null; then
|
|
31
|
+
PKG_MGR="apt"
|
|
32
|
+
elif command -v dnf &>/dev/null; then
|
|
33
|
+
PKG_MGR="dnf"
|
|
34
|
+
elif command -v yum &>/dev/null; then
|
|
35
|
+
PKG_MGR="yum"
|
|
36
|
+
else
|
|
37
|
+
err "Unsupported package manager. Need apt, dnf, or yum."
|
|
38
|
+
exit 1
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
log "Detected package manager: ${PKG_MGR}"
|
|
42
|
+
|
|
43
|
+
# ─── System packages ───────────────────────────────────────────────
|
|
44
|
+
|
|
45
|
+
install_apt() {
|
|
46
|
+
apt-get update -qq
|
|
47
|
+
|
|
48
|
+
# Xvfb + X11
|
|
49
|
+
apt-get install -y -qq \
|
|
50
|
+
xvfb \
|
|
51
|
+
xserver-xorg-video-dummy \
|
|
52
|
+
x11-xserver-utils \
|
|
53
|
+
xdotool
|
|
54
|
+
|
|
55
|
+
# PulseAudio
|
|
56
|
+
apt-get install -y -qq pulseaudio
|
|
57
|
+
|
|
58
|
+
# Openbox window manager
|
|
59
|
+
apt-get install -y -qq openbox
|
|
60
|
+
|
|
61
|
+
# GStreamer (full suite for Neko)
|
|
62
|
+
apt-get install -y -qq \
|
|
63
|
+
libgstreamer1.0-0 \
|
|
64
|
+
gstreamer1.0-plugins-base \
|
|
65
|
+
gstreamer1.0-plugins-good \
|
|
66
|
+
gstreamer1.0-plugins-bad \
|
|
67
|
+
gstreamer1.0-plugins-ugly \
|
|
68
|
+
gstreamer1.0-pulseaudio \
|
|
69
|
+
gstreamer1.0-x
|
|
70
|
+
|
|
71
|
+
# CJK + emoji fonts
|
|
72
|
+
apt-get install -y -qq \
|
|
73
|
+
fonts-noto-cjk \
|
|
74
|
+
fonts-noto-color-emoji \
|
|
75
|
+
fonts-liberation
|
|
76
|
+
|
|
77
|
+
# Misc
|
|
78
|
+
apt-get install -y -qq \
|
|
79
|
+
curl \
|
|
80
|
+
wget \
|
|
81
|
+
ca-certificates \
|
|
82
|
+
gnupg
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
install_rpm() {
|
|
86
|
+
local mgr="$1"
|
|
87
|
+
|
|
88
|
+
# Enable EPEL
|
|
89
|
+
if ! rpm -q epel-release &>/dev/null; then
|
|
90
|
+
$mgr install -y epel-release
|
|
91
|
+
fi
|
|
92
|
+
|
|
93
|
+
# Enable RPM Fusion (for GStreamer ugly plugins)
|
|
94
|
+
if ! rpm -q rpmfusion-free-release &>/dev/null; then
|
|
95
|
+
$mgr install -y \
|
|
96
|
+
"https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm" || true
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
# Xvfb + X11
|
|
100
|
+
$mgr install -y \
|
|
101
|
+
xorg-x11-server-Xvfb \
|
|
102
|
+
xorg-x11-drv-dummy \
|
|
103
|
+
xorg-x11-utils \
|
|
104
|
+
xdotool
|
|
105
|
+
|
|
106
|
+
# PulseAudio
|
|
107
|
+
$mgr install -y pulseaudio pulseaudio-utils
|
|
108
|
+
|
|
109
|
+
# Openbox
|
|
110
|
+
$mgr install -y openbox
|
|
111
|
+
|
|
112
|
+
# GStreamer
|
|
113
|
+
$mgr install -y \
|
|
114
|
+
gstreamer1 \
|
|
115
|
+
gstreamer1-plugins-base \
|
|
116
|
+
gstreamer1-plugins-good \
|
|
117
|
+
gstreamer1-plugins-bad-free \
|
|
118
|
+
gstreamer1-plugins-ugly \
|
|
119
|
+
gstreamer1-plugins-good-extras
|
|
120
|
+
|
|
121
|
+
# CJK + emoji fonts
|
|
122
|
+
$mgr install -y \
|
|
123
|
+
google-noto-sans-cjk-fonts \
|
|
124
|
+
google-noto-emoji-color-fonts \
|
|
125
|
+
liberation-fonts
|
|
126
|
+
|
|
127
|
+
# Misc
|
|
128
|
+
$mgr install -y \
|
|
129
|
+
curl \
|
|
130
|
+
wget \
|
|
131
|
+
ca-certificates
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
case "$PKG_MGR" in
|
|
135
|
+
apt) install_apt ;;
|
|
136
|
+
dnf) install_rpm dnf ;;
|
|
137
|
+
yum) install_rpm yum ;;
|
|
138
|
+
esac
|
|
139
|
+
|
|
140
|
+
log "System packages installed"
|
|
141
|
+
|
|
142
|
+
# ─── Google Chrome ─────────────────────────────────────────────────
|
|
143
|
+
|
|
144
|
+
if ! command -v google-chrome &>/dev/null && ! command -v google-chrome-stable &>/dev/null; then
|
|
145
|
+
if [[ "$NEKO_ARCH" == "arm64" ]]; then
|
|
146
|
+
# Google Chrome has no ARM64 Linux builds — install Chromium instead
|
|
147
|
+
log "Installing Chromium (ARM64, Google Chrome not available)..."
|
|
148
|
+
if [[ "$PKG_MGR" == "apt" ]]; then
|
|
149
|
+
apt-get install -y -qq chromium-browser || apt-get install -y -qq chromium
|
|
150
|
+
else
|
|
151
|
+
$PKG_MGR install -y chromium
|
|
152
|
+
fi
|
|
153
|
+
log "Chromium installed"
|
|
154
|
+
else
|
|
155
|
+
log "Installing Google Chrome..."
|
|
156
|
+
if [[ "$PKG_MGR" == "apt" ]]; then
|
|
157
|
+
wget -q -O /tmp/google-chrome.deb \
|
|
158
|
+
"https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"
|
|
159
|
+
apt-get install -y -qq /tmp/google-chrome.deb
|
|
160
|
+
rm -f /tmp/google-chrome.deb
|
|
161
|
+
else
|
|
162
|
+
cat > /etc/yum.repos.d/google-chrome.repo <<'REPO'
|
|
163
|
+
[google-chrome]
|
|
164
|
+
name=google-chrome
|
|
165
|
+
baseurl=https://dl.google.com/linux/chrome/rpm/stable/x86_64
|
|
166
|
+
enabled=1
|
|
167
|
+
gpgcheck=1
|
|
168
|
+
gpgkey=https://dl.google.com/linux/linux_signing_key.pub
|
|
169
|
+
REPO
|
|
170
|
+
$PKG_MGR install -y google-chrome-stable
|
|
171
|
+
fi
|
|
172
|
+
log "Google Chrome installed"
|
|
173
|
+
fi
|
|
174
|
+
else
|
|
175
|
+
log "Google Chrome/Chromium already installed"
|
|
176
|
+
fi
|
|
177
|
+
|
|
178
|
+
# ─── Chrome policies ──────────────────────────────────────────────
|
|
179
|
+
|
|
180
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
181
|
+
POLICIES_SRC="${SCRIPT_DIR}/policies.json"
|
|
182
|
+
POLICIES_DST="/etc/opt/chrome/policies/managed/arise-browser.json"
|
|
183
|
+
|
|
184
|
+
if [[ -f "$POLICIES_SRC" ]]; then
|
|
185
|
+
mkdir -p "$(dirname "$POLICIES_DST")"
|
|
186
|
+
cp "$POLICIES_SRC" "$POLICIES_DST"
|
|
187
|
+
log "Chrome policies installed to ${POLICIES_DST}"
|
|
188
|
+
else
|
|
189
|
+
warn "policies.json not found at ${POLICIES_SRC}, skipping"
|
|
190
|
+
fi
|
|
191
|
+
|
|
192
|
+
# ─── Node.js ──────────────────────────────────────────────────────
|
|
193
|
+
|
|
194
|
+
if ! command -v node &>/dev/null; then
|
|
195
|
+
log "Installing Node.js ${NODE_MAJOR}..."
|
|
196
|
+
|
|
197
|
+
if [[ "$PKG_MGR" == "apt" ]]; then
|
|
198
|
+
curl -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash -
|
|
199
|
+
apt-get install -y -qq nodejs
|
|
200
|
+
else
|
|
201
|
+
curl -fsSL https://rpm.nodesource.com/setup_${NODE_MAJOR}.x | bash -
|
|
202
|
+
$PKG_MGR install -y nodejs
|
|
203
|
+
fi
|
|
204
|
+
|
|
205
|
+
log "Node.js installed: $(node --version)"
|
|
206
|
+
else
|
|
207
|
+
log "Node.js already installed: $(node --version)"
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
# ─── Neko server binary ──────────────────────────────────────────
|
|
211
|
+
|
|
212
|
+
NEKO_BIN="/usr/local/bin/neko"
|
|
213
|
+
NEKO_WWW="/usr/local/share/neko/www"
|
|
214
|
+
|
|
215
|
+
# Detect arch early so it's available for all sections
|
|
216
|
+
ARCH="$(uname -m)"
|
|
217
|
+
case "$ARCH" in
|
|
218
|
+
x86_64) NEKO_ARCH="amd64" ;;
|
|
219
|
+
aarch64) NEKO_ARCH="arm64" ;;
|
|
220
|
+
*) err "Unsupported architecture: $ARCH"; exit 1 ;;
|
|
221
|
+
esac
|
|
222
|
+
|
|
223
|
+
if [[ ! -f "$NEKO_BIN" ]]; then
|
|
224
|
+
log "Installing Neko server ${NEKO_VERSION}..."
|
|
225
|
+
|
|
226
|
+
NEKO_URL="https://github.com/m1k1o/neko/releases/download/${NEKO_VERSION}/server-${NEKO_ARCH}"
|
|
227
|
+
wget -q -O "$NEKO_BIN" "$NEKO_URL"
|
|
228
|
+
chmod +x "$NEKO_BIN"
|
|
229
|
+
|
|
230
|
+
log "Neko server installed to ${NEKO_BIN}"
|
|
231
|
+
else
|
|
232
|
+
log "Neko server already installed at ${NEKO_BIN}"
|
|
233
|
+
fi
|
|
234
|
+
|
|
235
|
+
# ─── Neko client static files ────────────────────────────────────
|
|
236
|
+
|
|
237
|
+
if [[ ! -d "$NEKO_WWW" ]]; then
|
|
238
|
+
log "Installing Neko client files..."
|
|
239
|
+
|
|
240
|
+
NEKO_CLIENT_URL="https://github.com/m1k1o/neko/releases/download/${NEKO_VERSION}/client.tar.gz"
|
|
241
|
+
mkdir -p "$NEKO_WWW"
|
|
242
|
+
wget -q -O /tmp/neko-client.tar.gz "$NEKO_CLIENT_URL"
|
|
243
|
+
tar -xzf /tmp/neko-client.tar.gz -C "$NEKO_WWW"
|
|
244
|
+
rm -f /tmp/neko-client.tar.gz
|
|
245
|
+
|
|
246
|
+
log "Neko client files installed to ${NEKO_WWW}"
|
|
247
|
+
else
|
|
248
|
+
log "Neko client files already at ${NEKO_WWW}"
|
|
249
|
+
fi
|
|
250
|
+
|
|
251
|
+
# ─── Neko X11 drivers ────────────────────────────────────────────
|
|
252
|
+
|
|
253
|
+
XORG_MODULES="/usr/lib/xorg/modules"
|
|
254
|
+
if [[ -d "$XORG_MODULES" ]]; then
|
|
255
|
+
NEKO_DRIVERS_URL="https://github.com/m1k1o/neko/releases/download/${NEKO_VERSION}/xf86-input-neko-${NEKO_ARCH}.tar.gz"
|
|
256
|
+
|
|
257
|
+
if [[ ! -f "${XORG_MODULES}/input/neko_drv.so" ]]; then
|
|
258
|
+
log "Installing Neko X11 input driver..."
|
|
259
|
+
wget -q -O /tmp/neko-drivers.tar.gz "$NEKO_DRIVERS_URL" || true
|
|
260
|
+
if [[ -f /tmp/neko-drivers.tar.gz ]]; then
|
|
261
|
+
tar -xzf /tmp/neko-drivers.tar.gz -C "$XORG_MODULES" || true
|
|
262
|
+
rm -f /tmp/neko-drivers.tar.gz
|
|
263
|
+
log "Neko X11 drivers installed"
|
|
264
|
+
else
|
|
265
|
+
warn "Could not download Neko X11 drivers (non-critical)"
|
|
266
|
+
fi
|
|
267
|
+
else
|
|
268
|
+
log "Neko X11 drivers already installed"
|
|
269
|
+
fi
|
|
270
|
+
fi
|
|
271
|
+
|
|
272
|
+
# ─── Playwright browser deps ─────────────────────────────────────
|
|
273
|
+
|
|
274
|
+
if command -v npx &>/dev/null; then
|
|
275
|
+
log "Installing Playwright Chromium dependencies..."
|
|
276
|
+
npx playwright install-deps chromium 2>/dev/null || warn "playwright install-deps skipped"
|
|
277
|
+
fi
|
|
278
|
+
|
|
279
|
+
# ─── System user ──────────────────────────────────────────────────
|
|
280
|
+
|
|
281
|
+
if ! id -u neko &>/dev/null; then
|
|
282
|
+
log "Creating 'neko' system user..."
|
|
283
|
+
useradd -r -m -s /bin/bash neko
|
|
284
|
+
usermod -aG audio,video neko
|
|
285
|
+
log "User 'neko' created"
|
|
286
|
+
else
|
|
287
|
+
log "User 'neko' already exists"
|
|
288
|
+
fi
|
|
289
|
+
|
|
290
|
+
# ─── Summary ──────────────────────────────────────────────────────
|
|
291
|
+
|
|
292
|
+
echo ""
|
|
293
|
+
log "Setup complete!"
|
|
294
|
+
echo ""
|
|
295
|
+
echo "Next steps:"
|
|
296
|
+
echo " 1. Deploy arise-browser to /opt/arise-browser/"
|
|
297
|
+
echo " 2. Install systemd service:"
|
|
298
|
+
echo " cp deploy/neko/arise-browser.service /etc/systemd/system/"
|
|
299
|
+
echo " systemctl daemon-reload"
|
|
300
|
+
echo " systemctl enable --now arise-browser"
|
|
301
|
+
echo ""
|
|
302
|
+
echo " Or run manually:"
|
|
303
|
+
echo " node dist/bin/arise-browser.js --virtual-display --port 9867 --host 0.0.0.0"
|
|
304
|
+
echo ""
|
|
305
|
+
echo "Ports:"
|
|
306
|
+
echo " - 9867 arise-browser API"
|
|
307
|
+
echo " - 6090 Neko WebRTC UI"
|
|
308
|
+
echo " - 52000-52100 WebRTC UDP"
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# This xorg configuration file is meant to be used by xpra
|
|
2
|
+
# to start a dummy X11 server.
|
|
3
|
+
# For details, please see:
|
|
4
|
+
# https://xpra.org/trac/wiki/Xdummy
|
|
5
|
+
|
|
6
|
+
Section "ServerFlags"
|
|
7
|
+
Option "DontVTSwitch" "true"
|
|
8
|
+
Option "AllowMouseOpenFail" "true"
|
|
9
|
+
Option "PciForceNone" "true"
|
|
10
|
+
Option "AutoEnableDevices" "false"
|
|
11
|
+
Option "AutoAddDevices" "false"
|
|
12
|
+
EndSection
|
|
13
|
+
|
|
14
|
+
Section "InputDevice"
|
|
15
|
+
Identifier "dummy_mouse"
|
|
16
|
+
Option "CorePointer" "true"
|
|
17
|
+
Driver "void"
|
|
18
|
+
EndSection
|
|
19
|
+
|
|
20
|
+
Section "InputDevice"
|
|
21
|
+
Identifier "dummy_keyboard"
|
|
22
|
+
Option "CoreKeyboard" "true"
|
|
23
|
+
Driver "void"
|
|
24
|
+
EndSection
|
|
25
|
+
|
|
26
|
+
Section "InputDevice"
|
|
27
|
+
Identifier "dummy_touchscreen"
|
|
28
|
+
Option "SendCoreEvents" "On"
|
|
29
|
+
Option "SocketName" "/tmp/xf86-input-neko.sock"
|
|
30
|
+
Driver "neko"
|
|
31
|
+
EndSection
|
|
32
|
+
|
|
33
|
+
Section "Device"
|
|
34
|
+
Identifier "dummy_videocard"
|
|
35
|
+
Driver "dummy"
|
|
36
|
+
Option "ConstantDPI" "true"
|
|
37
|
+
VideoRam 1024000
|
|
38
|
+
#VideoRam 512000
|
|
39
|
+
#VideoRam 256000
|
|
40
|
+
#VideoRam 192000
|
|
41
|
+
EndSection
|
|
42
|
+
|
|
43
|
+
Section "Monitor"
|
|
44
|
+
Identifier "dummy_monitor"
|
|
45
|
+
HorizSync 5.0 - 1000.0
|
|
46
|
+
VertRefresh 5.0 - 200.0
|
|
47
|
+
#This can be used to get a specific DPI, but only for the default resolution:
|
|
48
|
+
#DisplaySize 508 317
|
|
49
|
+
#NOTE: the highest modes will not work without increasing the VideoRam
|
|
50
|
+
# for the dummy video card.
|
|
51
|
+
# https://arachnoid.com/modelines/
|
|
52
|
+
|
|
53
|
+
# 1920x1080 @ 60.00 Hz (GTF) hsync: 67.08 kHz; pclk: 172.80 MHz
|
|
54
|
+
Modeline "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
|
|
55
|
+
# 1280x720 @ 60.00 Hz (GTF) hsync: 44.76 kHz; pclk: 74.48 MHz
|
|
56
|
+
Modeline "1280x720_60.00" 74.48 1280 1336 1472 1664 720 721 724 746 -HSync +Vsync
|
|
57
|
+
# 1152x648 @ 60.00 Hz (GTF) hsync: 40.26 kHz; pclk: 59.91 MHz
|
|
58
|
+
Modeline "1152x648_60.00" 59.91 1152 1200 1320 1488 648 649 652 671 -HSync +Vsync
|
|
59
|
+
# 1024x576 @ 60.00 Hz (GTF) hsync: 35.82 kHz; pclk: 47.00 MHz
|
|
60
|
+
Modeline "1024x576_60.00" 47.00 1024 1064 1168 1312 576 577 580 597 -HSync +Vsync
|
|
61
|
+
# 960x720 @ 60.00 Hz (GTF) hsync: 44.76 kHz; pclk: 55.86 MHz
|
|
62
|
+
Modeline "960x720_60.00" 55.86 960 1008 1104 1248 720 721 724 746 -HSync +Vsync
|
|
63
|
+
# 800x600 @ 60.00 Hz (GTF) hsync: 37.32 kHz; pclk: 38.22 MHz
|
|
64
|
+
Modeline "800x600_60.00" 38.22 800 832 912 1024 600 601 604 622 -HSync +Vsync
|
|
65
|
+
|
|
66
|
+
# 2560x1440 @ 30.00 Hz (GTF) hsync: 43.95 kHz; pclk: 146.27 MHz
|
|
67
|
+
Modeline "2560x1440_30.00" 146.27 2560 2680 2944 3328 1440 1441 1444 1465 -HSync +Vsync
|
|
68
|
+
# 1920x1080 @ 30.00 Hz (GTF) hsync: 32.97 kHz; pclk: 80.18 MHz
|
|
69
|
+
Modeline "1920x1080_30.00" 80.18 1920 1984 2176 2432 1080 1081 1084 1099 -HSync +Vsync
|
|
70
|
+
# 1368x768 @ 30.00 Hz (GTF) hsync: 23.46 kHz; pclk: 38.85 MHz
|
|
71
|
+
Modeline "1368x768_30.00" 38.85 1368 1376 1512 1656 768 769 772 782 -HSync +Vsync
|
|
72
|
+
# 1280x720 @ 30.00 Hz (GTF) hsync: 21.99 kHz; pclk: 33.78 MHz
|
|
73
|
+
Modeline "1280x720_30.00" 33.78 1280 1288 1408 1536 720 721 724 733 -HSync +Vsync
|
|
74
|
+
# 1152x648 @ 30.00 Hz (GTF) hsync: 19.80 kHz; pclk: 26.93 MHz
|
|
75
|
+
Modeline "1152x648_30.00" 26.93 1152 1144 1256 1360 648 649 652 660 -HSync +Vsync
|
|
76
|
+
# 1024x576 @ 30.00 Hz (GTF) hsync: 17.61 kHz; pclk: 20.85 MHz
|
|
77
|
+
Modeline "1024x576_30.00" 20.85 1024 1008 1104 1184 576 577 580 587 -HSync +Vsync
|
|
78
|
+
# 960x720 @ 30.00 Hz (GTF) hsync: 21.99 kHz; pclk: 25.33 MHz
|
|
79
|
+
Modeline "960x720_30.00" 25.33 960 960 1056 1152 720 721 724 733 -HSync +Vsync
|
|
80
|
+
# 800x600 @ 30.00 Hz (GTF) hsync: 18.33 kHz; pclk: 17.01 MHz
|
|
81
|
+
Modeline "800x600_30.00" 17.01 800 792 864 928 600 601 604 611 -HSync +Vsync
|
|
82
|
+
|
|
83
|
+
# 800x1600 @ 30.00 Hz (GTF) hsync: 48.84 kHz; pclk: 51.58 MHz
|
|
84
|
+
Modeline "800x1600_30.00" 51.58 800 840 928 1056 1600 1601 1604 1628 -HSync +Vsync
|
|
85
|
+
|
|
86
|
+
# 3840x2160 @ 25.00 Hz (GTF) hsync: 54.77 kHz; pclk: 278.70 MHz
|
|
87
|
+
Modeline "3840x2160_25.00" 278.70 3840 4056 4464 5088 2160 2161 2164 2191 -HSync +Vsync
|
|
88
|
+
# 2560x1440 @ 24.96 Hz (CVT) hsync: 36.53 kHz; pclk: 119.25 MHz
|
|
89
|
+
Modeline "2560x1440_25.00" 119.25 2560 2656 2912 3264 1440 1443 1448 1464 -Hsync +Vsync
|
|
90
|
+
# 1920x1080 @ 25.00 Hz (GTF) hsync: 27.40 kHz; pclk: 64.88 MHz
|
|
91
|
+
Modeline "1920x1080_25.00" 64.88 1920 1952 2144 2368 1080 1081 1084 1096 -HSync +Vsync
|
|
92
|
+
# 1600x900 @ 24.97 Hz (CVT) hsync: 22.88 kHz; pclk: 45.75 MHz
|
|
93
|
+
Modeline "1600x900_25.00" 45.75 1600 1648 1800 2000 900 903 908 916 -Hsync +Vsync
|
|
94
|
+
# 1368x768 @ 24.89 Hz (CVT) hsync: 19.51 kHz; pclk: 33.25 MHz
|
|
95
|
+
Modeline "1368x768_25.00" 33.25 1368 1408 1536 1704 768 771 781 784 -Hsync +Vsync
|
|
96
|
+
# 800x1600 @ 24.92 Hz (CVT) hsync: 40.53 kHz; pclk: 41.50 MHz
|
|
97
|
+
Modeline "800x1600_25.00" 41.50 800 832 912 1024 1600 1603 1613 1626 -Hsync +Vsync
|
|
98
|
+
EndSection
|
|
99
|
+
|
|
100
|
+
Section "Screen"
|
|
101
|
+
Identifier "dummy_screen"
|
|
102
|
+
Device "dummy_videocard"
|
|
103
|
+
Monitor "dummy_monitor"
|
|
104
|
+
DefaultDepth 24
|
|
105
|
+
SubSection "Display"
|
|
106
|
+
Viewport 0 0
|
|
107
|
+
Depth 24
|
|
108
|
+
Modes "1920x1080_60.00" "1280x720_60.00" "1152x648_60.00" "1024x576_60.00" "960x720_60.00" "800x600_60.00" "2560x1440_30.00" "1920x1080_30.00" "1368x768_30.00" "1280x720_30.00" "1152x648_30.00" "1024x576_30.00" "960x720_30.00" "800x600_30.00" "3840x2160_25.00" "2560x1440_25.00" "1920x1080_25.00" "1600x900_25.00" "1368x768_25.00" "800x1600_30.00" "800x1600_25.00"
|
|
109
|
+
EndSubSection
|
|
110
|
+
EndSection
|
|
111
|
+
|
|
112
|
+
Section "ServerLayout"
|
|
113
|
+
Identifier "dummy_layout"
|
|
114
|
+
Screen "dummy_screen"
|
|
115
|
+
InputDevice "dummy_mouse"
|
|
116
|
+
InputDevice "dummy_keyboard"
|
|
117
|
+
InputDevice "dummy_touchscreen" "CorePointer"
|
|
118
|
+
EndSection
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* AriseBrowser CLI — Start the HTTP server.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npx arise-browser [options]
|
|
7
|
+
*
|
|
8
|
+
* Options:
|
|
9
|
+
* --port, -p Server port (default: 9867)
|
|
10
|
+
* --host Bind address (default: 127.0.0.1)
|
|
11
|
+
* --token Auth token
|
|
12
|
+
* --headless Run headless (default: true)
|
|
13
|
+
* --no-headless Run with visible browser
|
|
14
|
+
* --profile Browser profile directory (enables managed mode)
|
|
15
|
+
* --cdp CDP endpoint URL (enables cdp mode)
|
|
16
|
+
* --help Show help
|
|
17
|
+
*
|
|
18
|
+
* Environment variables (Pinchtab-compatible):
|
|
19
|
+
* ARISE_BROWSER_PORT / BRIDGE_PORT
|
|
20
|
+
* ARISE_BROWSER_BIND / BRIDGE_BIND
|
|
21
|
+
* ARISE_BROWSER_TOKEN / BRIDGE_TOKEN
|
|
22
|
+
* ARISE_BROWSER_HEADLESS
|
|
23
|
+
* ARISE_BROWSER_PROFILE
|
|
24
|
+
*/
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=arise-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arise-browser.d.ts","sourceRoot":"","sources":["../../bin/arise-browser.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
|