ue-mcp 1.3.8-beta → 1.3.8-beta.3
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/README.md +2 -2
- package/dist/action-class.js +4 -0
- package/dist/action-class.js.map +1 -1
- package/dist/bridge-parity.d.ts +77 -0
- package/dist/bridge-parity.js +96 -0
- package/dist/bridge-parity.js.map +1 -0
- package/dist/bridge-timeouts.js +2 -0
- package/dist/bridge-timeouts.js.map +1 -1
- package/dist/flow/guard-schema.d.ts +4 -4
- package/dist/flow/guards.js +31 -10
- package/dist/flow/guards.js.map +1 -1
- package/dist/flow/schema.d.ts +3 -3
- package/dist/guard-task.d.ts +125 -0
- package/dist/guard-task.js +85 -0
- package/dist/guard-task.js.map +1 -0
- package/dist/plugin/manifest.d.ts +3 -3
- package/dist/schemas.d.ts +157 -0
- package/dist/schemas.js +20 -0
- package/dist/schemas.js.map +1 -1
- package/dist/tool-counts.json +9 -9
- package/dist/tools/animation.js +77 -7
- package/dist/tools/animation.js.map +1 -1
- package/dist/tools/asset.js +14 -1
- package/dist/tools/asset.js.map +1 -1
- package/dist/tools/blueprint.js +12 -1
- package/dist/tools/blueprint.js.map +1 -1
- package/dist/tools/editor.js +21 -8
- package/dist/tools/editor.js.map +1 -1
- package/dist/tools/level.js +11 -3
- package/dist/tools/level.js.map +1 -1
- package/dist/tools/material.js +3 -2
- package/dist/tools/material.js.map +1 -1
- package/dist/tools/project.js +18 -1
- package/dist/tools/project.js.map +1 -1
- package/dist/ue-mcp.default.yml +69 -9
- package/package.json +6 -2
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.cpp +226 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.h +7 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_ControlRigSequencer.cpp +932 -27
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_IKRetargeterAuthoring.cpp +394 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_SkeletalLive.cpp +115 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_StateMachine.cpp +22 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Import.cpp +33 -2
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers.cpp +3 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers.h +3 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Depth.cpp +164 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Graph.cpp +25 -4
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Search.cpp +440 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.cpp +432 -44
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.h +1 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers.cpp +243 -93
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers.h +1 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SkeletalMeshHandlers.cpp +793 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SkeletalMeshHandlers.h +2 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SplineHandlers.cpp +228 -19
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AnimationSkeletonCreateTests.cpp +46 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LivePostProcessAnimBlueprintTests.cpp +65 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/SplineHandlersTests.cpp +92 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/ViewportCameraHandlerTests.cpp +114 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/UE_MCP_Bridge.Build.cs +3 -0
- package/plugin/ue_mcp_bridge/UE_MCP_Bridge.uplugin +2 -2
- package/skills/ue-mcp-animation/SKILL.md +29 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://github.com/db-lyon/ue-mcp/stargazers)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
|
|
8
|
-
**Unreal Engine Model Context Protocol Server** - gives AI assistants deep read/write access to the Unreal Editor through <!-- count:tools -->26<!-- /count --> category tools covering <!-- count:actions -->
|
|
8
|
+
**Unreal Engine Model Context Protocol Server** - gives AI assistants deep read/write access to the Unreal Editor through <!-- count:tools -->26<!-- /count --> category tools covering <!-- count:actions -->1930+<!-- /count --> actions, plus a YAML flow engine for multi-step workflows and an npm plugin system for extending the surface.
|
|
9
9
|
|
|
10
10
|
On UE 5.8+ it also wraps Epic's entire native AI Toolset Registry - 830 official Unreal tools, called in-process and surfaced as `epic_*` actions in the matching category: Sequencer in `animation`, PCG in `pcg`, static meshes in `asset`.
|
|
11
11
|
|
|
@@ -139,7 +139,7 @@ flows:
|
|
|
139
139
|
flow(action="run", flowName="build_and_check")
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
-
Every one of the <!-- count:actions -->
|
|
142
|
+
Every one of the <!-- count:actions -->1930+<!-- /count --> actions is also a flow task. Flows support step references, retries, rollback, custom tasks in your own `.js`/`.ts`, and shell steps. See [Flows](https://ue-mcp.com/docs/flows/).
|
|
143
143
|
|
|
144
144
|
## Plugins
|
|
145
145
|
|
package/dist/action-class.js
CHANGED
|
@@ -216,6 +216,8 @@ const OVERRIDES = {
|
|
|
216
216
|
// Reads Control Rig controls and keys from an edit session. The `edit`
|
|
217
217
|
// segment names the session type; this action does not modify it.
|
|
218
218
|
"animation.read_control_rig_edit": "read",
|
|
219
|
+
// Captures current in-memory Control Rig values without changing Sequencer.
|
|
220
|
+
"animation.capture_control_rig_pose": "read",
|
|
219
221
|
// Reads animation data, but optionally writes validation artifacts under
|
|
220
222
|
// the addressed project's Saved directory.
|
|
221
223
|
"animation.analyze_animation": "unknown",
|
|
@@ -258,6 +260,8 @@ const OVERRIDES = {
|
|
|
258
260
|
// ── Writes whose verb reads as a read ───────────────────────────────
|
|
259
261
|
// Drives the editor's preview: it plays an animation in a viewport.
|
|
260
262
|
"animation.preview_animation": "mutate",
|
|
263
|
+
// Replaces a running component's transient post-process AnimBP override.
|
|
264
|
+
"animation.set_live_post_process_anim_blueprint": "mutate",
|
|
261
265
|
// Renders to a file on disk.
|
|
262
266
|
"material.render_preview": "mutate",
|
|
263
267
|
"asset.export": "mutate",
|
package/dist/action-class.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-class.js","sourceRoot":"","sources":["../src/action-class.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action-class.js","sourceRoot":"","sources":["../src/action-class.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Does the plugin we reached actually implement what we advertise? (#1021)
|
|
3
|
+
*
|
|
4
|
+
* `pluginBuildStale` answers a different question. It compares timestamps: is
|
|
5
|
+
* the compiled bridge older than its source. That catches the common cause of
|
|
6
|
+
* a missing handler and is worth reporting, but it is not evidence about the
|
|
7
|
+
* handlers themselves, and a report against 1.2.4 said so exactly: a session
|
|
8
|
+
* reported `pluginBuildStale: false` while an advertised method was absent,
|
|
9
|
+
* and every discovery of that came one failed call at a time.
|
|
10
|
+
*
|
|
11
|
+
* The evidence has been on the wire the whole time. The handshake carries the
|
|
12
|
+
* registered method list read out of the running binary, which the C++ that
|
|
13
|
+
* builds it describes as the only answer a stale DLL cannot fake. Nothing
|
|
14
|
+
* compared it to the surface, so it was used to word an error AFTER a call had
|
|
15
|
+
* already failed and never to say anything beforehand.
|
|
16
|
+
*
|
|
17
|
+
* This compares them. What comes out is not a guess about why a method is
|
|
18
|
+
* missing, and deliberately so: a plugin behind its source, a plugin from
|
|
19
|
+
* another checkout, a partially deployed one and a handler that failed to
|
|
20
|
+
* register all look identical from here, and naming one of them would be
|
|
21
|
+
* inventing a cause. It reports WHICH advertised methods the running plugin
|
|
22
|
+
* does not have, which is the fact, and leaves the diagnosis to the reader.
|
|
23
|
+
*/
|
|
24
|
+
import type { BridgeCapabilities } from "./bridge.js";
|
|
25
|
+
import type { ToolDef } from "./types.js";
|
|
26
|
+
export interface BridgeParity {
|
|
27
|
+
/** False when the plugin published no action list, so nothing was compared. */
|
|
28
|
+
checked: boolean;
|
|
29
|
+
/** Distinct bridge methods the advertised surface can dispatch to. */
|
|
30
|
+
advertised: number;
|
|
31
|
+
/** Methods the running plugin registered. */
|
|
32
|
+
registered: number;
|
|
33
|
+
/**
|
|
34
|
+
* Advertised methods the running plugin does not have, sorted. Every one is
|
|
35
|
+
* a call that will come back "Unknown method".
|
|
36
|
+
*/
|
|
37
|
+
missing: string[];
|
|
38
|
+
/** One line for a caller to surface, or null when there is nothing to say. */
|
|
39
|
+
message: string | null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Compare the advertised surface against what the connected plugin registered.
|
|
43
|
+
*
|
|
44
|
+
* `graph` is the tool graph this server actually dispatches, so a category the
|
|
45
|
+
* user disabled and a plugin's injected actions are counted as they really
|
|
46
|
+
* are rather than from the pristine declaration.
|
|
47
|
+
*/
|
|
48
|
+
export declare function checkBridgeParity(graph: ToolDef[], capabilities: BridgeCapabilities | null | undefined): BridgeParity;
|
|
49
|
+
/**
|
|
50
|
+
* What the binary that answered says about itself, or undefined when nothing
|
|
51
|
+
* answered or it had nothing to add.
|
|
52
|
+
*
|
|
53
|
+
* `project(get_status)` already reports `pluginBuildStale` and
|
|
54
|
+
* `bridgeApiVersion`, and both are read off the SOURCE and the header on disk.
|
|
55
|
+
* `docs/architecture.md` states that distinction and it is the useful one, so
|
|
56
|
+
* the running binary's own account lives here as one field rather than as
|
|
57
|
+
* three more siblings next to them.
|
|
58
|
+
*
|
|
59
|
+
* Undefined on a healthy connected session, so a status payload only grows
|
|
60
|
+
* when there is something to say.
|
|
61
|
+
*/
|
|
62
|
+
export declare function deployedPlugin(capabilities: BridgeCapabilities | null | undefined, parity: BridgeParity): {
|
|
63
|
+
builtAt?: string;
|
|
64
|
+
missingActions?: number;
|
|
65
|
+
warning?: string;
|
|
66
|
+
} | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* The same comparison the other way: methods the plugin has that nothing
|
|
69
|
+
* advertises.
|
|
70
|
+
*
|
|
71
|
+
* Not a defect and not reported by default. A handler can exist under an
|
|
72
|
+
* alternate spelling, or ship ahead of the TypeScript that will expose it, and
|
|
73
|
+
* `scripts/audit-handlers.mjs` is where that question is asked properly with
|
|
74
|
+
* the alternate-spelling table to hand. Here for a caller that wants the whole
|
|
75
|
+
* picture rather than only the half that breaks calls.
|
|
76
|
+
*/
|
|
77
|
+
export declare function unadvertisedMethods(graph: ToolDef[], capabilities: BridgeCapabilities | null | undefined): string[];
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/** How many missing methods to name before summarising the rest. */
|
|
2
|
+
const NAMED = 8;
|
|
3
|
+
/**
|
|
4
|
+
* Compare the advertised surface against what the connected plugin registered.
|
|
5
|
+
*
|
|
6
|
+
* `graph` is the tool graph this server actually dispatches, so a category the
|
|
7
|
+
* user disabled and a plugin's injected actions are counted as they really
|
|
8
|
+
* are rather than from the pristine declaration.
|
|
9
|
+
*/
|
|
10
|
+
export function checkBridgeParity(graph, capabilities) {
|
|
11
|
+
const registered = capabilities?.actions;
|
|
12
|
+
if (!Array.isArray(registered) || registered.length === 0) {
|
|
13
|
+
// An older plugin that predates the action list in the handshake. Silent
|
|
14
|
+
// rather than alarming: nothing was compared, so nothing is known, and
|
|
15
|
+
// saying "0 missing" would be the same false assurance this module exists
|
|
16
|
+
// to remove.
|
|
17
|
+
return { checked: false, advertised: 0, registered: 0, missing: [], message: null };
|
|
18
|
+
}
|
|
19
|
+
const have = new Set(registered);
|
|
20
|
+
const advertised = new Set();
|
|
21
|
+
for (const tool of graph) {
|
|
22
|
+
for (const spec of Object.values(tool.actions)) {
|
|
23
|
+
if (spec.kind === "bridge")
|
|
24
|
+
advertised.add(spec.bridge);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const missing = [...advertised].filter((m) => !have.has(m)).sort();
|
|
28
|
+
return {
|
|
29
|
+
checked: true,
|
|
30
|
+
advertised: advertised.size,
|
|
31
|
+
registered: registered.length,
|
|
32
|
+
missing,
|
|
33
|
+
message: missing.length === 0 ? null : describe(missing, advertised.size, registered.length),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function describe(missing, advertised, registered) {
|
|
37
|
+
const named = missing.slice(0, NAMED).join(", ");
|
|
38
|
+
const rest = missing.length > NAMED ? `, and ${missing.length - NAMED} more` : "";
|
|
39
|
+
return (`${missing.length} of the ${advertised} bridge methods this server advertises are not `
|
|
40
|
+
+ `registered by the plugin it is connected to (${registered} registered): ${named}${rest}. `
|
|
41
|
+
+ "Calling one returns 'Unknown method'. The usual cause is a deployed plugin behind this "
|
|
42
|
+
+ "package: redeploy and rebuild it (npm run up:build, or ue-mcp deploy then a build). "
|
|
43
|
+
+ "This is read from the running binary's own handler list, so it holds whatever the build "
|
|
44
|
+
+ "timestamps say.");
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* What the binary that answered says about itself, or undefined when nothing
|
|
48
|
+
* answered or it had nothing to add.
|
|
49
|
+
*
|
|
50
|
+
* `project(get_status)` already reports `pluginBuildStale` and
|
|
51
|
+
* `bridgeApiVersion`, and both are read off the SOURCE and the header on disk.
|
|
52
|
+
* `docs/architecture.md` states that distinction and it is the useful one, so
|
|
53
|
+
* the running binary's own account lives here as one field rather than as
|
|
54
|
+
* three more siblings next to them.
|
|
55
|
+
*
|
|
56
|
+
* Undefined on a healthy connected session, so a status payload only grows
|
|
57
|
+
* when there is something to say.
|
|
58
|
+
*/
|
|
59
|
+
export function deployedPlugin(capabilities, parity) {
|
|
60
|
+
if (!capabilities)
|
|
61
|
+
return undefined;
|
|
62
|
+
const missing = parity.missing.length > 0 ? parity.missing.length : undefined;
|
|
63
|
+
// The build time is the half that catches a handler which is PRESENT and
|
|
64
|
+
// old. #1002 was a DataTable resolution fix that shipped on 2026-08-28 and
|
|
65
|
+
// was reported as broken three days later by a session whose deployed plugin
|
|
66
|
+
// predated it, and nothing in reach said so: parity sees an absent method,
|
|
67
|
+
// not a stale one.
|
|
68
|
+
const builtAt = capabilities.builtAt;
|
|
69
|
+
if (!builtAt && missing === undefined)
|
|
70
|
+
return undefined;
|
|
71
|
+
return { builtAt, missingActions: missing, warning: parity.message ?? undefined };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The same comparison the other way: methods the plugin has that nothing
|
|
75
|
+
* advertises.
|
|
76
|
+
*
|
|
77
|
+
* Not a defect and not reported by default. A handler can exist under an
|
|
78
|
+
* alternate spelling, or ship ahead of the TypeScript that will expose it, and
|
|
79
|
+
* `scripts/audit-handlers.mjs` is where that question is asked properly with
|
|
80
|
+
* the alternate-spelling table to hand. Here for a caller that wants the whole
|
|
81
|
+
* picture rather than only the half that breaks calls.
|
|
82
|
+
*/
|
|
83
|
+
export function unadvertisedMethods(graph, capabilities) {
|
|
84
|
+
const registered = capabilities?.actions;
|
|
85
|
+
if (!Array.isArray(registered))
|
|
86
|
+
return [];
|
|
87
|
+
const advertised = new Set();
|
|
88
|
+
for (const tool of graph) {
|
|
89
|
+
for (const spec of Object.values(tool.actions)) {
|
|
90
|
+
if (spec.kind === "bridge")
|
|
91
|
+
advertised.add(spec.bridge);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return registered.filter((m) => !advertised.has(m)).sort();
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=bridge-parity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-parity.js","sourceRoot":"","sources":["../src/bridge-parity.ts"],"names":[],"mappings":"AA0CA,oEAAoE;AACpE,MAAM,KAAK,GAAG,CAAC,CAAC;AAEhB;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAgB,EAChB,YAAmD;IAEnD,MAAM,UAAU,GAAG,YAAY,EAAE,OAAO,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,yEAAyE;QACzE,uEAAuE;QACvE,0EAA0E;QAC1E,aAAa;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACtF,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,UAAU,CAAC,IAAI;QAC3B,UAAU,EAAE,UAAU,CAAC,MAAM;QAC7B,OAAO;QACP,OAAO,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;KAC7F,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,OAAiB,EAAE,UAAkB,EAAE,UAAkB;IACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,OAAO,CACL,GAAG,OAAO,CAAC,MAAM,WAAW,UAAU,iDAAiD;UACrF,gDAAgD,UAAU,iBAAiB,KAAK,GAAG,IAAI,IAAI;UAC3F,yFAAyF;UACzF,sFAAsF;UACtF,0FAA0F;UAC1F,iBAAiB,CACpB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAC5B,YAAmD,EACnD,MAAoB;IAEpB,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,yEAAyE;IACzE,2EAA2E;IAC3E,6EAA6E;IAC7E,2EAA2E;IAC3E,mBAAmB;IACnB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;IACrC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;AACpF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAgB,EAChB,YAAmD;IAEnD,MAAM,UAAU,GAAG,YAAY,EAAE,OAAO,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7D,CAAC"}
|
package/dist/bridge-timeouts.js
CHANGED
|
@@ -70,6 +70,7 @@ export const REGISTERED_HANDLER_TIMEOUT_SECONDS = {
|
|
|
70
70
|
fix_asset_hygiene: 300,
|
|
71
71
|
fixup_redirectors: 300,
|
|
72
72
|
generate_mesh_collision: 300,
|
|
73
|
+
get_blueprint_connections: 600,
|
|
73
74
|
get_landscape_height_region: 120,
|
|
74
75
|
get_landscape_holes: 120,
|
|
75
76
|
get_landscape_layer_weight_region: 120,
|
|
@@ -91,6 +92,7 @@ export const REGISTERED_HANDLER_TIMEOUT_SECONDS = {
|
|
|
91
92
|
sculpt_landscape: 120,
|
|
92
93
|
sculpt_landscape_region: 300,
|
|
93
94
|
search_blueprint_call_sites: 600,
|
|
95
|
+
search_blueprint_nodes: 600,
|
|
94
96
|
set_actor_hlod_layer: 300,
|
|
95
97
|
set_component_materials: 300,
|
|
96
98
|
set_landscape_height_region: 300,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-timeouts.js","sourceRoot":"","sources":["../src/bridge-timeouts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,4EAA4E;AAC5E,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,gEAAgE;AAChE,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAE/C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAqC;IAClF,yBAAyB,EAAE,GAAG;IAC9B,uBAAuB,EAAE,GAAG;IAC5B,mBAAmB,EAAE,GAAG;IACxB,oBAAoB,EAAE,GAAG;IACzB,iBAAiB,EAAE,GAAG;IACtB,iBAAiB,EAAE,GAAG;IACtB,mBAAmB,EAAE,GAAG;IACxB,mBAAmB,EAAE,GAAG;IACxB,yBAAyB,EAAE,GAAG;IAC9B,0BAA0B,EAAE,GAAG;IAC/B,gCAAgC,EAAE,GAAG;IACrC,0BAA0B,EAAE,GAAG;IAC/B,wBAAwB,EAAE,GAAG;IAC7B,2BAA2B,EAAE,GAAG;IAChC,uBAAuB,EAAE,GAAG;IAC5B,8BAA8B,EAAE,GAAG;IACnC,gBAAgB,EAAE,GAAG;IACrB,qCAAqC,EAAE,GAAG;IAC1C,0BAA0B,EAAE,GAAG;IAC/B,iBAAiB,EAAE,GAAG;IACtB,iBAAiB,EAAE,GAAG;IACtB,uBAAuB,EAAE,GAAG;IAC5B,2BAA2B,EAAE,GAAG;IAChC,mBAAmB,EAAE,GAAG;IACxB,iCAAiC,EAAE,GAAG;IACtC,uBAAuB,EAAE,GAAG;IAC5B,0BAA0B,EAAE,GAAG;IAC/B,uBAAuB,EAAE,GAAG;IAC5B,mBAAmB,EAAE,GAAG;IACxB,gBAAgB,EAAE,GAAG;IACrB,YAAY,EAAE,GAAG;IACjB,qBAAqB,EAAE,GAAG;IAC1B,yBAAyB,EAAE,GAAG;IAC9B,gBAAgB,EAAE,GAAG;IACrB,oBAAoB,EAAE,GAAG;IACzB,sBAAsB,EAAE,GAAG;IAC3B,6CAA6C,EAAE,GAAG;IAClD,0BAA0B,EAAE,GAAG;IAC/B,0BAA0B,EAAE,GAAG;IAC/B,oBAAoB,EAAE,GAAG;IACzB,gBAAgB,EAAE,GAAG;IACrB,uBAAuB,EAAE,GAAG;IAC5B,2BAA2B,EAAE,GAAG;IAChC,oBAAoB,EAAE,GAAG;IACzB,uBAAuB,EAAE,GAAG;IAC5B,2BAA2B,EAAE,GAAG;IAChC,mBAAmB,EAAE,GAAG;IACxB,iCAAiC,EAAE,GAAG;IACtC,2BAA2B,EAAE,GAAG;IAChC,yBAAyB,EAAE,GAAG;IAC9B,kBAAkB,EAAE,GAAG;IACvB,2BAA2B,EAAE,GAAG;IAChC,aAAa,EAAE,EAAE;CAClB,CAAC;AAEF,sFAAsF;AACtF,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,MAAM,OAAO,GAAG,kCAAkC,CAAC,MAAM,CAAC,CAAC;IAC3D,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AAC5D,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,oBAAoB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACvE,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,UAAmB,EACnB,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACpF,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG;QACjB,yBAAyB;QACzB,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9B,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,wBAAwB;KACrE,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,qBAAqB,CAAC,CAAC;AAClE,CAAC"}
|
|
1
|
+
{"version":3,"file":"bridge-timeouts.js","sourceRoot":"","sources":["../src/bridge-timeouts.ts"],"names":[],"mappings":"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"}
|
|
@@ -95,7 +95,6 @@ export declare const GuardDeclarationSchema: z.ZodEffects<z.ZodObject<{
|
|
|
95
95
|
}, {
|
|
96
96
|
order?: number | undefined;
|
|
97
97
|
description?: string | undefined;
|
|
98
|
-
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
99
98
|
before?: {
|
|
100
99
|
class_path: string;
|
|
101
100
|
options?: Record<string, unknown> | undefined;
|
|
@@ -104,6 +103,7 @@ export declare const GuardDeclarationSchema: z.ZodEffects<z.ZodObject<{
|
|
|
104
103
|
class_path: string;
|
|
105
104
|
options?: Record<string, unknown> | undefined;
|
|
106
105
|
} | undefined;
|
|
106
|
+
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
107
107
|
}>, {
|
|
108
108
|
order: number;
|
|
109
109
|
scope: "unknown" | "all" | "mutations" | "writes" | "reads";
|
|
@@ -119,7 +119,6 @@ export declare const GuardDeclarationSchema: z.ZodEffects<z.ZodObject<{
|
|
|
119
119
|
}, {
|
|
120
120
|
order?: number | undefined;
|
|
121
121
|
description?: string | undefined;
|
|
122
|
-
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
123
122
|
before?: {
|
|
124
123
|
class_path: string;
|
|
125
124
|
options?: Record<string, unknown> | undefined;
|
|
@@ -128,6 +127,7 @@ export declare const GuardDeclarationSchema: z.ZodEffects<z.ZodObject<{
|
|
|
128
127
|
class_path: string;
|
|
129
128
|
options?: Record<string, unknown> | undefined;
|
|
130
129
|
} | undefined;
|
|
130
|
+
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
131
131
|
}>;
|
|
132
132
|
/** Guards keyed by name. The name is an identifier, not a phase encoding. */
|
|
133
133
|
export declare const GuardsSchema: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodObject<{
|
|
@@ -176,7 +176,6 @@ export declare const GuardsSchema: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEf
|
|
|
176
176
|
}, {
|
|
177
177
|
order?: number | undefined;
|
|
178
178
|
description?: string | undefined;
|
|
179
|
-
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
180
179
|
before?: {
|
|
181
180
|
class_path: string;
|
|
182
181
|
options?: Record<string, unknown> | undefined;
|
|
@@ -185,6 +184,7 @@ export declare const GuardsSchema: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEf
|
|
|
185
184
|
class_path: string;
|
|
186
185
|
options?: Record<string, unknown> | undefined;
|
|
187
186
|
} | undefined;
|
|
187
|
+
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
188
188
|
}>, {
|
|
189
189
|
order: number;
|
|
190
190
|
scope: "unknown" | "all" | "mutations" | "writes" | "reads";
|
|
@@ -200,7 +200,6 @@ export declare const GuardsSchema: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEf
|
|
|
200
200
|
}, {
|
|
201
201
|
order?: number | undefined;
|
|
202
202
|
description?: string | undefined;
|
|
203
|
-
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
204
203
|
before?: {
|
|
205
204
|
class_path: string;
|
|
206
205
|
options?: Record<string, unknown> | undefined;
|
|
@@ -209,6 +208,7 @@ export declare const GuardsSchema: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEf
|
|
|
209
208
|
class_path: string;
|
|
210
209
|
options?: Record<string, unknown> | undefined;
|
|
211
210
|
} | undefined;
|
|
211
|
+
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
212
212
|
}>>>;
|
|
213
213
|
export type GuardScope = z.infer<typeof GuardScopeSchema>;
|
|
214
214
|
export type GuardHook = z.infer<typeof GuardHookSchema>;
|
package/dist/flow/guards.js
CHANGED
|
@@ -3,6 +3,7 @@ import { withoutDialogActuation } from "../dialog-guard.js";
|
|
|
3
3
|
import { DialogGatedBridge } from "./guarded-bridge.js";
|
|
4
4
|
import { McpError, ErrorCode } from "../errors.js";
|
|
5
5
|
import { debug } from "../log.js";
|
|
6
|
+
import { GUARD_CALL_KEY, GUARD_CONFIG_KEY, } from "../guard-task.js";
|
|
6
7
|
/**
|
|
7
8
|
* The context a hook task runs in.
|
|
8
9
|
*
|
|
@@ -22,22 +23,42 @@ function hookContext(cc, deps) {
|
|
|
22
23
|
session: cc.session,
|
|
23
24
|
};
|
|
24
25
|
}
|
|
25
|
-
/**
|
|
26
|
-
|
|
26
|
+
/**
|
|
27
|
+
* What a hook is told about the call it is guarding.
|
|
28
|
+
*
|
|
29
|
+
* Two shapes, deliberately. The flattened keys are what a guard written
|
|
30
|
+
* against `UeMcpTask` reads, and they keep their old meaning exactly: the
|
|
31
|
+
* declaration goes in first so the call being guarded wins a collision, which
|
|
32
|
+
* is the behaviour those guards were written against.
|
|
33
|
+
*
|
|
34
|
+
* The two reserved keys are what `UeMcpGuard` reads, and they exist because
|
|
35
|
+
* that flattening is a hazard: a guard whose option is named `method` loses
|
|
36
|
+
* it, and the phase can only be inferred from `result` happening to be there.
|
|
37
|
+
* Nested, the configuration and the subject cannot touch each other, and the
|
|
38
|
+
* phase is stated rather than detected.
|
|
39
|
+
*/
|
|
40
|
+
function hookOptions(cc, declared, phase, result) {
|
|
41
|
+
const paths = cc.writeFiles();
|
|
27
42
|
return {
|
|
28
|
-
// The declaration first, so the call being guarded always wins a
|
|
29
|
-
// collision: a guard reads its configuration and its subject from one
|
|
30
|
-
// object, and the subject is never masked by a stale default.
|
|
31
43
|
...declared,
|
|
32
44
|
method: cc.method,
|
|
33
45
|
params: cc.params,
|
|
34
|
-
paths
|
|
46
|
+
paths,
|
|
35
47
|
...(result !== undefined ? { result } : {}),
|
|
48
|
+
[GUARD_CALL_KEY]: {
|
|
49
|
+
phase,
|
|
50
|
+
method: cc.method,
|
|
51
|
+
params: cc.params,
|
|
52
|
+
paths,
|
|
53
|
+
session: cc.session,
|
|
54
|
+
...(result !== undefined ? { result } : {}),
|
|
55
|
+
},
|
|
56
|
+
[GUARD_CONFIG_KEY]: declared,
|
|
36
57
|
};
|
|
37
58
|
}
|
|
38
59
|
/** Run one hook and give back what it answered. */
|
|
39
|
-
async function runHook(hook, cc, deps, result) {
|
|
40
|
-
const task = await deps.registry.create(hook.class_path, hookContext(cc, deps), hookOptions(cc, hook.options, result));
|
|
60
|
+
async function runHook(hook, cc, deps, phase, result) {
|
|
61
|
+
const task = await deps.registry.create(hook.class_path, hookContext(cc, deps), hookOptions(cc, hook.options, phase, result));
|
|
41
62
|
return (await task.execute());
|
|
42
63
|
}
|
|
43
64
|
/** The message a denial carries, from wherever the hook put it. */
|
|
@@ -92,7 +113,7 @@ export async function buildGuards(declarations, deps, source) {
|
|
|
92
113
|
before: async (cc) => {
|
|
93
114
|
let answered;
|
|
94
115
|
try {
|
|
95
|
-
answered = await runHook(decl.before, cc, deps);
|
|
116
|
+
answered = await runHook(decl.before, cc, deps, "before");
|
|
96
117
|
}
|
|
97
118
|
catch (e) {
|
|
98
119
|
// A hook that threw denies the call. It is the same outcome as
|
|
@@ -114,7 +135,7 @@ export async function buildGuards(declarations, deps, source) {
|
|
|
114
135
|
after: async (cc, result) => {
|
|
115
136
|
let answered;
|
|
116
137
|
try {
|
|
117
|
-
answered = await runHook(decl.after, cc, deps, result);
|
|
138
|
+
answered = await runHook(decl.after, cc, deps, "after", result);
|
|
118
139
|
}
|
|
119
140
|
catch (e) {
|
|
120
141
|
// The call already happened. Failing it now would report a
|
package/dist/flow/guards.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/flow/guards.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,aAAa,EACb,SAAS,EACT,YAAY,EACZ,UAAU,GAGX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/flow/guards.ts"],"names":[],"mappings":"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"}
|
package/dist/flow/schema.d.ts
CHANGED
|
@@ -713,7 +713,6 @@ export declare const FlowConfigSchema: z.ZodObject<{
|
|
|
713
713
|
}, {
|
|
714
714
|
order?: number | undefined;
|
|
715
715
|
description?: string | undefined;
|
|
716
|
-
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
717
716
|
before?: {
|
|
718
717
|
class_path: string;
|
|
719
718
|
options?: Record<string, unknown> | undefined;
|
|
@@ -722,6 +721,7 @@ export declare const FlowConfigSchema: z.ZodObject<{
|
|
|
722
721
|
class_path: string;
|
|
723
722
|
options?: Record<string, unknown> | undefined;
|
|
724
723
|
} | undefined;
|
|
724
|
+
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
725
725
|
}>, {
|
|
726
726
|
order: number;
|
|
727
727
|
scope: "unknown" | "all" | "mutations" | "writes" | "reads";
|
|
@@ -737,7 +737,6 @@ export declare const FlowConfigSchema: z.ZodObject<{
|
|
|
737
737
|
}, {
|
|
738
738
|
order?: number | undefined;
|
|
739
739
|
description?: string | undefined;
|
|
740
|
-
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
741
740
|
before?: {
|
|
742
741
|
class_path: string;
|
|
743
742
|
options?: Record<string, unknown> | undefined;
|
|
@@ -746,6 +745,7 @@ export declare const FlowConfigSchema: z.ZodObject<{
|
|
|
746
745
|
class_path: string;
|
|
747
746
|
options?: Record<string, unknown> | undefined;
|
|
748
747
|
} | undefined;
|
|
748
|
+
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
749
749
|
}>>>;
|
|
750
750
|
}, "strip", z.ZodTypeAny, {
|
|
751
751
|
plugins: {
|
|
@@ -979,7 +979,6 @@ export declare const FlowConfigSchema: z.ZodObject<{
|
|
|
979
979
|
guards?: Record<string, {
|
|
980
980
|
order?: number | undefined;
|
|
981
981
|
description?: string | undefined;
|
|
982
|
-
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
983
982
|
before?: {
|
|
984
983
|
class_path: string;
|
|
985
984
|
options?: Record<string, unknown> | undefined;
|
|
@@ -988,6 +987,7 @@ export declare const FlowConfigSchema: z.ZodObject<{
|
|
|
988
987
|
class_path: string;
|
|
989
988
|
options?: Record<string, unknown> | undefined;
|
|
990
989
|
} | undefined;
|
|
990
|
+
scope?: "unknown" | "all" | "mutations" | "writes" | "reads" | undefined;
|
|
991
991
|
}> | undefined;
|
|
992
992
|
agents?: Record<string, {
|
|
993
993
|
description?: string | undefined;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public guard-authoring surface for ue-mcp.
|
|
3
|
+
*
|
|
4
|
+
* A guard is not a task. `flow/guards.ts` has said so since guards stopped
|
|
5
|
+
* being tasks whose NAME encoded their phase and scope, and the declaration
|
|
6
|
+
* side reflects it: a guard is declared with `scope`, `order`, `before` and
|
|
7
|
+
* `after`, and is merely IMPLEMENTED BY a task named by `class_path`.
|
|
8
|
+
*
|
|
9
|
+
* The authoring side did not reflect it. Writing a guard meant extending
|
|
10
|
+
* `UeMcpTask` and implementing `execute()`, which left three things wrong:
|
|
11
|
+
*
|
|
12
|
+
* Nothing was typed. `this.options` is `Record<string, unknown>`, so every
|
|
13
|
+
* guard cast or guessed its way to `method` and `paths`.
|
|
14
|
+
*
|
|
15
|
+
* Configuration and subject shared one namespace. The declared `options` and
|
|
16
|
+
* the call being guarded were flattened into one bag, and the call won any
|
|
17
|
+
* collision, so a guard with an option named `method` silently lost it.
|
|
18
|
+
*
|
|
19
|
+
* The phase was implicit. One `execute()` served both hooks, and a class
|
|
20
|
+
* used for both could only tell them apart by sniffing for a `result` key.
|
|
21
|
+
* `TaskResult.data` meanwhile means "replace the call's result" after the
|
|
22
|
+
* call and means nothing before it.
|
|
23
|
+
*
|
|
24
|
+
* `UeMcpGuard` fixes all three without moving the runtime: it still registers
|
|
25
|
+
* as a task, so `class_path` resolution, plugin loading and the pipeline are
|
|
26
|
+
* unchanged, and a guard written against `UeMcpTask` keeps working exactly as
|
|
27
|
+
* it did.
|
|
28
|
+
*
|
|
29
|
+
* ```ts
|
|
30
|
+
* import { UeMcpGuard, type GuardedCall } from "ue-mcp/guard";
|
|
31
|
+
*
|
|
32
|
+
* export default class Freeze extends UeMcpGuard<{ enabled?: boolean }> {
|
|
33
|
+
* get taskName() { return "freeze"; }
|
|
34
|
+
* async before(call: GuardedCall) {
|
|
35
|
+
* if (this.config.enabled === false) return this.allow();
|
|
36
|
+
* return this.deny(`Blocked '${call.method}'.`);
|
|
37
|
+
* }
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
import type { TaskResult } from "@db-lyon/flowkit";
|
|
42
|
+
import type { EditorSession } from "./session.js";
|
|
43
|
+
import { UeMcpTask } from "./task.js";
|
|
44
|
+
/**
|
|
45
|
+
* Where the pipeline puts the call being guarded, and the guard's own declared
|
|
46
|
+
* options, so the two cannot collide with each other or with anything a guard
|
|
47
|
+
* chooses to name.
|
|
48
|
+
*
|
|
49
|
+
* Reserved keys rather than symbols: the options object crosses the task
|
|
50
|
+
* registry, and a key that survives being spread is the one thing that has to
|
|
51
|
+
* hold. Both are also still flattened into the bag alongside these, because a
|
|
52
|
+
* guard written against `UeMcpTask` reads them there and must keep working.
|
|
53
|
+
*/
|
|
54
|
+
export declare const GUARD_CALL_KEY = "__ueMcpGuardCall";
|
|
55
|
+
export declare const GUARD_CONFIG_KEY = "__ueMcpGuardConfig";
|
|
56
|
+
/** Which hook is running. */
|
|
57
|
+
export type GuardPhase = "before" | "after";
|
|
58
|
+
/** The call a guard is being asked about. */
|
|
59
|
+
export interface GuardedCall {
|
|
60
|
+
/** Which hook this is. */
|
|
61
|
+
readonly phase: GuardPhase;
|
|
62
|
+
/** The bridge method. For a wrapped engine tool this is `epic_call_tool`. */
|
|
63
|
+
readonly method: string;
|
|
64
|
+
/** The arguments the call carries. */
|
|
65
|
+
readonly params: Record<string, unknown>;
|
|
66
|
+
/**
|
|
67
|
+
* Existing files on disk the call would modify. Empty for a read, and empty
|
|
68
|
+
* for a mutation that names no content path, which is why a guard that wants
|
|
69
|
+
* "everything that changes" is declared `scope: mutations` rather than
|
|
70
|
+
* inferring it from this being non-empty.
|
|
71
|
+
*/
|
|
72
|
+
readonly paths: readonly string[];
|
|
73
|
+
/** The editor this call is bound to, when it has one. */
|
|
74
|
+
readonly session?: EditorSession;
|
|
75
|
+
}
|
|
76
|
+
/** What a `before` hook answers. Build one with `allow()` or `deny()`. */
|
|
77
|
+
export type GuardVerdict = TaskResult;
|
|
78
|
+
/** The payload `flow/guards.ts` hands a guard task. */
|
|
79
|
+
export interface GuardHookPayload {
|
|
80
|
+
phase: GuardPhase;
|
|
81
|
+
method: string;
|
|
82
|
+
params: Record<string, unknown>;
|
|
83
|
+
paths: string[];
|
|
84
|
+
result?: unknown;
|
|
85
|
+
session?: EditorSession;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Base class for a ue-mcp guard.
|
|
89
|
+
*
|
|
90
|
+
* Implement `before`, `after`, or both. `execute()` is wired once here and
|
|
91
|
+
* routes to whichever the pipeline asked for, so the phase is a signature
|
|
92
|
+
* rather than something to detect.
|
|
93
|
+
*/
|
|
94
|
+
export declare abstract class UeMcpGuard<TConfig = Record<string, unknown>> extends UeMcpTask {
|
|
95
|
+
/**
|
|
96
|
+
* The options this guard was DECLARED with, and nothing else.
|
|
97
|
+
*
|
|
98
|
+
* `this.options` still holds the flattened bag for compatibility. This is
|
|
99
|
+
* the one to read: the call being guarded cannot mask a key of yours in it.
|
|
100
|
+
*/
|
|
101
|
+
protected get config(): TConfig;
|
|
102
|
+
/** Let the call proceed. */
|
|
103
|
+
protected allow(): GuardVerdict;
|
|
104
|
+
/**
|
|
105
|
+
* Refuse the call. The reason reaches the caller as a WRITE_BLOCKED error,
|
|
106
|
+
* so write it for whoever is about to read it in an agent transcript.
|
|
107
|
+
*/
|
|
108
|
+
protected deny(reason: string): GuardVerdict;
|
|
109
|
+
/**
|
|
110
|
+
* Runs before the call. Returning `deny()` stops it; the call never happens.
|
|
111
|
+
* Throwing denies it too, because a guard that errored is not one that
|
|
112
|
+
* approved.
|
|
113
|
+
*/
|
|
114
|
+
protected before?(call: GuardedCall): Promise<GuardVerdict> | GuardVerdict;
|
|
115
|
+
/**
|
|
116
|
+
* Runs after a call that succeeded, and cannot deny it: it already happened.
|
|
117
|
+
* Return an object to REPLACE the result, or nothing to leave it alone.
|
|
118
|
+
*
|
|
119
|
+
* An object rather than anything, because that is what the pipeline can
|
|
120
|
+
* actually carry: a replacement travels back as a task result's `data`, and
|
|
121
|
+
* a scalar there has nowhere to go.
|
|
122
|
+
*/
|
|
123
|
+
protected after?(call: GuardedCall, result: unknown): Promise<Record<string, unknown> | void> | Record<string, unknown> | void;
|
|
124
|
+
execute(): Promise<TaskResult>;
|
|
125
|
+
}
|