@cortexkit/opencode-magic-context 0.49.27 → 0.49.29

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 (115) hide show
  1. package/dist/auto-search-worker.js +3 -3
  2. package/dist/chunk-embedding-write-worker.js +1 -1
  3. package/dist/config/commit-retention-recovery.d.ts +9 -0
  4. package/dist/config/commit-retention-recovery.d.ts.map +1 -0
  5. package/dist/config/index.d.ts +2 -1
  6. package/dist/config/index.d.ts.map +1 -1
  7. package/dist/config/live-child-output-cap.d.ts.map +1 -1
  8. package/dist/config/live-run-config.d.ts.map +1 -1
  9. package/dist/config/project-security.d.ts +1 -0
  10. package/dist/config/project-security.d.ts.map +1 -1
  11. package/dist/{conflict-warning-hook-tgnw019g.js → conflict-warning-hook-xgskea1v.js} +3 -3
  12. package/dist/{context-t2k97d6v.js → context-836j3vte.js} +63 -27
  13. package/dist/{embedding-backfill-cwnyr4fj.js → embedding-backfill-mms9nb0h.js} +2 -2
  14. package/dist/features/magic-context/dreamer/evaluate-smart-notes.d.ts.map +1 -1
  15. package/dist/features/magic-context/dreamer/hidden-single-shot.d.ts.map +1 -1
  16. package/dist/features/magic-context/dreamer/map-memories.d.ts +2 -2
  17. package/dist/features/magic-context/dreamer/map-memories.d.ts.map +1 -1
  18. package/dist/features/magic-context/dreamer/task-executor.d.ts.map +1 -1
  19. package/dist/features/magic-context/dreamer/verify-diff.d.ts.map +1 -1
  20. package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
  21. package/dist/features/magic-context/git-commits/indexer.d.ts +2 -0
  22. package/dist/features/magic-context/git-commits/indexer.d.ts.map +1 -1
  23. package/dist/features/magic-context/project-embedding-registry.d.ts +3 -1
  24. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  25. package/dist/features/magic-context/smart-notes/compiler.d.ts.map +1 -1
  26. package/dist/features/magic-context/work-metrics.d.ts +5 -3
  27. package/dist/features/magic-context/work-metrics.d.ts.map +1 -1
  28. package/dist/hooks/magic-context/apply-operations.d.ts +2 -0
  29. package/dist/hooks/magic-context/apply-operations.d.ts.map +1 -1
  30. package/dist/hooks/magic-context/compartment-runner-types.d.ts +5 -1
  31. package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
  32. package/dist/hooks/magic-context/lkg-recovery-prefix.d.ts +3 -1
  33. package/dist/hooks/magic-context/lkg-recovery-prefix.d.ts.map +1 -1
  34. package/dist/hooks/magic-context/lkg-replay.d.ts.map +1 -1
  35. package/dist/hooks/magic-context/lkg-slot.d.ts +7 -0
  36. package/dist/hooks/magic-context/lkg-slot.d.ts.map +1 -1
  37. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  38. package/dist/hooks/magic-context/read-session-db.d.ts +3 -2
  39. package/dist/hooks/magic-context/read-session-db.d.ts.map +1 -1
  40. package/dist/hooks/magic-context/replay-committed-drops.d.ts.map +1 -1
  41. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  42. package/dist/{index-n8qmmd7f.js → index-093c4g1c.js} +3 -3
  43. package/dist/{index-89k1w6x2.js → index-a1h316s9.js} +2 -2
  44. package/dist/{index-fq2p158w.js → index-bps8vn9r.js} +13 -7
  45. package/dist/{index-tvzvjggy.js → index-gkee6p4g.js} +1 -1
  46. package/dist/{index-a2fz9hpa.js → index-gxkhzmjq.js} +4 -2
  47. package/dist/{index-4cpc59jv.js → index-h4s5jk7f.js} +1 -1
  48. package/dist/{index-t3rbb8wr.js → index-pe6b4bhs.js} +1 -1
  49. package/dist/{index-dcqk0y27.js → index-q9zvphbq.js} +104 -24
  50. package/dist/{index-7gbcg8xv.js → index-tx68g9nc.js} +1 -1
  51. package/dist/{index-4ypqzvhf.js → index-vnn5405n.js} +1 -1
  52. package/dist/{index-077ht5cq.js → index-waktfbjy.js} +1 -1
  53. package/dist/{index-qzbpbnqt.js → index-wpcdk76y.js} +343 -252
  54. package/dist/{index-dzfevacx.js → index-wvffze8y.js} +10 -6
  55. package/dist/{index-31y1mznz.js → index-wyt5m81v.js} +4 -4
  56. package/dist/{index-v0dhhxsq.js → index-y1qwzvxn.js} +5 -5
  57. package/dist/{index-yzjhx10y.js → index-zhgqgxtt.js} +5 -1
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +26 -30
  60. package/dist/{message-index-bounded-7ayzb2ah.js → message-index-bounded-7qsn4fd3.js} +3 -3
  61. package/dist/migration-worker.js +1 -1
  62. package/dist/plugin/dream-timer.d.ts.map +1 -1
  63. package/dist/plugin/embedding-bootstrap-helpers.d.ts +5 -1
  64. package/dist/plugin/embedding-bootstrap-helpers.d.ts.map +1 -1
  65. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  66. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  67. package/dist/{project-embedding-registry-94nncs5g.js → project-embedding-registry-cg281d9j.js} +1 -1
  68. package/dist/raw-ordinal-warmup-worker.js +2 -2
  69. package/dist/{read-session-chunk-jzb6w9w5.js → read-session-chunk-a5d0q3m0.js} +2 -2
  70. package/dist/{recomp-orchestrator-02sa2ngr.js → recomp-orchestrator-na34m4c5.js} +10 -10
  71. package/dist/{search-spq6nfyf.js → search-0cd6hx7a.js} +7 -7
  72. package/dist/{search-archive-q1vw7zg4.js → search-archive-66pm17gm.js} +3 -3
  73. package/dist/{send-session-notification-afzzqy5b.js → send-session-notification-vz86nt79.js} +2 -2
  74. package/dist/{transform-postprocess-phase-6menyyxc.js → transform-postprocess-phase-27we33af.js} +10 -10
  75. package/dist/v2/auto-search-worker.js +3 -3
  76. package/dist/v2/chunk-embedding-write-worker.js +1 -1
  77. package/dist/v2/{context-na0esngr.js → context-g4ptae4x.js} +215 -83
  78. package/dist/v2/{embedding-backfill-rh5dgsva.js → embedding-backfill-35k6czrr.js} +2 -2
  79. package/dist/v2/hidden-completion.d.ts.map +1 -1
  80. package/dist/v2/hooks/dream-timer.d.ts.map +1 -1
  81. package/dist/v2/hooks/store.d.ts.map +1 -1
  82. package/dist/v2/{message-index-bounded-n09b74vr.js → message-index-bounded-7363502m.js} +3 -3
  83. package/dist/v2/migration-worker.js +1 -1
  84. package/dist/v2/{project-embedding-registry-6pak822h.js → project-embedding-registry-p1p10ks7.js} +1 -1
  85. package/dist/v2/raw-ordinal-warmup-worker.js +2 -2
  86. package/dist/v2/{read-session-chunk-vpt69tw9.js → read-session-chunk-kkppfhft.js} +2 -2
  87. package/dist/v2/{recomp-orchestrator-txsmbnvw.js → recomp-orchestrator-f1df1gb8.js} +10 -10
  88. package/dist/v2/{search-dcy9b6gd.js → search-2v3xyzse.js} +7 -7
  89. package/dist/v2/{search-archive-t9bcz4ht.js → search-archive-v07jpw25.js} +3 -3
  90. package/dist/v2/{send-session-notification-vdsgnf4c.js → send-session-notification-x5nzy34v.js} +2 -2
  91. package/dist/v2/{server-e3hc93wk.js → server-77gznpmf.js} +1 -1
  92. package/dist/v2/{server-94wk1ey3.js → server-835q39kd.js} +45 -5
  93. package/dist/v2/{server-txbc3czn.js → server-976dxaxh.js} +10 -6
  94. package/dist/v2/{server-3vhxy2k5.js → server-a7x00tw8.js} +5 -5
  95. package/dist/v2/{server-z2n2xaeh.js → server-k9je35ev.js} +1 -1
  96. package/dist/v2/{server-xkvxss5g.js → server-mxzj3r0y.js} +5 -1
  97. package/dist/v2/{server-6avtp9jp.js → server-p0snacz3.js} +1 -1
  98. package/dist/v2/{server-z3mk9jdc.js → server-ph300d6m.js} +1 -1
  99. package/dist/v2/{server-jj9qye8y.js → server-q50ttc2g.js} +62 -21
  100. package/dist/v2/{server-6v3cdzsx.js → server-qc915kw2.js} +1 -1
  101. package/dist/v2/{server-zmcrvpm3.js → server-w79f8ejn.js} +2 -2
  102. package/dist/v2/{server-yqek3s4k.js → server-zh3esb0z.js} +4 -2
  103. package/dist/v2/server.js +3 -3
  104. package/dist/v2/{wrapup-orchestrator-gjkszser.js → wrapup-orchestrator-jq33fda8.js} +10 -10
  105. package/dist/{wrapup-orchestrator-n5h5sr1x.js → wrapup-orchestrator-f0xr7pft.js} +11 -11
  106. package/package.json +1 -1
  107. package/src/config/commit-retention-recovery.ts +34 -0
  108. package/src/config/index.ts +22 -2
  109. package/src/config/live-child-output-cap.test.ts +28 -0
  110. package/src/config/live-child-output-cap.ts +2 -0
  111. package/src/config/live-run-config.test.ts +44 -1
  112. package/src/config/live-run-config.ts +8 -1
  113. package/src/config/project-config-trust-boundary.test.ts +57 -0
  114. package/src/config/project-security.ts +6 -2
  115. package/src/shared/windows-hidden-spawns.test.ts +133 -23
