couchloop-eq-mcp 1.0.4 → 1.1.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 +24 -11
- package/dist/developer/analyzers/bloat-detector.d.ts +89 -0
- package/dist/developer/analyzers/bloat-detector.d.ts.map +1 -0
- package/dist/developer/analyzers/bloat-detector.js +483 -0
- package/dist/developer/analyzers/bloat-detector.js.map +1 -0
- package/dist/developer/backup/auto-backup.d.ts +96 -0
- package/dist/developer/backup/auto-backup.d.ts.map +1 -0
- package/dist/developer/backup/auto-backup.js +346 -0
- package/dist/developer/backup/auto-backup.js.map +1 -0
- package/dist/developer/blockers/package-blocker.d.ts +33 -0
- package/dist/developer/blockers/package-blocker.d.ts.map +1 -0
- package/dist/developer/blockers/package-blocker.js +224 -0
- package/dist/developer/blockers/package-blocker.js.map +1 -0
- package/dist/developer/evaluators/ai-error-preventer.d.ts +54 -0
- package/dist/developer/evaluators/ai-error-preventer.d.ts.map +1 -0
- package/dist/developer/evaluators/ai-error-preventer.js +270 -0
- package/dist/developer/evaluators/ai-error-preventer.js.map +1 -0
- package/dist/developer/evaluators/build-context-detector.d.ts +44 -0
- package/dist/developer/evaluators/build-context-detector.d.ts.map +1 -0
- package/dist/developer/evaluators/build-context-detector.js +258 -0
- package/dist/developer/evaluators/build-context-detector.js.map +1 -0
- package/dist/developer/evaluators/package-evaluator.d.ts +37 -0
- package/dist/developer/evaluators/package-evaluator.d.ts.map +1 -0
- package/dist/developer/evaluators/package-evaluator.js +278 -0
- package/dist/developer/evaluators/package-evaluator.js.map +1 -0
- package/dist/developer/guards/file-guardian.d.ts +79 -0
- package/dist/developer/guards/file-guardian.d.ts.map +1 -0
- package/dist/developer/guards/file-guardian.js +309 -0
- package/dist/developer/guards/file-guardian.js.map +1 -0
- package/dist/developer/managers/context-manager.d.ts +61 -0
- package/dist/developer/managers/context-manager.d.ts.map +1 -0
- package/dist/developer/managers/context-manager.js +302 -0
- package/dist/developer/managers/context-manager.js.map +1 -0
- package/dist/developer/metrics/complexity-calculator.d.ts +52 -0
- package/dist/developer/metrics/complexity-calculator.d.ts.map +1 -0
- package/dist/developer/metrics/complexity-calculator.js +259 -0
- package/dist/developer/metrics/complexity-calculator.js.map +1 -0
- package/dist/developer/reports/review-summary.d.ts +49 -0
- package/dist/developer/reports/review-summary.d.ts.map +1 -0
- package/dist/developer/reports/review-summary.js +249 -0
- package/dist/developer/reports/review-summary.js.map +1 -0
- package/dist/developer/scanners/review-assistant.d.ts +41 -0
- package/dist/developer/scanners/review-assistant.d.ts.map +1 -0
- package/dist/developer/scanners/review-assistant.js +374 -0
- package/dist/developer/scanners/review-assistant.js.map +1 -0
- package/dist/developer/scanners/secret-scanner.d.ts +66 -0
- package/dist/developer/scanners/secret-scanner.d.ts.map +1 -0
- package/dist/developer/scanners/secret-scanner.js +287 -0
- package/dist/developer/scanners/secret-scanner.js.map +1 -0
- package/dist/developer/scanners/sql-injection-detector.d.ts +54 -0
- package/dist/developer/scanners/sql-injection-detector.d.ts.map +1 -0
- package/dist/developer/scanners/sql-injection-detector.js +174 -0
- package/dist/developer/scanners/sql-injection-detector.js.map +1 -0
- package/dist/developer/scanners/xss-detector.d.ts +60 -0
- package/dist/developer/scanners/xss-detector.d.ts.map +1 -0
- package/dist/developer/scanners/xss-detector.js +229 -0
- package/dist/developer/scanners/xss-detector.js.map +1 -0
- package/dist/developer/types/ai-errors.d.ts +34 -0
- package/dist/developer/types/ai-errors.d.ts.map +1 -0
- package/dist/developer/types/ai-errors.js +271 -0
- package/dist/developer/types/ai-errors.js.map +1 -0
- package/dist/developer/types/package.d.ts +32 -0
- package/dist/developer/types/package.d.ts.map +1 -0
- package/dist/developer/types/package.js +5 -0
- package/dist/developer/types/package.js.map +1 -0
- package/dist/developer/updaters/dependency-updater.d.ts +102 -0
- package/dist/developer/updaters/dependency-updater.d.ts.map +1 -0
- package/dist/developer/updaters/dependency-updater.js +472 -0
- package/dist/developer/updaters/dependency-updater.js.map +1 -0
- package/dist/developer/validators/cargo.d.ts +14 -0
- package/dist/developer/validators/cargo.d.ts.map +1 -0
- package/dist/developer/validators/cargo.js +132 -0
- package/dist/developer/validators/cargo.js.map +1 -0
- package/dist/developer/validators/gem.d.ts +14 -0
- package/dist/developer/validators/gem.d.ts.map +1 -0
- package/dist/developer/validators/gem.js +85 -0
- package/dist/developer/validators/gem.js.map +1 -0
- package/dist/developer/validators/go.d.ts +14 -0
- package/dist/developer/validators/go.d.ts.map +1 -0
- package/dist/developer/validators/go.js +138 -0
- package/dist/developer/validators/go.js.map +1 -0
- package/dist/developer/validators/maven.d.ts +14 -0
- package/dist/developer/validators/maven.d.ts.map +1 -0
- package/dist/developer/validators/maven.js +99 -0
- package/dist/developer/validators/maven.js.map +1 -0
- package/dist/developer/validators/npm.d.ts +14 -0
- package/dist/developer/validators/npm.d.ts.map +1 -0
- package/dist/developer/validators/npm.js +96 -0
- package/dist/developer/validators/npm.js.map +1 -0
- package/dist/developer/validators/nuget.d.ts +15 -0
- package/dist/developer/validators/nuget.d.ts.map +1 -0
- package/dist/developer/validators/nuget.js +107 -0
- package/dist/developer/validators/nuget.js.map +1 -0
- package/dist/developer/validators/pypi.d.ts +14 -0
- package/dist/developer/validators/pypi.d.ts.map +1 -0
- package/dist/developer/validators/pypi.js +118 -0
- package/dist/developer/validators/pypi.js.map +1 -0
- package/dist/developer/validators/registry-manager.d.ts +37 -0
- package/dist/developer/validators/registry-manager.d.ts.map +1 -0
- package/dist/developer/validators/registry-manager.js +89 -0
- package/dist/developer/validators/registry-manager.js.map +1 -0
- package/dist/developer/validators/version-checker.d.ts +145 -0
- package/dist/developer/validators/version-checker.d.ts.map +1 -0
- package/dist/developer/validators/version-checker.js +529 -0
- package/dist/developer/validators/version-checker.js.map +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/auth.d.ts +7 -9
- package/dist/server/middleware/auth.d.ts.map +1 -1
- package/dist/server/middleware/auth.js.map +1 -1
- package/dist/tools/check-versions.d.ts +100 -0
- package/dist/tools/check-versions.d.ts.map +1 -0
- package/dist/tools/check-versions.js +328 -0
- package/dist/tools/check-versions.js.map +1 -0
- package/dist/tools/detect-code-smell.d.ts +9 -0
- package/dist/tools/detect-code-smell.d.ts.map +1 -0
- package/dist/tools/detect-code-smell.js +231 -0
- package/dist/tools/detect-code-smell.js.map +1 -0
- package/dist/tools/index.d.ts +471 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +178 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/journey.js +1 -1
- package/dist/tools/journey.js.map +1 -1
- package/dist/tools/pre-review-code.d.ts +71 -0
- package/dist/tools/pre-review-code.d.ts.map +1 -0
- package/dist/tools/pre-review-code.js +159 -0
- package/dist/tools/pre-review-code.js.map +1 -0
- package/dist/tools/preserve-context.d.ts +27 -0
- package/dist/tools/preserve-context.d.ts.map +1 -0
- package/dist/tools/preserve-context.js +98 -0
- package/dist/tools/preserve-context.js.map +1 -0
- package/dist/tools/protect-files.d.ts +224 -0
- package/dist/tools/protect-files.d.ts.map +1 -0
- package/dist/tools/protect-files.js +286 -0
- package/dist/tools/protect-files.js.map +1 -0
- package/dist/tools/scan-security.d.ts +38 -0
- package/dist/tools/scan-security.d.ts.map +1 -0
- package/dist/tools/scan-security.js +237 -0
- package/dist/tools/scan-security.js.map +1 -0
- package/dist/tools/validate_packages.d.ts +8 -0
- package/dist/tools/validate_packages.d.ts.map +1 -0
- package/dist/tools/validate_packages.js +159 -0
- package/dist/tools/validate_packages.js.map +1 -0
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/auth.js +1 -2
- package/dist/types/auth.js.map +1 -1
- package/dist/types/context.d.ts +46 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +17 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/file-protection.d.ts +50 -0
- package/dist/types/file-protection.d.ts.map +1 -0
- package/dist/types/file-protection.js +9 -0
- package/dist/types/file-protection.js.map +1 -0
- package/dist/utils/errorHandler.d.ts.map +1 -1
- package/dist/utils/errorHandler.js +2 -1
- package/dist/utils/errorHandler.js.map +1 -1
- package/package.json +30 -4
- package/dist/db/migrate.d.ts +0 -4
- package/dist/db/migrate.d.ts.map +0 -1
- package/dist/db/migrate.js +0 -34
- package/dist/db/migrate.js.map +0 -1
- package/dist/db/migrations/schema.d.ts +0 -1074
- package/dist/db/migrations/schema.d.ts.map +0 -1
- package/dist/db/migrations/schema.js +0 -160
- package/dist/db/migrations/schema.js.map +0 -1
- package/dist/db/schema.d.ts +0 -1576
- package/dist/db/schema.d.ts.map +0 -1
- package/dist/db/schema.js +0 -204
- package/dist/db/schema.js.map +0 -1
- package/dist/db/seed.d.ts +0 -4
- package/dist/db/seed.d.ts.map +0 -1
- package/dist/db/seed.js +0 -57
- package/dist/db/seed.js.map +0 -1
- package/dist/db/seedOAuth.d.ts +0 -4
- package/dist/db/seedOAuth.d.ts.map +0 -1
- package/dist/db/seedOAuth.js +0 -76
- package/dist/db/seedOAuth.js.map +0 -1
- package/dist/governance/config.d.ts +0 -66
- package/dist/governance/config.d.ts.map +0 -1
- package/dist/governance/config.js +0 -238
- package/dist/governance/config.js.map +0 -1
- package/dist/governance/detectors/hallucination.d.ts +0 -61
- package/dist/governance/detectors/hallucination.d.ts.map +0 -1
- package/dist/governance/detectors/hallucination.js +0 -338
- package/dist/governance/detectors/hallucination.js.map +0 -1
- package/dist/governance/detectors/inconsistency.d.ts +0 -99
- package/dist/governance/detectors/inconsistency.d.ts.map +0 -1
- package/dist/governance/detectors/inconsistency.js +0 -548
- package/dist/governance/detectors/inconsistency.js.map +0 -1
- package/dist/governance/detectors/toneDrift.d.ts +0 -63
- package/dist/governance/detectors/toneDrift.d.ts.map +0 -1
- package/dist/governance/detectors/toneDrift.js +0 -421
- package/dist/governance/detectors/toneDrift.js.map +0 -1
- package/dist/governance/detectors/unsafeReasoning.d.ts +0 -54
- package/dist/governance/detectors/unsafeReasoning.d.ts.map +0 -1
- package/dist/governance/detectors/unsafeReasoning.js +0 -473
- package/dist/governance/detectors/unsafeReasoning.js.map +0 -1
- package/dist/governance/evaluationEngine.d.ts +0 -112
- package/dist/governance/evaluationEngine.d.ts.map +0 -1
- package/dist/governance/evaluationEngine.js +0 -265
- package/dist/governance/evaluationEngine.js.map +0 -1
- package/dist/governance/intervention.d.ts +0 -81
- package/dist/governance/intervention.d.ts.map +0 -1
- package/dist/governance/intervention.js +0 -405
- package/dist/governance/intervention.js.map +0 -1
- package/dist/server/oauth/anomalyDetection.d.ts +0 -146
- package/dist/server/oauth/anomalyDetection.d.ts.map +0 -1
- package/dist/server/oauth/anomalyDetection.js +0 -405
- package/dist/server/oauth/anomalyDetection.js.map +0 -1
- package/dist/server/oauth/authServer.d.ts +0 -61
- package/dist/server/oauth/authServer.d.ts.map +0 -1
- package/dist/server/oauth/authServer.js +0 -283
- package/dist/server/oauth/authServer.js.map +0 -1
- package/dist/server/oauth/dpop.d.ts +0 -135
- package/dist/server/oauth/dpop.d.ts.map +0 -1
- package/dist/server/oauth/dpop.js +0 -338
- package/dist/server/oauth/dpop.js.map +0 -1
- package/dist/server/oauth/gdpr/consent.d.ts +0 -173
- package/dist/server/oauth/gdpr/consent.d.ts.map +0 -1
- package/dist/server/oauth/gdpr/consent.js +0 -388
- package/dist/server/oauth/gdpr/consent.js.map +0 -1
- package/dist/server/oauth/gdpr/dataPortability.d.ts +0 -214
- package/dist/server/oauth/gdpr/dataPortability.d.ts.map +0 -1
- package/dist/server/oauth/gdpr/dataPortability.js +0 -486
- package/dist/server/oauth/gdpr/dataPortability.js.map +0 -1
- package/dist/server/oauth/gdpr/index.d.ts +0 -103
- package/dist/server/oauth/gdpr/index.d.ts.map +0 -1
- package/dist/server/oauth/gdpr/index.js +0 -273
- package/dist/server/oauth/gdpr/index.js.map +0 -1
- package/dist/server/oauth/gdpr/rightToErasure.d.ts +0 -184
- package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +0 -1
- package/dist/server/oauth/gdpr/rightToErasure.js +0 -527
- package/dist/server/oauth/gdpr/rightToErasure.js.map +0 -1
- package/dist/server/oauth/monitoring/securityMonitor.d.ts +0 -218
- package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +0 -1
- package/dist/server/oauth/monitoring/securityMonitor.js +0 -615
- package/dist/server/oauth/monitoring/securityMonitor.js.map +0 -1
- package/dist/server/oauth/pkce.d.ts +0 -61
- package/dist/server/oauth/pkce.d.ts.map +0 -1
- package/dist/server/oauth/pkce.js +0 -157
- package/dist/server/oauth/pkce.js.map +0 -1
- package/dist/server/oauth/providers/base.d.ts +0 -147
- package/dist/server/oauth/providers/base.d.ts.map +0 -1
- package/dist/server/oauth/providers/base.js +0 -312
- package/dist/server/oauth/providers/base.js.map +0 -1
- package/dist/server/oauth/providers/github.d.ts +0 -55
- package/dist/server/oauth/providers/github.d.ts.map +0 -1
- package/dist/server/oauth/providers/github.js +0 -225
- package/dist/server/oauth/providers/github.js.map +0 -1
- package/dist/server/oauth/providers/google.d.ts +0 -49
- package/dist/server/oauth/providers/google.d.ts.map +0 -1
- package/dist/server/oauth/providers/google.js +0 -153
- package/dist/server/oauth/providers/google.js.map +0 -1
- package/dist/server/oauth/providers/index.d.ts +0 -9
- package/dist/server/oauth/providers/index.d.ts.map +0 -1
- package/dist/server/oauth/providers/index.js +0 -24
- package/dist/server/oauth/providers/index.js.map +0 -1
- package/dist/server/oauth/refreshTokenRotation.d.ts +0 -114
- package/dist/server/oauth/refreshTokenRotation.d.ts.map +0 -1
- package/dist/server/oauth/refreshTokenRotation.js +0 -344
- package/dist/server/oauth/refreshTokenRotation.js.map +0 -1
- package/dist/server/oauth/security.d.ts +0 -101
- package/dist/server/oauth/security.d.ts.map +0 -1
- package/dist/server/oauth/security.js +0 -268
- package/dist/server/oauth/security.js.map +0 -1
- package/dist/server/oauth/tokenEncryption.d.ts +0 -80
- package/dist/server/oauth/tokenEncryption.d.ts.map +0 -1
- package/dist/server/oauth/tokenEncryption.js +0 -218
- package/dist/server/oauth/tokenEncryption.js.map +0 -1
- package/dist/tools/sendMessage-complex-backup.d.ts +0 -6
- package/dist/tools/sendMessage-complex-backup.d.ts.map +0 -1
- package/dist/tools/sendMessage-complex-backup.js +0 -545
- package/dist/tools/sendMessage-complex-backup.js.map +0 -1
- package/dist/tools/sendMessage-revised.d.ts +0 -11
- package/dist/tools/sendMessage-revised.d.ts.map +0 -1
- package/dist/tools/sendMessage-revised.js +0 -429
- package/dist/tools/sendMessage-revised.js.map +0 -1
- package/dist/tools/sendMessage-truly-simple.d.ts +0 -8
- package/dist/tools/sendMessage-truly-simple.d.ts.map +0 -1
- package/dist/tools/sendMessage-truly-simple.js +0 -299
- package/dist/tools/sendMessage-truly-simple.js.map +0 -1
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CouchLoop Behavioral Governance Layer - Configuration
|
|
3
|
-
*
|
|
4
|
-
* Central configuration management for governance rules, thresholds, and behaviors
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Default configuration for governance layer
|
|
8
|
-
*/
|
|
9
|
-
export const defaultConfig = {
|
|
10
|
-
enabled: true,
|
|
11
|
-
mode: 'enforce',
|
|
12
|
-
criteria: {
|
|
13
|
-
hallucination: {
|
|
14
|
-
enabled: true,
|
|
15
|
-
threshold: 0.7,
|
|
16
|
-
weight: 2.0,
|
|
17
|
-
patterns: [
|
|
18
|
-
'I have (direct|personal) experience',
|
|
19
|
-
'studies (consistently |always )?show',
|
|
20
|
-
"it's a (proven|established) fact that",
|
|
21
|
-
'everyone knows that',
|
|
22
|
-
'scientifically proven',
|
|
23
|
-
'(\\d+)% of (people|studies|research)',
|
|
24
|
-
'according to recent research',
|
|
25
|
-
'experts agree that'
|
|
26
|
-
]
|
|
27
|
-
},
|
|
28
|
-
inconsistency: {
|
|
29
|
-
enabled: true,
|
|
30
|
-
threshold: 0.7,
|
|
31
|
-
weight: 1.5,
|
|
32
|
-
metadata: {
|
|
33
|
-
lookbackLimit: 10, // Number of previous messages to check
|
|
34
|
-
semanticSimilarityThreshold: 0.8
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
toneDrift: {
|
|
38
|
-
enabled: true,
|
|
39
|
-
threshold: 0.6,
|
|
40
|
-
weight: 1.0,
|
|
41
|
-
patterns: [
|
|
42
|
-
'you must',
|
|
43
|
-
'you should definitely',
|
|
44
|
-
"don't worry about",
|
|
45
|
-
'everything will be (fine|okay|perfect)',
|
|
46
|
-
'you need to',
|
|
47
|
-
"I'm here for you",
|
|
48
|
-
'trust me',
|
|
49
|
-
'believe me',
|
|
50
|
-
'I understand exactly',
|
|
51
|
-
'I know how you feel'
|
|
52
|
-
]
|
|
53
|
-
},
|
|
54
|
-
unsafeReasoning: {
|
|
55
|
-
enabled: true,
|
|
56
|
-
threshold: 0.5,
|
|
57
|
-
weight: 3.0,
|
|
58
|
-
patterns: [
|
|
59
|
-
'stop taking your medication',
|
|
60
|
-
'you should definitely',
|
|
61
|
-
"don't tell (anyone|your)",
|
|
62
|
-
'this will cure',
|
|
63
|
-
'your (therapist|doctor) is wrong',
|
|
64
|
-
'ignore what they said',
|
|
65
|
-
'you don\'t need (therapy|treatment|help)',
|
|
66
|
-
'harm yourself',
|
|
67
|
-
'end (it all|your life)',
|
|
68
|
-
'nobody cares',
|
|
69
|
-
'give up',
|
|
70
|
-
'not worth living',
|
|
71
|
-
'better off without you'
|
|
72
|
-
]
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
interventionThresholds: {
|
|
76
|
-
block: 0.9, // Block response if confidence > 0.9
|
|
77
|
-
modify: 0.7, // Modify response if confidence > 0.7
|
|
78
|
-
warn: 0.5 // Warning threshold
|
|
79
|
-
},
|
|
80
|
-
fallbackResponses: {
|
|
81
|
-
crisis: "I notice this conversation is touching on some serious topics. If you're in crisis, please reach out to a crisis helpline: 988 (Suicide & Crisis Lifeline) or text 'HELLO' to 741741 (Crisis Text Line). Your safety is important.",
|
|
82
|
-
blocked: "I need to pause here. My response might not have been helpful for this conversation. Let's refocus on what would be most supportive for you right now. What would be helpful to explore?",
|
|
83
|
-
error: "I encountered an issue processing this response. Let me try to help you in a different way. What's most important for you to discuss right now?",
|
|
84
|
-
modified: "Let me rephrase that in a way that might be more helpful..."
|
|
85
|
-
},
|
|
86
|
-
performance: {
|
|
87
|
-
maxEvaluationTime: 1000, // 1 second max
|
|
88
|
-
cacheEnabled: true,
|
|
89
|
-
cacheTTL: 300, // 5 minutes
|
|
90
|
-
parallelEvaluation: true
|
|
91
|
-
},
|
|
92
|
-
logging: {
|
|
93
|
-
auditEnabled: true,
|
|
94
|
-
verboseLogging: process.env.NODE_ENV === 'development',
|
|
95
|
-
logFailedEvaluations: true,
|
|
96
|
-
logPassedEvaluations: false
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
/**
|
|
100
|
-
* Load configuration from environment or use defaults
|
|
101
|
-
*/
|
|
102
|
-
export function loadConfig() {
|
|
103
|
-
const config = { ...defaultConfig };
|
|
104
|
-
// Override from environment variables
|
|
105
|
-
if (process.env.GOVERNANCE_ENABLED === 'false') {
|
|
106
|
-
config.enabled = false;
|
|
107
|
-
}
|
|
108
|
-
if (process.env.GOVERNANCE_MODE) {
|
|
109
|
-
config.mode = process.env.GOVERNANCE_MODE;
|
|
110
|
-
}
|
|
111
|
-
// Load thresholds from environment
|
|
112
|
-
if (process.env.GOVERNANCE_BLOCK_THRESHOLD) {
|
|
113
|
-
config.interventionThresholds.block = parseFloat(process.env.GOVERNANCE_BLOCK_THRESHOLD);
|
|
114
|
-
}
|
|
115
|
-
if (process.env.GOVERNANCE_MODIFY_THRESHOLD) {
|
|
116
|
-
config.interventionThresholds.modify = parseFloat(process.env.GOVERNANCE_MODIFY_THRESHOLD);
|
|
117
|
-
}
|
|
118
|
-
if (process.env.GOVERNANCE_WARN_THRESHOLD) {
|
|
119
|
-
config.interventionThresholds.warn = parseFloat(process.env.GOVERNANCE_WARN_THRESHOLD);
|
|
120
|
-
}
|
|
121
|
-
// Load criterion-specific configs
|
|
122
|
-
if (process.env.GOVERNANCE_HALLUCINATION_ENABLED === 'false') {
|
|
123
|
-
config.criteria.hallucination.enabled = false;
|
|
124
|
-
}
|
|
125
|
-
if (process.env.GOVERNANCE_INCONSISTENCY_ENABLED === 'false') {
|
|
126
|
-
config.criteria.inconsistency.enabled = false;
|
|
127
|
-
}
|
|
128
|
-
if (process.env.GOVERNANCE_TONE_DRIFT_ENABLED === 'false') {
|
|
129
|
-
config.criteria.toneDrift.enabled = false;
|
|
130
|
-
}
|
|
131
|
-
if (process.env.GOVERNANCE_UNSAFE_REASONING_ENABLED === 'false') {
|
|
132
|
-
config.criteria.unsafeReasoning.enabled = false;
|
|
133
|
-
}
|
|
134
|
-
// Performance settings
|
|
135
|
-
if (process.env.GOVERNANCE_MAX_EVAL_TIME) {
|
|
136
|
-
config.performance.maxEvaluationTime = parseInt(process.env.GOVERNANCE_MAX_EVAL_TIME);
|
|
137
|
-
}
|
|
138
|
-
if (process.env.GOVERNANCE_CACHE_ENABLED === 'false') {
|
|
139
|
-
config.performance.cacheEnabled = false;
|
|
140
|
-
}
|
|
141
|
-
// Logging settings
|
|
142
|
-
if (process.env.GOVERNANCE_AUDIT_ENABLED === 'false') {
|
|
143
|
-
config.logging.auditEnabled = false;
|
|
144
|
-
}
|
|
145
|
-
if (process.env.GOVERNANCE_VERBOSE_LOGGING === 'true') {
|
|
146
|
-
config.logging.verboseLogging = true;
|
|
147
|
-
}
|
|
148
|
-
return config;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Validate configuration for consistency
|
|
152
|
-
*/
|
|
153
|
-
export function validateConfig(config) {
|
|
154
|
-
const errors = [];
|
|
155
|
-
// Check thresholds are in valid range
|
|
156
|
-
if (config.interventionThresholds.block < 0 || config.interventionThresholds.block > 1) {
|
|
157
|
-
errors.push('Block threshold must be between 0 and 1');
|
|
158
|
-
}
|
|
159
|
-
if (config.interventionThresholds.modify < 0 || config.interventionThresholds.modify > 1) {
|
|
160
|
-
errors.push('Modify threshold must be between 0 and 1');
|
|
161
|
-
}
|
|
162
|
-
if (config.interventionThresholds.warn < 0 || config.interventionThresholds.warn > 1) {
|
|
163
|
-
errors.push('Warn threshold must be between 0 and 1');
|
|
164
|
-
}
|
|
165
|
-
// Check thresholds are in correct order
|
|
166
|
-
if (config.interventionThresholds.block < config.interventionThresholds.modify) {
|
|
167
|
-
errors.push('Block threshold should be higher than modify threshold');
|
|
168
|
-
}
|
|
169
|
-
if (config.interventionThresholds.modify < config.interventionThresholds.warn) {
|
|
170
|
-
errors.push('Modify threshold should be higher than warn threshold');
|
|
171
|
-
}
|
|
172
|
-
// Check criterion thresholds
|
|
173
|
-
Object.entries(config.criteria).forEach(([name, criterion]) => {
|
|
174
|
-
if (criterion.threshold < 0 || criterion.threshold > 1) {
|
|
175
|
-
errors.push(`${name} threshold must be between 0 and 1`);
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
// Check performance settings
|
|
179
|
-
if (config.performance.maxEvaluationTime < 100) {
|
|
180
|
-
errors.push('Max evaluation time should be at least 100ms');
|
|
181
|
-
}
|
|
182
|
-
if (config.performance.cacheTTL < 0) {
|
|
183
|
-
errors.push('Cache TTL must be positive');
|
|
184
|
-
}
|
|
185
|
-
return {
|
|
186
|
-
valid: errors.length === 0,
|
|
187
|
-
errors
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Export configuration for a specific environment
|
|
192
|
-
*/
|
|
193
|
-
export function getConfigForEnvironment(env) {
|
|
194
|
-
const baseConfig = loadConfig();
|
|
195
|
-
switch (env) {
|
|
196
|
-
case 'development':
|
|
197
|
-
return {
|
|
198
|
-
...baseConfig,
|
|
199
|
-
mode: 'shadow', // Don't actually intervene in dev
|
|
200
|
-
logging: {
|
|
201
|
-
...baseConfig.logging,
|
|
202
|
-
verboseLogging: true,
|
|
203
|
-
logPassedEvaluations: true
|
|
204
|
-
}
|
|
205
|
-
};
|
|
206
|
-
case 'staging':
|
|
207
|
-
return {
|
|
208
|
-
...baseConfig,
|
|
209
|
-
mode: 'enforce',
|
|
210
|
-
interventionThresholds: {
|
|
211
|
-
...baseConfig.interventionThresholds,
|
|
212
|
-
block: 0.95, // More conservative in staging
|
|
213
|
-
modify: 0.8,
|
|
214
|
-
warn: 0.6
|
|
215
|
-
}
|
|
216
|
-
};
|
|
217
|
-
case 'production':
|
|
218
|
-
return {
|
|
219
|
-
...baseConfig,
|
|
220
|
-
mode: 'enforce',
|
|
221
|
-
performance: {
|
|
222
|
-
...baseConfig.performance,
|
|
223
|
-
maxEvaluationTime: 500, // Stricter performance requirements
|
|
224
|
-
cacheEnabled: true,
|
|
225
|
-
cacheTTL: 600 // 10 minutes
|
|
226
|
-
},
|
|
227
|
-
logging: {
|
|
228
|
-
...baseConfig.logging,
|
|
229
|
-
verboseLogging: false,
|
|
230
|
-
logPassedEvaluations: false
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
default:
|
|
234
|
-
return baseConfig;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
export default loadConfig;
|
|
238
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/governance/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CouchLoop Behavioral Governance Layer - Hallucination Detector
|
|
3
|
-
*
|
|
4
|
-
* Detects fabricated facts, false certainty, and unsupported claims in LLM responses
|
|
5
|
-
*/
|
|
6
|
-
import type { DetectionResult, SessionContext } from '../evaluationEngine.js';
|
|
7
|
-
import type { CriterionConfig } from '../config.js';
|
|
8
|
-
export declare class HallucinationDetector {
|
|
9
|
-
private config;
|
|
10
|
-
private certaintyPatterns;
|
|
11
|
-
private statisticalPatterns;
|
|
12
|
-
private authorityPatterns;
|
|
13
|
-
private absolutePatterns;
|
|
14
|
-
constructor(config: CriterionConfig);
|
|
15
|
-
/**
|
|
16
|
-
* Main detection method
|
|
17
|
-
*/
|
|
18
|
-
detect(response: string, context?: SessionContext): Promise<DetectionResult>;
|
|
19
|
-
/**
|
|
20
|
-
* Detect false personal experience claims
|
|
21
|
-
*/
|
|
22
|
-
private detectPersonalClaims;
|
|
23
|
-
/**
|
|
24
|
-
* Detect unsupported statistical claims
|
|
25
|
-
*/
|
|
26
|
-
private detectStatisticalClaims;
|
|
27
|
-
/**
|
|
28
|
-
* Detect false authority claims
|
|
29
|
-
*/
|
|
30
|
-
private detectAuthorityClaims;
|
|
31
|
-
/**
|
|
32
|
-
* Detect absolute statements
|
|
33
|
-
*/
|
|
34
|
-
private detectAbsoluteClaims;
|
|
35
|
-
/**
|
|
36
|
-
* Detect potentially fabricated technical or medical terms
|
|
37
|
-
*/
|
|
38
|
-
private detectFabricatedTerms;
|
|
39
|
-
/**
|
|
40
|
-
* Verify claims against conversation context
|
|
41
|
-
*/
|
|
42
|
-
private verifyAgainstContext;
|
|
43
|
-
/**
|
|
44
|
-
* Extract factual claims from text
|
|
45
|
-
*/
|
|
46
|
-
private extractClaims;
|
|
47
|
-
/**
|
|
48
|
-
* Check if two claims are contradictory
|
|
49
|
-
*/
|
|
50
|
-
private areContradictory;
|
|
51
|
-
/**
|
|
52
|
-
* Fuzzy string matching for similarity
|
|
53
|
-
*/
|
|
54
|
-
private fuzzyMatch;
|
|
55
|
-
/**
|
|
56
|
-
* Update configuration
|
|
57
|
-
*/
|
|
58
|
-
updateConfig(config: CriterionConfig): void;
|
|
59
|
-
}
|
|
60
|
-
export default HallucinationDetector;
|
|
61
|
-
//# sourceMappingURL=hallucination.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hallucination.d.ts","sourceRoot":"","sources":["../../../src/governance/detectors/hallucination.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,iBAAiB,CAAW;IACpC,OAAO,CAAC,mBAAmB,CAAW;IACtC,OAAO,CAAC,iBAAiB,CAAW;IACpC,OAAO,CAAC,gBAAgB,CAAW;gBAEvB,MAAM,EAAE,eAAe;IAqDnC;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IA4ElF;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmC7B;;OAEG;YACW,oBAAoB;IAwDlC;;OAEG;IACH,OAAO,CAAC,aAAa;IAsBrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAmBlB;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;CAG5C;AAED,eAAe,qBAAqB,CAAC"}
|
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CouchLoop Behavioral Governance Layer - Hallucination Detector
|
|
3
|
-
*
|
|
4
|
-
* Detects fabricated facts, false certainty, and unsupported claims in LLM responses
|
|
5
|
-
*/
|
|
6
|
-
export class HallucinationDetector {
|
|
7
|
-
config;
|
|
8
|
-
certaintyPatterns;
|
|
9
|
-
statisticalPatterns;
|
|
10
|
-
authorityPatterns;
|
|
11
|
-
absolutePatterns;
|
|
12
|
-
constructor(config) {
|
|
13
|
-
this.config = config;
|
|
14
|
-
// Compile regex patterns for performance
|
|
15
|
-
this.certaintyPatterns = [
|
|
16
|
-
/I have (direct|personal|firsthand) experience/i,
|
|
17
|
-
/I (personally|directly) (know|experienced|saw|witnessed)/i,
|
|
18
|
-
/In my (experience|life|years)/i,
|
|
19
|
-
/I can (personally|directly) attest/i,
|
|
20
|
-
/I've (seen|witnessed|observed) this (many times|often|frequently)/i
|
|
21
|
-
];
|
|
22
|
-
this.statisticalPatterns = [
|
|
23
|
-
/(\d+)% of (people|individuals|studies|research|cases|patients)/i,
|
|
24
|
-
/(\d+) out of (\d+) (people|studies|cases)/i,
|
|
25
|
-
/(studies|research) (consistently |always |invariably )?show/i,
|
|
26
|
-
/according to (recent|latest|new) (research|studies|data)/i,
|
|
27
|
-
/statistically proven/i,
|
|
28
|
-
/data (clearly |definitively |conclusively )?shows/i,
|
|
29
|
-
/peer-reviewed (research|studies) (confirm|prove|demonstrate)/i
|
|
30
|
-
];
|
|
31
|
-
this.authorityPatterns = [
|
|
32
|
-
/experts (agree|confirm|say|believe) that/i,
|
|
33
|
-
/(all|most) (therapists|doctors|psychologists|psychiatrists) (recommend|agree|say)/i,
|
|
34
|
-
/medical consensus is/i,
|
|
35
|
-
/scientifically proven/i,
|
|
36
|
-
/universally accepted/i,
|
|
37
|
-
/leading authorities (confirm|state|agree)/i,
|
|
38
|
-
/Nobel Prize winning/i,
|
|
39
|
-
/Harvard study/i
|
|
40
|
-
];
|
|
41
|
-
this.absolutePatterns = [
|
|
42
|
-
/it['']s a (proven|established|known|undeniable) fact that/i,
|
|
43
|
-
/(everyone|nobody) knows that/i,
|
|
44
|
-
/absolutely (certain|guaranteed|proven)/i,
|
|
45
|
-
/(always|never) (works|fails|happens)/i,
|
|
46
|
-
/100% (effective|safe|certain|guaranteed)/i,
|
|
47
|
-
/impossible to/i,
|
|
48
|
-
/definitely will/i,
|
|
49
|
-
/guaranteed to/i,
|
|
50
|
-
/undoubtedly/i,
|
|
51
|
-
/unquestionably/i
|
|
52
|
-
];
|
|
53
|
-
// Add custom patterns from config
|
|
54
|
-
if (config.patterns) {
|
|
55
|
-
const customPatterns = config.patterns.map(p => new RegExp(p, 'i'));
|
|
56
|
-
this.certaintyPatterns.push(...customPatterns);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Main detection method
|
|
61
|
-
*/
|
|
62
|
-
async detect(response, context) {
|
|
63
|
-
const detectedPatterns = [];
|
|
64
|
-
let confidenceScore = 0;
|
|
65
|
-
let detectionCount = 0;
|
|
66
|
-
// Check for false personal experience claims
|
|
67
|
-
const personalClaims = this.detectPersonalClaims(response);
|
|
68
|
-
if (personalClaims.length > 0) {
|
|
69
|
-
detectedPatterns.push(...personalClaims);
|
|
70
|
-
confidenceScore += 0.3;
|
|
71
|
-
detectionCount++;
|
|
72
|
-
}
|
|
73
|
-
// Check for unsupported statistical claims
|
|
74
|
-
const statsClaims = this.detectStatisticalClaims(response);
|
|
75
|
-
if (statsClaims.length > 0) {
|
|
76
|
-
detectedPatterns.push(...statsClaims);
|
|
77
|
-
confidenceScore += 0.25;
|
|
78
|
-
detectionCount++;
|
|
79
|
-
}
|
|
80
|
-
// Check for false authority claims
|
|
81
|
-
const authorityClaims = this.detectAuthorityClaims(response);
|
|
82
|
-
if (authorityClaims.length > 0) {
|
|
83
|
-
detectedPatterns.push(...authorityClaims);
|
|
84
|
-
confidenceScore += 0.2;
|
|
85
|
-
detectionCount++;
|
|
86
|
-
}
|
|
87
|
-
// Check for absolute statements
|
|
88
|
-
const absoluteClaims = this.detectAbsoluteClaims(response);
|
|
89
|
-
if (absoluteClaims.length > 0) {
|
|
90
|
-
detectedPatterns.push(...absoluteClaims);
|
|
91
|
-
confidenceScore += 0.25;
|
|
92
|
-
detectionCount++;
|
|
93
|
-
}
|
|
94
|
-
// Check for fabricated technical terms
|
|
95
|
-
const technicalTerms = this.detectFabricatedTerms(response);
|
|
96
|
-
if (technicalTerms.length > 0) {
|
|
97
|
-
detectedPatterns.push(...technicalTerms);
|
|
98
|
-
confidenceScore += 0.2;
|
|
99
|
-
detectionCount++;
|
|
100
|
-
}
|
|
101
|
-
// Contextual verification if context is provided
|
|
102
|
-
if (context?.conversationHistory) {
|
|
103
|
-
const contextualIssues = await this.verifyAgainstContext(response, context);
|
|
104
|
-
if (contextualIssues.length > 0) {
|
|
105
|
-
detectedPatterns.push(...contextualIssues);
|
|
106
|
-
confidenceScore += 0.3;
|
|
107
|
-
detectionCount++;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
// Normalize confidence score (cap at 1.0)
|
|
111
|
-
confidenceScore = Math.min(confidenceScore, 1.0);
|
|
112
|
-
// Apply threshold
|
|
113
|
-
const detected = confidenceScore >= this.config.threshold;
|
|
114
|
-
return {
|
|
115
|
-
detected,
|
|
116
|
-
confidence: confidenceScore,
|
|
117
|
-
patterns: detectedPatterns,
|
|
118
|
-
details: {
|
|
119
|
-
detectionCount,
|
|
120
|
-
personalClaims: personalClaims.length,
|
|
121
|
-
statisticalClaims: statsClaims.length,
|
|
122
|
-
authorityClaims: authorityClaims.length,
|
|
123
|
-
absoluteClaims: absoluteClaims.length,
|
|
124
|
-
threshold: this.config.threshold
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Detect false personal experience claims
|
|
130
|
-
*/
|
|
131
|
-
detectPersonalClaims(response) {
|
|
132
|
-
const detected = [];
|
|
133
|
-
for (const pattern of this.certaintyPatterns) {
|
|
134
|
-
const matches = response.match(pattern);
|
|
135
|
-
if (matches) {
|
|
136
|
-
detected.push(`Personal claim: "${matches[0]}"`);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return detected;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Detect unsupported statistical claims
|
|
143
|
-
*/
|
|
144
|
-
detectStatisticalClaims(response) {
|
|
145
|
-
const detected = [];
|
|
146
|
-
for (const pattern of this.statisticalPatterns) {
|
|
147
|
-
const matches = response.match(pattern);
|
|
148
|
-
if (matches) {
|
|
149
|
-
// Special check for specific percentages that seem fabricated
|
|
150
|
-
if (matches[0].includes('%')) {
|
|
151
|
-
const percentMatch = matches[0].match(/(\d+)%/);
|
|
152
|
-
if (percentMatch && percentMatch[1]) {
|
|
153
|
-
const percent = parseInt(percentMatch[1]);
|
|
154
|
-
// Suspicious percentages (very specific or round numbers without context)
|
|
155
|
-
if ((percent > 70 && percent < 100 && percent % 5 !== 0) ||
|
|
156
|
-
(percent === 73 || percent === 87 || percent === 92)) {
|
|
157
|
-
detected.push(`Suspicious statistic: "${matches[0]}"`);
|
|
158
|
-
continue;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
detected.push(`Statistical claim: "${matches[0]}"`);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
return detected;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Detect false authority claims
|
|
169
|
-
*/
|
|
170
|
-
detectAuthorityClaims(response) {
|
|
171
|
-
const detected = [];
|
|
172
|
-
for (const pattern of this.authorityPatterns) {
|
|
173
|
-
const matches = response.match(pattern);
|
|
174
|
-
if (matches) {
|
|
175
|
-
detected.push(`Authority claim: "${matches[0]}"`);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
return detected;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Detect absolute statements
|
|
182
|
-
*/
|
|
183
|
-
detectAbsoluteClaims(response) {
|
|
184
|
-
const detected = [];
|
|
185
|
-
for (const pattern of this.absolutePatterns) {
|
|
186
|
-
const matches = response.match(pattern);
|
|
187
|
-
if (matches) {
|
|
188
|
-
detected.push(`Absolute claim: "${matches[0]}"`);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
return detected;
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Detect potentially fabricated technical or medical terms
|
|
195
|
-
*/
|
|
196
|
-
detectFabricatedTerms(response) {
|
|
197
|
-
const detected = [];
|
|
198
|
-
// Look for made-up sounding technical terms
|
|
199
|
-
const suspiciousTermPatterns = [
|
|
200
|
-
/neuro-?[a-z]+ive/i, // Neuro-something-ive
|
|
201
|
-
/psycho-?[a-z]+osis/i, // Psycho-something-osis
|
|
202
|
-
/[a-z]+pathic [a-z]+syndrome/i, // X-pathic Y syndrome
|
|
203
|
-
/cognitive [a-z]+ disorder/i, // Cognitive X disorder (when X is unusual)
|
|
204
|
-
/therapeutic [a-z]+ protocol/i, // Therapeutic X protocol
|
|
205
|
-
];
|
|
206
|
-
// Known legitimate terms to exclude
|
|
207
|
-
const legitimateTerms = new Set([
|
|
208
|
-
'cognitive behavioral therapy',
|
|
209
|
-
'psychosis',
|
|
210
|
-
'neurosis',
|
|
211
|
-
'neuropathic',
|
|
212
|
-
'psychopathic',
|
|
213
|
-
'therapeutic intervention protocol'
|
|
214
|
-
]);
|
|
215
|
-
for (const pattern of suspiciousTermPatterns) {
|
|
216
|
-
const matches = response.match(pattern);
|
|
217
|
-
if (matches) {
|
|
218
|
-
const term = matches[0].toLowerCase();
|
|
219
|
-
if (!legitimateTerms.has(term)) {
|
|
220
|
-
detected.push(`Suspicious term: "${matches[0]}"`);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
return detected;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Verify claims against conversation context
|
|
228
|
-
*/
|
|
229
|
-
async verifyAgainstContext(response, context) {
|
|
230
|
-
const issues = [];
|
|
231
|
-
if (!context.conversationHistory || context.conversationHistory.length === 0) {
|
|
232
|
-
return issues;
|
|
233
|
-
}
|
|
234
|
-
// Check if the AI is claiming knowledge about the user that wasn't provided
|
|
235
|
-
const userInfoClaims = [
|
|
236
|
-
/you (said|mentioned|told me) (earlier |before |previously )?that/i,
|
|
237
|
-
/as you (mentioned|said|explained)/i,
|
|
238
|
-
/based on what you('ve)? (shared|told me|said)/i,
|
|
239
|
-
/you have (a |an )?[a-z]+ (condition|disorder|issue)/i,
|
|
240
|
-
/your [a-z]+ (problem|issue|condition)/i
|
|
241
|
-
];
|
|
242
|
-
for (const pattern of userInfoClaims) {
|
|
243
|
-
const matches = response.match(pattern);
|
|
244
|
-
if (matches) {
|
|
245
|
-
// Try to verify if this was actually mentioned
|
|
246
|
-
const claimedInfo = matches[0];
|
|
247
|
-
let foundInHistory = false;
|
|
248
|
-
for (const msg of context.conversationHistory) {
|
|
249
|
-
if (msg.role === 'user' && this.fuzzyMatch(claimedInfo, msg.content)) {
|
|
250
|
-
foundInHistory = true;
|
|
251
|
-
break;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
if (!foundInHistory) {
|
|
255
|
-
issues.push(`Unverified claim about user: "${claimedInfo}"`);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
// Check for contradictions with earlier messages
|
|
260
|
-
const currentClaims = this.extractClaims(response);
|
|
261
|
-
const historicalClaims = context.conversationHistory
|
|
262
|
-
.filter(msg => msg.role === 'assistant')
|
|
263
|
-
.flatMap(msg => this.extractClaims(msg.content));
|
|
264
|
-
for (const currentClaim of currentClaims) {
|
|
265
|
-
for (const historicalClaim of historicalClaims) {
|
|
266
|
-
if (this.areContradictory(currentClaim, historicalClaim)) {
|
|
267
|
-
issues.push(`Contradiction detected: Current: "${currentClaim}" vs Earlier: "${historicalClaim}"`);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
return issues;
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Extract factual claims from text
|
|
275
|
-
*/
|
|
276
|
-
extractClaims(text) {
|
|
277
|
-
const claims = [];
|
|
278
|
-
// Patterns that indicate factual claims
|
|
279
|
-
const claimPatterns = [
|
|
280
|
-
/[A-Z][^.!?]+ is [^.!?]+[.!?]/g,
|
|
281
|
-
/[A-Z][^.!?]+ are [^.!?]+[.!?]/g,
|
|
282
|
-
/[A-Z][^.!?]+ causes [^.!?]+[.!?]/g,
|
|
283
|
-
/[A-Z][^.!?]+ leads to [^.!?]+[.!?]/g,
|
|
284
|
-
/[A-Z][^.!?]+ results in [^.!?]+[.!?]/g
|
|
285
|
-
];
|
|
286
|
-
for (const pattern of claimPatterns) {
|
|
287
|
-
const matches = text.match(pattern);
|
|
288
|
-
if (matches) {
|
|
289
|
-
claims.push(...matches);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
return claims;
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Check if two claims are contradictory
|
|
296
|
-
*/
|
|
297
|
-
areContradictory(claim1, claim2) {
|
|
298
|
-
// Simple contradiction detection - can be enhanced
|
|
299
|
-
const normalized1 = claim1.toLowerCase();
|
|
300
|
-
const normalized2 = claim2.toLowerCase();
|
|
301
|
-
// Check for opposite modals
|
|
302
|
-
if ((normalized1.includes(' is ') && normalized2.includes(' is not ')) ||
|
|
303
|
-
(normalized1.includes(' is not ') && normalized2.includes(' is ')) ||
|
|
304
|
-
(normalized1.includes(' will ') && normalized2.includes(' will not ')) ||
|
|
305
|
-
(normalized1.includes(' can ') && normalized2.includes(' cannot '))) {
|
|
306
|
-
// Check if they're about the same subject
|
|
307
|
-
const subject1 = normalized1.split(' is ')[0] || normalized1.split(' will ')[0] || normalized1;
|
|
308
|
-
const subject2 = normalized2.split(' is ')[0] || normalized2.split(' will ')[0] || normalized2;
|
|
309
|
-
return this.fuzzyMatch(subject1, subject2);
|
|
310
|
-
}
|
|
311
|
-
return false;
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Fuzzy string matching for similarity
|
|
315
|
-
*/
|
|
316
|
-
fuzzyMatch(str1, str2) {
|
|
317
|
-
const normalized1 = str1.toLowerCase().trim();
|
|
318
|
-
const normalized2 = str2.toLowerCase().trim();
|
|
319
|
-
// Check for substring match
|
|
320
|
-
if (normalized1.includes(normalized2) || normalized2.includes(normalized1)) {
|
|
321
|
-
return true;
|
|
322
|
-
}
|
|
323
|
-
// Check for high word overlap
|
|
324
|
-
const words1 = new Set(normalized1.split(/\s+/));
|
|
325
|
-
const words2 = new Set(normalized2.split(/\s+/));
|
|
326
|
-
const intersection = new Set([...words1].filter(x => words2.has(x)));
|
|
327
|
-
const overlapRatio = intersection.size / Math.min(words1.size, words2.size);
|
|
328
|
-
return overlapRatio > 0.6;
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* Update configuration
|
|
332
|
-
*/
|
|
333
|
-
updateConfig(config) {
|
|
334
|
-
this.config = config;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
export default HallucinationDetector;
|
|
338
|
-
//# sourceMappingURL=hallucination.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hallucination.js","sourceRoot":"","sources":["../../../src/governance/detectors/hallucination.ts"],"names":[],"mappings":"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"}
|