agent-berth 1.1.0

Monitor and resume coding agents
Documentation
use std::io;

use anyhow::{Context, Result};
use serde_json::Value;

use crate::ipc;
use crate::paths::Context as AppContext;

pub fn run(ctx: &AppContext, provider: String) -> Result<()> {
    let payload: Value = serde_json::from_reader(io::stdin().lock())
        .context("notify payload must be a JSON object on stdin")?;
    send_payload(ctx, provider, payload)
}

pub fn send_payload(ctx: &AppContext, provider: String, mut payload: Value) -> Result<()> {
    if provider == "codex"
        && payload.is_object()
        && crate::status::u32_field(&payload, &["pid"])
            .filter(|&pid| pid != 0)
            .is_none()
        && let Some(pid) = crate::process::ancestor_named("codex")
    {
        payload["pid"] = pid.into();
    }
    match ipc::notify(ctx, provider, payload) {
        Ok(()) => Ok(()),
        Err(_) => Ok(()),
    }
}

#[cfg(test)]
#[path = "notify_tests.rs"]
mod tests;