From b2d01ef8c136c75fa5dc2b89aa8c14bf50db460d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 1 Oct 2026 14:08:52 +0800 Subject: [PATCH] =?UTF-8?q?write=5Ffile=20=E5=85=A5=E5=8F=82=E5=BD=A2?= =?UTF-8?q?=E7=8A=B6=E6=A0=A1=E9=AA=8C=E6=94=B6=E8=BF=9B=20write=5Ffile=5F?= =?UTF-8?q?input=EF=BC=8CMCP=20=E9=A2=84=E6=A3=80=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E6=BC=8F=E6=8E=89=E6=9C=AA=E7=9F=A5=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 其它 *_input 解析器都先调 ToolArgumentsRejection::check,只有 write_file_input 没有;工具桥路径靠 bridge_write_file_with_permit 里另一次 check 兜住,但独立客户端 MCP 预检 validate_write_file_arguments 只调 write_file_input,带未知字段的入参能通过预检、要等回客户端桥才被拒 - 在 write_file_input 开头补上同一份 check(path/content 白名单),两个入口共用一条规则;写文件门禁里的那次 check 保留,保证「先查形状、再过权限」的现有顺序不变 - 测试补一条:{"path":"game/index.html","content":"…","unexpected":1} 必须被 validate_write_file_arguments 拒绝 验证:cargo test --bin genarrative-ai-game-creator-shell -- agent::direct_tool_bridge:: 40 passed;agent::direct_tools_mcp::tests::tool_catalog_preserves_reviewed_resource_contracts 通过 --- .../src-tauri/src/agent/direct_tool_bridge.rs | 1 + .../src-tauri/src/agent/direct_tools_mcp.rs | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_bridge.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_bridge.rs index d69dc5e20..7d5bacb99 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_bridge.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_bridge.rs @@ -1718,6 +1718,7 @@ fn bridge_file_content_changed(root: &Path, path: &str, content: &[u8]) -> Optio pub(in crate::agent) fn write_file_input( arguments: &Value, ) -> Result<(String, String), WriteFileError> { + ToolArgumentsRejection::check(arguments, &["path", "content"])?; let raw_path = arguments .get("path") .and_then(Value::as_str) diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tools_mcp.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tools_mcp.rs index f8774f2df..61e78b727 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tools_mcp.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tools_mcp.rs @@ -2849,6 +2849,12 @@ mod tests { "content": "{}" })) .is_err()); + assert!(validate_write_file_arguments(&json!({ + "path": "game/index.html", + "content": "", + "unexpected": 1 + })) + .is_err()); assert_eq!( direct_tool_bridge::prepare_game_art_input(&json!({ "brief": "美术包" })) .expect("safe default")