import { describe, expect, it, beforeEach, afterEach } from "vitest"; import type { ServerAdapterModule } from "../adapters/index.js"; import { findServerAdapter, listAdapterModels, registerServerAdapter, requireServerAdapter, unregisterServerAdapter, } from "../adapters/index.js"; const externalAdapter: ServerAdapterModule = { type: "external_test", execute: async () => ({ exitCode: 0, signal: null, timedOut: false, }), testEnvironment: async () => ({ adapterType: "external_test", status: "pass", checks: [], testedAt: new Date(0).toISOString(), }), models: [{ id: "external-model", label: "External Model" }], supportsLocalAgentJwt: false, }; describe("server adapter registry", () => { beforeEach(() => { unregisterServerAdapter("external_test"); }); afterEach(() => { unregisterServerAdapter("external_test"); }); it("registers external adapters and exposes them through lookup helpers", async () => { expect(findServerAdapter("external_test")).toBeNull(); registerServerAdapter(externalAdapter); expect(requireServerAdapter("external_test")).toBe(externalAdapter); expect(await listAdapterModels("external_test")).toEqual([ { id: "external-model", label: "External Model" }, ]); }); it("removes external adapters when unregistered", () => { registerServerAdapter(externalAdapter); unregisterServerAdapter("external_test"); expect(findServerAdapter("external_test")).toBeNull(); expect(() => requireServerAdapter("external_test")).toThrow( "Unknown adapter type: external_test", ); }); it("allows external plugin to override a built-in adapter type", () => { // claude_local is always built-in const builtIn = findServerAdapter("claude_local"); expect(builtIn).not.toBeNull(); const plugin: ServerAdapterModule = { type: "claude_local", execute: async () => ({ exitCode: 0, signal: null, timedOut: false, }), testEnvironment: async () => ({ adapterType: "claude_local", status: "pass", checks: [], testedAt: new Date(0).toISOString(), }), models: [{ id: "plugin-model", label: "Plugin Override" }], supportsLocalAgentJwt: false, }; registerServerAdapter(plugin); // Plugin wins const resolved = requireServerAdapter("claude_local"); expect(resolved).toBe(plugin); expect(resolved.models).toEqual([ { id: "plugin-model", label: "Plugin Override" }, ]); }); });