@iworkforces/tracelattice 2.0.3
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/LICENSE +24 -0
- package/README.md +260 -0
- package/dist/CliLifecycle.d.ts +31 -0
- package/dist/CliLifecycle.d.ts.map +1 -0
- package/dist/CliLifecycle.js +90 -0
- package/dist/CliLifecycle.js.map +1 -0
- package/dist/ServerConfig.d.ts +290 -0
- package/dist/ServerConfig.d.ts.map +1 -0
- package/dist/ServerConfig.js +175 -0
- package/dist/ServerConfig.js.map +1 -0
- package/dist/cache/DiscoveryCache.d.ts +269 -0
- package/dist/cache/DiscoveryCache.d.ts.map +1 -0
- package/dist/cache/DiscoveryCache.js +104 -0
- package/dist/cache/DiscoveryCache.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +5177 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +270 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +186 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/context/RequestContext.d.ts +43 -0
- package/dist/context/RequestContext.d.ts.map +1 -0
- package/dist/context/RequestContext.js +14 -0
- package/dist/context/RequestContext.js.map +1 -0
- package/dist/contracts/PersistenceBackend.d.ts +134 -0
- package/dist/contracts/PersistenceBackend.d.ts.map +1 -0
- package/dist/contracts/PersistenceBackend.js +6 -0
- package/dist/contracts/PersistenceBackend.js.map +1 -0
- package/dist/contracts/calibrator.d.ts +97 -0
- package/dist/contracts/calibrator.d.ts.map +1 -0
- package/dist/contracts/calibrator.js +1 -0
- package/dist/contracts/features.d.ts +35 -0
- package/dist/contracts/features.d.ts.map +1 -0
- package/dist/contracts/features.js +12 -0
- package/dist/contracts/features.js.map +1 -0
- package/dist/contracts/ids.d.ts +68 -0
- package/dist/contracts/ids.d.ts.map +1 -0
- package/dist/contracts/ids.js +40 -0
- package/dist/contracts/ids.js.map +1 -0
- package/dist/contracts/interfaces.d.ts +254 -0
- package/dist/contracts/interfaces.d.ts.map +1 -0
- package/dist/contracts/interfaces.js +1 -0
- package/dist/contracts/persistence-work.d.ts +96 -0
- package/dist/contracts/persistence-work.d.ts.map +1 -0
- package/dist/contracts/persistence-work.js +1 -0
- package/dist/contracts/reasoning-types.d.ts +21 -0
- package/dist/contracts/reasoning-types.d.ts.map +1 -0
- package/dist/contracts/reasoning-types.js +1 -0
- package/dist/contracts/strategy.d.ts +107 -0
- package/dist/contracts/strategy.d.ts.map +1 -0
- package/dist/contracts/strategy.js +1 -0
- package/dist/contracts/summary.d.ts +110 -0
- package/dist/contracts/summary.d.ts.map +1 -0
- package/dist/contracts/summary.js +1 -0
- package/dist/contracts/suspension.d.ts +215 -0
- package/dist/contracts/suspension.d.ts.map +1 -0
- package/dist/contracts/suspension.js +1 -0
- package/dist/contracts/transport.d.ts +26 -0
- package/dist/contracts/transport.d.ts.map +1 -0
- package/dist/contracts/transport.js +1 -0
- package/dist/core/CrossReferenceValidator.d.ts +18 -0
- package/dist/core/CrossReferenceValidator.d.ts.map +1 -0
- package/dist/core/CrossReferenceValidator.js +125 -0
- package/dist/core/CrossReferenceValidator.js.map +1 -0
- package/dist/core/HistoryManager.d.ts +215 -0
- package/dist/core/HistoryManager.d.ts.map +1 -0
- package/dist/core/HistoryManager.js +594 -0
- package/dist/core/HistoryManager.js.map +1 -0
- package/dist/core/IHistoryManager.d.ts +163 -0
- package/dist/core/IHistoryManager.d.ts.map +1 -0
- package/dist/core/IHistoryManager.js +1 -0
- package/dist/core/IThoughtFormatter.d.ts +51 -0
- package/dist/core/IThoughtFormatter.d.ts.map +1 -0
- package/dist/core/IThoughtFormatter.js +1 -0
- package/dist/core/InputNormalizer.d.ts +140 -0
- package/dist/core/InputNormalizer.d.ts.map +1 -0
- package/dist/core/InputNormalizer.js +95 -0
- package/dist/core/InputNormalizer.js.map +1 -0
- package/dist/core/PersistenceBuffer.d.ts +204 -0
- package/dist/core/PersistenceBuffer.d.ts.map +1 -0
- package/dist/core/PersistenceBuffer.js +382 -0
- package/dist/core/PersistenceBuffer.js.map +1 -0
- package/dist/core/PersistenceBufferErrors.d.ts +22 -0
- package/dist/core/PersistenceBufferErrors.d.ts.map +1 -0
- package/dist/core/PersistenceBufferErrors.js +30 -0
- package/dist/core/PersistenceBufferErrors.js.map +1 -0
- package/dist/core/PersistenceRestore.d.ts +21 -0
- package/dist/core/PersistenceRestore.d.ts.map +1 -0
- package/dist/core/PersistenceRestore.js +87 -0
- package/dist/core/PersistenceRestore.js.map +1 -0
- package/dist/core/PersistenceWorkQueue.d.ts +155 -0
- package/dist/core/PersistenceWorkQueue.d.ts.map +1 -0
- package/dist/core/PersistenceWorkQueue.js +298 -0
- package/dist/core/PersistenceWorkQueue.js.map +1 -0
- package/dist/core/PersistenceWriter.d.ts +55 -0
- package/dist/core/PersistenceWriter.d.ts.map +1 -0
- package/dist/core/PersistenceWriter.js +112 -0
- package/dist/core/PersistenceWriter.js.map +1 -0
- package/dist/core/SessionErrors.d.ts +37 -0
- package/dist/core/SessionErrors.d.ts.map +1 -0
- package/dist/core/SessionErrors.js +50 -0
- package/dist/core/SessionErrors.js.map +1 -0
- package/dist/core/SessionLifecycleCoordinator.d.ts +74 -0
- package/dist/core/SessionLifecycleCoordinator.d.ts.map +1 -0
- package/dist/core/SessionLifecycleCoordinator.js +222 -0
- package/dist/core/SessionLifecycleCoordinator.js.map +1 -0
- package/dist/core/SessionLock.d.ts +59 -0
- package/dist/core/SessionLock.d.ts.map +1 -0
- package/dist/core/SessionLock.js +39 -0
- package/dist/core/SessionLock.js.map +1 -0
- package/dist/core/SessionManager.d.ts +62 -0
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/core/SessionManager.js +75 -0
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/core/SessionResetCoordinator.d.ts +37 -0
- package/dist/core/SessionResetCoordinator.d.ts.map +1 -0
- package/dist/core/SessionResetCoordinator.js +80 -0
- package/dist/core/SessionResetCoordinator.js.map +1 -0
- package/dist/core/ThoughtEvaluator.d.ts +48 -0
- package/dist/core/ThoughtEvaluator.d.ts.map +1 -0
- package/dist/core/ThoughtEvaluator.js +85 -0
- package/dist/core/ThoughtEvaluator.js.map +1 -0
- package/dist/core/ThoughtFormatter.d.ts +134 -0
- package/dist/core/ThoughtFormatter.d.ts.map +1 -0
- package/dist/core/ThoughtFormatter.js +118 -0
- package/dist/core/ThoughtFormatter.js.map +1 -0
- package/dist/core/ThoughtProcessor.d.ts +259 -0
- package/dist/core/ThoughtProcessor.d.ts.map +1 -0
- package/dist/core/ThoughtProcessor.js +451 -0
- package/dist/core/ThoughtProcessor.js.map +1 -0
- package/dist/core/ThoughtReferenceIndex.d.ts +23 -0
- package/dist/core/ThoughtReferenceIndex.d.ts.map +1 -0
- package/dist/core/ThoughtReferenceIndex.js +66 -0
- package/dist/core/ThoughtReferenceIndex.js.map +1 -0
- package/dist/core/VerificationOutcomeAdmission.d.ts +15 -0
- package/dist/core/VerificationOutcomeAdmission.d.ts.map +1 -0
- package/dist/core/VerificationOutcomeAdmission.js +28 -0
- package/dist/core/VerificationOutcomeAdmission.js.map +1 -0
- package/dist/core/compression/CompressionService.d.ts +76 -0
- package/dist/core/compression/CompressionService.d.ts.map +1 -0
- package/dist/core/compression/CompressionService.js +160 -0
- package/dist/core/compression/CompressionService.js.map +1 -0
- package/dist/core/compression/DehydrationPolicy.d.ts +75 -0
- package/dist/core/compression/DehydrationPolicy.d.ts.map +1 -0
- package/dist/core/compression/DehydrationPolicy.js +45 -0
- package/dist/core/compression/DehydrationPolicy.js.map +1 -0
- package/dist/core/compression/InMemorySummaryStore.d.ts +132 -0
- package/dist/core/compression/InMemorySummaryStore.d.ts.map +1 -0
- package/dist/core/compression/InMemorySummaryStore.js +69 -0
- package/dist/core/compression/InMemorySummaryStore.js.map +1 -0
- package/dist/core/compression/Summary.d.ts +74 -0
- package/dist/core/compression/Summary.d.ts.map +1 -0
- package/dist/core/compression/Summary.js +16 -0
- package/dist/core/compression/Summary.js.map +1 -0
- package/dist/core/evaluator/Aggregator.d.ts +40 -0
- package/dist/core/evaluator/Aggregator.d.ts.map +1 -0
- package/dist/core/evaluator/Aggregator.js +36 -0
- package/dist/core/evaluator/Aggregator.js.map +1 -0
- package/dist/core/evaluator/Calibrator.d.ts +52 -0
- package/dist/core/evaluator/Calibrator.d.ts.map +1 -0
- package/dist/core/evaluator/Calibrator.js +135 -0
- package/dist/core/evaluator/Calibrator.js.map +1 -0
- package/dist/core/evaluator/PatternDetector.d.ts +69 -0
- package/dist/core/evaluator/PatternDetector.d.ts.map +1 -0
- package/dist/core/evaluator/PatternDetector.js +192 -0
- package/dist/core/evaluator/PatternDetector.js.map +1 -0
- package/dist/core/evaluator/SignalComputer.d.ts +116 -0
- package/dist/core/evaluator/SignalComputer.d.ts.map +1 -0
- package/dist/core/evaluator/SignalComputer.js +110 -0
- package/dist/core/evaluator/SignalComputer.js.map +1 -0
- package/dist/core/evaluator/calibration-math.d.ts +39 -0
- package/dist/core/evaluator/calibration-math.d.ts.map +1 -0
- package/dist/core/evaluator/calibration-math.js +42 -0
- package/dist/core/evaluator/calibration-math.js.map +1 -0
- package/dist/core/evaluator/internals.d.ts +36 -0
- package/dist/core/evaluator/internals.d.ts.map +1 -0
- package/dist/core/evaluator/internals.js +43 -0
- package/dist/core/evaluator/internals.js.map +1 -0
- package/dist/core/graph/Edge.d.ts +58 -0
- package/dist/core/graph/Edge.d.ts.map +1 -0
- package/dist/core/graph/Edge.js +1 -0
- package/dist/core/graph/EdgeEmitter.d.ts +68 -0
- package/dist/core/graph/EdgeEmitter.d.ts.map +1 -0
- package/dist/core/graph/EdgeEmitter.js +118 -0
- package/dist/core/graph/EdgeEmitter.js.map +1 -0
- package/dist/core/graph/EdgeStore.d.ts +116 -0
- package/dist/core/graph/EdgeStore.d.ts.map +1 -0
- package/dist/core/graph/EdgeStore.js +107 -0
- package/dist/core/graph/EdgeStore.js.map +1 -0
- package/dist/core/graph/GraphView.d.ts +157 -0
- package/dist/core/graph/GraphView.d.ts.map +1 -0
- package/dist/core/graph/GraphView.js +149 -0
- package/dist/core/graph/GraphView.js.map +1 -0
- package/dist/core/ids.d.ts +33 -0
- package/dist/core/ids.d.ts.map +1 -0
- package/dist/core/ids.js +11 -0
- package/dist/core/ids.js.map +1 -0
- package/dist/core/reasoning/OutcomeRecorder.d.ts +88 -0
- package/dist/core/reasoning/OutcomeRecorder.d.ts.map +1 -0
- package/dist/core/reasoning/OutcomeRecorder.js +51 -0
- package/dist/core/reasoning/OutcomeRecorder.js.map +1 -0
- package/dist/core/reasoning/strategies/SequentialStrategy.d.ts +54 -0
- package/dist/core/reasoning/strategies/SequentialStrategy.d.ts.map +1 -0
- package/dist/core/reasoning/strategies/SequentialStrategy.js +22 -0
- package/dist/core/reasoning/strategies/SequentialStrategy.js.map +1 -0
- package/dist/core/reasoning/strategies/StrategyFactory.d.ts +25 -0
- package/dist/core/reasoning/strategies/StrategyFactory.d.ts.map +1 -0
- package/dist/core/reasoning/strategies/StrategyFactory.js +16 -0
- package/dist/core/reasoning/strategies/StrategyFactory.js.map +1 -0
- package/dist/core/reasoning/strategies/TreeOfThoughtStrategy.d.ts +58 -0
- package/dist/core/reasoning/strategies/TreeOfThoughtStrategy.d.ts.map +1 -0
- package/dist/core/reasoning/strategies/TreeOfThoughtStrategy.js +103 -0
- package/dist/core/reasoning/strategies/TreeOfThoughtStrategy.js.map +1 -0
- package/dist/core/reasoning/strategies/plateau.d.ts +18 -0
- package/dist/core/reasoning/strategies/plateau.d.ts.map +1 -0
- package/dist/core/reasoning/strategies/plateau.js +12 -0
- package/dist/core/reasoning/strategies/plateau.js.map +1 -0
- package/dist/core/reasoning/strategies/totScoring.d.ts +91 -0
- package/dist/core/reasoning/strategies/totScoring.d.ts.map +1 -0
- package/dist/core/reasoning/strategies/totScoring.js +88 -0
- package/dist/core/reasoning/strategies/totScoring.js.map +1 -0
- package/dist/core/reasoning.d.ts +179 -0
- package/dist/core/reasoning.d.ts.map +1 -0
- package/dist/core/reasoning.js +1 -0
- package/dist/core/step.d.ts +50 -0
- package/dist/core/step.d.ts.map +1 -0
- package/dist/core/step.js +1 -0
- package/dist/core/thought.d.ts +113 -0
- package/dist/core/thought.d.ts.map +1 -0
- package/dist/core/thought.js +1 -0
- package/dist/core/tools/InMemorySuspensionStore.d.ts +66 -0
- package/dist/core/tools/InMemorySuspensionStore.d.ts.map +1 -0
- package/dist/core/tools/InMemorySuspensionStore.js +121 -0
- package/dist/core/tools/InMemorySuspensionStore.js.map +1 -0
- package/dist/di/Container.d.ts +253 -0
- package/dist/di/Container.d.ts.map +1 -0
- package/dist/di/Container.js +111 -0
- package/dist/di/Container.js.map +1 -0
- package/dist/di/ServiceRegistry.d.ts +50 -0
- package/dist/di/ServiceRegistry.d.ts.map +1 -0
- package/dist/di/ServiceRegistry.js +1 -0
- package/dist/errors.d.ts +663 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +282 -0
- package/dist/errors.js.map +1 -0
- package/dist/health/HealthChecker.d.ts +73 -0
- package/dist/health/HealthChecker.d.ts.map +1 -0
- package/dist/health/HealthChecker.js +70 -0
- package/dist/health/HealthChecker.js.map +1 -0
- package/dist/lib.d.ts +273 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +409 -0
- package/dist/lib.js.map +1 -0
- package/dist/logger/NullLogger.d.ts +154 -0
- package/dist/logger/NullLogger.d.ts.map +1 -0
- package/dist/logger/NullLogger.js +24 -0
- package/dist/logger/NullLogger.js.map +1 -0
- package/dist/logger/StructuredLogger.d.ts +327 -0
- package/dist/logger/StructuredLogger.d.ts.map +1 -0
- package/dist/logger/StructuredLogger.js +72 -0
- package/dist/logger/StructuredLogger.js.map +1 -0
- package/dist/metrics/metrics.impl.d.ts +252 -0
- package/dist/metrics/metrics.impl.d.ts.map +1 -0
- package/dist/metrics/metrics.impl.js +197 -0
- package/dist/metrics/metrics.impl.js.map +1 -0
- package/dist/persistence/FileLegacyImport.d.ts +2 -0
- package/dist/persistence/FileLegacyImport.d.ts.map +1 -0
- package/dist/persistence/FileLegacyImport.js +183 -0
- package/dist/persistence/FileLegacyImport.js.map +1 -0
- package/dist/persistence/FilePersistence.d.ts +53 -0
- package/dist/persistence/FilePersistence.d.ts.map +1 -0
- package/dist/persistence/FilePersistence.js +312 -0
- package/dist/persistence/FilePersistence.js.map +1 -0
- package/dist/persistence/FileSnapshotTypes.d.ts +29 -0
- package/dist/persistence/FileSnapshotTypes.d.ts.map +1 -0
- package/dist/persistence/FileSnapshotTypes.js +1 -0
- package/dist/persistence/FileSnapshotV2.d.ts +377 -0
- package/dist/persistence/FileSnapshotV2.d.ts.map +1 -0
- package/dist/persistence/FileSnapshotV2.js +124 -0
- package/dist/persistence/FileSnapshotV2.js.map +1 -0
- package/dist/persistence/FileSnapshotValidation.d.ts +15 -0
- package/dist/persistence/FileSnapshotValidation.d.ts.map +1 -0
- package/dist/persistence/FileSnapshotValidation.js +64 -0
- package/dist/persistence/FileSnapshotValidation.js.map +1 -0
- package/dist/persistence/FileWriter.d.ts +30 -0
- package/dist/persistence/FileWriter.d.ts.map +1 -0
- package/dist/persistence/FileWriter.js +155 -0
- package/dist/persistence/FileWriter.js.map +1 -0
- package/dist/persistence/MemoryPersistence.d.ts +45 -0
- package/dist/persistence/MemoryPersistence.d.ts.map +1 -0
- package/dist/persistence/MemoryPersistence.js +180 -0
- package/dist/persistence/MemoryPersistence.js.map +1 -0
- package/dist/persistence/PersistenceCodec.d.ts +7 -0
- package/dist/persistence/PersistenceCodec.d.ts.map +1 -0
- package/dist/persistence/PersistenceCodec.js +97 -0
- package/dist/persistence/PersistenceCodec.js.map +1 -0
- package/dist/persistence/PersistenceErrors.d.ts +23 -0
- package/dist/persistence/PersistenceErrors.d.ts.map +1 -0
- package/dist/persistence/PersistenceErrors.js +26 -0
- package/dist/persistence/PersistenceErrors.js.map +1 -0
- package/dist/persistence/PersistenceFactory.d.ts +21 -0
- package/dist/persistence/PersistenceFactory.d.ts.map +1 -0
- package/dist/persistence/PersistenceFactory.js +28 -0
- package/dist/persistence/PersistenceFactory.js.map +1 -0
- package/dist/persistence/PersistenceScope.d.ts +42 -0
- package/dist/persistence/PersistenceScope.d.ts.map +1 -0
- package/dist/persistence/PersistenceScope.js +93 -0
- package/dist/persistence/PersistenceScope.js.map +1 -0
- package/dist/persistence/SessionScopedPersistence.d.ts +4 -0
- package/dist/persistence/SessionScopedPersistence.d.ts.map +1 -0
- package/dist/persistence/SessionScopedPersistence.js +9 -0
- package/dist/persistence/SessionScopedPersistence.js.map +1 -0
- package/dist/persistence/SqliteDriver.d.ts +22 -0
- package/dist/persistence/SqliteDriver.d.ts.map +1 -0
- package/dist/persistence/SqliteDriver.js +29 -0
- package/dist/persistence/SqliteDriver.js.map +1 -0
- package/dist/persistence/SqliteLegacyImport.d.ts +14 -0
- package/dist/persistence/SqliteLegacyImport.d.ts.map +1 -0
- package/dist/persistence/SqliteLegacyImport.js +136 -0
- package/dist/persistence/SqliteLegacyImport.js.map +1 -0
- package/dist/persistence/SqliteLegacySchema.d.ts +15 -0
- package/dist/persistence/SqliteLegacySchema.d.ts.map +1 -0
- package/dist/persistence/SqliteLegacySchema.js +72 -0
- package/dist/persistence/SqliteLegacySchema.js.map +1 -0
- package/dist/persistence/SqlitePayload.d.ts +11 -0
- package/dist/persistence/SqlitePayload.d.ts.map +1 -0
- package/dist/persistence/SqlitePayload.js +86 -0
- package/dist/persistence/SqlitePayload.js.map +1 -0
- package/dist/persistence/SqlitePersistence.d.ts +49 -0
- package/dist/persistence/SqlitePersistence.d.ts.map +1 -0
- package/dist/persistence/SqlitePersistence.js +248 -0
- package/dist/persistence/SqlitePersistence.js.map +1 -0
- package/dist/persistence/SqliteSchemaV2.d.ts +14 -0
- package/dist/persistence/SqliteSchemaV2.d.ts.map +1 -0
- package/dist/persistence/SqliteSchemaV2.js +129 -0
- package/dist/persistence/SqliteSchemaV2.js.map +1 -0
- package/dist/persistence/SqliteSnapshotWriter.d.ts +17 -0
- package/dist/persistence/SqliteSnapshotWriter.d.ts.map +1 -0
- package/dist/persistence/SqliteSnapshotWriter.js +30 -0
- package/dist/persistence/SqliteSnapshotWriter.js.map +1 -0
- package/dist/pool/ConnectionPool.d.ts +203 -0
- package/dist/pool/ConnectionPool.d.ts.map +1 -0
- package/dist/pool/ConnectionPool.js +303 -0
- package/dist/pool/ConnectionPool.js.map +1 -0
- package/dist/pool/IConnectionPool.d.ts +143 -0
- package/dist/pool/IConnectionPool.d.ts.map +1 -0
- package/dist/pool/IConnectionPool.js +1 -0
- package/dist/pool/PoolErrors.d.ts +11 -0
- package/dist/pool/PoolErrors.d.ts.map +1 -0
- package/dist/pool/PoolErrors.js +16 -0
- package/dist/pool/PoolErrors.js.map +1 -0
- package/dist/registry/BaseRegistry.d.ts +219 -0
- package/dist/registry/BaseRegistry.d.ts.map +1 -0
- package/dist/registry/BaseRegistry.js +215 -0
- package/dist/registry/BaseRegistry.js.map +1 -0
- package/dist/registry/SkillRegistry.d.ts +67 -0
- package/dist/registry/SkillRegistry.d.ts.map +1 -0
- package/dist/registry/SkillRegistry.js +87 -0
- package/dist/registry/SkillRegistry.js.map +1 -0
- package/dist/registry/ToolRegistry.d.ts +70 -0
- package/dist/registry/ToolRegistry.d.ts.map +1 -0
- package/dist/registry/ToolRegistry.js +96 -0
- package/dist/registry/ToolRegistry.js.map +1 -0
- package/dist/sanitize.d.ts +164 -0
- package/dist/sanitize.d.ts.map +1 -0
- package/dist/sanitize.js +100 -0
- package/dist/sanitize.js.map +1 -0
- package/dist/schema.d.ts +562 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +251 -0
- package/dist/schema.js.map +1 -0
- package/dist/transport/BaseTransport.d.ts +166 -0
- package/dist/transport/BaseTransport.d.ts.map +1 -0
- package/dist/transport/BaseTransport.js +199 -0
- package/dist/transport/BaseTransport.js.map +1 -0
- package/dist/transport/HttpHelpers.d.ts +53 -0
- package/dist/transport/HttpHelpers.d.ts.map +1 -0
- package/dist/transport/HttpHelpers.js +44 -0
- package/dist/transport/HttpHelpers.js.map +1 -0
- package/dist/transport/HttpRequestLifecycle.d.ts +37 -0
- package/dist/transport/HttpRequestLifecycle.d.ts.map +1 -0
- package/dist/transport/HttpRequestLifecycle.js +87 -0
- package/dist/transport/HttpRequestLifecycle.js.map +1 -0
- package/dist/transport/HttpTransport.d.ts +140 -0
- package/dist/transport/HttpTransport.d.ts.map +1 -0
- package/dist/transport/HttpTransport.js +245 -0
- package/dist/transport/HttpTransport.js.map +1 -0
- package/dist/transport/SseTransport.d.ts +149 -0
- package/dist/transport/SseTransport.d.ts.map +1 -0
- package/dist/transport/SseTransport.js +470 -0
- package/dist/transport/SseTransport.js.map +1 -0
- package/dist/transport/StreamableHttpTransport.d.ts +225 -0
- package/dist/transport/StreamableHttpTransport.d.ts.map +1 -0
- package/dist/transport/StreamableHttpTransport.js +449 -0
- package/dist/transport/StreamableHttpTransport.js.map +1 -0
- package/dist/types/disposable.d.ts +22 -0
- package/dist/types/disposable.d.ts.map +1 -0
- package/dist/types/disposable.js +1 -0
- package/dist/types/server-config.d.ts +32 -0
- package/dist/types/server-config.d.ts.map +1 -0
- package/dist/types/server-config.js +1 -0
- package/dist/types/skill.d.ts +74 -0
- package/dist/types/skill.d.ts.map +1 -0
- package/dist/types/skill.js +1 -0
- package/dist/types/tool.d.ts +78 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +1 -0
- package/dist/utils.d.ts +27 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +6 -0
- package/dist/utils.js.map +1 -0
- package/dist/watchers/SkillWatcher.d.ts +25 -0
- package/dist/watchers/SkillWatcher.d.ts.map +1 -0
- package/dist/watchers/SkillWatcher.js +96 -0
- package/dist/watchers/SkillWatcher.js.map +1 -0
- package/dist/watchers/ToolWatcher.d.ts +24 -0
- package/dist/watchers/ToolWatcher.d.ts.map +1 -0
- package/dist/watchers/ToolWatcher.js +92 -0
- package/dist/watchers/ToolWatcher.js.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HistoryManager.d.ts","sourceRoot":"","sources":["../../src/core/HistoryManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,594 @@
|
|
|
1
|
+
import { GLOBAL_SESSION_ID, asSessionId } from "../contracts/ids.js";
|
|
2
|
+
import { InvalidBacktrackError, MaxSessionsReachedError, ValidationError } from "../errors.js";
|
|
3
|
+
import { NullLogger } from "../logger/NullLogger.js";
|
|
4
|
+
import { DehydrationPolicy } from "./compression/DehydrationPolicy.js";
|
|
5
|
+
import { AsyncResetRequiredError, SessionAccessDeniedError } from "./SessionErrors.js";
|
|
6
|
+
import { EdgeEmitter } from "./graph/EdgeEmitter.js";
|
|
7
|
+
import { PersistenceBuffer } from "./PersistenceBuffer.js";
|
|
8
|
+
import { SessionManager } from "./SessionManager.js";
|
|
9
|
+
import { SessionResetCoordinator } from "./SessionResetCoordinator.js";
|
|
10
|
+
import { stagePersistenceRestore } from "./PersistenceRestore.js";
|
|
11
|
+
import { getOwner } from "../context/RequestContext.js";
|
|
12
|
+
import { ThoughtReferenceIndex } from "./ThoughtReferenceIndex.js";
|
|
13
|
+
import { resolveThoughtReferencesForAdmission } from "./CrossReferenceValidator.js";
|
|
14
|
+
import { SessionLifecycleCoordinator } from "./SessionLifecycleCoordinator.js";
|
|
15
|
+
const ABSOLUTE_MAX_HISTORY_SIZE = 10000;
|
|
16
|
+
class HistoryManager {
|
|
17
|
+
static DEFAULT_SESSION = GLOBAL_SESSION_ID;
|
|
18
|
+
static SESSION_TTL_MS = 1800000;
|
|
19
|
+
static MAX_SESSIONS = 100;
|
|
20
|
+
_sessions = new Map();
|
|
21
|
+
_maxHistorySize;
|
|
22
|
+
_maxBranches;
|
|
23
|
+
_maxBranchSize;
|
|
24
|
+
_logger;
|
|
25
|
+
_persistence;
|
|
26
|
+
_persistenceEnabled;
|
|
27
|
+
_metrics;
|
|
28
|
+
_edgeStore;
|
|
29
|
+
_summaryStore;
|
|
30
|
+
_dagEdges;
|
|
31
|
+
_eventEmitter;
|
|
32
|
+
_edgeEmitter;
|
|
33
|
+
_referenceIndex = new ThoughtReferenceIndex();
|
|
34
|
+
_persistenceBuffer;
|
|
35
|
+
_sessionManager;
|
|
36
|
+
_resetCoordinator;
|
|
37
|
+
_sessionLock;
|
|
38
|
+
_lifecycle;
|
|
39
|
+
_shutdownOwner = null;
|
|
40
|
+
_clearSessionAuxiliaryState;
|
|
41
|
+
_clearAllAuxiliaryState;
|
|
42
|
+
constructor(config = {}){
|
|
43
|
+
this._logger = config.logger ?? new NullLogger();
|
|
44
|
+
const requestedMaxSize = config.maxHistorySize ?? 10000;
|
|
45
|
+
this._maxHistorySize = Math.min(requestedMaxSize, ABSOLUTE_MAX_HISTORY_SIZE);
|
|
46
|
+
if (requestedMaxSize > ABSOLUTE_MAX_HISTORY_SIZE) this._logger.warn('maxHistorySize exceeds absolute maximum, capped', {
|
|
47
|
+
requested: requestedMaxSize,
|
|
48
|
+
applied: ABSOLUTE_MAX_HISTORY_SIZE
|
|
49
|
+
});
|
|
50
|
+
this._maxBranches = config.maxBranches ?? 50;
|
|
51
|
+
this._maxBranchSize = config.maxBranchSize || 100;
|
|
52
|
+
this._persistence = config.persistence ?? null;
|
|
53
|
+
this._persistenceEnabled = null !== this._persistence;
|
|
54
|
+
this._metrics = config.metrics;
|
|
55
|
+
this._eventEmitter = config.eventEmitter ?? null;
|
|
56
|
+
this._edgeStore = config.edgeStore;
|
|
57
|
+
this._summaryStore = config.summaryStore;
|
|
58
|
+
this._dagEdges = config.dagEdges ?? true;
|
|
59
|
+
this._sessionLock = config.sessionLock;
|
|
60
|
+
this._lifecycle = config.lifecycleCoordinator ?? new SessionLifecycleCoordinator();
|
|
61
|
+
this._clearSessionAuxiliaryState = config.clearSessionAuxiliaryState;
|
|
62
|
+
this._clearAllAuxiliaryState = config.clearAllAuxiliaryState;
|
|
63
|
+
this._edgeEmitter = new EdgeEmitter({
|
|
64
|
+
edgeStore: this._edgeStore,
|
|
65
|
+
dagEdges: this._dagEdges,
|
|
66
|
+
defaultSessionId: HistoryManager.DEFAULT_SESSION,
|
|
67
|
+
logger: this._logger
|
|
68
|
+
});
|
|
69
|
+
this._sessionManager = new SessionManager({
|
|
70
|
+
defaultSessionId: HistoryManager.DEFAULT_SESSION,
|
|
71
|
+
sessionTtlMs: HistoryManager.SESSION_TTL_MS,
|
|
72
|
+
cleanupIntervalMs: 300000,
|
|
73
|
+
getMaxSessions: ()=>HistoryManager.MAX_SESSIONS,
|
|
74
|
+
maxSessionsPerOwner: config.maxSessionsPerOwner ?? 50,
|
|
75
|
+
logger: this._logger
|
|
76
|
+
});
|
|
77
|
+
this._persistenceBuffer = null;
|
|
78
|
+
if (this._persistenceEnabled && this._persistence) {
|
|
79
|
+
this._persistenceBuffer = new PersistenceBuffer({
|
|
80
|
+
persistence: this._persistence,
|
|
81
|
+
bufferSize: config.persistenceBufferSize ?? 100,
|
|
82
|
+
flushInterval: config.persistenceFlushInterval ?? 1000,
|
|
83
|
+
maxRetries: config.persistenceMaxRetries ?? 3,
|
|
84
|
+
defaultSessionId: asSessionId(HistoryManager.DEFAULT_SESSION),
|
|
85
|
+
getSessions: ()=>this._sessions,
|
|
86
|
+
getDefaultSession: ()=>this._getSession(),
|
|
87
|
+
edgeStore: this._edgeStore,
|
|
88
|
+
eventEmitter: this._eventEmitter,
|
|
89
|
+
logger: this._logger
|
|
90
|
+
});
|
|
91
|
+
this._startFlushTimer();
|
|
92
|
+
}
|
|
93
|
+
this._resetCoordinator = new SessionResetCoordinator({
|
|
94
|
+
persistence: this._persistence,
|
|
95
|
+
barrier: this._persistenceBuffer,
|
|
96
|
+
edgeStore: this._edgeStore,
|
|
97
|
+
summaryStore: this._summaryStore,
|
|
98
|
+
sessions: this._sessions,
|
|
99
|
+
createSessionState: (owner)=>this._createSessionState(owner),
|
|
100
|
+
logger: this._logger
|
|
101
|
+
});
|
|
102
|
+
this._sessionManager.startCleanupTimer(this._sessions, (sessionId)=>this._isTtlEvictionEligible(sessionId), (sessionIds)=>this._evictSessions(sessionIds));
|
|
103
|
+
}
|
|
104
|
+
get _flushTimer() {
|
|
105
|
+
return this._persistenceBuffer?.timer ?? null;
|
|
106
|
+
}
|
|
107
|
+
_startFlushTimer() {
|
|
108
|
+
this._persistenceBuffer?.startFlushTimer();
|
|
109
|
+
}
|
|
110
|
+
_stopFlushTimer() {
|
|
111
|
+
if (null === this._flushTimer) return;
|
|
112
|
+
this._persistenceBuffer?.stopFlushTimer();
|
|
113
|
+
}
|
|
114
|
+
_flushBuffer() {
|
|
115
|
+
this._stageAllRestoreBranchReconciliation();
|
|
116
|
+
return this._persistenceBuffer?.flush() ?? Promise.resolve();
|
|
117
|
+
}
|
|
118
|
+
drainSession(sessionId) {
|
|
119
|
+
const session = this._sessions.get(sessionId);
|
|
120
|
+
if (void 0 !== session) this._stageRestoreBranchReconciliation(sessionId, session);
|
|
121
|
+
return this._persistenceBuffer?.drainSession(sessionId) ?? Promise.resolve();
|
|
122
|
+
}
|
|
123
|
+
bufferSummaries(sessionId, summaries) {
|
|
124
|
+
this._lifecycle.runMutation(sessionId, ()=>{
|
|
125
|
+
this._persistenceBuffer?.bufferSummaries(sessionId, summaries);
|
|
126
|
+
const session = this._sessions.get(sessionId);
|
|
127
|
+
if (void 0 !== session) this._stageRestoreBranchReconciliation(sessionId, session);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
getEdgeStore() {
|
|
131
|
+
return this._edgeStore;
|
|
132
|
+
}
|
|
133
|
+
log(message, meta) {
|
|
134
|
+
this._logger.info(message, meta);
|
|
135
|
+
}
|
|
136
|
+
_getCurrentOwner() {
|
|
137
|
+
return getOwner();
|
|
138
|
+
}
|
|
139
|
+
_getSession(sessionId, owner) {
|
|
140
|
+
const key = void 0 === sessionId ? HistoryManager.DEFAULT_SESSION : asSessionId(sessionId);
|
|
141
|
+
const existing = this._sessions.get(key);
|
|
142
|
+
if (void 0 !== existing) {
|
|
143
|
+
this._assertSessionOwner(key, existing, owner);
|
|
144
|
+
existing.lastAccessedAt = Date.now();
|
|
145
|
+
return existing;
|
|
146
|
+
}
|
|
147
|
+
return this._lifecycle.runMutation(key, ()=>this._getSessionWithinOperation(key, owner));
|
|
148
|
+
}
|
|
149
|
+
_getSessionWithinOperation(key, owner) {
|
|
150
|
+
let session = this._sessions.get(key);
|
|
151
|
+
if (session) this._assertSessionOwner(key, session, owner);
|
|
152
|
+
else {
|
|
153
|
+
this._makeCapacityForSession(owner);
|
|
154
|
+
session = this._createSessionState(owner);
|
|
155
|
+
this._sessions.set(key, session);
|
|
156
|
+
}
|
|
157
|
+
session.lastAccessedAt = Date.now();
|
|
158
|
+
return session;
|
|
159
|
+
}
|
|
160
|
+
_assertSessionOwner(sessionId, session, owner) {
|
|
161
|
+
if (void 0 === owner) return;
|
|
162
|
+
if ('restored' === session.provenance) throw new SessionAccessDeniedError(sessionId, 'unavailable', owner);
|
|
163
|
+
if (void 0 !== session.owner && session.owner !== owner) throw new SessionAccessDeniedError(sessionId, session.owner, owner);
|
|
164
|
+
if (void 0 === session.owner) session.owner = owner;
|
|
165
|
+
}
|
|
166
|
+
_makeCapacityForSession(owner) {
|
|
167
|
+
const victims = this._sessionManager.planProspectiveAdmission(this._sessions, owner, (sessionId)=>this._isCapacityEvictionEligible(sessionId));
|
|
168
|
+
if (void 0 === victims) throw new MaxSessionsReachedError(HistoryManager.MAX_SESSIONS);
|
|
169
|
+
if (0 === victims.length) return;
|
|
170
|
+
const evicted = this._lifecycle.tryEvictIdleSessions(victims, (sessionIds)=>{
|
|
171
|
+
if (sessionIds.some((sessionId)=>!this._isPersistenceQuiescent(sessionId))) throw new MaxSessionsReachedError(HistoryManager.MAX_SESSIONS);
|
|
172
|
+
for (const sessionId of sessionIds)this._removeLiveSession(sessionId);
|
|
173
|
+
});
|
|
174
|
+
if (!evicted) throw new MaxSessionsReachedError(HistoryManager.MAX_SESSIONS);
|
|
175
|
+
}
|
|
176
|
+
_isCapacityEvictionEligible(sessionId) {
|
|
177
|
+
return this._lifecycle.isIdle(sessionId) && this._isPersistenceQuiescent(sessionId);
|
|
178
|
+
}
|
|
179
|
+
_isTtlEvictionEligible(sessionId) {
|
|
180
|
+
const persistenceState = this._persistenceBuffer?.sessionEvictionState(sessionId) ?? 'quiescent';
|
|
181
|
+
return this._lifecycle.isIdle(sessionId) && 'failed' !== persistenceState && 'barrier' !== persistenceState;
|
|
182
|
+
}
|
|
183
|
+
_isPersistenceQuiescent(sessionId) {
|
|
184
|
+
return (this._persistenceBuffer?.sessionEvictionState(sessionId) ?? 'quiescent') === 'quiescent';
|
|
185
|
+
}
|
|
186
|
+
async _evictSessions(sessionIds) {
|
|
187
|
+
const results = await Promise.allSettled(sessionIds.map((sessionId)=>this._evictSession(sessionId)));
|
|
188
|
+
const failures = results.flatMap((result)=>'rejected' === result.status ? [
|
|
189
|
+
result.reason
|
|
190
|
+
] : []);
|
|
191
|
+
if (failures.length > 0) throw new AggregateError(failures, 'Session eviction failed');
|
|
192
|
+
}
|
|
193
|
+
_evictSession(sessionId) {
|
|
194
|
+
return this._lifecycle.withSessionEviction(sessionId, async ()=>{
|
|
195
|
+
if (null === this._persistenceBuffer) return void this._removeLiveSession(sessionId);
|
|
196
|
+
const session = this._sessions.get(sessionId);
|
|
197
|
+
if (void 0 !== session) this._stageRestoreBranchReconciliation(sessionId, session);
|
|
198
|
+
await this._persistenceBuffer.withSessionEvictionBarrier(sessionId, async ()=>{
|
|
199
|
+
this._removeLiveSession(sessionId);
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
_removeLiveSession(sessionId) {
|
|
204
|
+
this._clearSessionAuxiliaryState?.(sessionId);
|
|
205
|
+
this._edgeStore?.clearSession(sessionId);
|
|
206
|
+
this._summaryStore?.clearSession(sessionId);
|
|
207
|
+
this._referenceIndex.clearSession(sessionId);
|
|
208
|
+
this._sessions.delete(sessionId);
|
|
209
|
+
this._persistenceBuffer?.forgetQuiescentSession(sessionId);
|
|
210
|
+
}
|
|
211
|
+
_createSessionState(owner, provenance) {
|
|
212
|
+
return {
|
|
213
|
+
thought_history: [],
|
|
214
|
+
branches: {},
|
|
215
|
+
availableMcpTools: void 0,
|
|
216
|
+
availableSkills: void 0,
|
|
217
|
+
writeBuffer: [],
|
|
218
|
+
lastAccessedAt: Date.now(),
|
|
219
|
+
branchIdentities: new Set(),
|
|
220
|
+
pendingRestoreBranchDeletes: new Set(),
|
|
221
|
+
owner,
|
|
222
|
+
provenance
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
_authorizeExistingSession(sessionId, owner) {
|
|
226
|
+
const sessionOwner = this._sessions.get(sessionId)?.owner;
|
|
227
|
+
if (void 0 !== owner && this._sessions.get(sessionId)?.provenance === 'restored') throw new SessionAccessDeniedError(sessionId, 'unavailable', owner);
|
|
228
|
+
if (void 0 !== owner && void 0 !== sessionOwner && sessionOwner !== owner) throw new SessionAccessDeniedError(sessionId, sessionOwner, owner);
|
|
229
|
+
return sessionOwner ?? owner;
|
|
230
|
+
}
|
|
231
|
+
_assertOwnerlessResetAll() {
|
|
232
|
+
const owner = this._getCurrentOwner();
|
|
233
|
+
if (void 0 === owner) return;
|
|
234
|
+
const firstSessionId = this._sessions.keys().next().value ?? HistoryManager.DEFAULT_SESSION;
|
|
235
|
+
throw new SessionAccessDeniedError(firstSessionId, 'trusted ownerless context', owner);
|
|
236
|
+
}
|
|
237
|
+
addThought(thought, context) {
|
|
238
|
+
const sessionId = asSessionId(thought.session_id ?? HistoryManager.DEFAULT_SESSION);
|
|
239
|
+
this._lifecycle.runMutation(sessionId, ()=>this._addThoughtWithinOperation(sessionId, thought, context));
|
|
240
|
+
}
|
|
241
|
+
_addThoughtWithinOperation(sessionId, thought, context) {
|
|
242
|
+
this._persistenceBuffer?.assertSessionAdmissionOpen(sessionId);
|
|
243
|
+
const owner = this._getCurrentOwner();
|
|
244
|
+
this._authorizeExistingSession(sessionId, owner);
|
|
245
|
+
const resolvedReferences = this._resolveAdmissionReferences(sessionId, thought, context);
|
|
246
|
+
const session = this._getSessionWithinOperation(sessionId, owner);
|
|
247
|
+
this._metrics?.counter('thought_requests_total', 1, {}, 'Total thought requests added to history');
|
|
248
|
+
session.thought_history.push(thought);
|
|
249
|
+
if (void 0 !== resolvedReferences.backtrackTargetThoughtId) this._applyRetraction(session, resolvedReferences.backtrackTargetThoughtId);
|
|
250
|
+
if (thought.available_mcp_tools) session.availableMcpTools = thought.available_mcp_tools;
|
|
251
|
+
if (thought.available_skills) session.availableSkills = thought.available_skills;
|
|
252
|
+
if (thought.branch_from_thought && thought.branch_id) this._addToSessionBranch(session, thought.branch_id, thought);
|
|
253
|
+
if (thought.merge_from_thoughts?.length || thought.merge_branch_ids?.length) this._metrics?.counter('thought_merge_operations_total', 1, {}, 'Total merge operations (graph topology)');
|
|
254
|
+
const edgeAdded = this._edgeEmitter.emitEdgesForThought(session, thought, {
|
|
255
|
+
...context,
|
|
256
|
+
resolvedReferences
|
|
257
|
+
});
|
|
258
|
+
const evictedBranchIds = this._enforceRetention(session, thought.branch_id);
|
|
259
|
+
this._rebuildReferenceIndex(sessionId, session);
|
|
260
|
+
const prunedEdges = this._pruneUnretainedEdges(sessionId, session);
|
|
261
|
+
this._bufferRetainedState(sessionId, session, thought, evictedBranchIds, edgeAdded, prunedEdges);
|
|
262
|
+
}
|
|
263
|
+
_resolveAdmissionReferences(sessionId, thought, context) {
|
|
264
|
+
const resolved = context?.resolvedReferences ?? resolveThoughtReferencesForAdmission(thought, (thoughtNumber)=>this._referenceIndex.resolve(sessionId, thoughtNumber));
|
|
265
|
+
if ('backtrack' === thought.thought_type && void 0 !== thought.backtrack_target && void 0 === resolved.backtrackTargetThoughtId) throw new InvalidBacktrackError(`backtrack_target ${thought.backtrack_target} is missing in session history`);
|
|
266
|
+
return resolved;
|
|
267
|
+
}
|
|
268
|
+
_enforceRetention(session, branchId) {
|
|
269
|
+
if (session.thought_history.length > this._maxHistorySize) {
|
|
270
|
+
session.thought_history = session.thought_history.slice(-this._maxHistorySize);
|
|
271
|
+
this.log(`History trimmed to ${this._maxHistorySize} items`, {
|
|
272
|
+
maxSize: this._maxHistorySize
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
if (void 0 !== branchId) this._trimSessionBranchSize(session, branchId);
|
|
276
|
+
return this._cleanupSessionBranches(session);
|
|
277
|
+
}
|
|
278
|
+
_pruneUnretainedEdges(sessionId, session) {
|
|
279
|
+
if (void 0 === this._edgeStore) return 0;
|
|
280
|
+
const retainedIds = new Set();
|
|
281
|
+
const retainedBranchThoughtIds = new Set();
|
|
282
|
+
for (const thought of [
|
|
283
|
+
session.thought_history,
|
|
284
|
+
...Object.values(session.branches)
|
|
285
|
+
].flat())if (void 0 !== thought.id) retainedIds.add(thought.id);
|
|
286
|
+
for (const thought of Object.values(session.branches).flat())if (void 0 !== thought.id) retainedBranchThoughtIds.add(thought.id);
|
|
287
|
+
return this._edgeStore.pruneSession(sessionId, retainedIds, retainedBranchThoughtIds);
|
|
288
|
+
}
|
|
289
|
+
_bufferRetainedState(sessionId, session, thought, evictedBranchIds, edgeAdded, prunedEdges) {
|
|
290
|
+
const buffer = this._persistenceBuffer;
|
|
291
|
+
if (null === buffer) return;
|
|
292
|
+
buffer.bufferThought(sessionId, thought);
|
|
293
|
+
if (void 0 !== thought.branch_id || evictedBranchIds.length > 0 || session.pendingRestoreBranchDeletes.size > 0) this._stageBranchPersistence(sessionId, session, evictedBranchIds);
|
|
294
|
+
if (void 0 !== this._edgeStore && (edgeAdded || prunedEdges > 0)) buffer.bufferEdges(sessionId, this._edgeStore.edgesForSession(sessionId));
|
|
295
|
+
}
|
|
296
|
+
_stageAllRestoreBranchReconciliation() {
|
|
297
|
+
for (const [sessionId, session] of this._sessions)this._stageRestoreBranchReconciliation(sessionId, session);
|
|
298
|
+
}
|
|
299
|
+
_stageRestoreBranchReconciliation(sessionId, session) {
|
|
300
|
+
if (0 === session.pendingRestoreBranchDeletes.size) return;
|
|
301
|
+
this._stageBranchPersistence(sessionId, session, []);
|
|
302
|
+
}
|
|
303
|
+
_stageBranchPersistence(sessionId, session, ordinaryDeletes) {
|
|
304
|
+
const buffer = this._persistenceBuffer;
|
|
305
|
+
if (null === buffer) return;
|
|
306
|
+
for (const branchId of session.branchIdentities){
|
|
307
|
+
const branch = session.branches[branchId];
|
|
308
|
+
if (void 0 !== branch) buffer.bufferBranch(sessionId, branchId, branch);
|
|
309
|
+
}
|
|
310
|
+
const branchIdsToDelete = new Set([
|
|
311
|
+
...session.pendingRestoreBranchDeletes,
|
|
312
|
+
...ordinaryDeletes
|
|
313
|
+
]);
|
|
314
|
+
for (const branchId of branchIdsToDelete)if (void 0 === session.branches[branchId]) buffer.deleteBranch(sessionId, branchId);
|
|
315
|
+
session.pendingRestoreBranchDeletes.clear();
|
|
316
|
+
}
|
|
317
|
+
_applyRetraction(session, targetId) {
|
|
318
|
+
for (const t of session.thought_history)if (t.id === targetId) t.retracted = true;
|
|
319
|
+
for (const branchThoughts of Object.values(session.branches))for (const t of branchThoughts)if (t.id === targetId) t.retracted = true;
|
|
320
|
+
}
|
|
321
|
+
_rebuildReferenceIndex(sessionId, session) {
|
|
322
|
+
const retained = [
|
|
323
|
+
session.thought_history,
|
|
324
|
+
...Object.values(session.branches)
|
|
325
|
+
].flat();
|
|
326
|
+
this._referenceIndex.replaceSession(sessionId, retained);
|
|
327
|
+
}
|
|
328
|
+
resolveThoughtReference(sessionId, thoughtNumber) {
|
|
329
|
+
this._authorizeExistingSession(sessionId, this._getCurrentOwner());
|
|
330
|
+
return this._referenceIndex.resolve(sessionId, thoughtNumber);
|
|
331
|
+
}
|
|
332
|
+
_addToSessionBranch(session, branchId, thought) {
|
|
333
|
+
if (!session.branches[branchId]) session.branches[branchId] = [];
|
|
334
|
+
session.branchIdentities.add(branchId);
|
|
335
|
+
session.branches[branchId].push(thought);
|
|
336
|
+
}
|
|
337
|
+
_cleanupSessionBranches(session) {
|
|
338
|
+
const branchCount = session.branchIdentities.size;
|
|
339
|
+
if (branchCount <= this._maxBranches) return [];
|
|
340
|
+
const identitiesToRemove = Array.from(session.branchIdentities).slice(0, branchCount - this._maxBranches);
|
|
341
|
+
const branchesToDelete = [];
|
|
342
|
+
for (const branchId of identitiesToRemove){
|
|
343
|
+
session.branchIdentities.delete(branchId);
|
|
344
|
+
if (void 0 !== session.branches[branchId]) branchesToDelete.push(branchId);
|
|
345
|
+
delete session.branches[branchId];
|
|
346
|
+
this.log(`Removed old branch: ${branchId}`, {
|
|
347
|
+
branchId
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
return branchesToDelete;
|
|
351
|
+
}
|
|
352
|
+
_trimSessionBranchSize(session, branchId) {
|
|
353
|
+
const branch = session.branches[branchId];
|
|
354
|
+
if (void 0 !== branch && branch.length > this._maxBranchSize) {
|
|
355
|
+
const removed = branch.length - this._maxBranchSize;
|
|
356
|
+
session.branches[branchId] = branch.slice(-this._maxBranchSize);
|
|
357
|
+
this.log(`Trimmed branch '${branchId}': removed ${removed} old thoughts`, {
|
|
358
|
+
branchId,
|
|
359
|
+
removed
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
getHistory(sessionId) {
|
|
364
|
+
return this._getSession(sessionId, this._getCurrentOwner()).thought_history;
|
|
365
|
+
}
|
|
366
|
+
getHistoryHydrated(sessionId, opts) {
|
|
367
|
+
const history = this.getHistory(sessionId);
|
|
368
|
+
if (!this._dagEdges || !this._summaryStore) return history.slice();
|
|
369
|
+
const sid = sessionId ?? HistoryManager.DEFAULT_SESSION;
|
|
370
|
+
const policy = new DehydrationPolicy(this._summaryStore);
|
|
371
|
+
return policy.apply(history, asSessionId(sid), opts);
|
|
372
|
+
}
|
|
373
|
+
getHistoryLength(sessionId) {
|
|
374
|
+
return this._getSession(sessionId, this._getCurrentOwner()).thought_history.length;
|
|
375
|
+
}
|
|
376
|
+
getBranches(sessionId) {
|
|
377
|
+
return this._getSession(sessionId, this._getCurrentOwner()).branches;
|
|
378
|
+
}
|
|
379
|
+
getBranchIds(sessionId) {
|
|
380
|
+
return Array.from(this._getSession(sessionId, this._getCurrentOwner()).branchIdentities);
|
|
381
|
+
}
|
|
382
|
+
inspectSession(sessionId) {
|
|
383
|
+
const canonicalSessionId = asSessionId(sessionId);
|
|
384
|
+
this._authorizeExistingSession(canonicalSessionId, this._getCurrentOwner());
|
|
385
|
+
const session = this._sessions.get(canonicalSessionId);
|
|
386
|
+
if (void 0 === session) return {
|
|
387
|
+
history: [],
|
|
388
|
+
branches: {},
|
|
389
|
+
branchIds: [],
|
|
390
|
+
availableMcpTools: void 0,
|
|
391
|
+
availableSkills: void 0
|
|
392
|
+
};
|
|
393
|
+
return {
|
|
394
|
+
history: [
|
|
395
|
+
...session.thought_history
|
|
396
|
+
],
|
|
397
|
+
branches: Object.fromEntries(Object.entries(session.branches).map(([branchId, thoughts])=>[
|
|
398
|
+
branchId,
|
|
399
|
+
[
|
|
400
|
+
...thoughts
|
|
401
|
+
]
|
|
402
|
+
])),
|
|
403
|
+
branchIds: Array.from(session.branchIdentities),
|
|
404
|
+
availableMcpTools: void 0 === session.availableMcpTools ? void 0 : [
|
|
405
|
+
...session.availableMcpTools
|
|
406
|
+
],
|
|
407
|
+
availableSkills: void 0 === session.availableSkills ? void 0 : [
|
|
408
|
+
...session.availableSkills
|
|
409
|
+
]
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
registerBranch(sessionId, branchId) {
|
|
413
|
+
if ('string' != typeof branchId || 0 === branchId.length) throw new ValidationError('branch_id', 'branch_id must be a non-empty string');
|
|
414
|
+
const canonicalSessionId = asSessionId(sessionId ?? HistoryManager.DEFAULT_SESSION);
|
|
415
|
+
this._lifecycle.runMutation(canonicalSessionId, ()=>{
|
|
416
|
+
this._persistenceBuffer?.assertSessionAdmissionOpen(canonicalSessionId);
|
|
417
|
+
const session = this._getSessionWithinOperation(canonicalSessionId, this._getCurrentOwner());
|
|
418
|
+
if (session.branchIdentities.has(branchId)) throw new ValidationError('branch_id', `Branch already exists: ${branchId}`);
|
|
419
|
+
session.branchIdentities.add(branchId);
|
|
420
|
+
const evictedBranchIds = this._cleanupSessionBranches(session);
|
|
421
|
+
this._rebuildReferenceIndex(canonicalSessionId, session);
|
|
422
|
+
const prunedEdges = this._pruneUnretainedEdges(canonicalSessionId, session);
|
|
423
|
+
if (evictedBranchIds.length > 0 || session.pendingRestoreBranchDeletes.size > 0) this._stageBranchPersistence(canonicalSessionId, session, evictedBranchIds);
|
|
424
|
+
if (void 0 !== this._edgeStore && prunedEdges > 0) this._persistenceBuffer?.bufferEdges(canonicalSessionId, this._edgeStore.edgesForSession(canonicalSessionId));
|
|
425
|
+
this.log('Registered branch', {
|
|
426
|
+
branchId,
|
|
427
|
+
sessionId: sessionId ?? null
|
|
428
|
+
});
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
branchExists(sessionId, branchId) {
|
|
432
|
+
const session = this._getSession(sessionId, this._getCurrentOwner());
|
|
433
|
+
return session.branchIdentities.has(branchId);
|
|
434
|
+
}
|
|
435
|
+
getAvailableMcpTools(sessionId) {
|
|
436
|
+
return this._getSession(sessionId, this._getCurrentOwner()).availableMcpTools;
|
|
437
|
+
}
|
|
438
|
+
getAvailableSkills(sessionId) {
|
|
439
|
+
return this._getSession(sessionId, this._getCurrentOwner()).availableSkills;
|
|
440
|
+
}
|
|
441
|
+
getBranch(branchId, sessionId) {
|
|
442
|
+
return this._getSession(sessionId, this._getCurrentOwner()).branches[branchId];
|
|
443
|
+
}
|
|
444
|
+
clear(sessionId) {
|
|
445
|
+
if (void 0 !== sessionId) {
|
|
446
|
+
const canonicalSessionId = asSessionId(sessionId);
|
|
447
|
+
this._authorizeExistingSession(canonicalSessionId, this._getCurrentOwner());
|
|
448
|
+
if (this._sessionLock?.isActive(canonicalSessionId) === true) throw new AsyncResetRequiredError('session', canonicalSessionId, 'active');
|
|
449
|
+
this._resetCoordinator.clearSession(canonicalSessionId);
|
|
450
|
+
this._referenceIndex.clearSession(canonicalSessionId);
|
|
451
|
+
this._clearSessionAuxiliaryState?.(canonicalSessionId);
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
this._assertOwnerlessResetAll();
|
|
455
|
+
if (void 0 !== this._sessionLock && this._sessionLock.size > 0) throw new AsyncResetRequiredError('all', void 0, 'active');
|
|
456
|
+
this._resetCoordinator.clearAll();
|
|
457
|
+
this._referenceIndex.clearAll();
|
|
458
|
+
this._clearAllAuxiliaryState?.();
|
|
459
|
+
}
|
|
460
|
+
async resetSession(sessionId, clearAuxiliaryState) {
|
|
461
|
+
const canonicalSessionId = asSessionId(sessionId);
|
|
462
|
+
this._authorizeExistingSession(canonicalSessionId, this._getCurrentOwner());
|
|
463
|
+
await this._lifecycle.withSessionReset(canonicalSessionId, async ()=>{
|
|
464
|
+
const reset = async ()=>await this.resetSessionWithinExclusive(canonicalSessionId, clearAuxiliaryState);
|
|
465
|
+
if (void 0 === this._sessionLock) return await reset();
|
|
466
|
+
await this._sessionLock.withLock(canonicalSessionId, reset);
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
async resetSessionWithinExclusive(sessionId, clearAuxiliaryState) {
|
|
470
|
+
const preservedOwner = this._authorizeExistingSession(sessionId, this._getCurrentOwner());
|
|
471
|
+
await this._resetCoordinator.resetSession(sessionId, preservedOwner, clearAuxiliaryState ?? (void 0 === this._clearSessionAuxiliaryState ? void 0 : ()=>this._clearSessionAuxiliaryState?.(sessionId)));
|
|
472
|
+
this._referenceIndex.clearSession(sessionId);
|
|
473
|
+
}
|
|
474
|
+
async resetAll(clearAuxiliaryState) {
|
|
475
|
+
this._assertOwnerlessResetAll();
|
|
476
|
+
await this._lifecycle.withGlobalReset(async ()=>await this.resetAllWithinExclusive(clearAuxiliaryState));
|
|
477
|
+
}
|
|
478
|
+
async resetAllWithinExclusive(clearAuxiliaryState) {
|
|
479
|
+
this._assertOwnerlessResetAll();
|
|
480
|
+
await this._resetCoordinator.resetAll(clearAuxiliaryState ?? this._clearAllAuxiliaryState);
|
|
481
|
+
this._referenceIndex.clearAll();
|
|
482
|
+
}
|
|
483
|
+
clearSession(sessionId) {
|
|
484
|
+
this.clear(sessionId);
|
|
485
|
+
}
|
|
486
|
+
getSessionIds() {
|
|
487
|
+
return Array.from(this._sessions.keys());
|
|
488
|
+
}
|
|
489
|
+
getSessionCount() {
|
|
490
|
+
return this._sessions.size;
|
|
491
|
+
}
|
|
492
|
+
_restoredState(restored) {
|
|
493
|
+
const session = this._createSessionState(void 0, 'restored');
|
|
494
|
+
for(let index = restored.history.length - 1; index >= 0; index--){
|
|
495
|
+
const thought = restored.history[index];
|
|
496
|
+
if (void 0 !== thought) {
|
|
497
|
+
if (void 0 === session.availableMcpTools && void 0 !== thought.available_mcp_tools) session.availableMcpTools = [
|
|
498
|
+
...thought.available_mcp_tools
|
|
499
|
+
];
|
|
500
|
+
if (void 0 === session.availableSkills && void 0 !== thought.available_skills) session.availableSkills = [
|
|
501
|
+
...thought.available_skills
|
|
502
|
+
];
|
|
503
|
+
if (void 0 !== session.availableMcpTools && void 0 !== session.availableSkills) break;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
session.thought_history = restored.history.slice(-this._maxHistorySize);
|
|
507
|
+
const retainedStart = Math.max(0, restored.branches.length - this._maxBranches);
|
|
508
|
+
const retainedBranches = restored.branches.slice(retainedStart);
|
|
509
|
+
for (const branch of restored.branches.slice(0, retainedStart))session.pendingRestoreBranchDeletes.add(branch.branchId);
|
|
510
|
+
for (const branch of retainedBranches){
|
|
511
|
+
session.branchIdentities.add(branch.branchId);
|
|
512
|
+
session.branches[branch.branchId] = branch.thoughts.slice(-this._maxBranchSize);
|
|
513
|
+
}
|
|
514
|
+
return session;
|
|
515
|
+
}
|
|
516
|
+
async loadFromPersistence() {
|
|
517
|
+
if (!this._persistenceEnabled || !this._persistence) return;
|
|
518
|
+
const restored = await stagePersistenceRestore(this._persistence);
|
|
519
|
+
const sessions = restored.sessions.map((session)=>[
|
|
520
|
+
session.sessionId,
|
|
521
|
+
this._restoredState(session)
|
|
522
|
+
]);
|
|
523
|
+
const referenceIndex = new ThoughtReferenceIndex();
|
|
524
|
+
const retainedThoughtIds = new Map();
|
|
525
|
+
const retainedBranchThoughtIds = new Map();
|
|
526
|
+
for (const [sessionId, session] of sessions){
|
|
527
|
+
const retained = [
|
|
528
|
+
session.thought_history,
|
|
529
|
+
...Object.values(session.branches)
|
|
530
|
+
].flat();
|
|
531
|
+
referenceIndex.replaceSession(sessionId, retained);
|
|
532
|
+
retainedThoughtIds.set(sessionId, new Set(retained.flatMap((thought)=>void 0 === thought.id ? [] : [
|
|
533
|
+
thought.id
|
|
534
|
+
])));
|
|
535
|
+
retainedBranchThoughtIds.set(sessionId, new Set(Object.values(session.branches).flatMap((branch)=>branch.flatMap((thought)=>void 0 === thought.id ? [] : [
|
|
536
|
+
thought.id
|
|
537
|
+
]))));
|
|
538
|
+
}
|
|
539
|
+
this._edgeStore?.clearAll();
|
|
540
|
+
this._summaryStore?.clearAll();
|
|
541
|
+
this._sessions.clear();
|
|
542
|
+
for (const [sessionId, session] of sessions)this._sessions.set(sessionId, session);
|
|
543
|
+
this._referenceIndex = referenceIndex;
|
|
544
|
+
for (const session of restored.sessions){
|
|
545
|
+
const retainedIds = retainedThoughtIds.get(session.sessionId) ?? new Set();
|
|
546
|
+
const retainedBranchIds = retainedBranchThoughtIds.get(session.sessionId) ?? new Set();
|
|
547
|
+
for (const edge of session.edges)if (retainedIds.has(edge.from) && retainedIds.has(edge.to)) {
|
|
548
|
+
if ('branch' !== edge.kind || retainedBranchIds.has(edge.to)) this._edgeStore?.addEdge(edge);
|
|
549
|
+
}
|
|
550
|
+
for (const summary of session.summaries)this._summaryStore?.add(summary);
|
|
551
|
+
}
|
|
552
|
+
this.log(`Restored ${restored.sessions.length} persistence namespaces`);
|
|
553
|
+
}
|
|
554
|
+
isPersistenceEnabled() {
|
|
555
|
+
return this._persistenceEnabled;
|
|
556
|
+
}
|
|
557
|
+
getPersistenceBackend() {
|
|
558
|
+
return this._persistence;
|
|
559
|
+
}
|
|
560
|
+
setEventEmitter(emitter) {
|
|
561
|
+
this._eventEmitter = emitter;
|
|
562
|
+
this._persistenceBuffer?.setEventEmitter(emitter);
|
|
563
|
+
}
|
|
564
|
+
bindShutdownOwner(owner) {
|
|
565
|
+
if (null !== this._shutdownOwner) throw new TypeError('HistoryManager shutdown owner is already bound');
|
|
566
|
+
this._shutdownOwner = owner;
|
|
567
|
+
}
|
|
568
|
+
shutdown() {
|
|
569
|
+
if (null !== this._shutdownOwner) return this._shutdownOwner();
|
|
570
|
+
return this._lifecycle.shutdown(async ()=>{
|
|
571
|
+
await this.shutdownWithinLifecycle();
|
|
572
|
+
this.clearLiveStateAfterShutdown();
|
|
573
|
+
});
|
|
574
|
+
}
|
|
575
|
+
async shutdownWithinLifecycle() {
|
|
576
|
+
this._stopFlushTimer();
|
|
577
|
+
this._sessionManager.stopCleanupTimer();
|
|
578
|
+
await this._flushBuffer();
|
|
579
|
+
}
|
|
580
|
+
clearLiveStateAfterShutdown() {
|
|
581
|
+
for (const sessionId of this._sessions.keys())this._persistenceBuffer?.forgetQuiescentSession(sessionId);
|
|
582
|
+
this._sessions.clear();
|
|
583
|
+
this._referenceIndex.clearAll();
|
|
584
|
+
this._edgeStore?.clearAll();
|
|
585
|
+
this._summaryStore?.clearAll();
|
|
586
|
+
this._clearAllAuxiliaryState?.();
|
|
587
|
+
}
|
|
588
|
+
getWriteBufferLength() {
|
|
589
|
+
return this._persistenceBuffer?.pendingThoughtCount ?? 0;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
export { ABSOLUTE_MAX_HISTORY_SIZE, HistoryManager };
|
|
593
|
+
|
|
594
|
+
//# sourceMappingURL=HistoryManager.js.map
|