feat(workstate): résumés de conversation dans le read-model (Lot C backend)
Étend le read-model work-state pour exposer un résumé par conversation (participants, dernier message/activité, compteurs) câblé jusqu'au DTO camelCase de l'état app-tauri. - application : assemblage des résumés de conversation dans le work-state. - app-tauri : DTO camelCase des résumés + exposition dans l'état. Tests verts : application workstate (21), app-tauri dto_agents (21), aucun warning Rust. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -110,6 +110,25 @@ impl application::HandoffProvider for AppHandoffProvider {
|
||||
}
|
||||
}
|
||||
|
||||
/// Implémente [`ConversationLogProvider`](application::ConversationLogProvider) (Lot C)
|
||||
/// en matérialisant un [`FsConversationLog`] ciblant le **project root** courant.
|
||||
///
|
||||
/// Jumeau stateless de [`AppHandoffProvider`] : le read-model work-state est unique
|
||||
/// pour tous les projets, alors que le log est **par project root**
|
||||
/// (`<root>/.ideai/conversations/`). On construit donc un log frais par appel, ciblant
|
||||
/// le bon dossier. Sert de **repli** lecture seule (`last(_, 3)`) aux résumés de
|
||||
/// conversation. Sans état (zéro champ), partagé via un simple `Arc`.
|
||||
struct AppConversationLogProvider;
|
||||
|
||||
impl application::ConversationLogProvider for AppConversationLogProvider {
|
||||
fn conversation_log_for(
|
||||
&self,
|
||||
root: &domain::project::ProjectPath,
|
||||
) -> Option<Arc<dyn domain::ConversationLog>> {
|
||||
Some(Arc::new(FsConversationLog::new(root)) as Arc<dyn domain::ConversationLog>)
|
||||
}
|
||||
}
|
||||
|
||||
/// Implémente [`ProviderSessionProvider`](application::ProviderSessionProvider) (lot
|
||||
/// P8b) en matérialisant un [`FsProviderSessionStore`] ciblant le **project root** du
|
||||
/// lancement en cours.
|
||||
@ -1031,12 +1050,22 @@ impl AppState {
|
||||
Arc::clone(&terminal_sessions),
|
||||
Arc::clone(&structured_sessions),
|
||||
));
|
||||
let get_project_work_state = Arc::new(GetProjectWorkState::new(
|
||||
Arc::clone(&contexts_port),
|
||||
Arc::clone(&live_sessions),
|
||||
Arc::clone(&input_mediator),
|
||||
queue_snapshot,
|
||||
));
|
||||
// Lot C — résumés de conversation best-effort : on câble les sources par
|
||||
// project root (handoff = primaire, log = repli `last(_, 3)`). Lecture seule,
|
||||
// aucune persistance ; un échec de preview ne bloque ni live/busy ni tickets.
|
||||
let get_project_work_state = Arc::new(
|
||||
GetProjectWorkState::new(
|
||||
Arc::clone(&contexts_port),
|
||||
Arc::clone(&live_sessions),
|
||||
Arc::clone(&input_mediator),
|
||||
queue_snapshot,
|
||||
)
|
||||
.with_conversation_sources(
|
||||
Arc::new(AppHandoffProvider) as Arc<dyn application::HandoffProvider>,
|
||||
Arc::new(AppConversationLogProvider)
|
||||
as Arc<dyn application::ConversationLogProvider>,
|
||||
),
|
||||
);
|
||||
|
||||
// --- Limites de session des agents (ARCHITECTURE §21, LS7) ---
|
||||
// Service pur-ports « détecter → planifier → reprendre » câblé sur l'existant :
|
||||
|
||||
Reference in New Issue
Block a user