@hackerai/local 0.1.3 → 0.1.4
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 +4 -6
- package/dist/index.js +318 -142
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,10 +23,8 @@ hackerai-local --token YOUR_TOKEN
|
|
|
23
23
|
npx @hackerai/local --token hsb_abc123 --name "My Laptop"
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
This pulls the pre-built HackerAI
|
|
27
|
-
nmap, sqlmap, ffuf, gobuster, nuclei, hydra, nikto, wpscan, subfinder, httpx,
|
|
28
|
-
|
|
29
|
-
All tools are pre-installed, configured, and ready to use immediately - no manual setup required.
|
|
26
|
+
This pulls the pre-built HackerAI sandbox image (~2GB) with 30+ pentesting tools including:
|
|
27
|
+
nmap, sqlmap, ffuf, gobuster, nuclei, hydra, nikto, wpscan, subfinder, httpx, and more.
|
|
30
28
|
|
|
31
29
|
### Custom Docker Image
|
|
32
30
|
|
|
@@ -48,7 +46,7 @@ npx @hackerai/local --token hsb_abc123 --name "Work PC" --dangerous
|
|
|
48
46
|
| ------------------ | ------------------------------------------------------ |
|
|
49
47
|
| `--token TOKEN` | Authentication token from HackerAI Settings (required) |
|
|
50
48
|
| `--name NAME` | Connection name shown in HackerAI (default: hostname) |
|
|
51
|
-
| `--image IMAGE` | Docker image to use (default:
|
|
49
|
+
| `--image IMAGE` | Docker image to use (default: hackeraidev/sandbox) |
|
|
52
50
|
| `--dangerous` | Run commands directly on host OS without Docker |
|
|
53
51
|
| `--convex-url URL` | Override backend URL (for development) |
|
|
54
52
|
| `--help, -h` | Show help message |
|
|
@@ -61,7 +59,7 @@ npx @hackerai/local --token hsb_abc123 --name "Work PC" --dangerous
|
|
|
61
59
|
|
|
62
60
|
## Security
|
|
63
61
|
|
|
64
|
-
- **Docker Mode**: Commands run in a container with process isolation, but with direct host network access (`--network host`)
|
|
62
|
+
- **Docker Mode**: Commands run in a container with process isolation, but with direct host network access (`--network host`) so pentesting tools can scan and interact with network services
|
|
65
63
|
- **Dangerous Mode**: Commands run directly on your OS without any isolation - use with caution
|
|
66
64
|
|
|
67
65
|
## License
|
package/dist/index.js
CHANGED
|
@@ -17,9 +17,101 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
const browser_1 = require("convex/browser");
|
|
19
19
|
const child_process_1 = require("child_process");
|
|
20
|
-
const util_1 = require("util");
|
|
21
20
|
const os_1 = __importDefault(require("os"));
|
|
22
|
-
|
|
21
|
+
// Align with LLM context limits: ~2048 tokens ≈ 6000 chars
|
|
22
|
+
const MAX_OUTPUT_SIZE = 6000;
|
|
23
|
+
// Idle timeout: auto-terminate after 1 hour without commands
|
|
24
|
+
const IDLE_TIMEOUT_MS = 60 * 60 * 1000; // 1 hour
|
|
25
|
+
// Truncation marker for 25% head + 75% tail strategy
|
|
26
|
+
const TRUNCATION_MARKER = "\n\n[... OUTPUT TRUNCATED - middle content removed to fit context limits ...]\n\n";
|
|
27
|
+
/**
|
|
28
|
+
* Truncates output using 25% head + 75% tail strategy.
|
|
29
|
+
* This preserves both the command start (context) and the end (final results/errors).
|
|
30
|
+
*/
|
|
31
|
+
function truncateOutput(content, maxSize = MAX_OUTPUT_SIZE) {
|
|
32
|
+
if (content.length <= maxSize)
|
|
33
|
+
return content;
|
|
34
|
+
const markerLength = TRUNCATION_MARKER.length;
|
|
35
|
+
const budgetForContent = maxSize - markerLength;
|
|
36
|
+
// 25% head + 75% tail strategy
|
|
37
|
+
const headBudget = Math.floor(budgetForContent * 0.25);
|
|
38
|
+
const tailBudget = budgetForContent - headBudget;
|
|
39
|
+
const head = content.slice(0, headBudget);
|
|
40
|
+
const tail = content.slice(-tailBudget);
|
|
41
|
+
return head + TRUNCATION_MARKER + tail;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Runs a shell command using spawn for better output control.
|
|
45
|
+
* Collects stdout/stderr and handles timeouts gracefully.
|
|
46
|
+
*/
|
|
47
|
+
function runShellCommand(command, options = {}) {
|
|
48
|
+
const { timeout = 30000, shell = "/bin/bash", maxOutputSize = MAX_OUTPUT_SIZE } = options;
|
|
49
|
+
return new Promise((resolve) => {
|
|
50
|
+
let stdout = "";
|
|
51
|
+
let stderr = "";
|
|
52
|
+
let killed = false;
|
|
53
|
+
let timeoutId;
|
|
54
|
+
const proc = (0, child_process_1.spawn)(shell, ["-c", command], {
|
|
55
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
56
|
+
});
|
|
57
|
+
// Set up timeout
|
|
58
|
+
if (timeout > 0) {
|
|
59
|
+
timeoutId = setTimeout(() => {
|
|
60
|
+
killed = true;
|
|
61
|
+
proc.kill("SIGTERM");
|
|
62
|
+
// Force kill after 2 seconds if still running
|
|
63
|
+
setTimeout(() => {
|
|
64
|
+
if (!proc.killed) {
|
|
65
|
+
proc.kill("SIGKILL");
|
|
66
|
+
}
|
|
67
|
+
}, 2000);
|
|
68
|
+
}, timeout);
|
|
69
|
+
}
|
|
70
|
+
proc.stdout?.on("data", (data) => {
|
|
71
|
+
stdout += data.toString();
|
|
72
|
+
// Prevent memory issues by capping collection (we'll truncate at the end)
|
|
73
|
+
if (stdout.length > maxOutputSize * 2) {
|
|
74
|
+
stdout = truncateOutput(stdout, maxOutputSize * 2);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
proc.stderr?.on("data", (data) => {
|
|
78
|
+
stderr += data.toString();
|
|
79
|
+
if (stderr.length > maxOutputSize * 2) {
|
|
80
|
+
stderr = truncateOutput(stderr, maxOutputSize * 2);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
proc.on("close", (code) => {
|
|
84
|
+
if (timeoutId)
|
|
85
|
+
clearTimeout(timeoutId);
|
|
86
|
+
// Final truncation to fit Convex limits
|
|
87
|
+
const truncatedStdout = truncateOutput(stdout, maxOutputSize);
|
|
88
|
+
const truncatedStderr = truncateOutput(stderr, maxOutputSize);
|
|
89
|
+
if (killed) {
|
|
90
|
+
resolve({
|
|
91
|
+
stdout: truncatedStdout,
|
|
92
|
+
stderr: truncatedStderr + "\n[Command timed out and was terminated]",
|
|
93
|
+
exitCode: 124, // Standard timeout exit code
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
resolve({
|
|
98
|
+
stdout: truncatedStdout,
|
|
99
|
+
stderr: truncatedStderr,
|
|
100
|
+
exitCode: code ?? 1,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
proc.on("error", (error) => {
|
|
105
|
+
if (timeoutId)
|
|
106
|
+
clearTimeout(timeoutId);
|
|
107
|
+
resolve({
|
|
108
|
+
stdout: truncateOutput(stdout, maxOutputSize),
|
|
109
|
+
stderr: truncateOutput(stderr + "\n" + error.message, maxOutputSize),
|
|
110
|
+
exitCode: 1,
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
23
115
|
function runWithOutput(command, args) {
|
|
24
116
|
return new Promise((resolve, reject) => {
|
|
25
117
|
const proc = (0, child_process_1.spawn)(command, args, { stdio: "inherit" });
|
|
@@ -35,7 +127,7 @@ function runWithOutput(command, args) {
|
|
|
35
127
|
// Production Convex URL - hardcoded for the published package
|
|
36
128
|
const PRODUCTION_CONVEX_URL = "https://convex.haiusercontent.com";
|
|
37
129
|
// Default pre-built image with all pentesting tools
|
|
38
|
-
const DEFAULT_IMAGE = "
|
|
130
|
+
const DEFAULT_IMAGE = "hackeraidev/sandbox";
|
|
39
131
|
// Convex function references (string paths work at runtime)
|
|
40
132
|
const api = {
|
|
41
133
|
localSandbox: {
|
|
@@ -44,7 +136,6 @@ const api = {
|
|
|
44
136
|
disconnect: "localSandbox:disconnect",
|
|
45
137
|
getPendingCommands: "localSandbox:getPendingCommands",
|
|
46
138
|
markCommandExecuting: "localSandbox:markCommandExecuting",
|
|
47
|
-
submitOutputChunk: "localSandbox:submitOutputChunk",
|
|
48
139
|
submitResult: "localSandbox:submitResult",
|
|
49
140
|
},
|
|
50
141
|
};
|
|
@@ -64,24 +155,25 @@ class LocalSandboxClient {
|
|
|
64
155
|
containerId;
|
|
65
156
|
userId;
|
|
66
157
|
connectionId;
|
|
158
|
+
session;
|
|
67
159
|
heartbeatInterval;
|
|
68
160
|
commandSubscription;
|
|
69
161
|
isShuttingDown = false;
|
|
162
|
+
lastActivityTime;
|
|
70
163
|
constructor(config) {
|
|
71
164
|
this.config = config;
|
|
72
165
|
this.convex = new browser_1.ConvexClient(config.convexUrl);
|
|
166
|
+
this.lastActivityTime = Date.now();
|
|
73
167
|
}
|
|
74
168
|
async start() {
|
|
75
169
|
console.log(chalk.blue("🚀 Starting HackerAI local sandbox..."));
|
|
76
170
|
if (!this.config.dangerous) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
console.log(chalk.green("✓ Docker is available"));
|
|
80
|
-
}
|
|
81
|
-
catch {
|
|
171
|
+
const dockerCheck = await runShellCommand("docker --version", { timeout: 5000 });
|
|
172
|
+
if (dockerCheck.exitCode !== 0) {
|
|
82
173
|
console.error(chalk.red("❌ Docker not found. Please install Docker or use --dangerous mode."));
|
|
83
174
|
process.exit(1);
|
|
84
175
|
}
|
|
176
|
+
console.log(chalk.green("✓ Docker is available"));
|
|
85
177
|
this.containerId = await this.createContainer();
|
|
86
178
|
console.log(chalk.green(`✓ Container: ${this.containerId.slice(0, 12)}`));
|
|
87
179
|
}
|
|
@@ -90,9 +182,51 @@ class LocalSandboxClient {
|
|
|
90
182
|
}
|
|
91
183
|
await this.connect();
|
|
92
184
|
}
|
|
185
|
+
getContainerName() {
|
|
186
|
+
// Generate a predictable container name for --persist mode
|
|
187
|
+
// Sanitize the connection name to be docker-compatible
|
|
188
|
+
const sanitized = this.config.name
|
|
189
|
+
.toLowerCase()
|
|
190
|
+
.replace(/[^a-z0-9-]/g, "-")
|
|
191
|
+
.replace(/-+/g, "-")
|
|
192
|
+
.replace(/^-|-$/g, "");
|
|
193
|
+
return `hackerai-sandbox-${sanitized || "default"}`;
|
|
194
|
+
}
|
|
195
|
+
async findExistingContainer(containerName) {
|
|
196
|
+
// Check if container with this name exists
|
|
197
|
+
const result = await runShellCommand(`docker ps -a --filter "name=^${containerName}$" --format "{{.ID}}|{{.State}}"`, { timeout: 5000 });
|
|
198
|
+
if (result.exitCode !== 0 || !result.stdout.trim()) {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
const [id, state] = result.stdout.trim().split("|");
|
|
202
|
+
return { id, running: state === "running" };
|
|
203
|
+
}
|
|
93
204
|
async createContainer() {
|
|
94
205
|
const image = this.config.image;
|
|
95
206
|
const isDefaultImage = image === DEFAULT_IMAGE;
|
|
207
|
+
// In persist mode, try to reuse existing container
|
|
208
|
+
if (this.config.persist) {
|
|
209
|
+
const containerName = this.getContainerName();
|
|
210
|
+
const existing = await this.findExistingContainer(containerName);
|
|
211
|
+
if (existing) {
|
|
212
|
+
if (existing.running) {
|
|
213
|
+
console.log(chalk.green(`✓ Reusing existing container: ${containerName}`));
|
|
214
|
+
return existing.id;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
// Container exists but stopped - start it
|
|
218
|
+
console.log(chalk.blue(`Starting existing container: ${containerName}`));
|
|
219
|
+
const startResult = await runShellCommand(`docker start ${existing.id}`, { timeout: 30000 });
|
|
220
|
+
if (startResult.exitCode === 0) {
|
|
221
|
+
console.log(chalk.green(`✓ Container started: ${containerName}`));
|
|
222
|
+
return existing.id;
|
|
223
|
+
}
|
|
224
|
+
// If start failed, remove and create fresh
|
|
225
|
+
console.log(chalk.yellow(`⚠️ Failed to start, creating new container...`));
|
|
226
|
+
await runShellCommand(`docker rm -f ${existing.id}`, { timeout: 5000 });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
96
230
|
if (this.config.build) {
|
|
97
231
|
console.log(chalk.red("❌ --build flag is not supported in the npx package."));
|
|
98
232
|
console.log(chalk.yellow("Use the pre-built image or specify a custom --image."));
|
|
@@ -113,8 +247,13 @@ class LocalSandboxClient {
|
|
|
113
247
|
}
|
|
114
248
|
}
|
|
115
249
|
console.log(chalk.blue("Creating Docker container..."));
|
|
116
|
-
|
|
117
|
-
|
|
250
|
+
// In persist mode, use a named container
|
|
251
|
+
const nameFlag = this.config.persist ? `--name ${this.getContainerName()} ` : "";
|
|
252
|
+
const result = await runShellCommand(`docker run -d ${nameFlag}--network host ${this.config.image} tail -f /dev/null`, { timeout: 60000 });
|
|
253
|
+
if (result.exitCode !== 0) {
|
|
254
|
+
throw new Error(`Failed to create container: ${result.stderr}`);
|
|
255
|
+
}
|
|
256
|
+
return result.stdout.trim();
|
|
118
257
|
}
|
|
119
258
|
getOsInfo() {
|
|
120
259
|
return {
|
|
@@ -156,15 +295,16 @@ class LocalSandboxClient {
|
|
|
156
295
|
imageName: this.config.dangerous ? undefined : this.config.image,
|
|
157
296
|
osInfo: this.config.dangerous ? this.getOsInfo() : undefined,
|
|
158
297
|
}));
|
|
159
|
-
if (!result.success) {
|
|
298
|
+
if (!result.success || !result.session) {
|
|
160
299
|
throw new Error(result.error || "Authentication failed");
|
|
161
300
|
}
|
|
162
301
|
this.userId = result.userId;
|
|
163
302
|
this.connectionId = result.connectionId;
|
|
303
|
+
this.session = result.session;
|
|
164
304
|
console.log(chalk.green("✓ Authenticated"));
|
|
165
305
|
console.log(chalk.bold(chalk.green("🎉 Local sandbox is ready!")));
|
|
166
306
|
console.log(chalk.gray(`Connection: ${this.connectionId}`));
|
|
167
|
-
console.log(chalk.gray(`Mode: ${this.getModeDisplay()}`));
|
|
307
|
+
console.log(chalk.gray(`Mode: ${this.getModeDisplay()}${this.config.persist ? " (persistent)" : ""}`));
|
|
168
308
|
this.startHeartbeat();
|
|
169
309
|
this.startCommandSubscription();
|
|
170
310
|
}
|
|
@@ -181,15 +321,27 @@ class LocalSandboxClient {
|
|
|
181
321
|
}
|
|
182
322
|
}
|
|
183
323
|
startCommandSubscription() {
|
|
184
|
-
if (!this.connectionId)
|
|
324
|
+
if (!this.connectionId || !this.userId || !this.session)
|
|
185
325
|
return;
|
|
186
|
-
// Use Convex subscription for real-time command updates
|
|
326
|
+
// Use Convex subscription for real-time command updates
|
|
187
327
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
188
328
|
this.commandSubscription = this.convex.onUpdate(api.localSandbox.getPendingCommands, {
|
|
189
|
-
token: this.config.token,
|
|
190
329
|
connectionId: this.connectionId,
|
|
330
|
+
// Pass signed session for secure verification without DB lookups
|
|
331
|
+
session: {
|
|
332
|
+
userId: this.userId,
|
|
333
|
+
expiresAt: this.session.expiresAt,
|
|
334
|
+
signature: this.session.signature,
|
|
335
|
+
},
|
|
191
336
|
}, async (data) => {
|
|
192
|
-
if (this.isShuttingDown
|
|
337
|
+
if (this.isShuttingDown)
|
|
338
|
+
return;
|
|
339
|
+
// Handle session auth errors - client needs to re-authenticate
|
|
340
|
+
if (data?.authError) {
|
|
341
|
+
console.debug("Session expired or invalid, will refresh on next heartbeat");
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
if (!data?.commands)
|
|
193
345
|
return;
|
|
194
346
|
for (const cmd of data.commands) {
|
|
195
347
|
await this.executeCommand(cmd);
|
|
@@ -197,9 +349,11 @@ class LocalSandboxClient {
|
|
|
197
349
|
});
|
|
198
350
|
}
|
|
199
351
|
async executeCommand(cmd) {
|
|
200
|
-
const { command_id, command, env, cwd, timeout } = cmd;
|
|
352
|
+
const { command_id, command, env, cwd, timeout, background } = cmd;
|
|
201
353
|
const startTime = Date.now();
|
|
202
|
-
|
|
354
|
+
// Update activity time to prevent idle timeout
|
|
355
|
+
this.lastActivityTime = Date.now();
|
|
356
|
+
console.log(chalk.cyan(`▶ ${background ? "[BG] " : ""}Executing: ${command}`));
|
|
203
357
|
try {
|
|
204
358
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
205
359
|
await this.convex.mutation(api.localSandbox.markCommandExecuting, {
|
|
@@ -212,12 +366,48 @@ class LocalSandboxClient {
|
|
|
212
366
|
}
|
|
213
367
|
if (env) {
|
|
214
368
|
const envString = Object.entries(env)
|
|
215
|
-
.map(([k, v]) =>
|
|
369
|
+
.map(([k, v]) => {
|
|
370
|
+
// Escape quotes, backticks, and $ to prevent shell injection
|
|
371
|
+
const escaped = v
|
|
372
|
+
.replace(/\\/g, "\\\\")
|
|
373
|
+
.replace(/"/g, '\\"')
|
|
374
|
+
.replace(/\$/g, "\\$")
|
|
375
|
+
.replace(/`/g, "\\`");
|
|
376
|
+
return `export ${k}="${escaped}"`;
|
|
377
|
+
})
|
|
216
378
|
.join("; ");
|
|
217
379
|
fullCommand = `${envString}; ${fullCommand}`;
|
|
218
380
|
}
|
|
219
|
-
//
|
|
220
|
-
|
|
381
|
+
// Handle background mode - spawn and return immediately with PID
|
|
382
|
+
if (background) {
|
|
383
|
+
const pid = await this.spawnBackground(fullCommand);
|
|
384
|
+
const duration = Date.now() - startTime;
|
|
385
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
386
|
+
await this.convex.mutation(api.localSandbox.submitResult, {
|
|
387
|
+
commandId: command_id,
|
|
388
|
+
token: this.config.token,
|
|
389
|
+
stdout: "",
|
|
390
|
+
stderr: "",
|
|
391
|
+
exitCode: 0,
|
|
392
|
+
pid,
|
|
393
|
+
duration,
|
|
394
|
+
});
|
|
395
|
+
console.log(chalk.green(`✓ Background process started with PID: ${pid}`));
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
let result;
|
|
399
|
+
if (this.config.dangerous) {
|
|
400
|
+
result = await runShellCommand(fullCommand, {
|
|
401
|
+
timeout: timeout ?? 30000,
|
|
402
|
+
shell: "/bin/bash",
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
// Use single quotes to prevent host shell from interpreting $(), backticks, etc.
|
|
407
|
+
// This ensures ALL command execution happens inside the Docker container
|
|
408
|
+
const escapedCommand = fullCommand.replace(/'/g, "'\\''");
|
|
409
|
+
result = await runShellCommand(`docker exec ${this.containerId} bash -c '${escapedCommand}'`, { timeout: timeout ?? 30000 });
|
|
410
|
+
}
|
|
221
411
|
const duration = Date.now() - startTime;
|
|
222
412
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
223
413
|
await this.convex.mutation(api.localSandbox.submitResult, {
|
|
@@ -225,7 +415,7 @@ class LocalSandboxClient {
|
|
|
225
415
|
token: this.config.token,
|
|
226
416
|
stdout: result.stdout,
|
|
227
417
|
stderr: result.stderr,
|
|
228
|
-
exitCode: result.
|
|
418
|
+
exitCode: result.exitCode,
|
|
229
419
|
duration,
|
|
230
420
|
});
|
|
231
421
|
console.log(chalk.green(`✓ Command completed in ${duration}ms`));
|
|
@@ -238,109 +428,51 @@ class LocalSandboxClient {
|
|
|
238
428
|
commandId: command_id,
|
|
239
429
|
token: this.config.token,
|
|
240
430
|
stdout: "",
|
|
241
|
-
stderr: message,
|
|
431
|
+
stderr: truncateOutput(message),
|
|
242
432
|
exitCode: 1,
|
|
243
433
|
duration,
|
|
244
434
|
});
|
|
245
435
|
console.log(chalk.red(`✗ Command failed: ${message}`));
|
|
246
436
|
}
|
|
247
437
|
}
|
|
248
|
-
async
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
let pendingStdout = "";
|
|
255
|
-
let pendingStderr = "";
|
|
256
|
-
let flushTimeout = null;
|
|
257
|
-
const flushChunks = async () => {
|
|
258
|
-
if (flushTimeout) {
|
|
259
|
-
clearTimeout(flushTimeout);
|
|
260
|
-
flushTimeout = null;
|
|
261
|
-
}
|
|
262
|
-
const stdoutChunk = pendingStdout;
|
|
263
|
-
const stderrChunk = pendingStderr;
|
|
264
|
-
pendingStdout = "";
|
|
265
|
-
pendingStderr = "";
|
|
266
|
-
if (stdoutChunk || stderrChunk) {
|
|
267
|
-
try {
|
|
268
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
269
|
-
await this.convex.mutation(api.localSandbox.submitOutputChunk, {
|
|
270
|
-
token: this.config.token,
|
|
271
|
-
commandId,
|
|
272
|
-
stdout: stdoutChunk || undefined,
|
|
273
|
-
stderr: stderrChunk || undefined,
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
catch {
|
|
277
|
-
// Ignore chunk submission errors - final result will have full output
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
};
|
|
281
|
-
const scheduleFlush = () => {
|
|
282
|
-
if (!flushTimeout) {
|
|
283
|
-
flushTimeout = setTimeout(flushChunks, 100); // Flush every 100ms
|
|
284
|
-
}
|
|
285
|
-
};
|
|
286
|
-
let proc;
|
|
287
|
-
if (this.config.dangerous) {
|
|
288
|
-
proc = (0, child_process_1.spawn)("/bin/bash", ["-c", fullCommand]);
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
// Use single quotes to prevent host shell from interpreting $(), backticks, etc.
|
|
292
|
-
const escapedCommand = fullCommand.replace(/'/g, "'\\''");
|
|
293
|
-
proc = (0, child_process_1.spawn)("docker", [
|
|
294
|
-
"exec",
|
|
295
|
-
this.containerId,
|
|
296
|
-
"bash",
|
|
297
|
-
"-c",
|
|
298
|
-
escapedCommand,
|
|
299
|
-
]);
|
|
300
|
-
}
|
|
301
|
-
proc.stdout?.on("data", (data) => {
|
|
302
|
-
const chunk = data.toString();
|
|
303
|
-
stdout += chunk;
|
|
304
|
-
pendingStdout += chunk;
|
|
305
|
-
scheduleFlush();
|
|
306
|
-
});
|
|
307
|
-
proc.stderr?.on("data", (data) => {
|
|
308
|
-
const chunk = data.toString();
|
|
309
|
-
stderr += chunk;
|
|
310
|
-
pendingStderr += chunk;
|
|
311
|
-
scheduleFlush();
|
|
312
|
-
});
|
|
313
|
-
const cleanup = async (code) => {
|
|
314
|
-
if (resolved)
|
|
315
|
-
return;
|
|
316
|
-
resolved = true;
|
|
317
|
-
// Flush any remaining chunks
|
|
318
|
-
if (flushTimeout) {
|
|
319
|
-
clearTimeout(flushTimeout);
|
|
320
|
-
}
|
|
321
|
-
await flushChunks();
|
|
322
|
-
resolve({ stdout, stderr, code });
|
|
323
|
-
};
|
|
324
|
-
proc.on("close", (code) => {
|
|
325
|
-
cleanup(code ?? 0);
|
|
326
|
-
});
|
|
327
|
-
proc.on("error", (error) => {
|
|
328
|
-
stderr += error.message;
|
|
329
|
-
cleanup(1);
|
|
438
|
+
async spawnBackground(fullCommand) {
|
|
439
|
+
if (this.config.dangerous) {
|
|
440
|
+
// Spawn directly on host in dangerous mode
|
|
441
|
+
const child = (0, child_process_1.spawn)("/bin/bash", ["-c", fullCommand], {
|
|
442
|
+
detached: true,
|
|
443
|
+
stdio: "ignore",
|
|
330
444
|
});
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
}
|
|
339
|
-
|
|
445
|
+
child.unref();
|
|
446
|
+
return child.pid ?? -1;
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
// For Docker, start the process in background inside container and get its PID
|
|
450
|
+
// Using 'nohup command & echo $!' to get the container process PID
|
|
451
|
+
const escapedCommand = fullCommand.replace(/'/g, "'\\''");
|
|
452
|
+
const result = await runShellCommand(`docker exec ${this.containerId} bash -c 'nohup ${escapedCommand} > /dev/null 2>&1 & echo $!'`, { timeout: 5000 });
|
|
453
|
+
if (result.exitCode === 0 && result.stdout.trim()) {
|
|
454
|
+
const pid = parseInt(result.stdout.trim(), 10);
|
|
455
|
+
return isNaN(pid) ? -1 : pid;
|
|
456
|
+
}
|
|
457
|
+
return -1;
|
|
458
|
+
}
|
|
340
459
|
}
|
|
341
|
-
|
|
342
|
-
|
|
460
|
+
scheduleNextHeartbeat() {
|
|
461
|
+
// Add jitter (±10s) to prevent thundering herd when multiple clients connect
|
|
462
|
+
const baseInterval = 60000; // 1 minute
|
|
463
|
+
const jitter = Math.floor(Math.random() * 20000) - 10000; // -10000 to +10000
|
|
464
|
+
const interval = baseInterval + jitter;
|
|
465
|
+
this.heartbeatInterval = setTimeout(async () => {
|
|
343
466
|
if (this.connectionId && !this.isShuttingDown) {
|
|
467
|
+
// Check for idle timeout
|
|
468
|
+
const idleTime = Date.now() - this.lastActivityTime;
|
|
469
|
+
if (idleTime >= IDLE_TIMEOUT_MS) {
|
|
470
|
+
const idleMinutes = Math.floor(idleTime / 60000);
|
|
471
|
+
console.log(chalk.yellow(`\n⏰ Idle timeout: No commands received for ${idleMinutes} minutes`));
|
|
472
|
+
console.log(chalk.yellow("Auto-terminating to save resources..."));
|
|
473
|
+
await this.cleanup();
|
|
474
|
+
process.exit(0);
|
|
475
|
+
}
|
|
344
476
|
try {
|
|
345
477
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
346
478
|
const result = (await this.convex.mutation(api.localSandbox.heartbeat, {
|
|
@@ -353,16 +485,29 @@ class LocalSandboxClient {
|
|
|
353
485
|
await this.cleanup();
|
|
354
486
|
process.exit(1);
|
|
355
487
|
}
|
|
488
|
+
// Refresh session and restart subscription with new session
|
|
489
|
+
if (result.session) {
|
|
490
|
+
this.session = result.session;
|
|
491
|
+
this.restartCommandSubscription();
|
|
492
|
+
}
|
|
356
493
|
}
|
|
357
|
-
catch {
|
|
358
|
-
|
|
494
|
+
catch (error) {
|
|
495
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
496
|
+
console.debug(`Heartbeat error (will retry): ${message}`);
|
|
359
497
|
}
|
|
360
498
|
}
|
|
361
|
-
|
|
499
|
+
// Schedule next heartbeat with fresh jitter
|
|
500
|
+
if (!this.isShuttingDown) {
|
|
501
|
+
this.scheduleNextHeartbeat();
|
|
502
|
+
}
|
|
503
|
+
}, interval);
|
|
504
|
+
}
|
|
505
|
+
startHeartbeat() {
|
|
506
|
+
this.scheduleNextHeartbeat();
|
|
362
507
|
}
|
|
363
508
|
stopHeartbeat() {
|
|
364
509
|
if (this.heartbeatInterval) {
|
|
365
|
-
|
|
510
|
+
clearTimeout(this.heartbeatInterval);
|
|
366
511
|
this.heartbeatInterval = undefined;
|
|
367
512
|
}
|
|
368
513
|
}
|
|
@@ -372,36 +517,58 @@ class LocalSandboxClient {
|
|
|
372
517
|
this.commandSubscription = undefined;
|
|
373
518
|
}
|
|
374
519
|
}
|
|
520
|
+
restartCommandSubscription() {
|
|
521
|
+
this.stopCommandSubscription();
|
|
522
|
+
this.startCommandSubscription();
|
|
523
|
+
}
|
|
375
524
|
async cleanup() {
|
|
376
525
|
console.log(chalk.blue("\n🧹 Cleaning up..."));
|
|
377
526
|
this.isShuttingDown = true;
|
|
378
527
|
this.stopHeartbeat();
|
|
379
528
|
this.stopCommandSubscription();
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
529
|
+
// Set up force-exit timeout (5 seconds)
|
|
530
|
+
const forceExitTimeout = setTimeout(() => {
|
|
531
|
+
console.log(chalk.yellow("⚠️ Force exiting after 5 second timeout..."));
|
|
532
|
+
process.exit(1);
|
|
533
|
+
}, 5000);
|
|
534
|
+
try {
|
|
535
|
+
if (this.connectionId) {
|
|
536
|
+
try {
|
|
537
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
538
|
+
await this.convex.mutation(api.localSandbox.disconnect, {
|
|
539
|
+
token: this.config.token,
|
|
540
|
+
connectionId: this.connectionId,
|
|
541
|
+
});
|
|
542
|
+
console.log(chalk.green("✓ Disconnected"));
|
|
543
|
+
}
|
|
544
|
+
catch (error) {
|
|
545
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
546
|
+
console.warn(chalk.yellow(`⚠️ Failed to disconnect: ${message}`));
|
|
547
|
+
}
|
|
388
548
|
}
|
|
389
|
-
|
|
390
|
-
|
|
549
|
+
if (this.containerId) {
|
|
550
|
+
if (this.config.persist) {
|
|
551
|
+
console.log(chalk.green(`✓ Container preserved: ${this.getContainerName()}`));
|
|
552
|
+
console.log(chalk.gray(" (Use --persist again to reuse it, or docker rm to remove)"));
|
|
553
|
+
}
|
|
554
|
+
else {
|
|
555
|
+
const result = await runShellCommand(`docker rm -f ${this.containerId}`, {
|
|
556
|
+
timeout: 3000,
|
|
557
|
+
});
|
|
558
|
+
if (result.exitCode === 0) {
|
|
559
|
+
console.log(chalk.green("✓ Container removed"));
|
|
560
|
+
}
|
|
561
|
+
else {
|
|
562
|
+
console.error(chalk.red("Error removing container:"), result.stderr);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
391
565
|
}
|
|
566
|
+
// Close the Convex client to clean up WebSocket connection
|
|
567
|
+
await this.convex.close();
|
|
392
568
|
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
await execAsync(`docker rm -f ${this.containerId}`);
|
|
396
|
-
console.log(chalk.green("✓ Container removed"));
|
|
397
|
-
}
|
|
398
|
-
catch (error) {
|
|
399
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
400
|
-
console.error(chalk.red("Error removing container:"), message);
|
|
401
|
-
}
|
|
569
|
+
finally {
|
|
570
|
+
clearTimeout(forceExitTimeout);
|
|
402
571
|
}
|
|
403
|
-
// Close the Convex client to clean up WebSocket connection
|
|
404
|
-
await this.convex.close();
|
|
405
572
|
}
|
|
406
573
|
}
|
|
407
574
|
// Parse command-line arguments
|
|
@@ -426,6 +593,7 @@ ${chalk.yellow("Options:")}
|
|
|
426
593
|
--name NAME Connection name (default: hostname)
|
|
427
594
|
--image IMAGE Docker image to use (default: pre-built HackerAI sandbox)
|
|
428
595
|
--dangerous Run commands directly on host OS (no Docker)
|
|
596
|
+
--persist Keep container running on exit and reuse if exists
|
|
429
597
|
--convex-url URL Override Convex backend URL (for development)
|
|
430
598
|
--help, -h Show this help message
|
|
431
599
|
|
|
@@ -436,6 +604,9 @@ ${chalk.yellow("Examples:")}
|
|
|
436
604
|
# Use a custom Docker image (e.g., Kali Linux)
|
|
437
605
|
npx @hackerai/local --token hsb_abc123 --name "Kali" --image kalilinux/kali-rolling
|
|
438
606
|
|
|
607
|
+
# Persistent container (faster restarts, preserves installed packages)
|
|
608
|
+
npx @hackerai/local --token hsb_abc123 --name "Dev" --persist
|
|
609
|
+
|
|
439
610
|
# Dangerous mode (no Docker isolation) - use with caution!
|
|
440
611
|
npx @hackerai/local --token hsb_abc123 --name "Work PC" --dangerous
|
|
441
612
|
|
|
@@ -447,6 +618,10 @@ ${chalk.red("⚠️ Security Warning:")}
|
|
|
447
618
|
Docker mode provides process isolation but uses --network host for direct
|
|
448
619
|
network access (required for pentesting tools to scan network services).
|
|
449
620
|
In DANGEROUS mode, commands run directly on your OS without any isolation.
|
|
621
|
+
|
|
622
|
+
${chalk.cyan("Auto-termination:")}
|
|
623
|
+
The client automatically terminates after 1 hour of inactivity (no commands
|
|
624
|
+
executed) to save system resources.
|
|
450
625
|
`);
|
|
451
626
|
process.exit(0);
|
|
452
627
|
}
|
|
@@ -457,6 +632,7 @@ const config = {
|
|
|
457
632
|
image: getArg("--image") || DEFAULT_IMAGE,
|
|
458
633
|
dangerous: hasFlag("--dangerous"),
|
|
459
634
|
build: hasFlag("--build"),
|
|
635
|
+
persist: hasFlag("--persist"),
|
|
460
636
|
};
|
|
461
637
|
if (!config.token) {
|
|
462
638
|
console.error(chalk.red("❌ No authentication token provided"));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|