@cortexkit/pi-magic-context 0.47.0 → 0.48.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.
Files changed (60) hide show
  1. package/dist/auto-search-worker.js +27 -22
  2. package/dist/embedding-activity-ew6dshfd.js +10 -0
  3. package/dist/embedding-backfill-bnnytehy.js +20 -0
  4. package/dist/embedding-cache-7rp4gqzr.js +16 -0
  5. package/dist/embedding-worker.js +11 -8
  6. package/dist/harness-9872e0ym.js +10 -0
  7. package/dist/historian-calibration-extension.js +3 -2
  8. package/dist/index-0am8a7k1.js +152 -0
  9. package/dist/index-0h2mkab2.js +17 -0
  10. package/dist/index-135e8hvg.js +43 -0
  11. package/dist/{index-0qejsd7f.js → index-3cgbv47m.js} +289 -45
  12. package/dist/index-419bndtm.js +2309 -0
  13. package/dist/index-544c0e0x.js +3026 -0
  14. package/dist/index-5hd7h4rr.js +3098 -0
  15. package/dist/index-5jp1h0bz.js +750 -0
  16. package/dist/index-603mt6nm.js +171 -0
  17. package/dist/index-674f6qs2.js +16 -0
  18. package/dist/{index-vgcemg0n.js → index-6pgq5ns2.js} +151 -2452
  19. package/dist/{index-xpbh1ypk.js → index-72bdc1bd.js} +38 -741
  20. package/dist/index-8976mezv.js +209 -0
  21. package/dist/{index-td885aah.js → index-8y5knskr.js} +98 -231
  22. package/dist/{index-k3ezsjng.js → index-98z1c1r0.js} +14574 -13942
  23. package/dist/index-9p40dgkm.js +22 -0
  24. package/dist/index-9x1f96r8.js +11 -0
  25. package/dist/{index-266qrgss.js → index-9xb0axhc.js} +301 -27
  26. package/dist/{index-spk5vrhy.js → index-bgmv2kaf.js} +1 -16
  27. package/dist/index-dkx0b1kt.js +514 -0
  28. package/dist/{index-7n8gb6j3.js → index-f956htf3.js} +28 -31
  29. package/dist/index-fapenpch.js +13 -0
  30. package/dist/index-fm3ksh5e.js +1060 -0
  31. package/dist/{index-2p1e8706.js → index-fp37he9a.js} +3 -3
  32. package/dist/index-hrf13mn3.js +2388 -0
  33. package/dist/index-pvm4pd5d.js +3069 -0
  34. package/dist/{index-kztsbkqq.js → index-r7xg4hvw.js} +171 -168
  35. package/dist/index-rt5jgzp1.js +1127 -0
  36. package/dist/{index-n3g5mwa8.js → index-wrm4nbj7.js} +3 -3
  37. package/dist/index-xjqheg7a.js +931 -0
  38. package/dist/index-yhzhdp3m.js +143 -0
  39. package/dist/{index-w76x3af7.js → index-zrr5t5a7.js} +1 -3
  40. package/dist/index.js +4203 -2183
  41. package/dist/logger-v3dsxdnm.js +19 -0
  42. package/dist/message-index-bounded-t7vvty76.js +120 -0
  43. package/dist/{message-time-backfill-d3db2etr.js → message-time-backfill-4ndf7hrq.js} +7 -6
  44. package/dist/migration-worker.js +20 -14
  45. package/dist/project-embedding-registry-jy2hmq28.js +85 -0
  46. package/dist/raw-ordinal-warmup-worker.js +60 -0
  47. package/dist/{read-session-chunk-atxsyfqv.js → read-session-chunk-47pjn7fz.js} +12 -6
  48. package/dist/read-session-raw-yn8nawav.js +55 -0
  49. package/dist/{safe-notification-target-6cn3z99t.js → safe-notification-target-3c1ns931.js} +3 -2
  50. package/dist/search-42szfhwp.js +40 -0
  51. package/dist/sqlite-3yye76ht.js +44 -0
  52. package/dist/sqlite-context-pragmas-gcgch6qz.js +6 -0
  53. package/dist/storage-memory-1z20y55x.js +71 -0
  54. package/dist/storage-tags-jym5z6yk.js +127 -0
  55. package/dist/subagent-entry.js +34 -17
  56. package/dist/transformers-node-wasm.js +18415 -18415
  57. package/package.json +3 -3
  58. package/dist/index-7s8vw2y0.js +0 -5207
  59. package/dist/index-qaa5j277.js +0 -8544
  60. /package/dist/{index-en1k8h8m.js → index-5prbx026.js} +0 -0
