v0.1.0 skel

This commit is contained in:
2026-04-07 12:25:12 +02:00
commit ed38e73949
57 changed files with 981 additions and 0 deletions

450
TODOLIST.md Normal file
View File

@@ -0,0 +1,450 @@
# SaseAgent v1 - TODO
## 0. Décisions fondatrices
- [x] Choisir SQLite pour la v1
- [x] Valider la structure en workspace Rust
- [x] Valider le découpage initial des crates
- [x] Définir les contraintes de code globales
- [x] Ajouter les règles de code au `README.md` racine
- [x] Ajouter `docs/coding_rules.md`
- [ ] Définir les rôles providers v1
- [ ] Définir les outils v1 autorisés
- [ ] Définir les policies minimales de sécurité
---
## 1. Workspace et structure Rust
- [x] Créer le workspace `sasecodingagent-project`
- [x] Ajouter la crate binaire `sca-app`
- [x] Ajouter la crate lib `sca-core`
- [x] Ajouter la crate lib `sca-infra`
- [x] Ajouter la crate lib `sca-ia`
- [x] Ajouter la crate `sca-tests`
- [ ] Définir proprement les dépendances entre crates
- [x] Mettre en place un `Cargo.toml` workspace propre
- [x] Ajouter une configuration de build commune
- [x] Ajouter les dépendances de base (`tokio`, `tracing`, `serde`, etc.)
- [x] Ajouter `clippy.toml`
- [x] Ajouter `rustfmt.toml`
- [x] Ajouter les scripts de contrôle qualité
- [x] Formaliser la politique dexport public via `src/lib.rs`
- [x] Vérifier que chaque crate exporte son API publique via `mod` + `pub use`
- [x] Interdire les fuites dAPI publiques accidentelles
- [x] Nettoyer les dépendances bannies si encore présentes dans les `Cargo.toml`
---
## 2. Règles de code et qualité
### 2.1 Contraintes globales
- [x] Interdire `?`
- [x] Interdire `unwrap` / `expect`
- [x] Imposer lerror handling explicite
- [x] Bannir `thiserror`
- [x] Bannir `anyhow`
- [x] Interdire `mod.rs`
- [x] Rendre `tracing` obligatoire
- [x] Activer `#![deny(unreachable_pub)]`
- [x] Activer `#![warn(missing_docs)]`
- [x] Documenter les hard constraints dans le `README.md`
- [x] Documenter les règles détaillées dans `docs/coding_rules.md`
- [x] Définir la stratégie “single error type or minimal error types”
- [x] Définir la convention de spans `tracing`
- [x] Définir la convention de structured fields `tracing`
- [x] Définir la convention de logs derreurs
- [x] Définir la convention de nommage des erreurs par crate
### 2.2 Contrôles automatiques
- [x] Ajouter un script pour détecter `?`
- [x] Ajouter un script pour détecter `unwrap` / `expect`
- [x] Ajouter un script pour détecter `thiserror` / `anyhow`
- [x] Ajouter un script pour détecter `mod.rs`
- [x] Ajouter un script pour contrôler les exports publics basiques
- [x] Ajouter un script global `run_quality_checks.sh`
- [x] Rendre tous les scripts exécutables dans le dépôt
- [ ] Vérifier les scripts sur Linux
- [ ] Ajouter `cargo fmt --all --check` au flux qualité
- [ ] Ajouter `cargo clippy --workspace --all-targets --all-features -- -D warnings`
- [ ] Ajouter `cargo check --workspace`
- [ ] Ajouter plus tard une CI pour exécuter les checks automatiquement
---
## 3. Core domain
### 3.1 Types métier
- [ ] Définir `Project`
- [ ] Définir `Task`
- [ ] Définir `TaskDependency`
- [ ] Définir `Iteration`
- [ ] Définir `ActionLog`
- [ ] Définir `KnowledgeEntry`
- [ ] Définir `KnowledgeChunk`
- [ ] Définir `Provider`
- [ ] Définir `ProviderBinding`
- [ ] Définir `PolicyProfile`
- [ ] Définir `ContextProfile`
### 3.2 Enums métier
- [ ] Définir `TaskStatus`
- [ ] Définir `IterationStatus`
- [ ] Définir `ActionKind`
- [ ] Définir `KnowledgeKind`
- [ ] Définir `ProviderKind`
- [ ] Définir `ProviderRole`
- [ ] Définir `ToolKind`
### 3.3 Payloads structurés
- [ ] Définir `ThinkingRequest`
- [ ] Définir `ThinkingResult`
- [ ] Définir `ToolCall`
- [ ] Définir `ToolResult`
- [ ] Définir `ProviderRequest`
- [ ] Définir `ProviderResponse`
- [ ] Définir `ContextAssembly`
- [ ] Définir `CommandSpec`
- [ ] Définir `CommandResult`
### 3.4 Erreurs
- [ ] Définir les erreurs métier globales ou par domaine
- [ ] Définir une stratégie derreurs cohérente entre crates
- [ ] Définir les erreurs publiques minimales par crate
- [ ] Définir la convention de conversion / propagation manuelle des erreurs
---
## 4. Stockage SQLite
### 4.1 Schéma
- [ ] Définir les tables SQLite
- [ ] Définir les index nécessaires
- [ ] Définir la stratégie dévolution du schéma
### 4.2 Migrations
- [ ] Créer les migrations initiales
- [ ] Ajouter la table `projects`
- [ ] Ajouter la table `tasks`
- [ ] Ajouter la table `task_dependencies`
- [ ] Ajouter la table `iterations`
- [ ] Ajouter la table `action_logs`
- [ ] Ajouter la table `knowledge_entries`
- [ ] Ajouter la table `knowledge_chunks`
- [ ] Ajouter la table `providers`
- [ ] Ajouter la table `provider_bindings`
- [ ] Ajouter la table `policy_profiles`
- [ ] Ajouter la table `context_profiles`
### 4.3 Repositories
- [ ] Implémenter le repository `projects`
- [ ] Implémenter le repository `tasks`
- [ ] Implémenter le repository `iterations`
- [ ] Implémenter le repository `action_logs`
- [ ] Implémenter le repository `knowledge_entries`
- [ ] Implémenter le repository `knowledge_chunks`
- [ ] Implémenter le repository `providers`
- [ ] Implémenter le repository `provider_bindings`
- [ ] Implémenter le repository `policy_profiles`
- [ ] Implémenter le repository `context_profiles`
---
## 5. Policies et sécurité
### 5.1 Fichiers
- [ ] Implémenter la résolution sécurisée des chemins
- [ ] Interdire les sorties hors workspace
- [ ] Gérer les chemins relatifs
- [ ] Définir la policy symlink
### 5.2 Outils
- [ ] Définir `ToolPolicy`
- [ ] Définir quels outils sont autorisés par défaut
- [ ] Définir les restrictions par projet
### 5.3 Commandes
- [ ] Définir `CommandPolicy`
- [ ] Définir la whitelist initiale des programmes
- [ ] Définir les timeouts
- [ ] Définir les limites stdout/stderr
- [ ] Définir les variables denvironnement autorisées
### 5.4 Providers
- [ ] Définir `ProviderPolicy`
- [ ] Définir quels providers sont autorisés par rôle
- [ ] Définir les contraintes de routage minimales
---
## 6. Tools v1
### 6.1 Navigation
- [ ] Implémenter `ls`
- [ ] Implémenter `tree`
- [ ] Implémenter `pwd_workspace`
- [ ] Implémenter `stat_path`
### 6.2 Lecture
- [ ] Implémenter `read_file`
- [ ] Implémenter `read_file_range`
- [ ] Implémenter `read_multiple_files`
### 6.3 Création / écriture
- [ ] Implémenter `create_dir`
- [ ] Implémenter `create_file`
- [ ] Implémenter `write_file`
- [ ] Implémenter `append_file`
### 6.4 Recherche
- [ ] Implémenter `search_text`
- [ ] Implémenter `search_regex`
- [ ] Implémenter `search_glob`
### 6.5 Modification
- [ ] Implémenter `search_and_replace`
- [ ] Implémenter `replace_range`
- [ ] Implémenter `insert_before`
- [ ] Implémenter `insert_after`
### 6.6 Diff
- [ ] Implémenter `diff_view`
- [ ] Implémenter `compare_text_versions`
### 6.7 Git
- [ ] Implémenter `git_status`
- [ ] Implémenter `git_branch`
- [ ] Implémenter `git_log`
- [ ] Implémenter `git_show`
- [ ] Implémenter `git_diff`
### 6.8 Commandes
- [ ] Implémenter `run_command`
- [ ] Ajouter timeout et capture de sortie
- [ ] Ajouter audit des commandes
### 6.9 Interaction
- [ ] Implémenter `chat_with_user`
- [ ] Implémenter `add_user_note`
---
## 7. Providers et routing
### 7.1 Abstraction provider
- [ ] Définir linterface provider
- [ ] Définir les capacités supportées
- [ ] Définir les types de requêtes/réponses unifiés
### 7.2 Providers v1
- [ ] Implémenter `ollama_chat`
- [ ] Implémenter `ollama_embed`
- [ ] Implémenter `local_regex_search`
- [ ] Implémenter `local_lexical_search`
### 7.3 Registre
- [ ] Implémenter le registre providers
- [ ] Ajouter le chargement depuis le stockage
- [ ] Ajouter la résolution par id
- [ ] Ajouter la résolution par rôle
- [ ] Ajouter un fallback simple
### 7.4 Bindings
- [ ] Ajouter les bindings par projet
- [ ] Ajouter les overrides par tâche
- [ ] Ajouter les overrides par itération
### 7.5 Routing
- [ ] Implémenter le routeur de providers
- [ ] Définir la stratégie de sélection v1
- [ ] Définir la stratégie de fallback v1
---
## 8. Knowledge base / RAG
### 8.1 Modèle
- [ ] Définir `KnowledgeSource`
- [ ] Définir les types de sources
- [ ] Définir les métadonnées de chunking
### 8.2 Ingestion
- [ ] Implémenter lingestion depuis un répertoire local
- [ ] Implémenter lingestion depuis un dépôt git local
- [ ] Filtrer les fichiers non pertinents
- [ ] Gérer les fichiers binaires
- [ ] Gérer les tailles limites
### 8.3 Chunking
- [ ] Implémenter le chunking v1
- [ ] Ajouter overlap simple
- [ ] Stocker les offsets / lignes si possible
### 8.4 Embeddings
- [ ] Générer les embeddings via Ollama
- [ ] Stocker les embeddings
- [ ] Définir un pipeline de réindexation
### 8.5 Recherche
- [ ] Implémenter la recherche lexicale
- [ ] Implémenter la recherche vectorielle
- [ ] Implémenter `kb_search`
- [ ] Définir le format des résultats
- [ ] Ajouter un merge lexical + vectoriel simple
### 8.6 Édition
- [ ] Implémenter `kb_add_entry`
- [ ] Implémenter `kb_update_entry`
- [ ] Implémenter `kb_disable_entry`
- [ ] Implémenter `kb_reindex_source`
---
## 9. Thinking et construction du contexte
### 9.1 Thinking
- [ ] Implémenter `ThinkingRequest`
- [ ] Implémenter `ThinkingResult`
- [ ] Définir les intentions v1
- [ ] Implémenter le premier `thinking_stage`
### 9.2 Context builder
- [ ] Définir `ContextProfile`
- [ ] Construire le contexte système
- [ ] Construire le contexte projet
- [ ] Construire le contexte tâche / itération
- [ ] Construire la mémoire de travail
- [ ] Ajouter les résultats KB
- [ ] Ajouter les dernières actions
- [ ] Ajouter un budget / compaction
### 9.3 Liens tâches / actions / providers
- [ ] Lier une tâche à des rôles providers
- [ ] Lier une itération à des overrides providers
- [ ] Lier une action à un provider effectivement utilisé
- [ ] Historiser quel provider a servi à quelle action
---
## 10. Orchestrateur
### 10.1 Iteration manager
- [ ] Ouvrir une itération
- [ ] Reprendre une itération
- [ ] Clôturer une itération
- [ ] Marquer une itération en échec
- [ ] Résumer une itération
### 10.2 Action dispatcher
- [ ] Dispatcher les actions outils
- [ ] Dispatcher les actions providers
- [ ] Persister toutes les actions
- [ ] Normaliser les résultats
### 10.3 Task progression
- [ ] Calculer létat de progression dune tâche
- [ ] Gérer les dépendances
- [ ] Marquer une tâche `Done`
- [ ] Marquer une tâche `Blocked`
- [ ] Déterminer la prochaine tâche exécutable
### 10.4 Boucle dexécution
- [ ] Implémenter la boucle ditération
- [ ] Définir les conditions darrêt
- [ ] Ajouter les limites de sécurité
- [ ] Gérer les erreurs et reprises partielles
---
## 11. API / chat
### 11.1 Projets
- [ ] Créer un projet
- [ ] Lister les projets
- [ ] Lire un projet
- [ ] Mettre à jour un projet
### 11.2 Tâches
- [ ] Créer une tâche
- [ ] Lister les tâches
- [ ] Lire une tâche
- [ ] Mettre à jour le statut
- [ ] Définir les dépendances
- [ ] Définir les provider bindings
### 11.3 Itérations
- [ ] Démarrer une itération
- [ ] Reprendre une itération
- [ ] Arrêter une itération
- [ ] Afficher lhistorique ditération
### 11.4 Chat
- [ ] Envoyer un message utilisateur
- [ ] Recevoir une réponse agent
- [ ] Déclencher une itération depuis le chat
### 11.5 KB
- [ ] Ajouter une entrée KB
- [ ] Modifier une entrée KB
- [ ] Rechercher dans la KB
- [ ] Lancer une ingestion
- [ ] Lancer une réindexation
### 11.6 Providers
- [ ] Ajouter un provider
- [ ] Lister les providers
- [ ] Vérifier la santé dun provider
- [ ] Associer un provider à un rôle
### 11.7 Logs / diagnostics
- [ ] Lister les actions récentes
- [ ] Lister les erreurs récentes
- [ ] Lire la sortie de la dernière commande
- [ ] Lire les derniers diffs
---
## 12. Reprise et stabilisation
### 12.1 Résumés
- [ ] Générer un résumé de fin ditération
- [ ] Générer un résumé de tâche
- [ ] Conserver les décisions darchitecture
### 12.2 Reprise
- [ ] Recharger la mémoire de travail
- [ ] Réinjecter le bon contexte
- [ ] Reprendre une tâche sur plusieurs sessions
### 12.3 Audit
- [ ] Journaliser tous les appels outils
- [ ] Journaliser toutes les commandes
- [ ] Journaliser tous les providers appelés
- [ ] Journaliser les échecs
### 12.4 Tests
- [ ] Ajouter des tests unitaires domaine
- [ ] Ajouter des tests de stockage SQLite
- [ ] Ajouter des tests tools fichiers
- [ ] Ajouter des tests commandes
- [ ] Ajouter des tests providers
- [ ] Ajouter des tests KB
- [ ] Ajouter des tests ditération
- [ ] Ajouter des tests de reprise
---
## 13. V1 Definition of Done
- [ ] Un projet peut être créé avec un workspace
- [ ] Une tâche peut être créée et liée à un projet
- [ ] Une itération peut être lancée sur une tâche
- [ ] Le thinking stage produit un plan structuré
- [ ] Le routeur choisit un provider adapté
- [ ] Le contexte est construit dynamiquement
- [ ] Les tools fichiers/recherche/diff fonctionnent
- [ ] `run_command` fonctionne avec policy
- [ ] La KB est éditable et interrogeable
- [ ] Toutes les actions sont persistées
- [ ] Une tâche peut être reprise plus tard
- [ ] Les actions, erreurs et diffs sont consultables