@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.
- package/dist/auto-search-worker.js +10 -7
- package/dist/{compaction-marker-candidates-dd638ypn.js → compaction-marker-candidates-a0edbqrr.js} +2 -2
- package/dist/compaction-marker-candidates-worker.js +2 -2
- package/dist/{conflict-warning-hook-ae8nmv7c.js → conflict-warning-hook-myk5hbt9.js} +5 -5
- package/dist/{context-yg023c5r.js → context-ffr7e0g7.js} +46 -34
- package/dist/{embedding-backfill-aj488s8x.js → embedding-backfill-re16xncd.js} +6 -6
- package/dist/features/magic-context/compaction-marker.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts +6 -3
- package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/map-memories-prompt.d.ts +7 -1
- package/dist/features/magic-context/dreamer/map-memories-prompt.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/map-memories.d.ts +2 -2
- package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/primer-seed.d.ts +2 -0
- package/dist/features/magic-context/dreamer/primer-seed.d.ts.map +1 -1
- package/dist/features/magic-context/dreamer/refresh-primers.d.ts +2 -2
- package/dist/features/magic-context/storage-clone.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-persisted.d.ts +10 -3
- package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
- package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
- package/dist/features/magic-context/storage-replay-document.d.ts +4 -0
- package/dist/features/magic-context/storage-replay-document.d.ts.map +1 -1
- package/dist/hooks/magic-context/apply-operations.d.ts +7 -0
- package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
- package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -1
- package/dist/hooks/magic-context/history-boundary-repair.d.ts.map +1 -1
- package/dist/hooks/magic-context/lkg-persist.d.ts.map +1 -1
- package/dist/hooks/magic-context/note-nudger.d.ts +5 -3
- package/dist/hooks/magic-context/note-nudger.d.ts.map +1 -1
- package/dist/hooks/magic-context/postprocess-read-cache.d.ts.map +1 -1
- package/dist/hooks/magic-context/read-session-chunk.d.ts +7 -0
- package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
- package/dist/hooks/magic-context/replay-committed-drops.d.ts +9 -0
- package/dist/hooks/magic-context/replay-committed-drops.d.ts.map +1 -0
- package/dist/hooks/magic-context/rust-lkg-freeze-registry.d.ts +2 -2
- package/dist/hooks/magic-context/rust-lkg-freeze-registry.d.ts.map +1 -1
- package/dist/hooks/magic-context/rust-mode-transform.d.ts +3 -0
- package/dist/hooks/magic-context/rust-mode-transform.d.ts.map +1 -1
- package/dist/hooks/magic-context/rust-served-raw.d.ts +29 -0
- package/dist/hooks/magic-context/rust-served-raw.d.ts.map +1 -0
- package/dist/hooks/magic-context/strip-content.d.ts +23 -24
- package/dist/hooks/magic-context/strip-content.d.ts.map +1 -1
- package/dist/hooks/magic-context/tag-messages.d.ts +2 -0
- package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
- package/dist/hooks/magic-context/tool-drop-target.d.ts +2 -0
- package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
- package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
- package/dist/{index-m4p77myp.js → index-0gyq3djm.js} +1 -1
- package/dist/{index-jpm52v9x.js → index-37q80veb.js} +1 -1
- package/dist/{index-znzgze2v.js → index-4btknbqh.js} +9 -8
- package/dist/{index-v4bqjy56.js → index-5tbvdff4.js} +59 -28
- package/dist/{index-7jzrrxap.js → index-9yyqq3mm.js} +1 -1
- package/dist/{index-qvr78ej6.js → index-a8acx4gc.js} +2 -2
- package/dist/{index-gcdb3rqw.js → index-ax2jhztn.js} +1 -1
- package/dist/{index-2mqps3c1.js → index-ebnngykq.js} +145 -94
- package/dist/{index-41gqa557.js → index-g8qbdb03.js} +1 -1
- package/dist/{index-fst3t0d9.js → index-j58gqrn2.js} +65 -65
- package/dist/{index-xfbfrngb.js → index-j5hce1ab.js} +2 -2
- package/dist/{index-kb9nn0a0.js → index-j8epsc0g.js} +35 -14
- package/dist/{index-7zg9dvx0.js → index-n5a170gs.js} +227 -38
- package/dist/{index-fjtgekd4.js → index-n7kwfw2r.js} +4 -4
- package/dist/{index-dd18gej8.js → index-rwmpkss5.js} +3 -3
- package/dist/{index-7w18gg78.js → index-rzmjkdd6.js} +1 -1
- package/dist/{index-c0b01zrc.js → index-sf94at64.js} +3 -3
- package/dist/{index-yxawqmdd.js → index-sh91t19a.js} +1 -1
- package/dist/{index-x3y1np1h.js → index-tagss15p.js} +857 -125
- package/dist/{index-yqps2zsv.js → index-tmtty2x5.js} +1 -1
- package/dist/{index-bhk710rw.js → index-vt4sf4ep.js} +1 -1
- package/dist/{index-6m7rdv7y.js → index-w4mw92w3.js} +1 -1
- package/dist/{index-7ndnvw7a.js → index-w6bd03dc.js} +1 -1
- package/dist/{index-p2hs3rps.js → index-w6vr754t.js} +4 -4
- package/dist/{index-3wckxwfp.js → index-wq16ahsn.js} +5 -5
- package/dist/index.js +36 -36
- package/dist/{message-index-bounded-pv6ct15d.js → message-index-bounded-04rycpx4.js} +9 -9
- package/dist/{message-index-jqa7qd0s.js → message-index-rqtse28y.js} +9 -9
- package/dist/{message-time-backfill-8x06r9kx.js → message-time-backfill-a5ytnp53.js} +1 -1
- package/dist/migration-worker.js +6 -6
- package/dist/plugin/messages-transform.d.ts.map +1 -1
- package/dist/{project-embedding-registry-fcmszatg.js → project-embedding-registry-k0sd9k7v.js} +5 -5
- package/dist/raw-ordinal-warmup-worker.js +17 -15
- package/dist/{read-session-chunk-cwgjwjd0.js → read-session-chunk-h1btx938.js} +7 -5
- package/dist/{read-session-raw-z38cn0as.js → read-session-raw-vdf4wh78.js} +2 -2
- package/dist/{recomp-orchestrator-xw9wt5bm.js → recomp-orchestrator-trcgmm23.js} +20 -20
- package/dist/{search-v1t47s2q.js → search-3rbdx6hw.js} +16 -16
- package/dist/{send-session-notification-yp9m5g4p.js → send-session-notification-2tp44tfa.js} +4 -4
- package/dist/shared/processed-image-eligibility.d.ts +22 -0
- package/dist/shared/processed-image-eligibility.d.ts.map +1 -0
- package/dist/shared/recovery-reasoning-prefix.d.ts +9 -0
- package/dist/shared/recovery-reasoning-prefix.d.ts.map +1 -0
- package/dist/shared/sqlite.d.ts +1 -1
- package/dist/shared/sqlite.d.ts.map +1 -1
- package/dist/shared/tag-transcript.d.ts +9 -0
- package/dist/shared/tag-transcript.d.ts.map +1 -1
- package/dist/{sqlite-mhjkerzq.js → sqlite-j3tvg8r0.js} +1 -1
- package/dist/{storage-memory-07fx57k6.js → storage-memory-8168bgef.js} +2 -2
- package/dist/{storage-tags-0ssbmzg9.js → storage-tags-61z5j2f9.js} +2 -2
- package/dist/tools/ctx-expand/search-archive.d.ts +4 -0
- package/dist/tools/ctx-expand/search-archive.d.ts.map +1 -0
- package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
- package/dist/{transform-postprocess-phase-ttra554y.js → transform-postprocess-phase-7qts7h54.js} +20 -20
- package/dist/v2/auto-search-worker.js +10 -7
- package/dist/v2/{compaction-marker-candidates-1s21e2fz.js → compaction-marker-candidates-6nypjkpf.js} +2 -2
- package/dist/v2/compaction-marker-candidates-worker.js +2 -2
- package/dist/v2/{context-6en6a8ar.js → context-xq4rtywr.js} +1019 -233
- package/dist/v2/{embedding-backfill-9hbkfvnz.js → embedding-backfill-xd9ygzgd.js} +6 -6
- package/dist/v2/hooks/payload.d.ts.map +1 -1
- package/dist/v2/{message-index-h8ssgq3q.js → message-index-8e5z2xx8.js} +9 -9
- package/dist/v2/{message-index-bounded-c0810p5w.js → message-index-bounded-5vh1h2g7.js} +9 -9
- package/dist/v2/{message-time-backfill-cje68egj.js → message-time-backfill-2z365239.js} +1 -1
- package/dist/v2/migration-worker.js +6 -6
- package/dist/v2/{project-embedding-registry-42th7k1z.js → project-embedding-registry-b77awytr.js} +5 -5
- package/dist/v2/raw-ordinal-warmup-worker.js +17 -15
- package/dist/v2/{read-session-chunk-n86v9xfg.js → read-session-chunk-4sat83cx.js} +7 -5
- package/dist/v2/{read-session-raw-3b3ehga4.js → read-session-raw-a3hw9jsp.js} +2 -2
- package/dist/v2/{recomp-orchestrator-krvsbnds.js → recomp-orchestrator-n11zv1f1.js} +19 -19
- package/dist/v2/{search-048v8y02.js → search-mvgqtkkz.js} +16 -16
- package/dist/v2/{send-session-notification-a4h2azxa.js → send-session-notification-ppgc8qdz.js} +4 -4
- package/dist/v2/{server-cvgn49tr.js → server-1rfgbjfn.js} +1 -1
- package/dist/v2/{server-3bc6k4k4.js → server-7srtwsa4.js} +5 -5
- package/dist/v2/{server-7jzrrxap.js → server-9yyqq3mm.js} +1 -1
- package/dist/v2/{server-2htmbqbv.js → server-brhj8qtd.js} +1 -1
- package/dist/v2/{server-3dqjhchy.js → server-dd0nja67.js} +1 -1
- package/dist/v2/{server-8wcf79fe.js → server-fpqe39as.js} +1 -1
- package/dist/v2/{server-cjz51jm2.js → server-fw31krgq.js} +3 -3
- package/dist/v2/{server-4n2tknpc.js → server-gtv9wbhq.js} +227 -38
- package/dist/v2/{server-8pqnnmf9.js → server-hcvcxzx7.js} +2 -2
- package/dist/v2/{server-kb9nn0a0.js → server-j8epsc0g.js} +35 -14
- package/dist/v2/{server-rygvffsf.js → server-jdwd03ep.js} +4 -4
- package/dist/v2/{server-q6j5dasr.js → server-kdrezdy0.js} +1 -1
- package/dist/v2/{server-e2v4m8xe.js → server-mv1w7t6z.js} +61 -30
- package/dist/v2/{server-hetyb88z.js → server-nfan6zb6.js} +65 -65
- package/dist/v2/{server-4enr7s6x.js → server-qcw43339.js} +1 -1
- package/dist/v2/{server-5zrpr764.js → server-sy4b1sra.js} +1 -1
- package/dist/v2/{server-9a6v0wth.js → server-v4fwha43.js} +9 -8
- package/dist/v2/{server-pcygfdbs.js → server-w3zeywp1.js} +1 -1
- package/dist/v2/{server-czb2rkpk.js → server-wkdgjjch.js} +1 -1
- package/dist/v2/{server-9290a1mb.js → server-x08d1xf3.js} +1 -1
- package/dist/v2/server.js +4 -4
- package/dist/v2/{sqlite-mhjkerzq.js → sqlite-j3tvg8r0.js} +1 -1
- package/dist/v2/{storage-memory-07fx57k6.js → storage-memory-8168bgef.js} +2 -2
- package/dist/v2/{storage-tags-3a4cavqb.js → storage-tags-j2fzq3sw.js} +2 -2
- package/dist/v2/{wrapup-orchestrator-r2v7kgy3.js → wrapup-orchestrator-s92ebfzv.js} +19 -19
- package/dist/{wrapup-orchestrator-z7agncp8.js → wrapup-orchestrator-df61jmz9.js} +21 -21
- package/package.json +3 -3
- package/src/shared/processed-image-eligibility.test.ts +68 -0
- package/src/shared/processed-image-eligibility.ts +41 -0
- package/src/shared/processed-image-position-review.json +20 -0
- package/src/shared/processed-image-position-review.test.ts +19 -0
- package/src/shared/recovery-reasoning-prefix.test.ts +34 -0
- package/src/shared/recovery-reasoning-prefix.ts +35 -0
- package/src/shared/sqlite-acquisition-routing.test.ts +4 -3
- package/src/shared/sqlite-foreground-wait.test.ts +140 -0
- package/src/shared/sqlite-pass-scope.test.ts +4 -4
- package/src/shared/sqlite-writer-diagnostics.test.ts +31 -0
- package/src/shared/sqlite.ts +64 -23
- package/src/shared/tag-transcript.ts +118 -0
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./server-pavzsdc6.js";
|
|
4
4
|
import {
|
|
5
5
|
prepareCachedStatement2
|
|
6
|
-
} from "./server-
|
|
6
|
+
} from "./server-j8epsc0g.js";
|
|
7
7
|
import {
|
|
8
8
|
UNKNOWN_FIT_RATIO,
|
|
9
9
|
resolveDecisionCalibration,
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
TAG_SELECT_COLUMNS2,
|
|
24
24
|
getCandidateToolOwners2,
|
|
25
25
|
pickNearestPriorOwner2
|
|
26
|
-
} from "./server-
|
|
26
|
+
} from "./server-w3zeywp1.js";
|
|
27
27
|
import {
|
|
28
28
|
OMO_INTERNAL_INITIATOR_MARKER,
|
|
29
29
|
isSystemDirective,
|
|
@@ -68,13 +68,13 @@ import {
|
|
|
68
68
|
readRawSeedTailFromDb2,
|
|
69
69
|
readRawSessionBoundaryEndpointsFromDb2,
|
|
70
70
|
prewarmRawSessionOrdinalsForDb
|
|
71
|
-
} from "./server-
|
|
71
|
+
} from "./server-dd0nja67.js";
|
|
72
72
|
import {
|
|
73
73
|
openCodeDbExists,
|
|
74
74
|
withReadOnlySessionDb,
|
|
75
75
|
getRawSessionMessageCountFromDb,
|
|
76
76
|
getMessageTimesFromOpenCodeDb
|
|
77
|
-
} from "./server-
|
|
77
|
+
} from "./server-wkdgjjch.js";
|
|
78
78
|
import {
|
|
79
79
|
getToolDefinitionMeasurementSignature,
|
|
80
80
|
getLargestMeasuredToolDefinitionTokens,
|
|
@@ -2101,8 +2101,25 @@ function getProtectionWindowForSession(db, sessionId, floor) {
|
|
|
2101
2101
|
}
|
|
2102
2102
|
|
|
2103
2103
|
// src/features/magic-context/storage-replay-document.ts
|
|
2104
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2104
2105
|
var CAS_RETRY_LIMIT = 5;
|
|
2105
2106
|
var MISSING_REPLAY_DOCUMENT_COLUMN = Symbol("missing replay document column");
|
|
2107
|
+
var replaySnapshots = new AsyncLocalStorage;
|
|
2108
|
+
async function withReplayEnvelopeSnapshot(db, sessionId, work) {
|
|
2109
|
+
const snapshot = { db, sessionId, active: true, loaded: false };
|
|
2110
|
+
return replaySnapshots.run(snapshot, async () => {
|
|
2111
|
+
try {
|
|
2112
|
+
return await work();
|
|
2113
|
+
} finally {
|
|
2114
|
+
snapshot.active = false;
|
|
2115
|
+
}
|
|
2116
|
+
});
|
|
2117
|
+
}
|
|
2118
|
+
function invalidateReplayEnvelopeSnapshot(db, sessionId) {
|
|
2119
|
+
const snapshot = replaySnapshots.getStore();
|
|
2120
|
+
if (snapshot?.db === db && snapshot.sessionId === sessionId)
|
|
2121
|
+
snapshot.loaded = false;
|
|
2122
|
+
}
|
|
2106
2123
|
function isRustMarkerAdmissionFenced(db, sessionId) {
|
|
2107
2124
|
const row = db.prepare("SELECT COALESCE(json_extract(NULLIF(trailing_blank_decisions, ''), '$.rustMarkerAdmissionFence'), 0) AS fenced FROM session_meta WHERE session_id=?").get(sessionId);
|
|
2108
2125
|
return row?.fenced === 1;
|
|
@@ -2225,16 +2242,30 @@ function readDecisionRows(db, sessionId, messageIds) {
|
|
|
2225
2242
|
return db.prepare(`SELECT message_id, decision FROM session_replay_decisions
|
|
2226
2243
|
WHERE session_id = ? AND message_id IN (SELECT value FROM json_each(?))`).all(sessionId, JSON.stringify(messageIds));
|
|
2227
2244
|
}
|
|
2228
|
-
function readRawReplayDocument(db, sessionId) {
|
|
2245
|
+
function readRawReplayDocument(db, sessionId, fresh = false) {
|
|
2246
|
+
const snapshot = replaySnapshots.getStore();
|
|
2247
|
+
const reusable = !fresh && snapshot?.active && snapshot.db === db && snapshot.sessionId === sessionId;
|
|
2248
|
+
if (reusable && snapshot.loaded)
|
|
2249
|
+
return snapshot.raw;
|
|
2229
2250
|
try {
|
|
2230
2251
|
const row = db.prepare("SELECT trailing_blank_decisions FROM session_meta WHERE session_id = ?").get(sessionId);
|
|
2231
2252
|
const raw = row?.trailing_blank_decisions;
|
|
2232
|
-
if (raw === null || raw === undefined || typeof raw === "string")
|
|
2253
|
+
if (raw === null || raw === undefined || typeof raw === "string") {
|
|
2254
|
+
if (reusable) {
|
|
2255
|
+
snapshot.raw = raw;
|
|
2256
|
+
snapshot.loaded = true;
|
|
2257
|
+
}
|
|
2233
2258
|
return raw;
|
|
2259
|
+
}
|
|
2234
2260
|
throw invalidReplayDocument("stored value is not text");
|
|
2235
2261
|
} catch (error) {
|
|
2236
|
-
if (isMissingReplayDocumentColumn(error))
|
|
2262
|
+
if (isMissingReplayDocumentColumn(error)) {
|
|
2263
|
+
if (reusable) {
|
|
2264
|
+
snapshot.raw = MISSING_REPLAY_DOCUMENT_COLUMN;
|
|
2265
|
+
snapshot.loaded = true;
|
|
2266
|
+
}
|
|
2237
2267
|
return MISSING_REPLAY_DOCUMENT_COLUMN;
|
|
2268
|
+
}
|
|
2238
2269
|
throw error;
|
|
2239
2270
|
}
|
|
2240
2271
|
}
|
|
@@ -2333,9 +2364,10 @@ function readAllTrailingBlankDecisions(db, sessionId, rawColumn) {
|
|
|
2333
2364
|
return decisions;
|
|
2334
2365
|
}
|
|
2335
2366
|
function updateReplayDocument(db, sessionId, mutate) {
|
|
2367
|
+
invalidateReplayEnvelopeSnapshot(db, sessionId);
|
|
2336
2368
|
let initial;
|
|
2337
2369
|
try {
|
|
2338
|
-
initial = readRawReplayDocument(db, sessionId);
|
|
2370
|
+
initial = readRawReplayDocument(db, sessionId, true);
|
|
2339
2371
|
} catch (error) {
|
|
2340
2372
|
if (error instanceof ReplayDocumentError)
|
|
2341
2373
|
return false;
|
|
@@ -2347,7 +2379,7 @@ function updateReplayDocument(db, sessionId, mutate) {
|
|
|
2347
2379
|
for (let attempt = 0;attempt < CAS_RETRY_LIMIT; attempt += 1) {
|
|
2348
2380
|
let raw;
|
|
2349
2381
|
try {
|
|
2350
|
-
raw = readRawReplayDocument(db, sessionId);
|
|
2382
|
+
raw = readRawReplayDocument(db, sessionId, true);
|
|
2351
2383
|
} catch (error) {
|
|
2352
2384
|
if (error instanceof ReplayDocumentError)
|
|
2353
2385
|
return false;
|
|
@@ -2402,7 +2434,7 @@ function updateTrailingBlankDecisions(db, sessionId, messageIds, decide) {
|
|
|
2402
2434
|
}
|
|
2403
2435
|
let initial;
|
|
2404
2436
|
try {
|
|
2405
|
-
initial = readRawReplayDocument(db, sessionId);
|
|
2437
|
+
initial = readRawReplayDocument(db, sessionId, true);
|
|
2406
2438
|
} catch (error) {
|
|
2407
2439
|
if (error instanceof ReplayDocumentError)
|
|
2408
2440
|
return false;
|
|
@@ -2414,7 +2446,7 @@ function updateTrailingBlankDecisions(db, sessionId, messageIds, decide) {
|
|
|
2414
2446
|
for (let attempt = 0;attempt < CAS_RETRY_LIMIT; attempt += 1) {
|
|
2415
2447
|
let columnDecisions;
|
|
2416
2448
|
try {
|
|
2417
|
-
const raw = readRawReplayDocument(db, sessionId);
|
|
2449
|
+
const raw = readRawReplayDocument(db, sessionId, true);
|
|
2418
2450
|
if (raw === MISSING_REPLAY_DOCUMENT_COLUMN)
|
|
2419
2451
|
return false;
|
|
2420
2452
|
columnDecisions = parseReplayDocument(raw).trailingBlank;
|
|
@@ -2469,6 +2501,7 @@ function updateTrailingBlankDecisions(db, sessionId, messageIds, decide) {
|
|
|
2469
2501
|
return false;
|
|
2470
2502
|
}
|
|
2471
2503
|
function writeReplayDocument(db, sessionId, doc) {
|
|
2504
|
+
invalidateReplayEnvelopeSnapshot(db, sessionId);
|
|
2472
2505
|
if (!hasReplayDecisionTable(db)) {
|
|
2473
2506
|
db.prepare("UPDATE session_meta SET trailing_blank_decisions = ? WHERE session_id = ?").run(serializeReplayDocument(doc), sessionId);
|
|
2474
2507
|
return;
|
|
@@ -3814,10 +3847,32 @@ function addStaleReduceStrippedIds(db, sessionId, ids) {
|
|
|
3814
3847
|
return false;
|
|
3815
3848
|
}
|
|
3816
3849
|
function getProcessedImageStrippedIds(db, sessionId) {
|
|
3850
|
+
return new Set(getProcessedImageMarkers(db, sessionId).keys());
|
|
3851
|
+
}
|
|
3852
|
+
function parseProcessedImageMarkers(raw) {
|
|
3853
|
+
if (!raw)
|
|
3854
|
+
return new Map;
|
|
3855
|
+
try {
|
|
3856
|
+
const parsed = JSON.parse(raw);
|
|
3857
|
+
const ids = Array.isArray(parsed) ? parsed : parsed?.ids;
|
|
3858
|
+
const textIds = new Set(Array.isArray(parsed?.textMarkerIds) ? parsed.textMarkerIds : []);
|
|
3859
|
+
return new Map((Array.isArray(ids) ? ids : []).filter((id) => typeof id === "string").map((id) => [id, textIds.has(id) ? "[image stripped]" : ""]));
|
|
3860
|
+
} catch {
|
|
3861
|
+
return new Map;
|
|
3862
|
+
}
|
|
3863
|
+
}
|
|
3864
|
+
function serializeProcessedImageMarkers(markers) {
|
|
3865
|
+
const ids = [...markers.keys()];
|
|
3866
|
+
if (ids.length === 0)
|
|
3867
|
+
return "";
|
|
3868
|
+
const textMarkerIds = ids.filter((id) => markers.get(id) === "[image stripped]");
|
|
3869
|
+
return JSON.stringify(textMarkerIds.length > 0 ? { ids, textMarkerIds } : ids);
|
|
3870
|
+
}
|
|
3871
|
+
function getProcessedImageMarkers(db, sessionId) {
|
|
3817
3872
|
const row = db.prepare("SELECT processed_image_stripped_ids FROM session_meta WHERE session_id = ?").get(sessionId);
|
|
3818
|
-
return
|
|
3873
|
+
return parseProcessedImageMarkers(row?.processed_image_stripped_ids);
|
|
3819
3874
|
}
|
|
3820
|
-
function addProcessedImageStrippedIds(db, sessionId, ids) {
|
|
3875
|
+
function addProcessedImageStrippedIds(db, sessionId, ids, marker = "") {
|
|
3821
3876
|
const add = [...ids];
|
|
3822
3877
|
if (add.length === 0)
|
|
3823
3878
|
return true;
|
|
@@ -3825,17 +3880,17 @@ function addProcessedImageStrippedIds(db, sessionId, ids) {
|
|
|
3825
3880
|
for (let attempt = 0;attempt < CAS_RETRY_LIMIT2; attempt += 1) {
|
|
3826
3881
|
const row = db.prepare("SELECT processed_image_stripped_ids FROM session_meta WHERE session_id = ?").get(sessionId);
|
|
3827
3882
|
const rawStored = row ? row.processed_image_stripped_ids ?? null : null;
|
|
3828
|
-
const current =
|
|
3883
|
+
const current = parseProcessedImageMarkers(rawStored);
|
|
3829
3884
|
let changed = false;
|
|
3830
3885
|
for (const id of add) {
|
|
3831
3886
|
if (!current.has(id)) {
|
|
3832
|
-
current.
|
|
3887
|
+
current.set(id, typeof marker === "string" ? marker : marker.get(id) ?? "");
|
|
3833
3888
|
changed = true;
|
|
3834
3889
|
}
|
|
3835
3890
|
}
|
|
3836
3891
|
if (!changed)
|
|
3837
3892
|
return true;
|
|
3838
|
-
const nextBlob =
|
|
3893
|
+
const nextBlob = serializeProcessedImageMarkers(current);
|
|
3839
3894
|
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);
|
|
3840
3895
|
if (result.changes > 0)
|
|
3841
3896
|
return true;
|
|
@@ -3889,7 +3944,8 @@ function loadPostprocessReplaySnapshot(db, sessionId) {
|
|
|
3889
3944
|
const thinkingBindingRecoveryTarget = row?.thinking_binding_recovery_target;
|
|
3890
3945
|
return {
|
|
3891
3946
|
staleReduceStrippedIds: new Set(parseStrippedBlob(row?.stale_reduce_stripped_ids)),
|
|
3892
|
-
processedImageStrippedIds: new Set(
|
|
3947
|
+
processedImageStrippedIds: new Set(parseProcessedImageMarkers(row?.processed_image_stripped_ids).keys()),
|
|
3948
|
+
processedImageMarkers: parseProcessedImageMarkers(row?.processed_image_stripped_ids),
|
|
3893
3949
|
strippedPlaceholderIds: new Set(placeholders.ids),
|
|
3894
3950
|
hiddenSeamPlaceholderIds: new Set(placeholders.hiddenSeamIds),
|
|
3895
3951
|
noteNudgeAnchors: parseJsonArray(row?.note_nudge_anchors, isValidNoteNudgeAnchor),
|
|
@@ -3933,15 +3989,22 @@ function getPendingPiCompactionMarkerState(db, sessionId) {
|
|
|
3933
3989
|
return parsed;
|
|
3934
3990
|
}
|
|
3935
3991
|
} catch {}
|
|
3936
|
-
db.prepare("UPDATE session_meta SET pending_pi_compaction_marker_state = NULL WHERE session_id = ? AND pending_pi_compaction_marker_state = ?").run(sessionId, raw);
|
|
3992
|
+
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);
|
|
3993
|
+
if (cleared.changes > 0)
|
|
3994
|
+
sessionLog2(sessionId, "Pi compaction-marker clear: reason=malformed-state");
|
|
3937
3995
|
return null;
|
|
3938
3996
|
}
|
|
3939
|
-
function clearPendingPiCompactionMarkerStateIf(db, sessionId, expected) {
|
|
3997
|
+
function clearPendingPiCompactionMarkerStateIf(db, sessionId, expected, reason = "explicit-clear") {
|
|
3940
3998
|
const expectedBlob = stableStringify(expected);
|
|
3941
3999
|
const result = db.prepare(`UPDATE session_meta SET pending_pi_compaction_marker_state = NULL
|
|
3942
4000
|
WHERE session_id = ? AND pending_pi_compaction_marker_state = ?`).run(sessionId, expectedBlob);
|
|
4001
|
+
if (result.changes > 0 && reason !== null)
|
|
4002
|
+
logPiCompactionMarkerClear(sessionId, expected, reason);
|
|
3943
4003
|
return result.changes > 0;
|
|
3944
4004
|
}
|
|
4005
|
+
function logPiCompactionMarkerClear(sessionId, marker, reason) {
|
|
4006
|
+
sessionLog2(sessionId, `Pi compaction-marker clear: reason=${reason} endMessageId=${marker.endMessageId} ordinal=${marker.ordinal} firstKeptEntryId=${marker.firstKeptEntryId ?? "<none>"}`);
|
|
4007
|
+
}
|
|
3945
4008
|
function setSessionWorkMetrics(db, sessionId, newWorkTokens, totalInputTokens) {
|
|
3946
4009
|
ensureSessionMetaRow(db, sessionId);
|
|
3947
4010
|
db.prepare(`UPDATE session_meta
|
|
@@ -4329,6 +4392,27 @@ function hasAnthropicReasoning(messages) {
|
|
|
4329
4392
|
});
|
|
4330
4393
|
}
|
|
4331
4394
|
|
|
4395
|
+
// src/shared/processed-image-eligibility.ts
|
|
4396
|
+
function createProcessedImageEligibility(messages, messageTagNumbers, options) {
|
|
4397
|
+
const ageTags = new Map;
|
|
4398
|
+
let nextTag;
|
|
4399
|
+
for (let index = messages.length - 1;index >= 0; index--) {
|
|
4400
|
+
const message = messages[index];
|
|
4401
|
+
const ownTag = messageTagNumbers.get(message);
|
|
4402
|
+
if (ownTag !== undefined && Number.isFinite(ownTag) && ownTag > 0)
|
|
4403
|
+
nextTag = ownTag;
|
|
4404
|
+
if (nextTag !== undefined)
|
|
4405
|
+
ageTags.set(message, nextTag);
|
|
4406
|
+
}
|
|
4407
|
+
return {
|
|
4408
|
+
ageTags,
|
|
4409
|
+
mayStrip: (message) => {
|
|
4410
|
+
const age = ageTags.get(message);
|
|
4411
|
+
return options.watermark > 0 && age !== undefined && age <= options.watermark && ((options.contextPercentage ?? 0) >= 95 || options.protectedCutoff == null || age < options.protectedCutoff);
|
|
4412
|
+
}
|
|
4413
|
+
};
|
|
4414
|
+
}
|
|
4415
|
+
|
|
4332
4416
|
// src/hooks/magic-context/strip-content.ts
|
|
4333
4417
|
var MARKER_ONLY_PATTERN = /^(?:(?:§\d+§|\[dropped(?: §\d+§)?\]|\[cleared\])\s*)+$/;
|
|
4334
4418
|
function isMarkerOnlyText(text) {
|
|
@@ -4878,59 +4962,142 @@ function stripReasoningFromMergedAssistants(messages, providerID, options) {
|
|
|
4878
4962
|
}
|
|
4879
4963
|
return stripped;
|
|
4880
4964
|
}
|
|
4965
|
+
var emptyImageParts = new WeakMap;
|
|
4966
|
+
function getEmptyImageParts(messages) {
|
|
4967
|
+
return emptyImageParts.get(messages) ?? new Map;
|
|
4968
|
+
}
|
|
4969
|
+
function imageOmissionBreaksStructure(messages, index, omitted) {
|
|
4970
|
+
let before = index - 1;
|
|
4971
|
+
let after = index + 1;
|
|
4972
|
+
while (omitted.has(before))
|
|
4973
|
+
before--;
|
|
4974
|
+
while (omitted.has(after))
|
|
4975
|
+
after++;
|
|
4976
|
+
const previous = messages[before];
|
|
4977
|
+
const next = messages[after];
|
|
4978
|
+
return previous !== undefined && next !== undefined && previous.info.role === next.info.role;
|
|
4979
|
+
}
|
|
4881
4980
|
function stripProcessedImages(messages, frozenIds, options) {
|
|
4882
|
-
const
|
|
4981
|
+
const omissions = new Map;
|
|
4982
|
+
emptyImageParts.set(messages, omissions);
|
|
4983
|
+
const { detect, messageTagNumbers } = options;
|
|
4984
|
+
const eligibility = createProcessedImageEligibility(messages, messageTagNumbers, options);
|
|
4883
4985
|
let stripped = 0;
|
|
4884
4986
|
const newlyStrippedIds = [];
|
|
4885
4987
|
const planned = [];
|
|
4988
|
+
const newMarkers = new Map;
|
|
4886
4989
|
let hasAssistantResponse = false;
|
|
4887
4990
|
for (let i = messages.length - 1;i >= 0; i--) {
|
|
4888
4991
|
const msg = messages[i];
|
|
4992
|
+
const answered = hasAssistantResponse;
|
|
4889
4993
|
if (msg.info.role === "assistant") {
|
|
4890
4994
|
hasAssistantResponse = true;
|
|
4891
|
-
continue;
|
|
4892
4995
|
}
|
|
4893
|
-
if (msg.info.role !== "user") {
|
|
4996
|
+
if (msg.info.role !== "user" && msg.info.role !== "assistant") {
|
|
4894
4997
|
continue;
|
|
4895
4998
|
}
|
|
4896
4999
|
const id = typeof msg.info.id === "string" ? msg.info.id : undefined;
|
|
4897
5000
|
const inFrozen = id !== undefined && frozenIds.has(id);
|
|
4898
|
-
const
|
|
4899
|
-
const isNewDetection = !inFrozen && detect && hasAssistantResponse && id !== undefined && maxTag <= watermark;
|
|
5001
|
+
const isNewDetection = !inFrozen && detect && answered && id !== undefined && eligibility.mayStrip(msg) && !options.protectedMessageIds?.has(id);
|
|
4900
5002
|
if (!inFrozen && !isNewDetection) {
|
|
4901
5003
|
continue;
|
|
4902
5004
|
}
|
|
4903
5005
|
let touchedThisMsg = false;
|
|
4904
5006
|
for (let j = 0;j < msg.parts.length; j++) {
|
|
4905
5007
|
const part = msg.parts[j];
|
|
4906
|
-
|
|
4907
|
-
|
|
4908
|
-
|
|
4909
|
-
|
|
4910
|
-
|
|
4911
|
-
|
|
4912
|
-
|
|
4913
|
-
|
|
5008
|
+
const tool = msg.info.role === "assistant" && isRecord(part) && part.type === "tool" && isRecord(part.state) && part.state.status === "completed";
|
|
5009
|
+
const images = tool && isRecord(part) && isRecord(part.state) && Array.isArray(part.state.attachments) ? part.state.attachments : msg.info.role === "user" ? [part] : [];
|
|
5010
|
+
if (images.some(isProcessedImagePart)) {
|
|
5011
|
+
planned.push({
|
|
5012
|
+
message: msg,
|
|
5013
|
+
partIndex: j,
|
|
5014
|
+
firstApplication: isNewDetection,
|
|
5015
|
+
tool
|
|
5016
|
+
});
|
|
4914
5017
|
touchedThisMsg = true;
|
|
4915
5018
|
}
|
|
4916
5019
|
}
|
|
4917
5020
|
if (touchedThisMsg && isNewDetection && id !== undefined) {
|
|
4918
5021
|
newlyStrippedIds.push(id);
|
|
5022
|
+
newMarkers.set(id, msg.info.role === "assistant" ? "[image stripped]" : options.replacementText ?? "");
|
|
4919
5023
|
}
|
|
4920
5024
|
}
|
|
4921
|
-
const
|
|
5025
|
+
const imageIndices = new Map;
|
|
5026
|
+
for (const { message, partIndex, tool } of planned) {
|
|
5027
|
+
if (tool)
|
|
5028
|
+
continue;
|
|
5029
|
+
const indices = imageIndices.get(message) ?? new Set;
|
|
5030
|
+
indices.add(partIndex);
|
|
5031
|
+
imageIndices.set(message, indices);
|
|
5032
|
+
}
|
|
5033
|
+
const emptiedRows = new Set;
|
|
5034
|
+
const newEmptyRows = [];
|
|
5035
|
+
for (let index = 0;index < messages.length; index++) {
|
|
5036
|
+
const message = messages[index];
|
|
5037
|
+
if (message.parts.every((part) => isRecord(part) && part.type === "text" && part.text === ""))
|
|
5038
|
+
emptiedRows.add(index);
|
|
5039
|
+
const id = message.info.id;
|
|
5040
|
+
const indices = imageIndices.get(message);
|
|
5041
|
+
if (!id || !indices)
|
|
5042
|
+
continue;
|
|
5043
|
+
const marker = options.frozenMarkers?.get(id) ?? newMarkers.get(id) ?? "";
|
|
5044
|
+
if (marker !== "" || !message.parts.every((part, partIndex) => indices.has(partIndex) || isRecord(part) && part.type === "text" && part.text === ""))
|
|
5045
|
+
continue;
|
|
5046
|
+
if (newMarkers.has(id))
|
|
5047
|
+
newEmptyRows.push({ index, id });
|
|
5048
|
+
else
|
|
5049
|
+
emptiedRows.add(index);
|
|
5050
|
+
}
|
|
5051
|
+
for (const { index, id } of newEmptyRows) {
|
|
5052
|
+
if (imageOmissionBreaksStructure(messages, index, emptiedRows))
|
|
5053
|
+
newMarkers.set(id, "[image stripped]");
|
|
5054
|
+
else
|
|
5055
|
+
emptiedRows.add(index);
|
|
5056
|
+
}
|
|
5057
|
+
const persisted = newlyStrippedIds.length === 0 || options.persistNewIds?.(newlyStrippedIds, newMarkers) !== false;
|
|
4922
5058
|
if (!persisted)
|
|
4923
5059
|
newlyStrippedIds.length = 0;
|
|
4924
|
-
for (const { message, partIndex, firstApplication } of planned) {
|
|
5060
|
+
for (const { message, partIndex, firstApplication, tool } of planned) {
|
|
4925
5061
|
if (firstApplication && !persisted)
|
|
4926
5062
|
continue;
|
|
4927
5063
|
if (firstApplication)
|
|
4928
5064
|
options.onFirstApplication?.(message, partIndex);
|
|
4929
|
-
|
|
4930
|
-
|
|
5065
|
+
const marker = tool ? "[image stripped]" : options.frozenMarkers?.get(message.info.id ?? "") ?? (firstApplication ? newMarkers.get(message.info.id ?? "") : "") ?? "";
|
|
5066
|
+
const original = message.parts[partIndex];
|
|
5067
|
+
if (tool && isRecord(original) && isRecord(original.state) && Array.isArray(original.state.attachments)) {
|
|
5068
|
+
const attachments = original.state.attachments;
|
|
5069
|
+
const count = attachments.filter(isProcessedImagePart).length;
|
|
5070
|
+
const output = typeof original.state.output === "string" ? original.state.output : "";
|
|
5071
|
+
message.parts[partIndex] = {
|
|
5072
|
+
...original,
|
|
5073
|
+
state: {
|
|
5074
|
+
...original.state,
|
|
5075
|
+
output: [output, ...Array(count).fill(marker)].filter(Boolean).join(`
|
|
5076
|
+
`),
|
|
5077
|
+
attachments: attachments.filter((part) => !isProcessedImagePart(part))
|
|
5078
|
+
}
|
|
5079
|
+
};
|
|
5080
|
+
stripped += count;
|
|
5081
|
+
} else {
|
|
5082
|
+
message.parts[partIndex] = { ...makeSentinel(original), text: marker };
|
|
5083
|
+
if (marker === "" && message.info.id) {
|
|
5084
|
+
const indices = omissions.get(message.info.id) ?? new Set;
|
|
5085
|
+
indices.add(partIndex);
|
|
5086
|
+
omissions.set(message.info.id, indices);
|
|
5087
|
+
}
|
|
5088
|
+
stripped++;
|
|
5089
|
+
}
|
|
4931
5090
|
}
|
|
4932
5091
|
return { stripped, newlyStrippedIds };
|
|
4933
5092
|
}
|
|
5093
|
+
function isProcessedImagePart(part) {
|
|
5094
|
+
if (isRecord(part) && part.type === "media" && isRecord(part.media)) {
|
|
5095
|
+
const { source, mediaType } = part.media;
|
|
5096
|
+
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;
|
|
5097
|
+
return typeof mediaType === "string" && mediaType.startsWith("image/") && inlineLength > 0 && inlineLength + `data:${mediaType};base64,`.length > 200;
|
|
5098
|
+
}
|
|
5099
|
+
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;
|
|
5100
|
+
}
|
|
4934
5101
|
|
|
4935
5102
|
// src/hooks/magic-context/reasoning-budget.ts
|
|
4936
5103
|
function projectOpencodeReasoningBudgetCutoff(db, sessionId, messages, budget, watermark, proseRatio) {
|
|
@@ -5918,6 +6085,10 @@ function createToolDropTarget(compositeKey, thinkingParts, index, batch, tagId)
|
|
|
5918
6085
|
return false;
|
|
5919
6086
|
return batch.wouldStrandConversationEnd(entry.occurrences);
|
|
5920
6087
|
},
|
|
6088
|
+
prepareDrop: () => {
|
|
6089
|
+
const entry = index.get(compositeKey);
|
|
6090
|
+
return !!entry && entry.occurrences.length > 0 && entry.hasResult;
|
|
6091
|
+
},
|
|
5921
6092
|
canDrop: () => {
|
|
5922
6093
|
const entry = index.get(compositeKey);
|
|
5923
6094
|
return !!entry && entry.occurrences.length > 0 && entry.hasResult && !entry.occurrences.some((occurrence) => toolPartHasUserAnswer(occurrence.part));
|
|
@@ -6180,6 +6351,21 @@ function visitRawSessionMessages2(sessionId, fromOrdinal, toOrdinal, visit, opti
|
|
|
6180
6351
|
after = last ? { timeCreated: last.createdAt ?? 0, id: last.id } : undefined;
|
|
6181
6352
|
}
|
|
6182
6353
|
}
|
|
6354
|
+
async function visitRawSessionMessagesAsync2(sessionId, fromOrdinal, toOrdinal, visit, options = {}) {
|
|
6355
|
+
const from = Math.max(1, Math.floor(fromOrdinal));
|
|
6356
|
+
const to = Math.floor(toOrdinal);
|
|
6357
|
+
if (to < from)
|
|
6358
|
+
return;
|
|
6359
|
+
const provider = sessionProviders.get(sessionId)?.provider;
|
|
6360
|
+
if (!provider?.iterateMessageRangeAsync) {
|
|
6361
|
+
visitRawSessionMessages2(sessionId, from, to, visit, options);
|
|
6362
|
+
return;
|
|
6363
|
+
}
|
|
6364
|
+
for await (const message of provider.iterateMessageRangeAsync(from, to)) {
|
|
6365
|
+
if (!visit(message))
|
|
6366
|
+
return;
|
|
6367
|
+
}
|
|
6368
|
+
}
|
|
6183
6369
|
function readRawSessionMessageRange2(sessionId, fromOrdinal, toOrdinal) {
|
|
6184
6370
|
const from = Math.max(1, Math.floor(fromOrdinal));
|
|
6185
6371
|
const to = Math.floor(toOrdinal);
|
|
@@ -6605,7 +6791,10 @@ function readSessionChunk2(sessionId, tokenBudget, offset = 1, eligibleEndOrdina
|
|
|
6605
6791
|
if (state?.input === undefined && state?.output !== undefined && typeof p.callID === "string") {
|
|
6606
6792
|
const call = calls.get(p.callID);
|
|
6607
6793
|
if (call) {
|
|
6608
|
-
const expansion = expandToolPart({
|
|
6794
|
+
const expansion = expandToolPart({
|
|
6795
|
+
...call,
|
|
6796
|
+
state: { ...call.state, output: state.output }
|
|
6797
|
+
}, options.expandTools);
|
|
6609
6798
|
if (expansion !== null) {
|
|
6610
6799
|
expandedParts.set(call, expansion);
|
|
6611
6800
|
expandedResults.add(part);
|
|
@@ -6888,4 +7077,4 @@ function readRawSessionSeedTail2(sessionId, boundaryId, onQuery) {
|
|
|
6888
7077
|
});
|
|
6889
7078
|
}
|
|
6890
7079
|
|
|
6891
|
-
export { detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, expandToolPart, markHostUnservedRow, retreatPastHostUnservedRows, snapTerminalCompartmentToServedRow, isHostRenderedSystemMessage, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, stripSystemInjection, isTextPart, isToolPartWithOutput, isFilePart, buildFileSourceContent, toolPartHasUserAnswer, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, recordToolParameters, createDroppedInputGuard, assertExecutableToolInput, isEditTool, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, MAX_EXECUTE_THRESHOLD, escalationBands, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, getProtectionWindowForSession, 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, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, loadTransformPassStateSnapshot, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getDeferredClearedCompactionMarkerState, retireDeferredClearedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, demoteTrailingBlankKeepDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, setPendingCompactionMarkerState, replacePendingCompactionMarkerStateIf, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, setSessionWorkMetrics, getObservedEpochFloor, resolveEpochFloorForPass, getReasoningRemovalState, addRemovedReasoningIds, markDropLeavesReasoning, 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, 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 };
|
|
7080
|
+
export { detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, expandToolPart, markHostUnservedRow, retreatPastHostUnservedRows, snapTerminalCompartmentToServedRow, isHostRenderedSystemMessage, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, stripSystemInjection, isTextPart, isToolPartWithOutput, isFilePart, buildFileSourceContent, toolPartHasUserAnswer, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, recordToolParameters, createDroppedInputGuard, assertExecutableToolInput, isEditTool, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, MAX_EXECUTE_THRESHOLD, escalationBands, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, getProtectionWindowForSession, 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, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, loadTransformPassStateSnapshot, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getDeferredClearedCompactionMarkerState, retireDeferredClearedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, demoteTrailingBlankKeepDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, parseProcessedImageMarkers, serializeProcessedImageMarkers, getProcessedImageMarkers, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, setPendingCompactionMarkerState, replacePendingCompactionMarkerStateIf, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, logPiCompactionMarkerClear, setSessionWorkMetrics, getObservedEpochFloor, resolveEpochFloorForPass, getReasoningRemovalState, addRemovedReasoningIds, markDropLeavesReasoning, 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, 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 };
|
|
@@ -16,11 +16,11 @@ import {
|
|
|
16
16
|
} from "./server-2ra6pwf3.js";
|
|
17
17
|
import {
|
|
18
18
|
Database2
|
|
19
|
-
} from "./server-
|
|
19
|
+
} from "./server-j8epsc0g.js";
|
|
20
20
|
import {
|
|
21
21
|
normalizeStoredProjectPath,
|
|
22
22
|
storedPathBelongsToIdentity
|
|
23
|
-
} from "./server-
|
|
23
|
+
} from "./server-kdrezdy0.js";
|
|
24
24
|
import {
|
|
25
25
|
logSlowWriteTransaction
|
|
26
26
|
} from "./server-3t0q2cqx.js";
|
|
@@ -6,12 +6,15 @@ function registerSlowWriteReporter2(reporter) {
|
|
|
6
6
|
reportSlowPrivilegedWrite = reporter;
|
|
7
7
|
}
|
|
8
8
|
var sqliteDiagnosticSink;
|
|
9
|
-
|
|
9
|
+
var sqliteDiagnosticHost = () => "unknown";
|
|
10
|
+
function registerSqliteDiagnosticSink2(sink, host) {
|
|
10
11
|
sqliteDiagnosticSink = sink;
|
|
12
|
+
if (host)
|
|
13
|
+
sqliteDiagnosticHost = host;
|
|
11
14
|
}
|
|
12
15
|
function reportSqliteDiagnostic(message) {
|
|
13
16
|
try {
|
|
14
|
-
sqliteDiagnosticSink?.(`[magic-context] ${message}`);
|
|
17
|
+
sqliteDiagnosticSink?.(`[magic-context] ${message} pid=${process.pid} host=${sqliteDiagnosticHost()}`);
|
|
15
18
|
} catch {}
|
|
16
19
|
}
|
|
17
20
|
function detectSqliteRuntime2() {
|
|
@@ -170,10 +173,18 @@ function installTransactionRouting(db, readonly) {
|
|
|
170
173
|
assertTransformWrite2();
|
|
171
174
|
if (/^\s*BEGIN\s+(?:IMMEDIATE|EXCLUSIVE)(?:\s+TRANSACTION)?\s*;?\s*$/i.test(sql)) {
|
|
172
175
|
openWriterTransactions.delete(db);
|
|
173
|
-
if (transformPassScope.getStore()?.active || backgroundWriterScope.getStore())
|
|
176
|
+
if (transformPassScope.getStore()?.active || backgroundWriterScope.getStore()) {
|
|
174
177
|
acquireShort(db, () => nativeExec(sql), sql.trim());
|
|
175
|
-
else
|
|
178
|
+
} else {
|
|
176
179
|
nativeExec(sql);
|
|
180
|
+
openWriterTransactions.set(db, {
|
|
181
|
+
site: sql.trim(),
|
|
182
|
+
lane: "background",
|
|
183
|
+
acquireMs: 0,
|
|
184
|
+
attempts: 1,
|
|
185
|
+
acquiredAt: performance.now()
|
|
186
|
+
});
|
|
187
|
+
}
|
|
177
188
|
return db;
|
|
178
189
|
}
|
|
179
190
|
if (WRITER_TRANSACTION_END.test(sql) && openWriterTransactions.has(db))
|
|
@@ -556,9 +567,9 @@ class SqliteAcquisitionBusyError2 extends Error {
|
|
|
556
567
|
}
|
|
557
568
|
}
|
|
558
569
|
var SHORT_BUSY_TIMEOUT_MS = 25;
|
|
559
|
-
var FOREGROUND_IN_PASS_BUSY_TIMEOUT_MS =
|
|
570
|
+
var FOREGROUND_IN_PASS_BUSY_TIMEOUT_MS = 2000;
|
|
560
571
|
var FOREGROUND_ACQUISITION_BUDGET_MS = 16500;
|
|
561
|
-
var SLOW_WRITER_LOG_MS =
|
|
572
|
+
var SLOW_WRITER_LOG_MS = 100;
|
|
562
573
|
var WRITER_TRANSACTION_END = /^\s*(?:COMMIT|END|ROLLBACK)(?:\s+TRANSACTION)?\s*;?\s*$/i;
|
|
563
574
|
var writerAcquisitionScope = new AsyncLocalStorage;
|
|
564
575
|
var openWriterTransactions = new WeakMap;
|
|
@@ -569,22 +580,30 @@ function foregroundWaitLease() {
|
|
|
569
580
|
function withAutocommitTimeout(db, operation) {
|
|
570
581
|
assertTransformWrite2();
|
|
571
582
|
const lease = foregroundWaitLease();
|
|
572
|
-
if (isInTransaction(db)
|
|
583
|
+
if (isInTransaction(db))
|
|
573
584
|
return operation();
|
|
574
|
-
const
|
|
575
|
-
|
|
585
|
+
const scoped = lease || backgroundWriterScope.getStore();
|
|
586
|
+
const previous = scoped ? pragmaNumber(db, "busy_timeout") : null;
|
|
587
|
+
if (scoped)
|
|
588
|
+
db.exec(`PRAGMA busy_timeout=${lease ? Math.floor(Math.min(lease.remainingWaitMs, lease.guard?.remainingMs() ?? Infinity)) : SHORT_BUSY_TIMEOUT_MS}`);
|
|
576
589
|
const started = performance.now();
|
|
590
|
+
let completed = false;
|
|
577
591
|
try {
|
|
578
|
-
|
|
592
|
+
const result = operation();
|
|
593
|
+
completed = true;
|
|
594
|
+
return result;
|
|
579
595
|
} catch (error) {
|
|
580
596
|
if (lease && isTransientSqliteError2(error))
|
|
581
597
|
throw new SqliteAcquisitionBusyError2(error, "autocommit");
|
|
582
598
|
throw error;
|
|
583
599
|
} finally {
|
|
600
|
+
const elapsed = performance.now() - started;
|
|
584
601
|
if (lease)
|
|
585
|
-
lease.remainingWaitMs = Math.max(0, lease.remainingWaitMs -
|
|
602
|
+
lease.remainingWaitMs = Math.max(0, lease.remainingWaitMs - elapsed);
|
|
586
603
|
if (previous !== null)
|
|
587
604
|
db.exec(`PRAGMA busy_timeout=${previous}`);
|
|
605
|
+
if (elapsed >= SLOW_WRITER_LOG_MS)
|
|
606
|
+
reportSqliteDiagnostic(`sqlite writer site=autocommit lane=${lease ? "foreground" : "background"} elapsed_ms=${Math.round(elapsed)} timing=statement_including_acquisition outcome=${completed ? "completed" : "failed"} caller=${writerCaller()}`);
|
|
588
607
|
}
|
|
589
608
|
}
|
|
590
609
|
function acquireShort(db, acquire, site) {
|
|
@@ -630,24 +649,26 @@ function acquireShort(db, acquire, site) {
|
|
|
630
649
|
}
|
|
631
650
|
function endWriterTransaction(db, end, sql) {
|
|
632
651
|
let ended = false;
|
|
633
|
-
const endStarted = performance.now();
|
|
634
652
|
try {
|
|
635
653
|
const result = end();
|
|
636
654
|
ended = true;
|
|
637
655
|
return result;
|
|
638
656
|
} finally {
|
|
639
657
|
const open = openWriterTransactions.get(db);
|
|
640
|
-
const endMs = performance.now() - endStarted;
|
|
641
658
|
if (open && !isInTransaction(db)) {
|
|
642
659
|
openWriterTransactions.delete(db);
|
|
643
660
|
const holdMs = performance.now() - open.acquiredAt;
|
|
644
661
|
if (open.acquireMs >= SLOW_WRITER_LOG_MS || holdMs >= SLOW_WRITER_LOG_MS) {
|
|
645
662
|
const outcome = /^\s*ROLLBACK/i.test(sql) ? "rolled_back" : ended ? "committed" : "failed";
|
|
646
|
-
reportSqliteDiagnostic(`sqlite writer site=${open.site} lane=${open.lane} acquire_ms=${Math.round(open.acquireMs)} hold_ms=${Math.round(holdMs)}
|
|
663
|
+
reportSqliteDiagnostic(`sqlite writer site=${open.site} lane=${open.lane} acquire_ms=${Math.round(open.acquireMs)} hold_ms=${Math.round(holdMs)} attempts=${open.attempts} outcome=${outcome} timing=through_commit_upper_bound caller=${writerCaller()}`);
|
|
647
664
|
}
|
|
648
665
|
}
|
|
649
666
|
}
|
|
650
667
|
}
|
|
668
|
+
function writerCaller() {
|
|
669
|
+
return new Error().stack?.split(`
|
|
670
|
+
`).find((line) => line.includes(" at ") && !/[/\\]sqlite\.[tj]s[:)]/.test(line) && !/\b(?:writerCaller|endWriterTransaction|withAutocommitTimeout|value)\b/.test(line))?.trim().replace(/\s+/g, "_") ?? "unknown";
|
|
671
|
+
}
|
|
651
672
|
async function beginSqliteWriterAsync2(db, site) {
|
|
652
673
|
const started = performance.now();
|
|
653
674
|
let attempts = 0;
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./server-pavzsdc6.js";
|
|
4
4
|
import {
|
|
5
5
|
isTransientSqliteError2
|
|
6
|
-
} from "./server-
|
|
6
|
+
} from "./server-j8epsc0g.js";
|
|
7
7
|
import {
|
|
8
8
|
PROMOTABLE_CATEGORIES,
|
|
9
9
|
CATEGORY_DEFAULT_TTL
|
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
} from "./server-t4k4qexw.js";
|
|
15
15
|
import {
|
|
16
16
|
managedAuthorityNoteRow
|
|
17
|
-
} from "./server-
|
|
17
|
+
} from "./server-hcvcxzx7.js";
|
|
18
18
|
import {
|
|
19
19
|
embedTextForProject2
|
|
20
|
-
} from "./server-
|
|
20
|
+
} from "./server-fw31krgq.js";
|
|
21
21
|
import {
|
|
22
22
|
saveEmbeddingIfHashMatches
|
|
23
23
|
} from "./server-4dhv7mqz.js";
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
buildWorkspaceMemorySqlFilter2,
|
|
31
31
|
getMemoryById2,
|
|
32
32
|
updateMemorySeenCount2
|
|
33
|
-
} from "./server-
|
|
33
|
+
} from "./server-9yyqq3mm.js";
|
|
34
34
|
import {
|
|
35
35
|
computeNormalizedHash
|
|
36
36
|
} from "./server-2bvekkfy.js";
|