agentic-qe 2.7.3 → 2.8.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 (620) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/README.md +67 -2
  3. package/dist/agents/AccessibilityAllyAgent.d.ts +0 -7
  4. package/dist/agents/AccessibilityAllyAgent.d.ts.map +1 -1
  5. package/dist/agents/AccessibilityAllyAgent.js +0 -15
  6. package/dist/agents/AccessibilityAllyAgent.js.map +1 -1
  7. package/dist/agents/ApiContractValidatorAgent.js +4 -4
  8. package/dist/agents/ApiContractValidatorAgent.js.map +1 -1
  9. package/dist/agents/BaseAgent.d.ts +2 -0
  10. package/dist/agents/BaseAgent.d.ts.map +1 -1
  11. package/dist/agents/BaseAgent.js +43 -41
  12. package/dist/agents/BaseAgent.js.map +1 -1
  13. package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +0 -8
  14. package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -1
  15. package/dist/agents/CodeComplexityAnalyzerAgent.js +0 -15
  16. package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -1
  17. package/dist/agents/CodeIntelligenceAgent.d.ts +0 -1
  18. package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
  19. package/dist/agents/CodeIntelligenceAgent.js +0 -2
  20. package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
  21. package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
  22. package/dist/agents/DeploymentReadinessAgent.js +30 -30
  23. package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
  24. package/dist/agents/FlakyTestHunterAgent.d.ts +0 -10
  25. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  26. package/dist/agents/FlakyTestHunterAgent.js +10 -20
  27. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  28. package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
  29. package/dist/agents/FleetCommanderAgent.js +28 -28
  30. package/dist/agents/FleetCommanderAgent.js.map +1 -1
  31. package/dist/agents/LearningAgent.js +1 -1
  32. package/dist/agents/LearningAgent.js.map +1 -1
  33. package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
  34. package/dist/agents/PerformanceTesterAgent.js +25 -25
  35. package/dist/agents/PerformanceTesterAgent.js.map +1 -1
  36. package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
  37. package/dist/agents/ProductionIntelligenceAgent.js +20 -20
  38. package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
  39. package/dist/agents/QXPartnerAgent.d.ts +0 -8
  40. package/dist/agents/QXPartnerAgent.d.ts.map +1 -1
  41. package/dist/agents/QXPartnerAgent.js +0 -15
  42. package/dist/agents/QXPartnerAgent.js.map +1 -1
  43. package/dist/agents/QualityAnalyzerAgent.d.ts +0 -7
  44. package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
  45. package/dist/agents/QualityAnalyzerAgent.js +0 -16
  46. package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
  47. package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
  48. package/dist/agents/RegressionRiskAnalyzerAgent.js +18 -18
  49. package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
  50. package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
  51. package/dist/agents/RequirementsValidatorAgent.js +21 -21
  52. package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
  53. package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
  54. package/dist/agents/SecurityScannerAgent.js +38 -38
  55. package/dist/agents/SecurityScannerAgent.js.map +1 -1
  56. package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
  57. package/dist/agents/TestDataArchitectAgent.js +29 -29
  58. package/dist/agents/TestDataArchitectAgent.js.map +1 -1
  59. package/dist/agents/TestExecutorAgent.d.ts +0 -7
  60. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  61. package/dist/agents/TestExecutorAgent.js +35 -51
  62. package/dist/agents/TestExecutorAgent.js.map +1 -1
  63. package/dist/agents/TestGeneratorAgent.d.ts +0 -7
  64. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  65. package/dist/agents/TestGeneratorAgent.js +0 -16
  66. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  67. package/dist/agents/adapters/AgentLLMAdapter.d.ts.map +1 -1
  68. package/dist/agents/adapters/AgentLLMAdapter.js +5 -4
  69. package/dist/agents/adapters/AgentLLMAdapter.js.map +1 -1
  70. package/dist/agents/adapters/CoordinatorAdapter.d.ts.map +1 -1
  71. package/dist/agents/adapters/CoordinatorAdapter.js +2 -1
  72. package/dist/agents/adapters/CoordinatorAdapter.js.map +1 -1
  73. package/dist/agents/n8n/N8nAPIClient.d.ts.map +1 -1
  74. package/dist/agents/n8n/N8nAPIClient.js +3 -2
  75. package/dist/agents/n8n/N8nAPIClient.js.map +1 -1
  76. package/dist/agents/n8n/N8nAuditPersistence.d.ts.map +1 -1
  77. package/dist/agents/n8n/N8nAuditPersistence.js +2 -1
  78. package/dist/agents/n8n/N8nAuditPersistence.js.map +1 -1
  79. package/dist/agents/n8n/N8nBaseAgent.js +1 -1
  80. package/dist/agents/n8n/N8nBaseAgent.js.map +1 -1
  81. package/dist/agents/n8n/N8nComplianceValidatorAgent.js +1 -1
  82. package/dist/agents/n8n/N8nComplianceValidatorAgent.js.map +1 -1
  83. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js +1 -1
  84. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js.map +1 -1
  85. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js +1 -1
  86. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js.map +1 -1
  87. package/dist/agents/n8n/N8nSecurityAuditorAgent.js +1 -1
  88. package/dist/agents/n8n/N8nSecurityAuditorAgent.js.map +1 -1
  89. package/dist/agents/pool/AgentPool.d.ts.map +1 -1
  90. package/dist/agents/pool/AgentPool.js +2 -1
  91. package/dist/agents/pool/AgentPool.js.map +1 -1
  92. package/dist/agents/pool/QEAgentPoolFactory.d.ts.map +1 -1
  93. package/dist/agents/pool/QEAgentPoolFactory.js +2 -1
  94. package/dist/agents/pool/QEAgentPoolFactory.js.map +1 -1
  95. package/dist/cli/commands/agent/spawn.d.ts +12 -1
  96. package/dist/cli/commands/agent/spawn.d.ts.map +1 -1
  97. package/dist/cli/commands/agent/spawn.js +95 -8
  98. package/dist/cli/commands/agent/spawn.js.map +1 -1
  99. package/dist/cli/index.js +91 -0
  100. package/dist/cli/index.js.map +1 -1
  101. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  102. package/dist/edge/adapters/BrowserHNSWAdapter.d.ts +134 -0
  103. package/dist/edge/adapters/BrowserHNSWAdapter.d.ts.map +1 -0
  104. package/dist/edge/adapters/BrowserHNSWAdapter.js +484 -0
  105. package/dist/edge/adapters/BrowserHNSWAdapter.js.map +1 -0
  106. package/dist/edge/adapters/IndexedDBStorage.d.ts +114 -0
  107. package/dist/edge/adapters/IndexedDBStorage.d.ts.map +1 -0
  108. package/dist/edge/adapters/IndexedDBStorage.js +478 -0
  109. package/dist/edge/adapters/IndexedDBStorage.js.map +1 -0
  110. package/dist/edge/adapters/index.d.ts +12 -0
  111. package/dist/edge/adapters/index.d.ts.map +1 -0
  112. package/dist/edge/adapters/index.js +22 -0
  113. package/dist/edge/adapters/index.js.map +1 -0
  114. package/dist/edge/browser/BrowserAgent.d.ts +241 -0
  115. package/dist/edge/browser/BrowserAgent.d.ts.map +1 -0
  116. package/dist/edge/browser/BrowserAgent.js +743 -0
  117. package/dist/edge/browser/BrowserAgent.js.map +1 -0
  118. package/dist/edge/index.d.ts +34 -0
  119. package/dist/edge/index.d.ts.map +1 -0
  120. package/dist/edge/index.js +114 -0
  121. package/dist/edge/index.js.map +1 -0
  122. package/dist/edge/p2p/coordination/CoordinationManager.d.ts +181 -0
  123. package/dist/edge/p2p/coordination/CoordinationManager.d.ts.map +1 -0
  124. package/dist/edge/p2p/coordination/CoordinationManager.js +851 -0
  125. package/dist/edge/p2p/coordination/CoordinationManager.js.map +1 -0
  126. package/dist/edge/p2p/coordination/HealthMonitor.d.ts +143 -0
  127. package/dist/edge/p2p/coordination/HealthMonitor.d.ts.map +1 -0
  128. package/dist/edge/p2p/coordination/HealthMonitor.js +432 -0
  129. package/dist/edge/p2p/coordination/HealthMonitor.js.map +1 -0
  130. package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts +146 -0
  131. package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts.map +1 -0
  132. package/dist/edge/p2p/coordination/SyncOrchestrator.js +783 -0
  133. package/dist/edge/p2p/coordination/SyncOrchestrator.js.map +1 -0
  134. package/dist/edge/p2p/coordination/index.d.ts +70 -0
  135. package/dist/edge/p2p/coordination/index.d.ts.map +1 -0
  136. package/dist/edge/p2p/coordination/index.js +107 -0
  137. package/dist/edge/p2p/coordination/index.js.map +1 -0
  138. package/dist/edge/p2p/coordination/types.d.ts +572 -0
  139. package/dist/edge/p2p/coordination/types.d.ts.map +1 -0
  140. package/dist/edge/p2p/coordination/types.js +366 -0
  141. package/dist/edge/p2p/coordination/types.js.map +1 -0
  142. package/dist/edge/p2p/crdt/CRDTStore.d.ts +324 -0
  143. package/dist/edge/p2p/crdt/CRDTStore.d.ts.map +1 -0
  144. package/dist/edge/p2p/crdt/CRDTStore.js +839 -0
  145. package/dist/edge/p2p/crdt/CRDTStore.js.map +1 -0
  146. package/dist/edge/p2p/crdt/GCounter.d.ts +173 -0
  147. package/dist/edge/p2p/crdt/GCounter.d.ts.map +1 -0
  148. package/dist/edge/p2p/crdt/GCounter.js +394 -0
  149. package/dist/edge/p2p/crdt/GCounter.js.map +1 -0
  150. package/dist/edge/p2p/crdt/LWWRegister.d.ts +200 -0
  151. package/dist/edge/p2p/crdt/LWWRegister.d.ts.map +1 -0
  152. package/dist/edge/p2p/crdt/LWWRegister.js +456 -0
  153. package/dist/edge/p2p/crdt/LWWRegister.js.map +1 -0
  154. package/dist/edge/p2p/crdt/ORSet.d.ts +232 -0
  155. package/dist/edge/p2p/crdt/ORSet.d.ts.map +1 -0
  156. package/dist/edge/p2p/crdt/ORSet.js +723 -0
  157. package/dist/edge/p2p/crdt/ORSet.js.map +1 -0
  158. package/dist/edge/p2p/crdt/PatternCRDT.d.ts +366 -0
  159. package/dist/edge/p2p/crdt/PatternCRDT.d.ts.map +1 -0
  160. package/dist/edge/p2p/crdt/PatternCRDT.js +838 -0
  161. package/dist/edge/p2p/crdt/PatternCRDT.js.map +1 -0
  162. package/dist/edge/p2p/crdt/VectorClock.d.ts +274 -0
  163. package/dist/edge/p2p/crdt/VectorClock.d.ts.map +1 -0
  164. package/dist/edge/p2p/crdt/VectorClock.js +499 -0
  165. package/dist/edge/p2p/crdt/VectorClock.js.map +1 -0
  166. package/dist/edge/p2p/crdt/index.d.ts +87 -0
  167. package/dist/edge/p2p/crdt/index.d.ts.map +1 -0
  168. package/dist/edge/p2p/crdt/index.js +120 -0
  169. package/dist/edge/p2p/crdt/index.js.map +1 -0
  170. package/dist/edge/p2p/crdt/types.d.ts +667 -0
  171. package/dist/edge/p2p/crdt/types.d.ts.map +1 -0
  172. package/dist/edge/p2p/crdt/types.js +208 -0
  173. package/dist/edge/p2p/crdt/types.js.map +1 -0
  174. package/dist/edge/p2p/crypto/Identity.d.ts +139 -0
  175. package/dist/edge/p2p/crypto/Identity.d.ts.map +1 -0
  176. package/dist/edge/p2p/crypto/Identity.js +449 -0
  177. package/dist/edge/p2p/crypto/Identity.js.map +1 -0
  178. package/dist/edge/p2p/crypto/KeyManager.d.ts +196 -0
  179. package/dist/edge/p2p/crypto/KeyManager.d.ts.map +1 -0
  180. package/dist/edge/p2p/crypto/KeyManager.js +576 -0
  181. package/dist/edge/p2p/crypto/KeyManager.js.map +1 -0
  182. package/dist/edge/p2p/crypto/Signer.d.ts +164 -0
  183. package/dist/edge/p2p/crypto/Signer.d.ts.map +1 -0
  184. package/dist/edge/p2p/crypto/Signer.js +357 -0
  185. package/dist/edge/p2p/crypto/Signer.js.map +1 -0
  186. package/dist/edge/p2p/crypto/index.d.ts +90 -0
  187. package/dist/edge/p2p/crypto/index.d.ts.map +1 -0
  188. package/dist/edge/p2p/crypto/index.js +158 -0
  189. package/dist/edge/p2p/crypto/index.js.map +1 -0
  190. package/dist/edge/p2p/crypto/types.d.ts +217 -0
  191. package/dist/edge/p2p/crypto/types.d.ts.map +1 -0
  192. package/dist/edge/p2p/crypto/types.js +42 -0
  193. package/dist/edge/p2p/crypto/types.js.map +1 -0
  194. package/dist/edge/p2p/federated/FederatedCoordinator.d.ts +270 -0
  195. package/dist/edge/p2p/federated/FederatedCoordinator.d.ts.map +1 -0
  196. package/dist/edge/p2p/federated/FederatedCoordinator.js +824 -0
  197. package/dist/edge/p2p/federated/FederatedCoordinator.js.map +1 -0
  198. package/dist/edge/p2p/federated/FederatedRound.d.ts +295 -0
  199. package/dist/edge/p2p/federated/FederatedRound.d.ts.map +1 -0
  200. package/dist/edge/p2p/federated/FederatedRound.js +819 -0
  201. package/dist/edge/p2p/federated/FederatedRound.js.map +1 -0
  202. package/dist/edge/p2p/federated/GradientAggregator.d.ts +226 -0
  203. package/dist/edge/p2p/federated/GradientAggregator.d.ts.map +1 -0
  204. package/dist/edge/p2p/federated/GradientAggregator.js +826 -0
  205. package/dist/edge/p2p/federated/GradientAggregator.js.map +1 -0
  206. package/dist/edge/p2p/federated/ModelManager.d.ts +248 -0
  207. package/dist/edge/p2p/federated/ModelManager.d.ts.map +1 -0
  208. package/dist/edge/p2p/federated/ModelManager.js +724 -0
  209. package/dist/edge/p2p/federated/ModelManager.js.map +1 -0
  210. package/dist/edge/p2p/federated/index.d.ts +65 -0
  211. package/dist/edge/p2p/federated/index.d.ts.map +1 -0
  212. package/dist/edge/p2p/federated/index.js +110 -0
  213. package/dist/edge/p2p/federated/index.js.map +1 -0
  214. package/dist/edge/p2p/federated/types.d.ts +905 -0
  215. package/dist/edge/p2p/federated/types.d.ts.map +1 -0
  216. package/dist/edge/p2p/federated/types.js +339 -0
  217. package/dist/edge/p2p/federated/types.js.map +1 -0
  218. package/dist/edge/p2p/index.d.ts +156 -0
  219. package/dist/edge/p2p/index.d.ts.map +1 -0
  220. package/dist/edge/p2p/index.js +242 -0
  221. package/dist/edge/p2p/index.js.map +1 -0
  222. package/dist/edge/p2p/nat/ConnectivityTester.d.ts +128 -0
  223. package/dist/edge/p2p/nat/ConnectivityTester.d.ts.map +1 -0
  224. package/dist/edge/p2p/nat/ConnectivityTester.js +560 -0
  225. package/dist/edge/p2p/nat/ConnectivityTester.js.map +1 -0
  226. package/dist/edge/p2p/nat/HolePuncher.d.ts +159 -0
  227. package/dist/edge/p2p/nat/HolePuncher.d.ts.map +1 -0
  228. package/dist/edge/p2p/nat/HolePuncher.js +569 -0
  229. package/dist/edge/p2p/nat/HolePuncher.js.map +1 -0
  230. package/dist/edge/p2p/nat/NATDetector.d.ts +109 -0
  231. package/dist/edge/p2p/nat/NATDetector.d.ts.map +1 -0
  232. package/dist/edge/p2p/nat/NATDetector.js +472 -0
  233. package/dist/edge/p2p/nat/NATDetector.js.map +1 -0
  234. package/dist/edge/p2p/nat/TURNManager.d.ts +158 -0
  235. package/dist/edge/p2p/nat/TURNManager.d.ts.map +1 -0
  236. package/dist/edge/p2p/nat/TURNManager.js +547 -0
  237. package/dist/edge/p2p/nat/TURNManager.js.map +1 -0
  238. package/dist/edge/p2p/nat/index.d.ts +74 -0
  239. package/dist/edge/p2p/nat/index.d.ts.map +1 -0
  240. package/dist/edge/p2p/nat/index.js +104 -0
  241. package/dist/edge/p2p/nat/index.js.map +1 -0
  242. package/dist/edge/p2p/nat/types.d.ts +583 -0
  243. package/dist/edge/p2p/nat/types.d.ts.map +1 -0
  244. package/dist/edge/p2p/nat/types.js +267 -0
  245. package/dist/edge/p2p/nat/types.js.map +1 -0
  246. package/dist/edge/p2p/protocol/AgentChannel.d.ts +333 -0
  247. package/dist/edge/p2p/protocol/AgentChannel.d.ts.map +1 -0
  248. package/dist/edge/p2p/protocol/AgentChannel.js +914 -0
  249. package/dist/edge/p2p/protocol/AgentChannel.js.map +1 -0
  250. package/dist/edge/p2p/protocol/MessageEncoder.d.ts +147 -0
  251. package/dist/edge/p2p/protocol/MessageEncoder.d.ts.map +1 -0
  252. package/dist/edge/p2p/protocol/MessageEncoder.js +738 -0
  253. package/dist/edge/p2p/protocol/MessageEncoder.js.map +1 -0
  254. package/dist/edge/p2p/protocol/MessageRouter.d.ts +266 -0
  255. package/dist/edge/p2p/protocol/MessageRouter.d.ts.map +1 -0
  256. package/dist/edge/p2p/protocol/MessageRouter.js +808 -0
  257. package/dist/edge/p2p/protocol/MessageRouter.js.map +1 -0
  258. package/dist/edge/p2p/protocol/ProtocolHandler.d.ts +309 -0
  259. package/dist/edge/p2p/protocol/ProtocolHandler.d.ts.map +1 -0
  260. package/dist/edge/p2p/protocol/ProtocolHandler.js +930 -0
  261. package/dist/edge/p2p/protocol/ProtocolHandler.js.map +1 -0
  262. package/dist/edge/p2p/protocol/index.d.ts +114 -0
  263. package/dist/edge/p2p/protocol/index.d.ts.map +1 -0
  264. package/dist/edge/p2p/protocol/index.js +206 -0
  265. package/dist/edge/p2p/protocol/index.js.map +1 -0
  266. package/dist/edge/p2p/protocol/types.d.ts +737 -0
  267. package/dist/edge/p2p/protocol/types.d.ts.map +1 -0
  268. package/dist/edge/p2p/protocol/types.js +490 -0
  269. package/dist/edge/p2p/protocol/types.js.map +1 -0
  270. package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts +284 -0
  271. package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts.map +1 -0
  272. package/dist/edge/p2p/sharing/PatternBroadcaster.js +644 -0
  273. package/dist/edge/p2p/sharing/PatternBroadcaster.js.map +1 -0
  274. package/dist/edge/p2p/sharing/PatternIndex.d.ts +168 -0
  275. package/dist/edge/p2p/sharing/PatternIndex.d.ts.map +1 -0
  276. package/dist/edge/p2p/sharing/PatternIndex.js +781 -0
  277. package/dist/edge/p2p/sharing/PatternIndex.js.map +1 -0
  278. package/dist/edge/p2p/sharing/PatternSerializer.d.ts +163 -0
  279. package/dist/edge/p2p/sharing/PatternSerializer.d.ts.map +1 -0
  280. package/dist/edge/p2p/sharing/PatternSerializer.js +696 -0
  281. package/dist/edge/p2p/sharing/PatternSerializer.js.map +1 -0
  282. package/dist/edge/p2p/sharing/PatternSyncManager.d.ts +242 -0
  283. package/dist/edge/p2p/sharing/PatternSyncManager.d.ts.map +1 -0
  284. package/dist/edge/p2p/sharing/PatternSyncManager.js +859 -0
  285. package/dist/edge/p2p/sharing/PatternSyncManager.js.map +1 -0
  286. package/dist/edge/p2p/sharing/index.d.ts +90 -0
  287. package/dist/edge/p2p/sharing/index.d.ts.map +1 -0
  288. package/dist/edge/p2p/sharing/index.js +152 -0
  289. package/dist/edge/p2p/sharing/index.js.map +1 -0
  290. package/dist/edge/p2p/sharing/types.d.ts +796 -0
  291. package/dist/edge/p2p/sharing/types.d.ts.map +1 -0
  292. package/dist/edge/p2p/sharing/types.js +264 -0
  293. package/dist/edge/p2p/sharing/types.js.map +1 -0
  294. package/dist/edge/p2p/webrtc/ConnectionPool.d.ts +218 -0
  295. package/dist/edge/p2p/webrtc/ConnectionPool.d.ts.map +1 -0
  296. package/dist/edge/p2p/webrtc/ConnectionPool.js +562 -0
  297. package/dist/edge/p2p/webrtc/ConnectionPool.js.map +1 -0
  298. package/dist/edge/p2p/webrtc/ICEManager.d.ts +171 -0
  299. package/dist/edge/p2p/webrtc/ICEManager.d.ts.map +1 -0
  300. package/dist/edge/p2p/webrtc/ICEManager.js +490 -0
  301. package/dist/edge/p2p/webrtc/ICEManager.js.map +1 -0
  302. package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts +159 -0
  303. package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts.map +1 -0
  304. package/dist/edge/p2p/webrtc/PeerConnectionManager.js +735 -0
  305. package/dist/edge/p2p/webrtc/PeerConnectionManager.js.map +1 -0
  306. package/dist/edge/p2p/webrtc/SignalingClient.d.ts +191 -0
  307. package/dist/edge/p2p/webrtc/SignalingClient.d.ts.map +1 -0
  308. package/dist/edge/p2p/webrtc/SignalingClient.js +608 -0
  309. package/dist/edge/p2p/webrtc/SignalingClient.js.map +1 -0
  310. package/dist/edge/p2p/webrtc/index.d.ts +158 -0
  311. package/dist/edge/p2p/webrtc/index.d.ts.map +1 -0
  312. package/dist/edge/p2p/webrtc/index.js +164 -0
  313. package/dist/edge/p2p/webrtc/index.js.map +1 -0
  314. package/dist/edge/p2p/webrtc/types.d.ts +665 -0
  315. package/dist/edge/p2p/webrtc/types.d.ts.map +1 -0
  316. package/dist/edge/p2p/webrtc/types.js +245 -0
  317. package/dist/edge/p2p/webrtc/types.js.map +1 -0
  318. package/dist/edge/server/AgentSpawnAPI.d.ts +98 -0
  319. package/dist/edge/server/AgentSpawnAPI.d.ts.map +1 -0
  320. package/dist/edge/server/AgentSpawnAPI.js +264 -0
  321. package/dist/edge/server/AgentSpawnAPI.js.map +1 -0
  322. package/dist/edge/server/SignalingServer.d.ts +71 -0
  323. package/dist/edge/server/SignalingServer.d.ts.map +1 -0
  324. package/dist/edge/server/SignalingServer.js +429 -0
  325. package/dist/edge/server/SignalingServer.js.map +1 -0
  326. package/dist/edge/server/index.d.ts +64 -0
  327. package/dist/edge/server/index.d.ts.map +1 -0
  328. package/dist/edge/server/index.js +318 -0
  329. package/dist/edge/server/index.js.map +1 -0
  330. package/dist/edge/types/browser-agent.types.d.ts +455 -0
  331. package/dist/edge/types/browser-agent.types.d.ts.map +1 -0
  332. package/dist/edge/types/browser-agent.types.js +116 -0
  333. package/dist/edge/types/browser-agent.types.js.map +1 -0
  334. package/dist/edge/types/index.d.ts +11 -0
  335. package/dist/edge/types/index.d.ts.map +1 -0
  336. package/dist/edge/types/index.js +17 -0
  337. package/dist/edge/types/index.js.map +1 -0
  338. package/dist/edge/types/storage.types.d.ts +207 -0
  339. package/dist/edge/types/storage.types.d.ts.map +1 -0
  340. package/dist/edge/types/storage.types.js +47 -0
  341. package/dist/edge/types/storage.types.js.map +1 -0
  342. package/dist/edge/wasm/shims.d.ts +224 -0
  343. package/dist/edge/wasm/shims.d.ts.map +1 -0
  344. package/dist/edge/wasm/shims.js +667 -0
  345. package/dist/edge/wasm/shims.js.map +1 -0
  346. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts +33 -0
  347. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts.map +1 -0
  348. package/dist/mcp/handlers/NewDomainToolsHandler.js +305 -0
  349. package/dist/mcp/handlers/NewDomainToolsHandler.js.map +1 -0
  350. package/dist/mcp/handlers/filtered/index.d.ts +15 -19
  351. package/dist/mcp/handlers/filtered/index.d.ts.map +1 -1
  352. package/dist/mcp/handlers/filtered/index.js +16 -27
  353. package/dist/mcp/handlers/filtered/index.js.map +1 -1
  354. package/dist/mcp/handlers/integration/index.d.ts +5 -4
  355. package/dist/mcp/handlers/integration/index.d.ts.map +1 -1
  356. package/dist/mcp/handlers/integration/index.js +7 -7
  357. package/dist/mcp/handlers/integration/index.js.map +1 -1
  358. package/dist/mcp/server-instructions.d.ts +1 -1
  359. package/dist/mcp/server-instructions.js +1 -1
  360. package/dist/mcp/server.d.ts.map +1 -1
  361. package/dist/mcp/server.js +14 -0
  362. package/dist/mcp/server.js.map +1 -1
  363. package/dist/mcp/tools.d.ts +8 -0
  364. package/dist/mcp/tools.d.ts.map +1 -1
  365. package/dist/mcp/tools.js +412 -1
  366. package/dist/mcp/tools.js.map +1 -1
  367. package/dist/persistence/migrations/all-migrations.d.ts.map +1 -1
  368. package/dist/persistence/migrations/all-migrations.js +44 -1
  369. package/dist/persistence/migrations/all-migrations.js.map +1 -1
  370. package/dist/planning/GOAPPlanner.d.ts +1 -0
  371. package/dist/planning/GOAPPlanner.d.ts.map +1 -1
  372. package/dist/planning/GOAPPlanner.js +15 -2
  373. package/dist/planning/GOAPPlanner.js.map +1 -1
  374. package/dist/planning/PlanLearning.d.ts.map +1 -1
  375. package/dist/planning/PlanLearning.js +2 -1
  376. package/dist/planning/PlanLearning.js.map +1 -1
  377. package/dist/planning/PlanSimilarity.d.ts.map +1 -1
  378. package/dist/planning/PlanSimilarity.js +2 -1
  379. package/dist/planning/PlanSimilarity.js.map +1 -1
  380. package/package.json +29 -8
  381. package/dist/alerting/AlertManager.d.ts +0 -120
  382. package/dist/alerting/AlertManager.d.ts.map +0 -1
  383. package/dist/alerting/AlertManager.js +0 -345
  384. package/dist/alerting/AlertManager.js.map +0 -1
  385. package/dist/alerting/FeedbackRouter.d.ts +0 -98
  386. package/dist/alerting/FeedbackRouter.d.ts.map +0 -1
  387. package/dist/alerting/FeedbackRouter.js +0 -331
  388. package/dist/alerting/FeedbackRouter.js.map +0 -1
  389. package/dist/alerting/StrategyApplicator.d.ts +0 -120
  390. package/dist/alerting/StrategyApplicator.d.ts.map +0 -1
  391. package/dist/alerting/StrategyApplicator.js +0 -299
  392. package/dist/alerting/StrategyApplicator.js.map +0 -1
  393. package/dist/alerting/index.d.ts +0 -68
  394. package/dist/alerting/index.d.ts.map +0 -1
  395. package/dist/alerting/index.js +0 -112
  396. package/dist/alerting/index.js.map +0 -1
  397. package/dist/alerting/types.d.ts +0 -118
  398. package/dist/alerting/types.d.ts.map +0 -1
  399. package/dist/alerting/types.js +0 -11
  400. package/dist/alerting/types.js.map +0 -1
  401. package/dist/cli/commands/fleet/backup.d.ts +0 -49
  402. package/dist/cli/commands/fleet/backup.d.ts.map +0 -1
  403. package/dist/cli/commands/fleet/backup.js +0 -88
  404. package/dist/cli/commands/fleet/backup.js.map +0 -1
  405. package/dist/cli/commands/fleet/health.d.ts +0 -154
  406. package/dist/cli/commands/fleet/health.d.ts.map +0 -1
  407. package/dist/cli/commands/fleet/health.js +0 -483
  408. package/dist/cli/commands/fleet/health.js.map +0 -1
  409. package/dist/cli/commands/fleet/init.d.ts +0 -11
  410. package/dist/cli/commands/fleet/init.d.ts.map +0 -1
  411. package/dist/cli/commands/fleet/init.js +0 -91
  412. package/dist/cli/commands/fleet/init.js.map +0 -1
  413. package/dist/cli/commands/fleet/logs.d.ts +0 -21
  414. package/dist/cli/commands/fleet/logs.d.ts.map +0 -1
  415. package/dist/cli/commands/fleet/logs.js +0 -267
  416. package/dist/cli/commands/fleet/logs.js.map +0 -1
  417. package/dist/cli/commands/fleet/metrics.d.ts +0 -27
  418. package/dist/cli/commands/fleet/metrics.d.ts.map +0 -1
  419. package/dist/cli/commands/fleet/metrics.js +0 -369
  420. package/dist/cli/commands/fleet/metrics.js.map +0 -1
  421. package/dist/cli/commands/fleet/monitor.d.ts +0 -18
  422. package/dist/cli/commands/fleet/monitor.d.ts.map +0 -1
  423. package/dist/cli/commands/fleet/monitor.js +0 -237
  424. package/dist/cli/commands/fleet/monitor.js.map +0 -1
  425. package/dist/cli/commands/fleet/optimize.d.ts +0 -42
  426. package/dist/cli/commands/fleet/optimize.d.ts.map +0 -1
  427. package/dist/cli/commands/fleet/optimize.js +0 -135
  428. package/dist/cli/commands/fleet/optimize.js.map +0 -1
  429. package/dist/cli/commands/fleet/recover.d.ts +0 -22
  430. package/dist/cli/commands/fleet/recover.d.ts.map +0 -1
  431. package/dist/cli/commands/fleet/recover.js +0 -99
  432. package/dist/cli/commands/fleet/recover.js.map +0 -1
  433. package/dist/cli/commands/fleet/restart.d.ts +0 -18
  434. package/dist/cli/commands/fleet/restart.d.ts.map +0 -1
  435. package/dist/cli/commands/fleet/restart.js +0 -290
  436. package/dist/cli/commands/fleet/restart.js.map +0 -1
  437. package/dist/cli/commands/fleet/scale.d.ts +0 -9
  438. package/dist/cli/commands/fleet/scale.d.ts.map +0 -1
  439. package/dist/cli/commands/fleet/scale.js +0 -77
  440. package/dist/cli/commands/fleet/scale.js.map +0 -1
  441. package/dist/cli/commands/fleet/shutdown.d.ts +0 -19
  442. package/dist/cli/commands/fleet/shutdown.d.ts.map +0 -1
  443. package/dist/cli/commands/fleet/shutdown.js +0 -307
  444. package/dist/cli/commands/fleet/shutdown.js.map +0 -1
  445. package/dist/cli/commands/fleet/status.d.ts +0 -10
  446. package/dist/cli/commands/fleet/status.d.ts.map +0 -1
  447. package/dist/cli/commands/fleet/status.js +0 -97
  448. package/dist/cli/commands/fleet/status.js.map +0 -1
  449. package/dist/cli/commands/fleet/topology.d.ts +0 -23
  450. package/dist/cli/commands/fleet/topology.d.ts.map +0 -1
  451. package/dist/cli/commands/fleet/topology.js +0 -376
  452. package/dist/cli/commands/fleet/topology.js.map +0 -1
  453. package/dist/cli/commands/monitor/alerts.d.ts +0 -45
  454. package/dist/cli/commands/monitor/alerts.d.ts.map +0 -1
  455. package/dist/cli/commands/monitor/alerts.js +0 -168
  456. package/dist/cli/commands/monitor/alerts.js.map +0 -1
  457. package/dist/cli/commands/monitor/analyze.d.ts +0 -49
  458. package/dist/cli/commands/monitor/analyze.d.ts.map +0 -1
  459. package/dist/cli/commands/monitor/analyze.js +0 -209
  460. package/dist/cli/commands/monitor/analyze.js.map +0 -1
  461. package/dist/cli/commands/monitor/compare.d.ts +0 -38
  462. package/dist/cli/commands/monitor/compare.d.ts.map +0 -1
  463. package/dist/cli/commands/monitor/compare.js +0 -177
  464. package/dist/cli/commands/monitor/compare.js.map +0 -1
  465. package/dist/cli/commands/monitor/dashboard.d.ts +0 -34
  466. package/dist/cli/commands/monitor/dashboard.d.ts.map +0 -1
  467. package/dist/cli/commands/monitor/dashboard.js +0 -157
  468. package/dist/cli/commands/monitor/dashboard.js.map +0 -1
  469. package/dist/cli/commands/monitor/export.d.ts +0 -36
  470. package/dist/cli/commands/monitor/export.d.ts.map +0 -1
  471. package/dist/cli/commands/monitor/export.js +0 -157
  472. package/dist/cli/commands/monitor/export.js.map +0 -1
  473. package/dist/cli/commands/monitor/index.d.ts +0 -11
  474. package/dist/cli/commands/monitor/index.d.ts.map +0 -1
  475. package/dist/cli/commands/monitor/index.js +0 -14
  476. package/dist/cli/commands/monitor/index.js.map +0 -1
  477. package/dist/cli/commands/quality/baseline.d.ts +0 -27
  478. package/dist/cli/commands/quality/baseline.d.ts.map +0 -1
  479. package/dist/cli/commands/quality/baseline.js +0 -124
  480. package/dist/cli/commands/quality/baseline.js.map +0 -1
  481. package/dist/cli/commands/quality/compare.d.ts +0 -36
  482. package/dist/cli/commands/quality/compare.d.ts.map +0 -1
  483. package/dist/cli/commands/quality/compare.js +0 -136
  484. package/dist/cli/commands/quality/compare.js.map +0 -1
  485. package/dist/cli/commands/quality/decision.d.ts +0 -81
  486. package/dist/cli/commands/quality/decision.d.ts.map +0 -1
  487. package/dist/cli/commands/quality/decision.js +0 -319
  488. package/dist/cli/commands/quality/decision.js.map +0 -1
  489. package/dist/cli/commands/quality/gate.d.ts +0 -47
  490. package/dist/cli/commands/quality/gate.d.ts.map +0 -1
  491. package/dist/cli/commands/quality/gate.js +0 -205
  492. package/dist/cli/commands/quality/gate.js.map +0 -1
  493. package/dist/cli/commands/quality/index.d.ts +0 -17
  494. package/dist/cli/commands/quality/index.d.ts.map +0 -1
  495. package/dist/cli/commands/quality/index.js +0 -41
  496. package/dist/cli/commands/quality/index.js.map +0 -1
  497. package/dist/cli/commands/quality/policy.d.ts +0 -57
  498. package/dist/cli/commands/quality/policy.d.ts.map +0 -1
  499. package/dist/cli/commands/quality/policy.js +0 -359
  500. package/dist/cli/commands/quality/policy.js.map +0 -1
  501. package/dist/cli/commands/quality/risk.d.ts +0 -41
  502. package/dist/cli/commands/quality/risk.d.ts.map +0 -1
  503. package/dist/cli/commands/quality/risk.js +0 -255
  504. package/dist/cli/commands/quality/risk.js.map +0 -1
  505. package/dist/cli/commands/quality/trends.d.ts +0 -40
  506. package/dist/cli/commands/quality/trends.d.ts.map +0 -1
  507. package/dist/cli/commands/quality/trends.js +0 -122
  508. package/dist/cli/commands/quality/trends.js.map +0 -1
  509. package/dist/cli/commands/quality/validate.d.ts +0 -44
  510. package/dist/cli/commands/quality/validate.d.ts.map +0 -1
  511. package/dist/cli/commands/quality/validate.js +0 -234
  512. package/dist/cli/commands/quality/validate.js.map +0 -1
  513. package/dist/cli/commands/test/analyze-failures.d.ts +0 -39
  514. package/dist/cli/commands/test/analyze-failures.d.ts.map +0 -1
  515. package/dist/cli/commands/test/analyze-failures.js +0 -113
  516. package/dist/cli/commands/test/analyze-failures.js.map +0 -1
  517. package/dist/cli/commands/test/clean.d.ts +0 -3
  518. package/dist/cli/commands/test/clean.d.ts.map +0 -1
  519. package/dist/cli/commands/test/clean.js +0 -148
  520. package/dist/cli/commands/test/clean.js.map +0 -1
  521. package/dist/cli/commands/test/debug.d.ts +0 -3
  522. package/dist/cli/commands/test/debug.d.ts.map +0 -1
  523. package/dist/cli/commands/test/debug.js +0 -167
  524. package/dist/cli/commands/test/debug.js.map +0 -1
  525. package/dist/cli/commands/test/diff.d.ts +0 -3
  526. package/dist/cli/commands/test/diff.d.ts.map +0 -1
  527. package/dist/cli/commands/test/diff.js +0 -195
  528. package/dist/cli/commands/test/diff.js.map +0 -1
  529. package/dist/cli/commands/test/flakiness.d.ts +0 -32
  530. package/dist/cli/commands/test/flakiness.d.ts.map +0 -1
  531. package/dist/cli/commands/test/flakiness.js +0 -121
  532. package/dist/cli/commands/test/flakiness.js.map +0 -1
  533. package/dist/cli/commands/test/index.d.ts +0 -17
  534. package/dist/cli/commands/test/index.d.ts.map +0 -1
  535. package/dist/cli/commands/test/index.js +0 -45
  536. package/dist/cli/commands/test/index.js.map +0 -1
  537. package/dist/cli/commands/test/mutate.d.ts +0 -29
  538. package/dist/cli/commands/test/mutate.d.ts.map +0 -1
  539. package/dist/cli/commands/test/mutate.js +0 -163
  540. package/dist/cli/commands/test/mutate.js.map +0 -1
  541. package/dist/cli/commands/test/parallel.d.ts +0 -3
  542. package/dist/cli/commands/test/parallel.d.ts.map +0 -1
  543. package/dist/cli/commands/test/parallel.js +0 -117
  544. package/dist/cli/commands/test/parallel.js.map +0 -1
  545. package/dist/cli/commands/test/profile.d.ts +0 -3
  546. package/dist/cli/commands/test/profile.d.ts.map +0 -1
  547. package/dist/cli/commands/test/profile.js +0 -156
  548. package/dist/cli/commands/test/profile.js.map +0 -1
  549. package/dist/cli/commands/test/queue.d.ts +0 -3
  550. package/dist/cli/commands/test/queue.d.ts.map +0 -1
  551. package/dist/cli/commands/test/queue.js +0 -140
  552. package/dist/cli/commands/test/queue.js.map +0 -1
  553. package/dist/cli/commands/test/retry.d.ts +0 -3
  554. package/dist/cli/commands/test/retry.d.ts.map +0 -1
  555. package/dist/cli/commands/test/retry.js +0 -105
  556. package/dist/cli/commands/test/retry.js.map +0 -1
  557. package/dist/cli/commands/test/snapshot.d.ts +0 -3
  558. package/dist/cli/commands/test/snapshot.d.ts.map +0 -1
  559. package/dist/cli/commands/test/snapshot.js +0 -176
  560. package/dist/cli/commands/test/snapshot.js.map +0 -1
  561. package/dist/cli/commands/test/trace.d.ts +0 -3
  562. package/dist/cli/commands/test/trace.d.ts.map +0 -1
  563. package/dist/cli/commands/test/trace.js +0 -137
  564. package/dist/cli/commands/test/trace.js.map +0 -1
  565. package/dist/cli/commands/test/watch.d.ts +0 -3
  566. package/dist/cli/commands/test/watch.d.ts.map +0 -1
  567. package/dist/cli/commands/test/watch.js +0 -130
  568. package/dist/cli/commands/test/watch.js.map +0 -1
  569. package/dist/cli/index-spec.d.ts +0 -3
  570. package/dist/cli/index-spec.d.ts.map +0 -1
  571. package/dist/cli/index-spec.js +0 -154
  572. package/dist/cli/index-spec.js.map +0 -1
  573. package/dist/cli/index-working.d.ts +0 -7
  574. package/dist/cli/index-working.d.ts.map +0 -1
  575. package/dist/cli/index-working.js +0 -617
  576. package/dist/cli/index-working.js.map +0 -1
  577. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +0 -83
  578. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +0 -1
  579. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +0 -130
  580. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +0 -1
  581. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +0 -58
  582. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +0 -1
  583. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +0 -84
  584. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +0 -1
  585. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +0 -54
  586. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +0 -1
  587. package/dist/mcp/handlers/filtered/security-scanner-filtered.js +0 -73
  588. package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +0 -1
  589. package/dist/mcp/handlers/integration/contract-validate.d.ts +0 -10
  590. package/dist/mcp/handlers/integration/contract-validate.d.ts.map +0 -1
  591. package/dist/mcp/handlers/integration/contract-validate.js +0 -348
  592. package/dist/mcp/handlers/integration/contract-validate.js.map +0 -1
  593. package/dist/reporting/ResultAggregator.d.ts +0 -107
  594. package/dist/reporting/ResultAggregator.d.ts.map +0 -1
  595. package/dist/reporting/ResultAggregator.js +0 -435
  596. package/dist/reporting/ResultAggregator.js.map +0 -1
  597. package/dist/reporting/index.d.ts +0 -48
  598. package/dist/reporting/index.d.ts.map +0 -1
  599. package/dist/reporting/index.js +0 -154
  600. package/dist/reporting/index.js.map +0 -1
  601. package/dist/reporting/reporters/ControlLoopReporter.d.ts +0 -128
  602. package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +0 -1
  603. package/dist/reporting/reporters/ControlLoopReporter.js +0 -417
  604. package/dist/reporting/reporters/ControlLoopReporter.js.map +0 -1
  605. package/dist/reporting/reporters/HumanReadableReporter.d.ts +0 -140
  606. package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +0 -1
  607. package/dist/reporting/reporters/HumanReadableReporter.js +0 -524
  608. package/dist/reporting/reporters/HumanReadableReporter.js.map +0 -1
  609. package/dist/reporting/reporters/JSONReporter.d.ts +0 -251
  610. package/dist/reporting/reporters/JSONReporter.d.ts.map +0 -1
  611. package/dist/reporting/reporters/JSONReporter.js +0 -325
  612. package/dist/reporting/reporters/JSONReporter.js.map +0 -1
  613. package/dist/reporting/reporters/index.d.ts +0 -14
  614. package/dist/reporting/reporters/index.d.ts.map +0 -1
  615. package/dist/reporting/reporters/index.js +0 -19
  616. package/dist/reporting/reporters/index.js.map +0 -1
  617. package/dist/reporting/types.d.ts +0 -427
  618. package/dist/reporting/types.d.ts.map +0 -1
  619. package/dist/reporting/types.js +0 -12
  620. package/dist/reporting/types.js.map +0 -1
