Add ServerAdapterModule capabilities from fork's adapter-utils 0.3.1
Bring the K8s adapter up to parity with the fork's ServerAdapterModule contract by adding sessionManagement, listSkills/syncSkills, listModels with Bedrock detection, and promptBundleKey support in the session codec. - Declare sessionManagement with nativeContextManagement: "confirmed" so Paperclip skips threshold-based session compaction (Claude manages its own context) - Add ephemeral skill management (listSkills/syncSkills) mirroring claude_local — reports skill state without runtime persistence since skills are injected via prompt bundle into ephemeral Job pods - Add listModels() with Bedrock environment detection, returning region-qualified model IDs when CLAUDE_CODE_USE_BEDROCK or ANTHROPIC_BEDROCK_BASE_URL are set - Extend session codec to round-trip promptBundleKey field - Remove the `as ServerAdapterModule` cast — the return type now satisfies the full interface Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
||||
import { listK8sModels } from "./models.js";
|
||||
|
||||
describe("listK8sModels", () => {
|
||||
const savedEnv: Record<string, string | undefined> = {};
|
||||
|
||||
beforeEach(() => {
|
||||
savedEnv.CLAUDE_CODE_USE_BEDROCK = process.env.CLAUDE_CODE_USE_BEDROCK;
|
||||
savedEnv.ANTHROPIC_BEDROCK_BASE_URL = process.env.ANTHROPIC_BEDROCK_BASE_URL;
|
||||
delete process.env.CLAUDE_CODE_USE_BEDROCK;
|
||||
delete process.env.ANTHROPIC_BEDROCK_BASE_URL;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
for (const [key, value] of Object.entries(savedEnv)) {
|
||||
if (value === undefined) delete process.env[key];
|
||||
else process.env[key] = value;
|
||||
}
|
||||
});
|
||||
|
||||
it("returns direct API models by default", async () => {
|
||||
const models = await listK8sModels();
|
||||
expect(models.some((m) => m.id === "claude-opus-4-6")).toBe(true);
|
||||
expect(models.every((m) => !m.id.includes("anthropic."))).toBe(true);
|
||||
});
|
||||
|
||||
it("returns Bedrock models when CLAUDE_CODE_USE_BEDROCK=1", async () => {
|
||||
process.env.CLAUDE_CODE_USE_BEDROCK = "1";
|
||||
const models = await listK8sModels();
|
||||
expect(models.some((m) => m.id.includes("anthropic."))).toBe(true);
|
||||
expect(models.every((m) => !m.id.startsWith("claude-"))).toBe(true);
|
||||
});
|
||||
|
||||
it("returns Bedrock models when CLAUDE_CODE_USE_BEDROCK=true", async () => {
|
||||
process.env.CLAUDE_CODE_USE_BEDROCK = "true";
|
||||
const models = await listK8sModels();
|
||||
expect(models.some((m) => m.id.includes("anthropic."))).toBe(true);
|
||||
});
|
||||
|
||||
it("returns Bedrock models when ANTHROPIC_BEDROCK_BASE_URL is set", async () => {
|
||||
process.env.ANTHROPIC_BEDROCK_BASE_URL = "https://bedrock.us-east-1.amazonaws.com";
|
||||
const models = await listK8sModels();
|
||||
expect(models.some((m) => m.id.includes("anthropic."))).toBe(true);
|
||||
});
|
||||
|
||||
it("ignores blank ANTHROPIC_BEDROCK_BASE_URL", async () => {
|
||||
process.env.ANTHROPIC_BEDROCK_BASE_URL = " ";
|
||||
const models = await listK8sModels();
|
||||
expect(models.some((m) => m.id === "claude-opus-4-6")).toBe(true);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user