specweave 0.29.0 → 0.29.2

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 (87) hide show
  1. package/package.json +3 -1
  2. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +18 -0
  3. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +27 -0
  4. package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts +0 -26
  5. package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts.map +0 -1
  6. package/dist/plugins/specweave-github/lib/enhanced-github-sync.js +0 -249
  7. package/dist/plugins/specweave-github/lib/enhanced-github-sync.js.map +0 -1
  8. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +0 -28
  9. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +0 -1
  10. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +0 -156
  11. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +0 -1
  12. package/dist/src/core/sync/bidirectional-engine.d.ts +0 -119
  13. package/dist/src/core/sync/bidirectional-engine.d.ts.map +0 -1
  14. package/dist/src/core/sync/bidirectional-engine.js +0 -359
  15. package/dist/src/core/sync/bidirectional-engine.js.map +0 -1
  16. package/dist/src/core/sync/conflict-resolver.d.ts +0 -66
  17. package/dist/src/core/sync/conflict-resolver.d.ts.map +0 -1
  18. package/dist/src/core/sync/conflict-resolver.js +0 -108
  19. package/dist/src/core/sync/conflict-resolver.js.map +0 -1
  20. package/dist/src/core/sync/enhanced-content-builder.d.ts +0 -55
  21. package/dist/src/core/sync/enhanced-content-builder.d.ts.map +0 -1
  22. package/dist/src/core/sync/enhanced-content-builder.js +0 -203
  23. package/dist/src/core/sync/enhanced-content-builder.js.map +0 -1
  24. package/dist/src/core/sync/folder-mapper.d.ts +0 -71
  25. package/dist/src/core/sync/folder-mapper.d.ts.map +0 -1
  26. package/dist/src/core/sync/folder-mapper.js +0 -203
  27. package/dist/src/core/sync/folder-mapper.js.map +0 -1
  28. package/dist/src/core/sync/label-detector.d.ts +0 -66
  29. package/dist/src/core/sync/label-detector.d.ts.map +0 -1
  30. package/dist/src/core/sync/label-detector.js +0 -224
  31. package/dist/src/core/sync/label-detector.js.map +0 -1
  32. package/dist/src/core/sync/performance-optimizer.d.ts +0 -153
  33. package/dist/src/core/sync/performance-optimizer.d.ts.map +0 -1
  34. package/dist/src/core/sync/performance-optimizer.js +0 -220
  35. package/dist/src/core/sync/performance-optimizer.js.map +0 -1
  36. package/dist/src/core/sync/profile-selector.d.ts +0 -52
  37. package/dist/src/core/sync/profile-selector.d.ts.map +0 -1
  38. package/dist/src/core/sync/profile-selector.js +0 -179
  39. package/dist/src/core/sync/profile-selector.js.map +0 -1
  40. package/dist/src/core/sync/profile-validator.d.ts +0 -52
  41. package/dist/src/core/sync/profile-validator.d.ts.map +0 -1
  42. package/dist/src/core/sync/profile-validator.js +0 -170
  43. package/dist/src/core/sync/profile-validator.js.map +0 -1
  44. package/dist/src/core/sync/rate-limiter.d.ts +0 -116
  45. package/dist/src/core/sync/rate-limiter.d.ts.map +0 -1
  46. package/dist/src/core/sync/rate-limiter.js +0 -308
  47. package/dist/src/core/sync/rate-limiter.js.map +0 -1
  48. package/dist/src/core/sync/retry-handler.d.ts +0 -98
  49. package/dist/src/core/sync/retry-handler.d.ts.map +0 -1
  50. package/dist/src/core/sync/retry-handler.js +0 -196
  51. package/dist/src/core/sync/retry-handler.js.map +0 -1
  52. package/dist/src/core/sync/retry-logic.d.ts +0 -64
  53. package/dist/src/core/sync/retry-logic.d.ts.map +0 -1
  54. package/dist/src/core/sync/retry-logic.js +0 -165
  55. package/dist/src/core/sync/retry-logic.js.map +0 -1
  56. package/dist/src/core/sync/status-cache.d.ts +0 -91
  57. package/dist/src/core/sync/status-cache.d.ts.map +0 -1
  58. package/dist/src/core/sync/status-cache.js +0 -140
  59. package/dist/src/core/sync/status-cache.js.map +0 -1
  60. package/dist/src/core/sync/status-mapper.d.ts +0 -69
  61. package/dist/src/core/sync/status-mapper.d.ts.map +0 -1
  62. package/dist/src/core/sync/status-mapper.js +0 -90
  63. package/dist/src/core/sync/status-mapper.js.map +0 -1
  64. package/dist/src/core/sync/status-sync-engine.d.ts +0 -162
  65. package/dist/src/core/sync/status-sync-engine.d.ts.map +0 -1
  66. package/dist/src/core/sync/status-sync-engine.js +0 -347
  67. package/dist/src/core/sync/status-sync-engine.js.map +0 -1
  68. package/dist/src/core/sync/sync-event-logger.d.ts +0 -113
  69. package/dist/src/core/sync/sync-event-logger.d.ts.map +0 -1
  70. package/dist/src/core/sync/sync-event-logger.js +0 -141
  71. package/dist/src/core/sync/sync-event-logger.js.map +0 -1
  72. package/dist/src/core/sync/time-range-selector.d.ts +0 -48
  73. package/dist/src/core/sync/time-range-selector.d.ts.map +0 -1
  74. package/dist/src/core/sync/time-range-selector.js +0 -224
  75. package/dist/src/core/sync/time-range-selector.js.map +0 -1
  76. package/dist/src/core/sync/types.d.ts +0 -52
  77. package/dist/src/core/sync/types.d.ts.map +0 -1
  78. package/dist/src/core/sync/types.js +0 -5
  79. package/dist/src/core/sync/types.js.map +0 -1
  80. package/dist/src/core/sync/workflow-detector.d.ts +0 -95
  81. package/dist/src/core/sync/workflow-detector.d.ts.map +0 -1
  82. package/dist/src/core/sync/workflow-detector.js +0 -175
  83. package/dist/src/core/sync/workflow-detector.js.map +0 -1
  84. package/plugins/specweave-github/lib/enhanced-github-sync.js +0 -220
  85. package/plugins/specweave-github/lib/enhanced-github-sync.ts +0 -322
  86. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +0 -134
  87. package/plugins/specweave-jira/lib/enhanced-jira-sync.ts +0 -196
