(root: Option<&Path>, agent: HintAgent, hook_name: &str, event_json: &str)
| 178 | } |
| 179 | |
| 180 | fn record_hook_invoked(root: Option<&Path>, agent: HintAgent, hook_name: &str, event_json: &str) { |
| 181 | let parsed: Value = serde_json::from_str(event_json).unwrap_or(Value::Null); |
| 182 | record_hook_analytics( |
| 183 | root, |
| 184 | "hook_invoked", |
| 185 | serde_json::json!({ |
| 186 | "agent": agent.as_key(), |
| 187 | "hook_name": hook_name, |
| 188 | "hook_event_name": text_field(&parsed, &["hook_event_name", "hookEventName"]), |
| 189 | "session_id": event_session_id(&parsed), |
| 190 | "tool_name": text_field(&parsed, &["tool_name", "toolName", "name"]), |
| 191 | "command": text_field(&parsed, &["command", "cmd", "shell_command"]), |
| 192 | "prompt_category": inferred_prompt_category(&parsed), |
| 193 | "event_cwd": event_cwd_from_parsed(&parsed).map(|cwd| cwd.display().to_string()), |
| 194 | }), |
| 195 | ); |
| 196 | } |
| 197 | |
| 198 | fn inferred_prompt_category(parsed: &Value) -> Option<&'static str> { |
| 199 | let text = prompt_like_text(parsed) |
no test coverage detected