@hackerai/local 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +380 -0
- package/dist/index.js.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# @hackerai/local
|
|
2
|
+
|
|
3
|
+
HackerAI Local Sandbox Client - Execute commands on your local machine from HackerAI.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx @hackerai/local --token YOUR_TOKEN
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or install globally:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install -g @hackerai/local
|
|
15
|
+
hackerai-local --token YOUR_TOKEN
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
### Basic Usage (Docker Mode)
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npx @hackerai/local --token hsb_abc123 --name "My Laptop"
|
|
24
|
+
```
|
|
25
|
+
|
|
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.
|
|
28
|
+
|
|
29
|
+
### Custom Docker Image
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx @hackerai/local --token hsb_abc123 --name "Kali" --image kalilinux/kali-rolling
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Dangerous Mode (No Docker)
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npx @hackerai/local --token hsb_abc123 --name "Work PC" --dangerous
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Warning:** Dangerous mode runs commands directly on your host OS without isolation.
|
|
42
|
+
|
|
43
|
+
## Options
|
|
44
|
+
|
|
45
|
+
| Option | Description |
|
|
46
|
+
|--------|-------------|
|
|
47
|
+
| `--token TOKEN` | Authentication token from HackerAI Settings (required) |
|
|
48
|
+
| `--name NAME` | Connection name shown in HackerAI (default: hostname) |
|
|
49
|
+
| `--image IMAGE` | Docker image to use (default: hackeraidev/sandbox) |
|
|
50
|
+
| `--dangerous` | Run commands directly on host OS without Docker |
|
|
51
|
+
| `--convex-url URL` | Override backend URL (for development) |
|
|
52
|
+
| `--help, -h` | Show help message |
|
|
53
|
+
|
|
54
|
+
## Getting Your Token
|
|
55
|
+
|
|
56
|
+
1. Go to [HackerAI Settings](https://hackerai.com/settings)
|
|
57
|
+
2. Navigate to the "Local Sandbox" tab
|
|
58
|
+
3. Click "Generate Token" or copy your existing token
|
|
59
|
+
|
|
60
|
+
## Security
|
|
61
|
+
|
|
62
|
+
- **Docker Mode**: Commands run in an isolated container with `--network host` for network access
|
|
63
|
+
- **Dangerous Mode**: Commands run directly on your OS - use with caution
|
|
64
|
+
|
|
65
|
+
## License
|
|
66
|
+
|
|
67
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* HackerAI Local Sandbox Client
|
|
4
|
+
*
|
|
5
|
+
* Connects to HackerAI backend via Convex and executes commands
|
|
6
|
+
* on the local machine (either in Docker or directly on the host OS).
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx @hackerai/local --token TOKEN --name "My Laptop"
|
|
10
|
+
* npx @hackerai/local --token TOKEN --name "Kali" --image kalilinux/kali-rolling
|
|
11
|
+
* npx @hackerai/local --token TOKEN --name "Work PC" --dangerous
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* HackerAI Local Sandbox Client
|
|
5
|
+
*
|
|
6
|
+
* Connects to HackerAI backend via Convex and executes commands
|
|
7
|
+
* on the local machine (either in Docker or directly on the host OS).
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* npx @hackerai/local --token TOKEN --name "My Laptop"
|
|
11
|
+
* npx @hackerai/local --token TOKEN --name "Kali" --image kalilinux/kali-rolling
|
|
12
|
+
* npx @hackerai/local --token TOKEN --name "Work PC" --dangerous
|
|
13
|
+
*/
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const browser_1 = require("convex/browser");
|
|
19
|
+
const child_process_1 = require("child_process");
|
|
20
|
+
const util_1 = require("util");
|
|
21
|
+
const os_1 = __importDefault(require("os"));
|
|
22
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
23
|
+
function runWithOutput(command, args) {
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
const proc = (0, child_process_1.spawn)(command, args, { stdio: "inherit" });
|
|
26
|
+
proc.on("close", (code) => {
|
|
27
|
+
if (code === 0)
|
|
28
|
+
resolve();
|
|
29
|
+
else
|
|
30
|
+
reject(new Error(`Process exited with code ${code}`));
|
|
31
|
+
});
|
|
32
|
+
proc.on("error", reject);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// Production Convex URL - hardcoded for the published package
|
|
36
|
+
const PRODUCTION_CONVEX_URL = "https://convex.haiusercontent.com";
|
|
37
|
+
// Default pre-built image with all pentesting tools
|
|
38
|
+
const DEFAULT_IMAGE = "hackeraidev/sandbox";
|
|
39
|
+
// Convex function references (string paths work at runtime)
|
|
40
|
+
const api = {
|
|
41
|
+
localSandbox: {
|
|
42
|
+
connect: "localSandbox:connect",
|
|
43
|
+
heartbeat: "localSandbox:heartbeat",
|
|
44
|
+
disconnect: "localSandbox:disconnect",
|
|
45
|
+
getPendingCommands: "localSandbox:getPendingCommands",
|
|
46
|
+
markCommandExecuting: "localSandbox:markCommandExecuting",
|
|
47
|
+
submitResult: "localSandbox:submitResult",
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
// ANSI color codes for terminal output
|
|
51
|
+
const chalk = {
|
|
52
|
+
blue: (s) => `\x1b[34m${s}\x1b[0m`,
|
|
53
|
+
green: (s) => `\x1b[32m${s}\x1b[0m`,
|
|
54
|
+
red: (s) => `\x1b[31m${s}\x1b[0m`,
|
|
55
|
+
yellow: (s) => `\x1b[33m${s}\x1b[0m`,
|
|
56
|
+
cyan: (s) => `\x1b[36m${s}\x1b[0m`,
|
|
57
|
+
gray: (s) => `\x1b[90m${s}\x1b[0m`,
|
|
58
|
+
bold: (s) => `\x1b[1m${s}\x1b[0m`,
|
|
59
|
+
};
|
|
60
|
+
class LocalSandboxClient {
|
|
61
|
+
config;
|
|
62
|
+
convex;
|
|
63
|
+
containerId;
|
|
64
|
+
userId;
|
|
65
|
+
connectionId;
|
|
66
|
+
heartbeatInterval;
|
|
67
|
+
pollInterval;
|
|
68
|
+
isShuttingDown = false;
|
|
69
|
+
constructor(config) {
|
|
70
|
+
this.config = config;
|
|
71
|
+
this.convex = new browser_1.ConvexHttpClient(config.convexUrl);
|
|
72
|
+
}
|
|
73
|
+
async start() {
|
|
74
|
+
console.log(chalk.blue("🚀 Starting HackerAI local sandbox..."));
|
|
75
|
+
if (!this.config.dangerous) {
|
|
76
|
+
try {
|
|
77
|
+
await execAsync("docker --version");
|
|
78
|
+
console.log(chalk.green("✓ Docker is available"));
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
console.error(chalk.red("❌ Docker not found. Please install Docker or use --dangerous mode."));
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
this.containerId = await this.createContainer();
|
|
85
|
+
console.log(chalk.green(`✓ Container: ${this.containerId.slice(0, 12)}`));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log(chalk.yellow("⚠️ DANGEROUS MODE - Commands will run directly on your OS!"));
|
|
89
|
+
}
|
|
90
|
+
await this.connect();
|
|
91
|
+
}
|
|
92
|
+
async createContainer() {
|
|
93
|
+
const image = this.config.image;
|
|
94
|
+
const isDefaultImage = image === DEFAULT_IMAGE;
|
|
95
|
+
if (this.config.build) {
|
|
96
|
+
console.log(chalk.red("❌ --build flag is not supported in the npx package."));
|
|
97
|
+
console.log(chalk.yellow("Use the pre-built image or specify a custom --image."));
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
else if (isDefaultImage) {
|
|
101
|
+
console.log(chalk.blue(`Pulling pre-built image: ${image}`));
|
|
102
|
+
console.log(chalk.gray("(First run may take a few minutes to download the image)"));
|
|
103
|
+
console.log("");
|
|
104
|
+
try {
|
|
105
|
+
await runWithOutput("docker", ["pull", image]);
|
|
106
|
+
console.log(chalk.green("✓ Image ready"));
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
110
|
+
console.error(chalk.red("❌ Failed to pull image:"), message);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
console.log(chalk.blue("Creating Docker container..."));
|
|
115
|
+
const { stdout } = await execAsync(`docker run -d --network host ${this.config.image} tail -f /dev/null`);
|
|
116
|
+
return stdout.trim();
|
|
117
|
+
}
|
|
118
|
+
getOsInfo() {
|
|
119
|
+
return {
|
|
120
|
+
platform: os_1.default.platform(),
|
|
121
|
+
arch: os_1.default.arch(),
|
|
122
|
+
release: os_1.default.release(),
|
|
123
|
+
hostname: os_1.default.hostname(),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
async connect() {
|
|
127
|
+
console.log(chalk.blue("Connecting to HackerAI..."));
|
|
128
|
+
try {
|
|
129
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
130
|
+
const result = (await this.convex.mutation(api.localSandbox.connect, {
|
|
131
|
+
token: this.config.token,
|
|
132
|
+
connectionName: this.config.name,
|
|
133
|
+
containerId: this.containerId,
|
|
134
|
+
clientVersion: "1.0.0",
|
|
135
|
+
mode: this.config.dangerous ? "dangerous" : "docker",
|
|
136
|
+
osInfo: this.config.dangerous ? this.getOsInfo() : undefined,
|
|
137
|
+
}));
|
|
138
|
+
if (!result.success) {
|
|
139
|
+
throw new Error(result.error || "Authentication failed");
|
|
140
|
+
}
|
|
141
|
+
this.userId = result.userId;
|
|
142
|
+
this.connectionId = result.connectionId;
|
|
143
|
+
console.log(chalk.green("✓ Authenticated"));
|
|
144
|
+
console.log(chalk.bold(chalk.green("🎉 Local sandbox is ready!")));
|
|
145
|
+
console.log(chalk.gray(`Connection: ${this.connectionId}`));
|
|
146
|
+
console.log(chalk.gray(`Mode: ${this.config.dangerous ? "DANGEROUS" : "Docker"}`));
|
|
147
|
+
this.startHeartbeat();
|
|
148
|
+
this.startPolling();
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
const err = error;
|
|
152
|
+
const errorMessage = err?.data?.message || err?.message || JSON.stringify(error);
|
|
153
|
+
console.error(chalk.red("❌ Connection failed:"), errorMessage);
|
|
154
|
+
if (errorMessage.includes("Invalid token") ||
|
|
155
|
+
errorMessage.includes("token")) {
|
|
156
|
+
console.error(chalk.yellow("Please regenerate your token in Settings"));
|
|
157
|
+
}
|
|
158
|
+
await this.cleanup();
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
startPolling() {
|
|
163
|
+
this.pollInterval = setInterval(async () => {
|
|
164
|
+
if (this.isShuttingDown || !this.connectionId)
|
|
165
|
+
return;
|
|
166
|
+
try {
|
|
167
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
168
|
+
const data = (await this.convex.query(api.localSandbox.getPendingCommands, {
|
|
169
|
+
connectionId: this.connectionId,
|
|
170
|
+
}));
|
|
171
|
+
if (data?.commands && data.commands.length > 0) {
|
|
172
|
+
for (const cmd of data.commands) {
|
|
173
|
+
await this.executeCommand(cmd);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// Ignore polling errors
|
|
179
|
+
}
|
|
180
|
+
}, 500);
|
|
181
|
+
}
|
|
182
|
+
async executeCommand(cmd) {
|
|
183
|
+
const { command_id, command, env, cwd, timeout } = cmd;
|
|
184
|
+
const startTime = Date.now();
|
|
185
|
+
console.log(chalk.cyan(`▶ Executing: ${command}`));
|
|
186
|
+
try {
|
|
187
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
188
|
+
await this.convex.mutation(api.localSandbox.markCommandExecuting, {
|
|
189
|
+
commandId: command_id,
|
|
190
|
+
});
|
|
191
|
+
let fullCommand = command;
|
|
192
|
+
if (cwd && cwd.trim() !== "") {
|
|
193
|
+
fullCommand = `cd "${cwd}" 2>/dev/null && ${fullCommand}`;
|
|
194
|
+
}
|
|
195
|
+
if (env) {
|
|
196
|
+
const envString = Object.entries(env)
|
|
197
|
+
.map(([k, v]) => `export ${k}="${v}"`)
|
|
198
|
+
.join("; ");
|
|
199
|
+
fullCommand = `${envString}; ${fullCommand}`;
|
|
200
|
+
}
|
|
201
|
+
let result;
|
|
202
|
+
if (this.config.dangerous) {
|
|
203
|
+
result = await execAsync(fullCommand, {
|
|
204
|
+
timeout: timeout ?? 30000,
|
|
205
|
+
shell: "/bin/bash",
|
|
206
|
+
}).catch((error) => ({
|
|
207
|
+
stdout: error.stdout || "",
|
|
208
|
+
stderr: error.stderr || error.message || "",
|
|
209
|
+
code: error.code || 1,
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
const escapedCommand = fullCommand.replace(/"/g, '\\"');
|
|
214
|
+
result = await execAsync(`docker exec ${this.containerId} bash -c "${escapedCommand}"`, { timeout: timeout ?? 30000 }).catch((error) => ({
|
|
215
|
+
stdout: error.stdout || "",
|
|
216
|
+
stderr: error.stderr || error.message || "",
|
|
217
|
+
code: error.code || 1,
|
|
218
|
+
}));
|
|
219
|
+
}
|
|
220
|
+
const duration = Date.now() - startTime;
|
|
221
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
222
|
+
await this.convex.mutation(api.localSandbox.submitResult, {
|
|
223
|
+
commandId: command_id,
|
|
224
|
+
userId: this.userId,
|
|
225
|
+
stdout: result.stdout || "",
|
|
226
|
+
stderr: result.stderr || "",
|
|
227
|
+
exitCode: result.code || 0,
|
|
228
|
+
duration,
|
|
229
|
+
});
|
|
230
|
+
console.log(chalk.green(`✓ Command completed in ${duration}ms`));
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
const duration = Date.now() - startTime;
|
|
234
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
235
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
236
|
+
await this.convex.mutation(api.localSandbox.submitResult, {
|
|
237
|
+
commandId: command_id,
|
|
238
|
+
userId: this.userId,
|
|
239
|
+
stdout: "",
|
|
240
|
+
stderr: message,
|
|
241
|
+
exitCode: 1,
|
|
242
|
+
duration,
|
|
243
|
+
});
|
|
244
|
+
console.log(chalk.red(`✗ Command failed: ${message}`));
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
startHeartbeat() {
|
|
248
|
+
this.heartbeatInterval = setInterval(async () => {
|
|
249
|
+
if (this.connectionId) {
|
|
250
|
+
try {
|
|
251
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
252
|
+
const result = (await this.convex.mutation(api.localSandbox.heartbeat, {
|
|
253
|
+
connectionId: this.connectionId,
|
|
254
|
+
}));
|
|
255
|
+
if (!result.success) {
|
|
256
|
+
console.log(chalk.yellow("⚠️ Heartbeat failed, connection may be stale"));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
// Ignore heartbeat errors
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}, 10000);
|
|
264
|
+
}
|
|
265
|
+
stopHeartbeat() {
|
|
266
|
+
if (this.heartbeatInterval) {
|
|
267
|
+
clearInterval(this.heartbeatInterval);
|
|
268
|
+
this.heartbeatInterval = undefined;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
stopPolling() {
|
|
272
|
+
if (this.pollInterval) {
|
|
273
|
+
clearInterval(this.pollInterval);
|
|
274
|
+
this.pollInterval = undefined;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
async cleanup() {
|
|
278
|
+
console.log(chalk.blue("\n🧹 Cleaning up..."));
|
|
279
|
+
this.isShuttingDown = true;
|
|
280
|
+
this.stopHeartbeat();
|
|
281
|
+
this.stopPolling();
|
|
282
|
+
if (this.connectionId) {
|
|
283
|
+
try {
|
|
284
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
285
|
+
await this.convex.mutation(api.localSandbox.disconnect, {
|
|
286
|
+
connectionId: this.connectionId,
|
|
287
|
+
});
|
|
288
|
+
console.log(chalk.green("✓ Disconnected"));
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
// Ignore disconnect errors
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
if (this.containerId) {
|
|
295
|
+
try {
|
|
296
|
+
await execAsync(`docker rm -f ${this.containerId}`);
|
|
297
|
+
console.log(chalk.green("✓ Container removed"));
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
301
|
+
console.error(chalk.red("Error removing container:"), message);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
// Parse command-line arguments
|
|
307
|
+
const args = process.argv.slice(2);
|
|
308
|
+
const getArg = (flag) => {
|
|
309
|
+
const index = args.indexOf(flag);
|
|
310
|
+
return index >= 0 ? args[index + 1] : undefined;
|
|
311
|
+
};
|
|
312
|
+
const hasFlag = (flag) => {
|
|
313
|
+
return args.includes(flag);
|
|
314
|
+
};
|
|
315
|
+
// Show help
|
|
316
|
+
if (hasFlag("--help") || hasFlag("-h")) {
|
|
317
|
+
console.log(`
|
|
318
|
+
${chalk.bold("HackerAI Local Sandbox Client")}
|
|
319
|
+
|
|
320
|
+
${chalk.yellow("Usage:")}
|
|
321
|
+
npx @hackerai/local --token TOKEN [options]
|
|
322
|
+
|
|
323
|
+
${chalk.yellow("Options:")}
|
|
324
|
+
--token TOKEN Authentication token from Settings (required)
|
|
325
|
+
--name NAME Connection name (default: hostname)
|
|
326
|
+
--image IMAGE Docker image to use (default: pre-built HackerAI sandbox)
|
|
327
|
+
--dangerous Run commands directly on host OS (no Docker)
|
|
328
|
+
--convex-url URL Override Convex backend URL (for development)
|
|
329
|
+
--help, -h Show this help message
|
|
330
|
+
|
|
331
|
+
${chalk.yellow("Examples:")}
|
|
332
|
+
# Basic usage - pulls pre-built image with 30+ pentesting tools
|
|
333
|
+
npx @hackerai/local --token hsb_abc123 --name "My Laptop"
|
|
334
|
+
|
|
335
|
+
# Use a custom Docker image (e.g., Kali Linux)
|
|
336
|
+
npx @hackerai/local --token hsb_abc123 --name "Kali" --image kalilinux/kali-rolling
|
|
337
|
+
|
|
338
|
+
# Dangerous mode (no Docker isolation) - use with caution!
|
|
339
|
+
npx @hackerai/local --token hsb_abc123 --name "Work PC" --dangerous
|
|
340
|
+
|
|
341
|
+
${chalk.cyan("Pre-built Image:")}
|
|
342
|
+
The default image includes: nmap, sqlmap, ffuf, gobuster, nuclei, hydra,
|
|
343
|
+
nikto, wpscan, subfinder, httpx, and 20+ more pentesting tools.
|
|
344
|
+
|
|
345
|
+
${chalk.red("⚠️ Security Warning:")}
|
|
346
|
+
In Docker mode, commands run in an isolated container with --network host.
|
|
347
|
+
In DANGEROUS mode, commands run directly on your OS without isolation.
|
|
348
|
+
`);
|
|
349
|
+
process.exit(0);
|
|
350
|
+
}
|
|
351
|
+
const config = {
|
|
352
|
+
convexUrl: getArg("--convex-url") || PRODUCTION_CONVEX_URL,
|
|
353
|
+
token: getArg("--token") || "",
|
|
354
|
+
name: getArg("--name") || os_1.default.hostname(),
|
|
355
|
+
image: getArg("--image") || DEFAULT_IMAGE,
|
|
356
|
+
dangerous: hasFlag("--dangerous"),
|
|
357
|
+
build: hasFlag("--build"),
|
|
358
|
+
};
|
|
359
|
+
if (!config.token) {
|
|
360
|
+
console.error(chalk.red("❌ No authentication token provided"));
|
|
361
|
+
console.error(chalk.yellow("Usage: npx @hackerai/local --token YOUR_TOKEN"));
|
|
362
|
+
console.error(chalk.yellow("Get your token from HackerAI Settings > Local Sandbox"));
|
|
363
|
+
process.exit(1);
|
|
364
|
+
}
|
|
365
|
+
const client = new LocalSandboxClient(config);
|
|
366
|
+
process.on("SIGINT", async () => {
|
|
367
|
+
console.log(chalk.yellow("\n🛑 Shutting down..."));
|
|
368
|
+
await client.cleanup();
|
|
369
|
+
process.exit(0);
|
|
370
|
+
});
|
|
371
|
+
process.on("SIGTERM", async () => {
|
|
372
|
+
await client.cleanup();
|
|
373
|
+
process.exit(0);
|
|
374
|
+
});
|
|
375
|
+
client.start().catch((error) => {
|
|
376
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
377
|
+
console.error(chalk.red("Fatal error:"), message);
|
|
378
|
+
process.exit(1);
|
|
379
|
+
});
|
|
380
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hackerai/local",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "HackerAI Local Sandbox Client - Execute commands on your local machine",
|
|
5
|
+
"bin": {
|
|
6
|
+
"hackerai-local": "./dist/index.js"
|
|
7
|
+
},
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"dev": "tsc --watch",
|
|
16
|
+
"prepublishOnly": "npm run build"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"hackerai",
|
|
20
|
+
"sandbox",
|
|
21
|
+
"pentesting",
|
|
22
|
+
"security",
|
|
23
|
+
"cli"
|
|
24
|
+
],
|
|
25
|
+
"author": "HackerAI",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "https://github.com/hackerai-tech/hackerai.git",
|
|
30
|
+
"directory": "packages/local"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=18"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"convex": "^1.29.2"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^22.0.0",
|
|
40
|
+
"typescript": "^5.0.0"
|
|
41
|
+
}
|
|
42
|
+
}
|