mirror of
https://github.com/harivansh-afk/sandbox-agent.git
synced 2026-04-18 00:02:48 +00:00
67 lines
2.5 KiB
TypeScript
67 lines
2.5 KiB
TypeScript
/**
|
|
* Tests for OpenCode-compatible provider/model listing.
|
|
*/
|
|
|
|
import { describe, it, expect, beforeAll, afterEach, beforeEach } from "vitest";
|
|
import { createOpencodeClient, type OpencodeClient } from "@opencode-ai/sdk";
|
|
import { spawnSandboxAgent, buildSandboxAgent, type SandboxAgentHandle } from "./helpers/spawn";
|
|
|
|
describe("OpenCode-compatible Model API", () => {
|
|
let handle: SandboxAgentHandle;
|
|
let client: OpencodeClient;
|
|
|
|
beforeAll(async () => {
|
|
await buildSandboxAgent();
|
|
});
|
|
|
|
beforeEach(async () => {
|
|
handle = await spawnSandboxAgent({ opencodeCompat: true });
|
|
client = createOpencodeClient({
|
|
baseUrl: `${handle.baseUrl}/opencode`,
|
|
headers: { Authorization: `Bearer ${handle.token}` },
|
|
});
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await handle?.dispose();
|
|
});
|
|
|
|
it("should list models grouped by agent with real model IDs", async () => {
|
|
const response = await client.provider.list();
|
|
const providers = response.data?.all ?? [];
|
|
const mockProvider = providers.find((entry) => entry.id === "mock");
|
|
const ampProvider = providers.find((entry) => entry.id === "amp");
|
|
const piProvider = providers.find((entry) => entry.id === "pi");
|
|
const sandboxProvider = providers.find((entry) => entry.id === "sandbox-agent");
|
|
expect(sandboxProvider).toBeUndefined();
|
|
expect(mockProvider).toBeDefined();
|
|
expect(ampProvider).toBeDefined();
|
|
expect(piProvider).toBeDefined();
|
|
|
|
const mockModels = mockProvider?.models ?? {};
|
|
expect(mockModels["mock"]).toBeDefined();
|
|
expect(mockModels["mock"].id).toBe("mock");
|
|
expect(mockModels["mock"].family).toBe("Mock");
|
|
|
|
const ampModels = ampProvider?.models ?? {};
|
|
expect(ampModels["smart"]).toBeDefined();
|
|
expect(ampModels["smart"].id).toBe("smart");
|
|
expect(ampModels["smart"].family).toBe("Amp");
|
|
|
|
expect(response.data?.default?.["mock"]).toBe("mock");
|
|
expect(response.data?.default?.["amp"]).toBe("smart");
|
|
});
|
|
|
|
it("should keep provider backends visible when discovery is degraded", async () => {
|
|
const response = await client.provider.list();
|
|
const providers = response.data?.all ?? [];
|
|
const providerIds = new Set(providers.map((provider) => provider.id));
|
|
|
|
expect(providerIds.has("claude")).toBe(true);
|
|
expect(providerIds.has("codex")).toBe(true);
|
|
expect(providerIds.has("pi")).toBe(true);
|
|
expect(
|
|
providerIds.has("opencode") || Array.from(providerIds).some((id) => id.startsWith("opencode:"))
|
|
).toBe(true);
|
|
});
|
|
});
|