sceneview-mcp 3.5.1 → 3.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/debug-issue.js +159 -12
- package/dist/extra-guides.js +539 -0
- package/dist/generate-scene.js +178 -36
- package/dist/guides.js +9 -9
- package/dist/index.js +15 -15
- package/dist/issues.js +132 -1
- package/dist/migrate-code.js +73 -5
- package/dist/migration.js +66 -2
- package/dist/platform-setup.js +49 -19
- package/dist/samples.js +683 -124
- package/dist/validator.js +97 -0
- package/llms.txt +1 -1
- package/package.json +2 -1
package/dist/validator.js
CHANGED
|
@@ -322,6 +322,103 @@ const RULES = [
|
|
|
322
322
|
return issues;
|
|
323
323
|
},
|
|
324
324
|
},
|
|
325
|
+
// ─── Multiple Engine instances ───────────────────────────────────────────
|
|
326
|
+
{
|
|
327
|
+
id: "performance/multiple-engines",
|
|
328
|
+
severity: "warning",
|
|
329
|
+
check(code, lines) {
|
|
330
|
+
const issues = [];
|
|
331
|
+
const engineCreations = findLines(lines, /rememberEngine\(\)|Engine\.create\(/);
|
|
332
|
+
if (engineCreations.length > 1) {
|
|
333
|
+
engineCreations.slice(1).forEach((line) => issues.push({
|
|
334
|
+
severity: "warning",
|
|
335
|
+
rule: "performance/multiple-engines",
|
|
336
|
+
message: "Multiple Engine instances detected. Each Engine allocates significant GPU memory. Use a single `rememberEngine()` at the top level and pass it to all Scene composables.",
|
|
337
|
+
line,
|
|
338
|
+
}));
|
|
339
|
+
}
|
|
340
|
+
return issues;
|
|
341
|
+
},
|
|
342
|
+
},
|
|
343
|
+
// ─── Model loaded in LaunchedEffect with wrong dispatcher ──────────────
|
|
344
|
+
{
|
|
345
|
+
id: "threading/model-in-launched-effect",
|
|
346
|
+
severity: "error",
|
|
347
|
+
check(code, lines) {
|
|
348
|
+
const issues = [];
|
|
349
|
+
// Detect modelLoader calls inside LaunchedEffect — should use rememberModelInstance instead
|
|
350
|
+
if (/LaunchedEffect/.test(code) && /modelLoader\.(createModel|loadModel)/.test(code)) {
|
|
351
|
+
findLines(lines, /modelLoader\.(createModel|loadModel)/).forEach((line) => issues.push({
|
|
352
|
+
severity: "error",
|
|
353
|
+
rule: "threading/model-in-launched-effect",
|
|
354
|
+
message: "Model loading inside `LaunchedEffect` is risky — if the coroutine runs on a background dispatcher, Filament will crash. Use `rememberModelInstance(modelLoader, path)` instead, which handles threading and lifecycle automatically.",
|
|
355
|
+
line,
|
|
356
|
+
}));
|
|
357
|
+
}
|
|
358
|
+
return issues;
|
|
359
|
+
},
|
|
360
|
+
},
|
|
361
|
+
// ─── rememberModelInstance without modelLoader ────────────────────────────
|
|
362
|
+
{
|
|
363
|
+
id: "api/remember-model-missing-loader",
|
|
364
|
+
severity: "error",
|
|
365
|
+
check(code, lines) {
|
|
366
|
+
const issues = [];
|
|
367
|
+
if (code.includes("rememberModelInstance") && !code.includes("modelLoader") && !code.includes("rememberModelLoader")) {
|
|
368
|
+
findLines(lines, /rememberModelInstance\(/).forEach((line) => issues.push({
|
|
369
|
+
severity: "error",
|
|
370
|
+
rule: "api/remember-model-missing-loader",
|
|
371
|
+
message: "`rememberModelInstance` requires a `ModelLoader`. Add `val modelLoader = rememberModelLoader(engine)` and pass it as the first parameter.",
|
|
372
|
+
line,
|
|
373
|
+
}));
|
|
374
|
+
}
|
|
375
|
+
return issues;
|
|
376
|
+
},
|
|
377
|
+
},
|
|
378
|
+
// ─── GLB path with leading slash ────────────────────────────────────────
|
|
379
|
+
{
|
|
380
|
+
id: "api/asset-path-leading-slash",
|
|
381
|
+
severity: "warning",
|
|
382
|
+
check(code, lines) {
|
|
383
|
+
const issues = [];
|
|
384
|
+
// Matches rememberModelInstance or loadModel with "/models/..." (leading slash)
|
|
385
|
+
const patterns = [
|
|
386
|
+
/rememberModelInstance\s*\([^,]+,\s*"\/[^"]+"/,
|
|
387
|
+
/loadModel\w*\s*\(\s*"\/[^"]+"/,
|
|
388
|
+
/createHDREnvironment\s*\(\s*"\/[^"]+"/,
|
|
389
|
+
];
|
|
390
|
+
for (const pat of patterns) {
|
|
391
|
+
findLines(lines, pat).forEach((line) => issues.push({
|
|
392
|
+
severity: "warning",
|
|
393
|
+
rule: "api/asset-path-leading-slash",
|
|
394
|
+
message: "Asset path starts with `/`. Android asset paths are relative to `src/main/assets/` — use `\"models/file.glb\"` without a leading slash.",
|
|
395
|
+
line,
|
|
396
|
+
}));
|
|
397
|
+
}
|
|
398
|
+
return issues;
|
|
399
|
+
},
|
|
400
|
+
},
|
|
401
|
+
// ─── Scene missing Modifier.fillMaxSize ─────────────────────────────────
|
|
402
|
+
{
|
|
403
|
+
id: "api/scene-zero-size",
|
|
404
|
+
severity: "info",
|
|
405
|
+
check(code, lines) {
|
|
406
|
+
const issues = [];
|
|
407
|
+
const sceneLines = findLines(lines, /\b(AR)?Scene\s*\(/);
|
|
408
|
+
sceneLines.forEach((line) => {
|
|
409
|
+
const block = lines.slice(line - 1, line + 5).join("\n");
|
|
410
|
+
if (!block.includes("fillMaxSize") && !block.includes("size") && !block.includes("height") && !block.includes("width")) {
|
|
411
|
+
issues.push({
|
|
412
|
+
severity: "info",
|
|
413
|
+
rule: "api/scene-zero-size",
|
|
414
|
+
message: "`Scene` / `ARScene` may have zero size without a `Modifier`. Add `modifier = Modifier.fillMaxSize()` to ensure the 3D view is visible.",
|
|
415
|
+
line,
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
});
|
|
419
|
+
return issues;
|
|
420
|
+
},
|
|
421
|
+
},
|
|
325
422
|
// ─── Scene missing engine param ───────────────────────────────────────────
|
|
326
423
|
{
|
|
327
424
|
id: "api/scene-missing-engine",
|
package/llms.txt
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
SceneView is a declarative 3D and AR SDK for Android (Jetpack Compose, Filament, ARCore) and Apple platforms — iOS, macOS, visionOS (SwiftUI, RealityKit, ARKit) — with shared core logic via Kotlin Multiplatform. Each platform uses its native renderer: Filament on Android, RealityKit on Apple.
|
|
4
4
|
|
|
5
|
-
**Android — Maven artifacts (version 3.
|
|
5
|
+
**Android — Maven artifacts (version 3.4.7):**
|
|
6
6
|
- 3D only: `io.github.sceneview:sceneview:3.4.7`
|
|
7
7
|
- AR + 3D: `io.github.sceneview:arsceneview:3.4.7`
|
|
8
8
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sceneview-mcp",
|
|
3
|
-
"version": "3.5.
|
|
3
|
+
"version": "3.5.2",
|
|
4
4
|
"mcpName": "io.github.sceneview/mcp",
|
|
5
5
|
"description": "MCP server for SceneView — cross-platform 3D & AR SDK for Android and iOS. Give Claude the full SceneView SDK so it writes correct, compilable code.",
|
|
6
6
|
"keywords": [
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"dist/debug-issue.js",
|
|
52
52
|
"dist/generate-scene.js",
|
|
53
53
|
"dist/advanced-guides.js",
|
|
54
|
+
"dist/extra-guides.js",
|
|
54
55
|
"llms.txt"
|
|
55
56
|
],
|
|
56
57
|
"engines": {
|