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,569 @@
1
+ "use strict";
2
+ /**
3
+ * Hole Puncher for @ruvector/edge P2P
4
+ *
5
+ * Implements UDP hole punching techniques for NAT traversal including
6
+ * simultaneous open, port prediction, and fallback escalation.
7
+ *
8
+ * @module edge/p2p/nat/HolePuncher
9
+ * @version 1.0.0
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.HolePuncher = void 0;
13
+ const types_1 = require("./types");
14
+ /**
15
+ * Hole Puncher - Implements NAT hole punching techniques
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const holePuncher = new HolePuncher({
20
+ * maxAttempts: 10,
21
+ * enablePortPrediction: true,
22
+ * enableSimultaneousOpen: true,
23
+ * });
24
+ *
25
+ * // Set up coordination channel
26
+ * holePuncher.setCoordinationChannel({
27
+ * send: (msg) => signalingChannel.send(msg),
28
+ * onMessage: (handler) => signalingChannel.on('message', handler),
29
+ * });
30
+ *
31
+ * // Attempt hole punch
32
+ * const result = await holePuncher.punch(remotePeerId, {
33
+ * localCandidates: [...],
34
+ * remoteCandidates: [...],
35
+ * });
36
+ *
37
+ * if (result.success) {
38
+ * console.log('Direct connection established!');
39
+ * }
40
+ * ```
41
+ */
42
+ class HolePuncher {
43
+ /**
44
+ * Create a new Hole Puncher
45
+ *
46
+ * @param config - Hole puncher configuration
47
+ * @param escalationConfig - Escalation configuration
48
+ */
49
+ constructor(config = {}, escalationConfig = {}) {
50
+ this.escalationState = null;
51
+ this.eventHandlers = new Map();
52
+ this.coordinationChannel = null;
53
+ this.localPeerId = '';
54
+ this.currentPunch = null;
55
+ this.config = {
56
+ ...types_1.DEFAULT_HOLE_PUNCHER_CONFIG,
57
+ ...config,
58
+ };
59
+ this.escalationConfig = {
60
+ ...types_1.DEFAULT_ESCALATION_CONFIG,
61
+ ...escalationConfig,
62
+ };
63
+ }
64
+ /**
65
+ * Set local peer ID
66
+ *
67
+ * @param peerId - Local peer identifier
68
+ */
69
+ setLocalPeerId(peerId) {
70
+ this.localPeerId = peerId;
71
+ }
72
+ /**
73
+ * Set coordination channel for peer signaling
74
+ *
75
+ * @param channel - Coordination channel interface
76
+ */
77
+ setCoordinationChannel(channel) {
78
+ this.coordinationChannel = channel;
79
+ }
80
+ /**
81
+ * Attempt hole punch to remote peer
82
+ *
83
+ * @param remotePeerId - Remote peer to punch to
84
+ * @param options - Punch options with candidates
85
+ * @returns Promise resolving to punch result
86
+ */
87
+ async punch(remotePeerId, options) {
88
+ if (!this.coordinationChannel) {
89
+ return this.createFailedResult('No coordination channel configured');
90
+ }
91
+ if (!this.localPeerId) {
92
+ return this.createFailedResult('Local peer ID not set');
93
+ }
94
+ // Initialize escalation state
95
+ this.resetEscalation();
96
+ const startTime = Date.now();
97
+ this.emitEvent(types_1.NATEventType.HolePunchStarted, {
98
+ peerId: remotePeerId,
99
+ localNatType: options.localNatType,
100
+ remoteNatType: options.remoteNatType,
101
+ });
102
+ return new Promise((resolve, reject) => {
103
+ const totalTimeout = setTimeout(() => {
104
+ if (this.currentPunch) {
105
+ const result = this.createFailedResult('Hole punch timeout');
106
+ this.currentPunch = null;
107
+ this.emitEvent(types_1.NATEventType.HolePunchFailed, result);
108
+ resolve(result);
109
+ }
110
+ }, this.config.maxAttempts * this.config.attemptTimeout);
111
+ this.currentPunch = {
112
+ peerId: remotePeerId,
113
+ attempts: [],
114
+ resolve: (result) => {
115
+ clearTimeout(totalTimeout);
116
+ if (result.success) {
117
+ this.emitEvent(types_1.NATEventType.HolePunchSucceeded, result);
118
+ }
119
+ else {
120
+ this.emitEvent(types_1.NATEventType.HolePunchFailed, result);
121
+ }
122
+ resolve(result);
123
+ },
124
+ reject: (error) => {
125
+ clearTimeout(totalTimeout);
126
+ reject(error);
127
+ },
128
+ timeout: totalTimeout,
129
+ };
130
+ // Start punch process
131
+ this.executePunchSequence(remotePeerId, options, startTime);
132
+ });
133
+ }
134
+ /**
135
+ * Cancel ongoing hole punch attempt
136
+ */
137
+ cancel() {
138
+ if (this.currentPunch) {
139
+ clearTimeout(this.currentPunch.timeout);
140
+ const result = this.createFailedResult('Hole punch cancelled');
141
+ this.currentPunch.resolve(result);
142
+ this.currentPunch = null;
143
+ }
144
+ }
145
+ /**
146
+ * Get fallback to TURN relay
147
+ *
148
+ * @param turnServers - Available TURN servers
149
+ * @returns Recommended escalation action
150
+ */
151
+ getFallbackAction(turnServers) {
152
+ if (!this.escalationState) {
153
+ return { action: 'continue', level: types_1.EscalationLevel.Direct };
154
+ }
155
+ const nextLevel = this.getNextEscalationLevel();
156
+ if (nextLevel === types_1.EscalationLevel.Exhausted) {
157
+ return { action: 'abort', level: types_1.EscalationLevel.Exhausted };
158
+ }
159
+ // Check if we should escalate to TURN
160
+ if (nextLevel >= types_1.EscalationLevel.TurnUdp &&
161
+ nextLevel <= types_1.EscalationLevel.TurnTls) {
162
+ const turnServer = this.selectTurnServer(turnServers, nextLevel);
163
+ if (turnServer) {
164
+ return { action: 'escalate', level: nextLevel, turnServer };
165
+ }
166
+ }
167
+ return { action: 'continue', level: nextLevel };
168
+ }
169
+ /**
170
+ * Escalate to next level
171
+ */
172
+ escalate() {
173
+ if (!this.escalationState)
174
+ return;
175
+ const previousLevel = this.escalationState.level;
176
+ const nextLevel = this.getNextEscalationLevel();
177
+ this.escalationState.attemptedLevels.push(previousLevel);
178
+ this.escalationState.level = nextLevel;
179
+ this.escalationState.currentAttempts = 0;
180
+ this.escalationState.lastEscalationAt = Date.now();
181
+ // Track time spent at previous level
182
+ const timeAtLevel = Date.now() - this.escalationState.startedAt;
183
+ this.escalationState.timePerLevel.set(previousLevel, timeAtLevel);
184
+ this.emitEvent(types_1.NATEventType.EscalationChanged, {
185
+ from: previousLevel,
186
+ to: nextLevel,
187
+ });
188
+ if (this.escalationConfig.onEscalation) {
189
+ this.escalationConfig.onEscalation(previousLevel, nextLevel);
190
+ }
191
+ }
192
+ /**
193
+ * Get current escalation state
194
+ */
195
+ getEscalationState() {
196
+ return this.escalationState ? { ...this.escalationState } : null;
197
+ }
198
+ /**
199
+ * Predict ports for symmetric NAT
200
+ *
201
+ * @param observedPorts - Previously observed port mappings
202
+ * @returns Port prediction result
203
+ */
204
+ predictPorts(observedPorts) {
205
+ if (observedPorts.length < 2) {
206
+ return {
207
+ predictedPorts: [],
208
+ confidence: 0,
209
+ basePort: observedPorts[0] ?? 0,
210
+ increment: 0,
211
+ method: 'random',
212
+ };
213
+ }
214
+ // Calculate increments between observed ports
215
+ const increments = [];
216
+ for (let i = 1; i < observedPorts.length; i++) {
217
+ increments.push(observedPorts[i] - observedPorts[i - 1]);
218
+ }
219
+ // Check if increments are consistent (linear pattern)
220
+ const avgIncrement = increments.reduce((a, b) => a + b, 0) / increments.length;
221
+ const variance = increments.reduce((sum, inc) => sum + Math.pow(inc - avgIncrement, 2), 0) /
222
+ increments.length;
223
+ const lastPort = observedPorts[observedPorts.length - 1];
224
+ let method = 'random';
225
+ let confidence = 0;
226
+ const predictedPorts = [];
227
+ if (variance < 10) {
228
+ // Low variance indicates linear pattern
229
+ method = 'linear';
230
+ confidence = Math.max(0.3, 0.9 - variance / 10);
231
+ // Predict next ports using linear pattern
232
+ const roundedIncrement = Math.round(avgIncrement);
233
+ for (let i = 1; i <= this.config.portPredictionRange; i++) {
234
+ const predictedPort = lastPort + roundedIncrement * i;
235
+ if (predictedPort > 0 && predictedPort < 65536) {
236
+ predictedPorts.push(predictedPort);
237
+ }
238
+ }
239
+ }
240
+ else if (variance < 100) {
241
+ // Medium variance - use hybrid approach
242
+ method = 'hybrid';
243
+ confidence = 0.3;
244
+ // Use range around expected next port
245
+ const roundedIncrement = Math.round(avgIncrement);
246
+ const basePredict = lastPort + roundedIncrement;
247
+ for (let offset = 0; offset <= this.config.portPredictionRange; offset++) {
248
+ if (basePredict + offset > 0 && basePredict + offset < 65536) {
249
+ predictedPorts.push(basePredict + offset);
250
+ }
251
+ if (offset > 0 && basePredict - offset > 0) {
252
+ predictedPorts.push(basePredict - offset);
253
+ }
254
+ }
255
+ }
256
+ else {
257
+ // High variance - random ports, low confidence
258
+ method = 'random';
259
+ confidence = 0.1;
260
+ // Generate random ports near last observed
261
+ for (let i = 0; i < this.config.portPredictionRange; i++) {
262
+ const randomOffset = Math.floor(Math.random() * 1000) - 500;
263
+ const port = lastPort + randomOffset;
264
+ if (port > 0 && port < 65536) {
265
+ predictedPorts.push(port);
266
+ }
267
+ }
268
+ }
269
+ return {
270
+ predictedPorts: predictedPorts.slice(0, this.config.portPredictionRange),
271
+ confidence,
272
+ basePort: lastPort,
273
+ increment: Math.round(avgIncrement),
274
+ method,
275
+ };
276
+ }
277
+ /**
278
+ * Register event handler
279
+ *
280
+ * @param type - Event type to handle
281
+ * @param handler - Event handler function
282
+ * @returns Unsubscribe function
283
+ */
284
+ on(type, handler) {
285
+ if (!this.eventHandlers.has(type)) {
286
+ this.eventHandlers.set(type, new Set());
287
+ }
288
+ this.eventHandlers.get(type).add(handler);
289
+ return () => this.eventHandlers.get(type)?.delete(handler);
290
+ }
291
+ /**
292
+ * Get current configuration
293
+ */
294
+ getConfig() {
295
+ return { ...this.config };
296
+ }
297
+ // ============================================
298
+ // Private Methods
299
+ // ============================================
300
+ resetEscalation() {
301
+ this.escalationState = {
302
+ level: types_1.EscalationLevel.Direct,
303
+ attemptedLevels: [],
304
+ currentAttempts: 0,
305
+ maxAttemptsPerLevel: this.escalationConfig.maxAttemptsPerLevel,
306
+ startedAt: Date.now(),
307
+ lastEscalationAt: Date.now(),
308
+ timePerLevel: new Map(),
309
+ };
310
+ }
311
+ getNextEscalationLevel() {
312
+ if (!this.escalationState)
313
+ return types_1.EscalationLevel.Exhausted;
314
+ const currentLevel = this.escalationState.level;
315
+ let nextLevel = currentLevel + 1;
316
+ // Skip configured levels
317
+ while (this.escalationConfig.skipLevels.includes(nextLevel) &&
318
+ nextLevel < types_1.EscalationLevel.Exhausted) {
319
+ nextLevel++;
320
+ }
321
+ return Math.min(nextLevel, types_1.EscalationLevel.Exhausted);
322
+ }
323
+ selectTurnServer(servers, level) {
324
+ // Filter by transport based on escalation level
325
+ const filtered = servers.filter((server) => {
326
+ const urls = Array.isArray(server.urls) ? server.urls : [server.urls];
327
+ switch (level) {
328
+ case types_1.EscalationLevel.TurnUdp:
329
+ return urls.some((url) => url.includes('turn:') && !url.includes('transport=tcp'));
330
+ case types_1.EscalationLevel.TurnTcp:
331
+ return urls.some((url) => url.includes('turn:') && url.includes('transport=tcp'));
332
+ case types_1.EscalationLevel.TurnTls:
333
+ return urls.some((url) => url.includes('turns:'));
334
+ default:
335
+ return false;
336
+ }
337
+ });
338
+ // Sort by priority and return first
339
+ filtered.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));
340
+ return filtered[0];
341
+ }
342
+ async executePunchSequence(remotePeerId, options, startTime) {
343
+ if (!this.currentPunch || !this.coordinationChannel)
344
+ return;
345
+ // Extract endpoints from candidates
346
+ const localEndpoints = this.extractEndpoints(options.localCandidates);
347
+ const remoteEndpoints = this.extractEndpoints(options.remoteCandidates);
348
+ for (let attempt = 1; attempt <= this.config.maxAttempts; attempt++) {
349
+ if (!this.currentPunch)
350
+ return;
351
+ const attemptRecord = {
352
+ attempt,
353
+ startedAt: Date.now(),
354
+ success: false,
355
+ method: 'simultaneous',
356
+ };
357
+ this.currentPunch.attempts.push(attemptRecord);
358
+ try {
359
+ // Determine punch method based on NAT types
360
+ const useSimultaneous = this.config.enableSimultaneousOpen &&
361
+ options.localNatType !== types_1.NATClassification.Symmetric &&
362
+ options.remoteNatType !== types_1.NATClassification.Symmetric;
363
+ if (useSimultaneous) {
364
+ attemptRecord.method = 'simultaneous';
365
+ const success = await this.simultaneousPunch(remotePeerId, localEndpoints[0], remoteEndpoints[0], attempt);
366
+ if (success) {
367
+ attemptRecord.success = true;
368
+ attemptRecord.endedAt = Date.now();
369
+ this.currentPunch.resolve({
370
+ success: true,
371
+ method: 'simultaneous',
372
+ attempts: attempt,
373
+ localEndpoint: localEndpoints[0],
374
+ remoteEndpoint: remoteEndpoints[0],
375
+ durationMs: Date.now() - startTime,
376
+ timestamp: Date.now(),
377
+ });
378
+ return;
379
+ }
380
+ }
381
+ else if (this.config.enablePortPrediction) {
382
+ // Use port prediction for symmetric NAT
383
+ attemptRecord.method = 'predicted';
384
+ const observedPorts = options.remoteCandidates
385
+ .filter((c) => c.port)
386
+ .map((c) => c.port);
387
+ const prediction = this.predictPorts(observedPorts);
388
+ if (prediction.predictedPorts.length > 0) {
389
+ const success = await this.predictedPunch(remotePeerId, localEndpoints[0], remoteEndpoints[0]?.address ?? '', prediction.predictedPorts, attempt);
390
+ if (success) {
391
+ attemptRecord.success = true;
392
+ attemptRecord.endedAt = Date.now();
393
+ this.currentPunch.resolve({
394
+ success: true,
395
+ method: 'predicted',
396
+ attempts: attempt,
397
+ localEndpoint: localEndpoints[0],
398
+ durationMs: Date.now() - startTime,
399
+ timestamp: Date.now(),
400
+ });
401
+ return;
402
+ }
403
+ }
404
+ }
405
+ attemptRecord.endedAt = Date.now();
406
+ attemptRecord.error = 'Punch attempt failed';
407
+ // Delay before next attempt
408
+ await this.delay(this.config.attemptDelay);
409
+ }
410
+ catch (error) {
411
+ attemptRecord.endedAt = Date.now();
412
+ attemptRecord.error = error instanceof Error ? error.message : 'Unknown error';
413
+ attemptRecord.success = false;
414
+ }
415
+ // Check for escalation
416
+ if (this.escalationState) {
417
+ this.escalationState.currentAttempts++;
418
+ if (this.escalationState.currentAttempts >=
419
+ this.escalationState.maxAttemptsPerLevel) {
420
+ if (this.escalationConfig.autoEscalate) {
421
+ this.escalate();
422
+ }
423
+ }
424
+ }
425
+ }
426
+ // All attempts failed
427
+ if (this.currentPunch) {
428
+ this.currentPunch.resolve({
429
+ success: false,
430
+ attempts: this.config.maxAttempts,
431
+ durationMs: Date.now() - startTime,
432
+ timestamp: Date.now(),
433
+ error: 'All hole punch attempts failed',
434
+ });
435
+ }
436
+ }
437
+ async simultaneousPunch(remotePeerId, localEndpoint, remoteEndpoint, attempt) {
438
+ if (!this.coordinationChannel)
439
+ return false;
440
+ return new Promise((resolve) => {
441
+ const timeout = setTimeout(() => {
442
+ unsubscribe();
443
+ resolve(false);
444
+ }, this.config.attemptTimeout);
445
+ // Send ready message
446
+ this.coordinationChannel.send({
447
+ type: 'ready',
448
+ from: this.localPeerId,
449
+ to: remotePeerId,
450
+ endpoint: localEndpoint,
451
+ attempt,
452
+ timestamp: Date.now(),
453
+ });
454
+ // Wait for peer ready and then punch
455
+ const unsubscribe = this.coordinationChannel.onMessage((msg) => {
456
+ if (msg.from === remotePeerId && msg.to === this.localPeerId) {
457
+ if (msg.type === 'ready' && msg.attempt === attempt) {
458
+ // Peer is ready, send punch
459
+ this.coordinationChannel.send({
460
+ type: 'punch',
461
+ from: this.localPeerId,
462
+ to: remotePeerId,
463
+ endpoint: localEndpoint,
464
+ attempt,
465
+ timestamp: Date.now(),
466
+ });
467
+ }
468
+ else if (msg.type === 'ack' && msg.attempt === attempt) {
469
+ // Punch acknowledged
470
+ clearTimeout(timeout);
471
+ unsubscribe();
472
+ resolve(true);
473
+ }
474
+ }
475
+ });
476
+ // Also listen for their punch and acknowledge
477
+ const punchListener = this.coordinationChannel.onMessage((msg) => {
478
+ if (msg.from === remotePeerId &&
479
+ msg.to === this.localPeerId &&
480
+ msg.type === 'punch' &&
481
+ msg.attempt === attempt) {
482
+ // Send acknowledgment
483
+ this.coordinationChannel.send({
484
+ type: 'ack',
485
+ from: this.localPeerId,
486
+ to: remotePeerId,
487
+ endpoint: localEndpoint,
488
+ attempt,
489
+ timestamp: Date.now(),
490
+ });
491
+ // If we also receive ack, connection is established
492
+ clearTimeout(timeout);
493
+ unsubscribe();
494
+ punchListener();
495
+ resolve(true);
496
+ }
497
+ });
498
+ });
499
+ }
500
+ async predictedPunch(remotePeerId, localEndpoint, remoteAddress, predictedPorts, attempt) {
501
+ if (!this.coordinationChannel)
502
+ return false;
503
+ return new Promise((resolve) => {
504
+ const timeout = setTimeout(() => {
505
+ unsubscribe();
506
+ resolve(false);
507
+ }, this.config.attemptTimeout);
508
+ // Send punch with predicted ports
509
+ this.coordinationChannel.send({
510
+ type: 'punch',
511
+ from: this.localPeerId,
512
+ to: remotePeerId,
513
+ endpoint: localEndpoint,
514
+ predictedPorts,
515
+ attempt,
516
+ timestamp: Date.now(),
517
+ });
518
+ // Wait for ack
519
+ const unsubscribe = this.coordinationChannel.onMessage((msg) => {
520
+ if (msg.from === remotePeerId &&
521
+ msg.to === this.localPeerId &&
522
+ msg.type === 'ack' &&
523
+ msg.attempt === attempt) {
524
+ clearTimeout(timeout);
525
+ unsubscribe();
526
+ resolve(true);
527
+ }
528
+ });
529
+ });
530
+ }
531
+ extractEndpoints(candidates) {
532
+ return candidates
533
+ .filter((c) => c.address && c.port)
534
+ .map((c) => ({ address: c.address, port: c.port }));
535
+ }
536
+ createFailedResult(error) {
537
+ return {
538
+ success: false,
539
+ attempts: this.currentPunch?.attempts.length ?? 0,
540
+ durationMs: 0,
541
+ timestamp: Date.now(),
542
+ error,
543
+ };
544
+ }
545
+ delay(ms) {
546
+ return new Promise((resolve) => setTimeout(resolve, ms));
547
+ }
548
+ emitEvent(type, data) {
549
+ const handlers = this.eventHandlers.get(type);
550
+ if (handlers) {
551
+ const event = {
552
+ type,
553
+ timestamp: Date.now(),
554
+ data,
555
+ };
556
+ handlers.forEach((handler) => {
557
+ try {
558
+ handler(event);
559
+ }
560
+ catch (error) {
561
+ console.error(`Hole punch event handler error for ${type}:`, error);
562
+ }
563
+ });
564
+ }
565
+ }
566
+ }
567
+ exports.HolePuncher = HolePuncher;
568
+ exports.default = HolePuncher;
569
+ //# sourceMappingURL=HolePuncher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HolePuncher.js","sourceRoot":"","sources":["../../../../src/edge/p2p/nat/HolePuncher.ts"],"names":[],"mappings":"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"}