mirror of
https://github.com/harivansh-afk/clanker-agent.git
synced 2026-04-15 10:05:14 +00:00
- Rename all package names from companion-* to clanker-* - Update npm scopes from @mariozechner to @harivansh-afk - Rename config directories .companion -> .clanker - Rename environment variables COMPANION_* -> CLANKER_* - Update all documentation, README files, and install scripts - Rename package directories (companion-channels, companion-grind, companion-teams) - Update GitHub URLs to harivansh-afk/clanker-agent - Preserve full git history from companion-cloud monorepo
80 lines
2.5 KiB
TypeScript
80 lines
2.5 KiB
TypeScript
import type { AgentMessage } from "@mariozechner/clanker-agent-core";
|
|
import type { AssistantMessage, Model } from "@mariozechner/clanker-ai";
|
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
import { generateSummary } from "../src/core/compaction/index.js";
|
|
|
|
const { completeSimpleMock } = vi.hoisted(() => ({
|
|
completeSimpleMock: vi.fn(),
|
|
}));
|
|
|
|
vi.mock("@mariozechner/clanker-ai", async (importOriginal) => {
|
|
const actual = await importOriginal<typeof import("@mariozechner/clanker-ai")>();
|
|
return {
|
|
...actual,
|
|
completeSimple: completeSimpleMock,
|
|
};
|
|
});
|
|
|
|
function createModel(reasoning: boolean): Model<"anthropic-messages"> {
|
|
return {
|
|
id: reasoning ? "reasoning-model" : "non-reasoning-model",
|
|
name: reasoning ? "Reasoning Model" : "Non-reasoning Model",
|
|
api: "anthropic-messages",
|
|
provider: "anthropic",
|
|
baseUrl: "https://api.anthropic.com",
|
|
reasoning,
|
|
input: ["text"],
|
|
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
contextWindow: 200000,
|
|
maxTokens: 8192,
|
|
};
|
|
}
|
|
|
|
const mockSummaryResponse: AssistantMessage = {
|
|
role: "assistant",
|
|
content: [{ type: "text", text: "## Goal\nTest summary" }],
|
|
api: "anthropic-messages",
|
|
provider: "anthropic",
|
|
model: "claude-sonnet-4-5",
|
|
usage: {
|
|
input: 10,
|
|
output: 10,
|
|
cacheRead: 0,
|
|
cacheWrite: 0,
|
|
totalTokens: 20,
|
|
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
|
|
},
|
|
stopReason: "stop",
|
|
timestamp: Date.now(),
|
|
};
|
|
|
|
const messages: AgentMessage[] = [
|
|
{ role: "user", content: "Summarize this.", timestamp: Date.now() },
|
|
];
|
|
|
|
describe("generateSummary reasoning options", () => {
|
|
beforeEach(() => {
|
|
completeSimpleMock.mockReset();
|
|
completeSimpleMock.mockResolvedValue(mockSummaryResponse);
|
|
});
|
|
|
|
it("sets reasoning=high for reasoning-capable models", async () => {
|
|
await generateSummary(messages, createModel(true), 2000, "test-key");
|
|
|
|
expect(completeSimpleMock).toHaveBeenCalledTimes(1);
|
|
expect(completeSimpleMock.mock.calls[0][2]).toMatchObject({
|
|
reasoning: "high",
|
|
apiKey: "test-key",
|
|
});
|
|
});
|
|
|
|
it("does not set reasoning for non-reasoning models", async () => {
|
|
await generateSummary(messages, createModel(false), 2000, "test-key");
|
|
|
|
expect(completeSimpleMock).toHaveBeenCalledTimes(1);
|
|
expect(completeSimpleMock.mock.calls[0][2]).toMatchObject({
|
|
apiKey: "test-key",
|
|
});
|
|
expect(completeSimpleMock.mock.calls[0][2]).not.toHaveProperty("reasoning");
|
|
});
|
|
});
|