Skip to content

feat(windows): 完善插件工作流、Provider 生命周期与 Java 分发 - #1478

Draft
Mucheen wants to merge 99 commits into
previewfrom
codex/windows-plugin-parity-unified
Draft

Mucheen wants to merge 99 commits into
previewfrom
codex/windows-plugin-parity-unified

Conversation

@Mucheen

@Mucheen Mucheen commented Oct 25, 2026 •

Copy link
Copy Markdown
Collaborator

这项变更把 Windows 契约插件的安装、市场、设置、函数调用和工具窗口接入 Core 与原生宿主,并补齐构建、项目生成器、Java 资源分发及验收接线。构建与 Java 语义继续由 Core、既有 Java owner 和 JDT 提供,Windows 负责有界执行、审批、作用域隔离和资源清理。

当前提交为 f332ecb12c1a27cdb13c9e466b0497cc9038cb22(合入最新 preview 04b1fb848 与 R39 三任务,并完成 R40 修复)。PR 保持 Draft:ui3、buildProviders/buildSystems、backend2/ui4、正式 Java packageTrust 等尚未通过完整准入的生产能力继续关闭,releaseEnabled 和正式签名发布准入未开启。代码与受控测试通过不等于迁移或上线验收完成。

功能与行为

  • 安装与市场:验证 Ed25519 发布者签名、完整包摘要和审批字节;支持事务安装、更新、回滚、卸载与清理重试。多仓库来源隔离,HTTPS 下载限制重定向、体积和时间;详情覆盖概览、更新、权限、设置和依赖,保留完整 requires,拒绝部分包和版本不匹配。

  • 构建、运行与测试:复用 Core catalog/model/plan/decoder 与统一进程 owner,连接模型、工具候选、审批、选项、诊断跳转、依赖和语言导入。执行先保存、同步,保留精确项目/目标/case 选择和取消清理。运行时配置先冻结,只有实际消费的 Core runtime dependency 才校验;Provider 根据自身 launch/runtimeRequirements 消费配置。无关的失效 JDK 不再阻断其他构建,实际使用的显式配置失效仍终止且禁止回退。

  • 设置和重载:保留全局/项目来源、草稿、保存/取消、继承重置、字节 CAS、原子替换与读回。全局重载使用跨窗口屏障;项目重载绑定窗口、工作区、设置修订及包身份,排空对应 owner。迟到审批失效,清理失败保留原 owner 并重试全部 sibling;并发只读检查保留原作用域约束。

  • 函数与原生界面:设置 action、网页函数和原生面板经正式 Core Provider/typed port 执行。进度、结果、审批、取消与 Retry 绑定精确 owner;旧 open、销毁和替包结果不能覆盖新实例。native schema 1 的树、列表和表单复用公共控件及虚拟化,完整 values 由 Core 校验,状态按包/窗口/工作区隔离并限制 64 KiB。字段草稿按修订恢复,只有明确 invalidData 的已完成字段被舍弃;传输、取消、超时和其他错误保留快照,显式 null 保留真实拒绝。

  • 公共控件:工具栏使用批准的 IDEA 浅深图标;InfoTip 支持悬停、点击/键盘固定、Escape、外点击及无障碍说明。搜索清空恢复焦点,表单清空只改草稿,disabled/readOnly 拒绝操作。树菜单、滚动定位、busy 状态和焦点切换复用公共行为;动作组自然换行,保留 DOM、草稿和焦点,ResizeObserver 合并到单个动画帧并清理。

  • 工具窗口停靠:ui1 文本和 ui2 网页复用稳定原生父子窗口、私有来源/CSP/桥接,绑定产品窗口、项目、目录、包摘要与挂载凭据。left/bottom/right 接入活动栏和槽位;移动、隐藏、替换与关闭使用精确句柄。每帧合并几何,菜单/对话框遮挡时隐藏,零尺寸不创建 owner;焦点仅在显式请求时交付,排队超时无迟到副作用,清理失败保留凭据及 Retry。Edge MainLayout 测试覆盖切换、替换、逆序完成和跨窗口隔离,测试 catalog 仅绑定 loopback。

  • 项目生成器:Core catalog/form/plan 驱动 files/command/archive、JDK、Git 初始化和打开项目。私有同级 staging、下载/路径/链接/解压预算、原子不覆盖及清理重试保持一致。欢迎页复用原向导,审批展示完整原生计划和 runtimes;生成文件固定属于目标工作区,迟到结果不关闭源工作区的新选择器,打开失败可重开已创建工程而不重复生成。无 fields 按空列表渲染,字段更新等待同一精确动作重新出现。原生文件/目录选择使用唯一可用标准控件、实际 Button1 的有界 BM_CLICK、结果检查和关闭期限;JDK 断言读取可见字段文本并比较规范化完整路径。

  • Windows JavaSupport 候选包:包含 plain/Maven/Gradle 模板与全部六项 requires。离线组装校验固定 JDT/JDK 来源、SHA、许可、PE 架构和完整库存,并在原子发布前复验源码、清单及缓存输入。ZIP/VSIX 仅作为物理缓存别名,包内回执保持稳定逻辑名称,切换别名后完整包库存一致。运行时不下载、不写发行目录。

  • Java 信任与资源归属:官方来源要求有效 publisherPackage 签名,外置 bundled 无有效 host seal 拒绝;存在的签名始终验证。同 ID installed 遮蔽 bundled,disabled/quarantine 不回退,卸载后恢复。Java 启动继续由既有 owner/Core/JDT 规划,NativeLease 与解析结果固定同一插件/缓存,前端传递 pluginId;生产准入关闭期间保留既有宿主资源路径。签名前后复用组装器独立重建,仅允许新增签名文档并冻结发布/验签实现,报告本身不授予发布者信任。

  • 官方插件发布恢复:查询未公开草稿,即使 tag 尚未建立也按完整 target SHA 冻结原版本输入;已有 tag 必须指向同一提交。拒绝禁用插件、错误身份、额外/缺失资产及公开 release 覆盖,完整名称集合和远端 SHA-256 一致后才公开。认证/网络失败不会被当作不存在;当前恢复工具与冻结构建输入分别检出,资产使用调用者的绝对路径。PR 检查只读,草稿查询/发布限受信任 preview job。

  • Java 与原生工作流验收:提供 plain Java UI→JDT ready→编辑保存同步→单次 Core java.prepareLaunch→真实输出→Stop→编译错误拒绝的入口。复用透明、有界 fetch/callback 观察器;普通任务要求 succeeded/0 和受控 stdout,故意失败测试要求 failed/1、精确 suite/case、Core 解码报告与诊断。核对 operation/workspace/plugin/generation 和恰好一个有序终态,拒绝缺报告、错身份、failedToStart、取消及重复/错序终态。plain/Maven/Gradle 三变体驱动均已实现生成、工作区切换、保存同步、Core prepareLaunch、真实输出、Stop 与编译错误恢复;schema2 输入绑定独立构建包、源码、JDK 和生成工作区,材料缺失/篡改在启动产品前阻断。R39 实际产品执行全部在完整 Java 包安装阶段被 16 MiB/file 既有限额拒绝,尚未到达 JDT/构建/运行;驱动存在不代表这些阶段通过。

  • VCS Provider:保留 Git 独立流程;插件根、包、窗口/工作区、状态收据和监听隔离。提交、回滚、冲突处理、update/cleanup、add/delete 写前复验状态、端点、Core ownerOf 和授权,拒绝嵌套根及路径别名。取消/未知回复不自动重发,Retry 只清理原 owner。move 未增加生产入口,现有真实 SVN 反例不构成安全准入证据;外部候选保留独立来源、版本和完整 requires。

  • 依赖、资源与 CI:Bun 固定 1.3.14,lock URL 使用官方源并保留版本、依赖图与 SRI;tree-sitter lifecycle 复用上游安装器及 Node 代理支持,非法代理脱敏拒绝,JDTLS 解压使用原生 tar。工作树资源复用验证源只读、目标暂存及原子发布后再校验,不共享 node_modules、可变 target 或 LSP 状态。验收 fixture、生成工程、Java 候选与报告独立隔离,复用清单/路由/测试和文档同步;未接线 fixture 保持 unwired/followup。CI 路由、逐项计时、HTML/JUnit、Notes 与功能矩阵同步更新。

  • 生命周期与失败诊断:SkipBuild 绑定源码库存、配置、架构、EXE、原 ZIP 及安装资源字节,SUBST/短路径先解析真实根。驱动先加入 Windows Job 再释放子进程,按保留句柄和创建身份清理,未知存活状态仍失败;工作流预留退出时间,取消观察早于原生命令和子进程保险期限。保留原 Win32 API 错误码、整数创建时间、脱敏路径身份及独立退出证明,查询与终止权限分离,首次异常不被后续清理查询覆盖。退出后比较发行目录清单和哈希。

  • Provider 与保存后生效:原生面板和共享语言设置动作复用同一已授权 Provider 会话与精确 launch identity,取消只撤销当前 operation;成功的即时配置更新后,后续审查匹配新配置但保留原启动证据。设置已保存而生效失败时显式 Retry 只重做副作用,合并重复点击,外部设置或包变化及迟到结果仍拒绝。

  • JDK 与双架构库存:相对 JDK/运行时路径按启动工作区解析,UNC 保留,drive-relative 交原生校验。组包核对 JDK release 的实际版本、OS、CPU、vendor 和 JDK 类型并记录 runtimeIdentity;Windows ARM64 使用固定上游归档实际提供的 config_win。逻辑 ZIP/VSIX 别名和完整库存比较保持一致,回执不是发布信任或可复用缓存身份。

  • 索引与会话清理:编辑器继续响应 root membership/indexing revision,并在同一作用域政策变化时先撤回旧 working copy;普通 buffer/plugin 替换仍允许精确旧 attachment 的关闭迟到。索引在进程启动中撤销时,只有进程树销毁成功才删除会话;原生宿主保留已登记身份,普通 wire 失败由 Core backlog 持有、再次显式启动先有界清理,未完成不派生替代进程。

  • 正式测试入口:一次 Bun 1.3.14 调用使用原生 --isolate,保留 discovery/partial command failures 与每项计时,不以 shell 逐文件循环替代联合测试。SVG 走 file loader;夹具补齐真实启动同步、LSP 增量、DAP 原始字节及 PlantUML 文本路径。DAP 夹具共享十秒 I/O 期限并保留两秒清理和外层十五秒 watchdog。

  • 本轮 Java 构建候选:新增实际 MavenSupport、GradleSupport Windows 插件源码与完整受控签名输入。Maven 复用既有 hostIntegration,Gradle 读取上游 evaluated project/task/source-set/dependency API,并过滤内部 adapter 任务。两份构建清单按 Core 精确能力规则只声明 buildSystems,保留 publisherPackage 正常验签;不要求未使用的 packageTrust。模型和依赖查询显式关闭 configuration cache/configure-on-demand,普通构建任务保留项目选择。相对 JDK/运行时路径按工作区解析,持久化原值不变。

  • 受控签名与完整输入:Java ZIP 单根规范化、完整目录/文件哈希比对、2 GiB 与十万条目预算;一次性内存 Ed25519 密钥签署完整候选。仅隔离宿主临时固定公钥和必要能力,正常原生验签/审批不绕过,运行结束恢复源码原字节,productionAcceptance=false。临时签名、输入副本与证据均不得跨工作树复用。正式发布者签名仍 pending。

  • 原生重启恢复:同一 owner 的不可变启动输入变更分类为 provider.restartRequired / plugin.build.restartRequired;设置页显示双语恢复说明。Later 仅用于已完成清理的可关闭状态,cleanupFailed 保留凭据和 Retry。连续受控链验证模型 reload 同 PID、保存 restart、model-only reload 精确拒绝、Later、停用/启用审批及新 PID 读取新参数,不放宽 launch identity。

  • 正式联测与资源隔离:Rust 计时入口在逐项 watchdog 前预编译 fixture,全部计入 suite budget;watcher 使用最小非 Maven 工作区,Git Windows 路径请求仅局部改为 15 秒并保留 case watchdog。前端夹具清理 ownership、生命周期和 import;产品构建/验收在资源副作用前拒绝非默认 CARGO_TARGET_DIR,恢复当前工作树独占资源暂存,Cargo-only wrapper 保留既有覆盖行为。可变 profile 登记为不可复用资源,路由、回归、Notes 与构建文档同步。

  • preview 集成:保留官方 Rust SDK/协议3与 settings-v2 Schema 最新说明;新增两个工具链 fixture 登记为 unwired/followup,不提升 Windows 能力或验收状态。

