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

AI 코딩 에이전트에게 여러분의 XAF 애플리케이션이 실제로 무엇을 하는지 가르쳐주세요.

작동 방식 보기 →

XAF 모듈을 가리키기만 하면 됩니다. 엔티티, 컨트롤러, 액션, 비즈니스 규칙, 탐색 및 모델 편집기 사용자 지정을 소스 코드에서 직접 읽어와서 여러분이 코드를 작성하는 모든 에이전트에 결과를 전달합니다.


이 도구가 필요한 이유

DevExpress는 AI 에이전트가 XAF에 능숙해지도록 훌륭한 작업을 해왔습니다. 이미 두 가지 도구가 존재하며, 이것이 세 번째입니다:

에이전트에게 가르치는 내용

도구

XAF가 일반적으로 어떻게 작동하는지

DevExpress agent-skills

공식 문서가 무엇을 말하는지

DevExpress Docs MCP Server

여러분의 애플리케이션이 무엇을 하는지

XAF Logic Explainer현재 위치

XAF 문서의 모든 페이지를 읽은 에이전트라도 여러분의 Invoice 합계가 라인 항목에서 계산된다는 것, ApproveController가 기간이 마감되면 실행을 거부한다는 것, 또는 세 개의 열이 모델 편집기에서 숨겨져 있고 어떤 C# 파일에도 나타나지 않는다는 것을 알지 못합니다. 이 세 가지를 모두 자신 있게 지어낼 것입니다.

이 격차는 더 나은 프롬프트로 해결할 수 없습니다. 추출로 해결할 수 있습니다.

이 도구들은 함께 구성됩니다. 프레임워크 지식을 위해 DevExpress 스킬을 설치하고, 공식 참조를 위해 Docs MCP를 사용하며, 여러분의 코드베이스를 위해 이것을 사용하세요. 그 어떤 것도 다른 것을 대체하지 않습니다.

Related MCP server: DevScope MCP

추출하는 내용

아래의 모든 것은 Roslyn을 사용하여 구문으로 읽힙니다. 프로젝트를 컴파일할 필요가 없으며, 이 도구는 DevExpress 어셈블리에 대해 링크하지 않습니다:

  • 엔티티 — 속성, 타입, 연관 관계, 그리고 의미를 부여하는 XAF 속성 ([Association], [Aggregated], [RuleRequiredField], [Appearance], [ModelDefault], …). XPO 및 EF Core, using 문에서 자동 감지됩니다.

  • 컨트롤러 및 액션SimpleAction, PopupWindowShowAction, SingleChoiceAction, 대상 기준 및 실행될 때 실행되는 핸들러 코드.

  • 비즈니스 규칙 — 유효성 검사 속성 및 코드 규칙, 첨부된 조건 포함.

  • 모듈 설정ModuleUpdater 시드 데이터 및 첫 실행 시 생성되는 내용.

  • 탐색 — 사용자가 실제로 보는 그룹 및 항목.

  • 모델 편집기 (.xafml) — C# 코드를 읽는 사람에게는 보이지 않고 XML에만 존재하는 사용자 지정. 모듈 및 플랫폼 파일은 XAF가 병합하는 방식으로 병합됩니다.

  • 사용자 정의 속성 및 목록 편집기 — 작동에 필수적인 JavaScript를 포함하며, View.CustomizeViewItemControl<T>()를 통해 런타임에 재구성된 기본 제공 편집기를 포함합니다. 이들은 비즈니스 객체 옆의 플랫폼 프로젝트에 있으므로 비즈니스 객체를 읽는 사람은 이를 만나지 않습니다.

  • 버전 게이트 마이그레이션 — 업데이터의 CurrentDBVersion < new Version(…) 블록. 각 블록은 데이터베이스당 최대 한 번 실행되며, 현재 코드가 설명할 수 없는 데이터에 대한 유일한 설명입니다.

  • 모든 화면 및 로드되는 내용 — 아래 참조.

이것들은 모든 비즈니스 클래스를 읽은 에이전트가 여전히 애플리케이션에 대해 자신 있게 틀릴 수 있는 이유입니다:

이 화면을 열면 무엇이 실행되나요?

XAF 저장소의 어떤 것도 이에 답하지 않으며, 두 부분 모두 다른 이유로 누락되어 있습니다.

