Skip to content

fix(desktop): 跟进 Core #28 拆分 crate,修正 Core 旧路径并删除 hostIntegration 死代码 - #1887

Merged
xiaoyumuxi merged 2 commits into
previewfrom
chore/core-split-crate-paths
Nov 14, 2026
Merged

xiaoyumuxi merged 2 commits into
previewfrom
chore/core-split-crate-paths

Conversation

@xiaoyumuxi

@xiaoyumuxi xiaoyumuxi commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator

关联 Issue / Linked issue

PR 类型 / Type

  • feat:新功能或用户可见的改进
  • fix:缺陷修复
  • docs:文档、Agent Note、Skill 等规则文件
  • release:稳定版发布准备

改动说明 / What changes

背景 / Why

Core #28 把 lithe-core 里的领域代码拆成 34 个独立 crate(git、lsp-engine、lsp-client、debug、build、plugin-manifest、plugin-rpc、diagnostics、workspace 等),12 个大文件也拆成了主题子模块。命令名、JSON、错误码和 C 头文件都没有变。唯一的契约变化是:构建系统 model、test.results、dependencies 里写 source: "hostIntegration" 时,现在按未知来源以 plugin.manifest.invalid 拒绝。这一条已记入 Core 的 protocol-changelog。

本仓库的 AGENTS.md、Skill、Agent Note、文档、资源清单和功能矩阵里有约 300 处 Core 路径,在 #28 之后都指向不存在的文件。桌面端 builds.go 里还有一段判断 hostIntegration 来源的死代码。本 PR 把 pin 升到 #28 的 HEAD,并一次改完这些引用。

无用户可观察缺陷。改动动机是让文档、证据路径和代码与 Core 的新目录一致。

改动 / Changes

Core 固定修订

桌面端删除 hostIntegration 死代码

  • desktop/internal/pluginservice/builds.go:删除 deps.Source != "hostIntegration" 判断和原始结构体里只为它读取的 Source 字段。Core 现在会拒绝这种清单,宿主收不到这种声明。
  • desktop/internal/pluginservice/builds_test.go:删除 hosted 用例和对应断言。

