xaf-logic-explainer
XAF Logic Explainer
Bringen Sie Ihrem KI-Coding-Agenten bei, was Ihre XAF-Anwendung tatsächlich tut.
Richten Sie es auf ein XAF-Modul. Es liest Ihre Entitäten, Controller, Aktionen, Geschäftsregeln, Navigation und Model-Editor-Anpassungen direkt aus dem Quellcode – und übergibt das Ergebnis an jeden Agenten, mit dem Sie codieren.
Warum es das gibt
DevExpress hat hervorragende Arbeit geleistet, um KI-Agenten mit XAF vertraut zu machen. Zwei Komponenten existieren bereits, und dies ist die dritte:
Lehrt den Agenten… | Werkzeug |
Wie XAF allgemein funktioniert | |
Was die offizielle Dokumentation sagt | |
Was IHRE Anwendung tut | XAF Logic Explainer ← Sie sind hier |
Ein Agent, der jede Seite der XAF-Dokumentation gelesen hat, weiß immer noch nicht, dass Ihre
Invoice-Summe aus ihren Positionen berechnet wird, dass ApproveController sich weigert,
ausgeführt zu werden, wenn der Zeitraum abgeschlossen ist, oder dass drei Spalten im Model-Editor
ausgeblendet wurden und in keiner C#-Datei vorkommen. Er wird alle drei selbstbewusst erfinden.
Diese Lücke ist nicht durch besseres Prompting zu schließen. Sie ist durch Extraktion zu schließen.
Diese Werkzeuge ergänzen sich. Installieren Sie die DevExpress-Fähigkeiten für Framework-Wissen, verwenden Sie den Docs MCP für die offizielle Referenz, und dieses hier für Ihre eigene Codebasis. Keines ersetzt die anderen.
Related MCP server: DevScope MCP
Was es extrahiert
Alles unten wird als Syntax gelesen, mit Roslyn. Ihr Projekt muss nie kompilieren, und dieses Werkzeug verlinkt nie gegen DevExpress-Assemblys:
Entitäten — Eigenschaften, Typen, Assoziationen und die XAF-Attribute, die ihnen Bedeutung verleihen (
[Association],[Aggregated],[RuleRequiredField],[Appearance],[ModelDefault], …). XPO und EF Core, automatisch erkannt aus Ihrenusing-Anweisungen.Controller und Aktionen —
SimpleAction,PopupWindowShowAction,SingleChoiceAction, ihre Zielkriterien und der Handler-Code, der bei ihrer Ausführung läuft.Geschäftsregeln — Validierungsattribute und Code-Regeln, mit den angehängten Bedingungen.
Modul-Setup —
ModuleUpdater-Seed-Daten und was bei der ersten Ausführung erstellt wird.Navigation — die Gruppen und Elemente, die Ihre Benutzer tatsächlich sehen.
Model-Editor (
.xafml) — die Anpassungen, die nur in XML existieren und für jeden, der Ihr C# liest, unsichtbar sind. Modul- und Plattformdateien werden so zusammengeführt, wie XAF sie zusammenführt.Benutzerdefinierte Eigenschafts- und Listeneditoren — einschließlich des JavaScripts, ohne das sie nicht funktionieren, und integrierte Editoren, die zur Laufzeit über
View.CustomizeViewItemControl<T>()neu konfiguriert werden. Diese leben im Plattformprojekt neben dem Modul, sodass sie niemandem begegnen, der die Geschäftsobjekte liest.Versionierte Migrationen — die
CurrentDBVersion < new Version(…)-Blöcke in Ihrem Updater. Jeder wird höchstens einmal pro Datenbank ausgeführt und ist die einzige Erklärung für Daten, die der aktuelle Code nicht erklären kann.Jeder Bildschirm und was darauf geladen wird — siehe unten.
Dies sind die Gründe, warum ein Agent, der jede Geschäftsklasse gelesen hat, immer noch selbstbewusst falsch über die Anwendung liegen kann:
Was läuft, wenn Sie diesen Bildschirm öffnen
Nichts in einem XAF-Repository beantwortet das, und beide Hälften fehlen aus unterschiedlichen Gründen.
Die Bildschirme selbst sind in keiner Datei. XAF generiert eine Listen-, eine Detail- und eine
Lookup-Ansicht für jede Geschäftsklasse, plus eine Listenansicht für jede Sammlung, und der
Model-Editor speichert nur diejenigen, die jemand geändert hat. Ein Grep nach
Patient_Prescriptions_ListView in Ihrem Quellcode findet nichts – und das ist kein Beweis dafür,
dass sie fehlt.
Welche Controller dort laufen, wird zur Laufzeit entschieden, durch vier Bedingungen, die XAF UND-verknüpft: Verschachtelung, Ansichtstyp, Objekttyp und Ansichts-ID. Jede ist uneingeschränkt, wenn nicht gesetzt, sodass ein Controller, der keine davon setzt, auf jeden Ihrer Bildschirme geladen wird.
Dies liest alle vier, so wie ViewController.IsFitToView sie auswertet, gegen ein
Ansichtsinventar, das aus den eigenen ID-Generatoren des Frameworks erstellt wurde – und zeichnet
auf, warum jeder gematcht hat, damit die Antwort überprüft werden kann, anstatt ihr zu
vertrauen:
Zwei Schichten, getrennt gehalten. Was Ihr Team geschrieben hat, erhält die volle Behandlung; was XAF bereitstellt, wird hinter einer Zeile verborgen, weil es eine Menge davon gibt und es nicht Ihres ist, es zu ändern. Mit einem Ground-Truth-Katalog wird es auch benannt – beschränkt auf die Module, die Sie tatsächlich registrieren, sodass ein WinForms-Controller niemals auf einem Blazor-Bildschirm erscheint.
Was es nicht behaupten wird: Ein hier aufgeführter Controller kann sich trotzdem durch
Active["Grund"] selbst abschalten, was von den Daten und dem Benutzer abhängt. Dies ist, was
XAF auf einen Bildschirm lädt, nicht was zwangsläufig etwas tun wird – und alles, was es nicht
aus dem Quellcode lesen konnte, wird separat aufgeführt, mit dem Grund, anstatt stillschweigend als
„läuft überall“ behandelt zu werden.
Schnellstart
dotnet tool install -g XafLogicExplainer.Cli
xaflogic agents --project "C:\MySolution\MyApp.Module"Das schreibt AGENTS.md, CLAUDE.md und .github/copilot-instructions.md in Ihr
Projektmappenverzeichnis. Kein Konto, kein API-Schlüssel, kein Server. Ihr Agent versteht die
Anwendung bei seiner nächsten Frage.
Was es schreibt, und warum es in zwei Teile geteilt ist
AGENTS.md wird jeder Anfrage eines Agenten im Repository vorangestellt, sodass seine Kosten
für immer bezahlt werden. 70 KB Entitätsdetails dort abzuladen, würde die eigentliche Frage
verdrängen. Daher ist die Ausgabe gestaffelt:
| ~11 KB | Immer geladen: Grundregeln, vollständige Bestandsverzeichnisse, Konventionen, Rezepte |
| ~70 KB | Bei Bedarf geöffnet: vollständige Eigenschaften, Handler-Code, Regelmeldungen, |
Der wertvollste Teil ist der kleinste. AGENTS.md beginnt mit Grundregeln – dass diese
Anwendung XPO verwendet und niemals EF Core, dass die Bestandsverzeichnisse vollständig sind,
also alles, was fehlt, tatsächlich nicht existiert, und dass sich einiges Verhalten im
Model-Editor und nicht in C# befindet. Diese wenigen Absätze stoppen den Großteil der
selbstbewussten Erfindungen, die Agenten über unbekannte XAF-Codebasen produzieren.
Vorhandene Dateien werden niemals überschrieben: generierter Text lebt zwischen Markierungen, alles, was Sie von Hand geschrieben haben, bleibt erhalten, und eine Neugenerierung ist byteidentisch, wenn sich nichts geändert hat.
Oder lassen Sie den Agenten direkt Fragen stellen
Generierte Dateien sind eine Momentaufnahme. Der MCP-Server ist eine Live-Verbindung – der Agent befragt Ihre Anwendung, während Sie daran arbeiten, und kann nicht veralten.
/plugin marketplace add peopleworks/XAFLogicExplainer
/plugin install xaf-logic-explainer@peopleworks-xafDas installiert eine Fähigkeit und einen MCP-Server in einem Schritt. Für jeden anderen MCP-Client führen Sie ihn entweder direkt von NuGet aus, ohne Installation:
{
"mcpServers": {
"xaf": { "command": "dnx", "args": ["XafLogicExplainer.Mcp", "--yes"] }
}
}…oder zeigen Sie auf die CLI, wenn Sie sie bereits haben:
{ "mcpServers": { "xaf": { "command": "xaflogic", "args": ["mcp"] } } }Gestartet aus einem Projektmappenverzeichnis findet er das XAF-Modul von selbst, sodass keine der beiden Formen einen Pfad benötigt.
Tool | Antworten |
| Was diese Anwendung ist und die vollständige Liste aller darin enthaltenen Elemente |
| Wo ein Feld, Konzept oder Geschäftsbegriff definiert ist |
| Jede Eigenschaft, Beziehung, Regel und Berechnung zu einer Entität |
| Was eine Aktion bewirkt – einschließlich des C#, das beim Auslösen ausgeführt wird |
| Was die Anwendung validiert, berechnet, ausblendet und deaktiviert |
| Model-Editor-Anpassungen, die in keiner C#-Datei existieren |
| Benutzerdefinierte Editoren, das benötigte JavaScript und zur Laufzeit geänderte integrierte Editoren |
| Was einmalig gegen eine Live-Datenbank ausgeführt wurde, und der Kommentar, der erklärt, warum |
| Alles, was auf einen Bildschirm geladen wird – welche Controller aktiviert werden und warum |
| Quellen erneut lesen (Änderungen werden automatisch erkannt) |
Fragen Sie nach etwas, das nicht vorhanden ist, und die Antwort ist die nützliche:
Es gibt keine Entität namens 'PurchaseOrder' in dieser Anwendung. Dies ist die vollständige Liste von 19 Entitäten, aus dem gesamten Quellbaum extrahiert: … Wenn der Benutzer erwartet, dass 'PurchaseOrder' existiert, wurde sie noch nicht erstellt.
Kombinieren Sie es mit den offiziellen DevExpress-Fähigkeiten. /plugin install dx-xaf@DevExpress-agent-skills
lehrt, wie XAF funktioniert; dieses lehrt, was Ihre Anwendung tut. Ein Agent, der nur das erste hat, wird
korrektes XAF gegen Entitäten schreiben, die Sie nicht haben.
Das gleiche Wissen, für eine Person
Ein Agent liest AGENTS.md oder fragt den MCP-Server ab. Jemand, der gerade eine zehn Jahre alte
XAF-Anwendung geerbt hat, benötigt die gleichen Fakten, aber ganz anders angeordnet:
xaflogic explain --project "C:\MySolution\MyApp.Module" --openEine HTML-Datei. Kein Server, kein Build-Schritt, keine Netzwerkanfrage – sie öffnet sich aus einem E-Mail-Anhang auf einem Rechner ohne Internet, was genau so Übergaben tatsächlich stattfinden.
Sie zeichnet eine Karte Ihres Domänenmodells aus den Assoziationsattributen, die über Ihre Codebasis verstreut sind. Die meisten Teams haben ihres noch nie gesehen: Es existiert nur im Kopf einer Person, genau das Wissen, das verschwindet, wenn diese Person geht.

