ue-mcp 1.3.7 → 1.3.8-beta.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.
Files changed (200) hide show
  1. package/README.md +2 -2
  2. package/dist/action-class.d.ts +22 -1
  3. package/dist/action-class.js +17 -1
  4. package/dist/action-class.js.map +1 -1
  5. package/dist/action-effects.d.ts +84 -0
  6. package/dist/action-effects.js +214 -0
  7. package/dist/action-effects.js.map +1 -0
  8. package/dist/action-schema.d.ts +16 -3
  9. package/dist/action-schema.js +2 -2
  10. package/dist/action-schema.js.map +1 -1
  11. package/dist/action-verbs.d.ts +45 -0
  12. package/dist/action-verbs.js +64 -0
  13. package/dist/action-verbs.js.map +1 -0
  14. package/dist/editor-gate.js +34 -6
  15. package/dist/editor-gate.js.map +1 -1
  16. package/dist/epic-input.d.ts +22 -0
  17. package/dist/epic-input.js +120 -0
  18. package/dist/epic-input.js.map +1 -0
  19. package/dist/epic-surface.d.ts +47 -0
  20. package/dist/epic-surface.js +37 -0
  21. package/dist/epic-surface.js.map +1 -0
  22. package/dist/flow/flow-tool.js +6 -0
  23. package/dist/flow/flow-tool.js.map +1 -1
  24. package/dist/flow/guard-schema.d.ts +28 -16
  25. package/dist/flow/guard-schema.js +16 -2
  26. package/dist/flow/guard-schema.js.map +1 -1
  27. package/dist/flow/guard.d.ts +37 -7
  28. package/dist/flow/guard.js +57 -19
  29. package/dist/flow/guard.js.map +1 -1
  30. package/dist/flow/guards.js +34 -11
  31. package/dist/flow/guards.js.map +1 -1
  32. package/dist/flow/journal-actions.js +18 -0
  33. package/dist/flow/journal-actions.js.map +1 -1
  34. package/dist/flow/schema.d.ts +10 -10
  35. package/dist/flow/skill-actions.d.ts +15 -1
  36. package/dist/flow/skill-actions.js +33 -6
  37. package/dist/flow/skill-actions.js.map +1 -1
  38. package/dist/flow/write-methods.d.ts +0 -24
  39. package/dist/flow/write-methods.js +21 -5
  40. package/dist/flow/write-methods.js.map +1 -1
  41. package/dist/guard-task.d.ts +125 -0
  42. package/dist/guard-task.js +85 -0
  43. package/dist/guard-task.js.map +1 -0
  44. package/dist/index.js +25 -77
  45. package/dist/index.js.map +1 -1
  46. package/dist/init.js +6 -6
  47. package/dist/init.js.map +1 -1
  48. package/dist/lean-context.js +16 -0
  49. package/dist/lean-context.js.map +1 -1
  50. package/dist/lock-owner.d.ts +13 -0
  51. package/dist/lock-owner.js +26 -0
  52. package/dist/lock-owner.js.map +1 -0
  53. package/dist/locking.d.ts +30 -15
  54. package/dist/locking.js +45 -54
  55. package/dist/locking.js.map +1 -1
  56. package/dist/plugin/injection.js +7 -0
  57. package/dist/plugin/injection.js.map +1 -1
  58. package/dist/plugin/manifest.d.ts +46 -16
  59. package/dist/plugin/manifest.js +9 -0
  60. package/dist/plugin/manifest.js.map +1 -1
  61. package/dist/plugin/provision.js +6 -0
  62. package/dist/plugin/provision.js.map +1 -1
  63. package/dist/schemas.js +1 -1
  64. package/dist/schemas.js.map +1 -1
  65. package/dist/session.js +1 -1
  66. package/dist/session.js.map +1 -1
  67. package/dist/skill-packs.d.ts +10 -2
  68. package/dist/skill-packs.js +12 -7
  69. package/dist/skill-packs.js.map +1 -1
  70. package/dist/tool-counts.json +26 -24
  71. package/dist/tools/animation.js +118 -115
  72. package/dist/tools/animation.js.map +1 -1
  73. package/dist/tools/asset.js +141 -126
  74. package/dist/tools/asset.js.map +1 -1
  75. package/dist/tools/audio.js +51 -51
  76. package/dist/tools/audio.js.map +1 -1
  77. package/dist/tools/blueprint.js +89 -84
  78. package/dist/tools/blueprint.js.map +1 -1
  79. package/dist/tools/chooser.js +9 -9
  80. package/dist/tools/chooser.js.map +1 -1
  81. package/dist/tools/conversation.d.ts +10 -0
  82. package/dist/tools/conversation.js +12 -0
  83. package/dist/tools/conversation.js.map +1 -0
  84. package/dist/tools/dataflow.d.ts +15 -0
  85. package/dist/tools/dataflow.js +17 -0
  86. package/dist/tools/dataflow.js.map +1 -0
  87. package/dist/tools/demo.js +4 -4
  88. package/dist/tools/demo.js.map +1 -1
  89. package/dist/tools/editor.js +123 -102
  90. package/dist/tools/editor.js.map +1 -1
  91. package/dist/tools/epic/animation.generated.d.ts +6 -0
  92. package/dist/tools/epic/animation.generated.js +875 -0
  93. package/dist/tools/epic/animation.generated.js.map +1 -0
  94. package/dist/tools/epic/asset.generated.d.ts +6 -0
  95. package/dist/tools/epic/asset.generated.js +226 -0
  96. package/dist/tools/epic/asset.generated.js.map +1 -0
  97. package/dist/tools/epic/blueprint.generated.d.ts +6 -0
  98. package/dist/tools/epic/blueprint.generated.js +168 -0
  99. package/dist/tools/epic/blueprint.generated.js.map +1 -0
  100. package/dist/tools/epic/conversation.generated.d.ts +6 -0
  101. package/dist/tools/epic/conversation.generated.js +37 -0
  102. package/dist/tools/epic/conversation.generated.js.map +1 -0
  103. package/dist/tools/epic/dataflow.generated.d.ts +6 -0
  104. package/dist/tools/epic/dataflow.generated.js +88 -0
  105. package/dist/tools/epic/dataflow.generated.js.map +1 -0
  106. package/dist/tools/epic/editor.generated.d.ts +6 -0
  107. package/dist/tools/epic/editor.generated.js +88 -0
  108. package/dist/tools/epic/editor.generated.js.map +1 -0
  109. package/dist/tools/epic/effects.d.ts +25 -0
  110. package/dist/tools/epic/effects.js +1716 -0
  111. package/dist/tools/epic/effects.js.map +1 -0
  112. package/dist/tools/epic/epic.generated.d.ts +6 -0
  113. package/dist/tools/epic/epic.generated.js +39 -0
  114. package/dist/tools/epic/epic.generated.js.map +1 -0
  115. package/dist/tools/epic/gameplay.generated.d.ts +6 -0
  116. package/dist/tools/epic/gameplay.generated.js +113 -0
  117. package/dist/tools/epic/gameplay.generated.js.map +1 -0
  118. package/dist/tools/epic/gas.generated.d.ts +6 -0
  119. package/dist/tools/epic/gas.generated.js +59 -0
  120. package/dist/tools/epic/gas.generated.js.map +1 -0
  121. package/dist/tools/epic/index.d.ts +40 -0
  122. package/dist/tools/epic/index.js +41 -0
  123. package/dist/tools/epic/index.js.map +1 -0
  124. package/dist/tools/epic/level.generated.d.ts +6 -0
  125. package/dist/tools/epic/level.generated.js +135 -0
  126. package/dist/tools/epic/level.generated.js.map +1 -0
  127. package/dist/tools/epic/material.generated.d.ts +6 -0
  128. package/dist/tools/epic/material.generated.js +114 -0
  129. package/dist/tools/epic/material.generated.js.map +1 -0
  130. package/dist/tools/epic/niagara.generated.d.ts +6 -0
  131. package/dist/tools/epic/niagara.generated.js +186 -0
  132. package/dist/tools/epic/niagara.generated.js.map +1 -0
  133. package/dist/tools/epic/pcg.generated.d.ts +6 -0
  134. package/dist/tools/epic/pcg.generated.js +116 -0
  135. package/dist/tools/epic/pcg.generated.js.map +1 -0
  136. package/dist/tools/epic/plugins.generated.d.ts +6 -0
  137. package/dist/tools/epic/plugins.generated.js +78 -0
  138. package/dist/tools/epic/plugins.generated.js.map +1 -0
  139. package/dist/tools/epic/project.generated.d.ts +6 -0
  140. package/dist/tools/epic/project.generated.js +61 -0
  141. package/dist/tools/epic/project.generated.js.map +1 -0
  142. package/dist/tools/epic/reflection.generated.d.ts +6 -0
  143. package/dist/tools/epic/reflection.generated.js +37 -0
  144. package/dist/tools/epic/reflection.generated.js.map +1 -0
  145. package/dist/tools/epic/statetree.generated.d.ts +6 -0
  146. package/dist/tools/epic/statetree.generated.js +41 -0
  147. package/dist/tools/epic/statetree.generated.js.map +1 -0
  148. package/dist/tools/epic/widget.generated.d.ts +6 -0
  149. package/dist/tools/epic/widget.generated.js +140 -0
  150. package/dist/tools/epic/widget.generated.js.map +1 -0
  151. package/dist/tools/epic.js +7 -4
  152. package/dist/tools/epic.js.map +1 -1
  153. package/dist/tools/fab.js +8 -8
  154. package/dist/tools/fab.js.map +1 -1
  155. package/dist/tools/feedback.js +4 -0
  156. package/dist/tools/feedback.js.map +1 -1
  157. package/dist/tools/foliage.js +17 -13
  158. package/dist/tools/foliage.js.map +1 -1
  159. package/dist/tools/gameplay.js +101 -98
  160. package/dist/tools/gameplay.js.map +1 -1
  161. package/dist/tools/gas.js +36 -33
  162. package/dist/tools/gas.js.map +1 -1
  163. package/dist/tools/landscape.js +35 -35
  164. package/dist/tools/landscape.js.map +1 -1
  165. package/dist/tools/level.js +113 -92
  166. package/dist/tools/level.js.map +1 -1
  167. package/dist/tools/material.js +52 -49
  168. package/dist/tools/material.js.map +1 -1
  169. package/dist/tools/networking.js +11 -11
  170. package/dist/tools/networking.js.map +1 -1
  171. package/dist/tools/niagara.js +47 -42
  172. package/dist/tools/niagara.js.map +1 -1
  173. package/dist/tools/pcg.js +22 -19
  174. package/dist/tools/pcg.js.map +1 -1
  175. package/dist/tools/plugins.js +7 -0
  176. package/dist/tools/plugins.js.map +1 -1
  177. package/dist/tools/project.js +101 -10
  178. package/dist/tools/project.js.map +1 -1
  179. package/dist/tools/reflection.js +16 -13
  180. package/dist/tools/reflection.js.map +1 -1
  181. package/dist/tools/statetree.js +51 -48
  182. package/dist/tools/statetree.js.map +1 -1
  183. package/dist/tools/widget.js +52 -49
  184. package/dist/tools/widget.js.map +1 -1
  185. package/dist/tools.js +4 -0
  186. package/dist/tools.js.map +1 -1
  187. package/dist/types.d.ts +108 -6
  188. package/dist/types.js +21 -7
  189. package/dist/types.js.map +1 -1
  190. package/dist/ue-mcp.default.yml +6358 -1786
  191. package/package.json +11 -3
  192. package/plugin/ue_mcp_bridge/UE_MCP_Bridge.uplugin +2 -2
  193. package/skills/ue-mcp-workflow/SKILL.md +1 -1
  194. package/assets/epic-catalog.snapshot.json +0 -15758
  195. package/dist/epic-cache.d.ts +0 -43
  196. package/dist/epic-cache.js +0 -81
  197. package/dist/epic-cache.js.map +0 -1
  198. package/dist/epic-enrich.d.ts +0 -47
  199. package/dist/epic-enrich.js +0 -323
  200. package/dist/epic-enrich.js.map +0 -1
@@ -676,7 +676,7 @@ export declare const FlowConfigSchema: z.ZodObject<{
676
676
  }>, "many">>;
677
677
  guards: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodObject<{
678
678
  description: z.ZodOptional<z.ZodString>;
679
- scope: z.ZodDefault<z.ZodEnum<["all", "mutations", "writes"]>>;
679
+ scope: z.ZodDefault<z.ZodEnum<["all", "mutations", "writes", "reads", "unknown"]>>;
680
680
  order: z.ZodDefault<z.ZodNumber>;
681
681
  before: z.ZodOptional<z.ZodObject<{
682
682
  class_path: z.ZodString;
@@ -700,7 +700,7 @@ export declare const FlowConfigSchema: z.ZodObject<{
700
700
  }>>;
701
701
  }, "strip", z.ZodTypeAny, {
702
702
  order: number;
703
- scope: "all" | "mutations" | "writes";
703
+ scope: "unknown" | "all" | "mutations" | "writes" | "reads";
704
704
  description?: string | undefined;
705
705
  before?: {
706
706
  options: Record<string, unknown>;
@@ -711,9 +711,8 @@ export declare const FlowConfigSchema: z.ZodObject<{
711
711
  class_path: string;
712
712
  } | undefined;
713
713
  }, {
714
- description?: string | undefined;
715
714
  order?: number | undefined;
716
- scope?: "all" | "mutations" | "writes" | undefined;
715
+ description?: string | undefined;
717
716
  before?: {
718
717
  class_path: string;
719
718
  options?: Record<string, unknown> | undefined;
@@ -722,9 +721,10 @@ 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
- scope: "all" | "mutations" | "writes";
727
+ scope: "unknown" | "all" | "mutations" | "writes" | "reads";
728
728
  description?: string | undefined;
729
729
  before?: {
730
730
  options: Record<string, unknown>;
@@ -735,9 +735,8 @@ export declare const FlowConfigSchema: z.ZodObject<{
735
735
  class_path: string;
736
736
  } | undefined;
737
737
  }, {
738
- description?: string | undefined;
739
738
  order?: number | undefined;
740
- scope?: "all" | "mutations" | "writes" | undefined;
739
+ description?: string | 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: {
@@ -816,7 +816,7 @@ export declare const FlowConfigSchema: z.ZodObject<{
816
816
  }>;
817
817
  guards: Record<string, {
818
818
  order: number;
819
- scope: "all" | "mutations" | "writes";
819
+ scope: "unknown" | "all" | "mutations" | "writes" | "reads";
820
820
  description?: string | undefined;
821
821
  before?: {
822
822
  options: Record<string, unknown>;
@@ -977,9 +977,8 @@ export declare const FlowConfigSchema: z.ZodObject<{
977
977
  max_age_hours?: number | undefined;
978
978
  } | undefined;
979
979
  guards?: Record<string, {
980
- description?: string | undefined;
981
980
  order?: number | undefined;
982
- scope?: "all" | "mutations" | "writes" | undefined;
981
+ description?: string | 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;
@@ -1,4 +1,4 @@
1
- import type { ActionSpec, ToolDef } from "../types.js";
1
+ import type { ActionEffect, ActionSpec, ToolDef } from "../types.js";
2
2
  /**
3
3
  * The flow tool's own actions, the three that are not journal or skill.
4
4
  *
@@ -9,6 +9,20 @@ import type { ActionSpec, ToolDef } from "../types.js";
9
9
  * tool, so it cannot drift into being the lie it is there to prevent.
10
10
  */
11
11
  export declare const FLOW_OWN_ACTIONS: readonly ["run", "plan", "list"];
12
+ /**
13
+ * What each of those three does to the addressed editor.
14
+ *
15
+ * Restated here rather than read off the built tool because `flow-tool.ts`
16
+ * imports this module and importing it back would close a cycle at module
17
+ * init. `tests/unit/flow-action-contract.test.ts` fails when the two disagree,
18
+ * so the restatement cannot drift into a second opinion.
19
+ *
20
+ * `run` is `mutate` rather than `unknown` even though a flow is only ever
21
+ * whatever its steps are: a flow of pure reads is theoretically a read, no
22
+ * flow in this repo or any shipped plugin is one, and both labels gate
23
+ * identically. The wider answer is the one that stands.
24
+ */
25
+ export declare const FLOW_OWN_EFFECTS: Record<(typeof FLOW_OWN_ACTIONS)[number], ActionEffect>;
12
26
  /** The flow category as a graph entry, for the check to hold packs against. */
13
27
  export declare function flowCategoryForCheck(): ToolDef;
14
28
  export declare const skillActions: Record<string, ActionSpec>;
@@ -56,18 +56,35 @@ function discover(ctx) {
56
56
  * tool, so it cannot drift into being the lie it is there to prevent.
57
57
  */
58
58
  export const FLOW_OWN_ACTIONS = ["run", "plan", "list"];
59
+ /**
60
+ * What each of those three does to the addressed editor.
61
+ *
62
+ * Restated here rather than read off the built tool because `flow-tool.ts`
63
+ * imports this module and importing it back would close a cycle at module
64
+ * init. `tests/unit/flow-action-contract.test.ts` fails when the two disagree,
65
+ * so the restatement cannot drift into a second opinion.
66
+ *
67
+ * `run` is `mutate` rather than `unknown` even though a flow is only ever
68
+ * whatever its steps are: a flow of pure reads is theoretically a read, no
69
+ * flow in this repo or any shipped plugin is one, and both labels gate
70
+ * identically. The wider answer is the one that stands.
71
+ */
72
+ export const FLOW_OWN_EFFECTS = {
73
+ run: "mutate",
74
+ plan: "read",
75
+ list: "read",
76
+ };
59
77
  /** The flow category as a graph entry, for the check to hold packs against. */
60
78
  export function flowCategoryForCheck() {
61
- const names = [
62
- ...FLOW_OWN_ACTIONS,
63
- ...Object.keys(journalActions),
64
- ...Object.keys(skillActions),
65
- ];
79
+ const own = Object.entries(FLOW_OWN_EFFECTS).map(([name, effect]) => [name, { kind: "handler", effect, handler: async () => ({}) }]);
66
80
  return {
67
81
  name: "flow",
68
82
  description: "",
69
83
  schema: {},
70
- actions: Object.fromEntries(names.map((n) => [n, {}])),
84
+ // The real specs for everything but the three own actions, so a check that
85
+ // reads an effect off this stand-in reads the declaration rather than a
86
+ // placeholder that happens to be next to it.
87
+ actions: { ...Object.fromEntries(own), ...journalActions, ...skillActions },
71
88
  handler: async () => ({}),
72
89
  };
73
90
  }
@@ -86,6 +103,8 @@ function requireProjectDir(ctx, verb) {
86
103
  }
87
104
  export const skillActions = {
88
105
  skill_list: {
106
+ kind: "handler",
107
+ effect: "read",
89
108
  description: "Every skill pack this server can see: the ones bundled with ue-mcp, the ones contributed by "
90
109
  + "loaded plugins (any plugin package shipping skills/<name>/SKILL.md), and the ones installed "
91
110
  + "into this project's .claude/skills. Each row carries the description an agent reads to decide "
@@ -95,6 +114,8 @@ export const skillActions = {
95
114
  handler: async (ctx, params) => skillList(ctx, params),
96
115
  },
97
116
  skill_get: {
117
+ kind: "handler",
118
+ effect: "read",
98
119
  description: "One skill pack in full, optionally including its markdown, so an agent can read the workflow "
99
120
  + "without leaving the tool surface. Reports whether the project's installed copy matches the "
100
121
  + "available one, which is how a stale install is spotted. Params: skillName, includeBody? "
@@ -102,6 +123,8 @@ export const skillActions = {
102
123
  handler: async (ctx, params) => skillGet(ctx, params),
103
124
  },
104
125
  skill_check: {
126
+ kind: "handler",
127
+ effect: "read",
105
128
  description: "Verify every skill pack against the live action surface. A pack is prose that names calls, so a "
106
129
  + "renamed or removed action leaves a document that teaches a call the server refuses; this reads "
107
130
  + "every category(action=\"x\") out of every pack and reports the ones that no longer resolve, with "
@@ -112,6 +135,8 @@ export const skillActions = {
112
135
  handler: async (ctx) => skillCheck(ctx),
113
136
  },
114
137
  skill_install: {
138
+ kind: "handler",
139
+ effect: "mutate",
115
140
  description: "Copy skill packs into this project's .claude/skills, SKILL.md and ue-mcp.yml sidecar together. "
116
141
  + "Idempotent and specific about it: a pack whose destination already holds the same bytes comes "
117
142
  + "back as unchanged rather than counted as installed, so a repeat call is distinguishable from a "
@@ -121,6 +146,8 @@ export const skillActions = {
121
146
  handler: async (ctx, params) => skillInstall(ctx, params),
122
147
  },
123
148
  skill_remove: {
149
+ kind: "handler",
150
+ effect: "mutate",
124
151
  description: "Remove installed skill packs from this project's .claude/skills. Deletes the SKILL.md and its "
125
152
  + "sidecar, then the pack directory only if it ends up empty and the skills directory only if it "
126
153
  + "does too, so anything the user added alongside survives. Idempotent: a pack that was not "
@@ -1 +1 @@
1
- {"version":3,"file":"skill-actions.js","sourceRoot":"","sources":["../../src/flow/skill-actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-actions.js","sourceRoot":"","sources":["../../src/flow/skill-actions.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,3 @@
1
- /**
2
- * Write classification for the source-control guard.
3
- *
4
- * The guard needs to know, for a given bridge method + params, which asset
5
- * content paths the call is about to modify, so it can check them out (or refuse
6
- * on a human's lock) BEFORE the write reaches disk. This module is the single
7
- * place that encodes that knowledge.
8
- *
9
- * Two layers:
10
- * 1. An explicit map for methods whose path lives under an unusual param
11
- * shape (batches, rename descriptors).
12
- * 2. A verb+param heuristic for the common case: a method named with a write
13
- * verb (`save_`, `set_`, ...) carrying a recognizable asset-path param.
14
- *
15
- * Classification returns UE content paths (e.g. "/Game/Foo"). Resolving those to
16
- * on-disk files, and deciding which already exist (modify -> checkout) versus do
17
- * not (create -> skip, it will be `p4 add`ed later), is the caller's job.
18
- *
19
- * Design note: this is intentionally conservative. An unmapped write falls
20
- * through as "not a write" (fail-open). The cost of a miss is that the agent
21
- * hits Unreal's own read-only failure and can check out explicitly - visible,
22
- * not silent corruption. The cost of a false positive is an unnecessary
23
- * checkout, which takes a lock. We bias toward not over-locking.
24
- */
25
1
  export interface WriteClassification {
26
2
  /**
27
3
  * Whether this call modifies named content, which is what a source-control
@@ -9,8 +9,19 @@
9
9
  * Two layers:
10
10
  * 1. An explicit map for methods whose path lives under an unusual param
11
11
  * shape (batches, rename descriptors).
12
- * 2. A verb+param heuristic for the common case: a method named with a write
13
- * verb (`save_`, `set_`, ...) carrying a recognizable asset-path param.
12
+ * 2. The method's DECLARED effect plus a recognizable asset-path param. A
13
+ * declared read writes nothing whatever path it was handed; anything else
14
+ * is a candidate.
15
+ *
16
+ * Layer two used to be a hand-written list of write verbs matched against the
17
+ * method NAME, and the list is gone rather than kept as a fallback: there is
18
+ * nothing left for it to answer. `bridgeMethodEffect` has no undefined case,
19
+ * so every method reaching here has an effect from the actions that forward to
20
+ * it, from the table of methods a handler calls directly, or from the default
21
+ * that treats an unrecognised method as a change. The list was also wrong in
22
+ * the expensive direction: `unwrap_uvs` rewrites a mesh's UV layout in place
23
+ * and `mesh_boolean` overwrites a StaticMesh package, and neither matched it,
24
+ * so neither was ever checked out before the write reached disk.
14
25
  *
15
26
  * Classification returns UE content paths (e.g. "/Game/Foo"). Resolving those to
16
27
  * on-disk files, and deciding which already exist (modify -> checkout) versus do
@@ -22,8 +33,7 @@
22
33
  * not silent corruption. The cost of a false positive is an unnecessary
23
34
  * checkout, which takes a lock. We bias toward not over-locking.
24
35
  */
25
- /** Method-name prefixes that denote a mutation. Read verbs are excluded. */
26
- const WRITE_VERB = /^(save|set|create|add|delete|remove|import|rename|move|duplicate|reparent|compile|apply|assign|modify|bake|generate|build)_/;
36
+ import { bridgeMethodEffect } from "../action-effects.js";
27
37
  /** Single-value params that carry an asset content path. */
28
38
  const PATH_KEYS = ["assetPath", "sourcePath", "destinationPath", "packagePath", "path"];
29
39
  /** Array params that carry asset content paths. */
@@ -119,7 +129,13 @@ export function classifyWrite(method, params) {
119
129
  const contentPaths = dedupe(explicit(params));
120
130
  return { writes: contentPaths.length > 0, contentPaths };
121
131
  }
122
- if (!WRITE_VERB.test(method)) {
132
+ // A declared read writes no content, whatever path it was handed. Anything
133
+ // else is a candidate, whatever its name looks like. `unknown` is a
134
+ // candidate for the same reason it gates like a mutation everywhere else,
135
+ // and an unnecessary checkout is the cheap side of this decision.
136
+ // With the parameters, so a wrapped engine tool is judged by which tool it
137
+ // is rather than by the one method all 830 of them share.
138
+ if (bridgeMethodEffect(method, params).effect === "read") {
123
139
  return { writes: false, contentPaths: [] };
124
140
  }
125
141
  const contentPaths = [];
@@ -1 +1 @@
1
- {"version":3,"file":"write-methods.js","sourceRoot":"","sources":["../../src/flow/write-methods.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write-methods.js","sourceRoot":"","sources":["../../src/flow/write-methods.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAe1D,4DAA4D;AAC5D,MAAM,SAAS,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AACxF,mDAAmD;AACnD,MAAM,eAAe,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;AAI1E,qDAAqD;AACrD,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED,uDAAuD;AACvD,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrG,CAAC;AAED;;;GAGG;AACH,MAAM,QAAQ,GAA8B;IAC1C,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,CAAC;IACD,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,CAAC;IACD,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,CAAC;IACD,0EAA0E;IAC1E,0EAA0E;IAC1E,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9C,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC5D,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7C,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC1D,wBAAwB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC7D,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IACxD,qFAAqF;IACrF,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE;QACxB,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAA8B,EAAE,CAAC;YACzF,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,gBAAgB;IAChB,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;IACjD,4DAA4D;IAC5D,yBAAyB,EAAE,CAAC,CAAC,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAA8B,EAAE,CAAC;YACxF,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtC,IAAI,SAAS;gBAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,yEAAyE;IACzE,kEAAkE;IAClE,wBAAwB,EAAE,CAAC,CAAC,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAA8B,EAAE,CAAC;YACjG,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACnC,IAAI,SAAS;gBAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,2EAA2E;IAC3E,6DAA6D;IAC7D,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAA8B,EAAE,CAAC;YACxF,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,GAAG,IAAI,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAA+B;IAC3E,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3D,CAAC;IAED,2EAA2E;IAC3E,oEAAoE;IACpE,0EAA0E;IAC1E,kEAAkE;IAClE,2EAA2E;IAC3E,0DAA0D;IAC1D,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACzD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,MAAM,CAAC,EAAY;IAC1B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,CAAC"}
@@ -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
+ }
@@ -0,0 +1,85 @@
1
+ import { UeMcpTask } from "./task.js";
2
+ /**
3
+ * Where the pipeline puts the call being guarded, and the guard's own declared
4
+ * options, so the two cannot collide with each other or with anything a guard
5
+ * chooses to name.
6
+ *
7
+ * Reserved keys rather than symbols: the options object crosses the task
8
+ * registry, and a key that survives being spread is the one thing that has to
9
+ * hold. Both are also still flattened into the bag alongside these, because a
10
+ * guard written against `UeMcpTask` reads them there and must keep working.
11
+ */
12
+ export const GUARD_CALL_KEY = "__ueMcpGuardCall";
13
+ export const GUARD_CONFIG_KEY = "__ueMcpGuardConfig";
14
+ /**
15
+ * Base class for a ue-mcp guard.
16
+ *
17
+ * Implement `before`, `after`, or both. `execute()` is wired once here and
18
+ * routes to whichever the pipeline asked for, so the phase is a signature
19
+ * rather than something to detect.
20
+ */
21
+ export class UeMcpGuard extends UeMcpTask {
22
+ /**
23
+ * The options this guard was DECLARED with, and nothing else.
24
+ *
25
+ * `this.options` still holds the flattened bag for compatibility. This is
26
+ * the one to read: the call being guarded cannot mask a key of yours in it.
27
+ */
28
+ get config() {
29
+ const bag = this.options;
30
+ return (bag[GUARD_CONFIG_KEY] ?? {});
31
+ }
32
+ /** Let the call proceed. */
33
+ allow() {
34
+ return { success: true };
35
+ }
36
+ /**
37
+ * Refuse the call. The reason reaches the caller as a WRITE_BLOCKED error,
38
+ * so write it for whoever is about to read it in an agent transcript.
39
+ */
40
+ deny(reason) {
41
+ return { success: false, error: new Error(reason) };
42
+ }
43
+ async execute() {
44
+ const bag = (this.options ?? {});
45
+ const payload = bag[GUARD_CALL_KEY];
46
+ if (!payload) {
47
+ // Reached by invoking a guard as an ordinary task, which nothing in the
48
+ // pipeline does. Said plainly rather than reported as a guard that
49
+ // approved, because a guard that silently allows is the failure mode
50
+ // this whole layer exists to prevent.
51
+ return {
52
+ success: false,
53
+ error: new Error(`${this.taskName} is a guard and was run as a task. Guards are invoked by the `
54
+ + "bridge pipeline from a `guards:` declaration, not called directly."),
55
+ };
56
+ }
57
+ const call = {
58
+ phase: payload.phase,
59
+ method: payload.method,
60
+ params: payload.params,
61
+ paths: payload.paths,
62
+ session: payload.session,
63
+ };
64
+ if (call.phase === "before") {
65
+ if (!this.before) {
66
+ return {
67
+ success: false,
68
+ error: new Error(`${this.taskName} is declared as a 'before' hook but implements no before().`),
69
+ };
70
+ }
71
+ return await this.before(call);
72
+ }
73
+ if (!this.after) {
74
+ return {
75
+ success: false,
76
+ error: new Error(`${this.taskName} is declared as an 'after' hook but implements no after().`),
77
+ };
78
+ }
79
+ const replacement = await this.after(call, payload.result);
80
+ // `data` is how the pipeline replaces a result. Returning nothing leaves
81
+ // the call's own result standing, which is the common case for an audit.
82
+ return replacement === undefined ? { success: true } : { success: true, data: replacement };
83
+ }
84
+ }
85
+ //# sourceMappingURL=guard-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard-task.js","sourceRoot":"","sources":["../src/guard-task.ts"],"names":[],"mappings":"AA0CA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAqCrD;;;;;;GAMG;AACH,MAAM,OAAgB,UAA8C,SAAQ,SAAS;IACnF;;;;;OAKG;IACH,IAAc,MAAM;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAkC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAY,CAAC;IAClD,CAAC;IAED,4BAA4B;IAClB,KAAK;QACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACO,IAAI,CAAC,MAAc;QAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IACtD,CAAC;IAsBD,KAAK,CAAC,OAAO;QACX,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;QAC5D,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAiC,CAAC;QACpE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,wEAAwE;YACxE,mEAAmE;YACnE,qEAAqE;YACrE,sCAAsC;YACtC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,GAAG,IAAI,CAAC,QAAQ,+DAA+D;sBAC7E,oEAAoE,CACvE;aACF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAgB;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;QAEF,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,IAAI,KAAK,CACd,GAAG,IAAI,CAAC,QAAQ,6DAA6D,CAC9E;iBACF,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,GAAG,IAAI,CAAC,QAAQ,4DAA4D,CAC7E;aACF,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,yEAAyE;QACzE,yEAAyE;QACzE,OAAO,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC9F,CAAC;CACF"}