diff --git a/inbound_verify/runtime.py b/inbound_verify/runtime.py index a99582c..fde67ff 100644 --- a/inbound_verify/runtime.py +++ b/inbound_verify/runtime.py @@ -76,13 +76,37 @@ def _wait_cdp_up(port, timeout=60.0): return False +# 【环境兼容】宿主 shell(Codex/VS Code 插件、WorkBuddy 等)会向子进程注入一批与业务 +# 无关的变量,实测会让安能应用登录后反复弹出“获取试用网点接口报错”: +# - HTTP(S)_PROXY=http://127.0.0.1:8800(QuickQ 加速器代理):安能的 wnp.ane56.com +# 接口请求被塞进第三方代理后返回 400/用户未登录; +# - VSCODE_* / CODEX_* / EFC_*:VS Code 扩展宿主注入(IPC、PID、NLS、ESM 等); +# - NODE_TLS_REJECT_UNAUTHORIZED / DEBUG / RUST_LOG 等宿主调试变量。 +# 另:ELECTRON_RUN_AS_NODE=1 会把安能当作纯 Node 运行(拒绝 Chromium 参数、启动即 +# 退出 rc=9);NODE_OPTIONS 同样会干扰。拉起前全部摘掉,尽量还原终端手动启动环境。 +_ANNENG_STRIP_PREFIXES = ("VSCODE_", "CODEX_", "EFC_") +_ANNENG_STRIP_EXACT = { + "NODE_OPTIONS", + "ELECTRON_RUN_AS_NODE", + "HTTP_PROXY", + "HTTPS_PROXY", + "ALL_PROXY", + "NO_PROXY", + "NODE_TLS_REJECT_UNAUTHORIZED", + "NODEFAULTCURRENTDIRECTORYINEXEPATH", + "DEBUG", + "RUST_LOG", + "APPLICATION_INSIGHTS_NO_STATSBEAT", +} + + def launch_anneng(app_path): """以调试模式启动安能 Electron 应用(自动选取空闲端口),返回子进程对象。""" - # 【环境兼容】WorkBuddy 等 shell 会注入 NODE_OPTIONS(含 --use-system-ca), - # Electron 内置 Node 拒绝该 flag 导致安能启动即退出(rc=9)。 - # 拉起前从子进程环境里摘掉 NODE_OPTIONS。 - anneng_env = os.environ.copy() - anneng_env.pop("NODE_OPTIONS", None) + anneng_env = { + key: value + for key, value in os.environ.items() + if key not in _ANNENG_STRIP_EXACT and not key.startswith(_ANNENG_STRIP_PREFIXES) + } port = _find_free_port() print(f">> 以调试模式启动【安能】应用(端口 {port}):{app_path}") proc = subprocess.Popen(