当前验证与适用范围

R39 源码提交 725b2e071 已实际完成:

  • 正式 frozen-lockfile 生命周期安装 1051 包,tree-sitter 0.26.9 实际执行;最终完整 TypeScript 检查通过。
  • 完整单 Bun 1.3.14 --isolate 联合运行 4123/4123、629 文件、535.6 秒通过。Windows Rust Project 48、Terminal 37、Host 830 通过、6 skipped;GitHost 10、IDEHost 10、AgentHost 通过。
  • 常规 x64 Release 及隔离 host-acceptance Release 构建成功。最终受控 EXE SHA-256 为 876802eebc4f01b5559aa6ba49c576f3d31f1aa7a2bff7e80ee6a78e06c8be8b,绑定 R39 源码及临时 controlled 配置/库存;临时公钥与能力已逐字节恢复。所有产品结束后 imageUnchanged=true、profilesAbsent=true、Job activeProcesses=0。
  • Core 全量没有通过:原 20 分钟套件记录 1093 passed / 12 failed / 15 timeout,剩余未执行。watcher 修正后 11.3 秒通过原 15 秒门槛,不能据此宣称 Core 全量通过。

R40 审查发现并修复 1 项 P1(非法清单能力)、2 项 P2(Gradle 查询兼容性、共享 target 资源归属),两条独立模型最终复审均 ship:

  • Java helpers 49、build-preflight 17、资源复用 46、夹具分类回归 21、schema pattern 4 通过。真实 Core 对两份构建清单校验/安装审查通过,且拒绝原非法 packageTrust 组合。
  • 真实 Gradle 9.2.0 + JDK21 双项目在项目开启 configuration cache/configure-on-demand 时,按实际插件参数读取模型与依赖均通过;两个项目的 compileJava/build 完整保留,内部 adapter 任务不导出。
  • 共享契约、194 Agent Notes、231 能力矩阵及相对 preview/上轮 head 差异门禁、i18n、发行资源只读、Windows boundaries、测试稳定性和计时入口回归通过,所有验证 Job 最终为空。
  • 新增 Rust 实际清单 include 回归通过 rustfmt;本轮未重编 Core 测试,当前清单验证调用已构建的 R39 Core DLL(相关 Core 生产实现未改)。本轮未重新执行完整前端、Core 或 Release;上述 R39 完整测试和镜像不能冒称最终 R40 head 的完整产品证据。
  • 首轮失败保留:contracts 外层 120 秒超时后,最终在 300 秒有界 Job 中用 170 秒完成;Windows Python 旧 stdin 编码导致 schema 断言失败,PYTHONUTF8=1 后 4 项通过;新树 PlantUML CRLF 检出不符固定上游 SHA,按已有 -text 属性恢复与 Git HEAD/index 完全相同的 LF 字节后资源复用 46 项通过,没有修改上游资源或断言。
  • 本地审查与计时报告:.artifacts/r40-review/review.html、review.md、review.json 和 reports/index.html。本轮未启动 Lithe 产品,无 Lithe 残留。主树预存三个矩阵文件和 .zcode,以及 R39 A 未跟踪 pycache 均未动、未提交。

