@cortexkit/opencode-magic-context 0.49.31 → 0.49.33

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 (66) hide show
  1. package/dist/auto-search-worker.js +4 -4
  2. package/dist/chunk-embedding-write-worker.js +1 -1
  3. package/dist/{compartment-chunk-embedding-qgp0tbf7.js → compartment-chunk-embedding-5q5gj67r.js} +1 -1
  4. package/dist/{context-9a0f8mzh.js → context-jyzkstnr.js} +17 -10
  5. package/dist/{embedding-backfill-mms9nb0h.js → embedding-backfill-0jgtqxen.js} +3 -3
  6. package/dist/features/magic-context/chunk-scope-repair-revision.d.ts +4 -0
  7. package/dist/features/magic-context/chunk-scope-repair-revision.d.ts.map +1 -0
  8. package/dist/features/magic-context/compartment-chunk-embedding.d.ts.map +1 -1
  9. package/dist/features/magic-context/dreamer/task-gates.d.ts +2 -0
  10. package/dist/features/magic-context/dreamer/task-gates.d.ts.map +1 -1
  11. package/dist/features/magic-context/message-index-async.d.ts +3 -0
  12. package/dist/features/magic-context/message-index-async.d.ts.map +1 -1
  13. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  14. package/dist/features/magic-context/request-tool-definitions.d.ts +25 -0
  15. package/dist/features/magic-context/request-tool-definitions.d.ts.map +1 -0
  16. package/dist/features/magic-context/search.d.ts.map +1 -1
  17. package/dist/hooks/magic-context/apply-operations.d.ts +1 -1
  18. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  19. package/dist/hooks/magic-context/auto-search-branch-index.fixture.d.ts +2 -0
  20. package/dist/hooks/magic-context/auto-search-branch-index.fixture.d.ts.map +1 -0
  21. package/dist/hooks/magic-context/auto-search-worker-client.d.ts.map +1 -1
  22. package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
  23. package/dist/hooks/magic-context/compartment-render-epoch.d.ts +7 -0
  24. package/dist/hooks/magic-context/compartment-render-epoch.d.ts.map +1 -1
  25. package/dist/hooks/magic-context/inject-compartments.d.ts +7 -2
  26. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  27. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  28. package/dist/hooks/magic-context/transform.d.ts +1 -0
  29. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  30. package/dist/{index-gxkhzmjq.js → index-2743x98y.js} +65 -2
  31. package/dist/{index-kmayq4kq.js → index-2xh37qn5.js} +89 -11
  32. package/dist/{index-22e7khnr.js → index-3fkk2gwj.js} +57 -372
  33. package/dist/{index-0bjktrjt.js → index-43vqx0za.js} +2 -2
  34. package/dist/index-94ef0qe2.js +429 -0
  35. package/dist/{index-pe6b4bhs.js → index-as2amvn3.js} +1 -1
  36. package/dist/{index-qathsvz2.js → index-b7w46fp2.js} +16 -4
  37. package/dist/{index-y6ynjghv.js → index-dq5xzeb9.js} +2 -2
  38. package/dist/{index-vtz789ex.js → index-qr2mb02j.js} +16 -5
  39. package/dist/{index-vnn5405n.js → index-rfxzazzy.js} +1 -1
  40. package/dist/{index-mm93m7y6.js → index-v7287tzq.js} +47 -7
  41. package/dist/index.js +16 -14
  42. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  43. package/dist/{project-embedding-registry-cg281d9j.js → project-embedding-registry-6yex0r9f.js} +2 -2
  44. package/dist/{recomp-orchestrator-ynehxbya.js → recomp-orchestrator-skqzzvby.js} +6 -6
  45. package/dist/{search-fbaz1m8r.js → search-040pac3a.js} +6 -5
  46. package/dist/{transform-postprocess-phase-50h70ft8.js → transform-postprocess-phase-zx1peqma.js} +7 -6
  47. package/dist/v2/auto-search-worker.js +4 -4
  48. package/dist/v2/chunk-embedding-write-worker.js +1 -1
  49. package/dist/v2/{compartment-chunk-embedding-63dzs31c.js → compartment-chunk-embedding-rc31e6md.js} +1 -1
  50. package/dist/v2/{context-cdqw9jex.js → context-3c4z2wj5.js} +82 -264
  51. package/dist/v2/{embedding-backfill-35k6czrr.js → embedding-backfill-f43hd8y6.js} +3 -3
  52. package/dist/v2/hooks/context.d.ts +3 -3
  53. package/dist/v2/hooks/context.d.ts.map +1 -1
  54. package/dist/v2/{project-embedding-registry-p1p10ks7.js → project-embedding-registry-1x5qe2fy.js} +2 -2
  55. package/dist/v2/{recomp-orchestrator-kdxr4tx8.js → recomp-orchestrator-qfqdvbta.js} +5 -5
  56. package/dist/v2/{search-q3jjw6zp.js → search-q3wkpe8t.js} +5 -5
  57. package/dist/v2/{server-p0snacz3.js → server-2aasmpsp.js} +1 -1
  58. package/dist/v2/{server-zh3esb0z.js → server-ab8017gw.js} +65 -2
  59. package/dist/v2/{server-rdjgz95f.js → server-aqbm9c8d.js} +113 -35
  60. package/dist/v2/{server-4sn3at8p.js → server-h1byrhwx.js} +47 -7
  61. package/dist/v2/{server-42nebt63.js → server-n14edf07.js} +336 -25
  62. package/dist/v2/{server-ph300d6m.js → server-tkdabx8q.js} +1 -1
  63. package/dist/v2/server.js +2 -2
  64. package/dist/v2/{wrapup-orchestrator-prfvyqbb.js → wrapup-orchestrator-ga5vfmwr.js} +5 -5
  65. package/dist/{wrapup-orchestrator-4zhkcsz0.js → wrapup-orchestrator-dy8r3gp8.js} +7 -7
  66. package/package.json +1 -1
