couchloop-eq-mcp 2.0.2 → 2.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 +11 -12
- package/dist/clients/shrinkChatClient.d.ts +38 -38
- package/dist/db/client.d.ts +11 -19
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +30 -62
- package/dist/db/client.js.map +1 -1
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/resources/journey-status.d.ts.map +1 -1
- package/dist/resources/journey-status.js +10 -12
- package/dist/resources/journey-status.js.map +1 -1
- package/dist/resources/session-summary.d.ts.map +1 -1
- package/dist/resources/session-summary.js +33 -33
- package/dist/resources/session-summary.js.map +1 -1
- package/dist/resources/user-context.d.ts.map +1 -1
- package/dist/resources/user-context.js +26 -41
- package/dist/resources/user-context.js.map +1 -1
- package/dist/server/http-mcp.js +2 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +8 -9
- package/dist/server/index.js.map +1 -1
- package/dist/server/sse.d.ts.map +1 -1
- package/dist/server/sse.js +17 -17
- package/dist/server/sse.js.map +1 -1
- package/dist/tools/check-versions.d.ts +7 -7
- package/dist/tools/checkpoint.d.ts +1 -8
- package/dist/tools/checkpoint.d.ts.map +1 -1
- package/dist/tools/checkpoint.js +47 -49
- package/dist/tools/checkpoint.js.map +1 -1
- package/dist/tools/couchloop-v2.d.ts.map +1 -1
- package/dist/tools/couchloop-v2.js +15 -4
- package/dist/tools/couchloop-v2.js.map +1 -1
- package/dist/tools/detect-build-context.d.ts +1 -1
- package/dist/tools/generate-upgrade-report.d.ts +2 -2
- package/dist/tools/guard.d.ts +3 -3
- package/dist/tools/index.d.ts +2 -4
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/insight.d.ts +10 -49
- package/dist/tools/insight.d.ts.map +1 -1
- package/dist/tools/insight.js +78 -91
- package/dist/tools/insight.js.map +1 -1
- package/dist/tools/intent-router.d.ts.map +1 -1
- package/dist/tools/intent-router.js +12 -7
- package/dist/tools/intent-router.js.map +1 -1
- package/dist/tools/journey.d.ts +5 -5
- package/dist/tools/journey.d.ts.map +1 -1
- package/dist/tools/journey.js +47 -39
- package/dist/tools/journey.js.map +1 -1
- package/dist/tools/pre-review-code.d.ts +2 -2
- package/dist/tools/prevent-ai-errors.d.ts +3 -3
- package/dist/tools/primary-tools.d.ts +37 -190
- package/dist/tools/primary-tools.d.ts.map +1 -1
- package/dist/tools/primary-tools.js +204 -302
- package/dist/tools/primary-tools.js.map +1 -1
- package/dist/tools/protect-files.d.ts +1 -1
- package/dist/tools/sendMessage.d.ts.map +1 -1
- package/dist/tools/sendMessage.js +52 -38
- package/dist/tools/sendMessage.js.map +1 -1
- package/dist/tools/session-manager.d.ts.map +1 -1
- package/dist/tools/session-manager.js +88 -70
- package/dist/tools/session-manager.js.map +1 -1
- package/dist/tools/session.d.ts +7 -86
- package/dist/tools/session.d.ts.map +1 -1
- package/dist/tools/session.js +68 -72
- package/dist/tools/session.js.map +1 -1
- package/dist/tools/smart-context.d.ts +1 -1
- package/dist/tools/status.d.ts +9 -2
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +113 -64
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/verify.d.ts +4 -4
- package/dist/tools/verify.js.map +1 -1
- package/dist/types/auth.d.ts +2 -2
- package/dist/types/checkpoint.d.ts +4 -4
- package/dist/types/file-protection.d.ts +2 -2
- package/dist/types/insight.d.ts +10 -10
- package/dist/types/journey.d.ts +40 -12
- package/dist/types/journey.d.ts.map +1 -1
- package/dist/types/journey.js +2 -0
- package/dist/types/journey.js.map +1 -1
- package/dist/types/session.d.ts +10 -10
- package/dist/workflows/engine.d.ts +2 -2
- package/dist/workflows/engine.d.ts.map +1 -1
- package/dist/workflows/engine.js +81 -82
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/index.d.ts +4 -4
- package/package.json +2 -10
package/README.md
CHANGED
|
@@ -39,14 +39,13 @@ Unlike raw LLMs that can hallucinate packages, generate insecure code, and lose
|
|
|
39
39
|
|
|
40
40
|
| Problem | CouchLoop EQ Solution |
|
|
41
41
|
| ---------------------------- | ----------------------------------------------------------------------------- |
|
|
42
|
-
| 🎭 **Hallucinated packages** | `
|
|
43
|
-
| 🔓 **Insecure code** | `
|
|
44
|
-
| 📉 **Code bloat** | `
|
|
45
|
-
| 🧠 **Lost context** | `
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
| 💡 **Unstructured thinking** | `brainstorm` helps think through trade-offs, compare options, decompose ideas |
|
|
42
|
+
| 🎭 **Hallucinated packages** | `review(mode: "packages")` catches fake npm/PyPI/Maven before install |
|
|
43
|
+
| 🔓 **Insecure code** | `review(mode: "code")` detects SQLi, XSS, hardcoded secrets |
|
|
44
|
+
| 📉 **Code bloat** | `review(mode: "code")` flags over-engineering, console.logs, missing errors |
|
|
45
|
+
| 🧠 **Lost context** | `memory` stores architecture decisions and checkpoints across sessions |
|
|
46
|
+
| 📚 **Deprecated APIs** | `review(mode: "packages")` warns about outdated versions and breaking changes |
|
|
47
|
+
| 🔍 **Sloppy AI code** | `review(mode: "verify")` pre-checks AI responses for hallucinated APIs |
|
|
48
|
+
| 🧠 **Session continuity** | `conversation` with crisis detection, journeys, and session memory |
|
|
50
49
|
|
|
51
50
|
## Architecture
|
|
52
51
|
|
|
@@ -259,14 +258,14 @@ This insight was captured mid-debugging session, preserved across context window
|
|
|
259
258
|
|
|
260
259
|
| Feature Size | Recommended Actions |
|
|
261
260
|
| --------------------- | -------------------------------------------------------------------------------------------- |
|
|
262
|
-
| **Small fix** | `
|
|
263
|
-
| **Medium feature** | `
|
|
264
|
-
| **Large feature set** | Multiple `
|
|
261
|
+
| **Small fix** | `memory(action: "save")` with type `insight` — Quick note of what was done and why |
|
|
262
|
+
| **Medium feature** | `memory(action: "save")` with type `insight` + `checkpoint` — Capture decisions and state |
|
|
263
|
+
| **Large feature set** | Multiple `memory` saves (insight, checkpoint, decision) — Full architecture context |
|
|
265
264
|
|
|
266
265
|
**Why this matters:** When you need to review or debug later, you can retrieve the exact context of what was just built - even weeks later, across different AI sessions.
|
|
267
266
|
|
|
268
267
|
```
|
|
269
|
-
|
|
268
|
+
memory(action: "recall") -> Instant recall of decisions made
|
|
270
269
|
"Resume my Sprint 42 session" -> Pick up exactly where you left off
|
|
271
270
|
```
|
|
272
271
|
|
|
@@ -23,15 +23,15 @@ export declare const ShrinkResponseSchema: z.ZodObject<{
|
|
|
23
23
|
}, "strip", z.ZodTypeAny, {
|
|
24
24
|
type: string;
|
|
25
25
|
title: string;
|
|
26
|
-
description?: string | undefined;
|
|
27
26
|
url?: string | undefined;
|
|
28
27
|
phone?: string | undefined;
|
|
28
|
+
description?: string | undefined;
|
|
29
29
|
}, {
|
|
30
30
|
type: string;
|
|
31
31
|
title: string;
|
|
32
|
-
description?: string | undefined;
|
|
33
32
|
url?: string | undefined;
|
|
34
33
|
phone?: string | undefined;
|
|
34
|
+
description?: string | undefined;
|
|
35
35
|
}>, "many">>;
|
|
36
36
|
escalationPath: z.ZodOptional<z.ZodString>;
|
|
37
37
|
threadId: z.ZodOptional<z.ZodString>;
|
|
@@ -53,31 +53,31 @@ export declare const ShrinkResponseSchema: z.ZodObject<{
|
|
|
53
53
|
error_type: z.ZodOptional<z.ZodString>;
|
|
54
54
|
message: z.ZodOptional<z.ZodString>;
|
|
55
55
|
}, "strip", z.ZodTypeAny, {
|
|
56
|
-
|
|
56
|
+
error?: string | undefined;
|
|
57
57
|
content?: string | undefined;
|
|
58
|
-
|
|
58
|
+
reply?: string | undefined;
|
|
59
|
+
response_text?: string | undefined;
|
|
60
|
+
messageId?: string | undefined;
|
|
61
|
+
crisisDetected?: boolean | undefined;
|
|
62
|
+
message?: string | undefined;
|
|
59
63
|
crisisLevel?: string | number | undefined;
|
|
64
|
+
crisis_level?: string | number | undefined;
|
|
65
|
+
crisisHandled?: boolean | undefined;
|
|
66
|
+
crisis_confidence?: number | undefined;
|
|
67
|
+
crisis_requires_intervention?: boolean | undefined;
|
|
68
|
+
crisis_indicators?: string[] | undefined;
|
|
69
|
+
crisis_suggested_actions?: string[] | undefined;
|
|
70
|
+
emotions?: string[] | undefined;
|
|
71
|
+
therapeuticTechnique?: string | undefined;
|
|
60
72
|
resources?: {
|
|
61
73
|
type: string;
|
|
62
74
|
title: string;
|
|
63
|
-
description?: string | undefined;
|
|
64
75
|
url?: string | undefined;
|
|
65
76
|
phone?: string | undefined;
|
|
77
|
+
description?: string | undefined;
|
|
66
78
|
}[] | undefined;
|
|
67
79
|
escalationPath?: string | undefined;
|
|
68
|
-
|
|
69
|
-
error?: string | undefined;
|
|
70
|
-
messageId?: string | undefined;
|
|
71
|
-
crisis_confidence?: number | undefined;
|
|
72
|
-
crisis_indicators?: string[] | undefined;
|
|
73
|
-
crisisDetected?: boolean | undefined;
|
|
74
|
-
reply?: string | undefined;
|
|
75
|
-
response_text?: string | undefined;
|
|
76
|
-
crisisHandled?: boolean | undefined;
|
|
77
|
-
crisis_requires_intervention?: boolean | undefined;
|
|
78
|
-
crisis_suggested_actions?: string[] | undefined;
|
|
79
|
-
emotions?: string[] | undefined;
|
|
80
|
-
therapeuticTechnique?: string | undefined;
|
|
80
|
+
threadId?: string | undefined;
|
|
81
81
|
meta?: {
|
|
82
82
|
rag_confidence?: number | undefined;
|
|
83
83
|
emotionalTone?: string[] | undefined;
|
|
@@ -86,31 +86,31 @@ export declare const ShrinkResponseSchema: z.ZodObject<{
|
|
|
86
86
|
memory_high_relevance_count?: number | undefined;
|
|
87
87
|
error_type?: string | undefined;
|
|
88
88
|
}, {
|
|
89
|
-
|
|
89
|
+
error?: string | undefined;
|
|
90
90
|
content?: string | undefined;
|
|
91
|
-
|
|
91
|
+
reply?: string | undefined;
|
|
92
|
+
response_text?: string | undefined;
|
|
93
|
+
messageId?: string | undefined;
|
|
94
|
+
crisisDetected?: boolean | undefined;
|
|
95
|
+
message?: string | undefined;
|
|
92
96
|
crisisLevel?: string | number | undefined;
|
|
97
|
+
crisis_level?: string | number | undefined;
|
|
98
|
+
crisisHandled?: boolean | undefined;
|
|
99
|
+
crisis_confidence?: number | undefined;
|
|
100
|
+
crisis_requires_intervention?: boolean | undefined;
|
|
101
|
+
crisis_indicators?: string[] | undefined;
|
|
102
|
+
crisis_suggested_actions?: string[] | undefined;
|
|
103
|
+
emotions?: string[] | undefined;
|
|
104
|
+
therapeuticTechnique?: string | undefined;
|
|
93
105
|
resources?: {
|
|
94
106
|
type: string;
|
|
95
107
|
title: string;
|
|
96
|
-
description?: string | undefined;
|
|
97
108
|
url?: string | undefined;
|
|
98
109
|
phone?: string | undefined;
|
|
110
|
+
description?: string | undefined;
|
|
99
111
|
}[] | undefined;
|
|
100
112
|
escalationPath?: string | undefined;
|
|
101
|
-
|
|
102
|
-
error?: string | undefined;
|
|
103
|
-
messageId?: string | undefined;
|
|
104
|
-
crisis_confidence?: number | undefined;
|
|
105
|
-
crisis_indicators?: string[] | undefined;
|
|
106
|
-
crisisDetected?: boolean | undefined;
|
|
107
|
-
reply?: string | undefined;
|
|
108
|
-
response_text?: string | undefined;
|
|
109
|
-
crisisHandled?: boolean | undefined;
|
|
110
|
-
crisis_requires_intervention?: boolean | undefined;
|
|
111
|
-
crisis_suggested_actions?: string[] | undefined;
|
|
112
|
-
emotions?: string[] | undefined;
|
|
113
|
-
therapeuticTechnique?: string | undefined;
|
|
113
|
+
threadId?: string | undefined;
|
|
114
114
|
meta?: {
|
|
115
115
|
rag_confidence?: number | undefined;
|
|
116
116
|
emotionalTone?: string[] | undefined;
|
|
@@ -126,17 +126,17 @@ export declare const ErrorResponseSchema: z.ZodObject<{
|
|
|
126
126
|
code: z.ZodOptional<z.ZodString>;
|
|
127
127
|
details: z.ZodOptional<z.ZodUnknown>;
|
|
128
128
|
}, "strip", z.ZodTypeAny, {
|
|
129
|
+
error?: string | undefined;
|
|
129
130
|
code?: string | undefined;
|
|
130
131
|
message?: string | undefined;
|
|
131
|
-
error?: string | undefined;
|
|
132
|
-
details?: unknown;
|
|
133
132
|
error_type?: string | undefined;
|
|
133
|
+
details?: unknown;
|
|
134
134
|
}, {
|
|
135
|
+
error?: string | undefined;
|
|
135
136
|
code?: string | undefined;
|
|
136
137
|
message?: string | undefined;
|
|
137
|
-
error?: string | undefined;
|
|
138
|
-
details?: unknown;
|
|
139
138
|
error_type?: string | undefined;
|
|
139
|
+
details?: unknown;
|
|
140
140
|
}>;
|
|
141
141
|
export type ShrinkResponse = z.infer<typeof ShrinkResponseSchema>;
|
|
142
142
|
export type ErrorResponse = z.infer<typeof ErrorResponseSchema>;
|
package/dist/db/client.d.ts
CHANGED
|
@@ -1,23 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Database client — Supabase JS SDK only.
|
|
3
|
+
*
|
|
4
|
+
* All database access goes through the Supabase client.
|
|
5
|
+
* Drizzle ORM has been removed.
|
|
6
|
+
*/
|
|
7
|
+
import { SupabaseClient } from '@supabase/supabase-js';
|
|
8
|
+
declare let supabase: SupabaseClient | null;
|
|
6
9
|
export declare function initDatabase(): Promise<{
|
|
7
|
-
|
|
8
|
-
supabase: import("@supabase/supabase-js").SupabaseClient<unknown, {
|
|
9
|
-
PostgrestVersion: string;
|
|
10
|
-
}, never, never, {
|
|
11
|
-
PostgrestVersion: string;
|
|
12
|
-
}> | null;
|
|
13
|
-
sql: postgres.Sql<{}>;
|
|
10
|
+
supabase: SupabaseClient<any, "public", "public", any, any>;
|
|
14
11
|
}>;
|
|
15
|
-
export declare function
|
|
16
|
-
export declare function getSupabase(): import("@supabase/supabase-js").SupabaseClient<unknown, {
|
|
17
|
-
PostgrestVersion: string;
|
|
18
|
-
}, never, never, {
|
|
19
|
-
PostgrestVersion: string;
|
|
20
|
-
}> | null;
|
|
12
|
+
export declare function getSupabase(): SupabaseClient | null;
|
|
21
13
|
export declare function closeDatabase(): Promise<void>;
|
|
22
|
-
export {
|
|
14
|
+
export { supabase };
|
|
23
15
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/db/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAgB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGrE,QAAA,IAAI,QAAQ,EAAE,cAAc,GAAG,IAAW,CAAC;AAE3C,wBAAsB,YAAY;;GAmCjC;AAED,wBAAgB,WAAW,IAAI,cAAc,GAAG,IAAI,CAEnD;AAED,wBAAsB,aAAa,kBAGlC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/db/client.js
CHANGED
|
@@ -1,83 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Database client — Supabase JS SDK only.
|
|
3
|
+
*
|
|
4
|
+
* All database access goes through the Supabase client.
|
|
5
|
+
* Drizzle ORM has been removed.
|
|
6
|
+
*/
|
|
3
7
|
import { createClient } from '@supabase/supabase-js';
|
|
4
8
|
import { logger } from '../utils/logger.js';
|
|
5
|
-
import * as schema from './schema.js';
|
|
6
|
-
let db = null;
|
|
7
9
|
let supabase = null;
|
|
8
|
-
let sql = null;
|
|
9
10
|
export async function initDatabase() {
|
|
10
11
|
try {
|
|
11
|
-
const databaseUrl = process.env.DATABASE_URL;
|
|
12
12
|
const supabaseUrl = process.env.SUPABASE_URL;
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
const supabaseKey = process.env.SUPABASE_SERVICE_ROLE_KEY || process.env.SUPABASE_ANON_KEY;
|
|
14
|
+
if (!supabaseUrl || !supabaseKey) {
|
|
15
|
+
const missing = [];
|
|
16
|
+
if (!supabaseUrl)
|
|
17
|
+
missing.push('SUPABASE_URL');
|
|
18
|
+
if (!supabaseKey)
|
|
19
|
+
missing.push('SUPABASE_SERVICE_ROLE_KEY or SUPABASE_ANON_KEY');
|
|
20
|
+
console.error(`FATAL: Missing required env vars: ${missing.join(', ')}`);
|
|
21
|
+
throw new Error(`Missing required env vars: ${missing.join(', ')}`);
|
|
17
22
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
// Initialize Postgres connection for Drizzle
|
|
25
|
-
// Optimized pool configuration for better performance under load
|
|
26
|
-
// FIX 4: Reduced pool size for transaction-mode pooler (port 6543 PgBouncer)
|
|
27
|
-
// Supabase pooler manages its own connection limits; oversized client pool
|
|
28
|
-
// can exhaust server-side slots, especially with multiple Railway instances
|
|
29
|
-
sql = postgres(databaseUrl, {
|
|
30
|
-
max: 10, // Right-sized for transaction-mode pooler
|
|
31
|
-
idle_timeout: 30, // Shorter idle — pooler handles connection reuse
|
|
32
|
-
connect_timeout: 10, // Keep same connection timeout
|
|
33
|
-
prepare: false, // Required for transaction-mode pooler
|
|
23
|
+
logger.info(`Initializing Supabase client (using ${process.env.SUPABASE_SERVICE_ROLE_KEY ? 'service_role' : 'anon'} key)`);
|
|
24
|
+
supabase = createClient(supabaseUrl, supabaseKey, {
|
|
25
|
+
auth: {
|
|
26
|
+
autoRefreshToken: false,
|
|
27
|
+
persistSession: false,
|
|
28
|
+
},
|
|
34
29
|
});
|
|
35
|
-
// Initialize Drizzle ORM
|
|
36
|
-
db = drizzle(sql, { schema });
|
|
37
|
-
// Initialize Supabase client only if configuration is valid
|
|
38
|
-
if (hasSupabase) {
|
|
39
|
-
supabase = createClient(supabaseUrl, supabaseServiceKey, {
|
|
40
|
-
auth: {
|
|
41
|
-
autoRefreshToken: false,
|
|
42
|
-
persistSession: false,
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
logger.info('Supabase client initialized');
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
logger.info('Supabase configuration incomplete or uses placeholders - running without Supabase client');
|
|
49
|
-
}
|
|
50
30
|
// Test the connection
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
31
|
+
const { error } = await supabase.from('users').select('id').limit(1);
|
|
32
|
+
if (error) {
|
|
33
|
+
throw new Error(`Supabase connection test failed: ${error.message}`);
|
|
34
|
+
}
|
|
35
|
+
logger.info('Supabase client initialized and connection verified');
|
|
36
|
+
return { supabase };
|
|
54
37
|
}
|
|
55
38
|
catch (error) {
|
|
56
39
|
logger.error('Failed to initialize database:', error);
|
|
57
40
|
throw error;
|
|
58
41
|
}
|
|
59
42
|
}
|
|
60
|
-
export function getDb() {
|
|
61
|
-
if (!db) {
|
|
62
|
-
throw new Error('Database not initialized. Call initDatabase() first.');
|
|
63
|
-
}
|
|
64
|
-
return db;
|
|
65
|
-
}
|
|
66
43
|
export function getSupabase() {
|
|
67
|
-
if (!supabase) {
|
|
68
|
-
logger.warn('Supabase client not initialized - check environment configuration');
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
44
|
return supabase;
|
|
72
45
|
}
|
|
73
46
|
export async function closeDatabase() {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
sql = null;
|
|
77
|
-
db = null;
|
|
78
|
-
supabase = null;
|
|
79
|
-
logger.info('Database connections closed');
|
|
80
|
-
}
|
|
47
|
+
supabase = null;
|
|
48
|
+
logger.info('Database connection closed');
|
|
81
49
|
}
|
|
82
|
-
export {
|
|
50
|
+
export { supabase };
|
|
83
51
|
//# sourceMappingURL=client.js.map
|
package/dist/db/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,IAAI,QAAQ,GAA0B,IAAI,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAE3F,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW;gBAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC/C,IAAI,CAAC,WAAW;gBAAE,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YACjF,OAAO,CAAC,KAAK,CAAC,qCAAqC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,uCAAuC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC;QAE3H,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE;YAChD,IAAI,EAAE;gBACJ,gBAAgB,EAAE,KAAK;gBACvB,cAAc,EAAE,KAAK;aACtB;SACF,CAAC,CAAC;QAEH,sBAAsB;QACtB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QAEnE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,QAAQ,GAAG,IAAI,CAAC;IAChB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AAC5C,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -13,8 +13,8 @@ dotenv.config({ path: ".env.local" });
|
|
|
13
13
|
// Initialize server
|
|
14
14
|
async function main() {
|
|
15
15
|
try {
|
|
16
|
-
logger.info("Starting CouchLoop MCP Server v2.
|
|
17
|
-
// Initialize
|
|
16
|
+
logger.info("Starting CouchLoop MCP Server v2.1...");
|
|
17
|
+
// Initialize orchestration system
|
|
18
18
|
await initializeV2Orchestration();
|
|
19
19
|
// Initialize database connection (non-fatal — server responds to tools/list even without DB)
|
|
20
20
|
try {
|
|
@@ -26,8 +26,8 @@ async function main() {
|
|
|
26
26
|
}
|
|
27
27
|
// Create MCP server instance
|
|
28
28
|
const server = new Server({
|
|
29
|
-
name: "couchloop-mcp
|
|
30
|
-
version: "2.
|
|
29
|
+
name: "couchloop-mcp",
|
|
30
|
+
version: "2.1.0",
|
|
31
31
|
}, {
|
|
32
32
|
capabilities: {
|
|
33
33
|
tools: {},
|
|
@@ -37,9 +37,12 @@ async function main() {
|
|
|
37
37
|
});
|
|
38
38
|
// Set up tools
|
|
39
39
|
const tools = await setupTools();
|
|
40
|
+
// Cache tools/list response — tools are static after setup, and tools/list
|
|
41
|
+
// accounts for ~80% of RPC traffic (IDE polling)
|
|
42
|
+
const cachedToolDefinitions = Object.freeze(tools.map((t) => t.definition));
|
|
40
43
|
// Set up tool handlers
|
|
41
44
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
42
|
-
tools:
|
|
45
|
+
tools: cachedToolDefinitions,
|
|
43
46
|
}));
|
|
44
47
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
45
48
|
const toolName = request.params.name;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACH,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,GAC5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEpF,6BAA6B;AAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AAEtC,oBAAoB;AACpB,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAErD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journey-status.d.ts","sourceRoot":"","sources":["../../src/resources/journey-status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"journey-status.d.ts","sourceRoot":"","sources":["../../src/resources/journey-status.ts"],"names":[],"mappings":"AAGA,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,yBAwCtD"}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { journeys } from '../db/schema.js';
|
|
3
|
-
import { eq } from 'drizzle-orm';
|
|
1
|
+
import { getSupabaseClient, throwOnError } from '../db/supabase-helpers.js';
|
|
4
2
|
import { logger } from '../utils/logger.js';
|
|
5
3
|
export function createJourneyStatusHandler(slug) {
|
|
6
4
|
return async function getJourneyStatus() {
|
|
7
5
|
try {
|
|
8
|
-
const
|
|
6
|
+
const supabase = getSupabaseClient();
|
|
9
7
|
// Get journey by slug
|
|
10
|
-
const
|
|
11
|
-
.
|
|
12
|
-
.
|
|
13
|
-
.
|
|
14
|
-
.
|
|
8
|
+
const journey = throwOnError(await supabase
|
|
9
|
+
.from('journeys')
|
|
10
|
+
.select('*')
|
|
11
|
+
.eq('slug', slug)
|
|
12
|
+
.maybeSingle());
|
|
15
13
|
if (!journey) {
|
|
16
14
|
return JSON.stringify({
|
|
17
15
|
error: 'Journey not found',
|
|
@@ -23,11 +21,11 @@ export function createJourneyStatusHandler(slug) {
|
|
|
23
21
|
slug: journey.slug,
|
|
24
22
|
name: journey.name,
|
|
25
23
|
description: journey.description,
|
|
26
|
-
estimated_minutes: journey.
|
|
24
|
+
estimated_minutes: journey.estimated_minutes,
|
|
27
25
|
tags: journey.tags,
|
|
28
26
|
steps: journey.steps,
|
|
29
|
-
created_at: journey.
|
|
30
|
-
updated_at: journey.
|
|
27
|
+
created_at: journey.created_at,
|
|
28
|
+
updated_at: journey.updated_at,
|
|
31
29
|
}, null, 2);
|
|
32
30
|
}
|
|
33
31
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journey-status.js","sourceRoot":"","sources":["../../src/resources/journey-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"journey-status.js","sourceRoot":"","sources":["../../src/resources/journey-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,OAAO,KAAK,UAAU,gBAAgB;QACpC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;YAErC,sBAAsB;YACtB,MAAM,OAAO,GAAG,YAAY,CAC1B,MAAM,QAAQ;iBACX,IAAI,CAAC,UAAU,CAAC;iBAChB,MAAM,CAAC,GAAG,CAAC;iBACX,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;iBAChB,WAAW,EAAE,CACjB,CAAC;YAEF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,SAAS,CAAC;oBACpB,KAAK,EAAE,mBAAmB;oBAC1B,IAAI,EAAE,IAAI;iBACX,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACd,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;gBAC5C,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-summary.d.ts","sourceRoot":"","sources":["../../src/resources/session-summary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-summary.d.ts","sourceRoot":"","sources":["../../src/resources/session-summary.ts"],"names":[],"mappings":"AAIA,wBAAsB,iBAAiB,oBA+FtC"}
|
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { sessions, journeys, checkpoints, users } from '../db/schema.js';
|
|
3
|
-
import { eq, and, desc } from 'drizzle-orm';
|
|
1
|
+
import { getSupabaseClient, throwOnError } from '../db/supabase-helpers.js';
|
|
4
2
|
import { logger } from '../utils/logger.js';
|
|
5
3
|
import { nanoid } from 'nanoid';
|
|
6
4
|
export async function getSessionSummary() {
|
|
7
5
|
try {
|
|
8
|
-
const
|
|
6
|
+
const supabase = getSupabaseClient();
|
|
9
7
|
// NOTE: Resources in MCP don't receive parameters, so we can't pass auth context.
|
|
10
8
|
// Using a mock user ID for now. This will be addressed when we implement
|
|
11
9
|
// a proper session store or modify the MCP server to maintain user context.
|
|
12
10
|
const mockUserId = 'usr_' + nanoid();
|
|
13
|
-
const
|
|
14
|
-
.
|
|
15
|
-
.
|
|
16
|
-
.
|
|
17
|
-
.
|
|
11
|
+
const user = throwOnError(await supabase
|
|
12
|
+
.from('users')
|
|
13
|
+
.select('*')
|
|
14
|
+
.eq('external_id', mockUserId)
|
|
15
|
+
.maybeSingle());
|
|
18
16
|
if (!user) {
|
|
19
17
|
return JSON.stringify({
|
|
20
18
|
active: false,
|
|
@@ -22,12 +20,14 @@ export async function getSessionSummary() {
|
|
|
22
20
|
}, null, 2);
|
|
23
21
|
}
|
|
24
22
|
// Get active session
|
|
25
|
-
const
|
|
26
|
-
.
|
|
27
|
-
.
|
|
28
|
-
.
|
|
29
|
-
.
|
|
30
|
-
.
|
|
23
|
+
const activeSession = throwOnError(await supabase
|
|
24
|
+
.from('sessions')
|
|
25
|
+
.select('*')
|
|
26
|
+
.eq('user_id', user.id)
|
|
27
|
+
.eq('status', 'active')
|
|
28
|
+
.order('last_active_at', { ascending: false })
|
|
29
|
+
.limit(1)
|
|
30
|
+
.maybeSingle());
|
|
31
31
|
if (!activeSession) {
|
|
32
32
|
return JSON.stringify({
|
|
33
33
|
active: false,
|
|
@@ -37,30 +37,30 @@ export async function getSessionSummary() {
|
|
|
37
37
|
// Get journey if linked
|
|
38
38
|
let journey = null;
|
|
39
39
|
let currentStep = null;
|
|
40
|
-
if (activeSession.
|
|
41
|
-
|
|
42
|
-
.
|
|
43
|
-
.
|
|
44
|
-
.
|
|
45
|
-
.
|
|
46
|
-
if (journey && journey.steps && journey.steps[activeSession.
|
|
47
|
-
currentStep = journey.steps[activeSession.
|
|
40
|
+
if (activeSession.journey_id) {
|
|
41
|
+
journey = throwOnError(await supabase
|
|
42
|
+
.from('journeys')
|
|
43
|
+
.select('*')
|
|
44
|
+
.eq('id', activeSession.journey_id)
|
|
45
|
+
.maybeSingle());
|
|
46
|
+
if (journey && journey.steps && journey.steps[activeSession.current_step]) {
|
|
47
|
+
currentStep = journey.steps[activeSession.current_step];
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
// Get checkpoints
|
|
51
|
-
const sessionCheckpoints = await
|
|
52
|
-
.
|
|
53
|
-
.
|
|
54
|
-
.
|
|
55
|
-
.
|
|
51
|
+
const sessionCheckpoints = throwOnError(await supabase
|
|
52
|
+
.from('checkpoints')
|
|
53
|
+
.select('*')
|
|
54
|
+
.eq('session_id', activeSession.id)
|
|
55
|
+
.order('created_at', { ascending: true }));
|
|
56
56
|
return JSON.stringify({
|
|
57
57
|
active: true,
|
|
58
58
|
session: {
|
|
59
59
|
id: activeSession.id,
|
|
60
60
|
status: activeSession.status,
|
|
61
|
-
started_at: activeSession.
|
|
62
|
-
last_active_at: activeSession.
|
|
63
|
-
current_step_index: activeSession.
|
|
61
|
+
started_at: activeSession.started_at,
|
|
62
|
+
last_active_at: activeSession.last_active_at,
|
|
63
|
+
current_step_index: activeSession.current_step,
|
|
64
64
|
},
|
|
65
65
|
journey: journey ? {
|
|
66
66
|
name: journey.name,
|
|
@@ -68,9 +68,9 @@ export async function getSessionSummary() {
|
|
|
68
68
|
total_steps: journey.steps?.length || 0,
|
|
69
69
|
} : null,
|
|
70
70
|
current_step: currentStep,
|
|
71
|
-
checkpoints: sessionCheckpoints.map(c => ({
|
|
71
|
+
checkpoints: (sessionCheckpoints ?? []).map((c) => ({
|
|
72
72
|
key: c.key,
|
|
73
|
-
created_at: c.
|
|
73
|
+
created_at: c.created_at,
|
|
74
74
|
})),
|
|
75
75
|
}, null, 2);
|
|
76
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-summary.js","sourceRoot":"","sources":["../../src/resources/session-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"session-summary.js","sourceRoot":"","sources":["../../src/resources/session-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-context.d.ts","sourceRoot":"","sources":["../../src/resources/user-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"user-context.d.ts","sourceRoot":"","sources":["../../src/resources/user-context.ts"],"names":[],"mappings":"AAIA,wBAAsB,sBAAsB,oBAwE3C"}
|