[Feature] 运行配置支持"运行前步骤":启动前先执行用户指定的编译 / 构建命令(对标 IDEA Before launch)
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 35/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- rust, typescript
調査の方向性
Start by reading shared/contracts/rust-core-api.md for the preLaunchSteps contract, then compare rust/lithe-core/src/execution/configuration.rs and the implementation notes at .agents/notes/implemented/feature/2026-09-17-standalone-java-compile-then-run.md. The work spans configuration storage, Core validation, both platform editors, execution feedback, and trust confirmation. Done means custom steps run before Run and Debug on macOS and Windows, stop startup on failure, and report the outcome in the console.
索引モデルが issue の本文から書いたものです。
説明
Problem to solve / 要解决的问题
有些项目只有在运行前先执行一条特定的编译 / 构建命令才能启动,Lithe 目前没法给运行配置加上这一步。
社区用户反馈的典型场景:
- 老框架项目(非 Spring Boot,页面用 XML 描述),自动识别不到启动类;有的模块不走统一的 Maven 生命周期,要先用别的构建工具或 shell 脚本单独编译某些文件 / 模块,应用才能起来。
- 在 IntelliJ IDEA 里,这类项目靠运行配置的 Before launch 列表处理("Build"、"Build Project"、"Run External tool"、"Run Maven Goal"、执行另一个运行配置等),工具栏的锤子按钮(Build Project / Build Module)也可以单独编译。不配这一步,IDEA 也跑不起来。有用户说为了跑这样一个项目折腾了一整天。
Lithe 现状:
- 启动计划已有
preLaunchSteps(shared/contracts/rust-core-api.md):宿主按顺序执行,任一步非零退出就中止运行并回传诊断。但这些步骤只由 Core 自动生成(独立 Java 文件的javac、Maven 直启前的resources:resources),用户不能自己加。 - 运行配置有 generated / project / local 三层,macOS、Windows 都有编辑器,但没有"运行前步骤"这一栏。
- 目前只能每次手动在终端里先编译再点运行,或者把编译和启动写成一条 shell 命令,这样就丢了 JDK 解析、调试、服务管理等运行配置的上下文。
影响:这类老项目在 Lithe 里没法一键运行 / 调试,迁移过来的用户会直接卡住。
Proposed solution / 建议方案
在运行配置里加 "运行前步骤(Before launch)",让用户按顺序配置要先执行的命令:
- 配置与存储:project / local 层的运行配置增加有序的运行前步骤列表。每一步至少包括:可执行程序与参数(argv 数组,不默认拼 shell 字符串,需要 shell 时显式选
sh -c/cmd /c)、可选工作目录(项目相对路径)、可选环境变量;继承运行配置自己的环境和工具链解析规则。 - Core 负责校验和下发:Rust Core 校验路径(拒绝越出工作区的相对路径等),把用户步骤放进同一个
preLaunchSteps,排在 Core 自动生成的步骤(如 Maven 资源处理)前面或后面,顺序要写进契约。宿主沿用现有"按序执行、失败即止"的编排,不另做一套执行器。 - 编辑界面:macOS 和 Windows 的运行配置编辑器各加一个"运行前步骤"区域,支持增、删、排序、编辑,文案走
shared/i18n。 - 执行反馈:步骤输出进入同一个运行控制台,并标明当前是第几步;步骤失败就中止启动并显示失败的步骤和退出码;取消运行时连同运行前步骤的进程一起清理。
- 安全:project 层的配置来自仓库,可能是别人提交的,第一次执行其中的运行前命令前要像 IDEA 打开不受信任项目那样提示确认;local 层是用户自己写的,不用提示。
可以分阶段交付:先做"自定义命令"步骤(覆盖上面的场景);之后再考虑"执行某个构建任务(Build Provider 任务 / Maven Goal)""先运行另一个运行配置""只编译当前模块"等 IDEA 里的其他步骤类型。
验收:
- 给一个运行配置加一条运行前命令(例如执行项目里的编译脚本)后,点运行会先执行它;成功后才启动主进程,失败时不启动,并在控制台显示原因。
- Run 和 Debug 都会执行运行前步骤。
- macOS、Windows 行为一致。
Target platform / 目标平台
Cross-platform / 跨平台
Area / 模块
Run / 运行
Priority / 优先级
P1 / 尽快处理:使用体验大幅下降,但通常仍可继续使用
Alternatives considered / 已考虑的替代方案
- 手动在终端里先编译再点运行:每次都要记得做,忘了就会跑旧代码或启动失败。
- 把编译和启动写成一条 shell 自定义命令:丢了 Lithe 对 JDK、classpath、调试和服务进程的管理,也不能跨平台。
- IntelliJ IDEA:运行配置的 Before launch 列表(Build、Build Project、Run External tool、Run Maven Goal、Run Another Configuration 等),这条建议就是参照它。
- VS Code:
launch.json的preLaunchTask引用tasks.json里的任务。
Additional context / 补充信息
- 相关:#1180(构建插件注入的运行任务)解决的是"识别出运行入口";这条要解决的是"运行前先执行用户指定的构建步骤",两者互补,不重复。
- 相关:#1133(运行前构建不同步资源文件)是 Core 自动生成的运行前步骤;用户步骤应该复用同一条
preLaunchSteps链路。 - 现有实现参考:
shared/contracts/rust-core-api.md(preLaunchSteps契约)、rust/lithe-core/src/execution/configuration.rs(生成preLaunchSteps)、.agents/notes/implemented/feature/2026-09-17-standalone-java-compile-then-run.md(宿主执行运行前步骤的编排)。 - 来源:社区群里的讨论,一位用户的老框架项目需要运行前单独编译才能启动,另一位用户也遇到过同样的问题。
Checklist / 提交前检查
- I searched existing issues for duplicates. / 我已搜索现有 Issue,确认没有重复建议。
- 主要言語
- TypeScript
- スター
- 1.8k
- フォーク
- 151
- 平均マージ
- 12時間 4分
- マージ済み PR(30日)
- 366
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
1lck/Lithe-IDEA のほかの issue
-
area:editor bug P0 platform:macos review: low
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
1lck/Lithe-IDEA#1118 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
bug issue-form:bug review: high
難易度 4/5 3〜5日 初心者へのやさしさ 12/100
1lck/Lithe-IDEA#1649 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
review: low
難易度 3/5 1〜2日 初心者へのやさしさ 35/100
1lck/Lithe-IDEA#1648 ·
メンテナーはふだん 1 日以内に返信
-
跳转问题オープンreview: low
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
1lck/Lithe-IDEA#1644 ·
メンテナーはふだん 1 日以内に返信
-
area:settings enhancement P2 platform:macos review: high
難易度 4/5 3〜5日 初心者へのやさしさ 30/100
1lck/Lithe-IDEA#1641 ·
メンテナーはふだん 1 日以内に返信
1lck/Lithe-IDEA の issue をすべて見る
似ている issue
-
Add: Class TV Modaオープンcheck:passed streams:add
難易度 1/5 1時間未満 初心者へのやさしさ 65/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
GiganticMinecraft/seichi-playguide#183 ·
メンテナーはふだん 1 日以内に返信
-
area: core complexity: easy impact: medium
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
ueberdosis/tiptap#8668 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
longbridge/nsh#804 ·
メンテナーはふだん 1 日以内に返信