Skip to content

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

Open

Description

@xiaoyumuxi

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 feat(plugins): 插件注入的工具链框架与 macOS 只读环境设置页 #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,确认没有重复建议。

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2后续考虑:目前不着急,可安排到后续版本area:settingsSettings / 设置enhancementNew feature or requestplatform:macosMacOS的需求review: highghfind author score; see https://ghfind.com

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions