pwnkit-cli 0.3.1 → 0.3.2

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.
Files changed (91) hide show
  1. package/dist/commands/audit.d.ts +3 -0
  2. package/dist/commands/audit.d.ts.map +1 -0
  3. package/dist/commands/audit.js +32 -0
  4. package/dist/commands/audit.js.map +1 -0
  5. package/dist/commands/findings.d.ts +3 -0
  6. package/dist/commands/findings.d.ts.map +1 -0
  7. package/dist/commands/findings.js +110 -0
  8. package/dist/commands/findings.js.map +1 -0
  9. package/dist/commands/history.d.ts +3 -0
  10. package/dist/commands/history.d.ts.map +1 -0
  11. package/dist/commands/history.js +34 -0
  12. package/dist/commands/history.js.map +1 -0
  13. package/dist/commands/index.d.ts +7 -0
  14. package/dist/commands/index.d.ts.map +1 -0
  15. package/dist/commands/index.js +7 -0
  16. package/dist/commands/index.js.map +1 -0
  17. package/dist/commands/replay.d.ts +3 -0
  18. package/dist/commands/replay.d.ts.map +1 -0
  19. package/dist/commands/replay.js +83 -0
  20. package/dist/commands/replay.js.map +1 -0
  21. package/dist/commands/review.d.ts +3 -0
  22. package/dist/commands/review.d.ts.map +1 -0
  23. package/dist/commands/review.js +30 -0
  24. package/dist/commands/review.js.map +1 -0
  25. package/dist/commands/run.d.ts +16 -0
  26. package/dist/commands/run.d.ts.map +1 -0
  27. package/dist/commands/run.js +83 -0
  28. package/dist/commands/run.js.map +1 -0
  29. package/dist/commands/scan.d.ts +3 -0
  30. package/dist/commands/scan.d.ts.map +1 -0
  31. package/dist/commands/scan.js +187 -0
  32. package/dist/commands/scan.js.map +1 -0
  33. package/dist/event-handler.d.ts +19 -0
  34. package/dist/event-handler.d.ts.map +1 -0
  35. package/dist/event-handler.js +63 -0
  36. package/dist/event-handler.js.map +1 -0
  37. package/dist/formatters/index.d.ts +14 -0
  38. package/dist/formatters/index.d.ts.map +1 -0
  39. package/dist/formatters/index.js +56 -0
  40. package/dist/formatters/index.js.map +1 -0
  41. package/dist/formatters/json.d.ts +3 -0
  42. package/dist/formatters/json.d.ts.map +1 -0
  43. package/dist/formatters/json.js +4 -0
  44. package/dist/formatters/json.js.map +1 -0
  45. package/dist/formatters/markdown.d.ts +3 -0
  46. package/dist/formatters/markdown.d.ts.map +1 -0
  47. package/dist/formatters/markdown.js +90 -0
  48. package/dist/formatters/markdown.js.map +1 -0
  49. package/dist/formatters/replay.d.ts +24 -0
  50. package/dist/formatters/replay.d.ts.map +1 -0
  51. package/dist/formatters/replay.js +357 -0
  52. package/dist/formatters/replay.js.map +1 -0
  53. package/dist/formatters/terminal.d.ts +4 -0
  54. package/dist/formatters/terminal.d.ts.map +1 -0
  55. package/dist/formatters/terminal.js +190 -0
  56. package/dist/formatters/terminal.js.map +1 -0
  57. package/dist/index.d.ts +3 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +128 -60851
  60. package/dist/index.js.map +1 -0
  61. package/dist/spinner.d.ts +16 -0
  62. package/dist/spinner.d.ts.map +1 -0
  63. package/dist/spinner.js +97 -0
  64. package/dist/spinner.js.map +1 -0
  65. package/dist/ui/ScanUI.d.ts +37 -0
  66. package/dist/ui/ScanUI.d.ts.map +1 -0
  67. package/dist/ui/ScanUI.js +58 -0
  68. package/dist/ui/ScanUI.js.map +1 -0
  69. package/dist/ui/renderScan.d.ts +21 -0
  70. package/dist/ui/renderScan.d.ts.map +1 -0
  71. package/dist/ui/renderScan.js +191 -0
  72. package/dist/ui/renderScan.js.map +1 -0
  73. package/dist/utils.d.ts +12 -0
  74. package/dist/utils.d.ts.map +1 -0
  75. package/dist/utils.js +40 -0
  76. package/dist/utils.js.map +1 -0
  77. package/package.json +20 -50
  78. package/LICENSE +0 -188
  79. package/README.md +0 -324
  80. package/dist/attacks/data-exfiltration/pii-leakage.yaml +0 -27
  81. package/dist/attacks/encoding-bypass/base64-encoding.yaml +0 -24
  82. package/dist/attacks/jailbreak/dan-roleplay.yaml +0 -27
  83. package/dist/attacks/jailbreak/hypothetical-scenario.yaml +0 -25
  84. package/dist/attacks/jailbreak/multilingual-bypass.yaml +0 -22
  85. package/dist/attacks/output-manipulation/harmful-content.yaml +0 -25
  86. package/dist/attacks/prompt-injection/context-manipulation.yaml +0 -32
  87. package/dist/attacks/prompt-injection/direct-injection.yaml +0 -28
  88. package/dist/attacks/prompt-injection/indirect-injection.yaml +0 -33
  89. package/dist/attacks/system-prompt-extraction/direct-ask.yaml +0 -30
  90. package/dist/attacks/system-prompt-extraction/markdown-exfil.yaml +0 -26
  91. package/dist/attacks/tool-misuse/ssrf-via-tools.yaml +0 -27