产品验收未通过与剩余缺口

  • Java plain/Maven/Gradle 均被完整 Java 包的单文件安装限额拒绝:16 MiB 上限,runtime/x86_64/lib/modules 实际 140891368 字节。JDT、构建和运行阶段均未到达。该既有预算问题仍未修复,不能开放生产 Java 准入。
  • 基线退出验收等待两棵受控语言进程树计数超时;最终 Job0 是兜底清理结果,不能把自然退出验收标成成功。
  • Generator 文件与命令生成通过,但 HTTPS 归档入口 Plugin project generators 点击超时,发生在下载前,后续运行时分支未执行。
  • 同一 R39 镜像的受控子集:TextWindow 9 passed/1 pending、Settings 11 passed/25 pending、Native 14 passed/5 pending;原生连续 restart 恢复链通过。它们不等于正式 SDK/发布者签名完整包或完整 M10。
  • 正式发布者签名与 production packageTrust、完整 SDK/外部包、Windows ARM64 实机、签名安装器升级、真实 IME/主题/窄布局剩余支线、完整 M10 及 macOS 仍 pending。已有 x64/ARM64 离线组包只证明固定库存,不证明这些产品边界。

PR 保持 Draft,不 ready/merge/release;生产 ui3/buildProviders/buildSystems/backend2/ui4、releaseEnabled 等未准入能力继续关闭。按用户最新要求,本轮只验收当前三任务,暂停派发下一轮。

