fix(daemon): reconcile transcript projections
This commit is contained in:
@@ -21,7 +21,7 @@ use tokio::sync::{broadcast, watch, Mutex};
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::panes::Panes;
|
||||
use crate::projection::{Projection, ProjectionUpdate};
|
||||
use crate::projection::{Projection, ProjectionUpdate, TurnLifecycle};
|
||||
use crate::pty::{pipe_pane_command, PtyBridge};
|
||||
use crate::sidecar::{EventCursor, EventLog, LoggedEvent, SidecarError, SidecarStore};
|
||||
use crate::spawn_history::{RecentDir, SpawnHistory, SpawnHistoryRecord};
|
||||
@@ -396,6 +396,27 @@ impl SessionManager {
|
||||
)))
|
||||
}
|
||||
|
||||
/// Publish a prompt lifecycle transition without adding a synthetic ACP
|
||||
/// event. The prompt route will call this seam in #138.
|
||||
pub async fn apply_acp_turn_lifecycle(
|
||||
&self,
|
||||
id: Uuid,
|
||||
lifecycle: TurnLifecycle,
|
||||
) -> Result<bool, SessionError> {
|
||||
let stream = {
|
||||
let sessions = self.inner.sessions.lock().await;
|
||||
let record = sessions.get(&id).ok_or(SessionError::NotFound(id))?;
|
||||
record.acp_events.clone()
|
||||
};
|
||||
let Some(stream) = stream else {
|
||||
return Ok(false);
|
||||
};
|
||||
let mut stream = stream.lock().await;
|
||||
let projected = stream.projection.turn_lifecycle(lifecycle);
|
||||
let _ = stream.projected_live.send(projected);
|
||||
Ok(true)
|
||||
}
|
||||
|
||||
/// End every adapter child before the daemon exits (#134): each gets
|
||||
/// `session/cancel`, then SIGTERM, concurrently. The sessions stay in
|
||||
/// the map, marked Dead and written through to their sidecars, so what
|
||||
|
||||
Reference in New Issue
Block a user