llm-trust-guard 4.0.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 (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +318 -0
  3. package/dist/guards/agent-communication-guard.d.ts +169 -0
  4. package/dist/guards/agent-communication-guard.d.ts.map +1 -0
  5. package/dist/guards/agent-communication-guard.js +468 -0
  6. package/dist/guards/agent-communication-guard.js.map +1 -0
  7. package/dist/guards/autonomy-escalation-guard.d.ts +137 -0
  8. package/dist/guards/autonomy-escalation-guard.d.ts.map +1 -0
  9. package/dist/guards/autonomy-escalation-guard.js +470 -0
  10. package/dist/guards/autonomy-escalation-guard.js.map +1 -0
  11. package/dist/guards/circuit-breaker.d.ts +142 -0
  12. package/dist/guards/circuit-breaker.d.ts.map +1 -0
  13. package/dist/guards/circuit-breaker.js +347 -0
  14. package/dist/guards/circuit-breaker.js.map +1 -0
  15. package/dist/guards/code-execution-guard.d.ts +114 -0
  16. package/dist/guards/code-execution-guard.d.ts.map +1 -0
  17. package/dist/guards/code-execution-guard.js +467 -0
  18. package/dist/guards/code-execution-guard.js.map +1 -0
  19. package/dist/guards/conversation-guard.d.ts +73 -0
  20. package/dist/guards/conversation-guard.d.ts.map +1 -0
  21. package/dist/guards/conversation-guard.js +281 -0
  22. package/dist/guards/conversation-guard.js.map +1 -0
  23. package/dist/guards/drift-detector.d.ts +182 -0
  24. package/dist/guards/drift-detector.d.ts.map +1 -0
  25. package/dist/guards/drift-detector.js +480 -0
  26. package/dist/guards/drift-detector.js.map +1 -0
  27. package/dist/guards/encoding-detector.d.ts +76 -0
  28. package/dist/guards/encoding-detector.d.ts.map +1 -0
  29. package/dist/guards/encoding-detector.js +698 -0
  30. package/dist/guards/encoding-detector.js.map +1 -0
  31. package/dist/guards/execution-monitor.d.ts +73 -0
  32. package/dist/guards/execution-monitor.d.ts.map +1 -0
  33. package/dist/guards/execution-monitor.js +205 -0
  34. package/dist/guards/execution-monitor.js.map +1 -0
  35. package/dist/guards/input-sanitizer.d.ts +87 -0
  36. package/dist/guards/input-sanitizer.d.ts.map +1 -0
  37. package/dist/guards/input-sanitizer.js +301 -0
  38. package/dist/guards/input-sanitizer.js.map +1 -0
  39. package/dist/guards/mcp-security-guard.d.ts +204 -0
  40. package/dist/guards/mcp-security-guard.d.ts.map +1 -0
  41. package/dist/guards/mcp-security-guard.js +618 -0
  42. package/dist/guards/mcp-security-guard.js.map +1 -0
  43. package/dist/guards/memory-guard.d.ts +124 -0
  44. package/dist/guards/memory-guard.d.ts.map +1 -0
  45. package/dist/guards/memory-guard.js +476 -0
  46. package/dist/guards/memory-guard.js.map +1 -0
  47. package/dist/guards/multimodal-guard.d.ts +93 -0
  48. package/dist/guards/multimodal-guard.d.ts.map +1 -0
  49. package/dist/guards/multimodal-guard.js +507 -0
  50. package/dist/guards/multimodal-guard.js.map +1 -0
  51. package/dist/guards/output-filter.d.ts +76 -0
  52. package/dist/guards/output-filter.d.ts.map +1 -0
  53. package/dist/guards/output-filter.js +289 -0
  54. package/dist/guards/output-filter.js.map +1 -0
  55. package/dist/guards/policy-gate.d.ts +57 -0
  56. package/dist/guards/policy-gate.d.ts.map +1 -0
  57. package/dist/guards/policy-gate.js +182 -0
  58. package/dist/guards/policy-gate.js.map +1 -0
  59. package/dist/guards/prompt-leakage-guard.d.ts +110 -0
  60. package/dist/guards/prompt-leakage-guard.d.ts.map +1 -0
  61. package/dist/guards/prompt-leakage-guard.js +529 -0
  62. package/dist/guards/prompt-leakage-guard.js.map +1 -0
  63. package/dist/guards/rag-guard.d.ts +188 -0
  64. package/dist/guards/rag-guard.d.ts.map +1 -0
  65. package/dist/guards/rag-guard.js +769 -0
  66. package/dist/guards/rag-guard.js.map +1 -0
  67. package/dist/guards/schema-validator.d.ts +35 -0
  68. package/dist/guards/schema-validator.d.ts.map +1 -0
  69. package/dist/guards/schema-validator.js +316 -0
  70. package/dist/guards/schema-validator.js.map +1 -0
  71. package/dist/guards/state-persistence-guard.d.ts +153 -0
  72. package/dist/guards/state-persistence-guard.d.ts.map +1 -0
  73. package/dist/guards/state-persistence-guard.js +484 -0
  74. package/dist/guards/state-persistence-guard.js.map +1 -0
  75. package/dist/guards/tenant-boundary.d.ts +67 -0
  76. package/dist/guards/tenant-boundary.d.ts.map +1 -0
  77. package/dist/guards/tenant-boundary.js +187 -0
  78. package/dist/guards/tenant-boundary.js.map +1 -0
  79. package/dist/guards/tool-chain-validator.d.ts +102 -0
  80. package/dist/guards/tool-chain-validator.d.ts.map +1 -0
  81. package/dist/guards/tool-chain-validator.js +480 -0
  82. package/dist/guards/tool-chain-validator.js.map +1 -0
  83. package/dist/guards/tool-registry.d.ts +45 -0
  84. package/dist/guards/tool-registry.d.ts.map +1 -0
  85. package/dist/guards/tool-registry.js +155 -0
  86. package/dist/guards/tool-registry.js.map +1 -0
  87. package/dist/guards/trust-exploitation-guard.d.ts +134 -0
  88. package/dist/guards/trust-exploitation-guard.d.ts.map +1 -0
  89. package/dist/guards/trust-exploitation-guard.js +354 -0
  90. package/dist/guards/trust-exploitation-guard.js.map +1 -0
  91. package/dist/index.d.ts +133 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +430 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/integrations/express.d.ts +119 -0
  96. package/dist/integrations/express.d.ts.map +1 -0
  97. package/dist/integrations/express.js +244 -0
  98. package/dist/integrations/express.js.map +1 -0
  99. package/dist/integrations/index.d.ts +9 -0
  100. package/dist/integrations/index.d.ts.map +1 -0
  101. package/dist/integrations/index.js +26 -0
  102. package/dist/integrations/index.js.map +1 -0
  103. package/dist/integrations/langchain.d.ts +165 -0
  104. package/dist/integrations/langchain.d.ts.map +1 -0
  105. package/dist/integrations/langchain.js +308 -0
  106. package/dist/integrations/langchain.js.map +1 -0
  107. package/dist/integrations/openai.d.ts +205 -0
  108. package/dist/integrations/openai.d.ts.map +1 -0
  109. package/dist/integrations/openai.js +380 -0
  110. package/dist/integrations/openai.js.map +1 -0
  111. package/dist/types/index.d.ts +245 -0
  112. package/dist/types/index.d.ts.map +1 -0
  113. package/dist/types/index.js +6 -0
  114. package/dist/types/index.js.map +1 -0
  115. package/package.json +64 -0
@@ -0,0 +1,347 @@
1
+ "use strict";
2
+ /**
3
+ * CircuitBreaker (L13)
4
+ *
5
+ * Prevents cascade failures in agentic workflows.
6
+ * Implements the circuit breaker pattern for LLM operations.
7
+ *
8
+ * Threat Model:
9
+ * - ASI08: Cascading Failures
10
+ * - Runaway agent behavior
11
+ * - Resource exhaustion via retries
12
+ *
13
+ * Protection Capabilities:
14
+ * - Failure rate monitoring
15
+ * - Automatic circuit opening
16
+ * - Graceful degradation
17
+ * - Recovery detection
18
+ * - Rollback triggers
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.CircuitBreaker = void 0;
22
+ class CircuitBreaker {
23
+ constructor(config = {}) {
24
+ // Per-circuit state tracking
25
+ this.circuits = new Map();
26
+ this.config = {
27
+ failureThreshold: config.failureThreshold ?? 50,
28
+ minimumRequests: config.minimumRequests ?? 5,
29
+ windowSize: config.windowSize ?? 60 * 1000, // 1 minute
30
+ recoveryTimeout: config.recoveryTimeout ?? 30 * 1000, // 30 seconds
31
+ successThreshold: config.successThreshold ?? 3,
32
+ autoRecover: config.autoRecover ?? true,
33
+ maxConsecutiveFailures: config.maxConsecutiveFailures ?? 5,
34
+ onOpen: config.onOpen,
35
+ onClose: config.onClose,
36
+ onHalfOpen: config.onHalfOpen,
37
+ };
38
+ }
39
+ /**
40
+ * Check if operation should be allowed through circuit
41
+ */
42
+ check(circuitId, requestId) {
43
+ const reqId = requestId || `cb-${Date.now()}`;
44
+ const circuit = this.getOrCreateCircuit(circuitId);
45
+ // Clean old data outside window
46
+ this.cleanupWindow(circuit);
47
+ switch (circuit.state) {
48
+ case "closed":
49
+ return {
50
+ allowed: true,
51
+ state: "closed",
52
+ reason: "Circuit is closed, operation allowed",
53
+ request_id: reqId,
54
+ stats: { ...circuit.stats },
55
+ fallback_recommended: false,
56
+ };
57
+ case "open":
58
+ // Check if recovery timeout has passed
59
+ if (circuit.openedAt && Date.now() - circuit.openedAt >= this.config.recoveryTimeout) {
60
+ if (this.config.autoRecover) {
61
+ this.transitionToHalfOpen(circuitId, circuit);
62
+ return {
63
+ allowed: true,
64
+ state: "half-open",
65
+ reason: "Circuit is half-open, testing recovery",
66
+ request_id: reqId,
67
+ stats: { ...circuit.stats },
68
+ fallback_recommended: true,
69
+ };
70
+ }
71
+ }
72
+ const retryAfter = circuit.openedAt
73
+ ? Math.max(0, this.config.recoveryTimeout - (Date.now() - circuit.openedAt))
74
+ : this.config.recoveryTimeout;
75
+ return {
76
+ allowed: false,
77
+ state: "open",
78
+ reason: "Circuit is open, operation blocked",
79
+ request_id: reqId,
80
+ stats: { ...circuit.stats },
81
+ fallback_recommended: true,
82
+ retry_after: retryAfter,
83
+ };
84
+ case "half-open":
85
+ // Allow limited requests in half-open state
86
+ return {
87
+ allowed: true,
88
+ state: "half-open",
89
+ reason: "Circuit is half-open, testing recovery",
90
+ request_id: reqId,
91
+ stats: { ...circuit.stats },
92
+ fallback_recommended: true,
93
+ };
94
+ default:
95
+ return {
96
+ allowed: false,
97
+ state: "open",
98
+ reason: "Unknown circuit state",
99
+ request_id: reqId,
100
+ stats: { ...circuit.stats },
101
+ fallback_recommended: true,
102
+ };
103
+ }
104
+ }
105
+ /**
106
+ * Record operation result
107
+ */
108
+ recordResult(circuitId, result) {
109
+ const circuit = this.getOrCreateCircuit(circuitId);
110
+ const now = Date.now();
111
+ circuit.requestTimestamps.push(now);
112
+ circuit.stats.totalRequests++;
113
+ if (result.success) {
114
+ circuit.stats.successfulRequests++;
115
+ circuit.stats.consecutiveSuccesses++;
116
+ circuit.stats.consecutiveFailures = 0;
117
+ circuit.stats.lastSuccess = now;
118
+ // Check for recovery in half-open state
119
+ if (circuit.state === "half-open") {
120
+ if (circuit.stats.consecutiveSuccesses >= this.config.successThreshold) {
121
+ this.closeCircuit(circuitId, circuit);
122
+ }
123
+ }
124
+ }
125
+ else {
126
+ circuit.stats.failedRequests++;
127
+ circuit.stats.consecutiveFailures++;
128
+ circuit.stats.consecutiveSuccesses = 0;
129
+ circuit.stats.lastFailure = now;
130
+ circuit.failureTimestamps.push(now);
131
+ // Check for circuit opening conditions
132
+ if (circuit.state === "closed" || circuit.state === "half-open") {
133
+ // Check consecutive failures
134
+ if (circuit.stats.consecutiveFailures >= this.config.maxConsecutiveFailures) {
135
+ this.openCircuit(circuitId, circuit);
136
+ return;
137
+ }
138
+ // Check failure rate
139
+ const windowedFailures = this.countInWindow(circuit.failureTimestamps);
140
+ const windowedRequests = this.countInWindow(circuit.requestTimestamps);
141
+ if (windowedRequests >= this.config.minimumRequests) {
142
+ const failureRate = (windowedFailures / windowedRequests) * 100;
143
+ circuit.stats.failureRate = failureRate;
144
+ if (failureRate >= this.config.failureThreshold) {
145
+ this.openCircuit(circuitId, circuit);
146
+ }
147
+ }
148
+ }
149
+ }
150
+ // Update failure rate
151
+ const windowedFailures = this.countInWindow(circuit.failureTimestamps);
152
+ const windowedRequests = this.countInWindow(circuit.requestTimestamps);
153
+ circuit.stats.failureRate = windowedRequests > 0
154
+ ? (windowedFailures / windowedRequests) * 100
155
+ : 0;
156
+ }
157
+ /**
158
+ * Record a successful operation
159
+ */
160
+ recordSuccess(circuitId, duration) {
161
+ this.recordResult(circuitId, { success: true, duration: duration ?? 0 });
162
+ }
163
+ /**
164
+ * Record a failed operation
165
+ */
166
+ recordFailure(circuitId, error, duration) {
167
+ this.recordResult(circuitId, {
168
+ success: false,
169
+ duration: duration ?? 0,
170
+ error,
171
+ });
172
+ }
173
+ /**
174
+ * Get current state of a circuit
175
+ */
176
+ getState(circuitId) {
177
+ return this.circuits.get(circuitId)?.state ?? "closed";
178
+ }
179
+ /**
180
+ * Get stats for a circuit
181
+ */
182
+ getStats(circuitId) {
183
+ const circuit = this.circuits.get(circuitId);
184
+ return circuit ? { ...circuit.stats } : null;
185
+ }
186
+ /**
187
+ * Get all circuit IDs
188
+ */
189
+ getCircuitIds() {
190
+ return [...this.circuits.keys()];
191
+ }
192
+ /**
193
+ * Force open a circuit
194
+ */
195
+ forceOpen(circuitId) {
196
+ const circuit = this.getOrCreateCircuit(circuitId);
197
+ this.openCircuit(circuitId, circuit);
198
+ }
199
+ /**
200
+ * Force close a circuit
201
+ */
202
+ forceClose(circuitId) {
203
+ const circuit = this.getOrCreateCircuit(circuitId);
204
+ this.closeCircuit(circuitId, circuit);
205
+ }
206
+ /**
207
+ * Reset a circuit to initial state
208
+ */
209
+ reset(circuitId) {
210
+ this.circuits.delete(circuitId);
211
+ }
212
+ /**
213
+ * Reset all circuits
214
+ */
215
+ resetAll() {
216
+ this.circuits.clear();
217
+ }
218
+ /**
219
+ * Execute operation with circuit breaker protection
220
+ */
221
+ async execute(circuitId, operation, fallback) {
222
+ const checkResult = this.check(circuitId);
223
+ if (!checkResult.allowed) {
224
+ if (fallback) {
225
+ try {
226
+ const result = await fallback();
227
+ return { result, fallbackUsed: true };
228
+ }
229
+ catch (err) {
230
+ return {
231
+ fallbackUsed: true,
232
+ error: `Circuit open and fallback failed: ${err}`,
233
+ };
234
+ }
235
+ }
236
+ return {
237
+ fallbackUsed: false,
238
+ error: checkResult.reason,
239
+ };
240
+ }
241
+ const startTime = Date.now();
242
+ try {
243
+ const result = await operation();
244
+ this.recordSuccess(circuitId, Date.now() - startTime);
245
+ return { result, fallbackUsed: false };
246
+ }
247
+ catch (err) {
248
+ const error = err instanceof Error ? err.message : String(err);
249
+ this.recordFailure(circuitId, error, Date.now() - startTime);
250
+ // Try fallback if available and circuit is now recommending it
251
+ const newCheck = this.check(circuitId);
252
+ if (newCheck.fallback_recommended && fallback) {
253
+ try {
254
+ const result = await fallback();
255
+ return { result, fallbackUsed: true };
256
+ }
257
+ catch (fallbackErr) {
258
+ return {
259
+ fallbackUsed: true,
260
+ error: `Primary failed: ${error}. Fallback also failed.`,
261
+ };
262
+ }
263
+ }
264
+ return { fallbackUsed: false, error };
265
+ }
266
+ }
267
+ /**
268
+ * Health check across all circuits
269
+ */
270
+ healthCheck() {
271
+ const circuitStatuses = [];
272
+ let openCircuits = 0;
273
+ for (const [id, circuit] of this.circuits) {
274
+ const status = {
275
+ id,
276
+ state: circuit.state,
277
+ failureRate: circuit.stats.failureRate,
278
+ };
279
+ circuitStatuses.push(status);
280
+ if (circuit.state === "open") {
281
+ openCircuits++;
282
+ }
283
+ }
284
+ return {
285
+ healthy: openCircuits === 0,
286
+ circuits: circuitStatuses,
287
+ openCircuits,
288
+ };
289
+ }
290
+ getOrCreateCircuit(circuitId) {
291
+ let circuit = this.circuits.get(circuitId);
292
+ if (!circuit) {
293
+ circuit = {
294
+ state: "closed",
295
+ stats: {
296
+ totalRequests: 0,
297
+ successfulRequests: 0,
298
+ failedRequests: 0,
299
+ consecutiveFailures: 0,
300
+ consecutiveSuccesses: 0,
301
+ failureRate: 0,
302
+ stateChangedAt: Date.now(),
303
+ },
304
+ requestTimestamps: [],
305
+ failureTimestamps: [],
306
+ };
307
+ this.circuits.set(circuitId, circuit);
308
+ }
309
+ return circuit;
310
+ }
311
+ openCircuit(circuitId, circuit) {
312
+ circuit.state = "open";
313
+ circuit.openedAt = Date.now();
314
+ circuit.stats.stateChangedAt = Date.now();
315
+ if (this.config.onOpen) {
316
+ this.config.onOpen(circuitId, { ...circuit.stats });
317
+ }
318
+ }
319
+ closeCircuit(circuitId, circuit) {
320
+ circuit.state = "closed";
321
+ circuit.openedAt = undefined;
322
+ circuit.stats.stateChangedAt = Date.now();
323
+ circuit.stats.consecutiveFailures = 0;
324
+ if (this.config.onClose) {
325
+ this.config.onClose(circuitId, { ...circuit.stats });
326
+ }
327
+ }
328
+ transitionToHalfOpen(circuitId, circuit) {
329
+ circuit.state = "half-open";
330
+ circuit.stats.stateChangedAt = Date.now();
331
+ circuit.stats.consecutiveSuccesses = 0;
332
+ if (this.config.onHalfOpen) {
333
+ this.config.onHalfOpen(circuitId);
334
+ }
335
+ }
336
+ cleanupWindow(circuit) {
337
+ const cutoff = Date.now() - this.config.windowSize;
338
+ circuit.requestTimestamps = circuit.requestTimestamps.filter((t) => t > cutoff);
339
+ circuit.failureTimestamps = circuit.failureTimestamps.filter((t) => t > cutoff);
340
+ }
341
+ countInWindow(timestamps) {
342
+ const cutoff = Date.now() - this.config.windowSize;
343
+ return timestamps.filter((t) => t > cutoff).length;
344
+ }
345
+ }
346
+ exports.CircuitBreaker = CircuitBreaker;
347
+ //# sourceMappingURL=circuit-breaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/guards/circuit-breaker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * CodeExecutionGuard (L11)
3
+ *
4
+ * Validates and sandboxes agent-generated code before execution.
5
+ * Prevents RCE (Remote Code Execution) attacks via malicious code generation.
6
+ *
7
+ * Threat Model:
8
+ * - ASI05: Unexpected Code Execution (RCE)
9
+ * - Code injection via LLM outputs
10
+ * - Sandbox escape attempts
11
+ *
12
+ * Protection Capabilities:
13
+ * - Static code analysis for dangerous patterns
14
+ * - Import/require blocklist enforcement
15
+ * - System call detection
16
+ * - Resource limit enforcement
17
+ * - Language-specific security rules
18
+ */
19
+ export interface CodeExecutionGuardConfig {
20
+ /** Allowed programming languages */
21
+ allowedLanguages?: string[];
22
+ /** Blocked imports/modules */
23
+ blockedImports?: string[];
24
+ /** Blocked function calls */
25
+ blockedFunctions?: string[];
26
+ /** Maximum code length in characters */
27
+ maxCodeLength?: number;
28
+ /** Maximum execution time in milliseconds */
29
+ maxExecutionTime?: number;
30
+ /** Allow network access */
31
+ allowNetwork?: boolean;
32
+ /** Allow file system access */
33
+ allowFileSystem?: boolean;
34
+ /** Allow shell/subprocess execution */
35
+ allowShell?: boolean;
36
+ /** Allow environment variable access */
37
+ allowEnvAccess?: boolean;
38
+ /** Custom dangerous patterns */
39
+ customPatterns?: Array<{
40
+ name: string;
41
+ pattern: RegExp;
42
+ severity: number;
43
+ }>;
44
+ /** Risk threshold for blocking (0-100) */
45
+ riskThreshold?: number;
46
+ }
47
+ export interface CodeAnalysisResult {
48
+ allowed: boolean;
49
+ reason: string;
50
+ violations: string[];
51
+ request_id: string;
52
+ code_analysis: {
53
+ language: string;
54
+ length: number;
55
+ dangerous_imports: string[];
56
+ dangerous_functions: string[];
57
+ system_calls: string[];
58
+ network_access: boolean;
59
+ file_access: boolean;
60
+ shell_access: boolean;
61
+ env_access: boolean;
62
+ risk_score: number;
63
+ complexity_score: number;
64
+ };
65
+ sanitized_code?: string;
66
+ sandbox_config?: SandboxConfig;
67
+ recommendations: string[];
68
+ }
69
+ export interface SandboxConfig {
70
+ timeout: number;
71
+ memoryLimit: number;
72
+ allowedSyscalls: string[];
73
+ networkPolicy: "none" | "localhost" | "allowlist";
74
+ filesystemPolicy: "none" | "readonly" | "temponly";
75
+ envVars: Record<string, string>;
76
+ }
77
+ export declare class CodeExecutionGuard {
78
+ private config;
79
+ private readonly DANGEROUS_PATTERNS;
80
+ private readonly DEFAULT_BLOCKED_IMPORTS;
81
+ private readonly DEFAULT_BLOCKED_FUNCTIONS;
82
+ constructor(config?: CodeExecutionGuardConfig);
83
+ /**
84
+ * Analyze code for dangerous patterns before execution
85
+ */
86
+ analyze(code: string, language: string, requestId?: string): CodeAnalysisResult;
87
+ /**
88
+ * Validate code structure (syntax check simulation)
89
+ */
90
+ validateSyntax(code: string, language: string): {
91
+ valid: boolean;
92
+ errors: string[];
93
+ };
94
+ /**
95
+ * Generate secure sandbox configuration
96
+ */
97
+ generateSandboxConfig(needsNetwork: boolean, needsFileSystem: boolean, needsShell: boolean, needsEnv: boolean): SandboxConfig;
98
+ /**
99
+ * Sanitize code by removing dangerous patterns
100
+ */
101
+ sanitizeCode(code: string, language: string): string;
102
+ /**
103
+ * Get allowed languages
104
+ */
105
+ getAllowedLanguages(): string[];
106
+ /**
107
+ * Add custom dangerous pattern
108
+ */
109
+ addDangerousPattern(language: string, name: string, pattern: RegExp, severity: number): void;
110
+ private calculateComplexity;
111
+ private getAllowedSyscalls;
112
+ private generateRecommendations;
113
+ }
114
+ //# sourceMappingURL=code-execution-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-execution-guard.d.ts","sourceRoot":"","sources":["../../src/guards/code-execution-guard.ts"],"names":[],"mappings":"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"}