@iwsdk/core 0.2.1 → 0.3.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/README.md +94 -0
- package/dist/asset/loaders/hdr-texture-loader.d.ts +1 -1
- package/dist/asset/loaders/hdr-texture-loader.d.ts.map +1 -1
- package/dist/asset/loaders/hdr-texture-loader.js +4 -4
- package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
- package/dist/audio/audio-system.d.ts +6 -2
- package/dist/audio/audio-system.d.ts.map +1 -1
- package/dist/audio/audio-system.js +1 -0
- package/dist/audio/audio-system.js.map +1 -1
- package/dist/audio/audio.d.ts +3 -1
- package/dist/audio/audio.d.ts.map +1 -1
- package/dist/audio/audio.js +8 -2
- package/dist/audio/audio.js.map +1 -1
- package/dist/camera/camera-source.js +1 -0
- package/dist/camera/camera-source.js.map +1 -1
- package/dist/camera/camera-system.d.ts.map +1 -1
- package/dist/camera/camera-system.js +1 -0
- package/dist/camera/camera-system.js.map +1 -1
- package/dist/camera/camera-utils.d.ts.map +1 -1
- package/dist/camera/camera-utils.js.map +1 -1
- package/dist/depth/depth-occludable.d.ts +48 -0
- package/dist/depth/depth-occludable.d.ts.map +1 -0
- package/dist/depth/depth-occludable.js +48 -0
- package/dist/depth/depth-occludable.js.map +1 -0
- package/dist/depth/depth-sensing-system.d.ts +164 -0
- package/dist/depth/depth-sensing-system.d.ts.map +1 -0
- package/dist/depth/depth-sensing-system.js +453 -0
- package/dist/depth/depth-sensing-system.js.map +1 -0
- package/dist/depth/depth-textures.d.ts +53 -0
- package/dist/depth/depth-textures.d.ts.map +1 -0
- package/dist/depth/depth-textures.js +114 -0
- package/dist/depth/depth-textures.js.map +1 -0
- package/dist/depth/index.d.ts +10 -0
- package/dist/depth/index.d.ts.map +1 -0
- package/dist/depth/occlusion/preprocessing-pass.d.ts +52 -0
- package/dist/depth/occlusion/preprocessing-pass.d.ts.map +1 -0
- package/dist/depth/occlusion/preprocessing-pass.js +105 -0
- package/dist/depth/occlusion/preprocessing-pass.js.map +1 -0
- package/dist/depth/occlusion/preprocessing-shader.glsl.d.ts +22 -0
- package/dist/depth/occlusion/preprocessing-shader.glsl.d.ts.map +1 -0
- package/dist/depth/occlusion/preprocessing-shader.glsl.js +115 -0
- package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -0
- package/dist/ecs/entity.d.ts +17 -1
- package/dist/ecs/entity.d.ts.map +1 -1
- package/dist/ecs/entity.js +7 -1
- package/dist/ecs/entity.js.map +1 -1
- package/dist/ecs/world.d.ts +12 -0
- package/dist/ecs/world.d.ts.map +1 -1
- package/dist/ecs/world.js +47 -3
- package/dist/ecs/world.js.map +1 -1
- package/dist/environment/dome-gradient.js +1 -0
- package/dist/environment/dome-gradient.js.map +1 -1
- package/dist/environment/dome-texture.d.ts +3 -1
- package/dist/environment/dome-texture.d.ts.map +1 -1
- package/dist/environment/dome-texture.js +7 -1
- package/dist/environment/dome-texture.js.map +1 -1
- package/dist/environment/environment-system.d.ts +8 -0
- package/dist/environment/environment-system.d.ts.map +1 -1
- package/dist/environment/environment-system.js +78 -2
- package/dist/environment/environment-system.js.map +1 -1
- package/dist/environment/ibl-gradient.js +1 -0
- package/dist/environment/ibl-gradient.js.map +1 -1
- package/dist/environment/ibl-texture.d.ts +3 -1
- package/dist/environment/ibl-texture.d.ts.map +1 -1
- package/dist/environment/ibl-texture.js +7 -1
- package/dist/environment/ibl-texture.js.map +1 -1
- package/dist/environment-raycast/environment-raycast.d.ts +136 -0
- package/dist/environment-raycast/environment-raycast.d.ts.map +1 -0
- package/dist/environment-raycast/environment-raycast.js +333 -0
- package/dist/environment-raycast/environment-raycast.js.map +1 -0
- package/dist/environment-raycast/index.d.ts +9 -0
- package/dist/environment-raycast/index.d.ts.map +1 -0
- package/dist/environment-raycast/raycast-target.d.ts +114 -0
- package/dist/environment-raycast/raycast-target.d.ts.map +1 -0
- package/dist/environment-raycast/raycast-target.js +84 -0
- package/dist/environment-raycast/raycast-target.js.map +1 -0
- package/dist/grab/distance-grabbable.d.ts +27 -2
- package/dist/grab/distance-grabbable.d.ts.map +1 -1
- package/dist/grab/distance-grabbable.js +25 -2
- package/dist/grab/distance-grabbable.js.map +1 -1
- package/dist/grab/grab-system.d.ts +106 -61
- package/dist/grab/grab-system.d.ts.map +1 -1
- package/dist/grab/grab-system.js +61 -10
- package/dist/grab/grab-system.js.map +1 -1
- package/dist/grab/handles.d.ts +14 -4
- package/dist/grab/handles.d.ts.map +1 -1
- package/dist/grab/handles.js +45 -18
- package/dist/grab/handles.js.map +1 -1
- package/dist/grab/index.d.ts +0 -1
- package/dist/grab/index.d.ts.map +1 -1
- package/dist/grab/index.js +0 -2
- package/dist/grab/index.js.map +1 -1
- package/dist/grab/one-hand-grabbable.js +1 -0
- package/dist/grab/one-hand-grabbable.js.map +1 -1
- package/dist/grab/two-hands-grabbable.js +1 -0
- package/dist/grab/two-hands-grabbable.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/init/world-initializer.d.ts +17 -3
- package/dist/init/world-initializer.d.ts.map +1 -1
- package/dist/init/world-initializer.js +86 -19
- package/dist/init/world-initializer.js.map +1 -1
- package/dist/init/xr.d.ts +1 -0
- package/dist/init/xr.d.ts.map +1 -1
- package/dist/init/xr.js +6 -0
- package/dist/init/xr.js.map +1 -1
- package/dist/input/input-system.d.ts +408 -5
- package/dist/input/input-system.d.ts.map +1 -1
- package/dist/input/input-system.js +146 -23
- package/dist/input/input-system.js.map +1 -1
- package/dist/input/state-tags.d.ts +32 -15
- package/dist/input/state-tags.d.ts.map +1 -1
- package/dist/input/state-tags.js +34 -16
- package/dist/input/state-tags.js.map +1 -1
- package/dist/level/level-entity-creator.js +1 -0
- package/dist/level/level-entity-creator.js.map +1 -1
- package/dist/level/level-root.js +1 -0
- package/dist/level/level-root.js.map +1 -1
- package/dist/level/level-system.js +1 -0
- package/dist/level/level-system.js.map +1 -1
- package/dist/level/level-tag.js +1 -0
- package/dist/level/level-tag.js.map +1 -1
- package/dist/locomotion/locomotion.d.ts +10 -0
- package/dist/locomotion/locomotion.d.ts.map +1 -1
- package/dist/locomotion/locomotion.js +17 -1
- package/dist/locomotion/locomotion.js.map +1 -1
- package/dist/locomotion/slide.d.ts +10 -0
- package/dist/locomotion/slide.d.ts.map +1 -1
- package/dist/locomotion/slide.js +6 -2
- package/dist/locomotion/slide.js.map +1 -1
- package/dist/locomotion/teleport.js +1 -0
- package/dist/locomotion/teleport.js.map +1 -1
- package/dist/mcp/ecs-debug-tools.d.ts +167 -0
- package/dist/mcp/ecs-debug-tools.d.ts.map +1 -0
- package/dist/mcp/ecs-debug-tools.js +602 -0
- package/dist/mcp/ecs-debug-tools.js.map +1 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/mcp-runtime.d.ts +31 -0
- package/dist/mcp/mcp-runtime.d.ts.map +1 -0
- package/dist/mcp/mcp-runtime.js +85 -0
- package/dist/mcp/mcp-runtime.js.map +1 -0
- package/dist/mcp/scene-tools.d.ts +41 -0
- package/dist/mcp/scene-tools.d.ts.map +1 -0
- package/dist/mcp/scene-tools.js +95 -0
- package/dist/mcp/scene-tools.js.map +1 -0
- package/dist/physics/physics-system.d.ts +1 -1
- package/dist/physics/physics-system.d.ts.map +1 -1
- package/dist/physics/physics-system.js +9 -4
- package/dist/physics/physics-system.js.map +1 -1
- package/dist/physics/utils.d.ts.map +1 -1
- package/dist/physics/utils.js +1 -1
- package/dist/scene-understanding/anchor.js +1 -0
- package/dist/scene-understanding/anchor.js.map +1 -1
- package/dist/scene-understanding/mesh.js +1 -0
- package/dist/scene-understanding/mesh.js.map +1 -1
- package/dist/scene-understanding/plane.js +1 -0
- package/dist/scene-understanding/plane.js.map +1 -1
- package/dist/scene-understanding/scene-understanding-system.d.ts +29 -0
- package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
- package/dist/scene-understanding/scene-understanding-system.js +118 -18
- package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
- package/dist/transform/index.d.ts +2 -0
- package/dist/transform/index.d.ts.map +1 -1
- package/dist/transform/synced-euler.d.ts +62 -0
- package/dist/transform/synced-euler.d.ts.map +1 -0
- package/dist/transform/synced-euler.js +212 -0
- package/dist/transform/synced-euler.js.map +1 -0
- package/dist/transform/synced-quaternion.d.ts +11 -0
- package/dist/transform/synced-quaternion.d.ts.map +1 -1
- package/dist/transform/synced-quaternion.js +29 -0
- package/dist/transform/synced-quaternion.js.map +1 -1
- package/dist/transform/transform-utils.d.ts +24 -0
- package/dist/transform/transform-utils.d.ts.map +1 -0
- package/dist/transform/transform-utils.js +53 -0
- package/dist/transform/transform-utils.js.map +1 -0
- package/dist/transform/transform.d.ts.map +1 -1
- package/dist/transform/transform.js +19 -2
- package/dist/transform/transform.js.map +1 -1
- package/dist/ui/follow.js +1 -0
- package/dist/ui/follow.js.map +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/screenspace.js +1 -0
- package/dist/ui/screenspace.js.map +1 -1
- package/dist/ui/ui.d.ts.map +1 -1
- package/dist/ui/ui.js +2 -8
- package/dist/ui/ui.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/visibility/visibility.d.ts.map +1 -1
- package/dist/visibility/visibility.js +4 -1
- package/dist/visibility/visibility.js.map +1 -1
- package/package.json +16 -9
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.1.7_super-three@0.177.0/node_modules/@pmndrs/uikitml/dist/interpreter/html.js +0 -128
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.1.7_super-three@0.177.0/node_modules/@pmndrs/uikitml/dist/interpreter/html.js.map +0 -1
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.1.7_super-three@0.177.0/node_modules/@pmndrs/uikitml/dist/interpreter/index.js +0 -161
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.1.7_super-three@0.177.0/node_modules/@pmndrs/uikitml/dist/interpreter/index.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js +0 -66
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js +0 -162
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js +0 -519
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js +0 -15
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js +0 -32
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js +0 -10
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js +0 -41
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js +0 -35
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js +0 -24
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js.map +0 -1
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js +0 -92
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js.map +0 -1
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js +0 -382
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js.map +0 -1
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js +0 -2587
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js.map +0 -1
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js +0 -477
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js.map +0 -1
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js +0 -17
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js.map +0 -1
|
@@ -0,0 +1,602 @@
|
|
|
1
|
+
import { ComponentRegistry } from 'elics';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the MIT license found in the
|
|
7
|
+
* LICENSE file in the root directory of this source tree.
|
|
8
|
+
*/
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Debug state (module-scoped singleton — only one World per page)
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
const debugState = {
|
|
13
|
+
paused: false,
|
|
14
|
+
stepResolve: null,
|
|
15
|
+
stepDelta: 1 / 72,
|
|
16
|
+
frameCount: 0,
|
|
17
|
+
pausedAtFrame: 0,
|
|
18
|
+
};
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Install debug hook — monkey-patches world.update()
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
let originalUpdate = null;
|
|
23
|
+
let hookedWorld = null;
|
|
24
|
+
function installDebugHook(world) {
|
|
25
|
+
if (hookedWorld === world) {
|
|
26
|
+
return;
|
|
27
|
+
} // already installed
|
|
28
|
+
originalUpdate = world.update.bind(world);
|
|
29
|
+
hookedWorld = world;
|
|
30
|
+
world.update = (delta, time) => {
|
|
31
|
+
debugState.frameCount++;
|
|
32
|
+
if (debugState.paused && !debugState.stepResolve) {
|
|
33
|
+
// Skip ECS updates; renderer.render() still runs after this
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (debugState.paused && debugState.stepResolve) {
|
|
37
|
+
// Stepping — use fixed timestep
|
|
38
|
+
originalUpdate(debugState.stepDelta, time);
|
|
39
|
+
const resolve = debugState.stepResolve;
|
|
40
|
+
debugState.stepResolve = null;
|
|
41
|
+
resolve();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
originalUpdate(delta, time);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function ecsPause(world) {
|
|
48
|
+
debugState.paused = true;
|
|
49
|
+
debugState.pausedAtFrame = debugState.frameCount;
|
|
50
|
+
return {
|
|
51
|
+
paused: true,
|
|
52
|
+
frame: debugState.frameCount,
|
|
53
|
+
systemCount: world.getSystems().length,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
let resumeClampInstalled = false;
|
|
57
|
+
function ecsResume(world) {
|
|
58
|
+
const framesWhilePaused = debugState.frameCount - debugState.pausedAtFrame;
|
|
59
|
+
debugState.paused = false;
|
|
60
|
+
debugState.stepResolve = null;
|
|
61
|
+
// Cap first real delta after resume to avoid physics explosions
|
|
62
|
+
if (!resumeClampInstalled && originalUpdate) {
|
|
63
|
+
const currentUpdate = world.update;
|
|
64
|
+
let clampNext = true;
|
|
65
|
+
world.update = (delta, time) => {
|
|
66
|
+
if (clampNext) {
|
|
67
|
+
clampNext = false;
|
|
68
|
+
const maxDelta = 1 / 30;
|
|
69
|
+
currentUpdate(Math.min(delta, maxDelta), time);
|
|
70
|
+
// Restore the regular patched update
|
|
71
|
+
world.update = currentUpdate;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
currentUpdate(delta, time);
|
|
75
|
+
};
|
|
76
|
+
// Only need to do this once per resume
|
|
77
|
+
resumeClampInstalled = true;
|
|
78
|
+
// Reset so the next resume can install again
|
|
79
|
+
setTimeout(() => {
|
|
80
|
+
resumeClampInstalled = false;
|
|
81
|
+
}, 0);
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
paused: false,
|
|
85
|
+
framesWhilePaused,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async function ecsStep(_world, params) {
|
|
89
|
+
const { count = 1, delta = 1 / 72 } = params;
|
|
90
|
+
if (!debugState.paused) {
|
|
91
|
+
throw new Error('Cannot step when ECS is not paused. Call ecs_pause first.');
|
|
92
|
+
}
|
|
93
|
+
const frameCount = Math.max(1, Math.min(120, Math.round(count)));
|
|
94
|
+
debugState.stepDelta = delta;
|
|
95
|
+
// Per-step timeout: if the render loop isn't running (tab backgrounded,
|
|
96
|
+
// no active XR session, page hidden), the resolve callback from
|
|
97
|
+
// world.update() never fires. A 5s timeout per step prevents the MCP
|
|
98
|
+
// call from hanging indefinitely.
|
|
99
|
+
const STEP_TIMEOUT_MS = 5000;
|
|
100
|
+
for (let i = 0; i < frameCount; i++) {
|
|
101
|
+
await new Promise((resolve, reject) => {
|
|
102
|
+
debugState.stepResolve = () => {
|
|
103
|
+
clearTimeout(timer);
|
|
104
|
+
resolve();
|
|
105
|
+
};
|
|
106
|
+
const timer = setTimeout(() => {
|
|
107
|
+
debugState.stepResolve = null;
|
|
108
|
+
reject(new Error(`Step timeout after ${STEP_TIMEOUT_MS}ms — the render loop may not be running. ` +
|
|
109
|
+
`Ensure an XR session is active and the browser tab is visible.`));
|
|
110
|
+
}, STEP_TIMEOUT_MS);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
framesAdvanced: frameCount,
|
|
115
|
+
totalFrame: debugState.frameCount,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
// Component serialization helpers
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
const VECTOR_TYPES = new Set(['Vec2', 'Vec3', 'Vec4', 'Color']);
|
|
122
|
+
const MAX_STRING_LENGTH = 200;
|
|
123
|
+
const MAX_DEPTH = 3;
|
|
124
|
+
const MAX_TYPED_ARRAY_ELEMENTS = 16;
|
|
125
|
+
function safeSerialize(value, depth = 0, seen = new WeakSet()) {
|
|
126
|
+
if (value === null || value === undefined) {
|
|
127
|
+
return value;
|
|
128
|
+
}
|
|
129
|
+
const type = typeof value;
|
|
130
|
+
if (type === 'number' || type === 'boolean') {
|
|
131
|
+
return value;
|
|
132
|
+
}
|
|
133
|
+
if (type === 'string') {
|
|
134
|
+
return value.length > MAX_STRING_LENGTH
|
|
135
|
+
? value.slice(0, MAX_STRING_LENGTH) + '...'
|
|
136
|
+
: value;
|
|
137
|
+
}
|
|
138
|
+
if (type === 'function') {
|
|
139
|
+
return '<function>';
|
|
140
|
+
}
|
|
141
|
+
if (type !== 'object') {
|
|
142
|
+
return String(value);
|
|
143
|
+
}
|
|
144
|
+
const obj = value;
|
|
145
|
+
// Circular reference check
|
|
146
|
+
if (seen.has(obj)) {
|
|
147
|
+
return '<circular>';
|
|
148
|
+
}
|
|
149
|
+
seen.add(obj);
|
|
150
|
+
// Depth limit
|
|
151
|
+
if (depth >= MAX_DEPTH) {
|
|
152
|
+
return '<object>';
|
|
153
|
+
}
|
|
154
|
+
// TypedArray
|
|
155
|
+
if (ArrayBuffer.isView(obj) && 'length' in obj) {
|
|
156
|
+
const arr = obj;
|
|
157
|
+
const len = Math.min(arr.length, MAX_TYPED_ARRAY_ELEMENTS);
|
|
158
|
+
const result = Array.from({ length: len }, (_, i) => arr[i]);
|
|
159
|
+
if (arr.length > MAX_TYPED_ARRAY_ELEMENTS) {
|
|
160
|
+
return { values: result, truncated: true, totalLength: arr.length };
|
|
161
|
+
}
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
// Array
|
|
165
|
+
if (Array.isArray(obj)) {
|
|
166
|
+
return obj
|
|
167
|
+
.slice(0, MAX_TYPED_ARRAY_ELEMENTS)
|
|
168
|
+
.map((item) => safeSerialize(item, depth + 1, seen));
|
|
169
|
+
}
|
|
170
|
+
// Three.js sentinel detection — return type tag instead of full object
|
|
171
|
+
if (obj.isObject3D) {
|
|
172
|
+
return `<Object3D:${obj.name || obj.type || 'unnamed'}>`;
|
|
173
|
+
}
|
|
174
|
+
if (obj.isMaterial) {
|
|
175
|
+
return `<Material:${obj.type || 'unknown'}>`;
|
|
176
|
+
}
|
|
177
|
+
if (obj.isTexture) {
|
|
178
|
+
return `<Texture:${obj.name || 'unnamed'}>`;
|
|
179
|
+
}
|
|
180
|
+
if (obj.isBufferGeometry) {
|
|
181
|
+
return `<BufferGeometry>`;
|
|
182
|
+
}
|
|
183
|
+
// Plain object
|
|
184
|
+
const result = {};
|
|
185
|
+
const keys = Object.keys(obj);
|
|
186
|
+
for (const key of keys.slice(0, 20)) {
|
|
187
|
+
result[key] = safeSerialize(obj[key], depth + 1, seen);
|
|
188
|
+
}
|
|
189
|
+
if (keys.length > 20) {
|
|
190
|
+
result['...'] = `${keys.length - 20} more keys`;
|
|
191
|
+
}
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
function serializeComponentValue(entity, component, key, schemaField) {
|
|
195
|
+
var _a;
|
|
196
|
+
const type = schemaField.type;
|
|
197
|
+
if (VECTOR_TYPES.has(type)) {
|
|
198
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
199
|
+
return Array.from(entity.getVectorView(component, key));
|
|
200
|
+
}
|
|
201
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
202
|
+
const raw = entity.getValue(component, key);
|
|
203
|
+
if (type === 'Entity') {
|
|
204
|
+
if (raw === null) {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
const ref = raw;
|
|
208
|
+
return {
|
|
209
|
+
entityIndex: ref.index,
|
|
210
|
+
name: ((_a = ref.object3D) === null || _a === void 0 ? void 0 : _a.name) || undefined,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
if (type === 'Object') {
|
|
214
|
+
return safeSerialize(raw);
|
|
215
|
+
}
|
|
216
|
+
return raw;
|
|
217
|
+
}
|
|
218
|
+
function ecsQueryEntity(world, params) {
|
|
219
|
+
var _a;
|
|
220
|
+
const { entityIndex, components } = params;
|
|
221
|
+
if (entityIndex === undefined || entityIndex === null) {
|
|
222
|
+
throw new Error('entityIndex is required. Use get_scene_hierarchy or ecs_find_entities to discover entity indices.');
|
|
223
|
+
}
|
|
224
|
+
const entity = world.entityManager.getEntityByIndex(entityIndex);
|
|
225
|
+
if (!entity) {
|
|
226
|
+
throw new Error(`Entity ${entityIndex} not found or has been destroyed. Use get_scene_hierarchy or ecs_find_entities to find active entities.`);
|
|
227
|
+
}
|
|
228
|
+
const entityComponents = entity.getComponents();
|
|
229
|
+
// Filter to requested components if specified
|
|
230
|
+
let targetComponents = entityComponents;
|
|
231
|
+
if (components && components.length > 0) {
|
|
232
|
+
const filterSet = new Set(components);
|
|
233
|
+
targetComponents = entityComponents.filter((c) => filterSet.has(c.id));
|
|
234
|
+
}
|
|
235
|
+
const componentDataList = targetComponents.map((component) => {
|
|
236
|
+
const values = {};
|
|
237
|
+
const schema = component.schema;
|
|
238
|
+
for (const key of Object.keys(schema)) {
|
|
239
|
+
values[key] = serializeComponentValue(entity, component, key, schema[key]);
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
componentId: component.id,
|
|
243
|
+
description: component.description,
|
|
244
|
+
values,
|
|
245
|
+
};
|
|
246
|
+
});
|
|
247
|
+
return {
|
|
248
|
+
entityIndex: entity.index,
|
|
249
|
+
active: entity.active,
|
|
250
|
+
name: ((_a = entity.object3D) === null || _a === void 0 ? void 0 : _a.name) || undefined,
|
|
251
|
+
components: componentDataList,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
function ecsFindEntities(world, params) {
|
|
255
|
+
var _a, _b;
|
|
256
|
+
const { withComponents, withoutComponents, namePattern, limit = 50, } = params;
|
|
257
|
+
// Resolve component names to component objects
|
|
258
|
+
const requiredComponents = [];
|
|
259
|
+
if (withComponents) {
|
|
260
|
+
for (const name of withComponents) {
|
|
261
|
+
const comp = ComponentRegistry.getById(name);
|
|
262
|
+
if (!comp) {
|
|
263
|
+
throw new Error(`Component '${name}' not found in registry. Check the component ID.`);
|
|
264
|
+
}
|
|
265
|
+
requiredComponents.push(comp);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
const excludedComponents = [];
|
|
269
|
+
if (withoutComponents) {
|
|
270
|
+
for (const name of withoutComponents) {
|
|
271
|
+
const comp = ComponentRegistry.getById(name);
|
|
272
|
+
if (!comp) {
|
|
273
|
+
throw new Error(`Component '${name}' not found in registry. Check the component ID.`);
|
|
274
|
+
}
|
|
275
|
+
excludedComponents.push(comp);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
let nameRegex = null;
|
|
279
|
+
if (namePattern) {
|
|
280
|
+
nameRegex = new RegExp(namePattern, 'i');
|
|
281
|
+
}
|
|
282
|
+
const maxResults = Math.max(1, Math.min(50, limit));
|
|
283
|
+
const results = [];
|
|
284
|
+
let totalMatches = 0;
|
|
285
|
+
// indexLookup is internal to ELICS (not part of the public API). If an
|
|
286
|
+
// iteration API becomes public, migrate to that instead. For now, direct
|
|
287
|
+
// access is the only way to enumerate all live entities efficiently.
|
|
288
|
+
const lookup = world.entityManager.indexLookup;
|
|
289
|
+
for (let i = 0; i < lookup.length; i++) {
|
|
290
|
+
const entity = lookup[i];
|
|
291
|
+
if (!entity || !entity.active) {
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
// Check required components
|
|
295
|
+
let match = true;
|
|
296
|
+
for (const comp of requiredComponents) {
|
|
297
|
+
if (!entity.hasComponent(comp)) {
|
|
298
|
+
match = false;
|
|
299
|
+
break;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (!match) {
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
// Check excluded components
|
|
306
|
+
for (const comp of excludedComponents) {
|
|
307
|
+
if (entity.hasComponent(comp)) {
|
|
308
|
+
match = false;
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
if (!match) {
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
// Check name pattern
|
|
316
|
+
if (nameRegex) {
|
|
317
|
+
const name = (_a = entity.object3D) === null || _a === void 0 ? void 0 : _a.name;
|
|
318
|
+
if (!name || !nameRegex.test(name)) {
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
totalMatches++;
|
|
323
|
+
if (results.length < maxResults) {
|
|
324
|
+
const componentIds = entity
|
|
325
|
+
.getComponents()
|
|
326
|
+
.map((c) => c.id);
|
|
327
|
+
results.push({
|
|
328
|
+
entityIndex: entity.index,
|
|
329
|
+
name: ((_b = entity.object3D) === null || _b === void 0 ? void 0 : _b.name) || undefined,
|
|
330
|
+
componentIds,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return {
|
|
335
|
+
entities: results,
|
|
336
|
+
total: totalMatches,
|
|
337
|
+
limited: totalMatches > maxResults,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
function ecsListSystems(world) {
|
|
341
|
+
const systems = world.getSystems();
|
|
342
|
+
const result = systems.map((system, index) => {
|
|
343
|
+
var _a, _b, _c;
|
|
344
|
+
const queryNames = Object.keys(system.queries || {});
|
|
345
|
+
const entityCounts = {};
|
|
346
|
+
for (const qName of queryNames) {
|
|
347
|
+
entityCounts[qName] = (_c = (_b = (_a = system.queries[qName]) === null || _a === void 0 ? void 0 : _a.entities) === null || _b === void 0 ? void 0 : _b.size) !== null && _c !== void 0 ? _c : 0;
|
|
348
|
+
}
|
|
349
|
+
return {
|
|
350
|
+
name: system.constructor.name,
|
|
351
|
+
index,
|
|
352
|
+
priority: system.priority,
|
|
353
|
+
isPaused: system.isPaused,
|
|
354
|
+
configKeys: Object.keys(system.config || {}),
|
|
355
|
+
queryNames,
|
|
356
|
+
entityCounts,
|
|
357
|
+
};
|
|
358
|
+
});
|
|
359
|
+
return { systems: result, total: result.length };
|
|
360
|
+
}
|
|
361
|
+
function ecsListComponents() {
|
|
362
|
+
const all = ComponentRegistry.getAllComponents();
|
|
363
|
+
const result = all.map((comp) => {
|
|
364
|
+
const fields = {};
|
|
365
|
+
for (const [key, field] of Object.entries(comp.schema)) {
|
|
366
|
+
fields[key] = {
|
|
367
|
+
type: field.type,
|
|
368
|
+
default: field.default,
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
return {
|
|
372
|
+
id: comp.id,
|
|
373
|
+
description: comp.description,
|
|
374
|
+
fields,
|
|
375
|
+
};
|
|
376
|
+
});
|
|
377
|
+
return { components: result, total: result.length };
|
|
378
|
+
}
|
|
379
|
+
function ecsToggleSystem(world, params) {
|
|
380
|
+
const { name, paused } = params;
|
|
381
|
+
const systems = world.getSystems();
|
|
382
|
+
const system = systems.find((s) => s.constructor.name === name);
|
|
383
|
+
if (!system) {
|
|
384
|
+
const available = systems.map((s) => s.constructor.name).join(', ');
|
|
385
|
+
throw new Error(`System '${name}' not found. Available systems: ${available}`);
|
|
386
|
+
}
|
|
387
|
+
const targetPaused = paused !== undefined ? paused : !system.isPaused;
|
|
388
|
+
if (targetPaused) {
|
|
389
|
+
system.stop();
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
system.play();
|
|
393
|
+
}
|
|
394
|
+
return { name: system.constructor.name, isPaused: system.isPaused };
|
|
395
|
+
}
|
|
396
|
+
function ecsSetComponent(world, params) {
|
|
397
|
+
const { entityIndex, componentId, field, value } = params;
|
|
398
|
+
const entity = world.entityManager.getEntityByIndex(entityIndex);
|
|
399
|
+
if (!entity) {
|
|
400
|
+
throw new Error(`Entity ${entityIndex} not found.`);
|
|
401
|
+
}
|
|
402
|
+
const component = ComponentRegistry.getById(componentId);
|
|
403
|
+
if (!component) {
|
|
404
|
+
throw new Error(`Component '${componentId}' not found in registry.`);
|
|
405
|
+
}
|
|
406
|
+
if (!entity.hasComponent(component)) {
|
|
407
|
+
throw new Error(`Entity ${entityIndex} does not have component '${componentId}'.`);
|
|
408
|
+
}
|
|
409
|
+
const schemaField = component.schema[field];
|
|
410
|
+
if (!schemaField) {
|
|
411
|
+
const available = Object.keys(component.schema).join(', ');
|
|
412
|
+
throw new Error(`Field '${field}' not found on '${componentId}'. Available: ${available}`);
|
|
413
|
+
}
|
|
414
|
+
// Read previous value using existing serialization helper
|
|
415
|
+
const previousValue = serializeComponentValue(entity, component, field, schemaField);
|
|
416
|
+
const type = schemaField.type;
|
|
417
|
+
if (VECTOR_TYPES.has(type)) {
|
|
418
|
+
// Vector types: write via getVectorView
|
|
419
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
420
|
+
const view = entity.getVectorView(component, field);
|
|
421
|
+
// Value may arrive as a JSON string from MCP clients (e.g. "[0, 1.2, -1.5]")
|
|
422
|
+
let arr = value;
|
|
423
|
+
if (typeof arr === 'string') {
|
|
424
|
+
try {
|
|
425
|
+
arr = JSON.parse(arr);
|
|
426
|
+
}
|
|
427
|
+
catch (_a) {
|
|
428
|
+
throw new Error(`${type} field '${field}': could not parse value string as JSON array.`);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
if (!Array.isArray(arr) || arr.length !== view.length) {
|
|
432
|
+
throw new Error(`${type} field '${field}' requires an array of ${view.length} numbers.`);
|
|
433
|
+
}
|
|
434
|
+
for (let i = 0; i < view.length; i++) {
|
|
435
|
+
view[i] = arr[i];
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
// Scalar types: use setValue (handles validation, query updates)
|
|
440
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
441
|
+
entity.setValue(component, field, value);
|
|
442
|
+
}
|
|
443
|
+
// Read back new value
|
|
444
|
+
const newValue = serializeComponentValue(entity, component, field, schemaField);
|
|
445
|
+
return { entityIndex, componentId, field, previousValue, newValue };
|
|
446
|
+
}
|
|
447
|
+
// ---------------------------------------------------------------------------
|
|
448
|
+
// ecs_snapshot / ecs_diff
|
|
449
|
+
// ---------------------------------------------------------------------------
|
|
450
|
+
// Module-scoped snapshot storage
|
|
451
|
+
const snapshots = new Map();
|
|
452
|
+
function ecsSnapshot(world, params) {
|
|
453
|
+
var _a;
|
|
454
|
+
const { label = `snap-${snapshots.size}` } = params;
|
|
455
|
+
// See comment in ecsFindEntities — indexLookup is internal to ELICS.
|
|
456
|
+
const lookup = world.entityManager.indexLookup;
|
|
457
|
+
const entities = [];
|
|
458
|
+
let componentCount = 0;
|
|
459
|
+
for (let i = 0; i < lookup.length; i++) {
|
|
460
|
+
const entity = lookup[i];
|
|
461
|
+
if (!entity || !entity.active) {
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
464
|
+
const comps = entity.getComponents();
|
|
465
|
+
const components = {};
|
|
466
|
+
for (const comp of comps) {
|
|
467
|
+
const values = {};
|
|
468
|
+
for (const key of Object.keys(comp.schema)) {
|
|
469
|
+
values[key] = serializeComponentValue(entity, comp, key, comp.schema[key]);
|
|
470
|
+
}
|
|
471
|
+
components[comp.id] = values;
|
|
472
|
+
componentCount++;
|
|
473
|
+
}
|
|
474
|
+
entities.push({
|
|
475
|
+
entityIndex: entity.index,
|
|
476
|
+
name: ((_a = entity.object3D) === null || _a === void 0 ? void 0 : _a.name) || undefined,
|
|
477
|
+
components,
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
const snapshot = {
|
|
481
|
+
label,
|
|
482
|
+
timestamp: performance.now(),
|
|
483
|
+
frame: debugState.frameCount,
|
|
484
|
+
entities,
|
|
485
|
+
};
|
|
486
|
+
// Evict oldest if at capacity
|
|
487
|
+
if (snapshots.size >= 2 && !snapshots.has(label)) {
|
|
488
|
+
const oldest = snapshots.keys().next().value;
|
|
489
|
+
snapshots.delete(oldest);
|
|
490
|
+
}
|
|
491
|
+
snapshots.set(label, snapshot);
|
|
492
|
+
return {
|
|
493
|
+
label,
|
|
494
|
+
entityCount: entities.length,
|
|
495
|
+
componentCount,
|
|
496
|
+
storedSnapshots: Array.from(snapshots.keys()),
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
function ecsDiff(_world, params) {
|
|
500
|
+
const { from, to } = params;
|
|
501
|
+
const snapFrom = snapshots.get(from);
|
|
502
|
+
const snapTo = snapshots.get(to);
|
|
503
|
+
if (!snapFrom) {
|
|
504
|
+
throw new Error(`Snapshot '${from}' not found. Stored: ${Array.from(snapshots.keys()).join(', ')}`);
|
|
505
|
+
}
|
|
506
|
+
if (!snapTo) {
|
|
507
|
+
throw new Error(`Snapshot '${to}' not found. Stored: ${Array.from(snapshots.keys()).join(', ')}`);
|
|
508
|
+
}
|
|
509
|
+
// Index by entityIndex
|
|
510
|
+
const fromMap = new Map(snapFrom.entities.map((e) => [e.entityIndex, e]));
|
|
511
|
+
const toMap = new Map(snapTo.entities.map((e) => [e.entityIndex, e]));
|
|
512
|
+
const diffs = [];
|
|
513
|
+
let added = 0, removed = 0, changed = 0;
|
|
514
|
+
// Check removed + changed
|
|
515
|
+
for (const [idx, fromEntity] of fromMap) {
|
|
516
|
+
const toEntity = toMap.get(idx);
|
|
517
|
+
if (!toEntity) {
|
|
518
|
+
diffs.push({
|
|
519
|
+
entityIndex: idx,
|
|
520
|
+
name: fromEntity.name,
|
|
521
|
+
status: 'removed',
|
|
522
|
+
});
|
|
523
|
+
removed++;
|
|
524
|
+
continue;
|
|
525
|
+
}
|
|
526
|
+
// Diff components
|
|
527
|
+
const compDiffs = [];
|
|
528
|
+
const allCompIds = new Set([
|
|
529
|
+
...Object.keys(fromEntity.components),
|
|
530
|
+
...Object.keys(toEntity.components),
|
|
531
|
+
]);
|
|
532
|
+
for (const compId of allCompIds) {
|
|
533
|
+
const fromComp = fromEntity.components[compId];
|
|
534
|
+
const toComp = toEntity.components[compId];
|
|
535
|
+
if (!fromComp) {
|
|
536
|
+
compDiffs.push({ componentId: compId, status: 'added' });
|
|
537
|
+
continue;
|
|
538
|
+
}
|
|
539
|
+
if (!toComp) {
|
|
540
|
+
compDiffs.push({ componentId: compId, status: 'removed' });
|
|
541
|
+
continue;
|
|
542
|
+
}
|
|
543
|
+
// Diff fields
|
|
544
|
+
const fieldDiffs = [];
|
|
545
|
+
for (const field of Object.keys(fromComp)) {
|
|
546
|
+
const fv = JSON.stringify(fromComp[field]);
|
|
547
|
+
const tv = JSON.stringify(toComp[field]);
|
|
548
|
+
if (fv !== tv) {
|
|
549
|
+
fieldDiffs.push({ field, from: fromComp[field], to: toComp[field] });
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
// Check for fields added in toComp
|
|
553
|
+
for (const field of Object.keys(toComp)) {
|
|
554
|
+
if (!(field in fromComp)) {
|
|
555
|
+
fieldDiffs.push({
|
|
556
|
+
field,
|
|
557
|
+
from: undefined,
|
|
558
|
+
to: toComp[field],
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
if (fieldDiffs.length > 0) {
|
|
563
|
+
compDiffs.push({
|
|
564
|
+
componentId: compId,
|
|
565
|
+
status: 'changed',
|
|
566
|
+
fields: fieldDiffs,
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
if (compDiffs.length > 0) {
|
|
571
|
+
diffs.push({
|
|
572
|
+
entityIndex: idx,
|
|
573
|
+
name: fromEntity.name,
|
|
574
|
+
status: 'changed',
|
|
575
|
+
components: compDiffs,
|
|
576
|
+
});
|
|
577
|
+
changed++;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
// Check added
|
|
581
|
+
for (const [idx, toEntity] of toMap) {
|
|
582
|
+
if (!fromMap.has(idx)) {
|
|
583
|
+
diffs.push({
|
|
584
|
+
entityIndex: idx,
|
|
585
|
+
name: toEntity.name,
|
|
586
|
+
status: 'added',
|
|
587
|
+
});
|
|
588
|
+
added++;
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
return {
|
|
592
|
+
from,
|
|
593
|
+
to,
|
|
594
|
+
frameDelta: snapTo.frame - snapFrom.frame,
|
|
595
|
+
timeDelta: snapTo.timestamp - snapFrom.timestamp,
|
|
596
|
+
entities: diffs,
|
|
597
|
+
summary: { added, removed, changed },
|
|
598
|
+
};
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
export { ecsDiff, ecsFindEntities, ecsListComponents, ecsListSystems, ecsPause, ecsQueryEntity, ecsResume, ecsSetComponent, ecsSnapshot, ecsStep, ecsToggleSystem, installDebugHook };
|
|
602
|
+
//# sourceMappingURL=ecs-debug-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecs-debug-tools.js","sources":["../../src/mcp/ecs-debug-tools.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
export { MCPRuntime } from './mcp-runtime.js';
|
|
8
|
+
export type { HierarchyNode, ObjectTransform } from './scene-tools.js';
|
|
9
|
+
export type { EcsPauseResult, EcsResumeResult, EcsStepParams, EcsStepResult, EcsQueryEntityParams, EcsQueryEntityResult, ComponentData, EcsFindEntitiesParams, EcsFindEntitiesResult, EntitySummary, SystemInfo, EcsListSystemsResult, ComponentInfo, EcsListComponentsResult, EcsToggleSystemParams, EcsToggleSystemResult, EcsSetComponentParams, EcsSetComponentResult, EcsSnapshot, EcsSnapshotParams, EcsSnapshotResult, EcsDiffParams, EcsDiffResult, } from './ecs-debug-tools.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACvE,YAAY,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import type { World } from '../ecs/world.js';
|
|
8
|
+
/**
|
|
9
|
+
* MCP Runtime for IWSDK that provides framework-specific tools.
|
|
10
|
+
* This is set on window.FRAMEWORK_MCP_RUNTIME during World.create()
|
|
11
|
+
* for the vite-plugin-dev to route requests to.
|
|
12
|
+
*
|
|
13
|
+
* @category Runtime
|
|
14
|
+
*/
|
|
15
|
+
export declare class MCPRuntime {
|
|
16
|
+
private world;
|
|
17
|
+
constructor(world: World);
|
|
18
|
+
/**
|
|
19
|
+
* Returns true if this runtime handles the given method.
|
|
20
|
+
* Used by vite-plugin-dev to route requests appropriately.
|
|
21
|
+
*/
|
|
22
|
+
handles(method: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Dispatch a method call. Returns result or throws an error.
|
|
25
|
+
* @param method - The MCP tool name (e.g., 'get_scene_hierarchy')
|
|
26
|
+
* @param params - Parameters passed to the tool
|
|
27
|
+
* @returns Promise resolving to the tool result
|
|
28
|
+
*/
|
|
29
|
+
dispatch(method: string, params: Record<string, unknown>): Promise<unknown>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=mcp-runtime.d.ts.map
|