@cortexkit/pi-magic-context 0.49.2 → 0.49.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auto-search-worker.js +3 -3
- package/dist/compaction-marker-candidates-cd17s4ys.js +18 -0
- package/dist/compaction-marker-candidates-worker.js +24 -0
- package/dist/{embedding-backfill-scywarbn.js → embedding-backfill-r7n7dj50.js} +4 -4
- package/dist/{index-vakawmbc.js → index-2apf1afe.js} +5 -20
- package/dist/index-399p688g.js +19 -0
- package/dist/{index-0rasmwm8.js → index-57njcjax.js} +6 -6
- package/dist/{index-fqb1bddn.js → index-590pwxvr.js} +14 -3
- package/dist/{index-kjd1fj55.js → index-9n88gmpf.js} +45 -7
- package/dist/{index-b2anqqad.js → index-9ygacw4e.js} +101 -31
- package/dist/{index-p5zesr4e.js → index-a1jmtv6r.js} +3 -3
- package/dist/{index-28vnkyy7.js → index-bv2r9rpa.js} +57 -30
- package/dist/{index-r874cgmv.js → index-g1csz24n.js} +1 -1
- package/dist/index-g3600tpw.js +212 -0
- package/dist/{index-g7hndmqm.js → index-g7984a4r.js} +4 -2
- package/dist/{index-rd53pk0h.js → index-mzn6t38b.js} +1 -1
- package/dist/{index-rdtgp48t.js → index-xvm5cdyn.js} +1 -1
- package/dist/index.js +13572 -12370
- package/dist/message-index-2damq13v.js +56 -0
- package/dist/{message-index-bounded-110sb4fm.js → message-index-bounded-0qa5eacp.js} +16 -15
- package/dist/migration-worker.js +3 -3
- package/dist/{project-embedding-registry-64t0mw8y.js → project-embedding-registry-fzc4eb29.js} +3 -3
- package/dist/raw-ordinal-warmup-worker.js +22 -5
- package/dist/{read-session-chunk-rvmc25n5.js → read-session-chunk-q05ztqg5.js} +4 -3
- package/dist/{read-session-raw-npx3920c.js → read-session-raw-527m0yxx.js} +2 -1
- package/dist/{search-7z3w8pmz.js → search-5m0jjf29.js} +11 -10
- package/dist/{storage-tags-kjnsqbdb.js → storage-tags-1b2w0wst.js} +1 -1
- package/dist/subagent-entry.js +13 -11
- package/package.json +2 -2
- /package/dist/{index-2pp04pmg.js → index-69vas84q.js} +0 -0
|
@@ -17,11 +17,11 @@ var [
|
|
|
17
17
|
{ setHarness },
|
|
18
18
|
{ Database }
|
|
19
19
|
] = await Promise.all([
|
|
20
|
-
import("./embedding-backfill-
|
|
20
|
+
import("./embedding-backfill-r7n7dj50.js"),
|
|
21
21
|
import("./embedding-cache-7rp4gqzr.js"),
|
|
22
22
|
import("./storage-memory-1z20y55x.js"),
|
|
23
|
-
import("./project-embedding-registry-
|
|
24
|
-
import("./search-
|
|
23
|
+
import("./project-embedding-registry-fzc4eb29.js"),
|
|
24
|
+
import("./search-5m0jjf29.js"),
|
|
25
25
|
import("./embedding-activity-ew6dshfd.js"),
|
|
26
26
|
import("./harness-9872e0ym.js"),
|
|
27
27
|
import("./sqlite-3yye76ht.js")
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isMarkerCandidateBasisCurrent2,
|
|
3
|
+
invalidateMarkerCandidateBasis2,
|
|
4
|
+
readMarkerCandidateBasis2,
|
|
5
|
+
prepareMarkerCandidateBasis2,
|
|
6
|
+
scanMarkerCandidateSnapshot2
|
|
7
|
+
} from "./index-g3600tpw.js";
|
|
8
|
+
import"./index-399p688g.js";
|
|
9
|
+
import"./index-3cgbv47m.js";
|
|
10
|
+
import"./index-x3dcnxh0.js";
|
|
11
|
+
import"./index-0h2mkab2.js";
|
|
12
|
+
export {
|
|
13
|
+
invalidateMarkerCandidateBasis2 as invalidateMarkerCandidateBasis,
|
|
14
|
+
isMarkerCandidateBasisCurrent2 as isMarkerCandidateBasisCurrent,
|
|
15
|
+
prepareMarkerCandidateBasis2 as prepareMarkerCandidateBasis,
|
|
16
|
+
readMarkerCandidateBasis2 as readMarkerCandidateBasis,
|
|
17
|
+
scanMarkerCandidateSnapshot2 as scanMarkerCandidateSnapshot
|
|
18
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// ../plugin/src/features/magic-context/compaction-marker-candidates-worker.ts
|
|
2
|
+
import { parentPort, workerData } from "node:worker_threads";
|
|
3
|
+
var port = parentPort;
|
|
4
|
+
if (!port)
|
|
5
|
+
throw new Error("marker candidate worker requires a parent port");
|
|
6
|
+
port.postMessage({ kind: "accepted" });
|
|
7
|
+
var [{ Database }, { scanMarkerCandidateSnapshot }] = await Promise.all([
|
|
8
|
+
import("./sqlite-3yye76ht.js"),
|
|
9
|
+
import("./compaction-marker-candidates-cd17s4ys.js")
|
|
10
|
+
]);
|
|
11
|
+
var input = workerData;
|
|
12
|
+
var db;
|
|
13
|
+
var reply;
|
|
14
|
+
try {
|
|
15
|
+
db = new Database(input.path, { readonly: true });
|
|
16
|
+
db.exec("PRAGMA busy_timeout=250");
|
|
17
|
+
reply = { kind: "candidates", snapshot: scanMarkerCandidateSnapshot(db, input.sessionId) };
|
|
18
|
+
} catch (error) {
|
|
19
|
+
reply = { kind: "error", error: error instanceof Error ? error.message : String(error) };
|
|
20
|
+
} finally {
|
|
21
|
+
db?.close();
|
|
22
|
+
}
|
|
23
|
+
port.postMessage(reply);
|
|
24
|
+
port.close();
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ensureMemoryEmbeddings2
|
|
3
|
-
} from "./index-
|
|
4
|
-
import"./index-
|
|
3
|
+
} from "./index-xvm5cdyn.js";
|
|
4
|
+
import"./index-g1csz24n.js";
|
|
5
|
+
import"./index-9p40dgkm.js";
|
|
5
6
|
import"./index-27jh224p.js";
|
|
6
7
|
import"./index-yhzhdp3m.js";
|
|
7
|
-
import"./index-9p40dgkm.js";
|
|
8
8
|
import"./index-gc2749rx.js";
|
|
9
9
|
import"./index-21v1kfs7.js";
|
|
10
10
|
import"./index-cyrnv16r.js";
|
|
11
|
-
import"./index-
|
|
11
|
+
import"./index-g7984a4r.js";
|
|
12
12
|
import"./index-4gfq5t09.js";
|
|
13
13
|
import"./index-0vrkp1jq.js";
|
|
14
14
|
import"./index-3cgbv47m.js";
|
|
@@ -2,6 +2,9 @@ import {
|
|
|
2
2
|
getSqliteDatabasePath2,
|
|
3
3
|
releaseIndexOwner2
|
|
4
4
|
} from "./index-3cgbv47m.js";
|
|
5
|
+
import {
|
|
6
|
+
registerExitAbort
|
|
7
|
+
} from "./index-399p688g.js";
|
|
5
8
|
import {
|
|
6
9
|
log2
|
|
7
10
|
} from "./index-x3dcnxh0.js";
|
|
@@ -11,26 +14,6 @@ import { isMainThread } from "node:worker_threads";
|
|
|
11
14
|
|
|
12
15
|
// ../plugin/src/hooks/magic-context/raw-ordinal-warmup.ts
|
|
13
16
|
import { Worker } from "node:worker_threads";
|
|
14
|
-
|
|
15
|
-
// ../plugin/src/shared/exit-abort-registry.ts
|
|
16
|
-
var controllers = new Set;
|
|
17
|
-
var listenerRegistered = false;
|
|
18
|
-
function abortAll() {
|
|
19
|
-
for (const controller of controllers) {
|
|
20
|
-
try {
|
|
21
|
-
controller.abort();
|
|
22
|
-
} catch {}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
function registerExitAbort(controller) {
|
|
26
|
-
controllers.add(controller);
|
|
27
|
-
if (listenerRegistered)
|
|
28
|
-
return;
|
|
29
|
-
listenerRegistered = true;
|
|
30
|
-
process.once("exit", abortAll);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// ../plugin/src/hooks/magic-context/raw-ordinal-warmup.ts
|
|
34
17
|
var ACCEPT_TIMEOUT_MS = 2000;
|
|
35
18
|
var RESULT_TIMEOUT_MS = 10 * 60000;
|
|
36
19
|
var FAILURE_BACKOFF_MS = 5 * 60000;
|
|
@@ -105,6 +88,8 @@ function runSessionWarmupWorker(input, options) {
|
|
|
105
88
|
finish({ delta: reply.delta });
|
|
106
89
|
else if (reply.kind === "indexed")
|
|
107
90
|
finish({ inserted: reply.inserted, measurements: reply.measurements });
|
|
91
|
+
else if (reply.kind === "orphan-sweep")
|
|
92
|
+
finish({ orphanSweep: reply.result });
|
|
108
93
|
else
|
|
109
94
|
finish({ failure: "worker-error", detail: reply.error });
|
|
110
95
|
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// ../plugin/src/shared/exit-abort-registry.ts
|
|
2
|
+
var controllers = new Set;
|
|
3
|
+
var listenerRegistered = false;
|
|
4
|
+
function abortAll() {
|
|
5
|
+
for (const controller of controllers) {
|
|
6
|
+
try {
|
|
7
|
+
controller.abort();
|
|
8
|
+
} catch {}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function registerExitAbort(controller) {
|
|
12
|
+
controllers.add(controller);
|
|
13
|
+
if (listenerRegistered)
|
|
14
|
+
return;
|
|
15
|
+
listenerRegistered = true;
|
|
16
|
+
process.once("exit", abortAll);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { registerExitAbort };
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
resolveStoredPathWorkspaceIdentity,
|
|
22
22
|
sourceNameForMemory,
|
|
23
23
|
managedAuthorityNoteRow
|
|
24
|
-
} from "./index-
|
|
24
|
+
} from "./index-mzn6t38b.js";
|
|
25
25
|
import {
|
|
26
26
|
isKnownAutocommit
|
|
27
27
|
} from "./index-mcgehvgw.js";
|
|
@@ -49,7 +49,7 @@ import {
|
|
|
49
49
|
getProjectEmbeddingSnapshot2,
|
|
50
50
|
embedTextForProject2,
|
|
51
51
|
embedItemsForProject2
|
|
52
|
-
} from "./index-
|
|
52
|
+
} from "./index-g1csz24n.js";
|
|
53
53
|
import {
|
|
54
54
|
saveEmbeddingIfHashMatches,
|
|
55
55
|
getProjectEmbeddings2
|
|
@@ -59,7 +59,7 @@ import {
|
|
|
59
59
|
isEmbeddingEnabled,
|
|
60
60
|
embedText,
|
|
61
61
|
ensureMemoryEmbeddings2
|
|
62
|
-
} from "./index-
|
|
62
|
+
} from "./index-xvm5cdyn.js";
|
|
63
63
|
import {
|
|
64
64
|
getMemorySelectColumns2,
|
|
65
65
|
isMemoryRow2,
|
|
@@ -75,8 +75,8 @@ import {
|
|
|
75
75
|
updateMemoryRetrievalCount2
|
|
76
76
|
} from "./index-xjqheg7a.js";
|
|
77
77
|
import {
|
|
78
|
-
|
|
79
|
-
} from "./index-
|
|
78
|
+
getIndexedMessageCorpusSize2
|
|
79
|
+
} from "./index-9ygacw4e.js";
|
|
80
80
|
import {
|
|
81
81
|
computeNormalizedHash
|
|
82
82
|
} from "./index-9x1f96r8.js";
|
|
@@ -2984,7 +2984,7 @@ function searchMessagesInSnapshot(args, sessionFirst) {
|
|
|
2984
2984
|
return renderRows(args.limit);
|
|
2985
2985
|
}
|
|
2986
2986
|
const sanitizedProbes = probes.map((probe) => ({ probe, query: sanitizeFtsQuery(probe) })).filter((entry) => entry.query.length > 0);
|
|
2987
|
-
const corpusSize =
|
|
2987
|
+
const corpusSize = getIndexedMessageCorpusSize2(args.db, args.sessionId, cutoff);
|
|
2988
2988
|
const probeCounts = countSessionFtsMatchesBatch(args.db, args.sessionId, sanitizedProbes.map((entry) => entry.query), cutoff, args.dateRange, sessionFirst);
|
|
2989
2989
|
const collectBaseDiagnostics = args.diagnostics !== undefined && cutoff !== null;
|
|
2990
2990
|
const baseOutcome = collectBaseDiagnostics && baseQuery.length > 0 ? runMessageFtsQueryWithDiagnostics({
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
TAG_SELECT_COLUMNS2,
|
|
22
22
|
getCandidateToolOwners2,
|
|
23
23
|
pickNearestPriorOwner2
|
|
24
|
-
} from "./index-
|
|
24
|
+
} from "./index-9n88gmpf.js";
|
|
25
25
|
import {
|
|
26
26
|
OMO_INTERNAL_INITIATOR_MARKER,
|
|
27
27
|
isSystemDirective,
|
|
@@ -69,7 +69,7 @@ import {
|
|
|
69
69
|
hasRawSessionMessageByIdFromDb2,
|
|
70
70
|
readRawSeedTailFromDb2,
|
|
71
71
|
readRawSessionBoundaryEndpointsFromDb2
|
|
72
|
-
} from "./index-
|
|
72
|
+
} from "./index-2apf1afe.js";
|
|
73
73
|
import {
|
|
74
74
|
logSlowWriteTransaction
|
|
75
75
|
} from "./index-0vrkp1jq.js";
|
|
@@ -1254,6 +1254,9 @@ var providerOverflowKnownLimitSessions = new Set;
|
|
|
1254
1254
|
function isProviderOverflowFailClosedProven(sessionId) {
|
|
1255
1255
|
return providerOverflowKnownLimitSessions.has(sessionId) || providerOverflowReconfirmedSessions.has(sessionId);
|
|
1256
1256
|
}
|
|
1257
|
+
function getEmergencyRecoveryArmedAt(sessionId) {
|
|
1258
|
+
return emergencyRecoveryArmedAtBySession.get(sessionId) ?? null;
|
|
1259
|
+
}
|
|
1257
1260
|
function describeProtectedTailDrainBudgetSkip(result) {
|
|
1258
1261
|
const state = result.budgetState;
|
|
1259
1262
|
if (!state)
|
|
@@ -4887,6 +4890,14 @@ function readSessionChunk2(sessionId, tokenBudget, offset = 1, eligibleEndOrdina
|
|
|
4887
4890
|
pinComponentWhenFormattedBudgetCrosses(msg.ordinal, text);
|
|
4888
4891
|
}
|
|
4889
4892
|
if (flushCurrentBlock() && pendingNoiseMeta.length > 0) {
|
|
4893
|
+
const lastNoise = pendingNoiseMeta[pendingNoiseMeta.length - 1];
|
|
4894
|
+
if (messagesProcessed > 0 && lastNoise) {
|
|
4895
|
+
lineMeta.push(...pendingNoiseMeta);
|
|
4896
|
+
messagesProcessed += pendingNoiseMeta.length;
|
|
4897
|
+
lastOrdinal = lastNoise.ordinal;
|
|
4898
|
+
lastMessageId = lastNoise.messageId;
|
|
4899
|
+
pendingNoiseMeta = [];
|
|
4900
|
+
}
|
|
4890
4901
|
highestScannedOrdinal = Math.max(highestScannedOrdinal, pendingNoiseMeta[pendingNoiseMeta.length - 1]?.ordinal ?? highestScannedOrdinal);
|
|
4891
4902
|
}
|
|
4892
4903
|
const toolOnlyRanges = [];
|
|
@@ -4944,4 +4955,4 @@ function readRawSessionSeedTail2(sessionId, boundaryId, onQuery) {
|
|
|
4944
4955
|
});
|
|
4945
4956
|
}
|
|
4946
4957
|
|
|
4947
|
-
export { detectThinkingBindingMismatch, detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, MAX_EXECUTE_THRESHOLD, escalationBands, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, computeProtectionWindow, readEpochFloorSnapshot, getProtectionWindowForSession, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, isRustMarkerAdmissionFenced, ReplayDocumentError, readReplayEnvelope, readReplayDocument, updateReplayDocument, writeReplayDocument, isProviderOverflowFailClosedProven, describeProtectedTailDrainBudgetSkip, loadProtectedTailMeta, markProtectedTailPolicyV3Seeded, recordProtectedTailPublicationFloor, recordProtectedTailNoEligibleHead, 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, getChannel2NudgeClaim, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, recordOverflowDetected, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, armThinkingBindingRecovery, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getProcessedImageStrippedIds, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, setPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, getSessionsWithPendingPiMarker, setSessionWorkMetrics, getSessionWorkMetrics, resolveEpochFloorForPass, withReadOnlySessionDb, expandToolPart, retreatPastHostUnservedRows, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, invalidateTrueRawTokenCache, stripSystemInjection, hasUserAnswerMetadata, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, TOKEN_BUDGET_TOOL_REFUSAL, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, droppedInputMarker, createDroppedInputGuard, isEditTool, applyEditMarkerToInput, modelAcceptsEmptyContent, isAnthropicFamilyRoute, variantChangeBustsProviderCache, isInActiveAnthropicTurn, activeAnthropicTurnStart, hasAnthropicReasoning, findLatestAssistantReasoningMutationExemptMessage, DEFAULT_KEEP_REASONING_TOKENS, resolveKeepReasoningTokens, reasoningStepCost, reasoningBudgetCutoff, reasoningTextAndOpaque, opaqueThinkingCost, SKELETON_REAL_INPUT_MAX_BYTES, toolInputStringBytes, 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 };
|
|
4958
|
+
export { detectThinkingBindingMismatch, detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, MAX_EXECUTE_THRESHOLD, escalationBands, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, computeProtectionWindow, readEpochFloorSnapshot, getProtectionWindowForSession, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, isRustMarkerAdmissionFenced, ReplayDocumentError, readReplayEnvelope, readReplayDocument, updateReplayDocument, writeReplayDocument, isProviderOverflowFailClosedProven, getEmergencyRecoveryArmedAt, describeProtectedTailDrainBudgetSkip, loadProtectedTailMeta, markProtectedTailPolicyV3Seeded, recordProtectedTailPublicationFloor, recordProtectedTailNoEligibleHead, getWrapupInProgressState, isWrapupInProgress, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, EMERGENCY_DRAIN_FAILURE_BACKOFF_MS, getProtectedTailDrainBudgetSkip, reserveProtectedTailDrainTokens, clearEmergencyDrainLatch, recordHistorianDrainFailure, clearHistorianDrainFailure, rollbackProtectedTailDrainReservation, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, getChannel2NudgeClaim, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, recordOverflowDetected, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, armThinkingBindingRecovery, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getProcessedImageStrippedIds, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, setPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, getSessionsWithPendingPiMarker, setSessionWorkMetrics, getSessionWorkMetrics, resolveEpochFloorForPass, withReadOnlySessionDb, expandToolPart, retreatPastHostUnservedRows, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, invalidateTrueRawTokenCache, stripSystemInjection, hasUserAnswerMetadata, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, TOKEN_BUDGET_TOOL_REFUSAL, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, droppedInputMarker, createDroppedInputGuard, isEditTool, applyEditMarkerToInput, modelAcceptsEmptyContent, isAnthropicFamilyRoute, variantChangeBustsProviderCache, isInActiveAnthropicTurn, activeAnthropicTurnStart, hasAnthropicReasoning, findLatestAssistantReasoningMutationExemptMessage, DEFAULT_KEEP_REASONING_TOKENS, resolveKeepReasoningTokens, reasoningStepCost, reasoningBudgetCutoff, reasoningTextAndOpaque, opaqueThinkingCost, SKELETON_REAL_INPUT_MAX_BYTES, toolInputStringBytes, 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 };
|
|
@@ -631,6 +631,7 @@ function isRecord(value) {
|
|
|
631
631
|
|
|
632
632
|
// ../plugin/src/shared/tag-owner-id.ts
|
|
633
633
|
var TEXT_TAG_IDENTITY_MARKER = ":mc-text-v1:";
|
|
634
|
+
var PI_FALLBACK_PREFIXES_JSON = JSON.stringify([..."pi-msg-"].reduce((prefixes, char) => prefixes.flatMap((prefix) => /[a-z]/.test(char) ? [prefix + char, prefix + char.toUpperCase()] : [prefix + char]), [""]));
|
|
634
635
|
var POSITIONAL_CONTENT_SUFFIX = /:(?:p|file)\d+$/;
|
|
635
636
|
var CONTENT_DERIVED_TEXT_SUFFIX = /:mc-text-v1:[0-9a-f]+:[0-9a-f]+:o\d+$/;
|
|
636
637
|
function contentTagOwnerMessageId(contentId) {
|
|
@@ -1906,8 +1907,41 @@ function getPersistedToolTagAccounting2(db, sessionId, tagNumber) {
|
|
|
1906
1907
|
}
|
|
1907
1908
|
return row;
|
|
1908
1909
|
}
|
|
1909
|
-
function getAllStatusTagTokenTotalsFlat2(db, sessionId, floor = 0, calibration = { proseRatio: 1, toolsRatio: 1 }) {
|
|
1910
|
-
const
|
|
1910
|
+
function getAllStatusTagTokenTotalsFlat2(db, sessionId, floor = 0, calibration = { proseRatio: 1, toolsRatio: 1 }, ownerMessageIds) {
|
|
1911
|
+
const columns = "type, message_id, tool_owner_message_id, token_count, input_token_count, reasoning_token_count";
|
|
1912
|
+
const owners = ownerMessageIds ? new Set(ownerMessageIds) : undefined;
|
|
1913
|
+
let scanOrder = "id";
|
|
1914
|
+
if (owners) {
|
|
1915
|
+
const planStatement = db.prepare(`EXPLAIN QUERY PLAN SELECT ${columns} FROM tags WHERE session_id = ?${floor > 0 ? " AND tag_number >= ?" : ""}`);
|
|
1916
|
+
let plan;
|
|
1917
|
+
try {
|
|
1918
|
+
plan = planStatement.all(sessionId, ...floor > 0 ? [floor] : []);
|
|
1919
|
+
} finally {
|
|
1920
|
+
planStatement.finalize?.();
|
|
1921
|
+
}
|
|
1922
|
+
const index = plan.map((row) => /USING (?:COVERING )?INDEX (\S+)/.exec(row.detail)?.[1]).find(Boolean);
|
|
1923
|
+
if (index) {
|
|
1924
|
+
const keyStatement = db.prepare("SELECT name, coll, desc FROM pragma_index_xinfo(?) WHERE key = 1 ORDER BY seqno");
|
|
1925
|
+
let keys;
|
|
1926
|
+
try {
|
|
1927
|
+
keys = keyStatement.all(index);
|
|
1928
|
+
} finally {
|
|
1929
|
+
keyStatement.finalize?.();
|
|
1930
|
+
}
|
|
1931
|
+
scanOrder = [
|
|
1932
|
+
...keys.map((key) => `"${(key.name ?? "id").replaceAll('"', '""')}" COLLATE "${key.coll.replaceAll('"', '""')}"${key.desc ? " DESC" : ""}`),
|
|
1933
|
+
"id"
|
|
1934
|
+
].join(", ");
|
|
1935
|
+
}
|
|
1936
|
+
}
|
|
1937
|
+
const rows = owners ? db.prepare(`SELECT ${columns} FROM tags WHERE id IN (
|
|
1938
|
+
SELECT t.id FROM json_each(?) o CROSS JOIN tags t INDEXED BY idx_tags_session_message_id
|
|
1939
|
+
ON t.session_id = ? AND t.message_id >= o.value AND t.message_id < o.value || ';'
|
|
1940
|
+
UNION
|
|
1941
|
+
SELECT t.id FROM json_each(?) o CROSS JOIN tags t INDEXED BY idx_tags_pi_fallback_tool_owner
|
|
1942
|
+
ON t.session_id = ? AND t.tool_owner_message_id = o.value
|
|
1943
|
+
WHERE t.type = 'tool'
|
|
1944
|
+
) AND tag_number >= ? ORDER BY ${scanOrder}`).all(JSON.stringify([...owners]), sessionId, JSON.stringify([...owners]), sessionId, floor) : floor > 0 ? db.prepare(`SELECT type, message_id, tool_owner_message_id, token_count, input_token_count, reasoning_token_count
|
|
1911
1945
|
FROM tags
|
|
1912
1946
|
WHERE session_id = ? AND tag_number >= ?`).all(sessionId, floor) : db.prepare(`SELECT type, message_id, tool_owner_message_id, token_count, input_token_count, reasoning_token_count
|
|
1913
1947
|
FROM tags
|
|
@@ -1918,6 +1952,8 @@ function getAllStatusTagTokenTotalsFlat2(db, sessionId, floor = 0, calibration =
|
|
|
1918
1952
|
if (row.type === "tool" && row.tool_owner_message_id === null)
|
|
1919
1953
|
continue;
|
|
1920
1954
|
const owner = ownerMessageIdForTagRow(row);
|
|
1955
|
+
if (owners && !owners.has(owner))
|
|
1956
|
+
continue;
|
|
1921
1957
|
if (row.token_count === null) {
|
|
1922
1958
|
nullMessageIds.add(owner);
|
|
1923
1959
|
totals.delete(owner);
|
|
@@ -2594,11 +2630,13 @@ function findPiFallbackToolOwnerTags2(db, sessionId) {
|
|
|
2594
2630
|
message_id AS callId,
|
|
2595
2631
|
tool_owner_message_id AS toolOwnerMessageId,
|
|
2596
2632
|
status
|
|
2597
|
-
FROM tags
|
|
2633
|
+
FROM json_each(?) prefix CROSS JOIN tags
|
|
2598
2634
|
WHERE session_id = ?
|
|
2599
|
-
AND type = 'tool'
|
|
2600
|
-
|
|
2601
|
-
|
|
2635
|
+
AND tags.type = 'tool'
|
|
2636
|
+
AND tool_owner_message_id >= prefix.value
|
|
2637
|
+
AND tool_owner_message_id < substr(prefix.value, 1, 6) || '.'
|
|
2638
|
+
AND tool_owner_message_id LIKE 'pi-msg-%'
|
|
2639
|
+
ORDER BY tag_number ASC`).all(PI_FALLBACK_PREFIXES_JSON, sessionId).filter(isPiFallbackToolOwnerTag);
|
|
2602
2640
|
}
|
|
2603
2641
|
|
|
2604
2642
|
class PiTagIdentityConflictError2 extends Error {
|
|
@@ -3103,4 +3141,4 @@ function deleteToolTagsByOwner(db, sessionId, ownerMsgId) {
|
|
|
3103
3141
|
return getDeleteToolTagsByOwnerStatement(db).all(sessionId, ownerMsgId).length;
|
|
3104
3142
|
}
|
|
3105
3143
|
|
|
3106
|
-
export { UNKNOWN_FIT_RATIO, resolveDecisionCalibration, hasMeasuredDecisionCalibration, providerMass, localBudget, calibrationForModelKey, historyLocalBudget, adoptedProtectedToolsPolicy, protectedToolTagNumbers, protectedToolTokenCount, stripWellFormedLeadingTagPrefix, stripPersistedAssistantText, byteSize, stripTagPrefix, peelLeadingMcTagNotation, prependTag, isRecord, TEXT_TAG_IDENTITY_MARKER, contentTagOwnerMessageId, estimateImageTokensFromDataUrl, providerVisiblePart, providerVisibleMessage, TODO_STATUSES, TODO_PRIORITIES, TITLE_DONE_STATUSES, normalizeTodoStateJson, buildSyntheticTodoPart, stripChannel1ReminderSpans, compareMeasuredTailPrefix, formatTailHygienePrefixMismatch, freezeTailHygieneMeasurement, effectiveTailHygiene, CHANNEL1_SENTINEL, CHANNEL1_FLOOR_TOKENS, decideChannel1, evaluateChannel2, reclaimableToolOutputCount, buildChannel2Reminder, buildChannel1Reminder, planEmergencyDrop, measureEmergencyTag, queuePendingOp, queuePendingDropForUnchangedTag, getPendingOps, getPendingOpsCount, clearPendingOps, removePendingOp, updateTagByteSize2, getRecentTagOwnerMessageIds2, getActiveTagTokenAggregate2, AGE_RECLAIM_MIN_TOKENS2, getOldestActiveUnprotectedToolTags2, getActiveToolTagsForAgeReclaim2, getTriggerTagTokenUpperBound2, getActiveTagTokenTotalsByMessage2, updateTagInputByteSize2, updateTagTokenCount2, getPersistedToolTagAccounting2, getAllStatusTagTokenTotalsFlat2, getReasoningTokenEstimatesByMessage2, tryGetReasoningTokenEstimatesByMessage2, getMaxTagNumberByOwnerMessage2, scanTagOwnerSummary2, scanTagOwnerDelta2, updateTagInputTokenCount2, tagTokenCountIsNull2, backfillTagTokenCounts2, insertTag2, updateTagStatus2, getInertWhitespaceAssistantTagsByNumbers2, updateTagDropMode2, updateCavemanDepth2, updateTagMessageId2, hasPiFallbackMessageTags2, findAdoptableFallbackTags2, adoptFallbackTagMessageId2, foldShrunkPartTags2, hasPiFallbackToolOwnerTags2, findPiFallbackToolOwnerTags2, PiTagIdentityConflictError2, getPiMessageTagCandidates2, findPiTagIdentityConflict2, adoptPiFallbackToolOwnerTag2, adoptPiFallbackMessageTag2, markTagsCompactedByMessageIds2, deleteTagsByMessageId2, getMaxTagNumberBySession2, getTagNumberByMessageId2, getAssignableTagNumberByMessageId2, getMinMessageTagNumberForRawId2, deriveTagLoadFloor2, TAG_SELECT_COLUMNS2, getTagsBySession2, getActiveTagsBySession2, getTagsForPendingOperations2, getTagsByNumbers2, getNewestToolTagNumbers2, getDroppedTagsByNumbers2, getMaxDroppedTagNumber2, getTagById2, getTopNBySize2, getToolTagNumberByOwner2, getNullOwnerToolTag2, adoptNullOwnerToolTag2, getCandidateToolOwners2, pickNearestPriorOwner2 };
|
|
3144
|
+
export { UNKNOWN_FIT_RATIO, resolveDecisionCalibration, hasMeasuredDecisionCalibration, providerMass, localBudget, calibrationForModelKey, historyLocalBudget, adoptedProtectedToolsPolicy, protectedToolTagNumbers, protectedToolTokenCount, stripWellFormedLeadingTagPrefix, stripPersistedAssistantText, byteSize, stripTagPrefix, peelLeadingMcTagNotation, prependTag, isRecord, TEXT_TAG_IDENTITY_MARKER, PI_FALLBACK_PREFIXES_JSON, contentTagOwnerMessageId, estimateImageTokensFromDataUrl, providerVisiblePart, providerVisibleMessage, TODO_STATUSES, TODO_PRIORITIES, TITLE_DONE_STATUSES, normalizeTodoStateJson, buildSyntheticTodoPart, stripChannel1ReminderSpans, compareMeasuredTailPrefix, formatTailHygienePrefixMismatch, freezeTailHygieneMeasurement, effectiveTailHygiene, CHANNEL1_SENTINEL, CHANNEL1_FLOOR_TOKENS, decideChannel1, evaluateChannel2, reclaimableToolOutputCount, buildChannel2Reminder, buildChannel1Reminder, planEmergencyDrop, measureEmergencyTag, queuePendingOp, queuePendingDropForUnchangedTag, getPendingOps, getPendingOpsCount, clearPendingOps, removePendingOp, updateTagByteSize2, getRecentTagOwnerMessageIds2, getActiveTagTokenAggregate2, AGE_RECLAIM_MIN_TOKENS2, getOldestActiveUnprotectedToolTags2, getActiveToolTagsForAgeReclaim2, getTriggerTagTokenUpperBound2, getActiveTagTokenTotalsByMessage2, updateTagInputByteSize2, updateTagTokenCount2, getPersistedToolTagAccounting2, getAllStatusTagTokenTotalsFlat2, getReasoningTokenEstimatesByMessage2, tryGetReasoningTokenEstimatesByMessage2, getMaxTagNumberByOwnerMessage2, scanTagOwnerSummary2, scanTagOwnerDelta2, updateTagInputTokenCount2, tagTokenCountIsNull2, backfillTagTokenCounts2, insertTag2, updateTagStatus2, getInertWhitespaceAssistantTagsByNumbers2, updateTagDropMode2, updateCavemanDepth2, updateTagMessageId2, hasPiFallbackMessageTags2, findAdoptableFallbackTags2, adoptFallbackTagMessageId2, foldShrunkPartTags2, hasPiFallbackToolOwnerTags2, findPiFallbackToolOwnerTags2, PiTagIdentityConflictError2, getPiMessageTagCandidates2, findPiTagIdentityConflict2, adoptPiFallbackToolOwnerTag2, adoptPiFallbackMessageTag2, markTagsCompactedByMessageIds2, deleteTagsByMessageId2, getMaxTagNumberBySession2, getTagNumberByMessageId2, getAssignableTagNumberByMessageId2, getMinMessageTagNumberForRawId2, deriveTagLoadFloor2, TAG_SELECT_COLUMNS2, getTagsBySession2, getActiveTagsBySession2, getTagsForPendingOperations2, getTagsByNumbers2, getNewestToolTagNumbers2, getDroppedTagsByNumbers2, getMaxDroppedTagNumber2, getTagById2, getTopNBySize2, getToolTagNumberByOwner2, getNullOwnerToolTag2, adoptNullOwnerToolTag2, getCandidateToolOwners2, pickNearestPriorOwner2 };
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
} from "./index-mcgehvgw.js";
|
|
38
38
|
import {
|
|
39
39
|
cleanUserText2
|
|
40
|
-
} from "./index-
|
|
40
|
+
} from "./index-590pwxvr.js";
|
|
41
41
|
import {
|
|
42
42
|
logSlowWriteTransaction
|
|
43
43
|
} from "./index-0vrkp1jq.js";
|
|
@@ -696,7 +696,7 @@ var deleteMessageFtsStatements = new WeakMap;
|
|
|
696
696
|
var deleteFtsMapStatements = new WeakMap;
|
|
697
697
|
var deleteFtsMapRangeStatements = new WeakMap;
|
|
698
698
|
var deleteMessageFtsMapStatements = new WeakMap;
|
|
699
|
-
var
|
|
699
|
+
var MESSAGE_INDEX_MAX_FTS_BYTES2 = 64 * 1024;
|
|
700
700
|
var skipStatements = new WeakMap;
|
|
701
701
|
function skipStatement(db, sql) {
|
|
702
702
|
const statements = skipStatements.get(db) ?? new Map;
|
|
@@ -708,7 +708,15 @@ function skipStatement(db, sql) {
|
|
|
708
708
|
}
|
|
709
709
|
return statement;
|
|
710
710
|
}
|
|
711
|
-
var
|
|
711
|
+
var messageIndexSkipKey2 = (sessionId, messageId) => `message_index_skip:${JSON.stringify([sessionId, messageId])}`;
|
|
712
|
+
function deleteMessageIndexSkips(db, sessionId, messageId) {
|
|
713
|
+
if (messageId !== undefined) {
|
|
714
|
+
skipStatement(db, "DELETE FROM schema_migrations_meta WHERE key=?").run(messageIndexSkipKey2(sessionId, messageId));
|
|
715
|
+
} else {
|
|
716
|
+
const prefix = `message_index_skip:${JSON.stringify([sessionId]).slice(0, -1)},`;
|
|
717
|
+
skipStatement(db, "DELETE FROM schema_migrations_meta WHERE substr(key,1,length(?))=?").run(prefix, prefix);
|
|
718
|
+
}
|
|
719
|
+
}
|
|
712
720
|
function normalizeIndexText(text) {
|
|
713
721
|
return text.replace(/\s+/g, " ").trim();
|
|
714
722
|
}
|
|
@@ -744,6 +752,17 @@ function getUpsertDirtyFloorStatement(db) {
|
|
|
744
752
|
}
|
|
745
753
|
return stmt;
|
|
746
754
|
}
|
|
755
|
+
function getDeleteFtsStatement(db) {
|
|
756
|
+
let stmt = deleteFtsStatements.get(db);
|
|
757
|
+
if (!stmt) {
|
|
758
|
+
stmt = db.prepare(`DELETE FROM message_history_fts
|
|
759
|
+
WHERE rowid IN (
|
|
760
|
+
SELECT fts_rowid FROM message_fts_rowid_map WHERE session_id = ?
|
|
761
|
+
)`);
|
|
762
|
+
deleteFtsStatements.set(db, stmt);
|
|
763
|
+
}
|
|
764
|
+
return stmt;
|
|
765
|
+
}
|
|
747
766
|
function getDeleteFtsRangeStatement(db) {
|
|
748
767
|
let stmt = deleteFtsRangeStatements.get(db);
|
|
749
768
|
if (!stmt) {
|
|
@@ -757,6 +776,14 @@ function getDeleteFtsRangeStatement(db) {
|
|
|
757
776
|
}
|
|
758
777
|
return stmt;
|
|
759
778
|
}
|
|
779
|
+
function getDeleteIndexStatement(db) {
|
|
780
|
+
let stmt = deleteIndexStatements.get(db);
|
|
781
|
+
if (!stmt) {
|
|
782
|
+
stmt = db.prepare("DELETE FROM message_history_index WHERE session_id = ?");
|
|
783
|
+
deleteIndexStatements.set(db, stmt);
|
|
784
|
+
}
|
|
785
|
+
return stmt;
|
|
786
|
+
}
|
|
760
787
|
function getCountIndexedMessageStatement(db) {
|
|
761
788
|
let stmt = countIndexedMessageStatements.get(db);
|
|
762
789
|
if (!stmt) {
|
|
@@ -796,6 +823,14 @@ function getUpsertMessageSourceStatement(db) {
|
|
|
796
823
|
}
|
|
797
824
|
return stmt;
|
|
798
825
|
}
|
|
826
|
+
function getDeleteMessageSourceStatement(db) {
|
|
827
|
+
let stmt = deleteMessageSourceStatements.get(db);
|
|
828
|
+
if (!stmt) {
|
|
829
|
+
stmt = db.prepare("DELETE FROM message_history_source WHERE session_id = ?");
|
|
830
|
+
deleteMessageSourceStatements.set(db, stmt);
|
|
831
|
+
}
|
|
832
|
+
return stmt;
|
|
833
|
+
}
|
|
799
834
|
function getDeleteMessageSourceRangeStatement(db) {
|
|
800
835
|
let stmt = deleteMessageSourceRangeStatements.get(db);
|
|
801
836
|
if (!stmt) {
|
|
@@ -820,6 +855,14 @@ function getDeleteMessageFtsStatement(db) {
|
|
|
820
855
|
}
|
|
821
856
|
return stmt;
|
|
822
857
|
}
|
|
858
|
+
function getDeleteFtsMapStatement(db) {
|
|
859
|
+
let stmt = deleteFtsMapStatements.get(db);
|
|
860
|
+
if (!stmt) {
|
|
861
|
+
stmt = db.prepare("DELETE FROM message_fts_rowid_map WHERE session_id = ?");
|
|
862
|
+
deleteFtsMapStatements.set(db, stmt);
|
|
863
|
+
}
|
|
864
|
+
return stmt;
|
|
865
|
+
}
|
|
823
866
|
function getDeleteFtsMapRangeStatement(db) {
|
|
824
867
|
let stmt = deleteFtsMapRangeStatements.get(db);
|
|
825
868
|
if (!stmt) {
|
|
@@ -853,8 +896,8 @@ function normalizeSourceVersion(version) {
|
|
|
853
896
|
return `string:${version}`;
|
|
854
897
|
return "null";
|
|
855
898
|
}
|
|
856
|
-
function
|
|
857
|
-
const content =
|
|
899
|
+
function toMessageIndexSource2(message) {
|
|
900
|
+
const content = getIndexableContent2(message.role, message.parts);
|
|
858
901
|
return {
|
|
859
902
|
id: message.id,
|
|
860
903
|
ordinal: message.ordinal,
|
|
@@ -866,9 +909,9 @@ function toMessageIndexSource(message) {
|
|
|
866
909
|
};
|
|
867
910
|
}
|
|
868
911
|
function getMessageSourceSnapshot(message) {
|
|
869
|
-
return
|
|
912
|
+
return toMessageIndexSource2(message);
|
|
870
913
|
}
|
|
871
|
-
function
|
|
914
|
+
function getMessageIndexSourceIdentity2(message) {
|
|
872
915
|
const source = getMessageSourceSnapshot(message);
|
|
873
916
|
return JSON.stringify([
|
|
874
917
|
source.ordinal,
|
|
@@ -878,7 +921,7 @@ function getMessageIndexSourceIdentity(message) {
|
|
|
878
921
|
message.createdAt ?? null
|
|
879
922
|
]);
|
|
880
923
|
}
|
|
881
|
-
function
|
|
924
|
+
function isMessageIndexSourceCurrent2(db, sessionId, message) {
|
|
882
925
|
const source = getMessageSourceSnapshot(message);
|
|
883
926
|
return isIndexSourceCurrent(db, sessionId, source);
|
|
884
927
|
}
|
|
@@ -889,8 +932,8 @@ function isIndexSourceCurrent(db, sessionId, source) {
|
|
|
889
932
|
function writeMessageSource(db, sessionId, source, now) {
|
|
890
933
|
getUpsertMessageSourceStatement(db).run(sessionId, source.id, source.ordinal, source.sourceVersion, source.contentHash, source.role, getHarness2(), now);
|
|
891
934
|
const bytes = Buffer.byteLength(source.content);
|
|
892
|
-
if (source.ftsSkippedBytes !== undefined || bytes >
|
|
893
|
-
skipStatement(db, "INSERT INTO schema_migrations_meta(key,value) VALUES (?,?) ON CONFLICT(key) DO UPDATE SET value=excluded.value").run(
|
|
935
|
+
if (source.ftsSkippedBytes !== undefined || bytes > MESSAGE_INDEX_MAX_FTS_BYTES2) {
|
|
936
|
+
skipStatement(db, "INSERT INTO schema_migrations_meta(key,value) VALUES (?,?) ON CONFLICT(key) DO UPDATE SET value=excluded.value").run(messageIndexSkipKey2(sessionId, source.id), JSON.stringify({
|
|
894
937
|
reason: "oversized",
|
|
895
938
|
bytes: source.ftsSkippedBytes ?? bytes,
|
|
896
939
|
contentHash: source.contentHash,
|
|
@@ -899,24 +942,24 @@ function writeMessageSource(db, sessionId, source, now) {
|
|
|
899
942
|
}));
|
|
900
943
|
return "";
|
|
901
944
|
}
|
|
902
|
-
skipStatement(db, "DELETE FROM schema_migrations_meta WHERE key=?").run(
|
|
945
|
+
skipStatement(db, "DELETE FROM schema_migrations_meta WHERE key=?").run(messageIndexSkipKey2(sessionId, source.id));
|
|
903
946
|
return source.content;
|
|
904
947
|
}
|
|
905
|
-
function
|
|
948
|
+
function getLastIndexedOrdinal2(db, sessionId) {
|
|
906
949
|
const row = getLastIndexedStatement(db).get(sessionId);
|
|
907
950
|
return typeof row?.last_indexed_ordinal === "number" ? row.last_indexed_ordinal : 0;
|
|
908
951
|
}
|
|
909
|
-
function
|
|
910
|
-
const watermark =
|
|
952
|
+
function getIndexedMessageCorpusSize2(db, sessionId, maxOrdinal) {
|
|
953
|
+
const watermark = getLastIndexedOrdinal2(db, sessionId);
|
|
911
954
|
return maxOrdinal === null ? watermark : Math.min(watermark, Math.max(0, maxOrdinal));
|
|
912
955
|
}
|
|
913
956
|
function getDirtyIndexFloor(db, sessionId) {
|
|
914
957
|
const row = getLastIndexedStatement(db).get(sessionId);
|
|
915
958
|
return typeof row?.dirty_floor_ordinal === "number" && row.dirty_floor_ordinal > 0 ? row.dirty_floor_ordinal : null;
|
|
916
959
|
}
|
|
917
|
-
function
|
|
960
|
+
function markMessageIndexDirty2(db, sessionId, floorOrdinal) {
|
|
918
961
|
const dirtyFloor = Math.max(1, Math.floor(floorOrdinal));
|
|
919
|
-
getUpsertDirtyFloorStatement(db).run(sessionId,
|
|
962
|
+
getUpsertDirtyFloorStatement(db).run(sessionId, getLastIndexedOrdinal2(db, sessionId), dirtyFloor, Date.now(), getHarness2());
|
|
920
963
|
}
|
|
921
964
|
function isMessageAlreadyIndexed(db, sessionId, messageId) {
|
|
922
965
|
const row = getCountIndexedMessageStatement(db).get(sessionId, messageId);
|
|
@@ -925,16 +968,40 @@ function isMessageAlreadyIndexed(db, sessionId, messageId) {
|
|
|
925
968
|
function setIndexProgress(db, sessionId, watermark, dirtyFloor, now) {
|
|
926
969
|
getUpsertProgressStatement(db).run(sessionId, Math.max(0, Math.floor(watermark)), dirtyFloor ?? 0, now, getHarness2());
|
|
927
970
|
}
|
|
928
|
-
function
|
|
929
|
-
const watermark =
|
|
971
|
+
function getMessageIndexReconciliationStartOrdinal2(db, sessionId) {
|
|
972
|
+
const watermark = getLastIndexedOrdinal2(db, sessionId);
|
|
930
973
|
const dirtyFloor = getDirtyIndexFloor(db, sessionId);
|
|
931
974
|
return dirtyFloor === null ? watermark : Math.min(watermark, dirtyFloor - 1);
|
|
932
975
|
}
|
|
933
|
-
function
|
|
976
|
+
function isMessageIndexReconciledThrough2(db, sessionId, finalWatermark) {
|
|
934
977
|
const dirtyFloor = getDirtyIndexFloor(db, sessionId);
|
|
935
|
-
return
|
|
978
|
+
return getLastIndexedOrdinal2(db, sessionId) >= finalWatermark && dirtyFloor === null;
|
|
936
979
|
}
|
|
937
|
-
function
|
|
980
|
+
function deleteIndexedMessage2(db, sessionId, messageId) {
|
|
981
|
+
deleteMessageIndexSkips(db, sessionId, messageId);
|
|
982
|
+
const row = getCountIndexedMessageStatement(db).get(sessionId, messageId);
|
|
983
|
+
const count = typeof row?.count === "number" ? row.count : 0;
|
|
984
|
+
clearIndexedMessages2(db, sessionId);
|
|
985
|
+
return count;
|
|
986
|
+
}
|
|
987
|
+
function clearIndexedMessagesInTransaction2(db, sessionId) {
|
|
988
|
+
deleteMessageIndexSkips(db, sessionId);
|
|
989
|
+
getDeleteFtsStatement(db).run(sessionId);
|
|
990
|
+
deleteUnmappedMessageFtsRows(db, [sessionId]);
|
|
991
|
+
getDeleteFtsMapStatement(db).run(sessionId);
|
|
992
|
+
getDeleteMessageSourceStatement(db).run(sessionId);
|
|
993
|
+
getDeleteIndexStatement(db).run(sessionId);
|
|
994
|
+
clearCompressionDepth(db, sessionId);
|
|
995
|
+
}
|
|
996
|
+
function clearIndexedMessages2(db, sessionId) {
|
|
997
|
+
let transactionStartedAt = 0;
|
|
998
|
+
db.transaction(() => {
|
|
999
|
+
transactionStartedAt = performance.now();
|
|
1000
|
+
clearIndexedMessagesInTransaction2(db, sessionId);
|
|
1001
|
+
}).immediate();
|
|
1002
|
+
logSlowWriteTransaction("message_index_clear", transactionStartedAt);
|
|
1003
|
+
}
|
|
1004
|
+
function getIndexableContent2(role, parts) {
|
|
938
1005
|
if (role === "user") {
|
|
939
1006
|
if (!hasMeaningfulUserText2(parts)) {
|
|
940
1007
|
return "";
|
|
@@ -947,7 +1014,7 @@ function getIndexableContent(role, parts) {
|
|
|
947
1014
|
return "";
|
|
948
1015
|
}
|
|
949
1016
|
function indexSingleMessageInTransaction(db, sessionId, message, now, dirtyFloorBeforeAttempt, source) {
|
|
950
|
-
const currentWatermark =
|
|
1017
|
+
const currentWatermark = getLastIndexedOrdinal2(db, sessionId);
|
|
951
1018
|
const dirtyFloor = getDirtyIndexFloor(db, sessionId);
|
|
952
1019
|
if (message.ordinal <= currentWatermark) {
|
|
953
1020
|
if (isIndexSourceCurrent(db, sessionId, source)) {
|
|
@@ -978,17 +1045,17 @@ function indexSingleMessageInTransaction(db, sessionId, message, now, dirtyFloor
|
|
|
978
1045
|
setIndexProgress(db, sessionId, message.ordinal, dirtyFloorBeforeAttempt === message.ordinal ? null : dirtyFloorBeforeAttempt, now);
|
|
979
1046
|
return inserted;
|
|
980
1047
|
}
|
|
981
|
-
function
|
|
1048
|
+
function indexSingleMessage2(db, sessionId, message, shouldCommit = () => true, preparedSource) {
|
|
982
1049
|
if (!shouldCommit())
|
|
983
1050
|
return false;
|
|
984
1051
|
const source = preparedSource ?? getMessageSourceSnapshot(message);
|
|
985
|
-
const currentWatermark =
|
|
1052
|
+
const currentWatermark = getLastIndexedOrdinal2(db, sessionId);
|
|
986
1053
|
if (message.ordinal <= currentWatermark && isIndexSourceCurrent(db, sessionId, source)) {
|
|
987
1054
|
recordIndexedMessageTime(db, sessionId, message.ordinal, message.createdAt);
|
|
988
1055
|
return false;
|
|
989
1056
|
}
|
|
990
1057
|
const dirtyFloorBeforeAttempt = getDirtyIndexFloor(db, sessionId);
|
|
991
|
-
|
|
1058
|
+
markMessageIndexDirty2(db, sessionId, Math.min(message.ordinal, currentWatermark + 1));
|
|
992
1059
|
db.exec("BEGIN IMMEDIATE");
|
|
993
1060
|
const transactionStartedAt = performance.now();
|
|
994
1061
|
let committed = false;
|
|
@@ -1008,8 +1075,11 @@ function indexSingleMessage(db, sessionId, message, shouldCommit = () => true, p
|
|
|
1008
1075
|
}
|
|
1009
1076
|
}
|
|
1010
1077
|
}
|
|
1011
|
-
function
|
|
1012
|
-
return indexItemsAfterOrdinal(db, sessionId, messages, finalWatermark,
|
|
1078
|
+
function indexMessagesAfterOrdinal2(db, sessionId, messages, _lastIndexedOrdinal, finalWatermark = messages.length) {
|
|
1079
|
+
return indexItemsAfterOrdinal(db, sessionId, messages, finalWatermark, toMessageIndexSource2);
|
|
1080
|
+
}
|
|
1081
|
+
function indexSourcesAfterOrdinal2(db, sessionId, sources, finalWatermark) {
|
|
1082
|
+
return indexItemsAfterOrdinal(db, sessionId, sources, finalWatermark, (source) => source);
|
|
1013
1083
|
}
|
|
1014
1084
|
function indexItemsAfterOrdinal(db, sessionId, items, finalWatermark, toSource) {
|
|
1015
1085
|
const now = Date.now();
|
|
@@ -1019,7 +1089,7 @@ function indexItemsAfterOrdinal(db, sessionId, items, finalWatermark, toSource)
|
|
|
1019
1089
|
const transactionStartedAt = performance.now();
|
|
1020
1090
|
let committed = false;
|
|
1021
1091
|
try {
|
|
1022
|
-
const currentWatermark =
|
|
1092
|
+
const currentWatermark = getLastIndexedOrdinal2(db, sessionId);
|
|
1023
1093
|
const dirtyFloor = getDirtyIndexFloor(db, sessionId);
|
|
1024
1094
|
const effectiveWatermark = dirtyFloor === null ? currentWatermark : Math.min(currentWatermark, Math.max(0, dirtyFloor - 1));
|
|
1025
1095
|
if (dirtyFloor !== null && dirtyFloor <= currentWatermark && !messageFtsOrdinalRangeIsMapped(db, sessionId, dirtyFloor, Math.min(currentWatermark, finalWatermark))) {
|
|
@@ -1173,7 +1243,7 @@ function sweepOrphanedOpenCodeMessageIndexesInBackground(db, openReadableOpenCod
|
|
|
1173
1243
|
AND message_history_index.updated_at > ?
|
|
1174
1244
|
)
|
|
1175
1245
|
LIMIT 1`);
|
|
1176
|
-
const eligibleSessionIds = missingSessionIds.filter((sessionId) => stillEligible.get(sessionId, cutoff));
|
|
1246
|
+
const eligibleSessionIds = missingSessionIds.filter((sessionId) => !sessionExists.get(sessionId) && stillEligible.get(sessionId, cutoff));
|
|
1177
1247
|
deleted = deleteSessionScopedRows(db, eligibleSessionIds, harness);
|
|
1178
1248
|
persistMessageHistoryOrphanSweepState(db, nextCursor, completedAt, harness);
|
|
1179
1249
|
db.exec("COMMIT");
|
|
@@ -1196,8 +1266,8 @@ function sweepOrphanedOpenCodeMessageIndexesInBackground(db, openReadableOpenCod
|
|
|
1196
1266
|
closeQuietly(openCodeDb);
|
|
1197
1267
|
}
|
|
1198
1268
|
}
|
|
1199
|
-
function
|
|
1269
|
+
function sweepOrphanedOpenCodeMessageIndexes2(db, openReadableOpenCodeDb, options = {}) {
|
|
1200
1270
|
return withoutSqliteTransformPass2(() => withSqliteBackgroundWriter2(() => sweepOrphanedOpenCodeMessageIndexesInBackground(db, openReadableOpenCodeDb, options)));
|
|
1201
1271
|
}
|
|
1202
1272
|
|
|
1203
|
-
export { BoundedSessionMap, LkgRecoveryFenceError, clearLkgFenceProcessState, lkgFenceRequiresRebuild, lkgRecoveryFenceUnclean, ownsLkgDirtyFence, invalidateCleanLkgRecoveryFence, markLkgRecoveryDirty, commitLkgWithRecoveryFence, clearLkgRecoveryFence, readSessionActivity, observeSessionActivity, backfillSessionActivity, deleteSessionScopedRows, clearCompressionDepth, clearCompressionDepthRange,
|
|
1273
|
+
export { BoundedSessionMap, LkgRecoveryFenceError, clearLkgFenceProcessState, lkgFenceRequiresRebuild, lkgRecoveryFenceUnclean, ownsLkgDirtyFence, invalidateCleanLkgRecoveryFence, markLkgRecoveryDirty, commitLkgWithRecoveryFence, clearLkgRecoveryFence, readSessionActivity, observeSessionActivity, backfillSessionActivity, deleteSessionScopedRows, clearCompressionDepth, clearCompressionDepthRange, MESSAGE_INDEX_MAX_FTS_BYTES2, messageIndexSkipKey2, toMessageIndexSource2, getMessageIndexSourceIdentity2, isMessageIndexSourceCurrent2, getLastIndexedOrdinal2, getIndexedMessageCorpusSize2, markMessageIndexDirty2, getMessageIndexReconciliationStartOrdinal2, isMessageIndexReconciledThrough2, deleteIndexedMessage2, clearIndexedMessagesInTransaction2, clearIndexedMessages2, getIndexableContent2, indexSingleMessage2, indexMessagesAfterOrdinal2, indexSourcesAfterOrdinal2, sweepOrphanedOpenCodeMessageIndexes2 };
|