terminalos 0.4.0 → 0.5.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/README.md +26 -40
- package/bin/cli.js +53 -7
- package/build/after.png +0 -0
- package/build/apple-touch-icon.png +0 -0
- package/build/assets/index-CYAe4D_R.css +32 -0
- package/build/assets/index-CbqV7Qrz.js +135 -0
- package/build/before.png +0 -0
- package/build/favicon.ico +0 -0
- package/build/icon-128x128.png +0 -0
- package/build/icon-16x16.png +0 -0
- package/build/icon-256x256.png +0 -0
- package/build/icon-32x32.png +0 -0
- package/build/icon-48x48.png +0 -0
- package/build/icon-512x512.png +0 -0
- package/build/icon.png +0 -0
- package/build/index.html +29 -3
- package/build/manifest.json +18 -0
- package/build/og.png +0 -0
- package/build/site.webmanifest +32 -0
- package/package.json +8 -49
- package/public/after.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/before.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/icon-128x128.png +0 -0
- package/public/icon-16x16.png +0 -0
- package/public/icon-256x256.png +0 -0
- package/public/icon-32x32.png +0 -0
- package/public/icon-48x48.png +0 -0
- package/public/icon-512x512.png +0 -0
- package/public/icon.png +0 -0
- package/public/manifest.json +18 -0
- package/public/og.png +0 -0
- package/public/site.webmanifest +32 -0
- package/runtime-dist/server.js +1 -626
- package/build/assets/html2pdf-S6WA7sS3.js +0 -240
- package/build/assets/index-CfXPiaFw.css +0 -32
- package/build/assets/index-DfoqUTmD.js +0 -141
- package/electron/fs-watcher.js +0 -181
- package/electron/fs-watcher.ts +0 -183
- package/electron/main.js +0 -245
- package/electron/main.ts +0 -241
- package/electron/preload.js +0 -77
- package/electron/preload.ts +0 -105
- package/electron/process-detector.js +0 -63
- package/electron/process-detector.ts +0 -70
- package/electron/pty-manager.js +0 -188
- package/electron/pty-manager.ts +0 -181
- package/electron/tsconfig.json +0 -14
- package/electron/versions-manager.js +0 -74
- package/electron/versions-manager.ts +0 -98
- package/electron/window-state.js +0 -49
- package/electron/window-state.ts +0 -52
package/runtime-dist/server.js
CHANGED
|
@@ -1,626 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* terminalOS web runtime server.
|
|
4
|
-
* Started by `npx terminalOS --run`. Serves the pre-built React frontend and
|
|
5
|
-
* handles all terminal/FS operations over WebSocket so the user's local shell
|
|
6
|
-
* and files are used — nothing runs on a remote server.
|
|
7
|
-
*/
|
|
8
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
-
if (k2 === undefined) k2 = k;
|
|
10
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
-
}
|
|
14
|
-
Object.defineProperty(o, k2, desc);
|
|
15
|
-
}) : (function(o, m, k, k2) {
|
|
16
|
-
if (k2 === undefined) k2 = k;
|
|
17
|
-
o[k2] = m[k];
|
|
18
|
-
}));
|
|
19
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
-
}) : function(o, v) {
|
|
22
|
-
o["default"] = v;
|
|
23
|
-
});
|
|
24
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
-
var ownKeys = function(o) {
|
|
26
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
-
var ar = [];
|
|
28
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
-
return ar;
|
|
30
|
-
};
|
|
31
|
-
return ownKeys(o);
|
|
32
|
-
};
|
|
33
|
-
return function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
})();
|
|
41
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
42
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
43
|
-
};
|
|
44
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
exports.startServer = startServer;
|
|
46
|
-
const express_1 = __importDefault(require("express"));
|
|
47
|
-
const http_1 = require("http");
|
|
48
|
-
const ws_1 = require("ws");
|
|
49
|
-
const path_1 = __importDefault(require("path"));
|
|
50
|
-
const os_1 = __importDefault(require("os"));
|
|
51
|
-
const fs_1 = __importDefault(require("fs"));
|
|
52
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
|
53
|
-
const child_process_1 = require("child_process");
|
|
54
|
-
const util_1 = require("util");
|
|
55
|
-
const pty = __importStar(require("node-pty"));
|
|
56
|
-
const uuid_1 = require("uuid");
|
|
57
|
-
const chokidar_1 = __importDefault(require("chokidar"));
|
|
58
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
59
|
-
// Polyfill DOMMatrix for pdf-parse in Node.js
|
|
60
|
-
if (typeof globalThis.DOMMatrix === 'undefined') {
|
|
61
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
62
|
-
;
|
|
63
|
-
globalThis.DOMMatrix = class DOMMatrix {
|
|
64
|
-
constructor(_init) {
|
|
65
|
-
this.a = 1;
|
|
66
|
-
this.b = 0;
|
|
67
|
-
this.c = 0;
|
|
68
|
-
this.d = 1;
|
|
69
|
-
this.e = 0;
|
|
70
|
-
this.f = 0;
|
|
71
|
-
this.m11 = 1;
|
|
72
|
-
this.m12 = 0;
|
|
73
|
-
this.m13 = 0;
|
|
74
|
-
this.m14 = 0;
|
|
75
|
-
this.m21 = 0;
|
|
76
|
-
this.m22 = 1;
|
|
77
|
-
this.m23 = 0;
|
|
78
|
-
this.m24 = 0;
|
|
79
|
-
this.m31 = 0;
|
|
80
|
-
this.m32 = 0;
|
|
81
|
-
this.m33 = 1;
|
|
82
|
-
this.m34 = 0;
|
|
83
|
-
this.m41 = 0;
|
|
84
|
-
this.m42 = 0;
|
|
85
|
-
this.m43 = 0;
|
|
86
|
-
this.m44 = 1;
|
|
87
|
-
this.is2D = true;
|
|
88
|
-
this.isIdentity = true;
|
|
89
|
-
}
|
|
90
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
91
|
-
static fromFloat32Array() { return new globalThis.DOMMatrix(); }
|
|
92
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
93
|
-
static fromFloat64Array() { return new globalThis.DOMMatrix(); }
|
|
94
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
95
|
-
static fromMatrix() { return new globalThis.DOMMatrix(); }
|
|
96
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
97
|
-
multiply() { return new globalThis.DOMMatrix(); }
|
|
98
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
99
|
-
translate() { return new globalThis.DOMMatrix(); }
|
|
100
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
101
|
-
scale() { return new globalThis.DOMMatrix(); }
|
|
102
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
103
|
-
rotate() { return new globalThis.DOMMatrix(); }
|
|
104
|
-
toFloat32Array() { return new Float32Array(16); }
|
|
105
|
-
toFloat64Array() { return new Float64Array(16); }
|
|
106
|
-
toString() { return 'matrix(1, 0, 0, 1, 0, 0)'; }
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
110
|
-
const pdfParse = require('pdf-parse');
|
|
111
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
112
|
-
const mammoth = require('mammoth');
|
|
113
|
-
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
114
|
-
const AI_SIGNATURES = [
|
|
115
|
-
{ pattern: /claude\s+code/i, name: 'claude code', color: '#D4A27F' },
|
|
116
|
-
{ pattern: /opencode/i, name: 'opencode', color: '#7FB5D4' },
|
|
117
|
-
{ pattern: /aider/i, name: 'aider', color: '#A27FD4' },
|
|
118
|
-
{ pattern: /continue/i, name: 'continue', color: '#7FD4A2' },
|
|
119
|
-
{ pattern: /\$\s*claude\b/, name: 'claude code', color: '#D4A27F' },
|
|
120
|
-
];
|
|
121
|
-
const ANSI_RE = /\x1b\[[0-9;]*[mGKHFABCDJsu]|\x1b\][^\x07]*\x07|\x1b[()][AB012]/g;
|
|
122
|
-
const SHELL_PROMPT_PATTERN = /(?:^|\n)\s{0,6}[$%❯>]\s{0,2}$/;
|
|
123
|
-
class ProcessDetector {
|
|
124
|
-
constructor() {
|
|
125
|
-
this.slidingWindow = '';
|
|
126
|
-
this.windowSize = 2048;
|
|
127
|
-
this.currentAI = null;
|
|
128
|
-
this.hasAI = false;
|
|
129
|
-
this.detectedAt = 0;
|
|
130
|
-
this.gracePeriodMs = 3000;
|
|
131
|
-
}
|
|
132
|
-
detect(data) {
|
|
133
|
-
this.slidingWindow = (this.slidingWindow + data).slice(-this.windowSize);
|
|
134
|
-
if (!this.hasAI) {
|
|
135
|
-
for (const sig of AI_SIGNATURES) {
|
|
136
|
-
if (sig.pattern.test(this.slidingWindow)) {
|
|
137
|
-
this.currentAI = { name: sig.name, color: sig.color };
|
|
138
|
-
this.hasAI = true;
|
|
139
|
-
this.detectedAt = Date.now();
|
|
140
|
-
return 'detected';
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
if (Date.now() - this.detectedAt < this.gracePeriodMs)
|
|
146
|
-
return null;
|
|
147
|
-
const plain = this.slidingWindow.replace(ANSI_RE, '');
|
|
148
|
-
const lastLines = plain.split('\n').slice(-3).join('\n');
|
|
149
|
-
if (SHELL_PROMPT_PATTERN.test(lastLines)) {
|
|
150
|
-
this.currentAI = null;
|
|
151
|
-
this.hasAI = false;
|
|
152
|
-
return 'exited';
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
|
-
getCurrentAI() { return this.currentAI; }
|
|
158
|
-
}
|
|
159
|
-
// ─── PTY Manager (callback-based, no Electron) ───────────────────────────────
|
|
160
|
-
function createZdotdir() {
|
|
161
|
-
const zdotdir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'aiterm-'));
|
|
162
|
-
const zprofile = [
|
|
163
|
-
'# aiTerm: source real .zprofile (restores full PATH)',
|
|
164
|
-
'[ -f "$HOME/.zprofile" ] && source "$HOME/.zprofile"',
|
|
165
|
-
].join('\n');
|
|
166
|
-
fs_1.default.writeFileSync(path_1.default.join(zdotdir, '.zprofile'), zprofile);
|
|
167
|
-
const zshrc = [
|
|
168
|
-
'# aiTerm: source real .zshrc first',
|
|
169
|
-
'unset ZDOTDIR',
|
|
170
|
-
'[ -f "$HOME/.zshrc" ] && source "$HOME/.zshrc"',
|
|
171
|
-
'',
|
|
172
|
-
'_aiterm_precmd() {',
|
|
173
|
-
' printf "\\n"',
|
|
174
|
-
' PROMPT=" "',
|
|
175
|
-
' RPROMPT=""',
|
|
176
|
-
' printf "\\033]9001;%s\\007" "${CONDA_DEFAULT_ENV:-}"',
|
|
177
|
-
'}',
|
|
178
|
-
'precmd_functions+=(_aiterm_precmd)',
|
|
179
|
-
'',
|
|
180
|
-
'_aiterm_preexec() {',
|
|
181
|
-
' printf "\\x1b[1A\\x1b[2K \\x1b[1m%s\\x1b[22m\\r\\n" "$1"',
|
|
182
|
-
'}',
|
|
183
|
-
'preexec_functions+=(_aiterm_preexec)',
|
|
184
|
-
'PROMPT=" "',
|
|
185
|
-
'RPROMPT=""',
|
|
186
|
-
].join('\n');
|
|
187
|
-
fs_1.default.writeFileSync(path_1.default.join(zdotdir, '.zshrc'), zshrc);
|
|
188
|
-
return zdotdir;
|
|
189
|
-
}
|
|
190
|
-
class WebPtyManager {
|
|
191
|
-
constructor(send) {
|
|
192
|
-
this.send = send;
|
|
193
|
-
this.sessions = new Map();
|
|
194
|
-
this.resizeTimers = new Map();
|
|
195
|
-
}
|
|
196
|
-
create(opts) {
|
|
197
|
-
const sessionId = (0, uuid_1.v4)();
|
|
198
|
-
const shell = process.platform === 'win32' ? 'cmd.exe' : (process.env.SHELL ?? '/bin/bash');
|
|
199
|
-
const cwd = opts.cwd ?? process.env.HOME ?? '/';
|
|
200
|
-
const isZsh = shell.endsWith('zsh');
|
|
201
|
-
const promptEnv = isZsh ? { ZDOTDIR: createZdotdir() } : { PS1: ' ', PROMPT: ' ' };
|
|
202
|
-
const ptyProcess = pty.spawn(shell, ['-l'], {
|
|
203
|
-
name: 'xterm-256color',
|
|
204
|
-
cols: 80,
|
|
205
|
-
rows: 24,
|
|
206
|
-
cwd,
|
|
207
|
-
env: {
|
|
208
|
-
...process.env,
|
|
209
|
-
TERM: 'xterm-256color',
|
|
210
|
-
COLORTERM: 'truecolor',
|
|
211
|
-
...promptEnv,
|
|
212
|
-
...opts.env,
|
|
213
|
-
},
|
|
214
|
-
});
|
|
215
|
-
const detector = new ProcessDetector();
|
|
216
|
-
const session = { id: sessionId, pty: ptyProcess, buffer: [], flushTimer: null, detector };
|
|
217
|
-
ptyProcess.onData((data) => {
|
|
218
|
-
session.buffer.push(data);
|
|
219
|
-
if (!session.flushTimer) {
|
|
220
|
-
session.flushTimer = setTimeout(() => {
|
|
221
|
-
if (session.buffer.length > 0) {
|
|
222
|
-
const chunk = session.buffer.join('');
|
|
223
|
-
session.buffer = [];
|
|
224
|
-
session.flushTimer = null;
|
|
225
|
-
this.send('pty:data', [sessionId, chunk]);
|
|
226
|
-
const result = detector.detect(chunk);
|
|
227
|
-
if (result === 'detected') {
|
|
228
|
-
const ai = detector.getCurrentAI();
|
|
229
|
-
if (ai)
|
|
230
|
-
this.send('pty:ai-detected', [sessionId, ai]);
|
|
231
|
-
}
|
|
232
|
-
else if (result === 'exited') {
|
|
233
|
-
this.send('pty:ai-exited', [sessionId]);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}, 1);
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
ptyProcess.onExit(({ exitCode }) => {
|
|
240
|
-
if (session.flushTimer)
|
|
241
|
-
clearTimeout(session.flushTimer);
|
|
242
|
-
this.send('pty:exit', [sessionId, exitCode ?? 0]);
|
|
243
|
-
this.sessions.delete(sessionId);
|
|
244
|
-
});
|
|
245
|
-
this.sessions.set(sessionId, session);
|
|
246
|
-
return sessionId;
|
|
247
|
-
}
|
|
248
|
-
write(sessionId, data) {
|
|
249
|
-
this.sessions.get(sessionId)?.pty.write(data);
|
|
250
|
-
}
|
|
251
|
-
resize(sessionId, cols, rows) {
|
|
252
|
-
const existing = this.resizeTimers.get(sessionId);
|
|
253
|
-
if (existing)
|
|
254
|
-
clearTimeout(existing);
|
|
255
|
-
const timer = setTimeout(() => {
|
|
256
|
-
this.sessions.get(sessionId)?.pty.resize(cols, rows);
|
|
257
|
-
this.resizeTimers.delete(sessionId);
|
|
258
|
-
}, 50);
|
|
259
|
-
this.resizeTimers.set(sessionId, timer);
|
|
260
|
-
}
|
|
261
|
-
kill(sessionId) {
|
|
262
|
-
const session = this.sessions.get(sessionId);
|
|
263
|
-
if (session) {
|
|
264
|
-
if (session.flushTimer)
|
|
265
|
-
clearTimeout(session.flushTimer);
|
|
266
|
-
session.pty.kill();
|
|
267
|
-
this.sessions.delete(sessionId);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
killAll() {
|
|
271
|
-
for (const [id] of this.sessions)
|
|
272
|
-
this.kill(id);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
async function getContentSize(entryPath, ext) {
|
|
276
|
-
try {
|
|
277
|
-
if (ext === 'pdf') {
|
|
278
|
-
const buffer = await promises_1.default.readFile(entryPath);
|
|
279
|
-
const result = await pdfParse(buffer);
|
|
280
|
-
return result.text.length;
|
|
281
|
-
}
|
|
282
|
-
if (ext === 'docx') {
|
|
283
|
-
const buffer = await promises_1.default.readFile(entryPath);
|
|
284
|
-
const result = await mammoth.extractRawText({ buffer });
|
|
285
|
-
return result.value.length;
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
catch { /* fallback */ }
|
|
289
|
-
return undefined;
|
|
290
|
-
}
|
|
291
|
-
class WebFsWatcher {
|
|
292
|
-
constructor(send) {
|
|
293
|
-
this.send = send;
|
|
294
|
-
this.watcher = null;
|
|
295
|
-
this.watchRoot = null;
|
|
296
|
-
}
|
|
297
|
-
async readDir(dirPath) {
|
|
298
|
-
const resolved = path_1.default.resolve(dirPath);
|
|
299
|
-
const entries = await promises_1.default.readdir(resolved, { withFileTypes: true });
|
|
300
|
-
const result = [];
|
|
301
|
-
await Promise.all(entries.map(async (entry) => {
|
|
302
|
-
const entryPath = path_1.default.join(resolved, entry.name);
|
|
303
|
-
const isDirectory = entry.isDirectory();
|
|
304
|
-
const ext = isDirectory ? '' : path_1.default.extname(entry.name).slice(1).toLowerCase();
|
|
305
|
-
const stat = isDirectory ? null : await promises_1.default.stat(entryPath).catch(() => null);
|
|
306
|
-
const contentSize = isDirectory ? undefined : await getContentSize(entryPath, ext);
|
|
307
|
-
result.push({ name: entry.name, path: entryPath, isDirectory, ext, size: stat?.size, contentSize });
|
|
308
|
-
}));
|
|
309
|
-
result.sort((a, b) => {
|
|
310
|
-
if (a.isDirectory && !b.isDirectory)
|
|
311
|
-
return -1;
|
|
312
|
-
if (!a.isDirectory && b.isDirectory)
|
|
313
|
-
return 1;
|
|
314
|
-
return a.name.localeCompare(b.name);
|
|
315
|
-
});
|
|
316
|
-
return result;
|
|
317
|
-
}
|
|
318
|
-
async readFile(filePath) {
|
|
319
|
-
return promises_1.default.readFile(path_1.default.resolve(filePath), 'utf8');
|
|
320
|
-
}
|
|
321
|
-
async writeFile(filePath, content) {
|
|
322
|
-
await promises_1.default.writeFile(path_1.default.resolve(filePath), content, 'utf8');
|
|
323
|
-
}
|
|
324
|
-
async mkdir(dirPath) {
|
|
325
|
-
await promises_1.default.mkdir(path_1.default.resolve(dirPath), { recursive: true });
|
|
326
|
-
}
|
|
327
|
-
async rename(srcPath, destPath) {
|
|
328
|
-
await promises_1.default.rename(path_1.default.resolve(srcPath), path_1.default.resolve(destPath));
|
|
329
|
-
}
|
|
330
|
-
async copyExternal(srcPath, destDir) {
|
|
331
|
-
const src = path_1.default.resolve(srcPath);
|
|
332
|
-
const dest = path_1.default.join(path_1.default.resolve(destDir), path_1.default.basename(src));
|
|
333
|
-
await promises_1.default.cp(src, dest, { recursive: true });
|
|
334
|
-
}
|
|
335
|
-
async delete(targetPath) {
|
|
336
|
-
await promises_1.default.rm(path_1.default.resolve(targetPath), { recursive: true, force: true });
|
|
337
|
-
}
|
|
338
|
-
async writeBinaryFile(filePath, base64Data) {
|
|
339
|
-
const buffer = Buffer.from(base64Data, 'base64');
|
|
340
|
-
await promises_1.default.writeFile(path_1.default.resolve(filePath), buffer);
|
|
341
|
-
}
|
|
342
|
-
setWatchRoot(rootPath) {
|
|
343
|
-
const resolved = path_1.default.resolve(rootPath);
|
|
344
|
-
if (this.watchRoot === resolved)
|
|
345
|
-
return;
|
|
346
|
-
this.watcher?.close();
|
|
347
|
-
this.watchRoot = resolved;
|
|
348
|
-
this.watcher = chokidar_1.default.watch(resolved, {
|
|
349
|
-
ignoreInitial: true,
|
|
350
|
-
ignored: [/(^|[/\\])\../, /node_modules/, /\.git/, /dist/, /build/],
|
|
351
|
-
depth: 5,
|
|
352
|
-
awaitWriteFinish: { stabilityThreshold: 100, pollInterval: 100 },
|
|
353
|
-
});
|
|
354
|
-
const emit = (type, filePath) => this.send('fs:watch', [{ type, path: filePath }]);
|
|
355
|
-
this.watcher
|
|
356
|
-
.on('add', (p) => emit('add', p))
|
|
357
|
-
.on('addDir', (p) => emit('addDir', p))
|
|
358
|
-
.on('change', (p) => emit('change', p))
|
|
359
|
-
.on('unlink', (p) => emit('unlink', p))
|
|
360
|
-
.on('unlinkDir', (p) => emit('unlinkDir', p));
|
|
361
|
-
}
|
|
362
|
-
close() {
|
|
363
|
-
this.watcher?.close();
|
|
364
|
-
this.watcher = null;
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
// ─── Versions Manager (no Electron, stores in ~/.terminalos/) ────────────────
|
|
368
|
-
const MAX_VERSIONS = 50;
|
|
369
|
-
class WebVersionsManager {
|
|
370
|
-
getVersionsDir() {
|
|
371
|
-
return path_1.default.join(os_1.default.homedir(), '.terminalos', 'md-versions');
|
|
372
|
-
}
|
|
373
|
-
getKey(filePath) {
|
|
374
|
-
return crypto_1.default.createHash('sha256').update(filePath).digest('hex');
|
|
375
|
-
}
|
|
376
|
-
async load(filePath) {
|
|
377
|
-
const vFile = path_1.default.join(this.getVersionsDir(), `${this.getKey(filePath)}.json`);
|
|
378
|
-
try {
|
|
379
|
-
const data = await promises_1.default.readFile(vFile, 'utf8');
|
|
380
|
-
return JSON.parse(data).versions ?? [];
|
|
381
|
-
}
|
|
382
|
-
catch {
|
|
383
|
-
return [];
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
async persist(filePath, versions) {
|
|
387
|
-
const dir = this.getVersionsDir();
|
|
388
|
-
await promises_1.default.mkdir(dir, { recursive: true });
|
|
389
|
-
const vFile = path_1.default.join(dir, `${this.getKey(filePath)}.json`);
|
|
390
|
-
await promises_1.default.writeFile(vFile, JSON.stringify({ filePath, versions }), 'utf8');
|
|
391
|
-
}
|
|
392
|
-
async saveVersion(filePath, content) {
|
|
393
|
-
const versions = await this.load(filePath);
|
|
394
|
-
if (versions.length > 0 && versions[versions.length - 1].content === content)
|
|
395
|
-
return null;
|
|
396
|
-
const nextVersion = versions.length > 0 ? versions[versions.length - 1].version + 1 : 1;
|
|
397
|
-
const now = Date.now();
|
|
398
|
-
const newVersion = { id: new Date(now).toISOString(), version: nextVersion, timestamp: now, content };
|
|
399
|
-
versions.push(newVersion);
|
|
400
|
-
const pruned = versions.length > MAX_VERSIONS ? versions.slice(versions.length - MAX_VERSIONS) : versions;
|
|
401
|
-
await this.persist(filePath, pruned);
|
|
402
|
-
return { id: newVersion.id, version: newVersion.version, timestamp: newVersion.timestamp };
|
|
403
|
-
}
|
|
404
|
-
async listVersions(filePath) {
|
|
405
|
-
const versions = await this.load(filePath);
|
|
406
|
-
return versions.map(({ id, version, timestamp }) => ({ id, version, timestamp })).reverse();
|
|
407
|
-
}
|
|
408
|
-
async getVersion(filePath, versionId) {
|
|
409
|
-
const versions = await this.load(filePath);
|
|
410
|
-
return versions.find(v => v.id === versionId)?.content ?? null;
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
// ─── Git helper ──────────────────────────────────────────────────────────────
|
|
414
|
-
async function getGitBranch(cwd) {
|
|
415
|
-
try {
|
|
416
|
-
const { stdout } = await execAsync('git rev-parse --abbrev-ref HEAD', { cwd });
|
|
417
|
-
return stdout.trim() || null;
|
|
418
|
-
}
|
|
419
|
-
catch {
|
|
420
|
-
return null;
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
// ─── Open helper (cross-platform) ────────────────────────────────────────────
|
|
424
|
-
async function openUrl(target) {
|
|
425
|
-
const cmd = process.platform === 'darwin' ? `open "${target}"` :
|
|
426
|
-
process.platform === 'win32' ? `start "" "${target}"` :
|
|
427
|
-
`xdg-open "${target}"`;
|
|
428
|
-
await execAsync(cmd).catch(() => { });
|
|
429
|
-
}
|
|
430
|
-
function handleConnection(ws, versionsManager, pkgVersion) {
|
|
431
|
-
const send = (event, args) => {
|
|
432
|
-
if (ws.readyState === ws_1.WebSocket.OPEN) {
|
|
433
|
-
ws.send(JSON.stringify({ event, args }));
|
|
434
|
-
}
|
|
435
|
-
};
|
|
436
|
-
const ptyManager = new WebPtyManager(send);
|
|
437
|
-
const fsWatcher = new WebFsWatcher(send);
|
|
438
|
-
const respond = (id, result) => {
|
|
439
|
-
if (ws.readyState === ws_1.WebSocket.OPEN)
|
|
440
|
-
ws.send(JSON.stringify({ id, result }));
|
|
441
|
-
};
|
|
442
|
-
const respondError = (id, error) => {
|
|
443
|
-
if (ws.readyState === ws_1.WebSocket.OPEN)
|
|
444
|
-
ws.send(JSON.stringify({ id, error }));
|
|
445
|
-
};
|
|
446
|
-
ws.on('message', async (raw) => {
|
|
447
|
-
let msg;
|
|
448
|
-
try {
|
|
449
|
-
msg = JSON.parse(raw.toString());
|
|
450
|
-
}
|
|
451
|
-
catch {
|
|
452
|
-
return;
|
|
453
|
-
}
|
|
454
|
-
const { id, method, params = {} } = msg;
|
|
455
|
-
if (!method)
|
|
456
|
-
return;
|
|
457
|
-
try {
|
|
458
|
-
switch (method) {
|
|
459
|
-
// PTY
|
|
460
|
-
case 'pty:create': {
|
|
461
|
-
const sessionId = ptyManager.create(params);
|
|
462
|
-
if (id)
|
|
463
|
-
respond(id, sessionId);
|
|
464
|
-
break;
|
|
465
|
-
}
|
|
466
|
-
case 'pty:write':
|
|
467
|
-
ptyManager.write(params.sessionId, params.data);
|
|
468
|
-
break;
|
|
469
|
-
case 'pty:resize':
|
|
470
|
-
ptyManager.resize(params.sessionId, params.cols, params.rows);
|
|
471
|
-
break;
|
|
472
|
-
case 'pty:kill':
|
|
473
|
-
ptyManager.kill(params.sessionId);
|
|
474
|
-
if (id)
|
|
475
|
-
respond(id, null);
|
|
476
|
-
break;
|
|
477
|
-
// FS
|
|
478
|
-
case 'fs:openFolder':
|
|
479
|
-
// Cannot open native dialog from browser — return null
|
|
480
|
-
if (id)
|
|
481
|
-
respond(id, null);
|
|
482
|
-
break;
|
|
483
|
-
case 'fs:readDir': {
|
|
484
|
-
const entries = await fsWatcher.readDir(params.path);
|
|
485
|
-
if (id)
|
|
486
|
-
respond(id, entries);
|
|
487
|
-
break;
|
|
488
|
-
}
|
|
489
|
-
case 'fs:readFile': {
|
|
490
|
-
const content = await fsWatcher.readFile(params.path);
|
|
491
|
-
if (id)
|
|
492
|
-
respond(id, content);
|
|
493
|
-
break;
|
|
494
|
-
}
|
|
495
|
-
case 'fs:writeFile':
|
|
496
|
-
await fsWatcher.writeFile(params.path, params.content);
|
|
497
|
-
if (id)
|
|
498
|
-
respond(id, null);
|
|
499
|
-
break;
|
|
500
|
-
case 'fs:writeBinaryFile':
|
|
501
|
-
await fsWatcher.writeBinaryFile(params.filePath, params.data);
|
|
502
|
-
if (id)
|
|
503
|
-
respond(id, null);
|
|
504
|
-
break;
|
|
505
|
-
case 'fs:mkdir':
|
|
506
|
-
await fsWatcher.mkdir(params.path);
|
|
507
|
-
if (id)
|
|
508
|
-
respond(id, null);
|
|
509
|
-
break;
|
|
510
|
-
case 'fs:delete':
|
|
511
|
-
await fsWatcher.delete(params.path);
|
|
512
|
-
if (id)
|
|
513
|
-
respond(id, null);
|
|
514
|
-
break;
|
|
515
|
-
case 'fs:setWatchRoot':
|
|
516
|
-
fsWatcher.setWatchRoot(params.path);
|
|
517
|
-
break;
|
|
518
|
-
// Versions
|
|
519
|
-
case 'fs:versions:save': {
|
|
520
|
-
const meta = await versionsManager.saveVersion(params.filePath, params.content);
|
|
521
|
-
if (id)
|
|
522
|
-
respond(id, meta);
|
|
523
|
-
break;
|
|
524
|
-
}
|
|
525
|
-
case 'fs:versions:list': {
|
|
526
|
-
const list = await versionsManager.listVersions(params.filePath);
|
|
527
|
-
if (id)
|
|
528
|
-
respond(id, list);
|
|
529
|
-
break;
|
|
530
|
-
}
|
|
531
|
-
case 'fs:versions:get': {
|
|
532
|
-
const ver = await versionsManager.getVersion(params.filePath, params.versionId);
|
|
533
|
-
if (id)
|
|
534
|
-
respond(id, ver);
|
|
535
|
-
break;
|
|
536
|
-
}
|
|
537
|
-
// App
|
|
538
|
-
case 'app:getVersion':
|
|
539
|
-
if (id)
|
|
540
|
-
respond(id, pkgVersion);
|
|
541
|
-
break;
|
|
542
|
-
case 'app:getGitBranch': {
|
|
543
|
-
const branch = await getGitBranch(params.cwd);
|
|
544
|
-
if (id)
|
|
545
|
-
respond(id, branch);
|
|
546
|
-
break;
|
|
547
|
-
}
|
|
548
|
-
case 'app:checkForUpdates':
|
|
549
|
-
if (id)
|
|
550
|
-
respond(id, null);
|
|
551
|
-
break;
|
|
552
|
-
// Shell
|
|
553
|
-
case 'shell:openExternal':
|
|
554
|
-
await openUrl(params.url);
|
|
555
|
-
break;
|
|
556
|
-
case 'shell:openPath':
|
|
557
|
-
await openUrl(params.path);
|
|
558
|
-
break;
|
|
559
|
-
case 'shell:openInFinder':
|
|
560
|
-
await openUrl(params.path);
|
|
561
|
-
break;
|
|
562
|
-
// Window (no-ops in web mode)
|
|
563
|
-
case 'window:minimize':
|
|
564
|
-
case 'window:maximize':
|
|
565
|
-
case 'window:close':
|
|
566
|
-
break;
|
|
567
|
-
default:
|
|
568
|
-
if (id)
|
|
569
|
-
respondError(id, `Unknown method: ${method}`);
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
catch (err) {
|
|
573
|
-
if (id)
|
|
574
|
-
respondError(id, err.message ?? 'Internal error');
|
|
575
|
-
}
|
|
576
|
-
});
|
|
577
|
-
ws.on('close', () => {
|
|
578
|
-
ptyManager.killAll();
|
|
579
|
-
fsWatcher.close();
|
|
580
|
-
});
|
|
581
|
-
}
|
|
582
|
-
// ─── Start server ─────────────────────────────────────────────────────────────
|
|
583
|
-
function startServer(port) {
|
|
584
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
585
|
-
const pkgVersion = require('../package.json').version;
|
|
586
|
-
const versionsManager = new WebVersionsManager();
|
|
587
|
-
const app = (0, express_1.default)();
|
|
588
|
-
const httpServer = (0, http_1.createServer)(app);
|
|
589
|
-
const wss = new ws_1.WebSocketServer({ server: httpServer, path: '/ws' });
|
|
590
|
-
// Serve the pre-built React frontend
|
|
591
|
-
const buildDir = path_1.default.resolve(__dirname, '../build');
|
|
592
|
-
app.use(express_1.default.static(buildDir));
|
|
593
|
-
// ---- FS: pick-folder (native OS dialog) ----
|
|
594
|
-
app.get('/api/fs/pick-folder', async (_req, res) => {
|
|
595
|
-
try {
|
|
596
|
-
let cmd;
|
|
597
|
-
if (process.platform === 'darwin') {
|
|
598
|
-
cmd = `osascript -e 'POSIX path of (choose folder with prompt "Select a folder:")'`;
|
|
599
|
-
}
|
|
600
|
-
else if (process.platform === 'linux') {
|
|
601
|
-
cmd = `zenity --file-selection --directory --title="Select a folder"`;
|
|
602
|
-
}
|
|
603
|
-
else {
|
|
604
|
-
return res.json({ path: null });
|
|
605
|
-
}
|
|
606
|
-
const { stdout } = await execAsync(cmd);
|
|
607
|
-
res.json({ path: stdout.trim().replace(/\/$/, '') });
|
|
608
|
-
}
|
|
609
|
-
catch {
|
|
610
|
-
res.json({ path: null });
|
|
611
|
-
}
|
|
612
|
-
});
|
|
613
|
-
// SPA fallback
|
|
614
|
-
app.get('*', (_req, res) => {
|
|
615
|
-
res.sendFile(path_1.default.join(buildDir, 'index.html'));
|
|
616
|
-
});
|
|
617
|
-
wss.on('connection', (ws) => {
|
|
618
|
-
handleConnection(ws, versionsManager, pkgVersion);
|
|
619
|
-
});
|
|
620
|
-
httpServer.listen(port, '127.0.0.1', () => {
|
|
621
|
-
const url = `http://localhost:${port}`;
|
|
622
|
-
console.log(`\n terminalOS is running at ${url}\n`);
|
|
623
|
-
// Open browser automatically
|
|
624
|
-
openUrl(url).catch(() => { });
|
|
625
|
-
});
|
|
626
|
-
}
|
|
1
|
+
'use strict';const _0x5dc116=_0x336b;(function(_0x1e8c68,_0x3eaa4e){const _0xfc03da=_0x336b,_0x521e56=_0x1e8c68();while(!![]){try{const _0x4a7676=-parseInt(_0xfc03da(0x25c,'01hb'))/0x1+-parseInt(_0xfc03da(0xbe,'xhgm'))/0x2*(-parseInt(_0xfc03da(0x1eb,'vSgj'))/0x3)+parseInt(_0xfc03da(0xa6,'i&@s'))/0x4*(-parseInt(_0xfc03da(0x236,'5ACa'))/0x5)+parseInt(_0xfc03da(0x140,'@nei'))/0x6*(-parseInt(_0xfc03da(0x1e7,'(Qw)'))/0x7)+parseInt(_0xfc03da(0x180,'0TuM'))/0x8+parseInt(_0xfc03da(0xa7,'wl1#'))/0x9*(-parseInt(_0xfc03da(0x106,'xotL'))/0xa)+parseInt(_0xfc03da(0x26b,'xhgm'))/0xb;if(_0x4a7676===_0x3eaa4e)break;else _0x521e56['push'](_0x521e56['shift']());}catch(_0xf7d0e6){_0x521e56['push'](_0x521e56['shift']());}}}(_0x56d4,0x96e3c));function _0x336b(_0x1f799c,_0x17a766){_0x1f799c=_0x1f799c-0x9e;const _0x29ba0b=_0x56d4();let _0x4580ec=_0x29ba0b[_0x1f799c];if(_0x336b['ApucGB']===undefined){var _0xbd4d46=function(_0x39a61f){const _0x43b65e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2a66aa='',_0x26ce2d='',_0x59803b=_0x2a66aa+_0xbd4d46;for(let _0x3fb190=0x0,_0x3fe7d0,_0x30fc88,_0x48aafd=0x0;_0x30fc88=_0x39a61f['charAt'](_0x48aafd++);~_0x30fc88&&(_0x3fe7d0=_0x3fb190%0x4?_0x3fe7d0*0x40+_0x30fc88:_0x30fc88,_0x3fb190++%0x4)?_0x2a66aa+=_0x59803b['charCodeAt'](_0x48aafd+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x3fe7d0>>(-0x2*_0x3fb190&0x6)):_0x3fb190:0x0){_0x30fc88=_0x43b65e['indexOf'](_0x30fc88);}for(let _0x1c2996=0x0,_0x1fccde=_0x2a66aa['length'];_0x1c2996<_0x1fccde;_0x1c2996++){_0x26ce2d+='%'+('00'+_0x2a66aa['charCodeAt'](_0x1c2996)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x26ce2d);};const _0xd32e7f=function(_0xf461e8,_0x4b072f){let _0x51bb4b=[],_0x1b644f=0x0,_0x3366d0,_0xe93a60='';_0xf461e8=_0xbd4d46(_0xf461e8);let _0x57d495;for(_0x57d495=0x0;_0x57d495<0x100;_0x57d495++){_0x51bb4b[_0x57d495]=_0x57d495;}for(_0x57d495=0x0;_0x57d495<0x100;_0x57d495++){_0x1b644f=(_0x1b644f+_0x51bb4b[_0x57d495]+_0x4b072f['charCodeAt'](_0x57d495%_0x4b072f['length']))%0x100,_0x3366d0=_0x51bb4b[_0x57d495],_0x51bb4b[_0x57d495]=_0x51bb4b[_0x1b644f],_0x51bb4b[_0x1b644f]=_0x3366d0;}_0x57d495=0x0,_0x1b644f=0x0;for(let _0x284eea=0x0;_0x284eea<_0xf461e8['length'];_0x284eea++){_0x57d495=(_0x57d495+0x1)%0x100,_0x1b644f=(_0x1b644f+_0x51bb4b[_0x57d495])%0x100,_0x3366d0=_0x51bb4b[_0x57d495],_0x51bb4b[_0x57d495]=_0x51bb4b[_0x1b644f],_0x51bb4b[_0x1b644f]=_0x3366d0,_0xe93a60+=String['fromCharCode'](_0xf461e8['charCodeAt'](_0x284eea)^_0x51bb4b[(_0x51bb4b[_0x57d495]+_0x51bb4b[_0x1b644f])%0x100]);}return _0xe93a60;};_0x336b['WaDAGw']=_0xd32e7f,_0x336b['ulcPng']={},_0x336b['ApucGB']=!![];}const _0x56d4c8=_0x29ba0b[0x0],_0x336bc5=_0x1f799c+_0x56d4c8,_0x5677dd=_0x336b['ulcPng'][_0x336bc5];if(!_0x5677dd){if(_0x336b['KXbypr']===undefined){const _0x3cc534=function(_0x5316d5){this['kIghPG']=_0x5316d5,this['MyfRvz']=[0x1,0x0,0x0],this['KKWlzk']=function(){return'newState';},this['CznZQs']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['HubDcY']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x3cc534['prototype']['fSoVsG']=function(){const _0xe55f4f=new RegExp(this['CznZQs']+this['HubDcY']),_0x18b0ed=_0xe55f4f['test'](this['KKWlzk']['toString']())?--this['MyfRvz'][0x1]:--this['MyfRvz'][0x0];return this['tVUwvS'](_0x18b0ed);},_0x3cc534['prototype']['tVUwvS']=function(_0x2e5782){if(!Boolean(~_0x2e5782))return _0x2e5782;return this['YWIhsE'](this['kIghPG']);},_0x3cc534['prototype']['YWIhsE']=function(_0x582bcf){for(let _0x1f8cac=0x0,_0x2a86c=this['MyfRvz']['length'];_0x1f8cac<_0x2a86c;_0x1f8cac++){this['MyfRvz']['push'](Math['round'](Math['random']())),_0x2a86c=this['MyfRvz']['length'];}return _0x582bcf(this['MyfRvz'][0x0]);},new _0x3cc534(_0x336b)['fSoVsG'](),_0x336b['KXbypr']=!![];}_0x4580ec=_0x336b['WaDAGw'](_0x4580ec,_0x17a766),_0x336b['ulcPng'][_0x336bc5]=_0x4580ec;}else _0x4580ec=_0x5677dd;return _0x4580ec;}var __createBinding=this&&this[_0x5dc116(0x157,'Va)^')]||(Object['create']?function(_0x2eb1e2,_0x167ab0,_0x1a201d,_0xfba745){const _0x45be8d=_0x5dc116,_0x33435c={'hVvHT':function(_0xb8dc76,_0x4a5670){return _0xb8dc76===_0x4a5670;},'raXof':function(_0x328829,_0x439e68){return _0x328829 in _0x439e68;},'nJCrc':_0x45be8d(0x289,'ao]8')};if(_0x33435c[_0x45be8d(0x2a5,'BYzX')](_0xfba745,undefined))_0xfba745=_0x1a201d;var _0x2f71e0=Object[_0x45be8d(0x269,'@nei')](_0x167ab0,_0x1a201d);(!_0x2f71e0||(_0x33435c[_0x45be8d(0x172,'v*52')](_0x33435c[_0x45be8d(0x1c7,'cDQC')],_0x2f71e0)?!_0x167ab0[_0x45be8d(0x1cc,'v*52')]:_0x2f71e0[_0x45be8d(0x107,'wl1#')]||_0x2f71e0[_0x45be8d(0x290,'hKe#')]))&&(_0x2f71e0={'enumerable':!![],'get':function(){return _0x167ab0[_0x1a201d];}}),Object[_0x45be8d(0x240,'(iDu')](_0x2eb1e2,_0xfba745,_0x2f71e0);}:function(_0x295ea4,_0x1bafb6,_0x1825e1,_0x2e15d4){if(_0x2e15d4===undefined)_0x2e15d4=_0x1825e1;_0x295ea4[_0x2e15d4]=_0x1bafb6[_0x1825e1];}),__setModuleDefault=this&&this[_0x5dc116(0x23f,'MiyG')]||(Object[_0x5dc116(0xeb,'BYzX')]?function(_0x22be2a,_0x426ad3){const _0x511401=_0x5dc116;Object['defineProperty'](_0x22be2a,_0x511401(0x15a,'Va)^'),{'enumerable':!![],'value':_0x426ad3});}:function(_0x516d47,_0x1137c0){const _0x54476b=_0x5dc116,_0x4191b8={'OVIjJ':_0x54476b(0xc1,'lYl@')};_0x516d47[_0x4191b8['OVIjJ']]=_0x1137c0;}),__importStar=this&&this[_0x5dc116(0xd7,'S8N0')]||(function(){const _0xd50a0f=_0x5dc116,_0x567e43={'YlBpA':function(_0x309733,_0x589ee3){return _0x309733(_0x589ee3);},'lLuJW':function(_0x4632c3,_0x56f8ad){return _0x4632c3<_0x56f8ad;},'maEoR':function(_0x13f710,_0x4110be){return _0x13f710!==_0x4110be;},'WKWpW':'default','skKUk':function(_0x4a2bbf,_0x585bbc,_0x7e95f0,_0x182095){return _0x4a2bbf(_0x585bbc,_0x7e95f0,_0x182095);},'HYvDx':function(_0x298a9e,_0x5813c2,_0x405153){return _0x298a9e(_0x5813c2,_0x405153);},'nKERm':function(_0x1a20cc){return _0x1a20cc();}},_0x3b12e5=(function(){let _0x45eaff=!![];return function(_0x3b34e7,_0x51037a){const _0x261037=_0x45eaff?function(){const _0x434524=_0x336b;if(_0x51037a){const _0x5ed386=_0x51037a[_0x434524(0x260,'xhgm')](_0x3b34e7,arguments);return _0x51037a=null,_0x5ed386;}}:function(){};return _0x45eaff=![],_0x261037;};}()),_0x3df4b5=_0x567e43[_0xd50a0f(0x213,'BYzX')](_0x3b12e5,this,function(){const _0x4658f5=_0xd50a0f;return _0x3df4b5['toString']()[_0x4658f5(0x14c,'wl1#')](_0x4658f5(0x160,'&2ao'))[_0x4658f5(0x268,'(iDu')]()['constructor'](_0x3df4b5)[_0x4658f5(0x1de,'jH1*')]('(((.+)+)+)+$');});_0x567e43[_0xd50a0f(0x297,'01hb')](_0x3df4b5);var _0x1c501e=function(_0x116336){const _0x3b4ea6=_0xd50a0f;return _0x1c501e=Object[_0x3b4ea6(0x1db,'&2ao')]||function(_0x330cb2){const _0x17d2a8=_0x3b4ea6;var _0x55d4e7=[];for(var _0x297357 in _0x330cb2)if(Object[_0x17d2a8(0x12b,'2XT6')][_0x17d2a8(0x29a,'2XT6')][_0x17d2a8(0x117,'01hb')](_0x330cb2,_0x297357))_0x55d4e7[_0x55d4e7[_0x17d2a8(0x15c,'lYl@')]]=_0x297357;return _0x55d4e7;},_0x1c501e(_0x116336);};return function(_0xab4ca4){const _0x201597=_0xd50a0f,_0x4d465e=_0x201597(0x229,'jH1*')[_0x201597(0x1ca,'%QZz')]('|');let _0x5caf03=0x0;while(!![]){switch(_0x4d465e[_0x5caf03++]){case'0':__setModuleDefault(_0x29c41a,_0xab4ca4);continue;case'1':if(_0xab4ca4!=null){for(var _0x7a40fd=_0x567e43['YlBpA'](_0x1c501e,_0xab4ca4),_0x225aed=0x0;_0x567e43[_0x201597(0x265,'cDQC')](_0x225aed,_0x7a40fd['length']);_0x225aed++)if(_0x567e43[_0x201597(0x1af,'%QZz')](_0x7a40fd[_0x225aed],_0x567e43[_0x201597(0x1f8,'2NJK')]))_0x567e43[_0x201597(0x11a,'RnGc')](__createBinding,_0x29c41a,_0xab4ca4,_0x7a40fd[_0x225aed]);}continue;case'2':var _0x29c41a={};continue;case'3':return _0x29c41a;case'4':if(_0xab4ca4&&_0xab4ca4[_0x201597(0x21a,'xhgm')])return _0xab4ca4;continue;}break;}};}()),__importDefault=this&&this['__importDefault']||function(_0x187788){const _0xfb5101=_0x5dc116;return _0x187788&&_0x187788[_0xfb5101(0x1a9,'01hb')]?_0x187788:{'default':_0x187788};};Object[_0x5dc116(0x278,'#fNc')](exports,'__esModule',{'value':!![]}),exports[_0x5dc116(0x2a2,'*mL@')]=startServer;const express_1=__importDefault(require(_0x5dc116(0xc2,'0TuM'))),http_1=require('http'),ws_1=require('ws'),path_1=__importDefault(require(_0x5dc116(0x16e,'5ACa'))),os_1=__importDefault(require('os')),fs_1=__importDefault(require('fs')),promises_1=__importDefault(require(_0x5dc116(0x147,'lYl@'))),child_process_1=require(_0x5dc116(0x24b,'5ACa')),util_1=require(_0x5dc116(0x1d2,'2NJK')),pty=__importStar(require('node-pty')),uuid_1=require(_0x5dc116(0x276,'BYzX')),chokidar_1=__importDefault(require(_0x5dc116(0x135,'0Zj7'))),crypto_1=__importDefault(require(_0x5dc116(0x1e4,'@N%$')));typeof globalThis['DOMMatrix']==='undefined'&&(globalThis[_0x5dc116(0x17a,'01hb')]=class DOMMatrix{constructor(_0x485c74){const _0x5bccc3=_0x5dc116;this['a']=0x1,this['b']=0x0,this['c']=0x0,this['d']=0x1,this['e']=0x0,this['f']=0x0,this[_0x5bccc3(0xfe,'aUm3')]=0x1,this[_0x5bccc3(0x217,'xotL')]=0x0,this['m13']=0x0,this[_0x5bccc3(0x1a2,'wl1#')]=0x0,this[_0x5bccc3(0x22a,'MiyG')]=0x0,this[_0x5bccc3(0x1fd,'H3RW')]=0x1,this[_0x5bccc3(0x167,'&2ao')]=0x0,this[_0x5bccc3(0x264,'lYl@')]=0x0,this[_0x5bccc3(0x29f,'(Qw)')]=0x0,this[_0x5bccc3(0x24e,'ibA)')]=0x0,this[_0x5bccc3(0x183,'hKe#')]=0x1,this[_0x5bccc3(0x267,'J%W5')]=0x0,this['m41']=0x0,this[_0x5bccc3(0xe4,'ao]8')]=0x0,this[_0x5bccc3(0x146,'2NJK')]=0x0,this[_0x5bccc3(0x14d,'cDQC')]=0x1,this['is2D']=!![],this[_0x5bccc3(0x24a,'1Cwj')]=!![];}static[_0x5dc116(0x221,'2NJK')](){const _0x52bd20=_0x5dc116;return new globalThis[(_0x52bd20(0x242,'sIE9'))]();}static[_0x5dc116(0x116,'1Cwj')](){const _0x39fe8b=_0x5dc116;return new globalThis[(_0x39fe8b(0xba,'ibA)'))]();}static[_0x5dc116(0x16d,'lYl@')](){const _0x1cbda7=_0x5dc116;return new globalThis[(_0x1cbda7(0x234,'u8C*'))]();}[_0x5dc116(0x248,'@nei')](){const _0x165078=_0x5dc116;return new globalThis[(_0x165078(0x275,'J%W5'))]();}[_0x5dc116(0xca,'MiyG')](){const _0xd89a9f=_0x5dc116;return new globalThis[(_0xd89a9f(0x115,'cDQC'))]();}[_0x5dc116(0x113,'lYl@')](){const _0x3d968c=_0x5dc116;return new globalThis[(_0x3d968c(0x275,'J%W5'))]();}[_0x5dc116(0x18b,'u8C*')](){const _0x5d1ae0=_0x5dc116;return new globalThis[(_0x5d1ae0(0x14a,'*mL@'))]();}['toFloat32Array'](){return new Float32Array(0x10);}['toFloat64Array'](){return new Float64Array(0x10);}[_0x5dc116(0x1d6,'t*YI')](){const _0x1c17a3=_0x5dc116,_0xfa1966={'kvlYo':_0x1c17a3(0x1fc,'#fNc')};return _0xfa1966[_0x1c17a3(0x145,'jH1*')];}});const pdfParse=require('pdf-parse'),mammoth=require(_0x5dc116(0xb4,'A0Rv')),execAsync=(0x0,util_1[_0x5dc116(0x1f9,'MiyG')])(child_process_1[_0x5dc116(0xda,'ibA)')]),AI_SIGNATURES=[{'pattern':/claude\s+code/i,'name':_0x5dc116(0x112,'BYzX'),'color':_0x5dc116(0x1e8,'Va)^')},{'pattern':/opencode/i,'name':_0x5dc116(0x18d,'g%3v'),'color':_0x5dc116(0x17d,'jH1*')},{'pattern':/aider/i,'name':'aider','color':'#A27FD4'},{'pattern':/continue/i,'name':_0x5dc116(0x189,'hKe#'),'color':_0x5dc116(0x136,'5ACa')},{'pattern':/\$\s*claude\b/,'name':'claude\x20code','color':'#D4A27F'}],ANSI_RE=/\x1b\[[0-9;]*[mGKHFABCDJsu]|\x1b\][^\x07]*\x07|\x1b[()][AB012]/g,SHELL_PROMPT_PATTERN=/(?:^|\n)\s{0,6}[$%❯>]\s{0,2}$/;class ProcessDetector{constructor(){const _0x3c11e0=_0x5dc116,_0x5f4595={'hBOmQ':'4|3|0|2|5|1'},_0x1df46b=_0x5f4595['hBOmQ']['split']('|');let _0x521677=0x0;while(!![]){switch(_0x1df46b[_0x521677++]){case'0':this[_0x3c11e0(0x1d3,'xhgm')]=null;continue;case'1':this[_0x3c11e0(0x28c,'wGUA')]=0xbb8;continue;case'2':this['hasAI']=![];continue;case'3':this[_0x3c11e0(0x19f,'%QZz')]=0x800;continue;case'4':this[_0x3c11e0(0x23e,'xhgm')]='';continue;case'5':this['detectedAt']=0x0;continue;}break;}}['detect'](_0x1e1dfa){const _0x20ad98=_0x5dc116,_0x215107={'RPOXo':function(_0x12661,_0x4c8ce9){return _0x12661<_0x4c8ce9;},'zXNSi':_0x20ad98(0x13c,'lYl@')};this[_0x20ad98(0xce,'J%W5')]=(this[_0x20ad98(0x1ad,'1Cwj')]+_0x1e1dfa)[_0x20ad98(0xf4,'BYzX')](-this['windowSize']);if(!this[_0x20ad98(0xdc,'m#z7')])for(const _0x5d246d of AI_SIGNATURES){if(_0x5d246d[_0x20ad98(0x225,'2NJK')]['test'](this[_0x20ad98(0xb0,'RnGc')]))return this['currentAI']={'name':_0x5d246d[_0x20ad98(0x1e9,'jH1*')],'color':_0x5d246d[_0x20ad98(0x277,'wl1#')]},this[_0x20ad98(0xe3,'*mL@')]=!![],this['detectedAt']=Date[_0x20ad98(0x294,'MiyG')](),_0x20ad98(0x190,'A0Rv');}else{if(_0x215107[_0x20ad98(0x1aa,'2XT6')](Date[_0x20ad98(0x194,'U*(c')]()-this[_0x20ad98(0xb1,'*mL@')],this[_0x20ad98(0x162,'pSo*')]))return null;const _0x1d06fc=this[_0x20ad98(0x126,'m#z7')][_0x20ad98(0x202,'RnGc')](ANSI_RE,''),_0x323519=_0x1d06fc[_0x20ad98(0xff,'5ACa')]('\x0a')[_0x20ad98(0xf6,'0TuM')](-0x3)['join']('\x0a');if(SHELL_PROMPT_PATTERN[_0x20ad98(0x1d4,'cDQC')](_0x323519))return this[_0x20ad98(0x1df,'5ACa')]=null,this[_0x20ad98(0xde,'0Zj7')]=![],_0x215107[_0x20ad98(0x25d,'wl1#')];}return null;}[_0x5dc116(0x2a6,'U*(c')](){const _0x35a8aa=_0x5dc116;return this[_0x35a8aa(0x29d,'*mL@')];}}function createZdotdir(){const _0x9adfe=_0x5dc116,_0x597fa8={'OeKVM':_0x9adfe(0xe5,'RnGc'),'PxWMH':_0x9adfe(0x168,'J%W5'),'BkoAE':_0x9adfe(0xbd,'SgBg'),'PrlBY':_0x9adfe(0x286,'Va)^'),'ubMjs':'#\x20aiTerm:\x20source\x20real\x20.zshrc\x20first','qnCNb':_0x9adfe(0x10b,'H3RW'),'doxzQ':_0x9adfe(0x188,'%QZz'),'uMhYN':_0x9adfe(0x174,'SgBg'),'XZXaU':_0x9adfe(0x249,'ibA)'),'SEAzh':_0x9adfe(0x15f,'ao]8'),'gUSli':_0x9adfe(0x263,'U*(c'),'unJxa':_0x9adfe(0x104,'hKe#')},_0xfc869c=fs_1[_0x9adfe(0x120,'01hb')][_0x9adfe(0x1a7,'U*(c')](path_1['default'][_0x9adfe(0xd3,'S8N0')](os_1['default'][_0x9adfe(0x14b,'2NJK')](),_0x597fa8[_0x9adfe(0x208,'&2ao')])),_0x129d95=[_0x597fa8[_0x9adfe(0x1b4,'@N%$')],_0x597fa8[_0x9adfe(0x24f,'IJVq')]]['join']('\x0a');fs_1[_0x9adfe(0x284,'lYbt')][_0x9adfe(0x23c,'%QZz')](path_1['default'][_0x9adfe(0x1b7,'wl1#')](_0xfc869c,_0x597fa8['PrlBY']),_0x129d95);const _0xf5fe7d=[_0x597fa8[_0x9adfe(0x1c5,'5ACa')],_0x9adfe(0x182,'01hb'),_0x597fa8['qnCNb'],'',_0x9adfe(0x132,'(iDu'),_0x597fa8[_0x9adfe(0x298,'xotL')],_0x9adfe(0x142,'1Cwj'),_0x597fa8[_0x9adfe(0x186,'t*YI')],_0x597fa8[_0x9adfe(0x133,'@N%$')],'}',_0x597fa8[_0x9adfe(0x259,'i&@s')],'',_0x9adfe(0x279,'%QZz'),_0x9adfe(0x122,'BYzX'),'}',_0x597fa8['gUSli'],_0x597fa8[_0x9adfe(0x1c3,'m#z7')],_0x9adfe(0x274,'%QZz')][_0x9adfe(0xae,'2NJK')]('\x0a');return fs_1[_0x9adfe(0x284,'lYbt')][_0x9adfe(0x19a,'aUm3')](path_1[_0x9adfe(0x203,'A0Rv')]['join'](_0xfc869c,_0x9adfe(0x1fe,'&2ao')),_0xf5fe7d),_0xfc869c;}class WebPtyManager{constructor(_0x1c25c4){const _0x3ebcb2=_0x5dc116;this[_0x3ebcb2(0x185,'Va)^')]=_0x1c25c4,this[_0x3ebcb2(0x258,'U*(c')]=new Map(),this['resizeTimers']=new Map();}[_0x5dc116(0x10a,'RnGc')](_0x286ce2){const _0x463eb5=_0x5dc116,_0x2ae7aa={'aRvHV':_0x463eb5(0x175,'g%3v'),'FrTCn':function(_0x144003,_0x2ce980){return _0x144003===_0x2ce980;},'WaqHs':_0x463eb5(0x235,'2NJK'),'HJumH':'xterm-256color'},_0x1f8d5c=(0x0,uuid_1['v4'])(),_0x15f617=_0x2ae7aa[_0x463eb5(0x293,'jH1*')](process[_0x463eb5(0x11f,'t*YI')],'win32')?_0x2ae7aa['WaqHs']:process.env.SHELL??'/bin/bash',_0x22738b=_0x286ce2[_0x463eb5(0x27f,'jH1*')]??process.env.HOME??'/',_0x4ec49c=_0x15f617[_0x463eb5(0x143,'ibA)')]('zsh'),_0x2f5469=_0x4ec49c?{'ZDOTDIR':createZdotdir()}:{'PS1':'\x20','PROMPT':'\x20'},_0x5c0c88=pty[_0x463eb5(0x1b3,'ibA)')](_0x15f617,['-l'],{'name':_0x2ae7aa[_0x463eb5(0xa5,'IJVq')],'cols':0x50,'rows':0x18,'cwd':_0x22738b,'env':{...process.env,'TERM':_0x463eb5(0xac,'xotL'),'COLORTERM':_0x463eb5(0xe1,'hKe#'),..._0x2f5469,..._0x286ce2['env']}}),_0x4b446f=new ProcessDetector(),_0x4b9583={'id':_0x1f8d5c,'pty':_0x5c0c88,'buffer':[],'flushTimer':null,'detector':_0x4b446f};return _0x5c0c88[_0x463eb5(0xc3,'0Zj7')](_0xcb426f=>{const _0x1da954=_0x463eb5,_0x3a344c={'ZiHwC':function(_0x2d307d,_0x4e3658){return _0x2d307d===_0x4e3658;},'AgUmW':_0x1da954(0x199,'0Zj7')};_0x4b9583[_0x1da954(0xb9,'wGUA')][_0x1da954(0x12d,'aUm3')](_0xcb426f),!_0x4b9583[_0x1da954(0x243,'*mL@')]&&(_0x4b9583[_0x1da954(0x296,'BYzX')]=setTimeout(()=>{const _0x700898=_0x1da954;if(_0x4b9583['buffer'][_0x700898(0x210,'*mL@')]>0x0){const _0x9be8ee=_0x4b9583['buffer'][_0x700898(0x1b7,'wl1#')]('');_0x4b9583[_0x700898(0x171,'V]Zu')]=[],_0x4b9583[_0x700898(0x119,'u8C*')]=null,this['send'](_0x700898(0x108,'wl1#'),[_0x1f8d5c,_0x9be8ee]);const _0x130ec1=_0x4b446f[_0x700898(0x1cb,'lYbt')](_0x9be8ee);if(_0x130ec1===_0x700898(0x190,'A0Rv')){const _0xab324e=_0x4b446f[_0x700898(0x257,'%QZz')]();if(_0xab324e)this[_0x700898(0xe0,'i&@s')]('pty:ai-detected',[_0x1f8d5c,_0xab324e]);}else _0x3a344c[_0x700898(0xa2,'Va)^')](_0x130ec1,_0x3a344c[_0x700898(0xd0,'5ACa')])&&this[_0x700898(0x212,'0TuM')](_0x700898(0x2a4,'u8C*'),[_0x1f8d5c]);}},0x1));}),_0x5c0c88[_0x463eb5(0x1ff,'J%W5')](({exitCode:_0x430101})=>{const _0x4e55ce=_0x463eb5;if(_0x4b9583[_0x4e55ce(0x241,'v*52')])clearTimeout(_0x4b9583[_0x4e55ce(0x1fb,'vSgj')]);this[_0x4e55ce(0x163,'%QZz')](_0x2ae7aa[_0x4e55ce(0x280,'vSgj')],[_0x1f8d5c,_0x430101??0x0]),this['sessions'][_0x4e55ce(0x1dc,'H3RW')](_0x1f8d5c);}),this[_0x463eb5(0x22f,'pSo*')][_0x463eb5(0x25a,'IJVq')](_0x1f8d5c,_0x4b9583),_0x1f8d5c;}[_0x5dc116(0x1ac,'Va)^')](_0x4be436,_0x403a7e){const _0x172274=_0x5dc116;this[_0x172274(0x10c,'01hb')]['get'](_0x4be436)?.[_0x172274(0x11e,'(Qw)')][_0x172274(0x1ec,'@nei')](_0x403a7e);}[_0x5dc116(0xc9,'MiyG')](_0x4bb7b4,_0x2192ea,_0x522867){const _0x4637e1=_0x5dc116,_0x428515=this[_0x4637e1(0xa4,'Va)^')][_0x4637e1(0x1dd,'0TuM')](_0x4bb7b4);if(_0x428515)clearTimeout(_0x428515);const _0x33e5fe=setTimeout(()=>{const _0x1482a5=_0x4637e1;this[_0x1482a5(0xf0,'24(0')][_0x1482a5(0x164,'#fNc')](_0x4bb7b4)?.[_0x1482a5(0x245,'m#z7')][_0x1482a5(0xc5,'0TuM')](_0x2192ea,_0x522867),this[_0x1482a5(0xb7,'S8N0')][_0x1482a5(0x1e3,'vSgj')](_0x4bb7b4);},0x32);this[_0x4637e1(0x1bd,'H3RW')][_0x4637e1(0xd8,'*mL@')](_0x4bb7b4,_0x33e5fe);}[_0x5dc116(0x26e,'vSgj')](_0x30e078){const _0x572cbb=_0x5dc116,_0x778eda={'zBCCs':function(_0x58b655,_0x5a009a){return _0x58b655(_0x5a009a);}},_0x37ad14=this[_0x572cbb(0x206,'u8C*')][_0x572cbb(0x1bc,'2XT6')](_0x30e078);if(_0x37ad14){if(_0x37ad14['flushTimer'])_0x778eda['zBCCs'](clearTimeout,_0x37ad14[_0x572cbb(0x271,'xotL')]);_0x37ad14[_0x572cbb(0x223,'ao]8')][_0x572cbb(0x232,'0TuM')](),this[_0x572cbb(0x13f,'wGUA')][_0x572cbb(0xfc,'xotL')](_0x30e078);}}[_0x5dc116(0x1e0,'%QZz')](){const _0x536a42=_0x5dc116;for(const [_0x2aa4a2]of this[_0x536a42(0xf8,'lYbt')])this[_0x536a42(0x1b2,'wGUA')](_0x2aa4a2);}}async function getContentSize(_0xee7079,_0x3f209a){const _0x59aad1=_0x5dc116,_0x6ed009={'gdLpj':_0x59aad1(0x288,'lYbt'),'lPvpq':function(_0x3ef886,_0x457e4c){return _0x3ef886(_0x457e4c);},'JzeXU':function(_0x3491f5,_0x2561d3){return _0x3491f5===_0x2561d3;}};try{if(_0x3f209a===_0x6ed009['gdLpj']){const _0x171ac2=await promises_1[_0x59aad1(0xc1,'lYl@')][_0x59aad1(0x178,'SgBg')](_0xee7079),_0x50440a=await _0x6ed009['lPvpq'](pdfParse,_0x171ac2);return _0x50440a[_0x59aad1(0x21c,'&2ao')][_0x59aad1(0x12f,'V]Zu')];}if(_0x6ed009[_0x59aad1(0x11c,'BYzX')](_0x3f209a,_0x59aad1(0x11b,'J%W5'))){const _0x1e9fef=await promises_1['default'][_0x59aad1(0x17e,'jH1*')](_0xee7079),_0x4b6bd7=await mammoth[_0x59aad1(0x201,'cDQC')]({'buffer':_0x1e9fef});return _0x4b6bd7[_0x59aad1(0x25b,'01hb')][_0x59aad1(0xf5,'@nei')];}}catch{}return undefined;}class WebFsWatcher{constructor(_0x35c30d){const _0xe7a996=_0x5dc116;this[_0xe7a996(0x12a,'5ACa')]=_0x35c30d,this['watcher']=null,this[_0xe7a996(0x17f,'BYzX')]=null;}async[_0x5dc116(0x16a,'sIE9')](_0x562066){const _0x9dca1a=_0x5dc116,_0x3d677c={'UqTWX':function(_0x2e6d0d,_0x480d07,_0x44e597){return _0x2e6d0d(_0x480d07,_0x44e597);}},_0x2bffe3=path_1[_0x9dca1a(0x148,'#fNc')][_0x9dca1a(0x1a5,'2XT6')](_0x562066),_0x2f3a8e=await promises_1['default']['readdir'](_0x2bffe3,{'withFileTypes':!![]}),_0x2e1042=[];return await Promise[_0x9dca1a(0x195,'J%W5')](_0x2f3a8e[_0x9dca1a(0x266,'t*YI')](async _0x212263=>{const _0xef20fe=_0x9dca1a,_0x556d03=path_1[_0xef20fe(0x128,'0Zj7')][_0xef20fe(0x251,'u8C*')](_0x2bffe3,_0x212263['name']),_0x458a95=_0x212263[_0xef20fe(0x28f,'H3RW')](),_0x20f038=_0x458a95?'':path_1[_0xef20fe(0x292,'H3RW')][_0xef20fe(0xaf,'1Cwj')](_0x212263['name'])[_0xef20fe(0x228,'2XT6')](0x1)[_0xef20fe(0xb5,'RnGc')](),_0x265be7=_0x458a95?null:await promises_1[_0xef20fe(0x111,'U*(c')][_0xef20fe(0x1d7,'lYl@')](_0x556d03)[_0xef20fe(0x2a1,'ibA)')](()=>null),_0x531ff6=_0x458a95?undefined:await _0x3d677c['UqTWX'](getContentSize,_0x556d03,_0x20f038);_0x2e1042[_0xef20fe(0x20e,'0TuM')]({'name':_0x212263[_0xef20fe(0xe9,'S8N0')],'path':_0x556d03,'isDirectory':_0x458a95,'ext':_0x20f038,'size':_0x265be7?.[_0xef20fe(0x13a,'H3RW')],'contentSize':_0x531ff6});})),_0x2e1042[_0x9dca1a(0x1a4,'xhgm')]((_0x425c7e,_0x28db65)=>{const _0x452400=_0x9dca1a;if(_0x425c7e['isDirectory']&&!_0x28db65[_0x452400(0x237,'i&@s')])return-0x1;if(!_0x425c7e[_0x452400(0x291,'5ACa')]&&_0x28db65['isDirectory'])return 0x1;return _0x425c7e[_0x452400(0x28a,'0Zj7')][_0x452400(0x22b,'SgBg')](_0x28db65['name']);}),_0x2e1042;}async[_0x5dc116(0x207,'U*(c')](_0x4ba3b6){const _0x480f36=_0x5dc116,_0x57e015={'UtmvS':_0x480f36(0xf9,'ibA)')};return promises_1['default']['readFile'](path_1[_0x480f36(0x138,'wl1#')]['resolve'](_0x4ba3b6),_0x57e015['UtmvS']);}async['writeFile'](_0x5c54f8,_0x4548fc){const _0x1ab4cf=_0x5dc116,_0x158af5={'gfkBJ':_0x1ab4cf(0x22e,'0TuM')};await promises_1[_0x1ab4cf(0x181,'t*YI')]['writeFile'](path_1[_0x1ab4cf(0xc1,'lYl@')][_0x1ab4cf(0x1a5,'2XT6')](_0x5c54f8),_0x4548fc,_0x158af5[_0x1ab4cf(0x16c,'SgBg')]);}async[_0x5dc116(0x255,'MiyG')](_0x99309f){const _0x31fa66=_0x5dc116;await promises_1[_0x31fa66(0xa0,'SgBg')]['mkdir'](path_1['default']['resolve'](_0x99309f),{'recursive':!![]});}async[_0x5dc116(0x169,'lYl@')](_0x2afc83,_0x4b17aa){const _0x1af38b=_0x5dc116;await promises_1[_0x1af38b(0x29c,'S8N0')][_0x1af38b(0x17b,'@nei')](path_1['default'][_0x1af38b(0x26c,'cDQC')](_0x2afc83),path_1[_0x1af38b(0xa8,'2XT6')][_0x1af38b(0x26c,'cDQC')](_0x4b17aa));}async[_0x5dc116(0x244,'sIE9')](_0x2d9318,_0x4890de){const _0x2b0ab3=_0x5dc116,_0x309391=path_1[_0x2b0ab3(0x250,'wGUA')]['resolve'](_0x2d9318),_0x10da4f=path_1[_0x2b0ab3(0x18e,'RnGc')][_0x2b0ab3(0x231,'*mL@')](path_1['default']['resolve'](_0x4890de),path_1[_0x2b0ab3(0x181,'t*YI')]['basename'](_0x309391));await promises_1['default']['cp'](_0x309391,_0x10da4f,{'recursive':!![]});}async[_0x5dc116(0x281,'5ACa')](_0xf4d027){const _0x1b1b35=_0x5dc116;await promises_1[_0x1b1b35(0xf2,'1Cwj')]['rm'](path_1[_0x1b1b35(0x159,'y6jG')][_0x1b1b35(0x246,'ao]8')](_0xf4d027),{'recursive':!![],'force':!![]});}async['writeBinaryFile'](_0xf28e76,_0xc162e1){const _0x1a18de=_0x5dc116,_0x306d1c={'fdKQh':_0x1a18de(0x173,'S8N0')},_0x10774b=Buffer[_0x1a18de(0xc6,'U*(c')](_0xc162e1,_0x306d1c[_0x1a18de(0x220,'(Qw)')]);await promises_1[_0x1a18de(0x148,'#fNc')][_0x1a18de(0x1e2,'u8C*')](path_1['default'][_0x1a18de(0x118,'U*(c')](_0xf28e76),_0x10774b);}[_0x5dc116(0x144,'#fNc')](_0x5c876d){const _0x368f92=_0x5dc116,_0x228d2f={'qtZea':function(_0x547abb,_0x51a44b){return _0x547abb===_0x51a44b;},'ZJtGc':_0x368f92(0x18f,'lYbt')},_0x36fad0=path_1[_0x368f92(0x18e,'RnGc')]['resolve'](_0x5c876d);if(_0x228d2f[_0x368f92(0x287,'m#z7')](this[_0x368f92(0x161,'lYbt')],_0x36fad0))return;this[_0x368f92(0x18a,'1Cwj')]?.[_0x368f92(0x27d,'g%3v')](),this['watchRoot']=_0x36fad0,this['watcher']=chokidar_1[_0x368f92(0x124,'5ACa')][_0x368f92(0x25f,'m#z7')](_0x36fad0,{'ignoreInitial':!![],'ignored':[/(^|[/\\])\../,/node_modules/,/\.git/,/dist/,/build/],'depth':0x5,'awaitWriteFinish':{'stabilityThreshold':0x64,'pollInterval':0x64}});const _0x3546db=(_0x2c6c42,_0x4eb692)=>this[_0x368f92(0x2a0,'lYbt')]('fs:watch',[{'type':_0x2c6c42,'path':_0x4eb692}]);this[_0x368f92(0x2a3,'jH1*')]['on'](_0x228d2f[_0x368f92(0x20c,'24(0')],_0x4e3ed0=>_0x3546db(_0x368f92(0x1c2,'pSo*'),_0x4e3ed0))['on'](_0x368f92(0x200,'01hb'),_0x281d30=>_0x3546db(_0x368f92(0x19e,'0Zj7'),_0x281d30))['on']('change',_0x30d1d3=>_0x3546db(_0x368f92(0x230,'V]Zu'),_0x30d1d3))['on'](_0x368f92(0x177,'5ACa'),_0x299949=>_0x3546db(_0x368f92(0x215,'RnGc'),_0x299949))['on'](_0x368f92(0x13d,'lYl@'),_0x47e510=>_0x3546db(_0x368f92(0x10f,'@nei'),_0x47e510));}[_0x5dc116(0x18c,'lYl@')](){const _0x998a04=_0x5dc116;this[_0x998a04(0x224,'t*YI')]?.[_0x998a04(0x1e6,'ao]8')](),this[_0x998a04(0xc8,'hKe#')]=null;}}const MAX_VERSIONS=0x32;class WebVersionsManager{['getVersionsDir'](){const _0x167ff4=_0x5dc116,_0x154ff3={'eiJmG':'md-versions'};return path_1[_0x167ff4(0x18e,'RnGc')][_0x167ff4(0x205,'i&@s')](os_1['default'][_0x167ff4(0xa1,'i&@s')](),_0x167ff4(0x2a7,'lYbt'),_0x154ff3['eiJmG']);}[_0x5dc116(0x131,'(Qw)')](_0x316d2c){const _0x18bf36=_0x5dc116,_0x483b59={'DmOrf':'sha256','eDQGq':'hex'};return crypto_1[_0x18bf36(0xe2,'24(0')]['createHash'](_0x483b59[_0x18bf36(0x130,'lYbt')])[_0x18bf36(0xcc,'H3RW')](_0x316d2c)['digest'](_0x483b59[_0x18bf36(0x1ef,'u8C*')]);}async[_0x5dc116(0x1b9,'xotL')](_0x2164f6){const _0x116d45=_0x5dc116,_0x5b76d6=path_1[_0x116d45(0xe2,'24(0')][_0x116d45(0xed,'xotL')](this[_0x116d45(0x1bb,'ao]8')](),this[_0x116d45(0x187,'jH1*')](_0x2164f6)+_0x116d45(0x179,'cDQC'));try{const _0x1c3f34=await promises_1[_0x116d45(0x292,'H3RW')][_0x116d45(0x27b,'g%3v')](_0x5b76d6,'utf8');return JSON[_0x116d45(0x121,'BYzX')](_0x1c3f34)['versions']??[];}catch{return[];}}async[_0x5dc116(0xf3,'0TuM')](_0x150c54,_0x18e4b3){const _0xf0c0be=_0x5dc116,_0xc4489a=this[_0xf0c0be(0x218,'24(0')]();await promises_1[_0xf0c0be(0x1ba,'IJVq')][_0xf0c0be(0xb2,'*mL@')](_0xc4489a,{'recursive':!![]});const _0x2730ae=path_1[_0xf0c0be(0x181,'t*YI')]['join'](_0xc4489a,this['getKey'](_0x150c54)+_0xf0c0be(0x101,'H3RW'));await promises_1[_0xf0c0be(0x1b0,'m#z7')][_0xf0c0be(0xad,'#fNc')](_0x2730ae,JSON['stringify']({'filePath':_0x150c54,'versions':_0x18e4b3}),_0xf0c0be(0x155,'aUm3'));}async[_0x5dc116(0xb8,'hKe#')](_0x80d241,_0x388cdc){const _0x4df043=_0x5dc116,_0x372d1f={'JGgpp':function(_0x248afb,_0x13de23){return _0x248afb===_0x13de23;},'nMGLG':function(_0x2303da,_0x1397f6){return _0x2303da+_0x1397f6;},'qKVXN':function(_0x16d090,_0x434729){return _0x16d090-_0x434729;},'uczSu':function(_0x2ca795,_0x358985){return _0x2ca795>_0x358985;},'oynmu':function(_0x30bd2e,_0x57e2a4){return _0x30bd2e-_0x57e2a4;}},_0x4115d5=await this[_0x4df043(0x15e,'wGUA')](_0x80d241);if(_0x4115d5[_0x4df043(0x192,'aUm3')]>0x0&&_0x372d1f['JGgpp'](_0x4115d5[_0x4115d5['length']-0x1]['content'],_0x388cdc))return null;const _0x2ce15e=_0x4115d5[_0x4df043(0xef,'cDQC')]>0x0?_0x372d1f[_0x4df043(0x1c1,'u8C*')](_0x4115d5[_0x372d1f[_0x4df043(0x226,'jH1*')](_0x4115d5[_0x4df043(0x19d,'0TuM')],0x1)][_0x4df043(0x29b,'aUm3')],0x1):0x1,_0x4c98fe=Date['now'](),_0x2b1155={'id':new Date(_0x4c98fe)[_0x4df043(0x1c9,'i&@s')](),'version':_0x2ce15e,'timestamp':_0x4c98fe,'content':_0x388cdc};_0x4115d5['push'](_0x2b1155);const _0x58495e=_0x372d1f[_0x4df043(0x299,'#fNc')](_0x4115d5[_0x4df043(0x261,'%QZz')],MAX_VERSIONS)?_0x4115d5[_0x4df043(0x227,'#fNc')](_0x372d1f[_0x4df043(0x233,'&2ao')](_0x4115d5['length'],MAX_VERSIONS)):_0x4115d5;return await this[_0x4df043(0x156,'BYzX')](_0x80d241,_0x58495e),{'id':_0x2b1155['id'],'version':_0x2b1155['version'],'timestamp':_0x2b1155['timestamp']};}async[_0x5dc116(0x1a3,'2NJK')](_0x161bee){const _0x4e45d2=_0x5dc116,_0x4797c2=await this[_0x4e45d2(0xd6,'24(0')](_0x161bee);return _0x4797c2[_0x4e45d2(0x24c,'0TuM')](({id:_0x580554,version:_0x285ade,timestamp:_0x48990d})=>({'id':_0x580554,'version':_0x285ade,'timestamp':_0x48990d}))['reverse']();}async[_0x5dc116(0x214,'&2ao')](_0x3292a5,_0x523223){const _0x5ed3c3=_0x5dc116,_0x30a16f=await this[_0x5ed3c3(0x141,'aUm3')](_0x3292a5);return _0x30a16f[_0x5ed3c3(0x154,'ibA)')](_0x1864fb=>_0x1864fb['id']===_0x523223)?.['content']??null;}}async function getGitBranch(_0xa6436c){const _0x910054=_0x5dc116,_0x25d740={'ndwoi':function(_0x12ccc7,_0x16d570,_0x11a553){return _0x12ccc7(_0x16d570,_0x11a553);},'adTDw':_0x910054(0xee,'ibA)')};try{const {stdout:_0x31941b}=await _0x25d740['ndwoi'](execAsync,_0x25d740[_0x910054(0x27a,'2NJK')],{'cwd':_0xa6436c});return _0x31941b[_0x910054(0x219,'24(0')]()||null;}catch{return null;}}function _0x56d4(){const _0x5b8a01=['WPiQAvWzWRHSW7iQ','DbqNEmkSWPrJoa','smonqSkytbNcGG','W53dGWBdSs9GW4RcNL0facXNcSobt1HV','x0f5W5qjEui','W6BdQ8kRkSkbWQ7dNuu','WPzwmvK','W51uW4OaW4C','WO0tuCohpSoh','WP0fvmoAnCoixCkSW5e','W7xdPSk+pCkp','lHJcPdRcNuNcR8kR','W5DHnHbeW4HoW4yiuCo2jW','sSkfW717','WO7cIZpdJWWxW7xcUGvjAwa','zxW/AX7dGsDJ','mmkpW4VdPHzwW7aMW4aiWP53','WPZcK8kAW5VdIq','vmkiWOW','WO4yf8odkComDmkSW5ddIIq','j8kpW5NdKajoW6C','W74dmKu','WQZcICkzASkQoK8htW','tCorW4/dPYBdPG','sef+W4CFFq','W4WgFG','W4n4jmoswW','vCkfWR7cGCk2','WQxdOmoR','gYFcSCknWPxdTbHXW4O4mu52k8otWPxdH8on','WPpcTmkdW7pdHa','cHJcTrRcM0xcQSk9gSk8W7y0W5GGW7q','zNS1Fa','u8kEW7ON','WOhdSGbbW5ZcUCok','W4OCW57cJrhdRepdKCodWOtdVXxcGNTl','W6hdUYBdKW','WPBcJSktW41hWOXa','W7eMW5VcNGhdOum','hIRcPSksWPdcOrK','WOqovSoul8ol','f8oyWQSXva0KFH0','mrlcTI0','jCkoemk8sfPVW6uWWRKCWQ7cPWpdNwRcUIOLW4uWW6O1WRmMvSoQWRlcMXNdJSkKWQ3dOa','dComW6tdNmo4W4ioW57cR8kWWOq/','WO7dV8k3WQ3dJSoSANlcKa','W7hdTCkRpCkcWPhdILODWQWXC8oE','W7ddQu/dRW','jmkpW4S','WPSos8oamSomD8kmW4C','WOemcCkGECkTdKzWpCo+W5qdWRddO0ldR8orzmorWQZdHrNdH8kQWPiPWOu','smowW78','xSofhSouW6OXEh06t2BdPb3cRJWqW5RdHmo8rfa2qmkXWR0PkCkHWQVcV8o4asTmhLWHW5BdJCo0lq7cVLb8BhddPCkhW5/cV8ou','WPOovSosnSog','W4HZp8kvddX/','W7mQW5hcMItdRepdNa','W4zklCksvG','WO4zv8oEfSocBCk3W4RdLW','g8kBCmk0','W6xdPu3dRSk+W7jQWRe','WQdcIfddKbXhW4GbW5K','WOpdOSojWPdcSaS','cqBcTSorWQS','xXrXvbBcSG','WOemfmkatSkmkNHdimk1WPG','WRNdU8o1WRPYWONcRM4','W4hcT8kp4Pw+4PwD4PsOW78BFEkwUokvR+kuHUkuU+kxO+kxG+kuJUkxREkxM+kwLokxVdhcTEkwP+kvU+kuN+kxJokuSokxQbVILPRIL6JIL5FdTUkvH+kxUEkvIokuPEkuTEkxO+kwOokuUokvUh3ILORIL5/ILO3ILltIL6tILAJILlxILiZILA4aW7BILAlILAFILz7IL5NILjRILypIL7FILA7ILihILjdILQi','hSkuAmk1fJm','W5njj8k0wSkQc00','WO9yoCoPuq','ladcMCkSWPJcUGvOW5C','WPC9BKKrWPS','WQFcLSkrAq','W5tdKSkWW4dcK2/dPq','WOxcGmkxW6BdOelcVri','WOBdTGzrW53cMmorWQ7cQG','z2JcJhtcPtekWP3dQ1pcV8kc','aK9VsCk2cuu','hshcP8keWO3dRI1fW6acmh9q','oCoWva','WOhdTGzA','W6yMW5pcMW','e2DHCCkn','WPdcGmkcW4NdG1i','WQpcRfhdUCkhW71QWR8vfSkUyCoa','n8kScCkZj8kuW7Cm','W5NdIHFdVIS/W5C','owPwWQDsW6a','WOShv8oapG','WQBdV8oPW650WP7cO38','W7NcMqyEWPVdOqa','WPJdUSkN','W6VdIvzyWOWMW6tcKW','WPldO8ooWOtcOvNdVrL9eG','sSkpW7j4eeS','WR/dUCkvWQJdPa','ssuV','hmkjeW','W6ddO0/dV8klW71Q','WOPmkK/cIqDCWRL1fCokimkexCkdW6xcK8o+W5FdT0OXWQNdSXzCW48dnSodWP8Teebel8kUaYtcJhNdICoFumoEWPKDwSoHnrzutSkhC8oEWOj/WP/cQSk5W5TUWRqRWRZcUCowWPTKW6PqEH1c','WOe9zKKjWPjX','CGqHz8kGWPq','uCkyW7vRawv9peNcRmojmmox','WRlcVhFdRSklW7HvWR0','D8kZW4zEiW','mJ7dMYVdOwK','DHGSv8kSWOi','W7tdPu/dR8kbW6rnWRbpuq','wcz1k3ZcOJZcLSkaWQm','CCotWONcIu8uW5GwW5uEWQDr','vHuR','vCovW4ZdTXNdSq47oCkEW6nt','WOpdG8oRW6i','W4bQW7xcU3ddHNW','qSkcFSkb','sIe8tCozWO3dNcDSWRHp','oCkMfmk0l8kDW6C','nXdcSCksWRtcOrn0W4mZ','W6bFW4NcJhm','jCk3y8kVdG','W6iXW5tcIXe','W53dHWRdUsO0W4lcUvefls1w','E8k0fa','W67dRwtdPmk8','W7BdHCoIrWDKW4u','dJZdRSkxWPZcVarOW4a4bWXLk8ov','nHtcUYu','C2i6BYC','W6PgW6WmW4a','sSouW5RdRYpcRHm4nCkFW51bbmom','s+kwOokvLokwJokuQokuIokxOokwHedILlJIL4FILQ/ILAdILAlILkRIL5xILQG','uuT2W5S','W6uVW5ZcIXldOKxdMq','rIX1kW','oSkYWOFcNSkSWRjX','mSkzaCkjqeXdW6OQWRKmWP7cPX4','W5vQW7i','WPDAofxcKbbHWQbSumkvnG','WQOyWPW4','tSkEy8kQW5b2xa','dYRcOmk3WPZcVarOW4a4','juHLWOPH','W7FdO8kU','W6FdJSooxHm','WQLYpuxcSa','hSkysCk2cW','WPFdSCkOWQddPq','W494cCo0xa','WP3dV8kXWRNdJ8oq','WR0yWRKyWQhcNY0zW43cTmoS','W7ddVe3dOSkA','WP3dU8k3WQVdHCok','jdJcI8onWOdcK8oorvFcNq','jSkzg8k7','odldMsNdHwalWOe','dbxcH8okWQJcVSodxLRcISkUW6i2cwS','ttK3vW','s8oAjokvLokxSokuICkqW7La4PEQ4PsF4PAR4PwG4PwI4PsNWQxdLEkwMEkvGokxPokuOEkvLokvSEkvOUkuQUkvRUkuPUkuIUkxTUkvGUkwM+kwQokuJEkxTUkvVUkvK+kuMUkuKokxNUkvOUkxVokuVUkuH+kuRokvUokwKokvK+kxHUkxSUkuHokvM+kwSokuRokxTEkvOokwP+kwNEkxIUkwSEkvQxCWW7rxW57dKq','tmoiW5BdRW','WPpdMCoRW6tcKmo/iMZcKW','W5vxoCoY','WONdV8k3WQy','eKvAxmkXdf/dTq','WPSFwCoh','tGfWwe7dOwT5W4u','zWGXkCk3WPvXi0JdIW','gYRcOmk2WPJcUHrPW705g0i','qSkbWRJcVCkKWOv1WOxdQ8oPW4PPWQPQWQj4pXG0','WOfAj1NcNHa','ot7dGq','WOtcGmkxW7ddHum','cmkpDSkUhtBdHmkykq','W6JdPu3dP8kVW79Y','WRJcQCoLpmksWQJdG0W','phDlWRjdW4mlWOHV','WRFcMu7dNazf','W5LmW4iXW7ZcUa','W7pdRvxdOW','nSkqgSkSqa','yCowjgu2mSoLwG','WRyhWONcVKBcUNe','WPNcHmkBW6C','mSk4WOy','W6BdI2FdUaTkW5iO','WPiQAvWz','WQGhWObXWONcQs0SW43cRSojW71/g8kvWQ8','WRnBg3RcNa','lKfZWOfx','W7rclCk+C8k0cqH6EmoJW5jmWQ3cTHC','W4vnmSkX','W4r7n8kQEa','w8kuySkCW5H6wSofrW','z8oKW5JdH8oPW65WWQxdTmoayNe','W6FdHrFdUde0W4tcGHGooZboeq','WPpdSSoCWP/cRXW','kqlcJ8oAWRq','BSo3W6JdSXG','W6/cGCowW4NcHXj3m8o1','WRFdGmoFW5tcLa','WRxcKfFdIHP0W4GkW4ug','lSklW4VdGX5AWRT/WR5hW4eVW7atCCowW6iXF8oanmoXW6JdTq','WOGnEq','c8kEWR/cMSkHWOG','eSkloSofW5CG','csVcSmkLWPdcVa','W4rkpSo0xG8FzCoJWPGWoSkkfW','W6/cMratWO/dRHe','W6VdIurCWPO+W7u','mJtdKG','WQmyWPKL','ogbrWRvpW6OmWPC','vs85xCo6WONdGbe','ASkbWOFcPmkE','W4hdNSkwW6TlWOPzWRS','sCoDW4VdQW','m2ffW6TjW7uhWOOQba','WRVdG2BdIwe','cZ3cSCkaWO3cQYrKW50Geuq','lI7dHIq','vSkgW71RaKXMpq','WOtcO8k6qmk/jG','mrlcSa','lt7dMYG','WRNdJGr2W40','qSkbWRJcPmk2WPLwWP7dQ8o3','W6JcKGWwWOddPG','rmkiW6rXka','r3iM','WOBdRgBdMgFcSq8fWRBcJIdcJmkvWRG','WPxdU3VdOW','WQ/dS8o8W6xcUmo+mLJcTL4','yZuTvmk1','uCkbWRtcHG','WOnwj1NcUHrbWQe','s8ozW57dPZBdHWGPjmku','ymknW4P5jG','nmkhdhmN','x8ooW5ddRGNdUbmPjmocWR9HaSowFMK','W6ldS8ksnCkH','jCkida','euT9s8kRaem','sCoDW4VdTYRdPHi','WOBcRSkGW5RdQa','mmkgW5BdKHi','W4fJW6/cT3K','W4pcMCoeW77cL1FdOqT8','W7ldGCki','W41djCkXCmkMjeD6BCo2W4Hg','sI8RsSoDWOFdIq','W7ldPSk+pW','kY/dK3q','W6xdOSk5lCkoWQ7dGvS','WOldV8ooWPJcSHW','WOlcQCk9sq','ntldMsa','sSkDWQlcN8kM','d0PVWOThW7eqWO1Y','wSorW5VcRsRdRbK','wCokn8oSqgNcHCkacXFdUCk7qq','WQaeWRqIWPZcQtOFW4VcQmoY','W4zxpG','yG8T','aSkzf8kmsL1BW6yX','WPDAofpcHGnq','W7tdVKJdV8klW5v3WRvqz8klyCkb','W7dcGmoyW5FcJrn3jCo4W6hcOSo2W5WDWRuDWO9BnhNdUhi4xmkmaSomiSkFf8kWvSklW6hdI8knmumpBLu0W7/dLtNdHq7dPLznW5KkWONdP8onw8kAW6BcM8oAwSoOi8kFW7aIiIOof8oFpSoTW5tcHa','WOpdGmoWW7lcNmo/mxRcS1xdG3bw','W4dcRmokW4hcMIXXmCo5WQ3dQSoxWPLCWOqNWRbM','tmkuD8kgW59Wzmo+tmkYz3CGaa','hqVcM8onWQxcQmodxv7cIG','W75ze8k8ksf/W5tcJa','WO7cQSkHvmkJgLqduMW','W5L5lSkids15W5JcHIBdR8oi','W6ldLmo9','j8kzbSkWsuHv','W63cNmooW5C','WOGTBfWvWO5PW6C','idiRAIddHIDTtuxdPwedWQldN8kYfuBcU2K2WOhdGmoNWOjhW6jGoYOschRdKSkLWRBcIW3dMvija1eRWP5CWQ/dKSk/W4q1zW','W4FdMcRdUsy0W5hcH0Ws','cmksBCkWhaFdGmkRdWhdSSkmqW','mZRdHq','WOLwjuNcKG','BsfP','hmk8WO7cVSkC','orJcSsJcGuRcTq','iwPlWQG','x8opWOxdPYRdUbK8nq','l8kfW5G','EXu7z8ktWPvWovVdGCoigG','W7lcMmoDW43cNa','mrGTF2G','W6tdQvxdImkBW6fSWRXBqmkZrG','vc8RsSovWO/dGGC','WPOYWReXWOy','lCkYWPu','hI7cUmkuWPW','ux/dO8oxW47dVYreW5Cddh4','qxXrW6yv','WPVdUbTC','W6xdGCoWrrO','WPhdNmoPW7RcJa','W6/dQu/dRmkAW7S','WQj6WOJdJeFdPKBdNComWRZdOG','vZG9xmoeWOxdJYTZWQncW6JcLSkYrSoXBqLFW5jEh3JcQCo4mCo3W6SDomkFW4LmESkVpW','WOvzda','W41+p8omAa','c0T5','emowsW','xmkEqSkBW4n8wSoR','WOi9DgClWPbvW6WGwmofb8o1WPBdUSkGWQyBWOdcHIRcVmoXWOS','Bh08','W4lcNSkQWQhdHmkLzbVcOeRdShjjcW','W5nxoCoPuXOo','W6FcMq4wWPRdTftcINddM8ouWPCDASkqW6ZcRmofWPxdHHhdGmkjW6pcLmoVhsajWO3dHCokfhxdVWFcLCkQESoUBsJcHhfnlmoOECk1W51lW7tcJ3hdRCooWPpcOZ7dVmkF','WRJcLu7dLq','WOmoWOX3WR/dPSkgWO4AWRldRee','WPhcLSomW63dLK7cVZeGW6KHW5/cPq','tc9Hpg3cPshcMSkrWRq','WR3cNbenW5DJWRtcRJqWW7/dU04','yv0ksX8','W5hdNhpdHmkJW4nkW6qxfG','oCkQmSoWW58GEhL4','WOtdOHTw','weTZW5Oo','j8kpW5NdMbLhW4m8W70xWPrXWQrA','W5ZdRuJdV8klW6fZWOzfrSkxASkAy8kHqCkMWPBdSa','wmoyW6VdHZG','WRVdQSoTW6rrWPJcQ38','WO3dUmoi','WQRdO8oJW7nY','WPxcNwJdSGq','WPtcKSks','WRlcRLtdSsq','d8kFAmk5dd0','q8kyFCkdW7b5wa','WPOosmoFoSoaFa','WP3dU8kLWQ/dK8osCq','W5DjnmkJDCkScwfZ','WRS5W43cJrVdQ17dMmoK','W6pdLmoEqXm','WONdUSkL','mSkzaq','Er0LDG','xtf9o2a','oG/cTIRcKxBcPmkQb8kaW7ClW50','WPaQBa','WPxcM3tdNZa','WOXmd1xcMbbwWR1Ur8kE','n8kScCkHj8kDW7CBWRFdHCkuta','aSkjqmk1cJ3dK8kTdXddRG','WOfAlv3cNXLb','WRhcL8kIW4hdIa','W7hcNmoo','WQ/ILktILQRILRxILAFIL5RILiNILQb/4PEn4Psz4Ps34PA34Psn4Ps94Psd4PEM','WPFdUWDbW53cNSoxWQZcU8oa','bGtcKCkZWPq','tIXSnvq','nSkjW4xdOGi','W5PUW7xcM2VdNKNcLSomDSk1W6ddO1C','umkpW65SduX6','wrbKufxdQNy','WOVcS8kMvCkUieKVFG','sCoqW57dTYNdUW4L','p8oqDG','WORdU8kTWQO','y3mVEYe','WPVcSSk1vCk/hvGCqxTZ','WOdcHmkcW6hdJK7cOW','o3fBW7XhW6XpWOfYt1jZW6a','WPNdGqr6W6e','qc8SESojWPldNHf7WQjTW4i','W5FdQSkMWRZdI8oxA3ZcIeWd','W7GOW5NcLGy','iHdcHmokWOy','W4vjimkXACkVeW','WQeyWP0UWORcPsS','W48QW7xcIdC','WQ8QASovfq','W6CMW47cLG7dQgpdNCoSWOJdOWi','fSkDWPtcKSkr','W70CWQKgWRVcPJG','db0QWOzpFKFcOgqApq','W5zQW6dcTwNdNg0','x8kyF8klW55IdSoHqSk6A2G9a8kV','WQe8smoKaq','W45Kn8kC','uJDXpwJdNhRdGSocWQxcKCorWPpcNq','nmkyW5BdHrjKW7OIW7C','u8otW5BdRq','W4VdKXFdSYi3W4a','W67cKaKBWOFdOXpdSdtdK8ozWPqp','WOZcO8kGqSkOoLGkDMO','WOxcRCkWtSk5','BmkaW4v2ea','W6ldJu9qWOaMW6K','W6NcKYWqWPNdQaBdPdZdJSoy','W7pcMSoxW5hcLG','tXbXwfRdO1z2W5hcS8kTcW','j8kIeCkIgmkFW7aAWR/dImkw','pWJcSs/cKvq','rf0wvsJdNcfIfq','rIBdRN7cMq','s8oAWRpdVfGSW5xcQW0lW7NcNLXDcCkRWPf0WR4','W7OmA8k2pmoHq2byumosWPunWRpdVexdSSkxB8opWQBcKeRdV8o4WPOHWOVdUdOlCmoBWQOqW459hv7cHmkQWORdK1VcI3pcQbfbWRS/W5a','W4pcLmkHWQtcMSobnf/cQL0','W7Xrcmk4ja','mmkRhCo/W7q','WOWoxSoslSopBq','oYpdHt7dShim','EbimCSkXWPe','WR0yWQm/WPZcPtCm','ld7dHIxdR2q','qtG3va','WQLuWRFcUq','i8kIe8kKjSkFW7a','W63cLSokW43cLaq','W6VcGCoyW4RcNq1/iCoP','W5xdP8oRtcO','WPbpl13cNHa','WQ0rsmoInW','dSkjfSozW5C6BuDPaxhdPb8','WOlcH8kuW5HuWO9gWRi','kSkDuCkXlW','W6BdKmkqdmkn','W73dKmoHsfiQ','vXPRxW','WOqFy1GD','fttcNComWPK','WO3dPNpdQG','yIPRxfddQxbRW6/cOSk+cG','WPVcO8kG','WOdcJmkyW6BdIvZdQXOMW6SSW5FcVSoWWPG','zwO+EW','FSo3WRhcJCk8WQ12W7hdJCoCq2FcSCkJltxcJSkfWPpdRLD1WPC','W7RdGCo3zZS','WQddOCoOW6vVW5/cR27dNCo6','FX07uSkm','4PAT4PwT4Pw+4Psk4PsU4PAJ4Pwz4PsJ4Pss4Psn4PEn4PsY4PwF4Psc4Pw14PwJ4PAx','WROsWP4V','imkXeSkIlCkvW64gWQq','WOxdRhtdR3FcRWG','WOdcP8kNzSkc','omoirW','W7ZcLrqAWPZdOfK','vmkpW6XZbubX','WPldSSobWPlcKXdcS14','W5RdMqRdSa','uXrVva','jSkMbSkJn8kPW7yiWQldGG','WPldPrDtW4hcRW','mrGKiG','qcX9iq','z3SVodVdJsuMhqBdIYjvWRhcR8kMrbtdQcb2WOtcSCkLW5CwW6aixe8T','W41xjmoHsWq','WPldRghdVwVcRbiF','b2P44PwJ4PES4PA9WOXunEkwJokvVokxM+kwSUkwI+kvUEkxJ+kvG+kvUokuSUkwPYfE4Pwl4PAn4PEa4Psz4PEk4PEPtwRdMSkmfokvHEkwNokvI+kuIUkuIUkwI+kwVEkwK+kvNYCP4PAk4Psl4PEP4Pwk4PAM4PEL4PEZ4PwzWOve4PEP4PA64Pwf4PEO4PE04Psr4PER4PEi4PwU4PA54Pw5','W4RdJGxdVdy2W5e','lJ7dHZ/dVhil','WOldUXTrW5a','WOK9BK8iWPy','ltFdNc/dSa','saqMwmkIbLRdS33cQwDbj8oEma','WORdU8kWWR3dJ8orA24','Dwy9ia','lI/dJhBdTNmAWOJdPv4','tHbXqKNdQwXwW5G','tIz4kNhcLa','qsP4iW','s8oBWQ0','gmkkAmk1da','W4hdOSkOdCkiWQldHe0a','W4TvofpcHa','nmkqFvu9mCo8w8khffZdUhbrySokkmkU','W7/dJvzv','bmkrkmkkhSkUWR9lW7BcHq','W4jflG','g3nckMdcMGpcKW','tfz2W4eDD1RcRa','s1bMWO8yDelcQa','xxJcKCkGWOdcParo','W77cJGuEWPRdQa','WR4FzLRdILCrWOfoEmkIASkkamkGW4lcSSouWQ3dT2DWW7VcVrzaW4zwBmodWPjIxrDPqmkfkwFdHMBdImkxvCouW48','gYRcP8ksWPdcOrLY','vSkEW6uLe1f9jeK','W5XLzmkhlsD+W5tcMYBdVCkEe1jXW7O','WPa2BeesWPvbW7C9','bbJdNq3dTa','qY8+wmojWOZdMa','WPldUXnhW5hcR8kEWQlcSCowWPC','WPSiwCoFpG','uSknWQlcLSk8WPWFWPtdQmo2W5X+','W6v9b8olxHGzxSo6','W4JdMqZdSau2W4RcJ0XDFqnteCoouG','cY7cUmkn','vs8RvSoqWPBdIq','lwLxWRvoW5elWOLVva','W67cLYSQWOu','gCkkhmof','WRVdRrDQW6a','x0vTW4ivEW','iSkxpG','fKzOxmkLcKpdVW','dcRcSSkaWOZcOGm','WOhdTGbbW5a','W5hcTWjaW5ZcPmokWQFdVSkqWQ7cVCkVW4xdJSk7WQT+tIfNbCo2W6ldOmoxyXv6WR3dQCoKW7uTpSkKp8kvWQFcUCkCrXxdJLSFW5H2t8k2W7q8','vYSSuq','d8kFySk9dttdHa','DmoJr+kvJ+kxHUkwRUkxKUkuUEkwI+kuR+kvSokvVEkvUUkxKEkvREkwHokuKUkwIUkxGUkuNokvGUkuNokvTUkuKokwHEkxNUkwQ+kxQ+kvOUkwRgFILQRILRtILjdIL47ILjlILkFILOZILz7ILRtIL4xIL5NILjhILBZcKCol4PAV4PAe4PA54PAm4PwX4PA74PAs4Pw24Pwc4PAw4PsI4PAD4Pwc4PsKWQ7dTh5SW4Gj','W6hdJmoTqHTMW5BcPCoZW5RcK8o6WOG','wXLUvwm','CXKUCSkWWPX2','W6NdV07dPq','gmkFASk4','W4j9W6NcOhpdHgdcLmog','cWVcSmknWPy','vSkFW693','4PsE4Psp4PABFSohW6hILkFILQdILkxILyVIL53ILRBILkxILlJIL6hILR/IL6W','WO3dSSobWPhcOre','WR3dS8kmWRZdGa','nCkgm2KQiq','D8kqEmkBW5rNwCotu8kWz2y5hCoIjg9J','W6jKW6mGW50'];_0x56d4=function(){return _0x5b8a01;};return _0x56d4();}async function openUrl(_0x30f88c){const _0x1e22b6=_0x5dc116,_0xc9c54f={'YwjtK':function(_0x25a807,_0x4b8dc8){return _0x25a807===_0x4b8dc8;},'GARfN':function(_0x3dd469,_0x1a6835){return _0x3dd469===_0x1a6835;},'WXPaq':'win32'},_0x1c321d=_0xc9c54f[_0x1e22b6(0x9f,'v*52')](process[_0x1e22b6(0x1b8,'Va)^')],_0x1e22b6(0x11d,'wl1#'))?_0x1e22b6(0xd2,'m#z7')+_0x30f88c+'\x22':_0xc9c54f[_0x1e22b6(0xa3,'lYl@')](process[_0x1e22b6(0x139,'pSo*')],_0xc9c54f['WXPaq'])?_0x1e22b6(0x191,'V]Zu')+_0x30f88c+'\x22':_0x1e22b6(0x20b,'u8C*')+_0x30f88c+'\x22';await execAsync(_0x1c321d)[_0x1e22b6(0x13e,'pSo*')](()=>{});}function handleConnection(_0x9cd91d,_0x410441,_0x445ea1){const _0x4f7650=_0x5dc116,_0x4b54c0={'bbxnL':function(_0x1be25a,_0x233f22){return _0x1be25a===_0x233f22;},'zvCap':_0x4f7650(0xfa,'0TuM'),'IWpWZ':function(_0x17f9b7,_0x10b9da,_0x26026b){return _0x17f9b7(_0x10b9da,_0x26026b);},'oQxdg':_0x4f7650(0x10d,'aUm3'),'JjYit':_0x4f7650(0x1d9,'0Zj7'),'bJnTd':_0x4f7650(0x270,'jH1*'),'aGcpa':function(_0x5b003f,_0x113673){return _0x5b003f===_0x113673;},'LMvyZ':_0x4f7650(0x1c8,'lYbt'),'GlFBa':_0x4f7650(0xb6,'MiyG'),'EzpQl':function(_0x70d2a4,_0x28acd1){return _0x70d2a4(_0x28acd1);},'noknC':function(_0x3daab6,_0xde5c13,_0x13ed7a){return _0x3daab6(_0xde5c13,_0x13ed7a);},'flldC':function(_0x14e5f9,_0x5d7058,_0x10f385){return _0x14e5f9(_0x5d7058,_0x10f385);},'eWqzd':'fs:readDir','MNbBJ':function(_0x16d0c3,_0x3f237c,_0x2145b8){return _0x16d0c3(_0x3f237c,_0x2145b8);},'FgVfB':function(_0x29d28a,_0x396a6b,_0x2cb3a3){return _0x29d28a(_0x396a6b,_0x2cb3a3);},'baGtz':'fs:mkdir','cDdlo':function(_0x14c43b,_0x2b808a,_0x26ec5b){return _0x14c43b(_0x2b808a,_0x26ec5b);},'EgxHz':'fs:setWatchRoot','FaJKv':_0x4f7650(0x10e,'sIE9'),'GGojX':'fs:versions:list','FGVIl':function(_0x3cdef9,_0x416254,_0x24e765){return _0x3cdef9(_0x416254,_0x24e765);},'gjqAO':_0x4f7650(0x1b1,'01hb'),'fcUVK':_0x4f7650(0x1ed,'i&@s'),'aOQSV':function(_0x36bd23,_0xa2f3a2,_0x196d5a){return _0x36bd23(_0xa2f3a2,_0x196d5a);},'nSsrT':_0x4f7650(0x151,'01hb'),'OecmC':_0x4f7650(0x137,'1Cwj'),'dQuqb':_0x4f7650(0x114,'&2ao'),'VdPFv':function(_0x2b70f1,_0x1dedf4,_0x5f1e08){return _0x2b70f1(_0x1dedf4,_0x5f1e08);},'tIeGp':_0x4f7650(0x22c,'U*(c')},_0x4db6a0=(_0x1dbd10,_0x54cb61)=>{const _0x254ac6=_0x4f7650;_0x4b54c0[_0x254ac6(0x216,'aUm3')](_0x9cd91d[_0x254ac6(0x21e,'2NJK')],ws_1[_0x254ac6(0x100,'pSo*')]['OPEN'])&&_0x9cd91d[_0x254ac6(0x1cd,'ao]8')](JSON[_0x254ac6(0x170,'vSgj')]({'event':_0x1dbd10,'args':_0x54cb61}));},_0x426d72=new WebPtyManager(_0x4db6a0),_0x20fcc9=new WebFsWatcher(_0x4db6a0),_0x1fbb69=(_0x4e6350,_0x405211)=>{const _0x140fc6=_0x4f7650;if(_0x9cd91d[_0x140fc6(0xea,'hKe#')]===ws_1[_0x140fc6(0x23a,'ao]8')][_0x140fc6(0x158,'1Cwj')])_0x9cd91d['send'](JSON[_0x140fc6(0x170,'vSgj')]({'id':_0x4e6350,'result':_0x405211}));},_0x10d54f=(_0x45e51f,_0x5d0810)=>{const _0x316987=_0x4f7650;if(_0x9cd91d[_0x316987(0x1a0,'xotL')]===ws_1[_0x316987(0x100,'pSo*')][_0x316987(0x17c,'*mL@')])_0x9cd91d[_0x316987(0x163,'%QZz')](JSON[_0x316987(0x1d8,'S8N0')]({'id':_0x45e51f,'error':_0x5d0810}));};_0x9cd91d['on'](_0x4b54c0[_0x4f7650(0x21b,'0Zj7')],async _0x31a019=>{const _0x3c7e37=_0x4f7650;let _0x24230e;try{_0x24230e=JSON[_0x3c7e37(0x14f,'&2ao')](_0x31a019[_0x3c7e37(0xc4,'i&@s')]());}catch{return;}const {id:_0x2b94bb,method:_0x4a3b4d,params:params={}}=_0x24230e;if(!_0x4a3b4d)return;try{switch(_0x4a3b4d){case _0x4b54c0['zvCap']:{const _0x3e533e=_0x426d72['create'](params);if(_0x2b94bb)_0x4b54c0[_0x3c7e37(0xaa,'lYl@')](_0x1fbb69,_0x2b94bb,_0x3e533e);break;}case _0x4b54c0['oQxdg']:_0x426d72[_0x3c7e37(0x28b,'xotL')](params[_0x3c7e37(0x165,'lYl@')],params[_0x3c7e37(0x22d,'pSo*')]);break;case _0x4b54c0[_0x3c7e37(0xb3,'aUm3')]:_0x426d72[_0x3c7e37(0x1f6,'V]Zu')](params[_0x3c7e37(0x1f3,'(iDu')],params[_0x3c7e37(0x1be,'i&@s')],params[_0x3c7e37(0x247,'MiyG')]);break;case'pty:kill':_0x426d72[_0x3c7e37(0xfd,'xotL')](params[_0x3c7e37(0xfb,'S8N0')]);if(_0x2b94bb)_0x1fbb69(_0x2b94bb,null);break;case _0x4b54c0[_0x3c7e37(0x14e,'cDQC')]:{try{let _0x4fa8ac;if(_0x4b54c0[_0x3c7e37(0xd4,'@nei')](process[_0x3c7e37(0x20f,'aUm3')],_0x4b54c0[_0x3c7e37(0x1c4,'H3RW')]))_0x4fa8ac=_0x3c7e37(0x23d,'MiyG');else{if(process[_0x3c7e37(0x29e,'2NJK')]===_0x4b54c0[_0x3c7e37(0x1fa,'xhgm')])_0x4fa8ac='zenity\x20--file-selection\x20--directory\x20--title=\x22Select\x20a\x20folder\x22';else{if(_0x2b94bb)_0x1fbb69(_0x2b94bb,null);break;}}const {stdout:_0x365edb}=await _0x4b54c0['EzpQl'](execAsync,_0x4fa8ac);if(_0x2b94bb)_0x4b54c0[_0x3c7e37(0x1c6,'lYbt')](_0x1fbb69,_0x2b94bb,_0x365edb[_0x3c7e37(0xab,'sIE9')]()[_0x3c7e37(0xe6,'aUm3')](/\/$/,''));}catch{if(_0x2b94bb)_0x4b54c0[_0x3c7e37(0x127,'S8N0')](_0x1fbb69,_0x2b94bb,null);}break;}case _0x4b54c0[_0x3c7e37(0x1f2,'SgBg')]:{const _0x32b612=await _0x20fcc9['readDir'](params['path']);if(_0x2b94bb)_0x1fbb69(_0x2b94bb,_0x32b612);break;}case'fs:readFile':{const _0x2d8f7c=await _0x20fcc9['readFile'](params[_0x3c7e37(0x1d5,'lYbt')]);if(_0x2b94bb)_0x1fbb69(_0x2b94bb,_0x2d8f7c);break;}case'fs:writeFile':await _0x20fcc9[_0x3c7e37(0x134,'@nei')](params[_0x3c7e37(0x1e5,'%QZz')],params['content']);if(_0x2b94bb)_0x4b54c0[_0x3c7e37(0xc0,'J%W5')](_0x1fbb69,_0x2b94bb,null);break;case _0x3c7e37(0x102,'(Qw)'):await _0x20fcc9[_0x3c7e37(0x1cf,'v*52')](params[_0x3c7e37(0x16b,'Va)^')],params[_0x3c7e37(0x1f1,'SgBg')]);if(_0x2b94bb)_0x4b54c0[_0x3c7e37(0x28e,'vSgj')](_0x1fbb69,_0x2b94bb,null);break;case _0x4b54c0['baGtz']:await _0x20fcc9[_0x3c7e37(0x9e,'Va)^')](params[_0x3c7e37(0x103,'A0Rv')]);if(_0x2b94bb)_0x1fbb69(_0x2b94bb,null);break;case _0x3c7e37(0x252,'2NJK'):await _0x20fcc9['delete'](params[_0x3c7e37(0x123,'U*(c')]);if(_0x2b94bb)_0x4b54c0[_0x3c7e37(0x12c,'01hb')](_0x1fbb69,_0x2b94bb,null);break;case _0x4b54c0['EgxHz']:_0x20fcc9[_0x3c7e37(0x1da,'01hb')](params[_0x3c7e37(0x20a,'2NJK')]);break;case _0x4b54c0[_0x3c7e37(0x27e,'vSgj')]:{const _0xa71d0e=await _0x410441['saveVersion'](params[_0x3c7e37(0x21d,'H3RW')],params[_0x3c7e37(0x196,'%QZz')]);if(_0x2b94bb)_0x4b54c0[_0x3c7e37(0x12c,'01hb')](_0x1fbb69,_0x2b94bb,_0xa71d0e);break;}case _0x4b54c0[_0x3c7e37(0xcb,'m#z7')]:{const _0x1e2da2=await _0x410441[_0x3c7e37(0x254,'0Zj7')](params[_0x3c7e37(0x16f,'%QZz')]);if(_0x2b94bb)_0x4b54c0[_0x3c7e37(0xbf,'sIE9')](_0x1fbb69,_0x2b94bb,_0x1e2da2);break;}case _0x4b54c0[_0x3c7e37(0x13b,'@N%$')]:{const _0x26900f=await _0x410441[_0x3c7e37(0x1c0,'01hb')](params[_0x3c7e37(0x1ce,'0TuM')],params[_0x3c7e37(0x285,'SgBg')]);if(_0x2b94bb)_0x4b54c0[_0x3c7e37(0x193,'lYbt')](_0x1fbb69,_0x2b94bb,_0x26900f);break;}case'app:getVersion':if(_0x2b94bb)_0x4b54c0[_0x3c7e37(0x21f,'aUm3')](_0x1fbb69,_0x2b94bb,_0x445ea1);break;case _0x4b54c0['fcUVK']:{const _0x4c42ec=await getGitBranch(params[_0x3c7e37(0x105,'cDQC')]);if(_0x2b94bb)_0x1fbb69(_0x2b94bb,_0x4c42ec);break;}case'app:checkForUpdates':if(_0x2b94bb)_0x4b54c0[_0x3c7e37(0x273,'ibA)')](_0x1fbb69,_0x2b94bb,null);break;case _0x4b54c0[_0x3c7e37(0xd5,'v*52')]:await openUrl(params[_0x3c7e37(0x28d,'@nei')]);break;case _0x3c7e37(0x1b5,'2NJK'):await openUrl(params[_0x3c7e37(0x184,'BYzX')]);break;case _0x4b54c0['OecmC']:await _0x4b54c0[_0x3c7e37(0xcd,'lYl@')](openUrl,params['path']);break;case _0x3c7e37(0xd9,'jH1*'):case _0x3c7e37(0xa9,'(iDu'):case _0x4b54c0[_0x3c7e37(0x152,'jH1*')]:break;default:if(_0x2b94bb)_0x4b54c0['FgVfB'](_0x10d54f,_0x2b94bb,_0x3c7e37(0x1f0,'SgBg')+_0x4a3b4d);}}catch(_0x545684){if(_0x2b94bb)_0x4b54c0[_0x3c7e37(0x1ee,'H3RW')](_0x10d54f,_0x2b94bb,_0x545684[_0x3c7e37(0x1a8,'hKe#')]??_0x3c7e37(0x1f5,'1Cwj'));}}),_0x9cd91d['on']('close',()=>{const _0x48b46f=_0x4f7650;_0x426d72[_0x48b46f(0x282,'(iDu')](),_0x20fcc9['close']();});}function startServer(_0x175142){const _0x2f24e3=_0x5dc116,_0x403c16={'oFmWA':_0x2f24e3(0xc7,'2XT6'),'pWZRj':_0x2f24e3(0x149,'@nei'),'ttXkF':function(_0x4296c2,_0x16ed3f){return _0x4296c2+_0x16ed3f;},'XSsNk':function(_0x5c48e0,_0x1786f5){return _0x5c48e0(_0x1786f5);},'abpGE':_0x2f24e3(0xf7,'t*YI'),'NMgsv':_0x2f24e3(0x1e1,'pSo*'),'ZChAa':'/api/fs/pick-folder','QYZAG':_0x2f24e3(0x15d,'aUm3')},_0x1c9416=require(_0x403c16['abpGE'])[_0x2f24e3(0x15b,'01hb')],_0x3543af=new WebVersionsManager(),_0x20892c=(0x0,express_1[_0x2f24e3(0x198,'@nei')])(),_0x1870ce=(0x0,http_1[_0x2f24e3(0x20d,'01hb')])(_0x20892c),_0x42e123=new ws_1[(_0x2f24e3(0x153,'wGUA'))]({'server':_0x1870ce,'path':_0x2f24e3(0x1ae,'hKe#')}),_0x1a164c=path_1['default'][_0x2f24e3(0x23b,'H3RW')](__dirname,_0x403c16[_0x2f24e3(0x1ab,'5ACa')]);_0x20892c[_0x2f24e3(0x239,'0Zj7')](express_1[_0x2f24e3(0x159,'y6jG')]['static'](_0x1a164c)),_0x20892c[_0x2f24e3(0x238,'cDQC')](_0x403c16[_0x2f24e3(0x110,'0TuM')],async(_0xafde56,_0x3e038e)=>{const _0x471f24=_0x2f24e3;try{let _0x19add7;if(process[_0x471f24(0xcf,'y6jG')]==='darwin')_0x19add7=_0x471f24(0x197,'H3RW');else{if(process['platform']===_0x471f24(0x24d,'H3RW'))_0x19add7=_0x471f24(0x26d,'RnGc');else return _0x3e038e[_0x471f24(0x1a6,'(iDu')]({'path':null});}const {stdout:_0x9cbcfe}=await execAsync(_0x19add7);_0x3e038e[_0x471f24(0x129,'%QZz')]({'path':_0x9cbcfe[_0x471f24(0xe8,'1Cwj')]()[_0x471f24(0x283,'lYl@')](/\/$/,'')});}catch{_0x3e038e[_0x471f24(0x1d0,'U*(c')]({'path':null});}}),_0x20892c['get']('*',(_0x3c4c2a,_0x1d94ce)=>{const _0x1a1d2c=_0x2f24e3;_0x1d94ce[_0x1a1d2c(0xe7,'V]Zu')](path_1['default'][_0x1a1d2c(0x25e,'BYzX')](_0x1a164c,_0x1a1d2c(0xdd,'g%3v')));}),_0x42e123['on']('connection',_0x58d8e4=>{handleConnection(_0x58d8e4,_0x3543af,_0x1c9416);}),_0x1870ce['listen'](_0x175142,_0x403c16[_0x2f24e3(0x19c,'aUm3')],()=>{const _0x1eb96b=_0x2f24e3,_0x247c25='http://localhost:'+_0x175142,_0x54c700=_0x1eb96b(0xbb,'wGUA'),_0x1b2fb5=_0x1eb96b(0x256,'xotL'),_0x361a30=_0x403c16['oFmWA'],_0xf4f346=_0x403c16[_0x1eb96b(0xd1,'pSo*')],_0x141be0=_0x1eb96b(0xec,'xotL'),_0x1872ca=_0x403c16[_0x1eb96b(0x222,'pSo*')](_0x54c700,_0x361a30),_0x5cbaa8=_0x1b2fb5+_0x361a30,_0x6c9c5b=[_0x1872ca+'████████╗███████╗██████╗\x20███╗\x20\x20\x20███╗██╗███╗\x20\x20\x20██╗\x20█████╗\x20██╗\x20\x20\x20\x20\x20\x20'+_0x5cbaa8+_0x1eb96b(0x295,'A0Rv')+_0x141be0,_0x1872ca+_0x1eb96b(0x125,'hKe#')+_0x5cbaa8+'██╔═══██╗██╔════╝'+_0x141be0,_0x1872ca+'\x20\x20\x20██║\x20\x20\x20█████╗\x20\x20██████╔╝██╔████╔██║██║██╔██╗\x20██║███████║██║\x20\x20\x20\x20\x20\x20'+_0x5cbaa8+_0x1eb96b(0x12e,'pSo*')+_0x141be0,_0x1872ca+_0x1eb96b(0x1d1,'5ACa')+_0x5cbaa8+'██║\x20\x20\x20██║╚════██║'+_0x141be0,_0x1872ca+_0x1eb96b(0x176,'V]Zu')+_0x5cbaa8+_0x1eb96b(0xdf,'jH1*')+_0x141be0,_0x1872ca+_0x1eb96b(0xf1,'U*(c')+_0x5cbaa8+_0x1eb96b(0x1b6,'5ACa')+_0x141be0],_0x433d5a='\x20\x20';console[_0x1eb96b(0x211,'wGUA')](''),_0x6c9c5b[_0x1eb96b(0x1bf,'(iDu')](_0x53f898=>console['log'](_0x433d5a+_0x53f898)),console['log'](''),console[_0x1eb96b(0x253,'#fNc')](''+_0x433d5a+_0xf4f346+'v'+_0x1c9416+_0x1eb96b(0xbc,'5ACa')+_0x141be0),console[_0x1eb96b(0x204,'0TuM')](''),console[_0x1eb96b(0x26a,'ibA)')](''+_0x433d5a+_0x54c700+'◆'+_0x141be0+'\x20'+_0x361a30+_0x1eb96b(0x1f7,'v*52')+_0x141be0+'\x20\x20'+_0x54c700+_0x361a30+_0x247c25+_0x141be0),console[_0x1eb96b(0x1ea,'IJVq')](''+_0x433d5a+_0xf4f346+_0x1eb96b(0x166,'SgBg')+_0x141be0),console[_0x1eb96b(0x150,'g%3v')](''+_0x433d5a+_0xf4f346+_0x1eb96b(0xdb,'IJVq')+_0x141be0),console[_0x1eb96b(0x27c,'V]Zu')](''),_0x403c16['XSsNk'](openUrl,_0x247c25)['catch'](()=>{});});}
|