godot-cli 0.6.0 → 0.8.0
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 +22 -6
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/setup-skills.d.ts +2 -0
- package/dist/commands/setup-skills.js +61 -0
- package/dist/commands/setup-skills.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/open.js +9 -1
- package/dist/lib/open.js.map +1 -1
- package/dist/lib/setup-mcp.js +7 -2
- package/dist/lib/setup-mcp.js.map +1 -1
- package/dist/lib/setup-skills.d.ts +19 -0
- package/dist/lib/setup-skills.js +123 -0
- package/dist/lib/setup-skills.js.map +1 -0
- package/dist/lib/types.d.ts +24 -0
- package/dist/lib.d.ts +2 -1
- package/dist/lib.js +1 -0
- package/dist/lib.js.map +1 -1
- package/dist/utils/agents.d.ts +34 -3
- package/dist/utils/agents.js +248 -0
- package/dist/utils/agents.js.map +1 -1
- package/dist/utils/godot-editor.d.ts +8 -4
- package/dist/utils/godot-editor.js +213 -49
- package/dist/utils/godot-editor.js.map +1 -1
- package/dist/utils/skills.d.ts +34 -0
- package/dist/utils/skills.js +216 -0
- package/dist/utils/skills.js.map +1 -0
- package/package.json +2 -2
|
@@ -30,57 +30,208 @@ function pathCandidateNames(os) {
|
|
|
30
30
|
return ['godot', 'godot_mono', 'Godot'];
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
33
|
+
* Maximum directory depth (inclusive) to descend when shallow-recursively
|
|
34
|
+
* scanning a common install root for a Godot editor binary. Depth 0 is the root
|
|
35
|
+
* itself; depth 1 its immediate children, etc. Official Windows zips extract to
|
|
36
|
+
* `<root>/Godot_v<ver>-stable_mono_win64/Godot_v<ver>-stable_mono_win64/<exe>`
|
|
37
|
+
* (binary two levels below `Downloads`), so we need depth >= 2; we use 3 to also
|
|
38
|
+
* cover an extra wrapper folder without scanning unbounded trees.
|
|
38
39
|
*/
|
|
39
|
-
|
|
40
|
+
const SCAN_MAX_DEPTH = 3;
|
|
41
|
+
/**
|
|
42
|
+
* Bounded scan depth for FLAT roots — system bin dirs and PATH-like locations
|
|
43
|
+
* where the binary, if present, sits directly in the dir (no nested
|
|
44
|
+
* version-stamped wrapper). Scanning these recursively (`/usr/bin`,
|
|
45
|
+
* `/usr/local/bin`, …) would issue thousands of `readdir`/`isFile` ops for no
|
|
46
|
+
* benefit, so we probe only the root itself.
|
|
47
|
+
*/
|
|
48
|
+
const FLAT_SCAN_DEPTH = 0;
|
|
49
|
+
/**
|
|
50
|
+
* Version-stamped release name → comparable numeric key. Parses the
|
|
51
|
+
* `v<major>.<minor>[.<patch>]` segment (e.g. `Godot_v4.5.1-stable_...`). Returns
|
|
52
|
+
* a single integer so larger == newer; names without a version segment sort
|
|
53
|
+
* oldest (`-1`). Pre-release builds (e.g. `4.6-beta1`) are treated by their
|
|
54
|
+
* numeric version only — the stable/build-rank distinction is handled by
|
|
55
|
+
* {@link godotBinaryRank}.
|
|
56
|
+
*/
|
|
57
|
+
const VERSION_RE = /v(\d+)\.(\d+)(?:\.(\d+))?/i;
|
|
58
|
+
function godotVersionKey(name) {
|
|
59
|
+
const m = VERSION_RE.exec(name);
|
|
60
|
+
if (!m)
|
|
61
|
+
return -1;
|
|
62
|
+
const major = Number(m[1]);
|
|
63
|
+
const minor = Number(m[2]);
|
|
64
|
+
const patch = m[3] !== undefined ? Number(m[3]) : 0;
|
|
65
|
+
// Wide radices so a larger minor/patch can never overflow into the next major.
|
|
66
|
+
return major * 1000000 + minor * 1000 + patch;
|
|
67
|
+
}
|
|
68
|
+
// Module-level regexes for version-stamped binary names (compiled once rather
|
|
69
|
+
// than per scanned directory entry). Mirrors the loose, arch-tolerant matching
|
|
70
|
+
// described on `isGodotBinaryName`.
|
|
71
|
+
const WIN_STAMPED_RE = /^godot_v.*win.*\.exe$/;
|
|
72
|
+
const MACOS_STAMPED_RE = /^godot_v.*(macos|osx).*$/;
|
|
73
|
+
const LINUX_STAMPED_RE = /^godot_v.*(linux|x11).*$/;
|
|
74
|
+
/**
|
|
75
|
+
* Whether a file name looks like a Godot editor binary. Matches both the fixed
|
|
76
|
+
* historical names (`Godot.exe`, `godot`, `godot_mono`) AND the official
|
|
77
|
+
* version-stamped release names, e.g.
|
|
78
|
+
* - `Godot_v4.5.1-stable_mono_win64.exe`
|
|
79
|
+
* - `Godot_v4.5.1-stable_mono_win64_console.exe`
|
|
80
|
+
* - `Godot_v4.5.1-stable_win64.exe`
|
|
81
|
+
* - `Godot_v4.3-stable_mono_linux.x86_64`
|
|
82
|
+
* - `Godot_v4.5.1-stable_macos.universal`
|
|
83
|
+
* The match is case-insensitive (Windows) and intentionally loose on the
|
|
84
|
+
* platform/arch suffix so future arch names still resolve.
|
|
85
|
+
*/
|
|
86
|
+
function isGodotBinaryName(name, os) {
|
|
87
|
+
const lower = name.toLowerCase();
|
|
88
|
+
if (os === 'win32') {
|
|
89
|
+
// Fixed names.
|
|
90
|
+
if (lower === 'godot.exe' || lower === 'godot_mono.exe')
|
|
91
|
+
return true;
|
|
92
|
+
// Version-stamped: Godot_v<...>...win64[...]( _console)?.exe
|
|
93
|
+
return WIN_STAMPED_RE.test(lower);
|
|
94
|
+
}
|
|
95
|
+
if (os === 'darwin') {
|
|
96
|
+
if (lower === 'godot' || lower === 'godot_mono')
|
|
97
|
+
return true;
|
|
98
|
+
return MACOS_STAMPED_RE.test(lower);
|
|
99
|
+
}
|
|
100
|
+
// linux + others
|
|
101
|
+
if (lower === 'godot' || lower === 'godot_mono')
|
|
102
|
+
return true;
|
|
103
|
+
return LINUX_STAMPED_RE.test(lower);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Rank a Godot binary name so we can prefer the build that surfaces the most
|
|
107
|
+
* useful output. Higher score = more preferred:
|
|
108
|
+
* - mono `_console` build (mono + stdout) → 3
|
|
109
|
+
* - mono build → 2
|
|
110
|
+
* - non-mono `_console` build → 1
|
|
111
|
+
* - everything else → 0
|
|
112
|
+
* Used to pick the best match within a single directory of candidates.
|
|
113
|
+
*/
|
|
114
|
+
function godotBinaryRank(name) {
|
|
115
|
+
const lower = name.toLowerCase();
|
|
116
|
+
const mono = lower.includes('mono');
|
|
117
|
+
const console = lower.includes('_console');
|
|
118
|
+
if (mono && console)
|
|
119
|
+
return 3;
|
|
120
|
+
if (mono)
|
|
121
|
+
return 2;
|
|
122
|
+
if (console)
|
|
123
|
+
return 1;
|
|
124
|
+
return 0;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Recursively scan `root` for files whose name looks like a Godot editor binary,
|
|
128
|
+
* descending at most `maxDepth` levels. Returns absolute paths, best-ranked
|
|
129
|
+
* first (so a caller can take the first hit). Symlinks are not followed and any
|
|
130
|
+
* unreadable directory is skipped silently — this is a best-effort discovery
|
|
131
|
+
* scan, never a hard failure.
|
|
132
|
+
*/
|
|
133
|
+
function scanForGodotBinaries(root, os, maxDepth) {
|
|
134
|
+
const found = [];
|
|
135
|
+
const walk = (dir, depth) => {
|
|
136
|
+
let entries;
|
|
137
|
+
try {
|
|
138
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return; // unreadable / nonexistent — skip
|
|
142
|
+
}
|
|
143
|
+
for (const entry of entries) {
|
|
144
|
+
const full = path.join(dir, entry.name);
|
|
145
|
+
if (entry.isFile()) {
|
|
146
|
+
if (isGodotBinaryName(entry.name, os)) {
|
|
147
|
+
found.push(full);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else if (entry.isDirectory() && depth < maxDepth) {
|
|
151
|
+
walk(full, depth + 1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
walk(root, 0);
|
|
156
|
+
// Order, in priority: best build (mono _console > mono > _console > plain),
|
|
157
|
+
// then newest version (so Godot_v4.5.1 beats Godot_v4.3 when both are
|
|
158
|
+
// extracted side by side), then path for a deterministic tiebreak.
|
|
159
|
+
found.sort((a, b) => {
|
|
160
|
+
const nameA = path.basename(a);
|
|
161
|
+
const nameB = path.basename(b);
|
|
162
|
+
const rank = godotBinaryRank(nameB) - godotBinaryRank(nameA);
|
|
163
|
+
if (rank !== 0)
|
|
164
|
+
return rank;
|
|
165
|
+
const version = godotVersionKey(nameB) - godotVersionKey(nameA);
|
|
166
|
+
if (version !== 0)
|
|
167
|
+
return version;
|
|
168
|
+
return a.localeCompare(b);
|
|
169
|
+
});
|
|
170
|
+
return found;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Per-OS common install roots to scan for a Godot editor binary when neither an
|
|
174
|
+
* env override nor a PATH hit resolves one. Each root carries its own scan
|
|
175
|
+
* depth (see {@link InstallRoot}). Duplicate paths (e.g. `USERPROFILE` and
|
|
176
|
+
* `homedir()` resolving to the same Downloads dir on Windows) are collapsed,
|
|
177
|
+
* keeping the first/deepest occurrence so a dir is never scanned twice.
|
|
178
|
+
* - Windows: Downloads, Program Files (+ x86), LocalAppData Programs, home,
|
|
179
|
+
* plus package-manager locations (Scoop / Chocolatey / winget / Steam).
|
|
180
|
+
* - macOS: `/Applications`, `~/Applications`, `~/Downloads` (the `.app`
|
|
181
|
+
* bundle's inner `Contents/MacOS/Godot` binary is matched by the scan).
|
|
182
|
+
* - Linux: system bin dirs (flat) + extracted-binary dirs + Downloads + Steam.
|
|
183
|
+
*/
|
|
184
|
+
function commonInstallRoots(os) {
|
|
40
185
|
const home = homedir();
|
|
41
|
-
const
|
|
186
|
+
const recursive = [];
|
|
187
|
+
const flat = [];
|
|
42
188
|
if (os === 'win32') {
|
|
43
189
|
const programFiles = process.env['PROGRAMFILES'] ?? 'C:\\Program Files';
|
|
190
|
+
const programFilesX86 = process.env['PROGRAMFILES(X86)'] ?? 'C:\\Program Files (x86)';
|
|
44
191
|
const localAppData = process.env['LOCALAPPDATA'] ?? path.join(home, 'AppData', 'Local');
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
return candidates;
|
|
192
|
+
const userProfile = process.env['USERPROFILE'] ?? home;
|
|
193
|
+
recursive.push(path.join(userProfile, 'Downloads'), path.join(home, 'Downloads'), path.join(programFiles, 'Godot'), path.join(programFilesX86, 'Godot'), path.join(localAppData, 'Programs', 'Godot'),
|
|
194
|
+
// Scoop installs shims + apps under ~/scoop.
|
|
195
|
+
path.join(userProfile, 'scoop', 'apps', 'godot'), path.join(userProfile, 'scoop', 'apps', 'godot-mono'),
|
|
196
|
+
// Chocolatey lib.
|
|
197
|
+
path.join(process.env['CHOCOLATEYINSTALL'] ?? 'C:\\ProgramData\\chocolatey', 'lib', 'godot'),
|
|
198
|
+
// winget links / Steam common.
|
|
199
|
+
path.join(localAppData, 'Microsoft', 'WinGet', 'Packages'), path.join(programFiles, 'Steam', 'steamapps', 'common', 'Godot Engine'), path.join(programFilesX86, 'Steam', 'steamapps', 'common', 'Godot Engine'));
|
|
55
200
|
}
|
|
56
|
-
if (os === 'darwin') {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
path.join(home, 'Applications', 'Godot_mono.app'),
|
|
61
|
-
path.join(home, 'Applications', 'Godot.app'),
|
|
62
|
-
]) {
|
|
63
|
-
candidates.push(path.join(app, 'Contents', 'MacOS', 'Godot'));
|
|
64
|
-
}
|
|
65
|
-
return candidates;
|
|
201
|
+
else if (os === 'darwin') {
|
|
202
|
+
recursive.push('/Applications', path.join(home, 'Applications'), path.join(home, 'Downloads'),
|
|
203
|
+
// Steam.
|
|
204
|
+
path.join(home, 'Library', 'Application Support', 'Steam', 'steamapps', 'common', 'Godot Engine'));
|
|
66
205
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
'/usr/local/bin',
|
|
70
|
-
'/
|
|
71
|
-
|
|
72
|
-
path.join(home, '
|
|
73
|
-
path.join(home, 'bin'),
|
|
74
|
-
]) {
|
|
75
|
-
candidates.push(path.join(dir, 'godot'));
|
|
76
|
-
candidates.push(path.join(dir, 'godot_mono'));
|
|
77
|
-
candidates.push(path.join(dir, 'Godot'));
|
|
206
|
+
else {
|
|
207
|
+
// linux + others. System bin dirs are flat; archive-extraction dirs recurse.
|
|
208
|
+
flat.push('/usr/local/bin', '/usr/bin', path.join(home, '.local', 'bin'), path.join(home, 'bin'));
|
|
209
|
+
recursive.push('/opt', path.join(home, '.local', 'share', 'godot'), path.join(home, 'Applications'), path.join(home, 'Downloads'),
|
|
210
|
+
// Steam.
|
|
211
|
+
path.join(home, '.local', 'share', 'Steam', 'steamapps', 'common', 'Godot Engine'), path.join(home, '.steam', 'steam', 'steamapps', 'common', 'Godot Engine'));
|
|
78
212
|
}
|
|
79
|
-
|
|
213
|
+
// Build the ordered list (recursive roots first, then flat), de-duplicating
|
|
214
|
+
// by resolved path so a dir reachable two ways is scanned only once.
|
|
215
|
+
const seen = new Set();
|
|
216
|
+
const roots = [];
|
|
217
|
+
const add = (p, depth) => {
|
|
218
|
+
if (seen.has(p))
|
|
219
|
+
return;
|
|
220
|
+
seen.add(p);
|
|
221
|
+
roots.push({ path: p, depth });
|
|
222
|
+
};
|
|
223
|
+
for (const p of recursive)
|
|
224
|
+
add(p, SCAN_MAX_DEPTH);
|
|
225
|
+
for (const p of flat)
|
|
226
|
+
add(p, FLAT_SCAN_DEPTH);
|
|
227
|
+
return roots;
|
|
80
228
|
}
|
|
81
229
|
/**
|
|
82
|
-
* Search the directories on `PATH` for
|
|
83
|
-
*
|
|
230
|
+
* Search the directories on `PATH` for a matching Godot binary. Pure filesystem
|
|
231
|
+
* lookup — never spawns anything. Each PATH dir is first probed for the fixed
|
|
232
|
+
* candidate names (cheap), then, if none hit, its immediate entries are scanned
|
|
233
|
+
* for a version-stamped name (`Godot_v...`). Within a single PATH dir the
|
|
234
|
+
* best-ranked build (mono `_console` > mono > …) wins.
|
|
84
235
|
*/
|
|
85
236
|
function findOnPath(os) {
|
|
86
237
|
const pathEnv = process.env['PATH'] ?? '';
|
|
@@ -90,12 +241,18 @@ function findOnPath(os) {
|
|
|
90
241
|
const dirs = pathEnv.split(sep).filter((d) => d.length > 0);
|
|
91
242
|
const names = pathCandidateNames(os);
|
|
92
243
|
for (const dir of dirs) {
|
|
244
|
+
// Fast path: fixed candidate names.
|
|
93
245
|
for (const name of names) {
|
|
94
246
|
const candidate = path.join(dir, name);
|
|
95
247
|
if (existsAsFile(candidate)) {
|
|
96
248
|
return candidate;
|
|
97
249
|
}
|
|
98
250
|
}
|
|
251
|
+
// Slow path: version-stamped binary sitting directly on a PATH dir.
|
|
252
|
+
const stamped = scanForGodotBinaries(dir, os, 0);
|
|
253
|
+
if (stamped.length > 0) {
|
|
254
|
+
return stamped[0];
|
|
255
|
+
}
|
|
99
256
|
}
|
|
100
257
|
return null;
|
|
101
258
|
}
|
|
@@ -113,10 +270,14 @@ function existsAsFile(p) {
|
|
|
113
270
|
* Resolution order (first hit wins):
|
|
114
271
|
* 1. An explicit `editorPath` argument (validated to be an existing file).
|
|
115
272
|
* 2. `GODOT_BIN` / `GODOT4_BIN` environment variables.
|
|
116
|
-
* 3. The first matching Godot binary on `PATH
|
|
117
|
-
* 4.
|
|
118
|
-
*
|
|
119
|
-
*
|
|
273
|
+
* 3. The first matching Godot binary on `PATH` (fixed name or version-stamped).
|
|
274
|
+
* 4. A bounded scan of per-OS common install roots (Downloads, Program Files,
|
|
275
|
+
* LocalAppData Programs, home, plus Scoop / Chocolatey / winget / Steam
|
|
276
|
+
* locations). Archive-extraction roots are scanned recursively while system
|
|
277
|
+
* bin dirs are probed flat. Matches both fixed and version-stamped names
|
|
278
|
+
* (`Godot_v<ver>-stable_mono_win64[_console].exe`), preferring the mono
|
|
279
|
+
* `_console` build and the newest version. This is what resolves the common
|
|
280
|
+
* case of an official zip extracted into a nested version-stamped folder.
|
|
120
281
|
*
|
|
121
282
|
* Returns the absolute path, or `null` when no Godot binary can be located.
|
|
122
283
|
* Pure / no spawn — exported for unit tests (the `os`/env are injectable via
|
|
@@ -145,10 +306,13 @@ export function findGodotBinary(editorPath, os = platform()) {
|
|
|
145
306
|
const onPath = findOnPath(os);
|
|
146
307
|
if (onPath)
|
|
147
308
|
return onPath;
|
|
148
|
-
// 4.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
309
|
+
// 4. Bounded scan of common install roots. Roots are tried in priority order
|
|
310
|
+
// at each root's own depth (system bin dirs flat, archive-extraction roots
|
|
311
|
+
// recursive); within a root the best-ranked, newest build wins.
|
|
312
|
+
for (const root of commonInstallRoots(os)) {
|
|
313
|
+
const hits = scanForGodotBinaries(root.path, os, root.depth);
|
|
314
|
+
if (hits.length > 0) {
|
|
315
|
+
return hits[0];
|
|
152
316
|
}
|
|
153
317
|
}
|
|
154
318
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"godot-editor.js","sourceRoot":"","sources":["../../src/utils/godot-editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,YAAY,CAAU,CAAC;AAEvE;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,EAAmB;IAC7C,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QACnB,0EAA0E;QAC1E,OAAO;YACL,gBAAgB;YAChB,WAAW;YACX,gBAAgB;YAChB,WAAW;SACZ,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;QACpB,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,
|
|
1
|
+
{"version":3,"file":"godot-editor.js","sourceRoot":"","sources":["../../src/utils/godot-editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** A single Godot-MCP tool family and the individual tools it exposes. */
|
|
2
|
+
export interface SkillFamily {
|
|
3
|
+
/** Stable slug used for the per-family directory name (e.g. `node`). */
|
|
4
|
+
id: string;
|
|
5
|
+
/** Human-facing family name (matches the addon's `Tool_<Family>` class). */
|
|
6
|
+
title: string;
|
|
7
|
+
/** One-line summary of what the family is for. */
|
|
8
|
+
summary: string;
|
|
9
|
+
/** The MCP tool names in this family (as exposed to MCP clients). */
|
|
10
|
+
tools: {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
}[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The Godot-MCP tool-family catalog. Mirrors the 10 families documented in
|
|
17
|
+
* `Godot-MCP/CLAUDE.md` § Tool families and the `[AiToolType]` classes under
|
|
18
|
+
* `addons/godot_mcp/Tools/`. Tool names are the `[AiTool("<name>")]` identifiers
|
|
19
|
+
* an MCP client invokes.
|
|
20
|
+
*/
|
|
21
|
+
export declare const SKILL_FAMILIES: readonly SkillFamily[];
|
|
22
|
+
/** A single skill file the generator will write (path is relative to the skills dir). */
|
|
23
|
+
export interface SkillFile {
|
|
24
|
+
/** Path relative to the agent's skills directory, e.g. `godot-mcp-node/SKILL.md`. */
|
|
25
|
+
relativePath: string;
|
|
26
|
+
/** Full file contents (UTF-8, LF-terminated). */
|
|
27
|
+
content: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Build the full list of skill files for a Godot project: one root overview plus
|
|
31
|
+
* one per tool family. Deterministic — the same input always yields the same
|
|
32
|
+
* bytes, so writing them is idempotent.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildSkillFiles(): SkillFile[];
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
// Godot-MCP skill catalog + SKILL.md content generation.
|
|
2
|
+
//
|
|
3
|
+
// The Godot analog of Unity-MCP's server-side skill generation. Unlike the
|
|
4
|
+
// Unity CLI — which POSTs to a running editor's `/api/system-tools/unity-skill-
|
|
5
|
+
// generate` endpoint to have the engine emit skill files — the Godot MCP server
|
|
6
|
+
// exposes NO skill-generate HTTP endpoint, and the Godot addon only auto-
|
|
7
|
+
// generates skills in-process on plugin boot (`GodotMcpConnection.Start` →
|
|
8
|
+
// `GenerateSkillFilesIfNeeded`). That in-process path requires a live, connected
|
|
9
|
+
// editor and writes into `user://`-derived locations the CLI cannot drive.
|
|
10
|
+
//
|
|
11
|
+
// So `godot-cli setup-skills` generates the skill files LOCALLY from this
|
|
12
|
+
// catalog: a `SKILL.md`-per-tool-family directory written under the selected
|
|
13
|
+
// agent's `skillsPath`, with content describing the godot_mcp addon's tool
|
|
14
|
+
// families (NOT Unity's tool names). This makes the command self-contained — no
|
|
15
|
+
// server, no running editor — and idempotent (re-running rewrites the same
|
|
16
|
+
// bytes). The catalog mirrors `Godot-MCP/CLAUDE.md` § Tool families; keep the
|
|
17
|
+
// two in lockstep when the addon's tool surface changes.
|
|
18
|
+
/**
|
|
19
|
+
* The Godot-MCP tool-family catalog. Mirrors the 10 families documented in
|
|
20
|
+
* `Godot-MCP/CLAUDE.md` § Tool families and the `[AiToolType]` classes under
|
|
21
|
+
* `addons/godot_mcp/Tools/`. Tool names are the `[AiTool("<name>")]` identifiers
|
|
22
|
+
* an MCP client invokes.
|
|
23
|
+
*/
|
|
24
|
+
export const SKILL_FAMILIES = [
|
|
25
|
+
{
|
|
26
|
+
id: 'node',
|
|
27
|
+
title: 'Node',
|
|
28
|
+
summary: 'Find, create, modify, reparent, duplicate, and delete nodes in the open scene tree.',
|
|
29
|
+
tools: [
|
|
30
|
+
{ name: 'node-find', description: 'Find nodes in the open scene by path, name, or type.' },
|
|
31
|
+
{ name: 'node-create', description: 'Create a new node (optionally instancing a sub-scene) under a parent.' },
|
|
32
|
+
{ name: 'node-modify', description: 'Set properties on an existing node.' },
|
|
33
|
+
{ name: 'node-set-parent', description: 'Reparent a node to a new parent in the scene tree.' },
|
|
34
|
+
{ name: 'node-duplicate', description: 'Duplicate an existing node.' },
|
|
35
|
+
{ name: 'node-delete', description: 'Delete a node from the scene tree.' },
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'scene',
|
|
40
|
+
title: 'Scene',
|
|
41
|
+
summary: 'Open, save, create, list, and inspect Godot scenes (`.tscn`).',
|
|
42
|
+
tools: [
|
|
43
|
+
{ name: 'scene-open', description: 'Open a scene file in the editor.' },
|
|
44
|
+
{ name: 'scene-save', description: 'Save the current (or a specified) scene.' },
|
|
45
|
+
{ name: 'scene-create', description: 'Create a new scene with a given root node.' },
|
|
46
|
+
{ name: 'scene-list-opened', description: 'List the scenes currently open in the editor.' },
|
|
47
|
+
{ name: 'scene-get-data', description: 'Read the structured node tree / data of a scene.' },
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'resource',
|
|
52
|
+
title: 'Resource',
|
|
53
|
+
summary: 'Find, read, modify, create, move, and delete Godot resources (`.tres`/`.res` and assets).',
|
|
54
|
+
tools: [
|
|
55
|
+
{ name: 'resource-find', description: 'Find resource files under `res://` by path or type.' },
|
|
56
|
+
{ name: 'resource-get-data', description: 'Read the structured data of a resource.' },
|
|
57
|
+
{ name: 'resource-modify', description: 'Set properties on an existing resource.' },
|
|
58
|
+
{ name: 'resource-create', description: 'Create a new resource of a given type.' },
|
|
59
|
+
{ name: 'resource-move', description: 'Move/rename a resource within the project.' },
|
|
60
|
+
{ name: 'resource-delete', description: 'Delete a resource file from the project.' },
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
id: 'filesystem',
|
|
65
|
+
title: 'FileSystem',
|
|
66
|
+
summary: 'List and reimport project files through the Godot editor filesystem.',
|
|
67
|
+
tools: [
|
|
68
|
+
{ name: 'filesystem-list', description: 'List files/folders under a `res://` path.' },
|
|
69
|
+
{ name: 'filesystem-reimport', description: 'Trigger a reimport of project assets.' },
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: 'script',
|
|
74
|
+
title: 'Script',
|
|
75
|
+
summary: 'Read, create, update, delete, and attach GDScript / C# scripts.',
|
|
76
|
+
tools: [
|
|
77
|
+
{ name: 'script-read', description: 'Read the source of a script file.' },
|
|
78
|
+
{ name: 'script-create', description: 'Create a new script file.' },
|
|
79
|
+
{ name: 'script-update', description: 'Replace or patch the contents of a script.' },
|
|
80
|
+
{ name: 'script-delete', description: 'Delete a script file.' },
|
|
81
|
+
{ name: 'script-attach-to-node', description: 'Attach a script to a node in the scene.' },
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: 'screenshot',
|
|
86
|
+
title: 'Screenshot',
|
|
87
|
+
summary: 'Capture the editor viewport, a camera, or an isolated node as an image.',
|
|
88
|
+
tools: [
|
|
89
|
+
{ name: 'screenshot-viewport', description: 'Capture the editor viewport.' },
|
|
90
|
+
{ name: 'screenshot-camera', description: 'Capture from a specific camera.' },
|
|
91
|
+
{ name: 'screenshot-isolated', description: 'Capture an isolated node/subtree.' },
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: 'editor',
|
|
96
|
+
title: 'Editor',
|
|
97
|
+
summary: 'Read/modify editor application state and the current node selection.',
|
|
98
|
+
tools: [
|
|
99
|
+
{ name: 'editor-application-get-state', description: 'Read editor application state (play mode, focus, etc.).' },
|
|
100
|
+
{ name: 'editor-application-set-state', description: 'Change editor application state.' },
|
|
101
|
+
{ name: 'editor-selection-get', description: 'Read the current editor node selection.' },
|
|
102
|
+
{ name: 'editor-selection-set', description: 'Set the current editor node selection.' },
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
id: 'console',
|
|
107
|
+
title: 'Console',
|
|
108
|
+
summary: 'Read and clear the editor/runtime log buffer.',
|
|
109
|
+
tools: [
|
|
110
|
+
{ name: 'console-get-logs', description: 'Read collected editor/runtime log entries.' },
|
|
111
|
+
{ name: 'console-clear-logs', description: 'Clear the collected log buffer.' },
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
id: 'reflection',
|
|
116
|
+
title: 'Reflection',
|
|
117
|
+
summary: 'Discover and invoke engine methods reflectively via ReflectorNet.',
|
|
118
|
+
tools: [
|
|
119
|
+
{ name: 'reflection-method-find', description: 'Find methods on an engine type by name/signature.' },
|
|
120
|
+
{ name: 'reflection-method-call', description: 'Invoke a method reflectively with serialized arguments.' },
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
id: 'ping',
|
|
125
|
+
title: 'Ping',
|
|
126
|
+
summary: 'Liveness check — confirm the MCP connection to the Godot editor is alive.',
|
|
127
|
+
tools: [
|
|
128
|
+
{ name: 'ping', description: 'Return `pong` (or the echoed message) to confirm connectivity.' },
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
];
|
|
132
|
+
const ROOT_SKILL_NAME = 'godot-mcp';
|
|
133
|
+
/**
|
|
134
|
+
* YAML-escape a scalar that goes into single quotes in frontmatter.
|
|
135
|
+
*
|
|
136
|
+
* Correctness depends on the value staying single-line: a single-quoted YAML
|
|
137
|
+
* scalar cannot contain a literal newline, so an embedded `\n` would produce
|
|
138
|
+
* invalid frontmatter. All catalog descriptions here are single-line ASCII, so
|
|
139
|
+
* doubling `'` is sufficient; revisit if multi-line descriptions are ever added.
|
|
140
|
+
*/
|
|
141
|
+
function yamlSingleQuote(value) {
|
|
142
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Build the root overview `SKILL.md` — a map of all tool families pointing the
|
|
146
|
+
* agent at the per-family skills.
|
|
147
|
+
*/
|
|
148
|
+
function buildRootSkill() {
|
|
149
|
+
const lines = [];
|
|
150
|
+
lines.push('---');
|
|
151
|
+
lines.push(`name: ${ROOT_SKILL_NAME}`);
|
|
152
|
+
lines.push(`description: ${yamlSingleQuote('Drive the Godot editor through Godot-MCP. Use when creating/editing scenes, nodes, resources, scripts, or capturing screenshots in a Godot project connected to an MCP server.')}`);
|
|
153
|
+
lines.push('---');
|
|
154
|
+
lines.push('');
|
|
155
|
+
lines.push('# Godot-MCP');
|
|
156
|
+
lines.push('');
|
|
157
|
+
lines.push('Godot-MCP exposes the Godot editor to an MCP client via the `godot_mcp` addon. The addon connects to an MCP server (cloud `ai-game.dev` by default, or a custom local server) and surfaces the tool families below. Invoke tools by their MCP names (e.g. `node-create`, `scene-open`).');
|
|
158
|
+
lines.push('');
|
|
159
|
+
lines.push('## When to use');
|
|
160
|
+
lines.push('');
|
|
161
|
+
lines.push('- The project is a Godot project with the `godot_mcp` addon enabled and connected.');
|
|
162
|
+
lines.push('- You need to read or mutate the open scene, project resources, or scripts programmatically.');
|
|
163
|
+
lines.push('- You want to verify a change visually with a screenshot, or inspect the editor log.');
|
|
164
|
+
lines.push('');
|
|
165
|
+
lines.push('## Tool families');
|
|
166
|
+
lines.push('');
|
|
167
|
+
lines.push('| Family | Tools | Use for |');
|
|
168
|
+
lines.push('| --- | --- | --- |');
|
|
169
|
+
for (const fam of SKILL_FAMILIES) {
|
|
170
|
+
const toolNames = fam.tools.map((t) => `\`${t.name}\``).join(', ');
|
|
171
|
+
lines.push(`| ${fam.title} | ${toolNames} | ${fam.summary} |`);
|
|
172
|
+
}
|
|
173
|
+
lines.push('');
|
|
174
|
+
lines.push('See the per-family skill files in this directory for the tool list and usage of each family.');
|
|
175
|
+
lines.push('');
|
|
176
|
+
return { relativePath: `${ROOT_SKILL_NAME}/SKILL.md`, content: lines.join('\n') };
|
|
177
|
+
}
|
|
178
|
+
/** Build a per-family `SKILL.md`. */
|
|
179
|
+
function buildFamilySkill(fam) {
|
|
180
|
+
const slug = `${ROOT_SKILL_NAME}-${fam.id}`;
|
|
181
|
+
const lines = [];
|
|
182
|
+
lines.push('---');
|
|
183
|
+
lines.push(`name: ${slug}`);
|
|
184
|
+
lines.push(`description: ${yamlSingleQuote(`Godot-MCP ${fam.title} tools. ${fam.summary}`)}`);
|
|
185
|
+
lines.push('---');
|
|
186
|
+
lines.push('');
|
|
187
|
+
lines.push(`# Godot-MCP — ${fam.title}`);
|
|
188
|
+
lines.push('');
|
|
189
|
+
lines.push(fam.summary);
|
|
190
|
+
lines.push('');
|
|
191
|
+
lines.push('## Tools');
|
|
192
|
+
lines.push('');
|
|
193
|
+
for (const tool of fam.tools) {
|
|
194
|
+
lines.push(`- \`${tool.name}\` — ${tool.description}`);
|
|
195
|
+
}
|
|
196
|
+
lines.push('');
|
|
197
|
+
lines.push('## Notes');
|
|
198
|
+
lines.push('');
|
|
199
|
+
lines.push('- All editor-driving tools run on the Godot editor main thread; effects are applied to the live editor state.');
|
|
200
|
+
lines.push('- Results are returned as structured data (ReflectorNet-serialized), not free-form text.');
|
|
201
|
+
lines.push('');
|
|
202
|
+
return { relativePath: `${slug}/SKILL.md`, content: lines.join('\n') };
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Build the full list of skill files for a Godot project: one root overview plus
|
|
206
|
+
* one per tool family. Deterministic — the same input always yields the same
|
|
207
|
+
* bytes, so writing them is idempotent.
|
|
208
|
+
*/
|
|
209
|
+
export function buildSkillFiles() {
|
|
210
|
+
const files = [buildRootSkill()];
|
|
211
|
+
for (const fam of SKILL_FAMILIES) {
|
|
212
|
+
files.push(buildFamilySkill(fam));
|
|
213
|
+
}
|
|
214
|
+
return files;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/utils/skills.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "godot-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Cross-platform CLI tool for Godot-MCP (Skills & MCP). Resolves and launches the Godot editor with MCP connection env vars, runs MCP/system tools over HTTP, probes server health, configures AI agents (Claude Code, Cursor, VS Code, …), and enables/disables the godot_mcp addon. Works with Claude Code, Cursor, Copilot, and any MCP client.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/lib.js",
|
|
@@ -68,6 +68,6 @@
|
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@types/node": "^22.15.0",
|
|
70
70
|
"typescript": "^5.8.0",
|
|
71
|
-
"vitest": "^
|
|
71
|
+
"vitest": "^4.1.8"
|
|
72
72
|
}
|
|
73
73
|
}
|