From 3169baa2eb0ad4be75bf4053ff8e954a1b68da58 Mon Sep 17 00:00:00 2001 From: Suzumiya Date: Tue, 15 Sep 2026 18:36:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E9=A1=B9=E7=9B=AE=E5=86=85?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E5=BD=A2=E7=8A=B6=E7=94=A8=E4=BE=8B=EF=BC=88?= =?UTF-8?q?/=20=E5=86=99=E6=B3=95=E4=B8=8E=E5=A4=A7=E5=B0=8F=E5=86=99?= =?UTF-8?q?=E5=8F=98=E4=BD=93=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - direct_tool_calls.rs:新增单测 tool_call_paths_normalize_separators_and_case, 覆盖 relativize_project_root_paths 的 `/` 分隔符分支与大小写不敏感分支 (Codex 上报的路径分隔符与盘符大小写不受我们控制,这两条分支此前没有用例覆盖) --- .../src-tauri/src/agent/direct_tool_calls.rs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_calls.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_calls.rs index 72bd90dfb..005e9e333 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_calls.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_calls.rs @@ -1277,4 +1277,35 @@ mod tests { "回读必须按时间正序" ); } + + /// 判据:项目内路径的 `\` / `/` 两种写法与大小写变体都要落成同一份项目相对路径 + /// (Codex 上报的路径分隔符与盘符大小写不受我们控制)。 + #[test] + fn tool_call_paths_normalize_separators_and_case() { + let root = init_tool_call_project("tool-call-path-variants"); + let native = root.path().to_string_lossy().to_string(); + let variants = [native.replace('\\', "/"), native.to_ascii_uppercase()]; + let mut paths = Vec::new(); + for (index, variant) in variants.into_iter().enumerate() { + let call = direct_tool_call_from_item( + root.path(), + &json!({ + "id": format!("item-path-variant-{index}"), + "type": "fileChange", + "changes": [{"path": format!("{variant}/game/src/y.ts"), "kind": "update"}], + "startedAtMs": 1000, + }), + "turn-1", + false, + 1000, + ) + .expect("variant path tool call"); + paths.push(call.detail.changes[0].path.clone()); + } + assert_eq!(paths[0], "game/src/y.ts", "`/` 写法同样要落成项目相对路径"); + assert_eq!( + paths[1], "game/src/y.ts", + "大小写变体同样要落成项目相对路径" + ); + } }