复用已校验的项目清单
DirectProject wire 转换只读取一次项目 manifest 避免每个素材引用重复 I/O 与解析并缩小校验到解析之间的竞态窗口
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user