diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent.rs b/apps/ai-game-creator-shell/src-tauri/src/agent.rs index 752548bd7..ca1c3b6d5 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent.rs @@ -55,6 +55,7 @@ pub(crate) use codex_cli::{ game_creator_codex_cli_executable_path, game_creator_codex_cli_version_identity, }; pub(crate) use codex_provider_proxy::*; +#[cfg(not(test))] pub(crate) use design_runtime::*; pub(crate) use direct_codex_attachments::*; pub(crate) use direct_codex_user_item::*; diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/codex_app_server/mod.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/codex_app_server/mod.rs index cac4568b6..82c02728a 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/codex_app_server/mod.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/codex_app_server/mod.rs @@ -7095,6 +7095,8 @@ while IFS= read -r line; do :; done .map(|argument| argument.to_string_lossy().into_owned()) .collect::>() .join("\n"); + assert!(home_arguments.contains("--disable\nshell_tool")); + assert!(home_arguments.contains("--disable\nunified_exec")); } #[cfg(windows)] diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/design_runtime.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/design_runtime.rs index 9e1eafc0f..e42722a1a 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/design_runtime.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/design_runtime.rs @@ -1688,7 +1688,6 @@ pub(crate) fn read_design_workspace_file( #[cfg(test)] mod fake_provider { - use super::*; use std::cell::{Cell, RefCell}; use std::collections::VecDeque; 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 0b816ffee..1208c3d81 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 @@ -8,6 +8,7 @@ use std::sync::{Mutex, OnceLock}; use std::time::{SystemTime, UNIX_EPOCH}; mod user_input; +#[cfg(not(test))] pub(crate) use user_input::chat_with_game_creator_direct_codex; #[cfg(test)] pub(crate) use user_input::normalize_direct_client_turn_id; diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/generation.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/generation.rs index bad2f072a..960b47bfe 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/generation.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/generation.rs @@ -49,7 +49,6 @@ pub(in crate::agent) use external_generation_state::{ }; #[cfg(test)] pub(crate) use external_generation_state::{ - platform_art_generation_external_configuration_fingerprint, platform_art_generation_legacy_external_configuration_fingerprint, setup_platform_art_generation_runtime_accepted_for_recovery_test, write_platform_art_generation_runtime_accepted_for_test, diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_actions/provider_request_builders.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_actions/provider_request_builders.rs index 3647d5979..b21662952 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_actions/provider_request_builders.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_actions/provider_request_builders.rs @@ -817,24 +817,18 @@ mod tests { use super::{ acquire_game_creator_agent_provider_plan_project_write_lock_with_wait, agent_runtime_root_source_at, bind_game_creator_agent_runtime_run_profile_at, - build_game_creator_agent_background_final_reply_request, build_game_creator_agent_background_tool_plan_request_locked, - game_creator_agent_context_preload_notice, - game_creator_agent_runtime_run_profile_binding_path, - game_creator_project_supervisor_chat_system_prompt, init_local_game_project_at, - new_game_creation_app_seed_tasks, provider_command_exec_contract, - provider_command_start_contract, + game_creator_agent_context_preload_notice, init_local_game_project_at, + new_game_creation_app_seed_tasks, render_relaxed_autonomous_manifest_ready_task_background_prompt, - required_runtime_prompt_section, start_game_creator_agent_runtime_task_at, - AgentRuntimeGoalContractAcceptanceNodeDraft, AgentRuntimeGoalContractDraft, - AgentRuntimeTaskLink, AgentRuntimeToolObservation, AgentRuntimeToolPlan, + start_game_creator_agent_runtime_task_at, AgentRuntimeGoalContractAcceptanceNodeDraft, + AgentRuntimeGoalContractDraft, AgentRuntimeTaskLink, AgentRuntimeToolObservation, AgentRuntimeToolPlanRequestSnapshot, GameCreatorLlmConfig, AGENT_RUNTIME_AUTONOMOUS_PRE_MUTATION_LOOP_LIMIT, AGENT_RUNTIME_COMPLETION_BLOCKER_TOOL_PLAN_PROTOCOL, AGENT_RUNTIME_RESPOND_FUNCTION_NAME, - AGENT_RUNTIME_RUN_PROFILE_AUTONOMOUS_GAME_BUILD, AGENT_RUNTIME_RUN_PROFILE_STANDARD, - AGENT_RUNTIME_SUPERVISOR_CLI_SOURCE, AGENT_RUNTIME_SUPERVISOR_GUI_SOURCE, - AGENT_RUNTIME_UPDATE_PLAN_FUNCTION_NAME, GAME_CREATOR_PROJECT_SUPERVISOR_AGENT_ID, - RUNTIME_PROMPT_SUPERVISOR_CHAT_COMPOSITION, + AGENT_RUNTIME_RUN_PROFILE_AUTONOMOUS_GAME_BUILD, AGENT_RUNTIME_SUPERVISOR_CLI_SOURCE, + AGENT_RUNTIME_SUPERVISOR_GUI_SOURCE, AGENT_RUNTIME_UPDATE_PLAN_FUNCTION_NAME, + GAME_CREATOR_PROJECT_SUPERVISOR_AGENT_ID, }; fn build_game_creator_agent_background_tool_plan_request_for_test( diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_driver.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_driver.rs index 54da51648..6b4519eac 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_driver.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_driver.rs @@ -302,10 +302,7 @@ pub(crate) use entrypoints::{ pub(crate) use finalization::resume_game_creator_agent_finalization_for_test_at; pub(crate) use finalization::AgentRuntimePendingActionResume; #[cfg(test)] -pub(crate) use interaction::{ - acquire_game_creator_agent_runtime_user_input_answer_locks_for_test, - agent_runtime_tool_requires_repository_context_fingerprint_gate, -}; +pub(crate) use interaction::agent_runtime_tool_requires_repository_context_fingerprint_gate; pub(crate) use interaction::{ answer_game_creator_agent_runtime_user_input_at, confirm_game_creator_agent_runtime_task_at, pending_repository_context_drift_observation, reject_game_creator_agent_runtime_task_at, diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_driver/interaction.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_driver/interaction.rs index a91344eda..d1f2aa58e 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_driver/interaction.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_driver/interaction.rs @@ -477,20 +477,6 @@ fn resolve_game_creator_agent_runtime_user_input_action_with_ordered_locks( Ok((None, runtime_lock, resolved)) } -#[cfg(test)] -pub(crate) fn acquire_game_creator_agent_runtime_user_input_answer_locks_for_test( - root: &Path, - agent_id: &str, - run_id: &str, - action_id: &str, -) -> Result<(Option, AgentRuntimeTaskLock), String> { - let (project_lock, runtime_lock, _) = - resolve_game_creator_agent_runtime_user_input_action_with_ordered_locks( - root, agent_id, run_id, action_id, - )?; - Ok((project_lock, runtime_lock)) -} - pub(crate) fn answer_game_creator_agent_runtime_user_input_at( root: &Path, agent_id: &str, diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools.rs index a68658e4a..0ec540993 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools.rs @@ -44,9 +44,7 @@ pub(in crate::agent) use ui_workflow::*; #[cfg(test)] pub(crate) use delegation::observe_agent_runtime_agent_delegate_at_locked; #[cfg(test)] -pub(crate) use delivery::{ - build_static_delegate_result_for_child_at, wake_waiting_static_delegate_parent_run_for_test_at, -}; +pub(crate) use delivery::build_static_delegate_result_for_child_at; #[cfg(test)] pub(crate) use isolated_joins::render_isolated_join_status_batch_with_limit; #[cfg(test)] diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools/delivery.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools/delivery.rs index 4e29d3356..709023e9d 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools/delivery.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools/delivery.rs @@ -408,14 +408,6 @@ pub(in crate::agent) fn wake_waiting_static_delegate_parent_run_at( Ok(true) } -#[cfg(test)] -pub(crate) fn wake_waiting_static_delegate_parent_run_for_test_at( - root: &Path, - parent_task: &AgentRuntimeTaskRecord, -) -> Result { - wake_waiting_static_delegate_parent_run_at(root, parent_task) -} - pub(in crate::agent) fn wake_waiting_autonomous_manifest_parent_run_at( root: &Path, parent_task: &AgentRuntimeTaskRecord, diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent_native_tools.rs b/apps/ai-game-creator-shell/src-tauri/src/agent_native_tools.rs index 799c26b83..b9c09ab33 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent_native_tools.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent_native_tools.rs @@ -13,8 +13,6 @@ use crate::agent::{ AgentRuntimeToolPlan, AGENT_RUNTIME_BACKGROUND_TOOL_ACTION_LIMIT, AGENT_RUNTIME_CANVAS_ASSET_KINDS, AGENT_RUNTIME_PLAN_STEP_LIMIT, }; -#[cfg(test)] -use crate::GAME_CREATOR_PROJECT_SUPERVISOR_AGENT_ID; pub(crate) const AGENT_RUNTIME_UPDATE_PLAN_FUNCTION_NAME: &str = "update_agent_plan"; pub(crate) const AGENT_RUNTIME_RESPOND_FUNCTION_NAME: &str = "respond_to_user"; diff --git a/apps/ai-game-creator-shell/src-tauri/src/browser/tests.rs b/apps/ai-game-creator-shell/src-tauri/src/browser/tests.rs index 41bf2cf64..0d98e7c97 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/browser/tests.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/browser/tests.rs @@ -32,6 +32,7 @@ use super::playtest::{ GENERIC_PLAYTEST_START_OPPORTUNITY_MIN_STABILITY_SAMPLES, GENERIC_PLAYTEST_START_OPPORTUNITY_WINDOW, PLAYABLE_GAME_STATE_SCHEMA_VERSION, }; +#[cfg(unix)] use super::process::create_browser_process_temp_dir; static PATH_TEST_LOCK: Mutex<()> = Mutex::new(()); diff --git a/apps/ai-game-creator-shell/src-tauri/src/config.rs b/apps/ai-game-creator-shell/src-tauri/src/config.rs index cfbc650b5..76930c5ba 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/config.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/config.rs @@ -1291,6 +1291,8 @@ fn validate_game_creator_private_path_ancestors_with_auto_elevation_scoped( ) -> Result<(), String> { #[cfg(test)] { + // 测试只校验路径,不触发宿主提权修复,因此不消费修复范围。 + let _ = scope; return validate_game_creator_private_path_ancestors(path, label); } #[cfg(not(test))] diff --git a/apps/ai-game-creator-shell/src-tauri/src/environment_check.rs b/apps/ai-game-creator-shell/src-tauri/src/environment_check.rs index facfc30f6..58084a897 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/environment_check.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/environment_check.rs @@ -7,9 +7,10 @@ use std::io::Read; use std::path::{Path, PathBuf}; use std::process::Stdio; use std::time::{Duration, Instant}; +#[cfg(not(test))] +pub(crate) use web_creation::preflight_web_game_creation; pub(crate) use web_creation::{ - host_web_creation_preflight, preflight_web_game_creation, prepare_new_web_project_at, - record_new_web_scaffold_at, + host_web_creation_preflight, prepare_new_web_project_at, record_new_web_scaffold_at, }; use serde::Deserialize; diff --git a/apps/ai-game-creator-shell/src-tauri/src/main.rs b/apps/ai-game-creator-shell/src-tauri/src/main.rs index 7175acf53..275a45723 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/main.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/main.rs @@ -50,6 +50,7 @@ use shared_contracts::game_creation_app::{ }; // `Emitter` 同时被 `use super::*` 的子模块依赖(通知、Agent 事件等都从 crate 根取该 trait), // 不要因为根模块自身不再直接 `.emit(..)` 就删掉它。 +#[cfg(not(test))] use environment_check::preflight_web_game_creation; use tauri::{Emitter, Manager}; use tauri_plugin_dialog::DialogExt; @@ -156,13 +157,16 @@ mod tool_plan_handoff; mod user_input; mod windows; +#[cfg(not(test))] use agent::design_tools::*; use agent::*; use agent_native_tools::*; +#[cfg(not(test))] use asset_generation_tasks::*; use assets::*; use browser::*; use cli::*; +#[cfg(not(test))] use client_extensions::*; use collaboration::*; use command_exec::*; @@ -172,6 +176,7 @@ use commands::*; use config::*; use context_compaction::*; use delegation::*; +#[cfg(not(test))] use error_report::*; use git_inspect::*; use goal::*; @@ -179,6 +184,7 @@ use image_inspect::*; use isolated_agent::*; use patchset::*; use platform_session::*; +#[cfg(not(test))] use plugin_host::{ call_agc_plugin, list_agc_extensions, list_agc_plugins, read_agc_plugin_panel, refresh_agc_plugins, reload_agc_plugin, set_agc_plugin_enabled, set_agc_plugin_project_path, @@ -192,6 +198,7 @@ use repository_context::*; use resource_inspect::*; use resource_preview_scheduler::*; use runner::*; +#[cfg(not(test))] use template_library::*; use user_input::*; use windows::*; diff --git a/apps/ai-game-creator-shell/src-tauri/src/runner.rs b/apps/ai-game-creator-shell/src-tauri/src/runner.rs index f1097a975..e10cd50a3 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/runner.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/runner.rs @@ -31,9 +31,9 @@ pub(crate) use endpoint::validate_windows_regular_file_handle; pub(crate) use endpoint::{external_agent_runner_enabled, external_agent_runner_is_server_process}; #[allow(unused_imports)] pub(crate) use protocol::{ExternalAgentRunnerStatus, EXTERNAL_AGENT_RUNNER_PROTOCOL_VERSION}; -pub(crate) use server::{ - bind_loopback_listener_with_linux_fallback, run_external_agent_runner_server, -}; +pub(crate) use server::bind_loopback_listener_with_linux_fallback; +#[cfg(not(test))] +pub(crate) use server::run_external_agent_runner_server; #[cfg(test)] pub(crate) fn simulate_external_agent_runner_cross_boot_owner_claim_for_test( diff --git a/apps/ai-game-creator-shell/src-tauri/src/runner/tests.rs b/apps/ai-game-creator-shell/src-tauri/src/runner/tests.rs index 4f372d1f3..cd0e920c7 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/runner/tests.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/runner/tests.rs @@ -3,6 +3,7 @@ use super::{ }; use serde_json::{json, Value}; use sha2::{Digest as _, Sha256}; +#[cfg(target_os = "linux")] use std::collections::BTreeSet; use std::ffi::OsString; use std::fs; diff --git a/apps/ai-game-creator-shell/src-tauri/src/tests/mod.rs b/apps/ai-game-creator-shell/src-tauri/src/tests/mod.rs index 421d32605..324ce4988 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/tests/mod.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/tests/mod.rs @@ -1,7 +1,7 @@ use super::*; use base64::Engine as _; use serde_json::Value; -use sha2::{Digest as _, Sha256}; +use sha2::Sha256; use std::collections::{BTreeMap, BTreeSet}; use std::io::{self, Read, Write}; use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; @@ -647,62 +647,6 @@ pub(crate) async fn wait_for_agent_runtime_terminal_and_lane_release_async( } } -pub(crate) async fn wait_for_agent_runtime_manifest_projection_async( - root: &Path, - agent_id: &str, - run_id: &str, - runtime_status: &str, - phase: &str, - manifest_status: GameCreationAppTaskStatus, -) -> AgentRuntimeResult { - let deadline = Instant::now() + AGENT_RUNTIME_TERMINAL_WAIT_BUDGET; - let mut terminal = wait_for_agent_runtime_terminal_and_lane_release_async( - root, - agent_id, - run_id, - runtime_status, - phase, - ) - .await; - let mut stable_samples = 0_u8; - loop { - if let Ok(project_lock) = acquire_game_creator_agent_runtime_project_write_lock_with_wait( - root, - "test.wait_runtime_manifest_projection", - ) { - let manifest = read_manifest_for_project(root) - .expect("read manifest while waiting for terminal projection"); - let projected = manifest - .tasks - .iter() - .find(|task| task.id == agent_id) - .is_some_and(|task| task.status == manifest_status); - let reread = read_game_creator_agent_runtime_at(root, agent_id) - .expect("reread runtime while waiting for terminal projection"); - drop(project_lock); - if projected - && reread.state.run_id == run_id - && reread.state.status == runtime_status - && reread.state.phase == phase - { - stable_samples = stable_samples.saturating_add(1); - terminal = reread; - if stable_samples >= 2 { - return terminal; - } - } else { - stable_samples = 0; - terminal = reread; - } - } - assert!( - Instant::now() < deadline, - "runtime terminal manifest projection did not settle for {agent_id}/{run_id}" - ); - tokio::time::sleep(Duration::from_millis(20)).await; - } -} - async fn wait_for_agent_runtime_lane_release_async( root: &Path, agent_id: &str, diff --git a/apps/ai-game-creator-shell/src-tauri/src/tests/runtime_actions/support.rs b/apps/ai-game-creator-shell/src-tauri/src/tests/runtime_actions/support.rs index 36e81afb5..6e0b772d8 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/tests/runtime_actions/support.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/tests/runtime_actions/support.rs @@ -14,13 +14,12 @@ pub(super) use super::super::{ append_auto_tool_action_audit_pair_for_test, assert_auto_tool_action_audit_pair, assert_pending_runtime_decision_revalidates_after_lock, assert_task_status, fake_llm_game_draft, final_tool_plan_response, mock_http_request_json, - native_agent_tool_plan_chat_response, observe_agent_runtime_agent_delegate, - pending_tool_action_for_test, persist_needs_reconciliation_runtime_for_test, - persist_project_verification_for_test, read_agent_db_records_for_test, - register_canvas_visual_asset_fixture, spawn_barrier_mock_llm_server, - spawn_interruptible_mock_llm_server_with_capture, spawn_mock_llm_raw_responses_with_capture, - spawn_mock_llm_server, spawn_mock_llm_server_responses, - spawn_mock_llm_server_responses_with_capture, + native_agent_tool_plan_chat_response, pending_tool_action_for_test, + persist_needs_reconciliation_runtime_for_test, persist_project_verification_for_test, + read_agent_db_records_for_test, register_canvas_visual_asset_fixture, + spawn_barrier_mock_llm_server, spawn_interruptible_mock_llm_server_with_capture, + spawn_mock_llm_raw_responses_with_capture, spawn_mock_llm_server, + spawn_mock_llm_server_responses, spawn_mock_llm_server_responses_with_capture, spawn_releasable_mock_llm_server_responses_with_capture, spawn_releasable_mock_llm_server_responses_with_capture_at, start_agent_runtime_steer_fixture, ui_prototype_assessment_fixture, unique_project_path, use_test_runtime_config_dir, @@ -38,10 +37,9 @@ pub(super) use crate::{ agent_runtime_background_worker_threads_for_test, agent_runtime_executable_tools, agent_runtime_read_only_delivery_completion_plan_update, agent_runtime_run_profile_identity_at, agent_runtime_tool_action_fingerprint, agent_runtime_tool_action_id, - agent_runtime_tool_allowed_for_agent, agent_runtime_tool_policy_snapshot_for_run_at, + agent_runtime_tool_policy_snapshot_for_run_at, agent_runtime_tool_requires_pending_revision_gate, - agent_runtime_tool_requires_repository_context_fingerprint_gate, - agent_runtime_verified_delivery_completion_plan_update, append_agent_db_record, + agent_runtime_tool_requires_repository_context_fingerprint_gate, append_agent_db_record, append_agent_db_terminal_observation_if_missing_for_action, append_agent_runtime_action_receipt, append_agent_runtime_tool_call_record, append_game_creator_agent_runtime_action_event, append_game_creator_agent_runtime_task, @@ -67,8 +65,8 @@ pub(super) use crate::{ game_creator_agent_runtime_tool_policy_rule_for_run, init_local_game_project_at, invalidate_agent_runtime_project_verification_after_preview_failure_at, native_runtime_function_name, observe_agent_runtime_action_history, - observe_agent_runtime_agent_message, observe_agent_runtime_agent_spawn_isolated, - plan_game_creation_agent_pass, prepare_agent_runtime_project_mutation_locked, + observe_agent_runtime_agent_message, plan_game_creation_agent_pass, + prepare_agent_runtime_project_mutation_locked, prepare_game_creator_agent_runtime_provider_action_batch, project_verification_completion_blocker_at, read_all_game_creator_agent_runtime_tasks, read_game_creator_agent_runtime_at, read_game_creator_agent_runtime_context_bundle, diff --git a/apps/ai-game-creator-shell/src-tauri/src/tool_plan_handoff/tests.rs b/apps/ai-game-creator-shell/src-tauri/src/tool_plan_handoff/tests.rs index 2e7f6fe79..79d99c905 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/tool_plan_handoff/tests.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/tool_plan_handoff/tests.rs @@ -18,15 +18,18 @@ use super::identity_order_validation::{ parse_tool_plan_base_request_slot, request_slot_for_attempt, }; use super::ledger::response_for_persistence; +#[cfg(unix)] +use super::model::TOOL_PLAN_HANDOFF_RELATIVE_DIRECTORY; use super::model::{ INVALID_THINKING_CLOSE_MARKER, INVALID_THINKING_OPEN_MARKER, TOOL_PLAN_HANDOFF_ARGUMENTS_MAX_BYTES, TOOL_PLAN_HANDOFF_LABEL, TOOL_PLAN_HANDOFF_MAX_ENTRIES, - TOOL_PLAN_HANDOFF_MAX_TOOL_CALLS, TOOL_PLAN_HANDOFF_RELATIVE_DIRECTORY, - TOOL_PLAN_HANDOFF_REQUEST_RESERVE_BYTES, TOOL_PLAN_HANDOFF_SIDECAR_MAX_BYTES, + TOOL_PLAN_HANDOFF_MAX_TOOL_CALLS, TOOL_PLAN_HANDOFF_REQUEST_RESERVE_BYTES, + TOOL_PLAN_HANDOFF_SIDECAR_MAX_BYTES, }; +#[cfg(unix)] +use super::storage_common::serialize_ledger_for_storage; use super::storage_common::{ - path_key, response_fingerprint, serialize_ledger_for_storage, tool_plan_handoff_path, - tool_plan_handoff_relative_path, + path_key, response_fingerprint, tool_plan_handoff_path, tool_plan_handoff_relative_path, }; #[cfg(unix)] use super::storage_unix::{ @@ -43,7 +46,9 @@ use super::*; use crate::agent::{ agent_runtime_json_sidecar_backup_path, write_agent_runtime_json_sidecar_with_max_bytes, }; -use crate::provider_retry::{self, AgentRuntimeProviderRetryIdentity}; +#[cfg(unix)] +use crate::provider_retry; +use crate::provider_retry::AgentRuntimeProviderRetryIdentity; #[test] fn tool_plan_handoff_classifies_windows_handle_install_failure_as_storage() { diff --git a/docs/【开发运维】本地开发验证与生产运维-2026-05-15.md b/docs/【开发运维】本地开发验证与生产运维-2026-05-15.md index ac0f0cb97..735eb667a 100644 --- a/docs/【开发运维】本地开发验证与生产运维-2026-05-15.md +++ b/docs/【开发运维】本地开发验证与生产运维-2026-05-15.md @@ -291,6 +291,7 @@ npm run check ### 编译告警的保留边界与待优化项 +- AGC 测试编译使用 `cargo check --locked --offline --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml -p genarrative-ai-game-creator-shell --tests` 定向核对。GUI 主入口在测试构建中被排除,不能把测试目标的 `dead_code` 一律认定为废弃生产代码;仅生产入口使用的导入限定 `not(test)`,平台测试导入与对应 Unix/Linux 测试保持相同条件,失去调用方的测试 helper 和多余重导出直接删除。DirectHome 命令配置测试明确断言禁用 `shell_tool` 与 `unified_exec`;Windows 路径校验的测试分支不触发宿主提权修复,修复范围参数仅由生产分支消费。 - AGC 默认 Windows dev 构建在 2026-09-23 清理后的 `cargo check --locked --offline --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml -p genarrative-ai-game-creator-shell` 复核通过,剩余 3 条 AuthBridge 相关 Rust warning 和 5 条 ts-rs 提示。这是当次配置的检查结果,不代表后续提交、正式 editor features、其它平台、test targets、release 链接或安装包均无告警;后续按改动范围定向验证。 - AuthBridge 的 3 条 warning 暂缓处理,支持或退役 OAuth 的决策仍未确定。完整证据、保留边界和关闭条件以 [AGC 主方案“OAuth 认证路线的契约冲突与待决边界”](./technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md#oauth-认证路线的契约冲突与待决边界)为准。 - ts-rs 12.0.1 的 5 条提示来自四个枚举(`DirectCodexUserItem`、`DirectCodexUserContentPart`、`DirectThreadItem`、`DirectThreadEvent`)的 `serde(deny_unknown_fields)` 和图片组件的 `serde(deserialize_with = "deserialize_fill_amount")`。已静态核对 TypeScript 类型形状及基础类型正确、Serde 运行时校验仍有效;暂保留提示,不引入依赖补丁、不改业务校验或全局屏蔽,待上游正式版本支持后再评估。