@elliotding/ai-agent-mcp 0.1.26 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +330 -30
- package/dist/api/cached-client.d.ts +48 -0
- package/dist/api/cached-client.d.ts.map +1 -0
- package/dist/api/cached-client.js +126 -0
- package/dist/api/cached-client.js.map +1 -0
- package/dist/api/client.d.ts +295 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +385 -0
- package/dist/api/client.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +26 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +36 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +194 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/permissions.d.ts +60 -0
- package/dist/auth/permissions.d.ts.map +1 -0
- package/dist/auth/permissions.js +262 -0
- package/dist/auth/permissions.js.map +1 -0
- package/dist/auth/token-validator.d.ts +52 -0
- package/dist/auth/token-validator.d.ts.map +1 -0
- package/dist/auth/token-validator.js +215 -0
- package/dist/auth/token-validator.js.map +1 -0
- package/dist/cache/cache-manager.d.ts +49 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +191 -0
- package/dist/cache/cache-manager.js.map +1 -0
- package/dist/cache/index.d.ts +6 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +12 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/redis-client.d.ts +45 -0
- package/dist/cache/redis-client.d.ts.map +1 -0
- package/dist/cache/redis-client.js +210 -0
- package/dist/cache/redis-client.js.map +1 -0
- package/dist/config/constants.d.ts +28 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +31 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/index.d.ts +71 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +190 -0
- package/dist/config/index.js.map +1 -0
- package/dist/filesystem/manager.d.ts +45 -0
- package/dist/filesystem/manager.d.ts.map +1 -0
- package/dist/filesystem/manager.js +246 -0
- package/dist/filesystem/manager.js.map +1 -0
- package/dist/git/multi-source-manager.d.ts +105 -0
- package/dist/git/multi-source-manager.d.ts.map +1 -0
- package/dist/git/multi-source-manager.js +677 -0
- package/dist/git/multi-source-manager.js.map +1 -0
- package/dist/git/operations.d.ts +27 -0
- package/dist/git/operations.d.ts.map +1 -0
- package/dist/git/operations.js +83 -0
- package/dist/git/operations.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +122 -0
- package/dist/index.js.map +1 -0
- package/dist/monitoring/health.d.ts +35 -0
- package/dist/monitoring/health.d.ts.map +1 -0
- package/dist/monitoring/health.js +105 -0
- package/dist/monitoring/health.js.map +1 -0
- 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 +160 -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 +213 -0
- package/dist/prompts/manager.d.ts.map +1 -0
- package/dist/prompts/manager.js +587 -0
- package/dist/prompts/manager.js.map +1 -0
- package/dist/resources/index.d.ts +6 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +10 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/loader.d.ts +88 -0
- package/dist/resources/loader.d.ts.map +1 -0
- package/dist/resources/loader.js +492 -0
- package/dist/resources/loader.js.map +1 -0
- package/dist/server/http.d.ts +57 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +435 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +201 -0
- package/dist/server.js.map +1 -0
- package/dist/session/manager.d.ts +91 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +251 -0
- package/dist/session/manager.js.map +1 -0
- 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 +151 -0
- package/dist/telemetry/manager.d.ts.map +1 -0
- package/dist/telemetry/manager.js +367 -0
- package/dist/telemetry/manager.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +29 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/manage-subscription.d.ts +47 -0
- package/dist/tools/manage-subscription.d.ts.map +1 -0
- package/dist/tools/manage-subscription.js +317 -0
- package/dist/tools/manage-subscription.js.map +1 -0
- package/dist/tools/registry.d.ts +40 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +85 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/resolve-prompt-content.d.ts +35 -0
- package/dist/tools/resolve-prompt-content.d.ts.map +1 -0
- package/dist/tools/resolve-prompt-content.js +99 -0
- package/dist/tools/resolve-prompt-content.js.map +1 -0
- package/dist/tools/search-resources.d.ts +35 -0
- package/dist/tools/search-resources.d.ts.map +1 -0
- package/dist/tools/search-resources.js +159 -0
- package/dist/tools/search-resources.js.map +1 -0
- package/dist/tools/sync-resources.d.ts +54 -0
- package/dist/tools/sync-resources.d.ts.map +1 -0
- package/dist/tools/sync-resources.js +793 -0
- package/dist/tools/sync-resources.js.map +1 -0
- 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 +30 -0
- package/dist/tools/uninstall-resource.d.ts.map +1 -0
- package/dist/tools/uninstall-resource.js +186 -0
- package/dist/tools/uninstall-resource.js.map +1 -0
- package/dist/tools/upload-resource.d.ts +81 -0
- package/dist/tools/upload-resource.d.ts.map +1 -0
- package/dist/tools/upload-resource.js +393 -0
- package/dist/tools/upload-resource.js.map +1 -0
- package/dist/transport/sse.d.ts +29 -0
- package/dist/transport/sse.d.ts.map +1 -0
- package/dist/transport/sse.js +271 -0
- package/dist/transport/sse.js.map +1 -0
- package/dist/types/errors.d.ts +60 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +112 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mcp.d.ts +50 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +6 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/resources.d.ts +109 -0
- package/dist/types/resources.d.ts.map +1 -0
- package/dist/types/resources.js +7 -0
- package/dist/types/resources.js.map +1 -0
- package/dist/types/tools.d.ts +274 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +6 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/cursor-paths.d.ts +84 -0
- package/dist/utils/cursor-paths.d.ts.map +1 -0
- package/dist/utils/cursor-paths.js +166 -0
- package/dist/utils/cursor-paths.js.map +1 -0
- package/dist/utils/log-cleaner.d.ts +18 -0
- package/dist/utils/log-cleaner.d.ts.map +1 -0
- package/dist/utils/log-cleaner.js +112 -0
- package/dist/utils/log-cleaner.js.map +1 -0
- package/dist/utils/logger.d.ts +59 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +292 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validation.d.ts +58 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +214 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Redis Client Module
|
|
4
|
+
* Connection management with retry strategy and basic cache operations
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.redisClient = exports.RedisClient = void 0;
|
|
11
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
|
12
|
+
const logger_1 = require("../utils/logger");
|
|
13
|
+
const config_1 = require("../config");
|
|
14
|
+
const RETRY_BASE_MS = 100;
|
|
15
|
+
const RETRY_MAX_MS = 5000;
|
|
16
|
+
const RETRY_MAX_ATTEMPTS = 10;
|
|
17
|
+
/**
|
|
18
|
+
* Exponential backoff: base * 2^times, capped at max
|
|
19
|
+
*/
|
|
20
|
+
function exponentialBackoff(times) {
|
|
21
|
+
if (times > RETRY_MAX_ATTEMPTS) {
|
|
22
|
+
return 0; // Stop retrying
|
|
23
|
+
}
|
|
24
|
+
const delay = Math.min(RETRY_BASE_MS * Math.pow(2, times), RETRY_MAX_MS);
|
|
25
|
+
return delay;
|
|
26
|
+
}
|
|
27
|
+
class RedisClient {
|
|
28
|
+
static instance = null;
|
|
29
|
+
client = null;
|
|
30
|
+
isConnecting = false;
|
|
31
|
+
constructor() { }
|
|
32
|
+
static getInstance() {
|
|
33
|
+
if (RedisClient.instance === null) {
|
|
34
|
+
RedisClient.instance = new RedisClient();
|
|
35
|
+
}
|
|
36
|
+
return RedisClient.instance;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Connect to Redis with config and retry strategy
|
|
40
|
+
*/
|
|
41
|
+
async connect() {
|
|
42
|
+
const redisConfig = config_1.config.cache?.redis;
|
|
43
|
+
if (!redisConfig?.url) {
|
|
44
|
+
logger_1.logger.warn({ type: 'redis', event: 'connect_skipped' }, 'Redis URL not configured (REDIS_URL), skipping connection');
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (this.client && this.isConnected()) {
|
|
48
|
+
logger_1.logger.debug({ type: 'redis', event: 'connect' }, 'Redis already connected');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (this.isConnecting) {
|
|
52
|
+
logger_1.logger.debug({ type: 'redis', event: 'connect' }, 'Redis connection in progress');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
this.isConnecting = true;
|
|
56
|
+
try {
|
|
57
|
+
this.client = new ioredis_1.default(redisConfig.url, {
|
|
58
|
+
retryStrategy: (times) => {
|
|
59
|
+
const delay = exponentialBackoff(times);
|
|
60
|
+
if (delay === 0) {
|
|
61
|
+
logger_1.logger.error({ type: 'redis', event: 'retry_exhausted', times }, 'Redis retry exhausted, giving up');
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
logger_1.logger.warn({ type: 'redis', event: 'retry', times, delayMs: delay }, `Redis reconnecting in ${delay}ms (attempt ${times})`);
|
|
65
|
+
return delay;
|
|
66
|
+
},
|
|
67
|
+
maxRetriesPerRequest: null,
|
|
68
|
+
connectTimeout: 10000,
|
|
69
|
+
lazyConnect: true,
|
|
70
|
+
});
|
|
71
|
+
this.client.on('connect', () => {
|
|
72
|
+
logger_1.logger.info({ type: 'redis', event: 'connect' }, 'Redis connection established');
|
|
73
|
+
});
|
|
74
|
+
this.client.on('ready', () => {
|
|
75
|
+
this.isConnecting = false;
|
|
76
|
+
logger_1.logger.info({ type: 'redis', event: 'ready' }, 'Redis client ready');
|
|
77
|
+
});
|
|
78
|
+
this.client.on('error', (err) => {
|
|
79
|
+
logger_1.logger.error({ type: 'redis', event: 'error', error: err.message }, `Redis error: ${err.message}`);
|
|
80
|
+
});
|
|
81
|
+
this.client.on('close', () => {
|
|
82
|
+
logger_1.logger.info({ type: 'redis', event: 'close' }, 'Redis connection closed');
|
|
83
|
+
});
|
|
84
|
+
await this.client.connect();
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
this.isConnecting = false;
|
|
88
|
+
if (this.client) {
|
|
89
|
+
this.client.disconnect();
|
|
90
|
+
this.client = null;
|
|
91
|
+
}
|
|
92
|
+
(0, logger_1.logError)(error, { type: 'redis', event: 'connect_failed' });
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Gracefully disconnect from Redis
|
|
98
|
+
*/
|
|
99
|
+
async disconnect() {
|
|
100
|
+
if (!this.client) {
|
|
101
|
+
logger_1.logger.debug({ type: 'redis', event: 'disconnect' }, 'Redis not connected');
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
await this.client.quit();
|
|
106
|
+
this.client = null;
|
|
107
|
+
logger_1.logger.info({ type: 'redis', event: 'disconnect' }, 'Redis disconnected gracefully');
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
(0, logger_1.logError)(error, { type: 'redis', event: 'disconnect_failed' });
|
|
111
|
+
this.client = null;
|
|
112
|
+
throw error;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if Redis client is connected
|
|
117
|
+
*/
|
|
118
|
+
isConnected() {
|
|
119
|
+
return this.client?.status === 'ready';
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get value by key
|
|
123
|
+
*/
|
|
124
|
+
async get(key) {
|
|
125
|
+
if (!this.client) {
|
|
126
|
+
logger_1.logger.warn({ type: 'redis', operation: 'get', key }, 'Redis not connected');
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
const value = await this.client.get(key);
|
|
131
|
+
return value;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
(0, logger_1.logError)(error, { type: 'redis', operation: 'get', key });
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Set value with optional TTL (seconds)
|
|
140
|
+
*/
|
|
141
|
+
async set(key, value, ttl) {
|
|
142
|
+
if (!this.client) {
|
|
143
|
+
logger_1.logger.warn({ type: 'redis', operation: 'set', key }, 'Redis not connected');
|
|
144
|
+
throw new Error('Redis not connected');
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
const ttlSeconds = ttl ?? config_1.config.cache?.redis?.ttl ?? 900;
|
|
148
|
+
await this.client.set(key, value, 'EX', ttlSeconds);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
(0, logger_1.logError)(error, { type: 'redis', operation: 'set', key });
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Delete key
|
|
157
|
+
*/
|
|
158
|
+
async del(key) {
|
|
159
|
+
if (!this.client) {
|
|
160
|
+
logger_1.logger.warn({ type: 'redis', operation: 'del', key }, 'Redis not connected');
|
|
161
|
+
throw new Error('Redis not connected');
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
await this.client.del(key);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
(0, logger_1.logError)(error, { type: 'redis', operation: 'del', key });
|
|
168
|
+
throw error;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Clear all keys matching a pattern. Use with caution.
|
|
173
|
+
*/
|
|
174
|
+
async clear(pattern = '*') {
|
|
175
|
+
if (!this.client) {
|
|
176
|
+
logger_1.logger.warn({ type: 'redis', operation: 'clear', pattern }, 'Redis not connected');
|
|
177
|
+
throw new Error('Redis not connected');
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
const keys = await this.client.keys(pattern);
|
|
181
|
+
if (keys.length > 0) {
|
|
182
|
+
await this.client.del(...keys);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
(0, logger_1.logError)(error, { type: 'redis', operation: 'clear', pattern });
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Check if key exists
|
|
192
|
+
*/
|
|
193
|
+
async exists(key) {
|
|
194
|
+
if (!this.client) {
|
|
195
|
+
logger_1.logger.warn({ type: 'redis', operation: 'exists', key }, 'Redis not connected');
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
const result = await this.client.exists(key);
|
|
200
|
+
return result === 1;
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
(0, logger_1.logError)(error, { type: 'redis', operation: 'exists', key });
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
exports.RedisClient = RedisClient;
|
|
209
|
+
exports.redisClient = RedisClient.getInstance();
|
|
210
|
+
//# sourceMappingURL=redis-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-client.js","sourceRoot":"","sources":["../../src/cache/redis-client.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,sDAA6D;AAC7D,4CAAmD;AACnD,sCAAmC;AAEnC,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAI,KAAK,GAAG,kBAAkB,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC,CAAC,gBAAgB;IAC5B,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAa,WAAW;IACd,MAAM,CAAC,QAAQ,GAAuB,IAAI,CAAC;IAC3C,MAAM,GAAyB,IAAI,CAAC;IACpC,YAAY,GAAG,KAAK,CAAC;IAE7B,gBAAuB,CAAC;IAExB,MAAM,CAAC,WAAW;QAChB,IAAI,WAAW,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAClC,WAAW,CAAC,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,WAAW,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,WAAW,GAAG,eAAM,CAAC,KAAK,EAAE,KAAK,CAAC;QACxC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC;YACtB,eAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAC3C,2DAA2D,CAC5D,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACtC,eAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,yBAAyB,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,eAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,8BAA8B,CAAC,CAAC;YAClF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAK,CAAC,WAAW,CAAC,GAAG,EAAE;gBACvC,aAAa,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC/B,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;oBACxC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBAChB,eAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAClD,kCAAkC,CACnC,CAAC;wBACF,OAAO,SAAS,CAAC;oBACnB,CAAC;oBACD,eAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EACxD,yBAAyB,KAAK,eAAe,KAAK,GAAG,CACtD,CAAC;oBACF,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,oBAAoB,EAAE,IAAI;gBAC1B,cAAc,EAAE,KAAK;gBACrB,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBAC7B,eAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EACnC,8BAA8B,CAC/B,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC3B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,eAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EACjC,oBAAoB,CACrB,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBACrC,eAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,EACrD,gBAAgB,GAAG,CAAC,OAAO,EAAE,CAC9B,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC3B,eAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EACjC,yBAAyB,CAC1B,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,CAAC;YACD,IAAA,iBAAQ,EAAC,KAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACrE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,eAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,qBAAqB,CAAC,CAAC;YAC5E,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,eAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,EACtC,+BAA+B,CAChC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,iBAAQ,EAAC,KAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,eAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;YAC7E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,iBAAQ,EAAC,KAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,GAAY;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,eAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;YAC7E,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,GAAG,IAAI,eAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC;YAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,iBAAQ,EAAC,KAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,eAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;YAC7E,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,iBAAQ,EAAC,KAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,eAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,qBAAqB,CAAC,CAAC;YACnF,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,iBAAQ,EAAC,KAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACzE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,eAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;YAChF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7C,OAAO,MAAM,KAAK,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,iBAAQ,EAAC,KAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YACtE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;;AA7NH,kCA8NC;AAEY,QAAA,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Constants
|
|
3
|
+
*/
|
|
4
|
+
export declare const APP_NAME = "csp-ai-agent-mcp";
|
|
5
|
+
export declare const APP_VERSION = "0.1.0";
|
|
6
|
+
export declare const DEFAULT_PORT = 5090;
|
|
7
|
+
export declare const DEFAULT_LOG_LEVEL = "info";
|
|
8
|
+
export declare const DEFAULT_API_TIMEOUT = 30000;
|
|
9
|
+
export declare const LOG_RETENTION_DAYS = 3;
|
|
10
|
+
export declare const LOG_DIR = "logs";
|
|
11
|
+
export declare const LOG_FILE_PATTERN = "app-{date}.log";
|
|
12
|
+
export declare const CACHE_TTL_SECONDS = 900;
|
|
13
|
+
export declare const MEMORY_CACHE_SIZE = 20;
|
|
14
|
+
export declare const TOOL_NAMES: {
|
|
15
|
+
readonly SYNC_RESOURCES: "sync_resources";
|
|
16
|
+
readonly MANAGE_SUBSCRIPTION: "manage_subscription";
|
|
17
|
+
readonly SEARCH_RESOURCES: "search_resources";
|
|
18
|
+
readonly UPLOAD_RESOURCE: "upload_resource";
|
|
19
|
+
readonly UNINSTALL_RESOURCE: "uninstall_resource";
|
|
20
|
+
};
|
|
21
|
+
export declare const TOOL_TIMEOUTS: {
|
|
22
|
+
readonly search_resources: 10000;
|
|
23
|
+
readonly sync_resources: 60000;
|
|
24
|
+
readonly upload_resource: 120000;
|
|
25
|
+
readonly manage_subscription: 15000;
|
|
26
|
+
readonly uninstall_resource: 5000;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,QAAQ,qBAAqB,CAAC;AAC3C,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,OAAO,SAAS,CAAC;AAC9B,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC;AAEX,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration Constants
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TOOL_TIMEOUTS = exports.TOOL_NAMES = exports.MEMORY_CACHE_SIZE = exports.CACHE_TTL_SECONDS = exports.LOG_FILE_PATTERN = exports.LOG_DIR = exports.LOG_RETENTION_DAYS = exports.DEFAULT_API_TIMEOUT = exports.DEFAULT_LOG_LEVEL = exports.DEFAULT_PORT = exports.APP_VERSION = exports.APP_NAME = void 0;
|
|
7
|
+
exports.APP_NAME = 'csp-ai-agent-mcp';
|
|
8
|
+
exports.APP_VERSION = '0.1.0';
|
|
9
|
+
exports.DEFAULT_PORT = 5090;
|
|
10
|
+
exports.DEFAULT_LOG_LEVEL = 'info';
|
|
11
|
+
exports.DEFAULT_API_TIMEOUT = 30000;
|
|
12
|
+
exports.LOG_RETENTION_DAYS = 3;
|
|
13
|
+
exports.LOG_DIR = 'logs';
|
|
14
|
+
exports.LOG_FILE_PATTERN = 'app-{date}.log';
|
|
15
|
+
exports.CACHE_TTL_SECONDS = 900; // 15 minutes
|
|
16
|
+
exports.MEMORY_CACHE_SIZE = 20;
|
|
17
|
+
exports.TOOL_NAMES = {
|
|
18
|
+
SYNC_RESOURCES: 'sync_resources',
|
|
19
|
+
MANAGE_SUBSCRIPTION: 'manage_subscription',
|
|
20
|
+
SEARCH_RESOURCES: 'search_resources',
|
|
21
|
+
UPLOAD_RESOURCE: 'upload_resource',
|
|
22
|
+
UNINSTALL_RESOURCE: 'uninstall_resource',
|
|
23
|
+
};
|
|
24
|
+
exports.TOOL_TIMEOUTS = {
|
|
25
|
+
[exports.TOOL_NAMES.SEARCH_RESOURCES]: 10000, // 10s
|
|
26
|
+
[exports.TOOL_NAMES.SYNC_RESOURCES]: 60000, // 60s
|
|
27
|
+
[exports.TOOL_NAMES.UPLOAD_RESOURCE]: 120000, // 120s
|
|
28
|
+
[exports.TOOL_NAMES.MANAGE_SUBSCRIPTION]: 15000, // 15s
|
|
29
|
+
[exports.TOOL_NAMES.UNINSTALL_RESOURCE]: 5000, // 5s
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEU,QAAA,QAAQ,GAAG,kBAAkB,CAAC;AAC9B,QAAA,WAAW,GAAG,OAAO,CAAC;AAEtB,QAAA,YAAY,GAAG,IAAI,CAAC;AACpB,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAC3B,QAAA,mBAAmB,GAAG,KAAK,CAAC;AAE5B,QAAA,kBAAkB,GAAG,CAAC,CAAC;AACvB,QAAA,OAAO,GAAG,MAAM,CAAC;AACjB,QAAA,gBAAgB,GAAG,gBAAgB,CAAC;AAEpC,QAAA,iBAAiB,GAAG,GAAG,CAAC,CAAC,aAAa;AACtC,QAAA,iBAAiB,GAAG,EAAE,CAAC;AAEvB,QAAA,UAAU,GAAG;IACxB,cAAc,EAAE,gBAAgB;IAChC,mBAAmB,EAAE,qBAAqB;IAC1C,gBAAgB,EAAE,kBAAkB;IACpC,eAAe,EAAE,iBAAiB;IAClC,kBAAkB,EAAE,oBAAoB;CAChC,CAAC;AAEE,QAAA,aAAa,GAAG;IAC3B,CAAC,kBAAU,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM;IAC5C,CAAC,kBAAU,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM;IAC1C,CAAC,kBAAU,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO;IAC7C,CAAC,kBAAU,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM;IAC/C,CAAC,kBAAU,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,KAAK;CACpC,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Management Module
|
|
3
|
+
* Loads and validates configuration from environment variables
|
|
4
|
+
*/
|
|
5
|
+
export interface Config {
|
|
6
|
+
nodeEnv: 'development' | 'production' | 'test';
|
|
7
|
+
port: number;
|
|
8
|
+
logLevel: 'debug' | 'info' | 'warn' | 'error';
|
|
9
|
+
transport: {
|
|
10
|
+
mode: 'stdio' | 'sse';
|
|
11
|
+
};
|
|
12
|
+
http?: {
|
|
13
|
+
host: string;
|
|
14
|
+
port: number;
|
|
15
|
+
/** URL path prefix when the server runs behind a reverse proxy sub-path.
|
|
16
|
+
* e.g. HTTP_BASE_PATH=/csp-agent → SSE at /csp-agent/sse
|
|
17
|
+
* → messages POST to /csp-agent/message
|
|
18
|
+
* Leave empty (default) for direct / root-path deployments.
|
|
19
|
+
*/
|
|
20
|
+
basePath: string;
|
|
21
|
+
/**
|
|
22
|
+
* The public-facing origin clients (Cursor) should use when posting
|
|
23
|
+
* JSON-RPC messages. Derived from CSP_API_BASE_URL so that teams only
|
|
24
|
+
* need one URL configured — the API base and the MCP server share the
|
|
25
|
+
* same external hostname.
|
|
26
|
+
*
|
|
27
|
+
* e.g. CSP_API_BASE_URL=https://zct.zoomdev.us → publicOrigin=https://zct.zoomdev.us
|
|
28
|
+
*
|
|
29
|
+
* Falls back to PUBLIC_URL env var if set, then to the internal
|
|
30
|
+
* http://host:port when running locally (where 0.0.0.0 == localhost).
|
|
31
|
+
*/
|
|
32
|
+
publicOrigin: string;
|
|
33
|
+
};
|
|
34
|
+
session?: {
|
|
35
|
+
timeout: number;
|
|
36
|
+
};
|
|
37
|
+
csp: {
|
|
38
|
+
apiBaseUrl: string;
|
|
39
|
+
timeout: number;
|
|
40
|
+
};
|
|
41
|
+
git: {
|
|
42
|
+
userName: string;
|
|
43
|
+
userEmail: string;
|
|
44
|
+
};
|
|
45
|
+
resource: Record<string, never>;
|
|
46
|
+
cache: {
|
|
47
|
+
enabled: boolean;
|
|
48
|
+
redis?: {
|
|
49
|
+
url: string;
|
|
50
|
+
ttl: number;
|
|
51
|
+
};
|
|
52
|
+
memory: {
|
|
53
|
+
maxSize: number;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
database?: {
|
|
57
|
+
url: string;
|
|
58
|
+
};
|
|
59
|
+
metrics: {
|
|
60
|
+
enabled: boolean;
|
|
61
|
+
port?: number;
|
|
62
|
+
};
|
|
63
|
+
logging: {
|
|
64
|
+
dir: string;
|
|
65
|
+
retentionDays: number;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export declare function loadConfig(): Config;
|
|
69
|
+
declare let config: Config;
|
|
70
|
+
export { config };
|
|
71
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4BH,MAAM,WAAW,MAAM;IAErB,OAAO,EAAE,aAAa,GAAG,YAAY,GAAG,MAAM,CAAC;IAG/C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAG9C,SAAS,EAAE;QACT,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;KACvB,CAAC;IAGF,IAAI,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb;;;;WAIG;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB;;;;;;;;;;WAUG;QACH,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IAGF,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAGF,GAAG,EAAE;QACH,UAAU,EAAE,MAAM,CAAC;QAKnB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAGF,GAAG,EAAE;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAKF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAGhC,KAAK,EAAE;QACL,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE;YACN,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;QACF,MAAM,EAAE;YACN,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;IAGF,QAAQ,CAAC,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IAGF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAGF,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAoCD,wBAAgB,UAAU,IAAI,MAAM,CAwFnC;AAGD,QAAA,IAAI,MAAM,EAAE,MAAM,CAAC;AAmBnB,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration Management Module
|
|
4
|
+
* Loads and validates configuration from environment variables
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.config = void 0;
|
|
41
|
+
exports.loadConfig = loadConfig;
|
|
42
|
+
const dotenv = __importStar(require("dotenv"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
// Load .env file if exists
|
|
46
|
+
// Try multiple paths to find .env file
|
|
47
|
+
const possibleEnvPaths = [
|
|
48
|
+
path.resolve(process.cwd(), '.env'), // Current working directory
|
|
49
|
+
path.resolve(__dirname, '../../.env'), // Relative to compiled dist/config/
|
|
50
|
+
path.resolve(__dirname, '../../../.env'), // Project root (if deeper nesting)
|
|
51
|
+
];
|
|
52
|
+
let envLoaded = false;
|
|
53
|
+
for (const envPath of possibleEnvPaths) {
|
|
54
|
+
if (fs.existsSync(envPath)) {
|
|
55
|
+
dotenv.config({ path: envPath });
|
|
56
|
+
console.log(`✓ Loaded .env from: ${envPath}`);
|
|
57
|
+
envLoaded = true;
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (!envLoaded) {
|
|
62
|
+
console.warn('⚠ No .env file found, using environment variables only');
|
|
63
|
+
}
|
|
64
|
+
function getEnv(key, defaultValue) {
|
|
65
|
+
const value = process.env[key];
|
|
66
|
+
if (value === undefined) {
|
|
67
|
+
if (defaultValue !== undefined) {
|
|
68
|
+
return defaultValue;
|
|
69
|
+
}
|
|
70
|
+
throw new Error(`Missing required environment variable: ${key}`);
|
|
71
|
+
}
|
|
72
|
+
return value;
|
|
73
|
+
}
|
|
74
|
+
function getEnvNumber(key, defaultValue) {
|
|
75
|
+
const value = process.env[key];
|
|
76
|
+
if (value === undefined) {
|
|
77
|
+
if (defaultValue !== undefined) {
|
|
78
|
+
return defaultValue;
|
|
79
|
+
}
|
|
80
|
+
throw new Error(`Missing required environment variable: ${key}`);
|
|
81
|
+
}
|
|
82
|
+
const parsed = parseInt(value, 10);
|
|
83
|
+
if (isNaN(parsed)) {
|
|
84
|
+
throw new Error(`Environment variable ${key} must be a number, got: ${value}`);
|
|
85
|
+
}
|
|
86
|
+
return parsed;
|
|
87
|
+
}
|
|
88
|
+
function getEnvBoolean(key, defaultValue) {
|
|
89
|
+
const value = process.env[key];
|
|
90
|
+
if (value === undefined) {
|
|
91
|
+
return defaultValue;
|
|
92
|
+
}
|
|
93
|
+
return value.toLowerCase() === 'true';
|
|
94
|
+
}
|
|
95
|
+
function loadConfig() {
|
|
96
|
+
const nodeEnv = (process.env.NODE_ENV || 'development');
|
|
97
|
+
const logLevel = (process.env.LOG_LEVEL || 'info');
|
|
98
|
+
const transportMode = (process.env.TRANSPORT_MODE || 'stdio');
|
|
99
|
+
return {
|
|
100
|
+
nodeEnv,
|
|
101
|
+
port: getEnvNumber('PORT', 5090),
|
|
102
|
+
logLevel,
|
|
103
|
+
transport: {
|
|
104
|
+
mode: transportMode,
|
|
105
|
+
},
|
|
106
|
+
http: transportMode === 'sse' ? (() => {
|
|
107
|
+
const host = getEnv('HTTP_HOST', '0.0.0.0');
|
|
108
|
+
const port = getEnvNumber('HTTP_PORT', 3000);
|
|
109
|
+
const basePath = getEnv('HTTP_BASE_PATH', '');
|
|
110
|
+
// Derive the public-facing origin that external clients (Cursor) will use
|
|
111
|
+
// to POST JSON-RPC messages. Priority:
|
|
112
|
+
// 1. PUBLIC_URL env var — explicit override (e.g. ngrok / custom domain)
|
|
113
|
+
// 2. Origin extracted from CSP_API_BASE_URL — same host as the API
|
|
114
|
+
// 3. http://host:port — safe for local dev where host==0.0.0.0==localhost
|
|
115
|
+
const publicUrl = process.env['PUBLIC_URL'];
|
|
116
|
+
const cspApiBase = process.env['CSP_API_BASE_URL'] ?? '';
|
|
117
|
+
let publicOrigin;
|
|
118
|
+
if (publicUrl) {
|
|
119
|
+
publicOrigin = publicUrl.replace(/\/$/, '');
|
|
120
|
+
}
|
|
121
|
+
else if (cspApiBase) {
|
|
122
|
+
try {
|
|
123
|
+
const u = new URL(cspApiBase);
|
|
124
|
+
publicOrigin = u.origin; // e.g. "https://zct.zoomdev.us"
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
publicOrigin = `http://${host}:${port}`;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
publicOrigin = `http://${host}:${port}`;
|
|
132
|
+
}
|
|
133
|
+
return { host, port, basePath, publicOrigin };
|
|
134
|
+
})() : undefined,
|
|
135
|
+
session: transportMode === 'sse' ? {
|
|
136
|
+
timeout: getEnvNumber('SESSION_TIMEOUT', 3600),
|
|
137
|
+
} : undefined,
|
|
138
|
+
csp: {
|
|
139
|
+
apiBaseUrl: getEnv('CSP_API_BASE_URL', 'https://csp.example.com'),
|
|
140
|
+
timeout: getEnvNumber('CSP_API_TIMEOUT', 30000),
|
|
141
|
+
},
|
|
142
|
+
git: {
|
|
143
|
+
userName: getEnv('GIT_USER_NAME', 'CSP Agent'),
|
|
144
|
+
userEmail: getEnv('GIT_USER_EMAIL', 'agent@example.com'),
|
|
145
|
+
},
|
|
146
|
+
resource: {},
|
|
147
|
+
cache: {
|
|
148
|
+
enabled: getEnvBoolean('ENABLE_CACHE', true),
|
|
149
|
+
redis: process.env.REDIS_URL
|
|
150
|
+
? {
|
|
151
|
+
url: process.env.REDIS_URL,
|
|
152
|
+
ttl: getEnvNumber('REDIS_TTL', 900),
|
|
153
|
+
}
|
|
154
|
+
: undefined,
|
|
155
|
+
memory: {
|
|
156
|
+
maxSize: getEnvNumber('CACHE_MAX_SIZE', 100),
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
database: process.env.DATABASE_URL
|
|
160
|
+
? {
|
|
161
|
+
url: process.env.DATABASE_URL,
|
|
162
|
+
}
|
|
163
|
+
: undefined,
|
|
164
|
+
metrics: {
|
|
165
|
+
enabled: getEnvBoolean('ENABLE_METRICS', true),
|
|
166
|
+
port: process.env.METRICS_PORT ? getEnvNumber('METRICS_PORT') : undefined,
|
|
167
|
+
},
|
|
168
|
+
logging: {
|
|
169
|
+
dir: getEnv('LOG_DIR', '../Logs'),
|
|
170
|
+
retentionDays: getEnvNumber('LOG_RETENTION_DAYS', 3),
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
// Validate configuration on load
|
|
175
|
+
let config;
|
|
176
|
+
try {
|
|
177
|
+
exports.config = config = loadConfig();
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
// Use logger for consistent error reporting
|
|
181
|
+
const logger = require('../utils/logger').logger;
|
|
182
|
+
logger.error({
|
|
183
|
+
type: 'config',
|
|
184
|
+
operation: 'load_config',
|
|
185
|
+
error: error.message,
|
|
186
|
+
stack: error.stack
|
|
187
|
+
}, 'Configuration loading failed');
|
|
188
|
+
process.exit(1);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem Manager
|
|
3
|
+
* Atomic filesystem operations for resource management
|
|
4
|
+
*/
|
|
5
|
+
declare class FilesystemManager {
|
|
6
|
+
/**
|
|
7
|
+
* Write resource file atomically
|
|
8
|
+
*/
|
|
9
|
+
writeResource(filePath: string, content: string): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Read resource file with validation
|
|
12
|
+
*/
|
|
13
|
+
readResource(filePath: string): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Delete resource file with backup
|
|
16
|
+
*/
|
|
17
|
+
deleteResource(filePath: string): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Validate resource content
|
|
20
|
+
*/
|
|
21
|
+
private validateResourceContent;
|
|
22
|
+
/**
|
|
23
|
+
* Check if file exists
|
|
24
|
+
*/
|
|
25
|
+
fileExists(filePath: string): Promise<boolean>;
|
|
26
|
+
/**
|
|
27
|
+
* List files in directory
|
|
28
|
+
*/
|
|
29
|
+
listFiles(dirPath: string, pattern?: RegExp): Promise<string[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Recursively scan a directory and return all text files as FileEntry[]
|
|
32
|
+
* Supported extensions: .md, .mdc, .txt, .yaml, .yml, .json
|
|
33
|
+
*/
|
|
34
|
+
scanDirectory(dirPath: string): Promise<Array<{
|
|
35
|
+
path: string;
|
|
36
|
+
content: string;
|
|
37
|
+
}>>;
|
|
38
|
+
/**
|
|
39
|
+
* Remove empty directories recursively
|
|
40
|
+
*/
|
|
41
|
+
removeEmptyDirs(dirPath: string): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
export declare const filesystemManager: FilesystemManager;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/filesystem/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,cAAM,iBAAiB;IACrB;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BrE;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBrD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCrD;;OAEG;YACW,uBAAuB;IAuBrC;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASpD;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAcrE;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAiDvF;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBtD;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|