Skip to content

feat(plugins): #1495 Maven 模型、配置、测试与服务运行迁移(阶段 D 进行中) - #1558

Draft
Mucheen wants to merge 72 commits into
1lck:previewfrom
Mucheen:codex/issue-1495-maven-migration
Draft

Mucheen wants to merge 72 commits into
1lck:previewfrom
Mucheen:codex/issue-1495-maven-migration

Conversation

@Mucheen

@Mucheen Mucheen commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator

Maven 的模型、配置、构建、测试和服务运行逐项改由插件 Provider 持有,宿主保留通用编排、受保护存储与进程生命周期。仍为 Draft,不关闭 #1495,不合并或发布。

用户已授权先固定预集成 #1581 的 b87c7f60dd80f851695d7052b5287a5c93c7fa46,调整原 review 的等待顺序;本分支包含该依赖的合入检查点 c4c74fb8a。当前验证提交为 7b3fe80391f47cb84ff6db7b1802b698f67c8116。

行为与 review 修正

  • macOS 原生 Build 与 Agent 共用实例、任务、输出及停止,删除 MavenService/MavenFeatureModel、旧 Maven 任务进程、配置副本、文本依赖树与已替换 fallback;模型驱动源码根、依赖导航、模块展示和语言导入。
  • v7 原生配置由提供者解释并编辑。Core 不编辑 XML:宿主分配私有暂存,提供者返回不含文档的版本/哈希回执;两端校验身份、权限、大小和版本后原子发布,并向同一提供者回读。取消、冲突和迟到回复清理暂存,不覆盖外部修改或把秘密写进 RPC。
  • v8 macOS 直接消费通用 BuildTestResults,删除 Maven 报告类型和文本转换;保留摘要、调用次数、耗时、来源及不透明重跑引用。JDT 的精确标识原样交给 Maven,覆盖参数化、Unicode、同名模块与失败报告;Windows 行标记保留兼容别名。
  • buildSystems 4 的准备任务按通用 purpose/sourceRoles 声明;宿主按当前模型中的工程和源码角色选择,拒绝歧义,不约定 Maven 任务 ID。
  • 自动 Run 由当前运行声明与目标生成 build.provider / extensions.build,独立于 Java 导入。Core 删除 mavenRunProvider 与框架名单,稳定选择器、完整模型指纹、目标撤回和用户覆盖统一生效;旧 application 引用保留协议 4 的不透明参数通道。
  • extensions.build-run 保存精确 runtimeArguments、entrypoint 和按次 Build 选项;省略保留、显式清空、团队/本机叠加和排序规范化均受验证。两端参数文本使用同一 fixture,可逆处理空参数、空格、引号、反斜杠和 Unicode;Windows 保存携带独立通用选项快照。
  • 临时旧 Run v1/v2 转换器保留 ID、默认项、层级、目录、环境、argv 和未知元数据,转移可确认活动偏好。隐式空模块目标保留给 Maven 自己处理 defaultGoal。发布前后校验来源字节、键清单、偏好标记及生成租约;新 local 文件为 0600,失败只回滚自身输出并清理空目录。自定义工具等尚无法无损解释的输入保留原样并拒绝。迁移器仅保留稳定 N/N+1,在 N+2 前删除。
  • 正常 Provider 输入必须带完整通用引用;Core 不再解释旧 Maven 扩展。macOS 删除按旧框架/模块名称进入新 Provider 的分支,Windows 拒绝把旧数字 debugPort 静默当成普通运行。
  • v11 服务调试走当前 DebugAdapter Registry,传递公开 adapterID/configurationType 与 loopback connection,跨模型准备、进程启动、监听和 attach 核对包及注册代次。Java Support 声明同包 JDT 托管适配器,Maven 只引用公开配置类型;本入口移除 runtime:jvm 和内置 Java attach。
  • 固定工具链基础后,macOS Build/Provider Run 使用独立的运行前解析:现有目录 pin、声明布局、版本探测、最低版本和原生文件证据交给同一 Core 四层解析器。设置页缓存不授予启动权;结果直接由操作持有,不留共享执行许可槽。固定值失效不回落,Wrapper 只在显式操作时允许;输入、插件或上下文变化拒绝。已校验的 Provider 不可用回复可继续检查低层,安全/身份/取消失败不降级。
  • Maven 使用社区命名空间工具 ID,Java 短 ID 由独立验证官方来源的 Java Support 定义。删除新增的 project-maven-jdk 注册及 Java 准备入口按 Maven 名字选工具的代码;删除归属投影的 mavenMinimumVersion、mavenWrapper 与 Core Wrapper properties 解析。原有 Java 消费者使用的 project-maven 暂留。
  • 当前项目归属改为完整 build={pluginID,buildSystemID,root,projectID};新 Java 生成结果只保存 Java 主类、模块、源码角色与此引用,不产出 Maven 扩展或 Maven 工具绑定。目录覆盖、伪造身份或置空扩展不能替换当前模型的归属;原生导入精确匹配四个身份,模型撤销后拒绝。JDT 尚未返回源码时也保留 Provider 已知的 Java 编译版本要求。
  • Windows 新增同一 Core 上的原生 Build 工具解析基础:目录 pin、声明扫描、Shell 变量/命令、版本和文件身份重查;只向 RPC 转发声明导出与明确输入,固定值不依赖低层。未实现的 Provider 查询明确拒绝,不猜官方来源。删除 Windows 新增的 project-maven-jdk 特例,共享消费 fixture 用两个命名空间工具和显式版本证明通用性;产品准入保持关闭。
  • 最低版本下的 Wrapper 在 Core 确认项目代码身份后,仅于明确执行时探测,再以原最低版本解析;打开工程不执行它。Build 保留声明的全部 PATH 附加目录。
  • Node/Java SDK 重写未发布的 v7/v11 并保留 v8–10;正式 SDK lock、下载 URL 与校验值不改,公开契约镜像只在宿主合入后按最终 preview SHA 同步。

