param( [ValidateSet('production', 'demo')][string]$Mode = 'production', [switch]$SkipMigration ) . (Join-Path $PSScriptRoot 'sense-common.ps1') try { $root = Get-SensePackageRoot $state = Initialize-SenseRuntime -PackageRoot $root -Mode $Mode $sense = Join-Path $root 'sense.exe' if (-not (Test-Path -LiteralPath $sense -PathType Leaf)) { throw "Sense executable not found: $sense" } $autoMigrate = (Get-SenseEnvironmentValue -Name 'SENSE_AUTO_MIGRATE' -Default 'true').ToLowerInvariant() Push-Location $root try { if (-not $SkipMigration -and $autoMigrate -notin @('false', '0', 'no')) { Write-Host 'Applying pending Sense database migrations...' & $sense migrate -c $state.SettingsPath if ($LASTEXITCODE -ne 0) { throw 'Sense database migration failed. Review the error above and the PostgreSQL connection.' } } if ($Mode -eq 'demo') { Write-Warning 'Sense is running in isolated demo mode. Demo data must not be used as production data.' } Write-Host "Starting Sense at http://$($state.Host):$($state.Port)/ ..." Write-Host 'Press Ctrl+C in this window to stop Sense and its managed MediaMTX process.' & $sense server -c $state.SettingsPath exit $LASTEXITCODE } finally { Pop-Location } } catch { Write-Error $_.Exception.Message exit 1 }