@namzu/sdk 62.8.0 → 62.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/compaction/plan.d.ts +12 -0
  3. package/dist/compaction/plan.d.ts.map +1 -1
  4. package/dist/compaction/plan.js +39 -11
  5. package/dist/compaction/plan.js.map +1 -1
  6. package/dist/compaction/salience/minhash.d.ts +9 -0
  7. package/dist/compaction/salience/minhash.d.ts.map +1 -1
  8. package/dist/compaction/salience/minhash.js +20 -0
  9. package/dist/compaction/salience/minhash.js.map +1 -1
  10. package/dist/compaction/salience/score.d.ts.map +1 -1
  11. package/dist/compaction/salience/score.js +87 -45
  12. package/dist/compaction/salience/score.js.map +1 -1
  13. package/dist/compaction/salience/working-set.d.ts +14 -0
  14. package/dist/compaction/salience/working-set.d.ts.map +1 -1
  15. package/dist/compaction/salience/working-set.js +84 -33
  16. package/dist/compaction/salience/working-set.js.map +1 -1
  17. package/dist/config/runtime.d.ts +2 -0
  18. package/dist/config/runtime.d.ts.map +1 -1
  19. package/dist/config/runtime.js +14 -0
  20. package/dist/config/runtime.js.map +1 -1
  21. package/dist/manager/session/turn-recorder.d.ts +25 -0
  22. package/dist/manager/session/turn-recorder.d.ts.map +1 -1
  23. package/dist/manager/session/turn-recorder.js +193 -17
  24. package/dist/manager/session/turn-recorder.js.map +1 -1
  25. package/dist/public-runtime.d.ts +1 -1
  26. package/dist/public-runtime.d.ts.map +1 -1
  27. package/dist/public-runtime.js +1 -1
  28. package/dist/public-runtime.js.map +1 -1
  29. package/dist/runtime/query/cancelled-before-start.js +1 -1
  30. package/dist/runtime/query/cancelled-before-start.js.map +1 -1
  31. package/dist/runtime/query/checkpoint.js +2 -1
  32. package/dist/runtime/query/checkpoint.js.map +1 -1
  33. package/dist/runtime/query/index.d.ts.map +1 -1
  34. package/dist/runtime/query/index.js +4 -1
  35. package/dist/runtime/query/index.js.map +1 -1
  36. package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
  37. package/dist/runtime/query/iteration/phases/compaction.js +15 -1
  38. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  39. package/dist/runtime/query/prepare-turn.js +10 -4
  40. package/dist/runtime/query/prepare-turn.js.map +1 -1
  41. package/dist/store/session-log/core.d.ts +31 -1
  42. package/dist/store/session-log/core.d.ts.map +1 -1
  43. package/dist/store/session-log/core.js +95 -9
  44. package/dist/store/session-log/core.js.map +1 -1
  45. package/dist/store/session-log/disk.d.ts +2 -0
  46. package/dist/store/session-log/disk.d.ts.map +1 -1
  47. package/dist/store/session-log/disk.js +37 -0
  48. package/dist/store/session-log/disk.js.map +1 -1
  49. package/dist/store/session-log/fold.d.ts +9 -1
  50. package/dist/store/session-log/fold.d.ts.map +1 -1
  51. package/dist/store/session-log/fold.js +18 -2
  52. package/dist/store/session-log/fold.js.map +1 -1
  53. package/dist/store/session-log/incremental.d.ts +8 -0
  54. package/dist/store/session-log/incremental.d.ts.map +1 -1
  55. package/dist/store/session-log/incremental.js +7 -2
  56. package/dist/store/session-log/incremental.js.map +1 -1
  57. package/dist/store/session-log/index.d.ts +1 -0
  58. package/dist/store/session-log/index.d.ts.map +1 -1
  59. package/dist/store/session-log/index.js +1 -0
  60. package/dist/store/session-log/index.js.map +1 -1
  61. package/dist/store/session-log/verified-prefix.d.ts +46 -0
  62. package/dist/store/session-log/verified-prefix.d.ts.map +1 -0
  63. package/dist/store/session-log/verified-prefix.js +233 -0
  64. package/dist/store/session-log/verified-prefix.js.map +1 -0
  65. package/dist/types/session/records.d.ts +80 -1
  66. package/dist/types/session/records.d.ts.map +1 -1
  67. package/dist/types/session/records.js +22 -0
  68. package/dist/types/session/records.js.map +1 -1
  69. package/package.json +1 -1
  70. package/src/compaction/plan.ts +53 -11
  71. package/src/compaction/salience/minhash.ts +20 -0
  72. package/src/compaction/salience/score.ts +112 -43
  73. package/src/compaction/salience/working-set.ts +102 -31
  74. package/src/config/runtime.ts +14 -0
  75. package/src/manager/session/turn-recorder.ts +218 -15
  76. package/src/public-runtime.ts +1 -0
  77. package/src/runtime/query/cancelled-before-start.ts +1 -1
  78. package/src/runtime/query/checkpoint.ts +2 -1
  79. package/src/runtime/query/index.ts +4 -1
  80. package/src/runtime/query/iteration/phases/compaction.ts +18 -0
  81. package/src/runtime/query/prepare-turn.ts +10 -3
  82. package/src/store/session-log/core.ts +129 -10
  83. package/src/store/session-log/disk.ts +32 -0
  84. package/src/store/session-log/fold.ts +19 -2
  85. package/src/store/session-log/incremental.ts +15 -2
  86. package/src/store/session-log/index.ts +1 -0
  87. package/src/store/session-log/verified-prefix.ts +243 -0
  88. package/src/types/session/records.ts +25 -0
