use super::{AgentKind, ScarHit};
pub fn format_additional_context(agent: AgentKind, hits: &[ScarHit]) -> Option<String> {
if hits.is_empty() {
return None;
}
let mut lines = Vec::new();
for hit in hits {
lines.push(format!(
"{}:{} @kizu[{}]: {}",
hit.path.display(),
hit.line_number,
hit.kind,
hit.message,
));
}
let context = lines.join("\n");
let envelope = match agent {
AgentKind::Cursor => serde_json::json!({
"additional_context": context,
}),
AgentKind::Codex => serde_json::json!({
"additionalContext": context,
}),
AgentKind::ClaudeCode | AgentKind::QwenCode | AgentKind::Cline => serde_json::json!({
"hookSpecificOutput": {
"hookEventName": "PostToolUse",
"additionalContext": context,
}
}),
};
Some(serde_json::to_string(&envelope).expect("json serialize"))
}
pub fn format_stop_stderr(hits: &[ScarHit]) -> String {
let mut out = String::from("Unresolved kizu scars:\n");
for hit in hits {
out.push_str(&format!(
" {}:{} @kizu[{}]: {}\n",
hit.path.display(),
hit.line_number,
hit.kind,
hit.message,
));
}
out
}