Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
62 lines
1.8 KiB
TypeScript
62 lines
1.8 KiB
TypeScript
import { expect, test } from "vitest";
|
|
import type { AgentActivityMessage } from "@tutti-os/agent-activity-core";
|
|
import { resolveAgentGUIConversationActivityMessage } from "./agentGuiConversationActivityMessage.ts";
|
|
|
|
test("activity message selects the latest in-memory agent text without hydration", () => {
|
|
expect(
|
|
resolveAgentGUIConversationActivityMessage([
|
|
message("user", "new user prompt", 30),
|
|
message("assistant", "older answer", 10),
|
|
message("agent", "latest\nanswer", 20)
|
|
])
|
|
).toBe("latest answer");
|
|
});
|
|
|
|
test("activity message ignores tool calls and empty agent payloads", () => {
|
|
expect(
|
|
resolveAgentGUIConversationActivityMessage([
|
|
message("assistant", "tool details", 20, "tool_call"),
|
|
message("assistant", "", 30)
|
|
])
|
|
).toBeNull();
|
|
});
|
|
|
|
test("activity message ignores explicitly non-user-visible assistant output", () => {
|
|
const hidden = message("assistant", "internal settling output", 30);
|
|
hidden.semantics = { userVisibleAssistantResponse: false };
|
|
|
|
expect(resolveAgentGUIConversationActivityMessage([hidden])).toBeNull();
|
|
});
|
|
|
|
test("activity message compacts provider text content blocks", () => {
|
|
const candidate = message("assistant", "", 30);
|
|
candidate.payload.content = [
|
|
{ type: "text", text: "First line" },
|
|
{ type: "image", url: "ignored" },
|
|
{ type: "text", text: "second\nline" }
|
|
];
|
|
|
|
expect(resolveAgentGUIConversationActivityMessage([candidate])).toBe(
|
|
"First line second line"
|
|
);
|
|
});
|
|
|
|
function message(
|
|
role: string,
|
|
text: string,
|
|
occurredAtUnixMs: number,
|
|
kind = "text"
|
|
): AgentActivityMessage {
|
|
return {
|
|
agentSessionId: "session-1",
|
|
kind,
|
|
messageId: `${role}-${occurredAtUnixMs}`,
|
|
occurredAtUnixMs,
|
|
payload: { text },
|
|
role,
|
|
sequence: occurredAtUnixMs,
|
|
turnId: "turn-1",
|
|
version: occurredAtUnixMs
|
|
};
|
|
}
|