couchloop-eq-mcp 1.0.4 → 1.0.5

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 (282) hide show
  1. package/README.md +24 -11
  2. package/dist/developer/analyzers/bloat-detector.d.ts +89 -0
  3. package/dist/developer/analyzers/bloat-detector.d.ts.map +1 -0
  4. package/dist/developer/analyzers/bloat-detector.js +483 -0
  5. package/dist/developer/analyzers/bloat-detector.js.map +1 -0
  6. package/dist/developer/backup/auto-backup.d.ts +96 -0
  7. package/dist/developer/backup/auto-backup.d.ts.map +1 -0
  8. package/dist/developer/backup/auto-backup.js +346 -0
  9. package/dist/developer/backup/auto-backup.js.map +1 -0
  10. package/dist/developer/blockers/package-blocker.d.ts +33 -0
  11. package/dist/developer/blockers/package-blocker.d.ts.map +1 -0
  12. package/dist/developer/blockers/package-blocker.js +224 -0
  13. package/dist/developer/blockers/package-blocker.js.map +1 -0
  14. package/dist/developer/evaluators/ai-error-preventer.d.ts +54 -0
  15. package/dist/developer/evaluators/ai-error-preventer.d.ts.map +1 -0
  16. package/dist/developer/evaluators/ai-error-preventer.js +270 -0
  17. package/dist/developer/evaluators/ai-error-preventer.js.map +1 -0
  18. package/dist/developer/evaluators/build-context-detector.d.ts +44 -0
  19. package/dist/developer/evaluators/build-context-detector.d.ts.map +1 -0
  20. package/dist/developer/evaluators/build-context-detector.js +258 -0
  21. package/dist/developer/evaluators/build-context-detector.js.map +1 -0
  22. package/dist/developer/evaluators/package-evaluator.d.ts +37 -0
  23. package/dist/developer/evaluators/package-evaluator.d.ts.map +1 -0
  24. package/dist/developer/evaluators/package-evaluator.js +278 -0
  25. package/dist/developer/evaluators/package-evaluator.js.map +1 -0
  26. package/dist/developer/guards/file-guardian.d.ts +79 -0
  27. package/dist/developer/guards/file-guardian.d.ts.map +1 -0
  28. package/dist/developer/guards/file-guardian.js +309 -0
  29. package/dist/developer/guards/file-guardian.js.map +1 -0
  30. package/dist/developer/managers/context-manager.d.ts +61 -0
  31. package/dist/developer/managers/context-manager.d.ts.map +1 -0
  32. package/dist/developer/managers/context-manager.js +302 -0
  33. package/dist/developer/managers/context-manager.js.map +1 -0
  34. package/dist/developer/metrics/complexity-calculator.d.ts +52 -0
  35. package/dist/developer/metrics/complexity-calculator.d.ts.map +1 -0
  36. package/dist/developer/metrics/complexity-calculator.js +259 -0
  37. package/dist/developer/metrics/complexity-calculator.js.map +1 -0
  38. package/dist/developer/reports/review-summary.d.ts +49 -0
  39. package/dist/developer/reports/review-summary.d.ts.map +1 -0
  40. package/dist/developer/reports/review-summary.js +249 -0
  41. package/dist/developer/reports/review-summary.js.map +1 -0
  42. package/dist/developer/scanners/review-assistant.d.ts +41 -0
  43. package/dist/developer/scanners/review-assistant.d.ts.map +1 -0
  44. package/dist/developer/scanners/review-assistant.js +374 -0
  45. package/dist/developer/scanners/review-assistant.js.map +1 -0
  46. package/dist/developer/scanners/secret-scanner.d.ts +66 -0
  47. package/dist/developer/scanners/secret-scanner.d.ts.map +1 -0
  48. package/dist/developer/scanners/secret-scanner.js +287 -0
  49. package/dist/developer/scanners/secret-scanner.js.map +1 -0
  50. package/dist/developer/scanners/sql-injection-detector.d.ts +54 -0
  51. package/dist/developer/scanners/sql-injection-detector.d.ts.map +1 -0
  52. package/dist/developer/scanners/sql-injection-detector.js +174 -0
  53. package/dist/developer/scanners/sql-injection-detector.js.map +1 -0
  54. package/dist/developer/scanners/xss-detector.d.ts +60 -0
  55. package/dist/developer/scanners/xss-detector.d.ts.map +1 -0
  56. package/dist/developer/scanners/xss-detector.js +229 -0
  57. package/dist/developer/scanners/xss-detector.js.map +1 -0
  58. package/dist/developer/types/ai-errors.d.ts +34 -0
  59. package/dist/developer/types/ai-errors.d.ts.map +1 -0
  60. package/dist/developer/types/ai-errors.js +271 -0
  61. package/dist/developer/types/ai-errors.js.map +1 -0
  62. package/dist/developer/types/package.d.ts +32 -0
  63. package/dist/developer/types/package.d.ts.map +1 -0
  64. package/dist/developer/types/package.js +5 -0
  65. package/dist/developer/types/package.js.map +1 -0
  66. package/dist/developer/updaters/dependency-updater.d.ts +102 -0
  67. package/dist/developer/updaters/dependency-updater.d.ts.map +1 -0
  68. package/dist/developer/updaters/dependency-updater.js +472 -0
  69. package/dist/developer/updaters/dependency-updater.js.map +1 -0
  70. package/dist/developer/validators/cargo.d.ts +14 -0
  71. package/dist/developer/validators/cargo.d.ts.map +1 -0
  72. package/dist/developer/validators/cargo.js +132 -0
  73. package/dist/developer/validators/cargo.js.map +1 -0
  74. package/dist/developer/validators/gem.d.ts +14 -0
  75. package/dist/developer/validators/gem.d.ts.map +1 -0
  76. package/dist/developer/validators/gem.js +85 -0
  77. package/dist/developer/validators/gem.js.map +1 -0
  78. package/dist/developer/validators/go.d.ts +14 -0
  79. package/dist/developer/validators/go.d.ts.map +1 -0
  80. package/dist/developer/validators/go.js +138 -0
  81. package/dist/developer/validators/go.js.map +1 -0
  82. package/dist/developer/validators/maven.d.ts +14 -0
  83. package/dist/developer/validators/maven.d.ts.map +1 -0
  84. package/dist/developer/validators/maven.js +99 -0
  85. package/dist/developer/validators/maven.js.map +1 -0
  86. package/dist/developer/validators/npm.d.ts +14 -0
  87. package/dist/developer/validators/npm.d.ts.map +1 -0
  88. package/dist/developer/validators/npm.js +96 -0
  89. package/dist/developer/validators/npm.js.map +1 -0
  90. package/dist/developer/validators/nuget.d.ts +15 -0
  91. package/dist/developer/validators/nuget.d.ts.map +1 -0
  92. package/dist/developer/validators/nuget.js +107 -0
  93. package/dist/developer/validators/nuget.js.map +1 -0
  94. package/dist/developer/validators/pypi.d.ts +14 -0
  95. package/dist/developer/validators/pypi.d.ts.map +1 -0
  96. package/dist/developer/validators/pypi.js +118 -0
  97. package/dist/developer/validators/pypi.js.map +1 -0
  98. package/dist/developer/validators/registry-manager.d.ts +37 -0
  99. package/dist/developer/validators/registry-manager.d.ts.map +1 -0
  100. package/dist/developer/validators/registry-manager.js +89 -0
  101. package/dist/developer/validators/registry-manager.js.map +1 -0
  102. package/dist/developer/validators/version-checker.d.ts +145 -0
  103. package/dist/developer/validators/version-checker.d.ts.map +1 -0
  104. package/dist/developer/validators/version-checker.js +529 -0
  105. package/dist/developer/validators/version-checker.js.map +1 -0
  106. package/dist/server/index.js.map +1 -1
  107. package/dist/server/middleware/auth.d.ts +7 -9
  108. package/dist/server/middleware/auth.d.ts.map +1 -1
  109. package/dist/server/middleware/auth.js.map +1 -1
  110. package/dist/tools/check-versions.d.ts +100 -0
  111. package/dist/tools/check-versions.d.ts.map +1 -0
  112. package/dist/tools/check-versions.js +328 -0
  113. package/dist/tools/check-versions.js.map +1 -0
  114. package/dist/tools/detect-code-smell.d.ts +9 -0
  115. package/dist/tools/detect-code-smell.d.ts.map +1 -0
  116. package/dist/tools/detect-code-smell.js +231 -0
  117. package/dist/tools/detect-code-smell.js.map +1 -0
  118. package/dist/tools/index.d.ts +471 -0
  119. package/dist/tools/index.d.ts.map +1 -1
  120. package/dist/tools/index.js +178 -0
  121. package/dist/tools/index.js.map +1 -1
  122. package/dist/tools/journey.js +1 -1
  123. package/dist/tools/journey.js.map +1 -1
  124. package/dist/tools/pre-review-code.d.ts +71 -0
  125. package/dist/tools/pre-review-code.d.ts.map +1 -0
  126. package/dist/tools/pre-review-code.js +159 -0
  127. package/dist/tools/pre-review-code.js.map +1 -0
  128. package/dist/tools/preserve-context.d.ts +27 -0
  129. package/dist/tools/preserve-context.d.ts.map +1 -0
  130. package/dist/tools/preserve-context.js +98 -0
  131. package/dist/tools/preserve-context.js.map +1 -0
  132. package/dist/tools/protect-files.d.ts +224 -0
  133. package/dist/tools/protect-files.d.ts.map +1 -0
  134. package/dist/tools/protect-files.js +286 -0
  135. package/dist/tools/protect-files.js.map +1 -0
  136. package/dist/tools/scan-security.d.ts +38 -0
  137. package/dist/tools/scan-security.d.ts.map +1 -0
  138. package/dist/tools/scan-security.js +237 -0
  139. package/dist/tools/scan-security.js.map +1 -0
  140. package/dist/tools/validate_packages.d.ts +8 -0
  141. package/dist/tools/validate_packages.d.ts.map +1 -0
  142. package/dist/tools/validate_packages.js +159 -0
  143. package/dist/tools/validate_packages.js.map +1 -0
  144. package/dist/types/auth.d.ts.map +1 -1
  145. package/dist/types/auth.js +1 -2
  146. package/dist/types/auth.js.map +1 -1
  147. package/dist/types/context.d.ts +46 -0
  148. package/dist/types/context.d.ts.map +1 -0
  149. package/dist/types/context.js +17 -0
  150. package/dist/types/context.js.map +1 -0
  151. package/dist/types/file-protection.d.ts +50 -0
  152. package/dist/types/file-protection.d.ts.map +1 -0
  153. package/dist/types/file-protection.js +9 -0
  154. package/dist/types/file-protection.js.map +1 -0
  155. package/dist/utils/errorHandler.d.ts.map +1 -1
  156. package/dist/utils/errorHandler.js +2 -1
  157. package/dist/utils/errorHandler.js.map +1 -1
  158. package/package.json +23 -2
  159. package/dist/db/migrate.d.ts +0 -4
  160. package/dist/db/migrate.d.ts.map +0 -1
  161. package/dist/db/migrate.js +0 -34
  162. package/dist/db/migrate.js.map +0 -1
  163. package/dist/db/migrations/schema.d.ts +0 -1074
  164. package/dist/db/migrations/schema.d.ts.map +0 -1
  165. package/dist/db/migrations/schema.js +0 -160
  166. package/dist/db/migrations/schema.js.map +0 -1
  167. package/dist/db/schema.d.ts +0 -1576
  168. package/dist/db/schema.d.ts.map +0 -1
  169. package/dist/db/schema.js +0 -204
  170. package/dist/db/schema.js.map +0 -1
  171. package/dist/db/seed.d.ts +0 -4
  172. package/dist/db/seed.d.ts.map +0 -1
  173. package/dist/db/seed.js +0 -57
  174. package/dist/db/seed.js.map +0 -1
  175. package/dist/db/seedOAuth.d.ts +0 -4
  176. package/dist/db/seedOAuth.d.ts.map +0 -1
  177. package/dist/db/seedOAuth.js +0 -76
  178. package/dist/db/seedOAuth.js.map +0 -1
  179. package/dist/governance/config.d.ts +0 -66
  180. package/dist/governance/config.d.ts.map +0 -1
  181. package/dist/governance/config.js +0 -238
  182. package/dist/governance/config.js.map +0 -1
  183. package/dist/governance/detectors/hallucination.d.ts +0 -61
  184. package/dist/governance/detectors/hallucination.d.ts.map +0 -1
  185. package/dist/governance/detectors/hallucination.js +0 -338
  186. package/dist/governance/detectors/hallucination.js.map +0 -1
  187. package/dist/governance/detectors/inconsistency.d.ts +0 -99
  188. package/dist/governance/detectors/inconsistency.d.ts.map +0 -1
  189. package/dist/governance/detectors/inconsistency.js +0 -548
  190. package/dist/governance/detectors/inconsistency.js.map +0 -1
  191. package/dist/governance/detectors/toneDrift.d.ts +0 -63
  192. package/dist/governance/detectors/toneDrift.d.ts.map +0 -1
  193. package/dist/governance/detectors/toneDrift.js +0 -421
  194. package/dist/governance/detectors/toneDrift.js.map +0 -1
  195. package/dist/governance/detectors/unsafeReasoning.d.ts +0 -54
  196. package/dist/governance/detectors/unsafeReasoning.d.ts.map +0 -1
  197. package/dist/governance/detectors/unsafeReasoning.js +0 -473
  198. package/dist/governance/detectors/unsafeReasoning.js.map +0 -1
  199. package/dist/governance/evaluationEngine.d.ts +0 -112
  200. package/dist/governance/evaluationEngine.d.ts.map +0 -1
  201. package/dist/governance/evaluationEngine.js +0 -265
  202. package/dist/governance/evaluationEngine.js.map +0 -1
  203. package/dist/governance/intervention.d.ts +0 -81
  204. package/dist/governance/intervention.d.ts.map +0 -1
  205. package/dist/governance/intervention.js +0 -405
  206. package/dist/governance/intervention.js.map +0 -1
  207. package/dist/server/oauth/anomalyDetection.d.ts +0 -146
  208. package/dist/server/oauth/anomalyDetection.d.ts.map +0 -1
  209. package/dist/server/oauth/anomalyDetection.js +0 -405
  210. package/dist/server/oauth/anomalyDetection.js.map +0 -1
  211. package/dist/server/oauth/authServer.d.ts +0 -61
  212. package/dist/server/oauth/authServer.d.ts.map +0 -1
  213. package/dist/server/oauth/authServer.js +0 -283
  214. package/dist/server/oauth/authServer.js.map +0 -1
  215. package/dist/server/oauth/dpop.d.ts +0 -135
  216. package/dist/server/oauth/dpop.d.ts.map +0 -1
  217. package/dist/server/oauth/dpop.js +0 -338
  218. package/dist/server/oauth/dpop.js.map +0 -1
  219. package/dist/server/oauth/gdpr/consent.d.ts +0 -173
  220. package/dist/server/oauth/gdpr/consent.d.ts.map +0 -1
  221. package/dist/server/oauth/gdpr/consent.js +0 -388
  222. package/dist/server/oauth/gdpr/consent.js.map +0 -1
  223. package/dist/server/oauth/gdpr/dataPortability.d.ts +0 -214
  224. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +0 -1
  225. package/dist/server/oauth/gdpr/dataPortability.js +0 -486
  226. package/dist/server/oauth/gdpr/dataPortability.js.map +0 -1
  227. package/dist/server/oauth/gdpr/index.d.ts +0 -103
  228. package/dist/server/oauth/gdpr/index.d.ts.map +0 -1
  229. package/dist/server/oauth/gdpr/index.js +0 -273
  230. package/dist/server/oauth/gdpr/index.js.map +0 -1
  231. package/dist/server/oauth/gdpr/rightToErasure.d.ts +0 -184
  232. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +0 -1
  233. package/dist/server/oauth/gdpr/rightToErasure.js +0 -527
  234. package/dist/server/oauth/gdpr/rightToErasure.js.map +0 -1
  235. package/dist/server/oauth/monitoring/securityMonitor.d.ts +0 -218
  236. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +0 -1
  237. package/dist/server/oauth/monitoring/securityMonitor.js +0 -615
  238. package/dist/server/oauth/monitoring/securityMonitor.js.map +0 -1
  239. package/dist/server/oauth/pkce.d.ts +0 -61
  240. package/dist/server/oauth/pkce.d.ts.map +0 -1
  241. package/dist/server/oauth/pkce.js +0 -157
  242. package/dist/server/oauth/pkce.js.map +0 -1
  243. package/dist/server/oauth/providers/base.d.ts +0 -147
  244. package/dist/server/oauth/providers/base.d.ts.map +0 -1
  245. package/dist/server/oauth/providers/base.js +0 -312
  246. package/dist/server/oauth/providers/base.js.map +0 -1
  247. package/dist/server/oauth/providers/github.d.ts +0 -55
  248. package/dist/server/oauth/providers/github.d.ts.map +0 -1
  249. package/dist/server/oauth/providers/github.js +0 -225
  250. package/dist/server/oauth/providers/github.js.map +0 -1
  251. package/dist/server/oauth/providers/google.d.ts +0 -49
  252. package/dist/server/oauth/providers/google.d.ts.map +0 -1
  253. package/dist/server/oauth/providers/google.js +0 -153
  254. package/dist/server/oauth/providers/google.js.map +0 -1
  255. package/dist/server/oauth/providers/index.d.ts +0 -9
  256. package/dist/server/oauth/providers/index.d.ts.map +0 -1
  257. package/dist/server/oauth/providers/index.js +0 -24
  258. package/dist/server/oauth/providers/index.js.map +0 -1
  259. package/dist/server/oauth/refreshTokenRotation.d.ts +0 -114
  260. package/dist/server/oauth/refreshTokenRotation.d.ts.map +0 -1
  261. package/dist/server/oauth/refreshTokenRotation.js +0 -344
  262. package/dist/server/oauth/refreshTokenRotation.js.map +0 -1
  263. package/dist/server/oauth/security.d.ts +0 -101
  264. package/dist/server/oauth/security.d.ts.map +0 -1
  265. package/dist/server/oauth/security.js +0 -268
  266. package/dist/server/oauth/security.js.map +0 -1
  267. package/dist/server/oauth/tokenEncryption.d.ts +0 -80
  268. package/dist/server/oauth/tokenEncryption.d.ts.map +0 -1
  269. package/dist/server/oauth/tokenEncryption.js +0 -218
  270. package/dist/server/oauth/tokenEncryption.js.map +0 -1
  271. package/dist/tools/sendMessage-complex-backup.d.ts +0 -6
  272. package/dist/tools/sendMessage-complex-backup.d.ts.map +0 -1
  273. package/dist/tools/sendMessage-complex-backup.js +0 -545
  274. package/dist/tools/sendMessage-complex-backup.js.map +0 -1
  275. package/dist/tools/sendMessage-revised.d.ts +0 -11
  276. package/dist/tools/sendMessage-revised.d.ts.map +0 -1
  277. package/dist/tools/sendMessage-revised.js +0 -429
  278. package/dist/tools/sendMessage-revised.js.map +0 -1
  279. package/dist/tools/sendMessage-truly-simple.d.ts +0 -8
  280. package/dist/tools/sendMessage-truly-simple.d.ts.map +0 -1
  281. package/dist/tools/sendMessage-truly-simple.js +0 -299
  282. 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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"}