agentic-qe 2.7.3 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (620) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/README.md +67 -2
  3. package/dist/agents/AccessibilityAllyAgent.d.ts +0 -7
  4. package/dist/agents/AccessibilityAllyAgent.d.ts.map +1 -1
  5. package/dist/agents/AccessibilityAllyAgent.js +0 -15
  6. package/dist/agents/AccessibilityAllyAgent.js.map +1 -1
  7. package/dist/agents/ApiContractValidatorAgent.js +4 -4
  8. package/dist/agents/ApiContractValidatorAgent.js.map +1 -1
  9. package/dist/agents/BaseAgent.d.ts +2 -0
  10. package/dist/agents/BaseAgent.d.ts.map +1 -1
  11. package/dist/agents/BaseAgent.js +43 -41
  12. package/dist/agents/BaseAgent.js.map +1 -1
  13. package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +0 -8
  14. package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -1
  15. package/dist/agents/CodeComplexityAnalyzerAgent.js +0 -15
  16. package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -1
  17. package/dist/agents/CodeIntelligenceAgent.d.ts +0 -1
  18. package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
  19. package/dist/agents/CodeIntelligenceAgent.js +0 -2
  20. package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
  21. package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
  22. package/dist/agents/DeploymentReadinessAgent.js +30 -30
  23. package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
  24. package/dist/agents/FlakyTestHunterAgent.d.ts +0 -10
  25. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  26. package/dist/agents/FlakyTestHunterAgent.js +10 -20
  27. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  28. package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
  29. package/dist/agents/FleetCommanderAgent.js +28 -28
  30. package/dist/agents/FleetCommanderAgent.js.map +1 -1
  31. package/dist/agents/LearningAgent.js +1 -1
  32. package/dist/agents/LearningAgent.js.map +1 -1
  33. package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
  34. package/dist/agents/PerformanceTesterAgent.js +25 -25
  35. package/dist/agents/PerformanceTesterAgent.js.map +1 -1
  36. package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
  37. package/dist/agents/ProductionIntelligenceAgent.js +20 -20
  38. package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
  39. package/dist/agents/QXPartnerAgent.d.ts +0 -8
  40. package/dist/agents/QXPartnerAgent.d.ts.map +1 -1
  41. package/dist/agents/QXPartnerAgent.js +0 -15
  42. package/dist/agents/QXPartnerAgent.js.map +1 -1
  43. package/dist/agents/QualityAnalyzerAgent.d.ts +0 -7
  44. package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
  45. package/dist/agents/QualityAnalyzerAgent.js +0 -16
  46. package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
  47. package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
  48. package/dist/agents/RegressionRiskAnalyzerAgent.js +18 -18
  49. package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
  50. package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
  51. package/dist/agents/RequirementsValidatorAgent.js +21 -21
  52. package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
  53. package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
  54. package/dist/agents/SecurityScannerAgent.js +38 -38
  55. package/dist/agents/SecurityScannerAgent.js.map +1 -1
  56. package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
  57. package/dist/agents/TestDataArchitectAgent.js +29 -29
  58. package/dist/agents/TestDataArchitectAgent.js.map +1 -1
  59. package/dist/agents/TestExecutorAgent.d.ts +0 -7
  60. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  61. package/dist/agents/TestExecutorAgent.js +35 -51
  62. package/dist/agents/TestExecutorAgent.js.map +1 -1
  63. package/dist/agents/TestGeneratorAgent.d.ts +0 -7
  64. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  65. package/dist/agents/TestGeneratorAgent.js +0 -16
  66. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  67. package/dist/agents/adapters/AgentLLMAdapter.d.ts.map +1 -1
  68. package/dist/agents/adapters/AgentLLMAdapter.js +5 -4
  69. package/dist/agents/adapters/AgentLLMAdapter.js.map +1 -1
  70. package/dist/agents/adapters/CoordinatorAdapter.d.ts.map +1 -1
  71. package/dist/agents/adapters/CoordinatorAdapter.js +2 -1
  72. package/dist/agents/adapters/CoordinatorAdapter.js.map +1 -1
  73. package/dist/agents/n8n/N8nAPIClient.d.ts.map +1 -1
  74. package/dist/agents/n8n/N8nAPIClient.js +3 -2
  75. package/dist/agents/n8n/N8nAPIClient.js.map +1 -1
  76. package/dist/agents/n8n/N8nAuditPersistence.d.ts.map +1 -1
  77. package/dist/agents/n8n/N8nAuditPersistence.js +2 -1
  78. package/dist/agents/n8n/N8nAuditPersistence.js.map +1 -1
  79. package/dist/agents/n8n/N8nBaseAgent.js +1 -1
  80. package/dist/agents/n8n/N8nBaseAgent.js.map +1 -1
  81. package/dist/agents/n8n/N8nComplianceValidatorAgent.js +1 -1
  82. package/dist/agents/n8n/N8nComplianceValidatorAgent.js.map +1 -1
  83. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js +1 -1
  84. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js.map +1 -1
  85. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js +1 -1
  86. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js.map +1 -1
  87. package/dist/agents/n8n/N8nSecurityAuditorAgent.js +1 -1
  88. package/dist/agents/n8n/N8nSecurityAuditorAgent.js.map +1 -1
  89. package/dist/agents/pool/AgentPool.d.ts.map +1 -1
  90. package/dist/agents/pool/AgentPool.js +2 -1
  91. package/dist/agents/pool/AgentPool.js.map +1 -1
  92. package/dist/agents/pool/QEAgentPoolFactory.d.ts.map +1 -1
  93. package/dist/agents/pool/QEAgentPoolFactory.js +2 -1
  94. package/dist/agents/pool/QEAgentPoolFactory.js.map +1 -1
  95. package/dist/cli/commands/agent/spawn.d.ts +12 -1
  96. package/dist/cli/commands/agent/spawn.d.ts.map +1 -1
  97. package/dist/cli/commands/agent/spawn.js +95 -8
  98. package/dist/cli/commands/agent/spawn.js.map +1 -1
  99. package/dist/cli/index.js +91 -0
  100. package/dist/cli/index.js.map +1 -1
  101. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  102. package/dist/edge/adapters/BrowserHNSWAdapter.d.ts +134 -0
  103. package/dist/edge/adapters/BrowserHNSWAdapter.d.ts.map +1 -0
  104. package/dist/edge/adapters/BrowserHNSWAdapter.js +484 -0
  105. package/dist/edge/adapters/BrowserHNSWAdapter.js.map +1 -0
  106. package/dist/edge/adapters/IndexedDBStorage.d.ts +114 -0
  107. package/dist/edge/adapters/IndexedDBStorage.d.ts.map +1 -0
  108. package/dist/edge/adapters/IndexedDBStorage.js +478 -0
  109. package/dist/edge/adapters/IndexedDBStorage.js.map +1 -0
  110. package/dist/edge/adapters/index.d.ts +12 -0
  111. package/dist/edge/adapters/index.d.ts.map +1 -0
  112. package/dist/edge/adapters/index.js +22 -0
  113. package/dist/edge/adapters/index.js.map +1 -0
  114. package/dist/edge/browser/BrowserAgent.d.ts +241 -0
  115. package/dist/edge/browser/BrowserAgent.d.ts.map +1 -0
  116. package/dist/edge/browser/BrowserAgent.js +743 -0
  117. package/dist/edge/browser/BrowserAgent.js.map +1 -0
  118. package/dist/edge/index.d.ts +34 -0
  119. package/dist/edge/index.d.ts.map +1 -0
  120. package/dist/edge/index.js +114 -0
  121. package/dist/edge/index.js.map +1 -0
  122. package/dist/edge/p2p/coordination/CoordinationManager.d.ts +181 -0
  123. package/dist/edge/p2p/coordination/CoordinationManager.d.ts.map +1 -0
  124. package/dist/edge/p2p/coordination/CoordinationManager.js +851 -0
  125. package/dist/edge/p2p/coordination/CoordinationManager.js.map +1 -0
  126. package/dist/edge/p2p/coordination/HealthMonitor.d.ts +143 -0
  127. package/dist/edge/p2p/coordination/HealthMonitor.d.ts.map +1 -0
  128. package/dist/edge/p2p/coordination/HealthMonitor.js +432 -0
  129. package/dist/edge/p2p/coordination/HealthMonitor.js.map +1 -0
  130. package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts +146 -0
  131. package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts.map +1 -0
  132. package/dist/edge/p2p/coordination/SyncOrchestrator.js +783 -0
  133. package/dist/edge/p2p/coordination/SyncOrchestrator.js.map +1 -0
  134. package/dist/edge/p2p/coordination/index.d.ts +70 -0
  135. package/dist/edge/p2p/coordination/index.d.ts.map +1 -0
  136. package/dist/edge/p2p/coordination/index.js +107 -0
  137. package/dist/edge/p2p/coordination/index.js.map +1 -0
  138. package/dist/edge/p2p/coordination/types.d.ts +572 -0
  139. package/dist/edge/p2p/coordination/types.d.ts.map +1 -0
  140. package/dist/edge/p2p/coordination/types.js +366 -0
  141. package/dist/edge/p2p/coordination/types.js.map +1 -0
  142. package/dist/edge/p2p/crdt/CRDTStore.d.ts +324 -0
  143. package/dist/edge/p2p/crdt/CRDTStore.d.ts.map +1 -0
  144. package/dist/edge/p2p/crdt/CRDTStore.js +839 -0
  145. package/dist/edge/p2p/crdt/CRDTStore.js.map +1 -0
  146. package/dist/edge/p2p/crdt/GCounter.d.ts +173 -0
  147. package/dist/edge/p2p/crdt/GCounter.d.ts.map +1 -0
  148. package/dist/edge/p2p/crdt/GCounter.js +394 -0
  149. package/dist/edge/p2p/crdt/GCounter.js.map +1 -0
  150. package/dist/edge/p2p/crdt/LWWRegister.d.ts +200 -0
  151. package/dist/edge/p2p/crdt/LWWRegister.d.ts.map +1 -0
  152. package/dist/edge/p2p/crdt/LWWRegister.js +456 -0
  153. package/dist/edge/p2p/crdt/LWWRegister.js.map +1 -0
  154. package/dist/edge/p2p/crdt/ORSet.d.ts +232 -0
  155. package/dist/edge/p2p/crdt/ORSet.d.ts.map +1 -0
  156. package/dist/edge/p2p/crdt/ORSet.js +723 -0
  157. package/dist/edge/p2p/crdt/ORSet.js.map +1 -0
  158. package/dist/edge/p2p/crdt/PatternCRDT.d.ts +366 -0
  159. package/dist/edge/p2p/crdt/PatternCRDT.d.ts.map +1 -0
  160. package/dist/edge/p2p/crdt/PatternCRDT.js +838 -0
  161. package/dist/edge/p2p/crdt/PatternCRDT.js.map +1 -0
  162. package/dist/edge/p2p/crdt/VectorClock.d.ts +274 -0
  163. package/dist/edge/p2p/crdt/VectorClock.d.ts.map +1 -0
  164. package/dist/edge/p2p/crdt/VectorClock.js +499 -0
  165. package/dist/edge/p2p/crdt/VectorClock.js.map +1 -0
  166. package/dist/edge/p2p/crdt/index.d.ts +87 -0
  167. package/dist/edge/p2p/crdt/index.d.ts.map +1 -0
  168. package/dist/edge/p2p/crdt/index.js +120 -0
  169. package/dist/edge/p2p/crdt/index.js.map +1 -0
  170. package/dist/edge/p2p/crdt/types.d.ts +667 -0
  171. package/dist/edge/p2p/crdt/types.d.ts.map +1 -0
  172. package/dist/edge/p2p/crdt/types.js +208 -0
  173. package/dist/edge/p2p/crdt/types.js.map +1 -0
  174. package/dist/edge/p2p/crypto/Identity.d.ts +139 -0
  175. package/dist/edge/p2p/crypto/Identity.d.ts.map +1 -0
  176. package/dist/edge/p2p/crypto/Identity.js +449 -0
  177. package/dist/edge/p2p/crypto/Identity.js.map +1 -0
  178. package/dist/edge/p2p/crypto/KeyManager.d.ts +196 -0
  179. package/dist/edge/p2p/crypto/KeyManager.d.ts.map +1 -0
  180. package/dist/edge/p2p/crypto/KeyManager.js +576 -0
  181. package/dist/edge/p2p/crypto/KeyManager.js.map +1 -0
  182. package/dist/edge/p2p/crypto/Signer.d.ts +164 -0
  183. package/dist/edge/p2p/crypto/Signer.d.ts.map +1 -0
  184. package/dist/edge/p2p/crypto/Signer.js +357 -0
  185. package/dist/edge/p2p/crypto/Signer.js.map +1 -0
  186. package/dist/edge/p2p/crypto/index.d.ts +90 -0
  187. package/dist/edge/p2p/crypto/index.d.ts.map +1 -0
  188. package/dist/edge/p2p/crypto/index.js +158 -0
  189. package/dist/edge/p2p/crypto/index.js.map +1 -0
  190. package/dist/edge/p2p/crypto/types.d.ts +217 -0
  191. package/dist/edge/p2p/crypto/types.d.ts.map +1 -0
  192. package/dist/edge/p2p/crypto/types.js +42 -0
  193. package/dist/edge/p2p/crypto/types.js.map +1 -0
  194. package/dist/edge/p2p/federated/FederatedCoordinator.d.ts +270 -0
  195. package/dist/edge/p2p/federated/FederatedCoordinator.d.ts.map +1 -0
  196. package/dist/edge/p2p/federated/FederatedCoordinator.js +824 -0
  197. package/dist/edge/p2p/federated/FederatedCoordinator.js.map +1 -0
  198. package/dist/edge/p2p/federated/FederatedRound.d.ts +295 -0
  199. package/dist/edge/p2p/federated/FederatedRound.d.ts.map +1 -0
  200. package/dist/edge/p2p/federated/FederatedRound.js +819 -0
  201. package/dist/edge/p2p/federated/FederatedRound.js.map +1 -0
  202. package/dist/edge/p2p/federated/GradientAggregator.d.ts +226 -0
  203. package/dist/edge/p2p/federated/GradientAggregator.d.ts.map +1 -0
  204. package/dist/edge/p2p/federated/GradientAggregator.js +826 -0
  205. package/dist/edge/p2p/federated/GradientAggregator.js.map +1 -0
  206. package/dist/edge/p2p/federated/ModelManager.d.ts +248 -0
  207. package/dist/edge/p2p/federated/ModelManager.d.ts.map +1 -0
  208. package/dist/edge/p2p/federated/ModelManager.js +724 -0
  209. package/dist/edge/p2p/federated/ModelManager.js.map +1 -0
  210. package/dist/edge/p2p/federated/index.d.ts +65 -0
  211. package/dist/edge/p2p/federated/index.d.ts.map +1 -0
  212. package/dist/edge/p2p/federated/index.js +110 -0
  213. package/dist/edge/p2p/federated/index.js.map +1 -0
  214. package/dist/edge/p2p/federated/types.d.ts +905 -0
  215. package/dist/edge/p2p/federated/types.d.ts.map +1 -0
  216. package/dist/edge/p2p/federated/types.js +339 -0
  217. package/dist/edge/p2p/federated/types.js.map +1 -0
  218. package/dist/edge/p2p/index.d.ts +156 -0
  219. package/dist/edge/p2p/index.d.ts.map +1 -0
  220. package/dist/edge/p2p/index.js +242 -0
  221. package/dist/edge/p2p/index.js.map +1 -0
  222. package/dist/edge/p2p/nat/ConnectivityTester.d.ts +128 -0
  223. package/dist/edge/p2p/nat/ConnectivityTester.d.ts.map +1 -0
  224. package/dist/edge/p2p/nat/ConnectivityTester.js +560 -0
  225. package/dist/edge/p2p/nat/ConnectivityTester.js.map +1 -0
  226. package/dist/edge/p2p/nat/HolePuncher.d.ts +159 -0
  227. package/dist/edge/p2p/nat/HolePuncher.d.ts.map +1 -0
  228. package/dist/edge/p2p/nat/HolePuncher.js +569 -0
  229. package/dist/edge/p2p/nat/HolePuncher.js.map +1 -0
  230. package/dist/edge/p2p/nat/NATDetector.d.ts +109 -0
  231. package/dist/edge/p2p/nat/NATDetector.d.ts.map +1 -0
  232. package/dist/edge/p2p/nat/NATDetector.js +472 -0
  233. package/dist/edge/p2p/nat/NATDetector.js.map +1 -0
  234. package/dist/edge/p2p/nat/TURNManager.d.ts +158 -0
  235. package/dist/edge/p2p/nat/TURNManager.d.ts.map +1 -0
  236. package/dist/edge/p2p/nat/TURNManager.js +547 -0
  237. package/dist/edge/p2p/nat/TURNManager.js.map +1 -0
  238. package/dist/edge/p2p/nat/index.d.ts +74 -0
  239. package/dist/edge/p2p/nat/index.d.ts.map +1 -0
  240. package/dist/edge/p2p/nat/index.js +104 -0
  241. package/dist/edge/p2p/nat/index.js.map +1 -0
  242. package/dist/edge/p2p/nat/types.d.ts +583 -0
  243. package/dist/edge/p2p/nat/types.d.ts.map +1 -0
  244. package/dist/edge/p2p/nat/types.js +267 -0
  245. package/dist/edge/p2p/nat/types.js.map +1 -0
  246. package/dist/edge/p2p/protocol/AgentChannel.d.ts +333 -0
  247. package/dist/edge/p2p/protocol/AgentChannel.d.ts.map +1 -0
  248. package/dist/edge/p2p/protocol/AgentChannel.js +914 -0
  249. package/dist/edge/p2p/protocol/AgentChannel.js.map +1 -0
  250. package/dist/edge/p2p/protocol/MessageEncoder.d.ts +147 -0
  251. package/dist/edge/p2p/protocol/MessageEncoder.d.ts.map +1 -0
  252. package/dist/edge/p2p/protocol/MessageEncoder.js +738 -0
  253. package/dist/edge/p2p/protocol/MessageEncoder.js.map +1 -0
  254. package/dist/edge/p2p/protocol/MessageRouter.d.ts +266 -0
  255. package/dist/edge/p2p/protocol/MessageRouter.d.ts.map +1 -0
  256. package/dist/edge/p2p/protocol/MessageRouter.js +808 -0
  257. package/dist/edge/p2p/protocol/MessageRouter.js.map +1 -0
  258. package/dist/edge/p2p/protocol/ProtocolHandler.d.ts +309 -0
  259. package/dist/edge/p2p/protocol/ProtocolHandler.d.ts.map +1 -0
  260. package/dist/edge/p2p/protocol/ProtocolHandler.js +930 -0
  261. package/dist/edge/p2p/protocol/ProtocolHandler.js.map +1 -0
  262. package/dist/edge/p2p/protocol/index.d.ts +114 -0
  263. package/dist/edge/p2p/protocol/index.d.ts.map +1 -0
  264. package/dist/edge/p2p/protocol/index.js +206 -0
  265. package/dist/edge/p2p/protocol/index.js.map +1 -0
  266. package/dist/edge/p2p/protocol/types.d.ts +737 -0
  267. package/dist/edge/p2p/protocol/types.d.ts.map +1 -0
  268. package/dist/edge/p2p/protocol/types.js +490 -0
  269. package/dist/edge/p2p/protocol/types.js.map +1 -0
  270. package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts +284 -0
  271. package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts.map +1 -0
  272. package/dist/edge/p2p/sharing/PatternBroadcaster.js +644 -0
  273. package/dist/edge/p2p/sharing/PatternBroadcaster.js.map +1 -0
  274. package/dist/edge/p2p/sharing/PatternIndex.d.ts +168 -0
  275. package/dist/edge/p2p/sharing/PatternIndex.d.ts.map +1 -0
  276. package/dist/edge/p2p/sharing/PatternIndex.js +781 -0
  277. package/dist/edge/p2p/sharing/PatternIndex.js.map +1 -0
  278. package/dist/edge/p2p/sharing/PatternSerializer.d.ts +163 -0
  279. package/dist/edge/p2p/sharing/PatternSerializer.d.ts.map +1 -0
  280. package/dist/edge/p2p/sharing/PatternSerializer.js +696 -0
  281. package/dist/edge/p2p/sharing/PatternSerializer.js.map +1 -0
  282. package/dist/edge/p2p/sharing/PatternSyncManager.d.ts +242 -0
  283. package/dist/edge/p2p/sharing/PatternSyncManager.d.ts.map +1 -0
  284. package/dist/edge/p2p/sharing/PatternSyncManager.js +859 -0
  285. package/dist/edge/p2p/sharing/PatternSyncManager.js.map +1 -0
  286. package/dist/edge/p2p/sharing/index.d.ts +90 -0
  287. package/dist/edge/p2p/sharing/index.d.ts.map +1 -0
  288. package/dist/edge/p2p/sharing/index.js +152 -0
  289. package/dist/edge/p2p/sharing/index.js.map +1 -0
  290. package/dist/edge/p2p/sharing/types.d.ts +796 -0
  291. package/dist/edge/p2p/sharing/types.d.ts.map +1 -0
  292. package/dist/edge/p2p/sharing/types.js +264 -0
  293. package/dist/edge/p2p/sharing/types.js.map +1 -0
  294. package/dist/edge/p2p/webrtc/ConnectionPool.d.ts +218 -0
  295. package/dist/edge/p2p/webrtc/ConnectionPool.d.ts.map +1 -0
  296. package/dist/edge/p2p/webrtc/ConnectionPool.js +562 -0
  297. package/dist/edge/p2p/webrtc/ConnectionPool.js.map +1 -0
  298. package/dist/edge/p2p/webrtc/ICEManager.d.ts +171 -0
  299. package/dist/edge/p2p/webrtc/ICEManager.d.ts.map +1 -0
  300. package/dist/edge/p2p/webrtc/ICEManager.js +490 -0
  301. package/dist/edge/p2p/webrtc/ICEManager.js.map +1 -0
  302. package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts +159 -0
  303. package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts.map +1 -0
  304. package/dist/edge/p2p/webrtc/PeerConnectionManager.js +735 -0
  305. package/dist/edge/p2p/webrtc/PeerConnectionManager.js.map +1 -0
  306. package/dist/edge/p2p/webrtc/SignalingClient.d.ts +191 -0
  307. package/dist/edge/p2p/webrtc/SignalingClient.d.ts.map +1 -0
  308. package/dist/edge/p2p/webrtc/SignalingClient.js +608 -0
  309. package/dist/edge/p2p/webrtc/SignalingClient.js.map +1 -0
  310. package/dist/edge/p2p/webrtc/index.d.ts +158 -0
  311. package/dist/edge/p2p/webrtc/index.d.ts.map +1 -0
  312. package/dist/edge/p2p/webrtc/index.js +164 -0
  313. package/dist/edge/p2p/webrtc/index.js.map +1 -0
  314. package/dist/edge/p2p/webrtc/types.d.ts +665 -0
  315. package/dist/edge/p2p/webrtc/types.d.ts.map +1 -0
  316. package/dist/edge/p2p/webrtc/types.js +245 -0
  317. package/dist/edge/p2p/webrtc/types.js.map +1 -0
  318. package/dist/edge/server/AgentSpawnAPI.d.ts +98 -0
  319. package/dist/edge/server/AgentSpawnAPI.d.ts.map +1 -0
  320. package/dist/edge/server/AgentSpawnAPI.js +264 -0
  321. package/dist/edge/server/AgentSpawnAPI.js.map +1 -0
  322. package/dist/edge/server/SignalingServer.d.ts +71 -0
  323. package/dist/edge/server/SignalingServer.d.ts.map +1 -0
  324. package/dist/edge/server/SignalingServer.js +429 -0
  325. package/dist/edge/server/SignalingServer.js.map +1 -0
  326. package/dist/edge/server/index.d.ts +64 -0
  327. package/dist/edge/server/index.d.ts.map +1 -0
  328. package/dist/edge/server/index.js +318 -0
  329. package/dist/edge/server/index.js.map +1 -0
  330. package/dist/edge/types/browser-agent.types.d.ts +455 -0
  331. package/dist/edge/types/browser-agent.types.d.ts.map +1 -0
  332. package/dist/edge/types/browser-agent.types.js +116 -0
  333. package/dist/edge/types/browser-agent.types.js.map +1 -0
  334. package/dist/edge/types/index.d.ts +11 -0
  335. package/dist/edge/types/index.d.ts.map +1 -0
  336. package/dist/edge/types/index.js +17 -0
  337. package/dist/edge/types/index.js.map +1 -0
  338. package/dist/edge/types/storage.types.d.ts +207 -0
  339. package/dist/edge/types/storage.types.d.ts.map +1 -0
  340. package/dist/edge/types/storage.types.js +47 -0
  341. package/dist/edge/types/storage.types.js.map +1 -0
  342. package/dist/edge/wasm/shims.d.ts +224 -0
  343. package/dist/edge/wasm/shims.d.ts.map +1 -0
  344. package/dist/edge/wasm/shims.js +667 -0
  345. package/dist/edge/wasm/shims.js.map +1 -0
  346. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts +33 -0
  347. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts.map +1 -0
  348. package/dist/mcp/handlers/NewDomainToolsHandler.js +305 -0
  349. package/dist/mcp/handlers/NewDomainToolsHandler.js.map +1 -0
  350. package/dist/mcp/handlers/filtered/index.d.ts +15 -19
  351. package/dist/mcp/handlers/filtered/index.d.ts.map +1 -1
  352. package/dist/mcp/handlers/filtered/index.js +16 -27
  353. package/dist/mcp/handlers/filtered/index.js.map +1 -1
  354. package/dist/mcp/handlers/integration/index.d.ts +5 -4
  355. package/dist/mcp/handlers/integration/index.d.ts.map +1 -1
  356. package/dist/mcp/handlers/integration/index.js +7 -7
  357. package/dist/mcp/handlers/integration/index.js.map +1 -1
  358. package/dist/mcp/server-instructions.d.ts +1 -1
  359. package/dist/mcp/server-instructions.js +1 -1
  360. package/dist/mcp/server.d.ts.map +1 -1
  361. package/dist/mcp/server.js +14 -0
  362. package/dist/mcp/server.js.map +1 -1
  363. package/dist/mcp/tools.d.ts +8 -0
  364. package/dist/mcp/tools.d.ts.map +1 -1
  365. package/dist/mcp/tools.js +412 -1
  366. package/dist/mcp/tools.js.map +1 -1
  367. package/dist/persistence/migrations/all-migrations.d.ts.map +1 -1
  368. package/dist/persistence/migrations/all-migrations.js +44 -1
  369. package/dist/persistence/migrations/all-migrations.js.map +1 -1
  370. package/dist/planning/GOAPPlanner.d.ts +1 -0
  371. package/dist/planning/GOAPPlanner.d.ts.map +1 -1
  372. package/dist/planning/GOAPPlanner.js +15 -2
  373. package/dist/planning/GOAPPlanner.js.map +1 -1
  374. package/dist/planning/PlanLearning.d.ts.map +1 -1
  375. package/dist/planning/PlanLearning.js +2 -1
  376. package/dist/planning/PlanLearning.js.map +1 -1
  377. package/dist/planning/PlanSimilarity.d.ts.map +1 -1
  378. package/dist/planning/PlanSimilarity.js +2 -1
  379. package/dist/planning/PlanSimilarity.js.map +1 -1
  380. package/package.json +29 -8
  381. package/dist/alerting/AlertManager.d.ts +0 -120
  382. package/dist/alerting/AlertManager.d.ts.map +0 -1
  383. package/dist/alerting/AlertManager.js +0 -345
  384. package/dist/alerting/AlertManager.js.map +0 -1
  385. package/dist/alerting/FeedbackRouter.d.ts +0 -98
  386. package/dist/alerting/FeedbackRouter.d.ts.map +0 -1
  387. package/dist/alerting/FeedbackRouter.js +0 -331
  388. package/dist/alerting/FeedbackRouter.js.map +0 -1
  389. package/dist/alerting/StrategyApplicator.d.ts +0 -120
  390. package/dist/alerting/StrategyApplicator.d.ts.map +0 -1
  391. package/dist/alerting/StrategyApplicator.js +0 -299
  392. package/dist/alerting/StrategyApplicator.js.map +0 -1
  393. package/dist/alerting/index.d.ts +0 -68
  394. package/dist/alerting/index.d.ts.map +0 -1
  395. package/dist/alerting/index.js +0 -112
  396. package/dist/alerting/index.js.map +0 -1
  397. package/dist/alerting/types.d.ts +0 -118
  398. package/dist/alerting/types.d.ts.map +0 -1
  399. package/dist/alerting/types.js +0 -11
  400. package/dist/alerting/types.js.map +0 -1
  401. package/dist/cli/commands/fleet/backup.d.ts +0 -49
  402. package/dist/cli/commands/fleet/backup.d.ts.map +0 -1
  403. package/dist/cli/commands/fleet/backup.js +0 -88
  404. package/dist/cli/commands/fleet/backup.js.map +0 -1
  405. package/dist/cli/commands/fleet/health.d.ts +0 -154
  406. package/dist/cli/commands/fleet/health.d.ts.map +0 -1
  407. package/dist/cli/commands/fleet/health.js +0 -483
  408. package/dist/cli/commands/fleet/health.js.map +0 -1
  409. package/dist/cli/commands/fleet/init.d.ts +0 -11
  410. package/dist/cli/commands/fleet/init.d.ts.map +0 -1
  411. package/dist/cli/commands/fleet/init.js +0 -91
  412. package/dist/cli/commands/fleet/init.js.map +0 -1
  413. package/dist/cli/commands/fleet/logs.d.ts +0 -21
  414. package/dist/cli/commands/fleet/logs.d.ts.map +0 -1
  415. package/dist/cli/commands/fleet/logs.js +0 -267
  416. package/dist/cli/commands/fleet/logs.js.map +0 -1
  417. package/dist/cli/commands/fleet/metrics.d.ts +0 -27
  418. package/dist/cli/commands/fleet/metrics.d.ts.map +0 -1
  419. package/dist/cli/commands/fleet/metrics.js +0 -369
  420. package/dist/cli/commands/fleet/metrics.js.map +0 -1
  421. package/dist/cli/commands/fleet/monitor.d.ts +0 -18
  422. package/dist/cli/commands/fleet/monitor.d.ts.map +0 -1
  423. package/dist/cli/commands/fleet/monitor.js +0 -237
  424. package/dist/cli/commands/fleet/monitor.js.map +0 -1
  425. package/dist/cli/commands/fleet/optimize.d.ts +0 -42
  426. package/dist/cli/commands/fleet/optimize.d.ts.map +0 -1
  427. package/dist/cli/commands/fleet/optimize.js +0 -135
  428. package/dist/cli/commands/fleet/optimize.js.map +0 -1
  429. package/dist/cli/commands/fleet/recover.d.ts +0 -22
  430. package/dist/cli/commands/fleet/recover.d.ts.map +0 -1
  431. package/dist/cli/commands/fleet/recover.js +0 -99
  432. package/dist/cli/commands/fleet/recover.js.map +0 -1
  433. package/dist/cli/commands/fleet/restart.d.ts +0 -18
  434. package/dist/cli/commands/fleet/restart.d.ts.map +0 -1
  435. package/dist/cli/commands/fleet/restart.js +0 -290
  436. package/dist/cli/commands/fleet/restart.js.map +0 -1
  437. package/dist/cli/commands/fleet/scale.d.ts +0 -9
  438. package/dist/cli/commands/fleet/scale.d.ts.map +0 -1
  439. package/dist/cli/commands/fleet/scale.js +0 -77
  440. package/dist/cli/commands/fleet/scale.js.map +0 -1
  441. package/dist/cli/commands/fleet/shutdown.d.ts +0 -19
  442. package/dist/cli/commands/fleet/shutdown.d.ts.map +0 -1
  443. package/dist/cli/commands/fleet/shutdown.js +0 -307
  444. package/dist/cli/commands/fleet/shutdown.js.map +0 -1
  445. package/dist/cli/commands/fleet/status.d.ts +0 -10
  446. package/dist/cli/commands/fleet/status.d.ts.map +0 -1
  447. package/dist/cli/commands/fleet/status.js +0 -97
  448. package/dist/cli/commands/fleet/status.js.map +0 -1
  449. package/dist/cli/commands/fleet/topology.d.ts +0 -23
  450. package/dist/cli/commands/fleet/topology.d.ts.map +0 -1
  451. package/dist/cli/commands/fleet/topology.js +0 -376
  452. package/dist/cli/commands/fleet/topology.js.map +0 -1
  453. package/dist/cli/commands/monitor/alerts.d.ts +0 -45
  454. package/dist/cli/commands/monitor/alerts.d.ts.map +0 -1
  455. package/dist/cli/commands/monitor/alerts.js +0 -168
  456. package/dist/cli/commands/monitor/alerts.js.map +0 -1
  457. package/dist/cli/commands/monitor/analyze.d.ts +0 -49
  458. package/dist/cli/commands/monitor/analyze.d.ts.map +0 -1
  459. package/dist/cli/commands/monitor/analyze.js +0 -209
  460. package/dist/cli/commands/monitor/analyze.js.map +0 -1
  461. package/dist/cli/commands/monitor/compare.d.ts +0 -38
  462. package/dist/cli/commands/monitor/compare.d.ts.map +0 -1
  463. package/dist/cli/commands/monitor/compare.js +0 -177
  464. package/dist/cli/commands/monitor/compare.js.map +0 -1
  465. package/dist/cli/commands/monitor/dashboard.d.ts +0 -34
  466. package/dist/cli/commands/monitor/dashboard.d.ts.map +0 -1
  467. package/dist/cli/commands/monitor/dashboard.js +0 -157
  468. package/dist/cli/commands/monitor/dashboard.js.map +0 -1
  469. package/dist/cli/commands/monitor/export.d.ts +0 -36
  470. package/dist/cli/commands/monitor/export.d.ts.map +0 -1
  471. package/dist/cli/commands/monitor/export.js +0 -157
  472. package/dist/cli/commands/monitor/export.js.map +0 -1
  473. package/dist/cli/commands/monitor/index.d.ts +0 -11
  474. package/dist/cli/commands/monitor/index.d.ts.map +0 -1
  475. package/dist/cli/commands/monitor/index.js +0 -14
  476. package/dist/cli/commands/monitor/index.js.map +0 -1
  477. package/dist/cli/commands/quality/baseline.d.ts +0 -27
  478. package/dist/cli/commands/quality/baseline.d.ts.map +0 -1
  479. package/dist/cli/commands/quality/baseline.js +0 -124
  480. package/dist/cli/commands/quality/baseline.js.map +0 -1
  481. package/dist/cli/commands/quality/compare.d.ts +0 -36
  482. package/dist/cli/commands/quality/compare.d.ts.map +0 -1
  483. package/dist/cli/commands/quality/compare.js +0 -136
  484. package/dist/cli/commands/quality/compare.js.map +0 -1
  485. package/dist/cli/commands/quality/decision.d.ts +0 -81
  486. package/dist/cli/commands/quality/decision.d.ts.map +0 -1
  487. package/dist/cli/commands/quality/decision.js +0 -319
  488. package/dist/cli/commands/quality/decision.js.map +0 -1
  489. package/dist/cli/commands/quality/gate.d.ts +0 -47
  490. package/dist/cli/commands/quality/gate.d.ts.map +0 -1
  491. package/dist/cli/commands/quality/gate.js +0 -205
  492. package/dist/cli/commands/quality/gate.js.map +0 -1
  493. package/dist/cli/commands/quality/index.d.ts +0 -17
  494. package/dist/cli/commands/quality/index.d.ts.map +0 -1
  495. package/dist/cli/commands/quality/index.js +0 -41
  496. package/dist/cli/commands/quality/index.js.map +0 -1
  497. package/dist/cli/commands/quality/policy.d.ts +0 -57
  498. package/dist/cli/commands/quality/policy.d.ts.map +0 -1
  499. package/dist/cli/commands/quality/policy.js +0 -359
  500. package/dist/cli/commands/quality/policy.js.map +0 -1
  501. package/dist/cli/commands/quality/risk.d.ts +0 -41
  502. package/dist/cli/commands/quality/risk.d.ts.map +0 -1
  503. package/dist/cli/commands/quality/risk.js +0 -255
  504. package/dist/cli/commands/quality/risk.js.map +0 -1
  505. package/dist/cli/commands/quality/trends.d.ts +0 -40
  506. package/dist/cli/commands/quality/trends.d.ts.map +0 -1
  507. package/dist/cli/commands/quality/trends.js +0 -122
  508. package/dist/cli/commands/quality/trends.js.map +0 -1
  509. package/dist/cli/commands/quality/validate.d.ts +0 -44
  510. package/dist/cli/commands/quality/validate.d.ts.map +0 -1
  511. package/dist/cli/commands/quality/validate.js +0 -234
  512. package/dist/cli/commands/quality/validate.js.map +0 -1
  513. package/dist/cli/commands/test/analyze-failures.d.ts +0 -39
  514. package/dist/cli/commands/test/analyze-failures.d.ts.map +0 -1
  515. package/dist/cli/commands/test/analyze-failures.js +0 -113
  516. package/dist/cli/commands/test/analyze-failures.js.map +0 -1
  517. package/dist/cli/commands/test/clean.d.ts +0 -3
  518. package/dist/cli/commands/test/clean.d.ts.map +0 -1
  519. package/dist/cli/commands/test/clean.js +0 -148
  520. package/dist/cli/commands/test/clean.js.map +0 -1
  521. package/dist/cli/commands/test/debug.d.ts +0 -3
  522. package/dist/cli/commands/test/debug.d.ts.map +0 -1
  523. package/dist/cli/commands/test/debug.js +0 -167
  524. package/dist/cli/commands/test/debug.js.map +0 -1
  525. package/dist/cli/commands/test/diff.d.ts +0 -3
  526. package/dist/cli/commands/test/diff.d.ts.map +0 -1
  527. package/dist/cli/commands/test/diff.js +0 -195
  528. package/dist/cli/commands/test/diff.js.map +0 -1
  529. package/dist/cli/commands/test/flakiness.d.ts +0 -32
  530. package/dist/cli/commands/test/flakiness.d.ts.map +0 -1
  531. package/dist/cli/commands/test/flakiness.js +0 -121
  532. package/dist/cli/commands/test/flakiness.js.map +0 -1
  533. package/dist/cli/commands/test/index.d.ts +0 -17
  534. package/dist/cli/commands/test/index.d.ts.map +0 -1
  535. package/dist/cli/commands/test/index.js +0 -45
  536. package/dist/cli/commands/test/index.js.map +0 -1
  537. package/dist/cli/commands/test/mutate.d.ts +0 -29
  538. package/dist/cli/commands/test/mutate.d.ts.map +0 -1
  539. package/dist/cli/commands/test/mutate.js +0 -163
  540. package/dist/cli/commands/test/mutate.js.map +0 -1
  541. package/dist/cli/commands/test/parallel.d.ts +0 -3
  542. package/dist/cli/commands/test/parallel.d.ts.map +0 -1
  543. package/dist/cli/commands/test/parallel.js +0 -117
  544. package/dist/cli/commands/test/parallel.js.map +0 -1
  545. package/dist/cli/commands/test/profile.d.ts +0 -3
  546. package/dist/cli/commands/test/profile.d.ts.map +0 -1
  547. package/dist/cli/commands/test/profile.js +0 -156
  548. package/dist/cli/commands/test/profile.js.map +0 -1
  549. package/dist/cli/commands/test/queue.d.ts +0 -3
  550. package/dist/cli/commands/test/queue.d.ts.map +0 -1
  551. package/dist/cli/commands/test/queue.js +0 -140
  552. package/dist/cli/commands/test/queue.js.map +0 -1
  553. package/dist/cli/commands/test/retry.d.ts +0 -3
  554. package/dist/cli/commands/test/retry.d.ts.map +0 -1
  555. package/dist/cli/commands/test/retry.js +0 -105
  556. package/dist/cli/commands/test/retry.js.map +0 -1
  557. package/dist/cli/commands/test/snapshot.d.ts +0 -3
  558. package/dist/cli/commands/test/snapshot.d.ts.map +0 -1
  559. package/dist/cli/commands/test/snapshot.js +0 -176
  560. package/dist/cli/commands/test/snapshot.js.map +0 -1
  561. package/dist/cli/commands/test/trace.d.ts +0 -3
  562. package/dist/cli/commands/test/trace.d.ts.map +0 -1
  563. package/dist/cli/commands/test/trace.js +0 -137
  564. package/dist/cli/commands/test/trace.js.map +0 -1
  565. package/dist/cli/commands/test/watch.d.ts +0 -3
  566. package/dist/cli/commands/test/watch.d.ts.map +0 -1
  567. package/dist/cli/commands/test/watch.js +0 -130
  568. package/dist/cli/commands/test/watch.js.map +0 -1
  569. package/dist/cli/index-spec.d.ts +0 -3
  570. package/dist/cli/index-spec.d.ts.map +0 -1
  571. package/dist/cli/index-spec.js +0 -154
  572. package/dist/cli/index-spec.js.map +0 -1
  573. package/dist/cli/index-working.d.ts +0 -7
  574. package/dist/cli/index-working.d.ts.map +0 -1
  575. package/dist/cli/index-working.js +0 -617
  576. package/dist/cli/index-working.js.map +0 -1
  577. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +0 -83
  578. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +0 -1
  579. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +0 -130
  580. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +0 -1
  581. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +0 -58
  582. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +0 -1
  583. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +0 -84
  584. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +0 -1
  585. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +0 -54
  586. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +0 -1
  587. package/dist/mcp/handlers/filtered/security-scanner-filtered.js +0 -73
  588. package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +0 -1
  589. package/dist/mcp/handlers/integration/contract-validate.d.ts +0 -10
  590. package/dist/mcp/handlers/integration/contract-validate.d.ts.map +0 -1
  591. package/dist/mcp/handlers/integration/contract-validate.js +0 -348
  592. package/dist/mcp/handlers/integration/contract-validate.js.map +0 -1
  593. package/dist/reporting/ResultAggregator.d.ts +0 -107
  594. package/dist/reporting/ResultAggregator.d.ts.map +0 -1
  595. package/dist/reporting/ResultAggregator.js +0 -435
  596. package/dist/reporting/ResultAggregator.js.map +0 -1
  597. package/dist/reporting/index.d.ts +0 -48
  598. package/dist/reporting/index.d.ts.map +0 -1
  599. package/dist/reporting/index.js +0 -154
  600. package/dist/reporting/index.js.map +0 -1
  601. package/dist/reporting/reporters/ControlLoopReporter.d.ts +0 -128
  602. package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +0 -1
  603. package/dist/reporting/reporters/ControlLoopReporter.js +0 -417
  604. package/dist/reporting/reporters/ControlLoopReporter.js.map +0 -1
  605. package/dist/reporting/reporters/HumanReadableReporter.d.ts +0 -140
  606. package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +0 -1
  607. package/dist/reporting/reporters/HumanReadableReporter.js +0 -524
  608. package/dist/reporting/reporters/HumanReadableReporter.js.map +0 -1
  609. package/dist/reporting/reporters/JSONReporter.d.ts +0 -251
  610. package/dist/reporting/reporters/JSONReporter.d.ts.map +0 -1
  611. package/dist/reporting/reporters/JSONReporter.js +0 -325
  612. package/dist/reporting/reporters/JSONReporter.js.map +0 -1
  613. package/dist/reporting/reporters/index.d.ts +0 -14
  614. package/dist/reporting/reporters/index.d.ts.map +0 -1
  615. package/dist/reporting/reporters/index.js +0 -19
  616. package/dist/reporting/reporters/index.js.map +0 -1
  617. package/dist/reporting/types.d.ts +0 -427
  618. package/dist/reporting/types.d.ts.map +0 -1
  619. package/dist/reporting/types.js +0 -12
  620. package/dist/reporting/types.js.map +0 -1