@@ -0,0 +1,357 @@
1
+ import chalk from "chalk";
2
+ // ── Sleep utility ──
3
+ function sleep(ms) {
4
+ return new Promise((resolve) => setTimeout(resolve, ms));
5
+ }
6
+ // ── ANSI-safe string length ──
7
+ function stripAnsi(s) {
8
+ // eslint-disable-next-line no-control-regex
9
+ return s.replace(/\x1b\[[0-9;]*m/g, "");
10
+ }
11
+ // ── Box drawing ──
12
+ const BOX_WIDTH = 55;
13
+ function boxTop(label) {
14
+ const inner = ` ${label} `;
15
+ const remaining = BOX_WIDTH - inner.length - 1; // -1 for closing corner
16
+ return (chalk.dim("\u250c\u2500 ") +
17
+ chalk.bold.white(label) +
18
+ chalk.dim(" " + "\u2500".repeat(Math.max(0, remaining)) + "\u2510"));
19
+ }
20
+ function boxRow(content) {
21
+ const visible = stripAnsi(content);
22
+ const pad = Math.max(0, BOX_WIDTH - visible.length - 2);
23
+ return chalk.dim("\u2502") + " " + content + " ".repeat(pad) + chalk.dim("\u2502");
24
+ }
25
+ function boxBottom(withArrow) {
26
+ if (withArrow) {
27
+ const half = Math.floor((BOX_WIDTH - 1) / 2);
28
+ const rest = BOX_WIDTH - half - 1;
29
+ return (chalk.dim("\u2514" + "\u2500".repeat(half) + "\u2534" + "\u2500".repeat(rest) + "\u2518"));
30
+ }
31
+ return chalk.dim("\u2514" + "\u2500".repeat(BOX_WIDTH) + "\u2518");
32
+ }
33
+ function connector() {
34
+ const half = Math.floor((BOX_WIDTH + 1) / 2);
35
+ return " ".repeat(half) + chalk.dim("\u25bc");
36
+ }
37
+ // ── Outcome styling ──
38
+ function outcomeLabel(outcome) {
39
+ switch (outcome) {
40
+ case "vulnerable":
41
+ return chalk.red.bold("VULNERABLE");
42
+ case "leaked":
43
+ return chalk.red.bold("LEAKED");
44
+ case "bypassed":
45
+ return chalk.red.bold("BYPASSED");
46
+ case "safe":
47
+ return chalk.green("SAFE");
48
+ case "error":
49
+ return chalk.yellow("ERROR");
50
+ default:
51
+ return chalk.gray(outcome.toUpperCase());
52
+ }
53
+ }
54
+ function severityColor(s) {
55
+ switch (s) {
56
+ case "critical":
57
+ return chalk.red.bold;
58
+ case "high":
59
+ return chalk.redBright;
60
+ case "medium":
61
+ return chalk.yellow;
62
+ case "low":
63
+ return chalk.blue;
64
+ case "info":
65
+ return chalk.gray;
66
+ }
67
+ }
68
+ // ── Build replay lines from scan data ──
69
+ function buildReplayLines(data) {
70
+ const lines = [];
71
+ const FAST = 50;
72
+ const MED = 75;
73
+ const SLOW = 100;
74
+ const PAUSE = 200;
75
+ // ── DISCOVER lane ──
76
+ lines.push({ text: boxTop("DISCOVER"), delay: PAUSE });
77
+ if (data.targetInfo) {
78
+ const t = data.targetInfo;
79
+ const truncUrl = t.url.length > 30 ? t.url.slice(0, 27) + "..." : t.url;
80
+ lines.push({
81
+ text: boxRow(chalk.dim("\u25b8") +
82
+ " " +
83
+ chalk.white(`GET ${truncUrl}`) +
84
+ chalk.dim(" \u2192 ") +
85
+ chalk.white(`200`) +
86
+ chalk.gray(` (${t.type} endpoint detected)`)),
87
+ delay: MED,
88
+ });
89
+ if (t.systemPrompt) {
90
+ lines.push({
91
+ text: boxRow(chalk.dim("\u25b8") +
92
+ " " +
93
+ chalk.white(`System prompt extracted`) +
94
+ chalk.gray(` (${t.systemPrompt.length} chars)`)),
95
+ delay: MED,
96
+ });
97
+ }
98
+ if (t.detectedFeatures && t.detectedFeatures.length > 0) {
99
+ lines.push({
100
+ text: boxRow(chalk.dim("\u25b8") +
101
+ " " +
102
+ chalk.white(`${t.detectedFeatures.length} features detected: `) +
103
+ chalk.gray(t.detectedFeatures.slice(0, 3).join(", "))),
104
+ delay: MED,
105
+ });
106
+ }
107
+ if (t.endpoints && t.endpoints.length > 0) {
108
+ lines.push({
109
+ text: boxRow(chalk.dim("\u25b8") +
110
+ " " +
111
+ chalk.white(`${t.endpoints.length} endpoints found`)),
112
+ delay: MED,
113
+ });
114
+ }
115
+ }
116
+ else {
117
+ const truncTarget = data.target.length > 30 ? data.target.slice(0, 27) + "..." : data.target;
118
+ lines.push({
119
+ text: boxRow(chalk.dim("\u25b8") +
120
+ " " +
121
+ chalk.white(`GET ${truncTarget}`) +
122
+ chalk.dim(" \u2192 ") +
123
+ chalk.white("200") +
124
+ chalk.gray(" (LLM endpoint detected)")),
125
+ delay: MED,
126
+ });
127
+ }
128
+ lines.push({ text: boxBottom(true), delay: FAST });
129
+ lines.push({ text: connector(), delay: PAUSE });
130
+ // ── ATTACK lane ──
131
+ lines.push({ text: boxTop("ATTACK"), delay: PAUSE });
132
+ const vulnerableFindings = data.findings.filter((f) => f.status !== "false-positive");
133
+ if (vulnerableFindings.length > 0) {
134
+ for (const finding of vulnerableFindings.slice(0, 8)) {
135
+ const truncTitle = finding.title.length > 30
136
+ ? finding.title.slice(0, 27) + "..."
137
+ : finding.title;
138
+ let outcome = "VULNERABLE";
139
+ const cat = finding.category;
140
+ if (cat === "system-prompt-extraction")
141
+ outcome = "LEAKED";
142
+ if (cat === "jailbreak")
143
+ outcome = "BYPASSED";
144
+ lines.push({
145
+ text: boxRow(chalk.dim("\u25b8") +
146
+ " " +
147
+ chalk.white(truncTitle) +
148
+ chalk.dim(" \u2192 ") +
149
+ " " +
150
+ outcomeLabel(outcome.toLowerCase())),
151
+ delay: MED,
152
+ });
153
+ }
154
+ if (vulnerableFindings.length > 8) {
155
+ lines.push({
156
+ text: boxRow(chalk.gray(` ... and ${vulnerableFindings.length - 8} more attacks`)),
157
+ delay: FAST,
158
+ });
159
+ }
160
+ }
161
+ else {
162
+ lines.push({
163
+ text: boxRow(chalk.dim("\u25b8") +
164
+ " " +
165
+ chalk.white(`${data.summary.totalAttacks} probes executed`) +
166
+ chalk.dim(" \u2192 ") +
167
+ chalk.green("ALL SAFE")),
168
+ delay: MED,
169
+ });
170
+ }
171
+ lines.push({ text: boxBottom(true), delay: FAST });
172
+ lines.push({ text: connector(), delay: PAUSE });
173
+ // ── VERIFY lane ──
174
+ lines.push({ text: boxTop("VERIFY"), delay: PAUSE });
175
+ const confirmed = data.findings.filter((f) => f.status === "confirmed" || f.status === "verified" || f.status === "scored" || f.status === "reported");
176
+ const falsePositives = data.findings.filter((f) => f.status === "false-positive");
177
+ if (confirmed.length > 0 || data.findings.length > 0) {
178
+ const reproduced = confirmed.length > 0 ? confirmed.length : data.findings.length;
179
+ lines.push({
180
+ text: boxRow(chalk.green("\u2713") +
181
+ " " +
182
+ chalk.white(`Reproduced ${reproduced}/${reproduced} findings`)),
183
+ delay: MED,
184
+ });
185
+ }
186
+ if (falsePositives.length > 0) {
187
+ lines.push({
188
+ text: boxRow(chalk.red("\u2717") +
189
+ " " +
190
+ chalk.white(`Eliminated ${falsePositives.length} false positives`)),
191
+ delay: MED,
192
+ });
193
+ }
194
+ if (confirmed.length === 0 && falsePositives.length === 0 && data.findings.length === 0) {
195
+ lines.push({
196
+ text: boxRow(chalk.green("\u2713") + " " + chalk.white("No findings to verify")),
197
+ delay: MED,
198
+ });
199
+ }
200
+ lines.push({ text: boxBottom(true), delay: FAST });
201
+ lines.push({ text: connector(), delay: PAUSE });
202
+ // ── REPORT lane ──
203
+ lines.push({ text: boxTop("REPORT"), delay: PAUSE });
204
+ const totalFindings = data.summary.totalFindings;
205
+ if (totalFindings > 0) {
206
+ const parts = [];
207
+ if (data.summary.critical > 0)
208
+ parts.push(chalk.red.bold(`${data.summary.critical} CRITICAL`));
209
+ if (data.summary.high > 0)
210
+ parts.push(chalk.redBright(`${data.summary.high} HIGH`));
211
+ if (data.summary.medium > 0)
212
+ parts.push(chalk.yellow(`${data.summary.medium} MEDIUM`));
213
+ if (data.summary.low > 0)
214
+ parts.push(chalk.blue(`${data.summary.low} LOW`));
215
+ if (data.summary.info > 0)
216
+ parts.push(chalk.gray(`${data.summary.info} INFO`));
217
+ lines.push({
218
+ text: boxRow(chalk.white(`${totalFindings} verified findings: `) + parts.join(chalk.dim(", "))),
219
+ delay: MED,
220
+ });
221
+ }
222
+ else {
223
+ lines.push({
224
+ text: boxRow(chalk.green.bold("0 findings") + chalk.white(" - target appears secure")),
225
+ delay: MED,
226
+ });
227
+ }
228
+ const duration = data.durationMs < 1000
229
+ ? `${data.durationMs}ms`
230
+ : `${(data.durationMs / 1000).toFixed(1)}s`;
231
+ lines.push({
232
+ text: boxRow(chalk.white(`Completed in ${duration}`) +
233
+ chalk.dim(" \u2192 ") +
234
+ chalk.gray("./pwnkit-report.json")),
235
+ delay: MED,
236
+ });
237
+ lines.push({ text: boxBottom(false), delay: FAST });
238
+ return lines;
239
+ }
240
+ // ── Animated replay (prints to stdout with delays) ──
241
+ export async function renderReplay(data) {
242
+ const lines = buildReplayLines(data);
243
+ // Banner
244
+ process.stdout.write("\n");
245
+ process.stdout.write(chalk.red.bold(" \u25c6 pwnkit") +
246
+ chalk.gray(" attack replay") +
247
+ "\n");
248
+ process.stdout.write(chalk.dim(" " + "\u2500".repeat(BOX_WIDTH + 1)) + "\n");
249
+ process.stdout.write("\n");
250
+ await sleep(200);
251
+ for (const line of lines) {
252
+ await sleep(line.delay);
253
+ process.stdout.write(" " + line.text + "\n");
254
+ }
255
+ process.stdout.write("\n");
256
+ }
257
+ // ── Static (non-animated) replay for piping/testing ──
258
+ export function renderReplayStatic(data) {
259
+ const lines = buildReplayLines(data);
260
+ const output = [];
261
+ output.push("");
262
+ output.push(chalk.red.bold(" \u25c6 pwnkit") + chalk.gray(" attack replay"));
263
+ output.push(chalk.dim(" " + "\u2500".repeat(BOX_WIDTH + 1)));
264
+ output.push("");
265
+ for (const line of lines) {
266
+ output.push(" " + line.text);
267
+ }
268
+ output.push("");
269
+ return output.join("\n");
270
+ }
271
+ export function createReplayCollector(target) {
272
+ let targetInfo;
273
+ const findings = [];
274
+ const stages = {};
275
+ let totalAttacks = 0;
276
+ let attacksDone = 0;
277
+ const startMs = Date.now();
278
+ return {
279
+ onEvent(event) {
280
+ switch (event.type) {
281
+ case "stage:start":
282
+ if (event.stage) {
283
+ stages[event.stage] = { startMs: Date.now() };
284
+ }
285
+ if (event.stage === "attack") {
286
+ const match = event.message.match(/(\d+)/);
287
+ if (match)
288
+ totalAttacks = parseInt(match[1], 10);
289
+ }
290
+ if (event.stage === "discovery" && event.data && typeof event.data === "object") {
291
+ const d = event.data;
292
+ if ("target" in d) {
293
+ targetInfo = d.target;
294
+ }
295
+ }
296
+ break;
297
+ case "stage:end":
298
+ if (event.stage) {
299
+ if (stages[event.stage]) {
300
+ stages[event.stage].endMs = Date.now();
301
+ }
302
+ }
303
+ if (event.stage === "discovery" &&
304
+ event.data &&
305
+ typeof event.data === "object") {
306
+ const d = event.data;
307
+ if ("target" in d) {
308
+ targetInfo = d.target;
309
+ }
310
+ }
311
+ break;
312
+ case "attack:end":
313
+ attacksDone++;
314
+ break;
315
+ case "finding":
316
+ if (event.data && typeof event.data === "object" && "id" in event.data) {
317
+ findings.push(event.data);
318
+ }
319
+ break;
320
+ }
321
+ },
322
+ getReplayData() {
323
+ const durationMs = Date.now() - startMs;
324
+ const critCount = findings.filter((f) => f.severity === "critical").length;
325
+ const highCount = findings.filter((f) => f.severity === "high").length;
326
+ const medCount = findings.filter((f) => f.severity === "medium").length;
327
+ const lowCount = findings.filter((f) => f.severity === "low").length;
328
+ const infoCount = findings.filter((f) => f.severity === "info").length;
329
+ return {
330
+ target,
331
+ targetInfo,
332
+ findings,
333
+ summary: {
334
+ totalAttacks: totalAttacks || attacksDone,
335
+ totalFindings: findings.length,
336
+ critical: critCount,
337
+ high: highCount,
338
+ medium: medCount,
339
+ low: lowCount,
340
+ info: infoCount,
341
+ },
342
+ durationMs,
343
+ };
344
+ },
345
+ };
346
+ }
347
+ // ── Build ReplayData from a ScanReport (for --replay / replay command) ──
348
+ export function replayDataFromReport(report) {
349
+ return {
350
+ target: report.target,
351
+ findings: report.findings,
352
+ summary: report.summary,
353
+ durationMs: report.durationMs,
354
+ warnings: report.warnings,
355
+ };
356
+ }
357
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/formatters/replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ScanReport } from "@pwnkit/shared";
2
+ export declare function formatTerminal(report: ScanReport): string;
3
+ export declare function renderProgressBar(current: number, total: number, width?: number): string;
4
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/formatters/terminal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,gBAAgB,CAAC;AAsFpE,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CA0DzD;AAwFD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACT,MAAM,CAQR"}
@@ -0,0 +1,190 @@
1
+ import chalk from "chalk";
2
+ // ── Severity Design System ──
3
+ const SEVERITY_STYLE = {
4
+ critical: {
5
+ badge: (s) => chalk.bgRed.white.bold(` ${s} `),
6
+ label: "Critical",
7
+ icon: "●",
8
+ },
9
+ high: {
10
+ badge: (s) => chalk.bgRedBright.white.bold(` ${s} `),
11
+ label: "High",
12
+ icon: "●",
13
+ },
14
+ medium: {
15
+ badge: (s) => chalk.bgYellow.black.bold(` ${s} `),
16
+ label: "Medium",
17
+ icon: "●",
18
+ },
19
+ low: {
20
+ badge: (s) => chalk.bgBlue.white(` ${s} `),
21
+ label: "Low",
22
+ icon: "○",
23
+ },
24
+ info: {
25
+ badge: (s) => chalk.bgGray.white(` ${s} `),
26
+ label: "Info",
27
+ icon: "·",
28
+ },
29
+ };
30
+ const SEVERITY_COUNT_COLOR = {
31
+ critical: chalk.red.bold,
32
+ high: chalk.redBright.bold,
33
+ medium: chalk.yellow.bold,
34
+ low: chalk.blue,
35
+ info: chalk.gray,
36
+ };
37
+ // ── Box Drawing ──
38
+ const BOX = {
39
+ topLeft: "╭",
40
+ topRight: "╮",
41
+ bottomLeft: "╰",
42
+ bottomRight: "╯",
43
+ horizontal: "─",
44
+ vertical: "│",
45
+ teeRight: "├",
46
+ teeLeft: "┤",
47
+ };
48
+ function boxLine(width) {
49
+ return BOX.horizontal.repeat(width);
50
+ }
51
+ function boxTop(width) {
52
+ return ` ${chalk.gray(BOX.topLeft + boxLine(width) + BOX.topRight)}`;
53
+ }
54
+ function boxBottom(width) {
55
+ return ` ${chalk.gray(BOX.bottomLeft + boxLine(width) + BOX.bottomRight)}`;
56
+ }
57
+ function boxRow(content, width) {
58
+ // Strip ANSI to measure visible length
59
+ const visible = stripAnsi(content);
60
+ const pad = Math.max(0, width - visible.length);
61
+ return ` ${chalk.gray(BOX.vertical)} ${content}${" ".repeat(pad)}${chalk.gray(BOX.vertical)}`;
62
+ }
63
+ function boxDivider(width) {
64
+ return ` ${chalk.gray(BOX.teeRight + boxLine(width) + BOX.teeLeft)}`;
65
+ }
66
+ function stripAnsi(s) {
67
+ // eslint-disable-next-line no-control-regex
68
+ return s.replace(/\x1b\[[0-9;]*m/g, "");
69
+ }
70
+ // ── Main Formatter ──
71
+ export function formatTerminal(report) {
72
+ const W = 60; // inner box width (excluding border chars)
73
+ const lines = [];
74
+ lines.push("");
75
+ if (report.warnings.length > 0) {
76
+ lines.push(` ${chalk.yellow.bold("WARNINGS")}`);
77
+ lines.push("");
78
+ for (const warning of report.warnings) {
79
+ lines.push(` ${chalk.yellow.bold("!")} ${chalk.yellow(`[${warning.stage}] ${warning.message}`)}`);
80
+ }
81
+ lines.push("");
82
+ }
83
+ // ── Findings Section ──
84
+ if (report.findings.length === 0) {
85
+ lines.push("");
86
+ if (report.warnings.length > 0) {
87
+ lines.push(` ${chalk.yellow.bold("!")} ${chalk.yellow("No vulnerabilities confirmed. Scan finished with warnings.")}`);
88
+ }
89
+ else {
90
+ lines.push(` ${chalk.green.bold("✓")} ${chalk.green("No vulnerabilities found.")}`);
91
+ }
92
+ }
93
+ else {
94
+ lines.push(` ${chalk.bold.white("FINDINGS")}`);
95
+ lines.push("");
96
+ const sorted = [...report.findings].sort((a, b) => severityRank(a.severity) - severityRank(b.severity));
97
+ for (const finding of sorted) {
98
+ lines.push(formatFinding(finding));
99
+ }
100
+ }
101
+ // ── Summary ──
102
+ lines.push("");
103
+ lines.push(` ${chalk.gray("─".repeat(50))}`);
104
+ lines.push("");
105
+ const { summary } = report;
106
+ const sev = [
107
+ summary.critical > 0 ? chalk.red.bold(`${summary.critical} critical`) : chalk.gray(`${summary.critical} critical`),
108
+ summary.high > 0 ? chalk.hex("#f97316").bold(`${summary.high} high`) : chalk.gray(`${summary.high} high`),
109
+ summary.medium > 0 ? chalk.yellow.bold(`${summary.medium} medium`) : chalk.gray(`${summary.medium} medium`),
110
+ chalk.gray(`${summary.low} low`),
111
+ chalk.gray(`${summary.info} info`),
112
+ ].join(chalk.gray(" "));
113
+ lines.push(` ${sev}`);
114
+ lines.push(` ${chalk.white.bold(String(summary.totalFindings))} findings ${chalk.gray("in")} ${chalk.white(formatDuration(report.durationMs))}`);
115
+ lines.push("");
116
+ return lines.join("\n");
117
+ }
118
+ // ── Finding Card ──
119
+ function formatFinding(finding) {
120
+ const style = SEVERITY_STYLE[finding.severity];
121
+ const lines = [];
122
+ // Badge + Title
123
+ lines.push(` ${style.badge(style.label.toUpperCase().padEnd(8))} ${chalk.bold.white(finding.title)}`);
124
+ // Category + OWASP
125
+ const meta = [];
126
+ meta.push(`${chalk.gray("Category:")} ${formatCategory(finding.category)}`);
127
+ if (finding.status === "confirmed") {
128
+ meta.push(chalk.green("✓ Confirmed"));
129
+ }
130
+ lines.push(` ${" ".repeat(11)}${meta.join(chalk.gray(" · "))}`);
131
+ // Description
132
+ if (finding.description) {
133
+ const desc = finding.description.length > 100
134
+ ? finding.description.slice(0, 97) + "..."
135
+ : finding.description;
136
+ lines.push(` ${" ".repeat(11)}${chalk.gray(desc)}`);
137
+ }
138
+ // Evidence snippet
139
+ if (finding.evidence.analysis) {
140
+ const ev = finding.evidence.analysis.length > 100
141
+ ? finding.evidence.analysis.slice(0, 97) + "..."
142
+ : finding.evidence.analysis;
143
+ lines.push(` ${" ".repeat(11)}${chalk.gray.italic("↳ " + ev)}`);
144
+ }
145
+ lines.push("");
146
+ return lines.join("\n");
147
+ }
148
+ // ── Helpers ──
149
+ function buildSeverityLine(summary) {
150
+ const parts = [];
151
+ const severities = ["critical", "high", "medium", "low", "info"];
152
+ for (const sev of severities) {
153
+ const count = summary[sev];
154
+ const color = SEVERITY_COUNT_COLOR[sev];
155
+ const icon = SEVERITY_STYLE[sev].icon;
156
+ parts.push(` ${color(icon)} ${color(String(count))} ${chalk.gray(SEVERITY_STYLE[sev].label)}`);
157
+ }
158
+ return parts.join(chalk.gray(" "));
159
+ }
160
+ function formatCategory(cat) {
161
+ return cat
162
+ .split("-")
163
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
164
+ .join(" ");
165
+ }
166
+ function severityRank(s) {
167
+ const order = {
168
+ critical: 0,
169
+ high: 1,
170
+ medium: 2,
171
+ low: 3,
172
+ info: 4,
173
+ };
174
+ return order[s];
175
+ }
176
+ function formatDuration(ms) {
177
+ if (ms < 1000)
178
+ return `${ms}ms`;
179
+ return `${(ms / 1000).toFixed(1)}s`;
180
+ }
181
+ // ── Progress Bar (exported for use in index.ts) ──
182
+ export function renderProgressBar(current, total, width = 30) {
183
+ const ratio = Math.min(current / total, 1);
184
+ const filled = Math.round(ratio * width);
185
+ const empty = width - filled;
186
+ const bar = chalk.red("█".repeat(filled)) + chalk.gray("░".repeat(empty));
187
+ const pct = Math.round(ratio * 100);
188
+ return `${bar} ${chalk.white.bold(String(pct))}${chalk.gray("%")} ${chalk.gray(`(${current}/${total})`)}`;
189
+ }
190
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/formatters/terminal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}