opencode-idea 0.0.24 → 0.0.25
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 +6 -4
- package/skills/idea-standalone/SKILL.md +5 -11
- package/skills/idea-standalone/assets/AGENTS.template.md +7 -5
- 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
|
+
- **建带平台 / 环境变体的配置** → 名字按模板「怎么读配置名」的文法拼 (`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
|
+
名字怎么读、变体怎么选、每条登记什么,都在 [assets/AGENTS.template.md](assets/AGENTS.template.md) 的「怎么读配置名」
|
|
75
|
+
「怎么选变体」与生成提示里 —— 本文件不重复那套规则。
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
由它决定。条目里的配置名必须是该前缀下 **真实存在的名字**,不凭印象写;块里有、项目里已经没有的 **整个条目删掉**。 **只登记
|
|
35
35
|
base,变体不另起条目**:run configuration 的名字是 `[os@]base[@env]`,`@` 分割、最多三段 —— os 段 (`win` = Windows,缺省 =
|
|
36
36
|
macOS/Linux)、
|
|
37
|
-
base 段 (配置本体)、env 段 (环境名,缺省 =
|
|
37
|
+
base 段 (配置本体)、env 段 (环境名,缺省 = 默认环境)。`win@base` 与 `base@env` 都是 **同一个 base 的变体**:
|
|
38
38
|
平台不同 / 环境不同,事情是同一件。 **本块只登记 base**(`{配置名}` 不带任何 `@` 段),变体不另起条目 ——
|
|
39
39
|
把"有哪些变体"写进 base 的 `desc` 一条即可;判断某个变体在哪个平台成立 **看命令与脚本内容本身**(有 `\` 路径、调用
|
|
40
40
|
`.bat`、依赖 Windows 专属工具的,就是 Windows), **判断不了就问用户**,不猜。
|
|
@@ -97,14 +97,16 @@ base 段 (配置本体)、env 段 (环境名,缺省 = 所有环境通用这一
|
|
|
97
97
|
### 怎么读配置名
|
|
98
98
|
|
|
99
99
|
run configuration 的名字是 `[os@]base[@env]`,`@` 分割、最多三段:`os` = `win`(缺省表示:macOS / Linux)、`base` = 配置本体
|
|
100
|
-
(必填)、`env` = 环境名(
|
|
100
|
+
(必填)、`env` = 环境名(缺省表示:默认环境)。`win@base`(换平台)与 `base@env`(换环境)都是 `base` 的 **变种**:
|
|
101
101
|
同一件事,平台 / 环境不同。 **只登记 base**,变体不另起条目 —— 有哪些变体写进 base 的 `desc`。
|
|
102
102
|
|
|
103
103
|
### 怎么选变体
|
|
104
104
|
|
|
105
105
|
- **平台**:macOS / Linux 用 `base`,Windows 用 `win@base` —— `win@base` 不存在就 **交回用户**,别拿 base 顶替。
|
|
106
|
-
-
|
|
107
|
-
|
|
106
|
+
- **环境**:不带 `@` 的那条就是 **默认环境**。一起起一批时 **逐条解析**:有 `base@<要的环境>` 就用它,没有就用默认;只有
|
|
107
|
+
`@env` 变体、没有默认版的,就用它自己那个 —— "10 个服务"可以是"3 个 `@dev` + 7 个默认",不必逐条问。
|
|
108
|
+
- **一条配置同时有 `base` 与 `base@<env>`**、又没说走哪个环境 → **启动前问一次用户走哪个环境**;选定后本会话默认走这套,
|
|
109
|
+
别反复问 —— 改代码 → 自己重启 → 同一套变体。
|
|
108
110
|
- 一个环境怎么接上 (启动参数 / 环境变量 / 配置文件) 是项目自己的事:照现成的同类变体来,或问用户。
|
|
109
111
|
|
|
110
112
|
### base 登记
|
|
@@ -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 部分登记**,变体不另起一条 —— 文法、选变体、每一项怎么写,全在模板的
|
|
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 -->` 之间的内容,块外一字不动。
|
|
@@ -62,7 +62,7 @@ skill 一律不动。
|
|
|
62
62
|
- `platform-server`(项目 ide)
|
|
63
63
|
- 应用:platform
|
|
64
64
|
- before run:
|
|
65
|
-
- 确认 Tailscale 已连到
|
|
65
|
+
- 确认 Tailscale 已连到 dev-mac
|
|
66
66
|
- 确认 apps/platform/.env 存在
|
|
67
67
|
- run:ide_rerun_run_configuration
|
|
68
68
|
- 端口:8080,被占用即启动失败
|
|
@@ -88,7 +88,7 @@ skill 一律不动。
|
|
|
88
88
|
**没有热重载的应用改完之后,不得在没有提示的情况下宣称"改动完成 / 可以去验证了"** —— 重启动作由用户做。
|
|
89
89
|
**desc** 写剩下的坑与依赖关系 (依赖谁、跟别的应用什么先后),以及例外 (**只在联调 / 某个流程之前才需要起**之类)。
|
|
90
90
|
**目录**这类配置里本来就有的字段不要单开一项 —— 会跟配置变旧而对不上。 **有 `@` 变体就在这里补一句**:有哪些变体 (如
|
|
91
|
-
`console-web@
|
|
91
|
+
`console-web@dev`)。 **项名与顺序**与 `idea-run-config-manager` 那个块 **同名同序**(`before run` / `run` /
|
|
92
92
|
`after run` / `desc`);
|
|
93
93
|
本块多 `应用` / `端口` / `热重载`,少一项 `when` —— 服务化配置就是"改完代码要起它来测"的时候起,没有别的时机可写。两个块住在同一份
|
|
94
94
|
`AGENTS.md` 里,名字与顺序对上了才看得出哪些是服务、哪些是固定流程。 **某项确实没有内容就写 `无`**(不省略、也不写 `-`)。
|
|
@@ -97,14 +97,16 @@ skill 一律不动。
|
|
|
97
97
|
### 怎么读配置名
|
|
98
98
|
|
|
99
99
|
run configuration 的名字是 `[os@]base[@env]`,`@` 分割、最多三段:`os` = `win`(缺省表示:macOS / Linux)、`base` = 配置本体
|
|
100
|
-
(必填)、`env` = 环境名(
|
|
100
|
+
(必填)、`env` = 环境名(缺省表示:默认环境)。`win@base`(换平台)与 `base@env`(换环境)都是 `base` 的 **变种**:
|
|
101
101
|
同一件事,平台 / 环境不同。 **只登记 base**,变体不另起条目 —— 有哪些变体写进 base 的 `desc`。
|
|
102
102
|
|
|
103
103
|
### 怎么选变体
|
|
104
104
|
|
|
105
105
|
- **平台**:macOS / Linux 用 `base`,Windows 用 `win@base` —— `win@base` 不存在就 **交回用户**,别拿 base 顶替。
|
|
106
|
-
-
|
|
107
|
-
|
|
106
|
+
- **环境**:不带 `@` 的那条就是 **默认环境**。一起起一批时 **逐条解析**:有 `base@<要的环境>` 就用它,没有就用默认;只有
|
|
107
|
+
`@env` 变体、没有默认版的,就用它自己那个 —— "10 个服务"可以是"3 个 `@dev` + 7 个默认",不必逐条问。
|
|
108
|
+
- **一条配置同时有 `base` 与 `base@<env>`**、又没说走哪个环境 → **启动前问一次用户走哪个环境**;选定后本会话默认走这套,
|
|
109
|
+
别反复问 —— 改代码 → 自己重启 → 同一套变体。
|
|
108
110
|
- 一个环境怎么接上 (启动参数 / 环境变量 / 配置文件) 是项目自己的事:照现成的同类变体来,或问用户。
|
|
109
111
|
|
|
110
112
|
### 服务化配置
|
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.25' },
|
|
131
131
|
},
|
|
132
132
|
});
|
|
133
133
|
// The IDE's Streamable-HTTP endpoint binds follow-up requests to the session
|