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
63 lines
2.3 KiB
TypeScript
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([]);
|
|
});
|
|
});
|