digital-workers 2.1.1 → 2.1.3

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 (51) hide show
  1. package/.turbo/turbo-build.log +4 -5
  2. package/CHANGELOG.md +14 -0
  3. package/LICENSE +21 -0
  4. package/README.md +134 -180
  5. package/dist/actions.d.ts.map +1 -1
  6. package/dist/actions.js +1 -0
  7. package/dist/actions.js.map +1 -1
  8. package/dist/agent-comms.d.ts +438 -0
  9. package/dist/agent-comms.d.ts.map +1 -0
  10. package/dist/agent-comms.js +666 -0
  11. package/dist/agent-comms.js.map +1 -0
  12. package/dist/capability-tiers.d.ts +230 -0
  13. package/dist/capability-tiers.d.ts.map +1 -0
  14. package/dist/capability-tiers.js +388 -0
  15. package/dist/capability-tiers.js.map +1 -0
  16. package/dist/cascade-context.d.ts +523 -0
  17. package/dist/cascade-context.d.ts.map +1 -0
  18. package/dist/cascade-context.js +494 -0
  19. package/dist/cascade-context.js.map +1 -0
  20. package/dist/error-escalation.d.ts +416 -0
  21. package/dist/error-escalation.d.ts.map +1 -0
  22. package/dist/error-escalation.js +656 -0
  23. package/dist/error-escalation.js.map +1 -0
  24. package/dist/index.d.ts +10 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +34 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/load-balancing.d.ts +395 -0
  29. package/dist/load-balancing.d.ts.map +1 -0
  30. package/dist/load-balancing.js +905 -0
  31. package/dist/load-balancing.js.map +1 -0
  32. package/dist/types.d.ts +8 -0
  33. package/dist/types.d.ts.map +1 -1
  34. package/dist/types.js +1 -0
  35. package/dist/types.js.map +1 -1
  36. package/package.json +14 -13
  37. package/src/actions.ts +9 -8
  38. package/src/agent-comms.ts +1238 -0
  39. package/src/capability-tiers.ts +545 -0
  40. package/src/cascade-context.ts +648 -0
  41. package/src/error-escalation.ts +1135 -0
  42. package/src/index.ts +223 -0
  43. package/src/load-balancing.ts +1381 -0
  44. package/src/types.ts +8 -0
  45. package/test/agent-comms.test.ts +1397 -0
  46. package/test/capability-tiers.test.ts +631 -0
  47. package/test/cascade-context.test.ts +692 -0
  48. package/test/error-escalation.test.ts +1205 -0
  49. package/test/load-balancing-thread-safety.test.ts +464 -0
  50. package/test/load-balancing.test.ts +1145 -0
  51. package/test/types.test.ts +35 -0
