Architecture — Auguste Revit
Cette page a deux niveaux de lecture. Si vous êtes utilisateur ou utilisatrice du plugin et curieux ou curieuse de comprendre ce qui se passe sous le capot : lisez seulement la section « Pour les curieux » ci-dessous. Si vous êtes développeur ou développeuse et devez intervenir dans le code : continuez après cette première section pour les détails techniques.
Pour les curieux et curieuses — sans jargon
Auguste Revit, c'est 3 morceaux qui se parlent :
Le plugin qui s'installe dans Revit. C'est lui qui affiche la sidebar à droite de votre écran, qui lit votre maquette et qui colorie les murs en 3D quand vous demandez.
Un petit programme local (sur votre ordinateur) qui sert d'interprète entre le plugin Revit et le reste. Il tourne en arrière-plan quand Revit est ouvert. Vous ne le voyez pas, mais il est indispensable. Si quelqu'un dit « MCP » dans la doc, c'est lui.
Le service en ligne sur
app.91studio.fr(l'ERP) qui stocke les DPGF, les associations, les lots, les prix unitaires. C'est la « mémoire centrale » du cabinet, partagée entre tout le monde.
Quand vous cliquez sur un bouton dans le plugin :
- Le plugin demande à l'interprète local « fais ça »
- L'interprète exécute (lecture de la maquette, calcul, etc.)
- Le résultat est envoyé au service en ligne pour stockage permanent
- Vous voyez le résultat dans le plugin
C'est la même mécanique que quand vous envoyez un email :
- Vous cliquez « Envoyer » dans Outlook (le plugin)
- Outlook passe par votre serveur d'entreprise local (l'interprète)
- Le serveur envoie l'email vers Internet (le service en ligne)
- Le destinataire le reçoit
Vous n'avez jamais besoin de toucher à l'interprète ou au service en ligne directement — le plugin s'occupe de tout. C'est simplement utile de savoir que ces trois morceaux existent, parce que parfois un d'eux peut être en cause quand quelque chose plante.
Diagramme simple
Vous pouvez aussi accéder directement à l'ERP via votre navigateur — c'est utile pour éditer les prix unitaires ou les noms de lots sans ouvrir Revit. Tout est synchronisé.
Pour les développeurs et développeuses — détails techniques
Cette section suppose une lecture confortable de termes comme WebSocket, Firestore, ExtensibleStorage, .NET multi-target. Pour l'état courant (versions, branches, tâches), voir handoff/etat-projet.md. Pour l'identité produit long-terme, voir CLAUDE.md.
Ce que fait le système
Auguste Revit fait deux choses sur le même socle technique :
Bridge DPGF (le MOAT) — relie les quantités calculées dans Revit (murs, sols, pièces, ouvertures…) à un DPGF côté ERP web
app.91studio.fr. Persistance dans le.rvtvia ExtensibleStorage, sync Firestore live, audit visuel par couleur de lot en 3D.Document Set Generator —
Ctrl+Shift+Aouvre une CommandBar ; l'utilisateur ou l'utilisatrice tape en langage naturel ; un orchestrateur LLM produit un plan d'exécution (feuilles, vues, annotations, cotation), puis un Validateur Vision relit chaque feuille.
Les deux usages partagent le plugin C#, le serveur MCP local, l'auth Firebase via Cloud Function, et le design system WPF.
Vue d'ensemble technique
Composants C# (plugin Revit)
Code dans src/plugin/AugusteRevit/. Multi-target net481;net8.0-windows — la même DLL ne tourne pas sur les deux Revit, on build deux outputs.
| Brique | Path | Rôle |
|---|---|---|
| Point d'entrée | App.cs | IExternalApplication — enregistre les DockablePanes, abonne DocumentChanged, démarre RevitMcpClient |
| Sidebar | UI/Sidebar/ | Sections Setup / Production / Site / Vérif / DPGF — MVVM strict |
| DPGF native | UI/Dpgf/DpgfNativeWindow.* | DataGrid WPF (remplacement WebView2 historique) + audit visuel v2 (couleurs lots, popup éléments liés, focus 3D) |
| Services Revit | Services/RevitMcpClient.cs | Bridge WebSocket + dispatcher ~200 handlers C# (monolithe 11 728 lignes, en cours de migration vers TS) |
| Persistance DPGF | Services/DpgfMappingService.cs + Models/DpgfMapping.cs | ExtensibleStorage GUID stable, schema attaché à un DataStorage |
| Sync live | Services/DpgfLiveSyncService.cs | DocumentChanged → debounce 2s → push quantités via MCP |
| Auto-update | Services/AutoUpdater.cs | Poll GitHub Releases API, télécharge ZIP, applique |
| WebView2 ERP | UI/DpgfWindow.xaml.cs | Charge app.91studio.fr avec userDataFolder persistant + bridge postMessage |
| Stubs CI | src/plugin/AugusteRevit.RevitStubs/ (multi-target) | Reproduit un sous-ensemble de l'API Revit pour compiler sans Revit installé |
Pattern obligatoire : toute mutation Revit dans using var tx = new Transaction(doc, ...) ou TransactionGroup (rollback atomique). WPF cross-thread via Dispatcher.Invoke. Voir handoff/patterns.md.
Composants MCP (TypeScript)
Code dans src/mcp-server/. Strict mode, schémas Zod, build npm run build.
| Brique | Path | Rôle |
|---|---|---|
| Entrée | src/index.ts | Enregistre les tools, lance bridge WS :9710 + HTTP :9711 |
| Bridge Revit | src/websocket/revit-bridge.ts | Forwarde les tool calls vers le plugin via WS |
| Tools métier | src/tools/{dpgf,sheets,views,dimensions,tags,site,validation}.ts | Implémentation des ~200 tools |
| Compositions v2 | src/tools/compositions-v2.ts | Logique métier portée du C# vers TS pour hot reload (vague 3 du loader — voir project_generic_loader) |
| Auth ERP | src/tools/dpgf-sync.ts | HTTPS vers revitProxy avec header x-revit-key |
Pattern actuel : 12 handlers C# read-only ont été remplacés par compositions TS via revit_prim_collect (primitives génériques). Vagues 4+ pour les ~138 handlers restants.
Flux Firebase
Deux paths Firestore actifs :
tenants/studio-91/projects/{projectId}/dpgfs/{dpgfId} <- assos DPGF, items, versions, locks cellules
tenants/studio-91/agency-rules/91studio <- conventions graphiques (calibrage MOAT historique)
revit-sessions/{sessionId} <- log d'execution d'un DCE
revit-tasks/{taskId} <- evenements ERP -> Revit (Agent Pilote)Auth : toute écriture passe par la Cloud Function revitProxy (header x-revit-key, secret côté machine cliente). Pas d'accès Firebase Admin SDK depuis le plugin.
Évolutions notables
| Date | Quoi | Pourquoi |
|---|---|---|
| 25/04/2026 | Multi-target net481 + net8 débloqué (commit 5c256d6) | Build sur ARM64 / CI Linux sans Revit installé |
| 26/04/2026 | DPGF live update (bc15be1) | Sync auto au moindre changement modèle |
| 28/04/2026 | DPGF WPF native mergée (PR #4) | Remplacement WebView2 pour la grille (perf, UX) |
| 09/05/2026 | Ruban refonte (PR #8) | Onglet Auguste + 7 panels DiRoots-style |
| 12/05/2026 | DPGF bridge WebView2 stabilisé (PR #7) | Recette 5 conditions pour la fenêtre embed ERP |
| 14/05/2026 | Pack DPGF audit visuel v2 (PR #9 + #10) | Couleurs lots, popup éléments, focus 3D, modeless dialogs |
| 15/05/2026 | Doc system + charte DOC-RULES + site docs.auguste.app | Mécanisme d'oubli, 4 couches mémoire, doc en ligne auto-déployée |
Voir handoff/projects/INDEX.md pour la liste complète DONE / WIP / PAUSED.
Points d'extension
- Ajouter un tool MCP : nouvelle entrée dans
src/mcp-server/src/tools/+ handler C# dansRevitMcpClient.cs(préférer composition TS si read-only). - Ajouter une section sidebar : nouveau UserControl WPF dans
UI/Sidebar/Sections/, enregistré dans le ViewModel parent. - Ajouter une règle d'agence :
config/agency-rules/{agency}.json— pas de hardcode. - Ajouter une leçon :
handoff/lessons/feedback_<sujet>.md(format imposé par DOC-RULES).
Ce qui n'est pas dans ce document
- Versions courantes, branches actives →
handoff/etat-projet.md - Workflows commit / deploy / heal →
docs/dev-runbooks/ - Guides utilisateur · utilisatrice →
docs/user/ - Roadmap, backlog →
tasks/todo.md - Anti-patterns, leçons →
handoff/patterns.md+handoff/lessons/
Glossaire des termes techniques
| Terme | Définition courte |
|---|---|
| C# | Langage de programmation Microsoft. Le plugin est écrit en C#. |
| .NET | Plateforme d'exécution du code C#. Deux versions différentes selon le Revit : .NET 8 (Revit 2025) ou .NET Framework 4.8.1 (Revit 2024). |
| WPF | Windows Presentation Foundation — la technologie d'interface graphique utilisée pour la sidebar et les fenêtres du plugin. |
| MVVM | Model-View-ViewModel — un pattern d'organisation du code de l'interface. Sépare l'affichage de la logique. |
| DLL | Fichier compilé contenant le plugin (AugusteRevit.dll). C'est ce qui s'installe dans Revit. |
| API Revit | L'ensemble des fonctions de Revit que le plugin peut appeler (créer un mur, lire une pièce, etc.). |
| WebSocket | Une « tuyauterie » entre deux programmes locaux. Utilisé entre le plugin (Revit) et le serveur MCP. Plus rapide qu'une connexion web classique. |
| MCP | Model Context Protocol — un standard pour qu'un assistant IA puisse appeler des outils externes. Le « serveur MCP » est le programme qui expose les outils Revit. |
| TypeScript | Langage de programmation. Le serveur MCP local est écrit en TypeScript (Node.js). |
| Node.js | Plateforme d'exécution de JavaScript / TypeScript en dehors du navigateur. Fait tourner le serveur MCP local. |
| Firebase | Plateforme cloud de Google. Stocke les DPGF, gère l'auth, héberge le site web ERP. |
| Firestore | La base de données de Firebase. C'est là que sont stockées les associations DPGF. |
| Cloud Function | Un programme qui tourne sur les serveurs Google quand on l'appelle via HTTPS. revitProxy est notre Cloud Function qui sert d'intermédiaire entre le plugin et Firestore. |
| WebView2 | Composant Microsoft qui permet d'embarquer une page web dans une application Windows. Utilisé pour afficher le DPGF de l'ERP dans une fenêtre du plugin. |
| DPGF | Document Particulier Gestion Forfaitaire — le grand tableau de quantification du chantier. Voir aussi docs/user/a-quoi-ca-sert.md. |
| ExtensibleStorage | Mécanisme Revit pour stocker des données structurées dans un fichier .rvt. Utilisé pour persister les associations DPGF directement dans le projet. |
| Mermaid | Langage pour décrire des diagrammes en texte. Tous les schémas de cette doc sont écrits en Mermaid et rendus en image par VitePress. |
| Schéma multi-target | Le plugin produit deux versions de la DLL à chaque build : une pour Revit 2024 (net481) et une pour Revit 2025 (net8.0-windows). Une DLL ne marche que sur sa version Revit. |
Document court par design (~230 lignes). Si vous voulez ajouter quelque chose, demandez-vous d'abord si ça vit mieux dans handoff/ (évolutif), CLAUDE.md (identité produit) ou un runbook (procédure).