验证

  • 当前本地 Core 全量 1,573 项、macOS 30 项计时通过,另 1 项条件跳过;前批通用归属回归 326 项通过(有重叠)。真实 Maven 目录 pin/Wrapper 和原生配置、Run 模型回归均覆盖;两个插件目录清单不变。
  • Windows 前端 Run/Build 与会话回归 465 项、类型检查、生产构建通过(运行于 macOS)。Project crate 68 项中 64 项通过,包含新增 9 项通用定义回归;4 个既有 watcher 在 macOS 超时,保留失败日志与原门槛。Windows host 的生产/测试编译检查仍只有两项 macOS 缺失的 Windows API 错误。
  • 真实 Core→Maven 20 步、Windows TypeScript→Core→Maven 11 步,以及当前源码上的 SDK Node/Java/Rust 与 Build/配置/报告/运行选项 E2E 6 项通过。
  • Maven Java 8 / runner 与 3.6.3 CI 通过,固定宿主 3d1656ed4、SDK 23e455a 和 Maven 5f701c9;runner 另覆盖 Windows TypeScript 工作流及 Java 17 框架调试。
  • SDK Node 20 / Java 8 与显式宿主 E2E 通过;SDK 0ce8335 只增加显式验证的原生配置/报告/运行选项开关。整体 CI 仍因公开契约相对 preview 的漂移检查失败,按宿主实际合入后同步的顺序处理。
  • 用户指定的现有 Windows CI 当前针对本提交单次运行:41315520152。前两轮前端通过,Rust/JDT 先后被 Unix 专用工具与暂存输出 fixture 阻断;本批已核查并改为原生路径,保留相对/越界/同源拒绝,未放宽生产校验。原生最终结果仍待作业结束。
  • 契约、服务/Windows 边界、Core 注释、测试稳定性、运行时 bundle 只读、资源复用、i18n、Agent Notes 与精确 PR 基线的功能矩阵门禁通过。三个 PR 继续 Draft,不合并或发布。

剩余退出条件

旧自定义工具/全局选择的无损迁移,剩余 Core Maven 业务与现有 Java 消费者切换,Windows 的 Provider/Agent/Java 消费者替换、Registry 调试与旧数据迁移,以及完整两端 UI/安装包验收仍未完成。Windows 产品准入继续关闭;普通 Java/JDT 完整后端迁移按阶段 E 处理。

宿主实际合入后,依次同步公开契约、完成 SDK Draft #5 和 Maven Draft #8 的正式依赖发布与最低运行时验证。本轮不发布或编造发行锁定值。逐项删除账本见 docs/development/issue-1495-plugin-migration-remaining-plan.md。

Mucheen and others added 23 commits October 26, 2026 23:31
…sue-1495-workspace-capabilities

