diff --git a/scripts/e2e/lib/upgrade-survivor/assertions.mjs b/scripts/e2e/lib/upgrade-survivor/assertions.mjs index 20d38490a20..d8115a7602d 100644 --- a/scripts/e2e/lib/upgrade-survivor/assertions.mjs +++ b/scripts/e2e/lib/upgrade-survivor/assertions.mjs @@ -1,6 +1,7 @@ // Assertions for upgrade-survivor E2E scenarios. import fs from "node:fs"; import path from "node:path"; +import { DatabaseSync } from "node:sqlite"; import { readPluginInstallIndex } from "../plugin-index-sqlite.mjs"; const command = process.argv[2]; @@ -481,8 +482,7 @@ function assertSessionMetadataMigrated(stateDir) { ); } - assert(fs.existsSync(targetStorePath), `agent session store missing: ${targetStorePath}`); - const store = readJson(targetStorePath); + const store = readMigratedSessionStore(stateDir, targetStorePath); const main = store["agent:main:main"]; const direct = store["agent:main:+15551234567"]; const group = store["agent:main:slack:channel:cupgrade"]; @@ -511,6 +511,33 @@ function assertSessionMetadataMigrated(stateDir) { ); } +function readMigratedSessionStore(stateDir, targetStorePath) { + if (fs.existsSync(targetStorePath)) { + return readJson(targetStorePath); + } + + const dbPath = path.join(stateDir, "agents", "main", "agent", "openclaw-agent.sqlite"); + assert(fs.existsSync(dbPath), `agent session store missing: ${targetStorePath} or ${dbPath}`); + + let db; + try { + db = new DatabaseSync(dbPath, { readOnly: true }); + const rows = db + .prepare("SELECT key, value_json FROM cache_entries WHERE scope = ?") + .all("session_entries"); + const store = {}; + for (const row of rows) { + if (typeof row?.key !== "string" || typeof row?.value_json !== "string") { + continue; + } + store[row.key] = JSON.parse(row.value_json); + } + return store; + } finally { + db?.close(); + } +} + function readInstalledPluginIndex() { const stateDir = requireEnv("OPENCLAW_STATE_DIR"); const index = readPluginInstallIndex({ stateDir }); diff --git a/src/infra/state-migrations.ts b/src/infra/state-migrations.ts index 3f8c53a6fbf..b2afc776a0a 100644 --- a/src/infra/state-migrations.ts +++ b/src/infra/state-migrations.ts @@ -1995,11 +1995,11 @@ function resolveStaleLegacySessionFile(params: { return undefined; } const legacyBackupHasTranscript = safeReadDir(path.dirname(params.legacyDir)).some( - (entry) => - entry.isDirectory() && - entry.name.startsWith(`${path.basename(params.legacyDir)}.legacy-`) && + (dirent) => + dirent.isDirectory() && + dirent.name.startsWith(`${path.basename(params.legacyDir)}.legacy-`) && fileExists( - path.join(path.dirname(params.legacyDir), entry.name, path.basename(legacySessionFile)), + path.join(path.dirname(params.legacyDir), dirent.name, path.basename(legacySessionFile)), ), ); if (legacyBackupHasTranscript) { @@ -2007,10 +2007,10 @@ function resolveStaleLegacySessionFile(params: { } const parsed = path.parse(path.basename(legacySessionFile)); const hasCollisionRename = safeReadDir(params.targetDir).some( - (entry) => - entry.isFile() && - entry.name.startsWith(`${parsed.name}.legacy-`) && - entry.name.endsWith(parsed.ext), + (dirent) => + dirent.isFile() && + dirent.name.startsWith(`${parsed.name}.legacy-`) && + dirent.name.endsWith(parsed.ext), ); if (hasCollisionRename) { return undefined;