cmp-standards 2.9.1 → 3.1.1
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/analytics/CrossProjectAnalytics.d.ts.map +1 -1
- package/dist/analytics/CrossProjectAnalytics.js +3 -0
- package/dist/analytics/CrossProjectAnalytics.js.map +1 -1
- package/dist/cli/index.js +411 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/db/turso-client.d.ts.map +1 -1
- package/dist/db/turso-client.js +3 -0
- package/dist/db/turso-client.js.map +1 -1
- package/dist/events/EventBus.d.ts +21 -0
- package/dist/events/EventBus.d.ts.map +1 -1
- package/dist/events/EventBus.js +81 -30
- package/dist/events/EventBus.js.map +1 -1
- package/dist/events/index.d.ts +1 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/schema/expert-types.d.ts +2 -2
- package/dist/services/MemoryRelationshipService.d.ts +187 -0
- package/dist/services/MemoryRelationshipService.d.ts.map +1 -0
- package/dist/services/MemoryRelationshipService.js +375 -0
- package/dist/services/MemoryRelationshipService.js.map +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/semantic-search.d.ts +8 -0
- package/dist/services/semantic-search.d.ts.map +1 -1
- package/dist/services/semantic-search.js +40 -4
- package/dist/services/semantic-search.js.map +1 -1
- package/dist/testing/index.d.ts +148 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +370 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/utils/resilience.d.ts +256 -0
- package/dist/utils/resilience.d.ts.map +1 -0
- package/dist/utils/resilience.js +499 -0
- package/dist/utils/resilience.js.map +1 -0
- package/package.json +9 -1
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resilience Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides fault-tolerant patterns for network operations:
|
|
5
|
+
* - Retry with exponential backoff
|
|
6
|
+
* - Timeout protection
|
|
7
|
+
* - Circuit breaker pattern
|
|
8
|
+
* - Rate limiting helpers
|
|
9
|
+
*
|
|
10
|
+
* @version 2.9.1
|
|
11
|
+
*/
|
|
12
|
+
export class RetryableError extends Error {
|
|
13
|
+
retryAfter;
|
|
14
|
+
constructor(message, retryAfter) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.retryAfter = retryAfter;
|
|
17
|
+
this.name = 'RetryableError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class TimeoutError extends Error {
|
|
21
|
+
constructor(message = 'Operation timed out') {
|
|
22
|
+
super(message);
|
|
23
|
+
this.name = 'TimeoutError';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class CircuitOpenError extends Error {
|
|
27
|
+
resetAt;
|
|
28
|
+
constructor(message = 'Circuit breaker is open', resetAt) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.resetAt = resetAt;
|
|
31
|
+
this.name = 'CircuitOpenError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// =============================================================================
|
|
35
|
+
// Retry with Exponential Backoff
|
|
36
|
+
// =============================================================================
|
|
37
|
+
const DEFAULT_RETRY_OPTIONS = {
|
|
38
|
+
maxRetries: 3,
|
|
39
|
+
baseDelay: 1000,
|
|
40
|
+
maxDelay: 30000,
|
|
41
|
+
backoffMultiplier: 2,
|
|
42
|
+
jitter: 0.1,
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Calculate delay with exponential backoff and jitter
|
|
46
|
+
*/
|
|
47
|
+
function calculateDelay(attempt, options) {
|
|
48
|
+
const exponentialDelay = options.baseDelay * Math.pow(options.backoffMultiplier, attempt - 1);
|
|
49
|
+
const cappedDelay = Math.min(exponentialDelay, options.maxDelay);
|
|
50
|
+
// Add jitter to prevent thundering herd
|
|
51
|
+
const jitterRange = cappedDelay * options.jitter;
|
|
52
|
+
const jitter = Math.random() * jitterRange * 2 - jitterRange;
|
|
53
|
+
return Math.max(0, Math.round(cappedDelay + jitter));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Execute operation with retry logic and exponential backoff
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const result = await withRetry(
|
|
61
|
+
* () => fetch('https://api.example.com/data'),
|
|
62
|
+
* { maxRetries: 3, baseDelay: 1000 }
|
|
63
|
+
* )
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export async function withRetry(operation, options) {
|
|
67
|
+
const opts = { ...DEFAULT_RETRY_OPTIONS, ...options };
|
|
68
|
+
let lastError;
|
|
69
|
+
for (let attempt = 1; attempt <= opts.maxRetries + 1; attempt++) {
|
|
70
|
+
try {
|
|
71
|
+
return await operation();
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
lastError = error;
|
|
75
|
+
// Check if we should retry
|
|
76
|
+
const isRetryable = opts.isRetryable?.(error) ?? true;
|
|
77
|
+
const isLastAttempt = attempt > opts.maxRetries;
|
|
78
|
+
if (!isRetryable || isLastAttempt) {
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
// Calculate delay
|
|
82
|
+
let delay;
|
|
83
|
+
if (error instanceof RetryableError && error.retryAfter) {
|
|
84
|
+
delay = error.retryAfter;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
delay = calculateDelay(attempt, opts);
|
|
88
|
+
}
|
|
89
|
+
// Notify callback
|
|
90
|
+
opts.onRetry?.(attempt, error, delay);
|
|
91
|
+
// Wait before retry
|
|
92
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
throw lastError;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Check if an HTTP status code is retryable
|
|
99
|
+
*/
|
|
100
|
+
export function isRetryableHttpStatus(status) {
|
|
101
|
+
return (status === 408 || // Request Timeout
|
|
102
|
+
status === 429 || // Too Many Requests
|
|
103
|
+
status === 500 || // Internal Server Error
|
|
104
|
+
status === 502 || // Bad Gateway
|
|
105
|
+
status === 503 || // Service Unavailable
|
|
106
|
+
status === 504 // Gateway Timeout
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Check if an error is a network/transient error
|
|
111
|
+
*/
|
|
112
|
+
export function isTransientError(error) {
|
|
113
|
+
if (error instanceof RetryableError)
|
|
114
|
+
return true;
|
|
115
|
+
if (error instanceof Error) {
|
|
116
|
+
const message = error.message.toLowerCase();
|
|
117
|
+
return (message.includes('econnreset') ||
|
|
118
|
+
message.includes('econnrefused') ||
|
|
119
|
+
message.includes('etimedout') ||
|
|
120
|
+
message.includes('enotfound') ||
|
|
121
|
+
message.includes('network') ||
|
|
122
|
+
message.includes('timeout') ||
|
|
123
|
+
message.includes('rate limit') ||
|
|
124
|
+
message.includes('too many requests'));
|
|
125
|
+
}
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
// =============================================================================
|
|
129
|
+
// Timeout Protection
|
|
130
|
+
// =============================================================================
|
|
131
|
+
/**
|
|
132
|
+
* Execute operation with timeout protection
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* const result = await withTimeout(
|
|
137
|
+
* fetch('https://api.example.com/data'),
|
|
138
|
+
* { timeoutMs: 5000, fallback: null }
|
|
139
|
+
* )
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
export async function withTimeout(promise, options) {
|
|
143
|
+
const { timeoutMs, fallback, message, onTimeout } = options;
|
|
144
|
+
let timeoutId;
|
|
145
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
146
|
+
timeoutId = setTimeout(() => {
|
|
147
|
+
onTimeout?.();
|
|
148
|
+
if (fallback !== undefined) {
|
|
149
|
+
// Don't reject, resolve with fallback
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
reject(new TimeoutError(message ?? `Operation timed out after ${timeoutMs}ms`));
|
|
153
|
+
}
|
|
154
|
+
}, timeoutMs);
|
|
155
|
+
});
|
|
156
|
+
// If fallback provided, return it on timeout instead of rejecting
|
|
157
|
+
if (fallback !== undefined) {
|
|
158
|
+
const fallbackPromise = new Promise(resolve => {
|
|
159
|
+
setTimeout(() => {
|
|
160
|
+
onTimeout?.();
|
|
161
|
+
resolve(fallback);
|
|
162
|
+
}, timeoutMs);
|
|
163
|
+
});
|
|
164
|
+
try {
|
|
165
|
+
const result = await Promise.race([promise, fallbackPromise]);
|
|
166
|
+
clearTimeout(timeoutId);
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
clearTimeout(timeoutId);
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
const result = await Promise.race([promise, timeoutPromise]);
|
|
176
|
+
clearTimeout(timeoutId);
|
|
177
|
+
return result;
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
clearTimeout(timeoutId);
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Create an AbortController with automatic timeout
|
|
186
|
+
*/
|
|
187
|
+
export function createTimeoutController(timeoutMs) {
|
|
188
|
+
const controller = new AbortController();
|
|
189
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
190
|
+
return {
|
|
191
|
+
controller,
|
|
192
|
+
cleanup: () => clearTimeout(timeoutId),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// =============================================================================
|
|
196
|
+
// Circuit Breaker Pattern
|
|
197
|
+
// =============================================================================
|
|
198
|
+
const DEFAULT_CIRCUIT_OPTIONS = {
|
|
199
|
+
failureThreshold: 5,
|
|
200
|
+
resetTimeout: 30000,
|
|
201
|
+
successThreshold: 2,
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* Circuit Breaker for protecting against cascade failures
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```typescript
|
|
208
|
+
* const breaker = new CircuitBreaker({ failureThreshold: 5 })
|
|
209
|
+
*
|
|
210
|
+
* try {
|
|
211
|
+
* const result = await breaker.execute(() => riskyOperation())
|
|
212
|
+
* } catch (error) {
|
|
213
|
+
* if (error instanceof CircuitOpenError) {
|
|
214
|
+
* // Circuit is open, use fallback
|
|
215
|
+
* }
|
|
216
|
+
* }
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
export class CircuitBreaker {
|
|
220
|
+
state = 'closed';
|
|
221
|
+
failures = 0;
|
|
222
|
+
successes = 0;
|
|
223
|
+
lastFailureTime = 0;
|
|
224
|
+
options;
|
|
225
|
+
constructor(options) {
|
|
226
|
+
this.options = { ...DEFAULT_CIRCUIT_OPTIONS, ...options };
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Get current circuit state
|
|
230
|
+
*/
|
|
231
|
+
getState() {
|
|
232
|
+
return this.state;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Get circuit statistics
|
|
236
|
+
*/
|
|
237
|
+
getStats() {
|
|
238
|
+
return {
|
|
239
|
+
state: this.state,
|
|
240
|
+
failures: this.failures,
|
|
241
|
+
successes: this.successes,
|
|
242
|
+
lastFailureTime: this.lastFailureTime,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Execute operation through circuit breaker
|
|
247
|
+
*/
|
|
248
|
+
async execute(operation) {
|
|
249
|
+
// Check if circuit should transition from open to half-open
|
|
250
|
+
if (this.state === 'open') {
|
|
251
|
+
const timeSinceFailure = Date.now() - this.lastFailureTime;
|
|
252
|
+
if (timeSinceFailure >= this.options.resetTimeout) {
|
|
253
|
+
this.transitionTo('half-open');
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
throw new CircuitOpenError(`Circuit breaker is open. Retry after ${this.options.resetTimeout - timeSinceFailure}ms`, this.lastFailureTime + this.options.resetTimeout);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
try {
|
|
260
|
+
const result = await operation();
|
|
261
|
+
this.onSuccess();
|
|
262
|
+
return result;
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
this.onFailure();
|
|
266
|
+
throw error;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Record successful operation
|
|
271
|
+
*/
|
|
272
|
+
onSuccess() {
|
|
273
|
+
this.failures = 0;
|
|
274
|
+
if (this.state === 'half-open') {
|
|
275
|
+
this.successes++;
|
|
276
|
+
if (this.successes >= this.options.successThreshold) {
|
|
277
|
+
this.transitionTo('closed');
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Record failed operation
|
|
283
|
+
*/
|
|
284
|
+
onFailure() {
|
|
285
|
+
this.failures++;
|
|
286
|
+
this.lastFailureTime = Date.now();
|
|
287
|
+
this.successes = 0;
|
|
288
|
+
if (this.state === 'half-open') {
|
|
289
|
+
this.transitionTo('open');
|
|
290
|
+
}
|
|
291
|
+
else if (this.state === 'closed' && this.failures >= this.options.failureThreshold) {
|
|
292
|
+
this.transitionTo('open');
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Transition to new state
|
|
297
|
+
*/
|
|
298
|
+
transitionTo(newState) {
|
|
299
|
+
if (this.state !== newState) {
|
|
300
|
+
this.state = newState;
|
|
301
|
+
this.options.onStateChange?.(newState);
|
|
302
|
+
if (newState === 'closed') {
|
|
303
|
+
this.failures = 0;
|
|
304
|
+
this.successes = 0;
|
|
305
|
+
}
|
|
306
|
+
else if (newState === 'half-open') {
|
|
307
|
+
this.successes = 0;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Manually reset the circuit breaker
|
|
313
|
+
*/
|
|
314
|
+
reset() {
|
|
315
|
+
this.transitionTo('closed');
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Manually trip the circuit breaker
|
|
319
|
+
*/
|
|
320
|
+
trip() {
|
|
321
|
+
this.lastFailureTime = Date.now();
|
|
322
|
+
this.transitionTo('open');
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
// =============================================================================
|
|
326
|
+
// Combined Utilities
|
|
327
|
+
// =============================================================================
|
|
328
|
+
/**
|
|
329
|
+
* Execute operation with retry, timeout, and circuit breaker
|
|
330
|
+
*
|
|
331
|
+
* @example
|
|
332
|
+
* ```typescript
|
|
333
|
+
* const breaker = new CircuitBreaker()
|
|
334
|
+
*
|
|
335
|
+
* const result = await withResilience(
|
|
336
|
+
* () => fetch('https://api.example.com/data'),
|
|
337
|
+
* {
|
|
338
|
+
* retry: { maxRetries: 3 },
|
|
339
|
+
* timeout: { timeoutMs: 5000 },
|
|
340
|
+
* circuitBreaker: breaker
|
|
341
|
+
* }
|
|
342
|
+
* )
|
|
343
|
+
* ```
|
|
344
|
+
*/
|
|
345
|
+
export async function withResilience(operation, options) {
|
|
346
|
+
const { retry, timeout, circuitBreaker } = options;
|
|
347
|
+
// Wrap with timeout if specified
|
|
348
|
+
const timedOperation = timeout
|
|
349
|
+
? () => withTimeout(operation(), timeout)
|
|
350
|
+
: operation;
|
|
351
|
+
// Wrap with retry if specified
|
|
352
|
+
const retriedOperation = retry
|
|
353
|
+
? () => withRetry(timedOperation, retry)
|
|
354
|
+
: timedOperation;
|
|
355
|
+
// Wrap with circuit breaker if specified
|
|
356
|
+
if (circuitBreaker) {
|
|
357
|
+
return circuitBreaker.execute(retriedOperation);
|
|
358
|
+
}
|
|
359
|
+
return retriedOperation();
|
|
360
|
+
}
|
|
361
|
+
// =============================================================================
|
|
362
|
+
// Mutex for Singleton Initialization
|
|
363
|
+
// =============================================================================
|
|
364
|
+
/**
|
|
365
|
+
* Simple mutex for protecting async initialization
|
|
366
|
+
*
|
|
367
|
+
* @example
|
|
368
|
+
* ```typescript
|
|
369
|
+
* const initMutex = new AsyncMutex()
|
|
370
|
+
* let instance: Client | null = null
|
|
371
|
+
*
|
|
372
|
+
* async function getInstance() {
|
|
373
|
+
* if (instance) return instance
|
|
374
|
+
* return initMutex.runExclusive(async () => {
|
|
375
|
+
* if (instance) return instance // Double-check after acquiring lock
|
|
376
|
+
* instance = await createClient()
|
|
377
|
+
* return instance
|
|
378
|
+
* })
|
|
379
|
+
* }
|
|
380
|
+
* ```
|
|
381
|
+
*/
|
|
382
|
+
export class AsyncMutex {
|
|
383
|
+
locked = false;
|
|
384
|
+
queue = [];
|
|
385
|
+
/**
|
|
386
|
+
* Check if mutex is currently locked
|
|
387
|
+
*/
|
|
388
|
+
isLocked() {
|
|
389
|
+
return this.locked;
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Acquire the mutex lock
|
|
393
|
+
*/
|
|
394
|
+
async acquire() {
|
|
395
|
+
if (!this.locked) {
|
|
396
|
+
this.locked = true;
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
return new Promise(resolve => {
|
|
400
|
+
this.queue.push(resolve);
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Release the mutex lock
|
|
405
|
+
*/
|
|
406
|
+
release() {
|
|
407
|
+
const next = this.queue.shift();
|
|
408
|
+
if (next) {
|
|
409
|
+
next();
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
this.locked = false;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Run operation exclusively (acquires and releases automatically)
|
|
417
|
+
*/
|
|
418
|
+
async runExclusive(operation) {
|
|
419
|
+
await this.acquire();
|
|
420
|
+
try {
|
|
421
|
+
return await operation();
|
|
422
|
+
}
|
|
423
|
+
finally {
|
|
424
|
+
this.release();
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
// =============================================================================
|
|
429
|
+
// Safe Cache Operations
|
|
430
|
+
// =============================================================================
|
|
431
|
+
/**
|
|
432
|
+
* Execute cache operation safely (returns null on error instead of throwing)
|
|
433
|
+
*/
|
|
434
|
+
export async function safeCacheGet(operation, context) {
|
|
435
|
+
try {
|
|
436
|
+
return await operation();
|
|
437
|
+
}
|
|
438
|
+
catch (error) {
|
|
439
|
+
console.warn(`[SafeCache] Get failed${context ? ` for ${context}` : ''}:`, error);
|
|
440
|
+
return null;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Execute cache set operation safely (returns success boolean)
|
|
445
|
+
*/
|
|
446
|
+
export async function safeCacheSet(operation, context) {
|
|
447
|
+
try {
|
|
448
|
+
await operation();
|
|
449
|
+
return true;
|
|
450
|
+
}
|
|
451
|
+
catch (error) {
|
|
452
|
+
console.warn(`[SafeCache] Set failed${context ? ` for ${context}` : ''}:`, error);
|
|
453
|
+
return false;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Process items in batches with individual error handling
|
|
458
|
+
*
|
|
459
|
+
* @example
|
|
460
|
+
* ```typescript
|
|
461
|
+
* const result = await processBatch(
|
|
462
|
+
* items,
|
|
463
|
+
* async (item) => await processItem(item),
|
|
464
|
+
* { chunkSize: 10, concurrency: 5 }
|
|
465
|
+
* )
|
|
466
|
+
* console.log(`Processed ${result.succeeded.length}/${result.total}`)
|
|
467
|
+
* ```
|
|
468
|
+
*/
|
|
469
|
+
export async function processBatch(items, processor, options) {
|
|
470
|
+
const { chunkSize = 10, delayBetweenChunks = 0, onProgress } = options ?? {};
|
|
471
|
+
const succeeded = [];
|
|
472
|
+
const failed = [];
|
|
473
|
+
let processed = 0;
|
|
474
|
+
for (let i = 0; i < items.length; i += chunkSize) {
|
|
475
|
+
const chunk = items.slice(i, i + chunkSize);
|
|
476
|
+
const results = await Promise.allSettled(chunk.map((item, idx) => processor(item, i + idx)));
|
|
477
|
+
for (let j = 0; j < results.length; j++) {
|
|
478
|
+
const result = results[j];
|
|
479
|
+
processed++;
|
|
480
|
+
if (result.status === 'fulfilled') {
|
|
481
|
+
succeeded.push(result.value);
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
failed.push({ item: chunk[j], error: result.reason });
|
|
485
|
+
}
|
|
486
|
+
onProgress?.(processed, items.length);
|
|
487
|
+
}
|
|
488
|
+
if (delayBetweenChunks > 0 && i + chunkSize < items.length) {
|
|
489
|
+
await new Promise(resolve => setTimeout(resolve, delayBetweenChunks));
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
return {
|
|
493
|
+
succeeded,
|
|
494
|
+
failed,
|
|
495
|
+
total: items.length,
|
|
496
|
+
successRate: items.length > 0 ? succeeded.length / items.length : 1,
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
//# sourceMappingURL=resilience.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilience.js","sourceRoot":"","sources":["../../src/utils/resilience.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cmp-standards",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Collective Memory Protocol - Persistent memory, cross-project learning, and multi-agent collaboration",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -103,6 +103,14 @@
|
|
|
103
103
|
"./eslint": {
|
|
104
104
|
"import": "./dist/eslint/index.js",
|
|
105
105
|
"types": "./dist/eslint/index.d.ts"
|
|
106
|
+
},
|
|
107
|
+
"./testing": {
|
|
108
|
+
"import": "./dist/testing/index.js",
|
|
109
|
+
"types": "./dist/testing/index.d.ts"
|
|
110
|
+
},
|
|
111
|
+
"./plugins": {
|
|
112
|
+
"import": "./dist/plugins/index.js",
|
|
113
|
+
"types": "./dist/plugins/index.d.ts"
|
|
106
114
|
}
|
|
107
115
|
}
|
|
108
116
|
}
|