@@ -1,98 +0,0 @@
1
- /**
2
- * Retry Handler for Status Sync
3
- *
4
- * Implements exponential backoff retry logic for handling transient failures
5
- * in external API calls (GitHub, JIRA, Azure DevOps).
6
- *
7
- * Features:
8
- * - Exponential backoff (1s, 2s, 4s, 8s)
9
- * - Maximum retry attempts (default: 3)
10
- * - Rate limit detection and handling
11
- * - Clear error messages
12
- *
13
- * @module retry-handler
14
- */
15
- export type RetryableError = 'network-error' | 'rate-limit' | 'server-error' | 'timeout' | 'unknown';
16
- export interface RetryConfig {
17
- maxRetries?: number;
18
- initialDelayMs?: number;
19
- maxDelayMs?: number;
20
- backoffMultiplier?: number;
21
- }
22
- export interface RetryContext {
23
- attempt: number;
24
- maxRetries: number;
25
- lastError: Error;
26
- errorType: RetryableError;
27
- }
28
- export interface RetryResult<T> {
29
- success: boolean;
30
- value?: T;
31
- error?: Error;
32
- attempts: number;
33
- totalDelay: number;
34
- }
35
- /**
36
- * Retry Handler
37
- *
38
- * Handles retries with exponential backoff for external API calls.
39
- */
40
- export declare class RetryHandler {
41
- private config;
42
- constructor(config?: RetryConfig);
43
- /**
44
- * Execute operation with retry logic
45
- *
46
- * @param operation - Async operation to execute
47
- * @param errorClassifier - Function to classify errors (determines if retryable)
48
- * @returns Retry result with value or error
49
- */
50
- executeWithRetry<T>(operation: () => Promise<T>, errorClassifier?: (error: Error) => RetryableError): Promise<RetryResult<T>>;
51
- /**
52
- * Classify error type
53
- *
54
- * @param error - Error to classify
55
- * @returns Error type
56
- */
57
- private classifyError;
58
- /**
59
- * Check if error type is retryable
60
- *
61
- * @param errorType - Error type
62
- * @returns True if retryable
63
- */
64
- private isRetryable;
65
- /**
66
- * Calculate delay for retry attempt
67
- *
68
- * Uses exponential backoff: initialDelay * (multiplier ^ (attempt - 1))
69
- *
70
- * @param attempt - Current attempt number (1-based)
71
- * @returns Delay in milliseconds
72
- */
73
- private calculateDelay;
74
- /**
75
- * Delay execution
76
- *
77
- * @param ms - Milliseconds to delay
78
- */
79
- private delay;
80
- /**
81
- * Create clear error message for user
82
- *
83
- * @param error - Original error
84
- * @param context - Retry context
85
- * @returns User-friendly error message
86
- */
87
- static createErrorMessage(error: Error, context: RetryContext): string;
88
- /**
89
- * Handle rate limit error
90
- *
91
- * Detects rate limit from error and calculates wait time.
92
- *
93
- * @param error - Error that may contain rate limit info
94
- * @returns Wait time in seconds (null if not rate limit)
95
- */
96
- static detectRateLimitWait(error: Error): number | null;
97
- }
98
- //# sourceMappingURL=retry-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry-handler.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/retry-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,cAAc,GACtB,eAAe,GACf,YAAY,GACZ,cAAc,GACd,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;IACjB,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAwB;gBAE1B,MAAM,GAAE,WAAgB;IASpC;;;;;;OAMG;IACG,gBAAgB,CAAC,CAAC,EACtB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,cAAc,GACjD,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAoD1B;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IA0CrB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;IAStB;;;;OAIG;IACH,OAAO,CAAC,KAAK;IAIb;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM;IAkBtE;;;;;;;OAOG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;CAsBxD"}
@@ -1,196 +0,0 @@
1
- /**
2
- * Retry Handler for Status Sync
3
- *
4
- * Implements exponential backoff retry logic for handling transient failures
5
- * in external API calls (GitHub, JIRA, Azure DevOps).
6
- *
7
- * Features:
8
- * - Exponential backoff (1s, 2s, 4s, 8s)
9
- * - Maximum retry attempts (default: 3)
10
- * - Rate limit detection and handling
11
- * - Clear error messages
12
- *
13
- * @module retry-handler
14
- */
15
- /**
16
- * Retry Handler
17
- *
18
- * Handles retries with exponential backoff for external API calls.
19
- */
20
- export class RetryHandler {
21
- constructor(config = {}) {
22
- this.config = {
23
- maxRetries: config.maxRetries ?? 3,
24
- initialDelayMs: config.initialDelayMs ?? 1000,
25
- maxDelayMs: config.maxDelayMs ?? 8000,
26
- backoffMultiplier: config.backoffMultiplier ?? 2
27
- };
28
- }
29
- /**
30
- * Execute operation with retry logic
31
- *
32
- * @param operation - Async operation to execute
33
- * @param errorClassifier - Function to classify errors (determines if retryable)
34
- * @returns Retry result with value or error
35
- */
36
- async executeWithRetry(operation, errorClassifier) {
37
- let attempt = 0;
38
- let totalDelay = 0;
39
- let lastError;
40
- while (attempt <= this.config.maxRetries) {
41
- try {
42
- const value = await operation();
43
- return {
44
- success: true,
45
- value,
46
- attempts: attempt + 1,
47
- totalDelay
48
- };
49
- }
50
- catch (error) {
51
- lastError = error;
52
- attempt++;
53
- // Classify error
54
- const errorType = errorClassifier
55
- ? errorClassifier(lastError)
56
- : this.classifyError(lastError);
57
- // Check if we should retry
58
- if (!this.isRetryable(errorType) || attempt > this.config.maxRetries) {
59
- return {
60
- success: false,
61
- error: lastError,
62
- attempts: attempt,
63
- totalDelay
64
- };
65
- }
66
- // Calculate delay for next retry
67
- const delay = this.calculateDelay(attempt);
68
- totalDelay += delay;
69
- // Wait before retrying
70
- await this.delay(delay);
71
- }
72
- }
73
- // Should not reach here, but TypeScript needs this
74
- return {
75
- success: false,
76
- error: lastError ?? new Error('Unknown error'),
77
- attempts: attempt,
78
- totalDelay
79
- };
80
- }
81
- /**
82
- * Classify error type
83
- *
84
- * @param error - Error to classify
85
- * @returns Error type
86
- */
87
- classifyError(error) {
88
- const message = error.message.toLowerCase();
89
- // Network errors (retry)
90
- if (message.includes('network') ||
91
- message.includes('econnrefused') ||
92
- message.includes('enotfound') ||
93
- message.includes('etimedout')) {
94
- return 'network-error';
95
- }
96
- // Rate limit errors (retry with longer delay)
97
- if (message.includes('rate limit') ||
98
- message.includes('429') ||
99
- message.includes('too many requests')) {
100
- return 'rate-limit';
101
- }
102
- // Server errors (retry)
103
- if (message.includes('500') ||
104
- message.includes('502') ||
105
- message.includes('503') ||
106
- message.includes('504') ||
107
- message.includes('internal server error')) {
108
- return 'server-error';
109
- }
110
- // Timeout errors (retry)
111
- if (message.includes('timeout')) {
112
- return 'timeout';
113
- }
114
- // Unknown errors (don't retry by default)
115
- return 'unknown';
116
- }
117
- /**
118
- * Check if error type is retryable
119
- *
120
- * @param errorType - Error type
121
- * @returns True if retryable
122
- */
123
- isRetryable(errorType) {
124
- return errorType !== 'unknown';
125
- }
126
- /**
127
- * Calculate delay for retry attempt
128
- *
129
- * Uses exponential backoff: initialDelay * (multiplier ^ (attempt - 1))
130
- *
131
- * @param attempt - Current attempt number (1-based)
132
- * @returns Delay in milliseconds
133
- */
134
- calculateDelay(attempt) {
135
- const delay = this.config.initialDelayMs *
136
- Math.pow(this.config.backoffMultiplier, attempt - 1);
137
- // Cap at max delay
138
- return Math.min(delay, this.config.maxDelayMs);
139
- }
140
- /**
141
- * Delay execution
142
- *
143
- * @param ms - Milliseconds to delay
144
- */
145
- delay(ms) {
146
- return new Promise(resolve => setTimeout(resolve, ms));
147
- }
148
- /**
149
- * Create clear error message for user
150
- *
151
- * @param error - Original error
152
- * @param context - Retry context
153
- * @returns User-friendly error message
154
- */
155
- static createErrorMessage(error, context) {
156
- const messages = {
157
- 'network-error': `Network error occurred. Please check your internet connection and try again.`,
158
- 'rate-limit': `Rate limit exceeded for external API. Please wait a few minutes and try again.`,
159
- 'server-error': `External service is experiencing issues. Please try again later.`,
160
- 'timeout': `Request timed out. Please check your connection and try again.`,
161
- 'unknown': `An unexpected error occurred: ${error.message}`
162
- };
163
- const baseMessage = messages[context.errorType];
164
- if (context.attempt >= context.maxRetries) {
165
- return `${baseMessage}\n\nFailed after ${context.attempt} attempts.`;
166
- }
167
- return baseMessage;
168
- }
169
- /**
170
- * Handle rate limit error
171
- *
172
- * Detects rate limit from error and calculates wait time.
173
- *
174
- * @param error - Error that may contain rate limit info
175
- * @returns Wait time in seconds (null if not rate limit)
176
- */
177
- static detectRateLimitWait(error) {
178
- const message = error.message;
179
- // GitHub rate limit format: "API rate limit exceeded. Retry after 60 seconds"
180
- const githubMatch = message.match(/retry after (\d+) seconds/i);
181
- if (githubMatch) {
182
- return parseInt(githubMatch[1], 10);
183
- }
184
- // JIRA rate limit (typically in headers, but may be in error message)
185
- const jiraMatch = message.match(/retry after (\d+)/i);
186
- if (jiraMatch) {
187
- return parseInt(jiraMatch[1], 10);
188
- }
189
- // Generic 429 error - default to 60 seconds
190
- if (message.includes('429') || message.toLowerCase().includes('rate limit')) {
191
- return 60;
192
- }
193
- return null;
194
- }
195
- }
196
- //# sourceMappingURL=retry-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry-handler.js","sourceRoot":"","sources":["../../../../src/core/sync/retry-handler.ts"],"names":[],"mappings":"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"}
@@ -1,64 +0,0 @@
1
- /**
2
- * Retry Logic
3
- *
4
- * Provides retry functionality with exponential backoff.
5
- * Handles transient errors (network, rate limits, timeouts).
6
- *
7
- * Retry Strategy:
8
- * - Max 3 retries
9
- * - Exponential backoff: 1s, 2s, 4s
10
- * - Special handling for rate limits (wait and retry)
11
- *
12
- * @module retry-logic
13
- */
14
- export interface RetryOptions {
15
- maxRetries?: number;
16
- initialDelayMs?: number;
17
- maxDelayMs?: number;
18
- retryableErrors?: string[];
19
- }
20
- export interface RetryResult<T> {
21
- success: boolean;
22
- result?: T;
23
- error?: Error;
24
- attempts: number;
25
- totalDelayMs: number;
26
- }
27
- /**
28
- * Check if error is retryable
29
- *
30
- * @param error - Error to check
31
- * @returns True if error is retryable
32
- */
33
- export declare function isRetryableError(error: Error): boolean;
34
- /**
35
- * Extract rate limit wait time from error
36
- *
37
- * @param error - Error that may contain rate limit info
38
- * @returns Wait time in milliseconds, or null if not rate limit error
39
- */
40
- export declare function extractRateLimitWaitTime(error: Error): number | null;
41
- /**
42
- * Retry function with exponential backoff
43
- *
44
- * @param fn - Function to retry
45
- * @param options - Retry options
46
- * @returns Retry result
47
- */
48
- export declare function retryWithBackoff<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<RetryResult<T>>;
49
- /**
50
- * Create error message with retry information
51
- *
52
- * @param error - Original error
53
- * @param attempts - Number of attempts made
54
- * @returns Enhanced error message
55
- */
56
- export declare function createRetryErrorMessage(error: Error, attempts: number): string;
57
- /**
58
- * Check if error is permanent (not worth retrying)
59
- *
60
- * @param error - Error to check
61
- * @returns True if error is permanent
62
- */
63
- export declare function isPermanentError(error: Error): boolean;
64
- //# sourceMappingURL=retry-logic.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry-logic.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/retry-logic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAkCtD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAqBpE;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA4DzB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAwBtD"}
@@ -1,165 +0,0 @@
1
- /**
2
- * Retry Logic
3
- *
4
- * Provides retry functionality with exponential backoff.
5
- * Handles transient errors (network, rate limits, timeouts).
6
- *
7
- * Retry Strategy:
8
- * - Max 3 retries
9
- * - Exponential backoff: 1s, 2s, 4s
10
- * - Special handling for rate limits (wait and retry)
11
- *
12
- * @module retry-logic
13
- */
14
- /**
15
- * Check if error is retryable
16
- *
17
- * @param error - Error to check
18
- * @returns True if error is retryable
19
- */
20
- export function isRetryableError(error) {
21
- const message = error.message.toLowerCase();
22
- // Network errors
23
- if (message.includes('network') ||
24
- message.includes('timeout') ||
25
- message.includes('econnreset') ||
26
- message.includes('enotfound') ||
27
- message.includes('econnrefused')) {
28
- return true;
29
- }
30
- // Rate limit errors
31
- if (message.includes('rate limit') ||
32
- message.includes('429') ||
33
- message.includes('too many requests')) {
34
- return true;
35
- }
36
- // Temporary server errors
37
- if (message.includes('500') ||
38
- message.includes('502') ||
39
- message.includes('503') ||
40
- message.includes('504')) {
41
- return true;
42
- }
43
- return false;
44
- }
45
- /**
46
- * Extract rate limit wait time from error
47
- *
48
- * @param error - Error that may contain rate limit info
49
- * @returns Wait time in milliseconds, or null if not rate limit error
50
- */
51
- export function extractRateLimitWaitTime(error) {
52
- const message = error.message;
53
- // GitHub: "Rate limit exceeded. Retry after 60 seconds."
54
- const githubMatch = message.match(/retry after (\d+) seconds/i);
55
- if (githubMatch) {
56
- return parseInt(githubMatch[1]) * 1000;
57
- }
58
- // JIRA/ADO: "Rate limit exceeded. Retry-After: 120"
59
- const retryAfterMatch = message.match(/retry-after:\s*(\d+)/i);
60
- if (retryAfterMatch) {
61
- return parseInt(retryAfterMatch[1]) * 1000;
62
- }
63
- // Generic rate limit: default wait 60 seconds
64
- if (message.toLowerCase().includes('rate limit')) {
65
- return 60 * 1000;
66
- }
67
- return null;
68
- }
69
- /**
70
- * Retry function with exponential backoff
71
- *
72
- * @param fn - Function to retry
73
- * @param options - Retry options
74
- * @returns Retry result
75
- */
76
- export async function retryWithBackoff(fn, options) {
77
- const maxRetries = options?.maxRetries || 3;
78
- const initialDelay = options?.initialDelayMs || 1000;
79
- const maxDelay = options?.maxDelayMs || 8000;
80
- let lastError;
81
- let totalDelay = 0;
82
- for (let attempt = 1; attempt <= maxRetries + 1; attempt++) {
83
- try {
84
- const result = await fn();
85
- return {
86
- success: true,
87
- result,
88
- attempts: attempt,
89
- totalDelayMs: totalDelay
90
- };
91
- }
92
- catch (error) {
93
- lastError = error instanceof Error ? error : new Error(String(error));
94
- // If this is the last attempt, don't retry
95
- if (attempt > maxRetries) {
96
- break;
97
- }
98
- // Check if error is retryable
99
- if (!isRetryableError(lastError)) {
100
- // Non-retryable error - fail immediately
101
- return {
102
- success: false,
103
- error: lastError,
104
- attempts: attempt,
105
- totalDelayMs: totalDelay
106
- };
107
- }
108
- // Calculate delay
109
- let delay = initialDelay * Math.pow(2, attempt - 1);
110
- // Check for rate limit wait time
111
- const rateLimitWait = extractRateLimitWaitTime(lastError);
112
- if (rateLimitWait) {
113
- delay = Math.min(rateLimitWait, maxDelay);
114
- }
115
- else {
116
- delay = Math.min(delay, maxDelay);
117
- }
118
- totalDelay += delay;
119
- // Wait before retry
120
- await new Promise(resolve => setTimeout(resolve, delay));
121
- }
122
- }
123
- return {
124
- success: false,
125
- error: lastError,
126
- attempts: maxRetries + 1,
127
- totalDelayMs: totalDelay
128
- };
129
- }
130
- /**
131
- * Create error message with retry information
132
- *
133
- * @param error - Original error
134
- * @param attempts - Number of attempts made
135
- * @returns Enhanced error message
136
- */
137
- export function createRetryErrorMessage(error, attempts) {
138
- return `${error.message} (failed after ${attempts} attempts)`;
139
- }
140
- /**
141
- * Check if error is permanent (not worth retrying)
142
- *
143
- * @param error - Error to check
144
- * @returns True if error is permanent
145
- */
146
- export function isPermanentError(error) {
147
- const message = error.message.toLowerCase();
148
- // Authentication/Authorization errors
149
- if (message.includes('401') ||
150
- message.includes('403') ||
151
- message.includes('unauthorized') ||
152
- message.includes('forbidden')) {
153
- return true;
154
- }
155
- // Not found errors
156
- if (message.includes('404') || message.includes('not found')) {
157
- return true;
158
- }
159
- // Bad request errors
160
- if (message.includes('400') || message.includes('bad request')) {
161
- return true;
162
- }
163
- return false;
164
- }
165
- //# sourceMappingURL=retry-logic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry-logic.js","sourceRoot":"","sources":["../../../../src/core/sync/retry-logic.ts"],"names":[],"mappings":"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"}
@@ -1,91 +0,0 @@
1
- /**
2
- * Status Cache
3
- *
4
- * Caches external tool statuses to reduce API calls.
5
- * Uses in-memory cache with TTL (default: 5 minutes).
6
- *
7
- * Performance Optimization:
8
- * - Reduces redundant API calls
9
- * - Improves sync speed
10
- * - Respects rate limits
11
- *
12
- * @module status-cache
13
- */
14
- export interface CacheEntry<T> {
15
- value: T;
16
- timestamp: number;
17
- ttl: number;
18
- }
19
- export interface CacheOptions {
20
- ttl?: number;
21
- }
22
- /**
23
- * Status Cache
24
- *
25
- * Generic cache for external tool statuses.
26
- */
27
- export declare class StatusCache<T = any> {
28
- private cache;
29
- private defaultTtl;
30
- constructor(options?: CacheOptions);
31
- /**
32
- * Get value from cache
33
- *
34
- * @param key - Cache key
35
- * @returns Cached value or undefined if not found/expired
36
- */
37
- get(key: string): T | undefined;
38
- /**
39
- * Set value in cache
40
- *
41
- * @param key - Cache key
42
- * @param value - Value to cache
43
- * @param ttl - Optional TTL override (ms)
44
- */
45
- set(key: string, value: T, ttl?: number): void;
46
- /**
47
- * Check if key exists and is not expired
48
- *
49
- * @param key - Cache key
50
- * @returns True if key exists and is not expired
51
- */
52
- has(key: string): boolean;
53
- /**
54
- * Delete key from cache
55
- *
56
- * @param key - Cache key
57
- */
58
- delete(key: string): void;
59
- /**
60
- * Clear all cache entries
61
- */
62
- clear(): void;
63
- /**
64
- * Get cache size
65
- *
66
- * @returns Number of entries in cache
67
- */
68
- size(): number;
69
- /**
70
- * Clean up expired entries
71
- *
72
- * Removes all expired entries from cache.
73
- */
74
- cleanup(): void;
75
- /**
76
- * Get cache statistics
77
- *
78
- * @returns Cache statistics (size, oldest entry age)
79
- */
80
- getStats(): {
81
- size: number;
82
- oldestEntryAge: number | null;
83
- };
84
- }
85
- /**
86
- * Global status cache instance
87
- *
88
- * Used across all sync operations for maximum efficiency.
89
- */
90
- export declare const globalStatusCache: StatusCache<any>;
91
- //# sourceMappingURL=status-cache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-cache.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/status-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,GAAG;IAC9B,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,CAAC,EAAE,YAAY;IAKlC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAoB/B;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAU9C;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,IAAI,IAAI,MAAM;IAMd;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAgBf;;;;OAIG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CAqB5D;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,kBAAoB,CAAC"}