Core 路径(rust/crates/core/src/... → 拆出的 crate)

  • 用脚本按 Core 的改名记录、git ls-files 和标识符定义批量改写 302 处,涉及 125 个文件。改写后的每个目标路径都在 d235401 中存在(rust/target/ 除外,它是构建输出目录)。
  • 一个旧文件被拆成多个模块时,按引用处说的内容选模块,例如:
    • lsp/interface/engine.rs 按功能分到 lsp-engine/src/{requests,server_messages,lifecycle,function_calls}.rs;
    • plugins/declarative.rs 分到 plugin-manifest/src/{validation,settings,settings_surfaces,run_plans}.rs;
    • git/mod.rs 分到 git/src/{branches,diff,untracked_directories,line_history,workspace_status,repository,write,commits}.rs;
    • project/files.rs 分到 project/src/files/{search,replace}.rs 和 core-rules/src/visibility.rs。
  • 涉及的文件:
    • AGENTS.md:能力版本改为 rust/crates/plugin-model/src/capabilities.rs,插件函数协议改为 rust/crates/plugin-rpc/src/。
    • .gitattributes、scripts/resources/worktree-resources.json 及其测试:catalog_generated.rs 改为 rust/crates/diagnostics/src/catalog_generated.rs。
    • docs/development/macos-plugin-api-plan.md:S1–S3 的 Core 链接改到 plugin-model、plugin-manifest、plugin-backend、plugin-rpc、plugin-native-ui。
    • .agents/skills/develop-lithe/SKILL.md、references/logging.md。
    • .agents/notes/implemented/**(33 篇)、.agents/notes/proposed/**(7 篇)。
    • shared/platform-feature-matrix/features/*.json(81 个文件):证据路径和说明。git-large-untracked-directories.json 的旧 macOS、Windows 证据里,改写后有一条重复的 untracked_directories.rs,已去重。
  • 下面这些不改:
    • 固定修订链接(blob/<sha>/…)和它的标签。
    • “已迁出:原 …”行、archived 笔记、“已随 #… 移除”这类历史说明。
    • 已经写了去向的笔记正文,例如 Java、Maven 专属代码已迁出的笔记。

已删除代码的说明

  • Java/Maven 专属文件(jdt_build.rs、maven.rs、jdt.rs、jdt_maven_settings.rs、java.rs、java_syntax.rs)已由 Core fix:修复左侧Git提交文件无法全选问题 #23 移入插件。引用它们的 5 篇笔记补了“已迁出”行,指向 lithe-plugin-java 或 lithe-plugin-maven,当前的通用部分改指 lsp-engine、execution。
  • develop-lithe Skill 中 -configuration 的示例改指 Java 插件的 crates/java-domain/src/lsp/languages/jdt_configuration.rs。
  • 结构化日志笔记和 logging.md:
    • 辅助 crate 的 failure sink 改为由 Core 的 runtime::helper_failures::install() 注入,共三个(git-host、ide-host、remote);
    • 删除已不存在的 agent-host 和“Agent 打开的 FFI”;
    • 事件模块改为 lithe_diagnostics::core_events。
  • 构建系统契约笔记和 Java 语言服务器笔记开头各加一行“2026-11-14 更新”:hostIntegration 现在只是保留字段,写任何值都会被拒绝;Maven、Java 已改由插件提供。
  • docs/ci-builds.md:
    • 删除 git_path_roundtrip.rs 测试的说明,这个测试已在 Core 中删除;
    • 删除 MCP 官方 Registry 和精选图标两段。Core 已没有 MCP Registry 和 featured.json([Bug] 左侧Git提交文件无法全选 #19)。
  • scripts/resources/:删除 mcp-registry-metadata 条目、对应注释和测试。
  • 语言工具笔记里 language-providers.json 和 catalog.rs 的“已随 [Feature] Windows/macOS 统一 Viva 工作台与原生编辑器,保留 Rust Core 和插件体系(分阶段重构) #1794 移除”改为“已随 Core fix:修复左侧Git提交文件无法全选问题 #23 移除”:这两个 Core 文件是在 Core fix:修复左侧Git提交文件无法全选问题 #23(78c065d)删除的。
  • 笔记 bug-fix/2026-10-19-windows-claude-npm-shim-launch.md 移入 archived/,并写明归档原因:Core feat: add editor tab layout modes and reordering #18 删除了 rust/lithe-agent-host,Viva 桌面端也不做 Agent 对话。没有其他文件引用它。

不在本 PR 范围内 / Out of scope

  • 旧客户端(macos/、windows/tauri/)的遗留内容按之前的约定等用户决定,本 PR 没有改:
    • 功能矩阵 legacy 证据里已删除的 Core 文件,包括 git-status-commit.json 的 git_path_roundtrip.rs 和 windows-startup-feedback.json 的 rust/lithe-agent-host/*。
    • docs/ci-builds.md 里 MCP 编辑器原生验收截图一段(agent-ui-test-evidence),以及测试稳定性脚本、windows-and-rust.md 里的 agent-host 引用。
  • 历史笔记正文里的 Rust 模块路径(如 crate::execution::scan、plugins::declarative、lsp::interface::engine::real_jdt_tests::)是当时的记录,没有改。
  • 仍开着的设计单只有 [Feature] Core 剩余的语言专属默认值(忽略目录、索引排除、go/node 运行时、运行发现、行注释表)改由插件注入 #1856(5 类语言默认值改插件注入),不在本 PR。

类型专属:fix

复现与根因

  • 复现步骤、实际结果、期望结果:在 Core d235401 的检出里查本仓库文档、笔记和功能矩阵引用的 rust/crates/core/src/... 路径,约 300 处不存在;期望每个非历史引用都指向现存文件。桌面端 builds.go 仍按 source: "hostIntegration" 跳过依赖声明,而 Core 已不接受这种声明。
  • 根因:Core [Windows][Epic] W1-W3 核心工作流补全 #28 拆分 crate、Core fix:修复左侧Git提交文件无法全选问题 #23 删除 Java/Maven 集成后,本仓库的引用和宿主代码没有跟进。
  • 影响平台:文档和证据路径与平台无关;builds.go 是 macOS 和 Windows 共用的桌面端代码。

检查项

  • [N/A] 已先写回归测试,确认它在修复前失败、修复后通过;测试路径与修复前的失败输出:只删死代码和改文档路径,没有新行为可测;builds_test.go 删掉的是死代码的用例。
  • 无法自动化时,已写明手动复现与验证步骤:路径用脚本对 Core git ls-files 逐条核对,见“验证”。
  • 已搜索被修改函数、类型、契约字段的全部调用方(含另一平台、插件、SDK、脚本和按字符串分发的调用):git grep hostIntegration -- 'desktop/**/*.go' 只剩这两处,已删除。
  • 已检查另一平台是否有同类缺陷(有则本 PR 一并修复,或已提交 Issue):桌面端 macOS 和 Windows 共用同一份代码。
  • 只改了修复所需的代码,没有夹带重构;修复过程中发现的其他问题已提交 Issue:没有发现新问题。
  • [N/A] 修复改变了行为约束或容易复发,已在 .agents/notes/implemented/bug-fix/ 记录:没有改变行为约束;hostIntegration 的契约变化已在原笔记开头注明。

范围检查 / Scope checks

功能矩阵 / Feature matrix

  • 已更新 shared/platform-feature-matrix/features/<id>.json:只改证据路径和说明里的 Core 路径,实现状态和验证状态都不变。
  • 已运行 ./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh;改了平台实现路径的,还运行了 ./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEAD
  • 没有提交 .artifacts/ 下生成的矩阵视图
  • [N/A] 没有更新矩阵的,理由:已更新。

统一日志系统 / Structured logging

N/A:没有新增或改动日志事件。只修正了日志文档里的 Core 路径和 sink 注入位置。

界面文案 / i18n

N/A:没有新增用户可见文案。两个 i18n 检查仍然运行,见“验证”。

