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,480 @@
1
+ "use strict";
2
+ /**
3
+ * DriftDetector (L14)
4
+ *
5
+ * Detects behavioral drift from intended agent purpose.
6
+ * Monitors for rogue agent behavior and goal misalignment.
7
+ *
8
+ * Threat Model:
9
+ * - ASI10: Rogue Agents
10
+ * - Goal misalignment
11
+ * - Behavioral drift over time
12
+ *
13
+ * Protection Capabilities:
14
+ * - Baseline behavior profiling
15
+ * - Anomaly detection
16
+ * - Goal alignment verification
17
+ * - Continuous monitoring
18
+ * - Alert thresholds
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.DriftDetector = void 0;
22
+ class DriftDetector {
23
+ constructor(config = {}) {
24
+ // Per-agent state
25
+ this.samples = new Map();
26
+ this.baselines = new Map();
27
+ this.driftState = new Map();
28
+ this.goalDefinitions = new Map();
29
+ this.config = {
30
+ minimumSamples: config.minimumSamples ?? 20,
31
+ anomalyThreshold: config.anomalyThreshold ?? 2.5, // 2.5 standard deviations
32
+ baselineWindow: config.baselineWindow ?? 24 * 60 * 60 * 1000, // 24 hours
33
+ autoUpdateBaseline: config.autoUpdateBaseline ?? true,
34
+ alertThreshold: config.alertThreshold ?? 60,
35
+ checkGoalAlignment: config.checkGoalAlignment ?? true,
36
+ onDrift: config.onDrift,
37
+ onRecovery: config.onRecovery,
38
+ };
39
+ }
40
+ /**
41
+ * Record a behavior sample
42
+ */
43
+ recordSample(agentId, sample) {
44
+ const agentSamples = this.samples.get(agentId) || [];
45
+ // Add new sample
46
+ agentSamples.push(sample);
47
+ // Clean old samples outside window
48
+ const cutoff = Date.now() - this.config.baselineWindow;
49
+ const filtered = agentSamples.filter((s) => s.timestamp > cutoff);
50
+ this.samples.set(agentId, filtered);
51
+ // Update baseline if we have enough samples and auto-update is enabled
52
+ if (this.config.autoUpdateBaseline && filtered.length >= this.config.minimumSamples) {
53
+ // Only update baseline periodically
54
+ const baseline = this.baselines.get(agentId);
55
+ if (!baseline || Date.now() - baseline.lastUpdated > this.config.baselineWindow / 4) {
56
+ this.updateBaseline(agentId);
57
+ }
58
+ }
59
+ }
60
+ /**
61
+ * Analyze current behavior for drift
62
+ */
63
+ analyze(agentId, currentSample, requestId) {
64
+ const reqId = requestId || `drift-${Date.now()}`;
65
+ // Record current sample if provided
66
+ if (currentSample) {
67
+ this.recordSample(agentId, currentSample);
68
+ }
69
+ const samples = this.samples.get(agentId) || [];
70
+ const baseline = this.baselines.get(agentId);
71
+ // Not enough data
72
+ if (samples.length < this.config.minimumSamples || !baseline) {
73
+ return {
74
+ allowed: true,
75
+ reason: "Insufficient data for drift detection",
76
+ request_id: reqId,
77
+ analysis: {
78
+ driftScore: 0,
79
+ isDrifting: false,
80
+ indicators: [],
81
+ baselineComparison: {
82
+ toolDrift: 0,
83
+ topicDrift: 0,
84
+ sentimentDrift: 0,
85
+ responseLengthDrift: 0,
86
+ responseTimeDrift: 0,
87
+ errorRateDrift: 0,
88
+ },
89
+ recommendations: ["Collecting baseline data..."],
90
+ },
91
+ requires_review: false,
92
+ kill_switch_recommended: false,
93
+ };
94
+ }
95
+ // Get recent samples for comparison
96
+ const recentSamples = samples.slice(-10);
97
+ const analysis = this.performAnalysis(agentId, recentSamples, baseline);
98
+ // Check for state change
99
+ const wasDrifting = this.driftState.get(agentId) || false;
100
+ const isDrifting = analysis.isDrifting;
101
+ if (isDrifting && !wasDrifting) {
102
+ this.driftState.set(agentId, true);
103
+ if (this.config.onDrift) {
104
+ this.config.onDrift(agentId, analysis);
105
+ }
106
+ }
107
+ else if (!isDrifting && wasDrifting) {
108
+ this.driftState.set(agentId, false);
109
+ if (this.config.onRecovery) {
110
+ this.config.onRecovery(agentId);
111
+ }
112
+ }
113
+ // Decision
114
+ const shouldBlock = analysis.driftScore >= 80;
115
+ const requiresReview = analysis.driftScore >= this.config.alertThreshold;
116
+ const killSwitch = analysis.driftScore >= 90;
117
+ return {
118
+ allowed: !shouldBlock,
119
+ reason: shouldBlock
120
+ ? `Agent drift detected: score ${analysis.driftScore}`
121
+ : isDrifting
122
+ ? `Warning: drift score ${analysis.driftScore}`
123
+ : "Agent behavior within normal parameters",
124
+ request_id: reqId,
125
+ analysis,
126
+ requires_review: requiresReview,
127
+ kill_switch_recommended: killSwitch,
128
+ };
129
+ }
130
+ /**
131
+ * Set baseline manually
132
+ */
133
+ setBaseline(agentId, baseline) {
134
+ this.baselines.set(agentId, baseline);
135
+ }
136
+ /**
137
+ * Get current baseline for an agent
138
+ */
139
+ getBaseline(agentId) {
140
+ return this.baselines.get(agentId) || null;
141
+ }
142
+ /**
143
+ * Update baseline from collected samples
144
+ */
145
+ updateBaseline(agentId) {
146
+ const samples = this.samples.get(agentId) || [];
147
+ if (samples.length < this.config.minimumSamples) {
148
+ return;
149
+ }
150
+ const baseline = this.calculateBaseline(samples);
151
+ this.baselines.set(agentId, baseline);
152
+ }
153
+ /**
154
+ * Define goals for goal alignment checking
155
+ */
156
+ defineGoals(agentId, goals) {
157
+ this.goalDefinitions.set(agentId, goals);
158
+ }
159
+ /**
160
+ * Get drift state for an agent
161
+ */
162
+ isDrifting(agentId) {
163
+ return this.driftState.get(agentId) || false;
164
+ }
165
+ /**
166
+ * Get all agents with drift
167
+ */
168
+ getDriftingAgents() {
169
+ return [...this.driftState.entries()]
170
+ .filter(([, drifting]) => drifting)
171
+ .map(([agentId]) => agentId);
172
+ }
173
+ /**
174
+ * Reset agent state
175
+ */
176
+ resetAgent(agentId) {
177
+ this.samples.delete(agentId);
178
+ this.baselines.delete(agentId);
179
+ this.driftState.delete(agentId);
180
+ this.goalDefinitions.delete(agentId);
181
+ }
182
+ /**
183
+ * Get sample count for an agent
184
+ */
185
+ getSampleCount(agentId) {
186
+ return this.samples.get(agentId)?.length ?? 0;
187
+ }
188
+ calculateBaseline(samples) {
189
+ // Tool distribution
190
+ const toolCounts = {};
191
+ for (const sample of samples) {
192
+ for (const tool of sample.tools) {
193
+ toolCounts[tool] = (toolCounts[tool] || 0) + 1;
194
+ }
195
+ }
196
+ const totalTools = Object.values(toolCounts).reduce((a, b) => a + b, 0);
197
+ const toolDistribution = {};
198
+ for (const [tool, count] of Object.entries(toolCounts)) {
199
+ toolDistribution[tool] = count / totalTools;
200
+ }
201
+ // Topic distribution
202
+ const topicCounts = {};
203
+ for (const sample of samples) {
204
+ for (const topic of sample.topics) {
205
+ topicCounts[topic] = (topicCounts[topic] || 0) + 1;
206
+ }
207
+ }
208
+ const totalTopics = Object.values(topicCounts).reduce((a, b) => a + b, 0);
209
+ const topicDistribution = {};
210
+ for (const [topic, count] of Object.entries(topicCounts)) {
211
+ topicDistribution[topic] = count / totalTopics;
212
+ }
213
+ // Numerical metrics
214
+ const sentiments = samples.map((s) => s.sentiment);
215
+ const responseLengths = samples.map((s) => s.responseLength);
216
+ const responseTimes = samples.map((s) => s.responseTime);
217
+ const errors = samples.filter((s) => s.hadError).length;
218
+ const satisfactions = samples
219
+ .filter((s) => s.satisfaction !== undefined)
220
+ .map((s) => s.satisfaction);
221
+ return {
222
+ toolDistribution,
223
+ topicDistribution,
224
+ avgSentiment: this.mean(sentiments),
225
+ sentimentStdDev: this.stdDev(sentiments),
226
+ avgResponseLength: this.mean(responseLengths),
227
+ responseLengthStdDev: this.stdDev(responseLengths),
228
+ avgResponseTime: this.mean(responseTimes),
229
+ responseTimeStdDev: this.stdDev(responseTimes),
230
+ errorRate: errors / samples.length,
231
+ avgSatisfaction: satisfactions.length > 0 ? this.mean(satisfactions) : 0,
232
+ sampleCount: samples.length,
233
+ lastUpdated: Date.now(),
234
+ };
235
+ }
236
+ performAnalysis(agentId, recentSamples, baseline) {
237
+ const indicators = [];
238
+ let driftScore = 0;
239
+ // Calculate recent metrics
240
+ const recentToolDist = this.calculateToolDistribution(recentSamples);
241
+ const recentTopicDist = this.calculateTopicDistribution(recentSamples);
242
+ const recentSentiment = this.mean(recentSamples.map((s) => s.sentiment));
243
+ const recentResponseLength = this.mean(recentSamples.map((s) => s.responseLength));
244
+ const recentResponseTime = this.mean(recentSamples.map((s) => s.responseTime));
245
+ const recentErrorRate = recentSamples.filter((s) => s.hadError).length / recentSamples.length;
246
+ // Tool drift (Jensen-Shannon divergence approximation)
247
+ const toolDrift = this.distributionDivergence(baseline.toolDistribution, recentToolDist);
248
+ if (toolDrift > 0.3) {
249
+ const severity = toolDrift > 0.6 ? "high" : toolDrift > 0.4 ? "medium" : "low";
250
+ indicators.push({
251
+ type: "tool_distribution",
252
+ severity,
253
+ description: "Tool usage pattern has shifted significantly",
254
+ currentValue: JSON.stringify(recentToolDist),
255
+ baselineValue: JSON.stringify(baseline.toolDistribution),
256
+ deviation: toolDrift,
257
+ });
258
+ driftScore += toolDrift * 30;
259
+ }
260
+ // Topic drift
261
+ const topicDrift = this.distributionDivergence(baseline.topicDistribution, recentTopicDist);
262
+ if (topicDrift > 0.3) {
263
+ const severity = topicDrift > 0.6 ? "high" : topicDrift > 0.4 ? "medium" : "low";
264
+ indicators.push({
265
+ type: "topic_distribution",
266
+ severity,
267
+ description: "Topic focus has shifted significantly",
268
+ currentValue: JSON.stringify(recentTopicDist),
269
+ baselineValue: JSON.stringify(baseline.topicDistribution),
270
+ deviation: topicDrift,
271
+ });
272
+ driftScore += topicDrift * 25;
273
+ }
274
+ // Sentiment drift
275
+ const sentimentDeviation = Math.abs(recentSentiment - baseline.avgSentiment) /
276
+ (baseline.sentimentStdDev || 0.1);
277
+ if (sentimentDeviation > this.config.anomalyThreshold) {
278
+ const severity = sentimentDeviation > 4 ? "high" : sentimentDeviation > 3 ? "medium" : "low";
279
+ indicators.push({
280
+ type: "sentiment",
281
+ severity,
282
+ description: "Sentiment has deviated from baseline",
283
+ currentValue: recentSentiment.toFixed(2),
284
+ baselineValue: baseline.avgSentiment.toFixed(2),
285
+ deviation: sentimentDeviation,
286
+ });
287
+ driftScore += Math.min(sentimentDeviation * 5, 25);
288
+ }
289
+ // Response length drift
290
+ const lengthDeviation = Math.abs(recentResponseLength - baseline.avgResponseLength) /
291
+ (baseline.responseLengthStdDev || 100);
292
+ if (lengthDeviation > this.config.anomalyThreshold) {
293
+ const severity = lengthDeviation > 4 ? "high" : lengthDeviation > 3 ? "medium" : "low";
294
+ indicators.push({
295
+ type: "response_length",
296
+ severity,
297
+ description: "Response length has changed significantly",
298
+ currentValue: recentResponseLength.toFixed(0),
299
+ baselineValue: baseline.avgResponseLength.toFixed(0),
300
+ deviation: lengthDeviation,
301
+ });
302
+ driftScore += Math.min(lengthDeviation * 3, 15);
303
+ }
304
+ // Response time drift
305
+ const timeDeviation = Math.abs(recentResponseTime - baseline.avgResponseTime) /
306
+ (baseline.responseTimeStdDev || 100);
307
+ if (timeDeviation > this.config.anomalyThreshold) {
308
+ const severity = timeDeviation > 4 ? "high" : timeDeviation > 3 ? "medium" : "low";
309
+ indicators.push({
310
+ type: "response_time",
311
+ severity,
312
+ description: "Response time has changed significantly",
313
+ currentValue: recentResponseTime.toFixed(0) + "ms",
314
+ baselineValue: baseline.avgResponseTime.toFixed(0) + "ms",
315
+ deviation: timeDeviation,
316
+ });
317
+ driftScore += Math.min(timeDeviation * 3, 15);
318
+ }
319
+ // Error rate drift
320
+ const errorRateDiff = recentErrorRate - baseline.errorRate;
321
+ if (errorRateDiff > 0.1) { // 10% increase in errors
322
+ const severity = errorRateDiff > 0.3 ? "critical" : errorRateDiff > 0.2 ? "high" : "medium";
323
+ indicators.push({
324
+ type: "error_rate",
325
+ severity,
326
+ description: "Error rate has increased significantly",
327
+ currentValue: (recentErrorRate * 100).toFixed(1) + "%",
328
+ baselineValue: (baseline.errorRate * 100).toFixed(1) + "%",
329
+ deviation: errorRateDiff,
330
+ });
331
+ driftScore += errorRateDiff * 100; // Error rate is serious
332
+ }
333
+ // Goal alignment check
334
+ let goalAlignment;
335
+ if (this.config.checkGoalAlignment) {
336
+ const goals = this.goalDefinitions.get(agentId);
337
+ if (goals && recentSamples.some((s) => s.goalIndicators)) {
338
+ goalAlignment = this.checkGoalAlignment(recentSamples, goals, indicators);
339
+ if (goalAlignment < 0.7) {
340
+ driftScore += (1 - goalAlignment) * 30;
341
+ }
342
+ }
343
+ }
344
+ // Cap drift score
345
+ driftScore = Math.min(100, Math.round(driftScore));
346
+ return {
347
+ driftScore,
348
+ isDrifting: driftScore >= this.config.alertThreshold,
349
+ indicators,
350
+ baselineComparison: {
351
+ toolDrift,
352
+ topicDrift,
353
+ sentimentDrift: sentimentDeviation,
354
+ responseLengthDrift: lengthDeviation,
355
+ responseTimeDrift: timeDeviation,
356
+ errorRateDrift: errorRateDiff,
357
+ },
358
+ goalAlignment,
359
+ recommendations: this.generateRecommendations(indicators, driftScore),
360
+ };
361
+ }
362
+ calculateToolDistribution(samples) {
363
+ const counts = {};
364
+ for (const sample of samples) {
365
+ for (const tool of sample.tools) {
366
+ counts[tool] = (counts[tool] || 0) + 1;
367
+ }
368
+ }
369
+ const total = Object.values(counts).reduce((a, b) => a + b, 0);
370
+ const dist = {};
371
+ for (const [tool, count] of Object.entries(counts)) {
372
+ dist[tool] = count / total;
373
+ }
374
+ return dist;
375
+ }
376
+ calculateTopicDistribution(samples) {
377
+ const counts = {};
378
+ for (const sample of samples) {
379
+ for (const topic of sample.topics) {
380
+ counts[topic] = (counts[topic] || 0) + 1;
381
+ }
382
+ }
383
+ const total = Object.values(counts).reduce((a, b) => a + b, 0);
384
+ const dist = {};
385
+ for (const [topic, count] of Object.entries(counts)) {
386
+ dist[topic] = count / total;
387
+ }
388
+ return dist;
389
+ }
390
+ distributionDivergence(baseline, current) {
391
+ // Simplified Jensen-Shannon divergence
392
+ const allKeys = new Set([...Object.keys(baseline), ...Object.keys(current)]);
393
+ let divergence = 0;
394
+ for (const key of allKeys) {
395
+ const p = baseline[key] || 0.001;
396
+ const q = current[key] || 0.001;
397
+ const m = (p + q) / 2;
398
+ if (p > 0)
399
+ divergence += p * Math.log2(p / m);
400
+ if (q > 0)
401
+ divergence += q * Math.log2(q / m);
402
+ }
403
+ return divergence / 2; // Normalized to [0, 1]
404
+ }
405
+ checkGoalAlignment(samples, goals, indicators) {
406
+ let alignmentSum = 0;
407
+ let goalCount = 0;
408
+ for (const [goalName, { target, tolerance }] of Object.entries(goals)) {
409
+ const values = samples
410
+ .filter((s) => s.goalIndicators && s.goalIndicators[goalName] !== undefined)
411
+ .map((s) => s.goalIndicators[goalName]);
412
+ if (values.length === 0)
413
+ continue;
414
+ const avgValue = this.mean(values);
415
+ const deviation = Math.abs(avgValue - target);
416
+ const alignment = Math.max(0, 1 - deviation / tolerance);
417
+ alignmentSum += alignment;
418
+ goalCount++;
419
+ if (alignment < 0.7) {
420
+ indicators.push({
421
+ type: `goal_${goalName}`,
422
+ severity: alignment < 0.3 ? "critical" : alignment < 0.5 ? "high" : "medium",
423
+ description: `Goal '${goalName}' alignment is low`,
424
+ currentValue: avgValue.toFixed(2),
425
+ baselineValue: target.toFixed(2),
426
+ deviation: deviation,
427
+ });
428
+ }
429
+ }
430
+ return goalCount > 0 ? alignmentSum / goalCount : 1;
431
+ }
432
+ mean(values) {
433
+ if (values.length === 0)
434
+ return 0;
435
+ return values.reduce((a, b) => a + b, 0) / values.length;
436
+ }
437
+ stdDev(values) {
438
+ if (values.length < 2)
439
+ return 0;
440
+ const avg = this.mean(values);
441
+ const squareDiffs = values.map((v) => Math.pow(v - avg, 2));
442
+ return Math.sqrt(this.mean(squareDiffs));
443
+ }
444
+ generateRecommendations(indicators, driftScore) {
445
+ const recommendations = [];
446
+ if (driftScore >= 90) {
447
+ recommendations.push("CRITICAL: Consider activating kill switch for this agent");
448
+ }
449
+ if (driftScore >= 70) {
450
+ recommendations.push("Immediate review of agent behavior required");
451
+ }
452
+ const criticalIndicators = indicators.filter((i) => i.severity === "critical" || i.severity === "high");
453
+ for (const indicator of criticalIndicators) {
454
+ switch (indicator.type) {
455
+ case "tool_distribution":
456
+ recommendations.push("Review tool access permissions");
457
+ break;
458
+ case "topic_distribution":
459
+ recommendations.push("Verify agent is operating within intended domain");
460
+ break;
461
+ case "error_rate":
462
+ recommendations.push("Investigate root cause of increased errors");
463
+ break;
464
+ case "sentiment":
465
+ recommendations.push("Review recent interactions for quality issues");
466
+ break;
467
+ default:
468
+ if (indicator.type.startsWith("goal_")) {
469
+ recommendations.push(`Review goal alignment for ${indicator.type.replace("goal_", "")}`);
470
+ }
471
+ }
472
+ }
473
+ if (recommendations.length === 0) {
474
+ recommendations.push("Agent behavior is within normal parameters");
475
+ }
476
+ return recommendations;
477
+ }
478
+ }
479
+ exports.DriftDetector = DriftDetector;
480
+ //# sourceMappingURL=drift-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift-detector.js","sourceRoot":"","sources":["../../src/guards/drift-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * EncodingDetector
3
+ *
4
+ * Detects and blocks encoding-based bypass attempts:
5
+ * - Base64 encoded payloads
6
+ * - URL encoded attacks
7
+ * - Unicode/punycode obfuscation
8
+ * - Hex encoding
9
+ * - HTML entity encoding
10
+ * - Mixed encoding attacks
11
+ */
12
+ export interface EncodingDetectorConfig {
13
+ detectBase64?: boolean;
14
+ detectURLEncoding?: boolean;
15
+ detectUnicode?: boolean;
16
+ detectHex?: boolean;
17
+ detectHTMLEntities?: boolean;
18
+ detectMixedEncoding?: boolean;
19
+ detectROT13?: boolean;
20
+ detectOctal?: boolean;
21
+ detectBase32?: boolean;
22
+ maxDecodingDepth?: number;
23
+ threatPatterns?: ThreatPattern[];
24
+ maxEncodedRatio?: number;
25
+ }
26
+ export interface ThreatPattern {
27
+ name: string;
28
+ pattern: RegExp;
29
+ severity: "low" | "medium" | "high" | "critical";
30
+ }
31
+ export interface EncodingDetectorResult {
32
+ allowed: boolean;
33
+ reason?: string;
34
+ violations: string[];
35
+ encoding_analysis: {
36
+ encodings_detected: EncodingDetection[];
37
+ decoded_content?: string;
38
+ threats_found: ThreatFound[];
39
+ obfuscation_score: number;
40
+ };
41
+ }
42
+ export interface EncodingDetection {
43
+ type: string;
44
+ count: number;
45
+ locations: string[];
46
+ decoded_sample?: string;
47
+ }
48
+ export interface ThreatFound {
49
+ pattern_name: string;
50
+ severity: string;
51
+ in_layer: string;
52
+ }
53
+ export declare class EncodingDetector {
54
+ private config;
55
+ private defaultThreatPatterns;
56
+ constructor(config?: EncodingDetectorConfig);
57
+ /**
58
+ * Detect encoding and analyze for threats
59
+ */
60
+ detect(input: string, requestId?: string): EncodingDetectorResult;
61
+ /**
62
+ * Quick check if input contains encoded threats
63
+ */
64
+ containsEncodedThreat(input: string): boolean;
65
+ private detectBase64;
66
+ private detectURLEncoding;
67
+ private detectUnicode;
68
+ private detectHex;
69
+ private detectHTMLEntities;
70
+ private detectROT13;
71
+ private detectOctal;
72
+ private detectBase32;
73
+ private checkThreats;
74
+ private fullyDecode;
75
+ }
76
+ //# sourceMappingURL=encoding-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding-detector.d.ts","sourceRoot":"","sources":["../../src/guards/encoding-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,sBAAsB;IAErC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IAEjC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CAClD;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE;QACjB,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;QACxC,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,EAAE,WAAW,EAAE,CAAC;QAC7B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAyB;IAEvC,OAAO,CAAC,qBAAqB,CAmE3B;gBAEU,MAAM,GAAE,sBAA2B;IAiB/C;;OAEG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAW,GACrB,sBAAsB;IA2NzB;;OAEG;IACH,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAO7C,OAAO,CAAC,YAAY;IAqCpB,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,aAAa;IAqGrB,OAAO,CAAC,SAAS;IA8EjB,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,WAAW;IAsDnB,OAAO,CAAC,WAAW;IAsCnB,OAAO,CAAC,YAAY;IA6DpB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,WAAW;CA8DpB"}