Skip to content

feat(windows): 完善 Windows 插件能力与宿主工作流 - #1478

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

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

Conversation

@Mucheen

@Mucheen Mucheen commented Oct 25, 2026 •

Copy link
Copy Markdown
Collaborator

Windows 现在可以通过 Core 安装、配置和执行契约插件,并在主工作台使用文本、网页和原生工具窗口。项目生成器从安装审批、创建、打开到 JDK 配置和工作区切换形成受控流程;Windows JavaSupport 具备完整离线包候选及现有 Java owner 的资源接线。

当前集成提交为 8313f08f8ccd9cf4cf2425f7b1ea00187ea575a8;已合入最新 preview 基线与三路 R33 交付。R32 的真实产品验收仍只绑定原 1f7ba5682aceea350e1427fa8bda6caafa700c67,本轮不将旧 EXE 当作新提交的实机证据。PR 保持 Draft;正式 Java 签名与生产 packageTrust 准入、完整 JDT 编译运行、签名安装器、ARM64 和完整 M8/M10 仍待完成。ui3、buildProviders/buildSystems、backend2/ui4 等未通过完整准入的能力继续关闭。

功能与行为

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

  • 构建、运行与测试接线:复用 Core catalog/model/plan/decoder 与统一进程 owner,连接模型、工具候选、程序审批、诊断跳转、模型选项、依赖和语言导入。运行和测试先保存、同步,再委托 Core 规划;保留精确 case、取消、清理及无效显式配置拒绝。接线代码与正式完整包准入分别记录,不以 helper 或旧 JDT 测试开放能力。

  • 设置与作用域重载:保留全局/项目来源、草稿、保存/取消、继承重置、字节 CAS、原子替换及读回。global reload 使用跨窗口屏障;project reload 绑定窗口、工作区、设置修订和包身份,排空对应 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、下载/路径/链接/解压预算、原子不覆盖及清理重试保持一致。欢迎页 New Project 复用原向导;审批展示完整原生计划和 runtimes。生成文件固定属于目标工作区,迟到结果不会关闭源工作区新开的选择器;激活/打开失败可显式重开已创建工程,不重复生成。无 fields 按空列表渲染,字段更新等待同一精确动作重新出现。真实输出位于隔离 profile,保留 Core 的嵌套 Git 保护。文件与目录选择采用唯一可用标准控件、实际 Button1 的有界 BM_CLICK、输入结果检查、保留 owner 和关闭期限;JDK 断言读取字段旁可见文本,规范化完整路径后精确比较。

  • Windows JavaSupport 完整候选:包含 plain/Maven/Gradle 模板和全部六项 requires;离线组装器校验固定 JDT/JDK 来源、SHA、许可、PE 架构及完整文件清单。运行时不下载,也不把状态写入发行目录。Java 官方来源要求有效 publisherPackage 签名;外置 bundled 无有效 host seal 拒绝,存在的签名始终验证。同 ID installed 按目录 ID 遮蔽 bundled,disabled/quarantine 不回退,卸载后恢复。Java 启动继续由既有 Java owner/Core/JDT 规划,解析结果和 NativeLease 固定同一插件/缓存,前端传递 pluginId;生产能力关闭期间保留既有宿主资源路径,unsigned 候选及 cfg(test) seam 不计生产贯通。

  • Java 工作流验收入口:提供 plain Java UI→JDT ready→编辑保存同步→单次 Core java.prepareLaunch→真实输出→Stop→编译错误拒绝的驱动。观察器透明观察原 fetch/callback,不修改 invoke、不保存环境。正式完整 ZIP、发布者签名、真实工作区/JDK receipt 或生产能力缺失时,preflight 在清理旧镜像或启动产品前返回 blocked;Maven/Gradle、签名安装器/升级和 ARM64 单独保持 pending。

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

  • 依赖、资源与 CI:Bun 固定 1.3.14,lock URL 使用官方源并保留版本、依赖图和 SRI;tree-sitter lifecycle 复用上游安装器及 Node 代理支持,非法代理脱敏拒绝。JDTLS 解压使用原生 tar。工作树资源复用验证源只读、目标暂存、原子发布后再校验,不共享 node_modules、可变 target 或 LSP 状态。验收 fixture、生成结果、Java 候选和报告为独立状态,同步排除清单/路由/测试与文档。fixture 分类仍要求真实 Core/Windows 接线证据;新增 grammar/editor/backend 夹具保持 unwired/followup。CI 路由、Python/Node helper、HTML/JUnit、Notes 和功能矩阵同步更新。

  • 身份与生命周期约束:SkipBuild 绑定完整源码库存、配置、架构、EXE、原 ZIP 和安装资源字节;SUBST/短路径先解析真实根。驱动先加入 Windows Job 再释放子进程,使用保留句柄和创建身份清理,未知存活状态不当退出。生成器总限 600 秒,工作流预留退出时间;取消观察必须早于原生命令超时和子进程保险。运行时资源始终只读,退出后比较清单和哈希。静态门禁不能替代真实 WebView2 产品链。

  • 签名输入与变体验收准备:离线组装在原子发布前复验源码、固定清单与缓存输入,拒绝组装期间替换;签名前后检查复用现有组装器独立重建,仅允许新增签名文档,并冻结发布/验签实现。报告不授予发布者信任。Maven/Gradle schema2 输入绑定独立构建包、源码、JDK 和生成工作区;前置检查在产品启动前阻断缺失/篡改材料,并明确保留未实施的变体运行流程。

  • 验收失败诊断:保留失败 Win32 API 与原始错误码、整数创建时间、脱敏路径身份和独立退出证明;查询权限与终止权限分离。unknown 仍失败,首次异常不会被清理查询覆盖,已保留后代继续清理。这不代表旧 TextWindow 失败根因已修复。

