Skip to main content
Glama
peopleworks

xaf-logic-explainer

XAF Logic Explainer

CI License: MIT NuGet CLI NuGet Core NuGet MCP .NET 10 MCP registry Available on CodeGuilds Listed on Glama XAF GitHub stars

Bringen Sie Ihrem KI-Coding-Agenten bei, was Ihre XAF-Anwendung tatsächlich tut.

So funktioniert es →

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

DevExpress agent-skills

Was die offizielle Dokumentation sagt

DevExpress Docs MCP Server

Was IHRE Anwendung tut

XAF Logic ExplainerSie 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 Ihren using-Anweisungen.

  • Controller und AktionenSimpleAction, 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-SetupModuleUpdater-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:

AGENTS.md

~11 KB

Immer geladen: Grundregeln, vollständige Bestandsverzeichnisse, Konventionen, Rezepte

.xaflogic/*.md

~70 KB

Bei Bedarf geöffnet: vollständige Eigenschaften, Handler-Code, Regelmeldungen, .xafml

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-xaf

Das 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

xaf_overview

Was diese Anwendung ist und die vollständige Liste aller darin enthaltenen Elemente

xaf_search

Wo ein Feld, Konzept oder Geschäftsbegriff definiert ist

xaf_entity

Jede Eigenschaft, Beziehung, Regel und Berechnung zu einer Entität

xaf_controller

Was eine Aktion bewirkt – einschließlich des C#, das beim Auslösen ausgeführt wird

xaf_rules

Was die Anwendung validiert, berechnet, ausblendet und deaktiviert

xaf_model

Model-Editor-Anpassungen, die in keiner C#-Datei existieren

xaf_editors

Benutzerdefinierte Editoren, das benötigte JavaScript und zur Laufzeit geänderte integrierte Editoren

xaf_migrations

Was einmalig gegen eine Live-Datenbank ausgeführt wurde, und der Kommentar, der erklärt, warum

xaf_view

Alles, was auf einen Bildschirm geladen wird – welche Controller aktiviert werden und warum

xaf_refresh

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" --open

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

Das Domänenmodell einer Beispiel-XAF-Anwendung. Beim Überfahren einer Entität wird alles ausgeblendet, was sie nicht berührt, sodass nur ihre eigenen Beziehungen leuchten – lila, wenn das Löschen des Elternteils das Kind löscht.

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 --open

Optional: 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 build

Das 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:

  • ArchiveController erweitert den integrierten DeleteObjectsViewController – 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

agents

Schreibt AGENTS.md / CLAUDE.md / Copilot-Anweisungen für Ihren Agenten

mcp

Als MCP-Server ausführen, damit Agenten die App live abfragen können

explain

Schreibt eine eigenständige HTML-Seite, die die App einer Person erklärt

catalog

Erstellt den DevExpress-Grundwahrheitskatalog (build, status)

extract

Liest das Projekt, schreibt lokal Markdown + JSON

diff

Vergleicht mit der vorherigen Extraktion und meldet, was sich geändert hat

status

Zeigt den Änderungserkennungs-Hash und ob eine Neu-Extraktion nötig ist

watch

Extrahiert bei Dateiänderung neu, mit Entprellung

sync

Extrahiert und veröffentlicht auf ein entferntes Ziel

chat

Stellt Fragen zum extrahierten Projekt

config

Setzt Standardwerte in ~/.xaflogic/config.json

projects

Verwaltet mehrere XAF-Projekte; die meisten Befehle akzeptieren --all

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, .xafml

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 (--enrich)

Blazor-In-App-Hilfspanel

AGENTS.md / CLAUDE.md / Copilot-Anweisungen – keine Infrastruktur, funktioniert für alle

xaflogic explain – eine eigenständige HTML-Seite, für eine Person statt für einen Agenten

Erweiterbare Veröffentlichungsziele (IDocumentationSink)

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:

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 plugin

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

A
license - permissive license
A
quality
A
maintenance

Maintenance

UpdatingMaintainers
UpdatingResponse time
1dRelease cycle
10Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Code 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.
    2
    54
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Extracts deterministic architecture maps from codebases for AI agents, enabling queries about blast radius, routes, security findings, and production readiness without sending code anywhere.
    6
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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