@cortexkit/pi-magic-context 0.43.2 → 0.44.0

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,7 @@
1
1
  import {
2
2
  getHarness,
3
3
  log
4
- } from "./index-bfd52y8p.js";
4
+ } from "./index-tfzybajk.js";
5
5
 
6
6
  // ../plugin/src/features/magic-context/reclaim-protection.ts
7
7
  var CTX_REDUCE_KEEP = 3;
@@ -1009,7 +1009,7 @@ function buildChannel2Reminder(undroppedTokens, reclaimableToolOutputs, hint) {
1009
1009
  const summary = formatReclaimableOutputSummary(reclaimableToolOutputs, undroppedTokens);
1010
1010
  const hintText = formatOldestReclaimableHint(hint);
1011
1011
  return `<system-reminder>
1012
- ` + `Routine housekeeping: ${summary} are reclaimable — make a ctx_reduce pass at a natural stopping point.${hintText}
1012
+ ` + `Your next step: call ctx_reduce on the outputs you've already used (${summary}). Then continue your task.${hintText}
1013
1013
  ` + `</system-reminder>`;
1014
1014
  }
1015
1015
  var CHANNEL1_STICKY_REAL_USER_TURN_GAP = 5;
@@ -1020,19 +1020,19 @@ function buildChannel1Reminder(level, undroppedTokens, reclaimableToolOutputs, h
1020
1020
  return `
1021
1021
 
1022
1022
  <system-reminder>
1023
- Reminder: ${summary} are still reclaimable — ctx_reduce them at a natural stopping point.${hintText}
1023
+ Still unstamped: ${summary}. Stamp the ones you've used with ctx_reduce now.${hintText}
1024
1024
  </system-reminder>`;
1025
1025
  }
1026
1026
  let body;
1027
1027
  switch (level) {
1028
1028
  case "gentle":
1029
- body = `Housekeeping: ${summary} are reclaimable — drop the ones you have already processed with ctx_reduce at a natural stopping point.`;
1029
+ 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
1030
  break;
1031
1031
  case "firm":
1032
- body = `Housekeeping: ${summary} are reclaimable — make a ctx_reduce pass at a natural stopping point.`;
1032
+ body = `${summary} are reclaimable. Make a ctx_reduce pass now over the outputs you've already used, then continue.`;
1033
1033
  break;
1034
1034
  case "urgent":
1035
- body = `Housekeeping backlog: ${summary} are reclaimable — a ctx_reduce pass is due.`;
1035
+ body = `${summary} are still unstamped. Call ctx_reduce now, before your next tool call, on every output you've already used.`;
1036
1036
  break;
1037
1037
  }
1038
1038
  return `
@@ -1490,7 +1490,7 @@ function toTagEntry(row) {
1490
1490
  messageId: row.message_id,
1491
1491
  type,
1492
1492
  status,
1493
- dropMode: row.drop_mode === "truncated" ? "truncated" : row.drop_mode === "edit_marker" ? "edit_marker" : "full",
1493
+ 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
1494
  toolName: row.tool_name ?? null,
1495
1495
  inputByteSize: row.input_byte_size ?? 0,
1496
1496
  byteSize: row.byte_size,
@@ -1641,8 +1641,22 @@ function getPiFallbackMessageFoldTagRowsByMessageId(db, sessionId, messageId) {
1641
1641
  AND type = 'message'
1642
1642
  ORDER BY tag_number ASC`).all(sessionId, messageId).filter(isPiFallbackFoldTagRow);
1643
1643
  }
1644
+ var foldStatements = new WeakMap;
1645
+ function foldStatement(db, sql) {
1646
+ let statements = foldStatements.get(db);
1647
+ if (!statements) {
1648
+ statements = new Map;
1649
+ foldStatements.set(db, statements);
1650
+ }
1651
+ let statement = statements.get(sql);
1652
+ if (!statement) {
1653
+ statement = db.prepare(sql);
1654
+ statements.set(sql, statement);
1655
+ }
1656
+ return statement;
1657
+ }
1644
1658
  function mergeSizeAndTokenColumnsIntoSurvivor(db, sessionId, survivor, duplicate) {
1645
- db.prepare(`UPDATE tags
1659
+ foldStatement(db, `UPDATE tags
1646
1660
  SET byte_size = ?,
1647
1661
  reasoning_byte_size = ?,
1648
1662
  input_byte_size = ?,
@@ -1662,36 +1676,38 @@ function applyDroppedStatusIfNeeded(db, sessionId, survivor, duplicate) {
1662
1676
  return;
1663
1677
  if (duplicate.status !== "dropped")
1664
1678
  return;
1665
- db.prepare("UPDATE tags SET status = 'dropped' WHERE session_id = ? AND tag_number = ?").run(sessionId, survivor.tagNumber);
1679
+ foldStatement(db, "UPDATE tags SET status = 'dropped' WHERE session_id = ? AND tag_number = ?").run(sessionId, survivor.tagNumber);
1666
1680
  survivor.status = "dropped";
1667
1681
  }
1668
1682
  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);
1683
+ const rows = foldStatement(db, `SELECT id, operation
1684
+ FROM pending_ops
1685
+ WHERE session_id = ? AND tag_id = ?
1686
+ ORDER BY id ASC`).all(sessionId, fromTagNumber).filter(isPendingOpIdentityRow);
1673
1687
  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);
1688
+ const existing = foldStatement(db, `SELECT 1
1689
+ FROM pending_ops
1690
+ WHERE session_id = ? AND tag_id = ? AND operation = ?
1691
+ LIMIT 1`).get(sessionId, toTagNumber, row.operation);
1678
1692
  if (existing) {
1679
- db.prepare("DELETE FROM pending_ops WHERE session_id = ? AND id = ?").run(sessionId, row.id);
1693
+ foldStatement(db, "DELETE FROM pending_ops WHERE session_id = ? AND id = ?").run(sessionId, row.id);
1680
1694
  } else {
1681
- db.prepare("UPDATE pending_ops SET tag_id = ? WHERE session_id = ? AND id = ?").run(toTagNumber, sessionId, row.id);
1695
+ foldStatement(db, "UPDATE pending_ops SET tag_id = ? WHERE session_id = ? AND id = ?").run(toTagNumber, sessionId, row.id);
1682
1696
  }
1683
1697
  }
1684
- db.prepare("DELETE FROM pending_ops WHERE session_id = ? AND tag_id = ?").run(sessionId, fromTagNumber);
1698
+ foldStatement(db, "DELETE FROM pending_ops WHERE session_id = ? AND tag_id = ?").run(sessionId, fromTagNumber);
1685
1699
  }
1686
1700
  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);
1701
+ foldStatement(db, "DELETE FROM source_contents WHERE session_id = ? AND tag_id = ?").run(sessionId, tagNumber);
1702
+ foldStatement(db, "DELETE FROM tags WHERE session_id = ? AND tag_number = ?").run(sessionId, tagNumber);
1703
+ foldStatement(db, "DELETE FROM pending_ops WHERE session_id = ? AND tag_id = ?").run(sessionId, tagNumber);
1690
1704
  }
