cmp-standards 2.8.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/analytics/CrossProjectAnalytics.d.ts +128 -0
  2. package/dist/analytics/CrossProjectAnalytics.d.ts.map +1 -0
  3. package/dist/analytics/CrossProjectAnalytics.js +434 -0
  4. package/dist/analytics/CrossProjectAnalytics.js.map +1 -0
  5. package/dist/analytics/index.d.ts +1 -0
  6. package/dist/analytics/index.d.ts.map +1 -1
  7. package/dist/analytics/index.js +2 -0
  8. package/dist/analytics/index.js.map +1 -1
  9. package/dist/cache/EmbeddingCache.d.ts +6 -4
  10. package/dist/cache/EmbeddingCache.d.ts.map +1 -1
  11. package/dist/cache/EmbeddingCache.js +28 -17
  12. package/dist/cache/EmbeddingCache.js.map +1 -1
  13. package/dist/cli/index.js +658 -141
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/ui.d.ts +134 -0
  16. package/dist/cli/ui.d.ts.map +1 -0
  17. package/dist/cli/ui.js +311 -0
  18. package/dist/cli/ui.js.map +1 -0
  19. package/dist/dashboard/tokens.d.ts +228 -0
  20. package/dist/dashboard/tokens.d.ts.map +1 -0
  21. package/dist/dashboard/tokens.js +450 -0
  22. package/dist/dashboard/tokens.js.map +1 -0
  23. package/dist/dashboard/ui.d.ts +3 -0
  24. package/dist/dashboard/ui.d.ts.map +1 -1
  25. package/dist/dashboard/ui.js +95 -61
  26. package/dist/dashboard/ui.js.map +1 -1
  27. package/dist/db/cloud.d.ts +11 -0
  28. package/dist/db/cloud.d.ts.map +1 -1
  29. package/dist/db/cloud.js +49 -1
  30. package/dist/db/cloud.js.map +1 -1
  31. package/dist/db/migrations.d.ts +1 -0
  32. package/dist/db/migrations.d.ts.map +1 -1
  33. package/dist/db/migrations.js +109 -0
  34. package/dist/db/migrations.js.map +1 -1
  35. package/dist/db/turso-client.d.ts.map +1 -1
  36. package/dist/db/turso-client.js +3 -0
  37. package/dist/db/turso-client.js.map +1 -1
  38. package/dist/events/EventBus.d.ts +21 -0
  39. package/dist/events/EventBus.d.ts.map +1 -1
  40. package/dist/events/EventBus.js +81 -30
  41. package/dist/events/EventBus.js.map +1 -1
  42. package/dist/events/index.d.ts +1 -1
  43. package/dist/events/index.d.ts.map +1 -1
  44. package/dist/events/index.js +1 -1
  45. package/dist/events/index.js.map +1 -1
  46. package/dist/hooks/index.d.ts +1 -0
  47. package/dist/hooks/index.d.ts.map +1 -1
  48. package/dist/hooks/index.js +2 -0
  49. package/dist/hooks/index.js.map +1 -1
  50. package/dist/hooks/startup-verify.d.ts +31 -0
  51. package/dist/hooks/startup-verify.d.ts.map +1 -0
  52. package/dist/hooks/startup-verify.js +360 -0
  53. package/dist/hooks/startup-verify.js.map +1 -0
  54. package/dist/plugins/PluginManager.d.ts +160 -0
  55. package/dist/plugins/PluginManager.d.ts.map +1 -0
  56. package/dist/plugins/PluginManager.js +417 -0
  57. package/dist/plugins/PluginManager.js.map +1 -0
  58. package/dist/plugins/index.d.ts +7 -0
  59. package/dist/plugins/index.d.ts.map +1 -0
  60. package/dist/plugins/index.js +7 -0
  61. package/dist/plugins/index.js.map +1 -0
  62. package/dist/schema/expert-types.d.ts +2 -2
  63. package/dist/services/AuditLog.d.ts +205 -0
  64. package/dist/services/AuditLog.d.ts.map +1 -0
  65. package/dist/services/AuditLog.js +352 -0
  66. package/dist/services/AuditLog.js.map +1 -0
  67. package/dist/services/FeedbackCollector.d.ts +8 -0
  68. package/dist/services/FeedbackCollector.d.ts.map +1 -1
  69. package/dist/services/FeedbackCollector.js +19 -2
  70. package/dist/services/FeedbackCollector.js.map +1 -1
  71. package/dist/services/GitIntegration.d.ts +140 -0
  72. package/dist/services/GitIntegration.d.ts.map +1 -0
  73. package/dist/services/GitIntegration.js +423 -0
  74. package/dist/services/GitIntegration.js.map +1 -0
  75. package/dist/services/HookVerifier.d.ts +95 -0
  76. package/dist/services/HookVerifier.d.ts.map +1 -0
  77. package/dist/services/HookVerifier.js +493 -0
  78. package/dist/services/HookVerifier.js.map +1 -0
  79. package/dist/services/MemoryRelationshipService.d.ts +187 -0
  80. package/dist/services/MemoryRelationshipService.d.ts.map +1 -0
  81. package/dist/services/MemoryRelationshipService.js +375 -0
  82. package/dist/services/MemoryRelationshipService.js.map +1 -0
  83. package/dist/services/MemoryVersioning.d.ts +108 -0
  84. package/dist/services/MemoryVersioning.d.ts.map +1 -0
  85. package/dist/services/MemoryVersioning.js +281 -0
  86. package/dist/services/MemoryVersioning.js.map +1 -0
  87. package/dist/services/context-injector.d.ts +8 -0
  88. package/dist/services/context-injector.d.ts.map +1 -1
  89. package/dist/services/context-injector.js +19 -2
  90. package/dist/services/context-injector.js.map +1 -1
  91. package/dist/services/index.d.ts +5 -0
  92. package/dist/services/index.d.ts.map +1 -1
  93. package/dist/services/index.js +7 -0
  94. package/dist/services/index.js.map +1 -1
  95. package/dist/services/memory-router.d.ts +8 -0
  96. package/dist/services/memory-router.d.ts.map +1 -1
  97. package/dist/services/memory-router.js +19 -2
  98. package/dist/services/memory-router.js.map +1 -1
  99. package/dist/services/pattern-tracker.d.ts +13 -0
  100. package/dist/services/pattern-tracker.d.ts.map +1 -1
  101. package/dist/services/pattern-tracker.js +33 -3
  102. package/dist/services/pattern-tracker.js.map +1 -1
  103. package/dist/services/semantic-search.d.ts +12 -0
  104. package/dist/services/semantic-search.d.ts.map +1 -1
  105. package/dist/services/semantic-search.js +93 -17
  106. package/dist/services/semantic-search.js.map +1 -1
  107. package/dist/testing/index.d.ts +148 -0
  108. package/dist/testing/index.d.ts.map +1 -0
  109. package/dist/testing/index.js +370 -0
  110. package/dist/testing/index.js.map +1 -0
  111. package/dist/types/index.d.ts +1 -0
  112. package/dist/types/index.d.ts.map +1 -1
  113. package/dist/types/index.js +1 -0
  114. package/dist/types/index.js.map +1 -1
  115. package/dist/utils/resilience.d.ts +256 -0
  116. package/dist/utils/resilience.d.ts.map +1 -0
  117. package/dist/utils/resilience.js +499 -0
  118. package/dist/utils/resilience.js.map +1 -0
  119. package/package.json +12 -1
