agentic-qe 2.7.4 → 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 (519) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +67 -2
  3. package/dist/cli/commands/agent/spawn.d.ts +12 -1
  4. package/dist/cli/commands/agent/spawn.d.ts.map +1 -1
  5. package/dist/cli/commands/agent/spawn.js +95 -8
  6. package/dist/cli/commands/agent/spawn.js.map +1 -1
  7. package/dist/cli/index.js +91 -0
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  10. package/dist/edge/adapters/BrowserHNSWAdapter.d.ts +134 -0
  11. package/dist/edge/adapters/BrowserHNSWAdapter.d.ts.map +1 -0
  12. package/dist/edge/adapters/BrowserHNSWAdapter.js +484 -0
  13. package/dist/edge/adapters/BrowserHNSWAdapter.js.map +1 -0
  14. package/dist/edge/adapters/IndexedDBStorage.d.ts +114 -0
  15. package/dist/edge/adapters/IndexedDBStorage.d.ts.map +1 -0
  16. package/dist/edge/adapters/IndexedDBStorage.js +478 -0
  17. package/dist/edge/adapters/IndexedDBStorage.js.map +1 -0
  18. package/dist/edge/adapters/index.d.ts +12 -0
  19. package/dist/edge/adapters/index.d.ts.map +1 -0
  20. package/dist/edge/adapters/index.js +22 -0
  21. package/dist/edge/adapters/index.js.map +1 -0
  22. package/dist/edge/browser/BrowserAgent.d.ts +241 -0
  23. package/dist/edge/browser/BrowserAgent.d.ts.map +1 -0
  24. package/dist/edge/browser/BrowserAgent.js +743 -0
  25. package/dist/edge/browser/BrowserAgent.js.map +1 -0
  26. package/dist/edge/index.d.ts +34 -0
  27. package/dist/edge/index.d.ts.map +1 -0
  28. package/dist/edge/index.js +114 -0
  29. package/dist/edge/index.js.map +1 -0
  30. package/dist/edge/p2p/coordination/CoordinationManager.d.ts +181 -0
  31. package/dist/edge/p2p/coordination/CoordinationManager.d.ts.map +1 -0
  32. package/dist/edge/p2p/coordination/CoordinationManager.js +851 -0
  33. package/dist/edge/p2p/coordination/CoordinationManager.js.map +1 -0
  34. package/dist/edge/p2p/coordination/HealthMonitor.d.ts +143 -0
  35. package/dist/edge/p2p/coordination/HealthMonitor.d.ts.map +1 -0
  36. package/dist/edge/p2p/coordination/HealthMonitor.js +432 -0
  37. package/dist/edge/p2p/coordination/HealthMonitor.js.map +1 -0
  38. package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts +146 -0
  39. package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts.map +1 -0
  40. package/dist/edge/p2p/coordination/SyncOrchestrator.js +783 -0
  41. package/dist/edge/p2p/coordination/SyncOrchestrator.js.map +1 -0
  42. package/dist/edge/p2p/coordination/index.d.ts +70 -0
  43. package/dist/edge/p2p/coordination/index.d.ts.map +1 -0
  44. package/dist/edge/p2p/coordination/index.js +107 -0
  45. package/dist/edge/p2p/coordination/index.js.map +1 -0
  46. package/dist/edge/p2p/coordination/types.d.ts +572 -0
  47. package/dist/edge/p2p/coordination/types.d.ts.map +1 -0
  48. package/dist/edge/p2p/coordination/types.js +366 -0
  49. package/dist/edge/p2p/coordination/types.js.map +1 -0
  50. package/dist/edge/p2p/crdt/CRDTStore.d.ts +324 -0
  51. package/dist/edge/p2p/crdt/CRDTStore.d.ts.map +1 -0
  52. package/dist/edge/p2p/crdt/CRDTStore.js +839 -0
  53. package/dist/edge/p2p/crdt/CRDTStore.js.map +1 -0
  54. package/dist/edge/p2p/crdt/GCounter.d.ts +173 -0
  55. package/dist/edge/p2p/crdt/GCounter.d.ts.map +1 -0
  56. package/dist/edge/p2p/crdt/GCounter.js +394 -0
  57. package/dist/edge/p2p/crdt/GCounter.js.map +1 -0
  58. package/dist/edge/p2p/crdt/LWWRegister.d.ts +200 -0
  59. package/dist/edge/p2p/crdt/LWWRegister.d.ts.map +1 -0
  60. package/dist/edge/p2p/crdt/LWWRegister.js +456 -0
  61. package/dist/edge/p2p/crdt/LWWRegister.js.map +1 -0
  62. package/dist/edge/p2p/crdt/ORSet.d.ts +232 -0
  63. package/dist/edge/p2p/crdt/ORSet.d.ts.map +1 -0
  64. package/dist/edge/p2p/crdt/ORSet.js +723 -0
  65. package/dist/edge/p2p/crdt/ORSet.js.map +1 -0
  66. package/dist/edge/p2p/crdt/PatternCRDT.d.ts +366 -0
  67. package/dist/edge/p2p/crdt/PatternCRDT.d.ts.map +1 -0
  68. package/dist/edge/p2p/crdt/PatternCRDT.js +838 -0
  69. package/dist/edge/p2p/crdt/PatternCRDT.js.map +1 -0
  70. package/dist/edge/p2p/crdt/VectorClock.d.ts +274 -0
  71. package/dist/edge/p2p/crdt/VectorClock.d.ts.map +1 -0
  72. package/dist/edge/p2p/crdt/VectorClock.js +499 -0
  73. package/dist/edge/p2p/crdt/VectorClock.js.map +1 -0
  74. package/dist/edge/p2p/crdt/index.d.ts +87 -0
  75. package/dist/edge/p2p/crdt/index.d.ts.map +1 -0
  76. package/dist/edge/p2p/crdt/index.js +120 -0
  77. package/dist/edge/p2p/crdt/index.js.map +1 -0
  78. package/dist/edge/p2p/crdt/types.d.ts +667 -0
  79. package/dist/edge/p2p/crdt/types.d.ts.map +1 -0
  80. package/dist/edge/p2p/crdt/types.js +208 -0
  81. package/dist/edge/p2p/crdt/types.js.map +1 -0
  82. package/dist/edge/p2p/crypto/Identity.d.ts +139 -0
  83. package/dist/edge/p2p/crypto/Identity.d.ts.map +1 -0
  84. package/dist/edge/p2p/crypto/Identity.js +449 -0
  85. package/dist/edge/p2p/crypto/Identity.js.map +1 -0
  86. package/dist/edge/p2p/crypto/KeyManager.d.ts +196 -0
  87. package/dist/edge/p2p/crypto/KeyManager.d.ts.map +1 -0
  88. package/dist/edge/p2p/crypto/KeyManager.js +576 -0
  89. package/dist/edge/p2p/crypto/KeyManager.js.map +1 -0
  90. package/dist/edge/p2p/crypto/Signer.d.ts +164 -0
  91. package/dist/edge/p2p/crypto/Signer.d.ts.map +1 -0
  92. package/dist/edge/p2p/crypto/Signer.js +357 -0
  93. package/dist/edge/p2p/crypto/Signer.js.map +1 -0
  94. package/dist/edge/p2p/crypto/index.d.ts +90 -0
  95. package/dist/edge/p2p/crypto/index.d.ts.map +1 -0
  96. package/dist/edge/p2p/crypto/index.js +158 -0
  97. package/dist/edge/p2p/crypto/index.js.map +1 -0
  98. package/dist/edge/p2p/crypto/types.d.ts +217 -0
  99. package/dist/edge/p2p/crypto/types.d.ts.map +1 -0
  100. package/dist/edge/p2p/crypto/types.js +42 -0
  101. package/dist/edge/p2p/crypto/types.js.map +1 -0
  102. package/dist/edge/p2p/federated/FederatedCoordinator.d.ts +270 -0
  103. package/dist/edge/p2p/federated/FederatedCoordinator.d.ts.map +1 -0
  104. package/dist/edge/p2p/federated/FederatedCoordinator.js +824 -0
  105. package/dist/edge/p2p/federated/FederatedCoordinator.js.map +1 -0
  106. package/dist/edge/p2p/federated/FederatedRound.d.ts +295 -0
  107. package/dist/edge/p2p/federated/FederatedRound.d.ts.map +1 -0
  108. package/dist/edge/p2p/federated/FederatedRound.js +819 -0
  109. package/dist/edge/p2p/federated/FederatedRound.js.map +1 -0
  110. package/dist/edge/p2p/federated/GradientAggregator.d.ts +226 -0
  111. package/dist/edge/p2p/federated/GradientAggregator.d.ts.map +1 -0
  112. package/dist/edge/p2p/federated/GradientAggregator.js +826 -0
  113. package/dist/edge/p2p/federated/GradientAggregator.js.map +1 -0
  114. package/dist/edge/p2p/federated/ModelManager.d.ts +248 -0
  115. package/dist/edge/p2p/federated/ModelManager.d.ts.map +1 -0
  116. package/dist/edge/p2p/federated/ModelManager.js +724 -0
  117. package/dist/edge/p2p/federated/ModelManager.js.map +1 -0
  118. package/dist/edge/p2p/federated/index.d.ts +65 -0
  119. package/dist/edge/p2p/federated/index.d.ts.map +1 -0
  120. package/dist/edge/p2p/federated/index.js +110 -0
  121. package/dist/edge/p2p/federated/index.js.map +1 -0
  122. package/dist/edge/p2p/federated/types.d.ts +905 -0
  123. package/dist/edge/p2p/federated/types.d.ts.map +1 -0
  124. package/dist/edge/p2p/federated/types.js +339 -0
  125. package/dist/edge/p2p/federated/types.js.map +1 -0
  126. package/dist/edge/p2p/index.d.ts +156 -0
  127. package/dist/edge/p2p/index.d.ts.map +1 -0
  128. package/dist/edge/p2p/index.js +242 -0
  129. package/dist/edge/p2p/index.js.map +1 -0
  130. package/dist/edge/p2p/nat/ConnectivityTester.d.ts +128 -0
  131. package/dist/edge/p2p/nat/ConnectivityTester.d.ts.map +1 -0
  132. package/dist/edge/p2p/nat/ConnectivityTester.js +560 -0
  133. package/dist/edge/p2p/nat/ConnectivityTester.js.map +1 -0
  134. package/dist/edge/p2p/nat/HolePuncher.d.ts +159 -0
  135. package/dist/edge/p2p/nat/HolePuncher.d.ts.map +1 -0
  136. package/dist/edge/p2p/nat/HolePuncher.js +569 -0
  137. package/dist/edge/p2p/nat/HolePuncher.js.map +1 -0
  138. package/dist/edge/p2p/nat/NATDetector.d.ts +109 -0
  139. package/dist/edge/p2p/nat/NATDetector.d.ts.map +1 -0
  140. package/dist/edge/p2p/nat/NATDetector.js +472 -0
  141. package/dist/edge/p2p/nat/NATDetector.js.map +1 -0
  142. package/dist/edge/p2p/nat/TURNManager.d.ts +158 -0
  143. package/dist/edge/p2p/nat/TURNManager.d.ts.map +1 -0
  144. package/dist/edge/p2p/nat/TURNManager.js +547 -0
  145. package/dist/edge/p2p/nat/TURNManager.js.map +1 -0
  146. package/dist/edge/p2p/nat/index.d.ts +74 -0
  147. package/dist/edge/p2p/nat/index.d.ts.map +1 -0
  148. package/dist/edge/p2p/nat/index.js +104 -0
  149. package/dist/edge/p2p/nat/index.js.map +1 -0
  150. package/dist/edge/p2p/nat/types.d.ts +583 -0
  151. package/dist/edge/p2p/nat/types.d.ts.map +1 -0
  152. package/dist/edge/p2p/nat/types.js +267 -0
  153. package/dist/edge/p2p/nat/types.js.map +1 -0
  154. package/dist/edge/p2p/protocol/AgentChannel.d.ts +333 -0
  155. package/dist/edge/p2p/protocol/AgentChannel.d.ts.map +1 -0
  156. package/dist/edge/p2p/protocol/AgentChannel.js +914 -0
  157. package/dist/edge/p2p/protocol/AgentChannel.js.map +1 -0
  158. package/dist/edge/p2p/protocol/MessageEncoder.d.ts +147 -0
  159. package/dist/edge/p2p/protocol/MessageEncoder.d.ts.map +1 -0
  160. package/dist/edge/p2p/protocol/MessageEncoder.js +738 -0
  161. package/dist/edge/p2p/protocol/MessageEncoder.js.map +1 -0
  162. package/dist/edge/p2p/protocol/MessageRouter.d.ts +266 -0
  163. package/dist/edge/p2p/protocol/MessageRouter.d.ts.map +1 -0
  164. package/dist/edge/p2p/protocol/MessageRouter.js +808 -0
  165. package/dist/edge/p2p/protocol/MessageRouter.js.map +1 -0
  166. package/dist/edge/p2p/protocol/ProtocolHandler.d.ts +309 -0
  167. package/dist/edge/p2p/protocol/ProtocolHandler.d.ts.map +1 -0
  168. package/dist/edge/p2p/protocol/ProtocolHandler.js +930 -0
  169. package/dist/edge/p2p/protocol/ProtocolHandler.js.map +1 -0
  170. package/dist/edge/p2p/protocol/index.d.ts +114 -0
  171. package/dist/edge/p2p/protocol/index.d.ts.map +1 -0
  172. package/dist/edge/p2p/protocol/index.js +206 -0
  173. package/dist/edge/p2p/protocol/index.js.map +1 -0
  174. package/dist/edge/p2p/protocol/types.d.ts +737 -0
  175. package/dist/edge/p2p/protocol/types.d.ts.map +1 -0
  176. package/dist/edge/p2p/protocol/types.js +490 -0
  177. package/dist/edge/p2p/protocol/types.js.map +1 -0
  178. package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts +284 -0
  179. package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts.map +1 -0
  180. package/dist/edge/p2p/sharing/PatternBroadcaster.js +644 -0
  181. package/dist/edge/p2p/sharing/PatternBroadcaster.js.map +1 -0
  182. package/dist/edge/p2p/sharing/PatternIndex.d.ts +168 -0
  183. package/dist/edge/p2p/sharing/PatternIndex.d.ts.map +1 -0
  184. package/dist/edge/p2p/sharing/PatternIndex.js +781 -0
  185. package/dist/edge/p2p/sharing/PatternIndex.js.map +1 -0
  186. package/dist/edge/p2p/sharing/PatternSerializer.d.ts +163 -0
  187. package/dist/edge/p2p/sharing/PatternSerializer.d.ts.map +1 -0
  188. package/dist/edge/p2p/sharing/PatternSerializer.js +696 -0
  189. package/dist/edge/p2p/sharing/PatternSerializer.js.map +1 -0
  190. package/dist/edge/p2p/sharing/PatternSyncManager.d.ts +242 -0
  191. package/dist/edge/p2p/sharing/PatternSyncManager.d.ts.map +1 -0
  192. package/dist/edge/p2p/sharing/PatternSyncManager.js +859 -0
  193. package/dist/edge/p2p/sharing/PatternSyncManager.js.map +1 -0
  194. package/dist/edge/p2p/sharing/index.d.ts +90 -0
  195. package/dist/edge/p2p/sharing/index.d.ts.map +1 -0
  196. package/dist/edge/p2p/sharing/index.js +152 -0
  197. package/dist/edge/p2p/sharing/index.js.map +1 -0
  198. package/dist/edge/p2p/sharing/types.d.ts +796 -0
  199. package/dist/edge/p2p/sharing/types.d.ts.map +1 -0
  200. package/dist/edge/p2p/sharing/types.js +264 -0
  201. package/dist/edge/p2p/sharing/types.js.map +1 -0
  202. package/dist/edge/p2p/webrtc/ConnectionPool.d.ts +218 -0
  203. package/dist/edge/p2p/webrtc/ConnectionPool.d.ts.map +1 -0
  204. package/dist/edge/p2p/webrtc/ConnectionPool.js +562 -0
  205. package/dist/edge/p2p/webrtc/ConnectionPool.js.map +1 -0
  206. package/dist/edge/p2p/webrtc/ICEManager.d.ts +171 -0
  207. package/dist/edge/p2p/webrtc/ICEManager.d.ts.map +1 -0
  208. package/dist/edge/p2p/webrtc/ICEManager.js +490 -0
  209. package/dist/edge/p2p/webrtc/ICEManager.js.map +1 -0
  210. package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts +159 -0
  211. package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts.map +1 -0
  212. package/dist/edge/p2p/webrtc/PeerConnectionManager.js +735 -0
  213. package/dist/edge/p2p/webrtc/PeerConnectionManager.js.map +1 -0
  214. package/dist/edge/p2p/webrtc/SignalingClient.d.ts +191 -0
  215. package/dist/edge/p2p/webrtc/SignalingClient.d.ts.map +1 -0
  216. package/dist/edge/p2p/webrtc/SignalingClient.js +608 -0
  217. package/dist/edge/p2p/webrtc/SignalingClient.js.map +1 -0
  218. package/dist/edge/p2p/webrtc/index.d.ts +158 -0
  219. package/dist/edge/p2p/webrtc/index.d.ts.map +1 -0
  220. package/dist/edge/p2p/webrtc/index.js +164 -0
  221. package/dist/edge/p2p/webrtc/index.js.map +1 -0
  222. package/dist/edge/p2p/webrtc/types.d.ts +665 -0
  223. package/dist/edge/p2p/webrtc/types.d.ts.map +1 -0
  224. package/dist/edge/p2p/webrtc/types.js +245 -0
  225. package/dist/edge/p2p/webrtc/types.js.map +1 -0
  226. package/dist/edge/server/AgentSpawnAPI.d.ts +98 -0
  227. package/dist/edge/server/AgentSpawnAPI.d.ts.map +1 -0
  228. package/dist/edge/server/AgentSpawnAPI.js +264 -0
  229. package/dist/edge/server/AgentSpawnAPI.js.map +1 -0
  230. package/dist/edge/server/SignalingServer.d.ts +71 -0
  231. package/dist/edge/server/SignalingServer.d.ts.map +1 -0
  232. package/dist/edge/server/SignalingServer.js +429 -0
  233. package/dist/edge/server/SignalingServer.js.map +1 -0
  234. package/dist/edge/server/index.d.ts +64 -0
  235. package/dist/edge/server/index.d.ts.map +1 -0
  236. package/dist/edge/server/index.js +318 -0
  237. package/dist/edge/server/index.js.map +1 -0
  238. package/dist/edge/types/browser-agent.types.d.ts +455 -0
  239. package/dist/edge/types/browser-agent.types.d.ts.map +1 -0
  240. package/dist/edge/types/browser-agent.types.js +116 -0
  241. package/dist/edge/types/browser-agent.types.js.map +1 -0
  242. package/dist/edge/types/index.d.ts +11 -0
  243. package/dist/edge/types/index.d.ts.map +1 -0
  244. package/dist/edge/types/index.js +17 -0
  245. package/dist/edge/types/index.js.map +1 -0
  246. package/dist/edge/types/storage.types.d.ts +207 -0
  247. package/dist/edge/types/storage.types.d.ts.map +1 -0
  248. package/dist/edge/types/storage.types.js +47 -0
  249. package/dist/edge/types/storage.types.js.map +1 -0
  250. package/dist/edge/wasm/shims.d.ts +224 -0
  251. package/dist/edge/wasm/shims.d.ts.map +1 -0
  252. package/dist/edge/wasm/shims.js +667 -0
  253. package/dist/edge/wasm/shims.js.map +1 -0
  254. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts +33 -0
  255. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts.map +1 -0
  256. package/dist/mcp/handlers/NewDomainToolsHandler.js +305 -0
  257. package/dist/mcp/handlers/NewDomainToolsHandler.js.map +1 -0
  258. package/dist/mcp/handlers/filtered/index.d.ts +15 -19
  259. package/dist/mcp/handlers/filtered/index.d.ts.map +1 -1
  260. package/dist/mcp/handlers/filtered/index.js +16 -27
  261. package/dist/mcp/handlers/filtered/index.js.map +1 -1
  262. package/dist/mcp/handlers/integration/index.d.ts +5 -4
  263. package/dist/mcp/handlers/integration/index.d.ts.map +1 -1
  264. package/dist/mcp/handlers/integration/index.js +7 -7
  265. package/dist/mcp/handlers/integration/index.js.map +1 -1
  266. package/dist/mcp/server-instructions.d.ts +1 -1
  267. package/dist/mcp/server-instructions.js +1 -1
  268. package/dist/mcp/server.d.ts.map +1 -1
  269. package/dist/mcp/server.js +14 -0
  270. package/dist/mcp/server.js.map +1 -1
  271. package/dist/mcp/tools.d.ts +8 -0
  272. package/dist/mcp/tools.d.ts.map +1 -1
  273. package/dist/mcp/tools.js +412 -1
  274. package/dist/mcp/tools.js.map +1 -1
  275. package/dist/planning/GOAPPlanner.d.ts +1 -0
  276. package/dist/planning/GOAPPlanner.d.ts.map +1 -1
  277. package/dist/planning/GOAPPlanner.js +12 -0
  278. package/dist/planning/GOAPPlanner.js.map +1 -1
  279. package/package.json +29 -8
  280. package/dist/alerting/AlertManager.d.ts +0 -120
  281. package/dist/alerting/AlertManager.d.ts.map +0 -1
  282. package/dist/alerting/AlertManager.js +0 -345
  283. package/dist/alerting/AlertManager.js.map +0 -1
  284. package/dist/alerting/FeedbackRouter.d.ts +0 -98
  285. package/dist/alerting/FeedbackRouter.d.ts.map +0 -1
  286. package/dist/alerting/FeedbackRouter.js +0 -331
  287. package/dist/alerting/FeedbackRouter.js.map +0 -1
  288. package/dist/alerting/StrategyApplicator.d.ts +0 -120
  289. package/dist/alerting/StrategyApplicator.d.ts.map +0 -1
  290. package/dist/alerting/StrategyApplicator.js +0 -299
  291. package/dist/alerting/StrategyApplicator.js.map +0 -1
  292. package/dist/alerting/index.d.ts +0 -68
  293. package/dist/alerting/index.d.ts.map +0 -1
  294. package/dist/alerting/index.js +0 -112
  295. package/dist/alerting/index.js.map +0 -1
  296. package/dist/alerting/types.d.ts +0 -118
  297. package/dist/alerting/types.d.ts.map +0 -1
  298. package/dist/alerting/types.js +0 -11
  299. package/dist/alerting/types.js.map +0 -1
  300. package/dist/cli/commands/fleet/backup.d.ts +0 -49
  301. package/dist/cli/commands/fleet/backup.d.ts.map +0 -1
  302. package/dist/cli/commands/fleet/backup.js +0 -88
  303. package/dist/cli/commands/fleet/backup.js.map +0 -1
  304. package/dist/cli/commands/fleet/health.d.ts +0 -154
  305. package/dist/cli/commands/fleet/health.d.ts.map +0 -1
  306. package/dist/cli/commands/fleet/health.js +0 -483
  307. package/dist/cli/commands/fleet/health.js.map +0 -1
  308. package/dist/cli/commands/fleet/init.d.ts +0 -11
  309. package/dist/cli/commands/fleet/init.d.ts.map +0 -1
  310. package/dist/cli/commands/fleet/init.js +0 -91
  311. package/dist/cli/commands/fleet/init.js.map +0 -1
  312. package/dist/cli/commands/fleet/logs.d.ts +0 -21
  313. package/dist/cli/commands/fleet/logs.d.ts.map +0 -1
  314. package/dist/cli/commands/fleet/logs.js +0 -267
  315. package/dist/cli/commands/fleet/logs.js.map +0 -1
  316. package/dist/cli/commands/fleet/metrics.d.ts +0 -27
  317. package/dist/cli/commands/fleet/metrics.d.ts.map +0 -1
  318. package/dist/cli/commands/fleet/metrics.js +0 -369
  319. package/dist/cli/commands/fleet/metrics.js.map +0 -1
  320. package/dist/cli/commands/fleet/monitor.d.ts +0 -18
  321. package/dist/cli/commands/fleet/monitor.d.ts.map +0 -1
  322. package/dist/cli/commands/fleet/monitor.js +0 -237
  323. package/dist/cli/commands/fleet/monitor.js.map +0 -1
  324. package/dist/cli/commands/fleet/optimize.d.ts +0 -42
  325. package/dist/cli/commands/fleet/optimize.d.ts.map +0 -1
  326. package/dist/cli/commands/fleet/optimize.js +0 -135
  327. package/dist/cli/commands/fleet/optimize.js.map +0 -1
  328. package/dist/cli/commands/fleet/recover.d.ts +0 -22
  329. package/dist/cli/commands/fleet/recover.d.ts.map +0 -1
  330. package/dist/cli/commands/fleet/recover.js +0 -99
  331. package/dist/cli/commands/fleet/recover.js.map +0 -1
  332. package/dist/cli/commands/fleet/restart.d.ts +0 -18
  333. package/dist/cli/commands/fleet/restart.d.ts.map +0 -1
  334. package/dist/cli/commands/fleet/restart.js +0 -290
  335. package/dist/cli/commands/fleet/restart.js.map +0 -1
  336. package/dist/cli/commands/fleet/scale.d.ts +0 -9
  337. package/dist/cli/commands/fleet/scale.d.ts.map +0 -1
  338. package/dist/cli/commands/fleet/scale.js +0 -77
  339. package/dist/cli/commands/fleet/scale.js.map +0 -1
  340. package/dist/cli/commands/fleet/shutdown.d.ts +0 -19
  341. package/dist/cli/commands/fleet/shutdown.d.ts.map +0 -1
  342. package/dist/cli/commands/fleet/shutdown.js +0 -307
  343. package/dist/cli/commands/fleet/shutdown.js.map +0 -1
  344. package/dist/cli/commands/fleet/status.d.ts +0 -10
  345. package/dist/cli/commands/fleet/status.d.ts.map +0 -1
  346. package/dist/cli/commands/fleet/status.js +0 -97
  347. package/dist/cli/commands/fleet/status.js.map +0 -1
  348. package/dist/cli/commands/fleet/topology.d.ts +0 -23
  349. package/dist/cli/commands/fleet/topology.d.ts.map +0 -1
  350. package/dist/cli/commands/fleet/topology.js +0 -376
  351. package/dist/cli/commands/fleet/topology.js.map +0 -1
  352. package/dist/cli/commands/monitor/alerts.d.ts +0 -45
  353. package/dist/cli/commands/monitor/alerts.d.ts.map +0 -1
  354. package/dist/cli/commands/monitor/alerts.js +0 -168
  355. package/dist/cli/commands/monitor/alerts.js.map +0 -1
  356. package/dist/cli/commands/monitor/analyze.d.ts +0 -49
  357. package/dist/cli/commands/monitor/analyze.d.ts.map +0 -1
  358. package/dist/cli/commands/monitor/analyze.js +0 -209
  359. package/dist/cli/commands/monitor/analyze.js.map +0 -1
  360. package/dist/cli/commands/monitor/compare.d.ts +0 -38
  361. package/dist/cli/commands/monitor/compare.d.ts.map +0 -1
  362. package/dist/cli/commands/monitor/compare.js +0 -177
  363. package/dist/cli/commands/monitor/compare.js.map +0 -1
  364. package/dist/cli/commands/monitor/dashboard.d.ts +0 -34
  365. package/dist/cli/commands/monitor/dashboard.d.ts.map +0 -1
  366. package/dist/cli/commands/monitor/dashboard.js +0 -157
  367. package/dist/cli/commands/monitor/dashboard.js.map +0 -1
  368. package/dist/cli/commands/monitor/export.d.ts +0 -36
  369. package/dist/cli/commands/monitor/export.d.ts.map +0 -1
  370. package/dist/cli/commands/monitor/export.js +0 -157
  371. package/dist/cli/commands/monitor/export.js.map +0 -1
  372. package/dist/cli/commands/monitor/index.d.ts +0 -11
  373. package/dist/cli/commands/monitor/index.d.ts.map +0 -1
  374. package/dist/cli/commands/monitor/index.js +0 -14
  375. package/dist/cli/commands/monitor/index.js.map +0 -1
  376. package/dist/cli/commands/quality/baseline.d.ts +0 -27
  377. package/dist/cli/commands/quality/baseline.d.ts.map +0 -1
  378. package/dist/cli/commands/quality/baseline.js +0 -124
  379. package/dist/cli/commands/quality/baseline.js.map +0 -1
  380. package/dist/cli/commands/quality/compare.d.ts +0 -36
  381. package/dist/cli/commands/quality/compare.d.ts.map +0 -1
  382. package/dist/cli/commands/quality/compare.js +0 -136
  383. package/dist/cli/commands/quality/compare.js.map +0 -1
  384. package/dist/cli/commands/quality/decision.d.ts +0 -81
  385. package/dist/cli/commands/quality/decision.d.ts.map +0 -1
  386. package/dist/cli/commands/quality/decision.js +0 -319
  387. package/dist/cli/commands/quality/decision.js.map +0 -1
  388. package/dist/cli/commands/quality/gate.d.ts +0 -47
  389. package/dist/cli/commands/quality/gate.d.ts.map +0 -1
  390. package/dist/cli/commands/quality/gate.js +0 -205
  391. package/dist/cli/commands/quality/gate.js.map +0 -1
  392. package/dist/cli/commands/quality/index.d.ts +0 -17
  393. package/dist/cli/commands/quality/index.d.ts.map +0 -1
  394. package/dist/cli/commands/quality/index.js +0 -41
  395. package/dist/cli/commands/quality/index.js.map +0 -1
  396. package/dist/cli/commands/quality/policy.d.ts +0 -57
  397. package/dist/cli/commands/quality/policy.d.ts.map +0 -1
  398. package/dist/cli/commands/quality/policy.js +0 -359
  399. package/dist/cli/commands/quality/policy.js.map +0 -1
  400. package/dist/cli/commands/quality/risk.d.ts +0 -41
  401. package/dist/cli/commands/quality/risk.d.ts.map +0 -1
  402. package/dist/cli/commands/quality/risk.js +0 -255
  403. package/dist/cli/commands/quality/risk.js.map +0 -1
  404. package/dist/cli/commands/quality/trends.d.ts +0 -40
  405. package/dist/cli/commands/quality/trends.d.ts.map +0 -1
  406. package/dist/cli/commands/quality/trends.js +0 -122
  407. package/dist/cli/commands/quality/trends.js.map +0 -1
  408. package/dist/cli/commands/quality/validate.d.ts +0 -44
  409. package/dist/cli/commands/quality/validate.d.ts.map +0 -1
  410. package/dist/cli/commands/quality/validate.js +0 -234
  411. package/dist/cli/commands/quality/validate.js.map +0 -1
  412. package/dist/cli/commands/test/analyze-failures.d.ts +0 -39
  413. package/dist/cli/commands/test/analyze-failures.d.ts.map +0 -1
  414. package/dist/cli/commands/test/analyze-failures.js +0 -113
  415. package/dist/cli/commands/test/analyze-failures.js.map +0 -1
  416. package/dist/cli/commands/test/clean.d.ts +0 -3
  417. package/dist/cli/commands/test/clean.d.ts.map +0 -1
  418. package/dist/cli/commands/test/clean.js +0 -148
  419. package/dist/cli/commands/test/clean.js.map +0 -1
  420. package/dist/cli/commands/test/debug.d.ts +0 -3
  421. package/dist/cli/commands/test/debug.d.ts.map +0 -1
  422. package/dist/cli/commands/test/debug.js +0 -167
  423. package/dist/cli/commands/test/debug.js.map +0 -1
  424. package/dist/cli/commands/test/diff.d.ts +0 -3
  425. package/dist/cli/commands/test/diff.d.ts.map +0 -1
  426. package/dist/cli/commands/test/diff.js +0 -195
  427. package/dist/cli/commands/test/diff.js.map +0 -1
  428. package/dist/cli/commands/test/flakiness.d.ts +0 -32
  429. package/dist/cli/commands/test/flakiness.d.ts.map +0 -1
  430. package/dist/cli/commands/test/flakiness.js +0 -121
  431. package/dist/cli/commands/test/flakiness.js.map +0 -1
  432. package/dist/cli/commands/test/index.d.ts +0 -17
  433. package/dist/cli/commands/test/index.d.ts.map +0 -1
  434. package/dist/cli/commands/test/index.js +0 -45
  435. package/dist/cli/commands/test/index.js.map +0 -1
  436. package/dist/cli/commands/test/mutate.d.ts +0 -29
  437. package/dist/cli/commands/test/mutate.d.ts.map +0 -1
  438. package/dist/cli/commands/test/mutate.js +0 -163
  439. package/dist/cli/commands/test/mutate.js.map +0 -1
  440. package/dist/cli/commands/test/parallel.d.ts +0 -3
  441. package/dist/cli/commands/test/parallel.d.ts.map +0 -1
  442. package/dist/cli/commands/test/parallel.js +0 -117
  443. package/dist/cli/commands/test/parallel.js.map +0 -1
  444. package/dist/cli/commands/test/profile.d.ts +0 -3
  445. package/dist/cli/commands/test/profile.d.ts.map +0 -1
  446. package/dist/cli/commands/test/profile.js +0 -156
  447. package/dist/cli/commands/test/profile.js.map +0 -1
  448. package/dist/cli/commands/test/queue.d.ts +0 -3
  449. package/dist/cli/commands/test/queue.d.ts.map +0 -1
  450. package/dist/cli/commands/test/queue.js +0 -140
  451. package/dist/cli/commands/test/queue.js.map +0 -1
  452. package/dist/cli/commands/test/retry.d.ts +0 -3
  453. package/dist/cli/commands/test/retry.d.ts.map +0 -1
  454. package/dist/cli/commands/test/retry.js +0 -105
  455. package/dist/cli/commands/test/retry.js.map +0 -1
  456. package/dist/cli/commands/test/snapshot.d.ts +0 -3
  457. package/dist/cli/commands/test/snapshot.d.ts.map +0 -1
  458. package/dist/cli/commands/test/snapshot.js +0 -176
  459. package/dist/cli/commands/test/snapshot.js.map +0 -1
  460. package/dist/cli/commands/test/trace.d.ts +0 -3
  461. package/dist/cli/commands/test/trace.d.ts.map +0 -1
  462. package/dist/cli/commands/test/trace.js +0 -137
  463. package/dist/cli/commands/test/trace.js.map +0 -1
  464. package/dist/cli/commands/test/watch.d.ts +0 -3
  465. package/dist/cli/commands/test/watch.d.ts.map +0 -1
  466. package/dist/cli/commands/test/watch.js +0 -130
  467. package/dist/cli/commands/test/watch.js.map +0 -1
  468. package/dist/cli/index-spec.d.ts +0 -3
  469. package/dist/cli/index-spec.d.ts.map +0 -1
  470. package/dist/cli/index-spec.js +0 -154
  471. package/dist/cli/index-spec.js.map +0 -1
  472. package/dist/cli/index-working.d.ts +0 -7
  473. package/dist/cli/index-working.d.ts.map +0 -1
  474. package/dist/cli/index-working.js +0 -617
  475. package/dist/cli/index-working.js.map +0 -1
  476. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +0 -83
  477. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +0 -1
  478. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +0 -130
  479. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +0 -1
  480. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +0 -58
  481. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +0 -1
  482. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +0 -84
  483. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +0 -1
  484. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +0 -54
  485. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +0 -1
  486. package/dist/mcp/handlers/filtered/security-scanner-filtered.js +0 -73
  487. package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +0 -1
  488. package/dist/mcp/handlers/integration/contract-validate.d.ts +0 -10
  489. package/dist/mcp/handlers/integration/contract-validate.d.ts.map +0 -1
  490. package/dist/mcp/handlers/integration/contract-validate.js +0 -348
  491. package/dist/mcp/handlers/integration/contract-validate.js.map +0 -1
  492. package/dist/reporting/ResultAggregator.d.ts +0 -107
  493. package/dist/reporting/ResultAggregator.d.ts.map +0 -1
  494. package/dist/reporting/ResultAggregator.js +0 -435
  495. package/dist/reporting/ResultAggregator.js.map +0 -1
  496. package/dist/reporting/index.d.ts +0 -48
  497. package/dist/reporting/index.d.ts.map +0 -1
  498. package/dist/reporting/index.js +0 -154
  499. package/dist/reporting/index.js.map +0 -1
  500. package/dist/reporting/reporters/ControlLoopReporter.d.ts +0 -128
  501. package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +0 -1
  502. package/dist/reporting/reporters/ControlLoopReporter.js +0 -417
  503. package/dist/reporting/reporters/ControlLoopReporter.js.map +0 -1
  504. package/dist/reporting/reporters/HumanReadableReporter.d.ts +0 -140
  505. package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +0 -1
  506. package/dist/reporting/reporters/HumanReadableReporter.js +0 -524
  507. package/dist/reporting/reporters/HumanReadableReporter.js.map +0 -1
  508. package/dist/reporting/reporters/JSONReporter.d.ts +0 -251
  509. package/dist/reporting/reporters/JSONReporter.d.ts.map +0 -1
  510. package/dist/reporting/reporters/JSONReporter.js +0 -325
  511. package/dist/reporting/reporters/JSONReporter.js.map +0 -1
  512. package/dist/reporting/reporters/index.d.ts +0 -14
  513. package/dist/reporting/reporters/index.d.ts.map +0 -1
  514. package/dist/reporting/reporters/index.js +0 -19
  515. package/dist/reporting/reporters/index.js.map +0 -1
  516. package/dist/reporting/types.d.ts +0 -427
  517. package/dist/reporting/types.d.ts.map +0 -1
  518. package/dist/reporting/types.js +0 -12
  519. 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