godot-mcp-runtime 2.2.3 → 3.0.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 (59) hide show
  1. package/README.md +30 -93
  2. package/dist/dispatch.d.ts +1 -11
  3. package/dist/dispatch.d.ts.map +1 -1
  4. package/dist/dispatch.js +7 -8
  5. package/dist/dispatch.js.map +1 -1
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +12 -10
  9. package/dist/index.js.map +1 -1
  10. package/dist/scripts/godot_operations.gd +134 -283
  11. package/dist/scripts/mcp_bridge.gd +210 -43
  12. package/dist/tools/autoload-tools.d.ts +51 -0
  13. package/dist/tools/autoload-tools.d.ts.map +1 -0
  14. package/dist/tools/autoload-tools.js +187 -0
  15. package/dist/tools/autoload-tools.js.map +1 -0
  16. package/dist/tools/node-tools.d.ts +9 -78
  17. package/dist/tools/node-tools.d.ts.map +1 -1
  18. package/dist/tools/node-tools.js +114 -310
  19. package/dist/tools/node-tools.js.map +1 -1
  20. package/dist/tools/project-tools.d.ts +0 -168
  21. package/dist/tools/project-tools.d.ts.map +1 -1
  22. package/dist/tools/project-tools.js +120 -1192
  23. package/dist/tools/project-tools.js.map +1 -1
  24. package/dist/tools/runtime-tools.d.ts +108 -0
  25. package/dist/tools/runtime-tools.d.ts.map +1 -0
  26. package/dist/tools/runtime-tools.js +808 -0
  27. package/dist/tools/runtime-tools.js.map +1 -0
  28. package/dist/tools/scene-tools.d.ts +6 -48
  29. package/dist/tools/scene-tools.d.ts.map +1 -1
  30. package/dist/tools/scene-tools.js +67 -211
  31. package/dist/tools/scene-tools.js.map +1 -1
  32. package/dist/tools/validate-tools.d.ts.map +1 -1
  33. package/dist/tools/validate-tools.js +35 -29
  34. package/dist/tools/validate-tools.js.map +1 -1
  35. package/dist/utils/autoload-ini.d.ts +32 -0
  36. package/dist/utils/autoload-ini.d.ts.map +1 -0
  37. package/dist/utils/autoload-ini.js +111 -0
  38. package/dist/utils/autoload-ini.js.map +1 -0
  39. package/dist/utils/bridge-manager.d.ts +29 -0
  40. package/dist/utils/bridge-manager.d.ts.map +1 -0
  41. package/dist/utils/bridge-manager.js +136 -0
  42. package/dist/utils/bridge-manager.js.map +1 -0
  43. package/dist/utils/bridge-protocol.d.ts +34 -0
  44. package/dist/utils/bridge-protocol.d.ts.map +1 -0
  45. package/dist/utils/bridge-protocol.js +65 -0
  46. package/dist/utils/bridge-protocol.js.map +1 -0
  47. package/dist/utils/godot-runner.d.ts +70 -15
  48. package/dist/utils/godot-runner.d.ts.map +1 -1
  49. package/dist/utils/godot-runner.js +309 -277
  50. package/dist/utils/godot-runner.js.map +1 -1
  51. package/dist/utils/handler-helpers.d.ts +34 -0
  52. package/dist/utils/handler-helpers.d.ts.map +1 -0
  53. package/dist/utils/handler-helpers.js +55 -0
  54. package/dist/utils/handler-helpers.js.map +1 -0
  55. package/dist/utils/logger.d.ts +3 -0
  56. package/dist/utils/logger.d.ts.map +1 -0
  57. package/dist/utils/logger.js +11 -0
  58. package/dist/utils/logger.js.map +1 -0
  59. package/package.json +7 -4
@@ -1,11 +1,12 @@
1
1
  import { join } from 'path';
2
2
  import { existsSync, writeFileSync, unlinkSync, mkdirSync } from 'fs';
3
3
  import { randomUUID } from 'crypto';