@@ -29,10 +29,7 @@ function firstSentence(text) {
29
29
  export function isStubbedNarration(content) {
30
30
  return typeof content === 'string' && content.includes(STUB_MARK);
31
31
  }
32
- export function planWorkingSet(messages, scored, options) {
33
- const minTool = options.minToolResultChars ?? 1_000;
34
- const minNarration = options.minNarrationChars ?? 240;
35
- const preserve = new Set(options.preserveTools ?? []);
32
+ function evictionRules(messages, options) {
36
33
  const toolNameByCallId = new Map();
37
34
  for (const m of messages) {
38
35
  if (m.role !== 'assistant')
@@ -41,39 +38,93 @@ export function planWorkingSet(messages, scored, options) {
41
38
  toolNameByCallId.set(call.id, call.function.name);
42
39
  }
43
40
  }
41
+ return {
42
+ minTool: options.minToolResultChars ?? 1_000,
43
+ minNarration: options.minNarrationChars ?? 240,
44
+ preserve: new Set(options.preserveTools ?? []),
45
+ toolNameByCallId,
46
+ };
47
+ }
48
+ /**
49
+ * Whether the pass could clear or stub this message, ignoring only what
50
+ * protection decides (the floor, the recent turns, retained turns, a pair
51
+ * with a protected half) and what the score decides. The one place the
52
+ * eligibility rules live: {@link planWorkingSet} asks it of each unprotected
53
+ * message, and {@link hasEvictableMessage} asks it of every message.
54
+ */
55
+ function evictionKind(m, tokens, rules) {
56
+ if (tokens === 0)
57
+ return null;
58
+ if (m.role === 'tool') {
59
+ const tool = m;
60
+ if (tool.isError || isClearedToolResult(tool.content))
61
+ return null;
62
+ if (rules.preserve.has(rules.toolNameByCallId.get(tool.toolCallId) ?? ''))
63
+ return null;
64
+ if (tokens * CHARS_PER_TOKEN < rules.minTool)
65
+ return null;
66
+ return 'clear';
67
+ }
68
+ if (m.role === 'assistant' && !Array.isArray(m.toolCalls)) {
69
+ const text = typeof m.content === 'string' ? m.content : '';
70
+ if (text.length < rules.minNarration || isStubbedNarration(text))
71
+ return null;
72
+ return 'stub';
73
+ }
74
+ return null;
75
+ }
76
+ /**
77
+ * A cheap count of whether anything at all is left for the pass to shed:
78
+ * false means {@link planWorkingSet} would return no action whatever the
79
+ * scores are, so scoring can be skipped. It leaves out the two protections
80
+ * that are only a position (the leading system run and the last
81
+ * `keepRecentMessages`); retained turns, tool-call pairs and the goal floor
82
+ * are not looked at. True is therefore only "go and look", and a false is
83
+ * exact.
84
+ */
85
+ export function hasEvictableMessage(messages, options) {
86
+ const rules = evictionRules(messages, options);
87
+ let floorEnd = 0;
88
+ while (floorEnd < messages.length && messages[floorEnd]?.role === 'system')
89
+ floorEnd += 1;
90
+ const end = Math.max(floorEnd, messages.length - options.keepRecentMessages);
91
+ for (let i = floorEnd; i < end; i += 1) {
92
+ const m = messages[i];
93
+ if (evictionKind(m, estimateMessageTokens(m), rules) !== null)
94
+ return true;
95
+ }
96
+ return false;
97
+ }
98
+ /** The plan of a pass that sheds nothing: every message as it was. */
99
+ export function planNothingToShed(messages, options) {
100
+ return {
101
+ messages: [...messages],
102
+ actions: [],
103
+ clearedCount: 0,
104
+ stubbedCount: 0,
105
+ charsReclaimed: 0,
106
+ reclaimedTokens: 0,
107
+ reachedTarget: options.estimatedTokens - options.targetTokens <= 0,
108
+ };
109
+ }
110
+ export function planWorkingSet(messages, scored, options) {
111
+ const rules = evictionRules(messages, options);
112
+ const { toolNameByCallId } = rules;
44
113
  const candidates = [];
45
114
  for (const s of scored) {
46
- if (s.protected !== null || s.tokens === 0)
115
+ if (s.protected !== null)
47
116
  continue;
48
117
  const m = messages[s.index];
49
- if (m.role === 'tool') {
50
- const tool = m;
51
- if (tool.isError || isClearedToolResult(tool.content))
52
- continue;
53
- if (preserve.has(toolNameByCallId.get(tool.toolCallId) ?? ''))
54
- continue;
55
- if (s.tokens * CHARS_PER_TOKEN < minTool)
56
- continue;
57
- candidates.push({
58
- index: s.index,
59
- kind: 'clear',
60
- salience: s.salience,
61
- tokens: s.tokens,
62
- goalBound: s.relevance >= 0.5 || s.utility >= 1,
63
- });
64
- }
65
- else if (m.role === 'assistant' && !Array.isArray(m.toolCalls)) {
66
- const text = typeof m.content === 'string' ? m.content : '';
67
- if (text.length < minNarration || isStubbedNarration(text))
68
- continue;
69
- candidates.push({
70
- index: s.index,
71
- kind: 'stub',
72
- salience: s.salience,
73
- tokens: s.tokens,
74
- goalBound: s.relevance >= 0.5 || s.utility >= 1,
75
- });
76
- }
118
+ const kind = evictionKind(m, s.tokens, rules);
119
+ if (kind === null)
120
+ continue;
121
+ candidates.push({
122
+ index: s.index,
123
+ kind,
124
+ salience: s.salience,
125
+ tokens: s.tokens,
126
+ goalBound: s.relevance >= 0.5 || s.utility >= 1,
127
+ });
77
128
  }
78
129
  candidates.sort((a, b) => a.salience - b.salience || b.tokens - a.tokens || a.index - b.index);
79
130
  const maxSalience = candidates.reduce((m, c) => Math.max(m, c.salience), Number.NEGATIVE_INFINITY);
@@ -1 +1 @@
1
- {"version":3,"file":"working-set.js","sourceRoot":"","sources":["../../../src/compaction/salience/working-set.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"working-set.js","sourceRoot":"","sources":["../../../src/compaction/salience/working-set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAwChF,MAAM,SAAS,GAAG,WAAW,CAAA;AAE7B,SAAS,aAAa,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IACzD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAC7E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IAClD,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AAClE,CAAC;AAUD,SAAS,aAAa,CACrB,QAA4B,EAC5B,OAA8F;IAE9F,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAA;IAClD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;YAAE,SAAQ;QACpC,KAAK,MAAM,IAAI,IAAK,CAAsB,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YAC5D,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAClD,CAAC;IACF,CAAC;IACD,OAAO;QACN,OAAO,EAAE,OAAO,CAAC,kBAAkB,IAAI,KAAK;QAC5C,YAAY,EAAE,OAAO,CAAC,iBAAiB,IAAI,GAAG;QAC9C,QAAQ,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;QAC9C,gBAAgB;KAChB,CAAA;AACF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,CAAU,EAAE,MAAc,EAAE,KAAoB;IACrE,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC7B,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,CAAgB,CAAA;QAC7B,IAAI,IAAI,CAAC,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAA;QAClE,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAAE,OAAO,IAAI,CAAA;QACtF,IAAI,MAAM,GAAG,eAAe,GAAG,KAAK,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QACzD,OAAO,OAAO,CAAA;IACf,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAsB,CAAC,SAAS,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QAC3D,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;QAC7E,OAAO,MAAM,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAClC,QAA4B,EAC5B,OAEC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC9C,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,OAAO,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,KAAK,QAAQ;QAAE,QAAQ,IAAI,CAAC,CAAA;IACzF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC5E,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAY,CAAA;QAChC,IAAI,YAAY,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;IAC3E,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,iBAAiB,CAChC,QAA4B,EAC5B,OAAoE;IAEpE,OAAO;QACN,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC;QACvB,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,CAAC;QAClB,aAAa,EAAE,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC;KAClE,CAAA;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,QAA4B,EAC5B,MAAgC,EAChC,OAA0B;IAE1B,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC9C,MAAM,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAA;IAelC,MAAM,UAAU,GAAgB,EAAE,CAAA;IAClC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI;YAAE,SAAQ;QAClC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAY,CAAA;QACtC,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC7C,IAAI,IAAI,KAAK,IAAI;YAAE,SAAQ;QAC3B,UAAU,CAAC,IAAI,CAAC;YACf,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI;YACJ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC;SAC/C,CAAC,CAAA;IACH,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IAC9F,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;IAClG,MAAM,KAAK,GAAG,WAAW,GAAG,CAAC,OAAO,CAAC,iBAAiB,IAAI,GAAG,CAAC,CAAA;IAE9D,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA;IAC1B,MAAM,OAAO,GAAuB,EAAE,CAAA;IACtC,IAAI,cAAc,GAAG,CAAC,CAAA;IACtB,IAAI,eAAe,GAAG,CAAC,CAAA;IACvB,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,GAAG,eAAe,GAAG,OAAO,CAAC,YAAY,CAAA;IACrF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,IAAI,MAAM,EAAE,IAAI,CAAC;YAAE,MAAK;QACxB,iEAAiE;QACjE,oEAAoE;QACpE,0DAA0D;QAC1D,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,GAAG,KAAK,IAAI,SAAS,CAAC,QAAQ,GAAG,CAAC;YAAE,SAAQ;QACzF,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAY,CAAA;QAC1C,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,CAAgB,CAAA;YAC7B,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,CAAA;YACzF,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YACxF,IAAI,WAAW,IAAI,CAAC;gBAAE,SAAQ;YAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAA;YACvC,cAAc,IAAI,OAAO,CAAC,cAAc,CAAA;YACxC,eAAe,IAAI,WAAW,CAAA;YAC9B,YAAY,IAAI,CAAC,CAAA;YACjB,OAAO,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,cAAc,EAAE,OAAO,CAAC,cAAc;aACtC,CAAC,CAAA;QACH,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,GAAG,CAAC,CAAC,OAAiB,CAAA;YAChC,MAAM,IAAI,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,2BAA2B,CAAA;YAClJ,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;YAC3C,IAAI,SAAS,IAAI,CAAC;gBAAE,SAAQ;YAC5B,MAAM,OAAO,GAAG,EAAE,GAAI,CAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YAC7D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;YAC/B,cAAc,IAAI,SAAS,CAAA;YAC3B,eAAe,IAAI,qBAAqB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;YAC5E,YAAY,IAAI,CAAC,CAAA;YACjB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAA;QAClF,CAAC;IACF,CAAC;IACD,OAAO;QACN,QAAQ,EAAE,IAAI;QACd,OAAO;QACP,YAAY;QACZ,YAAY;QACZ,cAAc;QACd,eAAe;QACf,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC;KAC5B,CAAA;AACF,CAAC"}
@@ -19,6 +19,7 @@ export declare const CompactionConfigSchema: z.ZodObject<{
19
19
  "sliding-window": "sliding-window";
20
20
  }>>;
21
21
  softTarget: z.ZodOptional<z.ZodNumber>;
22
+ softTargetHeadroom: z.ZodOptional<z.ZodNumber>;
22
23
  contextWindowTokens: z.ZodOptional<z.ZodNumber>;
23
24
  triggerThreshold: z.ZodOptional<z.ZodNumber>;
24
25
  autoCompactWindowTokens: z.ZodOptional<z.ZodNumber>;
@@ -104,6 +105,7 @@ export declare const RuntimeConfigSchema: z.ZodObject<{
104
105
  "sliding-window": "sliding-window";
105
106
  }>>;
106
107
  softTarget: z.ZodOptional<z.ZodNumber>;
108
+ softTargetHeadroom: z.ZodOptional<z.ZodNumber>;
107
109
  contextWindowTokens: z.ZodOptional<z.ZodNumber>;
108
110
  triggerThreshold: z.ZodOptional<z.ZodNumber>;
109
111
  autoCompactWindowTokens: z.ZodOptional<z.ZodNumber>;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAE/D,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B,eAAO,MAAM,sBAAsB;;;;;;;;kBAUvB,CAAA;AAEZ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6KjC,CAAA;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE,eAAO,MAAM,oBAAoB;;;;;;;iBAO/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,eAAO,MAAM,uBAAuB;;;;;;iBAGlC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;iBAKpC,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAY9B,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,aAAa,CAAiC,CAAA"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAE/D,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B,eAAO,MAAM,sBAAsB;;;;;;;;kBAUvB,CAAA;AAEZ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2LjC,CAAA;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE,eAAO,MAAM,oBAAoB;;;;;;;iBAO/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,eAAO,MAAM,uBAAuB;;;;;;iBAGlC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;iBAKpC,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAY9B,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,aAAa,CAAiC,CAAA"}
@@ -29,6 +29,20 @@ export const CompactionConfigSchema = z.object({
29
29
  * `triggerThreshold` summarises. The context is held around here.
30
30
  */
31
31
  softTarget: z.number().min(0).max(1).optional(),
32
+ /**
33
+ * `salience` only: how far below `softTarget`, as a fraction of the
34
+ * window, a pass sheds. A pass still starts when the context reaches the
35
+ * soft target, but it then keeps shedding until the context is
36
+ * `softTargetHeadroom` of the window under it, so the next pass is needed
37
+ * only after that headroom has been used instead of on the next turn.
38
+ * Fewer passes, and the request is rewritten (a prompt cache's prefix
39
+ * broken) once per headroom instead of once per turn; the cost is that
40
+ * the context is held that much lower, so that much less history stays
41
+ * whole. The messages shed are the same ones in the same order, only
42
+ * earlier. Absent or `0`, the default, a pass sheds to the soft target
43
+ * and no further, exactly as before.
44
+ */
45
+ softTargetHeadroom: z.number().min(0).max(1).optional(),
32
46
  /**
33
47
  * Optional model context-window size (tokens) the compaction trigger
34
48
  * measures the CURRENT window against. NO default: when omitted the
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"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"}
@@ -231,6 +231,13 @@ export declare class TurnRecorder {
231
231
  pushMessage(message: Message, options?: {
232
232
  readonly messageId?: MessageId;
233
233
  readonly transient?: boolean;
234
+ /**
235
+ * The message is part of the history a resume restores, not a new
236
+ * one. While the resume's re-base is pending, a restored message with no
237
+ * id is held and nothing is reconciled; the first message that is not
238
+ * restored (or any other reconcile) re-bases once on the whole context.
239
+ */
240
+ readonly restored?: boolean;
234
241
  }): void;
235
242
  /** Replace the context without replacing the turn; recorded as one `compaction`. */
236
243
  replaceMessages(messages: readonly Message[]): void;
@@ -271,6 +278,18 @@ export declare function recordedTurnStart(log: SessionLog, turnId: TurnId): Prom
271
278
  export declare function readFoldedHistory(log: SessionLog, options?: {
272
279
  readonly throughSeq?: number;
273
280
  }): Promise<RecordedMessage[]>;
281
+ /** Every message ever recorded, and the texts an edited one held before each edit. */
282
+ export interface EverRecordedMessages {
283
+ /** The latest text of each message, by its durable id. */
284
+ readonly latest: ReadonlyMap<MessageId, Message>;
285
+ /**
286
+ * Whether `id` held `message`'s text before a compaction edit. A
287
+ * `message_replaced` for the id forgets the texts before it: a guardrail's
288
+ * replacement is the settled answer. A spilled earlier text is read only
289
+ * when a comparison needs it.
290
+ */
291
+ heldBeforeAnEdit(id: MessageId, message: Message): Promise<boolean>;
292
+ }
274
293
  /**
275
294
  * Every message this session's log has ever recorded, keyed by the durable
276
295
  * id its `message` record gave it — including one a compaction has since
@@ -283,6 +302,12 @@ export declare function readFoldedHistory(log: SessionLog, options?: {
283
302
  * recognise it by id — a caller's copy of it is reconciled by value instead.
284
303
  */
285
304
  export declare function readEverRecordedMessages(log: SessionLog): Promise<ReadonlyMap<MessageId, Message>>;
305
+ /**
306
+ * {@link readEverRecordedMessages} plus what a host that cached the history
307
+ * before a compaction edit still holds, answered from the same reduction with
308
+ * no read of the log of its own.
309
+ */
310
+ export declare function readEverRecordedMessageIndex(log: SessionLog): Promise<EverRecordedMessages>;
286
311
  /**
287
312
  * A session's audit trail: its `audit` records as {@link AuditEvent}s, in log
288
313
  * order, each numbered among the session's audit entries. What
@@ -1 +1 @@
1
- {"version":3,"file":"turn-recorder.d.ts","sourceRoot":"","sources":["../../../src/manager/session/turn-recorder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"turn-recorder.d.ts","sourceRoot":"","sources":["../../../src/manager/session/turn-recorder.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { isDeepStrictEqual } from 'node:util';
1
2
  import { AUTO_CONTINUATION_USER_MESSAGE, REASONING_CUT_USER_MESSAGE, } from '../../constants/continuation.js';
2
3
  import { EMPTY_TOKEN_USAGE } from '../../constants/limits.js';
3
4
  import { NAMZU } from '../../constants/telemetry/index.js';
@@ -32,6 +33,12 @@ function stampMessageId(message, id) {
32
33
  else
33
34
  message.id = id;
34
35
  }
36
+ /** Two messages that differ only in their id and time are the same text. */
37
+ function sameStoredContent(a, b) {
38
+ const { id: _a, timestamp: _ta, ...restA } = a;
39
+ const { id: _b, timestamp: _tb, ...restB } = b;
40
+ return isDeepStrictEqual(JSON.parse(JSON.stringify(restA)), JSON.parse(JSON.stringify(restB)));
41
+ }
35
42
  /** Default lease time-to-live: renewed at half-life while the turn runs. */
36
43
  export const DEFAULT_TURN_LEASE_TTL_MS = 5 * 60_000;
37
44
  /** Record types that may carry `turnId` only while the turn is active. */
@@ -152,6 +159,8 @@ export class TurnRecorder {
152
159
  * these needs no re-basing, so no `compaction` record is written for it.
153
160
  */
154
161
  #foldIdsAtResume;
162
+ /** What the log folds to for a message a replacement or an edit changed, as of the resume. */
163
+ #foldEditedAtResume = new Map();
155
164
  /** When a resumed turn began: its `turn_started` record, not this process's start. */
156
165
  #resumedTurnStartedAt;
157
166
  constructor(config) {
@@ -720,6 +729,10 @@ export class TurnRecorder {
720
729
  async #readResumedLog() {
721
730
  await this.flush();
722
731
  const fold = new SessionMessageFold();
732
+ // Whether the latest change to a message was a compaction edit: only
733
+ // that one is the recorder's to put back (a guardrail's replacement is
734
+ // the settled answer and the restored context is not allowed to undo it).
735
+ const latestChange = new Map();
723
736
  for await (const entry of this.log.read()) {
724
737
  const record = entry.record;
725
738
  if (record.type === 'turn_started' && record.turnId === this.turnId) {
@@ -727,17 +740,29 @@ export class TurnRecorder {
727
740
  if (Number.isFinite(at))
728
741
  this.#resumedTurnStartedAt = at;
729
742
  }
743
+ if (record.type === 'message_edited')
744
+ latestChange.set(record.targetMessageId, 'edited');
745
+ else if (record.type === 'message_replaced')
746
+ latestChange.set(record.targetMessageId, 'replaced');
730
747
  fold.apply(record);
731
748
  }
732
- if (fold.spilledSummary)
733
- return undefined;
734
749
  const ids = [];
750
+ let allRecorded = !fold.spilledSummary;
751
+ this.#foldEditedAtResume.clear();
752
+ // Filled for every fold entry with an id, whether or not the fold also
753
+ // holds id-less entries (a summary): a restored context older than an edit
754
+ // is put right either way. An entry whose text is spilled is not
755
+ // compared, so a message edited to a spilled text is not put back.
735
756
  for (const entry of fold.entries()) {
736
- if (!entry.messageId)
737
- return undefined;
757
+ if (!entry.messageId) {
758
+ allRecorded = false;
759
+ continue;
760
+ }
738
761
  ids.push(entry.messageId);
762
+ if (latestChange.get(entry.messageId) === 'edited' && entry.spill === undefined)
763
+ this.#foldEditedAtResume.set(entry.messageId, entry.message);
739
764
  }
740
- return ids;
765
+ return allRecorded ? ids : undefined;
741
766
  }
742
767
  /** The recorded context is exactly what the log folds to: a resume changed nothing. */
743
768
  #viewMatchesFold() {
@@ -956,6 +981,16 @@ export class TurnRecorder {
956
981
  });
957
982
  return;
958
983
  }
984
+ if (options.restored && this.#rebasePending && this.#phase === 'active') {
985
+ // A restored message with no id (a compaction summary, the working-memory
986
+ // slot, a message the host added) can arrive before the recorded ones.
987
+ // Reconciling now would re-base the fold on a context holding only it and
988
+ // drop the recorded messages that follow; hold it as an id-less view entry
989
+ // and let the first reconciliation after the whole context is in place
990
+ // write one `compaction` that keeps the recorded ids after it.
991
+ this.#view.push({ message });
992
+ return;
993
+ }
959
994
  this.#syncMessages();
960
995
  }
961
996
  /** Replace the context without replacing the turn; recorded as one `compaction`. */
@@ -990,6 +1025,106 @@ export class TurnRecorder {
990
1025
  stampMessageId(message, id);
991
1026
  return id;
992
1027
  }
1028
+ /**
1029
+ * A compaction pass edits one message by replacing its object with a copy
1030
+ * that has other content (`{ ...message, content }`). The copy still carries
1031
+ * the id the original was stamped with, but the recorder's own indexes are
1032
+ * keyed by object identity, so without this it would see an unknown message
1033
+ * and record every message after it again. A live object that is not in the
1034
+ * view, whose `id` is that of a recorded view entry whose own object has left
1035
+ * the context, is that same message edited: one `message_edited` record
1036
+ * carries its new content and the view entry follows the new object.
1037
+ *
1038
+ * Only an id claimed by exactly one live object is taken, so two copies of
1039
+ * one message are never both treated as its edit. Anything else is left to
1040
+ * the callers, which record it as a new message.
1041
+ */
1042
+ #absorbEdits() {
1043
+ if (this.#phase !== 'active')
1044
+ return;
1045
+ const live = this.#turn.messages;
1046
+ const inContext = new Set(live);
1047
+ let orphans;
1048
+ for (const entry of this.#view) {
1049
+ if (entry.id === undefined || entry.transient || inContext.has(entry.message))
1050
+ continue;
1051
+ orphans ??= new Map();
1052
+ orphans.set(entry.id, entry);
1053
+ }
1054
+ if (orphans === undefined)
1055
+ return;
1056
+ const known = new Set(this.#view.map((entry) => entry.message));
1057
+ const claimed = new Map();
1058
+ for (const message of live) {
1059
+ if (known.has(message) || this.#transient.has(message))
1060
+ continue;
1061
+ const id = message.id;
1062
+ if (id === undefined || !orphans.has(id))
1063
+ continue;
1064
+ const list = claimed.get(id);
1065
+ if (list)
1066
+ list.push(message);
1067
+ else
1068
+ claimed.set(id, [message]);
1069
+ }
1070
+ const turnId = this.turnId;
1071
+ for (const [id, messages] of claimed) {
1072
+ const message = messages[0];
1073
+ const entry = orphans.get(id);
1074
+ if (messages.length !== 1 || message.role !== entry.message.role)
1075
+ continue;
1076
+ // `previous` is the live object the view holds: a message mutated in place
1077
+ // and then replaced by a copy of itself is adopted without a record, and
1078
+ // the fold keeps the text it recorded.
1079
+ const previous = entry.message;
1080
+ entry.message = message;
1081
+ this.#ids.set(message, id);
1082
+ this.#recorded.set(message, id);
1083
+ // A copy with the same text (a structured clone, a re-parsed message)
1084
+ // is adopted as is: the fold already shows that content.
1085
+ if (sameStoredContent(previous, message))
1086
+ continue;
1087
+ void this.#enqueue(() => this.#append({
1088
+ type: 'message_edited',
1089
+ turnId,
1090
+ targetMessageId: id,
1091
+ content: message,
1092
+ ignorable: true,
1093
+ reason: 'compaction',
1094
+ })).catch(() => undefined);
1095
+ }
1096
+ }
1097
+ /**
1098
+ * A resume restores the context a checkpoint holds, which can predate a
1099
+ * compaction edit written after it. The ids still match, so the log is not
1100
+ * re-based; but the fold then shows the edited text of a message the context
1101
+ * holds as it was. One `message_edited` per such message makes the fold show
1102
+ * the context the resume actually runs with.
1103
+ */
1104
+ #recordDriftFromFold() {
1105
+ const edited = this.#foldEditedAtResume;
1106
+ if (edited.size === 0)
1107
+ return;
1108
+ const turnId = this.turnId;
1109
+ for (const entry of this.#view) {
1110
+ if (entry.id === undefined || entry.transient)
1111
+ continue;
1112
+ const folded = edited.get(entry.id);
1113
+ if (folded === undefined || sameStoredContent(folded, entry.message))
1114
+ continue;
1115
+ const message = entry.message;
1116
+ const id = entry.id;
1117
+ void this.#enqueue(() => this.#append({
1118
+ type: 'message_edited',
1119
+ turnId,
1120
+ targetMessageId: id,
1121
+ content: message,
1122
+ ignorable: true,
1123
+ reason: 'resume',
1124
+ })).catch(() => undefined);
1125
+ }
1126
+ edited.clear();
1127
+ }
993
1128
  /**
994
1129
  * Reconcile the context with the log. Nothing is written before the turn
995
1130
  * begins or after it pauses or settles.
@@ -1003,9 +1138,15 @@ export class TurnRecorder {
1003
1138
  this.#foldIdsAtResume = undefined;
1004
1139
  if (!unchanged) {
1005
1140
  this.#recordCompaction();
1141
+ // Kept ids whose restored text differs from the edited text the fold
1142
+ // holds get their record; entries re-recorded under fresh ids are not
1143
+ // in the map and are skipped.
1144
+ this.#recordDriftFromFold();
1006
1145
  return;
1007
1146
  }
1147
+ this.#recordDriftFromFold();
1008
1148
  }
1149
+ this.#absorbEdits();
1009
1150
  const live = this.#turn.messages;
1010
1151
  const view = this.#view;
1011
1152
  let prefix = 0;
@@ -1041,6 +1182,7 @@ export class TurnRecorder {
1041
1182
  * log order, the whole context becomes the summary.
1042
1183
  */
