Skip to content

fix(plugins): 统一宿主授权并修复 macOS 测试 - #1775

Merged
1lck merged 1 commit into
previewfrom
codex/issue-1662-host-api-catalog
Nov 6, 2026
Merged

1lck merged 1 commit into
previewfrom
codex/issue-1662-host-api-catalog

Conversation

@1lck

@1lck 1lck commented Nov 6, 2026

Copy link
Copy Markdown
Owner

关联 Issue / Linked issue

PR 类型 / Type

  • fix:缺陷修复

改动说明 / What changes

背景 / Why

macOS 宿主重复维护插件宿主 API 的隐式服务、旧授权集合及授权判断;当方法与请求携带的服务不一致时,旧分发器仍可能进入原生处理器。后续增加方法时,两份规则也容易漂移。

改动 / Changes

  • 增加 Core 命令 plugins.hostApi.describe 和 plugins.hostApi.authorize,复用现有宿主方法目录和能力规则提供授权信息。
  • macOS 根据 Core 目录和实际注册的 handler 确定可授予的能力,并在分发前核对方法、服务和会话授权;会话、工作区及资源归属仍由宿主复核。
  • Core 调用失败时拒绝授权并记录结构化日志;新增共享契约夹具、回归测试、架构和缺陷笔记以及功能矩阵证据。
  • 修复 macOS 全量测试:将原生模态运行循环放进有超时且核对完成结果的独立测试进程,并验证随后仍能加载 WebKit;Agent 收起测试改为核验公开控件状态与回复内容,避免无关像素变化导致超时。
  • 修复 Save All 漏掉未同步编辑器的问题:向 Core 传递实际同步状态,等待最后一批输入再保存;取消和重置期间不写入。
  • 语言服务测试注入实际 Core 启动策略、受控时钟及就绪事件;区分宿主 API 授权字段与 WebKit 媒体授权,避免静态检查误报。

不在本 PR 范围内 / Out of scope


类型专属:fix

复现与根因

  • 给当前会话授予 lithe/host/editor/applyEdits,直接向 macOS 分发器传入同一方法但 service=workspace:旧实现只看方法授权,继续进入 handler;期望按方法和服务的真实对应关系拒绝。
  • 根因:feat(plugins): macOS 公共宿主 API、纯命令与后端生命周期补全 #1595(9175bd734)引入的 Swift 分发器在本地维护隐式服务及授权判断,没有复核方法与服务的对应关系。
  • Save All 在 feat(core): #1662 车道 D LSP/编辑器下沉(LSP-03/04/08/09/13~17) #1756(33a8cef83)接入批次计划时固定传入已同步;尚未收到浏览器最后一次编辑的干净文档被跳过。cancellingSaveAllDuringRemoteDrainDoesNotWrite 在修复前失败,修复后保存、取消和重置三种情形通过。
  • 影响平台:macOS 宿主的防御性二次检查和编辑器保存;正常 Core 路由已生成一致的服务名。

检查项

  • 新增 PluginPublicHostAPITests.aMethodCannotBeDispatchedUnderADifferentService;旧分发器下该断言失败,修复后通过。全量测试中的 Save All 回归在修复前失败、修复后通过。
  • [N/A] 无法自动化时的手动步骤:已有自动回归测试。
  • 已搜索分发器、Core 方法表及命令调用方;新命令不是插件后端协议方法。
  • Windows 后端宿主及市场由 feat(windows): 完善插件工作流、Provider 生命周期与 Java 分发 #1478 跟进,本 PR 未改动该并行工作。
  • 改动限于 AGT-17 的授权规则、必要测试、契约和记录;没有发现需要另提 Issue 的额外重构。
  • 已更新插件宿主架构笔记,并记录方法与服务一致性的缺陷约束。

范围检查 / Scope checks

功能矩阵 / Feature matrix

  • 更新 plugin-backend-workspace-context.json 的 Core 授权与共享夹具证据,以及 run-save-toolchain.json 的保存同步证据;两端实现及验证状态保持真实情况。
  • 运行功能矩阵校验和相对 preview 的变更门禁。
  • 未提交生成的矩阵视图。
  • [N/A] 未更新矩阵的理由:本 PR 已更新矩阵。

