fix(agent): adapters Claude/Codex au format CLI réel (spikes S1/S2 résolus)

Formats vérifiés sur les vraies CLI le 2026-06-09 :
- Claude (claude -p … --output-format stream-json --verbose ; reprise --resume
  <session_id>) : parse system/init (session_id), ignore rate_limit_event +
  types inconnus, assistant.content[] ITÉRÉ (fix multi-blocs), result→Final.
  Flag --verbose ajouté à build_spawn_line.
- Codex (codex exec --json --skip-git-repo-check ; reprise codex exec resume
  <thread_id>) : thread.started→conversation_id, item.completed/agent_message
  →Final, autres items→ToolActivity, turn.*/inconnu ignorés.

parse_event émet désormais Vec<ReplyEvent> (multi-blocs) ; drain aplatit.
Scripts fake CLI passés aux lignes réelles. Tests : session 46 + intégration,
workspace vert.

À vérifier à l'intégration (D3) : reprise Codex (ordre d'args), et lancement
Codex avec --sandbox workspace-write + approbation non bloquante (hors parsing).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-09 18:34:03 +02:00
parent 751d94dd89
commit f104682477
4 changed files with 437 additions and 236 deletions

View File

@ -7,11 +7,9 @@
//! Disponible hors `cfg(test)` (mais sous une porte `pub`) pour que QA puisse
//! réutiliser le harnais et le fake CLI dans des tests d'intégration ultérieurs.
//!
//! > Ce qui dépend du **format réel non vérifié** (spikes S1/S2) : les *scripts*
//! > de lignes JSON fournis aux tests reproduisent le **schéma SUPPOSÉ** documenté
//! > dans `claude::parse_event` / `codex::parse_event`. Quand S1/S2 confirmeront le
//! > vrai format, ces scripts (et le parser) seront ajustés ; la machinerie et le
//! > harnais, eux, restent valides.
//! > Les *scripts* de lignes JSON fournis aux tests reproduisent le **format RÉEL
//! > vérifié 2026-06-09** (spikes S1/S2 résolus), documenté dans `claude::parse_event`
//! > / `codex::parse_event`. La machinerie et le harnais sont indépendants du format.
use std::io::Write;
use std::path::PathBuf;