@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
@@ -89,7 +89,7 @@ import {
89
89
  toMessageIndexSource2,
90
90
  clearIndexedMessagesInTransaction2,
91
91
  indexSourcesAfterOrdinal2
92
- } from "./server-2ehj0bw7.js";
92
+ } from "./server-2ar62dyx.js";
93
93
  import {
94
94
  detectOverflow,
95
95
  SESSION_META_SELECT_COLUMNS,
@@ -130,6 +130,7 @@ import {
130
130
  isRustMarkerAdmissionFenced,
131
131
  readReplayEnvelope,
132
132
  readReplayDocument,
133
+ updateReplayDocument,
133
134
  writeReplayDocument,
134
135
  describeProtectedTailDrainBudgetSkip,
135
136
  loadProtectedTailMeta,
@@ -160,6 +161,7 @@ import {
160
161
  serializeStrippedPlaceholderState,
161
162
  THINKING_BINDING_RECOVERY_FROZEN_PREFIX,
162
163
  THINKING_BINDING_STRIP_ORDER_END_MARKER,
164
+ COMPACTION_OFF_THINKING_FROZEN_PREFIX,
163
165
  getMergedReasoningStrippedIds,
164
166
  addMergedReasoningStrippedIds,
165
167
  parseProcessedImageMarkers,
@@ -185,7 +187,7 @@ import {
185
187
  getRawSessionTagKeysThrough2,
186
188
  getLegacyProtectedTailStartOrdinal2,
187
189
  readSessionChunk2
188
- } from "./server-xhab8jx8.js";
190
+ } from "./server-9hx7g5jp.js";
189
191
  import {
190
192
  getTableColumnNames
191
193
  } from "./server-pwv4ezb0.js";
@@ -195,7 +197,7 @@ import {
195
197
  LATEST_SUPPORTED_VERSION,
196
198
  getPersistedSchemaVersion,
197
199
  openDatabase
198
- } from "./server-a2eqhkxr.js";
200
+ } from "./server-bmymkx73.js";
199
201
  import {
200
202
  providerMass,
201
203
  calibrationForModelKey,
@@ -243,7 +245,7 @@ import {
243
245
  resolveStoredPathWorkspaceIdentity,
244
246
  sourceNameForMemory,
245
247
  computeWorkspaceEpochFingerprint
246
- } from "./server-gpvay0xz.js";
248
+ } from "./server-xq7dfjke.js";
247
249
  import {
248
250
  shouldSkipHomeProjectMemory,
249
251
  resolveProjectIdentity
@@ -256,7 +258,7 @@ import {
256
258
  userFacingFailureCode,
257
259
  promoteSessionFactsDurable,
258
260
  embedPromotedFacts
259
- } from "./server-my7k4eds.js";
261
+ } from "./server-hm38q7r0.js";
260
262
  import {
261
263
  isMarkerCandidateBasisCurrent2,
262
264
  invalidateMarkerCandidateBasis2,
@@ -2521,6 +2523,34 @@ function noteLkgCapturedPrefix(sessionId) {
2521
2523
  if (!sessions.has(sessionId))
2522
2524
  sessions.set(sessionId, {});
2523
2525
  }
2526
+ function readPersistedLkgUntaggedInputIds(db, sessionId) {
2527
+ try {
2528
+ const saved = readReplayEnvelope(db, sessionId, "read").lkgUntaggedInputIds;
2529
+ return Array.isArray(saved) ? saved.filter((id) => typeof id === "string" && id.length > 0) : [];
2530
+ } catch (error) {
2531
+ sessionLog2(sessionId, "LKG untagged-input record unreadable:", error);
2532
+ return [];
2533
+ }
2534
+ }
2535
+ function persistLkgUntaggedInputIds(db, sessionId, ids) {
2536
+ const next = [...new Set(ids)].sort();
2537
+ try {
2538
+ return updateReplayDocument(db, sessionId, (doc) => {
2539
+ const saved = Array.isArray(doc.lkgUntaggedInputIds) ? doc.lkgUntaggedInputIds : [];
2540
+ if (JSON.stringify(saved) === JSON.stringify(next))
2541
+ return false;
2542
+ doc.version = 2;
2543
+ if (next.length > 0)
2544
+ doc.lkgUntaggedInputIds = next;
2545
+ else
2546
+ delete doc.lkgUntaggedInputIds;
2547
+ return true;
2548
+ });
2549
+ } catch (error) {
2550
+ sessionLog2(sessionId, "LKG untagged-input record write failed:", error);
2551
+ return false;
2552
+ }
2553
+ }
2524
2554
  function noteLkgRecoveryPrefix(args) {
2525
2555
  const digests = [
2526
2556
  ...args.entry.entryContentDigests,
@@ -2531,19 +2561,23 @@ function noteLkgRecoveryPrefix(args) {
2531
2561
  const ids = args.entry.entryInputIds;
2532
2562
  if (ids.some((id) => !id) || new Set(ids).size !== ids.length)
2533
2563
  return false;
2564
+ const untaggedInputIds = new Set([
2565
+ ...sessions.get(args.sessionId)?.prefix?.untaggedInputIds ?? [],
2566
+ ...args.db ? readPersistedLkgUntaggedInputIds(args.db, args.sessionId) : [],
2567
+ ...ids.slice(args.entry.anchorIndex + 1)
2568
+ ]);
2534
2569
  sessions.set(args.sessionId, {
2535
2570
  fenceRevision: sessions.get(args.sessionId)?.fenceRevision,
2536
2571
  prefix: {
2537
2572
  inputs: ids.map((id, index) => ({ id, digest: digests[index] })),
2538
2573
  json: JSON.stringify(args.messages),
2539
- untaggedInputIds: new Set([
2540
- ...sessions.get(args.sessionId)?.prefix?.untaggedInputIds ?? [],
2541
- ...ids.slice(args.entry.anchorIndex + 1)
2542
- ]),
2574
+ untaggedInputIds,
2543
2575
  modelKey: args.modelKey,
2544
2576
  providerKey: args.providerKey
2545
2577
  }
2546
2578
  });
2579
+ if (args.db)
2580
+ persistLkgUntaggedInputIds(args.db, args.sessionId, untaggedInputIds);
2547
2581
  return true;
2548
2582
  }
2549
2583
  function readLkgRecoveryPrefix(sessionId, inputs, messages, db) {
@@ -3543,11 +3577,15 @@ function clonePiContentDecisions(raw, filter) {
3543
3577
  ])}`);
3544
3578
  continue;
3545
3579
  }
3546
- if (entry.startsWith(THINKING_BINDING_RECOVERY_FROZEN_PREFIX)) {
3547
- const messageId = entry.slice(THINKING_BINDING_RECOVERY_FROZEN_PREFIX.length);
3580
+ const thinkingPrefix = [
3581
+ THINKING_BINDING_RECOVERY_FROZEN_PREFIX,
3582
+ COMPACTION_OFF_THINKING_FROZEN_PREFIX
3583
+ ].find((prefix) => entry.startsWith(prefix));
3584
+ if (thinkingPrefix) {
3585
+ const messageId = entry.slice(thinkingPrefix.length);
3548
3586
  if (messageId.length === 0 || !filter.includeMessageId(messageId))
3549
3587
  continue;
3550
- copied.push(`${THINKING_BINDING_RECOVERY_FROZEN_PREFIX}${mapMessageId(filter, messageId) ?? messageId}`);
3588
+ copied.push(`${thinkingPrefix}${mapMessageId(filter, messageId) ?? messageId}`);
3551
3589
  continue;
3552
3590
  }
3553
3591
  if (entry.startsWith(MERGED_REASONING_PARTS_PREFIX) || entry.startsWith("pi-content-replay-"))
@@ -6466,9 +6504,33 @@ var promptFailureDetails = new WeakMap;
6466
6504
  function isHostTimeoutError(error) {
6467
6505
  return error !== null && typeof error === "object" && error.name === "TimeoutError";
6468
6506
  }
6507
+
6508
+ class ModelProducedNoOutputError extends Error {
6509
+ waitedMs;
6510
+ constructor(waitedMs) {
6511
+ super(`prompt timed out after ${waitedMs}ms with no model output`);
6512
+ this.waitedMs = waitedMs;
6513
+ this.name = "ModelProducedNoOutputError";
6514
+ }
6515
+ }
6516
+ var modelActivityBySignal = new WeakMap;
6517
+ function noteModelActivityMonitored(signal) {
6518
+ const activity = signal ? modelActivityBySignal.get(signal) : undefined;
6519
+ if (activity)
6520
+ activity.monitored = true;
6521
+ }
6522
+ function noteModelOutputReceived(signal) {
6523
+ const activity = signal ? modelActivityBySignal.get(signal) : undefined;
6524
+ if (activity) {
6525
+ activity.monitored = true;
6526
+ activity.received = true;
6527
+ }
6528
+ }
6469
6529
  function isPromptTimeoutError(error) {
6470
6530
  if (isHostTimeoutError(error))
6471
6531
  return true;
6532
+ if (error instanceof ModelProducedNoOutputError)
6533
+ return true;
6472
6534
  return error instanceof Error && /^prompt timed out after \d+ms$/.test(error.message);
6473
6535
  }
6474
6536
  function getPromptFailureDetail(error) {
@@ -6546,12 +6608,22 @@ function raceWithSignal(work, signal) {
6546
6608
  work.then(resolve, reject).finally(() => signal.removeEventListener("abort", abort));
6547
6609
  });
6548
6610
  }
6549
- async function promptWithTimeout(client, args, timeoutMs, signal, transport) {
6611
+ async function promptWithTimeout(client, args, timeoutMs, signal, transport, firstOutputTimeoutMs) {
6550
6612
  if (signal?.aborted) {
6551
6613
  throw new Error(externalAbortMessage(signal));
6552
6614
  }
6553
6615
  const controller = new AbortController;
6554
6616
  const timeout = setTimeout(() => controller.abort(), timeoutMs);
6617
+ const activity = { monitored: false, received: false };
6618
+ modelActivityBySignal.set(controller.signal, activity);
6619
+ let silent = false;
6620
+ const firstOutputTimer = firstOutputTimeoutMs !== undefined && firstOutputTimeoutMs < timeoutMs ? setTimeout(() => {
6621
+ if (!activity.monitored || activity.received)
6622
+ return;
6623
+ silent = true;
6624
+ controller.abort();
6625
+ }, firstOutputTimeoutMs) : undefined;
6626
+ const timeoutError = () => silent && firstOutputTimeoutMs !== undefined ? new ModelProducedNoOutputError(firstOutputTimeoutMs) : new Error(`prompt timed out after ${timeoutMs}ms`);
6555
6627
  const onExternalAbort = () => controller.abort();
6556
6628
  signal?.addEventListener("abort", onExternalAbort);
6557
6629
  try {
@@ -6574,7 +6646,7 @@ async function promptWithTimeout(client, args, timeoutMs, signal, transport) {
6574
6646
  if (!transport || transport.childSessionId) {
6575
6647
  await abortChildRun(client, transport?.childSessionId ?? args.path.id);
6576
6648
  }
6577
- throw new Error(`prompt timed out after ${timeoutMs}ms`);
6649
+ throw timeoutError();
6578
6650
  }
6579
6651
  if (isHostTimeoutError(error)) {
6580
6652
  if (!transport || transport.childSessionId) {
@@ -6584,13 +6656,15 @@ async function promptWithTimeout(client, args, timeoutMs, signal, transport) {
6584
6656
  throw error;
6585
6657
  } finally {
6586
6658
  clearTimeout(timeout);
6659
+ if (firstOutputTimer)
6660
+ clearTimeout(firstOutputTimer);
6587
6661
  signal?.removeEventListener("abort", onExternalAbort);
6588
6662
  }
6589
6663
  if (signal?.aborted || controller.signal.aborted) {
6590
6664
  if (!transport || transport.childSessionId) {
6591
6665
  await abortChildRun(client, transport?.childSessionId ?? args.path.id);
6592
6666
  }
6593
- throw new Error(signal?.aborted ? externalAbortMessage(signal) : `prompt timed out after ${timeoutMs}ms`);
6667
+ throw signal?.aborted ? new Error(externalAbortMessage(signal)) : timeoutError();
6594
6668
  }
6595
6669
  }
6596
6670
  async function abortChildRun(client, sessionId) {
@@ -6608,6 +6682,8 @@ async function abortChildRun(client, sessionId) {
6608
6682
  function isNonRetryable(error, externalSignal) {
6609
6683
  if (externalSignal?.aborted || error instanceof HiddenCompletionRefusal && error.terminal || error instanceof HiddenAgentStepLimit || error instanceof DreamTokenBudgetExceeded)
6610
6684
  return true;
6685
+ if (error instanceof ModelProducedNoOutputError)
6686
+ return false;
6611
6687
  if (error instanceof Error) {
6612
6688
  if (error.name === "AbortError")
6613
6689
  return true;
@@ -6639,7 +6715,7 @@ function classifyPromptFailure(error, phase, externalSignal) {
6639
6715
  if (externalSignal?.aborted || message === "prompt aborted by external signal") {
6640
6716
  return "child_aborted";
6641
6717
  }
6642
- if (/^prompt timed out after \d+ms$/.test(message) || isHostTimeoutError(error)) {
6718
+ if (error instanceof ModelProducedNoOutputError || /^prompt timed out after \d+ms$/.test(message) || isHostTimeoutError(error)) {
6643
6719
  return "provider_timeout";
6644
6720
  }
6645
6721
  if (phase === "validation") {
@@ -6674,11 +6750,11 @@ function throwWithPromptFailure(legacyError, failedAttempts, args, timeoutMs, tr
6674
6750
  });
6675
6751
  throw error;
6676
6752
  }
6677
- async function attemptOnce(client, args, timeoutMs, signal, callContext, label, transport, allowModelSuggestions = true) {
6753
+ async function attemptOnce(client, args, timeoutMs, signal, callContext, label, transport, allowModelSuggestions = true, firstOutputTimeoutMs) {
6678
6754
  const originalBody = { ...args.body };
6679
6755
  const attemptArgs = copyPromptArgs(args, originalBody);
6680
6756
  try {
6681
- await promptWithTimeout(client, attemptArgs, timeoutMs, signal, transport);
6757
+ await promptWithTimeout(client, attemptArgs, timeoutMs, signal, transport, firstOutputTimeoutMs);
6682
6758
  return;
6683
6759
  } catch (error) {
6684
6760
  if (isNonRetryable(error, signal) || !allowModelSuggestions)
@@ -6697,9 +6773,30 @@ async function attemptOnce(client, args, timeoutMs, signal, callContext, label,
6697
6773
  providerID: suggestion.providerID,
6698
6774
  modelID: suggestion.suggestion
6699
6775
  }
6700
- }), timeoutMs, signal, transport);
6776
+ }), timeoutMs, signal, transport, firstOutputTimeoutMs);
6701
6777
  }
6702
6778
  }
6779
+ function createChainClock(options, timeoutMs) {
6780
+ const fallbacks = options.fallbackModels ?? [];
6781
+ const hasValidFallbackFrom = (index) => fallbacks.slice(index).some((fallback) => {
6782
+ const entry = toModelEntry(fallback);
6783
+ return entry ? parseProviderModel(entry.model) !== null : false;
6784
+ });
6785
+ let silentSpentMs = 0;
6786
+ return {
6787
+ budget(nextFallbackIndex) {
6788
+ const attemptTimeoutMs = Math.max(1, timeoutMs - silentSpentMs);
6789
+ if (options.firstOutputTimeoutMs === undefined || !hasValidFallbackFrom(nextFallbackIndex))
6790
+ return { timeoutMs: attemptTimeoutMs };
6791
+ const bound = Math.min(options.firstOutputTimeoutMs, Math.floor(attemptTimeoutMs / 2));
6792
+ return bound > 0 ? { timeoutMs: attemptTimeoutMs, firstOutputTimeoutMs: bound } : { timeoutMs: attemptTimeoutMs };
6793
+ },
6794
+ settle(error, startedAt) {
6795
+ if (error instanceof ModelProducedNoOutputError)
6796
+ silentSpentMs += Date.now() - startedAt;
6797
+ }
6798
+ };
6799
+ }
6703
6800
  async function promptSyncWithModelSuggestionRetry(client, args, options = {}) {
6704
6801
  const timeoutMs = options.timeoutMs ?? 300000;
6705
6802
  const callContext = options.callContext ?? "subagent";
@@ -6708,11 +6805,15 @@ async function promptSyncWithModelSuggestionRetry(client, args, options = {}) {
6708
6805
  const baseArgs = copyPromptArgs(args, baseBody);
6709
6806
  const explicitPrimaryLabel = baseBody.model?.providerID && baseBody.model.modelID ? `${baseBody.model.providerID}/${baseBody.model.modelID}` : "primary";
6710
6807
  let lastError = null;
6808
+ const clock = createChainClock(options, timeoutMs);
6809
+ const primaryStartedAt = Date.now();
6711
6810
  try {
6712
- await attemptOnce(client, baseArgs, timeoutMs, options.signal, callContext, explicitPrimaryLabel, options.transport, options.allowModelSuggestions);
6811
+ const budget = clock.budget(0);
6812
+ await attemptOnce(client, baseArgs, budget.timeoutMs, options.signal, callContext, explicitPrimaryLabel, options.transport, options.allowModelSuggestions, budget.firstOutputTimeoutMs);
6713
6813
  return;
6714
6814
  } catch (error) {
6715
6815
  lastError = error;
6816
+ clock.settle(error, primaryStartedAt);
6716
6817
  if (isNonRetryable(error, options.signal))
6717
6818
  throw error;
6718
6819
  if (fallbacks.length === 0) {
@@ -6734,12 +6835,15 @@ async function promptSyncWithModelSuggestionRetry(client, args, options = {}) {
6734
6835
  model: parsed,
6735
6836
  ...fallback?.qualifier ? { variant: fallback.qualifier } : {}
6736
6837
  });
6838
+ const attemptStartedAt = Date.now();
6737
6839
  try {
6738
- await attemptOnce(client, attemptArgs, timeoutMs, options.signal, callContext, label, options.transport, options.allowModelSuggestions);
6840
+ const budget = clock.budget(i + 1);
6841
+ await attemptOnce(client, attemptArgs, budget.timeoutMs, options.signal, callContext, label, options.transport, options.allowModelSuggestions, budget.firstOutputTimeoutMs);
6739
6842
  log2(`[${callContext}] fallback succeeded with ${label} (attempt ${i + 2}/${fallbacks.length + 1})`);
6740
6843
  return;
6741
6844
  } catch (error) {
6742
6845
  lastError = error;
6846
+ clock.settle(error, attemptStartedAt);
6743
6847
  if (isNonRetryable(error, options.signal))
6744
6848
  throw error;
6745
6849
  const remaining = fallbacks.length - i - 1;
@@ -6751,9 +6855,9 @@ async function promptSyncWithModelSuggestionRetry(client, args, options = {}) {
6751
6855
  log2(`[${callContext}] all models exhausted; tried: ${[explicitPrimaryLabel, ...fallbacks.map((fallback) => toModelEntry(fallback)?.model ?? String(fallback))].join(", ")}; last error: ${shortErr(lastError)}`);
6752
6856
  throw lastError ?? new Error("All fallback models failed");
6753
6857
  }
6754
- async function attemptAndValidate(client, args, timeoutMs, signal, callContext, attempt, options) {
6858
+ async function attemptAndValidate(client, args, timeoutMs, signal, callContext, attempt, options, firstOutputTimeoutMs) {
6755
6859
  try {
6756
- await attemptOnce(client, args, timeoutMs, signal, callContext, attempt.label, options.transport, options.allowModelSuggestions);
6860
+ await attemptOnce(client, args, timeoutMs, signal, callContext, attempt.label, options.transport, options.allowModelSuggestions, firstOutputTimeoutMs);
6757
6861
  } catch (error) {
6758
6862
  throw {
6759
6863
  error,
@@ -6815,6 +6919,8 @@ async function promptSyncWithValidatedOutputRetry(client, args, options) {
6815
6919
  let firstError = null;
6816
6920
  let lastError = null;
6817
6921
  const cooledPrimary = primaryQuotaFailure(explicitPrimaryLabel);
6922
+ const clock = createChainClock(options, timeoutMs);
6923
+ const primaryStartedAt = Date.now();
6818
6924
  try {
6819
6925
  if (cooledPrimary)
6820
6926
  throw {
@@ -6829,16 +6935,18 @@ async function promptSyncWithValidatedOutputRetry(client, args, options) {
6829
6935
  skipped: true
6830
6936
  }
6831
6937
  };
6832
- return await attemptAndValidate(client, baseArgs, timeoutMs, options.signal, callContext, {
6938
+ const budget = clock.budget(0);
6939
+ return await attemptAndValidate(client, baseArgs, budget.timeoutMs, options.signal, callContext, {
6833
6940
  label: explicitPrimaryLabel,
6834
6941
  attemptIndex: 0,
6835
6942
  isFallback: false,
6836
6943
  totalAttempts,
6837
6944
  model: baseBody.model
6838
- }, options);
6945
+ }, options, budget.firstOutputTimeoutMs);
6839
6946
  } catch (caught) {
6840
6947
  const failure = caught;
6841
6948
  failedAttempts.push(failure);
6949
+ clock.settle(failure.error, primaryStartedAt);
6842
6950
  firstError = failure.error;
6843
6951
  lastError = failure.error;
6844
6952
  if (failure.error instanceof DreamerProviderOutputFailureError && failure.error.quotaResetAt !== undefined)
@@ -6876,13 +6984,16 @@ async function promptSyncWithValidatedOutputRetry(client, args, options) {
6876
6984
  totalAttempts,
6877
6985
  model: parsed
6878
6986
  };
6987
+ const attemptStartedAt = Date.now();
6879
6988
  try {
6880
- const result = await attemptAndValidate(client, attemptArgs, timeoutMs, options.signal, callContext, attempt, options);
6989
+ const budget = clock.budget(i + 1);
6990
+ const result = await attemptAndValidate(client, attemptArgs, budget.timeoutMs, options.signal, callContext, attempt, options, budget.firstOutputTimeoutMs);
6881
6991
  log2(`[${callContext}] fallback succeeded with ${label} (attempt ${i + 2}/${fallbacks.length + 1})`);
6882
6992
  return result;
6883
6993
  } catch (caught) {
6884
6994
  const failure = caught;
6885
6995
  failedAttempts.push(failure);
6996
+ clock.settle(failure.error, attemptStartedAt);
6886
6997
  lastError = failure.error;
6887
6998
  if (isNonRetryable(failure.error, options.signal)) {
6888
6999
  throwWithPromptFailure(failure.error, failedAttempts, args, timeoutMs, options.transport);
@@ -7234,6 +7345,24 @@ function isTerminalAssistant(message) {
7234
7345
  const info = infoOf(message);
7235
7346
  return isSettledAssistant(message) && info.finish !== "tool-calls" && info.finish !== "tool_use" && !(message && typeof message === "object" && Array.isArray(message.parts) && message.parts.some((part) => part.type === "tool"));
7236
7347
  }
7348
+ function showsModelOutput(message) {
7349
+ if (infoOf(message).role !== "assistant")
7350
+ return false;
7351
+ const tokens = sumTokensFromChildMessages([message]);
7352
+ if (tokens.input + tokens.output + tokens.cacheRead + tokens.cacheWrite > 0)
7353
+ return true;
7354
+ const parts = message?.parts;
7355
+ if (!Array.isArray(parts))
7356
+ return false;
7357
+ return parts.some((part) => {
7358
+ if (!part || typeof part !== "object")
7359
+ return false;
7360
+ const { type, text } = part;
7361
+ if (type === "tool")
7362
+ return true;
7363
+ return (type === "text" || type === "reasoning") && typeof text === "string" && text.trim().length > 0;
7364
+ });
7365
+ }
7237
7366
  function unwrapData(response) {
7238
7367
  if (response && typeof response === "object" && "data" in response) {
7239
7368
  return response.data;
@@ -7331,6 +7460,8 @@ async function promptAsyncAndWaitForIdle(client, request, options = {}) {
7331
7460
  }
7332
7461
  let sentAt = Date.now();
7333
7462
  let sawBusy = false;
7463
+ noteModelActivityMonitored(signal);
7464
+ let sawOutput = false;
7334
7465
  for (;; ) {
7335
7466
  await sleep(pollIntervalMs, signal);
7336
7467
  const hostError = activeSessionErrors.get(sessionId);
@@ -7345,6 +7476,13 @@ async function promptAsyncAndWaitForIdle(client, request, options = {}) {
7345
7476
  }
7346
7477
  const status = await readStatus(session, sessionId, dir, signal);
7347
7478
  const messages = await readMessages(session, sessionId, dir, signal);
7479
+ if (!sawOutput && messages.some((message) => {
7480
+ const id = messageId2(message);
7481
+ return id !== null && !initialBaseline.has(id) && showsModelOutput(message);
7482
+ })) {
7483
+ sawOutput = true;
7484
+ noteModelOutputReceived(signal);
7485
+ }
7348
7486
  if (budget) {
7349
7487
  const latest = messages.at(-1);
7350
7488
  const latestId = messageId2(latest);
@@ -18658,4 +18796,4 @@ ${failure}`;
18658
18796
  }
18659
18797
  }
18660
18798
 
18661
- export { historianRunConfig, dreamerRunConfig, pluginConfigReader, currentPluginConfigReader, withLiveDreamerOutputCap, COMPARTMENT_LEASE_RENEWAL_MS, acquireCompartmentLease, renewCompartmentLease, releaseCompartmentLeaseBestEffort, isCompartmentLeaseHeld, queueM0Mutation, getMaxM0MutationId, getCompartments, getLastCompartmentEndMessage, getLastCompartmentEndMessageId, getUncoveredCompartmentEndsThrough, providerResponseFailed, isSuccessfulProviderCompletion, rememberUnpublishedAutoSearchNoHint, getUnpublishedAutoSearchNoHint, forgetUnpublishedAutoSearchNoHint, registerAutoSearchWork, getOrCreateSessionMeta, updateSessionMeta, advanceToolReclaimWatermark, markSessionCleanupPending, retryPendingSessionCleanups, retryPendingRustSessionCleanupsForProject, clearSession, requestPendingMaterialization, pendingMaterializationOrigin, hasPendingMaterializationOrigin, clearPendingMaterialization, recordSystemPromptForRequest, recordHeldHeadForRequest, bindSystemPromptResponse, isHeldHeadForRequest, deferDeliveredSystemRefresh, retirePendingSystemPromptDelivery, lkgProviderInputTotal, beginV2LkgRequest, claimLkgRequestIdentity, currentLkgRequestIdentity, noteCapturedLkgRequest, noteLkgProviderResponse, measuredLkgPrefix, clearLkgMeasuredRequest, saveLkgSlotToDb, clearPersistedLkgSlotStrict, loadPersistedLkgSlot, drainStaleLkgSlots, resolveLkgModelKeys, createLkgEntryProjector, captureLkgSlot, validateAnthropicReasoningRuns, validateLkgSeam, replayLkg, coldStartRawServedIndex, coldStartUncapturedReplay, noteUncertifiedNormalLkg, hasProcessLocalLkgProof, lkgDirtyRevision, rememberLkgDirtyRevision, noteLkgRecoveryPrefix, readLkgRecoveryPrefix, noteLkgHealthyPrefix, lkgRecoveryReplayUnproven, lkgRecoveryEntryUnproven, beginLkgPass, visitMessageContentFields, contentSnapshotValue, messageContentFields, signatureForFields, exactReusablePrefix, incrementalLkgContentDigests, lkgSlotRejection, captureSlot, getInMemorySlot, getSlot, forgetInMemorySlot, dropSlot, noteEntry, getLkgSlotHeapStats, TOOL_SWEEP_SCOPED_MARKER, useScopedToolSweep, createPreAdoptionToolSweepResolver, copySessionStateForClone, queueMemoryMutation, getMaxMemoryMutationIdForProjects, GLOBAL_USER_PROFILE_PROJECT_PATH, getProjectState, bumpProjectUserProfileVersion, saveSourceContent, replaceSourceContent, getSourceContents, readCoordinateGeneration, rebaseSessionCoordinatesAsync, HiddenCompletionRefusal, getOpenCodeDbPath, compareOpenCodeMessagesByCanonicalOrder, prepareCompactionMarkerCandidates, removeMcOwnedCompactionMarkers, getCompartmentEvents, USER_MEMORY_CANDIDATE_TTL_MS, insertUserMemoryCandidates, getUserMemoryCandidates, deleteUserMemoryCandidates, pruneExpiredUserMemoryCandidates, insertUserMemory, getActiveUserMemories, updateUserMemoryContent, dismissUserMemory, DreamerProviderOutputFailureError, withDreamerModelCooldown, providerOutputFailureFromInvalidManifest, DREAMER_AGENT, DREAMER_RETROSPECTIVE_AGENT, DREAMER_PRIMER_INVESTIGATOR_AGENT, DREAMER_MEMORY_MAPPER_AGENT, DREAMER_CLASSIFIER_AGENT, DREAMER_DOCS_AGENT, DREAMER_REVIEWER_AGENT, HIDDEN_HISTORIAN_AGENT, HIDDEN_DREAMER_AGENT, HIDDEN_CURATE_AGENT, hiddenAgentFor, hiddenToolLoop, HIDDEN_RUN_DISPOSED_REASON, noteChildOfDisposedInstance, hiddenChildPermissions, registerHiddenChildAgents, hiddenToolCallRefusal, HiddenAgentStepLimit, HiddenChildHook, extractLatestAssistantText, hasLengthCappedOutput, parseProviderModel, modelBodyField, toModelEntry, isPromptTimeoutError, getPromptFailureDetail, raceWithSignal, promptSyncWithValidatedOutputRetry, normalizeSDKResponse, failedInvocationStatus, sumTokensFromChildMessages, recordChildInvocation, createPromptAsyncTransport, CTX_NOTE_LIGHT_DESCRIPTION, ACTIVE_TOOL_IDS, systemPromptFingerprint, createPromptSurfaceRuntime, createPromptSurfaceGuidanceEpochCache, MARKER_SUMMARY_TEXT, markerUpdateDefinitelyDidNotCut, applyDeferredCompactionMarker, teardownChildSession, runTokenLog, formatRunTokenLog, createChildSessionWithFence, buildMagicContextSection, getMuralIdentity, getMural, modelKeyAcceptsImages, resolveMuralWire, extractM0Block, formatDate, TEMPORAL_MARKER_REPLAY_PATTERN, collectTemporalCandidates, injectTemporalMarkers, clearInjectionCache, getVisibleMemoryIds, selectHiddenMessagesAtCompactionSeam, prepareCompartmentInjection, renderCompartmentInjection, MaterializeContentionError, mustMaterialize, trimMemoriesToBudgetV2, renderMemoryBlockV2, materializeM0, hydrateCachedM0Mural, resetPrefixTrimFallbackState, findHostCompactionWindow, capturePrefixTrimSourceOrder, prepareCachedM0M1Replay, hasCompleteCachedM0M1, injectM0M1, clampProducerAtomChars, producerInputTokenLimit, historianProducerReserve, producerPromptFailureReason, resolveHiddenCompletionExecutor, createV1HiddenCompletionExecutor, EMPTY_READ_REPLY, noteTouchedAt, renderGlance, renderNotesById, formatWriteReply, observeNoteNudgeServe, onNoteTrigger, peekNoteNudgeText, markNoteNudgeDelivered, clearNoteNudgeTriggerAndCooldown, omitIncompleteFileTokenTotals, describeBoundaryDiagnostics, RECOVERY_NO_HEAD_LIMIT, deriveProtectedTailTokenTarget, selectPerRunCap, resolveOpenCodeProtectedTailBoundary, resolveWrapupProtectedTailBoundary, getRawHistoryEligibility, hasRunnableCompartmentWindow, recordHighPressureNoEligibleHead, noteTransformPassForExactOrdinalReads, runCompartmentAgent, getActiveCompartmentRun, markActiveCompartmentRunPublished, registerActiveCompartmentRun, startCompartmentAgent, isRecompFailure2, isRecompSkip2, extractRecompReason2, setRecompStarting2, setRecompNote2, setRecompTerminal2, buildRecompDeps2, runManagedRecomp2 };
18799
+ export { historianRunConfig, dreamerRunConfig, pluginConfigReader, currentPluginConfigReader, withLiveDreamerOutputCap, COMPARTMENT_LEASE_RENEWAL_MS, acquireCompartmentLease, renewCompartmentLease, releaseCompartmentLeaseBestEffort, isCompartmentLeaseHeld, queueM0Mutation, getMaxM0MutationId, getCompartments, getLastCompartmentEndMessage, getLastCompartmentEndMessageId, getUncoveredCompartmentEndsThrough, providerResponseFailed, isSuccessfulProviderCompletion, rememberUnpublishedAutoSearchNoHint, getUnpublishedAutoSearchNoHint, forgetUnpublishedAutoSearchNoHint, registerAutoSearchWork, getOrCreateSessionMeta, updateSessionMeta, advanceToolReclaimWatermark, markSessionCleanupPending, retryPendingSessionCleanups, retryPendingRustSessionCleanupsForProject, clearSession, requestPendingMaterialization, pendingMaterializationOrigin, hasPendingMaterializationOrigin, clearPendingMaterialization, recordSystemPromptForRequest, recordHeldHeadForRequest, bindSystemPromptResponse, isHeldHeadForRequest, deferDeliveredSystemRefresh, retirePendingSystemPromptDelivery, lkgProviderInputTotal, beginV2LkgRequest, claimLkgRequestIdentity, currentLkgRequestIdentity, noteCapturedLkgRequest, noteLkgProviderResponse, measuredLkgPrefix, clearLkgMeasuredRequest, saveLkgSlotToDb, clearPersistedLkgSlotStrict, loadPersistedLkgSlot, drainStaleLkgSlots, resolveLkgModelKeys, createLkgEntryProjector, captureLkgSlot, validateAnthropicReasoningRuns, validateLkgSeam, replayLkg, coldStartRawServedIndex, coldStartUncapturedReplay, noteUncertifiedNormalLkg, hasProcessLocalLkgProof, lkgDirtyRevision, rememberLkgDirtyRevision, readPersistedLkgUntaggedInputIds, persistLkgUntaggedInputIds, noteLkgRecoveryPrefix, readLkgRecoveryPrefix, noteLkgHealthyPrefix, lkgRecoveryReplayUnproven, lkgRecoveryEntryUnproven, beginLkgPass, visitMessageContentFields, contentSnapshotValue, messageContentFields, signatureForFields, exactReusablePrefix, incrementalLkgContentDigests, lkgSlotRejection, captureSlot, getInMemorySlot, getSlot, forgetInMemorySlot, dropSlot, noteEntry, getLkgSlotHeapStats, TOOL_SWEEP_SCOPED_MARKER, useScopedToolSweep, createPreAdoptionToolSweepResolver, copySessionStateForClone, queueMemoryMutation, getMaxMemoryMutationIdForProjects, GLOBAL_USER_PROFILE_PROJECT_PATH, getProjectState, bumpProjectUserProfileVersion, saveSourceContent, replaceSourceContent, getSourceContents, readCoordinateGeneration, rebaseSessionCoordinatesAsync, HiddenCompletionRefusal, getOpenCodeDbPath, compareOpenCodeMessagesByCanonicalOrder, prepareCompactionMarkerCandidates, removeMcOwnedCompactionMarkers, getCompartmentEvents, USER_MEMORY_CANDIDATE_TTL_MS, insertUserMemoryCandidates, getUserMemoryCandidates, deleteUserMemoryCandidates, pruneExpiredUserMemoryCandidates, insertUserMemory, getActiveUserMemories, updateUserMemoryContent, dismissUserMemory, DreamerProviderOutputFailureError, withDreamerModelCooldown, providerOutputFailureFromInvalidManifest, DREAMER_AGENT, DREAMER_RETROSPECTIVE_AGENT, DREAMER_PRIMER_INVESTIGATOR_AGENT, DREAMER_MEMORY_MAPPER_AGENT, DREAMER_CLASSIFIER_AGENT, DREAMER_DOCS_AGENT, DREAMER_REVIEWER_AGENT, HIDDEN_HISTORIAN_AGENT, HIDDEN_DREAMER_AGENT, HIDDEN_CURATE_AGENT, hiddenAgentFor, hiddenToolLoop, HIDDEN_RUN_DISPOSED_REASON, noteChildOfDisposedInstance, hiddenChildPermissions, registerHiddenChildAgents, hiddenToolCallRefusal, HiddenAgentStepLimit, HiddenChildHook, extractLatestAssistantText, hasLengthCappedOutput, parseProviderModel, modelBodyField, toModelEntry, isPromptTimeoutError, getPromptFailureDetail, raceWithSignal, promptSyncWithValidatedOutputRetry, normalizeSDKResponse, failedInvocationStatus, sumTokensFromChildMessages, recordChildInvocation, createPromptAsyncTransport, CTX_NOTE_LIGHT_DESCRIPTION, ACTIVE_TOOL_IDS, systemPromptFingerprint, createPromptSurfaceRuntime, createPromptSurfaceGuidanceEpochCache, MARKER_SUMMARY_TEXT, markerUpdateDefinitelyDidNotCut, applyDeferredCompactionMarker, teardownChildSession, runTokenLog, formatRunTokenLog, createChildSessionWithFence, buildMagicContextSection, getMuralIdentity, getMural, modelKeyAcceptsImages, resolveMuralWire, extractM0Block, formatDate, TEMPORAL_MARKER_REPLAY_PATTERN, collectTemporalCandidates, injectTemporalMarkers, clearInjectionCache, getVisibleMemoryIds, selectHiddenMessagesAtCompactionSeam, prepareCompartmentInjection, renderCompartmentInjection, MaterializeContentionError, mustMaterialize, trimMemoriesToBudgetV2, renderMemoryBlockV2, materializeM0, hydrateCachedM0Mural, resetPrefixTrimFallbackState, findHostCompactionWindow, capturePrefixTrimSourceOrder, prepareCachedM0M1Replay, hasCompleteCachedM0M1, injectM0M1, clampProducerAtomChars, producerInputTokenLimit, historianProducerReserve, producerPromptFailureReason, resolveHiddenCompletionExecutor, createV1HiddenCompletionExecutor, EMPTY_READ_REPLY, noteTouchedAt, renderGlance, renderNotesById, formatWriteReply, observeNoteNudgeServe, onNoteTrigger, peekNoteNudgeText, markNoteNudgeDelivered, clearNoteNudgeTriggerAndCooldown, omitIncompleteFileTokenTotals, describeBoundaryDiagnostics, RECOVERY_NO_HEAD_LIMIT, deriveProtectedTailTokenTarget, selectPerRunCap, resolveOpenCodeProtectedTailBoundary, resolveWrapupProtectedTailBoundary, getRawHistoryEligibility, hasRunnableCompartmentWindow, recordHighPressureNoEligibleHead, noteTransformPassForExactOrdinalReads, runCompartmentAgent, getActiveCompartmentRun, markActiveCompartmentRunPublished, registerActiveCompartmentRun, startCompartmentAgent, isRecompFailure2, isRecompSkip2, extractRecompReason2, setRecompStarting2, setRecompNote2, setRecompTerminal2, buildRecompDeps2, runManagedRecomp2 };
@@ -3799,6 +3799,21 @@ var THINKING_BINDING_STRIP_ORDER_END_MARKER = "binding_mismatch_order:end";
3799
3799
  function thinkingBindingRecoveryFrozenId(messageId) {
3800
3800
  return `${THINKING_BINDING_RECOVERY_FROZEN_PREFIX}${messageId}`;
3801
3801
  }
3802
+ var COMPACTION_OFF_THINKING_FROZEN_PREFIX = "compaction_off_thinking:";
3803
+ function compactionOffThinkingFrozenId(messageId) {
3804
+ return `${COMPACTION_OFF_THINKING_FROZEN_PREFIX}${messageId}`;
3805
+ }
3806
+ function compactionOffFrozenThinkingIds(ledger) {
3807
+ const ids = new Set;
3808
+ for (const entry of ledger) {
3809
+ if (!entry.startsWith(COMPACTION_OFF_THINKING_FROZEN_PREFIX))
3810
+ continue;
3811
+ const id = entry.slice(COMPACTION_OFF_THINKING_FROZEN_PREFIX.length);
3812
+ if (id.length > 0)
3813
+ ids.add(id);
3814
+ }
3815
+ return ids;
3816
+ }
3802
3817
  function getThinkingBindingRecoveryTarget(db, sessionId) {
3803
3818
  const row = db.prepare("SELECT thinking_binding_recovery_target FROM session_meta WHERE session_id = ?").get(sessionId);
3804
3819
  const target = row?.thinking_binding_recovery_target;
@@ -7197,4 +7212,4 @@ function readRawSessionSeedTail2(sessionId, boundaryId, onQuery) {
7197
7212
  });
7198
7213
  }
