$ErrorActionPreference = 'Stop' $ProgressPreference = 'SilentlyContinue' $root = 'D:\NDC_MISSIONCORE\runtime\simulation\assets\jetbot-6.1-v1' $origin = 'https://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/Isaac/6.1/Isaac/Robots_Multiphysics/NVIDIA/Jetbot/' $files = @('jetbot.usda', 'payloads/base.usda', 'payloads/instances.usda', 'payloads/robot.usda', 'payloads/materials.usda', 'payloads/geometries.usd', 'payloads/Physics/physics.usda', 'payloads/Physics/physx.usda') $manifest = Join-Path $root 'asset-manifest.json' if (Test-Path $manifest) { $existing = Get-Content $manifest -Raw | ConvertFrom-Json foreach ($file in $existing.files) { if ((Get-FileHash (Join-Path $root $file.path) -Algorithm SHA256).Hash.ToLower() -ne $file.sha256) { throw 'Prepared Jetbot asset changed' } } Get-Content $manifest exit 0 } New-Item -ItemType Directory $root -Force | Out-Null $rows = @() $total = 0 foreach ($relative in $files) { $target = Join-Path $root $relative New-Item -ItemType Directory (Split-Path $target) -Force | Out-Null if (!(Test-Path $target)) { & curl.exe --fail --silent --show-error --location --connect-timeout 10 --max-time 180 --max-filesize 536870912 --retry 2 --continue-at - --output "$target.part" ($origin + $relative) if ($LASTEXITCODE -ne 0) { throw "Jetbot download failed: $relative" } Move-Item "$target.part" $target } $length = (Get-Item $target).Length $total += $length if ($total -gt 536870912) { throw 'Jetbot package exceeds 512 MiB budget' } $rows += [ordered]@{path=$relative; source_url=($origin+$relative); byte_length=$length; sha256=(Get-FileHash $target -Algorithm SHA256).Hash.ToLower()} } # OmniPBR.mdl and OmniGlass.mdl are bundled renderer materials, not remote assets. [ordered]@{schema_version='missioncore.ai-polygon-robot-assets/v1'; version='isaac-6.1-jetbot'; files=$rows; byte_length=$total; prepared_at=[DateTime]::UtcNow.ToString('o')} | ConvertTo-Json -Depth 5 | Set-Content -Encoding UTF8 $manifest Get-Content $manifest