ai-secret-scout 2.3.1 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.fr.md CHANGED
@@ -9,7 +9,7 @@
9
9
  ◈ A I S E C R E T S C O U T ◈
10
10
  </pre>
11
11
 
12
- <h2>AI Secret Scout (<code>aiscout</code>) — v2.3.0</h2>
12
+ <h2>AI Secret Scout (<code>aiscout</code>) — v2.4.0</h2>
13
13
 
14
14
  <p align="center">
15
15
  <!-- Ligne 1 : badges techno & plateforme -->
@@ -18,7 +18,7 @@
18
18
  <img src="https://img.shields.io/badge/D%C3%A9pendances-Zero%20External-22c55e?logo=python&amp;logoColor=white" alt="Zéro Dépendance">
19
19
  <img src="https://img.shields.io/badge/Watchdog-Temps%20R%C3%A9el%20%26%20Desktop%20Alerts-F59E0B?logo=airplayaudio&amp;logoColor=white" alt="Watchdog Temps Réel">
20
20
  <img src="https://img.shields.io/badge/Safe%20Restore-Gestionnaire%20Backups-7C3AED?logo=securityscorecard&amp;logoColor=white" alt="Safe Restore">
21
- <img src="https://img.shields.io/badge/Plateforme-Linux%20%7C%20WSL%20(uniquement)-E95420?logo=linux&amp;logoColor=white" alt="Linux | WSL (uniquement)">
21
+ <img src="https://img.shields.io/badge/Plateforme-Linux%20%7C%20Windows%20%7C%20macOS%20%7C%20WSL-0078D6?logo=windows&amp;logoColor=white" alt="Linux | Windows | macOS | WSL">
22
22
  </p>
23
23
 
24
24
  <p align="center">
@@ -43,7 +43,7 @@
43
43
 
44
44
  ## 📑 Sommaire
