Overview
AI Chess Assistant is a Chrome extension that demonstrates real-time chess engine integration with web-based chess platforms. The extension leverages the Stockfish chess engine to analyze board positions, evaluate moves, and provide intelligent suggestions directly on chess.com.
This project showcases modern browser extension development with TypeScript, real-time DOM manipulation, and WebWorker-based engine communication.
AI Chess Assistant est une extension Chrome qui démontre l'intégration en temps réel d'un moteur d'échecs avec les plateformes d'échecs en ligne. L'extension exploite le moteur d'échecs Stockfish pour analyser les positions sur l'échiquier, évaluer les coups et fournir des suggestions intelligentes directement sur chess.com.
Ce projet met en avant le développement moderne d'extensions navigateur avec TypeScript, la manipulation du DOM en temps réel et la communication avec le moteur via WebWorker.
Key Features
| Feature | Description |
|---|---|
| Real-Time Analysis | Continuous board monitoring with FEN position extraction |
| Move Evaluation | Centipawn scoring with principal variation display |
| Visual Suggestions | Highlighted move recommendations on the board |
| Advantage Tracking | Dynamic progress bar showing position evaluation |
| Auto-Play Mode | Automated move execution for testing purposes |
| Draggable UI | Compact, minimizable panel that can be positioned anywhere |
| Fonctionnalité | Description |
|---|---|
| Analyse en Temps Réel | Surveillance continue de l'échiquier avec extraction de position FEN |
| Évaluation des Coups | Score en centipawn avec affichage de la variation principale |
| Suggestions Visuelles | Recommandations de coups surlignées sur l'échiquier |
| Suivi de l'Avantage | Barre de progression dynamique montrant l'évaluation de la position |
| Mode Auto-Play | Exécution automatique des coups à des fins de test |
| Interface Déplaçable | Panneau compact et minimisable positionnable n'importe où |
Technical Architecture
The extension follows a modular, service-oriented architecture:
src/
├── types/ # TypeScript type definitions
│ ├── chess.types.ts # FEN, moves, scores
│ ├── engine.types.ts # Engine communication
│ └── ui.types.ts # UI component types
├── services/ # Core services
│ ├── board.service.ts # Board state & FEN generation
│ └── engine.service.ts # Stockfish WebWorker
├── components/ # UI components
│ ├── panel.component.ts # Main control panel
│ └── highlights.component.ts # Move highlighting
├── core/ # Business logic
│ ├── analysis.manager.ts # Analysis state management
│ └── autoplay.manager.ts # Automated move execution
└── content/ # Entry point
└── assistant.ts # Main orchestrator
L'extension suit une architecture modulaire orientée services :
src/
├── types/ # Définitions de types TypeScript
│ ├── chess.types.ts # FEN, coups, scores
│ ├── engine.types.ts # Communication moteur
│ └── ui.types.ts # Types des composants UI
├── services/ # Services principaux
│ ├── board.service.ts # État de l'échiquier & génération FEN
│ └── engine.service.ts # WebWorker Stockfish
├── components/ # Composants UI
│ ├── panel.component.ts # Panneau de contrôle principal
│ └── highlights.component.ts # Surbrillance des coups
├── core/ # Logique métier
│ ├── analysis.manager.ts # Gestion de l'état d'analyse
│ └── autoplay.manager.ts # Exécution automatique des coups
└── content/ # Point d'entrée
└── assistant.ts # Orchestrateur principal
Design Patterns
- Service Pattern - Encapsulated services for board and engine interaction
- Observer Pattern - Event-based engine updates with subscription model
- Singleton Pattern - Single instance services for state consistency
- Facade Pattern - ChessAssistant class orchestrates all subsystems
- Service Pattern - Services encapsulés pour l'interaction avec l'échiquier et le moteur
- Observer Pattern - Mises à jour du moteur basées sur les événements avec modèle d'abonnement
- Singleton Pattern - Services à instance unique pour la cohérence de l'état
- Facade Pattern - La classe ChessAssistant orchestre tous les sous-systèmes
Technical Stack
| Technology | Purpose |
|---|---|
| TypeScript 5.4 | Type-safe development with strict mode |
| Vite 5.2 | Fast builds with HMR and optimized bundling |
| CRXJS | Chrome extension development with Vite |
| Chrome Extension MV3 | Modern manifest version with service workers |
| Stockfish | Chess engine for position analysis |
| ESLint + Prettier | Code quality and formatting |
| GitHub Actions | CI/CD pipeline |
| Technologie | Utilisation |
|---|---|
| TypeScript 5.4 | Développement typé avec mode strict |
| Vite 5.2 | Builds rapides avec HMR et bundling optimisé |
| CRXJS | Développement d'extensions Chrome avec Vite |
| Chrome Extension MV3 | Version moderne du manifeste avec service workers |
| Stockfish | Moteur d'échecs pour l'analyse de positions |
| ESLint + Prettier | Qualité et formatage du code |
| GitHub Actions | Pipeline CI/CD |
Core Features
FEN Generation
The board service extracts piece positions from the DOM and generates standard FEN notation:Typescript
public generateFEN(): FENString {
// Iterates through board squares
// Maps CSS classes to piece symbols
// Returns standard FEN string
}
Engine Communication
Asynchronous communication with Stockfish via WebWorker:Typescript
public analyze(fen: FENString, depth?: Depth): void {
this.worker.postMessage(`position fen ${fen}`);
this.worker.postMessage(`go depth ${depth}`);
}
Event-Driven Updates
Real-time analysis updates via subscription pattern:Typescript
engine.subscribe((event: EngineEvent) => {
if (event.type === 'bestmove') {
// Handle best move found
}
});
Génération FEN
Le service d'échiquier extrait les positions des pièces depuis le DOM et génère la notation FEN standard :Typescript
public generateFEN(): FENString {
// Itère à travers les cases de l'échiquier
// Mappe les classes CSS aux symboles de pièces
// Retourne une chaîne FEN standard
}
Communication avec le Moteur
Communication asynchrone avec Stockfish via WebWorker :Typescript
public analyze(fen: FENString, depth?: Depth): void {
this.worker.postMessage(`position fen ${fen}`);
this.worker.postMessage(`go depth ${depth}`);
}
Mises à Jour Événementielles
Mises à jour d'analyse en temps réel via un pattern d'abonnement :Typescript
engine.subscribe((event: EngineEvent) => {
if (event.type === 'bestmove') {
// Traitement du meilleur coup trouvé
}
});
UI Features
- Compact Design - 260px width, minimal footprint
- Draggable Panel - Position anywhere on screen
- Minimizable - Collapse to small "+" button at 50% opacity
- Color Selection - Analyze from White or Black's perspective
- Move History - Color-coded ratings (Excellent/Good/OK/Poor)
- Design Compact - 260px de largeur, empreinte minimale
- Panneau Déplaçable - Positionnable n'importe où sur l'écran
- Minimisable - Se réduit en un petit bouton "+" à 50% d'opacité
- Sélection de Couleur - Analyse du point de vue des Blancs ou des Noirs
- Historique des Coups - Évaluations colorées (Excellent/Bon/Correct/Faible)
Technologies Summary
| Category | Technologies |
|---|---|
| Language | TypeScript 5.4, ES2022 |
| Build | Vite 5.2, CRXJS |
| Extension | Chrome Manifest V3 |
| Engine | Stockfish WASM |
| Quality | ESLint, Prettier |
| CI/CD | GitHub Actions |
| Catégorie | Technologies |
|---|---|
| Langage | TypeScript 5.4, ES2022 |
| Build | Vite 5.2, CRXJS |
| Extension | Chrome Manifest V3 |
| Moteur | Stockfish WASM |
| Qualité | ESLint, Prettier |
| CI/CD | GitHub Actions |
