From 172ef2a16b79048349982a95c555101649328842 Mon Sep 17 00:00:00 2001 From: Linghong Date: Mon, 28 Sep 2026 23:24:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=8E=AF=E5=A2=83=E6=8E=A2?= =?UTF-8?q?=E6=B5=8B=E6=B5=8B=E8=AF=95=E5=A4=B9=E5=85=B7=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=A3=80=E6=9F=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 Node 环境断言移入独立测试夹具并通过 include_str 引用 保持生产配置检查规则与预检实现不变 同步定向验证入口说明 --- .../src-tauri/src/environment_check.rs | 19 +----------------- .../tests/fixtures/environment-probe.cjs | 20 +++++++++++++++++++ ...¹案】AI游戏创作智能体App实施计划-2026-06-24.md | 2 +- 3 files changed, 22 insertions(+), 19 deletions(-) create mode 100644 apps/ai-game-creator-shell/src-tauri/tests/fixtures/environment-probe.cjs 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 e9105fc34..290594405 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 @@ -669,24 +669,7 @@ mod tests { let fixture = root.path().join("probe.cjs"); fs::write( &fixture, - r#" -const assert = require('node:assert/strict'); -const fs = require('node:fs'); -const path = require('node:path'); -const home = process.env.HOME; -assert.ok(home && fs.statSync(home).isDirectory()); -for (const key of ['USERPROFILE', 'APPDATA', 'LOCALAPPDATA']) { - assert.equal(process.env[key], home); -} -assert.equal(fs.realpathSync(process.cwd()), fs.realpathSync(home)); -assert.equal(fs.realpathSync(require('node:os').homedir()), fs.realpathSync(home)); -for (const key of ['npm_config_userconfig', 'npm_config_globalconfig']) { - assert.equal(path.dirname(process.env[key]), home); - assert.equal(fs.readFileSync(process.env[key], 'utf8'), ''); -} -assert.equal(process.env.npm_config_cache, path.join(home, 'npm-cache')); -console.log('1.0.0'); -"#, + include_str!("../tests/fixtures/environment-probe.cjs"), ) .unwrap(); let fixture_runtime = NodeRuntime { diff --git a/apps/ai-game-creator-shell/src-tauri/tests/fixtures/environment-probe.cjs b/apps/ai-game-creator-shell/src-tauri/tests/fixtures/environment-probe.cjs new file mode 100644 index 000000000..26ccd2acb --- /dev/null +++ b/apps/ai-game-creator-shell/src-tauri/tests/fixtures/environment-probe.cjs @@ -0,0 +1,20 @@ +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); + +const home = process.env.HOME; +assert.ok(home && fs.statSync(home).isDirectory()); +for (const key of ['USERPROFILE', 'APPDATA', 'LOCALAPPDATA']) { + assert.equal(process.env[key], home); +} +assert.equal(fs.realpathSync(process.cwd()), fs.realpathSync(home)); +assert.equal( + fs.realpathSync(require('node:os').homedir()), + fs.realpathSync(home), +); +for (const key of ['npm_config_userconfig', 'npm_config_globalconfig']) { + assert.equal(path.dirname(process.env[key]), home); + assert.equal(fs.readFileSync(process.env[key], 'utf8'), ''); +} +assert.equal(process.env.npm_config_cache, path.join(home, 'npm-cache')); +process.stdout.write('1.0.0\n'); diff --git a/docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md b/docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md index 74c97f257..8ee04d922 100644 --- a/docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md +++ b/docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md @@ -4,7 +4,7 @@ Node/npm 版本探测清空继承环境后,必须设置客户端创建的临时 `HOME`、`USERPROFILE`、`APPDATA` 和 `LOCALAPPDATA`,并指定空的用户及全局 npm 配置、临时缓存和临时工作目录。临时目录保留到探测子进程退出,不依赖 Windows 用户资料查询,也不读取用户或项目的 `.npmrc`。探测继续使用校验后的客户端运行时;初始化临时环境失败返回 `runtime-probe-home-unavailable`,不回退到系统 Node 或真实用户目录。 -验证使用真实 Node/npm 的 `environment_check::tests::real_node_npm_environment_versions`,同时用 Node 脚本检查隔离目录及空配置,避免正常机器的 Windows 后备查询掩盖回归。此测试需要本地 Node/npm,默认忽略,定向验收时显式运行。 +验证使用真实 Node/npm 的 `environment_check::tests::real_node_npm_environment_versions`,同时用 `src-tauri/tests/fixtures/environment-probe.cjs` 检查隔离目录及空配置,避免正常机器的 Windows 后备查询掩盖回归。测试通过 `include_str!` 引用独立夹具,不把 Node 环境断言内嵌到生产源码扫描范围。此测试需要本地 Node/npm,默认忽略,定向验收时显式运行;另运行 `npm run ai-game-creator-shell:typecheck` 覆盖配置静态检查。 ## 2026-09-28 AGC 客户端现行分工:离线前端、事件驱动与维护态出口