@cortexkit/pi-magic-context 0.43.2 → 0.44.1

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.
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  getHarness,
3
+ harnessOwnsOpenCodeStore,
3
4
  log
4
- } from "./index-bfd52y8p.js";
5
+ } from "./index-59dmj4zs.js";
5
6
 
6
7
  // ../plugin/src/features/magic-context/reclaim-protection.ts
7
8
  var CTX_REDUCE_KEEP = 3;
@@ -1009,7 +1010,7 @@ function buildChannel2Reminder(undroppedTokens, reclaimableToolOutputs, hint) {
1009
1010
  const summary = formatReclaimableOutputSummary(reclaimableToolOutputs, undroppedTokens);
1010
1011
  const hintText = formatOldestReclaimableHint(hint);
1011
1012
  return `<system-reminder>
1012
- ` + `Routine housekeeping: ${summary} are reclaimable — make a ctx_reduce pass at a natural stopping point.${hintText}
1013
+ ` + `Your next step: call ctx_reduce on the outputs you've already used (${summary}). Then continue your task.${hintText}
1013
1014
  ` + `</system-reminder>`;
1014
1015
  }
1015
1016
  var CHANNEL1_STICKY_REAL_USER_TURN_GAP = 5;
@@ -1020,19 +1021,19 @@ function buildChannel1Reminder(level, undroppedTokens, reclaimableToolOutputs, h
1020
1021
  return `
1021
1022
 
1022
1023
  <system-reminder>
1023
- Reminder: ${summary} are still reclaimable — ctx_reduce them at a natural stopping point.${hintText}
1024
+ Still unstamped: ${summary}. Stamp the ones you've used with ctx_reduce now.${hintText}
1024
1025
  </system-reminder>`;
1025
1026
  }
1026
1027
  let body;
1027
1028
  switch (level) {
1028
1029
  case "gentle":
1029
- body = `Housekeeping: ${summary} are reclaimable — drop the ones you have already processed with ctx_reduce at a natural stopping point.`;
1030
+ body = `Housekeeping: ${summary} are reclaimable. Stamp each output with ctx_reduce as soon as you've taken what you need from it; don't wait for the task to finish.`;
1030
1031
  break;
1031
1032
  case "firm":
1032
- body = `Housekeeping: ${summary} are reclaimable — make a ctx_reduce pass at a natural stopping point.`;
1033
+ body = `${summary} are reclaimable. Make a ctx_reduce pass now over the outputs you've already used, then continue.`;
1033
1034
  break;
1034
1035
  case "urgent":
1035
- body = `Housekeeping backlog: ${summary} are reclaimable — a ctx_reduce pass is due.`;
1036
+ body = `${summary} are still unstamped. Call ctx_reduce now, before your next tool call, on every output you've already used.`;
1036
1037
  break;
1037
1038
  }
1038
1039
  return `
@@ -1490,7 +1491,7 @@ function toTagEntry(row) {
1490
1491
  messageId: row.message_id,
1491
1492
  type,
1492
1493
  status,
1493
- dropMode: row.drop_mode === "truncated" ? "truncated" : row.drop_mode === "edit_marker" ? "edit_marker" : "full",
1494
+ dropMode: row.drop_mode === "truncated" ? "truncated" : row.drop_mode === "skeleton_real" ? "skeleton_real" : row.drop_mode === "skeleton_stripped" ? "skeleton_stripped" : row.drop_mode === "edit_marker" ? "edit_marker" : row.drop_mode === "edit_marker_stripped" ? "edit_marker_stripped" : "full",
1494
1495
  toolName: row.tool_name ?? null,
1495
1496
  inputByteSize: row.input_byte_size ?? 0,
1496
1497
  byteSize: row.byte_size,
@@ -1641,8 +1642,22 @@ function getPiFallbackMessageFoldTagRowsByMessageId(db, sessionId, messageId) {
1641
1642
  AND type = 'message'
1642
1643
  ORDER BY tag_number ASC`).all(sessionId, messageId).filter(isPiFallbackFoldTagRow);
1643
1644
  }
1645
+ var foldStatements = new WeakMap;
1646
+ function foldStatement(db, sql) {
1647
+ let statements = foldStatements.get(db);
1648
+ if (!statements) {
1649
+ statements = new Map;
1650
+ foldStatements.set(db, statements);
1651
+ }
1652
+ let statement = statements.get(sql);
1653
+ if (!statement) {
1654
+ statement = db.prepare(sql);
1655
+ statements.set(sql, statement);
1656
+ }
1657
+ return statement;
1658
+ }
1644
1659
  function mergeSizeAndTokenColumnsIntoSurvivor(db, sessionId, survivor, duplicate) {
1645
- db.prepare(`UPDATE tags
1660
+ foldStatement(db, `UPDATE tags
1646
1661
  SET byte_size = ?,
1647
1662
  reasoning_byte_size = ?,
1648
1663
  input_byte_size = ?,
@@ -1662,36 +1677,38 @@ function applyDroppedStatusIfNeeded(db, sessionId, survivor, duplicate) {
1662
1677
  return;
1663
1678
  if (duplicate.status !== "dropped")
1664
1679
  return;
1665
- db.prepare("UPDATE tags SET status = 'dropped' WHERE session_id = ? AND tag_number = ?").run(sessionId, survivor.tagNumber);
1680
+ foldStatement(db, "UPDATE tags SET status = 'dropped' WHERE session_id = ? AND tag_number = ?").run(sessionId, survivor.tagNumber);
1666
1681
  survivor.status = "dropped";
1667
1682
  }
1668
1683
  function retargetPendingOps(db, sessionId, fromTagNumber, toTagNumber) {
1669
- const rows = db.prepare(`SELECT id, operation
1670
- FROM pending_ops
1671
- WHERE session_id = ? AND tag_id = ?
1672
- ORDER BY id ASC`).all(sessionId, fromTagNumber).filter(isPendingOpIdentityRow);
1684
+ const rows = foldStatement(db, `SELECT id, operation
1685
+ FROM pending_ops
1686
+ WHERE session_id = ? AND tag_id = ?
1687
+ ORDER BY id ASC`).all(sessionId, fromTagNumber).filter(isPendingOpIdentityRow);
1673
1688
  for (const row of rows) {
1674
- const existing = db.prepare(`SELECT 1
1675
- FROM pending_ops
1676
- WHERE session_id = ? AND tag_id = ? AND operation = ?
1677
- LIMIT 1`).get(sessionId, toTagNumber, row.operation);
1689
+ const existing = foldStatement(db, `SELECT 1
1690
+ FROM pending_ops
1691
+ WHERE session_id = ? AND tag_id = ? AND operation = ?
1692
+ LIMIT 1`).get(sessionId, toTagNumber, row.operation);
1678
1693
  if (existing) {
1679
- db.prepare("DELETE FROM pending_ops WHERE session_id = ? AND id = ?").run(sessionId, row.id);
1694
+ foldStatement(db, "DELETE FROM pending_ops WHERE session_id = ? AND id = ?").run(sessionId, row.id);
1680
1695
  } else {
1681
- db.prepare("UPDATE pending_ops SET tag_id = ? WHERE session_id = ? AND id = ?").run(toTagNumber, sessionId, row.id);
1696
+ foldStatement(db, "UPDATE pending_ops SET tag_id = ? WHERE session_id = ? AND id = ?").run(toTagNumber, sessionId, row.id);
1682
1697
  }
1683
1698
  }
1684
- db.prepare("DELETE FROM pending_ops WHERE session_id = ? AND tag_id = ?").run(sessionId, fromTagNumber);
1699
+ foldStatement(db, "DELETE FROM pending_ops WHERE session_id = ? AND tag_id = ?").run(sessionId, fromTagNumber);
1685
1700
  }
1686
1701
  function deleteFoldedDuplicateTag(db, sessionId, tagNumber) {
1687
- db.prepare("DELETE FROM source_contents WHERE session_id = ? AND tag_id = ?").run(sessionId, tagNumber);
1688
- db.prepare("DELETE FROM tags WHERE session_id = ? AND tag_number = ?").run(sessionId, tagNumber);
1689
- db.prepare("DELETE FROM pending_ops WHERE session_id = ? AND tag_id = ?").run(sessionId, tagNumber);
1702
+ foldStatement(db, "DELETE FROM source_contents WHERE session_id = ? AND tag_id = ?").run(sessionId, tagNumber);
1703
+ foldStatement(db, "DELETE FROM tags WHERE session_id = ? AND tag_number = ?").run(sessionId, tagNumber);
1704
+ foldStatement(db, "DELETE FROM pending_ops WHERE session_id = ? AND tag_id = ?").run(sessionId, tagNumber);
1690
1705
  }
1691
- function foldDuplicateIntoSurvivor(db, sessionId, survivor, duplicate) {
1706
+ function foldDuplicateIntoSurvivor(db, sessionId, survivor, duplicate, duplicateMayHaveQueuedOps = true) {
1692
1707
  mergeSizeAndTokenColumnsIntoSurvivor(db, sessionId, survivor, duplicate);
1693
1708
  applyDroppedStatusIfNeeded(db, sessionId, survivor, duplicate);
1694
- retargetPendingOps(db, sessionId, duplicate.tagNumber, survivor.tagNumber);
1709
+ if (duplicateMayHaveQueuedOps) {
1710
+ retargetPendingOps(db, sessionId, duplicate.tagNumber, survivor.tagNumber);
1711
+ }
1695
1712
  deleteFoldedDuplicateTag(db, sessionId, duplicate.tagNumber);
1696
1713
  }
1697
1714
  function hasPiFallbackToolOwnerTags(db, sessionId) {
@@ -2425,7 +2442,7 @@ function closeQuietly(db) {
2425
2442
 
2426
2443
  // ../plugin/src/hooks/magic-context/read-session-db.ts
2427
2444
  function openCodeDbExists() {
2428
- return openCodeDbPathExists(resolveOpenCodeDbPath());
2445
+ return harnessOwnsOpenCodeStore() && openCodeDbPathExists(resolveOpenCodeDbPath());
2429
2446
  }
2430
2447
  var cachedReadOnlyDb = null;
2431
2448
  function closeCachedReadOnlyDb() {
@@ -2441,6 +2458,9 @@ function closeCachedReadOnlyDb() {
2441
2458
  }
2442
2459
  }
2443
2460
  function getReadOnlySessionDb() {
2461
+ if (!harnessOwnsOpenCodeStore()) {
2462
+ throw new Error("OpenCode session database is not readable from a Pi-compatible process; its history lives in Pi sessions");
2463
+ }
2444
2464
  const resolution = resolveOpenCodeDbPath();
2445
2465
  const dbPath = resolution.path;
2446
2466
  if (!openCodeDbPathExists(resolution)) {
@@ -2483,7 +2503,7 @@ function logProbeFailureOnce(resolution, error) {
2483
2503
  }
2484
2504
  function getMessageTimesFromOpenCodeDb(sessionId, messageIds) {
2485
2505
  const result = new Map;
2486
- if (messageIds.length === 0)
2506
+ if (messageIds.length === 0 || !harnessOwnsOpenCodeStore())
2487
2507
  return result;
2488
2508
  try {
2489
2509
  withReadOnlySessionDb((db) => {
@@ -2590,11 +2610,23 @@ function readRawSessionMessagesFromDb(db, sessionId) {
2590
2610
  });
2591
2611
  }
2592
2612
  function readRawSessionMessagePageFromDb(db, sessionId, afterOrdinal, limit, finalWatermark = Number.MAX_SAFE_INTEGER) {
2613
+ const messageRows = readRawMessagePageRows(db, sessionId, afterOrdinal, limit, finalWatermark);
2614
+ if (messageRows.length === 0)
2615
+ return [];
2616
+ const placeholders = messageRows.map(() => "?").join(", ");
2617
+ const partRows = db.prepare(`SELECT message_id, data, time_updated
2618
+ FROM part
2619
+ WHERE +session_id = ?
2620
+ AND likelihood(message_id IN (${placeholders}), 0.000001)
2621
+ ORDER BY message_id ASC, time_created ASC, id ASC`).all(sessionId, ...messageRows.map((row) => row.id)).filter(isRawPartRow);
2622
+ return assembleRawMessagePage(messageRows, partRows);
2623
+ }
2624
+ function readRawMessagePageRows(db, sessionId, afterOrdinal, limit, finalWatermark) {
2593
2625
  const remaining = Math.max(0, Math.floor(finalWatermark) - Math.floor(afterOrdinal));
2594
2626
  const pageSize = Math.min(Math.max(1, Math.floor(limit)), remaining);
2595
2627
  if (pageSize === 0)
2596
2628
  return [];
2597
- const messageRows = db.prepare(`SELECT id, data, time_created, time_updated
2629
+ return db.prepare(`SELECT id, data, time_created, time_updated
2598
2630
  FROM message
2599
2631
  WHERE session_id = ?
2600
2632
  AND NOT (
@@ -2610,14 +2642,8 @@ function readRawSessionMessagePageFromDb(db, sessionId, afterOrdinal, limit, fin
2610
2642
  ...row,
2611
2643
  ordinal: Math.floor(afterOrdinal) + index + 1
2612
2644
  }));
2613
- if (messageRows.length === 0)
2614
- return [];
2615
- const placeholders = messageRows.map(() => "?").join(", ");
2616
- const partRows = db.prepare(`SELECT message_id, data, time_updated
2617
- FROM part
2618
- WHERE +session_id = ?
2619
- AND likelihood(message_id IN (${placeholders}), 0.000001)
2620
- ORDER BY message_id ASC, time_created ASC, id ASC`).all(sessionId, ...messageRows.map((row) => row.id)).filter(isRawPartRow);
2645
+ }
2646
+ function assembleRawMessagePage(messageRows, partRows) {
2621
2647
  const partsByMessageId = new Map;
2622
2648
  for (const part of partRows) {
2623
2649
  const list = partsByMessageId.get(part.message_id) ?? [];
@@ -2636,6 +2662,49 @@ function readRawSessionMessagePageFromDb(db, sessionId, afterOrdinal, limit, fin
2636
2662
  };
2637
2663
  });
2638
2664
  }
2665
+ var RAW_SUMMARY_TEXT_MAX_CHARS = 8192;
2666
+ var RAW_SUMMARY_ARG_MAX_CHARS = 512;
2667
+ var RAW_SUMMARY_TOOL_INPUT_KEYS = [
2668
+ "description",
2669
+ "filePath",
2670
+ "path",
2671
+ "pattern",
2672
+ "query",
2673
+ "symbol",
2674
+ "module",
2675
+ "action"
2676
+ ];
2677
+ function summaryStringField(jsonPath) {
2678
+ return `CASE WHEN json_type(data, '${jsonPath}') = 'text' THEN substr(json_extract(data, '${jsonPath}'), 1, ${RAW_SUMMARY_ARG_MAX_CHARS}) END`;
2679
+ }
2680
+ var RAW_SUMMARY_PART_DATA_SQL = `CASE
2681
+ WHEN json_extract(data, '$.type') = 'text'
2682
+ THEN json_set(data, '$.text', substr(json_extract(data, '$.text'), 1, ${RAW_SUMMARY_TEXT_MAX_CHARS}))
2683
+ ELSE json_object(
2684
+ 'type', 'tool',
2685
+ 'tool', ${summaryStringField("$.tool")},
2686
+ 'callID', ${summaryStringField("$.callID")},
2687
+ 'state', json_object(
2688
+ 'status', ${summaryStringField("$.state.status")},
2689
+ 'input', json_object(${RAW_SUMMARY_TOOL_INPUT_KEYS.map((key) => `'${key}', ${summaryStringField(`$.state.input.${key}`)}`).join(", ")}),
2690
+ 'metadata', json_object('description', ${summaryStringField("$.state.metadata.description")})
2691
+ )
2692
+ )
2693
+ END`;
2694
+ function readRawSessionMessageSummaryPageFromDb(db, sessionId, afterOrdinal, limit, finalWatermark = Number.MAX_SAFE_INTEGER) {
2695
+ const messageRows = readRawMessagePageRows(db, sessionId, afterOrdinal, limit, finalWatermark);
2696
+ if (messageRows.length === 0)
2697
+ return [];
2698
+ const placeholders = messageRows.map(() => "?").join(", ");
2699
+ const partRows = db.prepare(`SELECT message_id, ${RAW_SUMMARY_PART_DATA_SQL} AS data, time_updated
2700
+ FROM part
2701
+ WHERE +session_id = ?
2702
+ AND likelihood(message_id IN (${placeholders}), 0.000001)
2703
+ AND json_valid(data) = 1
2704
+ AND json_extract(data, '$.type') IN ('text', 'tool')
2705
+ ORDER BY message_id ASC, time_created ASC, id ASC`).all(sessionId, ...messageRows.map((row) => row.id)).filter(isRawPartRow);
2706
+ return assembleRawMessagePage(messageRows, partRows);
2707
+ }
2639
2708
  function countRawSessionMessageOrdinalsFromDb(db, sessionId) {
2640
2709
  const row = db.prepare(`SELECT COUNT(*) AS count
2641
2710
  FROM message
@@ -4030,6 +4099,28 @@ function historyLocalBudget(providerTokens, modelKey) {
4030
4099
  return ratio === 1 ? providerTokens : localBudget(providerTokens, ratio);
4031
4100
  }
4032
4101
 
4102
+ // ../plugin/src/hooks/magic-context/tool-input-size.ts
4103
+ var SKELETON_REAL_INPUT_MAX_BYTES = 1024;
4104
+ var encoder2 = new TextEncoder;
4105
+ function toolInputStringBytes(value) {
4106
+ const seen = new WeakSet;
4107
+ const visit = (candidate) => {
4108
+ if (typeof candidate === "string")
4109
+ return encoder2.encode(candidate).length;
4110
+ if (candidate === null || typeof candidate !== "object")
4111
+ return 0;
4112
+ if (seen.has(candidate))
4113
+ return 0;
4114
+ seen.add(candidate);
4115
+ let total = 0;
4116
+ const values = Array.isArray(candidate) ? candidate : Object.values(candidate);
4117
+ for (const item of values)
4118
+ total += visit(item);
4119
+ return total;
4120
+ };
4121
+ return visit(value);
4122
+ }
4123
+
4033
4124
  // ../plugin/src/hooks/magic-context/tool-drop-target.ts
4034
4125
  var IGNORE_PART_TYPES = new Set([
4035
4126
  "thinking",
@@ -4201,6 +4292,45 @@ function readRawSessionMessageRangeFromSource(sessionId, fromOrdinal, toOrdinal)
4201
4292
  }
4202
4293
  return messages;
4203
4294
  }
4295
+ var RAW_MESSAGE_VISIT_PAGE_SIZE = 50;
4296
+ function visitRawSessionMessages2(sessionId, fromOrdinal, toOrdinal, visit, options = {}) {
4297
+ const from = Math.max(1, Math.floor(fromOrdinal));
4298
+ const to = Math.floor(toOrdinal);
4299
+ if (to < from)
4300
+ return;
4301
+ const provider = sessionProviders.get(sessionId);
4302
+ if (provider && !provider.readMessagePage) {
4303
+ for (const message of provider.readMessages()) {
4304
+ if (message.ordinal < from || message.ordinal > to)
4305
+ continue;
4306
+ if (!visit(message))
4307
+ return;
4308
+ }
4309
+ return;
4310
+ }
4311
+ if (!provider && !openCodeDbExists())
4312
+ return;
4313
+ const pageSize = Math.max(1, Math.floor(options.pageSize ?? RAW_MESSAGE_VISIT_PAGE_SIZE));
4314
+ let afterOrdinal = from - 1;
4315
+ while (afterOrdinal < to) {
4316
+ const limit = Math.min(pageSize, to - afterOrdinal);
4317
+ const cursor = afterOrdinal;
4318
+ const page = provider?.readMessagePage ? provider.readMessagePage(cursor, limit, to) : withReadOnlySessionDb((db) => options.summary ? readRawSessionMessageSummaryPageFromDb(db, sessionId, cursor, limit, to) : readRawSessionMessagePageFromDb(db, sessionId, cursor, limit, to));
4319
+ if (page.length === 0)
4320
+ return;
4321
+ let nextOrdinal = afterOrdinal;
4322
+ for (const message of page) {
4323
+ if (message.ordinal < from || message.ordinal > to)
4324
+ continue;
4325
+ if (!visit(message))
4326
+ return;
4327
+ nextOrdinal = Math.max(nextOrdinal, message.ordinal);
4328
+ }
4329
+ if (nextOrdinal <= afterOrdinal)
4330
+ return;
4331
+ afterOrdinal = nextOrdinal;
4332
+ }
4333
+ }
4204
4334
  function readRawSessionMessageRange2(sessionId, fromOrdinal, toOrdinal) {
4205
4335
  const from = Math.max(1, Math.floor(fromOrdinal));
4206
4336
  const to = Math.floor(toOrdinal);
@@ -4337,6 +4467,30 @@ function readRawSessionMessageOrdinalById2(sessionId, messageId) {
4337
4467
  return null;
4338
4468
  return withReadOnlySessionDb((db) => readRawSessionMessageOrdinalByIdFromDb(db, sessionId, messageId));
4339
4469
  }
4470
+ function compareRawSessionMessageOrder2(sessionId, leftId, rightId) {
4471
+ const provider = sessionProviders.get(sessionId);
4472
+ if (provider) {
4473
+ if (!provider.readMessageOrdinalById)
4474
+ return null;
4475
+ const left = provider.readMessageOrdinalById(leftId);
4476
+ const right = provider.readMessageOrdinalById(rightId);
4477
+ return left === null || right === null ? null : left - right;
4478
+ }
4479
+ if (!openCodeDbExists())
4480
+ return null;
4481
+ return withReadOnlySessionDb((db) => {
4482
+ const lookup = db.prepare("SELECT time_created, id FROM message WHERE session_id = ? AND id = ? LIMIT 1");
4483
+ const left = lookup.get(sessionId, leftId);
4484
+ const right = lookup.get(sessionId, rightId);
4485
+ if (typeof left?.time_created !== "number" || typeof right?.time_created !== "number" || typeof left.id !== "string" || typeof right.id !== "string") {
4486
+ return null;
4487
+ }
4488
+ if (left.time_created !== right.time_created) {
4489
+ return left.time_created - right.time_created;
4490
+ }
4491
+ return left.id < right.id ? -1 : left.id > right.id ? 1 : 0;
4492
+ });
4493
+ }
4340
4494
  function readRawSessionMessageById(sessionId, messageId) {
4341
4495
  const provider = sessionProviders.get(sessionId);
4342
4496
  if (provider?.readMessageById) {
@@ -4715,4 +4869,4 @@ function readSessionChunk2(sessionId, tokenBudget, offset = 1, eligibleEndOrdina
4715
4869
  toolResultBoundaries
4716
4870
  };
4717
4871
  }
4718
- export { CTX_REDUCE_KEEP, newestCtxReduceTagNumbers, textMentionsRecentCommit, removeSystemReminders, hasMeaningfulUserText2, extractTexts2, extractToolCallSummaries, preloadTokenizer, estimateTokens, normalizeText, stripWellFormedLeadingTagPrefix, stripPersistedAssistantText, byteSize, stripTagPrefix, peelLeadingMcTagNotation, prependTag, isRecord, stableStringify, estimateImageTokensFromDataUrl, TODO_STATUSES, TODO_PRIORITIES, TITLE_DONE_STATUSES, normalizeTodoStateJson, buildSyntheticTodoPart, stripChannel1ReminderSpans, compareMeasuredTailPrefix, formatTailHygienePrefixMismatch, freezeTailHygieneMeasurement, effectiveTailHygiene, CHANNEL1_SENTINEL, CHANNEL1_FLOOR_TOKENS, decideChannel1, evaluateChannel2, reclaimableToolOutputCount, buildChannel2Reminder, buildChannel1Reminder, planEmergencyDrop, measureEmergencyTag, updateTagByteSize, getRecentTagOwnerMessageIds, AGE_RECLAIM_MIN_TOKENS, getOldestActiveUnprotectedToolTags, getActiveToolTagsForAgeReclaim, getTriggerTagTokenUpperBound, updateTagInputByteSize, updateTagTokenCount, getPersistedToolTagAccounting, getAllStatusTagTokenTotalsFlat, updateTagInputTokenCount, tagTokenCountIsNull, backfillTagTokenCounts, insertTag, updateTagStatus, getInertWhitespaceAssistantTags, updateTagDropMode, updateCavemanDepth, hasPiFallbackMessageTags, findAdoptableFallbackTags, hasPiFallbackToolOwnerTags, findPiFallbackToolOwnerTags, adoptPiFallbackToolOwnerTag, adoptPiFallbackMessageTag, getMaxTagNumberBySession, getTagNumberByMessageId, getAssignableTagNumberByMessageId, deriveTagLoadFloor, TAG_SELECT_COLUMNS, getTagsBySession, getActiveTagsBySession, getTagsForPendingOperations, getTagsByNumbers, getDroppedTagsByNumbers, getMaxDroppedTagNumber, getToolTagNumberByOwner, getNullOwnerToolTag, adoptNullOwnerToolTag, retreatPastHostUnservedRows, resolveOpenCodeDbPath, hasV1MessageTables, assertOpenCodeStoreGeneration, openCodeDbPathExists, getOpenCodeDbProbeDescriptions, recordOpenCodeDbReadFailure, clearOpenCodeDbReadFailure, claimOpenCodeDbDiagnosticOnce, registerSlowWriteReporter, detectSqliteRuntime, Database, withPrivilegedWriter, closeQuietly, withReadOnlySessionDb, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, invalidateTrueRawTokenCache, droppedInputMarker, createDroppedInputGuard, isEditTool, applyEditMarkerToInput, setDatabase, loadToolDefinitionMeasurements, resolveDecisionCalibration, providerMass, localBudget, calibrationForModelKey, historyLocalBudget, resolveHostServedBoundaryId2, hasRawMessageProvider2, setRawMessageProvider2, withRawMessageProvider2, cleanUserText2, withRawSessionMessageCache2, readRawSessionMessages2, readRawSessionMessagePage2, getRawSessionMessageOrdinalCount2, readRawSessionMessageRange2, primeTailRawMessageCache2, getCachedAbsoluteMessageCount2, primeInMemoryTailRawMessageCache2, readRawSessionMessageIdOrdinalsForRange2, hasRawSessionMessageById2, readRawSessionMessageOrdinalById2, getRawSessionMessageCount2, getRawSessionTagKeysThrough2, getLegacyProtectedTailStartOrdinal2, readSessionChunk2 };
4872
+ export { CTX_REDUCE_KEEP, newestCtxReduceTagNumbers, textMentionsRecentCommit, removeSystemReminders, hasMeaningfulUserText2, extractTexts2, extractToolCallSummaries, preloadTokenizer, estimateTokens, normalizeText, stripWellFormedLeadingTagPrefix, stripPersistedAssistantText, byteSize, stripTagPrefix, peelLeadingMcTagNotation, prependTag, isRecord, stableStringify, estimateImageTokensFromDataUrl, TODO_STATUSES, TODO_PRIORITIES, TITLE_DONE_STATUSES, normalizeTodoStateJson, buildSyntheticTodoPart, stripChannel1ReminderSpans, compareMeasuredTailPrefix, formatTailHygienePrefixMismatch, freezeTailHygieneMeasurement, effectiveTailHygiene, CHANNEL1_SENTINEL, CHANNEL1_FLOOR_TOKENS, decideChannel1, evaluateChannel2, reclaimableToolOutputCount, buildChannel2Reminder, buildChannel1Reminder, planEmergencyDrop, measureEmergencyTag, updateTagByteSize, getRecentTagOwnerMessageIds, AGE_RECLAIM_MIN_TOKENS, getOldestActiveUnprotectedToolTags, getActiveToolTagsForAgeReclaim, getTriggerTagTokenUpperBound, updateTagInputByteSize, updateTagTokenCount, getPersistedToolTagAccounting, getAllStatusTagTokenTotalsFlat, updateTagInputTokenCount, tagTokenCountIsNull, backfillTagTokenCounts, insertTag, updateTagStatus, getInertWhitespaceAssistantTags, updateTagDropMode, updateCavemanDepth, hasPiFallbackMessageTags, findAdoptableFallbackTags, hasPiFallbackToolOwnerTags, findPiFallbackToolOwnerTags, adoptPiFallbackToolOwnerTag, adoptPiFallbackMessageTag, getMaxTagNumberBySession, getTagNumberByMessageId, getAssignableTagNumberByMessageId, deriveTagLoadFloor, TAG_SELECT_COLUMNS, getTagsBySession, getActiveTagsBySession, getTagsForPendingOperations, getTagsByNumbers, getDroppedTagsByNumbers, getMaxDroppedTagNumber, getToolTagNumberByOwner, getNullOwnerToolTag, adoptNullOwnerToolTag, retreatPastHostUnservedRows, resolveOpenCodeDbPath, hasV1MessageTables, assertOpenCodeStoreGeneration, openCodeDbPathExists, getOpenCodeDbProbeDescriptions, recordOpenCodeDbReadFailure, clearOpenCodeDbReadFailure, claimOpenCodeDbDiagnosticOnce, registerSlowWriteReporter, detectSqliteRuntime, Database, withPrivilegedWriter, closeQuietly, withReadOnlySessionDb, RAW_SUMMARY_TEXT_MAX_CHARS, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, invalidateTrueRawTokenCache, droppedInputMarker, createDroppedInputGuard, isEditTool, applyEditMarkerToInput, setDatabase, loadToolDefinitionMeasurements, resolveDecisionCalibration, providerMass, localBudget, calibrationForModelKey, historyLocalBudget, SKELETON_REAL_INPUT_MAX_BYTES, toolInputStringBytes, resolveHostServedBoundaryId2, hasRawMessageProvider2, setRawMessageProvider2, withRawMessageProvider2, cleanUserText2, withRawSessionMessageCache2, readRawSessionMessages2, readRawSessionMessagePage2, getRawSessionMessageOrdinalCount2, visitRawSessionMessages2, readRawSessionMessageRange2, primeTailRawMessageCache2, getCachedAbsoluteMessageCount2, primeInMemoryTailRawMessageCache2, readRawSessionMessageIdOrdinalsForRange2, hasRawSessionMessageById2, readRawSessionMessageOrdinalById2, compareRawSessionMessageOrder2, getRawSessionMessageCount2, getRawSessionTagKeysThrough2, getLegacyProtectedTailStartOrdinal2, readSessionChunk2 };