feat(web): switch to implementation-first capability wave
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

This commit is contained in:
mes123456
2026-08-29 01:22:03 +08:00
parent 5fb12cd6a5
commit 7549b9a15c
159 changed files with 14110 additions and 74 deletions

View File

@@ -11,6 +11,7 @@ import { normalizeProjectAssetPath } from "../../../protocol/asset-path";
import { cloneMeshGeometryBuffers, diffMeshGeometryBuffers } from "../../../protocol/mesh-geometry-delta";
import { gateSculptCapability, parseSculptMeshAttributes, parseSculptStroke } from "../../../protocol/sculpt";
import { gateGeometryNodeGraph } from "../../../protocol/geometry-nodes";
import { parsePhysicsSimulationManifest } from "../../../protocol/physics-simulation";
import { gateShaderGraph } from "../../../protocol/shader-graph";
import { compileShaderGraph, type ShaderCompileReport } from "../../../protocol/shader-compiler";
import { gateNlaTracks, moveNlaStrip } from "../../../protocol/nla";
@@ -566,7 +567,17 @@ function assertFutureCapability(payload: Extract<WebEngineRequest["command"], {
const ownerObjectId = snapshot?.nodes.find((node) => node.dataId === payload.meshId)?.id;
const gate = gateGeometryNodeGraph(payload.graph, { availableResourceIds, blockedResourceIds, ownerObjectId });
if (gate.status === "BLOCKED") rejectCapabilityGate(gate);
throw report("CAPABILITY_MISSING", "N-012 Geometry Nodes evaluator is not enabled in the WebEngine Main writer");
return;
}
case "setPhysicsSimulation": {
try {
parsePhysicsSimulationManifest(payload.manifest);
return;
}
catch (error) {
reportProtocolError(error, "PHYSICS_MANIFEST_INVALID");
}
return;
}
case "setShaderGraph": {
const gate = gateShaderGraph(payload.graph, {