Hermes Agent e07f401b5c refactor: un thread par fenêtre Tk, main thread dédié au hotkey
- Nouveau helper ui/_tk_spawn.py : chaque fenêtre Tk dans son propre thread
  avec sa propre racine tk.Tk (plus de racine partagée)
- app.py : thread principal pour le hotkey + attente stop_event,
  thread séparé pour l'icône pystray
- tray.py : suppression de get_root/_defer_tk/_present_window,
  spawn_tk_window pour chaque dialogue, callbacks on_result au lieu
  de wait_window bloquant
2026-09-18 13:25:24 +02:00
2026-09-11 12:01:35 +02:00

AI-Typewriter

Application Python qui tourne en arrière-plan (icône dans la zone de notification de Windows, aucune fenêtre au démarrage), lit le contenu du presse-papier sur un raccourci global, l'envoie à un modèle IA, puis réécrit la réponse caractère par caractère à chaque pression de touche physique.

Un profil spécialisé « Mathématiques (LaTeX) » marque les équations avec [EQ]...[/EQ] : l'application les intercepte et déclenche Alt+= pour ouvrir une équation (Word/OneNote) et → pour en sortir.

Fonctionnement

  1. L'utilisateur copie le texte à envoyer à l'IA.
  2. Raccourci global par défaut : Ctrl+Alt+A.
  3. L'application lit le presse-papier et envoie au modèle du profil actif.
  4. Une icône reste disponible dans la zone de notification : elle permet d'ouvrir les journaux, d'ajouter/commuter des profils et de gérer les clés d'API.
  5. Chaque touche physique appuyée ensuite écrit l'élément suivant de la réponse (caractère ou séquence d'équation).
  6. Le hook clavier est libéré automatiquement à la fin de la réponse.

Installation depuis les sources

python -m venv .venv
. .venv/bin/activate           # Windows : .venv\Scripts\activate
pip install -r requirements.txt
pip install -e .
python main.py

À la première exécution, l'application crée son fichier de configuration : %APPDATA%\ai-typewriter\config.json (Linux : ~/.config/ai-typewriter/config.json).

Configuration (profils)

La configuration contient une liste de profils nommés et le profil actif. Chaque profil décrit :

Champ Description
name Libellé affiché dans les menus
provider ollama, openai, openrouter, gemini, custom (OpenAI-compatible)
model Nom du modèle (choisissable via le sélecteur)
server_url Base de l'instance (ex. http://localhost:11434)
credential Nom logique de la clé d'API (voir « Authentification »)
system_prompt Instructions données au modèle
equation_enabled Active l'interception des marqueurs d'équation
eq_start_marker / eq_end_marker Marqueurs (défaut [EQ] / [/EQ])
eq_start_key / eq_end_key Touches déclenchées (défaut alt+= / right)

Deux profils sont créés par défaut : Général et Mathématiques (LaTeX).

Profil Mathématiques (LaTeX)

Le prompt système demande au modèle de produire du LaTeX encadré par [EQ]...[/EQ], par exemple :

Les racines sont [EQ]z_1 = x + iy[/EQ] et [EQ]z_2 = x - iy[/EQ].

À chaque [EQ] l'application envoie Alt+= (ouvre une équation inline), tape le LaTeX littéralement, puis envoie → à chaque [/EQ]. Ce comportement est désactivé par défaut sur les autres profils (le texte est tapé tel quel).

Zone de notification (icône)

L'application se lance sans fenêtre visible. Le menu de l'icône propose :

  • Ouvrir les logs — fenêtre des journaux en temps réel (également écrits dans %APPDATA%\ai-typewriter\logs\app.log).
  • Ajouter un profil — formulaire (nom, fournisseur, modèle, serveur, prompt, équations).
  • Modifier le profil — sous-menu listant tous les profils pour choisir le profil actif.
  • Gérer l'authentification — enregistrer les clés d'API des fournisseurs.
  • Quitter — arrête le processus.

Sélection et téléchargement des modèles

Dans le formulaire de profil, « Choisir / télécharger… » ouvre un sélecteur qui :

  • liste automatiquement les modèles déjà disponibles localement (Ollama /api/tags) ;
  • si connecté à Internet, permet de rechercher dans la bibliothèque publique d'Ollama, de vérifier un modèle exact et de lancer son téléchargement (ollama pull).

Authentification des fournisseurs

Les clés d'API ne sont jamais écrites dans le fichier de configuration. Chaque profil référence une clé par un nom logique ; la clé est stockée de façon sécurisée dans le Gestionnaire d'identifiants de Windows (via keyring). Le menu Gérer l'authentification permet de les enregistrer, vérifier ou supprimer.

Compilation (Windows)

build.bat

Le script crée .venv, installe les dépendances, puis produit un exécutable autonome sans console dans dist\ai-typewriter.exe. Il tourne directement en zone de notification.

Test rapide sans hook clavier ni icône

python main.py --debug --ask "Résume: bonjour tout le monde"

Envoie le prompt au profil actif et imprime la réponse brute (aucune icône ni interception clavier).

Tests

. .venv/bin/activate
pytest

La suite couvre le découpage en actions (caractères/équations), le stepper, le dépôt de profils, les clients IA (Ollama/Gemini/OpenAI), le stockage sécurisé (keyring mocké) et le catalogue de modèles — sans réel hook clavier, réseau ni Gestionnaire d'identifiants.

S
Description
Assistant Python global hotkey that sends selected text to Ollama/Gemini and types the AI response one character per keypress.
Readme
267 KiB
Languages
Python 96.2%
Batchfile 3.8%