@@ -98,7 +98,7 @@ import {
98
98
  getRawSessionTagKeysThrough2,
99
99
  getLegacyProtectedTailStartOrdinal2,
100
100
  readSessionChunk2
101
- } from "./index-yzjhx10y.js";
101
+ } from "./index-zhgqgxtt.js";
102
102
  import {
103
103
  getHarness2,
104
104
  harnessOwnsOpenCodeStore2
@@ -174,7 +174,7 @@ import {
174
174
  LATEST_SUPPORTED_VERSION,
175
175
  getPersistedSchemaVersion,
176
176
  openDatabase
177
- } from "./index-4cpc59jv.js";
177
+ } from "./index-h4s5jk7f.js";
178
178
  import {
179
179
  inRootAsyncContext2,
180
180
  Database2,
@@ -237,7 +237,7 @@ import {
237
237
  getProjectChunkEmbeddingModelId2,
238
238
  getProjectEmbeddingMaxInputTokens2,
239
239
  embedItemsForProject2
240
- } from "./index-a2fz9hpa.js";
240
+ } from "./index-gxkhzmjq.js";
241
241
  import {
242
242
  buildCanonicalChunkTextFromFts2,
243
243
  buildCompartmentSummaryFallbackText2,
@@ -254,7 +254,7 @@ import {
254
254
  toMessageIndexSource,
255
255
  clearIndexedMessagesInTransaction,
256
256
  indexSourcesAfterOrdinal
257
- } from "./index-7gbcg8xv.js";
257
+ } from "./index-tx68g9nc.js";
258
258
  import {
259
259
  stripWellFormedLeadingTagPrefix,
260
260
  stripTagPrefix,
@@ -272,7 +272,7 @@ import {
272
272
  openCodeDbExists,
273
273
  withReadOnlySessionDb,
274
274
  getMessageTimesFromOpenCodeDb
275
- } from "./index-v0dhhxsq.js";
275
+ } from "./index-y1qwzvxn.js";
276
276
  import {
277
277
  renderUserFacingFailure,
278
278
  userFacingFailureCode,
@@ -281,7 +281,7 @@ import {
281
281
  insertPrimerCandidates,
282
282
  promoteSessionFactsDurable,
283
283
  embedPromotedFacts
284
- } from "./index-t3rbb8wr.js";
284
+ } from "./index-pe6b4bhs.js";
285
285
  import {
286
286
  pushNotification2
287
287
  } from "./index-x8a7jmkh.js";
