# Migration de WinClean vers `bun:windows`

Inventaire établi le 2026-10-09 depuis Aphrody `f8a293c421ed7c9b67fd06db31c1e5883497f525` (fichiers consultés via `FETCH_HEAD`, checkout inchangé). Sources principales : `crates/os/kernel/comps/winclean/src/{dispatch,system,memory,registry,services,eventlog,snapshot,winreg,tcp,ocr,speech,record,gamepad}.rs`, `tools.json` et `Cargo.toml`.

## Répartition

`bun:windows` porte les appels système stables et réutilisables. WinClean reste dans Aphrody comme outil produit : il orchestre le computer use, les observations, le nettoyage, l’optimisation et les parcours métier. Il consomme les primitives du fork et conserve ses formats MCP, politiques, filtres et confirmations.

| Fonctions WinClean                                                                                                                                                                                                                                                                                           | API Windows utilisée dans Aphrody                                                                                                                                                           | Cible fork                                                                        | État / action T2                                                                                                                                                                                                               |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `get_registry_value`, `list_registry_key`, `set_registry_value`, `delete_registry_entry`                                                                                                                                                                                                                     | `RegOpenKeyExW`, `RegQueryValueExW`, `RegSetValueExW`, `RegEnumKeyExW`, `RegEnumValueW`, `RegDeleteValueW`, `RegDeleteTreeW` (`winreg.rs`)                                                  | `windows.registry.get/list/set/deleteValue/deleteKey`                             | Existe. Remplacer l’accès `registry` de `registry.rs`; garder les raccourcis métier HAGS et GPU dans Aphrody.                                                                                                                  |
| `get_hags_mode`, `set_hags_mode`, `get_gpu_preferences`, `set_gpu_preference`                                                                                                                                                                                                                                | Registry `HKLM`/`HKCU` via les mêmes fonctions                                                                                                                                              | `windows.registry.*`                                                              | Existe; validations métier et format `GpuPreference=N;` restent Aphrody.                                                                                                                                                       |
| `list_services`, `start_service`, `stop_service`, `restart_service`                                                                                                                                                                                                                                          | `OpenSCManagerW`, `EnumServicesStatusExW`, `OpenServiceW`, `QueryServiceStatusEx`, `StartServiceW`, `ControlService` (`services.rs`)                                                        | `windows.services.list/get/start/stop`                                            | Liste/détail/démarrage/arrêt existent; restart = composition Aphrody (ou méthode future si délai atomique requis).                                                                                                             |
| `list_services` avec services pilotes, `gamepad_environment`                                                                                                                                                                                                                                                 | SCM et clés Registry du pilote                                                                                                                                                              | `windows.services.list({ drivers: true })`, `windows.registry.*`                  | SCM existe; le diagnostic ViGEmBus reste produit et la dépendance ViGEm n’est pas intégrée au binaire.                                                                                                                         |
| `query_event_log`, événements Windows Update                                                                                                                                                                                                                                                                 | `EvtQuery`, `EvtNext`, `EvtRender`, `EvtClose`, `ReportEventW` (`eventlog.rs`)                                                                                                              | `windows.eventLog.query/write`                                                    | Existe. Rediriger le backend; XPath/canal restent paramètres produit.                                                                                                                                                          |
| `get_clipboard_text`, `set_clipboard_text`                                                                                                                                                                                                                                                                   | `OpenClipboard`, `GetClipboardData`, `SetClipboardData`, `GlobalAlloc/Lock/Unlock`, `EmptyClipboard`                                                                                        | `windows.clipboard.*`                                                             | Existe. Les noms de tools restent dans l’adaptateur MCP Aphrody.                                                                                                                                                               |
| `get_os_info`, `get_cpu_info`, `get_cpu_usage`, `get_memory_info`, `get_system_profile`                                                                                                                                                                                                                      | `RtlGetVersion`, `GlobalMemoryStatusEx`, `GetActiveProcessorCount`, `GetSystemTimes`, `GetLogicalProcessorInformationEx`, nom machine/utilisateur                                           | `windows.version/systemInfo`, `windows.memory.status()`, puis `windows.system.*`  | Version, système de base et mémoire physique/virtuelle/pagefile existent. CPU topology/usage et profil agrégé manquent; le profil optimisé reste Aphrody.                                                                      |
| `get_disk_info`                                                                                                                                                                                                                                                                                              | `GetLogicalDriveStringsW`, `GetDriveTypeW`, `GetDiskFreeSpaceExW` (`system.rs`)                                                                                                             | `windows.storage.drives()`                                                        | Ajouté dans ce lot. Aphrody consomme `root/type/totalBytes/freeBytes/availableBytes`; inventaire de nettoyage et sélection des caches restent Aphrody.                                                                         |
| `list_processes`, `mem_list_processes`, `kill_process`, `steam_get_game_status`, `steam_kill_game`                                                                                                                                                                                                           | `NtQuerySystemInformation`, `CreateToolhelp32Snapshot`, `OpenProcess`, `QueryFullProcessImageNameW`, `TerminateProcess`                                                                     | `windows.processes.list/path/terminate`                                           | Couverture de base existante. Filtrage/tri/métriques et sémantique Steam restent Aphrody; enrichir processus dans le fork si d’autres consommateurs le demandent.                                                              |
| `set_process_affinity`, `set_process_priority`, `perf_set_eco_mode`, `trim_process_working_set`                                                                                                                                                                                                              | `OpenProcess`, `Get/SetProcessAffinityMask`, `Get/SetPriorityClass`, `SetProcessInformation`, `SetProcessWorkingSetSize`                                                                    | `windows.processes.*` (extension requise)                                         | Implémenté dans `bun:windows`: `setAffinity`, `setPriority`, `setEcoMode`, `trimWorkingSet`. L’avertissement diagnostic de trim reste dans Aphrody. Privilège et mémoire distante restent à intégrer dans le paquet processus. |
| `mem_enable_debug_privilege`                                                                                                                                                                                                                                                                                 | `OpenProcessToken`, `LookupPrivilegeValueW`, `AdjustTokenPrivileges`                                                                                                                        | paquet `@aphrody/bun-windows-process`                                             | Manquant, privilégié et hors du cœur fréquent; exposer au besoin sans élévation implicite.                                                                                                                                     |
| `mem_read_*`, `mem_write_*`, `mem_allocate/free/protect/query_region`, `mem_suspend/resume_process`, `mem_dump_region`, `mem_list_modules`, `mem_get_module_base`, `mem_scan_*`                                                                                                                              | `ReadProcessMemory`, `WriteProcessMemory`, `VirtualAllocEx`, `VirtualFreeEx`, `VirtualProtectEx`, `VirtualQueryEx`, `NtSuspendProcess`, `NtResumeProcess`, Toolhelp module/thread snapshots | paquet `@aphrody/bun-windows-process`                                             | Manquant. Garder les bornes, scans, formats et orchestration dans Aphrody; API système isolée et chargée sur demande.                                                                                                          |
| `list_tcp_connections`, `list_listening_ports`, `get_network_adapters`                                                                                                                                                                                                                                       | `GetExtendedTcpTable`; IP Helper / `GetAdaptersAddresses` (ou collecte `sysinfo`)                                                                                                           | paquet `@aphrody/bun-windows-network`                                             | Manquant. Le fork renvoie des données brutes typées; filtres d’état et présentation restent Aphrody.                                                                                                                           |
| `list_scheduled_tasks`, `run_scheduled_task`, `enable_scheduled_task`, `disable_scheduled_task`                                                                                                                                                                                                              | Aujourd’hui `schtasks.exe`; API native Task Scheduler COM (`ITaskService`, `ITaskFolder`, `IRegisteredTask`) à employer dans le fork                                                        | paquet `@aphrody/bun-windows-tasks`                                               | Manquant. Ne pas déplacer la construction de commandes shell vers Bun.                                                                                                                                                         |
| `list_power_plans`, `get_active_power_plan`, `set_active_power_plan`                                                                                                                                                                                                                                         | Aujourd’hui `powercfg.exe`; `PowerEnumerate`, `PowerGetActiveScheme`, `PowerSetActiveScheme` (`powrprof.dll`)                                                                               | paquet `@aphrody/bun-windows-power`                                               | Manquant. GUID et règles de sélection restent Aphrody.                                                                                                                                                                         |
| `perf_empty_working_sets`, `perf_purge_standby_list`, `perf_dwm_flush`, `perf_memory_status`                                                                                                                                                                                                                 | `NtSetSystemInformation`, `DwmFlush`, `GlobalMemoryStatusEx`                                                                                                                                | paquet `@aphrody/bun-windows-memory` (DWM dans `@aphrody/bun-windows-dwm`)        | Manquant. La politique « optimisation » et les avertissements restent Aphrody.                                                                                                                                                 |
| `list_windows`, `window_enum_all`, `window_enum_children`, `window_find_by_class`, `window_get_text`, `window_set_text`, `window_close`, `window_move`, `resize_window`, `window_set_topmost`, `window_set_opacity`, `window_post_message`, `window_send_message`, `switch_to_window`, `window_minimise_all` | `EnumWindows`, `EnumChildWindows`, `FindWindowW`, `GetWindowTextW`, `SendMessageW`, `PostMessageW`, `SetWindowPos`, `ShowWindow`, `SetLayeredWindowAttributes`, `SetForegroundWindow`       | paquet `@aphrody/bun-windows-ui`                                                  | Manquant. WinClean garde ses sélecteurs de fenêtres et ses actions de haut niveau.                                                                                                                                             |
| `computer_observe`, `snapshot`, `computer_click_element`, `multi_select`, `multi_edit`                                                                                                                                                                                                                       | UI Automation COM/UIA (`uiautomation` crate), contrôle/arbre/accessibility                                                                                                                  | paquet `@aphrody/bun-windows-uia`                                                 | Manquant. Observation, sélection sémantique, limites et orchestration restent dans Aphrody.                                                                                                                                    |
| `computer_capture_screen`, `screenshot`, `window_capture`, `computer_record_clip`                                                                                                                                                                                                                            | `BitBlt`/GDI, DWM, capture écran `aphrody-capture`, encodage image                                                                                                                          | paquet `@aphrody/bun-windows-capture`                                             | Manquant côté Bun. Le format MCP/image et l’enregistrement borné restent produit Aphrody.                                                                                                                                      |
| `click`, `move`, `scroll`, `type`, `shortcut`, `keyboard_*`, `mouse_*`, `computer_*`                                                                                                                                                                                                                         | `SendInput`, `SetCursorPos`, messages de souris/clavier                                                                                                                                     | paquet `@aphrody/bun-windows-input`                                               | Manquant. Politiques computer-use (règles clavier, coordonnées relatives, fraîcheur d’observation) restent Aphrody.                                                                                                            |
| `computer_ocr`                                                                                                                                                                                                                                                                                               | Windows.Media.Ocr / WinRT, capture pixels                                                                                                                                                   | paquet `@aphrody/bun-windows-ocr`                                                 | Manquant. Format de réponse, région et intégration à `computer_observe` restent Aphrody.                                                                                                                                       |
| `computer_speak`, `send_notification`                                                                                                                                                                                                                                                                        | WinRT SpeechSynthesizer / SAPI, notification Windows                                                                                                                                        | `windows.notify/toast` pour toast; paquet `@aphrody/bun-windows-speech` pour voix | Toast existe (`notify/toast`); synthèse vocale manquante. Fichier WAV et choix d’interaction restent Aphrody.                                                                                                                  |
| `gamepad_*`                                                                                                                                                                                                                                                                                                  | ViGEmBus / ViGEmClient et service pilote                                                                                                                                                    | paquet/plugin `@aphrody/bun-windows-gamepad`                                      | Manquant; dépendance native tierce, jamais liée au cœur. Diagnostic et commandes de jeu restent Aphrody.                                                                                                                       |
| `wsl_*`                                                                                                                                                                                                                                                                                                      | Registre WSL et `wsl.exe`                                                                                                                                                                   | `windows.wsl.*`                                                                   | Énumération et exécution argv existent. Status/processus/probe/signal restent à ajouter au fork; les probes autorisées restent définies par Aphrody.                                                                           |
| `get_file_info`, `list_directory`, `search_files`, `read_file`, `write_file`, `copy_path`, `move_path`, `delete_path`                                                                                                                                                                                        | Win32 fichier ou abstraction Rust; `SearchPathW` pour résolution                                                                                                                            | `node:fs` / `Bun.Glob`; paquet Win32 seulement pour une sémantique OS spécifique  | Ne pas dupliquer les opérations de fichiers génériques dans `bun:windows`. Garder règles de nettoyage, exclusions, limites et confirmation dans Aphrody.                                                                       |
| `search_windows`                                                                                                                                                                                                                                                                                             | Windows Search (indexeur natif, requêtes OLE DB/COM)                                                                                                                                        | paquet `@aphrody/bun-windows-search`                                              | Manquant. Aphrody garde l’UX et les contraintes de recherche.                                                                                                                                                                  |
| `launch_app`, `steam_open_uri`, `steam_*`                                                                                                                                                                                                                                                                    | `ShellExecuteW`, création de processus, protocole Steam; base Steam SQLite                                                                                                                  | `bun:windows` pour une primitive shell si nécessaire; sinon Node/Bun process      | Métier Steam et accès à `steam-scan.db` restent Aphrody. Ne pas migrer la base ni l’authentification Steam.                                                                                                                    |
| `winml_*`                                                                                                                                                                                                                                                                                                    | Windows ML/ONNX Runtime, WinRT/DirectML                                                                                                                                                     | paquet `@aphrody/bun-windows-ml`                                                  | Manquant et lourd; métadonnées/inférence ne vont pas dans le binaire Bun. Catalogue de modèles et appels restent Aphrody.                                                                                                      |
| `scrape`, `power_shell`, coordination `.coord/*`                                                                                                                                                                                                                                                             | HTTP, processus PowerShell, fichiers de coordination                                                                                                                                        | API Fetch/Bun.spawn/Bun.file                                                      | Outils et politiques Aphrody. Ne pas exposer un shell générique dans `bun:windows`.                                                                                                                                            |
| `analyze_pe`, `aob_scan`, `asar_list`, `binary_*`, `golang_scan`, Steam catalog/vault                                                                                                                                                                                                                        | Parsing fichiers, cryptographie et données produit; aucun besoin intrinsèque Win32                                                                                                          | APIs existantes Bun ou packages Aphrody                                           | Reste dans Aphrody; pas d’API Win32 à migrer.                                                                                                                                                                                  |

