复用已校验的项目清单

DirectProject wire 转换只读取一次项目 manifest

避免每个素材引用重复 I/O 与解析并缩小校验到解析之间的竞态窗口
This commit is contained in:
2026-09-15 19:58:16 +08:00
parent b602e93db3
commit edd8b718e1
@@ -129,7 +129,7 @@ pub(crate) fn direct_codex_user_item_to_codex_turn_input(
item: &DirectCodexUserItem,
skill_roots: &[std::path::PathBuf],
) -> Result<Value, String> {
validate_direct_codex_user_item(root, item)?;
let manifest = validate_direct_codex_user_item(root, item)?;
let DirectCodexUserItem::Message(message) = item;
let mut input = Vec::with_capacity(message.content.len());
for part in &message.content {
@@ -138,9 +138,9 @@ pub(crate) fn direct_codex_user_item_to_codex_turn_input(
input.push(serde_json::json!({ "type": "text", "text": text }));
}
DirectCodexUserContentPart::AgcResourceReference { resource_id } => {
let asset = read_manifest_for_project(root)?
let asset = manifest
.assets
.into_iter()
.iter()
.find(|asset| asset.id == resource_id.trim())
.ok_or_else(|| "引用的素材已不存在,请移除后重新选择".to_string())?;
let path = sanitize_attachment_local_path(&asset.local_path)