Skip to content

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 :

  1. 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.

  2. 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.

  3. 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 :

  1. 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 .rvt via ExtensibleStorage, sync Firestore live, audit visuel par couleur de lot en 3D.

  2. Document Set GeneratorCtrl+Shift+A ouvre 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.

BriquePathRôle
Point d'entréeApp.csIExternalApplication — enregistre les DockablePanes, abonne DocumentChanged, démarre RevitMcpClient
SidebarUI/Sidebar/Sections Setup / Production / Site / Vérif / DPGF — MVVM strict
DPGF nativeUI/Dpgf/DpgfNativeWindow.*DataGrid WPF (remplacement WebView2 historique) + audit visuel v2 (couleurs lots, popup éléments liés, focus 3D)
Services RevitServices/RevitMcpClient.csBridge WebSocket + dispatcher ~200 handlers C# (monolithe 11 728 lignes, en cours de migration vers TS)
Persistance DPGFServices/DpgfMappingService.cs + Models/DpgfMapping.csExtensibleStorage GUID stable, schema attaché à un DataStorage
Sync liveServices/DpgfLiveSyncService.csDocumentChanged → debounce 2s → push quantités via MCP
Auto-updateServices/AutoUpdater.csPoll GitHub Releases API, télécharge ZIP, applique
WebView2 ERPUI/DpgfWindow.xaml.csCharge app.91studio.fr avec userDataFolder persistant + bridge postMessage
Stubs CIsrc/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.

BriquePathRôle
Entréesrc/index.tsEnregistre les tools, lance bridge WS :9710 + HTTP :9711
Bridge Revitsrc/websocket/revit-bridge.tsForwarde les tool calls vers le plugin via WS
Tools métiersrc/tools/{dpgf,sheets,views,dimensions,tags,site,validation}.tsImplémentation des ~200 tools
Compositions v2src/tools/compositions-v2.tsLogique métier portée du C# vers TS pour hot reload (vague 3 du loader — voir project_generic_loader)
Auth ERPsrc/tools/dpgf-sync.tsHTTPS 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

DateQuoiPourquoi
25/04/2026Multi-target net481 + net8 débloqué (commit 5c256d6)Build sur ARM64 / CI Linux sans Revit installé
26/04/2026DPGF live update (bc15be1)Sync auto au moindre changement modèle
28/04/2026DPGF WPF native mergée (PR #4)Remplacement WebView2 pour la grille (perf, UX)
09/05/2026Ruban refonte (PR #8)Onglet Auguste + 7 panels DiRoots-style
12/05/2026DPGF bridge WebView2 stabilisé (PR #7)Recette 5 conditions pour la fenêtre embed ERP
14/05/2026Pack DPGF audit visuel v2 (PR #9 + #10)Couleurs lots, popup éléments, focus 3D, modeless dialogs
15/05/2026Doc system + charte DOC-RULES + site docs.auguste.appMé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# dans RevitMcpClient.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


Glossaire des termes techniques

TermeDéfinition courte
C#Langage de programmation Microsoft. Le plugin est écrit en C#.
.NETPlateforme 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).
WPFWindows Presentation Foundation — la technologie d'interface graphique utilisée pour la sidebar et les fenêtres du plugin.
MVVMModel-View-ViewModel — un pattern d'organisation du code de l'interface. Sépare l'affichage de la logique.
DLLFichier compilé contenant le plugin (AugusteRevit.dll). C'est ce qui s'installe dans Revit.
API RevitL'ensemble des fonctions de Revit que le plugin peut appeler (créer un mur, lire une pièce, etc.).
WebSocketUne « tuyauterie » entre deux programmes locaux. Utilisé entre le plugin (Revit) et le serveur MCP. Plus rapide qu'une connexion web classique.
MCPModel 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.
TypeScriptLangage de programmation. Le serveur MCP local est écrit en TypeScript (Node.js).
Node.jsPlateforme d'exécution de JavaScript / TypeScript en dehors du navigateur. Fait tourner le serveur MCP local.
FirebasePlateforme cloud de Google. Stocke les DPGF, gère l'auth, héberge le site web ERP.
FirestoreLa base de données de Firebase. C'est là que sont stockées les associations DPGF.
Cloud FunctionUn 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.
WebView2Composant 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.
DPGFDocument Particulier Gestion Forfaitaire — le grand tableau de quantification du chantier. Voir aussi docs/user/a-quoi-ca-sert.md.
ExtensibleStorageMécanisme Revit pour stocker des données structurées dans un fichier .rvt. Utilisé pour persister les associations DPGF directement dans le projet.
MermaidLangage 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-targetLe 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).

Plugin propriétaire — équipe 91STUDIO