@ghfind-review ghfind-review Bot added the review: medium ghfind author score; see https://ghfind.com label Oct 25, 2026
@Mucheen Mucheen changed the title feat(windows): 插件能力对齐 macOS(统一交付) feat(windows): 完善 Windows 插件能力与宿主工作流 Oct 25, 2026
Connect task and test approval, output and cancellation to the native owner; validate passive Maven model snapshots and queued refreshes. Revoke stale editor attachments and queued text across buffer, workspace and package changes. Cover real WebView lifecycle workflows through the product Quit path.
Connect reviewed Provider model/dependency and page build workflows,
workspace test discovery, source-backed plugin settings, transactional
project generation, and passive VCS root ownership. Keep rollout gates
closed until product acceptance is complete.

Retain cleanup owners for Stop retry, preserve framework-specific actions
and Core reply data, and repair page refresh cancellation routing.
Merge preview d369c9a, classify its new debugger fixtures and make the
debug baseline checker resolve Windows file URLs correctly.
Integrate the reviewed R9 changes and preview 32021a8. Preserve typed archive interruptions and staging identity, global settings reload receipts, and isolated VCS session cleanup completion.

Validation: 1252 passed / 5 skipped, Windows x64 Release, shared contracts, runtime bundle immutability, Rust documentation, localization and matrix gates.
Integrate reviewed R10 settings functions, generator requirement interactions and segmented forms, and guarded VCS mappings/watch leases. Preserve original owners on late native completion, invalidate stale reviews and release late watcher publication on window destruction.

