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
2.5 KiB
name, description, metadata
| name | description | metadata | ||
|---|---|---|---|---|
| model-catalogue-compat-cadrage | Frontières hexagonales, ports, DTO, fallback et matrice de compatibilité versionnée pour l'évolution du catalogue de modèles des profils structurés Codex/Claude. |
|
Évolution de ListClaudeModels/ListCodexModels (catalogue statique application/src/agent/model_catalogue.rs) vers un catalogue enrichi par compatibilité CLI.
Décisions tranchées :
- JAMAIS scraper les TUI
/model, JAMAIS exécuter les CLIs pour énumérer les modèles. Seule exécution CLI autorisée :<cli> --version(pattern existantinfrastructure/runtime::detection_spec+ portProcessSpawner). Saisie libre toujours ouverte. - 3 sources non bloquantes à dégradation indépendante : API provider
/v1/models(best-effort, uniquement si clé env/SecretStore présente, sinon skip), catalogue statique seed, matrice de compat.
Hexagonal :
- Domaine (pur) : VO
CliVersion(Ord), enumModelCompatibility {Compatible|Unknown|LikelyTooRecent}(miroir des 3 états produit), VOCompatibilityMatrix(forme seule), fonction pureevaluate_compatibility(matrix, adapter, model_id, Option<CliVersion>)— version None ⇒ Unknown, modèle absent ⇒ Unknown, min<=ver ⇒ Compatible, min>ver ⇒ LikelyTooRecent. - Nouveaux ports :
CliVersionReader,ProviderModelCatalogue(Ok(vec![]) si pas de clé),CompatibilityMatrixSource(infaillible). - Application : use case unique
ResolveModelCatalogue{adapter}async, jamais de hard-error sur échec source (warnings + fallback).ListClaude/CodexModelsdeviennent des façades. - Infra :
ProcessCliVersionReader,HttpProviderModelCatalogue(reqwest),EmbeddedCompatibilityMatrix.
Matrice de compat = DONNÉE, pas code : JSON versionné maintenu dans IdeA, bundlé via include_str! (seed infaillible) + override optionnel app_data_dir/IdeA/model-compat.json. Ajouter un modèle = éditer le JSON, zéro code (Open/Closed).
DTO (rupture front) : ProfileModelCatalogDto passe de transparent Vec à { models:[{...,compatibility,source}], cliVersion:string|null, warnings:string[] }. Répercuter ports TS + 2 adapters + mock + ProfilesSettings.
Découpage : B1 domaine pur, B2 use case ports mockés, B3 infra ; F1 contrat, F2 ProfilesSettings 3 badges. UX passe avant F2 (libellés des 3 états, warnings, cliVersion null).
Point ouvert produit : récup clé provider — proposé best-effort sur clé env/SecretStore existante, pas de prompt dédié.