@elliotding/ai-agent-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/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 +213 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +326 -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 +256 -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 +217 -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 +54 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +168 -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 +62 -0
- package/dist/git/multi-source-manager.d.ts.map +1 -0
- package/dist/git/multi-source-manager.js +293 -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 +109 -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/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 +87 -0
- package/dist/resources/loader.d.ts.map +1 -0
- package/dist/resources/loader.js +452 -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 +336 -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 +157 -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/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +27 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/manage-subscription.d.ts +43 -0
- package/dist/tools/manage-subscription.d.ts.map +1 -0
- package/dist/tools/manage-subscription.js +268 -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/search-resources.d.ts +31 -0
- package/dist/tools/search-resources.d.ts.map +1 -0
- package/dist/tools/search-resources.js +154 -0
- package/dist/tools/search-resources.js.map +1 -0
- package/dist/tools/sync-resources.d.ts +41 -0
- package/dist/tools/sync-resources.d.ts.map +1 -0
- package/dist/tools/sync-resources.js +606 -0
- package/dist/tools/sync-resources.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 +259 -0
- package/dist/tools/uninstall-resource.js.map +1 -0
- package/dist/tools/upload-resource.d.ts +77 -0
- package/dist/tools/upload-resource.d.ts.map +1 -0
- package/dist/tools/upload-resource.js +252 -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 +147 -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 +49 -0
- package/dist/utils/cursor-paths.d.ts.map +1 -0
- package/dist/utils/cursor-paths.js +116 -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 +58 -0
- package/src/api/cached-client.ts +144 -0
- package/src/api/client.ts +578 -0
- package/src/auth/index.ts +11 -0
- package/src/auth/middleware.ts +244 -0
- package/src/auth/permissions.ts +317 -0
- package/src/auth/token-validator.ts +294 -0
- package/src/cache/cache-manager.ts +243 -0
- package/src/cache/index.ts +6 -0
- package/src/cache/redis-client.ts +249 -0
- package/src/config/constants.ts +33 -0
- package/src/config/index.ts +228 -0
- package/src/filesystem/manager.ts +235 -0
- package/src/git/multi-source-manager.ts +333 -0
- package/src/git/operations.ts +93 -0
- package/src/index.ts +139 -0
- package/src/monitoring/health.ts +132 -0
- package/src/resources/index.ts +13 -0
- package/src/resources/loader.ts +530 -0
- package/src/server/http.ts +427 -0
- package/src/server.ts +191 -0
- package/src/session/manager.ts +296 -0
- package/src/tools/index.ts +11 -0
- package/src/tools/manage-subscription.ts +332 -0
- package/src/tools/registry.ts +97 -0
- package/src/tools/search-resources.ts +177 -0
- package/src/tools/sync-resources.ts +662 -0
- package/src/tools/uninstall-resource.ts +248 -0
- package/src/tools/upload-resource.ts +258 -0
- package/src/transport/sse.ts +308 -0
- package/src/types/errors.ts +146 -0
- package/src/types/index.ts +7 -0
- package/src/types/mcp.ts +61 -0
- package/src/types/resources.ts +141 -0
- package/src/types/tools.ts +175 -0
- package/src/utils/cursor-paths.ts +83 -0
- package/src/utils/log-cleaner.ts +92 -0
- package/src/utils/logger.ts +333 -0
- package/src/utils/validation.ts +262 -0
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Multi-Source Git Manager
|
|
4
|
+
* Manages multiple AI Resources Git repositories efficiently
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
40
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.multiSourceGitManager = void 0;
|
|
44
|
+
const fs = __importStar(require("fs/promises"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const simple_git_1 = __importDefault(require("simple-git"));
|
|
47
|
+
const logger_1 = require("../utils/logger");
|
|
48
|
+
const errors_1 = require("../types/errors");
|
|
49
|
+
class MultiSourceGitManager {
|
|
50
|
+
configPath;
|
|
51
|
+
baseDir;
|
|
52
|
+
constructor(baseDir) {
|
|
53
|
+
this.baseDir = baseDir;
|
|
54
|
+
this.configPath = path.join(baseDir, 'ai-resources-config.json');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Load AI Resources configuration
|
|
58
|
+
*/
|
|
59
|
+
async loadConfig() {
|
|
60
|
+
try {
|
|
61
|
+
const configContent = await fs.readFile(this.configPath, 'utf-8');
|
|
62
|
+
return JSON.parse(configContent);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
throw new Error(`Failed to load AI Resources config: ${error instanceof Error ? error.message : String(error)}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get all enabled sources (including default)
|
|
70
|
+
*/
|
|
71
|
+
async getEnabledSources() {
|
|
72
|
+
const config = await this.loadConfig();
|
|
73
|
+
const sources = [];
|
|
74
|
+
if (config.default_source.enabled) {
|
|
75
|
+
sources.push(config.default_source);
|
|
76
|
+
}
|
|
77
|
+
if (config.extended_sources) {
|
|
78
|
+
sources.push(...config.extended_sources.filter(s => s.enabled));
|
|
79
|
+
}
|
|
80
|
+
return sources;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if a Git repository exists at the given path
|
|
84
|
+
*/
|
|
85
|
+
async repositoryExists(repoPath) {
|
|
86
|
+
try {
|
|
87
|
+
const gitDir = path.join(repoPath, '.git');
|
|
88
|
+
const stats = await fs.stat(gitDir);
|
|
89
|
+
return stats.isDirectory();
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get Git repository URL from existing repo
|
|
97
|
+
*/
|
|
98
|
+
async getRepoUrl(repoPath) {
|
|
99
|
+
try {
|
|
100
|
+
const git = (0, simple_git_1.default)(repoPath);
|
|
101
|
+
const remotes = await git.getRemotes(true);
|
|
102
|
+
const origin = remotes.find(r => r.name === 'origin');
|
|
103
|
+
return origin?.refs.fetch || null;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Clone a Git repository
|
|
111
|
+
*/
|
|
112
|
+
async cloneRepository(repoUrl, targetPath, branch = 'main') {
|
|
113
|
+
try {
|
|
114
|
+
logger_1.logger.info({ repoUrl, targetPath, branch }, 'Cloning Git repository...');
|
|
115
|
+
// Ensure parent directory exists
|
|
116
|
+
const parentDir = path.dirname(targetPath);
|
|
117
|
+
await fs.mkdir(parentDir, { recursive: true });
|
|
118
|
+
const git = (0, simple_git_1.default)();
|
|
119
|
+
// Clone with --single-branch to limit downloaded history to the target
|
|
120
|
+
// branch only, keeping the clone fast without creating a shallow repo
|
|
121
|
+
// (shallow repos cause "no merge base" errors on subsequent fetches).
|
|
122
|
+
await git.clone(repoUrl, targetPath, [
|
|
123
|
+
'--branch', branch,
|
|
124
|
+
'--single-branch',
|
|
125
|
+
]);
|
|
126
|
+
logger_1.logger.info({ repoUrl, targetPath }, 'Repository cloned successfully');
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
throw (0, errors_1.createGitError)('clone', error, repoUrl);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Pull latest changes using fetch + fast-forward merge.
|
|
134
|
+
*
|
|
135
|
+
* Deliberately avoids --depth=1 on fetch: shallow fetches truncate local
|
|
136
|
+
* history, causing "no merge base" divergence errors on subsequent pulls.
|
|
137
|
+
*/
|
|
138
|
+
async pullRepository(repoPath, branch = 'main') {
|
|
139
|
+
try {
|
|
140
|
+
const git = (0, simple_git_1.default)(repoPath);
|
|
141
|
+
logger_1.logger.info({ repoPath, branch }, 'Fetching latest changes...');
|
|
142
|
+
// If the local repo is shallow (was previously cloned with --depth),
|
|
143
|
+
// unshallow it first so subsequent fetches have a proper merge base.
|
|
144
|
+
const isShallow = (await git.raw(['rev-parse', '--is-shallow-repository'])).trim() === 'true';
|
|
145
|
+
if (isShallow) {
|
|
146
|
+
logger_1.logger.info({ repoPath }, 'Shallow repo detected — running fetch --unshallow first');
|
|
147
|
+
await git.fetch(['--unshallow', 'origin', branch]);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// Fetch the branch from origin without --depth to keep full history intact.
|
|
151
|
+
await git.fetch(['origin', branch]);
|
|
152
|
+
}
|
|
153
|
+
// Compare local HEAD with remote tip to detect changes before merging.
|
|
154
|
+
const remoteBranch = `origin/${branch}`;
|
|
155
|
+
const diffSummary = await git.diffSummary([`HEAD...${remoteBranch}`]);
|
|
156
|
+
const hasChanges = diffSummary.files.length > 0;
|
|
157
|
+
if (!hasChanges) {
|
|
158
|
+
logger_1.logger.info({ repoPath }, 'Repository is up-to-date, no changes to pull');
|
|
159
|
+
return { hasChanges: false, filesChanged: 0 };
|
|
160
|
+
}
|
|
161
|
+
// Fast-forward only — never auto-merge diverged histories.
|
|
162
|
+
logger_1.logger.info({ repoPath, filesChanged: diffSummary.files.length }, 'Pulling changes...');
|
|
163
|
+
await git.merge([remoteBranch, '--ff-only']);
|
|
164
|
+
logger_1.logger.info({
|
|
165
|
+
repoPath,
|
|
166
|
+
filesChanged: diffSummary.files.length,
|
|
167
|
+
insertions: diffSummary.insertions,
|
|
168
|
+
deletions: diffSummary.deletions,
|
|
169
|
+
}, 'Repository updated successfully');
|
|
170
|
+
return { hasChanges: true, filesChanged: diffSummary.files.length };
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
throw (0, errors_1.createGitError)('pull', error, repoPath);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Sync a single source repository
|
|
178
|
+
*/
|
|
179
|
+
async syncSource(source) {
|
|
180
|
+
const startTime = Date.now();
|
|
181
|
+
const sourcePath = path.join(this.baseDir, source.path);
|
|
182
|
+
logger_1.logger.info({
|
|
183
|
+
source: source.name,
|
|
184
|
+
path: sourcePath,
|
|
185
|
+
priority: source.priority
|
|
186
|
+
}, 'Syncing AI Resources source...');
|
|
187
|
+
try {
|
|
188
|
+
const exists = await this.repositoryExists(sourcePath);
|
|
189
|
+
if (!exists) {
|
|
190
|
+
// First time: clone repository
|
|
191
|
+
if (!source.git_url) {
|
|
192
|
+
logger_1.logger.warn({ source: source.name }, 'Source has no git_url configured, skipping clone');
|
|
193
|
+
return {
|
|
194
|
+
source: source.name,
|
|
195
|
+
action: 'skipped',
|
|
196
|
+
changes: 0,
|
|
197
|
+
duration: Date.now() - startTime
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
logger_1.logger.info({ source: source.name }, 'Repository does not exist, cloning...');
|
|
201
|
+
await this.cloneRepository(source.git_url, sourcePath, source.git_branch || 'main');
|
|
202
|
+
return {
|
|
203
|
+
source: source.name,
|
|
204
|
+
action: 'cloned',
|
|
205
|
+
changes: -1, // -1 means full clone
|
|
206
|
+
duration: Date.now() - startTime
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
// Repository exists: pull latest changes
|
|
211
|
+
logger_1.logger.info({ source: source.name }, 'Repository exists, pulling latest changes...');
|
|
212
|
+
const { hasChanges, filesChanged } = await this.pullRepository(sourcePath, source.git_branch || 'main');
|
|
213
|
+
return {
|
|
214
|
+
source: source.name,
|
|
215
|
+
action: hasChanges ? 'pulled' : 'up-to-date',
|
|
216
|
+
changes: filesChanged,
|
|
217
|
+
duration: Date.now() - startTime
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
logger_1.logger.error({
|
|
223
|
+
source: source.name,
|
|
224
|
+
error: error instanceof Error ? error.message : String(error)
|
|
225
|
+
}, 'Failed to sync source');
|
|
226
|
+
throw error;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Sync all enabled sources
|
|
231
|
+
*/
|
|
232
|
+
async syncAllSources() {
|
|
233
|
+
logger_1.logger.info('Starting multi-source sync...');
|
|
234
|
+
const sources = await this.getEnabledSources();
|
|
235
|
+
logger_1.logger.info({
|
|
236
|
+
totalSources: sources.length,
|
|
237
|
+
sourceNames: sources.map(s => s.name)
|
|
238
|
+
}, 'Found enabled sources');
|
|
239
|
+
const results = [];
|
|
240
|
+
for (const source of sources) {
|
|
241
|
+
try {
|
|
242
|
+
const result = await this.syncSource(source);
|
|
243
|
+
results.push(result);
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
logger_1.logger.error({
|
|
247
|
+
source: source.name,
|
|
248
|
+
error: error instanceof Error ? error.message : String(error)
|
|
249
|
+
}, 'Failed to sync source, continuing with next...');
|
|
250
|
+
results.push({
|
|
251
|
+
source: source.name,
|
|
252
|
+
action: 'skipped',
|
|
253
|
+
changes: 0,
|
|
254
|
+
duration: 0
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
logger_1.logger.info({
|
|
259
|
+
results,
|
|
260
|
+
totalSources: results.length,
|
|
261
|
+
cloned: results.filter(r => r.action === 'cloned').length,
|
|
262
|
+
pulled: results.filter(r => r.action === 'pulled').length,
|
|
263
|
+
upToDate: results.filter(r => r.action === 'up-to-date').length
|
|
264
|
+
}, 'Multi-source sync completed');
|
|
265
|
+
return results;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Check status of all sources without pulling
|
|
269
|
+
*/
|
|
270
|
+
async checkAllSources() {
|
|
271
|
+
const sources = await this.getEnabledSources();
|
|
272
|
+
const statuses = [];
|
|
273
|
+
for (const source of sources) {
|
|
274
|
+
const sourcePath = path.join(this.baseDir, source.path);
|
|
275
|
+
const exists = await this.repositoryExists(sourcePath);
|
|
276
|
+
let repoUrl = null;
|
|
277
|
+
if (exists) {
|
|
278
|
+
repoUrl = await this.getRepoUrl(sourcePath);
|
|
279
|
+
}
|
|
280
|
+
statuses.push({
|
|
281
|
+
source: source.name,
|
|
282
|
+
exists,
|
|
283
|
+
hasRemote: !!repoUrl,
|
|
284
|
+
repoUrl
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
return statuses;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// Export singleton instance
|
|
291
|
+
const AI_RESOURCES_BASE = path.resolve(process.cwd(), '../AI-Resources');
|
|
292
|
+
exports.multiSourceGitManager = new MultiSourceGitManager(AI_RESOURCES_BASE);
|
|
293
|
+
//# sourceMappingURL=multi-source-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-source-manager.js","sourceRoot":"","sources":["../../src/git/multi-source-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Operations Module
|
|
3
|
+
* Per-repo git helpers used by upload_resource to target a specific source repo.
|
|
4
|
+
* All repo URLs and branches come from AI-Resources/ai-resources-config.json —
|
|
5
|
+
* not from environment variables.
|
|
6
|
+
*/
|
|
7
|
+
declare class GitOperations {
|
|
8
|
+
/**
|
|
9
|
+
* Check whether a git repository exists at an arbitrary local path
|
|
10
|
+
*/
|
|
11
|
+
repositoryExistsAt(repoPath: string): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* Get current branch of an arbitrary local repo
|
|
14
|
+
*/
|
|
15
|
+
getCurrentBranchAt(repoPath: string): Promise<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Commit and push to a specific repo / remote url / branch.
|
|
18
|
+
* Creates a unique remote testing branch and returns a PR URL.
|
|
19
|
+
*/
|
|
20
|
+
commitAndPushRepo(repoPath: string, remoteUrl: string, baseBranch: string, message: string, files?: string[]): Promise<{
|
|
21
|
+
commitHash: string;
|
|
22
|
+
prUrl?: string;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
export declare const gitOperations: GitOperations;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/git/operations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,cAAM,aAAa;IAGjB;;OAEG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU5D;;OAEG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAU3D;;;OAGG;IACG,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAuCnD;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Git Operations Module
|
|
4
|
+
* Per-repo git helpers used by upload_resource to target a specific source repo.
|
|
5
|
+
* All repo URLs and branches come from AI-Resources/ai-resources-config.json —
|
|
6
|
+
* not from environment variables.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.gitOperations = void 0;
|
|
13
|
+
const simple_git_1 = __importDefault(require("simple-git"));
|
|
14
|
+
const config_1 = require("../config");
|
|
15
|
+
const logger_1 = require("../utils/logger");
|
|
16
|
+
const errors_1 = require("../types/errors");
|
|
17
|
+
class GitOperations {
|
|
18
|
+
// ---- Per-repo helpers (used by upload_resource to target a specific source) ----
|
|
19
|
+
/**
|
|
20
|
+
* Check whether a git repository exists at an arbitrary local path
|
|
21
|
+
*/
|
|
22
|
+
async repositoryExistsAt(repoPath) {
|
|
23
|
+
try {
|
|
24
|
+
const git = (0, simple_git_1.default)({ baseDir: repoPath, binary: 'git', maxConcurrentProcesses: 6 });
|
|
25
|
+
await git.status();
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get current branch of an arbitrary local repo
|
|
34
|
+
*/
|
|
35
|
+
async getCurrentBranchAt(repoPath) {
|
|
36
|
+
try {
|
|
37
|
+
const git = (0, simple_git_1.default)({ baseDir: repoPath, binary: 'git', maxConcurrentProcesses: 6 });
|
|
38
|
+
const branchSummary = await git.branch();
|
|
39
|
+
return branchSummary.current;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
throw (0, errors_1.createGitError)('get-branch', error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Commit and push to a specific repo / remote url / branch.
|
|
47
|
+
* Creates a unique remote testing branch and returns a PR URL.
|
|
48
|
+
*/
|
|
49
|
+
async commitAndPushRepo(repoPath, remoteUrl, baseBranch, message, files) {
|
|
50
|
+
try {
|
|
51
|
+
const git = (0, simple_git_1.default)({ baseDir: repoPath, binary: 'git', maxConcurrentProcesses: 6 });
|
|
52
|
+
logger_1.logger.info({ repoPath, remoteUrl, message, fileCount: files?.length }, 'Committing and pushing to source repo...');
|
|
53
|
+
await git.addConfig('user.name', config_1.config.git.userName);
|
|
54
|
+
await git.addConfig('user.email', config_1.config.git.userEmail);
|
|
55
|
+
const branchSummary = await git.branch();
|
|
56
|
+
const currentBranch = branchSummary.current;
|
|
57
|
+
const timestamp = Date.now();
|
|
58
|
+
const randomSuffix = Math.random().toString(36).substring(2, 8);
|
|
59
|
+
const remoteBranchName = `dev-${currentBranch}-testing-${timestamp}-${randomSuffix}`;
|
|
60
|
+
logger_1.logger.info({ remoteBranchName }, 'Generated remote branch name for PR');
|
|
61
|
+
if (files && files.length > 0) {
|
|
62
|
+
await git.add(files);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
await git.add('.');
|
|
66
|
+
}
|
|
67
|
+
const commitResult = await git.commit(message);
|
|
68
|
+
const commitHash = commitResult.commit;
|
|
69
|
+
logger_1.logger.info({ commitHash }, 'Git commit created');
|
|
70
|
+
await git.push(remoteUrl, `${currentBranch}:${remoteBranchName}`);
|
|
71
|
+
logger_1.logger.info({ remoteBranchName }, 'Git push completed');
|
|
72
|
+
const repoBaseUrl = remoteUrl.replace(/\.git$/, '');
|
|
73
|
+
const prUrl = `${repoBaseUrl}/compare/${baseBranch}...${remoteBranchName}`;
|
|
74
|
+
logger_1.logger.info({ prUrl, commitHash }, 'PR URL generated');
|
|
75
|
+
return { commitHash, prUrl };
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
throw (0, errors_1.createGitError)('commit-push', error, remoteUrl);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.gitOperations = new GitOperations();
|
|
83
|
+
//# sourceMappingURL=operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/git/operations.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* CSP AI Agent MCP Server - Main Entry Point
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const config_1 = require("./config");
|
|
8
|
+
const logger_1 = require("./utils/logger");
|
|
9
|
+
const log_cleaner_1 = require("./utils/log-cleaner");
|
|
10
|
+
const server_1 = require("./server");
|
|
11
|
+
const token_validator_1 = require("./auth/token-validator");
|
|
12
|
+
const manager_1 = require("./session/manager");
|
|
13
|
+
// Global error handlers
|
|
14
|
+
process.on('uncaughtException', (error) => {
|
|
15
|
+
// Handle EPIPE and ECONNRESET gracefully (client disconnected)
|
|
16
|
+
if (error.message.includes('EPIPE') || error.message.includes('ECONNRESET')) {
|
|
17
|
+
logger_1.logger.debug({
|
|
18
|
+
error: error.message,
|
|
19
|
+
type: 'uncaught_exception_network'
|
|
20
|
+
}, 'Client disconnected (EPIPE/ECONNRESET)');
|
|
21
|
+
return; // Don't exit for network errors
|
|
22
|
+
}
|
|
23
|
+
// For other uncaught exceptions, log and exit
|
|
24
|
+
logger_1.logger.error({ error, type: 'uncaught_exception' }, `Uncaught Exception: ${error.message}`);
|
|
25
|
+
process.exit(1);
|
|
26
|
+
});
|
|
27
|
+
process.on('unhandledRejection', (reason, _promise) => {
|
|
28
|
+
logger_1.logger.error({
|
|
29
|
+
type: 'unhandled_rejection',
|
|
30
|
+
reason: reason instanceof Error ? reason.message : String(reason),
|
|
31
|
+
stack: reason instanceof Error ? reason.stack : undefined,
|
|
32
|
+
}, 'Unhandled Promise Rejection');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
});
|
|
35
|
+
async function main() {
|
|
36
|
+
logger_1.logger.info({
|
|
37
|
+
nodeEnv: config_1.config.nodeEnv,
|
|
38
|
+
port: config_1.config.port,
|
|
39
|
+
logLevel: config_1.config.logLevel,
|
|
40
|
+
}, 'Starting CSP AI Agent MCP Server...');
|
|
41
|
+
// Start log cleanup scheduler
|
|
42
|
+
const cleanupTimer = (0, log_cleaner_1.startLogCleanupSchedule)();
|
|
43
|
+
try {
|
|
44
|
+
// Start MCP Server
|
|
45
|
+
await (0, server_1.startServer)();
|
|
46
|
+
logger_1.logger.info({ port: config_1.config.port }, `✅ CSP AI Agent MCP Server started successfully`);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
logger_1.logger.error({ error }, 'Failed to start server');
|
|
50
|
+
(0, log_cleaner_1.stopLogCleanupSchedule)(cleanupTimer);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
// Graceful shutdown handlers
|
|
54
|
+
let isShuttingDown = false;
|
|
55
|
+
const SHUTDOWN_TIMEOUT = Number(process.env.SHUTDOWN_TIMEOUT) || 30000; // 30 seconds default
|
|
56
|
+
const shutdown = async (signal) => {
|
|
57
|
+
// Prevent multiple shutdown attempts
|
|
58
|
+
if (isShuttingDown) {
|
|
59
|
+
logger_1.logger.warn({ signal }, 'Shutdown already in progress, ignoring signal');
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
isShuttingDown = true;
|
|
63
|
+
logger_1.logger.info({ signal, timeout: SHUTDOWN_TIMEOUT }, `Received ${signal}, starting graceful shutdown...`);
|
|
64
|
+
// Set timeout for forced shutdown
|
|
65
|
+
const shutdownTimer = setTimeout(() => {
|
|
66
|
+
logger_1.logger.error({ timeout: SHUTDOWN_TIMEOUT }, `Graceful shutdown timeout (${SHUTDOWN_TIMEOUT}ms), forcing exit`);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}, SHUTDOWN_TIMEOUT);
|
|
69
|
+
try {
|
|
70
|
+
// Phase 1: Stop accepting new requests
|
|
71
|
+
logger_1.logger.info('Phase 1: Stopping new requests...');
|
|
72
|
+
// Phase 2: Wait for ongoing requests to complete
|
|
73
|
+
logger_1.logger.info('Phase 2: Waiting for ongoing requests to complete...');
|
|
74
|
+
// Stop MCP Server (this will close all active sessions and connections)
|
|
75
|
+
await (0, server_1.stopServer)();
|
|
76
|
+
// Phase 3: Stop background tasks
|
|
77
|
+
logger_1.logger.info('Phase 3: Stopping background tasks...');
|
|
78
|
+
// Stop log cleanup
|
|
79
|
+
(0, log_cleaner_1.stopLogCleanupSchedule)(cleanupTimer);
|
|
80
|
+
// Stop session cleanup
|
|
81
|
+
manager_1.sessionManager.stopCleanup();
|
|
82
|
+
logger_1.logger.info('Session cleanup stopped');
|
|
83
|
+
// Stop token cache cleanup
|
|
84
|
+
(0, token_validator_1.stopCacheCleanup)();
|
|
85
|
+
logger_1.logger.info('Token cache cleanup stopped');
|
|
86
|
+
// Phase 4: Flush logs
|
|
87
|
+
logger_1.logger.info('Phase 4: Flushing logs...');
|
|
88
|
+
// Give logger time to flush
|
|
89
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
90
|
+
// Clear shutdown timeout
|
|
91
|
+
clearTimeout(shutdownTimer);
|
|
92
|
+
logger_1.logger.info('✅ Graceful shutdown completed successfully');
|
|
93
|
+
process.exit(0);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
logger_1.logger.error({ error }, 'Error during graceful shutdown');
|
|
97
|
+
clearTimeout(shutdownTimer);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
process.on('SIGINT', () => void shutdown('SIGINT'));
|
|
102
|
+
process.on('SIGTERM', () => void shutdown('SIGTERM'));
|
|
103
|
+
}
|
|
104
|
+
// Start the application
|
|
105
|
+
void main().catch((error) => {
|
|
106
|
+
logger_1.logger.error({ error }, 'Fatal error during startup');
|
|
107
|
+
process.exit(1);
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { CacheManager } from '../cache/cache-manager.js';
|
|
2
|
+
export interface HealthStatus {
|
|
3
|
+
status: 'healthy' | 'unhealthy';
|
|
4
|
+
timestamp: string;
|
|
5
|
+
services: {
|
|
6
|
+
http: 'up' | 'down';
|
|
7
|
+
redis: 'up' | 'down' | 'not_configured';
|
|
8
|
+
cache: 'healthy' | 'degraded' | 'down';
|
|
9
|
+
};
|
|
10
|
+
details?: {
|
|
11
|
+
redisError?: string;
|
|
12
|
+
cacheError?: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export declare class HealthChecker {
|
|
16
|
+
private cacheManager;
|
|
17
|
+
constructor(cacheManager?: CacheManager);
|
|
18
|
+
/**
|
|
19
|
+
* Check HTTP Server health
|
|
20
|
+
*/
|
|
21
|
+
private checkHttpServer;
|
|
22
|
+
/**
|
|
23
|
+
* Check Redis connection health
|
|
24
|
+
*/
|
|
25
|
+
private checkRedis;
|
|
26
|
+
/**
|
|
27
|
+
* Check Cache health
|
|
28
|
+
*/
|
|
29
|
+
private checkCache;
|
|
30
|
+
/**
|
|
31
|
+
* Perform comprehensive health check
|
|
32
|
+
*/
|
|
33
|
+
check(): Promise<HealthStatus>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/monitoring/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QACR,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;QACpB,KAAK,EAAE,IAAI,GAAG,MAAM,GAAG,gBAAgB,CAAC;QACxC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;KACxC,CAAC;IACF,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAA6B;gBAErC,YAAY,CAAC,EAAE,YAAY;IAIvC;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;YACW,UAAU;IA+BxB;;OAEG;IACH,OAAO,CAAC,UAAU;IA2BlB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;CAiCrC"}
|