@@ -0,0 +1,171 @@
1
+ import {
2
+ withSqliteBackgroundWriter2,
3
+ withoutSqliteTransformPass2
4
+ } from "./index-3cgbv47m.js";
5
+ import {
6
+ logSlowWriteTransaction
7
+ } from "./index-fp37he9a.js";
8
+
9
+ // ../plugin/src/features/magic-context/message-fts-rowid-map.ts
10
+ import { createHash } from "node:crypto";
11
+ var MESSAGE_FTS_ROWID_MAP_BACKFILL_BATCH_SIZE = 100;
12
+ var BACKFILL_STATE_ID = 1;
13
+ var EMPTY_INDEX_CONTENT_HASH = createHash("sha256").update("").digest("hex");
14
+ var upsertMapStatements = new WeakMap;
15
+ var rangeReadyStatements = new WeakMap;
16
+ var updateTimeStatements = new WeakMap;
17
+ var activeBackfills = new WeakMap;
18
+ function getUpsertMapStatement(db) {
19
+ let statement = upsertMapStatements.get(db);
20
+ if (!statement) {
21
+ statement = db.prepare(`INSERT INTO message_fts_rowid_map
22
+ (session_id, message_ordinal, fts_rowid, message_time_ms)
23
+ VALUES (?, ?, ?, ?)
24
+ ON CONFLICT(session_id, message_ordinal) DO UPDATE SET
25
+ fts_rowid = excluded.fts_rowid,
26
+ message_time_ms = COALESCE(
27
+ excluded.message_time_ms,
28
+ message_fts_rowid_map.message_time_ms
29
+ )`);
30
+ upsertMapStatements.set(db, statement);
31
+ }
32
+ return statement;
33
+ }
34
+ function getBackfillState(db) {
35
+ const row = db.prepare(`SELECT watermark_rowid AS watermarkRowid, completed
36
+ FROM message_fts_rowid_map_backfill_state
37
+ WHERE id = ?`).get(BACKFILL_STATE_ID);
38
+ return {
39
+ processed: 0,
40
+ watermarkRowid: typeof row?.watermarkRowid === "number" && Number.isSafeInteger(row.watermarkRowid) ? row.watermarkRowid : 0,
41
+ completed: row?.completed === 1
42
+ };
43
+ }
44
+ function recordMessageFtsRowid(db, sessionId, messageOrdinal, ftsRowid, messageTimeMs = null) {
45
+ const numericRowid = Number(ftsRowid);
46
+ if (!Number.isSafeInteger(numericRowid) || numericRowid <= 0) {
47
+ throw new Error(`invalid message FTS rowid: ${String(ftsRowid)}`);
48
+ }
49
+ const normalizedTime = typeof messageTimeMs === "number" && Number.isSafeInteger(messageTimeMs) && messageTimeMs >= 0 ? messageTimeMs : null;
50
+ getUpsertMapStatement(db).run(sessionId, messageOrdinal, numericRowid, normalizedTime);
51
+ }
52
+ function recordIndexedMessageTime(db, sessionId, messageOrdinal, messageTimeMs) {
53
+ if (typeof messageTimeMs !== "number" || !Number.isSafeInteger(messageTimeMs) || messageTimeMs < 0) {
54
+ return;
55
+ }
56
+ let statement = updateTimeStatements.get(db);
57
+ if (!statement) {
58
+ statement = db.prepare(`UPDATE message_fts_rowid_map
59
+ SET message_time_ms = ?
60
+ WHERE session_id = ? AND message_ordinal = ?
61
+ AND message_time_ms IS NULL`);
62
+ updateTimeStatements.set(db, statement);
63
+ }
64
+ statement.run(messageTimeMs, sessionId, messageOrdinal);
65
+ }
66
+ function backfillMessageFtsRowidMapBatch(db, batchSize = MESSAGE_FTS_ROWID_MAP_BACKFILL_BATCH_SIZE) {
67
+ const boundedBatchSize = Number.isFinite(batchSize) ? Math.min(MESSAGE_FTS_ROWID_MAP_BACKFILL_BATCH_SIZE, Math.max(1, Math.floor(batchSize))) : MESSAGE_FTS_ROWID_MAP_BACKFILL_BATCH_SIZE;
68
+ let progress = {
69
+ processed: 0,
70
+ watermarkRowid: 0,
71
+ completed: false
72
+ };
73
+ let transactionStartedAt = 0;
74
+ db.transaction(() => {
75
+ transactionStartedAt = performance.now();
76
+ db.prepare(`INSERT OR IGNORE INTO message_fts_rowid_map_backfill_state
77
+ (id, watermark_rowid, completed) VALUES (?, 0, 0)`).run(BACKFILL_STATE_ID);
78
+ const state = getBackfillState(db);
79
+ if (state.completed) {
80
+ progress = state;
81
+ return;
82
+ }
83
+ const rows = db.prepare(`SELECT rowid AS ftsRowid,
84
+ session_id AS sessionId, message_ordinal AS messageOrdinal
85
+ FROM message_history_fts WHERE rowid > ? ORDER BY rowid ASC LIMIT ?`).all(state.watermarkRowid, boundedBatchSize);
86
+ let watermarkRowid = state.watermarkRowid;
87
+ for (const row of rows) {
88
+ const ftsRowid = Number(row.ftsRowid);
89
+ const messageOrdinal = Number(row.messageOrdinal);
90
+ if (Number.isSafeInteger(ftsRowid) && ftsRowid > watermarkRowid) {
91
+ watermarkRowid = ftsRowid;
92
+ }
93
+ if (typeof row.sessionId === "string" && Number.isSafeInteger(messageOrdinal) && messageOrdinal >= 0 && Number.isSafeInteger(ftsRowid) && ftsRowid > 0) {
94
+ recordMessageFtsRowid(db, row.sessionId, messageOrdinal, ftsRowid);
95
+ }
96
+ }
97
+ const completed = rows.length < boundedBatchSize;
98
+ db.prepare(`UPDATE message_fts_rowid_map_backfill_state
99
+ SET watermark_rowid = ?, completed = ?, updated_at = ?
100
+ WHERE id = ?`).run(watermarkRowid, completed ? 1 : 0, Date.now(), BACKFILL_STATE_ID);
101
+ progress = {
102
+ processed: rows.length,
103
+ watermarkRowid,
104
+ completed
105
+ };
106
+ }).immediate();
107
+ logSlowWriteTransaction("message_fts_rowid_backfill", transactionStartedAt);
108
+ return progress;
109
+ }
110
+ async function runMessageFtsRowidMapBackfill(db) {
111
+ await new Promise((resolve) => setTimeout(resolve, 0));
112
+ for (;; ) {
113
+ const progress = backfillMessageFtsRowidMapBatch(db);
114
+ if (progress.completed)
115
+ return;
116
+ await new Promise((resolve) => setTimeout(resolve, 0));
117
+ }
118
+ }
119
+ function startMessageFtsRowidMapBackfill(db) {
120
+ const active = activeBackfills.get(db);
121
+ if (active)
122
+ return active;
123
+ const run = withoutSqliteTransformPass2(() => withSqliteBackgroundWriter2(() => runMessageFtsRowidMapBackfill(db))).finally(() => {
124
+ activeBackfills.delete(db);
125
+ });
126
+ activeBackfills.set(db, run);
127
+ return run;
128
+ }
129
+ function messageFtsOrdinalRangeIsMapped(db, sessionId, startOrdinal, endOrdinal) {
130
+ if (endOrdinal < startOrdinal)
131
+ return true;
132
+ if (getBackfillState(db).completed)
133
+ return true;
134
+ let statement = rangeReadyStatements.get(db);
135
+ if (!statement) {
136
+ statement = db.prepare(`SELECT COUNT(DISTINCT source.message_ordinal) AS sourceOrdinalCount,
137
+ COUNT(DISTINCT CASE
138
+ WHEN source.role IN ('user', 'assistant')
139
+ AND source.normalized_content_hash != ?
140
+ THEN source.message_ordinal
141
+ END) AS expectedMapCount,
142
+ COUNT(DISTINCT CASE
143
+ WHEN source.role IN ('user', 'assistant')
144
+ AND source.normalized_content_hash != ?
145
+ AND map.fts_rowid IS NOT NULL
146
+ THEN source.message_ordinal
147
+ END) AS mappedCount
148
+ FROM message_history_source AS source
149
+ LEFT JOIN message_fts_rowid_map AS map
150
+ ON map.session_id = source.session_id
151
+ AND map.message_ordinal = source.message_ordinal
152
+ WHERE source.session_id = ?
153
+ AND source.message_ordinal BETWEEN ? AND ?`);
154
+ rangeReadyStatements.set(db, statement);
155
+ }
156
+ const row = statement.get(EMPTY_INDEX_CONTENT_HASH, EMPTY_INDEX_CONTENT_HASH, sessionId, startOrdinal, endOrdinal);
157
+ const ordinalCount = endOrdinal - startOrdinal + 1;
158
+ return row?.sourceOrdinalCount === ordinalCount && row.expectedMapCount === row.mappedCount;
159
+ }
160
+ function deleteUnmappedMessageFtsRows(db, sessionIds) {
161
+ if (sessionIds.length === 0)
162
+ return;
163
+ const state = getBackfillState(db);
164
+ if (state.completed)
165
+ return;
166
+ const placeholders = sessionIds.map(() => "?").join(", ");
167
+ db.prepare(`DELETE FROM message_history_fts
168
+ WHERE rowid > ? AND session_id IN (${placeholders})`).run(state.watermarkRowid, ...sessionIds);
169
+ }
170
+
171
+ export { recordMessageFtsRowid, recordIndexedMessageTime, startMessageFtsRowidMapBackfill, messageFtsOrdinalRangeIsMapped, deleteUnmappedMessageFtsRows };
@@ -0,0 +1,16 @@
1
+ // ../plugin/src/shared/protected-tools-policy.ts
2
+ var DEFAULT_PROTECTED_TOOLS = {
3
+ todowrite: 1,
4
+ ctx_reduce: 3
5
+ };
6
+ function normalizeProtectedToolName(name) {
7
+ return (name ?? "").toLowerCase().replace(/^mcp_/, "");
8
+ }
9
+ function mergeProtectedTools(...maps) {
10
+ return Object.fromEntries([DEFAULT_PROTECTED_TOOLS, ...maps].flatMap((map) => Object.entries(map ?? {}).map(([name, count]) => [
11
+ normalizeProtectedToolName(name),
12
+ count
13
+ ])));
14
+ }
15
+
16
+ export { DEFAULT_PROTECTED_TOOLS, normalizeProtectedToolName, mergeProtectedTools };