recall-mcp-v3 3.1.3 → 3.1.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/dist/api.d.ts.map +1 -1
- package/dist/api.js +15 -2
- package/dist/api.js.map +1 -1
- package/dist/detect.d.ts +40 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +158 -0
- package/dist/detect.js.map +1 -0
- package/package.json +1 -1
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/api.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* - Encrypts content before sending, decrypts after receiving
|
|
8
8
|
*/
|
|
9
9
|
import { encrypt, decrypt, isEncrypted, safeDecrypt } from './crypto.js';
|
|
10
|
+
import { getCachedDetection, formatDetectionHeader } from './detect.js';
|
|
10
11
|
const API_URL = process.env.RECALL_API_URL || 'https://api-v3.recall.team';
|
|
11
12
|
// Cache team key in memory (per process)
|
|
12
13
|
let cachedTeamKey = null;
|
|
@@ -32,11 +33,15 @@ function getToken() {
|
|
|
32
33
|
async function request(method, path, body) {
|
|
33
34
|
const token = getToken();
|
|
34
35
|
const url = `${API_URL}${path}`;
|
|
36
|
+
// Get detection data for analytics header
|
|
37
|
+
const detection = getCachedDetection();
|
|
35
38
|
const response = await fetch(url, {
|
|
36
39
|
method,
|
|
37
40
|
headers: {
|
|
38
41
|
'Content-Type': 'application/json',
|
|
39
42
|
Authorization: `Bearer ${token}`,
|
|
43
|
+
// Include detection header for analytics (optional, server ignores if missing)
|
|
44
|
+
'X-Recall-Client': formatDetectionHeader(detection),
|
|
40
45
|
},
|
|
41
46
|
body: body ? JSON.stringify(body) : undefined,
|
|
42
47
|
});
|
|
@@ -226,13 +231,21 @@ export async function saveSession(repoId, data) {
|
|
|
226
231
|
next_steps: data.next_steps || null,
|
|
227
232
|
};
|
|
228
233
|
const now = new Date().toISOString();
|
|
229
|
-
//
|
|
234
|
+
// Get detection data for analytics
|
|
235
|
+
const detection = getCachedDetection();
|
|
236
|
+
// Send to API with encrypted content + plaintext TLDR + detection data
|
|
230
237
|
return request('POST', `/v1/repos/${repoId}/sessions`, {
|
|
231
238
|
encrypted_content: encryptedContent,
|
|
232
239
|
tldr,
|
|
233
240
|
started_at: now,
|
|
234
241
|
ended_at: now,
|
|
235
|
-
tool: 'claude-code'
|
|
242
|
+
tool: detection.mcp_client, // Use detected client instead of hardcoded 'claude-code'
|
|
243
|
+
// Detection data for analytics (all optional, server ignores if missing)
|
|
244
|
+
mcp_client: detection.mcp_client,
|
|
245
|
+
ai_provider: detection.ai_provider,
|
|
246
|
+
environment: detection.environment,
|
|
247
|
+
transport: detection.transport,
|
|
248
|
+
detection_raw: JSON.stringify(detection.raw),
|
|
236
249
|
});
|
|
237
250
|
}
|
|
238
251
|
/**
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/detect.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client Environment Detection
|
|
3
|
+
*
|
|
4
|
+
* Best-effort detection of the client environment for analytics.
|
|
5
|
+
* Detection is NEVER required for functionality - everything works
|
|
6
|
+
* even if detection fails completely.
|
|
7
|
+
*
|
|
8
|
+
* Three dimensions tracked:
|
|
9
|
+
* 1. MCP Client - What's connecting (claude-code, cursor, windsurf)
|
|
10
|
+
* 2. AI Provider - What LLM is being used (anthropic, openai, google)
|
|
11
|
+
* 3. Environment - Where it's running (terminal, vscode, cursor-ide)
|
|
12
|
+
*/
|
|
13
|
+
export interface DetectedEnvironment {
|
|
14
|
+
mcp_client: string;
|
|
15
|
+
ai_provider: string;
|
|
16
|
+
environment: string;
|
|
17
|
+
os: string;
|
|
18
|
+
transport: 'stdio';
|
|
19
|
+
confidence: 'high' | 'medium' | 'low' | 'none';
|
|
20
|
+
raw: Record<string, string | undefined>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Detect the current environment.
|
|
24
|
+
* This function only READS environment variables - never modifies anything.
|
|
25
|
+
*/
|
|
26
|
+
export declare function detectEnvironment(): DetectedEnvironment;
|
|
27
|
+
/**
|
|
28
|
+
* Format detection data as HTTP header value.
|
|
29
|
+
* Format: mcp_client/environment/ai_provider
|
|
30
|
+
*/
|
|
31
|
+
export declare function formatDetectionHeader(detection: DetectedEnvironment): string;
|
|
32
|
+
/**
|
|
33
|
+
* Get cached detection result (runs detection once per process).
|
|
34
|
+
*/
|
|
35
|
+
export declare function getCachedDetection(): DetectedEnvironment;
|
|
36
|
+
/**
|
|
37
|
+
* Log detection result for debugging (on MCP startup).
|
|
38
|
+
*/
|
|
39
|
+
export declare function logDetection(detection: DetectedEnvironment): void;
|
|
40
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,mBAAmB;IAElC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IAGpB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IAGnB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAG/C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,CAmCvD;AAqGD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,mBAAmB,GAAG,MAAM,CAE5E;AAKD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CAKxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAWjE"}
|
package/dist/detect.js
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client Environment Detection
|
|
3
|
+
*
|
|
4
|
+
* Best-effort detection of the client environment for analytics.
|
|
5
|
+
* Detection is NEVER required for functionality - everything works
|
|
6
|
+
* even if detection fails completely.
|
|
7
|
+
*
|
|
8
|
+
* Three dimensions tracked:
|
|
9
|
+
* 1. MCP Client - What's connecting (claude-code, cursor, windsurf)
|
|
10
|
+
* 2. AI Provider - What LLM is being used (anthropic, openai, google)
|
|
11
|
+
* 3. Environment - Where it's running (terminal, vscode, cursor-ide)
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Detect the current environment.
|
|
15
|
+
* This function only READS environment variables - never modifies anything.
|
|
16
|
+
*/
|
|
17
|
+
export function detectEnvironment() {
|
|
18
|
+
// Gather raw environment data for debugging
|
|
19
|
+
const raw = {
|
|
20
|
+
TERM: process.env.TERM,
|
|
21
|
+
TERM_PROGRAM: process.env.TERM_PROGRAM,
|
|
22
|
+
SHELL: process.env.SHELL,
|
|
23
|
+
VSCODE_PID: process.env.VSCODE_PID,
|
|
24
|
+
VSCODE_GIT_IPC_HANDLE: process.env.VSCODE_GIT_IPC_HANDLE,
|
|
25
|
+
CURSOR_CHANNEL: process.env.CURSOR_CHANNEL,
|
|
26
|
+
WINDSURF_VERSION: process.env.WINDSURF_VERSION,
|
|
27
|
+
// Add more as we discover them
|
|
28
|
+
};
|
|
29
|
+
// Detect environment (where the code is running)
|
|
30
|
+
const environment = detectEditorEnvironment(raw);
|
|
31
|
+
// Detect MCP client (what's connecting to us)
|
|
32
|
+
const mcp_client = detectMcpClient(raw, environment);
|
|
33
|
+
// AI provider - for stdio MCP, we know it's Claude (via Claude Code)
|
|
34
|
+
// Other AI providers would use different MCP clients
|
|
35
|
+
const ai_provider = detectAiProvider(mcp_client);
|
|
36
|
+
// Calculate confidence based on how much we could detect
|
|
37
|
+
const confidence = calculateConfidence(mcp_client, environment);
|
|
38
|
+
return {
|
|
39
|
+
mcp_client,
|
|
40
|
+
ai_provider,
|
|
41
|
+
environment,
|
|
42
|
+
os: process.platform,
|
|
43
|
+
transport: 'stdio',
|
|
44
|
+
confidence,
|
|
45
|
+
raw,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Detect the editor/IDE environment.
|
|
50
|
+
*/
|
|
51
|
+
function detectEditorEnvironment(raw) {
|
|
52
|
+
// VS Code detection
|
|
53
|
+
if (raw.VSCODE_PID || raw.VSCODE_GIT_IPC_HANDLE) {
|
|
54
|
+
return 'vscode';
|
|
55
|
+
}
|
|
56
|
+
// Cursor detection (Cursor is VS Code-based, may set both)
|
|
57
|
+
if (raw.CURSOR_CHANNEL) {
|
|
58
|
+
return 'cursor-ide';
|
|
59
|
+
}
|
|
60
|
+
// Windsurf detection
|
|
61
|
+
if (raw.WINDSURF_VERSION) {
|
|
62
|
+
return 'windsurf-ide';
|
|
63
|
+
}
|
|
64
|
+
// JetBrains detection (add env vars when discovered)
|
|
65
|
+
// if (raw.JETBRAINS_...) {
|
|
66
|
+
// return 'jetbrains';
|
|
67
|
+
// }
|
|
68
|
+
// Pure terminal (has TERM but no IDE indicators)
|
|
69
|
+
if (raw.TERM && !raw.VSCODE_PID) {
|
|
70
|
+
return 'terminal';
|
|
71
|
+
}
|
|
72
|
+
return 'unknown';
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Detect which MCP client is connecting.
|
|
76
|
+
*/
|
|
77
|
+
function detectMcpClient(raw, environment) {
|
|
78
|
+
// For now, stdio MCP is assumed to be claude-code
|
|
79
|
+
// When other MCP clients emerge, we'll add detection logic
|
|
80
|
+
// Cursor has its own MCP handling
|
|
81
|
+
if (environment === 'cursor-ide') {
|
|
82
|
+
return 'cursor';
|
|
83
|
+
}
|
|
84
|
+
// Windsurf has its own MCP handling
|
|
85
|
+
if (environment === 'windsurf-ide') {
|
|
86
|
+
return 'windsurf';
|
|
87
|
+
}
|
|
88
|
+
// Default: assume it's claude-code for stdio transport
|
|
89
|
+
// This is a reasonable assumption since that's the primary use case
|
|
90
|
+
return 'claude-code';
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Detect AI provider based on MCP client.
|
|
94
|
+
*/
|
|
95
|
+
function detectAiProvider(mcp_client) {
|
|
96
|
+
// MCP client → AI provider mapping
|
|
97
|
+
const providerMap = {
|
|
98
|
+
'claude-code': 'anthropic',
|
|
99
|
+
'claude-desktop': 'anthropic',
|
|
100
|
+
'cursor': 'unknown', // Cursor supports multiple providers
|
|
101
|
+
'windsurf': 'codeium', // Windsurf uses Codeium's AI
|
|
102
|
+
'continue': 'unknown', // Continue supports multiple providers
|
|
103
|
+
};
|
|
104
|
+
return providerMap[mcp_client] || 'unknown';
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Calculate detection confidence.
|
|
108
|
+
*/
|
|
109
|
+
function calculateConfidence(mcp_client, environment) {
|
|
110
|
+
// High: We detected both MCP client and environment
|
|
111
|
+
if (mcp_client !== 'unknown' && environment !== 'unknown') {
|
|
112
|
+
return 'high';
|
|
113
|
+
}
|
|
114
|
+
// Medium: We detected one of them
|
|
115
|
+
if (mcp_client !== 'unknown' || environment !== 'unknown') {
|
|
116
|
+
return 'medium';
|
|
117
|
+
}
|
|
118
|
+
// Low: We're making assumptions but have some data
|
|
119
|
+
if (process.env.TERM) {
|
|
120
|
+
return 'low';
|
|
121
|
+
}
|
|
122
|
+
// None: No useful detection data
|
|
123
|
+
return 'none';
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Format detection data as HTTP header value.
|
|
127
|
+
* Format: mcp_client/environment/ai_provider
|
|
128
|
+
*/
|
|
129
|
+
export function formatDetectionHeader(detection) {
|
|
130
|
+
return `${detection.mcp_client}/${detection.environment}/${detection.ai_provider}`;
|
|
131
|
+
}
|
|
132
|
+
// Cache detection result (doesn't change during process lifetime)
|
|
133
|
+
let cachedDetection = null;
|
|
134
|
+
/**
|
|
135
|
+
* Get cached detection result (runs detection once per process).
|
|
136
|
+
*/
|
|
137
|
+
export function getCachedDetection() {
|
|
138
|
+
if (!cachedDetection) {
|
|
139
|
+
cachedDetection = detectEnvironment();
|
|
140
|
+
}
|
|
141
|
+
return cachedDetection;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Log detection result for debugging (on MCP startup).
|
|
145
|
+
*/
|
|
146
|
+
export function logDetection(detection) {
|
|
147
|
+
// Only log in debug mode to avoid cluttering MCP output
|
|
148
|
+
if (process.env.RECALL_DEBUG) {
|
|
149
|
+
console.error('[Recall] Detected environment:', {
|
|
150
|
+
mcp_client: detection.mcp_client,
|
|
151
|
+
ai_provider: detection.ai_provider,
|
|
152
|
+
environment: detection.environment,
|
|
153
|
+
os: detection.os,
|
|
154
|
+
confidence: detection.confidence,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
|