13 KiB
13 KiB
SaseAgent v1 - TODO
0. Décisions fondatrices
- Choisir SQLite pour la v1
- Valider la structure en workspace Rust
- Valider le découpage initial des crates
- Définir les contraintes de code globales
- Ajouter les règles de code au
README.mdracine - 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
- Créer le workspace
sasecodingagent-project - Ajouter la crate binaire
sca-app - Ajouter la crate lib
sca-core - Ajouter la crate lib
sca-infra - Ajouter la crate lib
sca-ia - Ajouter la crate
sca-tests - Définir proprement les dépendances entre crates
- Mettre en place un
Cargo.tomlworkspace propre - Ajouter une configuration de build commune
- Ajouter les dépendances de base (
tokio,tracing,serde, etc.) - Ajouter
clippy.toml - Ajouter
rustfmt.toml - Ajouter les scripts de contrôle qualité
- Formaliser la politique d’export public via
src/lib.rs - Vérifier que chaque crate exporte son API publique via
mod+pub use - Interdire les fuites d’API publiques accidentelles
- Nettoyer les dépendances bannies si encore présentes dans les
Cargo.toml
2. Règles de code et qualité
2.1 Contraintes globales
- Interdire
? - Interdire
unwrap/expect - Imposer l’error handling explicite
- Bannir
thiserror - Bannir
anyhow - Interdire
mod.rs - Rendre
tracingobligatoire - Activer
#![deny(unreachable_pub)] - Activer
#![warn(missing_docs)] - Documenter les hard constraints dans le
README.md - Documenter les règles détaillées dans
docs/coding_rules.md - Définir la stratégie “single error type or minimal error types”
- Définir la convention de spans
tracing - Définir la convention de structured fields
tracing - Définir la convention de logs d’erreurs
- Définir la convention de nommage des erreurs par crate
2.2 Contrôles automatiques
- Ajouter un script pour détecter
? - Ajouter un script pour détecter
unwrap/expect - Ajouter un script pour détecter
thiserror/anyhow - Ajouter un script pour détecter
mod.rs - Ajouter un script pour contrôler les exports publics basiques
- Ajouter un script global
run_quality_checks.sh - Rendre tous les scripts exécutables dans le dépôt
- Vérifier les scripts sur Linux
- Ajouter
cargo fmt --all --checkau 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 d’erreurs 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 d’environnement 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 l’interface 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 l’ingestion depuis un répertoire local
- Implémenter l’ingestion 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 d’une 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 d’exécution
- Implémenter la boucle d’itération
- Définir les conditions d’arrê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 l’historique d’ité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é d’un 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 d’itération
- Générer un résumé de tâche
- Conserver les décisions d’architecture
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 d’ité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_commandfonctionne 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