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,32 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as ui from '../utils/ui.js';
|
|
3
|
+
import { CommandOutput, addFormatOption, parseFormat } from '../utils/output.js';
|
|
4
|
+
import { importProject } from '../lib/import-project.js';
|
|
5
|
+
import { addHeadlessOptions, diagnosticErrors, finishHeadless, headlessProjectPath, headlessTimeout, printDiagnostics, printSteps, } from './headless-common.js';
|
|
6
|
+
export const importCommand = addFormatOption(addHeadlessOptions(new Command('import')
|
|
7
|
+
.description('Import the project headless (godot --headless --import); fails on import and script errors in the log')
|
|
8
|
+
.argument('[path]', 'Godot project path'), 600000)).action(async (positional, options) => {
|
|
9
|
+
const output = new CommandOutput('import', parseFormat(options.format));
|
|
10
|
+
const result = await importProject({
|
|
11
|
+
projectPath: headlessProjectPath(positional, options),
|
|
12
|
+
timeoutMs: headlessTimeout(options),
|
|
13
|
+
allowOpenProject: options.allowOpen === true,
|
|
14
|
+
...(options.editorPath ? { editorPath: options.editorPath } : {}),
|
|
15
|
+
onProgress: (m) => output.progress(m),
|
|
16
|
+
});
|
|
17
|
+
const diagnostics = result.diagnostics ?? [];
|
|
18
|
+
for (const d of diagnostics.filter((x) => x.severity === 'warning'))
|
|
19
|
+
output.warnings.push(d.message);
|
|
20
|
+
if (!output.machine) {
|
|
21
|
+
ui.heading('Godot Import');
|
|
22
|
+
if (result.projectPath)
|
|
23
|
+
ui.label('Project', result.projectPath);
|
|
24
|
+
printSteps(result.steps ?? []);
|
|
25
|
+
printDiagnostics(diagnostics.filter((d) => d.severity === 'error'));
|
|
26
|
+
}
|
|
27
|
+
const data = result.projectPath ? { projectPath: result.projectPath, diagnostics, steps: result.steps } : null;
|
|
28
|
+
finishHeadless(output, result, data, result.kind === 'failure'
|
|
29
|
+
? diagnosticErrors((d) => (d.source === 'engine' ? 'IMPORT_FAILED' : 'SCRIPT_ERRORS'), diagnostics.filter((d) => d.severity === 'error'))
|
|
30
|
+
: [], 'Imported');
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,UAAU,GAEX,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAC1C,kBAAkB,CAChB,IAAI,OAAO,CAAC,QAAQ,CAAC;KAClB,WAAW,CAAC,uGAAuG,CAAC;KACpH,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAC3C,MAAO,CACR,CACF,CAAC,MAAM,CAAC,KAAK,EAAE,UAA8B,EAAE,OAA2B,EAAE,EAAE;IAC7E,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;QACjC,WAAW,EAAE,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC;QACrD,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC;QACnC,gBAAgB,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI;QAC5C,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;KACtC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC;QAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACrG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC3B,IAAI,MAAM,CAAC,WAAW;YAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAChE,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC/B,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/G,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,SAAS;QAC5D,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;QACzI,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-plugin.js","sourceRoot":"","sources":["../../src/commands/install-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAchD,6EAA6E;AAC7E,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"install-plugin.js","sourceRoot":"","sources":["../../src/commands/install-plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/open.js
CHANGED
|
@@ -4,8 +4,10 @@ import * as ui from '../utils/ui.js';
|
|
|
4
4
|
import { verbose } from '../utils/ui.js';
|
|
5
5
|
import { openProject, resolveProjectPath as libResolveProjectPath, isGodotProjectDir as libIsGodotProjectDir, } from '../lib/open.js';
|
|
6
6
|
import { resolveOpenAuthToken, resolveSessionConnection } from '../utils/connection.js';
|
|
7
|
+
import { localEditorRefusal, localFallbackNote, resolveEditorConnection, signInState } from '../utils/editor-connection.js';
|
|
8
|
+
import { ExitCode } from '../utils/exit-codes.js';
|
|
7
9
|
import { createGodotSession, ensureEditor } from '../lib/session.js';
|
|
8
|
-
import {
|
|
10
|
+
import { parseIntFlag } from '../utils/output.js';
|
|
9
11
|
import { DEFAULT_SESSION_IDLE_SECONDS, DEFAULT_SESSION_READY_TIMEOUT_MS } from '@baizor/gamedev-cli-core';
|
|
10
12
|
import { pidSuffix } from '../lib/progress.js';
|
|
11
13
|
/**
|
|
@@ -92,6 +94,25 @@ export const openCommand = new Command('open')
|
|
|
92
94
|
verbose(`Closed the headless editor (PID ${prepared.stoppedPid})`);
|
|
93
95
|
// In Cloud mode with no explicit --token / GODOT_MCP_TOKEN, inject the
|
|
94
96
|
// token persisted by `godot-cli login` so `open --mode Cloud` auto-connects.
|
|
97
|
+
// Nothing chose the connection: follow the project's mode. A machine that never signed in to ai-game.dev gets the
|
|
98
|
+
// project's local server for this editor (in memory: the project stays in Cloud mode); a signed-in one is never
|
|
99
|
+
// switched to a local server.
|
|
100
|
+
let fallbackUrl;
|
|
101
|
+
const nothingChosen = options.connect !== false && options.url === undefined && options.mode === undefined
|
|
102
|
+
&& options.token === undefined && options.cloudUrl === undefined && options.auth === undefined;
|
|
103
|
+
if (nothingChosen) {
|
|
104
|
+
const conn = await resolveEditorConnection(projectPath, {});
|
|
105
|
+
if (conn.localFallback) {
|
|
106
|
+
fallbackUrl = conn.url;
|
|
107
|
+
process.stderr.write(`WARN: ${localFallbackNote(conn.url)}
|
|
108
|
+
`);
|
|
109
|
+
}
|
|
110
|
+
else if (conn.signInRequired) {
|
|
111
|
+
// The editor would come up on a Cloud connection it cannot use (and never on a local server instead).
|
|
112
|
+
ui.error(conn.signInRequired);
|
|
113
|
+
process.exit(ExitCode.CommandFailed);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
95
116
|
const authToken = await resolveOpenAuthToken(projectPath, { token: options.token, mode: options.mode });
|
|
96
117
|
if (authToken !== undefined && options.token === undefined) {
|
|
97
118
|
verbose('Using persisted cloud credential (per-project store, legacy fallback, or machine store)');
|
|
@@ -103,11 +124,12 @@ export const openCommand = new Command('open')
|
|
|
103
124
|
build: options.build !== false,
|
|
104
125
|
buildConfiguration: options.buildConfiguration,
|
|
105
126
|
noConnect: options.connect === false,
|
|
106
|
-
url: options.url,
|
|
127
|
+
url: options.url ?? fallbackUrl,
|
|
128
|
+
...(fallbackUrl ? { startServer: true } : {}),
|
|
107
129
|
cloudUrl: options.cloudUrl,
|
|
108
130
|
token: authToken,
|
|
109
|
-
auth: options.auth,
|
|
110
|
-
mode: options.mode,
|
|
131
|
+
auth: (options.auth ?? (fallbackUrl ? 'None' : undefined)),
|
|
132
|
+
mode: (options.mode ?? (fallbackUrl ? 'Custom' : undefined)),
|
|
111
133
|
logLevel: options.logLevel,
|
|
112
134
|
onProgress: (event) => {
|
|
113
135
|
switch (event.phase) {
|
|
@@ -184,8 +206,18 @@ export const openCommand = new Command('open')
|
|
|
184
206
|
});
|
|
185
207
|
/** `open --headless`: a ready windowless editor on the project's local server (cli-core EditorSession). */
|
|
186
208
|
async function openHeadless(projectPath, options) {
|
|
187
|
-
const idleSeconds =
|
|
188
|
-
const readyTimeoutMs =
|
|
209
|
+
const idleSeconds = parseIntFlag(options.idleTimeout, '--idle-timeout', true);
|
|
210
|
+
const readyTimeoutMs = parseIntFlag(options.readyTimeout, '--ready-timeout');
|
|
211
|
+
// A headless editor runs on a local server: never for a Cloud project on a signed-in machine.
|
|
212
|
+
const conn = await resolveEditorConnection(projectPath, { url: options.url, token: options.token });
|
|
213
|
+
const refusal = localEditorRefusal(conn, () => signInState(projectPath) !== 'missing');
|
|
214
|
+
if (refusal) {
|
|
215
|
+
ui.error(refusal);
|
|
216
|
+
process.exit(ExitCode.CommandFailed);
|
|
217
|
+
}
|
|
218
|
+
// The fallback's URL is the project's local port: the session's default.
|
|
219
|
+
if (conn.localFallback)
|
|
220
|
+
process.stderr.write(`WARN: ${localFallbackNote(conn.url)}\n`);
|
|
189
221
|
const spinner = ui.startSpinner('Connecting...');
|
|
190
222
|
const result = await ensureEditor({
|
|
191
223
|
projectPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EACL,WAAW,EACX,kBAAkB,IAAI,qBAAqB,EAC3C,iBAAiB,IAAI,oBAAoB,GAC1C,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import { Command, Option } from 'commander';
|
|
3
|
+
import { DEFAULT_SESSION_READY_TIMEOUT_MS } from '@baizor/gamedev-cli-core';
|
|
4
|
+
import { RQL_MUTATE_TOOL, decodeQueryFile, resourcesWrittenSince, rqlMaySave, rqlToolCall, saveReceipt, stripToolName } from '../lib/rql.js';
|
|
5
|
+
import { runTool } from '../lib/run-tool.js';
|
|
6
|
+
import { resolveAndValidateProjectPath } from '../utils/connection.js';
|
|
7
|
+
import { ExitCode } from '../utils/exit-codes.js';
|
|
8
|
+
import { CommandOutput, addFormatOption, parseFormat, parseIntFlag } from '../utils/output.js';
|
|
9
|
+
import { RQL_LANGUAGE, RQL_RECIPES } from '../lib/cli-guide.js';
|
|
10
|
+
import { runToolAction } from './run-tool-builder.js';
|
|
11
|
+
/** How `rql` calls a tool: as run-tool does. */
|
|
12
|
+
const RQL_CALL = {
|
|
13
|
+
name: 'rql',
|
|
14
|
+
routePrefix: '/api/tools',
|
|
15
|
+
verboseLabel: 'Tool',
|
|
16
|
+
errorNoun: 'tool',
|
|
17
|
+
invoke: runTool,
|
|
18
|
+
};
|
|
19
|
+
const RQL_HELP_FOOTER = [
|
|
20
|
+
'Recipes:',
|
|
21
|
+
...RQL_RECIPES.map(([query, what]) => ` ${query} # ${what}`),
|
|
22
|
+
'',
|
|
23
|
+
...RQL_LANGUAGE,
|
|
24
|
+
'Quote the query with single quotes; strings inside it take double quotes (a shell that strips them: -f <file> or -f -).',
|
|
25
|
+
'A receipt (set / call) lists every change, so a separate check is rarely needed; scene edits stay unsaved until',
|
|
26
|
+
'SaveScene() (resource files and project settings are saved at once).',
|
|
27
|
+
'Sources, types and members: godot-cli rql --schema [Type] (full language: godot-cli tools rql-query)',
|
|
28
|
+
].join('\n');
|
|
29
|
+
/** The query from the argument or `-f <file>` (`-f -`: stdin; stdin is never read unasked). */
|
|
30
|
+
function readQuery(query, file) {
|
|
31
|
+
if (query !== undefined && file !== undefined)
|
|
32
|
+
throw new Error('Pass the query either as an argument or with -f, not both.');
|
|
33
|
+
if (file === undefined)
|
|
34
|
+
return query;
|
|
35
|
+
return decodeQueryFile(fs.readFileSync(file === '-' ? 0 : file)).trim();
|
|
36
|
+
}
|
|
37
|
+
export const rqlCommand = addFormatOption(new Command('rql')
|
|
38
|
+
.description('Read or change the editor with one RQL query: scenes, nodes, resources (a query ending in set / call changes the editor, any other only reads); starts a headless editor when none answers')
|
|
39
|
+
.argument('[query]', 'RQL query, e.g. \'nodes | where name starts-with "Tree" | count\'')
|
|
40
|
+
.option('--path <path>', 'Godot project path (defaults to cwd)')
|
|
41
|
+
.option('-f, --file <file>', 'Read the query from a file ("-" for stdin)')
|
|
42
|
+
.option('--schema [type]', 'List the RQL sources (or one type\'s members) instead of running a query')
|
|
43
|
+
.option('--dry-run', 'For set / call: show what would change, change nothing')
|
|
44
|
+
.option('--max-targets <n>', 'For set / call: allow more than 200 targets (up to 1000)')
|
|
45
|
+
.option('--no-start', 'Do not start a headless editor when none answers')
|
|
46
|
+
.option('--once', 'Close the editor afterwards when this call started it')
|
|
47
|
+
// The connection options of run-tool work here too; hidden to keep this help short.
|
|
48
|
+
.addOption(new Option('--url <url>', 'MCP server base URL').hideHelp())
|
|
49
|
+
.addOption(new Option('--token <token>', 'Bearer token override').hideHelp())
|
|
50
|
+
.addOption(new Option('--raw', 'Output raw JSON').hideHelp())
|
|
51
|
+
.addOption(new Option('--timeout <ms>', 'Request timeout in milliseconds').default('60000').hideHelp())
|
|
52
|
+
.addOption(new Option('--no-build', 'Do not build the C# assembly before starting an editor').hideHelp())
|
|
53
|
+
.addOption(new Option('--editor-path <path>', 'Godot editor executable for a started editor').hideHelp())
|
|
54
|
+
.addOption(new Option('--ready-timeout <ms>', 'How long to wait for a started editor to become ready').default(String(DEFAULT_SESSION_READY_TIMEOUT_MS)).hideHelp())
|
|
55
|
+
.addHelpText('after', `\n${RQL_HELP_FOOTER}\n`)).action(async (queryArg, options) => {
|
|
56
|
+
const output = new CommandOutput('rql', parseFormat(options.format));
|
|
57
|
+
let query;
|
|
58
|
+
try {
|
|
59
|
+
const text = readQuery(queryArg, options.file);
|
|
60
|
+
query = text === undefined ? undefined : stripToolName(text);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
return output.fail(ExitCode.Usage, 'USAGE', err instanceof Error ? err.message : String(err));
|
|
64
|
+
}
|
|
65
|
+
const maxTargets = options.maxTargets === undefined ? undefined : parseIntFlag(options.maxTargets, '--max-targets');
|
|
66
|
+
const call = rqlToolCall(query, { schema: options.schema, dryRun: options.dryRun, maxTargets });
|
|
67
|
+
if ('usage' in call)
|
|
68
|
+
return output.fail(ExitCode.Usage, 'USAGE', call.usage);
|
|
69
|
+
// A save answers without naming its files; which files a change wrote is read from the disk, so nobody re-opens the
|
|
70
|
+
// scene: only for an editor on this machine, and only files written since the tool call itself.
|
|
71
|
+
const receiptFor = call.toolName === RQL_MUTATE_TOOL && !options.dryRun && !options.raw && !output.machine
|
|
72
|
+
? resolveAndValidateProjectPath(undefined, options) : undefined;
|
|
73
|
+
await runToolAction(RQL_CALL, call.toolName, undefined, { ...options, input: JSON.stringify(call.input) }, ({ calledAt, local }) => {
|
|
74
|
+
if (receiptFor === undefined || !local)
|
|
75
|
+
return;
|
|
76
|
+
const receipt = saveReceipt(resourcesWrittenSince(receiptFor, calledAt), rqlMaySave(query));
|
|
77
|
+
if (receipt)
|
|
78
|
+
console.log(receipt);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=rql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rql.js","sourceRoot":"","sources":["../../src/commands/rql.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as ui from '../utils/ui.js';
|
|
3
|
+
import { CommandOutput, addFormatOption, parseFormat } from '../utils/output.js';
|
|
4
|
+
import { runScript } from '../lib/run-script.js';
|
|
5
|
+
import { addHeadlessOptions, diagnosticErrors, finishHeadless, headlessProjectPath, headlessTimeout, } from './headless-common.js';
|
|
6
|
+
export const runScriptCommand = addFormatOption(addHeadlessOptions(new Command('run-script')
|
|
7
|
+
.description('Run a one-shot SceneTree GDScript headless (godot -s); exit 0 only when it called quit(0)')
|
|
8
|
+
.argument('<script>', 'GDScript file (res://… or a file path) extending SceneTree or MainLoop')
|
|
9
|
+
.argument('[args...]', 'Arguments for the script (OS.get_cmdline_user_args())'), 300000, false)).action(async (script, scriptArgs, options) => {
|
|
10
|
+
const output = new CommandOutput('run-script', parseFormat(options.format));
|
|
11
|
+
const result = await runScript({
|
|
12
|
+
projectPath: headlessProjectPath(undefined, options),
|
|
13
|
+
timeoutMs: headlessTimeout(options),
|
|
14
|
+
// A -s script runs the game, not the editor: it does not touch the import cache an open editor owns.
|
|
15
|
+
allowOpenProject: true,
|
|
16
|
+
script,
|
|
17
|
+
scriptArgs,
|
|
18
|
+
...(options.editorPath ? { editorPath: options.editorPath } : {}),
|
|
19
|
+
// Text: stream the script's output as it runs.
|
|
20
|
+
...(!output.machine ? { onLine: (line) => console.log(line) } : {}),
|
|
21
|
+
});
|
|
22
|
+
const data = result.projectPath ? {
|
|
23
|
+
projectPath: result.projectPath,
|
|
24
|
+
script: result.script,
|
|
25
|
+
scriptExitCode: result.scriptExitCode ?? null,
|
|
26
|
+
output: result.output,
|
|
27
|
+
diagnostics: result.diagnostics,
|
|
28
|
+
} : null;
|
|
29
|
+
if (!output.machine && result.kind === 'failure')
|
|
30
|
+
ui.divider();
|
|
31
|
+
finishHeadless(output, result, data, result.kind === 'failure' ? diagnosticErrors('SCRIPT_ERRORS', (result.diagnostics ?? []).filter((d) => d.severity === 'error')) : []);
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=run-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-script.js","sourceRoot":"","sources":["../../src/commands/run-script.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,eAAe,GAEhB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAC7C,kBAAkB,CAChB,IAAI,OAAO,CAAC,YAAY,CAAC;KACtB,WAAW,CAAC,2FAA2F,CAAC;KACxG,QAAQ,CAAC,UAAU,EAAE,wEAAwE,CAAC;KAC9F,QAAQ,CAAC,WAAW,EAAE,uDAAuD,CAAC,EACjF,MAAO,EACP,KAAK,CACN,CACF,CAAC,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,UAAoB,EAAE,OAA2B,EAAE,EAAE;IACnF,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;QAC7B,WAAW,EAAE,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;QACpD,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC;QACnC,qGAAqG;QACrG,gBAAgB,EAAE,IAAI;QACtB,MAAM;QACN,UAAU;QACV,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,+CAA+C;QAC/C,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QAChC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;QAC7C,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/D,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7K,CAAC,CAAC,CAAC"}
|
|
@@ -6,7 +6,6 @@ export const runSystemToolCommand = buildRunToolCommand({
|
|
|
6
6
|
argDescription: 'Name of the system tool to execute',
|
|
7
7
|
routePrefix: '/api/system-tools',
|
|
8
8
|
verboseLabel: 'System tool',
|
|
9
|
-
headingLabel: 'Run System Tool',
|
|
10
9
|
errorNoun: 'system tool',
|
|
11
10
|
invoke: runSystemTool,
|
|
12
11
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-system-tool.js","sourceRoot":"","sources":["../../src/commands/run-system-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;IACtD,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,qEAAqE;IAClF,cAAc,EAAE,oCAAoC;IACpD,WAAW,EAAE,mBAAmB;IAChC,YAAY,EAAE,aAAa;IAC3B,
|
|
1
|
+
{"version":3,"file":"run-system-tool.js","sourceRoot":"","sources":["../../src/commands/run-system-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;IACtD,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,qEAAqE;IAClF,cAAc,EAAE,oCAAoC;IACpD,WAAW,EAAE,mBAAmB;IAChC,YAAY,EAAE,aAAa;IAC3B,SAAS,EAAE,aAAa;IACxB,MAAM,EAAE,aAAa;CACtB,CAAC,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { type ToolFailureClass } from '@baizor/gamedev-cli-core';
|
|
3
|
+
import { type EnsureEditorResult } from '../lib/session.js';
|
|
2
4
|
import type { RunToolFailure, RunToolOptions, RunToolResult } from '../lib/types.js';
|
|
3
|
-
interface BuilderOptions {
|
|
5
|
+
export interface BuilderOptions {
|
|
4
6
|
/** CLI subcommand name, e.g. `'run-tool'`. */
|
|
5
7
|
name: string;
|
|
6
8
|
/** `description()` text for the commander command. */
|
|
@@ -11,8 +13,6 @@ interface BuilderOptions {
|
|
|
11
13
|
routePrefix: string;
|
|
12
14
|
/** Verbose-log label, e.g. `'Tool'` or `'System tool'`. */
|
|
13
15
|
verboseLabel: string;
|
|
14
|
-
/** Heading printed by `ui.heading`, e.g. `'Run Tool'`. */
|
|
15
|
-
headingLabel: string;
|
|
16
16
|
/**
|
|
17
17
|
* Lower-case noun used in user-facing failure copy:
|
|
18
18
|
* `Failed to call <noun>:` and `<Capitalized> call timed out…`.
|
|
@@ -21,6 +21,23 @@ interface BuilderOptions {
|
|
|
21
21
|
/** Library function — `runTool` or `runSystemTool`. */
|
|
22
22
|
invoke: (opts: RunToolOptions) => Promise<RunToolResult>;
|
|
23
23
|
}
|
|
24
|
+
/** What `runToolAction` needs of a command: everything but its help texts. */
|
|
25
|
+
export type RunToolCall = Omit<BuilderOptions, 'description' | 'argDescription'>;
|
|
26
|
+
export interface RunToolCliOptions {
|
|
27
|
+
path?: string;
|
|
28
|
+
url?: string;
|
|
29
|
+
token?: string;
|
|
30
|
+
input?: string;
|
|
31
|
+
inputFile?: string;
|
|
32
|
+
raw?: boolean;
|
|
33
|
+
timeout?: string;
|
|
34
|
+
format?: string;
|
|
35
|
+
start?: boolean;
|
|
36
|
+
once?: boolean;
|
|
37
|
+
build?: boolean;
|
|
38
|
+
editorPath?: string;
|
|
39
|
+
readyTimeout: string;
|
|
40
|
+
}
|
|
24
41
|
export interface FailureContext {
|
|
25
42
|
toolName: string;
|
|
26
43
|
endpoint: string;
|
|
@@ -28,6 +45,23 @@ export interface FailureContext {
|
|
|
28
45
|
timeoutMs: number;
|
|
29
46
|
errorNoun: string;
|
|
30
47
|
}
|
|
48
|
+
/** Exit code and envelope error code when no editor could be obtained (the shared table). */
|
|
49
|
+
export declare function ensureFailureExit(failure: Pick<Extract<EnsureEditorResult, {
|
|
50
|
+
kind: 'failure';
|
|
51
|
+
}>, 'reason' | 'sessionReason'>): ToolFailureClass;
|
|
52
|
+
/** A tool response that carries `status: "error"`: the call reached the tool and the tool failed. */
|
|
53
|
+
export declare function isToolErrorResponse(data: unknown): boolean;
|
|
31
54
|
export declare function buildRunToolCommand(cfg: BuilderOptions): Command;
|
|
55
|
+
/** Call one tool and print its answer (`run-tool`, and `rql` with the RQL tool it picks); a failure exits. */
|
|
56
|
+
export declare function runToolAction(cfg: RunToolCall, toolName: string, positionalPath: string | undefined, options: RunToolCliOptions,
|
|
57
|
+
/** After a successful call printed its answer: when the call went out, and whether the editor runs on this machine. */
|
|
58
|
+
onSuccess?: (call: {
|
|
59
|
+
calledAt: number;
|
|
60
|
+
local: boolean;
|
|
61
|
+
}) => void): Promise<void>;
|
|
32
62
|
export declare function buildFailureMessage(failure: RunToolFailure, ctx: FailureContext): string;
|
|
33
|
-
|
|
63
|
+
/**
|
|
64
|
+
* The next step after an HTTP failure: list the tools on a 404; on 400 read the tool's arguments (422 is the tool's
|
|
65
|
+
* own failure, e.g. a missing file: its text says what is wrong).
|
|
66
|
+
*/
|
|
67
|
+
export declare function httpFailureHint(httpStatus: number | undefined, toolName: string): string | undefined;
|