7199
7214
 
7200
- export { detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, clearCachedM0, expandToolPart, markHostUnservedRow, retreatPastHostUnservedRows, snapTerminalCompartmentToServedRow, isHostRenderedSystemMessage, markCoveredInstructionRow, isCoveredInstructionRow, takeCoveredInstructionRows, cloneKeepingCoveredInstructionMarks, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, stripSystemInjection, isTextPart, isToolPartWithOutput, isFilePart, toolPartHasUserAnswer, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, TOOL_USE_DISABLED, needsBlockedRead, withBlockedReadInstruction, rememberV1HiddenRun, recordToolParameters, createDroppedInputGuard, assertExecutableToolInput, isEditTool, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, MAX_EXECUTE_THRESHOLD, escalationBands, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, readEpochFloorSnapshot, getProtectionWindowForSession, withReplayEnvelopeSnapshot, invalidateReplayEnvelopeSnapshot, isRustMarkerAdmissionFenced, setRustMarkerAdmissionFence, ReplayDocumentError, readReplayEnvelope, readReplayDocument, updateReplayDocument, writeReplayDocument, isEmergencyRecoveryArmed, isProviderOverflowReconfirmed, isProviderOverflowFailClosedProven, getEmergencyRecoveryArmedAt, describeProtectedTailDrainBudgetSkip, loadPersistedUsage, loadProtectedTailMeta, markProtectedTailPolicyV3Seeded, recordProtectedTailPublicationFloor, recordProtectedTailNoEligibleHead, resetProtectedTailNoEligibleHead, getWrapupInProgressState, isWrapupInProgress, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, getProtectedTailDrainBudgetSkip, reserveProtectedTailDrainTokens, clearEmergencyDrainLatch, recordHistorianDrainFailure, clearHistorianDrainFailure, rollbackProtectedTailDrainReservation, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, loadTransformPassStateSnapshot, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getDeferredClearedCompactionMarkerState, retireDeferredClearedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, getThinkingBindingRecoveryTarget, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, demoteTrailingBlankKeepDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, parseProcessedImageMarkers, serializeProcessedImageMarkers, getProcessedImageMarkers, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, setPendingCompactionMarkerState, replacePendingCompactionMarkerStateIf, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, logPiCompactionMarkerClear, setSessionWorkMetrics, getObservedEpochFloor, resolveEpochFloorForPass, getReasoningRemovalState, addRemovedReasoningIds, markDropLeavesReasoning, modelAcceptsEmptyContent, isAnthropicFamilyRoute, neutralizeDroppedReasoningPart, restoreNeutralizedReasoningPart, isNeutralizedReasoningPart, variantChangeBustsProviderCache, makeSentinel, makeWholeMessageSentinel, isSentinel, replaySentinelByMessageIds, isInActiveAnthropicTurn, activeAnthropicTurnStart, hasAnthropicReasoning, stripSystemInjectedMessages, stripDroppedPlaceholderMessages, replayClearedReasoning, replayStrippedInlineThinking, clearOldReasoning, stripClearedReasoning, stripInlineThinking, findReasoningBearingAssistantIds, findLatestAssistantReasoningMutationExemptMessage, snapshotTrailingBlankSourceDecisions, findTrailingBlankDecisionCandidates, applyFrozenTrailingBlankDecisions, stripReasoningFromAssistantIds, findMergedReasoningStripDecisions, stripReasoningFromMergedAssistants, getEmptyImageParts, stripProcessedImages, projectOpencodeReasoningBudgetCutoff, DEFAULT_KEEP_REASONING_TOKENS, resolveKeepReasoningTokens, 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 };
7215
+ export { detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, clearCachedM0, expandToolPart, markHostUnservedRow, retreatPastHostUnservedRows, snapTerminalCompartmentToServedRow, isHostRenderedSystemMessage, markCoveredInstructionRow, isCoveredInstructionRow, takeCoveredInstructionRows, cloneKeepingCoveredInstructionMarks, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, stripSystemInjection, isTextPart, isToolPartWithOutput, isFilePart, toolPartHasUserAnswer, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, TOOL_USE_DISABLED, needsBlockedRead, withBlockedReadInstruction, rememberV1HiddenRun, recordToolParameters, createDroppedInputGuard, assertExecutableToolInput, isEditTool, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, MAX_EXECUTE_THRESHOLD, escalationBands, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, readEpochFloorSnapshot, getProtectionWindowForSession, withReplayEnvelopeSnapshot, invalidateReplayEnvelopeSnapshot, isRustMarkerAdmissionFenced, setRustMarkerAdmissionFence, ReplayDocumentError, readReplayEnvelope, readReplayDocument, updateReplayDocument, writeReplayDocument, isEmergencyRecoveryArmed, isProviderOverflowReconfirmed, isProviderOverflowFailClosedProven, getEmergencyRecoveryArmedAt, describeProtectedTailDrainBudgetSkip, loadPersistedUsage, loadProtectedTailMeta, markProtectedTailPolicyV3Seeded, recordProtectedTailPublicationFloor, recordProtectedTailNoEligibleHead, resetProtectedTailNoEligibleHead, getWrapupInProgressState, isWrapupInProgress, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, getProtectedTailDrainBudgetSkip, reserveProtectedTailDrainTokens, clearEmergencyDrainLatch, recordHistorianDrainFailure, clearHistorianDrainFailure, rollbackProtectedTailDrainReservation, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, getPersistedTodoPermissionDenied, setPersistedTodoPermissionDenied, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, loadTransformPassStateSnapshot, recordOverflowDetected, recordDetectedContextLimit, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, getDeferredClearedCompactionMarkerState, retireDeferredClearedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, COMPACTION_OFF_THINKING_FROZEN_PREFIX, compactionOffThinkingFrozenId, compactionOffFrozenThinkingIds, getThinkingBindingRecoveryTarget, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getTrailingBlankDecisions, addTrailingBlankDecisions, demoteTrailingBlankKeepDecisions, getStaleReduceStrippedIds, addStaleReduceStrippedIds, getProcessedImageStrippedIds, parseProcessedImageMarkers, serializeProcessedImageMarkers, getProcessedImageMarkers, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, setPendingCompactionMarkerState, replacePendingCompactionMarkerStateIf, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, logPiCompactionMarkerClear, setSessionWorkMetrics, getObservedEpochFloor, resolveEpochFloorForPass, getReasoningRemovalState, addRemovedReasoningIds, markDropLeavesReasoning, modelAcceptsEmptyContent, isAnthropicFamilyRoute, neutralizeDroppedReasoningPart, restoreNeutralizedReasoningPart, isNeutralizedReasoningPart, variantChangeBustsProviderCache, makeSentinel, makeWholeMessageSentinel, isSentinel, replaySentinelByMessageIds, isInActiveAnthropicTurn, activeAnthropicTurnStart, hasAnthropicReasoning, stripSystemInjectedMessages, stripDroppedPlaceholderMessages, replayClearedReasoning, replayStrippedInlineThinking, clearOldReasoning, stripClearedReasoning, stripInlineThinking, findReasoningBearingAssistantIds, findLatestAssistantReasoningMutationExemptMessage, snapshotTrailingBlankSourceDecisions, findTrailingBlankDecisionCandidates, applyFrozenTrailingBlankDecisions, stripReasoningFromAssistantIds, findMergedReasoningStripDecisions, stripReasoningFromMergedAssistants, getEmptyImageParts, stripProcessedImages, projectOpencodeReasoningBudgetCutoff, DEFAULT_KEEP_REASONING_TOKENS, resolveKeepReasoningTokens, 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 };
@@ -50,7 +50,7 @@ import {
50
50
  hasPendingMigrations,
51
51
  getMainThreadMigrationBodyCount,
52
52
  runMigrations
53
- } from "./server-gpvay0xz.js";
53
+ } from "./server-xq7dfjke.js";
54
54
  import {
55
55
  ensureColumn,
56
56
  installV95PerfSchema,
@@ -1219,7 +1219,7 @@ function finishDatabaseOpen(db, dbPath, explicitDbPath, latestSupportedVersion)
1219
1219
  state.running = startMessageFtsRowidMapBackfill2(db, signal).then(async () => {
1220
1220
  if (signal.aborted || !readsOpenCodeStore)
1221
1221
  return;
1222
- const { readRawSessionMessagePage, readRawSessionMessages } = await importPluginModule(() => import("./read-session-chunk-zpgmxwte.js"));
1222
+ const { readRawSessionMessagePage, readRawSessionMessages } = await importPluginModule(() => import("./read-session-chunk-cwkxrmns.js"));
1223
1223
  const { startMessageTimeBackfill } = await importPluginModule(() => import("./message-time-backfill-04t0km1z.js"));
1224
1224
  if (signal.aborted)
1225
1225
  return;
@@ -61,13 +61,13 @@ import {
61
61
  sanitizeFtsQuery,
62
62
  searchMemoriesFTS,
63
63
  searchMemoriesFTSUnion
64
- } from "./server-my7k4eds.js";
64
+ } from "./server-hm38q7r0.js";
65
65
  import {
66
66
  cleanSearchText,
67
67
  keywordRelevance,
68
68
  matchedSearchSnippet,
69
69
  getIndexedMessageCorpusSize2
70
- } from "./server-2ehj0bw7.js";
70
+ } from "./server-2ar62dyx.js";
71
71
  import {
72
72
  MESSAGE_FTS_SESSION_FILTER_SQL,
73
73
  withMessageFtsSessionFilter
@@ -81,7 +81,7 @@ import {
81
81
  expandWorkspaceIdentitySetWithAliases,
82
82
  resolveStoredPathWorkspaceIdentity,
83
83
  sourceNameForMemory
84
- } from "./server-gpvay0xz.js";
84
+ } from "./server-xq7dfjke.js";
85
85
  import {
86
86
  isKnownAutocommit
87
87
  } from "./server-8ajstryz.js";
@@ -14,7 +14,7 @@ import {
14
14
  } from "./server-f2xf5gcb.js";
15
15
  import {
16
16
  managedAuthorityNoteRow
17
- } from "./server-gpvay0xz.js";
17
+ } from "./server-xq7dfjke.js";
18
18
  import {
19
19
  embedTextForProject2
20
20
  } from "./server-8by8qfec.js";
