use axum::http::HeaderMap;
use serde_json::{Value, json};
use crate::adapters::{
AdapterOutcome, CLAUDE_CODE_PAYLOAD_EXTRACTOR, ClassificationRules, classify,
};
use crate::model::{AgentKind, NormalizedEvent};
pub(crate) fn adapt(payload: Value, headers: &HeaderMap) -> AdapterOutcome {
let events = classify(
&payload,
headers,
&CLAUDE_CODE_PAYLOAD_EXTRACTOR,
&ClassificationRules {
kind: AgentKind::ClaudeCode,
agent_start: &["SessionStart", "sessionStart", "session_start"],
agent_end: &["SessionEnd", "sessionEnd", "session_end"],
subagent_start: &["SubagentStart", "subagentStart"],
subagent_end: &["SubagentStop", "subagentStop", "SubagentEnd"],
tool_start: &["PreToolUse", "preToolUse"],
tool_end: &[
"PostToolUse",
"postToolUse",
"PostToolUseFailure",
"postToolUseFailure",
"ToolUseFailed",
"toolUseFailed",
"PermissionDenied",
"permissionDenied",
],
},
);
let response = match events.first() {
Some(NormalizedEvent::ToolStarted(_)) => json!({
"continue": true,
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "allow"
}
}),
_ => json!({ "continue": true }),
};
AdapterOutcome { events, response }
}