From 24e1fe3bf2cfc7c3c5d141acdd2ccfe85d2ca3a3 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 9 May 2026 16:32:01 +0100 Subject: [PATCH] test: remove codex context-engine transcript locators --- .../run-attempt.context-engine.test.ts | 67 +++++++++---------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/extensions/codex/src/app-server/run-attempt.context-engine.test.ts b/extensions/codex/src/app-server/run-attempt.context-engine.test.ts index ae652adb6e6..283d4b76858 100644 --- a/extensions/codex/src/app-server/run-attempt.context-engine.test.ts +++ b/extensions/codex/src/app-server/run-attempt.context-engine.test.ts @@ -5,9 +5,7 @@ import type { AgentMessage } from "openclaw/plugin-sdk/agent-core"; import type { EmbeddedRunAttemptParams } from "openclaw/plugin-sdk/agent-harness"; import { appendSqliteSessionTranscriptEvent, - createSqliteSessionTranscriptLocator, embeddedAgentLog, - SessionManager, type HarnessContextEngine as ContextEngine, } from "openclaw/plugin-sdk/agent-harness-runtime"; import { replaceSqliteSessionTranscriptEvents } from "openclaw/plugin-sdk/session-store-runtime"; @@ -22,12 +20,11 @@ import { createCodexTestModel } from "./test-support.js"; let tempDir: string; -function createParams(transcriptLocator: string, workspaceDir: string): EmbeddedRunAttemptParams { +function createParams(sessionId: string, workspaceDir: string): EmbeddedRunAttemptParams { return { prompt: "hello", - sessionId: "session-1", sessionKey: "agent:main:session-1", - transcriptLocator, + sessionId, workspaceDir, runId: "run-1", provider: "codex", @@ -70,10 +67,10 @@ function userMessage(text: string, timestamp: number): AgentMessage { } as AgentMessage; } -function seedSessionTranscript(transcriptLocator: string, messages: AgentMessage[]): void { +function seedSessionTranscript(sessionId: string, messages: AgentMessage[]): void { replaceSqliteSessionTranscriptEvents({ agentId: "main", - sessionId: "session-1", + sessionId, events: [ { type: "session", @@ -92,8 +89,8 @@ function seedSessionTranscript(transcriptLocator: string, messages: AgentMessage }); } -function testTranscriptLocator(sessionId = "session-1"): string { - return createSqliteSessionTranscriptLocator({ agentId: "main", sessionId }); +function testSessionId(sessionId = "session-1"): string { + return sessionId; } function threadStartResult(threadId = "thread-1") { @@ -300,13 +297,12 @@ describe("runCodexAppServerAttempt context-engine lifecycle", () => { }); it("bootstraps and assembles non-legacy context before the Codex turn starts", async () => { - const transcriptLocator = testTranscriptLocator(); + const sessionId = testSessionId(); const workspaceDir = path.join(tempDir, "workspace"); - seedSessionTranscript(transcriptLocator, [assistantMessage("existing context", Date.now())]); - const openSpy = vi.spyOn(SessionManager, "open"); + seedSessionTranscript(sessionId, [assistantMessage("existing context", Date.now())]); const contextEngine = createContextEngine(); const harness = createStartedThreadHarness(); - const params = createParams(transcriptLocator, workspaceDir); + const params = createParams(sessionId, workspaceDir); params.contextEngine = contextEngine; params.contextTokenBudget = 321; params.config = { memory: { citations: "on" } } as EmbeddedRunAttemptParams["config"]; @@ -318,18 +314,18 @@ describe("runCodexAppServerAttempt context-engine lifecycle", () => { throw new Error("expected bootstrap hook"); } expect(contextEngine.bootstrap).toHaveBeenCalledTimes(1); - const bootstrapParams = requireFirstCallArg(contextEngine.bootstrap, "bootstrap") as Parameters< - NonNullable - >[0]; - expect(bootstrapParams.sessionId).toBe("session-1"); + const bootstrapParams = requireFirstCallArg< + Parameters>[0] + >(contextEngine.bootstrap, "bootstrap"); + expect(bootstrapParams.sessionId).toBe(sessionId); expect(bootstrapParams.sessionKey).toBe("agent:main:session-1"); - expect(bootstrapParams.transcriptLocator).toBe(transcriptLocator); expect(contextEngine.assemble).toHaveBeenCalledTimes(1); - const assembleParams = requireFirstCallArg(contextEngine.assemble, "assemble") as Parameters< - ContextEngine["assemble"] - >[0]; - expect(assembleParams.sessionId).toBe("session-1"); + const assembleParams = requireFirstCallArg[0]>( + contextEngine.assemble, + "assemble", + ); + expect(assembleParams.sessionId).toBe(sessionId); expect(assembleParams.sessionKey).toBe("agent:main:session-1"); expect(assembleParams.tokenBudget).toBe(321); expect(assembleParams.citationsMode).toBe("on"); @@ -346,7 +342,6 @@ describe("runCodexAppServerAttempt context-engine lifecycle", () => { await harness.completeTurn(); await run; - expect(openSpy).not.toHaveBeenCalled(); }); it("keeps current-turn context at the front of the Codex context-engine prompt", async () => { @@ -381,7 +376,7 @@ describe("runCodexAppServerAttempt context-engine lifecycle", () => { }); it("calls afterTurn with the mirrored transcript and runs turn maintenance", async () => { - const transcriptLocator = testTranscriptLocator(); + const sessionId = testSessionId(); const workspaceDir = path.join(tempDir, "workspace"); const afterTurn = vi.fn( async (_params: Parameters>[0]) => undefined, @@ -389,7 +384,7 @@ describe("runCodexAppServerAttempt context-engine lifecycle", () => { const maintain = vi.fn(async () => ({ changed: false, bytesFreed: 0, rewrittenEntries: 0 })); const contextEngine = createContextEngine({ afterTurn, maintain, bootstrap: undefined }); const harness = createStartedThreadHarness(); - const params = createParams(transcriptLocator, workspaceDir); + const params = createParams(sessionId, workspaceDir); params.contextEngine = contextEngine; params.contextTokenBudget = 111; @@ -399,10 +394,10 @@ describe("runCodexAppServerAttempt context-engine lifecycle", () => { await run; expect(afterTurn).toHaveBeenCalledTimes(1); - const afterTurnCall = requireFirstCallArg(afterTurn, "afterTurn") as Parameters< - NonNullable - >[0]; - expect(afterTurnCall.sessionId).toBe("session-1"); + const afterTurnCall = requireFirstCallArg< + Parameters>[0] + >(afterTurn, "afterTurn"); + expect(afterTurnCall.sessionId).toBe(sessionId); expect(afterTurnCall.sessionKey).toBe("agent:main:session-1"); expect(afterTurnCall.prePromptMessageCount).toBe(0); expect(afterTurnCall.tokenBudget).toBe(111); @@ -412,9 +407,9 @@ describe("runCodexAppServerAttempt context-engine lifecycle", () => { }); it("reloads mirrored history after bootstrap mutates the session transcript", async () => { - const transcriptLocator = testTranscriptLocator(); + const sessionId = testSessionId(); const workspaceDir = path.join(tempDir, "workspace"); - seedSessionTranscript(transcriptLocator, [assistantMessage("existing context", Date.now())]); + seedSessionTranscript(sessionId, [assistantMessage("existing context", Date.now())]); const afterTurn = vi.fn( async (_params: Parameters>[0]) => undefined, ); @@ -440,7 +435,7 @@ describe("runCodexAppServerAttempt context-engine lifecycle", () => { maintain: undefined, }); const harness = createStartedThreadHarness(); - const params = createParams(transcriptLocator, workspaceDir); + const params = createParams(sessionId, workspaceDir); params.contextEngine = contextEngine; const run = runCodexAppServerAttempt(params); @@ -463,7 +458,7 @@ describe("runCodexAppServerAttempt context-engine lifecycle", () => { }); it("logs assemble failures as a formatted message instead of the raw error object", async () => { - const transcriptLocator = testTranscriptLocator(); + const sessionId = testSessionId(); const workspaceDir = path.join(tempDir, "workspace"); const rawError = new Error("Authorization: Bearer sk-abcdefghijklmnopqrstuv"); const contextEngine = createContextEngine({ @@ -474,7 +469,7 @@ describe("runCodexAppServerAttempt context-engine lifecycle", () => { }); const warn = vi.spyOn(embeddedAgentLog, "warn").mockImplementation(() => undefined); const harness = createStartedThreadHarness(); - const params = createParams(transcriptLocator, workspaceDir); + const params = createParams(sessionId, workspaceDir); params.contextEngine = contextEngine; const run = runCodexAppServerAttempt(params); @@ -492,7 +487,7 @@ describe("runCodexAppServerAttempt context-engine lifecycle", () => { }); it("falls back to ingestBatch and skips turn maintenance on prompt failure", async () => { - const transcriptLocator = testTranscriptLocator(); + const sessionId = testSessionId(); const workspaceDir = path.join(tempDir, "workspace"); const ingestBatch = vi.fn(async () => ({ ingestedCount: 2 })); const maintain = vi.fn(async () => ({ changed: false, bytesFreed: 0, rewrittenEntries: 0 })); @@ -503,7 +498,7 @@ describe("runCodexAppServerAttempt context-engine lifecycle", () => { bootstrap: undefined, }); const harness = createStartedThreadHarness(); - const params = createParams(transcriptLocator, workspaceDir); + const params = createParams(sessionId, workspaceDir); params.contextEngine = contextEngine; const run = runCodexAppServerAttempt(params);