Repository navigation
Conversation
…sue-1495-workspace-capabilities
…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
This was referenced Oct 29, 2026
Collaborator
|
构建工具的 API 都 7 版本了么,记得同步 docs 仓库里面的开发文档呀 |
xiaoyumuxi
reviewed
Oct 30, 2026
Collaborator
There was a problem hiding this comment.
需要修改:Maven 迁移必须只用已有的通用 API,宿主/Core 不能内置 Maven 或 JVM 逻辑
#1495 的目标是把 Maven 从宿主迁成插件。现在的实现一边迁出去,一边又在宿主和 Core 里加了新的 Maven/Java 专属路径,和插件化的方向相反。原则是:插件只能使用已有的通用 API;通用 API 不够时,按通用方式扩展契约(不出现针对某个运行时或工具的枚举);宿主和 Core 里不得有按工具名写的实现或特判。
各协议版本的结论
| 版本 / 新增项 | 结论 | 理由 |
|---|---|---|
v7 原生配置(build.configurationPlan、lithe/build/configuration、litheBuildConfiguration、Core 的 build.editConfigurationDocument) |
驳回 | 字段绑定写死了 XML,Core 内置了 XML 编辑器,实际上只适用于 Maven 的 settings.xml。见第 4 点 |
v8 内联测试报告(results.decoder: "provider"、litheTestResults、coverage) |
通过 | 格式统一,去掉了宿主解析 Surefire 报告的依赖。条件是宿主直接使用 litheTestResults,不转成 MavenTestResults(见第 3 点) |
v9 不透明测试选择器(selectorKinds、selectors) |
通过 | 宿主只转发、不解析,适用于任何工具 |
v10 类型化运行选项(execution: application/service/task、launchOptions) |
通过 | 参数、环境变量、入口、工作目录都是通用的,entrypoint 是不透明字符串 |
v11 JVM 服务调试(launchOptions.debug: { runtime: "jvm", port }) |
驳回 | 针对某个运行时的枚举,并且接到宿主内置的 Java attach 上。见第 1 点 |
executableResolution 2({ kind: "toolchain", toolchainID } 候选) |
部分驳回 | 候选指向宿主内置注册的 project-maven/project-maven-jdk。可执行文件和它用的 JDK 要由插件在清单里声明,宿主按声明解析。环境版本管理要等 #1581 合入后再适配。见第 2 点 |
Java 构建准备任务约定(java-prepare-run-main/java-prepare-run-test) |
驳回或改写 | 宿主约定固定任务 ID,等于宿主里的 Java 工作流按名字调用插件。改成由提供者在清单里声明任务为哪类准备服务,宿主按声明查找。见第 5 点 |
v7 和 v11 重新设计后,请确认 v8~v10 的版本号是否需要重排,并同步说明对 Lithe-IDEA/lithe-plugin-docs#5 里 SDK 代码的影响。
1. JVM 服务调试(buildProviders 11)要改走 debugAdapters 和 connection attach
- 契约里的
launchOptions.debug: { "runtime": "jvm", "port" }是针对某个运行时的枚举。协议 3 起只增不改,一旦发布就去不掉。 - 宿主准备好服务后调用
resolveJavaAttach(host:port:),生成写死了adapterProviderID: "java"的配置(AppModel+BuildProviderDebugging.swift、DebugLaunchConfigurationResolver.swift),走的是宿主内置的 Java 调试路径,没有经过插件注册的适配器。 - 已有的通用能力完全能覆盖这个场景:API 4 的
debugAdapters支持attach,用targetBindings.connection绑定端点,java-debug 的hostName/port就是契约里的示例;JDT 的 Java Debug Server 可以用tcpLanguageServer声明。 - 期望的做法:调试选项声明 attach 用哪个适配器(适配器 ID 或
configurationType),不写运行时种类;宿主选好端口,让提供者以监听模式启动进程,然后用{ kind: "connection", host: "127.0.0.1", port }目标交给debugAdapters注册表去 attach。这样 Node 的--inspect、debugpy、dlv 以后可以直接复用。
2. 宿主/Core 不得写死 project-maven 和 project-maven-jdk
RunService.swift(两处)、AppModel+JavaBuildPreparation.swift调用buildProviderHints(..., toolchain: "project-maven", ...);RunToolchainProviders.swift新增了project-maven-jdk;契约里也写着 “Maven declaresproject-maven-jdk”。- 构建工具和它用的 JDK 应该由插件在清单里声明(
invocation、executableResolution候选),宿主按声明解析,不按名字取值。 - 环境版本管理请等 #1581 合入后再适配。 #1581 新增通用的声明式
toolchainSources,统一处理版本管理器(mise 等)安装的运行时和项目版本文件,JDK 和 Maven 的选择链也会接入。本 PR 先不要新增project-maven-jdk这类宿主注册的 toolchain,也不要自己实现一套 Maven JDK 或 Maven 版本的选择逻辑;等 #1581 合入后,Maven 插件基于toolchainSources和清单声明的候选来选择 JDK 与 Maven,避免出现两套版本选择机制。
3. Core 不得解析 Maven 专属配置和框架
execution/configuration.rs新增了对config["provider"] == "maven.module"、extensions.maven(module、profiles、skipTests、mainClass、reactorPath、jvmArguments)的解析,以及"spring-boot.maven" | "quarkus.maven" | "micronaut.maven"框架名单。project_ownership.rs、ProjectRuntimeModels、LanguageTestService.swift(MavenTestResults)等处新增了maven_run_provider、maven_reactor_path、maven_wrapper、maven_minimum_version等字段。- 这些语义应该属于 Maven 插件:Core 只把运行选择器(
provider: "build.provider"+extensions.build)原样交给提供者,提供者自己决定 profile、reactor 和框架目标。测试结果统一用 v8 的litheTestResults,不再转换成 Maven 专用的结构。
4. v7 原生配置不能只支持 XML
litheBuildConfiguration的绑定方式(rootElement/namespace、XML 元素路径)和 Core 内置的 XML 编辑器build.editConfigurationDocument只适用于 Maven 的settings.xml。- 通用做法:定义与格式无关的字段绑定,由提供者负责读写自己的格式;或者把文档编辑也交给提供者,宿主只做冲突检查、确认和原子写回。否则 Gradle、npm、Cargo 以后都要再加版本。
5. Java 构建准备任务约定要改成声明式
java-prepare-run-main/java-prepare-run-test是宿主里的 Java 工作流按约定好的任务 ID 调用构建提供者,属于宿主按名字调用插件。- 改成由提供者在清单里声明“某个任务为哪类准备服务”(例如在任务上加一个通用的用途字段),宿主按声明查找任务,不再在契约里约定固定 ID。
6. 临时迁移代码
MacLegacyMavenConfigurationMigration如果只用于把旧配置一次性迁到插件,请标明它是临时代码以及删除的时间点,并且不要在迁移以外的路径上复用。这个需要单独的进行记录跟追踪的哎
影响
Lithe-IDEA/lithe-plugin-docs#5 的 SDK 协议 7~11 和 Lithe-IDEA/lithe-plugin-maven#8 都依赖这里的契约,需要等上面几点改完、契约稳定后再同步和合入。其中 Lithe-IDEA/lithe-plugin-docs#5 里协议 8~10 的 SDK 代码可以保留;协议 7 和 11 的部分要跟着新设计重写。
建议的合入顺序:#1581(版本管理)→ 本 PR 按上述意见修改,并把 JDK/Maven 选择适配到 toolchainSources → 同步契约到 lithe-plugin-docs,再合入 Lithe-IDEA/lithe-plugin-docs#5 和 Lithe-IDEA/lithe-plugin-maven#8。
This was referenced Oct 31, 2026
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
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
阶段 D 把 Maven 的任务、配置、测试与运行事实交给 Provider,宿主保留编排、存储及进程生命周期。本 PR 仍为 Draft,不关闭 #1495。针对 review 5715250513 已修正下列边界;工具链消费及 Core Maven 运行配置所有权仍未收尾,尚不适合标记 Ready。
本轮 review 修正
已接入的生产范围
本轮验证
仍待完成及合并顺序
详细删除账本与依赖见 docs/development/issue-1495-plugin-migration-remaining-plan.md;本 PR 不自动合并、标记 Ready 或发布。