⚠️ Statut : En cours de développement (non abouti / incomplet)
Ce projet est actuellement en cours de développement actif et n'est pas encore dans un état final et fonctionnel. Le code de ce dépôt représente un prototype précoce d'un assistant de codage de bureau. Plusieurs fonctionnalités sont partiellement implémentées, peuvent ne pas compiler proprement et n'ont pas été entièrement testées ou validées. Traitez tout ce qui se trouve ici comme expérimental.
RustAgent est une application de bureau native qui combine un assistant de chat IA, un éditeur de code avec coloration syntaxique et un terminal intégré dans une seule fenêtre redimensionnable. Il est écrit en Rust et repose sur le framework GUI Freya.
L'idée est simple : vous demandez à l'assistant (en langage naturel) d'écrire du code, il génère le code et le place directement dans l'éditeur, puis vous pouvez l'exécuter dans le terminal intégré en un seul clic.
- 💬 Panneau de chat IA — discuter avec un LLM adossé à l'API Albert du gouvernement français (point de terminaison compatible OpenAI).
- ✍️ Éditeur de code — un éditeur propulsé par tree-sitter avec coloration syntaxique et thème sombre.
- 🖥️ Terminal intégré — un terminal
bashcomplet rendu dans l'application. - 🚀 Exécuter le code — exécuter ce qui se trouve dans l'éditeur dans le terminal.
- 🌐 Prise en charge multi-langages — Python, Rust, JavaScript, TypeScript, HTML, CSS, C, C++, Java et Go.
Parce qu'il s'agit d'un projet inachevé, veuillez prendre connaissance des limitations suivantes avant d'essayer de le compiler ou de l'exécuter :
- Compilation non garantie. Le code repose sur un ensemble spécifique de
dépendances d'espace de travail et de fonctionnalités Freya qui peuvent ne
pas se résoudre dans un checkout autonome. Il n'y a ni
Cargo.lockni racine d'espace de travail validés. - Aucune gestion de clé API.
L'application lit(Résolu — voir la section Configuration : la clé peut être fournie via l'environnement, un fichier de configuration, ou le panneau Paramètres, avec validation au démarrage, gestion des erreurs, nouvelle tentative et délai d'attente.)ALBERT_API_KEYdepuis l'environnement, mais il n'y a aucune configuration, validation ou intégration progressive. - Hypothèses de plateforme. Le terminal lance
bashet plusieurs commandes d'exécution utilisent des chemins Unix (/tmp/...,xdg-open,python3,gcc,g++,javac,go,node,npx). Celles-ci ne fonctionneront pas sur Windows sans adaptation. - Interface non testée. Les panneaux de chat, d'éditeur et de terminal sont reliés entre eux mais n'ont pas été exercés de bout en bout.
- Aucun test, CI ou packaging. Il n'y a pas de suite de tests, de pipeline de construction ni de configuration de publication.
En bref : il s'agit d'un prototype / preuve de concept, pas d'un produit prêt à être distribué.
coding-assistant/
├── Cargo.toml # Manifeste du paquet et dépendances
├── src/
│ └── main.rs # Application entière (prototype en un seul fichier)
└── agent_memory.json # Mémoire de session de l'agent (ne fait pas partie de l'app)
Toute l'application vit actuellement dans un seul fichier src/main.rs.
- Une chaîne d'outils Rust récente (le manifeste cible
edition = "2024"). - Le framework Freya et ses dépendances natives (voir la documentation Freya pour la configuration de la plateforme).
- Une clé API Albert (service IA du gouvernement français) exportée sous le
nom
ALBERT_API_KEY. - Les environnements d'exécution des langages que vous souhaitez exécuter (Python, Node, GCC/G++, JDK, Go, Rust, etc.).
# Compiler le projet
cargo build
# Exécuter l'application
cargo run
⚠️ Comme indiqué ci-dessus, une compilation propre n'est actuellement pas garantie en raison de l'état inachevé du projet.
- Chat — Saisissez un message dans la zone de saisie et appuyez sur
Envoyer. Le message est envoyé à l'API Albert via
rig-core. - Détection du langage — L'application devine le langage de programmation à partir de votre message (par ex. « écris une fonction Python » → Python).
- Génération de code — Si votre message demande du code, la réponse de l'assistant est analysée pour en extraire les blocs de code, qui sont insérés dans l'éditeur. Le chat n'affiche qu'une confirmation, pas le code lui-même.
- Exécution — Appuyez sur Exécuter le code pour écrire le contenu de l'éditeur dans un fichier temporaire et l'exécuter dans le terminal intégré à l'aide de la commande du langage détecté.
- Effacer l'éditeur — Saisir « clear editor » (ou une formulation équivalente) vide l'éditeur localement sans appeler l'IA.
| Bouton | Action |
|---|---|
| Paramètres | Ouvre le panneau de configuration de la clé API. |
| Effacer le chat | Vide l'historique du chat. |
| Réinitialiser le terminal | Tue et relance le shell bash intégré. |
| Exécuter le code | Exécute le contenu de l'éditeur dans le terminal. |
| Langage | Extension | Commande d'exécution (Unix) |
|---|---|---|
| Python | .py |
python3 <fichier> |
| Rust | .rs |
rustc <fichier> -o /tmp/main_rs && /tmp/main_rs |
| JavaScript | .js |
node <fichier> |
| TypeScript | .ts |
npx ts-node <fichier> |
| HTML | .html |
xdg-open <fichier> |
| CSS | .css |
(rien à exécuter) |
| C | .c |
gcc <fichier> -o /tmp/main_c && /tmp/main_c |
| C++ | .cpp |
g++ <fichier> -o /tmp/main_cpp && /tmp/main_cpp |
| Java | .java |
javac <fichier> && java Main |
| Go | .go |
go run <fichier> |
Le point de terminaison IA et le modèle sont codés en dur en haut de
src/main.rs :
const ALBERT_ENDPOINT: &str = "https://albert.api.etalab.gouv.fr/v1";
const ALBERT_MODEL: &str = "deepseek-v4-flash";La clé API peut être fournie par trois canaux, par ordre de priorité :
- Variable d'environnement
ALBERT_API_KEY(priorité la plus élevée). - Fichier de configuration dans le répertoire de configuration de la
plateforme :
- Linux :
~/.config/rustagent/config.toml - macOS :
~/Library/Application Support/rustagent/config.toml - Windows :
%APPDATA%\rustagent\config.toml
- Linux :
- Panneau Paramètres — le bouton Paramètres de la barre d'outils ouvre un panneau où vous pouvez saisir et enregistrer la clé dans le fichier de configuration.
Au démarrage, l'application valide la clé et affiche un avertissement clair si elle est manquante ou invalide. Les erreurs d'API sont classées (authentification, limite de débit, réseau, délai d'attente, modèle) avec des messages adaptés, et les échecs transitoires sont automatiquement réessayés avec un backoff progressif. Chaque requête dispose d'un délai d'attente de 60 secondes pour que l'interface ne se bloque jamais indéfiniment.
Principales crates utilisées :
- freya — framework GUI (avec les fonctionnalités
markdown,terminal,remote-assetetcode-editor). - rig-core — bibliothèque cliente LLM (fournisseur compatible OpenAI).
- tokio — runtime asynchrone.
- ropey — structure de données rope qui sous-tend l'éditeur.
- tree-sitter-* — grammaires et requêtes de coloration pour chaque langage.
- rio-vt — émulation de terminal virtuel.
- serde / serde_json — sérialisation.
- thiserror — types d'erreur.
- Faire compiler proprement le projet dans un checkout autonome.
- Ajouter une racine d'espace de travail /
Cargo.locket épingler les versions des dépendances. - Prise en charge multiplateforme du terminal et des commandes d'exécution (Windows/macOS).
- Configuration correcte de la clé API et gestion des erreurs.
- Tests et CI.
- Packaging / builds de publication.
- Validation de bout en bout du flux chat → éditeur → terminal.
Ce projet est distribué sous la licence MIT.
Copyright (c) 2026 Salvatore DI DiO
Voir le fichier LICENSE pour le texte complet de la licence.
Il s'agit d'un projet inachevé. Il est fourni à titre de référence et d'expérimentation uniquement. Ne vous y fiez pas pour une utilisation en production.
Ce code a été développé avec l'assistance de DeepseekFlash, un modèle fourni via l'API Albert de la DINUM et CsAgent