Validation: 1061 passed / 6 skipped, complete TypeScript check, Windows x64 Release, contracts, localization, runtime resource immutability and actual-tree matrix gates.
Route web function requests through the existing Core-owned provider lifecycle,
retain exact-window cleanup retries, and retire completed receipts with their
native window instance. Add native tree/list/form rendering and Core data
validation while keeping ui:3 admission closed. Extend VCS short sessions with
read-only history and baseline diffs, cancellation and cleanup recovery.

Cover approval/result shapes, form drafts, virtualized controls, deleted and
renamed paths, junction escapes and late-owner races. Update fixture coverage,
localization, capability evidence and the owning architecture note.
接入原生面板三侧布局、精确关闭与焦点恢复;新增受约束的 VCS resolve/cleanup 及真实 Core stdio 回归。补充设置实包验收驱动、源码身份校验、CI、共享翻译、资源复用规则和功能矩阵。未开放 ui:3/vcsProviders,真实完整包与系统客户端验收继续 pending。
Map all approved host icons to fixed theme resources and reuse a shared accessible InfoTip for disabled fields and actions. Register isolated UI regression suites and record remaining settings runtime and VCS move safety evidence.
Reuse the public input accessory for localized search clearing, preserve native
form draft and focus behavior, and register isolated consumer regressions.

Complete controlled settings package declarations and installation approval
checks, observe frozen Tauri IPC through fetch callbacks, and verify bounded
shutdown before resource snapshots. Record real SVN move counterexamples while
retaining capability gates and explicit runtime evidence limits.

Validation: 946 passed, 5 existing skips; full TypeScript, focused lint/format,
shared contracts, stability and platform gates; formal Windows x64 Release.
Correct primary/normal native button variants and cover shared-fixture actions.
Verify real WebView2 SearchField default keyboard activation in settings acceptance.
Add bounded fixed-input SVN move diagnostics with proven cleanup, path isolation,
and failure reporting; wire timed CI reports and resource reuse exclusions.
Update owning decisions and partial feature matrices without opening gates.
…back

Open the shared context menu for the selected virtual tree row, preserve
outside and action-owned focus, and retain expand-button keyboard navigation.
Add bounded controlled ui:2 fixture and real WebView2 postMessage fallback
acceptance with exact fault injection, identity checks and failure cleanup.
Register helper reports and nonreusable resources; document the SVN upstream
replacement boundary without opening capability gates.
xiaoyumuxi and others added 22 commits November 1, 2026 16:09
* feat(macos): 增加彩色 LSP 状态菜单与普通日志标签页

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

* fix(lsp): 等待重启关闭完成并保留局部索引重置状态
Borrow the retained workspace Provider for native panel calls, preserving
approval plans, scoped cancellation/progress and prompt review release.
Normalize verified declarations through Core and accept omitted empty form
controls without admitting undeclared values.

