@iworkforces/tracelattice 2.1.2 → 2.2.1

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 (134) hide show
  1. package/README.md +45 -10
  2. package/dist/ServerConfig.d.ts +9 -5
  3. package/dist/ServerConfig.d.ts.map +1 -1
  4. package/dist/ServerConfig.js.map +1 -1
  5. package/dist/config/ConfigLoader.d.ts +20 -7
  6. package/dist/config/ConfigLoader.d.ts.map +1 -1
  7. package/dist/config/ConfigLoader.js.map +1 -1
  8. package/dist/contracts/PersistenceBackend.d.ts +10 -1
  9. package/dist/contracts/PersistenceBackend.d.ts.map +1 -1
  10. package/dist/contracts/calibrator.d.ts +9 -6
  11. package/dist/contracts/calibrator.d.ts.map +1 -1
  12. package/dist/contracts/interfaces.d.ts +6 -0
  13. package/dist/contracts/interfaces.d.ts.map +1 -1
  14. package/dist/contracts/persistence-work.d.ts +13 -1
  15. package/dist/contracts/persistence-work.d.ts.map +1 -1
  16. package/dist/contracts/strategy.d.ts +14 -9
  17. package/dist/contracts/strategy.d.ts.map +1 -1
  18. package/dist/core/DurableThoughtIdentityIndex.d.ts +35 -0
  19. package/dist/core/DurableThoughtIdentityIndex.d.ts.map +1 -0
  20. package/dist/core/DurableThoughtIdentityIndex.js +94 -0
  21. package/dist/core/DurableThoughtIdentityIndex.js.map +1 -0
  22. package/dist/core/HistoryManager.d.ts +5 -0
  23. package/dist/core/HistoryManager.d.ts.map +1 -1
  24. package/dist/core/HistoryManager.js +37 -4
  25. package/dist/core/HistoryManager.js.map +1 -1
  26. package/dist/core/IHistoryManager.d.ts +2 -0
  27. package/dist/core/IHistoryManager.d.ts.map +1 -1
  28. package/dist/core/PersistenceBuffer.d.ts +7 -1
  29. package/dist/core/PersistenceBuffer.d.ts.map +1 -1
  30. package/dist/core/PersistenceBuffer.js +13 -1
  31. package/dist/core/PersistenceBuffer.js.map +1 -1
  32. package/dist/core/PersistenceRestore.d.ts.map +1 -1
  33. package/dist/core/PersistenceRestore.js +11 -3
  34. package/dist/core/PersistenceRestore.js.map +1 -1
  35. package/dist/core/PersistenceWorkQueue.d.ts +13 -1
  36. package/dist/core/PersistenceWorkQueue.d.ts.map +1 -1
  37. package/dist/core/PersistenceWorkQueue.js +86 -11
  38. package/dist/core/PersistenceWorkQueue.js.map +1 -1
  39. package/dist/core/PersistenceWriter.d.ts.map +1 -1
  40. package/dist/core/PersistenceWriter.js +3 -0
  41. package/dist/core/PersistenceWriter.js.map +1 -1
  42. package/dist/core/ThoughtEvaluator.d.ts +7 -4
  43. package/dist/core/ThoughtEvaluator.d.ts.map +1 -1
  44. package/dist/core/ThoughtEvaluator.js +15 -7
  45. package/dist/core/ThoughtEvaluator.js.map +1 -1
  46. package/dist/core/ThoughtProcessor.d.ts.map +1 -1
  47. package/dist/core/ThoughtProcessor.js +19 -7
  48. package/dist/core/ThoughtProcessor.js.map +1 -1
  49. package/dist/core/ThoughtReferenceIndex.d.ts +4 -0
  50. package/dist/core/ThoughtReferenceIndex.d.ts.map +1 -1
  51. package/dist/core/ThoughtReferenceIndex.js +28 -1
  52. package/dist/core/ThoughtReferenceIndex.js.map +1 -1
  53. package/dist/core/VerificationOutcomeAdmission.d.ts +8 -1
  54. package/dist/core/VerificationOutcomeAdmission.d.ts.map +1 -1
  55. package/dist/core/VerificationOutcomeAdmission.js.map +1 -1
  56. package/dist/core/VerificationTargetRestore.d.ts +5 -0
  57. package/dist/core/VerificationTargetRestore.d.ts.map +1 -0
  58. package/dist/core/VerificationTargetRestore.js +61 -0
  59. package/dist/core/VerificationTargetRestore.js.map +1 -0
  60. package/dist/core/evaluator/Aggregator.d.ts +2 -1
  61. package/dist/core/evaluator/Aggregator.d.ts.map +1 -1
  62. package/dist/core/evaluator/Aggregator.js +4 -12
  63. package/dist/core/evaluator/Aggregator.js.map +1 -1
  64. package/dist/core/evaluator/Calibrator.d.ts +13 -9
  65. package/dist/core/evaluator/Calibrator.d.ts.map +1 -1
  66. package/dist/core/evaluator/Calibrator.js +25 -11
  67. package/dist/core/evaluator/Calibrator.js.map +1 -1
  68. package/dist/core/evaluator/PatternDetector.d.ts +2 -1
  69. package/dist/core/evaluator/PatternDetector.d.ts.map +1 -1
  70. package/dist/core/evaluator/PatternDetector.js +13 -12
  71. package/dist/core/evaluator/PatternDetector.js.map +1 -1
  72. package/dist/core/evaluator/SignalComputer.d.ts +3 -2
  73. package/dist/core/evaluator/SignalComputer.d.ts.map +1 -1
  74. package/dist/core/evaluator/SignalComputer.js +4 -9
  75. package/dist/core/evaluator/SignalComputer.js.map +1 -1
  76. package/dist/core/evaluator/VerificationLinks.d.ts +19 -0
  77. package/dist/core/evaluator/VerificationLinks.d.ts.map +1 -0
  78. package/dist/core/evaluator/VerificationLinks.js +113 -0
  79. package/dist/core/evaluator/VerificationLinks.js.map +1 -0
  80. package/dist/core/evaluator/calibration-math.d.ts +12 -2
  81. package/dist/core/evaluator/calibration-math.d.ts.map +1 -1
  82. package/dist/core/evaluator/calibration-math.js +11 -2
  83. package/dist/core/evaluator/calibration-math.js.map +1 -1
  84. package/dist/core/graph/EdgeEmitter.d.ts.map +1 -1
  85. package/dist/core/graph/EdgeEmitter.js +2 -1
  86. package/dist/core/graph/EdgeEmitter.js.map +1 -1
  87. package/dist/core/graph/GraphView.d.ts +5 -5
  88. package/dist/core/graph/GraphView.d.ts.map +1 -1
  89. package/dist/core/graph/GraphView.js +11 -11
  90. package/dist/core/graph/GraphView.js.map +1 -1
  91. package/dist/core/reasoning/ActiveEvidenceProjection.d.ts +20 -0
  92. package/dist/core/reasoning/ActiveEvidenceProjection.d.ts.map +1 -0
  93. package/dist/core/reasoning/ActiveEvidenceProjection.js +100 -0
  94. package/dist/core/reasoning/ActiveEvidenceProjection.js.map +1 -0
  95. package/dist/core/reasoning/strategies/TreeOfThoughtStrategy.d.ts +5 -4
  96. package/dist/core/reasoning/strategies/TreeOfThoughtStrategy.d.ts.map +1 -1
  97. package/dist/core/reasoning/strategies/TreeOfThoughtStrategy.js +24 -14
  98. package/dist/core/reasoning/strategies/TreeOfThoughtStrategy.js.map +1 -1
  99. package/dist/lib.d.ts.map +1 -1
  100. package/dist/lib.js +3 -1
  101. package/dist/lib.js.map +1 -1
  102. package/dist/metrics/metrics.impl.d.ts.map +1 -1
  103. package/dist/metrics/metrics.impl.js +19 -7
  104. package/dist/metrics/metrics.impl.js.map +1 -1
  105. package/dist/persistence/BacktrackPersistence.d.ts +13 -0
  106. package/dist/persistence/BacktrackPersistence.d.ts.map +1 -0
  107. package/dist/persistence/BacktrackPersistence.js +90 -0
  108. package/dist/persistence/BacktrackPersistence.js.map +1 -0
  109. package/dist/persistence/FilePersistence.d.ts +2 -1
  110. package/dist/persistence/FilePersistence.d.ts.map +1 -1
  111. package/dist/persistence/FilePersistence.js +28 -0
  112. package/dist/persistence/FilePersistence.js.map +1 -1
  113. package/dist/persistence/FileSnapshotV2.d.ts +2 -0
  114. package/dist/persistence/FileSnapshotV2.d.ts.map +1 -1
  115. package/dist/persistence/FileSnapshotV2.js +6 -2
  116. package/dist/persistence/FileSnapshotV2.js.map +1 -1
  117. package/dist/persistence/MemoryPersistence.d.ts +2 -1
  118. package/dist/persistence/MemoryPersistence.d.ts.map +1 -1
  119. package/dist/persistence/MemoryPersistence.js +21 -1
  120. package/dist/persistence/MemoryPersistence.js.map +1 -1
  121. package/dist/persistence/PersistenceCodec.d.ts.map +1 -1
  122. package/dist/persistence/PersistenceCodec.js +5 -0
  123. package/dist/persistence/PersistenceCodec.js.map +1 -1
  124. package/dist/persistence/PersistenceErrors.d.ts +1 -1
  125. package/dist/persistence/PersistenceErrors.d.ts.map +1 -1
  126. package/dist/persistence/PersistenceErrors.js.map +1 -1
  127. package/dist/persistence/PersistenceScope.d.ts +1 -1
  128. package/dist/persistence/PersistenceScope.d.ts.map +1 -1
  129. package/dist/persistence/PersistenceScope.js.map +1 -1
  130. package/dist/persistence/SqlitePersistence.d.ts +2 -1
  131. package/dist/persistence/SqlitePersistence.d.ts.map +1 -1
  132. package/dist/persistence/SqlitePersistence.js +18 -0
  133. package/dist/persistence/SqlitePersistence.js.map +1 -1
  134. package/package.json +12 -11
