@cortexkit/pi-magic-context 0.48.0 → 0.49.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/auto-search-worker.js +3 -3
- package/dist/embedding-backfill-scywarbn.js +20 -0
- package/dist/embedding-worker-process.js +29 -0
- package/dist/embedding-worker.js +6 -6
- package/dist/historian-calibration-extension.js +30 -5
- package/dist/index-0j0zqb4t.js +712 -0
- package/dist/{index-pvm4pd5d.js → index-0rasmwm8.js} +811 -76
- package/dist/{index-fp37he9a.js → index-0vrkp1jq.js} +1 -1
- package/dist/{index-419bndtm.js → index-21v1kfs7.js} +2 -2
- package/dist/{index-fm3ksh5e.js → index-27jh224p.js} +4 -4
- package/dist/{index-98z1c1r0.js → index-28vnkyy7.js} +1231 -3018
- package/dist/{index-wrm4nbj7.js → index-290tzwp1.js} +1 -1
- package/dist/{index-603mt6nm.js → index-4gfq5t09.js} +17 -2
- package/dist/{index-vf38qhee.js → index-81nthk8j.js} +44 -1
- package/dist/{index-5jp1h0bz.js → index-b2anqqad.js} +467 -14
- package/dist/{index-6pgq5ns2.js → index-cyrnv16r.js} +314 -1072
- package/dist/index-fqb1bddn.js +4947 -0
- package/dist/{index-dkx0b1kt.js → index-g7hndmqm.js} +20 -29
- package/dist/index-gc2749rx.js +1168 -0
- package/dist/{index-5hd7h4rr.js → index-kjd1fj55.js} +39 -31
- package/dist/{index-8y5knskr.js → index-mcgehvgw.js} +93 -9
- package/dist/{index-r7xg4hvw.js → index-p5zesr4e.js} +26 -722
- package/dist/{index-9xb0axhc.js → index-r56xgha8.js} +1 -1
- package/dist/{index-544c0e0x.js → index-r874cgmv.js} +42 -40
- package/dist/{index-72bdc1bd.js → index-rd53pk0h.js} +4 -4
- package/dist/{index-0am8a7k1.js → index-rdtgp48t.js} +8 -6
- package/dist/{index-rt5jgzp1.js → index-vakawmbc.js} +160 -25
- package/dist/{index-f956htf3.js → index-x3dcnxh0.js} +6 -2
- package/dist/{index-zrr5t5a7.js → index-zh1jw8qp.js} +106 -1
- package/dist/index.js +2271 -1769
- package/dist/{logger-v3dsxdnm.js → logger-j6tecd1h.js} +1 -1
- package/dist/{message-index-bounded-t7vvty76.js → message-index-bounded-110sb4fm.js} +13 -12
- package/dist/{message-time-backfill-4ndf7hrq.js → message-time-backfill-05ppypkz.js} +2 -2
- package/dist/migration-worker.js +10 -9
- package/dist/{project-embedding-registry-jy2hmq28.js → project-embedding-registry-64t0mw8y.js} +10 -10
- package/dist/raw-ordinal-warmup-worker.js +4 -4
- package/dist/{read-session-chunk-47pjn7fz.js → read-session-chunk-rvmc25n5.js} +10 -7
- package/dist/{read-session-raw-yn8nawav.js → read-session-raw-npx3920c.js} +5 -3
- package/dist/{safe-notification-target-3c1ns931.js → safe-notification-target-vn9kpmv4.js} +2 -2
- package/dist/{search-42szfhwp.js → search-7z3w8pmz.js} +19 -18
- package/dist/{storage-tags-jym5z6yk.js → storage-tags-kjnsqbdb.js} +6 -6
- package/dist/subagent-entry.js +25 -23
- package/package.json +3 -3
- package/dist/embedding-backfill-bnnytehy.js +0 -20
- package/dist/index-bgmv2kaf.js +0 -290
- package/dist/index-hrf13mn3.js +0 -2388
- /package/dist/{index-5prbx026.js → index-2pp04pmg.js} +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
estimateTokens
|
|
3
|
-
} from "./index-
|
|
3
|
+
} from "./index-r56xgha8.js";
|
|
4
4
|
import {
|
|
5
5
|
getHarness2
|
|
6
6
|
} from "./index-0h2mkab2.js";
|
|
7
7
|
import {
|
|
8
8
|
sessionLog2
|
|
9
|
-
} from "./index-
|
|
9
|
+
} from "./index-x3dcnxh0.js";
|
|
10
10
|
import {
|
|
11
11
|
getTagIdentityWriteGeneration2,
|
|
12
12
|
getSqliteDatabasePath2
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
import {
|
|
15
15
|
tagOrderConstraintIndex,
|
|
16
16
|
tagIdentityRevisionKey
|
|
17
|
-
} from "./index-
|
|
17
|
+
} from "./index-mcgehvgw.js";
|
|
18
18
|
import {
|
|
19
19
|
DEFAULT_PROTECTED_TOOLS,
|
|
20
20
|
normalizeProtectedToolName,
|
|
@@ -2021,6 +2021,15 @@ function readTagIdentityRevision(db, sessionId) {
|
|
|
2021
2021
|
const row = db.prepare("SELECT value FROM schema_migrations_meta WHERE key = ?").get(tagIdentityRevisionKey(sessionId));
|
|
2022
2022
|
return typeof row?.value === "string" ? row.value : null;
|
|
2023
2023
|
}
|
|
2024
|
+
function captureInitialTagOwnerRevision(db, sessionId, cached, appendedRows) {
|
|
2025
|
+
if (cached.identityRevision !== null || appendedRows === 0)
|
|
2026
|
+
return true;
|
|
2027
|
+
const revision = readTagIdentityRevision(db, sessionId);
|
|
2028
|
+
if (revision !== null && !/^[1-9]\d*:0$/.test(revision))
|
|
2029
|
+
return false;
|
|
2030
|
+
cached.identityRevision = revision;
|
|
2031
|
+
return true;
|
|
2032
|
+
}
|
|
2024
2033
|
function appendedSinceForeignCommit(db, sessionId, cached) {
|
|
2025
2034
|
tagOwnerShapeChecks += 1;
|
|
2026
2035
|
const rows = db.prepare(TAG_OWNER_APPENDED_WITH_SHAPE_SQL).all(cached.globalLastRowId, sessionId, tagIdentityRevisionKey(sessionId), sessionId);
|
|
@@ -2061,6 +2070,11 @@ function readTagOwnerSummary(db, sessionId, proseRatio, extraRatios = []) {
|
|
|
2061
2070
|
rows.push(...page);
|
|
2062
2071
|
}
|
|
2063
2072
|
}
|
|
2073
|
+
if (!captureInitialTagOwnerRevision(db, sessionId, cached, rows.length)) {
|
|
2074
|
+
if (offThreadOnly)
|
|
2075
|
+
throw new TagOwnerSummaryNotReady;
|
|
2076
|
+
rows = null;
|
|
2077
|
+
}
|
|
2064
2078
|
} else {
|
|
2065
2079
|
if (offThreadOnly)
|
|
2066
2080
|
db.exec("BEGIN");
|
|
@@ -2193,7 +2207,7 @@ function getTagNumberByMessageIdStatement(db) {
|
|
|
2193
2207
|
function getAssignableTagNumberByMessageIdStatement(db) {
|
|
2194
2208
|
let stmt = getAssignableTagNumberByMessageIdStatements.get(db);
|
|
2195
2209
|
if (!stmt) {
|
|
2196
|
-
stmt = db.prepare(`SELECT tag_number FROM tags
|
|
2210
|
+
stmt = db.prepare(`SELECT tag_number FROM tags INDEXED BY idx_tags_session_message_id
|
|
2197
2211
|
WHERE session_id = ?
|
|
2198
2212
|
AND message_id = ?
|
|
2199
2213
|
AND NOT (
|
|
@@ -2258,30 +2272,23 @@ function updateTagStatus2(db, sessionId, tagId, status) {
|
|
|
2258
2272
|
getUpdateTagStatusStatement(db).run(status, sessionId, tagId);
|
|
2259
2273
|
}
|
|
2260
2274
|
var inertWhitespaceStatements = new WeakMap;
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
}
|
|
2279
|
-
const rows = db.prepare(`SELECT tag_number AS tagNumber, entry_fingerprint AS entryFingerprint
|
|
2280
|
-
FROM tags
|
|
2281
|
-
WHERE session_id = ?
|
|
2282
|
-
AND type = 'message'
|
|
2283
|
-
AND status = 'compacted'
|
|
2284
|
-
AND entry_fingerprint LIKE ?`).all(sessionId, `${WHITESPACE_ASSISTANT_INERT_FINGERPRINT_PREFIX}%`);
|
|
2275
|
+
var inertWhitespaceByNumberStatements = new WeakMap;
|
|
2276
|
+
function getInertWhitespaceAssistantTagsByNumbers2(db, sessionId, tagNumbers) {
|
|
2277
|
+
if (tagNumbers.length === 0)
|
|
2278
|
+
return [];
|
|
2279
|
+
let statement = inertWhitespaceByNumberStatements.get(db);
|
|
2280
|
+
if (!statement) {
|
|
2281
|
+
statement = db.prepare(`SELECT tags.tag_number AS tagNumber, tags.entry_fingerprint AS entryFingerprint
|
|
2282
|
+
FROM json_each(?) AS wanted CROSS JOIN tags
|
|
2283
|
+
WHERE tags.session_id = ?
|
|
2284
|
+
AND tags.tag_number = wanted.value
|
|
2285
|
+
AND tags.type = 'message'
|
|
2286
|
+
AND tags.status = 'compacted'
|
|
2287
|
+
AND tags.entry_fingerprint LIKE ?
|
|
2288
|
+
ORDER BY tags.tag_number, tags.id`);
|
|
2289
|
+
inertWhitespaceByNumberStatements.set(db, statement);
|
|
2290
|
+
}
|
|
2291
|
+
const rows = statement.all(JSON.stringify([...new Set(tagNumbers)]), sessionId, `${WHITESPACE_ASSISTANT_INERT_FINGERPRINT_PREFIX}%`);
|
|
2285
2292
|
return rows.flatMap((row) => {
|
|
2286
2293
|
const contentId = row.entryFingerprint.slice(WHITESPACE_ASSISTANT_INERT_FINGERPRINT_PREFIX.length);
|
|
2287
2294
|
return contentId.length > 0 ? [{ tagNumber: row.tagNumber, contentId }] : [];
|
|
@@ -2727,7 +2734,8 @@ function markTagsCompactedByMessageIds2(db, sessionId, messageIds, eligibleTagNu
|
|
|
2727
2734
|
SELECT value AS source_id, lower(value) AS folded_id FROM json_each(?)
|
|
2728
2735
|
)
|
|
2729
2736
|
SELECT id, tag_number, message_id, tool_owner_message_id FROM tags INDEXED BY ${tagOrderConstraintIndex(db)}
|
|
2730
|
-
WHERE session_id = ? AND
|
|
2737
|
+
WHERE session_id = ? ${eligibleTagNumbers ? "AND tag_number IN (SELECT value FROM json_each(?))" : ""}
|
|
2738
|
+
AND status IN ('active', 'dropped') AND (
|
|
2731
2739
|
message_id IN (SELECT source_id FROM ids)
|
|
2732
2740
|
OR tool_owner_message_id IN (SELECT source_id FROM ids)
|
|
2733
2741
|
OR (instr(lower(message_id), ':p') > 0 AND
|
|
@@ -2736,7 +2744,7 @@ function markTagsCompactedByMessageIds2(db, sessionId, messageIds, eligibleTagNu
|
|
|
2736
2744
|
lower(substr(message_id, 1, instr(lower(message_id), ':file') - 1)) IN (SELECT folded_id FROM ids))
|
|
2737
2745
|
OR (? AND instr(message_id, ':') > 0)
|
|
2738
2746
|
OR ?
|
|
2739
|
-
)`).all(JSON.stringify(Array.from(ids)), sessionId, Array.from(ids).some((id) => id.includes(":")) ? 1 : 0, nulPrefixes.size > 0 ? 1 : 0);
|
|
2747
|
+
)`).all(JSON.stringify(Array.from(ids)), sessionId, ...eligibleTagNumbers ? [JSON.stringify([...eligibleTagNumbers])] : [], Array.from(ids).some((id) => id.includes(":")) ? 1 : 0, nulPrefixes.size > 0 ? 1 : 0);
|
|
2740
2748
|
const candidates = rows.filter((row) => (eligibleTagNumbers === undefined || eligibleTagNumbers.has(row.tag_number)) && matches(row.message_id, row.tool_owner_message_id));
|
|
2741
2749
|
if (candidates.length === 0)
|
|
2742
2750
|
return 0;
|
|
@@ -3095,4 +3103,4 @@ function deleteToolTagsByOwner(db, sessionId, ownerMsgId) {
|
|
|
3095
3103
|
return getDeleteToolTagsByOwnerStatement(db).all(sessionId, ownerMsgId).length;
|
|
3096
3104
|
}
|
|
3097
3105
|
|
|
3098
|
-
export { UNKNOWN_FIT_RATIO, resolveDecisionCalibration, hasMeasuredDecisionCalibration, providerMass, localBudget, calibrationForModelKey, historyLocalBudget, adoptedProtectedToolsPolicy, protectedToolTagNumbers, protectedToolTokenCount, stripWellFormedLeadingTagPrefix, stripPersistedAssistantText, byteSize, stripTagPrefix, peelLeadingMcTagNotation, prependTag, isRecord, TEXT_TAG_IDENTITY_MARKER, contentTagOwnerMessageId, estimateImageTokensFromDataUrl, providerVisiblePart, providerVisibleMessage, 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, queuePendingOp, queuePendingDropForUnchangedTag, getPendingOps, getPendingOpsCount, clearPendingOps, removePendingOp, updateTagByteSize2, getRecentTagOwnerMessageIds2, getActiveTagTokenAggregate2, AGE_RECLAIM_MIN_TOKENS2, getOldestActiveUnprotectedToolTags2, getActiveToolTagsForAgeReclaim2, getTriggerTagTokenUpperBound2, getActiveTagTokenTotalsByMessage2, updateTagInputByteSize2, updateTagTokenCount2, getPersistedToolTagAccounting2, getAllStatusTagTokenTotalsFlat2, getReasoningTokenEstimatesByMessage2, tryGetReasoningTokenEstimatesByMessage2, getMaxTagNumberByOwnerMessage2, scanTagOwnerSummary2, scanTagOwnerDelta2, updateTagInputTokenCount2, tagTokenCountIsNull2, backfillTagTokenCounts2, insertTag2, updateTagStatus2,
|
|
3106
|
+
export { UNKNOWN_FIT_RATIO, resolveDecisionCalibration, hasMeasuredDecisionCalibration, providerMass, localBudget, calibrationForModelKey, historyLocalBudget, adoptedProtectedToolsPolicy, protectedToolTagNumbers, protectedToolTokenCount, stripWellFormedLeadingTagPrefix, stripPersistedAssistantText, byteSize, stripTagPrefix, peelLeadingMcTagNotation, prependTag, isRecord, TEXT_TAG_IDENTITY_MARKER, contentTagOwnerMessageId, estimateImageTokensFromDataUrl, providerVisiblePart, providerVisibleMessage, 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, queuePendingOp, queuePendingDropForUnchangedTag, getPendingOps, getPendingOpsCount, clearPendingOps, removePendingOp, updateTagByteSize2, getRecentTagOwnerMessageIds2, getActiveTagTokenAggregate2, AGE_RECLAIM_MIN_TOKENS2, getOldestActiveUnprotectedToolTags2, getActiveToolTagsForAgeReclaim2, getTriggerTagTokenUpperBound2, getActiveTagTokenTotalsByMessage2, updateTagInputByteSize2, updateTagTokenCount2, getPersistedToolTagAccounting2, getAllStatusTagTokenTotalsFlat2, getReasoningTokenEstimatesByMessage2, tryGetReasoningTokenEstimatesByMessage2, getMaxTagNumberByOwnerMessage2, scanTagOwnerSummary2, scanTagOwnerDelta2, updateTagInputTokenCount2, tagTokenCountIsNull2, backfillTagTokenCounts2, insertTag2, updateTagStatus2, getInertWhitespaceAssistantTagsByNumbers2, updateTagDropMode2, updateCavemanDepth2, updateTagMessageId2, hasPiFallbackMessageTags2, findAdoptableFallbackTags2, adoptFallbackTagMessageId2, foldShrunkPartTags2, hasPiFallbackToolOwnerTags2, findPiFallbackToolOwnerTags2, PiTagIdentityConflictError2, getPiMessageTagCandidates2, findPiTagIdentityConflict2, adoptPiFallbackToolOwnerTag2, adoptPiFallbackMessageTag2, markTagsCompactedByMessageIds2, deleteTagsByMessageId2, getMaxTagNumberBySession2, getTagNumberByMessageId2, getAssignableTagNumberByMessageId2, getMinMessageTagNumberForRawId2, deriveTagLoadFloor2, TAG_SELECT_COLUMNS2, getTagsBySession2, getActiveTagsBySession2, getTagsForPendingOperations2, getTagsByNumbers2, getNewestToolTagNumbers2, getDroppedTagsByNumbers2, getMaxDroppedTagNumber2, getTagById2, getTopNBySize2, getToolTagNumberByOwner2, getNullOwnerToolTag2, adoptNullOwnerToolTag2, getCandidateToolOwners2, pickNearestPriorOwner2 };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sessionLog2
|
|
3
|
-
} from "./index-
|
|
3
|
+
} from "./index-x3dcnxh0.js";
|
|
4
4
|
|
|
5
5
|
// ../plugin/src/shared/stable-json.ts
|
|
6
6
|
function stableStringify(value, seen = new WeakSet) {
|
|
@@ -415,12 +415,42 @@ function tagOrderConstraintIndex(db) {
|
|
|
415
415
|
|
|
416
416
|
// ../plugin/src/features/magic-context/storage-tag-identity-revision.ts
|
|
417
417
|
var TAG_IDENTITY_REVISION_PREFIX = "tag_identity_revision:";
|
|
418
|
+
var TAG_REVISION_PREFIX = "tag_revision:";
|
|
419
|
+
var TAG_TOMBSTONE_OWNER_PREFIX = "tag_revision_owner:";
|
|
420
|
+
var TAG_REVISION_INCARNATION_KEY = "tag_revision_incarnation";
|
|
421
|
+
var tagRevisionIncarnationSql = (value) => `CASE WHEN INSTR(${value}, ':') > 0 THEN SUBSTR(${value}, 1, INSTR(${value}, ':') - 1) ELSE '0' END`;
|
|
422
|
+
var tagRevisionCountSql = (value) => `CAST(CASE WHEN INSTR(${value}, ':') > 0 THEN SUBSTR(${value}, INSTR(${value}, ':') + 1) ELSE ${value} END AS INTEGER)`;
|
|
423
|
+
var ADVANCE = (delta = "1") => `CASE
|
|
424
|
+
WHEN ${tagRevisionCountSql("value")} <= 9223372036854775807 - ${delta}
|
|
425
|
+
THEN (${tagRevisionIncarnationSql("value")}) || ':' || CAST(${tagRevisionCountSql("value")} + ${delta} AS TEXT)
|
|
426
|
+
ELSE NULL END`;
|
|
427
|
+
function tagTombstoneOwnerRange(sessionId) {
|
|
428
|
+
const stem = `${TAG_TOMBSTONE_OWNER_PREFIX}${JSON.stringify(sessionId)}`;
|
|
429
|
+
return [`${stem}:`, `${stem};`];
|
|
430
|
+
}
|
|
431
|
+
function tagTombstoneOwnerKey(sessionId, harness) {
|
|
432
|
+
return `${tagTombstoneOwnerRange(sessionId)[0]}${harness}`;
|
|
433
|
+
}
|
|
434
|
+
function tagRevisionKey(sessionId) {
|
|
435
|
+
return `${TAG_REVISION_PREFIX}${sessionId}`;
|
|
436
|
+
}
|
|
418
437
|
function tagIdentityRevisionKey(sessionId) {
|
|
419
438
|
return `${TAG_IDENTITY_REVISION_PREFIX}${sessionId}`;
|
|
420
439
|
}
|
|
421
|
-
var BUMP = (session) => `INSERT INTO schema_migrations_meta (key, value)
|
|
422
|
-
VALUES ('${
|
|
423
|
-
ON CONFLICT(key) DO UPDATE SET value =
|
|
440
|
+
var BUMP = (session, prefix = TAG_IDENTITY_REVISION_PREFIX) => `INSERT INTO schema_migrations_meta (key, value)
|
|
441
|
+
VALUES ('${prefix}' || ${session}, '1')
|
|
442
|
+
ON CONFLICT(key) DO UPDATE SET value = ${ADVANCE()}`;
|
|
443
|
+
var TAG_INSERT_CONFLICT_ROWS = `SELECT id, session_id, tag_number FROM tags WHERE id = NEW.id
|
|
444
|
+
UNION SELECT id, session_id, tag_number FROM tags WHERE session_id = NEW.session_id AND tag_number = NEW.tag_number
|
|
445
|
+
UNION SELECT id, session_id, tag_number FROM tags
|
|
446
|
+
WHERE NEW.type = 'tool' AND NEW.tool_owner_message_id IS NOT NULL
|
|
447
|
+
AND type = 'tool' AND tool_owner_message_id IS NOT NULL
|
|
448
|
+
AND session_id = NEW.session_id AND message_id = NEW.message_id
|
|
449
|
+
AND tool_owner_message_id = NEW.tool_owner_message_id`;
|
|
450
|
+
var BUMP_INSERT_CONFLICTS = (prefix) => `INSERT INTO schema_migrations_meta (key, value)
|
|
451
|
+
SELECT '${prefix}' || session_id, CAST(COUNT(*) AS TEXT)
|
|
452
|
+
FROM (${TAG_INSERT_CONFLICT_ROWS}) GROUP BY session_id
|
|
453
|
+
ON CONFLICT(key) DO UPDATE SET value = ${ADVANCE("CAST(excluded.value AS INTEGER)")}`;
|
|
424
454
|
var TRIGGER_SQL = `CREATE TEMP TRIGGER IF NOT EXISTS mc_tag_identity_revision_au
|
|
425
455
|
AFTER UPDATE OF id, session_id, message_id, tag_number, type, tool_owner_message_id, reasoning_token_count
|
|
426
456
|
ON main.tags
|
|
@@ -429,15 +459,69 @@ var TRIGGER_SQL = `CREATE TEMP TRIGGER IF NOT EXISTS mc_tag_identity_revision_au
|
|
|
429
459
|
INSERT INTO schema_migrations_meta (key, value)
|
|
430
460
|
SELECT '${TAG_IDENTITY_REVISION_PREFIX}' || NEW.session_id, '1'
|
|
431
461
|
WHERE NEW.session_id IS NOT OLD.session_id
|
|
432
|
-
ON CONFLICT(key) DO UPDATE SET value =
|
|
462
|
+
ON CONFLICT(key) DO UPDATE SET value = ${ADVANCE()};
|
|
433
463
|
END`;
|
|
434
464
|
function installTagIdentityRevisionTrigger(db) {
|
|
465
|
+
db.exec(`DROP TRIGGER IF EXISTS temp.mc_tag_identity_revision_au;
|
|
466
|
+
DROP TRIGGER IF EXISTS temp.mc_tag_revision_bi;
|
|
467
|
+
DROP TRIGGER IF EXISTS temp.mc_tag_revision_ai;
|
|
468
|
+
DROP TRIGGER IF EXISTS temp.mc_tag_revision_au;
|
|
469
|
+
DROP TRIGGER IF EXISTS temp.mc_tag_revision_ad;
|
|
470
|
+
DROP TRIGGER IF EXISTS temp.mc_tag_revision_seed_ai;`);
|
|
471
|
+
db.exec(`CREATE TEMP TRIGGER mc_tag_revision_seed_ai AFTER INSERT ON main.schema_migrations_meta
|
|
472
|
+
WHEN INSTR(NEW.value, ':') = 0 AND (
|
|
473
|
+
SUBSTR(NEW.key, 1, ${TAG_REVISION_PREFIX.length}) = '${TAG_REVISION_PREFIX}'
|
|
474
|
+
OR SUBSTR(NEW.key, 1, ${TAG_IDENTITY_REVISION_PREFIX.length}) = '${TAG_IDENTITY_REVISION_PREFIX}')
|
|
475
|
+
BEGIN
|
|
476
|
+
INSERT INTO schema_migrations_meta (key, value) VALUES ('${TAG_REVISION_INCARNATION_KEY}', '1')
|
|
477
|
+
ON CONFLICT(key) DO UPDATE SET value = CAST(CASE
|
|
478
|
+
WHEN CAST(value AS INTEGER) < 9223372036854775807 THEN CAST(value AS INTEGER) + 1
|
|
479
|
+
ELSE NULL END AS TEXT);
|
|
480
|
+
UPDATE schema_migrations_meta SET value =
|
|
481
|
+
(SELECT value FROM schema_migrations_meta WHERE key = '${TAG_REVISION_INCARNATION_KEY}')
|
|
482
|
+
|| ':' || CAST(NEW.value AS TEXT) WHERE key = NEW.key;
|
|
483
|
+
INSERT INTO schema_migrations_meta (key, value)
|
|
484
|
+
SELECT '${TAG_REVISION_INCARNATION_KEY}', '1'
|
|
485
|
+
WHERE SUBSTR(NEW.key, 1, ${TAG_REVISION_PREFIX.length}) = '${TAG_REVISION_PREFIX}'
|
|
486
|
+
AND NOT EXISTS (SELECT 1 FROM schema_migrations_meta
|
|
487
|
+
WHERE key = '${TAG_IDENTITY_REVISION_PREFIX}' || SUBSTR(NEW.key, ${TAG_REVISION_PREFIX.length + 1}))
|
|
488
|
+
ON CONFLICT(key) DO UPDATE SET value = CAST(CASE
|
|
489
|
+
WHEN CAST(value AS INTEGER) < 9223372036854775807 THEN CAST(value AS INTEGER) + 1
|
|
490
|
+
ELSE NULL END AS TEXT);
|
|
491
|
+
INSERT INTO schema_migrations_meta (key, value)
|
|
492
|
+
SELECT '${TAG_IDENTITY_REVISION_PREFIX}' || SUBSTR(NEW.key, ${TAG_REVISION_PREFIX.length + 1}),
|
|
493
|
+
(SELECT value FROM schema_migrations_meta WHERE key = '${TAG_REVISION_INCARNATION_KEY}') || ':0'
|
|
494
|
+
WHERE SUBSTR(NEW.key, 1, ${TAG_REVISION_PREFIX.length}) = '${TAG_REVISION_PREFIX}'
|
|
495
|
+
AND NOT EXISTS (SELECT 1 FROM schema_migrations_meta
|
|
496
|
+
WHERE key = '${TAG_IDENTITY_REVISION_PREFIX}' || SUBSTR(NEW.key, ${TAG_REVISION_PREFIX.length + 1}));
|
|
497
|
+
END;`);
|
|
435
498
|
db.exec(TRIGGER_SQL);
|
|
499
|
+
db.exec(`CREATE TEMP TRIGGER IF NOT EXISTS mc_tag_revision_bi BEFORE INSERT ON main.tags BEGIN
|
|
500
|
+
${BUMP_INSERT_CONFLICTS(TAG_REVISION_PREFIX)};
|
|
501
|
+
${BUMP_INSERT_CONFLICTS(TAG_IDENTITY_REVISION_PREFIX)};
|
|
502
|
+
UPDATE session_meta SET tags_version = tags_version + 1
|
|
503
|
+
WHERE session_id IN (SELECT session_id FROM (${TAG_INSERT_CONFLICT_ROWS}));
|
|
504
|
+
END;`);
|
|
505
|
+
db.exec(`CREATE TEMP TRIGGER IF NOT EXISTS mc_tag_revision_ai AFTER INSERT ON main.tags BEGIN
|
|
506
|
+
${BUMP("NEW.session_id", TAG_REVISION_PREFIX)};
|
|
507
|
+
END;
|
|
508
|
+
CREATE TEMP TRIGGER IF NOT EXISTS mc_tag_revision_au AFTER UPDATE ON main.tags BEGIN
|
|
509
|
+
${BUMP("OLD.session_id", TAG_REVISION_PREFIX)};
|
|
510
|
+
INSERT INTO schema_migrations_meta (key, value)
|
|
511
|
+
SELECT '${TAG_REVISION_PREFIX}' || NEW.session_id, '1'
|
|
512
|
+
WHERE NEW.session_id IS NOT OLD.session_id
|
|
513
|
+
ON CONFLICT(key) DO UPDATE SET value = ${ADVANCE()};
|
|
514
|
+
END;
|
|
515
|
+
CREATE TEMP TRIGGER IF NOT EXISTS mc_tag_revision_ad AFTER DELETE ON main.tags BEGIN
|
|
516
|
+
${BUMP("OLD.session_id", TAG_REVISION_PREFIX)};
|
|
517
|
+
END;`);
|
|
436
518
|
}
|
|
437
519
|
function deleteTagIdentityRevisions(db, sessionIds) {
|
|
438
|
-
const statement = db.prepare(
|
|
439
|
-
|
|
440
|
-
|
|
520
|
+
const statement = db.prepare(`INSERT INTO schema_migrations_meta (key, value) VALUES (?, '1')
|
|
521
|
+
ON CONFLICT(key) DO UPDATE SET value = ${ADVANCE()}`);
|
|
522
|
+
for (const sessionId of sessionIds) {
|
|
523
|
+
statement.run(tagIdentityRevisionKey(sessionId));
|
|
524
|
+
}
|
|
441
525
|
}
|
|
442
526
|
|
|
443
|
-
export { stableStringify, closeQuietly, isKnownAutocommit, getTableColumnNames, ensureColumn, healAllNullColumns, observeTemporalDecisions, freezeTemporalDecisions, installV95PerfSchema, tagOrderConstraintIndex, tagIdentityRevisionKey, installTagIdentityRevisionTrigger, deleteTagIdentityRevisions };
|
|
527
|
+
export { stableStringify, closeQuietly, isKnownAutocommit, getTableColumnNames, ensureColumn, healAllNullColumns, observeTemporalDecisions, freezeTemporalDecisions, installV95PerfSchema, tagOrderConstraintIndex, TAG_TOMBSTONE_OWNER_PREFIX, tagRevisionIncarnationSql, tagRevisionCountSql, tagTombstoneOwnerRange, tagTombstoneOwnerKey, tagRevisionKey, tagIdentityRevisionKey, TAG_INSERT_CONFLICT_ROWS, installTagIdentityRevisionTrigger, deleteTagIdentityRevisions };
|