@cortexkit/pi-magic-context 0.49.29 → 0.49.31
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 +1 -1
- package/dist/chunk-embedding-write-worker.js +1 -1
- package/dist/{index-00p6t4nd.js → index-2nryd8ye.js} +62 -11
- package/dist/{index-yvb1cz6b.js → index-34e3mm36.js} +8 -2
- package/dist/{index-wcma874r.js → index-bpd654bz.js} +1 -1
- package/dist/{index-fp40yrsy.js → index-sr1ss4f8.js} +1 -1
- package/dist/{index-f1pcnedq.js → index-v40sm8q6.js} +113 -37
- package/dist/{index-9pfffeqj.js → index-xvqcqg0r.js} +1 -1
- package/dist/{index-vppykq05.js → index-yddeb86g.js} +1 -1
- package/dist/index.js +672 -150
- package/dist/{message-index-bounded-w10cy1s9.js → message-index-bounded-7aw556kv.js} +2 -2
- package/dist/migration-worker.js +1 -1
- package/dist/raw-ordinal-warmup-worker.js +2 -2
- package/dist/{read-session-chunk-cfq56m0y.js → read-session-chunk-xrymr0pp.js} +1 -1
- package/dist/{search-archive-yky3g10b.js → search-archive-5tmg1jyb.js} +2 -2
- package/dist/{search-pq1nqjp4.js → search-dcdmpc62.js} +3 -3
- package/dist/subagent-entry.js +6 -6
- package/dist/tag-snapshot-worker-pi.js +8 -5
- package/package.json +3 -1
|
@@ -28,7 +28,7 @@ var [
|
|
|
28
28
|
import("./embedding-cache-7rp4gqzr.js"),
|
|
29
29
|
import("./storage-memory-0ndn65fm.js"),
|
|
30
30
|
import("./project-embedding-registry-wwbhm9rf.js"),
|
|
31
|
-
import("./search-
|
|
31
|
+
import("./search-dcdmpc62.js"),
|
|
32
32
|
import("./compartment-chunk-embedding-pkk5beqp.js"),
|
|
33
33
|
import("./embedding-activity-ew6dshfd.js"),
|
|
34
34
|
import("./harness-9872e0ym.js"),
|
|
@@ -66,7 +66,7 @@ import {
|
|
|
66
66
|
visitRawSessionMessages2,
|
|
67
67
|
readRawSessionMessageById2,
|
|
68
68
|
readSessionChunk2
|
|
69
|
-
} from "./index-
|
|
69
|
+
} from "./index-34e3mm36.js";
|
|
70
70
|
import {
|
|
71
71
|
isRecord,
|
|
72
72
|
providerVisibleMessage,
|
|
@@ -106,7 +106,7 @@ import {
|
|
|
106
106
|
isPidAlive,
|
|
107
107
|
readProcessStartTime,
|
|
108
108
|
getErrorMessage
|
|
109
|
-
} from "./index-
|
|
109
|
+
} from "./index-xvqcqg0r.js";
|
|
110
110
|
import {
|
|
111
111
|
BoundedSessionMap,
|
|
112
112
|
resolveOpenCodeDbPath,
|
|
@@ -143,7 +143,7 @@ import {
|
|
|
143
143
|
} from "./index-0jykn0dw.js";
|
|
144
144
|
import {
|
|
145
145
|
getLastIndexedOrdinal
|
|
146
|
-
} from "./index-
|
|
146
|
+
} from "./index-yddeb86g.js";
|
|
147
147
|
import {
|
|
148
148
|
V2_MEMORY_CATEGORIES,
|
|
149
149
|
CATEGORY_PRIORITY,
|
|
@@ -180,7 +180,7 @@ import {
|
|
|
180
180
|
resolveMemoriesByIdsForSearch2,
|
|
181
181
|
unifiedSearch2,
|
|
182
182
|
formatSearchResults2
|
|
183
|
-
} from "./index-
|
|
183
|
+
} from "./index-bpd654bz.js";
|
|
184
184
|
import {
|
|
185
185
|
computeCueContentHash,
|
|
186
186
|
getMuralCueState,
|
|
@@ -211,7 +211,7 @@ import {
|
|
|
211
211
|
} from "./index-6wdwv3a6.js";
|
|
212
212
|
import {
|
|
213
213
|
renderSearchArchive2
|
|
214
|
-
} from "./index-
|
|
214
|
+
} from "./index-sr1ss4f8.js";
|
|
215
215
|
import {
|
|
216
216
|
computeNormalizedHash
|
|
217
217
|
} from "./index-9x1f96r8.js";
|
|
@@ -3391,9 +3391,10 @@ function closeConnection(connection) {
|
|
|
3391
3391
|
counters.readersClosed += 1;
|
|
3392
3392
|
}
|
|
3393
3393
|
}
|
|
3394
|
-
function messageTimesQuery(count) {
|
|
3394
|
+
function messageTimesQuery(count, withVersions = false) {
|
|
3395
3395
|
return `SELECT id, COALESCE(time_created, json_extract(data, '$.time.created')) AS created,
|
|
3396
3396
|
json_extract(data, '$.time.completed') AS completed
|
|
3397
|
+
${withVersions ? ", type, seq, time_created AS version_created, time_updated AS version_updated" : ""}
|
|
3397
3398
|
FROM session_message WHERE +session_id = ? AND id IN (${Array.from({ length: count }, () => "?").join(",")})`;
|
|
3398
3399
|
}
|
|
3399
3400
|
|
|
@@ -3618,16 +3619,46 @@ class V2StoreReader {
|
|
|
3618
3619
|
return row ? decode(row) : null;
|
|
3619
3620
|
});
|
|
3620
3621
|
}
|
|
3621
|
-
|
|
3622
|
-
const
|
|
3622
|
+
messageTimeVersions(sessionID, ids, span) {
|
|
3623
|
+
const versions = new Map;
|
|
3624
|
+
if (ids.length > 0 && span && span.last - span.first < ids.length * 2) {
|
|
3625
|
+
const wanted = new Set(ids);
|
|
3626
|
+
const rows = this.prepare(`SELECT id, type, seq, time_created AS created, time_updated AS updated
|
|
3627
|
+
FROM session_message WHERE session_id = ? AND seq >= ? AND seq <= ?`).all(sessionID, span.first, span.last);
|
|
3628
|
+
for (const row of rows)
|
|
3629
|
+
if (wanted.has(row.id))
|
|
3630
|
+
versions.set(row.id, row);
|
|
3631
|
+
for (const [id, version] of this.messageTimeVersions(sessionID, ids.filter((id) => !versions.has(id))))
|
|
3632
|
+
versions.set(id, version);
|
|
3633
|
+
return versions;
|
|
3634
|
+
}
|
|
3623
3635
|
for (let offset = 0;offset < ids.length; offset += 500) {
|
|
3624
3636
|
const batch = ids.slice(offset, offset + 500);
|
|
3625
|
-
const rows = this.prepare(
|
|
3637
|
+
const rows = this.prepare(`SELECT id, type, seq, time_created AS created, time_updated AS updated
|
|
3638
|
+
FROM session_message WHERE +session_id = ? AND id IN (${batch.map(() => "?").join(",")})`).all(sessionID, ...batch);
|
|
3626
3639
|
for (const row of rows)
|
|
3640
|
+
versions.set(row.id, row);
|
|
3641
|
+
}
|
|
3642
|
+
return versions;
|
|
3643
|
+
}
|
|
3644
|
+
messageTimes(sessionID, ids, versions) {
|
|
3645
|
+
const times = new Map;
|
|
3646
|
+
for (let offset = 0;offset < ids.length; offset += 500) {
|
|
3647
|
+
const batch = ids.slice(offset, offset + 500);
|
|
3648
|
+
const rows = this.prepare(messageTimesQuery(batch.length, versions !== undefined)).all(sessionID, ...batch);
|
|
3649
|
+
for (const row of rows) {
|
|
3627
3650
|
times.set(row.id, {
|
|
3628
3651
|
created: typeof row.created === "number" ? row.created : undefined,
|
|
3629
3652
|
completed: typeof row.completed === "number" ? row.completed : undefined
|
|
3630
3653
|
});
|
|
3654
|
+
versions?.set(row.id, {
|
|
3655
|
+
id: row.id,
|
|
3656
|
+
type: row.type,
|
|
3657
|
+
seq: row.seq,
|
|
3658
|
+
created: row.version_created,
|
|
3659
|
+
updated: row.version_updated
|
|
3660
|
+
});
|
|
3661
|
+
}
|
|
3631
3662
|
}
|
|
3632
3663
|
return times;
|
|
3633
3664
|
}
|
|
@@ -6300,6 +6331,24 @@ function freezePiContentDecision(db, sessionId, kind, messageId) {
|
|
|
6300
6331
|
// ../plugin/src/features/magic-context/storage-native-replay.ts
|
|
6301
6332
|
var NATIVE_TOOL_INPUTS = "native tool inputs";
|
|
6302
6333
|
var NATIVE_REASONING_IDS = "native reasoning ids";
|
|
6334
|
+
var nativeWriteBarriers = new WeakMap;
|
|
6335
|
+
function withNativeReplayWriteBarrier(db, sessionId, beforeWrite, edit) {
|
|
6336
|
+
let sessions = nativeWriteBarriers.get(db);
|
|
6337
|
+
if (!sessions) {
|
|
6338
|
+
sessions = new Map;
|
|
6339
|
+
nativeWriteBarriers.set(db, sessions);
|
|
6340
|
+
}
|
|
6341
|
+
const prior = sessions.get(sessionId);
|
|
6342
|
+
sessions.set(sessionId, beforeWrite);
|
|
6343
|
+
try {
|
|
6344
|
+
return edit();
|
|
6345
|
+
} finally {
|
|
6346
|
+
if (prior)
|
|
6347
|
+
sessions.set(sessionId, prior);
|
|
6348
|
+
else
|
|
6349
|
+
sessions.delete(sessionId);
|
|
6350
|
+
}
|
|
6351
|
+
}
|
|
6303
6352
|
function invalidPersistedReplayState(lane, sessionId) {
|
|
6304
6353
|
return new Error(`invalid persisted ${lane} state for session ${sessionId}`);
|
|
6305
6354
|
}
|
|
@@ -6384,6 +6433,7 @@ function saveNativeToolInputs(db, sessionId, inputs) {
|
|
|
6384
6433
|
}
|
|
6385
6434
|
if (requested.size === 0)
|
|
6386
6435
|
return;
|
|
6436
|
+
nativeWriteBarriers.get(db)?.get(sessionId)?.();
|
|
6387
6437
|
const persisted = updateReplayDocument(db, sessionId, (doc) => {
|
|
6388
6438
|
const current = parseNativeReplayState(doc, sessionId);
|
|
6389
6439
|
let changed = false;
|
|
@@ -6410,6 +6460,7 @@ function addNativeReasoningIds(db, sessionId, ids) {
|
|
|
6410
6460
|
}
|
|
6411
6461
|
if (requested.size === 0)
|
|
6412
6462
|
return;
|
|
6463
|
+
nativeWriteBarriers.get(db)?.get(sessionId)?.();
|
|
6413
6464
|
const persisted = updateReplayDocument(db, sessionId, (doc) => {
|
|
6414
6465
|
const current = parseNativeReplayState(doc, sessionId);
|
|
6415
6466
|
let changed = false;
|
|
@@ -11198,7 +11249,7 @@ async function ensureProjectRegisteredFromPiDirectory(directory, db, options = {
|
|
|
11198
11249
|
registrationFingerprintsByDatabase.set(db, registrationFingerprints);
|
|
11199
11250
|
}
|
|
11200
11251
|
const cached = registrationFingerprints.get(projectIdentity);
|
|
11201
|
-
if (cached && configFingerprint(cached.paths) === cached.fingerprint) {
|
|
11252
|
+
if (!options.preflightLocalPooling && cached && configFingerprint(cached.paths) === cached.fingerprint) {
|
|
11202
11253
|
await drainProjectEmbeddingIdentityMaintenance2(db, projectIdentity);
|
|
11203
11254
|
return;
|
|
11204
11255
|
}
|
|
@@ -14890,4 +14941,4 @@ function registerMagicContextTools(pi, opts) {
|
|
|
14890
14941
|
}
|
|
14891
14942
|
}
|
|
14892
14943
|
|
|
14893
|
-
export { COMPACTION_ENABLED_PATH, isDreamerRunnable, isCompactionEnabled, isCommitRetentionPaused, copyCommitRetentionRecovery, formatConfigParseStatusLine, formatConfigParseNotice, claimConfigParseFailuresOnce, parseJsoncRecovering, detectConfigFile, OPENCODE_OUTPUT_CAP, MIN_PLAUSIBLE_CONTEXT_LIMIT, catalogOutputReserve, deriveWindowGeometry, hasTrustedAbsoluteWall, applyProvenInputFloor, formatWindowDerivationLine, formatWindowSource, isSaneLimit, resolveOutputReserve, getSdkWindowGeometry, getSdkContextLimit, getSdkOutputLimit, getSdkInputLimit, cortexKitUserConfigBasePath, cortexKitProjectConfigBasePath, migrateMagicContextConfigLocations, getProtectedTokensTierOverrides, LkgRecoveryFenceError, clearLkgFenceProcessState, lkgFenceRequiresRebuild, lkgRecoveryFenceUnclean, ownsLkgDirtyFence, invalidateCleanLkgRecoveryFence, markLkgRecoveryDirty, rememberUnpublishedAutoSearchNoHint, getUnpublishedAutoSearchNoHint, forgetUnpublishedAutoSearchNoHint, registerAutoSearchWork, cancelAutoSearchWork, readSessionActivity, observeSessionActivity, backfillSessionActivity, readSessionMeta, getOrCreateSessionMeta, updateSessionMeta, advanceToolReclaimWatermark, retryPendingSessionCleanups, retryPendingRustSessionCleanupsForProject, COMPARTMENT_LEASE_RENEWAL_MS, acquireCompartmentLease, renewCompartmentLease, releaseCompartmentLease, releaseCompartmentLeaseBestEffort, isCompartmentLeaseHeld, isNoContentCompartment, HAS_COMPARTMENT_CONTENT_SQL, queueM0Mutation, getMaxM0MutationId, getCompartments, getLastCompartmentEndMessage, getLastCompartmentEndMessageId, getCompartmentsByEndMessageId, appendCompartments, saveRecompStagingPass, getRecompStaging, clearRecompStaging, getRecompPartialRange, setRecompPartialRange, escapeXmlAttr, escapeXmlContent, getUncoveredCompartmentEndThrough, isPartialCompartmentEnd, readProjectDocsCanonical, providerResponseFailed, isSuccessfulProviderCompletion, requestPendingMaterialization, pendingMaterializationOrigin, hasPendingMaterializationOrigin, clearPendingMaterialization, recordSystemRefreshOwnership, recordSystemPromptForRequest, recordHeldHeadForRequest, bindSystemPromptResponse, acknowledgeSystemPromptDelivery, deferDeliveredSystemRefresh, clearSystemPromptDelivery, saveLkgSlotToDb, loadPersistedLkgSlot, drainStaleLkgSlots, createDbLkgPersistence, replayLkg, registerLkgPersistence, LKG_SNAPSHOT_ARRAY, LKG_SNAPSHOT_OBJECT, LKG_SNAPSHOT_KEY, LKG_SNAPSHOT_STRING, LKG_SNAPSHOT_NUMBER, LKG_SNAPSHOT_BOOLEAN, LKG_SNAPSHOT_NULL, LKG_SNAPSHOT_UNDEFINED, contentSnapshotValue, signatureForFields, lkgContentFields, lkgContentDigestFromFields, isLegacyLkgDigest, legacyLkgDigestFromFields, lkgFieldsMatchDigest, exactReusablePrefix, incrementalLkgContentDigests, lkgSlotRejection, captureSlot, getInMemorySlot, getSlot, dropSlot, TOOL_SWEEP_SCOPED_MARKER, encodePiContentDecision, decodePiContentDecision, getPiContentDecisions, freezePiContentDecision, getNativeReplayState, saveNativeToolInputs, addNativeReasoningIds, copySessionStateForClone, externalHistorianFailureReason, subprocessExitHistorianFailureReason, countHistorianRuns, recordHistorianRun, summarizeImportance, tallyFactsByCategory, queueMemoryMutation, getMemoryMutationsForRender, getMemoryMutationsForRenderByProjects, getMaxMemoryMutationId, getMaxMemoryMutationIdForProjects, GLOBAL_USER_PROFILE_PROJECT_PATH, getProjectState, bumpProjectUserProfileVersion, saveSourceContent, getSourceContents, recordSubagentInvocation, getLatestHistorianInvocationId, noteTouchedAt, noteNudgePickIndex, formatNoteNudge, systemPromptFingerprint, createPromptSurfaceRuntime, createPromptSurfaceGuidanceEpochCache, SYNTH_USER_ID_PREFIX, resolvePiStableId, resolvePiRealStableId, isPiContentFallbackId, isPiIndexFallbackId, piContentFallbackIds, readPiSessionSnapshot, readPiSessionMessages, readPiSessionMessagePage, findRestartModelSeedFromBranch, iterateEntriesToRawMessageRange, iterateAsyncEntriesToRawMessageRange, convertEntriesToRawMessages, convertPiAssistantEntryById, convertEntriesToRawMessagePage, countPiRawMessages, USER_MEMORY_CANDIDATE_TTL_MS, insertUserMemoryCandidates, getUserMemoryCandidates, deleteUserMemoryCandidates, pruneExpiredUserMemoryCandidates, insertUserMemory, getActiveUserMemories, updateUserMemoryContent, dismissUserMemory, getTaskScheduleState, getFailingDreamTasks, getSkippedDreamTasks, getMostRecentTaskRunAt, pruneNonCanonicalTaskRows, deleteTaskScheduleRowsForProject, seedTaskScheduleState, writeTaskScheduleState, isRetrospectiveWindowProcessed, recordRetrospectiveWindowProcessed, curateCategoryForMemoryCategory, peekCurateCategoryScope, beginCurateCategoryRun, curateTaskStateAfterSuccess, MEMORY_MURAL_BLOCK, buildMagicContextSection, resolveMuralWire, updateCompactionMarkerAfterPublication, COMPARTMENT_RENDER_EPOCH, MEMORY_RENDER_FORMAT_EPOCH, encodeCachedM0UpgradeIdentity, decodeCachedM0UpgradeIdentity, withCachedM0MemoryIds, readCachedM0MemoryIds, renderBudgetIdentityChanged, renderedBudgetSnapshot, renderedBudgetShrinkReason, DEFAULT_HISTORY_BUDGET_TOKENS, renderCompartmentAtTier, renderDecayedCompartments, extractM0Block, TEMPORAL_MARKER_PATTERN, TEMPORAL_MARKER_REPLAY_PATTERN, temporalMarkerPrefix, renderUserProfileContent, clearInjectionCache, getVisibleMemoryIds, orderHistorianMemories, renderHistorianMemoryBlock, DEFAULT_MEMORY_BUDGET_TOKENS, DEFAULT_USER_PROFILE_BUDGET_TOKENS, trimMemoriesToBudgetV2, trimWorkspaceMemoriesToBudgetV2, trimUserMemoriesToBudget, renderMemoryBlockV2, stripMemoryMuralBlock, resetPrefixTrimFallbackState, isDirectiveShapedProjectRule, takeCurateSafetyRefusalCount, wakePlaneStatus, loadPiConfig, loadPiConfigDetailed, unregisterPiProjectEmbeddings, ensureProjectRegisteredFromPiDirectory, neutralizeOmpMentions, restoreOmpMentions, resolvePiHarnessDetection, resolvePiHarnessKind, resolvePiOrdinalAlignment, piRawOrdinalOffsetSource, resolvePiOrdinalAlignmentForContext, isPiOrdinalAlignmentUnanchored, clearPiOrdinalAlignmentSession, rememberTodowriteToolCallTodos, parseTodos, setTodoSnapshot, registerTodoOverlay, registerTodoStateLifecycle, syncCtxMemoryToolEnabled, registerMagicContextTools };
|
|
14944
|
+
export { COMPACTION_ENABLED_PATH, isDreamerRunnable, isCompactionEnabled, isCommitRetentionPaused, copyCommitRetentionRecovery, formatConfigParseStatusLine, formatConfigParseNotice, claimConfigParseFailuresOnce, parseJsoncRecovering, detectConfigFile, OPENCODE_OUTPUT_CAP, MIN_PLAUSIBLE_CONTEXT_LIMIT, catalogOutputReserve, deriveWindowGeometry, hasTrustedAbsoluteWall, applyProvenInputFloor, formatWindowDerivationLine, formatWindowSource, isSaneLimit, resolveOutputReserve, getSdkWindowGeometry, getSdkContextLimit, getSdkOutputLimit, getSdkInputLimit, cortexKitUserConfigBasePath, cortexKitProjectConfigBasePath, migrateMagicContextConfigLocations, getProtectedTokensTierOverrides, LkgRecoveryFenceError, clearLkgFenceProcessState, lkgFenceRequiresRebuild, lkgRecoveryFenceUnclean, ownsLkgDirtyFence, invalidateCleanLkgRecoveryFence, markLkgRecoveryDirty, rememberUnpublishedAutoSearchNoHint, getUnpublishedAutoSearchNoHint, forgetUnpublishedAutoSearchNoHint, registerAutoSearchWork, cancelAutoSearchWork, readSessionActivity, observeSessionActivity, backfillSessionActivity, readSessionMeta, getOrCreateSessionMeta, updateSessionMeta, advanceToolReclaimWatermark, retryPendingSessionCleanups, retryPendingRustSessionCleanupsForProject, COMPARTMENT_LEASE_RENEWAL_MS, acquireCompartmentLease, renewCompartmentLease, releaseCompartmentLease, releaseCompartmentLeaseBestEffort, isCompartmentLeaseHeld, isNoContentCompartment, HAS_COMPARTMENT_CONTENT_SQL, queueM0Mutation, getMaxM0MutationId, getCompartments, getLastCompartmentEndMessage, getLastCompartmentEndMessageId, getCompartmentsByEndMessageId, appendCompartments, saveRecompStagingPass, getRecompStaging, clearRecompStaging, getRecompPartialRange, setRecompPartialRange, escapeXmlAttr, escapeXmlContent, getUncoveredCompartmentEndThrough, isPartialCompartmentEnd, readProjectDocsCanonical, providerResponseFailed, isSuccessfulProviderCompletion, requestPendingMaterialization, pendingMaterializationOrigin, hasPendingMaterializationOrigin, clearPendingMaterialization, recordSystemRefreshOwnership, recordSystemPromptForRequest, recordHeldHeadForRequest, bindSystemPromptResponse, acknowledgeSystemPromptDelivery, deferDeliveredSystemRefresh, clearSystemPromptDelivery, saveLkgSlotToDb, loadPersistedLkgSlot, drainStaleLkgSlots, createDbLkgPersistence, replayLkg, registerLkgPersistence, LKG_SNAPSHOT_ARRAY, LKG_SNAPSHOT_OBJECT, LKG_SNAPSHOT_KEY, LKG_SNAPSHOT_STRING, LKG_SNAPSHOT_NUMBER, LKG_SNAPSHOT_BOOLEAN, LKG_SNAPSHOT_NULL, LKG_SNAPSHOT_UNDEFINED, contentSnapshotValue, signatureForFields, lkgContentFields, lkgContentDigestFromFields, isLegacyLkgDigest, legacyLkgDigestFromFields, lkgFieldsMatchDigest, exactReusablePrefix, incrementalLkgContentDigests, lkgSlotRejection, captureSlot, getInMemorySlot, getSlot, dropSlot, TOOL_SWEEP_SCOPED_MARKER, encodePiContentDecision, decodePiContentDecision, getPiContentDecisions, freezePiContentDecision, withNativeReplayWriteBarrier, getNativeReplayState, saveNativeToolInputs, addNativeReasoningIds, copySessionStateForClone, externalHistorianFailureReason, subprocessExitHistorianFailureReason, countHistorianRuns, recordHistorianRun, summarizeImportance, tallyFactsByCategory, queueMemoryMutation, getMemoryMutationsForRender, getMemoryMutationsForRenderByProjects, getMaxMemoryMutationId, getMaxMemoryMutationIdForProjects, GLOBAL_USER_PROFILE_PROJECT_PATH, getProjectState, bumpProjectUserProfileVersion, saveSourceContent, getSourceContents, recordSubagentInvocation, getLatestHistorianInvocationId, noteTouchedAt, noteNudgePickIndex, formatNoteNudge, systemPromptFingerprint, createPromptSurfaceRuntime, createPromptSurfaceGuidanceEpochCache, SYNTH_USER_ID_PREFIX, resolvePiStableId, resolvePiRealStableId, isPiContentFallbackId, isPiIndexFallbackId, piContentFallbackIds, readPiSessionSnapshot, readPiSessionMessages, readPiSessionMessagePage, findRestartModelSeedFromBranch, iterateEntriesToRawMessageRange, iterateAsyncEntriesToRawMessageRange, convertEntriesToRawMessages, convertPiAssistantEntryById, convertEntriesToRawMessagePage, countPiRawMessages, USER_MEMORY_CANDIDATE_TTL_MS, insertUserMemoryCandidates, getUserMemoryCandidates, deleteUserMemoryCandidates, pruneExpiredUserMemoryCandidates, insertUserMemory, getActiveUserMemories, updateUserMemoryContent, dismissUserMemory, getTaskScheduleState, getFailingDreamTasks, getSkippedDreamTasks, getMostRecentTaskRunAt, pruneNonCanonicalTaskRows, deleteTaskScheduleRowsForProject, seedTaskScheduleState, writeTaskScheduleState, isRetrospectiveWindowProcessed, recordRetrospectiveWindowProcessed, curateCategoryForMemoryCategory, peekCurateCategoryScope, beginCurateCategoryRun, curateTaskStateAfterSuccess, MEMORY_MURAL_BLOCK, buildMagicContextSection, resolveMuralWire, updateCompactionMarkerAfterPublication, COMPARTMENT_RENDER_EPOCH, MEMORY_RENDER_FORMAT_EPOCH, encodeCachedM0UpgradeIdentity, decodeCachedM0UpgradeIdentity, withCachedM0MemoryIds, readCachedM0MemoryIds, renderBudgetIdentityChanged, renderedBudgetSnapshot, renderedBudgetShrinkReason, DEFAULT_HISTORY_BUDGET_TOKENS, renderCompartmentAtTier, renderDecayedCompartments, extractM0Block, TEMPORAL_MARKER_PATTERN, TEMPORAL_MARKER_REPLAY_PATTERN, temporalMarkerPrefix, renderUserProfileContent, clearInjectionCache, getVisibleMemoryIds, orderHistorianMemories, renderHistorianMemoryBlock, DEFAULT_MEMORY_BUDGET_TOKENS, DEFAULT_USER_PROFILE_BUDGET_TOKENS, trimMemoriesToBudgetV2, trimWorkspaceMemoriesToBudgetV2, trimUserMemoriesToBudget, renderMemoryBlockV2, stripMemoryMuralBlock, resetPrefixTrimFallbackState, isDirectiveShapedProjectRule, takeCurateSafetyRefusalCount, wakePlaneStatus, loadPiConfig, loadPiConfigDetailed, unregisterPiProjectEmbeddings, ensureProjectRegisteredFromPiDirectory, neutralizeOmpMentions, restoreOmpMentions, resolvePiHarnessDetection, resolvePiHarnessKind, resolvePiOrdinalAlignment, piRawOrdinalOffsetSource, resolvePiOrdinalAlignmentForContext, isPiOrdinalAlignmentUnanchored, clearPiOrdinalAlignmentSession, rememberTodowriteToolCallTodos, parseTodos, setTodoSnapshot, registerTodoOverlay, registerTodoStateLifecycle, syncCtxMemoryToolEnabled, registerMagicContextTools };
|
|
@@ -4016,9 +4016,15 @@ function hasAnthropicReasoning(messages) {
|
|
|
4016
4016
|
});
|
|
4017
4017
|
}
|
|
4018
4018
|
|
|
4019
|
+
// ../plugin/src/shared/marker-only-text.ts
|
|
4020
|
+
var MARKER_ONLY_PATTERN = /^(?:(?:§\d+§|\[dropped\s*(?:\d+|§\d*§)?\]|\[cleared\])\s*)+$/;
|
|
4021
|
+
function isMarkerOnlyText(text) {
|
|
4022
|
+
const trimmed = text.trim();
|
|
4023
|
+
return trimmed.length > 0 && MARKER_ONLY_PATTERN.test(trimmed);
|
|
4024
|
+
}
|
|
4025
|
+
|
|
4019
4026
|
// ../plugin/src/hooks/magic-context/served-shape-repair.ts
|
|
4020
4027
|
var sources = new WeakMap;
|
|
4021
|
-
|
|
4022
4028
|
// ../plugin/src/hooks/magic-context/strip-content.ts
|
|
4023
4029
|
var METADATA_PART_TYPES = new Set([
|
|
4024
4030
|
"step-start",
|
|
@@ -5214,4 +5220,4 @@ function readRawSessionSeedTail2(sessionId, boundaryId, onQuery) {
|
|
|
5214
5220
|
});
|
|
5215
5221
|
}
|
|
5216
5222
|
|
|
5217
|
-
export { detectThinkingBindingMismatch, detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, MAX_EXECUTE_THRESHOLD, escalationBands, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, computeProtectionWindow, readEpochFloorSnapshot, getProtectionWindowForSession, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, isRustMarkerAdmissionFenced, ReplayDocumentError, readReplayEnvelope, readReplayDocument, updateReplayDocument, writeReplayDocument, isProviderOverflowFailClosedProven, getEmergencyRecoveryArmedAt, describeProtectedTailDrainBudgetSkip, loadProtectedTailMeta, markProtectedTailPolicyV3Seeded, recordProtectedTailPublicationFloor, recordProtectedTailNoEligibleHead, getWrapupInProgressState, isWrapupInProgress, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, EMERGENCY_DRAIN_FAILURE_BACKOFF_MS, getProtectedTailDrainBudgetSkip, reserveProtectedTailDrainTokens, clearEmergencyDrainLatch, recordHistorianDrainFailure, clearHistorianDrainFailure, rollbackProtectedTailDrainReservation, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, getChannel2NudgeClaim, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, recordOverflowDetected, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, COMPACTION_OFF_THINKING_FROZEN_PREFIX, getThinkingBindingRecoveryTarget, armThinkingBindingRecovery, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getProcessedImageStrippedIds, parseProcessedImageMarkers, serializeProcessedImageMarkers, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, setPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, logPiCompactionMarkerClear, getSessionsWithPendingPiMarker, setSessionWorkMetrics, getSessionWorkMetrics, resolveEpochFloorForPass, withReadOnlySessionDb, expandToolPart, askAnswerLines, retreatPastHostUnservedRows, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, invalidateTrueRawTokenCache, stripSystemInjection, isFilePart, hasUserAnswerMetadata, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, TOKEN_BUDGET_TOOL_REFUSAL, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, droppedInputMarker, createDroppedInputGuard, isEditTool, applyEditMarkerToInput, modelAcceptsEmptyContent, isAnthropicFamilyRoute, variantChangeBustsProviderCache, isInActiveAnthropicTurn, activeAnthropicTurnStart, hasAnthropicReasoning, findLatestAssistantReasoningMutationExemptMessage, DEFAULT_KEEP_REASONING_TOKENS, resolveKeepReasoningTokens, reasoningStepCost, reasoningBudgetCutoff, reasoningTextAndOpaque, opaqueThinkingCost, estimatePartImageTokens, SKELETON_REAL_INPUT_MAX_BYTES, toolInputStringBytes, resolveHostServedBoundaryId2, hasRawMessageProvider2, setRawMessageProvider2, setBoundedRawMessageProvider2, withRawMessageProvider2, cleanUserText2, withRawSessionMessageCache2, readRawSessionMessages2, readRawSessionMessagePage2, getRawSessionMessageOrdinalCount2, RAW_MESSAGE_VISIT_PAGE_SIZE2, visitRawSessionMessages2, visitRawSessionMessagesAsync2, readRawSessionMessageRange2, prepareRawSessionOrdinals2, primeTailRawMessageCache2, getCachedAbsoluteMessageCount2, primeInMemoryTailRawMessageCache2, readRawSessionMessageOrdinalPage2, getRawSessionStoredMessageCount2, readRawSessionMessageIdOrdinalsForRange2, readRawSessionMessageIdOrdinals2, readRawSessionMessagePartsById2, readRawSessionBoundaryEndpoints2, hasRawSessionMessageById2, readRawSessionMessageOrdinalById2, resolveHistorianChunkStart2, compareRawSessionMessageOrder2, readRawSessionMessageById2, getRawSessionMessageCount2, RAW_SESSION_TAG_KEY_PAGE_SIZE2, getRawSessionTagKeysThrough2, getLegacyProtectedTailStartOrdinal2, getProtectedTailStartOrdinal2, readSessionChunk2, getRawSessionMessageIdsThrough2, readRawSessionSeedTail2 };
|
|
5223
|
+
export { detectThinkingBindingMismatch, detectLatestTurnThinkingMismatch, isPrefixBoundThinkingModel, detectOverflow, MAX_EXECUTE_THRESHOLD, escalationBands, MERGED_REASONING_PARTS_PREFIX, decodeMergedReasoningParts, HYGIENE_PROVIDER_UNITS_VERSION, sessionDecisionCalibration, transitionSessionHygieneUnits, rowWindowMass, computeProtectionWindow, readEpochFloorSnapshot, getProtectionWindowForSession, SESSION_META_SELECT_COLUMNS, META_COLUMNS, BOOLEAN_META_KEYS, NULL_BIND_META_KEYS, isSessionMetaRow, getDefaultSessionMeta, ensureSessionMetaRow, toSessionMeta, persistCachedM0, clearCachedM0M1, isRustMarkerAdmissionFenced, ReplayDocumentError, readReplayEnvelope, readReplayDocument, updateReplayDocument, writeReplayDocument, isProviderOverflowFailClosedProven, getEmergencyRecoveryArmedAt, describeProtectedTailDrainBudgetSkip, loadProtectedTailMeta, markProtectedTailPolicyV3Seeded, recordProtectedTailPublicationFloor, recordProtectedTailNoEligibleHead, getWrapupInProgressState, isWrapupInProgress, acquireWrapupInProgress, updateWrapupInProgress, releaseWrapupInProgress, resolveCompactionModeRecord, getCompactionModeRecord, setCompactionModeRecord, EMERGENCY_DRAIN_FAILURE_BACKOFF_MS, getProtectedTailDrainBudgetSkip, reserveProtectedTailDrainTokens, clearEmergencyDrainLatch, recordHistorianDrainFailure, clearHistorianDrainFailure, rollbackProtectedTailDrainReservation, clearPersistedReasoningWatermark, getEmergencyInputSample, setEmergencyDropSample, clearEmergencyDropSample, getLastNudgeUndropped, setLastNudgeUndropped, getChannel1NudgeState, setChannel1NudgeState, markChannel1PostReduceGracePending, captureChannel1PostReduceGraceBaseline, getChannel2NudgeState, getChannel2NudgeClaim, setChannel2NudgeState, casChannel2NudgeState, claimChannel2NudgeState, casChannel2NudgeClaim, getPersistedNoteNudge, setPersistedNoteNudgeTrigger, setPersistedNoteNudgeTriggerMessageId, getNoteNudgeAnchors, getAutoSearchHintDecisions, deliverNoteNudgeAtomic, appendAutoSearchHintDecision, pruneNoteNudgeAnchors, queueAutoSearchHintDecisionRetirement, flushAutoSearchHintDecisionRetirement, getPersistedTodoSyntheticAnchor, setPersistedTodoSyntheticAnchor, clearPersistedTodoSyntheticAnchor, getNoteLastReadAt, setNoteLastReadAt, getHistorianFailureState, incrementHistorianFailure, clearHistorianFailureState, getOverflowState, recordOverflowDetected, clearEmergencyRecovery, clearDetectedContextLimit, getPersistedCompactionMarkerState, setPersistedCompactionMarkerState, parseStrippedPlaceholderState, serializeStrippedPlaceholderState, getStrippedPlaceholderIds, applyStrippedPlaceholderDelta, THINKING_BINDING_RECOVERY_FROZEN_PREFIX, THINKING_BINDING_STRIP_ORDER_END_MARKER, thinkingBindingRecoveryFrozenId, COMPACTION_OFF_THINKING_FROZEN_PREFIX, getThinkingBindingRecoveryTarget, armThinkingBindingRecovery, clearThinkingBindingRecoveryIf, getMergedReasoningStrippedIds, addMergedReasoningStrippedIds, getProcessedImageStrippedIds, parseProcessedImageMarkers, serializeProcessedImageMarkers, addProcessedImageStrippedIds, getPendingCompactionMarkerState, getCompactionMarkerHealth, loadPostprocessReplaySnapshot, clearPendingCompactionMarkerStateIf, getPendingPiCompactionMarkerState, setPendingPiCompactionMarkerState, clearPendingPiCompactionMarkerStateIf, logPiCompactionMarkerClear, getSessionsWithPendingPiMarker, setSessionWorkMetrics, getSessionWorkMetrics, resolveEpochFloorForPass, withReadOnlySessionDb, expandToolPart, askAnswerLines, retreatPastHostUnservedRows, completedToolArcCrossesBoundary, estimateTrueRawMessageTokens, buildToolArcs, fenceBoundaryForCompletedToolArcs, fenceBoundaryForToolArcs, buildTrueRawTokenIndex, computeRawRangeFingerprint, invalidateTrueRawTokenCache, stripSystemInjection, isFilePart, hasUserAnswerMetadata, DreamTokenBudgetExceeded, TOKEN_BUDGET_FINALIZE_MESSAGE, TOKEN_BUDGET_TOOL_REFUSAL, registerBudgetFinalizeChild, releaseBudgetFinalizeChild, createDreamTokenBudget, droppedInputMarker, createDroppedInputGuard, isEditTool, applyEditMarkerToInput, modelAcceptsEmptyContent, isAnthropicFamilyRoute, variantChangeBustsProviderCache, isInActiveAnthropicTurn, activeAnthropicTurnStart, hasAnthropicReasoning, isMarkerOnlyText, findLatestAssistantReasoningMutationExemptMessage, DEFAULT_KEEP_REASONING_TOKENS, resolveKeepReasoningTokens, reasoningStepCost, reasoningBudgetCutoff, reasoningTextAndOpaque, opaqueThinkingCost, estimatePartImageTokens, SKELETON_REAL_INPUT_MAX_BYTES, toolInputStringBytes, resolveHostServedBoundaryId2, hasRawMessageProvider2, setRawMessageProvider2, setBoundedRawMessageProvider2, withRawMessageProvider2, cleanUserText2, withRawSessionMessageCache2, readRawSessionMessages2, readRawSessionMessagePage2, getRawSessionMessageOrdinalCount2, RAW_MESSAGE_VISIT_PAGE_SIZE2, visitRawSessionMessages2, visitRawSessionMessagesAsync2, readRawSessionMessageRange2, prepareRawSessionOrdinals2, primeTailRawMessageCache2, getCachedAbsoluteMessageCount2, primeInMemoryTailRawMessageCache2, readRawSessionMessageOrdinalPage2, getRawSessionStoredMessageCount2, readRawSessionMessageIdOrdinalsForRange2, readRawSessionMessageIdOrdinals2, readRawSessionMessagePartsById2, readRawSessionBoundaryEndpoints2, hasRawSessionMessageById2, readRawSessionMessageOrdinalById2, resolveHistorianChunkStart2, compareRawSessionMessageOrder2, readRawSessionMessageById2, getRawSessionMessageCount2, RAW_SESSION_TAG_KEY_PAGE_SIZE2, getRawSessionTagKeysThrough2, getLegacyProtectedTailStartOrdinal2, getProtectedTailStartOrdinal2, readSessionChunk2, getRawSessionMessageIdsThrough2, readRawSessionSeedTail2 };
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
} from "./index-2qtx0q6h.js";
|
|
16
16
|
import {
|
|
17
17
|
createFailClosedBlockingError
|
|
18
|
-
} from "./index-
|
|
18
|
+
} from "./index-xvqcqg0r.js";
|
|
19
19
|
import {
|
|
20
20
|
createWorkerShutdown
|
|
21
21
|
} from "./index-54wmg4rj.js";
|
|
@@ -189,8 +189,8 @@ class PiTagHydrationError extends Error {
|
|
|
189
189
|
this.name = "PiTagHydrationError";
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
|
-
function createPiHydrationPacketConsumer(request, cached = [], byteLimit) {
|
|
193
|
-
const assembly = createPiTagSnapshotCandidate(cached, byteLimit);
|
|
192
|
+
function createPiHydrationPacketConsumer(request, cached = [], byteLimit, cachedFallback = []) {
|
|
193
|
+
const assembly = createPiTagSnapshotCandidate(cached, byteLimit, cachedFallback);
|
|
194
194
|
let sequence = 0;
|
|
195
195
|
let generation;
|
|
196
196
|
let busy = false;
|
|
@@ -347,7 +347,7 @@ function createPiHydrationPacketConsumer(request, cached = [], byteLimit) {
|
|
|
347
347
|
function startPiTagSnapshotWorker(request, options = {}) {
|
|
348
348
|
const entry = options.entry ?? new URL(import.meta.url.endsWith(".ts") ? "./tag-snapshot-worker-pi.ts" : "./tag-snapshot-worker-pi.js", import.meta.url);
|
|
349
349
|
const started = performance.now();
|
|
350
|
-
const consumer = createPiHydrationPacketConsumer(request, options.cached, options.byteLimit);
|
|
350
|
+
const consumer = createPiHydrationPacketConsumer(request, options.cached, options.byteLimit, options.cachedFallback);
|
|
351
351
|
const worker = inRootAsyncContext2(() => new Worker(entry, { workerData: request }));
|
|
352
352
|
const shutdown = createWorkerShutdown(worker, "pi-tag-snapshot", 1000);
|
|
353
353
|
let exited = false;
|
|
@@ -567,11 +567,13 @@ function createPiTagSnapshotReader(db) {
|
|
|
567
567
|
revisionPresent: total.present
|
|
568
568
|
};
|
|
569
569
|
};
|
|
570
|
-
const ready = (sessionId) => {
|
|
570
|
+
const ready = (sessionId, projection) => {
|
|
571
571
|
assertOutsideTransaction();
|
|
572
572
|
const cached = cache.get(sessionId);
|
|
573
573
|
if (!cached?.fallback)
|
|
574
574
|
return false;
|
|
575
|
+
if (cached.projection !== projection)
|
|
576
|
+
return false;
|
|
575
577
|
const revision = revisionReaders.get(db)?.(sessionId);
|
|
576
578
|
if (!revision || cached.foreignRevision !== revision[1])
|
|
577
579
|
return false;
|
|
@@ -583,17 +585,18 @@ function createPiTagSnapshotReader(db) {
|
|
|
583
585
|
if (current?.sessionId === sessionId)
|
|
584
586
|
current.cancel();
|
|
585
587
|
};
|
|
586
|
-
const load = (sessionId, kind) => inSnapshotRoot(async () => {
|
|
588
|
+
const load = (sessionId, kind, projection) => inSnapshotRoot(async () => {
|
|
587
589
|
if (closed)
|
|
588
590
|
throw new PiTagHydrationError("connection closed");
|
|
589
591
|
managed.add(sessionId);
|
|
590
|
-
if (ready(sessionId))
|
|
592
|
+
if (ready(sessionId, projection))
|
|
591
593
|
return;
|
|
592
594
|
if (current) {
|
|
593
595
|
if (current.sessionId === sessionId && !current.retryable && !current.preempted) {
|
|
594
596
|
if (kind === "turn")
|
|
595
597
|
current.kind = "turn";
|
|
596
|
-
|
|
598
|
+
if (current.projection === projection)
|
|
599
|
+
return current.result;
|
|
597
600
|
}
|
|
598
601
|
if (kind === "turn" && current.kind === "prewarm" && current.sessionId !== sessionId && !current.preempted) {
|
|
599
602
|
current.preempted = true;
|
|
@@ -603,30 +606,36 @@ function createPiTagSnapshotReader(db) {
|
|
|
603
606
|
await Promise.allSettled([current.result, current.released]);
|
|
604
607
|
if (epoch !== (sessionEpochs.get(sessionId) ?? 0))
|
|
605
608
|
throw new PiTagHydrationError("session hydration cancelled while queued", "cancelled");
|
|
606
|
-
return load(sessionId, kind);
|
|
609
|
+
return load(sessionId, kind, projection);
|
|
607
610
|
}
|
|
608
611
|
if (failedSession === sessionId && performance.now() < failedUntil)
|
|
609
612
|
throw lastFailure;
|
|
610
613
|
watch.run(sessionId);
|
|
611
614
|
const token = stamps(sessionId, ++jobId);
|
|
615
|
+
const cached = cache.get(sessionId);
|
|
616
|
+
if (cached && cached.projection !== projection) {
|
|
617
|
+
cache.delete(sessionId);
|
|
618
|
+
}
|
|
612
619
|
const previous = cache.get(sessionId);
|
|
613
620
|
const legacyFallbackOnly = previous && previous.foreignRevision === token.foreignRevision && (previous.legacyFallback || token.durableVersion - previous.durableVersion !== token.ownVersion - previous.ownVersion);
|
|
614
621
|
const path = getSqliteDatabasePath2(db);
|
|
615
|
-
const factory = workerFactories.get(db) ?? ((request, cached) => {
|
|
622
|
+
const factory = workerFactories.get(db) ?? ((request, cached, cachedFallback) => {
|
|
616
623
|
if (!path)
|
|
617
624
|
throw new PiTagHydrationError("read-only hydration requires a file-backed database");
|
|
618
|
-
return startPiTagSnapshotWorker({ ...request, path }, { cached });
|
|
625
|
+
return startPiTagSnapshotWorker({ ...request, path }, { cached, cachedFallback });
|
|
619
626
|
});
|
|
620
627
|
const worker = factory({
|
|
621
628
|
path: path ?? "",
|
|
622
629
|
sessionId,
|
|
623
630
|
connectionEpoch: epoch,
|
|
624
631
|
sessionEpoch: token.sessionEpoch,
|
|
625
|
-
jobId: token.jobId
|
|
626
|
-
|
|
632
|
+
jobId: token.jobId,
|
|
633
|
+
projection
|
|
634
|
+
}, previous?.tags ?? [], previous?.fallback ?? []);
|
|
627
635
|
const destination = {
|
|
628
636
|
sessionId,
|
|
629
637
|
kind,
|
|
638
|
+
projection,
|
|
630
639
|
result: Promise.resolve(),
|
|
631
640
|
released: worker.released,
|
|
632
641
|
cancel: worker.cancel
|
|
@@ -652,6 +661,7 @@ function createPiTagSnapshotReader(db) {
|
|
|
652
661
|
if (closed || current !== destination || !samePiTagSnapshotToken(token, live) || token.totalRevision !== live.totalRevision || generation.revision !== token.totalRevision || generation.durable !== token.durableVersion)
|
|
653
662
|
throw new PiTagHydrationError("owner generation or lifetime changed", "stale");
|
|
654
663
|
const snapshot = {
|
|
664
|
+
projection,
|
|
655
665
|
firstAllocationPending: live.revisionPresent ? undefined : candidate.tags.length === 0 && !db.prepare("SELECT 1 FROM tags WHERE session_id = ? LIMIT 1").get(sessionId) ? "empty" : "legacy",
|
|
656
666
|
revision: legacyFallbackOnly ? previous.revision : live.localRevision,
|
|
657
667
|
foreignRevision: live.foreignRevision,
|
|
@@ -678,15 +688,19 @@ function createPiTagSnapshotReader(db) {
|
|
|
678
688
|
}
|
|
679
689
|
cache.set(sessionId, snapshot);
|
|
680
690
|
}).catch((error) => {
|
|
681
|
-
const
|
|
691
|
+
const releaseCachedAllocations = previous && !legacyFallbackOnly && cache.get(sessionId) === previous && error instanceof PiTagHydrationError && error.message.includes("candidate memory limit exceeded");
|
|
692
|
+
if (releaseCachedAllocations)
|
|
693
|
+
cache.delete(sessionId);
|
|
694
|
+
const failure = releaseCachedAllocations ? new PiTagHydrationError("candidate memory limit exceeded with cached allocations; retrying without cache", "stale") : error;
|
|
695
|
+
const retryable = failure instanceof PiTagHydrationError && (failure.code === "stale" || failure.code === "cancelled");
|
|
682
696
|
if (retryable)
|
|
683
697
|
destination.retryable = true;
|
|
684
698
|
if (!destination.preempted && current === destination && token.sessionEpoch === (sessionEpochs.get(sessionId) ?? 0)) {
|
|
685
699
|
failedSession = sessionId;
|
|
686
|
-
lastFailure =
|
|
700
|
+
lastFailure = failure;
|
|
687
701
|
failedUntil = performance.now() + (retryable ? 0 : 500);
|
|
688
702
|
}
|
|
689
|
-
throw
|
|
703
|
+
throw failure;
|
|
690
704
|
});
|
|
691
705
|
Promise.allSettled([destination.result, worker.released]).then(() => {
|
|
692
706
|
if (current === destination)
|
|
@@ -759,7 +773,7 @@ function createPiTagSnapshotReader(db) {
|
|
|
759
773
|
const replacements = getTagsByNumbers2(db, sessionId, numbers);
|
|
760
774
|
for (const tag of replacements)
|
|
761
775
|
Object.freeze(tag);
|
|
762
|
-
snapshot.tags = mergeChangedRows(snapshot.tags, dirty, replacements);
|
|
776
|
+
snapshot.tags = mergeChangedRows(snapshot.tags, dirty, snapshot.projection === "pass" ? replacements.map(projectPiPassTag) : replacements);
|
|
763
777
|
snapshot.active = mergeChangedRows(snapshot.active, dirty, replacements.filter(isActive));
|
|
764
778
|
if (!numbers.every(Number.isSafeInteger)) {
|
|
765
779
|
snapshot.fallback = undefined;
|
|
@@ -787,7 +801,16 @@ function createPiTagSnapshotReader(db) {
|
|
|
787
801
|
throw new PiTagHydrationError("managed snapshot read inside a transaction");
|
|
788
802
|
if (!snapshot)
|
|
789
803
|
return getTagsBySession2(db, sessionId);
|
|
790
|
-
|
|
804
|
+
if (snapshot.projection === "pass") {
|
|
805
|
+
const before = stamps(sessionId, 0);
|
|
806
|
+
const tags = getTagsBySession2(db, sessionId);
|
|
807
|
+
const after = stamps(sessionId, 0);
|
|
808
|
+
if (!samePiTagSnapshotToken(before, after) || before.totalRevision !== after.totalRevision)
|
|
809
|
+
throw new PiTagHydrationError("full snapshot generation changed", "stale");
|
|
810
|
+
return borrowed ? tags.map((tag) => Object.freeze(tag)) : tags;
|
|
811
|
+
}
|
|
812
|
+
const full = snapshot.tags;
|
|
813
|
+
return borrowed ? full : full.map((tag) => ({ ...tag }));
|
|
791
814
|
};
|
|
792
815
|
entryReaders.set(db, sync);
|
|
793
816
|
fallbackReaders.set(db, (sessionId) => {
|
|
@@ -820,11 +843,28 @@ function createPiTagSnapshotReader(db) {
|
|
|
820
843
|
});
|
|
821
844
|
return read;
|
|
822
845
|
}
|
|
846
|
+
function projectPiPassTag(tag) {
|
|
847
|
+
if (tag.status === "active")
|
|
848
|
+
return tag;
|
|
849
|
+
return Object.freeze({
|
|
850
|
+
id: tag.id,
|
|
851
|
+
tagNumber: tag.tagNumber,
|
|
852
|
+
messageId: tag.messageId,
|
|
853
|
+
type: tag.type,
|
|
854
|
+
status: tag.status,
|
|
855
|
+
toolOwnerMessageId: tag.toolOwnerMessageId,
|
|
856
|
+
tokenCount: tag.tokenCount,
|
|
857
|
+
toolName: tag.toolName,
|
|
858
|
+
dropMode: tag.dropMode
|
|
859
|
+
});
|
|
860
|
+
}
|
|
823
861
|
var PI_FALLBACK_ROW_COLUMNS = "id, tag_number, type, message_id, tool_owner_message_id, entry_fingerprint";
|
|
824
862
|
var PI_FALLBACK_ROW_PREDICATE = `((type = 'message' AND message_id LIKE 'pi-msg-%')
|
|
825
863
|
OR (type = 'tool' AND tool_owner_message_id LIKE 'pi-msg-%'))`;
|
|
826
864
|
var isActive = (tag) => tag.status === "active";
|
|
827
865
|
function sameRow(left, right, keys) {
|
|
866
|
+
if (Object.keys(left).length !== keys.length)
|
|
867
|
+
return false;
|
|
828
868
|
for (const key of keys)
|
|
829
869
|
if (!Object.is(left[key], right[key]))
|
|
830
870
|
return false;
|
|
@@ -843,11 +883,25 @@ function candidateRowBytes(row, overhead) {
|
|
|
843
883
|
}
|
|
844
884
|
return bytes;
|
|
845
885
|
}
|
|
846
|
-
function
|
|
886
|
+
function passTagBytes(row) {
|
|
887
|
+
return candidateRowBytes(row, 48 + 24 * Object.keys(row).length);
|
|
888
|
+
}
|
|
889
|
+
function createPiTagSnapshotCandidate(cached = [], byteLimit = 128 * 1024 * 1024, cachedFallback = []) {
|
|
847
890
|
const tags = [];
|
|
848
891
|
const active = [];
|
|
849
892
|
const fallback = [];
|
|
850
|
-
let
|
|
893
|
+
let reusedBytes = 0;
|
|
894
|
+
for (const row of cached)
|
|
895
|
+
reusedBytes += passTagBytes(row) + 8 + (isActive(row) ? 8 : 0);
|
|
896
|
+
if (cached.length)
|
|
897
|
+
reusedBytes += 128;
|
|
898
|
+
for (const row of cachedFallback)
|
|
899
|
+
reusedBytes += candidateRowBytes(row, 192) + 8;
|
|
900
|
+
if (cachedFallback.length)
|
|
901
|
+
reusedBytes += 64;
|
|
902
|
+
let allocatedBytes = 192 + (cachedFallback.length ? 64 + cachedFallback.length * 48 : 0);
|
|
903
|
+
let estimatedBytes = reusedBytes + allocatedBytes;
|
|
904
|
+
const fallbackCache = cachedFallback.length && estimatedBytes <= byteLimit ? new Map(cachedFallback.map((row) => [row.id, row])) : undefined;
|
|
851
905
|
let oldIndex = 0;
|
|
852
906
|
let keys;
|
|
853
907
|
let tagsEnded = false;
|
|
@@ -857,8 +911,9 @@ function createPiTagSnapshotCandidate(cached = [], byteLimit = 128 * 1024 * 1024
|
|
|
857
911
|
failed = true;
|
|
858
912
|
throw new Error(`Pi tag hydration: ${reason}`);
|
|
859
913
|
};
|
|
860
|
-
const admit = (
|
|
861
|
-
|
|
914
|
+
const admit = (bytes) => {
|
|
915
|
+
allocatedBytes += bytes;
|
|
916
|
+
estimatedBytes = reusedBytes + allocatedBytes;
|
|
862
917
|
if (estimatedBytes > byteLimit)
|
|
863
918
|
reject("candidate memory limit exceeded");
|
|
864
919
|
};
|
|
@@ -872,8 +927,7 @@ function createPiTagSnapshotCandidate(cached = [], byteLimit = 128 * 1024 * 1024
|
|
|
872
927
|
const previous = tags.at(-1);
|
|
873
928
|
if (previous && (previous.tagNumber > row.tagNumber || previous.tagNumber === row.tagNumber && (previous.id ?? 0) >= (row.id ?? 0)))
|
|
874
929
|
reject("noncanonical tag order");
|
|
875
|
-
|
|
876
|
-
keys ??= Object.keys(row);
|
|
930
|
+
keys = Object.keys(row);
|
|
877
931
|
while (oldIndex < cached.length) {
|
|
878
932
|
const old = cached[oldIndex];
|
|
879
933
|
if (!old || old.tagNumber > row.tagNumber || old.tagNumber === row.tagNumber && (old.id ?? 0) >= (row.id ?? 0))
|
|
@@ -882,6 +936,7 @@ function createPiTagSnapshotCandidate(cached = [], byteLimit = 128 * 1024 * 1024
|
|
|
882
936
|
}
|
|
883
937
|
const old = cached[oldIndex];
|
|
884
938
|
const selected = old && old.id === row.id && sameRow(old, row, keys) ? old : row;
|
|
939
|
+
admit((selected === old ? 0 : passTagBytes(row)) + 8 + (isActive(selected) ? 8 : 0));
|
|
885
940
|
Object.freeze(selected);
|
|
886
941
|
tags.push(selected);
|
|
887
942
|
if (isActive(selected))
|
|
@@ -890,8 +945,11 @@ function createPiTagSnapshotCandidate(cached = [], byteLimit = 128 * 1024 * 1024
|
|
|
890
945
|
appendFallback(row) {
|
|
891
946
|
if (failed || fallbackEnded)
|
|
892
947
|
reject("fallback packet after end or failure");
|
|
893
|
-
|
|
894
|
-
|
|
948
|
+
const old = fallbackCache?.get(row.id);
|
|
949
|
+
const rowKeys = Object.keys(row);
|
|
950
|
+
const selected = old && Object.keys(old).length === rowKeys.length && rowKeys.every((key) => Object.is(old[key], row[key])) ? old : row;
|
|
951
|
+
admit((selected === old ? 0 : candidateRowBytes(row, 192)) + 8);
|
|
952
|
+
fallback.push(Object.freeze(selected));
|
|
895
953
|
},
|
|
896
954
|
end(stream) {
|
|
897
955
|
if (failed)
|
|
@@ -909,7 +967,16 @@ function createPiTagSnapshotCandidate(cached = [], byteLimit = 128 * 1024 * 1024
|
|
|
909
967
|
finish() {
|
|
910
968
|
if (failed || !tagsEnded || !fallbackEnded)
|
|
911
969
|
throw new Error("Pi tag hydration: incomplete candidate");
|
|
912
|
-
|
|
970
|
+
if (estimatedBytes > byteLimit)
|
|
971
|
+
reject("candidate memory limit exceeded");
|
|
972
|
+
return {
|
|
973
|
+
tags,
|
|
974
|
+
active,
|
|
975
|
+
fallback,
|
|
976
|
+
estimatedBytes,
|
|
977
|
+
allocatedBytes,
|
|
978
|
+
reusedBytes
|
|
979
|
+
};
|
|
913
980
|
}
|
|
914
981
|
};
|
|
915
982
|
}
|
|
@@ -961,15 +1028,24 @@ function mergeChangedRows(rows, dirty, replacements) {
|
|
|
961
1028
|
}
|
|
962
1029
|
merged.push(tag);
|
|
963
1030
|
}
|
|
964
|
-
|
|
1031
|
+
for (;index < replacements.length; index++) {
|
|
1032
|
+
const row = replacements[index];
|
|
1033
|
+
if (row)
|
|
1034
|
+
merged.push(row);
|
|
1035
|
+
}
|
|
965
1036
|
return merged;
|
|
966
1037
|
}
|
|
967
1038
|
var entryReaders = new WeakMap;
|
|
968
1039
|
var fallbackReaders = new WeakMap;
|
|
969
1040
|
var readers = new WeakMap;
|
|
970
1041
|
var revisionReaders = new WeakMap;
|
|
971
|
-
function
|
|
972
|
-
|
|
1042
|
+
function getPiPassTagSnapshotView(db, sessionId) {
|
|
1043
|
+
createPiTagSnapshotReader(db);
|
|
1044
|
+
const snapshot = entryReaders.get(db)?.(sessionId);
|
|
1045
|
+
if (snapshot?.projection === "pass")
|
|
1046
|
+
return snapshot.tags;
|
|
1047
|
+
const full = snapshot?.tags ?? getTagsBySession2(db, sessionId);
|
|
1048
|
+
return full.map(projectPiPassTag);
|
|
973
1049
|
}
|
|
974
1050
|
function getPiActiveTagSnapshotView(db, sessionId, passTags) {
|
|
975
1051
|
createPiTagSnapshotReader(db);
|
|
@@ -987,9 +1063,9 @@ var owners = new WeakMap;
|
|
|
987
1063
|
var workerFactories = new WeakMap;
|
|
988
1064
|
var activeJobs = new Map;
|
|
989
1065
|
var waitDeadlines = new WeakMap;
|
|
990
|
-
function prewarmPiTagSnapshot(db, sessionId) {
|
|
1066
|
+
function prewarmPiTagSnapshot(db, sessionId, projection) {
|
|
991
1067
|
createPiTagSnapshotReader(db);
|
|
992
|
-
owners.get(db)?.load(sessionId, "prewarm").catch(() => {});
|
|
1068
|
+
owners.get(db)?.load(sessionId, "prewarm", projection).catch(() => {});
|
|
993
1069
|
}
|
|
994
1070
|
function cancelPiTagSnapshotSession(sessionId) {
|
|
995
1071
|
for (const job of activeJobs.get(sessionId) ?? [])
|
|
@@ -1005,17 +1081,17 @@ function assertPiTagSnapshotReady(db, sessionId) {
|
|
|
1005
1081
|
createPiTagSnapshotReader(db);
|
|
1006
1082
|
const owner = owners.get(db);
|
|
1007
1083
|
owner?.manage(sessionId);
|
|
1008
|
-
if (!owner?.ready(sessionId))
|
|
1084
|
+
if (!owner?.ready(sessionId, "pass") && !owner?.ready(sessionId))
|
|
1009
1085
|
throw new PiTagHydrationError("tag snapshot is not ready; turn not sent, retry");
|
|
1010
1086
|
}
|
|
1011
|
-
function ensurePiTagSnapshotReady(db, sessionId, budget) {
|
|
1087
|
+
function ensurePiTagSnapshotReady(db, sessionId, budget, projection) {
|
|
1012
1088
|
budget.assert();
|
|
1013
1089
|
createPiTagSnapshotReader(db);
|
|
1014
1090
|
const owner = owners.get(db);
|
|
1015
1091
|
if (!owner)
|
|
1016
1092
|
throw new PiTagHydrationError("snapshot owner unavailable");
|
|
1017
1093
|
owner.manage(sessionId);
|
|
1018
|
-
if (owner.ready(sessionId))
|
|
1094
|
+
if (owner.ready(sessionId, projection))
|
|
1019
1095
|
return;
|
|
1020
1096
|
let deadline = waitDeadlines.get(budget);
|
|
1021
1097
|
if (deadline === undefined) {
|
|
@@ -1033,7 +1109,7 @@ function ensurePiTagSnapshotReady(db, sessionId, budget) {
|
|
|
1033
1109
|
const releaseNativeWaiter = owner.addNativeWaiter(() => budget.remainingOutcome() - PI_CONTEXT_BUDGET.completionReserveMs);
|
|
1034
1110
|
try {
|
|
1035
1111
|
await budget.wait(Promise.race([
|
|
1036
|
-
owner.load(sessionId, "turn"),
|
|
1112
|
+
owner.load(sessionId, "turn", projection),
|
|
1037
1113
|
new Promise((_, reject) => {
|
|
1038
1114
|
timer = setTimeout(() => reject(new PiTagHydrationError("remaining pass budget exhausted waiting for tag snapshot; turn not sent, retry", "deadline")), allowance);
|
|
1039
1115
|
})
|
|
@@ -1053,4 +1129,4 @@ function ensurePiTagSnapshotReady(db, sessionId, budget) {
|
|
|
1053
1129
|
})();
|
|
1054
1130
|
}
|
|
1055
1131
|
|
|
1056
|
-
export { PI_CONTEXT_BUDGET, PiContextDeadlineError, PiContextSupersededError, PiContextBudget, encodePiHydrationOperation, PiTagHydrationError, PI_FALLBACK_ROW_COLUMNS, PI_FALLBACK_ROW_PREDICATE,
|
|
1132
|
+
export { PI_CONTEXT_BUDGET, PiContextDeadlineError, PiContextSupersededError, PiContextBudget, encodePiHydrationOperation, PiTagHydrationError, projectPiPassTag, PI_FALLBACK_ROW_COLUMNS, PI_FALLBACK_ROW_PREDICATE, getPiPassTagSnapshotView, getPiActiveTagSnapshotView, readPiFallbackTagRows, prewarmPiTagSnapshot, cancelPiTagSnapshotSession, drainPiTagSnapshotSession, assertPiTagSnapshotReady, ensurePiTagSnapshotReady };
|
|
@@ -2003,7 +2003,7 @@ function finishDatabaseOpen(db, dbPath, explicitDbPath, latestSupportedVersion)
|
|
|
2003
2003
|
state.running = startMessageFtsRowidMapBackfill2(db, signal).then(async () => {
|
|
2004
2004
|
if (signal.aborted || !readsOpenCodeStore)
|
|
2005
2005
|
return;
|
|
2006
|
-
const { readRawSessionMessagePage, readRawSessionMessages } = await importPluginModule(() => import("./read-session-chunk-
|
|
2006
|
+
const { readRawSessionMessagePage, readRawSessionMessages } = await importPluginModule(() => import("./read-session-chunk-xrymr0pp.js"));
|
|
2007
2007
|
const { startMessageTimeBackfill } = await importPluginModule(() => import("./message-time-backfill-e3r8ddh1.js"));
|
|
2008
2008
|
if (signal.aborted)
|
|
2009
2009
|
return;
|