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,723 @@
1
+ "use strict";
2
+ /**
3
+ * OR-Set (Observed-Remove Set) CRDT Implementation
4
+ *
5
+ * A state-based CRDT set that handles concurrent add/remove operations.
6
+ * Each add operation creates a unique tag, and remove operates on tags.
7
+ * This ensures that adds observed before removes survive the merge.
8
+ *
9
+ * @module edge/p2p/crdt/ORSet
10
+ * @version 1.0.0
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ORSet = void 0;
14
+ const types_1 = require("./types");
15
+ const VectorClock_1 = require("./VectorClock");
16
+ // ============================================
17
+ // Utility Functions
18
+ // ============================================
19
+ /**
20
+ * Generate a unique tag for add operations
21
+ *
22
+ * @param replicaId - Replica performing the add
23
+ * @returns Unique tag string
24
+ */
25
+ function generateTag(replicaId) {
26
+ const timestamp = Date.now();
27
+ const random = Math.random().toString(36).substring(2, 10);
28
+ return `${replicaId}-${timestamp}-${random}`;
29
+ }
30
+ /**
31
+ * Hash a value for deduplication checking
32
+ *
33
+ * @param value - Value to hash
34
+ * @returns Hash string
35
+ */
36
+ function hashValue(value) {
37
+ return JSON.stringify(value);
38
+ }
39
+ // ============================================
40
+ // ORSet Class
41
+ // ============================================
42
+ /**
43
+ * Observed-Remove Set CRDT.
44
+ *
45
+ * Properties:
46
+ * - Add operations create unique tags
47
+ * - Remove operations target specific tags
48
+ * - Concurrent add wins over remove (add-wins semantics)
49
+ * - Supports arbitrary value types
50
+ * - Strongly eventually consistent
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const set = new ORSet<string>('replica-1', 'tags');
55
+ *
56
+ * set.add('typescript');
57
+ * set.add('testing');
58
+ * set.remove('testing');
59
+ *
60
+ * console.log(set.values()); // ['typescript']
61
+ *
62
+ * // Merge with remote state
63
+ * set.merge(remoteState);
64
+ * ```
65
+ */
66
+ class ORSet {
67
+ /**
68
+ * Create a new OR-Set
69
+ *
70
+ * @param replicaId - Local replica identifier
71
+ * @param id - Unique set identifier
72
+ * @param options - Optional configuration
73
+ */
74
+ constructor(replicaId, id, options) {
75
+ this.id = id;
76
+ this.replicaId = replicaId;
77
+ this.elements = new Map();
78
+ this.tombstones = new Map();
79
+ this.vectorClock = new VectorClock_1.VectorClock(replicaId);
80
+ this.sequenceNumber = 0;
81
+ this.lastDeltaClock = this.vectorClock.clone();
82
+ this.tombstoneTtl = options?.tombstoneTtl ?? types_1.DEFAULT_TOMBSTONE_TTL;
83
+ this.compareValues = options?.compareValues ?? ((a, b) => hashValue(a) === hashValue(b));
84
+ const now = Date.now();
85
+ this.metadata = {
86
+ createdAt: now,
87
+ updatedAt: now,
88
+ mergeCount: 0,
89
+ lastModifiedBy: replicaId,
90
+ };
91
+ }
92
+ // ============================================
93
+ // Core Operations
94
+ // ============================================
95
+ /**
96
+ * Get the current set value
97
+ *
98
+ * @returns Set of current values
99
+ */
100
+ value() {
101
+ const result = new Set();
102
+ for (const element of this.elements.values()) {
103
+ result.add(element.value);
104
+ }
105
+ return result;
106
+ }
107
+ /**
108
+ * Get all values as an array
109
+ *
110
+ * @returns Array of values
111
+ */
112
+ values() {
113
+ return Array.from(this.value());
114
+ }
115
+ /**
116
+ * Add a value to the set
117
+ *
118
+ * @param value - Value to add
119
+ * @returns The generated tag
120
+ */
121
+ add(value) {
122
+ const tag = generateTag(this.replicaId);
123
+ const now = Date.now();
124
+ const element = {
125
+ value,
126
+ tag,
127
+ addedBy: this.replicaId,
128
+ addedAt: now,
129
+ };
130
+ this.elements.set(tag, element);
131
+ this.vectorClock.increment();
132
+ this.metadata.updatedAt = now;
133
+ this.metadata.lastModifiedBy = this.replicaId;
134
+ this.sequenceNumber++;
135
+ return tag;
136
+ }
137
+ /**
138
+ * Remove a value from the set
139
+ *
140
+ * This removes all instances of the value by tombstoning all matching tags.
141
+ *
142
+ * @param value - Value to remove
143
+ * @returns Number of elements removed
144
+ */
145
+ remove(value) {
146
+ const tagsToRemove = [];
147
+ // Find all tags with this value
148
+ for (const [tag, element] of this.elements) {
149
+ if (this.compareValues(element.value, value)) {
150
+ tagsToRemove.push(tag);
151
+ }
152
+ }
153
+ if (tagsToRemove.length === 0) {
154
+ return 0;
155
+ }
156
+ const now = Date.now();
157
+ // Remove elements and create tombstones
158
+ for (const tag of tagsToRemove) {
159
+ this.elements.delete(tag);
160
+ const tombstone = {
161
+ id: `ts-${tag}`,
162
+ elementId: tag,
163
+ crdtId: this.id,
164
+ deletedBy: this.replicaId,
165
+ vectorClock: this.vectorClock.serialize(),
166
+ createdAt: now,
167
+ expiresAt: now + this.tombstoneTtl,
168
+ collected: false,
169
+ };
170
+ this.tombstones.set(tag, tombstone);
171
+ }
172
+ this.vectorClock.increment();
173
+ this.metadata.updatedAt = now;
174
+ this.metadata.lastModifiedBy = this.replicaId;
175
+ this.sequenceNumber++;
176
+ return tagsToRemove.length;
177
+ }
178
+ /**
179
+ * Remove a specific element by tag
180
+ *
181
+ * @param tag - Tag to remove
182
+ * @returns True if removed
183
+ */
184
+ removeByTag(tag) {
185
+ if (!this.elements.has(tag)) {
186
+ return false;
187
+ }
188
+ const now = Date.now();
189
+ this.elements.delete(tag);
190
+ const tombstone = {
191
+ id: `ts-${tag}`,
192
+ elementId: tag,
193
+ crdtId: this.id,
194
+ deletedBy: this.replicaId,
195
+ vectorClock: this.vectorClock.serialize(),
196
+ createdAt: now,
197
+ expiresAt: now + this.tombstoneTtl,
198
+ collected: false,
199
+ };
200
+ this.tombstones.set(tag, tombstone);
201
+ this.vectorClock.increment();
202
+ this.metadata.updatedAt = now;
203
+ this.metadata.lastModifiedBy = this.replicaId;
204
+ this.sequenceNumber++;
205
+ return true;
206
+ }
207
+ /**
208
+ * Check if a value is in the set
209
+ *
210
+ * @param value - Value to check
211
+ * @returns True if present
212
+ */
213
+ has(value) {
214
+ for (const element of this.elements.values()) {
215
+ if (this.compareValues(element.value, value)) {
216
+ return true;
217
+ }
218
+ }
219
+ return false;
220
+ }
221
+ /**
222
+ * Check if a tag exists
223
+ *
224
+ * @param tag - Tag to check
225
+ * @returns True if tag exists
226
+ */
227
+ hasTag(tag) {
228
+ return this.elements.has(tag);
229
+ }
230
+ /**
231
+ * Get the element for a tag
232
+ *
233
+ * @param tag - Tag to look up
234
+ * @returns Element or undefined
235
+ */
236
+ getByTag(tag) {
237
+ return this.elements.get(tag);
238
+ }
239
+ /**
240
+ * Get the number of elements
241
+ *
242
+ * @returns Size of the set
243
+ */
244
+ size() {
245
+ return this.elements.size;
246
+ }
247
+ /**
248
+ * Check if set is empty
249
+ *
250
+ * @returns True if empty
251
+ */
252
+ isEmpty() {
253
+ return this.elements.size === 0;
254
+ }
255
+ /**
256
+ * Clear all elements
257
+ */
258
+ clear() {
259
+ const now = Date.now();
260
+ // Create tombstones for all elements
261
+ for (const tag of this.elements.keys()) {
262
+ const tombstone = {
263
+ id: `ts-${tag}`,
264
+ elementId: tag,
265
+ crdtId: this.id,
266
+ deletedBy: this.replicaId,
267
+ vectorClock: this.vectorClock.serialize(),
268
+ createdAt: now,
269
+ expiresAt: now + this.tombstoneTtl,
270
+ collected: false,
271
+ };
272
+ this.tombstones.set(tag, tombstone);
273
+ }
274
+ this.elements.clear();
275
+ this.vectorClock.increment();
276
+ this.metadata.updatedAt = now;
277
+ this.metadata.lastModifiedBy = this.replicaId;
278
+ this.sequenceNumber++;
279
+ }
280
+ // ============================================
281
+ // State Management
282
+ // ============================================
283
+ /**
284
+ * Get the serializable state of this set
285
+ *
286
+ * @returns CRDT state
287
+ */
288
+ state() {
289
+ const elements = Array.from(this.elements.values()).map(el => ({
290
+ tag: el.tag,
291
+ value: el.value,
292
+ addedBy: el.addedBy,
293
+ addedAt: el.addedAt,
294
+ }));
295
+ const tombstones = Array.from(this.tombstones.keys());
296
+ return {
297
+ type: types_1.CRDTType.ORSet,
298
+ id: this.id,
299
+ vectorClock: this.vectorClock.serialize(),
300
+ origin: this.replicaId,
301
+ value: { elements, tombstones },
302
+ metadata: { ...this.metadata },
303
+ stateVersion: 1,
304
+ };
305
+ }
306
+ /**
307
+ * Restore an OR-Set from serialized state
308
+ *
309
+ * @param state - Serialized state
310
+ * @param replicaId - Local replica ID
311
+ * @returns Restored set
312
+ */
313
+ static fromState(state, replicaId) {
314
+ if (state.type !== types_1.CRDTType.ORSet) {
315
+ throw new types_1.CRDTError(`Invalid CRDT type: expected ${types_1.CRDTType.ORSet}, got ${state.type}`, types_1.CRDTErrorCode.InvalidType, state.id);
316
+ }
317
+ const set = new ORSet(replicaId, state.id);
318
+ // Restore elements
319
+ for (const el of state.value.elements) {
320
+ const element = {
321
+ value: el.value,
322
+ tag: el.tag,
323
+ addedBy: el.addedBy,
324
+ addedAt: el.addedAt,
325
+ };
326
+ set.elements.set(el.tag, element);
327
+ }
328
+ // Restore tombstones
329
+ const now = Date.now();
330
+ for (const tag of state.value.tombstones) {
331
+ const tombstone = {
332
+ id: `ts-${tag}`,
333
+ elementId: tag,
334
+ crdtId: state.id,
335
+ deletedBy: state.origin,
336
+ vectorClock: state.vectorClock,
337
+ createdAt: now,
338
+ expiresAt: now + types_1.DEFAULT_TOMBSTONE_TTL,
339
+ collected: false,
340
+ };
341
+ set.tombstones.set(tag, tombstone);
342
+ }
343
+ // Restore vector clock
344
+ set.vectorClock = VectorClock_1.VectorClock.fromSerialized(state.vectorClock, replicaId);
345
+ // Restore metadata
346
+ set.metadata = { ...state.metadata };
347
+ return set;
348
+ }
349
+ // ============================================
350
+ // Merge Operations
351
+ // ============================================
352
+ /**
353
+ * Merge with another OR-Set state
354
+ *
355
+ * Add-wins semantics: if an element is added in one replica
356
+ * and removed in another concurrently, the add wins.
357
+ *
358
+ * @param other - Other set state to merge
359
+ * @returns Merge result
360
+ */
361
+ merge(other) {
362
+ const startTime = Date.now();
363
+ const conflicts = [];
364
+ let entriesMerged = 0;
365
+ let localChanged = false;
366
+ if (other.type !== types_1.CRDTType.ORSet) {
367
+ throw new types_1.CRDTError(`Cannot merge different CRDT types`, types_1.CRDTErrorCode.InvalidType, this.id);
368
+ }
369
+ if (other.id !== this.id) {
370
+ throw new types_1.CRDTError(`Cannot merge different CRDT instances`, types_1.CRDTErrorCode.InvalidState, this.id);
371
+ }
372
+ const otherClock = VectorClock_1.VectorClock.fromSerialized(other.vectorClock, this.replicaId);
373
+ const remoteElements = new Map();
374
+ const remoteTombstones = new Set(other.value.tombstones);
375
+ // Build map of remote elements
376
+ for (const el of other.value.elements) {
377
+ remoteElements.set(el.tag, {
378
+ value: el.value,
379
+ tag: el.tag,
380
+ addedBy: el.addedBy,
381
+ addedAt: el.addedAt,
382
+ });
383
+ }
384
+ // Add remote elements not in our tombstones
385
+ for (const [tag, element] of remoteElements) {
386
+ if (!this.tombstones.has(tag) && !this.elements.has(tag)) {
387
+ this.elements.set(tag, element);
388
+ localChanged = true;
389
+ entriesMerged++;
390
+ }
391
+ else if (this.tombstones.has(tag) && this.vectorClock.isConcurrent(otherClock)) {
392
+ // Concurrent add/remove - record conflict (add wins)
393
+ const conflict = {
394
+ conflictId: `${this.id}-${tag}-${Date.now()}`,
395
+ crdtId: this.id,
396
+ conflictType: types_1.ConflictType.AddRemove,
397
+ field: tag,
398
+ localValue: null,
399
+ remoteValue: element.value,
400
+ localClock: this.vectorClock.serialize(),
401
+ remoteClock: other.vectorClock,
402
+ resolution: {
403
+ strategy: types_1.ResolutionStrategy.KeepBoth,
404
+ resolvedValue: element.value,
405
+ reason: 'OR-Set add-wins semantics',
406
+ automatic: true,
407
+ resolvedAt: Date.now(),
408
+ },
409
+ detectedAt: Date.now(),
410
+ };
411
+ conflicts.push(conflict);
412
+ // Add wins - remove tombstone and add element
413
+ this.tombstones.delete(tag);
414
+ this.elements.set(tag, element);
415
+ localChanged = true;
416
+ entriesMerged++;
417
+ }
418
+ }
419
+ // Apply remote tombstones
420
+ for (const tag of remoteTombstones) {
421
+ if (this.elements.has(tag)) {
422
+ // Check if this is a concurrent add/remove
423
+ if (this.vectorClock.isConcurrent(otherClock)) {
424
+ // Local add wins, keep element
425
+ const conflict = {
426
+ conflictId: `${this.id}-${tag}-${Date.now()}`,
427
+ crdtId: this.id,
428
+ conflictType: types_1.ConflictType.AddRemove,
429
+ field: tag,
430
+ localValue: this.elements.get(tag)?.value,
431
+ remoteValue: null,
432
+ localClock: this.vectorClock.serialize(),
433
+ remoteClock: other.vectorClock,
434
+ resolution: {
435
+ strategy: types_1.ResolutionStrategy.PreferLocal,
436
+ resolvedValue: this.elements.get(tag)?.value,
437
+ reason: 'OR-Set add-wins semantics: local add beats remote remove',
438
+ automatic: true,
439
+ resolvedAt: Date.now(),
440
+ },
441
+ detectedAt: Date.now(),
442
+ };
443
+ conflicts.push(conflict);
444
+ }
445
+ else if (otherClock.happenedAfter(this.vectorClock)) {
446
+ // Remote happened after, apply tombstone
447
+ const element = this.elements.get(tag);
448
+ this.elements.delete(tag);
449
+ const tombstone = {
450
+ id: `ts-${tag}`,
451
+ elementId: tag,
452
+ crdtId: this.id,
453
+ deletedBy: other.origin,
454
+ vectorClock: other.vectorClock,
455
+ createdAt: Date.now(),
456
+ expiresAt: Date.now() + this.tombstoneTtl,
457
+ collected: false,
458
+ };
459
+ this.tombstones.set(tag, tombstone);
460
+ localChanged = true;
461
+ }
462
+ }
463
+ else if (!this.tombstones.has(tag)) {
464
+ // Add tombstone we didn't have
465
+ const tombstone = {
466
+ id: `ts-${tag}`,
467
+ elementId: tag,
468
+ crdtId: this.id,
469
+ deletedBy: other.origin,
470
+ vectorClock: other.vectorClock,
471
+ createdAt: Date.now(),
472
+ expiresAt: Date.now() + this.tombstoneTtl,
473
+ collected: false,
474
+ };
475
+ this.tombstones.set(tag, tombstone);
476
+ }
477
+ }
478
+ // Merge vector clocks
479
+ this.vectorClock.merge(otherClock);
480
+ // Update metadata
481
+ this.metadata.mergeCount++;
482
+ this.metadata.updatedAt = Date.now();
483
+ if (localChanged) {
484
+ this.metadata.lastModifiedBy = other.origin;
485
+ }
486
+ // Garbage collect expired tombstones
487
+ this.gcTombstones();
488
+ const stats = {
489
+ duration: Date.now() - startTime,
490
+ entriesMerged,
491
+ autoResolved: conflicts.length,
492
+ tombstonesProcessed: remoteTombstones.size,
493
+ memoryDelta: entriesMerged * 64, // Approximate
494
+ };
495
+ return {
496
+ success: true,
497
+ mergedState: this.state(),
498
+ localChanged,
499
+ conflicts,
500
+ stats,
501
+ };
502
+ }
503
+ // ============================================
504
+ // Delta Operations
505
+ // ============================================
506
+ /**
507
+ * Generate a delta update since the last sync
508
+ *
509
+ * @param since - Vector clock of last sync (optional)
510
+ * @returns Delta update or null if no changes
511
+ */
512
+ generateDelta(since) {
513
+ const sinceClock = since
514
+ ? VectorClock_1.VectorClock.fromSerialized(since, this.replicaId)
515
+ : this.lastDeltaClock;
516
+ // Check if there are any changes
517
+ if (!this.vectorClock.happenedAfter(sinceClock) &&
518
+ !this.vectorClock.isConcurrent(sinceClock)) {
519
+ return null;
520
+ }
521
+ const operations = [];
522
+ // Include recent adds
523
+ for (const element of this.elements.values()) {
524
+ if (element.addedBy === this.replicaId) {
525
+ operations.push({
526
+ op: types_1.DeltaOpType.Add,
527
+ key: element.tag,
528
+ value: {
529
+ elements: [{
530
+ tag: element.tag,
531
+ value: element.value,
532
+ addedBy: element.addedBy,
533
+ addedAt: element.addedAt,
534
+ }],
535
+ tombstones: [],
536
+ },
537
+ tag: element.tag,
538
+ replica: element.addedBy,
539
+ });
540
+ }
541
+ }
542
+ // Include recent removes
543
+ for (const [tag, tombstone] of this.tombstones) {
544
+ if (tombstone.deletedBy === this.replicaId) {
545
+ operations.push({
546
+ op: types_1.DeltaOpType.Remove,
547
+ key: tag,
548
+ tag,
549
+ replica: tombstone.deletedBy,
550
+ });
551
+ }
552
+ }
553
+ if (operations.length === 0) {
554
+ return null;
555
+ }
556
+ const delta = {
557
+ crdtId: this.id,
558
+ type: types_1.CRDTType.ORSet,
559
+ origin: this.replicaId,
560
+ vectorClock: this.vectorClock.serialize(),
561
+ operations,
562
+ sequenceNumber: this.sequenceNumber,
563
+ generatedAt: Date.now(),
564
+ };
565
+ // Update last delta clock
566
+ this.lastDeltaClock = this.vectorClock.clone();
567
+ return delta;
568
+ }
569
+ /**
570
+ * Apply a delta update
571
+ *
572
+ * @param delta - Delta to apply
573
+ * @returns True if applied successfully
574
+ */
575
+ applyDelta(delta) {
576
+ if (delta.type !== types_1.CRDTType.ORSet) {
577
+ return false;
578
+ }
579
+ if (delta.crdtId !== this.id) {
580
+ return false;
581
+ }
582
+ let changed = false;
583
+ const now = Date.now();
584
+ for (const op of delta.operations) {
585
+ if (op.op === types_1.DeltaOpType.Add && op.value && op.tag) {
586
+ const el = op.value.elements[0];
587
+ if (el && !this.elements.has(op.tag) && !this.tombstones.has(op.tag)) {
588
+ this.elements.set(op.tag, {
589
+ value: el.value,
590
+ tag: el.tag,
591
+ addedBy: el.addedBy,
592
+ addedAt: el.addedAt,
593
+ });
594
+ changed = true;
595
+ }
596
+ }
597
+ else if (op.op === types_1.DeltaOpType.Remove && op.tag) {
598
+ if (this.elements.has(op.tag)) {
599
+ this.elements.delete(op.tag);
600
+ const tombstone = {
601
+ id: `ts-${op.tag}`,
602
+ elementId: op.tag,
603
+ crdtId: this.id,
604
+ deletedBy: op.replica,
605
+ vectorClock: delta.vectorClock,
606
+ createdAt: now,
607
+ expiresAt: now + this.tombstoneTtl,
608
+ collected: false,
609
+ };
610
+ this.tombstones.set(op.tag, tombstone);
611
+ changed = true;
612
+ }
613
+ }
614
+ }
615
+ if (changed) {
616
+ const deltaClock = VectorClock_1.VectorClock.fromSerialized(delta.vectorClock, this.replicaId);
617
+ this.vectorClock.merge(deltaClock);
618
+ this.metadata.updatedAt = now;
619
+ this.metadata.lastModifiedBy = delta.origin;
620
+ }
621
+ return changed;
622
+ }
623
+ // ============================================
624
+ // Garbage Collection
625
+ // ============================================
626
+ /**
627
+ * Garbage collect expired tombstones
628
+ *
629
+ * @returns Number of tombstones collected
630
+ */
631
+ gcTombstones() {
632
+ const now = Date.now();
633
+ let collected = 0;
634
+ for (const [tag, tombstone] of this.tombstones) {
635
+ if (tombstone.expiresAt <= now) {
636
+ this.tombstones.delete(tag);
637
+ collected++;
638
+ }
639
+ }
640
+ return collected;
641
+ }
642
+ /**
643
+ * Get tombstone count
644
+ *
645
+ * @returns Number of tombstones
646
+ */
647
+ getTombstoneCount() {
648
+ return this.tombstones.size;
649
+ }
650
+ // ============================================
651
+ // Utility Methods
652
+ // ============================================
653
+ /**
654
+ * Create a deep copy of this set
655
+ *
656
+ * @returns Cloned set
657
+ */
658
+ clone() {
659
+ const cloned = new ORSet(this.replicaId, this.id, {
660
+ tombstoneTtl: this.tombstoneTtl,
661
+ compareValues: this.compareValues,
662
+ });
663
+ cloned.elements = new Map(this.elements);
664
+ cloned.tombstones = new Map(this.tombstones);
665
+ cloned.vectorClock = this.vectorClock.clone();
666
+ cloned.metadata = { ...this.metadata };
667
+ cloned.sequenceNumber = this.sequenceNumber;
668
+ cloned.lastDeltaClock = this.lastDeltaClock.clone();
669
+ return cloned;
670
+ }
671
+ /**
672
+ * Get the set ID
673
+ *
674
+ * @returns Set ID
675
+ */
676
+ getId() {
677
+ return this.id;
678
+ }
679
+ /**
680
+ * Get the local replica ID
681
+ *
682
+ * @returns Replica ID
683
+ */
684
+ getReplicaId() {
685
+ return this.replicaId;
686
+ }
687
+ /**
688
+ * Get the vector clock
689
+ *
690
+ * @returns Vector clock copy
691
+ */
692
+ getVectorClock() {
693
+ return this.vectorClock.clone();
694
+ }
695
+ /**
696
+ * Get metadata
697
+ *
698
+ * @returns Metadata copy
699
+ */
700
+ getMetadata() {
701
+ return { ...this.metadata };
702
+ }
703
+ /**
704
+ * Iterate over elements
705
+ */
706
+ *[Symbol.iterator]() {
707
+ for (const element of this.elements.values()) {
708
+ yield element.value;
709
+ }
710
+ }
711
+ /**
712
+ * String representation for debugging
713
+ *
714
+ * @returns Debug string
715
+ */
716
+ toString() {
717
+ const values = this.values().map(v => JSON.stringify(v)).slice(0, 5);
718
+ const more = this.size() > 5 ? `... +${this.size() - 5}` : '';
719
+ return `ORSet{id=${this.id}, values=[${values.join(', ')}${more}], tombstones=${this.tombstones.size}}`;
720
+ }
721
+ }
722
+ exports.ORSet = ORSet;
723
+ //# sourceMappingURL=ORSet.js.map