@@ -0,0 +1,656 @@
1
+ /**
2
+ * Error Escalation
3
+ *
4
+ * Multi-level error escalation between agent tiers with classification,
5
+ * routing, and recovery patterns.
6
+ *
7
+ * ## Key Concepts
8
+ *
9
+ * 1. **Error Classification** - Categorize errors by severity and type
10
+ * 2. **Escalation Routing** - Determine next tier for escalation
11
+ * 3. **Recovery Patterns** - Retry, fallback, and degradation strategies
12
+ *
13
+ * ## Escalation Flow
14
+ *
15
+ * ```
16
+ * Error -> Classify -> Should Retry? -> Retry with Backoff
17
+ * -> Exhausted -> Should Escalate? -> Escalate to Next Tier
18
+ * -> At Terminal -> Fallback or Degrade
19
+ * ```
20
+ *
21
+ * @packageDocumentation
22
+ */
23
+ import { getNextTier, TIER_ORDER } from './capability-tiers.js';
24
+ // ============================================================================
25
+ // Error Classification Implementation
26
+ // ============================================================================
27
+ let errorIdCounter = 0;
28
+ /**
29
+ * Generate a unique error ID
30
+ */
31
+ function generateErrorId() {
32
+ return `err-${Date.now()}-${++errorIdCounter}`;
33
+ }
34
+ /**
35
+ * Get error severity based on error and options
36
+ */
37
+ export function getErrorSeverity(error, options = {}) {
38
+ const { isRetryable = true, impact = 'single-task' } = options;
39
+ // Critical: system-wide impact and not retryable
40
+ if (impact === 'system' && !isRetryable) {
41
+ return 'critical';
42
+ }
43
+ // High: workflow impact and not retryable
44
+ if (impact === 'workflow' && !isRetryable) {
45
+ return 'high';
46
+ }
47
+ // Medium: workflow impact but retryable
48
+ if (impact === 'workflow' && isRetryable) {
49
+ return 'medium';
50
+ }
51
+ // Low: single-task impact
52
+ return 'low';
53
+ }
54
+ /**
55
+ * Get error category based on error type
56
+ */
57
+ export function getErrorCategory(error) {
58
+ const name = error.name || '';
59
+ const message = error.message || '';
60
+ // Permanent errors - configuration, validation, etc.
61
+ if (name.includes('Configuration') ||
62
+ name.includes('Validation') ||
63
+ name.includes('Invalid') ||
64
+ message.includes('invalid')) {
65
+ return 'permanent';
66
+ }
67
+ // Escalatable errors - require higher tier
68
+ if (name.includes('Approval') ||
69
+ name.includes('Escalation') ||
70
+ message.includes('approval') ||
71
+ message.includes('human')) {
72
+ return 'escalatable';
73
+ }
74
+ // Default to transient (retryable)
75
+ return 'transient';
76
+ }
77
+ /**
78
+ * Create a classified error
79
+ */
80
+ export function createClassifiedError(original, options) {
81
+ return {
82
+ id: generateErrorId(),
83
+ original,
84
+ severity: options.severity,
85
+ category: options.category,
86
+ tier: options.tier,
87
+ agentId: options.agentId,
88
+ taskId: options.taskId,
89
+ timestamp: new Date(),
90
+ stack: original.stack,
91
+ previousError: options.previousError,
92
+ context: options.context,
93
+ };
94
+ }
95
+ /**
96
+ * Classify an error automatically
97
+ */
98
+ export function classifyError(error, options = {}) {
99
+ const severity = getErrorSeverity(error);
100
+ const category = getErrorCategory(error);
101
+ return createClassifiedError(error, {
102
+ severity,
103
+ category,
104
+ ...options,
105
+ });
106
+ }
107
+ /**
108
+ * Check if error is escalatable
109
+ */
110
+ export function isEscalatable(error) {
111
+ // Critical errors are always escalatable
112
+ if (error.severity === 'critical') {
113
+ return true;
114
+ }
115
+ // Escalatable category
116
+ if (error.category === 'escalatable') {
117
+ return true;
118
+ }
119
+ // High severity transient errors
120
+ if (error.severity === 'high' && error.category === 'transient') {
121
+ return true;
122
+ }
123
+ return false;
124
+ }
125
+ /**
126
+ * Preserve context through escalation
127
+ */
128
+ export function preserveContext(context, updates = {}) {
129
+ return {
130
+ ...context,
131
+ ...updates,
132
+ metadata: {
133
+ ...context.metadata,
134
+ ...updates.metadata,
135
+ },
136
+ };
137
+ }
138
+ /**
139
+ * Build error chain from escalation history
140
+ */
141
+ export function buildErrorChain(error, options = {}) {
142
+ const { maxDepth = 50 } = options;
143
+ const chain = [];
144
+ let current = error;
145
+ let depth = 0;
146
+ while (current && depth < maxDepth) {
147
+ chain.unshift(current);
148
+ current = current.previousError;
149
+ depth++;
150
+ }
151
+ return chain;
152
+ }
153
+ // ============================================================================
154
+ // Escalation Routing Implementation
155
+ // ============================================================================
156
+ const SEVERITY_ORDER = {
157
+ low: 0,
158
+ medium: 1,
159
+ high: 2,
160
+ critical: 3,
161
+ };
162
+ /**
163
+ * Create an escalation policy with defaults
164
+ */
165
+ export function createEscalationPolicy(options) {
166
+ return {
167
+ maxEscalationDepth: options.maxEscalationDepth ?? 10,
168
+ allowSkipTiers: options.allowSkipTiers ?? false,
169
+ skipTierThreshold: options.skipTierThreshold,
170
+ rules: options.rules ?? [],
171
+ tierPolicies: options.tierPolicies,
172
+ };
173
+ }
174
+ /**
175
+ * Get next escalation tier based on error and policy
176
+ */
177
+ export function getNextEscalationTier(error, policy) {
178
+ const currentTier = error.tier ?? 'code';
179
+ // Check custom rules first
180
+ const applicableRules = policy.rules
181
+ .filter(rule => rule.fromTier === currentTier && rule.condition(error))
182
+ .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
183
+ if (applicableRules.length > 0) {
184
+ return applicableRules[0].toTier;
185
+ }
186
+ // Check if we should skip tiers
187
+ if (policy.allowSkipTiers &&
188
+ policy.skipTierThreshold &&
189
+ SEVERITY_ORDER[error.severity] >= SEVERITY_ORDER[policy.skipTierThreshold]) {
190
+ return 'human';
191
+ }
192
+ // Default: go to next tier
193
+ return getNextTier(currentTier);
194
+ }
195
+ /**
196
+ * Determine escalation path for an error
197
+ */
198
+ export function determineEscalationPath(error, policy) {
199
+ const fromTier = error.tier ?? 'code';
200
+ const effectivePolicy = policy ?? createEscalationPolicy({});
201
+ const nextTier = getNextEscalationTier(error, effectivePolicy);
202
+ if (!nextTier || nextTier === fromTier) {
203
+ return {
204
+ fromTier,
205
+ toTier: fromTier,
206
+ reason: 'Cannot escalate further - at terminal tier',
207
+ isTerminal: true,
208
+ };
209
+ }
210
+ return {
211
+ fromTier,
212
+ toTier: nextTier,
213
+ reason: `Escalating due to ${error.severity} severity ${error.category} error`,
214
+ };
215
+ }
216
+ /**
217
+ * Check if escalation should occur based on threshold
218
+ */
219
+ export function shouldEscalate(threshold, errorHistory) {
220
+ const now = Date.now();
221
+ const { errorCount, timeWindow, severityMultiplier } = threshold;
222
+ // Filter by time window if specified
223
+ let relevantErrors = errorHistory;
224
+ if (timeWindow) {
225
+ relevantErrors = errorHistory.filter(entry => now - entry.timestamp <= timeWindow);
226
+ }
227
+ // Calculate weighted count if severity multiplier is specified
228
+ if (severityMultiplier) {
229
+ const weightedCount = relevantErrors.reduce((sum, entry) => {
230
+ const multiplier = entry.severity
231
+ ? (severityMultiplier[entry.severity] ?? 1)
232
+ : 1;
233
+ return sum + multiplier;
234
+ }, 0);
235
+ return weightedCount >= errorCount;
236
+ }
237
+ return relevantErrors.length >= errorCount;
238
+ }
239
+ /**
240
+ * Detect circular escalation
241
+ */
242
+ export function detectCircularEscalation(path, history) {
243
+ // If we're going back to a tier we've already visited, it's circular
244
+ if (history.includes(path.toTier)) {
245
+ return true;
246
+ }
247
+ // Check for de-escalation (going to a lower tier)
248
+ if (TIER_ORDER[path.toTier] < TIER_ORDER[path.fromTier]) {
249
+ // If we've already been at a tier higher than where we're going, it's circular
250
+ const maxTierVisited = Math.max(...history.map(t => TIER_ORDER[t]));
251
+ if (TIER_ORDER[path.toTier] < maxTierVisited) {
252
+ return true;
253
+ }
254
+ }
255
+ return false;
256
+ }
257
+ /**
258
+ * Validate an escalation path
259
+ */
260
+ export function validateEscalationPath(path, history, policy) {
261
+ // Check max depth
262
+ if (history.length >= policy.maxEscalationDepth) {
263
+ return {
264
+ valid: false,
265
+ error: `Escalation depth exceeded: max is ${policy.maxEscalationDepth}`,
266
+ };
267
+ }
268
+ // Check for circular escalation
269
+ if (detectCircularEscalation(path, history)) {
270
+ return {
271
+ valid: false,
272
+ error: 'Circular escalation detected',
273
+ };
274
+ }
275
+ return { valid: true };
276
+ }
277
+ // ============================================================================
278
+ // Recovery Patterns Implementation
279
+ // ============================================================================
280
+ /**
281
+ * Calculate backoff delay with optional jitter
282
+ */
283
+ export function calculateBackoff(config, attemptNumber) {
284
+ const { baseDelayMs, maxDelayMs = Infinity, backoffMultiplier = 2, jitterPercent = 0, } = config;
285
+ // Calculate exponential delay
286
+ let delay = baseDelayMs * Math.pow(backoffMultiplier, attemptNumber);
287
+ // Cap at max delay
288
+ delay = Math.min(delay, maxDelayMs);
289
+ // Add jitter if configured
290
+ if (jitterPercent > 0) {
291
+ const jitterRange = delay * (jitterPercent / 100);
292
+ const jitter = (Math.random() * 2 - 1) * jitterRange;
293
+ delay = delay + jitter;
294
+ }
295
+ return Math.round(delay);
296
+ }
297
+ /**
298
+ * Create initial retry state
299
+ */
300
+ export function createRetryState(config = {}) {
301
+ return {
302
+ attemptNumber: 0,
303
+ lastAttemptTime: null,
304
+ nextRetryTime: null,
305
+ exhausted: false,
306
+ };
307
+ }
308
+ /**
309
+ * Check if retry should occur
310
+ */
311
+ export function shouldRetry(config, state, error) {
312
+ // Already exhausted
313
+ if (state.exhausted) {
314
+ return false;
315
+ }
316
+ // Exceeded max retries
317
+ if (state.attemptNumber >= config.maxRetries) {
318
+ return false;
319
+ }
320
+ // Check if error category is retryable
321
+ if (error && config.retryableCategories) {
322
+ if (!config.retryableCategories.includes(error.category)) {
323
+ return false;
324
+ }
325
+ }
326
+ return true;
327
+ }
328
+ /**
329
+ * Select a fallback agent
330
+ */
331
+ export function selectFallbackAgent(config, agents) {
332
+ // Filter excluded agents
333
+ let candidates = agents.filter(a => !config.excludeAgentIds?.includes(a.id));
334
+ if (candidates.length === 0) {
335
+ return null;
336
+ }
337
+ switch (config.strategy) {
338
+ case 'capability-match':
339
+ if (config.requiredSkills && config.requiredSkills.length > 0) {
340
+ candidates = candidates.filter(a => {
341
+ const agentSkills = a.skills ?? [];
342
+ return config.requiredSkills.every(skill => agentSkills.includes(skill));
343
+ });
344
+ }
345
+ return candidates[0] ?? null;
346
+ case 'least-loaded':
347
+ candidates.sort((a, b) => {
348
+ const loadA = (a.currentLoad ?? 0) / (a.maxLoad ?? 1);
349
+ const loadB = (b.currentLoad ?? 0) / (b.maxLoad ?? 1);
350
+ return loadA - loadB;
351
+ });
352
+ return candidates[0] ?? null;
353
+ case 'same-tier':
354
+ if (config.currentTier) {
355
+ candidates = candidates.filter(a => a.tier === config.currentTier);
356
+ }
357
+ return candidates[0] ?? null;
358
+ case 'round-robin':
359
+ default:
360
+ return candidates[0] ?? null;
361
+ }
362
+ }
363
+ /**
364
+ * Get degradation level based on severity and options
365
+ */
366
+ export function getDegradationLevel(severity, options = {}) {
367
+ // Check custom rules first
368
+ if (options.rules) {
369
+ for (const rule of options.rules) {
370
+ if (rule.condition(severity)) {
371
+ return rule.level;
372
+ }
373
+ }
374
+ }
375
+ // Check error count threshold
376
+ if (options.errorCount !== undefined && options.threshold !== undefined) {
377
+ if (options.errorCount >= options.threshold) {
378
+ // Bump up degradation level
379
+ switch (severity) {
380
+ case 'low':
381
+ return 'partial';
382
+ case 'medium':
383
+ return 'significant';
384
+ case 'high':
385
+ case 'critical':
386
+ return 'full';
387
+ }
388
+ }
389
+ }
390
+ // Default based on severity
391
+ switch (severity) {
392
+ case 'low':
393
+ return 'none';
394
+ case 'medium':
395
+ return 'partial';
396
+ case 'high':
397
+ return 'significant';
398
+ case 'critical':
399
+ return 'full';
400
+ default:
401
+ return 'none';
402
+ }
403
+ }
404
+ /**
405
+ * Create initial recovery state
406
+ */
407
+ export function createRecoveryState(options) {
408
+ return {
409
+ errorId: options.errorId,
410
+ tier: options.tier,
411
+ agentId: options.agentId,
412
+ retryState: createRetryState(),
413
+ escalated: false,
414
+ resolved: false,
415
+ escalationPath: [options.tier],
416
+ fallbackHistory: options.agentId ? [options.agentId] : [],
417
+ };
418
+ }
419
+ /**
420
+ * Update recovery state
421
+ */
422
+ export function updateRecoveryState(state, update) {
423
+ switch (update.type) {
424
+ case 'retry':
425
+ return {
426
+ ...state,
427
+ retryState: {
428
+ ...state.retryState,
429
+ attemptNumber: state.retryState.attemptNumber + 1,
430
+ lastAttemptTime: new Date(),
431
+ exhausted: update.exhausted ?? state.retryState.exhausted,
432
+ },
433
+ lastAction: 'retry',
434
+ };
435
+ case 'escalate':
436
+ const newTier = update.toTier ?? state.tier;
437
+ return {
438
+ ...state,
439
+ tier: newTier,
440
+ escalated: true,
441
+ escalationPath: [...state.escalationPath, newTier],
442
+ lastAction: 'escalate',
443
+ isTerminal: update.isTerminal,
444
+ };
445
+ case 'fallback':
446
+ const oldAgentId = state.agentId;
447
+ return {
448
+ ...state,
449
+ agentId: update.toAgentId,
450
+ fallbackHistory: oldAgentId
451
+ ? [...state.fallbackHistory, oldAgentId]
452
+ : state.fallbackHistory,
453
+ lastAction: 'fallback',
454
+ };
455
+ case 'resolve':
456
+ return {
457
+ ...state,
458
+ resolved: true,
459
+ resolution: update.resolution,
460
+ lastAction: 'resolve',
461
+ };
462
+ default:
463
+ return state;
464
+ }
465
+ }
466
+ /**
467
+ * Check if error is recoverable
468
+ */
469
+ export function isRecoverable(state) {
470
+ // If resolved, not recoverable (already done)
471
+ if (state.resolved) {
472
+ return false;
473
+ }
474
+ // If retries not exhausted, recoverable
475
+ if (!state.retryState.exhausted) {
476
+ return true;
477
+ }
478
+ // If at terminal tier and retries exhausted, not recoverable
479
+ if (state.isTerminal && state.retryState.exhausted) {
480
+ return false;
481
+ }
482
+ // If not at human tier, can still escalate
483
+ if (state.tier !== 'human') {
484
+ return true;
485
+ }
486
+ // At human tier with exhausted retries - not recoverable
487
+ return false;
488
+ }
489
+ // ============================================================================
490
+ // Escalation Engine Implementation
491
+ // ============================================================================
492
+ /**
493
+ * Create an escalation engine
494
+ */
495
+ export function createEscalationEngine(options = {}) {
496
+ const policy = options.policy ?? createEscalationPolicy({});
497
+ const retryConfig = options.retryConfig ?? {
498
+ maxRetries: 3,
499
+ baseDelayMs: 100,
500
+ maxDelayMs: 30000,
501
+ backoffMultiplier: 2,
502
+ };
503
+ // Metrics tracking
504
+ let metrics = {
505
+ totalErrors: 0,
506
+ bySeverity: { low: 0, medium: 0, high: 0, critical: 0 },
507
+ escalationsByTier: {},
508
+ retrySuccessRate: 0,
509
+ retriesTotal: 0,
510
+ retriesSuccessful: 0,
511
+ };
512
+ async function handleError(error, opts) {
513
+ // Classify the error
514
+ const severity = opts.severity ?? getErrorSeverity(error);
515
+ const category = getErrorCategory(error);
516
+ const classifiedError = createClassifiedError(error, {
517
+ severity,
518
+ category,
519
+ tier: opts.tier,
520
+ agentId: opts.agentId,
521
+ taskId: opts.taskId,
522
+ previousError: opts.previousError,
523
+ context: opts.context,
524
+ });
525
+ // Update metrics
526
+ metrics.totalErrors++;
527
+ metrics.bySeverity[severity]++;
528
+ // Get retry state
529
+ const retryState = opts.retryState ?? createRetryState();
530
+ // Get tier-specific config
531
+ const tierPolicy = policy.tierPolicies?.[opts.tier];
532
+ const effectiveRetryConfig = {
533
+ ...retryConfig,
534
+ maxRetries: tierPolicy?.maxRetries ?? retryConfig.maxRetries,
535
+ };
536
+ // Determine action
537
+ let action;
538
+ let retryDelay;
539
+ let escalationPath;
540
+ let fallbackAgent;
541
+ let degradationLevel;
542
+ // Check for simulated retry results
543
+ if (opts.simulateRetrySuccess) {
544
+ metrics.retriesTotal++;
545
+ metrics.retriesSuccessful++;
546
+ metrics.retrySuccessRate = metrics.retriesSuccessful / metrics.retriesTotal;
547
+ }
548
+ else if (opts.simulateRetryFailure) {
549
+ metrics.retriesTotal++;
550
+ metrics.retrySuccessRate = metrics.retriesSuccessful / metrics.retriesTotal;
551
+ }
552
+ // Should we retry?
553
+ if (!retryState.exhausted && shouldRetry(effectiveRetryConfig, retryState, classifiedError)) {
554
+ action = 'retry';
555
+ retryDelay = calculateBackoff(effectiveRetryConfig, retryState.attemptNumber);
556
+ metrics.retriesTotal++;
557
+ }
558
+ // Should we escalate?
559
+ else if (opts.tier !== 'human') {
560
+ // Check escalation history depth
561
+ const history = opts.escalationHistory ?? [opts.tier];
562
+ const path = determineEscalationPath(classifiedError, policy);
563
+ const validation = validateEscalationPath(path, history, policy);
564
+ if (validation.valid && !path.isTerminal) {
565
+ action = 'escalate';
566
+ escalationPath = path;
567
+ metrics.escalationsByTier[opts.tier] = (metrics.escalationsByTier[opts.tier] ?? 0) + 1;
568
+ }
569
+ else if (opts.availableAgents && opts.availableAgents.length > 0) {
570
+ // Try fallback
571
+ action = 'fallback';
572
+ fallbackAgent = selectFallbackAgent({ strategy: 'capability-match', excludeAgentIds: [opts.agentId ?? ''] }, opts.availableAgents) ?? undefined;
573
+ }
574
+ else {
575
+ action = 'degrade';
576
+ degradationLevel = getDegradationLevel(severity);
577
+ }
578
+ }
579
+ // At human tier - try fallback or degrade
580
+ else {
581
+ if (opts.availableAgents && opts.availableAgents.length > 0) {
582
+ action = 'fallback';
583
+ fallbackAgent = selectFallbackAgent({ strategy: 'same-tier', currentTier: 'human', excludeAgentIds: [opts.agentId ?? ''] }, opts.availableAgents) ?? undefined;
584
+ if (!fallbackAgent) {
585
+ action = 'terminal';
586
+ }
587
+ }
588
+ else {
589
+ action = 'terminal';
590
+ }
591
+ }
592
+ return {
593
+ handled: true,
594
+ action,
595
+ classifiedError,
596
+ retryDelay,
597
+ escalationPath,
598
+ fallbackAgent,
599
+ degradationLevel,
600
+ preservedContext: opts.context,
601
+ errorChain: opts.previousError
602
+ ? buildErrorChain(classifiedError)
603
+ : undefined,
604
+ };
605
+ }
606
+ function getMetrics() {
607
+ return { ...metrics };
608
+ }
609
+ function reset() {
610
+ metrics = {
611
+ totalErrors: 0,
612
+ bySeverity: { low: 0, medium: 0, high: 0, critical: 0 },
613
+ escalationsByTier: {},
614
+ retrySuccessRate: 0,
615
+ retriesTotal: 0,
616
+ retriesSuccessful: 0,
617
+ };
618
+ }
619
+ return {
620
+ handleError,
621
+ getMetrics,
622
+ reset,
623
+ };
624
+ }
625
+ // ============================================================================
626
+ // Default Export
627
+ // ============================================================================
628
+ export default {
629
+ // Error Classification
630
+ getErrorSeverity,
631
+ getErrorCategory,
632
+ createClassifiedError,
633
+ classifyError,
634
+ isEscalatable,
635
+ preserveContext,
636
+ buildErrorChain,
637
+ // Escalation Routing
638
+ createEscalationPolicy,
639
+ getNextEscalationTier,
640
+ determineEscalationPath,
641
+ shouldEscalate,
642
+ detectCircularEscalation,
643
+ validateEscalationPath,
644
+ // Recovery Patterns
645
+ calculateBackoff,
646
+ createRetryState,
647
+ shouldRetry,
648
+ selectFallbackAgent,
649
+ getDegradationLevel,
650
+ createRecoveryState,
651
+ updateRecoveryState,
652
+ isRecoverable,
653
+ // Escalation Engine
654
+ createEscalationEngine,
655
+ };
656
+ //# sourceMappingURL=error-escalation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-escalation.js","sourceRoot":"","sources":["../src/error-escalation.ts"],"names":[],"mappings":"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"}