feat(maestro): attach files in structured views
This commit is contained in:
@@ -604,6 +604,36 @@ impl SessionManager {
|
||||
Ok(Some(replay))
|
||||
}
|
||||
|
||||
/// Store attachment bytes for a live structured session.
|
||||
pub async fn store_acp_attachment(
|
||||
&self,
|
||||
id: Uuid,
|
||||
name: &str,
|
||||
bytes: &[u8],
|
||||
) -> Result<Option<std::path::PathBuf>, SessionError> {
|
||||
{
|
||||
let sessions = self.inner.sessions.lock().await;
|
||||
let record = sessions.get(&id).ok_or(SessionError::NotFound(id))?;
|
||||
if !record.is_live_structured() {
|
||||
return Ok(None);
|
||||
}
|
||||
}
|
||||
let dir = self.inner.sidecar.dir().join(format!("{id}.attachments"));
|
||||
tokio::fs::create_dir_all(&dir).await?;
|
||||
let dir = tokio::fs::canonicalize(dir).await?;
|
||||
let path = dir.join(format!("{}-{name}", Uuid::new_v4()));
|
||||
let mut file = tokio::fs::OpenOptions::new()
|
||||
.write(true)
|
||||
.create_new(true)
|
||||
.mode(0o600)
|
||||
.open(&path)
|
||||
.await?;
|
||||
use tokio::io::AsyncWriteExt;
|
||||
file.write_all(bytes).await?;
|
||||
file.sync_all().await?;
|
||||
Ok(Some(path))
|
||||
}
|
||||
|
||||
/// Subscribe to the two projections of a structured session's ACP log.
|
||||
///
|
||||
/// The transcript snapshot and whole reduced state are folded once by the
|
||||
|
||||
Reference in New Issue
Block a user