@anov/gis-skills-cli 0.3.0 → 0.3.3
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/CHANGELOG.md +19 -0
- package/INSTALL.md +12 -9
- package/README.md +6 -6
- package/RELEASING.md +6 -4
- package/bin/anov-gis-skills.mjs +98 -36
- package/package.json +2 -1
- package/skills/using-anovgis/DEMO-SKILL-MAP.md +1 -1
- package/skills/using-anovgis/DOMAINS.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,25 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.3.3] - 2026-11-02
|
|
8
|
+
|
|
9
|
+
- fix: README 文档链接改绝对 URL,修 npm 包页面点不开的问题 (`a118366`)
|
|
10
|
+
- feat: npm run release 自动打 tag 并推送 (`018027d`)
|
|
11
|
+
- feat: npm run release 自动提交并推送发版文件 (`e6c5bb1`)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [0.3.2] - 2026-10-30
|
|
15
|
+
|
|
16
|
+
- chore: 新增 npm run release 一键发版脚本 (`e147f1d`)
|
|
17
|
+
- fix: setup 只装已检测智能体,MCP 默认写 Claude Code + Codex (`ee704ee`)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
## [0.3.1] - 2026-10-30
|
|
21
|
+
|
|
22
|
+
- chore: 新增 npm run release 一键发版脚本 (`e147f1d`)
|
|
23
|
+
- fix: setup 只装已检测智能体,MCP 默认写 Claude Code + Codex (`ee704ee`)
|
|
24
|
+
|
|
25
|
+
|
|
7
26
|
## [0.3.0] - 2026-10-30
|
|
8
27
|
|
|
9
28
|
分发体系改造:npm 包内置 Cesium skill(vendor 15 个,Apache-2.0)、CLI 命令族重写为 setup/mcp/doctor/uninstall、MCP 配置自动写入各智能体
|
package/INSTALL.md
CHANGED
|
@@ -47,7 +47,7 @@ anov-gis-skills setup
|
|
|
47
47
|
npx @anov/gis-skills-cli setup # → ~/.claude/skills/ 等
|
|
48
48
|
npx @anov/gis-skills-cli setup --project # → ./.claude/skills/,可提交进项目仓库
|
|
49
49
|
|
|
50
|
-
#
|
|
50
|
+
# 装给谁(默认:共享目录 ~/.agents/skills + 已装的 Claude Code)
|
|
51
51
|
npx @anov/gis-skills-cli setup --agent claude-code
|
|
52
52
|
npx @anov/gis-skills-cli setup --agent claude-code --agent codex
|
|
53
53
|
|
|
@@ -87,12 +87,12 @@ npx @anov/gis-skills-cli setup --print
|
|
|
87
87
|
|
|
88
88
|
### A.5 MCP 接入
|
|
89
89
|
|
|
90
|
-
`setup`
|
|
90
|
+
`setup` 默认给 **Claude Code 和 Codex** 各写一条 MCP 配置(stdio 直连 `anov-gis-mcp`)。单独管理:
|
|
91
91
|
|
|
92
92
|
```bash
|
|
93
93
|
npx @anov/gis-skills-cli mcp show # 看当前状态
|
|
94
|
-
npx @anov/gis-skills-cli mcp add # 补上(默认 Claude Code + 用户级)
|
|
95
|
-
npx @anov/gis-skills-cli mcp add --mcp-agent
|
|
94
|
+
npx @anov/gis-skills-cli mcp add # 补上(默认 Claude Code + Codex + 用户级)
|
|
95
|
+
npx @anov/gis-skills-cli mcp add --mcp-agent cursor
|
|
96
96
|
npx @anov/gis-skills-cli mcp remove # 拿掉
|
|
97
97
|
```
|
|
98
98
|
|
|
@@ -100,7 +100,7 @@ npx @anov/gis-skills-cli mcp remove # 拿掉
|
|
|
100
100
|
|
|
101
101
|
| 参数 | 说明 |
|
|
102
102
|
|---|---|
|
|
103
|
-
| `--mcp-agent
|
|
103
|
+
| `--mcp-agent <名字...>` | `claude-code` / `codex`(默认这两个都写)/ `cursor` / `vscode`,可指定多个 |
|
|
104
104
|
| `--mcp-mode stdio\|http` | 默认 `stdio`(本地起进程);`http` 连服务器 |
|
|
105
105
|
| `--mcp-url <地址>` | HTTP 模式必填,例如 `http://192.168.11.164:3000/mcp` |
|
|
106
106
|
| `--mcp-command` / `--mcp-arg` | 自定义 stdio 启动命令(默认 `npx -y anov-gis-mcp --stdio`) |
|
|
@@ -132,6 +132,9 @@ npx @anov/gis-skills-cli doctor
|
|
|
132
132
|
|
|
133
133
|
── MCP · Claude Code(用户级) ── C:\Users\你\.claude.json
|
|
134
134
|
✓ 已配置(stdio)
|
|
135
|
+
|
|
136
|
+
── MCP · Codex(用户级) ── C:\Users\你\.codex\config.toml
|
|
137
|
+
✓ 已配置(stdio)
|
|
135
138
|
```
|
|
136
139
|
|
|
137
140
|
| 检查项 | 不通过意味着 |
|
|
@@ -241,7 +244,7 @@ Claude Code 走 marketplace,多两个好处:**发版后自动升级**、**
|
|
|
241
244
|
|
|
242
245
|
> ⚠️ **版本约束只对 `enabledPlugins` 生效**。`/plugin install` 与 `claude plugin install` 的参数只接受 `插件名` 或 `插件名@市场名`(第三段会被丢弃),所以**命令行装的时候锁不住版本** —— 要锁版本就靠 settings 里的 `enabledPlugins`。
|
|
243
246
|
|
|
244
|
-
**完全锁死(不推荐)**:把约束写成精确版本 `anov-gis-skills@anov-gis-skills@0.3.
|
|
247
|
+
**完全锁死(不推荐)**:把约束写成精确版本 `anov-gis-skills@anov-gis-skills@0.3.3`。精确锁定后**不会自动升级**,每次发版都要人工改这一行 —— 这正是 v0.2.15 之前"发完版还要挨个催"的原因。
|
|
245
248
|
|
|
246
249
|
### B.4 插件缓存位置
|
|
247
250
|
|
|
@@ -448,9 +451,9 @@ git clone https://github.com/CesiumGS/cesiumjs-skills.git ~/.codex/skills/cesium
|
|
|
448
451
|
| 场景 | 说明 |
|
|
449
452
|
|---|---|
|
|
450
453
|
| 首次开启 `autoUpdate` | 2026-10 之前装的,`known_marketplaces.json` 里 `autoUpdate` 默认是 `false`(第三方 marketplace 的默认值)。改一次 §方式 B.2 的配置或跑一次 `/plugin marketplace update` 即可 |
|
|
451
|
-
| 用了精确锁版本 | `anov-gis-skills@anov-gis-skills@0.3.
|
|
454
|
+
| 用了精确锁版本 | `anov-gis-skills@anov-gis-skills@0.3.3` 这种精确锁定**不会自动升级**,必须改这一行 |
|
|
452
455
|
| 提示 restart required | 重开 Claude Code 会话 |
|
|
453
|
-
| 想立刻跳到指定版本 | `/plugin install anov-gis-skills@anov-gis-skills@0.3.
|
|
456
|
+
| 想立刻跳到指定版本 | `/plugin install anov-gis-skills@anov-gis-skills@0.3.3`(降级同理) |
|
|
454
457
|
|
|
455
458
|
### 查看当前版本
|
|
456
459
|
|
|
@@ -461,7 +464,7 @@ git clone https://github.com/CesiumGS/cesiumjs-skills.git ~/.codex/skills/cesium
|
|
|
461
464
|
|
|
462
465
|
### 破坏性变更
|
|
463
466
|
|
|
464
|
-
**从 v0.1.1 升级到 v0.3.
|
|
467
|
+
**从 v0.1.1 升级到 v0.3.3 的破坏性变更**:无。所有 v0.1.1 skill 在 v0.3.3 仍然可用;v0.2.0 新增 3 个 skill + DOMAINS 强化;v0.2.1–v0.3.3 为修复性版本(skill 名称与目录结构未变)。
|
|
465
468
|
|
|
466
469
|
---
|
|
467
470
|
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ npx @anov/gis-skills-cli setup # 27 个 skill + MCP 接入
|
|
|
24
24
|
`setup` 做两件事:
|
|
25
25
|
|
|
26
26
|
1. 把 **27 个 skill** 落到各智能体的标准目录(`~/.claude/skills/`、`~/.agents/skills/` 等)
|
|
27
|
-
2.
|
|
27
|
+
2. 写 **MCP 配置**(默认 Claude Code + Codex,stdio 直连 `anov-gis-mcp`)—— 不想要就加 `--no-mcp`
|
|
28
28
|
|
|
29
29
|
不需要预先 `npm i -g`,也不需要 clone 本仓库。
|
|
30
30
|
|
|
@@ -34,11 +34,11 @@ npx @anov/gis-skills-cli setup # 27 个 skill + MCP 接入
|
|
|
34
34
|
npx @anov/gis-skills-cli setup --project # 装到当前项目(默认用户级)
|
|
35
35
|
npx @anov/gis-skills-cli setup --agent cursor # 只装给某个智能体
|
|
36
36
|
npx @anov/gis-skills-cli setup --no-mcp # 只装 skill,不碰 MCP
|
|
37
|
-
npx @anov/gis-skills-cli mcp add --mcp-agent
|
|
37
|
+
npx @anov/gis-skills-cli mcp add --mcp-agent cursor # MCP 接到 Cursor(默认 Claude Code + Codex)
|
|
38
38
|
npx @anov/gis-skills-cli uninstall # 清理(只删自己的)
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
完整参数见 [INSTALL.md](INSTALL.md)。
|
|
41
|
+
完整参数见 [INSTALL.md](https://cdn.jsdelivr.net/npm/@anov/gis-skills-cli@0.3.3/INSTALL.md)。
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
### 验证
|
|
@@ -51,7 +51,7 @@ npx @anov/gis-skills-cli doctor
|
|
|
51
51
|
|
|
52
52
|
新开一个会话提问"flowPolyline 颜色怎么改",应自动激活 `anovgis-materials` 并给出溯源 snippet。
|
|
53
53
|
|
|
54
|
-
安装排错见 [INSTALL.md](INSTALL.md
|
|
54
|
+
安装排错见 [INSTALL.md](https://cdn.jsdelivr.net/npm/@anov/gis-skills-cli@0.3.3/INSTALL.md) 的「排错」一节;地图黑屏 / Workers 404 / 材质不生效等问题看下面的「报错排查」。
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
@@ -77,7 +77,7 @@ npx @anov/gis-skills-cli doctor
|
|
|
77
77
|
|
|
78
78
|
### 改 SDK 自带 demo
|
|
79
79
|
|
|
80
|
-
团队最常见的场景是「复制 SDK 自带 demo → 改成自己的业务」。137 个 demo 的路由表在 [`skills/using-anovgis/DEMO-SKILL-MAP.md`](skills/using-anovgis/DEMO-SKILL-MAP.md)。
|
|
80
|
+
团队最常见的场景是「复制 SDK 自带 demo → 改成自己的业务」。137 个 demo 的路由表在 [`skills/using-anovgis/DEMO-SKILL-MAP.md`](https://cdn.jsdelivr.net/npm/@anov/gis-skills-cli@0.3.3/skills/using-anovgis/DEMO-SKILL-MAP.md)。
|
|
81
81
|
|
|
82
82
|
直接跟 AI 说文件名 + 想改什么,它会自动路由:
|
|
83
83
|
|
|
@@ -143,7 +143,7 @@ npx @anov/gis-skills-cli mcp remove # 拿掉
|
|
|
143
143
|
| 11 | `anovgis-effects` | 天气 / 漫游 / 动画 / 后期处理(Bloom / 夜视 / 景深 / 黑白)+ 天空盒 | weather、roaming、AroundPoint、FlyManager、bloom、skybox |
|
|
144
144
|
| 12 | `anovgis-pitfalls` | Cesium 1.143 + v1.8.6 典型陷阱(P0–P12)+ 自定义图元报错 | 黑屏、白屏、不生效、报错、Workers 404、AMD、CustomPrimitive |
|
|
145
145
|
|
|
146
|
-
完整路由(用户意图 → skill)见 `skills/using-anovgis/SKILL.md`;完整 demo 路由(demo 文件名 → skill)见 [`skills/using-anovgis/DEMO-SKILL-MAP.md`](skills/using-anovgis/DEMO-SKILL-MAP.md)。
|
|
146
|
+
完整路由(用户意图 → skill)见 `skills/using-anovgis/SKILL.md`;完整 demo 路由(demo 文件名 → skill)见 [`skills/using-anovgis/DEMO-SKILL-MAP.md`](https://cdn.jsdelivr.net/npm/@anov/gis-skills-cli@0.3.3/skills/using-anovgis/DEMO-SKILL-MAP.md)。
|
|
147
147
|
|
|
148
148
|
另外 15 个 Cesium skill 由官方 `cesiumjs-skills` 提供(`cesiumjs-3d-tiles` / `cesiumjs-camera` / `cesiumjs-primitives` …),
|
|
149
149
|
`using-cesiumjs-skills` 是它们的入口 —— 由 `using-anovgis` 自动转过去,你一般不用直接调用。
|
package/RELEASING.md
CHANGED
|
@@ -79,18 +79,20 @@ node scripts/bump.mjs --check # 校验所有版本位一致(发版前自检
|
|
|
79
79
|
10. **结构自检**:`node scripts/check-structure.mjs` —— 相对链接 / 锚点 / frontmatter / 章节完整性,不一致就 exit 1
|
|
80
80
|
11. **npm 包自检**:`node scripts/build-npm.mjs` —— 校验两棵 skill 树的相对链接、无本机绝对路径、vendor 齐全(15 个 skill + LICENSE + NOTICE),不一致就 exit 1
|
|
81
81
|
11b. **vendor 一致性**(改动过 Cesium skill 时):`node scripts/sync-cesium.mjs --check` —— vendor 与内网镜像不一致就 exit 1;需要更新时去掉 `--check` 重新同步,并核对 `vendor/cesiumjs-skills/NOTICE` 里的版本号
|
|
82
|
-
12. `git commit -
|
|
83
|
-
13.
|
|
82
|
+
12. **提交推送**:用 `npm run release` 时自动完成 —— 只 `git add` bump 改写的发版文件后 commit + push(`--no-commit` 可只改文件不提交)。手工流程则 `git add` 发版文件 + `git commit -m "chore: release v<X.Y.Z>"` + `git push`
|
|
83
|
+
13. **打 tag**:用 `npm run release` 时自动打 `anov-gis-skills--v<版本>` 注解 tag 并推送;不走 release 时按 §四 手工打
|
|
84
84
|
14. **发 npm 包**(方式 A 的分发源):`npm publish` —— 发到哪由仓库根 `.npmrc` 决定(内网 / 公网),见 §五
|
|
85
85
|
15. **验证已发布的包**:`node scripts/verify-published.mjs` —— 确认可安装、内容与源码一致、CLI 能发现全部 skill、链接全解析,不一致就 exit 1
|
|
86
86
|
|
|
87
87
|
> v0.2.15 起,第 8 步之前的手工改版本号(各 manifest + DOMAINS.md + DEMO-SKILL-MAP.md)全部由 `scripts/bump.mjs` 代劳,避免版本漂移。
|
|
88
|
+
>
|
|
89
|
+
> 用 `npm run release` 时,第 8–13 步(bump · 版本校验 · 结构校验 · npm 包校验 · 提交推送 · 打 tag)会一并自动执行;两道结构校验在写文件之前跑,失败则什么都不会改。
|
|
88
90
|
|
|
89
91
|
---
|
|
90
92
|
|
|
91
|
-
##
|
|
93
|
+
## 四、tag
|
|
92
94
|
|
|
93
|
-
本仓库**不跑 CI**(内网 GitLab 上没有 runner
|
|
95
|
+
本仓库**不跑 CI**(内网 GitLab 上没有 runner),没有流水线帮你打 tag —— `npm run release` 会自动打并推送,手工发版时用下面的命令。
|
|
94
96
|
|
|
95
97
|
**打 tag** —— 带版本约束的安装串(`"anov-gis-skills@anov-gis-skills@^0.3.0"`)靠这个 tag 解析版本,没有匹配 tag 会报 `no-matching-tag`:
|
|
96
98
|
|
package/bin/anov-gis-skills.mjs
CHANGED
|
@@ -39,11 +39,18 @@ const CESIUM_DIR = join(PKG_ROOT, "vendor", "cesiumjs-skills", "skills");
|
|
|
39
39
|
const SKILLS_CLI = "skills@1.5.18";
|
|
40
40
|
|
|
41
41
|
const MCP_PACKAGE = "anov-gis-mcp";
|
|
42
|
+
const DEFAULT_MCP_AGENTS = ["claude-code", "codex"];
|
|
43
|
+
|
|
44
|
+
// 用 npx 跑时脚本在 npm 缓存的 _npx 目录里,此时 `anov-gis-skills` 不在 PATH 上,
|
|
45
|
+
// 提示语必须给回 npx 形式,否则用户会撞上「不是内部或外部命令」。
|
|
46
|
+
const CLI_CMD = /[\\/]_npx[\\/]/.test(process.argv[1] ?? "")
|
|
47
|
+
? "npx @anov/gis-skills-cli"
|
|
48
|
+
: "anov-gis-skills";
|
|
42
49
|
|
|
43
50
|
// ---------------------------------------------------------------- 参数解析
|
|
44
51
|
|
|
45
52
|
function parseArgs(argv) {
|
|
46
|
-
const out = { _: [], agents: [], mcpArgs: [], unknown: [] };
|
|
53
|
+
const out = { _: [], agents: [], mcpAgents: [], mcpArgs: [], unknown: [] };
|
|
47
54
|
for (let i = 0; i < argv.length; i++) {
|
|
48
55
|
const a = argv[i];
|
|
49
56
|
if (a === "-g" || a === "--global") out.scope = "global";
|
|
@@ -55,8 +62,11 @@ function parseArgs(argv) {
|
|
|
55
62
|
else if (a === "--mcp") out.mcp = true;
|
|
56
63
|
else if (a === "-a" || a === "--agent") {
|
|
57
64
|
while (argv[++i] && !argv[i].startsWith("-")) out.agents.push(argv[i]);
|
|
58
|
-
} else if (a === "--mcp-agent")
|
|
59
|
-
|
|
65
|
+
} else if (a === "--mcp-agent") {
|
|
66
|
+
while (argv[i + 1] && !argv[i + 1].startsWith("-")) {
|
|
67
|
+
for (const v of argv[++i].split(",")) if (v.trim()) out.mcpAgents.push(v.trim());
|
|
68
|
+
}
|
|
69
|
+
} else if (a === "--mcp-mode") out.mcpMode = argv[++i];
|
|
60
70
|
else if (a === "--mcp-url") out.mcpUrl = argv[++i];
|
|
61
71
|
else if (a === "--mcp-command") out.mcpCommand = argv[++i];
|
|
62
72
|
else if (a === "--mcp-arg") {
|
|
@@ -68,26 +78,26 @@ function parseArgs(argv) {
|
|
|
68
78
|
return out;
|
|
69
79
|
}
|
|
70
80
|
|
|
71
|
-
const HELP =
|
|
81
|
+
const HELP = `${CLI_CMD} —— 装 skill + 接 MCP
|
|
72
82
|
|
|
73
83
|
用法
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
84
|
+
${CLI_CMD} setup 装全部 skill(默认顺带写 MCP 配置)
|
|
85
|
+
${CLI_CMD} mcp add 只写 MCP 配置
|
|
86
|
+
${CLI_CMD} mcp remove 删掉 MCP 配置
|
|
87
|
+
${CLI_CMD} mcp show 看 MCP 配置状态
|
|
88
|
+
${CLI_CMD} doctor 自检(skill 完整性 + MCP 配置)
|
|
89
|
+
${CLI_CMD} uninstall 清理(只删本包与本 MCP 的东西)
|
|
80
90
|
|
|
81
91
|
通用选项
|
|
82
92
|
--scope global|project 装到哪(默认 global = 用户级,任何项目都能用)
|
|
83
93
|
-g, --global 等价于 --scope global
|
|
84
94
|
--project 等价于 --scope project
|
|
85
|
-
-a, --agent <名字...>
|
|
95
|
+
-a, --agent <名字...> 只装给指定智能体(默认:共享目录 + 已装的 Claude Code)
|
|
86
96
|
-y, --yes 跳过所有交互
|
|
87
97
|
--print 只打印要写的内容,不落盘
|
|
88
98
|
|
|
89
99
|
MCP 选项
|
|
90
|
-
--mcp-agent
|
|
100
|
+
--mcp-agent <名字...> 写到哪个智能体(${SUPPORTED_AGENTS.join(" / ")};默认 claude-code + codex)
|
|
91
101
|
--mcp-mode stdio|http 连接方式(默认 stdio)
|
|
92
102
|
--mcp-url <地址> HTTP 模式的服务地址(stdio 模式不需要)
|
|
93
103
|
--mcp-command <命令> stdio 模式的启动命令(默认 npx)
|
|
@@ -129,14 +139,23 @@ function scopeFlags(scope) {
|
|
|
129
139
|
return scope === "global" ? ["--global"] : [];
|
|
130
140
|
}
|
|
131
141
|
|
|
142
|
+
// 上游的自动检测会把 57 个 universal 系智能体全拉进来,其中 PromptScript 没有全局
|
|
143
|
+
// 目录却仍在名单里,每个 skill 刷一条 Failed。所以这里只显式点名:
|
|
144
|
+
// 共享目录 .agents/skills(universal 系智能体本来就读这里)+ 实际存在的 Claude Code。
|
|
145
|
+
function defaultSkillAgents() {
|
|
146
|
+
return existsSync(join(homedir(), ".claude")) ? ["claude-code"] : ["universal"];
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// 传 [] 时不加 --agent:remove 的上游语义是从所有智能体删,正好用来清旧的 symlink。
|
|
132
150
|
function targetFlags(agents) {
|
|
133
|
-
return agents.length ? ["--agent", ...agents] : [
|
|
151
|
+
return agents.length ? ["--agent", ...agents] : [];
|
|
134
152
|
}
|
|
135
153
|
|
|
136
154
|
// ---------------------------------------------------------------- setup
|
|
137
155
|
|
|
138
156
|
function cmdSetup(opts) {
|
|
139
157
|
const scope = opts.scope ?? "global";
|
|
158
|
+
const agents = opts.agents.length ? opts.agents : defaultSkillAgents();
|
|
140
159
|
const anov = skillNames(SKILLS_DIR);
|
|
141
160
|
const cesium = skillNames(CESIUM_DIR);
|
|
142
161
|
|
|
@@ -153,10 +172,11 @@ function cmdSetup(opts) {
|
|
|
153
172
|
console.log(` anov-gis ${anov.length} 个`);
|
|
154
173
|
console.log(` cesiumjs ${cesium.length} 个`);
|
|
155
174
|
console.log(` 范围 ${scope === "global" ? "用户级(任何项目可用)" : "项目级(当前目录)"}`);
|
|
175
|
+
console.log(` 智能体 ${agents.join(", ")}`);
|
|
156
176
|
|
|
157
177
|
for (const [label, dir] of [["anov-gis", SKILLS_DIR], ["cesiumjs", CESIUM_DIR]]) {
|
|
158
178
|
console.log(`\n── ${label} ──`);
|
|
159
|
-
const code = runSkillsCLI(["add", dir, ...
|
|
179
|
+
const code = runSkillsCLI(["add", dir, "--agent", ...agents, ...scopeFlags(scope), "-y"]);
|
|
160
180
|
if (code !== 0) {
|
|
161
181
|
console.error(`✗ ${label} 安装失败(退出码 ${code})`);
|
|
162
182
|
process.exit(code);
|
|
@@ -165,7 +185,6 @@ function cmdSetup(opts) {
|
|
|
165
185
|
|
|
166
186
|
if (!opts.noMcp) {
|
|
167
187
|
const mode = opts.mcpMode ?? "stdio";
|
|
168
|
-
const agent = opts.mcpAgent ?? "claude-code";
|
|
169
188
|
const config = buildServerConfig({
|
|
170
189
|
mode,
|
|
171
190
|
url: opts.mcpUrl,
|
|
@@ -173,32 +192,74 @@ function cmdSetup(opts) {
|
|
|
173
192
|
args: opts.mcpArgs.length ? opts.mcpArgs : undefined,
|
|
174
193
|
env: collectEnv(),
|
|
175
194
|
});
|
|
176
|
-
writeMcp(
|
|
195
|
+
writeMcp(mcpAgents(opts), scope, config, { printOnly: opts.print, strict: opts.mcpAgents.length > 0 });
|
|
177
196
|
}
|
|
178
197
|
|
|
179
198
|
console.log("\n✓ 完成");
|
|
180
199
|
if (!opts.noMcp) {
|
|
181
|
-
console.log(
|
|
200
|
+
console.log(` 验证:${CLI_CMD} doctor`);
|
|
182
201
|
}
|
|
183
202
|
}
|
|
184
203
|
|
|
185
204
|
// ---------------------------------------------------------------- MCP
|
|
186
205
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
206
|
+
/** 默认 Claude Code + Codex;`--mcp-agent` 指定时只用指定的那些。 */
|
|
207
|
+
function mcpAgents(opts) {
|
|
208
|
+
return opts.mcpAgents.length ? opts.mcpAgents : DEFAULT_MCP_AGENTS;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* strict = 用户显式点名了智能体:不支持当前 scope 就直接报错。
|
|
213
|
+
* 默认集合则静默跳过(如 Codex 没有项目级配置),不算失败。
|
|
214
|
+
*/
|
|
215
|
+
function mcpTargets(agents, scope, strict) {
|
|
216
|
+
const out = [];
|
|
217
|
+
for (const agent of agents) {
|
|
218
|
+
if (!SUPPORTED_AGENTS.includes(agent)) {
|
|
219
|
+
console.error(`✗ 不支持的智能体:${agent}(可用:${SUPPORTED_AGENTS.join(" / ")})`);
|
|
220
|
+
process.exit(2);
|
|
221
|
+
}
|
|
222
|
+
const targets = agentTargets(agent, scope);
|
|
223
|
+
if (!targets.length) {
|
|
224
|
+
if (strict) {
|
|
225
|
+
console.error(`✗ ${agent} 不支持 ${scope === "global" ? "用户级" : "项目级"}配置`);
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
out.push(...targets);
|
|
231
|
+
}
|
|
232
|
+
return out;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/** --print 的片段按目标格式输出:Codex 是 TOML,其余是 JSON。 */
|
|
236
|
+
function printTarget(target, config) {
|
|
237
|
+
console.log(`\n# ${target.label} → ${target.file}`);
|
|
238
|
+
if (target.key !== null) {
|
|
239
|
+
console.log(JSON.stringify({ [target.key]: { [MCP_SERVER_NAME]: config } }, null, 2));
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const toml = (v) =>
|
|
243
|
+
typeof v === "string"
|
|
244
|
+
? `"${v.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`
|
|
245
|
+
: Array.isArray(v)
|
|
246
|
+
? `[${v.map(toml).join(", ")}]`
|
|
247
|
+
: String(v);
|
|
248
|
+
const lines = [`[mcp_servers.${MCP_SERVER_NAME}]`];
|
|
249
|
+
for (const [k, v] of Object.entries(config)) {
|
|
250
|
+
if (k !== "env") lines.push(`${k} = ${toml(v)}`);
|
|
251
|
+
}
|
|
252
|
+
if (config.env) {
|
|
253
|
+
lines.push("", `[mcp_servers.${MCP_SERVER_NAME}.env]`);
|
|
254
|
+
for (const [k, v] of Object.entries(config.env)) lines.push(`${k} = ${toml(v)}`);
|
|
193
255
|
}
|
|
194
|
-
|
|
256
|
+
console.log(lines.join("\n"));
|
|
195
257
|
}
|
|
196
258
|
|
|
197
|
-
function writeMcp(
|
|
198
|
-
for (const target of mcpTargets(
|
|
259
|
+
function writeMcp(agents, scope, config, { printOnly = false, strict = false } = {}) {
|
|
260
|
+
for (const target of mcpTargets(agents, scope, strict)) {
|
|
199
261
|
if (printOnly) {
|
|
200
|
-
|
|
201
|
-
console.log(JSON.stringify({ mcpServers: { [MCP_SERVER_NAME]: config } }, null, 2));
|
|
262
|
+
printTarget(target, config);
|
|
202
263
|
continue;
|
|
203
264
|
}
|
|
204
265
|
writeServer(target, MCP_SERVER_NAME, config);
|
|
@@ -209,10 +270,11 @@ function writeMcp(agent, scope, config, printOnly) {
|
|
|
209
270
|
function cmdMcp(opts) {
|
|
210
271
|
const action = opts._[0] ?? "show";
|
|
211
272
|
const scope = opts.scope ?? "global";
|
|
212
|
-
const
|
|
273
|
+
const agents = mcpAgents(opts);
|
|
274
|
+
const strict = opts.mcpAgents.length > 0;
|
|
213
275
|
|
|
214
276
|
if (action === "show") {
|
|
215
|
-
for (const target of mcpTargets(
|
|
277
|
+
for (const target of mcpTargets(agents, scope, strict)) {
|
|
216
278
|
const existing = readServer(target, MCP_SERVER_NAME);
|
|
217
279
|
console.log(`\n${target.label} —— ${target.file}`);
|
|
218
280
|
if (!existing) {
|
|
@@ -225,7 +287,7 @@ function cmdMcp(opts) {
|
|
|
225
287
|
}
|
|
226
288
|
|
|
227
289
|
if (action === "remove") {
|
|
228
|
-
for (const target of mcpTargets(
|
|
290
|
+
for (const target of mcpTargets(agents, scope, strict)) {
|
|
229
291
|
const r = removeServer(target, MCP_SERVER_NAME);
|
|
230
292
|
console.log(r.removed ? ` ✓ 已删除:${target.file}` : ` · 本来就没有:${target.file}`);
|
|
231
293
|
}
|
|
@@ -246,7 +308,7 @@ function cmdMcp(opts) {
|
|
|
246
308
|
env: collectEnv(),
|
|
247
309
|
});
|
|
248
310
|
console.log(`\n接入 MCP(${mode})`);
|
|
249
|
-
writeMcp(
|
|
311
|
+
writeMcp(agents, scope, config, { printOnly: opts.print, strict });
|
|
250
312
|
if (!opts.print) console.log("\n✓ 完成。重启智能体生效。");
|
|
251
313
|
}
|
|
252
314
|
|
|
@@ -326,14 +388,14 @@ function cmdDoctor(opts) {
|
|
|
326
388
|
if (existing) {
|
|
327
389
|
console.log(` ✓ 已配置(${existing.type ?? "unknown"})`);
|
|
328
390
|
} else {
|
|
329
|
-
console.log(
|
|
391
|
+
console.log(` · 未配置 —— ${CLI_CMD} mcp add`);
|
|
330
392
|
}
|
|
331
393
|
}
|
|
332
394
|
}
|
|
333
395
|
|
|
334
396
|
console.log("");
|
|
335
397
|
if (problems) {
|
|
336
|
-
console.error(`✗ 发现 ${problems} 处问题 ——
|
|
398
|
+
console.error(`✗ 发现 ${problems} 处问题 —— 重装:${CLI_CMD} setup\n`);
|
|
337
399
|
process.exit(1);
|
|
338
400
|
}
|
|
339
401
|
console.log("✓ 检查通过\n");
|
|
@@ -357,8 +419,8 @@ function cmdUninstall(opts) {
|
|
|
357
419
|
process.exit(code);
|
|
358
420
|
}
|
|
359
421
|
|
|
360
|
-
const
|
|
361
|
-
for (const target of mcpTargets(
|
|
422
|
+
const agents = mcpAgents(opts);
|
|
423
|
+
for (const target of mcpTargets(agents, scope, opts.mcpAgents.length > 0)) {
|
|
362
424
|
const r = removeServer(target, MCP_SERVER_NAME);
|
|
363
425
|
console.log(r.removed ? ` ✓ 已删除 MCP 条目:${target.file}` : ` · 没有 MCP 条目:${target.file}`);
|
|
364
426
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anov/gis-skills-cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "12 个 @anov/gis (Cesium 1.143) 领域 skill + 15 个 Cesium 原生 skill,外加 anov-gis-mcp 的接入配置。一条命令装到 Claude Code / Codex / Cursor 等智能体。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "ISC AND Apache-2.0",
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"cursor"
|
|
39
39
|
],
|
|
40
40
|
"scripts": {
|
|
41
|
+
"release": "node scripts/release.cjs",
|
|
41
42
|
"prepublishOnly": "node scripts/bump.mjs --check && node scripts/check-structure.mjs",
|
|
42
43
|
"pack:check": "node scripts/build-npm.mjs"
|
|
43
44
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# DEMO-SKILL-MAP.md — 137 个 demo → Skill 路由矩阵
|
|
2
2
|
|
|
3
3
|
> **SDK 版本基准:** @anov/gis v1.8.6(基于 Cesium 1.143.0)
|
|
4
|
-
> **Plugin 版本:** anov-gis-skills v0.3.
|
|
4
|
+
> **Plugin 版本:** anov-gis-skills v0.3.3
|
|
5
5
|
> **Demo 来源:** ANOV-GIS 仓库 `examples/public/examples/html/`(仓库内相对路径)共 137 个 .html 文件,按 13 类目分组
|
|
6
6
|
|
|
7
7
|
本文档是 demo **文件名** → skill 的**完整版**路由矩阵(`using-anovgis/DEMO-MAP.md` 是场景级的简版)。当用户提到具体 demo 文件名或场景时,按本表路由到对应 skill。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# DOMAINS.md — anov-gis-skills 权威归属
|
|
2
2
|
|
|
3
3
|
> **SDK 版本基准:** @anov/gis **v1.8.6**(基于 Cesium **1.143.0**)
|
|
4
|
-
> **Plugin 版本:** anov-gis-skills **v0.3.
|
|
4
|
+
> **Plugin 版本:** anov-gis-skills **v0.3.3**
|
|
5
5
|
> **Skill 数:** **12**(含 `using-anovgis` 入口 + 3 个 v0.2.0 新增 skill)
|
|
6
6
|
> **入口 skill 额外职责**:引导式初始化(AskUserQuestion 向导:底图 / 控件 / 部署;**技术栈固定 Vue 3 + Vite**)
|
|
7
7
|
|