feat(layout): supporte la création de layouts plugins (customPluginLayout)

Étend le flux de création de layout backend (DTO, usecases, store) et le
frontend (sélecteur, adaptateurs, LayoutTabs/LayoutGrid) pour permettre
d'ouvrir un layout déclaré par un plugin installé (ex. Android Health),
sans passer par le message bloquant "extension backend pas encore livrée".

Ticket #141 — QA vert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-03 18:34:21 +02:00
parent 168f93df78
commit 45617992ef
29 changed files with 907 additions and 99 deletions

View File

@ -0,0 +1,38 @@
---
id: "5ed1fc9b-1eef-4236-be89-e5d351ece549"
number: 141
title: "Supporter louverture des layouts plugins comme Android Health"
status: "open"
priority: "high"
sprint: null
links: []
agentRefs: []
attachments: []
createdBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
createdAt: 1785766766212
updatedAt: 1785766766212
version: 1
---
Le plugin Android `dev.idea.android-plugin` déclare un layout `idea-android.health` et lenregistre correctement à lactivation, mais louverture depuis lUI échoue avec le message : « la création de layouts plugins nécessite une extension backend pas encore livrée ».
Constat confirmé :
- Ce nest pas un bug du plugin Android sur la déclaration/enregistrement du layout.
- Ce nest pas un problème du SDK sur le contrat de layout.
- Le blocage est côté IdeA host : le frontend expose bien les contributions de layout plugin, mais la création effective dune cellule/layout plugin depuis le sélecteur nest pas supportée de bout en bout.
Preuves repo :
- `frontend/src/features/layout/LayoutTabs.tsx` affiche explicitement ce message et mentionne labsence de lextension backend `create_layout` pour les plugin layouts.
- `frontend/src/features/plugins/PluginLayoutSelectorSection.tsx` documente aussi que la partie frontend est prête mais que le flux réel dépend dune extension backend non livrée.
- Le rendu dun `customPluginLayout` déjà présent semble supporté (`PluginLayoutCellView`, `CustomPluginLayoutCell`) ; le manque porte sur la création de cette cellule depuis lUI.
Attendu :
- Permettre à lutilisateur de créer/ouvrir un layout plugin déclaré dans un plugin installé et chargé, notamment `Android Health` du plugin Android.
- Étendre le flux de création de layout côté backend + DTO/layout kind si nécessaire pour supporter `customPluginLayout`/`pluginId`/`layoutType`/`state`.
- Retirer le message bloquant une fois le support livré.
Critères dacceptation :
1. Depuis le sélecteur de layouts, choisir `Android Health` crée une cellule/layout plugin valide dans larbre de layout.
2. Le layout `idea-android.health` du plugin `dev.idea.android-plugin` se rend correctement via le runtime plugin chargé.
3. Létat opaque du layout peut être persistant comme prévu par le contrat `customPluginLayout`.
4. Aucun message « extension backend pas encore livrée » napparaît plus pour les plugin layouts supportés.