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.
Files changed (90) hide show
  1. package/README.md +29 -4
  2. package/dist/clients/shrinkChatClient.d.ts +10 -0
  3. package/dist/clients/shrinkChatClient.d.ts.map +1 -1
  4. package/dist/clients/shrinkChatClient.js +4 -0
  5. package/dist/clients/shrinkChatClient.js.map +1 -1
  6. package/dist/db/client.d.ts.map +1 -1
  7. package/dist/db/client.js +5 -3
  8. package/dist/db/client.js.map +1 -1
  9. package/dist/db/schema.d.ts +363 -0
  10. package/dist/db/schema.d.ts.map +1 -1
  11. package/dist/db/schema.js +47 -0
  12. package/dist/db/schema.js.map +1 -1
  13. package/dist/governance/config.d.ts +66 -0
  14. package/dist/governance/config.d.ts.map +1 -0
  15. package/dist/governance/config.js +238 -0
  16. package/dist/governance/config.js.map +1 -0
  17. package/dist/governance/detectors/hallucination.d.ts +61 -0
  18. package/dist/governance/detectors/hallucination.d.ts.map +1 -0
  19. package/dist/governance/detectors/hallucination.js +338 -0
  20. package/dist/governance/detectors/hallucination.js.map +1 -0
  21. package/dist/governance/detectors/inconsistency.d.ts +99 -0
  22. package/dist/governance/detectors/inconsistency.d.ts.map +1 -0
  23. package/dist/governance/detectors/inconsistency.js +548 -0
  24. package/dist/governance/detectors/inconsistency.js.map +1 -0
  25. package/dist/governance/detectors/toneDrift.d.ts +63 -0
  26. package/dist/governance/detectors/toneDrift.d.ts.map +1 -0
  27. package/dist/governance/detectors/toneDrift.js +421 -0
  28. package/dist/governance/detectors/toneDrift.js.map +1 -0
  29. package/dist/governance/detectors/unsafeReasoning.d.ts +54 -0
  30. package/dist/governance/detectors/unsafeReasoning.d.ts.map +1 -0
  31. package/dist/governance/detectors/unsafeReasoning.js +473 -0
  32. package/dist/governance/detectors/unsafeReasoning.js.map +1 -0
  33. package/dist/governance/evaluationEngine.d.ts +112 -0
  34. package/dist/governance/evaluationEngine.d.ts.map +1 -0
  35. package/dist/governance/evaluationEngine.js +265 -0
  36. package/dist/governance/evaluationEngine.js.map +1 -0
  37. package/dist/governance/intervention.d.ts +81 -0
  38. package/dist/governance/intervention.d.ts.map +1 -0
  39. package/dist/governance/intervention.js +405 -0
  40. package/dist/governance/intervention.js.map +1 -0
  41. package/dist/server/chatgpt-mcp.d.ts +10 -0
  42. package/dist/server/chatgpt-mcp.d.ts.map +1 -0
  43. package/dist/server/chatgpt-mcp.js +233 -0
  44. package/dist/server/chatgpt-mcp.js.map +1 -0
  45. package/dist/server/index.d.ts.map +1 -1
  46. package/dist/server/index.js +94 -3
  47. package/dist/server/index.js.map +1 -1
  48. package/dist/server/middleware/localNetworkAccess.d.ts +16 -0
  49. package/dist/server/middleware/localNetworkAccess.d.ts.map +1 -0
  50. package/dist/server/middleware/localNetworkAccess.js +97 -0
  51. package/dist/server/middleware/localNetworkAccess.js.map +1 -0
  52. package/dist/server/sse.d.ts +16 -0
  53. package/dist/server/sse.d.ts.map +1 -0
  54. package/dist/server/sse.js +215 -0
  55. package/dist/server/sse.js.map +1 -0
  56. package/dist/tools/checkpoint.d.ts.map +1 -1
  57. package/dist/tools/index.d.ts +1 -0
  58. package/dist/tools/index.d.ts.map +1 -1
  59. package/dist/tools/index.js +4 -2
  60. package/dist/tools/index.js.map +1 -1
  61. package/dist/tools/insight.d.ts +1 -0
  62. package/dist/tools/insight.d.ts.map +1 -1
  63. package/dist/tools/sendMessage-complex-backup.d.ts +6 -0
  64. package/dist/tools/sendMessage-complex-backup.d.ts.map +1 -0
  65. package/dist/tools/sendMessage-complex-backup.js +545 -0
  66. package/dist/tools/sendMessage-complex-backup.js.map +1 -0
  67. package/dist/tools/sendMessage-revised.d.ts +11 -0
  68. package/dist/tools/sendMessage-revised.d.ts.map +1 -0
  69. package/dist/tools/sendMessage-revised.js +429 -0
  70. package/dist/tools/sendMessage-revised.js.map +1 -0
  71. package/dist/tools/sendMessage-truly-simple.d.ts +8 -0
  72. package/dist/tools/sendMessage-truly-simple.d.ts.map +1 -0
  73. package/dist/tools/sendMessage-truly-simple.js +299 -0
  74. package/dist/tools/sendMessage-truly-simple.js.map +1 -0
  75. package/dist/tools/sendMessage.d.ts +4 -2
  76. package/dist/tools/sendMessage.d.ts.map +1 -1
  77. package/dist/tools/sendMessage.js +240 -186
  78. package/dist/tools/sendMessage.js.map +1 -1
  79. package/dist/tools/session.d.ts.map +1 -1
  80. package/dist/tools/session.js +35 -29
  81. package/dist/tools/session.js.map +1 -1
  82. package/dist/types/auth.d.ts +9 -1
  83. package/dist/types/auth.d.ts.map +1 -1
  84. package/dist/types/auth.js +37 -10
  85. package/dist/types/auth.js.map +1 -1
  86. package/dist/types/insight.d.ts +10 -0
  87. package/dist/types/insight.d.ts.map +1 -1
  88. package/dist/types/session.d.ts +10 -0
  89. package/dist/types/session.d.ts.map +1 -1
  90. package/package.json +10 -5
@@ -26,6 +26,7 @@ export declare function getUserContext(args: any): Promise<{
26
26
  user: {
27
27
  id: string;
28
28
  externalId: string;
29
+ isTestAccount: boolean;
29
30
  createdAt: Date;
30
31
  updatedAt: Date;
31
32
  preferences: {
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoF7C"}
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,6 @@
1
+ /**
2
+ * Send a message through the shrink-chat therapeutic stack
3
+ * This is the primary integration point with the shrink-chat backend
4
+ */
5
+ export declare function sendMessage(args: unknown): Promise<any>;
6
+ //# sourceMappingURL=sendMessage-complex-backup.d.ts.map
@@ -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"}