@jgengine/editor 0.10.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 +325 -0
- package/dist/AssetBrowser.d.ts +20 -0
- package/dist/AssetBrowser.js +49 -0
- package/dist/CatalogsPanel.d.ts +10 -0
- package/dist/CatalogsPanel.js +41 -0
- package/dist/CollectionsPanel.d.ts +10 -0
- package/dist/CollectionsPanel.js +35 -0
- package/dist/DebugDraw.d.ts +17 -0
- package/dist/DebugDraw.js +233 -0
- package/dist/EditorApp.d.ts +26 -0
- package/dist/EditorApp.js +333 -0
- package/dist/EditorCameraDriver.d.ts +5 -0
- package/dist/EditorCameraDriver.js +18 -0
- package/dist/EditorChrome.d.ts +22 -0
- package/dist/EditorChrome.js +559 -0
- package/dist/EditorContextMenu.d.ts +11 -0
- package/dist/EditorContextMenu.js +12 -0
- package/dist/InspectorPanel.d.ts +14 -0
- package/dist/InspectorPanel.js +110 -0
- package/dist/MaterialDropZone.d.ts +10 -0
- package/dist/MaterialDropZone.js +77 -0
- package/dist/OutlinerPanel.d.ts +14 -0
- package/dist/OutlinerPanel.js +84 -0
- package/dist/PerfProbe.d.ts +5 -0
- package/dist/PerfProbe.js +34 -0
- package/dist/PrefabsPanel.d.ts +13 -0
- package/dist/PrefabsPanel.js +42 -0
- package/dist/RuntimePlayBridge.d.ts +18 -0
- package/dist/RuntimePlayBridge.js +140 -0
- package/dist/ScatterPreview.d.ts +11 -0
- package/dist/ScatterPreview.js +30 -0
- package/dist/SchemaInspector.d.ts +19 -0
- package/dist/SchemaInspector.js +78 -0
- package/dist/SelectionGizmo.d.ts +25 -0
- package/dist/SelectionGizmo.js +455 -0
- package/dist/StandaloneEditor.d.ts +44 -0
- package/dist/StandaloneEditor.js +92 -0
- package/dist/TerrainPanel.d.ts +7 -0
- package/dist/TerrainPanel.js +59 -0
- package/dist/TerrainSculpt.d.ts +14 -0
- package/dist/TerrainSculpt.js +415 -0
- package/dist/TriggerInspector.d.ts +13 -0
- package/dist/TriggerInspector.js +60 -0
- package/dist/agent/AgentPanel.d.ts +13 -0
- package/dist/agent/AgentPanel.js +156 -0
- package/dist/agent/context.d.ts +27 -0
- package/dist/agent/context.js +39 -0
- package/dist/agent/endpoint.d.ts +68 -0
- package/dist/agent/endpoint.js +186 -0
- package/dist/agent/toolBridge.d.ts +35 -0
- package/dist/agent/toolBridge.js +93 -0
- package/dist/agent/turn.d.ts +71 -0
- package/dist/agent/turn.js +113 -0
- package/dist/chromeFields.d.ts +15 -0
- package/dist/chromeFields.js +13 -0
- package/dist/chromeStyles.d.ts +3 -0
- package/dist/chromeStyles.js +3 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +19 -0
- package/dist/mcp/bridgeServer.d.ts +13 -0
- package/dist/mcp/bridgeServer.js +1 -0
- package/dist/mcp/loadGameCatalogs.d.ts +24 -0
- package/dist/mcp/loadGameCatalogs.js +87 -0
- package/dist/mcp/rpcRequest.d.ts +22 -0
- package/dist/mcp/rpcRequest.js +97 -0
- package/dist/mcp/tools.d.ts +8 -0
- package/dist/mcp/tools.js +764 -0
- package/dist/outlinerModel.d.ts +76 -0
- package/dist/outlinerModel.js +95 -0
- package/dist/perfMarks.d.ts +25 -0
- package/dist/perfMarks.js +36 -0
- package/dist/session.d.ts +400 -0
- package/dist/session.js +1032 -0
- package/dist/uiStore.d.ts +108 -0
- package/dist/uiStore.js +128 -0
- package/dist/useF2Chord.d.ts +2 -0
- package/dist/useF2Chord.js +32 -0
- package/dist/useStoreSelector.d.ts +31 -0
- package/dist/useStoreSelector.js +51 -0
- package/dist/viewportContextMenu.d.ts +24 -0
- package/dist/viewportContextMenu.js +32 -0
- package/package.json +58 -0
- package/skills/jgengine/SKILL.md +823 -0
- package/skills/jgengine/api.md +416 -0
- package/skills/jgengine/capabilities.md +21 -0
- package/skills/jgengine/reference-cartridge.md +72 -0
- package/skills/jgengine/reference-orphans.md +9 -0
- package/skills/jgengine/reference-systems.md +60 -0
- package/skills/jgengine-editor/SKILL.md +382 -0
- package/skills/jgengine-editor/api.md +416 -0
- package/skills/jgengine-editor/capabilities.md +29 -0
- package/skills/jgengine-editor/reference.md +64 -0
|
@@ -0,0 +1,764 @@
|
|
|
1
|
+
/** Full set of MCP tools an agent can call to drive the live scene editor. */
|
|
2
|
+
export const EDITOR_MCP_TOOLS = [
|
|
3
|
+
{
|
|
4
|
+
name: "editor_status",
|
|
5
|
+
description: "Connection status, selection, and layer counts for the active editor session.",
|
|
6
|
+
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
name: "list_layers",
|
|
10
|
+
description: "List marker/volume/path kinds, visibility, and the full editor document.",
|
|
11
|
+
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: "list_catalogs",
|
|
15
|
+
description: "List gameplay data catalogs exported by the game (id, label, schema, entry ids).",
|
|
16
|
+
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: "get_catalog_entry",
|
|
20
|
+
description: "Fetch one gameplay catalog entry by catalogId + entryId, including its schema and meta.",
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: "object",
|
|
23
|
+
properties: { catalogId: { type: "string" }, entryId: { type: "string" } },
|
|
24
|
+
required: ["catalogId", "entryId"],
|
|
25
|
+
additionalProperties: false,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: "set_catalog_entry",
|
|
30
|
+
description: "Merge-patch a gameplay catalog entry's meta (and optional label). Validated against the catalog ParamSchema; coalesces undo like meta patches.",
|
|
31
|
+
inputSchema: {
|
|
32
|
+
type: "object",
|
|
33
|
+
properties: {
|
|
34
|
+
catalogId: { type: "string" },
|
|
35
|
+
entryId: { type: "string" },
|
|
36
|
+
patch: { type: "object" },
|
|
37
|
+
label: { type: "string" },
|
|
38
|
+
},
|
|
39
|
+
required: ["catalogId", "entryId", "patch"],
|
|
40
|
+
additionalProperties: false,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: "list_selection",
|
|
45
|
+
description: "Return currently selected editor object ids.",
|
|
46
|
+
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "get_marker",
|
|
50
|
+
description: "Fetch one marker by id.",
|
|
51
|
+
inputSchema: {
|
|
52
|
+
type: "object",
|
|
53
|
+
properties: { id: { type: "string" } },
|
|
54
|
+
required: ["id"],
|
|
55
|
+
additionalProperties: false,
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: "get_volume",
|
|
60
|
+
description: "Fetch one volume by id.",
|
|
61
|
+
inputSchema: {
|
|
62
|
+
type: "object",
|
|
63
|
+
properties: { id: { type: "string" } },
|
|
64
|
+
required: ["id"],
|
|
65
|
+
additionalProperties: false,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "set_transform",
|
|
70
|
+
description: "Move a marker or volume center by id.",
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: "object",
|
|
73
|
+
properties: {
|
|
74
|
+
id: { type: "string" },
|
|
75
|
+
x: { type: "number" },
|
|
76
|
+
y: { type: "number" },
|
|
77
|
+
z: { type: "number" },
|
|
78
|
+
rotationY: { type: "number" },
|
|
79
|
+
},
|
|
80
|
+
required: ["id"],
|
|
81
|
+
additionalProperties: false,
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: "set_volume",
|
|
86
|
+
description: "Patch a volume radius/height/center.",
|
|
87
|
+
inputSchema: {
|
|
88
|
+
type: "object",
|
|
89
|
+
properties: {
|
|
90
|
+
id: { type: "string" },
|
|
91
|
+
radius: { type: "number" },
|
|
92
|
+
height: { type: "number" },
|
|
93
|
+
x: { type: "number" },
|
|
94
|
+
y: { type: "number" },
|
|
95
|
+
z: { type: "number" },
|
|
96
|
+
},
|
|
97
|
+
required: ["id"],
|
|
98
|
+
additionalProperties: false,
|
|
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
|
+
];
|