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

Function event_message

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

Source from the content-addressed store, hash-verified

804}
805
806fn event_message(
807 record: &Value,
808 event: &Value,
809 session_id: &str,
810 ordinal: i64,
811 context: CursorMessageContext<'_>,
812) -> Option<SessionMessageRecord> {
813 let role = record
814 .get("role")
815 .and_then(Value::as_str)
816 .filter(|role| !role.is_empty())?;
817 let message = record.get("message").unwrap_or(record);
818 let content = message.get("content").unwrap_or(message);
819 if content_is_only_subagent_dispatch(content) {
820 return None;
821 }
822 let (text, tool_names) = content_storage_text_and_tools(
823 content,
824 message
825 .get("tool_calls")
826 .or_else(|| record.get("tool_calls")),
827 );
828 if text.trim().is_empty() {
829 return None;
830 }
831
832 let message_id = record
833 .get("id")
834 .or_else(|| message.get("id"))
835 .and_then(Value::as_str)
836 .filter(|id| !id.is_empty())
837 .map_or_else(
838 || format!("{session_id}:{ordinal}"),
839 std::string::ToString::to_string,
840 );
841 let model = cursor_record_message_model(record, message)
842 .or_else(|| context.model_fallback.map(str::to_string))
843 .or_else(|| cursor_model_string(event));
844
845 Some(SessionMessageRecord {
846 provider: "cursor".to_string(),
847 message_id,
848 session_id: session_id.to_string(),
849 role: role.to_string(),
850 timestamp: record_timestamp(record)
851 .or_else(|| record_timestamp(event))
852 .or(context.derived_timestamp),
853 ordinal,
854 text,
855 kind: content_kind(content).map(str::to_string),
856 model,
857 tool_names: (!tool_names.is_empty()).then(|| tool_names.join(",")),
858 source_path: Some(context.transcript_path.to_string_lossy().to_string()),
859 source_offset: Some(context.source_offset),
860 metadata_json: serde_json::to_string(&message_metadata(
861 record,
862 message,
863 context.event_cwd,

Callers 1

parse_cursor_jsonlFunction · 0.85

Calls 8

cursor_model_stringFunction · 0.85
record_timestampFunction · 0.85
content_kindFunction · 0.85
message_metadataFunction · 0.70
is_emptyMethod · 0.45

Tested by

no test coverage detected