From 863148e11c1e338c4bd18a5545ef81a3d484febe Mon Sep 17 00:00:00 2001 From: kdletters <61648117+kdletters@users.noreply.github.com> Date: Fri, 2 Oct 2026 14:01:19 +0800 Subject: [PATCH] =?UTF-8?q?Claude=20Code=20Direct=20=E5=9B=9E=E5=90=88?= =?UTF-8?q?=E8=A1=A5=E5=88=86=E6=AE=B5=20trace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - claude_code_cli:cc Direct 回合在执行器入口、MCP loopback 就绪、sidecar 启动、sidecar 返回、解析 stream 前各写一条 agent.direct_turn.trace - direct_runtime:direct_turn_trace 提升为 pub(crate),让 Claude Code 执行器复用同一份分段留痕 --- .../src-tauri/src/agent/claude_code_cli.rs | 5 +++++ .../src-tauri/src/agent/direct_runtime/mod.rs | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/claude_code_cli.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/claude_code_cli.rs index 827b06682..9f5b91221 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/claude_code_cli.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/claude_code_cli.rs @@ -732,7 +732,9 @@ pub(crate) async fn direct_game_creator_claude_code_chat_at( client_turn_id: Option<&str>, observer: Option<&mut (dyn FnMut(DirectCodexTurnObservation) + Send)>, ) -> Result { + direct_turn_trace("claude-executor-enter"); let (mcp_url, mcp_token) = start_external_mcp_loopback(root, llm.web_search_enabled).await?; + direct_turn_trace("claude-mcp-loopback-ready"); let _mcp_guard = ExternalMcpStopGuard; let home = crate::project::resolve_local_project_path(root, ".agent/runtime/claude-code/home")?; std::fs::create_dir_all(&home) @@ -742,6 +744,7 @@ pub(crate) async fn direct_game_creator_claude_code_chat_at( .lock() .ok() .and_then(|sessions| sessions.get(&session_key).cloned()); + direct_turn_trace("claude-sidecar-start"); let payload = serde_json::json!({ "type": "turn", "id": client_turn_id.unwrap_or("claude-direct-turn"), @@ -769,6 +772,7 @@ pub(crate) async fn direct_game_creator_claude_code_chat_at( client_turn_id, ) .await?; + direct_turn_trace("claude-sidecar-done"); if let Some(session_id) = sidecar .result .get("session_id") @@ -785,6 +789,7 @@ pub(crate) async fn direct_game_creator_claude_code_chat_at( .filter_map(|event| serde_json::to_string(&event).ok()) .collect::>(); stream.push(String::new()); + direct_turn_trace("claude-parse-start"); parse_direct_stream_result(stream.join("\n").as_bytes(), observer) } diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_runtime/mod.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_runtime/mod.rs index 35ef1db4d..92d673ebb 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_runtime/mod.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_runtime/mod.rs @@ -4301,7 +4301,7 @@ pub(crate) fn check_direct_turn_preconditions( /// `agent.direct_codex.*` 都没有。窗口就夹在 `begin` 与执行器调用之间,需要知道 /// 具体停在哪一步。测试态不写,避免污染本机 AppData。 #[cfg(not(test))] -fn direct_turn_trace(stage: &str) { +pub(crate) fn direct_turn_trace(stage: &str) { let _ = crate::append_application_log( "info".to_string(), "direct-turn".to_string(), @@ -4310,7 +4310,7 @@ fn direct_turn_trace(stage: &str) { } #[cfg(test)] -fn direct_turn_trace(_stage: &str) {} +pub(crate) fn direct_turn_trace(_stage: &str) {} pub(crate) async fn run_direct_game_creator_turn_at_with_creation_type_and_emitter( root: &Path,