@ue-shed/protocol 0.5.0 → 0.6.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/contracts/cameras/map-tile/v1/README.md +20 -6
- package/contracts/cameras/map-tile/v1/capture-operation.schema.json +69 -0
- package/contracts/cameras/map-tile/v1/capture-request.schema.json +2 -1
- package/contracts/cameras/map-tile/v1/fixtures/capture-operation-finished-valid.json +41 -0
- package/contracts/cameras/map-tile/v1/fixtures/capture-operation-progress-valid.json +13 -0
- package/contracts/cameras/map-tile/v1/fixtures/capture-operation-running-valid.json +5 -0
- package/contracts/cameras/map-tile/v1/fixtures/capture-request-lit-valid.json +59 -0
- package/contracts/cameras/map-tile/v1/fixtures/readiness-blocked.json +11 -0
- package/contracts/cameras/map-tile/v1/fixtures/readiness-ready.json +7 -0
- package/contracts/cameras/map-tile/v1/fixtures/selection-ready.json +21 -0
- package/contracts/cameras/map-tile/v1/fixtures/selection-unavailable.json +6 -0
- package/contracts/cameras/map-tile/v1/inspection.md +16 -0
- package/contracts/cameras/map-tile/v1/plan.schema.json +1 -0
- package/contracts/cameras/map-tile/v1/readiness.schema.json +39 -0
- package/contracts/cameras/map-tile/v1/selection.schema.json +105 -0
- package/contracts/cameras/review/v1/README.md +9 -1
- package/contracts/cameras/review/v1/capture-request.schema.json +54 -5
- package/contracts/cameras/review/v1/capture-response.schema.json +80 -5
- package/contracts/cameras/review/v1/fixtures/capture-guid.json +53 -0
- package/contracts/cameras/review/v1/fixtures/capture-request-guid-valid.json +28 -0
- package/contracts/cameras/review/v1/fixtures/invalid-capture-request-alternate-actor-guid.json +23 -0
- package/contracts/cameras/review/v1/fixtures/invalid-capture-request-clear-before-minor-4.json +26 -0
- package/contracts/cameras/review/v1/fixtures/invalid-capture-request-empty-diagnostic-label.json +24 -0
- package/contracts/cameras/review/v1/fixtures/invalid-capture-request-future-minor.json +26 -0
- package/contracts/cameras/review/v1/fixtures/invalid-capture-request-guid-before-minor-5.json +26 -0
- package/contracts/cameras/review/v1/fixtures/invalid-capture-request-malformed-last-known-path.json +24 -0
- package/contracts/cameras/review/v1/fixtures/invalid-capture-request-nil-actor-guid.json +23 -0
- package/contracts/cameras/review/v1/fixtures/invalid-capture-request-nil-operation-id.json +23 -0
- package/contracts/cameras/review/v1/fixtures/selection-selected.json +2 -1
- package/contracts/cameras/review/v1/selection-response.schema.json +5 -0
- package/contracts/core/v1/producer-identity.schema.json +44 -0
- package/contracts/niagara/preview/v1/common.schema.json +224 -30
- package/contracts/niagara/preview/v1/fixtures/background-manifest.json +136 -0
- package/contracts/niagara/preview/v1/fixtures/background-receipt.json +112 -0
- package/contracts/niagara/preview/v1/fixtures/background-request.json +39 -0
- package/contracts/niagara/preview/v1/fixtures/progress.json +8 -0
- package/contracts/niagara/preview/v1/fixtures/scene-manifest.json +108 -0
- package/contracts/niagara/preview/v1/fixtures/scene-receipt.json +84 -0
- package/contracts/niagara/preview/v1/fixtures/scene-request.json +25 -0
- package/contracts/niagara/preview/v1/manifest.schema.json +110 -25
- package/contracts/niagara/preview/v1/progress.schema.json +37 -0
- package/contracts/niagara/preview/v1/receipt.schema.json +75 -16
- package/contracts/niagara/preview/v1/request.schema.json +20 -5
- package/contracts/niagara/preview/v1/session.md +25 -0
- package/contracts/observatory/v1/actor-metadata.schema.json +33 -0
- package/contracts/uasset-io/v1/README.md +26 -1
- package/contracts/uasset-io/v1/event.schema.json +511 -1
- package/contracts/uasset-io/v1/fixtures/invalid/project-index-count-empty-filters.json +23 -0
- package/contracts/uasset-io/v1/fixtures/invalid/project-index-dictionary-page-negative-index.json +35 -0
- package/contracts/uasset-io/v1/fixtures/valid/blueprint-request.json +6 -0
- package/contracts/uasset-io/v1/fixtures/valid/blueprint-result-event.json +58 -0
- package/contracts/uasset-io/v1/fixtures/valid/project-index-count-request.json +32 -0
- package/contracts/uasset-io/v1/fixtures/valid/project-index-count-result-event.json +20 -0
- package/contracts/uasset-io/v1/fixtures/valid/project-index-dictionary-page-result-event.json +35 -0
- package/contracts/uasset-io/v1/fixtures/valid/project-index-dictionary-query-request.json +26 -0
- package/contracts/uasset-io/v1/request.schema.json +174 -0
- package/dist/authoring-review.d.ts +36 -36
- package/dist/authoring.d.ts +45 -45
- package/dist/authoring.d.ts.map +1 -1
- package/dist/blueprint-graph.d.ts +628 -0
- package/dist/blueprint-graph.d.ts.map +1 -0
- package/dist/blueprint-graph.js +111 -0
- package/dist/blueprint-graph.js.map +1 -0
- package/dist/companion.d.ts +34 -3
- package/dist/companion.d.ts.map +1 -1
- package/dist/companion.js +11 -0
- package/dist/companion.js.map +1 -1
- package/dist/editor-asset-navigation.d.ts +12 -12
- package/dist/editor-play-session.d.ts +6 -6
- package/dist/editor-world-control.d.ts +8 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/saved-world.d.ts +20 -14
- package/dist/saved-world.d.ts.map +1 -1
- package/dist/saved-world.js +1 -0
- package/dist/saved-world.js.map +1 -1
- package/dist/uasset-inspection.d.ts +6 -5
- package/dist/uasset-inspection.d.ts.map +1 -1
- package/dist/uasset-inspection.js +1 -1
- package/dist/uasset-inspection.js.map +1 -1
- package/dist/uasset-io.d.ts +648 -129
- package/dist/uasset-io.d.ts.map +1 -1
- package/dist/uasset-io.js +51 -1
- package/dist/uasset-io.js.map +1 -1
- package/package.json +1 -1
|
@@ -14,14 +14,28 @@ capture Z does not define detail. The editor renders `gutterPixels` beyond each
|
|
|
14
14
|
units-per-pixel and crops back to `tilePixelSize` before PNG encoding. Consumers use clamp-to-edge
|
|
15
15
|
sampling inside each published tile.
|
|
16
16
|
|
|
17
|
-
`captureBackend` is an optional execution hint, not part of the portable plan.
|
|
18
|
-
`
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
`captureBackend` is an optional execution hint, not part of the portable plan. The default is
|
|
18
|
+
`lit_camera_tiles`, requiring `cameras.lit-map-tile-capture.v1` and an unlocked rendering editor
|
|
19
|
+
viewport. It accepts `full_fidelity` with natural LOD. `overviewBounds` supplies the complete run's
|
|
20
|
+
framing for shared exposure calibration; when omitted the first batch's extent is used. Optional
|
|
21
|
+
`capture.render.exposureEV100` pins the camera exposure range instead of calibrating automatically.
|
|
22
|
+
|
|
23
|
+
Call `BeginMapTileCapture(RequestJson)` to start a batch, then
|
|
24
|
+
`PollMapTileCapture(RunId, OperationId)` until `capture-operation.schema.json` reports `finished`.
|
|
25
|
+
The terminal `response` uses the existing capture-response schema. Polling renews a 120-second
|
|
26
|
+
inactivity lease. A run retains viewport, exposure, and scene-freeze ownership between batches;
|
|
27
|
+
call `EndMapTileCapture(RunId)` in a finalizer on success, failure, and cancellation. End returns
|
|
28
|
+
`{ "released": boolean }`; an unrelated run ID cannot release the owner. Only one batch runs at a
|
|
29
|
+
time, and a run's map and capture policy cannot change between batches.
|
|
30
|
+
|
|
31
|
+
Explicit `scene_capture_tiles` and `viewport_high_resolution` use the synchronous `CaptureMapTiles`
|
|
32
|
+
operation. The latter requires one complete zoom level of at most 64 tiles. The former retains
|
|
33
|
+
SceneCapture profiles and per-level LOD distance scales. Both reject manual exposure rather than
|
|
34
|
+
silently ignoring it. Synchronous `CaptureMapTiles` rejects the default Lit backend and directs
|
|
35
|
+
clients to the asynchronous lifecycle.
|
|
22
36
|
|
|
23
37
|
The editor accepts no output path. It stages only below `Saved/UEShed/MapTileStaging`, reports every
|
|
24
|
-
tile outcome and map package dirty state, and restores transient state
|
|
38
|
+
tile outcome and map package dirty state, and restores transient state when run ownership ends. The host
|
|
25
39
|
must validate staging containment, hash artifacts, and atomically publish only a manifest whose
|
|
26
40
|
state is `complete` and whose tile inventory is exhaustive. Partial and cancelled attempts remain
|
|
27
41
|
diagnostic evidence and are never discoverable as completed runs.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://ue-shed.dev/contracts/cameras/map-tile/v1/capture-operation.schema.json",
|
|
4
|
+
"title": "UE Shed asynchronous map tile operation v1",
|
|
5
|
+
"oneOf": [
|
|
6
|
+
{
|
|
7
|
+
"type": "object",
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"required": ["state", "operationId", "completedTiles"],
|
|
10
|
+
"properties": {
|
|
11
|
+
"state": {
|
|
12
|
+
"const": "running"
|
|
13
|
+
},
|
|
14
|
+
"operationId": {
|
|
15
|
+
"$ref": "plan.schema.json#/$defs/id"
|
|
16
|
+
},
|
|
17
|
+
"completedTiles": {
|
|
18
|
+
"type": "integer",
|
|
19
|
+
"minimum": 0,
|
|
20
|
+
"maximum": 64
|
|
21
|
+
},
|
|
22
|
+
"phase": {
|
|
23
|
+
"enum": ["exposure_warmup", "tile_warmup", "capturing"]
|
|
24
|
+
},
|
|
25
|
+
"elapsedMs": {
|
|
26
|
+
"type": "number",
|
|
27
|
+
"minimum": 0
|
|
28
|
+
},
|
|
29
|
+
"totalTiles": {
|
|
30
|
+
"type": "integer",
|
|
31
|
+
"minimum": 0,
|
|
32
|
+
"maximum": 64
|
|
33
|
+
},
|
|
34
|
+
"currentTile": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"additionalProperties": false,
|
|
37
|
+
"required": ["zoom", "row", "column"],
|
|
38
|
+
"properties": {
|
|
39
|
+
"zoom": {
|
|
40
|
+
"type": "integer",
|
|
41
|
+
"minimum": 0
|
|
42
|
+
},
|
|
43
|
+
"row": {
|
|
44
|
+
"type": "integer",
|
|
45
|
+
"minimum": 0
|
|
46
|
+
},
|
|
47
|
+
"column": {
|
|
48
|
+
"type": "integer",
|
|
49
|
+
"minimum": 0
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"type": "object",
|
|
57
|
+
"additionalProperties": false,
|
|
58
|
+
"required": ["state", "response"],
|
|
59
|
+
"properties": {
|
|
60
|
+
"state": {
|
|
61
|
+
"const": "finished"
|
|
62
|
+
},
|
|
63
|
+
"response": {
|
|
64
|
+
"$ref": "capture-response.schema.json"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
@@ -19,8 +19,9 @@
|
|
|
19
19
|
"properties": {
|
|
20
20
|
"capture": { "$ref": "plan.schema.json#/$defs/capturePolicy" },
|
|
21
21
|
"captureBackend": {
|
|
22
|
-
"enum": ["scene_capture_tiles", "viewport_high_resolution"]
|
|
22
|
+
"enum": ["lit_camera_tiles", "scene_capture_tiles", "viewport_high_resolution"]
|
|
23
23
|
},
|
|
24
|
+
"overviewBounds": { "$ref": "plan.schema.json#/$defs/bounds" },
|
|
24
25
|
"contract": {
|
|
25
26
|
"type": "object",
|
|
26
27
|
"additionalProperties": false,
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"state": "finished",
|
|
3
|
+
"response": {
|
|
4
|
+
"actualMapPath": "/Game/Fixture/Cameras/L_CameraLoad",
|
|
5
|
+
"contract": {
|
|
6
|
+
"name": "ue-shed-map-tile-capture",
|
|
7
|
+
"version": {
|
|
8
|
+
"major": 1,
|
|
9
|
+
"minor": 0
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"correlationId": "fixture-correlation",
|
|
13
|
+
"dirtyState": {
|
|
14
|
+
"before": false,
|
|
15
|
+
"after": false
|
|
16
|
+
},
|
|
17
|
+
"durationMs": 27.5,
|
|
18
|
+
"operationId": "fixture-operation",
|
|
19
|
+
"results": [
|
|
20
|
+
{
|
|
21
|
+
"bytes": 1234,
|
|
22
|
+
"captureDurationMs": 20.25,
|
|
23
|
+
"height": 256,
|
|
24
|
+
"key": {
|
|
25
|
+
"zoom": 0,
|
|
26
|
+
"row": 0,
|
|
27
|
+
"column": 0
|
|
28
|
+
},
|
|
29
|
+
"stagedPath": "C:/Project/Saved/UEShed/MapTileStaging/fixture-run/Z00/R000_C000.png",
|
|
30
|
+
"status": "captured",
|
|
31
|
+
"width": 256
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"status": "completed",
|
|
35
|
+
"tileCounts": {
|
|
36
|
+
"failed": 0,
|
|
37
|
+
"requested": 1,
|
|
38
|
+
"succeeded": 1
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"capture": {
|
|
3
|
+
"dataLayers": {
|
|
4
|
+
"mode": "unchanged"
|
|
5
|
+
},
|
|
6
|
+
"orientation": {
|
|
7
|
+
"pitch": -90,
|
|
8
|
+
"roll": 0,
|
|
9
|
+
"yaw": 0
|
|
10
|
+
},
|
|
11
|
+
"render": {
|
|
12
|
+
"effects": {
|
|
13
|
+
"fog": false,
|
|
14
|
+
"volumetricFog": false
|
|
15
|
+
},
|
|
16
|
+
"lodPolicy": "natural",
|
|
17
|
+
"profile": "full_fidelity",
|
|
18
|
+
"exposureEV100": -5
|
|
19
|
+
},
|
|
20
|
+
"z": 5000
|
|
21
|
+
},
|
|
22
|
+
"captureBackend": "lit_camera_tiles",
|
|
23
|
+
"contract": {
|
|
24
|
+
"name": "ue-shed-map-tile-capture",
|
|
25
|
+
"version": {
|
|
26
|
+
"major": 1,
|
|
27
|
+
"minor": 0
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"correlationId": "fixture-correlation",
|
|
31
|
+
"expectedMapPath": "/Game/Fixture/Cameras/L_CameraLoad",
|
|
32
|
+
"gutterPixels": 2,
|
|
33
|
+
"operationId": "fixture-operation",
|
|
34
|
+
"planId": "fixture-overview",
|
|
35
|
+
"runId": "fixture-run",
|
|
36
|
+
"tilePixelSize": 256,
|
|
37
|
+
"tiles": [
|
|
38
|
+
{
|
|
39
|
+
"key": {
|
|
40
|
+
"zoom": 0,
|
|
41
|
+
"row": 0,
|
|
42
|
+
"column": 0
|
|
43
|
+
},
|
|
44
|
+
"unitsPerPixel": 4,
|
|
45
|
+
"worldBounds": {
|
|
46
|
+
"minX": 1024,
|
|
47
|
+
"minY": -1024,
|
|
48
|
+
"maxX": 2048,
|
|
49
|
+
"maxY": 0
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"overviewBounds": {
|
|
54
|
+
"minX": 1024,
|
|
55
|
+
"minY": -1024,
|
|
56
|
+
"maxX": 2048,
|
|
57
|
+
"maxY": 0
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"status": "ready",
|
|
4
|
+
"mapPath": "/Game/Fixture/Map",
|
|
5
|
+
"bounds": {
|
|
6
|
+
"minX": -100,
|
|
7
|
+
"maxX": 100,
|
|
8
|
+
"minY": 50,
|
|
9
|
+
"maxY": 250,
|
|
10
|
+
"minZ": 0,
|
|
11
|
+
"maxZ": 400
|
|
12
|
+
},
|
|
13
|
+
"actors": [
|
|
14
|
+
{
|
|
15
|
+
"path": "/Game/Fixture/Map.A",
|
|
16
|
+
"label": "A",
|
|
17
|
+
"actorGuid": "00000001000000020000000300000004"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"skippedActorPaths": []
|
|
21
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Capture inspection v1
|
|
2
|
+
|
|
3
|
+
`InspectMapCaptureSelection` requires `cameras.capture-selection.v1`. It reads selection in the
|
|
4
|
+
current editor world, rejects PIE and selections outside 1–1024 actors, and combines finite component
|
|
5
|
+
bounds. `skippedActorPaths` identifies actors without usable bounds or in another world. Ready bounds
|
|
6
|
+
must satisfy min <= max on every axis; planar/point selections are valid. Host plan fitting supplies
|
|
7
|
+
positive XY extent. The operation neither modifies selection nor loads additional regions.
|
|
8
|
+
|
|
9
|
+
`InspectMapCaptureReadiness(ExpectedMapPath)` requires `cameras.capture-readiness.v1` and applies to
|
|
10
|
+
Lit capture. `ready` is true exactly when `blockers` is empty. It checks map identity, rendering,
|
|
11
|
+
streaming, viewport locking/overrides, screenshot use, PIE and capture ownership. It does not reserve
|
|
12
|
+
resources, load regions, or guarantee visual completeness. Capture execution repeats shared checks.
|
|
13
|
+
|
|
14
|
+
The running operation's optional phase/elapsed/count/current-tile fields are telemetry for the current
|
|
15
|
+
batch. `currentTile` is absent during whole-map exposure warmup. Existing responses without these
|
|
16
|
+
fields remain valid. Terminal responses and publication rules are unchanged.
|
|
@@ -130,6 +130,7 @@
|
|
|
130
130
|
"additionalProperties": false,
|
|
131
131
|
"required": ["effects", "lodPolicy", "profile"],
|
|
132
132
|
"properties": {
|
|
133
|
+
"exposureEV100": { "type": "number", "minimum": -20, "maximum": 30 },
|
|
133
134
|
"effects": {
|
|
134
135
|
"type": "object",
|
|
135
136
|
"additionalProperties": false,
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["schemaVersion", "backend", "ready", "blockers"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"schemaVersion": {
|
|
8
|
+
"const": 1
|
|
9
|
+
},
|
|
10
|
+
"backend": {
|
|
11
|
+
"const": "lit_camera_tiles"
|
|
12
|
+
},
|
|
13
|
+
"ready": {
|
|
14
|
+
"type": "boolean"
|
|
15
|
+
},
|
|
16
|
+
"actualMapPath": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"minLength": 1
|
|
19
|
+
},
|
|
20
|
+
"blockers": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"items": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"additionalProperties": false,
|
|
25
|
+
"required": ["code", "message"],
|
|
26
|
+
"properties": {
|
|
27
|
+
"code": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"minLength": 1
|
|
30
|
+
},
|
|
31
|
+
"message": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"minLength": 1
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"oneOf": [
|
|
4
|
+
{
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"status",
|
|
10
|
+
"mapPath",
|
|
11
|
+
"bounds",
|
|
12
|
+
"actors",
|
|
13
|
+
"skippedActorPaths"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"schemaVersion": {
|
|
17
|
+
"const": 1
|
|
18
|
+
},
|
|
19
|
+
"status": {
|
|
20
|
+
"const": "ready"
|
|
21
|
+
},
|
|
22
|
+
"mapPath": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"minLength": 1
|
|
25
|
+
},
|
|
26
|
+
"bounds": {
|
|
27
|
+
"type": "object",
|
|
28
|
+
"additionalProperties": false,
|
|
29
|
+
"required": ["minX", "maxX", "minY", "maxY", "minZ", "maxZ"],
|
|
30
|
+
"properties": {
|
|
31
|
+
"minX": {
|
|
32
|
+
"type": "number"
|
|
33
|
+
},
|
|
34
|
+
"maxX": {
|
|
35
|
+
"type": "number"
|
|
36
|
+
},
|
|
37
|
+
"minY": {
|
|
38
|
+
"type": "number"
|
|
39
|
+
},
|
|
40
|
+
"maxY": {
|
|
41
|
+
"type": "number"
|
|
42
|
+
},
|
|
43
|
+
"minZ": {
|
|
44
|
+
"type": "number"
|
|
45
|
+
},
|
|
46
|
+
"maxZ": {
|
|
47
|
+
"type": "number"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"actors": {
|
|
52
|
+
"type": "array",
|
|
53
|
+
"items": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"additionalProperties": false,
|
|
56
|
+
"required": ["path", "label"],
|
|
57
|
+
"properties": {
|
|
58
|
+
"path": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"minLength": 1
|
|
61
|
+
},
|
|
62
|
+
"label": {
|
|
63
|
+
"type": "string"
|
|
64
|
+
},
|
|
65
|
+
"actorGuid": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"pattern": "^[0-9A-Fa-f]{32}$"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"minItems": 1,
|
|
72
|
+
"maxItems": 1024
|
|
73
|
+
},
|
|
74
|
+
"skippedActorPaths": {
|
|
75
|
+
"type": "array",
|
|
76
|
+
"items": {
|
|
77
|
+
"type": "string"
|
|
78
|
+
},
|
|
79
|
+
"maxItems": 1024
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"type": "object",
|
|
85
|
+
"additionalProperties": false,
|
|
86
|
+
"required": ["schemaVersion", "status", "code", "message"],
|
|
87
|
+
"properties": {
|
|
88
|
+
"schemaVersion": {
|
|
89
|
+
"const": 1
|
|
90
|
+
},
|
|
91
|
+
"status": {
|
|
92
|
+
"const": "unavailable"
|
|
93
|
+
},
|
|
94
|
+
"code": {
|
|
95
|
+
"type": "string",
|
|
96
|
+
"minLength": 1
|
|
97
|
+
},
|
|
98
|
+
"message": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"minLength": 1
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
}
|
|
@@ -17,7 +17,15 @@ visibility measurement: the plugin reports what it observed and does not assign
|
|
|
17
17
|
original engine-produced classification. Minor version 4 adds one optional Clear companion to the
|
|
18
18
|
same capture operation. Its request carries only an effective producer instruction (`isolate_target`
|
|
19
19
|
or bounded `hide_explicit` actor paths); consumer policy, thresholds, and presentation remain
|
|
20
|
-
outside the wire contract.
|
|
20
|
+
outside the wire contract. Minor version 5 adds the durable `actor_guid` subject locator. The GUID
|
|
21
|
+
is Unreal's authored actor GUID (`FGuid::UniqueObjectGuid`); a last-known actor path is diagnostic
|
|
22
|
+
evidence only and is never used as an identity fallback.
|
|
23
|
+
|
|
24
|
+
Producers accept every complete, schema-valid 1.x request through the highest minor they advertise.
|
|
25
|
+
They echo the accepted request minor in both success and failure responses. Missing, fractional,
|
|
26
|
+
negative, or future minors; unknown major versions; minor-feature contradictions; and excess fields
|
|
27
|
+
are rejected deterministically. Once a request supplies an operation ID and view ID, a structured
|
|
28
|
+
failure retains those identities even when contract negotiation fails.
|
|
21
29
|
|
|
22
30
|
The editor resolves an actor-relative pose atomically from the actor's current transform. Its
|
|
23
31
|
response records the resolved target, exact effective world pose, projection, bounded visibility
|
|
@@ -18,23 +18,53 @@
|
|
|
18
18
|
"required": ["major", "minor"],
|
|
19
19
|
"properties": {
|
|
20
20
|
"major": { "const": 1 },
|
|
21
|
-
"minor": { "type": "integer", "minimum": 0, "maximum":
|
|
21
|
+
"minor": { "type": "integer", "minimum": 0, "maximum": 5 }
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
|
-
"operationId": {
|
|
26
|
+
"operationId": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"format": "uuid",
|
|
29
|
+
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
|
|
30
|
+
"not": { "const": "00000000-0000-0000-0000-000000000000" }
|
|
31
|
+
},
|
|
27
32
|
"viewId": { "$ref": "#/$defs/safeId" },
|
|
28
33
|
"expectedMapPath": { "type": "string", "minLength": 1 },
|
|
29
34
|
"subject": {
|
|
30
35
|
"oneOf": [
|
|
36
|
+
{
|
|
37
|
+
"type": "object",
|
|
38
|
+
"additionalProperties": false,
|
|
39
|
+
"required": ["kind", "actorGuid"],
|
|
40
|
+
"properties": {
|
|
41
|
+
"kind": { "const": "actor_guid" },
|
|
42
|
+
"actorGuid": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"pattern": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{8}){3}$",
|
|
45
|
+
"not": { "const": "00000000-00000000-00000000-00000000" }
|
|
46
|
+
},
|
|
47
|
+
"lastKnownActorPath": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"minLength": 7,
|
|
50
|
+
"maxLength": 4096,
|
|
51
|
+
"pattern": "^/Game/"
|
|
52
|
+
},
|
|
53
|
+
"diagnosticLabel": { "type": "string", "minLength": 1 }
|
|
54
|
+
}
|
|
55
|
+
},
|
|
31
56
|
{
|
|
32
57
|
"type": "object",
|
|
33
58
|
"additionalProperties": false,
|
|
34
59
|
"required": ["kind", "actorPath"],
|
|
35
60
|
"properties": {
|
|
36
61
|
"kind": { "const": "actor_path" },
|
|
37
|
-
"actorPath": {
|
|
62
|
+
"actorPath": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"minLength": 7,
|
|
65
|
+
"maxLength": 4096,
|
|
66
|
+
"pattern": "^/Game/"
|
|
67
|
+
},
|
|
38
68
|
"diagnosticLabel": { "type": "string", "minLength": 1 }
|
|
39
69
|
}
|
|
40
70
|
},
|
|
@@ -80,7 +110,7 @@
|
|
|
80
110
|
"properties": {
|
|
81
111
|
"contract": {
|
|
82
112
|
"properties": {
|
|
83
|
-
"version": { "properties": { "minor": { "enum": [2, 3, 4] } } }
|
|
113
|
+
"version": { "properties": { "minor": { "enum": [2, 3, 4, 5] } } }
|
|
84
114
|
}
|
|
85
115
|
}
|
|
86
116
|
}
|
|
@@ -93,13 +123,32 @@
|
|
|
93
123
|
"properties": {
|
|
94
124
|
"contract": {
|
|
95
125
|
"properties": {
|
|
96
|
-
"version": { "properties": { "minor": { "
|
|
126
|
+
"version": { "properties": { "minor": { "enum": [4, 5] } } }
|
|
97
127
|
}
|
|
98
128
|
}
|
|
99
129
|
}
|
|
100
130
|
},
|
|
101
131
|
"then": { "required": ["clearCompanion"] },
|
|
102
132
|
"else": { "not": { "required": ["clearCompanion"] } }
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"if": {
|
|
136
|
+
"properties": {
|
|
137
|
+
"subject": {
|
|
138
|
+
"required": ["kind"],
|
|
139
|
+
"properties": { "kind": { "const": "actor_guid" } }
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"then": {
|
|
144
|
+
"properties": {
|
|
145
|
+
"contract": {
|
|
146
|
+
"properties": {
|
|
147
|
+
"version": { "properties": { "minor": { "const": 5 } } }
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
103
152
|
}
|
|
104
153
|
],
|
|
105
154
|
"$defs": {
|