Merge PR #2971: expose matched approval rule metadata
Verified on scratch/v0.8.59-clean-train-20260612: build and hooks/core tests green.
This commit is contained in:
@@ -1263,7 +1263,7 @@ impl Runtime {
|
||||
.await;
|
||||
self.hooks
|
||||
.emit(HookEvent::GenericEventFrame {
|
||||
frame: error_frame.clone(),
|
||||
frame: Box::new(error_frame.clone()),
|
||||
})
|
||||
.await;
|
||||
return Ok(json!({
|
||||
@@ -1300,7 +1300,7 @@ impl Runtime {
|
||||
if let Some(frame) = maybe_approval_frame {
|
||||
self.hooks
|
||||
.emit(HookEvent::GenericEventFrame {
|
||||
frame: frame.clone(),
|
||||
frame: Box::new(frame.clone()),
|
||||
})
|
||||
.await;
|
||||
events.push(event_frame_payload(&frame));
|
||||
@@ -1324,7 +1324,7 @@ impl Runtime {
|
||||
};
|
||||
self.hooks
|
||||
.emit(HookEvent::GenericEventFrame {
|
||||
frame: start_frame.clone(),
|
||||
frame: Box::new(start_frame.clone()),
|
||||
})
|
||||
.await;
|
||||
self.hooks
|
||||
@@ -1348,7 +1348,7 @@ impl Runtime {
|
||||
};
|
||||
self.hooks
|
||||
.emit(HookEvent::GenericEventFrame {
|
||||
frame: result_frame.clone(),
|
||||
frame: Box::new(result_frame.clone()),
|
||||
})
|
||||
.await;
|
||||
self.hooks
|
||||
@@ -1380,7 +1380,7 @@ impl Runtime {
|
||||
};
|
||||
self.hooks
|
||||
.emit(HookEvent::GenericEventFrame {
|
||||
frame: error_frame.clone(),
|
||||
frame: Box::new(error_frame.clone()),
|
||||
})
|
||||
.await;
|
||||
self.hooks
|
||||
@@ -1426,18 +1426,18 @@ impl Runtime {
|
||||
};
|
||||
self.hooks
|
||||
.emit(HookEvent::GenericEventFrame {
|
||||
frame: EventFrame::McpStartupUpdate {
|
||||
frame: Box::new(EventFrame::McpStartupUpdate {
|
||||
update: codewhale_protocol::McpStartupUpdateEvent {
|
||||
server_name: update.server_name,
|
||||
status,
|
||||
},
|
||||
},
|
||||
}),
|
||||
})
|
||||
.await;
|
||||
}
|
||||
self.hooks
|
||||
.emit(HookEvent::GenericEventFrame {
|
||||
frame: EventFrame::McpStartupComplete {
|
||||
frame: Box::new(EventFrame::McpStartupComplete {
|
||||
summary: codewhale_protocol::McpStartupCompleteEvent {
|
||||
ready: summary.ready.clone(),
|
||||
failed: summary
|
||||
@@ -1450,7 +1450,7 @@ impl Runtime {
|
||||
.collect(),
|
||||
cancelled: summary.cancelled.clone(),
|
||||
},
|
||||
},
|
||||
}),
|
||||
})
|
||||
.await;
|
||||
summary
|
||||
|
||||
+16
-1
@@ -73,7 +73,7 @@ pub enum HookEvent {
|
||||
/// mapping it to a more specific variant.
|
||||
GenericEventFrame {
|
||||
/// The raw event frame to forward.
|
||||
frame: EventFrame,
|
||||
frame: Box<EventFrame>,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -334,6 +334,21 @@ mod tests {
|
||||
assert_eq!(encoded["payload"]["exit_code"], 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn generic_event_frame_serialization_is_unchanged_by_boxing() {
|
||||
let event = HookEvent::GenericEventFrame {
|
||||
frame: Box::new(EventFrame::ResponseStart {
|
||||
response_id: "resp-1".to_string(),
|
||||
}),
|
||||
};
|
||||
|
||||
let encoded = event.to_json();
|
||||
|
||||
assert_eq!(encoded["type"], "generic_event_frame");
|
||||
assert_eq!(encoded["frame"]["event"], "response_start");
|
||||
assert_eq!(encoded["frame"]["response_id"], "resp-1");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn jsonl_sink_creates_parent_dir_and_appends_events() {
|
||||
let root = unique_temp_dir("jsonl_sink");
|
||||
|
||||
Reference in New Issue
Block a user