@@ -2764,8 +2764,7 @@ var MIGRATIONS = [
2764
2764
  up(db) {
2765
2765
  const memoriesPresent = tableExists4(db, "memories");
2766
2766
  const notesPresent = tableExists4(db, "notes");
2767
- const native = db;
2768
- const privilegeCheck = typeof native.function === "function" || typeof native.createFunction === "function" ? "mc_privileged_writer() = 0" : "COALESCE((SELECT enabled FROM context_privilege_state WHERE id = 1), 0) = 0";
2767
+ const privilegeCheck = authorityPrivilegeCheck();
2769
2768
  if (memoriesPresent) {
2770
2769
  db.exec(`
2771
2770
  DROP TRIGGER IF EXISTS memories_authority_guard_insert;
package/dist/v2/server.js CHANGED
@@ -7874,7 +7874,7 @@ var require_src2 = __commonJS(function(exports, module) {
7874
7874
  // package.json
7875
7875
  var package_default = {
7876
7876
  name: "@cortexkit/opencode-magic-context",
7877
- version: "0.49.18",
7877
+ version: "0.49.19",
7878
7878
  type: "module",
7879
7879
  description: "OpenCode plugin for Magic Context — cross-session memory and context management",
7880
7880
  main: "dist/index.js",
@@ -8195,7 +8195,7 @@ async function setup(context) {
8195
8195
  if (claimStorageBackupWarningCheck() && isMagicContextStorageOutsideEngram(storageDir)) {
8196
8196
  log2(`[magic-context] Magic Context storage is at ${storageDir}, outside the folder Engram backs up (~/.local/share/cortexkit/magic-context). It is not included in CortexKit backups.`);
8197
8197
  }
8198
- const { registerContext } = await import("./context-f2xh7ba4.js");
8198
+ const { registerContext } = await import("./context-y5yamxak.js");
8199
8199
  setHarness2("opencode2");
8200
8200
  bindStaleBuildNotice({}, import.meta.url, "opencode2");
8201
8201
  const duties = await registerContext(context);
@@ -19,7 +19,7 @@ import {
19
19
  registerActiveCompartmentRun,
20
20
  setRecompStarting2,
21
21
  setRecompTerminal2
22
- } from "./server-bfpda1tb.js";
22
+ } from "./server-6vdzn1td.js";
23
23
  import"./server-8by8qfec.js";
24
24
  import"./server-tgnbmwah.js";
25
25
  import"./server-6tmj0s7j.js";
@@ -30,7 +30,7 @@ import"./server-51779zs2.js";
30
30
  import"./server-xj136kt8.js";
31
31
  import"./server-1wy7b9de.js";
32
32
  import"./server-46neh5fa.js";
33
- import"./server-2ehj0bw7.js";
33
+ import"./server-2ar62dyx.js";
34
34
  import {
35
35
  getWrapupInProgressState,
36
36
  acquireWrapupInProgress,
@@ -39,9 +39,9 @@ import {
39
39
  getHistorianFailureState,
40
40
  clearEmergencyRecovery,
41
41
  prepareRawSessionOrdinals2
42
- } from "./server-xhab8jx8.js";
42
+ } from "./server-9hx7g5jp.js";
43
43
  import"./server-pwv4ezb0.js";
44
- import"./server-a2eqhkxr.js";
44
+ import"./server-bmymkx73.js";
45
45
  import"./server-1zx87sdm.js";
46
46
  import"./server-27gq4mfz.js";
47
47
  import"./server-271qxsf5.js";
@@ -49,10 +49,10 @@ import"./server-2ra6pwf3.js";
49
49
  import"./server-n1prf1g6.js";
50
50
  import"./server-g3qma5c0.js";
51
51
  import"./server-fr0wbhdn.js";
52
- import"./server-gpvay0xz.js";
52
+ import"./server-xq7dfjke.js";
53
53
  import"./server-rmygf5pn.js";
54
54
  import"./server-fb3zxn06.js";
55
- import"./server-my7k4eds.js";
55
+ import"./server-hm38q7r0.js";
56
56
  import {
57
57
  pushNotification2
58
58
  } from "./server-x8a7jmkh.js";