pentesting 0.24.0 → 0.24.1
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/main.js +115 -106
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -127,11 +127,16 @@ var AGENT_LIMITS = {
|
|
|
127
127
|
/** ID radix for generation */
|
|
128
128
|
ID_RADIX: 36,
|
|
129
129
|
/** Maximum token budget for LLM response (matches LLM_LIMITS.streamMaxTokens) */
|
|
130
|
-
MAX_TOKENS:
|
|
130
|
+
MAX_TOKENS: 128e3,
|
|
131
131
|
/** Maximum consecutive idle iterations before nudging agent (deadlock prevention) */
|
|
132
132
|
MAX_CONSECUTIVE_IDLE: 3,
|
|
133
|
-
/** Maximum tool output length before truncation (context hygiene)
|
|
134
|
-
|
|
133
|
+
/** Maximum tool output length before truncation (context hygiene)
|
|
134
|
+
* WHY 200K: pentesting tools (linpeas, enum4linux, nmap -sV --script=*)
|
|
135
|
+
* routinely produce 100K+ chars with critical findings scattered throughout.
|
|
136
|
+
* Truncation loses data the agent can never recover.
|
|
137
|
+
* Let the LLM see everything and summarize — it's what LLMs are good at.
|
|
138
|
+
*/
|
|
139
|
+
MAX_TOOL_OUTPUT_LENGTH: 2e5,
|
|
135
140
|
/** Max chars to include in blocked pattern tracking key (loop detection) */
|
|
136
141
|
BLOCKED_PATTERN_KEY_SLICE: 80,
|
|
137
142
|
/** Max chars of error text to include in web_search suggestion */
|
|
@@ -161,7 +166,7 @@ var INPUT_PROMPT_PATTERNS = [
|
|
|
161
166
|
/\(Y\/n\)/i
|
|
162
167
|
];
|
|
163
168
|
|
|
164
|
-
// src/shared/constants/
|
|
169
|
+
// src/shared/constants/system.ts
|
|
165
170
|
var EXIT_CODES = {
|
|
166
171
|
/** Successful execution */
|
|
167
172
|
SUCCESS: 0,
|
|
@@ -178,12 +183,110 @@ var EXIT_CODES = {
|
|
|
178
183
|
/** Process killed by SIGKILL */
|
|
179
184
|
SIGKILL: 137
|
|
180
185
|
};
|
|
186
|
+
var PROCESS_ROLES = {
|
|
187
|
+
LISTENER: "listener",
|
|
188
|
+
ACTIVE_SHELL: "active_shell",
|
|
189
|
+
SERVER: "server",
|
|
190
|
+
SNIFFER: "sniffer",
|
|
191
|
+
SPOOFER: "spoofer",
|
|
192
|
+
CALLBACK: "callback",
|
|
193
|
+
PROXY: "proxy",
|
|
194
|
+
BACKGROUND: "background"
|
|
195
|
+
};
|
|
196
|
+
var PROCESS_ICONS = {
|
|
197
|
+
[PROCESS_ROLES.LISTENER]: "[LISTENER]",
|
|
198
|
+
[PROCESS_ROLES.ACTIVE_SHELL]: "[SHELL]",
|
|
199
|
+
[PROCESS_ROLES.SERVER]: "[SERVER]",
|
|
200
|
+
[PROCESS_ROLES.SNIFFER]: "[SNIFFER]",
|
|
201
|
+
[PROCESS_ROLES.SPOOFER]: "[SPOOFER]",
|
|
202
|
+
[PROCESS_ROLES.CALLBACK]: "[CALLBACK]",
|
|
203
|
+
[PROCESS_ROLES.PROXY]: "[PROXY]",
|
|
204
|
+
[PROCESS_ROLES.BACKGROUND]: "[BG]"
|
|
205
|
+
};
|
|
206
|
+
var STATUS_MARKERS = {
|
|
207
|
+
RUNNING: "[RUNNING]",
|
|
208
|
+
STOPPED: "[STOPPED]",
|
|
209
|
+
WARNING: "[WARNING]",
|
|
210
|
+
INTERACTIVE: "[INTERACTIVE]",
|
|
211
|
+
EXITED: "[EXITED]"
|
|
212
|
+
};
|
|
213
|
+
var PROCESS_EVENTS = {
|
|
214
|
+
STARTED: "started",
|
|
215
|
+
CONNECTION_DETECTED: "connection_detected",
|
|
216
|
+
ROLE_CHANGED: "role_changed",
|
|
217
|
+
COMMAND_SENT: "command_sent",
|
|
218
|
+
STOPPED: "stopped",
|
|
219
|
+
DIED: "died",
|
|
220
|
+
ZOMBIE_CLEANED: "zombie_cleaned"
|
|
221
|
+
};
|
|
222
|
+
var SYSTEM_LIMITS = {
|
|
223
|
+
/** Maximum wait time for interactive shell responses (10 seconds) */
|
|
224
|
+
MAX_WAIT_MS_INTERACT: 1e4,
|
|
225
|
+
/** Default wait time for interactive shell responses (2 seconds) */
|
|
226
|
+
DEFAULT_WAIT_MS_INTERACT: 2e3,
|
|
227
|
+
/** Maximum characters for process description */
|
|
228
|
+
MAX_DESCRIPTION_LENGTH: 80,
|
|
229
|
+
/** Maximum characters for stored command string */
|
|
230
|
+
MAX_COMMAND_LENGTH: 200,
|
|
231
|
+
/** Maximum characters to show from stdout
|
|
232
|
+
* WHY 50K: background processes (linpeas, scans, shells) produce large
|
|
233
|
+
* output with findings scattered throughout. Let the LLM see it all. */
|
|
234
|
+
MAX_STDOUT_SLICE: 5e4,
|
|
235
|
+
/** Maximum characters to show from stderr */
|
|
236
|
+
MAX_STDERR_SLICE: 5e3,
|
|
237
|
+
/** Maximum characters for error detail messages */
|
|
238
|
+
MAX_ERROR_DETAIL_SLICE: 2e3,
|
|
239
|
+
/** Maximum characters for input prompt previews */
|
|
240
|
+
MAX_PROMPT_PREVIEW: 50,
|
|
241
|
+
/** Maximum characters for input snippets in logs */
|
|
242
|
+
MAX_INPUT_SLICE: 100,
|
|
243
|
+
/** Maximum events to keep in process event log */
|
|
244
|
+
MAX_EVENT_LOG: 30,
|
|
245
|
+
/** Wait time for child PID discovery via pgrep */
|
|
246
|
+
CHILD_PID_DISCOVERY_MS: 500,
|
|
247
|
+
/** Wait time between SIGTERM and SIGKILL during graceful shutdown */
|
|
248
|
+
SHUTDOWN_WAIT_MS: 500,
|
|
249
|
+
/** Wait time between process cleanup batches */
|
|
250
|
+
CLEANUP_BATCH_WAIT_MS: 300,
|
|
251
|
+
/** Timeout for pgrep and pkill operations */
|
|
252
|
+
PROCESS_OP_TIMEOUT_MS: 2e3,
|
|
253
|
+
/** Port range for web services (development servers) */
|
|
254
|
+
WEB_PORT_RANGE: { MIN: 8e3, MAX: 9e3 },
|
|
255
|
+
/** Port range for API services */
|
|
256
|
+
API_PORT_RANGE: { MIN: 3e3, MAX: 3500 }
|
|
257
|
+
};
|
|
258
|
+
var DETECTION_PATTERNS = {
|
|
259
|
+
LISTENER: /-(?:lvnp|nlvp|lp|p)\s+(\d+)/,
|
|
260
|
+
HTTP_SERVER: /(?:http\.server|SimpleHTTPServer)\s+(\d+)/,
|
|
261
|
+
GENERIC_PORT: /-(?:p|port|S)\s+(?:\S+:)?(\d+)/,
|
|
262
|
+
CONNECTION: [
|
|
263
|
+
/connection\s+from/i,
|
|
264
|
+
/connect\s+to/i,
|
|
265
|
+
/\$\s*$/m,
|
|
266
|
+
/#\s*$/m,
|
|
267
|
+
/bash-\d/i,
|
|
268
|
+
/sh-\d/i,
|
|
269
|
+
/www-data/i
|
|
270
|
+
]
|
|
271
|
+
};
|
|
272
|
+
var ORPHAN_PROCESS_NAMES = [
|
|
273
|
+
"arpspoof",
|
|
274
|
+
"ettercap",
|
|
275
|
+
"mitmdump",
|
|
276
|
+
"mitmproxy",
|
|
277
|
+
"dnsspoof",
|
|
278
|
+
"tcpdump",
|
|
279
|
+
"tshark",
|
|
280
|
+
"socat",
|
|
281
|
+
"nc",
|
|
282
|
+
"python"
|
|
283
|
+
];
|
|
181
284
|
|
|
182
285
|
// src/shared/constants/agent.ts
|
|
183
286
|
var ID_LENGTH = AGENT_LIMITS.ID_LENGTH;
|
|
184
287
|
var ID_RADIX = AGENT_LIMITS.ID_RADIX;
|
|
185
288
|
var APP_NAME = "Pentest AI";
|
|
186
|
-
var APP_VERSION = "0.24.
|
|
289
|
+
var APP_VERSION = "0.24.1";
|
|
187
290
|
var APP_DESCRIPTION = "Autonomous Penetration Testing AI Agent";
|
|
188
291
|
var LLM_ROLES = {
|
|
189
292
|
SYSTEM: "system",
|
|
@@ -499,104 +602,6 @@ function ensureDirExists(dirPath) {
|
|
|
499
602
|
}
|
|
500
603
|
}
|
|
501
604
|
|
|
502
|
-
// src/shared/constants/system.ts
|
|
503
|
-
var PROCESS_ROLES = {
|
|
504
|
-
LISTENER: "listener",
|
|
505
|
-
ACTIVE_SHELL: "active_shell",
|
|
506
|
-
SERVER: "server",
|
|
507
|
-
SNIFFER: "sniffer",
|
|
508
|
-
SPOOFER: "spoofer",
|
|
509
|
-
CALLBACK: "callback",
|
|
510
|
-
PROXY: "proxy",
|
|
511
|
-
BACKGROUND: "background"
|
|
512
|
-
};
|
|
513
|
-
var PROCESS_ICONS = {
|
|
514
|
-
[PROCESS_ROLES.LISTENER]: "[LISTENER]",
|
|
515
|
-
[PROCESS_ROLES.ACTIVE_SHELL]: "[SHELL]",
|
|
516
|
-
[PROCESS_ROLES.SERVER]: "[SERVER]",
|
|
517
|
-
[PROCESS_ROLES.SNIFFER]: "[SNIFFER]",
|
|
518
|
-
[PROCESS_ROLES.SPOOFER]: "[SPOOFER]",
|
|
519
|
-
[PROCESS_ROLES.CALLBACK]: "[CALLBACK]",
|
|
520
|
-
[PROCESS_ROLES.PROXY]: "[PROXY]",
|
|
521
|
-
[PROCESS_ROLES.BACKGROUND]: "[BG]"
|
|
522
|
-
};
|
|
523
|
-
var STATUS_MARKERS = {
|
|
524
|
-
RUNNING: "[RUNNING]",
|
|
525
|
-
STOPPED: "[STOPPED]",
|
|
526
|
-
WARNING: "[WARNING]",
|
|
527
|
-
INTERACTIVE: "[INTERACTIVE]",
|
|
528
|
-
EXITED: "[EXITED]"
|
|
529
|
-
};
|
|
530
|
-
var PROCESS_EVENTS = {
|
|
531
|
-
STARTED: "started",
|
|
532
|
-
CONNECTION_DETECTED: "connection_detected",
|
|
533
|
-
ROLE_CHANGED: "role_changed",
|
|
534
|
-
COMMAND_SENT: "command_sent",
|
|
535
|
-
STOPPED: "stopped",
|
|
536
|
-
DIED: "died",
|
|
537
|
-
ZOMBIE_CLEANED: "zombie_cleaned"
|
|
538
|
-
};
|
|
539
|
-
var SYSTEM_LIMITS = {
|
|
540
|
-
/** Maximum wait time for interactive shell responses (10 seconds) */
|
|
541
|
-
MAX_WAIT_MS_INTERACT: 1e4,
|
|
542
|
-
/** Default wait time for interactive shell responses (2 seconds) */
|
|
543
|
-
DEFAULT_WAIT_MS_INTERACT: 2e3,
|
|
544
|
-
/** Maximum characters for process description */
|
|
545
|
-
MAX_DESCRIPTION_LENGTH: 80,
|
|
546
|
-
/** Maximum characters for stored command string */
|
|
547
|
-
MAX_COMMAND_LENGTH: 200,
|
|
548
|
-
/** Maximum characters to show from stdout */
|
|
549
|
-
MAX_STDOUT_SLICE: 3e3,
|
|
550
|
-
/** Maximum characters to show from stderr */
|
|
551
|
-
MAX_STDERR_SLICE: 500,
|
|
552
|
-
/** Maximum characters for error detail messages */
|
|
553
|
-
MAX_ERROR_DETAIL_SLICE: 200,
|
|
554
|
-
/** Maximum characters for input prompt previews */
|
|
555
|
-
MAX_PROMPT_PREVIEW: 50,
|
|
556
|
-
/** Maximum characters for input snippets in logs */
|
|
557
|
-
MAX_INPUT_SLICE: 100,
|
|
558
|
-
/** Maximum events to keep in process event log */
|
|
559
|
-
MAX_EVENT_LOG: 30,
|
|
560
|
-
/** Wait time for child PID discovery via pgrep */
|
|
561
|
-
CHILD_PID_DISCOVERY_MS: 500,
|
|
562
|
-
/** Wait time between SIGTERM and SIGKILL during graceful shutdown */
|
|
563
|
-
SHUTDOWN_WAIT_MS: 500,
|
|
564
|
-
/** Wait time between process cleanup batches */
|
|
565
|
-
CLEANUP_BATCH_WAIT_MS: 300,
|
|
566
|
-
/** Timeout for pgrep and pkill operations */
|
|
567
|
-
PROCESS_OP_TIMEOUT_MS: 2e3,
|
|
568
|
-
/** Port range for web services (development servers) */
|
|
569
|
-
WEB_PORT_RANGE: { MIN: 8e3, MAX: 9e3 },
|
|
570
|
-
/** Port range for API services */
|
|
571
|
-
API_PORT_RANGE: { MIN: 3e3, MAX: 3500 }
|
|
572
|
-
};
|
|
573
|
-
var DETECTION_PATTERNS = {
|
|
574
|
-
LISTENER: /-(?:lvnp|nlvp|lp|p)\s+(\d+)/,
|
|
575
|
-
HTTP_SERVER: /(?:http\.server|SimpleHTTPServer)\s+(\d+)/,
|
|
576
|
-
GENERIC_PORT: /-(?:p|port|S)\s+(?:\S+:)?(\d+)/,
|
|
577
|
-
CONNECTION: [
|
|
578
|
-
/connection\s+from/i,
|
|
579
|
-
/connect\s+to/i,
|
|
580
|
-
/\$\s*$/m,
|
|
581
|
-
/#\s*$/m,
|
|
582
|
-
/bash-\d/i,
|
|
583
|
-
/sh-\d/i,
|
|
584
|
-
/www-data/i
|
|
585
|
-
]
|
|
586
|
-
};
|
|
587
|
-
var ORPHAN_PROCESS_NAMES = [
|
|
588
|
-
"arpspoof",
|
|
589
|
-
"ettercap",
|
|
590
|
-
"mitmdump",
|
|
591
|
-
"mitmproxy",
|
|
592
|
-
"dnsspoof",
|
|
593
|
-
"tcpdump",
|
|
594
|
-
"tshark",
|
|
595
|
-
"socat",
|
|
596
|
-
"nc",
|
|
597
|
-
"python"
|
|
598
|
-
];
|
|
599
|
-
|
|
600
605
|
// src/shared/utils/command-security-lists.ts
|
|
601
606
|
var ALLOWED_BINARIES = /* @__PURE__ */ new Set([
|
|
602
607
|
// Network scanning
|
|
@@ -5496,7 +5501,7 @@ var ZombieHunter = class {
|
|
|
5496
5501
|
|
|
5497
5502
|
// src/shared/constants/orchestrator.ts
|
|
5498
5503
|
var GRACEFUL_SHUTDOWN_WAIT_MS = 200;
|
|
5499
|
-
var PROCESS_OUTPUT_TRUNCATION_LIMIT =
|
|
5504
|
+
var PROCESS_OUTPUT_TRUNCATION_LIMIT = 1e4;
|
|
5500
5505
|
var MS_PER_MINUTE = 6e4;
|
|
5501
5506
|
var LONG_RUNNING_THRESHOLD_MS = 5 * MS_PER_MINUTE;
|
|
5502
5507
|
var VERY_LONG_RUNNING_THRESHOLD_MS = 15 * MS_PER_MINUTE;
|
|
@@ -6167,8 +6172,12 @@ var RETRY_CONFIG = {
|
|
|
6167
6172
|
// Initial delay for rate limit retry (exponential backoff)
|
|
6168
6173
|
};
|
|
6169
6174
|
var LLM_LIMITS = {
|
|
6170
|
-
|
|
6171
|
-
|
|
6175
|
+
/** WHY 64K: non-streaming calls (orchestrator, summaries) benefit from
|
|
6176
|
+
* generous output budgets. Don't force premature truncation. */
|
|
6177
|
+
nonStreamMaxTokens: 65536,
|
|
6178
|
+
/** WHY 128K: streaming calls are the main agent loop. Max out so the LLM
|
|
6179
|
+
* can produce full analysis, tool calls, and reasoning without cutoff. */
|
|
6180
|
+
streamMaxTokens: 128e3,
|
|
6172
6181
|
/** WHY: ~3.5 chars/token is a reasonable average for mixed English/CJK content */
|
|
6173
6182
|
charsPerTokenEstimate: 3.5
|
|
6174
6183
|
};
|