agentic-qe 1.9.4 → 2.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 (262) hide show
  1. package/.claude/agents/qe-api-contract-validator.md +95 -1336
  2. package/.claude/agents/qe-chaos-engineer.md +152 -1211
  3. package/.claude/agents/qe-code-complexity.md +144 -707
  4. package/.claude/agents/qe-coverage-analyzer.md +147 -743
  5. package/.claude/agents/qe-deployment-readiness.md +143 -1496
  6. package/.claude/agents/qe-flaky-test-hunter.md +132 -1529
  7. package/.claude/agents/qe-fleet-commander.md +12 -12
  8. package/.claude/agents/qe-performance-tester.md +150 -886
  9. package/.claude/agents/qe-production-intelligence.md +155 -1396
  10. package/.claude/agents/qe-quality-analyzer.md +6 -6
  11. package/.claude/agents/qe-quality-gate.md +151 -648
  12. package/.claude/agents/qe-regression-risk-analyzer.md +132 -1150
  13. package/.claude/agents/qe-requirements-validator.md +149 -932
  14. package/.claude/agents/qe-security-scanner.md +157 -797
  15. package/.claude/agents/qe-test-data-architect.md +96 -1365
  16. package/.claude/agents/qe-test-executor.md +8 -8
  17. package/.claude/agents/qe-test-generator.md +145 -1540
  18. package/.claude/agents/qe-visual-tester.md +153 -1257
  19. package/.claude/agents/qx-partner.md +248 -0
  20. package/.claude/agents/subagents/qe-code-reviewer.md +40 -136
  21. package/.claude/agents/subagents/qe-coverage-gap-analyzer.md +40 -480
  22. package/.claude/agents/subagents/qe-data-generator.md +41 -125
  23. package/.claude/agents/subagents/qe-flaky-investigator.md +55 -411
  24. package/.claude/agents/subagents/qe-integration-tester.md +53 -141
  25. package/.claude/agents/subagents/qe-performance-validator.md +54 -130
  26. package/.claude/agents/subagents/qe-security-auditor.md +56 -114
  27. package/.claude/agents/subagents/qe-test-data-architect-sub.md +57 -548
  28. package/.claude/agents/subagents/qe-test-implementer.md +58 -551
  29. package/.claude/agents/subagents/qe-test-refactorer.md +65 -722
  30. package/.claude/agents/subagents/qe-test-writer.md +63 -726
  31. package/.claude/skills/accessibility-testing/SKILL.md +144 -692
  32. package/.claude/skills/agentic-quality-engineering/SKILL.md +176 -529
  33. package/.claude/skills/api-testing-patterns/SKILL.md +180 -560
  34. package/.claude/skills/brutal-honesty-review/SKILL.md +113 -603
  35. package/.claude/skills/bug-reporting-excellence/SKILL.md +116 -517
  36. package/.claude/skills/chaos-engineering-resilience/SKILL.md +127 -72
  37. package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +209 -404
  38. package/.claude/skills/code-review-quality/SKILL.md +158 -608
  39. package/.claude/skills/compatibility-testing/SKILL.md +148 -38
  40. package/.claude/skills/compliance-testing/SKILL.md +132 -63
  41. package/.claude/skills/consultancy-practices/SKILL.md +114 -446
  42. package/.claude/skills/context-driven-testing/SKILL.md +117 -381
  43. package/.claude/skills/contract-testing/SKILL.md +176 -141
  44. package/.claude/skills/database-testing/SKILL.md +137 -130
  45. package/.claude/skills/exploratory-testing-advanced/SKILL.md +160 -629
  46. package/.claude/skills/holistic-testing-pact/SKILL.md +140 -188
  47. package/.claude/skills/localization-testing/SKILL.md +145 -33
  48. package/.claude/skills/mobile-testing/SKILL.md +132 -448
  49. package/.claude/skills/mutation-testing/SKILL.md +147 -41
  50. package/.claude/skills/performance-testing/SKILL.md +200 -546
  51. package/.claude/skills/quality-metrics/SKILL.md +164 -519
  52. package/.claude/skills/refactoring-patterns/SKILL.md +132 -699
  53. package/.claude/skills/regression-testing/SKILL.md +120 -926
  54. package/.claude/skills/risk-based-testing/SKILL.md +157 -660
  55. package/.claude/skills/security-testing/SKILL.md +199 -538
  56. package/.claude/skills/sherlock-review/SKILL.md +163 -699
  57. package/.claude/skills/shift-left-testing/SKILL.md +161 -465
  58. package/.claude/skills/shift-right-testing/SKILL.md +161 -519
  59. package/.claude/skills/six-thinking-hats/SKILL.md +175 -1110
  60. package/.claude/skills/skills-manifest.json +683 -0
  61. package/.claude/skills/tdd-london-chicago/SKILL.md +131 -448
  62. package/.claude/skills/technical-writing/SKILL.md +103 -154
  63. package/.claude/skills/test-automation-strategy/SKILL.md +166 -772
  64. package/.claude/skills/test-data-management/SKILL.md +126 -910
  65. package/.claude/skills/test-design-techniques/SKILL.md +179 -89
  66. package/.claude/skills/test-environment-management/SKILL.md +136 -91
  67. package/.claude/skills/test-reporting-analytics/SKILL.md +169 -92
  68. package/.claude/skills/testability-scoring/README.md +71 -0
  69. package/.claude/skills/testability-scoring/SKILL.md +245 -0
  70. package/.claude/skills/testability-scoring/resources/templates/config.template.js +84 -0
  71. package/.claude/skills/testability-scoring/resources/templates/testability-scoring.spec.template.js +532 -0
  72. package/.claude/skills/testability-scoring/scripts/generate-html-report.js +1007 -0
  73. package/.claude/skills/testability-scoring/scripts/run-assessment.sh +70 -0
  74. package/.claude/skills/visual-testing-advanced/SKILL.md +155 -78
  75. package/.claude/skills/xp-practices/SKILL.md +151 -587
  76. package/CHANGELOG.md +110 -0
  77. package/README.md +55 -21
  78. package/dist/agents/QXPartnerAgent.d.ts +146 -0
  79. package/dist/agents/QXPartnerAgent.d.ts.map +1 -0
  80. package/dist/agents/QXPartnerAgent.js +1831 -0
  81. package/dist/agents/QXPartnerAgent.js.map +1 -0
  82. package/dist/agents/index.d.ts +1 -0
  83. package/dist/agents/index.d.ts.map +1 -1
  84. package/dist/agents/index.js +82 -2
  85. package/dist/agents/index.js.map +1 -1
  86. package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
  87. package/dist/agents/lifecycle/AgentLifecycleManager.js +34 -31
  88. package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
  89. package/dist/cli/commands/debug/agent.d.ts.map +1 -1
  90. package/dist/cli/commands/debug/agent.js +19 -6
  91. package/dist/cli/commands/debug/agent.js.map +1 -1
  92. package/dist/cli/commands/debug/health-check.js +20 -7
  93. package/dist/cli/commands/debug/health-check.js.map +1 -1
  94. package/dist/cli/commands/init-claude-md-template.d.ts +1 -0
  95. package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -1
  96. package/dist/cli/commands/init-claude-md-template.js +18 -3
  97. package/dist/cli/commands/init-claude-md-template.js.map +1 -1
  98. package/dist/cli/commands/workflow/cancel.d.ts.map +1 -1
  99. package/dist/cli/commands/workflow/cancel.js +4 -3
  100. package/dist/cli/commands/workflow/cancel.js.map +1 -1
  101. package/dist/cli/commands/workflow/list.d.ts.map +1 -1
  102. package/dist/cli/commands/workflow/list.js +4 -3
  103. package/dist/cli/commands/workflow/list.js.map +1 -1
  104. package/dist/cli/commands/workflow/pause.d.ts.map +1 -1
  105. package/dist/cli/commands/workflow/pause.js +4 -3
  106. package/dist/cli/commands/workflow/pause.js.map +1 -1
  107. package/dist/cli/init/claude-config.d.ts.map +1 -1
  108. package/dist/cli/init/claude-config.js +3 -8
  109. package/dist/cli/init/claude-config.js.map +1 -1
  110. package/dist/cli/init/claude-md.d.ts.map +1 -1
  111. package/dist/cli/init/claude-md.js +44 -2
  112. package/dist/cli/init/claude-md.js.map +1 -1
  113. package/dist/cli/init/database-init.js +1 -1
  114. package/dist/cli/init/index.d.ts.map +1 -1
  115. package/dist/cli/init/index.js +13 -6
  116. package/dist/cli/init/index.js.map +1 -1
  117. package/dist/cli/init/skills.d.ts.map +1 -1
  118. package/dist/cli/init/skills.js +2 -1
  119. package/dist/cli/init/skills.js.map +1 -1
  120. package/dist/core/SwarmCoordinator.d.ts +180 -0
  121. package/dist/core/SwarmCoordinator.d.ts.map +1 -0
  122. package/dist/core/SwarmCoordinator.js +473 -0
  123. package/dist/core/SwarmCoordinator.js.map +1 -0
  124. package/dist/core/memory/AgentDBIntegration.d.ts +24 -6
  125. package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -1
  126. package/dist/core/memory/AgentDBIntegration.js +66 -10
  127. package/dist/core/memory/AgentDBIntegration.js.map +1 -1
  128. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +341 -0
  129. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -0
  130. package/dist/core/memory/UnifiedMemoryCoordinator.js +986 -0
  131. package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -0
  132. package/dist/core/memory/index.d.ts +5 -0
  133. package/dist/core/memory/index.d.ts.map +1 -1
  134. package/dist/core/memory/index.js +23 -1
  135. package/dist/core/memory/index.js.map +1 -1
  136. package/dist/core/metrics/MetricsAggregator.d.ts +228 -0
  137. package/dist/core/metrics/MetricsAggregator.d.ts.map +1 -0
  138. package/dist/core/metrics/MetricsAggregator.js +482 -0
  139. package/dist/core/metrics/MetricsAggregator.js.map +1 -0
  140. package/dist/core/metrics/index.d.ts +5 -0
  141. package/dist/core/metrics/index.d.ts.map +1 -0
  142. package/dist/core/metrics/index.js +11 -0
  143. package/dist/core/metrics/index.js.map +1 -0
  144. package/dist/core/optimization/SwarmOptimizer.d.ts +190 -0
  145. package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -0
  146. package/dist/core/optimization/SwarmOptimizer.js +648 -0
  147. package/dist/core/optimization/SwarmOptimizer.js.map +1 -0
  148. package/dist/core/optimization/index.d.ts +9 -0
  149. package/dist/core/optimization/index.d.ts.map +1 -0
  150. package/dist/core/optimization/index.js +25 -0
  151. package/dist/core/optimization/index.js.map +1 -0
  152. package/dist/core/optimization/types.d.ts +53 -0
  153. package/dist/core/optimization/types.d.ts.map +1 -0
  154. package/dist/core/optimization/types.js +6 -0
  155. package/dist/core/optimization/types.js.map +1 -0
  156. package/dist/core/orchestration/AdaptiveScheduler.d.ts +190 -0
  157. package/dist/core/orchestration/AdaptiveScheduler.d.ts.map +1 -0
  158. package/dist/core/orchestration/AdaptiveScheduler.js +460 -0
  159. package/dist/core/orchestration/AdaptiveScheduler.js.map +1 -0
  160. package/dist/core/orchestration/PriorityQueue.d.ts +54 -0
  161. package/dist/core/orchestration/PriorityQueue.d.ts.map +1 -0
  162. package/dist/core/orchestration/PriorityQueue.js +122 -0
  163. package/dist/core/orchestration/PriorityQueue.js.map +1 -0
  164. package/dist/core/orchestration/WorkflowOrchestrator.d.ts +189 -0
  165. package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -0
  166. package/dist/core/orchestration/WorkflowOrchestrator.js +845 -0
  167. package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -0
  168. package/dist/core/orchestration/index.d.ts +7 -0
  169. package/dist/core/orchestration/index.d.ts.map +1 -0
  170. package/dist/core/orchestration/index.js +11 -0
  171. package/dist/core/orchestration/index.js.map +1 -0
  172. package/dist/core/orchestration/types.d.ts +96 -0
  173. package/dist/core/orchestration/types.d.ts.map +1 -0
  174. package/dist/core/orchestration/types.js +6 -0
  175. package/dist/core/orchestration/types.js.map +1 -0
  176. package/dist/core/recovery/CircuitBreaker.d.ts +176 -0
  177. package/dist/core/recovery/CircuitBreaker.d.ts.map +1 -0
  178. package/dist/core/recovery/CircuitBreaker.js +382 -0
  179. package/dist/core/recovery/CircuitBreaker.js.map +1 -0
  180. package/dist/core/recovery/RecoveryOrchestrator.d.ts +186 -0
  181. package/dist/core/recovery/RecoveryOrchestrator.d.ts.map +1 -0
  182. package/dist/core/recovery/RecoveryOrchestrator.js +476 -0
  183. package/dist/core/recovery/RecoveryOrchestrator.js.map +1 -0
  184. package/dist/core/recovery/RetryStrategy.d.ts +127 -0
  185. package/dist/core/recovery/RetryStrategy.d.ts.map +1 -0
  186. package/dist/core/recovery/RetryStrategy.js +314 -0
  187. package/dist/core/recovery/RetryStrategy.js.map +1 -0
  188. package/dist/core/recovery/index.d.ts +8 -0
  189. package/dist/core/recovery/index.d.ts.map +1 -0
  190. package/dist/core/recovery/index.js +27 -0
  191. package/dist/core/recovery/index.js.map +1 -0
  192. package/dist/core/skills/DependencyResolver.d.ts +99 -0
  193. package/dist/core/skills/DependencyResolver.d.ts.map +1 -0
  194. package/dist/core/skills/DependencyResolver.js +260 -0
  195. package/dist/core/skills/DependencyResolver.js.map +1 -0
  196. package/dist/core/skills/DynamicSkillLoader.d.ts +96 -0
  197. package/dist/core/skills/DynamicSkillLoader.d.ts.map +1 -0
  198. package/dist/core/skills/DynamicSkillLoader.js +353 -0
  199. package/dist/core/skills/DynamicSkillLoader.js.map +1 -0
  200. package/dist/core/skills/ManifestGenerator.d.ts +114 -0
  201. package/dist/core/skills/ManifestGenerator.d.ts.map +1 -0
  202. package/dist/core/skills/ManifestGenerator.js +449 -0
  203. package/dist/core/skills/ManifestGenerator.js.map +1 -0
  204. package/dist/core/skills/index.d.ts +9 -0
  205. package/dist/core/skills/index.d.ts.map +1 -0
  206. package/dist/core/skills/index.js +24 -0
  207. package/dist/core/skills/index.js.map +1 -0
  208. package/dist/core/skills/types.d.ts +118 -0
  209. package/dist/core/skills/types.d.ts.map +1 -0
  210. package/dist/core/skills/types.js +7 -0
  211. package/dist/core/skills/types.js.map +1 -0
  212. package/dist/core/transport/QUICTransport.d.ts +320 -0
  213. package/dist/core/transport/QUICTransport.d.ts.map +1 -0
  214. package/dist/core/transport/QUICTransport.js +711 -0
  215. package/dist/core/transport/QUICTransport.js.map +1 -0
  216. package/dist/core/transport/index.d.ts +40 -0
  217. package/dist/core/transport/index.d.ts.map +1 -0
  218. package/dist/core/transport/index.js +46 -0
  219. package/dist/core/transport/index.js.map +1 -0
  220. package/dist/core/transport/quic-loader.d.ts +123 -0
  221. package/dist/core/transport/quic-loader.d.ts.map +1 -0
  222. package/dist/core/transport/quic-loader.js +293 -0
  223. package/dist/core/transport/quic-loader.js.map +1 -0
  224. package/dist/core/transport/quic.d.ts +154 -0
  225. package/dist/core/transport/quic.d.ts.map +1 -0
  226. package/dist/core/transport/quic.js +214 -0
  227. package/dist/core/transport/quic.js.map +1 -0
  228. package/dist/mcp/server.d.ts +9 -9
  229. package/dist/mcp/server.d.ts.map +1 -1
  230. package/dist/mcp/server.js +1 -2
  231. package/dist/mcp/server.js.map +1 -1
  232. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  233. package/dist/mcp/services/AgentRegistry.js +4 -1
  234. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  235. package/dist/types/index.d.ts +2 -1
  236. package/dist/types/index.d.ts.map +1 -1
  237. package/dist/types/index.js +2 -0
  238. package/dist/types/index.js.map +1 -1
  239. package/dist/types/qx.d.ts +429 -0
  240. package/dist/types/qx.d.ts.map +1 -0
  241. package/dist/types/qx.js +71 -0
  242. package/dist/types/qx.js.map +1 -0
  243. package/dist/visualization/api/RestEndpoints.js +2 -2
  244. package/dist/visualization/api/RestEndpoints.js.map +1 -1
  245. package/dist/visualization/api/WebSocketServer.d.ts +44 -0
  246. package/dist/visualization/api/WebSocketServer.d.ts.map +1 -1
  247. package/dist/visualization/api/WebSocketServer.js +144 -23
  248. package/dist/visualization/api/WebSocketServer.js.map +1 -1
  249. package/dist/visualization/core/DataTransformer.d.ts +10 -0
  250. package/dist/visualization/core/DataTransformer.d.ts.map +1 -1
  251. package/dist/visualization/core/DataTransformer.js +60 -5
  252. package/dist/visualization/core/DataTransformer.js.map +1 -1
  253. package/dist/visualization/emit-event.d.ts +75 -0
  254. package/dist/visualization/emit-event.d.ts.map +1 -0
  255. package/dist/visualization/emit-event.js +213 -0
  256. package/dist/visualization/emit-event.js.map +1 -0
  257. package/dist/visualization/index.d.ts +1 -0
  258. package/dist/visualization/index.d.ts.map +1 -1
  259. package/dist/visualization/index.js +7 -1
  260. package/dist/visualization/index.js.map +1 -1
  261. package/docs/reference/skills.md +63 -1
  262. package/package.json +16 -58
