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.
- package/CHANGELOG.md +104 -0
- package/README.md +67 -2
- package/dist/cli/commands/agent/spawn.d.ts +12 -1
- package/dist/cli/commands/agent/spawn.d.ts.map +1 -1
- package/dist/cli/commands/agent/spawn.js +95 -8
- package/dist/cli/commands/agent/spawn.js.map +1 -1
- package/dist/cli/index.js +91 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/edge/adapters/BrowserHNSWAdapter.d.ts +134 -0
- package/dist/edge/adapters/BrowserHNSWAdapter.d.ts.map +1 -0
- package/dist/edge/adapters/BrowserHNSWAdapter.js +484 -0
- package/dist/edge/adapters/BrowserHNSWAdapter.js.map +1 -0
- package/dist/edge/adapters/IndexedDBStorage.d.ts +114 -0
- package/dist/edge/adapters/IndexedDBStorage.d.ts.map +1 -0
- package/dist/edge/adapters/IndexedDBStorage.js +478 -0
- package/dist/edge/adapters/IndexedDBStorage.js.map +1 -0
- package/dist/edge/adapters/index.d.ts +12 -0
- package/dist/edge/adapters/index.d.ts.map +1 -0
- package/dist/edge/adapters/index.js +22 -0
- package/dist/edge/adapters/index.js.map +1 -0
- package/dist/edge/browser/BrowserAgent.d.ts +241 -0
- package/dist/edge/browser/BrowserAgent.d.ts.map +1 -0
- package/dist/edge/browser/BrowserAgent.js +743 -0
- package/dist/edge/browser/BrowserAgent.js.map +1 -0
- package/dist/edge/index.d.ts +34 -0
- package/dist/edge/index.d.ts.map +1 -0
- package/dist/edge/index.js +114 -0
- package/dist/edge/index.js.map +1 -0
- package/dist/edge/p2p/coordination/CoordinationManager.d.ts +181 -0
- package/dist/edge/p2p/coordination/CoordinationManager.d.ts.map +1 -0
- package/dist/edge/p2p/coordination/CoordinationManager.js +851 -0
- package/dist/edge/p2p/coordination/CoordinationManager.js.map +1 -0
- package/dist/edge/p2p/coordination/HealthMonitor.d.ts +143 -0
- package/dist/edge/p2p/coordination/HealthMonitor.d.ts.map +1 -0
- package/dist/edge/p2p/coordination/HealthMonitor.js +432 -0
- package/dist/edge/p2p/coordination/HealthMonitor.js.map +1 -0
- package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts +146 -0
- package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts.map +1 -0
- package/dist/edge/p2p/coordination/SyncOrchestrator.js +783 -0
- package/dist/edge/p2p/coordination/SyncOrchestrator.js.map +1 -0
- package/dist/edge/p2p/coordination/index.d.ts +70 -0
- package/dist/edge/p2p/coordination/index.d.ts.map +1 -0
- package/dist/edge/p2p/coordination/index.js +107 -0
- package/dist/edge/p2p/coordination/index.js.map +1 -0
- package/dist/edge/p2p/coordination/types.d.ts +572 -0
- package/dist/edge/p2p/coordination/types.d.ts.map +1 -0
- package/dist/edge/p2p/coordination/types.js +366 -0
- package/dist/edge/p2p/coordination/types.js.map +1 -0
- package/dist/edge/p2p/crdt/CRDTStore.d.ts +324 -0
- package/dist/edge/p2p/crdt/CRDTStore.d.ts.map +1 -0
- package/dist/edge/p2p/crdt/CRDTStore.js +839 -0
- package/dist/edge/p2p/crdt/CRDTStore.js.map +1 -0
- package/dist/edge/p2p/crdt/GCounter.d.ts +173 -0
- package/dist/edge/p2p/crdt/GCounter.d.ts.map +1 -0
- package/dist/edge/p2p/crdt/GCounter.js +394 -0
- package/dist/edge/p2p/crdt/GCounter.js.map +1 -0
- package/dist/edge/p2p/crdt/LWWRegister.d.ts +200 -0
- package/dist/edge/p2p/crdt/LWWRegister.d.ts.map +1 -0
- package/dist/edge/p2p/crdt/LWWRegister.js +456 -0
- package/dist/edge/p2p/crdt/LWWRegister.js.map +1 -0
- package/dist/edge/p2p/crdt/ORSet.d.ts +232 -0
- package/dist/edge/p2p/crdt/ORSet.d.ts.map +1 -0
- package/dist/edge/p2p/crdt/ORSet.js +723 -0
- package/dist/edge/p2p/crdt/ORSet.js.map +1 -0
- package/dist/edge/p2p/crdt/PatternCRDT.d.ts +366 -0
- package/dist/edge/p2p/crdt/PatternCRDT.d.ts.map +1 -0
- package/dist/edge/p2p/crdt/PatternCRDT.js +838 -0
- package/dist/edge/p2p/crdt/PatternCRDT.js.map +1 -0
- package/dist/edge/p2p/crdt/VectorClock.d.ts +274 -0
- package/dist/edge/p2p/crdt/VectorClock.d.ts.map +1 -0
- package/dist/edge/p2p/crdt/VectorClock.js +499 -0
- package/dist/edge/p2p/crdt/VectorClock.js.map +1 -0
- package/dist/edge/p2p/crdt/index.d.ts +87 -0
- package/dist/edge/p2p/crdt/index.d.ts.map +1 -0
- package/dist/edge/p2p/crdt/index.js +120 -0
- package/dist/edge/p2p/crdt/index.js.map +1 -0
- package/dist/edge/p2p/crdt/types.d.ts +667 -0
- package/dist/edge/p2p/crdt/types.d.ts.map +1 -0
- package/dist/edge/p2p/crdt/types.js +208 -0
- package/dist/edge/p2p/crdt/types.js.map +1 -0
- package/dist/edge/p2p/crypto/Identity.d.ts +139 -0
- package/dist/edge/p2p/crypto/Identity.d.ts.map +1 -0
- package/dist/edge/p2p/crypto/Identity.js +449 -0
- package/dist/edge/p2p/crypto/Identity.js.map +1 -0
- package/dist/edge/p2p/crypto/KeyManager.d.ts +196 -0
- package/dist/edge/p2p/crypto/KeyManager.d.ts.map +1 -0
- package/dist/edge/p2p/crypto/KeyManager.js +576 -0
- package/dist/edge/p2p/crypto/KeyManager.js.map +1 -0
- package/dist/edge/p2p/crypto/Signer.d.ts +164 -0
- package/dist/edge/p2p/crypto/Signer.d.ts.map +1 -0
- package/dist/edge/p2p/crypto/Signer.js +357 -0
- package/dist/edge/p2p/crypto/Signer.js.map +1 -0
- package/dist/edge/p2p/crypto/index.d.ts +90 -0
- package/dist/edge/p2p/crypto/index.d.ts.map +1 -0
- package/dist/edge/p2p/crypto/index.js +158 -0
- package/dist/edge/p2p/crypto/index.js.map +1 -0
- package/dist/edge/p2p/crypto/types.d.ts +217 -0
- package/dist/edge/p2p/crypto/types.d.ts.map +1 -0
- package/dist/edge/p2p/crypto/types.js +42 -0
- package/dist/edge/p2p/crypto/types.js.map +1 -0
- package/dist/edge/p2p/federated/FederatedCoordinator.d.ts +270 -0
- package/dist/edge/p2p/federated/FederatedCoordinator.d.ts.map +1 -0
- package/dist/edge/p2p/federated/FederatedCoordinator.js +824 -0
- package/dist/edge/p2p/federated/FederatedCoordinator.js.map +1 -0
- package/dist/edge/p2p/federated/FederatedRound.d.ts +295 -0
- package/dist/edge/p2p/federated/FederatedRound.d.ts.map +1 -0
- package/dist/edge/p2p/federated/FederatedRound.js +819 -0
- package/dist/edge/p2p/federated/FederatedRound.js.map +1 -0
- package/dist/edge/p2p/federated/GradientAggregator.d.ts +226 -0
- package/dist/edge/p2p/federated/GradientAggregator.d.ts.map +1 -0
- package/dist/edge/p2p/federated/GradientAggregator.js +826 -0
- package/dist/edge/p2p/federated/GradientAggregator.js.map +1 -0
- package/dist/edge/p2p/federated/ModelManager.d.ts +248 -0
- package/dist/edge/p2p/federated/ModelManager.d.ts.map +1 -0
- package/dist/edge/p2p/federated/ModelManager.js +724 -0
- package/dist/edge/p2p/federated/ModelManager.js.map +1 -0
- package/dist/edge/p2p/federated/index.d.ts +65 -0
- package/dist/edge/p2p/federated/index.d.ts.map +1 -0
- package/dist/edge/p2p/federated/index.js +110 -0
- package/dist/edge/p2p/federated/index.js.map +1 -0
- package/dist/edge/p2p/federated/types.d.ts +905 -0
- package/dist/edge/p2p/federated/types.d.ts.map +1 -0
- package/dist/edge/p2p/federated/types.js +339 -0
- package/dist/edge/p2p/federated/types.js.map +1 -0
- package/dist/edge/p2p/index.d.ts +156 -0
- package/dist/edge/p2p/index.d.ts.map +1 -0
- package/dist/edge/p2p/index.js +242 -0
- package/dist/edge/p2p/index.js.map +1 -0
- package/dist/edge/p2p/nat/ConnectivityTester.d.ts +128 -0
- package/dist/edge/p2p/nat/ConnectivityTester.d.ts.map +1 -0
- package/dist/edge/p2p/nat/ConnectivityTester.js +560 -0
- package/dist/edge/p2p/nat/ConnectivityTester.js.map +1 -0
- package/dist/edge/p2p/nat/HolePuncher.d.ts +159 -0
- package/dist/edge/p2p/nat/HolePuncher.d.ts.map +1 -0
- package/dist/edge/p2p/nat/HolePuncher.js +569 -0
- package/dist/edge/p2p/nat/HolePuncher.js.map +1 -0
- package/dist/edge/p2p/nat/NATDetector.d.ts +109 -0
- package/dist/edge/p2p/nat/NATDetector.d.ts.map +1 -0
- package/dist/edge/p2p/nat/NATDetector.js +472 -0
- package/dist/edge/p2p/nat/NATDetector.js.map +1 -0
- package/dist/edge/p2p/nat/TURNManager.d.ts +158 -0
- package/dist/edge/p2p/nat/TURNManager.d.ts.map +1 -0
- package/dist/edge/p2p/nat/TURNManager.js +547 -0
- package/dist/edge/p2p/nat/TURNManager.js.map +1 -0
- package/dist/edge/p2p/nat/index.d.ts +74 -0
- package/dist/edge/p2p/nat/index.d.ts.map +1 -0
- package/dist/edge/p2p/nat/index.js +104 -0
- package/dist/edge/p2p/nat/index.js.map +1 -0
- package/dist/edge/p2p/nat/types.d.ts +583 -0
- package/dist/edge/p2p/nat/types.d.ts.map +1 -0
- package/dist/edge/p2p/nat/types.js +267 -0
- package/dist/edge/p2p/nat/types.js.map +1 -0
- package/dist/edge/p2p/protocol/AgentChannel.d.ts +333 -0
- package/dist/edge/p2p/protocol/AgentChannel.d.ts.map +1 -0
- package/dist/edge/p2p/protocol/AgentChannel.js +914 -0
- package/dist/edge/p2p/protocol/AgentChannel.js.map +1 -0
- package/dist/edge/p2p/protocol/MessageEncoder.d.ts +147 -0
- package/dist/edge/p2p/protocol/MessageEncoder.d.ts.map +1 -0
- package/dist/edge/p2p/protocol/MessageEncoder.js +738 -0
- package/dist/edge/p2p/protocol/MessageEncoder.js.map +1 -0
- package/dist/edge/p2p/protocol/MessageRouter.d.ts +266 -0
- package/dist/edge/p2p/protocol/MessageRouter.d.ts.map +1 -0
- package/dist/edge/p2p/protocol/MessageRouter.js +808 -0
- package/dist/edge/p2p/protocol/MessageRouter.js.map +1 -0
- package/dist/edge/p2p/protocol/ProtocolHandler.d.ts +309 -0
- package/dist/edge/p2p/protocol/ProtocolHandler.d.ts.map +1 -0
- package/dist/edge/p2p/protocol/ProtocolHandler.js +930 -0
- package/dist/edge/p2p/protocol/ProtocolHandler.js.map +1 -0
- package/dist/edge/p2p/protocol/index.d.ts +114 -0
- package/dist/edge/p2p/protocol/index.d.ts.map +1 -0
- package/dist/edge/p2p/protocol/index.js +206 -0
- package/dist/edge/p2p/protocol/index.js.map +1 -0
- package/dist/edge/p2p/protocol/types.d.ts +737 -0
- package/dist/edge/p2p/protocol/types.d.ts.map +1 -0
- package/dist/edge/p2p/protocol/types.js +490 -0
- package/dist/edge/p2p/protocol/types.js.map +1 -0
- package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts +284 -0
- package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts.map +1 -0
- package/dist/edge/p2p/sharing/PatternBroadcaster.js +644 -0
- package/dist/edge/p2p/sharing/PatternBroadcaster.js.map +1 -0
- package/dist/edge/p2p/sharing/PatternIndex.d.ts +168 -0
- package/dist/edge/p2p/sharing/PatternIndex.d.ts.map +1 -0
- package/dist/edge/p2p/sharing/PatternIndex.js +781 -0
- package/dist/edge/p2p/sharing/PatternIndex.js.map +1 -0
- package/dist/edge/p2p/sharing/PatternSerializer.d.ts +163 -0
- package/dist/edge/p2p/sharing/PatternSerializer.d.ts.map +1 -0
- package/dist/edge/p2p/sharing/PatternSerializer.js +696 -0
- package/dist/edge/p2p/sharing/PatternSerializer.js.map +1 -0
- package/dist/edge/p2p/sharing/PatternSyncManager.d.ts +242 -0
- package/dist/edge/p2p/sharing/PatternSyncManager.d.ts.map +1 -0
- package/dist/edge/p2p/sharing/PatternSyncManager.js +859 -0
- package/dist/edge/p2p/sharing/PatternSyncManager.js.map +1 -0
- package/dist/edge/p2p/sharing/index.d.ts +90 -0
- package/dist/edge/p2p/sharing/index.d.ts.map +1 -0
- package/dist/edge/p2p/sharing/index.js +152 -0
- package/dist/edge/p2p/sharing/index.js.map +1 -0
- package/dist/edge/p2p/sharing/types.d.ts +796 -0
- package/dist/edge/p2p/sharing/types.d.ts.map +1 -0
- package/dist/edge/p2p/sharing/types.js +264 -0
- package/dist/edge/p2p/sharing/types.js.map +1 -0
- package/dist/edge/p2p/webrtc/ConnectionPool.d.ts +218 -0
- package/dist/edge/p2p/webrtc/ConnectionPool.d.ts.map +1 -0
- package/dist/edge/p2p/webrtc/ConnectionPool.js +562 -0
- package/dist/edge/p2p/webrtc/ConnectionPool.js.map +1 -0
- package/dist/edge/p2p/webrtc/ICEManager.d.ts +171 -0
- package/dist/edge/p2p/webrtc/ICEManager.d.ts.map +1 -0
- package/dist/edge/p2p/webrtc/ICEManager.js +490 -0
- package/dist/edge/p2p/webrtc/ICEManager.js.map +1 -0
- package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts +159 -0
- package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts.map +1 -0
- package/dist/edge/p2p/webrtc/PeerConnectionManager.js +735 -0
- package/dist/edge/p2p/webrtc/PeerConnectionManager.js.map +1 -0
- package/dist/edge/p2p/webrtc/SignalingClient.d.ts +191 -0
- package/dist/edge/p2p/webrtc/SignalingClient.d.ts.map +1 -0
- package/dist/edge/p2p/webrtc/SignalingClient.js +608 -0
- package/dist/edge/p2p/webrtc/SignalingClient.js.map +1 -0
- package/dist/edge/p2p/webrtc/index.d.ts +158 -0
- package/dist/edge/p2p/webrtc/index.d.ts.map +1 -0
- package/dist/edge/p2p/webrtc/index.js +164 -0
- package/dist/edge/p2p/webrtc/index.js.map +1 -0
- package/dist/edge/p2p/webrtc/types.d.ts +665 -0
- package/dist/edge/p2p/webrtc/types.d.ts.map +1 -0
- package/dist/edge/p2p/webrtc/types.js +245 -0
- package/dist/edge/p2p/webrtc/types.js.map +1 -0
- package/dist/edge/server/AgentSpawnAPI.d.ts +98 -0
- package/dist/edge/server/AgentSpawnAPI.d.ts.map +1 -0
- package/dist/edge/server/AgentSpawnAPI.js +264 -0
- package/dist/edge/server/AgentSpawnAPI.js.map +1 -0
- package/dist/edge/server/SignalingServer.d.ts +71 -0
- package/dist/edge/server/SignalingServer.d.ts.map +1 -0
- package/dist/edge/server/SignalingServer.js +429 -0
- package/dist/edge/server/SignalingServer.js.map +1 -0
- package/dist/edge/server/index.d.ts +64 -0
- package/dist/edge/server/index.d.ts.map +1 -0
- package/dist/edge/server/index.js +318 -0
- package/dist/edge/server/index.js.map +1 -0
- package/dist/edge/types/browser-agent.types.d.ts +455 -0
- package/dist/edge/types/browser-agent.types.d.ts.map +1 -0
- package/dist/edge/types/browser-agent.types.js +116 -0
- package/dist/edge/types/browser-agent.types.js.map +1 -0
- package/dist/edge/types/index.d.ts +11 -0
- package/dist/edge/types/index.d.ts.map +1 -0
- package/dist/edge/types/index.js +17 -0
- package/dist/edge/types/index.js.map +1 -0
- package/dist/edge/types/storage.types.d.ts +207 -0
- package/dist/edge/types/storage.types.d.ts.map +1 -0
- package/dist/edge/types/storage.types.js +47 -0
- package/dist/edge/types/storage.types.js.map +1 -0
- package/dist/edge/wasm/shims.d.ts +224 -0
- package/dist/edge/wasm/shims.d.ts.map +1 -0
- package/dist/edge/wasm/shims.js +667 -0
- package/dist/edge/wasm/shims.js.map +1 -0
- package/dist/mcp/handlers/NewDomainToolsHandler.d.ts +33 -0
- package/dist/mcp/handlers/NewDomainToolsHandler.d.ts.map +1 -0
- package/dist/mcp/handlers/NewDomainToolsHandler.js +305 -0
- package/dist/mcp/handlers/NewDomainToolsHandler.js.map +1 -0
- package/dist/mcp/handlers/filtered/index.d.ts +15 -19
- package/dist/mcp/handlers/filtered/index.d.ts.map +1 -1
- package/dist/mcp/handlers/filtered/index.js +16 -27
- package/dist/mcp/handlers/filtered/index.js.map +1 -1
- package/dist/mcp/handlers/integration/index.d.ts +5 -4
- package/dist/mcp/handlers/integration/index.d.ts.map +1 -1
- package/dist/mcp/handlers/integration/index.js +7 -7
- package/dist/mcp/handlers/integration/index.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +14 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +8 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +412 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/planning/GOAPPlanner.d.ts +1 -0
- package/dist/planning/GOAPPlanner.d.ts.map +1 -1
- package/dist/planning/GOAPPlanner.js +12 -0
- package/dist/planning/GOAPPlanner.js.map +1 -1
- package/package.json +29 -8
- package/dist/alerting/AlertManager.d.ts +0 -120
- package/dist/alerting/AlertManager.d.ts.map +0 -1
- package/dist/alerting/AlertManager.js +0 -345
- package/dist/alerting/AlertManager.js.map +0 -1
- package/dist/alerting/FeedbackRouter.d.ts +0 -98
- package/dist/alerting/FeedbackRouter.d.ts.map +0 -1
- package/dist/alerting/FeedbackRouter.js +0 -331
- package/dist/alerting/FeedbackRouter.js.map +0 -1
- package/dist/alerting/StrategyApplicator.d.ts +0 -120
- package/dist/alerting/StrategyApplicator.d.ts.map +0 -1
- package/dist/alerting/StrategyApplicator.js +0 -299
- package/dist/alerting/StrategyApplicator.js.map +0 -1
- package/dist/alerting/index.d.ts +0 -68
- package/dist/alerting/index.d.ts.map +0 -1
- package/dist/alerting/index.js +0 -112
- package/dist/alerting/index.js.map +0 -1
- package/dist/alerting/types.d.ts +0 -118
- package/dist/alerting/types.d.ts.map +0 -1
- package/dist/alerting/types.js +0 -11
- package/dist/alerting/types.js.map +0 -1
- package/dist/cli/commands/fleet/backup.d.ts +0 -49
- package/dist/cli/commands/fleet/backup.d.ts.map +0 -1
- package/dist/cli/commands/fleet/backup.js +0 -88
- package/dist/cli/commands/fleet/backup.js.map +0 -1
- package/dist/cli/commands/fleet/health.d.ts +0 -154
- package/dist/cli/commands/fleet/health.d.ts.map +0 -1
- package/dist/cli/commands/fleet/health.js +0 -483
- package/dist/cli/commands/fleet/health.js.map +0 -1
- package/dist/cli/commands/fleet/init.d.ts +0 -11
- package/dist/cli/commands/fleet/init.d.ts.map +0 -1
- package/dist/cli/commands/fleet/init.js +0 -91
- package/dist/cli/commands/fleet/init.js.map +0 -1
- package/dist/cli/commands/fleet/logs.d.ts +0 -21
- package/dist/cli/commands/fleet/logs.d.ts.map +0 -1
- package/dist/cli/commands/fleet/logs.js +0 -267
- package/dist/cli/commands/fleet/logs.js.map +0 -1
- package/dist/cli/commands/fleet/metrics.d.ts +0 -27
- package/dist/cli/commands/fleet/metrics.d.ts.map +0 -1
- package/dist/cli/commands/fleet/metrics.js +0 -369
- package/dist/cli/commands/fleet/metrics.js.map +0 -1
- package/dist/cli/commands/fleet/monitor.d.ts +0 -18
- package/dist/cli/commands/fleet/monitor.d.ts.map +0 -1
- package/dist/cli/commands/fleet/monitor.js +0 -237
- package/dist/cli/commands/fleet/monitor.js.map +0 -1
- package/dist/cli/commands/fleet/optimize.d.ts +0 -42
- package/dist/cli/commands/fleet/optimize.d.ts.map +0 -1
- package/dist/cli/commands/fleet/optimize.js +0 -135
- package/dist/cli/commands/fleet/optimize.js.map +0 -1
- package/dist/cli/commands/fleet/recover.d.ts +0 -22
- package/dist/cli/commands/fleet/recover.d.ts.map +0 -1
- package/dist/cli/commands/fleet/recover.js +0 -99
- package/dist/cli/commands/fleet/recover.js.map +0 -1
- package/dist/cli/commands/fleet/restart.d.ts +0 -18
- package/dist/cli/commands/fleet/restart.d.ts.map +0 -1
- package/dist/cli/commands/fleet/restart.js +0 -290
- package/dist/cli/commands/fleet/restart.js.map +0 -1
- package/dist/cli/commands/fleet/scale.d.ts +0 -9
- package/dist/cli/commands/fleet/scale.d.ts.map +0 -1
- package/dist/cli/commands/fleet/scale.js +0 -77
- package/dist/cli/commands/fleet/scale.js.map +0 -1
- package/dist/cli/commands/fleet/shutdown.d.ts +0 -19
- package/dist/cli/commands/fleet/shutdown.d.ts.map +0 -1
- package/dist/cli/commands/fleet/shutdown.js +0 -307
- package/dist/cli/commands/fleet/shutdown.js.map +0 -1
- package/dist/cli/commands/fleet/status.d.ts +0 -10
- package/dist/cli/commands/fleet/status.d.ts.map +0 -1
- package/dist/cli/commands/fleet/status.js +0 -97
- package/dist/cli/commands/fleet/status.js.map +0 -1
- package/dist/cli/commands/fleet/topology.d.ts +0 -23
- package/dist/cli/commands/fleet/topology.d.ts.map +0 -1
- package/dist/cli/commands/fleet/topology.js +0 -376
- package/dist/cli/commands/fleet/topology.js.map +0 -1
- package/dist/cli/commands/monitor/alerts.d.ts +0 -45
- package/dist/cli/commands/monitor/alerts.d.ts.map +0 -1
- package/dist/cli/commands/monitor/alerts.js +0 -168
- package/dist/cli/commands/monitor/alerts.js.map +0 -1
- package/dist/cli/commands/monitor/analyze.d.ts +0 -49
- package/dist/cli/commands/monitor/analyze.d.ts.map +0 -1
- package/dist/cli/commands/monitor/analyze.js +0 -209
- package/dist/cli/commands/monitor/analyze.js.map +0 -1
- package/dist/cli/commands/monitor/compare.d.ts +0 -38
- package/dist/cli/commands/monitor/compare.d.ts.map +0 -1
- package/dist/cli/commands/monitor/compare.js +0 -177
- package/dist/cli/commands/monitor/compare.js.map +0 -1
- package/dist/cli/commands/monitor/dashboard.d.ts +0 -34
- package/dist/cli/commands/monitor/dashboard.d.ts.map +0 -1
- package/dist/cli/commands/monitor/dashboard.js +0 -157
- package/dist/cli/commands/monitor/dashboard.js.map +0 -1
- package/dist/cli/commands/monitor/export.d.ts +0 -36
- package/dist/cli/commands/monitor/export.d.ts.map +0 -1
- package/dist/cli/commands/monitor/export.js +0 -157
- package/dist/cli/commands/monitor/export.js.map +0 -1
- package/dist/cli/commands/monitor/index.d.ts +0 -11
- package/dist/cli/commands/monitor/index.d.ts.map +0 -1
- package/dist/cli/commands/monitor/index.js +0 -14
- package/dist/cli/commands/monitor/index.js.map +0 -1
- package/dist/cli/commands/quality/baseline.d.ts +0 -27
- package/dist/cli/commands/quality/baseline.d.ts.map +0 -1
- package/dist/cli/commands/quality/baseline.js +0 -124
- package/dist/cli/commands/quality/baseline.js.map +0 -1
- package/dist/cli/commands/quality/compare.d.ts +0 -36
- package/dist/cli/commands/quality/compare.d.ts.map +0 -1
- package/dist/cli/commands/quality/compare.js +0 -136
- package/dist/cli/commands/quality/compare.js.map +0 -1
- package/dist/cli/commands/quality/decision.d.ts +0 -81
- package/dist/cli/commands/quality/decision.d.ts.map +0 -1
- package/dist/cli/commands/quality/decision.js +0 -319
- package/dist/cli/commands/quality/decision.js.map +0 -1
- package/dist/cli/commands/quality/gate.d.ts +0 -47
- package/dist/cli/commands/quality/gate.d.ts.map +0 -1
- package/dist/cli/commands/quality/gate.js +0 -205
- package/dist/cli/commands/quality/gate.js.map +0 -1
- package/dist/cli/commands/quality/index.d.ts +0 -17
- package/dist/cli/commands/quality/index.d.ts.map +0 -1
- package/dist/cli/commands/quality/index.js +0 -41
- package/dist/cli/commands/quality/index.js.map +0 -1
- package/dist/cli/commands/quality/policy.d.ts +0 -57
- package/dist/cli/commands/quality/policy.d.ts.map +0 -1
- package/dist/cli/commands/quality/policy.js +0 -359
- package/dist/cli/commands/quality/policy.js.map +0 -1
- package/dist/cli/commands/quality/risk.d.ts +0 -41
- package/dist/cli/commands/quality/risk.d.ts.map +0 -1
- package/dist/cli/commands/quality/risk.js +0 -255
- package/dist/cli/commands/quality/risk.js.map +0 -1
- package/dist/cli/commands/quality/trends.d.ts +0 -40
- package/dist/cli/commands/quality/trends.d.ts.map +0 -1
- package/dist/cli/commands/quality/trends.js +0 -122
- package/dist/cli/commands/quality/trends.js.map +0 -1
- package/dist/cli/commands/quality/validate.d.ts +0 -44
- package/dist/cli/commands/quality/validate.d.ts.map +0 -1
- package/dist/cli/commands/quality/validate.js +0 -234
- package/dist/cli/commands/quality/validate.js.map +0 -1
- package/dist/cli/commands/test/analyze-failures.d.ts +0 -39
- package/dist/cli/commands/test/analyze-failures.d.ts.map +0 -1
- package/dist/cli/commands/test/analyze-failures.js +0 -113
- package/dist/cli/commands/test/analyze-failures.js.map +0 -1
- package/dist/cli/commands/test/clean.d.ts +0 -3
- package/dist/cli/commands/test/clean.d.ts.map +0 -1
- package/dist/cli/commands/test/clean.js +0 -148
- package/dist/cli/commands/test/clean.js.map +0 -1
- package/dist/cli/commands/test/debug.d.ts +0 -3
- package/dist/cli/commands/test/debug.d.ts.map +0 -1
- package/dist/cli/commands/test/debug.js +0 -167
- package/dist/cli/commands/test/debug.js.map +0 -1
- package/dist/cli/commands/test/diff.d.ts +0 -3
- package/dist/cli/commands/test/diff.d.ts.map +0 -1
- package/dist/cli/commands/test/diff.js +0 -195
- package/dist/cli/commands/test/diff.js.map +0 -1
- package/dist/cli/commands/test/flakiness.d.ts +0 -32
- package/dist/cli/commands/test/flakiness.d.ts.map +0 -1
- package/dist/cli/commands/test/flakiness.js +0 -121
- package/dist/cli/commands/test/flakiness.js.map +0 -1
- package/dist/cli/commands/test/index.d.ts +0 -17
- package/dist/cli/commands/test/index.d.ts.map +0 -1
- package/dist/cli/commands/test/index.js +0 -45
- package/dist/cli/commands/test/index.js.map +0 -1
- package/dist/cli/commands/test/mutate.d.ts +0 -29
- package/dist/cli/commands/test/mutate.d.ts.map +0 -1
- package/dist/cli/commands/test/mutate.js +0 -163
- package/dist/cli/commands/test/mutate.js.map +0 -1
- package/dist/cli/commands/test/parallel.d.ts +0 -3
- package/dist/cli/commands/test/parallel.d.ts.map +0 -1
- package/dist/cli/commands/test/parallel.js +0 -117
- package/dist/cli/commands/test/parallel.js.map +0 -1
- package/dist/cli/commands/test/profile.d.ts +0 -3
- package/dist/cli/commands/test/profile.d.ts.map +0 -1
- package/dist/cli/commands/test/profile.js +0 -156
- package/dist/cli/commands/test/profile.js.map +0 -1
- package/dist/cli/commands/test/queue.d.ts +0 -3
- package/dist/cli/commands/test/queue.d.ts.map +0 -1
- package/dist/cli/commands/test/queue.js +0 -140
- package/dist/cli/commands/test/queue.js.map +0 -1
- package/dist/cli/commands/test/retry.d.ts +0 -3
- package/dist/cli/commands/test/retry.d.ts.map +0 -1
- package/dist/cli/commands/test/retry.js +0 -105
- package/dist/cli/commands/test/retry.js.map +0 -1
- package/dist/cli/commands/test/snapshot.d.ts +0 -3
- package/dist/cli/commands/test/snapshot.d.ts.map +0 -1
- package/dist/cli/commands/test/snapshot.js +0 -176
- package/dist/cli/commands/test/snapshot.js.map +0 -1
- package/dist/cli/commands/test/trace.d.ts +0 -3
- package/dist/cli/commands/test/trace.d.ts.map +0 -1
- package/dist/cli/commands/test/trace.js +0 -137
- package/dist/cli/commands/test/trace.js.map +0 -1
- package/dist/cli/commands/test/watch.d.ts +0 -3
- package/dist/cli/commands/test/watch.d.ts.map +0 -1
- package/dist/cli/commands/test/watch.js +0 -130
- package/dist/cli/commands/test/watch.js.map +0 -1
- package/dist/cli/index-spec.d.ts +0 -3
- package/dist/cli/index-spec.d.ts.map +0 -1
- package/dist/cli/index-spec.js +0 -154
- package/dist/cli/index-spec.js.map +0 -1
- package/dist/cli/index-working.d.ts +0 -7
- package/dist/cli/index-working.d.ts.map +0 -1
- package/dist/cli/index-working.js +0 -617
- package/dist/cli/index-working.js.map +0 -1
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +0 -83
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +0 -1
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +0 -130
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +0 -1
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +0 -58
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +0 -1
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +0 -84
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +0 -1
- package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +0 -54
- package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +0 -1
- package/dist/mcp/handlers/filtered/security-scanner-filtered.js +0 -73
- package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +0 -1
- package/dist/mcp/handlers/integration/contract-validate.d.ts +0 -10
- package/dist/mcp/handlers/integration/contract-validate.d.ts.map +0 -1
- package/dist/mcp/handlers/integration/contract-validate.js +0 -348
- package/dist/mcp/handlers/integration/contract-validate.js.map +0 -1
- package/dist/reporting/ResultAggregator.d.ts +0 -107
- package/dist/reporting/ResultAggregator.d.ts.map +0 -1
- package/dist/reporting/ResultAggregator.js +0 -435
- package/dist/reporting/ResultAggregator.js.map +0 -1
- package/dist/reporting/index.d.ts +0 -48
- package/dist/reporting/index.d.ts.map +0 -1
- package/dist/reporting/index.js +0 -154
- package/dist/reporting/index.js.map +0 -1
- package/dist/reporting/reporters/ControlLoopReporter.d.ts +0 -128
- package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +0 -1
- package/dist/reporting/reporters/ControlLoopReporter.js +0 -417
- package/dist/reporting/reporters/ControlLoopReporter.js.map +0 -1
- package/dist/reporting/reporters/HumanReadableReporter.d.ts +0 -140
- package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +0 -1
- package/dist/reporting/reporters/HumanReadableReporter.js +0 -524
- package/dist/reporting/reporters/HumanReadableReporter.js.map +0 -1
- package/dist/reporting/reporters/JSONReporter.d.ts +0 -251
- package/dist/reporting/reporters/JSONReporter.d.ts.map +0 -1
- package/dist/reporting/reporters/JSONReporter.js +0 -325
- package/dist/reporting/reporters/JSONReporter.js.map +0 -1
- package/dist/reporting/reporters/index.d.ts +0 -14
- package/dist/reporting/reporters/index.d.ts.map +0 -1
- package/dist/reporting/reporters/index.js +0 -19
- package/dist/reporting/reporters/index.js.map +0 -1
- package/dist/reporting/types.d.ts +0 -427
- package/dist/reporting/types.d.ts.map +0 -1
- package/dist/reporting/types.js +0 -12
- 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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"}
|