MCPcopy Create free account
hub / github.com/ScriptedAlchemy/tracedecay / event_dispatch_messages

Function event_dispatch_messages

src/sessions/cursor.rs:870–941  ·  view source on GitHub ↗
(
    record: &Value,
    event: &Value,
    session_id: &str,
    context: CursorMessageContext<'_>,
)

Source from the content-addressed store, hash-verified

868}
869
870fn event_dispatch_messages(
871 record: &Value,
872 event: &Value,
873 session_id: &str,
874 context: CursorMessageContext<'_>,
875) -> Vec<SessionMessageRecord> {
876 let Some(role) = record
877 .get("role")
878 .and_then(Value::as_str)
879 .filter(|role| !role.is_empty())
880 else {
881 return Vec::new();
882 };
883 let message = record.get("message").unwrap_or(record);
884 let content = message.get("content").unwrap_or(message);
885 let Some(items) = content.as_array() else {
886 return Vec::new();
887 };
888
889 let mut out = Vec::new();
890 for (index, item) in items.iter().enumerate() {
891 let Some(name) = item.get("name").and_then(Value::as_str) else {
892 continue;
893 };
894 if !is_subagent_dispatch_tool(name) {
895 continue;
896 }
897 let Some(text) = dispatch_text(item) else {
898 continue;
899 };
900 let tool_use_id = item
901 .get("id")
902 .and_then(Value::as_str)
903 .filter(|id| !id.is_empty());
904 let message_id = tool_use_id.map_or_else(
905 || {
906 format!(
907 "{}:tool_dispatch:{}:{index}",
908 session_id, context.source_offset
909 )
910 },
911 |id| format!("{session_id}:tool_dispatch:{id}"),
912 );
913 out.push(SessionMessageRecord {
914 provider: "cursor".to_string(),
915 message_id,
916 session_id: session_id.to_string(),
917 role: role.to_string(),
918 timestamp: record_timestamp(record)
919 .or_else(|| record_timestamp(event))
920 .or(context.derived_timestamp),
921 ordinal: context.source_offset.saturating_add(index as i64),
922 text,
923 kind: Some("tool_dispatch".to_string()),
924 model: cursor_dispatch_model(item)
925 .or_else(|| cursor_record_message_model(record, message))
926 .or_else(|| context.model_fallback.map(str::to_string))
927 .or_else(|| cursor_model_string(event)),

Callers 1

parse_cursor_jsonlFunction · 0.85

Calls 9

dispatch_textFunction · 0.85
record_timestampFunction · 0.85
cursor_dispatch_modelFunction · 0.85
cursor_model_stringFunction · 0.85
pushMethod · 0.80
is_emptyMethod · 0.45

Tested by

no test coverage detected