# Conflicts:
#	macos/Resources/en.lproj/Localizable.strings
#	macos/Resources/zh-Hans.lproj/Localizable.strings
#	macos/Sources/LitheModuleAPI/Plugins/PluginTypes.swift
#	shared/i18n/messages.json
@xiaoyumuxi

Copy link
Copy Markdown
Collaborator

构建工具的 API 都 7 版本了么,记得同步 docs 仓库里面的开发文档呀

xiaoyumuxi added a commit that referenced this pull request Oct 31, 2026
* feat(plugins): 声明式语法高亮与运行标记(API-25/27/29)

- languages 2:插件语言可带 Monarch 语法和编辑器配置,Core 校验,纯语法插件免重启
- runMarkers 1:backend 2 插件函数回答可运行行,编辑器画运行按钮,点击经 commands/didRun 带 runMarker
- 契约、fixture、Agent Note、计划文档与功能矩阵同步更新;Windows 暂不支持

Refs #570

* feat(plugins): 独立编辑器高亮与动作扩展

- languages 2 提供静态语法和独立编辑配置,插件正则在可终止 worker 中运行\n- editor/registerActions 运行期注册文本动作,点击复用普通函数调用,不扩张 Run/LSP/Build/Debug 领域契约\n- 补齐文档版本、动作租约、取消与清理、独立工具后端启用及安全模式边界\n- 更新 Skill、审查规则与决策笔记,总结 #1581/#1558 的架构边界\n- 同步契约、fixtures、中英词条、功能矩阵与资源复用说明\n\nRefs #570\nReworks #1617

* docs(plugins): 明确 API-25 JSON 贡献的支持范围与局限

区分包内静态 JSON 贡献与尚未开放的运行期 Provider 注册、替换和释放;说明独立语义 Provider、新引擎适配及平台、SDK 和验收限制。同步计划、架构笔记、正式契约与功能矩阵。

* fix(plugins): 修复编辑器扩展审查中的生命周期与高亮问题

动作刷新立即确认调度并隔离非致命失败,整批收集共享八秒期限并在撤销时清理计时任务。

Core 保留校验后的 grammar 原始文本,worker 按源顺序解析 cases 并显式默认 root;配置-only 别名借用既有 tokenizer,重映射 token 语言身份以保留独立注释配置。

模块状态观察弱引用 runtime,补齐有界、确定性的 Swift/Rust/WebKit 回归与测试文档模型清理,同步契约、Agent Note 和功能矩阵。

验证:57 项 Swift、1459 项 Rust、39 项编辑器和 119 项真实 WebKit 测试通过;静态边界、i18n、只读 bundle、资源复用与矩阵门禁通过。未执行 Windows 原生构建或打包安装验收。

Refs #1617, #570
Mucheen and others added 17 commits October 31, 2026 18:24
按 1lck#1581 评审后的改写计划重做:宿主不认识任何工具,工具定义、版本管理器
(提供方)全部由插件声明;Core 只做校验和四层解析,不解析 mise 等管理器
的私有格式。

- 契约:新增 toolDefinitions 1、toolchainProviders 1,executableResolution
  增加 v2(只用于工具定义候选);同步 schema、README、toolchains.md、
  fixture 和 rust-core-api.md;proposals/toolchains/ 放完整方案草案
- Rust Core:新领域模块 rust/lithe-core/src/toolchain/(定义注册表、
  提供方答复校验、目录固定、固定/项目文件/全局/自动四层解析、版本匹配、
  扫描计划)和六个 toolchains.* 命令,全部只处理宿主快照,不启动进程、
  不扫描、不写文件
- macOS:设置 › 构建新增「运行环境」「环境来源」两页,内容来自已启用
  插件的声明和磁盘上的真实文件;未实现的添加、切换、保存、查询入口不显示
- 登录 Shell:新增只读 inspect,来源页显示读取状态、变量数、耗时和
  PATH 各目录来源;重新读取不改变本进程 PATH
- Debug 预览入口 --toolchain-settings-demo / --toolchain-sources-demo
- Agent Note、设置层级 Note、功能矩阵和中英词条同步

Refs 1lck#1514
工具的已安装版本有两条途径,可以只用其一或同时使用:
- 声明式扫描:工具定义的 discovery/homeLayouts/version 由宿主展开,不运行
  插件代码;可用的根和通配写法固定,新的安装形态交给提供方回答。
- 提供方查询:toolchainProviders 通过 toolchains/query 返回安装和要求。

