@cortexkit/pi-magic-context 0.42.5 → 0.43.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.
@@ -0,0 +1,108 @@
1
+ import"./index-83wwtw1q.js";
2
+ import {
3
+ logSlowWriteTransaction
4
+ } from "./index-y33j7m6y.js";
5
+
6
+ // ../plugin/src/features/magic-context/message-time-backfill.ts
7
+ var MESSAGE_TIME_BACKFILL_BATCH_SIZE = 500;
8
+ var BACKFILL_STATE_ID = 1;
9
+ var activeBackfills = new WeakMap;
10
+ function normalizedMessageTime(value) {
11
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0 ? value : null;
12
+ }
13
+ function getBackfillState(db) {
14
+ const row = db.prepare(`SELECT cursor_session_id AS cursorSessionId,
15
+ cursor_ordinal AS cursorOrdinal,
16
+ completed
17
+ FROM message_time_backfill_state
18
+ WHERE id = ?`).get(BACKFILL_STATE_ID);
19
+ return {
20
+ processed: 0,
21
+ cursorSessionId: typeof row?.cursorSessionId === "string" ? row.cursorSessionId : "",
22
+ cursorOrdinal: typeof row?.cursorOrdinal === "number" && Number.isSafeInteger(row.cursorOrdinal) ? row.cursorOrdinal : 0,
23
+ completed: row?.completed === 1
24
+ };
25
+ }
26
+ function readMessageTimes(reader, rows) {
27
+ const times = new Map;
28
+ const bySession = new Map;
29
+ for (const row of rows) {
30
+ const list = bySession.get(row.sessionId) ?? [];
31
+ list.push(row);
32
+ bySession.set(row.sessionId, list);
33
+ }
34
+ for (const [sessionId, sessionRows] of bySession) {
35
+ const ordinals = sessionRows.map((row) => Number(row.messageOrdinal));
36
+ const firstOrdinal = Math.min(...ordinals);
37
+ const lastOrdinal = Math.max(...ordinals);
38
+ const messages = reader.readPage ? reader.readPage(sessionId, Math.max(0, firstOrdinal - 1), Math.max(1, lastOrdinal - firstOrdinal + 1), lastOrdinal) : reader(sessionId).filter((message) => message.ordinal >= firstOrdinal && message.ordinal <= lastOrdinal);
39
+ const wantedIds = new Set(sessionRows.map((row) => row.messageId));
40
+ for (const message of messages) {
41
+ const time = normalizedMessageTime(message.createdAt);
42
+ if (time !== null && wantedIds.has(message.id))
43
+ times.set(message.id, time);
44
+ }
45
+ }
46
+ return times;
47
+ }
48
+ function backfillMessageTimesBatch(db, reader, batchSize = MESSAGE_TIME_BACKFILL_BATCH_SIZE) {
49
+ const state = getBackfillState(db);
50
+ if (state.completed)
51
+ return state;
52
+ const boundedBatchSize = Math.max(1, Math.floor(batchSize));
53
+ const rows = db.prepare(`SELECT map.session_id AS sessionId,
54
+ map.message_ordinal AS messageOrdinal,
55
+ fts.message_id AS messageId
56
+ FROM message_fts_rowid_map AS map
57
+ JOIN message_history_fts AS fts ON fts.rowid = map.fts_rowid
58
+ WHERE map.message_time_ms IS NULL
59
+ AND (map.session_id > ?
60
+ OR (map.session_id = ? AND map.message_ordinal > ?))
61
+ ORDER BY map.session_id ASC, map.message_ordinal ASC
62
+ LIMIT ?`).all(state.cursorSessionId, state.cursorSessionId, state.cursorOrdinal, boundedBatchSize);
63
+ const times = readMessageTimes(reader, rows);
64
+ const last = rows.at(-1);
65
+ const completed = rows.length < boundedBatchSize;
66
+ const cursorSessionId = last?.sessionId ?? state.cursorSessionId;
67
+ const cursorOrdinal = last ? Number(last.messageOrdinal) : state.cursorOrdinal;
68
+ const transactionStartedAt = performance.now();
69
+ db.transaction(() => {
70
+ const update = db.prepare(`UPDATE message_fts_rowid_map
71
+ SET message_time_ms = ?
72
+ WHERE session_id = ? AND message_ordinal = ? AND message_time_ms IS NULL`);
73
+ for (const row of rows) {
74
+ const time = times.get(row.messageId);
75
+ if (time !== undefined)
76
+ update.run(time, row.sessionId, Number(row.messageOrdinal));
77
+ }
78
+ db.prepare(`UPDATE message_time_backfill_state
79
+ SET cursor_session_id = ?, cursor_ordinal = ?, completed = ?, updated_at = ?
80
+ WHERE id = ?`).run(cursorSessionId, cursorOrdinal, completed ? 1 : 0, Date.now(), BACKFILL_STATE_ID);
81
+ })();
82
+ logSlowWriteTransaction("message_time_backfill", transactionStartedAt);
83
+ return {
84
+ processed: rows.length,
85
+ cursorSessionId,
86
+ cursorOrdinal,
87
+ completed
88
+ };
89
+ }
90
+ async function runMessageTimeBackfill(db, reader) {
91
+ for (;; ) {
92
+ const progress = backfillMessageTimesBatch(db, reader);
93
+ if (progress.completed)
94
+ return;
95
+ await new Promise((resolve) => setTimeout(resolve, 0));
96
+ }
97
+ }
98
+ function startMessageTimeBackfill(db, reader) {
99
+ const active = activeBackfills.get(db);
100
+ if (active)
101
+ return active;
102
+ const run = runMessageTimeBackfill(db, reader).finally(() => activeBackfills.delete(db));
103
+ activeBackfills.set(db, run);
104
+ return run;
105
+ }
106
+ export {
107
+ startMessageTimeBackfill
108
+ };
@@ -0,0 +1,47 @@
1
+ import {
2
+ hasMeaningfulUserText2,
3
+ extractTexts2,
4
+ resolveHostServedBoundaryId2,
5
+ hasRawMessageProvider2,
6
+ setRawMessageProvider2,
7
+ withRawMessageProvider2,
8
+ cleanUserText2,
9
+ withRawSessionMessageCache2,
10
+ readRawSessionMessages2,
11
+ readRawSessionMessagePage2,
12
+ getRawSessionMessageOrdinalCount2,
13
+ readRawSessionMessageRange2,
14
+ primeTailRawMessageCache2,
15
+ getCachedAbsoluteMessageCount2,
16
+ primeInMemoryTailRawMessageCache2,
17
+ readRawSessionMessageIdOrdinalsForRange2,
18
+ hasRawSessionMessageById2,
19
+ getRawSessionMessageCount2,
20
+ getRawSessionTagKeysThrough2,
21
+ getLegacyProtectedTailStartOrdinal2,
22
+ readSessionChunk2
23
+ } from "./index-vcjgpb6f.js";
24
+ import"./index-83wwtw1q.js";
25
+ export {
26
+ cleanUserText2 as cleanUserText,
27
+ extractTexts2 as extractTexts,
28
+ getCachedAbsoluteMessageCount2 as getCachedAbsoluteMessageCount,
29
+ getLegacyProtectedTailStartOrdinal2 as getLegacyProtectedTailStartOrdinal,
30
+ getRawSessionMessageCount2 as getRawSessionMessageCount,
31
+ getRawSessionMessageOrdinalCount2 as getRawSessionMessageOrdinalCount,
32
+ getRawSessionTagKeysThrough2 as getRawSessionTagKeysThrough,
33
+ hasMeaningfulUserText2 as hasMeaningfulUserText,
34
+ hasRawMessageProvider2 as hasRawMessageProvider,
35
+ hasRawSessionMessageById2 as hasRawSessionMessageById,
36
+ primeInMemoryTailRawMessageCache2 as primeInMemoryTailRawMessageCache,
37
+ primeTailRawMessageCache2 as primeTailRawMessageCache,
38
+ readRawSessionMessageIdOrdinalsForRange2 as readRawSessionMessageIdOrdinalsForRange,
39
+ readRawSessionMessagePage2 as readRawSessionMessagePage,
40
+ readRawSessionMessageRange2 as readRawSessionMessageRange,
41
+ readRawSessionMessages2 as readRawSessionMessages,
42
+ readSessionChunk2 as readSessionChunk,
43
+ resolveHostServedBoundaryId2 as resolveHostServedBoundaryId,
44
+ setRawMessageProvider2 as setRawMessageProvider,
45
+ withRawMessageProvider2 as withRawMessageProvider,
46
+ withRawSessionMessageCache2 as withRawSessionMessageCache
47
+ };
@@ -1,14 +1,18 @@
1
1
  import {
2
2
  setHarness,
3
- log,
4
- resolveProjectIdentityForSession,
3
+ log
4
+ } from "./index-83wwtw1q.js";
5
+ import {
5
6
  setStoragePrivatePermissionEnforcement,
7
+ resolveProjectIdentityForSession,
6
8
  openDatabase,
7
9
  loadPiConfig,
8
10
  ensureProjectRegisteredFromPiDirectory,
9
11
  resolvePiHarnessKind,
10
12
  registerMagicContextTools
11
- } from "./index-a0960w4w.js";
13
+ } from "./index-5tw61yhp.js";
14
+ import"./index-vcjgpb6f.js";
15
+ import"./index-y33j7m6y.js";
12
16
 
13
17
  // src/subagent-entry.ts
14
18
  var SUBAGENT_DREAMER_ACTIONS_FLAG = "magic-context-dreamer-actions";