MCPcopy Index your code
hub / github.com/ChrisFeldmeier/OpenCodeRust / trigger_compaction

Function trigger_compaction

crates/opencode-session/src/prompt.rs:2914–2954  ·  view source on GitHub ↗
(session: &mut Session, messages: &[SessionMessage])

Source from the content-addressed store, hash-verified

2912}
2913
2914pub fn trigger_compaction(session: &mut Session, messages: &[SessionMessage]) -> Option<String> {
2915 if !should_compact(messages, 100000) {
2916 return None;
2917 }
2918
2919 let text_content: String = messages
2920 .iter()
2921 .rev()
2922 .take(10)
2923 .flat_map(|m| {
2924 m.parts.iter().filter_map(|p| match &p.part_type {
2925 PartType::Text { text, .. } => Some(text.clone()),
2926 _ => None,
2927 })
2928 })
2929 .collect::<Vec<_>>()
2930 .join("\n");
2931
2932 let summary = format!(
2933 "[Context Compaction Triggered]\nRecent messages summarized:\n{}",
2934 &text_content[..text_content.len().min(500)]
2935 );
2936
2937 // Persist the compaction summary as a Compaction part on a new assistant message.
2938 let mut compaction_msg = SessionMessage::assistant(session.id.clone());
2939 compaction_msg.parts.push(crate::MessagePart {
2940 id: format!("prt_{}", uuid::Uuid::new_v4()),
2941 part_type: PartType::Compaction {
2942 summary: summary.clone(),
2943 },
2944 created_at: chrono::Utc::now(),
2945 message_id: None,
2946 });
2947 session.messages.push(compaction_msg);
2948
2949 // Set the compacting timestamp on the session.
2950 session.time.compacting = Some(chrono::Utc::now().timestamp_millis());
2951 session.touch();
2952
2953 Some(summary)
2954}
2955
2956// Additional prompt functions for advanced features
2957

Callers 1

loop_innerMethod · 0.85

Calls 3

should_compactFunction · 0.85
cloneMethod · 0.45
touchMethod · 0.45

Tested by

no test coverage detected