diff --git a/packages/app/src/agent-stream/turn-boundary.test.ts b/packages/app/src/agent-stream/turn-boundary.test.ts index 33e56901d..14e5ea776 100644 --- a/packages/app/src/agent-stream/turn-boundary.test.ts +++ b/packages/app/src/agent-stream/turn-boundary.test.ts @@ -1,9 +1,6 @@ import { describe, expect, it } from "vitest"; import type { StreamItem } from "@/types/stream"; -import { - resolveAssistantTurnBoundaryMessageId, - resolveAssistantTurnForkBoundary, -} from "./turn-boundary"; +import { resolveAssistantTurnForkBoundary } from "./turn-boundary"; function timestamp(seed: number): Date { return new Date(`2026-01-01T00:00:${seed.toString().padStart(2, "0")}.000Z`); @@ -32,40 +29,6 @@ function assistantMessage( }; } -describe("resolveAssistantTurnBoundaryMessageId", () => { - it("uses the selected assistant message id", () => { - const selected = assistantMessage("assistant-1", 2, "msg-assistant-1"); - - expect( - resolveAssistantTurnBoundaryMessageId({ - items: [userMessage("user-1", 1), selected], - startIndex: 1, - }), - ).toBe("msg-assistant-1"); - }); - - it("does not borrow a boundary id from another assistant in the same turn", () => { - const first = assistantMessage("assistant-1", 2, "msg-assistant-1"); - const selected = assistantMessage("assistant-2", 3); - - expect( - resolveAssistantTurnBoundaryMessageId({ - items: [userMessage("user-1", 1), first, selected], - startIndex: 2, - }), - ).toBeUndefined(); - }); - - it("requires the selected item to be an assistant message", () => { - expect( - resolveAssistantTurnBoundaryMessageId({ - items: [userMessage("user-1", 1), assistantMessage("assistant-1", 2, "msg-assistant-1")], - startIndex: 0, - }), - ).toBeUndefined(); - }); -}); - describe("resolveAssistantTurnForkBoundary", () => { it("forks a failed assistant turn from its Paseo timeline cursor without a provider message id", () => { const failedTurn = { @@ -117,6 +80,29 @@ describe("resolveAssistantTurnForkBoundary", () => { ).toEqual({ boundaryMessageId: "msg-assistant-1" }); }); + it("does not borrow a provider message id from another assistant in the same turn", () => { + const first = assistantMessage("assistant-1", 2, "msg-assistant-1"); + const selected = assistantMessage("assistant-2", 3); + + expect( + resolveAssistantTurnForkBoundary({ + items: [userMessage("user-1", 1), first, selected], + startIndex: 2, + supportsTimelineCursor: false, + }), + ).toBeUndefined(); + }); + + it("requires the selected item to be an assistant message", () => { + expect( + resolveAssistantTurnForkBoundary({ + items: [userMessage("user-1", 1), assistantMessage("assistant-1", 2, "msg-assistant-1")], + startIndex: 0, + supportsTimelineCursor: false, + }), + ).toBeUndefined(); + }); + it("does not offer an unavailable boundary", () => { expect( resolveAssistantTurnForkBoundary({ diff --git a/packages/app/src/agent-stream/turn-boundary.ts b/packages/app/src/agent-stream/turn-boundary.ts index 637c83b72..f7cbe8c00 100644 --- a/packages/app/src/agent-stream/turn-boundary.ts +++ b/packages/app/src/agent-stream/turn-boundary.ts @@ -4,18 +4,6 @@ export type AssistantTurnForkBoundary = | { boundaryCursor: TimelinePosition; boundaryMessageId?: string } | { boundaryCursor?: undefined; boundaryMessageId: string }; -export function resolveAssistantTurnBoundaryMessageId(input: { - items: readonly StreamItem[]; - startIndex: number; -}): string | undefined { - const item = input.items[input.startIndex]; - if (item?.kind !== "assistant_message") { - return undefined; - } - // Forking without the selected assistant's durable message id would send the wrong slice. - return item.messageId || undefined; -} - export function resolveAssistantTurnForkBoundary(input: { items: readonly StreamItem[]; startIndex: number;