Echtes Ergebnis aus der Beispielanwendung dieses Repositorys. Fahren Sie mit der Maus über eine Entität, und alles, was sie nicht berührt, verblasst; lila bedeutet, dass das Löschen des Elternteils das Kind löscht.
Daneben: jede Entität und was jede Eigenschaft ist, jede Aktion mit dem ausgeführten Code, Validierung mit der Nachricht, die der Benutzer tatsächlich sehen wird, und die Model-Editor-Einstellungen, die in keiner C#-Datei erscheinen.
Und ein Index jedes Kriterienausdrucks in der Anwendung – ein Dialekt, der weder SQL noch C# ist, gesammelt aus Attributen, die über die Quelle verteilt und sonst nirgends zusammengeführt werden:
Probieren Sie es an der Beispielanwendung aus, ohne Ihren eigenen Code zu berühren:
xaflogic explain --project tests/XafLogicExplainer.Tests/Fixtures/DemoSolution/PharmacyDemo.Module --openOptional: Heben Sie Ihren Code von DevExpress ab
Die Extraktion liest Ihre Quelle, ohne etwas über das Framework zu wissen, gegen das sie geschrieben ist,
was eine Frage unbeantwortet lässt: Ist DeleteObjectsViewController etwas, das Ihr Team geschrieben hat,
oder etwas, das DevExpress ausliefert? Ohne Antwort präsentiert die generierte Dokumentation Framework-Verhalten
und Ihre eigene Logik als dasselbe.
Wenn Sie eine DevExpress-Lizenz haben:
xaflogic catalog buildDas liest Ihre eigene Installation und zeichnet auf, was XAF selbst bereitstellt – Attribute, Controller, Modell-Schnittstellen und Module, mit den offiziellen Zusammenfassungen und Dokumentationslinks, die DevExpress ausliefert. Bei DevExpress 26.1 sind das etwa 850 Framework-Typen.
Wenn Sie auch die DevExpress-Quellcode-Komponente installiert haben, zeichnet es auf, wo jeder
Framework-Controller aktiviert wird – die vier Bedingungen, die XAF prüft, bevor er ausgeführt wird.
Das kann nicht aus den Assemblies gelesen werden: vier von fünf integrierten Controllern setzen ihr
Ziel innerhalb eines Konstruktors. Übergeben Sie --dx-sources <Components/Sources>, wenn diese
nicht neben Ihren Assemblies liegen.
Die Extraktion erkennt dies dann automatisch und kann Dinge sagen, die sie sonst nicht könnte:
„
ArchiveControllererweitert den integriertenDeleteObjectsViewController“ – Sie ändern, wie das Löschen anwendungsweit funktioniert, und fügen keine Funktion daneben hinzu.„
[AuditedByFinance]ist kein XAF- oder .NET-Attribut“ – Ihr Team hat es erfunden, daher lebt seine Bedeutung in dieser Codebasis und in keiner Dokumentation.„32 Framework-Controller werden ebenfalls auf diesen Bildschirm geladen“ – benannt, mit der Funktion jedes einzelnen und auf die Module beschränkt, die Ihre Anwendung tatsächlich registriert, sodass ein WinForms-Controller nie auf einem Blazor-Bildschirm erscheint.
Der Katalog wird nach ~/.xaflogic/catalog/ geschrieben, niemals in Ihr Repository: er wird aus
lizenzierter Software abgeleitet. Alles funktioniert auch ohne ihn – er verbessert nur die Ausgabe. Siehe
NOTICE.md.
Befehle
Befehl | Was er tut |
| Schreibt |
| Als MCP-Server ausführen, damit Agenten die App live abfragen können |
| Schreibt eine eigenständige HTML-Seite, die die App einer Person erklärt |
| Erstellt den DevExpress-Grundwahrheitskatalog ( |
| Liest das Projekt, schreibt lokal Markdown + JSON |
| Vergleicht mit der vorherigen Extraktion und meldet, was sich geändert hat |
| Zeigt den Änderungserkennungs-Hash und ob eine Neu-Extraktion nötig ist |
| Extrahiert bei Dateiänderung neu, mit Entprellung |
| Extrahiert und veröffentlicht auf ein entferntes Ziel |
| Stellt Fragen zum extrahierten Projekt |
| Setzt Standardwerte in |
| Verwaltet mehrere XAF-Projekte; die meisten Befehle akzeptieren |
Die Dokumentation wird in Englisch oder Spanisch generiert (--lang en|es).
Nützliche Flags: --orm auto|xpo|efcore, --lang en|es, --enrich (KI-generierte
Geschäftslogik-Zusammenfassungen pro Controller und Aktion), --force, --all.
--enrich benötigt ein Modell, und jedes davon reicht aus – ein Schlüssel in der Befehlszeile gewinnt,
dann die Umgebung, dann ein PeopleWorks Copilot-Konto, falls Sie eines haben:
xaflogic extract --enrich --api-key sk-... # or any OpenAI-compatible endpoint:
xaflogic extract --enrich --api-key ... --ai-base-url http://localhost:11434/v1 --ai-model qwen2.5-coder
export OPENAI_API_KEY=sk-... # picked up with no configuration at all
export ANTHROPIC_API_KEY=sk-ant-...Alles andere in diesem Tool läuft ohne Schlüssel, ohne Konto und ohne Netzwerk.
Die Extraktion ist inkrementell – ein SHA-256 über Ihre .cs- und .xafml-Dateien bedeutet, dass
ein unverändertes Projekt ein No-Op ist. Es gibt eine MSBuild .targets-Datei, falls Sie möchten,
dass sie beim Build ausgeführt wird.
Status
v0.14.0. Die Extraktions-Engine ist der ausgereifte Teil: Sie läuft in Produktion gegen echte XAF-Anwendungen. Die agentenorientierte Oberfläche ist das, was jetzt gerade, im offenen Umfeld, entsteht.
✅ | Roslyn-Extraktion – Entitäten, Controller, Regeln, Updater, Navigation, |
✅ | XPO und EF Core, automatisch erkannt |
✅ | Benutzerdefinierte Eigenschafts- und Listen-Editoren, deren Client-Assets und zur Laufzeit neu konfigurierte integrierte Editoren |
✅ | Versionierte Datenmigrationen – was mit Datenbanken geschah, die nicht frisch waren |
✅ | Inkrementelle Änderungserkennung, Diff-Berichte, Multi-Projekt, Watch-Modus |
✅ | KI-Anreicherung von Controllern und Aktionen ( |
✅ | Blazor-In-App-Hilfspanel |
✅ |
|
✅ |
|
✅ | Erweiterbare Veröffentlichungsziele ( |
✅ | MCP-Server – 10 Tools, live gegen Ihre Quelle |
✅ | Installierbares Claude Code Plugin mit Skill und MCP-Server |
✅ | 345 Tests über synthetische XPO- und EF-Core-Fixtures – kein DevExpress nötig |
✅ | DevExpress-Grundwahrheitskatalog, lokal von Lizenznehmern generiert |
PeopleWorks Copilot, in dem dieses Tool aufgewachsen ist, ist jetzt einer von mehreren Empfängern, statt das Ziel, um das alles herum gebaut wurde. Die wichtigsten Ausgaben benötigen überhaupt keinen Server.
Die lange Version
Warum ein Drittel des Verhaltens einer XAF-Anwendung außerhalb ihrer Geschäftsklassen lebt, die vier Orte, an denen es sich versteckt, und wie die extrahierte Ausgabe tatsächlich aussieht:
Ihr Coding-Agent kennt XAF. Er hat Ihre Anwendung noch nie gesehen.
Tu agente de código sabe XAF. Nunca ha visto tu aplicación. — en español
Jeder ist in seiner eigenen Sprache geschrieben, nicht aus der anderen übersetzt. Quellen in
docs/Blog/.
Repository-Struktur
src/
XafLogicExplainer.Core Roslyn extraction engine — no DevExpress reference
XafLogicExplainer.Mcp MCP server (ModelContextProtocol 2.1)
XafLogicExplainer.Cli the `xaflogic` command
XafLogicExplainer.CopilotSync PeopleWorks Copilot target + AI enrichment
XafLogicExplainer.DescriptionAnnotator generates missing [Description] attributes
XafLogicExplainer.Blazor in-app help panel for XAF Blazor apps
plugins/
xaf-logic-explainer the installable Claude Code pluginErstellt auf .NET 10.
Nur XafLogicExplainer.Blazor referenziert DevExpress-Pakete; es benötigt den DevExpress NuGet-Feed
und eine Lizenz zum Bauen. Alles andere baut überall, weshalb CI es kostenlos verifizieren kann.
Mitwirken
Der wertvollste Beitrag ist, uns zu sagen, was der Extraktor übersehen hat. XAF ist riesig, jede Codebasis verwendet einen anderen Ausschnitt davon, und kein einzelnes Projekt übt das gesamte Framework aus. Es gibt eine Extraktionslücken-Vorlage genau dafür: Zeigen Sie das XAF-Muster, das Ihr Projekt verwendet, und was das Tool nicht gesehen hat.
Siehe CONTRIBUTING.md. Fehlerberichte, Dokumentation und Übersetzungen sind gleichermaßen willkommen.
Lizenz
MIT. Siehe NOTICE.md für die Beziehung zu DevExpress.
Ein unabhängiges Community-Projekt – nicht verbunden mit, unterstützt von oder gefördert durch Developer Express Inc. Es enthält keinen DevExpress-Quellcode und benötigt keine DevExpress-Lizenz zum Bauen oder Ausführen. DevExpress, XAF und eXpressApp Framework sind Warenzeichen von Developer Express Inc.
Erstellt von Pedro Hernández (PeopleWorks), Microsoft MVP für .NET — für die DevExpress- und XAF-Community.
Maintenance
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI-assisted X++ development for Dynamics 365 Finance and Operations by pre-indexing the entire codebase and providing 54 specialized tools for metadata lookup, code generation, and best practice validation.23326136MIT
- AlicenseNot gradedqualityAmaintenanceProvides project context for AI agents in VS Code by analyzing technologies, structure, AGENTS.md rules, current branch, and source code without allowing arbitrary commands.MIT
- AlicenseAqualityDmaintenanceCode context for AI coding agents. Progressive, on-demand access to your internal .NET / NuGet package source — agents browse, search, and read private C# libraries autonomously, with zero workspace pollution.254MIT
- AlicenseAqualityCmaintenanceExtracts deterministic architecture maps from codebases for AI agents, enabling queries about blast radius, routes, security findings, and production readiness without sending code anywhere.6MIT
Related MCP Connectors
Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
AI Agent with Architectural Memory. Impact analysis (free), tests and code from the graph (pro).
End-to-end agent-managed company brain. Docs, diagrams, plans, Knowledge Graph. Lean & affordable.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/peopleworks/XAFLogicExplainer'
If you have feedback or need assistance with the MCP directory API, please join our Discord server