@@ -2,7 +2,8 @@
2
2
  * Calibrator contracts — interfaces for confidence calibration.
3
3
  *
4
4
  * Defines the shape of calibration metrics, results, and the calibrator
5
- * service that maps raw model confidence to calibrated probabilities.
5
+ * service that maps raw model confidence to calibrated probabilities. It does not guarantee
6
+ * factuality, universal improvement, or monotonic change for each example.
6
7
  *
7
8
  * @module contracts/calibrator
8
9
  */
@@ -18,9 +19,9 @@ import type { ThoughtType } from './reasoning-types.js';
18
19
  * ```
19
20
  */
20
21
  export interface CalibrationMetrics {
21
- /** Brier score across all samples (lower is better). `null` if no samples. */
22
+ /** Brier score across stored raw predictions and outcomes (lower is better). `null` if empty. */
22
23
  readonly brierScore: number | null;
23
- /** Expected Calibration Error (lower is better). `null` if no samples. */
24
+ /** ECE across stored raw predictions and outcomes (lower is better). `null` if empty. */
24
25
  readonly ece: number | null;
25
26
  /** Number of (prediction, outcome) samples backing the metrics. */
26
27
  readonly sampleCount: number;
@@ -43,7 +44,7 @@ export interface CalibrationResult {
43
44
  readonly calibrated: number;
44
45
  /** Temperature used in the calibration mapping (1.0 = identity). */
45
46
  readonly temperature: number;
46
- /** Weight applied to the prior when blending with the raw signal. */
47
+ /** Weight applied to the raw confidence prior when blending with empirical evidence. */
47
48
  readonly priorWeight: number;
48
49
  }
49
50
  /**
@@ -51,7 +52,9 @@ export interface CalibrationResult {
51
52
  * probabilities and reports calibration quality.
52
53
  *
53
54
  * Implementations should be deterministic for the same `(raw, type, sessionId)`
54
- * triple given a fixed internal state.
55
+ * triple given a fixed internal state. They blend raw confidence with the per-type empirical
56
+ * outcome mean using `priorWeight = 10 / (10 + n)`. At `n = 0`, the empirical component has
57
+ * zero weight and the result is raw exactly. Temperature, when fitted, is applied after blending.
55
58
  *
56
59
  * @example
57
60
  * ```typescript
