vaspera 2.12.0 → 2.14.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.
Files changed (90) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/__tests__/antagonist-integration.test.d.ts +6 -0
  3. package/dist/__tests__/antagonist-integration.test.d.ts.map +1 -0
  4. package/dist/__tests__/antagonist-integration.test.js +239 -0
  5. package/dist/__tests__/antagonist-integration.test.js.map +1 -0
  6. package/dist/__tests__/siem-integration.test.d.ts +7 -0
  7. package/dist/__tests__/siem-integration.test.d.ts.map +1 -0
  8. package/dist/__tests__/siem-integration.test.js +285 -0
  9. package/dist/__tests__/siem-integration.test.js.map +1 -0
  10. package/dist/agents/antagonist/challenger.d.ts +46 -0
  11. package/dist/agents/antagonist/challenger.d.ts.map +1 -0
  12. package/dist/agents/antagonist/challenger.js +257 -0
  13. package/dist/agents/antagonist/challenger.js.map +1 -0
  14. package/dist/agents/antagonist/index.d.ts +31 -0
  15. package/dist/agents/antagonist/index.d.ts.map +1 -0
  16. package/dist/agents/antagonist/index.js +175 -0
  17. package/dist/agents/antagonist/index.js.map +1 -0
  18. package/dist/agents/antagonist/prioritizer.d.ts +27 -0
  19. package/dist/agents/antagonist/prioritizer.d.ts.map +1 -0
  20. package/dist/agents/antagonist/prioritizer.js +181 -0
  21. package/dist/agents/antagonist/prioritizer.js.map +1 -0
  22. package/dist/agents/antagonist/prompts.d.ts +12 -0
  23. package/dist/agents/antagonist/prompts.d.ts.map +1 -0
  24. package/dist/agents/antagonist/prompts.js +155 -0
  25. package/dist/agents/antagonist/prompts.js.map +1 -0
  26. package/dist/agents/antagonist/synthesizer.d.ts +34 -0
  27. package/dist/agents/antagonist/synthesizer.d.ts.map +1 -0
  28. package/dist/agents/antagonist/synthesizer.js +451 -0
  29. package/dist/agents/antagonist/synthesizer.js.map +1 -0
  30. package/dist/agents/antagonist/types.d.ts +145 -0
  31. package/dist/agents/antagonist/types.d.ts.map +1 -0
  32. package/dist/agents/antagonist/types.js +63 -0
  33. package/dist/agents/antagonist/types.js.map +1 -0
  34. package/dist/agents/index.d.ts +1 -0
  35. package/dist/agents/index.d.ts.map +1 -1
  36. package/dist/agents/index.js +2 -0
  37. package/dist/agents/index.js.map +1 -1
  38. package/dist/certification/consensus.test.js +2 -0
  39. package/dist/certification/consensus.test.js.map +1 -1
  40. package/dist/certification/store.d.ts.map +1 -1
  41. package/dist/certification/store.js +6 -1
  42. package/dist/certification/store.js.map +1 -1
  43. package/dist/certification/types.d.ts +1 -1
  44. package/dist/certification/types.d.ts.map +1 -1
  45. package/dist/certification/types.js +2 -0
  46. package/dist/certification/types.js.map +1 -1
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +460 -16
  49. package/dist/index.js.map +1 -1
  50. package/dist/persistence/__tests__/json-fallback.test.d.ts +5 -0
  51. package/dist/persistence/__tests__/json-fallback.test.d.ts.map +1 -0
  52. package/dist/persistence/__tests__/json-fallback.test.js +249 -0
  53. package/dist/persistence/__tests__/json-fallback.test.js.map +1 -0
  54. package/dist/persistence/__tests__/persistence.test.js.map +1 -1
  55. package/dist/persistence/db.d.ts +15 -0
  56. package/dist/persistence/db.d.ts.map +1 -1
  57. package/dist/persistence/db.js +59 -10
  58. package/dist/persistence/db.js.map +1 -1
  59. package/dist/persistence/index.d.ts +13 -4
  60. package/dist/persistence/index.d.ts.map +1 -1
  61. package/dist/persistence/index.js +139 -14
  62. package/dist/persistence/index.js.map +1 -1
  63. package/dist/persistence/json-fallback.d.ts +52 -0
  64. package/dist/persistence/json-fallback.d.ts.map +1 -0
  65. package/dist/persistence/json-fallback.js +283 -0
  66. package/dist/persistence/json-fallback.js.map +1 -0
  67. package/dist/sbom/provenance.test.js +2 -2
  68. package/dist/sbom/provenance.test.js.map +1 -1
  69. package/dist/sbom/signing.d.ts.map +1 -1
  70. package/dist/sbom/signing.js +5 -3
  71. package/dist/sbom/signing.js.map +1 -1
  72. package/dist/scanners/ai-code/index.d.ts.map +1 -1
  73. package/dist/scanners/ai-code/index.js +90 -2
  74. package/dist/scanners/ai-code/index.js.map +1 -1
  75. package/dist/scanners/ai-code/types.d.ts +12 -0
  76. package/dist/scanners/ai-code/types.d.ts.map +1 -1
  77. package/dist/scanners/eslint.d.ts.map +1 -1
  78. package/dist/scanners/eslint.js +45 -3
  79. package/dist/scanners/eslint.js.map +1 -1
  80. package/dist/scanners/scale/bottleneck-detector.d.ts +13 -2
  81. package/dist/scanners/scale/bottleneck-detector.d.ts.map +1 -1
  82. package/dist/scanners/scale/bottleneck-detector.js +199 -72
  83. package/dist/scanners/scale/bottleneck-detector.js.map +1 -1
  84. package/dist/scanners/types.d.ts +18 -1
  85. package/dist/scanners/types.d.ts.map +1 -1
  86. package/dist/scanners/types.js.map +1 -1
  87. package/dist/scanners/typescript.d.ts.map +1 -1
  88. package/dist/scanners/typescript.js +36 -4
  89. package/dist/scanners/typescript.js.map +1 -1
  90. package/package.json +1 -1
