mirror of
https://github.com/harivansh-afk/clanker-agent.git
synced 2026-04-15 07:04:45 +00:00
- Copy all pi-mono source into apps/companion-os/ - Update Dockerfile to COPY pre-built binary instead of downloading from GitHub Releases - Update deploy-staging.yml to build pi from source (bun compile) before Docker build - Add apps/companion-os/** to path triggers - No more cross-repo dispatch needed Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
isThinkingPart,
|
|
retainThoughtSignature,
|
|
} from "../src/providers/google-shared.js";
|
|
|
|
describe("Google thinking detection (thoughtSignature)", () => {
|
|
it("treats part.thought === true as thinking", () => {
|
|
expect(isThinkingPart({ thought: true, thoughtSignature: undefined })).toBe(
|
|
true,
|
|
);
|
|
expect(
|
|
isThinkingPart({ thought: true, thoughtSignature: "opaque-signature" }),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("does not treat thoughtSignature alone as thinking", () => {
|
|
// Per Google docs, thoughtSignature is for context replay and can appear on any part type.
|
|
// Only thought === true indicates thinking content.
|
|
// See: https://ai.google.dev/gemini-api/docs/thought-signatures
|
|
expect(
|
|
isThinkingPart({
|
|
thought: undefined,
|
|
thoughtSignature: "opaque-signature",
|
|
}),
|
|
).toBe(false);
|
|
expect(
|
|
isThinkingPart({ thought: false, thoughtSignature: "opaque-signature" }),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("does not treat empty/missing signatures as thinking if thought is not set", () => {
|
|
expect(
|
|
isThinkingPart({ thought: undefined, thoughtSignature: undefined }),
|
|
).toBe(false);
|
|
expect(isThinkingPart({ thought: false, thoughtSignature: "" })).toBe(
|
|
false,
|
|
);
|
|
});
|
|
|
|
it("preserves the existing signature when subsequent deltas omit thoughtSignature", () => {
|
|
const first = retainThoughtSignature(undefined, "sig-1");
|
|
expect(first).toBe("sig-1");
|
|
|
|
const second = retainThoughtSignature(first, undefined);
|
|
expect(second).toBe("sig-1");
|
|
|
|
const third = retainThoughtSignature(second, "");
|
|
expect(third).toBe("sig-1");
|
|
});
|
|
|
|
it("updates the signature when a new non-empty signature arrives", () => {
|
|
const updated = retainThoughtSignature("sig-1", "sig-2");
|
|
expect(updated).toBe("sig-2");
|
|
});
|
|
});
|