godot-cli 0.28.0 → 0.30.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 (44) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +40 -5
  3. package/dist/cli.d.ts +1 -0
  4. package/dist/cli.js +1 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/close.d.ts +3 -0
  7. package/dist/commands/close.js +38 -0
  8. package/dist/commands/close.js.map +1 -1
  9. package/dist/commands/exec.d.ts +2 -0
  10. package/dist/commands/exec.js +101 -0
  11. package/dist/commands/exec.js.map +1 -0
  12. package/dist/commands/open.js +61 -1
  13. package/dist/commands/open.js.map +1 -1
  14. package/dist/commands/run-tool-builder.d.ts +9 -1
  15. package/dist/commands/run-tool-builder.js +1 -1
  16. package/dist/commands/run-tool-builder.js.map +1 -1
  17. package/dist/index.js +2 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/lib/exec.d.ts +61 -0
  20. package/dist/lib/exec.js +75 -0
  21. package/dist/lib/exec.js.map +1 -0
  22. package/dist/lib/session.d.ts +78 -0
  23. package/dist/lib/session.js +178 -0
  24. package/dist/lib/session.js.map +1 -0
  25. package/dist/lib.d.ts +4 -0
  26. package/dist/lib.js +2 -0
  27. package/dist/lib.js.map +1 -1
  28. package/dist/utils/addon-deps.d.ts +1 -1
  29. package/dist/utils/addon-deps.js +10 -3
  30. package/dist/utils/addon-deps.js.map +1 -1
  31. package/dist/utils/connection.d.ts +18 -0
  32. package/dist/utils/connection.js +22 -3
  33. package/dist/utils/connection.js.map +1 -1
  34. package/dist/utils/csproj-deps.js +7 -0
  35. package/dist/utils/csproj-deps.js.map +1 -1
  36. package/dist/utils/extensions-catalog.js +20 -93
  37. package/dist/utils/extensions-catalog.js.map +1 -1
  38. package/dist/utils/input.d.ts +2 -0
  39. package/dist/utils/input.js +9 -0
  40. package/dist/utils/input.js.map +1 -1
  41. package/dist/utils/skills.d.ts +1 -1
  42. package/dist/utils/skills.js +31 -63
  43. package/dist/utils/skills.js.map +1 -1
  44. package/package.json +2 -2
