@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.
Files changed (422) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +260 -0
  3. package/dist/CliLifecycle.d.ts +31 -0
  4. package/dist/CliLifecycle.d.ts.map +1 -0
  5. package/dist/CliLifecycle.js +90 -0
  6. package/dist/CliLifecycle.js.map +1 -0
  7. package/dist/ServerConfig.d.ts +290 -0
  8. package/dist/ServerConfig.d.ts.map +1 -0
  9. package/dist/ServerConfig.js +175 -0
  10. package/dist/ServerConfig.js.map +1 -0
  11. package/dist/cache/DiscoveryCache.d.ts +269 -0
  12. package/dist/cache/DiscoveryCache.d.ts.map +1 -0
  13. package/dist/cache/DiscoveryCache.js +104 -0
  14. package/dist/cache/DiscoveryCache.js.map +1 -0
  15. package/dist/cli.d.ts +3 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +5177 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/config/ConfigLoader.d.ts +270 -0
  20. package/dist/config/ConfigLoader.d.ts.map +1 -0
  21. package/dist/config/ConfigLoader.js +186 -0
  22. package/dist/config/ConfigLoader.js.map +1 -0
  23. package/dist/context/RequestContext.d.ts +43 -0
  24. package/dist/context/RequestContext.d.ts.map +1 -0
  25. package/dist/context/RequestContext.js +14 -0
  26. package/dist/context/RequestContext.js.map +1 -0
  27. package/dist/contracts/PersistenceBackend.d.ts +134 -0
  28. package/dist/contracts/PersistenceBackend.d.ts.map +1 -0
  29. package/dist/contracts/PersistenceBackend.js +6 -0
  30. package/dist/contracts/PersistenceBackend.js.map +1 -0
  31. package/dist/contracts/calibrator.d.ts +97 -0
  32. package/dist/contracts/calibrator.d.ts.map +1 -0
  33. package/dist/contracts/calibrator.js +1 -0
  34. package/dist/contracts/features.d.ts +35 -0
  35. package/dist/contracts/features.d.ts.map +1 -0
  36. package/dist/contracts/features.js +12 -0
  37. package/dist/contracts/features.js.map +1 -0
  38. package/dist/contracts/ids.d.ts +68 -0
  39. package/dist/contracts/ids.d.ts.map +1 -0
  40. package/dist/contracts/ids.js +40 -0
  41. package/dist/contracts/ids.js.map +1 -0
  42. package/dist/contracts/interfaces.d.ts +254 -0
  43. package/dist/contracts/interfaces.d.ts.map +1 -0
  44. package/dist/contracts/interfaces.js +1 -0
  45. package/dist/contracts/persistence-work.d.ts +96 -0
  46. package/dist/contracts/persistence-work.d.ts.map +1 -0
  47. package/dist/contracts/persistence-work.js +1 -0
  48. package/dist/contracts/reasoning-types.d.ts +21 -0
  49. package/dist/contracts/reasoning-types.d.ts.map +1 -0
  50. package/dist/contracts/reasoning-types.js +1 -0
  51. package/dist/contracts/strategy.d.ts +107 -0
  52. package/dist/contracts/strategy.d.ts.map +1 -0
  53. package/dist/contracts/strategy.js +1 -0
  54. package/dist/contracts/summary.d.ts +110 -0
  55. package/dist/contracts/summary.d.ts.map +1 -0
  56. package/dist/contracts/summary.js +1 -0
  57. package/dist/contracts/suspension.d.ts +215 -0
  58. package/dist/contracts/suspension.d.ts.map +1 -0
  59. package/dist/contracts/suspension.js +1 -0
  60. package/dist/contracts/transport.d.ts +26 -0
  61. package/dist/contracts/transport.d.ts.map +1 -0
  62. package/dist/contracts/transport.js +1 -0
  63. package/dist/core/CrossReferenceValidator.d.ts +18 -0
  64. package/dist/core/CrossReferenceValidator.d.ts.map +1 -0
  65. package/dist/core/CrossReferenceValidator.js +125 -0
  66. package/dist/core/CrossReferenceValidator.js.map +1 -0
  67. package/dist/core/HistoryManager.d.ts +215 -0
  68. package/dist/core/HistoryManager.d.ts.map +1 -0
  69. package/dist/core/HistoryManager.js +594 -0
  70. package/dist/core/HistoryManager.js.map +1 -0
  71. package/dist/core/IHistoryManager.d.ts +163 -0
  72. package/dist/core/IHistoryManager.d.ts.map +1 -0
  73. package/dist/core/IHistoryManager.js +1 -0
  74. package/dist/core/IThoughtFormatter.d.ts +51 -0
  75. package/dist/core/IThoughtFormatter.d.ts.map +1 -0
  76. package/dist/core/IThoughtFormatter.js +1 -0
  77. package/dist/core/InputNormalizer.d.ts +140 -0
  78. package/dist/core/InputNormalizer.d.ts.map +1 -0
  79. package/dist/core/InputNormalizer.js +95 -0
  80. package/dist/core/InputNormalizer.js.map +1 -0
  81. package/dist/core/PersistenceBuffer.d.ts +204 -0
  82. package/dist/core/PersistenceBuffer.d.ts.map +1 -0
  83. package/dist/core/PersistenceBuffer.js +382 -0
  84. package/dist/core/PersistenceBuffer.js.map +1 -0
  85. package/dist/core/PersistenceBufferErrors.d.ts +22 -0
  86. package/dist/core/PersistenceBufferErrors.d.ts.map +1 -0
  87. package/dist/core/PersistenceBufferErrors.js +30 -0
  88. package/dist/core/PersistenceBufferErrors.js.map +1 -0
  89. package/dist/core/PersistenceRestore.d.ts +21 -0
  90. package/dist/core/PersistenceRestore.d.ts.map +1 -0
  91. package/dist/core/PersistenceRestore.js +87 -0
  92. package/dist/core/PersistenceRestore.js.map +1 -0
  93. package/dist/core/PersistenceWorkQueue.d.ts +155 -0
  94. package/dist/core/PersistenceWorkQueue.d.ts.map +1 -0
  95. package/dist/core/PersistenceWorkQueue.js +298 -0
  96. package/dist/core/PersistenceWorkQueue.js.map +1 -0
  97. package/dist/core/PersistenceWriter.d.ts +55 -0
  98. package/dist/core/PersistenceWriter.d.ts.map +1 -0
  99. package/dist/core/PersistenceWriter.js +112 -0
  100. package/dist/core/PersistenceWriter.js.map +1 -0
  101. package/dist/core/SessionErrors.d.ts +37 -0
  102. package/dist/core/SessionErrors.d.ts.map +1 -0
  103. package/dist/core/SessionErrors.js +50 -0
  104. package/dist/core/SessionErrors.js.map +1 -0
  105. package/dist/core/SessionLifecycleCoordinator.d.ts +74 -0
  106. package/dist/core/SessionLifecycleCoordinator.d.ts.map +1 -0
  107. package/dist/core/SessionLifecycleCoordinator.js +222 -0
  108. package/dist/core/SessionLifecycleCoordinator.js.map +1 -0
  109. package/dist/core/SessionLock.d.ts +59 -0
  110. package/dist/core/SessionLock.d.ts.map +1 -0
  111. package/dist/core/SessionLock.js +39 -0
  112. package/dist/core/SessionLock.js.map +1 -0
  113. package/dist/core/SessionManager.d.ts +62 -0
  114. package/dist/core/SessionManager.d.ts.map +1 -0
  115. package/dist/core/SessionManager.js +75 -0
  116. package/dist/core/SessionManager.js.map +1 -0
  117. package/dist/core/SessionResetCoordinator.d.ts +37 -0
  118. package/dist/core/SessionResetCoordinator.d.ts.map +1 -0
  119. package/dist/core/SessionResetCoordinator.js +80 -0
  120. package/dist/core/SessionResetCoordinator.js.map +1 -0
  121. package/dist/core/ThoughtEvaluator.d.ts +48 -0
  122. package/dist/core/ThoughtEvaluator.d.ts.map +1 -0
  123. package/dist/core/ThoughtEvaluator.js +85 -0
  124. package/dist/core/ThoughtEvaluator.js.map +1 -0
  125. package/dist/core/ThoughtFormatter.d.ts +134 -0
  126. package/dist/core/ThoughtFormatter.d.ts.map +1 -0
  127. package/dist/core/ThoughtFormatter.js +118 -0
  128. package/dist/core/ThoughtFormatter.js.map +1 -0
  129. package/dist/core/ThoughtProcessor.d.ts +259 -0
  130. package/dist/core/ThoughtProcessor.d.ts.map +1 -0
  131. package/dist/core/ThoughtProcessor.js +451 -0
  132. package/dist/core/ThoughtProcessor.js.map +1 -0
  133. package/dist/core/ThoughtReferenceIndex.d.ts +23 -0
  134. package/dist/core/ThoughtReferenceIndex.d.ts.map +1 -0
  135. package/dist/core/ThoughtReferenceIndex.js +66 -0
  136. package/dist/core/ThoughtReferenceIndex.js.map +1 -0
  137. package/dist/core/VerificationOutcomeAdmission.d.ts +15 -0
  138. package/dist/core/VerificationOutcomeAdmission.d.ts.map +1 -0
  139. package/dist/core/VerificationOutcomeAdmission.js +28 -0
  140. package/dist/core/VerificationOutcomeAdmission.js.map +1 -0
  141. package/dist/core/compression/CompressionService.d.ts +76 -0
  142. package/dist/core/compression/CompressionService.d.ts.map +1 -0
  143. package/dist/core/compression/CompressionService.js +160 -0
  144. package/dist/core/compression/CompressionService.js.map +1 -0
  145. package/dist/core/compression/DehydrationPolicy.d.ts +75 -0
  146. package/dist/core/compression/DehydrationPolicy.d.ts.map +1 -0
  147. package/dist/core/compression/DehydrationPolicy.js +45 -0
  148. package/dist/core/compression/DehydrationPolicy.js.map +1 -0
  149. package/dist/core/compression/InMemorySummaryStore.d.ts +132 -0
  150. package/dist/core/compression/InMemorySummaryStore.d.ts.map +1 -0
  151. package/dist/core/compression/InMemorySummaryStore.js +69 -0
  152. package/dist/core/compression/InMemorySummaryStore.js.map +1 -0
  153. package/dist/core/compression/Summary.d.ts +74 -0
  154. package/dist/core/compression/Summary.d.ts.map +1 -0
  155. package/dist/core/compression/Summary.js +16 -0
  156. package/dist/core/compression/Summary.js.map +1 -0
  157. package/dist/core/evaluator/Aggregator.d.ts +40 -0
  158. package/dist/core/evaluator/Aggregator.d.ts.map +1 -0
  159. package/dist/core/evaluator/Aggregator.js +36 -0
  160. package/dist/core/evaluator/Aggregator.js.map +1 -0
  161. package/dist/core/evaluator/Calibrator.d.ts +52 -0
  162. package/dist/core/evaluator/Calibrator.d.ts.map +1 -0
  163. package/dist/core/evaluator/Calibrator.js +135 -0
  164. package/dist/core/evaluator/Calibrator.js.map +1 -0
  165. package/dist/core/evaluator/PatternDetector.d.ts +69 -0
  166. package/dist/core/evaluator/PatternDetector.d.ts.map +1 -0
  167. package/dist/core/evaluator/PatternDetector.js +192 -0
  168. package/dist/core/evaluator/PatternDetector.js.map +1 -0
  169. package/dist/core/evaluator/SignalComputer.d.ts +116 -0
  170. package/dist/core/evaluator/SignalComputer.d.ts.map +1 -0
  171. package/dist/core/evaluator/SignalComputer.js +110 -0
  172. package/dist/core/evaluator/SignalComputer.js.map +1 -0
  173. package/dist/core/evaluator/calibration-math.d.ts +39 -0
  174. package/dist/core/evaluator/calibration-math.d.ts.map +1 -0
  175. package/dist/core/evaluator/calibration-math.js +42 -0
  176. package/dist/core/evaluator/calibration-math.js.map +1 -0
  177. package/dist/core/evaluator/internals.d.ts +36 -0
  178. package/dist/core/evaluator/internals.d.ts.map +1 -0
  179. package/dist/core/evaluator/internals.js +43 -0
  180. package/dist/core/evaluator/internals.js.map +1 -0
  181. package/dist/core/graph/Edge.d.ts +58 -0
  182. package/dist/core/graph/Edge.d.ts.map +1 -0
  183. package/dist/core/graph/Edge.js +1 -0
  184. package/dist/core/graph/EdgeEmitter.d.ts +68 -0
  185. package/dist/core/graph/EdgeEmitter.d.ts.map +1 -0
  186. package/dist/core/graph/EdgeEmitter.js +118 -0
  187. package/dist/core/graph/EdgeEmitter.js.map +1 -0
  188. package/dist/core/graph/EdgeStore.d.ts +116 -0
  189. package/dist/core/graph/EdgeStore.d.ts.map +1 -0
  190. package/dist/core/graph/EdgeStore.js +107 -0
  191. package/dist/core/graph/EdgeStore.js.map +1 -0
  192. package/dist/core/graph/GraphView.d.ts +157 -0
  193. package/dist/core/graph/GraphView.d.ts.map +1 -0
  194. package/dist/core/graph/GraphView.js +149 -0
  195. package/dist/core/graph/GraphView.js.map +1 -0
  196. package/dist/core/ids.d.ts +33 -0
  197. package/dist/core/ids.d.ts.map +1 -0
  198. package/dist/core/ids.js +11 -0
  199. package/dist/core/ids.js.map +1 -0
  200. package/dist/core/reasoning/OutcomeRecorder.d.ts +88 -0
  201. package/dist/core/reasoning/OutcomeRecorder.d.ts.map +1 -0
  202. package/dist/core/reasoning/OutcomeRecorder.js +51 -0
  203. package/dist/core/reasoning/OutcomeRecorder.js.map +1 -0
  204. package/dist/core/reasoning/strategies/SequentialStrategy.d.ts +54 -0
  205. package/dist/core/reasoning/strategies/SequentialStrategy.d.ts.map +1 -0
  206. package/dist/core/reasoning/strategies/SequentialStrategy.js +22 -0
  207. package/dist/core/reasoning/strategies/SequentialStrategy.js.map +1 -0
  208. package/dist/core/reasoning/strategies/StrategyFactory.d.ts +25 -0
  209. package/dist/core/reasoning/strategies/StrategyFactory.d.ts.map +1 -0
  210. package/dist/core/reasoning/strategies/StrategyFactory.js +16 -0
  211. package/dist/core/reasoning/strategies/StrategyFactory.js.map +1 -0
  212. package/dist/core/reasoning/strategies/TreeOfThoughtStrategy.d.ts +58 -0
  213. package/dist/core/reasoning/strategies/TreeOfThoughtStrategy.d.ts.map +1 -0
  214. package/dist/core/reasoning/strategies/TreeOfThoughtStrategy.js +103 -0
  215. package/dist/core/reasoning/strategies/TreeOfThoughtStrategy.js.map +1 -0
  216. package/dist/core/reasoning/strategies/plateau.d.ts +18 -0
  217. package/dist/core/reasoning/strategies/plateau.d.ts.map +1 -0
  218. package/dist/core/reasoning/strategies/plateau.js +12 -0
  219. package/dist/core/reasoning/strategies/plateau.js.map +1 -0
  220. package/dist/core/reasoning/strategies/totScoring.d.ts +91 -0
  221. package/dist/core/reasoning/strategies/totScoring.d.ts.map +1 -0
  222. package/dist/core/reasoning/strategies/totScoring.js +88 -0
  223. package/dist/core/reasoning/strategies/totScoring.js.map +1 -0
  224. package/dist/core/reasoning.d.ts +179 -0
  225. package/dist/core/reasoning.d.ts.map +1 -0
  226. package/dist/core/reasoning.js +1 -0
  227. package/dist/core/step.d.ts +50 -0
  228. package/dist/core/step.d.ts.map +1 -0
  229. package/dist/core/step.js +1 -0
  230. package/dist/core/thought.d.ts +113 -0
  231. package/dist/core/thought.d.ts.map +1 -0
  232. package/dist/core/thought.js +1 -0
  233. package/dist/core/tools/InMemorySuspensionStore.d.ts +66 -0
  234. package/dist/core/tools/InMemorySuspensionStore.d.ts.map +1 -0
  235. package/dist/core/tools/InMemorySuspensionStore.js +121 -0
  236. package/dist/core/tools/InMemorySuspensionStore.js.map +1 -0
  237. package/dist/di/Container.d.ts +253 -0
  238. package/dist/di/Container.d.ts.map +1 -0
  239. package/dist/di/Container.js +111 -0
  240. package/dist/di/Container.js.map +1 -0
  241. package/dist/di/ServiceRegistry.d.ts +50 -0
  242. package/dist/di/ServiceRegistry.d.ts.map +1 -0
  243. package/dist/di/ServiceRegistry.js +1 -0
  244. package/dist/errors.d.ts +663 -0
  245. package/dist/errors.d.ts.map +1 -0
  246. package/dist/errors.js +282 -0
  247. package/dist/errors.js.map +1 -0
  248. package/dist/health/HealthChecker.d.ts +73 -0
  249. package/dist/health/HealthChecker.d.ts.map +1 -0
  250. package/dist/health/HealthChecker.js +70 -0
  251. package/dist/health/HealthChecker.js.map +1 -0
  252. package/dist/lib.d.ts +273 -0
  253. package/dist/lib.d.ts.map +1 -0
  254. package/dist/lib.js +409 -0
  255. package/dist/lib.js.map +1 -0
  256. package/dist/logger/NullLogger.d.ts +154 -0
  257. package/dist/logger/NullLogger.d.ts.map +1 -0
  258. package/dist/logger/NullLogger.js +24 -0
  259. package/dist/logger/NullLogger.js.map +1 -0
  260. package/dist/logger/StructuredLogger.d.ts +327 -0
  261. package/dist/logger/StructuredLogger.d.ts.map +1 -0
  262. package/dist/logger/StructuredLogger.js +72 -0
  263. package/dist/logger/StructuredLogger.js.map +1 -0
  264. package/dist/metrics/metrics.impl.d.ts +252 -0
  265. package/dist/metrics/metrics.impl.d.ts.map +1 -0
  266. package/dist/metrics/metrics.impl.js +197 -0
  267. package/dist/metrics/metrics.impl.js.map +1 -0
  268. package/dist/persistence/FileLegacyImport.d.ts +2 -0
  269. package/dist/persistence/FileLegacyImport.d.ts.map +1 -0
  270. package/dist/persistence/FileLegacyImport.js +183 -0
  271. package/dist/persistence/FileLegacyImport.js.map +1 -0
  272. package/dist/persistence/FilePersistence.d.ts +53 -0
  273. package/dist/persistence/FilePersistence.d.ts.map +1 -0
  274. package/dist/persistence/FilePersistence.js +312 -0
  275. package/dist/persistence/FilePersistence.js.map +1 -0
  276. package/dist/persistence/FileSnapshotTypes.d.ts +29 -0
  277. package/dist/persistence/FileSnapshotTypes.d.ts.map +1 -0
  278. package/dist/persistence/FileSnapshotTypes.js +1 -0
  279. package/dist/persistence/FileSnapshotV2.d.ts +377 -0
  280. package/dist/persistence/FileSnapshotV2.d.ts.map +1 -0
  281. package/dist/persistence/FileSnapshotV2.js +124 -0
  282. package/dist/persistence/FileSnapshotV2.js.map +1 -0
  283. package/dist/persistence/FileSnapshotValidation.d.ts +15 -0
  284. package/dist/persistence/FileSnapshotValidation.d.ts.map +1 -0
  285. package/dist/persistence/FileSnapshotValidation.js +64 -0
  286. package/dist/persistence/FileSnapshotValidation.js.map +1 -0
  287. package/dist/persistence/FileWriter.d.ts +30 -0
  288. package/dist/persistence/FileWriter.d.ts.map +1 -0
  289. package/dist/persistence/FileWriter.js +155 -0
  290. package/dist/persistence/FileWriter.js.map +1 -0
  291. package/dist/persistence/MemoryPersistence.d.ts +45 -0
  292. package/dist/persistence/MemoryPersistence.d.ts.map +1 -0
  293. package/dist/persistence/MemoryPersistence.js +180 -0
  294. package/dist/persistence/MemoryPersistence.js.map +1 -0
  295. package/dist/persistence/PersistenceCodec.d.ts +7 -0
  296. package/dist/persistence/PersistenceCodec.d.ts.map +1 -0
  297. package/dist/persistence/PersistenceCodec.js +97 -0
  298. package/dist/persistence/PersistenceCodec.js.map +1 -0
  299. package/dist/persistence/PersistenceErrors.d.ts +23 -0
  300. package/dist/persistence/PersistenceErrors.d.ts.map +1 -0
  301. package/dist/persistence/PersistenceErrors.js +26 -0
  302. package/dist/persistence/PersistenceErrors.js.map +1 -0
  303. package/dist/persistence/PersistenceFactory.d.ts +21 -0
  304. package/dist/persistence/PersistenceFactory.d.ts.map +1 -0
  305. package/dist/persistence/PersistenceFactory.js +28 -0
  306. package/dist/persistence/PersistenceFactory.js.map +1 -0
  307. package/dist/persistence/PersistenceScope.d.ts +42 -0
  308. package/dist/persistence/PersistenceScope.d.ts.map +1 -0
  309. package/dist/persistence/PersistenceScope.js +93 -0
  310. package/dist/persistence/PersistenceScope.js.map +1 -0
  311. package/dist/persistence/SessionScopedPersistence.d.ts +4 -0
  312. package/dist/persistence/SessionScopedPersistence.d.ts.map +1 -0
  313. package/dist/persistence/SessionScopedPersistence.js +9 -0
  314. package/dist/persistence/SessionScopedPersistence.js.map +1 -0
  315. package/dist/persistence/SqliteDriver.d.ts +22 -0
  316. package/dist/persistence/SqliteDriver.d.ts.map +1 -0
  317. package/dist/persistence/SqliteDriver.js +29 -0
  318. package/dist/persistence/SqliteDriver.js.map +1 -0
  319. package/dist/persistence/SqliteLegacyImport.d.ts +14 -0
  320. package/dist/persistence/SqliteLegacyImport.d.ts.map +1 -0
  321. package/dist/persistence/SqliteLegacyImport.js +136 -0
  322. package/dist/persistence/SqliteLegacyImport.js.map +1 -0
  323. package/dist/persistence/SqliteLegacySchema.d.ts +15 -0
  324. package/dist/persistence/SqliteLegacySchema.d.ts.map +1 -0
  325. package/dist/persistence/SqliteLegacySchema.js +72 -0
  326. package/dist/persistence/SqliteLegacySchema.js.map +1 -0
  327. package/dist/persistence/SqlitePayload.d.ts +11 -0
  328. package/dist/persistence/SqlitePayload.d.ts.map +1 -0
  329. package/dist/persistence/SqlitePayload.js +86 -0
  330. package/dist/persistence/SqlitePayload.js.map +1 -0
  331. package/dist/persistence/SqlitePersistence.d.ts +49 -0
  332. package/dist/persistence/SqlitePersistence.d.ts.map +1 -0
  333. package/dist/persistence/SqlitePersistence.js +248 -0
  334. package/dist/persistence/SqlitePersistence.js.map +1 -0
  335. package/dist/persistence/SqliteSchemaV2.d.ts +14 -0
  336. package/dist/persistence/SqliteSchemaV2.d.ts.map +1 -0
  337. package/dist/persistence/SqliteSchemaV2.js +129 -0
  338. package/dist/persistence/SqliteSchemaV2.js.map +1 -0
  339. package/dist/persistence/SqliteSnapshotWriter.d.ts +17 -0
  340. package/dist/persistence/SqliteSnapshotWriter.d.ts.map +1 -0
  341. package/dist/persistence/SqliteSnapshotWriter.js +30 -0
  342. package/dist/persistence/SqliteSnapshotWriter.js.map +1 -0
  343. package/dist/pool/ConnectionPool.d.ts +203 -0
  344. package/dist/pool/ConnectionPool.d.ts.map +1 -0
  345. package/dist/pool/ConnectionPool.js +303 -0
  346. package/dist/pool/ConnectionPool.js.map +1 -0
  347. package/dist/pool/IConnectionPool.d.ts +143 -0
  348. package/dist/pool/IConnectionPool.d.ts.map +1 -0
  349. package/dist/pool/IConnectionPool.js +1 -0
  350. package/dist/pool/PoolErrors.d.ts +11 -0
  351. package/dist/pool/PoolErrors.d.ts.map +1 -0
  352. package/dist/pool/PoolErrors.js +16 -0
  353. package/dist/pool/PoolErrors.js.map +1 -0
  354. package/dist/registry/BaseRegistry.d.ts +219 -0
  355. package/dist/registry/BaseRegistry.d.ts.map +1 -0
  356. package/dist/registry/BaseRegistry.js +215 -0
  357. package/dist/registry/BaseRegistry.js.map +1 -0
  358. package/dist/registry/SkillRegistry.d.ts +67 -0
  359. package/dist/registry/SkillRegistry.d.ts.map +1 -0
  360. package/dist/registry/SkillRegistry.js +87 -0
  361. package/dist/registry/SkillRegistry.js.map +1 -0
  362. package/dist/registry/ToolRegistry.d.ts +70 -0
  363. package/dist/registry/ToolRegistry.d.ts.map +1 -0
  364. package/dist/registry/ToolRegistry.js +96 -0
  365. package/dist/registry/ToolRegistry.js.map +1 -0
  366. package/dist/sanitize.d.ts +164 -0
  367. package/dist/sanitize.d.ts.map +1 -0
  368. package/dist/sanitize.js +100 -0
  369. package/dist/sanitize.js.map +1 -0
  370. package/dist/schema.d.ts +562 -0
  371. package/dist/schema.d.ts.map +1 -0
  372. package/dist/schema.js +251 -0
  373. package/dist/schema.js.map +1 -0
  374. package/dist/transport/BaseTransport.d.ts +166 -0
  375. package/dist/transport/BaseTransport.d.ts.map +1 -0
  376. package/dist/transport/BaseTransport.js +199 -0
  377. package/dist/transport/BaseTransport.js.map +1 -0
  378. package/dist/transport/HttpHelpers.d.ts +53 -0
  379. package/dist/transport/HttpHelpers.d.ts.map +1 -0
  380. package/dist/transport/HttpHelpers.js +44 -0
  381. package/dist/transport/HttpHelpers.js.map +1 -0
  382. package/dist/transport/HttpRequestLifecycle.d.ts +37 -0
  383. package/dist/transport/HttpRequestLifecycle.d.ts.map +1 -0
  384. package/dist/transport/HttpRequestLifecycle.js +87 -0
  385. package/dist/transport/HttpRequestLifecycle.js.map +1 -0
  386. package/dist/transport/HttpTransport.d.ts +140 -0
  387. package/dist/transport/HttpTransport.d.ts.map +1 -0
  388. package/dist/transport/HttpTransport.js +245 -0
  389. package/dist/transport/HttpTransport.js.map +1 -0
  390. package/dist/transport/SseTransport.d.ts +149 -0
  391. package/dist/transport/SseTransport.d.ts.map +1 -0
  392. package/dist/transport/SseTransport.js +470 -0
  393. package/dist/transport/SseTransport.js.map +1 -0
  394. package/dist/transport/StreamableHttpTransport.d.ts +225 -0
  395. package/dist/transport/StreamableHttpTransport.d.ts.map +1 -0
  396. package/dist/transport/StreamableHttpTransport.js +449 -0
  397. package/dist/transport/StreamableHttpTransport.js.map +1 -0
  398. package/dist/types/disposable.d.ts +22 -0
  399. package/dist/types/disposable.d.ts.map +1 -0
  400. package/dist/types/disposable.js +1 -0
  401. package/dist/types/server-config.d.ts +32 -0
  402. package/dist/types/server-config.d.ts.map +1 -0
  403. package/dist/types/server-config.js +1 -0
  404. package/dist/types/skill.d.ts +74 -0
  405. package/dist/types/skill.d.ts.map +1 -0
  406. package/dist/types/skill.js +1 -0
  407. package/dist/types/tool.d.ts +78 -0
  408. package/dist/types/tool.d.ts.map +1 -0
  409. package/dist/types/tool.js +1 -0
  410. package/dist/utils.d.ts +27 -0
  411. package/dist/utils.d.ts.map +1 -0
  412. package/dist/utils.js +6 -0
  413. package/dist/utils.js.map +1 -0
  414. package/dist/watchers/SkillWatcher.d.ts +25 -0
  415. package/dist/watchers/SkillWatcher.d.ts.map +1 -0
  416. package/dist/watchers/SkillWatcher.js +96 -0
  417. package/dist/watchers/SkillWatcher.js.map +1 -0
  418. package/dist/watchers/ToolWatcher.d.ts +24 -0
  419. package/dist/watchers/ToolWatcher.d.ts.map +1 -0
  420. package/dist/watchers/ToolWatcher.js +92 -0
  421. package/dist/watchers/ToolWatcher.js.map +1 -0
  422. 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
+ [![npm version](https://img.shields.io/npm/v/%40iworkforces%2Ftracelattice?color=blue&label=npm)](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"}