@cortexkit/opencode-magic-context 0.49.18 → 0.49.19

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 (86) hide show
  1. package/dist/auto-search-worker.js +6 -2
  2. package/dist/chunk-embedding-write-worker.js +2 -2
  3. package/dist/{context-m897gfp9.js → context-j31m2dv7.js} +16 -12
  4. package/dist/features/magic-context/dreamer/classify.d.ts +3 -0
  5. package/dist/features/magic-context/dreamer/classify.d.ts.map +1 -1
  6. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts +11 -0
  7. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts.map +1 -1
  8. package/dist/features/magic-context/dreamer/map-memories.d.ts +3 -0
  9. package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
  10. package/dist/features/magic-context/dreamer/verify.d.ts +3 -0
  11. package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
  12. package/dist/features/magic-context/migrations.d.ts.map +1 -1
  13. package/dist/features/magic-context/storage-clone.d.ts.map +1 -1
  14. package/dist/features/magic-context/storage-meta-persisted.d.ts +13 -0
  15. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  16. package/dist/hooks/magic-context/auto-search-worker-evaluation.fixture.d.ts +2 -0
  17. package/dist/hooks/magic-context/auto-search-worker-evaluation.fixture.d.ts.map +1 -0
  18. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  19. package/dist/hooks/magic-context/lkg-recovery-prefix.d.ts +13 -0
  20. package/dist/hooks/magic-context/lkg-recovery-prefix.d.ts.map +1 -1
  21. package/dist/hooks/magic-context/system-date-refresh.d.ts +15 -2
  22. package/dist/hooks/magic-context/system-date-refresh.d.ts.map +1 -1
  23. package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
  24. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +2 -0
  25. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  26. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  27. package/dist/{index-936py2wm.js → index-3esx8tkf.js} +60 -26
  28. package/dist/{index-v8awdgvd.js → index-3h4dp9wb.js} +1 -1
  29. package/dist/{index-24jbw52d.js → index-4911rn0b.js} +3 -3
  30. package/dist/{index-qn7xstt2.js → index-63k48rv9.js} +1 -2
  31. package/dist/{index-rmwykbbb.js → index-9zcsy3hh.js} +16 -1
  32. package/dist/{index-r4nkrs05.js → index-c1p88z1y.js} +3 -3
  33. package/dist/{index-s7j8tvhv.js → index-dxmq29t1.js} +3 -3
  34. package/dist/{index-6s5941tm.js → index-edmpdxcw.js} +1 -1
  35. package/dist/{index-e4xv8890.js → index-jhghdnsm.js} +26 -12
  36. package/dist/{index-fgncb0ng.js → index-jrr131e0.js} +2 -2
  37. package/dist/{index-s1ex9y6p.js → index-rpxdjkm0.js} +165 -27
  38. package/dist/{index-x4njr8df.js → index-se4m2g6w.js} +1 -1
  39. package/dist/index.js +20 -16
  40. package/dist/{message-index-bounded-n1frdn85.js → message-index-bounded-zyc8h32y.js} +2 -2
  41. package/dist/{message-index-66jv6fh4.js → message-index-gtpqnj8w.js} +2 -2
  42. package/dist/migration-worker.js +2 -2
  43. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  44. package/dist/plugin/messages-transform.d.ts.map +1 -1
  45. package/dist/plugin/tool-registry.d.ts.map +1 -1
  46. package/dist/raw-ordinal-warmup-worker.js +3 -3
  47. package/dist/{read-session-chunk-v06g3vka.js → read-session-chunk-jjb48bt9.js} +1 -1
  48. package/dist/{recomp-orchestrator-ghpk2dtq.js → recomp-orchestrator-999jj4bc.js} +7 -7
  49. package/dist/{search-archive-4d53y23e.js → search-archive-6vm0e2f5.js} +2 -2
  50. package/dist/{search-nkf271d4.js → search-xsqk1bj4.js} +5 -5
  51. package/dist/shared/model-suggestion-retry.d.ts +30 -1
  52. package/dist/shared/model-suggestion-retry.d.ts.map +1 -1
  53. package/dist/shared/prompt-async-transport.d.ts.map +1 -1
  54. package/dist/tools/ctx-expand/rust-mode-tag.test-support.d.ts +15 -0
  55. package/dist/tools/ctx-expand/rust-mode-tag.test-support.d.ts.map +1 -0
  56. package/dist/tools/ctx-expand/tools.d.ts +11 -0
  57. package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
  58. package/dist/{transform-postprocess-phase-zpgav0h7.js → transform-postprocess-phase-jj99r7z2.js} +7 -7
  59. package/dist/v2/auto-search-worker.js +6 -2
  60. package/dist/v2/chunk-embedding-write-worker.js +2 -2
  61. package/dist/v2/{context-f2xh7ba4.js → context-y5yamxak.js} +85 -33
  62. package/dist/v2/hooks/tools.d.ts.map +1 -1
  63. package/dist/v2/{message-index-48f7hw7a.js → message-index-8vz2pq76.js} +2 -2
  64. package/dist/v2/{message-index-bounded-w3hfm29z.js → message-index-bounded-spd8r7pj.js} +2 -2
  65. package/dist/v2/migration-worker.js +2 -2
  66. package/dist/v2/raw-ordinal-warmup-worker.js +3 -3
  67. package/dist/v2/{read-session-chunk-zpgmxwte.js → read-session-chunk-cwkxrmns.js} +1 -1
  68. package/dist/v2/{recomp-orchestrator-4vfxej9t.js → recomp-orchestrator-f6m9jr7p.js} +6 -6
  69. package/dist/v2/{search-archive-vv48s2aa.js → search-archive-wve3tq1k.js} +2 -2
  70. package/dist/v2/{search-kza414f0.js → search-hwg7jfbj.js} +5 -5
  71. package/dist/v2/{server-2ehj0bw7.js → server-2ar62dyx.js} +1 -1
  72. package/dist/v2/{server-qv7f0hhe.js → server-45q69hkq.js} +1 -1
  73. package/dist/v2/{server-bfpda1tb.js → server-6vdzn1td.js} +165 -27
  74. package/dist/v2/{server-xhab8jx8.js → server-9hx7g5jp.js} +16 -1
  75. package/dist/v2/{server-a2eqhkxr.js → server-bmymkx73.js} +2 -2
  76. package/dist/v2/{server-1nyybqan.js → server-gsxjv2q2.js} +3 -3
  77. package/dist/v2/{server-my7k4eds.js → server-hm38q7r0.js} +1 -1
  78. package/dist/v2/{server-gpvay0xz.js → server-xq7dfjke.js} +1 -2
  79. package/dist/v2/server.js +2 -2
  80. package/dist/v2/{wrapup-orchestrator-psqz7yh0.js → wrapup-orchestrator-embdz8gj.js} +6 -6
  81. package/dist/{wrapup-orchestrator-s9zc5b00.js → wrapup-orchestrator-whhbjmaz.js} +8 -8
  82. package/package.json +1 -1
  83. package/src/shared/model-suggestion-retry.test.ts +166 -0
  84. package/src/shared/model-suggestion-retry.ts +165 -14
  85. package/src/shared/prompt-async-transport.test.ts +107 -0
  86. package/src/shared/prompt-async-transport.ts +39 -0
