@172ai/containers-mcp-server 1.12.5 → 1.12.7
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 +63 -0
- package/dist/server.d.ts +29 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +547 -0
- package/dist/server.js.map +1 -1
- package/dist/services/fixService.d.ts +166 -0
- package/dist/services/fixService.d.ts.map +1 -0
- package/dist/services/fixService.js +430 -0
- package/dist/services/fixService.js.map +1 -0
- package/dist/services/modificationService.d.ts +121 -0
- package/dist/services/modificationService.d.ts.map +1 -0
- package/dist/services/modificationService.js +137 -0
- package/dist/services/modificationService.js.map +1 -0
- package/dist/services/streamingService.d.ts +15 -1
- package/dist/services/streamingService.d.ts.map +1 -1
- package/dist/services/streamingService.js +55 -0
- package/dist/services/streamingService.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
import { authManager } from '../auth.js';
|
|
2
|
+
import { ErrorHandler } from '../utils/errorHandler.js';
|
|
3
|
+
/**
|
|
4
|
+
* Generate a unique request ID
|
|
5
|
+
*/
|
|
6
|
+
function generateRequestId() {
|
|
7
|
+
return `mcp_fix_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
8
|
+
}
|
|
9
|
+
export class FixService {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.mcpServer = null;
|
|
12
|
+
// Real-time streaming management
|
|
13
|
+
this.activeStreams = new Map();
|
|
14
|
+
this.progressUpdates = new Map();
|
|
15
|
+
this.streamAnalytics = {
|
|
16
|
+
totalFixes: 0,
|
|
17
|
+
activeFixes: 0,
|
|
18
|
+
completedFixes: 0,
|
|
19
|
+
failedFixes: 0,
|
|
20
|
+
averageFixTime: 0,
|
|
21
|
+
notificationsSent: 0,
|
|
22
|
+
errorsEncountered: 0,
|
|
23
|
+
lastActivity: new Date().toISOString()
|
|
24
|
+
};
|
|
25
|
+
this.httpClient = authManager.getHttpClient();
|
|
26
|
+
// Note: Fix events are handled via user-notifications stream
|
|
27
|
+
// Event handlers are registered in userNotificationManager, not directly here
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Set MCP server reference for progress notifications
|
|
31
|
+
*/
|
|
32
|
+
setMCPServer(server) {
|
|
33
|
+
this.mcpServer = server;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get stream analytics and monitoring information
|
|
37
|
+
*/
|
|
38
|
+
getStreamAnalytics() {
|
|
39
|
+
return {
|
|
40
|
+
...this.streamAnalytics,
|
|
41
|
+
activeStreams: Array.from(this.activeStreams.values())
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get progress update for a specific token
|
|
46
|
+
*/
|
|
47
|
+
getProgressUpdate(progressToken) {
|
|
48
|
+
const update = this.progressUpdates.get(progressToken);
|
|
49
|
+
if (!update)
|
|
50
|
+
return null;
|
|
51
|
+
// Check if expired (clean up stale data)
|
|
52
|
+
if (update.expiresAt && Date.now() > update.expiresAt) {
|
|
53
|
+
this.progressUpdates.delete(progressToken);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return update;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Handle fix-related streaming events (called by userNotificationManager)
|
|
60
|
+
* Note: This is not automatically registered - it's for future streaming integration
|
|
61
|
+
*/
|
|
62
|
+
handleFixEvent(event) {
|
|
63
|
+
try {
|
|
64
|
+
const { eventType, data } = event;
|
|
65
|
+
const { containerId, fixAttemptId } = data || {};
|
|
66
|
+
console.log(`[FixService] Received ${eventType} event for container ${containerId}, fix ${fixAttemptId}`);
|
|
67
|
+
// Update analytics
|
|
68
|
+
this.streamAnalytics.lastActivity = new Date().toISOString();
|
|
69
|
+
this.streamAnalytics.notificationsSent++;
|
|
70
|
+
// Find active stream for this fix
|
|
71
|
+
let activeStream;
|
|
72
|
+
for (const stream of this.activeStreams.values()) {
|
|
73
|
+
if (stream.containerId === containerId && stream.fixAttemptId === fixAttemptId) {
|
|
74
|
+
activeStream = stream;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Handle different event types
|
|
79
|
+
switch (eventType) {
|
|
80
|
+
case 'fix-analysis-started':
|
|
81
|
+
if (activeStream) {
|
|
82
|
+
activeStream.status = 'active';
|
|
83
|
+
activeStream.lastProgress = 10;
|
|
84
|
+
}
|
|
85
|
+
break;
|
|
86
|
+
case 'fix-analysis-completed':
|
|
87
|
+
if (activeStream) {
|
|
88
|
+
activeStream.lastProgress = 33;
|
|
89
|
+
}
|
|
90
|
+
this.updateProgressForStream(activeStream, {
|
|
91
|
+
stage: 'analysis_complete',
|
|
92
|
+
progress: 33,
|
|
93
|
+
message: data.message || 'Analysis completed',
|
|
94
|
+
fixAttemptId: fixAttemptId
|
|
95
|
+
});
|
|
96
|
+
break;
|
|
97
|
+
case 'fix-apply-started':
|
|
98
|
+
if (activeStream) {
|
|
99
|
+
activeStream.lastProgress = 50;
|
|
100
|
+
}
|
|
101
|
+
break;
|
|
102
|
+
case 'fix-apply-completed':
|
|
103
|
+
if (activeStream) {
|
|
104
|
+
activeStream.lastProgress = 66;
|
|
105
|
+
}
|
|
106
|
+
this.updateProgressForStream(activeStream, {
|
|
107
|
+
stage: 'fix_applied',
|
|
108
|
+
progress: 66,
|
|
109
|
+
message: data.message || 'Fix applied successfully'
|
|
110
|
+
});
|
|
111
|
+
break;
|
|
112
|
+
case 'fix-rebuild-started':
|
|
113
|
+
if (activeStream) {
|
|
114
|
+
activeStream.lastProgress = 75;
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
case 'fix-rebuild-completed':
|
|
118
|
+
if (activeStream) {
|
|
119
|
+
activeStream.status = 'completed';
|
|
120
|
+
activeStream.lastProgress = 100;
|
|
121
|
+
this.streamAnalytics.completedFixes++;
|
|
122
|
+
this.streamAnalytics.activeFixes = Math.max(0, this.streamAnalytics.activeFixes - 1);
|
|
123
|
+
// Calculate fix time
|
|
124
|
+
const fixTime = Date.now() - activeStream.startTime;
|
|
125
|
+
this.updateAverageFixTime(fixTime);
|
|
126
|
+
}
|
|
127
|
+
this.updateProgressForStream(activeStream, {
|
|
128
|
+
stage: 'completed',
|
|
129
|
+
progress: 100,
|
|
130
|
+
message: data.message || 'Fix completed successfully',
|
|
131
|
+
status: 'succeeded'
|
|
132
|
+
});
|
|
133
|
+
// Clean up after delay
|
|
134
|
+
setTimeout(() => {
|
|
135
|
+
if (activeStream) {
|
|
136
|
+
this.activeStreams.delete(activeStream.progressToken);
|
|
137
|
+
this.progressUpdates.delete(activeStream.progressToken);
|
|
138
|
+
}
|
|
139
|
+
}, 60000); // Keep for 1 minute
|
|
140
|
+
break;
|
|
141
|
+
case 'fix-rebuild-failed':
|
|
142
|
+
case 'fix-apply-failed':
|
|
143
|
+
case 'fix-analysis-failed':
|
|
144
|
+
if (activeStream) {
|
|
145
|
+
activeStream.status = 'failed';
|
|
146
|
+
this.streamAnalytics.failedFixes++;
|
|
147
|
+
this.streamAnalytics.activeFixes = Math.max(0, this.streamAnalytics.activeFixes - 1);
|
|
148
|
+
}
|
|
149
|
+
this.updateProgressForStream(activeStream, {
|
|
150
|
+
stage: 'failed',
|
|
151
|
+
progress: activeStream?.lastProgress || 0,
|
|
152
|
+
message: data.message || data.error || 'Fix failed',
|
|
153
|
+
error: data.error,
|
|
154
|
+
status: 'failed'
|
|
155
|
+
});
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
// Send notification to MCP client if server is available
|
|
159
|
+
if (this.mcpServer && activeStream?.progressToken) {
|
|
160
|
+
this.sendProgressNotification(activeStream.progressToken, eventType, data);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
console.error('[FixService] Error handling fix event:', error);
|
|
165
|
+
this.streamAnalytics.errorsEncountered++;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Update progress for a specific stream
|
|
170
|
+
*/
|
|
171
|
+
updateProgressForStream(stream, progressData) {
|
|
172
|
+
if (!stream)
|
|
173
|
+
return;
|
|
174
|
+
const existingProgress = this.progressUpdates.get(stream.progressToken) || {};
|
|
175
|
+
this.progressUpdates.set(stream.progressToken, {
|
|
176
|
+
...existingProgress,
|
|
177
|
+
...progressData,
|
|
178
|
+
timestamp: new Date().toISOString(),
|
|
179
|
+
expiresAt: Date.now() + 3600000 // 1 hour
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Send progress notification to MCP client
|
|
184
|
+
*/
|
|
185
|
+
sendProgressNotification(progressToken, eventType, data) {
|
|
186
|
+
if (!this.mcpServer)
|
|
187
|
+
return;
|
|
188
|
+
try {
|
|
189
|
+
this.mcpServer.notification({
|
|
190
|
+
method: 'notifications/progress',
|
|
191
|
+
params: {
|
|
192
|
+
progressToken,
|
|
193
|
+
progress: data.progress || 0,
|
|
194
|
+
total: 100,
|
|
195
|
+
message: data.message || eventType
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
console.error('[FixService] Error sending progress notification:', error);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Update average fix time
|
|
205
|
+
*/
|
|
206
|
+
updateAverageFixTime(newFixTime) {
|
|
207
|
+
const totalFixes = this.streamAnalytics.completedFixes;
|
|
208
|
+
if (totalFixes === 0) {
|
|
209
|
+
this.streamAnalytics.averageFixTime = newFixTime;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
this.streamAnalytics.averageFixTime =
|
|
213
|
+
(this.streamAnalytics.averageFixTime * (totalFixes - 1) + newFixTime) / totalFixes;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Fix a container (analyze + apply + rebuild workflow)
|
|
218
|
+
*/
|
|
219
|
+
async fixContainer(params) {
|
|
220
|
+
const { containerId, autoApply = true, progressToken } = params;
|
|
221
|
+
const requestId = generateRequestId();
|
|
222
|
+
try {
|
|
223
|
+
console.log(`[FixService] fixContainer called for ${containerId}, autoApply: ${autoApply}`);
|
|
224
|
+
// Create progress token if not provided
|
|
225
|
+
const token = progressToken || requestId;
|
|
226
|
+
// Track this fix operation
|
|
227
|
+
const startTime = Date.now();
|
|
228
|
+
this.streamAnalytics.totalFixes++;
|
|
229
|
+
this.streamAnalytics.activeFixes++;
|
|
230
|
+
// Make API request to fix endpoint
|
|
231
|
+
const response = await this.httpClient.post(`/containers/${containerId}/fix`, {
|
|
232
|
+
autoApply,
|
|
233
|
+
analyzeOnly: !autoApply
|
|
234
|
+
});
|
|
235
|
+
const result = response.data;
|
|
236
|
+
const fixAttemptId = result.fixAttemptId || result.data?.fixAttemptId;
|
|
237
|
+
if (fixAttemptId) {
|
|
238
|
+
// Register active stream for monitoring
|
|
239
|
+
this.activeStreams.set(token, {
|
|
240
|
+
containerId,
|
|
241
|
+
fixAttemptId,
|
|
242
|
+
progressToken: token,
|
|
243
|
+
streamId: `fix-${fixAttemptId}`,
|
|
244
|
+
startTime,
|
|
245
|
+
lastProgress: 0,
|
|
246
|
+
status: 'active'
|
|
247
|
+
});
|
|
248
|
+
// Initialize progress
|
|
249
|
+
this.progressUpdates.set(token, {
|
|
250
|
+
stage: 'started',
|
|
251
|
+
progress: 0,
|
|
252
|
+
message: 'Fix operation started',
|
|
253
|
+
fixAttemptId,
|
|
254
|
+
timestamp: new Date().toISOString(),
|
|
255
|
+
expiresAt: Date.now() + 3600000
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
return {
|
|
259
|
+
success: true,
|
|
260
|
+
containerId,
|
|
261
|
+
containerName: result.containerName || result.data?.containerName,
|
|
262
|
+
fixAttemptId,
|
|
263
|
+
message: result.message || 'Fix operation initiated successfully',
|
|
264
|
+
analysis: result.analysis || result.data?.analysis,
|
|
265
|
+
applied: result.applied !== undefined ? result.applied : autoApply,
|
|
266
|
+
autoApplied: autoApply,
|
|
267
|
+
buildStatus: result.buildStatus || result.data?.buildStatus
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
console.error(`[FixService] Error fixing container ${containerId}:`, error);
|
|
272
|
+
this.streamAnalytics.errorsEncountered++;
|
|
273
|
+
this.streamAnalytics.failedFixes++;
|
|
274
|
+
this.streamAnalytics.activeFixes = Math.max(0, this.streamAnalytics.activeFixes - 1);
|
|
275
|
+
throw ErrorHandler.processError(error, `Failed to fix container ${containerId}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Analyze container failure (without auto-applying fix)
|
|
280
|
+
*/
|
|
281
|
+
async analyzeFailure(params) {
|
|
282
|
+
const { containerId, progressToken } = params;
|
|
283
|
+
const requestId = generateRequestId();
|
|
284
|
+
try {
|
|
285
|
+
console.log(`[FixService] analyzeFailure called for ${containerId}`);
|
|
286
|
+
const response = await this.httpClient.post(`/containers/${containerId}/fix/analyze`);
|
|
287
|
+
const result = response.data;
|
|
288
|
+
return {
|
|
289
|
+
fixAttemptId: result.fixAttemptId || result.data?.fixAttemptId,
|
|
290
|
+
attemptNumber: result.attemptNumber || result.data?.attemptNumber || 1,
|
|
291
|
+
maxAttempts: result.maxAttempts || result.data?.maxAttempts || 100,
|
|
292
|
+
previousAttempts: result.previousAttempts || result.data?.previousAttempts || 0,
|
|
293
|
+
diagnosticSummary: result.diagnosticSummary || result.data?.diagnosticSummary || '',
|
|
294
|
+
rootCause: result.rootCause || result.data?.rootCause || '',
|
|
295
|
+
fixApproach: result.fixApproach || result.data?.fixApproach || '',
|
|
296
|
+
affectedFiles: result.affectedFiles || result.data?.affectedFiles || [],
|
|
297
|
+
severity: result.severity || result.data?.severity || 'medium',
|
|
298
|
+
fixConfidence: result.fixConfidence || result.data?.fixConfidence || 'medium',
|
|
299
|
+
fileChanges: result.fileChanges || result.data?.fileChanges || []
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
console.error(`[FixService] Error analyzing container ${containerId}:`, error);
|
|
304
|
+
throw ErrorHandler.processError(error, `Failed to analyze container ${containerId}`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Apply a specific fix and trigger rebuild
|
|
309
|
+
*/
|
|
310
|
+
async applyFix(params) {
|
|
311
|
+
const { containerId, fixAttemptId, progressToken } = params;
|
|
312
|
+
const requestId = generateRequestId();
|
|
313
|
+
try {
|
|
314
|
+
console.log(`[FixService] applyFix called for ${containerId}, fix ${fixAttemptId}`);
|
|
315
|
+
// Create progress token if not provided
|
|
316
|
+
const token = progressToken || requestId;
|
|
317
|
+
// Track this operation
|
|
318
|
+
const startTime = Date.now();
|
|
319
|
+
this.streamAnalytics.activeFixes++;
|
|
320
|
+
// Register active stream
|
|
321
|
+
this.activeStreams.set(token, {
|
|
322
|
+
containerId,
|
|
323
|
+
fixAttemptId,
|
|
324
|
+
progressToken: token,
|
|
325
|
+
streamId: `fix-${fixAttemptId}`,
|
|
326
|
+
startTime,
|
|
327
|
+
lastProgress: 0,
|
|
328
|
+
status: 'active'
|
|
329
|
+
});
|
|
330
|
+
// Make API request to apply fix
|
|
331
|
+
const response = await this.httpClient.post(`/containers/${containerId}/fix/apply`, {
|
|
332
|
+
fixAttemptId
|
|
333
|
+
});
|
|
334
|
+
const result = response.data;
|
|
335
|
+
return {
|
|
336
|
+
success: true,
|
|
337
|
+
containerId,
|
|
338
|
+
fixAttemptId,
|
|
339
|
+
message: result.message || 'Fix applied and rebuild triggered',
|
|
340
|
+
applied: true,
|
|
341
|
+
buildStatus: result.buildStatus || 'building'
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
catch (error) {
|
|
345
|
+
console.error(`[FixService] Error applying fix ${fixAttemptId}:`, error);
|
|
346
|
+
this.streamAnalytics.errorsEncountered++;
|
|
347
|
+
this.streamAnalytics.failedFixes++;
|
|
348
|
+
this.streamAnalytics.activeFixes = Math.max(0, this.streamAnalytics.activeFixes - 1);
|
|
349
|
+
throw ErrorHandler.processError(error, `Failed to apply fix ${fixAttemptId}`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Get fix history for a container
|
|
354
|
+
*/
|
|
355
|
+
async getFixHistory(params) {
|
|
356
|
+
const { containerId, limit = 10 } = params;
|
|
357
|
+
try {
|
|
358
|
+
console.log(`[FixService] getFixHistory called for ${containerId}`);
|
|
359
|
+
const response = await this.httpClient.get(`/containers/${containerId}/fix/history`, {
|
|
360
|
+
params: { limit }
|
|
361
|
+
});
|
|
362
|
+
const result = response.data;
|
|
363
|
+
const fixes = result.data || result.fixes || [];
|
|
364
|
+
return {
|
|
365
|
+
success: true,
|
|
366
|
+
containerId,
|
|
367
|
+
fixes,
|
|
368
|
+
totalCount: fixes.length
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
console.error(`[FixService] Error getting fix history for ${containerId}:`, error);
|
|
373
|
+
throw ErrorHandler.processError(error, `Failed to get fix history for ${containerId}`);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Get specific fix attempt status
|
|
378
|
+
*/
|
|
379
|
+
async getFixStatus(params) {
|
|
380
|
+
const { containerId, fixAttemptId } = params;
|
|
381
|
+
try {
|
|
382
|
+
console.log(`[FixService] getFixStatus called for ${containerId}, fix ${fixAttemptId}`);
|
|
383
|
+
const response = await this.httpClient.get(`/containers/${containerId}/fix/${fixAttemptId}`);
|
|
384
|
+
const result = response.data;
|
|
385
|
+
const fixData = result.data || result;
|
|
386
|
+
return {
|
|
387
|
+
id: fixData.id || fixAttemptId,
|
|
388
|
+
containerId: fixData.containerId || containerId,
|
|
389
|
+
attemptNumber: fixData.attemptNumber || 1,
|
|
390
|
+
status: fixData.status || 'pending_approval',
|
|
391
|
+
diagnosticSummary: fixData.diagnosticSummary || '',
|
|
392
|
+
rootCause: fixData.rootCause || '',
|
|
393
|
+
fixApproach: fixData.fixApproach || '',
|
|
394
|
+
fileChanges: fixData.fileChanges || [],
|
|
395
|
+
severity: fixData.severity || 'medium',
|
|
396
|
+
fixConfidence: fixData.fixConfidence || 'medium',
|
|
397
|
+
createdAt: fixData.createdAt || new Date().toISOString(),
|
|
398
|
+
updatedAt: fixData.updatedAt,
|
|
399
|
+
appliedAt: fixData.appliedAt,
|
|
400
|
+
completedAt: fixData.completedAt,
|
|
401
|
+
errorMessage: fixData.errorMessage
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
catch (error) {
|
|
405
|
+
console.error(`[FixService] Error getting fix status for ${fixAttemptId}:`, error);
|
|
406
|
+
throw ErrorHandler.processError(error, `Failed to get fix status for ${fixAttemptId}`);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Cancel fix monitoring for a progress token
|
|
411
|
+
*/
|
|
412
|
+
async cancelFixMonitoring(progressToken) {
|
|
413
|
+
try {
|
|
414
|
+
const stream = this.activeStreams.get(progressToken);
|
|
415
|
+
if (stream) {
|
|
416
|
+
stream.status = 'cancelled';
|
|
417
|
+
this.activeStreams.delete(progressToken);
|
|
418
|
+
this.progressUpdates.delete(progressToken);
|
|
419
|
+
this.streamAnalytics.activeFixes = Math.max(0, this.streamAnalytics.activeFixes - 1);
|
|
420
|
+
console.log(`[FixService] Cancelled monitoring for ${progressToken}`);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
catch (error) {
|
|
424
|
+
console.error('[FixService] Error cancelling fix monitoring:', error);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
// Export singleton instance
|
|
429
|
+
export const fixService = new FixService();
|
|
430
|
+
//# sourceMappingURL=fixService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixService.js","sourceRoot":"","sources":["../../src/services/fixService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
export interface Modification {
|
|
2
|
+
modificationId: string;
|
|
3
|
+
name: string;
|
|
4
|
+
category: string;
|
|
5
|
+
description: string;
|
|
6
|
+
estimatedImpact?: string;
|
|
7
|
+
priority?: string;
|
|
8
|
+
tags?: string[];
|
|
9
|
+
active?: boolean;
|
|
10
|
+
conflictsWith?: string[];
|
|
11
|
+
risks?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ModificationRecommendation {
|
|
14
|
+
modificationId: string;
|
|
15
|
+
name: string;
|
|
16
|
+
category: string;
|
|
17
|
+
description: string;
|
|
18
|
+
priority: 'high' | 'medium' | 'low';
|
|
19
|
+
reason: string;
|
|
20
|
+
estimatedImpact?: string;
|
|
21
|
+
applicability: string;
|
|
22
|
+
risks?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface AppliedModification {
|
|
25
|
+
modificationApplicationId: string;
|
|
26
|
+
modificationId: string;
|
|
27
|
+
modificationName: string;
|
|
28
|
+
category: string;
|
|
29
|
+
status: 'in_progress' | 'completed' | 'failed';
|
|
30
|
+
appliedAt: number;
|
|
31
|
+
appliedBy: string;
|
|
32
|
+
startVersion?: number;
|
|
33
|
+
endVersion?: number;
|
|
34
|
+
beforeDockerfile?: string;
|
|
35
|
+
afterDockerfile?: string;
|
|
36
|
+
diffSummary?: string;
|
|
37
|
+
aiModel?: string;
|
|
38
|
+
notes?: string;
|
|
39
|
+
error?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface ModificationListResponse {
|
|
42
|
+
modifications: Modification[];
|
|
43
|
+
count: number;
|
|
44
|
+
}
|
|
45
|
+
export interface AppliedModificationListResponse {
|
|
46
|
+
appliedModifications: AppliedModification[];
|
|
47
|
+
count: number;
|
|
48
|
+
hasMore: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface SuggestModificationsResponse {
|
|
51
|
+
recommendations: ModificationRecommendation[];
|
|
52
|
+
alreadyApplied: string[];
|
|
53
|
+
notApplicable: Array<{
|
|
54
|
+
modificationId: string;
|
|
55
|
+
name: string;
|
|
56
|
+
reason: string;
|
|
57
|
+
}>;
|
|
58
|
+
}
|
|
59
|
+
export interface ApplyModificationRequest {
|
|
60
|
+
containerId: string;
|
|
61
|
+
modificationId: string;
|
|
62
|
+
autoBuild?: boolean;
|
|
63
|
+
notes?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface ApplyModificationResponse {
|
|
66
|
+
modificationApplicationId: string;
|
|
67
|
+
status: string;
|
|
68
|
+
estimatedCompletionTime: string;
|
|
69
|
+
streamToken: string;
|
|
70
|
+
}
|
|
71
|
+
export declare class ModificationService {
|
|
72
|
+
private httpClient;
|
|
73
|
+
private mcpServer;
|
|
74
|
+
constructor();
|
|
75
|
+
/**
|
|
76
|
+
* Set MCP server reference for progress notifications
|
|
77
|
+
*/
|
|
78
|
+
setMCPServer(server: any): void;
|
|
79
|
+
/**
|
|
80
|
+
* List all available modifications in the catalog
|
|
81
|
+
*/
|
|
82
|
+
listModifications(category?: string, tags?: string, active?: boolean): Promise<ModificationListResponse>;
|
|
83
|
+
/**
|
|
84
|
+
* Get AI-powered modification suggestions for a container
|
|
85
|
+
*/
|
|
86
|
+
suggestModifications(containerId: string, categories?: string[], includeRisks?: boolean): Promise<SuggestModificationsResponse>;
|
|
87
|
+
/**
|
|
88
|
+
* Apply a modification to a container
|
|
89
|
+
*/
|
|
90
|
+
applyModification(request: ApplyModificationRequest): Promise<ApplyModificationResponse>;
|
|
91
|
+
/**
|
|
92
|
+
* Get detailed information about a specific modification application
|
|
93
|
+
*/
|
|
94
|
+
getModificationDetails(containerId: string, modificationApplicationId: string): Promise<AppliedModification>;
|
|
95
|
+
/**
|
|
96
|
+
* List modifications applied to a specific container
|
|
97
|
+
*/
|
|
98
|
+
listAppliedModifications(containerId: string, status?: string, limit?: number, offset?: number): Promise<AppliedModificationListResponse>;
|
|
99
|
+
/**
|
|
100
|
+
* Format modification recommendation for display
|
|
101
|
+
*/
|
|
102
|
+
formatRecommendation(rec: ModificationRecommendation): string;
|
|
103
|
+
/**
|
|
104
|
+
* Format applied modification for display
|
|
105
|
+
*/
|
|
106
|
+
formatAppliedModification(mod: AppliedModification): string;
|
|
107
|
+
/**
|
|
108
|
+
* Check if modification is in progress
|
|
109
|
+
*/
|
|
110
|
+
isModificationInProgress(status: string): boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Check if modification completed successfully
|
|
113
|
+
*/
|
|
114
|
+
isModificationCompleted(status: string): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Check if modification failed
|
|
117
|
+
*/
|
|
118
|
+
isModificationFailed(status: string): boolean;
|
|
119
|
+
}
|
|
120
|
+
export declare const modificationService: ModificationService;
|
|
121
|
+
//# sourceMappingURL=modificationService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modificationService.d.ts","sourceRoot":"","sources":["../../src/services/modificationService.ts"],"names":[],"mappings":"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"}
|