- Ajout du workflow complet de A à Z (6 phases détaillées) - Phase 1: Développement sur branche feature - Phase 2: Préparation de la release (changelog + version) - Phase 3: Fusion dans main avec --no-ff - Phase 4: Build des exécutables multi-plateformes - Phase 5: Documentation finale (notes de release) - Phase 6: Déploiement en production - Ajout de la structure finale attendue - Points de vigilance et bonnes pratiques - Références à Semantic Versioning et Conventional Commits
283 lines
9.2 KiB
Markdown
283 lines
9.2 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Commands
|
|
|
|
### Development
|
|
```bash
|
|
npm start # Lance l'application en production
|
|
npm run dev # Mode développement avec DevTools (NODE_ENV=development)
|
|
```
|
|
|
|
### Build & Distribution
|
|
```bash
|
|
npm run build # Build pour toutes les plateformes
|
|
npm run build:win # Build pour Windows (.exe, .nsis)
|
|
npm run build:mac # Build pour macOS (.dmg, .app)
|
|
npm run build:linux # Build pour Linux (AppImage, .deb, .rpm)
|
|
npm run build:linux-x64 # Build Linux spécifique x64
|
|
npm run build:linux-arm64 # Build Linux spécifique ARM64
|
|
```
|
|
|
|
## Architecture
|
|
|
|
### Stack technologique
|
|
- **Electron 28.0.0** : Framework principal pour l'application desktop
|
|
- **SignalR (@microsoft/signalr 9.0.6)** : Communication temps réel avec le serveur CTI/IPBX
|
|
- **Choices.js 11.1.0** : Interface de sélection améliorée pour les terminaux téléphoniques
|
|
- **HTML/CSS/JavaScript natif** : Pas de framework frontend (React, Vue, etc.)
|
|
|
|
### Structure des fichiers principaux
|
|
|
|
```
|
|
/
|
|
├── main.js # Process principal Electron - gère SignalR, IPC et fenêtres
|
|
├── renderer.js # Process renderer - UI et gestion des webviews
|
|
├── index.html # Structure HTML de l'application
|
|
├── styles-modern.css # Styles CSS avec gradients et animations
|
|
├── config.json # Configuration SignalR uniquement
|
|
└── notes/ # Stockage des notes agents (format: notes_{agentId}.json)
|
|
```
|
|
|
|
### Communication inter-process (IPC)
|
|
|
|
Le système utilise IPC pour la communication entre le process principal et le renderer :
|
|
|
|
**Canaux principaux** :
|
|
- `agent-login` : Authentification via SignalR (AgentLogin)
|
|
- `logout` / `quit-app` : Déconnexion et fermeture
|
|
- `get-terminals` : Récupération de la liste des terminaux
|
|
- `save-notes` / `get-notes` : Gestion des notes avec persistance fichier
|
|
- `signalr-status` : État de la connexion SignalR
|
|
- `switch-to-center` / `release-center` : Événements IPBX pour la gestion des appels
|
|
|
|
### Intégration SignalR
|
|
|
|
**Hub SignalR** : `/planningHub`
|
|
|
|
**Méthodes invoquées** :
|
|
- `GetTerminalListByServiceProvider` : Liste des terminaux disponibles
|
|
- `AgentLogin` : Connexion agent (email, password, terminal)
|
|
- `AgentLogoff` : Déconnexion agent
|
|
|
|
**Événements écoutés** :
|
|
- `IpbxEvent` : Événements téléphoniques (codes 1=appel entrant, 2=fin d'appel)
|
|
- Plus de 13 types d'événements potentiels loggés dans `~/.simpleconnect-ng/signalr.log`
|
|
|
|
### Gestion des webviews
|
|
|
|
Chaque centre médical a sa propre webview Electron avec :
|
|
- **Session isolée** : Partition unique par centre pour cookies/auth séparés
|
|
- **Auto-connexion** : Injection des credentials dans les plateformes (Doctolib, MonDocteur, etc.)
|
|
- **Preload script** : Injection JavaScript pour automatiser la connexion
|
|
- **UserAgent personnalisé** : Identification comme navigateur standard
|
|
|
|
### Système de logging
|
|
|
|
**SignalR logs** : `~/.simpleconnect-ng/signalr.log`
|
|
- Tous les événements SignalR en JSON structuré
|
|
- Timestamp, arguments et contexte agent
|
|
|
|
**Notes agents** : `/notes/notes_{agentId}.json`
|
|
- Sauvegarde automatique après 2 secondes d'inactivité
|
|
- Historique des 50 dernières versions
|
|
- Synchronisation localStorage + fichier
|
|
|
|
## Workflow de développement
|
|
|
|
### Workflow complet de release (de A à Z)
|
|
|
|
Suivre **systématiquement** ce workflow pour chaque nouvelle version :
|
|
|
|
#### Phase 1 : Développement sur branche feature
|
|
|
|
1. **Créer une branche feature**
|
|
```bash
|
|
git checkout -b feature/nom-de-la-fonctionnalite
|
|
```
|
|
|
|
2. **Développer avec commits atomiques**
|
|
- Préfixes : `feat:`, `fix:`, `refactor:`, `docs:`, `style:`, `test:`, `chore:`
|
|
- Un commit = une modification logique
|
|
- Messages clairs et descriptifs
|
|
|
|
```bash
|
|
git commit -m "feat: Ajouter la fonctionnalité X"
|
|
git commit -m "fix: Corriger le bug Y"
|
|
git commit -m "refactor: Simplifier le code Z"
|
|
```
|
|
|
|
3. **Tester les modifications**
|
|
```bash
|
|
npm run dev # Test en mode développement
|
|
```
|
|
|
|
#### Phase 2 : Préparation de la release
|
|
|
|
4. **Mettre à jour le changelog** (`docs/changelog.md`)
|
|
- Obtenir la date : `date +%Y-%m-%d`
|
|
- Format : `## [X.X.X] - AAAA-MM-JJ`
|
|
- Catégories : **Ajouté**, **Modifié**, **Corrigé**, **Supprimé**, **Technique**, **Documentation**
|
|
- Ajouter en haut du fichier (au-dessus de la version précédente)
|
|
|
|
5. **Bumper la version** (`package.json`)
|
|
- **PATCH** (x.x.+1) : Corrections, petits ajustements
|
|
- **MINOR** (x.+1.0) : Nouvelles fonctionnalités compatibles
|
|
- **MAJOR** (+1.0.0) : Changements majeurs incompatibles
|
|
- Modifier le champ `"version": "X.X.X"`
|
|
|
|
6. **Commit de release**
|
|
```bash
|
|
git add docs/changelog.md package.json
|
|
git commit -m "release: Version X.X.X - Titre court
|
|
|
|
- Fonctionnalité 1
|
|
- Fonctionnalité 2
|
|
- Correction 1
|
|
- Bump version X.X.X"
|
|
```
|
|
|
|
**Important** : Ne jamais mentionner Claude, Anthropic ou des adresses emails relatives à ces entités
|
|
|
|
#### Phase 3 : Fusion dans main
|
|
|
|
7. **Basculer sur main et fusionner**
|
|
```bash
|
|
git checkout main
|
|
git merge feature/nom-de-la-fonctionnalite --no-ff
|
|
```
|
|
- `--no-ff` : Force un merge commit (historique propre et tracé)
|
|
|
|
8. **Push vers origin**
|
|
```bash
|
|
git push origin main
|
|
```
|
|
|
|
#### Phase 4 : Build des exécutables
|
|
|
|
9. **Build pour les plateformes nécessaires**
|
|
```bash
|
|
# macOS (si développement sur Mac)
|
|
npm run build
|
|
|
|
# Linux x64 (production principale)
|
|
npm run build:linux-x64
|
|
|
|
# Windows (si nécessaire)
|
|
npm run build:win
|
|
```
|
|
|
|
10. **Organiser les builds dans dist/vX.X.X/**
|
|
```bash
|
|
# Créer le dossier de version
|
|
mkdir -p dist/vX.X.X
|
|
|
|
# Copier le changelog
|
|
cp docs/changelog.md dist/vX.X.X/CHANGELOG.md
|
|
|
|
# Déplacer les builds
|
|
mv dist/SimpleConnect-X.X.X*.{AppImage,dmg,zip,exe} dist/vX.X.X/ 2>/dev/null
|
|
mv dist/SimpleConnect-X.X.X*.blockmap dist/vX.X.X/ 2>/dev/null
|
|
|
|
# Vérifier le contenu
|
|
ls -lh dist/vX.X.X/
|
|
```
|
|
|
|
#### Phase 5 : Documentation finale
|
|
|
|
11. **Créer les notes de release** (`releases/vX.X.X.md`)
|
|
- Structure markdown avec sections :
|
|
- Titre et date
|
|
- Résumé des changements
|
|
- Nouveautés principales
|
|
- Corrections
|
|
- Fichiers disponibles
|
|
- Compatibilité
|
|
- Guide d'utilisation (si nécessaire)
|
|
|
|
12. **Commit et push de la documentation**
|
|
```bash
|
|
git add releases/vX.X.X.md
|
|
git commit -m "docs: Ajout des notes de release pour vX.X.X"
|
|
git push origin main
|
|
```
|
|
|
|
#### Phase 6 : Déploiement (optionnel)
|
|
|
|
13. **Déployer sur le serveur de production**
|
|
```bash
|
|
scp dist/vX.X.X/SimpleConnect-X.X.X.AppImage user@server:/path/to/app/
|
|
```
|
|
|
|
### Structure finale attendue
|
|
|
|
Après chaque release, vérifier cette structure :
|
|
|
|
```
|
|
project/
|
|
├── docs/
|
|
│ └── changelog.md # ✅ Contient la nouvelle version
|
|
├── releases/
|
|
│ └── vX.X.X.md # ✅ Notes de release détaillées
|
|
├── dist/
|
|
│ └── vX.X.X/ # ✅ Dossier de version
|
|
│ ├── CHANGELOG.md
|
|
│ ├── SimpleConnect-X.X.X.AppImage
|
|
│ ├── SimpleConnect-X.X.X-arm64.dmg
|
|
│ └── SimpleConnect-X.X.X-arm64-mac.zip
|
|
└── package.json # ✅ Version à jour
|
|
```
|
|
|
|
### Points de vigilance
|
|
|
|
- ❌ **Ne JAMAIS committer les binaires dans Git** (`dist/` est dans `.gitignore`)
|
|
- ✅ **Toujours utiliser --no-ff** pour les merges (historique tracé)
|
|
- ✅ **Tester avant de merger** dans main
|
|
- ✅ **Suivre Semantic Versioning** (semver.org)
|
|
- ✅ **Conventional Commits** pour les messages (conventionalcommits.org)
|
|
|
|
## Points d'attention
|
|
|
|
### Sécurité
|
|
- **Jamais de credentials en dur** : Tout passe par SignalR
|
|
- **Sessions isolées** : Chaque centre a sa partition Electron
|
|
- **Logs sécurisés** : Pas de mots de passe dans les logs
|
|
|
|
### UI/UX
|
|
- **Pas d'emojis** : Utiliser des icônes SVG inline pour compatibilité Linux
|
|
- **Animations fluides** : Transitions CSS avec cubic-bezier
|
|
- **Responsive** : Panneau de notes redimensionnable (280-600px)
|
|
|
|
### SignalR
|
|
- **Reconnexion automatique** : [0, 2000, 5000, 10000]ms
|
|
- **Filtrage par terminal** : Ne recevoir que les événements du terminal connecté
|
|
- **Gestion des erreurs** : Try/catch sur toutes les invocations
|
|
|
|
### Build cross-platform
|
|
- **Windows** : NSIS installer avec shortcuts
|
|
- **macOS** : DMG avec icône personnalisée
|
|
- **Linux** : AppImage, .deb, .rpm (x64 et arm64)
|
|
|
|
## Fonctionnalités clés
|
|
|
|
### Authentification
|
|
- Connexion centralisée via SignalR
|
|
- Option "Forcer la déconnexion" pour débloquer sessions
|
|
- Auto-focus sur le champ code d'accès
|
|
|
|
### Gestion des appels
|
|
- Basculement automatique vers le bon centre (IpbxEvent code 1)
|
|
- Libération automatique après raccrochage (IpbxEvent code 2)
|
|
- Notifications visuelles et sonores
|
|
|
|
### Interface
|
|
- Header unifié avec onglets (fusion pour gagner de l'espace)
|
|
- Panneau de notes latéral avec sauvegarde automatique
|
|
- Pas de barre de menu Electron (autoHideMenuBar: true)
|
|
- Scrollbars masquées mais fonctionnelles
|
|
|
|
### Persistance
|
|
- Notes sauvegardées localement et sur serveur
|
|
- Préférences utilisateur dans localStorage
|
|
- Historique des 50 dernières versions de notes |