Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline (Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/* packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
52 lines
2.0 KiB
TypeScript
52 lines
2.0 KiB
TypeScript
import type { MessageBlock } from "@rakazo/contracts";
|
|
import { describe, expect, it } from "vitest";
|
|
import { takeLiveMessage, updateCloudAgentMessages } from "./thread-message-updates.js";
|
|
|
|
const cloud = (agentId: string): MessageBlock => ({
|
|
kind: "cloud_agent",
|
|
agentId,
|
|
title: "Agent",
|
|
status: "running",
|
|
url: "",
|
|
});
|
|
|
|
describe("shared message updates", () => {
|
|
it("takes only the matching run and drops obsolete unscoped progress in order", () => {
|
|
const messages = [
|
|
{ id: "first" },
|
|
{ id: "progress:legacy" },
|
|
{ id: "progress:current", runId: "current" },
|
|
{ id: "progress:other", runId: "other" },
|
|
{ id: "last" },
|
|
];
|
|
const result = takeLiveMessage(messages, "progress:current");
|
|
expect(result.previous).toBe(messages[2]);
|
|
expect(result.remaining).toEqual([messages[0], messages[3], messages[4]]);
|
|
expect(messages).toHaveLength(5);
|
|
});
|
|
|
|
it("updates every matching cloud block while preserving metadata and unrelated messages", () => {
|
|
const messages = [
|
|
{ id: "first", replyToMessageId: "reply", blocks: [cloud("agent"), cloud("other")] },
|
|
{ id: "second", replyToMessageId: "reply", blocks: [cloud("agent")] },
|
|
{
|
|
id: "third",
|
|
replyToMessageId: "reply",
|
|
blocks: [{ kind: "text", text: "unchanged" } as MessageBlock],
|
|
},
|
|
];
|
|
const result = updateCloudAgentMessages(messages, {
|
|
messageId: "first",
|
|
agentId: "agent",
|
|
status: "finished",
|
|
});
|
|
expect(result.map((message) => message.id)).toEqual(["first", "second", "third"]);
|
|
expect(result[0]?.replyToMessageId).toBe("reply");
|
|
expect(result[0]?.blocks[0]).toMatchObject({ agentId: "agent", status: "finished" });
|
|
expect(result[1]?.blocks[0]).toMatchObject({ agentId: "agent", status: "finished" });
|
|
expect(result[0]?.blocks[1]).toBe(messages[0]?.blocks[1]);
|
|
expect(result[2]).toBe(messages[2]);
|
|
expect(messages[0]?.blocks[0]).toMatchObject({ status: "running" });
|
|
});
|
|
});
|