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:
@ -35,6 +35,7 @@ import type {
|
||||
McpToolCatalogue,
|
||||
McpToolPolicy,
|
||||
OpenCodeProviderCatalogEntry,
|
||||
ProfileModelCatalog,
|
||||
ProfileModelCatalogEntry,
|
||||
EffectivePermissions,
|
||||
PairedDevice,
|
||||
@ -1302,6 +1303,8 @@ const MOCK_CLAUDE_MODELS: ProfileModelCatalogEntry[] = [
|
||||
displayName: "Claude Sonnet 5",
|
||||
aliases: ["sonnet"],
|
||||
recommended: true,
|
||||
compatibility: "compatible",
|
||||
source: "catalogue",
|
||||
},
|
||||
{
|
||||
adapter: "claude",
|
||||
@ -1309,6 +1312,8 @@ const MOCK_CLAUDE_MODELS: ProfileModelCatalogEntry[] = [
|
||||
displayName: "Claude Opus 4.8",
|
||||
aliases: ["opus"],
|
||||
recommended: false,
|
||||
compatibility: "unknown",
|
||||
source: "catalogue",
|
||||
},
|
||||
{
|
||||
adapter: "claude",
|
||||
@ -1316,6 +1321,8 @@ const MOCK_CLAUDE_MODELS: ProfileModelCatalogEntry[] = [
|
||||
displayName: "Claude Haiku 4.5",
|
||||
aliases: ["haiku"],
|
||||
recommended: false,
|
||||
compatibility: "likelyTooRecent",
|
||||
source: "provider",
|
||||
},
|
||||
];
|
||||
|
||||
@ -1326,6 +1333,8 @@ const MOCK_CODEX_MODELS: ProfileModelCatalogEntry[] = [
|
||||
displayName: "GPT-5 Codex",
|
||||
aliases: ["codex"],
|
||||
recommended: true,
|
||||
compatibility: "compatible",
|
||||
source: "catalogue",
|
||||
},
|
||||
{
|
||||
adapter: "codex",
|
||||
@ -1333,6 +1342,8 @@ const MOCK_CODEX_MODELS: ProfileModelCatalogEntry[] = [
|
||||
displayName: "GPT-5",
|
||||
aliases: ["general"],
|
||||
recommended: false,
|
||||
compatibility: "unknown",
|
||||
source: "catalogue",
|
||||
},
|
||||
{
|
||||
adapter: "codex",
|
||||
@ -1340,6 +1351,8 @@ const MOCK_CODEX_MODELS: ProfileModelCatalogEntry[] = [
|
||||
displayName: "GPT-5 mini",
|
||||
aliases: ["mini", "fast"],
|
||||
recommended: false,
|
||||
compatibility: "likelyTooRecent",
|
||||
source: "provider",
|
||||
},
|
||||
];
|
||||
|
||||
@ -1420,12 +1433,20 @@ export class MockProfileGateway implements ProfileGateway {
|
||||
return structuredClone(cloned);
|
||||
}
|
||||
|
||||
async listClaudeModels(): Promise<ProfileModelCatalogEntry[]> {
|
||||
return structuredClone(MOCK_CLAUDE_MODELS);
|
||||
async listClaudeModels(): Promise<ProfileModelCatalog> {
|
||||
return {
|
||||
models: structuredClone(MOCK_CLAUDE_MODELS),
|
||||
cliVersion: "2.1.220",
|
||||
warnings: [],
|
||||
};
|
||||
}
|
||||
|
||||
async listCodexModels(): Promise<ProfileModelCatalogEntry[]> {
|
||||
return structuredClone(MOCK_CODEX_MODELS);
|
||||
async listCodexModels(): Promise<ProfileModelCatalog> {
|
||||
return {
|
||||
models: structuredClone(MOCK_CODEX_MODELS),
|
||||
cliVersion: "0.145.0",
|
||||
warnings: ["Catalogue provider partiellement estime depuis les donnees locales."],
|
||||
};
|
||||
}
|
||||
|
||||
async cloneOpenCodeProfileFromSeed(
|
||||
|
||||
Reference in New Issue
Block a user