@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.
Files changed (104) hide show
  1. package/.prompt-cache/cmd-cmd-client-sdk-ai-hub-generate-testcase.md +101 -0
  2. package/.prompt-cache/cmd-cmd-client-sdk-ai-hub-submit_zct_job.md +158 -0
  3. package/.prompt-cache/skill-skill-client-sdk-ai-hub-analyze-conf-status.md +311 -0
  4. package/.prompt-cache/skill-skill-client-sdk-ai-hub-analyze-sdk-log.md +64 -0
  5. package/.prompt-cache/skill-skill-client-sdk-ai-hub-analyze-zmb-log-errors.md +84 -0
  6. package/ai-resource-telemetry.json +22 -0
  7. package/dist/api/client.d.ts +76 -8
  8. package/dist/api/client.d.ts.map +1 -1
  9. package/dist/api/client.js +86 -40
  10. package/dist/api/client.js.map +1 -1
  11. package/dist/auth/permissions.d.ts.map +1 -1
  12. package/dist/auth/permissions.js +6 -0
  13. package/dist/auth/permissions.js.map +1 -1
  14. package/dist/config/index.d.ts +6 -1
  15. package/dist/config/index.d.ts.map +1 -1
  16. package/dist/config/index.js +1 -3
  17. package/dist/config/index.js.map +1 -1
  18. package/dist/index.js +12 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/prompts/cache.d.ts +69 -0
  21. package/dist/prompts/cache.d.ts.map +1 -0
  22. package/dist/prompts/cache.js +163 -0
  23. package/dist/prompts/cache.js.map +1 -0
  24. package/dist/prompts/generator.d.ts +49 -0
  25. package/dist/prompts/generator.d.ts.map +1 -0
  26. package/dist/prompts/generator.js +158 -0
  27. package/dist/prompts/generator.js.map +1 -0
  28. package/dist/prompts/index.d.ts +13 -0
  29. package/dist/prompts/index.d.ts.map +1 -0
  30. package/dist/prompts/index.js +24 -0
  31. package/dist/prompts/index.js.map +1 -0
  32. package/dist/prompts/manager.d.ts +106 -0
  33. package/dist/prompts/manager.d.ts.map +1 -0
  34. package/dist/prompts/manager.js +263 -0
  35. package/dist/prompts/manager.js.map +1 -0
  36. package/dist/server/http.d.ts.map +1 -1
  37. package/dist/server/http.js +61 -17
  38. package/dist/server/http.js.map +1 -1
  39. package/dist/server.d.ts.map +1 -1
  40. package/dist/server.js +43 -0
  41. package/dist/server.js.map +1 -1
  42. package/dist/telemetry/index.d.ts +3 -0
  43. package/dist/telemetry/index.d.ts.map +1 -0
  44. package/dist/telemetry/index.js +7 -0
  45. package/dist/telemetry/index.js.map +1 -0
  46. package/dist/telemetry/manager.d.ts +149 -0
  47. package/dist/telemetry/manager.d.ts.map +1 -0
  48. package/dist/telemetry/manager.js +368 -0
  49. package/dist/telemetry/manager.js.map +1 -0
  50. package/dist/tools/index.d.ts +1 -0
  51. package/dist/tools/index.d.ts.map +1 -1
  52. package/dist/tools/index.js +1 -0
  53. package/dist/tools/index.js.map +1 -1
  54. package/dist/tools/manage-subscription.d.ts +4 -0
  55. package/dist/tools/manage-subscription.d.ts.map +1 -1
  56. package/dist/tools/manage-subscription.js +36 -7
  57. package/dist/tools/manage-subscription.js.map +1 -1
  58. package/dist/tools/search-resources.d.ts +4 -0
  59. package/dist/tools/search-resources.d.ts.map +1 -1
  60. package/dist/tools/search-resources.js +6 -1
  61. package/dist/tools/search-resources.js.map +1 -1
  62. package/dist/tools/sync-resources.d.ts +13 -4
  63. package/dist/tools/sync-resources.d.ts.map +1 -1
  64. package/dist/tools/sync-resources.js +127 -6
  65. package/dist/tools/sync-resources.js.map +1 -1
  66. package/dist/tools/track-usage.d.ts +63 -0
  67. package/dist/tools/track-usage.d.ts.map +1 -0
  68. package/dist/tools/track-usage.js +90 -0
  69. package/dist/tools/track-usage.js.map +1 -0
  70. package/dist/tools/uninstall-resource.d.ts.map +1 -1
  71. package/dist/tools/uninstall-resource.js +53 -3
  72. package/dist/tools/uninstall-resource.js.map +1 -1
  73. package/dist/tools/upload-resource.d.ts +4 -0
  74. package/dist/tools/upload-resource.d.ts.map +1 -1
  75. package/dist/tools/upload-resource.js +164 -23
  76. package/dist/tools/upload-resource.js.map +1 -1
  77. package/dist/types/tools.d.ts +17 -2
  78. package/dist/types/tools.d.ts.map +1 -1
  79. package/dist/utils/cursor-paths.d.ts +10 -0
  80. package/dist/utils/cursor-paths.d.ts.map +1 -1
  81. package/dist/utils/cursor-paths.js +13 -0
  82. package/dist/utils/cursor-paths.js.map +1 -1
  83. package/package.json +1 -1
  84. package/src/api/client.ts +191 -71
  85. package/src/auth/permissions.ts +6 -0
  86. package/src/config/index.ts +11 -5
  87. package/src/index.ts +18 -0
  88. package/src/prompts/cache.ts +140 -0
  89. package/src/prompts/generator.ts +142 -0
  90. package/src/prompts/index.ts +20 -0
  91. package/src/prompts/manager.ts +342 -0
  92. package/src/server/http.ts +69 -17
  93. package/src/server.ts +13 -0
  94. package/src/telemetry/index.ts +10 -0
  95. package/src/telemetry/manager.ts +419 -0
  96. package/src/tools/index.ts +1 -0
  97. package/src/tools/manage-subscription.ts +41 -7
  98. package/src/tools/search-resources.ts +14 -6
  99. package/src/tools/sync-resources.ts +141 -9
  100. package/src/tools/track-usage.ts +113 -0
  101. package/src/tools/uninstall-resource.ts +62 -4
  102. package/src/tools/upload-resource.ts +204 -31
  103. package/src/types/tools.ts +17 -2
  104. package/src/utils/cursor-paths.ts +13 -0
