- 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
9.2 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Commands
Development
npm start # Lance l'application en production
npm run dev # Mode développement avec DevTools (NODE_ENV=development)
Build & Distribution
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 fermetureget-terminals: Récupération de la liste des terminauxsave-notes/get-notes: Gestion des notes avec persistance fichiersignalr-status: État de la connexion SignalRswitch-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 disponiblesAgentLogin: 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
-
Créer une branche feature
git checkout -b feature/nom-de-la-fonctionnalite -
Développer avec commits atomiques
- Préfixes :
feat:,fix:,refactor:,docs:,style:,test:,chore: - Un commit = une modification logique
- Messages clairs et descriptifs
git commit -m "feat: Ajouter la fonctionnalité X" git commit -m "fix: Corriger le bug Y" git commit -m "refactor: Simplifier le code Z" - Préfixes :
-
Tester les modifications
npm run dev # Test en mode développement
Phase 2 : Préparation de la release
-
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)
- Obtenir la date :
-
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"
-
Commit de release
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
-
Basculer sur main et fusionner
git checkout main git merge feature/nom-de-la-fonctionnalite --no-ff--no-ff: Force un merge commit (historique propre et tracé)
-
Push vers origin
git push origin main
Phase 4 : Build des exécutables
-
Build pour les plateformes nécessaires
# 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 -
Organiser les builds dans dist/vX.X.X/
# 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
-
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)
- Structure markdown avec sections :
-
Commit et push de la documentation
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)
- Déployer sur le serveur de production
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