@cortexkit/pi-magic-context 0.46.1 → 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.
- package/dist/auto-search-worker.js +112 -0
- package/dist/embedding-activity-ew6dshfd.js +10 -0
- package/dist/embedding-backfill-bnnytehy.js +20 -0
- package/dist/embedding-cache-7rp4gqzr.js +16 -0
- package/dist/embedding-worker.js +11 -8
- package/dist/harness-9872e0ym.js +10 -0
- package/dist/historian-calibration-extension.js +3 -2
- package/dist/index-0am8a7k1.js +152 -0
- package/dist/index-0h2mkab2.js +17 -0
- package/dist/index-135e8hvg.js +43 -0
- package/dist/{index-wv28nczk.js → index-3cgbv47m.js} +354 -38
- package/dist/index-419bndtm.js +2309 -0
- package/dist/index-544c0e0x.js +3026 -0
- package/dist/index-5hd7h4rr.js +3098 -0
- package/dist/index-5jp1h0bz.js +750 -0
- package/dist/index-603mt6nm.js +171 -0
- package/dist/index-674f6qs2.js +16 -0
- package/dist/{index-r01b1b78.js → index-6pgq5ns2.js} +157 -2454
- package/dist/index-72bdc1bd.js +3591 -0
- package/dist/index-8976mezv.js +209 -0
- package/dist/{index-td885aah.js → index-8y5knskr.js} +98 -231
- package/dist/{index-ykb8kkm3.js → index-98z1c1r0.js} +14599 -22287
- package/dist/index-9p40dgkm.js +22 -0
- package/dist/index-9x1f96r8.js +11 -0
- package/dist/{index-266qrgss.js → index-9xb0axhc.js} +301 -27
- package/dist/{index-phh7e055.js → index-bgmv2kaf.js} +28 -28
- package/dist/index-dkx0b1kt.js +514 -0
- package/dist/{index-7n8gb6j3.js → index-f956htf3.js} +28 -31
- package/dist/index-fapenpch.js +13 -0
- package/dist/index-fm3ksh5e.js +1060 -0
- package/dist/{index-2p1e8706.js → index-fp37he9a.js} +3 -3
- package/dist/index-hrf13mn3.js +2388 -0
- package/dist/index-pvm4pd5d.js +3069 -0
- package/dist/index-r7xg4hvw.js +3480 -0
- package/dist/index-rt5jgzp1.js +1127 -0
- package/dist/{index-n3g5mwa8.js → index-wrm4nbj7.js} +3 -3
- package/dist/index-xjqheg7a.js +931 -0
- package/dist/index-yhzhdp3m.js +143 -0
- package/dist/{index-w76x3af7.js → index-zrr5t5a7.js} +1 -3
- package/dist/index.js +6345 -2585
- package/dist/logger-v3dsxdnm.js +19 -0
- package/dist/message-index-bounded-t7vvty76.js +120 -0
- package/dist/{message-time-backfill-4688z1k2.js → message-time-backfill-4ndf7hrq.js} +7 -6
- package/dist/migration-worker.js +24 -16
- package/dist/project-embedding-registry-jy2hmq28.js +85 -0
- package/dist/raw-ordinal-warmup-worker.js +60 -0
- package/dist/{read-session-chunk-tc6yn2pe.js → read-session-chunk-47pjn7fz.js} +12 -6
- package/dist/read-session-raw-yn8nawav.js +55 -0
- package/dist/{safe-notification-target-6cn3z99t.js → safe-notification-target-3c1ns931.js} +3 -2
- package/dist/search-42szfhwp.js +40 -0
- package/dist/sqlite-3yye76ht.js +44 -0
- package/dist/sqlite-context-pragmas-gcgch6qz.js +6 -0
- package/dist/storage-memory-1z20y55x.js +71 -0
- package/dist/storage-tags-jym5z6yk.js +127 -0
- package/dist/subagent-entry.js +36 -16
- package/dist/transformers-node-wasm.js +18415 -18415
- package/package.json +3 -3
- package/dist/index-4vfrjwf6.js +0 -7737
- package/dist/index-xvw8zptx.js +0 -5123
- /package/dist/{index-901ekbga.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 };
|