godot-cli 0.38.0 → 0.39.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +105 -0
- package/README.md +139 -16
- package/dist/cli.d.ts +7 -0
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/check.d.ts +2 -0
- package/dist/commands/check.js +48 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/close.d.ts +3 -0
- package/dist/commands/close.js +82 -27
- package/dist/commands/close.js.map +1 -1
- package/dist/commands/commands.d.ts +3 -0
- package/dist/commands/commands.js +28 -0
- package/dist/commands/commands.js.map +1 -0
- package/dist/commands/exec.js +43 -28
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/export.d.ts +2 -0
- package/dist/commands/export.js +45 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/headless-common.d.ts +29 -0
- package/dist/commands/headless-common.js +69 -0
- package/dist/commands/headless-common.js.map +1 -0
- package/dist/commands/import.d.ts +2 -0
- package/dist/commands/import.js +32 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/install-plugin.js.map +1 -1
- package/dist/commands/open.js +38 -6
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/rql.d.ts +2 -0
- package/dist/commands/rql.js +81 -0
- package/dist/commands/rql.js.map +1 -0
- package/dist/commands/run-script.d.ts +2 -0
- package/dist/commands/run-script.js +33 -0
- package/dist/commands/run-script.js.map +1 -0
- package/dist/commands/run-system-tool.js +0 -1
- package/dist/commands/run-system-tool.js.map +1 -1
- package/dist/commands/run-tool-builder.d.ts +38 -4
- package/dist/commands/run-tool-builder.js +179 -56
- package/dist/commands/run-tool-builder.js.map +1 -1
- package/dist/commands/run-tool.js +0 -1
- package/dist/commands/run-tool.js.map +1 -1
- package/dist/commands/setup-skills.js +3 -2
- package/dist/commands/setup-skills.js.map +1 -1
- package/dist/commands/status.js +25 -19
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/test.d.ts +5 -0
- package/dist/commands/test.js +111 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/tools.d.ts +2 -0
- package/dist/commands/tools.js +120 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/update.js +1 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/wait-for-ready.js +18 -20
- package/dist/commands/wait-for-ready.js.map +1 -1
- package/dist/index.js +48 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/build.d.ts +1 -1
- package/dist/lib/build.js +21 -4
- package/dist/lib/build.js.map +1 -1
- package/dist/lib/check.d.ts +44 -0
- package/dist/lib/check.js +191 -0
- package/dist/lib/check.js.map +1 -0
- package/dist/lib/cli-guide.d.ts +26 -0
- package/dist/lib/cli-guide.js +51 -0
- package/dist/lib/cli-guide.js.map +1 -0
- package/dist/lib/configure-agent.js.map +1 -1
- package/dist/lib/exec.d.ts +19 -0
- package/dist/lib/exec.js +61 -10
- package/dist/lib/exec.js.map +1 -1
- package/dist/lib/export-project.d.ts +41 -0
- package/dist/lib/export-project.js +159 -0
- package/dist/lib/export-project.js.map +1 -0
- package/dist/lib/godot-log.d.ts +38 -0
- package/dist/lib/godot-log.js +145 -0
- package/dist/lib/godot-log.js.map +1 -0
- package/dist/lib/godot-run.d.ts +34 -0
- package/dist/lib/godot-run.js +113 -0
- package/dist/lib/godot-run.js.map +1 -0
- package/dist/lib/headless.d.ts +82 -0
- package/dist/lib/headless.js +117 -0
- package/dist/lib/headless.js.map +1 -0
- package/dist/lib/import-project.d.ts +9 -0
- package/dist/lib/import-project.js +15 -0
- package/dist/lib/import-project.js.map +1 -0
- package/dist/lib/install-server.js.map +1 -1
- package/dist/lib/junit.d.ts +36 -0
- package/dist/lib/junit.js +146 -0
- package/dist/lib/junit.js.map +1 -0
- package/dist/lib/list-tools.d.ts +51 -0
- package/dist/lib/list-tools.js +147 -0
- package/dist/lib/list-tools.js.map +1 -0
- package/dist/lib/open.js +3 -1
- package/dist/lib/open.js.map +1 -1
- package/dist/lib/progress.d.ts +1 -7
- package/dist/lib/progress.js +2 -15
- package/dist/lib/progress.js.map +1 -1
- package/dist/lib/rql.d.ts +32 -0
- package/dist/lib/rql.js +105 -0
- package/dist/lib/rql.js.map +1 -0
- package/dist/lib/run-script.d.ts +23 -0
- package/dist/lib/run-script.js +43 -0
- package/dist/lib/run-script.js.map +1 -0
- package/dist/lib/run-tests.d.ts +50 -0
- package/dist/lib/run-tests.js +181 -0
- package/dist/lib/run-tests.js.map +1 -0
- package/dist/lib/run-tool.js +6 -22
- package/dist/lib/run-tool.js.map +1 -1
- package/dist/lib/session.d.ts +8 -1
- package/dist/lib/session.js +36 -4
- package/dist/lib/session.js.map +1 -1
- package/dist/lib/setup-skills.d.ts +8 -13
- package/dist/lib/setup-skills.js +27 -24
- package/dist/lib/setup-skills.js.map +1 -1
- package/dist/lib/types.d.ts +7 -0
- package/dist/lib/update-project.js +1 -1
- package/dist/lib/update-project.js.map +1 -1
- package/dist/lib.d.ts +16 -0
- package/dist/lib.js +10 -0
- package/dist/lib.js.map +1 -1
- package/dist/utils/addon-deps.js +2 -2
- package/dist/utils/agents.d.ts +2 -6
- package/dist/utils/agents.js.map +1 -1
- package/dist/utils/cloud-login.js.map +1 -1
- package/dist/utils/connection.d.ts +59 -0
- package/dist/utils/connection.js +11 -10
- package/dist/utils/connection.js.map +1 -1
- package/dist/utils/csproj-deps.js +1 -1
- package/dist/utils/csproj-deps.js.map +1 -1
- package/dist/utils/editor-connection.d.ts +74 -0
- package/dist/utils/editor-connection.js +225 -0
- package/dist/utils/editor-connection.js.map +1 -0
- package/dist/utils/editor-mcp-server.d.ts +32 -0
- package/dist/utils/editor-mcp-server.js +134 -0
- package/dist/utils/editor-mcp-server.js.map +1 -0
- package/dist/utils/exit-codes.d.ts +2 -0
- package/dist/utils/exit-codes.js +4 -0
- package/dist/utils/exit-codes.js.map +1 -0
- package/dist/utils/extensions-catalog.js.map +1 -1
- package/dist/utils/godot-editor.d.ts +1 -1
- package/dist/utils/godot-editor.js.map +1 -1
- package/dist/utils/godot-process.d.ts +5 -0
- package/dist/utils/godot-process.js +16 -0
- package/dist/utils/godot-process.js.map +1 -1
- package/dist/utils/godot-shutdown.d.ts +3 -1
- package/dist/utils/godot-shutdown.js +4 -2
- package/dist/utils/godot-shutdown.js.map +1 -1
- package/dist/utils/input.d.ts +3 -3
- package/dist/utils/input.js +22 -35
- package/dist/utils/input.js.map +1 -1
- package/dist/utils/machine-store.js.map +1 -1
- package/dist/utils/output.d.ts +45 -0
- package/dist/utils/output.js +101 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/project-godot.js.map +1 -1
- package/dist/utils/server-source.d.ts +1 -1
- package/dist/utils/server-source.js +1 -1
- package/dist/utils/server-source.js.map +1 -1
- package/dist/utils/skill-guides.d.ts +8 -11
- package/dist/utils/skill-guides.js +100 -43
- package/dist/utils/skill-guides.js.map +1 -1
- package/dist/utils/skills.d.ts +1 -14
- package/dist/utils/skills.js +0 -89
- package/dist/utils/skills.js.map +1 -1
- package/dist/utils/ui.d.ts +6 -1
- package/dist/utils/ui.js +72 -58
- package/dist/utils/ui.js.map +1 -1
- package/dist/utils/update-check.d.ts +6 -17
- package/dist/utils/update-check.js +10 -77
- package/dist/utils/update-check.js.map +1 -1
- package/package.json +9 -9
- package/dist/utils/json-parse.d.ts +0 -25
- package/dist/utils/json-parse.js +0 -83
- package/dist/utils/json-parse.js.map +0 -1
- package/dist/utils/semver.d.ts +0 -4
- package/dist/utils/semver.js +0 -25
- package/dist/utils/semver.js.map +0 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { DEFAULT_SESSION_READY_TIMEOUT_MS } from '@baizor/gamedev-cli-core';
|
|
3
|
+
import * as ui from '../utils/ui.js';
|
|
4
|
+
import { verbose } from '../utils/ui.js';
|
|
5
|
+
import { isGodotProject, resolveAndValidateProjectPath } from '../utils/connection.js';
|
|
6
|
+
import { connectionForCommand } from '../utils/editor-connection.js';
|
|
7
|
+
import { isLocalhostUrl } from '../utils/project-marker.js';
|
|
8
|
+
import { ExitCode } from '../utils/exit-codes.js';
|
|
9
|
+
import { CommandOutput, addFormatOption, parseFormat, parseIntFlag } from '../utils/output.js';
|
|
10
|
+
import { ensureEditor } from '../lib/session.js';
|
|
11
|
+
import { exampleCall, listToolsLive, offlineTools, readToolsCache, writeToolsCache, } from '../lib/list-tools.js';
|
|
12
|
+
import { ensureFailureExit } from './run-tool-builder.js';
|
|
13
|
+
function firstSentence(text) {
|
|
14
|
+
const line = text.split(/\r?\n/)[0] ?? '';
|
|
15
|
+
const m = /^(.{20,}?[.!?])\s/.exec(line + ' ');
|
|
16
|
+
return (m ? m[1] : line).slice(0, 160);
|
|
17
|
+
}
|
|
18
|
+
export const toolsCommand = addFormatOption(new Command('tools')
|
|
19
|
+
.description("List the editor's AI tools (run them with run-tool), or show one tool's arguments and an example call")
|
|
20
|
+
.argument('[name]', 'A tool name: show its description, input schema and an example run-tool call')
|
|
21
|
+
.option('--path <path>', 'Godot project path (default: current directory)')
|
|
22
|
+
.option('--refresh', 'Ask the editor again instead of using the cached list')
|
|
23
|
+
.option('--no-start', 'Do not start a headless editor to ask it (use the cache or the built-in list)')
|
|
24
|
+
.option('--editor-path <path>', 'Godot editor executable for a started editor')
|
|
25
|
+
.option('--ready-timeout <ms>', 'How long to wait for a started editor to become ready', String(DEFAULT_SESSION_READY_TIMEOUT_MS))
|
|
26
|
+
.option('--url <url>', 'MCP server base URL (default: the project\'s connection)')
|
|
27
|
+
.option('--token <token>', 'Bearer token')).action(async (name, options) => {
|
|
28
|
+
const output = new CommandOutput('tools', parseFormat(options.format));
|
|
29
|
+
const readyTimeoutMs = parseIntFlag(options.readyTimeout, '--ready-timeout');
|
|
30
|
+
const projectPath = resolveAndValidateProjectPath(undefined, options);
|
|
31
|
+
const conn = await connectionForCommand(output, projectPath, options);
|
|
32
|
+
// The project's own cache only: written for this project's local server, never for an explicit --url or the hub.
|
|
33
|
+
const cacheable = !options.url && !conn.cloud && isGodotProject(projectPath);
|
|
34
|
+
const cached = cacheable ? readToolsCache(projectPath) : undefined;
|
|
35
|
+
const cache = cached && cached.url === conn.url ? cached : undefined;
|
|
36
|
+
let tools;
|
|
37
|
+
let source = 'editor';
|
|
38
|
+
// A running editor is asked first (the list changes when tools are added); the cache serves a closed editor.
|
|
39
|
+
let live = await listToolsLive(conn.url, conn.token, 5000);
|
|
40
|
+
if (live.kind === 'failure' && cache && !options.refresh) {
|
|
41
|
+
tools = cache.tools;
|
|
42
|
+
source = 'cache';
|
|
43
|
+
verbose(`Using ${cache.tools.length} cached tools from ${cache.fetchedAt}`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
const canStart = options.start !== false && !conn.cloud && isLocalhostUrl(conn.url) && isGodotProject(projectPath);
|
|
47
|
+
if (live.kind === 'failure' && live.reason === 'unreachable' && canStart) {
|
|
48
|
+
output.progress('No editor answered; starting a headless editor to list its tools...');
|
|
49
|
+
const editor = await ensureEditor({
|
|
50
|
+
projectPath,
|
|
51
|
+
url: conn.url,
|
|
52
|
+
...(conn.token ? { token: conn.token } : {}),
|
|
53
|
+
...(options.editorPath ? { editorPath: options.editorPath } : {}),
|
|
54
|
+
readyTimeoutMs,
|
|
55
|
+
onStatus: (m) => output.progress(m),
|
|
56
|
+
});
|
|
57
|
+
if (editor.kind === 'failure') {
|
|
58
|
+
const mapped = ensureFailureExit(editor);
|
|
59
|
+
return output.fail(mapped.exitCode, mapped.code, `Could not start an editor: ${editor.message}`);
|
|
60
|
+
}
|
|
61
|
+
live = await listToolsLive(editor.ensured.ready, conn.token);
|
|
62
|
+
}
|
|
63
|
+
if (live.kind === 'success') {
|
|
64
|
+
tools = live.tools;
|
|
65
|
+
if (cacheable)
|
|
66
|
+
writeToolsCache(projectPath, conn.url, live.tools);
|
|
67
|
+
}
|
|
68
|
+
else if (cache) {
|
|
69
|
+
output.warn(`${live.message} Showing the cached list from ${cache.fetchedAt}.`);
|
|
70
|
+
tools = cache.tools;
|
|
71
|
+
source = 'cache';
|
|
72
|
+
}
|
|
73
|
+
else if (live.reason === 'dropped') {
|
|
74
|
+
// A server answered and dropped the connection: exit 7 UNREACHABLE (as run-tool and the other CLIs), not the
|
|
75
|
+
// offline list, which stands in for an editor that is not running.
|
|
76
|
+
return output.fail(ExitCode.Unreachable, 'UNREACHABLE', live.message);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
output.warn(`${live.message} Showing the built-in list (no input schemas); run \`godot-cli tools --refresh\` with an editor running for the full list.`);
|
|
80
|
+
tools = offlineTools();
|
|
81
|
+
source = 'built-in';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (name !== undefined) {
|
|
85
|
+
const tool = tools.find((t) => t.name === name);
|
|
86
|
+
if (!tool) {
|
|
87
|
+
const near = tools.filter((t) => t.name.includes(name) || name.includes(t.name.split('-')[0])).map((t) => t.name).slice(0, 8);
|
|
88
|
+
return output.fail(ExitCode.Usage, 'NOT_FOUND', `No tool named "${name}".${near.length > 0 ? ` Did you mean: ${near.join(', ')}?` : ''} Run \`godot-cli tools\` for the list.`);
|
|
89
|
+
}
|
|
90
|
+
const example = tool.inputSchema ? exampleCall(tool) : `godot-cli run-tool ${tool.name} --input '{}'`;
|
|
91
|
+
if (!output.machine) {
|
|
92
|
+
ui.heading(tool.name);
|
|
93
|
+
console.log(tool.description);
|
|
94
|
+
const props = tool.inputSchema?.properties ?? {};
|
|
95
|
+
const required = new Set(tool.inputSchema?.required ?? []);
|
|
96
|
+
if (Object.keys(props).length > 0) {
|
|
97
|
+
ui.heading('Arguments');
|
|
98
|
+
for (const [key, p] of Object.entries(props)) {
|
|
99
|
+
const type = Array.isArray(p.type) ? p.type.join('|') : p.type ?? 'any';
|
|
100
|
+
console.log(` ${key}${required.has(key) ? '' : '?'}: ${type}${p.description ? ` — ${p.description}` : ''}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else if (source === 'built-in') {
|
|
104
|
+
ui.info('Argument schema unavailable without a running editor (run with --refresh while one runs).');
|
|
105
|
+
}
|
|
106
|
+
ui.heading('Example');
|
|
107
|
+
console.log(` ${example}`);
|
|
108
|
+
console.log(' (complex arguments: put the JSON in a file and pass --input-file <file>)');
|
|
109
|
+
}
|
|
110
|
+
return output.finish(ExitCode.Success, { source, tool, example });
|
|
111
|
+
}
|
|
112
|
+
if (!output.machine) {
|
|
113
|
+
for (const t of tools)
|
|
114
|
+
console.log(`${t.name.padEnd(28)} ${firstSentence(t.description)}`);
|
|
115
|
+
console.log('');
|
|
116
|
+
console.log(`${tools.length} tools (${source}). Details and an example call: godot-cli tools <name>. Run one: godot-cli run-tool <name> --input '{...}'.`);
|
|
117
|
+
}
|
|
118
|
+
return output.finish(ExitCode.Success, { source, tools: tools.map((t) => ({ name: t.name, description: t.description })) });
|
|
119
|
+
});
|
|
120
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/update.js
CHANGED
|
@@ -5,7 +5,7 @@ import { requireGodotProject } from '../lib/validation.js';
|
|
|
5
5
|
import { findGodotProjectRoot, updateProject } from '../lib/update-project.js';
|
|
6
6
|
import * as ui from '../utils/ui.js';
|
|
7
7
|
import { fetchLatestVersion, formatUpdateAvailable, isRunningViaNpx } from '../utils/update-check.js';
|
|
8
|
-
import { isNewerVersion } from '
|
|
8
|
+
import { isNewerVersion } from '@baizor/gamedev-cli-core';
|
|
9
9
|
const PACKAGE_NAME = 'godot-cli';
|
|
10
10
|
/** Exit 2 with `--check`: something is outdated (distinct from exit 1 = error). */
|
|
11
11
|
const EXIT_OUTDATED = 2;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAA0B,MAAM,0BAA0B,CAAC;AACvG,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,27 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import * as ui from '../utils/ui.js';
|
|
3
3
|
import { verbose } from '../utils/ui.js';
|
|
4
|
-
import { resolveAndValidateProjectPath
|
|
4
|
+
import { resolveAndValidateProjectPath } from '../utils/connection.js';
|
|
5
|
+
import { connectionForCommand } from '../utils/editor-connection.js';
|
|
5
6
|
import { probe } from '../utils/probe.js';
|
|
7
|
+
import { ExitCode } from '../utils/exit-codes.js';
|
|
8
|
+
import { CommandOutput, addFormatOption, parseFormat, parseIntFlag } from '../utils/output.js';
|
|
6
9
|
const MAX_PROBE_TIMEOUT_MS = 10000;
|
|
7
|
-
export const waitForReadyCommand = new Command('wait-for-ready')
|
|
10
|
+
export const waitForReadyCommand = addFormatOption(new Command('wait-for-ready')
|
|
8
11
|
.description('Wait until the Godot editor and MCP server are ready to accept tool calls')
|
|
9
12
|
.argument('[path]', 'Godot project path (validated when --url is omitted)')
|
|
10
13
|
.option('--path <path>', 'Godot project path')
|
|
11
14
|
.option('--url <url>', 'MCP server base URL (defaults to GODOT_MCP_HOST/cloud)')
|
|
12
15
|
.option('--token <token>', 'Bearer token override (defaults to GODOT_MCP_TOKEN)')
|
|
13
16
|
.option('--timeout <ms>', 'Maximum time to wait in milliseconds (default: 120000)', '120000')
|
|
14
|
-
.option('--interval <ms>', 'Polling interval in milliseconds (default: 3000)', '3000')
|
|
15
|
-
|
|
17
|
+
.option('--interval <ms>', 'Polling interval in milliseconds (default: 3000)', '3000')).action(async (positionalPath, options) => {
|
|
18
|
+
const output = new CommandOutput('wait-for-ready', parseFormat(options.format));
|
|
19
|
+
const timeoutMs = parseIntFlag(options.timeout, '--timeout');
|
|
20
|
+
const intervalMs = parseIntFlag(options.interval, '--interval');
|
|
16
21
|
const projectPath = resolveAndValidateProjectPath(positionalPath, options);
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
21
|
-
ui.error(`Invalid --timeout value: "${options.timeout}". Must be a positive integer (milliseconds).`);
|
|
22
|
-
process.exit(1);
|
|
23
|
-
}
|
|
24
|
-
if (!Number.isFinite(intervalMs) || intervalMs <= 0) {
|
|
25
|
-
ui.error(`Invalid --interval value: "${options.interval}". Must be a positive integer (milliseconds).`);
|
|
26
|
-
process.exit(1);
|
|
27
|
-
}
|
|
22
|
+
// The server the project's editor serves: its mode decides (Cloud with the sign-in; never signed in: the local one).
|
|
23
|
+
const conn = await connectionForCommand(output, projectPath, options);
|
|
24
|
+
const { url: serverUrl, token } = conn;
|
|
28
25
|
const headers = { 'Content-Type': 'application/json' };
|
|
29
26
|
if (token) {
|
|
30
27
|
headers['Authorization'] = `Bearer ${token}`;
|
|
@@ -36,17 +33,18 @@ export const waitForReadyCommand = new Command('wait-for-ready')
|
|
|
36
33
|
while (true) {
|
|
37
34
|
const elapsed = Date.now() - startTime;
|
|
38
35
|
if (elapsed >= timeoutMs) {
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
const message = `Timed out after ${(timeoutMs / 1000).toFixed(1)}s waiting for MCP server`;
|
|
37
|
+
spinner.error(message);
|
|
38
|
+
output.finish(ExitCode.Timeout, { url: serverUrl, ready: false, elapsedMs: elapsed }, [{ code: 'TIMEOUT', message }]);
|
|
41
39
|
}
|
|
42
40
|
const remaining = Math.ceil((timeoutMs - elapsed) / 1000);
|
|
43
41
|
spinner.text = `Waiting for Godot editor and MCP server... (${remaining}s remaining)`;
|
|
44
42
|
const probeTimeout = Math.min(intervalMs, MAX_PROBE_TIMEOUT_MS);
|
|
45
43
|
const result = await probe(serverUrl, headers, probeTimeout);
|
|
46
44
|
if (result.ok) {
|
|
47
|
-
const
|
|
48
|
-
spinner.success(`MCP server is ready at ${result.baseUrl} (connected in ${
|
|
49
|
-
|
|
45
|
+
const elapsedMs = Date.now() - startTime;
|
|
46
|
+
spinner.success(`MCP server is ready at ${result.baseUrl} (connected in ${(elapsedMs / 1000).toFixed(1)}s)`);
|
|
47
|
+
output.finish(ExitCode.Success, { url: result.baseUrl, ready: true, elapsedMs });
|
|
50
48
|
}
|
|
51
49
|
const remainingMs = timeoutMs - (Date.now() - startTime);
|
|
52
50
|
if (remainingMs <= 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait-for-ready.js","sourceRoot":"","sources":["../../src/commands/wait-for-ready.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAE,
|
|
1
|
+
{"version":3,"file":"wait-for-ready.js","sourceRoot":"","sources":["../../src/commands/wait-for-ready.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { classifyCliError, writeFailureEnvelope } from '@baizor/gamedev-cli-core';
|
|
2
3
|
import { createRequire } from 'module';
|
|
3
4
|
import { buildCommand } from './commands/build.js';
|
|
4
5
|
import { loginCommand } from './commands/login.js';
|
|
5
6
|
import { openCommand } from './commands/open.js';
|
|
7
|
+
import { rqlCommand } from './commands/rql.js';
|
|
6
8
|
import { runToolCommand } from './commands/run-tool.js';
|
|
7
9
|
import { runSystemToolCommand } from './commands/run-system-tool.js';
|
|
8
10
|
import { statusCommand } from './commands/status.js';
|
|
@@ -17,6 +19,15 @@ import { installPluginCommand } from './commands/install-plugin.js';
|
|
|
17
19
|
import { installExtensionCommand } from './commands/install-extension.js';
|
|
18
20
|
import { removePluginCommand } from './commands/remove-plugin.js';
|
|
19
21
|
import { execCommand } from './commands/exec.js';
|
|
22
|
+
import { checkCommand } from './commands/check.js';
|
|
23
|
+
import { createCommandsCommand } from './commands/commands.js';
|
|
24
|
+
import { exportCommand } from './commands/export.js';
|
|
25
|
+
import { importCommand } from './commands/import.js';
|
|
26
|
+
import { runScriptCommand } from './commands/run-script.js';
|
|
27
|
+
import { testCommand } from './commands/test.js';
|
|
28
|
+
import { toolsCommand } from './commands/tools.js';
|
|
29
|
+
import { ExitCode } from './utils/exit-codes.js';
|
|
30
|
+
import { CommandExit, failActive } from './utils/output.js';
|
|
20
31
|
import { configureStyledHelp, error as uiError, setVerbose } from './utils/ui.js';
|
|
21
32
|
import { checkForUpdate, isRunningViaNpx, printUpdateNotification } from './utils/update-check.js';
|
|
22
33
|
const require = createRequire(import.meta.url);
|
|
@@ -30,29 +41,40 @@ program
|
|
|
30
41
|
// Register all subcommands
|
|
31
42
|
const subcommands = [
|
|
32
43
|
buildCommand,
|
|
44
|
+
checkCommand,
|
|
33
45
|
closeCommand,
|
|
46
|
+
createCommandsCommand(() => program, pkg.version),
|
|
34
47
|
configureCommand,
|
|
35
48
|
createProjectCommand,
|
|
36
49
|
execCommand,
|
|
50
|
+
exportCommand,
|
|
51
|
+
importCommand,
|
|
37
52
|
installPluginCommand,
|
|
38
53
|
installExtensionCommand,
|
|
39
54
|
loginCommand,
|
|
40
55
|
openCommand,
|
|
41
56
|
removePluginCommand,
|
|
57
|
+
rqlCommand,
|
|
58
|
+
runScriptCommand,
|
|
42
59
|
runToolCommand,
|
|
43
60
|
runSystemToolCommand,
|
|
44
61
|
setupMcpCommand,
|
|
45
62
|
setupSkillsCommand,
|
|
46
63
|
statusCommand,
|
|
64
|
+
testCommand,
|
|
65
|
+
toolsCommand,
|
|
47
66
|
createUpdateCommand(pkg.version),
|
|
48
67
|
waitForReadyCommand,
|
|
49
68
|
];
|
|
50
69
|
for (const cmd of subcommands) {
|
|
51
70
|
cmd.option('-v, --verbose', 'Enable verbose diagnostic output');
|
|
52
71
|
configureStyledHelp(cmd);
|
|
72
|
+
// Parse errors throw a CommanderError (handled below) instead of exiting 1.
|
|
73
|
+
cmd.exitOverride();
|
|
53
74
|
program.addCommand(cmd);
|
|
54
75
|
}
|
|
55
|
-
|
|
76
|
+
program.exitOverride();
|
|
77
|
+
// Apply styled help to root (after the subcommands: the root help names them)
|
|
56
78
|
configureStyledHelp(program, pkg.version);
|
|
57
79
|
// Wire verbose flag before any command executes
|
|
58
80
|
program.hook('preAction', (_thisCommand, actionCommand) => {
|
|
@@ -75,7 +97,30 @@ program.parseAsync()
|
|
|
75
97
|
}
|
|
76
98
|
})
|
|
77
99
|
.catch((err) => {
|
|
78
|
-
|
|
79
|
-
|
|
100
|
+
// A command finished through its output: the exit is scheduled once stdout has flushed.
|
|
101
|
+
if (err instanceof CommandExit)
|
|
102
|
+
return;
|
|
103
|
+
const failure = classifyCliError(err);
|
|
104
|
+
// --help / --version are not errors.
|
|
105
|
+
if (failure.informational)
|
|
106
|
+
process.exit(ExitCode.Success);
|
|
107
|
+
if (failure.code === 'USAGE') {
|
|
108
|
+
// Commander already printed its parse errors to stderr; machine formats also get the envelope on stdout.
|
|
109
|
+
if (!failure.printed)
|
|
110
|
+
uiError(failure.message);
|
|
111
|
+
writeFailureEnvelope(program, failure);
|
|
112
|
+
process.exit(failure.exitCode);
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
if (failActive(err))
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
catch (exit) {
|
|
119
|
+
if (exit instanceof CommandExit)
|
|
120
|
+
return;
|
|
121
|
+
throw exit;
|
|
122
|
+
}
|
|
123
|
+
uiError(failure.message);
|
|
124
|
+
process.exit(failure.exitCode);
|
|
80
125
|
});
|
|
81
126
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,KAAK,IAAI,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEnG,MAAM,OAAO,GAAG,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/build.d.ts
CHANGED
|
@@ -47,5 +47,5 @@ interface DotnetRun {
|
|
|
47
47
|
* `error` (e.g. `dotnet` not on PATH) resolves as a non-zero run rather than
|
|
48
48
|
* throwing past the boundary. `spawnImpl` is injectable for unit tests.
|
|
49
49
|
*/
|
|
50
|
-
export declare function runDotnet(bin: string, args: string[], cwd: string, spawnImpl?: typeof spawn): Promise<DotnetRun>;
|
|
50
|
+
export declare function runDotnet(bin: string, args: string[], cwd: string, spawnImpl?: typeof spawn, timeoutMs?: number): Promise<DotnetRun>;
|
|
51
51
|
export {};
|
package/dist/lib/build.js
CHANGED
|
@@ -3,6 +3,7 @@ import * as path from 'path';
|
|
|
3
3
|
import { spawn } from 'child_process';
|
|
4
4
|
import { resolveProjectPath, isGodotProjectDir } from './open.js';
|
|
5
5
|
import { emitProgress } from './progress.js';
|
|
6
|
+
import { killProcessTree } from '@baizor/gamedev-cli-core';
|
|
6
7
|
/**
|
|
7
8
|
* Locate the single consumer `.csproj` directly at the Godot project root — the
|
|
8
9
|
* `.csproj` Godot compiles every project `.cs` (addon included) into. A
|
|
@@ -98,7 +99,7 @@ export async function buildProject(options) {
|
|
|
98
99
|
csprojPath,
|
|
99
100
|
command: [dotnetBin, ...args].join(' '),
|
|
100
101
|
});
|
|
101
|
-
const run = await runDotnet(dotnetBin, args, projectPath, options.spawnImpl);
|
|
102
|
+
const run = await runDotnet(dotnetBin, args, projectPath, options.spawnImpl, options.timeoutMs);
|
|
102
103
|
if (run.code !== 0) {
|
|
103
104
|
const detail = run.output.trim();
|
|
104
105
|
throw new Error(`dotnet build failed (exit ${run.code ?? 'null'}) for ${csprojPath}.` +
|
|
@@ -138,13 +139,16 @@ export async function buildProject(options) {
|
|
|
138
139
|
* `error` (e.g. `dotnet` not on PATH) resolves as a non-zero run rather than
|
|
139
140
|
* throwing past the boundary. `spawnImpl` is injectable for unit tests.
|
|
140
141
|
*/
|
|
141
|
-
export function runDotnet(bin, args, cwd, spawnImpl = spawn) {
|
|
142
|
+
export function runDotnet(bin, args, cwd, spawnImpl = spawn, timeoutMs) {
|
|
142
143
|
return new Promise((resolve) => {
|
|
143
144
|
let settled = false;
|
|
145
|
+
let timer;
|
|
144
146
|
const finish = (run) => {
|
|
145
147
|
if (settled)
|
|
146
148
|
return;
|
|
147
149
|
settled = true;
|
|
150
|
+
if (timer)
|
|
151
|
+
clearTimeout(timer);
|
|
148
152
|
resolve(run);
|
|
149
153
|
};
|
|
150
154
|
let child;
|
|
@@ -157,6 +161,17 @@ export function runDotnet(bin, args, cwd, spawnImpl = spawn) {
|
|
|
157
161
|
return;
|
|
158
162
|
}
|
|
159
163
|
let output = '';
|
|
164
|
+
let timedOut = false;
|
|
165
|
+
// A hung restore or build: kill the whole tree (MSBuild nodes included) and fail.
|
|
166
|
+
if (timeoutMs !== undefined && timeoutMs > 0) {
|
|
167
|
+
timer = setTimeout(() => {
|
|
168
|
+
// From here the run is a timeout, even if the killed child's 'close' arrives first; it resolves only once the
|
|
169
|
+
// tree is gone, since the caller may exit right after and cut taskkill short.
|
|
170
|
+
timedOut = true;
|
|
171
|
+
const killed = child.pid !== undefined ? killProcessTree(child.pid) : Promise.resolve(true);
|
|
172
|
+
void killed.then(() => finish({ code: 124, output: `${output}\nTimed out after ${timeoutMs} ms: "${bin}" was killed.` }));
|
|
173
|
+
}, timeoutMs);
|
|
174
|
+
}
|
|
160
175
|
child.stdout?.on('data', (chunk) => {
|
|
161
176
|
output += chunk.toString();
|
|
162
177
|
});
|
|
@@ -164,10 +179,12 @@ export function runDotnet(bin, args, cwd, spawnImpl = spawn) {
|
|
|
164
179
|
output += chunk.toString();
|
|
165
180
|
});
|
|
166
181
|
child.on('error', (err) => {
|
|
167
|
-
|
|
182
|
+
if (!timedOut)
|
|
183
|
+
finish({ code: 127, output: `${output}\nFailed to run "${bin}": ${err.message}` });
|
|
168
184
|
});
|
|
169
185
|
child.on('close', (code) => {
|
|
170
|
-
|
|
186
|
+
if (!timedOut)
|
|
187
|
+
finish({ code, output });
|
|
171
188
|
});
|
|
172
189
|
});
|
|
173
190
|
}
|
package/dist/lib/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/lib/build.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,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/lib/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type Diagnostic } from './godot-log.js';
|
|
2
|
+
import { type HeadlessBaseOptions, type HeadlessResult, type HeadlessStep } from './headless.js';
|
|
3
|
+
import type { BuildProjectResult } from './types.js';
|
|
4
|
+
/** Loads every `.gd` under res:// (addons only with --include-addons) and prints one marker per failing file. */
|
|
5
|
+
export declare const CHECK_SCRIPT = "extends SceneTree\n# Written by godot-cli check. Loads every GDScript and prints a [godot-cli] marker per failure.\n\nconst MARK := \"[godot-cli] \"\nconst WARN_PREFIX := \"debug/gdscript/warnings/\"\n\nfunc _walk(dir: String, out: Array, include_addons: bool) -> void:\n\tvar d := DirAccess.open(dir)\n\tif d == null:\n\t\treturn\n\td.list_dir_begin()\n\tvar name := d.get_next()\n\twhile name != \"\":\n\t\tvar p := dir.path_join(name)\n\t\tif name.begins_with(\".\"):\n\t\t\tpass\n\t\telif d.current_is_dir() and FileAccess.file_exists(p.path_join(\".gdignore\")):\n\t\t\tpass # Godot skips a folder with a .gdignore\n\t\telif d.current_is_dir():\n\t\t\tif include_addons or p != \"res://addons\":\n\t\t\t\t_walk(p, out, include_addons)\n\t\telif name.get_extension() == \"gd\":\n\t\t\tout.append(p)\n\t\tname = d.get_next()\n\nfunc _load_ok(path: String) -> bool:\n\tvar s = ResourceLoader.load(path, \"\", ResourceLoader.CACHE_MODE_IGNORE)\n\tif s == null or not (s is Script):\n\t\treturn false\n\t# An @abstract script (4.5+) loads fine but cannot be instantiated.\n\treturn s.can_instantiate() or (s.has_method(\"is_abstract\") and s.is_abstract())\n\nfunc _init() -> void:\n\tvar args := OS.get_cmdline_user_args()\n\tvar strict := args.has(\"--strict\")\n\tvar files: Array = []\n\t_walk(\"res://\", files, args.has(\"--include-addons\"))\n\tvar clean: Array = []\n\tvar failed := 0\n\tfor f in files:\n\t\tif _load_ok(f):\n\t\t\tclean.append(f)\n\t\telse:\n\t\t\tfailed += 1\n\t\t\tprint(MARK + \"script-failed \" + f)\n\tvar warned := 0\n\tif strict and clean.size() > 0:\n\t\t# GDScript warnings only show in the script editor: raise the Warn-level ones to Error in memory (never saved).\n\t\tfor prop in ProjectSettings.get_property_list():\n\t\t\tvar n: String = prop[\"name\"]\n\t\t\tif n.begins_with(WARN_PREFIX) and typeof(ProjectSettings.get_setting(n)) == TYPE_INT and ProjectSettings.get_setting(n) == 1:\n\t\t\t\tProjectSettings.set_setting(n, 2)\n\t\tprint(MARK + \"warnings-pass\")\n\t\tfor f in clean:\n\t\t\tif not _load_ok(f):\n\t\t\t\twarned += 1\n\t\t\t\tprint(MARK + \"script-warned \" + f)\n\tprint(MARK + \"check-done files=%d failed=%d warned=%d\" % [files.size(), failed, warned])\n\tquit(1 if failed > 0 else 0)\n";
|
|
6
|
+
export interface CheckOptions extends HeadlessBaseOptions {
|
|
7
|
+
/** Warnings (GDScript, C# compiler) fail the check. */
|
|
8
|
+
strict?: boolean;
|
|
9
|
+
/** Also load the GDScript under res://addons/ (skipped by default: editor-only addon scripts do not load outside the editor). */
|
|
10
|
+
includeAddons?: boolean;
|
|
11
|
+
/** Tests. */
|
|
12
|
+
build?: (projectPath: string, timeoutMs: number) => Promise<BuildProjectResult>;
|
|
13
|
+
}
|
|
14
|
+
export interface CheckReport {
|
|
15
|
+
projectPath: string;
|
|
16
|
+
steps: HeadlessStep[];
|
|
17
|
+
/** Script and compiler diagnostics (the ones that decide the verdict). */
|
|
18
|
+
diagnostics: Diagnostic[];
|
|
19
|
+
/** Engine errors/warnings that do not decide the verdict. */
|
|
20
|
+
engineMessages: Diagnostic[];
|
|
21
|
+
/** Whether the Godot-MCP addon is enabled in the project, and whether it printed its load marker. */
|
|
22
|
+
addon: {
|
|
23
|
+
enabled: boolean;
|
|
24
|
+
loaded: boolean | null;
|
|
25
|
+
};
|
|
26
|
+
gdscript: {
|
|
27
|
+
files: number;
|
|
28
|
+
failed: number;
|
|
29
|
+
warned: number;
|
|
30
|
+
} | null;
|
|
31
|
+
csharp: {
|
|
32
|
+
built: boolean;
|
|
33
|
+
skipped: boolean;
|
|
34
|
+
} | null;
|
|
35
|
+
}
|
|
36
|
+
export type CheckResult = HeadlessResult<CheckReport>;
|
|
37
|
+
/** True when project.godot enables the Godot-MCP addon. */
|
|
38
|
+
export declare function isAddonEnabled(projectPath: string): boolean;
|
|
39
|
+
export declare function checkProject(options: CheckOptions): Promise<CheckResult>;
|
|
40
|
+
/**
|
|
41
|
+
* The diagnostics that fail a check: every error, plus with `strict` the GDScript warnings and C# compiler (CS)
|
|
42
|
+
* warnings (package and engine warnings never).
|
|
43
|
+
*/
|
|
44
|
+
export declare function failingDiagnostics(diagnostics: Diagnostic[], strict: boolean): Diagnostic[];
|