@@ -96,8 +96,6 @@ function loadConfig() {
96
96
  const nodeEnv = (process.env.NODE_ENV || 'development');
97
97
  const logLevel = (process.env.LOG_LEVEL || 'info');
98
98
  const transportMode = (process.env.TRANSPORT_MODE || 'stdio');
99
- // Debug: Log CSP_API_TOKEN to verify it was loaded
100
- console.log(`🔑 CSP_API_TOKEN from env: ${process.env.CSP_API_TOKEN ? process.env.CSP_API_TOKEN.substring(0, 20) + '...' : 'NOT SET'}`);
101
99
  return {
102
100
  nodeEnv,
103
101
  port: getEnvNumber('PORT', 5090),
@@ -108,13 +106,13 @@ function loadConfig() {
108
106
  http: transportMode === 'sse' ? {
109
107
  host: getEnv('HTTP_HOST', '0.0.0.0'),
110
108
  port: getEnvNumber('HTTP_PORT', 3000),
109
+ basePath: getEnv('HTTP_BASE_PATH', ''),
111
110
  } : undefined,
112
111
  session: transportMode === 'sse' ? {
113
112
  timeout: getEnvNumber('SESSION_TIMEOUT', 3600),
114
113
  } : undefined,
115
114
  csp: {
116
115
  apiBaseUrl: getEnv('CSP_API_BASE_URL', 'https://csp.example.com'),
117
- apiToken: getEnv('CSP_API_TOKEN', 'test-token-12345'),
118
116
  timeout: getEnvNumber('CSP_API_TIMEOUT', 30000),
119
117
  },
120
118
  git: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -10,6 +10,8 @@ const log_cleaner_1 = require("./utils/log-cleaner");
10
10
  const server_1 = require("./server");
11
11
  const token_validator_1 = require("./auth/token-validator");
12
12
  const manager_1 = require("./session/manager");
13
+ const index_js_1 = require("./telemetry/index.js");
14
+ const client_js_1 = require("./api/client.js");
13
15
  // Global error handlers
14
16
  process.on('uncaughtException', (error) => {
15
17
  // Handle EPIPE and ECONNRESET gracefully (client disconnected)
@@ -40,10 +42,15 @@ async function main() {
40
42
  }, 'Starting CSP AI Agent MCP Server...');
41
43
  // Start log cleanup scheduler
42
44
  const cleanupTimer = (0, log_cleaner_1.startLogCleanupSchedule)();
45
+ // Wire up telemetry reporting (inject API client to avoid circular import)
46
+ index_js_1.telemetry.configure((payload, token) => client_js_1.apiClient.reportTelemetry(payload, token), () => process.env.CSP_API_TOKEN);
43
47
  try {
44
48
  // Start MCP Server
45
49
  await (0, server_1.startServer)();
46
50
  logger_1.logger.info({ port: config_1.config.port }, `✅ CSP AI Agent MCP Server started successfully`);
51
+ // Start periodic telemetry flush (every 10 seconds)
52
+ index_js_1.telemetry.startPeriodicFlush(10_000);
53
+ logger_1.logger.info('Telemetry flush scheduler started (interval: 10s)');
47
54
  }
48
55
  catch (error) {
49
56
  logger_1.logger.error({ error }, 'Failed to start server');
@@ -83,6 +90,11 @@ async function main() {
83
90
  // Stop token cache cleanup
84
91
  (0, token_validator_1.stopCacheCleanup)();
85
92
  logger_1.logger.info('Token cache cleanup stopped');
93
+ // Stop telemetry scheduler and perform final flush
94
+ index_js_1.telemetry.stopPeriodicFlush();
95
+ logger_1.logger.info('Telemetry scheduler stopped, performing final flush...');
96
+ await index_js_1.telemetry.flush();
97
+ logger_1.logger.info('Final telemetry flush completed');
86
98
  // Phase 4: Flush logs
87
99
  logger_1.logger.info('Phase 4: Flushing logs...');
88
100
  // Give logger time to flush
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
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
+ export declare class PromptCache {
17
+ private readonly cacheDir;
18
+ /**
19
+ * @param baseDir Absolute base directory (defaults to process.cwd()).
20
+ */
21
+ constructor(baseDir?: string);
22
+ /** Absolute path to the cache directory. */
23
+ get directory(): string;
24
+ /** Ensure the cache directory exists (idempotent). */
25
+ ensureDir(): void;
26
+ /**
27
+ * Derive the cache file name for a resource.
28
+ * @param resourceType 'command' | 'skill'
29
+ * @param resourceId Canonical resource ID
30
+ */
31
+ private cacheFileName;
32
+ /** Absolute path to the cache file for a given resource. */
33
+ cachePath(resourceType: string, resourceId: string): string;
34
+ /**
35
+ * Write (or overwrite) a resource's Prompt content to the cache.
36
+ * Uses atomic write-then-rename to prevent partial reads.
37
+ *
38
+ * @param resourceType 'command' | 'skill'
39
+ * @param resourceId Canonical resource ID
40
+ * @param content Fully-expanded Prompt Markdown content
41
+ */
42
+ write(resourceType: string, resourceId: string, content: string): void;
43
+ /**
44
+ * Read the cached Prompt content for a resource.
45
+ * Returns null if the cache file does not exist or cannot be read.
46
+ *
47
+ * @param resourceType 'command' | 'skill'
48
+ * @param resourceId Canonical resource ID
49
+ */
50
+ read(resourceType: string, resourceId: string): string | null;
51
+ /**
52
+ * Delete the cache file for a resource.
53
+ * Silently succeeds if the file does not exist.
54
+ *
55
+ * @param resourceType 'command' | 'skill'
56
+ * @param resourceId Canonical resource ID
57
+ */
58
+ delete(resourceType: string, resourceId: string): void;
59
+ /**
60
+ * Check whether a valid cache entry exists for a resource.
61
+ *
62
+ * @param resourceType 'command' | 'skill'
63
+ * @param resourceId Canonical resource ID
64
+ */
65
+ exists(resourceType: string, resourceId: string): boolean;
66
+ }
67
+ /** Singleton cache instance using the process CWD as the base directory. */
68
+ export declare const promptCache: PromptCache;
69
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/prompts/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC;;OAEG;gBACS,OAAO,GAAE,MAAsB;IAI3C,4CAA4C;IAC5C,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,sDAAsD;IACtD,SAAS,IAAI,IAAI;IAIjB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAQrB,4DAA4D;IAC5D,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAI3D;;;;;;;OAOG;IACH,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAoBtE;;;;;;OAMG;IACH,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAS7D;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAetD;;;;;OAKG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;CAG1D;AAED,4EAA4E;AAC5E,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ /**
3
+ * PromptCache: manages the .prompt-cache/ directory inside the MCP Server's
4
+ * runtime working directory.
5
+ *
6
+ * Cache files hold the fully-expanded Prompt content for each Command/Skill
7
+ * resource so that the MCP Prompt handler can serve them without re-generating
8
+ * on every invocation.
9
+ *
10
+ * The cache directory is intentionally NOT committed to Git — it is regenerated
11
+ * from the canonical source files after every git pull or resource upload.
12
+ *
13
+ * File naming: {type}-{resource_id}.md
14
+ * e.g. cmd-client-sdk-generate-testcase.md
15
+ * skill-client-sdk-analyze-sdk-log.md
16
+ */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || (function () {
34
+ var ownKeys = function(o) {
35
+ ownKeys = Object.getOwnPropertyNames || function (o) {
36
+ var ar = [];
37
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
38
+ return ar;
39
+ };
40
+ return ownKeys(o);
41
+ };
42
+ return function (mod) {
43
+ if (mod && mod.__esModule) return mod;
44
+ var result = {};
45
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
46
+ __setModuleDefault(result, mod);
47
+ return result;
48
+ };
49
+ })();
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.promptCache = exports.PromptCache = void 0;
52
+ const fs = __importStar(require("fs"));
53
+ const path = __importStar(require("path"));
54
+ const logger_js_1 = require("../utils/logger.js");
55
+ /** Relative directory name inside the MCP Server CWD for cached Prompt files. */
56
+ const CACHE_DIR_NAME = '.prompt-cache';
57
+ class PromptCache {
58
+ cacheDir;
59
+ /**
60
+ * @param baseDir Absolute base directory (defaults to process.cwd()).
61
+ */
62
+ constructor(baseDir = process.cwd()) {
63
+ this.cacheDir = path.join(baseDir, CACHE_DIR_NAME);
64
+ }
65
+ /** Absolute path to the cache directory. */
66
+ get directory() {
67
+ return this.cacheDir;
68
+ }
69
+ /** Ensure the cache directory exists (idempotent). */
70
+ ensureDir() {
71
+ fs.mkdirSync(this.cacheDir, { recursive: true });
72
+ }
73
+ /**
74
+ * Derive the cache file name for a resource.
75
+ * @param resourceType 'command' | 'skill'
76
+ * @param resourceId Canonical resource ID
77
+ */
78
+ cacheFileName(resourceType, resourceId) {
79
+ // Normalise type prefix: 'command' → 'cmd', 'skill' → 'skill'
80
+ const prefix = resourceType === 'command' ? 'cmd' : resourceType;
81
+ // Sanitise resourceId — remove characters unsafe in filenames.
82
+ const safeId = resourceId.replace(/[/\\:*?"<>|]/g, '-');
83
+ return `${prefix}-${safeId}.md`;
84
+ }
85
+ /** Absolute path to the cache file for a given resource. */
86
+ cachePath(resourceType, resourceId) {
87
+ return path.join(this.cacheDir, this.cacheFileName(resourceType, resourceId));
88
+ }
89
+ /**
90
+ * Write (or overwrite) a resource's Prompt content to the cache.
91
+ * Uses atomic write-then-rename to prevent partial reads.
92
+ *
93
+ * @param resourceType 'command' | 'skill'
94
+ * @param resourceId Canonical resource ID
95
+ * @param content Fully-expanded Prompt Markdown content
96
+ */
97
+ write(resourceType, resourceId, content) {
98
+ this.ensureDir();
99
+ const dest = this.cachePath(resourceType, resourceId);
100
+ const tmp = `${dest}.${process.pid}.tmp`;
101
+ try {
102
+ fs.writeFileSync(tmp, content, 'utf8');
103
+ fs.renameSync(tmp, dest);
104
+ logger_js_1.logger.debug({ resourceId, resourceType, path: dest }, 'Prompt cache written');
105
+ }
106
+ catch (err) {
107
+ // Best-effort cleanup of temp file
108
+ try {
109
+ fs.unlinkSync(tmp);
110
+ }
111
+ catch { /* ignore */ }
112
+ throw new Error(`Failed to write prompt cache for ${resourceId}: ${err.message}`);
113
+ }
114
+ }
115
+ /**
116
+ * Read the cached Prompt content for a resource.
117
+ * Returns null if the cache file does not exist or cannot be read.
118
+ *
119
+ * @param resourceType 'command' | 'skill'
120
+ * @param resourceId Canonical resource ID
121
+ */
122
+ read(resourceType, resourceId) {
123
+ const p = this.cachePath(resourceType, resourceId);
124
+ try {
125
+ return fs.readFileSync(p, 'utf8');
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ /**
132
+ * Delete the cache file for a resource.
133
+ * Silently succeeds if the file does not exist.
134
+ *
135
+ * @param resourceType 'command' | 'skill'
136
+ * @param resourceId Canonical resource ID
137
+ */
138
+ delete(resourceType, resourceId) {
139
+ const p = this.cachePath(resourceType, resourceId);
140
+ try {
141
+ fs.unlinkSync(p);
142
+ logger_js_1.logger.debug({ resourceId, resourceType }, 'Prompt cache deleted');
143
+ }
144
+ catch (err) {
145
+ if (err.code !== 'ENOENT') {
146
+ logger_js_1.logger.warn({ resourceId, error: err.message }, 'Failed to delete prompt cache file');
147
+ }
148
+ }
149
+ }
150
+ /**
151
+ * Check whether a valid cache entry exists for a resource.
152
+ *
153
+ * @param resourceType 'command' | 'skill'
154
+ * @param resourceId Canonical resource ID
155
+ */
156
+ exists(resourceType, resourceId) {
157
+ return fs.existsSync(this.cachePath(resourceType, resourceId));
158
+ }
159
+ }
160
+ exports.PromptCache = PromptCache;
161
+ /** Singleton cache instance using the process CWD as the base directory. */
162
+ exports.promptCache = new PromptCache();
163
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/prompts/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * PromptGenerator: converts raw Command/Skill Markdown assets into MCP Prompt content.
3
+ *
4
+ * Two-step pipeline:
5
+ * 1. parseMarkdownWithImports — recursively inline `import 'path'` directives.
6
+ * 2. replaceMDVariables — substitute ${VAR} placeholders with runtime values.
7
+ *
8
+ * The resulting string is returned to the caller who can pass it directly as
9
+ * the MCP Prompt message text, or write it to the .prompt-cache/ directory.
10
+ */
11
+ /**
12
+ * Recursively resolve and inline all `import 'path'` statements in a Markdown
13
+ * file. Each imported file's content replaces its import statement in the
14
+ * parent document.
15
+ *
16
+ * @param filePath Absolute path to the root Markdown file.
17
+ * @param depth Current recursion depth (used for cycle detection).
18
+ * @returns Fully expanded Markdown string.
19
+ */
20
+ export declare function parseMarkdownWithImports(filePath: string, depth?: number): Promise<string>;
21
+ /**
22
+ * Replace ${VARIABLE_NAME} placeholders in content with values from the
23
+ * provided variable map. Variables not found in the map are left unchanged so
24
+ * they remain visible in the output for debugging.
25
+ *
26
+ * @param content Markdown string (after import expansion).
27
+ * @param variables Key-value map of variable names to their replacement strings.
28
+ * @returns Content with placeholders substituted.
29
+ */
30
+ export declare function replaceMDVariables(content: string, variables: Record<string, string>): string;
31
+ /**
32
+ * High-level entry point: expand imports then substitute variables.
33
+ *
34
+ * @param filePath Absolute path to the root Markdown file.
35
+ * @param variables Optional variable substitution map (defaults to empty).
36
+ * @returns Final Prompt content ready for MCP registration.
37
+ */
38
+ export declare function generatePromptContent(filePath: string, variables?: Record<string, string>): Promise<string>;
39
+ /**
40
+ * Generate Prompt content from a raw Markdown string (no file I/O).
41
+ * Used when the resource content has already been downloaded from the API.
42
+ *
43
+ * @param rawContent Raw Markdown string.
44
+ * @param basePath Absolute directory used to resolve relative `import` paths.
45
+ * @param variables Optional variable substitution map.
46
+ * @returns Final Prompt content.
47
+ */
48
+ export declare function generatePromptContentFromString(rawContent: string, basePath: string, variables?: Record<string, string>): Promise<string>;
49
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/prompts/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAI,GACR,OAAO,CAAC,MAAM,CAAC,CA6CjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CAOR;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACrC,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,+BAA+B,CACnD,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACrC,OAAO,CAAC,MAAM,CAAC,CAYjB"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ /**
3
+ * PromptGenerator: converts raw Command/Skill Markdown assets into MCP Prompt content.
4
+ *
5
+ * Two-step pipeline:
6
+ * 1. parseMarkdownWithImports — recursively inline `import 'path'` directives.
7
+ * 2. replaceMDVariables — substitute ${VAR} placeholders with runtime values.
8
+ *
9
+ * The resulting string is returned to the caller who can pass it directly as
10
+ * the MCP Prompt message text, or write it to the .prompt-cache/ directory.
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.parseMarkdownWithImports = parseMarkdownWithImports;
47
+ exports.replaceMDVariables = replaceMDVariables;
48
+ exports.generatePromptContent = generatePromptContent;
49
+ exports.generatePromptContentFromString = generatePromptContentFromString;
50
+ const fs = __importStar(require("fs"));
51
+ const path = __importStar(require("path"));
52
+ const logger_js_1 = require("../utils/logger.js");
53
+ // Maximum import recursion depth to guard against circular imports.
54
+ const MAX_IMPORT_DEPTH = 20;
55
+ // Matches lines like: import 'relative/path/to/file.md'
56
+ const IMPORT_REGEX = /^import\s+['"]([^'"]+)['"]\s*$/gm;
57
+ /**
58
+ * Recursively resolve and inline all `import 'path'` statements in a Markdown
59
+ * file. Each imported file's content replaces its import statement in the
60
+ * parent document.
61
+ *
62
+ * @param filePath Absolute path to the root Markdown file.
63
+ * @param depth Current recursion depth (used for cycle detection).
64
+ * @returns Fully expanded Markdown string.
65
+ */
66
+ async function parseMarkdownWithImports(filePath, depth = 0) {
67
+ if (depth > MAX_IMPORT_DEPTH) {
68
+ throw new Error(`Import depth exceeded ${MAX_IMPORT_DEPTH} levels at ${filePath}. ` +
69
+ 'Check for circular imports.');
70
+ }
71
+ let content;
72
+ try {
73
+ content = fs.readFileSync(filePath, 'utf8');
74
+ }
75
+ catch (err) {
76
+ throw new Error(`Cannot read Markdown file: ${filePath} — ${err.message}`);
77
+ }
78
+ const fileDir = path.dirname(filePath);
79
+ const matches = [];
80
+ let match;
81
+ // Reset lastIndex before each exec loop (regex is stateful with 'g' flag).
82
+ IMPORT_REGEX.lastIndex = 0;
83
+ while ((match = IMPORT_REGEX.exec(content)) !== null) {
84
+ const importPath = match[1];
85
+ if (importPath) {
86
+ matches.push({
87
+ statement: match[0],
88
+ resolvedPath: path.resolve(fileDir, importPath),
89
+ });
90
+ }
91
+ }
92
+ // Process imports sequentially to preserve insertion order.
93
+ for (const { statement, resolvedPath } of matches) {
94
+ try {
95
+ const importedContent = await parseMarkdownWithImports(resolvedPath, depth + 1);
96
+ content = content.replace(statement, importedContent);
97
+ }
98
+ catch (err) {
99
+ logger_js_1.logger.warn({ importPath: resolvedPath, parentFile: filePath, error: err.message }, 'Failed to resolve import — leaving placeholder in place');
100
+ }
101
+ }
102
+ return content;
103
+ }
104
+ /**
105
+ * Replace ${VARIABLE_NAME} placeholders in content with values from the
106
+ * provided variable map. Variables not found in the map are left unchanged so
107
+ * they remain visible in the output for debugging.
108
+ *
109
+ * @param content Markdown string (after import expansion).
110
+ * @param variables Key-value map of variable names to their replacement strings.
111
+ * @returns Content with placeholders substituted.
112
+ */
113
+ function replaceMDVariables(content, variables) {
114
+ let result = content;
115
+ for (const [key, value] of Object.entries(variables)) {
116
+ const regex = new RegExp(`\\$\\{${key}\\}`, 'g');
117
+ result = result.replace(regex, value);
118
+ }
119
+ return result;
120
+ }
121
+ /**
122
+ * High-level entry point: expand imports then substitute variables.
123
+ *
124
+ * @param filePath Absolute path to the root Markdown file.
125
+ * @param variables Optional variable substitution map (defaults to empty).
126
+ * @returns Final Prompt content ready for MCP registration.
127
+ */
128
+ async function generatePromptContent(filePath, variables = {}) {
129
+ const expanded = await parseMarkdownWithImports(filePath);
130
+ return replaceMDVariables(expanded, variables);
131
+ }
132
+ /**
133
+ * Generate Prompt content from a raw Markdown string (no file I/O).
134
+ * Used when the resource content has already been downloaded from the API.
135
+ *
136
+ * @param rawContent Raw Markdown string.
137
+ * @param basePath Absolute directory used to resolve relative `import` paths.
138
+ * @param variables Optional variable substitution map.
139
+ * @returns Final Prompt content.
140
+ */
141
+ async function generatePromptContentFromString(rawContent, basePath, variables = {}) {
142
+ // Write to a temp file so parseMarkdownWithImports can resolve relative imports.
143
+ const tmpPath = path.join(basePath, `.tmp-prompt-${Date.now()}-${process.pid}.md`);
144
+ let result;
145
+ try {
146
+ fs.mkdirSync(basePath, { recursive: true });
147
+ fs.writeFileSync(tmpPath, rawContent, 'utf8');
148
+ result = await parseMarkdownWithImports(tmpPath);
149
+ }
150
+ finally {
151
+ try {
152
+ fs.unlinkSync(tmpPath);
153
+ }
154
+ catch { /* best-effort cleanup */ }
155
+ }
156
+ return replaceMDVariables(result, variables);
157
+ }
158
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/prompts/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * prompts module — public API
3
+ *
4
+ * Exports:
5
+ * - PromptGenerator utilities (parseMarkdownWithImports, replaceMDVariables,
6
+ * generatePromptContent, generatePromptContentFromString)
7
+ * - PromptCache class and the shared singleton `promptCache`
8
+ * - PromptManager class and the shared singleton `promptManager`
9
+ */
10
+ export { parseMarkdownWithImports, replaceMDVariables, generatePromptContent, generatePromptContentFromString, } from './generator.js';
11
+ export { PromptCache, promptCache } from './cache.js';
12
+ export { PromptManager, promptManager } from './manager.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,+BAA+B,GAChC,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * prompts module — public API
4
+ *
5
+ * Exports:
6
+ * - PromptGenerator utilities (parseMarkdownWithImports, replaceMDVariables,
7
+ * generatePromptContent, generatePromptContentFromString)
8
+ * - PromptCache class and the shared singleton `promptCache`
9
+ * - PromptManager class and the shared singleton `promptManager`
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.promptManager = exports.PromptManager = exports.promptCache = exports.PromptCache = exports.generatePromptContentFromString = exports.generatePromptContent = exports.replaceMDVariables = exports.parseMarkdownWithImports = void 0;
13
+ var generator_js_1 = require("./generator.js");
14
+ Object.defineProperty(exports, "parseMarkdownWithImports", { enumerable: true, get: function () { return generator_js_1.parseMarkdownWithImports; } });
15
+ Object.defineProperty(exports, "replaceMDVariables", { enumerable: true, get: function () { return generator_js_1.replaceMDVariables; } });
16
+ Object.defineProperty(exports, "generatePromptContent", { enumerable: true, get: function () { return generator_js_1.generatePromptContent; } });
17
+ Object.defineProperty(exports, "generatePromptContentFromString", { enumerable: true, get: function () { return generator_js_1.generatePromptContentFromString; } });
18
+ var cache_js_1 = require("./cache.js");
19
+ Object.defineProperty(exports, "PromptCache", { enumerable: true, get: function () { return cache_js_1.PromptCache; } });
20
+ Object.defineProperty(exports, "promptCache", { enumerable: true, get: function () { return cache_js_1.promptCache; } });
21
+ var manager_js_1 = require("./manager.js");
22
+ Object.defineProperty(exports, "PromptManager", { enumerable: true, get: function () { return manager_js_1.PromptManager; } });
23
+ Object.defineProperty(exports, "promptManager", { enumerable: true, get: function () { return manager_js_1.promptManager; } });
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,+CAKwB;AAJtB,wHAAA,wBAAwB,OAAA;AACxB,kHAAA,kBAAkB,OAAA;AAClB,qHAAA,qBAAqB,OAAA;AACrB,+HAAA,+BAA+B,OAAA;AAGjC,uCAAsD;AAA7C,uGAAA,WAAW,OAAA;AAAE,uGAAA,WAAW,OAAA;AAEjC,2CAA4D;AAAnD,2GAAA,aAAa,OAAA;AAAE,2GAAA,aAAa,OAAA"}