验证

  • R33 集成:253 项辅助用例通过 / 1 项可选浏览器用例跳过,22 项套件与门禁最终通过,所有 Job activeProcesses=0。完整 CI reuse 和共享契约首次在额外外层 90/60 秒截止,原件保留;完整重跑约 172/156 秒通过。现有队列用例含十轮真实 Git,按测量使用 30 秒单项期限独立复验通过,未修改源测试或断言。新增 Windows CI 测试/路由、拒绝跨工作树复用规则、Notes 和矩阵同步;正式签名、生产准入与 Maven/Gradle 真实产品链未执行。完整 x64 候选在集成树重新组装并通过签名前独立重建核对,库存 654 文件,未启动 JVM。

  • R32 实机基线 1f7ba5682:实际 TypeScript、前端 production 和隔离 x64 Release 构建通过(宿主 22 分 38 秒)。TextWindow 9 通过;受控生成器 18 通过,含 suite owner。两套报告均为 controlledSubsetPassed=true / complete=false,完整 M10 明确跳过。

  • 生成器实机覆盖欢迎页、Files+Git+打开、Command+collect、固定 HTTPS 归档、缺运行时/需求、真实 JDK 17.0.18 的 UI→审批计划→local.json、四次工作区切换后配置字节不变、错误版本/替换运行时拒绝、既有目标保护、失败/取消/关闭/切换清理、禁用与卸载。

  • 最终正常退出,survivors/errors 为空,profile 已清除,Job activeProcesses=0;发行/安装资源 added/removed/changed 全为空。520 个原生源码、5,210 项产品源码库存及冻结 helper 哈希核验一致,EXE/配置与最终身份一致,无本次 Lithe/Java/Javac/Cargo/rustc 残留。

  • 完整 WindowsRust 887 通过 / 6 跳过;定点前端 Java 接线 8、生成器及欢迎页 37;目录确认 helper 42 通过 / 1 可选浏览器跳过,JDK 字段 helper 27 通过。Java helper/observer、完整包组装、资源复用和 CI reuse 检查通过。

  • 原 zsh 运行时资源只读、共享契约、Windows 边界、Notes、矩阵和精确 base→head 矩阵门禁通过。最终 SHA 的 7 个 GitHub 工作流均 success;Draft 按策略跳过 macOS/Windows 重型产品 runner,不能将 gate 成功算成两端全量测试通过。

  • 本地逐项报告与保全证据分别在 .artifacts/r32-integration/ 和 .artifacts/r33-integration/;生成物、候选 ZIP、运行资源和本机私有配置未提交。

尚未完成

  • 正式 Java 发布者签名、生产 packageTrust 准入、生成后完整 JDT 保存/构建/运行、Maven/Gradle 声明式完整包、签名安装器/升级、Windows ARM64、完整 M8/M10。unsigned 候选、测试密钥和受控生成器不能替代这些材料。
  • 完整 Core/SharedRust 仍 FAILED/INCOMPLETE;旧 Git history 请求超时及搜索分页原 15 秒预算超时保留,没有放宽断言或把局部通过计成全量通过。
  • 本机完整 Bash classifier 的 NTFS/native Git/MSYS 引号路径问题在原基线也复现;精确路由和 Node CI reuse 通过,Linux 完整分类门禁的该项证据仍待补。
  • 旧 TextWindow 安装审批超时,以及 d010689b2 退出前进程身份检查失败,根因尚未确认。全部失败原件保留;后续同构建独立通过和最终构建通过不表示这些失败已修复。
  • macOS Swift/整机与依赖 PlistBuddy 的服务边界入口未在当前 Windows 环境完成。

@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.
Mucheen and others added 30 commits October 30, 2026 08:35
Integrate preview e2e7f5c and its local-history and editor extension updates. Merge shared i18n by message ID, preserving all 10,185 entries and both sides' values. Windows product paths remain unchanged from the previously accepted generator fix.

Validated shared contracts, 257 Windows frontend cases, 39 shared editor cases, 42 resource cases, i18n (34 pass, 1 platform skip), Windows cargo check, TypeScript, Rust docs, Notes, matrix and runtime immutability. Prior exact-source product evidence remains on 326b3d3; full SharedRust and macOS-only checks remain incomplete.
Reuse the welcome New Project action, keep generated files bound to their created workspace, and preserve an explicit open retry after the source picker closes. Add real JDK controlled acceptance inputs and evidence checks while retaining pending product verification.
* 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>
Send bounded BM_CLICK to the unique usable standard button instead of a root dialog menu-shaped command. Check the edit control result and preserve retained process ownership and close deadlines.

Cover file and folder pickers, control ambiguity, input and transport failures, owner loss, and background dialog confirmation.
Read the visible runtime field beside its picker and compare full normalized paths, preserving native Windows separators and bounded failure diagnostics. Cover wrong, empty, hidden, delayed, and timed-out field values.
Record failing native APIs and exact Win32 errors before cleanup, separate metadata rights from termination ownership, and preserve unknown exit state and the primary error while cleaning retained descendants. Add deterministic regressions and document the remaining unknown TextWindow failure.
Prepare separate generated Java inputs and bind full build-package, source, JDK and workspace evidence. Refuse missing production prerequisites before starting a suite worker; retain an explicit pending gate for unimplemented variant runtime acceptance.

Observe existing declarative build IPC transparently and cover receipt substitution, missing materials, qualified main classes and callback cleanup with bounded helper tests. No production capability or trust changes.
Register signing-input checks in Windows CI and lane routing, document isolated resource ownership, and record the precise signing and Maven/Gradle preflight boundaries in capability records and owning notes.

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