1043
1184
  #recordCompaction() {
1185
+ this.#absorbEdits();
1044
1186
  const live = this.#turn.messages;
1045
1187
  const byMessage = new Map(this.#view.map((entry) => [entry.message, entry]));
1046
1188
  const next = live.map((message) => {
@@ -1300,6 +1442,9 @@ async function recordedMessages(log, fold) {
1300
1442
  }
1301
1443
  return out;
1302
1444
  }
1445
+ function recordedContent(record) {
1446
+ return { content: record.content, ...(record.spill ? { spill: record.spill } : {}) };
1447
+ }
1303
1448
  /**
1304
1449
  * Every message this session's log has ever recorded, keyed by the durable
1305
1450
  * id its `message` record gave it — including one a compaction has since
@@ -1312,26 +1457,40 @@ async function recordedMessages(log, fold) {
1312
1457
  * recognise it by id — a caller's copy of it is reconciled by value instead.
1313
1458
  */
1314
1459
  export async function readEverRecordedMessages(log) {
1460
+ return (await readEverRecordedMessageIndex(log)).latest;
1461
+ }
1462
+ /**
1463
+ * {@link readEverRecordedMessages} plus what a host that cached the history
1464
+ * before a compaction edit still holds, answered from the same reduction with
1465
+ * no read of the log of its own.
1466
+ */
1467
+ export async function readEverRecordedMessageIndex(log) {
1315
1468
  return foldSessionLog(log, {
1316
1469
  name: 'ever-recorded-messages',
1317
1470
  mode: 'strict',
1318
- create: () => new Map(),
1319
- apply: (latest, entry) => {
1471
+ create: () => ({ latest: new Map(), earlier: new Map() }),
1472
+ apply: ({ latest, earlier }, entry) => {
1320
1473
  const record = entry.record;
1321
1474
  if (record.type === 'message') {
1322
- latest.set(record.messageId, {
1323
- content: record.content,
1324
- ...(record.spill ? { spill: record.spill } : {}),
1325
- });
1475
+ latest.set(record.messageId, recordedContent(record));
1326
1476
  }
1327
1477
  else if (record.type === 'message_replaced') {
1328
- latest.set(record.targetMessageId, {
1329
- content: record.content,
1330
- ...(record.spill ? { spill: record.spill } : {}),
1331
- });
1478
+ earlier.delete(record.targetMessageId);
1479
+ latest.set(record.targetMessageId, recordedContent(record));
1480
+ }
1481
+ else if (record.type === 'message_edited') {
1482
+ const before = latest.get(record.targetMessageId);
1483
+ if (before !== undefined) {
1484
+ const held = earlier.get(record.targetMessageId);
1485
+ if (held)
1486
+ held.push(before);
1487
+ else
1488
+ earlier.set(record.targetMessageId, [before]);
1489
+ }
1490
+ latest.set(record.targetMessageId, recordedContent(record));
1332
1491
  }
1333
1492
  },
1334
- result: async (latest) => {
1493
+ result: async ({ latest, earlier }) => {
1335
1494
  const resolved = new Map();
1336
1495
  for (const [id, entry] of latest) {
1337
1496
  // Copied: the map this is read from is shared with the next call.
@@ -1340,7 +1499,24 @@ export async function readEverRecordedMessages(log) {
1340
1499
  : structuredClone(entry.content);
1341
1500
  resolved.set(id, withMessageId(content, id));
1342
1501
  }
1343
- return resolved;
1502
+ // A snapshot: the arrays are advanced in place by the next call. The
1503
+ // entries in them are never changed once made.
1504
+ const held = new Map();
1505
+ for (const [id, list] of earlier)
1506
+ held.set(id, [...list]);
1507
+ return {
1508
+ latest: resolved,
1509
+ async heldBeforeAnEdit(id, message) {
1510
+ for (const entry of held.get(id) ?? []) {
1511
+ const content = entry.spill
1512
+ ? JSON.parse(await log.readSpill(entry.spill))
1513
+ : entry.content;
1514
+ if (sameStoredContent(content, message))
1515
+ return true;
1516
+ }
1517
+ return false;
1518
+ },
1519
+ };
1344
1520
  },
1345
1521
  });
1346
1522
  }