@godot-mcp/cli 0.0.0 → 0.1.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.
- package/LICENSE +21 -0
- package/README.md +105 -2
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +88 -0
- package/dist/bin.js.map +1 -0
- package/dist/commands/connect.d.ts +7 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +71 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/disable.d.ts +2 -0
- package/dist/commands/disable.d.ts.map +1 -0
- package/dist/commands/disable.js +5 -0
- package/dist/commands/disable.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +5 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/editor.d.ts +7 -0
- package/dist/commands/editor.d.ts.map +1 -0
- package/dist/commands/editor.js +84 -0
- package/dist/commands/editor.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +9 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +5 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/unsafeFixture.d.ts +5 -0
- package/dist/commands/unsafeFixture.d.ts.map +1 -0
- package/dist/commands/unsafeFixture.js +14 -0
- package/dist/commands/unsafeFixture.js.map +1 -0
- package/dist/commands/upgrade.d.ts +2 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +5 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/install/addonInstaller.d.ts +10 -0
- package/dist/install/addonInstaller.d.ts.map +1 -0
- package/dist/install/addonInstaller.js +225 -0
- package/dist/install/addonInstaller.js.map +1 -0
- package/dist/install/addonManifest.d.ts +28 -0
- package/dist/install/addonManifest.d.ts.map +1 -0
- package/dist/install/addonManifest.js +95 -0
- package/dist/install/addonManifest.js.map +1 -0
- package/dist/install/doctor.d.ts +11 -0
- package/dist/install/doctor.d.ts.map +1 -0
- package/dist/install/doctor.js +86 -0
- package/dist/install/doctor.js.map +1 -0
- package/dist/install/pluginState.d.ts +12 -0
- package/dist/install/pluginState.d.ts.map +1 -0
- package/dist/install/pluginState.js +95 -0
- package/dist/install/pluginState.js.map +1 -0
- package/dist/runtime/createRuntime.d.ts +31 -0
- package/dist/runtime/createRuntime.d.ts.map +1 -0
- package/dist/runtime/createRuntime.js +301 -0
- package/dist/runtime/createRuntime.js.map +1 -0
- package/godot/plugin_state.gd +18 -0
- package/package.json +31 -6
- package/index.js +0 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type BridgeServer } from "@godot-mcp/bridge-client";
|
|
2
|
+
import { type ExtensionRegistry, JsonlAuditSink, ProjectJobService, RuntimeService, ScenarioService, SessionService, UnsafeFixtureService, type SessionGrants } from "@godot-mcp/control-plane";
|
|
3
|
+
import { createGodotMcpServer } from "@godot-mcp/mcp-server";
|
|
4
|
+
import { type ProjectIdentity } from "@godot-mcp/protocol";
|
|
5
|
+
export interface RuntimeOptions {
|
|
6
|
+
project: string;
|
|
7
|
+
grants?: SessionGrants;
|
|
8
|
+
godotBin?: string;
|
|
9
|
+
unsafeRegistryPath?: string;
|
|
10
|
+
unsafeActivationPath?: string;
|
|
11
|
+
extensions?: ExtensionRegistry;
|
|
12
|
+
}
|
|
13
|
+
export declare function normalizeRuntimeGrants(grants: SessionGrants | undefined): SessionGrants;
|
|
14
|
+
type GodotMcpServer = ReturnType<typeof createGodotMcpServer>;
|
|
15
|
+
export declare class GodotMcpRuntime {
|
|
16
|
+
readonly project: ProjectIdentity;
|
|
17
|
+
readonly audit: JsonlAuditSink;
|
|
18
|
+
readonly session: SessionService;
|
|
19
|
+
readonly bridge: BridgeServer;
|
|
20
|
+
readonly runtime: RuntimeService;
|
|
21
|
+
readonly mcp: GodotMcpServer;
|
|
22
|
+
readonly visualScenario?: ScenarioService | undefined;
|
|
23
|
+
readonly projectJobs?: ProjectJobService | undefined;
|
|
24
|
+
readonly unsafeFixture?: UnsafeFixtureService | undefined;
|
|
25
|
+
private closePromise;
|
|
26
|
+
constructor(project: ProjectIdentity, audit: JsonlAuditSink, session: SessionService, bridge: BridgeServer, runtime: RuntimeService, mcp: GodotMcpServer, visualScenario?: ScenarioService | undefined, projectJobs?: ProjectJobService | undefined, unsafeFixture?: UnsafeFixtureService | undefined);
|
|
27
|
+
close(reason: string): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
export declare function createRuntime(options: RuntimeOptions): Promise<GodotMcpRuntime>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=createRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRuntime.d.ts","sourceRoot":"","sources":["../../src/runtime/createRuntime.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAIL,KAAK,iBAAiB,EACtB,cAAc,EAId,iBAAiB,EAIjB,cAAc,EACd,eAAe,EACf,cAAc,EAEd,oBAAoB,EAMpB,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAC;AAM7B,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,CAiCvF;AAED,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE9D,qBAAa,eAAe;IAIxB,QAAQ,CAAC,OAAO,EAAE,eAAe;IACjC,QAAQ,CAAC,KAAK,EAAE,cAAc;IAC9B,QAAQ,CAAC,OAAO,EAAE,cAAc;IAChC,QAAQ,CAAC,MAAM,EAAE,YAAY;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc;IAChC,QAAQ,CAAC,GAAG,EAAE,cAAc;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,eAAe;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB;IAX/C,OAAO,CAAC,YAAY,CAA4B;gBAGrC,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,cAAc,EACnB,cAAc,CAAC,EAAE,eAAe,YAAA,EAChC,WAAW,CAAC,EAAE,iBAAiB,YAAA,EAC/B,aAAa,CAAC,EAAE,oBAAoB,YAAA;IAG/C,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyBrC;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA2MrF"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { startBridgeServer } from "@godot-mcp/bridge-client";
|
|
3
|
+
import { ArtifactStore, EditorMutationService, EvidenceStore, JsonlAuditSink, MutationLedger, OwnedProjectProcess, ProjectJobJournal, ProjectJobService, ProjectMutationJournal, ProjectMutationService, ProjectService, RuntimeService, ScenarioService, SessionService, UnsafeFixtureProcess, UnsafeFixtureService, VisualService, readProjectIdentity, projectOperationPreflight, recoverOwnedProjectProcess, consumeUnsafeFixtureActivation, } from "@godot-mcp/control-plane";
|
|
4
|
+
import { createGodotMcpServer } from "@godot-mcp/mcp-server";
|
|
5
|
+
import { PRODUCT_VERSION, } from "@godot-mcp/protocol";
|
|
6
|
+
import { readInstallManifest } from "../install/addonManifest.js";
|
|
7
|
+
import { runDoctor } from "../install/doctor.js";
|
|
8
|
+
import { findGodotBinary } from "../install/pluginState.js";
|
|
9
|
+
export function normalizeRuntimeGrants(grants) {
|
|
10
|
+
if (grants === undefined)
|
|
11
|
+
return { tiers: ["observe"], packs: ["core"] };
|
|
12
|
+
const tiers = new Set(grants.tiers);
|
|
13
|
+
const packs = new Set(grants.packs);
|
|
14
|
+
for (const tier of tiers) {
|
|
15
|
+
if (tier !== "observe" && tier !== "runtime_control" && tier !== "project_mutate" && tier !== "project_operate" && tier !== "unsafe_fixture")
|
|
16
|
+
throw new Error(`Unsupported runtime tier: ${tier}`);
|
|
17
|
+
}
|
|
18
|
+
for (const pack of packs) {
|
|
19
|
+
if (pack !== "core" && pack !== "runtime" && pack !== "input" && pack !== "editor" && pack !== "visual" && pack !== "project" && pack !== "unsafe")
|
|
20
|
+
throw new Error(`Unsupported runtime pack: ${pack}`);
|
|
21
|
+
}
|
|
22
|
+
if (!tiers.has("observe") || !packs.has("core"))
|
|
23
|
+
throw new Error("observe and core grants are required");
|
|
24
|
+
const hasRuntimePack = packs.has("runtime") || packs.has("input");
|
|
25
|
+
if (tiers.has("runtime_control") !== hasRuntimePack) {
|
|
26
|
+
throw new Error("runtime_control must be granted with runtime or input packs");
|
|
27
|
+
}
|
|
28
|
+
const hasEditorPack = packs.has("editor");
|
|
29
|
+
if (tiers.has("project_mutate") !== hasEditorPack) {
|
|
30
|
+
throw new Error("project_mutate must be granted with the editor pack");
|
|
31
|
+
}
|
|
32
|
+
if (packs.has("visual") && (!packs.has("runtime") || !packs.has("input"))) {
|
|
33
|
+
throw new Error("visual pack requires runtime and input packs");
|
|
34
|
+
}
|
|
35
|
+
const hasProjectPack = packs.has("project");
|
|
36
|
+
if (tiers.has("project_operate") !== hasProjectPack) {
|
|
37
|
+
throw new Error("project_operate must be granted with the project pack");
|
|
38
|
+
}
|
|
39
|
+
const hasUnsafePack = packs.has("unsafe");
|
|
40
|
+
if (tiers.has("unsafe_fixture") !== hasUnsafePack)
|
|
41
|
+
throw new Error("unsafe_fixture must be granted with the unsafe pack");
|
|
42
|
+
if (!hasRuntimePack && !hasEditorPack && !hasProjectPack && !hasUnsafePack)
|
|
43
|
+
return { tiers: ["observe"], packs: ["core"] };
|
|
44
|
+
return {
|
|
45
|
+
tiers: ["observe", ...(tiers.has("runtime_control") ? ["runtime_control"] : []), ...(tiers.has("project_mutate") ? ["project_mutate"] : []), ...(tiers.has("project_operate") ? ["project_operate"] : []), ...(tiers.has("unsafe_fixture") ? ["unsafe_fixture"] : [])],
|
|
46
|
+
packs: ["core", ...(packs.has("runtime") ? ["runtime"] : []), ...(packs.has("input") ? ["input"] : []), ...(packs.has("editor") ? ["editor"] : []), ...(packs.has("visual") ? ["visual"] : []), ...(packs.has("project") ? ["project"] : []), ...(packs.has("unsafe") ? ["unsafe"] : [])],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export class GodotMcpRuntime {
|
|
50
|
+
project;
|
|
51
|
+
audit;
|
|
52
|
+
session;
|
|
53
|
+
bridge;
|
|
54
|
+
runtime;
|
|
55
|
+
mcp;
|
|
56
|
+
visualScenario;
|
|
57
|
+
projectJobs;
|
|
58
|
+
unsafeFixture;
|
|
59
|
+
closePromise;
|
|
60
|
+
constructor(project, audit, session, bridge, runtime, mcp, visualScenario, projectJobs, unsafeFixture) {
|
|
61
|
+
this.project = project;
|
|
62
|
+
this.audit = audit;
|
|
63
|
+
this.session = session;
|
|
64
|
+
this.bridge = bridge;
|
|
65
|
+
this.runtime = runtime;
|
|
66
|
+
this.mcp = mcp;
|
|
67
|
+
this.visualScenario = visualScenario;
|
|
68
|
+
this.projectJobs = projectJobs;
|
|
69
|
+
this.unsafeFixture = unsafeFixture;
|
|
70
|
+
}
|
|
71
|
+
close(reason) {
|
|
72
|
+
void reason;
|
|
73
|
+
if (!this.closePromise) {
|
|
74
|
+
const activeClose = (async () => {
|
|
75
|
+
const runtimeErrors = [];
|
|
76
|
+
for (const close of [
|
|
77
|
+
() => this.unsafeFixture?.close(),
|
|
78
|
+
() => this.projectJobs?.close(),
|
|
79
|
+
() => this.visualScenario?.close(),
|
|
80
|
+
() => this.runtime.close(),
|
|
81
|
+
]) {
|
|
82
|
+
try {
|
|
83
|
+
await close();
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
runtimeErrors.push(error);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
await Promise.allSettled([this.mcp.close(), this.bridge.close()]);
|
|
90
|
+
this.session.close();
|
|
91
|
+
if (runtimeErrors.length === 1)
|
|
92
|
+
throw runtimeErrors[0];
|
|
93
|
+
if (runtimeErrors.length > 1)
|
|
94
|
+
throw new AggregateError(runtimeErrors, "Runtime shutdown encountered multiple failures");
|
|
95
|
+
})();
|
|
96
|
+
this.closePromise = activeClose;
|
|
97
|
+
void activeClose.catch(() => {
|
|
98
|
+
if (this.closePromise === activeClose)
|
|
99
|
+
this.closePromise = undefined;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return this.closePromise;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export async function createRuntime(options) {
|
|
106
|
+
const grants = normalizeRuntimeGrants(options.grants);
|
|
107
|
+
const godotBin = await findGodotBinary(options.godotBin);
|
|
108
|
+
const project = await readProjectIdentity(options.project);
|
|
109
|
+
const wantsUnsafe = grants.tiers.includes("unsafe_fixture") && grants.packs.includes("unsafe");
|
|
110
|
+
if (wantsUnsafe !== (options.unsafeRegistryPath !== undefined) || wantsUnsafe !== (options.unsafeActivationPath !== undefined)) {
|
|
111
|
+
throw new Error("Unsafe grants require both explicit registry and one-use activation startup paths, and those paths require unsafe grants");
|
|
112
|
+
}
|
|
113
|
+
const unsafeActivation = wantsUnsafe
|
|
114
|
+
? await consumeUnsafeFixtureActivation(options.unsafeRegistryPath, project.rootRealPath, options.unsafeActivationPath)
|
|
115
|
+
: undefined;
|
|
116
|
+
const manifest = await readInstallManifest(project.rootRealPath);
|
|
117
|
+
const audit = JsonlAuditSink.forProject(project.rootRealPath);
|
|
118
|
+
const session = new SessionService(project, grants, () => runDoctor(project.rootRealPath, godotBin));
|
|
119
|
+
let bridge;
|
|
120
|
+
let runtime;
|
|
121
|
+
let visualScenario;
|
|
122
|
+
let projectJobs;
|
|
123
|
+
let unsafeFixture;
|
|
124
|
+
let mcp;
|
|
125
|
+
const mutationLedger = grants.packs.includes("editor")
|
|
126
|
+
? await MutationLedger.open(join(project.rootRealPath, ".godot/evidence/godot-mcp/mutation-journal.jsonl"))
|
|
127
|
+
: undefined;
|
|
128
|
+
const projectMutationJournal = grants.packs.includes("project")
|
|
129
|
+
? await ProjectMutationJournal.open(join(project.rootRealPath, ".godot/evidence/godot-mcp/project-mutations.jsonl"))
|
|
130
|
+
: undefined;
|
|
131
|
+
const projectJobJournal = grants.packs.includes("project")
|
|
132
|
+
? await ProjectJobJournal.open(join(project.rootRealPath, ".godot/evidence/godot-mcp/project-jobs.jsonl"))
|
|
133
|
+
: undefined;
|
|
134
|
+
try {
|
|
135
|
+
bridge = await startBridgeServer({
|
|
136
|
+
project,
|
|
137
|
+
grants,
|
|
138
|
+
addonManifestSha256: manifest.manifestSha256,
|
|
139
|
+
auditSink: audit,
|
|
140
|
+
onAttached: (attachedBridge) => {
|
|
141
|
+
session.onAttached({
|
|
142
|
+
sessionId: attachedBridge.sessionId,
|
|
143
|
+
godotVersion: attachedBridge.info.godotVersion,
|
|
144
|
+
addonVersion: PRODUCT_VERSION,
|
|
145
|
+
addonManifestSha256: attachedBridge.info.addonManifestSha256,
|
|
146
|
+
attachedAt: new Date().toISOString(),
|
|
147
|
+
});
|
|
148
|
+
},
|
|
149
|
+
onDisconnected: () => {
|
|
150
|
+
session.onDisconnected();
|
|
151
|
+
void runtime?.disconnect();
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
runtime = new RuntimeService({
|
|
155
|
+
project,
|
|
156
|
+
sessionId: () => bridge?.session?.sessionId ?? null,
|
|
157
|
+
godotBin,
|
|
158
|
+
requireAuthenticatedDebuggerMetadata: true,
|
|
159
|
+
prepare: async ({ descriptor }) => {
|
|
160
|
+
const attached = bridge?.session;
|
|
161
|
+
if (!attached)
|
|
162
|
+
throw new Error("Godot editor addon is not attached");
|
|
163
|
+
return (await attached.request("runtime.prepare", { descriptor }, { timeoutMs: 5_000 })).data;
|
|
164
|
+
},
|
|
165
|
+
command: async (operation, input, timeoutMs = 10_000) => {
|
|
166
|
+
const attached = bridge?.session;
|
|
167
|
+
if (!attached)
|
|
168
|
+
throw new Error("Godot editor addon is not attached");
|
|
169
|
+
return (await attached.request("runtime.command", { operation, ...input }, { timeoutMs })).data;
|
|
170
|
+
},
|
|
171
|
+
capture: async (input, timeoutMs = 15_000) => {
|
|
172
|
+
const attached = bridge?.session;
|
|
173
|
+
if (!attached)
|
|
174
|
+
throw new Error("Godot editor addon is not attached");
|
|
175
|
+
const response = await attached.request("runtime.capture", input, { timeoutMs, maxResponseBytes: 8 * 1024 * 1024 });
|
|
176
|
+
return {
|
|
177
|
+
data: response.data,
|
|
178
|
+
...(response.binary === undefined ? {} : { binary: response.binary }),
|
|
179
|
+
...(response.binarySha256 === undefined ? {} : { binarySha256: response.binarySha256 }),
|
|
180
|
+
};
|
|
181
|
+
},
|
|
182
|
+
cleanup: async () => {
|
|
183
|
+
const attached = bridge?.session;
|
|
184
|
+
if (!attached)
|
|
185
|
+
throw new Error("Godot editor addon is not attached");
|
|
186
|
+
await attached.request("runtime.cleanup", {}, { timeoutMs: 5_000 });
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
const editor = mutationLedger
|
|
190
|
+
? new EditorMutationService(() => {
|
|
191
|
+
const attached = bridge?.session;
|
|
192
|
+
if (!attached)
|
|
193
|
+
return null;
|
|
194
|
+
return {
|
|
195
|
+
request: (method, params, requestOptions) => attached.request(method, params, requestOptions),
|
|
196
|
+
};
|
|
197
|
+
}, mutationLedger)
|
|
198
|
+
: undefined;
|
|
199
|
+
const evidence = new EvidenceStore(project.rootRealPath);
|
|
200
|
+
const sessionId = () => bridge?.session?.sessionId ?? null;
|
|
201
|
+
const visual = grants.packs.includes("visual")
|
|
202
|
+
? (() => {
|
|
203
|
+
visualScenario = new ScenarioService({
|
|
204
|
+
projectId: project.projectId,
|
|
205
|
+
sessionId,
|
|
206
|
+
runtime,
|
|
207
|
+
evidence,
|
|
208
|
+
});
|
|
209
|
+
return new VisualService({ sessionId, evidence, scenario: visualScenario });
|
|
210
|
+
})()
|
|
211
|
+
: undefined;
|
|
212
|
+
if (unsafeActivation) {
|
|
213
|
+
unsafeFixture = new UnsafeFixtureService({
|
|
214
|
+
activation: unsafeActivation,
|
|
215
|
+
sessionId,
|
|
216
|
+
evidence,
|
|
217
|
+
launch: (input) => UnsafeFixtureProcess.launch({ ...input, godotBin }),
|
|
218
|
+
});
|
|
219
|
+
await unsafeFixture.initialize();
|
|
220
|
+
}
|
|
221
|
+
const projectOperations = projectMutationJournal && projectJobJournal
|
|
222
|
+
? (() => {
|
|
223
|
+
const mutations = new ProjectMutationService(() => {
|
|
224
|
+
const attached = bridge?.session;
|
|
225
|
+
if (!attached)
|
|
226
|
+
return null;
|
|
227
|
+
return {
|
|
228
|
+
request: (method, params, requestOptions) => attached.request(method, params, requestOptions),
|
|
229
|
+
};
|
|
230
|
+
}, projectMutationJournal);
|
|
231
|
+
projectJobs = new ProjectJobService({
|
|
232
|
+
projectId: project.projectId,
|
|
233
|
+
projectRoot: project.rootRealPath,
|
|
234
|
+
sessionId,
|
|
235
|
+
artifacts: new ArtifactStore(project.rootRealPath),
|
|
236
|
+
journal: projectJobJournal,
|
|
237
|
+
recoverProcess: recoverOwnedProjectProcess,
|
|
238
|
+
preflight: (input) => projectOperationPreflight(project.rootRealPath, input),
|
|
239
|
+
conflictReason: (input) => {
|
|
240
|
+
if (input.operation !== "export_start")
|
|
241
|
+
return null;
|
|
242
|
+
if (!["idle", "stopped"].includes(runtime.snapshot().state))
|
|
243
|
+
return "Export is unavailable while an MCP-owned runtime is active";
|
|
244
|
+
if (visualScenario?.hasActiveJob())
|
|
245
|
+
return "Export is unavailable while a visual scenario is active";
|
|
246
|
+
if (unsafeFixture?.blocksExport())
|
|
247
|
+
return "Export is unavailable while unsafe fixture execution or residue is present";
|
|
248
|
+
return null;
|
|
249
|
+
},
|
|
250
|
+
launch: (input) => OwnedProjectProcess.launch({ ...input, godotBin }),
|
|
251
|
+
reimport: async (resourcePaths) => {
|
|
252
|
+
const attached = bridge?.session;
|
|
253
|
+
if (!attached)
|
|
254
|
+
throw new Error("Godot editor addon is not attached");
|
|
255
|
+
await attached.request("project.operation", { operation: "reimport", resourcePaths }, { timeoutMs: 120_000 });
|
|
256
|
+
},
|
|
257
|
+
evidence,
|
|
258
|
+
});
|
|
259
|
+
return new ProjectService(mutations, projectJobs);
|
|
260
|
+
})()
|
|
261
|
+
: undefined;
|
|
262
|
+
await projectJobs?.recover();
|
|
263
|
+
mcp = createGodotMcpServer({
|
|
264
|
+
project,
|
|
265
|
+
grants,
|
|
266
|
+
audit,
|
|
267
|
+
session,
|
|
268
|
+
bridge: () => bridge?.session ?? null,
|
|
269
|
+
evidence,
|
|
270
|
+
runtime,
|
|
271
|
+
...(visual === undefined ? {} : { visual }),
|
|
272
|
+
...(editor === undefined ? {} : { editor }),
|
|
273
|
+
...(projectOperations === undefined ? {} : { projectOperations }),
|
|
274
|
+
...(unsafeFixture === undefined ? {} : { unsafeFixture }),
|
|
275
|
+
...(options.extensions === undefined || !options.extensions.visible(grants) ? {} : {
|
|
276
|
+
extensions: options.extensions,
|
|
277
|
+
extensionContext: (correlationId) => ({
|
|
278
|
+
project,
|
|
279
|
+
correlationId,
|
|
280
|
+
evidence: { putJson: async (value, metadata) => {
|
|
281
|
+
const attachedSession = sessionId();
|
|
282
|
+
if (!attachedSession)
|
|
283
|
+
throw new Error("Godot editor addon is not attached");
|
|
284
|
+
return (await evidence.putJson(attachedSession, value, metadata)).observationUri;
|
|
285
|
+
} },
|
|
286
|
+
}),
|
|
287
|
+
}),
|
|
288
|
+
});
|
|
289
|
+
return new GodotMcpRuntime(project, audit, session, bridge, runtime, mcp, visualScenario, projectJobs, unsafeFixture);
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
await unsafeFixture?.close().catch(() => undefined);
|
|
293
|
+
await projectJobs?.close().catch(() => undefined);
|
|
294
|
+
await visualScenario?.close().catch(() => undefined);
|
|
295
|
+
await runtime?.close().catch(() => undefined);
|
|
296
|
+
await mcp?.close().catch(() => undefined);
|
|
297
|
+
await bridge?.close().catch(() => undefined);
|
|
298
|
+
throw error;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=createRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRuntime.js","sourceRoot":"","sources":["../../src/runtime/createRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
extends SceneTree
|
|
2
|
+
|
|
3
|
+
func _init() -> void:
|
|
4
|
+
var args := OS.get_cmdline_user_args()
|
|
5
|
+
assert(args.size() == 1 and args[0] in ["enable", "disable"])
|
|
6
|
+
var enabled := ProjectSettings.get_setting("editor_plugins/enabled", PackedStringArray()) as PackedStringArray
|
|
7
|
+
var path := "res://addons/godot_mcp/plugin.cfg"
|
|
8
|
+
if args[0] == "enable" and not enabled.has(path):
|
|
9
|
+
enabled.append(path)
|
|
10
|
+
if args[0] == "disable":
|
|
11
|
+
var updated := PackedStringArray()
|
|
12
|
+
for item in enabled:
|
|
13
|
+
if item != path:
|
|
14
|
+
updated.append(item)
|
|
15
|
+
enabled = updated
|
|
16
|
+
ProjectSettings.set_setting("editor_plugins/enabled", enabled)
|
|
17
|
+
var error := ProjectSettings.save()
|
|
18
|
+
quit(0 if error == OK else 1)
|
package/package.json
CHANGED
|
@@ -1,11 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@godot-mcp/cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Namespace bootstrap for the Godot MCP CLI package.",
|
|
3
|
+
"version": "0.1.0",
|
|
5
4
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./dist/index.js"
|
|
7
|
+
},
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md",
|
|
12
|
+
"LICENSE",
|
|
13
|
+
"godot"
|
|
14
|
+
],
|
|
15
|
+
"bin": {
|
|
16
|
+
"godot-mcp": "./dist/bin.js"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc -p tsconfig.json",
|
|
20
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@godot-mcp/bridge-client": "0.1.0",
|
|
24
|
+
"@godot-mcp/control-plane": "0.1.0",
|
|
25
|
+
"@godot-mcp/mcp-server": "0.1.0",
|
|
26
|
+
"@godot-mcp/protocol": "0.1.0"
|
|
27
|
+
},
|
|
8
28
|
"license": "MIT",
|
|
9
|
-
"
|
|
10
|
-
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=22 <23"
|
|
31
|
+
},
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/k0nkupa/godot-mcp.git"
|
|
35
|
+
}
|
|
11
36
|
}
|
package/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|