ue-mcp 1.3.8-beta → 1.3.8-beta.11

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 (80) hide show
  1. package/README.md +2 -2
  2. package/dist/action-class.js +4 -0
  3. package/dist/action-class.js.map +1 -1
  4. package/dist/bridge-parity.d.ts +77 -0
  5. package/dist/bridge-parity.js +96 -0
  6. package/dist/bridge-parity.js.map +1 -0
  7. package/dist/bridge-timeouts.js +2 -0
  8. package/dist/bridge-timeouts.js.map +1 -1
  9. package/dist/client-quirks.d.ts +9 -0
  10. package/dist/client-quirks.js +42 -0
  11. package/dist/client-quirks.js.map +1 -1
  12. package/dist/dialog-guard.d.ts +90 -19
  13. package/dist/dialog-guard.js +282 -58
  14. package/dist/dialog-guard.js.map +1 -1
  15. package/dist/editor-control.d.ts +6 -124
  16. package/dist/editor-control.js +103 -505
  17. package/dist/editor-control.js.map +1 -1
  18. package/dist/flow/guard-schema.d.ts +4 -4
  19. package/dist/flow/guards.js +31 -10
  20. package/dist/flow/guards.js.map +1 -1
  21. package/dist/flow/schema.d.ts +3 -3
  22. package/dist/flow/task-factory.js +5 -3
  23. package/dist/flow/task-factory.js.map +1 -1
  24. package/dist/guard-task.d.ts +125 -0
  25. package/dist/guard-task.js +85 -0
  26. package/dist/guard-task.js.map +1 -0
  27. package/dist/index.js +25 -4
  28. package/dist/index.js.map +1 -1
  29. package/dist/plugin/manifest.d.ts +3 -3
  30. package/dist/schemas.d.ts +157 -0
  31. package/dist/schemas.js +20 -0
  32. package/dist/schemas.js.map +1 -1
  33. package/dist/tool-counts.json +9 -9
  34. package/dist/tools/animation.js +77 -7
  35. package/dist/tools/animation.js.map +1 -1
  36. package/dist/tools/asset.js +14 -1
  37. package/dist/tools/asset.js.map +1 -1
  38. package/dist/tools/blueprint.js +17 -4
  39. package/dist/tools/blueprint.js.map +1 -1
  40. package/dist/tools/editor.js +28 -34
  41. package/dist/tools/editor.js.map +1 -1
  42. package/dist/tools/level.js +11 -3
  43. package/dist/tools/level.js.map +1 -1
  44. package/dist/tools/material.js +3 -2
  45. package/dist/tools/material.js.map +1 -1
  46. package/dist/tools/project.js +18 -1
  47. package/dist/tools/project.js.map +1 -1
  48. package/dist/types.d.ts +11 -0
  49. package/dist/types.js.map +1 -1
  50. package/dist/ue-mcp.default.yml +75 -15
  51. package/dist/user-state.d.ts +8 -0
  52. package/dist/user-state.js.map +1 -1
  53. package/package.json +6 -2
  54. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.cpp +226 -0
  55. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.h +7 -0
  56. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_ControlRigSequencer.cpp +932 -27
  57. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_IKRetargeterAuthoring.cpp +394 -0
  58. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_SkeletalLive.cpp +115 -0
  59. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_StateMachine.cpp +22 -0
  60. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Import.cpp +33 -2
  61. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers.cpp +3 -0
  62. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers.h +3 -0
  63. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Depth.cpp +164 -0
  64. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Graph.cpp +25 -4
  65. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Search.cpp +440 -0
  66. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DialogHandlers.cpp +60 -1
  67. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.cpp +432 -44
  68. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.h +1 -0
  69. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers.cpp +243 -93
  70. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers.h +1 -0
  71. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SkeletalMeshHandlers.cpp +793 -0
  72. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SkeletalMeshHandlers.h +2 -0
  73. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SplineHandlers.cpp +228 -19
  74. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AnimationSkeletonCreateTests.cpp +46 -0
  75. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LivePostProcessAnimBlueprintTests.cpp +65 -0
  76. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/SplineHandlersTests.cpp +92 -0
  77. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/ViewportCameraHandlerTests.cpp +114 -0
  78. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/UE_MCP_Bridge.Build.cs +3 -0
  79. package/plugin/ue_mcp_bridge/UE_MCP_Bridge.uplugin +2 -2
  80. package/skills/ue-mcp-animation/SKILL.md +29 -1
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![stars](https://img.shields.io/github/stars/db-lyon/ue-mcp)](https://github.com/db-lyon/ue-mcp/stargazers)
6
6
  [![MIT](https://img.shields.io/npm/l/ue-mcp)](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 -->1920+<!-- /count --> actions, plus a YAML flow engine for multi-step workflows and an npm plugin system for extending the surface.
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 -->1920+<!-- /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/).
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
 
@@ -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",
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAmBnE;;;;;;;;;;GAUG;AACH,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAS;IACxD,GAAG,eAAe;IAClB,gDAAgD;IAChD,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;IAC1C,iCAAiC;IACjC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ;IACxF,yEAAyE;IACzE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO;IAC1E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;IAC/E,iEAAiE;IACjE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW;IAC/E,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ;IACvF,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM;IACzE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM;IACxE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK;IAC3E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAC7E,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY;IACrE,sEAAsE;IACtE,4EAA4E;IAC5E,SAAS;IACT,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;IAC5E,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO;IACpF,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ;IAChE,8EAA8E;IAC9E,+EAA+E;IAC/E,8EAA8E;IAC9E,cAAc;IACd,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;IAC7E,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;IACnE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ;IACvE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM;CAC7E,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,GAAwB,IAAI,GAAG,CAAS;IACtD,GAAG,aAAa;IAChB,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;IACxE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO;CAChE,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,SAAS,GAA0C;IACvD,uEAAuE;IACvE,4EAA4E;IAC5E,6EAA6E;IAC7E,sEAAsE;IACtE,sBAAsB,EAAE,MAAM;IAC9B,oBAAoB,EAAE,MAAM;IAC5B,oBAAoB,EAAE,MAAM;IAC5B,qBAAqB,EAAE,MAAM;IAE7B,2EAA2E;IAC3E,yEAAyE;IACzE,aAAa;IACb,WAAW,EAAE,MAAM;IAEnB,uEAAuE;IACvE,yEAAyE;IACzE,yEAAyE;IACzE,4EAA4E;IAC5E,yEAAyE;IACzE,aAAa;IACb,wBAAwB,EAAE,MAAM;IAChC,yBAAyB,EAAE,MAAM;IACjC,2EAA2E;IAC3E,4EAA4E;IAC5E,wEAAwE;IACxE,4EAA4E;IAC5E,eAAe;IACf,yBAAyB,EAAE,MAAM;IACjC,wBAAwB,EAAE,MAAM;IAEhC,uEAAuE;IACvE,0EAA0E;IAC1E,8DAA8D;IAC9D,wBAAwB,EAAE,MAAM;IAChC,+CAA+C;IAC/C,uBAAuB,EAAE,MAAM;IAC/B,yCAAyC,EAAE,MAAM;IACjD,yEAAyE;IACzE,kBAAkB,EAAE,QAAQ;IAC5B,wCAAwC;IACxC,iBAAiB,EAAE,MAAM;IACzB,8EAA8E;IAC9E,wCAAwC,EAAE,QAAQ;IAClD,4EAA4E;IAC5E,4EAA4E;IAC5E,2BAA2B,EAAE,QAAQ;IACrC,yEAAyE;IACzE,+CAA+C;IAC/C,2BAA2B,EAAE,MAAM;IACnC,sEAAsE;IACtE,6BAA6B,EAAE,QAAQ;IACvC,gEAAgE;IAChE,oCAAoC,EAAE,QAAQ;IAE9C,uEAAuE;IACvE,yEAAyE;IACzE,wDAAwD;IACxD,mBAAmB,EAAE,QAAQ;IAC7B,oBAAoB,EAAE,QAAQ;IAC9B,2EAA2E;IAC3E,0EAA0E;IAC1E,4EAA4E;IAC5E,gBAAgB;IAChB,8BAA8B,EAAE,SAAS;IAEzC,uEAAuE;IACvE,gBAAgB,EAAE,SAAS;IAC3B,uBAAuB,EAAE,QAAQ;IACjC,+BAA+B,EAAE,QAAQ;IACzC,wBAAwB,EAAE,QAAQ;IAClC,+BAA+B,EAAE,SAAS;IAC1C,gCAAgC,EAAE,SAAS;IAC3C,+BAA+B,EAAE,SAAS;IAC1C,wBAAwB,EAAE,SAAS;IACnC,gCAAgC,EAAE,SAAS;IAC3C,eAAe,EAAE,QAAQ;IAEzB,uEAAuE;IACvE,6EAA6E;IAC7E,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,aAAa;IACb,2BAA2B,EAAE,MAAM;IACnC,2BAA2B,EAAE,MAAM;IACnC,mCAAmC,EAAE,MAAM;IAE3C,uEAAuE;IACvE,kEAAkE;IAClE,4BAA4B,EAAE,MAAM;IACpC,yEAAyE;IACzE,6EAA6E;IAC7E,yEAAyE;IACzE,8DAA8D;IAC9D,6BAA6B,EAAE,MAAM;IACrC,uBAAuB,EAAE,MAAM;IAC/B,kBAAkB,EAAE,MAAM;IAC1B,4EAA4E;IAC5E,mEAAmE;IACnE,wBAAwB,EAAE,MAAM;IAChC,0EAA0E;IAC1E,wBAAwB,EAAE,MAAM;IAChC,6EAA6E;IAC7E,+EAA+E;IAC/E,6EAA6E;IAC7E,gFAAgF;IAChF,0BAA0B,EAAE,MAAM;IAClC,+BAA+B,EAAE,MAAM;IACvC,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM;IACxB,2EAA2E;IAC3E,8EAA8E;IAC9E,6EAA6E;IAC7E,6BAA6B,EAAE,MAAM;IACrC,2EAA2E;IAC3E,8EAA8E;IAC9E,qEAAqE;IACrE,kCAAkC,EAAE,MAAM;IAC1C,uEAAuE;IACvE,kEAAkE;IAClE,iCAAiC,EAAE,MAAM;IACzC,4EAA4E;IAC5E,oCAAoC,EAAE,MAAM;IAC5C,yEAAyE;IACzE,2CAA2C;IAC3C,6BAA6B,EAAE,SAAS;IACxC,wEAAwE;IACxE,4EAA4E;IAC5E,sEAAsE;IACtE,iCAAiC,EAAE,MAAM;IACzC,uEAAuE;IACvE,0EAA0E;IAC1E,uEAAuE;IACvE,0BAA0B,EAAE,QAAQ;IACpC,8BAA8B,EAAE,QAAQ;IACxC,2EAA2E;IAC3E,6CAA6C;IAC7C,8BAA8B,EAAE,MAAM;IACtC,4EAA4E;IAC5E,0EAA0E;IAC1E,mCAAmC;IACnC,4BAA4B,EAAE,MAAM;IACpC,kDAAkD;IAClD,kBAAkB,EAAE,MAAM;IAC1B,4EAA4E;IAC5E,gDAAgD;IAChD,uBAAuB,EAAE,MAAM;IAC/B,yBAAyB,EAAE,MAAM;IACjC,6BAA6B,EAAE,MAAM;IACrC,yBAAyB,EAAE,MAAM;IACjC,wBAAwB,EAAE,MAAM;IAChC,gCAAgC,EAAE,MAAM;IACxC,0BAA0B,EAAE,MAAM;IAClC,2EAA2E;IAC3E,uEAAuE;IACvE,wEAAwE;IACxE,uBAAuB,EAAE,MAAM;IAC/B,mBAAmB,EAAE,MAAM;IAC3B,4BAA4B,EAAE,MAAM;IACpC,gBAAgB,EAAE,MAAM;IACxB,aAAa,EAAE,MAAM;IACrB,YAAY,EAAE,MAAM;IAEpB,uEAAuE;IACvE,oEAAoE;IACpE,6BAA6B,EAAE,QAAQ;IACvC,yEAAyE;IACzE,gDAAgD,EAAE,QAAQ;IAC1D,6BAA6B;IAC7B,yBAAyB,EAAE,QAAQ;IACnC,cAAc,EAAE,QAAQ;IACxB,sBAAsB,EAAE,QAAQ;IAChC,wBAAwB,EAAE,QAAQ;IAClC,sEAAsE;IACtE,2EAA2E;IAC3E,4CAA4C;IAC5C,4BAA4B,EAAE,QAAQ;IACtC,2EAA2E;IAC3E,wEAAwE;IACxE,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,6CAA6C;IAC7C,mBAAmB,EAAE,MAAM;IAC3B,6DAA6D;IAC7D,mBAAmB,EAAE,QAAQ;IAC7B,iEAAiE;IACjE,6EAA6E;IAC7E,4EAA4E;IAC5E,uCAAuC;IACvC,yBAAyB,EAAE,QAAQ;IACnC,uEAAuE;IACvE,6EAA6E;IAC7E,4EAA4E;IAC5E,6BAA6B;IAC7B,oBAAoB,EAAE,QAAQ;IAC9B,mCAAmC;IACnC,iBAAiB,EAAE,QAAQ;IAC3B,wEAAwE;IACxE,2EAA2E;IAC3E,0EAA0E;IAC1E,4EAA4E;IAC5E,aAAa;IACb,8BAA8B,EAAE,QAAQ;IAExC,yEAAyE;IACzE,6EAA6E;IAC7E,4EAA4E;IAC5E,uEAAuE;IACvE,gDAAgD;IAChD,wBAAwB,EAAE,MAAM;IAEhC,uEAAuE;IACvE,2EAA2E;IAC3E,4EAA4E;IAC5E,qEAAqE;IACrE,2BAA2B,EAAE,MAAM;IACnC,+BAA+B,EAAE,MAAM;IACvC,mCAAmC,EAAE,MAAM;IAC3C,gCAAgC,EAAE,MAAM;IACxC,kCAAkC,EAAE,MAAM;IAC1C,gCAAgC,EAAE,MAAM;IACxC,8BAA8B,EAAE,MAAM;IACtC,8BAA8B,EAAE,MAAM;IACtC,0EAA0E;IAC1E,mDAAmD;IACnD,0BAA0B,EAAE,MAAM;IAClC,qBAAqB,EAAE,MAAM;IAC7B,yEAAyE;IACzE,2DAA2D;IAC3D,wBAAwB,EAAE,MAAM;IAEhC,uEAAuE;IACvE,0EAA0E;IAC1E,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,wEAAwE;IACxE,2EAA2E;IAC3E,uDAAuD;IACvD,oBAAoB,EAAE,QAAQ;IAC9B,mBAAmB,EAAE,QAAQ;IAC7B,qBAAqB,EAAE,QAAQ;IAC/B,qBAAqB,EAAE,QAAQ;IAC/B,qBAAqB,EAAE,QAAQ;IAC/B,qBAAqB,EAAE,QAAQ;IAC/B,mBAAmB,EAAE,MAAM;IAC3B,kBAAkB,EAAE,MAAM;IAC1B,qBAAqB,EAAE,MAAM;IAC7B,oBAAoB,EAAE,QAAQ;IAC9B,mBAAmB,EAAE,QAAQ;IAC7B,iBAAiB,EAAE,MAAM;IACzB,gBAAgB,EAAE,MAAM;IACxB,kBAAkB,EAAE,MAAM;CAC3B,CAAC;AAEF,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACjD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;AACvE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,MAAc;IAC9D,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAE7D,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7F,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,8EAA8E;IAC9E,yEAAyE;IACzE,8EAA8E;IAC9E,oDAAoD;IACpD,EAAE;IACF,mEAAmE;IACnE,2EAA2E;IAC3E,4EAA4E;IAC5E,8EAA8E;IAC9E,oEAAoE;IACpE,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAEnF,8EAA8E;IAC9E,sEAAsE;IACtE,wEAAwE;IACxE,0EAA0E;IAC1E,8EAA8E;IAC9E,2EAA2E;IAC3E,+DAA+D;IAC/D,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAEjF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AACpD,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAc;IAC5D,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAgB;IACrD,OAAO,GAAG,KAAK,MAAM,CAAC;AACxB,CAAC"}
@@ -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":"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"}
@@ -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":"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"}
1
+ {"version":3,"file":"bridge-timeouts.js","sourceRoot":"","sources":["../src/bridge-timeouts.ts"],"names":[],"mappings":"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"}
@@ -14,3 +14,12 @@ export interface ClientInfo {
14
14
  version?: string;
15
15
  }
16
16
  export declare function progressRenderingNote(client: ClientInfo | undefined): string | null;
17
+ /**
18
+ * Whether the elicitation form has to be preceded by handing the dialog over.
19
+ *
20
+ * `UE_MCP_DIALOG_RELAY=off` turns it off whatever the client is, so a client
21
+ * whose rendering is fine does not have to wait for a release to say so, and
22
+ * `=on` forces it back on. Anything else, including unset, leaves the decision
23
+ * to the client.
24
+ */
25
+ export declare function elicitationNeedsRelay(client: ClientInfo | undefined): boolean;
@@ -67,4 +67,46 @@ export function progressRenderingNote(client) {
67
67
  "timeline above is what you would have watched live. Upgrading Claude Code " +
68
68
  "restores the live view.");
69
69
  }
70
+ /**
71
+ * Clients that render a whole elicitation message, so the dialog does not need
72
+ * handing over on a call of its own first.
73
+ *
74
+ * The relay costs a round trip. It is worth it against a client that draws the
75
+ * opening line or two of an elicitation and collapses the rest behind "(+N
76
+ * more lines)", because there the person is otherwise choosing between buttons
77
+ * for a question they cannot read. Against a client that draws the lot it buys
78
+ * nothing and delays the form.
79
+ *
80
+ * The DEFAULT IS TO RELAY, and an unknown client relays. The two failure modes
81
+ * are not equal: relaying needlessly costs one call, and not relaying against a
82
+ * client that truncates puts a question in front of someone with the question
83
+ * missing. A client earns its way onto this list by being checked, not by being
84
+ * absent from the other one.
85
+ *
86
+ * Names are matched against the `clientInfo.name` a client sends at
87
+ * initialize, lowercased. Each entry needs verifying against the real string
88
+ * that client sends rather than the name it goes by in conversation.
89
+ */
90
+ const RENDERS_WHOLE_ELICITATION = [
91
+ "pi-coding-agent",
92
+ ];
93
+ /**
94
+ * Whether the elicitation form has to be preceded by handing the dialog over.
95
+ *
96
+ * `UE_MCP_DIALOG_RELAY=off` turns it off whatever the client is, so a client
97
+ * whose rendering is fine does not have to wait for a release to say so, and
98
+ * `=on` forces it back on. Anything else, including unset, leaves the decision
99
+ * to the client.
100
+ */
101
+ export function elicitationNeedsRelay(client) {
102
+ const override = (process.env.UE_MCP_DIALOG_RELAY ?? "").trim().toLowerCase();
103
+ if (override === "off" || override === "0" || override === "false")
104
+ return false;
105
+ if (override === "on" || override === "1" || override === "true")
106
+ return true;
107
+ if (!client)
108
+ return true;
109
+ const name = client.name.toLowerCase();
110
+ return !RENDERS_WHOLE_ELICITATION.some((known) => name.includes(known));
111
+ }
70
112
  //# sourceMappingURL=client-quirks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-quirks.js","sourceRoot":"","sources":["../src/client-quirks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,+DAA+D;AAC/D,SAAS,YAAY,CAAC,OAA2B;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,OAAO,OAAO;SACX,KAAK,CAAC,GAAG,CAAC;SACV,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,OAAO,CAAC,OAA2B,EAAE,MAAgB;IAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,0BAA0B,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/C,MAAM,6BAA6B,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAElD,MAAM,UAAU,qBAAqB,CAAC,MAA8B;IAClE,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC5E,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC;QAAE,OAAO,IAAI,CAAC;IACtE,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;QAAE,OAAO,IAAI,CAAC;IAExE,OAAO,CACL,qEAAqE,MAAM,CAAC,OAAO,IAAI,SAAS,GAAG;QACnG,sEAAsE;QACtE,+EAA+E;QAC/E,0EAA0E;QAC1E,4EAA4E;QAC5E,yBAAyB,CAC1B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"client-quirks.js","sourceRoot":"","sources":["../src/client-quirks.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,25 @@ export interface BlockingDialog {
39
39
  }>;