## Paquets Windows séparés

Les dossiers de paquets de familles Win32 générés depuis win32metadata ne sont pas encore présents dans ce checkout Bun. Le lot `sys32` doit établir leur manifest, génération, chargement différé et tests; ce lot ne crée donc pas de faux paquets ou de façades non fonctionnelles. Les familles indiquées dans la table décrivent les destinations attendues et doivent reprendre la forme réelle de `sys32` lors de son intégration.

Le chemin rapide de ce lot ajoute seulement l’énumération des volumes, une capacité système native simple et réutilisable. Elle est appelée à la demande et n’ajoute aucune initialisation au démarrage de Bun. Les API de registre, SCM, processus, journaux, clipboard, tâches Job, notifications et WSL préexistantes restent elles aussi paresseuses via l’import `bun:windows`.

## Repointer Aphrody en T2

Statut 2026-10-14 : l’adaptateur `packages/os/winclean/src/bun-windows.ts` route directement
registre, services, presse-papiers, disques, version système et mémoire vers `bun:windows` quand
le client utilise le runtime local. Un endpoint explicite et les outils produit non couverts restent
sur le kernel Aphrody. Les schémas WinClean publics sont conservés par l’adaptateur.

Dans le checkout Aphrody (sans modifier les fichiers de ce lot) :

