@eui/mcp 1.0.3
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 +846 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +27 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +224 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +171 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +100 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/loader/cache-manager.d.ts +74 -0
- package/dist/loader/cache-manager.d.ts.map +1 -0
- package/dist/loader/cache-manager.js +107 -0
- package/dist/loader/cache-manager.js.map +1 -0
- package/dist/loader/documentation-loader.d.ts +57 -0
- package/dist/loader/documentation-loader.d.ts.map +1 -0
- package/dist/loader/documentation-loader.js +81 -0
- package/dist/loader/documentation-loader.js.map +1 -0
- package/dist/loader/documentation-source.d.ts +37 -0
- package/dist/loader/documentation-source.d.ts.map +1 -0
- package/dist/loader/documentation-source.js +2 -0
- package/dist/loader/documentation-source.js.map +1 -0
- package/dist/loader/errors.d.ts +34 -0
- package/dist/loader/errors.d.ts.map +1 -0
- package/dist/loader/errors.js +65 -0
- package/dist/loader/errors.js.map +1 -0
- package/dist/loader/http-client.d.ts +43 -0
- package/dist/loader/http-client.d.ts.map +1 -0
- package/dist/loader/http-client.js +144 -0
- package/dist/loader/http-client.js.map +1 -0
- package/dist/loader/index.d.ts +6 -0
- package/dist/loader/index.d.ts.map +1 -0
- package/dist/loader/index.js +5 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/local-documentation-source.d.ts +62 -0
- package/dist/loader/local-documentation-source.d.ts.map +1 -0
- package/dist/loader/local-documentation-source.js +190 -0
- package/dist/loader/local-documentation-source.js.map +1 -0
- package/dist/loader/path-type-detector.d.ts +34 -0
- package/dist/loader/path-type-detector.d.ts.map +1 -0
- package/dist/loader/path-type-detector.js +78 -0
- package/dist/loader/path-type-detector.js.map +1 -0
- package/dist/loader/remote-documentation-source.d.ts +112 -0
- package/dist/loader/remote-documentation-source.d.ts.map +1 -0
- package/dist/loader/remote-documentation-source.js +252 -0
- package/dist/loader/remote-documentation-source.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +211 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +65 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +224 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/publish/index.d.ts +8 -0
- package/dist/publish/index.d.ts.map +1 -0
- package/dist/publish/index.js +8 -0
- package/dist/publish/index.js.map +1 -0
- package/dist/publish/publish-utils.d.ts +74 -0
- package/dist/publish/publish-utils.d.ts.map +1 -0
- package/dist/publish/publish-utils.js +170 -0
- package/dist/publish/publish-utils.js.map +1 -0
- package/dist/query/component-query.d.ts +33 -0
- package/dist/query/component-query.d.ts.map +1 -0
- package/dist/query/component-query.js +63 -0
- package/dist/query/component-query.js.map +1 -0
- package/dist/query/index-builder.d.ts +79 -0
- package/dist/query/index-builder.d.ts.map +1 -0
- package/dist/query/index-builder.js +217 -0
- package/dist/query/index-builder.js.map +1 -0
- package/dist/query/index.d.ts +5 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +6 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/result-formatter.d.ts +108 -0
- package/dist/query/result-formatter.d.ts.map +1 -0
- package/dist/query/result-formatter.js +165 -0
- package/dist/query/result-formatter.js.map +1 -0
- package/dist/query/search-engine.d.ts +54 -0
- package/dist/query/search-engine.d.ts.map +1 -0
- package/dist/query/search-engine.js +178 -0
- package/dist/query/search-engine.js.map +1 -0
- package/dist/test-error.ts +1 -0
- package/dist/tools/get-component-docs.d.ts +43 -0
- package/dist/tools/get-component-docs.d.ts.map +1 -0
- package/dist/tools/get-component-docs.js +55 -0
- package/dist/tools/get-component-docs.js.map +1 -0
- package/dist/tools/get-component-examples.d.ts +45 -0
- package/dist/tools/get-component-examples.d.ts.map +1 -0
- package/dist/tools/get-component-examples.js +56 -0
- package/dist/tools/get-component-examples.js.map +1 -0
- package/dist/tools/get-component-inputs.d.ts +44 -0
- package/dist/tools/get-component-inputs.d.ts.map +1 -0
- package/dist/tools/get-component-inputs.js +55 -0
- package/dist/tools/get-component-inputs.js.map +1 -0
- package/dist/tools/get-component-outputs.d.ts +44 -0
- package/dist/tools/get-component-outputs.d.ts.map +1 -0
- package/dist/tools/get-component-outputs.js +55 -0
- package/dist/tools/get-component-outputs.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-components.d.ts +69 -0
- package/dist/tools/list-components.d.ts.map +1 -0
- package/dist/tools/list-components.js +84 -0
- package/dist/tools/list-components.js.map +1 -0
- package/dist/tools/search-components.d.ts +69 -0
- package/dist/tools/search-components.d.ts.map +1 -0
- package/dist/tools/search-components.js +98 -0
- package/dist/tools/search-components.js.map +1 -0
- package/dist/types/compodoc.d.ts +261 -0
- package/dist/types/compodoc.d.ts.map +1 -0
- package/dist/types/compodoc.js +5 -0
- package/dist/types/compodoc.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +91 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +186 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/credential-masking.d.ts +90 -0
- package/dist/utils/credential-masking.d.ts.map +1 -0
- package/dist/utils/credential-masking.js +202 -0
- package/dist/utils/credential-masking.js.map +1 -0
- package/dist/utils/error-handler.d.ts +68 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +184 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/errors.d.ts +156 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +242 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +16 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +76 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +150 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/retry.d.ts +19 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +81 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/version/changelog-file-utils.d.ts +69 -0
- package/dist/version/changelog-file-utils.d.ts.map +1 -0
- package/dist/version/changelog-file-utils.js +161 -0
- package/dist/version/changelog-file-utils.js.map +1 -0
- package/dist/version/changelog-utils.d.ts +98 -0
- package/dist/version/changelog-utils.d.ts.map +1 -0
- package/dist/version/changelog-utils.js +198 -0
- package/dist/version/changelog-utils.js.map +1 -0
- package/dist/version/dry-run-utils.d.ts +108 -0
- package/dist/version/dry-run-utils.d.ts.map +1 -0
- package/dist/version/dry-run-utils.js +126 -0
- package/dist/version/dry-run-utils.js.map +1 -0
- package/dist/version/git-tag-utils.d.ts +50 -0
- package/dist/version/git-tag-utils.d.ts.map +1 -0
- package/dist/version/git-tag-utils.js +66 -0
- package/dist/version/git-tag-utils.js.map +1 -0
- package/dist/version/index.d.ts +11 -0
- package/dist/version/index.d.ts.map +1 -0
- package/dist/version/index.js +11 -0
- package/dist/version/index.js.map +1 -0
- package/dist/version/release-utils.d.ts +94 -0
- package/dist/version/release-utils.d.ts.map +1 -0
- package/dist/version/release-utils.js +170 -0
- package/dist/version/release-utils.js.map +1 -0
- package/dist/version/rollback-utils.d.ts +47 -0
- package/dist/version/rollback-utils.d.ts.map +1 -0
- package/dist/version/rollback-utils.js +73 -0
- package/dist/version/rollback-utils.js.map +1 -0
- package/dist/version/version-manager.d.ts +98 -0
- package/dist/version/version-manager.d.ts.map +1 -0
- package/dist/version/version-manager.js +158 -0
- package/dist/version/version-manager.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-documentation-source.d.ts","sourceRoot":"","sources":["../../src/loader/remote-documentation-source.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAK7D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACjD,4CAA4C;IAC5C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,WAAW,CAAC,CAAwB;IAC5C,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAAC,CAAwC;IACjE,OAAO,CAAC,eAAe,CAAC,CAAyB;gBAErC,OAAO,EAAE,mBAAmB;IAmBxC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAIjC;;;;OAIG;IACH,eAAe,IAAI,IAAI;IAcvB;;;;;;OAMG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrC;;;;OAIG;IACH,cAAc,IAAI,qBAAqB,GAAG,SAAS;IAInD;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B;;;;;;;OAOG;YACW,IAAI;IA8DlB;;;;;OAKG;YACW,kBAAkB;IAgEhC;;;;;;;OAOG;IACH,OAAO,CAAC,SAAS;IASjB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CAkB1B"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote documentation source - loads documentation from HTTP/HTTPS URLs
|
|
3
|
+
*/
|
|
4
|
+
import { HttpClient } from './http-client.js';
|
|
5
|
+
import { CacheManager } from './cache-manager.js';
|
|
6
|
+
import { HttpError, ParseError } from './errors.js';
|
|
7
|
+
/**
|
|
8
|
+
* RemoteDocumentationSource class
|
|
9
|
+
* Implements DocumentationSource interface for remote HTTP/HTTPS sources
|
|
10
|
+
*
|
|
11
|
+
* Features:
|
|
12
|
+
* - Fetches documentation from remote URLs
|
|
13
|
+
* - Caches responses with ETag/Last-Modified headers
|
|
14
|
+
* - Polls for updates using conditional requests
|
|
15
|
+
* - Handles network errors with retry logic
|
|
16
|
+
*/
|
|
17
|
+
export class RemoteDocumentationSource {
|
|
18
|
+
url;
|
|
19
|
+
httpClient;
|
|
20
|
+
cacheManager;
|
|
21
|
+
pollingTimer;
|
|
22
|
+
currentData;
|
|
23
|
+
pollingInterval;
|
|
24
|
+
onReloadCallback;
|
|
25
|
+
onErrorCallback;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.url = options.url;
|
|
28
|
+
this.pollingInterval = options.pollingInterval;
|
|
29
|
+
this.onReloadCallback = options.onReload;
|
|
30
|
+
this.onErrorCallback = options.onError;
|
|
31
|
+
// Initialize HTTP client with retry logic
|
|
32
|
+
const httpClientOptions = {
|
|
33
|
+
timeout: options.timeout,
|
|
34
|
+
maxRetries: options.maxRetries,
|
|
35
|
+
retryDelay: 1000, // Base delay for exponential backoff
|
|
36
|
+
userAgent: 'DocumentationLoader/1.0',
|
|
37
|
+
};
|
|
38
|
+
this.httpClient = new HttpClient(httpClientOptions);
|
|
39
|
+
// Initialize cache manager
|
|
40
|
+
this.cacheManager = new CacheManager();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Load documentation from the remote URL
|
|
44
|
+
*
|
|
45
|
+
* @returns Promise resolving to LoadResult with success status and data or error
|
|
46
|
+
*/
|
|
47
|
+
async load() {
|
|
48
|
+
return this.fetchDocumentation();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Start monitoring for changes by polling the remote URL
|
|
52
|
+
*
|
|
53
|
+
* Uses setInterval to periodically check for updates using conditional requests
|
|
54
|
+
*/
|
|
55
|
+
startMonitoring() {
|
|
56
|
+
// Don't start if already monitoring
|
|
57
|
+
if (this.pollingTimer) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Start polling at the configured interval
|
|
61
|
+
this.pollingTimer = setInterval(() => {
|
|
62
|
+
void this.poll();
|
|
63
|
+
}, this.pollingInterval);
|
|
64
|
+
console.log(`Started polling ${this.url} every ${this.pollingInterval}ms`);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Stop monitoring for changes
|
|
68
|
+
*
|
|
69
|
+
* Clears the polling interval
|
|
70
|
+
*
|
|
71
|
+
* @returns Promise that resolves when monitoring has been stopped
|
|
72
|
+
*/
|
|
73
|
+
async stopMonitoring() {
|
|
74
|
+
if (this.pollingTimer) {
|
|
75
|
+
clearInterval(this.pollingTimer);
|
|
76
|
+
this.pollingTimer = undefined;
|
|
77
|
+
console.log(`Stopped polling ${this.url}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get currently loaded documentation data
|
|
82
|
+
*
|
|
83
|
+
* @returns The currently loaded CompodocDocumentation or undefined if not loaded
|
|
84
|
+
*/
|
|
85
|
+
getCurrentData() {
|
|
86
|
+
return this.currentData;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Clean up resources and dispose of the source
|
|
90
|
+
*
|
|
91
|
+
* Stops monitoring and clears cached data
|
|
92
|
+
*
|
|
93
|
+
* @returns Promise that resolves when cleanup is complete
|
|
94
|
+
*/
|
|
95
|
+
async dispose() {
|
|
96
|
+
await this.stopMonitoring();
|
|
97
|
+
this.cacheManager.clear(this.url);
|
|
98
|
+
this.currentData = undefined;
|
|
99
|
+
this.onReloadCallback = undefined;
|
|
100
|
+
this.onErrorCallback = undefined;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Poll for updates using conditional requests
|
|
104
|
+
*
|
|
105
|
+
* Uses If-None-Match (ETag) and If-Modified-Since (Last-Modified) headers
|
|
106
|
+
* to minimize bandwidth. If the server returns 304 Not Modified, uses cached data.
|
|
107
|
+
*
|
|
108
|
+
* @private
|
|
109
|
+
*/
|
|
110
|
+
async poll() {
|
|
111
|
+
try {
|
|
112
|
+
console.log(`Polling ${this.url} for updates...`);
|
|
113
|
+
// Get conditional headers from cache
|
|
114
|
+
const conditionalHeaders = this.cacheManager.getConditionalHeaders(this.url);
|
|
115
|
+
// Fetch with conditional headers
|
|
116
|
+
const response = await this.httpClient.fetch(this.url, conditionalHeaders);
|
|
117
|
+
// Handle 304 Not Modified - no changes
|
|
118
|
+
if (response.status === 304) {
|
|
119
|
+
console.log(`No changes detected (304 Not Modified)`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// Handle successful response with new content
|
|
123
|
+
if (response.status === 200) {
|
|
124
|
+
// Parse JSON
|
|
125
|
+
const data = this.parseJson(response.data);
|
|
126
|
+
// Validate structure
|
|
127
|
+
const validationError = this.validateStructure(data);
|
|
128
|
+
if (validationError) {
|
|
129
|
+
throw new ParseError(validationError, response.data);
|
|
130
|
+
}
|
|
131
|
+
// Update cache
|
|
132
|
+
this.cacheManager.set(this.url, data, response.headers);
|
|
133
|
+
// Update current data
|
|
134
|
+
this.currentData = data;
|
|
135
|
+
console.log(`Documentation updated from ${this.url}`);
|
|
136
|
+
// Notify via callback
|
|
137
|
+
if (this.onReloadCallback) {
|
|
138
|
+
this.onReloadCallback(data);
|
|
139
|
+
}
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
// Handle error status codes
|
|
143
|
+
throw new HttpError(`HTTP ${response.status}: ${response.statusText}`, this.url, response.status, response.statusText);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
// Log error but continue using cached data
|
|
147
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
148
|
+
console.error(`Polling error for ${this.url}:`, errorMessage);
|
|
149
|
+
// Notify via callback
|
|
150
|
+
if (this.onErrorCallback) {
|
|
151
|
+
this.onErrorCallback(error instanceof Error ? error : new Error(errorMessage));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Fetch and parse documentation from the remote URL
|
|
157
|
+
*
|
|
158
|
+
* @private
|
|
159
|
+
* @returns Promise resolving to LoadResult
|
|
160
|
+
*/
|
|
161
|
+
async fetchDocumentation() {
|
|
162
|
+
try {
|
|
163
|
+
// Check cache first
|
|
164
|
+
const cachedEntry = this.cacheManager.get(this.url);
|
|
165
|
+
const conditionalHeaders = cachedEntry ? this.cacheManager.getConditionalHeaders(this.url) : undefined;
|
|
166
|
+
// Fetch from URL
|
|
167
|
+
const response = await this.httpClient.fetch(this.url, conditionalHeaders);
|
|
168
|
+
// Handle 304 Not Modified - use cached data
|
|
169
|
+
if (response.status === 304 && cachedEntry) {
|
|
170
|
+
console.log(`Using cached documentation (304 Not Modified)`);
|
|
171
|
+
this.currentData = cachedEntry.data;
|
|
172
|
+
return {
|
|
173
|
+
success: true,
|
|
174
|
+
data: cachedEntry.data,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
// Handle non-200 status codes
|
|
178
|
+
if (response.status !== 200) {
|
|
179
|
+
const error = new HttpError(`HTTP ${response.status}: ${response.statusText}`, this.url, response.status, response.statusText);
|
|
180
|
+
return {
|
|
181
|
+
success: false,
|
|
182
|
+
error: `${error.message} (URL: ${this.url})`,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
// Parse JSON
|
|
186
|
+
const data = this.parseJson(response.data);
|
|
187
|
+
// Validate structure
|
|
188
|
+
const validationError = this.validateStructure(data);
|
|
189
|
+
if (validationError) {
|
|
190
|
+
return {
|
|
191
|
+
success: false,
|
|
192
|
+
error: validationError,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// Update cache
|
|
196
|
+
this.cacheManager.set(this.url, data, response.headers);
|
|
197
|
+
// Store current data
|
|
198
|
+
this.currentData = data;
|
|
199
|
+
return {
|
|
200
|
+
success: true,
|
|
201
|
+
data,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
206
|
+
return {
|
|
207
|
+
success: false,
|
|
208
|
+
error: `Failed to fetch documentation from ${this.url}: ${errorMessage}`,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Parse JSON string into CompodocDocumentation
|
|
214
|
+
*
|
|
215
|
+
* @private
|
|
216
|
+
* @param content - JSON string to parse
|
|
217
|
+
* @returns Parsed CompodocDocumentation object
|
|
218
|
+
* @throws ParseError if JSON is invalid
|
|
219
|
+
*/
|
|
220
|
+
parseJson(content) {
|
|
221
|
+
try {
|
|
222
|
+
return JSON.parse(content);
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
226
|
+
throw new ParseError(`Failed to parse JSON: ${errorMessage}`, content);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Validate the basic structure of the documentation
|
|
231
|
+
*
|
|
232
|
+
* @private
|
|
233
|
+
* @param data - Data to validate
|
|
234
|
+
* @returns Error message if validation fails, null otherwise
|
|
235
|
+
*/
|
|
236
|
+
validateStructure(data) {
|
|
237
|
+
if (!data || typeof data !== 'object') {
|
|
238
|
+
return 'Documentation must be an object';
|
|
239
|
+
}
|
|
240
|
+
const doc = data;
|
|
241
|
+
// Check for required top-level arrays
|
|
242
|
+
const requiredArrays = ['pipes', 'components', 'directives', 'injectables', 'interfaces', 'classes', 'modules'];
|
|
243
|
+
for (const key of requiredArrays) {
|
|
244
|
+
const value = doc[key];
|
|
245
|
+
if (value !== undefined && !Array.isArray(value)) {
|
|
246
|
+
return `${key} must be an array`;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=remote-documentation-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-documentation-source.js","sourceRoot":"","sources":["../../src/loader/remote-documentation-source.ts"],"names":[],"mappings":"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"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Main entry point for EUI Compodoc MCP Server
|
|
4
|
+
* Initializes configuration, loads documentation, and starts the MCP server
|
|
5
|
+
*/
|
|
6
|
+
import { loadConfig } from './config/index.js';
|
|
7
|
+
import { DocumentationLoader } from './loader/index.js';
|
|
8
|
+
import { IndexBuilder } from './query/index-builder.js';
|
|
9
|
+
import { CompodocMcpServer } from './mcp/index.js';
|
|
10
|
+
import { initLogger, getLogger } from './utils/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Main application state
|
|
13
|
+
*/
|
|
14
|
+
let server = null;
|
|
15
|
+
let loader = null;
|
|
16
|
+
let isShuttingDown = false;
|
|
17
|
+
/**
|
|
18
|
+
* Main application entry point
|
|
19
|
+
*/
|
|
20
|
+
async function main() {
|
|
21
|
+
try {
|
|
22
|
+
// Load configuration
|
|
23
|
+
const configResult = loadConfig();
|
|
24
|
+
if (!configResult.success || !configResult.config) {
|
|
25
|
+
console.error('Failed to load configuration');
|
|
26
|
+
if (configResult.errors) {
|
|
27
|
+
configResult.errors.forEach((error) => console.error(` - ${error}`));
|
|
28
|
+
}
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
const config = configResult.config;
|
|
32
|
+
// Initialize logger
|
|
33
|
+
const logger = initLogger({
|
|
34
|
+
level: config.logging.level,
|
|
35
|
+
format: config.logging.format,
|
|
36
|
+
});
|
|
37
|
+
logger.info('Starting EUI Compodoc MCP Server', {
|
|
38
|
+
version: config.server.version,
|
|
39
|
+
documentationPath: config.documentation.path,
|
|
40
|
+
});
|
|
41
|
+
// Load documentation
|
|
42
|
+
logger.info('Loading documentation...', {
|
|
43
|
+
path: config.documentation.path,
|
|
44
|
+
});
|
|
45
|
+
loader = new DocumentationLoader({
|
|
46
|
+
path: config.documentation.path,
|
|
47
|
+
watchForChanges: config.documentation.watchForChanges,
|
|
48
|
+
reloadDebounce: config.documentation.reloadDebounce,
|
|
49
|
+
onReload: handleDocumentationReload,
|
|
50
|
+
onError: handleDocumentationError,
|
|
51
|
+
});
|
|
52
|
+
const loadResult = await loader.load();
|
|
53
|
+
if (!loadResult.success || !loadResult.data) {
|
|
54
|
+
logger.error('Failed to load documentation', undefined, {
|
|
55
|
+
error: loadResult.error,
|
|
56
|
+
});
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
logger.info('Documentation loaded successfully', {
|
|
60
|
+
path: config.documentation.path,
|
|
61
|
+
});
|
|
62
|
+
// Build index
|
|
63
|
+
logger.info('Building component index...');
|
|
64
|
+
const indexBuilder = new IndexBuilder();
|
|
65
|
+
let index;
|
|
66
|
+
try {
|
|
67
|
+
index = indexBuilder.build(loadResult.data);
|
|
68
|
+
const stats = indexBuilder.getStatistics(index);
|
|
69
|
+
logger.info('Index built successfully', {
|
|
70
|
+
totalCount: stats.totalCount,
|
|
71
|
+
components: stats.componentCount,
|
|
72
|
+
directives: stats.directiveCount,
|
|
73
|
+
pipes: stats.pipeCount,
|
|
74
|
+
services: stats.serviceCount,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
logger.error('Failed to build index', error instanceof Error ? error : new Error(String(error)));
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
// Initialize MCP server
|
|
82
|
+
logger.info('Initializing MCP server...');
|
|
83
|
+
server = new CompodocMcpServer({
|
|
84
|
+
name: config.server.name,
|
|
85
|
+
version: config.server.version,
|
|
86
|
+
}, index);
|
|
87
|
+
// Start server
|
|
88
|
+
logger.info('Starting MCP server...');
|
|
89
|
+
await server.start();
|
|
90
|
+
logger.info('MCP server started successfully', {
|
|
91
|
+
name: config.server.name,
|
|
92
|
+
version: config.server.version,
|
|
93
|
+
watchForChanges: config.documentation.watchForChanges,
|
|
94
|
+
});
|
|
95
|
+
// Health check
|
|
96
|
+
if (server.isHealthy()) {
|
|
97
|
+
logger.info('Health check passed');
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
logger.warn('Health check failed - server may not be fully operational');
|
|
101
|
+
}
|
|
102
|
+
// Log server statistics
|
|
103
|
+
const stats = server.getStats();
|
|
104
|
+
logger.debug('Server statistics', stats);
|
|
105
|
+
// Server is now running and will handle requests via stdio
|
|
106
|
+
logger.info('Server is ready to accept requests');
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
const logger = getLogger();
|
|
110
|
+
logger.error('Fatal error during startup', error instanceof Error ? error : new Error(String(error)));
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Handle documentation reload
|
|
116
|
+
*/
|
|
117
|
+
function handleDocumentationReload(data) {
|
|
118
|
+
const logger = getLogger();
|
|
119
|
+
logger.info('Documentation file changed, reloading...');
|
|
120
|
+
try {
|
|
121
|
+
// Rebuild index
|
|
122
|
+
const indexBuilder = new IndexBuilder();
|
|
123
|
+
const newIndex = indexBuilder.build(data);
|
|
124
|
+
// Update server with new index
|
|
125
|
+
if (server) {
|
|
126
|
+
server.updateIndex(newIndex);
|
|
127
|
+
const stats = indexBuilder.getStatistics(newIndex);
|
|
128
|
+
logger.info('Index updated successfully', {
|
|
129
|
+
totalCount: stats.totalCount,
|
|
130
|
+
components: stats.componentCount,
|
|
131
|
+
directives: stats.directiveCount,
|
|
132
|
+
pipes: stats.pipeCount,
|
|
133
|
+
services: stats.serviceCount,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
logger.error('Failed to reload documentation', error instanceof Error ? error : new Error(String(error)));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Handle documentation loading errors
|
|
143
|
+
*/
|
|
144
|
+
function handleDocumentationError(error) {
|
|
145
|
+
const logger = getLogger();
|
|
146
|
+
logger.error('Documentation loader error', error);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Graceful shutdown handler
|
|
150
|
+
*/
|
|
151
|
+
async function shutdown(signal) {
|
|
152
|
+
if (isShuttingDown) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
isShuttingDown = true;
|
|
156
|
+
const logger = getLogger();
|
|
157
|
+
logger.info(`Received ${signal}, shutting down gracefully...`);
|
|
158
|
+
try {
|
|
159
|
+
// Stop MCP server
|
|
160
|
+
if (server) {
|
|
161
|
+
logger.info('Stopping MCP server...');
|
|
162
|
+
await server.stop();
|
|
163
|
+
logger.info('MCP server stopped');
|
|
164
|
+
}
|
|
165
|
+
// Stop documentation loader
|
|
166
|
+
if (loader) {
|
|
167
|
+
logger.info('Stopping documentation loader...');
|
|
168
|
+
await loader.dispose();
|
|
169
|
+
logger.info('Documentation loader stopped');
|
|
170
|
+
}
|
|
171
|
+
logger.info('Shutdown complete');
|
|
172
|
+
process.exit(0);
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
logger.error('Error during shutdown', error instanceof Error ? error : new Error(String(error)));
|
|
176
|
+
process.exit(1);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Register signal handlers for graceful shutdown
|
|
181
|
+
*/
|
|
182
|
+
function registerSignalHandlers() {
|
|
183
|
+
// Handle SIGINT (Ctrl+C)
|
|
184
|
+
process.on('SIGINT', () => {
|
|
185
|
+
void shutdown('SIGINT');
|
|
186
|
+
});
|
|
187
|
+
// Handle SIGTERM (kill command)
|
|
188
|
+
process.on('SIGTERM', () => {
|
|
189
|
+
void shutdown('SIGTERM');
|
|
190
|
+
});
|
|
191
|
+
// Handle uncaught exceptions
|
|
192
|
+
process.on('uncaughtException', (error) => {
|
|
193
|
+
const logger = getLogger();
|
|
194
|
+
logger.error('Uncaught exception', error);
|
|
195
|
+
void shutdown('uncaughtException');
|
|
196
|
+
});
|
|
197
|
+
// Handle unhandled promise rejections
|
|
198
|
+
process.on('unhandledRejection', (reason) => {
|
|
199
|
+
const logger = getLogger();
|
|
200
|
+
logger.error('Unhandled promise rejection', reason instanceof Error ? reason : new Error(String(reason)));
|
|
201
|
+
void shutdown('unhandledRejection');
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
// Register signal handlers
|
|
205
|
+
registerSignalHandlers();
|
|
206
|
+
// Start the application
|
|
207
|
+
main().catch((error) => {
|
|
208
|
+
console.error('Fatal error:', error);
|
|
209
|
+
process.exit(1);
|
|
210
|
+
});
|
|
211
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAiC,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ComponentIndex } from '../query/index-builder.js';
|
|
2
|
+
export interface McpServerConfig {
|
|
3
|
+
name: string;
|
|
4
|
+
version: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ToolResponse {
|
|
7
|
+
content: Array<{
|
|
8
|
+
type: 'text';
|
|
9
|
+
text: string;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* CompodocMcpServer class
|
|
14
|
+
* Manages the MCP server lifecycle and tool registration
|
|
15
|
+
*/
|
|
16
|
+
export declare class CompodocMcpServer {
|
|
17
|
+
private server;
|
|
18
|
+
private index;
|
|
19
|
+
private query;
|
|
20
|
+
private searchEngine;
|
|
21
|
+
private formatter;
|
|
22
|
+
private tools;
|
|
23
|
+
private isRunning;
|
|
24
|
+
constructor(config: McpServerConfig, index: ComponentIndex);
|
|
25
|
+
/**
|
|
26
|
+
* Register all available tools
|
|
27
|
+
*/
|
|
28
|
+
private registerTools;
|
|
29
|
+
/**
|
|
30
|
+
* Set up MCP request handlers
|
|
31
|
+
*/
|
|
32
|
+
private setupHandlers;
|
|
33
|
+
/**
|
|
34
|
+
* Categorize errors for appropriate error codes
|
|
35
|
+
*/
|
|
36
|
+
private categorizeError;
|
|
37
|
+
/**
|
|
38
|
+
* Start the MCP server
|
|
39
|
+
*/
|
|
40
|
+
start(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Stop the MCP server
|
|
43
|
+
*/
|
|
44
|
+
stop(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Check if server is running
|
|
47
|
+
*/
|
|
48
|
+
isHealthy(): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Get server statistics
|
|
51
|
+
*/
|
|
52
|
+
getStats(): {
|
|
53
|
+
isRunning: boolean;
|
|
54
|
+
toolCount: number;
|
|
55
|
+
indexStats: {
|
|
56
|
+
totalComponents: number;
|
|
57
|
+
lastUpdated: Date;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Update the index (for hot reloading)
|
|
62
|
+
*/
|
|
63
|
+
updateIndex(newIndex: ComponentIndex): void;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAa3D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,SAAS,CAAkB;gBAEvB,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc;IA2B1D;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,OAAO,CAAC,aAAa;IA8FrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ;;;;;;;;IAWR;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAQ5C"}
|