# L13 — OrchestratorApi **Binôme :** `dev-orchestrator` / `test-orchestrator` **Zones :** `infrastructure/orchestrator`, `application/agent`, `app-tauri` **Dépendances amont :** L0, L1, L6 (`LaunchAgent`/`StopAgent`), L12 (`update_agent_context` peut toucher les skills). ## Objectif Permettre à un **agent orchestrateur** de demander à IdeA de créer/arrêter/mettre à jour un agent — **exactement** comme l'utilisateur via l'UI. L'orchestrateur ne spawne jamais lui-même un process CLI : il **délègue à IdeA**, unique source de vérité du cycle de vie des agents. Cf. ARCHITECTURE §14.3. ## Périmètre (DEV) - **Port `OrchestratorApi`** (adapter *entrant*, driven by file-watcher) : surveille `.ideai/requests//`, désérialise les requêtes JSON, les traduit en appels de use cases. - **Adapter `FsOrchestratorAdapter`** (`infrastructure/orchestrator`) : file-watching (`notify`), parse, dispatch, **supprime le fichier de requête** et **écrit une réponse** (succès/erreur) à côté. - **Actions v1** : `spawn_agent` (→ `LaunchAgent`), `stop_agent` (→ `StopAgent`), `update_agent_context` (réécrit le `.md` de l'agent ± skills). - **Event** : `OrchestratorRequest { requester_id, action }`. - **Schéma requête** : ```json { "action": "spawn_agent", "name": "dev-backend", "profile": "claude-code", "context": "agents/dev-backend.md" } ``` - Le résultat d'un `spawn_agent` est **identique** à un lancement UI : cellule terminal créée, agent inscrit dans l'onglet Agents. - **Composition root** (`app-tauri`) : démarrer le watcher, brancher sur les use cases existants ; arrêt propre à la fermeture. ## Périmètre (TEST) - Désérialisation : requêtes valides → action typée ; requête malformée → réponse d'erreur, **pas de crash**, pas de spawn. - `spawn_agent` invoque `LaunchAgent` avec les bons args (use case mocké) ; idempotence sur double-dépôt du même fichier (traité une fois). - Après traitement : fichier de requête **supprimé**, fichier de réponse écrit avec le bon statut. - `stop_agent` / `update_agent_context` : mappent vers les bons use cases ; cible inexistante → erreur propre. - Watcher : un fichier déposé dans `.ideai/requests//` est détecté (test d'intégration tmpdir + `notify`). ## Definition of Done - `cargo test` (orchestrator/app) verts ; cycle manuel : un agent écrit un fichier de requête `spawn_agent` → un nouvel agent apparaît dans la grille et l'onglet Agents, fichier consommé + réponse écrite. - Garde-fou : l'orchestrateur ne lance **aucun** process directement (vérifié par revue + absence de `ProcessSpawner` dans le chemin orchestrateur). - DoD commune respectée ; zéro régression ; git reste optionnel (rien dans ce lot n'en dépend, §14.4). ## Avancement ⬜ À démarrer. Cadrage figé dans ARCHITECTURE §14.3.