화면 자체는 어떤 파일에도 없습니다. XAF는 모든 비즈니스 클래스에 대해 목록, 상세 및 조회 뷰를 생성하고, 모든 컬렉션에 대해 목록 뷰를 생성하며, 모델 편집기는 누군가 변경한 것만 저장합니다. 소스에서 Patient_Prescriptions_ListView를 검색하면 아무것도 찾을 수 없습니다. 그리고 그것이 없다는 증거는 아닙니다.

어떤 컨트롤러가 실행되는지는 런타임에 결정되며, XAF가 AND 연산하는 네 가지 조건(중첩, 뷰 타입, 객체 타입 및 뷰 ID)에 의해 결정됩니다. 각 조건은 설정되지 않으면 제한이 없으므로, 아무것도 설정하지 않은 컨트롤러는 여러분이 가진 모든 화면에 로드됩니다.

이 도구는 ViewController.IsFitToView가 평가하는 방식대로 네 가지를 모두 읽고, 프레임워크 자체 ID 생성기에서 구축된 뷰 인벤토리에 대해 평가하며, 각각이 일치한 이유를 기록하여 답을 신뢰하기보다 확인할 수 있도록 합니다:

두 계층이 분리되어 있습니다. 팀이 작성한 것은 전체 처리를 받고, XAF가 제공하는 것은 한 줄 뒤에 접혀 있습니다. 그 양이 많고 변경할 수 있는 것이 아니기 때문입니다. 실측 카탈로그를 사용하면 이름도 지정됩니다. 실제로 등록한 모듈로 범위가 지정되므로 WinForms 컨트롤러가 Blazor 화면에 나타나지 않습니다.

주장하지 않는 것: 여기에 나열된 컨트롤러는 Active["reason"]을 통해 자체적으로 비활성화될 수 있으며, 이는 데이터와 사용자에 따라 다릅니다. 이것은 XAF가 화면에 로드하는 것이지, 반드시 무언가를 할 것이라는 의미는 아닙니다. 그리고 소스에서 읽을 수 없는 것은 조용히 "모든 곳에서 실행"으로 처리되는 대신 이유와 함께 별도로 나열됩니다.

빠른 시작

dotnet tool install -g XafLogicExplainer.Cli

xaflogic agents --project "C:\MySolution\MyApp.Module"

그러면 솔루션 루트에 AGENTS.md, CLAUDE.md.github/copilot-instructions.md가 작성됩니다. 계정, API 키, 서버가 필요 없습니다. 다음 질문부터 에이전트가 애플리케이션을 이해합니다.

작성되는 내용과 두 개로 분할된 이유

AGENTS.md는 저장소에서 에이전트가 하는 모든 요청 앞에 추가되므로, 그 비용은 영원히 지불됩니다. 70KB의 엔티티 세부 정보를 거기에 덤프하면 실제 질문이 밀려날 것입니다. 따라서 출력은 계층화됩니다:

AGENTS.md

~11 KB

항상 로드됨: 기본 규칙, 전체 인벤토리, 규칙, 레시피

