@elliotding/ai-agent-mcp 0.1.3 → 0.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/.prompt-cache/cmd-cmd-client-sdk-ai-hub-generate-testcase.md +101 -0
- package/.prompt-cache/cmd-cmd-client-sdk-ai-hub-submit_zct_job.md +158 -0
- package/.prompt-cache/skill-skill-client-sdk-ai-hub-analyze-conf-status.md +311 -0
- package/.prompt-cache/skill-skill-client-sdk-ai-hub-analyze-sdk-log.md +64 -0
- package/.prompt-cache/skill-skill-client-sdk-ai-hub-analyze-zmb-log-errors.md +84 -0
- package/ai-resource-telemetry.json +22 -0
- package/dist/api/client.d.ts +39 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +21 -3
- package/dist/api/client.js.map +1 -1
- package/dist/auth/permissions.d.ts.map +1 -1
- package/dist/auth/permissions.js +6 -0
- package/dist/auth/permissions.js.map +1 -1
- package/dist/config/index.d.ts +6 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -3
- package/dist/config/index.js.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/prompts/cache.d.ts +69 -0
- package/dist/prompts/cache.d.ts.map +1 -0
- package/dist/prompts/cache.js +163 -0
- package/dist/prompts/cache.js.map +1 -0
- package/dist/prompts/generator.d.ts +49 -0
- package/dist/prompts/generator.d.ts.map +1 -0
- package/dist/prompts/generator.js +158 -0
- package/dist/prompts/generator.js.map +1 -0
- package/dist/prompts/index.d.ts +13 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +24 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/manager.d.ts +106 -0
- package/dist/prompts/manager.d.ts.map +1 -0
- package/dist/prompts/manager.js +263 -0
- package/dist/prompts/manager.js.map +1 -0
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +61 -17
- package/dist/server/http.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +43 -0
- package/dist/server.js.map +1 -1
- package/dist/telemetry/index.d.ts +3 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +7 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/manager.d.ts +149 -0
- package/dist/telemetry/manager.d.ts.map +1 -0
- package/dist/telemetry/manager.js +368 -0
- package/dist/telemetry/manager.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/manage-subscription.d.ts.map +1 -1
- package/dist/tools/manage-subscription.js +19 -4
- package/dist/tools/manage-subscription.js.map +1 -1
- package/dist/tools/search-resources.d.ts.map +1 -1
- package/dist/tools/search-resources.js +2 -3
- package/dist/tools/search-resources.js.map +1 -1
- package/dist/tools/sync-resources.d.ts +9 -4
- package/dist/tools/sync-resources.d.ts.map +1 -1
- package/dist/tools/sync-resources.js +121 -7
- package/dist/tools/sync-resources.js.map +1 -1
- package/dist/tools/track-usage.d.ts +63 -0
- package/dist/tools/track-usage.d.ts.map +1 -0
- package/dist/tools/track-usage.js +90 -0
- package/dist/tools/track-usage.js.map +1 -0
- package/dist/tools/uninstall-resource.d.ts.map +1 -1
- package/dist/tools/uninstall-resource.js +53 -3
- package/dist/tools/uninstall-resource.js.map +1 -1
- package/dist/tools/upload-resource.d.ts.map +1 -1
- package/dist/tools/upload-resource.js +49 -5
- package/dist/tools/upload-resource.js.map +1 -1
- package/dist/utils/cursor-paths.d.ts +10 -0
- package/dist/utils/cursor-paths.d.ts.map +1 -1
- package/dist/utils/cursor-paths.js +13 -0
- package/dist/utils/cursor-paths.js.map +1 -1
- package/package.json +1 -1
- package/src/api/client.ts +52 -3
- package/src/auth/permissions.ts +6 -0
- package/src/config/index.ts +11 -5
- package/src/index.ts +18 -0
- package/src/prompts/cache.ts +140 -0
- package/src/prompts/generator.ts +142 -0
- package/src/prompts/index.ts +20 -0
- package/src/prompts/manager.ts +342 -0
- package/src/server/http.ts +69 -17
- package/src/server.ts +13 -0
- package/src/telemetry/index.ts +10 -0
- package/src/telemetry/manager.ts +419 -0
- package/src/tools/index.ts +1 -0
- package/src/tools/manage-subscription.ts +19 -4
- package/src/tools/search-resources.ts +2 -4
- package/src/tools/sync-resources.ts +131 -7
- package/src/tools/track-usage.ts +113 -0
- package/src/tools/uninstall-resource.ts +62 -4
- package/src/tools/upload-resource.ts +52 -5
- package/src/utils/cursor-paths.ts +13 -0
|
@@ -50,6 +50,7 @@ const manager_1 = require("../filesystem/manager");
|
|
|
50
50
|
const client_1 = require("../api/client");
|
|
51
51
|
const cursor_paths_js_1 = require("../utils/cursor-paths.js");
|
|
52
52
|
const errors_1 = require("../types/errors");
|
|
53
|
+
const index_js_1 = require("../prompts/index.js");
|
|
53
54
|
/**
|
|
54
55
|
* Find installed resource files/directories by pattern.
|
|
55
56
|
* - File-based types (rule, command): scan for matching .md/.mdc files
|
|
@@ -153,15 +154,64 @@ async function uninstallResource(params) {
|
|
|
153
154
|
try {
|
|
154
155
|
const pattern = typedParams.resource_id_or_name;
|
|
155
156
|
const removeFromAccount = typedParams.remove_from_account || false;
|
|
157
|
+
const removedResources = [];
|
|
158
|
+
let subscriptionRemoved = false;
|
|
159
|
+
let mcpJsonCleaned = false;
|
|
160
|
+
// ── Command / Skill: unregister MCP Prompt + delete cache ─────────────
|
|
161
|
+
// Match registered prompt names that contain the pattern.
|
|
162
|
+
const matchedPromptNames = index_js_1.promptManager.promptNames().filter((name) => name === pattern || name.includes(pattern));
|
|
163
|
+
if (matchedPromptNames.length > 0) {
|
|
164
|
+
for (const promptName of matchedPromptNames) {
|
|
165
|
+
// Prompt name format: <team>/<type>/<resource_name>
|
|
166
|
+
const parts = promptName.split('/');
|
|
167
|
+
const team = parts[0] ?? 'general';
|
|
168
|
+
const resourceType = parts[1];
|
|
169
|
+
const resourceName = parts.slice(2).join('/') || promptName;
|
|
170
|
+
// Find the resource_id from the registered prompt (best-effort via name).
|
|
171
|
+
// For unsubscription, we pass the promptName as id if no better source.
|
|
172
|
+
const resourceId = pattern.startsWith('cmd-') || pattern.startsWith('skill-')
|
|
173
|
+
? pattern
|
|
174
|
+
: promptName;
|
|
175
|
+
// Unregister from the in-memory prompt registry only.
|
|
176
|
+
// The server-side .prompt-cache/ files are intentionally NOT deleted here —
|
|
177
|
+
// they are shared across all users and will be regenerated on the next git pull.
|
|
178
|
+
index_js_1.promptManager.unregisterPrompt(resourceId, resourceType ?? 'command', resourceName);
|
|
179
|
+
removedResources.push({ id: resourceId, name: resourceName, path: `[MCP Prompt: ${promptName}]` });
|
|
180
|
+
logger_1.logger.info({ promptName, team, resourceType, resourceName }, 'MCP Prompt unregistered via uninstall');
|
|
181
|
+
}
|
|
182
|
+
// Remove from server subscription if requested
|
|
183
|
+
if (removeFromAccount) {
|
|
184
|
+
for (const r of removedResources) {
|
|
185
|
+
try {
|
|
186
|
+
await client_1.apiClient.unsubscribe(r.id);
|
|
187
|
+
subscriptionRemoved = true;
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
logger_1.logger.warn({ resourceId: r.id, err }, 'Failed to unsubscribe Command/Skill Prompt from account');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Return early — Command/Skill resources have no local filesystem footprint.
|
|
195
|
+
const result = {
|
|
196
|
+
success: true,
|
|
197
|
+
removed_resources: removedResources,
|
|
198
|
+
subscription_removed: subscriptionRemoved,
|
|
199
|
+
message: [
|
|
200
|
+
`Successfully unregistered ${removedResources.length} MCP Prompt${removedResources.length > 1 ? 's' : ''}.`,
|
|
201
|
+
subscriptionRemoved ? 'Subscription removed from account.' : null,
|
|
202
|
+
].filter(Boolean).join(' '),
|
|
203
|
+
};
|
|
204
|
+
const duration = Date.now() - startTime;
|
|
205
|
+
(0, logger_1.logToolCall)('uninstall_resource', 'user-id', params, duration);
|
|
206
|
+
return { success: true, data: result };
|
|
207
|
+
}
|
|
208
|
+
// ── Rule / MCP: original local-filesystem removal path ────────────────
|
|
156
209
|
logger_1.logger.debug({ pattern }, 'Finding installed resources...');
|
|
157
210
|
const matched = await findInstalledResources(pattern);
|
|
158
211
|
if (matched.length === 0) {
|
|
159
212
|
throw (0, errors_1.createValidationError)(pattern, 'resource_id_or_name', 'No installed resources found matching pattern. Use search_resources to find available resources');
|
|
160
213
|
}
|
|
161
214
|
logger_1.logger.info({ pattern, count: matched.length }, 'Found matching installed resources');
|
|
162
|
-
const removedResources = [];
|
|
163
|
-
let subscriptionRemoved = false;
|
|
164
|
-
let mcpJsonCleaned = false;
|
|
165
215
|
for (const resource of matched) {
|
|
166
216
|
try {
|
|
167
217
|
if (resource.isDirectory) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall-resource.js","sourceRoot":"","sources":["../../src/tools/uninstall-resource.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"uninstall-resource.js","sourceRoot":"","sources":["../../src/tools/uninstall-resource.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-resource.d.ts","sourceRoot":"","sources":["../../src/tools/upload-resource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"upload-resource.d.ts","sourceRoot":"","sources":["../../src/tools/upload-resource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,OAAO,KAAK,EAAwB,oBAAoB,EAAE,UAAU,EAAa,MAAM,gBAAgB,CAAC;AAwJxG,wBAAsB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CA4J/F;AAGD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkG9B,CAAC"}
|
|
@@ -54,6 +54,22 @@ const logger_1 = require("../utils/logger");
|
|
|
54
54
|
const client_1 = require("../api/client");
|
|
55
55
|
const resources_1 = require("../resources");
|
|
56
56
|
const errors_1 = require("../types/errors");
|
|
57
|
+
const index_js_1 = require("../prompts/index.js");
|
|
58
|
+
/** Extract the `description` field from YAML frontmatter (--- ... ---) in Markdown content. */
|
|
59
|
+
function extractFrontmatterDescription(content) {
|
|
60
|
+
if (!content.startsWith('---'))
|
|
61
|
+
return undefined;
|
|
62
|
+
const end = content.indexOf('\n---', 3);
|
|
63
|
+
if (end === -1)
|
|
64
|
+
return undefined;
|
|
65
|
+
const frontmatter = content.slice(3, end);
|
|
66
|
+
for (const line of frontmatter.split('\n')) {
|
|
67
|
+
const match = /^description:\s*(.+)$/.exec(line.trim());
|
|
68
|
+
if (match)
|
|
69
|
+
return match[1].trim().replace(/^['"]|['"]$/g, '');
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
57
73
|
/**
|
|
58
74
|
* Infer the resource type from the uploaded file list ONLY when the user has
|
|
59
75
|
* not explicitly stated a type. If the user declared a type, that always wins.
|
|
@@ -230,6 +246,36 @@ async function uploadResource(params) {
|
|
|
230
246
|
const resourceUrl = finalizeResp.url ?? '';
|
|
231
247
|
const commitHash = finalizeResp.commit_hash ?? '';
|
|
232
248
|
logger_1.logger.info({ finalResourceId, version, commitHash }, 'Upload finalized successfully');
|
|
249
|
+
// For Command / Skill: register the uploaded content as an MCP Prompt immediately,
|
|
250
|
+
// so the user can invoke it via slash-command without a full sync cycle.
|
|
251
|
+
if (resourceType === 'command' || resourceType === 'skill') {
|
|
252
|
+
try {
|
|
253
|
+
const primaryFile = resourceType === 'skill'
|
|
254
|
+
? (fileEntries.find((f) => path.basename(f.path) === 'SKILL.md') ??
|
|
255
|
+
fileEntries.find((f) => f.path.endsWith('.md')) ??
|
|
256
|
+
fileEntries[0])
|
|
257
|
+
: (fileEntries.find((f) => path.basename(f.path).replace(/\.md$/, '') === resourceName) ??
|
|
258
|
+
fileEntries.find((f) => f.path.endsWith('.md')) ??
|
|
259
|
+
fileEntries[0]);
|
|
260
|
+
const rawContent = primaryFile?.content ?? '';
|
|
261
|
+
const team = typedParams.team ?? 'general';
|
|
262
|
+
const frontmatterDesc = extractFrontmatterDescription(rawContent);
|
|
263
|
+
const description = frontmatterDesc ?? typedParams.message ?? resourceName;
|
|
264
|
+
await index_js_1.promptManager.registerPrompt({
|
|
265
|
+
resource_id: finalResourceId,
|
|
266
|
+
resource_type: resourceType,
|
|
267
|
+
resource_name: resourceName,
|
|
268
|
+
team,
|
|
269
|
+
description,
|
|
270
|
+
rawContent,
|
|
271
|
+
});
|
|
272
|
+
logger_1.logger.info({ finalResourceId, resourceType }, 'MCP Prompt registered after upload');
|
|
273
|
+
}
|
|
274
|
+
catch (promptErr) {
|
|
275
|
+
// Non-fatal: the resource is uploaded; Prompt registration is best-effort.
|
|
276
|
+
logger_1.logger.warn({ finalResourceId, error: promptErr.message }, 'MCP Prompt registration after upload failed (non-fatal)');
|
|
277
|
+
}
|
|
278
|
+
}
|
|
233
279
|
const result = {
|
|
234
280
|
resource_id: finalResourceId,
|
|
235
281
|
version,
|
|
@@ -276,8 +322,7 @@ exports.uploadResourceTool = {
|
|
|
276
322
|
'\n\nPass files[] — an array of {path, content} entries. ' +
|
|
277
323
|
'path must be the original filename as-is (relative, no path traversal). ' +
|
|
278
324
|
'No restriction on file extensions — mcp packages may include .py, .js, package.json, etc.\n' +
|
|
279
|
-
'\
|
|
280
|
-
'so that each user\'s API calls use their own identity.',
|
|
325
|
+
'\nThe user_token is injected automatically by the server — do NOT read or pass it manually.',
|
|
281
326
|
inputSchema: {
|
|
282
327
|
type: 'object',
|
|
283
328
|
properties: {
|
|
@@ -337,9 +382,8 @@ exports.uploadResourceTool = {
|
|
|
337
382
|
},
|
|
338
383
|
user_token: {
|
|
339
384
|
type: 'string',
|
|
340
|
-
description: '
|
|
341
|
-
'
|
|
342
|
-
'for all CSP API calls in this request instead of the server-level fallback token.',
|
|
385
|
+
description: 'DO NOT set this field — it is automatically injected by the MCP server from ' +
|
|
386
|
+
'the authenticated SSE connection. The server always provides the correct token.',
|
|
343
387
|
},
|
|
344
388
|
},
|
|
345
389
|
required: ['resource_id', 'message', 'files'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-resource.js","sourceRoot":"","sources":["../../src/tools/upload-resource.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"upload-resource.js","sourceRoot":"","sources":["../../src/tools/upload-resource.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,4 +46,14 @@ export declare function getCursorTypeDir(resourceType: string): string;
|
|
|
46
46
|
* @param resourceName - Resource name (with or without extension)
|
|
47
47
|
*/
|
|
48
48
|
export declare function getCursorResourcePath(resourceType: string, resourceName: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Returns the path to the local AI resource telemetry file.
|
|
51
|
+
*
|
|
52
|
+
* Stored at the Cursor root level (not inside a resource-type subdirectory)
|
|
53
|
+
* so it persists independently of individual resource installs/uninstalls.
|
|
54
|
+
*
|
|
55
|
+
* macOS / Linux : ~/.cursor/ai-resource-telemetry.json
|
|
56
|
+
* Windows : %APPDATA%\Cursor\User\ai-resource-telemetry.json
|
|
57
|
+
*/
|
|
58
|
+
export declare function getTelemetryFilePath(): string;
|
|
49
59
|
//# sourceMappingURL=cursor-paths.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-paths.d.ts","sourceRoot":"","sources":["../../src/utils/cursor-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASnD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAQzC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAS7D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAExF"}
|
|
1
|
+
{"version":3,"file":"cursor-paths.d.ts","sourceRoot":"","sources":["../../src/utils/cursor-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASnD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAQzC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAS7D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAExF;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
|
|
@@ -47,6 +47,7 @@ exports.CURSOR_TYPE_DIRS = void 0;
|
|
|
47
47
|
exports.getCursorRootDir = getCursorRootDir;
|
|
48
48
|
exports.getCursorTypeDir = getCursorTypeDir;
|
|
49
49
|
exports.getCursorResourcePath = getCursorResourcePath;
|
|
50
|
+
exports.getTelemetryFilePath = getTelemetryFilePath;
|
|
50
51
|
const os = __importStar(require("os"));
|
|
51
52
|
const path = __importStar(require("path"));
|
|
52
53
|
/** Supported Cursor resource types and their directory names. */
|
|
@@ -113,4 +114,16 @@ function getCursorTypeDir(resourceType) {
|
|
|
113
114
|
function getCursorResourcePath(resourceType, resourceName) {
|
|
114
115
|
return path.join(getCursorTypeDir(resourceType), resourceName);
|
|
115
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Returns the path to the local AI resource telemetry file.
|
|
119
|
+
*
|
|
120
|
+
* Stored at the Cursor root level (not inside a resource-type subdirectory)
|
|
121
|
+
* so it persists independently of individual resource installs/uninstalls.
|
|
122
|
+
*
|
|
123
|
+
* macOS / Linux : ~/.cursor/ai-resource-telemetry.json
|
|
124
|
+
* Windows : %APPDATA%\Cursor\User\ai-resource-telemetry.json
|
|
125
|
+
*/
|
|
126
|
+
function getTelemetryFilePath() {
|
|
127
|
+
return path.join(getCursorRootDir(), 'ai-resource-telemetry.json');
|
|
128
|
+
}
|
|
116
129
|
//# sourceMappingURL=cursor-paths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-paths.js","sourceRoot":"","sources":["../../src/utils/cursor-paths.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBH,4CAQC;AAeD,4CASC;AAgBD,sDAEC;
|
|
1
|
+
{"version":3,"file":"cursor-paths.js","sourceRoot":"","sources":["../../src/utils/cursor-paths.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBH,4CAQC;AAeD,4CASC;AAgBD,sDAEC;AAWD,oDAEC;AApFD,uCAAyB;AACzB,2CAA6B;AAE7B,iEAAiE;AACpD,QAAA,gBAAgB,GAA2B;IACtD,KAAK,EAAI,QAAQ;IACjB,MAAM,EAAG,QAAQ;IACjB,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAC,UAAU;IACnB,IAAI,EAAK,OAAO;IAChB,KAAK,EAAI,OAAO;IAChB,GAAG,EAAM,aAAa;IACtB,aAAa,EAAE,aAAa;CAC7B,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,gBAAgB;IAC9B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,6EAA6E;QAC7E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IACD,qCAAqC;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,gBAAgB,CAAC,YAAoB;IACnD,MAAM,MAAM,GAAG,wBAAgB,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,0BAA0B,YAAY,KAAK;YAC3C,oBAAoB,MAAM,CAAC,IAAI,CAAC,wBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,qBAAqB,CAAC,YAAoB,EAAE,YAAoB;IAC9E,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,oBAAoB;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,4BAA4B,CAAC,CAAC;AACrE,CAAC"}
|
package/package.json
CHANGED
package/src/api/client.ts
CHANGED
|
@@ -33,9 +33,9 @@ class APIClient {
|
|
|
33
33
|
if (!requestConfig.headers.Authorization) {
|
|
34
34
|
return Promise.reject(
|
|
35
35
|
new Error(
|
|
36
|
-
'
|
|
37
|
-
'
|
|
38
|
-
'
|
|
36
|
+
'Authorization token is missing. ' +
|
|
37
|
+
'Ensure the MCP server is connected via SSE with a valid Bearer token in the Authorization header. ' +
|
|
38
|
+
'Check that your mcp.json has the correct "headers": {"Authorization": "Bearer <token>"} configured.'
|
|
39
39
|
)
|
|
40
40
|
);
|
|
41
41
|
}
|
|
@@ -614,6 +614,55 @@ class APIClient {
|
|
|
614
614
|
return resp.data;
|
|
615
615
|
}
|
|
616
616
|
|
|
617
|
+
/**
|
|
618
|
+
* Report AI resource usage telemetry to the server.
|
|
619
|
+
*
|
|
620
|
+
* POST /csp/api/resources/telemetry
|
|
621
|
+
* Body: { client_version, reported_at, events[], subscribed_rules[], configured_mcps[] }
|
|
622
|
+
*
|
|
623
|
+
* Called by TelemetryManager.flush() every ~10 seconds and on reconnect.
|
|
624
|
+
* Throws on non-2xx so the caller can apply retry logic.
|
|
625
|
+
*
|
|
626
|
+
* jira_id in each event entry is optional — it is only present when the user
|
|
627
|
+
* explicitly passed a Jira ID during the Prompt invocation.
|
|
628
|
+
*
|
|
629
|
+
* @param payload Telemetry report payload built by TelemetryManager
|
|
630
|
+
* @param userToken Per-request Bearer token from the caller's mcp.json configuration
|
|
631
|
+
*/
|
|
632
|
+
async reportTelemetry(
|
|
633
|
+
payload: {
|
|
634
|
+
client_version: string;
|
|
635
|
+
reported_at: string;
|
|
636
|
+
events: Array<{
|
|
637
|
+
resource_id: string;
|
|
638
|
+
resource_type: string;
|
|
639
|
+
resource_name: string;
|
|
640
|
+
invocation_count: number;
|
|
641
|
+
first_invoked_at: string;
|
|
642
|
+
last_invoked_at: string;
|
|
643
|
+
/** Optional Jira Issue ID (e.g. "PROJ-12345"). Absent when not provided. */
|
|
644
|
+
jira_id?: string;
|
|
645
|
+
}>;
|
|
646
|
+
subscribed_rules: Array<{
|
|
647
|
+
resource_id: string;
|
|
648
|
+
resource_name: string;
|
|
649
|
+
subscribed_at: string;
|
|
650
|
+
}>;
|
|
651
|
+
configured_mcps: Array<{
|
|
652
|
+
resource_id: string;
|
|
653
|
+
resource_name: string;
|
|
654
|
+
configured_at: string;
|
|
655
|
+
}>;
|
|
656
|
+
},
|
|
657
|
+
userToken: string
|
|
658
|
+
): Promise<void> {
|
|
659
|
+
await this.post<{ code: number; result: string; data: unknown }>(
|
|
660
|
+
'/csp/api/resources/telemetry',
|
|
661
|
+
payload,
|
|
662
|
+
this.authConfig(userToken)
|
|
663
|
+
);
|
|
664
|
+
}
|
|
665
|
+
|
|
617
666
|
/**
|
|
618
667
|
* @deprecated Use uploadResourceFiles() + finalizeResourceUpload() instead.
|
|
619
668
|
*/
|
package/src/auth/permissions.ts
CHANGED
|
@@ -69,6 +69,12 @@ const defaultPermissions: ToolPermission[] = [
|
|
|
69
69
|
allowedGroups: ['*'],
|
|
70
70
|
requiredPermission: PermissionLevel.WRITE,
|
|
71
71
|
},
|
|
72
|
+
// track_usage - internal telemetry tool, always allowed for all authenticated users
|
|
73
|
+
{
|
|
74
|
+
tool: 'track_usage',
|
|
75
|
+
allowedGroups: ['*'],
|
|
76
|
+
requiredPermission: PermissionLevel.WRITE,
|
|
77
|
+
},
|
|
72
78
|
];
|
|
73
79
|
|
|
74
80
|
/**
|
package/src/config/index.ts
CHANGED
|
@@ -46,6 +46,12 @@ export interface Config {
|
|
|
46
46
|
http?: {
|
|
47
47
|
host: string;
|
|
48
48
|
port: number;
|
|
49
|
+
/** URL path prefix when the server runs behind a reverse proxy sub-path.
|
|
50
|
+
* e.g. HTTP_BASE_PATH=/csp-agent → SSE at /csp-agent/sse
|
|
51
|
+
* → messages POST to /csp-agent/message
|
|
52
|
+
* Leave empty (default) for direct / root-path deployments.
|
|
53
|
+
*/
|
|
54
|
+
basePath: string;
|
|
49
55
|
};
|
|
50
56
|
|
|
51
57
|
// Session (for SSE transport)
|
|
@@ -56,7 +62,10 @@ export interface Config {
|
|
|
56
62
|
// CSP API
|
|
57
63
|
csp: {
|
|
58
64
|
apiBaseUrl: string;
|
|
59
|
-
|
|
65
|
+
// NOTE: No apiToken here. The user token comes from mcp.json env.CSP_API_TOKEN,
|
|
66
|
+
// which Cursor injects into the process environment at startup. Each tool call
|
|
67
|
+
// receives it via the user_token argument; telemetry reads process.env.CSP_API_TOKEN
|
|
68
|
+
// directly. Storing it in config would encourage incorrect singleton-token patterns.
|
|
60
69
|
timeout: number;
|
|
61
70
|
};
|
|
62
71
|
|
|
@@ -140,9 +149,6 @@ export function loadConfig(): Config {
|
|
|
140
149
|
const logLevel = (process.env.LOG_LEVEL || 'info') as Config['logLevel'];
|
|
141
150
|
const transportMode = (process.env.TRANSPORT_MODE || 'stdio') as 'stdio' | 'sse';
|
|
142
151
|
|
|
143
|
-
// Debug: Log CSP_API_TOKEN to verify it was loaded
|
|
144
|
-
console.log(`🔑 CSP_API_TOKEN from env: ${process.env.CSP_API_TOKEN ? process.env.CSP_API_TOKEN.substring(0, 20) + '...' : 'NOT SET'}`);
|
|
145
|
-
|
|
146
152
|
return {
|
|
147
153
|
nodeEnv,
|
|
148
154
|
port: getEnvNumber('PORT', 5090),
|
|
@@ -155,6 +161,7 @@ export function loadConfig(): Config {
|
|
|
155
161
|
http: transportMode === 'sse' ? {
|
|
156
162
|
host: getEnv('HTTP_HOST', '0.0.0.0'),
|
|
157
163
|
port: getEnvNumber('HTTP_PORT', 3000),
|
|
164
|
+
basePath: getEnv('HTTP_BASE_PATH', ''),
|
|
158
165
|
} : undefined,
|
|
159
166
|
|
|
160
167
|
session: transportMode === 'sse' ? {
|
|
@@ -163,7 +170,6 @@ export function loadConfig(): Config {
|
|
|
163
170
|
|
|
164
171
|
csp: {
|
|
165
172
|
apiBaseUrl: getEnv('CSP_API_BASE_URL', 'https://csp.example.com'),
|
|
166
|
-
apiToken: getEnv('CSP_API_TOKEN', 'test-token-12345'),
|
|
167
173
|
timeout: getEnvNumber('CSP_API_TIMEOUT', 30000),
|
|
168
174
|
},
|
|
169
175
|
|
package/src/index.ts
CHANGED
|
@@ -10,6 +10,8 @@ import { startLogCleanupSchedule, stopLogCleanupSchedule } from './utils/log-cle
|
|
|
10
10
|
import { startServer, stopServer } from './server';
|
|
11
11
|
import { stopCacheCleanup } from './auth/token-validator';
|
|
12
12
|
import { sessionManager } from './session/manager';
|
|
13
|
+
import { telemetry } from './telemetry/index.js';
|
|
14
|
+
import { apiClient } from './api/client.js';
|
|
13
15
|
|
|
14
16
|
// Global error handlers
|
|
15
17
|
process.on('uncaughtException', (error: Error) => {
|
|
@@ -52,11 +54,21 @@ async function main() {
|
|
|
52
54
|
// Start log cleanup scheduler
|
|
53
55
|
const cleanupTimer = startLogCleanupSchedule();
|
|
54
56
|
|
|
57
|
+
// Wire up telemetry reporting (inject API client to avoid circular import)
|
|
58
|
+
telemetry.configure(
|
|
59
|
+
(payload, token) => apiClient.reportTelemetry(payload, token),
|
|
60
|
+
() => process.env.CSP_API_TOKEN
|
|
61
|
+
);
|
|
62
|
+
|
|
55
63
|
try {
|
|
56
64
|
// Start MCP Server
|
|
57
65
|
await startServer();
|
|
58
66
|
|
|
59
67
|
logger.info({ port: config.port }, `✅ CSP AI Agent MCP Server started successfully`);
|
|
68
|
+
|
|
69
|
+
// Start periodic telemetry flush (every 10 seconds)
|
|
70
|
+
telemetry.startPeriodicFlush(10_000);
|
|
71
|
+
logger.info('Telemetry flush scheduler started (interval: 10s)');
|
|
60
72
|
} catch (error) {
|
|
61
73
|
logger.error({ error }, 'Failed to start server');
|
|
62
74
|
stopLogCleanupSchedule(cleanupTimer);
|
|
@@ -110,6 +122,12 @@ async function main() {
|
|
|
110
122
|
stopCacheCleanup();
|
|
111
123
|
logger.info('Token cache cleanup stopped');
|
|
112
124
|
|
|
125
|
+
// Stop telemetry scheduler and perform final flush
|
|
126
|
+
telemetry.stopPeriodicFlush();
|
|
127
|
+
logger.info('Telemetry scheduler stopped, performing final flush...');
|
|
128
|
+
await telemetry.flush();
|
|
129
|
+
logger.info('Final telemetry flush completed');
|
|
130
|
+
|
|
113
131
|
// Phase 4: Flush logs
|
|
114
132
|
logger.info('Phase 4: Flushing logs...');
|
|
115
133
|
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PromptCache: manages the .prompt-cache/ directory inside the MCP Server's
|
|
3
|
+
* runtime working directory.
|
|
4
|
+
*
|
|
5
|
+
* Cache files hold the fully-expanded Prompt content for each Command/Skill
|
|
6
|
+
* resource so that the MCP Prompt handler can serve them without re-generating
|
|
7
|
+
* on every invocation.
|
|
8
|
+
*
|
|
9
|
+
* The cache directory is intentionally NOT committed to Git — it is regenerated
|
|
10
|
+
* from the canonical source files after every git pull or resource upload.
|
|
11
|
+
*
|
|
12
|
+
* File naming: {type}-{resource_id}.md
|
|
13
|
+
* e.g. cmd-client-sdk-generate-testcase.md
|
|
14
|
+
* skill-client-sdk-analyze-sdk-log.md
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import * as fs from 'fs';
|
|
18
|
+
import * as path from 'path';
|
|
19
|
+
import { logger } from '../utils/logger.js';
|
|
20
|
+
|
|
21
|
+
/** Relative directory name inside the MCP Server CWD for cached Prompt files. */
|
|
22
|
+
const CACHE_DIR_NAME = '.prompt-cache';
|
|
23
|
+
|
|
24
|
+
export class PromptCache {
|
|
25
|
+
private readonly cacheDir: string;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @param baseDir Absolute base directory (defaults to process.cwd()).
|
|
29
|
+
*/
|
|
30
|
+
constructor(baseDir: string = process.cwd()) {
|
|
31
|
+
this.cacheDir = path.join(baseDir, CACHE_DIR_NAME);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Absolute path to the cache directory. */
|
|
35
|
+
get directory(): string {
|
|
36
|
+
return this.cacheDir;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Ensure the cache directory exists (idempotent). */
|
|
40
|
+
ensureDir(): void {
|
|
41
|
+
fs.mkdirSync(this.cacheDir, { recursive: true });
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Derive the cache file name for a resource.
|
|
46
|
+
* @param resourceType 'command' | 'skill'
|
|
47
|
+
* @param resourceId Canonical resource ID
|
|
48
|
+
*/
|
|
49
|
+
private cacheFileName(resourceType: string, resourceId: string): string {
|
|
50
|
+
// Normalise type prefix: 'command' → 'cmd', 'skill' → 'skill'
|
|
51
|
+
const prefix = resourceType === 'command' ? 'cmd' : resourceType;
|
|
52
|
+
// Sanitise resourceId — remove characters unsafe in filenames.
|
|
53
|
+
const safeId = resourceId.replace(/[/\\:*?"<>|]/g, '-');
|
|
54
|
+
return `${prefix}-${safeId}.md`;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Absolute path to the cache file for a given resource. */
|
|
58
|
+
cachePath(resourceType: string, resourceId: string): string {
|
|
59
|
+
return path.join(this.cacheDir, this.cacheFileName(resourceType, resourceId));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Write (or overwrite) a resource's Prompt content to the cache.
|
|
64
|
+
* Uses atomic write-then-rename to prevent partial reads.
|
|
65
|
+
*
|
|
66
|
+
* @param resourceType 'command' | 'skill'
|
|
67
|
+
* @param resourceId Canonical resource ID
|
|
68
|
+
* @param content Fully-expanded Prompt Markdown content
|
|
69
|
+
*/
|
|
70
|
+
write(resourceType: string, resourceId: string, content: string): void {
|
|
71
|
+
this.ensureDir();
|
|
72
|
+
const dest = this.cachePath(resourceType, resourceId);
|
|
73
|
+
const tmp = `${dest}.${process.pid}.tmp`;
|
|
74
|
+
try {
|
|
75
|
+
fs.writeFileSync(tmp, content, 'utf8');
|
|
76
|
+
fs.renameSync(tmp, dest);
|
|
77
|
+
logger.debug(
|
|
78
|
+
{ resourceId, resourceType, path: dest },
|
|
79
|
+
'Prompt cache written',
|
|
80
|
+
);
|
|
81
|
+
} catch (err) {
|
|
82
|
+
// Best-effort cleanup of temp file
|
|
83
|
+
try { fs.unlinkSync(tmp); } catch { /* ignore */ }
|
|
84
|
+
throw new Error(
|
|
85
|
+
`Failed to write prompt cache for ${resourceId}: ${(err as Error).message}`,
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Read the cached Prompt content for a resource.
|
|
92
|
+
* Returns null if the cache file does not exist or cannot be read.
|
|
93
|
+
*
|
|
94
|
+
* @param resourceType 'command' | 'skill'
|
|
95
|
+
* @param resourceId Canonical resource ID
|
|
96
|
+
*/
|
|
97
|
+
read(resourceType: string, resourceId: string): string | null {
|
|
98
|
+
const p = this.cachePath(resourceType, resourceId);
|
|
99
|
+
try {
|
|
100
|
+
return fs.readFileSync(p, 'utf8');
|
|
101
|
+
} catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Delete the cache file for a resource.
|
|
108
|
+
* Silently succeeds if the file does not exist.
|
|
109
|
+
*
|
|
110
|
+
* @param resourceType 'command' | 'skill'
|
|
111
|
+
* @param resourceId Canonical resource ID
|
|
112
|
+
*/
|
|
113
|
+
delete(resourceType: string, resourceId: string): void {
|
|
114
|
+
const p = this.cachePath(resourceType, resourceId);
|
|
115
|
+
try {
|
|
116
|
+
fs.unlinkSync(p);
|
|
117
|
+
logger.debug({ resourceId, resourceType }, 'Prompt cache deleted');
|
|
118
|
+
} catch (err: unknown) {
|
|
119
|
+
if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {
|
|
120
|
+
logger.warn(
|
|
121
|
+
{ resourceId, error: (err as Error).message },
|
|
122
|
+
'Failed to delete prompt cache file',
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Check whether a valid cache entry exists for a resource.
|
|
130
|
+
*
|
|
131
|
+
* @param resourceType 'command' | 'skill'
|
|
132
|
+
* @param resourceId Canonical resource ID
|
|
133
|
+
*/
|
|
134
|
+
exists(resourceType: string, resourceId: string): boolean {
|
|
135
|
+
return fs.existsSync(this.cachePath(resourceType, resourceId));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** Singleton cache instance using the process CWD as the base directory. */
|
|
140
|
+
export const promptCache = new PromptCache();
|