@@ -301,7 +301,7 @@ import {
301
301
  } from "./index-qgh1qwjj.js";
302
302
  import {
303
303
  sendStatusNotification2
304
- } from "./index-077ht5cq.js";
304
+ } from "./index-waktfbjy.js";
305
305
  import {
306
306
  isCompactionEnabled,
307
307
  migrateLegacyAgentEnabledInMemory
@@ -641,6 +641,30 @@ function claimConfigParseFailuresOnce(surface, failures) {
641
641
  });
642
642
  }
643
643
 
644
+ // src/config/commit-retention-recovery.ts
645
+ var pausedRetention = new WeakSet;
646
+ var RETENTION_FIELD = "memory.git_commit_indexing.max_commits";
647
+ function applyCommitRetentionRecovery(config, recoveredFieldPaths, warnings) {
648
+ if (!recoveredFieldPaths.some((path) => RETENTION_FIELD === path || RETENTION_FIELD.startsWith(`${path}.`)))
649
+ return;
650
+ pausedRetention.add(config.memory.git_commit_indexing);
651
+ const message = `${RETENTION_FIELD}: retention eviction is paused until the invalid value is fixed.`;
652
+ const index = warnings.findIndex((warning) => warning.includes(RETENTION_FIELD));
653
+ if (index >= 0)
654
+ warnings[index] = `${warnings[index]} ${message}`;
655
+ else
656
+ warnings.push(message);
657
+ }
658
+ function isCommitRetentionPaused(settings) {
659
+ return pausedRetention.has(settings);
660
+ }
661
+ function copyCommitRetentionRecovery(from, to) {
662
+ if (pausedRetention.has(from))
663
+ pausedRetention.add(to);
664
+ else
665
+ pausedRetention.delete(to);
666
+ }
667
+
644
668
  // src/config/deprecated-config.ts
645
669
  var MURAL_MODEL_DEPRECATION_WARNING = "mural.model is deprecated and ignored; compress-cues now uses the dreamer model for each harness, like every other dreamer task. To override it, set dreamer.opencode.tasks.compress-cues.model (or the pi/omp equivalent). This key no longer does anything; remove it.";
646
670
  var WINDOW_OVERLAY_PATH_DEPRECATION_WARNING = "models.window_overlay_path is deprecated and ignored; Fusiform no longer publishes window-overlay data, so this setting no longer changes model window geometry. Remove this key.";
@@ -2028,7 +2052,11 @@ function restoreTrustedValuesOverInvalidProjectValues(args) {
2028
2052
  if (!changed)
2029
2053
  break;
2030
2054
  }
2031
- return { warnings, restoredTopLevelKeys: [...restoredTopLevelKeys] };
2055
+ return {
2056
+ warnings,
2057
+ restoredTopLevelKeys: [...restoredTopLevelKeys],
2058
+ restoredFieldPaths: [...restored]
2059
+ };
2032
2060
  }
2033
2061
  var PROJECT_COMMAND_STRING_FIELDS = ["description", "agent", "model"];
2034
2062
  function wellFormedCommand(value) {
@@ -2804,7 +2832,7 @@ function warnProtectedTagsDeprecationOnce() {
2804
2832
  log2("[magic-context] protected_tags is deprecated and ignored; use protected_tokens instead.");
2805
2833
  }
2806
2834
  }
