godot-cli 0.38.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 +36 -4
  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
@@ -0,0 +1,117 @@
1
+ // Shared plumbing of the editor-less headless commands (check, import, test, export, run-script): binary and project
2
+ // resolution, the "project is open" guard, timeout budgets and the `--import` step. Library-safe.
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import { findGodotBinary } from '../utils/godot-editor.js';
6
+ import { findGodotProcess } from '../utils/godot-process.js';
7
+ import { isGodotProjectRoot } from '../utils/project-godot.js';
8
+ import { GODOT_BANNER_RE, parseGodotLog } from './godot-log.js';
9
+ import { runGodot } from './godot-run.js';
10
+ export const defaultHeadlessDeps = {
11
+ runGodot,
12
+ findBinary: (editorPath) => findGodotBinary(editorPath),
13
+ findOpenEditor: (projectPath) => findGodotProcess(projectPath),
14
+ };
15
+ export function headlessFailure(reason, message) {
16
+ return { kind: 'failure', success: false, reason, message };
17
+ }
18
+ /** The failure of a run that was stopped (SIGINT/SIGTERM, or the timeout), else undefined. */
19
+ export function stoppedRun(run, what) {
20
+ if (run.interrupted)
21
+ return headlessFailure('interrupted', `${what} was interrupted (the Godot process tree was killed).`);
22
+ if (run.timedOut)
23
+ return headlessFailure('timeout', `${what} timed out (the Godot process tree was killed).`);
24
+ return undefined;
25
+ }
26
+ /** The failure of a run that never printed Godot's banner. */
27
+ export function notStarted(reason, run) {
28
+ return headlessFailure(reason, `Godot did not start${run.spawnError ? `: ${run.spawnError}` : ''} (exit ${run.exitCode}).`);
29
+ }
30
+ /** The scratch folder of the headless commands inside a project. */
31
+ export function cliWorkDir(projectPath) {
32
+ return path.join(projectPath, '.godot', 'godot-cli');
33
+ }
34
+ /**
35
+ * Validate the project, find the binary and refuse when an editor has the project open (an `--import` against an
36
+ * open project fights the editor over `.godot/`).
37
+ */
38
+ export function prepareHeadless(options) {
39
+ const deps = { ...defaultHeadlessDeps, ...options.deps };
40
+ const projectPath = path.resolve(options.projectPath);
41
+ if (!isGodotProjectRoot(projectPath)) {
42
+ return headlessFailure('invalid-options', `Not a Godot project (missing project.godot): ${projectPath}`);
43
+ }
44
+ if (!Number.isFinite(options.timeoutMs) || options.timeoutMs <= 0) {
45
+ return headlessFailure('invalid-options', 'timeout must be a positive number of milliseconds');
46
+ }
47
+ const binary = deps.findBinary(options.editorPath);
48
+ if (!binary) {
49
+ return headlessFailure('not-found', 'No Godot editor binary found: pass --editor-path or set GODOT_BIN.');
50
+ }
51
+ if (!options.allowOpenProject) {
52
+ const open = deps.findOpenEditor(projectPath);
53
+ if (open) {
54
+ return headlessFailure('project-open', `The project is open in a Godot editor (PID ${open.pid}); close it first (\`godot-cli close\`), or pass --allow-open.`);
55
+ }
56
+ }
57
+ return { kind: 'context', projectPath, binary, deps, workDir: cliWorkDir(projectPath), deadline: Date.now() + options.timeoutMs, steps: [] };
58
+ }
59
+ export function remainingMs(ctx) {
60
+ return Math.max(0, ctx.deadline - Date.now());
61
+ }
62
+ /** Run one headless Godot step in the project within the remaining budget and record it. */
63
+ export async function runGodotStep(ctx, name, args, extra = {}) {
64
+ const fullArgs = ['--headless', '--path', ctx.projectPath, ...args];
65
+ const timeoutMs = remainingMs(ctx);
66
+ if (timeoutMs <= 0) {
67
+ ctx.steps.push({ name, command: [ctx.binary, ...fullArgs], exitCode: null, timedOut: true, durationMs: 0 });
68
+ return { exitCode: null, timedOut: true, output: '', durationMs: 0 };
69
+ }
70
+ const result = await ctx.deps.runGodot({
71
+ binary: ctx.binary,
72
+ args: fullArgs,
73
+ cwd: ctx.projectPath,
74
+ timeoutMs,
75
+ killOnSignal: true,
76
+ logFile: path.join(ctx.workDir, 'logs', `${name}.log`),
77
+ ...extra,
78
+ // Godot runs dotnet for C# (export): no MSBuild node reuse or build server that would outlive it.
79
+ env: { MSBUILDDISABLENODEREUSE: '1', DOTNET_CLI_USE_MSBUILD_SERVER: '0', UseSharedCompilation: 'false', ...extra.env },
80
+ });
81
+ ctx.steps.push({ name, command: [ctx.binary, ...fullArgs], exitCode: result.exitCode, timedOut: result.timedOut, durationMs: result.durationMs });
82
+ return result;
83
+ }
84
+ /** Whether the run printed Godot's start banner: without it nothing ran and the log proves nothing. */
85
+ export function engineRan(result) {
86
+ return result.spawnError === undefined && GODOT_BANNER_RE.test(result.output);
87
+ }
88
+ /**
89
+ * `--import`: materialise `.godot/` (imported resources, the global class cache every later step needs). Fails on a
90
+ * timeout, an engine that never started, script errors or `Error importing` lines; the exit code is not trusted.
91
+ */
92
+ export async function runImportStep(ctx, onLine) {
93
+ const result = await runGodotStep(ctx, 'import', ['--import'], onLine ? { onLine } : {});
94
+ const diagnostics = parseGodotLog(result.output);
95
+ const stopped = stoppedRun(result, 'The import');
96
+ if (stopped)
97
+ return { result, diagnostics, failure: stopped };
98
+ if (!engineRan(result)) {
99
+ return { result, diagnostics, failure: notStarted('import-failed', result) };
100
+ }
101
+ const scriptErrors = diagnostics.filter((d) => d.severity === 'error' && d.source === 'gdscript');
102
+ if (scriptErrors.length > 0)
103
+ return { result, diagnostics, failure: headlessFailure('script-errors', `${scriptErrors.length} script error(s) during import.`) };
104
+ const importErrors = diagnostics.filter((d) => d.severity === 'error' && /Error importing|Failed to import|Cannot import/i.test(d.message));
105
+ if (importErrors.length > 0)
106
+ return { result, diagnostics, failure: headlessFailure('import-failed', `${importErrors.length} resource(s) failed to import.`) };
107
+ if (result.exitCode !== 0)
108
+ return { result, diagnostics, failure: headlessFailure('import-failed', `Godot exited with code ${result.exitCode} during the import.`) };
109
+ return { result, diagnostics };
110
+ }
111
+ /** Write a GDScript the CLI runs with `-s` into the work dir; returns its `res://` path. */
112
+ export function writeCliScript(ctx, name, source) {
113
+ fs.mkdirSync(ctx.workDir, { recursive: true });
114
+ fs.writeFileSync(path.join(ctx.workDir, name), source, 'utf-8');
115
+ return `res://.godot/godot-cli/${name}`;
116
+ }
117
+ //# sourceMappingURL=headless.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless.js","sourceRoot":"","sources":["../../src/lib/headless.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Diagnostic } from './godot-log.js';
2
+ import { type HeadlessBaseOptions, type HeadlessResult, type HeadlessStep } from './headless.js';
3
+ export interface ImportReport {
4
+ projectPath: string;
5
+ steps: HeadlessStep[];
6
+ diagnostics: Diagnostic[];
7
+ }
8
+ export type ImportResult = HeadlessResult<ImportReport>;
9
+ export declare function importProject(options: HeadlessBaseOptions): Promise<ImportResult>;
@@ -0,0 +1,15 @@
1
+ // `importProject`: a standalone `godot --headless --import` judged from its log (Godot exits 0 on import and script
2
+ // errors). Library-safe.
3
+ import { prepareHeadless, runImportStep } from './headless.js';
4
+ export async function importProject(options) {
5
+ const ctx = prepareHeadless(options);
6
+ if (ctx.kind === 'failure')
7
+ return ctx;
8
+ options.onProgress?.('Importing the project (godot --headless --import)...');
9
+ const imported = await runImportStep(ctx);
10
+ const report = { projectPath: ctx.projectPath, steps: ctx.steps, diagnostics: imported.diagnostics };
11
+ if (imported.failure)
12
+ return { ...imported.failure, ...report };
13
+ return { kind: 'success', success: true, ...report };
14
+ }
15
+ //# sourceMappingURL=import-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-project.js","sourceRoot":"","sources":["../../src/lib/import-project.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,yBAAyB;AAGzB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAoE,MAAM,eAAe,CAAC;AAUjI,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA4B;IAC9D,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IACvC,OAAO,CAAC,UAAU,EAAE,CAAC,sDAAsD,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAiB,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;IACnH,IAAI,QAAQ,CAAC,OAAO;QAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;IAChE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;AACvD,CAAC"}
@@ -0,0 +1,36 @@
1
+ export interface JUnitCase {
2
+ suite: string;
3
+ name: string;
4
+ classname?: string;
5
+ file?: string;
6
+ status: 'passed' | 'failed' | 'error' | 'skipped';
7
+ message?: string;
8
+ /** Failure / error body text. */
9
+ details?: string;
10
+ timeSeconds?: number;
11
+ }
12
+ export interface JUnitReport {
13
+ tests: number;
14
+ passed: number;
15
+ failures: number;
16
+ errors: number;
17
+ skipped: number;
18
+ /**
19
+ * Failures not attributed to a test case: a suite-level setup/teardown failure (a `<failure>` / `<error>` outside any
20
+ * `<testcase>`, or a `<testsuite failures|errors>` count above its failing cases). They fail the run.
21
+ */
22
+ suiteFailures: number;
23
+ cases: JUnitCase[];
24
+ }
25
+ export declare function decodeXml(text: string): string;
26
+ /** Parse a JUnit XML document. Throws when it holds no `<testsuite>` / `<testsuites>` element. */
27
+ export declare function parseJUnit(xml: string): JUnitReport;
28
+ /** A failing case's line number from its message/details (`at line 12`, `line: 12`, `:12`). */
29
+ export declare function failureLine(c: JUnitCase): number | undefined;
30
+ /**
31
+ * The `res://…gd` file a case belongs to: its `file`, classname or suite, when one of them is a script path (GUT
32
+ * writes project-relative `test/test_x.gd`, gdUnit4 `res://…`).
33
+ */
34
+ export declare function caseScript(c: JUnitCase): string | undefined;
35
+ /** The most useful one-line description of a failed case: the report body when the message is generic. */
36
+ export declare function failureSummary(c: JUnitCase): string;
@@ -0,0 +1,146 @@
1
+ // Minimal JUnit XML reader for the reports GUT and gdUnit4 write (no XML dependency). Pure.
2
+ const TAG_RE = /<(\/?)(testsuites|testsuite|testcase|failure|error|skipped)\b((?:[^>"']|"[^"]*"|'[^']*')*?)(\/?)>/g;
3
+ const ATTR_RE = /([A-Za-z_:][\w:.-]*)\s*=\s*("([^"]*)"|'([^']*)')/g;
4
+ export function decodeXml(text) {
5
+ return text
6
+ .replace(/<!\[CDATA\[([\s\S]*?)\]\]>/g, '$1')
7
+ .replace(/&#x([0-9a-f]+);/gi, (_, hex) => String.fromCodePoint(parseInt(hex, 16)))
8
+ .replace(/&#(\d+);/g, (_, dec) => String.fromCodePoint(Number(dec)))
9
+ .replace(/&lt;/g, '<')
10
+ .replace(/&gt;/g, '>')
11
+ .replace(/&quot;/g, '"')
12
+ .replace(/&apos;/g, "'")
13
+ .replace(/&amp;/g, '&');
14
+ }
15
+ function attrs(raw) {
16
+ const out = {};
17
+ for (const m of raw.matchAll(ATTR_RE))
18
+ out[m[1]] = decodeXml(m[3] ?? m[4] ?? '');
19
+ return out;
20
+ }
21
+ /** Parse a JUnit XML document. Throws when it holds no `<testsuite>` / `<testsuites>` element. */
22
+ export function parseJUnit(xml) {
23
+ const cases = [];
24
+ const suites = [];
25
+ let suiteFailures = 0;
26
+ let sawRoot = false;
27
+ let current;
28
+ let outcomeStart = -1;
29
+ let outcomeTag = '';
30
+ for (const m of xml.matchAll(TAG_RE)) {
31
+ const [whole, closing, tag, rawAttrs, selfClosing] = m;
32
+ const at = m.index ?? 0;
33
+ if (tag === 'testsuites') {
34
+ sawRoot = true;
35
+ continue;
36
+ }
37
+ if (tag === 'testsuite') {
38
+ sawRoot = true;
39
+ if (closing) {
40
+ const suite = suites.pop();
41
+ if (suite) {
42
+ const failing = cases.slice(suite.firstCase).filter((c) => c.status === 'failed' || c.status === 'error').length;
43
+ suiteFailures += Math.max(suite.orphans, suite.declared - failing);
44
+ }
45
+ continue;
46
+ }
47
+ const a = attrs(rawAttrs);
48
+ const declared = (Number(a.failures) || 0) + (Number(a.errors) || 0);
49
+ if (selfClosing)
50
+ suiteFailures += declared;
51
+ else
52
+ suites.push({ name: a.name ?? '', declared, firstCase: cases.length, orphans: 0 });
53
+ continue;
54
+ }
55
+ if (tag === 'testcase') {
56
+ if (closing) {
57
+ current = undefined;
58
+ continue;
59
+ }
60
+ const a = attrs(rawAttrs);
61
+ const time = a.time !== undefined ? Number(a.time) : undefined;
62
+ current = {
63
+ suite: suites[suites.length - 1]?.name ?? '',
64
+ name: a.name ?? '',
65
+ ...(a.classname ? { classname: a.classname } : {}),
66
+ ...(a.file ? { file: a.file } : {}),
67
+ status: 'passed',
68
+ ...(time !== undefined && Number.isFinite(time) ? { timeSeconds: time } : {}),
69
+ };
70
+ cases.push(current);
71
+ if (selfClosing)
72
+ current = undefined;
73
+ continue;
74
+ }
75
+ // failure / error / skipped
76
+ if (!current) {
77
+ if (!closing && tag !== 'skipped' && suites.length > 0)
78
+ suites[suites.length - 1].orphans++;
79
+ continue;
80
+ }
81
+ if (closing) {
82
+ if (tag === outcomeTag && outcomeStart >= 0) {
83
+ const body = decodeXml(xml.slice(outcomeStart, at)).trim();
84
+ if (body)
85
+ current.details = body;
86
+ }
87
+ outcomeStart = -1;
88
+ continue;
89
+ }
90
+ const a = attrs(rawAttrs);
91
+ const status = tag === 'failure' ? 'failed' : tag === 'error' ? 'error' : 'skipped';
92
+ // A failure outranks a skip on the same case.
93
+ if (current.status === 'passed' || status !== 'skipped')
94
+ current.status = status;
95
+ if (a.message)
96
+ current.message = a.message;
97
+ if (!selfClosing) {
98
+ outcomeTag = tag;
99
+ outcomeStart = at + whole.length;
100
+ }
101
+ }
102
+ if (!sawRoot)
103
+ throw new Error('not a JUnit report (no <testsuite> element)');
104
+ const count = (s) => cases.filter((c) => c.status === s).length;
105
+ return {
106
+ tests: cases.length,
107
+ passed: count('passed'),
108
+ failures: count('failed'),
109
+ errors: count('error'),
110
+ skipped: count('skipped'),
111
+ suiteFailures,
112
+ cases,
113
+ };
114
+ }
115
+ /** A failing case's line number from its message/details (`at line 12`, `line: 12`, `:12`). */
116
+ export function failureLine(c) {
117
+ const text = `${c.message ?? ''}\n${c.details ?? ''}`;
118
+ const m = /\bat line (\d+)|\bline[:\s]+(\d+)|\.gd:(\d+)/i.exec(text);
119
+ const n = m ? Number(m[1] ?? m[2] ?? m[3]) : NaN;
120
+ return Number.isFinite(n) ? n : undefined;
121
+ }
122
+ /**
123
+ * The `res://…gd` file a case belongs to: its `file`, classname or suite, when one of them is a script path (GUT
124
+ * writes project-relative `test/test_x.gd`, gdUnit4 `res://…`).
125
+ */
126
+ export function caseScript(c) {
127
+ for (const candidate of [c.file, c.classname, c.suite]) {
128
+ if (!candidate)
129
+ continue;
130
+ const res = /res:\/\/\S+?\.gd/.exec(candidate);
131
+ if (res)
132
+ return res[0];
133
+ if (/^[\w.\- /]+\.gd$/.test(candidate) && !candidate.startsWith('/'))
134
+ return `res://${candidate}`;
135
+ }
136
+ // gdUnit4 names the file only in the failure (`FAILED: res://test/math_test.gd:7`).
137
+ return /res:\/\/[^\s:'"]+?\.gd/.exec(`${c.message ?? ''}\n${c.details ?? ''}`)?.[0];
138
+ }
139
+ /** The most useful one-line description of a failed case: the report body when the message is generic. */
140
+ export function failureSummary(c) {
141
+ const detail = c.details?.replace(/\s+/g, ' ').trim().slice(0, 300) || undefined;
142
+ if (detail && (!c.message || /^(failed|failure|error)(:\s*\S+)?$/i.test(c.message.trim())))
143
+ return detail;
144
+ return c.message || detail || c.status;
145
+ }
146
+ //# sourceMappingURL=junit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"junit.js","sourceRoot":"","sources":["../../src/lib/junit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ export interface ToolInfo {
2
+ name: string;
3
+ title?: string;
4
+ description: string;
5
+ inputSchema?: {
6
+ type?: string;
7
+ properties?: Record<string, {
8
+ type?: string | string[];
9
+ description?: string;
10
+ }>;
11
+ required?: string[];
12
+ };
13
+ }
14
+ export type ListToolsResult = {
15
+ kind: 'success';
16
+ tools: ToolInfo[];
17
+ }
18
+ /**
19
+ * `unreachable`: nothing answers (refused, DNS): an editor may be started, or the offline list shown; `dropped`: a
20
+ * server took the request and dropped the connection (exit 7 UNREACHABLE, like run-tool).
21
+ */
22
+ | {
23
+ kind: 'failure';
24
+ reason: 'unreachable' | 'dropped' | 'timeout' | 'protocol';
25
+ message: string;
26
+ };
27
+ /** The MCP endpoint of a server base URL (`http://localhost:N` → `/mcp`; a cloud hub URL already ends in `/mcp`). */
28
+ export declare function mcpEndpoint(baseUrl: string): string;
29
+ /** JSON-RPC responses in a Streamable-HTTP body: plain JSON, or SSE `data:` lines. */
30
+ export declare function parseMcpBody(text: string): Array<{
31
+ id?: unknown;
32
+ result?: unknown;
33
+ error?: {
34
+ message?: string;
35
+ };
36
+ }>;
37
+ /** `initialize` → `notifications/initialized` → `tools/list` (all pages) → session DELETE. */
38
+ export declare function listToolsLive(baseUrl: string, token: string | undefined, timeoutMs?: number, fetchImpl?: typeof fetch): Promise<ListToolsResult>;
39
+ export interface ToolsCache {
40
+ fetchedAt: string;
41
+ url: string;
42
+ tools: ToolInfo[];
43
+ }
44
+ export declare function toolsCachePath(projectPath: string): string;
45
+ export declare function readToolsCache(projectPath: string): ToolsCache | undefined;
46
+ /** Write the cache and keep it out of version control (`.ai-game-dev/.gitignore`). Best effort. */
47
+ export declare function writeToolsCache(projectPath: string, url: string, tools: ToolInfo[]): void;
48
+ /** The tool list the CLI knows without an editor (the addon's tool families; no input schemas). */
49
+ export declare function offlineTools(): ToolInfo[];
50
+ /** `godot-cli run-tool <name> --input '{…required args…}'` from the tool's input schema. */
51
+ export declare function exampleCall(tool: ToolInfo): string;
@@ -0,0 +1,147 @@
1
+ // The editor's AI tools: MCP `tools/list` on the server, cached in `<project>/.ai-game-dev/tools.json` so the list
2
+ // (and each tool's input schema) is available while the editor is closed. Library-safe: no console output, no exit.
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import { ensureAiGameDevGitignore, networkFailureReason } from '@baizor/gamedev-cli-core';
6
+ import { SKILL_FAMILIES } from '../utils/skills.js';
7
+ /** The MCP endpoint of a server base URL (`http://localhost:N` → `/mcp`; a cloud hub URL already ends in `/mcp`). */
8
+ export function mcpEndpoint(baseUrl) {
9
+ const url = baseUrl.replace(/\/+$/, '');
10
+ return /\/mcp(\/p\/[^/]+)?$/.test(url) ? url : `${url}/mcp`;
11
+ }
12
+ /** JSON-RPC responses in a Streamable-HTTP body: plain JSON, or SSE `data:` lines. */
13
+ export function parseMcpBody(text) {
14
+ const trimmed = text.trim();
15
+ if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
16
+ const v = JSON.parse(trimmed);
17
+ return (Array.isArray(v) ? v : [v]);
18
+ }
19
+ const out = [];
20
+ for (const line of trimmed.split(/\r?\n/)) {
21
+ if (!line.startsWith('data:'))
22
+ continue;
23
+ try {
24
+ out.push(JSON.parse(line.slice(5).trim()));
25
+ }
26
+ catch {
27
+ // keep-alive or partial line
28
+ }
29
+ }
30
+ return out;
31
+ }
32
+ /** `initialize` → `notifications/initialized` → `tools/list` (all pages) → session DELETE. */
33
+ export async function listToolsLive(baseUrl, token, timeoutMs = 15000, fetchImpl = globalThis.fetch) {
34
+ const endpoint = mcpEndpoint(baseUrl);
35
+ const controller = new AbortController();
36
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
37
+ let session;
38
+ const headers = () => ({
39
+ 'Content-Type': 'application/json',
40
+ Accept: 'application/json, text/event-stream',
41
+ ...(token ? { Authorization: `Bearer ${token}` } : {}),
42
+ ...(session ? { 'Mcp-Session-Id': session } : {}),
43
+ });
44
+ const rpc = async (id, method, params) => {
45
+ const res = await fetchImpl(endpoint, {
46
+ method: 'POST',
47
+ headers: headers(),
48
+ body: JSON.stringify({ jsonrpc: '2.0', ...(id !== undefined ? { id } : {}), method, ...(params !== undefined ? { params } : {}) }),
49
+ signal: controller.signal,
50
+ });
51
+ session = res.headers.get('mcp-session-id') ?? session;
52
+ const text = await res.text();
53
+ if (!res.ok)
54
+ throw new Error(`HTTP ${res.status} from ${endpoint}${text ? `: ${text.slice(0, 200)}` : ''}`);
55
+ if (id === undefined)
56
+ return undefined;
57
+ const reply = parseMcpBody(text).find((m) => m.id === id);
58
+ if (!reply)
59
+ throw new Error(`no reply to ${method} from ${endpoint}`);
60
+ if (reply.error)
61
+ throw new Error(`${method} failed: ${reply.error.message ?? 'error'}`);
62
+ return reply.result;
63
+ };
64
+ try {
65
+ await rpc(1, 'initialize', { protocolVersion: '2025-03-26', capabilities: {}, clientInfo: { name: 'godot-cli', version: '1' } });
66
+ await rpc(undefined, 'notifications/initialized');
67
+ const tools = [];
68
+ let cursor;
69
+ for (let page = 0, id = 2; page < 50; page++, id++) {
70
+ const result = await rpc(id, 'tools/list', cursor ? { cursor } : {});
71
+ for (const t of result?.tools ?? [])
72
+ tools.push(t);
73
+ cursor = typeof result?.nextCursor === 'string' ? result.nextCursor : undefined;
74
+ if (!cursor)
75
+ break;
76
+ }
77
+ return { kind: 'success', tools: tools.sort((a, b) => a.name.localeCompare(b.name)) };
78
+ }
79
+ catch (err) {
80
+ const e = err;
81
+ if (e.name === 'AbortError')
82
+ return { kind: 'failure', reason: 'timeout', message: `No answer from ${endpoint} within ${timeoutMs} ms.` };
83
+ // The shared transport classification, as in run-tool: a dropped connection is not "nothing answers".
84
+ const why = networkFailureReason(err);
85
+ if (why === 'connection-reset') {
86
+ return { kind: 'failure', reason: 'dropped', message: `${endpoint} dropped the connection before the tool list arrived.` };
87
+ }
88
+ if (why !== undefined)
89
+ return { kind: 'failure', reason: 'unreachable', message: `Nothing answers at ${endpoint}.` };
90
+ return { kind: 'failure', reason: 'protocol', message: e.message };
91
+ }
92
+ finally {
93
+ clearTimeout(timer);
94
+ if (session)
95
+ void fetchImpl(endpoint, { method: 'DELETE', headers: headers() }).catch(() => undefined);
96
+ }
97
+ }
98
+ export function toolsCachePath(projectPath) {
99
+ return path.join(projectPath, '.ai-game-dev', 'tools.json');
100
+ }
101
+ export function readToolsCache(projectPath) {
102
+ try {
103
+ const cache = JSON.parse(fs.readFileSync(toolsCachePath(projectPath), 'utf-8'));
104
+ return Array.isArray(cache.tools) ? cache : undefined;
105
+ }
106
+ catch {
107
+ return undefined;
108
+ }
109
+ }
110
+ /** Write the cache and keep it out of version control (`.ai-game-dev/.gitignore`). Best effort. */
111
+ export function writeToolsCache(projectPath, url, tools) {
112
+ try {
113
+ const dir = path.dirname(toolsCachePath(projectPath));
114
+ fs.mkdirSync(dir, { recursive: true });
115
+ fs.writeFileSync(toolsCachePath(projectPath), JSON.stringify({ fetchedAt: new Date().toISOString(), url, tools }, null, 2));
116
+ ensureAiGameDevGitignore(projectPath, ['tools.json']);
117
+ }
118
+ catch {
119
+ // the cache is a convenience
120
+ }
121
+ }
122
+ /** The tool list the CLI knows without an editor (the addon's tool families; no input schemas). */
123
+ export function offlineTools() {
124
+ return SKILL_FAMILIES.flatMap((f) => f.tools.map((t) => ({ name: t.name, description: t.description }))).sort((a, b) => a.name.localeCompare(b.name));
125
+ }
126
+ function placeholder(type, name) {
127
+ const t = Array.isArray(type) ? type.find((x) => x !== 'null') : type;
128
+ if (t === 'integer' || t === 'number')
129
+ return 0;
130
+ if (t === 'boolean')
131
+ return false;
132
+ if (t === 'array')
133
+ return [];
134
+ if (t === 'object')
135
+ return {};
136
+ return `<${name}>`;
137
+ }
138
+ /** `godot-cli run-tool <name> --input '{…required args…}'` from the tool's input schema. */
139
+ export function exampleCall(tool) {
140
+ const props = tool.inputSchema?.properties ?? {};
141
+ const required = tool.inputSchema?.required ?? [];
142
+ const input = {};
143
+ for (const key of required)
144
+ input[key] = placeholder(props[key]?.type, key);
145
+ return `godot-cli run-tool ${tool.name} --input '${JSON.stringify(input)}'`;
146
+ }
147
+ //# sourceMappingURL=list-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tools.js","sourceRoot":"","sources":["../../src/lib/list-tools.ts"],"names":[],"mappings":"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"}
package/dist/lib/open.js CHANGED
@@ -2,7 +2,7 @@ import * as fs from 'fs';
2
2
  import * as path from 'path';
3
3
  import { editorLaunchArgs, editorLaunchEnv, findGodotBinary, launchEditor } from '../utils/godot-editor.js';
4
4
  import { findGodotProcess } from '../utils/godot-process.js';
5
- import { ENV_AUTH_OPTION, ENV_CLOUD_URL, ENV_CONNECTION_MODE, ENV_HOST, ENV_LOG_LEVEL, ENV_TOKEN, } from '../utils/connection.js';
5
+ import { ENV_AUTH_OPTION, ENV_CLOUD_URL, ENV_CONNECTION_MODE, ENV_HOST, ENV_LOG_LEVEL, ENV_START_SERVER, ENV_TOKEN, } from '../utils/connection.js';
6
6
  import { emitProgress, pidSuffix } from './progress.js';
7
7
  import { buildProject } from './build.js';
8
8
  /**
@@ -52,6 +52,8 @@ export function buildOpenEnv(options) {
52
52
  env[ENV_TOKEN] = options.token;
53
53
  if (options.logLevel !== undefined)
54
54
  env[ENV_LOG_LEVEL] = options.logLevel;
55
+ if (options.startServer === true)
56
+ env[ENV_START_SERVER] = 'true';
55
57
  if (options.auth !== undefined) {
56
58
  if (!isValidAuth(options.auth)) {
57
59
  throw new Error('auth must be "None" or "Required"');
@@ -1 +1 @@
1
- {"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/lib/open.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/lib/open.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,3 @@
1
- import type { ProgressCallback, ProgressEvent } from './types.js';
2
- /**
3
- * Forward a single progress event to the caller's optional callback,
4
- * swallowing any exception the callback throws. A broken onProgress handler
5
- * must never abort the underlying library operation.
6
- */
7
- export declare function emitProgress(onProgress: ProgressCallback | undefined, event: ProgressEvent): void;
1
+ export { emitProgress } from '@baizor/gamedev-cli-core';
8
2
  /** ` (PID: n)` when the pid is known, else nothing: a log line never says "PID: unknown". */
9
3
  export declare function pidSuffix(pid: number | undefined): string;