gdharness 0.13.0 → 0.13.2
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/build/cli.js +17 -7
- package/build/index.js +8 -4
- package/package.json +1 -1
package/build/cli.js
CHANGED
|
@@ -36950,10 +36950,14 @@ class GodotServer {
|
|
|
36950
36950
|
const known = new Set([...Object.keys(spec.parameters), ...spec.operations ? ["op"] : []]);
|
|
36951
36951
|
const unknown = Object.keys(args).filter((key) => !known.has(key));
|
|
36952
36952
|
if (unknown.length > 0) {
|
|
36953
|
-
const
|
|
36953
|
+
const asked = readString(args, "op");
|
|
36954
|
+
const named = asked !== undefined && spec.operations?.[asked] !== undefined ? asked : null;
|
|
36955
|
+
const wanted = named === null ? [...known] : [...argumentsOf(spec, named), "op"];
|
|
36956
|
+
const takes = wanted.length === 0 ? "It takes no arguments." : `It takes: ${wanted.join(", ")}.`;
|
|
36957
|
+
const where = named === null ? spec.name : `${spec.name} ${named}`;
|
|
36954
36958
|
return {
|
|
36955
36959
|
ok: false,
|
|
36956
|
-
response: this.createErrorResponse(`${
|
|
36960
|
+
response: this.createErrorResponse(`${where} does not take ${unknown.join(", ")}. ${takes} This is gdharness ${SERVER_VERSION}, which is what decides whether an argument exists.`)
|
|
36957
36961
|
};
|
|
36958
36962
|
}
|
|
36959
36963
|
const wrong = wrongTypes(spec, args);
|
|
@@ -37693,13 +37697,13 @@ class GodotServer {
|
|
|
37693
37697
|
const severity = asParams(entry)["severity"];
|
|
37694
37698
|
return severity === 1 || severity === "error" || severity === "ERROR";
|
|
37695
37699
|
}).length;
|
|
37696
|
-
return this.jsonTextResponse({
|
|
37700
|
+
return this.jsonTextResponse(markIfStale({
|
|
37697
37701
|
scriptPath: readString(args, "scriptPath"),
|
|
37698
37702
|
clean: errors === 0,
|
|
37699
37703
|
errors,
|
|
37700
37704
|
warnings: diagnostics.length - errors,
|
|
37701
37705
|
diagnostics
|
|
37702
|
-
});
|
|
37706
|
+
}, this.godotBridge.getStatus().addonVersion, SERVER_VERSION));
|
|
37703
37707
|
}
|
|
37704
37708
|
async handleLSP(toolName, args) {
|
|
37705
37709
|
const port = this.editorServes("lspPort", "GDHARNESS_LSP_PORT", DEFAULT_LSP_PORT);
|
|
@@ -39955,12 +39959,18 @@ function headlessSection() {
|
|
|
39955
39959
|
return [
|
|
39956
39960
|
"## What a gate can call",
|
|
39957
39961
|
"",
|
|
39958
|
-
"These answer from a short-lived headless engine: no editor window, no
|
|
39959
|
-
"
|
|
39960
|
-
"other tool needs an editor somebody has open or a game somebody is running.",
|
|
39962
|
+
"These answer from a short-lived headless engine: no editor window, no running game, and no",
|
|
39963
|
+
"process or port outliving the answer. They are the only calls an automatic check can make at",
|
|
39964
|
+
"all, because every other tool needs an editor somebody has open or a game somebody is running.",
|
|
39961
39965
|
"",
|
|
39962
39966
|
...byTool.map((line) => `- ${line}`),
|
|
39963
39967
|
"",
|
|
39968
|
+
"Needing nothing is not the same as changing nothing, and a gate wants both. Most of these",
|
|
39969
|
+
"write to the project because that is what they are for: `script_edit create` writes a file,",
|
|
39970
|
+
"`project_settings set` rewrites `project.godot`, `project_import reimport` and `refresh_classes`",
|
|
39971
|
+
"write under `.godot`. The reading ops are the ones to gate on, and which is which is in each",
|
|
39972
|
+
"op's own summary below rather than assumed from this list.",
|
|
39973
|
+
"",
|
|
39964
39974
|
"Everything else needs the editor (`editor_*`, `debug_*`, `scene_*`, `resource_*`) or a running",
|
|
39965
39975
|
"game (`runtime_*`).",
|
|
39966
39976
|
""
|
package/build/index.js
CHANGED
|
@@ -29705,10 +29705,14 @@ class GodotServer {
|
|
|
29705
29705
|
const known = new Set([...Object.keys(spec.parameters), ...spec.operations ? ["op"] : []]);
|
|
29706
29706
|
const unknown = Object.keys(args).filter((key) => !known.has(key));
|
|
29707
29707
|
if (unknown.length > 0) {
|
|
29708
|
-
const
|
|
29708
|
+
const asked = readString(args, "op");
|
|
29709
|
+
const named = asked !== undefined && spec.operations?.[asked] !== undefined ? asked : null;
|
|
29710
|
+
const wanted = named === null ? [...known] : [...argumentsOf(spec, named), "op"];
|
|
29711
|
+
const takes = wanted.length === 0 ? "It takes no arguments." : `It takes: ${wanted.join(", ")}.`;
|
|
29712
|
+
const where = named === null ? spec.name : `${spec.name} ${named}`;
|
|
29709
29713
|
return {
|
|
29710
29714
|
ok: false,
|
|
29711
|
-
response: this.createErrorResponse(`${
|
|
29715
|
+
response: this.createErrorResponse(`${where} does not take ${unknown.join(", ")}. ${takes} This is gdharness ${SERVER_VERSION}, which is what decides whether an argument exists.`)
|
|
29712
29716
|
};
|
|
29713
29717
|
}
|
|
29714
29718
|
const wrong = wrongTypes(spec, args);
|
|
@@ -30448,13 +30452,13 @@ class GodotServer {
|
|
|
30448
30452
|
const severity = asParams(entry)["severity"];
|
|
30449
30453
|
return severity === 1 || severity === "error" || severity === "ERROR";
|
|
30450
30454
|
}).length;
|
|
30451
|
-
return this.jsonTextResponse({
|
|
30455
|
+
return this.jsonTextResponse(markIfStale({
|
|
30452
30456
|
scriptPath: readString(args, "scriptPath"),
|
|
30453
30457
|
clean: errors === 0,
|
|
30454
30458
|
errors,
|
|
30455
30459
|
warnings: diagnostics.length - errors,
|
|
30456
30460
|
diagnostics
|
|
30457
|
-
});
|
|
30461
|
+
}, this.godotBridge.getStatus().addonVersion, SERVER_VERSION));
|
|
30458
30462
|
}
|
|
30459
30463
|
async handleLSP(toolName, args) {
|
|
30460
30464
|
const port = this.editorServes("lspPort", "GDHARNESS_LSP_PORT", DEFAULT_LSP_PORT);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gdharness",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.2",
|
|
4
4
|
"mcpName": "io.github.Aureliolo/gdharness",
|
|
5
5
|
"description": "A harness for driving a Godot 4 project from an agent: editor addons, a runtime bridge into the running game, an MCP server in front of them, and a CLI that installs and diagnoses the Godot side.",
|
|
6
6
|
"type": "module",
|