40
40
  }
41
41
  export declare function isModalSafeMethod(method: string): boolean;
42
+ /**
43
+ * A dialog's message flattened onto one line, for a client that shows one.
44
+ *
45
+ * Unreal's own prompts are laid out over many lines (the shutdown Save Content
46
+ * prompt lists a package per line), and a renderer that keeps two of them shows
47
+ * two package names and hides the question. Flattened, the same budget carries
48
+ * the question itself.
49
+ */
50
+ export declare function oneLine(text: string, limit?: number): string;
51
+ /**
52
+ * A blocking dialog, rendered for a person to read.
53
+ *
54
+ * Unreal flattens a Slate dialog into lines, so a save prompt arrives as its
55
+ * prompt, then the column headers, then one line per cell, then the button
56
+ * labels. Printed raw that is an unreadable run of paths. This pulls the asset
57
+ * rows back out and lays them in a table, and passes anything it does not
58
+ * recognise through untouched.
59
+ */
60
+ export declare function renderDialog(dialog: BlockingDialog): string;
42
61
  /** True for the refusal the plugin's own gate emits. */
43
62
  export declare function isDialogRefusal(v: unknown): boolean;
44
63
  /** A button press, and whether the editor confirmed it landed. */
@@ -46,6 +65,16 @@ export interface DialogPress {
46
65
  button: string;
47
66
  confirmed: boolean;
48
67
  }
68
+ /**
69
+ * Where interactive has got to with one dialog.
70
+ *
71
+ * relay the whole dialog has just been handed back, nothing asked yet
72
+ * asking the caller has had it, so the form is up or has been
73
+ *
74
+ * Reported as `dialogPhase` so a caller can tell "you have not seen this yet"
75
+ * from "the person is looking at it", which are otherwise the same refusal.
76
+ */
77
+ export type DialogPhase = "relay" | "asking";
49
78
  /** What a caller must do about this call. */
50
79
  export type GuardDecision = {
51
80
  allow: true;
@@ -92,6 +121,16 @@ export declare class DialogGuard {
92
121
  private pressed;
93
122
  /** Identity of the dialog the last press was aimed at. */
94
123
  private lastAsked;
124
+ /**
125
+ * Every dialog whose full text has already gone back to a caller.
126
+ *
127
+ * A SET, not the one slot `lastAsked` uses, because two dialogs can be in
128
+ * play at once (parallel callers, or a prompt raised behind another) and one
129
+ * slot thrashes between them: telling the caller about the second forgets the
130
+ * first, so the first is relayed a second time and its form never goes up.
131
+ * Bounded by the same clean screen that resets everything else.
132
+ */
133
+ private told;
95
134
  /** The ask in flight, so parallel calls share it instead of each asking. */
96
135
  private asking;
97
136
  /** Which dialog that in-flight ask is about. */
@@ -120,17 +159,34 @@ export declare class DialogGuard {
120
159
  */
121
160
  clear(): void;
122
161
  /**
123
- * Whether this mode hands over the calls that press a dialog's buttons.
162
+ * Forget what has been said about a dialog, so the next one starts over.
163
+ *
164
+ * Both records are per-dialog and both are reset together: told-but-not-asked
165
+ * is a real state (the caller has the text and has not retried yet), and
166
+ * clearing one without the other either asks about a dialog nobody has read
167
+ * or re-reads one already answered.
168
+ *
169
+ * Only ever called where the screen is PROVEN clear, alongside `clear`.
170
+ */
171
+ private forgetDialogRecords;
172
+ /**
173
+ * Whether the AGENT gets to answer the dialog in this mode.
174
+ *
175
+ * The one place that rule lives, and it settles two things that used to be
176
+ * settled separately: whether a refusal advertises the calls that press the
177
+ * buttons, and whether a press arriving as a tool call is accepted. They are
178
+ * the same question. Advertising without enforcing is how an agent came to
179
+ * answer a modal under interactive, which is the one outcome that mode
180
+ * exists to prevent.
124
181
  *
125
- * The one place that rule lives. stop_editor computed `mode !== "defer"`
126
- * itself, so the same decision existed twice and could drift: the guard's
127
- * defer branch omits `choices` entirely while the other kept a stripped
128
- * version of them.
182
+ * `auto` is the only mode whose contract hands the choice to the agent.
183
+ * interactive puts the question to the person over an elicitation form and
184
+ * presses only what they pick; defer waits for them at the editor's own
185
+ * window. In neither is a button the agent chose an acceptable answer, so
186
+ * neither names the press calls and neither accepts one.
129
187
  *
130
- * Not conditioned on elicitation. `auto` exists precisely for a caller
131
- * with nobody to ask, so withholding the press calls from it would leave
132
- * that caller no way to answer at all. Routes with nobody on them are
133
- * handled where they are known about, in `refusal`.
188
+ * canElicit is still read, because interactive with nobody to ask is defer
189
+ * (see effectiveMode) rather than a quiet promotion to auto.
134
190
  */
135
191
  static handsOverPressCalls(mode: DialogMode, canElicit?: boolean): boolean;
136
192
  /**
@@ -157,15 +213,30 @@ export declare class DialogGuard {
157
213
  canElicit?: boolean;
158
214
  }): Promise<GuardDecision>;
159
215
  /**
160
- * Recovery actions: always permitted, whatever is latched.
216
+ * Whether this call has a person on it who can be shown a form.
217
+ *
218
+ * Both halves matter: the route has to carry somebody (an HTTP request does
219
+ * not) and the client has to have advertised elicitation. Computed once here
220
+ * so the gate and the refusal cannot answer it differently.
221
+ */
222
+ private canAsk;
223
+ /**
224
+ * Whether this client's rendering makes the handover worth a call.
225
+ *
226
+ * Asked of the live elicit function rather than stored, because the client is
227
+ * only knowable once one has connected and this guard outlives connections.
228
+ */
229
+ /**
230
+ * Whether the text has to go back before a form can carry it.
161
231
  *
162
- * Relaunching or stopping an editor is how a caller gets out of a state
163
- * where the editor is stuck. An editor whose socket has parked while its
164
- * status thread keeps publishing holds the latch fresh indefinitely, so
165
- * gating these refused the only way back forever. They still report the
166
- * dialog through the same stamp every allowed read carries.
232
+ * Two conditions, not one. A client that collapses a long elicitation is
233
+ * only a problem when there IS a long elicitation: a save prompt renders as
234
+ * a line and a short table, which every client shows in full, and relaying
235
+ * that costs a round trip AND leaves raising the form to the agent, which is
236
+ * not something to depend on. So the form goes up on the first call unless
237
+ * the rendered block is genuinely too big for one.
167
238
  */
168
- static isRecoveryAction(taskName: string): boolean;
239
+ private needsRelay;
169
240
  /**
170
241
  * The decision about a dialog the caller ALREADY has, with no probe.
171
242
  *
@@ -199,7 +270,7 @@ export declare class DialogGuard {
199
270
  /** The one refusal shape, whatever the route and whatever the mode. */
200
271
  refusal(subject: string, dialog: BlockingDialog, opts?: {
201
272
  canElicit?: boolean;
202
- }): Record<string, unknown>;
273
+ }, phase?: DialogPhase): Record<string, unknown>;
203
274
  /**
204
275
  * The refusal shape. ONE definition, so every route hands a caller the same
205
276
  * fields to branch on.
@@ -210,7 +281,7 @@ export declare class DialogGuard {
210
281
  * `dialogTitle`, `dialogMessage` or `error`, so a client reading those got
211
282
  * undefined depending on which route refused it.
212
283
  */
213
- static describeRefusal(subject: string, dialog: BlockingDialog, resolvedMode: DialogMode, canElicit?: boolean): Record<string, unknown>;
284
+ static describeRefusal(subject: string, dialog: BlockingDialog, resolvedMode: DialogMode, canElicit?: boolean, phase?: DialogPhase): Record<string, unknown>;
214
285
  /**
215
286
  * Learn from a bridge reply.
216
287
  *
@@ -266,7 +337,7 @@ export declare function withoutDialogActuation<T extends IBridge>(session: Edito
266
337
  * cannot carry the fields: an array is `typeof "object"`, so it took the
267
338
  * properties and then lost them silently in JSON.stringify.
268
339
  */
269
- export declare function stampBlockedEditor(data: unknown, dialog: BlockingDialog | null): unknown;
340
+ export declare function stampBlockedEditor(data: unknown, dialog: BlockingDialog | null, mode?: DialogMode): unknown;
270
341
  /**
271
342
  * The guard for a session, created from the session itself if it has none.
272
343
  *