MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / parse_event

Method parse_event

atomic-agent/src/hooks/kilo.rs:190–336  ·  view source on GitHub ↗
(&self, hook_type: HookType, input: &[u8])

Source from the content-addressed store, hash-verified

188 }
189
190 fn parse_event(&self, hook_type: HookType, input: &[u8]) -> AgentResult<TurnEvent> {
191 if input.is_empty() {
192 return Err(AgentError::HookInputEmpty {
193 agent: self.name().to_string(),
194 hook_type: hook_type.as_str().to_string(),
195 });
196 }
197
198 // Preserve raw JSON for debugging and downstream use
199 let raw_json: serde_json::Value =
200 serde_json::from_slice(input).map_err(|e| AgentError::HookParseFailed {
201 agent: self.name().to_string(),
202 hook_type: hook_type.as_str().to_string(),
203 reason: e.to_string(),
204 })?;
205
206 match hook_type {
207 HookType::TurnStart => {
208 let parsed: PromptSubmitInput =
209 serde_json::from_value(raw_json.clone()).map_err(|e| {
210 AgentError::HookParseFailed {
211 agent: self.name().to_string(),
212 hook_type: hook_type.as_str().to_string(),
213 reason: e.to_string(),
214 }
215 })?;
216
217 let mut event =
218 TurnEvent::new(Self::extract_session_id(parsed.session_id), hook_type)
219 .with_raw_json(raw_json);
220
221 if let Some(prompt) = parsed.prompt {
222 event = event.with_prompt(prompt);
223 }
224
225 // Store model in raw_json for the orchestrator
226 if let Some(model) = parsed.model {
227 if let Some(ref mut raw) = event.raw_json {
228 if let Some(obj) = raw.as_object_mut() {
229 obj.insert("model".to_string(), serde_json::Value::String(model));
230 }
231 }
232 }
233
234 Ok(event)
235 }
236
237 HookType::TurnEnd => {
238 let parsed: AgentStopInput =
239 serde_json::from_value(raw_json.clone()).map_err(|e| {
240 AgentError::HookParseFailed {
241 agent: self.name().to_string(),
242 hook_type: hook_type.as_str().to_string(),
243 reason: e.to_string(),
244 }
245 })?;
246
247 let mut event =

Calls 10

extract_session_idFunction · 0.85
with_raw_jsonMethod · 0.80
with_promptMethod · 0.80
with_tool_use_idMethod · 0.80
is_emptyMethod · 0.45
nameMethod · 0.45
as_strMethod · 0.45
cloneMethod · 0.45
insertMethod · 0.45
with_tool_nameMethod · 0.45