Wait for isolated settings sessions to stop before requesting destruction;
retain cleanup ownership until Core confirms disposal.

Add complete unsigned workflow fixtures and a bounded product acceptance
driver, regression tests, feature matrices and the owning Agent Note.
Production buildSystems/buildProviders/ui:3 admission remains closed.
Use one RwLock around the existing build registry so ordinary concurrent
scope and generation reads cannot be mistaken for semantic revocation.
Keep exclusive mutation and existing workspace, refresh, suspension,
settings revision, package, cancellation and window ownership checks.

Add deterministic contention and revocation regressions. Record exact
settings action IPC identity and terminal success in native acceptance,
and fail immediately on rejected or failed operations. Document the
proven defect and retain uncertainty about R34 historical attribution.
Keep both feature records partial/pending and production gates closed.

Validation: 147 affected timed Windows Rust tests and 7 driver tests pass;
source-bound isolated x64 Release, text-window acceptance and all 11
controlled native workflow stages pass. Static/matrix gates pass except
service-boundaries unavailable on Windows due to macOS plutil. Full Rust
suite, complete capability admission and other native platforms pending.
* 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>
…rch (#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.
…gressions

Integrate the R34/R35 workflow work and five reviewed handoff patches on
the current preview baseline, preserving newer preview changes.

Recover interrupted official plugin draft releases from immutable source
revisions and verify the complete remote asset set before publication.
Keep ZIP/VSIX cache aliases out of package identity. Validate configured
runtimes only when Core launch requirements consume them. Require native
workflow acceptance to observe the exact authoritative terminal, output,
test results, diagnostics, and operation identity.

Add regression coverage and update the owning notes and capability matrix.
Keep production capability and official signing/release admission closed.

Validation: 497 plugin host tests, 1005 isolated frontend tests, targeted
release/assembly/signing/observer/driver tests, full TypeScript checking,
resource/contract/stability/bundle immutability and matrix gates.
Known limits: historical Debug CRLF assertion; combined Bun mock pollution;
Maven test SVG import on local Bun 1.3.12; pinned Bun 1.3.14 download timeout
prevents Release build; macOS-only plutil check unavailable on Windows.
* 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>
- proposals/toolchains/README.md 文件表里指向 fixtures/ 目录的链接改为代码文本;lithe-plugin-docs 的 contract.mjs sync 要求相对链接指向副本里的文件,这条链接让 #1581 合并后的同步被拒
- verify-shared-contracts.sh 检查契约目录下每个 Markdown 文件(原来只查顶层 README),相对链接必须指向目录内的文件,不能指向目录
- verify-shared-contracts.sh 检查目录下每个 *.schema.json 的 $id 等于 docs 发布地址(原来只查三份顶层 schema)
- 更新契约发布 Agent Note,写明两边规则一致的要求和这次被拒的原因
Resolve workspace-relative JDK and opaque runtime selections before native
build planning. Keep explicit selection precedence and on-demand validation.

Require Java workflow builds to end in one identity-consistent succeeded/0
terminal, agree with IPC, and emit stdout. Add regression cases and update the
architecture note and platform evidence without enabling production gates.

Focused validation: 41 helper cases, 9 observer cases, and the 5 changed Bun
cases pass. The affected frontend run has 6 dependency load errors. Full Java
product validation remains pending: trusted packages are unavailable and two
bounded shared-mutex admission attempts did not start a Release build.
Use native Bun file isolation and explicit SVG file loading, retain reports for absent or partial JUnit, and repair mock exports and deterministic synchronization. Preserve pinned PlantUML bytes on Windows and use a bounded raw-byte DAP fixture. Full integration and Release remain pending the dependency installer and shared native validation mutex; this is a local checkpoint only.
* 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>
Let native panels and explicitly selected shared-language settings actions borrow
an existing approved Provider through its exact launch review and Core request
guards. Keep editor ownership and cancellation isolated from each invocation.

Preserve immutable startup evidence while tracking only successful same-session
workspace configuration updates for following exact launch comparisons. Retain
saved settings after an effect failure and offer an identity-checked effect-only
Retry with duplicate-click and stale-page protection.

Expand complete dedicated/shared workflow fixtures and product evidence for
registration withdrawal, immediate/restart/reload settings, selectors and
structured errors. Require explicit native Retry after saved settings revoke an
old panel receipt. Keep production capability and release admission closed.

Validation and remaining failures are recorded in the local R37 handoff. Full
Windows Rust retains two Agent tree-cleanup timeouts; no baseline attribution or
full-version/platform admission is claimed.
@Mucheen Mucheen changed the title feat(windows): 完善 Windows 插件能力与宿主工作流 feat(windows): 完善插件工作流、Provider 生命周期与 Java 分发 Nov 2, 2026
Mucheen and others added 7 commits November 2, 2026 11:26
Keep exact launch identity and the existing model-only reload lifecycle.
Classify changed immutable startup inputs for the unique shared owner as
restart-required; translate the recovery and allow only that cleaned failure
to be explicitly postponed before Disable/Enable and fresh model consent.

Freeze the complete controlled workflow driver with its fixtures. Exercise
ordinary reload, restart-save then model reload refusal, retained PID/value,
and explicit lifecycle recovery continuously; add keyboard selector, input,
cross-slot narrow layout and close-focus checks without claiming IME proof.

Add ownership/configuration and localized receipt regressions. Lightweight
logic and offline timing passed; React dependency, Rust compilation and
source-bound product execution remain assigned to the integration owner.
* fix(plugins): 插件清单 Schema 支持设置 v2

- requires.settings 与 requires.languageServers 接受版本 2,与 Core 的 SUPPORTED_CAPABILITIES 一致
- setting 新增 multiSelect、text、file、directory 类型及 scope、effect、page、section、pattern、maxLength、placeholder 字段,并按类型拒绝 Core 不接受的字段和默认值形状
- 新增顶层 settingActions 与 settingAction、settingPage 定义
- languageServers[].workspaceConfiguration 只在 requires.languageServers 为 2 时接受
- requires.settings 不是 2(含 API level 3 以下)时,设置只能是 v1 形状且不能有 settingActions;API level 1 不能声明设置
- 平台矩阵 plugin-registered-settings-pages 补充 Schema 证据与验证步骤

* fix(plugins): enforce portable settings schema regex boundaries

Reject trailing newlines consistently in JavaScript and Python validators for text defaults, option/page tokens, and settings action IDs/functions. Add bounded cross-engine regression tests to the Linux CI job, register their CI routing, and update contract decision notes and feature evidence.

---------

Co-authored-by: FxRayHughes <25192142+FxRayHughes@users.noreply.github.com>
Co-authored-by: Yao Jingxi <23722032@bjtu.edu.cn>
* docs(contracts): 官方 SDK 一节和函数协议版本说明对齐现状

- Rust SDK 已实现插件函数协议 3 及宿主服务,删掉「只实现协议 1 和 2」的过时说法
- Node SDK 说明从「litheBuild 1」改为宿主服务、litheBuild 和 VCS 提供方(SDK 已支持 litheBuild 1–6)
- Java SDK 补充它实现的范围:宿主服务和 litheBuild,不含 VCS 提供方
- Rust Core 实现的插件函数协议版本从 1、2 改为 1 到 3(与 SUPPORTED_VERSIONS 一致)
- AGENTS.md 的两仓库同步说明改为三个官方 SDK(Node、Java、Rust)

* docs(matrix): 插件函数能力记录补上官方 Rust SDK

- capability 的官方后端 SDK 从 Node、Java 改为 Node、Java 与 Rust
- verification 加上 Rust SDK 的 cargo test,以及 sdk-e2e 运行的 plugin_sdk_rust 场景
- notes 说明 Rust SDK 的范围:函数协议及其宿主服务,不含构建与 VCS Provider

* docs(contracts): Rust SDK 示例后端的端到端场景说明补上协议 3 宿主服务

lithe-plugin-docs#10 让该场景除凭据外,还服务工作区、文件监视和窗口
请求,投递命令与上下文变化,并检查取消会转发给宿主。

* docs(matrix): Rust SDK 端到端验证说明补上协议 3 宿主请求

与契约 README 一致:lithe-plugin-docs#10 的 Rust 示例后端场景还覆盖
工作区、文件监视订阅、窗口消息、过期上下文、取消转发,以及命令与
工作区变化通知。
…ugin-review-integration-r40

# Conflicts:
#	shared/platform-feature-matrix/features/plugin-functions.json
#	shared/platform-feature-matrix/features/plugin-registered-settings-pages.json

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.

7 participants