#[allow(clippy::wildcard_imports)]
use super::*;
pub(in crate::server::call_tool) fn triage_bypass_requested(
name: &str,
args: Option<&serde_json::Map<String, serde_json::Value>>,
) -> bool {
name == "ctx_read"
|| super::super::context_gate::protected_path_requested(args)
|| args.is_some_and(|args| {
args.get("raw")
.and_then(serde_json::Value::as_bool)
.unwrap_or(false)
|| args
.get("mode")
.and_then(serde_json::Value::as_str)
.is_some_and(|mode| {
mode == "raw"
|| mode == "full"
|| mode == "full-compact"
|| mode.starts_with("lines:")
|| mode.starts_with("anchored:")
|| mode == "diff"
})
|| args
.get("aggressiveness")
.and_then(serde_json::Value::as_f64)
.is_some_and(|value| value == 0.0)
|| args
.get("fresh")
.and_then(serde_json::Value::as_bool)
.unwrap_or(false)
})
}
pub(in crate::server::call_tool) fn verbatim_requested(
name: &str,
args: Option<&serde_json::Map<String, serde_json::Value>>,
) -> bool {
if !matches!(name, "ctx_read" | "ctx_shell") {
return false;
}
args.is_some_and(|args| {
args.get("raw")
.and_then(serde_json::Value::as_bool)
.unwrap_or(false)
|| args
.get("inline")
.and_then(serde_json::Value::as_bool)
.unwrap_or(false)
|| args
.get("mode")
.and_then(serde_json::Value::as_str)
.is_some_and(|mode| mode == "raw")
})
}
pub(super) fn apply_task_triage_filter(
result_text: String,
profile: Option<&lean_ctx::core::triage::profile::TaskProfileLocal>,
decision_context: &mut Option<lean_ctx::core::decision_loop_runtime::TaskContext>,
max_filter_level: u8,
) -> String {
if max_filter_level == 0 {
return result_text;
}
let Some(profile) = profile else {
return result_text;
};
let filtered = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
let level = context_gate::triage_filter_level(profile).min(max_filter_level);
(level > 0).then(|| context_gate::apply_triage_filter(&result_text, profile, level))
}));
let Ok(Some((filtered_text, filtered_lines))) = filtered else {
return result_text;
};
if let Some(context) = decision_context {
context.filtered_lines = filtered_lines;
}
filtered_text
}