use axum::http::HeaderMap;
use serde_json::{Value, json};
use crate::adapters::{AdapterOutcome, ClassificationRules, classify};
use crate::model::{AgentKind, NormalizedEvent};
pub(crate) fn adapt(payload: Value, headers: &HeaderMap) -> AdapterOutcome {
let events = classify(
&payload,
headers,
&ClassificationRules {
kind: AgentKind::Cursor,
agent_start: &["sessionStart", "session_start"],
agent_end: &["sessionEnd", "session_end", "stop"],
subagent_start: &["subagentStart", "subagent_start"],
subagent_end: &["subagentStop", "subagentEnd", "subagent_stop"],
tool_start: &["preToolUse", "beforeShellExecution", "beforeMCPExecution"],
tool_end: &[
"postToolUse",
"afterShellExecution",
"afterMCPExecution",
"postToolUseFailure",
],
},
);
let response = match events.first() {
Some(NormalizedEvent::ToolStarted(_)) => json!({
"continue": true,
"permission": "allow"
}),
Some(NormalizedEvent::AgentEnded(_)) => json!({ "continue": true }),
_ => json!({ "continue": true }),
};
AdapterOutcome { events, response }
}