RPG + IA, do zero ao combate.
Plataforma ASP.NET Core para mestrar sessões de RPG com IA orquestrando NPCs, chat em tempo‑real, streaming/SSE, SignalR, controle de mídia e telemetria.
- Arquitetura
- Principais recursos
- Stack técnica
- Estrutura de pastas
- Guia rápido (Windows / Linux)
- Configuração
- Execução
- APIs / Endpoints
- Hubs (SignalR)
- Testes (Unit / E2E)
- Boas práticas de versionamento
- Roadmap
- Contribuindo
- Licença
Monolito ASP.NET Core com camadas explícitas:
- Controllers para endpoints REST (
/api/*) e streaming SSE. - SignalR Hubs para chat/battlemap em tempo‑real.
- Services para regras de domínio (chat, rolagens, mídia, IA, telemetria).
- Data com Entity Framework Core e Identity.
- Models/Dtos/ViewModels para tipos fortemente tipados.
- wwwroot para assets estáticos controlados via LibMan.
O orquestrador de IA centraliza a conversa de NPCs (gera fala, decide memórias, grava telemetria), delegando o provedor ativo (Local/Gemini) via factory configurável.
- Chat e combate em tempo real com SignalR (
ChatHub,BattlemapHub). - SSE para streaming de mensagens:
/sessions/{sessionId}/chat/stream. - Orquestração de IA: geração de respostas de NPC e decisão de memória automática.
- Múltiplos provedores de IA:
Local(HTTP) eGemini(Vertex AI) selecionáveis por configuração. - Métricas & Telemetria de NPCs e Sistema (endpoints administrativos).
- Uploads de mídia (imagens/áudios) com ImageSharp.
- Autenticação/Autorização com Identity e roles (
Admin,Narrator,User). - Swagger para documentação interativa.
- Seed/Migrate automáticos no startup (migrations +
DevSeeder+NpcSystemSeeder).
- .NET 8, ASP.NET Core, Razor Pages + APIs
- EF Core (
Microsoft.EntityFrameworkCore.Sqlite) - Identity (UI + EntityFrameworkCore)
- SignalR (Chat/Battlemap)
- Swagger (
Swashbuckle.AspNetCore) - HtmlSanitizer (higienização de entrada)
- SixLabors.ImageSharp (processamento de imagens)
- NUnit + Moq + Playwright (unit + E2E)
- LibMan (Bootstrap/JS libs em
wwwroot/lib)
Pacotes relevantes no projeto: AspNetCoreRateLimit, Google.Apis.Auth, NJsonSchema, etc.
MestraAI/
├─ MestrAI.sln
├─ MestrAI/ # Web app
│ ├─ Controllers/ # REST + SSE
│ ├─ Hubs/ # SignalR (ChatHub/BattlemapHub)
│ ├─ Services/ # Regras, Orquestrador de IA, Providers
│ ├─ Data/ # ApplicationDbContext, Migrations, Seeders
│ ├─ Models/ Dtos/ ViewModels/ # Tipos de domínio
│ ├─ HealthChecks/ # Healthchecks (ex.: SignalRHealthCheck)
│ ├─ Prompts/ Ai/ Config/ # Artefatos de IA
│ ├─ wwwroot/ # Estáticos (lib via LibMan)
│ ├─ appsettings*.json
│ └─ MestrAI.csproj
└─ MestrAI.Tests/ # NUnit + Playwright
Árvore gerada automaticamente a partir do repositório em 2025-09-29.
Pré-requisitos:
- .NET SDK 8.0+
- LibMan CLI:
dotnet tool install -g Microsoft.Web.LibraryManager.CLI - (Linux) PowerShell 7 para scripts do Playwright:
sudo snap install powershell --classic
Instalação local:
# Restaurar dependências
libman restore
dotnet restore
# Criar/atualizar banco (SQLite)
dotnet tool install -g dotnet-ef # 1ª vez
dotnet ef database update --project MestrAI/MestrAI.csproj
# Build & Test
dotnet build
dotnet testappsettings.json já aponta para um arquivo local (DataSource=app.db;Cache=Shared).
Para trocar por outro SQLite ou SQL Server, altere:
Seleção do provedor e parâmetros (exemplo existente no projeto):
// MestrAI/appsettings.json
"Ai": {{
"Provider": "Local",
"Local": {{
"ContextServiceUrl": "http://localhost:5001",
"MaxTokens": 4096,
"TimeoutSeconds": 30,
"MaxRetries": 2
}}
}}- Local: espera um serviço HTTP próprio (Context Service) para geração/embeddings/merge.
- Gemini (Vertex AI): habilite trocando
"Provider": "Gemini"e forneça credenciais via Google ADC (GOOGLE_APPLICATION_CREDENTIALSapontando para o JSON de service account) e parâmetros de modelo/endpoint conforme o seu ambiente.
VejaServices/GeminiProvider.cspara o fluxo de chamada.
launchSettings.json(Dev):http://localhost:5117(VS/dotnet runem Dev).appsettings.json(Kestrel):"http://localhost:5050"configurado emKestrel:Endpoints:Http:Url.
A porta efetiva aparece no console ao iniciar a aplicação.
Via CLI:
dotnet run --project MestrAI/MestrAI.csproj
# Abra: http://localhost:5117 (Dev) ou a porta exibida no console
# Swagger: /swaggerPublicação (Release):
dotnet publish MestrAI/MestrAI.csproj -c Release -o out
# deploy o conteúdo de /out para seu host (Nginx/Apache/IIS/Docker)Variáveis úteis em produção:
ASPNETCORE_ENVIRONMENT=ProductionConnectionStrings__DefaultConnection="..."Ai__Provider=Local|GeminiAi__Local__ContextServiceUrl="..."
BasePaths e exemplos (autorização via Identity; alguns exigem Admin/Narrator):
-
ChatController — base
/api/ChatPOST /api/Chat/sessions/{{sessionId}}/messagesGET /api/Chat/sessions/{{sessionId}}/messagesGET /api/Chat/sessions/{{sessionId}}/messages/recent
-
ChatStreamController — base
/sessions/{{sessionId}}/chatGET /sessions/{{sessionId}}/chat/stream(SSE)
-
AiController — base
/api/Ai(Roles: Narrator,Admin)POST /api/Ai/character/act— chama o AiOrchestrator para gerar fala do personagem/NPC.
-
AiNpcController — base
/api/AiNpcPOST /api/AiNpc/set-statusGET /api/AiNpc/session/{{sessionId}}/npcsGET /api/AiNpc/session/{{sessionId}}/auditGET /api/AiNpc/character/{{characterId}}/auditGET /api/AiNpc/session/{{sessionId}}/metrics
-
NpcTelemetryController — base
/api/NpcTelemetry(Roles: Admin,Narrator)GET /api/NpcTelemetry/session/{{sessionId}}GET /api/NpcTelemetry/system
-
MediaController — base
/api/MediaPOST /api/Media/upload(upload)GET /api/Media/session/{{sessionId}}GET /api/Media/file/{{mediaId}}POST /api/Media/audio/playPOST /api/Media/audio/stopDELETE /api/Media/{{mediaId}}
Documentação interativa em
/swagger(ativada em Development/Test).
"/chathub"— mensagens, presença, notificações."/battlemaphub"— sincronização do mapa, tokens/camadas.
- Unit com NUnit + Moq + EF InMemory.
- E2E com Playwright for .NET (NUnit).
Primeira execução dos testes E2E (instala browsers do Playwright):
dotnet build
pwsh ./MestrAI.Tests/bin/Debug/net8.0/playwright.ps1 install --with-deps
dotnet test- Commits: Conventional Commits (
feat:,fix:,chore:,test:,docs:…). - Branches:
main(estável) /feat/*/fix/*/hotfix/*. - SemVer:
vMAJOR.MINOR.PATCH. - Migrations: sempre versionadas. Nomeie com contexto (
AddNpcAudit,RefactorChatMessage).
- Painel administrativo para telemetria/saúde.
- Alternância de provedores de IA via UI.
- Hardening de segurança (CSP, rate-limit configurado).
- Export de transcrições e memórias.
- Testes E2E adicionais (fluxo completo de sessão).
- Abra uma issue descrevendo a melhoria/bug.
- Crie branch
feat/*oufix/*a partir demain. - Rode lint/build/test localmente.
- Abra um PR com descrição e checklist de testes.
Distribuído sob a licença MIT. Veja LICENSE (adicione o arquivo conforme sua preferência).
Nota: Este README foi gerado automaticamente a partir do conteúdo do repositório e ajustado para o estado atual do projeto.