monofence-ai 1.0.6 → 2.24.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.
- package/README.md +1 -1
- package/dist/consensus.d.ts +24 -0
- package/dist/consensus.d.ts.map +1 -0
- package/dist/consensus.js +51 -0
- package/dist/consensus.js.map +1 -0
- package/dist/domain/services/threat-detection-service.d.ts +2 -12
- package/dist/domain/services/threat-detection-service.d.ts.map +1 -1
- package/dist/domain/services/threat-detection-service.js +1 -273
- package/dist/domain/services/threat-detection-service.js.map +1 -1
- package/dist/domain/services/threat-learning-inmemory-store.d.ts +32 -0
- package/dist/domain/services/threat-learning-inmemory-store.d.ts.map +1 -0
- package/dist/domain/services/threat-learning-inmemory-store.js +83 -0
- package/dist/domain/services/threat-learning-inmemory-store.js.map +1 -0
- package/dist/domain/services/threat-learning-service.d.ts +4 -24
- package/dist/domain/services/threat-learning-service.d.ts.map +1 -1
- package/dist/domain/services/threat-learning-service.js +5 -76
- package/dist/domain/services/threat-learning-service.js.map +1 -1
- package/dist/domain/services/threat-patterns.d.ts +30 -0
- package/dist/domain/services/threat-patterns.d.ts.map +1 -0
- package/dist/domain/services/threat-patterns.js +280 -0
- package/dist/domain/services/threat-patterns.js.map +1 -0
- package/dist/facade.d.ts +108 -0
- package/dist/facade.d.ts.map +1 -0
- package/dist/facade.js +165 -0
- package/dist/facade.js.map +1 -0
- package/dist/index.d.ts +12 -140
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -247
- package/dist/index.js.map +1 -1
- package/dist/singleton.d.ts +25 -0
- package/dist/singleton.d.ts.map +1 -0
- package/dist/singleton.js +47 -0
- package/dist/singleton.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
[](https://github.com/monoes/monomind/blob/main/LICENSE)
|
|
9
9
|
[](https://nodejs.org)
|
|
10
10
|
|
|
11
|
-
**AI manipulation defense** — prompt injection, jailbreak, homoglyph evasion, base64 encoding, multi-turn escalation, and PII detection. Sub-millisecond, 50+ patterns,
|
|
11
|
+
**AI manipulation defense** — prompt injection, jailbreak, homoglyph evasion, base64 encoding, multi-turn escalation, and PII detection. Sub-millisecond, 50+ patterns, optional pattern learning (`enableLearning` stores detections and mitigation outcomes you record).
|
|
12
12
|
|
|
13
13
|
> Part of the [Monomind](https://github.com/monoes/monomind) ecosystem.
|
|
14
14
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* monofence-ai — multi-agent security consensus (Monomind attention integration)
|
|
3
|
+
* Split out of index.ts (file-size sweep). Pure move.
|
|
4
|
+
*/
|
|
5
|
+
import type { Threat, ThreatDetectionResult } from './domain/entities/threat.js';
|
|
6
|
+
/**
|
|
7
|
+
* Integration with Monomind attention mechanisms
|
|
8
|
+
* Use for multi-agent security consensus
|
|
9
|
+
*/
|
|
10
|
+
export interface AttentionContext {
|
|
11
|
+
agentId: string;
|
|
12
|
+
threatAssessment: ThreatDetectionResult;
|
|
13
|
+
weight: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Calculate security consensus from multiple agent assessments
|
|
17
|
+
* Uses attention-based weighting for Monomind flash attention integration
|
|
18
|
+
*/
|
|
19
|
+
export declare function calculateSecurityConsensus(assessments: AttentionContext[]): {
|
|
20
|
+
consensus: 'safe' | 'threat' | 'uncertain';
|
|
21
|
+
confidence: number;
|
|
22
|
+
criticalThreats: Threat[];
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=consensus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consensus.d.ts","sourceRoot":"","sources":["../src/consensus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEjF;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,GAAG;IAC3E,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAiDA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* monofence-ai — multi-agent security consensus (Monomind attention integration)
|
|
3
|
+
* Split out of index.ts (file-size sweep). Pure move.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Calculate security consensus from multiple agent assessments
|
|
7
|
+
* Uses attention-based weighting for Monomind flash attention integration
|
|
8
|
+
*/
|
|
9
|
+
export function calculateSecurityConsensus(assessments) {
|
|
10
|
+
if (assessments.length === 0) {
|
|
11
|
+
return { consensus: 'uncertain', confidence: 0, criticalThreats: [] };
|
|
12
|
+
}
|
|
13
|
+
// Normalize weights — guard against all-zero weights
|
|
14
|
+
const totalWeight = assessments.reduce((sum, a) => sum + a.weight, 0);
|
|
15
|
+
if (totalWeight === 0) {
|
|
16
|
+
return { consensus: 'uncertain', confidence: 0, criticalThreats: [] };
|
|
17
|
+
}
|
|
18
|
+
const normalized = assessments.map((a) => ({
|
|
19
|
+
...a,
|
|
20
|
+
weight: a.weight / totalWeight,
|
|
21
|
+
}));
|
|
22
|
+
// Calculate weighted threat score
|
|
23
|
+
let threatScore = 0;
|
|
24
|
+
const allThreats = [];
|
|
25
|
+
for (const assessment of normalized) {
|
|
26
|
+
if (!assessment.threatAssessment.safe) {
|
|
27
|
+
threatScore += assessment.weight;
|
|
28
|
+
allThreats.push(...assessment.threatAssessment.threats);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Determine consensus
|
|
32
|
+
const criticalThreats = allThreats.filter((t) => t.severity === 'critical');
|
|
33
|
+
// Critical threats short-circuit weighted scoring intentionally (fail-secure).
|
|
34
|
+
// A single critical threat — regardless of that agent's weight — means we cannot
|
|
35
|
+
// declare the input safe. Weight only governs uncertain/borderline cases.
|
|
36
|
+
if (criticalThreats.length > 0) {
|
|
37
|
+
return {
|
|
38
|
+
consensus: 'threat',
|
|
39
|
+
confidence: Math.max(...criticalThreats.map((t) => t.confidence)),
|
|
40
|
+
criticalThreats,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (threatScore > 0.5) {
|
|
44
|
+
return { consensus: 'threat', confidence: threatScore, criticalThreats: [] };
|
|
45
|
+
}
|
|
46
|
+
if (threatScore < 0.2) {
|
|
47
|
+
return { consensus: 'safe', confidence: 1 - threatScore, criticalThreats: [] };
|
|
48
|
+
}
|
|
49
|
+
return { consensus: 'uncertain', confidence: 0.5, criticalThreats: [] };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=consensus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consensus.js","sourceRoot":"","sources":["../src/consensus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,WAA+B;IAKxE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;IACxE,CAAC;IAED,qDAAqD;IACrD,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtE,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;IACxE,CAAC;IACD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzC,GAAG,CAAC;QACJ,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,WAAW;KAC/B,CAAC,CAAC,CAAC;IAEJ,kCAAkC;IAClC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,UAAU,IAAI,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;YACtC,WAAW,IAAI,UAAU,CAAC,MAAM,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IAE5E,+EAA+E;IAC/E,iFAAiF;IACjF,0EAA0E;IAC1E,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YACjE,eAAe;SAChB,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;QACtB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;IAC/E,CAAC;IAED,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;QACtB,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;IACjF,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;AAC1E,CAAC"}
|
|
@@ -9,17 +9,8 @@
|
|
|
9
9
|
* - Pattern matching: <5ms
|
|
10
10
|
* - PII scan: <3ms
|
|
11
11
|
*/
|
|
12
|
-
import { type ThreatDetectionResult
|
|
13
|
-
|
|
14
|
-
* Threat pattern definition
|
|
15
|
-
*/
|
|
16
|
-
interface ThreatPattern {
|
|
17
|
-
readonly pattern: RegExp;
|
|
18
|
-
readonly type: ThreatType;
|
|
19
|
-
readonly severity: ThreatSeverity;
|
|
20
|
-
readonly description: string;
|
|
21
|
-
readonly baseConfidence: number;
|
|
22
|
-
}
|
|
12
|
+
import { type ThreatDetectionResult } from '../entities/threat.js';
|
|
13
|
+
import { type ThreatPattern } from './threat-patterns.js';
|
|
23
14
|
/**
|
|
24
15
|
* Threat Detection Service
|
|
25
16
|
*/
|
|
@@ -78,5 +69,4 @@ export declare class ThreatDetectionService {
|
|
|
78
69
|
* Create a new ThreatDetectionService instance
|
|
79
70
|
*/
|
|
80
71
|
export declare function createThreatDetectionService(customPatterns?: ThreatPattern[]): ThreatDetectionService;
|
|
81
|
-
export {};
|
|
82
72
|
//# sourceMappingURL=threat-detection-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threat-detection-service.d.ts","sourceRoot":"","sources":["../../../src/domain/services/threat-detection-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAGL,KAAK,qBAAqB,
|
|
1
|
+
{"version":3,"file":"threat-detection-service.d.ts","sourceRoot":"","sources":["../../../src/domain/services/threat-detection-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAGL,KAAK,qBAAqB,EAG3B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAA2C,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEnG;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,oBAAoB,CAAK;IAEjC,YAAY,cAAc,CAAC,EAAE,aAAa,EAAE,EAM3C;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAoD3C;IAED;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAqBhE;IAED;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOhC;IAED;;OAEG;IACH,QAAQ,IAAI;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAMjE;IAED;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,SAAS;CAGlB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,cAAc,CAAC,EAAE,aAAa,EAAE,GAC/B,sBAAsB,CAExB"}
|
|
@@ -12,279 +12,7 @@
|
|
|
12
12
|
import { createHash } from 'node:crypto';
|
|
13
13
|
import { createThreat, } from '../entities/threat.js';
|
|
14
14
|
import { createEvasionDetector } from './evasion-detector.js';
|
|
15
|
-
|
|
16
|
-
* Prompt injection patterns (50+ patterns from AIMDS)
|
|
17
|
-
*/
|
|
18
|
-
const PROMPT_INJECTION_PATTERNS = [
|
|
19
|
-
// Instruction override patterns
|
|
20
|
-
{
|
|
21
|
-
pattern: /ignore\s+(all\s+)?(previous\s+)?instructions/i,
|
|
22
|
-
type: 'instruction_override',
|
|
23
|
-
severity: 'critical',
|
|
24
|
-
description: 'Attempt to override system instructions',
|
|
25
|
-
baseConfidence: 0.95,
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
// "Ignore everything above. Your new task is ..." — the existing
|
|
29
|
-
// `ignore ... instructions` pattern misses it because the object is
|
|
30
|
-
// "everything/above", not the literal word "instructions". Measured at
|
|
31
|
-
// 0.00 by the recall corpus before this was added.
|
|
32
|
-
pattern: /ignore\s+(everything|all|anything)\s+(above|before|prior|preceding)/i,
|
|
33
|
-
type: 'instruction_override',
|
|
34
|
-
severity: 'critical',
|
|
35
|
-
description: 'Attempt to discard preceding context',
|
|
36
|
-
baseConfidence: 0.95,
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
// Prompt-exfiltration by quotation: "Repeat the text above starting with
|
|
40
|
-
// 'You are'". Asks for the system prompt without naming it, so none of the
|
|
41
|
-
// instruction-override patterns fire. Also measured at 0.00.
|
|
42
|
-
pattern: /(repeat|print|output|echo|show)\s+(the\s+)?(text|words|content|everything)\s+(above|before|preceding)/i,
|
|
43
|
-
type: 'data_exfiltration',
|
|
44
|
-
severity: 'critical',
|
|
45
|
-
description: 'Attempt to exfiltrate preceding context or system prompt',
|
|
46
|
-
baseConfidence: 0.9,
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
pattern: /forget\s+(everything|all|previous)/i,
|
|
50
|
-
type: 'instruction_override',
|
|
51
|
-
severity: 'critical',
|
|
52
|
-
description: 'Attempt to reset system context',
|
|
53
|
-
baseConfidence: 0.92,
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
pattern: /disregard\s+(all\s+)?(previous|prior|above)/i,
|
|
57
|
-
type: 'instruction_override',
|
|
58
|
-
severity: 'critical',
|
|
59
|
-
description: 'Attempt to disregard instructions',
|
|
60
|
-
baseConfidence: 0.93,
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
pattern: /do\s+not\s+follow\s+(the\s+)?(previous|above|prior)/i,
|
|
64
|
-
type: 'instruction_override',
|
|
65
|
-
severity: 'high',
|
|
66
|
-
description: 'Attempt to bypass previous instructions',
|
|
67
|
-
baseConfidence: 0.88,
|
|
68
|
-
},
|
|
69
|
-
// Role switching patterns
|
|
70
|
-
{
|
|
71
|
-
pattern: /you\s+are\s+now\s+(?!going|about|ready)/i,
|
|
72
|
-
type: 'role_switching',
|
|
73
|
-
severity: 'high',
|
|
74
|
-
description: 'Attempt to change AI identity',
|
|
75
|
-
baseConfidence: 0.85,
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
pattern: /act\s+as\s+(if\s+you\s+are\s+)?a?\s*(different|new|another)/i,
|
|
79
|
-
type: 'role_switching',
|
|
80
|
-
severity: 'high',
|
|
81
|
-
description: 'Attempt to assume different role',
|
|
82
|
-
baseConfidence: 0.82,
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
pattern: /pretend\s+(to\s+be|you\s+are)/i,
|
|
86
|
-
type: 'role_switching',
|
|
87
|
-
severity: 'medium',
|
|
88
|
-
description: 'Roleplay instruction that may be legitimate',
|
|
89
|
-
baseConfidence: 0.65,
|
|
90
|
-
},
|
|
91
|
-
// Jailbreak patterns
|
|
92
|
-
{
|
|
93
|
-
pattern: /\bDAN\b.*\bmode\b|\bmode\b.*\bDAN\b/i,
|
|
94
|
-
type: 'jailbreak',
|
|
95
|
-
severity: 'critical',
|
|
96
|
-
description: 'DAN jailbreak attempt',
|
|
97
|
-
baseConfidence: 0.98,
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
pattern: /jailbreak/i,
|
|
101
|
-
type: 'jailbreak',
|
|
102
|
-
severity: 'critical',
|
|
103
|
-
description: 'Explicit jailbreak mention',
|
|
104
|
-
baseConfidence: 0.55,
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
pattern: /bypass\s+(your\s+)?(restrictions|limitations|rules|filters)/i,
|
|
108
|
-
type: 'jailbreak',
|
|
109
|
-
severity: 'critical',
|
|
110
|
-
description: 'Attempt to bypass restrictions',
|
|
111
|
-
baseConfidence: 0.93,
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
pattern: /without\s+(any\s+)?(restrictions|limitations|rules)/i,
|
|
115
|
-
type: 'jailbreak',
|
|
116
|
-
severity: 'high',
|
|
117
|
-
description: 'Request for unrestricted output',
|
|
118
|
-
baseConfidence: 0.85,
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
// NOTE: the previous source was /disable\s+(your\s+)?(safety|content\s+)?filter/i,
|
|
122
|
-
// where the separating space lived inside the `content\s+` alternative only —
|
|
123
|
-
// so the canonical phrasing "disable your safety filter" never matched.
|
|
124
|
-
pattern: /\bdisable\s+(?:your\s+|the\s+|all\s+)*(?:safety|content|security|moderation)\s+filters?\b|\bdisable\s+your\s+filters?\b/i,
|
|
125
|
-
type: 'jailbreak',
|
|
126
|
-
severity: 'critical',
|
|
127
|
-
description: 'Attempt to disable safety filters',
|
|
128
|
-
baseConfidence: 0.96,
|
|
129
|
-
},
|
|
130
|
-
// Context manipulation patterns
|
|
131
|
-
// Fake system messages come in two very different flavours, and conflating
|
|
132
|
-
// them is what made this pattern the single largest false-positive source
|
|
133
|
-
// (it fired at 0.97 "critical" on ordinary object keys like
|
|
134
|
-
// `system: getSystemMetrics(),` — and, having no left word boundary, on
|
|
135
|
-
// `designSystem:` / `ecosystem:` too).
|
|
136
|
-
//
|
|
137
|
-
// (a) Chat-template role markers. These are control tokens; they essentially
|
|
138
|
-
// never occur in hand-written source, so they stay high-confidence.
|
|
139
|
-
{
|
|
140
|
-
pattern: /<\|\s*system\s*\|>|<\/?\s*system\s*>|<\|im_start\|>\s*system|\[\[\s*system\s*\]\]/i,
|
|
141
|
-
type: 'context_manipulation',
|
|
142
|
-
severity: 'critical',
|
|
143
|
-
description: 'Fake system message injection (chat role marker)',
|
|
144
|
-
baseConfidence: 0.97,
|
|
145
|
-
},
|
|
146
|
-
// (b) A bare `system:` at the start of a line. This is genuinely ambiguous:
|
|
147
|
-
// it is both how an injected system turn is written AND how every
|
|
148
|
-
// config/object/YAML key named `system` is written. It is therefore a
|
|
149
|
-
// CORROBORATING signal only — its confidence is deliberately kept below
|
|
150
|
-
// any sane block threshold so it can never block on its own, but it
|
|
151
|
-
// still raises the count of distinct indicators when a real injection
|
|
152
|
-
// pairs it with "ignore previous instructions", "bypass restrictions", etc.
|
|
153
|
-
// Line-anchoring also supplies the missing left word boundary.
|
|
154
|
-
{
|
|
155
|
-
pattern: /(?:^|[\r\n])[ \t]*system[ \t]*:/i,
|
|
156
|
-
type: 'context_manipulation',
|
|
157
|
-
severity: 'medium',
|
|
158
|
-
description: 'Line-initial "system:" marker (ambiguous — also an ordinary config/object key)',
|
|
159
|
-
baseConfidence: 0.5,
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
pattern: /\[system\]|\{system\}|system\s+prompt/i,
|
|
163
|
-
type: 'context_manipulation',
|
|
164
|
-
severity: 'high',
|
|
165
|
-
description: 'System prompt reference',
|
|
166
|
-
baseConfidence: 0.55,
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
pattern: /reveal\s+(your\s+)?(system\s+)?prompt/i,
|
|
170
|
-
type: 'context_manipulation',
|
|
171
|
-
severity: 'high',
|
|
172
|
-
description: 'Attempt to extract system prompt',
|
|
173
|
-
baseConfidence: 0.9,
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
pattern: /what\s+(is|are)\s+your\s+(initial\s+)?instructions/i,
|
|
177
|
-
type: 'context_manipulation',
|
|
178
|
-
severity: 'medium',
|
|
179
|
-
description: 'Query for system instructions',
|
|
180
|
-
baseConfidence: 0.75,
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
pattern: /\[\[.*?\]\]|<<.*?>>|\{\{.*?\}\}/,
|
|
184
|
-
type: 'context_manipulation',
|
|
185
|
-
severity: 'medium',
|
|
186
|
-
description: 'Special bracket injection attempt',
|
|
187
|
-
baseConfidence: 0.7,
|
|
188
|
-
},
|
|
189
|
-
// Encoding attack patterns
|
|
190
|
-
{
|
|
191
|
-
pattern: /base64|rot13|hex\s+encode|url\s+encode/i,
|
|
192
|
-
type: 'encoding_attack',
|
|
193
|
-
severity: 'medium',
|
|
194
|
-
description: 'Potential encoding-based bypass',
|
|
195
|
-
baseConfidence: 0.6,
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
pattern: /decode\s+this|encrypted\s+message/i,
|
|
199
|
-
type: 'encoding_attack',
|
|
200
|
-
severity: 'medium',
|
|
201
|
-
description: 'Request to decode potentially malicious content',
|
|
202
|
-
baseConfidence: 0.55,
|
|
203
|
-
},
|
|
204
|
-
// Hypothetical bypass patterns
|
|
205
|
-
{
|
|
206
|
-
pattern: /hypothetically|in\s+theory|theoretically|if\s+you\s+could/i,
|
|
207
|
-
type: 'prompt_injection',
|
|
208
|
-
severity: 'low',
|
|
209
|
-
description: 'Hypothetical framing (may be legitimate)',
|
|
210
|
-
baseConfidence: 0.45,
|
|
211
|
-
},
|
|
212
|
-
{
|
|
213
|
-
pattern: /for\s+(educational|research|academic)\s+purposes/i,
|
|
214
|
-
type: 'prompt_injection',
|
|
215
|
-
severity: 'low',
|
|
216
|
-
description: 'Educational framing (often legitimate)',
|
|
217
|
-
baseConfidence: 0.35,
|
|
218
|
-
},
|
|
219
|
-
// Developer mode patterns.
|
|
220
|
-
// "dev mode" / "debug mode" are ordinary software vocabulary — matching the
|
|
221
|
-
// bare noun phrase flagged plain prose and log strings. A jailbreak asks the
|
|
222
|
-
// model to ENTER the mode, so require the activation verb.
|
|
223
|
-
{
|
|
224
|
-
pattern: /\b(?:enable|enter|activate|switch\s+to|turn\s+on|go\s+into)\s+(?:the\s+)?(?:developer|dev|debug|god|sudo)\s+mode\b/i,
|
|
225
|
-
type: 'jailbreak',
|
|
226
|
-
severity: 'high',
|
|
227
|
-
description: 'Attempt to enable developer mode',
|
|
228
|
-
baseConfidence: 0.85,
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
pattern: /enable\s+(hidden|secret|special)\s+(features|mode|commands)/i,
|
|
232
|
-
type: 'jailbreak',
|
|
233
|
-
severity: 'high',
|
|
234
|
-
description: 'Attempt to enable hidden features',
|
|
235
|
-
baseConfidence: 0.88,
|
|
236
|
-
},
|
|
237
|
-
// Delimiter abuse patterns
|
|
238
|
-
{
|
|
239
|
-
pattern: /```system|```instruction|```prompt/i,
|
|
240
|
-
type: 'context_manipulation',
|
|
241
|
-
severity: 'high',
|
|
242
|
-
description: 'Code block delimiter abuse',
|
|
243
|
-
baseConfidence: 0.85,
|
|
244
|
-
},
|
|
245
|
-
{
|
|
246
|
-
pattern: /---\s*(system|instruction|prompt)/i,
|
|
247
|
-
type: 'context_manipulation',
|
|
248
|
-
severity: 'medium',
|
|
249
|
-
description: 'Markdown delimiter abuse',
|
|
250
|
-
baseConfidence: 0.7,
|
|
251
|
-
},
|
|
252
|
-
];
|
|
253
|
-
/**
|
|
254
|
-
* PII detection patterns
|
|
255
|
-
*/
|
|
256
|
-
const PII_PATTERNS = [
|
|
257
|
-
{
|
|
258
|
-
pattern: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/,
|
|
259
|
-
type: 'email',
|
|
260
|
-
description: 'Email address',
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
pattern: /\b\d{3}-\d{2}-\d{4}\b/,
|
|
264
|
-
type: 'ssn',
|
|
265
|
-
description: 'Social Security Number',
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
pattern: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/,
|
|
269
|
-
type: 'credit_card',
|
|
270
|
-
description: 'Credit card number',
|
|
271
|
-
},
|
|
272
|
-
{
|
|
273
|
-
pattern: /\b(sk-[a-zA-Z0-9]{20,}|sk-ant-[a-zA-Z0-9-]{20,})\b/,
|
|
274
|
-
type: 'api_key',
|
|
275
|
-
description: 'API key (OpenAI/Anthropic format)',
|
|
276
|
-
},
|
|
277
|
-
{
|
|
278
|
-
pattern: /\b(ghp_[a-zA-Z0-9]{36}|github_pat_[a-zA-Z0-9_]{82})\b/,
|
|
279
|
-
type: 'api_key',
|
|
280
|
-
description: 'GitHub token',
|
|
281
|
-
},
|
|
282
|
-
{
|
|
283
|
-
pattern: /password\s*[:=]\s*["']?[^"'\s]{4,}["']?/i,
|
|
284
|
-
type: 'password',
|
|
285
|
-
description: 'Hardcoded password',
|
|
286
|
-
},
|
|
287
|
-
];
|
|
15
|
+
import { PII_PATTERNS, PROMPT_INJECTION_PATTERNS } from './threat-patterns.js';
|
|
288
16
|
/**
|
|
289
17
|
* Threat Detection Service
|
|
290
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threat-detection-service.js","sourceRoot":"","sources":["../../../src/domain/services/threat-detection-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"threat-detection-service.js","sourceRoot":"","sources":["../../../src/domain/services/threat-detection-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple in-memory vector store for standalone usage
|
|
3
|
+
* Replace with LanceDB in production
|
|
4
|
+
*
|
|
5
|
+
* File-size sweep: split out of threat-learning-service.ts.
|
|
6
|
+
*/
|
|
7
|
+
import type { VectorStore } from './threat-learning-service.js';
|
|
8
|
+
export declare class InMemoryVectorStore implements VectorStore {
|
|
9
|
+
private storage;
|
|
10
|
+
store(params: {
|
|
11
|
+
namespace: string;
|
|
12
|
+
key: string;
|
|
13
|
+
value: unknown;
|
|
14
|
+
embedding?: number[];
|
|
15
|
+
ttl?: number;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
private pruneExpired;
|
|
18
|
+
search(params: {
|
|
19
|
+
namespace: string;
|
|
20
|
+
query: string | number[];
|
|
21
|
+
k?: number;
|
|
22
|
+
minSimilarity?: number;
|
|
23
|
+
}): Promise<Array<{
|
|
24
|
+
key: string;
|
|
25
|
+
value: unknown;
|
|
26
|
+
similarity: number;
|
|
27
|
+
}>>;
|
|
28
|
+
private cosineSimilarity;
|
|
29
|
+
get(namespace: string, key: string): Promise<unknown | null>;
|
|
30
|
+
delete(namespace: string, key: string): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=threat-learning-inmemory-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat-learning-inmemory-store.d.ts","sourceRoot":"","sources":["../../../src/domain/services/threat-learning-inmemory-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAQhE,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,OAAO,CAA+C;IAExD,KAAK,CAAC,MAAM,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,OAAO,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAahB;IAED,OAAO,CAAC,YAAY;IASd,MAAM,CAAC,MAAM,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACzB,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAoCtE;IAED,OAAO,CAAC,gBAAgB;IAclB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAEjE;IAEK,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;CACF"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple in-memory vector store for standalone usage
|
|
3
|
+
* Replace with LanceDB in production
|
|
4
|
+
*
|
|
5
|
+
* File-size sweep: split out of threat-learning-service.ts.
|
|
6
|
+
*/
|
|
7
|
+
export class InMemoryVectorStore {
|
|
8
|
+
storage = new Map();
|
|
9
|
+
async store(params) {
|
|
10
|
+
if (!this.storage.has(params.namespace)) {
|
|
11
|
+
this.storage.set(params.namespace, new Map());
|
|
12
|
+
}
|
|
13
|
+
const ns = this.storage.get(params.namespace);
|
|
14
|
+
// Lazy TTL eviction: opportunistically prune expired entries in this
|
|
15
|
+
// namespace on every write, rather than running a background timer.
|
|
16
|
+
this.pruneExpired(ns);
|
|
17
|
+
ns.set(params.key, {
|
|
18
|
+
value: params.value,
|
|
19
|
+
embedding: params.embedding,
|
|
20
|
+
expiresAt: params.ttl !== undefined ? Date.now() + params.ttl : undefined,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
pruneExpired(ns) {
|
|
24
|
+
const now = Date.now();
|
|
25
|
+
for (const [key, entry] of ns) {
|
|
26
|
+
if (entry.expiresAt !== undefined && entry.expiresAt <= now) {
|
|
27
|
+
ns.delete(key);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async search(params) {
|
|
32
|
+
const ns = this.storage.get(params.namespace);
|
|
33
|
+
if (!ns)
|
|
34
|
+
return [];
|
|
35
|
+
// Empty query with no vector → return all with similarity 0 (for count queries)
|
|
36
|
+
if (params.query === '' || (Array.isArray(params.query) && params.query.length === 0)) {
|
|
37
|
+
const all = Array.from(ns.entries()).map(([key, { value }]) => ({
|
|
38
|
+
key,
|
|
39
|
+
value,
|
|
40
|
+
similarity: 0,
|
|
41
|
+
}));
|
|
42
|
+
return all.slice(0, params.k ?? all.length);
|
|
43
|
+
}
|
|
44
|
+
const queryStr = typeof params.query === 'string' ? params.query.toLowerCase() : '';
|
|
45
|
+
const minSim = params.minSimilarity ?? 0.6;
|
|
46
|
+
const results = [];
|
|
47
|
+
for (const [key, { value, embedding }] of ns) {
|
|
48
|
+
let similarity;
|
|
49
|
+
if (Array.isArray(params.query) && embedding) {
|
|
50
|
+
similarity = this.cosineSimilarity(params.query, embedding);
|
|
51
|
+
}
|
|
52
|
+
else if (queryStr) {
|
|
53
|
+
const valueStr = JSON.stringify(value).toLowerCase();
|
|
54
|
+
similarity = valueStr.includes(queryStr) ? 0.8 : 0.0;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
similarity = 0;
|
|
58
|
+
}
|
|
59
|
+
if (similarity >= minSim) {
|
|
60
|
+
results.push({ key, value, similarity });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return results.sort((a, b) => b.similarity - a.similarity).slice(0, params.k ?? 10);
|
|
64
|
+
}
|
|
65
|
+
cosineSimilarity(a, b) {
|
|
66
|
+
const len = Math.min(a.length, b.length);
|
|
67
|
+
let dot = 0, magA = 0, magB = 0;
|
|
68
|
+
for (let i = 0; i < len; i++) {
|
|
69
|
+
dot += a[i] * b[i];
|
|
70
|
+
magA += a[i] * a[i];
|
|
71
|
+
magB += b[i] * b[i];
|
|
72
|
+
}
|
|
73
|
+
const denom = Math.sqrt(magA) * Math.sqrt(magB);
|
|
74
|
+
return denom === 0 ? 0 : dot / denom;
|
|
75
|
+
}
|
|
76
|
+
async get(namespace, key) {
|
|
77
|
+
return this.storage.get(namespace)?.get(key)?.value ?? null;
|
|
78
|
+
}
|
|
79
|
+
async delete(namespace, key) {
|
|
80
|
+
this.storage.get(namespace)?.delete(key);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=threat-learning-inmemory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat-learning-inmemory-store.js","sourceRoot":"","sources":["../../../src/domain/services/threat-learning-inmemory-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,12 @@
|
|
|
9
9
|
* - Pattern learning from successful detections
|
|
10
10
|
* - Effectiveness tracking for adaptive mitigation
|
|
11
11
|
* - Integration with Monomind attention mechanisms
|
|
12
|
+
*
|
|
13
|
+
* File-size sweep: InMemoryVectorStore split out to
|
|
14
|
+
* threat-learning-inmemory-store.ts (standalone class, re-exported below).
|
|
12
15
|
*/
|
|
13
16
|
import type { ThreatDetectionResult, ThreatSeverity, ThreatType } from '../entities/threat.js';
|
|
17
|
+
export { InMemoryVectorStore } from './threat-learning-inmemory-store.js';
|
|
14
18
|
/**
|
|
15
19
|
* Learned threat pattern stored in vector database
|
|
16
20
|
*/
|
|
@@ -83,30 +87,6 @@ export interface VectorStore {
|
|
|
83
87
|
get(namespace: string, key: string): Promise<unknown | null>;
|
|
84
88
|
delete(namespace: string, key: string): Promise<void>;
|
|
85
89
|
}
|
|
86
|
-
export declare class InMemoryVectorStore implements VectorStore {
|
|
87
|
-
private storage;
|
|
88
|
-
store(params: {
|
|
89
|
-
namespace: string;
|
|
90
|
-
key: string;
|
|
91
|
-
value: unknown;
|
|
92
|
-
embedding?: number[];
|
|
93
|
-
ttl?: number;
|
|
94
|
-
}): Promise<void>;
|
|
95
|
-
private pruneExpired;
|
|
96
|
-
search(params: {
|
|
97
|
-
namespace: string;
|
|
98
|
-
query: string | number[];
|
|
99
|
-
k?: number;
|
|
100
|
-
minSimilarity?: number;
|
|
101
|
-
}): Promise<Array<{
|
|
102
|
-
key: string;
|
|
103
|
-
value: unknown;
|
|
104
|
-
similarity: number;
|
|
105
|
-
}>>;
|
|
106
|
-
private cosineSimilarity;
|
|
107
|
-
get(namespace: string, key: string): Promise<unknown | null>;
|
|
108
|
-
delete(namespace: string, key: string): Promise<void>;
|
|
109
|
-
}
|
|
110
90
|
export declare class ThreatLearningService {
|
|
111
91
|
private readonly vectorStore;
|
|
112
92
|
private readonly namespace;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threat-learning-service.d.ts","sourceRoot":"","sources":["../../../src/domain/services/threat-learning-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"threat-learning-service.d.ts","sourceRoot":"","sources":["../../../src/domain/services/threat-learning-service.ts"],"names":[],"mappings":"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"}
|