@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.
Files changed (30) hide show
  1. package/dist/auto-search-worker.js +3 -3
  2. package/dist/compaction-marker-candidates-cd17s4ys.js +18 -0
  3. package/dist/compaction-marker-candidates-worker.js +24 -0
  4. package/dist/{embedding-backfill-scywarbn.js → embedding-backfill-r7n7dj50.js} +4 -4
  5. package/dist/{index-vakawmbc.js → index-2apf1afe.js} +5 -20
  6. package/dist/index-399p688g.js +19 -0
  7. package/dist/{index-0rasmwm8.js → index-57njcjax.js} +6 -6
  8. package/dist/{index-fqb1bddn.js → index-590pwxvr.js} +14 -3
  9. package/dist/{index-kjd1fj55.js → index-9n88gmpf.js} +45 -7
  10. package/dist/{index-b2anqqad.js → index-9ygacw4e.js} +101 -31
  11. package/dist/{index-p5zesr4e.js → index-a1jmtv6r.js} +3 -3
  12. package/dist/{index-28vnkyy7.js → index-bv2r9rpa.js} +57 -30
  13. package/dist/{index-r874cgmv.js → index-g1csz24n.js} +1 -1
  14. package/dist/index-g3600tpw.js +212 -0
  15. package/dist/{index-g7hndmqm.js → index-g7984a4r.js} +4 -2
  16. package/dist/{index-rd53pk0h.js → index-mzn6t38b.js} +1 -1
  17. package/dist/{index-rdtgp48t.js → index-xvm5cdyn.js} +1 -1
  18. package/dist/index.js +13572 -12370
  19. package/dist/message-index-2damq13v.js +56 -0
  20. package/dist/{message-index-bounded-110sb4fm.js → message-index-bounded-0qa5eacp.js} +16 -15
  21. package/dist/migration-worker.js +3 -3
  22. package/dist/{project-embedding-registry-64t0mw8y.js → project-embedding-registry-fzc4eb29.js} +3 -3
  23. package/dist/raw-ordinal-warmup-worker.js +22 -5
  24. package/dist/{read-session-chunk-rvmc25n5.js → read-session-chunk-q05ztqg5.js} +4 -3
  25. package/dist/{read-session-raw-npx3920c.js → read-session-raw-527m0yxx.js} +2 -1
  26. package/dist/{search-7z3w8pmz.js → search-5m0jjf29.js} +11 -10
  27. package/dist/{storage-tags-kjnsqbdb.js → storage-tags-1b2w0wst.js} +1 -1
  28. package/dist/subagent-entry.js +13 -11
  29. package/package.json +2 -2
  30. /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-scywarbn.js"),
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-64t0mw8y.js"),
24
- import("./search-7z3w8pmz.js"),
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-rdtgp48t.js";
4
- import"./index-r874cgmv.js";
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-g7hndmqm.js";
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-rd53pk0h.js";
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-r874cgmv.js";
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-rdtgp48t.js";
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
- getIndexedMessageCorpusSize
79
- } from "./index-b2anqqad.js";
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 = getIndexedMessageCorpusSize(args.db, args.sessionId, cutoff);
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-kjd1fj55.js";
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-vakawmbc.js";
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 rows = floor > 0 ? db.prepare(`SELECT type, message_id, tool_owner_message_id, token_count, input_token_count, reasoning_token_count
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
- AND tool_owner_message_id LIKE 'pi-msg-%'
2601
- ORDER BY tag_number ASC`).all(sessionId).filter(isPiFallbackToolOwnerTag);
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-fqb1bddn.js";
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 MESSAGE_INDEX_MAX_FTS_BYTES = 64 * 1024;
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 messageIndexSkipKey = (sessionId, messageId) => `message_index_skip:${JSON.stringify([sessionId, messageId])}`;
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 toMessageIndexSource(message) {
857
- const content = getIndexableContent(message.role, message.parts);
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 toMessageIndexSource(message);
912
+ return toMessageIndexSource2(message);
870
913
  }
871
- function getMessageIndexSourceIdentity(message) {
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 isMessageIndexSourceCurrent(db, sessionId, message) {
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 > MESSAGE_INDEX_MAX_FTS_BYTES) {
893
- skipStatement(db, "INSERT INTO schema_migrations_meta(key,value) VALUES (?,?) ON CONFLICT(key) DO UPDATE SET value=excluded.value").run(messageIndexSkipKey(sessionId, source.id), JSON.stringify({
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(messageIndexSkipKey(sessionId, source.id));
945
+ skipStatement(db, "DELETE FROM schema_migrations_meta WHERE key=?").run(messageIndexSkipKey2(sessionId, source.id));
903
946
  return source.content;
904
947
  }
905
- function getLastIndexedOrdinal(db, sessionId) {
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 getIndexedMessageCorpusSize(db, sessionId, maxOrdinal) {
910
- const watermark = getLastIndexedOrdinal(db, sessionId);
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 markMessageIndexDirty(db, sessionId, floorOrdinal) {
960
+ function markMessageIndexDirty2(db, sessionId, floorOrdinal) {
918
961
  const dirtyFloor = Math.max(1, Math.floor(floorOrdinal));
919
- getUpsertDirtyFloorStatement(db).run(sessionId, getLastIndexedOrdinal(db, sessionId), dirtyFloor, Date.now(), getHarness2());
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 getMessageIndexReconciliationStartOrdinal(db, sessionId) {
929
- const watermark = getLastIndexedOrdinal(db, sessionId);
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 isMessageIndexReconciledThrough(db, sessionId, finalWatermark) {
976
+ function isMessageIndexReconciledThrough2(db, sessionId, finalWatermark) {
934
977
  const dirtyFloor = getDirtyIndexFloor(db, sessionId);
935
- return getLastIndexedOrdinal(db, sessionId) >= finalWatermark && dirtyFloor === null;
978
+ return getLastIndexedOrdinal2(db, sessionId) >= finalWatermark && dirtyFloor === null;
936
979
  }
937
- function getIndexableContent(role, parts) {
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 = getLastIndexedOrdinal(db, sessionId);
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 indexSingleMessage(db, sessionId, message, shouldCommit = () => true, preparedSource) {
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 = getLastIndexedOrdinal(db, sessionId);
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
- markMessageIndexDirty(db, sessionId, Math.min(message.ordinal, currentWatermark + 1));
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 indexMessagesAfterOrdinal(db, sessionId, messages, _lastIndexedOrdinal, finalWatermark = messages.length) {
1012
- return indexItemsAfterOrdinal(db, sessionId, messages, finalWatermark, toMessageIndexSource);
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 = getLastIndexedOrdinal(db, sessionId);
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 sweepOrphanedOpenCodeMessageIndexes(db, openReadableOpenCodeDb, options = {}) {
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, MESSAGE_INDEX_MAX_FTS_BYTES, messageIndexSkipKey, getMessageIndexSourceIdentity, isMessageIndexSourceCurrent, getLastIndexedOrdinal, getIndexedMessageCorpusSize, markMessageIndexDirty, getMessageIndexReconciliationStartOrdinal, isMessageIndexReconciledThrough, getIndexableContent, indexSingleMessage, indexMessagesAfterOrdinal, sweepOrphanedOpenCodeMessageIndexes };
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 };