@@ -0,0 +1,451 @@
1
+ /**
2
+ * Antagonist Attack Narrative Synthesizer
3
+ *
4
+ * Synthesizes individual findings into attack narratives by:
5
+ * 1. Building attack graphs from findings and chains
6
+ * 2. Finding complete attack paths
7
+ * 3. Mapping to MITRE ATT&CK kill chain
8
+ * 4. Generating human-readable narratives
9
+ *
10
+ * @module agents/antagonist/synthesizer
11
+ */
12
+ import Anthropic from "@anthropic-ai/sdk";
13
+ import { SYNTHESIS_SYSTEM_PROMPT, buildSynthesisPrompt, } from "./prompts.js";
14
+ import { logger } from "../../logger.js";
15
+ /**
16
+ * Maps finding categories to kill chain phases
17
+ */
18
+ const CATEGORY_TO_PHASE = {
19
+ "sensitive-disclosure": "reconnaissance",
20
+ "path-traversal": "discovery",
21
+ "sql-injection": "initial-access",
22
+ "command-injection": "execution",
23
+ "code-injection": "execution",
24
+ xss: "initial-access",
25
+ "auth-bypass": "initial-access",
26
+ "broken-access-control": "privilege-escalation",
27
+ "session-management": "credential-access",
28
+ "hardcoded-secret": "credential-access",
29
+ ssrf: "lateral-movement",
30
+ "exfil-path": "exfiltration",
31
+ "prompt-injection": "initial-access",
32
+ "excessive-agency": "execution",
33
+ };
34
+ /**
35
+ * Maps severity to difficulty estimation
36
+ */
37
+ const SEVERITY_TO_DIFFICULTY = {
38
+ critical: "trivial",
39
+ high: "easy",
40
+ medium: "moderate",
41
+ low: "hard",
42
+ info: "expert",
43
+ };
44
+ /**
45
+ * Build attack graph from findings and exploit chains
46
+ */
47
+ function buildAttackGraph(findings, chains, paths) {
48
+ const graph = new Map();
49
+ for (const finding of findings) {
50
+ const phase = CATEGORY_TO_PHASE[finding.category] || "execution";
51
+ graph.set(finding.id, {
52
+ findingId: finding.id,
53
+ finding,
54
+ phase,
55
+ inEdges: [],
56
+ outEdges: [],
57
+ });
58
+ }
59
+ for (const chain of chains) {
60
+ for (let i = 0; i < chain.steps.length - 1; i++) {
61
+ const source = chain.steps[i].findingId;
62
+ const target = chain.steps[i + 1].findingId;
63
+ const sourceNode = graph.get(source);
64
+ const targetNode = graph.get(target);
65
+ if (sourceNode && targetNode) {
66
+ if (!sourceNode.outEdges.includes(target)) {
67
+ sourceNode.outEdges.push(target);
68
+ }
69
+ if (!targetNode.inEdges.includes(source)) {
70
+ targetNode.inEdges.push(source);
71
+ }
72
+ }
73
+ }
74
+ }
75
+ return graph;
76
+ }
77
+ /**
78
+ * Find entry points (nodes with no incoming edges and high severity)
79
+ */
80
+ function findEntryPoints(graph) {
81
+ const entries = [];
82
+ for (const node of graph.values()) {
83
+ if (node.inEdges.length === 0 &&
84
+ ["critical", "high"].includes(node.finding.severity)) {
85
+ entries.push(node);
86
+ }
87
+ }
88
+ if (entries.length === 0) {
89
+ for (const node of graph.values()) {
90
+ if (node.inEdges.length === 0) {
91
+ entries.push(node);
92
+ }
93
+ }
94
+ }
95
+ return entries.slice(0, 5);
96
+ }
97
+ /**
98
+ * Find paths from entry point to high-value targets
99
+ */
100
+ function findAttackPaths(graph, entryId, maxDepth = 5) {
101
+ const paths = [];
102
+ const visited = new Set();
103
+ function dfs(currentId, currentPath, depth) {
104
+ if (depth > maxDepth)
105
+ return;
106
+ if (visited.has(currentId))
107
+ return;
108
+ visited.add(currentId);
109
+ currentPath.push(currentId);
110
+ const node = graph.get(currentId);
111
+ if (!node) {
112
+ visited.delete(currentId);
113
+ currentPath.pop();
114
+ return;
115
+ }
116
+ if (node.outEdges.length === 0 && currentPath.length > 1) {
117
+ paths.push([...currentPath]);
118
+ }
119
+ for (const nextId of node.outEdges) {
120
+ dfs(nextId, currentPath, depth + 1);
121
+ }
122
+ visited.delete(currentId);
123
+ currentPath.pop();
124
+ }
125
+ dfs(entryId, [], 0);
126
+ return paths;
127
+ }
128
+ /**
129
+ * Calculate overall difficulty from a path
130
+ */
131
+ function calculatePathDifficulty(findings, path) {
132
+ const difficulties = path.map((id) => {
133
+ const finding = findings.find((f) => f.id === id);
134
+ return finding ? SEVERITY_TO_DIFFICULTY[finding.severity] : "moderate";
135
+ });
136
+ const order = ["trivial", "easy", "moderate", "hard", "expert"];
137
+ const maxIndex = Math.max(...difficulties.map((d) => order.indexOf(d)));
138
+ return order[Math.min(maxIndex + 1, order.length - 1)];
139
+ }
140
+ /**
141
+ * Calculate likelihood based on severity and path length
142
+ */
143
+ function calculateLikelihood(findings, path) {
144
+ const severities = path.map((id) => {
145
+ const finding = findings.find((f) => f.id === id);
146
+ return finding?.severity || "low";
147
+ });
148
+ const hasCritical = severities.includes("critical");
149
+ const hasHigh = severities.includes("high");
150
+ const shortPath = path.length <= 2;
151
+ if (hasCritical && shortPath)
152
+ return "high";
153
+ if (hasHigh || (hasCritical && !shortPath))
154
+ return "medium";
155
+ return "low";
156
+ }
157
+ /**
158
+ * Generate attack steps from path
159
+ */
160
+ function generateAttackSteps(graph, path) {
161
+ return path.map((id) => {
162
+ const node = graph.get(id);
163
+ if (!node) {
164
+ return {
165
+ phase: "execution",
166
+ findingId: id,
167
+ description: "Unknown step",
168
+ confidence: 50,
169
+ };
170
+ }
171
+ return {
172
+ phase: node.phase,
173
+ findingId: id,
174
+ description: node.finding.description,
175
+ technique: getMitreTechnique(node.finding.category),
176
+ confidence: node.finding.confidence,
177
+ };
178
+ });
179
+ }
180
+ /**
181
+ * Get MITRE technique ID from category
182
+ */
183
+ function getMitreTechnique(category) {
184
+ const mapping = {
185
+ "sql-injection": "T1190",
186
+ "command-injection": "T1059",
187
+ xss: "T1059.007",
188
+ "auth-bypass": "T1078",
189
+ ssrf: "T1090",
190
+ "path-traversal": "T1083",
191
+ "hardcoded-secret": "T1552",
192
+ "prompt-injection": "T1059",
193
+ };
194
+ return mapping[category];
195
+ }
196
+ /**
197
+ * Generate narrative text from path
198
+ */
199
+ function generateNarrativeText(graph, path, targetAsset) {
200
+ const steps = [];
201
+ for (let i = 0; i < path.length; i++) {
202
+ const node = graph.get(path[i]);
203
+ if (!node)
204
+ continue;
205
+ const prefix = i === 0 ? "First, an attacker" : i === path.length - 1 ? "Finally, the attacker" : "Then, the attacker";
206
+ const action = describeAction(node.finding.category);
207
+ steps.push(`${prefix} ${action} (${node.finding.file || "unknown location"}:${node.finding.line || "?"}).`);
208
+ }
209
+ steps.push(`This chain allows the attacker to compromise ${targetAsset}.`);
210
+ return steps.join(" ");
211
+ }
212
+ /**
213
+ * Describe action for category
214
+ */
215
+ function describeAction(category) {
216
+ const actions = {
217
+ "sql-injection": "exploits a SQL injection vulnerability to access the database",
218
+ "command-injection": "injects commands to execute arbitrary code",
219
+ xss: "injects malicious scripts via cross-site scripting",
220
+ "auth-bypass": "bypasses authentication controls",
221
+ "broken-access-control": "escalates privileges via broken access control",
222
+ ssrf: "exploits SSRF to access internal services",
223
+ "path-traversal": "reads arbitrary files via path traversal",
224
+ "hardcoded-secret": "extracts hardcoded credentials",
225
+ "prompt-injection": "manipulates LLM behavior via prompt injection",
226
+ "exfil-path": "exfiltrates data through the agent tool chain",
227
+ };
228
+ return actions[category] || `exploits ${category} vulnerability`;
229
+ }
230
+ /**
231
+ * Synthesize attack narratives without LLM
232
+ */
233
+ export function synthesizeNarrativesDeterministic(findings, chains, paths, config) {
234
+ const graph = buildAttackGraph(findings, chains, paths);
235
+ const entryPoints = findEntryPoints(graph);
236
+ const narratives = [];
237
+ for (const entry of entryPoints) {
238
+ const attackPaths = findAttackPaths(graph, entry.findingId);
239
+ for (const path of attackPaths.slice(0, 2)) {
240
+ if (path.length < 1)
241
+ continue;
242
+ const findingIds = path;
243
+ const difficulty = calculatePathDifficulty(findings, path);
244
+ const likelihood = calculateLikelihood(findings, path);
245
+ const steps = generateAttackSteps(graph, path);
246
+ const targetAsset = determineTargetAsset(graph, path);
247
+ const narrative = generateNarrativeText(graph, path, targetAsset);
248
+ const techniques = steps
249
+ .map((s) => s.technique)
250
+ .filter((t) => !!t);
251
+ const confidence = Math.round(steps.reduce((sum, s) => sum + s.confidence, 0) / steps.length);
252
+ if (confidence < config.minConfidence)
253
+ continue;
254
+ narratives.push({
255
+ id: `nar-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`,
256
+ name: generateNarrativeName(graph, path),
257
+ phases: steps,
258
+ entryPoint: entry.findingId,
259
+ targetAsset,
260
+ impact: determineImpact(graph, path),
261
+ difficulty,
262
+ likelihood,
263
+ findingIds,
264
+ mitreTechniques: [...new Set(techniques)],
265
+ narrative,
266
+ recommendations: [],
267
+ confidence,
268
+ });
269
+ }
270
+ }
271
+ for (const chain of chains) {
272
+ const findingIds = chain.steps.map((s) => s.findingId);
273
+ const steps = chain.steps.map((s) => ({
274
+ phase: CATEGORY_TO_PHASE[s.finding.category] || "execution",
275
+ findingId: s.findingId,
276
+ description: s.finding.description,
277
+ technique: getMitreTechnique(s.finding.category),
278
+ confidence: s.finding.confidence,
279
+ }));
280
+ const confidence = Math.round(steps.reduce((sum, s) => sum + s.confidence, 0) / steps.length);
281
+ if (confidence < config.minConfidence)
282
+ continue;
283
+ narratives.push({
284
+ id: `nar-chain-${chain.id}`,
285
+ name: chain.name,
286
+ phases: steps,
287
+ entryPoint: chain.steps[0]?.findingId || "",
288
+ targetAsset: chain.impact,
289
+ impact: chain.impact,
290
+ difficulty: chain.difficulty,
291
+ likelihood: chain.totalSeverity === "critical" ? "high" : "medium",
292
+ findingIds,
293
+ mitreTechniques: chain.mitreAttackIds,
294
+ narrative: chain.attackScenario,
295
+ recommendations: [],
296
+ confidence,
297
+ });
298
+ }
299
+ const uniqueNarratives = deduplicateNarratives(narratives);
300
+ return uniqueNarratives
301
+ .sort((a, b) => {
302
+ const likelihoodOrder = { high: 0, medium: 1, low: 2 };
303
+ return likelihoodOrder[a.likelihood] - likelihoodOrder[b.likelihood];
304
+ })
305
+ .slice(0, config.maxNarratives);
306
+ }
307
+ /**
308
+ * Determine target asset from path
309
+ */
310
+ function determineTargetAsset(graph, path) {
311
+ const lastNode = graph.get(path[path.length - 1]);
312
+ if (!lastNode)
313
+ return "system";
314
+ const category = lastNode.finding.category;
315
+ const targets = {
316
+ "sql-injection": "database",
317
+ "command-injection": "server",
318
+ "auth-bypass": "user accounts",
319
+ "hardcoded-secret": "credentials",
320
+ "exfil-path": "sensitive data",
321
+ "prompt-injection": "AI system",
322
+ };
323
+ return targets[category] || "application";
324
+ }
325
+ /**
326
+ * Determine impact from path
327
+ */
328
+ function determineImpact(graph, path) {
329
+ const severities = path.map((id) => graph.get(id)?.finding.severity);
330
+ if (severities.includes("critical"))
331
+ return "Complete system compromise";
332
+ if (severities.includes("high"))
333
+ return "Significant data breach";
334
+ if (severities.includes("medium"))
335
+ return "Partial data exposure";
336
+ return "Limited impact";
337
+ }
338
+ /**
339
+ * Generate narrative name from path
340
+ */
341
+ function generateNarrativeName(graph, path) {
342
+ const firstNode = graph.get(path[0]);
343
+ const lastNode = graph.get(path[path.length - 1]);
344
+ const entryType = firstNode?.finding.category || "vulnerability";
345
+ const targetType = lastNode?.finding.category || "compromise";
346
+ const names = {
347
+ "sql-injection": "SQL Injection",
348
+ xss: "XSS",
349
+ "auth-bypass": "Auth Bypass",
350
+ "command-injection": "RCE",
351
+ ssrf: "SSRF",
352
+ "prompt-injection": "Prompt Injection",
353
+ "exfil-path": "Data Exfil",
354
+ "hardcoded-secret": "Credential Theft",
355
+ };
356
+ const entry = names[entryType] || entryType;
357
+ const target = names[targetType] || targetType;
358
+ return `${entry} to ${target} Chain`;
359
+ }
360
+ /**
361
+ * Deduplicate narratives by finding overlap
362
+ */
363
+ function deduplicateNarratives(narratives) {
364
+ const unique = [];
365
+ for (const narrative of narratives) {
366
+ const isDuplicate = unique.some((existing) => {
367
+ const overlap = narrative.findingIds.filter((id) => existing.findingIds.includes(id));
368
+ return overlap.length > narrative.findingIds.length * 0.7;
369
+ });
370
+ if (!isDuplicate) {
371
+ unique.push(narrative);
372
+ }
373
+ }
374
+ return unique;
375
+ }
376
+ /**
377
+ * Synthesize attack narratives using LLM
378
+ */
379
+ export async function synthesizeNarrativesLlm(findings, chains, paths, config) {
380
+ const client = new Anthropic();
381
+ const findingsStr = findings
382
+ .map((f) => `- ${f.id}: [${f.severity}] ${f.category} at ${f.file}:${f.line} - ${f.description}`)
383
+ .join("\n");
384
+ const chainsStr = chains
385
+ .map((c) => `- ${c.name}: ${c.steps.map((s) => s.findingId).join(" → ")} (${c.totalSeverity})`)
386
+ .join("\n");
387
+ const pathsStr = paths
388
+ .map((p) => `- ${p.source} → ${p.sink}: ${p.description}`)
389
+ .join("\n");
390
+ const prompt = buildSynthesisPrompt(findingsStr, chainsStr, pathsStr);
391
+ try {
392
+ const response = await client.messages.create({
393
+ model: config.llmModel || "claude-sonnet-4-20250514",
394
+ max_tokens: 4096,
395
+ system: SYNTHESIS_SYSTEM_PROMPT,
396
+ messages: [{ role: "user", content: prompt }],
397
+ });
398
+ const content = response.content[0];
399
+ if (content.type !== "text") {
400
+ throw new Error("Unexpected response type");
401
+ }
402
+ const jsonMatch = content.text.match(/\{[\s\S]*\}/);
403
+ if (!jsonMatch) {
404
+ throw new Error("No JSON in response");
405
+ }
406
+ const parsed = JSON.parse(jsonMatch[0]);
407
+ const narratives = parsed.narratives.map((n, i) => ({
408
+ id: `nar-llm-${Date.now().toString(36)}-${i}`,
409
+ name: n.name,
410
+ phases: n.phases.map((p) => ({ ...p, confidence: n.confidence })),
411
+ entryPoint: n.entryPoint,
412
+ targetAsset: n.targetAsset,
413
+ impact: n.impact,
414
+ difficulty: n.difficulty,
415
+ likelihood: n.likelihood,
416
+ findingIds: n.findingIds,
417
+ mitreTechniques: n.mitreTechniques,
418
+ narrative: n.narrative,
419
+ recommendations: [],
420
+ confidence: n.confidence,
421
+ }));
422
+ const tokensUsed = (response.usage?.input_tokens || 0) +
423
+ (response.usage?.output_tokens || 0);
424
+ return { narratives, tokensUsed };
425
+ }
426
+ catch (error) {
427
+ logger.warn("antagonist.llm_synthesis_failed", {
428
+ error: error instanceof Error ? error.message : String(error),
429
+ });
430
+ return { narratives: [], tokensUsed: 0 };
431
+ }
432
+ }
433
+ /**
434
+ * Main synthesis function - combines deterministic and LLM approaches
435
+ */
436
+ export async function synthesizeNarratives(findings, chains, paths, config) {
437
+ const deterministicNarratives = synthesizeNarrativesDeterministic(findings, chains, paths, config);
438
+ if (!config.useLlm || findings.length < 3) {
439
+ return { narratives: deterministicNarratives, tokensUsed: 0 };
440
+ }
441
+ const { narratives: llmNarratives, tokensUsed } = await synthesizeNarrativesLlm(findings, chains, paths, config);
442
+ const combined = deduplicateNarratives([
443
+ ...llmNarratives,
444
+ ...deterministicNarratives,
445
+ ]);
446
+ return {
447
+ narratives: combined.slice(0, config.maxNarratives),
448
+ tokensUsed,
449
+ };
450
+ }
451
+ //# sourceMappingURL=synthesizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthesizer.js","sourceRoot":"","sources":["../../../src/agents/antagonist/synthesizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Antagonist Agent Types
3
+ *
4
+ * The antagonist agent synthesizes findings into attack narratives
5
+ * and challenges assumptions from other agents.
6
+ *
7
+ * @module agents/antagonist/types
8
+ */
9
+ import type { AgentType, Severity, Finding } from "../../certification/types.js";
10
+ import type { ExploitChain } from "../exploit-chain.js";
11
+ import type { ExfilPath } from "../../scanners/agent/types.js";
12
+ /**
13
+ * MITRE ATT&CK Kill Chain phases
14
+ */
15
+ export type KillChainPhase = "reconnaissance" | "resource-development" | "initial-access" | "execution" | "persistence" | "privilege-escalation" | "defense-evasion" | "credential-access" | "discovery" | "lateral-movement" | "collection" | "command-and-control" | "exfiltration" | "impact";
16
+ /**
17
+ * Difficulty rating for attack paths
18
+ */
19
+ export type Difficulty = "trivial" | "easy" | "moderate" | "hard" | "expert";
20
+ /**
21
+ * Likelihood of attack being attempted
22
+ */
23
+ export type Likelihood = "high" | "medium" | "low";
24
+ /**
25
+ * Challenge types for the internal critic
26
+ */
27
+ export type ChallengeType = "missed_check" | "wrong_assumption" | "false_positive_likely" | "insufficient_evidence" | "wrong_severity" | "missing_context";
28
+ /**
29
+ * A step in the attack narrative mapped to kill chain
30
+ */
31
+ export interface AttackStep {
32
+ phase: KillChainPhase;
33
+ findingId?: string;
34
+ description: string;
35
+ technique?: string;
36
+ confidence: number;
37
+ }
38
+ /**
39
+ * Prioritized remediation recommendation
40
+ */
41
+ export interface PrioritizedRemediation {
42
+ order: number;
43
+ findingId: string;
44
+ reason: string;
45
+ blocksNarratives: string[];
46
+ effort: "low" | "medium" | "high";
47
+ impact: "low" | "medium" | "high";
48
+ }
49
+ /**
50
+ * A complete attack narrative synthesized from findings
51
+ */
52
+ export interface AttackNarrative {
53
+ id: string;
54
+ name: string;
55
+ phases: AttackStep[];
56
+ entryPoint: string;
57
+ targetAsset: string;
58
+ impact: string;
59
+ difficulty: Difficulty;
60
+ likelihood: Likelihood;
61
+ findingIds: string[];
62
+ mitreTechniques: string[];
63
+ narrative: string;
64
+ recommendations: PrioritizedRemediation[];
65
+ confidence: number;
66
+ }
67
+ /**
68
+ * A challenge from the internal critic
69
+ */
70
+ export interface ChallengerAssessment {
71
+ id: string;
72
+ type: ChallengeType;
73
+ targetAgent: AgentType;
74
+ targetFindingId?: string;
75
+ challenge: string;
76
+ evidence: string;
77
+ suggestedAction: string;
78
+ severity: Severity;
79
+ confidence: number;
80
+ }
81
+ /**
82
+ * Gap analysis results
83
+ */
84
+ export interface GapAnalysis {
85
+ untestedAttackVectors: string[];
86
+ missingControls: string[];
87
+ blindSpots: string[];
88
+ recommendations: string[];
89
+ coverageScore: number;
90
+ }
91
+ /**
92
+ * Input to the antagonist agent
93
+ */
94
+ export interface AntagonistInput {
95
+ projectPath: string;
96
+ certificationId: string;
97
+ findings: Finding[];
98
+ exploitChains: ExploitChain[];
99
+ exfilPaths: ExfilPath[];
100
+ agentSummaries: Record<AgentType, {
101
+ completed: boolean;
102
+ findingCount: number;
103
+ }>;
104
+ }
105
+ /**
106
+ * Configuration for antagonist analysis
107
+ */
108
+ export interface AntagonistConfig {
109
+ mode: "synthesis" | "challenger" | "both";
110
+ includePrioritization: boolean;
111
+ maxNarratives: number;
112
+ minConfidence: number;
113
+ challengeThreshold: number;
114
+ useLlm: boolean;
115
+ llmModel?: string;
116
+ }
117
+ /**
118
+ * Default antagonist configuration
119
+ */
120
+ export declare const DEFAULT_ANTAGONIST_CONFIG: AntagonistConfig;
121
+ /**
122
+ * Result from antagonist analysis
123
+ */
124
+ export interface AntagonistResult {
125
+ success: boolean;
126
+ analysisId: string;
127
+ attackNarratives: AttackNarrative[];
128
+ challengerAssessments: ChallengerAssessment[];
129
+ prioritization: PrioritizedRemediation[];
130
+ gapAnalysis: GapAnalysis;
131
+ summary: string;
132
+ duration: number;
133
+ tokensUsed?: number;
134
+ error?: string;
135
+ }
136
+ /**
137
+ * Attack vector categories for gap analysis
138
+ */
139
+ export declare const ATTACK_VECTORS: readonly ["web-application", "api-security", "authentication", "authorization", "injection", "cryptography", "session-management", "input-validation", "output-encoding", "error-handling", "logging-monitoring", "data-protection", "network-security", "supply-chain", "infrastructure", "llm-security", "agent-security"];
140
+ export type AttackVector = (typeof ATTACK_VECTORS)[number];
141
+ /**
142
+ * Maps finding categories to attack vectors
143
+ */
144
+ export declare const CATEGORY_TO_VECTOR: Record<string, AttackVector>;
145
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agents/antagonist/types.ts"],"names":[],"mappings":"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"}