Files
sasecodingagent-project/TODOLIST.md
2026-04-07 12:25:12 +02:00

450 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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