[Feature] PATH 上的命令参与 Core 工具链解析(由登录 Shell 提供 commandHomes)

Abierto
#1,641 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
30/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
rust, swift
Área
desktop, tooling

Línea de trabajo

Start with rust/lithe-core/src/toolchain/resolution.rs to see how command candidates read commandHomes, then the macOS fallback in MacToolchainSettingsLoader.swift and its display in ToolchainEnvironmentSettingsView.swift. Read the contract in shared/contracts/plugins/v1/toolchains.md before changing anything. Done means a PATH-only command is either selected with a version by Core or skipped with a Core reason, verified with temporary-directory tests that never touch the developer's PATH.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

area:settings enhancement P2 platform:macos review: high
Problem to solve / 要解决的问题

工具定义可以声明 command 候选,也就是在 PATH 上按命令名查找(例如 java、mvn)。Core 的 toolchains.resolve 只在输入里有 commandHomes[命令名] 时,才检查并选择这个候选。契约(shared/contracts/plugins/v1/toolchains.md)还规定,commandHomes 必须来自原生的登录 Shell 适配器,不能按命令名猜测。

macOS 运行环境设置页(PR #1581)目前没有这个来源,不传 commandHomes,所以 PATH 上的命令永远不会被 Core 选中。作为替代,Core 在所有层都跳过时,页面把加载器在 PATH 上找到的第一个命令显示成“版本未验证”的兜底。这条命令没有经过 Core 的路径安全检查,也没有运行版本探测。

影响:

  • 有些工具只在 PATH 上:没有设置 home 变量,插件的扫描规则也没覆盖到。这类工具在页面上只能显示“版本未验证”,看不到版本。
  • 将来启动流程如果提供了 commandHomes,实际选择会和页面显示的不一致。
Proposed solution / 建议方案
  1. 登录 Shell 适配器提供原始事实。 读取环境时,按已启用定义声明的命令名,在登录 Shell 的 PATH 中定位可执行文件,并给出规范路径(解析链接后的真实路径)。
  2. 由 Core 推导 home。 Core 按定义的 executableLayouts,从规范路径反推 home,作为 commandHomes 参与解析,并照常做路径安全检查和版本探测。推导规则放在 Rust Core,宿主不按工具名特判。
  3. 页面改为显示 Core 的结果。 去掉现在的“版本未验证”兜底,改为显示 Core 对命令候选的结果:已选中并带版本,或者 Core 给出的跳过原因。
  4. 如需改契约,同步插件文档仓库。 如果推导方式要改 commandHomes 的契约含义或新增字段,修改 shared/contracts/plugins/v1/ 后,合并时同步到 lithe-plugin-docs。

验收方式:用临时目录模拟以下情况:

  • PATH 上的命令及其链接;
  • 布局匹配和不匹配;
  • 命令落在工作区内(必须被拒绝);
  • 版本探测成功和失败。

测试不读取开发者本机的 PATH,也不运行本机工具。

Target platform / 目标平台

macOS

Area / 模块

Settings / 设置

Priority / 优先级

P2 / 后续考虑:目前不着急,可安排到后续版本

Alternatives considered / 已考虑的替代方案
  • 宿主按命令名猜 home(例如把 /x/bin/java 的上两级当作 home)。不采用。契约禁止,而且不同工具的布局不同,猜错就会导出错误的 home 变量。
  • 保持现状,只显示“版本未验证”。 这是当前做法,不会误导用户以为已经校验过,但只靠 PATH 安装的工具永远拿不到版本,页面和将来的启动结果也可能不一致。
Additional context / 补充信息
  • 相关:PR #1581(Core 解析接入设置页)。
  • 代码位置:
    • rust/lithe-core/src/toolchain/resolution.rs:command 候选读取 commandHomes;
    • macos/Sources/Lithe/Platform/MacOS/Runtime/MacToolchainSettingsLoader.swift:在 PATH 上找第一个命令作为兜底;
    • macos/Sources/Lithe/Views/App/ToolchainEnvironmentSettingsView.swift:Core 跳过时显示兜底。
  • 决策记录:.agents/notes/proposed/architecture/2026-10-31-plugin-injected-toolchains.md 中“macOS 设置页的解析取舍”一节,已把这一点记为已知限制。
  • 依据:源码阅读,不是发布包复现。Windows 运行环境页尚未接入,本 Issue 只针对 macOS。
Checklist / 提交前检查
  • I searched existing issues for duplicates. / 我已搜索现有 Issue,确认没有重复建议。
Lenguaje dominante
TypeScript
Estrellas
1.8k
Forks
151
Merge medio
12 h 6 min
PR fusionados (30 d)
365

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de 1lck/Lithe-IDEA

Todos los issues de 1lck/Lithe-IDEA

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.