Language Server for AI — Panoramica del Progetto
LSAI è un server MCP che fornisce analisi semantica del codice ottimizzata per i token agli assistenti AI. Integra Roslyn (C#) e server LSP (Python, TypeScript, JavaScript, Java) dietro un'architettura a plugin unificata, fornendo code intelligence avanzata (ricerca, utilizzi, gerarchia, chiamanti, outline, ecc.) in formati compressi che risparmiano 82–86% dei token rispetto al JSON LSP grezzo.
Include una console di gestione web (Angular + PrimeNG) per gestire repository, monitorare l'utilizzo e configurare i workspace. Il tutto pacchettizzato in una singola immagine Docker.
graph LR
AI["🤖 Assistente AI\nAI Assistants"] -->|"Protocollo MCP\nHTTP"| Server
User["🌐 Browser"] --> SPA
subgraph LSAI["Server Zerox.LSAI — ASP.NET"]
Server["Host MCP\n18 Strumenti + Formattatori"]
WS["Gestore Sessioni\nWorkspace"]
DB[("SQLite")]
SPA["Console Angular\nPrimeNG"]
Server --> WS
Server --> DB
end
subgraph Plugins["Plugin — caricati a runtime"]
Roslyn["Plugin.Roslyn\nC# via API Roslyn"]
LSP["Plugin.Lsp\nClient StreamJsonRpc"]
end
WS --> Roslyn
WS --> LSP
subgraph LSPServers["Server LSP Esterni — processi gestiti"]
Pyright["Pyright\nPython"]
TSLS["typescript-language-server\nTS + JS"]
JDTLS["Eclipse JDTLS\nJava"]
end
LSP -->|"stdin/stdout"| Pyright
LSP -->|"stdin/stdout"| TSLS
LSP -->|"stdin/stdout"| JDTLS
Quanto impiegherebbe uno sviluppatore super senior .NET/Angular a costruire questo progetto da zero, scrivendo tutto il codice a mano?
| # | Fase | Giorni | Note |
|---|---|---|---|
| 0 | Ricerca + POC Spike | 3 | Spec protocollo MCP, API Roslyn, protocollo LSP, validare fattibilità con uno spike minimale |
| 1 | Ambiente + Scaffolding | 1 | .NET 10, Node.js, Python, Java SDK, repo git, struttura solution, Directory.Build.props, CI base |
| 2 | Contratti Core | 2 | ILsaiPlugin, DTO, enum, interfacce formati output, parametri/risultati operazioni |
| 3 | Infrastruttura Plugin | 3 | Isolamento AssemblyLoadContext, discovery plugin via convenzione deps.json, validazione, registrazione DI |
| 4 | Server + Trasporto MCP | 3 | Host ASP.NET, integrazione MCP SDK, 18 definizioni tool, gestione sessioni workspace, config Kestrel |
| 5 | Formattatori Output | 2 | 6 formati (CompactText, CompactTextVerbose, TurboCompact, CompilerOutput, GrepOutput, LanguageSyntax) |
| 6 | Plugin Roslyn (C#) | 6 | Caricamento workspace MSBuild, 11 operazioni. Le API Roslyn hanno spigoli vivi |
| 7 | Plugin LSP Bridge | 10 | Client StreamJsonRpc, handshake LSP, capabilities, ciclo di vita processi, 4 config linguaggio. La parte più difficile |
| 8 | Console Web — Backend | 4 | SQLite + EFCore, migrazioni, RepositoryManager, UsageTracker, REST API |
| 9 | Console Web — Frontend | 5 | Angular 21, PrimeNG, Dashboard, pagina Repository, pagina Linguaggi, generazione client API |
| 10 | Pacchettizzazione Docker | 3 | Dockerfile a 3 stadi, tutti i server LSP, file compose, binding Kestrel, strategia porte |
| 11 | Testing | 5 | 617 test unitari, E2E per linguaggio, benchmark efficienza token, validazione cross-platform |
| 12 | Bug Fixing + Rifinitura | 4 | Bug risoluzione path, edge case LSP, problemi cross-platform, trappole case sensitivity NTFS |
| TOTALE | 51 | ~10,5 settimane, ~2,5 mesi |
| Scenario | Moltiplicatore | Totale |
|---|---|---|
| Ottimistico (tutto fila liscio, nessuna sorpresa) | 1x | ~51 giorni lavorativi (~2,5 mesi) |
| Realistico (server LSP capricciosi, vicoli ciechi, 61K righe a mano) | 1,8x | ~90 giorni (~4,5 mesi) |
| Pessimistico (deadlock OmniSharp, quirk JDTLS, bug cross-platform) | 2,5x | ~125 giorni (~6 mesi) |
| Risultato reale con AI (AI coding assistant, ~95% scritto da AI) | 0,18x | 9 giorni |
Il Plugin LSP Bridge (Fase 7) domina perché:
Il Plugin Roslyn (Fase 6) è il secondo divoratore di tempo:
Il progetto è stato costruito con un AI coding assistant che ha scritto ~95% del codice, diretto da uno sviluppatore senior che ha progettato l'architettura e preso tutte le decisioni. Ruolo umano: architettura, decisioni, prompting, review, test manuali.
| Giorno | Commit | Cosa È Stato Costruito | Ore | Fase (stima manuale) |
|---|---|---|---|---|
| Giorno 1 (sera) | 9 | Risultati POC, scaffolding progetto, contratti core, plugin loader | ~3-4h | Fasi 0+1+2+3 |
| Giorno 2 | 26 | Formattatori output, server MCP + 12 tool, Roslyn Tier1 (7 op.), Roslyn Tier2+3 (4 op.), trasporto HTTP, sessioni workspace, test E2E (24), distribuzione, README, gap analysis | ~12-14h | Fasi 3+4+5+6 + Feature 8-11 |
| Giorno 3 | 10 | Bug fix (ricerca, diagnostica, dipendenze), chiusura gap, formati output a 3 livelli, ricerca OmniSharp | ~8-10h | Fase 5 v2 + Feature 12 |
| Giorno 4 | 3 | Plugin LSP Bridge per Python (basato su OmniSharp), 7 fix critici da test live | ~4-5h | Inizio Fase 7 |
| Giorno 5 | 2 | Config multi-linguaggio (TS, JS, Java), didOpen per-file, auto-rilevamento linguaggio | ~4-5h | Fase 7 continua |
| Giorno 6 | 4 | Porting cross-platform WSL/Linux, server LSP nativi, indagine jdtls, bug risoluzione path | ~8h | Fase 7 + cross-platform |
| Giorno 7 | 5 | Root cause deadlock OmniSharp trovata, riscrittura completa StreamJsonRpc (27 file, +2161/−1075 righe), readiness deterministica | ~10h | Fase 7 debugging profondo |
| Giorno 8 | 17 | Fix capabilities LSP, E2E 15/15, benchmark efficienza token (8 test), Docker 3 stadi, script deploy | ~12h | Fine Fase 7 + Fase 10 |
| riposo | 0 | — | 0 | — |
| Giorno 9 | 18 | Rinomina progetto, tool lsai_source, REST API (controller + servizi + 121 test), migrazione SQLite/EFCore, scaffold Angular 21, PrimeNG, pagine Dashboard + Repository + Linguaggi, hosting SPA, aggiornamento Docker | ~12-14h | Fasi 8+9+10 |
| TOTALE | 94 | ~73-80h | ~9-10 giorni lavorativi |
Come baseline si usa la stima realistica (1,8x), dato che quella ottimistica di 51 giorni presuppone zero sorprese — cosa che non succede mai con quirk non documentati dei server LSP.
| Fase | Stima realistica (manuale) | Reale (con AI) | Speedup |
|---|---|---|---|
| Ricerca + Scaffolding | ~7 giorni | ~0,3 giorni | 23x |
| Contratti Core | ~4 giorni | ~0,2 giorni | 20x |
| Infrastruttura Plugin | ~5 giorni | ~0,2 giorni | 25x |
| Server + Trasporto MCP | ~5 giorni | ~0,3 giorni | 17x |
| Formattatori Output | ~4 giorni | ~0,5 giorni | 8x |
| Plugin Roslyn (C#) | ~11 giorni | ~0,5 giorni | 22x |
| Plugin LSP Bridge | ~18 giorni | ~4,5 giorni | 4x |
| Console Web — Backend | ~7 giorni | ~0,5 giorni | 14x |
| Console Web — Frontend | ~9 giorni | ~0,5 giorni | 18x |
| Docker | ~5 giorni | ~0,5 giorni | 10x |
| Testing | ~9 giorni | distribuito | — |
| Bug fixing + Rifinitura | ~7 giorni | ~1,5 giorni | 5x |
| TOTALE | ~90 giorni (~4,5 mesi) | 9 giorni | 10x |