统一日志系统 / Structured logging

  • 复用现有 AppCoreFallbackSelected 和 PluginsHostRequestFailed 目录事件,Core 调用失败时拒绝授权并记录稳定错误类别。
  • 每次失败只在处理边界记录;高频成功路径不记 INFO。
  • 日志不包含源码、环境变量、凭据或用户路径。
  • 已运行 node scripts/logging/generate-log-events.mjs --check 和 node scripts/logging/verify-log-usage.mjs。

界面文案 / i18n

  • [N/A] 没有新增界面文案;沿用已有 L10n 文案。
  • 已运行 node scripts/i18n/verify-app-language-localization.mjs 与 node scripts/i18n/generate-i18n.mjs --check。

逻辑归属 / Logic placement

  • 方法目录、授权规则及共享夹具在 Rust Core;平台只提供已注册 handler 和当前会话事实。
  • 原 Swift 隐式服务、旧授权方法集合和授权判定已迁至 Core。
  • 未增加工具、运行时或插件名称特判。

性能与内存 / Performance and memory

  • 没有新增进程、轮询或无界缓存;目录按需读取。
  • 主线程无新增磁盘或进程操作;本地 Core 授权只传方法、服务和授权名称,不传正文或凭据。
  • [N/A] 未修改启动、项目打开、输入、滚动、搜索或大文件路径,也没有新增运行时依赖。

设置 / Settings

N/A:未新增或修改设置。

插件与共享契约 / Plugin and shared contracts

  • Core 命令、调用方、共享契约与 fixture 一同更新;插件对外协议不变。
  • [N/A] 未修改插件后端协议、插件契约目录或 SDK。
  • [N/A] 未修改需同步的插件协议文件。
  • [N/A] 未新增或修改插件可调用的宿主方法或通知;新增的是应用内部 Core 命令。

发行包与资源 / Bundle and resources

  • 未新增资源写入;运行时 bundle 只读检查通过。
  • [N/A] 未新增或修改下载、解压或缓存资源。

无用代码与重构 / Dead code and refactoring

  • 移除了被 Core 授权目录取代的 Swift 方法表与隐式服务集合。
  • [N/A] 未发现需要额外提交 Issue 的既有无用代码。

验证 / Verification

命令或操作 平台 结果
旧分发器下 aMethodCannotBeDispatchedUnderADifferentService macOS 按预期失败
macOS 全量测试(逐项计时) macOS 4742 项、526 个测试组通过
37 项插件宿主、终端及语言服务器测试(逐项计时) macOS 通过
原生模态、WebKit、保存同步、语言服务及 Agent 回复定向测试(逐项计时) macOS 通过
./scripts/rust-core/verify-rust-core.sh macOS 通过,包含 Core、Swift bridge 与集成检查
Core 授权共享 fixture 测试(逐项计时) macOS 通过
./scripts/architecture/verify-core.sh、verify-shared-contracts.sh macOS 通过
日志、i18n、Agent Note、功能矩阵及运行时 bundle 只读门禁 macOS 通过

未能执行的检查和原因: Windows 原生及图形工作流未运行;Windows 插件宿主由 #1478 推进。修复前,完整 macOS 测试在原生模态验证后第一个 WebKit 用例提前结束;旧分发器的对照运行同样复现。模态验证已隔离进带期限的子进程,并增加后续 WebKit 加载的回归用例;修复后完整测试通过。

提交前确认 / Final checks

  • 从最新 preview 创建分支,目标为 preview。
  • 以 Draft 创建,本地验证后标记 ready。
  • 没有提交构建产物、凭据或无关的 RUN-17 提案。
  • 本次启动的 Lithe 应用和子进程已关闭。

@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Nov 6, 2026
@1lck
1lck marked this pull request as ready for review November 6, 2026 08:30
@1lck
1lck merged commit 0317143 into preview Nov 6, 2026
7 of 23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant