@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
package/LICENSE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
This is free and unencumbered software released into the public domain.
|
|
2
|
+
|
|
3
|
+
Anyone is free to copy, modify, publish, use, compile, sell, or
|
|
4
|
+
distribute this software, either in source code form or as a compiled
|
|
5
|
+
binary, for any purpose, commercial or non-commercial, and by any
|
|
6
|
+
means.
|
|
7
|
+
|
|
8
|
+
In jurisdictions that recognize copyright laws, the author or authors
|
|
9
|
+
of this software dedicate any and all copyright interest in the
|
|
10
|
+
software to the public domain. We make this dedication for the benefit
|
|
11
|
+
of the public at large and to the detriment of our heirs and
|
|
12
|
+
successors. We intend this dedication to be an overt act of
|
|
13
|
+
relinquishment in perpetuity of all present and future rights to this
|
|
14
|
+
software under copyright law.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
19
|
+
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
20
|
+
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
21
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
|
23
|
+
|
|
24
|
+
For more information, please refer to <https://unlicense.org>
|
package/README.md
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
# TraceLattice
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@iworkforces/tracelattice)
|
|
4
|
+
|
|
5
|
+
An MCP server that gives AI agents structured sequential thinking with tool and skill recommendations. Thoughts live in a DAG, reasoning strategies are pluggable, and confidence scores can be calibrated against recorded outcomes.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- 11 thought types: regular, hypothesis, verification, critique, synthesis, meta, tool_call, tool_observation, assumption, decomposition, backtrack
|
|
10
|
+
- DAG-based thought graph with 8 edge kinds (sequence, branch, merge, verifies, critiques, derives_from, tool_invocation, revises) and topological traversal
|
|
11
|
+
- Pluggable reasoning strategies. Sequential by default, or Tree-of-Thought with BFS/beam search and plateau detection
|
|
12
|
+
- Tool interleave: suspend a thinking chain, run a tool call, then resume where you left off
|
|
13
|
+
- Confidence calibration using Beta(2,2) priors, Brier score, and Expected Calibration Error (ECE)
|
|
14
|
+
- Branch compression: cold branches get rolled into summaries automatically, with a sliding-window dehydration policy
|
|
15
|
+
- Outcome recording for tool_call/tool_observation results with metadata
|
|
16
|
+
- Tool and skill recommendations with confidence scores, rationales, and automatic discovery
|
|
17
|
+
- Per-session isolation with TTL eviction and LRU caching
|
|
18
|
+
- CLI transports: stdio (default), SSE (legacy), and Streamable HTTP (production). A stateless HTTP JSON-RPC transport is also available as a library transport
|
|
19
|
+
- Strict TypeScript, Valibot validation, 2100 passing tests, 18-service DI container
|
|
20
|
+
|
|
21
|
+
## Install
|
|
22
|
+
|
|
23
|
+
Requires [Node.js](https://nodejs.org/) v22+ for development and build tooling. The packaged CLI is built with a Bun shebang, so install [Bun](https://bun.sh/) when running the `tracelattice` binary directly.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install -g @iworkforces/tracelattice
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Configure your MCP client
|
|
30
|
+
|
|
31
|
+
The default transport is stdio. Add the server to your client:
|
|
32
|
+
|
|
33
|
+
### Claude Code
|
|
34
|
+
|
|
35
|
+
User-scoped (`~/.claude.json`) or project-scoped (`.mcp.json` in project root):
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"mcpServers": {
|
|
40
|
+
"tracelattice": {
|
|
41
|
+
"command": "tracelattice"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Or via CLI:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
claude mcp add tracelattice -- tracelattice
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Codex CLI
|
|
54
|
+
|
|
55
|
+
User-scoped (`~/.codex/config.toml`) or project-scoped (`.codex/config.toml`):
|
|
56
|
+
|
|
57
|
+
```toml
|
|
58
|
+
[mcp_servers.tracelattice]
|
|
59
|
+
command = "tracelattice"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Or via CLI:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
codex mcp add tracelattice -- tracelattice
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Grok Build
|
|
69
|
+
|
|
70
|
+
Add TraceLattice as a local MCP server:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
grok mcp add tracelattice -- tracelattice
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
For a project-scoped MCP configuration, add `--scope project`:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
grok mcp add --scope project tracelattice -- tracelattice
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### OpenCode
|
|
83
|
+
|
|
84
|
+
Global (`~/.config/opencode/opencode.json`) or project-scoped (`.opencode.json`):
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"mcpServers": {
|
|
89
|
+
"tracelattice": {
|
|
90
|
+
"type": "local",
|
|
91
|
+
"command": [
|
|
92
|
+
"npx",
|
|
93
|
+
"-y",
|
|
94
|
+
"@iworkforces/tracelattice"
|
|
95
|
+
],
|
|
96
|
+
"enabled": true,
|
|
97
|
+
"environment": {
|
|
98
|
+
"MAX_HISTORY_SIZE": "10000",
|
|
99
|
+
"LOG_LEVEL": "debug"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Configuration
|
|
107
|
+
|
|
108
|
+
### Server
|
|
109
|
+
|
|
110
|
+
Set `LOG_LEVEL` in the process environment to `debug`, `info`, `warn`, or `error`:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
LOG_LEVEL=debug tracelattice
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Environment variables override values from configuration files.
|
|
117
|
+
|
|
118
|
+
| Variable | Default | Description |
|
|
119
|
+
|----------|---------|-------------|
|
|
120
|
+
| `MAX_HISTORY_SIZE` | `10000` | Maximum thoughts to keep in history |
|
|
121
|
+
| `MAX_BRANCHES` | `50` | Maximum number of branches |
|
|
122
|
+
| `MAX_BRANCH_SIZE` | `100` | Maximum size of each branch |
|
|
123
|
+
| `LOG_LEVEL` | `info` | Log level: `debug`, `info`, `warn`, `error` |
|
|
124
|
+
| `PRETTY_LOG` | `true` | Enable pretty log output |
|
|
125
|
+
| `SESSION_MAX_PER_OWNER` | `50` | Maximum isolated sessions per owner |
|
|
126
|
+
| `TRACELATTICE_TOOL_INTERLEAVE_TTL_MS` | `60000` | Suspended tool-call token TTL in ms |
|
|
127
|
+
| `TRACELATTICE_TOOL_INTERLEAVE_SWEEP_MS` | `60000` | Expired suspension cleanup interval in ms |
|
|
128
|
+
|
|
129
|
+
### Config files
|
|
130
|
+
|
|
131
|
+
Configuration files are loaded from the first matching path in this order: a custom path passed to `ConfigLoader`, `.claude/config.json`, `.claude/config.yaml`, `.claude/config.yml`, then the same filenames under `~/.claude/`. Environment variables override file values.
|
|
132
|
+
|
|
133
|
+
```yaml
|
|
134
|
+
maxHistorySize: 10000
|
|
135
|
+
maxBranches: 50
|
|
136
|
+
maxBranchSize: 100
|
|
137
|
+
skillDirs:
|
|
138
|
+
- .claude/skills
|
|
139
|
+
- ~/.claude/skills
|
|
140
|
+
discoveryCache:
|
|
141
|
+
ttl: 300000
|
|
142
|
+
maxSize: 100
|
|
143
|
+
persistence:
|
|
144
|
+
enabled: false
|
|
145
|
+
backend: memory # memory, file, or sqlite
|
|
146
|
+
options:
|
|
147
|
+
dataDir: ./.tracelattice
|
|
148
|
+
dbPath: ./.tracelattice/history.db
|
|
149
|
+
features:
|
|
150
|
+
dagEdges: true
|
|
151
|
+
reasoningStrategy: sequential # sequential or tot
|
|
152
|
+
calibration: true
|
|
153
|
+
compression: true
|
|
154
|
+
toolInterleave: true
|
|
155
|
+
newThoughtTypes: true
|
|
156
|
+
outcomeRecording: true
|
|
157
|
+
toolInterleaveTtlMs: 60000
|
|
158
|
+
toolInterleaveSweepMs: 60000
|
|
159
|
+
maxSessionsPerOwner: 50
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Feature flags
|
|
163
|
+
|
|
164
|
+
All feature flags default to enabled in `ServerConfig`. Set a boolean flag to `false` or `0` to opt out, or to `true` or `1` to opt back in.
|
|
165
|
+
|
|
166
|
+
| Variable | Description |
|
|
167
|
+
|----------|-------------|
|
|
168
|
+
| `TRACELATTICE_FEATURES_DAG_EDGES` | Enable DAG edges for thought relationships |
|
|
169
|
+
| `TRACELATTICE_FEATURES_CALIBRATION` | Enable confidence calibration with Beta(2,2) priors |
|
|
170
|
+
| `TRACELATTICE_FEATURES_COMPRESSION` | Enable branch compression for cold branches |
|
|
171
|
+
| `TRACELATTICE_FEATURES_TOOL_INTERLEAVE` | Enable suspend/resume for tool calls |
|
|
172
|
+
| `TRACELATTICE_FEATURES_NEW_THOUGHT_TYPES` | Enable tool_call, tool_observation, assumption, decomposition, backtrack |
|
|
173
|
+
| `TRACELATTICE_FEATURES_OUTCOME_RECORDING` | Enable outcome recording for tool results |
|
|
174
|
+
| `TRACELATTICE_FEATURES_REASONING_STRATEGY` | Strategy: `sequential` (default) or `tot` |
|
|
175
|
+
|
|
176
|
+
### Transport
|
|
177
|
+
|
|
178
|
+
| Variable | Default | Description |
|
|
179
|
+
|----------|---------|-------------|
|
|
180
|
+
| `TRANSPORT_TYPE` | `stdio` | Transport: `stdio`, `sse`, or `streamable-http` |
|
|
181
|
+
| `STREAMABLE_HTTP_PORT` | `3000` | Port for Streamable HTTP server |
|
|
182
|
+
| `STREAMABLE_HTTP_HOST` | `localhost` | Host for Streamable HTTP server |
|
|
183
|
+
| `STREAMABLE_HTTP_STATEFUL` | `true` | Enable stateful session tracking |
|
|
184
|
+
| `SSE_PORT` | `3000` | Port for SSE server |
|
|
185
|
+
| `SSE_HOST` | `localhost` | Host for SSE server |
|
|
186
|
+
| `SSE_ENABLE_POOL` | `true` | Enable connection pool for session isolation |
|
|
187
|
+
| `SSE_MAX_SESSIONS` | `100` | Maximum concurrent SSE sessions |
|
|
188
|
+
| `SSE_SESSION_TIMEOUT` | `300000` | SSE session timeout (ms) |
|
|
189
|
+
| `CORS_ORIGIN` | `*` | CORS origin |
|
|
190
|
+
| `ENABLE_CORS` | `true` | Enable CORS preflight |
|
|
191
|
+
| `ALLOWED_HOSTS` | derived from bound host | Comma-separated allowed `Host` header values |
|
|
192
|
+
|
|
193
|
+
### Skill discovery
|
|
194
|
+
|
|
195
|
+
| Variable | Default | Description |
|
|
196
|
+
|----------|---------|-------------|
|
|
197
|
+
| `SKILL_DIRS` | `.claude/skills:<home>/.claude/skills` | Colon-separated skill directories |
|
|
198
|
+
| `DISCOVERY_CACHE_TTL` | `300` | Discovery cache TTL in seconds when set through env; stored internally as ms |
|
|
199
|
+
| `DISCOVERY_CACHE_MAX_SIZE` | `100` | Discovery cache max entries |
|
|
200
|
+
|
|
201
|
+
## Transports
|
|
202
|
+
|
|
203
|
+
Set `TRANSPORT_TYPE` to pick one:
|
|
204
|
+
|
|
205
|
+
| Transport | When to use | Command |
|
|
206
|
+
|-----------|-------------|---------|
|
|
207
|
+
| `stdio` (default) | Local MCP clients | `tracelattice` |
|
|
208
|
+
| `sse` (legacy) | Multi-user setups, backwards compatibility | `TRANSPORT_TYPE=sse tracelattice` |
|
|
209
|
+
| `streamable-http` | Production deployments | `TRANSPORT_TYPE=streamable-http tracelattice` |
|
|
210
|
+
|
|
211
|
+
The Streamable HTTP endpoint defaults to `POST /mcp` for JSON-RPC requests and supports stateful sessions via the `Mcp-Session-Id` header. The SSE transport defaults to `GET /sse` and `POST /sse/message`. The library also exposes `HttpTransport` for stateless JSON-RPC over HTTP, but the CLI does not select it with `TRANSPORT_TYPE`.
|
|
212
|
+
|
|
213
|
+
## Development
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
npm install
|
|
217
|
+
npm run dev # MCP inspector (bunx @modelcontextprotocol/inspector dist/cli.js)
|
|
218
|
+
npm test # vitest run
|
|
219
|
+
npm run test:watch # vitest watch
|
|
220
|
+
npm run test:coverage # vitest run --coverage
|
|
221
|
+
npm run type-check # tsc --noEmit
|
|
222
|
+
npm run lint # eslint src/
|
|
223
|
+
npm run lint:fix # eslint src/ --fix
|
|
224
|
+
npm run format # prettier --write
|
|
225
|
+
npm run format:check # prettier --check
|
|
226
|
+
npm run build # rslib build + rsbuild build + postbuild-cli.mjs
|
|
227
|
+
npm run build:lib # rslib build only
|
|
228
|
+
npm run build:cli # rsbuild build + postbuild-cli.mjs
|
|
229
|
+
npm start # bun dist/cli.js
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Architecture
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
src/
|
|
236
|
+
├── core/ # Domain logic
|
|
237
|
+
│ ├── graph/ # DAG edges: Edge, EdgeStore, GraphView
|
|
238
|
+
│ ├── evaluator/ # SignalComputer, Aggregator, PatternDetector, Calibrator
|
|
239
|
+
│ ├── compression/ # CompressionService, DehydrationPolicy, InMemorySummaryStore
|
|
240
|
+
│ ├── reasoning/ # OutcomeRecorder + strategies (Sequential, TreeOfThought, StrategyFactory)
|
|
241
|
+
│ └── tools/ # InMemorySuspensionStore (suspend/resume)
|
|
242
|
+
├── contracts/ # Shared interfaces and branded ID types (cross-module coupling point)
|
|
243
|
+
├── persistence/ # File, SQLite, Memory backends (with saveEdges/loadEdges)
|
|
244
|
+
├── transport/ # SSE, Streamable HTTP, HTTP JSON-RPC
|
|
245
|
+
├── di/ # IoC container (18 services) + ServiceRegistry
|
|
246
|
+
├── registry/ # Tool/Skill discovery with frontmatter parsing and LRU cache
|
|
247
|
+
├── config/ # YAML + env var loading
|
|
248
|
+
├── cache/ # LRU+TTL discovery cache
|
|
249
|
+
├── logger/ # Structured logging (JSON/pretty)
|
|
250
|
+
├── pool/ # Multi-user session pool
|
|
251
|
+
├── metrics/ # Prometheus metrics
|
|
252
|
+
├── health/ # Aggregate health checking
|
|
253
|
+
├── watchers/ # File-system watchers for tool/skill discovery
|
|
254
|
+
├── context/ # Request context via AsyncLocalStorage
|
|
255
|
+
└── types/ # Shared type definitions
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## License
|
|
259
|
+
|
|
260
|
+
MIT
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const CLI_SHUTDOWN_DEADLINE_MS = 30000;
|
|
2
|
+
export interface CliOwnedResource {
|
|
3
|
+
stop(): void | Promise<void>;
|
|
4
|
+
}
|
|
5
|
+
export interface CliShutdownBoundary {
|
|
6
|
+
reportFailure(error: unknown): void;
|
|
7
|
+
exit(code: 0 | 1): void;
|
|
8
|
+
}
|
|
9
|
+
export interface CliLifecycleOptions {
|
|
10
|
+
readonly deadlineMs?: number;
|
|
11
|
+
readonly clock?: CliLifecycleClock;
|
|
12
|
+
}
|
|
13
|
+
export interface CliLifecycleClock {
|
|
14
|
+
setTimeout(callback: () => void, delayMs: number): NodeJS.Timeout;
|
|
15
|
+
clearTimeout(handle: NodeJS.Timeout): void;
|
|
16
|
+
}
|
|
17
|
+
export declare class CliLifecycle {
|
|
18
|
+
private readonly _server;
|
|
19
|
+
private readonly _deadlineMs;
|
|
20
|
+
private readonly _clock;
|
|
21
|
+
private _transport;
|
|
22
|
+
private _shutdownPromise;
|
|
23
|
+
constructor(server: CliOwnedResource, options?: CliLifecycleOptions);
|
|
24
|
+
attachTransport(transport: CliOwnedResource): void;
|
|
25
|
+
shutdown(): Promise<void>;
|
|
26
|
+
rollbackStartup(startupFailure: unknown): Promise<never>;
|
|
27
|
+
private _startShutdown;
|
|
28
|
+
private _stopOwnedResources;
|
|
29
|
+
}
|
|
30
|
+
export declare function createCliShutdownHandler(lifecycle: CliLifecycle, boundary: CliShutdownBoundary): () => Promise<void>;
|
|
31
|
+
//# sourceMappingURL=CliLifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliLifecycle.d.ts","sourceRoot":"","sources":["../src/CliLifecycle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAChC,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IACnC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IACjC,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAClE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAC3C;AAeD,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,gBAAgB,CAA8B;gBAE1C,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,mBAAwB;IAMvE,eAAe,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAKlD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQnB,eAAe,CAAC,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAW9D,OAAO,CAAC,cAAc;YAiBR,mBAAmB;CAcjC;AAED,wBAAgB,wBAAwB,CACvC,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,mBAAmB,GAC3B,MAAM,OAAO,CAAC,IAAI,CAAC,CAarB"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { CliShutdownTimeoutError } from "./errors.js";
|
|
2
|
+
const CLI_SHUTDOWN_DEADLINE_MS = 30000;
|
|
3
|
+
const SYSTEM_CLOCK = {
|
|
4
|
+
setTimeout: (callback, delayMs)=>setTimeout(callback, delayMs),
|
|
5
|
+
clearTimeout: (handle)=>clearTimeout(handle)
|
|
6
|
+
};
|
|
7
|
+
function appendFailure(failures, failure) {
|
|
8
|
+
if (failure instanceof AggregateError) {
|
|
9
|
+
for (const nestedFailure of failure.errors)appendFailure(failures, nestedFailure);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
failures.push(failure);
|
|
13
|
+
}
|
|
14
|
+
class CliLifecycle {
|
|
15
|
+
_server;
|
|
16
|
+
_deadlineMs;
|
|
17
|
+
_clock;
|
|
18
|
+
_transport = null;
|
|
19
|
+
_shutdownPromise = null;
|
|
20
|
+
constructor(server, options = {}){
|
|
21
|
+
this._server = server;
|
|
22
|
+
this._deadlineMs = options.deadlineMs ?? CLI_SHUTDOWN_DEADLINE_MS;
|
|
23
|
+
this._clock = options.clock ?? SYSTEM_CLOCK;
|
|
24
|
+
}
|
|
25
|
+
attachTransport(transport) {
|
|
26
|
+
if (this._transport) throw new TypeError('CLI transport owner is already attached');
|
|
27
|
+
this._transport = transport;
|
|
28
|
+
}
|
|
29
|
+
shutdown() {
|
|
30
|
+
if (this._shutdownPromise) return this._shutdownPromise;
|
|
31
|
+
const completion = Promise.withResolvers();
|
|
32
|
+
this._shutdownPromise = completion.promise;
|
|
33
|
+
this._startShutdown(completion);
|
|
34
|
+
return this._shutdownPromise;
|
|
35
|
+
}
|
|
36
|
+
async rollbackStartup(startupFailure) {
|
|
37
|
+
const rollbackFailure = await this.shutdown().then(()=>null, (error)=>error);
|
|
38
|
+
if (null === rollbackFailure) throw startupFailure;
|
|
39
|
+
const failures = [
|
|
40
|
+
startupFailure
|
|
41
|
+
];
|
|
42
|
+
appendFailure(failures, rollbackFailure);
|
|
43
|
+
throw new AggregateError(failures, 'CLI startup failed and rollback did not complete cleanly');
|
|
44
|
+
}
|
|
45
|
+
_startShutdown(completion) {
|
|
46
|
+
const deadline = Promise.withResolvers();
|
|
47
|
+
const timeout = this._clock.setTimeout(()=>{
|
|
48
|
+
deadline.reject(new CliShutdownTimeoutError(this._deadlineMs));
|
|
49
|
+
}, this._deadlineMs);
|
|
50
|
+
Promise.race([
|
|
51
|
+
this._stopOwnedResources(),
|
|
52
|
+
deadline.promise
|
|
53
|
+
]).then(()=>{
|
|
54
|
+
this._clock.clearTimeout(timeout);
|
|
55
|
+
completion.resolve();
|
|
56
|
+
}, (error)=>{
|
|
57
|
+
this._clock.clearTimeout(timeout);
|
|
58
|
+
completion.reject(error);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async _stopOwnedResources() {
|
|
62
|
+
const failures = [];
|
|
63
|
+
const resources = this._transport ? [
|
|
64
|
+
this._transport,
|
|
65
|
+
this._server
|
|
66
|
+
] : [
|
|
67
|
+
this._server
|
|
68
|
+
];
|
|
69
|
+
for (const resource of resources)try {
|
|
70
|
+
await resource.stop();
|
|
71
|
+
} catch (error) {
|
|
72
|
+
appendFailure(failures, error);
|
|
73
|
+
}
|
|
74
|
+
if (failures.length > 0) throw new AggregateError(failures, 'CLI shutdown did not complete cleanly');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function createCliShutdownHandler(lifecycle, boundary) {
|
|
78
|
+
let handlerPromise = null;
|
|
79
|
+
return ()=>{
|
|
80
|
+
if (handlerPromise) return handlerPromise;
|
|
81
|
+
handlerPromise = lifecycle.shutdown().then(()=>boundary.exit(0), (error)=>{
|
|
82
|
+
boundary.reportFailure(error);
|
|
83
|
+
boundary.exit(1);
|
|
84
|
+
});
|
|
85
|
+
return handlerPromise;
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export { CLI_SHUTDOWN_DEADLINE_MS, CliLifecycle, createCliShutdownHandler };
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=CliLifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliLifecycle.js","sources":["../src/CliLifecycle.ts"],"sourcesContent":["import { CliShutdownTimeoutError } from './errors.js';\n\nexport const CLI_SHUTDOWN_DEADLINE_MS = 30_000;\n\nexport interface CliOwnedResource {\n\tstop(): void | Promise<void>;\n}\n\nexport interface CliShutdownBoundary {\n\treportFailure(error: unknown): void;\n\texit(code: 0 | 1): void;\n}\n\nexport interface CliLifecycleOptions {\n\treadonly deadlineMs?: number;\n\treadonly clock?: CliLifecycleClock;\n}\n\nexport interface CliLifecycleClock {\n\tsetTimeout(callback: () => void, delayMs: number): NodeJS.Timeout;\n\tclearTimeout(handle: NodeJS.Timeout): void;\n}\n\nconst SYSTEM_CLOCK: CliLifecycleClock = {\n\tsetTimeout: (callback, delayMs) => setTimeout(callback, delayMs),\n\tclearTimeout: (handle) => clearTimeout(handle),\n};\n\nfunction appendFailure(failures: unknown[], failure: unknown): void {\n\tif (failure instanceof AggregateError) {\n\t\tfor (const nestedFailure of failure.errors) appendFailure(failures, nestedFailure);\n\t\treturn;\n\t}\n\tfailures.push(failure);\n}\n\nexport class CliLifecycle {\n\tprivate readonly _server: CliOwnedResource;\n\tprivate readonly _deadlineMs: number;\n\tprivate readonly _clock: CliLifecycleClock;\n\tprivate _transport: CliOwnedResource | null = null;\n\tprivate _shutdownPromise: Promise<void> | null = null;\n\n\tconstructor(server: CliOwnedResource, options: CliLifecycleOptions = {}) {\n\t\tthis._server = server;\n\t\tthis._deadlineMs = options.deadlineMs ?? CLI_SHUTDOWN_DEADLINE_MS;\n\t\tthis._clock = options.clock ?? SYSTEM_CLOCK;\n\t}\n\n\tattachTransport(transport: CliOwnedResource): void {\n\t\tif (this._transport) throw new TypeError('CLI transport owner is already attached');\n\t\tthis._transport = transport;\n\t}\n\n\tshutdown(): Promise<void> {\n\t\tif (this._shutdownPromise) return this._shutdownPromise;\n\t\tconst completion = Promise.withResolvers<void>();\n\t\tthis._shutdownPromise = completion.promise;\n\t\tthis._startShutdown(completion);\n\t\treturn this._shutdownPromise;\n\t}\n\n\tasync rollbackStartup(startupFailure: unknown): Promise<never> {\n\t\tconst rollbackFailure = await this.shutdown().then(\n\t\t\t() => null,\n\t\t\t(error: unknown) => error\n\t\t);\n\t\tif (rollbackFailure === null) throw startupFailure;\n\t\tconst failures = [startupFailure];\n\t\tappendFailure(failures, rollbackFailure);\n\t\tthrow new AggregateError(failures, 'CLI startup failed and rollback did not complete cleanly');\n\t}\n\n\tprivate _startShutdown(completion: PromiseWithResolvers<void>): void {\n\t\tconst deadline = Promise.withResolvers<never>();\n\t\tconst timeout = this._clock.setTimeout(() => {\n\t\t\tdeadline.reject(new CliShutdownTimeoutError(this._deadlineMs));\n\t\t}, this._deadlineMs);\n\t\tvoid Promise.race([this._stopOwnedResources(), deadline.promise]).then(\n\t\t\t() => {\n\t\t\t\tthis._clock.clearTimeout(timeout);\n\t\t\t\tcompletion.resolve();\n\t\t\t},\n\t\t\t(error: unknown) => {\n\t\t\t\tthis._clock.clearTimeout(timeout);\n\t\t\t\tcompletion.reject(error);\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate async _stopOwnedResources(): Promise<void> {\n\t\tconst failures: unknown[] = [];\n\t\tconst resources = this._transport ? [this._transport, this._server] : [this._server];\n\t\tfor (const resource of resources) {\n\t\t\ttry {\n\t\t\t\tawait resource.stop();\n\t\t\t} catch (error) {\n\t\t\t\tappendFailure(failures, error);\n\t\t\t}\n\t\t}\n\t\tif (failures.length > 0) {\n\t\t\tthrow new AggregateError(failures, 'CLI shutdown did not complete cleanly');\n\t\t}\n\t}\n}\n\nexport function createCliShutdownHandler(\n\tlifecycle: CliLifecycle,\n\tboundary: CliShutdownBoundary\n): () => Promise<void> {\n\tlet handlerPromise: Promise<void> | null = null;\n\treturn (): Promise<void> => {\n\t\tif (handlerPromise) return handlerPromise;\n\t\thandlerPromise = lifecycle.shutdown().then(\n\t\t\t() => boundary.exit(0),\n\t\t\t(error: unknown) => {\n\t\t\t\tboundary.reportFailure(error);\n\t\t\t\tboundary.exit(1);\n\t\t\t}\n\t\t);\n\t\treturn handlerPromise;\n\t};\n}\n"],"names":["CLI_SHUTDOWN_DEADLINE_MS","SYSTEM_CLOCK","callback","delayMs","setTimeout","handle","clearTimeout","appendFailure","failures","failure","AggregateError","nestedFailure","CliLifecycle","server","options","transport","TypeError","completion","Promise","startupFailure","rollbackFailure","error","deadline","timeout","CliShutdownTimeoutError","resources","resource","createCliShutdownHandler","lifecycle","boundary","handlerPromise"],"mappings":";AAEO,MAAMA,2BAA2B;AAqBxC,MAAMC,eAAkC;IACvC,YAAY,CAACC,UAAUC,UAAYC,WAAWF,UAAUC;IACxD,cAAc,CAACE,SAAWC,aAAaD;AACxC;AAEA,SAASE,cAAcC,QAAmB,EAAEC,OAAgB;IAC3D,IAAIA,mBAAmBC,gBAAgB;QACtC,KAAK,MAAMC,iBAAiBF,QAAQ,MAAM,CAAEF,cAAcC,UAAUG;QACpE;IACD;IACAH,SAAS,IAAI,CAACC;AACf;AAEO,MAAMG;IACK,QAA0B;IAC1B,YAAoB;IACpB,OAA0B;IACnC,aAAsC,KAAK;IAC3C,mBAAyC,KAAK;IAEtD,YAAYC,MAAwB,EAAEC,UAA+B,CAAC,CAAC,CAAE;QACxE,IAAI,CAAC,OAAO,GAAGD;QACf,IAAI,CAAC,WAAW,GAAGC,QAAQ,UAAU,IAAId;QACzC,IAAI,CAAC,MAAM,GAAGc,QAAQ,KAAK,IAAIb;IAChC;IAEA,gBAAgBc,SAA2B,EAAQ;QAClD,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,IAAIC,UAAU;QACzC,IAAI,CAAC,UAAU,GAAGD;IACnB;IAEA,WAA0B;QACzB,IAAI,IAAI,CAAC,gBAAgB,EAAE,OAAO,IAAI,CAAC,gBAAgB;QACvD,MAAME,aAAaC,QAAQ,aAAa;QACxC,IAAI,CAAC,gBAAgB,GAAGD,WAAW,OAAO;QAC1C,IAAI,CAAC,cAAc,CAACA;QACpB,OAAO,IAAI,CAAC,gBAAgB;IAC7B;IAEA,MAAM,gBAAgBE,cAAuB,EAAkB;QAC9D,MAAMC,kBAAkB,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CACjD,IAAM,MACN,CAACC,QAAmBA;QAErB,IAAID,AAAoB,SAApBA,iBAA0B,MAAMD;QACpC,MAAMX,WAAW;YAACW;SAAe;QACjCZ,cAAcC,UAAUY;QACxB,MAAM,IAAIV,eAAeF,UAAU;IACpC;IAEQ,eAAeS,UAAsC,EAAQ;QACpE,MAAMK,WAAWJ,QAAQ,aAAa;QACtC,MAAMK,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YACtCD,SAAS,MAAM,CAAC,IAAIE,wBAAwB,IAAI,CAAC,WAAW;QAC7D,GAAG,IAAI,CAAC,WAAW;QACdN,QAAQ,IAAI,CAAC;YAAC,IAAI,CAAC,mBAAmB;YAAII,SAAS,OAAO;SAAC,EAAE,IAAI,CACrE;YACC,IAAI,CAAC,MAAM,CAAC,YAAY,CAACC;YACzBN,WAAW,OAAO;QACnB,GACA,CAACI;YACA,IAAI,CAAC,MAAM,CAAC,YAAY,CAACE;YACzBN,WAAW,MAAM,CAACI;QACnB;IAEF;IAEA,MAAc,sBAAqC;QAClD,MAAMb,WAAsB,EAAE;QAC9B,MAAMiB,YAAY,IAAI,CAAC,UAAU,GAAG;YAAC,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,OAAO;SAAC,GAAG;YAAC,IAAI,CAAC,OAAO;SAAC;QACpF,KAAK,MAAMC,YAAYD,UACtB,IAAI;YACH,MAAMC,SAAS,IAAI;QACpB,EAAE,OAAOL,OAAO;YACfd,cAAcC,UAAUa;QACzB;QAED,IAAIb,SAAS,MAAM,GAAG,GACrB,MAAM,IAAIE,eAAeF,UAAU;IAErC;AACD;AAEO,SAASmB,yBACfC,SAAuB,EACvBC,QAA6B;IAE7B,IAAIC,iBAAuC;IAC3C,OAAO;QACN,IAAIA,gBAAgB,OAAOA;QAC3BA,iBAAiBF,UAAU,QAAQ,GAAG,IAAI,CACzC,IAAMC,SAAS,IAAI,CAAC,IACpB,CAACR;YACAQ,SAAS,aAAa,CAACR;YACvBQ,SAAS,IAAI,CAAC;QACf;QAED,OAAOC;IACR;AACD"}
|