@@ -0,0 +1,61 @@
1
+ import type { EnsureResult } from '@baizor/gamedev-cli-core';
2
+ import { type EnsureEditorDeps, type EnsureEditorOptions, type EnsureEditorResult } from './session.js';
3
+ import type { RunToolFailure, RunToolOptions, RunToolResult } from './types.js';
4
+ export declare const SCRIPT_EXECUTE_TOOL = "script-execute";
5
+ /** Default `script-execute` call timeout. */
6
+ export declare const DEFAULT_EXEC_TIMEOUT_MS = 180000;
7
+ /** Injection points for tests. */
8
+ export interface ExecDeps extends EnsureEditorDeps {
9
+ invoke: (options: RunToolOptions) => Promise<RunToolResult>;
10
+ }
11
+ export interface ExecCodeOptions extends EnsureEditorOptions {
12
+ code: string;
13
+ usings?: string[];
14
+ include?: string[];
15
+ /** Tool call timeout. Default 180000. */
16
+ timeoutMs?: number;
17
+ deps?: Partial<ExecDeps>;
18
+ }
19
+ export interface ExecCodeSuccess {
20
+ kind: 'success';
21
+ success: true;
22
+ /** The server that ran the code. */
23
+ baseUrl: string;
24
+ /** How the editor was obtained (cli-core EditorSession): `running`, `foreign`, `owned` or `started`. */
25
+ editor: EnsureResult<string>['source'];
26
+ /** Parsed `script-execute` response body. */
27
+ data: unknown;
28
+ }
29
+ export interface ExecCodeFailure {
30
+ kind: 'failure';
31
+ success: false;
32
+ /** {@link ensureEditor}'s reasons, or `tool-failed`: the call failed. */
33
+ reason: Extract<EnsureEditorResult, {
34
+ kind: 'failure';
35
+ }>['reason'] | 'tool-failed';
36
+ /** The server that was called (`tool-failed` only). */
37
+ baseUrl?: string;
38
+ /** The underlying call failure (`tool-failed` only). */
39
+ toolFailure?: RunToolFailure;
40
+ message: string;
41
+ error?: Error;
42
+ }
43
+ export type ExecCodeResult = ExecCodeSuccess | ExecCodeFailure;
44
+ /**
45
+ * Run C# in the project's editor. A running editor (GUI or headless) is reused and never closed; otherwise one is
46
+ * started headless (or windowed) on the project's local server that quits by itself after `idleSeconds` without
47
+ * tool calls, so the next call stays warm.
48
+ */
49
+ export declare function execCode(options: ExecCodeOptions): Promise<ExecCodeResult>;
50
+ /** Request body for `script-execute`; empty lists are left out. */
51
+ export declare function buildScriptExecuteInput(code: string, usings: string[], include: string[]): Record<string, unknown>;
52
+ /** The tool's own error text when the server reports one (`{ error }` / text content), else the call failure. */
53
+ export declare function toolErrorText(failure: RunToolFailure): string;
54
+ /**
55
+ * The tool's text output and whether it reported success. RQL tool format (the default): the text content
56
+ * (`System.Int32: 3`, then `logs:` lines). JSON format: `{ structured: { result: { result, logs } } }`, shown the same way.
57
+ */
58
+ export declare function readToolResponse(data: unknown): {
59
+ ok: boolean;
60
+ text: string;
61
+ };
@@ -0,0 +1,75 @@
1
+ // Library-safe `execCode`: run C# in a project's Godot editor through `script-execute`, starting a warm headless
2
+ // editor (cli-core EditorSession) when none is running. No console output, no `process.exit`.
3
+ import { runTool } from './run-tool.js';
4
+ import { ensureEditor } from './session.js';
5
+ export const SCRIPT_EXECUTE_TOOL = 'script-execute';
6
+ /** Default `script-execute` call timeout. */
7
+ export const DEFAULT_EXEC_TIMEOUT_MS = 180000;
8
+ /**
9
+ * Run C# in the project's editor. A running editor (GUI or headless) is reused and never closed; otherwise one is
10
+ * started headless (or windowed) on the project's local server that quits by itself after `idleSeconds` without
11
+ * tool calls, so the next call stays warm.
12
+ */
13
+ export async function execCode(options) {
14
+ const editor = await ensureEditor(options);
15
+ if (editor.kind === 'failure')
16
+ return editor;
17
+ const { ensured } = editor;
18
+ options.onStatus?.('Running...');
19
+ const baseUrl = ensured.ready;
20
+ const result = await (options.deps?.invoke ?? runTool)({
21
+ toolName: SCRIPT_EXECUTE_TOOL,
22
+ url: baseUrl,
23
+ ...(options.token ? { token: options.token } : {}),
24
+ input: buildScriptExecuteInput(options.code, options.usings ?? [], options.include ?? []),
25
+ timeoutMs: options.timeoutMs ?? DEFAULT_EXEC_TIMEOUT_MS,
26
+ });
27
+ if (result.kind === 'failure') {
28
+ return { kind: 'failure', success: false, reason: 'tool-failed', baseUrl, toolFailure: result, message: toolErrorText(result), error: result.error };
29
+ }
30
+ return { kind: 'success', success: true, baseUrl, editor: ensured.source, data: result.data };
31
+ }
32
+ /** Request body for `script-execute`; empty lists are left out. */
33
+ export function buildScriptExecuteInput(code, usings, include) {
34
+ return {
35
+ csharpCode: code,
36
+ ...(usings.length > 0 ? { usings } : {}),
37
+ ...(include.length > 0 ? { include } : {}),
38
+ };
39
+ }
40
+ /** The tool's own error text when the server reports one (`{ error }` / text content), else the call failure. */
41
+ export function toolErrorText(failure) {
42
+ const data = failure.data;
43
+ if (typeof data === 'string' && data.length > 0)
44
+ return data;
45
+ if (data && typeof data === 'object' && typeof data.error === 'string')
46
+ return data.error;
47
+ return failure.message;
48
+ }
49
+ /**
50
+ * The tool's text output and whether it reported success. RQL tool format (the default): the text content
51
+ * (`System.Int32: 3`, then `logs:` lines). JSON format: `{ structured: { result: { result, logs } } }`, shown the same way.
52
+ */
53
+ export function readToolResponse(data) {
54
+ if (typeof data === 'string')
55
+ return { ok: true, text: data };
56
+ const response = data;
57
+ const ok = response?.status === undefined || response.status === 'success';
58
+ const texts = (response?.content ?? []).filter((c) => c?.type === 'text' && typeof c.text === 'string').map((c) => c.text);
59
+ if (texts.length > 0)
60
+ return { ok, text: texts.join('\n') };
61
+ const result = response?.structured?.result;
62
+ if (result && typeof result === 'object' && 'result' in result) {
63
+ const member = result.result;
64
+ // A scalar member carries `value`; an object (Node, Vector3, ...) its `fields` / `props`.
65
+ const value = member?.value !== undefined ? member.value : member?.fields !== undefined || member?.props !== undefined
66
+ ? { ...(member.fields !== undefined ? { fields: member.fields } : {}), ...(member.props !== undefined ? { props: member.props } : {}) }
67
+ : null;
68
+ let text = member ? `${member.typeName ?? 'object'}: ${typeof value === 'string' ? value : JSON.stringify(value)}` : 'null';
69
+ if (Array.isArray(result.logs) && result.logs.length > 0)
70
+ text += '\nlogs:\n' + result.logs.join('\n');
71
+ return { ok, text };
72
+ }
73
+ return { ok, text: data === undefined ? '' : JSON.stringify(data) };
74
+ }
75
+ //# sourceMappingURL=exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/lib/exec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { EditorSession, type EngineAdapter, type EnsureResult, type SessionProcessOps } from '@baizor/gamedev-cli-core';
2
+ import type { BuildProjectResult } from './types.js';
3
+ /** The plugin's system tool that saves and quits a CLI-started editor (a windowless one gets no WM_CLOSE). */
4
+ export declare const SESSION_CLOSE_TOOL = "session-close";
5
+ export interface GodotSessionOptions {
6
+ projectPath: string;
7
+ /**
8
+ * The server the editor's plugin connects to and the session probes. Default: the project's local port
9
+ * (`http://localhost:<derived>`). A non-loopback URL is rejected: headless sessions are local only.
10
+ */
11
+ url?: string;
12
+ /** Bearer token: the started editor uses it (auth Required) and every probe / call sends it. */
13
+ token?: string;
14
+ /** Explicit Godot executable (else GODOT_BIN / PATH / common install locations). */
15
+ editorPath?: string;
16
+ /** A started editor quits after this many seconds without tool calls. `0` = never. Default 300. */
17
+ idleSeconds?: number;
18
+ /** How long to wait for a started editor's MCP server. Default 300000. */
19
+ readyTimeoutMs?: number;
20
+ onStatus?: (message: string) => void;
21
+ /** Tests: OS process primitives. */
22
+ processOps?: Partial<SessionProcessOps>;
23
+ }
24
+ export interface GodotSession {
25
+ session: EditorSession<string>;
26
+ /** One readiness check of the local server (the session's warm-path probe): the URL, or undefined. */
27
+ probe: () => Promise<string | undefined>;
28
+ /** The local server URL the session probes and a started editor binds. */
29
+ url: string;
30
+ }
31
+ /**
32
+ * Environment of an editor the session starts: Custom mode on the local URL, the plugin starts the local server
33
+ * (there is no dock button to press in a headless editor), and the token when one is given.
34
+ */
35
+ export declare function sessionEditorEnv(url: string, token: string | undefined): Record<string, string>;
36
+ /** The Godot adapter with the CLI's hooks: running-editor detection and the plugin-side graceful close. */
37
+ export declare function godotSessionAdapter(url: string, token: string | undefined, readNonce: () => string | undefined): EngineAdapter;
38
+ /** Build the session of a Godot project. Throws when `url` is not local. */
39
+ export declare function createGodotSession(options: GodotSessionOptions): GodotSession;
40
+ /**
41
+ * Build the C# assembly before an editor is started (Godot does not build it in a headless editor, and a missing
42
+ * assembly disables the addon). Serialized per project, so parallel cold calls do not run two MSBuilds on one obj/
43
+ * folder; the second one finds an up-to-date build.
44
+ */
45
+ export declare function buildBeforeStart(projectPath: string): Promise<BuildProjectResult>;
46
+ /** Injection points for tests. */
47
+ export interface EnsureEditorDeps {
48
+ ensure: (session: EditorSession<string>, mode: 'headless' | 'window') => Promise<EnsureResult<string>>;
49
+ build: (projectPath: string) => Promise<BuildProjectResult>;
50
+ }
51
+ export interface EnsureEditorOptions extends GodotSessionOptions {
52
+ /** Start the editor with a window instead of headless (only when none is running yet). */
53
+ window?: boolean;
54
+ /** Build the C# assembly before starting an editor. Default true. */
55
+ build?: boolean;
56
+ deps?: Partial<EnsureEditorDeps>;
57
+ }
58
+ export type EnsureEditorResult = {
59
+ kind: 'success';
60
+ success: true;
61
+ godot: GodotSession;
62
+ ensured: EnsureResult<string>;
63
+ } | {
64
+ kind: 'failure';
65
+ success: false;
66
+ /**
67
+ * `invalid-options`: e.g. a non-local URL; `build-failed`: the C# build before the start failed;
68
+ * `launch-failed`: no editor could be started; `not-ready`: its server never answered.
69
+ */
70
+ reason: 'invalid-options' | 'build-failed' | 'launch-failed' | 'not-ready';
71
+ message: string;
72
+ error?: Error;
73
+ };
74
+ /**
75
+ * A ready editor of the project (the `exec` / `open --headless` policy): reuse a running one, otherwise build the
76
+ * C# assembly and start ours.
77
+ */
78
+ export declare function ensureEditor(options: EnsureEditorOptions): Promise<EnsureEditorResult>;
@@ -0,0 +1,178 @@
1
+ // Godot editor sessions on the shared cli-core EditorSession (Code-Exec plan §4.6): reuse any running editor of
2
+ // the project, otherwise start our own (headless by default) connected to the project's LOCAL MCP server, with a
3
+ // lease so only our own editor is ever closed. Library-safe: no console output, no `process.exit`.
4
+ import * as fs from 'fs';
5
+ import * as os from 'os';
6
+ import * as path from 'path';
7
+ import { defaultSessionProcessOps, EditorSession, EditorSessionError, CredentialLockBusyError, MachineCredentialLock, godotAdapter, mcpReadinessProbe, SESSION_DIR_NAME, } from '@baizor/gamedev-cli-core';
8
+ import { buildProject } from './build.js';
9
+ import { runSystemTool } from './run-tool.js';
10
+ import { findGodotBinary } from '../utils/godot-editor.js';
11
+ import { findGodotProcess } from '../utils/godot-process.js';
12
+ import { isLocalhostUrl } from '../utils/project-marker.js';
13
+ import { ENV_AUTH_OPTION, ENV_CONNECTION_MODE, ENV_HOST, ENV_START_SERVER, ENV_TOKEN, localProjectUrl, } from '../utils/connection.js';
14
+ /** The plugin's system tool that saves and quits a CLI-started editor (a windowless one gets no WM_CLOSE). */
15
+ export const SESSION_CLOSE_TOOL = 'session-close';
16
+ /** Serializes the pre-start C# build of a project (beside the session lock). */
17
+ const BUILD_LOCK_FILE_NAME = 'build.lock';
18
+ /** How long to wait for a user's own editor whose local server does not answer yet (it may still be loading). */
19
+ const FOREIGN_READY_TIMEOUT_MS = 20000;
20
+ /**
21
+ * Environment of an editor the session starts: Custom mode on the local URL, the plugin starts the local server
22
+ * (there is no dock button to press in a headless editor), and the token when one is given.
23
+ */
24
+ export function sessionEditorEnv(url, token) {
25
+ return {
26
+ [ENV_CONNECTION_MODE]: 'Custom',
27
+ [ENV_HOST]: url,
28
+ [ENV_START_SERVER]: 'true',
29
+ ...(token ? { [ENV_TOKEN]: token, [ENV_AUTH_OPTION]: 'Required' } : {}),
30
+ };
31
+ }
32
+ /** The Godot adapter with the CLI's hooks: running-editor detection and the plugin-side graceful close. */
33
+ export function godotSessionAdapter(url, token, readNonce) {
34
+ return {
35
+ ...godotAdapter,
36
+ editor: {
37
+ ...godotAdapter.editor,
38
+ findRunningEditor: async (projectRoot) => findGodotProcess(projectRoot) !== null,
39
+ requestClose: async () => {
40
+ const nonce = readNonce();
41
+ if (nonce === undefined)
42
+ return false;
43
+ const result = await runSystemTool({
44
+ toolName: SESSION_CLOSE_TOOL,
45
+ url,
46
+ ...(token ? { token } : {}),
47
+ input: { nonce },
48
+ timeoutMs: 15000,
49
+ });
50
+ // A refusing tool (wrong nonce, an addon without session-close) answers 200 with status "error".
51
+ return result.kind === 'success' && result.data?.status !== 'error';
52
+ },
53
+ },
54
+ };
55
+ }
56
+ /** Build the session of a Godot project. Throws when `url` is not local. */
57
+ export function createGodotSession(options) {
58
+ const projectRoot = path.resolve(options.projectPath);
59
+ const url = (options.url ?? localProjectUrl(projectRoot)).replace(/\/+$/, '');
60
+ if (!isLocalhostUrl(url)) {
61
+ throw new Error(`editor sessions connect to a local server only; ${url} is not on this machine`);
62
+ }
63
+ const probe = mcpReadinessProbe({ urls: [url], ...(options.token ? { token: options.token } : {}) });
64
+ const session = new EditorSession({
65
+ // requestClose runs long after construction: it reads the lease of this very session.
66
+ adapter: godotSessionAdapter(url, options.token, () => session.readLease()?.nonce),
67
+ projectRoot,
68
+ probeReady: probe,
69
+ editorBinary: () => {
70
+ const binary = findGodotBinary(options.editorPath);
71
+ if (!binary)
72
+ throw new Error('no Godot editor binary found (pass --editor-path or set GODOT_BIN)');
73
+ return binary;
74
+ },
75
+ env: sessionEditorEnv(url, options.token),
76
+ ...(options.idleSeconds !== undefined ? { idleSeconds: options.idleSeconds } : {}),
77
+ ...(options.readyTimeoutMs !== undefined ? { readyTimeoutMs: options.readyTimeoutMs } : {}),
78
+ ...(options.onStatus ? { onStatus: options.onStatus } : {}),
79
+ ...(options.processOps ? { processOps: options.processOps } : {}),
80
+ });
81
+ return { session, probe, url };
82
+ }
83
+ /**
84
+ * Build the C# assembly before an editor is started (Godot does not build it in a headless editor, and a missing
85
+ * assembly disables the addon). Serialized per project, so parallel cold calls do not run two MSBuilds on one obj/
86
+ * folder; the second one finds an up-to-date build.
87
+ */
88
+ export async function buildBeforeStart(projectPath) {
89
+ const dir = path.join(path.resolve(projectPath), SESSION_DIR_NAME);
90
+ removeDeadBuildLock(path.join(dir, BUILD_LOCK_FILE_NAME));
91
+ const lock = new MachineCredentialLock(dir, {
92
+ lockFileName: BUILD_LOCK_FILE_NAME,
93
+ staleMs: 600000,
94
+ acquireBudgetMs: 900000,
95
+ });
96
+ return lock.withLock(() => buildProject({ projectPath }));
97
+ }
98
+ /**
99
+ * A ready editor of the project (the `exec` / `open --headless` policy): reuse a running one, otherwise build the
100
+ * C# assembly and start ours.
101
+ */
102
+ export async function ensureEditor(options) {
103
+ const deps = {
104
+ ensure: (session, mode) => session.ensure({ mode }),
105
+ build: buildBeforeStart,
106
+ ...options.deps,
107
+ };
108
+ const fail = (reason, err, hint = '') => {
109
+ const error = err instanceof Error ? err : new Error(String(err));
110
+ return { kind: 'failure', success: false, reason, message: error.message + hint, error };
111
+ };
112
+ let godot;
113
+ try {
114
+ godot = createGodotSession(options);
115
+ }
116
+ catch (err) {
117
+ return fail('invalid-options', err);
118
+ }
119
+ // Warm path: the local server answers, so an editor is up (the session would only probe it again).
120
+ const running = await godot.probe();
121
+ if (running !== undefined)
122
+ return { kind: 'success', success: true, godot, ensured: { ready: running, source: 'running' } };
123
+ const ours = await godot.session.ownedSession();
124
+ const foreign = ours === undefined && godot.session.readLease() === undefined && findGodotProcess(godot.session.projectRoot) !== null;
125
+ if (foreign) {
126
+ // The user's editor without a reachable local server: it may still be loading, but do not wait the full start budget.
127
+ godot = createGodotSession({ ...options, readyTimeoutMs: Math.min(options.readyTimeoutMs ?? FOREIGN_READY_TIMEOUT_MS, FOREIGN_READY_TIMEOUT_MS) });
128
+ }
129
+ else if (options.build !== false && ours === undefined) {
130
+ // Build only when an editor is about to be started: none of ours runs (or is starting), and no other editor has the project.
131
+ options.onStatus?.('Building C# assembly...');
132
+ let built;
133
+ try {
134
+ built = await deps.build(options.projectPath);
135
+ }
136
+ catch (err) {
137
+ return fail('build-failed', err, err instanceof CredentialLockBusyError ? ' (another godot-cli call is building this project)' : '');
138
+ }
139
+ if (built.kind === 'failure')
140
+ return fail('build-failed', built.error);
141
+ }
142
+ try {
143
+ return { kind: 'success', success: true, godot, ensured: await deps.ensure(godot.session, options.window ? 'window' : 'headless') };
144
+ }
145
+ catch (err) {
146
+ const sessionReason = err instanceof EditorSessionError ? err.reason : undefined;
147
+ let hint = '';
148
+ if (sessionReason === 'not-ready') {
149
+ if (godot.session.readLease() === undefined) {
150
+ // The user's editor, connected elsewhere or without its local server.
151
+ hint = ` (an editor of this project is running, but its local MCP server ${godot.url} does not answer: start the server in its AI Game Developer dock in Custom mode, or close that editor)`;
152
+ }
153
+ else {
154
+ // Our editor started but its plugin never answered (e.g. the addon failed to load): it would never idle out.
155
+ const closed = await godot.session.closeOwned({ timeoutMs: 5000, force: true });
156
+ hint = closed.kind === 'closed' ? ` (stopped the unresponsive editor, PID ${closed.pid}; see its log)` : '';
157
+ }
158
+ }
159
+ return fail(sessionReason === 'exited' || sessionReason === 'not-ready' ? 'not-ready' : 'launch-failed', err, hint);
160
+ }
161
+ }
162
+ /**
163
+ * Delete a build lock whose holder was this machine and is gone (a Ctrl+C mid-build never releases it); the lock
164
+ * protocol alone would wait out its staleness bar. Best-effort.
165
+ */
166
+ function removeDeadBuildLock(lockPath) {
167
+ try {
168
+ const holder = JSON.parse(fs.readFileSync(lockPath, 'utf-8'));
169
+ if (typeof holder.pid === 'number' && typeof holder.hostId === 'string' && holder.hostId.toLowerCase() === os.hostname().toLowerCase()
170
+ && !defaultSessionProcessOps.isAlive(holder.pid)) {
171
+ fs.rmSync(lockPath, { force: true });
172
+ }
173
+ }
174
+ catch {
175
+ // no lock, or one we cannot read: the lock protocol decides
176
+ }
177
+ }
178
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"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"}
package/dist/lib.d.ts CHANGED
@@ -1,4 +1,8 @@
1
1
  export { openProject } from './lib/open.js';
