godot-cli 0.37.0 → 0.39.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.
Files changed (167) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/README.md +139 -16
  3. package/dist/cli.d.ts +7 -0
  4. package/dist/cli.js +7 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/check.d.ts +2 -0
  7. package/dist/commands/check.js +48 -0
  8. package/dist/commands/check.js.map +1 -0
  9. package/dist/commands/close.d.ts +3 -0
  10. package/dist/commands/close.js +82 -27
  11. package/dist/commands/close.js.map +1 -1
  12. package/dist/commands/commands.d.ts +3 -0
  13. package/dist/commands/commands.js +28 -0
  14. package/dist/commands/commands.js.map +1 -0
  15. package/dist/commands/exec.js +43 -28
  16. package/dist/commands/exec.js.map +1 -1
  17. package/dist/commands/export.d.ts +2 -0
  18. package/dist/commands/export.js +45 -0
  19. package/dist/commands/export.js.map +1 -0
  20. package/dist/commands/headless-common.d.ts +29 -0
  21. package/dist/commands/headless-common.js +69 -0
  22. package/dist/commands/headless-common.js.map +1 -0
  23. package/dist/commands/import.d.ts +2 -0
  24. package/dist/commands/import.js +32 -0
  25. package/dist/commands/import.js.map +1 -0
  26. package/dist/commands/open.js +38 -6
  27. package/dist/commands/open.js.map +1 -1
  28. package/dist/commands/rql.d.ts +2 -0
  29. package/dist/commands/rql.js +81 -0
  30. package/dist/commands/rql.js.map +1 -0
  31. package/dist/commands/run-script.d.ts +2 -0
  32. package/dist/commands/run-script.js +33 -0
  33. package/dist/commands/run-script.js.map +1 -0
  34. package/dist/commands/run-system-tool.js +0 -1
  35. package/dist/commands/run-system-tool.js.map +1 -1
  36. package/dist/commands/run-tool-builder.d.ts +38 -4
  37. package/dist/commands/run-tool-builder.js +179 -56
  38. package/dist/commands/run-tool-builder.js.map +1 -1
  39. package/dist/commands/run-tool.js +0 -1
  40. package/dist/commands/run-tool.js.map +1 -1
  41. package/dist/commands/setup-skills.js +3 -2
  42. package/dist/commands/setup-skills.js.map +1 -1
  43. package/dist/commands/status.js +25 -19
  44. package/dist/commands/status.js.map +1 -1
  45. package/dist/commands/test.d.ts +5 -0
  46. package/dist/commands/test.js +111 -0
  47. package/dist/commands/test.js.map +1 -0
  48. package/dist/commands/tools.d.ts +2 -0
  49. package/dist/commands/tools.js +120 -0
  50. package/dist/commands/tools.js.map +1 -0
  51. package/dist/commands/update.js +1 -1
  52. package/dist/commands/update.js.map +1 -1
  53. package/dist/commands/wait-for-ready.js +18 -20
  54. package/dist/commands/wait-for-ready.js.map +1 -1
  55. package/dist/index.js +48 -3
  56. package/dist/index.js.map +1 -1
  57. package/dist/lib/build.d.ts +1 -1
  58. package/dist/lib/build.js +21 -4
  59. package/dist/lib/build.js.map +1 -1
  60. package/dist/lib/check.d.ts +44 -0
  61. package/dist/lib/check.js +191 -0
  62. package/dist/lib/check.js.map +1 -0
  63. package/dist/lib/cli-guide.d.ts +26 -0
  64. package/dist/lib/cli-guide.js +51 -0
  65. package/dist/lib/cli-guide.js.map +1 -0
  66. package/dist/lib/exec.d.ts +19 -0
  67. package/dist/lib/exec.js +61 -10
  68. package/dist/lib/exec.js.map +1 -1
  69. package/dist/lib/export-project.d.ts +41 -0
  70. package/dist/lib/export-project.js +159 -0
  71. package/dist/lib/export-project.js.map +1 -0
  72. package/dist/lib/godot-log.d.ts +38 -0
  73. package/dist/lib/godot-log.js +145 -0
  74. package/dist/lib/godot-log.js.map +1 -0
  75. package/dist/lib/godot-run.d.ts +34 -0
  76. package/dist/lib/godot-run.js +113 -0
  77. package/dist/lib/godot-run.js.map +1 -0
  78. package/dist/lib/headless.d.ts +82 -0
  79. package/dist/lib/headless.js +117 -0
  80. package/dist/lib/headless.js.map +1 -0
  81. package/dist/lib/import-project.d.ts +9 -0
  82. package/dist/lib/import-project.js +15 -0
  83. package/dist/lib/import-project.js.map +1 -0
  84. package/dist/lib/junit.d.ts +36 -0
  85. package/dist/lib/junit.js +146 -0
  86. package/dist/lib/junit.js.map +1 -0
  87. package/dist/lib/list-tools.d.ts +51 -0
  88. package/dist/lib/list-tools.js +147 -0
  89. package/dist/lib/list-tools.js.map +1 -0
  90. package/dist/lib/open.js +3 -1
  91. package/dist/lib/open.js.map +1 -1
  92. package/dist/lib/progress.d.ts +1 -7
  93. package/dist/lib/progress.js +2 -15
  94. package/dist/lib/progress.js.map +1 -1
  95. package/dist/lib/rql.d.ts +32 -0
  96. package/dist/lib/rql.js +105 -0
  97. package/dist/lib/rql.js.map +1 -0
  98. package/dist/lib/run-script.d.ts +23 -0
  99. package/dist/lib/run-script.js +43 -0
  100. package/dist/lib/run-script.js.map +1 -0
  101. package/dist/lib/run-tests.d.ts +50 -0
  102. package/dist/lib/run-tests.js +181 -0
  103. package/dist/lib/run-tests.js.map +1 -0
  104. package/dist/lib/run-tool.js +6 -22
  105. package/dist/lib/run-tool.js.map +1 -1
  106. package/dist/lib/session.d.ts +8 -1
  107. package/dist/lib/session.js +38 -5
  108. package/dist/lib/session.js.map +1 -1
  109. package/dist/lib/setup-skills.d.ts +8 -13
  110. package/dist/lib/setup-skills.js +27 -24
  111. package/dist/lib/setup-skills.js.map +1 -1
  112. package/dist/lib/types.d.ts +7 -0
  113. package/dist/lib/update-project.js +1 -1
  114. package/dist/lib/update-project.js.map +1 -1
  115. package/dist/lib.d.ts +16 -0
  116. package/dist/lib.js +10 -0
  117. package/dist/lib.js.map +1 -1
  118. package/dist/utils/addon-deps.js +2 -2
  119. package/dist/utils/agents.d.ts +2 -6
  120. package/dist/utils/agents.js.map +1 -1
  121. package/dist/utils/connection.d.ts +59 -0
  122. package/dist/utils/connection.js +11 -10
  123. package/dist/utils/connection.js.map +1 -1
  124. package/dist/utils/csproj-deps.js +1 -1
  125. package/dist/utils/csproj-deps.js.map +1 -1
  126. package/dist/utils/editor-connection.d.ts +74 -0
  127. package/dist/utils/editor-connection.js +225 -0
  128. package/dist/utils/editor-connection.js.map +1 -0
  129. package/dist/utils/editor-mcp-server.d.ts +32 -0
  130. package/dist/utils/editor-mcp-server.js +134 -0
  131. package/dist/utils/editor-mcp-server.js.map +1 -0
  132. package/dist/utils/exit-codes.d.ts +2 -0
  133. package/dist/utils/exit-codes.js +4 -0
  134. package/dist/utils/exit-codes.js.map +1 -0
  135. package/dist/utils/godot-process.d.ts +5 -0
  136. package/dist/utils/godot-process.js +16 -0
  137. package/dist/utils/godot-process.js.map +1 -1
  138. package/dist/utils/godot-shutdown.d.ts +3 -1
  139. package/dist/utils/godot-shutdown.js +4 -2
  140. package/dist/utils/godot-shutdown.js.map +1 -1
  141. package/dist/utils/input.d.ts +3 -3
  142. package/dist/utils/input.js +22 -35
  143. package/dist/utils/input.js.map +1 -1
  144. package/dist/utils/output.d.ts +45 -0
  145. package/dist/utils/output.js +101 -0
  146. package/dist/utils/output.js.map +1 -0
  147. package/dist/utils/server-source.d.ts +1 -1
  148. package/dist/utils/server-source.js +1 -1
  149. package/dist/utils/skill-guides.d.ts +6 -9
  150. package/dist/utils/skill-guides.js +100 -43
  151. package/dist/utils/skill-guides.js.map +1 -1
  152. package/dist/utils/skills.d.ts +1 -14
  153. package/dist/utils/skills.js +0 -89
  154. package/dist/utils/skills.js.map +1 -1
  155. package/dist/utils/ui.d.ts +6 -1
  156. package/dist/utils/ui.js +72 -58
  157. package/dist/utils/ui.js.map +1 -1
  158. package/dist/utils/update-check.d.ts +6 -17
  159. package/dist/utils/update-check.js +10 -77
  160. package/dist/utils/update-check.js.map +1 -1
  161. package/package.json +2 -2
  162. package/dist/utils/json-parse.d.ts +0 -25
  163. package/dist/utils/json-parse.js +0 -83
  164. package/dist/utils/json-parse.js.map +0 -1
  165. package/dist/utils/semver.d.ts +0 -4
  166. package/dist/utils/semver.js +0 -25
  167. package/dist/utils/semver.js.map +0 -1
