@elliotding/ai-agent-mcp 0.1.2 → 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 +76 -8
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +86 -40
- 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 +4 -0
- package/dist/tools/manage-subscription.d.ts.map +1 -1
- package/dist/tools/manage-subscription.js +36 -7
- package/dist/tools/manage-subscription.js.map +1 -1
- package/dist/tools/search-resources.d.ts +4 -0
- package/dist/tools/search-resources.d.ts.map +1 -1
- package/dist/tools/search-resources.js +6 -1
- package/dist/tools/search-resources.js.map +1 -1
- package/dist/tools/sync-resources.d.ts +13 -4
- package/dist/tools/sync-resources.d.ts.map +1 -1
- package/dist/tools/sync-resources.js +127 -6
- 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 +4 -0
- package/dist/tools/upload-resource.d.ts.map +1 -1
- package/dist/tools/upload-resource.js +164 -23
- package/dist/tools/upload-resource.js.map +1 -1
- package/dist/types/tools.d.ts +17 -2
- package/dist/types/tools.d.ts.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 +191 -71
- 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 +41 -7
- package/src/tools/search-resources.ts +14 -6
- package/src/tools/sync-resources.ts +141 -9
- package/src/tools/track-usage.ts +113 -0
- package/src/tools/uninstall-resource.ts +62 -4
- package/src/tools/upload-resource.ts +204 -31
- package/src/types/tools.ts +17 -2
- package/src/utils/cursor-paths.ts +13 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* track_usage Tool
|
|
3
|
+
*
|
|
4
|
+
* Records an AI Resource invocation for telemetry purposes.
|
|
5
|
+
*
|
|
6
|
+
* This tool is automatically invoked by the AI at the start of every
|
|
7
|
+
* Command or Skill execution. The Prompt content generated by
|
|
8
|
+
* PromptGenerator prepends a system instruction that asks the AI to
|
|
9
|
+
* call `track_usage` before doing anything else, so that the server
|
|
10
|
+
* can record the usage even though Cursor does not call `prompts/get`
|
|
11
|
+
* when a slash command is selected.
|
|
12
|
+
*
|
|
13
|
+
* The tool is intentionally lightweight:
|
|
14
|
+
* - No external API calls.
|
|
15
|
+
* - Fire-and-forget write to the local telemetry file.
|
|
16
|
+
* - Always returns a success response so the AI continues normally.
|
|
17
|
+
*/
|
|
18
|
+
import type { ToolResult } from '../types/tools';
|
|
19
|
+
export interface TrackUsageParams {
|
|
20
|
+
resource_id: string;
|
|
21
|
+
resource_type: 'command' | 'skill';
|
|
22
|
+
resource_name: string;
|
|
23
|
+
/** Automatically injected by the MCP server from the SSE token. */
|
|
24
|
+
user_token?: string;
|
|
25
|
+
/** Optional Jira Issue ID for usage correlation (e.g. "PROJ-12345"). */
|
|
26
|
+
jira_id?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function trackUsage(params: unknown): Promise<ToolResult<{
|
|
29
|
+
recorded: boolean;
|
|
30
|
+
}>>;
|
|
31
|
+
export declare const trackUsageTool: {
|
|
32
|
+
name: string;
|
|
33
|
+
description: string;
|
|
34
|
+
inputSchema: {
|
|
35
|
+
type: "object";
|
|
36
|
+
properties: {
|
|
37
|
+
resource_id: {
|
|
38
|
+
type: string;
|
|
39
|
+
description: string;
|
|
40
|
+
};
|
|
41
|
+
resource_type: {
|
|
42
|
+
type: string;
|
|
43
|
+
enum: string[];
|
|
44
|
+
description: string;
|
|
45
|
+
};
|
|
46
|
+
resource_name: {
|
|
47
|
+
type: string;
|
|
48
|
+
description: string;
|
|
49
|
+
};
|
|
50
|
+
user_token: {
|
|
51
|
+
type: string;
|
|
52
|
+
description: string;
|
|
53
|
+
};
|
|
54
|
+
jira_id: {
|
|
55
|
+
type: string;
|
|
56
|
+
description: string;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
required: string[];
|
|
60
|
+
};
|
|
61
|
+
handler: typeof trackUsage;
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=track-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-usage.d.ts","sourceRoot":"","sources":["../../src/tools/track-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,SAAS,GAAG,OAAO,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAoC5F;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0C1B,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* track_usage Tool
|
|
4
|
+
*
|
|
5
|
+
* Records an AI Resource invocation for telemetry purposes.
|
|
6
|
+
*
|
|
7
|
+
* This tool is automatically invoked by the AI at the start of every
|
|
8
|
+
* Command or Skill execution. The Prompt content generated by
|
|
9
|
+
* PromptGenerator prepends a system instruction that asks the AI to
|
|
10
|
+
* call `track_usage` before doing anything else, so that the server
|
|
11
|
+
* can record the usage even though Cursor does not call `prompts/get`
|
|
12
|
+
* when a slash command is selected.
|
|
13
|
+
*
|
|
14
|
+
* The tool is intentionally lightweight:
|
|
15
|
+
* - No external API calls.
|
|
16
|
+
* - Fire-and-forget write to the local telemetry file.
|
|
17
|
+
* - Always returns a success response so the AI continues normally.
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.trackUsageTool = void 0;
|
|
21
|
+
exports.trackUsage = trackUsage;
|
|
22
|
+
const logger_1 = require("../utils/logger");
|
|
23
|
+
const index_js_1 = require("../telemetry/index.js");
|
|
24
|
+
async function trackUsage(params) {
|
|
25
|
+
const p = params;
|
|
26
|
+
const resourceId = p.resource_id ?? '';
|
|
27
|
+
const resourceType = p.resource_type ?? 'command';
|
|
28
|
+
const resourceName = p.resource_name ?? '';
|
|
29
|
+
const userToken = p.user_token ?? '';
|
|
30
|
+
const jiraId = typeof p.jira_id === 'string' && p.jira_id.trim() !== ''
|
|
31
|
+
? p.jira_id.trim()
|
|
32
|
+
: undefined;
|
|
33
|
+
if (!resourceId || !userToken) {
|
|
34
|
+
// Missing required fields — log and return without recording so the AI
|
|
35
|
+
// is not blocked. This should not happen in normal operation.
|
|
36
|
+
logger_1.logger.warn({ resourceId, userToken: !!userToken }, 'track_usage called with missing resource_id or user_token — skipping');
|
|
37
|
+
return { success: true, data: { recorded: false } };
|
|
38
|
+
}
|
|
39
|
+
// Await the write to ensure the event is persisted before the periodic flush
|
|
40
|
+
// timer fires and clears pending_events. File write latency is negligible
|
|
41
|
+
// (< 1 ms) so this does not meaningfully delay the tool response.
|
|
42
|
+
await index_js_1.telemetry
|
|
43
|
+
.recordInvocation(resourceId, resourceType, resourceName, userToken, jiraId)
|
|
44
|
+
.catch((err) => {
|
|
45
|
+
logger_1.logger.warn({ resourceId, error: err.message }, 'track_usage: telemetry write failed (non-critical)');
|
|
46
|
+
});
|
|
47
|
+
logger_1.logger.info({ resourceId, resourceType, resourceName, jiraId: jiraId ?? '(none)' }, 'track_usage: invocation recorded');
|
|
48
|
+
return { success: true, data: { recorded: true } };
|
|
49
|
+
}
|
|
50
|
+
exports.trackUsageTool = {
|
|
51
|
+
name: 'track_usage',
|
|
52
|
+
description: 'Record the invocation of an AI Resource (Command or Skill) for telemetry. ' +
|
|
53
|
+
'MUST be called at the very beginning of every Command or Skill execution, ' +
|
|
54
|
+
'before performing any other action. ' +
|
|
55
|
+
'The resource_id, resource_type, and resource_name are provided in the prompt header — ' +
|
|
56
|
+
'copy them exactly as given. ' +
|
|
57
|
+
'user_token is injected automatically by the server; do NOT ask the user for it. ' +
|
|
58
|
+
'jira_id is optional — only include it if the user explicitly mentions a Jira issue number.',
|
|
59
|
+
inputSchema: {
|
|
60
|
+
type: 'object',
|
|
61
|
+
properties: {
|
|
62
|
+
resource_id: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
description: 'Canonical resource ID as shown in the prompt header (e.g. "cmd-client-sdk-ai-hub-generate-testcase").',
|
|
65
|
+
},
|
|
66
|
+
resource_type: {
|
|
67
|
+
type: 'string',
|
|
68
|
+
enum: ['command', 'skill'],
|
|
69
|
+
description: 'Resource type: "command" or "skill".',
|
|
70
|
+
},
|
|
71
|
+
resource_name: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'Human-readable resource name as shown in the prompt header (e.g. "generate-testcase").',
|
|
74
|
+
},
|
|
75
|
+
user_token: {
|
|
76
|
+
type: 'string',
|
|
77
|
+
description: 'DO NOT set this field — it is automatically injected by the MCP server from ' +
|
|
78
|
+
'the authenticated SSE connection.',
|
|
79
|
+
},
|
|
80
|
+
jira_id: {
|
|
81
|
+
type: 'string',
|
|
82
|
+
description: 'Optional Jira Issue ID for usage correlation (e.g. "PROJ-12345"). ' +
|
|
83
|
+
'Only include if the user explicitly mentioned a Jira issue in this conversation.',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
required: ['resource_id', 'resource_type', 'resource_name'],
|
|
87
|
+
},
|
|
88
|
+
handler: trackUsage,
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=track-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-usage.js","sourceRoot":"","sources":["../../src/tools/track-usage.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AAgBH,gCAoCC;AAlDD,4CAAyC;AACzC,oDAAkD;AAa3C,KAAK,UAAU,UAAU,CAAC,MAAe;IAC9C,MAAM,CAAC,GAAG,MAA0B,CAAC;IAErC,MAAM,UAAU,GAAK,CAAC,CAAC,WAAW,IAAM,EAAE,CAAC;IAC3C,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,IAAI,SAAS,CAAC;IAClD,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAM,CAAC,CAAC,UAAU,IAAO,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAS,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;QAC3E,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE;QAClB,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,uEAAuE;QACvE,+DAA+D;QAC/D,eAAM,CAAC,IAAI,CACT,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,EACtC,sEAAsE,CACvE,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;IACtD,CAAC;IAED,6EAA6E;IAC7E,2EAA2E;IAC3E,kEAAkE;IAClE,MAAM,oBAAS;SACZ,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC;SAC3E,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,eAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,EAAE,oDAAoD,CAAC,CAAC;IACnH,CAAC,CAAC,CAAC;IAEL,eAAM,CAAC,IAAI,CACT,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,QAAQ,EAAE,EACtE,kCAAkC,CACnC,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;AACrD,CAAC;AAEY,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,4EAA4E;QAC5E,4EAA4E;QAC5E,sCAAsC;QACtC,wFAAwF;QACxF,8BAA8B;QAC9B,kFAAkF;QAClF,4FAA4F;IAC9F,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uGAAuG;aACrH;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;gBAC1B,WAAW,EAAE,sCAAsC;aACpD;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wFAAwF;aACtG;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,8EAA8E;oBAC9E,mCAAmC;aACtC;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,oEAAoE;oBACpE,kFAAkF;aACrF;SACF;QACD,QAAQ,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,eAAe,CAAC;KAC5D;IACD,OAAO,EAAE,UAAU;CACpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall-resource.d.ts","sourceRoot":"","sources":["../../src/tools/uninstall-resource.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EAA2B,uBAAuB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"uninstall-resource.d.ts","sourceRoot":"","sources":["../../src/tools/uninstall-resource.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EAA2B,uBAAuB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA2GnG,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,CA4JrG;AAGD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;CAuBjC,CAAC"}
|
|
@@ -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,12 +54,86 @@ 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
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Infer the resource type from the uploaded file list ONLY when the user has
|
|
75
|
+
* not explicitly stated a type. If the user declared a type, that always wins.
|
|
76
|
+
*
|
|
77
|
+
* Auto-detection rules (in priority order, applied only when declaredType is absent):
|
|
78
|
+
* 1. Any file named "mcp-config.json" → mcp
|
|
79
|
+
* 2. Any file named "SKILL.md" → skill
|
|
80
|
+
* 3. Single file ending with ".mdc" → rule
|
|
81
|
+
* 4. Single file ending with ".md" → command
|
|
82
|
+
* 5. Cannot determine → throw validation error
|
|
83
|
+
*/
|
|
84
|
+
function inferResourceType(declaredType, files) {
|
|
85
|
+
// User explicitly specified the type — honour it unconditionally.
|
|
86
|
+
if (declaredType)
|
|
87
|
+
return declaredType;
|
|
88
|
+
const names = files.map((f) => path.basename(f.path).toLowerCase());
|
|
89
|
+
if (names.includes('mcp-config.json'))
|
|
90
|
+
return 'mcp';
|
|
91
|
+
if (names.includes('skill.md'))
|
|
92
|
+
return 'skill';
|
|
93
|
+
if (files.length === 1) {
|
|
94
|
+
if (names[0].endsWith('.mdc'))
|
|
95
|
+
return 'rule';
|
|
96
|
+
if (names[0].endsWith('.md'))
|
|
97
|
+
return 'command';
|
|
98
|
+
}
|
|
99
|
+
throw (0, errors_1.createValidationError)('type', 'required', 'Cannot auto-detect the resource type from the provided files. ' +
|
|
100
|
+
'Please specify "type" explicitly: "command" (single .md), "skill" (contains SKILL.md), ' +
|
|
101
|
+
'"rule" (single .mdc), or "mcp" (contains mcp-config.json).');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Derive a human-readable resource name from the primary file in the upload list.
|
|
105
|
+
* The original filename (without extension) is used as-is — never renamed.
|
|
106
|
+
*
|
|
107
|
+
* - Single-file upload: strip extension from the filename.
|
|
108
|
+
* "code-review.md" → "code-review"
|
|
109
|
+
* "csp-agent.mdc" → "csp-agent"
|
|
110
|
+
* - Multi-file upload: use the top-level directory name when the first
|
|
111
|
+
* path contains a directory component.
|
|
112
|
+
* "code-review/SKILL.md" → "code-review"
|
|
113
|
+
* Falls back to the first file's base name otherwise.
|
|
114
|
+
*
|
|
115
|
+
* Returns undefined when the files array is empty (caller should error).
|
|
116
|
+
*/
|
|
117
|
+
function deriveNameFromFiles(files) {
|
|
118
|
+
if (!files || files.length === 0)
|
|
119
|
+
return undefined;
|
|
120
|
+
const first = files[0].path;
|
|
121
|
+
// For paths like "code-review/SKILL.md", use the top-level directory.
|
|
122
|
+
const dir = path.dirname(first);
|
|
123
|
+
if (dir && dir !== '.')
|
|
124
|
+
return dir;
|
|
125
|
+
// Strip extension from bare filename.
|
|
126
|
+
const base = path.basename(first, path.extname(first));
|
|
127
|
+
return base || undefined;
|
|
128
|
+
}
|
|
57
129
|
/**
|
|
58
130
|
* Validate and return the files[] array.
|
|
59
131
|
* Each entry path must be a relative path with no traversal.
|
|
60
132
|
* For MCP resources, mcp-config.json must be present.
|
|
133
|
+
*
|
|
134
|
+
* @param resolvedType The already-inferred resource type (never undefined here).
|
|
61
135
|
*/
|
|
62
|
-
function collectFiles(typedParams) {
|
|
136
|
+
function collectFiles(typedParams, resolvedType) {
|
|
63
137
|
if (!typedParams.files || typedParams.files.length === 0) {
|
|
64
138
|
throw (0, errors_1.createValidationError)('files', 'required', '"files" must be a non-empty array of {path, content} entries.');
|
|
65
139
|
}
|
|
@@ -71,12 +145,24 @@ function collectFiles(typedParams) {
|
|
|
71
145
|
}
|
|
72
146
|
// MCP resources must include mcp-config.json so the client can auto-register
|
|
73
147
|
// the server in ~/.cursor/mcp.json after sync_resources installs it.
|
|
74
|
-
if (
|
|
148
|
+
if (resolvedType === 'mcp') {
|
|
75
149
|
const hasMcpConfig = typedParams.files.some((f) => path.basename(f.path) === 'mcp-config.json');
|
|
76
150
|
if (!hasMcpConfig) {
|
|
151
|
+
// Look for other files that might already describe the server configuration
|
|
152
|
+
// (e.g. pyproject.toml, package.json, README.md, config.json, server.py).
|
|
153
|
+
// If found, surface a targeted hint so the user knows exactly what to create.
|
|
154
|
+
const configHints = typedParams.files
|
|
155
|
+
.map((f) => path.basename(f.path))
|
|
156
|
+
.filter((n) => /\.(toml|yaml|yml|json|cfg|ini|conf|py|js|ts|md)$/i.test(n) &&
|
|
157
|
+
n !== 'mcp-config.json');
|
|
158
|
+
const hintNote = configHints.length > 0
|
|
159
|
+
? `\nFound related files (${configHints.join(', ')}) that may already describe the server ` +
|
|
160
|
+
`configuration — please create "mcp-config.json" based on those files.`
|
|
161
|
+
: '';
|
|
77
162
|
throw (0, errors_1.createValidationError)('files', 'required', 'MCP resources must include a "mcp-config.json" file. ' +
|
|
78
|
-
'This file tells the client how to start the MCP server after installation.
|
|
79
|
-
|
|
163
|
+
'This file tells the client how to start the MCP server after installation.' +
|
|
164
|
+
hintNote +
|
|
165
|
+
'\n\nRequired format:\n' +
|
|
80
166
|
'{\n' +
|
|
81
167
|
' "name": "<server-name>",\n' +
|
|
82
168
|
' "command": "python3", // or "node", "uvx", etc.\n' +
|
|
@@ -92,11 +178,20 @@ async function uploadResource(params) {
|
|
|
92
178
|
const typedParams = params;
|
|
93
179
|
logger_1.logger.info({ tool: 'upload_resource', params }, 'upload_resource called');
|
|
94
180
|
try {
|
|
95
|
-
const resourceType = typedParams.type;
|
|
96
181
|
const resourceId = typedParams.resource_id;
|
|
97
|
-
const
|
|
98
|
-
const targetSource = typedParams.target_source ?? 'csp';
|
|
182
|
+
const userToken = typedParams.user_token;
|
|
183
|
+
const targetSource = typedParams.target_source ?? 'csp';
|
|
99
184
|
const force = typedParams.force || false;
|
|
185
|
+
// User-declared type always wins; auto-detect only when omitted.
|
|
186
|
+
const resourceType = inferResourceType(typedParams.type, typedParams.files);
|
|
187
|
+
// Name: explicit user value > derived from filename (no extension).
|
|
188
|
+
// Never fall back to resource_id — that is an internal identifier, not a name.
|
|
189
|
+
const derivedName = typedParams.name ?? deriveNameFromFiles(typedParams.files);
|
|
190
|
+
if (!derivedName) {
|
|
191
|
+
throw (0, errors_1.createValidationError)('name', 'required', 'Could not determine a resource name from the provided files. ' +
|
|
192
|
+
'Please provide a "name" field explicitly.');
|
|
193
|
+
}
|
|
194
|
+
const resourceName = derivedName;
|
|
100
195
|
logger_1.logger.info({ resourceId, resourceType, targetSource }, 'Upload target resolved');
|
|
101
196
|
// ========== Step 1: Duplicate-name check ==========
|
|
102
197
|
try {
|
|
@@ -130,7 +225,7 @@ async function uploadResource(params) {
|
|
|
130
225
|
throw (0, errors_1.createValidationError)('message', 'string', `Commit message must be 5-200 characters, got ${typedParams.message.length}`);
|
|
131
226
|
}
|
|
132
227
|
// ========== Step 4: Collect files ==========
|
|
133
|
-
const fileEntries = collectFiles(typedParams);
|
|
228
|
+
const fileEntries = collectFiles(typedParams, resourceType);
|
|
134
229
|
logger_1.logger.info({ resourceId, fileCount: fileEntries.length }, 'Files collected for upload');
|
|
135
230
|
// ========== Step 5: Call CSP API — upload (staging) ==========
|
|
136
231
|
logger_1.logger.info({ resourceName, resourceType, targetSource }, 'Calling CSP upload API...');
|
|
@@ -140,17 +235,47 @@ async function uploadResource(params) {
|
|
|
140
235
|
files: fileEntries,
|
|
141
236
|
target_source: targetSource,
|
|
142
237
|
force,
|
|
143
|
-
});
|
|
238
|
+
}, userToken);
|
|
144
239
|
const uploadId = uploadResp.upload_id;
|
|
145
240
|
logger_1.logger.info({ uploadId, expiresAt: uploadResp.expires_at }, 'Upload staged successfully');
|
|
146
241
|
// ========== Step 6: Call CSP API — finalize (Git commit) ==========
|
|
147
242
|
logger_1.logger.info({ uploadId }, 'Calling CSP finalize API...');
|
|
148
|
-
const finalizeResp = await client_1.apiClient.finalizeResourceUpload(uploadId, typedParams.message);
|
|
243
|
+
const finalizeResp = await client_1.apiClient.finalizeResourceUpload(uploadId, typedParams.message, userToken);
|
|
149
244
|
const finalResourceId = finalizeResp.resource_id;
|
|
150
245
|
const version = finalizeResp.version ?? '1.0.0';
|
|
151
246
|
const resourceUrl = finalizeResp.url ?? '';
|
|
152
247
|
const commitHash = finalizeResp.commit_hash ?? '';
|
|
153
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
|
+
}
|
|
154
279
|
const result = {
|
|
155
280
|
resource_id: finalResourceId,
|
|
156
281
|
version,
|
|
@@ -178,15 +303,26 @@ async function uploadResource(params) {
|
|
|
178
303
|
exports.uploadResourceTool = {
|
|
179
304
|
name: 'upload_resource',
|
|
180
305
|
description: 'Upload a new AI resource (command, skill, rule, or mcp) to a CSP source repository. ' +
|
|
181
|
-
'The user selects files from
|
|
182
|
-
'ALWAYS confirm
|
|
183
|
-
'
|
|
184
|
-
'
|
|
185
|
-
'
|
|
186
|
-
'
|
|
187
|
-
'
|
|
188
|
-
'
|
|
189
|
-
'
|
|
306
|
+
'The user selects files from their local machine — read each file and pass its content in files[]. ' +
|
|
307
|
+
'ALWAYS confirm the target source repo with the user (e.g. "csp" (default) or "client-sdk-ai-hub"). ' +
|
|
308
|
+
'\n\nResource type rules:\n' +
|
|
309
|
+
' • If the user explicitly states the type, use it as-is — no overriding.\n' +
|
|
310
|
+
' • If the user does NOT state a type, auto-detect from file structure:\n' +
|
|
311
|
+
' - Contains mcp-config.json → type="mcp"\n' +
|
|
312
|
+
' - Contains SKILL.md → type="skill"\n' +
|
|
313
|
+
' - Single .mdc file → type="rule"\n' +
|
|
314
|
+
' - Single .md file → type="command"\n' +
|
|
315
|
+
' • If the user says type="mcp" but mcp-config.json is missing, the tool will\n' +
|
|
316
|
+
' return an error with a hint about creating mcp-config.json.\n' +
|
|
317
|
+
'\n\nResource name rules:\n' +
|
|
318
|
+
' • If the user provides a name, use it.\n' +
|
|
319
|
+
' • Otherwise derive the name from the filename WITHOUT its extension.\n' +
|
|
320
|
+
' Keep the original filename — NEVER rename files (e.g. do not rename any .md file).\n' +
|
|
321
|
+
' Examples: "code-review.md" → name="code-review"; "code-review/SKILL.md" → name="code-review".\n' +
|
|
322
|
+
'\n\nPass files[] — an array of {path, content} entries. ' +
|
|
323
|
+
'path must be the original filename as-is (relative, no path traversal). ' +
|
|
324
|
+
'No restriction on file extensions — mcp packages may include .py, .js, package.json, etc.\n' +
|
|
325
|
+
'\nThe user_token is injected automatically by the server — do NOT read or pass it manually.',
|
|
190
326
|
inputSchema: {
|
|
191
327
|
type: 'object',
|
|
192
328
|
properties: {
|
|
@@ -201,11 +337,11 @@ exports.uploadResourceTool = {
|
|
|
201
337
|
type: {
|
|
202
338
|
type: 'string',
|
|
203
339
|
enum: ['command', 'skill', 'rule', 'mcp'],
|
|
204
|
-
description: 'Resource category —
|
|
340
|
+
description: 'Resource category. Auto-detected from file structure — only set explicitly when detection is ambiguous. ' +
|
|
205
341
|
'command: single .md slash-command file; ' +
|
|
206
|
-
'skill: directory
|
|
342
|
+
'skill: directory or file set containing SKILL.md; ' +
|
|
207
343
|
'rule: single .mdc Cursor rule file; ' +
|
|
208
|
-
'mcp: MCP server package — MUST include mcp-config.json
|
|
344
|
+
'mcp: MCP server package — MUST include mcp-config.json.',
|
|
209
345
|
},
|
|
210
346
|
message: {
|
|
211
347
|
type: 'string',
|
|
@@ -244,8 +380,13 @@ exports.uploadResourceTool = {
|
|
|
244
380
|
description: 'Overwrite if a resource with the same name already exists',
|
|
245
381
|
default: false,
|
|
246
382
|
},
|
|
383
|
+
user_token: {
|
|
384
|
+
type: 'string',
|
|
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.',
|
|
387
|
+
},
|
|
247
388
|
},
|
|
248
|
-
required: ['resource_id', '
|
|
389
|
+
required: ['resource_id', 'message', 'files'],
|
|
249
390
|
},
|
|
250
391
|
handler: uploadResource,
|
|
251
392
|
};
|
|
@@ -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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"}
|