2
+ export { execCode, readToolResponse, buildScriptExecuteInput, SCRIPT_EXECUTE_TOOL } from './lib/exec.js';
3
+ export type { ExecCodeOptions, ExecCodeResult, ExecCodeSuccess, ExecCodeFailure } from './lib/exec.js';
4
+ export { ensureEditor, SESSION_CLOSE_TOOL } from './lib/session.js';
5
+ export type { GodotSessionOptions, EnsureEditorOptions, EnsureEditorResult } from './lib/session.js';
2
6
  export { buildProject } from './lib/build.js';
3
7
  export { createProject } from './lib/create-project.js';
4
8
  export { runTool, runSystemTool } from './lib/run-tool.js';
package/dist/lib.js CHANGED
@@ -13,6 +13,8 @@
13
13
  // Consumers: `import { openProject } from 'godot-cli'` (maps to this file
14
14
  // via the `exports` field in package.json).
15
15
  export { openProject } from './lib/open.js';
16
+ export { execCode, readToolResponse, buildScriptExecuteInput, SCRIPT_EXECUTE_TOOL } from './lib/exec.js';
17
+ export { ensureEditor, SESSION_CLOSE_TOOL } from './lib/session.js';
16
18
  export { buildProject } from './lib/build.js';
17
19
  export { createProject } from './lib/create-project.js';
