use std::path::Path;
pub fn leave(raw_payload: &str) {
let Some(p) = crate::hook::parse_input(raw_payload) else {
return;
};
if p.is_post || p.command.trim().is_empty() {
return;
}
let is_probe = std::env::var("TERMAXA_HOOK_PROBE").as_deref() == Ok("1")
|| p.session.as_deref() == Some(crate::hook::PROBE_SESSION);
if is_probe {
return;
}
let Ok(paths) = crate::paths::resolve_from(Path::new(&p.cwd)) else {
return;
};
let (ts_ms, ts) = crate::audit::now();
let line = serde_json::json!({
"ts_ms": ts_ms,
"ts": ts,
"session": p.session,
"call_id": p.call_id,
"command": p.command.chars().take(200).collect::<String>(),
"dialect": format!("{:?}", p.dialect).to_lowercase(),
});
let path = paths.state_dir.join("logs").join("seen.jsonl");
if let Ok(mut f) = std::fs::OpenOptions::new()
.create(true)
.append(true)
.open(&path)
{
use std::io::Write as _;
let _ = writeln!(f, "{line}");
}
}