opencode-idea 0.0.19 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -364,22 +364,29 @@ loader 读的是 OpenCode 文档里的那个嵌套写法(它自己的读取器
364
364
  1. **建 / 改 / 删**(直接动手):Shell 类型走 `ide_create_shell_run_configuration`,其余类型直接写 / 改 / 删 `.run/<名字>.run.xml`,
365
365
  **每种类型照自己的模板写**,写完用 `get_run_configurations` 复查;
366
366
  2. **建档**:过滤之后剩下的每个 run configuration 在**项目根 `AGENTS.md`** 的标记块(`<!-- idea-run-config-manager:begin -->` /
367
- `<!-- idea-run-config-manager:end -->`)里占一行 —— `项目 | run configuration | 怎么跑 | 何时跑 | 跑前做 | 说明`,
368
- **按操作系统分成两张表**(macOS / Linux、Windows,与 `idea-standalone` 的两张应用表同一种拆法:同一条流程在两个平台上常常不是同一条命令);
369
- **与 `idea-standalone` 块的表共享同一套公共列并同序同宽**(谁 / `run configuration` / `怎么跑` / `何时跑` / `跑前做` / `说明`),
370
- 但**各自特有的列留在自己的语义位置**:standalone 的应用表多一格 `端口`(服务化应用一定有),固定流程表没有;
371
- 列宽按同一约定(中文两字 = 四个 dash),所以**不需要补空格**,`edit` 之类的工具重写文件也不会破坏对齐;
372
- **热重载矩阵只有 3 列,不参与这套对齐** —— 它答的是"改动后要不要重启";
373
- **目录 / 端口 / 干什么都不单开一格**(standalone 的端口除外):前两个配置里本来就有,抄进表只会过时,第三个与 `说明` 重复;
367
+ `<!-- idea-run-config-manager:end -->`)里占**一个条目** —— 标题是配置名(括号里写它属于哪个项目),下面四项固定:
368
+ `怎么跑` / `何时跑` / `跑前做` / `说明`;
369
+ `何时跑` 回答的是**谁能起它**,二选一(不写"需要时"):`只由用户触发`(AI 不自己跑,等用户开口,后面写用户通常在什么情况下要它跑)
370
+ / `AI 可自动触发`(AI 判断到场景就自己跑,**必须把场景写具体**);判断不了就问用户,有副作用(改远端 / 动数据 / 出产物)
371
+ 又说不清场景的,归第一种;
372
+ **按操作系统分成两节**(macOS / Linux、Windows,与 `idea-standalone` 的两张应用表同一种拆法:同一条流程在两个平台上常常不是同一条命令);
373
+ **与 `idea-standalone` 应用表的列对得上** —— `怎么跑` / `跑前做` / `说明` 三项同名同序;**本块多一项 `何时跑`**(构建 / 迁移这类固定流程确实发生在某个时刻),
374
+ 那边**多一列 `端口`**,**没有 `何时跑`** —— 服务化应用就是"改完代码要起它来测"的时候起,时机不值得单列;
375
+ **热重载矩阵只有 3 列,不参与这套对应** —— 它答的是"改动后要不要重启";
376
+ **目录 / 端口 / 干什么都不单开一项**(standalone 的端口除外):前两个配置里本来就有,抄进来只会过时,第三个与 `说明` 重复;
374
377
  3. **过滤**:服务化(长驻应用)的配置归 `idea-standalone` 的块,这里先读那个块把它排除,**两个块永不重叠**。
375
378
 
379
+ > **两个块的形态刻意不同**:档案块是**条目式**(一条配置一个条目,四项目各占一行 —— `说明` 常是一段话,塞进表格格子里既难读、
380
+ > 又要靠补空格维持对齐),`idea-standalone` 的应用表**保持表格**(列短、还有 `端口` 这种一格一个值的列)。
381
+ > 所以两边对齐的是**项名与顺序**,不是宽度;`AGENTS.md` 里一眼能看出哪几条是服务、哪几条是固定流程,靠的就是这一套同名的项。
382
+
376
383
  **SKILL.md 只有一份五步流程**(读 → 枚举 → 建 / 删 / 改 → 同步 → 核对),外加**支持矩阵**与**硬性契约**(落地位置、固定信封、复查、
377
384
  路径宏、不要写模板外的字段)——**它自己就带着规矩**;两类内容另放在两个地方,各管一段:
378
385
 
379
386
  | 模板 | 装什么 |
380
387
  | ---------------------------------------------------------- | ------------------------------------------------------------------------------------- |
381
388
  | `skills/idea-run-config-manager/assets/types/<类型>.md` | **一个类型一份**:那个类型的实测样本 + 字段表 + 坑(索引就是 SKILL.md 里的**支持矩阵**) |
382
- | `skills/idea-run-config-manager/assets/AGENTS.template.md` | 产物(档案)的骨架:表格列、每一列写什么、枚举与过滤的要求,都在它的生成提示里 |
389
+ | `skills/idea-run-config-manager/assets/AGENTS.template.md` | 产物(档案)的骨架:条目怎么写、四项分别写什么、枚举与过滤的要求,都在它的生成提示里 |
383
390
 
384
391
  **支持矩阵(7 份已落、2 份待实物)**:
385
392
 
@@ -396,14 +403,14 @@ loader 读的是 OpenCode 文档里的那个嵌套写法(它自己的读取器
396
403
  把矩阵里那个类型从 ⏳ 改成 ✅。**每个字段名都来自真实文件,不靠猜** —— `js.build_tools.npm`(属性 + 自定义元素)、`ShConfigurationType`
397
404
  (`<option>` 子元素)、`NodeJSConfigurationType`(全属性)三种写法并存,套错就是静默失效。
398
405
 
399
- **先过滤,再建档**:**服务化的配置不进这张表** —— 它们已经登记在 `AGENTS.md` 的 `idea-standalone` 块里(端口 / 热重载也写在那里),
400
- 所以建档第一步是读那个块、把它的表里出现过的名字记下来并排除,**剩下的**才是本表内容。
406
+ **先过滤,再建档**:**服务化的配置不进这个块** —— 它们已经登记在 `AGENTS.md` 的 `idea-standalone` 块里(端口 / 热重载也写在那里),
407
+ 所以建档第一步是读那个块、把它的表里出现过的名字记下来并排除,**剩下的**才是本块内容。
401
408
 
402
- 这张表**以带前缀的工具为准**,不围绕 IDE 界面说话:各项目各有自己的前缀(root 是 `ide`,子项目是它的目录名),枚举与执行都用**它自己那个前缀**的
403
- `<前缀>_get_run_configurations` / `<前缀>_execute_run_configuration` …;`项目` 列写的就是这个前缀,一条配置属于谁、该用哪套工具跑由它决定。
409
+ 这个档案块**以带前缀的工具为准**,不围绕 IDE 界面说话:各项目各有自己的前缀(root 是 `ide`,子项目是它的目录名),枚举与执行都用**它自己那个前缀**的
410
+ `<前缀>_get_run_configurations` / `<前缀>_execute_run_configuration` …;**条目标题括号里写的就是这个前缀**,一条配置属于谁、该用哪套工具跑由它决定。
404
411
 
405
- 这张表的用途是**能被下次读到**:要办同类事情时先查它,有现成的就用,不再重复建 —— 所以**联动是硬要求**:配置被**新建 / 删除 / 修改**
406
- (无论谁做的:工具建的、用户自己建的、用户删掉的)都要在文档里同步**加行 / 删行 / 改行**,否则表就开始骗人。
412
+ 这个块的用途是**能被下次读到**:要办同类事情时先查它,有现成的就用,不再重复建 —— 所以**联动是硬要求**:配置被**新建 / 删除 / 修改**
413
+ (无论谁做的:工具建的、用户自己建的、用户删掉的)都要在文档里同步**加条目 / 删条目 / 改条目**,否则它就开始骗人。
407
414
 
408
415
  **别的文档都指向这里**:引导文本与 `idea-standalone` skill 碰到"要建 / 删 / 改一个配置",不再让用户自己去 IDE 里摸,而是让用户调本 skill ——
409
416
  增 / 删 / 改的流程入口只有这一个,而它只由用户触发。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-idea",
3
- "version": "0.0.19",
3
+ "version": "0.0.20",
4
4
  "description": "OpenCode plugin that connects to JetBrains IDE MCP servers and prefers IDE tools when the current project is open in the IDE",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -1,18 +1,18 @@
1
1
  ---
2
2
  name: idea-run-config-manager
3
3
  requires: create_shell_run_configuration
4
- description: "管理本项目的 run configuration:直接增 / 删 / 改(新建走工具,改和删直接编辑 `.run/<配置名>.run.xml` —— 都照 `assets/types/` 里**逐类型实测模板**写,没有模板的类型交给用户在 IDE 里配),并把配置档案同步进**项目根 `AGENTS.md`** 里由 `<!-- idea-run-config-manager:begin -->` 与 `<!-- idea-run-config-manager:end -->` 包裹的标记块 —— 每个 run configuration 一行,写清它干什么、怎么跑、什么时候跑;服务化的那些不在这里,它们归 `idea-standalone` 的块。当用户要建 / 删 / 改 run configuration,或要一份"这个项目有哪些配置、各自干什么"的说明时使用。"
4
+ description: "管理本项目的 run configuration:直接增 / 删 / 改(新建走工具,改和删直接编辑 `.run/<配置名>.run.xml` —— 都照 `assets/types/` 里**逐类型实测模板**写,没有模板的类型交给用户在 IDE 里配),并把配置档案同步进**项目根 `AGENTS.md`** 里由 `<!-- idea-run-config-manager:begin -->` 与 `<!-- idea-run-config-manager:end -->` 包裹的标记块 —— 每个 run configuration 一个条目,写清它干什么、怎么跑、什么时候跑;服务化的那些不在这里,它们归 `idea-standalone` 的块。当用户要建 / 删 / 改 run configuration,或要一份"这个项目有哪些配置、各自干什么"的说明时使用。"
5
5
  metadata:
6
6
  opencode/autoinvoke: false
7
7
  ---
8
8
 
9
9
  # idea-run-config-manager — 增删改 run configuration + 维护配置档案
10
10
 
11
- **联动是硬要求**:配置被**新建 / 删除 / 修改**,文档就跟着**加行 / 删行 / 改行** —— 无论那次改动是谁做的(你做的、用户自己做的、用户删掉的,都算)。改了配置却忘了同步这张表,等于这张表在骗下一个读者。
11
+ **联动是硬要求**:配置被**新建 / 删除 / 修改**,文档就跟着**加条目 / 删条目 / 改条目** —— 无论那次改动是谁做的(你做的、用户自己做的、用户删掉的,都算)。改了配置却忘了同步这个档案块,等于它在骗下一个读者。
12
12
 
13
13
  ## 流程
14
14
 
15
- 1. **读**:项目根 `AGENTS.md` —— 有没有 `<!-- idea-run-config-manager:begin -->` … `<!-- idea-run-config-manager:end -->` 标记块(有则更新,没有就在文件末尾追加);同时读同文件里 `idea-standalone` 的标记块,它登记过的配置不进本表。
15
+ 1. **读**:项目根 `AGENTS.md` —— 有没有 `<!-- idea-run-config-manager:begin -->` … `<!-- idea-run-config-manager:end -->` 标记块(有则更新,没有就在文件末尾追加);同时读同文件里 `idea-standalone` 的标记块,它登记过的配置不进本块。
16
16
  2. **枚举**:逐个项目用**它自己那个前缀**的 `<前缀>_get_run_configurations` 直接调用,不传参数 —— 本项目的工具前缀跟着接入时的名字走(root 是 `ide`,子项目是它的目录名)。
17
17
  3. **建 / 删 / 改**(**直接动手**):
18
18
  1. **先查重**:已经在做同一件事的配置直接复用,不要新建一个几乎一样的。
@@ -21,8 +21,8 @@ metadata:
21
21
  - **没有模板**(⏳ 或矩阵之外)→ **交给用户**:讲清要配什么(配置名、干什么、什么时候跑),请他在 IDE 里配好,你只负责把档案补上。
22
22
  3. **写完必须复查**:`<前缀>_get_run_configurations` 里要能看到它。**看不到就是文件没被 IDE 认** —— `type` 写错会被静默忽略且不报错,回去查 `type` / 文件位置 / 信封。
23
23
  4. **不要手搓启动命令**代替配置,也**不要写模板里没有的字段**(多余字段被忽略、名字写错静默用默认值,都不会报错)。
24
- 4. **同步文档**:按 [assets/AGENTS.template.md](assets/AGENTS.template.md) 逐段填,写在标记块内 —— **表格列、每一列写什么、枚举与过滤的要求,都在那份模板的生成提示里**,动手前先读它;生成提示是给生成过程的说明,**产物里整块删掉**,块外一字不动(尤其**不要触碰**其他 skill 的标记块)。
25
- 5. **核对**:表里每个名字项目里都还在,项目里每个配置表里都有。
24
+ 4. **同步文档**:按 [assets/AGENTS.template.md](assets/AGENTS.template.md) 逐段填,写在标记块内 —— **条目怎么写、四项分别写什么、枚举与过滤的要求,都在那份模板的生成提示里**,动手前先读它;生成提示是给生成过程的说明,**产物里整块删掉**,块外一字不动(尤其**不要触碰**其他 skill 的标记块)。
25
+ 5. **核对**:块里每个名字项目里都还在,项目里每个配置块里都有。
26
26
 
27
27
  ## 支持矩阵(一个类型一份模板)
28
28
 
@@ -4,43 +4,55 @@
4
4
 
5
5
  <!-- 生成提示:begin -->
6
6
 
7
- 本块由 `idea-run-config-manager` skill 生成与维护:它是**项目里每个 run configuration 的说明书**。标记之外是项目自己在 `AGENTS.md` 里维护的内容,本 skill 一律不动;也只写这个项目 —— 不写全局配置目录,不另建规则文件。
8
- `{...}` 是待替换的元变量,不留进产物。未涉及的表格行整块删掉,不留空标题。
7
+ 标记之外是项目自己在 `AGENTS.md` 里维护的内容,本 skill 一律不动;也只写这个项目 —— 不写全局配置目录,不另建规则文件。
8
+ `{...}` 是待替换的元变量,不留进产物。未涉及的条目与小节整块删掉,不留空标题。
9
9
  **`<!-- 生成提示:… -->` 是给生成过程的说明,产物里整块删掉** —— 产物是给 AI 当规则读的,里面不该留指令。
10
10
  <!-- 生成提示:end -->
11
11
 
12
- 这张表由 `idea-run-config-manager` 维护:配置被**新建 / 删除 / 修改**时,对应的行要跟着**加 / 删 / 改**。
13
- 配置本身可以由 AI 直接增删改 —— 照 `assets/types/` 里那个类型的模板写 `.run/<配置名>.run.xml`;**没有模板的类型交给用户在 IDE 里配**。
14
- **服务化的配置不在本表** —— 它们已经登记在 `AGENTS.md` 的 `idea-standalone` 块里;本表收的是**其余**的 run configuration。
12
+ 本项目里**除服务化应用之外**的 run configuration:每个配置**是什么、怎么跑、什么时候跑**;服务化(长驻应用)的配置登记在 `idea-standalone` 块里,不在这里。
13
+
14
+ 一条配置一个条目 —— 标题是**配置名**(括号里写它属于哪个项目),下面四项固定:`怎么跑`(走哪条工具去跑)/ `何时跑`(**谁能起它**:只由用户触发,还是 AI 判断到某个场景就自动跑)/ `跑前做`(跑之前要先做的事,多数没有)/ `说明`(它是什么、有什么坑)。
15
15
 
16
16
  ## run configuration 一览
17
17
 
18
18
  <!-- 生成提示:begin -->
19
19
 
20
- **先过滤**:动手前读 `<项目根>/AGENTS.md` 里 `idea-standalone` 的标记块,把它的表里出现过的 run configuration 名字收集起来 —— **这些一律不进本表**(它们服务化 / 长驻,端口与热重载已在那边写清)。剩下的才是本表内容;没有那个块就不过滤。
20
+ **先过滤**:动手前读 `<项目根>/AGENTS.md` 里 `idea-standalone` 的标记块,把它登记过的 run configuration 名字收集起来 —— **这些一律不进本块**(它们服务化 / 长驻,端口与热重载已在那边写清)。剩下的才是本块内容;没有那个块就不过滤。
21
21
  **枚举以工具为准**:各项目各有自己的工具前缀(root 是 `ide`,子项目是它的目录名),看哪个项目就用**它自己那个前缀**的工具 —— `<前缀>_get_run_configurations` 直接调用,不传参数,它给出 IDE 真正认的配置(含存在 `.idea/` 里的那些,单翻 `.run/` 目录看不到)。**项目与各子项目里真正存在的、过滤后剩下的都要有。**
22
- **项目**列写那套工具的前缀(root 写 `ide`,子项目写它的目录名):一条配置属于谁、该用哪套工具去看和跑,由这一列决定。
23
- `run configuration` 列必须是该前缀下**真实存在的名字**,不凭印象写;表里有、项目里已经没有的**整行删掉**。
24
- **按操作系统分成两张表**:macOS / Linux 一张,Windows 一张。同一份流程在两个平台上常常不是同一条命令(解释器不同、脚本后缀不同、路径写法不同),所以**按这个配置真正能跑的那个平台归表**,不要把 Windows 上才成立的命令写进 macOS 那张表。判断依据看配置里的解释器路径与脚本内容(例如 `INTERPRETER_PATH` 指向 PowerShell、命令里有 `\` 路径的,就是 Windows);**判断不了就问用户**,不猜。只在一个平台成立的流程就只写那一张表。
22
+ **项目写在标题的括号里**(那套工具的前缀:root 写 `ide`,子项目写它的目录名):一条配置属于谁、该用哪套工具去看和跑,由它决定。
23
+ 标题里的配置名必须是该前缀下**真实存在的名字**,不凭印象写;块里有、项目里已经没有的**整个条目删掉**。
24
+ **按操作系统分成两节**:macOS / Linux 一节,Windows 一节。同一份流程在两个平台上常常不是同一条命令(解释器不同、脚本后缀不同、路径写法不同),所以**按这个配置真正能跑的那个平台归节**,不要把 Windows 上才成立的命令写进 macOS 那一节。判断依据看配置里的解释器路径与脚本内容(例如 `INTERPRETER_PATH` 指向 PowerShell、命令里有 `\` 路径的,就是 Windows);**判断不了就问用户**,不猜。只在一个平台成立的流程就只写那一节。
25
25
 
26
26
  **怎么跑**写走哪条工具:跑完即退的用 `<前缀>_execute_run_configuration`;长驻进程用 `<前缀>_rerun_run_configuration`(在跑就重启、没在跑就启动)。**不要**用 `execute` 跑长驻进程 —— 它是 Run 路径,对常驻进程**它会起出重复实例**。
27
- **何时跑**写触发场景(改完表结构 / 发版前 / 换分支后 / 只在联调时 …)。
28
- **跑前做**写**跑之前要先做的事**(先装依赖 / 先构建 / 先起某个服务):**多数留空**。确实得先做点什么才写,而且**按顺序写清第 1 步、第 2 步**。前置事项往往**不是**一个 run configuration(没有对应配置),所以只能写在这里 —— 漏了它,照着表跑的人会直接跑出一个起不来的流程。
29
- **说明**是这个配置唯一的自由文本格:**它是什么、干什么的**(同步某个环境的 DDL / 生成代码 / 跑迁移 …),以及有什么坑(必须先备份 / 只对某个环境生效 / 幂等与否 …)。
30
- 分两件事都往这里写,**不要再单开一列**。写清它到底跑什么命令,就读它所在项目的落地文件 `.run/<name>.run.xml` 看里面的内容,拿不准就**问用户**,不猜。
31
- 这张表的**主要价值**就在这一格:下次要办同类事情先在这里搜关键词,找得到就直接用,**不要再建一个重复的**。
27
+ **何时跑**写**谁能起它、什么场景起它** —— 二选一,必须写明:
28
+
29
+ - **只由用户触发**:AI **不自己跑**,等用户开口;后面写用户通常在什么情况下会要它跑(发版前 / 出安装包 / 回归)。
30
+ - **AI 可自动触发**:AI 判断到这个场景就自己跑;后面**必须把场景写具体**(改完某类代码要生成代码 / 改了依赖要装依赖 / 改了 schema 要同步某个环境的 DDL),不写"需要时""合适时"。
31
+
32
+ 判断不了就问用户。**有副作用的流程(改远端、动数据、出产物)说不清场景就别标成 AI 可自动触发** —— 归第一种。
33
+ **跑前做**写**跑之前要先做的事**(先装依赖 / 先构建 / 先起某个服务):**多数没有,整项不写**。确实得先做点什么才写,而且**按顺序写清第 1 步、第 2 步**。前置事项往往**不是**一个 run configuration(没有对应配置),所以只能写在这里 —— 漏了它,照着本块跑的人会直接跑出一个起不来的流程。
34
+ **说明**是这个条目唯一的自由文本项:**它是什么、干什么的**(同步某个环境的 DDL / 生成代码 / 跑迁移 …),以及有什么坑(必须先备份 / 只对某个环境生效 / 幂等与否 …)。
35
+ 分两件事都往这里写,**不要再开新项**。写清它到底跑什么命令,就读它所在项目的落地文件 `.run/<name>.run.xml` 看里面的内容,拿不准就**问用户**,不猜。
36
+ 本块的**主要价值**就在**说明**与**跑前做**:下次要办同类事情先在这里搜关键词,找得到就直接用,**不要再建一个重复的**。
32
37
  **目录、端口这类"配置里本来就有"的字段不要抄进来** —— 它们会跟配置变旧而对不上;确实要交代依赖关系,就写进 `说明` 或 `跑前做`。
33
- **列宽按同一约定**(中文两字 = 四个 dash,英文按字符数),**与 `idea-standalone` 的两张应用表公共列一一对位、宽度一致**(谁 / `run configuration` / `怎么跑` / `何时跑` / `跑前做` / `说明`);**各自的特有列插在自己的语义位置上** —— 那边的应用表多一格 `端口`(服务化应用一定有),本表没有,固定流程不是服务。**某格不适用就留空,不要写 `-`;填行时别去改表头的空格。**
38
+ **四项的项名与顺序不要改**(`怎么跑` / `何时跑` / `跑前做` / `说明`),并且**与 `idea-standalone` 应用表的列对得上**:三项同名同序(`怎么跑` / `跑前做` / `说明`),本块**多一项 `何时跑`**、那边**多一列 `端口`**(服务化应用就是"改完代码要起它来测"的时候起,不用单列时机)—— 两个块住在同一份 `AGENTS.md` 里,名字与顺序对上了,才看得出哪几条是服务、哪几条是固定流程。某一项确实没有内容就**整项不写**,不要写 `-` / `无` / `N/A`。
39
+
34
40
  <!-- 生成提示:end -->
35
41
 
36
42
  ### macOS / Linux
37
43
 
38
- | 项目 | run configuration | 怎么跑 | 何时跑 | 跑前做 | 说明 |
39
- | ---- | ----------------- | ------ | ------ | ------ | ---- |
44
+ - {配置名}(项目 {前缀})
45
+ - 怎么跑:{<前缀>_execute_run_configuration}
46
+ - 何时跑:{只由用户触发 / AI 可自动触发} —— {什么场景}
47
+ - 跑前做:{第 1 步 / 第 2 步}
48
+ - 说明:{它是什么 + 有什么坑}
40
49
 
41
50
  ### Windows
42
51
 
43
- | 项目 | run configuration | 怎么跑 | 何时跑 | 跑前做 | 说明 |
44
- | ---- | ----------------- | ------ | ------ | ------ | ---- |
52
+ - {配置名}(项目 {前缀})
53
+ - 怎么跑:{<前缀>_execute_run_configuration}
54
+ - 何时跑:{只由用户触发 / AI 可自动触发} —— {什么场景}
55
+ - 跑前做:{第 1 步 / 第 2 步}
56
+ - 说明:{它是什么 + 有什么坑}
45
57
 
46
58
  <!-- idea-run-config-manager:end -->
@@ -39,23 +39,22 @@
39
39
  让他调 `idea-run-config-manager` skill 去建(那个 skill 管这个项目 run configuration 的增 / 删 / 改),不要手搓启动命令,也不要自己写 `.run/*.run.xml`。
40
40
  **怎么跑**写走哪条工具:常驻 / 服务化的配置一律 `rerun`(在跑就重启、没在跑就启动),**不要**用 `execute` —— 它是 Run 路径,对常驻进程会起出重复实例;细节见「跑应用只用 rerun」那条。
41
41
  **端口**写清"固定 / 默认 / 被占用即启动失败";读不到就**问用户**,不要编。**服务化的应用一定有端口**,这一格是它区别于固定流程的地方。
42
- **何时跑**列写**什么时候起它**(日常开发 / 只在某个流程之前 / 联调时才起 …);多数应用留这一格就够,起不来就写清触发场景。
43
42
  **跑前做**列写**跑之前要先做的事**:**多数应用留空**。只有确实"得先做点什么才能起"时才写,而且**按顺序写清第 1 步、第 2 步、第 3 步**(例如 `1. 装依赖 2. 构建 3. 起前置服务`);
44
43
  这些事**用文字写出来**(AI 照这段文本自己按序去做)。这类前置事项往往没被写成 run configuration,所以必须在这里说明,否则 AI 直接 rerun 会拿到一个起不来的进程。
45
44
  **哪个应用必须先起来**也要写明(例如前端 dev server 的 proxy 指向本机后端)。与本项目无关的应用不写。
46
- **说明**写剩下的坑与依赖关系(依赖谁、跟别的应用什么先后)。**目录**这类配置里本来就有的字段不要单开一格 —— 会跟配置变旧而对不上。
47
- **列宽按同一约定**(中文两字 = 四个 dash,英文按字符数),**两个块各自的 macOS / Linux 表、Windows 表,公共列一一对位、宽度一致**(谁 / `run configuration` / `怎么跑` / `何时跑` / `跑前做` / `说明`);**各自特有的列插在自己的语义位置上** —— 应用表多一格 `端口`,因为服务化应用一定有端口,`idea-run-config-manager` 的流程表没有这一格。两个块住在同一份 `AGENTS.md` 里,公共列对上了才看得出哪几行是服务、哪几行是固定流程。**某格不适用就留空,不要写 `-`;填行时别去改表头的空格。**
45
+ **说明**写剩下的坑与依赖关系(依赖谁、跟别的应用什么先后),以及例外(**只在联调 / 某个流程之前才需要起**之类)。**目录**这类配置里本来就有的字段不要单开一格 —— 会跟配置变旧而对不上。
46
+ **列宽按同一约定**(中文两字 = 四个 dash,英文按字符数),**两张应用表的公共列一一对位、宽度一致**(同一份 `AGENTS.md` 里两张表才像一家人)。**列名与顺序要和 `idea-run-config-manager` 的条目项对得上**(`怎么跑` / `跑前做` / `说明` 三项同名;**本表多一列 `端口`**(服务化应用一定有端口),**少一项 `何时跑`** —— 服务化应用就是"改完代码要起它来测"的时候起,没有别的时机可写)—— 两个块住在同一份 `AGENTS.md` 里,名字与顺序对上了才看得出哪些是服务、哪些是固定流程。**本块保持表格形式**(那边改成条目式了,这边不跟:应用有端口这样的短列,表格更好扫)。**某格不适用就留空,不要写 `-`;填行时别去改表头的空格。**
48
47
  <!-- 生成提示:end -->
49
48
 
50
49
  ### macOS / Linux
51
50
 
52
- | 应用 | run configuration | 怎么跑 | 端口 | 何时跑 | 跑前做 | 说明 |
53
- | ---- | ----------------- | ------ | ---- | ------ | ------ | ---- |
51
+ | 应用 | run configuration | 怎么跑 | 端口 | 跑前做 | 说明 |
52
+ | ---- | ----------------- | ------ | ---- | ------ | ---- |
54
53
 
55
54
  ### Windows
56
55
 
57
- | 应用 | run configuration | 怎么跑 | 端口 | 何时跑 | 跑前做 | 说明 |
58
- | ---- | ----------------- | ------ | ---- | ------ | ------ | ---- |
56
+ | 应用 | run configuration | 怎么跑 | 端口 | 跑前做 | 说明 |
57
+ | ---- | ----------------- | ------ | ---- | ------ | ---- |
59
58
 
60
59
  ## 三、热重载矩阵:改代码后要不要提醒重启
61
60
 
package/src/mcp/idea.js CHANGED
@@ -127,7 +127,7 @@ export async function callTool(port, projectPath, name, args = {}, options = {})
127
127
  params: {
128
128
  protocolVersion: PROTOCOL_VERSION,
129
129
  capabilities: {},
130
- clientInfo: { name: 'opencode-idea', version: '0.0.19' },
130
+ clientInfo: { name: 'opencode-idea', version: '0.0.20' },
131
131
  },
132
132
  });
133
133
  // The IDE's Streamable-HTTP endpoint binds follow-up requests to the session