couchloop-eq-mcp 1.0.2 → 1.0.4
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 +29 -4
- package/dist/clients/shrinkChatClient.d.ts +10 -0
- package/dist/clients/shrinkChatClient.d.ts.map +1 -1
- package/dist/clients/shrinkChatClient.js +5 -1
- package/dist/clients/shrinkChatClient.js.map +1 -1
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +5 -3
- package/dist/db/client.js.map +1 -1
- package/dist/db/schema.d.ts +363 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +47 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/governance/config.d.ts +66 -0
- package/dist/governance/config.d.ts.map +1 -0
- package/dist/governance/config.js +238 -0
- package/dist/governance/config.js.map +1 -0
- package/dist/governance/detectors/hallucination.d.ts +61 -0
- package/dist/governance/detectors/hallucination.d.ts.map +1 -0
- package/dist/governance/detectors/hallucination.js +338 -0
- package/dist/governance/detectors/hallucination.js.map +1 -0
- package/dist/governance/detectors/inconsistency.d.ts +99 -0
- package/dist/governance/detectors/inconsistency.d.ts.map +1 -0
- package/dist/governance/detectors/inconsistency.js +548 -0
- package/dist/governance/detectors/inconsistency.js.map +1 -0
- package/dist/governance/detectors/toneDrift.d.ts +63 -0
- package/dist/governance/detectors/toneDrift.d.ts.map +1 -0
- package/dist/governance/detectors/toneDrift.js +421 -0
- package/dist/governance/detectors/toneDrift.js.map +1 -0
- package/dist/governance/detectors/unsafeReasoning.d.ts +54 -0
- package/dist/governance/detectors/unsafeReasoning.d.ts.map +1 -0
- package/dist/governance/detectors/unsafeReasoning.js +473 -0
- package/dist/governance/detectors/unsafeReasoning.js.map +1 -0
- package/dist/governance/evaluationEngine.d.ts +112 -0
- package/dist/governance/evaluationEngine.d.ts.map +1 -0
- package/dist/governance/evaluationEngine.js +265 -0
- package/dist/governance/evaluationEngine.js.map +1 -0
- package/dist/governance/intervention.d.ts +81 -0
- package/dist/governance/intervention.d.ts.map +1 -0
- package/dist/governance/intervention.js +405 -0
- package/dist/governance/intervention.js.map +1 -0
- package/dist/server/chatgpt-mcp.d.ts +10 -0
- package/dist/server/chatgpt-mcp.d.ts.map +1 -0
- package/dist/server/chatgpt-mcp.js +233 -0
- package/dist/server/chatgpt-mcp.js.map +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +94 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/localNetworkAccess.d.ts +16 -0
- package/dist/server/middleware/localNetworkAccess.d.ts.map +1 -0
- package/dist/server/middleware/localNetworkAccess.js +97 -0
- package/dist/server/middleware/localNetworkAccess.js.map +1 -0
- package/dist/server/sse.d.ts +16 -0
- package/dist/server/sse.d.ts.map +1 -0
- package/dist/server/sse.js +215 -0
- package/dist/server/sse.js.map +1 -0
- package/dist/tools/checkpoint.d.ts.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/insight.d.ts +1 -0
- package/dist/tools/insight.d.ts.map +1 -1
- package/dist/tools/sendMessage-complex-backup.d.ts +6 -0
- package/dist/tools/sendMessage-complex-backup.d.ts.map +1 -0
- package/dist/tools/sendMessage-complex-backup.js +545 -0
- package/dist/tools/sendMessage-complex-backup.js.map +1 -0
- package/dist/tools/sendMessage-revised.d.ts +11 -0
- package/dist/tools/sendMessage-revised.d.ts.map +1 -0
- package/dist/tools/sendMessage-revised.js +429 -0
- package/dist/tools/sendMessage-revised.js.map +1 -0
- package/dist/tools/sendMessage-truly-simple.d.ts +8 -0
- package/dist/tools/sendMessage-truly-simple.d.ts.map +1 -0
- package/dist/tools/sendMessage-truly-simple.js +299 -0
- package/dist/tools/sendMessage-truly-simple.js.map +1 -0
- package/dist/tools/sendMessage.d.ts +4 -2
- package/dist/tools/sendMessage.d.ts.map +1 -1
- package/dist/tools/sendMessage.js +240 -186
- package/dist/tools/sendMessage.js.map +1 -1
- package/dist/tools/session.d.ts.map +1 -1
- package/dist/tools/session.js +35 -29
- package/dist/tools/session.js.map +1 -1
- package/dist/types/auth.d.ts +21 -13
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/auth.js +108 -25
- package/dist/types/auth.js.map +1 -1
- package/dist/types/insight.d.ts +10 -0
- package/dist/types/insight.d.ts.map +1 -1
- package/dist/types/session.d.ts +10 -0
- package/dist/types/session.d.ts.map +1 -1
- package/package.json +10 -5
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CouchLoop Behavioral Governance Layer - Evaluation Engine
|
|
3
|
+
*
|
|
4
|
+
* Main evaluation pipeline that orchestrates all governance checks
|
|
5
|
+
* for draft LLM responses before delivery to users
|
|
6
|
+
*/
|
|
7
|
+
import { HallucinationDetector } from './detectors/hallucination.js';
|
|
8
|
+
import { InconsistencyChecker } from './detectors/inconsistency.js';
|
|
9
|
+
import { ToneDriftMonitor } from './detectors/toneDrift.js';
|
|
10
|
+
import { UnsafeReasoningDetector } from './detectors/unsafeReasoning.js';
|
|
11
|
+
import { loadConfig } from './config.js';
|
|
12
|
+
// Core types for governance evaluations
|
|
13
|
+
export var InterventionAction;
|
|
14
|
+
(function (InterventionAction) {
|
|
15
|
+
InterventionAction["APPROVE"] = "approve";
|
|
16
|
+
InterventionAction["BLOCK"] = "block";
|
|
17
|
+
InterventionAction["MODIFY"] = "modify";
|
|
18
|
+
InterventionAction["FALLBACK"] = "fallback";
|
|
19
|
+
})(InterventionAction || (InterventionAction = {}));
|
|
20
|
+
export var RiskLevel;
|
|
21
|
+
(function (RiskLevel) {
|
|
22
|
+
RiskLevel["NONE"] = "none";
|
|
23
|
+
RiskLevel["LOW"] = "low";
|
|
24
|
+
RiskLevel["MEDIUM"] = "medium";
|
|
25
|
+
RiskLevel["HIGH"] = "high";
|
|
26
|
+
RiskLevel["CRITICAL"] = "critical";
|
|
27
|
+
})(RiskLevel || (RiskLevel = {}));
|
|
28
|
+
/**
|
|
29
|
+
* Main evaluation engine that coordinates all governance checks
|
|
30
|
+
*/
|
|
31
|
+
export class EvaluationEngine {
|
|
32
|
+
hallucinationDetector;
|
|
33
|
+
inconsistencyChecker;
|
|
34
|
+
toneDriftMonitor;
|
|
35
|
+
unsafeReasoningDetector;
|
|
36
|
+
config;
|
|
37
|
+
constructor(config) {
|
|
38
|
+
this.config = config || loadConfig();
|
|
39
|
+
// Initialize all detectors
|
|
40
|
+
this.hallucinationDetector = new HallucinationDetector(this.config.criteria.hallucination);
|
|
41
|
+
this.inconsistencyChecker = new InconsistencyChecker(this.config.criteria.inconsistency);
|
|
42
|
+
this.toneDriftMonitor = new ToneDriftMonitor(this.config.criteria.toneDrift);
|
|
43
|
+
this.unsafeReasoningDetector = new UnsafeReasoningDetector(this.config.criteria.unsafeReasoning);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Main evaluation method - runs all enabled governance checks
|
|
47
|
+
*/
|
|
48
|
+
async evaluate(draft, context) {
|
|
49
|
+
const evaluationId = this.generateEvaluationId();
|
|
50
|
+
const startTime = Date.now();
|
|
51
|
+
// Run all detectors in parallel for performance
|
|
52
|
+
const [hallucination, inconsistency, toneDrift, unsafeReasoning] = await Promise.all([
|
|
53
|
+
this.config.criteria.hallucination.enabled
|
|
54
|
+
? this.hallucinationDetector.detect(draft, context)
|
|
55
|
+
: { detected: false, confidence: 0 },
|
|
56
|
+
this.config.criteria.inconsistency.enabled
|
|
57
|
+
? this.inconsistencyChecker.check(draft, context)
|
|
58
|
+
: { detected: false, confidence: 0 },
|
|
59
|
+
this.config.criteria.toneDrift.enabled
|
|
60
|
+
? this.toneDriftMonitor.monitor(draft, context)
|
|
61
|
+
: { detected: false, confidence: 0 },
|
|
62
|
+
this.config.criteria.unsafeReasoning.enabled
|
|
63
|
+
? this.unsafeReasoningDetector.detect(draft, context)
|
|
64
|
+
: { detected: false, confidence: 0 }
|
|
65
|
+
]);
|
|
66
|
+
// Calculate overall risk level and recommended action
|
|
67
|
+
const { overallRisk, recommendedAction, confidence } = this.aggregateResults(hallucination, inconsistency, toneDrift, unsafeReasoning);
|
|
68
|
+
const result = {
|
|
69
|
+
hallucination,
|
|
70
|
+
inconsistency,
|
|
71
|
+
toneDrift,
|
|
72
|
+
unsafeReasoning,
|
|
73
|
+
overallRisk,
|
|
74
|
+
recommendedAction,
|
|
75
|
+
confidence,
|
|
76
|
+
timestamp: new Date(),
|
|
77
|
+
evaluationId
|
|
78
|
+
};
|
|
79
|
+
// Log evaluation time for performance monitoring
|
|
80
|
+
const evaluationTime = Date.now() - startTime;
|
|
81
|
+
if (evaluationTime > 1000) {
|
|
82
|
+
console.warn(`[Governance] Evaluation took ${evaluationTime}ms (target: <1000ms)`);
|
|
83
|
+
}
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Determine if evaluation is required based on context
|
|
88
|
+
*/
|
|
89
|
+
shouldEvaluate(response, context) {
|
|
90
|
+
// Always evaluate if governance is enabled
|
|
91
|
+
if (!this.config.enabled) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
// Skip evaluation for certain response types
|
|
95
|
+
if (this.isSystemResponse(response)) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
// Always evaluate for crisis-prone sessions
|
|
99
|
+
if (context.metadata?.crisisHistory) {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Aggregate individual detection results into overall risk assessment
|
|
106
|
+
*/
|
|
107
|
+
aggregateResults(hallucination, inconsistency, toneDrift, unsafeReasoning) {
|
|
108
|
+
// Weight different criteria based on severity
|
|
109
|
+
const weights = {
|
|
110
|
+
unsafeReasoning: 3.0,
|
|
111
|
+
hallucination: 2.0,
|
|
112
|
+
inconsistency: 1.5,
|
|
113
|
+
toneDrift: 1.0
|
|
114
|
+
};
|
|
115
|
+
// Calculate weighted risk score
|
|
116
|
+
let riskScore = 0;
|
|
117
|
+
let totalWeight = 0;
|
|
118
|
+
let maxConfidence = 0;
|
|
119
|
+
if (unsafeReasoning.detected) {
|
|
120
|
+
riskScore += unsafeReasoning.confidence * weights.unsafeReasoning;
|
|
121
|
+
totalWeight += weights.unsafeReasoning;
|
|
122
|
+
maxConfidence = Math.max(maxConfidence, unsafeReasoning.confidence);
|
|
123
|
+
}
|
|
124
|
+
if (hallucination.detected) {
|
|
125
|
+
riskScore += hallucination.confidence * weights.hallucination;
|
|
126
|
+
totalWeight += weights.hallucination;
|
|
127
|
+
maxConfidence = Math.max(maxConfidence, hallucination.confidence);
|
|
128
|
+
}
|
|
129
|
+
if (inconsistency.detected) {
|
|
130
|
+
riskScore += inconsistency.confidence * weights.inconsistency;
|
|
131
|
+
totalWeight += weights.inconsistency;
|
|
132
|
+
maxConfidence = Math.max(maxConfidence, inconsistency.confidence);
|
|
133
|
+
}
|
|
134
|
+
if (toneDrift.detected) {
|
|
135
|
+
riskScore += toneDrift.confidence * weights.toneDrift;
|
|
136
|
+
totalWeight += weights.toneDrift;
|
|
137
|
+
maxConfidence = Math.max(maxConfidence, toneDrift.confidence);
|
|
138
|
+
}
|
|
139
|
+
// Normalize risk score
|
|
140
|
+
const normalizedRisk = totalWeight > 0 ? riskScore / totalWeight : 0;
|
|
141
|
+
// Determine risk level
|
|
142
|
+
let overallRisk;
|
|
143
|
+
if (normalizedRisk === 0) {
|
|
144
|
+
overallRisk = RiskLevel.NONE;
|
|
145
|
+
}
|
|
146
|
+
else if (normalizedRisk < 0.25) {
|
|
147
|
+
overallRisk = RiskLevel.LOW;
|
|
148
|
+
}
|
|
149
|
+
else if (normalizedRisk < 0.5) {
|
|
150
|
+
overallRisk = RiskLevel.MEDIUM;
|
|
151
|
+
}
|
|
152
|
+
else if (normalizedRisk < 0.75) {
|
|
153
|
+
overallRisk = RiskLevel.HIGH;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
overallRisk = RiskLevel.CRITICAL;
|
|
157
|
+
}
|
|
158
|
+
// Determine recommended action based on thresholds
|
|
159
|
+
let recommendedAction;
|
|
160
|
+
if (unsafeReasoning.detected && unsafeReasoning.confidence > 0.8) {
|
|
161
|
+
// Always block high-confidence unsafe reasoning
|
|
162
|
+
recommendedAction = InterventionAction.BLOCK;
|
|
163
|
+
}
|
|
164
|
+
else if (maxConfidence > this.config.interventionThresholds.block) {
|
|
165
|
+
recommendedAction = InterventionAction.BLOCK;
|
|
166
|
+
}
|
|
167
|
+
else if (maxConfidence > this.config.interventionThresholds.modify) {
|
|
168
|
+
recommendedAction = InterventionAction.MODIFY;
|
|
169
|
+
}
|
|
170
|
+
else if (maxConfidence > this.config.interventionThresholds.warn) {
|
|
171
|
+
recommendedAction = InterventionAction.MODIFY;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
recommendedAction = InterventionAction.APPROVE;
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
overallRisk,
|
|
178
|
+
recommendedAction,
|
|
179
|
+
confidence: maxConfidence
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Check if response is a system message that shouldn't be evaluated
|
|
184
|
+
*/
|
|
185
|
+
isSystemResponse(response) {
|
|
186
|
+
const systemPatterns = [
|
|
187
|
+
/^Error:/,
|
|
188
|
+
/^System:/,
|
|
189
|
+
/^Loading/,
|
|
190
|
+
/^Please wait/
|
|
191
|
+
];
|
|
192
|
+
return systemPatterns.some(pattern => pattern.test(response));
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Generate unique evaluation ID for audit trail
|
|
196
|
+
*/
|
|
197
|
+
generateEvaluationId() {
|
|
198
|
+
return `eval_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Update configuration dynamically
|
|
202
|
+
*/
|
|
203
|
+
updateConfig(config) {
|
|
204
|
+
this.config = { ...this.config, ...config };
|
|
205
|
+
// Update detector configurations
|
|
206
|
+
if (config.criteria?.hallucination) {
|
|
207
|
+
this.hallucinationDetector.updateConfig(config.criteria.hallucination);
|
|
208
|
+
}
|
|
209
|
+
if (config.criteria?.inconsistency) {
|
|
210
|
+
this.inconsistencyChecker.updateConfig(config.criteria.inconsistency);
|
|
211
|
+
}
|
|
212
|
+
if (config.criteria?.toneDrift) {
|
|
213
|
+
this.toneDriftMonitor.updateConfig(config.criteria.toneDrift);
|
|
214
|
+
}
|
|
215
|
+
if (config.criteria?.unsafeReasoning) {
|
|
216
|
+
this.unsafeReasoningDetector.updateConfig(config.criteria.unsafeReasoning);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Main governance pipeline that orchestrates evaluation and intervention
|
|
222
|
+
*/
|
|
223
|
+
export class GovernancePipeline {
|
|
224
|
+
evaluationEngine;
|
|
225
|
+
config;
|
|
226
|
+
constructor(config) {
|
|
227
|
+
this.config = config || loadConfig();
|
|
228
|
+
this.evaluationEngine = new EvaluationEngine(this.config);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Main entry point for governance evaluation
|
|
232
|
+
*/
|
|
233
|
+
async evaluate(draftResponse, context) {
|
|
234
|
+
// Check if evaluation is required
|
|
235
|
+
if (!this.evaluationEngine.shouldEvaluate(draftResponse, context)) {
|
|
236
|
+
return this.createPassthroughResult();
|
|
237
|
+
}
|
|
238
|
+
// Run evaluation
|
|
239
|
+
return await this.evaluationEngine.evaluate(draftResponse, context);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Determine action based on evaluation results
|
|
243
|
+
*/
|
|
244
|
+
determineAction(evaluation) {
|
|
245
|
+
return evaluation.recommendedAction;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Create a passthrough result for cases where evaluation is skipped
|
|
249
|
+
*/
|
|
250
|
+
createPassthroughResult() {
|
|
251
|
+
return {
|
|
252
|
+
hallucination: { detected: false, confidence: 0 },
|
|
253
|
+
inconsistency: { detected: false, confidence: 0 },
|
|
254
|
+
toneDrift: { detected: false, confidence: 0 },
|
|
255
|
+
unsafeReasoning: { detected: false, confidence: 0 },
|
|
256
|
+
overallRisk: RiskLevel.NONE,
|
|
257
|
+
recommendedAction: InterventionAction.APPROVE,
|
|
258
|
+
confidence: 0,
|
|
259
|
+
timestamp: new Date(),
|
|
260
|
+
evaluationId: `passthrough_${Date.now()}`
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
export default GovernancePipeline;
|
|
265
|
+
//# sourceMappingURL=evaluationEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluationEngine.js","sourceRoot":"","sources":["../../src/governance/evaluationEngine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAoB,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3D,wCAAwC;AACxC,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;IACnB,qCAAe,CAAA;IACf,uCAAiB,CAAA;IACjB,2CAAqB,CAAA;AACvB,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B;AAED,MAAM,CAAN,IAAY,SAMX;AAND,WAAY,SAAS;IACnB,0BAAa,CAAA;IACb,wBAAW,CAAA;IACX,8BAAiB,CAAA;IACjB,0BAAa,CAAA;IACb,kCAAqB,CAAA;AACvB,CAAC,EANW,SAAS,KAAT,SAAS,QAMpB;AAyCD;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACnB,qBAAqB,CAAwB;IAC7C,oBAAoB,CAAuB;IAC3C,gBAAgB,CAAmB;IACnC,uBAAuB,CAA0B;IACjD,MAAM,CAAmB;IAEjC,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;QAErC,2BAA2B;QAC3B,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3F,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACzF,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7E,IAAI,CAAC,uBAAuB,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACnG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,OAAuB;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,gDAAgD;QAChD,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO;gBACxC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;gBACnD,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;YAEtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO;gBACxC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;gBACjD,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;YAEtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO;gBACpC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC/C,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;YAEtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO;gBAC1C,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;gBACrD,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;SACvC,CAAC,CAAC;QAEH,sDAAsD;QACtD,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAC1E,aAAa,EACb,aAAa,EACb,SAAS,EACT,eAAe,CAChB,CAAC;QAEF,MAAM,MAAM,GAAqB;YAC/B,aAAa;YACb,aAAa;YACb,SAAS;YACT,eAAe;YACf,WAAW;YACX,iBAAiB;YACjB,UAAU;YACV,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,YAAY;SACb,CAAC;QAEF,iDAAiD;QACjD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAC9C,IAAI,cAAc,GAAG,IAAI,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,gCAAgC,cAAc,sBAAsB,CAAC,CAAC;QACrF,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAgB,EAAE,OAAuB;QACtD,2CAA2C;QAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,6CAA6C;QAC7C,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4CAA4C;QAC5C,IAAI,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,aAA8B,EAC9B,aAA8B,EAC9B,SAA0B,EAC1B,eAAgC;QAEhC,8CAA8C;QAC9C,MAAM,OAAO,GAAG;YACd,eAAe,EAAE,GAAG;YACpB,aAAa,EAAE,GAAG;YAClB,aAAa,EAAE,GAAG;YAClB,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,gCAAgC;QAChC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;YAC7B,SAAS,IAAI,eAAe,CAAC,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC;YAClE,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;YACvC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC3B,SAAS,IAAI,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;YAC9D,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC;YACrC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC3B,SAAS,IAAI,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;YAC9D,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC;YACrC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACvB,SAAS,IAAI,SAAS,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;YACtD,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;YACjC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;QAChE,CAAC;QAED,uBAAuB;QACvB,MAAM,cAAc,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,uBAAuB;QACvB,IAAI,WAAsB,CAAC;QAC3B,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC;QAC/B,CAAC;aAAM,IAAI,cAAc,GAAG,IAAI,EAAE,CAAC;YACjC,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC;QAC9B,CAAC;aAAM,IAAI,cAAc,GAAG,GAAG,EAAE,CAAC;YAChC,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;QACjC,CAAC;aAAM,IAAI,cAAc,GAAG,IAAI,EAAE,CAAC;YACjC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC;QACnC,CAAC;QAED,mDAAmD;QACnD,IAAI,iBAAqC,CAAC;QAC1C,IAAI,eAAe,CAAC,QAAQ,IAAI,eAAe,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;YACjE,gDAAgD;YAChD,iBAAiB,GAAG,kBAAkB,CAAC,KAAK,CAAC;QAC/C,CAAC;aAAM,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;YACpE,iBAAiB,GAAG,kBAAkB,CAAC,KAAK,CAAC;QAC/C,CAAC;aAAM,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC;YACrE,iBAAiB,GAAG,kBAAkB,CAAC,MAAM,CAAC;QAChD,CAAC;aAAM,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;YACnE,iBAAiB,GAAG,kBAAkB,CAAC,MAAM,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,iBAAiB,GAAG,kBAAkB,CAAC,OAAO,CAAC;QACjD,CAAC;QAED,OAAO;YACL,WAAW;YACX,iBAAiB;YACjB,UAAU,EAAE,aAAa;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,QAAgB;QACvC,MAAM,cAAc,GAAG;YACrB,SAAS;YACT,UAAU;YACV,UAAU;YACV,cAAc;SACf,CAAC;QAEF,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAiC;QAC5C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAE5C,iCAAiC;QACjC,IAAI,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;YACnC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;YACnC,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC;YACrC,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACrB,gBAAgB,CAAmB;IACnC,MAAM,CAAmB;IAEjC,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;QACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,aAAqB,EAAE,OAAuB;QAC3D,kCAAkC;QAClC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACxC,CAAC;QAED,iBAAiB;QACjB,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,UAA4B;QAC1C,OAAO,UAAU,CAAC,iBAAiB,CAAC;IACtC,CAAC;IAED;;OAEG;IACK,uBAAuB;QAC7B,OAAO;YACL,aAAa,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;YACjD,aAAa,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;YACjD,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;YAC7C,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;YACnD,WAAW,EAAE,SAAS,CAAC,IAAI;YAC3B,iBAAiB,EAAE,kBAAkB,CAAC,OAAO;YAC7C,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,YAAY,EAAE,eAAe,IAAI,CAAC,GAAG,EAAE,EAAE;SAC1C,CAAC;IACJ,CAAC;CACF;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CouchLoop Behavioral Governance Layer - Intervention Engine
|
|
3
|
+
*
|
|
4
|
+
* Handles response blocking, modification, rewriting, and fallback responses
|
|
5
|
+
* based on governance evaluation results
|
|
6
|
+
*/
|
|
7
|
+
import { type EvaluationResult, InterventionAction } from './evaluationEngine.js';
|
|
8
|
+
import { type GovernanceConfig } from './config.js';
|
|
9
|
+
export interface InterventionResult {
|
|
10
|
+
action: InterventionAction;
|
|
11
|
+
originalResponse: string;
|
|
12
|
+
finalResponse: string;
|
|
13
|
+
modified: boolean;
|
|
14
|
+
reason: string;
|
|
15
|
+
modifications?: ModificationDetail[];
|
|
16
|
+
confidence: number;
|
|
17
|
+
}
|
|
18
|
+
interface ModificationDetail {
|
|
19
|
+
type: 'removed' | 'replaced' | 'softened' | 'neutralized';
|
|
20
|
+
original: string;
|
|
21
|
+
modified: string;
|
|
22
|
+
reason: string;
|
|
23
|
+
}
|
|
24
|
+
export declare class InterventionEngine {
|
|
25
|
+
private config;
|
|
26
|
+
constructor(config?: GovernanceConfig);
|
|
27
|
+
/**
|
|
28
|
+
* Main intervention method - applies appropriate action based on evaluation
|
|
29
|
+
*/
|
|
30
|
+
intervene(action: InterventionAction, originalResponse: string, evaluationResult: EvaluationResult): Promise<InterventionResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Approve response without modification
|
|
33
|
+
*/
|
|
34
|
+
private approve;
|
|
35
|
+
/**
|
|
36
|
+
* Block response and provide safe alternative
|
|
37
|
+
*/
|
|
38
|
+
private block;
|
|
39
|
+
/**
|
|
40
|
+
* Modify response to remove or soften problematic content
|
|
41
|
+
*/
|
|
42
|
+
private modify;
|
|
43
|
+
/**
|
|
44
|
+
* Replace with safe fallback response
|
|
45
|
+
*/
|
|
46
|
+
private fallback;
|
|
47
|
+
/**
|
|
48
|
+
* Remove hallucinated content from response
|
|
49
|
+
*/
|
|
50
|
+
private removeHallucinatedContent;
|
|
51
|
+
/**
|
|
52
|
+
* Remove unsafe content from response
|
|
53
|
+
*/
|
|
54
|
+
private removeUnsafeContent;
|
|
55
|
+
/**
|
|
56
|
+
* Neutralize problematic tone in response
|
|
57
|
+
*/
|
|
58
|
+
private neutralizeTone;
|
|
59
|
+
/**
|
|
60
|
+
* Soften claims to address inconsistencies
|
|
61
|
+
*/
|
|
62
|
+
private softenClaims;
|
|
63
|
+
/**
|
|
64
|
+
* Check if too much content was removed
|
|
65
|
+
*/
|
|
66
|
+
private tooMuchRemoved;
|
|
67
|
+
/**
|
|
68
|
+
* Apply intervention based on evaluation without explicit action
|
|
69
|
+
*/
|
|
70
|
+
autoIntervene(originalResponse: string, evaluationResult: EvaluationResult): Promise<InterventionResult>;
|
|
71
|
+
/**
|
|
72
|
+
* Generate explanation for intervention
|
|
73
|
+
*/
|
|
74
|
+
generateExplanation(result: InterventionResult): string;
|
|
75
|
+
/**
|
|
76
|
+
* Update configuration
|
|
77
|
+
*/
|
|
78
|
+
updateConfig(config: GovernanceConfig): void;
|
|
79
|
+
}
|
|
80
|
+
export default InterventionEngine;
|
|
81
|
+
//# sourceMappingURL=intervention.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intervention.d.ts","sourceRoot":"","sources":["../../src/governance/intervention.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,kBAAkB,EAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,CAAC,EAAE,gBAAgB;IAIrC;;OAEG;IACG,SAAS,CACb,MAAM,EAAE,kBAAkB,EAC1B,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,kBAAkB,CAAC;IAoB9B;;OAEG;IACH,OAAO,CAAC,OAAO;IAWf;;OAEG;IACH,OAAO,CAAC,KAAK;IA0Cb;;OAEG;IACH,OAAO,CAAC,MAAM;IAyDd;;OAEG;IACH,OAAO,CAAC,QAAQ;IA6BhB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA0DjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyD3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAqEtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAkDpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACG,aAAa,CACjB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,kBAAkB,CAAC;IAM9B;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM;IAuBvD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;CAG7C;AAED,eAAe,kBAAkB,CAAC"}
|