couchloop-eq-mcp 1.0.2 → 1.0.3
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 +4 -0
- 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 +9 -1
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/auth.js +37 -10
- 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
package/dist/tools/insight.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insight.d.ts","sourceRoot":"","sources":["../../src/tools/insight.ts"],"names":[],"mappings":"AAQA,wBAAsB,WAAW,CAAC,IAAI,EAAE,GAAG;;;;;;GA4D1C;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;;GA6D1C;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,GAAG
|
|
1
|
+
{"version":3,"file":"insight.d.ts","sourceRoot":"","sources":["../../src/tools/insight.ts"],"names":[],"mappings":"AAQA,wBAAsB,WAAW,CAAC,IAAI,EAAE,GAAG;;;;;;GA4D1C;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;;GA6D1C;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoF7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendMessage-complex-backup.d.ts","sourceRoot":"","sources":["../../src/tools/sendMessage-complex-backup.ts"],"names":[],"mappings":"AAgCA;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,OAAO,gBA2X9C"}
|
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { eq, desc } from 'drizzle-orm';
|
|
3
|
+
import { getDb } from '../db/client.js';
|
|
4
|
+
import { getShrinkChatClient } from '../clients/shrinkChatClient.js';
|
|
5
|
+
import { sessions, checkpoints, journeys, threadMappings, crisisEvents, governanceEvaluations } from '../db/schema.js';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
import { NotFoundError } from '../utils/errors.js';
|
|
8
|
+
import { errorHandler, ErrorType } from '../utils/errorHandler.js';
|
|
9
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
10
|
+
// Import governance layer
|
|
11
|
+
import { GovernancePipeline, InterventionAction } from '../governance/evaluationEngine.js';
|
|
12
|
+
import { InterventionEngine } from '../governance/intervention.js';
|
|
13
|
+
import { loadConfig } from '../governance/config.js';
|
|
14
|
+
// Input validation schema
|
|
15
|
+
const SendMessageSchema = z.object({
|
|
16
|
+
session_id: z.string().uuid({
|
|
17
|
+
message: 'Invalid session ID format',
|
|
18
|
+
}),
|
|
19
|
+
message: z.string().min(1, 'Message cannot be empty'),
|
|
20
|
+
save_checkpoint: z.boolean().default(false),
|
|
21
|
+
checkpoint_key: z.string().optional(),
|
|
22
|
+
advance_step: z.boolean().default(false),
|
|
23
|
+
include_memory: z.boolean().default(true),
|
|
24
|
+
system_prompt: z.string().optional(),
|
|
25
|
+
conversation_type: z.string().optional(),
|
|
26
|
+
});
|
|
27
|
+
// type SendMessageInput = z.infer<typeof SendMessageSchema>; // Removed - unused type
|
|
28
|
+
/**
|
|
29
|
+
* Send a message through the shrink-chat therapeutic stack
|
|
30
|
+
* This is the primary integration point with the shrink-chat backend
|
|
31
|
+
*/
|
|
32
|
+
export async function sendMessage(args) {
|
|
33
|
+
let threadId; // Declare at function level for error handler access
|
|
34
|
+
try {
|
|
35
|
+
// Validate input
|
|
36
|
+
const input = SendMessageSchema.parse(args);
|
|
37
|
+
logger.info(`Sending message for session ${input.session_id}`);
|
|
38
|
+
const db = getDb();
|
|
39
|
+
const client = getShrinkChatClient();
|
|
40
|
+
// 1. Get session and verify it exists
|
|
41
|
+
const [session] = await db
|
|
42
|
+
.select()
|
|
43
|
+
.from(sessions)
|
|
44
|
+
.where(eq(sessions.id, input.session_id))
|
|
45
|
+
.limit(1);
|
|
46
|
+
if (!session) {
|
|
47
|
+
throw new NotFoundError(`Session ${input.session_id} not found`);
|
|
48
|
+
}
|
|
49
|
+
// 2. Get or generate thread ID
|
|
50
|
+
// Threads in shrink-chat are created lazily on first message
|
|
51
|
+
threadId = session.threadId || undefined;
|
|
52
|
+
if (!threadId) {
|
|
53
|
+
// Generate a new thread ID for this session
|
|
54
|
+
threadId = uuidv4();
|
|
55
|
+
logger.info(`Generated new thread ID ${threadId} for session ${input.session_id}`);
|
|
56
|
+
// Update session with thread ID
|
|
57
|
+
await db.update(sessions)
|
|
58
|
+
.set({ threadId })
|
|
59
|
+
.where(eq(sessions.id, input.session_id));
|
|
60
|
+
// Create thread mapping for MCP-Shrink-chat integration
|
|
61
|
+
await db.insert(threadMappings).values({
|
|
62
|
+
sessionId: input.session_id,
|
|
63
|
+
threadId: threadId,
|
|
64
|
+
source: 'mcp',
|
|
65
|
+
metadata: {
|
|
66
|
+
createdFrom: 'sendMessage',
|
|
67
|
+
timestamp: new Date().toISOString(),
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
logger.info(`Created thread mapping for session ${input.session_id} -> thread ${threadId}`);
|
|
71
|
+
}
|
|
72
|
+
// Get journey if exists
|
|
73
|
+
let journey = null;
|
|
74
|
+
if (session.journeyId) {
|
|
75
|
+
const [journeyRecord] = await db
|
|
76
|
+
.select()
|
|
77
|
+
.from(journeys)
|
|
78
|
+
.where(eq(journeys.id, session.journeyId))
|
|
79
|
+
.limit(1);
|
|
80
|
+
journey = journeyRecord;
|
|
81
|
+
}
|
|
82
|
+
// 3. Prepare context for shrink-chat
|
|
83
|
+
const memoryContext = input.include_memory && session.metadata
|
|
84
|
+
? JSON.stringify(session.metadata)
|
|
85
|
+
: '';
|
|
86
|
+
const enhancedContext = {
|
|
87
|
+
sessionId: session.id,
|
|
88
|
+
journeyId: session.journeyId,
|
|
89
|
+
journeySlug: journey?.slug,
|
|
90
|
+
currentStep: session.currentStep,
|
|
91
|
+
sessionStatus: session.status,
|
|
92
|
+
};
|
|
93
|
+
// 4. Get conversation history if available
|
|
94
|
+
const recentCheckpoints = await db
|
|
95
|
+
.select()
|
|
96
|
+
.from(checkpoints)
|
|
97
|
+
.where(eq(checkpoints.sessionId, session.id))
|
|
98
|
+
.orderBy(desc(checkpoints.createdAt))
|
|
99
|
+
.limit(5);
|
|
100
|
+
const history = recentCheckpoints
|
|
101
|
+
.reverse()
|
|
102
|
+
.filter(cp => cp.value && typeof cp.value === 'object' && 'message' in cp.value && 'response' in cp.value)
|
|
103
|
+
.flatMap(cp => {
|
|
104
|
+
const val = cp.value;
|
|
105
|
+
return [
|
|
106
|
+
{ role: 'user', content: val.message },
|
|
107
|
+
{ role: 'assistant', content: val.response },
|
|
108
|
+
];
|
|
109
|
+
})
|
|
110
|
+
.slice(-10); // Last 10 messages (5 exchanges)
|
|
111
|
+
// 5. Save user message as checkpoint BEFORE sending
|
|
112
|
+
const userMessageId = uuidv4();
|
|
113
|
+
await db.insert(checkpoints).values({
|
|
114
|
+
sessionId: session.id,
|
|
115
|
+
stepId: session.currentStep.toString(),
|
|
116
|
+
key: 'user-message',
|
|
117
|
+
value: {
|
|
118
|
+
message: input.message,
|
|
119
|
+
messageId: userMessageId,
|
|
120
|
+
role: 'user',
|
|
121
|
+
timestamp: new Date().toISOString(),
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
logger.debug(`Saved user message checkpoint for session ${session.id}`);
|
|
125
|
+
// 6. Send message through shrink-chat
|
|
126
|
+
const response = await client.sendMessage(threadId, input.message, // This is 'prompt' in the API
|
|
127
|
+
{
|
|
128
|
+
memoryContext,
|
|
129
|
+
enhancedContext,
|
|
130
|
+
history,
|
|
131
|
+
systemPrompt: input.system_prompt,
|
|
132
|
+
conversationType: input.conversation_type,
|
|
133
|
+
idempotencyKey: uuidv4(),
|
|
134
|
+
});
|
|
135
|
+
// 6.5 GOVERNANCE LAYER - Evaluate and potentially intervene on response
|
|
136
|
+
const governanceConfig = loadConfig();
|
|
137
|
+
let finalResponse = response;
|
|
138
|
+
let governanceApplied = false;
|
|
139
|
+
let governanceMetadata = {};
|
|
140
|
+
if (governanceConfig.enabled) {
|
|
141
|
+
try {
|
|
142
|
+
logger.info(`[Governance] Evaluating response for session ${session.id}`);
|
|
143
|
+
// Build governance context
|
|
144
|
+
const governanceContext = {
|
|
145
|
+
sessionId: session.id,
|
|
146
|
+
userId: session.userId || undefined,
|
|
147
|
+
journeyId: session.journeyId || undefined,
|
|
148
|
+
conversationHistory: history.map(msg => ({
|
|
149
|
+
role: msg.role,
|
|
150
|
+
content: msg.content,
|
|
151
|
+
timestamp: new Date()
|
|
152
|
+
})),
|
|
153
|
+
currentStep: session.currentStep,
|
|
154
|
+
metadata: {
|
|
155
|
+
crisisHistory: response.crisisLevel && Number(response.crisisLevel) > 7,
|
|
156
|
+
...(session.metadata || {})
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
// Initialize governance pipeline
|
|
160
|
+
const governancePipeline = new GovernancePipeline(governanceConfig);
|
|
161
|
+
const interventionEngine = new InterventionEngine(governanceConfig);
|
|
162
|
+
// Evaluate draft response
|
|
163
|
+
const evaluation = await governancePipeline.evaluate(response.content || '', governanceContext);
|
|
164
|
+
// Log evaluation results
|
|
165
|
+
logger.debug(`[Governance] Evaluation results:`, {
|
|
166
|
+
hallucination: evaluation.hallucination.detected,
|
|
167
|
+
inconsistency: evaluation.inconsistency.detected,
|
|
168
|
+
toneDrift: evaluation.toneDrift.detected,
|
|
169
|
+
unsafeReasoning: evaluation.unsafeReasoning.detected,
|
|
170
|
+
overallRisk: evaluation.overallRisk,
|
|
171
|
+
recommendedAction: evaluation.recommendedAction,
|
|
172
|
+
confidence: evaluation.confidence
|
|
173
|
+
});
|
|
174
|
+
// Apply intervention if needed
|
|
175
|
+
if (evaluation.recommendedAction !== InterventionAction.APPROVE) {
|
|
176
|
+
logger.warn(`[Governance] Intervention required: ${evaluation.recommendedAction}`);
|
|
177
|
+
const interventionResult = await interventionEngine.intervene(evaluation.recommendedAction, response.content || '', evaluation);
|
|
178
|
+
// Update response with governed content
|
|
179
|
+
finalResponse = {
|
|
180
|
+
...response,
|
|
181
|
+
content: interventionResult.finalResponse
|
|
182
|
+
};
|
|
183
|
+
governanceApplied = true;
|
|
184
|
+
governanceMetadata = {
|
|
185
|
+
evaluationId: evaluation.evaluationId,
|
|
186
|
+
action: interventionResult.action,
|
|
187
|
+
modified: interventionResult.modified,
|
|
188
|
+
reason: interventionResult.reason,
|
|
189
|
+
confidence: interventionResult.confidence,
|
|
190
|
+
originalContentHash: Buffer.from(response.content || '').toString('base64').substring(0, 20) // Short hash for audit
|
|
191
|
+
};
|
|
192
|
+
logger.info(`[Governance] Intervention applied: ${interventionResult.action}`);
|
|
193
|
+
// Save governance evaluation to database (async, non-blocking)
|
|
194
|
+
saveGovernanceEvaluation(session.id, evaluation, interventionResult, response.content || '')
|
|
195
|
+
.catch(err => logger.error('[Governance] Failed to save evaluation:', err));
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
logger.debug(`[Governance] Response approved without intervention`);
|
|
199
|
+
// Save approved evaluation for audit trail
|
|
200
|
+
const approvalResult = {
|
|
201
|
+
modified: false,
|
|
202
|
+
action: 'approve',
|
|
203
|
+
reason: 'Response meets safety criteria',
|
|
204
|
+
finalResponse: response.content || '',
|
|
205
|
+
confidence: evaluation.confidence
|
|
206
|
+
};
|
|
207
|
+
saveGovernanceEvaluation(session.id, evaluation, approvalResult, response.content || '')
|
|
208
|
+
.catch(err => logger.error('[Governance] Failed to save approved evaluation:', err));
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (governanceError) {
|
|
212
|
+
// Governance failure should not break the response
|
|
213
|
+
logger.error('[Governance] Evaluation failed, using original response:', governanceError);
|
|
214
|
+
// In production, optionally use fallback mode
|
|
215
|
+
if (governanceConfig.mode === 'enforce' && process.env.NODE_ENV === 'production') {
|
|
216
|
+
// Use safe fallback if governance fails in production
|
|
217
|
+
finalResponse = {
|
|
218
|
+
...response,
|
|
219
|
+
content: governanceConfig.fallbackResponses.error
|
|
220
|
+
};
|
|
221
|
+
governanceApplied = true;
|
|
222
|
+
governanceMetadata = {
|
|
223
|
+
error: true,
|
|
224
|
+
reason: 'Governance evaluation failed'
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// 7. Save assistant response as checkpoint AFTER receiving (use governed response)
|
|
230
|
+
await db.insert(checkpoints).values({
|
|
231
|
+
sessionId: session.id,
|
|
232
|
+
stepId: session.currentStep.toString(),
|
|
233
|
+
key: 'assistant-message',
|
|
234
|
+
value: {
|
|
235
|
+
message: finalResponse.content,
|
|
236
|
+
messageId: finalResponse.messageId,
|
|
237
|
+
role: 'assistant',
|
|
238
|
+
crisisLevel: finalResponse.crisisLevel,
|
|
239
|
+
emotions: finalResponse.emotions,
|
|
240
|
+
therapeuticTechnique: finalResponse.therapeuticTechnique,
|
|
241
|
+
governanceApplied,
|
|
242
|
+
governanceMetadata: governanceApplied ? governanceMetadata : undefined,
|
|
243
|
+
timestamp: new Date().toISOString(),
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
logger.debug(`Saved assistant message checkpoint for session ${session.id}`);
|
|
247
|
+
// 8. Handle crisis detection if present
|
|
248
|
+
let crisisHandled = false;
|
|
249
|
+
if (finalResponse.crisisLevel && Number(finalResponse.crisisLevel) > 7) {
|
|
250
|
+
logger.warn(`Crisis detected: Level ${finalResponse.crisisLevel} for session ${session.id}`);
|
|
251
|
+
crisisHandled = await handleCrisisDetection(session.id, threadId, finalResponse);
|
|
252
|
+
}
|
|
253
|
+
// 9. Save additional checkpoint if requested (for backward compatibility)
|
|
254
|
+
if (input.save_checkpoint) {
|
|
255
|
+
const checkpointKey = input.checkpoint_key || 'message_response';
|
|
256
|
+
await db.insert(checkpoints).values({
|
|
257
|
+
sessionId: session.id,
|
|
258
|
+
stepId: session.currentStep.toString(),
|
|
259
|
+
key: checkpointKey,
|
|
260
|
+
value: {
|
|
261
|
+
message: input.message,
|
|
262
|
+
response: finalResponse.content,
|
|
263
|
+
messageId: finalResponse.messageId,
|
|
264
|
+
crisisLevel: finalResponse.crisisLevel,
|
|
265
|
+
emotions: finalResponse.emotions,
|
|
266
|
+
therapeuticTechnique: finalResponse.therapeuticTechnique,
|
|
267
|
+
governanceApplied,
|
|
268
|
+
governanceMetadata: governanceApplied ? governanceMetadata : undefined,
|
|
269
|
+
timestamp: new Date().toISOString(),
|
|
270
|
+
},
|
|
271
|
+
});
|
|
272
|
+
logger.debug(`Saved checkpoint '${checkpointKey}' for session ${session.id}`);
|
|
273
|
+
}
|
|
274
|
+
// 10. Advance step if requested (for journey progression)
|
|
275
|
+
if (input.advance_step && session.journeyId) {
|
|
276
|
+
const newStep = session.currentStep + 1;
|
|
277
|
+
await db.update(sessions)
|
|
278
|
+
.set({
|
|
279
|
+
currentStep: newStep,
|
|
280
|
+
updatedAt: new Date(),
|
|
281
|
+
})
|
|
282
|
+
.where(eq(sessions.id, input.session_id));
|
|
283
|
+
logger.info(`Advanced session ${session.id} to step ${newStep}`);
|
|
284
|
+
}
|
|
285
|
+
// 11. Return formatted response
|
|
286
|
+
return {
|
|
287
|
+
success: true,
|
|
288
|
+
content: finalResponse.content || '',
|
|
289
|
+
messageId: finalResponse.messageId,
|
|
290
|
+
metadata: {
|
|
291
|
+
crisisDetected: finalResponse.crisisDetected || (finalResponse.crisisLevel && Number(finalResponse.crisisLevel) > 7),
|
|
292
|
+
crisisLevel: finalResponse.crisisLevel,
|
|
293
|
+
crisisHandled,
|
|
294
|
+
crisisConfidence: finalResponse.crisis_confidence, // Add crisis confidence
|
|
295
|
+
ragConfidence: finalResponse.meta?.rag_confidence, // Add RAG confidence if available
|
|
296
|
+
emotions: finalResponse.emotions,
|
|
297
|
+
therapeuticTechnique: finalResponse.therapeuticTechnique,
|
|
298
|
+
resources: finalResponse.resources,
|
|
299
|
+
sessionId: session.id,
|
|
300
|
+
threadId,
|
|
301
|
+
currentStep: input.advance_step ? session.currentStep + 1 : session.currentStep,
|
|
302
|
+
// Governance metadata
|
|
303
|
+
governanceApplied,
|
|
304
|
+
governanceAction: governanceApplied ? governanceMetadata.action : undefined,
|
|
305
|
+
governanceReason: governanceApplied ? governanceMetadata.reason : undefined,
|
|
306
|
+
governanceConfidence: governanceApplied ? governanceMetadata.confidence : undefined,
|
|
307
|
+
},
|
|
308
|
+
timestamp: new Date().toISOString(),
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
logger.error('Error in sendMessage:', error);
|
|
313
|
+
// Parse input for error handling (may have failed validation)
|
|
314
|
+
let sessionId;
|
|
315
|
+
let messageLength;
|
|
316
|
+
try {
|
|
317
|
+
const parsedInput = SendMessageSchema.parse(args);
|
|
318
|
+
sessionId = parsedInput.session_id;
|
|
319
|
+
messageLength = parsedInput.message.length;
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
// Input validation failed, use defaults
|
|
323
|
+
}
|
|
324
|
+
// Handle error with our error handler
|
|
325
|
+
const errorContext = await errorHandler.handle(error, {
|
|
326
|
+
sessionId,
|
|
327
|
+
threadId,
|
|
328
|
+
messageLength,
|
|
329
|
+
});
|
|
330
|
+
// Check if we should fallback based on error type
|
|
331
|
+
if (errorContext.recoverable && process.env.FALLBACK_TO_LOCAL_PROCESSING === 'true') {
|
|
332
|
+
// Fallback for recoverable errors
|
|
333
|
+
if (errorContext.type === ErrorType.NETWORK ||
|
|
334
|
+
errorContext.type === ErrorType.TIMEOUT ||
|
|
335
|
+
errorContext.type === ErrorType.SERVER) {
|
|
336
|
+
logger.info('Falling back to local processing due to recoverable error');
|
|
337
|
+
return handleLocalFallback(args);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
// Special handling for crisis errors
|
|
341
|
+
if (errorContext.type === ErrorType.CRISIS) {
|
|
342
|
+
return {
|
|
343
|
+
success: false,
|
|
344
|
+
error: errorContext.userMessage || errorContext.message,
|
|
345
|
+
metadata: {
|
|
346
|
+
emergencyResources: errorContext.metadata?.emergencyResources,
|
|
347
|
+
crisisDetected: true,
|
|
348
|
+
},
|
|
349
|
+
timestamp: new Date().toISOString(),
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
// Return error response with appropriate user message
|
|
353
|
+
return {
|
|
354
|
+
success: false,
|
|
355
|
+
error: errorContext.userMessage || errorContext.message,
|
|
356
|
+
errorType: errorContext.type,
|
|
357
|
+
recoverable: errorContext.recoverable,
|
|
358
|
+
timestamp: new Date().toISOString(),
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Handle crisis detection and escalation
|
|
364
|
+
*/
|
|
365
|
+
async function handleCrisisDetection(sessionId, threadId, response) {
|
|
366
|
+
const db = getDb();
|
|
367
|
+
try {
|
|
368
|
+
// 1. Update session metadata with crisis flag
|
|
369
|
+
const [existingSession] = await db
|
|
370
|
+
.select()
|
|
371
|
+
.from(sessions)
|
|
372
|
+
.where(eq(sessions.id, sessionId))
|
|
373
|
+
.limit(1);
|
|
374
|
+
const updatedMetadata = {
|
|
375
|
+
...(existingSession?.metadata || {}),
|
|
376
|
+
crisisDetected: true,
|
|
377
|
+
crisisLevel: response.crisisLevel,
|
|
378
|
+
crisisTimestamp: new Date().toISOString(),
|
|
379
|
+
lastCrisisThreadId: threadId,
|
|
380
|
+
};
|
|
381
|
+
await db.update(sessions)
|
|
382
|
+
.set({
|
|
383
|
+
metadata: updatedMetadata,
|
|
384
|
+
updatedAt: new Date(),
|
|
385
|
+
})
|
|
386
|
+
.where(eq(sessions.id, sessionId));
|
|
387
|
+
// 2. Save crisis checkpoint
|
|
388
|
+
await db.insert(checkpoints).values({
|
|
389
|
+
sessionId,
|
|
390
|
+
stepId: 'crisis',
|
|
391
|
+
key: 'crisis_detection',
|
|
392
|
+
value: {
|
|
393
|
+
level: response.crisisLevel,
|
|
394
|
+
resources: response.resources,
|
|
395
|
+
escalationPath: response.escalationPath,
|
|
396
|
+
threadId,
|
|
397
|
+
timestamp: new Date().toISOString(),
|
|
398
|
+
},
|
|
399
|
+
});
|
|
400
|
+
// 3. Save crisis event for tracking
|
|
401
|
+
await db.insert(crisisEvents).values({
|
|
402
|
+
sessionId,
|
|
403
|
+
threadId,
|
|
404
|
+
crisisLevel: Number(response.crisisLevel),
|
|
405
|
+
response: response.content,
|
|
406
|
+
resources: response.resources || [],
|
|
407
|
+
escalationPath: response.escalationPath,
|
|
408
|
+
handled: true,
|
|
409
|
+
});
|
|
410
|
+
logger.info(`Crisis handled for session ${sessionId}, thread ${threadId}`);
|
|
411
|
+
return true;
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
logger.error('Error handling crisis detection:', error);
|
|
415
|
+
return false;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Fallback to local processing when shrink-chat is unavailable
|
|
420
|
+
*/
|
|
421
|
+
async function handleLocalFallback(args) {
|
|
422
|
+
logger.warn('Falling back to local processing due to shrink-chat unavailability');
|
|
423
|
+
const input = SendMessageSchema.parse(args);
|
|
424
|
+
const db = getDb();
|
|
425
|
+
// Get the session to have proper currentStep
|
|
426
|
+
const [session] = await db
|
|
427
|
+
.select()
|
|
428
|
+
.from(sessions)
|
|
429
|
+
.where(eq(sessions.id, input.session_id))
|
|
430
|
+
.limit(1);
|
|
431
|
+
if (!session) {
|
|
432
|
+
logger.error(`Session ${input.session_id} not found for fallback`);
|
|
433
|
+
return {
|
|
434
|
+
success: false,
|
|
435
|
+
error: 'Session not found',
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
const fallbackContent = "I understand you're trying to communicate. The therapeutic service is temporarily unavailable, but your message has been noted. Please try again shortly or contact support if this persists.";
|
|
439
|
+
const fallbackMessageId = uuidv4();
|
|
440
|
+
const timestamp = new Date().toISOString();
|
|
441
|
+
// Save the fallback response as an assistant checkpoint
|
|
442
|
+
try {
|
|
443
|
+
await db.insert(checkpoints).values({
|
|
444
|
+
sessionId: session.id,
|
|
445
|
+
stepId: session.currentStep.toString(),
|
|
446
|
+
key: 'assistant-message',
|
|
447
|
+
value: {
|
|
448
|
+
message: fallbackContent,
|
|
449
|
+
messageId: fallbackMessageId,
|
|
450
|
+
role: 'assistant',
|
|
451
|
+
fallbackMode: true,
|
|
452
|
+
timestamp: timestamp,
|
|
453
|
+
},
|
|
454
|
+
});
|
|
455
|
+
logger.debug(`Saved fallback assistant message checkpoint for session ${session.id}`);
|
|
456
|
+
}
|
|
457
|
+
catch (error) {
|
|
458
|
+
logger.error('Failed to save fallback checkpoint:', error);
|
|
459
|
+
}
|
|
460
|
+
// Basic local response - this would be expanded with actual logic
|
|
461
|
+
return {
|
|
462
|
+
success: true,
|
|
463
|
+
content: fallbackContent,
|
|
464
|
+
messageId: fallbackMessageId,
|
|
465
|
+
metadata: {
|
|
466
|
+
fallbackMode: true,
|
|
467
|
+
sessionId: session.id,
|
|
468
|
+
threadId: session.threadId || undefined,
|
|
469
|
+
currentStep: session.currentStep,
|
|
470
|
+
timestamp: timestamp,
|
|
471
|
+
},
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Save governance evaluation results to database for audit trail
|
|
476
|
+
*/
|
|
477
|
+
async function saveGovernanceEvaluation(sessionId, evaluation, interventionResult, originalContent) {
|
|
478
|
+
const db = getDb();
|
|
479
|
+
try {
|
|
480
|
+
// Save to dedicated governance_evaluations table
|
|
481
|
+
const evaluationId = uuidv4();
|
|
482
|
+
await db.insert(governanceEvaluations).values({
|
|
483
|
+
id: evaluationId,
|
|
484
|
+
sessionId,
|
|
485
|
+
draftResponse: originalContent,
|
|
486
|
+
evaluationResults: {
|
|
487
|
+
hallucination: {
|
|
488
|
+
detected: evaluation.hallucination.detected,
|
|
489
|
+
confidence: evaluation.hallucination.confidence,
|
|
490
|
+
patterns: evaluation.hallucination.patterns || []
|
|
491
|
+
},
|
|
492
|
+
inconsistency: {
|
|
493
|
+
detected: evaluation.inconsistency.detected,
|
|
494
|
+
confidence: evaluation.inconsistency.confidence,
|
|
495
|
+
patterns: evaluation.inconsistency.patterns || []
|
|
496
|
+
},
|
|
497
|
+
toneDrift: {
|
|
498
|
+
detected: evaluation.toneDrift.detected,
|
|
499
|
+
confidence: evaluation.toneDrift.confidence,
|
|
500
|
+
patterns: evaluation.toneDrift.patterns || []
|
|
501
|
+
},
|
|
502
|
+
unsafeReasoning: {
|
|
503
|
+
detected: evaluation.unsafeReasoning.detected,
|
|
504
|
+
confidence: evaluation.unsafeReasoning.confidence,
|
|
505
|
+
patterns: evaluation.unsafeReasoning.patterns || []
|
|
506
|
+
},
|
|
507
|
+
overallRisk: evaluation.overallRisk,
|
|
508
|
+
recommendedAction: evaluation.recommendedAction,
|
|
509
|
+
confidence: evaluation.confidence
|
|
510
|
+
},
|
|
511
|
+
interventionApplied: interventionResult.modified ? interventionResult.action : null,
|
|
512
|
+
finalResponse: interventionResult.finalResponse || originalContent,
|
|
513
|
+
});
|
|
514
|
+
logger.debug(`Saved governance evaluation ${evaluationId} for session ${sessionId}`);
|
|
515
|
+
// Also save as checkpoint for backward compatibility
|
|
516
|
+
await db.insert(checkpoints).values({
|
|
517
|
+
sessionId,
|
|
518
|
+
stepId: 'governance',
|
|
519
|
+
key: 'governance_evaluation',
|
|
520
|
+
value: {
|
|
521
|
+
evaluationId: evaluationId,
|
|
522
|
+
timestamp: new Date().toISOString(),
|
|
523
|
+
overallRisk: evaluation.overallRisk,
|
|
524
|
+
recommendedAction: evaluation.recommendedAction,
|
|
525
|
+
confidence: evaluation.confidence,
|
|
526
|
+
detections: {
|
|
527
|
+
hallucination: evaluation.hallucination.detected,
|
|
528
|
+
inconsistency: evaluation.inconsistency.detected,
|
|
529
|
+
toneDrift: evaluation.toneDrift.detected,
|
|
530
|
+
unsafeReasoning: evaluation.unsafeReasoning.detected,
|
|
531
|
+
},
|
|
532
|
+
intervention: {
|
|
533
|
+
applied: interventionResult.modified,
|
|
534
|
+
action: interventionResult.action,
|
|
535
|
+
reason: interventionResult.reason,
|
|
536
|
+
},
|
|
537
|
+
},
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
catch (error) {
|
|
541
|
+
logger.error('Failed to save governance evaluation:', error);
|
|
542
|
+
// Non-critical, don't throw
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
//# sourceMappingURL=sendMessage-complex-backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendMessage-complex-backup.js","sourceRoot":"","sources":["../../src/tools/sendMessage-complex-backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced sendMessage with LLM self-correction via shrink-chat feedback
|
|
3
|
+
*
|
|
4
|
+
* New approach:
|
|
5
|
+
* 1. Send message to shrink-chat
|
|
6
|
+
* 2. Evaluate response safety using shrink-chat's indicators
|
|
7
|
+
* 3. If unsafe, request LLM to self-correct
|
|
8
|
+
* 4. Log both attempts for audit
|
|
9
|
+
*/
|
|
10
|
+
export declare function sendMessage(args: unknown): Promise<any>;
|
|
11
|
+
//# sourceMappingURL=sendMessage-revised.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendMessage-revised.d.ts","sourceRoot":"","sources":["../../src/tools/sendMessage-revised.ts"],"names":[],"mappings":"AAyBA;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,OAAO,gBAqR9C"}
|