45
45
  1. [Pourquoi ce projet ?](#-pourquoi-ce-projet-)
46
- 2. [Nouveautés majeures de la v2.3.0](#-nouveautés-majeures-de-la-v230)
46
+ 2. [Nouveautés majeures de la v2.4.0](#-nouveautés-majeures-de-la-v240)
47
47
  3. [Lancement rapide](#-lancement-rapide)
48
48
  4. [Interface TUI & Navigation](#-interface-tui--navigation)
49
49
  5. [Surveillance Temps Réel (Watchdog) & Notifications Bureau](#-surveillance-temps-réel-watchdog--notifications-bureau)
@@ -61,7 +61,7 @@
61
61
 
62
62
  ## 🔍 Pourquoi ce projet ?
63
63
 
64
- Lors de l'utilisation d'assistants de codage autonomes (**Claude Code**, **Google Antigravity / Gemini CLI**, **OpenAI Codex**, **GitHub Copilot CLI**, **Cursor**), les modèles enregistrent des transcriptions complètes de chaque échange dans votre espace personnel (`~/.claude`, `~/.gemini`, etc.).
64
+ Lors de l'utilisation d'assistants de codage autonomes (**Claude Code**, **Google Antigravity / Gemini CLI**, **OpenAI Codex**, **GitHub Copilot CLI**, **Cursor**), les modèles enregistrent des transcriptions complètes de chaque échange dans votre espace personnel (`~/.claude`, `~/.gemini`, `%APPDATA%\Cursor`, etc.).
65
65
 
66
66
  ### Le problème
67
67
  1. **Fuites passives de secrets** : Lorsqu'un agent exécute une commande terminal (ex. `infisical secrets`, `ssh`, `curl`, ou un script `.env`), la sortie brute de la commande est enregistrée en clair dans les logs locaux.
@@ -73,11 +73,22 @@ Lors de l'utilisation d'assistants de codage autonomes (**Claude Code**, **Googl
73
73
 
74
74
  ---
75
75
 
76
- ## 🌟 Nouveautés majeures de la v2.3.0
76
+ ## 🌟 Nouveautés majeures de la v2.4.0
77
+
78
+ * **🪟 Support natif complet de Windows 10/11 & Cross-Platform unifié** :
79
+ * Fonctionne nativement dans **PowerShell**, **Windows Terminal** et **CMD** sans dépendre de WSL.
80
+ * Gestion non bloquante du clavier sous Windows via `msvcrt` et activation automatique du mode VT100/ANSI.
81
+ * Notifications toast discrètes en arrière-plan sous Windows via PowerShell (`System.Windows.Forms.NotifyIcon`).
82
+ * Détection automatique des chemins d'IA sous Windows (`%APPDATA%\Cursor`, `%APPDATA%\Claude`, `%LOCALAPPDATA%`, etc.).
83
+ * Détecteur d'environnement Node.js/Python avec commandes d'installation adaptées (`winget install Python.Python.3.12` sur Windows, gestionnaires de paquets sur Linux/macOS).
84
+
85
+ * **🌐 Basculement de langue bilingue instantané (`[L]` FR ⇄ EN)** :
86
+ * Appuyez simplement sur `[L]` depuis le menu principal pour basculer instantanément l'ensemble de l'interface, des explications, des rapports et des fiches d'audit entre **Français** et **Anglais**.
87
+ * Détection automatique de la locale système au démarrage (`LANG`, `LC_ALL`, `locale.getdefaultlocale()`).
77
88
 
78
89
  * **📡 Surveillance continue en temps réel (Mode Watchdog)** :
79
90
  * Détecte instantanément l'écriture ou la modification d'un fichier de session IA sans solliciter le CPU.
80
- * Envoi immédiat d'une **notification de bureau native** (`notify-send`) sous Linux (KDE Plasma Wayland / GNOME).
91
+ * Envoi immédiat d'une **notification de bureau native** (`notify-send` sous Linux KDE Plasma Wayland / GNOME, et toasts PowerShell sous Windows).
81
92
  * Voyant de pulsation visuelle en direct `🟢 [VEILLE ACTIVE]` et journal des événements défilant en temps réel.
82
93
  * Accessible via le menu TUI `[8]` ou en ligne de commande directe : `aiscout --watch`.
83
94
 
@@ -95,7 +106,7 @@ Lors de l'utilisation d'assistants de codage autonomes (**Claude Code**, **Googl
95
106
  * Réinitialisation rapide via `Backspace` ou `Échap`.
96
107
 
97
108
  * **⚙️ Moteur de règles personnalisées & 4 nouvelles signatures** :
98
- * Chargement automatique de règles définies par l'utilisateur dans `~/.config/aiscout/rules.json`.
109
+ * Chargement automatique de règles définies par l'utilisateur dans `~/.config/aiscout/rules.json` (ou `%APPDATA%\aiscout\rules.json` sous Windows).
99
110
  * 4 nouvelles signatures intégrées majeures :
100
111
  * **GitLab Personal Access Token** (`glpat-[0-9a-zA-Z_\-]{20,}`)
101
112
  * **HuggingFace Access Token** (`hf_[a-zA-Z0-9]{34,}`)
@@ -107,7 +118,7 @@ Lors de l'utilisation d'assistants de codage autonomes (**Claude Code**, **Googl
107
118
 
108
119
  ## 🚀 Lancement rapide
109
120
 
110
- `aiscout` peut être exécuté directement ou installé sur votre machine :
121
+ ### Sur Linux, macOS & WSL
111
122
 
112
123
  ```bash
113
124
  # ⚡ Exécution instantanée sans installation préalable
@@ -122,7 +133,27 @@ bun add -g ai-secret-scout
122
133
 
123
134
  # Une fois installé, les commandes aiscout et ai-secret-scout sont disponibles partout :
124
135
  aiscout
136
+ ```
137
+
138
+ ### Sur Windows (PowerShell / Windows Terminal / CMD)
139
+
140
+ ```powershell
141
+ # ⚡ Exécution directe
142
+ npx ai-secret-scout
143
+
144
+ # 📦 Installation globale
145
+ npm install -g ai-secret-scout
146
+
147
+ # Si Python n'est pas encore installé sur votre machine Windows :
148
+ winget install Python.Python.3.12
149
+
150
+ # Lancement immédiat
151
+ aiscout
152
+ ```
153
+
154
+ ### Options en ligne de commande usuelles
125
155
 
156
+ ```bash
126
157
  # Surveillance temps réel (Watchdog) avec alertes bureau
127
158
  aiscout --watch
128
159
 
@@ -147,7 +178,7 @@ Le moteur TUI autonome d'`aiscout` (pure bibliothèque standard Python) s'adapte
147
178
  ### 1. Tableau de bord & Menu d'accueil interactif (Hub central)
148
179
 
149
180
  ```text
150
- ◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:30
181
+ ◈ AISCOUT v2.4.0 │ Utilisateur : dev_redious │ Machine : poste-travail 12/09/2026 22:30
151
182
 
152
183
  █████╗ ██╗ ███████╗ ██████╗ ██████╗ ██╗ ██╗████████╗
153
184
  ██╔══██╗██║ ██╔════╝██╔════╝██╔═══██╗██║ ██║╚══██╔══╝
@@ -175,7 +206,7 @@ Le moteur TUI autonome d'`aiscout` (pure bibliothèque standard Python) s'adapte
175
206
  │ 💡 Naviguer au clavier dans la liste des secrets détectés et inspecter │
176
207
  ╰─────────────────────────────────────────────────────────────────────────────╯
177
208
 
178
- [↑/↓] Naviguer │ [Entrée] Valider │ [1-9] Accès direct │ [Q] Quitter
209
+ [↑/↓] Naviguer │ [Entrée] Valider │ [1-9] Accès direct │ [L] Langue (FR/EN) │ [Q] Quitter
179
210
  ```
180
211
 
181
212
  ### 2. Explorateur de secrets (Tableau interactif, Tri dynamique & Recherche)
@@ -183,7 +214,7 @@ Le moteur TUI autonome d'`aiscout` (pure bibliothèque standard Python) s'adapte
183
214
  La vue tableau permet de parcourir l'intégralité des fuites identifiées avec pagination fluide, tri multi-critères et recherche plein texte instantanée :
184
215
 
185
216
  ```text
186
- ◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:30
217
+ ◈ AISCOUT v2.4.0 │ Utilisateur : dev_redious │ Machine : poste-travail 12/09/2026 22:30
187
218
 
188
219
  📋 EXPLORATEUR DE SECRETS (1/21) — Mode : MASQUÉ 🛡️ │ Tri : Sévérité (🔴 > 🟡 > 🔵)
189
220
 
@@ -204,7 +235,7 @@ La vue tableau permet de parcourir l'intégralité des fuites identifiées avec
204
235
  En appuyant sur `/`, une boîte de saisie inline s'ouvre sur la barre inférieure. Le tableau se met à jour en temps réel (filtre instantané sur la catégorie, l'outil, le projet, le fichier ou la valeur du secret) :
205
236
 
206
237
  ```text
207
- ◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:30
238
+ ◈ AISCOUT v2.4.0 │ Utilisateur : dev_redious │ Machine : poste-travail 12/09/2026 22:30
208
239
 
209
240
  📋 EXPLORATEUR DE SECRETS (1/3) — Mode : MASQUÉ 🛡️ │ Tri : Sévérité (🔴 > 🟡 > 🔵)
210
241
  🔍 Recherche active : "github" (3 secrets trouvés) │ [Backspace/Esc] Effacer
@@ -224,7 +255,7 @@ En appuyant sur `/`, une boîte de saisie inline s'ouvre sur la barre inférieur
224
255
  En pressant `Entrée` sur une ligne du tableau, une fiche d'audit chirurgicale s'affiche avec le contexte exact d'usage et l'extrait de log :
225
256
 
226
257
  ```text
227
- ◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:30
258
+ ◈ AISCOUT v2.4.0 │ Utilisateur : dev_redious │ Machine : poste-travail 12/09/2026 22:30
228
259
 
229
260
  ╭──────────────────────────────────────────────────────────────────────────────────╮
230
261
  │ FICHE D'AUDIT DU SECRET DÉTECTÉ │
@@ -253,7 +284,7 @@ En pressant `Entrée` sur une ligne du tableau, une fiche d'audit chirurgicale s
253
284
  Lors de l'audit initial, du caviardage ou de l'exportation des dossiers d'audit, une animation à 100ms affiche l'étape en cours et la progression :
254
285
 
255
286
  ```text
256
- ◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:30
287
+ ◈ AISCOUT v2.4.0 │ Utilisateur : dev_redious │ Machine : poste-travail 12/09/2026 22:30
257
288
 
258
289
  █████╗ ██╗ ███████╗ ██████╗ ██████╗ ██╗ ██╗████████╗
259
290
  ██╔══██╗██║ ██╔════╝██╔════╝██╔═══██╗██║ ██║╚══██╔══╝
@@ -272,8 +303,8 @@ Lors de l'audit initial, du caviardage ou de l'exportation des dossiers d'audit,
272
303
  Veuillez patienter pendant l'analyse...
273
304
  ```
274
305
 
275
- ### 🌟 Points forts du moteur TUI (v2.3.0)
276
- * **Gestion infaillible des flèches** : Décodage non bloquant avec lookahead 100ms absorbant toutes les séquences d'échappement ANSI (`\x1b[A`, `\x1b[B`, `\x1bOA`, `\x1bOB`, consoles Linux et modificateurs Shift/Ctrl).
306
+ ### 🌟 Points forts du moteur TUI (v2.4.0)
307
+ * **Gestion des flèches & Entrées multiplateforme** : Décodage non bloquant (`msvcrt` sous Windows, `termios`/`tty`/`select` sous POSIX Linux/macOS) avec lookahead 100ms absorbant toutes les séquences d'échappement ANSI (`\x1b[A`, `\x1b[B`, `\x1bOA`, `\x1bOB`, consoles Linux et modificateurs Shift/Ctrl).
277
308
  * **Layout auto-adaptatif (zéro coupure)** :
278
309
  * Barre supérieure clouée à la **ligne 1**.
279
310
  * Barre inférieure clouée à la **dernière ligne du terminal**.
@@ -289,10 +320,10 @@ Lors de l'audit initial, du caviardage ou de l'exportation des dossiers d'audit,
289
320
  Le mode **Watchdog** transforme `aiscout` en un gardien silencieux en arrière-plan :
290
321
 
291
322
  ```text
292
- ◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:21
323
+ ◈ AISCOUT v2.4.0 │ Utilisateur : dev_redious │ Machine : poste-travail 12/09/2026 22:21
293
324
 
294
- 📡 SURVEILLANCE EN TEMPS RÉEL (WATCHDOG) │ 🟢 [VEILLE ACTIVE]
295
- Détecte les sessions IA en écriture et notifie instantanément sur le bureau KDE Plasma
325
+ 📡 SURVEILLANCE EN TEMPS RÉEL (WATCHDOG) │ 🟢 [VEILLE ACTIVE]
326
+ Détecte les sessions IA en écriture et notifie instantanément sur le bureau (Linux / Windows)
296
327
 
297
328
  ╭──────────────────────────────────────────────────────────────────────────────╮
298
329
  │ Fichiers écoutés : 5498 │ Scans live : 14 │ Alertes déclenchées : 0 │
@@ -310,7 +341,7 @@ Le mode **Watchdog** transforme `aiscout` en un gardien silencieux en arrière-p
310
341
  ### Mécanismes clés
311
342
  1. **Écoute non-intrusive** : Scrute les horodatages `mtime` des répertoires d'IA sans lire le disque inutilement.
312
343
  2. **Scan chirurgical** : Dès qu'une modification ou un nouveau fichier est détecté, seul ce fichier est analysé à chaud avec `scan_single_file()`.
313
- 3. **Alertes de bureau natives** : Déclenchement via `notify-send` avec niveau d'urgence `critical` sous KDE Plasma Wayland et GNOME.
344
+ 3. **Alertes de bureau natives** : Déclenchement via `notify-send` avec niveau d'urgence `critical` sous Linux (KDE Plasma Wayland, GNOME) ou notifications toast discrètes PowerShell sous Windows.
314
345
  4. **Signal d'alerte sonore** : Bip terminal (`\a`) lors de chaque détection de secret critique.
315
346
 
316
347
  ---
@@ -320,7 +351,7 @@ Le mode **Watchdog** transforme `aiscout` en un gardien silencieux en arrière-p
320
351
  Le menu `[7]` offre un contrôle absolu sur les fichiers de sauvegarde générés lors des opérations de caviardage :
321
352
 
322
353
  ```text
323
- ◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:22
354
+ ◈ AISCOUT v2.4.0 │ Utilisateur : dev_redious │ Machine : poste-travail 12/09/2026 22:22
324
355
 
325
356
  ↩️ GESTIONNAIRE DES SAUVEGARDES & RESTAURATION (.BAK)
326
357
  Restaurer les fichiers originaux avant caviardage ou purger les sauvegardes.
@@ -439,6 +470,7 @@ Pour éliminer le bruit et les faux positifs fréquents, `aiscout` applique 5 fi
439
470
  | `↑` / `↓` ou `k` / `j` ou `z` / `s` | Déplacer le curseur de sélection |
440
471
  | `Entrée` / `Espace` / `→` | Valider et exécuter l'action sélectionnée |
441
472
  | `1` à `9` | Accès direct au menu par son numéro |
473
+ | `L` | Basculer la langue à la volée (`FR` / `EN`) |
442
474
  | `Q` ou `Ctrl+C` | Quitter proprement l'application |
443
475
 
444
476
  ### Explorateur de Secrets (Tableau TUI)
@@ -502,13 +534,9 @@ aiscout --home-dir /home/autre_utilisateur
502
534
 
503
535
  ## 🏗️ Architecture Technique
504
536
 
505
- * **Langage** : Python 3.10+ standard pur (`os`, `sys`, `re`, `json`, `termios`, `tty`, `select`, `unicodedata`, `shutil`, `argparse`, `subprocess`).
506
- * **Zéro Dépendance Externe** : Aucun package tiers `pip`. Conçu pour la bibliothèque standard Python 3.
507
- * **Systèmes Supportés** : **Linux** (natif Wayland / X11) et **WSL / WSL2** sous Windows uniquement pour le moment (macOS et Windows natif non supportés).
508
- * **Notification System** : Détection automatique de `notify-send` pour alertes desktop natives Wayland / X11.
509
- * **Emplacement du code** : `/home/dev_redious/Documents/Dev/tools/ai-secret-scout/ai_secret_scout.py`
510
- * **Configuration** : `~/.config/aiscout/rules.json`
511
- * **Liens symboliques exécutables** :
512
- - `~/.local/bin/aiscout`
513
- - `~/.local/bin/ai-secret-scout`
537
+ * **Langage** : Python 3.10+ standard pur (`os`, `sys`, `re`, `json`, `unicodedata`, `shutil`, `argparse`, `subprocess`, avec `msvcrt` sous Windows et `termios`/`tty`/`select` sous POSIX).
538
+ * **Zéro Dépendance Externe** : Aucun package tiers `pip`. Conçu exclusivement avec la bibliothèque standard Python 3.
539
+ * **Systèmes Supportés** : **Linux** (natif Wayland / X11), **Windows 10/11** (natif PowerShell, CMD, Windows Terminal) et **WSL / WSL2**.
540
+ * **Système de Notification** : Détection automatique de `notify-send` sous Linux et toasts natifs PowerShell sous Windows.
541
+ * **Configuration** : `~/.config/aiscout/rules.json` (ou `%APPDATA%\aiscout\rules.json` sous Windows).
514
542
  * **Confidentialité absolue** : 100% local, aucun flux réseau sortant, zéro télémétrie.
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  ◈ A I S E C R E T S C O U T ◈
10
10
  </pre>
11
11
 
12
- <h2>AI Secret Scout (<code>aiscout</code>) — v2.3.0</h2>
12
+ <h2>AI Secret Scout (<code>aiscout</code>) — v2.4.0</h2>
13
13
 
14
14
  <p align="center">
15
15
  <!-- Row 1: tech & platform badges -->
@@ -18,7 +18,7 @@
18
18
  <img src="https://img.shields.io/badge/Dependencies-Zero%20External-22c55e?logo=python&amp;logoColor=white" alt="Zero Dependencies">
19
19
  <img src="https://img.shields.io/badge/Watchdog-Real--Time%20%26%20Desktop%20Alerts-F59E0B?logo=airplayaudio&amp;logoColor=white" alt="Real-Time Watchdog">
20
20
  <img src="https://img.shields.io/badge/Safe%20Restore-Backup%20Manager-7C3AED?logo=securityscorecard&amp;logoColor=white" alt="Safe Restore">
21
- <img src="https://img.shields.io/badge/Platform-Linux%20%7C%20WSL%20(only)-E95420?logo=linux&amp;logoColor=white" alt="Linux | WSL (only)">
21
+ <img src="https://img.shields.io/badge/Platform-Linux%20%7C%20Windows%20%7C%20WSL-0078D6?logo=windows&amp;logoColor=white" alt="Linux | Windows | WSL">
22
22
  </p>
23
23
 
24
24
  <p align="center">
@@ -43,7 +43,7 @@
43
43
 
44
44
  ## 📑 Table of Contents
45
45
  1. [Why this project?](#-why-this-project)
46
- 2. [Key Highlights of v2.3.0](#-key-highlights-of-v230)
46
+ 2. [Key Highlights of v2.4.0](#-key-highlights-of-v240)
47
47
  3. [Quickstart](#-quickstart)
48
48
  4. [TUI Interface & Navigation](#-tui-interface--navigation)
49
49
  5. [Real-Time Watchdog & Desktop Notifications](#-real-time-watchdog--desktop-notifications)
@@ -73,11 +73,21 @@ When using autonomous coding assistants (**Claude Code**, **Google Antigravity /
73
73
 
74
74
  ---
75
75
 
76
- ## 🌟 Key Highlights of v2.3.0
76
+ ## 🌟 Key Highlights of v2.4.0
77
+
78
+ * **🪟 Native Windows Support (Windows 10 & 11)**:
79
+ * Full native terminal support via Python's standard `msvcrt` library (PowerShell, Command Prompt CMD, Windows Terminal).
80
+ * Native background desktop toast notifications via PowerShell WinForms (zero extra window popups).
81
+ * Auto-discovery of Windows-specific AI storage directories (`%APPDATA%\Cursor`, `%APPDATA%\Claude`, `%USERPROFILE%\.claude`, etc.).
82
+
83
+ * **🌐 Real-Time Bi-Directional Language Switching (`[L]`)**:
84
+ * Live toggle between English and French at any point via the `[L]` key in TUI.
85
+ * CLI parameter: `--lang en` or `--lang fr` (or `-l en` / `-l fr`).
86
+ * Automatic locale detection on startup (`fr` on French systems, `en` on all international systems).
77
87
 
78
88
  * **📡 Real-Time Continuous Monitoring (Watchdog Mode)**:
79
89
  * Watches AI session files for additions or modifications with near-zero CPU usage.
80
- * Sends immediate **native desktop notifications** (`notify-send`) on Linux (KDE Plasma Wayland / GNOME).
90
+ * Sends immediate **native desktop notifications** (`notify-send` on Linux / KDE / GNOME, native PowerShell toasts on Windows).
81
91
  * Live visual heartbeat `🟢 [WATCHDOG ACTIVE]` with a rolling real-time event log.
82
92
  * Available via TUI menu `[8]` or direct CLI command: `aiscout --watch`.
83
93
 
@@ -107,11 +117,10 @@ When using autonomous coding assistants (**Claude Code**, **Google Antigravity /
107
117
 
108
118
  ## 🚀 Quickstart
109
119
 
110
- > [!IMPORTANT]
111
- > **Platform Support**: `aiscout` currently supports **Linux** (Wayland & X11) and **WSL / WSL2** (Windows Subsystem for Linux). Native Windows and macOS are not supported at this stage.
112
-
113
- `aiscout` can be executed instantly without installation or installed globally:
120
+ > [!TIP]
121
+ > **Cross-Platform Support**: `aiscout` runs natively on **Linux** (Wayland & X11), **Windows 10/11** (PowerShell, Command Prompt, Windows Terminal), and **WSL / WSL2**. Zero external dependencies required.
114
122
 
123
+ ### 🐧 Linux, macOS & WSL / WSL2
115
124
  ```bash
116
125
  # ⚡ Instant execution without prior installation
117
126
  npx ai-secret-scout
@@ -123,9 +132,25 @@ npm install -g ai-secret-scout
123
132
  # or using bun
124
133
  bun add -g ai-secret-scout
125
134
 
126
- # Once installed, both aiscout and ai-secret-scout commands are available globally:
135
+ # Launch
136
+ aiscout
137
+ ```
138
+
139
+ ### 🪟 Windows 10 & 11 (PowerShell, CMD, Windows Terminal)
140
+ ```powershell
141
+ # ⚡ Instant execution without prior installation
142
+ npx ai-secret-scout
143
+
144
+ # 📦 Permanent global installation
145
+ npm install -g ai-secret-scout
146
+
147
+ # Launch
127
148
  aiscout
149
+ ```
150
+ > **Windows Prerequisite**: Python 3.10+ must be present on PATH. If not installed, run: `winget install Python.Python.3.12` or download from [python.org](https://www.python.org/downloads/).
128
151
 
152
+ ### 🛠️ Common CLI Commands
153
+ ```bash
129
154
  # Launch real-time background watchdog with desktop notifications
130
155
  aiscout --watch
131
156
 
@@ -137,6 +162,9 @@ aiscout --clean-backups
137
162
 
138
163
  # List all active detection rules (built-in + custom)
139
164
  aiscout --list-rules
165
+
166
+ # Force language (English or French)
167
+ aiscout --lang en
140
168
  ```
141
169
 
142
170
  The application automatically switches your terminal to an alternate screen buffer (`\033[?1049h`). Upon exit (`Q`), your original terminal prompt and history are seamlessly restored without visual leftovers.
@@ -150,7 +178,7 @@ The application automatically switches your terminal to an alternate screen buff
150
178
  ### 1. Central Hub & Dashboard
151
179
 
152
180
  ```text
153
- ◈ AISCOUT v2.3.0 │ User : dev_redious │ Host : linux-workstation 12/09/2026 22:30
181
+ ◈ AISCOUT v2.4.0 │ User : dev_redious │ Host : workstation 12/09/2026 22:30
154
182
 
155
183
  █████╗ ██╗ ███████╗ ██████╗ ██████╗ ██╗ ██╗████████╗
156
184
  ██╔══██╗██║ ██╔════╝██╔════╝██╔═══██╗██║ ██║╚══██╔══╝
@@ -178,7 +206,7 @@ The application automatically switches your terminal to an alternate screen buff
178
206
  │ 💡 Browse through detected credentials with keyboard controls and inspect │
179
207
  ╰─────────────────────────────────────────────────────────────────────────────╯
180
208
 
181
- [↑/↓] Navigate │ [Enter] Confirm │ [1-9] Direct Jump │ [Q] Quit
209
+ [↑/↓] Navigate │ [Enter] Confirm │ [1-9] Direct Jump │ [L] Language (EN/FR) │ [Q] Quit
182
210
  ```
183
211
 
184
212
  ### 2. Secret Explorer (Interactive Table, Dynamic Sorting & Search)
@@ -186,7 +214,7 @@ The application automatically switches your terminal to an alternate screen buff
186
214
  The interactive table allows fluid inspection of all detected secrets with multi-criteria sorting and instantaneous full-text filtering:
187
215
 
188
216
  ```text
189
- ◈ AISCOUT v2.3.0 │ User : dev_redious │ Host : linux-workstation 12/09/2026 22:30
217
+ ◈ AISCOUT v2.4.0 │ User : dev_redious │ Host : workstation 12/09/2026 22:30
190
218
 
191
219
  📋 SECRET EXPLORER (1/21) — Mode : MASKED 🛡️ │ Sort : Severity (🔴 > 🟡 > 🔵)
192
220
 
@@ -207,7 +235,7 @@ The interactive table allows fluid inspection of all detected secrets with multi
207
235
  Pressing `/` opens an inline prompt directly in the status bar. The table updates dynamically with every keystroke:
208
236
 
209
237
  ```text
210
- ◈ AISCOUT v2.3.0 │ User : dev_redious │ Host : linux-workstation 12/09/2026 22:30
238
+ ◈ AISCOUT v2.4.0 │ User : dev_redious │ Host : workstation 12/09/2026 22:30
211
239
 
212
240
  📋 SECRET EXPLORER (1/3) — Mode : MASKED 🛡️ │ Sort : Severity (🔴 > 🟡 > 🔵)
213
241
  🔍 Active filter: "github" (3 matching secrets) │ [Backspace/Esc] Clear
@@ -227,7 +255,7 @@ Pressing `/` opens an inline prompt directly in the status bar. The table update
227
255
  Pressing `Enter` on any row displays a full diagnostic modal card highlighting the source file, context, and remediation recommendations:
228
256
 
229
257
  ```text
230
- ◈ AISCOUT v2.3.0 │ User : dev_redious │ Host : linux-workstation 12/09/2026 22:30
258
+ ◈ AISCOUT v2.4.0 │ User : dev_redious │ Host : workstation 12/09/2026 22:30
231
259
 
232
260
  ╭──────────────────────────────────────────────────────────────────────────────────╮
233
261
  │ AUDIT CARD FOR DETECTED SECRET │
@@ -256,7 +284,7 @@ Pressing `Enter` on any row displays a full diagnostic modal card highlighting t
256
284
  During scans, redactions, or reports generation, an animated 100ms spinner displays current scan phase and progress percentage:
257
285
 
258
286
  ```text
259
- ◈ AISCOUT v2.3.0 │ User : dev_redious │ Host : linux-workstation 12/09/2026 22:30
287
+ ◈ AISCOUT v2.4.0 │ User : dev_redious │ Host : workstation 12/09/2026 22:30
260
288
 
261
289
  █████╗ ██╗ ███████╗ ██████╗ ██████╗ ██╗ ██╗████████╗
262
290
  ██╔══██╗██║ ██╔════╝██╔════╝██╔═══██╗██║ ██║╚══██╔══╝
@@ -276,7 +304,7 @@ During scans, redactions, or reports generation, an animated 100ms spinner displ
276
304
  ```
277
305
 
278
306
  ### 🌟 TUI Engine Strengths
279
- * **Robust Arrow Key Decoder**: Non-blocking input decoder with 100ms lookahead absorbing all ANSI escape variants (`\x1b[A`, `\x1b[B`, `\x1bOA`, `\x1bOB`, Linux console, Shift/Ctrl modifiers).
307
+ * **Cross-Platform Arrow & Input Decoder**: Native non-blocking keyboard polling (`msvcrt` on Windows, POSIX `termios`/`tty`/`select` on Linux/macOS) with 100ms lookahead absorbing all ANSI escape variants (`\x1b[A`, `\x1b[B`, `\x1bOA`, `\x1bOB`, Linux console, Shift/Ctrl modifiers).
280
308
  * **Auto-Adaptive Layout**:
281
309
  * Fixed top bar at **line 1**.
282
310
  * Fixed bottom status bar at **last terminal line**.
@@ -292,7 +320,7 @@ During scans, redactions, or reports generation, an animated 100ms spinner displ
292
320
  The **Watchdog** mode turns `aiscout` into a background sentinel:
293
321
 
294
322
  ```text
295
- ◈ AISCOUT v2.3.0 │ User : dev_redious │ Host : linux-workstation 12/09/2026 22:21
323
+ ◈ AISCOUT v2.4.0 │ User : dev_redious │ Host : workstation 12/09/2026 22:21
296
324
 
297
325
  📡 REAL-TIME MONITORING (WATCHDOG) │ 🟢 [ACTIVE SENTINEL]
298
326
  Detects active AI sessions writing to disk and sends instant desktop alerts
@@ -313,7 +341,7 @@ The **Watchdog** mode turns `aiscout` into a background sentinel:
313
341
  ### How it Works
314
342
  1. **Lightweight Polling**: Inspects filesystem modification timestamps (`mtime`) across AI log directories without expensive full disk scans.
315
343
  2. **Targeted Scan**: Upon detecting a modified or newly created file, only that specific file is scanned on the fly via `scan_single_file()`.
316
- 3. **Native Desktop Alerts**: Triggers `notify-send` with `critical` urgency on Linux desktop environments (KDE Plasma Wayland, GNOME).
344
+ 3. **Native Desktop Alerts**: Triggers `notify-send` with `critical` urgency on Linux desktop environments (KDE Plasma Wayland, GNOME) or native non-intrusive PowerShell toast notifications on Windows.
317
345
  4. **Audible Alert**: Fires terminal bell sound (`\a`) on critical secret detections.
318
346
 
319
347
  ---
@@ -323,7 +351,7 @@ The **Watchdog** mode turns `aiscout` into a background sentinel:
323
351
  TUI Menu `[7]` provides complete control over backup files created prior to sanitization:
324
352
 
325
353
  ```text
326
- ◈ AISCOUT v2.3.0 │ User : dev_redious │ Host : linux-workstation 12/09/2026 22:22
354
+ ◈ AISCOUT v2.4.0 │ User : dev_redious │ Host : workstation 12/09/2026 22:22
327
355
 
328
356
  ↩️ SAFE RESTORE & BACKUP MANAGER (.BAK)
329
357
  Restore original files before redaction or purge stale backup copies.
@@ -442,6 +470,7 @@ To avoid noisy alerts and false positives, `aiscout` runs 5 mathematical filters
442
470
  | `↑` / `↓` or `k` / `j` | Move selection cursor |
443
471
  | `Enter` / `Space` / `→` | Execute highlighted action |
444
472
  | `1` to `9` | Direct numeric menu jump |
473
+ | `L` | Switch Language on the fly (`EN` / `FR`) |
445
474
  | `Q` or `Ctrl+C` | Clean exit |
446
475
 
447
476
  ### Secret Explorer (TUI Table)
@@ -505,11 +534,11 @@ aiscout --home-dir /home/other_user
505
534
 
506
535
  ## 🏗️ Technical Architecture
507
536
 
508
- * **Core Engine**: Pure Python 3.10+ standard library (`os`, `sys`, `re`, `json`, `termios`, `tty`, `select`, `unicodedata`, `shutil`, `argparse`, `subprocess`).
537
+ * **Core Engine**: Pure Python 3.10+ standard library (`os`, `sys`, `re`, `json`, `unicodedata`, `shutil`, `argparse`, `subprocess`, with `msvcrt` on Windows and `termios`/`tty`/`select` on POSIX).
509
538
  * **Zero External Dependencies**: Zero `pip` dependencies required.
510
- * **Supported Platforms**: **Linux** (native Wayland / X11) and **WSL / WSL2** on Windows (macOS and native Windows not supported).
511
- * **Notification System**: Auto-detects `notify-send` for native desktop banners on Wayland & X11.
512
- * **Configuration Path**: `~/.config/aiscout/rules.json`
539
+ * **Supported Platforms**: **Linux** (native Wayland / X11), **Windows 10/11** (native PowerShell, CMD, Windows Terminal), and **WSL / WSL2**.
540
+ * **Notification System**: Auto-detects `notify-send` on Linux and native PowerShell toast notifications on Windows.
541
+ * **Configuration Path**: `~/.config/aiscout/rules.json` (or `%APPDATA%\aiscout\rules.json` on Windows).
513
542
  * **Zero Telemetry**: 100% local execution, zero outbound network traffic, complete privacy guarantee.
514
543
 
515
544
  ---
@@ -16,9 +16,7 @@ import time
16
16
  import json
17
17
  import math
18
18
  import shutil
19
- import select
20
- import termios
21
- import tty
19
+ import platform
22
20
  import argparse
23
21
  import subprocess
24
22
  import unicodedata
@@ -27,7 +25,23 @@ from datetime import datetime
27
25
  from collections import Counter
28
26
  from typing import List, Dict, Any, Optional, Tuple
29
27
 
30
- VERSION = "2.3.1"
28
+ IS_WINDOWS = sys.platform == "win32"
29
+
30
+ if IS_WINDOWS:
31
+ import msvcrt
32
+ # Active les séquences d'échappement VT100 / ANSI sous console Windows
33
+ os.system("")
34
+ try:
35
+ sys.stdout.reconfigure(encoding="utf-8")
36
+ sys.stdin.reconfigure(encoding="utf-8")
37
+ except Exception:
38
+ pass
39
+ else:
40
+ import select
41
+ import termios
42
+ import tty
43
+
44
+ VERSION = "2.4.1"
31
45
 
32
46
  # --- INTERNATIONALISATION (I18N) ---
33
47
  def detect_default_lang() -> str:
@@ -554,12 +568,15 @@ PATTERNS = {
554
568
  }
555
569
  }
556
570
 
557
- # --- CONFIGURATION ET RÈGLES PERSONNALISÉES (~/.config/aiscout/rules.json) ---
558
- CONFIG_DIR = Path.home() / ".config" / "aiscout"
571
+ # --- CONFIGURATION ET RÈGLES PERSONNALISÉES (rules.json) ---
572
+ if IS_WINDOWS and os.getenv("APPDATA"):
573
+ CONFIG_DIR = Path(os.getenv("APPDATA")) / "aiscout"
574
+ else:
575
+ CONFIG_DIR = Path.home() / ".config" / "aiscout"
559
576
  CUSTOM_RULES_FILE = CONFIG_DIR / "rules.json"
560
577
 
561
578
  def load_custom_rules() -> Dict[str, Dict[str, str]]:
562
- """Charge les règles personnalisées de l'utilisateur depuis ~/.config/aiscout/rules.json."""
579
+ """Charge les règles personnalisées de l'utilisateur depuis rules.json."""
563
580
  if not CUSTOM_RULES_FILE.exists():
564
581
  try:
565
582
  CONFIG_DIR.mkdir(parents=True, exist_ok=True)
@@ -596,7 +613,33 @@ def load_custom_rules() -> Dict[str, Dict[str, str]]:
596
613
 
597
614
 
598
615
  def send_desktop_notification(title: str, message: str, severity: str = "normal"):
599
- """Envoie une notification de bureau native sous Linux / KDE Plasma Wayland."""
616
+ """Envoie une notification de bureau native sous Linux / KDE / GNOME ou Windows 10/11."""
617
+ if IS_WINDOWS:
618
+ clean_title = title.replace('"', '`"').replace("'", "''")
619
+ clean_msg = message.replace('"', '`"').replace("'", "''").replace("\n", " ")
620
+ ps_script = (
621
+ f'[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms"); '
622
+ f'$objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon; '
623
+ f'$objNotifyIcon.Icon = [System.Drawing.SystemIcons]::Shield; '
624
+ f'$objNotifyIcon.BalloonTipIcon = "Warning"; '
625
+ f'$objNotifyIcon.BalloonTipTitle = "{clean_title}"; '
626
+ f'$objNotifyIcon.BalloonTipText = "{clean_msg}"; '
627
+ f'$objNotifyIcon.Visible = $True; '
628
+ f'$objNotifyIcon.ShowBalloonTip(5000); '
629
+ f'Start-Sleep -Seconds 1; '
630
+ f'$objNotifyIcon.Dispose()'
631
+ )
632
+ try:
633
+ subprocess.Popen(
634
+ ["powershell", "-NoProfile", "-NonInteractive", "-Command", ps_script],
635
+ creationflags=subprocess.CREATE_NO_WINDOW if hasattr(subprocess, "CREATE_NO_WINDOW") else 0,
636
+ stdout=subprocess.DEVNULL,
637
+ stderr=subprocess.DEVNULL
638
+ )
639
+ except Exception:
640
+ pass
641
+ return
642
+
600
643
  if shutil.which("notify-send"):
601
644
  urgency = "critical" if severity in ("CRITIQUE", "ÉLEVÉ") else "normal"
602
645
  try:
@@ -667,7 +710,40 @@ def display_len(s: str) -> int:
667
710
 
668
711
 
669
712
  def read_key() -> str:
670
- """Lecture robuste des frappes clavier sans déconnexion intempestive sur les flèches."""
713
+ """Lecture robuste des frappes clavier (Linux / macOS / Windows natif)."""
714
+ if IS_WINDOWS:
715
+ while not msvcrt.kbhit():
716
+ time.sleep(0.02)
717
+ ch = msvcrt.getwch()
718
+ if ch in ("\x00", "\xe0"):
719
+ # Touche spéciale sous Windows (flèches, pagination, etc.)
720
+ code = msvcrt.getwch()
721
+ arrows = {
722
+ "H": "UP",
723
+ "P": "DOWN",
724
+ "K": "LEFT",
725
+ "M": "RIGHT",
726
+ "I": "PAGE_UP",
727
+ "Q": "PAGE_DOWN",
728
+ "G": "HOME",
729
+ "O": "END",
730
+ "S": "DELETE"
731
+ }
732
+ return arrows.get(code, "")
733
+ if ch in ("\r", "\n"):
734
+ return "ENTER"
735
+ if ch == " ":
736
+ return "SPACE"
737
+ if ch == "\t":
738
+ return "TAB"
739
+ if ch in ("\x08", "\x7f"):
740
+ return "BACKSPACE"
741
+ if ch == "\x1b":
742
+ return "ESC"
743
+ if ch == "\x03":
744
+ return "CTRL_C"
745
+ return ch
746
+
671
747
  fd = sys.stdin.fileno()
672
748
  old = termios.tcgetattr(fd)
673
749
  try:
@@ -813,11 +889,26 @@ class ScoutEngine:
813
889
  self.home / ".continue" / "sessions",
814
890
  self.home / ".aider.chat.history.md",
815
891
  ]
892
+ # Emplacements Windows spécifiques (%APPDATA% et %USERPROFILE%)
893
+ appdata = os.getenv("APPDATA")
894
+ if appdata:
895
+ ad = Path(appdata)
896
+ targets.extend([
897
+ ad / "Cursor" / "User" / "workspaceStorage",
898
+ ad / "Claude" / "projects",
899
+ ad / "Code" / "User" / "workspaceStorage"
900
+ ])
901
+ localappdata = os.getenv("LOCALAPPDATA")
902
+ if localappdata:
903
+ lad = Path(localappdata)
904
+ targets.extend([
905
+ lad / "Programs" / "cursor" / "resources"
906
+ ])
816
907
  return [p for p in targets if p.exists()]
817
908
 
818
909
  def identify_tool(self, file_path: str) -> str:
819
- fp = str(file_path)
820
- if ".claude" in fp:
910
+ fp = str(file_path).lower().replace("\\", "/")
911
+ if ".claude" in fp or "/claude/" in fp:
821
912
  return "Claude Code"
822
913
  elif ".gemini" in fp or "antigravity" in fp:
823
914
  return "Antigravity (Gemini)"
@@ -825,7 +916,7 @@ class ScoutEngine:
825
916
  return "Codex"
826
917
  elif ".copilot" in fp:
827
918
  return "GitHub Copilot"
828
- elif ".cursor" in fp:
919
+ elif ".cursor" in fp or "/cursor/" in fp:
829
920
  return "Cursor"
830
921
  elif ".continue" in fp:
831
922
  return "Continue.dev"
@@ -1203,8 +1294,8 @@ class ScoutTUI:
1203
1294
  return " " * pad + text
1204
1295
 
1205
1296
  def build_top_bar(self, width: int) -> str:
1206
- user = os.getenv("USER", "user")
1207
- host = os.uname().nodename
1297
+ user = os.getenv("USER") or os.getenv("USERNAME") or "user"
1298
+ host = platform.node() or "localhost"
1208
1299
  date_str = datetime.now().strftime("%d/%m/%Y %H:%M")
1209
1300
  u_lbl = t("user_label")
1210
1301
  h_lbl = t("host_label")
@@ -1899,11 +1990,12 @@ class ScoutTUI:
1899
1990
 
1900
1991
  def export_markdown(self, path: Path, items: List[Finding]):
1901
1992
  is_fr = (get_lang() == "fr")
1993
+ user_name = os.getenv("USER") or os.getenv("USERNAME") or "user"
1902
1994
  with open(path, "w", encoding="utf-8") as f:
1903
1995
  if is_fr:
1904
1996
  f.write(f"# Rapport d'Audit de Sécurité — Transcriptions d'IA\n\n")
1905
1997
  f.write(f"- **Généré le** : {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
1906
- f.write(f"- **Utilisateur** : `{os.getenv('USER')}`\n")
1998
+ f.write(f"- **Utilisateur** : `{user_name}`\n")
1907
1999
  f.write(f"- **Total secrets identifiés** : {len(items)}\n\n")
1908
2000
  f.write("## Synthèse par Niveau de Sévérité\n\n")
1909
2001
  f.write(f"- **Critique** : {sum(1 for x in items if x.severity in ('CRITIQUE', 'CRITICAL'))}\n")
@@ -1917,7 +2009,7 @@ class ScoutTUI:
1917
2009
  else:
1918
2010
  f.write(f"# Security Audit Report — AI Assistant Histories\n\n")
1919
2011
  f.write(f"- **Generated on** : {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
1920
- f.write(f"- **User** : `{os.getenv('USER')}`\n")
2012
+ f.write(f"- **User** : `{user_name}`\n")
1921
2013
  f.write(f"- **Total exposed secrets** : {len(items)}\n\n")
1922
2014
  f.write("## Summary by Severity Level\n\n")
1923
2015
  f.write(f"- **Critical** : {sum(1 for x in items if x.severity in ('CRITIQUE', 'CRITICAL'))}\n")
@@ -2147,10 +2239,12 @@ class ScoutTUI:
2147
2239
  scans_count = 0
2148
2240
  pulse = False
2149
2241
 
2150
- fd = sys.stdin.fileno()
2151
- old_term = termios.tcgetattr(fd)
2152
- try:
2242
+ if not IS_WINDOWS:
2243
+ fd = sys.stdin.fileno()
2244
+ old_term = termios.tcgetattr(fd)
2153
2245
  tty.setraw(fd)
2246
+
2247
+ try:
2154
2248
  while True:
2155
2249
  pulse = not pulse
2156
2250
  width = self.get_width()
@@ -2207,11 +2301,23 @@ class ScoutTUI:
2207
2301
  sys.stdout.flush()
2208
2302
 
2209
2303
  # Attente non-bloquante d'une frappe clavier (1.0 seconde)
2210
- r, _, _ = select.select([fd], [], [], 1.0)
2211
- if r:
2212
- key_bytes = os.read(fd, 32)
2213
- if key_bytes in (b"q", b"Q", b"\x1b", b"\x03"):
2214
- break
2304
+ interrupted = False
2305
+ if IS_WINDOWS:
2306
+ for _ in range(10):
2307
+ if msvcrt.kbhit():
2308
+ ch = msvcrt.getwch()
2309
+ if ch in ("q", "Q", "\x1b", "\x03"):
2310
+ interrupted = True
2311
+ break
2312
+ time.sleep(0.1)
2313
+ else:
2314
+ r, _, _ = select.select([fd], [], [], 1.0)
2315
+ if r:
2316
+ key_bytes = os.read(fd, 32)
2317
+ if key_bytes in (b"q", b"Q", b"\x1b", b"\x03"):
2318
+ interrupted = True
2319
+ if interrupted:
2320
+ break
2215
2321
 
2216
2322
  # Analyse des répertoires pour détecter fichiers nouveaux ou modifiés
2217
2323
  current_files = []
@@ -2262,7 +2368,8 @@ class ScoutTUI:
2262
2368
  events_log = events_log[-50:]
2263
2369
 
2264
2370
  finally:
2265
- termios.tcsetattr(fd, termios.TCSADRAIN, old_term)
2371
+ if not IS_WINDOWS:
2372
+ termios.tcsetattr(fd, termios.TCSADRAIN, old_term)
2266
2373
 
2267
2374
 
2268
2375
  # --- POINT D'ENTRÉE ---
package/bin/aiscout.js CHANGED
@@ -11,7 +11,8 @@ const pyScript = path.join(__dirname, '..', 'ai_secret_scout.py');
11
11
 
12
12
  const child = spawn(pyCmd, [pyScript, ...process.argv.slice(2)], {
13
13
  stdio: 'inherit',
14
- env: process.env
14
+ env: process.env,
15
+ shell: process.platform === 'win32'
15
16
  });
16
17
 
17
18
  child.on('error', (err) => {
@@ -19,7 +19,9 @@ function checkNodeVersion() {
19
19
  }
20
20
 
21
21
  function checkPythonVersion() {
22
- const candidates = ['python3', 'python'];
22
+ const candidates = process.platform === 'win32'
23
+ ? ['python', 'py', 'python3']
24
+ : ['python3', 'python'];
23
25
 
24
26
  for (const cmd of candidates) {
25
27
  try {
@@ -62,6 +64,13 @@ function checkPythonVersion() {
62
64
  }
63
65
 
64
66
  function getInstallSuggestion(isFr) {
67
+ if (process.platform === 'win32') {
68
+ if (isFr) {
69
+ return '👉 Sous Windows, vous pouvez installer Python 3.10+ avec winget ou depuis le site officiel :\n winget install Python.Python.3.12\n ou téléchargez l\'installeur : https://www.python.org/downloads/';
70
+ }
71
+ return '👉 On Windows, you can install Python 3.10+ via winget or from the official website:\n winget install Python.Python.3.12\n or download the installer from: https://www.python.org/downloads/';
72
+ }
73
+
65
74
  let pkgManager = 'apt';
66
75
  try {
67
76
  if (fs.existsSync('/etc/os-release')) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-secret-scout",
3
- "version": "2.3.1",
3
+ "version": "2.4.1",
4
4
  "description": "Zero-dependency heuristic secret scanner & redaction tool for AI coding assistants (Claude Code, Antigravity, Codex, Copilot, Cursor)",
5
5
  "main": "bin/aiscout.js",
6
6
  "bin": {