feat(worker): deduplicate static and runtime findings before exploitation

Parse Agentic SAST SARIF into typed observations, enrich and route those observations, and reconcile them with pentest findings before exploitation.

Publish deterministic exploitation queues with stable lineage, exact-path Git commits, retry-safe manifests, named drop reasons, and confined task formation. Reject duplicate producer IDs before commit and adopt either legal provenance shape after a lost acknowledgement.
This commit is contained in:
ajmallesh
2026-08-26 19:37:20 -07:00
parent 980607c602
commit c33132b0ab
52 changed files with 7914 additions and 84 deletions
+5 -4
View File
@@ -8,7 +8,7 @@
* Deterministic exploit collector → markdown renderer.
*
* Single entry point renderExploitDeliverable(vulnClass, state, idToType)
* covers all 5 exploitation agents (injection, xss, auth, ssrf, authz). The
* covers all exploitation agents. The
* per-class deltas are limited to title and ID prefix; every section, label,
* and sort rule is class-agnostic. Section headers and bolded field labels
* mirror the prescribed-Markdown skeleton from the existing exploit-*.txt
@@ -30,18 +30,19 @@
* as `- {ID} ({vulnerability_type})`. Omitted when every queue ID was emitted.
*/
import type { AddExploitInput, VulnClass } from '../collectors/exploit-collector.js';
import type { AddExploitInput, ExploitClass } from '../collectors/exploit-collector.js';
// ============================================================================
// PER-CLASS CONSTANTS
// ============================================================================
const TITLES: Record<VulnClass, string> = {
const TITLES: Record<ExploitClass, string> = {
injection: 'Injection Exploitation Evidence',
xss: 'Cross-Site Scripting (XSS) Exploitation Evidence',
auth: 'Authentication Exploitation Evidence',
ssrf: 'SSRF Exploitation Evidence',
authz: 'Authorization Exploitation Evidence',
miscellaneous: 'Miscellaneous Exploitation Evidence',
};
// ============================================================================
@@ -203,7 +204,7 @@ function renderUnprocessedSection(missingIds: readonly string[], idToType: Reado
// ============================================================================
export function renderExploitDeliverable(
vulnClass: VulnClass,
vulnClass: ExploitClass,
state: readonly AddExploitInput[],
idToType: ReadonlyMap<string, string>,
): string {