18
20
  export { runTool, runSystemTool } from './lib/run-tool.js';
package/dist/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,eAAe;AACf,+EAA+E;AAC/E,wDAAwD;AACxD,oDAAoD;AACpD,yEAAyE;AACzE,4DAA4D;AAC5D,+EAA+E;AAC/E,gEAAgE;AAChE,6EAA6E;AAC7E,EAAE;AACF,0EAA0E;AAC1E,4CAA4C;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,0FAA0F;AAC1F,yFAAyF;AACzF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,eAAe;AACf,+EAA+E;AAC/E,wDAAwD;AACxD,oDAAoD;AACpD,yEAAyE;AACzE,4DAA4D;AAC5D,+EAA+E;AAC/E,gEAAgE;AAChE,6EAA6E;AAC7E,EAAE;AACF,0EAA0E;AAC1E,4CAA4C;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzG,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,0FAA0F;AAC1F,yFAAyF;AACzF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC"}
@@ -21,7 +21,7 @@ export interface AddonEmbeddedResource {
21
21
  /**
22
22
  * The NuGet `PackageReference`s the addon of THIS CLI's version needs (fallback when
23
23
  * the installed addon carries no `nuget-deps.json`), mirroring `Godot-MCP.csproj`.
24
- * Order matches the addon csproj (ReflectorNet first, then McpPlugin).
24
+ * Order matches the addon csproj (ReflectorNet, McpPlugin, Rql, then Code-Exec and its Roslyn).
25
25
  */
26
26
  export declare const ADDON_PACKAGE_REFERENCES: readonly AddonPackageReference[];
27
27
  /**
@@ -8,7 +8,10 @@
8
8
  // checkout's `Godot-MCP.csproj` for `--source`). These constants are used only for
9
9
  // addon zips that predate that manifest. They mirror the addon's own reused pins in
10
10
  // `Godot-MCP.csproj` (`com.IvanMurzak.ReflectorNet`, `com.IvanMurzak.McpPlugin`) at
11
- // this CLI's version — the SAME values, never a bump of those pins. A parity test
11
+ // this CLI's version — the SAME values, never a bump of those pins. `com.IvanMurzak.Rql` (the RQL data layer of
12
+ // the editor tools, PolyForm Shield 1.0.0) is a direct dependency of the addon sources since 1.0; Code-Exec
13
+ // (`com.IvanMurzak.CodeExec` + the source-only `.Roslyn` adapter, compiled against the pinned
14
+ // `Microsoft.CodeAnalysis.CSharp`) runs `script-execute`. A parity test
12
15
  // (`cli/tests/addon-deps-parity.test.ts`) reads `Godot-MCP.csproj` and FAILS the
13
16
  // build if these constants ever drift from the addon's pins, so the scaffold can
14
17
  // never silently install a mismatched version.
@@ -17,11 +20,15 @@
17
20
  /**
18
21
  * The NuGet `PackageReference`s the addon of THIS CLI's version needs (fallback when
19
22
  * the installed addon carries no `nuget-deps.json`), mirroring `Godot-MCP.csproj`.
20
- * Order matches the addon csproj (ReflectorNet first, then McpPlugin).
23
+ * Order matches the addon csproj (ReflectorNet, McpPlugin, Rql, then Code-Exec and its Roslyn).
21
24
  */
22
25
  export const ADDON_PACKAGE_REFERENCES = [
23
26
  { id: 'com.IvanMurzak.ReflectorNet', version: '5.4.3' },
24
- { id: 'com.IvanMurzak.McpPlugin', version: '8.7.1' },
27
+ { id: 'com.IvanMurzak.McpPlugin', version: '8.9.0' },
28
+ { id: 'com.IvanMurzak.Rql', version: '0.1.1' },
29
+ { id: 'com.IvanMurzak.CodeExec', version: '0.2.0' },
30
+ { id: 'com.IvanMurzak.CodeExec.Roslyn', version: '0.2.0' },
31
+ { id: 'Microsoft.CodeAnalysis.CSharp', version: '4.12.0' },
25
32
  ];
26
33
  /**
27
34
  * The exact `<EmbeddedResource>`s the consumer's project `.csproj` needs, single-sourced
@@ -1 +1 @@
1
- {"version":3,"file":"addon-deps.js","sourceRoot":"","sources":["../../src/utils/addon-deps.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,mFAAmF;AACnF,oEAAoE;AACpE,6BAA6B;AAC7B,EAAE;AACF,gFAAgF;AAChF,0EAA0E;AAC1E,mFAAmF;AACnF,oFAAoF;AACpF,oFAAoF;AACpF,kFAAkF;AAClF,iFAAiF;AACjF,iFAAiF;AACjF,+CAA+C;AAC/C,EAAE;AACF,sEAAsE;AAwBtE;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAqC;IACxE,EAAE,EAAE,EAAE,6BAA6B,EAAE,OAAO,EAAE,OAAO,EAAE;IACvD,EAAE,EAAE,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,EAAE;CAC5C,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAqC;IACxE;QACE,OAAO,EAAE,0CAA0C;QACnD,WAAW,EAAE,mCAAmC;KACjD;CACO,CAAC;AAEX,wFAAwF;AACxF,MAAM,CAAC,MAAM,yBAAyB,GAAG,mCAAmC,CAAC"}
1
+ {"version":3,"file":"addon-deps.js","sourceRoot":"","sources":["../../src/utils/addon-deps.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,mFAAmF;AACnF,oEAAoE;AACpE,6BAA6B;AAC7B,EAAE;AACF,gFAAgF;AAChF,0EAA0E;AAC1E,mFAAmF;AACnF,oFAAoF;AACpF,oFAAoF;AACpF,gHAAgH;AAChH,4GAA4G;AAC5G,8FAA8F;AAC9F,wEAAwE;AACxE,iFAAiF;AACjF,iFAAiF;AACjF,+CAA+C;AAC/C,EAAE;AACF,sEAAsE;AAwBtE;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAqC;IACxE,EAAE,EAAE,EAAE,6BAA6B,EAAE,OAAO,EAAE,OAAO,EAAE;IACvD,EAAE,EAAE,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,EAAE;IACpD,EAAE,EAAE,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,EAAE;IAC9C,EAAE,EAAE,EAAE,yBAAyB,EAAE,OAAO,EAAE,OAAO,EAAE;IACnD,EAAE,EAAE,EAAE,gCAAgC,EAAE,OAAO,EAAE,OAAO,EAAE;IAC1D,EAAE,EAAE,EAAE,+BAA+B,EAAE,OAAO,EAAE,QAAQ,EAAE;CAClD,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAqC;IACxE;QACE,OAAO,EAAE,0CAA0C;QACnD,WAAW,EAAE,mCAAmC;KACjD;CACO,CAAC;AAEX,wFAAwF;AACxF,MAAM,CAAC,MAAM,yBAAyB,GAAG,mCAAmC,CAAC"}
@@ -10,6 +10,7 @@ export declare const ENV_TOKEN = "GODOT_MCP_TOKEN";
10
10
  export declare const ENV_CONNECTION_MODE = "GODOT_MCP_CONNECTION_MODE";
11
11
  export declare const ENV_AUTH_OPTION = "GODOT_MCP_AUTH_OPTION";
12
12
  export declare const ENV_LOG_LEVEL = "GODOT_MCP_LOG_LEVEL";
13
+ export declare const ENV_START_SERVER = "GODOT_MCP_START_SERVER";
13
14
  export interface ConnectionOptions {
14
15
  path?: string;
15
16
  url?: string;
@@ -70,3 +71,20 @@ export declare function resolveOpenAuthToken(projectPath: string, options: {
70
71
  token?: string;
71
72
  mode?: string;
72
73
  }): Promise<string | undefined>;
74
+ /**
75
+ * The local URL of the project's own server: `http://localhost:<v2-derived port>` (or the enrolled marker's
76
+ * port override), the port a Custom-mode editor binds when no host is configured.
77
+ */
78
+ export declare function localProjectUrl(projectPath: string): string;
79
+ /**
80
+ * Connection of a CLI editor session (`exec`, `open --headless`, `close --owned-only`): always a LOCAL server.
81
+ * URL: `--url`, else a loopback `GODOT_MCP_HOST`, else undefined (the session uses the project's derived port).
82
+ * Token: `--token`, else `GODOT_MCP_TOKEN`. Cloud credentials are never used here.
83
+ */
84
+ export declare function resolveSessionConnection(options: {
85
+ url?: string;
86
+ token?: string;
87
+ }): {
88
+ url?: string;
89
+ token?: string;
90
+ };
@@ -20,6 +20,7 @@ export const ENV_TOKEN = 'GODOT_MCP_TOKEN';
20
20
  export const ENV_CONNECTION_MODE = 'GODOT_MCP_CONNECTION_MODE';
21
21
  export const ENV_AUTH_OPTION = 'GODOT_MCP_AUTH_OPTION';
22
22
  export const ENV_LOG_LEVEL = 'GODOT_MCP_LOG_LEVEL';
23
+ export const ENV_START_SERVER = 'GODOT_MCP_START_SERVER';
23
24
  /**
24
25
  * Returns true if the given directory looks like a Godot project — i.e.
25
26
  * it contains a `project.godot` file. Pure / no I/O beyond `fs.existsSync`.
@@ -140,9 +141,7 @@ function resolveTargetUrl(projectPath, options) {
140
141
  verbose(`Using enrolled marker cloud hub URL: ${url}`);
141
142
  return { url, isCloud: true };
142
143
  }
143
- const portOverride = typeof marker?.portOverride === 'number' ? marker.portOverride : null;
144
- const { port } = deriveProjectIdentityV2(projectPath, portOverride);
145
- const url = `http://localhost:${port}`;
144
+ const url = localProjectUrl(projectPath);
146
145
  verbose(`Using derived local port fallback: ${url}`);
147
146
  return { url, isCloud: false };
148
147
  }
@@ -307,4 +306,24 @@ export async function resolveOpenAuthToken(projectPath, options) {
307
306
  }
308
307
  return undefined;
309
308
  }
309
+ /**
310
+ * The local URL of the project's own server: `http://localhost:<v2-derived port>` (or the enrolled marker's
311
+ * port override), the port a Custom-mode editor binds when no host is configured.
312
+ */
313
+ export function localProjectUrl(projectPath) {
314
+ const marker = readProjectMarker(projectPath);
315
+ const portOverride = typeof marker?.portOverride === 'number' ? marker.portOverride : null;
316
+ return `http://localhost:${deriveProjectIdentityV2(projectPath, portOverride).port}`;
317
+ }
318
+ /**
319
+ * Connection of a CLI editor session (`exec`, `open --headless`, `close --owned-only`): always a LOCAL server.
320
+ * URL: `--url`, else a loopback `GODOT_MCP_HOST`, else undefined (the session uses the project's derived port).
321
+ * Token: `--token`, else `GODOT_MCP_TOKEN`. Cloud credentials are never used here.
322
+ */
323
+ export function resolveSessionConnection(options) {
324
+ const envHost = normalizeEnv(process.env[ENV_HOST]);
325
+ const url = options.url ?? (envHost !== undefined && isLocalhostUrl(envHost) ? envHost : undefined);
326
+ const token = options.token ?? normalizeEnv(process.env[ENV_TOKEN]);
327
+ return { ...(url ? { url } : {}), ...(token ? { token } : {}) };
328
+ }
310
329
  //# sourceMappingURL=connection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/utils/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/utils/connection.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { isNewerVersion } from './semver.js';
1
2
  import { ADDON_PACKAGE_REFERENCES, ADDON_EMBEDDED_RESOURCES, } from './addon-deps.js';
2
3
  /** Escape a string for use inside a RegExp source. */
3
4
  function escapeRegExp(value) {
@@ -76,6 +77,12 @@ export function addAddonPackageReferences(csprojText, requiredRefs = ADDON_PACKA
76
77
  changes.push({ id: ref.id, action: 'unchanged', version: ref.version });
77
78
  continue;
78
79
  }
80
+ // A third-party package (Roslyn) the project already uses at a newer version stays: the addon needs "at least"
81
+ // (the source-only Code-Exec adapter compiles against Roslyn 3.8+), and a downgrade would break the project's own use.
82
+ if (!ref.id.startsWith('com.IvanMurzak.') && isNewerVersion(ref.version, existingVersion)) {
83
+ changes.push({ id: ref.id, action: 'unchanged', version: existingVersion });
84
+ continue;
85
+ }
79
86
  // Reconcile in place: replace the whole element with the canonical pin.
80
87
  text = text.replace(re, renderRef(ref));
81
88
  changes.push({ id: ref.id, action: 'updated', from: existingVersion, version: ref.version });