opencode-idea 0.0.24 → 0.0.26
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 +1 -1
- package/package.json +1 -1
- package/skills/idea-run-config-manager/SKILL.md +13 -25
- package/skills/idea-run-config-manager/assets/AGENTS.template.md +3 -21
- package/skills/idea-standalone/SKILL.md +5 -11
- package/skills/idea-standalone/assets/AGENTS.template.md +4 -20
- package/src/ide-guidance.template.md +9 -0
- package/src/mcp/idea.js +1 -1
package/README.md
CHANGED
|
@@ -274,7 +274,7 @@ IDE 内置的 MCP Server 只能 **启动已有**的 run configuration (`execute_
|
|
|
274
274
|
那个文件,字段名拼错则静默用默认值)。所以「照着模板手写」这条路已经封了,模板 (`assets/types/*.md`)降级为 **字段参考**。
|
|
275
275
|
|
|
276
276
|
配置名有自己的文法:**`[os@]base[@env]`** —— os 段 (`win` = Windows,缺省 = macOS / Linux)、base 段 (配置本体)、env 段 (环境名,
|
|
277
|
-
缺省 =
|
|
277
|
+
缺省 = 默认环境 —— 起一批时逐条解析:有 `@<env>` 用它,没有就用默认)。`win@base` 与 `base@env` 都是同一个 base 的 **变体**,档案里只登记 base。解析 **交给工具**:
|
|
278
278
|
`ide_inspect_run_configuration` 的 `naming` 字段把名字拆成 platform / base / env,规则是从两头往中间收 (末段是环境;首段只有
|
|
279
279
|
恰好是 `win` 才算平台,不是就并进 base),所以 `a@b@c` 会解析成 base=`a@b`、env=`c`,不会丢段。
|
|
280
280
|
|
package/package.json
CHANGED
|
@@ -14,9 +14,8 @@ IDE (或那个 IDE 没装 `idea-mcp-enhance`)—— 让用户执行 `/open-in-id
|
|
|
14
14
|
|
|
15
15
|
## 流程
|
|
16
16
|
|
|
17
|
-
1. **读**:项目根 `AGENTS.md`
|
|
18
|
-
|
|
19
|
-
本块**(不管那边有没有块);有那个块时,把它登记过的名字一并排除。
|
|
17
|
+
1. **读**:项目根 `AGENTS.md` 里 `<!-- idea-run-config-manager:begin -->` … `<!-- idea-run-config-manager:end -->` 标记块
|
|
18
|
+
(有则更新,没有就在文件末尾追加),以及同文件里 `idea-standalone` 的块;过滤规则在模板的生成提示里。
|
|
20
19
|
2. **枚举**:逐个项目用 **它自己那个前缀**的 `<前缀>_get_run_configurations` 直接调用,不传参数 —— 本项目的工具前缀跟着接入时的名字走
|
|
21
20
|
(root 是 `ide`,子项目是它的目录名)。
|
|
22
21
|
3. **建 / 删 / 改**(**直接动手**):
|
|
@@ -32,8 +31,8 @@ IDE (或那个 IDE 没装 `idea-mcp-enhance`)—— 让用户执行 `/open-in-id
|
|
|
32
31
|
- **看一眼**:`<前缀>_inspect_run_configuration` —— 定义、命名解析、活实例、历史日志路径全在里面;
|
|
33
32
|
构建 patch 之前先用它拿到当前值 (尤其 `configurationXml`)。
|
|
34
33
|
- **模板是字段参考**:`assets/types/*.md` 用来查类型 id、看这个类型有哪些字段、`configurationXml` 该长什么样。
|
|
35
|
-
- **建带平台 / 环境变体的配置** →
|
|
36
|
-
|
|
34
|
+
- **建带平台 / 环境变体的配置** → 名字文法见 IDE 引导的「运行配置」(`win@base` / `base@env`);环境具体怎么接上问
|
|
35
|
+
用户,或照项目里现成的同类配置来。
|
|
37
36
|
- **没有模板**(矩阵之外)→ **走 `cloneFrom`**:复制一个同类型的现成配置再 patch 它的字段。
|
|
38
37
|
字段名不确定时,这是 **唯一可靠**的路子 (照猜字段名 = 静默用默认值)。连一个同类型的现成配置都没有,
|
|
39
38
|
才 **交给用户**:讲清要配什么 (配置名、干什么、什么时候跑),请他在 IDE 里配好,你只负责把档案补上。
|
|
@@ -41,9 +40,8 @@ IDE (或那个 IDE 没装 `idea-mcp-enhance`)—— 让用户执行 `/open-in-id
|
|
|
41
40
|
字段名拼错了)、`storagePath` 文件落在哪。再用 `<前缀>_get_run_configurations` 二次确认它已被 IDE 认到 —— **看不到就是没被
|
|
42
41
|
IDE 认**。
|
|
43
42
|
4. **不要手搓启动命令**代替配置,也 **不要写模板里没有的字段**(多余字段被忽略、名字写错静默用默认值,都不会报错)。
|
|
44
|
-
4. **同步文档**:按 [assets/AGENTS.template.md](assets/AGENTS.template.md)
|
|
45
|
-
|
|
46
|
-
**产物里整块删掉**,块外一字不动 (尤其 **不要触碰**其他 skill 的标记块)。
|
|
43
|
+
4. **同步文档**:按 [assets/AGENTS.template.md](assets/AGENTS.template.md) 的生成提示逐段填,写在标记块内 —— 条目怎么写、
|
|
44
|
+
五项分别写什么、枚举与过滤的要求,都在那份模板的生成提示里,动手前先读它。 **块外一字不动**(尤其不要触碰其他 skill 的标记块)。
|
|
47
45
|
5. **核对**:块里每个名字项目里都还在,项目里每个配置块里都有。
|
|
48
46
|
|
|
49
47
|
## 支持矩阵 (一个类型一份模板)
|
|
@@ -67,21 +65,11 @@ IDE (或那个 IDE 没装 `idea-mcp-enhance`)—— 让用户执行 `/open-in-id
|
|
|
67
65
|
## 硬性契约 (所有类型都一样)
|
|
68
66
|
|
|
69
67
|
1. **落地位置不用管**:配置落在哪由工具决定 (项目级配置随项目共享);子项目的配置用 **子项目前缀**的工具建与查。
|
|
70
|
-
2. **`
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
3. **`type` 写错 = 整个文件被静默忽略,日志里也不报任何东西。** 有模板就照模板的 `type` 抄,没有模板就 `cloneFrom`
|
|
76
|
-
复制一个同类型的现成配置 —— 别照猜;工具的 `typeKnown` / `typeDisplayName` 会告诉你这台 IDE 认不认这个类型 (缺插件时是
|
|
77
|
-
`Unknown`)。
|
|
78
|
-
4. **路径宏**:`$PROJECT_DIR$` = 该项目根。 **项目内的路径一律用它**(`$PROJECT_DIR$/子目录/...`),不要写本机绝对路径 ——
|
|
68
|
+
2. **`type` 与字段照类型模板抄**(`assets/types/*.md`,每份都带完整的 `configurationXml`) —— 没有模板就 `cloneFrom` 复制
|
|
69
|
+
同类型的现成配置,别照猜:`type` 写错 = 整个文件被静默忽略、日志里也不报。工具的 `typeKnown` / `typeDisplayName` 会告诉你
|
|
70
|
+
这台 IDE 认不认这个类型 (缺插件时是 `Unknown`)。
|
|
71
|
+
3. **路径宏**:`$PROJECT_DIR$` = 该项目根。 **项目内的路径一律用它**(`$PROJECT_DIR$/子目录/...`),不要写本机绝对路径 ——
|
|
79
72
|
写死了别人 clone 下来就指到不存在的目录。
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- 名字怎么解析**交给工具**(`<前缀>_inspect_run_configuration` 的 `naming`),别自己猜。
|
|
84
|
-
- **一个环境具体怎么接上,是项目自己的事**(启动参数 / 环境变量 / 配置文件都常见):照项目里现成的同类变体来,或问用户。
|
|
85
|
-
6. **选环境问一次,别反复打扰**:`base` 与 `base@<env>` 同时存在 = 两套环境 → **启动前问一次用户走哪套**(问的是"走哪个环境",
|
|
86
|
-
不是"要不要启动");**用户选定后本会话内默认走这一套**,用户不说改就不改 —— 改代码 → 自己重启 → 同一套变体,AI 干活的链路上
|
|
87
|
-
不打扰用户。
|
|
73
|
+
|
|
74
|
+
名字怎么读、变体怎么选 —— 见 IDE 引导的「运行配置」(每次请求都在);每条登记什么,见
|
|
75
|
+
[assets/AGENTS.template.md](assets/AGENTS.template.md) 的生成提示。两处都不在本文件重复。
|
|
@@ -21,8 +21,6 @@
|
|
|
21
21
|
|
|
22
22
|
## run configuration 一览
|
|
23
23
|
|
|
24
|
-
**「怎么读配置名」与「怎么选变体」两节是固定文本,照抄,不要改写、不要删条目** —— 它们是读名字与选变体的规则,下面那个列表靠它们才成立。
|
|
25
|
-
|
|
26
24
|
<!-- 生成提示:begin -->
|
|
27
25
|
|
|
28
26
|
**先过滤**:服务化 / 常驻应用的配置 **一律不进本块**(它们归 `idea-standalone`,端口与热重载写在那边)。有
|
|
@@ -32,12 +30,9 @@
|
|
|
32
30
|
目录的那些 —— 翻文件看不到)。 **项目与各子项目里真正存在的、过滤后剩下的都要有。**
|
|
33
31
|
**项目写在条目开头的括号里**(那套工具的前缀:root 写 `ide`,子项目写它的目录名):一条配置属于谁、该用哪套工具去看和跑,
|
|
34
32
|
由它决定。条目里的配置名必须是该前缀下 **真实存在的名字**,不凭印象写;块里有、项目里已经没有的 **整个条目删掉**。 **只登记
|
|
35
|
-
base
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
平台不同 / 环境不同,事情是同一件。 **本块只登记 base**(`{配置名}` 不带任何 `@` 段),变体不另起条目 ——
|
|
39
|
-
把"有哪些变体"写进 base 的 `desc` 一条即可;判断某个变体在哪个平台成立 **看命令与脚本内容本身**(有 `\` 路径、调用
|
|
40
|
-
`.bat`、依赖 Windows 专属工具的,就是 Windows), **判断不了就问用户**,不猜。
|
|
33
|
+
base,变体不另起条目**:`{配置名}` 不带任何 `@` 段 —— 名字文法与变体怎么选见 IDE 引导的「运行配置」;有哪些变体写进 base 的
|
|
34
|
+
`desc` 一条即可。判断某个变体在哪个平台成立 **看命令与脚本内容本身**(有 `\` 路径、调用 `.bat`、依赖 Windows 专属工具的,
|
|
35
|
+
就是 Windows), **判断不了就问用户**,不猜。
|
|
41
36
|
|
|
42
37
|
**when** 只写两种,先把是哪一种写明:**用户授权触发** → 用户开口 (或在本会话里授权) 之后 AI 才跑,后面写用户通常在
|
|
43
38
|
什么情况下会要它跑 (发版前 / 出安装包 / 回归);**AI 自己触发** → AI 判断到场景就自己跑, **必须把场景写具体**(改完某类代码要
|
|
@@ -94,19 +89,6 @@ base 段 (配置本体)、env 段 (环境名,缺省 = 所有环境通用这一
|
|
|
94
89
|
`应用` / `端口` / `热重载`。 **五项始终都在**:真没有内容就写 **`无`** —— 不省略,也不写 `-` / `N/A`。
|
|
95
90
|
<!-- 生成提示:end -->
|
|
96
91
|
|
|
97
|
-
### 怎么读配置名
|
|
98
|
-
|
|
99
|
-
run configuration 的名字是 `[os@]base[@env]`,`@` 分割、最多三段:`os` = `win`(缺省表示:macOS / Linux)、`base` = 配置本体
|
|
100
|
-
(必填)、`env` = 环境名(缺省表示:所有环境通用)。`win@base`(换平台)与 `base@env`(换环境)都是 `base` 的 **变种**:
|
|
101
|
-
同一件事,平台 / 环境不同。 **只登记 base**,变体不另起条目 —— 有哪些变体写进 base 的 `desc`。
|
|
102
|
-
|
|
103
|
-
### 怎么选变体
|
|
104
|
-
|
|
105
|
-
- **平台**:macOS / Linux 用 `base`,Windows 用 `win@base` —— `win@base` 不存在就 **交回用户**,别拿 base 顶替。
|
|
106
|
-
- **环境**:`base` 与 `base@<env>` 同时存在 → **启动前问一次用户走哪套**,选定后本会话默认走这套,别反复问 ——
|
|
107
|
-
改代码 → 自己重启 → 同一套变体。
|
|
108
|
-
- 一个环境怎么接上 (启动参数 / 环境变量 / 配置文件) 是项目自己的事:照现成的同类变体来,或问用户。
|
|
109
|
-
|
|
110
92
|
### base 登记
|
|
111
93
|
|
|
112
94
|
- {配置名} (项目 {前缀})
|
|
@@ -24,28 +24,22 @@ description: "为项目固化 standalone(启动收口只有 IDEA run configurati
|
|
|
24
24
|
- 读 `<项目根>/AGENTS.md`:有没有 `idea-standalone` 标记块 (有则更新,没有就在文件末尾追加)。
|
|
25
25
|
- 枚举:该项目的 `<前缀>_get_run_configurations` 直接调用,不传任何参数 —— 它给出 IDE 真正认的配置,连同启动细节 (程序参数、
|
|
26
26
|
工作目录、环境变量、能否启动时覆盖)。 **条目里的 base 名与端口只能来自这里**,不用再去项目目录逐个翻配置文件。
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
同一个应用有多条就写多条。
|
|
27
|
+
- **一条配置一个条目**:带 `@` 段的配置一律 **取 base 部分登记**,变体不另起一条 —— 文法与选变体见 IDE 引导的「运行配置」,
|
|
28
|
+
每一项怎么写见模板的生成提示。
|
|
30
29
|
|
|
31
|
-
**缺口**
|
|
30
|
+
**缺口**(端口、热重载、`应用` 各自怎么定,模板的生成提示里写了;拿不准就 **问用户**,不猜)
|
|
32
31
|
|
|
33
|
-
- 端口:启动细节里没有、项目自身配置里也读不到 → **问用户**。
|
|
34
|
-
- 热重载:看运行方式 (项目类型 `package.json` / `pom.xml` / `go.mod` / `pyproject.toml` / `Cargo.toml` 决定有没有 HMR),
|
|
35
|
-
不确定就问用户。
|
|
36
32
|
- 缺配置:`run configuration` 列表里没有某个应用 → **先问用户要不要建**,再用 `<前缀>_create_run_configuration` 建 (建配置是
|
|
37
33
|
**项目资产**:把"配置名、干什么、为什么值得留"摊开给用户看,同意才建);工具列表里没有它时,请用户自己在 IDE 里建。建完
|
|
38
34
|
**重新查一次**,再登记。不要手搓启动命令,也不要自己写配置文件。
|
|
39
|
-
- 归属:哪些配置进 standalone
|
|
35
|
+
- 归属:哪些配置进 standalone、哪些配置名对不上 → 问用户。
|
|
40
36
|
|
|
41
37
|
**写之前**先读 [assets/AGENTS.template.md](assets/AGENTS.template.md)。
|
|
42
38
|
|
|
43
39
|
## 生成与更新
|
|
44
40
|
|
|
45
41
|
1. 归属判断:属于这两段的内容写进 `idea-standalone` 标记块;不属于的 (项目自己的其它纪律)留在标记外,本 skill 不写。
|
|
46
|
-
2.
|
|
47
|
-
`<!-- 生成提示:begin -->…<!-- 生成提示:end -->` 是给生成过程的说明,产物里整块删掉** —— 产物是给 AI 当规则读的,里面不该留指令。
|
|
48
|
-
同时:**未涉及的条目与小节整块删掉**,不留空标题、不留 `{...}`。
|
|
42
|
+
2. 按 [assets/AGENTS.template.md](assets/AGENTS.template.md) 的生成提示逐段填充。
|
|
49
43
|
3. **新增**(文件里还没有标记块):在 `AGENTS.md` **末尾追加**标记块,文件既有内容原样保留;文件不存在则创建它。
|
|
50
44
|
只替换标记内内容、不动标记外 —— 尤其 **不要触碰**其他 skill 的标记块 (例如 `project-scaffold`)。
|
|
51
45
|
4. **更新**(已有标记块):只替换 `<!-- idea-standalone:begin -->` 与 `<!-- idea-standalone:end -->` 之间的内容,块外一字不动。
|
|
@@ -38,15 +38,12 @@ skill 一律不动。
|
|
|
38
38
|
|
|
39
39
|
## 二、standalone 下启动哪些应用 (必须经 IDEA run configuration)
|
|
40
40
|
|
|
41
|
-
**「怎么读配置名」与「怎么选变体」两节是固定文本,照抄,不要改写、不要删条目** —— 它们是读名字与选变体的规则,下面那个列表靠它们才成立。
|
|
42
|
-
|
|
43
41
|
<!-- 生成提示:begin -->
|
|
44
42
|
|
|
45
43
|
一条一个 **run configuration**(服务化 / 常驻的那种)—— **应用只是它的一个属性**:同一个应用有多条配置 (前端 dev server +
|
|
46
44
|
后端服务)就写多条,别合并成一条。 **括号里的项目是这条配置的归属**(root 写 `ide`,子项目写它的目录名):配置可能住在子项目
|
|
47
|
-
里,跑它就用 **那个前缀**的工具 —— 拿不准就问用户。 **条目开头的名字填真实 base 名**(不带任何 `@` 段)
|
|
48
|
-
|
|
49
|
-
**变体不另起一条**:`win@base`(换平台)、`base@env`(换环境)都是同一个 base 的变种,写一条就够,怎么选走「怎么选变体」那节。
|
|
45
|
+
里,跑它就用 **那个前缀**的工具 —— 拿不准就问用户。 **条目开头的名字填真实 base 名**(不带任何 `@` 段)—— 名字文法与变体怎么选
|
|
46
|
+
见 IDE 引导的「运行配置」。 **只登记 base,变体不另起一条**:写一条 base 就够,有哪些变体写进 `desc`。
|
|
50
47
|
|
|
51
48
|
**下面是两个示例**,照这个形状写 —— 一条把长的地方展开,一条全是短句 (生成产物时把示例删掉):
|
|
52
49
|
|
|
@@ -62,7 +59,7 @@ skill 一律不动。
|
|
|
62
59
|
- `platform-server`(项目 ide)
|
|
63
60
|
- 应用:platform
|
|
64
61
|
- before run:
|
|
65
|
-
- 确认 Tailscale 已连到
|
|
62
|
+
- 确认 Tailscale 已连到 dev-mac
|
|
66
63
|
- 确认 apps/platform/.env 存在
|
|
67
64
|
- run:ide_rerun_run_configuration
|
|
68
65
|
- 端口:8080,被占用即启动失败
|
|
@@ -88,25 +85,12 @@ skill 一律不动。
|
|
|
88
85
|
**没有热重载的应用改完之后,不得在没有提示的情况下宣称"改动完成 / 可以去验证了"** —— 重启动作由用户做。
|
|
89
86
|
**desc** 写剩下的坑与依赖关系 (依赖谁、跟别的应用什么先后),以及例外 (**只在联调 / 某个流程之前才需要起**之类)。
|
|
90
87
|
**目录**这类配置里本来就有的字段不要单开一项 —— 会跟配置变旧而对不上。 **有 `@` 变体就在这里补一句**:有哪些变体 (如
|
|
91
|
-
`console-web@
|
|
88
|
+
`console-web@dev`)。 **项名与顺序**与 `idea-run-config-manager` 那个块 **同名同序**(`before run` / `run` /
|
|
92
89
|
`after run` / `desc`);
|
|
93
90
|
本块多 `应用` / `端口` / `热重载`,少一项 `when` —— 服务化配置就是"改完代码要起它来测"的时候起,没有别的时机可写。两个块住在同一份
|
|
94
91
|
`AGENTS.md` 里,名字与顺序对上了才看得出哪些是服务、哪些是固定流程。 **某项确实没有内容就写 `无`**(不省略、也不写 `-`)。
|
|
95
92
|
<!-- 生成提示:end -->
|
|
96
93
|
|
|
97
|
-
### 怎么读配置名
|
|
98
|
-
|
|
99
|
-
run configuration 的名字是 `[os@]base[@env]`,`@` 分割、最多三段:`os` = `win`(缺省表示:macOS / Linux)、`base` = 配置本体
|
|
100
|
-
(必填)、`env` = 环境名(缺省表示:所有环境通用)。`win@base`(换平台)与 `base@env`(换环境)都是 `base` 的 **变种**:
|
|
101
|
-
同一件事,平台 / 环境不同。 **只登记 base**,变体不另起条目 —— 有哪些变体写进 base 的 `desc`。
|
|
102
|
-
|
|
103
|
-
### 怎么选变体
|
|
104
|
-
|
|
105
|
-
- **平台**:macOS / Linux 用 `base`,Windows 用 `win@base` —— `win@base` 不存在就 **交回用户**,别拿 base 顶替。
|
|
106
|
-
- **环境**:`base` 与 `base@<env>` 同时存在 → **启动前问一次用户走哪套**,选定后本会话默认走这套,别反复问 ——
|
|
107
|
-
改代码 → 自己重启 → 同一套变体。
|
|
108
|
-
- 一个环境怎么接上 (启动参数 / 环境变量 / 配置文件) 是项目自己的事:照现成的同类变体来,或问用户。
|
|
109
|
-
|
|
110
94
|
### 服务化配置
|
|
111
95
|
|
|
112
96
|
一条一个 run configuration;`应用` 是它的属性 —— 同一个应用可以有多条配置。括号里的项目是它的归属:跑这条配置,用那个项目
|
|
@@ -158,6 +158,15 @@
|
|
|
158
158
|
有没有热重载都一样;读 `started` 判断新进程是否真的起来了。这次运行的输出在 `output`,完整日志文件路径在
|
|
159
159
|
`fullOutputPath`。不要用 `pkill` / `kill` / `shell` 代替。
|
|
160
160
|
{{/if}}
|
|
161
|
+
|
|
162
|
+
**配置名怎么读**:`[os@]base[@env]`,`@` 分割、最多三段 —— `os` = `win`(缺省 macOS / Linux)、`base` = 配置本体(必填)、
|
|
163
|
+
`env` = 环境名(缺省 = 默认环境)。`win@base`(换平台)与 `base@env`(换环境)都是 `base` 的 **变体**,跑哪一个:
|
|
164
|
+
|
|
165
|
+
- **平台**:macOS / Linux 用 `base`,Windows 用 `win@base` —— `win@base` 不存在就 **交回用户**,别拿 base 顶替。
|
|
166
|
+
- **环境**:不带 `@` 的就是 **默认环境**。一批一起起时 **逐条解析**:有 `base@<要的环境>` 就用它,没有就用默认;只有 `@env`
|
|
167
|
+
变体、没有默认版的,就用它自己那个 —— "10 个服务"可以是"3 个 `@dev` + 7 个默认",不必逐条问。
|
|
168
|
+
- 一条配置同时有 `base` 与 `base@<env>`、又没说走哪个环境 → **问一次走哪个环境**,选定后本会话默认走这套,别反复问。
|
|
169
|
+
- 一个环境怎么接上(启动参数 / 环境变量 / 配置文件)是项目自己的事:照现成的同类变体来,或问用户。
|
|
161
170
|
{{#if canListDeploymentServers}}
|
|
162
171
|
|
|
163
172
|
### 服务器文件同步
|
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.
|
|
130
|
+
clientInfo: { name: 'opencode-idea', version: '0.0.26' },
|
|
131
131
|
},
|
|
132
132
|
});
|
|
133
133
|
// The IDE's Streamable-HTTP endpoint binds follow-up requests to the session
|