atlas-pipeline-mcp 1.0.19 → 1.0.20
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/tools/context.d.ts +33 -7
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +167 -82
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/git.d.ts +27 -4
- package/dist/tools/git.d.ts.map +1 -1
- package/dist/tools/git.js +156 -59
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/resource-manager.d.ts +167 -0
- package/dist/tools/resource-manager.d.ts.map +1 -0
- package/dist/tools/resource-manager.js +352 -0
- package/dist/tools/resource-manager.js.map +1 -0
- package/dist/tools/test-utils.d.ts +170 -0
- package/dist/tools/test-utils.d.ts.map +1 -0
- package/dist/tools/test-utils.js +490 -0
- package/dist/tools/test-utils.js.map +1 -0
- package/dist/tools/validation.d.ts +237 -0
- package/dist/tools/validation.d.ts.map +1 -0
- package/dist/tools/validation.js +323 -0
- package/dist/tools/validation.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Server - Resource Management and Cleanup
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive resource lifecycle management to prevent memory leaks:
|
|
5
|
+
* - Automatic cleanup of resources
|
|
6
|
+
* - Graceful shutdown handling
|
|
7
|
+
* - Resource pooling and recycling
|
|
8
|
+
* - Memory usage tracking
|
|
9
|
+
* - File handle management
|
|
10
|
+
*
|
|
11
|
+
* @module resource-manager
|
|
12
|
+
* @version 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
import { logger } from '../utils.js';
|
|
15
|
+
/**
|
|
16
|
+
* Git instance wrapper with lifecycle management
|
|
17
|
+
*/
|
|
18
|
+
export class ManagedGitInstance {
|
|
19
|
+
repoPath;
|
|
20
|
+
git;
|
|
21
|
+
id;
|
|
22
|
+
type = 'git-instance';
|
|
23
|
+
createdAt;
|
|
24
|
+
lastAccessedAt;
|
|
25
|
+
constructor(repoPath, git) {
|
|
26
|
+
this.repoPath = repoPath;
|
|
27
|
+
this.git = git;
|
|
28
|
+
this.id = `git:${repoPath}`;
|
|
29
|
+
this.createdAt = Date.now();
|
|
30
|
+
this.lastAccessedAt = Date.now();
|
|
31
|
+
}
|
|
32
|
+
/** Get the git instance and update access time */
|
|
33
|
+
getGit() {
|
|
34
|
+
this.lastAccessedAt = Date.now();
|
|
35
|
+
return this.git;
|
|
36
|
+
}
|
|
37
|
+
/** Check if instance is still valid */
|
|
38
|
+
isValid() {
|
|
39
|
+
// Git instances don't expire but can be invalidated
|
|
40
|
+
return this.git !== null;
|
|
41
|
+
}
|
|
42
|
+
/** Cleanup the git instance */
|
|
43
|
+
async cleanup() {
|
|
44
|
+
logger.debug({ repoPath: this.repoPath }, 'Cleaning up git instance');
|
|
45
|
+
// SimpleGit doesn't require explicit cleanup, but we null it out
|
|
46
|
+
this.git = null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// Resource Manager
|
|
51
|
+
// ============================================================================
|
|
52
|
+
/**
|
|
53
|
+
* Centralized resource manager for automatic cleanup
|
|
54
|
+
*/
|
|
55
|
+
export class ResourceManager {
|
|
56
|
+
options;
|
|
57
|
+
resources = new Map();
|
|
58
|
+
cleanupTimer = null;
|
|
59
|
+
shutdownHandlers = [];
|
|
60
|
+
isShuttingDown = false;
|
|
61
|
+
constructor(options = {}) {
|
|
62
|
+
this.options = options;
|
|
63
|
+
const { cleanupIntervalMs = 60000, // 1 minute
|
|
64
|
+
maxIdleTimeMs = 300000, // 5 minutes
|
|
65
|
+
maxResources = 100, } = options;
|
|
66
|
+
// Start periodic cleanup
|
|
67
|
+
this.cleanupTimer = setInterval(() => {
|
|
68
|
+
this.performCleanup(maxIdleTimeMs, maxResources);
|
|
69
|
+
}, cleanupIntervalMs);
|
|
70
|
+
// Register shutdown handler
|
|
71
|
+
this.registerShutdownHandlers();
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Register a resource for management
|
|
75
|
+
*/
|
|
76
|
+
register(resource) {
|
|
77
|
+
if (this.isShuttingDown) {
|
|
78
|
+
logger.warn('Cannot register resource during shutdown');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
this.resources.set(resource.id, resource);
|
|
82
|
+
logger.debug({ id: resource.id, type: resource.type, totalResources: this.resources.size }, 'Resource registered');
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Unregister and cleanup a resource
|
|
86
|
+
*/
|
|
87
|
+
async unregister(id) {
|
|
88
|
+
const resource = this.resources.get(id);
|
|
89
|
+
if (resource) {
|
|
90
|
+
await this.cleanupResource(resource);
|
|
91
|
+
this.resources.delete(id);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get a resource by ID
|
|
96
|
+
*/
|
|
97
|
+
get(id) {
|
|
98
|
+
const resource = this.resources.get(id);
|
|
99
|
+
if (resource) {
|
|
100
|
+
resource.lastAccessedAt = Date.now();
|
|
101
|
+
return resource;
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Check if a resource exists
|
|
107
|
+
*/
|
|
108
|
+
has(id) {
|
|
109
|
+
return this.resources.has(id);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get all resources of a specific type
|
|
113
|
+
*/
|
|
114
|
+
getByType(type) {
|
|
115
|
+
const results = [];
|
|
116
|
+
for (const resource of this.resources.values()) {
|
|
117
|
+
if (resource.type === type) {
|
|
118
|
+
results.push(resource);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return results;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Perform periodic cleanup of idle resources
|
|
125
|
+
*/
|
|
126
|
+
async performCleanup(maxIdleTimeMs, maxResources) {
|
|
127
|
+
const now = Date.now();
|
|
128
|
+
const resourcesToCleanup = [];
|
|
129
|
+
// Find resources to cleanup
|
|
130
|
+
for (const resource of this.resources.values()) {
|
|
131
|
+
const idleTime = now - resource.lastAccessedAt;
|
|
132
|
+
// Cleanup invalid or idle resources
|
|
133
|
+
if (!resource.isValid() || idleTime > maxIdleTimeMs) {
|
|
134
|
+
resourcesToCleanup.push(resource);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// If still over limit after idle cleanup, cleanup LRU resources
|
|
138
|
+
if (this.resources.size > maxResources) {
|
|
139
|
+
const sorted = Array.from(this.resources.values())
|
|
140
|
+
.filter((r) => !resourcesToCleanup.includes(r))
|
|
141
|
+
.sort((a, b) => a.lastAccessedAt - b.lastAccessedAt);
|
|
142
|
+
const excess = this.resources.size - maxResources;
|
|
143
|
+
resourcesToCleanup.push(...sorted.slice(0, excess));
|
|
144
|
+
}
|
|
145
|
+
// Cleanup resources
|
|
146
|
+
if (resourcesToCleanup.length > 0) {
|
|
147
|
+
logger.debug({ count: resourcesToCleanup.length, totalResources: this.resources.size }, 'Performing resource cleanup');
|
|
148
|
+
for (const resource of resourcesToCleanup) {
|
|
149
|
+
await this.cleanupResource(resource);
|
|
150
|
+
this.resources.delete(resource.id);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Cleanup a single resource
|
|
156
|
+
*/
|
|
157
|
+
async cleanupResource(resource) {
|
|
158
|
+
try {
|
|
159
|
+
await resource.cleanup();
|
|
160
|
+
logger.debug({ id: resource.id, type: resource.type }, 'Resource cleaned up');
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
logger.error({ error, id: resource.id, type: resource.type }, 'Error cleaning up resource');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Register a custom shutdown handler
|
|
168
|
+
*/
|
|
169
|
+
onShutdown(handler) {
|
|
170
|
+
this.shutdownHandlers.push(handler);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Graceful shutdown - cleanup all resources
|
|
174
|
+
*/
|
|
175
|
+
async shutdown() {
|
|
176
|
+
if (this.isShuttingDown) {
|
|
177
|
+
logger.warn('Shutdown already in progress');
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
this.isShuttingDown = true;
|
|
181
|
+
logger.info({ resourceCount: this.resources.size }, 'Starting graceful shutdown');
|
|
182
|
+
// Stop cleanup timer
|
|
183
|
+
if (this.cleanupTimer) {
|
|
184
|
+
clearInterval(this.cleanupTimer);
|
|
185
|
+
this.cleanupTimer = null;
|
|
186
|
+
}
|
|
187
|
+
// Run custom shutdown handlers
|
|
188
|
+
for (const handler of this.shutdownHandlers) {
|
|
189
|
+
try {
|
|
190
|
+
await handler();
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
logger.error({ error }, 'Error in shutdown handler');
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Cleanup all resources
|
|
197
|
+
const cleanupPromises = Array.from(this.resources.values()).map((resource) => this.cleanupResource(resource));
|
|
198
|
+
await Promise.allSettled(cleanupPromises);
|
|
199
|
+
this.resources.clear();
|
|
200
|
+
logger.info('Graceful shutdown complete');
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Register signal handlers for graceful shutdown
|
|
204
|
+
*/
|
|
205
|
+
registerShutdownHandlers() {
|
|
206
|
+
const signals = ['SIGINT', 'SIGTERM', 'SIGQUIT'];
|
|
207
|
+
for (const signal of signals) {
|
|
208
|
+
process.once(signal, () => {
|
|
209
|
+
logger.info({ signal }, 'Received shutdown signal');
|
|
210
|
+
this.shutdown()
|
|
211
|
+
.then(() => process.exit(0))
|
|
212
|
+
.catch((error) => {
|
|
213
|
+
logger.error({ error }, 'Error during shutdown');
|
|
214
|
+
process.exit(1);
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
// Handle uncaught errors
|
|
219
|
+
process.once('uncaughtException', (error) => {
|
|
220
|
+
logger.error({ error }, 'Uncaught exception');
|
|
221
|
+
this.shutdown()
|
|
222
|
+
.then(() => process.exit(1))
|
|
223
|
+
.catch(() => process.exit(1));
|
|
224
|
+
});
|
|
225
|
+
process.once('unhandledRejection', (reason) => {
|
|
226
|
+
logger.error({ reason }, 'Unhandled rejection');
|
|
227
|
+
this.shutdown()
|
|
228
|
+
.then(() => process.exit(1))
|
|
229
|
+
.catch(() => process.exit(1));
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get resource statistics
|
|
234
|
+
*/
|
|
235
|
+
getStats() {
|
|
236
|
+
const byType = {};
|
|
237
|
+
let oldestAge = 0;
|
|
238
|
+
const now = Date.now();
|
|
239
|
+
for (const resource of this.resources.values()) {
|
|
240
|
+
byType[resource.type] = (byType[resource.type] || 0) + 1;
|
|
241
|
+
const age = now - resource.createdAt;
|
|
242
|
+
if (age > oldestAge) {
|
|
243
|
+
oldestAge = age;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
total: this.resources.size,
|
|
248
|
+
byType: byType,
|
|
249
|
+
oldestResourceAge: oldestAge,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// ============================================================================
|
|
254
|
+
// Global Resource Manager
|
|
255
|
+
// ============================================================================
|
|
256
|
+
/** Global resource manager instance */
|
|
257
|
+
export const globalResourceManager = new ResourceManager({
|
|
258
|
+
cleanupIntervalMs: 60000, // 1 minute
|
|
259
|
+
maxIdleTimeMs: 300000, // 5 minutes
|
|
260
|
+
maxResources: 100,
|
|
261
|
+
});
|
|
262
|
+
// ============================================================================
|
|
263
|
+
// Helper Functions
|
|
264
|
+
// ============================================================================
|
|
265
|
+
/**
|
|
266
|
+
* Create a managed resource with automatic cleanup
|
|
267
|
+
*
|
|
268
|
+
* @param create - Function to create the resource
|
|
269
|
+
* @param cleanup - Function to cleanup the resource
|
|
270
|
+
* @param options - Resource options
|
|
271
|
+
* @returns The created resource
|
|
272
|
+
*/
|
|
273
|
+
export async function withManagedResource(create, cleanup, options) {
|
|
274
|
+
const { id, type, autoRegister = true } = options;
|
|
275
|
+
const resource = await create();
|
|
276
|
+
if (autoRegister) {
|
|
277
|
+
const managedResource = {
|
|
278
|
+
id,
|
|
279
|
+
type,
|
|
280
|
+
createdAt: Date.now(),
|
|
281
|
+
lastAccessedAt: Date.now(),
|
|
282
|
+
cleanup: () => cleanup(resource),
|
|
283
|
+
isValid: () => resource !== null && resource !== undefined,
|
|
284
|
+
};
|
|
285
|
+
globalResourceManager.register(managedResource);
|
|
286
|
+
}
|
|
287
|
+
return resource;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Execute a function with automatic resource cleanup
|
|
291
|
+
*
|
|
292
|
+
* @param fn - Function to execute
|
|
293
|
+
* @param resources - Resources to cleanup after execution
|
|
294
|
+
* @returns Result of the function
|
|
295
|
+
*/
|
|
296
|
+
export async function withCleanup(fn, resources) {
|
|
297
|
+
try {
|
|
298
|
+
return await fn();
|
|
299
|
+
}
|
|
300
|
+
finally {
|
|
301
|
+
// Cleanup resources in parallel
|
|
302
|
+
await Promise.allSettled(resources.map((resource) => resource.cleanup()));
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Memory usage monitor
|
|
307
|
+
*/
|
|
308
|
+
export class MemoryMonitor {
|
|
309
|
+
threshold;
|
|
310
|
+
warnings = 0;
|
|
311
|
+
constructor(thresholdMB = 512) {
|
|
312
|
+
this.threshold = thresholdMB * 1024 * 1024; // Convert to bytes
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Check current memory usage
|
|
316
|
+
*/
|
|
317
|
+
check() {
|
|
318
|
+
const usage = process.memoryUsage();
|
|
319
|
+
const isOverThreshold = usage.heapUsed > this.threshold;
|
|
320
|
+
if (isOverThreshold) {
|
|
321
|
+
this.warnings++;
|
|
322
|
+
logger.warn({
|
|
323
|
+
heapUsedMB: Math.round(usage.heapUsed / 1024 / 1024),
|
|
324
|
+
heapTotalMB: Math.round(usage.heapTotal / 1024 / 1024),
|
|
325
|
+
thresholdMB: Math.round(this.threshold / 1024 / 1024),
|
|
326
|
+
warnings: this.warnings,
|
|
327
|
+
}, 'Memory usage exceeds threshold');
|
|
328
|
+
}
|
|
329
|
+
return {
|
|
330
|
+
heapUsed: usage.heapUsed,
|
|
331
|
+
heapTotal: usage.heapTotal,
|
|
332
|
+
external: usage.external,
|
|
333
|
+
rss: usage.rss,
|
|
334
|
+
isOverThreshold,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Force garbage collection if available
|
|
339
|
+
*/
|
|
340
|
+
forceGC() {
|
|
341
|
+
if (global.gc) {
|
|
342
|
+
global.gc();
|
|
343
|
+
logger.debug('Forced garbage collection');
|
|
344
|
+
return true;
|
|
345
|
+
}
|
|
346
|
+
logger.debug('Garbage collection not available (run with --expose-gc)');
|
|
347
|
+
return false;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
/** Global memory monitor */
|
|
351
|
+
export const globalMemoryMonitor = new MemoryMonitor(512);
|
|
352
|
+
//# sourceMappingURL=resource-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-manager.js","sourceRoot":"","sources":["../../src/tools/resource-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Server - Testing Utilities and Fixtures
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive testing infrastructure for all tools:
|
|
5
|
+
* - Mock data generators
|
|
6
|
+
* - Test fixtures and helpers
|
|
7
|
+
* - Performance benchmarking
|
|
8
|
+
* - Integration test utilities
|
|
9
|
+
* - Assertion helpers
|
|
10
|
+
*
|
|
11
|
+
* @module test-utils
|
|
12
|
+
* @version 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
import type { IntentAnalysis, PipelineContext, GitContext, ProjectInfo, CodeSnippet, DecompositionResult, SolutionVariant, Critique } from '../types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Generate mock intent analysis for testing
|
|
17
|
+
*/
|
|
18
|
+
export declare function mockIntentAnalysis(overrides?: Partial<IntentAnalysis>): IntentAnalysis;
|
|
19
|
+
/**
|
|
20
|
+
* Generate mock project info for testing
|
|
21
|
+
*/
|
|
22
|
+
export declare function mockProjectInfo(overrides?: Partial<ProjectInfo>): ProjectInfo;
|
|
23
|
+
/**
|
|
24
|
+
* Generate mock git context for testing
|
|
25
|
+
*/
|
|
26
|
+
export declare function mockGitContext(overrides?: Partial<GitContext>): GitContext;
|
|
27
|
+
/**
|
|
28
|
+
* Generate mock code snippet for testing
|
|
29
|
+
*/
|
|
30
|
+
export declare function mockCodeSnippet(overrides?: Partial<CodeSnippet>): CodeSnippet;
|
|
31
|
+
/**
|
|
32
|
+
* Generate mock pipeline context for testing
|
|
33
|
+
*/
|
|
34
|
+
export declare function mockPipelineContext(overrides?: Partial<PipelineContext>): PipelineContext;
|
|
35
|
+
/**
|
|
36
|
+
* Generate mock decomposition result for testing
|
|
37
|
+
*/
|
|
38
|
+
export declare function mockDecompositionResult(overrides?: Partial<DecompositionResult>): DecompositionResult;
|
|
39
|
+
/**
|
|
40
|
+
* Generate mock solution variant for testing
|
|
41
|
+
*/
|
|
42
|
+
export declare function mockSolutionVariant(overrides?: Partial<SolutionVariant>): SolutionVariant;
|
|
43
|
+
/**
|
|
44
|
+
* Generate mock critique for testing
|
|
45
|
+
*/
|
|
46
|
+
export declare function mockCritique(overrides?: Partial<Critique>): Critique;
|
|
47
|
+
/**
|
|
48
|
+
* Measure async function execution time
|
|
49
|
+
*/
|
|
50
|
+
export declare function measureTime<T>(fn: () => Promise<T>): Promise<{
|
|
51
|
+
result: T;
|
|
52
|
+
durationMs: number;
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* Assert that a function throws with a specific message
|
|
56
|
+
*/
|
|
57
|
+
export declare function assertThrows(fn: () => Promise<unknown> | unknown, expectedMessage?: string | RegExp): Promise<Error>;
|
|
58
|
+
/**
|
|
59
|
+
* Wait for a condition to be true
|
|
60
|
+
*/
|
|
61
|
+
export declare function waitFor(condition: () => boolean | Promise<boolean>, options?: {
|
|
62
|
+
timeout?: number;
|
|
63
|
+
interval?: number;
|
|
64
|
+
}): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Create a spy function that tracks calls
|
|
67
|
+
*/
|
|
68
|
+
export declare function createSpy<T extends (...args: any[]) => any>(): {
|
|
69
|
+
spy: T;
|
|
70
|
+
calls: Array<{
|
|
71
|
+
args: Parameters<T>;
|
|
72
|
+
result?: ReturnType<T>;
|
|
73
|
+
error?: Error;
|
|
74
|
+
}>;
|
|
75
|
+
reset: () => void;
|
|
76
|
+
};
|
|
77
|
+
export interface BenchmarkResult {
|
|
78
|
+
name: string;
|
|
79
|
+
iterations: number;
|
|
80
|
+
totalMs: number;
|
|
81
|
+
avgMs: number;
|
|
82
|
+
minMs: number;
|
|
83
|
+
maxMs: number;
|
|
84
|
+
opsPerSecond: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Benchmark a function performance
|
|
88
|
+
*/
|
|
89
|
+
export declare function benchmark(name: string, fn: () => Promise<void> | void, iterations?: number): Promise<BenchmarkResult>;
|
|
90
|
+
/**
|
|
91
|
+
* Compare multiple function implementations
|
|
92
|
+
*/
|
|
93
|
+
export declare function benchmarkCompare(tests: Array<{
|
|
94
|
+
name: string;
|
|
95
|
+
fn: () => Promise<void> | void;
|
|
96
|
+
}>, iterations?: number): Promise<BenchmarkResult[]>;
|
|
97
|
+
/**
|
|
98
|
+
* Print benchmark results to console
|
|
99
|
+
*/
|
|
100
|
+
export declare function printBenchmarkResults(results: BenchmarkResult[]): void;
|
|
101
|
+
/**
|
|
102
|
+
* Create a temporary directory for testing
|
|
103
|
+
*/
|
|
104
|
+
export declare function createTempDir(): Promise<string>;
|
|
105
|
+
/**
|
|
106
|
+
* Cleanup a temporary directory
|
|
107
|
+
*/
|
|
108
|
+
export declare function cleanupTempDir(dir: string): Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* Write test file to a directory
|
|
111
|
+
*/
|
|
112
|
+
export declare function writeTestFile(dir: string, filename: string, content: string): Promise<string>;
|
|
113
|
+
/**
|
|
114
|
+
* Execute test with automatic cleanup
|
|
115
|
+
*/
|
|
116
|
+
export declare function withTestDir<T>(fn: (dir: string) => Promise<T>): Promise<T>;
|
|
117
|
+
/**
|
|
118
|
+
* Assert that two values are deeply equal
|
|
119
|
+
*/
|
|
120
|
+
export declare function assertEqual<T>(actual: T, expected: T, message?: string): void;
|
|
121
|
+
/**
|
|
122
|
+
* Assert that a value is truthy
|
|
123
|
+
*/
|
|
124
|
+
export declare function assertTrue(value: unknown, message?: string): void;
|
|
125
|
+
/**
|
|
126
|
+
* Assert that a value is falsy
|
|
127
|
+
*/
|
|
128
|
+
export declare function assertFalse(value: unknown, message?: string): void;
|
|
129
|
+
/**
|
|
130
|
+
* Assert that a value is defined (not null or undefined)
|
|
131
|
+
*/
|
|
132
|
+
export declare function assertDefined<T>(value: T | null | undefined, message?: string): asserts value is T;
|
|
133
|
+
/**
|
|
134
|
+
* Assert that an array contains a value
|
|
135
|
+
*/
|
|
136
|
+
export declare function assertContains<T>(array: T[], value: T, message?: string): void;
|
|
137
|
+
/**
|
|
138
|
+
* Assert that a number is within a range
|
|
139
|
+
*/
|
|
140
|
+
export declare function assertInRange(value: number, min: number, max: number, message?: string): void;
|
|
141
|
+
/**
|
|
142
|
+
* Mock LLM provider for testing without actual API calls
|
|
143
|
+
*/
|
|
144
|
+
export declare class MockLLMProvider {
|
|
145
|
+
private responses;
|
|
146
|
+
callCount: number;
|
|
147
|
+
/**
|
|
148
|
+
* Set a mock response for a specific prompt pattern
|
|
149
|
+
*/
|
|
150
|
+
setResponse(pattern: string | RegExp, response: unknown): void;
|
|
151
|
+
/**
|
|
152
|
+
* Mock complete method
|
|
153
|
+
*/
|
|
154
|
+
complete(prompt: string): Promise<string>;
|
|
155
|
+
/**
|
|
156
|
+
* Mock completeJson method
|
|
157
|
+
*/
|
|
158
|
+
completeJson<T>(prompt: string): Promise<{
|
|
159
|
+
data: T | null;
|
|
160
|
+
}>;
|
|
161
|
+
/**
|
|
162
|
+
* Reset the mock provider
|
|
163
|
+
*/
|
|
164
|
+
reset(): void;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Example test suite demonstrating usage
|
|
168
|
+
*/
|
|
169
|
+
export declare function exampleTestSuite(): Promise<void>;
|
|
170
|
+
//# sourceMappingURL=test-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/tools/test-utils.ts"],"names":[],"mappings":"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"}
|