完善 DirectProject 上下文标签过滤

覆盖 Codex 内部与外部上下文包裹格式

保持普通用户文本的完整标签引用可见
This commit is contained in:
2026-09-07 11:35:19 +08:00
parent 3ef3e40383
commit 908541f639
@@ -16,6 +16,7 @@ const DIRECT_PROJECT_INTERNAL_CONTEXT_KINDS: &[&str] = &[
];
const DIRECT_PROJECT_CONTEXTUAL_USER_TEXT_MARKERS: &[(&str, &str)] = &[
("# AGENTS.md instructions", "</INSTRUCTIONS>"),
("<environment_context>", "</environment_context>"),
("<skill>", "</skill>"),
("<user_shell_command>", "</user_shell_command>"),
@@ -25,6 +26,24 @@ const DIRECT_PROJECT_CONTEXTUAL_USER_TEXT_MARKERS: &[(&str, &str)] = &[
("<goal_context>", "</goal_context>"),
];
fn is_known_contextual_user_text(text: &str) -> bool {
let text = text.trim();
if DIRECT_PROJECT_CONTEXTUAL_USER_TEXT_MARKERS
.iter()
.any(|(start, end)| text.starts_with(start) && text.ends_with(end))
{
return true;
}
if text.starts_with("<codex_internal_context") && text.ends_with("</codex_internal_context>") {
return true;
}
text.starts_with("<external_")
&& text
.split_once('>')
.and_then(|(start, _)| start.strip_prefix("<external_"))
.is_some_and(|key| text.ends_with(&format!("</external_{key}>")))
}
pub(crate) fn is_direct_project_internal_context_item(item: &Value) -> bool {
if matches!(
item.get("role").and_then(Value::as_str),
@@ -51,10 +70,7 @@ pub(crate) fn is_direct_project_internal_context_item(item: &Value) -> bool {
let Some(text) = part.get("text").and_then(Value::as_str) else {
return false;
};
let text = text.trim();
DIRECT_PROJECT_CONTEXTUAL_USER_TEXT_MARKERS
.iter()
.any(|(start, end)| text.starts_with(start) && text.ends_with(end))
is_known_contextual_user_text(text)
})
})
}