pentesting 0.44.0 → 0.44.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 +111 -87
- package/dist/prompts/base.md +34 -2
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -311,7 +311,7 @@ var ORPHAN_PROCESS_NAMES = [
|
|
|
311
311
|
|
|
312
312
|
// src/shared/constants/agent.ts
|
|
313
313
|
var APP_NAME = "Pentest AI";
|
|
314
|
-
var APP_VERSION = "0.44.
|
|
314
|
+
var APP_VERSION = "0.44.1";
|
|
315
315
|
var APP_DESCRIPTION = "Autonomous Penetration Testing AI Agent";
|
|
316
316
|
var LLM_ROLES = {
|
|
317
317
|
SYSTEM: "system",
|
|
@@ -11460,19 +11460,28 @@ var formatInlineStatus = () => {
|
|
|
11460
11460
|
import { useState, useRef, useCallback } from "react";
|
|
11461
11461
|
|
|
11462
11462
|
// src/shared/constants/theme.ts
|
|
11463
|
+
var HEX = {
|
|
11464
|
+
primary: "#FF968A",
|
|
11465
|
+
pink: "#FFAEAE",
|
|
11466
|
+
peach: "#FFC5BF"
|
|
11467
|
+
};
|
|
11463
11468
|
var COLORS = {
|
|
11464
|
-
|
|
11465
|
-
|
|
11466
|
-
|
|
11467
|
-
|
|
11468
|
-
|
|
11469
|
-
|
|
11470
|
-
|
|
11471
|
-
|
|
11472
|
-
|
|
11473
|
-
|
|
11474
|
-
|
|
11475
|
-
|
|
11469
|
+
// Primary accent - coral/salmon (ANSI 210 is light coral)
|
|
11470
|
+
primary: "ansi256(210)",
|
|
11471
|
+
// Pastel pink (ANSI 217 is light pink)
|
|
11472
|
+
pink: "ansi256(217)",
|
|
11473
|
+
// Pastel peach (ANSI 216 is light salmon)
|
|
11474
|
+
peach: "ansi256(216)",
|
|
11475
|
+
// Warning yellow (ANSI 222 is light goldenrod)
|
|
11476
|
+
yellow: "ansi256(222)",
|
|
11477
|
+
// Orange (ANSI 215)
|
|
11478
|
+
orange: "ansi256(215)",
|
|
11479
|
+
// Bright white for main text
|
|
11480
|
+
white: "white",
|
|
11481
|
+
// Light gray for secondary text (ANSI 252 is light gray)
|
|
11482
|
+
gray: "ansi256(252)",
|
|
11483
|
+
// Bright red for errors
|
|
11484
|
+
red: "red"
|
|
11476
11485
|
};
|
|
11477
11486
|
var THEME = {
|
|
11478
11487
|
...COLORS,
|
|
@@ -11482,37 +11491,43 @@ var THEME = {
|
|
|
11482
11491
|
},
|
|
11483
11492
|
text: {
|
|
11484
11493
|
primary: COLORS.white,
|
|
11485
|
-
|
|
11486
|
-
|
|
11487
|
-
|
|
11488
|
-
|
|
11494
|
+
// AI responses - main text
|
|
11495
|
+
secondary: COLORS.gray,
|
|
11496
|
+
// Secondary info
|
|
11497
|
+
muted: COLORS.gray,
|
|
11498
|
+
// Metadata, hints
|
|
11499
|
+
accent: COLORS.gray
|
|
11500
|
+
// Very subtle
|
|
11489
11501
|
},
|
|
11490
11502
|
status: {
|
|
11491
|
-
success: COLORS.
|
|
11492
|
-
//
|
|
11503
|
+
success: COLORS.gray,
|
|
11504
|
+
// Keep it subtle
|
|
11493
11505
|
warning: COLORS.yellow,
|
|
11506
|
+
// Pastel yellow
|
|
11494
11507
|
error: COLORS.red,
|
|
11495
|
-
|
|
11496
|
-
|
|
11508
|
+
// Bright red for errors
|
|
11509
|
+
running: COLORS.gray
|
|
11510
|
+
// Processing indicator
|
|
11497
11511
|
},
|
|
11498
11512
|
border: {
|
|
11499
|
-
|
|
11513
|
+
// ANSI 241 is a medium slate gray for borders
|
|
11514
|
+
default: "ansi256(241)",
|
|
11500
11515
|
focus: COLORS.primary,
|
|
11501
11516
|
error: COLORS.red
|
|
11502
11517
|
},
|
|
11503
11518
|
gradient: {
|
|
11504
|
-
|
|
11505
|
-
|
|
11519
|
+
// Hex colors required for gradient-string
|
|
11520
|
+
cyber: [HEX.primary, HEX.pink, HEX.peach]
|
|
11506
11521
|
},
|
|
11507
11522
|
spinner: COLORS.primary
|
|
11508
11523
|
};
|
|
11509
11524
|
var ASCII_BANNER = `
|
|
11510
|
-
\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557
|
|
11511
|
-
\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D
|
|
11525
|
+
\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557
|
|
11526
|
+
\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D
|
|
11512
11527
|
\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2557
|
|
11513
11528
|
\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551
|
|
11514
11529
|
\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D
|
|
11515
|
-
\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D
|
|
11530
|
+
\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D
|
|
11516
11531
|
`;
|
|
11517
11532
|
var ICONS = {
|
|
11518
11533
|
// Status
|
|
@@ -11590,14 +11605,22 @@ var TUI_DISPLAY_LIMITS = {
|
|
|
11590
11605
|
};
|
|
11591
11606
|
var MESSAGE_STYLES = {
|
|
11592
11607
|
colors: {
|
|
11593
|
-
user: THEME.
|
|
11594
|
-
|
|
11595
|
-
|
|
11596
|
-
|
|
11597
|
-
|
|
11598
|
-
|
|
11599
|
-
|
|
11608
|
+
user: THEME.white,
|
|
11609
|
+
// User input - bright white
|
|
11610
|
+
assistant: THEME.white,
|
|
11611
|
+
// AI response - white
|
|
11612
|
+
ai: THEME.white,
|
|
11613
|
+
// AI response - white
|
|
11614
|
+
system: THEME.gray,
|
|
11615
|
+
// System - light gray
|
|
11616
|
+
error: THEME.red,
|
|
11617
|
+
// Errors - red
|
|
11618
|
+
tool: THEME.gray,
|
|
11619
|
+
// Tool commands - light gray
|
|
11620
|
+
result: THEME.gray,
|
|
11621
|
+
// Tool results - light gray
|
|
11600
11622
|
status: THEME.primary
|
|
11623
|
+
// Status - pastel red accent
|
|
11601
11624
|
},
|
|
11602
11625
|
prefixes: {
|
|
11603
11626
|
user: "\u276F",
|
|
@@ -12064,29 +12087,29 @@ function getRoleColor(role) {
|
|
|
12064
12087
|
const roleColors = {
|
|
12065
12088
|
listener: THEME.primary,
|
|
12066
12089
|
active_shell: THEME.primary,
|
|
12067
|
-
server: THEME.
|
|
12090
|
+
server: THEME.gray,
|
|
12068
12091
|
sniffer: THEME.yellow,
|
|
12069
12092
|
spoofer: THEME.yellow,
|
|
12070
12093
|
proxy: THEME.primary,
|
|
12071
12094
|
callback: THEME.primary,
|
|
12072
|
-
background: THEME.
|
|
12095
|
+
background: THEME.gray
|
|
12073
12096
|
};
|
|
12074
|
-
return roleColors[role] || THEME.
|
|
12097
|
+
return roleColors[role] || THEME.gray;
|
|
12075
12098
|
}
|
|
12076
12099
|
function StatusIndicator({ running, exitCode }) {
|
|
12077
12100
|
if (running) {
|
|
12078
|
-
return /* @__PURE__ */ jsxs(Text, { color: THEME.
|
|
12101
|
+
return /* @__PURE__ */ jsxs(Text, { color: THEME.primary, children: [
|
|
12079
12102
|
ICONS.running,
|
|
12080
12103
|
" "
|
|
12081
12104
|
] });
|
|
12082
12105
|
}
|
|
12083
12106
|
if (exitCode === 0) {
|
|
12084
|
-
return /* @__PURE__ */ jsxs(Text, { color: THEME.
|
|
12107
|
+
return /* @__PURE__ */ jsxs(Text, { color: THEME.gray, children: [
|
|
12085
12108
|
ICONS.success,
|
|
12086
12109
|
" "
|
|
12087
12110
|
] });
|
|
12088
12111
|
}
|
|
12089
|
-
return /* @__PURE__ */ jsxs(Text, { color: THEME.
|
|
12112
|
+
return /* @__PURE__ */ jsxs(Text, { color: THEME.red, children: [
|
|
12090
12113
|
ICONS.error,
|
|
12091
12114
|
" "
|
|
12092
12115
|
] });
|
|
@@ -12098,7 +12121,7 @@ function ProcessRow({ proc, compact }) {
|
|
|
12098
12121
|
const truncatedPurpose = compact && purpose.length > TUI_DISPLAY_LIMITS.purposeMaxLength ? purpose.slice(0, TUI_DISPLAY_LIMITS.purposeTruncated) + "..." : purpose;
|
|
12099
12122
|
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
12100
12123
|
/* @__PURE__ */ jsx(StatusIndicator, { running: proc.running, exitCode: proc.exitCode }),
|
|
12101
|
-
/* @__PURE__ */ jsxs(Text, { color: THEME.
|
|
12124
|
+
/* @__PURE__ */ jsxs(Text, { color: THEME.gray, children: [
|
|
12102
12125
|
"[",
|
|
12103
12126
|
proc.id,
|
|
12104
12127
|
"]"
|
|
@@ -12108,14 +12131,14 @@ function ProcessRow({ proc, compact }) {
|
|
|
12108
12131
|
proc.role,
|
|
12109
12132
|
port
|
|
12110
12133
|
] }),
|
|
12111
|
-
/* @__PURE__ */ jsxs(Text, { color: THEME.
|
|
12134
|
+
/* @__PURE__ */ jsxs(Text, { color: THEME.gray, children: [
|
|
12112
12135
|
" (",
|
|
12113
12136
|
duration,
|
|
12114
12137
|
")"
|
|
12115
12138
|
] }),
|
|
12116
12139
|
truncatedPurpose && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
12117
|
-
/* @__PURE__ */ jsx(Text, { color: THEME.
|
|
12118
|
-
/* @__PURE__ */ jsx(Text, { color: THEME.
|
|
12140
|
+
/* @__PURE__ */ jsx(Text, { color: THEME.gray, children: " - " }),
|
|
12141
|
+
/* @__PURE__ */ jsx(Text, { color: THEME.gray, children: truncatedPurpose })
|
|
12119
12142
|
] })
|
|
12120
12143
|
] });
|
|
12121
12144
|
}
|
|
@@ -12126,18 +12149,18 @@ var InlineStatus = ({
|
|
|
12126
12149
|
compact = true
|
|
12127
12150
|
}) => {
|
|
12128
12151
|
if (processes.length === 0 && zombies.length === 0) {
|
|
12129
|
-
return /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginBottom: 1, children: /* @__PURE__ */ jsx(Text, { color: THEME.
|
|
12152
|
+
return /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginBottom: 1, children: /* @__PURE__ */ jsx(Text, { color: THEME.gray, children: "\u2022 No active background processes" }) });
|
|
12130
12153
|
}
|
|
12131
12154
|
const running = processes.filter((p) => p.running);
|
|
12132
12155
|
const stopped = processes.filter((p) => !p.running);
|
|
12133
12156
|
const healthColor = {
|
|
12134
|
-
healthy: THEME.
|
|
12135
|
-
warning: THEME.
|
|
12136
|
-
critical: THEME.
|
|
12157
|
+
healthy: THEME.gray,
|
|
12158
|
+
warning: THEME.yellow,
|
|
12159
|
+
critical: THEME.red
|
|
12137
12160
|
}[health];
|
|
12138
12161
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
12139
12162
|
running.length > 0 && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
12140
|
-
/* @__PURE__ */ jsxs(Text, { color: THEME.
|
|
12163
|
+
/* @__PURE__ */ jsxs(Text, { color: THEME.gray, bold: true, children: [
|
|
12141
12164
|
ICONS.running,
|
|
12142
12165
|
" Active (",
|
|
12143
12166
|
running.length,
|
|
@@ -12146,46 +12169,46 @@ var InlineStatus = ({
|
|
|
12146
12169
|
running.map((proc) => /* @__PURE__ */ jsx(ProcessRow, { proc, compact }, proc.id))
|
|
12147
12170
|
] }),
|
|
12148
12171
|
stopped.length > 0 && !compact && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: running.length > 0 ? 1 : 0, children: [
|
|
12149
|
-
/* @__PURE__ */ jsxs(Text, { color: THEME.
|
|
12172
|
+
/* @__PURE__ */ jsxs(Text, { color: THEME.gray, children: [
|
|
12150
12173
|
ICONS.completed,
|
|
12151
12174
|
" Completed (",
|
|
12152
12175
|
stopped.length,
|
|
12153
12176
|
")"
|
|
12154
12177
|
] }),
|
|
12155
12178
|
stopped.slice(0, TUI_DISPLAY_LIMITS.maxStoppedProcesses).map((proc) => /* @__PURE__ */ jsx(ProcessRow, { proc, compact }, proc.id)),
|
|
12156
|
-
stopped.length > TUI_DISPLAY_LIMITS.maxStoppedProcesses && /* @__PURE__ */ jsxs(Text, { color: THEME.
|
|
12179
|
+
stopped.length > TUI_DISPLAY_LIMITS.maxStoppedProcesses && /* @__PURE__ */ jsxs(Text, { color: THEME.gray, children: [
|
|
12157
12180
|
" ... and ",
|
|
12158
12181
|
stopped.length - TUI_DISPLAY_LIMITS.maxStoppedProcesses,
|
|
12159
12182
|
" more"
|
|
12160
12183
|
] })
|
|
12161
12184
|
] }),
|
|
12162
12185
|
zombies.length > 0 && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: 1, children: [
|
|
12163
|
-
/* @__PURE__ */ jsxs(Text, { color: THEME.
|
|
12186
|
+
/* @__PURE__ */ jsxs(Text, { color: THEME.yellow, children: [
|
|
12164
12187
|
ICONS.warning,
|
|
12165
12188
|
" Zombie Processes (",
|
|
12166
12189
|
zombies.length,
|
|
12167
12190
|
")"
|
|
12168
12191
|
] }),
|
|
12169
12192
|
zombies.map((z) => /* @__PURE__ */ jsxs(Box, { children: [
|
|
12170
|
-
/* @__PURE__ */ jsxs(Text, { color: THEME.
|
|
12193
|
+
/* @__PURE__ */ jsxs(Text, { color: THEME.red, children: [
|
|
12171
12194
|
" ",
|
|
12172
12195
|
ICONS.error,
|
|
12173
12196
|
" "
|
|
12174
12197
|
] }),
|
|
12175
|
-
/* @__PURE__ */ jsxs(Text, { color: THEME.
|
|
12198
|
+
/* @__PURE__ */ jsxs(Text, { color: THEME.gray, children: [
|
|
12176
12199
|
"[",
|
|
12177
12200
|
z.processId,
|
|
12178
12201
|
"] "
|
|
12179
12202
|
] }),
|
|
12180
|
-
/* @__PURE__ */ jsxs(Text, { color: THEME.
|
|
12203
|
+
/* @__PURE__ */ jsxs(Text, { color: THEME.yellow, children: [
|
|
12181
12204
|
z.orphanedChildren.length,
|
|
12182
12205
|
" orphaned children"
|
|
12183
12206
|
] })
|
|
12184
12207
|
] }, z.processId)),
|
|
12185
|
-
/* @__PURE__ */ jsx(Text, { color: THEME.
|
|
12208
|
+
/* @__PURE__ */ jsx(Text, { color: THEME.gray, children: " Run /cleanup to terminate" })
|
|
12186
12209
|
] }),
|
|
12187
12210
|
/* @__PURE__ */ jsxs(Box, { marginTop: running.length > 0 ? 1 : 0, children: [
|
|
12188
|
-
/* @__PURE__ */ jsx(Text, { color: THEME.
|
|
12211
|
+
/* @__PURE__ */ jsx(Text, { color: THEME.gray, children: "Health: " }),
|
|
12189
12212
|
/* @__PURE__ */ jsx(Text, { color: healthColor, bold: true, children: health.toUpperCase() })
|
|
12190
12213
|
] })
|
|
12191
12214
|
] });
|
|
@@ -12239,7 +12262,7 @@ import { useState as useState3, useEffect as useEffect3, memo as memo2 } from "r
|
|
|
12239
12262
|
import { Text as Text3 } from "ink";
|
|
12240
12263
|
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
12241
12264
|
var FRAMES = ["\u2669", "\u266A", "\u266B", "\u266C", "\u266B", "\u266A"];
|
|
12242
|
-
var INTERVAL =
|
|
12265
|
+
var INTERVAL = 120;
|
|
12243
12266
|
var MusicSpinner = memo2(({ color }) => {
|
|
12244
12267
|
const [index, setIndex] = useState3(0);
|
|
12245
12268
|
useEffect3(() => {
|
|
@@ -12266,12 +12289,12 @@ var StatusDisplay = memo3(({
|
|
|
12266
12289
|
const meta = formatMeta(elapsedTime * 1e3, currentTokens);
|
|
12267
12290
|
return /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", marginTop: 0, children: [
|
|
12268
12291
|
retryState.status === "retrying" && /* @__PURE__ */ jsxs3(Box3, { marginBottom: 1, children: [
|
|
12269
|
-
/* @__PURE__ */ jsx4(Text4, { color: THEME.
|
|
12270
|
-
/* @__PURE__ */ jsxs3(Text4, { color: THEME.
|
|
12292
|
+
/* @__PURE__ */ jsx4(Text4, { color: THEME.yellow, children: /* @__PURE__ */ jsx4(MusicSpinner, { color: THEME.yellow }) }),
|
|
12293
|
+
/* @__PURE__ */ jsxs3(Text4, { color: THEME.yellow, children: [
|
|
12271
12294
|
" \u27F3 Retry #",
|
|
12272
12295
|
retryState.attempt
|
|
12273
12296
|
] }),
|
|
12274
|
-
/* @__PURE__ */ jsxs3(Text4, { color: THEME.
|
|
12297
|
+
/* @__PURE__ */ jsxs3(Text4, { color: THEME.gray, children: [
|
|
12275
12298
|
" \xB7 ",
|
|
12276
12299
|
truncateError(retryState.error)
|
|
12277
12300
|
] }),
|
|
@@ -12282,12 +12305,12 @@ var StatusDisplay = memo3(({
|
|
|
12282
12305
|
] })
|
|
12283
12306
|
] }),
|
|
12284
12307
|
isProcessing && retryState.status !== "retrying" && /* @__PURE__ */ jsxs3(Box3, { marginBottom: 1, children: [
|
|
12285
|
-
/* @__PURE__ */ jsx4(Text4, { color: THEME.
|
|
12286
|
-
/* @__PURE__ */ jsxs3(Text4, { color: THEME.
|
|
12308
|
+
/* @__PURE__ */ jsx4(Text4, { color: THEME.primary, children: /* @__PURE__ */ jsx4(MusicSpinner, { color: THEME.primary }) }),
|
|
12309
|
+
/* @__PURE__ */ jsxs3(Text4, { color: THEME.gray, children: [
|
|
12287
12310
|
" ",
|
|
12288
12311
|
currentStatus || "Processing"
|
|
12289
12312
|
] }),
|
|
12290
|
-
/* @__PURE__ */ jsxs3(Text4, { color: THEME.
|
|
12313
|
+
/* @__PURE__ */ jsxs3(Text4, { color: THEME.gray, children: [
|
|
12291
12314
|
" ",
|
|
12292
12315
|
meta
|
|
12293
12316
|
] })
|
|
@@ -12340,17 +12363,18 @@ var ChatInput = memo4(({
|
|
|
12340
12363
|
}
|
|
12341
12364
|
}, []));
|
|
12342
12365
|
return /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", children: [
|
|
12343
|
-
|
|
12366
|
+
/* @__PURE__ */ jsx5(
|
|
12344
12367
|
Box4,
|
|
12345
12368
|
{
|
|
12346
12369
|
flexDirection: "column",
|
|
12347
|
-
borderStyle: "single",
|
|
12348
|
-
borderColor: THEME.border.default,
|
|
12349
|
-
paddingX: 1,
|
|
12370
|
+
borderStyle: showPreview ? "single" : void 0,
|
|
12371
|
+
borderColor: showPreview ? THEME.border.default : void 0,
|
|
12372
|
+
paddingX: showPreview ? 1 : 0,
|
|
12350
12373
|
marginBottom: 0,
|
|
12351
|
-
|
|
12374
|
+
height: showPreview ? void 0 : 0,
|
|
12375
|
+
children: showPreview && suggestions.map((cmd, i) => {
|
|
12352
12376
|
const isFirst = i === 0;
|
|
12353
|
-
const nameColor = isFirst ? THEME.
|
|
12377
|
+
const nameColor = isFirst ? THEME.white : THEME.gray;
|
|
12354
12378
|
const aliasText = cmd.alias ? ` /${cmd.alias}` : "";
|
|
12355
12379
|
const argsText = cmd.args ? ` ${cmd.args}` : "";
|
|
12356
12380
|
return /* @__PURE__ */ jsxs4(Box4, { children: [
|
|
@@ -12358,9 +12382,9 @@ var ChatInput = memo4(({
|
|
|
12358
12382
|
"/",
|
|
12359
12383
|
cmd.name
|
|
12360
12384
|
] }),
|
|
12361
|
-
/* @__PURE__ */ jsx5(Text5, { color: THEME.
|
|
12362
|
-
aliasText && /* @__PURE__ */ jsx5(Text5, { color: THEME.
|
|
12363
|
-
/* @__PURE__ */ jsxs4(Text5, { color: THEME.
|
|
12385
|
+
/* @__PURE__ */ jsx5(Text5, { color: THEME.gray, children: argsText }),
|
|
12386
|
+
aliasText && /* @__PURE__ */ jsx5(Text5, { color: THEME.gray, children: aliasText }),
|
|
12387
|
+
/* @__PURE__ */ jsxs4(Text5, { color: THEME.gray, children: [
|
|
12364
12388
|
" \u2014 ",
|
|
12365
12389
|
cmd.description
|
|
12366
12390
|
] }),
|
|
@@ -12373,11 +12397,11 @@ var ChatInput = memo4(({
|
|
|
12373
12397
|
Box4,
|
|
12374
12398
|
{
|
|
12375
12399
|
borderStyle: "single",
|
|
12376
|
-
borderColor: inputRequest.status === "active" ? THEME.
|
|
12400
|
+
borderColor: inputRequest.status === "active" ? THEME.yellow : THEME.border.default,
|
|
12377
12401
|
paddingX: 1,
|
|
12378
12402
|
children: inputRequest.status === "active" ? /* @__PURE__ */ jsxs4(Box4, { children: [
|
|
12379
|
-
/* @__PURE__ */ jsx5(Text5, { color: THEME.
|
|
12380
|
-
/* @__PURE__ */ jsxs4(Text5, { color: THEME.
|
|
12403
|
+
/* @__PURE__ */ jsx5(Text5, { color: THEME.yellow, children: "[auth]" }),
|
|
12404
|
+
/* @__PURE__ */ jsxs4(Text5, { color: THEME.gray, children: [
|
|
12381
12405
|
" ",
|
|
12382
12406
|
inputRequest.prompt
|
|
12383
12407
|
] }),
|
|
@@ -12392,7 +12416,7 @@ var ChatInput = memo4(({
|
|
|
12392
12416
|
}
|
|
12393
12417
|
)
|
|
12394
12418
|
] }) : /* @__PURE__ */ jsxs4(Box4, { children: [
|
|
12395
|
-
/* @__PURE__ */ jsx5(Text5, { color: THEME.
|
|
12419
|
+
/* @__PURE__ */ jsx5(Text5, { color: THEME.primary, children: "\u25B8" }),
|
|
12396
12420
|
/* @__PURE__ */ jsx5(Text5, { children: " " }),
|
|
12397
12421
|
/* @__PURE__ */ jsx5(
|
|
12398
12422
|
TextInput,
|
|
@@ -12432,26 +12456,26 @@ var Footer = memo5(({ phase, targets, findings, todo, elapsedTime, isProcessing
|
|
|
12432
12456
|
justifyContent: "space-between",
|
|
12433
12457
|
children: [
|
|
12434
12458
|
/* @__PURE__ */ jsxs5(Box5, { gap: 2, children: [
|
|
12435
|
-
/* @__PURE__ */ jsxs5(Text6, { color: THEME.
|
|
12459
|
+
/* @__PURE__ */ jsxs5(Text6, { color: THEME.gray, children: [
|
|
12436
12460
|
"Phase: ",
|
|
12437
|
-
/* @__PURE__ */ jsx6(Text6, { color: THEME.
|
|
12461
|
+
/* @__PURE__ */ jsx6(Text6, { color: THEME.white, children: phase })
|
|
12438
12462
|
] }),
|
|
12439
|
-
/* @__PURE__ */ jsxs5(Text6, { color: THEME.
|
|
12463
|
+
/* @__PURE__ */ jsxs5(Text6, { color: THEME.gray, children: [
|
|
12440
12464
|
"Targets: ",
|
|
12441
|
-
/* @__PURE__ */ jsx6(Text6, { color: THEME.
|
|
12465
|
+
/* @__PURE__ */ jsx6(Text6, { color: THEME.white, children: targets })
|
|
12442
12466
|
] }),
|
|
12443
|
-
/* @__PURE__ */ jsxs5(Text6, { color: THEME.
|
|
12467
|
+
/* @__PURE__ */ jsxs5(Text6, { color: THEME.gray, children: [
|
|
12444
12468
|
"Findings: ",
|
|
12445
|
-
/* @__PURE__ */ jsx6(Text6, { color: THEME.
|
|
12469
|
+
/* @__PURE__ */ jsx6(Text6, { color: THEME.white, children: findings })
|
|
12446
12470
|
] }),
|
|
12447
|
-
/* @__PURE__ */ jsxs5(Text6, { color: THEME.
|
|
12471
|
+
/* @__PURE__ */ jsxs5(Text6, { color: THEME.gray, children: [
|
|
12448
12472
|
"Tasks: ",
|
|
12449
|
-
/* @__PURE__ */ jsx6(Text6, { color: THEME.
|
|
12473
|
+
/* @__PURE__ */ jsx6(Text6, { color: THEME.white, children: todo })
|
|
12450
12474
|
] })
|
|
12451
12475
|
] }),
|
|
12452
12476
|
/* @__PURE__ */ jsxs5(Box5, { children: [
|
|
12453
|
-
/* @__PURE__ */ jsx6(Text6, { color: isProcessing ? THEME.
|
|
12454
|
-
/* @__PURE__ */ jsx6(Text6, { color: THEME.
|
|
12477
|
+
/* @__PURE__ */ jsx6(Text6, { color: isProcessing ? THEME.primary : THEME.gray, children: isProcessing ? "Running " : "Idle " }),
|
|
12478
|
+
/* @__PURE__ */ jsx6(Text6, { color: THEME.white, children: formatElapsed(elapsedTime) })
|
|
12455
12479
|
] })
|
|
12456
12480
|
]
|
|
12457
12481
|
}
|
package/dist/prompts/base.md
CHANGED
|
@@ -4,9 +4,41 @@ You are an **elite autonomous penetration testing AI** conducting authorized ope
|
|
|
4
4
|
You think and act like a **senior offensive security researcher competing in a CTF**.
|
|
5
5
|
You have direct access to all tools. **You can write your own code** — if a tool or PoC doesn't exist, build it yourself.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## FIRST TURN: ANALYZE USER INTENT
|
|
8
8
|
|
|
9
|
-
**
|
|
9
|
+
**Before taking any action, you MUST analyze the user's input on the FIRST turn.**
|
|
10
|
+
|
|
11
|
+
### Intent Classification (Check in Order)
|
|
12
|
+
1. **Greeting/Small Talk** → Examples: "hi", "hello", "hey", "안녕", "what's up", "how are you"
|
|
13
|
+
- **Response**: Brief friendly greeting + ask what target they want to attack
|
|
14
|
+
- **DO NOT**: Start scanning, searching, or running any commands
|
|
15
|
+
|
|
16
|
+
2. **Question/Help Request** → Examples: "how do I...", "what is...", "can you explain...", "help"
|
|
17
|
+
- **Response**: Answer the question directly using your knowledge
|
|
18
|
+
- **DO NOT**: Start pentesting operations unless explicitly requested
|
|
19
|
+
|
|
20
|
+
3. **Unclear/Ambiguous Input** → Examples: single word that's not a target, incomplete sentences
|
|
21
|
+
- **Response**: Ask clarifying question: "What target would you like me to attack?"
|
|
22
|
+
- **DO NOT**: Assume it's a target and start scanning
|
|
23
|
+
|
|
24
|
+
4. **Pentesting Request** → Examples: IP address, domain, "scan X", "attack Y", "find vulnerabilities in..."
|
|
25
|
+
- **Response**: Proceed with reconnaissance and attack workflow
|
|
26
|
+
- **REQUIRED**: Call tools and execute the pentesting loop
|
|
27
|
+
|
|
28
|
+
### Greeting Response Template
|
|
29
|
+
```
|
|
30
|
+
👋 Hello! I'm your pentesting agent. I can help you with:
|
|
31
|
+
- Network reconnaissance and scanning
|
|
32
|
+
- Vulnerability discovery and exploitation
|
|
33
|
+
- Post-exploitation and privilege escalation
|
|
34
|
+
- CTF challenges and security assessments
|
|
35
|
+
|
|
36
|
+
What target would you like me to attack? (e.g., IP address, domain, or CTF challenge)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## SUBSEQUENT TURNS: EVERY TURN MUST PRODUCE TOOL CALLS
|
|
40
|
+
|
|
41
|
+
**Once pentesting has started, you MUST call at least one tool on EVERY SINGLE TURN.** No exceptions.
|
|
10
42
|
|
|
11
43
|
- FORBIDDEN: Outputting text without tool calls (planning, summarizing, asking)
|
|
12
44
|
- FORBIDDEN: "Let me think about this..." or "I'll plan my approach..."
|