Private/Clean-VSCodeSyncedFiles.ps1

<#
    SPDX-License-Identifier: MIT
    Copyright (c) 2026 Leon McClatchey, Linktech Engineering LLC
 
    Package: VSCode-Updater
    Author: Leon McClatchey
    Company: Linktech Engineering LLC
    Created: 2026-07-17
    Modified: 2026-07-17
    File: Private/Clean-VSCodeSyncedFiles.ps1
    Version: 1.0.0
    Description: Description goes here
#>

function Clean-VSCodeSyncedFiles {
    [CmdletBinding()]
    param()

    if ($script:SafeMode) {
        Write-VSCodeUpdaterLog "[CLEANUP] SAFE MODE — synced files cleanup skipped"
        return
    }

    Write-VSCodeUpdaterLog "[CLEANUP] Starting synced files cleanup"

    $appData = Join-Path $env:APPDATA "Code"
    $localData = Join-Path $env:LOCALAPPDATA "Programs\Microsoft VS Code"

    $cachedData = Join-Path $appData "CachedData"
    if (Test-Path $cachedData) {
        Write-VSCodeUpdaterLog "[CLEANUP] Removing CachedData"
        Remove-Item $cachedData -Recurse -Force -ErrorAction SilentlyContinue | Out-Null
    }

    $cachedExt = Join-Path $appData "CachedExtensions"
    if (Test-Path $cachedExt) {
        Write-VSCodeUpdaterLog "[CLEANUP] Removing CachedExtensions"
        Remove-Item $cachedExt -Recurse -Force -ErrorAction SilentlyContinue | Out-Null
    }

    $logs = Join-Path $appData "logs"
    if (Test-Path $logs) {
        Write-VSCodeUpdaterLog "[CLEANUP] Removing logs"
        Remove-Item $logs -Recurse -Force -ErrorAction SilentlyContinue | Out-Null
    }

    $backups = Join-Path $appData "Backups"
    if (Test-Path $backups) {
        Write-VSCodeUpdaterLog "[CLEANUP] Removing Backups"
        Remove-Item $backups -Recurse -Force -ErrorAction SilentlyContinue | Out-Null
    }

    $crashpad = Join-Path $appData "Crashpad"
    if (Test-Path $crashpad) {
        Write-VSCodeUpdaterLog "[CLEANUP] Removing Crashpad"
        Remove-Item $crashpad -Recurse -Force -ErrorAction SilentlyContinue | Out-Null
    }

    $tmpExe = Join-Path $localData "Code.exe.tmp"
    if (Test-Path $tmpExe) {
        Write-VSCodeUpdaterLog "[CLEANUP] Removing Code.exe.tmp"
        Remove-Item $tmpExe -Force -ErrorAction SilentlyContinue | Out-Null
    }

    $partials = Get-ChildItem $localData -Directory -ErrorAction SilentlyContinue |
        Where-Object { $_.Name -match '^app-\d+\.\d+\.\d+-\d+$' }

    foreach ($p in $partials) {
        Write-VSCodeUpdaterLog "[CLEANUP] Removing partial install folder: $($p.FullName)"
        Remove-Item $p.FullName -Recurse -Force -ErrorAction SilentlyContinue | Out-Null
    }

    $stale = Get-Process -ErrorAction SilentlyContinue |
        Where-Object { $_.Name -match '^CodeHelper|^tmp$|tmp\.exe$|^is-[A-Za-z0-9]+' }

    foreach ($proc in $stale) {
        Write-VSCodeUpdaterLog "[CLEANUP] Killing stale process: $($proc.Name) (PID $($proc.Id))"
        Stop-Process -Id $proc.Id -Force -ErrorAction SilentlyContinue | Out-Null
    }

    Write-VSCodeUpdaterLog "[CLEANUP] Synced files cleanup completed"
}