@jgengine/editor 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +12 -0
- package/dist/AssetBrowser.d.ts +26 -1
- package/dist/AssetBrowser.js +54 -1
- package/dist/AssetDropZone.d.ts +9 -0
- package/dist/AssetDropZone.js +65 -0
- package/dist/CatalogsPanel.d.ts +4 -2
- package/dist/CatalogsPanel.js +162 -9
- package/dist/CityPreview.d.ts +11 -0
- package/dist/CityPreview.js +45 -0
- package/dist/CollectionsPanel.js +5 -5
- package/dist/DebugDraw.d.ts +3 -1
- package/dist/DebugDraw.js +37 -19
- package/dist/EditorApp.d.ts +9 -1
- package/dist/EditorApp.js +147 -35
- package/dist/EditorChrome.d.ts +25 -6
- package/dist/EditorChrome.js +310 -130
- package/dist/InspectorPanel.d.ts +17 -7
- package/dist/InspectorPanel.js +173 -27
- package/dist/LightingPanel.d.ts +11 -0
- package/dist/LightingPanel.js +99 -0
- package/dist/MaterialsWorkspacePanel.d.ts +12 -0
- package/dist/MaterialsWorkspacePanel.js +86 -0
- package/dist/ParentPickerMenu.d.ts +13 -0
- package/dist/ParentPickerMenu.js +33 -0
- package/dist/PerfProbe.js +33 -0
- package/dist/PrefabsPanel.js +5 -5
- package/dist/RuntimePlayBridge.d.ts +5 -3
- package/dist/RuntimePlayBridge.js +6 -13
- package/dist/ScatterPreview.d.ts +3 -1
- package/dist/ScatterPreview.js +10 -7
- package/dist/SchemaInspector.js +21 -8
- package/dist/ScriptingPanel.d.ts +15 -0
- package/dist/ScriptingPanel.js +46 -0
- package/dist/SelectionGizmo.js +114 -30
- package/dist/StandaloneEditor.d.ts +16 -9
- package/dist/StandaloneEditor.js +19 -20
- package/dist/TerrainPanel.d.ts +3 -2
- package/dist/TerrainPanel.js +16 -5
- package/dist/TerrainSculpt.js +98 -59
- package/dist/agent/AgentPanel.d.ts +5 -2
- package/dist/agent/AgentPanel.js +11 -6
- package/dist/agent/toolBridge.js +5 -0
- package/dist/assetImport.d.ts +36 -0
- package/dist/assetImport.js +66 -0
- package/dist/authoredComponentMeta.d.ts +25 -0
- package/dist/authoredComponentMeta.js +65 -0
- package/dist/gizmoPivot.d.ts +4 -0
- package/dist/gizmoPivot.js +34 -0
- package/dist/handlers/catalogs.d.ts +3 -0
- package/dist/handlers/catalogs.js +137 -0
- package/dist/handlers/collections.d.ts +3 -0
- package/dist/handlers/collections.js +57 -0
- package/dist/handlers/context.d.ts +36 -0
- package/dist/handlers/context.js +1 -0
- package/dist/handlers/document.d.ts +3 -0
- package/dist/handlers/document.js +350 -0
- package/dist/handlers/grids.d.ts +3 -0
- package/dist/handlers/grids.js +142 -0
- package/dist/handlers/hierarchy.d.ts +3 -0
- package/dist/handlers/hierarchy.js +55 -0
- package/dist/handlers/index.d.ts +8 -0
- package/dist/handlers/index.js +23 -0
- package/dist/handlers/minimap.d.ts +9 -0
- package/dist/handlers/minimap.js +32 -0
- package/dist/handlers/runtime.d.ts +3 -0
- package/dist/handlers/runtime.js +191 -0
- package/dist/handlers/terrain.d.ts +3 -0
- package/dist/handlers/terrain.js +204 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/listDocumentTriggers.d.ts +42 -0
- package/dist/listDocumentTriggers.js +49 -0
- package/dist/materialAssignments.d.ts +63 -0
- package/dist/materialAssignments.js +84 -0
- package/dist/mcp/fieldSpec.d.ts +32 -0
- package/dist/mcp/fieldSpec.js +173 -0
- package/dist/mcp/rpcRequest.d.ts +8 -5
- package/dist/mcp/rpcRequest.js +72 -93
- package/dist/mcp/tools.js +104 -912
- package/dist/networkSnapshot.d.ts +82 -0
- package/dist/networkSnapshot.js +73 -0
- package/dist/parentCandidates.d.ts +12 -0
- package/dist/parentCandidates.js +25 -0
- package/dist/session.d.ts +77 -4
- package/dist/session.js +36 -1017
- package/dist/shell/AnimationPanel.d.ts +17 -0
- package/dist/shell/AnimationPanel.js +134 -0
- package/dist/shell/AssetThumbnail.d.ts +12 -0
- package/dist/shell/AssetThumbnail.js +23 -0
- package/dist/shell/BottomDock.d.ts +25 -0
- package/dist/shell/BottomDock.js +40 -0
- package/dist/shell/CommandPalette.d.ts +12 -0
- package/dist/shell/CommandPalette.js +56 -0
- package/dist/shell/ConsolePanel.d.ts +8 -0
- package/dist/shell/ConsolePanel.js +45 -0
- package/dist/shell/ContentBrowser.d.ts +21 -0
- package/dist/shell/ContentBrowser.js +130 -0
- package/dist/shell/HierarchyPanel.d.ts +26 -0
- package/dist/shell/HierarchyPanel.js +387 -0
- package/dist/shell/NetworkWorkspacePanel.d.ts +11 -0
- package/dist/shell/NetworkWorkspacePanel.js +49 -0
- package/dist/shell/PlayModeBar.d.ts +12 -0
- package/dist/shell/PlayModeBar.js +27 -0
- package/dist/shell/ProfilerPanel.d.ts +10 -0
- package/dist/shell/ProfilerPanel.js +41 -0
- package/dist/shell/SceneToolbar.d.ts +43 -0
- package/dist/shell/SceneToolbar.js +122 -0
- package/dist/shell/StatusBar.d.ts +18 -0
- package/dist/shell/StatusBar.js +41 -0
- package/dist/shell/TopAppBar.d.ts +33 -0
- package/dist/shell/TopAppBar.js +64 -0
- package/dist/shell/ViewportOverlays.d.ts +23 -0
- package/dist/shell/ViewportOverlays.js +136 -0
- package/dist/shell/WorkspaceRail.d.ts +20 -0
- package/dist/shell/WorkspaceRail.js +31 -0
- package/dist/shell/cameraTelemetry.d.ts +27 -0
- package/dist/shell/cameraTelemetry.js +24 -0
- package/dist/shell/commandRegistry.d.ts +58 -0
- package/dist/shell/commandRegistry.js +133 -0
- package/dist/shell/consoleSink.d.ts +11 -0
- package/dist/shell/consoleSink.js +17 -0
- package/dist/shell/consoleStore.d.ts +27 -0
- package/dist/shell/consoleStore.js +43 -0
- package/dist/shell/fields.d.ts +39 -0
- package/dist/shell/fields.js +104 -0
- package/dist/shell/formatSavedRelative.d.ts +2 -0
- package/dist/shell/formatSavedRelative.js +14 -0
- package/dist/shell/glbThumbnailCache.d.ts +45 -0
- package/dist/shell/glbThumbnailCache.js +241 -0
- package/dist/shell/hierarchyA11y.d.ts +21 -0
- package/dist/shell/hierarchyA11y.js +35 -0
- package/dist/shell/icons.d.ts +13 -0
- package/dist/shell/icons.js +85 -0
- package/dist/shell/layoutStore.d.ts +68 -0
- package/dist/shell/layoutStore.js +156 -0
- package/dist/shell/pathFlythrough.d.ts +37 -0
- package/dist/shell/pathFlythrough.js +54 -0
- package/dist/shell/perfHistory.d.ts +70 -0
- package/dist/shell/perfHistory.js +130 -0
- package/dist/shell/renameObject.d.ts +3 -0
- package/dist/shell/renameObject.js +25 -0
- package/dist/shell/theme.d.ts +36 -0
- package/dist/shell/theme.js +37 -0
- package/dist/shell/ui.d.ts +84 -0
- package/dist/shell/ui.js +90 -0
- package/dist/shell/useGlbThumbnail.d.ts +8 -0
- package/dist/shell/useGlbThumbnail.js +19 -0
- package/dist/uiStore.d.ts +27 -0
- package/dist/uiStore.js +10 -0
- package/dist/viewportContextMenu.d.ts +4 -2
- package/dist/viewportContextMenu.js +5 -1
- package/package.json +4 -4
- package/skills/jgengine/SKILL.md +7 -4
- package/skills/jgengine/api.md +172 -79
- package/skills/jgengine/capabilities.md +104 -2
- package/skills/jgengine/recipes/minimal-game.md +88 -0
- package/skills/jgengine-editor/SKILL.md +18 -3
- package/skills/jgengine-editor/api.md +397 -18
- package/skills/jgengine-editor/capabilities.md +46 -0
- package/skills/jgengine-editor/reference.md +87 -0
- package/skills/level-design/SKILL.md +54 -0
- package/skills/level-design/agents/openai.yaml +4 -0
- package/skills/level-design/references/application-playbook.md +192 -0
- package/skills/level-design/references/field-guide.md +337 -0
- package/skills/level-design/references/live-editor-loop.md +179 -0
- package/dist/OutlinerPanel.d.ts +0 -14
- package/dist/OutlinerPanel.js +0 -84
- package/skills/jgengine/reference-cartridge.md +0 -72
package/dist/mcp/tools.js
CHANGED
|
@@ -1,913 +1,105 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
name: "set_path",
|
|
103
|
-
description: "Patch a path's kind/width/color/label and merge-patch its meta (studio sliders: scatter density, pole spacing, …). Validated against the kind schema.",
|
|
104
|
-
inputSchema: {
|
|
105
|
-
type: "object",
|
|
106
|
-
properties: {
|
|
107
|
-
id: { type: "string" },
|
|
108
|
-
kind: { type: "string" },
|
|
109
|
-
width: { type: "number" },
|
|
110
|
-
color: { type: "string" },
|
|
111
|
-
label: { type: "string" },
|
|
112
|
-
meta: { type: "object" },
|
|
113
|
-
},
|
|
114
|
-
required: ["id"],
|
|
115
|
-
additionalProperties: false,
|
|
116
|
-
},
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
name: "set_marker",
|
|
120
|
-
description: "Patch a marker's kind/color/label/rotationY and merge-patch its meta. Validated against the kind schema when registered.",
|
|
121
|
-
inputSchema: {
|
|
122
|
-
type: "object",
|
|
123
|
-
properties: {
|
|
124
|
-
id: { type: "string" },
|
|
125
|
-
kind: { type: "string" },
|
|
126
|
-
color: { type: "string" },
|
|
127
|
-
label: { type: "string" },
|
|
128
|
-
rotationY: { type: "number" },
|
|
129
|
-
meta: { type: "object" },
|
|
130
|
-
},
|
|
131
|
-
required: ["id"],
|
|
132
|
-
additionalProperties: false,
|
|
133
|
-
},
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
name: "set_note",
|
|
137
|
-
description: "Patch a note's text and merge-patch its meta.",
|
|
138
|
-
inputSchema: {
|
|
139
|
-
type: "object",
|
|
140
|
-
properties: { id: { type: "string" }, text: { type: "string" }, meta: { type: "object" } },
|
|
141
|
-
required: ["id"],
|
|
142
|
-
additionalProperties: false,
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
name: "set_meta",
|
|
147
|
-
description: "Merge-patch the meta bag of any document object (marker/volume/path/note) by id — the generic studio-slider primitive. Rejected if it violates the kind's param schema.",
|
|
148
|
-
inputSchema: {
|
|
149
|
-
type: "object",
|
|
150
|
-
properties: { id: { type: "string" }, patch: { type: "object" } },
|
|
151
|
-
required: ["id", "patch"],
|
|
152
|
-
additionalProperties: false,
|
|
153
|
-
},
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
name: "select",
|
|
157
|
-
description: "Select editor object ids.",
|
|
158
|
-
inputSchema: {
|
|
159
|
-
type: "object",
|
|
160
|
-
properties: { ids: { type: "array", items: { type: "string" } } },
|
|
161
|
-
required: ["ids"],
|
|
162
|
-
additionalProperties: false,
|
|
163
|
-
},
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
name: "camera_goto",
|
|
167
|
-
description: "Focus the editor camera on an id or world x/z.",
|
|
168
|
-
inputSchema: {
|
|
169
|
-
type: "object",
|
|
170
|
-
properties: {
|
|
171
|
-
id: { type: "string" },
|
|
172
|
-
x: { type: "number" },
|
|
173
|
-
y: { type: "number" },
|
|
174
|
-
z: { type: "number" },
|
|
175
|
-
},
|
|
176
|
-
additionalProperties: false,
|
|
177
|
-
},
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
name: "camera_frame",
|
|
181
|
-
description: "Frame the whole editor document.",
|
|
182
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
name: "scene_summary",
|
|
186
|
-
description: "Compact summary of the editor document and bounds.",
|
|
187
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
name: "export_document",
|
|
191
|
-
description: "Export the editor document as JSON text.",
|
|
192
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
name: "import_document",
|
|
196
|
-
description: "Replace the session document from JSON text.",
|
|
197
|
-
inputSchema: {
|
|
198
|
-
type: "object",
|
|
199
|
-
properties: { json: { type: "string" } },
|
|
200
|
-
required: ["json"],
|
|
201
|
-
additionalProperties: false,
|
|
202
|
-
},
|
|
203
|
-
},
|
|
204
|
-
{
|
|
205
|
-
name: "push_document_patch",
|
|
206
|
-
description: "Apply a versioned document patch (snapshot or commands) over the live-sync bus. Document is authoritative; force skips baseRevision checks.",
|
|
207
|
-
inputSchema: {
|
|
208
|
-
type: "object",
|
|
209
|
-
properties: {
|
|
210
|
-
patch: { type: "object" },
|
|
211
|
-
force: { type: "boolean" },
|
|
212
|
-
},
|
|
213
|
-
required: ["patch"],
|
|
214
|
-
additionalProperties: false,
|
|
215
|
-
},
|
|
216
|
-
},
|
|
217
|
-
{
|
|
218
|
-
name: "pull_document_patches",
|
|
219
|
-
description: "Pull document patches after a known revision (live-sync stream for a running game).",
|
|
220
|
-
inputSchema: {
|
|
221
|
-
type: "object",
|
|
222
|
-
properties: { sinceRevision: { type: "number" } },
|
|
223
|
-
additionalProperties: false,
|
|
224
|
-
},
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
name: "document_revision",
|
|
228
|
-
description: "Current live-sync document revision; optionally include the full document.",
|
|
229
|
-
inputSchema: {
|
|
230
|
-
type: "object",
|
|
231
|
-
properties: { includeDocument: { type: "boolean" } },
|
|
232
|
-
additionalProperties: false,
|
|
233
|
-
},
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
name: "push_runtime_delta",
|
|
237
|
-
description: "Publish ephemeral runtime state (entities/tunables) on the reverse channel — does not mutate the document.",
|
|
238
|
-
inputSchema: {
|
|
239
|
-
type: "object",
|
|
240
|
-
properties: {
|
|
241
|
-
at: { type: "number" },
|
|
242
|
-
entities: { type: "array" },
|
|
243
|
-
removeIds: { type: "array", items: { type: "string" } },
|
|
244
|
-
tunables: { type: "object" },
|
|
245
|
-
},
|
|
246
|
-
additionalProperties: false,
|
|
247
|
-
},
|
|
248
|
-
},
|
|
249
|
-
{
|
|
250
|
-
name: "pull_runtime_deltas",
|
|
251
|
-
description: "Pull runtime state deltas after a known seq (feeds play-mode inspector).",
|
|
252
|
-
inputSchema: {
|
|
253
|
-
type: "object",
|
|
254
|
-
properties: {
|
|
255
|
-
sinceSeq: { type: "number" },
|
|
256
|
-
includeSnapshot: { type: "boolean" },
|
|
257
|
-
},
|
|
258
|
-
additionalProperties: false,
|
|
259
|
-
},
|
|
260
|
-
},
|
|
261
|
-
{
|
|
262
|
-
name: "runtime_snapshot",
|
|
263
|
-
description: "Full ephemeral runtime state snapshot from the reverse channel.",
|
|
264
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
265
|
-
},
|
|
266
|
-
{
|
|
267
|
-
name: "runtime_summary",
|
|
268
|
-
description: "Compact play-mode inspector summary: entities, tunables, overrides, pause/step state.",
|
|
269
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
270
|
-
},
|
|
271
|
-
{
|
|
272
|
-
name: "runtime_get",
|
|
273
|
-
description: "Read one live runtime entity (or path) or a tunable:id from the reverse channel.",
|
|
274
|
-
inputSchema: {
|
|
275
|
-
type: "object",
|
|
276
|
-
properties: {
|
|
277
|
-
id: { type: "string" },
|
|
278
|
-
path: { type: "string" },
|
|
279
|
-
},
|
|
280
|
-
required: ["id"],
|
|
281
|
-
additionalProperties: false,
|
|
282
|
-
},
|
|
283
|
-
},
|
|
284
|
-
{
|
|
285
|
-
name: "runtime_set",
|
|
286
|
-
description: "Play-mode poke: set entity position/rotation/values or a tunable. writeBack (default true) promotes document-linked edits into an undoable scene patch.",
|
|
287
|
-
inputSchema: {
|
|
288
|
-
type: "object",
|
|
289
|
-
properties: {
|
|
290
|
-
id: { type: "string" },
|
|
291
|
-
path: { type: "string" },
|
|
292
|
-
value: {},
|
|
293
|
-
position: { type: "object" },
|
|
294
|
-
rotationY: { type: "number" },
|
|
295
|
-
values: { type: "object" },
|
|
296
|
-
writeBack: { type: "boolean" },
|
|
297
|
-
},
|
|
298
|
-
required: ["id"],
|
|
299
|
-
additionalProperties: false,
|
|
300
|
-
},
|
|
301
|
-
},
|
|
302
|
-
{
|
|
303
|
-
name: "runtime_pause",
|
|
304
|
-
description: "Pause simulation while in play mode (pause-and-poke).",
|
|
305
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
name: "runtime_resume",
|
|
309
|
-
description: "Resume simulation after a play-mode pause.",
|
|
310
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
311
|
-
},
|
|
312
|
-
{
|
|
313
|
-
name: "runtime_step",
|
|
314
|
-
description: "While paused, run N simulation frames (default 1) then re-pause.",
|
|
315
|
-
inputSchema: {
|
|
316
|
-
type: "object",
|
|
317
|
-
properties: { frames: { type: "number" } },
|
|
318
|
-
additionalProperties: false,
|
|
319
|
-
},
|
|
320
|
-
},
|
|
321
|
-
{
|
|
322
|
-
name: "set_runtime_override",
|
|
323
|
-
description: "Set an ephemeral runtime override (play-mode poke). Document stays authoritative until write_back_override.",
|
|
324
|
-
inputSchema: {
|
|
325
|
-
type: "object",
|
|
326
|
-
properties: { entity: { type: "object" } },
|
|
327
|
-
required: ["entity"],
|
|
328
|
-
additionalProperties: false,
|
|
329
|
-
},
|
|
330
|
-
},
|
|
331
|
-
{
|
|
332
|
-
name: "clear_runtime_override",
|
|
333
|
-
description: "Drop an ephemeral runtime override without writing it into the document.",
|
|
334
|
-
inputSchema: {
|
|
335
|
-
type: "object",
|
|
336
|
-
properties: { id: { type: "string" } },
|
|
337
|
-
required: ["id"],
|
|
338
|
-
additionalProperties: false,
|
|
339
|
-
},
|
|
340
|
-
},
|
|
341
|
-
{
|
|
342
|
-
name: "write_back_override",
|
|
343
|
-
description: "Promote an ephemeral runtime override into an undoable document edit (document becomes source of truth).",
|
|
344
|
-
inputSchema: {
|
|
345
|
-
type: "object",
|
|
346
|
-
properties: { id: { type: "string" } },
|
|
347
|
-
required: ["id"],
|
|
348
|
-
additionalProperties: false,
|
|
349
|
-
},
|
|
350
|
-
},
|
|
351
|
-
{
|
|
352
|
-
name: "undo",
|
|
353
|
-
description: "Undo the last structural editor edit.",
|
|
354
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
355
|
-
},
|
|
356
|
-
{
|
|
357
|
-
name: "redo",
|
|
358
|
-
description: "Redo the last undone editor edit.",
|
|
359
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
360
|
-
},
|
|
361
|
-
{
|
|
362
|
-
name: "list_assets",
|
|
363
|
-
description: "List placeable assets registered with the editor session.",
|
|
364
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
365
|
-
},
|
|
366
|
-
{
|
|
367
|
-
name: "place_asset",
|
|
368
|
-
description: "Place an asset as a marker at focus or given coordinates.",
|
|
369
|
-
inputSchema: {
|
|
370
|
-
type: "object",
|
|
371
|
-
properties: {
|
|
372
|
-
id: { type: "string" },
|
|
373
|
-
assetId: { type: "string" },
|
|
374
|
-
kind: { type: "string" },
|
|
375
|
-
x: { type: "number" },
|
|
376
|
-
y: { type: "number" },
|
|
377
|
-
z: { type: "number" },
|
|
378
|
-
},
|
|
379
|
-
anyOf: [{ required: ["id"] }, { required: ["assetId"] }],
|
|
380
|
-
additionalProperties: false,
|
|
381
|
-
},
|
|
382
|
-
},
|
|
383
|
-
{
|
|
384
|
-
name: "set_mode",
|
|
385
|
-
description: "Switch the live editor between edit, walk, and play modes.",
|
|
386
|
-
inputSchema: {
|
|
387
|
-
type: "object",
|
|
388
|
-
properties: { mode: { type: "string", enum: ["edit", "walk", "play"] } },
|
|
389
|
-
required: ["mode"],
|
|
390
|
-
additionalProperties: false,
|
|
391
|
-
},
|
|
392
|
-
},
|
|
393
|
-
{
|
|
394
|
-
name: "perf_report",
|
|
395
|
-
description: "Frame-time breakdown from engine devtools: fps, sim phases, and lag culprit hints.",
|
|
396
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
397
|
-
},
|
|
398
|
-
{
|
|
399
|
-
name: "create_terrain",
|
|
400
|
-
description: "Create an editable sculpt heightfield over the scene (width/depth/cellSize).",
|
|
401
|
-
inputSchema: {
|
|
402
|
-
type: "object",
|
|
403
|
-
properties: {
|
|
404
|
-
width: { type: "number" },
|
|
405
|
-
depth: { type: "number" },
|
|
406
|
-
cellSize: { type: "number" },
|
|
407
|
-
centerX: { type: "number" },
|
|
408
|
-
centerZ: { type: "number" },
|
|
409
|
-
},
|
|
410
|
-
additionalProperties: false,
|
|
411
|
-
},
|
|
412
|
-
},
|
|
413
|
-
{
|
|
414
|
-
name: "sculpt_terrain",
|
|
415
|
-
description: "Apply one sculpt brush (raise/lower/smooth/flatten/noise/ramp) at x/z as an undoable stroke.",
|
|
416
|
-
inputSchema: {
|
|
417
|
-
type: "object",
|
|
418
|
-
properties: {
|
|
419
|
-
mode: { type: "string", enum: ["raise", "lower", "smooth", "flatten", "noise", "ramp"] },
|
|
420
|
-
x: { type: "number" },
|
|
421
|
-
z: { type: "number" },
|
|
422
|
-
radius: { type: "number" },
|
|
423
|
-
strength: { type: "number" },
|
|
424
|
-
target: { type: "number" },
|
|
425
|
-
toX: { type: "number" },
|
|
426
|
-
toZ: { type: "number" },
|
|
427
|
-
seed: { type: "number" },
|
|
428
|
-
shape: { type: "string", enum: ["circle", "square"] },
|
|
429
|
-
},
|
|
430
|
-
required: ["mode", "x", "z"],
|
|
431
|
-
additionalProperties: false,
|
|
432
|
-
},
|
|
433
|
-
},
|
|
434
|
-
{
|
|
435
|
-
name: "terrain_summary",
|
|
436
|
-
description: "Report the sculpt heightfield's grid size, bounds, min/max offset, edited vertices, and painted cells.",
|
|
437
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
438
|
-
},
|
|
439
|
-
{
|
|
440
|
-
name: "paint_terrain",
|
|
441
|
-
description: "Paint a terrain material (grass/dirt/rock/…) at x/z as an undoable stroke.",
|
|
442
|
-
inputSchema: {
|
|
443
|
-
type: "object",
|
|
444
|
-
properties: {
|
|
445
|
-
surface: { type: "string" },
|
|
446
|
-
x: { type: "number" },
|
|
447
|
-
z: { type: "number" },
|
|
448
|
-
radius: { type: "number" },
|
|
449
|
-
shape: { type: "string", enum: ["circle", "square"] },
|
|
450
|
-
},
|
|
451
|
-
required: ["surface", "x", "z"],
|
|
452
|
-
additionalProperties: false,
|
|
453
|
-
},
|
|
454
|
-
},
|
|
455
|
-
{
|
|
456
|
-
name: "fill_terrain",
|
|
457
|
-
description: "Fill the whole terrain with one material, or null to clear all painted surfaces.",
|
|
458
|
-
inputSchema: {
|
|
459
|
-
type: "object",
|
|
460
|
-
properties: { surface: { type: ["string", "null"] } },
|
|
461
|
-
required: ["surface"],
|
|
462
|
-
additionalProperties: false,
|
|
463
|
-
},
|
|
464
|
-
},
|
|
465
|
-
{
|
|
466
|
-
name: "auto_paint",
|
|
467
|
-
description: "Paint a material into every cell matching a slope/height rule (e.g. rock on steep, snow up high).",
|
|
468
|
-
inputSchema: {
|
|
469
|
-
type: "object",
|
|
470
|
-
properties: {
|
|
471
|
-
surface: { type: "string" },
|
|
472
|
-
minSlope: { type: "number" },
|
|
473
|
-
maxSlope: { type: "number" },
|
|
474
|
-
minHeight: { type: "number" },
|
|
475
|
-
maxHeight: { type: "number" },
|
|
476
|
-
},
|
|
477
|
-
required: ["surface"],
|
|
478
|
-
additionalProperties: false,
|
|
479
|
-
},
|
|
480
|
-
},
|
|
481
|
-
{
|
|
482
|
-
name: "terrain_materials",
|
|
483
|
-
description: "List the terrain paint palette (material id, label, color).",
|
|
484
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
485
|
-
},
|
|
486
|
-
{
|
|
487
|
-
name: "terrain_layers",
|
|
488
|
-
description: "List the terrain material layer stack (id, surface, roughness/tiling/triplanar/tint/opacity).",
|
|
489
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
490
|
-
},
|
|
491
|
-
{
|
|
492
|
-
name: "set_terrain_layers",
|
|
493
|
-
description: "Replace the reorderable terrain material layer stack; a params-only edit keeps painted blends.",
|
|
494
|
-
inputSchema: {
|
|
495
|
-
type: "object",
|
|
496
|
-
properties: {
|
|
497
|
-
layers: {
|
|
498
|
-
type: "array",
|
|
499
|
-
items: {
|
|
500
|
-
type: "object",
|
|
501
|
-
properties: {
|
|
502
|
-
id: { type: "string" },
|
|
503
|
-
surface: { type: "string" },
|
|
504
|
-
roughness: { type: "number" },
|
|
505
|
-
tiling: { type: "number" },
|
|
506
|
-
triplanar: { type: "boolean" },
|
|
507
|
-
tint: { type: "string" },
|
|
508
|
-
opacity: { type: "number" },
|
|
509
|
-
},
|
|
510
|
-
required: ["id", "surface"],
|
|
511
|
-
additionalProperties: false,
|
|
512
|
-
},
|
|
513
|
-
},
|
|
514
|
-
},
|
|
515
|
-
required: ["layers"],
|
|
516
|
-
additionalProperties: false,
|
|
517
|
-
},
|
|
518
|
-
},
|
|
519
|
-
{
|
|
520
|
-
name: "blend_terrain",
|
|
521
|
-
description: "Blend-paint a material layer's weight at x/z (weighted multi-layer blend); auto-adds the layer.",
|
|
522
|
-
inputSchema: {
|
|
523
|
-
type: "object",
|
|
524
|
-
properties: {
|
|
525
|
-
surface: { type: "string" },
|
|
526
|
-
x: { type: "number" },
|
|
527
|
-
z: { type: "number" },
|
|
528
|
-
radius: { type: "number" },
|
|
529
|
-
strength: { type: "number" },
|
|
530
|
-
shape: { type: "string", enum: ["circle", "square"] },
|
|
531
|
-
},
|
|
532
|
-
required: ["surface", "x", "z"],
|
|
533
|
-
additionalProperties: false,
|
|
534
|
-
},
|
|
535
|
-
},
|
|
536
|
-
{
|
|
537
|
-
name: "convert_scatter",
|
|
538
|
-
description: "Detach a foliage/scatter region into individually-editable placed prop markers, removing the region.",
|
|
539
|
-
inputSchema: {
|
|
540
|
-
type: "object",
|
|
541
|
-
properties: { pathId: { type: "string" } },
|
|
542
|
-
required: ["pathId"],
|
|
543
|
-
additionalProperties: false,
|
|
544
|
-
},
|
|
545
|
-
},
|
|
546
|
-
{
|
|
547
|
-
name: "add_foliage",
|
|
548
|
-
description: "Add a foliage/scatter region from a closed polygon (≥3 x/z points) with density and item.",
|
|
549
|
-
inputSchema: {
|
|
550
|
-
type: "object",
|
|
551
|
-
properties: {
|
|
552
|
-
points: {
|
|
553
|
-
type: "array",
|
|
554
|
-
items: { type: "object", properties: { x: { type: "number" }, z: { type: "number" } }, required: ["x", "z"], additionalProperties: false },
|
|
555
|
-
},
|
|
556
|
-
density: { type: "number" },
|
|
557
|
-
item: { type: "string" },
|
|
558
|
-
seed: { type: "string" },
|
|
559
|
-
minSpacing: { type: "number" },
|
|
560
|
-
},
|
|
561
|
-
required: ["points"],
|
|
562
|
-
additionalProperties: false,
|
|
563
|
-
},
|
|
564
|
-
},
|
|
565
|
-
{
|
|
566
|
-
name: "scatter_summary",
|
|
567
|
-
description: "Count foliage/scatter regions and their total deterministic instance placements.",
|
|
568
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
569
|
-
},
|
|
570
|
-
{
|
|
571
|
-
name: "set_parent",
|
|
572
|
-
description: "Parent objects under another (or null to unparent); cycles are refused. Moving a parent moves its subtree.",
|
|
573
|
-
inputSchema: {
|
|
574
|
-
type: "object",
|
|
575
|
-
properties: {
|
|
576
|
-
ids: { type: "array", items: { type: "string" } },
|
|
577
|
-
parentId: { type: ["string", "null"] },
|
|
578
|
-
},
|
|
579
|
-
required: ["ids", "parentId"],
|
|
580
|
-
additionalProperties: false,
|
|
581
|
-
},
|
|
582
|
-
},
|
|
583
|
-
{
|
|
584
|
-
name: "hierarchy",
|
|
585
|
-
description: "The scene's parent/child tree: root ids and each root's direct children.",
|
|
586
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
587
|
-
},
|
|
588
|
-
{
|
|
589
|
-
name: "list_prefabs",
|
|
590
|
-
description: "List the document's reusable prefab stamps (id, name, fragment content).",
|
|
591
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
592
|
-
},
|
|
593
|
-
{
|
|
594
|
-
name: "create_prefab",
|
|
595
|
-
description: "Make a reusable prefab from selected ids, centered on their own bounds.",
|
|
596
|
-
inputSchema: {
|
|
597
|
-
type: "object",
|
|
598
|
-
properties: {
|
|
599
|
-
id: { type: "string" },
|
|
600
|
-
name: { type: "string" },
|
|
601
|
-
ids: { type: "array", items: { type: "string" } },
|
|
602
|
-
},
|
|
603
|
-
required: ["id", "name", "ids"],
|
|
604
|
-
additionalProperties: false,
|
|
605
|
-
},
|
|
606
|
-
},
|
|
607
|
-
{
|
|
608
|
-
name: "insert_prefab",
|
|
609
|
-
description: "Insert a fresh, tagged instance of a prefab at the camera focus or given x/y/z.",
|
|
610
|
-
inputSchema: {
|
|
611
|
-
type: "object",
|
|
612
|
-
properties: {
|
|
613
|
-
prefabId: { type: "string" },
|
|
614
|
-
x: { type: "number" },
|
|
615
|
-
y: { type: "number" },
|
|
616
|
-
z: { type: "number" },
|
|
617
|
-
},
|
|
618
|
-
required: ["prefabId"],
|
|
619
|
-
additionalProperties: false,
|
|
620
|
-
},
|
|
621
|
-
},
|
|
622
|
-
{
|
|
623
|
-
name: "detach_prefab_instance",
|
|
624
|
-
description: "Strip the prefab link from every object in an instance, keeping its content.",
|
|
625
|
-
inputSchema: {
|
|
626
|
-
type: "object",
|
|
627
|
-
properties: { instanceId: { type: "string" } },
|
|
628
|
-
required: ["instanceId"],
|
|
629
|
-
additionalProperties: false,
|
|
630
|
-
},
|
|
631
|
-
},
|
|
632
|
-
{
|
|
633
|
-
name: "delete_prefab",
|
|
634
|
-
description: "Remove a prefab from the library (placed instances are unaffected).",
|
|
635
|
-
inputSchema: {
|
|
636
|
-
type: "object",
|
|
637
|
-
properties: { prefabId: { type: "string" } },
|
|
638
|
-
required: ["prefabId"],
|
|
639
|
-
additionalProperties: false,
|
|
640
|
-
},
|
|
641
|
-
},
|
|
642
|
-
{
|
|
643
|
-
name: "list_collections",
|
|
644
|
-
description: "List named collections / selection sets (id, name, memberIds, color, locked, visible).",
|
|
645
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
646
|
-
},
|
|
647
|
-
{
|
|
648
|
-
name: "create_collection",
|
|
649
|
-
description: "Create a named collection / selection set from member ids.",
|
|
650
|
-
inputSchema: {
|
|
651
|
-
type: "object",
|
|
652
|
-
properties: {
|
|
653
|
-
id: { type: "string" },
|
|
654
|
-
name: { type: "string" },
|
|
655
|
-
memberIds: { type: "array", items: { type: "string" } },
|
|
656
|
-
},
|
|
657
|
-
required: ["id", "name"],
|
|
658
|
-
additionalProperties: false,
|
|
659
|
-
},
|
|
660
|
-
},
|
|
661
|
-
{
|
|
662
|
-
name: "rename_collection",
|
|
663
|
-
description: "Rename a collection.",
|
|
664
|
-
inputSchema: {
|
|
665
|
-
type: "object",
|
|
666
|
-
properties: { id: { type: "string" }, name: { type: "string" } },
|
|
667
|
-
required: ["id", "name"],
|
|
668
|
-
additionalProperties: false,
|
|
669
|
-
},
|
|
670
|
-
},
|
|
671
|
-
{
|
|
672
|
-
name: "delete_collection",
|
|
673
|
-
description: "Delete a collection (its member objects are untouched).",
|
|
674
|
-
inputSchema: {
|
|
675
|
-
type: "object",
|
|
676
|
-
properties: { id: { type: "string" } },
|
|
677
|
-
required: ["id"],
|
|
678
|
-
additionalProperties: false,
|
|
679
|
-
},
|
|
680
|
-
},
|
|
681
|
-
{
|
|
682
|
-
name: "set_collection_members",
|
|
683
|
-
description: "Replace a collection's member ids wholesale.",
|
|
684
|
-
inputSchema: {
|
|
685
|
-
type: "object",
|
|
686
|
-
properties: { id: { type: "string" }, memberIds: { type: "array", items: { type: "string" } } },
|
|
687
|
-
required: ["id", "memberIds"],
|
|
688
|
-
additionalProperties: false,
|
|
689
|
-
},
|
|
690
|
-
},
|
|
691
|
-
{
|
|
692
|
-
name: "add_to_collection",
|
|
693
|
-
description: "Add ids to a collection's membership.",
|
|
694
|
-
inputSchema: {
|
|
695
|
-
type: "object",
|
|
696
|
-
properties: { id: { type: "string" }, ids: { type: "array", items: { type: "string" } } },
|
|
697
|
-
required: ["id", "ids"],
|
|
698
|
-
additionalProperties: false,
|
|
699
|
-
},
|
|
700
|
-
},
|
|
701
|
-
{
|
|
702
|
-
name: "remove_from_collection",
|
|
703
|
-
description: "Remove ids from a collection's membership.",
|
|
704
|
-
inputSchema: {
|
|
705
|
-
type: "object",
|
|
706
|
-
properties: { id: { type: "string" }, ids: { type: "array", items: { type: "string" } } },
|
|
707
|
-
required: ["id", "ids"],
|
|
708
|
-
additionalProperties: false,
|
|
709
|
-
},
|
|
710
|
-
},
|
|
711
|
-
{
|
|
712
|
-
name: "set_collection_flags",
|
|
713
|
-
description: "Patch a collection's color / locked / visible flags.",
|
|
714
|
-
inputSchema: {
|
|
715
|
-
type: "object",
|
|
716
|
-
properties: {
|
|
717
|
-
id: { type: "string" },
|
|
718
|
-
color: { type: "string" },
|
|
719
|
-
locked: { type: "boolean" },
|
|
720
|
-
visible: { type: "boolean" },
|
|
721
|
-
},
|
|
722
|
-
required: ["id"],
|
|
723
|
-
additionalProperties: false,
|
|
724
|
-
},
|
|
725
|
-
},
|
|
726
|
-
{
|
|
727
|
-
name: "select_collection",
|
|
728
|
-
description: "Restore the current selection to a collection's member ids.",
|
|
729
|
-
inputSchema: {
|
|
730
|
-
type: "object",
|
|
731
|
-
properties: { id: { type: "string" } },
|
|
732
|
-
required: ["id"],
|
|
733
|
-
additionalProperties: false,
|
|
734
|
-
},
|
|
735
|
-
},
|
|
736
|
-
{
|
|
737
|
-
name: "batch_set_properties",
|
|
738
|
-
description: "Patch color/label/meta across every listed id in one dispatch, regardless of kind.",
|
|
739
|
-
inputSchema: {
|
|
740
|
-
type: "object",
|
|
741
|
-
properties: {
|
|
742
|
-
ids: { type: "array", items: { type: "string" } },
|
|
743
|
-
color: { type: "string" },
|
|
744
|
-
label: { type: "string" },
|
|
745
|
-
meta: { type: "object" },
|
|
746
|
-
},
|
|
747
|
-
required: ["ids"],
|
|
748
|
-
additionalProperties: false,
|
|
749
|
-
},
|
|
750
|
-
},
|
|
751
|
-
{
|
|
752
|
-
name: "assign_material",
|
|
753
|
-
description: "Stamp meta.materialId on every listed object — the drag-drop material assignment primitive.",
|
|
754
|
-
inputSchema: {
|
|
755
|
-
type: "object",
|
|
756
|
-
properties: {
|
|
757
|
-
ids: { type: "array", items: { type: "string" } },
|
|
758
|
-
materialId: { type: "string" },
|
|
759
|
-
},
|
|
760
|
-
required: ["ids", "materialId"],
|
|
761
|
-
additionalProperties: false,
|
|
762
|
-
},
|
|
763
|
-
},
|
|
764
|
-
{
|
|
765
|
-
name: "list_grids",
|
|
766
|
-
description: "List the scene document's grid/tile layers (id, kind, bounds, cell count, palette ids).",
|
|
767
|
-
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
768
|
-
},
|
|
769
|
-
{
|
|
770
|
-
name: "get_grid_cell",
|
|
771
|
-
description: "Eyedrop: read the value id at col,row of a grid layer (empty value for unset/out-of-bounds cells).",
|
|
772
|
-
inputSchema: {
|
|
773
|
-
type: "object",
|
|
774
|
-
properties: { id: { type: "string" }, col: { type: "number" }, row: { type: "number" } },
|
|
775
|
-
required: ["id", "col", "row"],
|
|
776
|
-
additionalProperties: false,
|
|
777
|
-
},
|
|
778
|
-
},
|
|
779
|
-
{
|
|
780
|
-
name: "add_grid_layer",
|
|
781
|
-
description: "Create an empty grid/tile layer on the scene document with the given bounds, cell size, and palette.",
|
|
782
|
-
inputSchema: {
|
|
783
|
-
type: "object",
|
|
784
|
-
properties: {
|
|
785
|
-
id: { type: "string" },
|
|
786
|
-
kind: { type: "string" },
|
|
787
|
-
cols: { type: "number" },
|
|
788
|
-
rows: { type: "number" },
|
|
789
|
-
label: { type: "string" },
|
|
790
|
-
cellSize: { type: "number" },
|
|
791
|
-
origin: { type: "object", properties: { x: { type: "number" }, y: { type: "number" }, z: { type: "number" } }, required: ["x", "y", "z"], additionalProperties: false },
|
|
792
|
-
axes: { type: "string", enum: ["xz", "xy"] },
|
|
793
|
-
empty: { type: "string" },
|
|
794
|
-
palette: { type: "array", items: { type: "object" } },
|
|
795
|
-
},
|
|
796
|
-
required: ["id", "kind", "cols", "rows"],
|
|
797
|
-
additionalProperties: false,
|
|
798
|
-
},
|
|
799
|
-
},
|
|
800
|
-
{
|
|
801
|
-
name: "remove_grid_layer",
|
|
802
|
-
description: "Delete a grid/tile layer from the scene document by id.",
|
|
803
|
-
inputSchema: {
|
|
804
|
-
type: "object",
|
|
805
|
-
properties: { id: { type: "string" } },
|
|
806
|
-
required: ["id"],
|
|
807
|
-
additionalProperties: false,
|
|
808
|
-
},
|
|
809
|
-
},
|
|
810
|
-
{
|
|
811
|
-
name: "set_grid_layer",
|
|
812
|
-
description: "Patch a grid layer's metadata — label, kind, visibility, empty value, cell size, origin, axes, or palette.",
|
|
813
|
-
inputSchema: {
|
|
814
|
-
type: "object",
|
|
815
|
-
properties: {
|
|
816
|
-
id: { type: "string" },
|
|
817
|
-
label: { type: "string" },
|
|
818
|
-
kind: { type: "string" },
|
|
819
|
-
visible: { type: "boolean" },
|
|
820
|
-
empty: { type: "string" },
|
|
821
|
-
cellSize: { type: "number" },
|
|
822
|
-
origin: { type: "object", properties: { x: { type: "number" }, y: { type: "number" }, z: { type: "number" } }, required: ["x", "y", "z"], additionalProperties: false },
|
|
823
|
-
axes: { type: "string", enum: ["xz", "xy"] },
|
|
824
|
-
palette: { type: "array", items: { type: "object" } },
|
|
825
|
-
},
|
|
826
|
-
required: ["id"],
|
|
827
|
-
additionalProperties: false,
|
|
828
|
-
},
|
|
829
|
-
},
|
|
830
|
-
{
|
|
831
|
-
name: "paint_grid_cells",
|
|
832
|
-
description: "Paint or erase grid cells (value equal to the layer's empty value erases). One undo step for the whole batch.",
|
|
833
|
-
inputSchema: {
|
|
834
|
-
type: "object",
|
|
835
|
-
properties: {
|
|
836
|
-
id: { type: "string" },
|
|
837
|
-
cells: {
|
|
838
|
-
type: "array",
|
|
839
|
-
items: {
|
|
840
|
-
type: "object",
|
|
841
|
-
properties: { col: { type: "number" }, row: { type: "number" }, value: { type: "string" } },
|
|
842
|
-
required: ["col", "row", "value"],
|
|
843
|
-
additionalProperties: false,
|
|
844
|
-
},
|
|
845
|
-
},
|
|
846
|
-
},
|
|
847
|
-
required: ["id", "cells"],
|
|
848
|
-
additionalProperties: false,
|
|
849
|
-
},
|
|
850
|
-
},
|
|
851
|
-
{
|
|
852
|
-
name: "fill_grid_rect",
|
|
853
|
-
description: "Rectangle tool: fill the inclusive col0,row0..col1,row1 rectangle of a grid layer with one value.",
|
|
854
|
-
inputSchema: {
|
|
855
|
-
type: "object",
|
|
856
|
-
properties: {
|
|
857
|
-
id: { type: "string" },
|
|
858
|
-
col0: { type: "number" },
|
|
859
|
-
row0: { type: "number" },
|
|
860
|
-
col1: { type: "number" },
|
|
861
|
-
row1: { type: "number" },
|
|
862
|
-
value: { type: "string" },
|
|
863
|
-
},
|
|
864
|
-
required: ["id", "col0", "row0", "col1", "row1", "value"],
|
|
865
|
-
additionalProperties: false,
|
|
866
|
-
},
|
|
867
|
-
},
|
|
868
|
-
{
|
|
869
|
-
name: "flood_fill_grid",
|
|
870
|
-
description: "Bucket tool: flood-fill the contiguous region sharing the seed cell's value with a new value.",
|
|
871
|
-
inputSchema: {
|
|
872
|
-
type: "object",
|
|
873
|
-
properties: {
|
|
874
|
-
id: { type: "string" },
|
|
875
|
-
col: { type: "number" },
|
|
876
|
-
row: { type: "number" },
|
|
877
|
-
value: { type: "string" },
|
|
878
|
-
},
|
|
879
|
-
required: ["id", "col", "row", "value"],
|
|
880
|
-
additionalProperties: false,
|
|
881
|
-
},
|
|
882
|
-
},
|
|
883
|
-
{
|
|
884
|
-
name: "resize_grid_layer",
|
|
885
|
-
description: "Resize a grid layer's bounds to cols x rows, trimming any cells outside the new extent.",
|
|
886
|
-
inputSchema: {
|
|
887
|
-
type: "object",
|
|
888
|
-
properties: { id: { type: "string" }, cols: { type: "number" }, rows: { type: "number" } },
|
|
889
|
-
required: ["id", "cols", "rows"],
|
|
890
|
-
additionalProperties: false,
|
|
891
|
-
},
|
|
892
|
-
},
|
|
893
|
-
{
|
|
894
|
-
name: "import_grid",
|
|
895
|
-
description: "Import an ASCII/glyph map or CSV into a new grid layer (the ASCII/CSV is an import adapter, not the stored form).",
|
|
896
|
-
inputSchema: {
|
|
897
|
-
type: "object",
|
|
898
|
-
properties: {
|
|
899
|
-
id: { type: "string" },
|
|
900
|
-
kind: { type: "string" },
|
|
901
|
-
format: { type: "string", enum: ["ascii", "csv"] },
|
|
902
|
-
text: { type: "string" },
|
|
903
|
-
empty: { type: "string" },
|
|
904
|
-
cellSize: { type: "number" },
|
|
905
|
-
origin: { type: "object", properties: { x: { type: "number" }, y: { type: "number" }, z: { type: "number" } }, required: ["x", "y", "z"], additionalProperties: false },
|
|
906
|
-
glyphMap: { type: "object" },
|
|
907
|
-
palette: { type: "array", items: { type: "object" } },
|
|
908
|
-
},
|
|
909
|
-
required: ["id", "kind", "format", "text"],
|
|
910
|
-
additionalProperties: false,
|
|
911
|
-
},
|
|
912
|
-
},
|
|
1
|
+
import { buildInputSchema } from "./fieldSpec.js";
|
|
2
|
+
/**
|
|
3
|
+
* Which host verbs are exposed as agent-facing MCP tools, and how each is described. This is a
|
|
4
|
+
* curated subset of the RPC union (internal verbs like `dispatch`/`clear_selection` are omitted);
|
|
5
|
+
* every `inputSchema` is generated from the shared field-schema table in `./fieldSpec` so the schema
|
|
6
|
+
* an agent sees can never drift from what the boundary validates.
|
|
7
|
+
*/
|
|
8
|
+
const TOOL_DESCRIPTIONS = [
|
|
9
|
+
{ name: "editor_status", description: "Connection status, selection, and layer counts for the active editor session." },
|
|
10
|
+
{ name: "list_layers", description: "List marker/volume/path kinds, visibility, and the full editor document." },
|
|
11
|
+
{ name: "list_catalogs", description: "List gameplay data catalogs exported by the game (id, label, schema, entry ids)." },
|
|
12
|
+
{ name: "get_catalog_entry", description: "Fetch one gameplay catalog entry by catalogId + entryId, including its schema and meta." },
|
|
13
|
+
{ name: "set_catalog_entry", description: "Merge-patch a gameplay catalog entry's meta (and optional label). Validated against the catalog ParamSchema; coalesces undo like meta patches." },
|
|
14
|
+
{ name: "add_catalog_entry", description: "Add a new row (entry) to a gameplay catalog — e.g. define a new entity in the `entities` catalog. Meta is seeded from the catalog ParamSchema defaults, then overlaid with any provided meta and validated." },
|
|
15
|
+
{ name: "remove_catalog_entry", description: "Remove a row (entry) from a gameplay catalog by catalogId + entryId." },
|
|
16
|
+
{ name: "add_catalog", description: "Create a brand-new editor-authored gameplay catalog carried on the scene document (id, optional label, optional ParamSchema). Its schema round-trips through save/reload; the catalog becomes row-addressable immediately." },
|
|
17
|
+
{ name: "remove_catalog", description: "Remove a catalog from the scene document by catalogId (only affects document-carried catalogs)." },
|
|
18
|
+
{ name: "set_catalog_schema", description: "Set or replace a document-authored catalog's ParamSchema (and optional label). Every existing row's meta is re-parsed against the new schema: removed keys drop, added keys default in, range/number values clamp." },
|
|
19
|
+
{ name: "list_selection", description: "Return currently selected editor object ids." },
|
|
20
|
+
{ name: "get_marker", description: "Fetch one marker by id." },
|
|
21
|
+
{ name: "get_volume", description: "Fetch one volume by id." },
|
|
22
|
+
{ name: "set_transform", description: "Move a marker or volume center by id." },
|
|
23
|
+
{ name: "set_volume", description: "Patch a volume radius/height/center." },
|
|
24
|
+
{ name: "set_path", description: "Patch a path's kind/width/color/label and merge-patch its meta (studio sliders: scatter density, pole spacing, …). Validated against the kind schema." },
|
|
25
|
+
{ name: "set_marker", description: "Patch a marker's kind/color/label/rotationY and merge-patch its meta. Validated against the kind schema when registered." },
|
|
26
|
+
{ name: "set_note", description: "Patch a note's text and merge-patch its meta." },
|
|
27
|
+
{ name: "set_meta", description: "Merge-patch the meta bag of any document object (marker/volume/path/note) by id — the generic studio-slider primitive. Rejected if it violates the kind's param schema." },
|
|
28
|
+
{ name: "apply_preset", description: "Apply a named preset bundle from the object's kind schema (e.g. a city archetype like manhattan/ruralohio) as one meta patch, ready to tweak afterwards." },
|
|
29
|
+
{ name: "select", description: "Select editor object ids." },
|
|
30
|
+
{ name: "camera_goto", description: "Focus the editor camera on an id or world x/z." },
|
|
31
|
+
{ name: "camera_frame", description: "Frame the whole editor document." },
|
|
32
|
+
{ name: "scene_summary", description: "Compact summary of the editor document and bounds." },
|
|
33
|
+
{ name: "export_document", description: "Export the editor document as JSON text." },
|
|
34
|
+
{ name: "import_document", description: "Replace the session document from JSON text." },
|
|
35
|
+
{ name: "push_document_patch", description: "Apply a versioned document patch (snapshot or commands) over the live-sync bus. Document is authoritative; force skips baseRevision checks." },
|
|
36
|
+
{ name: "pull_document_patches", description: "Pull document patches after a known revision (live-sync stream for a running game)." },
|
|
37
|
+
{ name: "document_revision", description: "Current live-sync document revision; optionally include the full document." },
|
|
38
|
+
{ name: "push_runtime_delta", description: "Publish ephemeral runtime state (entities/tunables) on the reverse channel — does not mutate the document." },
|
|
39
|
+
{ name: "pull_runtime_deltas", description: "Pull runtime state deltas after a known seq (feeds play-mode inspector)." },
|
|
40
|
+
{ name: "runtime_snapshot", description: "Full ephemeral runtime state snapshot from the reverse channel." },
|
|
41
|
+
{ name: "runtime_summary", description: "Compact play-mode inspector summary: entities, tunables, overrides, pause/step state." },
|
|
42
|
+
{ name: "runtime_get", description: "Read one live runtime entity (or path) or a tunable:id from the reverse channel." },
|
|
43
|
+
{ name: "runtime_set", description: "Play-mode poke: set entity position/rotation/values or a tunable. writeBack (default true) promotes document-linked edits into an undoable scene patch." },
|
|
44
|
+
{ name: "runtime_pause", description: "Pause simulation while in play mode (pause-and-poke)." },
|
|
45
|
+
{ name: "runtime_resume", description: "Resume simulation after a play-mode pause." },
|
|
46
|
+
{ name: "runtime_step", description: "While paused, run N simulation frames (default 1) then re-pause." },
|
|
47
|
+
{ name: "set_runtime_override", description: "Set an ephemeral runtime override (play-mode poke). Document stays authoritative until write_back_override." },
|
|
48
|
+
{ name: "clear_runtime_override", description: "Drop an ephemeral runtime override without writing it into the document." },
|
|
49
|
+
{ name: "write_back_override", description: "Promote an ephemeral runtime override into an undoable document edit (document becomes source of truth)." },
|
|
50
|
+
{ name: "undo", description: "Undo the last structural editor edit." },
|
|
51
|
+
{ name: "redo", description: "Redo the last undone editor edit." },
|
|
52
|
+
{ name: "list_assets", description: "List placeable assets registered with the editor session." },
|
|
53
|
+
{ name: "place_asset", description: "Place an asset as a marker at focus or given coordinates." },
|
|
54
|
+
{ name: "set_mode", description: "Switch the live editor between edit, walk, play, and hud (HUD-layout authoring) modes." },
|
|
55
|
+
{ name: "perf_report", description: "Frame-time breakdown from engine devtools: fps, sim phases, and lag culprit hints." },
|
|
56
|
+
{ name: "create_terrain", description: "Create an editable sculpt heightfield over the scene (width/depth/cellSize)." },
|
|
57
|
+
{ name: "sculpt_terrain", description: "Apply one sculpt brush (raise/lower/smooth/flatten/noise/ramp) at x/z as an undoable stroke." },
|
|
58
|
+
{ name: "terrain_summary", description: "Report the sculpt heightfield's grid size, bounds, min/max offset, edited vertices, and painted cells." },
|
|
59
|
+
{ name: "paint_terrain", description: "Paint a terrain material (grass/dirt/rock/…) at x/z as an undoable stroke." },
|
|
60
|
+
{ name: "fill_terrain", description: "Fill the whole terrain with one material, or null to clear all painted surfaces." },
|
|
61
|
+
{ name: "auto_paint", description: "Paint a material into every cell matching a slope/height rule (e.g. rock on steep, snow up high)." },
|
|
62
|
+
{ name: "terrain_materials", description: "List the terrain paint palette (material id, label, color)." },
|
|
63
|
+
{ name: "terrain_layers", description: "List the terrain material layer stack (id, surface, roughness/tiling/triplanar/tint/opacity)." },
|
|
64
|
+
{ name: "set_terrain_layers", description: "Replace the reorderable terrain material layer stack; a params-only edit keeps painted blends." },
|
|
65
|
+
{ name: "blend_terrain", description: "Blend-paint a material layer's weight at x/z (weighted multi-layer blend); auto-adds the layer." },
|
|
66
|
+
{ name: "convert_scatter", description: "Detach a foliage/scatter region into individually-editable placed prop markers, removing the region." },
|
|
67
|
+
{ name: "bake_minimap", description: "Rasterize the authored terrain into a stored minimap PNG on the document (runtime reads it as the Minimap background). Live-editor only — needs the mounted viewport's terrain sampler, not a headless CLI." },
|
|
68
|
+
{ name: "add_foliage", description: "Add a foliage/scatter region from a closed polygon (≥3 x/z points) with density and item." },
|
|
69
|
+
{ name: "scatter_summary", description: "Count foliage/scatter regions and their total deterministic instance placements." },
|
|
70
|
+
{ name: "set_parent", description: "Parent objects under another (or null to unparent); cycles are refused. Moving a parent moves its subtree." },
|
|
71
|
+
{ name: "hierarchy", description: "The scene's parent/child tree: root ids and each root's direct children." },
|
|
72
|
+
{ name: "list_prefabs", description: "List the document's reusable prefab stamps (id, name, fragment content)." },
|
|
73
|
+
{ name: "create_prefab", description: "Make a reusable prefab from selected ids, centered on their own bounds." },
|
|
74
|
+
{ name: "insert_prefab", description: "Insert a fresh, tagged instance of a prefab at the camera focus or given x/y/z." },
|
|
75
|
+
{ name: "detach_prefab_instance", description: "Strip the prefab link from every object in an instance, keeping its content." },
|
|
76
|
+
{ name: "delete_prefab", description: "Remove a prefab from the library (placed instances are unaffected)." },
|
|
77
|
+
{ name: "list_collections", description: "List named collections / selection sets (id, name, memberIds, color, locked, visible)." },
|
|
78
|
+
{ name: "create_collection", description: "Create a named collection / selection set from member ids." },
|
|
79
|
+
{ name: "rename_collection", description: "Rename a collection." },
|
|
80
|
+
{ name: "delete_collection", description: "Delete a collection (its member objects are untouched)." },
|
|
81
|
+
{ name: "set_collection_members", description: "Replace a collection's member ids wholesale." },
|
|
82
|
+
{ name: "add_to_collection", description: "Add ids to a collection's membership." },
|
|
83
|
+
{ name: "remove_from_collection", description: "Remove ids from a collection's membership." },
|
|
84
|
+
{ name: "set_collection_flags", description: "Patch a collection's color / locked / visible flags." },
|
|
85
|
+
{ name: "select_collection", description: "Restore the current selection to a collection's member ids." },
|
|
86
|
+
{ name: "set_object_flags", description: "Set per-object locked (blocks transform/delete) and/or hidden (viewport hide) flags on placeables by id. false clears the field." },
|
|
87
|
+
{ name: "batch_set_properties", description: "Patch color/label/meta across every listed id in one dispatch, regardless of kind." },
|
|
88
|
+
{ name: "assign_material", description: "Stamp meta.materialId on every listed object — the drag-drop material assignment primitive." },
|
|
89
|
+
{ name: "list_grids", description: "List the scene document's grid/tile layers (id, kind, bounds, cell count, palette ids)." },
|
|
90
|
+
{ name: "get_grid_cell", description: "Eyedrop: read the value id at col,row of a grid layer (empty value for unset/out-of-bounds cells)." },
|
|
91
|
+
{ name: "add_grid_layer", description: "Create an empty grid/tile layer on the scene document with the given bounds, cell size, and palette." },
|
|
92
|
+
{ name: "remove_grid_layer", description: "Delete a grid/tile layer from the scene document by id." },
|
|
93
|
+
{ name: "set_grid_layer", description: "Patch a grid layer's metadata — label, kind, visibility, empty value, cell size, origin, axes, or palette." },
|
|
94
|
+
{ name: "paint_grid_cells", description: "Paint or erase grid cells (value equal to the layer's empty value erases). One undo step for the whole batch." },
|
|
95
|
+
{ name: "fill_grid_rect", description: "Rectangle tool: fill the inclusive col0,row0..col1,row1 rectangle of a grid layer with one value." },
|
|
96
|
+
{ name: "flood_fill_grid", description: "Bucket tool: flood-fill the contiguous region sharing the seed cell's value with a new value." },
|
|
97
|
+
{ name: "resize_grid_layer", description: "Resize a grid layer's bounds to cols x rows, trimming any cells outside the new extent." },
|
|
98
|
+
{ name: "import_grid", description: "Import an ASCII/glyph map or CSV into a new grid layer (the ASCII/CSV is an import adapter, not the stored form)." },
|
|
913
99
|
];
|
|
100
|
+
/** Full set of MCP tools an agent can call to drive the live scene editor. */
|
|
101
|
+
export const EDITOR_MCP_TOOLS = TOOL_DESCRIPTIONS.map(({ name, description }) => ({
|
|
102
|
+
name,
|
|
103
|
+
description,
|
|
104
|
+
inputSchema: buildInputSchema(name),
|
|
105
|
+
}));
|