agentic-qe 2.5.6 → 2.5.7

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 (134) hide show
  1. package/.claude/agents/n8n/n8n-base-agent.md +376 -0
  2. package/.claude/agents/n8n/n8n-bdd-scenario-tester.md +613 -0
  3. package/.claude/agents/n8n/n8n-chaos-tester.md +654 -0
  4. package/.claude/agents/n8n/n8n-ci-orchestrator.md +850 -0
  5. package/.claude/agents/n8n/n8n-compliance-validator.md +685 -0
  6. package/.claude/agents/n8n/n8n-expression-validator.md +560 -0
  7. package/.claude/agents/n8n/n8n-integration-test.md +602 -0
  8. package/.claude/agents/n8n/n8n-monitoring-validator.md +589 -0
  9. package/.claude/agents/n8n/n8n-node-validator.md +455 -0
  10. package/.claude/agents/n8n/n8n-performance-tester.md +630 -0
  11. package/.claude/agents/n8n/n8n-security-auditor.md +786 -0
  12. package/.claude/agents/n8n/n8n-trigger-test.md +500 -0
  13. package/.claude/agents/n8n/n8n-unit-tester.md +633 -0
  14. package/.claude/agents/n8n/n8n-version-comparator.md +567 -0
  15. package/.claude/agents/n8n/n8n-workflow-executor.md +392 -0
  16. package/.claude/skills/n8n-expression-testing/SKILL.md +434 -0
  17. package/.claude/skills/n8n-integration-testing-patterns/SKILL.md +540 -0
  18. package/.claude/skills/n8n-security-testing/SKILL.md +599 -0
  19. package/.claude/skills/n8n-trigger-testing-strategies/SKILL.md +541 -0
  20. package/.claude/skills/n8n-workflow-testing-fundamentals/SKILL.md +447 -0
  21. package/CHANGELOG.md +41 -0
  22. package/README.md +7 -4
  23. package/dist/agents/n8n/N8nAPIClient.d.ts +121 -0
  24. package/dist/agents/n8n/N8nAPIClient.d.ts.map +1 -0
  25. package/dist/agents/n8n/N8nAPIClient.js +367 -0
  26. package/dist/agents/n8n/N8nAPIClient.js.map +1 -0
  27. package/dist/agents/n8n/N8nAuditPersistence.d.ts +120 -0
  28. package/dist/agents/n8n/N8nAuditPersistence.d.ts.map +1 -0
  29. package/dist/agents/n8n/N8nAuditPersistence.js +473 -0
  30. package/dist/agents/n8n/N8nAuditPersistence.js.map +1 -0
  31. package/dist/agents/n8n/N8nBDDScenarioTesterAgent.d.ts +159 -0
  32. package/dist/agents/n8n/N8nBDDScenarioTesterAgent.d.ts.map +1 -0
  33. package/dist/agents/n8n/N8nBDDScenarioTesterAgent.js +697 -0
  34. package/dist/agents/n8n/N8nBDDScenarioTesterAgent.js.map +1 -0
  35. package/dist/agents/n8n/N8nBaseAgent.d.ts +126 -0
  36. package/dist/agents/n8n/N8nBaseAgent.d.ts.map +1 -0
  37. package/dist/agents/n8n/N8nBaseAgent.js +446 -0
  38. package/dist/agents/n8n/N8nBaseAgent.js.map +1 -0
  39. package/dist/agents/n8n/N8nCIOrchestratorAgent.d.ts +164 -0
  40. package/dist/agents/n8n/N8nCIOrchestratorAgent.d.ts.map +1 -0
  41. package/dist/agents/n8n/N8nCIOrchestratorAgent.js +610 -0
  42. package/dist/agents/n8n/N8nCIOrchestratorAgent.js.map +1 -0
  43. package/dist/agents/n8n/N8nChaosTesterAgent.d.ts +205 -0
  44. package/dist/agents/n8n/N8nChaosTesterAgent.d.ts.map +1 -0
  45. package/dist/agents/n8n/N8nChaosTesterAgent.js +729 -0
  46. package/dist/agents/n8n/N8nChaosTesterAgent.js.map +1 -0
  47. package/dist/agents/n8n/N8nComplianceValidatorAgent.d.ts +228 -0
  48. package/dist/agents/n8n/N8nComplianceValidatorAgent.d.ts.map +1 -0
  49. package/dist/agents/n8n/N8nComplianceValidatorAgent.js +986 -0
  50. package/dist/agents/n8n/N8nComplianceValidatorAgent.js.map +1 -0
  51. package/dist/agents/n8n/N8nContractTesterAgent.d.ts +213 -0
  52. package/dist/agents/n8n/N8nContractTesterAgent.d.ts.map +1 -0
  53. package/dist/agents/n8n/N8nContractTesterAgent.js +989 -0
  54. package/dist/agents/n8n/N8nContractTesterAgent.js.map +1 -0
  55. package/dist/agents/n8n/N8nExpressionValidatorAgent.d.ts +99 -0
  56. package/dist/agents/n8n/N8nExpressionValidatorAgent.d.ts.map +1 -0
  57. package/dist/agents/n8n/N8nExpressionValidatorAgent.js +632 -0
  58. package/dist/agents/n8n/N8nExpressionValidatorAgent.js.map +1 -0
  59. package/dist/agents/n8n/N8nFailureModeTesterAgent.d.ts +238 -0
  60. package/dist/agents/n8n/N8nFailureModeTesterAgent.d.ts.map +1 -0
  61. package/dist/agents/n8n/N8nFailureModeTesterAgent.js +956 -0
  62. package/dist/agents/n8n/N8nFailureModeTesterAgent.js.map +1 -0
  63. package/dist/agents/n8n/N8nIdempotencyTesterAgent.d.ts +242 -0
  64. package/dist/agents/n8n/N8nIdempotencyTesterAgent.d.ts.map +1 -0
  65. package/dist/agents/n8n/N8nIdempotencyTesterAgent.js +992 -0
  66. package/dist/agents/n8n/N8nIdempotencyTesterAgent.js.map +1 -0
  67. package/dist/agents/n8n/N8nIntegrationTestAgent.d.ts +104 -0
  68. package/dist/agents/n8n/N8nIntegrationTestAgent.d.ts.map +1 -0
  69. package/dist/agents/n8n/N8nIntegrationTestAgent.js +653 -0
  70. package/dist/agents/n8n/N8nIntegrationTestAgent.js.map +1 -0
  71. package/dist/agents/n8n/N8nMonitoringValidatorAgent.d.ts +210 -0
  72. package/dist/agents/n8n/N8nMonitoringValidatorAgent.d.ts.map +1 -0
  73. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js +669 -0
  74. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js.map +1 -0
  75. package/dist/agents/n8n/N8nNodeValidatorAgent.d.ts +142 -0
  76. package/dist/agents/n8n/N8nNodeValidatorAgent.d.ts.map +1 -0
  77. package/dist/agents/n8n/N8nNodeValidatorAgent.js +1090 -0
  78. package/dist/agents/n8n/N8nNodeValidatorAgent.js.map +1 -0
  79. package/dist/agents/n8n/N8nPerformanceTesterAgent.d.ts +198 -0
  80. package/dist/agents/n8n/N8nPerformanceTesterAgent.d.ts.map +1 -0
  81. package/dist/agents/n8n/N8nPerformanceTesterAgent.js +653 -0
  82. package/dist/agents/n8n/N8nPerformanceTesterAgent.js.map +1 -0
  83. package/dist/agents/n8n/N8nReplayabilityTesterAgent.d.ts +245 -0
  84. package/dist/agents/n8n/N8nReplayabilityTesterAgent.d.ts.map +1 -0
  85. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js +952 -0
  86. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js.map +1 -0
  87. package/dist/agents/n8n/N8nSecretsHygieneAuditorAgent.d.ts +325 -0
  88. package/dist/agents/n8n/N8nSecretsHygieneAuditorAgent.d.ts.map +1 -0
  89. package/dist/agents/n8n/N8nSecretsHygieneAuditorAgent.js +1187 -0
  90. package/dist/agents/n8n/N8nSecretsHygieneAuditorAgent.js.map +1 -0
  91. package/dist/agents/n8n/N8nSecurityAuditorAgent.d.ts +91 -0
  92. package/dist/agents/n8n/N8nSecurityAuditorAgent.d.ts.map +1 -0
  93. package/dist/agents/n8n/N8nSecurityAuditorAgent.js +825 -0
  94. package/dist/agents/n8n/N8nSecurityAuditorAgent.js.map +1 -0
  95. package/dist/agents/n8n/N8nTestHarness.d.ts +131 -0
  96. package/dist/agents/n8n/N8nTestHarness.d.ts.map +1 -0
  97. package/dist/agents/n8n/N8nTestHarness.js +456 -0
  98. package/dist/agents/n8n/N8nTestHarness.js.map +1 -0
  99. package/dist/agents/n8n/N8nTriggerTestAgent.d.ts +119 -0
  100. package/dist/agents/n8n/N8nTriggerTestAgent.d.ts.map +1 -0
  101. package/dist/agents/n8n/N8nTriggerTestAgent.js +652 -0
  102. package/dist/agents/n8n/N8nTriggerTestAgent.js.map +1 -0
  103. package/dist/agents/n8n/N8nUnitTesterAgent.d.ts +130 -0
  104. package/dist/agents/n8n/N8nUnitTesterAgent.d.ts.map +1 -0
  105. package/dist/agents/n8n/N8nUnitTesterAgent.js +522 -0
  106. package/dist/agents/n8n/N8nUnitTesterAgent.js.map +1 -0
  107. package/dist/agents/n8n/N8nVersionComparatorAgent.d.ts +201 -0
  108. package/dist/agents/n8n/N8nVersionComparatorAgent.d.ts.map +1 -0
  109. package/dist/agents/n8n/N8nVersionComparatorAgent.js +645 -0
  110. package/dist/agents/n8n/N8nVersionComparatorAgent.js.map +1 -0
  111. package/dist/agents/n8n/N8nWorkflowExecutorAgent.d.ts +120 -0
  112. package/dist/agents/n8n/N8nWorkflowExecutorAgent.d.ts.map +1 -0
  113. package/dist/agents/n8n/N8nWorkflowExecutorAgent.js +347 -0
  114. package/dist/agents/n8n/N8nWorkflowExecutorAgent.js.map +1 -0
  115. package/dist/agents/n8n/index.d.ts +119 -0
  116. package/dist/agents/n8n/index.d.ts.map +1 -0
  117. package/dist/agents/n8n/index.js +298 -0
  118. package/dist/agents/n8n/index.js.map +1 -0
  119. package/dist/agents/n8n/types.d.ts +486 -0
  120. package/dist/agents/n8n/types.d.ts.map +1 -0
  121. package/dist/agents/n8n/types.js +8 -0
  122. package/dist/agents/n8n/types.js.map +1 -0
  123. package/dist/cli/init/agents.d.ts.map +1 -1
  124. package/dist/cli/init/agents.js +29 -0
  125. package/dist/cli/init/agents.js.map +1 -1
  126. package/dist/cli/init/skills.d.ts.map +1 -1
  127. package/dist/cli/init/skills.js +7 -1
  128. package/dist/cli/init/skills.js.map +1 -1
  129. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  130. package/dist/mcp/server-instructions.d.ts +1 -1
  131. package/dist/mcp/server-instructions.js +1 -1
  132. package/docs/reference/agents.md +91 -2
  133. package/docs/reference/skills.md +97 -2
  134. package/package.json +2 -2
