MCPcopy Create free account
hub / github.com/GCWing/BitFun / truncate_string_for_session_view

Function truncate_string_for_session_view

src/apps/desktop/src/api/agentic_api.rs:426–453  ·  view source on GitHub ↗
(text: &str, remaining_budget: &mut usize)

Source from the content-addressed store, hash-verified

424}
425
426fn truncate_string_for_session_view(text: &str, remaining_budget: &mut usize) -> Option<String> {
427 let char_count = text.chars().count();
428 let available = SESSION_VIEW_TOOL_RESULT_STRING_CHAR_LIMIT.min(*remaining_budget);
429
430 if char_count <= available {
431 *remaining_budget = remaining_budget.saturating_sub(char_count);
432 return None;
433 }
434
435 let omitted_chars = SESSION_VIEW_OMITTED_MARKER.chars().count();
436 if available <= omitted_chars {
437 *remaining_budget = remaining_budget.saturating_sub(omitted_chars.min(*remaining_budget));
438 return Some(SESSION_VIEW_OMITTED_MARKER.to_string());
439 }
440
441 let suffix_chars = SESSION_VIEW_TRUNCATED_MARKER.chars().count();
442 if available <= suffix_chars {
443 *remaining_budget = remaining_budget.saturating_sub(omitted_chars.min(*remaining_budget));
444 return Some(SESSION_VIEW_OMITTED_MARKER.to_string());
445 }
446
447 let keep_chars = available - suffix_chars;
448 let mut preview = text.chars().take(keep_chars).collect::<String>();
449 preview.push_str(SESSION_VIEW_TRUNCATED_MARKER);
450 let preview_chars = preview.chars().count();
451 *remaining_budget = remaining_budget.saturating_sub(preview_chars);
452 Some(preview)
453}
454
455fn compact_json_for_session_view(value: &mut serde_json::Value, remaining_budget: &mut usize) {
456 match value {

Callers 1

Calls 3

takeMethod · 0.80
countMethod · 0.45
push_strMethod · 0.45

Tested by

no test coverage detected