@cortexkit/opencode-magic-context 0.49.5 → 0.49.7

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 (156) hide show
  1. package/dist/auto-search-worker.js +10 -7
  2. package/dist/{compaction-marker-candidates-dd638ypn.js → compaction-marker-candidates-a0edbqrr.js} +2 -2
  3. package/dist/compaction-marker-candidates-worker.js +2 -2
  4. package/dist/{conflict-warning-hook-ae8nmv7c.js → conflict-warning-hook-myk5hbt9.js} +5 -5
  5. package/dist/{context-yg023c5r.js → context-ffr7e0g7.js} +46 -34
  6. package/dist/{embedding-backfill-aj488s8x.js → embedding-backfill-re16xncd.js} +6 -6
  7. package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
  8. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts +6 -3
  9. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts.map +1 -1
  10. package/dist/features/magic-context/dreamer/map-memories-prompt.d.ts +7 -1
  11. package/dist/features/magic-context/dreamer/map-memories-prompt.d.ts.map +1 -1
  12. package/dist/features/magic-context/dreamer/map-memories.d.ts +2 -2
  13. package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
  14. package/dist/features/magic-context/dreamer/primer-seed.d.ts +2 -0
  15. package/dist/features/magic-context/dreamer/primer-seed.d.ts.map +1 -1
  16. package/dist/features/magic-context/dreamer/refresh-primers.d.ts +2 -2
  17. package/dist/features/magic-context/storage-clone.d.ts.map +1 -1
  18. package/dist/features/magic-context/storage-meta-persisted.d.ts +10 -3
  19. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  20. package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
  21. package/dist/features/magic-context/storage-replay-document.d.ts +4 -0
  22. package/dist/features/magic-context/storage-replay-document.d.ts.map +1 -1
  23. package/dist/hooks/magic-context/apply-operations.d.ts +7 -0
  24. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  25. package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -1
  26. package/dist/hooks/magic-context/history-boundary-repair.d.ts.map +1 -1
  27. package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -1
  28. package/dist/hooks/magic-context/note-nudger.d.ts +5 -3
  29. package/dist/hooks/magic-context/note-nudger.d.ts.map +1 -1
  30. package/dist/hooks/magic-context/postprocess-read-cache.d.ts.map +1 -1
  31. package/dist/hooks/magic-context/read-session-chunk.d.ts +7 -0
  32. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  33. package/dist/hooks/magic-context/replay-committed-drops.d.ts +9 -0
  34. package/dist/hooks/magic-context/replay-committed-drops.d.ts.map +1 -0
  35. package/dist/hooks/magic-context/rust-lkg-freeze-registry.d.ts +2 -2
  36. package/dist/hooks/magic-context/rust-lkg-freeze-registry.d.ts.map +1 -1
  37. package/dist/hooks/magic-context/rust-mode-transform.d.ts +3 -0
  38. package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
  39. package/dist/hooks/magic-context/rust-served-raw.d.ts +29 -0
  40. package/dist/hooks/magic-context/rust-served-raw.d.ts.map +1 -0
  41. package/dist/hooks/magic-context/strip-content.d.ts +23 -24
  42. package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
  43. package/dist/hooks/magic-context/tag-messages.d.ts +2 -0
  44. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  45. package/dist/hooks/magic-context/tool-drop-target.d.ts +2 -0
  46. package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
  47. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  48. package/dist/{index-m4p77myp.js → index-0gyq3djm.js} +1 -1
  49. package/dist/{index-jpm52v9x.js → index-37q80veb.js} +1 -1
  50. package/dist/{index-znzgze2v.js → index-4btknbqh.js} +9 -8
  51. package/dist/{index-v4bqjy56.js → index-5tbvdff4.js} +59 -28
  52. package/dist/{index-7jzrrxap.js → index-9yyqq3mm.js} +1 -1
  53. package/dist/{index-qvr78ej6.js → index-a8acx4gc.js} +2 -2
  54. package/dist/{index-gcdb3rqw.js → index-ax2jhztn.js} +1 -1
  55. package/dist/{index-2mqps3c1.js → index-ebnngykq.js} +145 -94
  56. package/dist/{index-41gqa557.js → index-g8qbdb03.js} +1 -1
  57. package/dist/{index-fst3t0d9.js → index-j58gqrn2.js} +65 -65
  58. package/dist/{index-xfbfrngb.js → index-j5hce1ab.js} +2 -2
  59. package/dist/{index-kb9nn0a0.js → index-j8epsc0g.js} +35 -14
  60. package/dist/{index-7zg9dvx0.js → index-n5a170gs.js} +227 -38
  61. package/dist/{index-fjtgekd4.js → index-n7kwfw2r.js} +4 -4
  62. package/dist/{index-dd18gej8.js → index-rwmpkss5.js} +3 -3
  63. package/dist/{index-7w18gg78.js → index-rzmjkdd6.js} +1 -1
  64. package/dist/{index-c0b01zrc.js → index-sf94at64.js} +3 -3
  65. package/dist/{index-yxawqmdd.js → index-sh91t19a.js} +1 -1
  66. package/dist/{index-x3y1np1h.js → index-tagss15p.js} +857 -125
  67. package/dist/{index-yqps2zsv.js → index-tmtty2x5.js} +1 -1
  68. package/dist/{index-bhk710rw.js → index-vt4sf4ep.js} +1 -1
  69. package/dist/{index-6m7rdv7y.js → index-w4mw92w3.js} +1 -1
  70. package/dist/{index-7ndnvw7a.js → index-w6bd03dc.js} +1 -1
  71. package/dist/{index-p2hs3rps.js → index-w6vr754t.js} +4 -4
  72. package/dist/{index-3wckxwfp.js → index-wq16ahsn.js} +5 -5
  73. package/dist/index.js +36 -36
  74. package/dist/{message-index-bounded-pv6ct15d.js → message-index-bounded-04rycpx4.js} +9 -9
  75. package/dist/{message-index-jqa7qd0s.js → message-index-rqtse28y.js} +9 -9
  76. package/dist/{message-time-backfill-8x06r9kx.js → message-time-backfill-a5ytnp53.js} +1 -1
  77. package/dist/migration-worker.js +6 -6
  78. package/dist/plugin/messages-transform.d.ts.map +1 -1
  79. package/dist/{project-embedding-registry-fcmszatg.js → project-embedding-registry-k0sd9k7v.js} +5 -5
  80. package/dist/raw-ordinal-warmup-worker.js +17 -15
  81. package/dist/{read-session-chunk-cwgjwjd0.js → read-session-chunk-h1btx938.js} +7 -5
  82. package/dist/{read-session-raw-z38cn0as.js → read-session-raw-vdf4wh78.js} +2 -2
  83. package/dist/{recomp-orchestrator-xw9wt5bm.js → recomp-orchestrator-trcgmm23.js} +20 -20
  84. package/dist/{search-v1t47s2q.js → search-3rbdx6hw.js} +16 -16
  85. package/dist/{send-session-notification-yp9m5g4p.js → send-session-notification-2tp44tfa.js} +4 -4
  86. package/dist/shared/processed-image-eligibility.d.ts +22 -0
  87. package/dist/shared/processed-image-eligibility.d.ts.map +1 -0
  88. package/dist/shared/recovery-reasoning-prefix.d.ts +9 -0
  89. package/dist/shared/recovery-reasoning-prefix.d.ts.map +1 -0
  90. package/dist/shared/sqlite.d.ts +1 -1
  91. package/dist/shared/sqlite.d.ts.map +1 -1
  92. package/dist/shared/tag-transcript.d.ts +9 -0
  93. package/dist/shared/tag-transcript.d.ts.map +1 -1
  94. package/dist/{sqlite-mhjkerzq.js → sqlite-j3tvg8r0.js} +1 -1
  95. package/dist/{storage-memory-07fx57k6.js → storage-memory-8168bgef.js} +2 -2
  96. package/dist/{storage-tags-0ssbmzg9.js → storage-tags-61z5j2f9.js} +2 -2
  97. package/dist/tools/ctx-expand/search-archive.d.ts +4 -0
  98. package/dist/tools/ctx-expand/search-archive.d.ts.map +1 -0
  99. package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
  100. package/dist/{transform-postprocess-phase-ttra554y.js → transform-postprocess-phase-7qts7h54.js} +20 -20
  101. package/dist/v2/auto-search-worker.js +10 -7
  102. package/dist/v2/{compaction-marker-candidates-1s21e2fz.js → compaction-marker-candidates-6nypjkpf.js} +2 -2
  103. package/dist/v2/compaction-marker-candidates-worker.js +2 -2
  104. package/dist/v2/{context-6en6a8ar.js → context-xq4rtywr.js} +1019 -233
  105. package/dist/v2/{embedding-backfill-9hbkfvnz.js → embedding-backfill-xd9ygzgd.js} +6 -6
  106. package/dist/v2/hooks/payload.d.ts.map +1 -1
  107. package/dist/v2/{message-index-h8ssgq3q.js → message-index-8e5z2xx8.js} +9 -9
  108. package/dist/v2/{message-index-bounded-c0810p5w.js → message-index-bounded-5vh1h2g7.js} +9 -9
  109. package/dist/v2/{message-time-backfill-cje68egj.js → message-time-backfill-2z365239.js} +1 -1
  110. package/dist/v2/migration-worker.js +6 -6
  111. package/dist/v2/{project-embedding-registry-42th7k1z.js → project-embedding-registry-b77awytr.js} +5 -5
  112. package/dist/v2/raw-ordinal-warmup-worker.js +17 -15
  113. package/dist/v2/{read-session-chunk-n86v9xfg.js → read-session-chunk-4sat83cx.js} +7 -5
  114. package/dist/v2/{read-session-raw-3b3ehga4.js → read-session-raw-a3hw9jsp.js} +2 -2
  115. package/dist/v2/{recomp-orchestrator-krvsbnds.js → recomp-orchestrator-n11zv1f1.js} +19 -19
  116. package/dist/v2/{search-048v8y02.js → search-mvgqtkkz.js} +16 -16
  117. package/dist/v2/{send-session-notification-a4h2azxa.js → send-session-notification-ppgc8qdz.js} +4 -4
  118. package/dist/v2/{server-cvgn49tr.js → server-1rfgbjfn.js} +1 -1
  119. package/dist/v2/{server-3bc6k4k4.js → server-7srtwsa4.js} +5 -5
  120. package/dist/v2/{server-7jzrrxap.js → server-9yyqq3mm.js} +1 -1
  121. package/dist/v2/{server-2htmbqbv.js → server-brhj8qtd.js} +1 -1
  122. package/dist/v2/{server-3dqjhchy.js → server-dd0nja67.js} +1 -1
  123. package/dist/v2/{server-8wcf79fe.js → server-fpqe39as.js} +1 -1
  124. package/dist/v2/{server-cjz51jm2.js → server-fw31krgq.js} +3 -3
  125. package/dist/v2/{server-4n2tknpc.js → server-gtv9wbhq.js} +227 -38
  126. package/dist/v2/{server-8pqnnmf9.js → server-hcvcxzx7.js} +2 -2
  127. package/dist/v2/{server-kb9nn0a0.js → server-j8epsc0g.js} +35 -14
  128. package/dist/v2/{server-rygvffsf.js → server-jdwd03ep.js} +4 -4
  129. package/dist/v2/{server-q6j5dasr.js → server-kdrezdy0.js} +1 -1
  130. package/dist/v2/{server-e2v4m8xe.js → server-mv1w7t6z.js} +61 -30
  131. package/dist/v2/{server-hetyb88z.js → server-nfan6zb6.js} +65 -65
  132. package/dist/v2/{server-4enr7s6x.js → server-qcw43339.js} +1 -1
  133. package/dist/v2/{server-5zrpr764.js → server-sy4b1sra.js} +1 -1
  134. package/dist/v2/{server-9a6v0wth.js → server-v4fwha43.js} +9 -8
  135. package/dist/v2/{server-pcygfdbs.js → server-w3zeywp1.js} +1 -1
  136. package/dist/v2/{server-czb2rkpk.js → server-wkdgjjch.js} +1 -1
  137. package/dist/v2/{server-9290a1mb.js → server-x08d1xf3.js} +1 -1
  138. package/dist/v2/server.js +4 -4
  139. package/dist/v2/{sqlite-mhjkerzq.js → sqlite-j3tvg8r0.js} +1 -1
  140. package/dist/v2/{storage-memory-07fx57k6.js → storage-memory-8168bgef.js} +2 -2
  141. package/dist/v2/{storage-tags-3a4cavqb.js → storage-tags-j2fzq3sw.js} +2 -2
  142. package/dist/v2/{wrapup-orchestrator-r2v7kgy3.js → wrapup-orchestrator-s92ebfzv.js} +19 -19
  143. package/dist/{wrapup-orchestrator-z7agncp8.js → wrapup-orchestrator-df61jmz9.js} +21 -21
  144. package/package.json +3 -3
  145. package/src/shared/processed-image-eligibility.test.ts +68 -0
  146. package/src/shared/processed-image-eligibility.ts +41 -0
  147. package/src/shared/processed-image-position-review.json +20 -0
  148. package/src/shared/processed-image-position-review.test.ts +19 -0
  149. package/src/shared/recovery-reasoning-prefix.test.ts +34 -0
  150. package/src/shared/recovery-reasoning-prefix.ts +35 -0
  151. package/src/shared/sqlite-acquisition-routing.test.ts +4 -3
  152. package/src/shared/sqlite-foreground-wait.test.ts +140 -0
  153. package/src/shared/sqlite-pass-scope.test.ts +4 -4
  154. package/src/shared/sqlite-writer-diagnostics.test.ts +31 -0
  155. package/src/shared/sqlite.ts +64 -23
  156. package/src/shared/tag-transcript.ts +118 -0