@@ -0,0 +1,200 @@
1
+ /**
2
+ * LWW-Register (Last-Writer-Wins Register) CRDT Implementation
3
+ *
4
+ * A state-based CRDT that resolves conflicts using timestamps.
5
+ * The most recent write (highest timestamp) wins during merge.
6
+ * Replica ID is used as a tiebreaker for equal timestamps.
7
+ *
8
+ * @module edge/p2p/crdt/LWWRegister
9
+ * @version 1.0.0
10
+ */
11
+ import { ReplicaId, WallTimestamp, CRDTState, CRDTMetadata, SerializedVectorClock, SerializedLWWRegisterState, MergeResult, CRDTDelta, CRDT } from './types';
12
+ import { VectorClock } from './VectorClock';
13
+ /**
14
+ * Last-Writer-Wins Register CRDT.
15
+ *
16
+ * Properties:
17
+ * - Stores a single value with associated timestamp
18
+ * - Conflicts resolved by comparing timestamps
19
+ * - Higher replica ID wins ties (deterministic)
20
+ * - Strongly eventually consistent
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const register = new LWWRegister<string>('replica-1', 'name');
25
+ *
26
+ * register.set('Alice');
27
+ * register.set('Bob');
28
+ *
29
+ * console.log(register.value()); // 'Bob'
30
+ *
31
+ * // Merge with remote state
32
+ * register.merge(remoteState);
33
+ * ```
34
+ */
35
+ export declare class LWWRegister<T> implements CRDT<T | undefined, SerializedLWWRegisterState<T>> {
36
+ /** Unique identifier for this register */
37
+ private readonly id;
38
+ /** Local replica ID */
39
+ private readonly replicaId;
40
+ /** Current value */
41
+ private currentValue;
42
+ /** Timestamp of current value */
43
+ private timestamp;
44
+ /** Replica that set current value */
45
+ private valueReplica;
46
+ /** Vector clock for versioning */
47
+ private vectorClock;
48
+ /** Metadata */
49
+ private metadata;
50
+ /** Sequence number for deltas */
51
+ private sequenceNumber;
52
+ /** Last delta clock for delta generation */
53
+ private lastDeltaClock;
54
+ /** Custom comparison function for timestamps */
55
+ private readonly compareTimestamp;
56
+ /**
57
+ * Create a new LWW-Register
58
+ *
59
+ * @param replicaId - Local replica identifier
60
+ * @param id - Unique register identifier
61
+ * @param initialValue - Optional initial value
62
+ * @param compareTimestamp - Optional custom timestamp comparison
63
+ */
64
+ constructor(replicaId: ReplicaId, id: string, initialValue?: T, compareTimestamp?: (a: WallTimestamp, b: WallTimestamp) => number);
65
+ /**
66
+ * Get the current value
67
+ *
68
+ * @returns Current value or undefined if not set
69
+ */
70
+ value(): T | undefined;
71
+ /**
72
+ * Set a new value with automatic timestamp
73
+ *
74
+ * @param value - New value to set
75
+ * @returns The set value
76
+ */
77
+ set(value: T): T;
78
+ /**
79
+ * Set a new value with explicit timestamp
80
+ *
81
+ * @param value - New value to set
82
+ * @param timestamp - Timestamp for this write
83
+ * @returns The set value
84
+ */
85
+ setWithTimestamp(value: T, timestamp: WallTimestamp): T;
86
+ /**
87
+ * Get the timestamp of the current value
88
+ *
89
+ * @returns Timestamp
90
+ */
91
+ getTimestamp(): WallTimestamp;
92
+ /**
93
+ * Get the replica that set the current value
94
+ *
95
+ * @returns Replica ID
96
+ */
97
+ getValueReplica(): ReplicaId;
98
+ /**
99
+ * Check if register has a value
100
+ *
101
+ * @returns True if value is set
102
+ */
103
+ hasValue(): boolean;
104
+ /**
105
+ * Clear the register value
106
+ *
107
+ * @returns Previous value
108
+ */
109
+ clear(): T | undefined;
110
+ /**
111
+ * Get the serializable state of this register
112
+ *
113
+ * @returns CRDT state
114
+ */
115
+ state(): CRDTState<SerializedLWWRegisterState<T>>;
116
+ /**
117
+ * Restore an LWW-Register from serialized state
118
+ *
119
+ * @param state - Serialized state
120
+ * @param replicaId - Local replica ID
121
+ * @returns Restored register
122
+ */
123
+ static fromState<T>(state: CRDTState<SerializedLWWRegisterState<T>>, replicaId: ReplicaId): LWWRegister<T>;
124
+ /**
125
+ * Determine if a new write should update the value
126
+ *
127
+ * @param newTimestamp - Timestamp of new value
128
+ * @param newReplica - Replica proposing new value
129
+ * @returns True if should update
130
+ */
131
+ private shouldUpdate;
132
+ /**
133
+ * Merge with another LWW-Register state
134
+ *
135
+ * The value with the highest timestamp wins.
136
+ * Equal timestamps are resolved by comparing replica IDs.
137
+ *
138
+ * @param other - Other register state to merge
139
+ * @returns Merge result
140
+ */
141
+ merge(other: CRDTState<SerializedLWWRegisterState<T>>): MergeResult<SerializedLWWRegisterState<T>>;
142
+ /**
143
+ * Generate a delta update since the last sync
144
+ *
145
+ * @param since - Vector clock of last sync (optional)
146
+ * @returns Delta update or null if no changes
147
+ */
148
+ generateDelta(since?: SerializedVectorClock): CRDTDelta<SerializedLWWRegisterState<T>> | null;
149
+ /**
150
+ * Apply a delta update
151
+ *
152
+ * @param delta - Delta to apply
153
+ * @returns True if applied successfully
154
+ */
155
+ applyDelta(delta: CRDTDelta<SerializedLWWRegisterState<T>>): boolean;
156
+ /**
157
+ * Create a deep copy of this register
158
+ *
159
+ * @returns Cloned register
160
+ */
161
+ clone(): LWWRegister<T>;
162
+ /**
163
+ * Get the register ID
164
+ *
165
+ * @returns Register ID
166
+ */
167
+ getId(): string;
168
+ /**
169
+ * Get the local replica ID
170
+ *
171
+ * @returns Replica ID
172
+ */
173
+ getReplicaId(): ReplicaId;
174
+ /**
175
+ * Get the vector clock
176
+ *
177
+ * @returns Vector clock copy
178
+ */
179
+ getVectorClock(): VectorClock;
180
+ /**
181
+ * Get metadata
182
+ *
183
+ * @returns Metadata copy
184
+ */
185
+ getMetadata(): CRDTMetadata;
186
+ /**
187
+ * Check if this register equals another
188
+ *
189
+ * @param other - Register to compare
190
+ * @returns True if values and timestamps are equal
191
+ */
192
+ equals(other: LWWRegister<T>): boolean;
193
+ /**
194
+ * String representation for debugging
195
+ *
196
+ * @returns Debug string
197
+ */
198
+ toString(): string;
199
+ }
200
+ //# sourceMappingURL=LWWRegister.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LWWRegister.d.ts","sourceRoot":"","sources":["../../../../src/edge/p2p/crdt/LWWRegister.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,456 @@
1
+ "use strict";
2
+ /**
3
+ * LWW-Register (Last-Writer-Wins Register) CRDT Implementation
4
+ *
5
+ * A state-based CRDT that resolves conflicts using timestamps.
6
+ * The most recent write (highest timestamp) wins during merge.
7
+ * Replica ID is used as a tiebreaker for equal timestamps.
8
+ *
9
+ * @module edge/p2p/crdt/LWWRegister
10
+ * @version 1.0.0
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.LWWRegister = void 0;
14
+ const types_1 = require("./types");
15
+ const VectorClock_1 = require("./VectorClock");
16
+ // ============================================
17
+ // LWWRegister Class
18
+ // ============================================
19
+ /**
20
+ * Last-Writer-Wins Register CRDT.
21
+ *
22
+ * Properties:
23
+ * - Stores a single value with associated timestamp
24
+ * - Conflicts resolved by comparing timestamps
25
+ * - Higher replica ID wins ties (deterministic)
26
+ * - Strongly eventually consistent
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const register = new LWWRegister<string>('replica-1', 'name');
31
+ *
32
+ * register.set('Alice');
33
+ * register.set('Bob');
34
+ *
35
+ * console.log(register.value()); // 'Bob'
36
+ *
37
+ * // Merge with remote state
38
+ * register.merge(remoteState);
39
+ * ```
40
+ */
41
+ class LWWRegister {
42
+ /**
43
+ * Create a new LWW-Register
44
+ *
45
+ * @param replicaId - Local replica identifier
46
+ * @param id - Unique register identifier
47
+ * @param initialValue - Optional initial value
48
+ * @param compareTimestamp - Optional custom timestamp comparison
49
+ */
50
+ constructor(replicaId, id, initialValue, compareTimestamp) {
51
+ this.id = id;
52
+ this.replicaId = replicaId;
53
+ this.currentValue = initialValue;
54
+ this.timestamp = initialValue !== undefined ? Date.now() : 0;
55
+ this.valueReplica = replicaId;
56
+ this.vectorClock = new VectorClock_1.VectorClock(replicaId);
57
+ this.sequenceNumber = 0;
58
+ this.lastDeltaClock = this.vectorClock.clone();
59
+ this.compareTimestamp = compareTimestamp ?? ((a, b) => a - b);
60
+ const now = Date.now();
61
+ this.metadata = {
62
+ createdAt: now,
63
+ updatedAt: now,
64
+ mergeCount: 0,
65
+ lastModifiedBy: replicaId,
66
+ };
67
+ if (initialValue !== undefined) {
68
+ this.vectorClock.increment();
69
+ }
70
+ }
71
+ // ============================================
72
+ // Core Operations
73
+ // ============================================
74
+ /**
75
+ * Get the current value
76
+ *
77
+ * @returns Current value or undefined if not set
78
+ */
79
+ value() {
80
+ return this.currentValue;
81
+ }
82
+ /**
83
+ * Set a new value with automatic timestamp
84
+ *
85
+ * @param value - New value to set
86
+ * @returns The set value
87
+ */
88
+ set(value) {
89
+ return this.setWithTimestamp(value, Date.now());
90
+ }
91
+ /**
92
+ * Set a new value with explicit timestamp
93
+ *
94
+ * @param value - New value to set
95
+ * @param timestamp - Timestamp for this write
96
+ * @returns The set value
97
+ */
98
+ setWithTimestamp(value, timestamp) {
99
+ // For local writes, always accept if timestamp is >= current
100
+ // (same replica can always update its own value)
101
+ // For remote writes (via merge), use shouldUpdate for proper LWW semantics
102
+ const shouldAccept = timestamp >= this.timestamp;
103
+ if (shouldAccept) {
104
+ this.currentValue = value;
105
+ this.timestamp = timestamp;
106
+ this.valueReplica = this.replicaId;
107
+ this.vectorClock.increment();
108
+ this.metadata.updatedAt = Date.now();
109
+ this.metadata.lastModifiedBy = this.replicaId;
110
+ this.sequenceNumber++;
111
+ }
112
+ return this.currentValue;
113
+ }
114
+ /**
115
+ * Get the timestamp of the current value
116
+ *
117
+ * @returns Timestamp
118
+ */
119
+ getTimestamp() {
120
+ return this.timestamp;
121
+ }
122
+ /**
123
+ * Get the replica that set the current value
124
+ *
125
+ * @returns Replica ID
126
+ */
127
+ getValueReplica() {
128
+ return this.valueReplica;
129
+ }
130
+ /**
131
+ * Check if register has a value
132
+ *
133
+ * @returns True if value is set
134
+ */
135
+ hasValue() {
136
+ return this.currentValue !== undefined;
137
+ }
138
+ /**
139
+ * Clear the register value
140
+ *
141
+ * @returns Previous value
142
+ */
143
+ clear() {
144
+ const prev = this.currentValue;
145
+ this.currentValue = undefined;
146
+ this.timestamp = Date.now();
147
+ this.valueReplica = this.replicaId;
148
+ this.vectorClock.increment();
149
+ this.metadata.updatedAt = Date.now();
150
+ this.metadata.lastModifiedBy = this.replicaId;
151
+ this.sequenceNumber++;
152
+ return prev;
153
+ }
154
+ // ============================================
155
+ // State Management
156
+ // ============================================
157
+ /**
158
+ * Get the serializable state of this register
159
+ *
160
+ * @returns CRDT state
161
+ */
162
+ state() {
163
+ return {
164
+ type: types_1.CRDTType.LWWRegister,
165
+ id: this.id,
166
+ vectorClock: this.vectorClock.serialize(),
167
+ origin: this.replicaId,
168
+ value: {
169
+ value: this.currentValue,
170
+ timestamp: this.timestamp,
171
+ replica: this.valueReplica,
172
+ },
173
+ metadata: { ...this.metadata },
174
+ stateVersion: 1,
175
+ };
176
+ }
177
+ /**
178
+ * Restore an LWW-Register from serialized state
179
+ *
180
+ * @param state - Serialized state
181
+ * @param replicaId - Local replica ID
182
+ * @returns Restored register
183
+ */
184
+ static fromState(state, replicaId) {
185
+ if (state.type !== types_1.CRDTType.LWWRegister) {
186
+ throw new types_1.CRDTError(`Invalid CRDT type: expected ${types_1.CRDTType.LWWRegister}, got ${state.type}`, types_1.CRDTErrorCode.InvalidType, state.id);
187
+ }
188
+ const register = new LWWRegister(replicaId, state.id);
189
+ // Restore value
190
+ register.currentValue = state.value.value;
191
+ register.timestamp = state.value.timestamp;
192
+ register.valueReplica = state.value.replica;
193
+ // Restore vector clock
194
+ register.vectorClock = VectorClock_1.VectorClock.fromSerialized(state.vectorClock, replicaId);
195
+ // Restore metadata
196
+ register.metadata = { ...state.metadata };
197
+ return register;
198
+ }
199
+ // ============================================
200
+ // Merge Operations
201
+ // ============================================
202
+ /**
203
+ * Determine if a new write should update the value
204
+ *
205
+ * @param newTimestamp - Timestamp of new value
206
+ * @param newReplica - Replica proposing new value
207
+ * @returns True if should update
208
+ */
209
+ shouldUpdate(newTimestamp, newReplica) {
210
+ const cmp = this.compareTimestamp(newTimestamp, this.timestamp);
211
+ if (cmp > 0) {
212
+ // New timestamp is higher
213
+ return true;
214
+ }
215
+ else if (cmp === 0) {
216
+ // Equal timestamps, use replica ID as tiebreaker
217
+ return newReplica > this.valueReplica;
218
+ }
219
+ return false;
220
+ }
221
+ /**
222
+ * Merge with another LWW-Register state
223
+ *
224
+ * The value with the highest timestamp wins.
225
+ * Equal timestamps are resolved by comparing replica IDs.
226
+ *
227
+ * @param other - Other register state to merge
228
+ * @returns Merge result
229
+ */
230
+ merge(other) {
231
+ const startTime = Date.now();
232
+ const conflicts = [];
233
+ if (other.type !== types_1.CRDTType.LWWRegister) {
234
+ throw new types_1.CRDTError(`Cannot merge different CRDT types`, types_1.CRDTErrorCode.InvalidType, this.id);
235
+ }
236
+ if (other.id !== this.id) {
237
+ throw new types_1.CRDTError(`Cannot merge different CRDT instances`, types_1.CRDTErrorCode.InvalidState, this.id);
238
+ }
239
+ const otherValue = other.value;
240
+ let localChanged = false;
241
+ // Check for concurrent writes (potential conflict)
242
+ const otherClock = VectorClock_1.VectorClock.fromSerialized(other.vectorClock, this.replicaId);
243
+ if (this.vectorClock.isConcurrent(otherClock)) {
244
+ // Record conflict
245
+ const conflict = {
246
+ conflictId: `${this.id}-${Date.now()}`,
247
+ crdtId: this.id,
248
+ conflictType: types_1.ConflictType.ConcurrentUpdate,
249
+ field: 'value',
250
+ localValue: this.currentValue,
251
+ remoteValue: otherValue.value,
252
+ localClock: this.vectorClock.serialize(),
253
+ remoteClock: other.vectorClock,
254
+ detectedAt: Date.now(),
255
+ };
256
+ // Determine winner
257
+ const winner = this.shouldUpdate(otherValue.timestamp, otherValue.replica)
258
+ ? 'remote'
259
+ : 'local';
260
+ conflict.resolution = {
261
+ strategy: types_1.ResolutionStrategy.LastWriterWins,
262
+ resolvedValue: winner === 'remote' ? otherValue.value : this.currentValue,
263
+ winner: winner === 'remote' ? otherValue.replica : this.valueReplica,
264
+ reason: `LWW: ${winner} has ${winner === 'remote' ? 'later' : 'earlier or equal'} timestamp`,
265
+ automatic: true,
266
+ resolvedAt: Date.now(),
267
+ };
268
+ conflicts.push(conflict);
269
+ }
270
+ // Apply LWW merge
271
+ if (this.shouldUpdate(otherValue.timestamp, otherValue.replica)) {
272
+ this.currentValue = otherValue.value;
273
+ this.timestamp = otherValue.timestamp;
274
+ this.valueReplica = otherValue.replica;
275
+ localChanged = true;
276
+ }
277
+ // Merge vector clocks
278
+ this.vectorClock.merge(otherClock);
279
+ // Update metadata
280
+ this.metadata.mergeCount++;
281
+ this.metadata.updatedAt = Date.now();
282
+ if (localChanged) {
283
+ this.metadata.lastModifiedBy = other.origin;
284
+ }
285
+ const stats = {
286
+ duration: Date.now() - startTime,
287
+ entriesMerged: 1,
288
+ autoResolved: conflicts.length,
289
+ tombstonesProcessed: 0,
290
+ memoryDelta: 0,
291
+ };
292
+ return {
293
+ success: true,
294
+ mergedState: this.state(),
295
+ localChanged,
296
+ conflicts,
297
+ stats,
298
+ };
299
+ }
300
+ // ============================================
301
+ // Delta Operations
302
+ // ============================================
303
+ /**
304
+ * Generate a delta update since the last sync
305
+ *
306
+ * @param since - Vector clock of last sync (optional)
307
+ * @returns Delta update or null if no changes
308
+ */
309
+ generateDelta(since) {
310
+ const sinceClock = since
311
+ ? VectorClock_1.VectorClock.fromSerialized(since, this.replicaId)
312
+ : this.lastDeltaClock;
313
+ // Check if there are any changes
314
+ if (!this.vectorClock.happenedAfter(sinceClock) &&
315
+ !this.vectorClock.isConcurrent(sinceClock)) {
316
+ return null;
317
+ }
318
+ const operations = [{
319
+ op: types_1.DeltaOpType.Set,
320
+ value: {
321
+ value: this.currentValue,
322
+ timestamp: this.timestamp,
323
+ replica: this.valueReplica,
324
+ },
325
+ timestamp: this.timestamp,
326
+ replica: this.valueReplica,
327
+ }];
328
+ const delta = {
329
+ crdtId: this.id,
330
+ type: types_1.CRDTType.LWWRegister,
331
+ origin: this.replicaId,
332
+ vectorClock: this.vectorClock.serialize(),
333
+ operations,
334
+ sequenceNumber: this.sequenceNumber,
335
+ generatedAt: Date.now(),
336
+ };
337
+ // Update last delta clock
338
+ this.lastDeltaClock = this.vectorClock.clone();
339
+ return delta;
340
+ }
341
+ /**
342
+ * Apply a delta update
343
+ *
344
+ * @param delta - Delta to apply
345
+ * @returns True if applied successfully
346
+ */
347
+ applyDelta(delta) {
348
+ if (delta.type !== types_1.CRDTType.LWWRegister) {
349
+ return false;
350
+ }
351
+ if (delta.crdtId !== this.id) {
352
+ return false;
353
+ }
354
+ let changed = false;
355
+ for (const op of delta.operations) {
356
+ if (op.op === types_1.DeltaOpType.Set && op.value && op.timestamp && op.replica) {
357
+ if (this.shouldUpdate(op.timestamp, op.replica)) {
358
+ this.currentValue = op.value.value;
359
+ this.timestamp = op.timestamp;
360
+ this.valueReplica = op.replica;
361
+ changed = true;
362
+ }
363
+ }
364
+ }
365
+ if (changed) {
366
+ const deltaClock = VectorClock_1.VectorClock.fromSerialized(delta.vectorClock, this.replicaId);
367
+ this.vectorClock.merge(deltaClock);
368
+ this.metadata.updatedAt = Date.now();
369
+ this.metadata.lastModifiedBy = delta.origin;
370
+ }
371
+ return changed;
372
+ }
373
+ // ============================================
374
+ // Utility Methods
375
+ // ============================================
376
+ /**
377
+ * Create a deep copy of this register
378
+ *
379
+ * @returns Cloned register
380
+ */
381
+ clone() {
382
+ const cloned = new LWWRegister(this.replicaId, this.id);
383
+ cloned.currentValue = this.currentValue;
384
+ cloned.timestamp = this.timestamp;
385
+ cloned.valueReplica = this.valueReplica;
386
+ cloned.vectorClock = this.vectorClock.clone();
387
+ cloned.metadata = { ...this.metadata };
388
+ cloned.sequenceNumber = this.sequenceNumber;
389
+ cloned.lastDeltaClock = this.lastDeltaClock.clone();
390
+ return cloned;
391
+ }
392
+ /**
393
+ * Get the register ID
394
+ *
395
+ * @returns Register ID
396
+ */
397
+ getId() {
398
+ return this.id;
399
+ }
400
+ /**
401
+ * Get the local replica ID
402
+ *
403
+ * @returns Replica ID
404
+ */
405
+ getReplicaId() {
406
+ return this.replicaId;
407
+ }
408
+ /**
409
+ * Get the vector clock
410
+ *
411
+ * @returns Vector clock copy
412
+ */
413
+ getVectorClock() {
414
+ return this.vectorClock.clone();
415
+ }
416
+ /**
417
+ * Get metadata
418
+ *
419
+ * @returns Metadata copy
420
+ */
421
+ getMetadata() {
422
+ return { ...this.metadata };
423
+ }
424
+ /**
425
+ * Check if this register equals another
426
+ *
427
+ * @param other - Register to compare
428
+ * @returns True if values and timestamps are equal
429
+ */
430
+ equals(other) {
431
+ if (this.id !== other.id) {
432
+ return false;
433
+ }
434
+ if (this.timestamp !== other.timestamp) {
435
+ return false;
436
+ }
437
+ if (this.valueReplica !== other.valueReplica) {
438
+ return false;
439
+ }
440
+ // Deep compare values
441
+ return JSON.stringify(this.currentValue) === JSON.stringify(other.currentValue);
442
+ }
443
+ /**
444
+ * String representation for debugging
445
+ *
446
+ * @returns Debug string
447
+ */
448
+ toString() {
449
+ const valueStr = this.currentValue !== undefined
450
+ ? JSON.stringify(this.currentValue).slice(0, 50)
451
+ : 'undefined';
452
+ return `LWWRegister{id=${this.id}, value=${valueStr}, ts=${this.timestamp}, replica=${this.valueReplica}}`;
453
+ }
454
+ }
455
+ exports.LWWRegister = LWWRegister;
456
+ //# sourceMappingURL=LWWRegister.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LWWRegister.js","sourceRoot":"","sources":["../../../../src/edge/p2p/crdt/LWWRegister.ts"],"names":[],"mappings":"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"}