






















@@ -5,6 +5,10 @@ import { DELIVERY_NO_REPLY_RUNTIME_CONTRACT } from "openclaw/plugin-sdk/agent-ru
55import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
66import type { OpenClawConfig } from "../../config/config.js";
77import type { SessionEntry } from "../../config/sessions/types.js";
8+import {
9+createUserTurnTranscriptRecorder,
10+type PersistedUserTurnMessage,
11+} from "../../sessions/user-turn-transcript.js";
812import type { FollowupRun, QueueSettings } from "./queue.js";
9131014const runEmbeddedPiAgentMock = vi.fn();
@@ -60,6 +64,14 @@ function joinPromptSections(...sections: Array<string | undefined>): string {
6064return promptSections.join("\n\n");
6165}
626667+function createTestUserTurnRecorder(message: PersistedUserTurnMessage) {
68+return createUserTurnTranscriptRecorder({
69+ message,
70+target: { transcriptPath: "/tmp/session.jsonl" },
71+updateMode: "none",
72+});
73+}
74+6375function requireRecord(value: unknown, label: string): Record<string, unknown> {
6476if (!value || typeof value !== "object" || Array.isArray(value)) {
6577throw new Error(`expected ${label} to be an object`);
@@ -548,7 +560,7 @@ function createQueuedRun(
548560549561describe("createFollowupRunner reply-lane admission", () => {
550562it("passes prepared media user turns to embedded runtime dispatch", async () => {
551-const userMessageForPersistence = {
563+const preparedUserTurnMessage = {
552564role: "user",
553565content: "describe this",
554566MediaPath: "/tmp/image.png",
@@ -567,7 +579,7 @@ describe("createFollowupRunner reply-lane admission", () => {
567579568580await runner(
569581createQueuedRun({
570-userMessageForPersistence,
582+userTurnTranscriptRecorder: createTestUserTurnRecorder(preparedUserTurnMessage),
571583run: {
572584provider: "anthropic",
573585model: "claude",
@@ -577,7 +589,7 @@ describe("createFollowupRunner reply-lane admission", () => {
577589578590expect(runEmbeddedPiAgentMock).toHaveBeenCalledOnce();
579591const call = requireLastMockCallArg(runEmbeddedPiAgentMock, "run embedded pi agent");
580-expect(call.userMessageForPersistence).toBe(userMessageForPersistence);
592+expect(call.userTurnTranscriptRecorder?.message).toBe(preparedUserTurnMessage);
581593});
582594583595it("runs queued followups with the session id returned by admission", async () => {
@@ -874,7 +886,7 @@ describe("createFollowupRunner runtime config", () => {
874886},
875887},
876888};
877-const userMessageForPersistence = {
889+const preparedUserTurnMessage = {
878890role: "user",
879891content: "describe this",
880892MediaPath: "/tmp/image.png",
@@ -894,7 +906,7 @@ describe("createFollowupRunner runtime config", () => {
894906895907await runner(
896908createQueuedRun({
897-userMessageForPersistence,
909+userTurnTranscriptRecorder: createTestUserTurnRecorder(preparedUserTurnMessage),
898910run: {
899911config: runtimeConfig,
900912provider: "anthropic",
@@ -905,7 +917,7 @@ describe("createFollowupRunner runtime config", () => {
905917906918expect(runCliAgentMock).toHaveBeenCalledOnce();
907919const mediaCall = requireLastMockCallArg(runCliAgentMock, "run cli agent");
908-expect(mediaCall.userTurnTranscript).toEqual({ message: userMessageForPersistence });
920+expect(mediaCall.userTurnTranscript).toEqual({ message: preparedUserTurnMessage });
909921});
910922911923it("defers queued CLI attempt terminal lifecycle events until fallback settles", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。