@@ -127,6 +127,8 @@ import {
127
127
  hasProcessLocalLkgProof,
128
128
  lkgDirtyRevision,
129
129
  rememberLkgDirtyRevision,
130
+ readPersistedLkgUntaggedInputIds,
131
+ persistLkgUntaggedInputIds,
130
132
  noteLkgRecoveryPrefix,
131
133
  readLkgRecoveryPrefix,
132
134
  noteLkgHealthyPrefix,
@@ -280,7 +282,7 @@ import {
280
282
  startCompartmentAgent,
281
283
  setRecompStarting2,
282
284
  setRecompTerminal2
283
- } from "./server-bfpda1tb.js";
285
+ } from "./server-6vdzn1td.js";
284
286
  import {
285
287
  resolveHistorianModel2
286
288
  } from "./server-8cd2j99z.js";
@@ -305,7 +307,7 @@ import {
305
307
  openDatabaseAsync,
306
308
  isDatabasePersisted,
307
309
  getDatabasePersistenceError
308
- } from "./server-a2eqhkxr.js";
310
+ } from "./server-bmymkx73.js";
309
311
  import {
310
312
  pruneMissingProjectIdentities,
311
313
  setHomeProjectPermission,
@@ -418,6 +420,8 @@ import {
418
420
  applyStrippedPlaceholderDelta,
419
421
  THINKING_BINDING_RECOVERY_FROZEN_PREFIX,
420
422
  thinkingBindingRecoveryFrozenId,
423
+ compactionOffThinkingFrozenId,
424
+ compactionOffFrozenThinkingIds,
421
425
  getThinkingBindingRecoveryTarget,
422
426
  clearThinkingBindingRecoveryIf,
423
427
  getMergedReasoningStrippedIds,
@@ -515,7 +519,7 @@ import {
515
519
  readRawSessionMessageById2,
516
520
  readSessionChunk2,
517
521
  readRawSessionSeedTail2
518
- } from "./server-xhab8jx8.js";
522
+ } from "./server-9hx7g5jp.js";
519
523
  import {
520
524
  embedPauseBySession,
521
525
  embedRunStateBySession,
@@ -621,7 +625,7 @@ import {
621
625
  isMessageIndexReconciledThrough2,
622
626
  indexMessagesAfterOrdinal2,
623
627
  sweepOrphanedOpenCodeMessageIndexesCooperatively2
624
- } from "./server-2ehj0bw7.js";
628
+ } from "./server-2ar62dyx.js";
625
629
  import {
626
630
  stableStringify,
627
631
  getTemporalDecisions,
@@ -758,7 +762,7 @@ import {
758
762
  resolveStoredPathWorkspaceIdentity,
759
763
  storedPathBelongsToWorkspace,
760
764
  computeWorkspaceEpochFingerprint
761
- } from "./server-gpvay0xz.js";
765
+ } from "./server-xq7dfjke.js";
762
766
  import {
763
767
  configureContextDatabasePragmas2
764
768
  } from "./server-fb3zxn06.js";
@@ -804,7 +808,7 @@ import {
804
808
  readGitFileChangeTimesSince,
805
809
  verificationFileExists,
806
810
  normalizeVerificationFiles
807
- } from "./server-my7k4eds.js";
811
+ } from "./server-hm38q7r0.js";
808
812
  import {
809
813
  deriveTriggerBudget2,
810
814
  deriveHistorianChunkTokens2,
@@ -893,14 +897,14 @@ import {
893
897
  resolveMemoriesByIdsForSearch2,
894
898
  unifiedSearch2,
895
899
  formatSearchResults2
896
- } from "./server-1nyybqan.js";
900
+ } from "./server-gsxjv2q2.js";
897
901
  import {
898
902
  resolvePromptContext2
899
903
  } from "./server-fmsr7v69.js";
900
904
  import"./server-kaqs6h31.js";
901
905
  import {
902
906
  renderSearchArchiveOffThread2
903
- } from "./server-qv7f0hhe.js";
907
+ } from "./server-45q69hkq.js";
904
908
  import {
905
909
  compareSemverCore
906
910
  } from "./server-84w6rvvf.js";