@@ -61,7 +64,7 @@ export interface CalibrationResult {
61
64
  * ```
62
65
  */
63
66
  export interface ICalibrator {
64
- /** Whether calibration is enabled. When `false`, `calibrate()` returns `raw` unchanged. */
67
+ /** Whether calibration is enabled. When `false`, `calibrate()` returns raw unchanged. */
65
68
  readonly enabled: boolean;
66
69
  /**
67
70
  * Map a raw confidence value to a calibrated value.
@@ -1 +1 @@
1
- {"version":3,"file":"calibrator.d.ts","sourceRoot":"","sources":["../../src/contracts/calibrator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,0EAA0E;IAC1E,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CAC1D;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,WAAW;IAC3B,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;;;;OAOG;IACH,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,iBAAiB,CAAC;IAC7F;;;;;OAKG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,kBAAkB,CAAC;IACnD;;;;OAIG;IACH,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACzC,8CAA8C;IAC9C,QAAQ,IAAI,IAAI,CAAC;CACjB"}
1
+ {"version":3,"file":"calibrator.d.ts","sourceRoot":"","sources":["../../src/contracts/calibrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IAClC,iGAAiG;IACjG,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,yFAAyF;IACzF,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CAC1D;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,wFAAwF;IACxF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,WAAW;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;;;;OAOG;IACH,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,iBAAiB,CAAC;IAC7F;;;;;OAKG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,kBAAkB,CAAC;IACnD;;;;OAIG;IACH,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACzC,8CAA8C;IAC9C,QAAQ,IAAI,IAAI,CAAC;CACjB"}
@@ -205,6 +205,12 @@ export interface IEdgeStore {
205
205
  */
206
206
  size(sessionId?: SessionId): number;
207
207
  }
208
+ export interface IGraphViewStore {
209
+ outgoing(sessionId: SessionId, from: ThoughtId): readonly Edge[];
210
+ incoming(sessionId: SessionId, to: ThoughtId): readonly Edge[];
211
+ edgesForSession(sessionId: SessionId): readonly Edge[];
212
+ nodesForSession?(sessionId: SessionId): readonly ThoughtId[];
213
+ }
208
214
  /**
209
215
  * Tool registry interface used for tool_name allowlisting in ThoughtProcessor.
210
216
  *
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/contracts/interfaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/contracts/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5F,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzF,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAClG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IACvE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACzD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACzD,KAAK,IAAI,IAAI,CAAC;IACd,MAAM,IAAI,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IAClC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;IAChB,IAAI,IAAI,MAAM,CAAC;IACf,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IACnC,+CAA+C;IAC/C,SAAS,EAAE,SAAS,CAAC;IACrB,2CAA2C;IAC3C,SAAS,EAAE,SAAS,CAAC;IACrB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IACd,iDAAiD;IACjD,IAAI,EAAE,WAAW,CAAC;IAClB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAChC;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAElE;;;OAGG;IACH,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC;IAE3E;;;OAGG;IACH,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,mBAAmB,EAAE,CAAC;IAEzD;;;OAGG;IACH,cAAc,IAAI,mBAAmB,EAAE,CAAC;IAExC;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAE1C;;;OAGG;IACH,gBAAgB,IAAI,IAAI,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,UAAU;IAC1B;;;;;;;OAOG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAE1B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAEtC;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;IAEjE;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;IAE/D;;;;;OAKG;IACH,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;IAEvD;;;;;OAKG;IACH,YAAY,CACX,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,WAAW,CAAC,SAAS,CAAC,EAC1C,wBAAwB,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,GAC/C,MAAM,CAAC;IAEV;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAEzC;;;OAGG;IACH,QAAQ,IAAI,IAAI,CAAC;IAEjB;;;;;OAKG;IACH,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;IACjE,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;IAC/D,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;IACvD,eAAe,CAAC,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,SAAS,EAAE,CAAC;CAC7D;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAE3B;;OAEG;IACH,QAAQ,IAAI,MAAM,EAAE,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,YAAY;IAC5B;;;;;;;OAOG;IACH,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAExF,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;IAExC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB"}
@@ -6,7 +6,7 @@
6
6
  import type { Summary } from '../core/compression/Summary.js';
7
7
  import type { Edge } from '../core/graph/Edge.js';
8
8
  import type { ThoughtData } from '../core/thought.js';
9
- import type { BranchId, SessionId } from './ids.js';
9
+ import type { BranchId, SessionId, ThoughtId } from './ids.js';
10
10
  /** Stable queue-assigned identity for one accepted persistence unit. */
11
11
  export type PersistenceWorkToken = string;
12
12
  /**
@@ -20,6 +20,12 @@ export type PersistenceWork = {
20
20
  readonly token: PersistenceWorkToken;
21
21
  readonly sessionId: SessionId;
22
22
  readonly thought: ThoughtData;
23
+ } | {
24
+ readonly kind: 'backtrack';
25
+ readonly token: PersistenceWorkToken;
26
+ readonly sessionId: SessionId;
27
+ readonly thought: ThoughtData;
28
+ readonly targetThoughtId: ThoughtId;
23
29
  } | {
24
30
  readonly kind: 'branch';
25
31
  readonly operation: 'save';
@@ -62,6 +68,12 @@ export type PersistenceWorkFailure = {
62
68
  readonly sessionId: SessionId;
63
69
  readonly attempts: number;
64
70
  readonly cause: unknown;
71
+ } | {
72
+ readonly kind: 'backtrack';
73
+ readonly token: PersistenceWorkToken;
74
+ readonly sessionId: SessionId;
75
+ readonly attempts: number;
76
+ readonly cause: unknown;
65
77
  } | {
66
78
  readonly kind: 'branch';
67
79
  readonly operation: 'save' | 'delete';
@@ -1 +1 @@
1
- {"version":3,"file":"persistence-work.d.ts","sourceRoot":"","sources":["../../src/contracts/persistence-work.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistence-work.d.ts","sourceRoot":"","sources":["../../src/contracts/persistence-work.ts"],"names":[],"mappings":"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"}
@@ -12,18 +12,26 @@ import type { SessionId } from './ids.js';
12
12
  import type { ThoughtData } from '../core/thought.js';
13
13
  import type { ReasoningStats } from '../core/reasoning.js';
14
14
  import type { GraphView } from '../core/graph/GraphView.js';
15
+ export interface ActiveEvidenceProjection {
16
+ /** Active, immutable deep-copied main-history evidence in retained main order. */
17
+ readonly mainHistory: readonly ThoughtData[];
18
+ /** Active, immutable deep-copied thoughts, including branch-only retained evidence. */
19
+ readonly activeThoughts: readonly ThoughtData[];
20
+ /** Graph induced only by active endpoints, without path contraction or audit-store mutation. */
21
+ readonly graph: GraphView | undefined;
22
+ }
15
23
  /**
16
24
  * Read-only snapshot of session state passed to a reasoning strategy.
17
25
  *
18
- * All fields are immutable references. Strategies MUST NOT mutate the
19
- * history, graph, or stats — doing so will corrupt downstream consumers.
26
+ * Evidence is a first-class active projection. Its thoughts and graph are immutable deep copies;
27
+ * `mainHistory` preserves retained main order, `activeThoughts` permits branch-only lookup, and
28
+ * its graph includes only active endpoints. It never contracts paths or mutates the audit store.
20
29
  *
21
30
  * @example
22
31
  * ```ts
23
32
  * const ctx: StrategyContext = {
24
33
  * sessionId: 'sess_42',
25
- * history: hm.getHistory('sess_42'),
26
- * graph: new GraphView(edgeStore, 'sess_42'),
34
+ * evidence: buildActiveEvidenceProjection(...),
27
35
  * stats: evaluator.computeStats(history),
28
36
  * currentThought: latestThought,
29
37
  * };
@@ -33,10 +41,7 @@ import type { GraphView } from '../core/graph/GraphView.js';
33
41
  export interface StrategyContext {
34
42
  /** Session identifier this context belongs to. */
35
43
  readonly sessionId: SessionId;
36
- /** Chronological list of thoughts recorded in this session. */
37
- readonly history: readonly ThoughtData[];
38
- /** Read-only graph view for traversal (ancestors, descendants, etc.). Undefined when DAG edges are disabled. */
39
- readonly graph: GraphView | undefined;
44
+ readonly evidence: ActiveEvidenceProjection;
40
45
  /** Aggregated reasoning analytics for the session. */
41
46
  readonly stats: ReasoningStats;
42
47
  /** The thought that just triggered the strategy decision. */
@@ -89,7 +94,7 @@ export type StrategyDecision = {
89
94
  * }
90
95
  * shouldBranch(_ctx: StrategyContext): boolean { return false; }
91
96
  * shouldTerminate(ctx: StrategyContext): boolean {
92
- * return ctx.history.length >= 50;
97
+ * return ctx.evidence.mainHistory.length >= 50;
93
98
  * }
94
99
  * }
95
100
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../src/contracts/strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAG5D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,eAAe;IAC/B,kDAAkD;IAClD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,gHAAgH;IAChH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IACtC,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,6DAA6D;IAC7D,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;CACrC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,gBAAgB,GACzB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,kBAAkB;IAClC,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,MAAM,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB,CAAC;IAC/C,oDAAoD;IACpD,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;IAC5C,uDAAuD;IACvD,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;CAC/C"}
1
+ {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../src/contracts/strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,WAAW,wBAAwB;IACxC,kFAAkF;IAClF,QAAQ,CAAC,WAAW,EAAE,SAAS,WAAW,EAAE,CAAC;IAC7C,uFAAuF;IACvF,QAAQ,CAAC,cAAc,EAAE,SAAS,WAAW,EAAE,CAAC;IAChD,gGAAgG;IAChG,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,eAAe;IAC/B,kDAAkD;IAClD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;IAC5C,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,6DAA6D;IAC7D,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;CACrC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,gBAAgB,GACzB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,kBAAkB;IAClC,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,MAAM,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB,CAAC;IAC/C,oDAAoD;IACpD,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;IAC5C,uDAAuD;IACvD,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;CAC/C"}
@@ -0,0 +1,35 @@
1
+ import type { BranchId, SessionId, ThoughtId } from '../contracts/ids.js';
2
+ import type { ThoughtData } from './thought.js';
3
+ export type DurableHistoryRetention = {
4
+ readonly kind: 'bounded';
5
+ readonly maxHistorySize: number;
6
+ } | {
7
+ readonly kind: 'unlimited';
8
+ };
9
+ export declare function normalizeDurableHistoryRetention(maxHistorySize: number): DurableHistoryRetention;
10
+ export type DurableIdentityBranch = {
11
+ readonly branchId: BranchId;
12
+ readonly thoughts: readonly ThoughtData[];
13
+ };
14
+ export type DurableIdentitySession = {
15
+ readonly sessionId: SessionId;
16
+ readonly history: readonly ThoughtData[];
17
+ readonly branches: readonly DurableIdentityBranch[];
18
+ };
19
+ export declare class DurableThoughtIdentityIndex {
20
+ private readonly _historyRetention;
21
+ private readonly _sessions;
22
+ constructor(_historyRetention: DurableHistoryRetention);
23
+ has(sessionId: SessionId, thoughtId: ThoughtId): boolean;
24
+ appendThought(sessionId: SessionId, thought: ThoughtData): void;
25
+ replaceBranch(sessionId: SessionId, branchId: BranchId, thoughts: readonly ThoughtData[]): void;
26
+ deleteBranch(sessionId: SessionId, branchId: BranchId): void;
27
+ replaceAll(sessions: readonly DurableIdentitySession[]): void;
28
+ clearSession(sessionId: SessionId): void;
29
+ clearAll(): void;
30
+ private _session;
31
+ private _add;
32
+ private _remove;
33
+ private _deleteEmptySession;
34
+ }
35
+ //# sourceMappingURL=DurableThoughtIdentityIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DurableThoughtIdentityIndex.d.ts","sourceRoot":"","sources":["../../src/core/DurableThoughtIdentityIndex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,uBAAuB,GAClC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAEhG,wBAAgB,gCAAgC,CAAC,cAAc,EAAE,MAAM,GAAG,uBAAuB,CAEhG;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACpD,CAAC;AAQF,qBAAa,2BAA2B;IAGpB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAFrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;gBAEjC,iBAAiB,EAAE,uBAAuB;IAEvE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO;IAIxD,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAmB/D,aAAa,CACnB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,SAAS,WAAW,EAAE,GAC9B,IAAI;IAYA,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAQ5D,UAAU,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,GAAG,IAAI;IAU7D,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIxC,QAAQ,IAAI,IAAI;IAIvB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,mBAAmB;CAK3B"}
@@ -0,0 +1,94 @@
1
+ import { assertNever } from "../utils.js";
2
+ function normalizeDurableHistoryRetention(maxHistorySize) {
3
+ return maxHistorySize > 0 ? {
4
+ kind: 'bounded',
5
+ maxHistorySize
6
+ } : {
7
+ kind: 'unlimited'
8
+ };
9
+ }
10
+ class DurableThoughtIdentityIndex {
11
+ _historyRetention;
12
+ _sessions = new Map();
13
+ constructor(_historyRetention){
14
+ this._historyRetention = _historyRetention;
15
+ }
16
+ has(sessionId, thoughtId) {
17
+ return this._sessions.get(sessionId)?.counts.has(thoughtId) === true;
18
+ }
19
+ appendThought(sessionId, thought) {
20
+ if (void 0 === thought.id) return;
21
+ const session = this._session(sessionId);
22
+ session.history.push(thought.id);
23
+ this._add(session, thought.id);
24
+ switch(this._historyRetention.kind){
25
+ case 'unlimited':
26
+ return;
27
+ case 'bounded':
28
+ while(session.history.length > this._historyRetention.maxHistorySize){
29
+ const removed = session.history.shift();
30
+ if (void 0 !== removed) this._remove(session, removed);
31
+ }
32
+ return;
33
+ default:
34
+ assertNever(this._historyRetention);
35
+ }
36
+ }
37
+ replaceBranch(sessionId, branchId, thoughts) {
38
+ const session = this._session(sessionId);
39
+ for (const thoughtId of session.branches.get(branchId) ?? [])this._remove(session, thoughtId);
40
+ const replacement = thoughts.flatMap((thought)=>void 0 === thought.id ? [] : [
41
+ thought.id
42
+ ]);
43
+ if (0 === replacement.length) session.branches.delete(branchId);
44
+ else session.branches.set(branchId, replacement);
45
+ for (const thoughtId of replacement)this._add(session, thoughtId);
46
+ this._deleteEmptySession(sessionId, session);
47
+ }
48
+ deleteBranch(sessionId, branchId) {
49
+ const session = this._sessions.get(sessionId);
50
+ if (void 0 === session) return;
51
+ for (const thoughtId of session.branches.get(branchId) ?? [])this._remove(session, thoughtId);
52
+ session.branches.delete(branchId);
53
+ this._deleteEmptySession(sessionId, session);
54
+ }
55
+ replaceAll(sessions) {
56
+ this._sessions.clear();
57
+ for (const session of sessions){
58
+ for (const thought of session.history)this.appendThought(session.sessionId, thought);
59
+ for (const branch of session.branches)this.replaceBranch(session.sessionId, branch.branchId, branch.thoughts);
60
+ }
61
+ }
62
+ clearSession(sessionId) {
63
+ this._sessions.delete(sessionId);
64
+ }
65
+ clearAll() {
66
+ this._sessions.clear();
67
+ }
68
+ _session(sessionId) {
69
+ const existing = this._sessions.get(sessionId);
70
+ if (void 0 !== existing) return existing;
71
+ const created = {
72
+ history: [],
73
+ branches: new Map(),
74
+ counts: new Map()
75
+ };
76
+ this._sessions.set(sessionId, created);
77
+ return created;
78
+ }
79
+ _add(session, thoughtId) {
80
+ session.counts.set(thoughtId, (session.counts.get(thoughtId) ?? 0) + 1);
81
+ }
82
+ _remove(session, thoughtId) {
83
+ const count = session.counts.get(thoughtId);
84
+ if (void 0 === count) return;
85
+ if (count > 1) session.counts.set(thoughtId, count - 1);
86
+ else session.counts.delete(thoughtId);
87
+ }
88
+ _deleteEmptySession(sessionId, session) {
89
+ if (0 === session.history.length && 0 === session.branches.size) this._sessions.delete(sessionId);
90
+ }
91
+ }
92
+ export { DurableThoughtIdentityIndex, normalizeDurableHistoryRetention };
93
+
94
+ //# sourceMappingURL=DurableThoughtIdentityIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core/DurableThoughtIdentityIndex.js","sources":["../../src/core/DurableThoughtIdentityIndex.ts"],"sourcesContent":["import type { BranchId, SessionId, ThoughtId } from '../contracts/ids.js';\nimport { assertNever } from '../utils.js';\nimport type { ThoughtData } from './thought.js';\n\nexport type DurableHistoryRetention =\n\t{ readonly kind: 'bounded'; readonly maxHistorySize: number } | { readonly kind: 'unlimited' };\n\nexport function normalizeDurableHistoryRetention(maxHistorySize: number): DurableHistoryRetention {\n\treturn maxHistorySize > 0 ? { kind: 'bounded', maxHistorySize } : { kind: 'unlimited' };\n}\n\nexport type DurableIdentityBranch = {\n\treadonly branchId: BranchId;\n\treadonly thoughts: readonly ThoughtData[];\n};\n\nexport type DurableIdentitySession = {\n\treadonly sessionId: SessionId;\n\treadonly history: readonly ThoughtData[];\n\treadonly branches: readonly DurableIdentityBranch[];\n};\n\ntype SessionIdentities = {\n\treadonly history: ThoughtId[];\n\treadonly branches: Map<BranchId, readonly ThoughtId[]>;\n\treadonly counts: Map<ThoughtId, number>;\n};\n\nexport class DurableThoughtIdentityIndex {\n\tprivate readonly _sessions = new Map<SessionId, SessionIdentities>();\n\n\tpublic constructor(private readonly _historyRetention: DurableHistoryRetention) {}\n\n\tpublic has(sessionId: SessionId, thoughtId: ThoughtId): boolean {\n\t\treturn this._sessions.get(sessionId)?.counts.has(thoughtId) === true;\n\t}\n\n\tpublic appendThought(sessionId: SessionId, thought: ThoughtData): void {\n\t\tif (thought.id === undefined) return;\n\t\tconst session = this._session(sessionId);\n\t\tsession.history.push(thought.id);\n\t\tthis._add(session, thought.id);\n\t\tswitch (this._historyRetention.kind) {\n\t\t\tcase 'unlimited':\n\t\t\t\treturn;\n\t\t\tcase 'bounded':\n\t\t\t\twhile (session.history.length > this._historyRetention.maxHistorySize) {\n\t\t\t\t\tconst removed = session.history.shift();\n\t\t\t\t\tif (removed !== undefined) this._remove(session, removed);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tassertNever(this._historyRetention);\n\t\t}\n\t}\n\n\tpublic replaceBranch(\n\t\tsessionId: SessionId,\n\t\tbranchId: BranchId,\n\t\tthoughts: readonly ThoughtData[]\n\t): void {\n\t\tconst session = this._session(sessionId);\n\t\tfor (const thoughtId of session.branches.get(branchId) ?? []) this._remove(session, thoughtId);\n\t\tconst replacement = thoughts.flatMap((thought) =>\n\t\t\tthought.id === undefined ? [] : [thought.id]\n\t\t);\n\t\tif (replacement.length === 0) session.branches.delete(branchId);\n\t\telse session.branches.set(branchId, replacement);\n\t\tfor (const thoughtId of replacement) this._add(session, thoughtId);\n\t\tthis._deleteEmptySession(sessionId, session);\n\t}\n\n\tpublic deleteBranch(sessionId: SessionId, branchId: BranchId): void {\n\t\tconst session = this._sessions.get(sessionId);\n\t\tif (session === undefined) return;\n\t\tfor (const thoughtId of session.branches.get(branchId) ?? []) this._remove(session, thoughtId);\n\t\tsession.branches.delete(branchId);\n\t\tthis._deleteEmptySession(sessionId, session);\n\t}\n\n\tpublic replaceAll(sessions: readonly DurableIdentitySession[]): void {\n\t\tthis._sessions.clear();\n\t\tfor (const session of sessions) {\n\t\t\tfor (const thought of session.history) this.appendThought(session.sessionId, thought);\n\t\t\tfor (const branch of session.branches) {\n\t\t\t\tthis.replaceBranch(session.sessionId, branch.branchId, branch.thoughts);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic clearSession(sessionId: SessionId): void {\n\t\tthis._sessions.delete(sessionId);\n\t}\n\n\tpublic clearAll(): void {\n\t\tthis._sessions.clear();\n\t}\n\n\tprivate _session(sessionId: SessionId): SessionIdentities {\n\t\tconst existing = this._sessions.get(sessionId);\n\t\tif (existing !== undefined) return existing;\n\t\tconst created: SessionIdentities = {\n\t\t\thistory: [],\n\t\t\tbranches: new Map(),\n\t\t\tcounts: new Map(),\n\t\t};\n\t\tthis._sessions.set(sessionId, created);\n\t\treturn created;\n\t}\n\n\tprivate _add(session: SessionIdentities, thoughtId: ThoughtId): void {\n\t\tsession.counts.set(thoughtId, (session.counts.get(thoughtId) ?? 0) + 1);\n\t}\n\n\tprivate _remove(session: SessionIdentities, thoughtId: ThoughtId): void {\n\t\tconst count = session.counts.get(thoughtId);\n\t\tif (count === undefined) return;\n\t\tif (count > 1) session.counts.set(thoughtId, count - 1);\n\t\telse session.counts.delete(thoughtId);\n\t}\n\n\tprivate _deleteEmptySession(sessionId: SessionId, session: SessionIdentities): void {\n\t\tif (session.history.length === 0 && session.branches.size === 0) {\n\t\t\tthis._sessions.delete(sessionId);\n\t\t}\n\t}\n}\n"],"names":["normalizeDurableHistoryRetention","maxHistorySize","DurableThoughtIdentityIndex","Map","_historyRetention","sessionId","thoughtId","thought","undefined","session","removed","assertNever","branchId","thoughts","replacement","sessions","branch","existing","created","count"],"mappings":"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"}
@@ -41,6 +41,8 @@ export interface HistoryManagerConfig {
41
41
  persistenceFlushInterval?: number;
42
42
  /** Max retries for failed persistence flushes. @default 3 */
43
43
  persistenceMaxRetries?: number;
44
+ persistenceHistorySize?: number;
45
+ persistBranches?: boolean;
44
46
  eventEmitter?: PersistenceEventEmitter;
45
47
  edgeStore?: IEdgeStore;
46
48
  summaryStore?: ISummaryStore;
@@ -142,9 +144,12 @@ export declare class HistoryManager implements IHistoryManager {
142
144
  * caches tools/skills, trims, branches, emits DAG edges, and buffers for persistence.
143
145
  */
144
146
  addThought(thought: ThoughtData, context?: ThoughtAdmissionContext): void;
147
+ assertThoughtIdentityAvailable(thought: ThoughtData): void;
145
148
  private _addThoughtWithinOperation;
146
149
  private _resolveAdmissionReferences;
147
150
  private _enforceRetention;
151
+ private _recordVerificationTarget;
152
+ private _pruneVerificationTargets;
148
153
  private _pruneUnretainedEdges;
149
154
  private _bufferRetainedState;
150
155
  private _stageAllRestoreBranchReconciliation;
@@ -1 +1 @@
1
- {"version":3,"file":"HistoryManager.d.ts","sourceRoot":"","sources":["../../src/core/HistoryManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HistoryManager.d.ts","sourceRoot":"","sources":["../../src/core/HistoryManager.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,8 @@ import { getOwner } from "../context/RequestContext.js";
12
12
  import { ThoughtReferenceIndex } from "./ThoughtReferenceIndex.js";
13
13
  import { resolveThoughtReferencesForAdmission } from "./CrossReferenceValidator.js";
14
14
  import { SessionLifecycleCoordinator } from "./SessionLifecycleCoordinator.js";
15
+ import { resolvedVerificationTarget } from "./evaluator/VerificationLinks.js";
16
+ import { reconstructVerificationTargets } from "./VerificationTargetRestore.js";
15
17
  const ABSOLUTE_MAX_HISTORY_SIZE = 10000;
16
18
  class HistoryManager {
17
19
  static SESSION_TTL_MS = 1800000;
@@ -78,6 +80,8 @@ class HistoryManager {
78
80
  bufferSize: config.persistenceBufferSize ?? 100,
79
81
  flushInterval: config.persistenceFlushInterval ?? 1000,
80
82
  maxRetries: config.persistenceMaxRetries ?? 3,
83
+ durableHistorySize: config.persistenceHistorySize ?? ABSOLUTE_MAX_HISTORY_SIZE,
84
+ persistBranches: config.persistBranches ?? true,
81
85
  eventEmitter: this._eventEmitter,
82
86
  logger: this._logger
83
87
  });
@@ -211,6 +215,7 @@ class HistoryManager {
211
215
  return {
212
216
  thought_history: [],
213
217
  branches: {},
218
+ verificationTargets: new Map(),
214
219
  availableMcpTools: void 0,
215
220
  availableSkills: void 0,
216
221
  lastAccessedAt: Date.now(),
@@ -237,14 +242,22 @@ class HistoryManager {
237
242
  const sessionId = asSessionId(thought.session_id);
238
243
  this._lifecycle.runMutation(sessionId, ()=>this._addThoughtWithinOperation(sessionId, thought, context));
239
244
  }
245
+ assertThoughtIdentityAvailable(thought) {
246
+ if (void 0 === thought.id) return;
247
+ const sessionId = asSessionId(thought.session_id);
248
+ this._authorizeExistingSession(sessionId, this._getCurrentOwner());
249
+ if (this._referenceIndex.has(sessionId, thought.id) || this._persistenceBuffer?.hasThoughtIdentity(sessionId, thought.id) === true) throw new ValidationError('id', `Thought id already exists in session: ${thought.id}`);
250
+ }
240
251
  _addThoughtWithinOperation(sessionId, thought, context) {
241
252
  this._persistenceBuffer?.assertSessionAdmissionOpen(sessionId);
242
253
  const owner = this._getCurrentOwner();
243
254
  this._authorizeExistingSession(sessionId, owner);
255
+ this.assertThoughtIdentityAvailable(thought);
244
256
  const resolvedReferences = this._resolveAdmissionReferences(sessionId, thought, context);
245
257
  const session = this._getSessionWithinOperation(sessionId, owner);
246
258
  this._metrics?.counter('thought_requests_total', 1, {}, 'Total thought requests added to history');
247
259
  session.thought_history.push(thought);
260
+ this._recordVerificationTarget(session, thought, resolvedReferences);
248
261
  if (void 0 !== resolvedReferences.backtrackTargetThoughtId) this._applyRetraction(session, resolvedReferences.backtrackTargetThoughtId);
249
262
  if (thought.available_mcp_tools) session.availableMcpTools = thought.available_mcp_tools;
250
263
  if (thought.available_skills) session.availableSkills = thought.available_skills;
@@ -255,9 +268,10 @@ class HistoryManager {
255
268
  resolvedReferences
256
269
  });
257
270
  const evictedBranchIds = this._enforceRetention(session, thought.branch_id);
271
+ this._pruneVerificationTargets(session);
258
272
  this._rebuildReferenceIndex(sessionId, session);
259
273
  const prunedEdges = this._pruneUnretainedEdges(sessionId, session);
260
- this._bufferRetainedState(sessionId, session, thought, evictedBranchIds, edgeAdded, prunedEdges);
274
+ this._bufferRetainedState(sessionId, session, thought, evictedBranchIds, edgeAdded, prunedEdges, resolvedReferences.backtrackTargetThoughtId);
261
275
  }
262
276
  _resolveAdmissionReferences(sessionId, thought, context) {
263
277
  const resolved = context?.resolvedReferences ?? resolveThoughtReferencesForAdmission(thought, (thoughtNumber)=>this._referenceIndex.resolve(sessionId, thoughtNumber));
@@ -274,6 +288,19 @@ class HistoryManager {
274
288
  if (void 0 !== branchId) this._trimSessionBranchSize(session, branchId);
275
289
  return this._cleanupSessionBranches(session);
276
290
  }
291
+ _recordVerificationTarget(session, thought, references) {
292
+ const targetId = resolvedVerificationTarget(thought, references);
293
+ if (void 0 !== thought.id && void 0 !== targetId) session.verificationTargets.set(thought.id, targetId);
294
+ }
295
+ _pruneVerificationTargets(session) {
296
+ const retainedIds = new Set([
297
+ session.thought_history,
298
+ ...Object.values(session.branches)
299
+ ].flat().flatMap((thought)=>void 0 === thought.id ? [] : [
300
+ thought.id
301
+ ]));
302
+ for (const [verifierId, targetId] of session.verificationTargets)if (!retainedIds.has(verifierId) || !retainedIds.has(targetId)) session.verificationTargets.delete(verifierId);
303
+ }
277
304
  _pruneUnretainedEdges(sessionId, session) {
278
305
  if (void 0 === this._edgeStore) return 0;
279
306
  const retainedIds = new Set();
@@ -285,11 +312,12 @@ class HistoryManager {
285
312
  for (const thought of Object.values(session.branches).flat())if (void 0 !== thought.id) retainedBranchThoughtIds.add(thought.id);
286
313
  return this._edgeStore.pruneSession(sessionId, retainedIds, retainedBranchThoughtIds);
287
314
  }
288
- _bufferRetainedState(sessionId, session, thought, evictedBranchIds, edgeAdded, prunedEdges) {
315
+ _bufferRetainedState(sessionId, session, thought, evictedBranchIds, edgeAdded, prunedEdges, backtrackTargetThoughtId) {
289
316
  const buffer = this._persistenceBuffer;
290
317
  if (null === buffer) return;
291
- buffer.bufferThought(sessionId, thought);
292
- if (void 0 !== thought.branch_id || evictedBranchIds.length > 0 || session.pendingRestoreBranchDeletes.size > 0) this._stageBranchPersistence(sessionId, session, evictedBranchIds);
318
+ if (void 0 === backtrackTargetThoughtId) buffer.bufferThought(sessionId, thought);
319
+ else buffer.bufferBacktrack(sessionId, thought, backtrackTargetThoughtId);
320
+ if (void 0 !== thought.branch_id || void 0 !== backtrackTargetThoughtId || evictedBranchIds.length > 0 || session.pendingRestoreBranchDeletes.size > 0) this._stageBranchPersistence(sessionId, session, evictedBranchIds);
293
321
  if (void 0 !== this._edgeStore && (edgeAdded || prunedEdges > 0)) buffer.bufferEdges(sessionId, this._edgeStore.edgesForSession(sessionId));
294
322
  }
295
323
  _stageAllRestoreBranchReconciliation() {
@@ -384,6 +412,7 @@ class HistoryManager {
384
412
  if (void 0 === session) return {
385
413
  history: [],
386
414
  branches: {},
415
+ verificationTargets: new Map(),
387
416
  branchIds: [],
388
417
  availableMcpTools: void 0,
389
418
  availableSkills: void 0
@@ -398,6 +427,7 @@ class HistoryManager {
398
427
  ...thoughts
399
428
  ]
400
429
  ])),
430
+ verificationTargets: new Map(session.verificationTargets),
401
431
  branchIds: Array.from(session.branchIdentities),
402
432
  availableMcpTools: void 0 === session.availableMcpTools ? void 0 : [
403
433
  ...session.availableMcpTools
@@ -470,6 +500,7 @@ class HistoryManager {
470
500
  }
471
501
  _restoredState(restored) {
472
502
  const session = this._createSessionState(void 0, 'restored');
503
+ session.verificationTargets = reconstructVerificationTargets(restored.sessionId, restored.history, restored.branches);
473
504
  for(let index = restored.history.length - 1; index >= 0; index--){
474
505
  const thought = restored.history[index];
475
506
  if (void 0 !== thought) {
@@ -490,6 +521,7 @@ class HistoryManager {
490
521
  session.branchIdentities.add(branch.branchId);
491
522
  session.branches[branch.branchId] = branch.thoughts.slice(-this._maxBranchSize);
492
523
  }
524
+ this._pruneVerificationTargets(session);
493
525
  return session;
494
526
  }
495
527
  async loadFromPersistence() {
@@ -515,6 +547,7 @@ class HistoryManager {
515
547
  thought.id
516
548
  ]))));
517
549
  }
550
+ this._persistenceBuffer?.replaceDurableThoughtIdentities(restored.sessions);
518
551
  this._edgeStore?.clearAll();
519
552
  this._summaryStore?.clearAll();
520
553
  this._sessions.clear();