@cortexkit/opencode-magic-context 0.49.13 → 0.49.14

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 (63) hide show
  1. package/dist/auto-search-worker.js +1 -1
  2. package/dist/chunk-embedding-write-worker.js +1 -1
  3. package/dist/{context-azqk0vfd.js → context-cpxqpkzv.js} +31 -13
  4. package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
  5. package/dist/features/magic-context/storage-tags.d.ts +2 -0
  6. package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
  7. package/dist/hooks/magic-context/apply-operations.d.ts +3 -1
  8. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  9. package/dist/hooks/magic-context/compartment-runner.d.ts +4 -0
  10. package/dist/hooks/magic-context/compartment-runner.d.ts.map +1 -1
  11. package/dist/hooks/magic-context/compartment-trigger.d.ts +1 -1
  12. package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
  13. package/dist/hooks/magic-context/degraded-pass-refusal.d.ts +2 -0
  14. package/dist/hooks/magic-context/degraded-pass-refusal.d.ts.map +1 -1
  15. package/dist/hooks/magic-context/pending-drop-eligibility.d.ts +14 -0
  16. package/dist/hooks/magic-context/pending-drop-eligibility.d.ts.map +1 -0
  17. package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
  18. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +1 -0
  19. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  20. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  21. package/dist/{index-wj6ht7nm.js → index-5591fg8y.js} +42 -16
  22. package/dist/{index-b16gpywn.js → index-944w16m0.js} +2 -2
  23. package/dist/{index-hnm8raee.js → index-kf4epshg.js} +2 -2
  24. package/dist/{index-2jr1smmh.js → index-t4q9zbbf.js} +5 -4
  25. package/dist/{index-v13skev1.js → index-thvnpfsv.js} +1 -1
  26. package/dist/{index-wz6mzzb1.js → index-tyckte5c.js} +3 -3
  27. package/dist/{index-sj89f3b0.js → index-w900fbhd.js} +100 -15
  28. package/dist/{index-aw1bh90w.js → index-xn6q9pg6.js} +2 -2
  29. package/dist/{index-qkd9zz0p.js → index-yxycg7fs.js} +1 -1
  30. package/dist/index.js +13 -13
  31. package/dist/{message-index-seaqpb7c.js → message-index-a6gztaqx.js} +3 -3
  32. package/dist/{message-index-bounded-vm64mqpq.js → message-index-bounded-vtgpq6b4.js} +3 -3
  33. package/dist/migration-worker.js +1 -1
  34. package/dist/raw-ordinal-warmup-worker.js +3 -3
  35. package/dist/{read-session-chunk-ax05f7gr.js → read-session-chunk-3ae3nfdn.js} +2 -2
  36. package/dist/{recomp-orchestrator-dmbeadwt.js → recomp-orchestrator-xqb9gwgm.js} +6 -6
  37. package/dist/{search-5yd5ytzs.js → search-deajrd90.js} +4 -4
  38. package/dist/{storage-tags-yygfb9c8.js → storage-tags-s5bg1ahx.js} +1 -1
  39. package/dist/{transform-postprocess-phase-72v86syx.js → transform-postprocess-phase-k5t63qm5.js} +6 -6
  40. package/dist/v2/auto-search-worker.js +1 -1
  41. package/dist/v2/chunk-embedding-write-worker.js +1 -1
  42. package/dist/v2/{context-w055w17c.js → context-k4jrq71s.js} +153 -27
  43. package/dist/v2/hidden-completion.d.ts +3 -2
  44. package/dist/v2/hidden-completion.d.ts.map +1 -1
  45. package/dist/v2/{message-index-bounded-wepg5723.js → message-index-bounded-rxxznd34.js} +3 -3
  46. package/dist/v2/{message-index-gcmd0ng0.js → message-index-f947qtbz.js} +3 -3
  47. package/dist/v2/migration-worker.js +1 -1
  48. package/dist/v2/raw-ordinal-warmup-worker.js +3 -3
  49. package/dist/v2/{read-session-chunk-hr3w5bjk.js → read-session-chunk-rq9nx1nn.js} +2 -2
  50. package/dist/v2/{recomp-orchestrator-ca7qt75a.js → recomp-orchestrator-1j1nqrrr.js} +5 -5
  51. package/dist/v2/{search-c86dcv14.js → search-n8wqxb1j.js} +4 -4
  52. package/dist/v2/{server-xh7jar6k.js → server-cfbr1s2x.js} +2 -2
  53. package/dist/v2/{server-t4prcjc1.js → server-e298hswg.js} +1 -1
  54. package/dist/v2/{server-m97brnat.js → server-ehyava47.js} +2 -2
  55. package/dist/v2/{server-b81w6sw3.js → server-fnqxt9j6.js} +5 -4
  56. package/dist/v2/{server-n8ch9683.js → server-kmbarfmn.js} +1 -1
  57. package/dist/v2/server.js +2 -2
  58. package/dist/v2/{storage-tags-a2gq6dw7.js → storage-tags-hcc2adpf.js} +1 -1
  59. package/dist/v2/{wrapup-orchestrator-e1a2w6jh.js → wrapup-orchestrator-hkv8apcc.js} +5 -5
  60. package/dist/{wrapup-orchestrator-2051r6qm.js → wrapup-orchestrator-kxqj4rwh.js} +7 -7
  61. package/package.json +1 -1
  62. /package/dist/{index-fwefky9w.js → index-mht7bq0z.js} +0 -0
  63. /package/dist/v2/{server-bxpwy6fy.js → server-atbc19ab.js} +0 -0
@@ -143,7 +143,7 @@ import {
143
143
  getDroppedTagsByNumbers2,
144
144
  getMaxDroppedTagNumber2,
145
145
  getTagById2
146
- } from "./index-fwefky9w.js";
146
+ } from "./index-mht7bq0z.js";
147
147
  import {
148
148
  observeTemporalDecisions,
149
149
  stableStringify
@@ -296,7 +296,7 @@ import {
296
296
  readRawSessionMessageById2,
297
297
  readSessionChunk2,
298
298
  readRawSessionSeedTail2
299
- } from "./index-b16gpywn.js";
299
+ } from "./index-944w16m0.js";
300
300
  import {
301
301
  getMeasuredToolDefinitionTokens
302
302
  } from "./index-n6m03s3n.js";
