// Extracted graph load/persist and Authority routing orchestration helpers. // Dependencies are supplied by index.js/test harnesses through runtime. export function shouldUseAuthorityJobsImpl(runtime, config = null, kind = AUTHORITY_VECTOR_REBUILD_JOB_TYPE) { const graphPersistenceState = new Proxy({}, { get(_target, key) { return (runtime.getGraphPersistenceState?.() || {})[key]; }, set(_target, key, value) { const state = runtime.getGraphPersistenceState?.() || {}; state[key] = value; return true; }, }); let currentGraph = runtime.getCurrentGraph?.() || null; let extractionCount = runtime.getExtractionCount?.() || 0; let lastExtractedItems = runtime.getLastExtractedItems?.() || []; let lastRecalledItems = runtime.getLastRecalledItems?.() || []; let lastInjectionContent = runtime.getLastInjectionContent?.() || ""; let runtimeStatus = runtime.getRuntimeStatus?.(); let lastExtractionStatus = runtime.getLastExtractionStatus?.(); let lastVectorStatus = runtime.getLastVectorStatus?.(); let lastRecallStatus = runtime.getLastRecallStatus?.(); const AUTHORITY_VECTOR_REBUILD_JOB_TYPE = runtime.AUTHORITY_VECTOR_REBUILD_JOB_TYPE; const BmeDatabase = runtime.BmeDatabase; const GRAPH_LOAD_STATES = runtime.GRAPH_LOAD_STATES; const GRAPH_METADATA_KEY = runtime.GRAPH_METADATA_KEY; const allocateRequestedPersistRevision = runtime.allocateRequestedPersistRevision; const applyGraphLoadState = runtime.applyGraphLoadState; const applyIndexedDbSnapshotToRuntime = runtime.applyIndexedDbSnapshotToRuntime; const applyShadowSnapshotToRuntime = runtime.applyShadowSnapshotToRuntime; const buildBmeSyncRuntimeOptions = runtime.buildBmeSyncRuntimeOptions; const buildGraphFromSnapshot = runtime.buildGraphFromSnapshot; const buildGraphPersistResult = runtime.buildGraphPersistResult; const buildPersistenceEnvironment = runtime.buildPersistenceEnvironment; const buildLukerGraphCheckpointV2 = runtime.buildLukerGraphCheckpointV2; const buildRestoreSafetyChatId = runtime.buildRestoreSafetyChatId; const buildSnapshotFromGraph = runtime.buildSnapshotFromGraph; const buildVectorCollectionId = runtime.buildVectorCollectionId; const canPersistGraphToMetadataFallback = runtime.canPersistGraphToMetadataFallback; const canUseHostGraphChatStatePersistence = runtime.canUseHostGraphChatStatePersistence; const clearPendingGraphLoadRetry = runtime.clearPendingGraphLoadRetry; const cloneGraphForPersistence = runtime.cloneGraphForPersistence; const cloneGraphSnapshot = runtime.cloneGraphSnapshot; const cloneRuntimeDebugValue = runtime.cloneRuntimeDebugValue; const createEmptyGraph = runtime.createEmptyGraph; const createGraphLoadUiStatus = runtime.createGraphLoadUiStatus; const createPreferredGraphLocalStore = runtime.createPreferredGraphLocalStore; const createUiStatus = runtime.createUiStatus; const deserializeGraph = runtime.deserializeGraph; const detectIndexedDbSnapshotCommitMarkerMismatch = runtime.detectIndexedDbSnapshotCommitMarkerMismatch; const detectStaleIndexedDbSnapshotAgainstRuntime = runtime.detectStaleIndexedDbSnapshotAgainstRuntime; const ensureBmeChatManager = runtime.ensureBmeChatManager; const ensureCurrentGraphRuntimeState = runtime.ensureCurrentGraphRuntimeState; const exportAuthoritySqlSnapshotForCheckpoint = runtime.exportAuthoritySqlSnapshotForCheckpoint; const getAcceptedCommitMarkerRevision = runtime.getAcceptedCommitMarkerRevision; const getAuthorityRuntimeSnapshot = runtime.getAuthorityRuntimeSnapshot; const getChatMetadataIntegrity = runtime.getChatMetadataIntegrity; const getContext = runtime.getContext; const getCurrentChatId = runtime.getCurrentChatId; const getGraphPersistedRevision = runtime.getGraphPersistedRevision; const getGraphPersistenceMeta = runtime.getGraphPersistenceMeta; const getPreferredGraphLocalStorePresentationSync = runtime.getPreferredGraphLocalStorePresentationSync; const getRequestHeaders = runtime.getRequestHeaders; const getSettings = runtime.getSettings; const isAuthorityGraphStorePresentation = runtime.isAuthorityGraphStorePresentation; const isAuthorityJobTypeSupported = runtime.isAuthorityJobTypeSupported; const isAuthorityVectorConfig = runtime.isAuthorityVectorConfig; const isGraphEffectivelyEmpty = runtime.isGraphEffectivelyEmpty; const isIndexedDbSnapshotMeaningful = runtime.isIndexedDbSnapshotMeaningful; const loadGraphFromChat = runtime.loadGraphFromChat; const loadGraphFromIndexedDb = runtime.loadGraphFromIndexedDb; const normalizeAuthorityCapabilityState = runtime.normalizeAuthorityCapabilityState; const normalizeAuthorityJobConfig = runtime.normalizeAuthorityJobConfig; const normalizeAuthoritySettings = runtime.normalizeAuthoritySettings; const normalizeChatIdCandidate = runtime.normalizeChatIdCandidate; const normalizeGraphRuntimeState = runtime.normalizeGraphRuntimeState; const persistGraphToChatMetadata = runtime.persistGraphToChatMetadata; const persistGraphToConfiguredDurableTier = runtime.persistGraphToConfiguredDurableTier; const queueGraphPersist = runtime.queueGraphPersist; const readCachedIndexedDbSnapshot = runtime.readCachedIndexedDbSnapshot; const recordLocalPersistEarlyFailure = runtime.recordLocalPersistEarlyFailure; const recordPersistMismatchDiagnostic = runtime.recordPersistMismatchDiagnostic; const refreshPanelLiveState = runtime.refreshPanelLiveState; const refreshRuntimeGraphAfterSyncApplied = runtime.refreshRuntimeGraphAfterSyncApplied; const recordAuthorityBlobSnapshot = runtime.recordAuthorityBlobSnapshot; const rememberResolvedGraphIdentityAlias = runtime.rememberResolvedGraphIdentityAlias; const resolveCompatibleGraphShadowSnapshot = runtime.resolveCompatibleGraphShadowSnapshot; const resolveCurrentChatIdentity = runtime.resolveCurrentChatIdentity; const resolvePersistenceChatId = runtime.resolvePersistenceChatId; const resolvePreferredGraphLocalStorePresentation = runtime.resolvePreferredGraphLocalStorePresentation; const resolveSnapshotGraphStorePresentation = runtime.resolveSnapshotGraphStorePresentation; const restoreRecallUiStateFromPersistence = runtime.restoreRecallUiStateFromPersistence; const runAuthorityConsistencyAudit = runtime.runAuthorityConsistencyAudit; const scheduleGraphChatStateProbe = runtime.scheduleGraphChatStateProbe; const scheduleIndexedDbGraphProbe = runtime.scheduleIndexedDbGraphProbe; const schedulePersistedRecallMessageUiRefresh = runtime.schedulePersistedRecallMessageUiRefresh; const shouldPreferShadowSnapshotOverOfficial = runtime.shouldPreferShadowSnapshotOverOfficial; const shouldSyncGraphLoadFromLiveContext = runtime.shouldSyncGraphLoadFromLiveContext; const shouldUseAuthorityBlobCheckpoint = runtime.shouldUseAuthorityBlobCheckpoint; const shouldUseAuthorityGraphStore = runtime.shouldUseAuthorityGraphStore; const stampGraphPersistenceMeta = runtime.stampGraphPersistenceMeta; const syncCommitMarkerToPersistenceState = runtime.syncCommitMarkerToPersistenceState; const updateGraphPersistenceState = runtime.updateGraphPersistenceState; const writeAuthorityLukerCheckpointBlob = runtime.writeAuthorityLukerCheckpointBlob; const writeGraphShadowSnapshot = runtime.writeGraphShadowSnapshot; const console = runtime.console || globalThis.console; const settings = getSettings(); const { capability } = getAuthorityRuntimeSnapshot(settings); if ( !capability.jobsReady || settings.authorityJobsEnabled === false || !isAuthorityJobTypeSupported(capability, kind) || !isAuthorityVectorConfig(config) ) { return false; } const jobConfig = normalizeAuthorityJobConfig(settings); return Boolean(jobConfig.enabled); } export function shouldUseAuthorityGraphStoreImpl(runtime, settings = runtime.getSettings(), capability = runtime.getAuthorityCapabilityState?.()) { const graphPersistenceState = new Proxy({}, { get(_target, key) { return (runtime.getGraphPersistenceState?.() || {})[key]; }, set(_target, key, value) { const state = runtime.getGraphPersistenceState?.() || {}; state[key] = value; return true; }, }); let currentGraph = runtime.getCurrentGraph?.() || null; let extractionCount = runtime.getExtractionCount?.() || 0; let lastExtractedItems = runtime.getLastExtractedItems?.() || []; let lastRecalledItems = runtime.getLastRecalledItems?.() || []; let lastInjectionContent = runtime.getLastInjectionContent?.() || ""; let runtimeStatus = runtime.getRuntimeStatus?.(); let lastExtractionStatus = runtime.getLastExtractionStatus?.(); let lastVectorStatus = runtime.getLastVectorStatus?.(); let lastRecallStatus = runtime.getLastRecallStatus?.(); const AUTHORITY_VECTOR_REBUILD_JOB_TYPE = runtime.AUTHORITY_VECTOR_REBUILD_JOB_TYPE; const BmeDatabase = runtime.BmeDatabase; const GRAPH_LOAD_STATES = runtime.GRAPH_LOAD_STATES; const GRAPH_METADATA_KEY = runtime.GRAPH_METADATA_KEY; const allocateRequestedPersistRevision = runtime.allocateRequestedPersistRevision; const applyGraphLoadState = runtime.applyGraphLoadState; const applyIndexedDbSnapshotToRuntime = runtime.applyIndexedDbSnapshotToRuntime; const applyShadowSnapshotToRuntime = runtime.applyShadowSnapshotToRuntime; const buildBmeSyncRuntimeOptions = runtime.buildBmeSyncRuntimeOptions; const buildGraphFromSnapshot = runtime.buildGraphFromSnapshot; const buildGraphPersistResult = runtime.buildGraphPersistResult; const buildPersistenceEnvironment = runtime.buildPersistenceEnvironment; const buildLukerGraphCheckpointV2 = runtime.buildLukerGraphCheckpointV2; const buildRestoreSafetyChatId = runtime.buildRestoreSafetyChatId; const buildSnapshotFromGraph = runtime.buildSnapshotFromGraph; const buildVectorCollectionId = runtime.buildVectorCollectionId; const canPersistGraphToMetadataFallback = runtime.canPersistGraphToMetadataFallback; const canUseHostGraphChatStatePersistence = runtime.canUseHostGraphChatStatePersistence; const clearPendingGraphLoadRetry = runtime.clearPendingGraphLoadRetry; const cloneGraphForPersistence = runtime.cloneGraphForPersistence; const cloneGraphSnapshot = runtime.cloneGraphSnapshot; const cloneRuntimeDebugValue = runtime.cloneRuntimeDebugValue; const createEmptyGraph = runtime.createEmptyGraph; const createGraphLoadUiStatus = runtime.createGraphLoadUiStatus; const createPreferredGraphLocalStore = runtime.createPreferredGraphLocalStore; const createUiStatus = runtime.createUiStatus; const deserializeGraph = runtime.deserializeGraph; const detectIndexedDbSnapshotCommitMarkerMismatch = runtime.detectIndexedDbSnapshotCommitMarkerMismatch; const detectStaleIndexedDbSnapshotAgainstRuntime = runtime.detectStaleIndexedDbSnapshotAgainstRuntime; const ensureBmeChatManager = runtime.ensureBmeChatManager; const ensureCurrentGraphRuntimeState = runtime.ensureCurrentGraphRuntimeState; const exportAuthoritySqlSnapshotForCheckpoint = runtime.exportAuthoritySqlSnapshotForCheckpoint; const getAcceptedCommitMarkerRevision = runtime.getAcceptedCommitMarkerRevision; const getAuthorityRuntimeSnapshot = runtime.getAuthorityRuntimeSnapshot; const getChatMetadataIntegrity = runtime.getChatMetadataIntegrity; const getContext = runtime.getContext; const getCurrentChatId = runtime.getCurrentChatId; const getGraphPersistedRevision = runtime.getGraphPersistedRevision; const getGraphPersistenceMeta = runtime.getGraphPersistenceMeta; const getPreferredGraphLocalStorePresentationSync = runtime.getPreferredGraphLocalStorePresentationSync; const getRequestHeaders = runtime.getRequestHeaders; const getSettings = runtime.getSettings; const isAuthorityGraphStorePresentation = runtime.isAuthorityGraphStorePresentation; const isAuthorityJobTypeSupported = runtime.isAuthorityJobTypeSupported; const isAuthorityVectorConfig = runtime.isAuthorityVectorConfig; const isGraphEffectivelyEmpty = runtime.isGraphEffectivelyEmpty; const isIndexedDbSnapshotMeaningful = runtime.isIndexedDbSnapshotMeaningful; const loadGraphFromChat = runtime.loadGraphFromChat; const loadGraphFromIndexedDb = runtime.loadGraphFromIndexedDb; const normalizeAuthorityCapabilityState = runtime.normalizeAuthorityCapabilityState; const normalizeAuthorityJobConfig = runtime.normalizeAuthorityJobConfig; const normalizeAuthoritySettings = runtime.normalizeAuthoritySettings; const normalizeChatIdCandidate = runtime.normalizeChatIdCandidate; const normalizeGraphRuntimeState = runtime.normalizeGraphRuntimeState; const persistGraphToChatMetadata = runtime.persistGraphToChatMetadata; const persistGraphToConfiguredDurableTier = runtime.persistGraphToConfiguredDurableTier; const queueGraphPersist = runtime.queueGraphPersist; const readCachedIndexedDbSnapshot = runtime.readCachedIndexedDbSnapshot; const recordLocalPersistEarlyFailure = runtime.recordLocalPersistEarlyFailure; const recordPersistMismatchDiagnostic = runtime.recordPersistMismatchDiagnostic; const refreshPanelLiveState = runtime.refreshPanelLiveState; const refreshRuntimeGraphAfterSyncApplied = runtime.refreshRuntimeGraphAfterSyncApplied; const recordAuthorityBlobSnapshot = runtime.recordAuthorityBlobSnapshot; const rememberResolvedGraphIdentityAlias = runtime.rememberResolvedGraphIdentityAlias; const resolveCompatibleGraphShadowSnapshot = runtime.resolveCompatibleGraphShadowSnapshot; const resolveCurrentChatIdentity = runtime.resolveCurrentChatIdentity; const resolvePersistenceChatId = runtime.resolvePersistenceChatId; const resolvePreferredGraphLocalStorePresentation = runtime.resolvePreferredGraphLocalStorePresentation; const resolveSnapshotGraphStorePresentation = runtime.resolveSnapshotGraphStorePresentation; const restoreRecallUiStateFromPersistence = runtime.restoreRecallUiStateFromPersistence; const runAuthorityConsistencyAudit = runtime.runAuthorityConsistencyAudit; const scheduleGraphChatStateProbe = runtime.scheduleGraphChatStateProbe; const scheduleIndexedDbGraphProbe = runtime.scheduleIndexedDbGraphProbe; const schedulePersistedRecallMessageUiRefresh = runtime.schedulePersistedRecallMessageUiRefresh; const shouldPreferShadowSnapshotOverOfficial = runtime.shouldPreferShadowSnapshotOverOfficial; const shouldSyncGraphLoadFromLiveContext = runtime.shouldSyncGraphLoadFromLiveContext; const shouldUseAuthorityBlobCheckpoint = runtime.shouldUseAuthorityBlobCheckpoint; const shouldUseAuthorityGraphStore = runtime.shouldUseAuthorityGraphStore; const stampGraphPersistenceMeta = runtime.stampGraphPersistenceMeta; const syncCommitMarkerToPersistenceState = runtime.syncCommitMarkerToPersistenceState; const updateGraphPersistenceState = runtime.updateGraphPersistenceState; const writeAuthorityLukerCheckpointBlob = runtime.writeAuthorityLukerCheckpointBlob; const writeGraphShadowSnapshot = runtime.writeGraphShadowSnapshot; const console = runtime.console || globalThis.console; const normalizedSettings = normalizeAuthoritySettings(settings); const normalizedCapability = normalizeAuthorityCapabilityState(capability, settings); return ( normalizedSettings.enabled && normalizedSettings.primaryWhenAvailable && normalizedSettings.sqlPrimary && normalizedSettings.storageMode !== "local-primary" && normalizedSettings.storageMode !== "off" && normalizedCapability.storagePrimaryReady ); } export async function writeAuthorityCheckpointFromCurrentGraphImpl(runtime, options = {}) { const graphPersistenceState = new Proxy({}, { get(_target, key) { return (runtime.getGraphPersistenceState?.() || {})[key]; }, set(_target, key, value) { const state = runtime.getGraphPersistenceState?.() || {}; state[key] = value; return true; }, }); let currentGraph = runtime.getCurrentGraph?.() || null; let extractionCount = runtime.getExtractionCount?.() || 0; let lastExtractedItems = runtime.getLastExtractedItems?.() || []; let lastRecalledItems = runtime.getLastRecalledItems?.() || []; let lastInjectionContent = runtime.getLastInjectionContent?.() || ""; let runtimeStatus = runtime.getRuntimeStatus?.(); let lastExtractionStatus = runtime.getLastExtractionStatus?.(); let lastVectorStatus = runtime.getLastVectorStatus?.(); let lastRecallStatus = runtime.getLastRecallStatus?.(); const AUTHORITY_VECTOR_REBUILD_JOB_TYPE = runtime.AUTHORITY_VECTOR_REBUILD_JOB_TYPE; const BmeDatabase = runtime.BmeDatabase; const GRAPH_LOAD_STATES = runtime.GRAPH_LOAD_STATES; const GRAPH_METADATA_KEY = runtime.GRAPH_METADATA_KEY; const allocateRequestedPersistRevision = runtime.allocateRequestedPersistRevision; const applyGraphLoadState = runtime.applyGraphLoadState; const applyIndexedDbSnapshotToRuntime = runtime.applyIndexedDbSnapshotToRuntime; const applyShadowSnapshotToRuntime = runtime.applyShadowSnapshotToRuntime; const buildBmeSyncRuntimeOptions = runtime.buildBmeSyncRuntimeOptions; const buildGraphFromSnapshot = runtime.buildGraphFromSnapshot; const buildGraphPersistResult = runtime.buildGraphPersistResult; const buildPersistenceEnvironment = runtime.buildPersistenceEnvironment; const buildLukerGraphCheckpointV2 = runtime.buildLukerGraphCheckpointV2; const buildRestoreSafetyChatId = runtime.buildRestoreSafetyChatId; const buildSnapshotFromGraph = runtime.buildSnapshotFromGraph; const buildVectorCollectionId = runtime.buildVectorCollectionId; const canPersistGraphToMetadataFallback = runtime.canPersistGraphToMetadataFallback; const canUseHostGraphChatStatePersistence = runtime.canUseHostGraphChatStatePersistence; const clearPendingGraphLoadRetry = runtime.clearPendingGraphLoadRetry; const cloneGraphForPersistence = runtime.cloneGraphForPersistence; const cloneGraphSnapshot = runtime.cloneGraphSnapshot; const cloneRuntimeDebugValue = runtime.cloneRuntimeDebugValue; const createEmptyGraph = runtime.createEmptyGraph; const createGraphLoadUiStatus = runtime.createGraphLoadUiStatus; const createPreferredGraphLocalStore = runtime.createPreferredGraphLocalStore; const createUiStatus = runtime.createUiStatus; const deserializeGraph = runtime.deserializeGraph; const detectIndexedDbSnapshotCommitMarkerMismatch = runtime.detectIndexedDbSnapshotCommitMarkerMismatch; const detectStaleIndexedDbSnapshotAgainstRuntime = runtime.detectStaleIndexedDbSnapshotAgainstRuntime; const ensureBmeChatManager = runtime.ensureBmeChatManager; const ensureCurrentGraphRuntimeState = runtime.ensureCurrentGraphRuntimeState; const exportAuthoritySqlSnapshotForCheckpoint = runtime.exportAuthoritySqlSnapshotForCheckpoint; const getAcceptedCommitMarkerRevision = runtime.getAcceptedCommitMarkerRevision; const getAuthorityRuntimeSnapshot = runtime.getAuthorityRuntimeSnapshot; const getChatMetadataIntegrity = runtime.getChatMetadataIntegrity; const getContext = runtime.getContext; const getCurrentChatId = runtime.getCurrentChatId; const getGraphPersistedRevision = runtime.getGraphPersistedRevision; const getGraphPersistenceMeta = runtime.getGraphPersistenceMeta; const getPreferredGraphLocalStorePresentationSync = runtime.getPreferredGraphLocalStorePresentationSync; const getRequestHeaders = runtime.getRequestHeaders; const getSettings = runtime.getSettings; const isAuthorityGraphStorePresentation = runtime.isAuthorityGraphStorePresentation; const isAuthorityJobTypeSupported = runtime.isAuthorityJobTypeSupported; const isAuthorityVectorConfig = runtime.isAuthorityVectorConfig; const isGraphEffectivelyEmpty = runtime.isGraphEffectivelyEmpty; const isIndexedDbSnapshotMeaningful = runtime.isIndexedDbSnapshotMeaningful; const loadGraphFromChat = runtime.loadGraphFromChat; const loadGraphFromIndexedDb = runtime.loadGraphFromIndexedDb; const normalizeAuthorityCapabilityState = runtime.normalizeAuthorityCapabilityState; const normalizeAuthorityJobConfig = runtime.normalizeAuthorityJobConfig; const normalizeAuthoritySettings = runtime.normalizeAuthoritySettings; const normalizeChatIdCandidate = runtime.normalizeChatIdCandidate; const normalizeGraphRuntimeState = runtime.normalizeGraphRuntimeState; const persistGraphToChatMetadata = runtime.persistGraphToChatMetadata; const persistGraphToConfiguredDurableTier = runtime.persistGraphToConfiguredDurableTier; const queueGraphPersist = runtime.queueGraphPersist; const readCachedIndexedDbSnapshot = runtime.readCachedIndexedDbSnapshot; const recordLocalPersistEarlyFailure = runtime.recordLocalPersistEarlyFailure; const recordPersistMismatchDiagnostic = runtime.recordPersistMismatchDiagnostic; const refreshPanelLiveState = runtime.refreshPanelLiveState; const refreshRuntimeGraphAfterSyncApplied = runtime.refreshRuntimeGraphAfterSyncApplied; const recordAuthorityBlobSnapshot = runtime.recordAuthorityBlobSnapshot; const rememberResolvedGraphIdentityAlias = runtime.rememberResolvedGraphIdentityAlias; const resolveCompatibleGraphShadowSnapshot = runtime.resolveCompatibleGraphShadowSnapshot; const resolveCurrentChatIdentity = runtime.resolveCurrentChatIdentity; const resolvePersistenceChatId = runtime.resolvePersistenceChatId; const resolvePreferredGraphLocalStorePresentation = runtime.resolvePreferredGraphLocalStorePresentation; const resolveSnapshotGraphStorePresentation = runtime.resolveSnapshotGraphStorePresentation; const restoreRecallUiStateFromPersistence = runtime.restoreRecallUiStateFromPersistence; const runAuthorityConsistencyAudit = runtime.runAuthorityConsistencyAudit; const scheduleGraphChatStateProbe = runtime.scheduleGraphChatStateProbe; const scheduleIndexedDbGraphProbe = runtime.scheduleIndexedDbGraphProbe; const schedulePersistedRecallMessageUiRefresh = runtime.schedulePersistedRecallMessageUiRefresh; const shouldPreferShadowSnapshotOverOfficial = runtime.shouldPreferShadowSnapshotOverOfficial; const shouldSyncGraphLoadFromLiveContext = runtime.shouldSyncGraphLoadFromLiveContext; const shouldUseAuthorityBlobCheckpoint = runtime.shouldUseAuthorityBlobCheckpoint; const shouldUseAuthorityGraphStore = runtime.shouldUseAuthorityGraphStore; const stampGraphPersistenceMeta = runtime.stampGraphPersistenceMeta; const syncCommitMarkerToPersistenceState = runtime.syncCommitMarkerToPersistenceState; const updateGraphPersistenceState = runtime.updateGraphPersistenceState; const writeAuthorityLukerCheckpointBlob = runtime.writeAuthorityLukerCheckpointBlob; const writeGraphShadowSnapshot = runtime.writeGraphShadowSnapshot; const console = runtime.console || globalThis.console; const settings = getSettings(); const { capability } = getAuthorityRuntimeSnapshot(settings); const updatedAt = new Date().toISOString(); const chatId = normalizeChatIdCandidate( options.chatId || getCurrentChatId() || graphPersistenceState.chatId || currentGraph?.chatId, ); if (!chatId) { return { success: false, error: "missing-chat-id", }; } if (!capability.blobReady || !shouldUseAuthorityBlobCheckpoint()) { return { success: false, error: "Authority Blob unavailable", }; } const reason = String(options.reason || "manual-authority-checkpoint"); const authoritySqlPrimary = shouldUseAuthorityGraphStore(settings, capability); const authoritySqlCanonical = authoritySqlPrimary || [ graphPersistenceState.acceptedBy, graphPersistenceState.acceptedStorageTier, graphPersistenceState.primaryStorageTier, ].some((value) => String(value || "").trim() === "authority-sql"); let checkpointGraph = null; let revision = 0; let integrity = ""; let checkpointSource = "runtime"; if (authoritySqlCanonical) { try { const sqlSnapshot = await exportAuthoritySqlSnapshotForCheckpoint(chatId, settings); const sqlRevision = Number(sqlSnapshot?.meta?.revision || 0); if (!Number.isFinite(sqlRevision) || sqlRevision <= 0) { return { success: false, error: "authority-sql-checkpoint-source-empty", }; } checkpointGraph = buildGraphFromSnapshot(sqlSnapshot, { chatId }); revision = sqlRevision; integrity = normalizeChatIdCandidate(options.integrity) || normalizeChatIdCandidate(sqlSnapshot?.meta?.integrity) || getChatMetadataIntegrity(getContext()) || graphPersistenceState.metadataIntegrity; checkpointSource = "authority-sql"; } catch (error) { return { success: false, error: error?.message || String(error) || "authority-sql-checkpoint-source-failed", }; } } if (!checkpointGraph) { ensureCurrentGraphRuntimeState(); currentGraph = runtime.getCurrentGraph?.() || null; if (!currentGraph) { return { success: false, error: "Authority runtime graph unavailable", }; } checkpointGraph = currentGraph; revision = Math.max( 1, Number(options.revision || 0), Number(currentGraph?.meta?.revision || 0), Number(getGraphPersistedRevision(currentGraph) || 0), Number(graphPersistenceState.revision || 0), ); integrity = normalizeChatIdCandidate(options.integrity) || normalizeChatIdCandidate(getGraphPersistenceMeta(currentGraph)?.integrity) || getChatMetadataIntegrity(getContext()) || graphPersistenceState.metadataIntegrity; } const checkpoint = buildLukerGraphCheckpointV2(checkpointGraph, { revision, chatId, integrity, reason, storageTier: authoritySqlCanonical ? "authority-sql-primary" : "runtime-checkpoint", persistedAt: updatedAt, }); if (!checkpoint) { return { success: false, error: "Authority checkpoint payload unavailable", }; } const writeResult = await writeAuthorityLukerCheckpointBlob(checkpoint, { chatId, reason, signal: options.signal, }); if (!writeResult?.ok) { return { success: false, error: writeResult?.error?.message || writeResult?.reason || "authority-blob-checkpoint-write-failed", }; } const auditResult = await runAuthorityConsistencyAudit({ chatId, collectionId: normalizeChatIdCandidate(options.collectionId) || normalizeChatIdCandidate(currentGraph?.vectorIndexState?.collectionId) || buildVectorCollectionId(chatId), }).catch(() => null); return { success: true, result: { path: writeResult.path, revision, checkpointRevision: Number(checkpoint.revision || revision || 0), source: checkpointSource, auditSummary: auditResult?.audit?.summary || null, auditActions: auditResult?.audit?.actions || [], }, }; } export function buildBmeSyncRuntimeOptionsImpl(runtime, extra = {}) { const graphPersistenceState = new Proxy({}, { get(_target, key) { return (runtime.getGraphPersistenceState?.() || {})[key]; }, set(_target, key, value) { const state = runtime.getGraphPersistenceState?.() || {}; state[key] = value; return true; }, }); let currentGraph = runtime.getCurrentGraph?.() || null; let extractionCount = runtime.getExtractionCount?.() || 0; let lastExtractedItems = runtime.getLastExtractedItems?.() || []; let lastRecalledItems = runtime.getLastRecalledItems?.() || []; let lastInjectionContent = runtime.getLastInjectionContent?.() || ""; let runtimeStatus = runtime.getRuntimeStatus?.(); let lastExtractionStatus = runtime.getLastExtractionStatus?.(); let lastVectorStatus = runtime.getLastVectorStatus?.(); let lastRecallStatus = runtime.getLastRecallStatus?.(); const AUTHORITY_VECTOR_REBUILD_JOB_TYPE = runtime.AUTHORITY_VECTOR_REBUILD_JOB_TYPE; const BmeDatabase = runtime.BmeDatabase; const GRAPH_LOAD_STATES = runtime.GRAPH_LOAD_STATES; const GRAPH_METADATA_KEY = runtime.GRAPH_METADATA_KEY; const allocateRequestedPersistRevision = runtime.allocateRequestedPersistRevision; const applyGraphLoadState = runtime.applyGraphLoadState; const applyIndexedDbSnapshotToRuntime = runtime.applyIndexedDbSnapshotToRuntime; const applyShadowSnapshotToRuntime = runtime.applyShadowSnapshotToRuntime; const buildBmeSyncRuntimeOptions = runtime.buildBmeSyncRuntimeOptions; const buildGraphFromSnapshot = runtime.buildGraphFromSnapshot; const buildGraphPersistResult = runtime.buildGraphPersistResult; const buildPersistenceEnvironment = runtime.buildPersistenceEnvironment; const buildLukerGraphCheckpointV2 = runtime.buildLukerGraphCheckpointV2; const buildRestoreSafetyChatId = runtime.buildRestoreSafetyChatId; const buildSnapshotFromGraph = runtime.buildSnapshotFromGraph; const buildVectorCollectionId = runtime.buildVectorCollectionId; const canPersistGraphToMetadataFallback = runtime.canPersistGraphToMetadataFallback; const canUseHostGraphChatStatePersistence = runtime.canUseHostGraphChatStatePersistence; const clearPendingGraphLoadRetry = runtime.clearPendingGraphLoadRetry; const cloneGraphForPersistence = runtime.cloneGraphForPersistence; const cloneGraphSnapshot = runtime.cloneGraphSnapshot; const cloneRuntimeDebugValue = runtime.cloneRuntimeDebugValue; const createEmptyGraph = runtime.createEmptyGraph; const createGraphLoadUiStatus = runtime.createGraphLoadUiStatus; const createPreferredGraphLocalStore = runtime.createPreferredGraphLocalStore; const createUiStatus = runtime.createUiStatus; const deserializeGraph = runtime.deserializeGraph; const detectIndexedDbSnapshotCommitMarkerMismatch = runtime.detectIndexedDbSnapshotCommitMarkerMismatch; const detectStaleIndexedDbSnapshotAgainstRuntime = runtime.detectStaleIndexedDbSnapshotAgainstRuntime; const ensureBmeChatManager = runtime.ensureBmeChatManager; const ensureCurrentGraphRuntimeState = runtime.ensureCurrentGraphRuntimeState; const exportAuthoritySqlSnapshotForCheckpoint = runtime.exportAuthoritySqlSnapshotForCheckpoint; const getAcceptedCommitMarkerRevision = runtime.getAcceptedCommitMarkerRevision; const getAuthorityRuntimeSnapshot = runtime.getAuthorityRuntimeSnapshot; const getChatMetadataIntegrity = runtime.getChatMetadataIntegrity; const getContext = runtime.getContext; const getCurrentChatId = runtime.getCurrentChatId; const getGraphPersistedRevision = runtime.getGraphPersistedRevision; const getGraphPersistenceMeta = runtime.getGraphPersistenceMeta; const getPreferredGraphLocalStorePresentationSync = runtime.getPreferredGraphLocalStorePresentationSync; const getRequestHeaders = runtime.getRequestHeaders; const getSettings = runtime.getSettings; const isAuthorityGraphStorePresentation = runtime.isAuthorityGraphStorePresentation; const isAuthorityJobTypeSupported = runtime.isAuthorityJobTypeSupported; const isAuthorityVectorConfig = runtime.isAuthorityVectorConfig; const isGraphEffectivelyEmpty = runtime.isGraphEffectivelyEmpty; const isIndexedDbSnapshotMeaningful = runtime.isIndexedDbSnapshotMeaningful; const loadGraphFromChat = runtime.loadGraphFromChat; const loadGraphFromIndexedDb = runtime.loadGraphFromIndexedDb; const normalizeAuthorityCapabilityState = runtime.normalizeAuthorityCapabilityState; const normalizeAuthorityJobConfig = runtime.normalizeAuthorityJobConfig; const normalizeAuthoritySettings = runtime.normalizeAuthoritySettings; const normalizeChatIdCandidate = runtime.normalizeChatIdCandidate; const normalizeGraphRuntimeState = runtime.normalizeGraphRuntimeState; const persistGraphToChatMetadata = runtime.persistGraphToChatMetadata; const persistGraphToConfiguredDurableTier = runtime.persistGraphToConfiguredDurableTier; const queueGraphPersist = runtime.queueGraphPersist; const readCachedIndexedDbSnapshot = runtime.readCachedIndexedDbSnapshot; const recordLocalPersistEarlyFailure = runtime.recordLocalPersistEarlyFailure; const recordPersistMismatchDiagnostic = runtime.recordPersistMismatchDiagnostic; const refreshPanelLiveState = runtime.refreshPanelLiveState; const refreshRuntimeGraphAfterSyncApplied = runtime.refreshRuntimeGraphAfterSyncApplied; const recordAuthorityBlobSnapshot = runtime.recordAuthorityBlobSnapshot; const rememberResolvedGraphIdentityAlias = runtime.rememberResolvedGraphIdentityAlias; const resolveCompatibleGraphShadowSnapshot = runtime.resolveCompatibleGraphShadowSnapshot; const resolveCurrentChatIdentity = runtime.resolveCurrentChatIdentity; const resolvePersistenceChatId = runtime.resolvePersistenceChatId; const resolvePreferredGraphLocalStorePresentation = runtime.resolvePreferredGraphLocalStorePresentation; const resolveSnapshotGraphStorePresentation = runtime.resolveSnapshotGraphStorePresentation; const restoreRecallUiStateFromPersistence = runtime.restoreRecallUiStateFromPersistence; const runAuthorityConsistencyAudit = runtime.runAuthorityConsistencyAudit; const scheduleGraphChatStateProbe = runtime.scheduleGraphChatStateProbe; const scheduleIndexedDbGraphProbe = runtime.scheduleIndexedDbGraphProbe; const schedulePersistedRecallMessageUiRefresh = runtime.schedulePersistedRecallMessageUiRefresh; const shouldPreferShadowSnapshotOverOfficial = runtime.shouldPreferShadowSnapshotOverOfficial; const shouldSyncGraphLoadFromLiveContext = runtime.shouldSyncGraphLoadFromLiveContext; const shouldUseAuthorityBlobCheckpoint = runtime.shouldUseAuthorityBlobCheckpoint; const shouldUseAuthorityGraphStore = runtime.shouldUseAuthorityGraphStore; const stampGraphPersistenceMeta = runtime.stampGraphPersistenceMeta; const syncCommitMarkerToPersistenceState = runtime.syncCommitMarkerToPersistenceState; const updateGraphPersistenceState = runtime.updateGraphPersistenceState; const writeAuthorityLukerCheckpointBlob = runtime.writeAuthorityLukerCheckpointBlob; const writeGraphShadowSnapshot = runtime.writeGraphShadowSnapshot; const console = runtime.console || globalThis.console; const normalizedExtra = extra && typeof extra === "object" && !Array.isArray(extra) ? extra : {}; const settings = getSettings(); const authoritySettings = normalizeAuthoritySettings(settings); const { capability } = getAuthorityRuntimeSnapshot(settings); const defaultOptions = { getDb: async (chatId) => { const manager = ensureBmeChatManager(); if (!manager) { throw new Error("BmeChatManager 不可用"); } return await manager.getCurrentDb(chatId); }, getSafetyDb: async (chatId) => { const safetyChatId = buildRestoreSafetyChatId(chatId); const safetyStore = await resolvePreferredGraphLocalStorePresentation(); const safetyDb = isAuthorityGraphStorePresentation(safetyStore) ? new BmeDatabase(safetyChatId) : await createPreferredGraphLocalStore(safetyChatId); await safetyDb.open(); return safetyDb; }, getCurrentChatId: () => getCurrentChatId(), getCloudStorageMode: () => getSettings().cloudStorageMode || "automatic", getRequestHeaders, authorityBlobEnabled: Boolean( authoritySettings.enabled && authoritySettings.blobCheckpointEnabled && capability.blobReady, ), authorityBlobFailOpen: authoritySettings.failOpen, authorityBlobConfig: { ...authoritySettings, }, onAuthorityBlobEvent: recordAuthorityBlobSnapshot, onSyncApplied: async (payload = {}) => { await refreshRuntimeGraphAfterSyncApplied(payload); }, }; if (typeof normalizedExtra.onSyncApplied !== "function") { return { ...defaultOptions, ...normalizedExtra, }; } return { ...defaultOptions, ...normalizedExtra, onSyncApplied: async (payload = {}) => { await defaultOptions.onSyncApplied(payload); await normalizedExtra.onSyncApplied(payload); }, }; } export function maybeCaptureGraphShadowSnapshotImpl(runtime, reason = "runtime-shadow", { graph = runtime.getCurrentGraph?.(), chatId = (runtime.getGraphPersistenceState?.() || {}).chatId || runtime.getCurrentChatId(), revision = (runtime.getGraphPersistenceState?.() || {}).revision, } = {}, ) { const graphPersistenceState = new Proxy({}, { get(_target, key) { return (runtime.getGraphPersistenceState?.() || {})[key]; }, set(_target, key, value) { const state = runtime.getGraphPersistenceState?.() || {}; state[key] = value; return true; }, }); let currentGraph = runtime.getCurrentGraph?.() || null; let extractionCount = runtime.getExtractionCount?.() || 0; let lastExtractedItems = runtime.getLastExtractedItems?.() || []; let lastRecalledItems = runtime.getLastRecalledItems?.() || []; let lastInjectionContent = runtime.getLastInjectionContent?.() || ""; let runtimeStatus = runtime.getRuntimeStatus?.(); let lastExtractionStatus = runtime.getLastExtractionStatus?.(); let lastVectorStatus = runtime.getLastVectorStatus?.(); let lastRecallStatus = runtime.getLastRecallStatus?.(); const AUTHORITY_VECTOR_REBUILD_JOB_TYPE = runtime.AUTHORITY_VECTOR_REBUILD_JOB_TYPE; const BmeDatabase = runtime.BmeDatabase; const GRAPH_LOAD_STATES = runtime.GRAPH_LOAD_STATES; const GRAPH_METADATA_KEY = runtime.GRAPH_METADATA_KEY; const allocateRequestedPersistRevision = runtime.allocateRequestedPersistRevision; const applyGraphLoadState = runtime.applyGraphLoadState; const applyIndexedDbSnapshotToRuntime = runtime.applyIndexedDbSnapshotToRuntime; const applyShadowSnapshotToRuntime = runtime.applyShadowSnapshotToRuntime; const buildBmeSyncRuntimeOptions = runtime.buildBmeSyncRuntimeOptions; const buildGraphFromSnapshot = runtime.buildGraphFromSnapshot; const buildGraphPersistResult = runtime.buildGraphPersistResult; const buildPersistenceEnvironment = runtime.buildPersistenceEnvironment; const buildLukerGraphCheckpointV2 = runtime.buildLukerGraphCheckpointV2; const buildRestoreSafetyChatId = runtime.buildRestoreSafetyChatId; const buildSnapshotFromGraph = runtime.buildSnapshotFromGraph; const buildVectorCollectionId = runtime.buildVectorCollectionId; const canPersistGraphToMetadataFallback = runtime.canPersistGraphToMetadataFallback; const canUseHostGraphChatStatePersistence = runtime.canUseHostGraphChatStatePersistence; const clearPendingGraphLoadRetry = runtime.clearPendingGraphLoadRetry; const cloneGraphForPersistence = runtime.cloneGraphForPersistence; const cloneGraphSnapshot = runtime.cloneGraphSnapshot; const cloneRuntimeDebugValue = runtime.cloneRuntimeDebugValue; const createEmptyGraph = runtime.createEmptyGraph; const createGraphLoadUiStatus = runtime.createGraphLoadUiStatus; const createPreferredGraphLocalStore = runtime.createPreferredGraphLocalStore; const createUiStatus = runtime.createUiStatus; const deserializeGraph = runtime.deserializeGraph; const detectIndexedDbSnapshotCommitMarkerMismatch = runtime.detectIndexedDbSnapshotCommitMarkerMismatch; const detectStaleIndexedDbSnapshotAgainstRuntime = runtime.detectStaleIndexedDbSnapshotAgainstRuntime; const ensureBmeChatManager = runtime.ensureBmeChatManager; const ensureCurrentGraphRuntimeState = runtime.ensureCurrentGraphRuntimeState; const exportAuthoritySqlSnapshotForCheckpoint = runtime.exportAuthoritySqlSnapshotForCheckpoint; const getAcceptedCommitMarkerRevision = runtime.getAcceptedCommitMarkerRevision; const getAuthorityRuntimeSnapshot = runtime.getAuthorityRuntimeSnapshot; const getChatMetadataIntegrity = runtime.getChatMetadataIntegrity; const getContext = runtime.getContext; const getCurrentChatId = runtime.getCurrentChatId; const getGraphPersistedRevision = runtime.getGraphPersistedRevision; const getGraphPersistenceMeta = runtime.getGraphPersistenceMeta; const getPreferredGraphLocalStorePresentationSync = runtime.getPreferredGraphLocalStorePresentationSync; const getRequestHeaders = runtime.getRequestHeaders; const getSettings = runtime.getSettings; const isAuthorityGraphStorePresentation = runtime.isAuthorityGraphStorePresentation; const isAuthorityJobTypeSupported = runtime.isAuthorityJobTypeSupported; const isAuthorityVectorConfig = runtime.isAuthorityVectorConfig; const isGraphEffectivelyEmpty = runtime.isGraphEffectivelyEmpty; const isIndexedDbSnapshotMeaningful = runtime.isIndexedDbSnapshotMeaningful; const loadGraphFromChat = runtime.loadGraphFromChat; const loadGraphFromIndexedDb = runtime.loadGraphFromIndexedDb; const normalizeAuthorityCapabilityState = runtime.normalizeAuthorityCapabilityState; const normalizeAuthorityJobConfig = runtime.normalizeAuthorityJobConfig; const normalizeAuthoritySettings = runtime.normalizeAuthoritySettings; const normalizeChatIdCandidate = runtime.normalizeChatIdCandidate; const normalizeGraphRuntimeState = runtime.normalizeGraphRuntimeState; const persistGraphToChatMetadata = runtime.persistGraphToChatMetadata; const persistGraphToConfiguredDurableTier = runtime.persistGraphToConfiguredDurableTier; const queueGraphPersist = runtime.queueGraphPersist; const readCachedIndexedDbSnapshot = runtime.readCachedIndexedDbSnapshot; const recordLocalPersistEarlyFailure = runtime.recordLocalPersistEarlyFailure; const recordPersistMismatchDiagnostic = runtime.recordPersistMismatchDiagnostic; const refreshPanelLiveState = runtime.refreshPanelLiveState; const refreshRuntimeGraphAfterSyncApplied = runtime.refreshRuntimeGraphAfterSyncApplied; const recordAuthorityBlobSnapshot = runtime.recordAuthorityBlobSnapshot; const rememberResolvedGraphIdentityAlias = runtime.rememberResolvedGraphIdentityAlias; const resolveCompatibleGraphShadowSnapshot = runtime.resolveCompatibleGraphShadowSnapshot; const resolveCurrentChatIdentity = runtime.resolveCurrentChatIdentity; const resolvePersistenceChatId = runtime.resolvePersistenceChatId; const resolvePreferredGraphLocalStorePresentation = runtime.resolvePreferredGraphLocalStorePresentation; const resolveSnapshotGraphStorePresentation = runtime.resolveSnapshotGraphStorePresentation; const restoreRecallUiStateFromPersistence = runtime.restoreRecallUiStateFromPersistence; const runAuthorityConsistencyAudit = runtime.runAuthorityConsistencyAudit; const scheduleGraphChatStateProbe = runtime.scheduleGraphChatStateProbe; const scheduleIndexedDbGraphProbe = runtime.scheduleIndexedDbGraphProbe; const schedulePersistedRecallMessageUiRefresh = runtime.schedulePersistedRecallMessageUiRefresh; const shouldPreferShadowSnapshotOverOfficial = runtime.shouldPreferShadowSnapshotOverOfficial; const shouldSyncGraphLoadFromLiveContext = runtime.shouldSyncGraphLoadFromLiveContext; const shouldUseAuthorityBlobCheckpoint = runtime.shouldUseAuthorityBlobCheckpoint; const shouldUseAuthorityGraphStore = runtime.shouldUseAuthorityGraphStore; const stampGraphPersistenceMeta = runtime.stampGraphPersistenceMeta; const syncCommitMarkerToPersistenceState = runtime.syncCommitMarkerToPersistenceState; const updateGraphPersistenceState = runtime.updateGraphPersistenceState; const writeAuthorityLukerCheckpointBlob = runtime.writeAuthorityLukerCheckpointBlob; const writeGraphShadowSnapshot = runtime.writeGraphShadowSnapshot; const console = runtime.console || globalThis.console; if (!chatId || !graph) return false; const hasMeaningfulGraphData = !isGraphEffectivelyEmpty(graph) || graphPersistenceState.shadowSnapshotUsed || graphPersistenceState.lastPersistedRevision > 0; if (!hasMeaningfulGraphData) return false; return writeGraphShadowSnapshot(chatId, graph, { revision, reason, }); } export async function persistExtractionBatchResultImpl(runtime, { reason = "extraction-batch-complete", lastProcessedAssistantFloor = null, graphSnapshot = null, persistSnapshot = null, persistDelta = null, } = {}) { const graphPersistenceState = new Proxy({}, { get(_target, key) { return (runtime.getGraphPersistenceState?.() || {})[key]; }, set(_target, key, value) { const state = runtime.getGraphPersistenceState?.() || {}; state[key] = value; return true; }, }); let currentGraph = runtime.getCurrentGraph?.() || null; let extractionCount = runtime.getExtractionCount?.() || 0; let lastExtractedItems = runtime.getLastExtractedItems?.() || []; let lastRecalledItems = runtime.getLastRecalledItems?.() || []; let lastInjectionContent = runtime.getLastInjectionContent?.() || ""; let runtimeStatus = runtime.getRuntimeStatus?.(); let lastExtractionStatus = runtime.getLastExtractionStatus?.(); let lastVectorStatus = runtime.getLastVectorStatus?.(); let lastRecallStatus = runtime.getLastRecallStatus?.(); const AUTHORITY_VECTOR_REBUILD_JOB_TYPE = runtime.AUTHORITY_VECTOR_REBUILD_JOB_TYPE; const BmeDatabase = runtime.BmeDatabase; const GRAPH_LOAD_STATES = runtime.GRAPH_LOAD_STATES; const GRAPH_METADATA_KEY = runtime.GRAPH_METADATA_KEY; const allocateRequestedPersistRevision = runtime.allocateRequestedPersistRevision; const applyGraphLoadState = runtime.applyGraphLoadState; const applyIndexedDbSnapshotToRuntime = runtime.applyIndexedDbSnapshotToRuntime; const applyShadowSnapshotToRuntime = runtime.applyShadowSnapshotToRuntime; const buildBmeSyncRuntimeOptions = runtime.buildBmeSyncRuntimeOptions; const buildGraphFromSnapshot = runtime.buildGraphFromSnapshot; const buildGraphPersistResult = runtime.buildGraphPersistResult; const buildPersistenceEnvironment = runtime.buildPersistenceEnvironment; const buildLukerGraphCheckpointV2 = runtime.buildLukerGraphCheckpointV2; const buildRestoreSafetyChatId = runtime.buildRestoreSafetyChatId; const buildSnapshotFromGraph = runtime.buildSnapshotFromGraph; const buildVectorCollectionId = runtime.buildVectorCollectionId; const canPersistGraphToMetadataFallback = runtime.canPersistGraphToMetadataFallback; const canUseHostGraphChatStatePersistence = runtime.canUseHostGraphChatStatePersistence; const clearPendingGraphLoadRetry = runtime.clearPendingGraphLoadRetry; const cloneGraphForPersistence = runtime.cloneGraphForPersistence; const cloneGraphSnapshot = runtime.cloneGraphSnapshot; const cloneRuntimeDebugValue = runtime.cloneRuntimeDebugValue; const createEmptyGraph = runtime.createEmptyGraph; const createGraphLoadUiStatus = runtime.createGraphLoadUiStatus; const createPreferredGraphLocalStore = runtime.createPreferredGraphLocalStore; const createUiStatus = runtime.createUiStatus; const deserializeGraph = runtime.deserializeGraph; const detectIndexedDbSnapshotCommitMarkerMismatch = runtime.detectIndexedDbSnapshotCommitMarkerMismatch; const detectStaleIndexedDbSnapshotAgainstRuntime = runtime.detectStaleIndexedDbSnapshotAgainstRuntime; const ensureBmeChatManager = runtime.ensureBmeChatManager; const ensureCurrentGraphRuntimeState = runtime.ensureCurrentGraphRuntimeState; const exportAuthoritySqlSnapshotForCheckpoint = runtime.exportAuthoritySqlSnapshotForCheckpoint; const getAcceptedCommitMarkerRevision = runtime.getAcceptedCommitMarkerRevision; const getAuthorityRuntimeSnapshot = runtime.getAuthorityRuntimeSnapshot; const getChatMetadataIntegrity = runtime.getChatMetadataIntegrity; const getContext = runtime.getContext; const getCurrentChatId = runtime.getCurrentChatId; const getGraphPersistedRevision = runtime.getGraphPersistedRevision; const getGraphPersistenceMeta = runtime.getGraphPersistenceMeta; const getPreferredGraphLocalStorePresentationSync = runtime.getPreferredGraphLocalStorePresentationSync; const getRequestHeaders = runtime.getRequestHeaders; const getSettings = runtime.getSettings; const isAuthorityGraphStorePresentation = runtime.isAuthorityGraphStorePresentation; const isAuthorityJobTypeSupported = runtime.isAuthorityJobTypeSupported; const isAuthorityVectorConfig = runtime.isAuthorityVectorConfig; const isGraphEffectivelyEmpty = runtime.isGraphEffectivelyEmpty; const isIndexedDbSnapshotMeaningful = runtime.isIndexedDbSnapshotMeaningful; const loadGraphFromChat = runtime.loadGraphFromChat; const loadGraphFromIndexedDb = runtime.loadGraphFromIndexedDb; const normalizeAuthorityCapabilityState = runtime.normalizeAuthorityCapabilityState; const normalizeAuthorityJobConfig = runtime.normalizeAuthorityJobConfig; const normalizeAuthoritySettings = runtime.normalizeAuthoritySettings; const normalizeChatIdCandidate = runtime.normalizeChatIdCandidate; const normalizeGraphRuntimeState = runtime.normalizeGraphRuntimeState; const persistGraphToChatMetadata = runtime.persistGraphToChatMetadata; const persistGraphToConfiguredDurableTier = runtime.persistGraphToConfiguredDurableTier; const queueGraphPersist = runtime.queueGraphPersist; const readCachedIndexedDbSnapshot = runtime.readCachedIndexedDbSnapshot; const recordLocalPersistEarlyFailure = runtime.recordLocalPersistEarlyFailure; const recordPersistMismatchDiagnostic = runtime.recordPersistMismatchDiagnostic; const refreshPanelLiveState = runtime.refreshPanelLiveState; const refreshRuntimeGraphAfterSyncApplied = runtime.refreshRuntimeGraphAfterSyncApplied; const recordAuthorityBlobSnapshot = runtime.recordAuthorityBlobSnapshot; const rememberResolvedGraphIdentityAlias = runtime.rememberResolvedGraphIdentityAlias; const resolveCompatibleGraphShadowSnapshot = runtime.resolveCompatibleGraphShadowSnapshot; const resolveCurrentChatIdentity = runtime.resolveCurrentChatIdentity; const resolvePersistenceChatId = runtime.resolvePersistenceChatId; const resolvePreferredGraphLocalStorePresentation = runtime.resolvePreferredGraphLocalStorePresentation; const resolveSnapshotGraphStorePresentation = runtime.resolveSnapshotGraphStorePresentation; const restoreRecallUiStateFromPersistence = runtime.restoreRecallUiStateFromPersistence; const runAuthorityConsistencyAudit = runtime.runAuthorityConsistencyAudit; const scheduleGraphChatStateProbe = runtime.scheduleGraphChatStateProbe; const scheduleIndexedDbGraphProbe = runtime.scheduleIndexedDbGraphProbe; const schedulePersistedRecallMessageUiRefresh = runtime.schedulePersistedRecallMessageUiRefresh; const shouldPreferShadowSnapshotOverOfficial = runtime.shouldPreferShadowSnapshotOverOfficial; const shouldSyncGraphLoadFromLiveContext = runtime.shouldSyncGraphLoadFromLiveContext; const shouldUseAuthorityBlobCheckpoint = runtime.shouldUseAuthorityBlobCheckpoint; const shouldUseAuthorityGraphStore = runtime.shouldUseAuthorityGraphStore; const stampGraphPersistenceMeta = runtime.stampGraphPersistenceMeta; const syncCommitMarkerToPersistenceState = runtime.syncCommitMarkerToPersistenceState; const updateGraphPersistenceState = runtime.updateGraphPersistenceState; const writeAuthorityLukerCheckpointBlob = runtime.writeAuthorityLukerCheckpointBlob; const writeGraphShadowSnapshot = runtime.writeGraphShadowSnapshot; const console = runtime.console || globalThis.console; ensureCurrentGraphRuntimeState(); currentGraph = runtime.getCurrentGraph?.() || null; const context = getContext(); const persistGraphDetached = Boolean(graphSnapshot) && typeof graphSnapshot === "object" && graphSnapshot !== currentGraph; const persistGraph = graphSnapshot && typeof graphSnapshot === "object" ? graphSnapshot === currentGraph ? cloneGraphSnapshot(graphSnapshot) : graphSnapshot : currentGraph; if (!context || !persistGraph) { return buildGraphPersistResult({ saved: false, blocked: true, accepted: false, reason: "missing-context-or-graph", storageTier: "none", }); } const chatId = resolvePersistenceChatId(context, persistGraph); if (!chatId) { recordLocalPersistEarlyFailure("missing-chat-id", { chatId, revision: 0, }); return buildGraphPersistResult({ saved: false, blocked: true, accepted: false, reason: "missing-chat-id", storageTier: "none", }); } const revision = allocateRequestedPersistRevision(0, persistGraph); const acceptedPersistResult = await persistGraphToConfiguredDurableTier( context, persistGraph, { chatId, revision, reason, lastProcessedAssistantFloor, persistDelta, graphSnapshot, persistSnapshot, graphDetached: persistGraphDetached, }, ); if (acceptedPersistResult?.accepted) { return acceptedPersistResult; } let recoverableTier = "none"; if ( maybeCaptureGraphShadowSnapshotImpl(runtime, `${reason}:shadow-fallback`, { graph: persistGraph, chatId, revision, }) ) { recoverableTier = "shadow"; } if (canPersistGraphToMetadataFallback(context, persistGraph)) { const metadataReason = `${reason}:metadata-full-fallback`; const metadataResult = persistGraphToChatMetadata(context, { reason: metadataReason, revision, immediate: true, graph: persistGraph, }); if (metadataResult?.saved) { recoverableTier = "metadata-full"; } } const queuedResult = queueGraphPersist(`${reason}:pending`, revision, { immediate: true, graph: persistGraph, chatId, captureShadow: recoverableTier === "none", recoverableTier, }); updateGraphPersistenceState({ pendingPersist: true, lastPersistReason: String(queuedResult.reason || `${reason}:pending`), lastPersistMode: String(queuedResult.saveMode || ""), lastRecoverableStorageTier: recoverableTier !== "none" ? recoverableTier : String(queuedResult.storageTier || graphPersistenceState.lastRecoverableStorageTier || "none"), }); return buildGraphPersistResult({ saved: false, queued: Boolean(queuedResult?.queued), blocked: Boolean(queuedResult?.blocked), accepted: false, recoverable: recoverableTier !== "none" || queuedResult?.recoverable === true, reason: String(queuedResult?.reason || `${reason}:pending`), revision: Number(queuedResult?.revision || revision), saveMode: String(queuedResult?.saveMode || ""), storageTier: recoverableTier !== "none" ? recoverableTier : String(queuedResult?.storageTier || "none"), }); } export function syncGraphLoadFromLiveContextImpl(runtime, options = {}) { const graphPersistenceState = new Proxy({}, { get(_target, key) { return (runtime.getGraphPersistenceState?.() || {})[key]; }, set(_target, key, value) { const state = runtime.getGraphPersistenceState?.() || {}; state[key] = value; return true; }, }); let currentGraph = runtime.getCurrentGraph?.() || null; let extractionCount = runtime.getExtractionCount?.() || 0; let lastExtractedItems = runtime.getLastExtractedItems?.() || []; let lastRecalledItems = runtime.getLastRecalledItems?.() || []; let lastInjectionContent = runtime.getLastInjectionContent?.() || ""; let runtimeStatus = runtime.getRuntimeStatus?.(); let lastExtractionStatus = runtime.getLastExtractionStatus?.(); let lastVectorStatus = runtime.getLastVectorStatus?.(); let lastRecallStatus = runtime.getLastRecallStatus?.(); const AUTHORITY_VECTOR_REBUILD_JOB_TYPE = runtime.AUTHORITY_VECTOR_REBUILD_JOB_TYPE; const BmeDatabase = runtime.BmeDatabase; const GRAPH_LOAD_STATES = runtime.GRAPH_LOAD_STATES; const GRAPH_METADATA_KEY = runtime.GRAPH_METADATA_KEY; const allocateRequestedPersistRevision = runtime.allocateRequestedPersistRevision; const applyGraphLoadState = runtime.applyGraphLoadState; const applyIndexedDbSnapshotToRuntime = runtime.applyIndexedDbSnapshotToRuntime; const applyShadowSnapshotToRuntime = runtime.applyShadowSnapshotToRuntime; const buildBmeSyncRuntimeOptions = runtime.buildBmeSyncRuntimeOptions; const buildGraphFromSnapshot = runtime.buildGraphFromSnapshot; const buildGraphPersistResult = runtime.buildGraphPersistResult; const buildPersistenceEnvironment = runtime.buildPersistenceEnvironment; const buildLukerGraphCheckpointV2 = runtime.buildLukerGraphCheckpointV2; const buildRestoreSafetyChatId = runtime.buildRestoreSafetyChatId; const buildSnapshotFromGraph = runtime.buildSnapshotFromGraph; const buildVectorCollectionId = runtime.buildVectorCollectionId; const canPersistGraphToMetadataFallback = runtime.canPersistGraphToMetadataFallback; const canUseHostGraphChatStatePersistence = runtime.canUseHostGraphChatStatePersistence; const clearPendingGraphLoadRetry = runtime.clearPendingGraphLoadRetry; const cloneGraphForPersistence = runtime.cloneGraphForPersistence; const cloneGraphSnapshot = runtime.cloneGraphSnapshot; const cloneRuntimeDebugValue = runtime.cloneRuntimeDebugValue; const createEmptyGraph = runtime.createEmptyGraph; const createGraphLoadUiStatus = runtime.createGraphLoadUiStatus; const createPreferredGraphLocalStore = runtime.createPreferredGraphLocalStore; const createUiStatus = runtime.createUiStatus; const deserializeGraph = runtime.deserializeGraph; const detectIndexedDbSnapshotCommitMarkerMismatch = runtime.detectIndexedDbSnapshotCommitMarkerMismatch; const detectStaleIndexedDbSnapshotAgainstRuntime = runtime.detectStaleIndexedDbSnapshotAgainstRuntime; const ensureBmeChatManager = runtime.ensureBmeChatManager; const ensureCurrentGraphRuntimeState = runtime.ensureCurrentGraphRuntimeState; const exportAuthoritySqlSnapshotForCheckpoint = runtime.exportAuthoritySqlSnapshotForCheckpoint; const getAcceptedCommitMarkerRevision = runtime.getAcceptedCommitMarkerRevision; const getAuthorityRuntimeSnapshot = runtime.getAuthorityRuntimeSnapshot; const getChatMetadataIntegrity = runtime.getChatMetadataIntegrity; const getContext = runtime.getContext; const getCurrentChatId = runtime.getCurrentChatId; const getGraphPersistedRevision = runtime.getGraphPersistedRevision; const getGraphPersistenceMeta = runtime.getGraphPersistenceMeta; const getPreferredGraphLocalStorePresentationSync = runtime.getPreferredGraphLocalStorePresentationSync; const getRequestHeaders = runtime.getRequestHeaders; const getSettings = runtime.getSettings; const isAuthorityGraphStorePresentation = runtime.isAuthorityGraphStorePresentation; const isAuthorityJobTypeSupported = runtime.isAuthorityJobTypeSupported; const isAuthorityVectorConfig = runtime.isAuthorityVectorConfig; const isGraphEffectivelyEmpty = runtime.isGraphEffectivelyEmpty; const isIndexedDbSnapshotMeaningful = runtime.isIndexedDbSnapshotMeaningful; const loadGraphFromChat = runtime.loadGraphFromChat; const loadGraphFromIndexedDb = runtime.loadGraphFromIndexedDb; const normalizeAuthorityCapabilityState = runtime.normalizeAuthorityCapabilityState; const normalizeAuthorityJobConfig = runtime.normalizeAuthorityJobConfig; const normalizeAuthoritySettings = runtime.normalizeAuthoritySettings; const normalizeChatIdCandidate = runtime.normalizeChatIdCandidate; const normalizeGraphRuntimeState = runtime.normalizeGraphRuntimeState; const persistGraphToChatMetadata = runtime.persistGraphToChatMetadata; const persistGraphToConfiguredDurableTier = runtime.persistGraphToConfiguredDurableTier; const queueGraphPersist = runtime.queueGraphPersist; const readCachedIndexedDbSnapshot = runtime.readCachedIndexedDbSnapshot; const recordLocalPersistEarlyFailure = runtime.recordLocalPersistEarlyFailure; const recordPersistMismatchDiagnostic = runtime.recordPersistMismatchDiagnostic; const refreshPanelLiveState = runtime.refreshPanelLiveState; const refreshRuntimeGraphAfterSyncApplied = runtime.refreshRuntimeGraphAfterSyncApplied; const recordAuthorityBlobSnapshot = runtime.recordAuthorityBlobSnapshot; const rememberResolvedGraphIdentityAlias = runtime.rememberResolvedGraphIdentityAlias; const resolveCompatibleGraphShadowSnapshot = runtime.resolveCompatibleGraphShadowSnapshot; const resolveCurrentChatIdentity = runtime.resolveCurrentChatIdentity; const resolvePersistenceChatId = runtime.resolvePersistenceChatId; const resolvePreferredGraphLocalStorePresentation = runtime.resolvePreferredGraphLocalStorePresentation; const resolveSnapshotGraphStorePresentation = runtime.resolveSnapshotGraphStorePresentation; const restoreRecallUiStateFromPersistence = runtime.restoreRecallUiStateFromPersistence; const runAuthorityConsistencyAudit = runtime.runAuthorityConsistencyAudit; const scheduleGraphChatStateProbe = runtime.scheduleGraphChatStateProbe; const scheduleIndexedDbGraphProbe = runtime.scheduleIndexedDbGraphProbe; const schedulePersistedRecallMessageUiRefresh = runtime.schedulePersistedRecallMessageUiRefresh; const shouldPreferShadowSnapshotOverOfficial = runtime.shouldPreferShadowSnapshotOverOfficial; const shouldSyncGraphLoadFromLiveContext = runtime.shouldSyncGraphLoadFromLiveContext; const shouldUseAuthorityBlobCheckpoint = runtime.shouldUseAuthorityBlobCheckpoint; const shouldUseAuthorityGraphStore = runtime.shouldUseAuthorityGraphStore; const stampGraphPersistenceMeta = runtime.stampGraphPersistenceMeta; const syncCommitMarkerToPersistenceState = runtime.syncCommitMarkerToPersistenceState; const updateGraphPersistenceState = runtime.updateGraphPersistenceState; const writeAuthorityLukerCheckpointBlob = runtime.writeAuthorityLukerCheckpointBlob; const writeGraphShadowSnapshot = runtime.writeGraphShadowSnapshot; const console = runtime.console || globalThis.console; const { source = "live-context-sync", force = false } = options; const attemptIndex = Math.max( 0, Math.floor(Number(options?.attemptIndex) || 0), ); const context = getContext(); syncCommitMarkerToPersistenceState(context); if (!shouldSyncGraphLoadFromLiveContext(context, { force })) { return { synced: false, reason: "no-sync-needed", loadState: graphPersistenceState.loadState, chatId: graphPersistenceState.chatId, }; } const chatId = resolveCurrentChatIdentity(context).chatId; if (!chatId) { const result = loadGraphFromChat({ source, attemptIndex: 0, }); return { synced: true, ...result, }; } const persistenceEnvironment = buildPersistenceEnvironment( context, getPreferredGraphLocalStorePresentationSync(), ); if ( persistenceEnvironment.hostProfile === "luker" && canUseHostGraphChatStatePersistence(context) ) { scheduleGraphChatStateProbe(chatId, { source: `${source}:luker-chat-state-probe`, attemptIndex, allowOverride: true, }); applyGraphLoadState(GRAPH_LOAD_STATES.LOADING, { chatId, reason: `luker-chat-state-probe-pending:${String(source || "direct-load")}`, attemptIndex, dbReady: false, writesBlocked: true, hostProfile: persistenceEnvironment.hostProfile, primaryStorageTier: persistenceEnvironment.primaryStorageTier, cacheStorageTier: persistenceEnvironment.cacheStorageTier, }); updateGraphPersistenceState({ hostProfile: persistenceEnvironment.hostProfile, primaryStorageTier: persistenceEnvironment.primaryStorageTier, cacheStorageTier: persistenceEnvironment.cacheStorageTier, storagePrimary: getPreferredGraphLocalStorePresentationSync().storagePrimary, storageMode: getPreferredGraphLocalStorePresentationSync().storageMode, dbReady: false, indexedDbLastError: "", }); refreshPanelLiveState(); return { success: false, loaded: false, loadState: GRAPH_LOAD_STATES.LOADING, reason: "luker-chat-state-probe-pending", chatId, attemptIndex, }; } if (canUseHostGraphChatStatePersistence(context)) { scheduleGraphChatStateProbe(chatId, { source: `${source}:chat-state-probe`, attemptIndex: 0, allowOverride: true, }); } const cachedPreferredLocalStore = getPreferredGraphLocalStorePresentationSync(); const cachedSnapshot = readCachedIndexedDbSnapshot( chatId, cachedPreferredLocalStore, ); if (isIndexedDbSnapshotMeaningful(cachedSnapshot)) { const cachedStore = resolveSnapshotGraphStorePresentation( cachedSnapshot, cachedPreferredLocalStore, ); const result = applyIndexedDbSnapshotToRuntime(chatId, cachedSnapshot, { source: `${source}:indexeddb-cache`, attemptIndex: 0, storagePrimary: cachedStore.storagePrimary, storageMode: cachedStore.storageMode, statusLabel: cachedStore.statusLabel, reasonPrefix: cachedStore.reasonPrefix, }); if (result?.reason === `${cachedStore.reasonPrefix}-stale-runtime`) { return { synced: false, reason: "cached-indexeddb-stale-runtime", loadState: graphPersistenceState.loadState, chatId: graphPersistenceState.chatId, staleDetail: cloneRuntimeDebugValue(result?.staleDetail, null), }; } return { synced: true, ...result, }; } const preferredLocalStore = getPreferredGraphLocalStorePresentationSync(); applyGraphLoadState(GRAPH_LOAD_STATES.LOADING, { chatId, reason: `indexeddb-sync:${String(source || "live-context-sync")}`, attemptIndex: 0, dbReady: false, writesBlocked: true, }); updateGraphPersistenceState({ storagePrimary: preferredLocalStore.storagePrimary, storageMode: preferredLocalStore.storageMode, dbReady: false, indexedDbLastError: "", }); scheduleIndexedDbGraphProbe(chatId, { source: `${source}:indexeddb-probe`, allowOverride: true, applyEmptyState: true, }); refreshPanelLiveState(); return { synced: true, success: false, loaded: false, loadState: GRAPH_LOAD_STATES.LOADING, reason: "indexeddb-loading", chatId, attemptIndex: 0, }; } export function loadGraphFromChatImpl(runtime, options = {}) { const graphPersistenceState = new Proxy({}, { get(_target, key) { return (runtime.getGraphPersistenceState?.() || {})[key]; }, set(_target, key, value) { const state = runtime.getGraphPersistenceState?.() || {}; state[key] = value; return true; }, }); let currentGraph = runtime.getCurrentGraph?.() || null; let extractionCount = runtime.getExtractionCount?.() || 0; let lastExtractedItems = runtime.getLastExtractedItems?.() || []; let lastRecalledItems = runtime.getLastRecalledItems?.() || []; let lastInjectionContent = runtime.getLastInjectionContent?.() || ""; let runtimeStatus = runtime.getRuntimeStatus?.(); let lastExtractionStatus = runtime.getLastExtractionStatus?.(); let lastVectorStatus = runtime.getLastVectorStatus?.(); let lastRecallStatus = runtime.getLastRecallStatus?.(); const AUTHORITY_VECTOR_REBUILD_JOB_TYPE = runtime.AUTHORITY_VECTOR_REBUILD_JOB_TYPE; const BmeDatabase = runtime.BmeDatabase; const GRAPH_LOAD_STATES = runtime.GRAPH_LOAD_STATES; const GRAPH_METADATA_KEY = runtime.GRAPH_METADATA_KEY; const allocateRequestedPersistRevision = runtime.allocateRequestedPersistRevision; const applyGraphLoadState = runtime.applyGraphLoadState; const applyIndexedDbSnapshotToRuntime = runtime.applyIndexedDbSnapshotToRuntime; const applyShadowSnapshotToRuntime = runtime.applyShadowSnapshotToRuntime; const buildBmeSyncRuntimeOptions = runtime.buildBmeSyncRuntimeOptions; const buildGraphFromSnapshot = runtime.buildGraphFromSnapshot; const buildGraphPersistResult = runtime.buildGraphPersistResult; const buildPersistenceEnvironment = runtime.buildPersistenceEnvironment; const buildLukerGraphCheckpointV2 = runtime.buildLukerGraphCheckpointV2; const buildRestoreSafetyChatId = runtime.buildRestoreSafetyChatId; const buildSnapshotFromGraph = runtime.buildSnapshotFromGraph; const buildVectorCollectionId = runtime.buildVectorCollectionId; const canPersistGraphToMetadataFallback = runtime.canPersistGraphToMetadataFallback; const canUseHostGraphChatStatePersistence = runtime.canUseHostGraphChatStatePersistence; const clearPendingGraphLoadRetry = runtime.clearPendingGraphLoadRetry; const cloneGraphForPersistence = runtime.cloneGraphForPersistence; const cloneGraphSnapshot = runtime.cloneGraphSnapshot; const cloneRuntimeDebugValue = runtime.cloneRuntimeDebugValue; const createEmptyGraph = runtime.createEmptyGraph; const createGraphLoadUiStatus = runtime.createGraphLoadUiStatus; const createPreferredGraphLocalStore = runtime.createPreferredGraphLocalStore; const createUiStatus = runtime.createUiStatus; const deserializeGraph = runtime.deserializeGraph; const detectIndexedDbSnapshotCommitMarkerMismatch = runtime.detectIndexedDbSnapshotCommitMarkerMismatch; const detectStaleIndexedDbSnapshotAgainstRuntime = runtime.detectStaleIndexedDbSnapshotAgainstRuntime; const ensureBmeChatManager = runtime.ensureBmeChatManager; const ensureCurrentGraphRuntimeState = runtime.ensureCurrentGraphRuntimeState; const exportAuthoritySqlSnapshotForCheckpoint = runtime.exportAuthoritySqlSnapshotForCheckpoint; const getAcceptedCommitMarkerRevision = runtime.getAcceptedCommitMarkerRevision; const getAuthorityRuntimeSnapshot = runtime.getAuthorityRuntimeSnapshot; const getChatMetadataIntegrity = runtime.getChatMetadataIntegrity; const getContext = runtime.getContext; const getCurrentChatId = runtime.getCurrentChatId; const getGraphPersistedRevision = runtime.getGraphPersistedRevision; const getGraphPersistenceMeta = runtime.getGraphPersistenceMeta; const getPreferredGraphLocalStorePresentationSync = runtime.getPreferredGraphLocalStorePresentationSync; const getRequestHeaders = runtime.getRequestHeaders; const getSettings = runtime.getSettings; const isAuthorityGraphStorePresentation = runtime.isAuthorityGraphStorePresentation; const isAuthorityJobTypeSupported = runtime.isAuthorityJobTypeSupported; const isAuthorityVectorConfig = runtime.isAuthorityVectorConfig; const isGraphEffectivelyEmpty = runtime.isGraphEffectivelyEmpty; const isIndexedDbSnapshotMeaningful = runtime.isIndexedDbSnapshotMeaningful; const loadGraphFromChat = runtime.loadGraphFromChat; const loadGraphFromIndexedDb = runtime.loadGraphFromIndexedDb; const normalizeAuthorityCapabilityState = runtime.normalizeAuthorityCapabilityState; const normalizeAuthorityJobConfig = runtime.normalizeAuthorityJobConfig; const normalizeAuthoritySettings = runtime.normalizeAuthoritySettings; const normalizeChatIdCandidate = runtime.normalizeChatIdCandidate; const normalizeGraphRuntimeState = runtime.normalizeGraphRuntimeState; const persistGraphToChatMetadata = runtime.persistGraphToChatMetadata; const persistGraphToConfiguredDurableTier = runtime.persistGraphToConfiguredDurableTier; const queueGraphPersist = runtime.queueGraphPersist; const readCachedIndexedDbSnapshot = runtime.readCachedIndexedDbSnapshot; const recordLocalPersistEarlyFailure = runtime.recordLocalPersistEarlyFailure; const recordPersistMismatchDiagnostic = runtime.recordPersistMismatchDiagnostic; const refreshPanelLiveState = runtime.refreshPanelLiveState; const refreshRuntimeGraphAfterSyncApplied = runtime.refreshRuntimeGraphAfterSyncApplied; const recordAuthorityBlobSnapshot = runtime.recordAuthorityBlobSnapshot; const rememberResolvedGraphIdentityAlias = runtime.rememberResolvedGraphIdentityAlias; const resolveCompatibleGraphShadowSnapshot = runtime.resolveCompatibleGraphShadowSnapshot; const resolveCurrentChatIdentity = runtime.resolveCurrentChatIdentity; const resolvePersistenceChatId = runtime.resolvePersistenceChatId; const resolvePreferredGraphLocalStorePresentation = runtime.resolvePreferredGraphLocalStorePresentation; const resolveSnapshotGraphStorePresentation = runtime.resolveSnapshotGraphStorePresentation; const restoreRecallUiStateFromPersistence = runtime.restoreRecallUiStateFromPersistence; const runAuthorityConsistencyAudit = runtime.runAuthorityConsistencyAudit; const scheduleGraphChatStateProbe = runtime.scheduleGraphChatStateProbe; const scheduleIndexedDbGraphProbe = runtime.scheduleIndexedDbGraphProbe; const schedulePersistedRecallMessageUiRefresh = runtime.schedulePersistedRecallMessageUiRefresh; const shouldPreferShadowSnapshotOverOfficial = runtime.shouldPreferShadowSnapshotOverOfficial; const shouldSyncGraphLoadFromLiveContext = runtime.shouldSyncGraphLoadFromLiveContext; const shouldUseAuthorityBlobCheckpoint = runtime.shouldUseAuthorityBlobCheckpoint; const shouldUseAuthorityGraphStore = runtime.shouldUseAuthorityGraphStore; const stampGraphPersistenceMeta = runtime.stampGraphPersistenceMeta; const syncCommitMarkerToPersistenceState = runtime.syncCommitMarkerToPersistenceState; const updateGraphPersistenceState = runtime.updateGraphPersistenceState; const writeAuthorityLukerCheckpointBlob = runtime.writeAuthorityLukerCheckpointBlob; const writeGraphShadowSnapshot = runtime.writeGraphShadowSnapshot; const console = runtime.console || globalThis.console; const { attemptIndex = 0, expectedChatId = "", source = "direct-load", allowMetadataFallback = true, } = options; const context = getContext(); const chatIdentity = resolveCurrentChatIdentity(context); const chatId = chatIdentity.chatId; const commitMarker = syncCommitMarkerToPersistenceState(context); const shadowSnapshot = resolveCompatibleGraphShadowSnapshot(chatIdentity); const normalizedExpectedChatId = String(expectedChatId || ""); if (attemptIndex === 0) { clearPendingGraphLoadRetry(); } if ( normalizedExpectedChatId && chatId && normalizedExpectedChatId !== chatId ) { clearPendingGraphLoadRetry(); return { success: false, loaded: false, loadState: graphPersistenceState.loadState, reason: "expected-chat-mismatch", chatId, attemptIndex, }; } if (!chatId) { if (chatIdentity.hasLikelySelectedChat) { currentGraph = normalizeGraphRuntimeState(createEmptyGraph(), ""); runtime.setCurrentGraph?.(currentGraph); extractionCount = 0; runtime.setExtractionCount?.(extractionCount); lastExtractedItems = []; runtime.setLastExtractedItems?.(lastExtractedItems); lastRecalledItems = []; runtime.setLastRecalledItems?.(lastRecalledItems); lastInjectionContent = ""; runtime.setLastInjectionContent?.(lastInjectionContent); runtimeStatus = createUiStatus( "图谱加载中", "正在等待当前聊天会话 ID 就绪", "running", ); runtime.setRuntimeStatus?.(runtimeStatus); lastExtractionStatus = createUiStatus( "待命", "正在等待当前聊天会话 ID 就绪", "idle", ); runtime.setLastExtractionStatus?.(lastExtractionStatus); lastVectorStatus = createUiStatus( "待命", "正在等待当前聊天会话 ID 就绪", "idle", ); runtime.setLastVectorStatus?.(lastVectorStatus); lastRecallStatus = createUiStatus( "待命", "正在等待当前聊天会话 ID 就绪", "idle", ); runtime.setLastRecallStatus?.(lastRecallStatus); applyGraphLoadState(GRAPH_LOAD_STATES.LOADING, { chatId: "", reason: "chat-id-missing", attemptIndex, revision: 0, lastPersistedRevision: 0, queuedPersistRevision: 0, queuedPersistChatId: "", pendingPersist: false, shadowSnapshotUsed: false, shadowSnapshotRevision: 0, shadowSnapshotUpdatedAt: "", shadowSnapshotReason: "", dbReady: false, writesBlocked: true, }); refreshPanelLiveState(); return { success: false, loaded: false, loadState: GRAPH_LOAD_STATES.LOADING, reason: "chat-id-missing", chatId: "", attemptIndex, }; } clearPendingGraphLoadRetry(); currentGraph = normalizeGraphRuntimeState(createEmptyGraph(), ""); runtime.setCurrentGraph?.(currentGraph); extractionCount = 0; runtime.setExtractionCount?.(extractionCount); lastExtractedItems = []; runtime.setLastExtractedItems?.(lastExtractedItems); lastRecalledItems = []; runtime.setLastRecalledItems?.(lastRecalledItems); lastInjectionContent = ""; runtime.setLastInjectionContent?.(lastInjectionContent); runtimeStatus = createUiStatus("待命", "当前尚未进入聊天", "idle"); runtime.setRuntimeStatus?.(runtimeStatus); lastExtractionStatus = createUiStatus("待命", "当前尚未进入聊天", "idle"); runtime.setLastExtractionStatus?.(lastExtractionStatus); lastVectorStatus = createUiStatus("待命", "当前尚未进入聊天", "idle"); runtime.setLastVectorStatus?.(lastVectorStatus); lastRecallStatus = createUiStatus("待命", "当前尚未进入聊天", "idle"); runtime.setLastRecallStatus?.(lastRecallStatus); applyGraphLoadState(GRAPH_LOAD_STATES.NO_CHAT, { chatId: "", reason: "no-chat", attemptIndex, revision: 0, lastPersistedRevision: 0, queuedPersistRevision: 0, queuedPersistChatId: "", pendingPersist: false, shadowSnapshotUsed: false, shadowSnapshotRevision: 0, shadowSnapshotUpdatedAt: "", shadowSnapshotReason: "", writesBlocked: true, }); refreshPanelLiveState(); return { success: false, loaded: false, loadState: GRAPH_LOAD_STATES.NO_CHAT, reason: "no-chat", chatId: "", attemptIndex, }; } if (canUseHostGraphChatStatePersistence(context)) { scheduleGraphChatStateProbe(chatId, { source: `${source}:chat-state-probe`, attemptIndex, allowOverride: true, }); } const preferredLocalStore = getPreferredGraphLocalStorePresentationSync(); const cachedSnapshot = readCachedIndexedDbSnapshot( chatId, preferredLocalStore, ); if (isIndexedDbSnapshotMeaningful(cachedSnapshot)) { const cachedStore = resolveSnapshotGraphStorePresentation( cachedSnapshot, preferredLocalStore, ); const cachedResult = applyIndexedDbSnapshotToRuntime( chatId, cachedSnapshot, { source: `${source}:indexeddb-cache`, attemptIndex, storagePrimary: cachedStore.storagePrimary, storageMode: cachedStore.storageMode, statusLabel: cachedStore.statusLabel, reasonPrefix: cachedStore.reasonPrefix, }, ); if (cachedResult?.reason === `${cachedStore.reasonPrefix}-stale-runtime`) { clearPendingGraphLoadRetry(); refreshPanelLiveState(); return { success: false, loaded: false, loadState: graphPersistenceState.loadState, reason: "indexeddb-cache-stale-runtime", chatId, attemptIndex, staleDetail: cloneRuntimeDebugValue(cachedResult?.staleDetail, null), }; } if (cachedResult?.loaded) { clearPendingGraphLoadRetry(); return cachedResult; } } const savedData = allowMetadataFallback ? context?.chatMetadata?.[GRAPH_METADATA_KEY] : undefined; if (savedData != null && savedData !== "") { try { const hydratedOfficialGraph = normalizeGraphRuntimeState( deserializeGraph(savedData), chatId, ); const officialGraph = typeof savedData === "string" ? hydratedOfficialGraph : cloneGraphForPersistence(hydratedOfficialGraph, chatId); const shadowDecision = shouldPreferShadowSnapshotOverOfficial( officialGraph, shadowSnapshot, ); const officialRevision = Math.max( 1, getGraphPersistedRevision(officialGraph), ); const officialSnapshot = buildSnapshotFromGraph(officialGraph, { chatId, revision: officialRevision, }); const metadataCommitMismatch = detectIndexedDbSnapshotCommitMarkerMismatch( officialSnapshot, commitMarker, ); const officialRuntimeStaleDecision = detectStaleIndexedDbSnapshotAgainstRuntime( chatId, officialSnapshot, { identity: chatIdentity, }, ); if (officialRuntimeStaleDecision.stale) { clearPendingGraphLoadRetry(); updateGraphPersistenceState({ metadataIntegrity: getChatMetadataIntegrity(context), dualWriteLastResult: { action: "load", source: `${source}:metadata-compat`, success: false, provisional: true, rejected: true, reason: "metadata-compat-stale-runtime", revision: officialRevision, staleDetail: cloneRuntimeDebugValue( officialRuntimeStaleDecision, null, ), at: Date.now(), }, }); refreshPanelLiveState(); return { success: false, loaded: false, loadState: graphPersistenceState.loadState, reason: "metadata-compat-stale-runtime", chatId, attemptIndex, staleDetail: cloneRuntimeDebugValue( officialRuntimeStaleDecision, null, ), }; } let metadataMismatchDiagnostic = null; if (metadataCommitMismatch.mismatched) { clearPendingGraphLoadRetry(); metadataMismatchDiagnostic = recordPersistMismatchDiagnostic( metadataCommitMismatch, { source: `${source}:metadata-compat`, }, ); if ( shadowSnapshot && Number(shadowSnapshot.revision || 0) >= Number(metadataCommitMismatch.markerRevision || 0) ) { const shadowResult = applyShadowSnapshotToRuntime(chatId, shadowSnapshot, { source: `${source}:metadata-shadow`, attemptIndex, }); if (shadowResult?.loaded && metadataMismatchDiagnostic?.reason) { updateGraphPersistenceState({ persistMismatchReason: metadataMismatchDiagnostic.reason, }); } return shadowResult; } } if (shadowSnapshot && shadowDecision?.reason) { updateGraphPersistenceState({ dualWriteLastResult: { action: "shadow-compare", source: `${source}:metadata-shadow-compare`, success: Boolean(shadowDecision.prefer), reason: shadowDecision.reason, resultCode: String(shadowDecision.resultCode || ""), shadowRevision: Number(shadowSnapshot.revision || 0), officialRevision, at: Date.now(), }, }); } if (shadowSnapshot && shadowDecision?.prefer) { clearPendingGraphLoadRetry(); return applyShadowSnapshotToRuntime(chatId, shadowSnapshot, { source: `${source}:metadata-shadow`, attemptIndex, }); } clearPendingGraphLoadRetry(); currentGraph = officialGraph; runtime.setCurrentGraph?.(currentGraph); stampGraphPersistenceMeta(currentGraph, { revision: officialRevision, reason: `${source}:metadata-compat-provisional`, chatId, integrity: getChatMetadataIntegrity(context), }); extractionCount = Number.isFinite( currentGraph?.historyState?.extractionCount, ) ? currentGraph.historyState.extractionCount : 0; runtime.setExtractionCount?.(extractionCount); lastExtractedItems = []; runtime.setLastExtractedItems?.(lastExtractedItems); const restoredRecallUi = restoreRecallUiStateFromPersistence( context?.chat, ); runtimeStatus = createUiStatus( "图谱加载中", "已从兼容 metadata 暂载图谱,等待 IndexedDB 权威确认", "running", ); runtime.setRuntimeStatus?.(runtimeStatus); lastExtractionStatus = createUiStatus( "待命", "兼容图谱暂载中,等待 IndexedDB 确认后再执行提取", "idle", ); runtime.setLastExtractionStatus?.(lastExtractionStatus); lastVectorStatus = createUiStatus( "待命", currentGraph.vectorIndexState?.lastWarning || "兼容图谱暂载中,等待 IndexedDB 确认后再执行向量任务", "idle", ); runtime.setLastVectorStatus?.(lastVectorStatus); lastRecallStatus = createUiStatus( "待命", restoredRecallUi.restored ? "已从持久化召回记录恢复显示,等待 IndexedDB 权威确认" : "兼容图谱暂载中,等待 IndexedDB 确认后再执行召回", "idle", ); runtime.setLastRecallStatus?.(lastRecallStatus); applyGraphLoadState(GRAPH_LOAD_STATES.LOADING, { chatId, reason: `${source}:metadata-compat-provisional`, attemptIndex, revision: officialRevision, lastPersistedRevision: officialRevision, queuedPersistRevision: 0, queuedPersistChatId: "", pendingPersist: false, shadowSnapshotUsed: false, shadowSnapshotRevision: Number(shadowSnapshot?.revision || 0), shadowSnapshotUpdatedAt: String(shadowSnapshot?.updatedAt || ""), shadowSnapshotReason: String( shadowDecision?.reason || shadowSnapshot?.reason || "", ), dbReady: false, writesBlocked: true, }); updateGraphPersistenceState({ metadataIntegrity: getChatMetadataIntegrity(context), storagePrimary: getPreferredGraphLocalStorePresentationSync().storagePrimary, storageMode: getPreferredGraphLocalStorePresentationSync().storageMode, dbReady: false, indexedDbLastError: "", persistMismatchReason: metadataMismatchDiagnostic?.reason || graphPersistenceState.persistMismatchReason || "", dualWriteLastResult: { action: "load", source: `${source}:metadata-compat`, success: true, provisional: true, revision: officialRevision, resultCode: "graph.load.metadata-compat.provisional", reason: `${source}:metadata-compat-provisional`, at: Date.now(), }, }); rememberResolvedGraphIdentityAlias(context, chatId); scheduleIndexedDbGraphProbe(chatId, { source: `${source}:indexeddb-probe`, attemptIndex, allowOverride: true, applyEmptyState: true, }); refreshPanelLiveState(); schedulePersistedRecallMessageUiRefresh(30); return { success: true, loaded: true, loadState: GRAPH_LOAD_STATES.LOADING, reason: `${source}:metadata-compat-provisional`, chatId, attemptIndex, }; } catch (error) { console.warn( "[ST-BME] 兼容 metadata 图谱读取失败,将回退 IndexedDB:", error, ); } } if (shadowSnapshot) { const acceptedCommitRevision = getAcceptedCommitMarkerRevision(commitMarker); let shadowOnlyMismatch = null; if ( acceptedCommitRevision > 0 && Number(shadowSnapshot.revision || 0) < acceptedCommitRevision ) { clearPendingGraphLoadRetry(); shadowOnlyMismatch = recordPersistMismatchDiagnostic( { mismatched: true, reason: "persist-mismatch:indexeddb-behind-commit-marker", markerRevision: acceptedCommitRevision, snapshotRevision: Number(shadowSnapshot.revision || 0), marker: commitMarker, }, { source: `${source}:shadow-no-official`, resolvedBy: "shadow", }, ); } clearPendingGraphLoadRetry(); const shadowResult = applyShadowSnapshotToRuntime(chatId, shadowSnapshot, { source: `${source}:shadow-no-official`, attemptIndex, }); if (shadowOnlyMismatch?.reason && shadowResult?.loaded) { updateGraphPersistenceState({ persistMismatchReason: shadowOnlyMismatch.reason, }); } return shadowResult; } applyGraphLoadState(GRAPH_LOAD_STATES.LOADING, { chatId, reason: `indexeddb-probe-pending:${String(source || "direct-load")}`, attemptIndex, dbReady: false, writesBlocked: true, }); updateGraphPersistenceState({ storagePrimary: getPreferredGraphLocalStorePresentationSync().storagePrimary, storageMode: getPreferredGraphLocalStorePresentationSync().storageMode, dbReady: false, indexedDbLastError: "", }); scheduleIndexedDbGraphProbe(chatId, { source: `${source}:indexeddb-probe`, attemptIndex, allowOverride: true, applyEmptyState: true, }); refreshPanelLiveState(); return { success: false, loaded: false, loadState: GRAPH_LOAD_STATES.LOADING, reason: "indexeddb-probe-pending", chatId, attemptIndex, }; } export function saveGraphToChatImpl(runtime, options = {}) { const graphPersistenceState = new Proxy({}, { get(_target, key) { return (runtime.getGraphPersistenceState?.() || {})[key]; }, set(_target, key, value) { const state = runtime.getGraphPersistenceState?.() || {}; state[key] = value; return true; }, }); let currentGraph = runtime.getCurrentGraph?.() || null; const GRAPH_LOAD_STATES = runtime.GRAPH_LOAD_STATES; const allocateRequestedPersistRevision = runtime.allocateRequestedPersistRevision; const buildGraphPersistResult = runtime.buildGraphPersistResult; const buildPersistenceEnvironment = runtime.buildPersistenceEnvironment; const canPersistGraphToMetadataFallback = runtime.canPersistGraphToMetadataFallback; const cloneGraphForPersistence = runtime.cloneGraphForPersistence; const ensureBmeChatManager = runtime.ensureBmeChatManager; const ensureCurrentGraphRuntimeState = runtime.ensureCurrentGraphRuntimeState; const getContext = runtime.getContext; const getGraphPersistedRevision = runtime.getGraphPersistedRevision; const getPreferredGraphLocalStorePresentationSync = runtime.getPreferredGraphLocalStorePresentationSync; const isGraphEffectivelyEmpty = runtime.isGraphEffectivelyEmpty; const isGraphLoadStateDbReady = runtime.isGraphLoadStateDbReady; const isGraphMetadataWriteAllowed = runtime.isGraphMetadataWriteAllowed; const normalizeIndexedDbRevision = runtime.normalizeIndexedDbRevision; const persistGraphToChatMetadata = runtime.persistGraphToChatMetadata; const persistGraphToConfiguredDurableTier = runtime.persistGraphToConfiguredDurableTier; const queueGraphPersist = runtime.queueGraphPersist; const queueGraphPersistToIndexedDb = runtime.queueGraphPersistToIndexedDb; const recordLocalPersistEarlyFailure = runtime.recordLocalPersistEarlyFailure; const refreshPanelLiveState = runtime.refreshPanelLiveState; const resolveCurrentChatStateTarget = runtime.resolveCurrentChatStateTarget; const resolvePersistRevisionFloor = runtime.resolvePersistRevisionFloor; const resolvePersistenceChatId = runtime.resolvePersistenceChatId; const scheduleBmeIndexedDbTask = runtime.scheduleBmeIndexedDbTask; const updateGraphPersistenceState = runtime.updateGraphPersistenceState; const console = runtime.console || globalThis.console; const context = getContext(); if (!context || !currentGraph) { return buildGraphPersistResult({ saved: false, blocked: true, reason: "missing-context-or-graph", }); } const chatId = resolvePersistenceChatId(context, currentGraph); const { reason = "graph-save", markMutation = true, persistMetadata = false, captureShadow = Boolean(persistMetadata), immediate = markMutation, } = options; ensureCurrentGraphRuntimeState(); currentGraph = runtime.getCurrentGraph?.() || null; currentGraph.historyState.extractionCount = runtime.getExtractionCount?.() || 0; if (!chatId) { recordLocalPersistEarlyFailure("missing-chat-id", { chatId, revision: 0, }); return buildGraphPersistResult({ saved: false, blocked: true, reason: "missing-chat-id", }); } const revision = markMutation ? allocateRequestedPersistRevision(0, currentGraph) : resolvePersistRevisionFloor(0, currentGraph); const persistenceEnvironment = buildPersistenceEnvironment( context, getPreferredGraphLocalStorePresentationSync(), ); if (captureShadow) { maybeCaptureGraphShadowSnapshotImpl(runtime, reason); } const shouldQueueIndexedDbPersist = (persistenceEnvironment.hostProfile !== "luker" || persistenceEnvironment.primaryStorageTier === "authority-sql") && (markMutation || !isGraphEffectivelyEmpty(currentGraph)); if (shouldQueueIndexedDbPersist) { queueGraphPersistToIndexedDb(chatId, currentGraph, { revision, reason, }); } const metadataFallbackEnabled = Boolean(persistMetadata) || !ensureBmeChatManager(); if (!markMutation) { const hasMeaningfulGraphData = !isGraphEffectivelyEmpty(currentGraph); if ( !hasMeaningfulGraphData || graphPersistenceState.loadState === GRAPH_LOAD_STATES.EMPTY_CONFIRMED ) { return buildGraphPersistResult({ saved: false, blocked: false, reason: hasMeaningfulGraphData ? "passive-empty-confirmed-skipped" : "passive-empty-graph-skipped", revision, }); } } if (persistenceEnvironment.primaryStorageTier === "luker-chat-state") { const persistGraph = cloneGraphForPersistence(currentGraph, chatId); const chatStateTarget = resolveCurrentChatStateTarget(context); const lastProcessedAssistantFloor = Number.isFinite( Number(persistGraph?.historyState?.lastProcessedAssistantFloor), ) ? Number(persistGraph.historyState.lastProcessedAssistantFloor) : null; scheduleBmeIndexedDbTask(async () => { const persistResult = await persistGraphToConfiguredDurableTier( context, persistGraph, { chatId, revision, reason, lastProcessedAssistantFloor, chatStateTarget, graphDetached: true, }, ); if (!persistResult?.accepted) { queueGraphPersist(reason, revision, { immediate, graph: persistGraph, chatId, captureShadow, }); } refreshPanelLiveState(); }); updateGraphPersistenceState({ hostProfile: persistenceEnvironment.hostProfile, primaryStorageTier: persistenceEnvironment.primaryStorageTier, cacheStorageTier: persistenceEnvironment.cacheStorageTier, lastPersistReason: String(reason || "graph-save"), lastPersistMode: "luker-chat-state-queued", }); return buildGraphPersistResult({ saved: false, queued: true, blocked: false, accepted: false, reason: "luker-chat-state-queued", revision, saveMode: "luker-chat-state-queued", storageTier: "luker-chat-state", primaryTier: persistenceEnvironment.primaryStorageTier, cacheTier: persistenceEnvironment.cacheStorageTier, }); } if (!metadataFallbackEnabled) { const preferredLocalStore = getPreferredGraphLocalStorePresentationSync(); const saveMode = shouldQueueIndexedDbPersist ? `${preferredLocalStore.reasonPrefix}-queued` : `${preferredLocalStore.reasonPrefix}-skip`; updateGraphPersistenceState({ storagePrimary: preferredLocalStore.storagePrimary, storageMode: preferredLocalStore.storageMode, dbReady: graphPersistenceState.dbReady ?? isGraphLoadStateDbReady(graphPersistenceState.loadState), lastPersistReason: String(reason || "graph-save"), lastPersistMode: saveMode, pendingPersist: false, queuedPersistChatId: "", queuedPersistMode: "", queuedPersistReason: "", queuedPersistRotateIntegrity: false, dualWriteLastResult: { action: "save", target: preferredLocalStore.storagePrimary, queued: Boolean(shouldQueueIndexedDbPersist), success: true, chatId, revision: normalizeIndexedDbRevision(revision), reason: String(reason || "graph-save"), at: Date.now(), }, }); return buildGraphPersistResult({ saved: false, queued: Boolean(shouldQueueIndexedDbPersist), blocked: false, accepted: false, reason: shouldQueueIndexedDbPersist ? `${preferredLocalStore.reasonPrefix}-queued` : `${preferredLocalStore.reasonPrefix}-empty-skip`, revision, saveMode, storageTier: shouldQueueIndexedDbPersist ? preferredLocalStore.storagePrimary : "none", }); } if (!isGraphMetadataWriteAllowed()) { console.warn( `[ST-BME] 图谱写回已被安全保护拦截(chat=${chatId},state=${graphPersistenceState.loadState},reason=${reason})`, ); return queueGraphPersist(reason, revision, { immediate }); } const metadataPersistResult = persistGraphToChatMetadata(context, { reason, revision, immediate, }); updateGraphPersistenceState({ storageMode: "metadata-full", dualWriteLastResult: { action: "save", target: "metadata", success: Boolean(metadataPersistResult?.saved), queued: Boolean(metadataPersistResult?.queued), blocked: Boolean(metadataPersistResult?.blocked), chatId, revision: normalizeIndexedDbRevision(revision), reason: String(reason || "graph-save"), at: Date.now(), }, }); return metadataPersistResult; } export async function onRebuildLocalCacheFromLukerSidecarImpl(runtime) { const graphPersistenceState = new Proxy({}, { get(_target, key) { return (runtime.getGraphPersistenceState?.() || {})[key]; }, set(_target, key, value) { const state = runtime.getGraphPersistenceState?.() || {}; state[key] = value; return true; }, }); let currentGraph = runtime.getCurrentGraph?.() || null; const cloneGraphForPersistence = runtime.cloneGraphForPersistence; const getContext = runtime.getContext; const getCurrentChatId = runtime.getCurrentChatId; const getGraphPersistedRevision = runtime.getGraphPersistedRevision; const isLukerPrimaryPersistenceHost = runtime.isLukerPrimaryPersistenceHost; const loadGraphFromLukerSidecarV2 = runtime.loadGraphFromLukerSidecarV2; const queueGraphPersistToIndexedDb = runtime.queueGraphPersistToIndexedDb; const refreshPanelLiveState = runtime.refreshPanelLiveState; const resolveCurrentChatStateTarget = runtime.resolveCurrentChatStateTarget; const toastr = runtime.toastr; const context = getContext(); const chatStateTarget = resolveCurrentChatStateTarget(context); if (!isLukerPrimaryPersistenceHost(context)) { toastr.info("当前宿主不是 Luker,无需从主 sidecar 重建本地缓存"); return { handledToast: true, reason: "not-luker" }; } const chatId = getCurrentChatId(context); if (!chatId) { toastr.warning("当前没有聊天上下文"); return { handledToast: true, reason: "missing-chat-id" }; } const loadResult = await loadGraphFromLukerSidecarV2(chatId, { source: "panel-manual-luker-cache-rebuild", allowOverride: true, chatStateTarget, }); currentGraph = runtime.getCurrentGraph?.() || null; if (!loadResult?.loaded || !currentGraph) { toastr.warning( `无法从 Luker 主 sidecar 重建本地缓存: ${loadResult?.reason || "sidecar not available"}`, ); return { handledToast: true, result: loadResult }; } queueGraphPersistToIndexedDb(chatId, cloneGraphForPersistence(currentGraph, chatId), { revision: Math.max( Number(graphPersistenceState.lukerManifestRevision || 0), Number(getGraphPersistedRevision(currentGraph) || 0), Number(graphPersistenceState.revision || 0), ), reason: "panel-manual-luker-cache-rebuild", persistRole: "cache-mirror", scheduleCloudUpload: false, graphDetached: true, }); refreshPanelLiveState(); toastr.success("已开始从 Luker 主 sidecar 重建本地缓存"); return { handledToast: true, result: loadResult }; }