mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-03 10:23:34 +00:00
fix: archive role-ordering reset transcripts (#97544)
* fix: archive role-ordering reset transcripts * test: fix session reset archive lint
This commit is contained in:
@@ -1358,7 +1358,7 @@ describe("session accessor file-backed seam", () => {
|
||||
).toHaveLength(1);
|
||||
});
|
||||
|
||||
it("persists reset lifecycle entry changes with transcript replay and cleanup", async () => {
|
||||
it("persists reset lifecycle entry changes with transcript replay and archive", async () => {
|
||||
const now = Date.now();
|
||||
const sessionKey = "agent:main:main";
|
||||
const previousTranscript = path.join(tempDir, "previous-session.jsonl");
|
||||
@@ -1410,6 +1410,16 @@ describe("session accessor file-backed seam", () => {
|
||||
expect(result.replayedMessages).toBe(2);
|
||||
expect(loadSessionEntry({ sessionKey, storePath })).toMatchObject(nextEntry);
|
||||
expect(fs.existsSync(previousTranscript)).toBe(false);
|
||||
const archivedPreviousTranscripts = fs
|
||||
.readdirSync(tempDir)
|
||||
.filter((file) => file.startsWith("previous-session.jsonl.reset."));
|
||||
expect(archivedPreviousTranscripts).toHaveLength(1);
|
||||
const [archivedPreviousTranscriptName] = archivedPreviousTranscripts;
|
||||
const archivedPreviousTranscript = path.join(tempDir, archivedPreviousTranscriptName);
|
||||
expect(fs.readFileSync(archivedPreviousTranscript, "utf-8")).toContain(
|
||||
'"id":"previous-session"',
|
||||
);
|
||||
expect(fs.readFileSync(archivedPreviousTranscript, "utf-8")).toContain('"content":"hi"');
|
||||
expect(fs.readFileSync(nextTranscript, "utf-8")).toContain('"content":"hello"');
|
||||
});
|
||||
|
||||
|
||||
@@ -1632,10 +1632,12 @@ export async function persistSessionResetLifecycle(params: {
|
||||
});
|
||||
|
||||
if (params.cleanupPreviousTranscript && params.previousSessionId) {
|
||||
cleanupPreviousResetTranscripts({
|
||||
await archivePreviousSessionTranscript({
|
||||
agentId: params.agentId ?? resolveAgentIdFromSessionKey(params.sessionKey),
|
||||
previousEntry: params.previousEntry,
|
||||
previousSessionId: params.previousSessionId,
|
||||
previousEntry:
|
||||
params.previousEntry.sessionId === params.previousSessionId
|
||||
? params.previousEntry
|
||||
: { ...params.previousEntry, sessionId: params.previousSessionId },
|
||||
storePath: params.storePath,
|
||||
});
|
||||
}
|
||||
@@ -2709,34 +2711,6 @@ async function restoreTemporarySessionMapping(
|
||||
}
|
||||
}
|
||||
|
||||
function cleanupPreviousResetTranscripts(params: {
|
||||
agentId: string;
|
||||
previousEntry: SessionEntry;
|
||||
previousSessionId: string;
|
||||
storePath: string;
|
||||
}): void {
|
||||
const transcriptCandidates = new Set<string>();
|
||||
const resolved = resolveSessionFilePath(
|
||||
params.previousSessionId,
|
||||
params.previousEntry,
|
||||
resolveSessionFilePathOptions({
|
||||
agentId: params.agentId,
|
||||
storePath: params.storePath,
|
||||
}),
|
||||
);
|
||||
if (resolved) {
|
||||
transcriptCandidates.add(resolved);
|
||||
}
|
||||
transcriptCandidates.add(resolveSessionTranscriptPath(params.previousSessionId, params.agentId));
|
||||
for (const candidate of transcriptCandidates) {
|
||||
try {
|
||||
fs.unlinkSync(candidate);
|
||||
} catch {
|
||||
// Best-effort cleanup.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function archivePreviousSessionTranscript(params: {
|
||||
agentId: string;
|
||||
onArchiveError?: (error: unknown, sourcePath: string) => void;
|
||||
|
||||
Reference in New Issue
Block a user