1. Ajouter un adaptateur TypeScript dans `packages/os/winclean/src/` qui importe `bun:windows` et traduit les résultats/erreurs en schéma actuel des tools MCP.
2. Remplacer les chemins `registry.rs`, `services.rs`, `eventlog.rs`, clipboard et lecture de version par `windows.registry`, `windows.services`, `windows.eventLog`, `windows.clipboard` et `windows.version/systemInfo`; basculer `get_disk_info` vers `windows.storage.drives()`.
3. Garder dans `dispatch.rs` le routage, les contrôles, messages utilisateur et fonctions de produit. Garder dans `system.rs`/modules produit les politiques d’optimisation, les seuils et les compositions jusqu’à disponibilité des paquets listés.
4. Éliminer toute dépendance directe Aphrody à `windows`/`windows-sys`/`uiautomation` une fois tous les consommateurs repointés. Revoir les features `target.'cfg(windows)'.dependencies` de `crates/os/kernel/comps/winclean/Cargo.toml`; supprimer seulement celles qui ne sont plus utilisées.
5. Conserver computer use, nettoyage, optimisation, catalogue Steam, base/vault Steam, coordination, WinML/OCR/speech et schémas `tools.json` dans Aphrody. Ces fonctions consomment les API système Bun sans déplacer leur logique produit.

## Vérification de ce lot

La cible installée `x86_64-pc-windows-msvc` permet une vérification Cargo croisée. Ce checkout Linux ne peut pas exécuter les tests Windows; le test de `storage.drives()` est donc ajouté mais reste à exécuter sur Windows. Aucun test n’est déclaré validé avant exécution.
