/** * @file python-command.ts — 统一解析可用的 Python 可执行命令 * @description * 不同机器/系统下 Python 命令名不一致:多数 Linux/macOS 仅提供 `python3`, * 而部分 Windows 发行版(以及本机场景)只注册了 `python`(指向 Python 3.x), * 没有 `python3`。此前该命令名散落在多处硬编码(local-sandbox、skill-resources、 * mcp-config.helper 等),导致「本机只有 python 没有 python3」时部分入口直接 ENOENT 失败。 * * Windows 还存在「应用执行别名」陷阱:Microsoft Store 会在 PATH 中注入一个 0 字节的 * `python3.exe` 占位壳(AppInstallerPythonRedirector.exe),`where`/`command -v` 能找到它, * 但调用时并不执行脚本(静默退出码 49,无任何 stdout/stderr)。因此**探测必须以"实际试跑"为准**, * 而非仅检查名字是否在 PATH 中可解析,否则会误判该假壳"可用"。 * * 本模块把「探测可用 Python 命令」内聚到唯一来源: * - 候选顺序 `python3` → `python` → `py -3`(py -3 指向 Windows Store / 系统已注册的 Python 3); * - 每个候选均通过"实际运行一条验证语句"判定可用,过滤掉 Store 假壳; * - 探测结果进程内缓存,避免每次 spawn 重复探测; * - 若全部不可用,返回默认 `python3` 并让上层 spawn 时暴露明确 ENOENT 错误。 */ /** * 解析当前环境可用的 Python 可执行命令名(带缓存)。 * 优先 `python3`,回退 `python`,再回退 `py -3`,全部不可用则返回默认 `python3`。 */ export declare function resolvePythonCommand(): Promise; /** 重置缓存(主要用于测试或多环境切换场景) */ export declare function resetPythonCommandCache(): void; /** * 同步解析当前环境可用的 Python 可执行命令名(带缓存,复用 resolvePythonCommand 结果)。 * 用于无法 await 的同步上下文(如 buildMCPConfig)。 */ export declare function resolvePythonCommandSync(): string; /** * 当所有候选均不可用时,给出的可操作排查建议(尤其针对 Windows 应用执行别名陷阱)。 */ export declare const PYTHON_UNAVAILABLE_HINT: string; //# sourceMappingURL=python-command.d.ts.map