@@ -0,0 +1,382 @@
1
+ "use strict";
2
+ /**
3
+ * Circuit Breaker Implementation
4
+ * Prevents cascading failures by breaking the circuit when error threshold is exceeded
5
+ *
6
+ * States:
7
+ * - CLOSED: Normal operation, requests pass through
8
+ * - OPEN: Circuit is broken, requests fail immediately
9
+ * - HALF_OPEN: Testing if service has recovered
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CircuitBreakerManager = exports.CircuitBreaker = exports.CircuitBreakerOpenError = exports.CircuitState = void 0;
13
+ exports.getCircuitBreakerManager = getCircuitBreakerManager;
14
+ exports.resetCircuitBreakerManager = resetCircuitBreakerManager;
15
+ const events_1 = require("events");
16
+ /**
17
+ * Circuit breaker states
18
+ */
19
+ var CircuitState;
20
+ (function (CircuitState) {
21
+ CircuitState["CLOSED"] = "CLOSED";
22
+ CircuitState["OPEN"] = "OPEN";
23
+ CircuitState["HALF_OPEN"] = "HALF_OPEN";
24
+ })(CircuitState || (exports.CircuitState = CircuitState = {}));
25
+ /**
26
+ * Circuit Breaker Error
27
+ */
28
+ class CircuitBreakerOpenError extends Error {
29
+ constructor(circuitName, state) {
30
+ super(`Circuit breaker '${circuitName}' is ${state}`);
31
+ this.circuitName = circuitName;
32
+ this.state = state;
33
+ this.name = 'CircuitBreakerOpenError';
34
+ }
35
+ }
36
+ exports.CircuitBreakerOpenError = CircuitBreakerOpenError;
37
+ /**
38
+ * Circuit Breaker Implementation
39
+ */
40
+ class CircuitBreaker extends events_1.EventEmitter {
41
+ constructor(config) {
42
+ super();
43
+ this.state = CircuitState.CLOSED;
44
+ this.failures = [];
45
+ this.consecutiveSuccesses = 0;
46
+ this.resetTimer = null;
47
+ this.config = {
48
+ failureThreshold: 5,
49
+ successThreshold: 3,
50
+ resetTimeout: 30000, // 30 seconds
51
+ failureWindow: 60000, // 1 minute
52
+ ...config,
53
+ };
54
+ this.metrics = {
55
+ state: CircuitState.CLOSED,
56
+ failures: 0,
57
+ successes: 0,
58
+ consecutiveFailures: 0,
59
+ consecutiveSuccesses: 0,
60
+ totalRequests: 0,
61
+ totalFailures: 0,
62
+ totalSuccesses: 0,
63
+ lastFailureTime: null,
64
+ lastSuccessTime: null,
65
+ lastStateChange: new Date(),
66
+ openedCount: 0,
67
+ };
68
+ }
69
+ /**
70
+ * Execute an operation through the circuit breaker
71
+ */
72
+ async execute(operation) {
73
+ // Check if circuit allows request
74
+ if (!this.canExecute()) {
75
+ throw new CircuitBreakerOpenError(this.config.name, this.state);
76
+ }
77
+ this.metrics.totalRequests++;
78
+ try {
79
+ // Execute with optional timeout
80
+ const result = this.config.operationTimeout
81
+ ? await this.executeWithTimeout(operation, this.config.operationTimeout)
82
+ : await operation();
83
+ this.onSuccess();
84
+ return result;
85
+ }
86
+ catch (error) {
87
+ this.onFailure(error instanceof Error ? error : new Error(String(error)));
88
+ throw error;
89
+ }
90
+ }
91
+ /**
92
+ * Check if circuit allows execution
93
+ */
94
+ canExecute() {
95
+ this.pruneOldFailures();
96
+ switch (this.state) {
97
+ case CircuitState.CLOSED:
98
+ return true;
99
+ case CircuitState.OPEN:
100
+ return false;
101
+ case CircuitState.HALF_OPEN:
102
+ return true; // Allow test requests
103
+ default:
104
+ return false;
105
+ }
106
+ }
107
+ /**
108
+ * Get current state
109
+ */
110
+ getState() {
111
+ return this.state;
112
+ }
113
+ /**
114
+ * Get current metrics
115
+ */
116
+ getMetrics() {
117
+ this.pruneOldFailures();
118
+ return {
119
+ ...this.metrics,
120
+ state: this.state,
121
+ failures: this.failures.length,
122
+ consecutiveSuccesses: this.consecutiveSuccesses,
123
+ };
124
+ }
125
+ /**
126
+ * Manually reset circuit to CLOSED
127
+ */
128
+ reset() {
129
+ this.transitionTo(CircuitState.CLOSED);
130
+ this.failures = [];
131
+ this.consecutiveSuccesses = 0;
132
+ this.metrics.consecutiveFailures = 0;
133
+ this.clearResetTimer();
134
+ this.emit('reset', { name: this.config.name });
135
+ }
136
+ /**
137
+ * Manually open circuit
138
+ */
139
+ forceOpen() {
140
+ this.transitionTo(CircuitState.OPEN);
141
+ this.startResetTimer();
142
+ this.emit('force-open', { name: this.config.name });
143
+ }
144
+ /**
145
+ * Handle successful operation
146
+ */
147
+ onSuccess() {
148
+ this.metrics.totalSuccesses++;
149
+ this.metrics.successes++;
150
+ this.metrics.lastSuccessTime = new Date();
151
+ this.metrics.consecutiveFailures = 0;
152
+ this.consecutiveSuccesses++;
153
+ if (this.state === CircuitState.HALF_OPEN) {
154
+ if (this.consecutiveSuccesses >= this.config.successThreshold) {
155
+ this.transitionTo(CircuitState.CLOSED);
156
+ this.failures = [];
157
+ this.emit('close', {
158
+ name: this.config.name,
159
+ reason: 'Success threshold reached in HALF_OPEN',
160
+ });
161
+ }
162
+ }
163
+ this.emit('success', { name: this.config.name, state: this.state });
164
+ }
165
+ /**
166
+ * Handle failed operation
167
+ */
168
+ onFailure(error) {
169
+ this.metrics.totalFailures++;
170
+ this.metrics.lastFailureTime = new Date();
171
+ this.metrics.consecutiveFailures++;
172
+ this.consecutiveSuccesses = 0;
173
+ this.failures.push({
174
+ timestamp: Date.now(),
175
+ error,
176
+ });
177
+ this.emit('failure', {
178
+ name: this.config.name,
179
+ state: this.state,
180
+ error: error.message,
181
+ });
182
+ if (this.state === CircuitState.HALF_OPEN) {
183
+ // Any failure in HALF_OPEN reopens circuit
184
+ this.transitionTo(CircuitState.OPEN);
185
+ this.startResetTimer();
186
+ this.emit('open', {
187
+ name: this.config.name,
188
+ reason: 'Failure in HALF_OPEN state',
189
+ });
190
+ }
191
+ else if (this.state === CircuitState.CLOSED) {
192
+ this.pruneOldFailures();
193
+ if (this.failures.length >= this.config.failureThreshold) {
194
+ this.transitionTo(CircuitState.OPEN);
195
+ this.startResetTimer();
196
+ this.metrics.openedCount++;
197
+ this.emit('open', {
198
+ name: this.config.name,
199
+ reason: `Failure threshold (${this.config.failureThreshold}) exceeded`,
200
+ failures: this.failures.length,
201
+ });
202
+ }
203
+ }
204
+ }
205
+ /**
206
+ * Transition to new state
207
+ */
208
+ transitionTo(newState) {
209
+ const oldState = this.state;
210
+ this.state = newState;
211
+ this.metrics.state = newState;
212
+ this.metrics.lastStateChange = new Date();
213
+ if (newState === CircuitState.HALF_OPEN) {
214
+ this.consecutiveSuccesses = 0;
215
+ }
216
+ this.emit('state-change', {
217
+ name: this.config.name,
218
+ from: oldState,
219
+ to: newState,
220
+ });
221
+ }
222
+ /**
223
+ * Start reset timer for OPEN -> HALF_OPEN transition
224
+ */
225
+ startResetTimer() {
226
+ this.clearResetTimer();
227
+ this.resetTimer = setTimeout(() => {
228
+ if (this.state === CircuitState.OPEN) {
229
+ this.transitionTo(CircuitState.HALF_OPEN);
230
+ this.emit('half-open', {
231
+ name: this.config.name,
232
+ reason: 'Reset timeout elapsed',
233
+ });
234
+ }
235
+ }, this.config.resetTimeout);
236
+ }
237
+ /**
238
+ * Clear reset timer
239
+ */
240
+ clearResetTimer() {
241
+ if (this.resetTimer) {
242
+ clearTimeout(this.resetTimer);
243
+ this.resetTimer = null;
244
+ }
245
+ }
246
+ /**
247
+ * Remove failures outside the window
248
+ */
249
+ pruneOldFailures() {
250
+ const cutoff = Date.now() - this.config.failureWindow;
251
+ this.failures = this.failures.filter(f => f.timestamp > cutoff);
252
+ }
253
+ /**
254
+ * Execute operation with timeout
255
+ */
256
+ async executeWithTimeout(operation, timeout) {
257
+ return new Promise((resolve, reject) => {
258
+ const timer = setTimeout(() => {
259
+ reject(new Error(`Operation timed out after ${timeout}ms`));
260
+ }, timeout);
261
+ operation()
262
+ .then(result => {
263
+ clearTimeout(timer);
264
+ resolve(result);
265
+ })
266
+ .catch(error => {
267
+ clearTimeout(timer);
268
+ reject(error);
269
+ });
270
+ });
271
+ }
272
+ /**
273
+ * Cleanup resources
274
+ */
275
+ destroy() {
276
+ this.clearResetTimer();
277
+ this.removeAllListeners();
278
+ }
279
+ }
280
+ exports.CircuitBreaker = CircuitBreaker;
281
+ /**
282
+ * Circuit Breaker Manager for managing multiple circuit breakers
283
+ */
284
+ class CircuitBreakerManager {
285
+ constructor(defaultConfig = {}) {
286
+ this.breakers = new Map();
287
+ this.defaultConfig = defaultConfig;
288
+ }
289
+ /**
290
+ * Get or create a circuit breaker
291
+ */
292
+ getBreaker(name, config) {
293
+ let breaker = this.breakers.get(name);
294
+ if (!breaker) {
295
+ breaker = new CircuitBreaker({
296
+ ...this.defaultConfig,
297
+ ...config,
298
+ name,
299
+ });
300
+ this.breakers.set(name, breaker);
301
+ }
302
+ return breaker;
303
+ }
304
+ /**
305
+ * Execute operation through named circuit breaker
306
+ */
307
+ async execute(name, operation) {
308
+ const breaker = this.getBreaker(name);
309
+ return breaker.execute(operation);
310
+ }
311
+ /**
312
+ * Get all circuit breaker metrics
313
+ */
314
+ getAllMetrics() {
315
+ const metrics = new Map();
316
+ for (const [name, breaker] of this.breakers) {
317
+ metrics.set(name, breaker.getMetrics());
318
+ }
319
+ return metrics;
320
+ }
321
+ /**
322
+ * Get summary of all circuit states
323
+ */
324
+ getSummary() {
325
+ let closed = 0, open = 0, halfOpen = 0;
326
+ for (const breaker of this.breakers.values()) {
327
+ switch (breaker.getState()) {
328
+ case CircuitState.CLOSED:
329
+ closed++;
330
+ break;
331
+ case CircuitState.OPEN:
332
+ open++;
333
+ break;
334
+ case CircuitState.HALF_OPEN:
335
+ halfOpen++;
336
+ break;
337
+ }
338
+ }
339
+ return { total: this.breakers.size, closed, open, halfOpen };
340
+ }
341
+ /**
342
+ * Reset all circuit breakers
343
+ */
344
+ resetAll() {
345
+ for (const breaker of this.breakers.values()) {
346
+ breaker.reset();
347
+ }
348
+ }
349
+ /**
350
+ * Cleanup all circuit breakers
351
+ */
352
+ destroy() {
353
+ for (const breaker of this.breakers.values()) {
354
+ breaker.destroy();
355
+ }
356
+ this.breakers.clear();
357
+ }
358
+ }
359
+ exports.CircuitBreakerManager = CircuitBreakerManager;
360
+ /**
361
+ * Default circuit breaker manager instance
362
+ */
363
+ let defaultManager = null;
364
+ /**
365
+ * Get default circuit breaker manager
366
+ */
367
+ function getCircuitBreakerManager(config) {
368
+ if (!defaultManager) {
369
+ defaultManager = new CircuitBreakerManager(config);
370
+ }
371
+ return defaultManager;
372
+ }
373
+ /**
374
+ * Reset default manager (for testing)
375
+ */
376
+ function resetCircuitBreakerManager() {
377
+ if (defaultManager) {
378
+ defaultManager.destroy();
379
+ defaultManager = null;
380
+ }
381
+ }
382
+ //# sourceMappingURL=CircuitBreaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CircuitBreaker.js","sourceRoot":"","sources":["../../../src/core/recovery/CircuitBreaker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Recovery Orchestrator
3
+ * Coordinates error recovery across transport, memory, and orchestration systems
4
+ */
5
+ import { EventEmitter } from 'events';
6
+ import { CircuitState } from './CircuitBreaker.js';
7
+ import { RetryConfig } from './RetryStrategy.js';
8
+ /**
9
+ * Recovery strategy types
10
+ */
11
+ export type RecoveryStrategyType = 'retry' | 'fallback' | 'circuit-break' | 'rollback' | 'graceful-degradation' | 'escalate';
12
+ /**
13
+ * Component types that can be recovered
14
+ */
15
+ export type RecoverableComponent = 'transport' | 'memory' | 'orchestration' | 'agent' | 'workflow' | 'database';
16
+ /**
17
+ * Health status
18
+ */
19
+ export type HealthStatus = 'healthy' | 'degraded' | 'unhealthy' | 'unknown';
20
+ /**
21
+ * Recovery action result
22
+ */
23
+ export interface RecoveryActionResult {
24
+ success: boolean;
25
+ strategy: RecoveryStrategyType;
26
+ component: RecoverableComponent;
27
+ action: string;
28
+ duration: number;
29
+ error?: string;
30
+ metadata?: Record<string, any>;
31
+ }
32
+ /**
33
+ * Component health info
34
+ */
35
+ export interface ComponentHealth {
36
+ component: RecoverableComponent;
37
+ status: HealthStatus;
38
+ lastCheck: Date;
39
+ errorRate: number;
40
+ latencyP95: number;
41
+ circuitState?: CircuitState;
42
+ details?: Record<string, any>;
43
+ }
44
+ /**
45
+ * Recovery policy configuration
46
+ */
47
+ export interface RecoveryPolicy {
48
+ /** Maximum recovery attempts per minute */
49
+ maxRecoveryRate: number;
50
+ /** Time to wait between recovery attempts */
51
+ cooldownPeriod: number;
52
+ /** When to escalate to manual intervention */
53
+ escalationThreshold: number;
54
+ /** Strategies in order of preference */
55
+ strategyOrder: RecoveryStrategyType[];
56
+ /** Component-specific overrides */
57
+ componentOverrides?: Partial<Record<RecoverableComponent, Partial<RecoveryPolicy>>>;
58
+ }
59
+ /**
60
+ * Recovery event
61
+ */
62
+ export interface RecoveryEvent {
63
+ timestamp: Date;
64
+ component: RecoverableComponent;
65
+ strategy: RecoveryStrategyType;
66
+ success: boolean;
67
+ error?: string;
68
+ duration: number;
69
+ }
70
+ /**
71
+ * Fallback handler type
72
+ */
73
+ export type FallbackHandler<T> = () => Promise<T>;
74
+ /**
75
+ * Health check function type
76
+ */
77
+ export type HealthChecker = (component: RecoverableComponent) => Promise<ComponentHealth>;
78
+ /**
79
+ * Recovery Orchestrator Implementation
80
+ */
81
+ export declare class RecoveryOrchestrator extends EventEmitter {
82
+ private circuitBreakerManager;
83
+ private retryStrategies;
84
+ private fallbackHandlers;
85
+ private healthCheckers;
86
+ private recoveryHistory;
87
+ private componentHealth;
88
+ private policy;
89
+ private recoveryInProgress;
90
+ private lastRecoveryAttempts;
91
+ constructor(policy?: Partial<RecoveryPolicy>);
92
+ /**
93
+ * Execute operation with full recovery support
94
+ */
95
+ executeWithRecovery<T>(component: RecoverableComponent, operationId: string, operation: () => Promise<T>, options?: {
96
+ fallback?: FallbackHandler<T>;
97
+ retryConfig?: Partial<RetryConfig>;
98
+ bypassCircuitBreaker?: boolean;
99
+ }): Promise<T>;
100
+ /**
101
+ * Attempt automatic recovery for a component
102
+ */
103
+ attemptRecovery(component: RecoverableComponent, error: Error): Promise<RecoveryActionResult>;
104
+ /**
105
+ * Register fallback handler
106
+ */
107
+ registerFallback<T>(component: RecoverableComponent, operationId: string, handler: FallbackHandler<T>): void;
108
+ /**
109
+ * Register health checker
110
+ */
111
+ registerHealthChecker(component: RecoverableComponent, checker: HealthChecker): void;
112
+ /**
113
+ * Check health of all components
114
+ */
115
+ checkHealth(): Promise<Map<RecoverableComponent, ComponentHealth>>;
116
+ /**
117
+ * Get component health
118
+ */
119
+ getComponentHealth(component: RecoverableComponent): ComponentHealth | undefined;
120
+ /**
121
+ * Get recovery history
122
+ */
123
+ getRecoveryHistory(limit?: number): RecoveryEvent[];
124
+ /**
125
+ * Get recovery statistics
126
+ */
127
+ getStats(): {
128
+ totalRecoveries: number;
129
+ successfulRecoveries: number;
130
+ failedRecoveries: number;
131
+ successRate: number;
132
+ byComponent: Record<string, {
133
+ total: number;
134
+ successful: number;
135
+ }>;
136
+ byStrategy: Record<string, {
137
+ total: number;
138
+ successful: number;
139
+ }>;
140
+ };
141
+ /**
142
+ * Reset circuit breakers for a component
143
+ */
144
+ resetCircuitBreakers(component?: RecoverableComponent): void;
145
+ /**
146
+ * Initialize default retry strategies per component
147
+ */
148
+ private initializeDefaultStrategies;
149
+ /**
150
+ * Get retry strategy for component
151
+ */
152
+ private getRetryStrategy;
153
+ /**
154
+ * Get policy for component
155
+ */
156
+ private getComponentPolicy;
157
+ /**
158
+ * Execute a specific recovery strategy
159
+ */
160
+ private executeRecoveryStrategy;
161
+ /**
162
+ * Check if recovery can be attempted (rate limiting)
163
+ */
164
+ private canAttemptRecovery;
165
+ /**
166
+ * Record recovery attempt for rate limiting
167
+ */
168
+ private recordRecoveryAttempt;
169
+ /**
170
+ * Record recovery event
171
+ */
172
+ private recordRecoveryEvent;
173
+ /**
174
+ * Cleanup resources
175
+ */
176
+ destroy(): void;
177
+ }
178
+ /**
179
+ * Get default recovery orchestrator
180
+ */
181
+ export declare function getRecoveryOrchestrator(policy?: Partial<RecoveryPolicy>): RecoveryOrchestrator;
182
+ /**
183
+ * Reset default orchestrator (for testing)
184
+ */
185
+ export declare function resetRecoveryOrchestrator(): void;
186
+ //# sourceMappingURL=RecoveryOrchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecoveryOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/core/recovery/RecoveryOrchestrator.ts"],"names":[],"mappings":"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"}