feat: catalogue dynamique modèles Codex/Claude avec compatibilité CLI locale
Ajout du catalogue enrichi pour les modèles Codex et Claude avec: - Compatibilité estimée avec la version CLI locale détectée - Source d'origine (catalogue/Provider) pour chaque entrée - Support du catalogue Provider API externe - Matrice de compatibilité embarquée dans l'application Frontend: - UI de configuration des modèles avec affichage des états de compatibilité - Suggestions dynamiques avec badges de compatibilité - Messages d'aide contextuels (compatible/unknown/likelyTooRecent) - Alertes non-bloquantes pour les modèles trop récents - Gestion des échecs de catalogue avec saisie manuelle conservée Backend: - Ports CliVersionReader, ProviderModelCatalogue, CompatibilityMatrixSource - Implémentations: ProcessCliVersionReader, HttpProviderModelCatalogue, EmbeddedCompatibilityMatrix - Enrichissement des DTOs avec compatibility, cli_version, warnings - Tests unitaires complets pour le resolver de catalogue
This commit is contained in:
56
frontend/src/adapters/profileCatalog.test.ts
Normal file
56
frontend/src/adapters/profileCatalog.test.ts
Normal file
@ -0,0 +1,56 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { normalizeProfileModelCatalog } from "./profileCatalog";
|
||||
|
||||
describe("normalizeProfileModelCatalog", () => {
|
||||
it("wraps the legacy bare array response with unknown compatibility", () => {
|
||||
expect(
|
||||
normalizeProfileModelCatalog([
|
||||
{
|
||||
adapter: "codex",
|
||||
modelId: "gpt-5-codex",
|
||||
displayName: "GPT-5 Codex",
|
||||
aliases: ["codex"],
|
||||
recommended: true,
|
||||
},
|
||||
]),
|
||||
).toEqual({
|
||||
models: [
|
||||
{
|
||||
adapter: "codex",
|
||||
modelId: "gpt-5-codex",
|
||||
displayName: "GPT-5 Codex",
|
||||
aliases: ["codex"],
|
||||
recommended: true,
|
||||
compatibility: "unknown",
|
||||
source: "catalogue",
|
||||
},
|
||||
],
|
||||
cliVersion: null,
|
||||
warnings: [],
|
||||
});
|
||||
});
|
||||
|
||||
it("defaults missing enriched fields without dropping warnings", () => {
|
||||
expect(
|
||||
normalizeProfileModelCatalog({
|
||||
models: [{ adapter: "claude", modelId: "claude-sonnet-5" }],
|
||||
warnings: ["version inconnue"],
|
||||
}),
|
||||
).toEqual({
|
||||
models: [
|
||||
{
|
||||
adapter: "claude",
|
||||
modelId: "claude-sonnet-5",
|
||||
displayName: "claude-sonnet-5",
|
||||
aliases: [],
|
||||
recommended: false,
|
||||
compatibility: "unknown",
|
||||
source: "catalogue",
|
||||
},
|
||||
],
|
||||
cliVersion: null,
|
||||
warnings: ["version inconnue"],
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user