4
- import { normalizeParameters, validatePath, createErrorResponse, extractGdError, } from '../utils/godot-runner.js';
4
+ import { normalizeParameters, validatePath, validateProjectArgs, createErrorResponse, extractGdError, getErrorMessage, } from '../utils/godot-runner.js';
5
5
  export const validateToolDefinitions = [
6
6
  {
7
7
  name: 'validate',
8
- description: "Validate GDScript syntax or scene file integrity using headless Godot. Returns { valid, errors: [{ line?, message }] } — line numbers are present when Godot's error output includes them, which is not always the case. If valid is false, fix the reported errors and re-validate before calling attach_script or run_script.\n\nSingle-target: provide exactly one of scriptPath, source, or scenePath.\nBatch: provide a targets array where each item has one of { scriptPath, source, scenePath }. Runs all targets in a single Godot process. Returns { results: [{ target, valid, errors }] }.",
8
+ description: "Validate GDScript syntax or scene file integrity using headless Godot. Use before attach_script or run_script to catch parse errors early. Single-target: provide exactly one of scriptPath, source, or scenePath. Batch: provide a targets array runs all in one Godot process. Returns { valid, errors: [{ line?, message }] } for single, or { results: [{ target, valid, errors }] } for batch. Line numbers appear when Godot's stderr includes them (not always). Returns valid:false on any parse error; never throws.",
9
+ annotations: { readOnlyHint: true },
9
10
  inputSchema: {
10
11
  type: 'object',
11
12
  properties: {
@@ -85,6 +86,20 @@ function parseGodotErrorEntries(stderr) {
85
86
  }
86
87
  }
87
88
  }
89
+ // Parse-error entries reference synthetic gdscript:// URIs in their `at:` line
90
+ // rather than a res:// path. Peek forward up to 3 lines for the secondary
91
+ // "Failed to load script/resource: \"res://...\"" message that names the file,
92
+ // and adopt that path so batch error attribution can find it.
93
+ if (!filePath && /Parse Error/i.test(line)) {
94
+ const lookaheadLimit = Math.min(i + 4, lines.length);
95
+ for (let j = i + 1; j < lookaheadLimit; j++) {
96
+ const failMatch = lines[j].match(/Failed to load (?:script|resource):?\s*"?(res:\/\/[^":\s]+)/);
97
+ if (failMatch) {
98
+ filePath = failMatch[1];
99
+ break;
100
+ }
101
+ }
102
+ }
88
103
  entries.push({ message, line: lineNum, filePath });
89
104
  continue;
90
105
  }
@@ -119,20 +134,9 @@ function parseGodotErrorsByPath(stderr) {
119
134
  }
