Add UI Toolkit capture request contract

This commit is contained in:
Meta Vens 2026-07-10 08:20:17 +01:00
commit b1ed4c470d
2 changed files with 45 additions and 1 deletions

View file

@ -207,7 +207,8 @@
"publishProof": "Unity editor or batchmode capture artifact is attached to the runtime conformance report from EveUnity."
},
"evidencePaths": [
"packages/org.gamecult.eve.unity-uitoolkit/eve-runtime-capability.json"
"packages/org.gamecult.eve.unity-uitoolkit/eve-runtime-capability.json",
"scripts/build-uitoolkit-capture-request.ps1"
],
"pendingProofs": [
"Unity batchmode or editor capture artifact attached to the runtime conformance report."

View file

@ -0,0 +1,43 @@
param(
[Parameter(Mandatory = $true)]
[string] $AdvertisementPath,
[string] $SurfaceId = "",
[string] $OutputPath = "artifacts\uitoolkit-capture\request.json",
[string] $Stamp = "latest"
)
$ErrorActionPreference = "Stop"
$repoRoot = Split-Path -Parent $PSScriptRoot
$capabilityPath = Join-Path $repoRoot "packages\org.gamecult.eve.unity-uitoolkit\eve-runtime-capability.json"
$capability = Get-Content -Raw $capabilityPath | ConvertFrom-Json
$advertisement = Get-Content -Raw $AdvertisementPath | ConvertFrom-Json
$contract = $capability.lifecycle.capture.captureContract
$surface = @($advertisement.surfaces) | Where-Object {
([string]::IsNullOrWhiteSpace($SurfaceId) -or $_.surfaceId -eq $SurfaceId) -and
@($_.worldInteraction.loweringTargets) -contains $contract.targetId
} | Select-Object -First 1
if ($null -eq $surface) {
throw "Provider does not advertise a $($contract.targetId) surface: $SurfaceId"
}
$absoluteOutput = if ([IO.Path]::IsPathRooted($OutputPath)) { $OutputPath } else { Join-Path $repoRoot $OutputPath }
$request = [ordered]@{
schema = $contract.requestSchema
ownerRepo = $contract.ownerRepo
runtimeId = $contract.runtimeId
targetId = $contract.targetId
providerId = $advertisement.providerId
surfaceId = $surface.surfaceId
projectionKind = $surface.worldInteraction.projectionKind
commandBoundary = $surface.worldInteraction.commandBoundary
receiptSchema = $surface.worldInteraction.receiptSchema
captureKind = $contract.captureKind
artifactKind = $contract.artifactKind
artifactPath = $contract.artifactPattern.Replace('{stamp}', $Stamp)
sourceAdvertisementPath = $AdvertisementPath
}
New-Item -ItemType Directory -Force -Path (Split-Path -Parent $absoluteOutput) | Out-Null
$request | ConvertTo-Json -Depth 16 | Set-Content -LiteralPath $absoluteOutput
Write-Host $absoluteOutput