@leverageaiapps/locus 1.1.2 → 2.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/dist/debug-logger.d.ts +19 -0
- package/dist/debug-logger.d.ts.map +1 -0
- package/dist/debug-logger.js +48 -0
- package/dist/debug-logger.js.map +1 -0
- package/dist/exec.d.ts.map +1 -1
- package/dist/exec.js +7 -3
- package/dist/exec.js.map +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +23 -2
- package/dist/session.js.map +1 -1
- package/dist/vortex-tunnel.d.ts.map +1 -1
- package/dist/vortex-tunnel.js +552 -9
- package/dist/vortex-tunnel.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug Logger - Sends logs to Debug Dashboard
|
|
3
|
+
*/
|
|
4
|
+
export declare function initDebugLogger(url?: string, session?: string): void;
|
|
5
|
+
export declare function setDebugSession(session: string): void;
|
|
6
|
+
export interface LogEntry {
|
|
7
|
+
source: 'locus' | 'vortex' | 'ios';
|
|
8
|
+
direction: 'in' | 'out';
|
|
9
|
+
type: string;
|
|
10
|
+
message: string;
|
|
11
|
+
session?: string;
|
|
12
|
+
data?: any;
|
|
13
|
+
}
|
|
14
|
+
export declare function debugLog(entry: Omit<LogEntry, 'source'> & {
|
|
15
|
+
source?: string;
|
|
16
|
+
}): void;
|
|
17
|
+
export declare const logIn: (type: string, message: string, data?: any) => void;
|
|
18
|
+
export declare const logOut: (type: string, message: string, data?: any) => void;
|
|
19
|
+
//# sourceMappingURL=debug-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-logger.d.ts","sourceRoot":"","sources":["../src/debug-logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAgC,EAAE,OAAO,CAAC,EAAE,MAAM,QAItF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,QAE9C;AAED,MAAM,WAAW,QAAQ;IACrB,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;CACd;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,QAwB7E;AAGD,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,OAAO,GAAG,SACT,CAAC;AAEvD,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,OAAO,GAAG,SACT,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Debug Logger - Sends logs to Debug Dashboard
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.logOut = exports.logIn = void 0;
|
|
7
|
+
exports.initDebugLogger = initDebugLogger;
|
|
8
|
+
exports.setDebugSession = setDebugSession;
|
|
9
|
+
exports.debugLog = debugLog;
|
|
10
|
+
let debugUrl = null;
|
|
11
|
+
let sessionId = null;
|
|
12
|
+
function initDebugLogger(url = 'http://localhost:4000', session) {
|
|
13
|
+
debugUrl = url;
|
|
14
|
+
sessionId = session || null;
|
|
15
|
+
console.log(`[Debug] Logger initialized: ${url}`);
|
|
16
|
+
}
|
|
17
|
+
function setDebugSession(session) {
|
|
18
|
+
sessionId = session;
|
|
19
|
+
}
|
|
20
|
+
function debugLog(entry) {
|
|
21
|
+
const fullEntry = {
|
|
22
|
+
source: entry.source || 'locus',
|
|
23
|
+
direction: entry.direction,
|
|
24
|
+
type: entry.type,
|
|
25
|
+
message: entry.message,
|
|
26
|
+
session: entry.session || sessionId || undefined,
|
|
27
|
+
data: entry.data
|
|
28
|
+
};
|
|
29
|
+
// Always log to console
|
|
30
|
+
const arrow = entry.direction === 'in' ? '←' : '→';
|
|
31
|
+
console.log(` [${fullEntry.source.toUpperCase()}] ${arrow} ${fullEntry.type}: ${fullEntry.message}`);
|
|
32
|
+
// Send to debug dashboard if configured
|
|
33
|
+
if (debugUrl) {
|
|
34
|
+
fetch(`${debugUrl}/log`, {
|
|
35
|
+
method: 'POST',
|
|
36
|
+
headers: { 'Content-Type': 'application/json' },
|
|
37
|
+
body: JSON.stringify(fullEntry)
|
|
38
|
+
}).catch(() => {
|
|
39
|
+
// Ignore errors - dashboard might not be running
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Convenience functions
|
|
44
|
+
const logIn = (type, message, data) => debugLog({ direction: 'in', type, message, data });
|
|
45
|
+
exports.logIn = logIn;
|
|
46
|
+
const logOut = (type, message, data) => debugLog({ direction: 'out', type, message, data });
|
|
47
|
+
exports.logOut = logOut;
|
|
48
|
+
//# sourceMappingURL=debug-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-logger.js","sourceRoot":"","sources":["../src/debug-logger.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAKH,0CAIC;AAED,0CAEC;AAWD,4BAwBC;AA9CD,IAAI,QAAQ,GAAkB,IAAI,CAAC;AACnC,IAAI,SAAS,GAAkB,IAAI,CAAC;AAEpC,SAAgB,eAAe,CAAC,MAAc,uBAAuB,EAAE,OAAgB;IACnF,QAAQ,GAAG,GAAG,CAAC;IACf,SAAS,GAAG,OAAO,IAAI,IAAI,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,SAAgB,eAAe,CAAC,OAAe;IAC3C,SAAS,GAAG,OAAO,CAAC;AACxB,CAAC;AAWD,SAAgB,QAAQ,CAAC,KAAqD;IAC1E,MAAM,SAAS,GAAa;QACxB,MAAM,EAAG,KAAK,CAAC,MAAc,IAAI,OAAO;QACxC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS,IAAI,SAAS;QAChD,IAAI,EAAE,KAAK,CAAC,IAAI;KACnB,CAAC;IAEF,wBAAwB;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAEtG,wCAAwC;IACxC,IAAI,QAAQ,EAAE,CAAC;QACX,KAAK,CAAC,GAAG,QAAQ,MAAM,EAAE;YACrB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;SAClC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACV,iDAAiD;QACrD,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,wBAAwB;AACjB,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,IAAU,EAAE,EAAE,CAC/D,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAD1C,QAAA,KAAK,SACqC;AAEhD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,IAAU,EAAE,EAAE,CAChE,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAD3C,QAAA,MAAM,UACqC"}
|
package/dist/exec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAGhC,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAWD,wBAAgB,YAAY,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAE7D;AAqBD,wBAAgB,SAAS,CAAC,OAAO,GAAE,WAAgB,GAAG,GAAG,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAGhC,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAWD,wBAAgB,YAAY,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAE7D;AAqBD,wBAAgB,SAAS,CAAC,OAAO,GAAE,WAAgB,GAAG,GAAG,CAAC,IAAI,CA+D7D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI9C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAM3D;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAU/B;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAEjE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAEjE;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}
|
package/dist/exec.js
CHANGED
|
@@ -42,6 +42,7 @@ exports.onExecData = onExecData;
|
|
|
42
42
|
exports.onExecExit = onExecExit;
|
|
43
43
|
exports.isExecRunning = isExecRunning;
|
|
44
44
|
const pty = __importStar(require("node-pty"));
|
|
45
|
+
const os = __importStar(require("os"));
|
|
45
46
|
let ptyProcess = null;
|
|
46
47
|
let dataCallback = null;
|
|
47
48
|
let exitCallback = null;
|
|
@@ -71,9 +72,12 @@ function stripAnsi(str) {
|
|
|
71
72
|
.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f]/g, ''); // Control characters except \t, \n, \r
|
|
72
73
|
}
|
|
73
74
|
function spawnExec(options = {}) {
|
|
74
|
-
// Default to user's shell
|
|
75
|
-
const
|
|
76
|
-
const
|
|
75
|
+
// Default to user's shell (Windows uses ComSpec/cmd.exe, Unix uses SHELL)
|
|
76
|
+
const isWindows = os.platform() === 'win32';
|
|
77
|
+
const defaultShell = isWindows
|
|
78
|
+
? process.env.ComSpec || 'cmd.exe'
|
|
79
|
+
: process.env.SHELL || '/bin/bash';
|
|
80
|
+
const command = options.command || defaultShell;
|
|
77
81
|
const args = options.args || [];
|
|
78
82
|
localCols = options.cols || process.stdout.columns || 80;
|
|
79
83
|
localRows = options.rows || process.stdout.rows || 24;
|
package/dist/exec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,oCAEC;AAqBD,
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAsIA,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiIzI"}
|
package/dist/session.js
CHANGED
|
@@ -37,9 +37,30 @@ exports.startSession = startSession;
|
|
|
37
37
|
const qrcode = __importStar(require("qrcode-terminal"));
|
|
38
38
|
const net = __importStar(require("net"));
|
|
39
39
|
const http = __importStar(require("http"));
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
40
41
|
const exec_1 = require("./exec");
|
|
41
42
|
const web_server_1 = require("./web-server");
|
|
42
43
|
const vortex_tunnel_1 = require("./vortex-tunnel");
|
|
44
|
+
/**
|
|
45
|
+
* Detect the best available shell on the system.
|
|
46
|
+
* Prefers $SHELL if set and exists, then tries zsh, bash, sh in order.
|
|
47
|
+
*/
|
|
48
|
+
function detectShell() {
|
|
49
|
+
// 1. Use $SHELL if set and the binary actually exists
|
|
50
|
+
const envShell = process.env.SHELL;
|
|
51
|
+
if (envShell && fs.existsSync(envShell)) {
|
|
52
|
+
return envShell;
|
|
53
|
+
}
|
|
54
|
+
// 2. Try common shells in preference order (zsh first for macOS compatibility)
|
|
55
|
+
const candidates = ['/bin/zsh', '/bin/bash', '/usr/bin/zsh', '/usr/bin/bash', '/bin/sh'];
|
|
56
|
+
for (const sh of candidates) {
|
|
57
|
+
if (fs.existsSync(sh)) {
|
|
58
|
+
return sh;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// 3. Last resort
|
|
62
|
+
return '/bin/sh';
|
|
63
|
+
}
|
|
43
64
|
const MIN_PORT = 8000;
|
|
44
65
|
const MAX_PORT = 65535;
|
|
45
66
|
/**
|
|
@@ -87,7 +108,7 @@ function verifyServerStarted(port) {
|
|
|
87
108
|
let attempts = 0;
|
|
88
109
|
const checkServer = () => {
|
|
89
110
|
attempts++;
|
|
90
|
-
const req = http.get(`http://
|
|
111
|
+
const req = http.get(`http://127.0.0.1:${port}/health`, (res) => {
|
|
91
112
|
// Server is responding, even if with 404 (health endpoint doesn't exist)
|
|
92
113
|
// The important thing is that the server is reachable
|
|
93
114
|
resolve();
|
|
@@ -208,7 +229,7 @@ async function startSession(machineName, userPin, command, options = {}) {
|
|
|
208
229
|
}
|
|
209
230
|
else {
|
|
210
231
|
// No command provided, just start a shell
|
|
211
|
-
const shell =
|
|
232
|
+
const shell = detectShell();
|
|
212
233
|
commandToRun = shell;
|
|
213
234
|
argsToRun = [];
|
|
214
235
|
}
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vortex-tunnel.d.ts","sourceRoot":"","sources":["../src/vortex-tunnel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vortex-tunnel.d.ts","sourceRoot":"","sources":["../src/vortex-tunnel.ts"],"names":[],"mappings":"AAgEA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,GAAE,MAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8ElF;AA48BD,wBAAgB,UAAU,IAAI,IAAI,CAcjC;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAE5C;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
|
package/dist/vortex-tunnel.js
CHANGED
|
@@ -49,11 +49,19 @@ let sessionId = null;
|
|
|
49
49
|
let gatewayUrl = null;
|
|
50
50
|
let localPort = null;
|
|
51
51
|
let heartbeatInterval = null;
|
|
52
|
+
let isReconnecting = false;
|
|
53
|
+
let reconnectAttempts = 0;
|
|
52
54
|
// Heartbeat configuration
|
|
53
|
-
const HEARTBEAT_INTERVAL_MS = 20 * 1000; // Send heartbeat every
|
|
55
|
+
const HEARTBEAT_INTERVAL_MS = 20 * 1000; // Send heartbeat every 20 seconds
|
|
56
|
+
const MAX_RECONNECT_ATTEMPTS = 100; // Max reconnect attempts (essentially unlimited for home use)
|
|
57
|
+
const MAX_RECONNECT_DELAY_MS = 60 * 1000; // Max 60 seconds between reconnect attempts
|
|
54
58
|
const MAX_PAYLOAD_SIZE = 64 * 1024 * 1024; // 64MB max message size for large file transfer
|
|
55
59
|
// Map to store pending HTTP requests
|
|
56
60
|
const pendingRequests = new Map();
|
|
61
|
+
// Current running task
|
|
62
|
+
let currentTask = null;
|
|
63
|
+
// Pending task exec responses (for command execution within tasks)
|
|
64
|
+
const pendingTaskExecs = new Map();
|
|
57
65
|
// Single shared WebSocket connection to local server
|
|
58
66
|
let sharedLocalWs = null;
|
|
59
67
|
let sharedLocalWsReady = false;
|
|
@@ -65,10 +73,11 @@ function startTunnel(port = 4020, gateway) {
|
|
|
65
73
|
return new Promise(async (resolve, reject) => {
|
|
66
74
|
try {
|
|
67
75
|
localPort = port;
|
|
68
|
-
|
|
76
|
+
// Gateway URL: Cloudflare Workers (replaces Vortex Gateway VPS)
|
|
77
|
+
gatewayUrl = gateway || process.env.VORTEX_GATEWAY || 'https://sandbox.locus.cool';
|
|
69
78
|
console.log(` [Vortex] Connecting to gateway: ${gatewayUrl}`);
|
|
70
|
-
// Step 1: Create session on gateway
|
|
71
|
-
const response = await axios_1.default.post(`${gatewayUrl}/api/session`, {
|
|
79
|
+
// Step 1: Create session on gateway
|
|
80
|
+
const response = await axios_1.default.post(`${gatewayUrl}/api/tunnel/session`, {
|
|
72
81
|
mode: 'http_proxy',
|
|
73
82
|
client_type: `LeverageAI-Agent/${process.platform}`
|
|
74
83
|
});
|
|
@@ -82,7 +91,8 @@ function startTunnel(port = 4020, gateway) {
|
|
|
82
91
|
session_id: session_id,
|
|
83
92
|
});
|
|
84
93
|
// Step 3: Connect WebSocket to gateway
|
|
85
|
-
|
|
94
|
+
// Use ws_url from server if available, otherwise construct from gateway URL
|
|
95
|
+
const wsUrl = ws_url || (gatewayUrl.replace('https://', 'wss://').replace('http://', 'ws://') + `/api/tunnel/${session_id}`);
|
|
86
96
|
console.log(` [Vortex] Establishing WebSocket tunnel...`);
|
|
87
97
|
tunnelWs = new ws_1.default(wsUrl, {
|
|
88
98
|
maxPayload: MAX_PAYLOAD_SIZE
|
|
@@ -108,7 +118,10 @@ function startTunnel(port = 4020, gateway) {
|
|
|
108
118
|
console.log(' [Vortex] Tunnel disconnected');
|
|
109
119
|
stopHeartbeat();
|
|
110
120
|
tunnelWs = null;
|
|
111
|
-
cleanup
|
|
121
|
+
// Auto reconnect instead of cleanup
|
|
122
|
+
if (!isReconnecting && sessionId && gatewayUrl) {
|
|
123
|
+
attemptTunnelReconnect();
|
|
124
|
+
}
|
|
112
125
|
});
|
|
113
126
|
tunnelWs.on('error', (err) => {
|
|
114
127
|
console.error(' [Vortex] Tunnel error:', err.message);
|
|
@@ -143,10 +156,61 @@ function createSharedLocalConnection() {
|
|
|
143
156
|
sharedLocalWsReady = true;
|
|
144
157
|
});
|
|
145
158
|
sharedLocalWs.on('message', (data) => {
|
|
146
|
-
|
|
159
|
+
const dataStr = Buffer.isBuffer(data) ? data.toString() : data.toString();
|
|
160
|
+
// Check if this is task-related output (contains markers)
|
|
161
|
+
if (pendingTaskExecs.size > 0 && dataStr.includes('<<TASK_EXEC_')) {
|
|
162
|
+
processTaskOutput(dataStr);
|
|
163
|
+
// Don't forward task execution output to browsers
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
// Check if this is raw terminal output that might be part of task execution
|
|
167
|
+
try {
|
|
168
|
+
const msg = JSON.parse(dataStr);
|
|
169
|
+
if (msg.type === 'output' && pendingTaskExecs.size > 0) {
|
|
170
|
+
// Could be task output - check for markers
|
|
171
|
+
if (msg.data && (msg.data.includes('<<TASK_EXEC_') || currentTask)) {
|
|
172
|
+
processTaskOutput(msg.data);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// Handle AI chat task responses from local server
|
|
177
|
+
if (msg.type === 'ai_chat_response' && currentTask && currentTask.type === 'ai_chat') {
|
|
178
|
+
sendToGateway({
|
|
179
|
+
type: 'task_output',
|
|
180
|
+
task_id: currentTask.id,
|
|
181
|
+
chunk: msg.content || ''
|
|
182
|
+
});
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (msg.type === 'ai_chat_complete' && currentTask && currentTask.type === 'ai_chat') {
|
|
186
|
+
sendToGateway({
|
|
187
|
+
type: 'task_complete',
|
|
188
|
+
task_id: currentTask.id,
|
|
189
|
+
success: true,
|
|
190
|
+
output: msg.full_response || currentTask.accumulatedOutput
|
|
191
|
+
});
|
|
192
|
+
currentTask = null;
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
if (msg.type === 'ai_chat_error' && currentTask && currentTask.type === 'ai_chat') {
|
|
196
|
+
sendToGateway({
|
|
197
|
+
type: 'task_error',
|
|
198
|
+
task_id: currentTask.id,
|
|
199
|
+
error: msg.error || 'AI chat failed'
|
|
200
|
+
});
|
|
201
|
+
currentTask = null;
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// Not JSON, might be raw output
|
|
207
|
+
if (pendingTaskExecs.size > 0 && dataStr.includes('<<TASK_EXEC_')) {
|
|
208
|
+
processTaskOutput(dataStr);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// Forward data from local server to all browsers through gateway (legacy mode)
|
|
147
213
|
if (tunnelWs && tunnelWs.readyState === ws_1.default.OPEN) {
|
|
148
|
-
// Local server sends JSON text, forward it directly
|
|
149
|
-
const dataStr = Buffer.isBuffer(data) ? data.toString() : data.toString();
|
|
150
214
|
tunnelWs.send(dataStr);
|
|
151
215
|
}
|
|
152
216
|
});
|
|
@@ -218,6 +282,14 @@ function handleGatewayMessage(msg) {
|
|
|
218
282
|
if (!sharedLocalWsReady) {
|
|
219
283
|
createSharedLocalConnection();
|
|
220
284
|
}
|
|
285
|
+
else {
|
|
286
|
+
// Send Ctrl+C to reset shell state in case previous session left it in a bad state
|
|
287
|
+
// (e.g., stuck in heredoc mode, waiting for input, etc.)
|
|
288
|
+
if (sharedLocalWs && sharedLocalWs.readyState === ws_1.default.OPEN) {
|
|
289
|
+
console.log(` [Vortex] Sending Ctrl+C to reset shell state`);
|
|
290
|
+
sharedLocalWs.send(JSON.stringify({ type: 'input', data: '\x03' }));
|
|
291
|
+
}
|
|
292
|
+
}
|
|
221
293
|
break;
|
|
222
294
|
case 'client_disconnected':
|
|
223
295
|
console.log(` [Vortex] Client disconnected`);
|
|
@@ -225,6 +297,15 @@ function handleGatewayMessage(msg) {
|
|
|
225
297
|
case 'pong':
|
|
226
298
|
// Heartbeat response received, connection is alive
|
|
227
299
|
break;
|
|
300
|
+
// ============== Task Queue Protocol (v3) ==============
|
|
301
|
+
case 'task_execute':
|
|
302
|
+
// Gateway asking us to execute a task
|
|
303
|
+
handleTaskExecute(msg);
|
|
304
|
+
break;
|
|
305
|
+
case 'task_cancel':
|
|
306
|
+
// Gateway asking us to cancel a task
|
|
307
|
+
handleTaskCancel(msg.task_id);
|
|
308
|
+
break;
|
|
228
309
|
default:
|
|
229
310
|
// Forward any other message to local server (v2 protocol - direct relay)
|
|
230
311
|
// This handles input, resize, ping, etc. from browser
|
|
@@ -234,6 +315,348 @@ function handleGatewayMessage(msg) {
|
|
|
234
315
|
break;
|
|
235
316
|
}
|
|
236
317
|
}
|
|
318
|
+
// ============================================================================
|
|
319
|
+
// Task Execution (v3 Protocol)
|
|
320
|
+
// ============================================================================
|
|
321
|
+
/**
|
|
322
|
+
* Handle task execution request from Gateway
|
|
323
|
+
*/
|
|
324
|
+
async function handleTaskExecute(msg) {
|
|
325
|
+
const { task_id, task_type, payload } = msg;
|
|
326
|
+
if (currentTask && !currentTask.cancelled) {
|
|
327
|
+
// Already executing a task, shouldn't happen if gateway queues properly
|
|
328
|
+
console.error(` [Task] Error: Already executing task ${currentTask.id}`);
|
|
329
|
+
sendToGateway({
|
|
330
|
+
type: 'task_error',
|
|
331
|
+
task_id,
|
|
332
|
+
error: 'Already executing another task'
|
|
333
|
+
});
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
console.log(` [Task] Executing task ${task_id} (${task_type})`);
|
|
337
|
+
currentTask = {
|
|
338
|
+
id: task_id,
|
|
339
|
+
type: task_type,
|
|
340
|
+
payload,
|
|
341
|
+
startTime: Date.now(),
|
|
342
|
+
accumulatedOutput: '',
|
|
343
|
+
cancelled: false
|
|
344
|
+
};
|
|
345
|
+
try {
|
|
346
|
+
switch (task_type) {
|
|
347
|
+
case 'exec':
|
|
348
|
+
await executeExecTask(task_id, payload);
|
|
349
|
+
break;
|
|
350
|
+
case 'ai_chat':
|
|
351
|
+
await executeAiChatTask(task_id, payload);
|
|
352
|
+
break;
|
|
353
|
+
case 'file_read':
|
|
354
|
+
await executeFileReadTask(task_id, payload);
|
|
355
|
+
break;
|
|
356
|
+
case 'file_write':
|
|
357
|
+
await executeFileWriteTask(task_id, payload);
|
|
358
|
+
break;
|
|
359
|
+
default:
|
|
360
|
+
throw new Error(`Unknown task type: ${task_type}`);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
console.error(` [Task] Error executing task ${task_id}:`, error.message);
|
|
365
|
+
if (!currentTask?.cancelled) {
|
|
366
|
+
sendToGateway({
|
|
367
|
+
type: 'task_error',
|
|
368
|
+
task_id,
|
|
369
|
+
error: error.message
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
finally {
|
|
374
|
+
currentTask = null;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Handle task cancellation request
|
|
379
|
+
*/
|
|
380
|
+
function handleTaskCancel(taskId) {
|
|
381
|
+
if (currentTask && currentTask.id === taskId) {
|
|
382
|
+
console.log(` [Task] Cancelling task ${taskId}`);
|
|
383
|
+
currentTask.cancelled = true;
|
|
384
|
+
// Cancel any pending exec for this task
|
|
385
|
+
for (const [execId, pending] of pendingTaskExecs.entries()) {
|
|
386
|
+
if (pending.taskId === taskId) {
|
|
387
|
+
pending.reject(new Error('Task cancelled'));
|
|
388
|
+
pendingTaskExecs.delete(execId);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
// Send Ctrl+C to interrupt any running command
|
|
392
|
+
if (sharedLocalWs && sharedLocalWs.readyState === ws_1.default.OPEN) {
|
|
393
|
+
sharedLocalWs.send(JSON.stringify({ type: 'input', data: '\x03' }));
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Execute a shell command task
|
|
399
|
+
*/
|
|
400
|
+
async function executeExecTask(taskId, payload) {
|
|
401
|
+
const { command } = payload;
|
|
402
|
+
if (!command) {
|
|
403
|
+
throw new Error('No command specified');
|
|
404
|
+
}
|
|
405
|
+
if (!sharedLocalWs || sharedLocalWs.readyState !== ws_1.default.OPEN) {
|
|
406
|
+
throw new Error('Local WebSocket not connected');
|
|
407
|
+
}
|
|
408
|
+
console.log(` [Task] Executing command: ${command.substring(0, 50)}...`);
|
|
409
|
+
const result = await executeCommandWithOutput(taskId, command);
|
|
410
|
+
console.log(` [Task] executeCommandWithOutput returned for ${taskId}, exitCode=${result.exitCode}`);
|
|
411
|
+
if (currentTask?.cancelled) {
|
|
412
|
+
console.log(` [Task] Task ${taskId} was cancelled, not sending complete`);
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
console.log(` [Task] Sending task_complete for ${taskId}`);
|
|
416
|
+
sendToGateway({
|
|
417
|
+
type: 'task_complete',
|
|
418
|
+
task_id: taskId,
|
|
419
|
+
success: result.exitCode === 0,
|
|
420
|
+
output: result.output,
|
|
421
|
+
exit_code: result.exitCode
|
|
422
|
+
});
|
|
423
|
+
console.log(` [Task] task_complete sent for ${taskId}`);
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Execute command and collect output with streaming
|
|
427
|
+
*/
|
|
428
|
+
function executeCommandWithOutput(taskId, command) {
|
|
429
|
+
return new Promise((resolve, reject) => {
|
|
430
|
+
const execId = `exec_${taskId}_${Date.now()}`;
|
|
431
|
+
const startMarker = `<<TASK_EXEC_START_${execId}>>`;
|
|
432
|
+
const endMarkerPrefix = `<<TASK_EXEC_END_${execId}>>_`;
|
|
433
|
+
pendingTaskExecs.set(execId, {
|
|
434
|
+
taskId,
|
|
435
|
+
resolve,
|
|
436
|
+
reject,
|
|
437
|
+
output: ''
|
|
438
|
+
});
|
|
439
|
+
// Set timeout
|
|
440
|
+
const timeout = setTimeout(() => {
|
|
441
|
+
const pending = pendingTaskExecs.get(execId);
|
|
442
|
+
if (pending) {
|
|
443
|
+
pendingTaskExecs.delete(execId);
|
|
444
|
+
reject(new Error('Command timed out'));
|
|
445
|
+
}
|
|
446
|
+
}, 300000); // 5 minute timeout
|
|
447
|
+
// Store timeout for cleanup
|
|
448
|
+
pendingTaskExecs.get(execId).timeout = timeout;
|
|
449
|
+
// Send wrapped command
|
|
450
|
+
const wrappedCommand = `echo '${startMarker}'; ${command}; echo '${endMarkerPrefix}'$?\n`;
|
|
451
|
+
if (sharedLocalWs && sharedLocalWs.readyState === ws_1.default.OPEN) {
|
|
452
|
+
sharedLocalWs.send(JSON.stringify({ type: 'input', data: wrappedCommand }));
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
pendingTaskExecs.delete(execId);
|
|
456
|
+
clearTimeout(timeout);
|
|
457
|
+
reject(new Error('WebSocket not connected'));
|
|
458
|
+
}
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Execute AI chat task (forward to local server for AI processing)
|
|
463
|
+
*/
|
|
464
|
+
async function executeAiChatTask(taskId, payload) {
|
|
465
|
+
// AI chat tasks are forwarded to the local web server which handles Claude API
|
|
466
|
+
// The local server will send streaming responses back
|
|
467
|
+
if (!sharedLocalWs || sharedLocalWs.readyState !== ws_1.default.OPEN) {
|
|
468
|
+
throw new Error('Local WebSocket not connected');
|
|
469
|
+
}
|
|
470
|
+
// Send AI chat request to local server
|
|
471
|
+
sharedLocalWs.send(JSON.stringify({
|
|
472
|
+
type: 'ai_chat_task',
|
|
473
|
+
task_id: taskId,
|
|
474
|
+
message: payload.message,
|
|
475
|
+
context: payload.context
|
|
476
|
+
}));
|
|
477
|
+
// The response will come through the normal WebSocket message handler
|
|
478
|
+
// which will detect ai_chat_response and forward appropriately
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Execute file read task
|
|
482
|
+
* Supports both text files (utf-8) and binary files (base64)
|
|
483
|
+
*/
|
|
484
|
+
async function executeFileReadTask(taskId, payload) {
|
|
485
|
+
let { file_path } = payload;
|
|
486
|
+
if (!file_path) {
|
|
487
|
+
throw new Error('No file path specified');
|
|
488
|
+
}
|
|
489
|
+
const fs = require('fs').promises;
|
|
490
|
+
const path = require('path');
|
|
491
|
+
const os = require('os');
|
|
492
|
+
// Expand ~ to home directory
|
|
493
|
+
if (file_path.startsWith('~')) {
|
|
494
|
+
file_path = file_path.replace('~', os.homedir());
|
|
495
|
+
}
|
|
496
|
+
try {
|
|
497
|
+
// Check if file exists and get stats
|
|
498
|
+
const stats = await fs.stat(file_path);
|
|
499
|
+
const fileName = path.basename(file_path);
|
|
500
|
+
const ext = path.extname(file_path).toLowerCase();
|
|
501
|
+
// Binary file extensions
|
|
502
|
+
const binaryExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico', '.webp',
|
|
503
|
+
'.pdf', '.zip', '.tar', '.gz', '.rar', '.7z',
|
|
504
|
+
'.mp3', '.mp4', '.wav', '.avi', '.mov', '.mkv',
|
|
505
|
+
'.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx',
|
|
506
|
+
'.exe', '.dll', '.so', '.dylib', '.bin'];
|
|
507
|
+
const isBinary = binaryExtensions.includes(ext);
|
|
508
|
+
if (isBinary) {
|
|
509
|
+
// Read as binary and encode to base64
|
|
510
|
+
const buffer = await fs.readFile(file_path);
|
|
511
|
+
const base64Content = buffer.toString('base64');
|
|
512
|
+
// Determine MIME type
|
|
513
|
+
const mimeTypes = {
|
|
514
|
+
'.png': 'image/png',
|
|
515
|
+
'.jpg': 'image/jpeg',
|
|
516
|
+
'.jpeg': 'image/jpeg',
|
|
517
|
+
'.gif': 'image/gif',
|
|
518
|
+
'.bmp': 'image/bmp',
|
|
519
|
+
'.webp': 'image/webp',
|
|
520
|
+
'.pdf': 'application/pdf',
|
|
521
|
+
'.zip': 'application/zip',
|
|
522
|
+
'.mp3': 'audio/mpeg',
|
|
523
|
+
'.mp4': 'video/mp4',
|
|
524
|
+
};
|
|
525
|
+
const mimeType = mimeTypes[ext] || 'application/octet-stream';
|
|
526
|
+
sendToGateway({
|
|
527
|
+
type: 'task_complete',
|
|
528
|
+
task_id: taskId,
|
|
529
|
+
success: true,
|
|
530
|
+
file_name: fileName,
|
|
531
|
+
file_path: file_path,
|
|
532
|
+
file_size: stats.size,
|
|
533
|
+
file_type: mimeType,
|
|
534
|
+
content_base64: base64Content,
|
|
535
|
+
is_binary: true
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
else {
|
|
539
|
+
// Read as text
|
|
540
|
+
const content = await fs.readFile(file_path, 'utf-8');
|
|
541
|
+
sendToGateway({
|
|
542
|
+
type: 'task_complete',
|
|
543
|
+
task_id: taskId,
|
|
544
|
+
success: true,
|
|
545
|
+
file_name: fileName,
|
|
546
|
+
file_path: file_path,
|
|
547
|
+
file_size: stats.size,
|
|
548
|
+
file_content: content,
|
|
549
|
+
is_binary: false
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
catch (error) {
|
|
554
|
+
throw new Error(`Failed to read file: ${error.message}`);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Execute file write task
|
|
559
|
+
*/
|
|
560
|
+
async function executeFileWriteTask(taskId, payload) {
|
|
561
|
+
let { file_path, file_content } = payload;
|
|
562
|
+
if (!file_path || file_content === undefined) {
|
|
563
|
+
throw new Error('File path and content required');
|
|
564
|
+
}
|
|
565
|
+
const fs = require('fs').promises;
|
|
566
|
+
const os = require('os');
|
|
567
|
+
// Expand ~ to home directory
|
|
568
|
+
if (file_path.startsWith('~')) {
|
|
569
|
+
file_path = file_path.replace('~', os.homedir());
|
|
570
|
+
}
|
|
571
|
+
try {
|
|
572
|
+
await fs.writeFile(file_path, file_content, 'utf-8');
|
|
573
|
+
sendToGateway({
|
|
574
|
+
type: 'task_complete',
|
|
575
|
+
task_id: taskId,
|
|
576
|
+
success: true,
|
|
577
|
+
output: `File written: ${file_path}`
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
catch (error) {
|
|
581
|
+
throw new Error(`Failed to write file: ${error.message}`);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* Process output from local WebSocket for task execution
|
|
586
|
+
* Called when we receive output that might contain task markers
|
|
587
|
+
*/
|
|
588
|
+
function processTaskOutput(data) {
|
|
589
|
+
console.log(` [Task] processTaskOutput called, data length: ${data.length}, pendingCount: ${pendingTaskExecs.size}`);
|
|
590
|
+
console.log(` [Task] Data preview: ${data.substring(0, 200).replace(/\n/g, '\\n')}`);
|
|
591
|
+
// Check for task exec markers
|
|
592
|
+
for (const [execId, pending] of pendingTaskExecs.entries()) {
|
|
593
|
+
const startMarker = `<<TASK_EXEC_START_${execId}>>`;
|
|
594
|
+
const endMarkerPrefix = `<<TASK_EXEC_END_${execId}>>_`;
|
|
595
|
+
console.log(` [Task] Checking execId: ${execId}`);
|
|
596
|
+
// Track if we've seen start marker
|
|
597
|
+
const hasSeenStart = pending.hasSeenStart || false;
|
|
598
|
+
// Check if this data contains start marker
|
|
599
|
+
if (!hasSeenStart && data.includes(startMarker)) {
|
|
600
|
+
// Extract content after start marker
|
|
601
|
+
const startIdx = data.indexOf(startMarker);
|
|
602
|
+
data = data.substring(startIdx + startMarker.length);
|
|
603
|
+
// Skip leading newlines
|
|
604
|
+
while (data.startsWith('\n') || data.startsWith('\r')) {
|
|
605
|
+
data = data.substring(1);
|
|
606
|
+
}
|
|
607
|
+
pending.hasSeenStart = true;
|
|
608
|
+
}
|
|
609
|
+
else if (!hasSeenStart) {
|
|
610
|
+
// Haven't seen start marker yet, ignore this chunk (it's command echo)
|
|
611
|
+
continue;
|
|
612
|
+
}
|
|
613
|
+
// Check for end marker first (might be in same chunk as start)
|
|
614
|
+
const endIdx = data.indexOf(endMarkerPrefix);
|
|
615
|
+
if (endIdx !== -1) {
|
|
616
|
+
console.log(` [Task] Found end marker for ${execId}, endIdx=${endIdx}`);
|
|
617
|
+
// Only take content before end marker
|
|
618
|
+
const cleanOutput = data.substring(0, endIdx);
|
|
619
|
+
pending.output += cleanOutput;
|
|
620
|
+
const afterEnd = data.substring(endIdx + endMarkerPrefix.length);
|
|
621
|
+
const exitCodeMatch = afterEnd.match(/^(\d+)/);
|
|
622
|
+
const exitCode = exitCodeMatch ? parseInt(exitCodeMatch[1], 10) : 0;
|
|
623
|
+
console.log(` [Task] Exit code: ${exitCode}, output length: ${pending.output.length}`);
|
|
624
|
+
// Clear timeout
|
|
625
|
+
if (pending.timeout) {
|
|
626
|
+
clearTimeout(pending.timeout);
|
|
627
|
+
}
|
|
628
|
+
// Send final clean output to gateway
|
|
629
|
+
const finalOutput = pending.output.trim();
|
|
630
|
+
console.log(` [Task] Sending final output to gateway`);
|
|
631
|
+
if (currentTask && !currentTask.cancelled) {
|
|
632
|
+
sendToGateway({
|
|
633
|
+
type: 'task_output',
|
|
634
|
+
task_id: pending.taskId,
|
|
635
|
+
chunk: finalOutput,
|
|
636
|
+
is_final: true
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
// Resolve promise
|
|
640
|
+
console.log(` [Task] Resolving promise for ${execId}`);
|
|
641
|
+
pending.resolve({
|
|
642
|
+
output: finalOutput,
|
|
643
|
+
exitCode
|
|
644
|
+
});
|
|
645
|
+
pendingTaskExecs.delete(execId);
|
|
646
|
+
return;
|
|
647
|
+
}
|
|
648
|
+
// No end marker yet, append clean data (for streaming)
|
|
649
|
+
if (currentTask && !currentTask.cancelled && data.length > 0) {
|
|
650
|
+
pending.output += data;
|
|
651
|
+
// Send streaming chunk to gateway (only clean output)
|
|
652
|
+
sendToGateway({
|
|
653
|
+
type: 'task_output',
|
|
654
|
+
task_id: pending.taskId,
|
|
655
|
+
chunk: data
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
}
|
|
237
660
|
/**
|
|
238
661
|
* Handle HTTP request forwarded from gateway
|
|
239
662
|
* Forward it to the local server and send response back
|
|
@@ -427,6 +850,121 @@ function stopHeartbeat() {
|
|
|
427
850
|
heartbeatInterval = null;
|
|
428
851
|
}
|
|
429
852
|
}
|
|
853
|
+
/**
|
|
854
|
+
* Attempt to reconnect tunnel with exponential backoff
|
|
855
|
+
* Keeps the same session ID so iOS doesn't need to re-scan QR code
|
|
856
|
+
*/
|
|
857
|
+
async function attemptTunnelReconnect() {
|
|
858
|
+
if (isReconnecting) {
|
|
859
|
+
return;
|
|
860
|
+
}
|
|
861
|
+
isReconnecting = true;
|
|
862
|
+
while (reconnectAttempts < MAX_RECONNECT_ATTEMPTS) {
|
|
863
|
+
reconnectAttempts++;
|
|
864
|
+
const delay = Math.min(Math.pow(2, reconnectAttempts) * 1000, MAX_RECONNECT_DELAY_MS);
|
|
865
|
+
console.log(` [Vortex] Tunnel reconnect attempt ${reconnectAttempts}/${MAX_RECONNECT_ATTEMPTS} in ${delay / 1000}s...`);
|
|
866
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
867
|
+
try {
|
|
868
|
+
await reconnectTunnel();
|
|
869
|
+
console.log(` [Vortex] Tunnel reconnected successfully!`);
|
|
870
|
+
reconnectAttempts = 0;
|
|
871
|
+
isReconnecting = false;
|
|
872
|
+
return;
|
|
873
|
+
}
|
|
874
|
+
catch (error) {
|
|
875
|
+
console.error(` [Vortex] Reconnect failed: ${error.message}`);
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
console.log(` [Vortex] Max reconnect attempts reached, giving up`);
|
|
879
|
+
isReconnecting = false;
|
|
880
|
+
cleanup();
|
|
881
|
+
}
|
|
882
|
+
/**
|
|
883
|
+
* Reconnect tunnel using existing session ID
|
|
884
|
+
*/
|
|
885
|
+
async function reconnectTunnel() {
|
|
886
|
+
if (!sessionId || !gatewayUrl || !localPort) {
|
|
887
|
+
throw new Error('Missing session info for reconnect');
|
|
888
|
+
}
|
|
889
|
+
// Re-register tunnel with gateway (session should still exist)
|
|
890
|
+
try {
|
|
891
|
+
await axios_1.default.post(`${gatewayUrl}/api/tunnel/register`, {
|
|
892
|
+
session_id: sessionId,
|
|
893
|
+
});
|
|
894
|
+
}
|
|
895
|
+
catch (e) {
|
|
896
|
+
// If session expired, recreate with same session_id to keep URL stable
|
|
897
|
+
if (e.response?.status === 404) {
|
|
898
|
+
console.log(` [Vortex] Session expired, recreating with same ID...`);
|
|
899
|
+
const response = await axios_1.default.post(`${gatewayUrl}/api/tunnel/session`, {
|
|
900
|
+
mode: 'http_proxy',
|
|
901
|
+
client_type: `LeverageAI-Agent/${process.platform}`,
|
|
902
|
+
session_id: sessionId // Reuse same ID so URL doesn't change
|
|
903
|
+
});
|
|
904
|
+
const { session_id } = response.data;
|
|
905
|
+
sessionId = session_id;
|
|
906
|
+
console.log(` [Vortex] Session recreated: ${session_id.substring(0, 8)}... (same URL)`);
|
|
907
|
+
// Register new tunnel
|
|
908
|
+
await axios_1.default.post(`${gatewayUrl}/api/tunnel/register`, {
|
|
909
|
+
session_id: session_id,
|
|
910
|
+
});
|
|
911
|
+
}
|
|
912
|
+
else {
|
|
913
|
+
throw e;
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
// Connect WebSocket to gateway
|
|
917
|
+
const wsUrl = gatewayUrl.replace('https://', 'wss://').replace('http://', 'ws://') + `/api/tunnel/${sessionId}`;
|
|
918
|
+
return new Promise((resolve, reject) => {
|
|
919
|
+
tunnelWs = new ws_1.default(wsUrl, {
|
|
920
|
+
maxPayload: MAX_PAYLOAD_SIZE
|
|
921
|
+
});
|
|
922
|
+
tunnelWs.on('open', () => {
|
|
923
|
+
console.log(` [Vortex] Tunnel reconnected`);
|
|
924
|
+
startHeartbeat();
|
|
925
|
+
// Recreate shared local connection
|
|
926
|
+
createSharedLocalConnection();
|
|
927
|
+
// Reset shell state after reconnect (same as client_connected handler)
|
|
928
|
+
// Prevents shell from being stuck in a bad state (e.g., waiting for input)
|
|
929
|
+
setTimeout(() => {
|
|
930
|
+
if (sharedLocalWs && sharedLocalWs.readyState === ws_1.default.OPEN) {
|
|
931
|
+
console.log(` [Vortex] Sending Ctrl+C to reset shell state after reconnect`);
|
|
932
|
+
sharedLocalWs.send(JSON.stringify({ type: 'input', data: '\x03' }));
|
|
933
|
+
}
|
|
934
|
+
}, 500);
|
|
935
|
+
resolve();
|
|
936
|
+
});
|
|
937
|
+
tunnelWs.on('message', (data) => {
|
|
938
|
+
try {
|
|
939
|
+
const msg = JSON.parse(data.toString());
|
|
940
|
+
handleGatewayMessage(msg);
|
|
941
|
+
}
|
|
942
|
+
catch (e) {
|
|
943
|
+
console.error('[Vortex] Invalid message from gateway:', e);
|
|
944
|
+
}
|
|
945
|
+
});
|
|
946
|
+
tunnelWs.on('close', () => {
|
|
947
|
+
console.log(' [Vortex] Tunnel disconnected');
|
|
948
|
+
stopHeartbeat();
|
|
949
|
+
tunnelWs = null;
|
|
950
|
+
// Auto reconnect again
|
|
951
|
+
if (!isReconnecting && sessionId && gatewayUrl) {
|
|
952
|
+
attemptTunnelReconnect();
|
|
953
|
+
}
|
|
954
|
+
});
|
|
955
|
+
tunnelWs.on('error', (err) => {
|
|
956
|
+
console.error(' [Vortex] Tunnel error:', err.message);
|
|
957
|
+
reject(err);
|
|
958
|
+
});
|
|
959
|
+
// Timeout for connection
|
|
960
|
+
setTimeout(() => {
|
|
961
|
+
if (tunnelWs && tunnelWs.readyState !== ws_1.default.OPEN) {
|
|
962
|
+
tunnelWs.close();
|
|
963
|
+
reject(new Error('Connection timeout'));
|
|
964
|
+
}
|
|
965
|
+
}, 10000);
|
|
966
|
+
});
|
|
967
|
+
}
|
|
430
968
|
/**
|
|
431
969
|
* Clean up resources
|
|
432
970
|
*/
|
|
@@ -450,6 +988,8 @@ function cleanup() {
|
|
|
450
988
|
websocketConnections.clear();
|
|
451
989
|
}
|
|
452
990
|
function stopTunnel() {
|
|
991
|
+
// Set reconnecting to true to prevent auto-reconnect on manual stop
|
|
992
|
+
isReconnecting = true;
|
|
453
993
|
stopHeartbeat();
|
|
454
994
|
if (tunnelWs) {
|
|
455
995
|
tunnelWs.close();
|
|
@@ -458,6 +998,9 @@ function stopTunnel() {
|
|
|
458
998
|
cleanup();
|
|
459
999
|
tunnelUrl = null;
|
|
460
1000
|
sessionId = null;
|
|
1001
|
+
gatewayUrl = null;
|
|
1002
|
+
isReconnecting = false;
|
|
1003
|
+
reconnectAttempts = 0;
|
|
461
1004
|
}
|
|
462
1005
|
function getTunnelUrl() {
|
|
463
1006
|
return tunnelUrl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vortex-tunnel.js","sourceRoot":"","sources":["../src/vortex-tunnel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vortex-tunnel.js","sourceRoot":"","sources":["../src/vortex-tunnel.ts"],"names":[],"mappings":"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"}
|