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 +58 -30
- package/README.md +53 -24
- package/ai_secret_scout.py +132 -25
- package/bin/aiscout.js +2 -1
- package/bin/check-environment.js +10 -1
- package/package.json +1 -1
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.
|
|
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&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&logoColor=white" alt="Watchdog Temps Réel">
|
|
20
20
|
<img src="https://img.shields.io/badge/Safe%20Restore-Gestionnaire%20Backups-7C3AED?logo=securityscorecard&logoColor=white" alt="Safe Restore">
|
|
21
|
-
<img src="https://img.shields.io/badge/Plateforme-Linux%20%7C%
|
|
21
|
+
<img src="https://img.shields.io/badge/Plateforme-Linux%20%7C%20Windows%20%7C%20macOS%20%7C%20WSL-0078D6?logo=windows&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.
|
|
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.
|
|
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`
|
|
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
|
-
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
276
|
-
* **Gestion
|
|
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.
|
|
323
|
+
◈ AISCOUT v2.4.0 │ Utilisateur : dev_redious │ Machine : poste-travail 12/09/2026 22:21
|
|
293
324
|
|
|
294
|
-
|
|
295
|
-
Détecte les sessions IA en écriture et notifie instantanément sur le bureau
|
|
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
|
|
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.
|
|
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`, `
|
|
506
|
-
* **Zéro Dépendance Externe** : Aucun package tiers `pip`. Conçu
|
|
507
|
-
* **Systèmes Supportés** : **Linux** (natif Wayland / X11)
|
|
508
|
-
* **Notification
|
|
509
|
-
* **
|
|
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.
|
|
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&logoColor=white" alt="Zero Dependencies">
|
|
19
19
|
<img src="https://img.shields.io/badge/Watchdog-Real--Time%20%26%20Desktop%20Alerts-F59E0B?logo=airplayaudio&logoColor=white" alt="Real-Time Watchdog">
|
|
20
20
|
<img src="https://img.shields.io/badge/Safe%20Restore-Backup%20Manager-7C3AED?logo=securityscorecard&logoColor=white" alt="Safe Restore">
|
|
21
|
-
<img src="https://img.shields.io/badge/Platform-Linux%20%7C%
|
|
21
|
+
<img src="https://img.shields.io/badge/Platform-Linux%20%7C%20Windows%20%7C%20WSL-0078D6?logo=windows&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.
|
|
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.
|
|
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`
|
|
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
|
-
> [!
|
|
111
|
-
> **Platform Support**: `aiscout`
|
|
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
|
-
#
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
* **
|
|
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.
|
|
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.
|
|
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`, `
|
|
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)
|
|
511
|
-
* **Notification System**: Auto-detects `notify-send`
|
|
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
|
---
|
package/ai_secret_scout.py
CHANGED
|
@@ -16,9 +16,7 @@ import time
|
|
|
16
16
|
import json
|
|
17
17
|
import math
|
|
18
18
|
import shutil
|
|
19
|
-
import
|
|
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
|
-
|
|
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 (
|
|
558
|
-
|
|
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
|
|
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
|
|
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
|
|
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"
|
|
1207
|
-
host =
|
|
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** : `{
|
|
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** : `{
|
|
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
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
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
|
-
|
|
2211
|
-
if
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
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
|
-
|
|
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) => {
|
package/bin/check-environment.js
CHANGED
|
@@ -19,7 +19,9 @@ function checkNodeVersion() {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
function checkPythonVersion() {
|
|
22
|
-
const candidates =
|
|
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