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
package/dist/tools/session.js
CHANGED
|
@@ -72,50 +72,56 @@ export async function resumeSession(args) {
|
|
|
72
72
|
try {
|
|
73
73
|
const input = ResumeSessionSchema.parse(args);
|
|
74
74
|
const db = getDb();
|
|
75
|
-
// Extract user ID from auth context or generate anonymous user
|
|
76
|
-
const externalUserId = await extractUserFromContext(input.auth);
|
|
77
|
-
const [user] = await db
|
|
78
|
-
.select()
|
|
79
|
-
.from(users)
|
|
80
|
-
.where(eq(users.externalId, externalUserId))
|
|
81
|
-
.limit(1);
|
|
82
|
-
if (!user) {
|
|
83
|
-
// Create user if doesn't exist
|
|
84
|
-
const [newUser] = await db
|
|
85
|
-
.insert(users)
|
|
86
|
-
.values({
|
|
87
|
-
externalId: externalUserId,
|
|
88
|
-
preferences: {},
|
|
89
|
-
})
|
|
90
|
-
.returning();
|
|
91
|
-
if (!newUser) {
|
|
92
|
-
throw new NotFoundError('User');
|
|
93
|
-
}
|
|
94
|
-
return {
|
|
95
|
-
message: 'No previous sessions found for this user. Please create a new session.',
|
|
96
|
-
session: null,
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
75
|
// Find session to resume
|
|
100
76
|
let session;
|
|
101
77
|
if (input.session_id) {
|
|
78
|
+
// Direct session lookup - skip user validation
|
|
79
|
+
// This allows resuming sessions when MCP clients don't maintain consistent user context
|
|
102
80
|
[session] = await db
|
|
103
81
|
.select()
|
|
104
82
|
.from(sessions)
|
|
105
|
-
.where(
|
|
83
|
+
.where(eq(sessions.id, input.session_id))
|
|
106
84
|
.limit(1);
|
|
85
|
+
if (!session) {
|
|
86
|
+
throw new NotFoundError('Session with ID', input.session_id);
|
|
87
|
+
}
|
|
107
88
|
}
|
|
108
89
|
else {
|
|
109
|
-
//
|
|
90
|
+
// Resume most recent session - requires user context
|
|
91
|
+
// Extract user ID from auth context or generate anonymous user
|
|
92
|
+
const externalUserId = await extractUserFromContext(input.auth);
|
|
93
|
+
const [user] = await db
|
|
94
|
+
.select()
|
|
95
|
+
.from(users)
|
|
96
|
+
.where(eq(users.externalId, externalUserId))
|
|
97
|
+
.limit(1);
|
|
98
|
+
if (!user) {
|
|
99
|
+
// Create user if doesn't exist
|
|
100
|
+
const [newUser] = await db
|
|
101
|
+
.insert(users)
|
|
102
|
+
.values({
|
|
103
|
+
externalId: externalUserId,
|
|
104
|
+
preferences: {},
|
|
105
|
+
})
|
|
106
|
+
.returning();
|
|
107
|
+
if (!newUser) {
|
|
108
|
+
throw new NotFoundError('User');
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
message: 'No previous sessions found for this user. Please create a new session.',
|
|
112
|
+
session: null,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Get most recent pausable session for this user
|
|
110
116
|
[session] = await db
|
|
111
117
|
.select()
|
|
112
118
|
.from(sessions)
|
|
113
119
|
.where(and(eq(sessions.userId, user.id), eq(sessions.status, 'paused')))
|
|
114
120
|
.orderBy(desc(sessions.lastActiveAt))
|
|
115
121
|
.limit(1);
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
122
|
+
if (!session) {
|
|
123
|
+
throw new NotFoundError('Session to resume for user');
|
|
124
|
+
}
|
|
119
125
|
}
|
|
120
126
|
// Get journey if linked
|
|
121
127
|
let journey = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/tools/session.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/tools/session.ts"],"names":[],"mappings":"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"}
|
package/dist/types/auth.d.ts
CHANGED
|
@@ -4,34 +4,42 @@ import { z } from 'zod';
|
|
|
4
4
|
* This allows the AI agent to provide user authentication info
|
|
5
5
|
*/
|
|
6
6
|
export declare const AuthContextSchema: z.ZodObject<{
|
|
7
|
-
/**
|
|
8
|
-
* OAuth access token or session identifier
|
|
9
|
-
* This will be validated against the OAuth tokens table
|
|
10
|
-
*/
|
|
11
7
|
token: z.ZodOptional<z.ZodString>;
|
|
12
|
-
/**
|
|
13
|
-
* External user identifier (from OAuth provider)
|
|
14
|
-
* Used as a fallback if token validation fails
|
|
15
|
-
*/
|
|
16
8
|
user_id: z.ZodOptional<z.ZodString>;
|
|
17
|
-
/**
|
|
18
|
-
* Client identifier (ChatGPT, Claude, etc.)
|
|
19
|
-
* Helps track which AI agent is making the request
|
|
20
|
-
*/
|
|
21
9
|
client_id: z.ZodOptional<z.ZodString>;
|
|
10
|
+
conversation_id: z.ZodOptional<z.ZodString>;
|
|
22
11
|
}, "strip", z.ZodTypeAny, {
|
|
23
12
|
user_id?: string | undefined;
|
|
24
13
|
client_id?: string | undefined;
|
|
25
14
|
token?: string | undefined;
|
|
15
|
+
conversation_id?: string | undefined;
|
|
26
16
|
}, {
|
|
27
17
|
user_id?: string | undefined;
|
|
28
18
|
client_id?: string | undefined;
|
|
29
19
|
token?: string | undefined;
|
|
20
|
+
conversation_id?: string | undefined;
|
|
30
21
|
}>;
|
|
31
22
|
export type AuthContext = z.infer<typeof AuthContextSchema>;
|
|
32
23
|
/**
|
|
33
24
|
* Extract user ID from authentication context
|
|
34
|
-
*
|
|
25
|
+
* Implements tiered identity:
|
|
26
|
+
* - Priority 1: OAuth token validation (Pro tier - cross-device)
|
|
27
|
+
* - Priority 2: External user ID + client ID (ChatGPT OAuth)
|
|
28
|
+
* - Priority 3: Local file-based identity (Free tier - single machine)
|
|
29
|
+
* - Priority 4: Conversation-based ID (single window only)
|
|
30
|
+
* - Fallback: Ephemeral IDs (no persistence)
|
|
35
31
|
*/
|
|
36
32
|
export declare function extractUserFromContext(authContext?: AuthContext): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Get user tier from identity prefix
|
|
35
|
+
*/
|
|
36
|
+
export declare function getUserTier(userId: string): 'pro' | 'free' | 'ephemeral';
|
|
37
|
+
/**
|
|
38
|
+
* Check if user has Pro tier features
|
|
39
|
+
*/
|
|
40
|
+
export declare function hasProFeatures(userId: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Get the local identity file path for debugging/support
|
|
43
|
+
*/
|
|
44
|
+
export declare function getIdentityFilePath(): string;
|
|
37
45
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/types/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAK5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AA2D5D;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAwCvF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,CAMxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
|
package/dist/types/auth.js
CHANGED
|
@@ -1,44 +1,127 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { createHash } from 'crypto';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
2
6
|
/**
|
|
3
7
|
* Authentication context that can be passed through MCP tool calls
|
|
4
8
|
* This allows the AI agent to provide user authentication info
|
|
5
9
|
*/
|
|
6
10
|
export const AuthContextSchema = z.object({
|
|
7
|
-
/**
|
|
8
|
-
* OAuth access token or session identifier
|
|
9
|
-
* This will be validated against the OAuth tokens table
|
|
10
|
-
*/
|
|
11
11
|
token: z.string().optional().describe('OAuth access token or session identifier'),
|
|
12
|
-
/**
|
|
13
|
-
* External user identifier (from OAuth provider)
|
|
14
|
-
* Used as a fallback if token validation fails
|
|
15
|
-
*/
|
|
16
12
|
user_id: z.string().optional().describe('External user identifier from OAuth provider'),
|
|
17
|
-
/**
|
|
18
|
-
* Client identifier (ChatGPT, Claude, etc.)
|
|
19
|
-
* Helps track which AI agent is making the request
|
|
20
|
-
*/
|
|
21
13
|
client_id: z.string().optional().describe('Client application identifier'),
|
|
14
|
+
conversation_id: z.string().optional().describe('Stable conversation identifier for user binding'),
|
|
22
15
|
});
|
|
16
|
+
const IDENTITY_DIR = join(homedir(), '.couchloop-mcp');
|
|
17
|
+
const IDENTITY_FILE = join(IDENTITY_DIR, 'identity.json');
|
|
18
|
+
/**
|
|
19
|
+
* Get or create local identity file for free tier users
|
|
20
|
+
* This provides single-machine persistence without requiring OAuth
|
|
21
|
+
*/
|
|
22
|
+
function getOrCreateLocalIdentity() {
|
|
23
|
+
try {
|
|
24
|
+
// Ensure directory exists
|
|
25
|
+
if (!existsSync(IDENTITY_DIR)) {
|
|
26
|
+
mkdirSync(IDENTITY_DIR, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
// Check if identity file exists
|
|
29
|
+
if (existsSync(IDENTITY_FILE)) {
|
|
30
|
+
const data = readFileSync(IDENTITY_FILE, 'utf-8');
|
|
31
|
+
const identity = JSON.parse(data);
|
|
32
|
+
if (identity.user_id && identity.user_id.startsWith('local_')) {
|
|
33
|
+
return identity.user_id;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Create new local identity
|
|
37
|
+
const { hostname } = require('os');
|
|
38
|
+
const machineId = createHash('sha256')
|
|
39
|
+
.update(hostname() + ':' + homedir() + ':' + Date.now())
|
|
40
|
+
.digest('hex')
|
|
41
|
+
.substring(0, 24);
|
|
42
|
+
const newIdentity = {
|
|
43
|
+
user_id: 'local_' + machineId,
|
|
44
|
+
created_at: new Date().toISOString(),
|
|
45
|
+
machine: hostname(),
|
|
46
|
+
tier: 'free',
|
|
47
|
+
};
|
|
48
|
+
writeFileSync(IDENTITY_FILE, JSON.stringify(newIdentity, null, 2));
|
|
49
|
+
console.log('Created local identity: ' + newIdentity.user_id + ' at ' + IDENTITY_FILE);
|
|
50
|
+
return newIdentity.user_id;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.warn('Failed to create/read local identity file:', error);
|
|
54
|
+
return '';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
23
57
|
/**
|
|
24
58
|
* Extract user ID from authentication context
|
|
25
|
-
*
|
|
59
|
+
* Implements tiered identity:
|
|
60
|
+
* - Priority 1: OAuth token validation (Pro tier - cross-device)
|
|
61
|
+
* - Priority 2: External user ID + client ID (ChatGPT OAuth)
|
|
62
|
+
* - Priority 3: Local file-based identity (Free tier - single machine)
|
|
63
|
+
* - Priority 4: Conversation-based ID (single window only)
|
|
64
|
+
* - Fallback: Ephemeral IDs (no persistence)
|
|
26
65
|
*/
|
|
27
66
|
export async function extractUserFromContext(authContext) {
|
|
28
|
-
//
|
|
29
|
-
if (authContext?.user_id) {
|
|
30
|
-
return authContext.user_id;
|
|
31
|
-
}
|
|
32
|
-
// If we have a token, we could validate it here
|
|
33
|
-
// For now, we'll extract a user ID from the token if it's a JWT-like structure
|
|
67
|
+
// Priority 1: OAuth token validation (Pro tier - future)
|
|
34
68
|
if (authContext?.token) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
69
|
+
const hash = createHash('sha256').update(authContext.token).digest('hex');
|
|
70
|
+
return 'oauth_' + hash.substring(0, 24);
|
|
71
|
+
}
|
|
72
|
+
// Priority 2: Hash-based persistent ID from external user identifier
|
|
73
|
+
// For ChatGPT: this is the openai/subject that persists across all chat windows
|
|
74
|
+
if (authContext?.user_id && authContext?.client_id) {
|
|
75
|
+
const hash = createHash('sha256')
|
|
76
|
+
.update(authContext.client_id + ':' + authContext.user_id)
|
|
77
|
+
.digest('hex');
|
|
78
|
+
return authContext.client_id + '_' + hash.substring(0, 24);
|
|
79
|
+
}
|
|
80
|
+
// Priority 3: Local file-based identity (Free tier)
|
|
81
|
+
// Provides single-machine persistence for VS Code, Cursor, Claude Desktop, etc.
|
|
82
|
+
const localIdentity = getOrCreateLocalIdentity();
|
|
83
|
+
if (localIdentity) {
|
|
84
|
+
return localIdentity;
|
|
85
|
+
}
|
|
86
|
+
// Priority 4: Conversation-based ID (single chat window only)
|
|
87
|
+
if (authContext?.client_id && authContext?.conversation_id) {
|
|
88
|
+
const hash = createHash('sha256')
|
|
89
|
+
.update(authContext.client_id + ':conv:' + authContext.conversation_id)
|
|
90
|
+
.digest('hex');
|
|
91
|
+
return 'conv_' + hash.substring(0, 28);
|
|
38
92
|
}
|
|
39
|
-
// Fallback
|
|
40
|
-
|
|
93
|
+
// Fallback: Create ephemeral user with warning
|
|
94
|
+
console.warn('Creating ephemeral user - no stable identity provided', {
|
|
95
|
+
client_id: authContext?.client_id,
|
|
96
|
+
has_conversation_id: !!authContext?.conversation_id,
|
|
97
|
+
timestamp: new Date().toISOString()
|
|
98
|
+
});
|
|
41
99
|
const { nanoid } = await import('nanoid');
|
|
42
|
-
return
|
|
100
|
+
return 'ephemeral_' + nanoid(12);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get user tier from identity prefix
|
|
104
|
+
*/
|
|
105
|
+
export function getUserTier(userId) {
|
|
106
|
+
if (userId.startsWith('oauth_'))
|
|
107
|
+
return 'pro';
|
|
108
|
+
if (userId.startsWith('local_'))
|
|
109
|
+
return 'free';
|
|
110
|
+
if (userId.startsWith('ephemeral_'))
|
|
111
|
+
return 'ephemeral';
|
|
112
|
+
// Client-based IDs (chatgpt_, claude_, etc.) could be either
|
|
113
|
+
return 'free';
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if user has Pro tier features
|
|
117
|
+
*/
|
|
118
|
+
export function hasProFeatures(userId) {
|
|
119
|
+
return getUserTier(userId) === 'pro';
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get the local identity file path for debugging/support
|
|
123
|
+
*/
|
|
124
|
+
export function getIdentityFilePath() {
|
|
125
|
+
return IDENTITY_FILE;
|
|
43
126
|
}
|
|
44
127
|
//# sourceMappingURL=auth.js.map
|
package/dist/types/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExE;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACjF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACvF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC1E,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;CACnG,CAAC,CAAC;AAcH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AACvD,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;AAE1D;;;GAGG;AACH,SAAS,wBAAwB;IAC/B,IAAI,CAAC;QACH,0BAA0B;QAC1B,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,gCAAgC;QAChC,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9D,OAAO,QAAQ,CAAC,OAAO,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC;aACnC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,OAAO,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;aACvD,MAAM,CAAC,KAAK,CAAC;aACb,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEpB,MAAM,WAAW,GAAkB;YACjC,OAAO,EAAE,QAAQ,GAAG,SAAS;YAC7B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,OAAO,EAAE,QAAQ,EAAE;YACnB,IAAI,EAAE,MAAM;SACb,CAAC;QAEF,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,WAAW,CAAC,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC,CAAC;QAEvF,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,WAAyB;IACpE,yDAAyD;IACzD,IAAI,WAAW,EAAE,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1E,OAAO,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,qEAAqE;IACrE,gFAAgF;IAChF,IAAI,WAAW,EAAE,OAAO,IAAI,WAAW,EAAE,SAAS,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;aAC9B,MAAM,CAAC,WAAW,CAAC,SAAS,GAAG,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC;aACzD,MAAM,CAAC,KAAK,CAAC,CAAC;QACjB,OAAO,WAAW,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,oDAAoD;IACpD,gFAAgF;IAChF,MAAM,aAAa,GAAG,wBAAwB,EAAE,CAAC;IACjD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,8DAA8D;IAC9D,IAAI,WAAW,EAAE,SAAS,IAAI,WAAW,EAAE,eAAe,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;aAC9B,MAAM,CAAC,WAAW,CAAC,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC,eAAe,CAAC;aACtE,MAAM,CAAC,KAAK,CAAC,CAAC;QACjB,OAAO,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,+CAA+C;IAC/C,OAAO,CAAC,IAAI,CAAC,uDAAuD,EAAE;QACpE,SAAS,EAAE,WAAW,EAAE,SAAS;QACjC,mBAAmB,EAAE,CAAC,CAAC,WAAW,EAAE,eAAe;QACnD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;IAEH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IAC/C,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,WAAW,CAAC;IACxD,6DAA6D;IAC7D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
package/dist/types/insight.d.ts
CHANGED
|
@@ -7,14 +7,17 @@ export declare const SaveInsightSchema: z.ZodObject<{
|
|
|
7
7
|
token: z.ZodOptional<z.ZodString>;
|
|
8
8
|
user_id: z.ZodOptional<z.ZodString>;
|
|
9
9
|
client_id: z.ZodOptional<z.ZodString>;
|
|
10
|
+
conversation_id: z.ZodOptional<z.ZodString>;
|
|
10
11
|
}, "strip", z.ZodTypeAny, {
|
|
11
12
|
user_id?: string | undefined;
|
|
12
13
|
client_id?: string | undefined;
|
|
13
14
|
token?: string | undefined;
|
|
15
|
+
conversation_id?: string | undefined;
|
|
14
16
|
}, {
|
|
15
17
|
user_id?: string | undefined;
|
|
16
18
|
client_id?: string | undefined;
|
|
17
19
|
token?: string | undefined;
|
|
20
|
+
conversation_id?: string | undefined;
|
|
18
21
|
}>>;
|
|
19
22
|
}, "strip", z.ZodTypeAny, {
|
|
20
23
|
tags: string[];
|
|
@@ -24,6 +27,7 @@ export declare const SaveInsightSchema: z.ZodObject<{
|
|
|
24
27
|
user_id?: string | undefined;
|
|
25
28
|
client_id?: string | undefined;
|
|
26
29
|
token?: string | undefined;
|
|
30
|
+
conversation_id?: string | undefined;
|
|
27
31
|
} | undefined;
|
|
28
32
|
}, {
|
|
29
33
|
content: string;
|
|
@@ -33,6 +37,7 @@ export declare const SaveInsightSchema: z.ZodObject<{
|
|
|
33
37
|
user_id?: string | undefined;
|
|
34
38
|
client_id?: string | undefined;
|
|
35
39
|
token?: string | undefined;
|
|
40
|
+
conversation_id?: string | undefined;
|
|
36
41
|
} | undefined;
|
|
37
42
|
}>;
|
|
38
43
|
export type SaveInsightInput = z.infer<typeof SaveInsightSchema>;
|
|
@@ -43,14 +48,17 @@ export declare const GetUserContextSchema: z.ZodObject<{
|
|
|
43
48
|
token: z.ZodOptional<z.ZodString>;
|
|
44
49
|
user_id: z.ZodOptional<z.ZodString>;
|
|
45
50
|
client_id: z.ZodOptional<z.ZodString>;
|
|
51
|
+
conversation_id: z.ZodOptional<z.ZodString>;
|
|
46
52
|
}, "strip", z.ZodTypeAny, {
|
|
47
53
|
user_id?: string | undefined;
|
|
48
54
|
client_id?: string | undefined;
|
|
49
55
|
token?: string | undefined;
|
|
56
|
+
conversation_id?: string | undefined;
|
|
50
57
|
}, {
|
|
51
58
|
user_id?: string | undefined;
|
|
52
59
|
client_id?: string | undefined;
|
|
53
60
|
token?: string | undefined;
|
|
61
|
+
conversation_id?: string | undefined;
|
|
54
62
|
}>>;
|
|
55
63
|
}, "strip", z.ZodTypeAny, {
|
|
56
64
|
include_recent_insights: boolean;
|
|
@@ -59,12 +67,14 @@ export declare const GetUserContextSchema: z.ZodObject<{
|
|
|
59
67
|
user_id?: string | undefined;
|
|
60
68
|
client_id?: string | undefined;
|
|
61
69
|
token?: string | undefined;
|
|
70
|
+
conversation_id?: string | undefined;
|
|
62
71
|
} | undefined;
|
|
63
72
|
}, {
|
|
64
73
|
auth?: {
|
|
65
74
|
user_id?: string | undefined;
|
|
66
75
|
client_id?: string | undefined;
|
|
67
76
|
token?: string | undefined;
|
|
77
|
+
conversation_id?: string | undefined;
|
|
68
78
|
} | undefined;
|
|
69
79
|
include_recent_insights?: boolean | undefined;
|
|
70
80
|
include_session_history?: boolean | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insight.d.ts","sourceRoot":"","sources":["../../src/types/insight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"insight.d.ts","sourceRoot":"","sources":["../../src/types/insight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,GAAG,CAAC;IACV,eAAe,EAAE,GAAG,EAAE,CAAC;IACvB,eAAe,EAAE,GAAG,EAAE,CAAC;IACvB,cAAc,EAAE,GAAG,GAAG,IAAI,CAAC;CAC5B"}
|
package/dist/types/session.d.ts
CHANGED
|
@@ -8,14 +8,17 @@ export declare const CreateSessionSchema: z.ZodObject<{
|
|
|
8
8
|
token: z.ZodOptional<z.ZodString>;
|
|
9
9
|
user_id: z.ZodOptional<z.ZodString>;
|
|
10
10
|
client_id: z.ZodOptional<z.ZodString>;
|
|
11
|
+
conversation_id: z.ZodOptional<z.ZodString>;
|
|
11
12
|
}, "strip", z.ZodTypeAny, {
|
|
12
13
|
user_id?: string | undefined;
|
|
13
14
|
client_id?: string | undefined;
|
|
14
15
|
token?: string | undefined;
|
|
16
|
+
conversation_id?: string | undefined;
|
|
15
17
|
}, {
|
|
16
18
|
user_id?: string | undefined;
|
|
17
19
|
client_id?: string | undefined;
|
|
18
20
|
token?: string | undefined;
|
|
21
|
+
conversation_id?: string | undefined;
|
|
19
22
|
}>>;
|
|
20
23
|
}, "strip", z.ZodTypeAny, {
|
|
21
24
|
journey_slug?: string | undefined;
|
|
@@ -24,6 +27,7 @@ export declare const CreateSessionSchema: z.ZodObject<{
|
|
|
24
27
|
user_id?: string | undefined;
|
|
25
28
|
client_id?: string | undefined;
|
|
26
29
|
token?: string | undefined;
|
|
30
|
+
conversation_id?: string | undefined;
|
|
27
31
|
} | undefined;
|
|
28
32
|
}, {
|
|
29
33
|
journey_slug?: string | undefined;
|
|
@@ -32,6 +36,7 @@ export declare const CreateSessionSchema: z.ZodObject<{
|
|
|
32
36
|
user_id?: string | undefined;
|
|
33
37
|
client_id?: string | undefined;
|
|
34
38
|
token?: string | undefined;
|
|
39
|
+
conversation_id?: string | undefined;
|
|
35
40
|
} | undefined;
|
|
36
41
|
}>;
|
|
37
42
|
export type CreateSessionInput = z.infer<typeof CreateSessionSchema>;
|
|
@@ -41,14 +46,17 @@ export declare const ResumeSessionSchema: z.ZodObject<{
|
|
|
41
46
|
token: z.ZodOptional<z.ZodString>;
|
|
42
47
|
user_id: z.ZodOptional<z.ZodString>;
|
|
43
48
|
client_id: z.ZodOptional<z.ZodString>;
|
|
49
|
+
conversation_id: z.ZodOptional<z.ZodString>;
|
|
44
50
|
}, "strip", z.ZodTypeAny, {
|
|
45
51
|
user_id?: string | undefined;
|
|
46
52
|
client_id?: string | undefined;
|
|
47
53
|
token?: string | undefined;
|
|
54
|
+
conversation_id?: string | undefined;
|
|
48
55
|
}, {
|
|
49
56
|
user_id?: string | undefined;
|
|
50
57
|
client_id?: string | undefined;
|
|
51
58
|
token?: string | undefined;
|
|
59
|
+
conversation_id?: string | undefined;
|
|
52
60
|
}>>;
|
|
53
61
|
}, "strip", z.ZodTypeAny, {
|
|
54
62
|
session_id?: string | undefined;
|
|
@@ -56,6 +64,7 @@ export declare const ResumeSessionSchema: z.ZodObject<{
|
|
|
56
64
|
user_id?: string | undefined;
|
|
57
65
|
client_id?: string | undefined;
|
|
58
66
|
token?: string | undefined;
|
|
67
|
+
conversation_id?: string | undefined;
|
|
59
68
|
} | undefined;
|
|
60
69
|
}, {
|
|
61
70
|
session_id?: string | undefined;
|
|
@@ -63,6 +72,7 @@ export declare const ResumeSessionSchema: z.ZodObject<{
|
|
|
63
72
|
user_id?: string | undefined;
|
|
64
73
|
client_id?: string | undefined;
|
|
65
74
|
token?: string | undefined;
|
|
75
|
+
conversation_id?: string | undefined;
|
|
66
76
|
} | undefined;
|
|
67
77
|
}>;
|
|
68
78
|
export type ResumeSessionInput = z.infer<typeof ResumeSessionSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/types/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB,2DAAyD,CAAC;AAC1F,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/types/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB,2DAAyD,CAAC;AAC1F,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI9B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG9B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,GAAG,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,GAAG,CAAC;IACb,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,GAAG,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "couchloop-eq-mcp",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.4",
|
|
4
|
+
"description": "Behavioral governance layer for LLMs - monitors for hallucination, inconsistency, tone drift, and unsafe reasoning while managing stateful AI sessions",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
},
|
|
20
20
|
"scripts": {
|
|
21
21
|
"build": "tsc",
|
|
22
|
-
"start": "node dist/index.js",
|
|
22
|
+
"start": "node dist/server/index.js",
|
|
23
|
+
"start:mcp": "node dist/index.js",
|
|
23
24
|
"dev": "tsx watch src/index.ts",
|
|
24
25
|
"clean": "rm -rf dist",
|
|
25
26
|
"test": "vitest",
|
|
@@ -41,9 +42,13 @@
|
|
|
41
42
|
"keywords": [
|
|
42
43
|
"mcp",
|
|
43
44
|
"model-context-protocol",
|
|
44
|
-
"ai",
|
|
45
|
+
"ai-safety",
|
|
46
|
+
"ai-governance",
|
|
47
|
+
"hallucination-detection",
|
|
45
48
|
"chatgpt",
|
|
46
49
|
"claude",
|
|
50
|
+
"llm-safety",
|
|
51
|
+
"behavioral-governance",
|
|
47
52
|
"conversation",
|
|
48
53
|
"state-management"
|
|
49
54
|
],
|
|
@@ -87,7 +92,7 @@
|
|
|
87
92
|
"@typescript-eslint/eslint-plugin": "^6.15.0",
|
|
88
93
|
"@typescript-eslint/parser": "^6.15.0",
|
|
89
94
|
"@vercel/node": "^3.0.0",
|
|
90
|
-
"drizzle-kit": "^0.20.
|
|
95
|
+
"drizzle-kit": "^0.20.18",
|
|
91
96
|
"eslint": "^8.56.0",
|
|
92
97
|
"tsx": "^4.6.2",
|
|
93
98
|
"typescript": "^5.3.3",
|