2807
- function parsePluginConfig(rawConfig, recoveredTopLevelKeys = []) {
2835
+ function parsePluginConfig(rawConfig, recoveredTopLevelKeys = [], recoveredFieldPaths = []) {
2808
2836
  const preMigrationWarnings = [];
2809
2837
  const configWithoutRemovedAgent = stripRemovedAgentConfig(rawConfig, preMigrationWarnings);
2810
2838
  if (Object.hasOwn(rawConfig, "clear_reasoning_age")) {
@@ -2886,11 +2914,13 @@ function parsePluginConfig(rawConfig, recoveredTopLevelKeys = []) {
2886
2914
  }
2887
2915
  if (prunedLeaves.length === issuePaths.length) {
2888
2916
  patched[key] = prunedBlock;
2917
+ recoveredFieldPaths.push(...prunedLeaves.map((leaf) => `${key}.${leaf}`));
2889
2918
  const reason = customMessagesByKey.get(key);
2890
2919
  warnings.push(`"${key}": invalid nested field(s) ${prunedLeaves.map((leaf) => `"${key}.${leaf}"`).join(", ")}, using defaults for those.${reason ? ` ${reason}` : ""}`);
2891
2920
  continue;
2892
2921
  }
2893
2922
  }
2923
+ recoveredFieldPaths.push(key);
2894
2924
  if (isAgentConfig) {
2895
2925
  delete patched[key];
2896
2926
  warnings.push(`"${key}": invalid agent configuration, ignoring. Check your magic-context.jsonc.`);
@@ -2917,6 +2947,7 @@ function parsePluginConfig(rawConfig, recoveredTopLevelKeys = []) {
2917
2947
  };
2918
2948
  }
2919
2949
  warnings.push("Config recovery failed, using all defaults.");
2950
+ recoveredFieldPaths.push("embedding", "memory", "subc", "shadow_embedding", "allow_home_project");
2920
2951
  return {
2921
2952
  ...defaults,
2922
2953
  disabled_hooks: disabledHooks,
@@ -3025,6 +3056,7 @@ function loadPluginConfigDetailed(directory, applyRuntimeGlobals = true) {
3025
3056
  let mergedRaw = trustedProfiledRaw;
3026
3057
  const trustedBaseConfig = parsePluginConfig(trustedProfiledRaw);
3027
3058
  let projectRestoredTopLevelKeys = [];
3059
+ let projectRestoredFieldPaths = [];
3028
3060
  if (projectLoaded) {
3029
3061
  mergedRaw = deepMergeRawConfig(mergedRaw, profileResolution.projectBase);
3030
3062
  for (const warning of dropInheritedEmbeddingKeyOnRedirect(projectRaw, mergedRaw, profileResolution.userBase)) {
@@ -3047,6 +3079,7 @@ function loadPluginConfigDetailed(directory, applyRuntimeGlobals = true) {
3047
3079
  allWarnings.push(`[project config] ${warning}`);
3048
3080
  }
3049
3081
  projectRestoredTopLevelKeys = restoredOverProject.restoredTopLevelKeys;
3082
+ projectRestoredFieldPaths = restoredOverProject.restoredFieldPaths;
3050
3083
  for (const warning of constrainProjectCommands({
3051
3084
  mergedRaw,
3052
3085
  trustedRaw: trustedProfiledRaw,
@@ -3057,8 +3090,10 @@ function loadPluginConfigDetailed(directory, applyRuntimeGlobals = true) {
3057
3090
  }
3058
3091
  }
3059
3092
  const recoveredTopLevelKeys = [];
3093
+ const recoveredFieldPaths = [];
3060
3094
  const cacheTtlConfigured = Object.hasOwn(mergedRaw, "cache_ttl");
3061
- const config = parsePluginConfig(mergedRaw, recoveredTopLevelKeys);
3095
+ const config = parsePluginConfig(mergedRaw, recoveredTopLevelKeys, recoveredFieldPaths);
3096
+ recoveredFieldPaths.push(...projectRestoredFieldPaths);
3062
3097
  for (const key of projectRestoredTopLevelKeys) {
3063
3098
  if (!recoveredTopLevelKeys.includes(key))
3064
3099
  recoveredTopLevelKeys.push(key);
@@ -3072,7 +3107,11 @@ function loadPluginConfigDetailed(directory, applyRuntimeGlobals = true) {
3072
3107
  if (applyRuntimeGlobals) {
3073
3108
  setOutputReserveConfig(config.output_reserve);
3074
3109
  }
3075
- const leafValidationWarnings = [...config.configWarnings ?? []];
3110
+ const recoveryWarnings = config.configWarnings ?? [];
3111
+ applyCommitRetentionRecovery(config, recoveredFieldPaths, recoveryWarnings);
3112
+ if (recoveryWarnings.length > 0)
3113
+ config.configWarnings = recoveryWarnings;
3114
+ const leafValidationWarnings = [...recoveryWarnings];
3076
3115
  if (config.configWarnings?.length) {
3077
3116
  allWarnings.push(...config.configWarnings.map((w) => {
3078
3117
  if (userLoaded && projectLoaded)
@@ -3124,6 +3163,7 @@ function loadPluginConfigDetailed(directory, applyRuntimeGlobals = true) {
3124
3163
  sources,
3125
3164
  substitutionFailures,
3126
3165
  recoveredTopLevelKeys,
3166
+ recoveredFieldPaths,
3127
3167
  configParseFailures,
3128
3168
  warningDetails,
3129
3169
  cacheTtlConfigured
@@ -3289,7 +3329,13 @@ function sampleLiveConfig(boot, fresh) {
3289
3329
  if (leaf !== undefined)
3290
3330
  target[leaf] = value;
3291
3331
  }
3292
- return result;
3332
+ const sampled = result;
3333
+ const freshCommitIndexing = fresh.memory?.git_commit_indexing;
3334
+ const sampledCommitIndexing = sampled.memory?.git_commit_indexing;
3335
+ if (freshCommitIndexing && sampledCommitIndexing) {
3336
+ copyCommitRetentionRecovery(freshCommitIndexing, sampledCommitIndexing);
3337
+ }
3338
+ return sampled;
3293
3339
  }
3294
3340
  function removeLeaf(root, parts) {
3295
3341
  const parents = parts.slice(0, -1);
@@ -3354,6 +3400,7 @@ function withLiveDreamerOutputCap(executor, boot, fresh) {
3354
3400
  }),
3355
3401
  attempt: (handle, request) => executor.attempt(handle, request),
3356
3402
  collect: (handle, limit) => executor.collect(handle, limit),
3403
+ collectPartial: (handle, limit) => executor.collectPartial?.(handle, limit) ?? executor.collect(handle, limit),
3357
3404
  close: (handle, settlement) => executor.close(handle, settlement)
3358
3405
  };
3359
3406
  }
@@ -7313,6 +7360,8 @@ function projectEntryWithDigests(messages, digests) {
7313
7360
  value: () => contentDigest,
7314
7361
  enumerable: false
7315
7362
  });
7363
+ if (isCoveredInstructionRow(message.info))
7364
+ markCoveredInstructionRow(projection);
7316
7365
  return projection;
7317
7366
  });
7318
7367
  }
@@ -7389,7 +7438,7 @@ function asEntryProjection(input) {
7389
7438
  }
7390
7439
  return projectLkgEntry(input);
7391
7440
  }
7392
- function outputMessageIsPostAnchor(message, inputIndexById, anchorIndex) {
7441
+ function outputMessageIsPostAnchor(message, inputIndexById, anchorIndex, systemIndices) {
7393
7442
  const id = messageId(message);
7394
7443
  if (id !== null) {
7395
7444
  const inputIndex = inputIndexById.get(id);
@@ -7408,6 +7457,10 @@ function outputMessageIsPostAnchor(message, inputIndexById, anchorIndex) {
7408
7457
  }
7409
7458
  if (isCoveredInstructionRow(message.info))
7410
7459
  return false;
7460
+ if (messageRole(message) === "system") {
7461
+ const index = systemIndices.get(message);
7462
+ return index === undefined ? null : index > anchorIndex;
7463
+ }
7411
7464
  if (!isSyntheticOutput(message))
7412
7465
  return null;
7413
7466
  const linked = ["sourceMessageId", "ownerMessageId", "anchorMessageId"].map((key) => recordValue(message.info, key)).find((value) => typeof value === "string");
@@ -7421,7 +7474,7 @@ function buildLkgPrefix(input, output, completeOutput = false) {
7421
7474
  const anchorIndex = completeOutput && projected.length > 0 ? projected.length - 1 : findLkgAnchor(projected);
7422
7475
  if (anchorIndex === null)
7423
7476
  return null;
7424
- const ids = projected.map((message) => message.id);
7477
+ const ids = projected.map((message, index) => lkgInputIdentity(message.id, message.role, index));
7425
7478
  if (ids.some((id) => id === null))
7426
7479
  return null;
7427
7480
  const validIds = ids;
@@ -7432,9 +7485,27 @@ function buildLkgPrefix(input, output, completeOutput = false) {
7432
7485
  if (inputContentDigests.some((digest) => digest === null))
7433
7486
  return null;
7434
7487
  const inputIndexById = new Map(validIds.map((id, index) => [id, index]));
7488
+ const systemIndices = new Map;
7489
+ if (!completeOutput) {
7490
+ const inputSystems = projected.flatMap((message, index) => message.id === null && message.role === "system" && !isCoveredInstructionRow(message) ? [{ message, index }] : []);
7491
+ const outputSystems = output.filter((message) => messageId(message) === null && messageRole(message) === "system");
7492
+ const restoredCount = outputSystems.length - inputSystems.length;
7493
+ if (restoredCount < 0 || outputSystems.slice(0, restoredCount).some((message) => !isCoveredInstructionRow(message.info)))
7494
+ return null;
7495
+ for (let index = 0;index < inputSystems.length; index += 1) {
7496
+ const source = inputSystems[index];
7497
+ const message = outputSystems[index + restoredCount];
7498
+ const digest = source.message.contentDigest?.();
7499
+ if (!digest || lkgContentDigest(message) !== digest)
7500
+ return null;
7501
+ if (isCoveredInstructionRow(message.info) && source.index > anchorIndex)
7502
+ return null;
7503
+ systemIndices.set(message, source.index);
7504
+ }
7505
+ }
7435
7506
  const prefix = [];
7436
7507
  for (const message of output) {
7437
- const postAnchor = completeOutput ? false : outputMessageIsPostAnchor(message, inputIndexById, anchorIndex);
7508
+ const postAnchor = completeOutput ? false : outputMessageIsPostAnchor(message, inputIndexById, anchorIndex, systemIndices);
7438
7509
  if (postAnchor === null)
7439
7510
  return null;
7440
7511
  if (!postAnchor)
@@ -7861,6 +7932,12 @@ function noteLkgRecoveryPrefix(args) {
7861
7932
  return true;
7862
7933
  }
7863
7934
  function readLkgRecoveryPrefix(sessionId, inputs, messages, db) {
7935
+ return readRecoveryIdentityPrefix(sessionId, inputs.map((input, index) => ({
7936
+ id: lkgInputIdentity(input.id, input.role, index),
7937
+ contentDigest: input.contentDigest
7938
+ })), messages, db);
7939
+ }
7940
+ function readRecoveryIdentityPrefix(sessionId, inputs, messages, db) {
7864
7941
  const state = sessions.get(sessionId);
7865
7942
  const slot = db && (!state || state.prefix || state.uncertifiedNormal) ? loadPersistedLkgSlot(db, sessionId, true) ?? getSlot(sessionId) : getSlot(sessionId);
7866
7943
  const prefix = state?.prefix;
@@ -7879,8 +7956,8 @@ function noteLkgHealthyPrefix(sessionId, inputs, messages, release) {
7879
7956
  fenceRevision: sessions.get(sessionId)?.fenceRevision,
7880
7957
  prefix: prefix && !release ? {
7881
7958
  ...prefix,
7882
- inputs: inputs.map((input) => ({
7883
- id: input.id ?? "",
7959
+ inputs: inputs.map((input, index) => ({
7960
+ id: lkgInputIdentity(input.id, input.role, index) ?? "",
7884
7961
  digest: input.contentDigest?.() ?? ""
7885
7962
  })),
7886
7963
  json: JSON.stringify(messages)
@@ -7899,10 +7976,16 @@ function lkgRecoveryEntryUnproven(sessionId, entry, messages) {
7899
7976
  id,
7900
7977
  contentDigest: () => digests[index] ?? null
7901
7978
  }));
7902
- return !!readLkgRecoveryPrefix(sessionId, inputs, messages).rebuildReason;
7979
+ return !!readRecoveryIdentityPrefix(sessionId, inputs, messages).rebuildReason;
7903
7980
  }
7904
7981
 
7905
7982
  // src/hooks/magic-context/lkg-slot.ts
7983
+ var POSITIONAL_SYSTEM_KEY = "\x00mc-system:";
7984
+ function lkgInputIdentity(id, role, index) {
7985
+ if (typeof id === "string" && id.length > 0)
7986
+ return id.startsWith(POSITIONAL_SYSTEM_KEY) ? null : id;
7987
+ return role === "system" ? `${POSITIONAL_SYSTEM_KEY}${index}` : null;
7988
+ }
7906
7989
  var LKG_SINGLE_SLOT_BYTES = 72 * 1024 * 1024;
7907
7990
  var LKG_TOTAL_BYTES = 160 * 1024 * 1024;
7908
7991
  var LKG_METADATA_BYTES = 256;
@@ -8401,11 +8484,8 @@ function noteEntry(sessionId, input) {
8401
8484
  const slot = getSlot(sessionId);
8402
8485
  if (!slot)
8403
8486
  return null;
8404
- const messages = input.some((message) => isCoveredInstructionRow(message.info)) ? input.filter((message) => !isCoveredInstructionRow(message.info)) : input;
8405
- const entryInputIds = messages.map((message) => {
8406
- const id = message.info?.id;
8407
- return typeof id === "string" ? id : "";
8408
- });
8487
+ const messages = input;
8488
+ const entryInputIds = messages.map((message, index) => lkgInputIdentity(message.info?.id, message.info?.role, index) ?? "");
8409
8489
  const anchorIndex = entryInputIds.indexOf(slot.lastInputMessageId);
8410
8490
  if (anchorIndex < 0)
8411
8491
  return null;
@@ -23262,4 +23342,4 @@ async function executeContextRecomp(deps, options = {}) {
23262
23342
  return (await executeContextRecompWithResult(deps, options)).message;
23263
23343
  }
23264
23344
 
23265
- export { denyTaskRoutingToCallerAgents, buildHiddenAgentRegistrations, buildZenReadAgentRegistrations, buildHiddenAgentConfig, getMagicContextBuiltinCommands, formatConfigParseStatusLine, claimConfigParseFailuresOnce, cortexKitUserConfigBasePath, cortexKitProjectConfigBasePath, resolveLegacyConfigSources, migrateMagicContextConfigLocations, getProtectedTokensTierOverrides, loadPluginConfigDetailed, historianRunConfig, dreamerRunConfig, pluginConfigReader, currentPluginConfigReader, withLiveDreamerOutputCap, createDreamerOutputCapSampler, advanceSessionActivity, observeSessionActivity, backfillSessionActivity, COMPARTMENT_AGENT_SYSTEM_PROMPT, HISTORIAN_EDITOR_SYSTEM_PROMPT, COMPARTMENT_STRUCTURAL_SYSTEM_PROMPT, clampProducerAtomChars, producerInputTokenLimit, historianProducerReserve, producerPromptFailureReason, DREAMER_AGENT, DREAMER_RETROSPECTIVE_AGENT, DREAMER_PRIMER_INVESTIGATOR_AGENT, DREAMER_MEMORY_MAPPER_AGENT, DREAMER_CLASSIFIER_AGENT, DREAMER_DOCS_AGENT, DREAMER_REVIEWER_AGENT, COMPARTMENT_LEASE_RENEWAL_MS, acquireCompartmentLease, renewCompartmentLease, releaseCompartmentLeaseBestEffort, isCompartmentLeaseHeld, queueM0Mutation, getMaxM0MutationId, getCompartments, getLastCompartmentEndMessage, getLastCompartmentEndMessageId, getUncoveredCompartmentEndsThrough, providerResponseFailed, isSuccessfulProviderCompletion, LkgRecoveryFenceError, lkgServedArrayDigest, hasCleanLkgRecoveryFence, dirtyLkgRecoveryRevision, ownsLkgDirtyFence, invalidateCleanLkgRecoveryFence, prepareLkgCaptureFence, certifyCommittedLkgCapture, markLkgRecoveryDirty, rememberUnpublishedAutoSearchNoHint, getUnpublishedAutoSearchNoHint, forgetUnpublishedAutoSearchNoHint, registerAutoSearchWork, cancelAutoSearchWork, gaDatabasePath, RAW_MESSAGE_TYPES, V2StoreReaderPool, V2StoreReader, 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, createDbLkgPersistence, resolveLkgModelKeys, createLkgEntryProjector, captureLkgSlot, validateAnthropicReasoningRuns, validateLkgSeam, replayLkg, coldStartRawServedIndex, coldStartUncapturedReplay, noteUncertifiedNormalLkg, hasProcessLocalLkgProof, lkgDirtyRevision, rememberLkgDirtyRevision, readPersistedLkgUntaggedInputIds, persistLkgUntaggedInputIds, noteLkgRecoveryPrefix, readLkgRecoveryPrefix, noteLkgHealthyPrefix, lkgRecoveryReplayUnproven, lkgRecoveryEntryUnproven, registerLkgPersistence, 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, createChildSessionWithFence, HiddenCompletionRefusal, DreamerProviderOutputFailureError, withDreamerModelCooldown, providerOutputFailureFromInvalidManifest, 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, ModelProducedNoOutputError, noteModelActivityMonitored, noteModelOutputReceived, isPromptTimeoutError, getPromptFailureDetail, raceWithSignal, promptSyncWithValidatedOutputRetry, normalizeSDKResponse, annotateSubagentInvocationError, failedInvocationStatus, sumTokensFromChildMessages, recordChildInvocation, recordPromptSessionError, createPromptAsyncTransport, CTX_NOTE_LIGHT_DESCRIPTION, ACTIVE_TOOL_IDS, systemPromptFingerprint, createPromptSurfaceRuntime, createPromptSurfaceGuidanceEpochCache, setKeepSubagents, teardownChildSession, getCompartmentEvents, runTokenLog, formatRunTokenLog, buildMagicContextSection, getMuralIdentity, getMural, modelKeyAcceptsImages, resolveMuralWire, USER_MEMORY_CANDIDATE_TTL_MS, insertUserMemoryCandidates, getUserMemoryCandidates, deleteUserMemoryCandidates, pruneExpiredUserMemoryCandidates, insertUserMemory, getActiveUserMemories, updateUserMemoryContent, dismissUserMemory, getOpenCodeDbPath, compareOpenCodeMessagesByCanonicalOrder, prepareCompactionMarkerCandidates, removeMcOwnedCompactionMarkers, MARKER_SUMMARY_TEXT, markerUpdateDefinitelyDidNotCut, applyDeferredCompactionMarker, removeCompactionMarkerForSession, checkCompactionMarkerConsistency, 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, resolveHiddenCompletionExecutor, createV1HiddenCompletionExecutor, readCoordinateGeneration, readCoordinateRebaseNotice, formatCoordinateRebaseNotice, rebaseSessionCoordinatesAsync, shouldWaitForNewHistorianHistory, EMPTY_READ_REPLY, noteTouchedAt, renderGlance, renderNotesById, formatWriteReply, observeNoteNudgeServe, onNoteTrigger, peekNoteNudgeText, markNoteNudgeDelivered, clearNoteNudgeTriggerAndCooldown, resetNoteNudgeCooldownOnly, clearNoteNudgeTriggerOnly, omitIncompleteFileTokenTotals, describeBoundaryDiagnostics, RECOVERY_NO_HEAD_LIMIT, deriveProtectedTailTokenTarget, selectPerRunCap, resolveOpenCodeProtectedTailBoundary, resolveWrapupProtectedTailBoundary, getRawHistoryEligibility, hasRunnableCompartmentWindow, recordHighPressureNoEligibleHead, noteTransformPassForExactOrdinalReads, runCompartmentAgent, snapRangeToCompartments, getActiveCompartmentRun, markActiveCompartmentRunPublished, registerActiveCompartmentRun, startCompartmentAgent, executeContextRecomp };
23345
+ export { denyTaskRoutingToCallerAgents, buildHiddenAgentRegistrations, buildZenReadAgentRegistrations, buildHiddenAgentConfig, getMagicContextBuiltinCommands, formatConfigParseStatusLine, claimConfigParseFailuresOnce, isCommitRetentionPaused, cortexKitUserConfigBasePath, cortexKitProjectConfigBasePath, resolveLegacyConfigSources, migrateMagicContextConfigLocations, getProtectedTokensTierOverrides, loadPluginConfigDetailed, historianRunConfig, dreamerRunConfig, pluginConfigReader, currentPluginConfigReader, withLiveDreamerOutputCap, createDreamerOutputCapSampler, advanceSessionActivity, observeSessionActivity, backfillSessionActivity, COMPARTMENT_AGENT_SYSTEM_PROMPT, HISTORIAN_EDITOR_SYSTEM_PROMPT, COMPARTMENT_STRUCTURAL_SYSTEM_PROMPT, clampProducerAtomChars, producerInputTokenLimit, historianProducerReserve, producerPromptFailureReason, DREAMER_AGENT, DREAMER_RETROSPECTIVE_AGENT, DREAMER_PRIMER_INVESTIGATOR_AGENT, DREAMER_MEMORY_MAPPER_AGENT, DREAMER_CLASSIFIER_AGENT, DREAMER_DOCS_AGENT, DREAMER_REVIEWER_AGENT, COMPARTMENT_LEASE_RENEWAL_MS, acquireCompartmentLease, renewCompartmentLease, releaseCompartmentLeaseBestEffort, isCompartmentLeaseHeld, queueM0Mutation, getMaxM0MutationId, getCompartments, getLastCompartmentEndMessage, getLastCompartmentEndMessageId, getUncoveredCompartmentEndsThrough, providerResponseFailed, isSuccessfulProviderCompletion, LkgRecoveryFenceError, lkgServedArrayDigest, hasCleanLkgRecoveryFence, dirtyLkgRecoveryRevision, ownsLkgDirtyFence, invalidateCleanLkgRecoveryFence, prepareLkgCaptureFence, certifyCommittedLkgCapture, markLkgRecoveryDirty, rememberUnpublishedAutoSearchNoHint, getUnpublishedAutoSearchNoHint, forgetUnpublishedAutoSearchNoHint, registerAutoSearchWork, cancelAutoSearchWork, gaDatabasePath, RAW_MESSAGE_TYPES, V2StoreReaderPool, V2StoreReader, 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, createDbLkgPersistence, resolveLkgModelKeys, createLkgEntryProjector, captureLkgSlot, validateAnthropicReasoningRuns, validateLkgSeam, replayLkg, coldStartRawServedIndex, coldStartUncapturedReplay, noteUncertifiedNormalLkg, hasProcessLocalLkgProof, lkgDirtyRevision, rememberLkgDirtyRevision, readPersistedLkgUntaggedInputIds, persistLkgUntaggedInputIds, noteLkgRecoveryPrefix, readLkgRecoveryPrefix, noteLkgHealthyPrefix, lkgRecoveryReplayUnproven, lkgRecoveryEntryUnproven, lkgInputIdentity, registerLkgPersistence, 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, createChildSessionWithFence, HiddenCompletionRefusal, DreamerProviderOutputFailureError, withDreamerModelCooldown, providerOutputFailureFromInvalidManifest, 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, ModelProducedNoOutputError, noteModelActivityMonitored, noteModelOutputReceived, isPromptTimeoutError, getPromptFailureDetail, raceWithSignal, promptSyncWithValidatedOutputRetry, normalizeSDKResponse, annotateSubagentInvocationError, failedInvocationStatus, emptyTokenTotals, sumTokensFromChildMessages, recordChildInvocation, recordPromptSessionError, createPromptAsyncTransport, CTX_NOTE_LIGHT_DESCRIPTION, ACTIVE_TOOL_IDS, systemPromptFingerprint, createPromptSurfaceRuntime, createPromptSurfaceGuidanceEpochCache, setKeepSubagents, teardownChildSession, getCompartmentEvents, runTokenLog, formatRunTokenLog, buildMagicContextSection, getMuralIdentity, getMural, modelKeyAcceptsImages, resolveMuralWire, USER_MEMORY_CANDIDATE_TTL_MS, insertUserMemoryCandidates, getUserMemoryCandidates, deleteUserMemoryCandidates, pruneExpiredUserMemoryCandidates, insertUserMemory, getActiveUserMemories, updateUserMemoryContent, dismissUserMemory, getOpenCodeDbPath, compareOpenCodeMessagesByCanonicalOrder, prepareCompactionMarkerCandidates, removeMcOwnedCompactionMarkers, MARKER_SUMMARY_TEXT, markerUpdateDefinitelyDidNotCut, applyDeferredCompactionMarker, removeCompactionMarkerForSession, checkCompactionMarkerConsistency, 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, resolveHiddenCompletionExecutor, createV1HiddenCompletionExecutor, readCoordinateGeneration, readCoordinateRebaseNotice, formatCoordinateRebaseNotice, rebaseSessionCoordinatesAsync, shouldWaitForNewHistorianHistory, EMPTY_READ_REPLY, noteTouchedAt, renderGlance, renderNotesById, formatWriteReply, observeNoteNudgeServe, onNoteTrigger, peekNoteNudgeText, markNoteNudgeDelivered, clearNoteNudgeTriggerAndCooldown, resetNoteNudgeCooldownOnly, clearNoteNudgeTriggerOnly, omitIncompleteFileTokenTotals, describeBoundaryDiagnostics, RECOVERY_NO_HEAD_LIMIT, deriveProtectedTailTokenTarget, selectPerRunCap, resolveOpenCodeProtectedTailBoundary, resolveWrapupProtectedTailBoundary, getRawHistoryEligibility, hasRunnableCompartmentWindow, recordHighPressureNoEligibleHead, noteTransformPassForExactOrdinalReads, runCompartmentAgent, snapRangeToCompartments, getActiveCompartmentRun, markActiveCompartmentRunPublished, registerActiveCompartmentRun, startCompartmentAgent, executeContextRecomp };
@@ -9,7 +9,7 @@ import {
9
9
  } from "./index-b88dwwrh.js";
10
10
  import {
11
11
  cleanUserText2
12
- } from "./index-yzjhx10y.js";
12
+ } from "./index-zhgqgxtt.js";
13
13
  import {
14
14
  recordMessageFtsRowid2,
15
15
  recordIndexedMessageTime2,
@@ -15,7 +15,7 @@ import {
15
15
  OpenAICompatibleEmbeddingProvider,
16
16
  getProjectEmbeddingSnapshot2,
17
17
  embedBatchForProject2
18
- } from "./index-a2fz9hpa.js";
18
+ } from "./index-gxkhzmjq.js";
19
19
  import {
20
20
  isEmbeddingHostBusy2
21
21
  } from "./index-qt1qqasc.js";
@@ -10,7 +10,7 @@ import {
10
10
  } from "./index-rrv26qjz.js";
11
11
  import {
12
12
  shouldHoldIgnoredNotification
13
- } from "./index-v0dhhxsq.js";
13
+ } from "./index-y1qwzvxn.js";
14
14
  import {
15
15
  getErrorMessage
16
16
  } from "./index-y8v6yerm.js";