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.
@@ -30,57 +30,208 @@ function pathCandidateNames(os) {
30
30
  return ['godot', 'godot_mono', 'Godot'];
31
31
  }
32
32
  /**
33
- * Per-OS common install directories to scan for a Godot editor binary when
34
- * neither an env override nor a PATH hit resolves one.
35
- * - Windows: prefer the mono build under Program Files / common download dirs.
36
- * - macOS: the `.app` bundle's inner `Contents/MacOS/Godot` binary.
37
- * - Linux: extracted binaries under common app dirs.
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
- function commonInstallCandidates(os) {
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 candidates = [];
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
- for (const root of [
46
- path.join(programFiles, 'Godot'),
47
- path.join(localAppData, 'Programs', 'Godot'),
48
- path.join(home, 'Downloads'),
49
- ]) {
50
- // Prefer the mono console build (surfaces stdout), then the plain mono build.
51
- candidates.push(path.join(root, 'Godot_mono.exe'));
52
- candidates.push(path.join(root, 'Godot.exe'));
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
- for (const app of [
58
- '/Applications/Godot_mono.app',
59
- '/Applications/Godot.app',
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
- // linux + others
68
- for (const dir of [
69
- '/usr/local/bin',
70
- '/usr/bin',
71
- path.join(home, '.local', 'bin'),
72
- path.join(home, 'Applications'),
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
- return candidates;
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 the first matching Godot binary name.
83
- * Pure filesystem lookup — never spawns anything.
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. Per-OS common install directories (Windows prefers the mono build;
118
- * macOS resolves the `.app/Contents/MacOS` binary; Linux scans common
119
- * extracted-binary locations).
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. Common install dirs
149
- for (const candidate of commonInstallCandidates(os)) {
150
- if (existsAsFile(candidate)) {
151
- return candidate;
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":"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"}
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.6.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": "^3.1.0"
71
+ "vitest": "^4.1.8"
72
72
  }
73
73
  }