Files
wehub-resource-sync 555e282cc4
pi-agent-plugin checks / lint (push) Has been cancelled
pi-agent-plugin checks / test (20) (push) Has been cancelled
pi-agent-plugin checks / test (22) (push) Has been cancelled
pi-agent-plugin checks / build (push) Has been cancelled
TypeScript SDK CI / check_changes (push) Has been cancelled
TypeScript SDK CI / changelog_check (push) Has been cancelled
ci / changelog_check (push) Has been cancelled
ci / check_changes (push) Has been cancelled
ci / build_mem0 (3.10) (push) Has been cancelled
ci / build_mem0 (3.11) (push) Has been cancelled
ci / build_mem0 (3.12) (push) Has been cancelled
CLI Node CI / lint (push) Has been cancelled
CLI Node CI / test (20) (push) Has been cancelled
CLI Node CI / test (22) (push) Has been cancelled
CLI Node CI / build (push) Has been cancelled
CLI Python CI / lint (push) Has been cancelled
CLI Python CI / test (3.10) (push) Has been cancelled
CLI Python CI / test (3.11) (push) Has been cancelled
CLI Python CI / test (3.12) (push) Has been cancelled
CLI Python CI / build (push) Has been cancelled
openclaw checks / lint (push) Has been cancelled
openclaw checks / test (20) (push) Has been cancelled
openclaw checks / test (22) (push) Has been cancelled
openclaw checks / build (push) Has been cancelled
opencode-plugin checks / build (push) Has been cancelled
TypeScript SDK CI / build_ts_sdk (20) (push) Has been cancelled
TypeScript SDK CI / build_ts_sdk (22) (push) Has been cancelled
TypeScript SDK CI / integration_ts_sdk (20) (push) Has been cancelled
TypeScript SDK CI / integration_ts_sdk (22) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:03:45 +08:00

63 lines
2.3 KiB
TypeScript

import { describe, it, expect } from "vitest";
import { extractConversation } from "../src/capture/index.ts";
describe("extractConversation", () => {
it("extracts user and assistant text messages", () => {
const messages = [
{ role: "user", content: "Hello" },
{ role: "assistant", content: "Hi there!" },
];
const result = extractConversation(messages);
expect(result).toHaveLength(2);
expect(result[0]).toEqual({ role: "user", content: "Hello" });
expect(result[1]).toEqual({ role: "assistant", content: "Hi there!" });
});
it("skips assistant tool_use blocks, keeps text blocks", () => {
const messages = [
{ role: "user", content: "Search" },
{ role: "assistant", content: [{ type: "tool_use", id: "x", name: "mem0" }] },
{ role: "tool", content: "results" },
{ role: "assistant", content: "Here are the results" },
];
const result = extractConversation(messages);
expect(result).toHaveLength(2);
expect(result[0]).toEqual({ role: "user", content: "Search" });
expect(result[1]).toEqual({ role: "assistant", content: "Here are the results" });
});
it("extracts text from content arrays for both roles", () => {
const messages = [
{ role: "user", content: [{ type: "text", text: "Hello world" }] },
{ role: "assistant", content: [{ type: "text", text: "Response" }, { type: "tool_use", id: "x" }] },
];
const result = extractConversation(messages);
expect(result).toHaveLength(2);
expect(result[0].content).toBe("Hello world");
expect(result[1].content).toBe("Response");
});
it("skips tool and system messages", () => {
const messages = [
{ role: "system", content: "You are helpful" },
{ role: "user", content: "Hi" },
{ role: "tool", content: "tool output" },
];
const result = extractConversation(messages);
expect(result).toHaveLength(1);
expect(result[0]).toEqual({ role: "user", content: "Hi" });
});
it("skips assistant messages with only tool_use (no text)", () => {
const messages = [
{ role: "assistant", content: [{ type: "tool_use", id: "x", name: "bash" }] },
];
const result = extractConversation(messages);
expect(result).toHaveLength(0);
});
it("returns empty array for empty input", () => {
expect(extractConversation([])).toEqual([]);
});
});