@@ -9404,7 +9408,10 @@ function freezeReasoningOnBustingPass(args) {
9404
9408
  return { strip: null, persistenceFailed: false };
9405
9409
  let persisted = false;
9406
9410
  try {
9407
- persisted = addMergedReasoningStrippedIds(args.db, args.sessionId, messageIds.map(thinkingBindingRecoveryFrozenId));
9411
+ persisted = addMergedReasoningStrippedIds(args.db, args.sessionId, [
9412
+ ...messageIds.map(thinkingBindingRecoveryFrozenId),
9413
+ ...args.compactionOff ? messageIds.map(compactionOffThinkingFrozenId) : []
9414
+ ]);
9408
9415
  } catch (error) {
9409
9416
  sessionLog2(args.sessionId, "proactive thinking strip: persistence threw:", error);
9410
9417
  }
@@ -9914,7 +9921,7 @@ function finalizeMessageRepresentation(messages, resolvedProviderID, options) {
9914
9921
  clearedParts = stripClearedReasoning(targetedMessages.filter((message) => !restoredMessages.has(message)));
9915
9922
  }
9916
9923
  }
9917
- const bindingRecoveryParts = options?.skipMergedReasoningStrip ? 0 : stripReasoningFromAssistantIds(messages, resolvedProviderID, options?.frozenThinkingBindingMessageIds ?? new Set, restoredMessages);
9924
+ const bindingRecoveryParts = stripReasoningFromAssistantIds(messages, resolvedProviderID, options?.frozenThinkingBindingMessageIds ?? new Set, restoredMessages);
9918
9925
  const mergedReasoningParts = bindingRecoveryParts + (options?.skipMergedReasoningStrip ? 0 : stripReasoningFromMergedAssistants(messages, resolvedProviderID, {
9919
9926
  mutationExemptMessage: options?.reasoningMutationExemptMessage,
9920
9927
  frozenMessageIds: options?.mergedReasoningStrippedIds,
@@ -9991,8 +9998,9 @@ async function runPostTransformPhase(args) {
9991
9998
  let deferredMaterialize = args.canConsumeDeferredLate && deferredMaterializationWasPending;
9992
9999
  let materializationRequested = isExplicitFlush || deferredMaterialize;
9993
10000
  const m0M1EnabledForFold = args.m0M1 !== undefined && (!!args.m0M1.projectPath || !!args.m0M1.projectDirectory) && (args.fullFeatureMode || compactionOff);
9994
- const frozenThinking = new Set(args.activeThinkingTurn ? getMergedReasoningStrippedIds(args.db, args.sessionId) : []);
9995
- const bindingThinking = new Set([...frozenThinking].filter((id) => id.startsWith(THINKING_BINDING_RECOVERY_FROZEN_PREFIX)).map((id) => id.slice(THINKING_BINDING_RECOVERY_FROZEN_PREFIX.length)));
10001
+ const frozenThinking = new Set(args.activeThinkingTurn || compactionOff ? getMergedReasoningStrippedIds(args.db, args.sessionId) : []);
10002
+ const compactionOffFrozenThinking = compactionOff ? compactionOffFrozenThinkingIds(frozenThinking) : new Set;
10003
+ const bindingThinking = compactionOff ? new Set(compactionOffFrozenThinking) : new Set([...frozenThinking].filter((id) => id.startsWith(THINKING_BINDING_RECOVERY_FROZEN_PREFIX)).map((id) => id.slice(THINKING_BINDING_RECOVERY_FROZEN_PREFIX.length)));
9996
10004
  const retainedThinking = args.activeThinkingTurn ? retainedActiveThinkingParts({
9997
10005
  messages: args.messages,
9998
10006
  providerID: args.resolvedProviderID,
@@ -10017,15 +10025,20 @@ async function runPostTransformPhase(args) {
10017
10025
  let freezeM0M1 = args.freezeM0M1 === true || activeThinkingPrefixHold;
10018
10026
  let rewritingSignedPrefix = false;
10019
10027
  let thinkingReleasedForFit = false;
10020
- const releaseThinkingForRewrite = (forFit = false) => {
10028
+ const releaseThinkingForRewrite = (forFit = false, stripInCompactionOff = false) => {
10029
+ const stripOffWire = compactionOff && stripInCompactionOff;
10021
10030
  const stripped = freezeReasoningOnBustingPass({
10022
10031
  db: args.db,
10023
10032
  sessionId: args.sessionId,
10024
10033
  messages: args.messages,
10025
- alreadyFrozen: bindingThinking
10034
+ alreadyFrozen: bindingThinking,
10035
+ compactionOff: stripOffWire
10026
10036
  });
10027
10037
  if (stripped.persistenceFailed)
10028
10038
  throw new Error("Cannot persist signed thinking omission before prefix rewrite");
10039
+ if (stripOffWire)
10040
+ for (const id of stripped.strip?.messageIds ?? [])
10041
+ compactionOffFrozenThinking.add(id);
10029
10042
  retainedThinking.clear();
10030
10043
  protectedThinkingMessages.clear();
10031
10044
  activeThinkingTurn = false;
@@ -10123,7 +10136,7 @@ async function runPostTransformPhase(args) {
10123
10136
  });
10124
10137
  preparedPrefix = foldResult;
10125
10138
  if (activeThinkingPrefixHold && firstRenderBust && committedFoldBustsServedPrefix) {
10126
- releaseThinkingForRewrite();
10139
+ releaseThinkingForRewrite(false, true);
10127
10140
  }
10128
10141
  prefixPreflightFailed = foldResult.materializationContentionRetryExhausted === true;
10129
10142
  foldExecutedThisPass = foldExecutesThisPass(foldDueDecision.value || softRefreshOpportunity, foldResult.m0RematerializedThisPass);
@@ -11041,7 +11054,10 @@ async function runPostTransformPhase(args) {
11041
11054
  const mergedReasoningStrippedIds = new Set(replaySnapshot?.mergedReasoningStrippedIds ?? []);
11042
11055
  const frozenThinkingBindingMessageIds = new Set;
11043
11056
  let thinkingBindingRecovery = null;
11044
- if (!compactionOff) {
11057
+ if (compactionOff) {
11058
+ for (const id of compactionOffFrozenThinking)
11059
+ frozenThinkingBindingMessageIds.add(id);
11060
+ } else {
11045
11061
  try {
11046
11062
  for (const id of mergedReasoningStrippedIds) {
11047
11063
  if (id.startsWith(THINKING_BINDING_RECOVERY_FROZEN_PREFIX)) {
@@ -11574,6 +11590,7 @@ function beginSystemDateRequest(history, sessionId, stage, turnId, identity) {
11574
11590
  systemDone: false,
11575
11591
  messagesSeen: false,
11576
11592
  permitted: undefined,
11593
+ signedThinkingKept: undefined,
11577
11594
  ambiguous: identity === undefined && (turnId === undefined || sameTurn)
11578
11595
  };
11579
11596
  const blocked = [...requests.values()].filter((candidate) => !candidate.explicit && candidate.ambiguous && !(candidate.systemSeen && candidate.messagesSeen) && candidate.turnId === turnId).length;
@@ -11596,6 +11613,10 @@ function systemDateRefreshPermission(history, request) {
11596
11613
  const current = state(history, request);
11597
11614
  return current?.ambiguous ? undefined : current?.permitted;
11598
11615
  }
11616
+ function systemDateSignedThinkingKept(history, request) {
11617
+ const current = state(history, request);
11618
+ return current?.ambiguous ? undefined : current?.signedThinkingKept;
11619
+ }
11599
11620
  function waitForSystemDateRefresh(history, request, apply) {
11600
11621
  const current = state(history, request);
11601
11622
  if (!current)
@@ -11610,7 +11631,7 @@ function retire(history, current) {
11610
11631
  if (unpairable) {
11611
11632
  const apply = current.waiting;
11612
11633
  current.waiting = undefined;
11613
- apply?.(false);
11634
+ apply?.(false, undefined);
11614
11635
  }
11615
11636
  const channel = channels.get(history);
11616
11637
  const requests = channel?.get(current.sessionId);
@@ -11618,14 +11639,15 @@ function retire(history, current) {
11618
11639
  if (requests?.size === 0)
11619
11640
  channel?.delete(current.sessionId);
11620
11641
  }
11621
- function finishSystemDateRefresh(history, request, permitted) {
11642
+ function finishSystemDateRefresh(history, request, permitted, signedThinkingKept) {
11622
11643
  const current = state(history, request);
11623
11644
  if (!current)
11624
11645
  return;
11625
11646
  current.permitted = current.ambiguous ? false : permitted;
11647
+ current.signedThinkingKept = current.ambiguous ? undefined : signedThinkingKept;
11626
11648
  const apply = current.waiting;
11627
11649
  current.waiting = undefined;
11628
- apply?.(current.permitted);
11650
+ apply?.(current.permitted, current.signedThinkingKept);
11629
11651
  retire(history, current);
11630
11652
  }
11631
11653
  function finishSystemDateHook(history, request) {
@@ -11737,11 +11759,14 @@ function createSystemPromptHashHandler(deps) {
11737
11759
  const stableCandidateHash = systemPromptFingerprint(stableCandidate, promptSurface.preset);
11738
11760
  const contentOrPresetChanged = hasPersistedHash && stableCandidateHash !== previousHash;
11739
11761
  const rewritePermission = systemDateRefreshPermission(deps.historyRefreshSessions, dateRequest);
11762
+ const signedThinkingKept = systemDateSignedThinkingKept(deps.historyRefreshSessions, dateRequest);
11763
+ const idleDateMayAdvance = idleCacheExpired && signedThinkingKept !== true;
11764
+ const prefixBoundModel = isPrefixBoundThinkingModel(liveModel?.providerID, liveModel?.modelID);
11740
11765
  let deferredDateRefresh = false;
11741
- if (currentDate && stickyDate && currentDate !== stickyDate && isCacheBusting && !idleCacheExpired && !contentOrPresetChanged && !requestMessagesFinal) {
11766
+ if (currentDate && stickyDate && currentDate !== stickyDate && (idleCacheExpired ? prefixBoundModel : isCacheBusting) && !contentOrPresetChanged && !requestMessagesFinal) {
11742
11767
  const liveElements = [...output.system];
11743
- deferredDateRefresh = waitForSystemDateRefresh(deps.historyRefreshSessions, dateRequest, (permitted) => {
11744
- if (!permitted) {
11768
+ deferredDateRefresh = waitForSystemDateRefresh(deps.historyRefreshSessions, dateRequest, (permitted, keptSignedThinking) => {
11769
+ if (!permitted && !(idleCacheExpired && keptSignedThinking !== true)) {
11745
11770
  deps.systemPromptRefreshSessions.add(sessionId);
11746
11771
  return;
11747
11772
  }
@@ -11765,7 +11790,7 @@ function createSystemPromptHashHandler(deps) {
11765
11790
  }
11766
11791
  });
11767
11792
  }
11768
- const dateMayAdvance = idleCacheExpired || contentOrPresetChanged || isCacheBusting && !deferredDateRefresh && (dateRequest ? rewritePermission === true : rewritePermission !== false);
11793
+ const dateMayAdvance = idleDateMayAdvance && !deferredDateRefresh || contentOrPresetChanged || isCacheBusting && !deferredDateRefresh && (dateRequest ? rewritePermission === true : rewritePermission !== false);
11769
11794
  if (currentDate && !stickyDate) {
11770
11795
  stickyDateBySession.set(sessionId, currentDate);
11771
11796
  } else if (currentDate && stickyDate && currentDate !== stickyDate) {
@@ -18626,6 +18651,11 @@ function createTransform(deps) {
18626
18651
  const tLkgEntry = performance.now();
18627
18652
  const lkgInput = deps.transformMode === "rust" ? [] : projectEntry(sessionId, messages);
18628
18653
  const recovery = deps.compactionOff || deps.transformMode === "rust" ? {} : readLkgRecoveryPrefix(sessionId, lkgInput, messages, deps.db);
18654
+ const persistedUntaggedInputIds = deps.compactionOff || deps.transformMode === "rust" ? [] : readPersistedLkgUntaggedInputIds(deps.db, sessionId);
18655
+ const untaggedReplayIds = new Set([
18656
+ ...recovery.prefix?.untaggedInputIds ?? [],
18657
+ ...persistedUntaggedInputIds
18658
+ ]);
18629
18659
  logTransformTiming(sessionId, "lkg.entryProjection", tLkgEntry, deps.transformMode === "rust" || !entryReuse ? undefined : `reused=${entryReuse.reused} retained=${entryReuse.retained} retainedBytes=${entryReuse.retainedBytes}`);
18630
18660
  const resolvedSessionId = sessionId;
18631
18661
  const runNotificationParams = (sid) => {
@@ -19259,10 +19289,11 @@ Historian previously failed ${historianFailureState.failureCount} time(s), so Ma
19259
19289
  let taggingSucceeded = false;
19260
19290
  let recoveryBatch = null;
19261
19291
  let recoveryNormalized = false;
19262
- const normalizeRecoveryTail = recovery.prefix ? () => {
19292
+ const untaggedReplayTailServed = !!recovery.prefix || untaggedReplayIds.size > 0 && messages.some((message) => untaggedReplayIds.has(message.info.id ?? ""));
19293
+ const normalizeRecoveryTail = untaggedReplayTailServed ? () => {
19263
19294
  if (recoveryNormalized)
19264
19295
  return;
19265
- const tail = messages.filter((message) => recovery.prefix?.untaggedInputIds.has(message.info.id ?? ""));
19296
+ const tail = messages.filter((message) => untaggedReplayIds.has(message.info.id ?? ""));
19266
19297
  const tagged = tagMessages(sessionId, tail, deps.tagger, db, {
19267
19298
  skipPrefixInjection: !ctxReduceCallable,
19268
19299
  servedMessages: messages,
@@ -19288,7 +19319,7 @@ Historian previously failed ${historianFailureState.failureCount} time(s), so Ma
19288
19319
  const messagesForTagging = messagesBeforeInitialPrepare && hiddenMessagesAtCompactionSeam.length > 0 ? messagesBeforeInitialPrepare : messages;
19289
19320
  const canAdoptScopedToolSweep = isCacheBusting || canConsumeDeferredEarly;
19290
19321
  const scopedToolSweep = useScopedToolSweep(db, sessionId, canAdoptScopedToolSweep) ? true : createPreAdoptionToolSweepResolver(db, sessionId);
19291
- const result = tagMessages(sessionId, recovery.prefix ? messagesForTagging.filter((message) => !recovery.prefix?.untaggedInputIds.has(message.info.id ?? "")) : messagesForTagging, deps.tagger, db, {
19322
+ const result = tagMessages(sessionId, untaggedReplayIds.size > 0 ? messagesForTagging.filter((message) => !untaggedReplayIds.has(message.info.id ?? "")) : messagesForTagging, deps.tagger, db, {
19292
19323
  skipPrefixInjection,
19293
19324
  scopedToolSweep,
19294
19325
  servedMessages: messages,
@@ -19646,7 +19677,7 @@ Historian previously failed ${historianFailureState.failureCount} time(s), so Ma
19646
19677
  postTransformResult.bustedThisPass = true;
19647
19678
  passOutcome.markFinalized();
19648
19679
  const finalWireTail = describeFinalWireTail(messages);
19649
- const signedFitPreviouslyRefused = !compactionOff && getMergedReasoningStrippedIds(db, sessionId).has(SIGNED_FIT_REFUSED_MARKER);
19680
+ const signedFitPreviouslyRefused = !compactionOff && activeThinkingPrefixHold && getMergedReasoningStrippedIds(db, sessionId).has(SIGNED_FIT_REFUSED_MARKER);
19650
19681
  let finalWireEstimate;
19651
19682
  if (postTransformResult.bustedThisPass) {
19652
19683
  try {
@@ -19807,7 +19838,12 @@ Historian previously failed ${historianFailureState.failureCount} time(s), so Ma
19807
19838
  if (!finalWireEstimate) {
19808
19839
  sessionLog2(sessionId, `transform: final-wire telemetry estimate=unavailable trusted=false conversation=unknown tools=unknown system=unknown toolDefinitions=unknown tail=${finalWireTail}`);
19809
19840
  }
19810
- finishSystemDateRefresh(deps.historyRefreshSessions, dateRequest, postTransformResult.bustedThisPass && !activeThinkingPrefixHold && postTransformResult.openTurnSignedThinkingKept !== true || postTransformResult.thinkingReleasedForFit === true);
19841
+ if (!compactionOff) {
19842
+ const stillUntagged = untaggedReplayTailServed && !recoveryNormalized ? [...untaggedReplayIds] : [];
19843
+ if (JSON.stringify([...new Set(stillUntagged)].sort()) !== JSON.stringify([...new Set(persistedUntaggedInputIds)].sort()) && !persistLkgUntaggedInputIds(db, sessionId, stillUntagged))
19844
+ throw new Error("Cannot persist the last-good untagged-message record");
19845
+ }
19846
+ finishSystemDateRefresh(deps.historyRefreshSessions, dateRequest, postTransformResult.bustedThisPass && !activeThinkingPrefixHold && postTransformResult.openTurnSignedThinkingKept !== true || postTransformResult.thinkingReleasedForFit === true, postTransformResult.openTurnSignedThinkingKept === true);
19811
19847
  if (activeThinkingPrefixHold && !postTransformResult.thinkingReleasedForFit && sessionMeta.cachedM0Bytes != null && sessionMeta.cachedM1Bytes != null) {
19812
19848
  recordHeldHeadForRequest(sessionId, currentLkgRequestIdentity(sessionId), (ownsHistory) => deferDeliveredSystemRefresh(deps, sessionId, ownsHistory));
19813
19849
  }
@@ -20355,7 +20391,8 @@ function tryMessagesTransformLkgReplay(args) {
20355
20391
  sessionId,
20356
20392
  entry,
20357
20393
  messages: replay.messages,
20358
- ...keys
20394
+ ...keys,
20395
+ db
20359
20396
  }))
20360
20397
  return false;
20361
20398
  retirePendingSystemPromptDelivery(sessionId);
@@ -23226,7 +23263,7 @@ function registerRpcHandlers(rpcServer, args) {
23226
23263
  const db = readDatabase();
23227
23264
  if (!db)
23228
23265
  return { ok: false, error: "db unavailable" };
23229
- const { runManagedRecomp } = await importPluginModule(() => import("./recomp-orchestrator-4vfxej9t.js"));
23266
+ const { runManagedRecomp } = await importPluginModule(() => import("./recomp-orchestrator-f6m9jr7p.js"));
23230
23267
  const { sendIgnoredMessage } = await importPluginModule(() => import("./send-session-notification-3pxn658x.js"));
23231
23268
  log2(`[rpc] recomp requested for session ${sessionId}`);
23232
23269
  if (!args.client && !args.hiddenCompletionExecutor) {
@@ -23311,7 +23348,7 @@ function registerRpcHandlers(rpcServer, args) {
23311
23348
  const db = readDatabase();
23312
23349
  if (!db)
23313
23350
  return { ok: false, error: "db unavailable" };
23314
- const { runManagedWrapup } = await importPluginModule(() => import("./wrapup-orchestrator-psqz7yh0.js"));
23351
+ const { runManagedWrapup } = await importPluginModule(() => import("./wrapup-orchestrator-embdz8gj.js"));
23315
23352
  const model = liveSessionState.liveModelBySession.get(sessionId);
23316
23353
  const contextLimit = model ? resolveContextLimit(model.providerID, model.modelID, { db, sessionID: sessionId }) : 128000;
23317
23354
  const ctx = {
@@ -27999,6 +28036,7 @@ async function applyCuesThroughModule(args, chunk, manifestText, signal) {
27999
28036
  }
28000
28037
 
28001
28038
  // src/features/magic-context/dreamer/hidden-single-shot.ts
28039
+ var DREAMER_FIRST_OUTPUT_TIMEOUT_MS = 90000;
28002
28040
  async function runHiddenSingleShotPrompt(args) {
28003
28041
  const system = withContentLanguageDirective(args.system, args.language);
28004
28042
  const opening = args.executor.open({
@@ -28040,6 +28078,7 @@ async function runHiddenSingleShotPrompt(args) {
28040
28078
  }, {
28041
28079
  transport: Object.assign((request) => args.executor.attempt(handle, request), { childSessionId: handle.childSessionId }),
28042
28080
  timeoutMs: args.timeoutMs,
28081
+ ...args.firstOutputTimeoutMs !== undefined ? { firstOutputTimeoutMs: args.firstOutputTimeoutMs } : {},
28043
28082
  ...args.signal ? { signal: args.signal } : {},
28044
28083
  fallbackModels: args.fallbackModels,
28045
28084
  callContext: args.callContext,
@@ -28893,6 +28932,7 @@ async function classifyOneChunk(args, chunk, anchors, sliceMs, signal) {
28893
28932
  }, {
28894
28933
  transport: Object.assign((request) => executor.attempt(opened, request), { childSessionId: opened.childSessionId }),
28895
28934
  timeoutMs: sliceMs,
28935
+ firstOutputTimeoutMs: args.firstOutputTimeoutMs ?? DREAMER_FIRST_OUTPUT_TIMEOUT_MS,
28896
28936
  signal,
28897
28937
  fallbackModels: args.fallbackModels,
28898
28938
  callContext: "dreamer:classify-memories",
@@ -31367,6 +31407,7 @@ async function mapOneBatch(args, batch, sliceMs, signal) {
31367
31407
  model: args.model,
31368
31408
  fallbackModels: args.fallbackModels,
31369
31409
  timeoutMs: sliceMs,
31410
+ firstOutputTimeoutMs: args.firstOutputTimeoutMs ?? DREAMER_FIRST_OUTPUT_TIMEOUT_MS,
31370
31411
  signal,
31371
31412
  onOpened: () => {
31372
31413
  stage = "prompt";
@@ -31421,6 +31462,7 @@ async function mapOneBatch(args, batch, sliceMs, signal) {
31421
31462
  onBudgetUpdate
31422
31463
  }),
31423
31464
  timeoutMs: sliceMs,
31465
+ firstOutputTimeoutMs: args.firstOutputTimeoutMs ?? DREAMER_FIRST_OUTPUT_TIMEOUT_MS,
31424
31466
  signal,
31425
31467
  fallbackModels: args.fallbackModels,
31426
31468
  callContext: "dreamer:map-memories",
@@ -33498,6 +33540,7 @@ async function verifyOneBatch(args, batch, sliceMs, signal) {
33498
33540
  fallbackModels: args.fallbackModels,
33499
33541
  language: args.language,
33500
33542
  timeoutMs: sliceMs,
33543
+ firstOutputTimeoutMs: args.firstOutputTimeoutMs ?? DREAMER_FIRST_OUTPUT_TIMEOUT_MS,
33501
33544
  signal: batchSignal,
33502
33545
  onFailureOutput: (completion) => {
33503
33546
  failedCompletion = completion;
@@ -33555,6 +33598,7 @@ async function verifyOneBatch(args, batch, sliceMs, signal) {
33555
33598
  onBudgetUpdate
33556
33599
  }),
33557
33600
  timeoutMs: sliceMs,
33601
+ firstOutputTimeoutMs: args.firstOutputTimeoutMs ?? DREAMER_FIRST_OUTPUT_TIMEOUT_MS,
33558
33602
  signal: batchSignal,
33559
33603
  fallbackModels: args.fallbackModels,
33560
33604
  callContext: "dreamer:verify",
@@ -49634,6 +49678,7 @@ function renderItemByTag(db, sessionId, number, textIndexDomain = "part") {
49634
49678
  }
49635
49679
 
49636
49680
  // src/tools/ctx-expand/tools.ts
49681
+ var CTX_EXPAND_RUST_TAG_REFUSAL = "Tag lookup isn't available on this session: its §N§ tags are numbered by the Rust transform engine and ctx_expand cannot resolve those numbers, so no content was returned. Expand by message instead: ctx_expand(message=<ordinal>) or ctx_expand(start=<ordinal>, end=<ordinal>), using ordinals from a <session-history> heading or a ctx_search hit.";
49637
49682
  var ctxExpandArgsShape = {
49638
49683
  tag: tool.schema.union([tool.schema.number(), tool.schema.string()]).optional().describe("Tag number from a §N§ tag or a [dropped §N§] placeholder, not a message ordinal. Returns that one item in full. Use alone."),
49639
49684
  start: tool.schema.number().optional().describe("First message ordinal of the range (a <session-history> heading's start, or a ctx_search hit), not a tag number."),
@@ -49656,9 +49701,12 @@ function createCtxExpandTool(deps) {
49656
49701
  message: "number"
49657
49702
  });
49658
49703
  const sessionId = toolContext.sessionID;
49704
+ const mode = resolveCtxExpandMode(args, "positive");
49705
+ if (mode.kind === "tag" && deps.transformMode === "rust") {
49706
+ return CTX_EXPAND_RUST_TAG_REFUSAL;
49707
+ }
49659
49708
  if (!await prepareRawSessionOrdinals2(sessionId))
49660
49709
  return "Session ordinals are warming in the background. Retry ctx_expand shortly; no approximate ordinal was served.";
49661
- const mode = resolveCtxExpandMode(args, "positive");
49662
49710
  if (mode.kind === "error") {
49663
49711
  return mode.message;
49664
49712
  }
@@ -51545,7 +51593,11 @@ async function registerTools(context, db, config, rustToolBackends, isInternalCh
51545
51593
  getProtectionWindow: (sessionID) => getProtectionWindowForSession(db, sessionID, getObservedEpochFloor(db, sessionID)),
51546
51594
  ...rustToolBackends ? { rustToolBackends } : {}
51547
51595
  }) : {},
51548
- ...createCtxExpandTools({ db, expandTools: config.historian?.expand_tools }),
51596
+ ...createCtxExpandTools({
51597
+ db,
51598
+ expandTools: config.historian?.expand_tools,
51599
+ transformMode: config.transform_mode
51600
+ }),
51549
51601
  ...createCtxNoteTools({
51550
51602
  ...project,
51551
51603
  dreamerEnabled: isDreamerRunnable(config),
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/v2/hooks/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAO7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,EAAE,KAAK,QAAQ,EAA6B,MAAM,qBAAqB,CAAC;AAM/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,SAAS,EAClB,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,wBAAwB,EAChC,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO;;GAiGnD"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/v2/hooks/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAO7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,EAAE,KAAK,QAAQ,EAA6B,MAAM,qBAAqB,CAAC;AAM/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,SAAS,EAClB,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,wBAAwB,EAChC,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO;;GAqGnD"}
@@ -17,8 +17,8 @@ import {
17
17
  indexMessagesAfterOrdinal2,
18
18
  indexSourcesAfterOrdinal2,
19
19
  sweepOrphanedOpenCodeMessageIndexesCooperatively2
20
- } from "./server-2ehj0bw7.js";
21
- import"./server-xhab8jx8.js";
20
+ } from "./server-2ar62dyx.js";
21
+ import"./server-9hx7g5jp.js";
22
22
  import"./server-27gq4mfz.js";
23
23
  import"./server-1zx87sdm.js";
24
24
  import"./server-n1prf1g6.js";
@@ -13,7 +13,7 @@ import {
13
13
  markMessageIndexDirty2,
14
14
  getIndexableContent2,
15
15
  indexSingleMessage2
16
- } from "./server-2ehj0bw7.js";
16
+ } from "./server-2ar62dyx.js";
17
17
  import"./server-1zx87sdm.js";
18
18
  import"./server-27gq4mfz.js";
19
19
  import"./server-tgnbmwah.js";
@@ -23,7 +23,7 @@ import"./server-51779zs2.js";
23
23
  import"./server-xj136kt8.js";
24
24
  import"./server-2ra6pwf3.js";
25
25
  import"./server-n1prf1g6.js";
26
- import"./server-xhab8jx8.js";
26
+ import"./server-9hx7g5jp.js";
27
27
  import"./server-g3qma5c0.js";
28
28
  import"./server-1wy7b9de.js";
29
29
  import"./server-6tmj0s7j.js";
@@ -9,7 +9,7 @@ import {
9
9
  import"./server-fr0wbhdn.js";
10
10
  import {
11
11
  runMigrationsWithRetry
12
- } from "./server-gpvay0xz.js";
12
+ } from "./server-xq7dfjke.js";
13
13
  import"./server-pwv4ezb0.js";
14
14
  import"./server-2ra6pwf3.js";
15
15
  import"./server-rmygf5pn.js";
@@ -18,7 +18,7 @@ import"./server-fb3zxn06.js";
18
18
  import {
19
19
  setSqlitePragmaConfig,
20
20
  initializeDatabase
21
- } from "./server-a2eqhkxr.js";
21
+ } from "./server-bmymkx73.js";
22
22
  import"./server-51779zs2.js";
23
23
  import"./server-xj136kt8.js";
24
24
  import"./server-1wy7b9de.js";
@@ -32,7 +32,7 @@ try {
32
32
  await runMessageFtsRowidMapBackfill(db);
33
33
  reply = { kind: "fts-rowid-backfill" };
34
34
  } else if (input.searchArchive) {
35
- const { renderSearchArchive } = await import("./search-archive-vv48s2aa.js");
35
+ const { renderSearchArchive } = await import("./search-archive-wve3tq1k.js");
36
36
  const { readRawSessionMessageIdOrdinalsForRangeFromDb } = await import("./read-session-raw-yaegtjzh.js");
37
37
  const archive = input.searchArchive;
38
38
  let raw;
@@ -62,7 +62,7 @@ try {
62
62
  { configureContextDatabasePragmas }
63
63
  ] = await Promise.all([
64
64
  import("./harness-e4avh192.js"),
65
- import("./message-index-48f7hw7a.js"),
65
+ import("./message-index-8vz2pq76.js"),
66
66
  import("./sqlite-context-pragmas-mv9jqwjh.js")
67
67
  ]);
68
68
  setHarness(input.harness ?? "opencode");
@@ -76,7 +76,7 @@ try {
76
76
  const { setHarness } = await import("./harness-e4avh192.js");
77
77
  setHarness(input.harness ?? "opencode");
78
78
  const [{ indexMessageInShortChunks }, { configureContextDatabasePragmas }] = await Promise.all([
79
- import("./message-index-bounded-w3hfm29z.js"),
79
+ import("./message-index-bounded-spd8r7pj.js"),
80
80
  import("./sqlite-context-pragmas-mv9jqwjh.js")
81
81
  ]);
82
82
  configureContextDatabasePragmas(db);
@@ -35,7 +35,7 @@ import {
35
35
  readSessionChunk2,
36
36
  getRawSessionMessageIdsThrough2,
37
37
  readRawSessionSeedTail2
38
- } from "./server-xhab8jx8.js";
38
+ } from "./server-9hx7g5jp.js";
39
39
  import"./server-27gq4mfz.js";
40
40
  import"./server-1zx87sdm.js";
41
41
  import"./server-n1prf1g6.js";
@@ -7,10 +7,10 @@ import {
7
7
  setRecompTerminal2,
8
8
  buildRecompDeps2,
9
9
  runManagedRecomp2
10
- } from "./server-bfpda1tb.js";
10
+ } from "./server-6vdzn1td.js";
11
11
  import"./server-d04vrx0j.js";
12
- import"./server-my7k4eds.js";
13
- import"./server-2ehj0bw7.js";
12
+ import"./server-hm38q7r0.js";
13
+ import"./server-2ar62dyx.js";
14
14
  import"./server-zzkj2fch.js";
15
15
  import"./server-n37sebck.js";
16
16
  import"./server-8by8qfec.js";
@@ -18,7 +18,7 @@ import"./server-4dhv7mqz.js";
18
18
  import"./server-34kwfsr4.js";
19
19
  import"./server-a9xqj88f.js";
20
20
  import"./server-qt1qqasc.js";
21
- import"./server-xhab8jx8.js";
21
+ import"./server-9hx7g5jp.js";
22
22
  import"./server-27gq4mfz.js";
23
23
  import"./server-1zx87sdm.js";
24
24
  import"./server-n1prf1g6.js";
@@ -31,9 +31,9 @@ import"./server-271qxsf5.js";
31
31
  import"./server-hy3d3vsx.js";
32
32
  import"./server-46neh5fa.js";
33
33
  import"./server-6tmj0s7j.js";
34
- import"./server-a2eqhkxr.js";
34
+ import"./server-bmymkx73.js";
35
35
  import"./server-fb3zxn06.js";
36
- import"./server-gpvay0xz.js";
36
+ import"./server-xq7dfjke.js";
37
37
  import"./server-fr0wbhdn.js";
38
38
  import"./server-rmygf5pn.js";
39
39
  import"./server-1wy7b9de.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  renderSearchArchive2,
3
3
  renderSearchArchiveOffThread2
4
- } from "./server-qv7f0hhe.js";
4
+ } from "./server-45q69hkq.js";
5
5
  import"./server-kaqs6h31.js";
6
- import"./server-xhab8jx8.js";
6
+ import"./server-9hx7g5jp.js";
7
7
  import"./server-27gq4mfz.js";
8
8
  import"./server-1zx87sdm.js";
9
9
  import"./server-n1prf1g6.js";
@@ -5,16 +5,16 @@ import {
5
5
  resolveMemoriesByIdsForSearch2,
6
6
  unifiedSearch2,
7
7
  formatSearchResults2
8
- } from "./server-1nyybqan.js";
8
+ } from "./server-gsxjv2q2.js";
9
9
  import"./server-kaqs6h31.js";
10
- import"./server-my7k4eds.js";
11
- import"./server-2ehj0bw7.js";
10
+ import"./server-hm38q7r0.js";
11
+ import"./server-2ar62dyx.js";
12
12
  import"./server-zzkj2fch.js";
13
13
  import"./server-n37sebck.js";
14
14
  import"./server-8by8qfec.js";
15
15
  import"./server-4dhv7mqz.js";
16
16
  import"./server-qt1qqasc.js";
17
- import"./server-xhab8jx8.js";
17
+ import"./server-9hx7g5jp.js";
18
18
  import"./server-27gq4mfz.js";
19
19
  import"./server-1zx87sdm.js";
20
20
  import"./server-n1prf1g6.js";
@@ -23,7 +23,7 @@ import"./server-271qxsf5.js";
23
23
  import"./server-hy3d3vsx.js";
24
24
  import"./server-46neh5fa.js";
25
25
  import"./server-6tmj0s7j.js";
26
- import"./server-gpvay0xz.js";
26
+ import"./server-xq7dfjke.js";
27
27
  import"./server-fr0wbhdn.js";
28
28
  import"./server-rmygf5pn.js";
29
29
  import"./server-1wy7b9de.js";
@@ -35,7 +35,7 @@ import {
35
35
  } from "./server-2ra6pwf3.js";
36
36
  import {
37
37
  cleanUserText2
38
- } from "./server-xhab8jx8.js";
38
+ } from "./server-9hx7g5jp.js";
39
39
  import {
40
40
  recordMessageFtsRowid2,
41
41
  recordIndexedMessageTime2,
@@ -17,7 +17,7 @@ import {
17
17
  import {
18
18
  hasRawMessageProvider2,
19
19
  readRawSessionMessageIdOrdinalsForRange2
20
- } from "./server-xhab8jx8.js";
20
+ } from "./server-9hx7g5jp.js";
21
21
 
22
22
  // src/tools/ctx-expand/search-archive.ts
23
23
  var archiveReadsOnThisThread = 0;