# 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