@@ -0,0 +1,256 @@
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 interface RetryOptions {
13
+ /** Maximum number of retry attempts (default: 3) */
14
+ maxRetries: number;
15
+ /** Base delay in milliseconds (default: 1000) */
16
+ baseDelay: number;
17
+ /** Maximum delay cap in milliseconds (default: 30000) */
18
+ maxDelay: number;
19
+ /** Multiplier for exponential backoff (default: 2) */
20
+ backoffMultiplier: number;
21
+ /** Jitter factor 0-1 to randomize delays (default: 0.1) */
22
+ jitter: number;
23
+ /** Function to determine if error is retryable (default: all errors) */
24
+ isRetryable?: (error: unknown) => boolean;
25
+ /** Callback on each retry attempt */
26
+ onRetry?: (attempt: number, error: unknown, nextDelay: number) => void;
27
+ }
28
+ export interface TimeoutOptions<T> {
29
+ /** Timeout in milliseconds */
30
+ timeoutMs: number;
31
+ /** Fallback value if timeout occurs */
32
+ fallback?: T;
33
+ /** Error message for timeout */
34
+ message?: string;
35
+ /** Callback when timeout occurs */
36
+ onTimeout?: () => void;
37
+ }
38
+ export interface CircuitBreakerOptions {
39
+ /** Number of failures before opening circuit (default: 5) */
40
+ failureThreshold: number;
41
+ /** Time in ms to wait before half-open state (default: 30000) */
42
+ resetTimeout: number;
43
+ /** Number of successes needed in half-open to close (default: 2) */
44
+ successThreshold: number;
45
+ /** Callback when circuit state changes */
46
+ onStateChange?: (state: CircuitState) => void;
47
+ }
48
+ export type CircuitState = 'closed' | 'open' | 'half-open';
49
+ export declare class RetryableError extends Error {
50
+ readonly retryAfter?: number | undefined;
51
+ constructor(message: string, retryAfter?: number | undefined);
52
+ }
53
+ export declare class TimeoutError extends Error {
54
+ constructor(message?: string);
55
+ }
56
+ export declare class CircuitOpenError extends Error {
57
+ readonly resetAt?: number | undefined;
58
+ constructor(message?: string, resetAt?: number | undefined);
59
+ }
60
+ /**
61
+ * Execute operation with retry logic and exponential backoff
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * const result = await withRetry(
66
+ * () => fetch('https://api.example.com/data'),
67
+ * { maxRetries: 3, baseDelay: 1000 }
68
+ * )
69
+ * ```
70
+ */
71
+ export declare function withRetry<T>(operation: () => Promise<T>, options?: Partial<RetryOptions>): Promise<T>;
72
+ /**
73
+ * Check if an HTTP status code is retryable
74
+ */
75
+ export declare function isRetryableHttpStatus(status: number): boolean;
76
+ /**
77
+ * Check if an error is a network/transient error
78
+ */
79
+ export declare function isTransientError(error: unknown): boolean;
80
+ /**
81
+ * Execute operation with timeout protection
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * const result = await withTimeout(
86
+ * fetch('https://api.example.com/data'),
87
+ * { timeoutMs: 5000, fallback: null }
88
+ * )
89
+ * ```
90
+ */
91
+ export declare function withTimeout<T>(promise: Promise<T>, options: TimeoutOptions<T>): Promise<T>;
92
+ /**
93
+ * Create an AbortController with automatic timeout
94
+ */
95
+ export declare function createTimeoutController(timeoutMs: number): {
96
+ controller: AbortController;
97
+ cleanup: () => void;
98
+ };
99
+ /**
100
+ * Circuit Breaker for protecting against cascade failures
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * const breaker = new CircuitBreaker({ failureThreshold: 5 })
105
+ *
106
+ * try {
107
+ * const result = await breaker.execute(() => riskyOperation())
108
+ * } catch (error) {
109
+ * if (error instanceof CircuitOpenError) {
110
+ * // Circuit is open, use fallback
111
+ * }
112
+ * }
113
+ * ```
114
+ */
115
+ export declare class CircuitBreaker {
116
+ private state;
117
+ private failures;
118
+ private successes;
119
+ private lastFailureTime;
120
+ private options;
121
+ constructor(options?: Partial<CircuitBreakerOptions>);
122
+ /**
123
+ * Get current circuit state
124
+ */
125
+ getState(): CircuitState;
126
+ /**
127
+ * Get circuit statistics
128
+ */
129
+ getStats(): {
130
+ state: CircuitState;
131
+ failures: number;
132
+ successes: number;
133
+ lastFailureTime: number;
134
+ };
135
+ /**
136
+ * Execute operation through circuit breaker
137
+ */
138
+ execute<T>(operation: () => Promise<T>): Promise<T>;
139
+ /**
140
+ * Record successful operation
141
+ */
142
+ private onSuccess;
143
+ /**
144
+ * Record failed operation
145
+ */
146
+ private onFailure;
147
+ /**
148
+ * Transition to new state
149
+ */
150
+ private transitionTo;
151
+ /**
152
+ * Manually reset the circuit breaker
153
+ */
154
+ reset(): void;
155
+ /**
156
+ * Manually trip the circuit breaker
157
+ */
158
+ trip(): void;
159
+ }
160
+ /**
161
+ * Execute operation with retry, timeout, and circuit breaker
162
+ *
163
+ * @example
164
+ * ```typescript
165
+ * const breaker = new CircuitBreaker()
166
+ *
167
+ * const result = await withResilience(
168
+ * () => fetch('https://api.example.com/data'),
169
+ * {
170
+ * retry: { maxRetries: 3 },
171
+ * timeout: { timeoutMs: 5000 },
172
+ * circuitBreaker: breaker
173
+ * }
174
+ * )
175
+ * ```
176
+ */
177
+ export declare function withResilience<T>(operation: () => Promise<T>, options: {
178
+ retry?: Partial<RetryOptions>;
179
+ timeout?: TimeoutOptions<T>;
180
+ circuitBreaker?: CircuitBreaker;
181
+ }): Promise<T>;
182
+ /**
183
+ * Simple mutex for protecting async initialization
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * const initMutex = new AsyncMutex()
188
+ * let instance: Client | null = null
189
+ *
190
+ * async function getInstance() {
191
+ * if (instance) return instance
192
+ * return initMutex.runExclusive(async () => {
193
+ * if (instance) return instance // Double-check after acquiring lock
194
+ * instance = await createClient()
195
+ * return instance
196
+ * })
197
+ * }
198
+ * ```
199
+ */
200
+ export declare class AsyncMutex {
201
+ private locked;
202
+ private queue;
203
+ /**
204
+ * Check if mutex is currently locked
205
+ */
206
+ isLocked(): boolean;
207
+ /**
208
+ * Acquire the mutex lock
209
+ */
210
+ acquire(): Promise<void>;
211
+ /**
212
+ * Release the mutex lock
213
+ */
214
+ release(): void;
215
+ /**
216
+ * Run operation exclusively (acquires and releases automatically)
217
+ */
218
+ runExclusive<T>(operation: () => Promise<T>): Promise<T>;
219
+ }
220
+ /**
221
+ * Execute cache operation safely (returns null on error instead of throwing)
222
+ */
223
+ export declare function safeCacheGet<T>(operation: () => Promise<T | null>, context?: string): Promise<T | null>;
224
+ /**
225
+ * Execute cache set operation safely (returns success boolean)
226
+ */
227
+ export declare function safeCacheSet(operation: () => Promise<void>, context?: string): Promise<boolean>;
228
+ export interface BatchResult<T, E = unknown> {
229
+ succeeded: T[];
230
+ failed: Array<{
231
+ item: unknown;
232
+ error: E;
233
+ }>;
234
+ total: number;
235
+ successRate: number;
236
+ }
237
+ /**
238
+ * Process items in batches with individual error handling
239
+ *
240
+ * @example
241
+ * ```typescript
242
+ * const result = await processBatch(
243
+ * items,
244
+ * async (item) => await processItem(item),
245
+ * { chunkSize: 10, concurrency: 5 }
246
+ * )
247
+ * console.log(`Processed ${result.succeeded.length}/${result.total}`)
248
+ * ```
249
+ */
250
+ export declare function processBatch<T, R>(items: T[], processor: (item: T, index: number) => Promise<R>, options?: {
251
+ chunkSize?: number;
252
+ concurrency?: number;
253
+ delayBetweenChunks?: number;
254
+ onProgress?: (processed: number, total: number) => void;
255
+ }): Promise<BatchResult<R>>;
256
+ //# sourceMappingURL=resilience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resilience.d.ts","sourceRoot":"","sources":["../../src/utils/resilience.ts"],"names":[],"mappings":"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"}