TermiNexus
4c30604ecd
feat(viper): VET 未启用时仍可校验/选择编译器(TS 模拟 check)
手动「选择编译器…」原先只能走 VET 的 check 通道(stdin 写
{"check": path, "id": N} → stdout 单行回执),该通道依附常驻进程与心跳看门狗:
VET 被禁用 / 手动停止 / 启动失败 / confirmSeconds=0 时选编译器直接失败。
现在 EnvironmentTool.CheckExecutable 先看 CanUseCheckChannel()(要求
state === 'running' && confirmSeconds > 0 && 进程在 && stdin 可写;启动中/重启中
也走本地路径,否则要等它扫完一轮才可能进确认窗口、白等超时),不满足即回退
本地模拟:
* 新增 packages/viper/src/executableProbe.ts(LocalCheckExecutable):
① 读 PE:DOS MZ → e_lfanew → PE\0\0 → 可选头 Magic → 节表 → .PRVERSN 段,
取版本串;COFF Machine → arch。小端字段一律用逐字节「或 + 移位」位操作解码
(与 VET VPe.ReadU16/ReadU32 同口径)。
② 跑 <exe> --version:合并捕获 stdout+stderr、5 秒超时(= VET 的
VERSION_PROBE_TIMEOUT_MS)、输出前 5 字符须为 Viper。
* 失败原因串与 VET 的 check_msg 逐字一致(NOT_FOUND / NO_PERMISSION / NOT_EXE /
NO_PRVERSN / PRVERSN_ERR / PREFIX_ERR / TIMEOUT / EXE_ERR,0x<HEX>),故文案与
选择/回报流程完全复用;本地路径只读,不写缓存、不入库。
* VET 处于 running 时行为不变(仍由 VET 校验并写回它的缓存)。
配套文案:进度标题与提示去掉「VET」前缀(正在检查… / 检查未通过:…);
状态栏 tooltip 增加「VET 未运行,选择时由扩展本地检查该 exe」说明。
2026-10-02 18:57:40 +08:00
..
2026-10-02 18:57:40 +08:00
2026-09-28 17:01:18 +08:00
2026-09-29 00:32:18 +08:00
2026-08-07 03:33:29 +08:00
2026-10-02 18:57:40 +08:00