$ErrorActionPreference = "Stop" Set-StrictMode -Version Latest Set-Location $PSScriptRoot function Assert-Command { param([Parameter(Mandatory = $true)][string]$Name) if (-not (Get-Command $Name -ErrorAction SilentlyContinue)) { throw "Required command '$Name' was not found on PATH." } } function Invoke-Step { param( [Parameter(Mandatory = $true)][string]$Title, [Parameter(Mandatory = $true)][scriptblock]$Action ) Write-Host "`n$Title" -ForegroundColor Yellow & $Action if ($LASTEXITCODE -ne 0) { throw "$Title failed with exit code $LASTEXITCODE." } } Write-Host "ForgeFlow v0.4.2 source update" -ForegroundColor Cyan Write-Host "Your Gitea token, repository mappings and deployment profiles are stored outside this source folder and are not reset." -ForegroundColor DarkGray Assert-Command node Assert-Command npm Assert-Command git $package = Get-Content ".\package.json" -Raw | ConvertFrom-Json if ($package.version -ne "0.4.2") { throw "This folder does not contain ForgeFlow v0.4.2. Detected version: $($package.version)" } Invoke-Step "Updating project dependencies..." { npm install --no-audit --no-fund } Invoke-Step "Running the environment doctor..." { npm run doctor } Invoke-Step "Running source verification and all automated tests..." { npm run check } Write-Host "`nForgeFlow v0.4.2 is ready." -ForegroundColor Green Write-Host "Starting ForgeFlow with your existing local configuration..." -ForegroundColor Green npm start