@@ -0,0 +1,473 @@
1
+ "use strict";
2
+ /**
3
+ * N8n Audit Persistence Layer
4
+ *
5
+ * Provides persistent storage and reporting for n8n workflow audit results:
6
+ * - Store security audit results to SQLite/PostgreSQL
7
+ * - Store node validation results
8
+ * - Generate audit reports in multiple formats (JSON, HTML, PDF)
9
+ * - Historical trend analysis
10
+ * - Compliance tracking over time
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.N8nAuditPersistence = void 0;
14
+ exports.getDefaultPersistence = getDefaultPersistence;
15
+ exports.setDefaultPersistence = setDefaultPersistence;
16
+ // ============================================================================
17
+ // Audit Persistence Class
18
+ // ============================================================================
19
+ class N8nAuditPersistence {
20
+ constructor(config = { type: 'memory' }) {
21
+ this.records = new Map();
22
+ this.initialized = false;
23
+ this.config = {
24
+ type: config.type,
25
+ connectionString: config.connectionString,
26
+ tableName: config.tableName || 'n8n_audit_results',
27
+ };
28
+ }
29
+ /**
30
+ * Initialize the persistence layer
31
+ */
32
+ async initialize() {
33
+ if (this.initialized)
34
+ return;
35
+ if (this.config.type === 'memory') {
36
+ // In-memory storage - already initialized
37
+ this.initialized = true;
38
+ return;
39
+ }
40
+ // For SQLite/Postgres, create tables if needed
41
+ if (this.config.type === 'sqlite' || this.config.type === 'postgres') {
42
+ await this.createTables();
43
+ }
44
+ this.initialized = true;
45
+ }
46
+ /**
47
+ * Store security audit result
48
+ */
49
+ async storeSecurityAudit(result, metadata) {
50
+ await this.ensureInitialized();
51
+ const record = {
52
+ id: this.generateId(),
53
+ workflowId: result.workflowId,
54
+ workflowName: result.workflowName,
55
+ auditType: 'security',
56
+ timestamp: new Date(),
57
+ result,
58
+ metadata: metadata || { agentVersion: '1.0.0' },
59
+ };
60
+ await this.saveRecord(record);
61
+ return record.id;
62
+ }
63
+ /**
64
+ * Store node validation result
65
+ */
66
+ async storeValidationResult(result, workflowName, metadata) {
67
+ await this.ensureInitialized();
68
+ const record = {
69
+ id: this.generateId(),
70
+ workflowId: result.workflowId,
71
+ workflowName,
72
+ auditType: 'validation',
73
+ timestamp: new Date(),
74
+ result,
75
+ metadata: metadata || { agentVersion: '1.0.0' },
76
+ };
77
+ await this.saveRecord(record);
78
+ return record.id;
79
+ }
80
+ /**
81
+ * Get audit history for a workflow
82
+ */
83
+ async getAuditHistory(workflowId, options) {
84
+ await this.ensureInitialized();
85
+ let records = this.records.get(workflowId) || [];
86
+ if (options?.auditType) {
87
+ records = records.filter(r => r.auditType === options.auditType);
88
+ }
89
+ // Sort by timestamp descending
90
+ records.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
91
+ if (options?.offset) {
92
+ records = records.slice(options.offset);
93
+ }
94
+ if (options?.limit) {
95
+ records = records.slice(0, options.limit);
96
+ }
97
+ return records;
98
+ }
99
+ /**
100
+ * Get latest audit for a workflow
101
+ */
102
+ async getLatestAudit(workflowId, auditType) {
103
+ const history = await this.getAuditHistory(workflowId, { auditType, limit: 1 });
104
+ return history[0] || null;
105
+ }
106
+ /**
107
+ * Get audit summary for a workflow
108
+ */
109
+ async getAuditSummary(workflowId) {
110
+ await this.ensureInitialized();
111
+ const records = this.records.get(workflowId) || [];
112
+ if (records.length === 0)
113
+ return null;
114
+ const securityRecords = records
115
+ .filter(r => r.auditType === 'security')
116
+ .sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
117
+ if (securityRecords.length === 0) {
118
+ return {
119
+ workflowId,
120
+ workflowName: records[0].workflowName,
121
+ totalAudits: records.length,
122
+ lastAuditDate: records[0].timestamp,
123
+ averageRiskScore: 0,
124
+ riskTrend: 'stable',
125
+ criticalFindings: 0,
126
+ highFindings: 0,
127
+ owaspCompliance: 0,
128
+ };
129
+ }
130
+ // Calculate metrics from security audits
131
+ const riskScores = securityRecords.map(r => r.result.riskScore);
132
+ const avgRiskScore = riskScores.reduce((a, b) => a + b, 0) / riskScores.length;
133
+ // Determine risk trend
134
+ let riskTrend = 'stable';
135
+ if (securityRecords.length >= 3) {
136
+ const recent = riskScores.slice(0, 3);
137
+ const older = riskScores.slice(3, 6);
138
+ if (older.length > 0) {
139
+ const recentAvg = recent.reduce((a, b) => a + b, 0) / recent.length;
140
+ const olderAvg = older.reduce((a, b) => a + b, 0) / older.length;
141
+ if (recentAvg - olderAvg > 5)
142
+ riskTrend = 'improving';
143
+ else if (olderAvg - recentAvg > 5)
144
+ riskTrend = 'degrading';
145
+ }
146
+ }
147
+ const latestResult = securityRecords[0].result;
148
+ return {
149
+ workflowId,
150
+ workflowName: records[0].workflowName,
151
+ totalAudits: records.length,
152
+ lastAuditDate: securityRecords[0].timestamp,
153
+ averageRiskScore: Math.round(avgRiskScore),
154
+ riskTrend,
155
+ criticalFindings: latestResult.summary.critical,
156
+ highFindings: latestResult.summary.high,
157
+ owaspCompliance: latestResult.owaspCompliance.score,
158
+ };
159
+ }
160
+ /**
161
+ * Get risk trend data for visualization
162
+ */
163
+ async getTrendData(workflowId, days = 30) {
164
+ await this.ensureInitialized();
165
+ const records = this.records.get(workflowId) || [];
166
+ const cutoff = new Date();
167
+ cutoff.setDate(cutoff.getDate() - days);
168
+ const securityRecords = records
169
+ .filter(r => r.auditType === 'security' && r.timestamp >= cutoff)
170
+ .sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
171
+ return securityRecords.map(r => {
172
+ const result = r.result;
173
+ return {
174
+ date: r.timestamp,
175
+ riskScore: result.riskScore,
176
+ criticalCount: result.summary.critical,
177
+ highCount: result.summary.high,
178
+ mediumCount: result.summary.medium,
179
+ lowCount: result.summary.low,
180
+ owaspScore: result.owaspCompliance.score,
181
+ };
182
+ });
183
+ }
184
+ /**
185
+ * Generate audit report
186
+ */
187
+ async generateReport(workflowId, options) {
188
+ await this.ensureInitialized();
189
+ const latest = await this.getLatestAudit(workflowId, 'security');
190
+ if (!latest) {
191
+ throw new Error(`No audit records found for workflow ${workflowId}`);
192
+ }
193
+ const result = latest.result;
194
+ const summary = await this.getAuditSummary(workflowId);
195
+ const history = options.includeHistory
196
+ ? await this.getAuditHistory(workflowId, { auditType: 'security', limit: 10 })
197
+ : [];
198
+ switch (options.format) {
199
+ case 'json':
200
+ return this.generateJsonReport(result, summary, history, options);
201
+ case 'html':
202
+ return this.generateHtmlReport(result, summary, history, options);
203
+ case 'markdown':
204
+ return this.generateMarkdownReport(result, summary, history, options);
205
+ case 'csv':
206
+ return this.generateCsvReport(result, options);
207
+ default:
208
+ throw new Error(`Unsupported report format: ${options.format}`);
209
+ }
210
+ }
211
+ /**
212
+ * Get all workflow summaries
213
+ */
214
+ async getAllSummaries() {
215
+ await this.ensureInitialized();
216
+ const summaries = [];
217
+ for (const workflowId of this.records.keys()) {
218
+ const summary = await this.getAuditSummary(workflowId);
219
+ if (summary)
220
+ summaries.push(summary);
221
+ }
222
+ return summaries.sort((a, b) => a.averageRiskScore - b.averageRiskScore);
223
+ }
224
+ /**
225
+ * Delete old audit records
226
+ */
227
+ async pruneRecords(olderThanDays) {
228
+ await this.ensureInitialized();
229
+ const cutoff = new Date();
230
+ cutoff.setDate(cutoff.getDate() - olderThanDays);
231
+ let deleted = 0;
232
+ for (const [workflowId, records] of this.records.entries()) {
233
+ const kept = records.filter(r => r.timestamp >= cutoff);
234
+ deleted += records.length - kept.length;
235
+ this.records.set(workflowId, kept);
236
+ }
237
+ return deleted;
238
+ }
239
+ // ============================================================================
240
+ // Private Methods
241
+ // ============================================================================
242
+ async ensureInitialized() {
243
+ if (!this.initialized) {
244
+ await this.initialize();
245
+ }
246
+ }
247
+ generateId() {
248
+ return `audit_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
249
+ }
250
+ async saveRecord(record) {
251
+ const records = this.records.get(record.workflowId) || [];
252
+ records.push(record);
253
+ this.records.set(record.workflowId, records);
254
+ }
255
+ async createTables() {
256
+ // Placeholder for actual database table creation
257
+ // In production, this would execute SQL to create the audit_results table
258
+ console.log(`Creating ${this.config.tableName} table for ${this.config.type}`);
259
+ }
260
+ generateJsonReport(result, summary, history, options) {
261
+ const report = {
262
+ generatedAt: new Date().toISOString(),
263
+ workflow: {
264
+ id: result.workflowId,
265
+ name: result.workflowName,
266
+ },
267
+ summary: {
268
+ riskScore: result.riskScore,
269
+ riskTrend: summary.riskTrend,
270
+ totalAudits: summary.totalAudits,
271
+ owaspCompliance: result.owaspCompliance.score,
272
+ },
273
+ findings: result.findings.map(f => ({
274
+ id: f.id,
275
+ type: f.type,
276
+ severity: f.severity,
277
+ node: f.node,
278
+ message: f.message,
279
+ ...(options.includeRemediation ? { remediation: f.remediation } : {}),
280
+ })),
281
+ owaspCompliance: result.owaspCompliance,
282
+ ...(options.includeHistory ? {
283
+ history: history.map(h => ({
284
+ date: h.timestamp.toISOString(),
285
+ riskScore: h.result.riskScore,
286
+ findingsCount: h.result.findings.length,
287
+ })),
288
+ } : {}),
289
+ };
290
+ return JSON.stringify(report, null, 2);
291
+ }
292
+ generateHtmlReport(result, summary, history, options) {
293
+ const severityColors = {
294
+ critical: '#dc3545',
295
+ high: '#fd7e14',
296
+ medium: '#ffc107',
297
+ low: '#28a745',
298
+ info: '#17a2b8',
299
+ };
300
+ const findingsHtml = result.findings.map(f => `
301
+ <tr>
302
+ <td><span style="background: ${severityColors[f.severity]}; color: white; padding: 2px 8px; border-radius: 4px;">${f.severity.toUpperCase()}</span></td>
303
+ <td>${f.type}</td>
304
+ <td>${f.node}</td>
305
+ <td>${f.message}</td>
306
+ ${options.includeRemediation ? `<td>${f.remediation}</td>` : ''}
307
+ </tr>
308
+ `).join('\n');
309
+ return `<!DOCTYPE html>
310
+ <html>
311
+ <head>
312
+ <title>Security Audit Report - ${result.workflowName}</title>
313
+ <style>
314
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 40px; }
315
+ h1 { color: #333; }
316
+ .summary { display: flex; gap: 20px; margin-bottom: 30px; }
317
+ .metric { background: #f5f5f5; padding: 20px; border-radius: 8px; text-align: center; }
318
+ .metric-value { font-size: 36px; font-weight: bold; }
319
+ .metric-label { color: #666; margin-top: 5px; }
320
+ .risk-${summary.riskTrend} { color: ${summary.riskTrend === 'improving' ? '#28a745' : summary.riskTrend === 'degrading' ? '#dc3545' : '#6c757d'}; }
321
+ table { width: 100%; border-collapse: collapse; margin-top: 20px; }
322
+ th, td { padding: 12px; text-align: left; border-bottom: 1px solid #ddd; }
323
+ th { background: #f8f9fa; font-weight: 600; }
324
+ .owasp-pass { color: #28a745; }
325
+ .owasp-warn { color: #ffc107; }
326
+ .owasp-fail { color: #dc3545; }
327
+ </style>
328
+ </head>
329
+ <body>
330
+ <h1>Security Audit Report</h1>
331
+ <h2>${result.workflowName}</h2>
332
+ <p>Generated: ${new Date().toISOString()}</p>
333
+
334
+ <div class="summary">
335
+ <div class="metric">
336
+ <div class="metric-value">${result.riskScore}</div>
337
+ <div class="metric-label">Risk Score</div>
338
+ </div>
339
+ <div class="metric">
340
+ <div class="metric-value risk-${summary.riskTrend}">${summary.riskTrend}</div>
341
+ <div class="metric-label">Trend</div>
342
+ </div>
343
+ <div class="metric">
344
+ <div class="metric-value">${result.owaspCompliance.score}%</div>
345
+ <div class="metric-label">OWASP Compliance</div>
346
+ </div>
347
+ <div class="metric">
348
+ <div class="metric-value">${result.findings.length}</div>
349
+ <div class="metric-label">Total Findings</div>
350
+ </div>
351
+ </div>
352
+
353
+ <h3>Findings (${result.findings.length})</h3>
354
+ <table>
355
+ <thead>
356
+ <tr>
357
+ <th>Severity</th>
358
+ <th>Type</th>
359
+ <th>Node</th>
360
+ <th>Message</th>
361
+ ${options.includeRemediation ? '<th>Remediation</th>' : ''}
362
+ </tr>
363
+ </thead>
364
+ <tbody>
365
+ ${findingsHtml}
366
+ </tbody>
367
+ </table>
368
+
369
+ <h3>OWASP Top 10 Compliance</h3>
370
+ <table>
371
+ <thead>
372
+ <tr>
373
+ <th>Category</th>
374
+ <th>Status</th>
375
+ <th>Findings</th>
376
+ </tr>
377
+ </thead>
378
+ <tbody>
379
+ ${Object.entries(result.owaspCompliance.categories).map(([cat, data]) => `
380
+ <tr>
381
+ <td>${cat.replace(/_/g, ' ')}</td>
382
+ <td class="owasp-${data.status}">${data.status.toUpperCase()}</td>
383
+ <td>${data.findings}</td>
384
+ </tr>
385
+ `).join('\n')}
386
+ </tbody>
387
+ </table>
388
+ </body>
389
+ </html>`;
390
+ }
391
+ generateMarkdownReport(result, summary, history, options) {
392
+ const findingsTable = result.findings.map(f => `| ${f.severity.toUpperCase()} | ${f.type} | ${f.node} | ${f.message} |${options.includeRemediation ? ` ${f.remediation} |` : ''}`).join('\n');
393
+ const owaspTable = Object.entries(result.owaspCompliance.categories).map(([cat, data]) => `| ${cat.replace(/_/g, ' ')} | ${data.status.toUpperCase()} | ${data.findings} |`).join('\n');
394
+ return `# Security Audit Report
395
+
396
+ ## ${result.workflowName}
397
+ **Workflow ID:** ${result.workflowId}
398
+ **Generated:** ${new Date().toISOString()}
399
+
400
+ ## Summary
401
+
402
+ | Metric | Value |
403
+ |--------|-------|
404
+ | Risk Score | ${result.riskScore}/100 |
405
+ | Risk Trend | ${summary.riskTrend} |
406
+ | OWASP Compliance | ${result.owaspCompliance.score}% |
407
+ | Total Findings | ${result.findings.length} |
408
+ | Critical | ${result.summary.critical} |
409
+ | High | ${result.summary.high} |
410
+ | Medium | ${result.summary.medium} |
411
+ | Low | ${result.summary.low} |
412
+
413
+ ## Findings
414
+
415
+ | Severity | Type | Node | Message |${options.includeRemediation ? ' Remediation |' : ''}
416
+ |----------|------|------|---------|${options.includeRemediation ? '-------------|' : ''}
417
+ ${findingsTable}
418
+
419
+ ## OWASP Top 10 Compliance
420
+
421
+ | Category | Status | Findings |
422
+ |----------|--------|----------|
423
+ ${owaspTable}
424
+
425
+ ${options.includeHistory ? `
426
+ ## History
427
+
428
+ | Date | Risk Score | Findings |
429
+ |------|------------|----------|
430
+ ${history.map(h => `| ${h.timestamp.toISOString().split('T')[0]} | ${h.result.riskScore} | ${h.result.findings.length} |`).join('\n')}
431
+ ` : ''}
432
+
433
+ ---
434
+ *Report generated by N8n Security Auditor Agent v1.0.0*
435
+ `;
436
+ }
437
+ generateCsvReport(result, options) {
438
+ const headers = options.includeRemediation
439
+ ? ['Severity', 'Type', 'Node', 'Message', 'Details', 'Remediation', 'OWASP Category', 'CWE']
440
+ : ['Severity', 'Type', 'Node', 'Message', 'Details', 'OWASP Category', 'CWE'];
441
+ const rows = result.findings.map(f => {
442
+ const row = [
443
+ f.severity,
444
+ f.type,
445
+ f.node,
446
+ `"${f.message.replace(/"/g, '""')}"`,
447
+ `"${f.details.replace(/"/g, '""')}"`,
448
+ ];
449
+ if (options.includeRemediation) {
450
+ row.push(`"${f.remediation.replace(/"/g, '""')}"`);
451
+ }
452
+ row.push(f.owaspCategory || '', f.cwe || '');
453
+ return row.join(',');
454
+ });
455
+ return [headers.join(','), ...rows].join('\n');
456
+ }
457
+ }
458
+ exports.N8nAuditPersistence = N8nAuditPersistence;
459
+ // ============================================================================
460
+ // Export Singleton for Convenience
461
+ // ============================================================================
462
+ let defaultInstance = null;
463
+ function getDefaultPersistence() {
464
+ if (!defaultInstance) {
465
+ defaultInstance = new N8nAuditPersistence({ type: 'memory' });
466
+ }
467
+ return defaultInstance;
468
+ }
469
+ function setDefaultPersistence(config) {
470
+ defaultInstance = new N8nAuditPersistence(config);
471
+ return defaultInstance;
472
+ }
473
+ //# sourceMappingURL=N8nAuditPersistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"N8nAuditPersistence.js","sourceRoot":"","sources":["../../../src/agents/n8n/N8nAuditPersistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * N8nBDDScenarioTesterAgent
3
+ *
4
+ * Behavior-Driven Development testing for n8n workflows:
5
+ * - Gherkin scenario parsing
6
+ * - Feature file execution
7
+ * - Business requirement validation
8
+ * - Natural language test definitions
9
+ */
10
+ import { N8nBaseAgent, N8nAgentConfig } from './N8nBaseAgent';
11
+ import { QETask } from '../../types';
12
+ export interface BDDTestTask extends QETask {
13
+ type: 'bdd-test';
14
+ target: string;
15
+ options?: {
16
+ scenarios?: GherkinScenario[];
17
+ featureFile?: string;
18
+ tags?: string[];
19
+ dryRun?: boolean;
20
+ generateReport?: boolean;
21
+ };
22
+ }
23
+ export interface GherkinScenario {
24
+ name: string;
25
+ description?: string;
26
+ tags?: string[];
27
+ given: GherkinStep[];
28
+ when: GherkinStep[];
29
+ then: GherkinStep[];
30
+ examples?: ScenarioExample[];
31
+ }
32
+ export interface GherkinStep {
33
+ keyword: 'Given' | 'When' | 'Then' | 'And' | 'But';
34
+ text: string;
35
+ dataTable?: Record<string, string>[];
36
+ docString?: string;
37
+ }
38
+ export interface ScenarioExample {
39
+ name: string;
40
+ values: Record<string, string>;
41
+ }
42
+ export interface BDDTestResult {
43
+ workflowId: string;
44
+ featureName: string;
45
+ scenarios: ScenarioResult[];
46
+ summary: BDDSummary;
47
+ coverage: BDDCoverage;
48
+ report?: BDDReport;
49
+ }
50
+ export interface ScenarioResult {
51
+ name: string;
52
+ description?: string;
53
+ tags: string[];
54
+ status: 'passed' | 'failed' | 'skipped' | 'pending';
55
+ duration: number;
56
+ steps: StepResult[];
57
+ error?: string;
58
+ example?: Record<string, string>;
59
+ }
60
+ export interface StepResult {
61
+ keyword: string;
62
+ text: string;
63
+ status: 'passed' | 'failed' | 'skipped' | 'pending';
64
+ duration: number;
65
+ error?: string;
66
+ screenshot?: string;
67
+ }
68
+ export interface BDDSummary {
69
+ totalScenarios: number;
70
+ passed: number;
71
+ failed: number;
72
+ skipped: number;
73
+ pending: number;
74
+ totalSteps: number;
75
+ stepsPassed: number;
76
+ stepsFailed: number;
77
+ duration: number;
78
+ }
79
+ export interface BDDCoverage {
80
+ nodesCovered: string[];
81
+ nodesUncovered: string[];
82
+ pathsCovered: string[];
83
+ coveragePercentage: number;
84
+ }
85
+ export interface BDDReport {
86
+ format: 'cucumber-json' | 'html' | 'markdown';
87
+ content: string;
88
+ }
89
+ export declare class N8nBDDScenarioTesterAgent extends N8nBaseAgent {
90
+ private lastExecution;
91
+ private lastOutput;
92
+ private executedNodes;
93
+ constructor(config: N8nAgentConfig);
94
+ protected performTask(task: QETask): Promise<BDDTestResult>;
95
+ /**
96
+ * Run BDD tests for workflow
97
+ */
98
+ runBDDTests(workflowId: string, options?: BDDTestTask['options']): Promise<BDDTestResult>;
99
+ /**
100
+ * Parse feature file content
101
+ */
102
+ parseFeatureFile(content: string): GherkinScenario[];
103
+ /**
104
+ * Generate scenarios from workflow
105
+ */
106
+ private generateScenariosFromWorkflow;
107
+ /**
108
+ * Execute a single scenario
109
+ */
110
+ private executeScenario;
111
+ /**
112
+ * Execute a single step
113
+ */
114
+ private executeStep;
115
+ /**
116
+ * Match step text to pattern
117
+ */
118
+ private matchStep;
119
+ /**
120
+ * Execute step handler
121
+ */
122
+ private executeHandler;
123
+ private checkWorkflowStatus;
124
+ private triggerWorkflowStep;
125
+ private executeWorkflowStep;
126
+ /**
127
+ * Wait for workflow execution to complete
128
+ */
129
+ private waitForExecution;
130
+ /**
131
+ * Extract output from last execution for assertions
132
+ */
133
+ private extractOutput;
134
+ private extractExecutedNodes;
135
+ private checkCompletion;
136
+ private checkOutputContains;
137
+ private checkOutputField;
138
+ private checkNodeExecuted;
139
+ private checkExecutionTime;
140
+ private checkNoErrors;
141
+ private checkItemCount;
142
+ /**
143
+ * Calculate summary
144
+ */
145
+ private calculateSummary;
146
+ /**
147
+ * Calculate coverage
148
+ */
149
+ private calculateCoverage;
150
+ /**
151
+ * Generate report
152
+ */
153
+ private generateReport;
154
+ /**
155
+ * Create scenario from natural language
156
+ */
157
+ createScenarioFromDescription(description: string): GherkinScenario;
158
+ }
159
+ //# sourceMappingURL=N8nBDDScenarioTesterAgent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"N8nBDDScenarioTesterAgent.d.ts","sourceRoot":"","sources":["../../../src/agents/n8n/N8nBDDScenarioTesterAgent.ts"],"names":[],"mappings":"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"}