120
135
  export async function handleValidate(runner, args) {
121
136
  args = normalizeParameters(args);
122
- if (!args.projectPath) {
123
- return createErrorResponse('projectPath is required', [
124
- 'Provide the path to a Godot project directory',
125
- ]);
126
- }
127
- if (!validatePath(args.projectPath)) {
128
- return createErrorResponse('Invalid projectPath', ['Provide a valid path without ".."']);
129
- }
130
- const projectFile = join(args.projectPath, 'project.godot');
131
- if (!existsSync(projectFile)) {
132
- return createErrorResponse(`Not a valid Godot project: ${args.projectPath}`, [
133
- 'Ensure the path points to a directory containing a project.godot file',
134
- ]);
135
- }
137
+ const pv = validateProjectArgs(args);
138
+ if ('isError' in pv)
139
+ return pv;
136
140
  // Batch mode: targets array
137
141
  if (args.targets && Array.isArray(args.targets)) {
138
142
  const targets = args.targets;
@@ -142,7 +146,7 @@ export async function handleValidate(runner, args) {
142
146
  for (let i = 0; i < targets.length; i++) {
143
147
  const t = targets[i];
144
148
  if (t.source) {
145
- const mcpDir = join(args.projectPath, '.mcp');
149
+ const mcpDir = join(pv.projectPath, '.mcp');
146
150
  if (!existsSync(mcpDir))
147
151
  mkdirSync(mcpDir, { recursive: true });
148
152
  const tempName = `validate_batch_${randomUUID()}.gd`;
@@ -161,7 +165,7 @@ export async function handleValidate(runner, args) {
161
165
  snakeTargets.push({});
162
166
  }
163
167
  }
164
- const { stdout, stderr } = await runner.executeOperation('validate_batch', { targets: snakeTargets }, args.projectPath);
168
+ const { stdout, stderr } = await runner.executeOperation('validate_batch', { targets: snakeTargets }, pv.projectPath);
165
169
  if (!stdout.trim()) {
166
170
  return createErrorResponse(`Batch validate failed: ${extractGdError(stderr)}`, [
167
171
  'Check that all target paths are valid',
@@ -191,8 +195,7 @@ export async function handleValidate(runner, args) {
191
195
  return { content: [{ type: 'text', text: JSON.stringify({ results }, null, 2) }] };
192
196
  }
193
197
  catch (error) {
194
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
195
- return createErrorResponse(`Batch validation failed: ${errorMessage}`, [
198
+ return createErrorResponse(`Batch validation failed: ${getErrorMessage(error)}`, [
196
199
  'Ensure Godot is installed correctly',
197
200
  'Check if the GODOT_PATH environment variable is set correctly',
198
201
  ]);
@@ -224,11 +227,11 @@ export async function handleValidate(runner, args) {
224
227
  try {
225
228
  if (args.source) {
226
229
  // Write inline source to a temp file inside .mcp/
227
- const mcpDir = join(args.projectPath, '.mcp');
230
+ const mcpDir = join(pv.projectPath, '.mcp');
228
231
  if (!existsSync(mcpDir)) {
229
232
  mkdirSync(mcpDir, { recursive: true });
230
233
  }
231
- const tempFileName = `validate_temp_${Date.now()}.gd`;
234
+ const tempFileName = `validate_temp_${randomUUID()}.gd`;
232
235
  const tempFilePath = join(mcpDir, tempFileName);
233
236
  writeFileSync(tempFilePath, args.source, 'utf8');
234
237
  resolvedScriptPath = `.mcp/${tempFileName}`;
@@ -238,7 +241,7 @@ export async function handleValidate(runner, args) {
238
241
  if (!validatePath(args.scriptPath)) {
239
242
  return createErrorResponse('Invalid scriptPath', ['Provide a valid path without ".."']);
240
243
  }
241
- const fullPath = join(args.projectPath, args.scriptPath);
244
+ const fullPath = join(pv.projectPath, args.scriptPath);
242
245
  if (!existsSync(fullPath)) {
243
246
  return createErrorResponse(`Script file does not exist: ${args.scriptPath}`, [
244
247
  'Ensure the path is correct relative to the project directory',
@@ -250,7 +253,7 @@ export async function handleValidate(runner, args) {
250
253
  if (!validatePath(args.scenePath)) {
251
254
  return createErrorResponse('Invalid scenePath', ['Provide a valid path without ".."']);
252
255
  }
253
- const fullPath = join(args.projectPath, args.scenePath);
256
+ const fullPath = join(pv.projectPath, args.scenePath);
254
257
  if (!existsSync(fullPath)) {
255
258
  return createErrorResponse(`Scene file does not exist: ${args.scenePath}`, [
256
259
  'Ensure the path is correct relative to the project directory',
@@ -263,7 +266,7 @@ export async function handleValidate(runner, args) {
263
266
  params.scriptPath = resolvedScriptPath;
264
267
  if (resolvedScenePath)
265
268
  params.scenePath = resolvedScenePath;
266
- const { stdout, stderr } = await runner.executeOperation('validate_resource', params, args.projectPath);
269
+ const { stdout, stderr } = await runner.executeOperation('validate_resource', params, pv.projectPath);
267
270
  // Parse stdout for the base valid/invalid signal from GDScript
268
271
  let valid = false;
269
272
  let gdErrors = [];
@@ -282,22 +285,25 @@ export async function handleValidate(runner, args) {
282
285
  const stderrErrors = parseGodotErrors(stderr || '');
283
286
  // Merge errors: prefer detailed stderr errors when available, otherwise keep gdErrors
284
287
  const allErrors = stderrErrors.length > 0 ? stderrErrors : gdErrors;
288
+ // The GDScript-side `valid` flag is unreliable for malformed scripts: load()
289
+ // returns a non-null placeholder Resource even when parsing fails, so
290
+ // resource != null is true. Fall back to the parsed stderr errors as the
291
+ // authoritative signal — matches the batch branch above.
285
292
  const result = {
286
- valid,
293
+ valid: valid && allErrors.length === 0,
287
294
  errors: allErrors,
288
295
  };
289
296
  return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
290
297
  }
291
298
  catch (error) {
292
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
293
- return createErrorResponse(`Validation failed: ${errorMessage}`, [
299
+ return createErrorResponse(`Validation failed: ${getErrorMessage(error)}`, [
294
300
  'Ensure Godot is installed correctly',
295
301
  'Check if the GODOT_PATH environment variable is set correctly',
296
302
  ]);
297
303
  }
298
304
  finally {
299
305
  if (tempFile && resolvedScriptPath) {
300
- const tempFilePath = join(args.projectPath, resolvedScriptPath);
306
+ const tempFilePath = join(pv.projectPath, resolvedScriptPath);
301
307
  try {
302
308
  unlinkSync(tempFilePath);
303
309
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validate-tools.js","sourceRoot":"","sources":["../../src/tools/validate-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-tools.js","sourceRoot":"","sources":["../../src/tools/validate-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Parsing and editing primitives for the `[autoload]` section of project.godot.
3
+ *
4
+ * Used by:
5
+ * - tools/autoload-tools.ts — list/add/remove/update_autoload handlers
6
+ * - utils/bridge-manager.ts — McpBridge inject/cleanup/repair
7
+ *
8
+ * Pure functions: each takes the absolute path to project.godot and returns
9
+ * either parsed data or a boolean indicating whether the file was mutated.
10
+ */
11
+ export interface AutoloadEntry {
12
+ name: string;
13
+ path: string;
14
+ singleton: boolean;
15
+ }
16
+ /**
17
+ * Matches an empty `[autoload]` section (the header followed by only blank
18
+ * lines, up to the next section header or end-of-file). Used by cleanup paths
19
+ * to drop the section after the last entry is removed.
20
+ */
21
+ export declare const EMPTY_AUTOLOAD_SECTION_REGEX: RegExp;
22
+ export declare function normalizeAutoloadPath(p: string): string;
23
+ export declare function parseAutoloads(projectFilePath: string, existingContent?: string): AutoloadEntry[];
24
+ export declare function addAutoloadEntry(projectFilePath: string, name: string, path: string, singleton: boolean, existingContent?: string): void;
25
+ /**
26
+ * Remove the named autoload entry. Also drops the `[autoload]` section header
27
+ * if the removed entry was the last one in it. Returns true when the file was
28
+ * mutated.
29
+ */
30
+ export declare function removeAutoloadEntry(projectFilePath: string, name: string): boolean;
31
+ export declare function updateAutoloadEntry(projectFilePath: string, name: string, newPath?: string, singleton?: boolean): boolean;
32
+ //# sourceMappingURL=autoload-ini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoload-ini.d.ts","sourceRoot":"","sources":["../../src/utils/autoload-ini.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,QAAkC,CAAC;AAE5E,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAsBjG;AAED,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,OAAO,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,IAAI,CAiBN;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA6BlF;AAED,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CA6BT"}
@@ -0,0 +1,111 @@
1
+ import { readFileSync, writeFileSync } from 'fs';
2
+ /**
3
+ * Matches an empty `[autoload]` section (the header followed by only blank
4
+ * lines, up to the next section header or end-of-file). Used by cleanup paths
5
+ * to drop the section after the last entry is removed.
6
+ */
7
+ export const EMPTY_AUTOLOAD_SECTION_REGEX = /\[autoload\]\s*(?=\n\[|\n*$)/g;
8
+ export function normalizeAutoloadPath(p) {
9
+ return p.startsWith('res://') ? p : `res://${p}`;
10
+ }
11
+ export function parseAutoloads(projectFilePath, existingContent) {
12
+ const content = existingContent ?? readFileSync(projectFilePath, 'utf8');
13
+ const autoloads = [];
14
+ let inAutoloadSection = false;
15
+ for (const line of content.split('\n')) {
16
+ const trimmed = line.trim();
17
+ if (trimmed.startsWith('[')) {
18
+ inAutoloadSection = trimmed === '[autoload]';
19
+ continue;
20
+ }
21
+ if (!inAutoloadSection || trimmed === '' || trimmed.startsWith(';') || trimmed.startsWith('#'))
22
+ continue;
23
+ // The surrounding `"?` are intentional: Godot always writes quotes, but
24
+ // hand-edited project.godot files sometimes omit them. Tolerating both
25
+ // shapes means a missing quote pair doesn't silently drop the entry.
26
+ const match = trimmed.match(/^(\w+)="?(\*?)([^"]*?)"?$/);
27
+ if (match) {
28
+ autoloads.push({ name: match[1], singleton: match[2] === '*', path: match[3] });
29
+ }
30
+ }
31
+ return autoloads;
32
+ }
33
+ export function addAutoloadEntry(projectFilePath, name, path, singleton, existingContent) {
34
+ const content = existingContent ?? readFileSync(projectFilePath, 'utf8');
35
+ const lines = content.split('\n');
36
+ const entry = `${name}="${singleton ? '*' : ''}${normalizeAutoloadPath(path)}"`;
37
+ const sectionIdx = lines.findIndex((l) => l.trim() === '[autoload]');
38
+ if (sectionIdx === -1) {
39
+ writeFileSync(projectFilePath, content.trimEnd() + '\n\n[autoload]\n' + entry + '\n', 'utf8');
40
+ return;
41
+ }
42
+ let insertIdx = sectionIdx + 1;
43
+ while (insertIdx < lines.length && !lines[insertIdx].trim().startsWith('[')) {
44
+ insertIdx++;
45
+ }
46
+ lines.splice(insertIdx, 0, entry);
47
+ writeFileSync(projectFilePath, lines.join('\n'), 'utf8');
48
+ }
49
+ /**
50
+ * Remove the named autoload entry. Also drops the `[autoload]` section header
51
+ * if the removed entry was the last one in it. Returns true when the file was
52
+ * mutated.
53
+ */
54
+ export function removeAutoloadEntry(projectFilePath, name) {
55
+ const content = readFileSync(projectFilePath, 'utf8');
56
+ const lines = content.split('\n');
57
+ let inAutoloadSection = false;
58
+ let removed = false;
59
+ const filtered = lines.filter((line) => {
60
+ const trimmed = line.trim();
61
+ if (trimmed.startsWith('[')) {
62
+ inAutoloadSection = trimmed === '[autoload]';
63
+ return true;
64
+ }
65
+ if (inAutoloadSection) {
66
+ const match = trimmed.match(/^(\w+)=/);
67
+ if (match && match[1] === name) {
68
+ removed = true;
69
+ return false;
70
+ }
71
+ }
72
+ return true;
73
+ });
74
+ if (!removed)
75
+ return false;
76
+ let newContent = filtered.join('\n');
77
+ newContent = newContent.replace(EMPTY_AUTOLOAD_SECTION_REGEX, '');
78
+ newContent = newContent.trimEnd() + '\n';
79
+ writeFileSync(projectFilePath, newContent, 'utf8');
80
+ return true;
81
+ }
82
+ export function updateAutoloadEntry(projectFilePath, name, newPath, singleton) {
83
+ const content = readFileSync(projectFilePath, 'utf8');
84
+ const lines = content.split('\n');
85
+ let inAutoloadSection = false;
86
+ let updated = false;
87
+ const newLines = lines.map((line) => {
88
+ const trimmed = line.trim();
89
+ if (trimmed.startsWith('[')) {
90
+ inAutoloadSection = trimmed === '[autoload]';
91
+ return line;
92
+ }
93
+ if (inAutoloadSection) {
94
+ // The surrounding `"?` are intentional: Godot always writes quotes, but
95
+ // hand-edited project.godot files sometimes omit them. Tolerating both
96
+ // shapes means a missing quote pair doesn't silently drop the entry.
97
+ const match = trimmed.match(/^(\w+)="?(\*?)([^"]*?)"?$/);
98
+ if (match && match[1] === name) {
99
+ const effectiveSingleton = singleton !== undefined ? singleton : match[2] === '*';
100
+ const effectivePath = newPath !== undefined ? normalizeAutoloadPath(newPath) : match[3];
101
+ updated = true;
102
+ return `${name}="${effectiveSingleton ? '*' : ''}${effectivePath}"`;
103
+ }
104
+ }
105
+ return line;
106
+ });
107
+ if (updated)
108
+ writeFileSync(projectFilePath, newLines.join('\n'), 'utf8');
109
+ return updated;
110
+ }
111
+ //# sourceMappingURL=autoload-ini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoload-ini.js","sourceRoot":"","sources":["../../src/utils/autoload-ini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Owns the McpBridge autoload artifact: the script copy in the target project,
3
+ * the `[autoload]` entry in project.godot, the `.mcp/.gdignore` marker, and the
4
+ * `.gitignore` augmentation. GodotRunner delegates to this for inject/cleanup
5
+ * during run_project / attach_project / stop_project flows.
6
+ *
7
+ * The project-root bridge script is runtime-owned and refreshed on first
8
+ * injection for a manager session so a rebuilt server cannot talk to stale
9
+ * GDScript from an earlier run. Idempotent within a session via
10
+ * `injectedProjects`: a second `inject()` call for the same path short-circuits
11
+ * without rewriting project.godot.
12
+ */
13
+ export declare class BridgeManager {
14
+ private bridgeScriptPath;
15
+ private injectedProjects;
16
+ constructor(bridgeScriptPath: string);
17
+ inject(projectPath: string): void;
18
+ cleanup(projectPath: string): void;
19
+ /**
20
+ * If project.godot still has an `McpBridge=` line but the script file is
21
+ * missing, the autoload would crash every subsequent headless op. Detect and
22
+ * clean the orphan before running an operation.
23
+ */
24
+ repairOrphaned(projectPath: string): void;
25
+ private removeBridgeArtifacts;
26
+ private ensureMcpGdignore;
27
+ private ensureGitignored;
28
+ }
29
+ //# sourceMappingURL=bridge-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-manager.d.ts","sourceRoot":"","sources":["../../src/utils/bridge-manager.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IAGZ,OAAO,CAAC,gBAAgB;IAFpC,OAAO,CAAC,gBAAgB,CAA0B;gBAE9B,gBAAgB,EAAE,MAAM;IAE5C,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IA6BjC,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKlC;;;;OAIG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAgBzC,OAAO,CAAC,qBAAqB;IAkC7B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,gBAAgB;CAkBzB"}
@@ -0,0 +1,136 @@
1
+ import { join } from 'path';
2
+ import { existsSync, readFileSync, writeFileSync, copyFileSync, unlinkSync, mkdirSync } from 'fs';
3
+ import { logDebug } from './logger.js';
4
+ import { addAutoloadEntry, parseAutoloads, removeAutoloadEntry } from './autoload-ini.js';
5
+ const BRIDGE_AUTOLOAD_NAME = 'McpBridge';
6
+ const BRIDGE_SCRIPT_FILENAME = 'mcp_bridge.gd';
7
+ const MCP_GITIGNORE_ENTRY = '.mcp/';
8
+ /**
9
+ * Owns the McpBridge autoload artifact: the script copy in the target project,
10
+ * the `[autoload]` entry in project.godot, the `.mcp/.gdignore` marker, and the
11
+ * `.gitignore` augmentation. GodotRunner delegates to this for inject/cleanup
12
+ * during run_project / attach_project / stop_project flows.
13
+ *
14
+ * The project-root bridge script is runtime-owned and refreshed on first
15
+ * injection for a manager session so a rebuilt server cannot talk to stale
16
+ * GDScript from an earlier run. Idempotent within a session via
17
+ * `injectedProjects`: a second `inject()` call for the same path short-circuits
18
+ * without rewriting project.godot.
19
+ */
20
+ export class BridgeManager {
21
+ bridgeScriptPath;
22
+ injectedProjects = new Set();
23
+ constructor(bridgeScriptPath) {
24
+ this.bridgeScriptPath = bridgeScriptPath;
25
+ }
26
+ inject(projectPath) {
27
+ // Always refresh the bridge script — a server rebuild updates the source
28
+ // GDScript, and a same-session re-inject must propagate that to the
29
+ // project copy or the running game would talk to stale code.
30
+ const destScript = join(projectPath, BRIDGE_SCRIPT_FILENAME);
31
+ copyFileSync(this.bridgeScriptPath, destScript);
32
+ logDebug(`Refreshed bridge autoload at ${destScript}`);
33
+ if (this.injectedProjects.has(projectPath)) {
34
+ logDebug('Bridge already injected for this project; refreshed script only.');
35
+ return;
36
+ }
37
+ this.ensureMcpGdignore(projectPath);
38
+ this.ensureGitignored(projectPath);
39
+ const projectFile = join(projectPath, 'project.godot');
40
+ const existing = parseAutoloads(projectFile);
41
+ const alreadyRegistered = existing.some((a) => a.name === BRIDGE_AUTOLOAD_NAME);
42
+ if (alreadyRegistered) {
43
+ logDebug('Bridge autoload already present, skipping injection');
44
+ }
45
+ else {
46
+ addAutoloadEntry(projectFile, BRIDGE_AUTOLOAD_NAME, BRIDGE_SCRIPT_FILENAME, true);
47
+ logDebug('Injected bridge autoload into project.godot');
48
+ }
49
+ this.injectedProjects.add(projectPath);
50
+ }
51
+ cleanup(projectPath) {
52
+ this.removeBridgeArtifacts(projectPath);
53
+ this.injectedProjects.delete(projectPath);
54
+ }
55
+ /**
56
+ * If project.godot still has an `McpBridge=` line but the script file is
57
+ * missing, the autoload would crash every subsequent headless op. Detect and
58
+ * clean the orphan before running an operation.
59
+ */
60
+ repairOrphaned(projectPath) {
61
+ const projectFile = join(projectPath, 'project.godot');
62
+ const bridgeScript = join(projectPath, BRIDGE_SCRIPT_FILENAME);
63
+ if (!existsSync(projectFile))
64
+ return;
65
+ if (existsSync(bridgeScript))
66
+ return;
67
+ try {
68
+ const content = readFileSync(projectFile, 'utf8');
69
+ if (content.includes(`${BRIDGE_AUTOLOAD_NAME}=`)) {
70
+ this.removeBridgeArtifacts(projectPath);
71
+ logDebug('Cleaned up orphaned McpBridge autoload entry');
72
+ }
73
+ }
74
+ catch (err) {
75
+ logDebug(`Non-fatal: Failed to check/repair orphaned bridge: ${err}`);
76
+ }
77
+ }
78
+ removeBridgeArtifacts(projectPath) {
79
+ try {
80
+ const projectFile = join(projectPath, 'project.godot');
81
+ if (existsSync(projectFile)) {
82
+ const removed = removeAutoloadEntry(projectFile, BRIDGE_AUTOLOAD_NAME);
83
+ if (removed) {
84
+ logDebug(`Removed ${BRIDGE_AUTOLOAD_NAME} autoload from project.godot`);
85
+ }
86
+ }
87
+ }
88
+ catch (err) {
89
+ logDebug(`Non-fatal: Failed to clean ${BRIDGE_AUTOLOAD_NAME} from project.godot: ${err}`);
90
+ }
91
+ try {
92
+ const scriptFile = join(projectPath, BRIDGE_SCRIPT_FILENAME);
93
+ if (existsSync(scriptFile)) {
94
+ unlinkSync(scriptFile);
95
+ logDebug(`Removed ${BRIDGE_SCRIPT_FILENAME} from project`);
96
+ }
97
+ }
98
+ catch (err) {
99
+ logDebug(`Non-fatal: Failed to remove ${BRIDGE_SCRIPT_FILENAME}: ${err}`);
100
+ }
101
+ try {
102
+ const uidFile = join(projectPath, `${BRIDGE_SCRIPT_FILENAME}.uid`);
103
+ if (existsSync(uidFile)) {
104
+ unlinkSync(uidFile);
105
+ logDebug(`Removed ${BRIDGE_SCRIPT_FILENAME}.uid from project`);
106
+ }
107
+ }
108
+ catch (err) {
109
+ logDebug(`Non-fatal: Failed to remove ${BRIDGE_SCRIPT_FILENAME}.uid: ${err}`);
110
+ }
111
+ }
112
+ ensureMcpGdignore(projectPath) {
113
+ const mcpDir = join(projectPath, '.mcp');
114
+ if (!existsSync(mcpDir)) {
115
+ mkdirSync(mcpDir, { recursive: true });
116
+ }
117
+ writeFileSync(join(mcpDir, '.gdignore'), '', 'utf8');
118
+ logDebug('Created .mcp/.gdignore');
119
+ }
120
+ ensureGitignored(projectPath) {
121
+ const gitignorePath = join(projectPath, '.gitignore');
122
+ if (existsSync(gitignorePath)) {
123
+ const gitignoreContent = readFileSync(gitignorePath, 'utf8');
124
+ if (!gitignoreContent.includes(MCP_GITIGNORE_ENTRY)) {
125
+ const newline = gitignoreContent.endsWith('\n') ? '' : '\n';
126
+ writeFileSync(gitignorePath, gitignoreContent + newline + MCP_GITIGNORE_ENTRY + '\n', 'utf8');
127
+ logDebug('Added .mcp/ to existing .gitignore');
128
+ }
129
+ }
130
+ else {
131
+ writeFileSync(gitignorePath, MCP_GITIGNORE_ENTRY + '\n', 'utf8');
132
+ logDebug('Created .gitignore with .mcp/ entry');
133
+ }
134
+ }
135
+ }
136
+ //# sourceMappingURL=bridge-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-manager.js","sourceRoot":"","sources":["../../src/utils/bridge-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Wire format shared between the Node-side `GodotRunner.sendCommand` and the
3
+ * GDScript-side `McpBridge` autoload.
4
+ *
5
+ * KEEP IN SYNC: src/scripts/mcp_bridge.gd implements the same framing on the
6
+ * Godot side. Any change here MUST be mirrored there (and vice versa).
7
+ *
8
+ * Frame: 4-byte big-endian length prefix + UTF-8 JSON payload.
9
+ * Max frame size is 16 MiB; oversize frames are rejected on receive.
10
+ */
11
+ export declare const DEFAULT_BRIDGE_PORT = 9900;
12
+ export declare const MAX_FRAME_BYTES: number;
13
+ /**
14
+ * Resolve the bridge port. Reads `MCP_BRIDGE_PORT` from the environment, falls
15
+ * back to {@link DEFAULT_BRIDGE_PORT}. Invalid values fall back to the default.
16
+ */
17
+ export declare function getBridgePort(): number;
18
+ /**
19
+ * Encode a JSON string as a length-prefixed frame.
20
+ */
21
+ export declare function encodeFrame(payload: string): Buffer;
22
+ export interface ParseFramesResult {
23
+ frames: Buffer[];
24
+ remainder: Buffer;
25
+ }
26
+ /**
27
+ * Pull as many complete frames as possible from a streaming buffer. Any
28
+ * partial frame at the tail is returned as `remainder` for the next call.
29
+ *
30
+ * Throws if a header advertises a payload larger than {@link MAX_FRAME_BYTES} —
31
+ * the caller should treat this as a fatal protocol error and close the socket.
32
+ */
33
+ export declare function parseFrames(buffer: Buffer): ParseFramesResult;
34
+ //# sourceMappingURL=bridge-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-protocol.d.ts","sourceRoot":"","sources":["../../src/utils/bridge-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,eAAe,QAAmB,CAAC;AAGhD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAQtC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAoB7D"}