.xaflogic/*.md

~70 KB

필요 시 열림: 전체 속성, 핸들러 코드, 규칙 메시지, .xafml

가장 가치 있는 부분은 가장 작습니다. AGENTS.md기본 규칙으로 시작합니다. 이 애플리케이션이 XPO를 사용하고 EF Core를 절대 사용하지 않는다는 것, 인벤토리가 완전하므로 없는 것은 진정으로 존재하지 않는다는 것, 일부 동작이 C#이 아닌 모델 편집기에 있다는 것 등입니다. 이 몇 문단이 에이전트가 익숙하지 않은 XAF 코드베이스에 대해 자신 있게 지어내는 대부분의 발상을 막습니다.

기존 파일은 절대 덮어쓰지 않습니다. 생성된 텍스트는 마커 사이에 있으며, 수동으로 작성한 내용은 보존되고, 아무것도 변경되지 않으면 재생성 시 바이트가 동일합니다.

또는 에이전트가 직접 질문하도록 하세요

생성된 파일은 스냅샷입니다. MCP 서버는 라이브 연결입니다. 에이전트가 작업하는 동안 애플리케이션을 쿼리하며, 오래될 수 없습니다.

/plugin marketplace add peopleworks/XAFLogicExplainer
/plugin install xaf-logic-explainer@peopleworks-xaf

그러면 한 번에 스킬과 MCP 서버를 설치합니다. 다른 MCP 클라이언트의 경우, 설치 없이 NuGet에서 직접 실행하거나:

{
  "mcpServers": {
    "xaf": { "command": "dnx", "args": ["XafLogicExplainer.Mcp", "--yes"] }
  }
}

…또는 이미 CLI가 있다면 가리키기만 하면 됩니다:

{ "mcpServers": { "xaf": { "command": "xaflogic", "args": ["mcp"] } } }

솔루션 디렉토리에서 시작하면 자체적으로 XAF 모듈을 찾으므로, 어떤 형태도 경로가 필요하지 않습니다.

도구

설명

xaf_overview

이 애플리케이션이 무엇이며, 그 안에 있는 모든 항목의 전체 목록

xaf_search

필드, 개념 또는 비즈니스 용어가 정의된 위치

xaf_entity

하나의 엔티티에 대한 모든 속성, 관계, 규칙 및 계산

xaf_controller

액션이 수행하는 작업 — 실행될 때 실행되는 C# 코드 포함

xaf_rules

애플리케이션이 검증, 계산, 숨기기 및 비활성화하는 항목

xaf_model

C# 파일에는 없는 모델 편집기 사용자 정의

xaf_editors

사용자 정의 편집기, 필요한 JavaScript, 런타임에 변경된 기본 제공 편집기

xaf_migrations

라이브 데이터베이스에 대해 한 번 실행된 항목과 이유를 설명하는 주석

xaf_view

하나의 화면에 로드된 모든 것 — 활성화되는 컨트롤러와 그 이유

xaf_refresh

소스 다시 읽기 (변경 사항은 자동으로 감지됨)

거기에 없는 것을 요청하면 답변은 유용한 것으로 제공됩니다:

이 애플리케이션에는 'PurchaseOrder'라는 엔티티가 없습니다. 다음은 전체 소스 트리에서 추출한 19개 엔티티의 전체 목록입니다: … 사용자가 'PurchaseOrder'가 존재할 것으로 예상한다면, 아직 생성되지 않은 것입니다.

공식 DevExpress 스킬과 함께 사용하세요. /plugin install dx-xaf@DevExpress-agent-skills 는 XAF의 작동 방식을 가르칩니다. 이것은 애플리케이션이 수행하는 작업을 가르칩니다. 첫 번째 스킬만 가진 에이전트는 없는 엔티티에 대해 올바른 XAF를 작성할 것입니다.

사람을 위한 동일한 지식

에이전트는 AGENTS.md를 읽거나 MCP 서버를 쿼리합니다. 10년 된 XAF 애플리케이션을 인수받은 사람은 동일한 사실을 매우 다르게 배열해야 합니다:

xaflogic explain --project "C:\MySolution\MyApp.Module" --open

하나의 HTML 파일입니다. 서버, 빌드 단계, 네트워크 요청이 없습니다 — 인터넷이 없는 컴퓨터에서 이메일 첨부 파일로 열리며, 이것이 실제로 업무 인수가 이루어지는 방식입니다.

코드베이스 전체에 흩어져 있는 연결 속성으로부터 도메인 모델의 지도를 그립니다. 대부분의 팀은 자신의 것을 본 적이 없습니다: 한 사람의 머릿속에 존재하며, 그 사람이 떠날 때 사라지는 지식입니다.

샘플 XAF 애플리케이션의 도메인 모델입니다. 엔티티 위에 마우스를 올리면 해당 엔티티가 닿지 않는 모든 것이 흐려지고, 자신의 관계만 빛납니다 — 보라색은 부모 삭제 시 자식도 삭제됨을 의미합니다.

이 리포지토리의 샘플 애플리케이션에서 실제 출력입니다. 엔티티 위에 마우스를 올리면 닿지 않는 모든 것이 흐려지고, 보라색은 부모 삭제 시 자식도 삭제됨을 의미합니다.

이와 함께: 각 엔티티와 각 속성의 설명, 실행되는 코드가 포함된 모든 액션, 사용자가 실제로 볼 메시지가 포함된 유효성 검사, 그리고 어떤 C# 파일에도 없는 모델 편집기 설정이 제공됩니다.

그리고 애플리케이션의 모든 기준 표현식의 색인 — SQL도 C#도 아닌 방언으로, 소스 전체에 흩어져 있고 다른 곳에서는 수집되지 않는 특성에서 수집됩니다:

자체 코드를 건드리지 않고 샘플에서 시도해보세요:

xaflogic explain --project tests/XafLogicExplainer.Tests/Fixtures/DemoSolution/PharmacyDemo.Module --open

선택 사항: 코드와 DevExpress 코드 구분하기

추출은 작성된 프레임워크에 대해 아무것도 모르고 소스를 읽으므로 한 가지 질문에 답할 수 없습니다: DeleteObjectsViewController는 팀이 작성한 것인가요, 아니면 DevExpress에서 제공하는 것인가요? 답이 없으면 생성된 문서는 프레임워크 동작과 자체 로직을 동일한 것으로 제시합니다.

DevExpress 라이선스가 있는 경우:

xaflogic catalog build

이것은 자체 설치 환경을 읽고 XAF 자체가 제공하는 것(속성, 컨트롤러, 모델 인터페이스 및 모듈)을 공식 요약 및 DevExpress에서 제공하는 문서 링크와 함께 기록합니다. DevExpress 26.1에서는 약 850개의 프레임워크 유형입니다.

DevExpress 소스 코드 구성 요소도 설치한 경우, 각 프레임워크 컨트롤러가 활성화되는 위치를 기록합니다 — XAF가 실행 전에 확인하는 네 가지 조건입니다. 이것은 어셈블리에서 읽을 수 없습니다: 다섯 개 중 네 개의 기본 제공 컨트롤러는 생성자 내에서 대상을 설정합니다. 어셈블리 옆에 없는 경우 --dx-sources <Components/Sources>를 전달하세요.

그러면 추출이 자동으로 이를 인식하여 그렇지 않으면 말할 수 없는 내용을 말할 수 있습니다:

  • "ArchiveController는 기본 제공 DeleteObjectsViewController를 확장합니다" — 기능을 추가하는 것이 아니라 애플리케이션 전체에서 삭제 작동 방식을 변경하는 것입니다.

  • "[AuditedByFinance]는 XAF 또는 .NET 특성이 아닙니다" — 팀이 발명했으므로 그 의미는 이 코드베이스에만 존재하며 문서 어디에도 없습니다.

  • "32개의 프레임워크 컨트롤러도 이 화면에 로드됩니다" — 이름이 지정되고 각각 수행하는 작업이 포함되며, 애플리케이션이 실제로 등록하는 모듈로 범위가 지정되어 WinForms 컨트롤러가 Blazor 화면에 나타나지 않습니다.

카탈로그는 ~/.xaflogic/catalog/에 작성되며, 절대 리포지토리에 저장되지 않습니다: 라이선스 소프트웨어에서 파생되었습니다. 카탈로그 없이도 모든 것이 작동합니다 — 출력만 더 선명해집니다. NOTICE.md를 참조하세요.

명령어

명령어

기능

agents

에이전트를 위한 AGENTS.md / CLAUDE.md / Copilot 지침 작성

mcp

MCP 서버로 실행하여 에이전트가 애플리케이션을 실시간으로 쿼리할 수 있도록 함

explain

애플리케이션을 사람에게 설명하는 자체 포함 HTML 페이지 작성

catalog

DevExpress 기준 진실 카탈로그 구축 (build, status)

extract

프로젝트를 읽고 로컬에 Markdown + JSON 작성

diff

이전 추출과 비교하여 변경된 사항 보고

status

변경 감지 해시 표시 및 재추출 필요 여부 표시

watch

파일 변경 시 디바운스로 재추출

sync

추출 후 원격 대상에 게시

chat

추출된 프로젝트에 대한 질문

config

~/.xaflogic/config.json에 기본값 설정

projects

여러 XAF 프로젝트 관리; 대부분의 명령어는 --all 허용

문서는 영어 또는 스페인어로 생성됩니다 (--lang en|es).

유용한 플래그: --orm auto|XPO|efcore, --lang en|es, --enrich (컨트롤러 및 액션별 AI 생성 비즈니스 로직 요약), --force, --all.

--enrich에는 모델이 필요하며, 다음 중 하나면 충분합니다 — 명령줄의 키가 우선하고, 그 다음 환경 변수, 마지막으로 사용 가능한 PeopleWorks Copilot 계정이 있습니다:

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

이 도구의 다른 모든 기능은 키, 계정, 네트워크 없이 실행됩니다.

추출은 증분적입니다 — .cs.xafml 파일에 대한 SHA-256으로 변경되지 않은 프로젝트는 아무 작업도 수행하지 않습니다. 빌드 시 실행하려면 MSBuild .targets 파일이 있습니다.

상태

v0.14.0. 추출 엔진은 성숙한 부분입니다: 실제 XAF 애플리케이션에서 프로덕션 환경에서 실행됩니다. 에이전트 지향 인터페이스는 지금 공개적으로 출시되고 있습니다.

Roslyn 추출 — 엔티티, 컨트롤러, 규칙, 업데이터, 탐색, .xafml

XPO 및 EF Core, 자동 감지

사용자 정의 속성 및 목록 편집기, 해당 클라이언트 자산, 런타임에 재구성된 기본 제공 편집기

버전별 데이터 마이그레이션 — 새 데이터베이스가 아닌 데이터베이스에 적용된 사항

증분 변경 감지, 차이 보고서, 다중 프로젝트, 감시 모드

컨트롤러 및 액션의 AI 강화 (--enrich)

Blazor 인앱 도움말 패널

AGENTS.md / CLAUDE.md / Copilot 지침 — 인프라 없음, 모든 사용자에게 적용 가능

xaflogic explain — 자체 포함 HTML 페이지, 에이전트 대신 사람용

플러그 가능한 게시 대상 (IDocumentationSink)

MCP 서버 — 10개 도구, 소스에 대해 실시간 실행

설치 가능한 Claude Code 플러그인 (스킬 및 MCP 서버 포함)

345개 테스트 (합성 XPO 및 EF Core 픽스처 대상) — DevExpress 필요 없음

DevExpress 기준 진실 카탈로그, 라이선스 보유자가 로컬에서 생성

이 도구가 성장한 PeopleWorks Copilot은 이제 모든 것이 중심으로 구축된 대상이 아니라 여러 대상 중 하나입니다. 가장 중요한 출력은 서버가 전혀 필요하지 않습니다.

긴 버전

XAF 애플리케이션 동작의 3분의 1이 비즈니스 클래스 외부에 존재하는 이유, 숨겨진 네 곳, 추출된 출력의 실제 모양:

각각은 서로 번역된 것이 아니라 각 언어로 작성되었습니다. 소스는 docs/Blog/에 있습니다.

리포지토리 구조

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

.NET 10 기반으로 빌드되었습니다.

XafLogicExplainer.Blazor만 DevExpress 패키지를 참조합니다. 빌드하려면 DevExpress NuGet 피드와 라이선스가 필요합니다. 다른 모든 것은 어디서든 빌드되므로 CI가 무료로 확인할 수 있습니다.

기여하기

가장 가치 있는 기여는 추출기가 놓친 부분을 알려주는 것입니다. XAF는 방대하며, 각 코드베이스는 다른 부분을 사용하고 있으며, 단일 프로젝트가 전체 프레임워크를 실행하지는 않습니다. 이를 위한 추출-격차 이슈 템플릿이 있습니다: 프로젝트에서 사용하는 XAF 패턴과 도구가 감지하지 못한 것을 보여주세요.

CONTRIBUTING.md를 참조하세요. 버그 보고서, 문서 및 번역 모두 환영합니다.

라이선스

MIT. DevExpress와의 관계는 NOTICE.md를 참조하세요.

독립적인 커뮤니티 프로젝트입니다 — Developer Express Inc.와 제휴하거나 보증 또는 지원을 받지 않습니다. DevExpress 소스 코드를 포함하지 않으며 빌드나 실행에 DevExpress 라이선스가 필요하지 않습니다. DevExpress, XAF, eXpressApp Framework는 Developer Express Inc.의 상표입니다.

Pedro Hernández (PeopleWorks), Microsoft MVP for .NET — DevExpress 및 XAF 커뮤니티를 위해 제작되었습니다.

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