mirror of
https://github.com/moltbot/moltbot.git
synced 2026-05-13 23:56:07 +00:00
test: remove codex context-engine transcript locators
This commit is contained in:
@@ -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<ContextEngine["bootstrap"]>
|
||||
>[0];
|
||||
expect(bootstrapParams.sessionId).toBe("session-1");
|
||||
const bootstrapParams = requireFirstCallArg<
|
||||
Parameters<NonNullable<ContextEngine["bootstrap"]>>[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<Parameters<ContextEngine["assemble"]>[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<NonNullable<ContextEngine["afterTurn"]>>[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<ContextEngine["afterTurn"]>
|
||||
>[0];
|
||||
expect(afterTurnCall.sessionId).toBe("session-1");
|
||||
const afterTurnCall = requireFirstCallArg<
|
||||
Parameters<NonNullable<ContextEngine["afterTurn"]>>[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<NonNullable<ContextEngine["afterTurn"]>>[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);
|
||||
|
||||
Reference in New Issue
Block a user