逻辑归属 / Logic placement

  • 可共享的逻辑在 Rust Core:本 PR 没有新增逻辑,只删除桌面端一段已无用的判断。
  • [N/A] 修改平台层已有的可共享逻辑时已迁入 Core;本次确有理由不迁的,理由与 refactor Issue:没有修改可共享逻辑。
  • 工具或运行时专属的知识放在插件或成熟上游,宿主和 Core 没有按工具名加分支:删掉的正是宿主对 hostIntegration 来源的特判。

性能与内存 / Performance and memory

N/A:没有新增后台功能、子进程、缓存或依赖,也没有改动启动、输入、滚动、搜索路径。

设置 / Settings

N/A:没有改设置。

插件契约 / Plugin contract

  • 契约改动已在 Rust Core PR 里随执行它的代码一起提交,同一个 Core PR 已登记插件协议更新记录(合入日期、PR、修改人、协议或 API);链接:Core #28 的 shared/plugins/reference/protocol-changelog.md 新增 2026-11-14 一行。
  • scripts/desktop/build-desktop-core.sh 的 PINNED_CORE_REVISION 已升到包含该契约的 Core commit,桌面端测试经 scripts/desktop/desktop-go.sh 读到的就是这份契约。[Windows][Epic] W1-W3 核心工作流补全 #28 合入后要改成合并 commit。
  • 修改插件后端协议的,已在 Core 仓库运行 node shared/plugins/scripts/sdk-e2e.mjs,三个 SDK 示例后端仍能跑通:在 [Windows][Epic] W1-W3 核心工作流补全 #28 的检出上运行,通过。
  • [N/A] 新增或修改宿主方法、宿主通知的,已在下表逐个列出:没有新增或修改宿主方法。

发行包与资源 / Bundle and resources

  • 运行时不向已安装的 app bundle 或 Windows 安装目录写入;已运行 ./scripts/desktop/verify/verify-runtime-bundle-immutability.sh
  • 新增或修改下载、解压、生成或缓存资源的,已同步 scripts/resources/worktree-resources.json、scripts/resources/reuse-worktree-resources.mjs 的校验路由、对应测试和 docs/ci-builds.md“独立工作树的本地编译”一节:删除了已不存在的 mcp-registry-metadata,改了 catalog_generated.rs 的路径,测试同步更新。

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

  • 本次改动导致变成无用的代码已在本 PR 删除:builds.go 的 Source 字段和判断。
  • 本次之前就存在的无用代码或可重构之处:按用户“一次处理完、少开 Issue”的要求,顺手能改的过时内容(MCP Registry 资源条目、git_path_roundtrip 说明、npm shim 笔记)都在本 PR 处理,没有另建 Issue。

验证 / Verification

命令或操作 平台 结果
脚本对照 Core d235401 的 git ls-files,核对本仓库所有非固定修订链接的 rust/crates/... 路径 macOS 改写后的路径全部存在;剩下的不存在路径只有历史记录(已迁出行、archived 笔记、已注明移除的行)和旧客户端 legacy 证据
./scripts/agent-notes/verify-agent-notes.sh macOS 通过,221 篇
./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh macOS 通过,221 项
./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEAD macOS 通过(capability records changed, relevance requires review)
node scripts/resources/test-reuse-worktree-resources.mjs macOS 35/35 通过
node scripts/i18n/verify-app-language-localization.mjs macOS 通过
node scripts/i18n/generate-i18n.mjs --check macOS 通过
./scripts/desktop/verify/verify-runtime-bundle-immutability.sh macOS 通过
scripts/desktop/desktop-go.sh test ./...(固定到 d235401) macOS 53 个包全部通过,3 分 28 秒
Core #28:fmt、clippy(本机和 Windows 目标)、1936 个测试、注释门禁、verify-docs.mjs、sdk-e2e.mjs macOS 全部通过

未能执行的检查和原因: Windows 上的桌面端测试没有在本机运行,交给 ready 后的 CI。

提交前确认 / Final checks

  • 分支从最新的 preview 创建;目标分支:preview
  • 以 Draft 提交,本地验证通过后才标记 ready
  • 没有无关改动,没有提交 .build/、target/、dist/、.artifacts/ 等产物,没有凭据、个人路径和未脱敏的日志或截图
  • 本次构建、测试或预览启动的 Lithe 应用和子进程已全部关闭,没有进程残留

- PINNED_CORE_REVISION 临时固定 Core #28 的 HEAD d235401;#28 合入后改成合并 commit。
- 文档、Skill、Agent Note、功能矩阵和资源清单中 302 处 Core 路径改到拆出的 crate,
  改写后的路径都在 d235401 中存在;固定修订链接、已迁出行和历史说明保持不变。
- builds.go 删除对 source:"hostIntegration" 的判断及只为它读取的字段,Core 已拒绝这种清单。
- 删除已不存在的 mcp-registry-metadata 资源条目、MCP Registry 与 git_path_roundtrip 说明。
- 引用已迁入插件的 Java/Maven 文件的笔记补“已迁出”行;日志笔记改为 runtime::helper_failures
  注入三个 sink;构建系统与 Java 语言服务器笔记注明 hostIntegration 只是保留字段。
- Windows Claude npm shim 笔记归档:Core #18 已删除 agent-host。
@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Nov 13, 2026
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