1691
- function foldDuplicateIntoSurvivor(db, sessionId, survivor, duplicate) {
1705
+ function foldDuplicateIntoSurvivor(db, sessionId, survivor, duplicate, duplicateMayHaveQueuedOps = true) {
1692
1706
  mergeSizeAndTokenColumnsIntoSurvivor(db, sessionId, survivor, duplicate);
1693
1707
  applyDroppedStatusIfNeeded(db, sessionId, survivor, duplicate);
1694
- retargetPendingOps(db, sessionId, duplicate.tagNumber, survivor.tagNumber);
1708
+ if (duplicateMayHaveQueuedOps) {
1709
+ retargetPendingOps(db, sessionId, duplicate.tagNumber, survivor.tagNumber);
1710
+ }
1695
1711
  deleteFoldedDuplicateTag(db, sessionId, duplicate.tagNumber);
1696
1712
  }
1697
1713
  function hasPiFallbackToolOwnerTags(db, sessionId) {
@@ -4030,6 +4046,28 @@ function historyLocalBudget(providerTokens, modelKey) {
4030
4046
  return ratio === 1 ? providerTokens : localBudget(providerTokens, ratio);
4031
4047
  }
4032
4048
 
4049
+ // ../plugin/src/hooks/magic-context/tool-input-size.ts
4050
+ var SKELETON_REAL_INPUT_MAX_BYTES = 1024;
4051
+ var encoder2 = new TextEncoder;
4052
+ function toolInputStringBytes(value) {
4053
+ const seen = new WeakSet;
4054
+ const visit = (candidate) => {
4055
+ if (typeof candidate === "string")
4056
+ return encoder2.encode(candidate).length;
4057
+ if (candidate === null || typeof candidate !== "object")
4058
+ return 0;
4059
+ if (seen.has(candidate))
4060
+ return 0;
4061
+ seen.add(candidate);
4062
+ let total = 0;
4063
+ const values = Array.isArray(candidate) ? candidate : Object.values(candidate);
4064
+ for (const item of values)
4065
+ total += visit(item);
4066
+ return total;
4067
+ };
4068
+ return visit(value);
4069
+ }
4070
+
4033
4071
  // ../plugin/src/hooks/magic-context/tool-drop-target.ts
4034
4072
  var IGNORE_PART_TYPES = new Set([
4035
4073
  "thinking",
@@ -4337,6 +4375,30 @@ function readRawSessionMessageOrdinalById2(sessionId, messageId) {
4337
4375
  return null;
4338
4376
  return withReadOnlySessionDb((db) => readRawSessionMessageOrdinalByIdFromDb(db, sessionId, messageId));
4339
4377
  }
4378
+ function compareRawSessionMessageOrder2(sessionId, leftId, rightId) {
4379
+ const provider = sessionProviders.get(sessionId);
4380
+ if (provider) {
4381
+ if (!provider.readMessageOrdinalById)
4382
+ return null;
4383
+ const left = provider.readMessageOrdinalById(leftId);
4384
+ const right = provider.readMessageOrdinalById(rightId);
4385
+ return left === null || right === null ? null : left - right;
4386
+ }
4387
+ if (!openCodeDbExists())
4388
+ return null;
4389
+ return withReadOnlySessionDb((db) => {
4390
+ const lookup = db.prepare("SELECT time_created, id FROM message WHERE session_id = ? AND id = ? LIMIT 1");
4391
+ const left = lookup.get(sessionId, leftId);
4392
+ const right = lookup.get(sessionId, rightId);
4393
+ if (typeof left?.time_created !== "number" || typeof right?.time_created !== "number" || typeof left.id !== "string" || typeof right.id !== "string") {
4394
+ return null;
4395
+ }
4396
+ if (left.time_created !== right.time_created) {
4397
+ return left.time_created - right.time_created;
4398
+ }
4399
+ return left.id < right.id ? -1 : left.id > right.id ? 1 : 0;
4400
+ });
4401
+ }
4340
4402
  function readRawSessionMessageById(sessionId, messageId) {
4341
4403
  const provider = sessionProviders.get(sessionId);
4342
4404
  if (provider?.readMessageById) {
@@ -4715,4 +4777,4 @@ function readSessionChunk2(sessionId, tokenBudget, offset = 1, eligibleEndOrdina
4715
4777
  toolResultBoundaries
4716
4778
  };
4717
4779
  }
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 };
4780
+ 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, SKELETON_REAL_INPUT_MAX_BYTES, toolInputStringBytes, resolveHostServedBoundaryId2, hasRawMessageProvider2, setRawMessageProvider2, withRawMessageProvider2, cleanUserText2, withRawSessionMessageCache2, readRawSessionMessages2, readRawSessionMessagePage2, getRawSessionMessageOrdinalCount2, readRawSessionMessageRange2, primeTailRawMessageCache2, getCachedAbsoluteMessageCount2, primeInMemoryTailRawMessageCache2, readRawSessionMessageIdOrdinalsForRange2, hasRawSessionMessageById2, readRawSessionMessageOrdinalById2, compareRawSessionMessageOrder2, getRawSessionMessageCount2, getRawSessionTagKeysThrough2, getLegacyProtectedTailStartOrdinal2, readSessionChunk2 };