package/dist/utils/ui.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import chalk from 'chalk';
2
2
  import yoctoSpinner from 'yocto-spinner';
3
+ import { CODE_COMMANDS, EDITOR_COMMANDS, EDITOR_START, ROOT_RQL_RECIPES, RQL_RECIPES } from '../lib/cli-guide.js';
3
4
  // --- Verbose mode ---
4
5
  let verboseEnabled = false;
5
6
  export function setVerbose(enabled) {
@@ -7,35 +8,35 @@ export function setVerbose(enabled) {
7
8
  }
8
9
  export function verbose(msg) {
9
10
  if (verboseEnabled) {
10
- if (isTTY()) {
11
- console.log(chalk.dim(`[verbose] ${msg}`));
12
- }
13
- else {
14
- console.log(`[verbose] ${msg}`);
15
- }
11
+ out(isTTY() ? chalk.dim(`[verbose] ${msg}`) : `[verbose] ${msg}`);
16
12
  }
17
13
  }
14
+ // --- Machine output (--format json|ndjson): stdout carries only the envelope ---
15
+ let machineOutput = false;
16
+ let machineLine;
17
+ /**
18
+ * Route every human-readable line (and spinner) to stderr without colour, keeping stdout for the envelope.
19
+ * `wrap` turns each line into an event (ndjson).
20
+ */
21
+ export function setMachineOutput(enabled, wrap) {
22
+ machineOutput = enabled;
23
+ machineLine = enabled ? wrap : undefined;
24
+ }
25
+ /** A human-readable line: stdout normally, plain (or wrapped) stderr in machine mode. */
26
+ function out(line, level = 'info') {
27
+ if (!machineOutput) {
28
+ if (level === 'error')
29
+ console.error(line);
30
+ else
31
+ console.log(line);
32
+ return;
33
+ }
34
+ const plain = stripAnsi(line);
35
+ process.stderr.write((machineLine ? machineLine(level, plain) : plain) + '\n');
36
+ }
18
37
  // --- TTY detection ---
19
38
  function isTTY() {
20
- return !!process.stdout.isTTY;
21
- }
22
- /**
23
- * Draw a Unicode rounded box around text with cyan borders.
24
- */
25
- function drawBox(text) {
26
- const lines = text.split('\n');
27
- const padding = 2;
28
- const maxLen = Math.max(...lines.map(l => stripAnsi(l).length));
29
- const innerWidth = maxLen + padding * 2;
30
- const pad = ' '.repeat(padding);
31
- const top = chalk.cyan('╭' + '─'.repeat(innerWidth) + '╮');
32
- const bottom = chalk.cyan('╰' + '─'.repeat(innerWidth) + '╯');
33
- const middle = lines.map(l => {
34
- const visible = stripAnsi(l).length;
35
- const right = ' '.repeat(maxLen - visible);
36
- return chalk.cyan('│') + pad + l + right + pad + chalk.cyan('│');
37
- });
38
- return [top, ...middle, bottom].join('\n');
39
+ return !machineOutput && !!process.stdout.isTTY;
39
40
  }
40
41
  /**
41
42
  * Strip ANSI escape codes from a string.
@@ -44,25 +45,45 @@ function stripAnsi(str) {
44
45
  // eslint-disable-next-line no-control-regex
45
46
  return str.replace(/\x1B\[[0-9;]*m/g, '');
46
47
  }
48
+ /**
49
+ * The root help: short on purpose (agents read it first, and every later turn re-reads it): the everyday commands, the
50
+ * other command names, and the RQL recipes most tasks need. Each command's own --help has the details.
51
+ */
52
+ function formatRootHelp(target, helper, appVersion) {
53
+ const name = target.name();
54
+ const featured = new Set([...EDITOR_COMMANDS, ...CODE_COMMANDS].map(([cmd]) => cmd));
55
+ const row = ([, usage, what]) => ` ${chalk.yellow(usage.padEnd(26))} ${chalk.dim(what)}`;
56
+ const others = helper.visibleCommands(target).map((c) => c.name()).filter((c) => !featured.has(c) && c !== 'help');
57
+ const lines = [
58
+ `${chalk.bold.cyan('Godot-MCP CLI')}${appVersion ? ` v${appVersion}` : ''}: drive the Godot editor of the project in the current folder (or --path <dir>).`,
59
+ '',
60
+ chalk.bold(`Editor work (${EDITOR_START}):`),
61
+ ...EDITOR_COMMANDS.map(row),
62
+ chalk.bold('Code:'),
63
+ ...CODE_COMMANDS.map(row),
64
+ `${chalk.bold('More commands:')} ${others.join(' ')}`,
65
+ ];
66
+ lines.push('', chalk.bold('RQL recipes (strings inside the query take double quotes):'));
67
+ for (const [query, what] of RQL_RECIPES.slice(0, ROOT_RQL_RECIPES))
68
+ lines.push(` ${chalk.yellow(`rql '${query}'`)} ${chalk.dim(`# ${what}`)}`);
69
+ lines.push('', chalk.dim(`Details: ${name} <command> --help (rql --help: operators, more recipes). Machine-readable output: --format json.`), '');
70
+ return lines.join('\n');
71
+ }
47
72
  /**
48
73
  * Apply styled help formatting to a Commander command.
49
74
  * Call this on every Command instance (root and subcommands)
50
75
  * so that --help / -h always renders the fancy UI.
51
76
  *
52
- * @param appVersion - The CLI version string, shown in the root banner.
77
+ * @param appVersion - The CLI version string, shown in the root help.
53
78
  */
54
79
  export function configureStyledHelp(cmd, appVersion) {
55
80
  cmd.configureHelp({
56
81
  formatHelp(target, helper) {
57
- const isRoot = !target.parent;
82
+ if (!target.parent)
83
+ return formatRootHelp(target, helper, appVersion);
58
84
  const lines = [];
59
- // Banner for root, styled title for subcommands
60
- if (isRoot && appVersion) {
61
- lines.push(drawBox(`${chalk.bold.cyan('Godot-MCP CLI')} ${chalk.dim(`v${appVersion}`)}\n${chalk.dim('Bridge LLMs with Godot via Model Context Protocol')}`));
62
- }
63
- else {
64
- lines.push(drawBox(`${chalk.bold.cyan(target.name())} ${chalk.dim('—')} ${target.description()}`));
65
- }
85
+ // A plain line, not a box: agents read this help, and box borders cost as much as the text again.
86
+ lines.push(`${chalk.bold.cyan(target.name())} ${chalk.dim('—')} ${target.description()}`);
66
87
  lines.push('');
67
88
  // Usage
68
89
  lines.push(`${chalk.bold('Usage:')} ${chalk.yellow(helper.commandUsage(target))}`);
@@ -94,13 +115,6 @@ export function configureStyledHelp(cmd, appVersion) {
94
115
  }
95
116
  lines.push('');
96
117
  }
97
- // Footer
98
- if (isRoot) {
99
- lines.push(chalk.dim('Run ') +
100
- chalk.yellow('godot-cli <command> --help') +
101
- chalk.dim(' for detailed usage of each command.'));
102
- lines.push('');
103
- }
104
118
  return lines.join('\n');
105
119
  },
106
120
  });
@@ -112,10 +126,10 @@ export function configureStyledHelp(cmd, appVersion) {
112
126
  */
113
127
  export function success(msg) {
114
128
  if (isTTY()) {
115
- console.log(`${chalk.green('✔')} ${msg}`);
129
+ out(`${chalk.green('✔')} ${msg}`);
116
130
  }
117
131
  else {
118
- console.log(`SUCCESS: ${msg}`);
132
+ out(`SUCCESS: ${msg}`);
119
133
  }
120
134
  }
121
135
  /**
@@ -124,10 +138,10 @@ export function success(msg) {
124
138
  */
125
139
  export function error(msg) {
126
140
  if (isTTY()) {
127
- console.error(`${chalk.red('✖')} ${chalk.red(msg)}`);
141
+ out(`${chalk.red('✖')} ${chalk.red(msg)}`, 'error');
128
142
  }
129
143
  else {
130
- console.error(`ERROR: ${msg}`);
144
+ out(`ERROR: ${msg}`, 'error');
131
145
  }
132
146
  }
133
147
  /**
@@ -136,10 +150,10 @@ export function error(msg) {
136
150
  */
137
151
  export function info(msg) {
138
152
  if (isTTY()) {
139
- console.log(`${chalk.blue('ℹ')} ${msg}`);
153
+ out(`${chalk.blue('ℹ')} ${msg}`);
140
154
  }
141
155
  else {
142
- console.log(`INFO: ${msg}`);
156
+ out(`INFO: ${msg}`);
143
157
  }
144
158
  }
145
159
  /**
@@ -148,41 +162,41 @@ export function info(msg) {
148
162
  */
149
163
  export function warn(msg) {
150
164
  if (isTTY()) {
151
- console.log(`${chalk.yellow('⚠')} ${chalk.yellow(msg)}`);
165
+ out(`${chalk.yellow('⚠')} ${chalk.yellow(msg)}`);
152
166
  }
153
167
  else {
154
- console.log(`WARN: ${msg}`);
168
+ out(`WARN: ${msg}`);
155
169
  }
156
170
  }
157
171
  /**
158
172
  * Print a bold cyan section heading.
159
173
  */
160
174
  export function heading(msg) {
161
- console.log(`\n${chalk.bold.cyan(msg)}`);
175
+ out(`\n${chalk.bold.cyan(msg)}`);
162
176
  }
163
177
  /**
164
178
  * Print a formatted key-value label.
165
179
  */
166
180
  export function label(key, value) {
167
- console.log(` ${chalk.bold(key + ':')} ${value}`);
181
+ out(` ${chalk.bold(key + ':')} ${value}`);
168
182
  }
169
183
  /**
170
184
  * Create a no-op spinner for non-TTY environments.
171
185
  * Methods are safe to call but produce no ANSI output.
172
186
  */
173
187
  function createNoOpSpinner(text) {
174
- console.log(text);
188
+ out(text);
175
189
  const self = {
176
190
  start: () => self,
177
191
  stop: () => self,
178
192
  success: (msg) => { if (msg)
179
- console.log(`SUCCESS: ${msg}`); return self; },
193
+ out(`SUCCESS: ${msg}`); return self; },
180
194
  error: (msg) => { if (msg)
181
- console.error(`ERROR: ${msg}`); return self; },
195
+ out(`ERROR: ${msg}`, 'error'); return self; },
182
196
  warning: (msg) => { if (msg)
183
- console.log(`WARN: ${msg}`); return self; },
197
+ out(`WARN: ${msg}`); return self; },
184
198
  info: (msg) => { if (msg)
185
- console.log(`INFO: ${msg}`); return self; },
199
+ out(`INFO: ${msg}`); return self; },
186
200
  clear: () => self,
187
201
  get text() { return text; },
188
202
  set text(value) { text = value; },
@@ -227,13 +241,13 @@ export function badge(visible) {
227
241
  * Print a feature row with a styled badge and name.
228
242
  */
229
243
  export function featureRow(name, visible) {
230
- console.log(` ${badge(visible)} ${name}`);
244
+ out(` ${badge(visible)} ${name}`);
231
245
  }
232
246
  /**
233
247
  * Print a divider line.
234
248
  */
235
249
  export function divider() {
236
- console.log(chalk.dim('─'.repeat(50)));
250
+ out(chalk.dim('─'.repeat(50)));
237
251
  }
238
252
  /**
239
253
  * Interactive yes/no confirmation on the terminal (default **No**). Only call on a TTY —
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,15 @@
1
- interface UpdateInfo {
2
- current: string;
3
- latest: string;
4
- }
1
+ import { type UpdateInfo } from '@baizor/gamedev-cli-core';
2
+ export { isRunningViaNpx } from '@baizor/gamedev-cli-core';
5
3
  /** Fetch the latest version string from the npm registry. */
6
4
  export declare function fetchLatestVersion(): Promise<string>;
7
5
  /**
8
- * Check if a newer version is available on npm.
9
- * Returns update info if available, null otherwise.
10
- * Never throws — all errors are silently caught.
6
+ * Check if a newer version is available on npm (cached for a day).
7
+ * Returns update info if available, null otherwise. Never throws.
11
8
  */
12
9
  export declare function checkForUpdate(currentVersion: string): Promise<UpdateInfo | null>;
13
10
  /** Format the "update available" message with chalk styling. */
14
11
  export declare function formatUpdateAvailable(current: string, latest: string): string;
15
- /**
16
- * The exact command a user should run to update. It is printed ALONE on its own
17
- * line with nothing after it: the old wording "Run npm i -g godot-cli to update"
18
- * was copied whole from the terminal, so npm also installed the unrelated `to`
19
- * and `update` packages (the latter drags in ~630 deprecated dependencies).
20
- */
21
- export declare const UPDATE_COMMAND = "npm i -g godot-cli";
12
+ /** The exact command a user should run to update, printed ALONE on its own line (see {@link npmGlobalInstallCommand}). */
13
+ export declare const UPDATE_COMMAND: string;
22
14
  /** Print a styled update notification to stderr (does not interfere with stdout piping). */
23
15
  export declare function printUpdateNotification(current: string, latest: string): void;
24
- /** Returns true if the CLI was likely invoked via npx. */
25
- export declare function isRunningViaNpx(): boolean;
26
- export {};
@@ -1,88 +1,27 @@
1
1
  import { homedir } from 'os';
2
2
  import { join } from 'path';
3
- import { readFileSync, writeFileSync } from 'fs';
4
3
  import chalk from 'chalk';
5
- import { isNewerVersion, isValidVersion } from './semver.js';
4
+ import { checkForNpmUpdate, fetchLatestNpmVersion, npmGlobalInstallCommand } from '@baizor/gamedev-cli-core';
5
+ export { isRunningViaNpx } from '@baizor/gamedev-cli-core';
6
6
  const PACKAGE_NAME = 'godot-cli';
7
- const NPM_REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;
8
7
  const CACHE_FILE = join(homedir(), '.godot-cli-update.json');
9
- const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
10
- const FETCH_TIMEOUT_MS = 3000;
11
8
  /** Fetch the latest version string from the npm registry. */
12
- export async function fetchLatestVersion() {
13
- const response = await fetch(NPM_REGISTRY_URL, {
14
- signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
15
- headers: { 'Accept': 'application/json' },
16
- });
17
- if (!response.ok) {
18
- throw new Error(`npm registry returned ${response.status}`);
19
- }
20
- const data = (await response.json());
21
- if (!data.version) {
22
- throw new Error('No version field in registry response');
23
- }
24
- return data.version;
25
- }
26
- function readCache() {
27
- try {
28
- const raw = readFileSync(CACHE_FILE, 'utf-8');
29
- const parsed = JSON.parse(raw);
30
- if (parsed.latestVersion && typeof parsed.lastChecked === 'number' && isValidVersion(parsed.latestVersion)) {
31
- return parsed;
32
- }
33
- }
34
- catch {
35
- // Cache missing or corrupt — ignore
36
- }
37
- return null;
38
- }
39
- function writeCache(latestVersion) {
40
- try {
41
- const data = { latestVersion, lastChecked: Date.now() };
42
- writeFileSync(CACHE_FILE, JSON.stringify(data), 'utf-8');
43
- }
44
- catch {
45
- // Non-critical — ignore write failures
46
- }
9
+ export function fetchLatestVersion() {
10
+ return fetchLatestNpmVersion(PACKAGE_NAME);
47
11
  }
48
12
  /**
49
- * Check if a newer version is available on npm.
50
- * Returns update info if available, null otherwise.
51
- * Never throws — all errors are silently caught.
13
+ * Check if a newer version is available on npm (cached for a day).
14
+ * Returns update info if available, null otherwise. Never throws.
52
15
  */
53
- export async function checkForUpdate(currentVersion) {
54
- try {
55
- // Check cache first
56
- const cache = readCache();
57
- if (cache && Date.now() - cache.lastChecked < CACHE_TTL_MS) {
58
- if (isNewerVersion(currentVersion, cache.latestVersion)) {
59
- return { current: currentVersion, latest: cache.latestVersion };
60
- }
61
- return null;
62
- }
63
- // Fetch fresh
64
- const latest = await fetchLatestVersion();
65
- writeCache(latest);
66
- if (isNewerVersion(currentVersion, latest)) {
67
- return { current: currentVersion, latest };
68
- }
69
- }
70
- catch {
71
- // Best-effort — never disrupt CLI usage
72
- }
73
- return null;
16
+ export function checkForUpdate(currentVersion) {
17
+ return checkForNpmUpdate(currentVersion, { packageName: PACKAGE_NAME, cacheFile: CACHE_FILE });
74
18
  }
75
19
  /** Format the "update available" message with chalk styling. */
76
20
  export function formatUpdateAvailable(current, latest) {
77
21
  return `Update available: ${chalk.dim(current)} → ${chalk.green(latest)}`;
78
22
  }
79
- /**
80
- * The exact command a user should run to update. It is printed ALONE on its own
81
- * line with nothing after it: the old wording "Run npm i -g godot-cli to update"
82
- * was copied whole from the terminal, so npm also installed the unrelated `to`
83
- * and `update` packages (the latter drags in ~630 deprecated dependencies).
84
- */
85
- export const UPDATE_COMMAND = `npm i -g ${PACKAGE_NAME}`;
23
+ /** The exact command a user should run to update, printed ALONE on its own line (see {@link npmGlobalInstallCommand}). */
24
+ export const UPDATE_COMMAND = npmGlobalInstallCommand(PACKAGE_NAME);
86
25
  /** Print a styled update notification to stderr (does not interfere with stdout piping). */
87
26
  export function printUpdateNotification(current, latest) {
88
27
  console.error();
@@ -90,10 +29,4 @@ export function printUpdateNotification(current, latest) {
90
29
  console.error(` ${chalk.cyan(UPDATE_COMMAND)}`);
91
30
  console.error();
92
31
  }
93
- /** Returns true if the CLI was likely invoked via npx. */
94
- export function isRunningViaNpx() {
95
- const execPath = process.env['npm_execpath'] ?? '';
96
- const npmCommand = process.env['npm_command'] ?? '';
97
- return execPath.includes('npx') || npmCommand === 'exec';
98
- }
99
32
  //# sourceMappingURL=update-check.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/utils/update-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/utils/update-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,uBAAuB,EAAmB,MAAM,0BAA0B,CAAC;AAE9H,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,YAAY,GAAG,WAAW,CAAC;AACjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAE7D,6DAA6D;AAC7D,MAAM,UAAU,kBAAkB;IAChC,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,cAAsB;IACnD,OAAO,iBAAiB,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;AACjG,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,MAAc;IACnE,OAAO,qBAAqB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,0HAA0H;AAC1H,MAAM,CAAC,MAAM,cAAc,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;AAEpE,4FAA4F;AAC5F,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,MAAc;IACrE,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC5F,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "godot-cli",
3
- "version": "0.37.0",
3
+ "version": "0.39.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",
@@ -62,7 +62,7 @@
62
62
  "node": "^20.19.0 || >=22.12.0"
63
63
  },
64
64
  "dependencies": {
65
- "@baizor/gamedev-cli-core": "^0.8.0",
65
+ "@baizor/gamedev-cli-core": "^0.11.1",
66
66
  "chalk": "^5.6.2",
67
67
  "commander": "^13.1.0",
68
68
  "yocto-spinner": "^1.1.0"
@@ -1,25 +0,0 @@
1
- /**
2
- * Robust JSON parsing with detailed error reporting.
3
- *
4
- * 1. Try to parse the raw string as JSON.
5
- * 2. If invalid, report the exact position where parsing fails.
6
- */
7
- export interface JsonParseResult {
8
- readonly value: unknown;
9
- readonly raw: string;
10
- readonly wasStringified: boolean;
11
- }
12
- export declare class JsonParseError extends Error {
13
- readonly position: number;
14
- readonly snippet: string;
15
- constructor(message: string, position: number, snippet: string);
16
- }
17
- /**
18
- * Parse a string as strict JSON. Throws {@link JsonParseError} with
19
- * position and snippet on failure.
20
- *
21
- * @param input The raw string to parse as JSON.
22
- * @returns A result containing the parsed value.
23
- * @throws {@link JsonParseError} with position and snippet on failure.
24
- */
25
- export declare function parseJsonStrict(input: string): JsonParseResult;
@@ -1,83 +0,0 @@
1
- export class JsonParseError extends Error {
2
- constructor(message, position, snippet) {
3
- super(message);
4
- this.name = 'JsonParseError';
5
- this.position = position;
6
- this.snippet = snippet;
7
- }
8
- }
9
- /**
10
- * Extract the error position from a JSON.parse SyntaxError message.
11
- * Common formats:
12
- * - "... at position 42" (V8 / Node)
13
- * - "... at line 3 column 5" (some engines)
14
- * - "Unexpected token X in JSON at position 42"
15
- */
16
- function extractErrorPosition(error, input) {
17
- const msg = error.message;
18
- const posMatch = msg.match(/position\s+(\d+)/i);
19
- if (posMatch) {
20
- return parseInt(posMatch[1], 10);
21
- }
22
- const lineColMatch = msg.match(/line\s+(\d+)\s+column\s+(\d+)/i);
23
- if (lineColMatch) {
24
- const targetLine = parseInt(lineColMatch[1], 10);
25
- const targetCol = parseInt(lineColMatch[2], 10);
26
- const lines = input.split('\n');
27
- let offset = 0;
28
- for (let i = 0; i < targetLine - 1 && i < lines.length; i++) {
29
- offset += lines[i].length + 1; // +1 for newline
30
- }
31
- return offset + targetCol - 1;
32
- }
33
- return -1;
34
- }
35
- /**
36
- * Build a human-readable snippet around the error position.
37
- */
38
- function buildSnippet(input, position) {
39
- if (position < 0 || position > input.length) {
40
- return input.length <= 80 ? input : input.slice(0, 80) + '...';
41
- }
42
- const contextBefore = 20;
43
- const contextAfter = 20;
44
- const start = Math.max(0, position - contextBefore);
45
- const end = Math.min(input.length, position + contextAfter);
46
- const before = (start > 0 ? '...' : '') + input.slice(start, position);
47
- const errorChar = position < input.length ? input[position] : '<end>';
48
- const after = input.slice(position + 1, end) + (end < input.length ? '...' : '');
49
- const pointer = ' '.repeat(before.length) + '^';
50
- return `${before}${errorChar}${after}\n${pointer}`;
51
- }
52
- /**
53
- * Build a detailed error message for a JSON parse failure.
54
- */
55
- function buildDetailedError(input, error) {
56
- const position = extractErrorPosition(error, input);
57
- const snippet = buildSnippet(input, position);
58
- const posInfo = position >= 0 ? ` at position ${position}` : '';
59
- const message = `Invalid JSON${posInfo}: ${error.message}\n\n` +
60
- ` ${snippet.split('\n').join('\n ')}\n`;
61
- return new JsonParseError(message, position, snippet);
62
- }
63
- /**
64
- * Parse a string as strict JSON. Throws {@link JsonParseError} with
65
- * position and snippet on failure.
66
- *
67
- * @param input The raw string to parse as JSON.
68
- * @returns A result containing the parsed value.
69
- * @throws {@link JsonParseError} with position and snippet on failure.
70
- */
71
- export function parseJsonStrict(input) {
72
- try {
73
- const value = JSON.parse(input);
74
- return { value, raw: input, wasStringified: false };
75
- }
76
- catch (error) {
77
- if (error instanceof SyntaxError) {
78
- throw buildDetailedError(input, error);
79
- }
80
- throw error;
81
- }
82
- }
83
- //# sourceMappingURL=json-parse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-parse.js","sourceRoot":"","sources":["../../src/utils/json-parse.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- /** Returns true if the string is a valid numeric semver (e.g. "1.2.3"). */
2
- export declare function isValidVersion(version: string): boolean;
3
- /** Returns true if `latest` is strictly greater than `current`. */
4
- export declare function isNewerVersion(current: string, latest: string): boolean;
@@ -1,25 +0,0 @@
1
- const SEMVER_NUMERIC = /^\d+(\.\d+)*$/;
2
- /** Returns true if the string is a valid numeric semver (e.g. "1.2.3"). */
3
- export function isValidVersion(version) {
4
- return SEMVER_NUMERIC.test(version);
5
- }
6
- /** Returns -1 if a < b, 0 if equal, 1 if a > b. */
7
- function compareVersions(a, b) {
8
- const pa = a.split('.').map(Number);
9
- const pb = b.split('.').map(Number);
10
- const len = Math.max(pa.length, pb.length);
11
- for (let i = 0; i < len; i++) {
12
- const na = pa[i] ?? 0;
13
- const nb = pb[i] ?? 0;
14
- if (na < nb)
15
- return -1;
16
- if (na > nb)
17
- return 1;
18
- }
19
- return 0;
20
- }
21
- /** Returns true if `latest` is strictly greater than `current`. */
22
- export function isNewerVersion(current, latest) {
23
- return compareVersions(current, latest) < 0;
24
- }
25
- //# sourceMappingURL=semver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"semver.js","sourceRoot":"","sources":["../../src/utils/semver.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,eAAe,CAAC;AAEvC,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,mDAAmD;AACnD,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS;IAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,CAAC,CAAC,CAAC;QACvB,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,MAAc;IAC5D,OAAO,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9C,CAAC"}