@@ -46,15 +46,13 @@ import {
46
46
  import {
47
47
  inRootAsyncContext2,
48
48
  Database2,
49
- getSqliteDatabasePath2,
50
49
  getSqliteMemoryStats2,
51
50
  withSqliteBackgroundWriter2,
52
51
  withSqliteTransformPass2,
53
52
  withoutSqliteTransformPass2,
54
53
  isTransientSqliteError2,
55
54
  SqliteAcquisitionBusyError2,
56
- withAsyncPrivilegedWriter2,
57
- indexCoordinationInput2
55
+ withAsyncPrivilegedWriter2
58
56
  } from "./index-gzy5w8ya.js";
59
57
  import {
60
58
  pruneMissingProjectIdentities,
@@ -266,7 +264,7 @@ import {
266
264
  snapRangeToCompartments,
267
265
  getActiveCompartmentRun,
268
266
  startCompartmentAgent
269
- } from "./index-kmayq4kq.js";
267
+ } from "./index-2xh37qn5.js";
270
268
  import {
271
269
  hasTrustedAbsoluteWall,
272
270
  applyProvenInputFloor,
@@ -352,8 +350,7 @@ import {
352
350
  isRawCompactionSummaryInfo2,
353
351
  extractInMemoryMessageViews2,
354
352
  buildInMemoryTailRawMessages2,
355
- RawOrdinalsNotReady2,
356
- runSessionWarmupWorker
353
+ RawOrdinalsNotReady2
357
354
  } from "./index-rverk2vz.js";
358
355
  import {
359
356
  openCodeDbExists,
@@ -556,7 +553,7 @@ import {
556
553
  embedSessionCompartmentChunks2,
557
554
  getEmbeddingCoverageStatus2,
558
555
  getAutoEmbeddingSessionCoverage2
559
- } from "./index-gxkhzmjq.js";
556
+ } from "./index-2743x98y.js";
560
557
  import {
561
558
  SubcClient,
562
559
  connectionFileExists,
@@ -566,14 +563,7 @@ import {
566
563
  SynapseEmbeddingProvider
567
564
  } from "./index-wfybj1dw.js";
568
565
  import {
569
- getMessageIndexSourceIdentity,
570
- isMessageIndexSourceCurrent,
571
- getLastIndexedOrdinal,
572
- getMessageIndexReconciliationStartOrdinal,
573
- isMessageIndexReconciledThrough,
574
- clearIndexedMessages,
575
- indexSingleMessage,
576
- indexMessagesAfterOrdinal
566
+ getLastIndexedOrdinal
577
567
  } from "./index-4s4zq97n.js";
578
568
  import {
579
569
  renderUserFacingFailure,
@@ -618,7 +608,7 @@ import {
618
608
  readGitFileChangeTimesSince,
619
609
  verificationFileExists,
620
610
  normalizeVerificationFiles
621
- } from "./index-pe6b4bhs.js";
611
+ } from "./index-as2amvn3.js";
622
612
  import {
623
613
  registerNotificationSink2,
624
614
  pushNotification2,
@@ -638,7 +628,7 @@ import {
638
628
  } from "./index-4dhv7mqz.js";
639
629
  import {
640
630
  cosineSimilarity
641
- } from "./index-vnn5405n.js";
631
+ } from "./index-rfxzazzy.js";
642
632
  import {
643
633
  computeCueContentHash,
644
634
  hasMuralCueColumns,
@@ -684,7 +674,13 @@ import {
684
674
  resolveMemoriesByIdsForSearch2,
685
675
  unifiedSearch2,
686
676
  formatSearchResults2
687
- } from "./index-vtz789ex.js";
677
+ } from "./index-qr2mb02j.js";
678
+ import {
679
+ scheduleReconciliation,
680
+ scheduleIncrementalIndex,
681
+ getMessageIndexQueueHeapStats,
682
+ clearSessionTracking
683
+ } from "./index-94ef0qe2.js";
688
684
  import {
689
685
  flushIgnoredMessages2,
690
686
  clearIgnoredMessages2,
@@ -694,7 +690,7 @@ import {
694
690
  import {
695
691
  setRecompStarting2,
696
692
  setRecompTerminal2
697
- } from "./index-y6ynjghv.js";
693
+ } from "./index-dq5xzeb9.js";
698
694
  import {
699
695
  makeToolCompositeKey,
700
696
  searchMessageHistoryOffThread,
@@ -757,7 +753,7 @@ import {
757
753
  abortSessionFailClosed2,
758
754
  evaluateEmergencyFailClosed2,
759
755
  runPostTransformPhase2
760
- } from "./index-qathsvz2.js";
756
+ } from "./index-b7w46fp2.js";
761
757
  import {
762
758
  ANNOUNCEMENT_VERSION2,
763
759
  ANNOUNCEMENT_FEATURES2,
@@ -8582,16 +8578,47 @@ function getDreamTaskBacklog(db, projectPath, task, options = {}) {
8582
8578
  }
8583
8579
  }
8584
8580
  var backlogCaches = new WeakMap;
8581
+ var displayBacklogCaches = new WeakMap;
8582
+ var DISPLAY_BACKLOG_MAX_AGE_MS = 60000;
8585
8583
  function getDreamTaskBacklogs(db, projectPath, tasks = CANONICAL_DREAM_TASKS, options = {}) {
8586
8584
  if (tasks.length === 0)
8587
8585
  return {};
8588
8586
  if (!isKnownAutocommit(db)) {
8589
8587
  backlogCaches.delete(db);
8588
+ displayBacklogCaches.delete(db);
8590
8589
  const result = {};
8591
8590
  for (const task of tasks)
8592
8591
  result[task] = getDreamTaskBacklog(db, projectPath, task, options);
8593
8592
  return result;
8594
8593
  }
8594
+ if (options.display) {
8595
+ let entries = displayBacklogCaches.get(db);
8596
+ if (!entries) {
8597
+ entries = new Map;
8598
+ displayBacklogCaches.set(db, entries);
8599
+ }
8600
+ const optionKey = (value) => value === undefined ? "omitted" : value === null ? "null" : `number:${value}`;
8601
+ const key = JSON.stringify([
8602
+ projectPath,
8603
+ tasks,
8604
+ optionKey(options.lastRunAt),
8605
+ optionKey(options.retrospectiveWatermarkMs)
8606
+ ]);
8607
+ const now = Date.now();
8608
+ const cached = entries.get(key);
8609
+ if (cached && now < cached.expiresAt && now >= cached.expiresAt - DISPLAY_BACKLOG_MAX_AGE_MS)
8610
+ return structuredClone(cached.value);
8611
+ const value = {};
8612
+ for (const task of tasks)
8613
+ value[task] = getDreamTaskBacklog(db, projectPath, task, options);
8614
+ if (entries.size >= 256)
8615
+ entries.delete(entries.keys().next().value);
8616
+ entries.set(key, {
8617
+ expiresAt: now + DISPLAY_BACKLOG_MAX_AGE_MS,
8618
+ value: structuredClone(value)
8619
+ });
8620
+ return value;
8621
+ }
8595
8622
  let cache = backlogCaches.get(db);
8596
8623
  if (!cache) {
8597
8624
  cache = {
@@ -12811,349 +12838,6 @@ function getActiveMemoryImportanceHistogram(db, projectPath) {
12811
12838
  };
12812
12839
  }
12813
12840
 
12814
- // src/features/magic-context/message-index-async.ts
12815
- var indexCancellations = new Map;
12816
- var sessionEpochs = new Map;
12817
- var workerMeasurements = new WeakMap;
12818
- function isDatabaseLockedError(error) {
12819
- if (!error || typeof error !== "object")
12820
- return false;
12821
- const e = error;
12822
- if (typeof e.code === "string") {
12823
- if (e.code === "SQLITE_BUSY" || e.code === "SQLITE_LOCKED")
12824
- return true;
12825
- }
12826
- if (typeof e.message === "string") {
12827
- if (/database is locked/i.test(e.message))
12828
- return true;
12829
- if (/sqlite_(busy|locked)/i.test(e.message))
12830
- return true;
12831
- }
12832
- return false;
12833
- }
12834
- var INCREMENTAL_DEBOUNCE_MS = 100;
12835
- var RECONCILIATION_BATCH_SIZE = 100;
12836
-
12837
- class MagicContextMessageIndexHeapHolder {
12838
- reconciledSessions = new Set;
12839
- reconciledSnapshots = new Map;
12840
- stalledSessions = new Set;
12841
- reconciliationScheduledSessions = new Set;
12842
- clearAndReindexScheduledSessions = new Map;
12843
- sessionLocks = new Map;
12844
- incrementalTimers = new Map;
12845
- pendingIncrementalKeys = new Set;
12846
- completedIncrementalKeys = new Set;
12847
- activeReconcilerBuffers = new Map;
12848
- }
12849
- var heapHolder = new MagicContextMessageIndexHeapHolder;
12850
- function clearCompletedIncrementalKeys(sessionId) {
12851
- const prefix = `${sessionId}\x00`;
12852
- for (const key of heapHolder.completedIncrementalKeys) {
12853
- if (key.startsWith(prefix))
12854
- heapHolder.completedIncrementalKeys.delete(key);
12855
- }
12856
- }
12857
- var PREPARE_RETRY_MS = 60000;
12858
- async function sourceReady(source, sessionId) {
12859
- const prepare = source?.prepare;
12860
- return typeof prepare === "function" ? prepare(sessionId) : true;
12861
- }
12862
- function defer(fn) {
12863
- const immediate = globalThis.setImmediate;
12864
- if (typeof immediate === "function") {
12865
- inRootAsyncContext2(() => immediate(fn));
12866
- return;
12867
- }
12868
- inRootAsyncContext2(() => setTimeout(fn, 0));
12869
- }
12870
- function yieldToEventLoop() {
12871
- return new Promise((resolve) => defer(resolve));
12872
- }
12873
- function runWithSessionLock(sessionId, operation) {
12874
- const previous = heapHolder.sessionLocks.get(sessionId) ?? Promise.resolve();
12875
- const run = previous.catch(() => {
12876
- return;
12877
- }).then(async () => {
12878
- await operation();
12879
- });
12880
- heapHolder.sessionLocks.set(sessionId, run);
12881
- run.finally(() => {
12882
- if (heapHolder.sessionLocks.get(sessionId) === run) {
12883
- heapHolder.sessionLocks.delete(sessionId);
12884
- }
12885
- }).catch(() => {
12886
- return;
12887
- });
12888
- return run;
12889
- }
12890
- function logIndexingError(sessionId, action, error) {
12891
- if (isDatabaseLockedError(error)) {
12892
- sessionLog2(sessionId, `message FTS async ${action} skipped (database busy; will retry on next reconciliation)`);
12893
- return;
12894
- }
12895
- sessionLog2(sessionId, `message FTS async ${action} failed: ${error instanceof Error ? error.message : String(error)}`);
12896
- log2(`[message-index-async] ${action} failed for ${sessionId}:`, error);
12897
- }
12898
- function serializedMessageBytes(messages) {
12899
- try {
12900
- return Buffer.byteLength(JSON.stringify(messages));
12901
- } catch {
12902
- return 0;
12903
- }
12904
- }
12905
- function logReconciliationStall(sessionId, reason) {
12906
- if (heapHolder.stalledSessions.has(sessionId))
12907
- return;
12908
- heapHolder.stalledSessions.add(sessionId);
12909
- sessionLog2(sessionId, `message FTS reconciliation stalled: ${reason}; will retry`);
12910
- }
12911
- async function reconcileSessionIndex(db, sessionId, readMessages) {
12912
- if (!await sourceReady(readMessages, sessionId)) {
12913
- logReconciliationStall(sessionId, "raw message reader is not ready");
12914
- return false;
12915
- }
12916
- await runWithSessionLock(sessionId, async () => {
12917
- if (!readMessages.getRevision && heapHolder.reconciledSessions.has(sessionId))
12918
- return;
12919
- let fallbackSnapshot = null;
12920
- try {
12921
- const fullReader = typeof readMessages === "function" ? readMessages : null;
12922
- const revision = readMessages.getRevision?.(sessionId);
12923
- const previous = heapHolder.reconciledSnapshots.get(sessionId);
12924
- const finalWatermark = previous && revision === previous.revision ? previous.count : revision !== undefined && readMessages.getCountAfterRevision ? previous && revision > previous.revision ? previous.count + readMessages.getCountAfterRevision(sessionId, previous.revision, revision) : readMessages.getCountAfterRevision(sessionId, -1, revision) : readMessages.getCount ? readMessages.getCount(sessionId) : (fallbackSnapshot = fullReader?.(sessionId) ?? []).length;
12925
- let cursor = getMessageIndexReconciliationStartOrdinal(db, sessionId);
12926
- let after = cursor === previous?.count ? previous.after : undefined;
12927
- while (cursor < finalWatermark) {
12928
- const pageEnd = Math.min(finalWatermark, cursor + RECONCILIATION_BATCH_SIZE);
12929
- const messages = readMessages.readPage ? readMessages.readPage(sessionId, cursor, RECONCILIATION_BATCH_SIZE, finalWatermark, after) : (fallbackSnapshot ?? []).filter((message) => message.ordinal > cursor && message.ordinal <= pageEnd);
12930
- const retainedMessages = fallbackSnapshot ?? messages;
12931
- heapHolder.activeReconcilerBuffers.set(sessionId, retainedMessages);
12932
- withSqliteBackgroundWriter2(() => indexMessagesAfterOrdinal(db, sessionId, messages, cursor, pageEnd));
12933
- const nextCursor = getMessageIndexReconciliationStartOrdinal(db, sessionId);
12934
- if (nextCursor <= cursor)
12935
- break;
12936
- cursor = nextCursor;
12937
- const last = messages.at(-1);
12938
- after = last?.ordinal === cursor && typeof last.createdAt === "number" ? { timeCreated: last.createdAt, id: last.id } : undefined;
12939
- if (cursor < finalWatermark) {
12940
- await yieldToEventLoop();
12941
- }
12942
- }
12943
- if (isMessageIndexReconciledThrough(db, sessionId, finalWatermark)) {
12944
- heapHolder.reconciledSessions.add(sessionId);
12945
- if (revision !== undefined) {
12946
- if (!after && finalWatermark > 0 && readMessages.readPage) {
12947
- const last = readMessages.readPage(sessionId, finalWatermark - 1, 1, finalWatermark).at(-1);
12948
- if (last?.ordinal === finalWatermark && typeof last.createdAt === "number")
12949
- after = { timeCreated: last.createdAt, id: last.id };
12950
- }
12951
- heapHolder.reconciledSnapshots.set(sessionId, {
12952
- revision,
12953
- count: finalWatermark,
12954
- after
12955
- });
12956
- }
12957
- } else {
12958
- logReconciliationStall(sessionId, `gap after ordinal ${cursor} (store count ${finalWatermark})`);
12959
- }
12960
- } finally {
12961
- heapHolder.activeReconcilerBuffers.delete(sessionId);
12962
- }
12963
- });
12964
- return true;
12965
- }
12966
- function scheduleReconciliation(db, sessionId, readMessages) {
12967
- if (!readMessages.getRevision && heapHolder.reconciledSessions.has(sessionId) || heapHolder.reconciliationScheduledSessions.has(sessionId)) {
12968
- return;
12969
- }
12970
- heapHolder.reconciliationScheduledSessions.add(sessionId);
12971
- scheduleAfterBootQuiet(() => {
12972
- defer(() => {
12973
- let appendedDuringReconciliation = false;
12974
- const previousSnapshot = heapHolder.reconciledSnapshots.get(sessionId);
12975
- reconcileSessionIndex(db, sessionId, readMessages).then((ran) => {
12976
- if (ran) {
12977
- const snapshot = heapHolder.reconciledSnapshots.get(sessionId);
12978
- appendedDuringReconciliation = snapshot !== undefined && snapshot !== previousSnapshot && readMessages.getRevision !== undefined && readMessages.getRevision(sessionId) !== snapshot.revision;
12979
- return;
12980
- }
12981
- inRootAsyncContext2(() => setTimeout(() => {
12982
- heapHolder.reconciliationScheduledSessions.delete(sessionId);
12983
- scheduleReconciliation(db, sessionId, readMessages);
12984
- }, PREPARE_RETRY_MS)).unref?.();
12985
- }).catch((error) => {
12986
- logReconciliationStall(sessionId, error instanceof Error ? error.message : String(error));
12987
- if (isDatabaseLockedError(error))
12988
- inRootAsyncContext2(() => setTimeout(() => scheduleReconciliation(db, sessionId, readMessages), 1000)).unref();
12989
- }).finally(() => {
12990
- heapHolder.reconciliationScheduledSessions.delete(sessionId);
12991
- if (appendedDuringReconciliation)
12992
- scheduleReconciliation(db, sessionId, readMessages);
12993
- });
12994
- });
12995
- });
12996
- }
12997
- function scheduleIncrementalIndex(db, sessionId, messageId, messageSource) {
12998
- const schedulingKey = `${sessionId}\x00${messageId}`;
12999
- const epoch = sessionEpochs.get(sessionId) ?? 0;
13000
- if (heapHolder.pendingIncrementalKeys.has(schedulingKey))
13001
- return;
13002
- const activeTimer = heapHolder.incrementalTimers.get(schedulingKey);
13003
- if (activeTimer)
13004
- clearTimeout(activeTimer);
13005
- const timer = inRootAsyncContext2(() => setTimeout(() => {
13006
- heapHolder.incrementalTimers.delete(schedulingKey);
13007
- heapHolder.pendingIncrementalKeys.add(schedulingKey);
13008
- const indexMessage = async () => {
13009
- if ((sessionEpochs.get(sessionId) ?? 0) !== epoch || !heapHolder.pendingIncrementalKeys.has(schedulingKey))
13010
- return;
13011
- const message = typeof messageSource === "function" ? messageSource(sessionId, messageId) : messageSource;
13012
- if (!message)
13013
- return;
13014
- const revisionKey = `${schedulingKey}\x00${getMessageIndexSourceIdentity(message)}`;
13015
- if (heapHolder.completedIncrementalKeys.has(revisionKey))
13016
- return;
13017
- const currentWatermark = getLastIndexedOrdinal(db, sessionId);
13018
- if (message.ordinal <= currentWatermark && isMessageIndexSourceCurrent(db, sessionId, message)) {
13019
- heapHolder.completedIncrementalKeys.add(revisionKey);
13020
- return;
13021
- }
13022
- const wasReconciled = heapHolder.reconciledSessions.delete(sessionId);
13023
- await indexSingleMessageOffThread(db, sessionId, message);
13024
- if ((sessionEpochs.get(sessionId) ?? 0) !== epoch || !heapHolder.pendingIncrementalKeys.has(schedulingKey))
13025
- return;
13026
- const finalWatermark = getLastIndexedOrdinal(db, sessionId);
13027
- if (wasReconciled && isMessageIndexReconciledThrough(db, sessionId, finalWatermark)) {
13028
- heapHolder.reconciledSessions.add(sessionId);
13029
- }
13030
- heapHolder.completedIncrementalKeys.add(revisionKey);
13031
- };
13032
- sourceReady(messageSource, sessionId).then((ready) => {
13033
- if ((sessionEpochs.get(sessionId) ?? 0) !== epoch)
13034
- return;
13035
- if (ready)
13036
- return runWithSessionLock(sessionId, indexMessage);
13037
- setTimeout(() => scheduleIncrementalIndex(db, sessionId, messageId, messageSource), PREPARE_RETRY_MS).unref?.();
13038
- }).catch((error) => {
13039
- if ((sessionEpochs.get(sessionId) ?? 0) !== epoch)
13040
- return;
13041
- heapHolder.reconciledSessions.delete(sessionId);
13042
- logIndexingError(sessionId, `incremental index for ${messageId}`, error);
13043
- if (isDatabaseLockedError(error))
13044
- setTimeout(() => scheduleIncrementalIndex(db, sessionId, messageId, messageSource), 1000).unref();
13045
- }).finally(() => {
13046
- if ((sessionEpochs.get(sessionId) ?? 0) === epoch)
13047
- heapHolder.pendingIncrementalKeys.delete(schedulingKey);
13048
- });
13049
- }, INCREMENTAL_DEBOUNCE_MS));
13050
- heapHolder.incrementalTimers.set(schedulingKey, timer);
13051
- }
13052
- async function indexSingleMessageOffThread(db, sessionId, message) {
13053
- const path = getSqliteDatabasePath2(db);
13054
- if (!path)
13055
- return withSqliteBackgroundWriter2(() => indexSingleMessage(db, sessionId, message));
13056
- const cancellation = new Int32Array(new SharedArrayBuffer(4));
13057
- const active = indexCancellations.get(sessionId) ?? new Set;
13058
- active.add(cancellation);
13059
- indexCancellations.set(sessionId, active);
13060
- const result = await runSessionWarmupWorker({
13061
- path,
13062
- sessionId,
13063
- indexMessage: message,
13064
- harness: getHarness2(),
13065
- indexCancellation: cancellation.buffer,
13066
- ...indexCoordinationInput2()
13067
- }, {}).finally(() => {
13068
- active.delete(cancellation);
13069
- if (active.size === 0)
13070
- indexCancellations.delete(sessionId);
13071
- });
13072
- if (!("inserted" in result))
13073
- throw new Error("failure" in result ? result.detail : "unexpected indexing worker reply");
13074
- if (result.measurements) {
13075
- const sessions = workerMeasurements.get(db) ?? new Map;
13076
- sessions.set(sessionId, result.measurements);
13077
- workerMeasurements.set(db, sessions);
13078
- if (result.measurements.skipped)
13079
- log2(`[magic-context] incremental FTS skipped oversized source ${message.id} (${result.measurements.sourceBytes} bytes); identity and progress persisted`);
13080
- }
13081
- return result.inserted;
13082
- }
13083
- function scheduleClearAndReindex(db, sessionId, readMessages) {
13084
- heapHolder.reconciledSessions.delete(sessionId);
13085
- heapHolder.reconciledSnapshots.delete(sessionId);
13086
- heapHolder.reconciliationScheduledSessions.delete(sessionId);
13087
- clearCompletedIncrementalKeys(sessionId);
13088
- const existing = heapHolder.clearAndReindexScheduledSessions.get(sessionId);
13089
- if (existing) {
13090
- existing.source = readMessages;
13091
- return;
13092
- }
13093
- const pending = { source: readMessages };
13094
- heapHolder.clearAndReindexScheduledSessions.set(sessionId, pending);
13095
- scheduleAfterBootQuiet(() => {
13096
- defer(() => {
13097
- let cleared = false;
13098
- runWithSessionLock(sessionId, () => {
13099
- if (heapHolder.clearAndReindexScheduledSessions.get(sessionId) !== pending)
13100
- return;
13101
- heapHolder.clearAndReindexScheduledSessions.delete(sessionId);
13102
- heapHolder.reconciledSessions.delete(sessionId);
13103
- heapHolder.reconciledSnapshots.delete(sessionId);
13104
- clearCompletedIncrementalKeys(sessionId);
13105
- clearIndexedMessages(db, sessionId);
13106
- cleared = true;
13107
- }).then(() => cleared ? reconcileSessionIndex(db, sessionId, pending.source) : undefined).catch((error) => {
13108
- heapHolder.reconciledSessions.delete(sessionId);
13109
- if (heapHolder.clearAndReindexScheduledSessions.get(sessionId) === pending)
13110
- heapHolder.clearAndReindexScheduledSessions.delete(sessionId);
13111
- logIndexingError(sessionId, "clear and reindex", error);
13112
- });
13113
- });
13114
- });
13115
- }
13116
- function getMessageIndexQueueHeapStats() {
13117
- return {
13118
- queueLength: heapHolder.reconciliationScheduledSessions.size + heapHolder.incrementalTimers.size + heapHolder.pendingIncrementalKeys.size,
13119
- reconciliationScheduled: heapHolder.reconciliationScheduledSessions.size,
13120
- incrementalTimers: heapHolder.incrementalTimers.size,
13121
- pendingIncremental: heapHolder.pendingIncrementalKeys.size,
13122
- activeSessionLocks: heapHolder.sessionLocks.size,
13123
- completedIncrementalKeys: heapHolder.completedIncrementalKeys.size,
13124
- activeBufferMessages: [...heapHolder.activeReconcilerBuffers.values()].reduce((sum, messages) => sum + messages.length, 0),
13125
- activeBufferBytes: [...heapHolder.activeReconcilerBuffers.values()].reduce((sum, messages) => sum + serializedMessageBytes(messages), 0)
13126
- };
13127
- }
13128
- function clearSessionTracking(sessionId) {
13129
- sessionEpochs.set(sessionId, (sessionEpochs.get(sessionId) ?? 0) + 1);
13130
- for (const cancellation of indexCancellations.get(sessionId) ?? [])
13131
- Atomics.store(cancellation, 0, 1);
13132
- heapHolder.clearAndReindexScheduledSessions.delete(sessionId);
13133
- heapHolder.reconciledSessions.delete(sessionId);
13134
- heapHolder.reconciledSnapshots.delete(sessionId);
13135
- heapHolder.stalledSessions.delete(sessionId);
13136
- heapHolder.reconciliationScheduledSessions.delete(sessionId);
13137
- heapHolder.sessionLocks.delete(sessionId);
13138
- heapHolder.activeReconcilerBuffers.delete(sessionId);
13139
- const prefix = `${sessionId}\x00`;
13140
- for (const [key, timer] of heapHolder.incrementalTimers) {
13141
- if (key.startsWith(prefix)) {
13142
- clearTimeout(timer);
13143
- heapHolder.incrementalTimers.delete(key);
13144
- }
13145
- }
13146
- for (const key of heapHolder.pendingIncrementalKeys) {
13147
- if (key.startsWith(prefix)) {
13148
- heapHolder.pendingIncrementalKeys.delete(key);
13149
- }
13150
- }
13151
- for (const key of heapHolder.completedIncrementalKeys) {
13152
- if (key.startsWith(prefix))
13153
- heapHolder.completedIncrementalKeys.delete(key);
13154
- }
13155
- }
13156
-
13157
12841
  // src/features/magic-context/session-cache-ttl.ts
13158
12842
  function readSessionCacheTtl(db, sessionId) {
13159
12843
  const saved = readReplayEnvelope(db, sessionId).cacheTtlPolicy;
@@ -14755,9 +14439,9 @@ Nothing to upgrade: this session has no legacy compartments.`;
14755
14439
  ].join(`
14756
14440
  `);
14757
14441
  }
14758
- function readDreamTaskBacklogsSafely(db, projectPath, tasks) {
14442
+ function readDreamTaskBacklogsSafely(db, projectPath, tasks, display = false) {
14759
14443
  try {
14760
- return getDreamTaskBacklogs(db, projectPath, tasks);
14444
+ return getDreamTaskBacklogs(db, projectPath, tasks, { display });
14761
14445
  } catch {
14762
14446
  return {};
14763
14447
  }
@@ -14965,7 +14649,7 @@ ${renderUserFacingFailure("status_unavailable")}`;
14965
14649
  const rustTailHygiene = rustStatus?.tail_hygiene;
14966
14650
  const tailHygiene = resolveTailHygieneStatus(deps.getTailHygiene?.(sessionId), rustTailHygiene && typeof rustTailHygiene === "object" ? rustTailHygiene : undefined);
14967
14651
  const statusOutput = executeStatus(deps.db, sessionId, deps.executeThresholdPercentage, liveModelKey, deps.historyBudgetPercentage, deps.sampleCommitClusterTrigger?.() ?? deps.commitClusterTrigger, deps.executeThresholdTokens, liveContextLimit, deps.dreamer ? {
14968
- backlog: readDreamTaskBacklogsSafely(deps.db, deps.dreamer.projectPath, CANONICAL_DREAM_TASKS.filter((task) => deps.smartNotesEnabled !== false || task !== "evaluate-smart-notes")),
14652
+ backlog: readDreamTaskBacklogsSafely(deps.db, deps.dreamer.projectPath, CANONICAL_DREAM_TASKS.filter((task) => deps.smartNotesEnabled !== false || task !== "evaluate-smart-notes"), true),
14969
14653
  progress: deps.getDreamerProgress?.() ?? null,
14970
14654
  skipped: readSkippedDreamTasksSafely(deps.db, deps.dreamer.projectPath).filter((task) => deps.smartNotesEnabled !== false || task !== "evaluate-smart-notes"),
14971
14655
  failures: readFailingDreamTasksSafely(deps.db, deps.dreamer.projectPath).filter((state) => deps.smartNotesEnabled !== false || state.task !== "evaluate-smart-notes")
@@ -15769,7 +15453,7 @@ function buildSidebarSnapshot(db, sessionId, directory, liveSessionState, inject
15769
15453
  const dreamerProgress = projectIdentity ? liveSessionState?.dreamerProgressByProject?.get(projectIdentity) ?? null : null;
15770
15454
  if (projectIdentity) {
15771
15455
  try {
15772
- dreamerBacklog = getDreamTaskBacklogs(db, projectIdentity, CANONICAL_DREAM_TASKS.filter((task) => smartNotesEnabled || task !== "evaluate-smart-notes"));
15456
+ dreamerBacklog = getDreamTaskBacklogs(db, projectIdentity, CANONICAL_DREAM_TASKS.filter((task) => smartNotesEnabled || task !== "evaluate-smart-notes"), { display: true });
15773
15457
  } catch {}
15774
15458
  }
15775
15459
  if (projectIdentity) {
@@ -16521,7 +16205,7 @@ function registerRpcHandlers(rpcServer, args) {
16521
16205
  const db = readDatabase();
16522
16206
  if (!db)
16523
16207
  return { ok: false, error: "db unavailable" };
16524
- const { runManagedRecomp } = await importPluginModule(() => import("./recomp-orchestrator-ynehxbya.js"));
16208
+ const { runManagedRecomp } = await importPluginModule(() => import("./recomp-orchestrator-skqzzvby.js"));
16525
16209
  const { sendIgnoredMessage } = await importPluginModule(() => import("./send-session-notification-vz86nt79.js"));
16526
16210
  log2(`[rpc] recomp requested for session ${sessionId}`);
16527
16211
  if (!args.client && !args.hiddenCompletionExecutor) {
@@ -16606,7 +16290,7 @@ function registerRpcHandlers(rpcServer, args) {
16606
16290
  const db = readDatabase();
16607
16291
  if (!db)
16608
16292
  return { ok: false, error: "db unavailable" };
16609
- const { runManagedWrapup } = await importPluginModule(() => import("./wrapup-orchestrator-4zhkcsz0.js"));
16293
+ const { runManagedWrapup } = await importPluginModule(() => import("./wrapup-orchestrator-dy8r3gp8.js"));
16610
16294
  const model = liveSessionState.liveModelBySession.get(sessionId);
16611
16295
  const contextLimit = model ? resolveContextLimit(model.providerID, model.modelID, { db, sessionID: sessionId }) : 128000;
16612
16296
  const ctx = {
@@ -18389,7 +18073,7 @@ var MODULE_PAGE_MAX_BYTES = SUBC_MAX_FRAME_BODY_BYTES - MODULE_PAGE_ENVELOPE_HEA
18389
18073
  var MODULE_ITEM_CONTINUATION_CHUNK_BYTES = 64 * 1024;
18390
18074
  var MODULE_ITEM_CONTINUATION_KEY = "__shadow_item_continuation";
18391
18075
  var MODULE_ORDINAL_PAGE_SIZE = 500;
18392
- function yieldToEventLoop2() {
18076
+ function yieldToEventLoop() {
18393
18077
  return new Promise((resolve) => setTimeout(resolve, 0));
18394
18078
  }
18395
18079
  function canonicalJson(value) {
@@ -18479,7 +18163,7 @@ async function resolveOrdinalsForModule(args) {
18479
18163
  pageEnds.push({ anchor: pageAnchor, entryCount: entries.length });
18480
18164
  if (page.length < MODULE_ORDINAL_PAGE_SIZE)
18481
18165
  break;
18482
- await yieldToEventLoop2();
18166
+ await yieldToEventLoop();
18483
18167
  }
18484
18168
  return { entries, end: pageAnchor, pageEnds };
18485
18169
  };
@@ -25320,6 +25004,7 @@ Historian previously failed ${historianFailureState.failureCount} time(s), so Ma
25320
25004
  const m0HardSignals = {
25321
25005
  systemHash: hardSystemHash,
25322
25006
  toolSetHash: hardToolSetHash,
25007
+ toolDefinitionsHash: deps.getToolDefinitionsHash?.(sessionId),
25323
25008
  modelKey: hardModelKey,
25324
25009
  cacheExpired: hardCacheExpired,
25325
25010
  lastResponseTime: sessionMeta.lastResponseTime,
@@ -29870,4 +29555,4 @@ function applyHiddenSubagentTemperature(input, output, log) {
29870
29555
  output.temperature = temperature;
29871
29556
  }
29872
29557
 
29873
- export { logConfigDependencyNotesOnce, openOpenCodeDb, DREAMER_SYSTEM_PROMPT, runSessionProjectBackfill, SMART_NOTE_COMPILER_SYSTEM_PROMPT, createLiveSessionState, RETROSPECTIVE_MAX_USER_MESSAGE_CHARS, RETROSPECTIVE_MESSAGE_TRUNCATION_MARKER, OpenCodeRetrospectiveRawProvider, createDreamTaskExecutor, runManualDream, runDueTasksForProject, startDreamScheduleTimer, createDreamTimerModuleClient, ensureProjectRegisteredFromOpenCodeDirectory, recordOpenCodeProvenInputFloor, resolveOpenCodeProvenInputFloor, resolveContextWindowGeometry, resolveContextLimit, resolveExecuteThresholdDetail, resolveModelKey, resolveSessionId, createScheduler, describeStorageUnavailability, scheduleClearAndReindex, resolveSessionCacheTtl, runEmbedHistoryDrain, pauseEmbedHistoryDrain, formatEmbedStatusText, getSessionProperties, getSessionCreatedInfo, getMessageUpdatedAssistantInfo, getMessageUpdatedInfo, getSessionErrorInfo, getMessageRemovedInfo, summarizeManualDream, createMagicContextCommandHandler, getLiveNotificationParams, createChatMessageHook, createEventHook, createCommandExecuteBeforeHook, createToolExecuteAfterHook, recordHiddenVariantWarning, buildStatusDetail, isDebugRpcEnabled, registerRpcHandlers, maybeAutoEmbedSessionBackfill, clearTransformDecisionSession, scheduleOpenCodeTransformDecisionWrite, stageOpenCodeV2TransformDecision, bindOpenCodeV2TransformDecision, maybeDeliverChannel2, armLatestThinkingRecovery, armBindingRecoverySafely, armLatestThinkingRecoveryFromError, createM0RenderOptions, lkgReplayLimit, measureLkgReplay, STORAGE_BUSY_MESSAGE, StorageBusyRefusalError, bindSystemDateRequestIdentity, bindSystemDateOutput, registerSystemDateRefresh, rustWrapupHistorianFields, UnmanagedOverWindowError, UnresolvedHistoryBoundaryError, clearMessageTokensCache, createTransform, createSubcModuleClient, createModuleToolBackends, createRustRefusalRecovery, createSystemPromptHashHandler, tryMessagesTransformLkgReplay, createMessagesTransformHandler, primaryOnlyToolIds, subagentToolRefusal, guardSubagentTools, hideSubagentTools, removePrimaryOnlyTools, storedSubagentMode, createCtxExpandTools, CTX_MEMORY_LIST_TOOL_NAME, CTX_MEMORY_ACTIONS, createCtxMemoryTools, createCtxMemoryListTools, CTX_NOTE_DESCRIPTION, withoutSmartNoteText, createCtxNoteTools, createCtxReduceTools, createCtxSearchTools, parameterDescriptionsFor, applyJsonSchemaParameterDescriptions, MagicContextRpcServer, subagentTemperature, applyHiddenSubagentTemperature };
29558
+ export { logConfigDependencyNotesOnce, openOpenCodeDb, DREAMER_SYSTEM_PROMPT, runSessionProjectBackfill, SMART_NOTE_COMPILER_SYSTEM_PROMPT, createLiveSessionState, RETROSPECTIVE_MAX_USER_MESSAGE_CHARS, RETROSPECTIVE_MESSAGE_TRUNCATION_MARKER, OpenCodeRetrospectiveRawProvider, createDreamTaskExecutor, runManualDream, runDueTasksForProject, startDreamScheduleTimer, createDreamTimerModuleClient, ensureProjectRegisteredFromOpenCodeDirectory, recordOpenCodeProvenInputFloor, resolveOpenCodeProvenInputFloor, resolveContextWindowGeometry, resolveContextLimit, resolveExecuteThresholdDetail, resolveModelKey, resolveSessionId, createScheduler, describeStorageUnavailability, resolveSessionCacheTtl, runEmbedHistoryDrain, pauseEmbedHistoryDrain, formatEmbedStatusText, getSessionProperties, getSessionCreatedInfo, getMessageUpdatedAssistantInfo, getMessageUpdatedInfo, getSessionErrorInfo, getMessageRemovedInfo, summarizeManualDream, createMagicContextCommandHandler, getLiveNotificationParams, createChatMessageHook, createEventHook, createCommandExecuteBeforeHook, createToolExecuteAfterHook, recordHiddenVariantWarning, buildStatusDetail, isDebugRpcEnabled, registerRpcHandlers, maybeAutoEmbedSessionBackfill, clearTransformDecisionSession, scheduleOpenCodeTransformDecisionWrite, stageOpenCodeV2TransformDecision, bindOpenCodeV2TransformDecision, maybeDeliverChannel2, armLatestThinkingRecovery, armBindingRecoverySafely, armLatestThinkingRecoveryFromError, createM0RenderOptions, lkgReplayLimit, measureLkgReplay, STORAGE_BUSY_MESSAGE, StorageBusyRefusalError, bindSystemDateRequestIdentity, bindSystemDateOutput, registerSystemDateRefresh, rustWrapupHistorianFields, UnmanagedOverWindowError, UnresolvedHistoryBoundaryError, clearMessageTokensCache, createTransform, createSubcModuleClient, createModuleToolBackends, createRustRefusalRecovery, createSystemPromptHashHandler, tryMessagesTransformLkgReplay, createMessagesTransformHandler, primaryOnlyToolIds, subagentToolRefusal, guardSubagentTools, hideSubagentTools, removePrimaryOnlyTools, storedSubagentMode, createCtxExpandTools, CTX_MEMORY_LIST_TOOL_NAME, CTX_MEMORY_ACTIONS, createCtxMemoryTools, createCtxMemoryListTools, CTX_NOTE_DESCRIPTION, withoutSmartNoteText, createCtxNoteTools, createCtxReduceTools, createCtxSearchTools, parameterDescriptionsFor, applyJsonSchemaParameterDescriptions, MagicContextRpcServer, subagentTemperature, applyHiddenSubagentTemperature };
@@ -15,7 +15,7 @@ import {
15
15
  getActiveCompartmentRun,
16
16
  markActiveCompartmentRunPublished,
17
17
  registerActiveCompartmentRun
18
- } from "./index-kmayq4kq.js";
18
+ } from "./index-2xh37qn5.js";
19
19
  import {
20
20
  inRootAsyncContext2
21
21
  } from "./index-gzy5w8ya.js";
@@ -37,7 +37,7 @@ import {
37
37
  import {
38
38
  setRecompStarting2,
39
39
  setRecompTerminal2
40
- } from "./index-y6ynjghv.js";
40
+ } from "./index-dq5xzeb9.js";
41
41
 
42
42
  // src/hooks/magic-context/wrapup-orchestrator.ts
43
43
  import * as crypto from "node:crypto";