@@ -23,7 +23,7 @@ import {
23
23
  TAG_SELECT_COLUMNS2,
24
24
  getCandidateToolOwners2,
25
25
  pickNearestPriorOwner2
26
- } from "./index-yqps2zsv.js";
26
+ } from "./index-tmtty2x5.js";
27
27
  import {
28
28
  OMO_INTERNAL_INITIATOR_MARKER,
29
29
  isSystemDirective,
@@ -43,7 +43,7 @@ import {
43
43
  } from "./index-qx53vezw.js";
44
44
  import {
45
45
  prepareCachedStatement2
46
- } from "./index-kb9nn0a0.js";
46
+ } from "./index-j8epsc0g.js";
47
47
  import {
48
48
  stableStringify
49
49
  } from "./index-1bt88epp.js";
@@ -68,13 +68,13 @@ import {
68
68
  readRawSeedTailFromDb2,
69
69
  readRawSessionBoundaryEndpointsFromDb2,
70
70
  prewarmRawSessionOrdinalsForDb
71
- } from "./index-jpm52v9x.js";
71
+ } from "./index-37q80veb.js";
72
72
  import {
73
73
  openCodeDbExists,
74
74
  withReadOnlySessionDb,
75
75
  getRawSessionMessageCountFromDb,
76
76
  getMessageTimesFromOpenCodeDb
77
- } from "./index-qvr78ej6.js";
77
+ } from "./index-a8acx4gc.js";
78
78
  import {
79
79
  getToolDefinitionMeasurementSignature,
80
80
  getLargestMeasuredToolDefinitionTokens,
@@ -1946,8 +1946,25 @@ function clearCachedM0M1(db, sessionId) {
1946
1946
  }
1947
1947
 
1948
1948
  // src/features/magic-context/storage-replay-document.ts
1949
+ import { AsyncLocalStorage } from "node:async_hooks";
1949
1950
  var CAS_RETRY_LIMIT = 5;
1950
1951
  var MISSING_REPLAY_DOCUMENT_COLUMN = Symbol("missing replay document column");
1952
+ var replaySnapshots = new AsyncLocalStorage;
1953
+ async function withReplayEnvelopeSnapshot(db, sessionId, work) {
1954
+ const snapshot = { db, sessionId, active: true, loaded: false };
1955
+ return replaySnapshots.run(snapshot, async () => {
1956
+ try {
1957
+ return await work();
1958
+ } finally {
1959
+ snapshot.active = false;
1960
+ }
1961
+ });
1962
+ }
1963
+ function invalidateReplayEnvelopeSnapshot(db, sessionId) {
1964
+ const snapshot = replaySnapshots.getStore();
1965
+ if (snapshot?.db === db && snapshot.sessionId === sessionId)
1966
+ snapshot.loaded = false;
1967
+ }
1951
1968
  function isRustMarkerAdmissionFenced(db, sessionId) {
1952
1969
  const row = db.prepare("SELECT COALESCE(json_extract(NULLIF(trailing_blank_decisions, ''), '$.rustMarkerAdmissionFence'), 0) AS fenced FROM session_meta WHERE session_id=?").get(sessionId);
1953
1970
  return row?.fenced === 1;
@@ -2070,16 +2087,30 @@ function readDecisionRows(db, sessionId, messageIds) {
2070
2087
  return db.prepare(`SELECT message_id, decision FROM session_replay_decisions
2071
2088
  WHERE session_id = ? AND message_id IN (SELECT value FROM json_each(?))`).all(sessionId, JSON.stringify(messageIds));
2072
2089
  }
2073
- function readRawReplayDocument(db, sessionId) {
2090
+ function readRawReplayDocument(db, sessionId, fresh = false) {
2091
+ const snapshot = replaySnapshots.getStore();
2092
+ const reusable = !fresh && snapshot?.active && snapshot.db === db && snapshot.sessionId === sessionId;
2093
+ if (reusable && snapshot.loaded)
2094
+ return snapshot.raw;
2074
2095
  try {
2075
2096
  const row = db.prepare("SELECT trailing_blank_decisions FROM session_meta WHERE session_id = ?").get(sessionId);
2076
2097
  const raw = row?.trailing_blank_decisions;
2077
- if (raw === null || raw === undefined || typeof raw === "string")
2098
+ if (raw === null || raw === undefined || typeof raw === "string") {
2099
+ if (reusable) {
2100
+ snapshot.raw = raw;
2101
+ snapshot.loaded = true;
2102
+ }
2078
2103
  return raw;
2104
+ }
2079
2105
  throw invalidReplayDocument("stored value is not text");
2080
2106
  } catch (error) {
2081
- if (isMissingReplayDocumentColumn(error))
2107
+ if (isMissingReplayDocumentColumn(error)) {
2108
+ if (reusable) {
2109
+ snapshot.raw = MISSING_REPLAY_DOCUMENT_COLUMN;
2110
+ snapshot.loaded = true;
2111
+ }
2082
2112
  return MISSING_REPLAY_DOCUMENT_COLUMN;
2113
+ }
2083
2114
  throw error;
2084
2115
  }
2085
2116
  }
@@ -2178,9 +2209,10 @@ function readAllTrailingBlankDecisions(db, sessionId, rawColumn) {
2178
2209
  return decisions;
2179
2210
  }
2180
2211
  function updateReplayDocument(db, sessionId, mutate) {
2212
+ invalidateReplayEnvelopeSnapshot(db, sessionId);
2181
2213
  let initial;
2182
2214
  try {
2183
- initial = readRawReplayDocument(db, sessionId);
2215
+ initial = readRawReplayDocument(db, sessionId, true);
2184
2216
  } catch (error) {
2185
2217
  if (error instanceof ReplayDocumentError)
2186
2218
  return false;
@@ -2192,7 +2224,7 @@ function updateReplayDocument(db, sessionId, mutate) {
2192
2224
  for (let attempt = 0;attempt < CAS_RETRY_LIMIT; attempt += 1) {
2193
2225
  let raw;
2194
2226
  try {
2195
- raw = readRawReplayDocument(db, sessionId);
2227
+ raw = readRawReplayDocument(db, sessionId, true);
2196
2228
  } catch (error) {
2197
2229
  if (error instanceof ReplayDocumentError)
2198
2230
  return false;
@@ -2247,7 +2279,7 @@ function updateTrailingBlankDecisions(db, sessionId, messageIds, decide) {
2247
2279
  }
2248
2280
  let initial;
2249
2281
  try {
2250
- initial = readRawReplayDocument(db, sessionId);
2282
+ initial = readRawReplayDocument(db, sessionId, true);
2251
2283
  } catch (error) {
2252
2284
  if (error instanceof ReplayDocumentError)
2253
2285
  return false;
@@ -2259,7 +2291,7 @@ function updateTrailingBlankDecisions(db, sessionId, messageIds, decide) {
2259
2291
  for (let attempt = 0;attempt < CAS_RETRY_LIMIT; attempt += 1) {
2260
2292
  let columnDecisions;
2261
2293
  try {
2262
- const raw = readRawReplayDocument(db, sessionId);
2294
+ const raw = readRawReplayDocument(db, sessionId, true);
2263
2295
  if (raw === MISSING_REPLAY_DOCUMENT_COLUMN)
2264
2296
  return false;
2265
2297
  columnDecisions = parseReplayDocument(raw).trailingBlank;
@@ -2314,6 +2346,7 @@ function updateTrailingBlankDecisions(db, sessionId, messageIds, decide) {
2314
2346
  return false;
2315
2347
  }
2316
2348
  function writeReplayDocument(db, sessionId, doc) {
2349
+ invalidateReplayEnvelopeSnapshot(db, sessionId);
2317
2350
  if (!hasReplayDecisionTable(db)) {
2318
2351
  db.prepare("UPDATE session_meta SET trailing_blank_decisions = ? WHERE session_id = ?").run(serializeReplayDocument(doc), sessionId);
2319
2352
  return;
@@ -3709,10 +3742,32 @@ function addStaleReduceStrippedIds(db, sessionId, ids) {
3709
3742
  return false;
3710
3743
  }
3711
3744
  function getProcessedImageStrippedIds(db, sessionId) {
3745
+ return new Set(getProcessedImageMarkers(db, sessionId).keys());
3746
+ }
3747
+ function parseProcessedImageMarkers(raw) {
3748
+ if (!raw)
3749
+ return new Map;
3750
+ try {
3751
+ const parsed = JSON.parse(raw);
3752
+ const ids = Array.isArray(parsed) ? parsed : parsed?.ids;
3753
+ const textIds = new Set(Array.isArray(parsed?.textMarkerIds) ? parsed.textMarkerIds : []);
3754
+ return new Map((Array.isArray(ids) ? ids : []).filter((id) => typeof id === "string").map((id) => [id, textIds.has(id) ? "[image stripped]" : ""]));
3755
+ } catch {
3756
+ return new Map;
3757
+ }
3758
+ }
3759
+ function serializeProcessedImageMarkers(markers) {
3760
+ const ids = [...markers.keys()];
3761
+ if (ids.length === 0)
3762
+ return "";
3763
+ const textMarkerIds = ids.filter((id) => markers.get(id) === "[image stripped]");
3764
+ return JSON.stringify(textMarkerIds.length > 0 ? { ids, textMarkerIds } : ids);
3765
+ }
3766
+ function getProcessedImageMarkers(db, sessionId) {
3712
3767
  const row = db.prepare("SELECT processed_image_stripped_ids FROM session_meta WHERE session_id = ?").get(sessionId);
3713
- return new Set(parseStrippedBlob(row?.processed_image_stripped_ids));
3768
+ return parseProcessedImageMarkers(row?.processed_image_stripped_ids);
3714
3769
  }
3715
- function addProcessedImageStrippedIds(db, sessionId, ids) {
3770
+ function addProcessedImageStrippedIds(db, sessionId, ids, marker = "") {
3716
3771
  const add = [...ids];
3717
3772
  if (add.length === 0)
3718
3773
  return true;
@@ -3720,17 +3775,17 @@ function addProcessedImageStrippedIds(db, sessionId, ids) {
3720
3775
  for (let attempt = 0;attempt < CAS_RETRY_LIMIT2; attempt += 1) {
3721
3776
  const row = db.prepare("SELECT processed_image_stripped_ids FROM session_meta WHERE session_id = ?").get(sessionId);
3722
3777
  const rawStored = row ? row.processed_image_stripped_ids ?? null : null;
3723
- const current = new Set(parseStrippedBlob(rawStored));
3778
+ const current = parseProcessedImageMarkers(rawStored);
3724
3779
  let changed = false;
3725
3780
  for (const id of add) {
3726
3781
  if (!current.has(id)) {
3727
- current.add(id);
3782
+ current.set(id, typeof marker === "string" ? marker : marker.get(id) ?? "");
3728
3783
  changed = true;
3729
3784
  }
3730
3785
  }
3731
3786
  if (!changed)
3732
3787
  return true;
3733
- const nextBlob = JSON.stringify([...current]);
3788
+ const nextBlob = serializeProcessedImageMarkers(current);
3734
3789
  const result = db.prepare("UPDATE session_meta SET processed_image_stripped_ids = ? WHERE session_id = ? AND processed_image_stripped_ids IS ?").run(nextBlob, sessionId, rawStored);
3735
3790
  if (result.changes > 0)
3736
3791
  return true;
@@ -3784,7 +3839,8 @@ function loadPostprocessReplaySnapshot(db, sessionId) {
3784
3839
  const thinkingBindingRecoveryTarget = row?.thinking_binding_recovery_target;
3785
3840
  return {
3786
3841
  staleReduceStrippedIds: new Set(parseStrippedBlob(row?.stale_reduce_stripped_ids)),
3787
- processedImageStrippedIds: new Set(parseStrippedBlob(row?.processed_image_stripped_ids)),
3842
+ processedImageStrippedIds: new Set(parseProcessedImageMarkers(row?.processed_image_stripped_ids).keys()),
3843
+ processedImageMarkers: parseProcessedImageMarkers(row?.processed_image_stripped_ids),
3788
3844
  strippedPlaceholderIds: new Set(placeholders.ids),
3789
3845
  hiddenSeamPlaceholderIds: new Set(placeholders.hiddenSeamIds),
3790
3846
  noteNudgeAnchors: parseJsonArray(row?.note_nudge_anchors, isValidNoteNudgeAnchor),
@@ -3828,15 +3884,22 @@ function getPendingPiCompactionMarkerState(db, sessionId) {
3828
3884
  return parsed;
3829
3885
  }
3830
3886
  } catch {}
3831
- db.prepare("UPDATE session_meta SET pending_pi_compaction_marker_state = NULL WHERE session_id = ? AND pending_pi_compaction_marker_state = ?").run(sessionId, raw);
3887
+ const cleared = db.prepare("UPDATE session_meta SET pending_pi_compaction_marker_state = NULL WHERE session_id = ? AND pending_pi_compaction_marker_state = ?").run(sessionId, raw);
3888
+ if (cleared.changes > 0)
3889
+ sessionLog2(sessionId, "Pi compaction-marker clear: reason=malformed-state");
3832
3890
  return null;
3833
3891
  }
3834
- function clearPendingPiCompactionMarkerStateIf(db, sessionId, expected) {
3892
+ function clearPendingPiCompactionMarkerStateIf(db, sessionId, expected, reason = "explicit-clear") {
3835
3893
  const expectedBlob = stableStringify(expected);
3836
3894
  const result = db.prepare(`UPDATE session_meta SET pending_pi_compaction_marker_state = NULL
3837
3895
  WHERE session_id = ? AND pending_pi_compaction_marker_state = ?`).run(sessionId, expectedBlob);
3896
+ if (result.changes > 0 && reason !== null)
3897
+ logPiCompactionMarkerClear(sessionId, expected, reason);
3838
3898
  return result.changes > 0;
3839
3899
  }
3900
+ function logPiCompactionMarkerClear(sessionId, marker, reason) {
3901
+ sessionLog2(sessionId, `Pi compaction-marker clear: reason=${reason} endMessageId=${marker.endMessageId} ordinal=${marker.ordinal} firstKeptEntryId=${marker.firstKeptEntryId ?? "<none>"}`);
3902
+ }
3840
3903
  function getSessionsWithPendingMarker(db) {
3841
3904
  const rows = db.prepare(`SELECT session_id FROM session_meta
3842
3905
  WHERE pending_compaction_marker_state IS NOT NULL
@@ -4441,6 +4504,27 @@ function hasAnthropicReasoning(messages) {
4441
4504
  });
4442
4505
  }
4443
4506
 
4507
+ // src/shared/processed-image-eligibility.ts
4508
+ function createProcessedImageEligibility(messages, messageTagNumbers, options) {
4509
+ const ageTags = new Map;
4510
+ let nextTag;
4511
+ for (let index = messages.length - 1;index >= 0; index--) {
4512
+ const message = messages[index];
4513
+ const ownTag = messageTagNumbers.get(message);
4514
+ if (ownTag !== undefined && Number.isFinite(ownTag) && ownTag > 0)
4515
+ nextTag = ownTag;
4516
+ if (nextTag !== undefined)
4517
+ ageTags.set(message, nextTag);
4518
+ }
4519
+ return {
4520
+ ageTags,
4521
+ mayStrip: (message) => {
4522
+ const age = ageTags.get(message);
4523
+ return options.watermark > 0 && age !== undefined && age <= options.watermark && ((options.contextPercentage ?? 0) >= 95 || options.protectedCutoff == null || age < options.protectedCutoff);
4524
+ }
4525
+ };
4526
+ }
4527
+
4444
4528
  // src/hooks/magic-context/strip-content.ts
4445
4529
  var MARKER_ONLY_PATTERN = /^(?:(?:§\d+§|\[dropped(?: §\d+§)?\]|\[cleared\])\s*)+$/;
4446
4530
  function isMarkerOnlyText(text) {
@@ -4990,59 +5074,142 @@ function stripReasoningFromMergedAssistants(messages, providerID, options) {
4990
5074
  }
4991
5075
  return stripped;
4992
5076
  }
5077
+ var emptyImageParts = new WeakMap;
5078
+ function getEmptyImageParts(messages) {
5079
+ return emptyImageParts.get(messages) ?? new Map;
5080
+ }
5081
+ function imageOmissionBreaksStructure(messages, index, omitted) {
5082
+ let before = index - 1;
5083
+ let after = index + 1;
5084
+ while (omitted.has(before))
5085
+ before--;
5086
+ while (omitted.has(after))
5087
+ after++;
5088
+ const previous = messages[before];
5089
+ const next = messages[after];
5090
+ return previous !== undefined && next !== undefined && previous.info.role === next.info.role;
5091
+ }
4993
5092
  function stripProcessedImages(messages, frozenIds, options) {
4994
- const { detect, watermark, messageTagNumbers } = options;
5093
+ const omissions = new Map;
5094
+ emptyImageParts.set(messages, omissions);
5095
+ const { detect, messageTagNumbers } = options;
5096
+ const eligibility = createProcessedImageEligibility(messages, messageTagNumbers, options);
4995
5097
  let stripped = 0;
4996
5098
  const newlyStrippedIds = [];
4997
5099
  const planned = [];
5100
+ const newMarkers = new Map;
4998
5101
  let hasAssistantResponse = false;
4999
5102
  for (let i = messages.length - 1;i >= 0; i--) {
5000
5103
  const msg = messages[i];
5104
+ const answered = hasAssistantResponse;
5001
5105
  if (msg.info.role === "assistant") {
5002
5106
  hasAssistantResponse = true;
5003
- continue;
5004
5107
  }
5005
- if (msg.info.role !== "user") {
5108
+ if (msg.info.role !== "user" && msg.info.role !== "assistant") {
5006
5109
  continue;
5007
5110
  }
5008
5111
  const id = typeof msg.info.id === "string" ? msg.info.id : undefined;
5009
5112
  const inFrozen = id !== undefined && frozenIds.has(id);
5010
- const maxTag = messageTagNumbers.get(msg) ?? 0;
5011
- const isNewDetection = !inFrozen && detect && hasAssistantResponse && id !== undefined && maxTag <= watermark;
5113
+ const isNewDetection = !inFrozen && detect && answered && id !== undefined && eligibility.mayStrip(msg) && !options.protectedMessageIds?.has(id);
5012
5114
  if (!inFrozen && !isNewDetection) {
5013
5115
  continue;
5014
5116
  }
5015
5117
  let touchedThisMsg = false;
5016
5118
  for (let j = 0;j < msg.parts.length; j++) {
5017
5119
  const part = msg.parts[j];
5018
- if (!isRecord(part) || part.type !== "file") {
5019
- continue;
5020
- }
5021
- if (typeof part.mime !== "string" || !part.mime.startsWith("image/")) {
5022
- continue;
5023
- }
5024
- if (typeof part.url === "string" && part.url.startsWith("data:") && part.url.length > 200) {
5025
- planned.push({ message: msg, partIndex: j, firstApplication: isNewDetection });
5120
+ const tool = msg.info.role === "assistant" && isRecord(part) && part.type === "tool" && isRecord(part.state) && part.state.status === "completed";
5121
+ const images = tool && isRecord(part) && isRecord(part.state) && Array.isArray(part.state.attachments) ? part.state.attachments : msg.info.role === "user" ? [part] : [];
5122
+ if (images.some(isProcessedImagePart)) {
5123
+ planned.push({
5124
+ message: msg,
5125
+ partIndex: j,
5126
+ firstApplication: isNewDetection,
5127
+ tool
5128
+ });
5026
5129
  touchedThisMsg = true;
5027
5130
  }
5028
5131
  }
5029
5132
  if (touchedThisMsg && isNewDetection && id !== undefined) {
5030
5133
  newlyStrippedIds.push(id);
5134
+ newMarkers.set(id, msg.info.role === "assistant" ? "[image stripped]" : options.replacementText ?? "");
5031
5135
  }
5032
5136
  }
5033
- const persisted = newlyStrippedIds.length === 0 || options.persistNewIds?.(newlyStrippedIds) !== false;
5137
+ const imageIndices = new Map;
5138
+ for (const { message, partIndex, tool } of planned) {
5139
+ if (tool)
5140
+ continue;
5141
+ const indices = imageIndices.get(message) ?? new Set;
5142
+ indices.add(partIndex);
5143
+ imageIndices.set(message, indices);
5144
+ }
5145
+ const emptiedRows = new Set;
5146
+ const newEmptyRows = [];
5147
+ for (let index = 0;index < messages.length; index++) {
5148
+ const message = messages[index];
5149
+ if (message.parts.every((part) => isRecord(part) && part.type === "text" && part.text === ""))
5150
+ emptiedRows.add(index);
5151
+ const id = message.info.id;
5152
+ const indices = imageIndices.get(message);
5153
+ if (!id || !indices)
5154
+ continue;
5155
+ const marker = options.frozenMarkers?.get(id) ?? newMarkers.get(id) ?? "";
5156
+ if (marker !== "" || !message.parts.every((part, partIndex) => indices.has(partIndex) || isRecord(part) && part.type === "text" && part.text === ""))
5157
+ continue;
5158
+ if (newMarkers.has(id))
5159
+ newEmptyRows.push({ index, id });
5160
+ else
5161
+ emptiedRows.add(index);
5162
+ }
5163
+ for (const { index, id } of newEmptyRows) {
5164
+ if (imageOmissionBreaksStructure(messages, index, emptiedRows))
5165
+ newMarkers.set(id, "[image stripped]");
5166
+ else
5167
+ emptiedRows.add(index);
5168
+ }
5169
+ const persisted = newlyStrippedIds.length === 0 || options.persistNewIds?.(newlyStrippedIds, newMarkers) !== false;
5034
5170
  if (!persisted)
5035
5171
  newlyStrippedIds.length = 0;
5036
- for (const { message, partIndex, firstApplication } of planned) {
5172
+ for (const { message, partIndex, firstApplication, tool } of planned) {
5037
5173
  if (firstApplication && !persisted)
5038
5174
  continue;
5039
5175
  if (firstApplication)
5040
5176
  options.onFirstApplication?.(message, partIndex);
5041
- message.parts[partIndex] = makeSentinel(message.parts[partIndex]);
5042
- stripped++;
5177
+ const marker = tool ? "[image stripped]" : options.frozenMarkers?.get(message.info.id ?? "") ?? (firstApplication ? newMarkers.get(message.info.id ?? "") : "") ?? "";
5178
+ const original = message.parts[partIndex];
5179
+ if (tool && isRecord(original) && isRecord(original.state) && Array.isArray(original.state.attachments)) {
5180
+ const attachments = original.state.attachments;
5181
+ const count = attachments.filter(isProcessedImagePart).length;
5182
+ const output = typeof original.state.output === "string" ? original.state.output : "";
5183
+ message.parts[partIndex] = {
5184
+ ...original,
5185
+ state: {
5186
+ ...original.state,
5187
+ output: [output, ...Array(count).fill(marker)].filter(Boolean).join(`
5188
+ `),
5189
+ attachments: attachments.filter((part) => !isProcessedImagePart(part))
5190
+ }
5191
+ };
5192
+ stripped += count;
5193
+ } else {
5194
+ message.parts[partIndex] = { ...makeSentinel(original), text: marker };
5195
+ if (marker === "" && message.info.id) {
5196
+ const indices = omissions.get(message.info.id) ?? new Set;
5197
+ indices.add(partIndex);
5198
+ omissions.set(message.info.id, indices);
5199
+ }
5200
+ stripped++;
5201
+ }
5043
5202
  }
5044
5203
  return { stripped, newlyStrippedIds };
5045
5204
  }
5205
+ function isProcessedImagePart(part) {
5206
+ if (isRecord(part) && part.type === "media" && isRecord(part.media)) {
5207
+ const { source, mediaType } = part.media;
5208
+ const inlineLength = isRecord(source) ? source.type === "base64" && typeof source.data === "string" ? source.data.length : source.type === "bytes" && source.data instanceof Uint8Array ? Math.ceil(source.data.byteLength / 3) * 4 : 0 : 0;
5209
+ return typeof mediaType === "string" && mediaType.startsWith("image/") && inlineLength > 0 && inlineLength + `data:${mediaType};base64,`.length > 200;
5210
+ }
5211
+ return isRecord(part) && part.type === "file" && typeof part.mime === "string" && part.mime.startsWith("image/") && typeof part.url === "string" && part.url.startsWith("data:") && part.url.length > 200;
5212
+ }
5046
5213
 
5047
5214
  // src/hooks/magic-context/reasoning-budget.ts
5048
5215
  function projectOpencodeReasoningBudgetCutoff(db, sessionId, messages, budget, watermark, proseRatio) {
@@ -6030,6 +6197,10 @@ function createToolDropTarget(compositeKey, thinkingParts, index, batch, tagId)
6030
6197
  return false;
6031
6198
  return batch.wouldStrandConversationEnd(entry.occurrences);
6032
6199
  },
6200
+ prepareDrop: () => {
6201
+ const entry = index.get(compositeKey);
6202
+ return !!entry && entry.occurrences.length > 0 && entry.hasResult;
6203
+ },
6033
6204
  canDrop: () => {
6034
6205
  const entry = index.get(compositeKey);
6035
6206
  return !!entry && entry.occurrences.length > 0 && entry.hasResult && !entry.occurrences.some((occurrence) => toolPartHasUserAnswer(occurrence.part));
@@ -6292,6 +6463,21 @@ function visitRawSessionMessages2(sessionId, fromOrdinal, toOrdinal, visit, opti
6292
6463
  after = last ? { timeCreated: last.createdAt ?? 0, id: last.id } : undefined;
6293
6464
  }
6294
6465
  }
6466
+ async function visitRawSessionMessagesAsync2(sessionId, fromOrdinal, toOrdinal, visit, options = {}) {
6467
+ const from = Math.max(1, Math.floor(fromOrdinal));
6468
+ const to = Math.floor(toOrdinal);
6469
+ if (to < from)
6470
+ return;
6471
+ const provider = sessionProviders.get(sessionId)?.provider;
6472
+ if (!provider?.iterateMessageRangeAsync) {
6473
+ visitRawSessionMessages2(sessionId, from, to, visit, options);
6474
+ return;
6475
+ }
6476
+ for await (const message of provider.iterateMessageRangeAsync(from, to)) {
6477
+ if (!visit(message))
6478
+ return;
6479
+ }
6480
+ }
6295
6481
  function readRawSessionMessageRange2(sessionId, fromOrdinal, toOrdinal) {
6296
6482
  const from = Math.max(1, Math.floor(fromOrdinal));
6297
6483
  const to = Math.floor(toOrdinal);
@@ -6717,7 +6903,10 @@ function readSessionChunk2(sessionId, tokenBudget, offset = 1, eligibleEndOrdina
6717
6903
  if (state?.input === undefined && state?.output !== undefined && typeof p.callID === "string") {
6718
6904
  const call = calls.get(p.callID);
6719
6905
  if (call) {
6720
- const expansion = expandToolPart({ ...call, state: { ...call.state, output: state.output } }, options.expandTools);
6906
+ const expansion = expandToolPart({
6907
+ ...call,
6908
+ state: { ...call.state, output: state.output }
6909
+ }, options.expandTools);
6721
6910
  if (expansion !== null) {
6722
6911
  expandedParts.set(call, expansion);
6723
6912
  expandedResults.add(part);
@@ -7000,4 +7189,4 @@ function readRawSessionSeedTail2(sessionId, boundaryId, onQuery) {
7000
7189
  });
7001
7190
  }
7002
7191
 
7003
- export { expandToolPart, markHostUnservedRow, retreatPastHostUnservedRows, snapTerminalCompartmentToServedRow, isHostRenderedSystemMessage, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, invalidateTrueRawTokenCache, stripSystemInjection, isTextPart, isToolPartWithOutput, isFilePart, buildFileSourceContent, toolPartHasUserAnswer, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, recordToolParameters, createDroppedInputGuard, assertExecutableToolInput, createDroppedInputToolExecuteBeforeHook, isEditTool, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, MAX_EXECUTE_THRESHOLD, escalationBands, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, getProtectionWindowForSession, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, isRustMarkerAdmissionFenced, setRustMarkerAdmissionFence, ReplayDocumentError, readReplayEnvelope, readReplayDocument, updateReplayDocument, writeReplayDocument, isEmergencyRecoveryArmed, isProviderOverflowReconfirmed, isProviderOverflowFailClosedProven, getEmergencyRecoveryArmedAt, describeProtectedTailDrainBudgetSkip, loadPersistedUsage, loadProtectedTailMeta, markProtectedTailPolicyV3Seeded, recordProtectedTailPublicationFloor, recordProtectedTailNoEligibleHead, resetProtectedTailNoEligibleHead, getWrapupInProgressState, isWrapupInProgress, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, getProtectedTailDrainBudgetSkip, reserveProtectedTailDrainTokens, clearEmergencyDrainLatch, recordHistorianDrainFailure, clearHistorianDrainFailure, rollbackProtectedTailDrainReservation, getPersistedReasoningWatermark, setPersistedReasoningWatermark, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, getChannel2NudgeClaim, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, removeNoteNudgeAnchorByMessageId, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, removeAutoSearchHintDecisionByMessageId, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, loadTransformPassStateSnapshot, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getDeferredClearedCompactionMarkerState, retireDeferredClearedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, removeStrippedPlaceholderId, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, armThinkingBindingRecovery, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, demoteTrailingBlankKeepDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, setPendingCompactionMarkerState, replacePendingCompactionMarkerStateIf, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, getSessionsWithPendingMarker, setSessionWorkMetrics, getObservedEpochFloor, resolveEpochFloorForPass, getReasoningRemovalState, addRemovedReasoningIds, markDropLeavesReasoning, detectThinkingBindingMismatch, detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, modelAcceptsEmptyContent, isAnthropicFamilyRoute, neutralizeDroppedReasoningPart, restoreNeutralizedReasoningPart, isNeutralizedReasoningPart, variantChangeBustsProviderCache, makeSentinel, makeWholeMessageSentinel, isSentinel, replaySentinelByMessageIds, isInActiveAnthropicTurn, activeAnthropicTurnStart, hasAnthropicReasoning, stripSystemInjectedMessages, stripDroppedPlaceholderMessages, replayClearedReasoning, replayStrippedInlineThinking, clearOldReasoning, stripClearedReasoning, stripInlineThinking, findReasoningBearingAssistantIds, findLatestAssistantReasoningMutationExemptMessage, snapshotTrailingBlankSourceDecisions, findTrailingBlankDecisionCandidates, applyFrozenTrailingBlankDecisions, stripReasoningFromAssistantIds, findMergedReasoningStripDecisions, stripReasoningFromMergedAssistants, stripProcessedImages, projectOpencodeReasoningBudgetCutoff, DEFAULT_KEEP_REASONING_TOKENS, resolveKeepReasoningTokens, reasoningStepCost, reasoningBudgetCutoff, reasoningTextAndOpaque, opencodeReasoningBudgetCutoff, describeFinalWireTail, estimateMessageTokens, wireContentBytes, createFinalWireUsageTracker, estimateFinalWireInputTokens, estimateAppendedWireTokens, SKELETON_REAL_INPUT_MAX_BYTES, partHasCompletedResult, extractToolCallObservation, ToolMutationBatch, createToolDropTarget, resolveHostServedBoundaryId2, hasRawMessageProvider2, setRawMessageProvider2, setBoundedRawMessageProvider2, withRawMessageProvider2, cleanUserText2, withRawSessionMessageCache2, readRawSessionMessages2, readRawSessionMessagePage2, getRawSessionMessageOrdinalCount2, RAW_MESSAGE_VISIT_PAGE_SIZE2, visitRawSessionMessages2, readRawSessionMessageRange2, prepareRawSessionOrdinals2, primeTailRawMessageCache2, getCachedAbsoluteMessageCount2, primeInMemoryTailRawMessageCache2, readRawSessionMessageOrdinalPage2, getRawSessionStoredMessageCount2, readRawSessionMessageIdOrdinalsForRange2, readRawSessionMessageIdOrdinals2, readRawSessionMessagePartsById2, readRawSessionBoundaryEndpoints2, hasRawSessionMessageById2, readRawSessionMessageOrdinalById2, compareRawSessionMessageOrder2, readRawSessionMessageById2, getRawSessionMessageCount2, RAW_SESSION_TAG_KEY_PAGE_SIZE2, getRawSessionTagKeysThrough2, getLegacyProtectedTailStartOrdinal2, getProtectedTailStartOrdinal2, readSessionChunk2, getRawSessionMessageIdsThrough2, readRawSessionSeedTail2 };
7192
+ export { expandToolPart, markHostUnservedRow, retreatPastHostUnservedRows, snapTerminalCompartmentToServedRow, isHostRenderedSystemMessage, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, invalidateTrueRawTokenCache, stripSystemInjection, isTextPart, isToolPartWithOutput, isFilePart, buildFileSourceContent, toolPartHasUserAnswer, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, recordToolParameters, createDroppedInputGuard, assertExecutableToolInput, createDroppedInputToolExecuteBeforeHook, isEditTool, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, MAX_EXECUTE_THRESHOLD, escalationBands, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, getProtectionWindowForSession, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, withReplayEnvelopeSnapshot, invalidateReplayEnvelopeSnapshot, isRustMarkerAdmissionFenced, setRustMarkerAdmissionFence, ReplayDocumentError, readReplayEnvelope, readReplayDocument, updateReplayDocument, writeReplayDocument, isEmergencyRecoveryArmed, isProviderOverflowReconfirmed, isProviderOverflowFailClosedProven, getEmergencyRecoveryArmedAt, describeProtectedTailDrainBudgetSkip, loadPersistedUsage, loadProtectedTailMeta, markProtectedTailPolicyV3Seeded, recordProtectedTailPublicationFloor, recordProtectedTailNoEligibleHead, resetProtectedTailNoEligibleHead, getWrapupInProgressState, isWrapupInProgress, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, getProtectedTailDrainBudgetSkip, reserveProtectedTailDrainTokens, clearEmergencyDrainLatch, recordHistorianDrainFailure, clearHistorianDrainFailure, rollbackProtectedTailDrainReservation, getPersistedReasoningWatermark, setPersistedReasoningWatermark, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, getChannel2NudgeClaim, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, removeNoteNudgeAnchorByMessageId, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, removeAutoSearchHintDecisionByMessageId, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, loadTransformPassStateSnapshot, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getDeferredClearedCompactionMarkerState, retireDeferredClearedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, removeStrippedPlaceholderId, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, armThinkingBindingRecovery, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, demoteTrailingBlankKeepDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, parseProcessedImageMarkers, serializeProcessedImageMarkers, getProcessedImageMarkers, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, setPendingCompactionMarkerState, replacePendingCompactionMarkerStateIf, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, logPiCompactionMarkerClear, getSessionsWithPendingMarker, setSessionWorkMetrics, getObservedEpochFloor, resolveEpochFloorForPass, getReasoningRemovalState, addRemovedReasoningIds, markDropLeavesReasoning, detectThinkingBindingMismatch, detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, modelAcceptsEmptyContent, isAnthropicFamilyRoute, neutralizeDroppedReasoningPart, restoreNeutralizedReasoningPart, isNeutralizedReasoningPart, variantChangeBustsProviderCache, makeSentinel, makeWholeMessageSentinel, isSentinel, replaySentinelByMessageIds, isInActiveAnthropicTurn, activeAnthropicTurnStart, hasAnthropicReasoning, stripSystemInjectedMessages, stripDroppedPlaceholderMessages, replayClearedReasoning, replayStrippedInlineThinking, clearOldReasoning, stripClearedReasoning, stripInlineThinking, findReasoningBearingAssistantIds, findLatestAssistantReasoningMutationExemptMessage, snapshotTrailingBlankSourceDecisions, findTrailingBlankDecisionCandidates, applyFrozenTrailingBlankDecisions, stripReasoningFromAssistantIds, findMergedReasoningStripDecisions, stripReasoningFromMergedAssistants, getEmptyImageParts, stripProcessedImages, projectOpencodeReasoningBudgetCutoff, DEFAULT_KEEP_REASONING_TOKENS, resolveKeepReasoningTokens, reasoningStepCost, reasoningBudgetCutoff, reasoningTextAndOpaque, opencodeReasoningBudgetCutoff, describeFinalWireTail, estimateMessageTokens, wireContentBytes, createFinalWireUsageTracker, estimateFinalWireInputTokens, estimateAppendedWireTokens, SKELETON_REAL_INPUT_MAX_BYTES, partHasCompletedResult, extractToolCallObservation, ToolMutationBatch, createToolDropTarget, resolveHostServedBoundaryId2, hasRawMessageProvider2, setRawMessageProvider2, setBoundedRawMessageProvider2, withRawMessageProvider2, cleanUserText2, withRawSessionMessageCache2, readRawSessionMessages2, readRawSessionMessagePage2, getRawSessionMessageOrdinalCount2, RAW_MESSAGE_VISIT_PAGE_SIZE2, visitRawSessionMessages2, visitRawSessionMessagesAsync2, readRawSessionMessageRange2, prepareRawSessionOrdinals2, primeTailRawMessageCache2, getCachedAbsoluteMessageCount2, primeInMemoryTailRawMessageCache2, readRawSessionMessageOrdinalPage2, getRawSessionStoredMessageCount2, readRawSessionMessageIdOrdinalsForRange2, readRawSessionMessageIdOrdinals2, readRawSessionMessagePartsById2, readRawSessionBoundaryEndpoints2, hasRawSessionMessageById2, readRawSessionMessageOrdinalById2, compareRawSessionMessageOrder2, readRawSessionMessageById2, getRawSessionMessageCount2, RAW_SESSION_TAG_KEY_PAGE_SIZE2, getRawSessionTagKeysThrough2, getLegacyProtectedTailStartOrdinal2, getProtectedTailStartOrdinal2, readSessionChunk2, getRawSessionMessageIdsThrough2, readRawSessionSeedTail2 };
@@ -7,17 +7,17 @@ import {
7
7
  } from "./index-pavzsdc6.js";
8
8
  import {
9
9
  isTransientSqliteError2
10
- } from "./index-kb9nn0a0.js";
10
+ } from "./index-j8epsc0g.js";
11
11
  import {
12
12
  PROMOTABLE_CATEGORIES,
13
13
  CATEGORY_DEFAULT_TTL
14
14
  } from "./index-fr0wbhdn.js";
15
15
  import {
16
16
  managedAuthorityNoteRow
17
- } from "./index-xfbfrngb.js";
17
+ } from "./index-j5hce1ab.js";
18
18
  import {
19
19
  embedTextForProject2
20
- } from "./index-c0b01zrc.js";
20
+ } from "./index-sf94at64.js";
21
21
  import {
22
22
  saveEmbeddingIfHashMatches
23
23
  } from "./index-4dhv7mqz.js";
@@ -30,7 +30,7 @@ import {
30
30
  buildWorkspaceMemorySqlFilter2,
31
31
  getMemoryById2,
32
32
  updateMemorySeenCount2
33
- } from "./index-7jzrrxap.js";
33
+ } from "./index-9yyqq3mm.js";
34
34
  import {
35
35
  computeNormalizedHash
36
36
  } from "./index-2bvekkfy.js";
@@ -3,16 +3,16 @@ import {
3
3
  } from "./index-nsjyysj0.js";
4
4
  import {
5
5
  clearEmergencyRecovery
6
- } from "./index-7zg9dvx0.js";
6
+ } from "./index-n5a170gs.js";
7
7
  import {
8
8
  requestPendingMaterialization,
9
9
  dropSlot,
10
10
  executeContextRecomp
11
- } from "./index-v4bqjy56.js";
11
+ } from "./index-5tbvdff4.js";
12
12
  import {
13
13
  renderUserFacingFailure,
14
14
  userFacingFailureCode
15
- } from "./index-fjtgekd4.js";
15
+ } from "./index-n7kwfw2r.js";
16
16
 
17
17
  // src/hooks/magic-context/recomp-orchestrator.ts
18
18
  function resolveLiveModelKey(liveSessionState, sessionId) {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  withSqliteBackgroundWriter2,
3
3
  withoutSqliteTransformPass2
4
- } from "./index-kb9nn0a0.js";
4
+ } from "./index-j8epsc0g.js";
5
5
  import {
6
6
  logSlowWriteTransaction
7
7
  } from "./index-4mjhqadz.js";
@@ -8,12 +8,12 @@ import {
8
8
  import {
9
9
  isUserHomeDirectory,
10
10
  setBootQuietPeriodForTests
11
- } from "./index-41gqa557.js";
11
+ } from "./index-g8qbdb03.js";
12
12
  import {
13
13
  withSqliteBackgroundWriter2,
14
14
  withoutSqliteTransformPass2,
15
15
  isTransientSqliteError2
16
- } from "./index-kb9nn0a0.js";
16
+ } from "./index-j8epsc0g.js";
17
17
  import {
18
18
  estimateTokens
19
19
  } from "./index-qx53vezw.js";
@@ -39,7 +39,7 @@ import {
39
39
  countSessionCompartmentEmbedCoverage,
40
40
  countSessionCompartmentEmbedCoveragePolite,
41
41
  countUnembeddedSessionCompartmentsPolite
42
- } from "./index-gcdb3rqw.js";
42
+ } from "./index-ax2jhztn.js";
43
43
  import {
44
44
  DEFAULT_LOCAL_EMBEDDING_MODEL
45
45
  } from "./index-k6xvbj2e.js";
@@ -6,7 +6,7 @@ import {
6
6
  } from "./index-nsjyysj0.js";
7
7
  import {
8
8
  getSqliteDatabasePath2
9
- } from "./index-kb9nn0a0.js";
9
+ } from "./index-j8epsc0g.js";
10
10
 
11
11
  // src/features/magic-context/compaction-marker-candidates.ts
12
12
  import { existsSync, realpathSync } from "node:fs";