@@ -313,7 +313,7 @@ import {
313
313
  runSqliteOptimize,
314
314
  openDatabase,
315
315
  openCurrentDatabase
316
- } from "./index-qkd9zz0p.js";
316
+ } from "./index-yxycg7fs.js";
317
317
  import {
318
318
  registerOwnRpcServerInstance,
319
319
  rpcPortDir,
@@ -503,7 +503,7 @@ import {
503
503
  snapRangeToCompartments,
504
504
  getActiveCompartmentRun,
505
505
  startCompartmentAgent
506
- } from "./index-2jr1smmh.js";
506
+ } from "./index-t4q9zbbf.js";
507
507
  import {
508
508
  embedPauseBySession,
509
509
  embedRunStateBySession,
@@ -560,7 +560,7 @@ import {
560
560
  indexSingleMessage2,
561
561
  indexMessagesAfterOrdinal2,
562
562
  sweepOrphanedOpenCodeMessageIndexes2
563
- } from "./index-v13skev1.js";
563
+ } from "./index-thvnpfsv.js";
564
564
  import {
565
565
  renderUserFacingFailure,
566
566
  userFacingFailureCode,
@@ -669,7 +669,7 @@ import {
669
669
  resolveMemoriesByIdsForSearch2,
670
670
  unifiedSearch2,
671
671
  formatSearchResults2
672
- } from "./index-aw1bh90w.js";
672
+ } from "./index-xn6q9pg6.js";
673
673
  import {
674
674
  flushIgnoredMessages2,
675
675
  clearIgnoredMessages2,
@@ -679,7 +679,7 @@ import {
679
679
  import {
680
680
  setRecompStarting2,
681
681
  setRecompTerminal2
682
- } from "./index-hnm8raee.js";
682
+ } from "./index-kf4epshg.js";
683
683
  import {
684
684
  makeToolCompositeKey,
685
685
  searchMessageHistoryOffThread,
@@ -715,6 +715,8 @@ import {
715
715
  replayCavemanCompression,
716
716
  DegradedPassRefusalError,
717
717
  degradedPassError,
718
+ pendingDropEligibilityKey,
719
+ createPendingDropEligibilityCache,
718
720
  applyFlushedStatuses,
719
721
  prewarmTagOwners,
720
722
  waitForTagOwners,
@@ -730,7 +732,7 @@ import {
730
732
  abortSessionFailClosed2,
731
733
  evaluateEmergencyFailClosed2,
732
734
  runPostTransformPhase2
733
- } from "./index-sj89f3b0.js";
735
+ } from "./index-w900fbhd.js";
734
736
  import {
735
737
  ANNOUNCEMENT_VERSION2,
736
738
  ANNOUNCEMENT_FEATURES2,
@@ -7016,7 +7018,8 @@ function currentManifest(text) {
7016
7018
  return start < 0 ? text : text.slice(start);
7017
7019
  }
7018
7020
  function parseMapMemoriesCompletion(text, completion, expectedIds) {
7019
- return validateMapMemoriesManifest(currentManifest(assistantText(completion.messages ?? []) || text), expectedIds);
7021
+ const source = /<mappings\b/i.test(text) ? text : assistantText(completion.messages ?? []) || text;
7022
+ return validateMapMemoriesManifest(currentManifest(source), expectedIds);
7020
7023
  }
7021
7024
  function validateClientMapMemories(messages, expectedIds) {
7022
7025
  if (hasLengthCappedOutput(messages)) {
@@ -13841,12 +13844,12 @@ function buildTriggerInMemoryTail(db, sessionId, messages) {
13841
13844
  function getProactiveCompartmentTriggerPercentage(executeThresholdPercentage) {
13842
13845
  return Math.max(0, executeThresholdPercentage - PROACTIVE_TRIGGER_OFFSET_PERCENTAGE);
13843
13846
  }
13844
- function estimateProjectedPostDropPercentage(db, sessionId, usage, activeTags, keepReasoningTokens, clearedReasoningThroughTag, canClearReasoning, liveBudgetCutoff) {
13847
+ function estimateProjectedPostDropPercentage(db, sessionId, usage, activeTags, keepReasoningTokens, clearedReasoningThroughTag, canClearReasoning, liveBudgetCutoff, eligiblePendingDropTagIds) {
13845
13848
  const totalActiveBytes = activeTags.reduce((sum, tag) => sum + tag.byteSize + tag.reasoningByteSize, 0);
13846
13849
  if (totalActiveBytes === 0)
13847
13850
  return null;
13848
13851
  let droppableBytes = 0;
13849
- const pendingDrops = getPendingOps(db, sessionId).filter((op) => op.operation === "drop");
13852
+ const pendingDrops = getPendingOps(db, sessionId).filter((op) => op.operation === "drop" && eligiblePendingDropTagIds?.has(op.tagId) === true);
13850
13853
  const pendingDropTagIds = new Set(pendingDrops.map((op) => op.tagId));
13851
13854
  if (pendingDrops.length > 0) {
13852
13855
  droppableBytes += activeTags.filter((tag) => pendingDropTagIds.has(tag.tagNumber)).reduce((sum, tag) => sum + tag.byteSize + tag.reasoningByteSize, 0);
@@ -13975,7 +13978,7 @@ function getUnsummarizedTailInfo(db, sessionId, triggerBudget, usage, executeThr
13975
13978
  function formatProjectedPostDropPercentage(value) {
13976
13979
  return value === null ? "none" : `${value.toFixed(1)}%`;
13977
13980
  }
13978
- function checkCompartmentTrigger(db, sessionId, sessionMeta, usage, _previousPercentage, executeThresholdPercentage, triggerBudget, keepReasoningTokens, commitClusterTrigger, preloadedActiveTags, contextLimit, inMemoryTail, taggerFloorOverride, reasoningProjection, reclaimRide) {
13981
+ function checkCompartmentTrigger(db, sessionId, sessionMeta, usage, _previousPercentage, executeThresholdPercentage, triggerBudget, keepReasoningTokens, commitClusterTrigger, preloadedActiveTags, contextLimit, inMemoryTail, taggerFloorOverride, reasoningProjection, reclaimRide, eligiblePendingDropTagIds) {
13979
13982
  if (sessionMeta.compartmentInProgress) {
13980
13983
  sessionLog2(sessionId, `compartment trigger: skipped — historian already in progress (usage=${usage.percentage.toFixed(1)}%)`);
13981
13984
  return { shouldFire: false };
@@ -14039,7 +14042,7 @@ function checkCompartmentTrigger(db, sessionId, sessionMeta, usage, _previousPer
14039
14042
  return { shouldFire: false };
14040
14043
  }
14041
14044
  const canClearReasoning = reasoningProjection?.canClearReasoning ?? modelAcceptsEmptyContent(reasoningProjection?.providerID);
14042
- const projectedPostDropPercentage = estimateProjectedPostDropPercentage(db, sessionId, usage, preloadedActiveTags ?? getActiveTagsBySession2(db, sessionId), keepReasoningTokens, sessionMeta.clearedReasoningThroughTag, canClearReasoning, reasoningProjection?.budgetCutoff);
14045
+ const projectedPostDropPercentage = estimateProjectedPostDropPercentage(db, sessionId, usage, preloadedActiveTags ?? getActiveTagsBySession2(db, sessionId), keepReasoningTokens, sessionMeta.clearedReasoningThroughTag, canClearReasoning, reasoningProjection?.budgetCutoff, eligiblePendingDropTagIds);
14043
14046
  const relativePostDropTarget = executeThresholdPercentage * POST_DROP_TARGET_RATIO;
14044
14047
  const rideLabel = reclaimRide ? reclaimRideLabel(reclaimRide) : "ride=none";
14045
14048
  const dropsCanLand = reclaimRide !== undefined && hasReclaimRide(reclaimRide);
@@ -16258,7 +16261,7 @@ function registerRpcHandlers(rpcServer, args) {
16258
16261
  const db = readDatabase();
16259
16262
  if (!db)
16260
16263
  return { ok: false, error: "db unavailable" };
16261
- const { runManagedRecomp } = await importPluginModule(() => import("./recomp-orchestrator-dmbeadwt.js"));
16264
+ const { runManagedRecomp } = await importPluginModule(() => import("./recomp-orchestrator-xqb9gwgm.js"));
16262
16265
  const { sendIgnoredMessage } = await importPluginModule(() => import("./send-session-notification-24r4esbh.js"));
16263
16266
  log2(`[rpc] recomp requested for session ${sessionId}`);
16264
16267
  if (!args.client && !args.hiddenCompletionExecutor) {
@@ -16343,7 +16346,7 @@ function registerRpcHandlers(rpcServer, args) {
16343
16346
  const db = readDatabase();
16344
16347
  if (!db)
16345
16348
  return { ok: false, error: "db unavailable" };
16346
- const { runManagedWrapup } = await importPluginModule(() => import("./wrapup-orchestrator-2051r6qm.js"));
16349
+ const { runManagedWrapup } = await importPluginModule(() => import("./wrapup-orchestrator-kxqj4rwh.js"));
16347
16350
  const model = liveSessionState.liveModelBySession.get(sessionId);
16348
16351
  const contextLimit = model ? resolveContextLimit(model.providerID, model.modelID, { db, sessionID: sessionId }) : 128000;
16349
16352
  const ctx = {
@@ -23682,6 +23685,13 @@ async function runCompartmentPhaseImpl(args) {
23682
23685
  return snapshot !== null && hasRunnableCompartmentWindow(snapshot);
23683
23686
  }
23684
23687
  async function awaitCompartmentRun(activeRun, reason) {
23688
+ await Promise.resolve();
23689
+ if (activeRun.inlineJoinTimedOutBudgetMs !== undefined && !activeRun.settled) {
23690
+ historianJoinTimedOut = true;
23691
+ historianJoinBudgetMs = activeRun.inlineJoinTimedOutBudgetMs;
23692
+ sessionLog2(args.sessionId, "transform: compartment inline join budget already exhausted for this run — not waiting again");
23693
+ return "timed_out";
23694
+ }
23685
23695
  sessionLog2(args.sessionId, reason);
23686
23696
  const timeoutMs = resolveHistorianInlineJoinBudget(args.historianTimeoutMs);
23687
23697
  historianJoinBudgetMs = timeoutMs;
@@ -23697,6 +23707,7 @@ async function runCompartmentPhaseImpl(args) {
23697
23707
  clearTimeout(timer);
23698
23708
  }
23699
23709
  if (result === "timeout") {
23710
+ activeRun.inlineJoinTimedOutBudgetMs = timeoutMs;
23700
23711
  historianJoinTimedOut = true;
23701
23712
  sessionLog2(args.sessionId, `transform: compartment await timed out after ${timeoutMs}ms — proceeding without waiting`);
23702
23713
  return "timed_out";
@@ -23984,6 +23995,7 @@ function createTransform(deps) {
23984
23995
  memorySyncRequestedSessions: deps.rustMemorySyncRequestedSessions
23985
23996
  }) : undefined;
23986
23997
  let entryReuse;
23998
+ const pendingDropEligibility = createPendingDropEligibilityCache();
23987
23999
  const projectEntry = createLkgEntryProjector({
23988
24000
  onReuse: (stats) => {
23989
24001
  entryReuse = stats;
@@ -24554,6 +24566,18 @@ Historian previously failed ${historianFailureState.failureCount} time(s), so Ma
24554
24566
  prewarmTagOwners(db, sessionId, ownerRatio);
24555
24567
  const tagOwnersReady = isTagOwnerSummaryReady2(db, sessionId, ownerRatio);
24556
24568
  let triggerBoundarySnapshot;
24569
+ let dropProjectionEmergency = contextUsageEarly.percentage >= 95;
24570
+ const dropProjectionKey = () => pendingDropEligibilityKey(db, sessionId, lkgInput, {
24571
+ currentTurnId,
24572
+ model: modelForBudget,
24573
+ protectedTokens: deps.protectedTokens,
24574
+ protectedTokenTierOverrides: deps.protectedTokenTierOverrides,
24575
+ protectedTools: deps.protectedTools,
24576
+ keepReasoningTokens: deps.keepReasoningTokens,
24577
+ usableSoft: windowGeometry?.usableSoft ?? boundaryContextLimit,
24578
+ emergency: dropProjectionEmergency,
24579
+ clearedReasoningThroughTag: sessionMeta?.clearedReasoningThroughTag
24580
+ });
24557
24581
  if (fullFeatureMode && !compactionOff && historianRunnable && tagOwnersReady && !sessionMeta.compartmentInProgress) {
24558
24582
  const tTrigger = performance.now();
24559
24583
  try {
@@ -24566,7 +24590,7 @@ Historian previously failed ${historianFailureState.failureCount} time(s), so Ma
24566
24590
  force: contextUsageEarly.percentage >= forceMaterializationPercentage && (contextUsageEarly.percentage >= 95 || getEmergencyInputSample(db, sessionId) === 0),
24567
24591
  explicitFlush: deps.pendingMaterializationSessions.has(sessionId),
24568
24592
  publishedHistory: isCacheBusting
24569
- });
24593
+ }, pendingDropEligibility.read(sessionId, dropProjectionKey()));
24570
24594
  if (triggerResult.shouldFire) {
24571
24595
  sessionLog2(sessionId, `compartment trigger: firing (reason=${triggerResult.reason})`);
24572
24596
  updateSessionMeta(db, sessionId, { compartmentInProgress: true });
@@ -24872,6 +24896,7 @@ Historian previously failed ${historianFailureState.failureCount} time(s), so Ma
24872
24896
  const protectedTagIds = protectedTagNumbers;
24873
24897
  const protectedCutoff = protectionWindow.cutoff;
24874
24898
  const tPostProcess = performance.now();
24899
+ dropProjectionEmergency = thinkingFitRetries.has(sessionId) || contextUsage.percentage >= 95;
24875
24900
  const postTransformResult = await runPostTransformPhase2({
24876
24901
  opencode2: deps.storeGeneration === "v2",
24877
24902
  normalizeRecoveryTail,
@@ -24929,6 +24954,7 @@ Historian previously failed ${historianFailureState.failureCount} time(s), so Ma
24929
24954
  lastHeuristicsTurnId: deps.lastHeuristicsTurnId,
24930
24955
  keepReasoningTokens: resolveKeepReasoningTokens(deps.keepReasoningTokens, currentModelKeyForBoundary),
24931
24956
  protectedTagIds,
24957
+ onPendingDropEligibility: (eligible) => pendingDropEligibility.record(sessionId, dropProjectionKey(), eligible),
24932
24958
  protectedTagNumbers,
24933
24959
  protectedCutoff,
24934
24960
  protectedCount: protectionWindow.status.protectedCount,
@@ -23,7 +23,7 @@ import {
23
23
  TAG_SELECT_COLUMNS2,
24
24
  getCandidateToolOwners2,
25
25
  pickNearestPriorOwner2
26
- } from "./index-fwefky9w.js";
26
+ } from "./index-mht7bq0z.js";
27
27
  import {
28
28
  OMO_INTERNAL_INITIATOR_MARKER,
29
29
  isSystemDirective,
@@ -7292,4 +7292,4 @@ function readRawSessionSeedTail2(sessionId, boundaryId, onQuery) {
7292
7292
  });
7293
7293
  }
7294
7294
 
7295
- export { isToolFreeHiddenAgent, TOOL_USE_DISABLED, ZEN_READ_AGENT_SUFFIX, needsBlockedRead, withBlockedReadInstruction, rememberV1HiddenRun, shapeV1HiddenMessage, expandToolPart, markHostUnservedRow, retreatPastHostUnservedRows, snapTerminalCompartmentToServedRow, isHostRenderedSystemMessage, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, invalidateTrueRawTokenCache, stripSystemInjection, isTextPart, isToolPartWithOutput, isFilePart, buildFileSourceContent, toolPartHasUserAnswer, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, recordToolParameters, createDroppedInputGuard, assertExecutableToolInput, createDroppedInputToolExecuteBeforeHook, isEditTool, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, MAX_EXECUTE_THRESHOLD, escalationBands, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, getProtectionWindowForSession, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, withReplayEnvelopeSnapshot, invalidateReplayEnvelopeSnapshot, isRustMarkerAdmissionFenced, setRustMarkerAdmissionFence, ReplayDocumentError, readReplayEnvelope, readReplayDocument, updateReplayDocument, writeReplayDocument, isEmergencyRecoveryArmed, isProviderOverflowReconfirmed, isProviderOverflowFailClosedProven, getEmergencyRecoveryArmedAt, describeProtectedTailDrainBudgetSkip, loadPersistedUsage, loadProtectedTailMeta, markProtectedTailPolicyV3Seeded, recordProtectedTailPublicationFloor, recordProtectedTailNoEligibleHead, resetProtectedTailNoEligibleHead, getWrapupInProgressState, isWrapupInProgress, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, getProtectedTailDrainBudgetSkip, reserveProtectedTailDrainTokens, clearEmergencyDrainLatch, recordHistorianDrainFailure, clearHistorianDrainFailure, rollbackProtectedTailDrainReservation, getPersistedReasoningWatermark, setPersistedReasoningWatermark, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, getChannel2NudgeClaim, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, removeNoteNudgeAnchorByMessageId, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, removeAutoSearchHintDecisionByMessageId, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, loadTransformPassStateSnapshot, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getDeferredClearedCompactionMarkerState, retireDeferredClearedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, removeStrippedPlaceholderId, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, armThinkingBindingRecovery, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, demoteTrailingBlankKeepDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, parseProcessedImageMarkers, serializeProcessedImageMarkers, getProcessedImageMarkers, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, setPendingCompactionMarkerState, replacePendingCompactionMarkerStateIf, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, logPiCompactionMarkerClear, getSessionsWithPendingMarker, setSessionWorkMetrics, getObservedEpochFloor, resolveEpochFloorForPass, getReasoningRemovalState, addRemovedReasoningIds, markDropLeavesReasoning, detectThinkingBindingMismatch, detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, modelAcceptsEmptyContent, isAnthropicFamilyRoute, neutralizeDroppedReasoningPart, restoreNeutralizedReasoningPart, isNeutralizedReasoningPart, variantChangeBustsProviderCache, makeSentinel, makeWholeMessageSentinel, isSentinel, replaySentinelByMessageIds, isInActiveAnthropicTurn, activeAnthropicTurnStart, hasAnthropicReasoning, stripSystemInjectedMessages, stripDroppedPlaceholderMessages, replayClearedReasoning, replayStrippedInlineThinking, clearOldReasoning, stripClearedReasoning, stripInlineThinking, findReasoningBearingAssistantIds, findLatestAssistantReasoningMutationExemptMessage, snapshotTrailingBlankSourceDecisions, findTrailingBlankDecisionCandidates, applyFrozenTrailingBlankDecisions, stripReasoningFromAssistantIds, findMergedReasoningStripDecisions, stripReasoningFromMergedAssistants, getEmptyImageParts, stripProcessedImages, projectOpencodeReasoningBudgetCutoff, DEFAULT_KEEP_REASONING_TOKENS, resolveKeepReasoningTokens, reasoningStepCost, reasoningBudgetCutoff, reasoningTextAndOpaque, opencodeReasoningBudgetCutoff, describeFinalWireTail, estimatePartImageTokens, estimateMessageTokens, wireContentBytes, createFinalWireUsageTracker, estimateFinalWireInputTokens, estimateAppendedWireTokens, SKELETON_REAL_INPUT_MAX_BYTES, partHasCompletedResult, extractToolCallObservation, ToolMutationBatch, createToolDropTarget, resolveHostServedBoundaryId2, hasRawMessageProvider2, setRawMessageProvider2, setBoundedRawMessageProvider2, withRawMessageProvider2, cleanUserText2, withRawSessionMessageCache2, readRawSessionMessages2, readRawSessionMessagePage2, getRawSessionMessageOrdinalCount2, RAW_MESSAGE_VISIT_PAGE_SIZE2, visitRawSessionMessages2, visitRawSessionMessagesAsync2, readRawSessionMessageRange2, prepareRawSessionOrdinals2, primeTailRawMessageCache2, getCachedAbsoluteMessageCount2, primeInMemoryTailRawMessageCache2, readRawSessionMessageOrdinalPage2, getRawSessionStoredMessageCount2, readRawSessionMessageIdOrdinalsForRange2, readRawSessionMessageIdOrdinals2, readRawSessionMessagePartsById2, readRawSessionBoundaryEndpoints2, hasRawSessionMessageById2, readRawSessionMessageOrdinalById2, compareRawSessionMessageOrder2, readRawSessionMessageById2, getRawSessionMessageCount2, RAW_SESSION_TAG_KEY_PAGE_SIZE2, getRawSessionTagKeysThrough2, getLegacyProtectedTailStartOrdinal2, getProtectedTailStartOrdinal2, readSessionChunk2, getRawSessionMessageIdsThrough2, readRawSessionSeedTail2 };
7295
+ export { isToolFreeHiddenAgent, TOOL_USE_DISABLED, ZEN_READ_AGENT_SUFFIX, needsBlockedRead, withBlockedReadInstruction, rememberV1HiddenRun, shapeV1HiddenMessage, expandToolPart, markHostUnservedRow, retreatPastHostUnservedRows, snapTerminalCompartmentToServedRow, isHostRenderedSystemMessage, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, invalidateTrueRawTokenCache, stripSystemInjection, isTextPart, isToolPartWithOutput, isFilePart, buildFileSourceContent, toolPartHasUserAnswer, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, recordToolParameters, createDroppedInputGuard, assertExecutableToolInput, createDroppedInputToolExecuteBeforeHook, isEditTool, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, MAX_EXECUTE_THRESHOLD, escalationBands, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, readEpochFloorSnapshot, getProtectionWindowForSession, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, withReplayEnvelopeSnapshot, invalidateReplayEnvelopeSnapshot, isRustMarkerAdmissionFenced, setRustMarkerAdmissionFence, ReplayDocumentError, readReplayEnvelope, readReplayDocument, updateReplayDocument, writeReplayDocument, isEmergencyRecoveryArmed, isProviderOverflowReconfirmed, isProviderOverflowFailClosedProven, getEmergencyRecoveryArmedAt, describeProtectedTailDrainBudgetSkip, loadPersistedUsage, loadProtectedTailMeta, markProtectedTailPolicyV3Seeded, recordProtectedTailPublicationFloor, recordProtectedTailNoEligibleHead, resetProtectedTailNoEligibleHead, getWrapupInProgressState, isWrapupInProgress, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, getProtectedTailDrainBudgetSkip, reserveProtectedTailDrainTokens, clearEmergencyDrainLatch, recordHistorianDrainFailure, clearHistorianDrainFailure, rollbackProtectedTailDrainReservation, getPersistedReasoningWatermark, setPersistedReasoningWatermark, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, getChannel2NudgeClaim, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, removeNoteNudgeAnchorByMessageId, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, removeAutoSearchHintDecisionByMessageId, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, loadTransformPassStateSnapshot, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getDeferredClearedCompactionMarkerState, retireDeferredClearedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, removeStrippedPlaceholderId, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, armThinkingBindingRecovery, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, demoteTrailingBlankKeepDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, parseProcessedImageMarkers, serializeProcessedImageMarkers, getProcessedImageMarkers, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, setPendingCompactionMarkerState, replacePendingCompactionMarkerStateIf, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, logPiCompactionMarkerClear, getSessionsWithPendingMarker, setSessionWorkMetrics, getObservedEpochFloor, resolveEpochFloorForPass, getReasoningRemovalState, addRemovedReasoningIds, markDropLeavesReasoning, detectThinkingBindingMismatch, detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, modelAcceptsEmptyContent, isAnthropicFamilyRoute, neutralizeDroppedReasoningPart, restoreNeutralizedReasoningPart, isNeutralizedReasoningPart, variantChangeBustsProviderCache, makeSentinel, makeWholeMessageSentinel, isSentinel, replaySentinelByMessageIds, isInActiveAnthropicTurn, activeAnthropicTurnStart, hasAnthropicReasoning, stripSystemInjectedMessages, stripDroppedPlaceholderMessages, replayClearedReasoning, replayStrippedInlineThinking, clearOldReasoning, stripClearedReasoning, stripInlineThinking, findReasoningBearingAssistantIds, findLatestAssistantReasoningMutationExemptMessage, snapshotTrailingBlankSourceDecisions, findTrailingBlankDecisionCandidates, applyFrozenTrailingBlankDecisions, stripReasoningFromAssistantIds, findMergedReasoningStripDecisions, stripReasoningFromMergedAssistants, getEmptyImageParts, stripProcessedImages, projectOpencodeReasoningBudgetCutoff, DEFAULT_KEEP_REASONING_TOKENS, resolveKeepReasoningTokens, reasoningStepCost, reasoningBudgetCutoff, reasoningTextAndOpaque, opencodeReasoningBudgetCutoff, describeFinalWireTail, estimatePartImageTokens, estimateMessageTokens, wireContentBytes, createFinalWireUsageTracker, estimateFinalWireInputTokens, estimateAppendedWireTokens, SKELETON_REAL_INPUT_MAX_BYTES, partHasCompletedResult, extractToolCallObservation, ToolMutationBatch, createToolDropTarget, resolveHostServedBoundaryId2, hasRawMessageProvider2, setRawMessageProvider2, setBoundedRawMessageProvider2, withRawMessageProvider2, cleanUserText2, withRawSessionMessageCache2, readRawSessionMessages2, readRawSessionMessagePage2, getRawSessionMessageOrdinalCount2, RAW_MESSAGE_VISIT_PAGE_SIZE2, visitRawSessionMessages2, visitRawSessionMessagesAsync2, readRawSessionMessageRange2, prepareRawSessionOrdinals2, primeTailRawMessageCache2, getCachedAbsoluteMessageCount2, primeInMemoryTailRawMessageCache2, readRawSessionMessageOrdinalPage2, getRawSessionStoredMessageCount2, readRawSessionMessageIdOrdinalsForRange2, readRawSessionMessageIdOrdinals2, readRawSessionMessagePartsById2, readRawSessionBoundaryEndpoints2, hasRawSessionMessageById2, readRawSessionMessageOrdinalById2, compareRawSessionMessageOrder2, readRawSessionMessageById2, getRawSessionMessageCount2, RAW_SESSION_TAG_KEY_PAGE_SIZE2, getRawSessionTagKeysThrough2, getLegacyProtectedTailStartOrdinal2, getProtectedTailStartOrdinal2, readSessionChunk2, getRawSessionMessageIdsThrough2, readRawSessionSeedTail2 };
@@ -3,12 +3,12 @@ import {
3
3
  } from "./index-j75v2476.js";
4
4
  import {
5
5
  clearEmergencyRecovery
6
- } from "./index-b16gpywn.js";
6
+ } from "./index-944w16m0.js";
7
7
  import {
8
8
  requestPendingMaterialization,
9
9
  dropSlot,
10
10
  executeContextRecomp
11
- } from "./index-2jr1smmh.js";
11
+ } from "./index-t4q9zbbf.js";
12
12
  import {
13
13
  renderUserFacingFailure,
14
14
  userFacingFailureCode
@@ -92,7 +92,7 @@ import {
92
92
  getRawSessionTagKeysThrough2,
93
93
  getLegacyProtectedTailStartOrdinal2,
94
94
  readSessionChunk2
95
- } from "./index-b16gpywn.js";
95
+ } from "./index-944w16m0.js";
96
96
  import {
97
97
  getHarness2,
98
98
  harnessOwnsOpenCodeStore2
@@ -159,7 +159,7 @@ import {
159
159
  LATEST_SUPPORTED_VERSION,
160
160
  getPersistedSchemaVersion,
161
161
  openDatabase
162
- } from "./index-qkd9zz0p.js";
162
+ } from "./index-yxycg7fs.js";
163
163
  import {
164
164
  inRootAsyncContext2,
165
165
  Database2,
@@ -236,7 +236,7 @@ import {
236
236
  toMessageIndexSource2,
237
237
  clearIndexedMessagesInTransaction2,
238
238
  indexSourcesAfterOrdinal2
239
- } from "./index-v13skev1.js";
239
+ } from "./index-thvnpfsv.js";
240
240
  import {
241
241
  stripWellFormedLeadingTagPrefix,
242
242
  stripTagPrefix,
@@ -249,7 +249,7 @@ import {
249
249
  foldShrunkPartTags2,
250
250
  getTagNumberByMessageId2,
251
251
  getActiveTagsBySession2
252
- } from "./index-fwefky9w.js";
252
+ } from "./index-mht7bq0z.js";
253
253
  import {
254
254
  isStrictGapHealingMessage2,
255
255
  noteRawSessionSummaryRowWritten2,
@@ -21679,6 +21679,7 @@ function registerActiveCompartmentRun(sessionId, promise, kind = "other") {
21679
21679
  kind
21680
21680
  };
21681
21681
  const wrapped = promise.finally(() => {
21682
+ activeRun.settled = true;
21682
21683
  if (activeRuns.get(sessionId)?.promise === wrapped) {
21683
21684
  activeRuns.delete(sessionId);
21684
21685
  }
@@ -23,7 +23,7 @@ import {
23
23
  } from "./index-wafzvyhg.js";
24
24
  import {
25
25
  cleanUserText2
26
- } from "./index-b16gpywn.js";
26
+ } from "./index-944w16m0.js";
27
27
  import {
28
28
  recordMessageFtsRowid,
29
29
  recordIndexedMessageTime,
@@ -15,7 +15,7 @@ import {
15
15
  getActiveCompartmentRun,
16
16
  markActiveCompartmentRunPublished,
17
17
  registerActiveCompartmentRun
18
- } from "./index-2jr1smmh.js";
18
+ } from "./index-t4q9zbbf.js";
19
19
  import {
20
20
  inRootAsyncContext2
21
21
  } from "./index-wafzvyhg.js";
@@ -27,7 +27,7 @@ import {
27
27
  getHistorianFailureState,
28
28
  clearEmergencyRecovery,
29
29
  prepareRawSessionOrdinals2
30
- } from "./index-b16gpywn.js";
30
+ } from "./index-944w16m0.js";
31
31
  import {
32
32
  pushNotification2
33
33
  } from "./index-x8a7jmkh.js";
@@ -37,7 +37,7 @@ import {
37
37
  import {
38
38
  setRecompStarting2,
39
39
  setRecompTerminal2
40
- } from "./index-hnm8raee.js";
40
+ } from "./index-kf4epshg.js";
41
41
 
42
42
  // src/hooks/magic-context/wrapup-orchestrator.ts
43
43
  import * as crypto from "node:crypto";
@@ -2,6 +2,7 @@ import {
2
2
  getHarness2
3
3
  } from "./index-pavzsdc6.js";
4
4
  import {
5
+ tagRevisionKey,
5
6
  tagIdentityRevisionKey,
6
7
  getTemporalDecisions,
7
8
  freezeTemporalDecisions,
@@ -70,7 +71,7 @@ import {
70
71
  adoptNullOwnerToolTag2,
71
72
  getCandidateToolOwners2,
72
73
  pickNearestPriorOwner2
73
- } from "./index-fwefky9w.js";
74
+ } from "./index-mht7bq0z.js";
74
75
  import {
75
76
  textMentionsRecentCommit,
76
77
  hasMeaningfulUserText2,
@@ -110,9 +111,11 @@ import {
110
111
  HYGIENE_PROVIDER_UNITS_VERSION,
111
112
  sessionDecisionCalibration,
112
113
  transitionSessionHygieneUnits,
114
+ readEpochFloorSnapshot,
113
115
  ReplayDocumentError,
114
116
  readReplayEnvelope,
115
117
  updateReplayDocument,
118
+ loadProtectedTailMeta,
116
119
  getEmergencyInputSample,
117
120
  setEmergencyDropSample,
118
121
  clearEmergencyDropSample,
@@ -190,7 +193,7 @@ import {
190
193
  extractToolCallObservation,
191
194
  ToolMutationBatch,
192
195
  createToolDropTarget
193
- } from "./index-b16gpywn.js";
196
+ } from "./index-944w16m0.js";
194
197
  import {
195
198
  getMaxM0MutationId,
196
199
  rememberUnpublishedAutoSearchNoHint,
@@ -225,7 +228,7 @@ import {
225
228
  peekNoteNudgeText,
226
229
  markNoteNudgeDelivered,
227
230
  getActiveCompartmentRun
228
- } from "./index-2jr1smmh.js";
231
+ } from "./index-t4q9zbbf.js";
229
232
  import {
230
233
  runSessionWarmupWorker
231
234
  } from "./index-mmfa86mt.js";
@@ -236,9 +239,9 @@ import {
236
239
  } from "./index-1d289pq2.js";
237
240
  import {
238
241
  BoundedSessionMap
239
- } from "./index-v13skev1.js";
242
+ } from "./index-thvnpfsv.js";
240
243
  import {
241
- renderUserFacingFailure
244
+ userFacingFailureCode
242
245
  } from "./index-bxdg2nbt.js";
243
246
  import {
244
247
  normalizeProtectedToolName,
@@ -2741,6 +2744,20 @@ function replayCavemanCompression(sessionId, db, targets, tags) {
2741
2744
  }
2742
2745
 
2743
2746
  // src/hooks/magic-context/degraded-pass-refusal.ts
2747
+ function describeDegradedPassFailure(site, cause) {
2748
+ const details = [site];
2749
+ const seen = new Set;
2750
+ while (cause !== undefined && cause !== null && !seen.has(cause)) {
2751
+ seen.add(cause);
2752
+ const current = cause;
2753
+ const detail = typeof current.site === "string" ? current.site : typeof current.message === "string" ? current.message : String(cause);
2754
+ if (!details.includes(detail))
2755
+ details.push(detail);
2756
+ cause = current.cause;
2757
+ }
2758
+ return `Magic Context could not safely prepare this turn [${userFacingFailureCode("transform_pass_degraded")}] (${details.join(": ")}). This request was not sent.`;
2759
+ }
2760
+
2744
2761
  class DegradedPassRefusalError extends Error {
2745
2762
  site;
2746
2763
  code = "DEGRADED_PASS_REFUSAL";
@@ -2748,7 +2765,7 @@ class DegradedPassRefusalError extends Error {
2748
2765
  estimatedTokens;
2749
2766
  contextLimitTokens;
2750
2767
  constructor(site, options) {
2751
- super(renderUserFacingFailure("transform_pass_degraded", "plain"), {
2768
+ super(describeDegradedPassFailure(site, options?.cause), {
2752
2769
  cause: options?.cause
2753
2770
  });
2754
2771
  this.site = site;
@@ -2765,6 +2782,76 @@ function degradedPassError(site, error) {
2765
2782
  return new DegradedPassRefusalError(site, { cause: error });
2766
2783
  }
2767
2784
 
2785
+ // src/hooks/magic-context/pending-drop-eligibility.ts
2786
+ function pendingDropVeto(tagNumber, target, protectedTagIds) {
2787
+ if (protectedTagIds.has(tagNumber))
2788
+ return "protected";
2789
+ if (target?.thinkingDropProtected)
2790
+ return "active_thinking";
2791
+ return null;
2792
+ }
2793
+ function capturePendingDropEligibility(targets, protectedTagIds) {
2794
+ const eligible = new Set;
2795
+ for (const [number, target] of targets) {
2796
+ if (pendingDropVeto(number, target, protectedTagIds))
2797
+ continue;
2798
+ if (target.drop) {
2799
+ if (target.canDrop?.() === true)
2800
+ eligible.add(number);
2801
+ } else {
2802
+ const content = target.getContent?.();
2803
+ if (typeof content === "string" && content.length > `[dropped §${number}§]`.length)
2804
+ eligible.add(number);
2805
+ }
2806
+ }
2807
+ return eligible;
2808
+ }
2809
+ function pendingDropEligibilityKey(db, sessionId, input, protectionInputs) {
2810
+ const digests = input.map((message) => message.contentDigest?.() ?? null);
2811
+ if (digests.some((digest) => digest === null))
2812
+ return null;
2813
+ const revision = db.prepare("SELECT value FROM schema_migrations_meta WHERE key = ?").get(tagRevisionKey(sessionId));
2814
+ if (!revision?.value)
2815
+ return null;
2816
+ return JSON.stringify([
2817
+ input.map((message, index) => [
2818
+ message.id,
2819
+ message.role,
2820
+ message.synthetic,
2821
+ digests[index]
2822
+ ]),
2823
+ revision.value,
2824
+ readEpochFloorSnapshot(db, sessionId),
2825
+ sessionDecisionCalibration(db, sessionId).toolsRatio,
2826
+ loadProtectedTailMeta(db, sessionId),
2827
+ [...getMergedReasoningStrippedIds(db, sessionId)].sort(),
2828
+ [...getReasoningRemovalState(db, sessionId).messageIds].sort(),
2829
+ protectionInputs
2830
+ ]);
2831
+ }
2832
+ function createPendingDropEligibilityCache() {
2833
+ const sessions = new Map;
2834
+ return {
2835
+ read(sessionId, key) {
2836
+ const previous = sessions.get(sessionId);
2837
+ if (key === null || previous?.key !== key) {
2838
+ sessions.delete(sessionId);
2839
+ return;
2840
+ }
2841
+ return previous.eligible;
2842
+ },
2843
+ record(sessionId, key, eligible) {
2844
+ sessions.delete(sessionId);
2845
+ if (key === null)
2846
+ return;
2847
+ const oldest = sessions.keys().next().value;
2848
+ if (sessions.size >= 64 && oldest !== undefined)
2849
+ sessions.delete(oldest);
2850
+ sessions.set(sessionId, { key, eligible: new Set(eligible) });
2851
+ }
2852
+ };
2853
+ }
2854
+
2768
2855
  // src/hooks/magic-context/apply-operations.ts
2769
2856
  var RECENT_TOOL_SKELETON_WINDOW = 20;
2770
2857
  function buildReplacementContent(tagId) {
@@ -2885,7 +2972,7 @@ function renderConvertedToolSkeletons(targets, converted) {
2885
2972
  }
2886
2973
  return didMutate;
2887
2974
  }
2888
- function applyPendingOperations(sessionId, db, targets, protectedTagIds, preloadedTags, preloadedPendingOps, syntheticPendingOps = [], editMarkerTagIds = new Set, onTagReduced, onBatchComplete) {
2975
+ function applyPendingOperations(sessionId, db, targets, protectedTagIds, preloadedTags, preloadedPendingOps, syntheticPendingOps = [], editMarkerTagIds = new Set, onTagReduced, onBatchComplete, onEligibilitySnapshot) {
2889
2976
  let didMutateMessage = false;
2890
2977
  let diagnostics;
2891
2978
  const reject = (reason) => {
@@ -2900,6 +2987,7 @@ function applyPendingOperations(sessionId, db, targets, protectedTagIds, preload
2900
2987
  }).immediate();
2901
2988
  {
2902
2989
  const pendingOps = preloadedPendingOps ?? getPendingOps(db, sessionId);
2990
+ onEligibilitySnapshot?.(capturePendingDropEligibility(targets, protectedTagIds));
2903
2991
  const tags = preloadedTags ?? getTagsByNumbers2(db, sessionId, [
2904
2992
  ...new Set([
2905
2993
  ...pendingOps.map((op) => op.tagId),
@@ -2930,13 +3018,10 @@ function applyPendingOperations(sessionId, db, targets, protectedTagIds, preload
2930
3018
  removePendingOp(db, sessionId, pendingOp.tagId);
2931
3019
  continue;
2932
3020
  }
2933
- if (protectedTagIds.has(pendingOp.tagId)) {
2934
- reject("protected");
2935
- continue;
2936
- }
2937
3021
  const target = targets.get(pendingOp.tagId);
2938
- if (target?.thinkingDropProtected) {
2939
- reject("active_thinking");
3022
+ const veto = pendingDropVeto(pendingOp.tagId, target, protectedTagIds);
3023
+ if (veto) {
3024
+ reject(veto);
2940
3025
  continue;
2941
3026
  }
2942
3027
  const isToolTag = tagTypeById.get(pendingOp.tagId) === "tool";
@@ -5699,7 +5784,7 @@ async function runPostTransformPhase2(args) {
5699
5784
  pendingOpsDidMutate = applyPendingOperations(args.sessionId, args.db, newTargets, new Set([
5700
5785
  ...args.contextUsage.percentage >= 95 ? [] : args.protectedTagIds,
5701
5786
  ...protectedToolTags
5702
- ]), undefined, pendingOps, [], new Set, (reduction) => droppedTokenReductions.push(reduction));
5787
+ ]), undefined, pendingOps, [], new Set, (reduction) => droppedTokenReductions.push(reduction), undefined, args.onPendingDropEligibility);
5703
5788
  if (pendingOpsDidMutate) {
5704
5789
  droppedCount += pendingOps.length;
5705
5790
  for (const pendingOp of pendingOps) {
@@ -6736,4 +6821,4 @@ function checkM0MutationDriftAndSignal2(args) {
6736
6821
  return false;
6737
6822
  }
6738
6823
 
6739
- export { makeToolCompositeKey, createTagger, cavemanWordRulesForLanguage, searchMessageHistoryOffThread, findSessionId, findLastUserMessageId, clearAutoSearchForSession, setCtxReduceRegisteredGlobally, resolveCtxReduceAvailabilityFromMessages, resolveCtxReduceAvailability, primeCtxReduceSpawnPermission, ctxReduceSpawnPermissionReadNeeded, spawnAgentFromMessages, spawnAgentFromOpenCodeDb, todowritePermissionDenied, cachedToolPermissionDenied, clearToolPermissionDenied, resolveTodowriteAvailabilityFromMessages, resolveTodowriteAvailability, canConsumeDeferredOnThisPass, hasReclaimRide, reclaimRideLabel, captureOpencodeReasoningBudgetStatus, reasoningBudgetStatusLine, ENGINE_RECONNECTING_USER_MESSAGE, ENGINE_BUSY_USER_MESSAGE, SIGNED_THINKING_RESET_FENCE_FAILED, contextRefusalError, protectedToolRefusal, outgoingContextRefusal, signedTurnContextRefusal, EmergencyFailClosedError, latestAssistantTurnStart, latestAssistantTurnMessages, hasActiveAnthropicThinkingTurn, replayCavemanCompression, DegradedPassRefusalError, degradedPassError, applyFlushedStatuses, prewarmTagOwners, waitForTagOwners, stripStructuralNoise, logTransformTiming, hasRecentAssistantCommit, tagMessages, resetDegradedCacheCount2, isSyntheticHeadMessage2, applyTodoSynthesis2, freezeReasoningOnBustingPass2, firstServedDivergenceIndex2, rustModeServedKeyAfterPersistedStrips2, replayRustModeBindingMismatchStrips2, RUST_MARKER_LOCK_SKIP_LOG2, applyRustModeDeferredCompactionMarker2, clearRustModeBoundaryRecord2, runRustModePostprocess2, reconcileMarkerRepresentation2, clearPendingCompactionMarkerAfterSuccessfulDrain2, defaultCompactionMarkerStrategy2, abortSessionFailClosed2, evaluateEmergencyFailClosed2, finalizeMessageRepresentation2, runPostTransformPhase2, checkM0MutationDriftAndSignal2 };
6824
+ export { makeToolCompositeKey, createTagger, cavemanWordRulesForLanguage, searchMessageHistoryOffThread, findSessionId, findLastUserMessageId, clearAutoSearchForSession, setCtxReduceRegisteredGlobally, resolveCtxReduceAvailabilityFromMessages, resolveCtxReduceAvailability, primeCtxReduceSpawnPermission, ctxReduceSpawnPermissionReadNeeded, spawnAgentFromMessages, spawnAgentFromOpenCodeDb, todowritePermissionDenied, cachedToolPermissionDenied, clearToolPermissionDenied, resolveTodowriteAvailabilityFromMessages, resolveTodowriteAvailability, canConsumeDeferredOnThisPass, hasReclaimRide, reclaimRideLabel, captureOpencodeReasoningBudgetStatus, reasoningBudgetStatusLine, ENGINE_RECONNECTING_USER_MESSAGE, ENGINE_BUSY_USER_MESSAGE, SIGNED_THINKING_RESET_FENCE_FAILED, contextRefusalError, protectedToolRefusal, outgoingContextRefusal, signedTurnContextRefusal, EmergencyFailClosedError, latestAssistantTurnStart, latestAssistantTurnMessages, hasActiveAnthropicThinkingTurn, replayCavemanCompression, DegradedPassRefusalError, degradedPassError, pendingDropEligibilityKey, createPendingDropEligibilityCache, applyFlushedStatuses, prewarmTagOwners, waitForTagOwners, stripStructuralNoise, logTransformTiming, hasRecentAssistantCommit, tagMessages, resetDegradedCacheCount2, isSyntheticHeadMessage2, applyTodoSynthesis2, freezeReasoningOnBustingPass2, firstServedDivergenceIndex2, rustModeServedKeyAfterPersistedStrips2, replayRustModeBindingMismatchStrips2, RUST_MARKER_LOCK_SKIP_LOG2, applyRustModeDeferredCompactionMarker2, clearRustModeBoundaryRecord2, runRustModePostprocess2, reconcileMarkerRepresentation2, clearPendingCompactionMarkerAfterSuccessfulDrain2, defaultCompactionMarkerStrategy2, abortSessionFailClosed2, evaluateEmergencyFailClosed2, finalizeMessageRepresentation2, runPostTransformPhase2, checkM0MutationDriftAndSignal2 };
@@ -66,10 +66,10 @@ import {
66
66
  } from "./index-bxdg2nbt.js";
67
67
  import {
68
68
  isRecord
69
- } from "./index-fwefky9w.js";
69
+ } from "./index-mht7bq0z.js";
70
70
  import {
71
71
  getIndexedMessageCorpusSize2
72
- } from "./index-v13skev1.js";
72
+ } from "./index-thvnpfsv.js";
73
73
  import {
74
74
  resolveWorkspaceShareCategories,
75
75
  resolveWorkspaceIdentitySet,
@@ -1270,7 +1270,7 @@ function finishDatabaseOpen(db, dbPath, explicitDbPath, latestSupportedVersion)
1270
1270
  startMessageFtsRowidMapBackfill(db).then(async () => {
1271
1271
  if (!readsOpenCodeStore)
1272
1272
  return;
1273
- const { readRawSessionMessagePage, readRawSessionMessages } = await importPluginModule(() => import("./read-session-chunk-ax05f7gr.js"));
1273
+ const { readRawSessionMessagePage, readRawSessionMessages } = await importPluginModule(() => import("./read-session-chunk-3ae3nfdn.js"));
1274
1274
  const { startMessageTimeBackfill } = await importPluginModule(() => import("./message-time-backfill-qjge9044.js"));
1275
1275
  await startMessageTimeBackfill(db, Object.assign(readRawSessionMessages, {
1276
1276
  readPage: readRawSessionMessagePage