- watchFiles 改为可选:不声明的提供方只报告安装,答复里带版本要求会被拒绝;
  定义工具的插件也可以作为自己工具的提供方。
- 自动层把两条途径合成一个候选集合:同一规范化目录只算一次,来源标注优先
  提供方、其次 host:system,只用于显示;不同目录同版本仍报冲突。
- discoveryPlan 对每个工具同时列出 scans 和 providers。
- macOS 环境来源页对只报告安装的提供方显示「只报告已安装的版本」。

同时修复评审的两个 P2:
- 符号链接安装在解码时已规范化,解析时却按原始路径查证据而误判 unsafePath;
  现在文件证据同时证明其规范化目标,证据互相矛盾时拒绝快照。
- 环境变量候选声明的 path 布局被忽略、总取第一个布局;现在按声明的布局选择。
Continue 1lck#1495 and PR 1lck#1558 review corrections. Keep provider run snapshots independent of Java imports, preserve generic overrides, and document remaining Maven and toolchain migration.
- Core 新增 toolchains.candidates:列出一个工具的登录 Shell home 变量、扫描到的安装、跳过原因和自动层的选择;和 resolve 共用事实校验,宿主分两轮调用完成版本探测,工作区内的目录在探测前拒绝
- toolchains.discoveryPlan 增加 pathPrepend 模板和各平台适用的 home 变量
- 新增 MacToolchainDiscovery:按插件声明展开扫描,只探测 Core 返回的可执行文件;扫描根、条目、文件事实、安装数、探测数、并发和总时长都有上限,超出时给出诊断
- 运行环境页:全局卡片显示 home 变量和探测到的版本,PATH 命令标为版本未验证;自动卡片列出真实安装、选中项、同版本冲突和跳过数,路径显示扫描到的条目名
- 加载器只把登记在官方目录、并经内置或插件市场安装的插件标为官方来源
- 预览改用完整的样例清单,扫描本机真实安装
- 更新契约 toolchains.md、rust-core-api.md、Agent Note、功能矩阵和中英词条
Continue 1lck#1495 review fixes by preserving exact runtime arguments, opaque entrypoints and declared Build options in Run v2. Keep user directory overrides when saving selectors and use normalized per-run options without changing Build defaults.
运行环境、环境来源两页插在项目页和运行配置之间,使 SettingsCategory
声明顺序(搜索结果顺序)与侧栏构建分组顺序不一致,
settingsCategoryPlacesProjectAndRunBetweenKeymapAndTerminal 在 CI 失败。
把两页的 case 移到项目页之前,测试改为断言 Keymap 与 Terminal 之间
恰好是构建分组,且分组以项目页、运行配置结尾。
test(macos): 设置页声明顺序与构建分组保持一致(修复 1lck#1581 的 macOS CI)
- Core: lsp.toolchainRequest 与 litheToolchains 协商,原样回传回复交 toolchains.decodeReply
- Core: candidates 接受 providerInstallations 并保留提供方归属
- 修复别名链接 home 只有链接路径事实时被判 unsafePath(机器人 P2)
- macOS: 启动或复用插件后端查询,全局+逐目录独立 operationID/代次,超时与取消
- macOS: watchFiles 与回复 watch 变化整份重查,短时间事件合并
- 设置页显示提供方要求、版本与查询结果;文案走 shared/i18n
- 更新契约、功能矩阵与 Agent Note
feat(plugins): macOS 设置页接入工具链提供方查询 (1lck#1581)
Replace the new Maven reactor projection with opaque build ownership and protect it from document overrides. Preserve provider Java floors before source discovery, admit implemented macOS tool capabilities, retain declared PATH entries, and make the native-configuration fixture valid on Windows.
…idence

Add bounded native capture for directory pins, declaration scans and shell candidates; keep provider queries and official origin closed until implemented. Preserve declared exports without inferring tool homes or forwarding inherited secrets. Probe project launchers only for explicit actions that require version evidence. Remove the unhosted Maven JDK alias and replace its fixture with generic tools. Fix all native-configuration staging fixtures for Windows without relaxing path validation.
1lck added a commit that referenced this pull request Nov 1, 2026
* feat(workspace): enforce directory indexing exclusions (#958)

* fix(workspace): honor indexing ownership across Windows roots

Fix attached-root LSP gates and reevaluate documents when workspace roots change. Carry request-local ownership through inventory, search, replacement and incremental index caches; preserve scoped search when unrelated roots are unavailable.

Disable unsupported remote indexing settings, localize settings failures, normalize both Java exclusion test expectations, and register regressions in Windows CI.

* fix(workspace): 修复索引租约生命周期与跨窗口同步

* docs(workspace): 记录复审修复与 macOS 原生验收证据

* fix(lsp): 保留 Windows 冷启动索引策略的原生路径身份

* fix(macos): 保持打开身份并修复索引回归验证

将会话打开代次与资源投影代次分开,保留立即 Run 的等待意图及同根重开隔离。
避免无待确认 Java 决策时重复发布空值,并使设置与混合规则夹具等待真实生命周期边界。
为 Git 观察 CI 补齐逐项报告,按原始输出活性检测 Swift 停顿,保留既有断言与预算。
记录通过的 126 条受影响 Swift 及 116 条身份消费者验证。

* feat(plugins): 独立编辑器高亮与动作 API,复用普通函数调用 (#1617)

* feat(plugins): 声明式语法高亮与运行标记(API-25/27/29)

- languages 2:插件语言可带 Monarch 语法和编辑器配置,Core 校验,纯语法插件免重启
- runMarkers 1:backend 2 插件函数回答可运行行,编辑器画运行按钮,点击经 commands/didRun 带 runMarker
- 契约、fixture、Agent Note、计划文档与功能矩阵同步更新;Windows 暂不支持

Refs #570

* feat(plugins): 独立编辑器高亮与动作扩展

- languages 2 提供静态语法和独立编辑配置,插件正则在可终止 worker 中运行\n- editor/registerActions 运行期注册文本动作,点击复用普通函数调用,不扩张 Run/LSP/Build/Debug 领域契约\n- 补齐文档版本、动作租约、取消与清理、独立工具后端启用及安全模式边界\n- 更新 Skill、审查规则与决策笔记,总结 #1581/#1558 的架构边界\n- 同步契约、fixtures、中英词条、功能矩阵与资源复用说明\n\nRefs #570\nReworks #1617

* docs(plugins): 明确 API-25 JSON 贡献的支持范围与局限

区分包内静态 JSON 贡献与尚未开放的运行期 Provider 注册、替换和释放;说明独立语义 Provider、新引擎适配及平台、SDK 和验收限制。同步计划、架构笔记、正式契约与功能矩阵。

* fix(plugins): 修复编辑器扩展审查中的生命周期与高亮问题

动作刷新立即确认调度并隔离非致命失败,整批收集共享八秒期限并在撤销时清理计时任务。

Core 保留校验后的 grammar 原始文本,worker 按源顺序解析 cases 并显式默认 root;配置-only 别名借用既有 tokenizer,重映射 token 语言身份以保留独立注释配置。

模块状态观察弱引用 runtime,补齐有界、确定性的 Swift/Rust/WebKit 回归与测试文档模型清理,同步契约、Agent Note 和功能矩阵。

验证:57 项 Swift、1459 项 Rust、39 项编辑器和 119 项真实 WebKit 测试通过;静态边界、i18n、只读 bundle、资源复用与矩阵门禁通过。未执行 Windows 原生构建或打包安装验收。

Refs #1617, #570

* fix(indexing): preserve scan ownership and snapshot publication

Retry current-workspace indexing cancellation without retiring another owner, publish only the latest complete inventory, and restore saved sessions once per workspace. Apply scoped search before caps and cursors, preserve dotted provider configuration siblings, and normalize Windows mark identity and localized read failures.

* docs(indexing): record final macOS native acceptance evidence

* fix(search): localize indexing failures and synchronize deferred Run tests

* test(macos): synchronize every initial Run inventory release

* fix: preserve excluded history and validate indexing marks

* fix(macos): 修复分支列表悬停长分支名时触控板无法滚动 (#1621) (#1625)

* fix(macos): 修复分支列表悬停长分支名时触控板无法滚动 (#1621)

触控板手势绑定在开始时的窗口上。悬停扩展面板收到首个滚动事件就关闭,
导致同一手势的后续事件全部丢失。手势期间改为隐藏面板并继续转发给列表,
手势结束后再关闭。鼠标滚轮行为不变。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(matrix): 记录分支列表触控板滚动的验证要求 (#1621)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(macos): 手指停顿时保留滚动手势,点击立即回收隐藏面板 (#1621)

手势进行中的回收超时从 1 秒放宽到 10 秒,避免停顿后继续滚动时丢失手势。
隐藏面板收到点击时立即回收,并在功能矩阵补充对应验收步骤。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(macos): remove push dialog file request ordering race

---------

Co-authored-by: ZJUSCODE <ZengJun326@outlook.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Yao Jingxi <23722032@bjtu.edu.cn>

* fix(macos): forward hidden branch expansion clicks and clean up on close (#1629)

* fix(workspace): preserve directory roles and indexing watcher ownership

* test(windows): use canonical roots in indexing lifecycle fixtures

* test(windows): identify the owned Run fixture descendant explicitly

* feat(macos): 状态栏内存只显示图标,帧率去掉图标并收紧间距 (#1630)

- 内存指示器只保留内存芯片图标,不再常驻显示“总计 / Lithe”数值;
  悬停提示仍给出总计、Lithe、LSP、服务内存,点击打开原有的托管内存详情,
  VoiceOver 读出“托管内存”和当前总计。
- 帧率只显示“60 FPS”文字,去掉速度表图标。
- 新增 18pt 的状态栏紧凑图标按钮样式,只读锁和内存图标改用它,
  不再沿用 28pt 工具窗口按钮留出的大块空白。
- 删除不再使用的 "Total %@" 词条并重新生成本地化资源。
- 更新 memory-monitor 功能矩阵的 macOS 证据与验收说明。

* fix(macos): 虚拟化后台服务退出列表并补充滚动性能规范 (#1627) (#1633)

* fix(macos): virtualize background service exit selection (#1627)

* fix(macos): keep background service accessibility selection live

* fix(agent): 修复 Codex 会话启动与历史漏查,新增供应商筛选 (#1632)

* fix(agent): restore Codex history and add provider filtering

* fix(agent): honor manual archive collapse under provider filters

* feat(macos): 彩色 LSP 状态菜单与普通日志标签页 (#1631)

* feat(macos): 增加彩色 LSP 状态菜单与普通日志标签页

* fix(macos): LSP 入口常驻并仅由启用插件注入服务器

* fix(lsp): 等待重启关闭完成并保留局部索引重置状态

* fix(markdown): preserve inline HTML image layout and alignment (#1623) (#1635)

* feat(markdown): render PlantUML diagrams offline on macOS (#1637)

* feat(markdown): add offline chemistry formulas and subscripts on macOS (#1636)

* feat(macos): 终端标签任意拖拽分屏并保留 PTY (#1638)

* feat(macos): 终端标签任意拖拽分屏并保留 PTY

- 终端标签改用 AppKit 拖拽会话与私有 pasteboard,避免 Monaco 接收文本拖放
- 工具窗终端可拖入编辑器边缘或空编辑器,编辑器终端可拖回工具窗
- 抽出 EditorGroupLayout.splitting 复用分屏几何,补充模型、拖拽与 PTY 测试

Refs #1622

* fix(macos): preserve terminal drop order and deduplicate split previews

- Limit the native tool-window drop overlay to the canvas so tab-strip
  before/after insertion remains available for terminals dragged from editors.
- Publish editor-group preview targets only when they change, including
  repeated clearing and drag lifecycle cleanup.
- Add focused native overlay geometry and preview publication regressions.
- Update the docking Agent Note and terminal capability matrix evidence and
  verification steps without claiming unperformed runtime verification.

Validation: six focused Swift tests passed on Swift 6.3.3 with macOS 26.5 SDK;
runtime bundle, architecture, i18n, Agent Notes and matrix static gates passed.
The exact PR-based push tree also passed the static gates.

Refs #1638

---------

Co-authored-by: Yao Jingxi <23722032@bjtu.edu.cn>

* fix: align project JDK, isolate application sessions, and improve search (#1642) [skip ci]

Use the selected project JDK in JDT configuration on both platforms. Give Windows applications independent cancellable sessions across Run, IDE API and Debug, with isolated failure output. Avoid blocking cold file/text search on content index warmup and improve macOS search sizing and result layout. Include shared fixtures, regression coverage and architecture notes.

* feat(plugins): 插件注入的工具链框架与 macOS 只读环境设置页 (#1581)

* feat(plugins): 插件注入的工具链框架与 macOS 只读环境设置页 (#1581)

按 #1581 评审后的改写计划重做:宿主不认识任何工具,工具定义、版本管理器
(提供方)全部由插件声明;Core 只做校验和四层解析,不解析 mise 等管理器
的私有格式。

- 契约:新增 toolDefinitions 1、toolchainProviders 1,executableResolution
  增加 v2(只用于工具定义候选);同步 schema、README、toolchains.md、
  fixture 和 rust-core-api.md;proposals/toolchains/ 放完整方案草案
- Rust Core:新领域模块 rust/lithe-core/src/toolchain/(定义注册表、
  提供方答复校验、目录固定、固定/项目文件/全局/自动四层解析、版本匹配、
  扫描计划)和六个 toolchains.* 命令,全部只处理宿主快照,不启动进程、
  不扫描、不写文件
- macOS:设置 › 构建新增「运行环境」「环境来源」两页,内容来自已启用
  插件的声明和磁盘上的真实文件;未实现的添加、切换、保存、查询入口不显示
- 登录 Shell:新增只读 inspect,来源页显示读取状态、变量数、耗时和
  PATH 各目录来源;重新读取不改变本进程 PATH
- Debug 预览入口 --toolchain-settings-demo / --toolchain-sources-demo
- Agent Note、设置层级 Note、功能矩阵和中英词条同步

Refs #1514

* feat(plugins): 工具链安装同时支持声明式扫描与提供方查询 (#1581)

工具的已安装版本有两条途径,可以只用其一或同时使用:
- 声明式扫描:工具定义的 discovery/homeLayouts/version 由宿主展开,不运行
  插件代码;可用的根和通配写法固定,新的安装形态交给提供方回答。
- 提供方查询:toolchainProviders 通过 toolchains/query 返回安装和要求。

- watchFiles 改为可选:不声明的提供方只报告安装,答复里带版本要求会被拒绝;
  定义工具的插件也可以作为自己工具的提供方。
- 自动层把两条途径合成一个候选集合:同一规范化目录只算一次,来源标注优先
  提供方、其次 host:system,只用于显示;不同目录同版本仍报冲突。
- discoveryPlan 对每个工具同时列出 scans 和 providers。
- macOS 环境来源页对只报告安装的提供方显示「只报告已安装的版本」。

同时修复评审的两个 P2:
- 符号链接安装在解码时已规范化,解析时却按原始路径查证据而误判 unsafePath;
  现在文件证据同时证明其规范化目标,证据互相矛盾时拒绝快照。
- 环境变量候选声明的 path 布局被忽略、总取第一个布局;现在按声明的布局选择。

* feat(plugins): macOS 设置页接入声明式扫描与版本探测 (#1581)

- Core 新增 toolchains.candidates:列出一个工具的登录 Shell home 变量、扫描到的安装、跳过原因和自动层的选择;和 resolve 共用事实校验,宿主分两轮调用完成版本探测,工作区内的目录在探测前拒绝
- toolchains.discoveryPlan 增加 pathPrepend 模板和各平台适用的 home 变量
- 新增 MacToolchainDiscovery:按插件声明展开扫描,只探测 Core 返回的可执行文件;扫描根、条目、文件事实、安装数、探测数、并发和总时长都有上限,超出时给出诊断
- 运行环境页:全局卡片显示 home 变量和探测到的版本,PATH 命令标为版本未验证;自动卡片列出真实安装、选中项、同版本冲突和跳过数,路径显示扫描到的条目名
- 加载器只把登记在官方目录、并经内置或插件市场安装的插件标为官方来源
- 预览改用完整的样例清单,扫描本机真实安装
- 更新契约 toolchains.md、rust-core-api.md、Agent Note、功能矩阵和中英词条

* test(macos): 设置页声明顺序与构建分组保持一致 (#1581)

运行环境、环境来源两页插在项目页和运行配置之间,使 SettingsCategory
声明顺序(搜索结果顺序)与侧栏构建分组顺序不一致,
settingsCategoryPlacesProjectAndRunBetweenKeymapAndTerminal 在 CI 失败。
把两页的 case 移到项目页之前,测试改为断言 Keymap 与 Terminal 之间
恰好是构建分组,且分组以项目页、运行配置结尾。

* feat(plugins): macOS 设置页接入工具链提供方查询 (#1581)

- Core: lsp.toolchainRequest 与 litheToolchains 协商,原样回传回复交 toolchains.decodeReply
- Core: candidates 接受 providerInstallations 并保留提供方归属
- 修复别名链接 home 只有链接路径事实时被判 unsafePath(机器人 P2)
- macOS: 启动或复用插件后端查询,全局+逐目录独立 operationID/代次,超时与取消
- macOS: watchFiles 与回复 watch 变化整份重查,短时间事件合并
- 设置页显示提供方要求、版本与查询结果;文案走 shared/i18n
- 更新契约、功能矩阵与 Agent Note

* feat(plugins): 运行环境页每行生效来源改由 Core toolchains.resolve 决定 (#1581)

- 每个查询过的目录、每个工具调用一次 toolchains.resolve,摘要、徽标和
  “第几层生效”都读它的结果,视图不再自己按固定 → 项目 → 全局 → 自动排序
- 解析与提供方查询共用同一份文件事实;同一轮查询的提供方共享代次,
  每次查询仍有独立 operationID
- 固定值交给 Core 校验:只有固定值的目录只解析它固定的工具(每次加载
  最多 256 个),固定的 home 经 toolchains.candidates 检查后探测,
  不会出现在自动检测列表;不可用时终止失败,不回落
- 未安装的项目要求记为 unmet 并退到下一层;Core 无法给出结果时给出诊断
- 已知限制写入提案 Note 并建 Issue:冲突选择与写入 #1639、
  项目 wrapper #1640、PATH 命令 commandHomes #1641
- 新增文案走 shared/i18n 并重新生成

* fix(plugins): 加载途中 context 变化的回复不再显示项目要求 (#1581)

- 同一目录一轮查询里,context 与本轮不一致的提供方回复不会进入 toolchains.resolve,
  但它的项目要求仍被写进页面的 requirements,导致页面显示的要求和 Core 的生效结果来自
  两个不同的 context;现在只记录进入本轮的回复的项目要求,全局要求和安装列表不变。
- 新增 aReplyUnderAChangedContextIsLeftOutOfItsDirectory 测试:两个提供方在加载途中拿到
  不同代次的 context,断言只有进入本轮的提供方要求被显示、Core 用它解析;修复前该测试失败。
- 测试夹具 providerSource 支持声明多个提供方,原有用例行为不变。
- Agent Note 更正“每个路径只读一次”的说法:查询阶段和解析阶段分两次读取事实,单次解析
  内部一致;并补充 context 变化时回复不进本轮的取舍。

* feat(plugins): 提供方超时或不可用交给 Core 记为 providerUnavailable,工具行区分未响应与不可用 (#1581)

- Core 新增 toolchains.failureReply:查询超过 15 秒没有回复,或后端起不来、断开、没有协商这个提供方时,宿主用它生成标准错误回复(plugin.toolchain.timeout / plugin.toolchain.providerUnavailable),再交给 decodeReply,错误码映射只在 Core 维护一份
- toolchains.resolve 只为问过这个工具的查询记 providerUnavailable,并带上 cause 区分超时和不可用;修复一个提供方失败时把它没被问到的工具也记为缺失的问题
- macOS 接线层把 Core 的 requestTimeout 转成 MacToolchainDiscovery.QueryTimeout;取消不生成回复
- 这类回复照常进入目录轮次,下一层来源继续决定;提供方状态显示“15 秒内未响应”或后端原因
- 运行环境页工具行在结果旁写出“mise 未响应 / mise 不可用”,第 2 步在版本文件存在但提供方没回答时显示同样原因,不再显示“版本未查询”;固定值失效时不显示
- 新增中英词条三条;契约 toolchains.md、rust-core-api.md、Agent Note 与功能矩阵同步更新
- 测试:Rust 覆盖两种原因的回复往返、下一层决定、只记被问到的工具、非法输入拒绝;Swift 覆盖超时与后端停止两种提供方并存时的结果与状态

---------

Co-authored-by: Yao Jingxi <23722032@bjtu.edu.cn>
Co-authored-by: FxRayHughes <25192142+FxRayHughes@users.noreply.github.com>

---------

Co-authored-by: Xiaoyumuxi <23722032@bjtu.edu.cn>
Co-authored-by: ZJUSCODE <152275506+ZJUSCODE@users.noreply.github.com>
Co-authored-by: ZJUSCODE <ZengJun326@outlook.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: 十二翼堕落天使 <61737634+icefery@users.noreply.github.com>
Co-authored-by: Lichenkang <2188718831@qq.com>
Co-authored-by: 枫溪 <bushuaichen@yeah.net>
Co-authored-by: FxRayHughes <25192142+FxRayHughes@users.noreply.github.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: medium ghfind author score; see https://ghfind.com

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants