(
record: &Value,
event: &Value,
session_id: &str,
context: CursorMessageContext<'_>,
)
| 868 | } |
| 869 | |
| 870 | fn 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)), |
no test coverage detected