@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.
- package/dist/{index-bfd52y8p.js → index-59dmj4zs.js} +26 -7
- package/dist/{index-5v60m046.js → index-5fw91enm.js} +1 -1
- package/dist/{index-17102c1m.js → index-97e5fzy3.js} +1 -1
- package/dist/{index-bkrh6jhp.js → index-mwpk0wn9.js} +738 -458
- package/dist/{index-mea04n1j.js → index-nm3c0sn8.js} +191 -37
- package/dist/index.js +1754 -792
- package/dist/{message-time-backfill-f0v3yvza.js → message-time-backfill-5yrp95cx.js} +3 -3
- package/dist/{read-session-chunk-ky2sprnf.js → read-session-chunk-ka7n4kah.js} +6 -2
- package/dist/{safe-notification-target-d7f3t5qk.js → safe-notification-target-y3hg2m7p.js} +2 -2
- package/dist/subagent-entry.js +6 -6
- package/package.json +4 -2
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getHarness,
|
|
3
|
+
harnessOwnsOpenCodeStore,
|
|
3
4
|
log
|
|
4
|
-
} from "./index-
|
|
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
|
-
` + `
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
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
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
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
|
|
1694
|
+
foldStatement(db, "DELETE FROM pending_ops WHERE session_id = ? AND id = ?").run(sessionId, row.id);
|
|
1680
1695
|
} else {
|
|
1681
|
-
db
|
|
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
|
|
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
|
|
1688
|
-
db
|
|
1689
|
-
db
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2614
|
-
|
|
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 };
|