MCPcopy Create free account
hub / github.com/AI45Lab/Code / fire

Method fire

core/src/ahp/executor.rs:823–877  ·  view source on GitHub ↗
(&self, event: &HookEvent)

Source from the content-addressed store, hash-verified

821#[async_trait]
822impl HookExecutor for AhpHookExecutor {
823 async fn fire(&self, event: &HookEvent) -> HookResult {
824 // Record this event (updates activity timestamp and counter)
825 self.record_event();
826 self.record_hook_event_state(event);
827
828 // Map to AHP event
829 let ahp_event = match self.map_event(event) {
830 Some(e) => e,
831 None => {
832 // Event not mapped to AHP, allow by default
833 debug!("Event {:?} not mapped to AHP, allowing", event.event_type());
834 return HookResult::Continue(None);
835 }
836 };
837
838 // Check if this is a blocking event
839 let is_blocking = self.is_blocking_event(event.event_type());
840
841 if is_blocking {
842 // Flush any pending batch before sending blocking event
843 if self.batch_enabled {
844 self.flush_batch().await;
845 }
846
847 // Send event and wait for decision
848 match self.client.send_event_full(&ahp_event).await {
849 Ok(decision) => {
850 let decision_payload = serde_json::to_value(decision).unwrap_or_default();
851 debug!(
852 "AHP decision for {:?}: {:?}",
853 ahp_event.event_type, decision_payload
854 );
855 self.map_decision(ahp_event.event_type, decision_payload)
856 }
857 Err(e) => {
858 warn!("AHP error: {}, allowing by default", e);
859 HookResult::Continue(None)
860 }
861 }
862 } else if self.batch_enabled {
863 // Batch mode: accumulate non-blocking events
864 self.add_to_batch(ahp_event).await;
865 HookResult::Continue(None)
866 } else {
867 // Fire-and-forget for non-blocking events.
868 let client = self.client.clone();
869 let event = ahp_event;
870 tokio::spawn(async move {
871 if let Err(e) = client.send_event_full(&event).await {
872 warn!("AHP fire-and-forget error: {}", e);
873 }
874 });
875 HookResult::Continue(None)
876 }
877 }
878
879 async fn record_agent_event(&self, event: &AgentEvent, run_id: &str, session_id: &str) {
880 self.publish_agent_event(event, run_id, session_id).await;

Callers

nothing calls this directly

Calls 9

map_eventMethod · 0.80
is_blocking_eventMethod · 0.80
event_typeMethod · 0.80
flush_batchMethod · 0.80
map_decisionMethod · 0.80
add_to_batchMethod · 0.80
record_eventMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected