import test from "node:test"; import assert from "node:assert/strict"; import { formatModelReference, listAvailableModelReferences, normalizeAvailableModelReference, resolveChildModel, } from "./models.ts"; test("resolveChildModel prefers the per-task override over the required top-level model", () => { const selection = resolveChildModel({ taskModel: "openai/gpt-5", topLevelModel: "anthropic/claude-sonnet-4-5", }); assert.equal(selection.requestedModel, "openai/gpt-5"); assert.equal(selection.resolvedModel, "openai/gpt-5"); }); test("formatModelReference returns provider/id", () => { const ref = formatModelReference({ provider: "anthropic", id: "claude-sonnet-4-5" }); assert.equal(ref, "anthropic/claude-sonnet-4-5"); }); test("listAvailableModelReferences formats all configured available models", () => { const refs = listAvailableModelReferences({ getAvailable: () => [ { provider: "anthropic", id: "claude-sonnet-4-5" }, { provider: "openai", id: "gpt-5" }, ], }); assert.deepEqual(refs, ["anthropic/claude-sonnet-4-5", "openai/gpt-5"]); }); test("normalizeAvailableModelReference matches canonical refs case-insensitively", () => { const normalized = normalizeAvailableModelReference("OpenAI/GPT-5", [ "anthropic/claude-sonnet-4-5", "openai/gpt-5", ]); assert.equal(normalized, "openai/gpt-5"); });