@hackerai/local 0.6.0 → 0.7.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/__tests__/utils.test.d.ts +1 -4
- package/dist/__tests__/utils.test.d.ts.map +1 -1
- package/dist/__tests__/utils.test.js +1 -93
- package/dist/__tests__/utils.test.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -197
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts +0 -30
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -52
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/pty-manager.d.ts +0 -95
- package/dist/pty-manager.d.ts.map +0 -1
- package/dist/pty-manager.js +0 -452
- package/dist/pty-manager.js.map +0 -1
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* These tests verify:
|
|
5
5
|
* - Output truncation (25% head + 75% tail strategy)
|
|
6
|
-
* -
|
|
7
|
-
* - Docker run command building
|
|
8
|
-
* - Sandbox mode detection
|
|
9
|
-
* - Shell detection parsing
|
|
6
|
+
* - Platform shell detection
|
|
10
7
|
*/
|
|
11
8
|
export {};
|
|
12
9
|
//# sourceMappingURL=utils.test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/utils.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/utils.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -4,10 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* These tests verify:
|
|
6
6
|
* - Output truncation (25% head + 75% tail strategy)
|
|
7
|
-
* -
|
|
8
|
-
* - Docker run command building
|
|
9
|
-
* - Sandbox mode detection
|
|
10
|
-
* - Shell detection parsing
|
|
7
|
+
* - Platform shell detection
|
|
11
8
|
*/
|
|
12
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
10
|
const utils_1 = require("../utils");
|
|
@@ -47,95 +44,6 @@ describe("Output Truncation", () => {
|
|
|
47
44
|
expect(result).toContain(utils_1.TRUNCATION_MARKER);
|
|
48
45
|
});
|
|
49
46
|
});
|
|
50
|
-
describe("Docker Capabilities", () => {
|
|
51
|
-
it("should include NET_RAW for ping, nmap, raw sockets", () => {
|
|
52
|
-
expect(utils_1.DOCKER_CAPABILITIES).toContain("NET_RAW");
|
|
53
|
-
});
|
|
54
|
-
it("should include NET_ADMIN for network interface tools", () => {
|
|
55
|
-
expect(utils_1.DOCKER_CAPABILITIES).toContain("NET_ADMIN");
|
|
56
|
-
});
|
|
57
|
-
it("should include SYS_PTRACE for debugging tools", () => {
|
|
58
|
-
expect(utils_1.DOCKER_CAPABILITIES).toContain("SYS_PTRACE");
|
|
59
|
-
});
|
|
60
|
-
it("should build capability flags correctly", () => {
|
|
61
|
-
const flags = (0, utils_1.buildDockerCapabilityFlags)();
|
|
62
|
-
expect(flags).toBe("--cap-add=NET_RAW --cap-add=NET_ADMIN --cap-add=SYS_PTRACE");
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
describe("Docker Run Command", () => {
|
|
66
|
-
it("should build basic docker run command with capabilities", () => {
|
|
67
|
-
const cmd = (0, utils_1.buildDockerRunCommand)({ image: "hackerai/sandbox:latest" });
|
|
68
|
-
expect(cmd).toContain("docker run -d");
|
|
69
|
-
expect(cmd).toContain("--cap-add=NET_RAW");
|
|
70
|
-
expect(cmd).toContain("--cap-add=NET_ADMIN");
|
|
71
|
-
expect(cmd).toContain("--cap-add=SYS_PTRACE");
|
|
72
|
-
expect(cmd).toContain("--network host");
|
|
73
|
-
expect(cmd).toContain("hackerai/sandbox:latest");
|
|
74
|
-
expect(cmd).toContain("tail -f /dev/null");
|
|
75
|
-
});
|
|
76
|
-
it("should include container name when provided", () => {
|
|
77
|
-
const cmd = (0, utils_1.buildDockerRunCommand)({
|
|
78
|
-
image: "hackerai/sandbox:latest",
|
|
79
|
-
containerName: "my-container",
|
|
80
|
-
});
|
|
81
|
-
expect(cmd).toContain("--name my-container");
|
|
82
|
-
});
|
|
83
|
-
it("should not include container name when not provided", () => {
|
|
84
|
-
const cmd = (0, utils_1.buildDockerRunCommand)({ image: "hackerai/sandbox:latest" });
|
|
85
|
-
expect(cmd).not.toContain("--name");
|
|
86
|
-
});
|
|
87
|
-
it("should exclude capabilities when disabled", () => {
|
|
88
|
-
const cmd = (0, utils_1.buildDockerRunCommand)({
|
|
89
|
-
image: "alpine",
|
|
90
|
-
capabilities: false,
|
|
91
|
-
});
|
|
92
|
-
expect(cmd).not.toContain("--cap-add");
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
describe("Sandbox Mode Detection", () => {
|
|
96
|
-
it("should return 'dangerous' when dangerous flag is set", () => {
|
|
97
|
-
const mode = (0, utils_1.getSandboxMode)({
|
|
98
|
-
dangerous: true,
|
|
99
|
-
});
|
|
100
|
-
expect(mode).toBe("dangerous");
|
|
101
|
-
});
|
|
102
|
-
it("should return 'docker' when dangerous flag is not set", () => {
|
|
103
|
-
const mode = (0, utils_1.getSandboxMode)({
|
|
104
|
-
dangerous: false,
|
|
105
|
-
});
|
|
106
|
-
expect(mode).toBe("docker");
|
|
107
|
-
});
|
|
108
|
-
it("should return 'docker' when dangerous flag is undefined", () => {
|
|
109
|
-
const mode = (0, utils_1.getSandboxMode)({});
|
|
110
|
-
expect(mode).toBe("docker");
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
describe("Shell Detection Parsing", () => {
|
|
114
|
-
it("should return bash when found", () => {
|
|
115
|
-
const shell = (0, utils_1.parseShellDetectionOutput)("/bin/bash");
|
|
116
|
-
expect(shell).toBe("/bin/bash");
|
|
117
|
-
});
|
|
118
|
-
it("should return sh when bash not found", () => {
|
|
119
|
-
const shell = (0, utils_1.parseShellDetectionOutput)("/bin/sh");
|
|
120
|
-
expect(shell).toBe("/bin/sh");
|
|
121
|
-
});
|
|
122
|
-
it("should take first line when multiple results", () => {
|
|
123
|
-
const shell = (0, utils_1.parseShellDetectionOutput)("/bin/bash\n/bin/sh");
|
|
124
|
-
expect(shell).toBe("/bin/bash");
|
|
125
|
-
});
|
|
126
|
-
it("should return /bin/sh for empty output", () => {
|
|
127
|
-
const shell = (0, utils_1.parseShellDetectionOutput)("");
|
|
128
|
-
expect(shell).toBe("/bin/sh");
|
|
129
|
-
});
|
|
130
|
-
it("should return /bin/sh for whitespace-only output", () => {
|
|
131
|
-
const shell = (0, utils_1.parseShellDetectionOutput)(" \n ");
|
|
132
|
-
expect(shell).toBe("/bin/sh");
|
|
133
|
-
});
|
|
134
|
-
it("should handle Alpine busybox ash path", () => {
|
|
135
|
-
const shell = (0, utils_1.parseShellDetectionOutput)("/bin/ash");
|
|
136
|
-
expect(shell).toBe("/bin/ash");
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
47
|
describe("Platform Shell Detection", () => {
|
|
140
48
|
it("should return cmd.exe for Windows", () => {
|
|
141
49
|
const result = (0, utils_1.getDefaultShell)("win32");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../src/__tests__/utils.test.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../src/__tests__/utils.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* Connects to HackerAI backend via Convex for connection lifecycle
|
|
6
6
|
* and uses Centrifugo for real-time command relay and streaming output.
|
|
7
7
|
*
|
|
8
|
+
* Runs commands directly on the host OS (no Docker isolation).
|
|
9
|
+
*
|
|
8
10
|
* Usage:
|
|
9
|
-
* npx @hackerai/local --token TOKEN --name "My
|
|
10
|
-
* npx @hackerai/local --token TOKEN --name "Work PC" --dangerous
|
|
11
|
+
* npx @hackerai/local --token TOKEN --name "My Machine"
|
|
11
12
|
*/
|
|
12
13
|
export {};
|
|
13
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG"}
|
package/dist/index.js
CHANGED
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
* Connects to HackerAI backend via Convex for connection lifecycle
|
|
7
7
|
* and uses Centrifugo for real-time command relay and streaming output.
|
|
8
8
|
*
|
|
9
|
+
* Runs commands directly on the host OS (no Docker isolation).
|
|
10
|
+
*
|
|
9
11
|
* Usage:
|
|
10
|
-
* npx @hackerai/local --token TOKEN --name "My
|
|
11
|
-
* npx @hackerai/local --token TOKEN --name "Work PC" --dangerous
|
|
12
|
+
* npx @hackerai/local --token TOKEN --name "My Machine"
|
|
12
13
|
*/
|
|
13
14
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
15
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -96,22 +97,8 @@ function runShellCommand(command, options = {}) {
|
|
|
96
97
|
});
|
|
97
98
|
});
|
|
98
99
|
}
|
|
99
|
-
function runWithOutput(command, args) {
|
|
100
|
-
return new Promise((resolve, reject) => {
|
|
101
|
-
const proc = (0, child_process_1.spawn)(command, args, { stdio: "inherit" });
|
|
102
|
-
proc.on("close", (code) => {
|
|
103
|
-
if (code === 0)
|
|
104
|
-
resolve();
|
|
105
|
-
else
|
|
106
|
-
reject(new Error(`Process exited with code ${code}`));
|
|
107
|
-
});
|
|
108
|
-
proc.on("error", reject);
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
100
|
// Production Convex URL - hardcoded for the published package
|
|
112
101
|
const PRODUCTION_CONVEX_URL = "https://convex.haiusercontent.com";
|
|
113
|
-
// Default pre-built image with all pentesting tools
|
|
114
|
-
const DEFAULT_IMAGE = "hackerai/sandbox";
|
|
115
102
|
// Convex function references (string paths work at runtime)
|
|
116
103
|
const api = {
|
|
117
104
|
localSandbox: {
|
|
@@ -135,8 +122,6 @@ class LocalSandboxClient {
|
|
|
135
122
|
convexHttp;
|
|
136
123
|
centrifuge;
|
|
137
124
|
subscription;
|
|
138
|
-
containerId;
|
|
139
|
-
containerShell = "/bin/bash";
|
|
140
125
|
userId;
|
|
141
126
|
connectionId;
|
|
142
127
|
isShuttingDown = false;
|
|
@@ -149,90 +134,9 @@ class LocalSandboxClient {
|
|
|
149
134
|
}
|
|
150
135
|
async start() {
|
|
151
136
|
console.log(chalk.blue("🚀 Starting HackerAI local sandbox..."));
|
|
152
|
-
|
|
153
|
-
const dockerCheck = await runShellCommand("docker --version", {
|
|
154
|
-
timeout: 5000,
|
|
155
|
-
});
|
|
156
|
-
if (dockerCheck.exitCode !== 0) {
|
|
157
|
-
console.error(chalk.red("❌ Docker not found. Please install Docker or use --dangerous mode."));
|
|
158
|
-
process.exit(1);
|
|
159
|
-
}
|
|
160
|
-
console.log(chalk.green("✓ Docker is available"));
|
|
161
|
-
this.containerId = await this.createContainer();
|
|
162
|
-
console.log(chalk.green(`✓ Container: ${this.containerId.slice(0, 12)}`));
|
|
163
|
-
await this.detectContainerShell();
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
console.log(chalk.yellow("⚠️ DANGEROUS MODE - Commands will run directly on your OS!"));
|
|
167
|
-
}
|
|
137
|
+
console.log(chalk.yellow("⚠️ Commands run directly on your OS without any isolation."));
|
|
168
138
|
await this.connect();
|
|
169
139
|
}
|
|
170
|
-
getContainerName() {
|
|
171
|
-
const sanitized = this.config.name
|
|
172
|
-
.toLowerCase()
|
|
173
|
-
.replace(/[^a-z0-9-]/g, "-")
|
|
174
|
-
.replace(/-+/g, "-")
|
|
175
|
-
.replace(/^-|-$/g, "");
|
|
176
|
-
return `hackerai-sandbox-${sanitized || "default"}`;
|
|
177
|
-
}
|
|
178
|
-
async findExistingContainer(containerName) {
|
|
179
|
-
const result = await runShellCommand(`docker ps -a --filter "name=^${containerName}$" --format "{{.ID}}|{{.State}}"`, { timeout: 5000 });
|
|
180
|
-
if (result.exitCode !== 0 || !result.stdout.trim()) {
|
|
181
|
-
return null;
|
|
182
|
-
}
|
|
183
|
-
const [id, state] = result.stdout.trim().split("|");
|
|
184
|
-
return { id, running: state === "running" };
|
|
185
|
-
}
|
|
186
|
-
async createContainer() {
|
|
187
|
-
if (this.config.persist) {
|
|
188
|
-
const containerName = this.getContainerName();
|
|
189
|
-
const existing = await this.findExistingContainer(containerName);
|
|
190
|
-
if (existing) {
|
|
191
|
-
if (existing.running) {
|
|
192
|
-
console.log(chalk.green(`✓ Reusing existing container: ${containerName}`));
|
|
193
|
-
return existing.id;
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
console.log(chalk.blue(`Starting existing container: ${containerName}`));
|
|
197
|
-
const startResult = await runShellCommand(`docker start ${existing.id}`, { timeout: 30000 });
|
|
198
|
-
if (startResult.exitCode === 0) {
|
|
199
|
-
console.log(chalk.green(`✓ Container started: ${containerName}`));
|
|
200
|
-
return existing.id;
|
|
201
|
-
}
|
|
202
|
-
console.log(chalk.yellow(`⚠️ Failed to start, creating new container...`));
|
|
203
|
-
await runShellCommand(`docker rm -f ${existing.id}`, {
|
|
204
|
-
timeout: 5000,
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
if (this.config.build) {
|
|
210
|
-
console.log(chalk.red("❌ --build flag is not supported in the npx package."));
|
|
211
|
-
process.exit(1);
|
|
212
|
-
}
|
|
213
|
-
console.log(chalk.blue(`Pulling pre-built image: ${DEFAULT_IMAGE}`));
|
|
214
|
-
console.log(chalk.gray("(First run may take a few minutes to download the image)"));
|
|
215
|
-
console.log("");
|
|
216
|
-
try {
|
|
217
|
-
await runWithOutput("docker", ["pull", DEFAULT_IMAGE]);
|
|
218
|
-
console.log(chalk.green("✓ Image ready"));
|
|
219
|
-
}
|
|
220
|
-
catch (error) {
|
|
221
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
222
|
-
console.error(chalk.red("❌ Failed to pull image:"), message);
|
|
223
|
-
process.exit(1);
|
|
224
|
-
}
|
|
225
|
-
console.log(chalk.blue("Creating Docker container..."));
|
|
226
|
-
const dockerCommand = (0, utils_1.buildDockerRunCommand)({
|
|
227
|
-
image: DEFAULT_IMAGE,
|
|
228
|
-
containerName: this.config.persist ? this.getContainerName() : undefined,
|
|
229
|
-
});
|
|
230
|
-
const result = await runShellCommand(dockerCommand, { timeout: 60000 });
|
|
231
|
-
if (result.exitCode !== 0) {
|
|
232
|
-
throw new Error(`Failed to create container: ${result.stderr}`);
|
|
233
|
-
}
|
|
234
|
-
return result.stdout.trim();
|
|
235
|
-
}
|
|
236
140
|
getOsInfo() {
|
|
237
141
|
return {
|
|
238
142
|
platform: os_1.default.platform(),
|
|
@@ -241,41 +145,14 @@ class LocalSandboxClient {
|
|
|
241
145
|
hostname: os_1.default.hostname(),
|
|
242
146
|
};
|
|
243
147
|
}
|
|
244
|
-
getMode() {
|
|
245
|
-
return (0, utils_1.getSandboxMode)({
|
|
246
|
-
dangerous: this.config.dangerous,
|
|
247
|
-
});
|
|
248
|
-
}
|
|
249
|
-
getModeDisplay() {
|
|
250
|
-
const mode = this.getMode();
|
|
251
|
-
if (mode === "dangerous") {
|
|
252
|
-
return "DANGEROUS";
|
|
253
|
-
}
|
|
254
|
-
return "Docker";
|
|
255
|
-
}
|
|
256
|
-
async detectContainerShell() {
|
|
257
|
-
if (!this.containerId)
|
|
258
|
-
return;
|
|
259
|
-
const result = await runShellCommand(`docker exec ${this.containerId} sh -c 'command -v bash || command -v sh || echo /bin/sh'`, { timeout: 5000 });
|
|
260
|
-
if (result.exitCode === 0) {
|
|
261
|
-
this.containerShell = (0, utils_1.parseShellDetectionOutput)(result.stdout);
|
|
262
|
-
console.log(chalk.green(`✓ Shell: ${this.containerShell}`));
|
|
263
|
-
}
|
|
264
|
-
else {
|
|
265
|
-
this.containerShell = "/bin/sh";
|
|
266
|
-
console.log(chalk.yellow(`⚠️ Shell detection failed, using ${this.containerShell}`));
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
148
|
async connect() {
|
|
270
149
|
console.log(chalk.blue("Connecting to HackerAI..."));
|
|
271
150
|
try {
|
|
272
151
|
const result = (await this.convexHttp.mutation(api.localSandbox.connect, {
|
|
273
152
|
token: this.config.token,
|
|
274
153
|
connectionName: this.config.name,
|
|
275
|
-
containerId: this.containerId,
|
|
276
154
|
clientVersion: "1.0.0",
|
|
277
|
-
|
|
278
|
-
osInfo: this.config.dangerous ? this.getOsInfo() : undefined,
|
|
155
|
+
osInfo: this.getOsInfo(),
|
|
279
156
|
}));
|
|
280
157
|
if (!result.success ||
|
|
281
158
|
!result.centrifugoToken ||
|
|
@@ -287,7 +164,6 @@ class LocalSandboxClient {
|
|
|
287
164
|
console.log(chalk.green("✓ Authenticated"));
|
|
288
165
|
console.log(chalk.bold(chalk.green("🎉 Local sandbox is ready!")));
|
|
289
166
|
console.log(chalk.gray(`Connection: ${this.connectionId}`));
|
|
290
|
-
console.log(chalk.gray(`Mode: ${this.getModeDisplay()}${this.config.persist ? " (persistent)" : ""}`));
|
|
291
167
|
this.setupCentrifugo(result.centrifugoWsUrl, result.centrifugoToken);
|
|
292
168
|
this.startIdleCheck();
|
|
293
169
|
}
|
|
@@ -432,19 +308,9 @@ class LocalSandboxClient {
|
|
|
432
308
|
return new Promise((resolve) => {
|
|
433
309
|
let killed = false;
|
|
434
310
|
let timeoutId;
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
if (this.config.dangerous) {
|
|
439
|
-
proc = (0, child_process_1.spawn)(DEFAULT_SHELL.shell, [DEFAULT_SHELL.shellFlag, fullCommand], {
|
|
440
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
441
|
-
});
|
|
442
|
-
}
|
|
443
|
-
else {
|
|
444
|
-
const escapedCommand = fullCommand.replace(/'/g, "'\\''");
|
|
445
|
-
const shellName = this.containerShell.split("/").pop() || "sh";
|
|
446
|
-
proc = (0, child_process_1.spawn)("docker", ["exec", this.containerId, shellName, "-c", escapedCommand], { stdio: ["ignore", "pipe", "pipe"] });
|
|
447
|
-
}
|
|
311
|
+
const proc = (0, child_process_1.spawn)(DEFAULT_SHELL.shell, [DEFAULT_SHELL.shellFlag, fullCommand], {
|
|
312
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
313
|
+
});
|
|
448
314
|
if (commandTimeout > 0) {
|
|
449
315
|
timeoutId = setTimeout(() => {
|
|
450
316
|
killed = true;
|
|
@@ -456,9 +322,9 @@ class LocalSandboxClient {
|
|
|
456
322
|
}, 2000);
|
|
457
323
|
}, commandTimeout);
|
|
458
324
|
}
|
|
325
|
+
let accumulatedStderr = "";
|
|
459
326
|
proc.stdout?.on("data", (data) => {
|
|
460
327
|
const chunk = data.toString();
|
|
461
|
-
accumulatedStdout += chunk;
|
|
462
328
|
this.publishToChannel({
|
|
463
329
|
type: "stdout",
|
|
464
330
|
commandId,
|
|
@@ -539,24 +405,12 @@ class LocalSandboxClient {
|
|
|
539
405
|
});
|
|
540
406
|
}
|
|
541
407
|
async spawnBackground(fullCommand) {
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
return child.pid ?? -1;
|
|
549
|
-
}
|
|
550
|
-
else {
|
|
551
|
-
const escapedCommand = fullCommand.replace(/'/g, "'\\''");
|
|
552
|
-
const shellName = this.containerShell.split("/").pop() || "sh";
|
|
553
|
-
const result = await runShellCommand(`docker exec ${this.containerId} ${shellName} -c 'nohup ${escapedCommand} > /dev/null 2>&1 & echo $!'`, { timeout: 5000 });
|
|
554
|
-
if (result.exitCode === 0 && result.stdout.trim()) {
|
|
555
|
-
const pid = parseInt(result.stdout.trim(), 10);
|
|
556
|
-
return isNaN(pid) ? -1 : pid;
|
|
557
|
-
}
|
|
558
|
-
return -1;
|
|
559
|
-
}
|
|
408
|
+
const child = (0, child_process_1.spawn)(DEFAULT_SHELL.shell, [DEFAULT_SHELL.shellFlag, fullCommand], {
|
|
409
|
+
detached: os_1.default.platform() !== "win32",
|
|
410
|
+
stdio: "ignore",
|
|
411
|
+
});
|
|
412
|
+
child.unref();
|
|
413
|
+
return child.pid ?? -1;
|
|
560
414
|
}
|
|
561
415
|
startIdleCheck() {
|
|
562
416
|
this.idleCheckInterval = setInterval(() => {
|
|
@@ -607,23 +461,6 @@ class LocalSandboxClient {
|
|
|
607
461
|
console.warn(chalk.yellow(`⚠️ Failed to disconnect: ${message}`));
|
|
608
462
|
}
|
|
609
463
|
}
|
|
610
|
-
if (this.containerId) {
|
|
611
|
-
if (this.config.persist) {
|
|
612
|
-
console.log(chalk.green(`✓ Container preserved: ${this.getContainerName()}`));
|
|
613
|
-
console.log(chalk.gray(" (Use --persist again to reuse it, or docker rm to remove)"));
|
|
614
|
-
}
|
|
615
|
-
else {
|
|
616
|
-
const result = await runShellCommand(`docker rm -f ${this.containerId}`, {
|
|
617
|
-
timeout: 3000,
|
|
618
|
-
});
|
|
619
|
-
if (result.exitCode === 0) {
|
|
620
|
-
console.log(chalk.green("✓ Container removed"));
|
|
621
|
-
}
|
|
622
|
-
else {
|
|
623
|
-
console.error(chalk.red("Error removing container:"), result.stderr);
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
464
|
}
|
|
628
465
|
finally {
|
|
629
466
|
clearTimeout(forceExitTimeout);
|
|
@@ -650,29 +487,16 @@ ${chalk.yellow("Usage:")}
|
|
|
650
487
|
${chalk.yellow("Options:")}
|
|
651
488
|
--token TOKEN Authentication token from Settings (required)
|
|
652
489
|
--name NAME Connection name (default: hostname)
|
|
653
|
-
--dangerous Run commands directly on host OS (no Docker)
|
|
654
|
-
--persist Keep container running on exit and reuse if exists
|
|
655
490
|
--convex-url URL Override Convex backend URL (for development)
|
|
656
491
|
--help, -h Show this help message
|
|
657
492
|
|
|
658
493
|
${chalk.yellow("Examples:")}
|
|
659
|
-
# Basic usage - pulls pre-built image with 30+ pentesting tools
|
|
660
494
|
npx @hackerai/local --token hsb_abc123 --name "My Laptop"
|
|
661
|
-
|
|
662
|
-
# Persistent container (faster restarts, preserves installed packages)
|
|
663
|
-
npx @hackerai/local --token hsb_abc123 --name "Dev" --persist
|
|
664
|
-
|
|
665
|
-
# Dangerous mode (no Docker isolation) - use with caution!
|
|
666
|
-
npx @hackerai/local --token hsb_abc123 --name "Work PC" --dangerous
|
|
667
|
-
|
|
668
|
-
${chalk.cyan("Pre-built Image:")}
|
|
669
|
-
The default image includes: nmap, sqlmap, ffuf, gobuster, nuclei, hydra,
|
|
670
|
-
nikto, wpscan, subfinder, httpx, and 20+ more pentesting tools.
|
|
495
|
+
npx @hackerai/local --token hsb_abc123 --name "Work PC"
|
|
671
496
|
|
|
672
497
|
${chalk.red("⚠️ Security Warning:")}
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
In DANGEROUS mode, commands run directly on your OS without any isolation.
|
|
498
|
+
Commands run directly on your OS without any isolation.
|
|
499
|
+
Only connect machines you trust and control.
|
|
676
500
|
|
|
677
501
|
${chalk.cyan("Auto-termination:")}
|
|
678
502
|
The client automatically terminates after 1 hour of inactivity (no commands
|
|
@@ -684,9 +508,6 @@ const config = {
|
|
|
684
508
|
convexUrl: getArg("--convex-url") || PRODUCTION_CONVEX_URL,
|
|
685
509
|
token: getArg("--token") || "",
|
|
686
510
|
name: getArg("--name") || os_1.default.hostname(),
|
|
687
|
-
dangerous: hasFlag("--dangerous"),
|
|
688
|
-
build: hasFlag("--build"),
|
|
689
|
-
persist: hasFlag("--persist"),
|
|
690
511
|
};
|
|
691
512
|
if (!config.token) {
|
|
692
513
|
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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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -4,41 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export declare const MAX_OUTPUT_SIZE = 12288;
|
|
6
6
|
export declare const TRUNCATION_MARKER = "\n\n[... OUTPUT TRUNCATED - middle content removed to fit context limits ...]\n\n";
|
|
7
|
-
/**
|
|
8
|
-
* Required Docker capabilities for penetration testing tools.
|
|
9
|
-
* - NET_RAW: ping, nmap, masscan, hping3, arp-scan, tcpdump, raw sockets
|
|
10
|
-
* - NET_ADMIN: network interface manipulation, arp-scan, netdiscover
|
|
11
|
-
* - SYS_PTRACE: gdb, strace, ltrace (debugging tools)
|
|
12
|
-
*/
|
|
13
|
-
export declare const DOCKER_CAPABILITIES: readonly ["NET_RAW", "NET_ADMIN", "SYS_PTRACE"];
|
|
14
7
|
/**
|
|
15
8
|
* Truncates output using 25% head + 75% tail strategy.
|
|
16
9
|
* This preserves both the command start (context) and the end (final results/errors).
|
|
17
10
|
*/
|
|
18
11
|
export declare function truncateOutput(content: string, maxSize?: number): string;
|
|
19
|
-
/**
|
|
20
|
-
* Build Docker capability flags for the docker run command.
|
|
21
|
-
*/
|
|
22
|
-
export declare function buildDockerCapabilityFlags(): string;
|
|
23
|
-
/**
|
|
24
|
-
* Build the full docker run command for creating a container.
|
|
25
|
-
*/
|
|
26
|
-
export declare function buildDockerRunCommand(options: {
|
|
27
|
-
image: string;
|
|
28
|
-
containerName?: string;
|
|
29
|
-
capabilities?: boolean;
|
|
30
|
-
}): string;
|
|
31
|
-
/**
|
|
32
|
-
* Determine the sandbox mode based on configuration.
|
|
33
|
-
*/
|
|
34
|
-
export declare function getSandboxMode(config: {
|
|
35
|
-
dangerous?: boolean;
|
|
36
|
-
}): "docker" | "dangerous";
|
|
37
|
-
/**
|
|
38
|
-
* Parse shell detection output to find available shell.
|
|
39
|
-
* Returns the first valid shell path found.
|
|
40
|
-
*/
|
|
41
|
-
export declare function parseShellDetectionOutput(output: string): string;
|
|
42
12
|
export interface ShellConfig {
|
|
43
13
|
shell: string;
|
|
44
14
|
shellFlag: string;
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,eAAe,QAAQ,CAAC;AAGrC,eAAO,MAAM,iBAAiB,sFACuD,CAAC;AAEtF
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,eAAe,QAAQ,CAAC;AAGrC,eAAO,MAAM,iBAAiB,sFACuD,CAAC;AAEtF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAwB,GAChC,MAAM,CAcR;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAM7D"}
|
package/dist/utils.js
CHANGED
|
@@ -4,28 +4,13 @@
|
|
|
4
4
|
* Extracted for testability.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
7
|
+
exports.TRUNCATION_MARKER = exports.MAX_OUTPUT_SIZE = void 0;
|
|
8
8
|
exports.truncateOutput = truncateOutput;
|
|
9
|
-
exports.buildDockerCapabilityFlags = buildDockerCapabilityFlags;
|
|
10
|
-
exports.buildDockerRunCommand = buildDockerRunCommand;
|
|
11
|
-
exports.getSandboxMode = getSandboxMode;
|
|
12
|
-
exports.parseShellDetectionOutput = parseShellDetectionOutput;
|
|
13
9
|
exports.getDefaultShell = getDefaultShell;
|
|
14
10
|
// Align with LLM context limits (~4096 tokens ≈ 12288 chars)
|
|
15
11
|
exports.MAX_OUTPUT_SIZE = 12288;
|
|
16
12
|
// Truncation marker for 25% head + 75% tail strategy
|
|
17
13
|
exports.TRUNCATION_MARKER = "\n\n[... OUTPUT TRUNCATED - middle content removed to fit context limits ...]\n\n";
|
|
18
|
-
/**
|
|
19
|
-
* Required Docker capabilities for penetration testing tools.
|
|
20
|
-
* - NET_RAW: ping, nmap, masscan, hping3, arp-scan, tcpdump, raw sockets
|
|
21
|
-
* - NET_ADMIN: network interface manipulation, arp-scan, netdiscover
|
|
22
|
-
* - SYS_PTRACE: gdb, strace, ltrace (debugging tools)
|
|
23
|
-
*/
|
|
24
|
-
exports.DOCKER_CAPABILITIES = [
|
|
25
|
-
"NET_RAW",
|
|
26
|
-
"NET_ADMIN",
|
|
27
|
-
"SYS_PTRACE",
|
|
28
|
-
];
|
|
29
14
|
/**
|
|
30
15
|
* Truncates output using 25% head + 75% tail strategy.
|
|
31
16
|
* This preserves both the command start (context) and the end (final results/errors).
|
|
@@ -42,42 +27,6 @@ function truncateOutput(content, maxSize = exports.MAX_OUTPUT_SIZE) {
|
|
|
42
27
|
const tail = content.slice(-tailBudget);
|
|
43
28
|
return head + exports.TRUNCATION_MARKER + tail;
|
|
44
29
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Build Docker capability flags for the docker run command.
|
|
47
|
-
*/
|
|
48
|
-
function buildDockerCapabilityFlags() {
|
|
49
|
-
return exports.DOCKER_CAPABILITIES.map((cap) => `--cap-add=${cap}`).join(" ");
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Build the full docker run command for creating a container.
|
|
53
|
-
*/
|
|
54
|
-
function buildDockerRunCommand(options) {
|
|
55
|
-
const { image, containerName, capabilities = true } = options;
|
|
56
|
-
const nameFlag = containerName ? `--name ${containerName} ` : "";
|
|
57
|
-
const capFlags = capabilities ? `${buildDockerCapabilityFlags()} ` : "";
|
|
58
|
-
return `docker run -d ${nameFlag}${capFlags}--network host ${image} tail -f /dev/null`;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Determine the sandbox mode based on configuration.
|
|
62
|
-
*/
|
|
63
|
-
function getSandboxMode(config) {
|
|
64
|
-
if (config.dangerous) {
|
|
65
|
-
return "dangerous";
|
|
66
|
-
}
|
|
67
|
-
return "docker";
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Parse shell detection output to find available shell.
|
|
71
|
-
* Returns the first valid shell path found.
|
|
72
|
-
*/
|
|
73
|
-
function parseShellDetectionOutput(output) {
|
|
74
|
-
if (!output || !output.trim()) {
|
|
75
|
-
return "/bin/sh";
|
|
76
|
-
}
|
|
77
|
-
// Take first line (first result from 'command -v bash || command -v sh')
|
|
78
|
-
const shell = output.trim().split("\n")[0];
|
|
79
|
-
return shell || "/bin/sh";
|
|
80
|
-
}
|
|
81
30
|
/**
|
|
82
31
|
* Get the default shell for a given platform.
|
|
83
32
|
* On Windows, uses cmd.exe (not PowerShell, which aliases curl to Invoke-WebRequest
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAaH,wCAiBC;AAYD,0CAMC;AA9CD,6DAA6D;AAChD,QAAA,eAAe,GAAG,KAAK,CAAC;AAErC,qDAAqD;AACxC,QAAA,iBAAiB,GAC5B,mFAAmF,CAAC;AAEtF;;;GAGG;AACH,SAAgB,cAAc,CAC5B,OAAe,EACf,UAAkB,uBAAe;IAEjC,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE9C,MAAM,YAAY,GAAG,yBAAiB,CAAC,MAAM,CAAC;IAC9C,MAAM,gBAAgB,GAAG,OAAO,GAAG,YAAY,CAAC;IAEhD,+BAA+B;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,gBAAgB,GAAG,UAAU,CAAC;IAEjD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;IAExC,OAAO,IAAI,GAAG,yBAAiB,GAAG,IAAI,CAAC;AACzC,CAAC;AAOD;;;;GAIG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC9C,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;IACD,yCAAyC;IACzC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC"}
|
package/package.json
CHANGED
package/dist/pty-manager.d.ts
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PTY Session Manager for the local sandbox client.
|
|
3
|
-
*
|
|
4
|
-
* Manages node-pty processes, batches output for Convex relay,
|
|
5
|
-
* and handles stdin/resize/kill from the backend.
|
|
6
|
-
*
|
|
7
|
-
* Cross-platform: macOS (forkpty), Linux (forkpty), Windows (conpty).
|
|
8
|
-
*/
|
|
9
|
-
import type { ConvexClient } from "convex/browser";
|
|
10
|
-
interface SignedSession {
|
|
11
|
-
userId: string;
|
|
12
|
-
expiresAt: number;
|
|
13
|
-
signature: string;
|
|
14
|
-
}
|
|
15
|
-
export declare class PtyManager {
|
|
16
|
-
private convex;
|
|
17
|
-
private token;
|
|
18
|
-
private connectionId;
|
|
19
|
-
private session;
|
|
20
|
-
private mode;
|
|
21
|
-
private containerId?;
|
|
22
|
-
private containerShell?;
|
|
23
|
-
private sessions;
|
|
24
|
-
private sessionSubscription;
|
|
25
|
-
private ptyAvailable;
|
|
26
|
-
constructor(
|
|
27
|
-
convex: ConvexClient,
|
|
28
|
-
token: string,
|
|
29
|
-
connectionId: string,
|
|
30
|
-
session: SignedSession,
|
|
31
|
-
mode: "docker" | "dangerous",
|
|
32
|
-
containerId?: string | undefined,
|
|
33
|
-
containerShell?: string | undefined,
|
|
34
|
-
);
|
|
35
|
-
/**
|
|
36
|
-
* Fix node-pty spawn-helper permissions.
|
|
37
|
-
* npm/pnpm can strip the execute bit from prebuilt binaries during install.
|
|
38
|
-
* Without +x, posix_spawnp fails on macOS/Linux.
|
|
39
|
-
*/
|
|
40
|
-
private fixSpawnHelperPermissions;
|
|
41
|
-
/**
|
|
42
|
-
* Update the signed session (called after heartbeat refresh).
|
|
43
|
-
*/
|
|
44
|
-
updateSession(session: SignedSession): void;
|
|
45
|
-
/**
|
|
46
|
-
* Start listening for new PTY session requests from the backend.
|
|
47
|
-
*/
|
|
48
|
-
startSessionSubscription(): void;
|
|
49
|
-
/**
|
|
50
|
-
* Stop the session subscription.
|
|
51
|
-
*/
|
|
52
|
-
stopSessionSubscription(): void;
|
|
53
|
-
/**
|
|
54
|
-
* Handle a request to create a new PTY session.
|
|
55
|
-
*/
|
|
56
|
-
private handleCreateSession;
|
|
57
|
-
/**
|
|
58
|
-
* Buffer PTY output and flush periodically to reduce Convex writes.
|
|
59
|
-
*/
|
|
60
|
-
private bufferOutput;
|
|
61
|
-
/**
|
|
62
|
-
* Flush buffered output to Convex.
|
|
63
|
-
*/
|
|
64
|
-
private flushOutput;
|
|
65
|
-
/**
|
|
66
|
-
* Subscribe to stdin input from the backend for a session.
|
|
67
|
-
*/
|
|
68
|
-
private startInputSubscription;
|
|
69
|
-
/**
|
|
70
|
-
* Handle a kill request for a session (called when backend detects killed status).
|
|
71
|
-
*/
|
|
72
|
-
killSession(sessionId: string): boolean;
|
|
73
|
-
/**
|
|
74
|
-
* Resize a PTY session.
|
|
75
|
-
*/
|
|
76
|
-
resizeSession(sessionId: string, cols: number, rows: number): boolean;
|
|
77
|
-
/**
|
|
78
|
-
* Clean up a session's resources.
|
|
79
|
-
*/
|
|
80
|
-
private cleanupSession;
|
|
81
|
-
/**
|
|
82
|
-
* Clean up all sessions and stop subscriptions.
|
|
83
|
-
*/
|
|
84
|
-
cleanup(): Promise<void>;
|
|
85
|
-
/**
|
|
86
|
-
* Check if PTY support is available.
|
|
87
|
-
*/
|
|
88
|
-
get isAvailable(): boolean;
|
|
89
|
-
/**
|
|
90
|
-
* Get the number of active sessions.
|
|
91
|
-
*/
|
|
92
|
-
get activeSessionCount(): number;
|
|
93
|
-
}
|
|
94
|
-
export {};
|
|
95
|
-
//# sourceMappingURL=pty-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pty-manager.d.ts","sourceRoot":"","sources":["../src/pty-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAmDnD,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAUD,qBAAa,UAAU;IAMnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,cAAc,CAAC;IAXzB,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,mBAAmB,CAA6B;IACxD,OAAO,CAAC,YAAY,CAAU;gBAGpB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,QAAQ,GAAG,WAAW,EAC5B,WAAW,CAAC,EAAE,MAAM,YAAA,EACpB,cAAc,CAAC,EAAE,MAAM,YAAA;IAejC;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAkCjC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAO3C;;OAEG;IACH,wBAAwB,IAAI,IAAI;IA8BhC;;OAEG;IACH,uBAAuB,IAAI,IAAI;IAO/B;;OAEG;YACW,mBAAmB;IAsIjC;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;YACW,WAAW;IAsCzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoD9B;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAcvC;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAYrE;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B9B;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACH,IAAI,kBAAkB,IAAI,MAAM,CAE/B;CACF"}
|
package/dist/pty-manager.js
DELETED
|
@@ -1,452 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* PTY Session Manager for the local sandbox client.
|
|
4
|
-
*
|
|
5
|
-
* Manages node-pty processes, batches output for Convex relay,
|
|
6
|
-
* and handles stdin/resize/kill from the backend.
|
|
7
|
-
*
|
|
8
|
-
* Cross-platform: macOS (forkpty), Linux (forkpty), Windows (conpty).
|
|
9
|
-
*/
|
|
10
|
-
var __importDefault =
|
|
11
|
-
(this && this.__importDefault) ||
|
|
12
|
-
function (mod) {
|
|
13
|
-
return mod && mod.__esModule ? mod : { default: mod };
|
|
14
|
-
};
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.PtyManager = void 0;
|
|
17
|
-
const os_1 = __importDefault(require("os"));
|
|
18
|
-
const fs_1 = __importDefault(require("fs"));
|
|
19
|
-
const path_1 = __importDefault(require("path"));
|
|
20
|
-
const utils_1 = require("./utils");
|
|
21
|
-
// Convex function references
|
|
22
|
-
const api = {
|
|
23
|
-
localSandbox: {
|
|
24
|
-
activatePtySession: "localSandbox:activatePtySession",
|
|
25
|
-
submitPtyOutput: "localSandbox:submitPtyOutput",
|
|
26
|
-
updatePtySessionStatus: "localSandbox:updatePtySessionStatus",
|
|
27
|
-
markPtyInputConsumed: "localSandbox:markPtyInputConsumed",
|
|
28
|
-
subscribeToPtyInput: "localSandbox:subscribeToPtyInput",
|
|
29
|
-
getPendingPtySessions: "localSandbox:getPendingPtySessions",
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
// ANSI color codes
|
|
33
|
-
const chalk = {
|
|
34
|
-
blue: (s) => `\x1b[34m${s}\x1b[0m`,
|
|
35
|
-
green: (s) => `\x1b[32m${s}\x1b[0m`,
|
|
36
|
-
red: (s) => `\x1b[31m${s}\x1b[0m`,
|
|
37
|
-
yellow: (s) => `\x1b[33m${s}\x1b[0m`,
|
|
38
|
-
cyan: (s) => `\x1b[36m${s}\x1b[0m`,
|
|
39
|
-
gray: (s) => `\x1b[90m${s}\x1b[0m`,
|
|
40
|
-
};
|
|
41
|
-
// Output batching: buffer for ~75ms before sending to reduce Convex write frequency
|
|
42
|
-
const OUTPUT_BATCH_INTERVAL_MS = 75;
|
|
43
|
-
// Max size of a single output chunk (base64 encoded) to stay under Convex limits
|
|
44
|
-
const MAX_CHUNK_SIZE = 64 * 1024; // 64KB
|
|
45
|
-
class PtyManager {
|
|
46
|
-
convex;
|
|
47
|
-
token;
|
|
48
|
-
connectionId;
|
|
49
|
-
session;
|
|
50
|
-
mode;
|
|
51
|
-
containerId;
|
|
52
|
-
containerShell;
|
|
53
|
-
sessions = new Map();
|
|
54
|
-
sessionSubscription = null;
|
|
55
|
-
ptyAvailable;
|
|
56
|
-
constructor(
|
|
57
|
-
convex,
|
|
58
|
-
token,
|
|
59
|
-
connectionId,
|
|
60
|
-
session,
|
|
61
|
-
mode,
|
|
62
|
-
containerId,
|
|
63
|
-
containerShell,
|
|
64
|
-
) {
|
|
65
|
-
this.convex = convex;
|
|
66
|
-
this.token = token;
|
|
67
|
-
this.connectionId = connectionId;
|
|
68
|
-
this.session = session;
|
|
69
|
-
this.mode = mode;
|
|
70
|
-
this.containerId = containerId;
|
|
71
|
-
this.containerShell = containerShell;
|
|
72
|
-
// Ensure node-pty's spawn-helper binary is executable (npm may strip the +x bit)
|
|
73
|
-
this.fixSpawnHelperPermissions();
|
|
74
|
-
this.ptyAvailable = (0, utils_1.isNodePtyAvailable)();
|
|
75
|
-
if (!this.ptyAvailable) {
|
|
76
|
-
console.log(
|
|
77
|
-
chalk.yellow(
|
|
78
|
-
"⚠️ node-pty not available - PTY sessions will not be supported",
|
|
79
|
-
),
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Fix node-pty spawn-helper permissions.
|
|
85
|
-
* npm/pnpm can strip the execute bit from prebuilt binaries during install.
|
|
86
|
-
* Without +x, posix_spawnp fails on macOS/Linux.
|
|
87
|
-
*/
|
|
88
|
-
fixSpawnHelperPermissions() {
|
|
89
|
-
try {
|
|
90
|
-
// Resolve node-pty's prebuilds directory
|
|
91
|
-
const nodePtyDir = path_1.default.dirname(
|
|
92
|
-
require.resolve("node-pty/package.json"),
|
|
93
|
-
);
|
|
94
|
-
const prebuildsDir = path_1.default.join(nodePtyDir, "prebuilds");
|
|
95
|
-
if (!fs_1.default.existsSync(prebuildsDir)) return;
|
|
96
|
-
for (const platformDir of fs_1.default.readdirSync(prebuildsDir)) {
|
|
97
|
-
const helperPath = path_1.default.join(
|
|
98
|
-
prebuildsDir,
|
|
99
|
-
platformDir,
|
|
100
|
-
"spawn-helper",
|
|
101
|
-
);
|
|
102
|
-
if (!fs_1.default.existsSync(helperPath)) continue;
|
|
103
|
-
try {
|
|
104
|
-
const stat = fs_1.default.statSync(helperPath);
|
|
105
|
-
// Check if execute bit is missing for owner
|
|
106
|
-
if ((stat.mode & 0o100) === 0) {
|
|
107
|
-
fs_1.default.chmodSync(helperPath, 0o755);
|
|
108
|
-
console.debug(
|
|
109
|
-
`Fixed spawn-helper permissions: ${platformDir}/spawn-helper`,
|
|
110
|
-
);
|
|
111
|
-
}
|
|
112
|
-
} catch {
|
|
113
|
-
// Non-critical — may not have permission to chmod
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
} catch {
|
|
117
|
-
// Non-critical — node-pty might not be installed
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Update the signed session (called after heartbeat refresh).
|
|
122
|
-
*/
|
|
123
|
-
updateSession(session) {
|
|
124
|
-
this.session = session;
|
|
125
|
-
// Restart subscription with new session
|
|
126
|
-
this.stopSessionSubscription();
|
|
127
|
-
this.startSessionSubscription();
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Start listening for new PTY session requests from the backend.
|
|
131
|
-
*/
|
|
132
|
-
startSessionSubscription() {
|
|
133
|
-
if (!this.ptyAvailable) return;
|
|
134
|
-
if (this.sessionSubscription) return;
|
|
135
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
136
|
-
this.sessionSubscription = this.convex.onUpdate(
|
|
137
|
-
api.localSandbox.getPendingPtySessions,
|
|
138
|
-
{
|
|
139
|
-
connectionId: this.connectionId,
|
|
140
|
-
session: {
|
|
141
|
-
userId: this.session.userId,
|
|
142
|
-
expiresAt: this.session.expiresAt,
|
|
143
|
-
signature: this.session.signature,
|
|
144
|
-
},
|
|
145
|
-
},
|
|
146
|
-
async (data) => {
|
|
147
|
-
if (data?.authError) {
|
|
148
|
-
console.debug(
|
|
149
|
-
"PTY session subscription: auth error, will refresh on next heartbeat",
|
|
150
|
-
);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
if (!data?.sessions) return;
|
|
154
|
-
for (const req of data.sessions) {
|
|
155
|
-
await this.handleCreateSession(req);
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
);
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Stop the session subscription.
|
|
162
|
-
*/
|
|
163
|
-
stopSessionSubscription() {
|
|
164
|
-
if (this.sessionSubscription) {
|
|
165
|
-
this.sessionSubscription();
|
|
166
|
-
this.sessionSubscription = null;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Handle a request to create a new PTY session.
|
|
171
|
-
*/
|
|
172
|
-
async handleCreateSession(req) {
|
|
173
|
-
if (this.sessions.has(req.session_id)) return; // Already created
|
|
174
|
-
console.log(chalk.cyan(`▶ PTY session: ${req.session_id.slice(0, 8)}...`));
|
|
175
|
-
try {
|
|
176
|
-
// Dynamic import of node-pty to handle cases where it's not available
|
|
177
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
178
|
-
const nodePty = require("node-pty");
|
|
179
|
-
// Validate cwd exists on the host for dangerous mode.
|
|
180
|
-
// E2B PTY sessions pass cwd="/home/user" which doesn't exist on macOS/Windows.
|
|
181
|
-
// For Docker mode, cwd is passed to `docker exec -w` so it's inside the container.
|
|
182
|
-
let effectiveCwd = req.cwd;
|
|
183
|
-
if (this.mode === "dangerous" && effectiveCwd) {
|
|
184
|
-
try {
|
|
185
|
-
if (!fs_1.default.existsSync(effectiveCwd)) {
|
|
186
|
-
console.debug(
|
|
187
|
-
`PTY cwd "${effectiveCwd}" not found, falling back to home dir`,
|
|
188
|
-
);
|
|
189
|
-
effectiveCwd = os_1.default.homedir();
|
|
190
|
-
}
|
|
191
|
-
} catch {
|
|
192
|
-
effectiveCwd = os_1.default.homedir();
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
const spawnConfig = (0, utils_1.getPtySpawnConfig)({
|
|
196
|
-
platform: os_1.default.platform(),
|
|
197
|
-
mode: this.mode,
|
|
198
|
-
containerId: this.containerId,
|
|
199
|
-
containerShell: this.containerShell,
|
|
200
|
-
cols: req.cols,
|
|
201
|
-
rows: req.rows,
|
|
202
|
-
cwd: effectiveCwd,
|
|
203
|
-
env: req.env,
|
|
204
|
-
});
|
|
205
|
-
const ptyProcess = nodePty.spawn(spawnConfig.file, spawnConfig.args, {
|
|
206
|
-
name: "xterm-256color",
|
|
207
|
-
...spawnConfig.options,
|
|
208
|
-
});
|
|
209
|
-
const activeSession = {
|
|
210
|
-
sessionId: req.session_id,
|
|
211
|
-
process: ptyProcess,
|
|
212
|
-
outputBuffer: "",
|
|
213
|
-
outputSequence: 0,
|
|
214
|
-
batchTimer: null,
|
|
215
|
-
inputSubscription: null,
|
|
216
|
-
};
|
|
217
|
-
this.sessions.set(req.session_id, activeSession);
|
|
218
|
-
// Report PID and activate session
|
|
219
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
220
|
-
await this.convex.mutation(api.localSandbox.activatePtySession, {
|
|
221
|
-
token: this.token,
|
|
222
|
-
sessionId: req.session_id,
|
|
223
|
-
pid: ptyProcess.pid,
|
|
224
|
-
});
|
|
225
|
-
// Set up output handler with batching
|
|
226
|
-
ptyProcess.onData((data) => {
|
|
227
|
-
this.bufferOutput(activeSession, data);
|
|
228
|
-
});
|
|
229
|
-
// Set up exit handler
|
|
230
|
-
ptyProcess.onExit(async (e) => {
|
|
231
|
-
// Flush any remaining output
|
|
232
|
-
await this.flushOutput(activeSession);
|
|
233
|
-
// Report exit
|
|
234
|
-
try {
|
|
235
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
236
|
-
await this.convex.mutation(api.localSandbox.updatePtySessionStatus, {
|
|
237
|
-
token: this.token,
|
|
238
|
-
sessionId: req.session_id,
|
|
239
|
-
status: "exited",
|
|
240
|
-
exitCode: e.exitCode,
|
|
241
|
-
});
|
|
242
|
-
} catch (err) {
|
|
243
|
-
console.debug(`Failed to report PTY exit: ${err}`);
|
|
244
|
-
}
|
|
245
|
-
this.cleanupSession(req.session_id);
|
|
246
|
-
console.log(
|
|
247
|
-
chalk.green(
|
|
248
|
-
`✓ PTY session ${req.session_id.slice(0, 8)}... exited (code: ${e.exitCode})`,
|
|
249
|
-
),
|
|
250
|
-
);
|
|
251
|
-
});
|
|
252
|
-
// Start listening for stdin input
|
|
253
|
-
this.startInputSubscription(activeSession);
|
|
254
|
-
console.log(
|
|
255
|
-
chalk.green(
|
|
256
|
-
`✓ PTY session ${req.session_id.slice(0, 8)}... active (PID: ${ptyProcess.pid})`,
|
|
257
|
-
),
|
|
258
|
-
);
|
|
259
|
-
} catch (err) {
|
|
260
|
-
console.error(chalk.red(`✗ Failed to create PTY session: ${err}`));
|
|
261
|
-
// Report failure
|
|
262
|
-
try {
|
|
263
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
264
|
-
await this.convex.mutation(api.localSandbox.updatePtySessionStatus, {
|
|
265
|
-
token: this.token,
|
|
266
|
-
sessionId: req.session_id,
|
|
267
|
-
status: "exited",
|
|
268
|
-
exitCode: -1,
|
|
269
|
-
});
|
|
270
|
-
} catch {
|
|
271
|
-
/* ignore */
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* Buffer PTY output and flush periodically to reduce Convex writes.
|
|
277
|
-
*/
|
|
278
|
-
bufferOutput(session, data) {
|
|
279
|
-
session.outputBuffer += data;
|
|
280
|
-
// If buffer is getting large, flush immediately
|
|
281
|
-
if (session.outputBuffer.length >= MAX_CHUNK_SIZE) {
|
|
282
|
-
this.flushOutput(session);
|
|
283
|
-
return;
|
|
284
|
-
}
|
|
285
|
-
// Otherwise, batch with a short timer
|
|
286
|
-
if (!session.batchTimer) {
|
|
287
|
-
session.batchTimer = setTimeout(() => {
|
|
288
|
-
session.batchTimer = null;
|
|
289
|
-
this.flushOutput(session);
|
|
290
|
-
}, OUTPUT_BATCH_INTERVAL_MS);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Flush buffered output to Convex.
|
|
295
|
-
*/
|
|
296
|
-
async flushOutput(session) {
|
|
297
|
-
if (session.batchTimer) {
|
|
298
|
-
clearTimeout(session.batchTimer);
|
|
299
|
-
session.batchTimer = null;
|
|
300
|
-
}
|
|
301
|
-
if (!session.outputBuffer) return;
|
|
302
|
-
const data = session.outputBuffer;
|
|
303
|
-
session.outputBuffer = "";
|
|
304
|
-
// Split into chunks if necessary
|
|
305
|
-
const chunks = [];
|
|
306
|
-
for (let i = 0; i < data.length; i += MAX_CHUNK_SIZE) {
|
|
307
|
-
const chunk = data.slice(i, i + MAX_CHUNK_SIZE);
|
|
308
|
-
// Encode as base64 to safely transport binary PTY data through Convex
|
|
309
|
-
const encoded = Buffer.from(chunk, "utf-8").toString("base64");
|
|
310
|
-
chunks.push({
|
|
311
|
-
data: encoded,
|
|
312
|
-
sequence: ++session.outputSequence,
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
try {
|
|
316
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
317
|
-
await this.convex.mutation(api.localSandbox.submitPtyOutput, {
|
|
318
|
-
token: this.token,
|
|
319
|
-
sessionId: session.sessionId,
|
|
320
|
-
chunks,
|
|
321
|
-
});
|
|
322
|
-
} catch (err) {
|
|
323
|
-
console.debug(`Failed to submit PTY output: ${err}`);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* Subscribe to stdin input from the backend for a session.
|
|
328
|
-
*/
|
|
329
|
-
startInputSubscription(session) {
|
|
330
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
331
|
-
session.inputSubscription = this.convex.onUpdate(
|
|
332
|
-
api.localSandbox.subscribeToPtyInput,
|
|
333
|
-
{
|
|
334
|
-
sessionId: session.sessionId,
|
|
335
|
-
session: {
|
|
336
|
-
userId: this.session.userId,
|
|
337
|
-
expiresAt: this.session.expiresAt,
|
|
338
|
-
signature: this.session.signature,
|
|
339
|
-
},
|
|
340
|
-
connectionId: this.connectionId,
|
|
341
|
-
},
|
|
342
|
-
async (data) => {
|
|
343
|
-
if (data?.authError) return;
|
|
344
|
-
if (!data?.inputs?.length) return;
|
|
345
|
-
const inputIds = [];
|
|
346
|
-
for (const input of data.inputs) {
|
|
347
|
-
// Decode base64 data and write to PTY
|
|
348
|
-
const decoded = Buffer.from(input.data, "base64").toString("utf-8");
|
|
349
|
-
try {
|
|
350
|
-
session.process.write(decoded);
|
|
351
|
-
} catch {
|
|
352
|
-
// Process may have exited
|
|
353
|
-
}
|
|
354
|
-
inputIds.push(input._id);
|
|
355
|
-
}
|
|
356
|
-
// Mark inputs as consumed
|
|
357
|
-
if (inputIds.length > 0) {
|
|
358
|
-
try {
|
|
359
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
360
|
-
await this.convex.mutation(api.localSandbox.markPtyInputConsumed, {
|
|
361
|
-
token: this.token,
|
|
362
|
-
inputIds,
|
|
363
|
-
});
|
|
364
|
-
} catch {
|
|
365
|
-
/* ignore */
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
},
|
|
369
|
-
);
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* Handle a kill request for a session (called when backend detects killed status).
|
|
373
|
-
*/
|
|
374
|
-
killSession(sessionId) {
|
|
375
|
-
const session = this.sessions.get(sessionId);
|
|
376
|
-
if (!session) return false;
|
|
377
|
-
try {
|
|
378
|
-
session.process.kill();
|
|
379
|
-
} catch {
|
|
380
|
-
/* may already be dead */
|
|
381
|
-
}
|
|
382
|
-
this.cleanupSession(sessionId);
|
|
383
|
-
return true;
|
|
384
|
-
}
|
|
385
|
-
/**
|
|
386
|
-
* Resize a PTY session.
|
|
387
|
-
*/
|
|
388
|
-
resizeSession(sessionId, cols, rows) {
|
|
389
|
-
const session = this.sessions.get(sessionId);
|
|
390
|
-
if (!session) return false;
|
|
391
|
-
try {
|
|
392
|
-
session.process.resize(cols, rows);
|
|
393
|
-
return true;
|
|
394
|
-
} catch {
|
|
395
|
-
return false;
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
/**
|
|
399
|
-
* Clean up a session's resources.
|
|
400
|
-
*/
|
|
401
|
-
cleanupSession(sessionId) {
|
|
402
|
-
const session = this.sessions.get(sessionId);
|
|
403
|
-
if (!session) return;
|
|
404
|
-
if (session.batchTimer) {
|
|
405
|
-
clearTimeout(session.batchTimer);
|
|
406
|
-
}
|
|
407
|
-
if (session.inputSubscription) {
|
|
408
|
-
session.inputSubscription();
|
|
409
|
-
}
|
|
410
|
-
this.sessions.delete(sessionId);
|
|
411
|
-
}
|
|
412
|
-
/**
|
|
413
|
-
* Clean up all sessions and stop subscriptions.
|
|
414
|
-
*/
|
|
415
|
-
async cleanup() {
|
|
416
|
-
this.stopSessionSubscription();
|
|
417
|
-
for (const [sessionId, session] of this.sessions) {
|
|
418
|
-
try {
|
|
419
|
-
session.process.kill();
|
|
420
|
-
} catch {
|
|
421
|
-
/* ignore */
|
|
422
|
-
}
|
|
423
|
-
// Report exit
|
|
424
|
-
try {
|
|
425
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
426
|
-
await this.convex.mutation(api.localSandbox.updatePtySessionStatus, {
|
|
427
|
-
token: this.token,
|
|
428
|
-
sessionId,
|
|
429
|
-
status: "exited",
|
|
430
|
-
exitCode: -1,
|
|
431
|
-
});
|
|
432
|
-
} catch {
|
|
433
|
-
/* ignore */
|
|
434
|
-
}
|
|
435
|
-
this.cleanupSession(sessionId);
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
/**
|
|
439
|
-
* Check if PTY support is available.
|
|
440
|
-
*/
|
|
441
|
-
get isAvailable() {
|
|
442
|
-
return this.ptyAvailable;
|
|
443
|
-
}
|
|
444
|
-
/**
|
|
445
|
-
* Get the number of active sessions.
|
|
446
|
-
*/
|
|
447
|
-
get activeSessionCount() {
|
|
448
|
-
return this.sessions.size;
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
exports.PtyManager = PtyManager;
|
|
452
|
-
//# sourceMappingURL=pty-manager.js.map
|
package/dist/pty-manager.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pty-manager.js","sourceRoot":"","sources":["../src/pty-manager.ts"],"names":[],"mappings":"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"}
|