@@ -0,0 +1,808 @@
1
+ "use strict";
2
+ /**
3
+ * Message Router for Agent-to-Agent Protocol
4
+ *
5
+ * Routes messages to correct peer connections with support for unicast,
6
+ * broadcast, and multicast patterns. Includes message queuing with priority,
7
+ * delivery confirmation tracking, timeout/retry logic, and dead letter handling.
8
+ *
9
+ * @module edge/p2p/protocol/MessageRouter
10
+ * @version 1.0.0
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.MessageRouter = exports.RouterEventType = void 0;
14
+ exports.createMessageRouter = createMessageRouter;
15
+ const types_1 = require("./types");
16
+ /**
17
+ * Router event types
18
+ */
19
+ var RouterEventType;
20
+ (function (RouterEventType) {
21
+ RouterEventType["MESSAGE_QUEUED"] = "message_queued";
22
+ RouterEventType["MESSAGE_SENT"] = "message_sent";
23
+ RouterEventType["MESSAGE_DELIVERED"] = "message_delivered";
24
+ RouterEventType["MESSAGE_FAILED"] = "message_failed";
25
+ RouterEventType["MESSAGE_EXPIRED"] = "message_expired";
26
+ RouterEventType["DEAD_LETTERED"] = "dead_lettered";
27
+ RouterEventType["QUEUE_OVERFLOW"] = "queue_overflow";
28
+ RouterEventType["PEER_UNAVAILABLE"] = "peer_unavailable";
29
+ })(RouterEventType || (exports.RouterEventType = RouterEventType = {}));
30
+ // ============================================
31
+ // MessageRouter Class
32
+ // ============================================
33
+ /**
34
+ * Message router for agent-to-agent communication
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * const router = new MessageRouter();
39
+ *
40
+ * // Register peer
41
+ * router.registerPeer({
42
+ * peerId: 'peer-1',
43
+ * isConnected: true,
44
+ * send: async (data) => { ... }
45
+ * });
46
+ *
47
+ * // Route message
48
+ * await router.route(envelope, encodedData);
49
+ * ```
50
+ */
51
+ class MessageRouter {
52
+ constructor(config = {}) {
53
+ this.peers = new Map();
54
+ this.queue = [];
55
+ this.deliveryTracking = new Map();
56
+ this.deadLetterQueue = [];
57
+ this.pendingAcks = new Map();
58
+ this.eventHandlers = [];
59
+ this.flushTimer = null;
60
+ this.isProcessing = false;
61
+ this.config = {
62
+ queue: config.queue ?? {},
63
+ enableDeadLetter: config.enableDeadLetter ?? true,
64
+ maxDeadLetterSize: config.maxDeadLetterSize ?? 100,
65
+ enableRetry: config.enableRetry ?? true,
66
+ retryDelayCalculator: config.retryDelayCalculator ?? this.defaultRetryDelay,
67
+ };
68
+ this.queueConfig = {
69
+ ...types_1.DEFAULT_QUEUE_CONFIG,
70
+ ...this.config.queue,
71
+ };
72
+ this.stats = {
73
+ size: 0,
74
+ memory: 0,
75
+ totalEnqueued: 0,
76
+ totalDequeued: 0,
77
+ totalDropped: 0,
78
+ averageWaitTime: 0,
79
+ byPriority: {
80
+ [types_1.MessagePriority.CRITICAL]: 0,
81
+ [types_1.MessagePriority.HIGH]: 0,
82
+ [types_1.MessagePriority.NORMAL]: 0,
83
+ [types_1.MessagePriority.LOW]: 0,
84
+ },
85
+ };
86
+ // Start queue processing
87
+ this.startFlushTimer();
88
+ }
89
+ // ============================================
90
+ // Peer Management
91
+ // ============================================
92
+ /**
93
+ * Register a peer for routing
94
+ */
95
+ registerPeer(peer) {
96
+ this.peers.set(peer.peerId, peer);
97
+ }
98
+ /**
99
+ * Unregister a peer
100
+ */
101
+ unregisterPeer(peerId) {
102
+ this.peers.delete(peerId);
103
+ }
104
+ /**
105
+ * Get registered peer
106
+ */
107
+ getPeer(peerId) {
108
+ return this.peers.get(peerId);
109
+ }
110
+ /**
111
+ * Get all connected peers
112
+ */
113
+ getConnectedPeers() {
114
+ return Array.from(this.peers.values()).filter((p) => p.isConnected);
115
+ }
116
+ /**
117
+ * Check if peer is available
118
+ */
119
+ isPeerAvailable(peerId) {
120
+ const peer = this.peers.get(peerId);
121
+ return peer !== undefined && peer.isConnected;
122
+ }
123
+ // ============================================
124
+ // Routing Methods
125
+ // ============================================
126
+ /**
127
+ * Route a message to its destination(s)
128
+ *
129
+ * @param envelope - Protocol envelope
130
+ * @param data - Encoded message data
131
+ * @returns Promise that resolves when delivery is confirmed
132
+ */
133
+ async route(envelope, data) {
134
+ const routing = envelope.routing ?? {
135
+ mode: envelope.header.routing,
136
+ targets: [envelope.header.recipientId],
137
+ };
138
+ // Determine targets based on routing mode
139
+ const targets = this.resolveTargets(routing, envelope.header.senderId);
140
+ if (targets.length === 0) {
141
+ throw new types_1.ProtocolError('No valid targets for message', types_1.ProtocolErrorCode.NO_ROUTE);
142
+ }
143
+ // Check if immediate delivery is possible
144
+ const availableTargets = targets.filter((t) => this.isPeerAvailable(t));
145
+ if (availableTargets.length === targets.length &&
146
+ envelope.header.delivery === types_1.DeliverySemantics.AT_MOST_ONCE) {
147
+ // Attempt immediate delivery for fire-and-forget
148
+ return this.deliverImmediate(envelope, data, targets);
149
+ }
150
+ // Queue for reliable delivery
151
+ return this.queueForDelivery(envelope, data, targets);
152
+ }
153
+ /**
154
+ * Route broadcast message to all peers
155
+ */
156
+ async broadcast(envelope, data, excludeSender = true) {
157
+ const targets = this.getConnectedPeers()
158
+ .map((p) => p.peerId)
159
+ .filter((id) => !excludeSender || id !== envelope.header.senderId);
160
+ if (targets.length === 0) {
161
+ return true; // No peers to broadcast to
162
+ }
163
+ return this.route({
164
+ ...envelope,
165
+ routing: {
166
+ mode: types_1.RoutingMode.BROADCAST,
167
+ targets,
168
+ excludeSender,
169
+ },
170
+ }, data);
171
+ }
172
+ /**
173
+ * Route multicast message to specific peers
174
+ */
175
+ async multicast(envelope, data, targets) {
176
+ return this.route({
177
+ ...envelope,
178
+ routing: {
179
+ mode: types_1.RoutingMode.MULTICAST,
180
+ targets,
181
+ },
182
+ }, data);
183
+ }
184
+ /**
185
+ * Resolve target peer IDs based on routing info
186
+ */
187
+ resolveTargets(routing, senderId) {
188
+ switch (routing.mode) {
189
+ case types_1.RoutingMode.UNICAST:
190
+ return routing.targets ?? [];
191
+ case types_1.RoutingMode.BROADCAST: {
192
+ const allPeers = Array.from(this.peers.keys());
193
+ return routing.excludeSender ? allPeers.filter((p) => p !== senderId) : allPeers;
194
+ }
195
+ case types_1.RoutingMode.MULTICAST:
196
+ return routing.targets ?? [];
197
+ case types_1.RoutingMode.RELAY:
198
+ // For relay, first target is the relay node
199
+ return routing.relayNodes?.[0] ? [routing.relayNodes[0]] : routing.targets ?? [];
200
+ default:
201
+ return routing.targets ?? [];
202
+ }
203
+ }
204
+ // ============================================
205
+ // Delivery Methods
206
+ // ============================================
207
+ /**
208
+ * Attempt immediate delivery without queuing
209
+ */
210
+ async deliverImmediate(envelope, data, targets) {
211
+ const results = await Promise.allSettled(targets.map(async (target) => {
212
+ const peer = this.peers.get(target);
213
+ if (!peer || !peer.isConnected) {
214
+ throw new types_1.ProtocolError(`Peer ${target} not available`, types_1.ProtocolErrorCode.PEER_UNREACHABLE);
215
+ }
216
+ await peer.send(data);
217
+ return true;
218
+ }));
219
+ const successful = results.filter((r) => r.status === 'fulfilled').length;
220
+ const failed = results.filter((r) => r.status === 'rejected').length;
221
+ // Emit events
222
+ if (successful > 0) {
223
+ this.emit({
224
+ type: RouterEventType.MESSAGE_SENT,
225
+ messageId: envelope.header.messageId,
226
+ timestamp: Date.now(),
227
+ details: { successful, failed, targets },
228
+ });
229
+ }
230
+ return failed === 0;
231
+ }
232
+ /**
233
+ * Queue message for reliable delivery
234
+ */
235
+ async queueForDelivery(envelope, data, targets) {
236
+ // Check queue limits
237
+ if (this.queue.length >= this.queueConfig.maxSize) {
238
+ // Try to make room by processing expired messages
239
+ this.processExpired();
240
+ if (this.queue.length >= this.queueConfig.maxSize) {
241
+ this.emit({
242
+ type: RouterEventType.QUEUE_OVERFLOW,
243
+ messageId: envelope.header.messageId,
244
+ timestamp: Date.now(),
245
+ });
246
+ throw new types_1.ProtocolError('Message queue full', types_1.ProtocolErrorCode.QUEUE_FULL);
247
+ }
248
+ }
249
+ // Create delivery tracking
250
+ const deliveryInfo = {
251
+ messageId: envelope.header.messageId,
252
+ status: types_1.DeliveryStatus.PENDING,
253
+ attempts: 0,
254
+ firstAttemptAt: 0,
255
+ lastAttemptAt: 0,
256
+ };
257
+ return new Promise((resolve, reject) => {
258
+ const entry = {
259
+ id: (0, types_1.generateMessageId)(),
260
+ envelope,
261
+ data,
262
+ priority: envelope.header.priority,
263
+ targets,
264
+ queuedAt: Date.now(),
265
+ deliveryInfo,
266
+ resolve,
267
+ reject,
268
+ };
269
+ // Insert based on priority
270
+ this.insertWithPriority(entry);
271
+ // Update stats
272
+ this.stats.size++;
273
+ this.stats.memory += data.length;
274
+ this.stats.totalEnqueued++;
275
+ this.stats.byPriority[entry.priority]++;
276
+ this.deliveryTracking.set(envelope.header.messageId, deliveryInfo);
277
+ this.emit({
278
+ type: RouterEventType.MESSAGE_QUEUED,
279
+ messageId: envelope.header.messageId,
280
+ timestamp: Date.now(),
281
+ details: { priority: entry.priority, targets },
282
+ });
283
+ // Trigger immediate processing for critical messages
284
+ if (entry.priority === types_1.MessagePriority.CRITICAL) {
285
+ this.processQueue();
286
+ }
287
+ });
288
+ }
289
+ /**
290
+ * Insert entry into queue maintaining priority order
291
+ */
292
+ insertWithPriority(entry) {
293
+ if (!this.queueConfig.enablePriority) {
294
+ this.queue.push(entry);
295
+ return;
296
+ }
297
+ // Find insertion point
298
+ let insertIndex = this.queue.length;
299
+ for (let i = 0; i < this.queue.length; i++) {
300
+ if (this.queue[i].priority > entry.priority) {
301
+ insertIndex = i;
302
+ break;
303
+ }
304
+ }
305
+ this.queue.splice(insertIndex, 0, entry);
306
+ }
307
+ // ============================================
308
+ // Queue Processing
309
+ // ============================================
310
+ /**
311
+ * Start the flush timer
312
+ */
313
+ startFlushTimer() {
314
+ if (this.flushTimer)
315
+ return;
316
+ this.flushTimer = setInterval(() => {
317
+ this.processQueue();
318
+ }, this.queueConfig.flushInterval);
319
+ }
320
+ /**
321
+ * Stop the flush timer
322
+ */
323
+ stopFlushTimer() {
324
+ if (this.flushTimer) {
325
+ clearInterval(this.flushTimer);
326
+ this.flushTimer = null;
327
+ }
328
+ }
329
+ /**
330
+ * Process queued messages
331
+ */
332
+ async processQueue() {
333
+ if (this.isProcessing || this.queue.length === 0)
334
+ return;
335
+ this.isProcessing = true;
336
+ try {
337
+ // Process expired messages first
338
+ this.processExpired();
339
+ // Process batch
340
+ const batch = this.queue.splice(0, this.queueConfig.batchSize);
341
+ for (const entry of batch) {
342
+ await this.processEntry(entry);
343
+ }
344
+ }
345
+ finally {
346
+ this.isProcessing = false;
347
+ }
348
+ }
349
+ /**
350
+ * Process a single queue entry
351
+ */
352
+ async processEntry(entry) {
353
+ const now = Date.now();
354
+ // Check TTL
355
+ if (now - entry.queuedAt > entry.envelope.header.ttl) {
356
+ this.handleExpired(entry);
357
+ return;
358
+ }
359
+ // Update delivery info
360
+ entry.deliveryInfo.attempts++;
361
+ if (entry.deliveryInfo.firstAttemptAt === 0) {
362
+ entry.deliveryInfo.firstAttemptAt = now;
363
+ }
364
+ entry.deliveryInfo.lastAttemptAt = now;
365
+ entry.deliveryInfo.status = types_1.DeliveryStatus.SENT;
366
+ // Attempt delivery to each target
367
+ const results = await Promise.allSettled(entry.targets.map(async (target) => {
368
+ const peer = this.peers.get(target);
369
+ if (!peer || !peer.isConnected) {
370
+ this.emit({
371
+ type: RouterEventType.PEER_UNAVAILABLE,
372
+ messageId: entry.envelope.header.messageId,
373
+ timestamp: now,
374
+ details: { peerId: target },
375
+ });
376
+ throw new types_1.ProtocolError(`Peer ${target} not available`, types_1.ProtocolErrorCode.PEER_UNREACHABLE, true);
377
+ }
378
+ await peer.send(entry.data);
379
+ return target;
380
+ }));
381
+ const successful = results
382
+ .filter((r) => r.status === 'fulfilled')
383
+ .map((r) => r.value);
384
+ const failed = results
385
+ .filter((r) => r.status === 'rejected')
386
+ .map((_, i) => entry.targets[i]);
387
+ // Handle results
388
+ if (failed.length === 0) {
389
+ // All deliveries successful
390
+ this.handleDelivered(entry, successful);
391
+ }
392
+ else if (successful.length > 0) {
393
+ // Partial success - update targets and requeue failures
394
+ if (this.config.enableRetry && entry.deliveryInfo.attempts < types_1.MAX_RETRY_ATTEMPTS) {
395
+ entry.targets = failed;
396
+ const retryDelay = this.config.retryDelayCalculator(entry.deliveryInfo.attempts);
397
+ entry.deliveryInfo.nextRetryAt = now + retryDelay;
398
+ this.scheduleRetry(entry, retryDelay);
399
+ }
400
+ else {
401
+ this.handlePartialFailure(entry, successful, failed);
402
+ }
403
+ }
404
+ else {
405
+ // All deliveries failed
406
+ if (this.config.enableRetry && entry.deliveryInfo.attempts < types_1.MAX_RETRY_ATTEMPTS) {
407
+ const retryDelay = this.config.retryDelayCalculator(entry.deliveryInfo.attempts);
408
+ entry.deliveryInfo.nextRetryAt = now + retryDelay;
409
+ this.scheduleRetry(entry, retryDelay);
410
+ }
411
+ else {
412
+ this.handleFailed(entry);
413
+ }
414
+ }
415
+ }
416
+ /**
417
+ * Schedule a retry for a failed delivery
418
+ */
419
+ scheduleRetry(entry, delay) {
420
+ setTimeout(() => {
421
+ // Re-insert into queue
422
+ this.insertWithPriority(entry);
423
+ }, delay);
424
+ }
425
+ /**
426
+ * Process expired messages
427
+ */
428
+ processExpired() {
429
+ const now = Date.now();
430
+ const expired = [];
431
+ this.queue = this.queue.filter((entry) => {
432
+ if (now - entry.queuedAt > entry.envelope.header.ttl) {
433
+ expired.push(entry);
434
+ return false;
435
+ }
436
+ return true;
437
+ });
438
+ for (const entry of expired) {
439
+ this.handleExpired(entry);
440
+ }
441
+ }
442
+ /**
443
+ * Default retry delay calculator (exponential backoff)
444
+ */
445
+ defaultRetryDelay(attempt) {
446
+ return Math.min(types_1.INITIAL_RETRY_DELAY * Math.pow(types_1.RETRY_DELAY_MULTIPLIER, attempt), 30000);
447
+ }
448
+ // ============================================
449
+ // Delivery Handlers
450
+ // ============================================
451
+ /**
452
+ * Handle successful delivery
453
+ */
454
+ handleDelivered(entry, targets) {
455
+ entry.deliveryInfo.status = types_1.DeliveryStatus.DELIVERED;
456
+ entry.deliveryInfo.deliveredAt = Date.now();
457
+ // Update stats
458
+ this.stats.size--;
459
+ this.stats.memory -= entry.data.length;
460
+ this.stats.totalDequeued++;
461
+ this.stats.byPriority[entry.priority]--;
462
+ this.updateAverageWaitTime(entry);
463
+ this.emit({
464
+ type: RouterEventType.MESSAGE_DELIVERED,
465
+ messageId: entry.envelope.header.messageId,
466
+ timestamp: Date.now(),
467
+ details: { targets, attempts: entry.deliveryInfo.attempts },
468
+ });
469
+ entry.resolve(true);
470
+ }
471
+ /**
472
+ * Handle delivery failure
473
+ */
474
+ handleFailed(entry) {
475
+ entry.deliveryInfo.status = types_1.DeliveryStatus.FAILED;
476
+ entry.deliveryInfo.error = {
477
+ code: types_1.ProtocolErrorCode.DELIVERY_FAILED,
478
+ message: `Delivery failed after ${entry.deliveryInfo.attempts} attempts`,
479
+ timestamp: Date.now(),
480
+ retryable: false,
481
+ };
482
+ // Update stats
483
+ this.stats.size--;
484
+ this.stats.memory -= entry.data.length;
485
+ this.stats.totalDropped++;
486
+ this.stats.byPriority[entry.priority]--;
487
+ this.emit({
488
+ type: RouterEventType.MESSAGE_FAILED,
489
+ messageId: entry.envelope.header.messageId,
490
+ timestamp: Date.now(),
491
+ details: { attempts: entry.deliveryInfo.attempts },
492
+ });
493
+ // Move to dead letter queue
494
+ if (this.config.enableDeadLetter) {
495
+ this.addToDeadLetter(entry, 'Delivery failed after max retries');
496
+ }
497
+ entry.reject(new types_1.ProtocolError('Delivery failed after max retries', types_1.ProtocolErrorCode.DELIVERY_FAILED));
498
+ }
499
+ /**
500
+ * Handle partial delivery failure
501
+ */
502
+ handlePartialFailure(entry, successful, failed) {
503
+ // Consider partial success as delivered for the successful targets
504
+ entry.deliveryInfo.status = types_1.DeliveryStatus.DELIVERED;
505
+ entry.deliveryInfo.deliveredAt = Date.now();
506
+ // Update stats
507
+ this.stats.size--;
508
+ this.stats.memory -= entry.data.length;
509
+ this.stats.totalDequeued++;
510
+ this.stats.byPriority[entry.priority]--;
511
+ this.emit({
512
+ type: RouterEventType.MESSAGE_DELIVERED,
513
+ messageId: entry.envelope.header.messageId,
514
+ timestamp: Date.now(),
515
+ details: { successful, failed, partial: true },
516
+ });
517
+ // Resolve with partial success
518
+ entry.resolve(true);
519
+ }
520
+ /**
521
+ * Handle expired message
522
+ */
523
+ handleExpired(entry) {
524
+ entry.deliveryInfo.status = types_1.DeliveryStatus.EXPIRED;
525
+ entry.deliveryInfo.error = {
526
+ code: types_1.ProtocolErrorCode.TTL_EXPIRED,
527
+ message: 'Message TTL expired',
528
+ timestamp: Date.now(),
529
+ retryable: false,
530
+ };
531
+ // Update stats
532
+ this.stats.size--;
533
+ this.stats.memory -= entry.data.length;
534
+ this.stats.totalDropped++;
535
+ this.stats.byPriority[entry.priority]--;
536
+ this.emit({
537
+ type: RouterEventType.MESSAGE_EXPIRED,
538
+ messageId: entry.envelope.header.messageId,
539
+ timestamp: Date.now(),
540
+ });
541
+ // Move to dead letter queue
542
+ if (this.config.enableDeadLetter) {
543
+ this.addToDeadLetter(entry, 'Message TTL expired');
544
+ }
545
+ entry.reject(new types_1.ProtocolError('Message expired', types_1.ProtocolErrorCode.TTL_EXPIRED));
546
+ }
547
+ /**
548
+ * Update average wait time stat
549
+ */
550
+ updateAverageWaitTime(entry) {
551
+ const waitTime = Date.now() - entry.queuedAt;
552
+ const totalDequeued = this.stats.totalDequeued;
553
+ // Incremental average calculation
554
+ this.stats.averageWaitTime =
555
+ this.stats.averageWaitTime + (waitTime - this.stats.averageWaitTime) / totalDequeued;
556
+ }
557
+ // ============================================
558
+ // Acknowledgment Handling
559
+ // ============================================
560
+ /**
561
+ * Process acknowledgment for a message
562
+ */
563
+ processAck(messageId) {
564
+ const entry = this.pendingAcks.get(messageId);
565
+ if (!entry)
566
+ return;
567
+ this.pendingAcks.delete(messageId);
568
+ entry.deliveryInfo.status = types_1.DeliveryStatus.DELIVERED;
569
+ entry.deliveryInfo.deliveredAt = Date.now();
570
+ this.emit({
571
+ type: RouterEventType.MESSAGE_DELIVERED,
572
+ messageId,
573
+ timestamp: Date.now(),
574
+ details: { acknowledged: true },
575
+ });
576
+ entry.resolve(true);
577
+ }
578
+ /**
579
+ * Process negative acknowledgment for a message
580
+ */
581
+ processNack(messageId, reason, retryable) {
582
+ const entry = this.pendingAcks.get(messageId);
583
+ if (!entry)
584
+ return;
585
+ this.pendingAcks.delete(messageId);
586
+ if (retryable && this.config.enableRetry) {
587
+ if (entry.deliveryInfo.attempts < types_1.MAX_RETRY_ATTEMPTS) {
588
+ const retryDelay = this.config.retryDelayCalculator(entry.deliveryInfo.attempts);
589
+ this.scheduleRetry(entry, retryDelay);
590
+ return;
591
+ }
592
+ }
593
+ entry.deliveryInfo.status = types_1.DeliveryStatus.FAILED;
594
+ entry.deliveryInfo.error = {
595
+ code: types_1.ProtocolErrorCode.REJECTED,
596
+ message: reason,
597
+ timestamp: Date.now(),
598
+ retryable: false,
599
+ };
600
+ this.emit({
601
+ type: RouterEventType.MESSAGE_FAILED,
602
+ messageId,
603
+ timestamp: Date.now(),
604
+ details: { reason, nack: true },
605
+ });
606
+ entry.reject(new types_1.ProtocolError(reason, types_1.ProtocolErrorCode.REJECTED));
607
+ }
608
+ // ============================================
609
+ // Dead Letter Queue
610
+ // ============================================
611
+ /**
612
+ * Add entry to dead letter queue
613
+ */
614
+ addToDeadLetter(entry, reason) {
615
+ // Enforce size limit
616
+ while (this.deadLetterQueue.length >= this.config.maxDeadLetterSize) {
617
+ this.deadLetterQueue.shift();
618
+ }
619
+ const deadLetter = {
620
+ envelope: entry.envelope,
621
+ deliveryInfo: entry.deliveryInfo,
622
+ deadLetteredAt: Date.now(),
623
+ reason,
624
+ };
625
+ this.deadLetterQueue.push(deadLetter);
626
+ this.emit({
627
+ type: RouterEventType.DEAD_LETTERED,
628
+ messageId: entry.envelope.header.messageId,
629
+ timestamp: Date.now(),
630
+ details: { reason },
631
+ });
632
+ }
633
+ /**
634
+ * Get dead letter queue
635
+ */
636
+ getDeadLetters() {
637
+ return [...this.deadLetterQueue];
638
+ }
639
+ /**
640
+ * Clear dead letter queue
641
+ */
642
+ clearDeadLetters() {
643
+ this.deadLetterQueue = [];
644
+ }
645
+ /**
646
+ * Requeue a dead letter
647
+ */
648
+ async requeueDeadLetter(messageId) {
649
+ const index = this.deadLetterQueue.findIndex((dl) => dl.envelope.header.messageId === messageId);
650
+ if (index === -1) {
651
+ return false;
652
+ }
653
+ const deadLetter = this.deadLetterQueue.splice(index, 1)[0];
654
+ // Reset delivery info
655
+ deadLetter.deliveryInfo.status = types_1.DeliveryStatus.PENDING;
656
+ deadLetter.deliveryInfo.attempts = 0;
657
+ deadLetter.deliveryInfo.error = undefined;
658
+ deadLetter.deliveryInfo.firstAttemptAt = 0;
659
+ deadLetter.deliveryInfo.lastAttemptAt = 0;
660
+ deadLetter.deliveryInfo.nextRetryAt = undefined;
661
+ // Reset TTL
662
+ deadLetter.envelope.header.timestamp = Date.now();
663
+ // Re-encode and queue (caller must provide encoded data)
664
+ return true;
665
+ }
666
+ // ============================================
667
+ // Delivery Tracking
668
+ // ============================================
669
+ /**
670
+ * Get delivery info for a message
671
+ */
672
+ getDeliveryInfo(messageId) {
673
+ return this.deliveryTracking.get(messageId);
674
+ }
675
+ /**
676
+ * Get all pending deliveries
677
+ */
678
+ getPendingDeliveries() {
679
+ return Array.from(this.deliveryTracking.values()).filter((d) => d.status === types_1.DeliveryStatus.PENDING || d.status === types_1.DeliveryStatus.SENT);
680
+ }
681
+ /**
682
+ * Cancel pending delivery
683
+ */
684
+ cancelDelivery(messageId) {
685
+ const info = this.deliveryTracking.get(messageId);
686
+ if (!info || info.status === types_1.DeliveryStatus.DELIVERED) {
687
+ return false;
688
+ }
689
+ // Remove from queue
690
+ const queueIndex = this.queue.findIndex((e) => e.envelope.header.messageId === messageId);
691
+ if (queueIndex !== -1) {
692
+ const entry = this.queue.splice(queueIndex, 1)[0];
693
+ entry.deliveryInfo.status = types_1.DeliveryStatus.CANCELLED;
694
+ // Update stats
695
+ this.stats.size--;
696
+ this.stats.memory -= entry.data.length;
697
+ this.stats.byPriority[entry.priority]--;
698
+ entry.reject(new types_1.ProtocolError('Delivery cancelled', types_1.ProtocolErrorCode.REJECTED));
699
+ return true;
700
+ }
701
+ // Check pending acks
702
+ const pending = this.pendingAcks.get(messageId);
703
+ if (pending) {
704
+ this.pendingAcks.delete(messageId);
705
+ pending.deliveryInfo.status = types_1.DeliveryStatus.CANCELLED;
706
+ pending.reject(new types_1.ProtocolError('Delivery cancelled', types_1.ProtocolErrorCode.REJECTED));
707
+ return true;
708
+ }
709
+ return false;
710
+ }
711
+ // ============================================
712
+ // Statistics and Events
713
+ // ============================================
714
+ /**
715
+ * Get queue statistics
716
+ */
717
+ getStats() {
718
+ return { ...this.stats };
719
+ }
720
+ /**
721
+ * Get queue size
722
+ */
723
+ getQueueSize() {
724
+ return this.queue.length;
725
+ }
726
+ /**
727
+ * Add event handler
728
+ */
729
+ on(handler) {
730
+ this.eventHandlers.push(handler);
731
+ }
732
+ /**
733
+ * Remove event handler
734
+ */
735
+ off(handler) {
736
+ const index = this.eventHandlers.indexOf(handler);
737
+ if (index !== -1) {
738
+ this.eventHandlers.splice(index, 1);
739
+ }
740
+ }
741
+ /**
742
+ * Emit event to handlers
743
+ */
744
+ emit(event) {
745
+ for (const handler of this.eventHandlers) {
746
+ try {
747
+ handler(event);
748
+ }
749
+ catch {
750
+ // Ignore handler errors
751
+ }
752
+ }
753
+ }
754
+ // ============================================
755
+ // Cleanup
756
+ // ============================================
757
+ /**
758
+ * Clear all queues and state
759
+ */
760
+ clear() {
761
+ // Reject all pending deliveries
762
+ for (const entry of this.queue) {
763
+ entry.reject(new types_1.ProtocolError('Router cleared', types_1.ProtocolErrorCode.CONNECTION_CLOSED));
764
+ }
765
+ for (const entry of Array.from(this.pendingAcks.values())) {
766
+ entry.reject(new types_1.ProtocolError('Router cleared', types_1.ProtocolErrorCode.CONNECTION_CLOSED));
767
+ }
768
+ this.queue = [];
769
+ this.pendingAcks.clear();
770
+ this.deliveryTracking.clear();
771
+ // Reset stats
772
+ this.stats = {
773
+ size: 0,
774
+ memory: 0,
775
+ totalEnqueued: 0,
776
+ totalDequeued: 0,
777
+ totalDropped: 0,
778
+ averageWaitTime: 0,
779
+ byPriority: {
780
+ [types_1.MessagePriority.CRITICAL]: 0,
781
+ [types_1.MessagePriority.HIGH]: 0,
782
+ [types_1.MessagePriority.NORMAL]: 0,
783
+ [types_1.MessagePriority.LOW]: 0,
784
+ },
785
+ };
786
+ }
787
+ /**
788
+ * Destroy router and release resources
789
+ */
790
+ destroy() {
791
+ this.stopFlushTimer();
792
+ this.clear();
793
+ this.peers.clear();
794
+ this.deadLetterQueue = [];
795
+ this.eventHandlers = [];
796
+ }
797
+ }
798
+ exports.MessageRouter = MessageRouter;
799
+ // ============================================
800
+ // Factory Functions
801
+ // ============================================
802
+ /**
803
+ * Create a new message router
804
+ */
805
+ function createMessageRouter(config) {
806
+ return new MessageRouter(config);
807
+ }
808
+ //# sourceMappingURL=MessageRouter.js.map